summaryrefslogtreecommitdiffstats
path: root/js/src/octane
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 17:32:43 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 17:32:43 +0000
commit6bf0a5cb5034a7e684dcc3500e841785237ce2dd (patch)
treea68f146d7fa01f0134297619fbe7e33db084e0aa /js/src/octane
parentInitial commit. (diff)
downloadthunderbird-6bf0a5cb5034a7e684dcc3500e841785237ce2dd.tar.xz
thunderbird-6bf0a5cb5034a7e684dcc3500e841785237ce2dd.zip
Adding upstream version 1:115.7.0.upstream/1%115.7.0upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'js/src/octane')
-rw-r--r--js/src/octane/base.js390
-rw-r--r--js/src/octane/code-load.js1552
-rw-r--r--js/src/octane/crypto.js1698
-rw-r--r--js/src/octane/deltablue.js883
-rw-r--r--js/src/octane/earley-boyer.js4684
-rw-r--r--js/src/octane/gbemu-part1.js1350
-rw-r--r--js/src/octane/gbemu-part2.js9780
-rw-r--r--js/src/octane/index.html453
-rw-r--r--js/src/octane/mandreel.js277403
-rw-r--r--js/src/octane/navier-stokes.js415
-rw-r--r--js/src/octane/raytrace.js904
-rw-r--r--js/src/octane/richards.js539
-rw-r--r--js/src/octane/run-box2d.js59
-rw-r--r--js/src/octane/run-code-load.js59
-rw-r--r--js/src/octane/run-crypto.js59
-rw-r--r--js/src/octane/run-deltablue.js59
-rw-r--r--js/src/octane/run-earley-boyer.js59
-rw-r--r--js/src/octane/run-gbemu.js60
-rw-r--r--js/src/octane/run-mandreel.js59
-rw-r--r--js/src/octane/run-navier-stokes.js59
-rw-r--r--js/src/octane/run-pdfjs.js59
-rw-r--r--js/src/octane/run-raytrace.js59
-rw-r--r--js/src/octane/run-regexp.js59
-rw-r--r--js/src/octane/run-richards.js59
-rw-r--r--js/src/octane/run-splay.js59
-rw-r--r--js/src/octane/run-typescript.js61
-rw-r--r--js/src/octane/run-zlib.js60
-rw-r--r--js/src/octane/run.js77
-rw-r--r--js/src/octane/splay.js423
-rw-r--r--js/src/octane/typescript-compiler.js25745
-rw-r--r--js/src/octane/typescript.js172
-rw-r--r--js/src/octane/zlib-data.js2409
-rw-r--r--js/src/octane/zlib.js176
33 files changed, 329942 insertions, 0 deletions
diff --git a/js/src/octane/base.js b/js/src/octane/base.js
new file mode 100644
index 0000000000..9d6e3dee5d
--- /dev/null
+++ b/js/src/octane/base.js
@@ -0,0 +1,390 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following
+// disclaimer in the documentation and/or other materials provided
+// with the distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived
+// from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+// Performance.now is used in latency benchmarks, the fallback is Date.now.
+var performance = performance || {};
+performance.now = (function() {
+ return performance.now ||
+ performance.mozNow ||
+ performance.msNow ||
+ performance.oNow ||
+ performance.webkitNow ||
+ Date.now;
+})();
+
+// Simple framework for running the benchmark suites and
+// computing a score based on the timing measurements.
+
+
+// A benchmark has a name (string) and a function that will be run to
+// do the performance measurement. The optional setup and tearDown
+// arguments are functions that will be invoked before and after
+// running the benchmark, but the running time of these functions will
+// not be accounted for in the benchmark score.
+function Benchmark(name, doWarmup, doDeterministic, deterministicIterations,
+ run, setup, tearDown, rmsResult, minIterations) {
+ this.name = name;
+ this.doWarmup = doWarmup;
+ this.doDeterministic = doDeterministic;
+ this.deterministicIterations = deterministicIterations;
+ this.run = run;
+ this.Setup = setup ? setup : function() { };
+ this.TearDown = tearDown ? tearDown : function() { };
+ this.rmsResult = rmsResult ? rmsResult : null;
+ this.minIterations = minIterations ? minIterations : 32;
+}
+
+
+// Benchmark results hold the benchmark and the measured time used to
+// run the benchmark. The benchmark score is computed later once a
+// full benchmark suite has run to completion. If latency is set to 0
+// then there is no latency score for this benchmark.
+function BenchmarkResult(benchmark, time, latency) {
+ this.benchmark = benchmark;
+ this.time = time;
+ this.latency = latency;
+}
+
+
+// Automatically convert results to numbers. Used by the geometric
+// mean computation.
+BenchmarkResult.prototype.valueOf = function() {
+ return this.time;
+}
+
+
+// Suites of benchmarks consist of a name and the set of benchmarks in
+// addition to the reference timing that the final score will be based
+// on. This way, all scores are relative to a reference run and higher
+// scores implies better performance.
+function BenchmarkSuite(name, reference, benchmarks) {
+ this.name = name;
+ this.reference = reference;
+ this.benchmarks = benchmarks;
+ BenchmarkSuite.suites.push(this);
+}
+
+
+// Keep track of all declared benchmark suites.
+BenchmarkSuite.suites = [];
+
+// Scores are not comparable across versions. Bump the version if
+// you're making changes that will affect that scores, e.g. if you add
+// a new benchmark or change an existing one.
+BenchmarkSuite.version = '9';
+
+
+// Defines global benchsuite running mode that overrides benchmark suite
+// behavior. Intended to be set by the benchmark driver. Undefined
+// values here allow a benchmark to define behaviour itself.
+BenchmarkSuite.config = {
+ doWarmup: undefined,
+ doDeterministic: undefined
+};
+
+
+// Override the alert function to throw an exception instead.
+alert = function(s) {
+ throw "Alert called with argument: " + s;
+};
+
+
+// To make the benchmark results predictable, we replace Math.random
+// with a 100% deterministic alternative.
+BenchmarkSuite.ResetRNG = function() {
+ Math.random = (function() {
+ var seed = 49734321;
+ return function() {
+ // Robert Jenkins' 32 bit integer hash function.
+ seed = ((seed + 0x7ed55d16) + (seed << 12)) & 0xffffffff;
+ seed = ((seed ^ 0xc761c23c) ^ (seed >>> 19)) & 0xffffffff;
+ seed = ((seed + 0x165667b1) + (seed << 5)) & 0xffffffff;
+ seed = ((seed + 0xd3a2646c) ^ (seed << 9)) & 0xffffffff;
+ seed = ((seed + 0xfd7046c5) + (seed << 3)) & 0xffffffff;
+ seed = ((seed ^ 0xb55a4f09) ^ (seed >>> 16)) & 0xffffffff;
+ return (seed & 0xfffffff) / 0x10000000;
+ };
+ })();
+}
+
+
+// Runs all registered benchmark suites and optionally yields between
+// each individual benchmark to avoid running for too long in the
+// context of browsers. Once done, the final score is reported to the
+// runner.
+BenchmarkSuite.RunSuites = function(runner, skipBenchmarks) {
+ skipBenchmarks = typeof skipBenchmarks === 'undefined' ? [] : skipBenchmarks;
+ var continuation = null;
+ var suites = BenchmarkSuite.suites;
+ var length = suites.length;
+ BenchmarkSuite.scores = [];
+ var index = 0;
+ function RunStep() {
+ while (continuation || index < length) {
+ if (continuation) {
+ continuation = continuation();
+ } else {
+ var suite = suites[index++];
+ if (runner.NotifyStart) runner.NotifyStart(suite.name);
+ if (skipBenchmarks.indexOf(suite.name) > -1) {
+ suite.NotifySkipped(runner);
+ } else {
+ continuation = suite.RunStep(runner);
+ }
+ }
+ if (continuation && typeof window != 'undefined' && window.setTimeout) {
+ window.setTimeout(RunStep, 25);
+ return;
+ }
+ }
+
+ // show final result
+ if (runner.NotifyScore) {
+ var score = BenchmarkSuite.GeometricMean(BenchmarkSuite.scores);
+ var formatted = BenchmarkSuite.FormatScore(100 * score);
+ runner.NotifyScore(formatted);
+ }
+ }
+ RunStep();
+}
+
+
+// Counts the total number of registered benchmarks. Useful for
+// showing progress as a percentage.
+BenchmarkSuite.CountBenchmarks = function() {
+ var result = 0;
+ var suites = BenchmarkSuite.suites;
+ for (var i = 0; i < suites.length; i++) {
+ result += suites[i].benchmarks.length;
+ }
+ return result;
+}
+
+
+// Computes the geometric mean of a set of numbers.
+BenchmarkSuite.GeometricMean = function(numbers) {
+ var log = 0;
+ for (var i = 0; i < numbers.length; i++) {
+ log += Math.log(numbers[i]);
+ }
+ return Math.pow(Math.E, log / numbers.length);
+}
+
+
+// Computes the geometric mean of a set of throughput time measurements.
+BenchmarkSuite.GeometricMeanTime = function(measurements) {
+ var log = 0;
+ for (var i = 0; i < measurements.length; i++) {
+ log += Math.log(measurements[i].time);
+ }
+ return Math.pow(Math.E, log / measurements.length);
+}
+
+
+// Computes the geometric mean of a set of rms measurements.
+BenchmarkSuite.GeometricMeanLatency = function(measurements) {
+ var log = 0;
+ var hasLatencyResult = false;
+ for (var i = 0; i < measurements.length; i++) {
+ if (measurements[i].latency != 0) {
+ log += Math.log(measurements[i].latency);
+ hasLatencyResult = true;
+ }
+ }
+ if (hasLatencyResult) {
+ return Math.pow(Math.E, log / measurements.length);
+ } else {
+ return 0;
+ }
+}
+
+
+// Converts a score value to a string with at least three significant
+// digits.
+BenchmarkSuite.FormatScore = function(value) {
+ if (value > 100) {
+ return value.toFixed(0);
+ } else {
+ return value.toPrecision(3);
+ }
+}
+
+// Notifies the runner that we're done running a single benchmark in
+// the benchmark suite. This can be useful to report progress.
+BenchmarkSuite.prototype.NotifyStep = function(result) {
+ this.results.push(result);
+ if (this.runner.NotifyStep) this.runner.NotifyStep(result.benchmark.name);
+}
+
+
+// Notifies the runner that we're done with running a suite and that
+// we have a result which can be reported to the user if needed.
+BenchmarkSuite.prototype.NotifyResult = function() {
+ var mean = BenchmarkSuite.GeometricMeanTime(this.results);
+ var score = this.reference[0] / mean;
+ BenchmarkSuite.scores.push(score);
+ if (this.runner.NotifyResult) {
+ var formatted = BenchmarkSuite.FormatScore(100 * score);
+ this.runner.NotifyResult(this.name, formatted);
+ }
+ if (this.reference.length == 2) {
+ var meanLatency = BenchmarkSuite.GeometricMeanLatency(this.results);
+ if (meanLatency != 0) {
+ var scoreLatency = this.reference[1] / meanLatency;
+ BenchmarkSuite.scores.push(scoreLatency);
+ if (this.runner.NotifyResult) {
+ var formattedLatency = BenchmarkSuite.FormatScore(100 * scoreLatency)
+ this.runner.NotifyResult(this.name + "Latency", formattedLatency);
+ }
+ }
+ }
+}
+
+
+BenchmarkSuite.prototype.NotifySkipped = function(runner) {
+ BenchmarkSuite.scores.push(1); // push default reference score.
+ if (runner.NotifyResult) {
+ runner.NotifyResult(this.name, "Skipped");
+ }
+}
+
+
+// Notifies the runner that running a benchmark resulted in an error.
+BenchmarkSuite.prototype.NotifyError = function(error) {
+ if (this.runner.NotifyError) {
+ this.runner.NotifyError(this.name, error);
+ }
+ if (this.runner.NotifyStep) {
+ this.runner.NotifyStep(this.name);
+ }
+}
+
+
+// Runs a single benchmark for at least a second and computes the
+// average time it takes to run a single iteration.
+BenchmarkSuite.prototype.RunSingleBenchmark = function(benchmark, data) {
+ var config = BenchmarkSuite.config;
+ var doWarmup = config.doWarmup !== undefined
+ ? config.doWarmup
+ : benchmark.doWarmup;
+ var doDeterministic = config.doDeterministic !== undefined
+ ? config.doDeterministic
+ : benchmark.doDeterministic;
+
+ function Measure(data) {
+ var elapsed = 0;
+ var start = new Date();
+
+ // Run either for 1 second or for the number of iterations specified
+ // by minIterations, depending on the config flag doDeterministic.
+ for (var i = 0; (doDeterministic ?
+ i<benchmark.deterministicIterations : elapsed < 1000); i++) {
+ benchmark.run();
+ elapsed = new Date() - start;
+ }
+ if (data != null) {
+ data.runs += i;
+ data.elapsed += elapsed;
+ }
+ }
+
+ // Sets up data in order to skip or not the warmup phase.
+ if (!doWarmup && data == null) {
+ data = { runs: 0, elapsed: 0 };
+ }
+
+ if (data == null) {
+ Measure(null);
+ return { runs: 0, elapsed: 0 };
+ } else {
+ Measure(data);
+ // If we've run too few iterations, we continue for another second.
+ if (data.runs < benchmark.minIterations) return data;
+ var usec = (data.elapsed * 1000) / data.runs;
+ var rms = (benchmark.rmsResult != null) ? benchmark.rmsResult() : 0;
+ this.NotifyStep(new BenchmarkResult(benchmark, usec, rms));
+ return null;
+ }
+}
+
+
+// This function starts running a suite, but stops between each
+// individual benchmark in the suite and returns a continuation
+// function which can be invoked to run the next benchmark. Once the
+// last benchmark has been executed, null is returned.
+BenchmarkSuite.prototype.RunStep = function(runner) {
+ BenchmarkSuite.ResetRNG();
+ this.results = [];
+ this.runner = runner;
+ var length = this.benchmarks.length;
+ var index = 0;
+ var suite = this;
+ var data;
+
+ // Run the setup, the actual benchmark, and the tear down in three
+ // separate steps to allow the framework to yield between any of the
+ // steps.
+
+ function RunNextSetup() {
+ if (index < length) {
+ try {
+ suite.benchmarks[index].Setup();
+ } catch (e) {
+ suite.NotifyError(e);
+ return null;
+ }
+ return RunNextBenchmark;
+ }
+ suite.NotifyResult();
+ return null;
+ }
+
+ function RunNextBenchmark() {
+ try {
+ data = suite.RunSingleBenchmark(suite.benchmarks[index], data);
+ } catch (e) {
+ suite.NotifyError(e);
+ return null;
+ }
+ // If data is null, we're done with this benchmark.
+ return (data == null) ? RunNextTearDown : RunNextBenchmark();
+ }
+
+ function RunNextTearDown() {
+ try {
+ suite.benchmarks[index++].TearDown();
+ } catch (e) {
+ suite.NotifyError(e);
+ return null;
+ }
+ return RunNextSetup;
+ }
+
+ // Start out running the setup.
+ return RunNextSetup();
+}
diff --git a/js/src/octane/code-load.js b/js/src/octane/code-load.js
new file mode 100644
index 0000000000..82cb071a42
--- /dev/null
+++ b/js/src/octane/code-load.js
@@ -0,0 +1,1552 @@
+// Copyright 2013 the Octane Benchmark project authors. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following
+// disclaimer in the documentation and/or other materials provided
+// with the distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived
+// from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+// The code in BASE_JS below:
+// Copyright 2012 The Closure Library Authors. All Rights Reserved.
+//
+// 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.
+
+
+// The code in JQUERY_JS below:
+// Copyright (c) 2012 John Resig, http://jquery.com/
+//
+// 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.
+
+
+var CodeLoad = new BenchmarkSuite('CodeLoad', [450000], [
+ new Benchmark('CodeLoadClosure',
+ false,
+ false,
+ 1600,
+ runCodeLoadClosure,
+ setupCodeLoad,
+ tearDownCodeLoad,
+ null,
+ 16),
+ new Benchmark('CodeLoadJQuery',
+ false,
+ false,
+ 100,
+ runCodeLoadJQuery,
+ setupCodeLoad,
+ tearDownCodeLoad,
+ null,
+ 16)
+]);
+
+var salt;
+var indirectEval;
+
+function setupCodeLoad() {
+ salt = 0;
+ indirectEval = eval;
+}
+
+function tearDownCodeLoad() {
+ salt = null;
+ indirectEval = null;
+}
+
+function runCodeLoadClosure() {
+ runClosure();
+ salt++;
+}
+
+function runCodeLoadJQuery() {
+ runJQuery();
+ salt++;
+}
+
+/*
+ * BASE_JS is a compiled and formatted version of:
+ * http://code.google.com/p/closure-library/source/browse/trunk/closure/goog/base.js
+ * JQUERY_JS is a formatted copy of:
+ * http://code.jquery.com/jquery.min.js
+ * The following Python script generates both variables:
+
+#!/usr/bin/env python
+
+import urllib
+import urllib2
+
+def escape_and_format(data, varname):
+ data = data.replace("\n", " ").replace("; ", ";")
+ data = data.replace("\\", "\\\\").replace("\"", "\\\"")
+ data = "var " + varname + " = \"" + data + "\""
+ while len(data) > 0:
+ cutoff = min(79, len(data))
+ while data[cutoff-1] == '\\':
+ cutoff -= 1
+ line = data[0:cutoff]
+ data = data[cutoff:]
+ if len(data) > 0:
+ line += '\\'
+ print line
+
+url = "http://closure-compiler.appspot.com/compile"
+request_params = {"output_format": "text",
+ "compilation_level": "SIMPLE_OPTIMIZATIONS",
+ "use_closure_library": "true",
+ "js_code": "",
+ "output_info": "compiled_code"}
+result = urllib2.urlopen(url, urllib.urlencode(request_params))
+escape_and_format(result.read(), "BASE_JS")
+
+print "\n\n"
+
+url = "http://code.jquery.com/jquery.min.js"
+result = urllib2.urlopen(url)
+escape_and_format(result.read(), "JQUERY_JS")
+
+*/
+var BASE_JS = "var COMPILED=!0,goog=goog||{};goog.global=this;goog.DEBUG=!0;goo\
+g.LOCALE=\"en\";goog.provide=function(a){if(!COMPILED){if(goog.isProvided_(a))t\
+hrow Error('Namespace \"'+a+'\" already declared.');delete goog.implicitNamespa\
+ces_[a];for(var b=a;(b=b.substring(0,b.lastIndexOf(\".\")))&&!goog.getObjectByN\
+ame(b);)goog.implicitNamespaces_[b]=!0}goog.exportPath_(a)};goog.setTestOnly=fu\
+nction(a){if(COMPILED&&!goog.DEBUG)throw a=a||\"\",Error(\"Importing test-only \
+code into non-debug environment\"+a?\": \"+a:\".\");};COMPILED||(goog.isProvide\
+d_=function(a){return!goog.implicitNamespaces_[a]&&!!goog.getObjectByName(a)},g\
+oog.implicitNamespaces_={});goog.exportPath_=function(a,b,c){a=a.split(\".\");c\
+=c||goog.global;!(a[0]in c)&&c.execScript&&c.execScript(\"var \"+a[0]);for(var \
+d;a.length&&(d=a.shift());)!a.length&&goog.isDef(b)?c[d]=b:c=c[d]?c[d]:c[d]={}}\
+;goog.getObjectByName=function(a,b){for(var c=a.split(\".\"),d=b||goog.global,e\
+;e=c.shift();)if(goog.isDefAndNotNull(d[e]))d=d[e];else return null;return d};g\
+oog.globalize=function(a,b){var c=b||goog.global,d;for(d in a)c[d]=a[d]};goog.a\
+ddDependency=function(a,b,c){if(!COMPILED){for(var d,a=a.replace(/\\\\/g,\"/\")\
+,e=goog.dependencies_,g=0;d=b[g];g++){e.nameToPath[d]=a;a in e.pathToNames||(e.\
+pathToNames[a]={});e.pathToNames[a][d]=true}for(d=0;b=c[d];d++){a in e.requires\
+||(e.requires[a]={});e.requires[a][b]=true}}};goog.ENABLE_DEBUG_LOADER=!0;goog.\
+require=function(a){if(!COMPILED&&!goog.isProvided_(a)){if(goog.ENABLE_DEBUG_LO\
+ADER){var b=goog.getPathFromDeps_(a);if(b){goog.included_[b]=true;goog.writeScr\
+ipts_();return}}a=\"goog.require could not find: \"+a;goog.global.console&&goog\
+.global.console.error(a);throw Error(a);}};goog.basePath=\"\";goog.nullFunction\
+=function(){};goog.identityFunction=function(a){return a};goog.abstractMethod=f\
+unction(){throw Error(\"unimplemented abstract method\");};goog.addSingletonGet\
+ter=function(a){a.getInstance=function(){return a.instance_||(a.instance_=new a\
+)}};!COMPILED&&goog.ENABLE_DEBUG_LOADER&&(goog.included_={},goog.dependencies_=\
+{pathToNames:{},nameToPath:{},requires:{},visited:{},written:{}},goog.inHtmlDoc\
+ument_=function(){var a=goog.global.document;return typeof a!=\"undefined\"&&\"\
+write\"in a},goog.findBasePath_=function(){if(goog.global.CLOSURE_BASE_PATH)goo\
+g.basePath=goog.global.CLOSURE_BASE_PATH;else if(goog.inHtmlDocument_())for(var\
+ a=goog.global.document.getElementsByTagName(\"script\"),b=a.length-1;b>=0;--b)\
+{var c=a[b].src,d=c.lastIndexOf(\"?\"), d=d==-1?c.length:d;if(c.substr(d-7,7)==\
+\"base.js\"){goog.basePath=c.substr(0,d-7);break}}},goog.importScript_=function\
+(a){var b=goog.global.CLOSURE_IMPORT_SCRIPT||goog.writeScriptTag_;!goog.depende\
+ncies_.written[a]&&b(a)&&(goog.dependencies_.written[a]=true)},goog.writeScript\
+Tag_=function(a){if(goog.inHtmlDocument_()){goog.global.document.write('<script\
+ type=\"text/javascript\" src=\"'+a+'\"><\\/script>');return true}return false}\
+,goog.writeScripts_=function(){function a(e){if(!(e in d.written)){if(!(e in d.\
+visited)){d.visited[e]=true;if(e in d.requires)for(var f in d.requires[e])if(!g\
+oog.isProvided_(f))if(f in d.nameToPath)a(d.nameToPath[f]);else throw Error(\"U\
+ndefined nameToPath for \"+f);}if(!(e in c)){c[e]=true;b.push(e)}}}var b=[],c={\
+},d=goog.dependencies_,e;for(e in goog.included_)d.written[e]||a(e);for(e=0;e<b\
+.length;e++)if(b[e])goog.importScript_(goog.basePath+b[e]);else throw Error(\"U\
+ndefined script input\");},goog.getPathFromDeps_=function(a){return a in goog.d\
+ependencies_.nameToPath?goog.dependencies_.nameToPath[a]: null},goog.findBasePa\
+th_(),goog.global.CLOSURE_NO_DEPS||goog.importScript_(goog.basePath+\"deps.js\"\
+));goog.typeOf=function(a){var b=typeof a;if(b==\"object\")if(a){if(a instanceo\
+f Array)return\"array\";if(a instanceof Object)return b;var c=Object.prototype.\
+toString.call(a);if(c==\"[object Window]\")return\"object\";if(c==\"[object Arr\
+ay]\"||typeof a.length==\"number\"&&typeof a.splice!=\"undefined\"&&typeof a.pr\
+opertyIsEnumerable!=\"undefined\"&&!a.propertyIsEnumerable(\"splice\"))return\"\
+array\";if(c==\"[object Function]\"||typeof a.call!=\"undefined\"&&typeof a.pro\
+pertyIsEnumerable!=\"undefined\"&&!a.propertyIsEnumerable(\"call\"))return\"fun\
+ction\"}else return\"null\";else if(b==\"function\"&&typeof a.call==\"undefined\
+\")return\"object\";return b};goog.isDef=function(a){return a!==void 0};goog.is\
+Null=function(a){return a===null};goog.isDefAndNotNull=function(a){return a!=nu\
+ll};goog.isArray=function(a){return goog.typeOf(a)==\"array\"};goog.isArrayLike\
+=function(a){var b=goog.typeOf(a);return b==\"array\"||b==\"object\"&&typeof a.\
+length==\"number\"};goog.isDateLike=function(a){return goog.isObject(a)&&typeof\
+ a.getFullYear==\"function\"};goog.isString=function(a){return typeof a==\"stri\
+ng\"};goog.isBoolean=function(a){return typeof a==\"boolean\"};goog.isNumber=fu\
+nction(a){return typeof a==\"number\"};goog.isFunction=function(a){return goog.\
+typeOf(a)==\"function\"};goog.isObject=function(a){var b=typeof a;return b==\"o\
+bject\"&&a!=null||b==\"function\"};goog.getUid=function(a){return a[goog.UID_PR\
+OPERTY_]||(a[goog.UID_PROPERTY_]=++goog.uidCounter_)};goog.removeUid=function(a\
+){\"removeAttribute\"in a&&a.removeAttribute(goog.UID_PROPERTY_);try{delete a[g\
+oog.UID_PROPERTY_]}catch(b){}};goog.UID_PROPERTY_=\"closure_uid_\"+Math.floor(2\
+147483648*Math.random()).toString(36);goog.uidCounter_=0;goog.getHashCode=goog.\
+getUid;goog.removeHashCode=goog.removeUid;goog.cloneObject=function(a){var b=go\
+og.typeOf(a);if(b==\"object\"||b==\"array\"){if(a.clone)return a.clone();var b=\
+b==\"array\"?[]:{},c;for(c in a)b[c]=goog.cloneObject(a[c]);return b}return a};\
+goog.bindNative_=function(a,b,c){return a.call.apply(a.bind,arguments)};goog.bi\
+ndJs_=function(a,b,c){if(!a)throw Error();if(arguments.length>2){var d=Array.pr\
+ototype.slice.call(arguments,2);return function(){var c=Array.prototype.slice.c\
+all(arguments);Array.prototype.unshift.apply(c,d);return a.apply(b,c)}}return f\
+unction(){return a.apply(b,arguments)}};goog.bind=function(a,b,c){goog.bind=Fun\
+ction.prototype.bind&&Function.prototype.bind.toString().indexOf(\"native code\
+\")!=-1?goog.bindNative_:goog.bindJs_;return goog.bind.apply(null,arguments)};g\
+oog.partial=function(a,b){var c=Array.prototype.slice.call(arguments,1);return \
+function(){var b=Array.prototype.slice.call(arguments);b.unshift.apply(b,c);ret\
+urn a.apply(this,b)}};goog.mixin=function(a,b){for(var c in b)a[c]=b[c]};goog.n\
+ow=Date.now||function(){return+new Date};goog.globalEval=function(a){if(goog.gl\
+obal.execScript)goog.global.execScript(a,\"JavaScript\");else if(goog.global.ev\
+al){if(goog.evalWorksForGlobals_==null){goog.global.eval(\"var _et_ = 1;\");if(\
+typeof goog.global._et_!=\"undefined\"){delete goog.global._et_;goog.evalWorksF\
+orGlobals_=true}else goog.evalWorksForGlobals_=false}if(goog.evalWorksForGlobal\
+s_)goog.global.eval(a);else{var b=goog.global.document,c=b.createElement(\"scri\
+pt\");c.type=\"text/javascript\";c.defer=false;c.appendChild(b.createTextNode(a\
+));b.body.appendChild(c);b.body.removeChild(c)}}else throw Error(\"goog.globalE\
+val not available\");};goog.evalWorksForGlobals_=null;goog.getCssName=function(\
+a,b){var c=function(a){return goog.cssNameMapping_[a]||a},d=function(a){for(var\
+ a=a.split(\"-\"),b=[],d=0;d<a.length;d++)b.push(c(a[d]));return b.join(\"-\")}\
+,d=goog.cssNameMapping_?goog.cssNameMappingStyle_==\"BY_WHOLE\"?c:d:function(a)\
+{return a};return b?a+\"-\"+d(b):d(a)};goog.setCssNameMapping=function(a,b){goo\
+g.cssNameMapping_=a;goog.cssNameMappingStyle_=b};!COMPILED&&goog.global.CLOSURE\
+_CSS_NAME_MAPPING&&(goog.cssNameMapping_=goog.global.CLOSURE_CSS_NAME_MAPPING);\
+goog.getMsg=function(a,b){var c=b||{},d;for(d in c)var e=(\"\"+c[d]).replace(/\
+\\$/g,\"$$$$\"),a=a.replace(RegExp(\"\\\\{\\\\$\"+d+\"\\\\}\",\"gi\"),e);return\
+ a};goog.exportSymbol=function(a,b,c){goog.exportPath_(a,b,c)};goog.exportPrope\
+rty=function(a,b,c){a[b]=c};goog.inherits=function(a,b){function c(){}c.prototy\
+pe=b.prototype;a.superClass_=b.prototype;a.prototype=new c;a.prototype.construc\
+tor=a};goog.base=function(a,b,c){var d=arguments.callee.caller;if(d.superClass_\
+)return d.superClass_.constructor.apply(a,Array.prototype.slice.call(arguments,\
+1));for(var e=Array.prototype.slice.call(arguments,2),g=false,f=a.constructor;f\
+;f=f.superClass_&&f.superClass_.constructor)if(f.prototype[b]===d)g=true;else i\
+f(g)return f.prototype[b].apply(a,e);if(a[b]===d)return a.constructor.prototype\
+[b].apply(a,e);throw Error(\"goog.base called from a method of one name to a me\
+thod of a different name\");};goog.scope=function(a){a.call(goog.global)};"
+
+var JQUERY_JS = "/*! jQuery v1.7.2 jquery.com | jquery.org/license */ (function\
+(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.par\
+entWindow:!1}function cu(a){if(!cj[a]){var b=c.body,d=f(\"<\"+a+\">\").appendTo\
+(b),e=d.css(\"display\");d.remove();if(e===\"none\"||e===\"\"){ck||(ck=c.create\
+Element(\"iframe\"),ck.frameBorder=ck.width=ck.height=0),b.appendChild(ck);if(!\
+cl||!ck.createElement)cl=(ck.contentWindow||ck.contentDocument).document,cl.wri\
+te((f.support.boxModel?\"<!doctype html>\":\"\")+\"<html><body>\"),cl.close();d\
+=cl.createElement(a),cl.body.appendChild(d),e=f.css(d,\"display\"),b.removeChil\
+d(ck)}cj[a]=e}return cj[a]}function ct(a,b){var c={};f.each(cp.concat.apply([],\
+cp.slice(0,b)),function(){c[this]=a});return c}function cs(){cq=b}function cr()\
+{setTimeout(cs,0);return cq=f.now()}function ci(){try{return new a.ActiveXObjec\
+t(\"Microsoft.XMLHTTP\")}catch(b){}}function ch(){try{return new a.XMLHttpReque\
+st}catch(b){}}function cb(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var\
+ d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1\
+)for(h in a.converters)typeof h==\"string\"&&(e[h.toLowerCase()]=a.converters[h\
+]);l=k,k=d[g];if(k===\"*\")k=l;else if(l!==\"*\"&&l!==k){m=l+\" \"+k,n=e[m]||e[\
+\"* \"+k];if(!n){p=b;for(o in e){j=o.split(\" \");if(j[0]===l||j[0]===\"*\"){p=\
+e[j[1]+\" \"+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error(\
+\"No conversion from \"+m.replace(\" \",\" to \")),n!==!0&&(c=n?n(c):p(o(c)))}}\
+return c}function ca(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h\
+,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]===\"*\")f.shift(),h===b&&(h\
+=a.mimeType||c.getResponseHeader(\"content-type\"));if(h)for(i in e)if(e[i]&&e[\
+i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.\
+converters[i+\" \"+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j\
+);return d[j]}}function b_(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||b\
+D.test(a)?d(a,e):b_(a+\"[\"+(typeof e==\"object\"?b:\"\")+\"]\",e,c,d)});else i\
+f(!c&&f.type(b)===\"object\")for(var e in b)b_(a+\"[\"+e+\"]\",b[e],c,d);else d\
+(a,b)}function b$(a,c){var d,e,g=f.ajaxSettings.flatOptions||{};for(d in c)c[d]\
+!==b&&((g[d]?a:e||(e={}))[d]=c[d]);e&&f.extend(!0,a,e)}function bZ(a,c,d,e,f,g)\
+{f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bS,l;f\
+or(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l==\"string\"&&(!k||g[l]?l=b:(c.dataT\
+ypes.unshift(l),l=bZ(a,c,d,e,l,g)));(k||!l)&&!g[\"*\"]&&(l=bZ(a,c,d,e,\"*\",g))\
+;return l}function bY(a){return function(b,c){typeof b!=\"string\"&&(c=b,b=\"*\
+\");if(f.isFunction(c)){var d=b.toLowerCase().split(bO),e=0,g=d.length,h,i,j;fo\
+r(;e<g;e++)h=d[e],j=/^\\+/.test(h),j&&(h=h.substr(1)||\"*\"),i=a[h]=a[h]||[],i[\
+j?\"unshift\":\"push\"](c)}}}function bB(a,b,c){var d=b===\"width\"?a.offsetWid\
+th:a.offsetHeight,e=b===\"width\"?1:0,g=4;if(d>0){if(c!==\"border\")for(;e<g;e+\
+=2)c||(d-=parseFloat(f.css(a,\"padding\"+bx[e]))||0),c===\"margin\"?d+=parseFlo\
+at(f.css(a,c+bx[e]))||0:d-=parseFloat(f.css(a,\"border\"+bx[e]+\"Width\"))||0;r\
+eturn d+\"px\"}d=by(a,b);if(d<0||d==null)d=a.style[b];if(bt.test(d))return d;d=\
+parseFloat(d)||0;if(c)for(;e<g;e+=2)d+=parseFloat(f.css(a,\"padding\"+bx[e]))||\
+0,c!==\"padding\"&&(d+=parseFloat(f.css(a,\"border\"+bx[e]+\"Width\"))||0),c===\
+\"margin\"&&(d+=parseFloat(f.css(a,c+bx[e]))||0);return d+\"px\"}function bo(a)\
+{var b=c.createElement(\"div\");bh.appendChild(b),b.innerHTML=a.outerHTML;retur\
+n b.firstChild}function bn(a){var b=(a.nodeName||\"\").toLowerCase();b===\"inpu\
+t\"?bm(a):b!==\"script\"&&typeof a.getElementsByTagName!=\"undefined\"&&f.grep(\
+a.getElementsByTagName(\"input\"),bm)}function bm(a){if(a.type===\"checkbox\"||\
+a.type===\"radio\")a.defaultChecked=a.checked}function bl(a){return typeof a.ge\
+tElementsByTagName!=\"undefined\"?a.getElementsByTagName(\"*\"):typeof a.queryS\
+electorAll!=\"undefined\"?a.querySelectorAll(\"*\"):[]}function bk(a,b){var c;b\
+.nodeType===1&&(b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mer\
+geAttributes(a),c=b.nodeName.toLowerCase(),c===\"object\"?b.outerHTML=a.outerHT\
+ML:c!==\"input\"||a.type!==\"checkbox\"&&a.type!==\"radio\"?c===\"option\"?b.se\
+lected=a.defaultSelected:c===\"input\"||c===\"textarea\"?b.defaultValue=a.defau\
+ltValue:c===\"script\"&&b.text!==a.text&&(b.text=a.text):(a.checked&&(b.default\
+Checked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value)),b.removeAttr\
+ibute(f.expando),b.removeAttribute(\"_submit_attached\"),b.removeAttribute(\"_c\
+hange_attached\"))}function bj(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c,d,\
+e,g=f._data(a),h=f._data(b,g),i=g.events;if(i){delete h.handle,h.events={};for(\
+c in i)for(d=0,e=i[c].length;d<e;d++)f.event.add(b,c,i[c][d])}h.data&&(h.data=f\
+.extend({},h.data))}}function bi(a,b){return f.nodeName(a,\"table\")?a.getEleme\
+ntsByTagName(\"tbody\")[0]||a.appendChild(a.ownerDocument.createElement(\"tbody\
+\")):a}function U(a){var b=V.split(\"|\"),c=a.createDocumentFragment();if(c.cre\
+ateElement)while(b.length)c.createElement(b.pop());return c}function T(a,b,c){b\
+=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);re\
+turn e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(\
+typeof b==\"string\"){var d=f.grep(a,function(a){return a.nodeType===1});if(O.t\
+est(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){re\
+turn f.inArray(a,b)>=0===c})}function S(a){return!a||!a.parentNode||a.parentNod\
+e.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){v\
+ar d=b+\"defer\",e=b+\"queue\",g=b+\"mark\",h=f._data(a,d);h&&(c===\"queue\"||!\
+f._data(a,e))&&(c===\"mark\"||!f._data(a,g))&&setTimeout(function(){!f._data(a,\
+e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b \
+in a){if(b===\"data\"&&f.isEmptyObject(a[b]))continue;if(b!==\"toJSON\")return!\
+1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e=\"data-\"+c.replac\
+e(k,\"-$1\").toLowerCase();d=a.getAttribute(e);if(typeof d==\"string\"){try{d=d\
+===\"true\"?!0:d===\"false\"?!1:d===\"null\"?null:f.isNumeric(d)?+d:j.test(d)?f\
+.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g\
+[a]={},c,d;a=a.split(/\\s+/);for(c=0,d=a.length;c<d;c++)b[a[c]]=!0;return b}var\
+ c=a.document,d=a.navigator,e=a.location,f=function(){function J(){if(!e.isRead\
+y){try{c.documentElement.doScroll(\"left\")}catch(a){setTimeout(J,1);return}e.r\
+eady()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/\
+^(?:[^#<]*(<[\\w\\W]+>)[^>]*$|#([\\w\\-]*)$)/,j=/\\S/,k=/^\\s+/,l=/\\s+$/,m=/^<\
+(\\w+)\\s*\\/?>(?:<\\/\\1>)?$/,n=/^[\\],:{}\\s]*$/,o=/\\\\(?:[\"\\\\\\/bfnrt]|u\
+[0-9a-fA-F]{4})/g,p=/\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:\
+[eE][+\\-]?\\d+)?/g,q=/(?:^|:|,)(?:\\s*\\[)+/g,r=/(webkit)[ \\/]([\\w.]+)/,s=/(\
+opera)(?:.*version)?[ \\/]([\\w.]+)/,t=/(msie) ([\\w.]+)/,u=/(mozilla)(?:.*? rv\
+:([\\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+\"\").toU\
+pperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.\
+hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototyp\
+e.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:func\
+tion(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a\
+,this.length=1;return this}if(a===\"body\"&&!d&&c.body){this.context=c,this[0]=\
+c.body,this.selector=a,this.length=1;return this}if(typeof a==\"string\"){a.cha\
+rAt(0)!==\"<\"||a.charAt(a.length-1)!==\">\"||a.length<3?g=i.exec(a):g=[null,a,\
+null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d\
+:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a\
+,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable\
+?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElem\
+entById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1\
+,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f)\
+.find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.sel\
+ector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray\
+(a,this)},selector:\"\",jquery:\"1.7.2\",length:0,size:function(){return this.l\
+ength},toArray:function(){return F.call(this,0)},get:function(a){return a==null\
+?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var \
+d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d\
+.context=this.context,b===\"find\"?d.selector=this.selector+(this.selector?\" \
+\":\"\")+c:b&&(d.selector=this.selector+\".\"+b+\"(\"+c+\")\");return d},each:f\
+unction(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);\
+return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)}\
+,first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:\
+function(){return this.pushStack(F.apply(this,arguments),\"slice\",F.call(argum\
+ents).join(\",\"))},map:function(a){return this.pushStack(e.map(this,function(b\
+,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constr\
+uctor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.e\
+xtend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments\
+.length,l=!1;typeof i==\"boolean\"&&(l=i,i=arguments[1]||{},j=2),typeof i!=\"ob\
+ject\"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=argumen\
+ts[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject\
+(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)\
+?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:func\
+tion(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,rea\
+dyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){i\
+f(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.re\
+ady,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;A.fireWith(c,[e]),e.fn.tr\
+igger&&e(c).trigger(\"ready\").off(\"ready\")}},bindReady:function(){if(!A){A=e\
+.Callbacks(\"once memory\");if(c.readyState===\"complete\")return setTimeout(e.\
+ready,1);if(c.addEventListener)c.addEventListener(\"DOMContentLoaded\",B,!1),a.\
+addEventListener(\"load\",e.ready,!1);else if(c.attachEvent){c.attachEvent(\"on\
+readystatechange\",B),a.attachEvent(\"onload\",e.ready);var b=!1;try{b=a.frameE\
+lement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:functio\
+n(a){return e.type(a)===\"function\"},isArray:Array.isArray||function(a){return\
+ e.type(a)===\"array\"},isWindow:function(a){return a!=null&&a==a.window},isNum\
+eric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){ret\
+urn a==null?String(a):I[C.call(a)]||\"object\"},isPlainObject:function(a){if(!a\
+||e.type(a)!==\"object\"||a.nodeType||e.isWindow(a))return!1;try{if(a.construct\
+or&&!D.call(a,\"constructor\")&&!D.call(a.constructor.prototype,\"isPrototypeOf\
+\"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isE\
+mptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){thro\
+w new Error(a)},parseJSON:function(b){if(typeof b!=\"string\"||!b)return null;b\
+=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o\
+,\"@\").replace(p,\"]\").replace(q,\"\")))return(new Function(\"return \"+b))()\
+;e.error(\"Invalid JSON: \"+b)},parseXML:function(c){if(typeof c!=\"string\"||!\
+c)return null;var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,\"\
+text/xml\")):(d=new ActiveXObject(\"Microsoft.XMLDOM\"),d.async=\"false\",d.loa\
+dXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName(\"parsere\
+rror\").length)&&e.error(\"Invalid XML: \"+c);return d},noop:function(){},globa\
+lEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b\
+)},camelCase:function(a){return a.replace(w,\"ms-\").replace(v,x)},nodeName:fun\
+ction(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:\
+function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f\
+ in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)br\
+eak}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c\
+.call(a[g],g,a[g++])===!1)break;return a},trim:G?function(a){return a==null?\"\
+\":G.call(a)}:function(a){return a==null?\"\":(a+\"\").replace(k,\"\").replace(\
+l,\"\")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.leng\
+th==null||d===\"string\"||d===\"function\"||d===\"regexp\"||e.isWindow(a)?E.cal\
+l(c,a):e.merge(c,a)}return c},inArray:function(a,b,c){var d;if(b){if(H)return H\
+.call(b,a,c);d=b.length,c=c?c<0?Math.max(0,d+c):c:0;for(;c<d;c++)if(c in b&&b[c\
+]===a)return c}return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.len\
+gth==\"number\")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d+\
++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=\
+0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a\
+,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j==\"number\"\
+&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=n\
+ull&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);ret\
+urn h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c==\"string\"){v\
+ar d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=F.call(arguments,2),g=func\
+tion(){return a.apply(c,f.concat(F.call(arguments)))};g.guid=a.guid=a.guid||g.g\
+uid||e.guid++;return g},access:function(a,c,d,f,g,h,i){var j,k=d==null,l=0,m=a.\
+length;if(d&&typeof d==\"object\"){for(l in d)e.access(a,c,l,d[l],1,h,f);g=1}el\
+se if(f!==b){j=i===b&&e.isFunction(f),k&&(j?(j=c,c=function(a,b,c){return j.cal\
+l(e(a),c)}):(c.call(a,f),c=null));if(c)for(;l<m;l++)c(a[l],d,j?f.call(a[l],l,c(\
+a[l],d)):f,i);g=1}return g?a:k?c.call(a):m?c(a[0],d):h},now:function(){return(n\
+ew Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=r.exec(a)||s.ex\
+ec(a)||t.exec(a)||a.indexOf(\"compatible\")<0&&u.exec(a)||[];return{browser:b[1\
+]||\"\",version:b[2]||\"0\"}},sub:function(){function a(b,c){return new a.fn.in\
+it(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.cons\
+tructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanc\
+eof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;va\
+r b=a(c);return a},browser:{}}),e.each(\"Boolean Number String Function Array D\
+ate RegExp Object\".split(\" \"),function(a,b){I[\"[object \"+b+\"]\"]=b.toLowe\
+rCase()}),z=e.uaMatch(y),z.browser&&(e.browser[z.browser]=!0,e.browser.version=\
+z.version),e.browser.webkit&&(e.browser.safari=!0),j.test(\" \")&&(k=/^[\\s\\x\
+A0]+/,l=/[\\s\\xA0]+$/),h=e(c),c.addEventListener?B=function(){c.removeEventLis\
+tener(\"DOMContentLoaded\",B,!1),e.ready()}:c.attachEvent&&(B=function(){c.read\
+yState===\"complete\"&&(c.detachEvent(\"onreadystatechange\",B),e.ready())});re\
+turn e}(),g={};f.Callbacks=function(a){a=a?g[a]||h(a):{};var c=[],d=[],e,i,j,k,\
+l,m,n=function(b){var d,e,g,h,i;for(d=0,e=b.length;d<e;d++)g=b[d],h=f.type(g),h\
+===\"array\"?n(g):h===\"function\"&&(!a.unique||!p.has(g))&&c.push(g)},o=functi\
+on(b,f){f=f||[],e=!a.memory||[b,f],i=!0,j=!0,m=k||0,k=0,l=c.length;for(;c&&m<l;\
+m++)if(c[m].apply(b,f)===!1&&a.stopOnFalse){e=!0;break}j=!1,c&&(a.once?e===!0?p\
+.disable():c=[]:d&&d.length&&(e=d.shift(),p.fireWith(e[0],e[1])))},p={add:funct\
+ion(){if(c){var a=c.length;n(arguments),j?l=c.length:e&&e!==!0&&(k=a,o(e[0],e[1\
+]))}return this},remove:function(){if(c){var b=arguments,d=0,e=b.length;for(;d<\
+e;d++)for(var f=0;f<c.length;f++)if(b[d]===c[f]){j&&f<=l&&(l--,f<=m&&m--),c.spl\
+ice(f--,1);if(a.unique)break}}return this},has:function(a){if(c){var b=0,d=c.le\
+ngth;for(;b<d;b++)if(a===c[b])return!0}return!1},empty:function(){c=[];return t\
+his},disable:function(){c=d=e=b;return this},disabled:function(){return!c},lock\
+:function(){d=b,(!e||e===!0)&&p.disable();return this},locked:function(){return\
+!d},fireWith:function(b,c){d&&(j?a.once||d.push([b,c]):(!a.once||!e)&&o(b,c));r\
+eturn this},fire:function(){p.fireWith(this,arguments);return this},fired:funct\
+ion(){return!!i}};return p};var i=[].slice;f.extend({Deferred:function(a){var b\
+=f.Callbacks(\"once memory\"),c=f.Callbacks(\"once memory\"),d=f.Callbacks(\"me\
+mory\"),e=\"pending\",g={resolve:b,reject:c,notify:d},h={done:b.add,fail:c.add,\
+progress:d.add,state:function(){return e},isResolved:b.fired,isRejected:c.fired\
+,then:function(a,b,c){i.done(a).fail(b).progress(c);return this},always:functio\
+n(){i.done.apply(i,arguments).fail.apply(i,arguments);return this},pipe:functio\
+n(a,b,c){return f.Deferred(function(d){f.each({done:[a,\"resolve\"],fail:[b,\"r\
+eject\"],progress:[c,\"notify\"]},function(a,b){var c=b[0],e=b[1],g;f.isFunctio\
+n(c)?i[a](function(){g=c.apply(this,arguments),g&&f.isFunction(g.promise)?g.pro\
+mise().then(d.resolve,d.reject,d.notify):d[e+\"With\"](this===i?d:this,[g])}):i\
+[a](d[e])})}).promise()},promise:function(a){if(a==null)a=h;else for(var b in h\
+)a[b]=h[b];return a}},i=h.promise({}),j;for(j in g)i[j]=g[j].fire,i[j+\"With\"]\
+=g[j].fireWith;i.done(function(){e=\"resolved\"},c.disable,d.lock).fail(functio\
+n(){e=\"rejected\"},b.disable,d.lock),a&&a.call(i,i);return i},when:function(a)\
+{function m(a){return function(b){e[a]=arguments.length>1?i.call(arguments,0):b\
+,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.\
+call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.\
+length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j\
+.promise();if(d>1){for(;c<d;c++)b[c]&&b[c].promise&&f.isFunction(b[c].promise)?\
+b[c].promise().then(l(c),j.reject,m(c)):--g;g||j.resolveWith(j,b)}else j!==a&&j\
+.resolveWith(j,d?[a]:[]);return k}}),f.support=function(){var b,d,e,g,h,i,j,k,l\
+,m,n,o,p=c.createElement(\"div\"),q=c.documentElement;p.setAttribute(\"classNam\
+e\",\"t\"),p.innerHTML=\" <link/><table></table><a href='/a' style='top:1px;f\
+loat:left;opacity:.55;'>a</a><input type='checkbox'/>\",d=p.getElementsByTagNam\
+e(\"*\"),e=p.getElementsByTagName(\"a\")[0];if(!d||!d.length||!e)return{};g=c.c\
+reateElement(\"select\"),h=g.appendChild(c.createElement(\"option\")),i=p.getEl\
+ementsByTagName(\"input\")[0],b={leadingWhitespace:p.firstChild.nodeType===3,tb\
+ody:!p.getElementsByTagName(\"tbody\").length,htmlSerialize:!!p.getElementsByTa\
+gName(\"link\").length,style:/top/.test(e.getAttribute(\"style\")),hrefNormaliz\
+ed:e.getAttribute(\"href\")===\"/a\",opacity:/^0.55/.test(e.style.opacity),cssF\
+loat:!!e.style.cssFloat,checkOn:i.value===\"on\",optSelected:h.selected,getSetA\
+ttribute:p.className!==\"t\",enctype:!!c.createElement(\"form\").enctype,html5C\
+lone:c.createElement(\"nav\").cloneNode(!0).outerHTML!==\"<:nav></:nav>\",submi\
+tBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0\
+,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,pixelMarg\
+in:!0},f.boxModel=b.boxModel=c.compatMode===\"CSS1Compat\",i.checked=!0,b.noClo\
+neChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{d\
+elete p.test}catch(r){b.deleteExpando=!1}!p.addEventListener&&p.attachEvent&&p.\
+fireEvent&&(p.attachEvent(\"onclick\",function(){b.noCloneEvent=!1}),p.cloneNod\
+e(!0).fireEvent(\"onclick\")),i=c.createElement(\"input\"),i.value=\"t\",i.setA\
+ttribute(\"type\",\"radio\"),b.radioValue=i.value===\"t\",i.setAttribute(\"chec\
+ked\",\"checked\"),i.setAttribute(\"name\",\"t\"),p.appendChild(i),j=c.createDo\
+cumentFragment(),j.appendChild(p.lastChild),b.checkClone=j.cloneNode(!0).cloneN\
+ode(!0).lastChild.checked,b.appendChecked=i.checked,j.removeChild(i),j.appendCh\
+ild(p);if(p.attachEvent)for(n in{submit:1,change:1,focusin:1})m=\"on\"+n,o=m in\
+ p,o||(p.setAttribute(m,\"return;\"),o=typeof p[m]==\"function\"),b[n+\"Bubbles\
+\"]=o;j.removeChild(p),j=g=h=p=i=null,f(function(){var d,e,g,h,i,j,l,m,n,q,r,s,\
+t,u=c.getElementsByTagName(\"body\")[0];!u||(m=1,t=\"padding:0;margin:0;border:\
+\",r=\"position:absolute;top:0;left:0;width:1px;height:1px;\",s=t+\"0;visibilit\
+y:hidden;\",n=\"style='\"+r+t+\"5px solid #000;\",q=\"<div \"+n+\"display:block\
+;'><div style='\"+t+\"0;display:block;overflow:hidden;'></div></div>\"+\"<table\
+ \"+n+\"' cellpadding='0' cellspacing='0'>\"+\"<tr><td></td></tr></table>\",d=c\
+.createElement(\"div\"),d.style.cssText=s+\"width:0;height:0;position:static;to\
+p:0;margin-top:\"+m+\"px\",u.insertBefore(d,u.firstChild),p=c.createElement(\"d\
+iv\"),d.appendChild(p),p.innerHTML=\"<table><tr><td style='\"+t+\"0;display:non\
+e'></td><td>t</td></tr></table>\",k=p.getElementsByTagName(\"td\"),o=k[0].offse\
+tHeight===0,k[0].style.display=\"\",k[1].style.display=\"none\",b.reliableHidde\
+nOffsets=o&&k[0].offsetHeight===0,a.getComputedStyle&&(p.innerHTML=\"\",l=c.cre\
+ateElement(\"div\"),l.style.width=\"0\",l.style.marginRight=\"0\",p.style.width\
+=\"2px\",p.appendChild(l),b.reliableMarginRight=(parseInt((a.getComputedStyle(l\
+,null)||{marginRight:0}).marginRight,10)||0)===0),typeof p.style.zoom!=\"undefi\
+ned\"&&(p.innerHTML=\"\",p.style.width=p.style.padding=\"1px\",p.style.border=0\
+,p.style.overflow=\"hidden\",p.style.display=\"inline\",p.style.zoom=1,b.inline\
+BlockNeedsLayout=p.offsetWidth===3,p.style.display=\"block\",p.style.overflow=\
+\"visible\",p.innerHTML=\"<div style='width:5px;'></div>\",b.shrinkWrapBlocks=p\
+.offsetWidth!==3),p.style.cssText=r+s,p.innerHTML=q,e=p.firstChild,g=e.firstChi\
+ld,i=e.nextSibling.firstChild.firstChild,j={doesNotAddBorder:g.offsetTop!==5,do\
+esAddBorderForTableAndCells:i.offsetTop===5},g.style.position=\"fixed\",g.style\
+.top=\"20px\",j.fixedPosition=g.offsetTop===20||g.offsetTop===15,g.style.positi\
+on=g.style.top=\"\",e.style.overflow=\"hidden\",e.style.position=\"relative\",j\
+.subtractsBorderForOverflowNotVisible=g.offsetTop===-5,j.doesNotIncludeMarginIn\
+BodyOffset=u.offsetTop!==m,a.getComputedStyle&&(p.style.marginTop=\"1%\",b.pixe\
+lMargin=(a.getComputedStyle(p,null)||{marginTop:0}).marginTop!==\"1%\"),typeof \
+d.style.zoom!=\"undefined\"&&(d.style.zoom=1),u.removeChild(d),l=p=d=null,f.ext\
+end(b,j))});return b}();var j=/^(?:\\{.*\\}|\\[.*\\])$/,k=/([A-Z])/g;f.extend({\
+cache:{},uuid:0,expando:\"jQuery\"+(f.fn.jquery+Math.random()).replace(/\\D/g,\
+\"\"),noData:{embed:!0,object:\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\",ap\
+plet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];re\
+turn!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expa\
+ndo,k=typeof c==\"string\",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c===\"\
+events\";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.u\
+uid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c==\"object\"||typeo\
+f c==\"function\")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m\
+[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])\
+return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},remove\
+Data:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j\
+=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArra\
+y(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(\" \")));for(e=0,g\
+=b.length;e<g;e++)delete d[b[e]];if(!(c?m:f.isEmptyObject)(d))return}}if(!c){de\
+lete j[k].data;if(!m(j[k]))return}f.support.deleteExpando||!j.setInterval?delet\
+e j[k]:j[k]=null,i&&(f.support.deleteExpando?delete a[h]:a.removeAttribute?a.re\
+moveAttribute(h):a[h]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},ac\
+ceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if\
+(b)return b!==!0&&a.getAttribute(\"classid\")===b}return!0}}),f.fn.extend({data\
+:function(a,c){var d,e,g,h,i,j=this[0],k=0,m=null;if(a===b){if(this.length){m=f\
+.data(j);if(j.nodeType===1&&!f._data(j,\"parsedAttrs\")){g=j.attributes;for(i=g\
+.length;k<i;k++)h=g[k].name,h.indexOf(\"data-\")===0&&(h=f.camelCase(h.substrin\
+g(5)),l(j,h,m[h]));f._data(j,\"parsedAttrs\",!0)}}return m}if(typeof a==\"objec\
+t\")return this.each(function(){f.data(this,a)});d=a.split(\".\",2),d[1]=d[1]?\
+\".\"+d[1]:\"\",e=d[1]+\"!\";return f.access(this,function(c){if(c===b){m=this.\
+triggerHandler(\"getData\"+e,[d[0]]),m===b&&j&&(m=f.data(j,a),m=l(j,a,m));retur\
+n m===b&&d[1]?this.data(d[0]):m}d[1]=c,this.each(function(){var b=f(this);b.tri\
+ggerHandler(\"setData\"+e,d),f.data(this,a,c),b.triggerHandler(\"changeData\"+e\
+,d)})},null,c,arguments.length>1,null,!1)},removeData:function(a){return this.e\
+ach(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,b){a&&(b=(b\
+||\"fx\")+\"mark\",f._data(a,b,(f._data(a,b)||0)+1))},_unmark:function(a,b,c){a\
+!==!0&&(c=b,b=a,a=!1);if(b){c=c||\"fx\";var d=c+\"mark\",e=a?0:(f._data(b,d)||1\
+)-1;e?f._data(b,d,e):(f.removeData(b,d,!0),n(b,c,\"mark\"))}},queue:function(a,\
+b,c){var d;if(a){b=(b||\"fx\")+\"queue\",d=f._data(a,b),c&&(!d||f.isArray(c)?d=\
+f._data(a,b,f.makeArray(c)):d.push(c));return d||[]}},dequeue:function(a,b){b=b\
+||\"fx\";var c=f.queue(a,b),d=c.shift(),e={};d===\"inprogress\"&&(d=c.shift()),\
+d&&(b===\"fx\"&&c.unshift(\"inprogress\"),f._data(a,b+\".run\",e),d.call(a,func\
+tion(){f.dequeue(a,b)},e)),c.length||(f.removeData(a,b+\"queue \"+b+\".run\",!0\
+),n(a,b,\"queue\"))}}),f.fn.extend({queue:function(a,c){var d=2;typeof a!=\"str\
+ing\"&&(c=a,a=\"fx\",d--);if(arguments.length<d)return f.queue(this[0],a);retur\
+n c===b?this:this.each(function(){var b=f.queue(this,a,c);a===\"fx\"&&b[0]!==\"\
+inprogress\"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(functio\
+n(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||\"\
+fx\";return this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){\
+clearTimeout(d)}})},clearQueue:function(a){return this.queue(a||\"fx\",[])},pro\
+mise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!=\"string\"&\
+&(c=a,a=b),a=a||\"fx\";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+\"defer\",j\
+=a+\"queue\",k=a+\"mark\",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,\
+b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f.Callbacks(\"once memory\"),!0))h++\
+,l.add(m);m();return d.promise(c)}});var o=/[\\n\\t\\r]/g,p=/\\s+/,q=/\\r/g,r=/\
+^(?:button|input)$/i,s=/^(?:button|input|object|select|textarea)$/i,t=/^a(?:rea\
+)?$/i,u=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|lo\
+op|multiple|open|readonly|required|scoped|selected)$/i,v=f.support.getSetAttrib\
+ute,w,x,y;f.fn.extend({attr:function(a,b){return f.access(this,f.attr,a,b,argum\
+ents.length>1)},removeAttr:function(a){return this.each(function(){f.removeAttr\
+(this,a)})},prop:function(a,b){return f.access(this,f.prop,a,b,arguments.length\
+>1)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{t\
+his[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if\
+(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,th\
+is.className))});if(a&&typeof a==\"string\"){b=a.split(p);for(c=0,d=this.length\
+;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className\
+=a;else{g=\" \"+e.className+\" \";for(h=0,i=b.length;h<i;h++)~g.indexOf(\" \"+b\
+[h]+\" \")||(g+=b[h]+\" \");e.className=f.trim(g)}}}return this},removeClass:fu\
+nction(a){var c,d,e,g,h,i,j;if(f.isFunction(a))return this.each(function(b){f(t\
+his).removeClass(a.call(this,b,this.className))});if(a&&typeof a==\"string\"||a\
+===b){c=(a||\"\").split(p);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeTy\
+pe===1&&g.className)if(a){h=(\" \"+g.className+\" \").replace(o,\" \");for(i=0,\
+j=c.length;i<j;i++)h=h.replace(\" \"+c[i]+\" \",\" \");g.className=f.trim(h)}el\
+se g.className=\"\"}}return this},toggleClass:function(a,b){var c=typeof a,d=ty\
+peof b==\"boolean\";if(f.isFunction(a))return this.each(function(c){f(this).tog\
+gleClass(a.call(this,c,this.className,b),b)});return this.each(function(){if(c=\
+==\"string\"){var e,g=0,h=f(this),i=b,j=a.split(p);while(e=j[g++])i=d?i:!h.hasC\
+lass(e),h[i?\"addClass\":\"removeClass\"](e)}else if(c===\"undefined\"||c===\"b\
+oolean\")this.className&&f._data(this,\"__className__\",this.className),this.cl\
+assName=this.className||a===!1?\"\":f._data(this,\"__className__\")||\"\"})},ha\
+sClass:function(a){var b=\" \"+a+\" \",c=0,d=this.length;for(;c<d;c++)if(this[c\
+].nodeType===1&&(\" \"+this[c].className+\" \").replace(o,\" \").indexOf(b)>-1)\
+return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){\
+e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType\
+===1){e?h=a.call(this,d,g.val()):h=a,h==null?h=\"\":typeof h==\"number\"?h+=\"\
+\":f.isArray(h)&&(h=f.map(h,function(a){return a==null?\"\":a+\"\"})),c=f.valHo\
+oks[this.type]||f.valHooks[this.nodeName.toLowerCase()];if(!c||!(\"set\"in c)||\
+c.set(this,h,\"value\")===b)this.value=h}})}if(g){c=f.valHooks[g.type]||f.valHo\
+oks[g.nodeName.toLowerCase()];if(c&&\"get\"in c&&(d=c.get(g,\"value\"))!==b)ret\
+urn d;d=g.value;return typeof d==\"string\"?d.replace(q,\"\"):d==null?\"\":d}}}\
+}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!\
+b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selecte\
+dIndex,h=[],i=a.options,j=a.type===\"select-one\";if(g<0)return null;c=j?g:0,d=\
+j?g+1:i.length;for(;c<d;c++){e=i[c];if(e.selected&&(f.support.optDisabled?!e.di\
+sabled:e.getAttribute(\"disabled\")===null)&&(!e.parentNode.disabled||!f.nodeNa\
+me(e.parentNode,\"optgroup\"))){b=f(e).val();if(j)return b;h.push(b)}}if(j&&!h.\
+length&&i.length)return f(i[g]).val();return h},set:function(a,b){var c=f.makeA\
+rray(b);f(a).find(\"option\").each(function(){this.selected=f.inArray(f(this).v\
+al(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,h\
+tml:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var\
+ g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a\
+)[c](d);if(typeof a.getAttribute==\"undefined\")return f.prop(a,c,d);i=j!==1||!\
+f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b\
+){if(d===null){f.removeAttr(a,c);return}if(h&&\"set\"in h&&i&&(g=h.set(a,d,c))!\
+==b)return g;a.setAttribute(c,\"\"+d);return d}if(h&&\"get\"in h&&i&&(g=h.get(a\
+,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:funct\
+ion(a,b){var c,d,e,g,h,i=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d\
+.length;for(;i<g;i++)e=d[i],e&&(c=f.propFix[e]||e,h=u.test(e),h||f.attr(a,e,\"\
+\"),a.removeAttribute(v?e:c),h&&c in a&&(a[c]=!1))}},attrHooks:{type:{set:funct\
+ion(a,b){if(r.test(a.nodeName)&&a.parentNode)f.error(\"type property can't be c\
+hanged\");else if(!f.support.radioValue&&b===\"radio\"&&f.nodeName(a,\"input\")\
+){var c=a.value;a.setAttribute(\"type\",b),c&&(a.value=c);return b}}},value:{ge\
+t:function(a,b){if(w&&f.nodeName(a,\"button\"))return w.get(a,b);return b in a?\
+a.value:null},set:function(a,b,c){if(w&&f.nodeName(a,\"button\"))return w.set(a\
+,b,c);a.value=b}}},propFix:{tabindex:\"tabIndex\",readonly:\"readOnly\",\"for\"\
+:\"htmlFor\",\"class\":\"className\",maxlength:\"maxLength\",cellspacing:\"cell\
+Spacing\",cellpadding:\"cellPadding\",rowspan:\"rowSpan\",colspan:\"colSpan\",u\
+semap:\"useMap\",frameborder:\"frameBorder\",contenteditable:\"contentEditable\
+\"},prop:function(a,c,d){var e,g,h,i=a.nodeType;if(!!a&&i!==3&&i!==8&&i!==2){h=\
+i!==1||!f.isXMLDoc(a),h&&(c=f.propFix[c]||c,g=f.propHooks[c]);return d!==b?g&&\
+\"set\"in g&&(e=g.set(a,d,c))!==b?e:a[c]=d:g&&\"get\"in g&&(e=g.get(a,c))!==nul\
+l?e:a[c]}},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode(\"tabi\
+ndex\");return c&&c.specified?parseInt(c.value,10):s.test(a.nodeName)||t.test(a\
+.nodeName)&&a.href?0:b}}}}),f.attrHooks.tabindex=f.propHooks.tabIndex,x={get:fu\
+nction(a,c){var d,e=f.prop(a,c);return e===!0||typeof e!=\"boolean\"&&(d=a.getA\
+ttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d\
+;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c\
+,c.toLowerCase()));return c}},v||(y={name:!0,id:!0,coords:!0},w=f.valHooks.butt\
+on={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&(y[c]?d.nodeValue\
+!==\"\":d.specified)?d.nodeValue:b},set:function(a,b,d){var e=a.getAttributeNod\
+e(d);e||(e=c.createAttribute(d),a.setAttributeNode(e));return e.nodeValue=b+\"\
+\"}},f.attrHooks.tabindex.set=w.set,f.each([\"width\",\"height\"],function(a,b)\
+{f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===\"\"){a.setAt\
+tribute(b,\"auto\");return c}}})}),f.attrHooks.contenteditable={get:w.get,set:f\
+unction(a,b,c){b===\"\"&&(b=\"false\"),w.set(a,b,c)}}),f.support.hrefNormalized\
+||f.each([\"href\",\"src\",\"width\",\"height\"],function(a,c){f.attrHooks[c]=f\
+.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===nu\
+ll?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style\
+.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=\"\"+b}}),f\
+.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:\
+function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.s\
+electedIndex);return null}})),f.support.enctype||(f.propFix.enctype=\"encoding\
+\"),f.support.checkOn||f.each([\"radio\",\"checkbox\"],function(){f.valHooks[th\
+is]={get:function(a){return a.getAttribute(\"value\")===null?\"on\":a.value}}})\
+,f.each([\"radio\",\"checkbox\"],function(){f.valHooks[this]=f.extend(f.valHook\
+s[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(\
+),b)>=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\\.]*)?(?:\\.(.+))?$/,\
+B=/(?:^|\\s)hover(\\.\\S+)?\\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(\
+?:focusinfocus|focusoutblur)$/,F=/^(\\w*)(?:#([\\w\\-]+))?(?:\\.([\\w\\-]+))?$/\
+,G=function( a){var b=F.exec(a);b&&(b[1]=(b[1]||\"\").toLowerCase(),b[3]=b[3]&&\
+new RegExp(\"(?:^|\\\\s)\"+b[3]+\"(?:\\\\s|$)\"));return b},H=function(a,b){var\
+ c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.\
+id||{}).value===b[2])&&(!b[3]||b[3].test((c[\"class\"]||{}).value))},I=function\
+(a){return f.event.special.hover?a:a.replace(B,\"mouseenter$1 mouseleave$1\")};\
+f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===\
+3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler,g=p.se\
+lector),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(\
+h.handle=i=function(a){return typeof f!=\"undefined\"&&(!a||f.event.triggered!=\
+=a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).s\
+plit(\" \");for(k=0;k<c.length;k++){l=A.exec(c[k])||[],m=l[1],n=(l[2]||\"\").sp\
+lit(\".\").sort(),s=f.event.special[m]||{},m=(g?s.delegateType:s.bindType)||m,s\
+=f.event.special[m]||{},o=f.extend({type:m,origType:l[1],data:e,handler:d,guid:\
+d.guid,selector:g,quick:g&&G(g),namespace:n.join(\".\")},p),r=j[m];if(!r){r=j[m\
+]=[],r.delegateCount=0;if(!s.setup||s.setup.call(a,e,n,i)===!1)a.addEventListen\
+er?a.addEventListener(m,i,!1):a.attachEvent&&a.attachEvent(\"on\"+m,i)}s.add&&(\
+s.add.call(a,o),o.handler.guid||(o.handler.guid=d.guid)),g?r.splice(r.delegateC\
+ount++,0,o):r.push(o),f.event.global[m]=!0}a=null}},global:{},remove:function(a\
+,b,c,d,e){var g=f.hasData(a)&&f._data(a),h,i,j,k,l,m,n,o,p,q,r,s;if(!!g&&!!(o=g\
+.events)){b=f.trim(I(b||\"\")).split(\" \");for(h=0;h<b.length;h++){i=A.exec(b[\
+h])||[],j=k=i[1],l=i[2];if(!j){for(j in o)f.event.remove(a,j+b[h],c,d,!0);conti\
+nue}p=f.event.special[j]||{},j=(d?p.delegateType:p.bindType)||j,r=o[j]||[],m=r.\
+length,l=l?new RegExp(\"(^|\\\\.)\"+l.split(\".\").sort().join(\"\\\\.(?:.*\
+\\\\.)?\")+\"(\\\\.|$)\"):null;for(n=0;n<r.length;n++)s=r[n],(e||k===s.origType\
+)&&(!c||c.guid===s.guid)&&(!l||l.test(s.namespace))&&(!d||d===s.selector||d===\
+\"**\"&&s.selector)&&(r.splice(n--,1),s.selector&&r.delegateCount--,p.remove&&p\
+.remove.call(a,s));r.length===0&&m!==r.length&&((!p.teardown||p.teardown.call(a\
+,l)===!1)&&f.removeEvent(a,j,g.handle),delete o[j])}f.isEmptyObject(o)&&(q=g.ha\
+ndle,q&&(q.elem=null),f.removeData(a,[\"events\",\"handle\"],!0))}},customEvent\
+:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){if(!e||e.nodeT\
+ype!==3&&e.nodeType!==8){var h=c.type||c,i=[],j,k,l,m,n,o,p,q,r,s;if(E.test(h+f\
+.event.triggered))return;h.indexOf(\"!\")>=0&&(h=h.slice(0,-1),k=!0),h.indexOf(\
+\".\")>=0&&(i=h.split(\".\"),h=i.shift(),i.sort());if((!e||f.event.customEvent[\
+h])&&!f.event.global[h])return;c=typeof c==\"object\"?c[f.expando]?c:new f.Even\
+t(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join(\
+\".\"),c.namespace_re=c.namespace?new RegExp(\"(^|\\\\.)\"+i.join(\"\\\\.(?:.*\
+\\\\.)?\")+\"(\\\\.|$)\"):null,o=h.indexOf(\":\")<0?\"on\"+h:\"\";if(!e){j=f.ca\
+che;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.ele\
+m,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.un\
+shift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)retur\
+n;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h\
+,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&\
+&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;l<r.\
+length&&!c.isPropagationStopped();l++)m=r[l][0],c.type=r[l][1],q=(f._data(m,\"e\
+vents\")||{})[c.type]&&f._data(m,\"handle\"),q&&q.apply(m,d),q=o&&m[o],q&&f.acc\
+eptData(m)&&q.apply(m,d)===!1&&c.preventDefault();c.type=h,!g&&!c.isDefaultPrev\
+ented()&&(!p._default||p._default.apply(e.ownerDocument,d)===!1)&&(h!==\"click\
+\"||!f.nodeName(e,\"a\"))&&f.acceptData(e)&&o&&e[h]&&(h!==\"focus\"&&h!==\"blur\
+\"||c.target.offsetWidth!==0)&&!f.isWindow(e)&&(n=e[o],n&&(e[o]=null),f.event.t\
+riggered=h,e[h](),f.event.triggered=b,n&&(e[o]=n));return c.result}},dispatch:f\
+unction(c){c=f.event.fix(c||a.event);var d=(f._data(this,\"events\")||{})[c.typ\
+e]||[],e=d.delegateCount,g=[].slice.call(arguments,0),h=!c.exclusive&&!c.namesp\
+ace,i=f.event.special[c.type]||{},j=[],k,l,m,n,o,p,q,r,s,t,u;g[0]=c,c.delegateT\
+arget=this;if(!i.preDispatch||i.preDispatch.call(this,c)!==!1){if(e&&(!c.button\
+||c.type!==\"click\")){n=f(this),n.context=this.ownerDocument||this;for(m=c.tar\
+get;m!=this;m=m.parentNode||this)if(m.disabled!==!0){p={},r=[],n[0]=m;for(k=0;k\
+<e;k++)s=d[k],t=s.selector,p[t]===b&&(p[t]=s.quick?H(m,s.quick):n.is(t)),p[t]&&\
+r.push(s);r.length&&j.push({elem:m,matches:r})}}d.length>e&&j.push({elem:this,m\
+atches:d.slice(e)});for(k=0;k<j.length&&!c.isPropagationStopped();k++){q=j[k],c\
+.currentTarget=q.elem;for(l=0;l<q.matches.length&&!c.isImmediatePropagationStop\
+ped();l++){s=q.matches[l];if(h||!c.namespace&&!s.namespace||c.namespace_re&&c.n\
+amespace_re.test(s.namespace))c.data=s.data,c.handleObj=s,o=((f.event.special[s\
+.origType]||{}).handle||s.handler).apply(q.elem,g),o!==b&&(c.result=o,o===!1&&(\
+c.preventDefault(),c.stopPropagation()))}}i.postDispatch&&i.postDispatch.call(t\
+his,c);return c.result}},props:\"attrChange attrName relatedNode srcElement alt\
+Key bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget s\
+hiftKey target timeStamp view which\".split(\" \"),fixHooks:{},keyHooks:{props:\
+\"char charCode key keyCode\".split(\" \"),filter:function(a,b){a.which==null&&\
+(a.which=b.charCode!=null?b.charCode:b.keyCode);return a}},mouseHooks:{props:\"\
+button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX \
+screenY toElement\".split(\" \"),filter:function(a,d){var e,f,g,h=d.button,i=d.\
+fromElement;a.pageX==null&&d.clientX!=null&&(e=a.target.ownerDocument||c,f=e.do\
+cumentElement,g=e.body,a.pageX=d.clientX+(f&&f.scrollLeft||g&&g.scrollLeft||0)-\
+(f&&f.clientLeft||g&&g.clientLeft||0),a.pageY=d.clientY+(f&&f.scrollTop||g&&g.s\
+crollTop||0)-(f&&f.clientTop||g&&g.clientTop||0)),!a.relatedTarget&&i&&(a.relat\
+edTarget=i===a.target?d.toElement:i),!a.which&&h!==b&&(a.which=h&1?1:h&2?3:h&4?\
+2:0);return a}},fix:function(a){if(a[f.expando])return a;var d,e,g=a,h=f.event.\
+fixHooks[a.type]||{},i=h.props?this.props.concat(h.props):this.props;a=f.Event(\
+g);for(d=i.length;d;)e=i[--d],a[e]=g[e];a.target||(a.target=g.srcElement||c),a.\
+target.nodeType===3&&(a.target=a.target.parentNode),a.metaKey===b&&(a.metaKey=a\
+.ctrlKey);return h.filter?h.filter(a,g):a},special:{ready:{setup:f.bindReady},l\
+oad:{noBubble:!0},focus:{delegateType:\"focusin\"},blur:{delegateType:\"focusou\
+t\"},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload\
+=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)\
+}}},simulate:function(a,b,c,d){var e=f.extend(new f.Event,c,{type:a,isSimulated\
+:!0,originalEvent:{}});d?f.event.trigger(e,null,b):f.event.dispatch.call(b,e),e\
+.isDefaultPrevented()&&c.preventDefault()}},f.event.handle=f.event.dispatch,f.r\
+emoveEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.remov\
+eEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent(\"on\"+b,c\
+)},f.Event=function(a,b){if(!(this instanceof f.Event))return new f.Event(a,b);\
+a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defa\
+ultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?K:\
+J):this.type=a,b&&f.extend(this,b),this.timeStamp=a&&a.timeStamp||f.now(),this[\
+f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPreve\
+nted=K;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.retu\
+rnValue=!1)},stopPropagation:function(){this.isPropagationStopped=K;var a=this.\
+originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},s\
+topImmediatePropagation:function(){this.isImmediatePropagationStopped=K,this.st\
+opPropagation()},isDefaultPrevented:J,isPropagationStopped:J,isImmediatePropaga\
+tionStopped:J},f.each({mouseenter:\"mouseover\",mouseleave:\"mouseout\"},functi\
+on(a,b){f.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c=\
+this,d=a.relatedTarget,e=a.handleObj,g=e.selector,h;if(!d||d!==c&&!f.contains(c\
+,d))a.type=e.origType,h=e.handler.apply(this,arguments),a.type=b;return h}}}),f\
+.support.submitBubbles||(f.event.special.submit={setup:function(){if(f.nodeName\
+(this,\"form\"))return!1;f.event.add(this,\"click._submit keypress._submit\",fu\
+nction(a){var c=a.target,d=f.nodeName(c,\"input\")||f.nodeName(c,\"button\")?c.\
+form:b;d&&!d._submit_attached&&(f.event.add(d,\"submit._submit\",function(a){a.\
+_submit_bubble=!0}),d._submit_attached=!0)})},postDispatch:function(a){a._submi\
+t_bubble&&(delete a._submit_bubble,this.parentNode&&!a.isTrigger&&f.event.simul\
+ate(\"submit\",this.parentNode,a,!0))},teardown:function(){if(f.nodeName(this,\
+\"form\"))return!1;f.event.remove(this,\"._submit\")}}),f.support.changeBubbles\
+||(f.event.special.change={setup:function(){if(z.test(this.nodeName)){if(this.t\
+ype===\"checkbox\"||this.type===\"radio\")f.event.add(this,\"propertychange._ch\
+ange\",function(a){a.originalEvent.propertyName===\"checked\"&&(this._just_chan\
+ged=!0)}),f.event.add(this,\"click._change\",function(a){this._just_changed&&!a\
+.isTrigger&&(this._just_changed=!1,f.event.simulate(\"change\",this,a,!0))});re\
+turn!1}f.event.add(this,\"beforeactivate._change\",function(a){var b=a.target;z\
+.test(b.nodeName)&&!b._change_attached&&(f.event.add(b,\"change._change\",funct\
+ion(a){this.parentNode&&!a.isSimulated&&!a.isTrigger&&f.event.simulate(\"change\
+\",this.parentNode,a,!0)}),b._change_attached=!0)})},handle:function(a){var b=a\
+.target;if(this!==b||a.isSimulated||a.isTrigger||b.type!==\"radio\"&&b.type!==\
+\"checkbox\")return a.handleObj.handler.apply(this,arguments)},teardown:functio\
+n(){f.event.remove(this,\"._change\");return z.test(this.nodeName)}}),f.support\
+.focusinBubbles||f.each({focus:\"focusin\",blur:\"focusout\"},function(a,b){var\
+ d=0,e=function(a){f.event.simulate(b,a.target,f.event.fix(a),!0)};f.event.spec\
+ial[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function\
+(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.fn.extend({on:function(a,c,d,e,\
+g){var h,i;if(typeof a==\"object\"){typeof c!=\"string\"&&(d=d||c,c=b);for(i in\
+ a)this.on(i,c,d,a[i],g);return this}d==null&&e==null?(e=c,d=c=b):e==null&&(typ\
+eof c==\"string\"?(e=d,d=b):(e=d,d=c,c=b));if(e===!1)e=J;else if(!e)return this\
+;g===1&&(h=e,e=function(a){f().off(a);return h.apply(this,arguments)},e.guid=h.\
+guid||(h.guid=f.guid++));return this.each(function(){f.event.add(this,a,e,d,c)}\
+)},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,c,d){if(a&&a\
+.preventDefault&&a.handleObj){var e=a.handleObj;f(a.delegateTarget).off(e.names\
+pace?e.origType+\".\"+e.namespace:e.origType,e.selector,e.handler);return this}\
+if(typeof a==\"object\"){for(var g in a)this.off(g,c,a[g]);return this}if(c===!\
+1||typeof c==\"function\")d=c,c=b;d===!1&&(d=J);return this.each(function(){f.e\
+vent.remove(this,a,d,c)})},bind:function(a,b,c){return this.on(a,null,b,c)},unb\
+ind:function(a,b){return this.off(a,null,b)},live:function(a,b,c){f(this.contex\
+t).on(a,this.selector,b,c);return this},die:function(a,b){f(this.context).off(a\
+,this.selector||\"**\",b);return this},delegate:function(a,b,c,d){return this.o\
+n(b,a,c,d)},undelegate:function(a,b,c){return arguments.length==1?this.off(a,\"\
+**\"):this.off(b,a,c)},trigger:function(a,b){return this.each(function(){f.even\
+t.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.t\
+rigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d\
+=0,e=function(c){var e=(f._data(this,\"lastToggle\"+a.guid)||0)%d;f._data(this,\
+\"lastToggle\"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)\
+||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:funct\
+ion(a,b){return this.mouseenter(a).mouseleave(b||a)}}),f.each(\"blur focus focu\
+sin focusout load resize scroll unload click dblclick mousedown mouseup mousemo\
+ve mouseover mouseout mouseenter mouseleave change select submit keydown keypre\
+ss keyup error contextmenu\".split(\" \"),function(a,b){f.fn[b]=function(a,c){c\
+==null&&(c=a,a=null);return arguments.length>0?this.on(b,null,a,c):this.trigger\
+(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHook\
+s),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(\
+a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];w\
+hile(j){if(j[d]===c){k=e[j.sizset];break}if(j.nodeType===1){g||(j[d]=c,j.sizset\
+=h);if(typeof b!=\"string\"){if(j===b){k=!0;break}}else if(m.filter(b,[j]).leng\
+th>0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length\
+;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];\
+break}j.nodeType===1&&!g&&(j[d]=c,j.sizset=h);if(j.nodeName.toLowerCase()===b){\
+k=j;break}j=j[a]}e[h]=k}}}var a=/((?:\\((?:\\([^()]+\\)|[^()]+)+\\)|\\[(?:\\[[^\
+\\[\\]]*\\]|['\"][^'\"]*['\"]|[^\\[\\]'\"]+)+\\]|\\\\.|[^ >+~,(\\[\\\\]+)+|[>+~\
+])(\\s*,\\s*)?((?:.|\\r|\\n)*)/g,d=\"sizcache\"+(Math.random()+\"\").replace(\"\
+.\",\"\"),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\\\/g,k=/\\r\\n/g,l=/\
+\\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d|\
+|c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!=\"string\
+\")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(\"\"),i=a.\
+exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>\
+1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.rela\
+tive[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.s\
+hift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0\
+])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter\
+(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.\
+length===1&&(w[0]===\"~\"||w[0]===\"+\")&&d.parentNode?d.parentNode:d,v),j=n.ex\
+pr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop()\
+,r=q,o.relative[q]?r=w.pop():q=\"\",r==null&&(r=d),o.relative[q](k,r,v)}else k=\
+w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)===\"[object Array]\")if(!u)e.push.a\
+pply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[\
+t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)\
+k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e\
+));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b<a.\
+length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},m.matches=function(a,b){ret\
+urn m(a,null,null,b)},m.matchesSelector=function(a,b){return m(b,null,null,[a])\
+.length>0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.or\
+der.length;e<f;e++){h=o.order[e];if(g=o.leftMatch[h].exec(a)){i=g[1],g.splice(1\
+,1);if(i.substr(i.length-1)!==\"\\\\\"){g[1]=(g[1]||\"\").replace(j,\"\"),d=o.f\
+ind[h](g,b,c);if(d!=null){a=a.replace(o.match[h],\"\");break}}}}d||(d=typeof b.\
+getElementsByTagName!=\"undefined\"?b.getElementsByTagName(\"*\"):[]);return{se\
+t:d,expr:a}},m.filter=function(a,c,d,e){var f,g,h,i,j,k,l,n,p,q=a,r=[],s=c,t=c&\
+&c[0]&&m.isXML(c[0]);while(a&&c.length){for(h in o.filter)if((f=o.leftMatch[h].\
+exec(a))!=null&&f[2]){k=o.filter[h],l=f[1],g=!1,f.splice(1,1);if(l.substr(l.len\
+gth-1)===\"\\\\\")continue;s===r&&(r=[]);if(o.preFilter[h]){f=o.preFilter[h](f,\
+s,d,r,e,t);if(!f)g=i=!0;else if(f===!0)continue}if(f)for(n=0;(j=s[n])!=null;n++\
+)j&&(i=k(j,f,n,s),p=e^i,d&&i!=null?p?g=!0:s[n]=!1:p&&(r.push(j),g=!0));if(i!==b\
+){d||(s=r),a=a.replace(o.match[h],\"\");if(!g)return[];break}}if(a===q)if(g==nu\
+ll)m.error(a);else break;q=a}return s},m.error=function(a){throw new Error(\"Sy\
+ntax error, unrecognized expression: \"+a)};var n=m.getText=function(a){var b,c\
+,d=a.nodeType,e=\"\";if(d){if(d===1||d===9||d===11){if(typeof a.textContent==\"\
+string\")return a.textContent;if(typeof a.innerText==\"string\")return a.innerT\
+ext.replace(k,\"\");for(a=a.firstChild;a;a=a.nextSibling)e+=n(a)}else if(d===3|\
+|d===4)return a.nodeValue}else for(b=0;c=a[b];b++)c.nodeType!==8&&(e+=n(c));ret\
+urn e},o=m.selectors={order:[\"ID\",\"NAME\",\"TAG\"],match:{ID:/#((?:[\\w\\u00\
+c0-\\uFFFF\\-]|\\\\.)+)/,CLASS:/\\.((?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)+)/,NAME:/\
+\\[name=['\"]*((?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)+)['\"]*\\]/,ATTR:/\\[\\s*((?:[\
+\\w\\u00c0-\\uFFFF\\-]|\\\\.)+)\\s*(?:(\\S?=)\\s*(?:(['\"])(.*?)\\3|(#?(?:[\\w\
+\\u00c0-\\uFFFF\\-]|\\\\.)*)|)|)\\s*\\]/,TAG:/^((?:[\\w\\u00c0-\\uFFFF\\*\\-]|\
+\\\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\\(\\s*(even|odd|(?:[+\\-]?\\d+\
+|(?:[+\\-]?\\d*)?n\\s*(?:[+\\-]\\s*\\d+)?))\\s*\\))?/,POS:/:(nth|eq|gt|lt|first\
+|last|even|odd)(?:\\((\\d*)\\))?(?=[^\\-]|$)/,PSEUDO:/:((?:[\\w\\u00c0-\\uFFFF\
+\\-]|\\\\.)+)(?:\\((['\"]?)((?:\\([^\\)]+\\)|[^\\(\\)]*)+)\\2\\))?/},leftMatch:\
+{},attrMap:{\"class\":\"className\",\"for\":\"htmlFor\"},attrHandle:{href:funct\
+ion(a){return a.getAttribute(\"href\")},type:function(a){return a.getAttribute(\
+\"type\")}},relative:{\"+\":function(a,b){var c=typeof b==\"string\",d=c&&!l.te\
+st(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]\
+){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCas\
+e()===b?h||!1:h===b}e&&m.filter(b,a,!0)},\">\":function(a,b){var c,d=typeof b==\
+\"string\",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a\
+[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(\
+;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&m.filter(b,a,!0)}}\
+,\"\":function(a,b,c){var d,f=e++,g=x;typeof b==\"string\"&&!l.test(b)&&(b=b.to\
+LowerCase(),d=b,g=w),g(\"parentNode\",b,f,a,d,c)},\"~\":function(a,b,c){var d,f\
+=e++,g=x;typeof b==\"string\"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g(\"prev\
+iousSibling\",b,f,a,d,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!\
+=\"undefined\"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}\
+},NAME:function(a,b){if(typeof b.getElementsByName!=\"undefined\"){var c=[],d=b\
+.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute(\"nam\
+e\")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typ\
+eof b.getElementsByTagName!=\"undefined\")return b.getElementsByTagName(a[1])}}\
+,preFilter:{CLASS:function(a,b,c,d,e,f){a=\" \"+a[1].replace(j,\"\")+\" \";if(f\
+)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(\" \"+h.classNa\
+me+\" \").replace(/[\\t\\n\\r]/g,\" \").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1\
+));return!1},ID:function(a){return a[1].replace(j,\"\")},TAG:function(a,b){retu\
+rn a[1].replace(j,\"\").toLowerCase()},CHILD:function(a){if(a[1]===\"nth\"){a[2\
+]||m.error(a[0]),a[2]=a[2].replace(/^\\+|\\s*/g,\"\");var b=/(-?)(\\d*)(?:n([+\
+\\-]?\\d*))?/.exec(a[2]===\"even\"&&\"2n\"||a[2]===\"odd\"&&\"2n+1\"||!/\\D/.te\
+st(a[2])&&\"0n+\"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.er\
+ror(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace\
+(j,\"\");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||\"\").replace(\
+j,\"\"),a[2]===\"~=\"&&(a[4]=\" \"+a[4]+\" \");return a},PSEUDO:function(b,c,d,\
+e,f){if(b[1]===\"not\")if((a.exec(b[3])||\"\").length>1||/^\\w/.test(b[3]))b[3]\
+=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);re\
+turn!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return\
+ b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){retur\
+n a.disabled===!1&&a.type!==\"hidden\"},disabled:function(a){return a.disabled=\
+==!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentN\
+ode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){retu\
+rn!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){re\
+turn!!m(c[3],a).length},header:function(a){return/h\\d/i.test(a.nodeName)},text\
+:function(a){var b=a.getAttribute(\"type\"),c=a.type;return a.nodeName.toLowerC\
+ase()===\"input\"&&\"text\"===c&&(b===c||b===null)},radio:function(a){return a.\
+nodeName.toLowerCase()===\"input\"&&\"radio\"===a.type},checkbox:function(a){re\
+turn a.nodeName.toLowerCase()===\"input\"&&\"checkbox\"===a.type},file:function\
+(a){return a.nodeName.toLowerCase()===\"input\"&&\"file\"===a.type},password:fu\
+nction(a){return a.nodeName.toLowerCase()===\"input\"&&\"password\"===a.type},s\
+ubmit:function(a){var b=a.nodeName.toLowerCase();return(b===\"input\"||b===\"bu\
+tton\")&&\"submit\"===a.type},image:function(a){return a.nodeName.toLowerCase()\
+===\"input\"&&\"image\"===a.type},reset:function(a){var b=a.nodeName.toLowerCas\
+e();return(b===\"input\"||b===\"button\")&&\"reset\"===a.type},button:function(\
+a){var b=a.nodeName.toLowerCase();return b===\"input\"&&\"button\"===a.type||b=\
+==\"button\"},input:function(a){return/input|select|textarea|button/i.test(a.no\
+deName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilter\
+s:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length\
+-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:fun\
+ction(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(\
+a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO\
+:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e===\"co\
+ntains\")return(a.textContent||a.innerText||n([a])||\"\").indexOf(b[3])>=0;if(e\
+===\"not\"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;retu\
+rn!0}m.error(e)},CHILD:function(a,b){var c,e,f,g,h,i,j,k=b[1],l=a;switch(k){cas\
+e\"only\":case\"first\":while(l=l.previousSibling)if(l.nodeType===1)return!1;if\
+(k===\"first\")return!0;l=a;case\"last\":while(l=l.nextSibling)if(l.nodeType===\
+1)return!1;return!0;case\"nth\":c=b[2],e=b[3];if(c===1&&e===0)return!0;f=b[0],g\
+=a.parentNode;if(g&&(g[d]!==f||!a.nodeIndex)){i=0;for(l=g.firstChild;l;l=l.next\
+Sibling)l.nodeType===1&&(l.nodeIndex=++i);g[d]=f}j=a.nodeIndex-e;return c===0?j\
+===0:j%c===0&&j/c>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute(\
+\"id\")===b},TAG:function(a,b){return b===\"*\"&&a.nodeType===1||!!a.nodeName&&\
+a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(\" \"+(a.className||a.\
+getAttribute(\"class\"))+\" \").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=\
+m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttr\
+ibute(c),e=d+\"\",f=b[2],g=b[4];return d==null?f===\"!=\":!f&&m.attr?d!=null:f=\
+==\"=\"?e===g:f===\"*=\"?e.indexOf(g)>=0:f===\"~=\"?(\" \"+e+\" \").indexOf(g)>\
+=0:g?f===\"!=\"?e!==g:f===\"^=\"?e.indexOf(g)===0:f===\"$=\"?e.substr(e.length-\
+g.length)===g:f===\"|=\"?e===g||e.substr(0,g.length+1)===g+\"-\":!1:e&&d!==!1},\
+POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=\
+o.match.POS,q=function(a,b){return\"\\\\\"+(b-0+1)};for(var r in o.match)o.matc\
+h[r]=new RegExp(o.match[r].source+/(?![^\\[]*\\])(?![^\\(]*\\))/.source),o.left\
+Match[r]=new RegExp(/(^(?:.|\\r|\\n)*?)/.source+o.match[r].source.replace(/\
+\\\\(\\d+)/g,q));o.match.globalPOS=p;var s=function(a,b){a=Array.prototype.slic\
+e.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slic\
+e.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var\
+ c=0,d=b||[];if(g.call(a)===\"[object Array]\")Array.prototype.push.apply(d,a);\
+else if(typeof a.length==\"number\")for(var e=a.length;c<e;c++)d.push(a[c]);els\
+e for(;a[c];c++)d.push(a[c]);return d}}var u,v;c.documentElement.compareDocumen\
+tPosition?u=function(a,b){if(a===b){h=!0;return 0}if(!a.compareDocumentPosition\
+||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.com\
+pareDocumentPosition(b)&4?-1:1}:(u=function(a,b){if(a===b){h=!0;return 0}if(a.s\
+ourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],\
+g=a.parentNode,i=b.parentNode,j=g;if(g===i)return v(a,b);if(!g)return-1;if(!i)r\
+eturn 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parent\
+Node;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return v(e[k\
+],f[k]);return k===c?v(a,f[k],-1):v(e[k],b,1)},v=function(a,b,c){if(a===b)retur\
+n c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),f\
+unction(){var a=c.createElement(\"div\"),d=\"script\"+(new Date).getTime(),e=c.\
+documentElement;a.innerHTML=\"<a name='\"+d+\"'/>\",e.insertBefore(a,e.firstChi\
+ld),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!\
+=\"undefined\"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e\
+.getAttributeNode!=\"undefined\"&&e.getAttributeNode(\"id\").nodeValue===a[1]?[\
+e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!=\"undefine\
+d\"&&a.getAttributeNode(\"id\");return a.nodeType===1&&c&&c.nodeValue===b}),e.r\
+emoveChild(a),e=a=null}(),function(){var a=c.createElement(\"div\");a.appendChi\
+ld(c.createComment(\"\")),a.getElementsByTagName(\"*\").length>0&&(o.find.TAG=f\
+unction(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]===\"*\"){var d=[];for(v\
+ar e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML=\"<a\
+ href='#'></a>\",a.firstChild&&typeof a.firstChild.getAttribute!=\"undefined\"&\
+&a.firstChild.getAttribute(\"href\")!==\"#\"&&(o.attrHandle.href=function(a){re\
+turn a.getAttribute(\"href\",2)}),a=null}(),c.querySelectorAll&&function(){var \
+a=m,b=c.createElement(\"div\"),d=\"__sizzle__\";b.innerHTML=\"<p class='TEST'><\
+/p>\";if(!b.querySelectorAll||b.querySelectorAll(\".TEST\").length!==0){m=funct\
+ion(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\\w+$)|^\\.([\\w\\-]+$)|^#([\
+\\w\\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.\
+getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)retu\
+rn s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b===\"body\"&&e.bo\
+dy)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.pare\
+ntNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelect\
+orAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!==\"obj\
+ect\"){var k=e,l=e.getAttribute(\"id\"),n=l||d,p=e.parentNode,q=/^\\s*[+~]/.tes\
+t(b);l?n=n.replace(/'/g,\"\\\\$&\"):e.setAttribute(\"id\",n),q&&p&&(e=e.parentN\
+ode);try{if(!q||p)return s(e.querySelectorAll(\"[id='\"+n+\"'] \"+b),f)}catch(r\
+){}finally{l||k.removeAttribute(\"id\")}}}return a(b,e,f,g)};for(var e in a)m[e\
+]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.moz\
+MatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.ca\
+ll(c.createElement(\"div\"),\"div\"),e=!1;try{b.call(c.documentElement,\"[test!\
+='']:sizzle\")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\\=\
+\\s*([^'\"\\]]*)\\s*\\]/g,\"='$1']\");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.\
+test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.node\
+Type!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(\
+){var a=c.createElement(\"div\");a.innerHTML=\"<div class='test e'></div><div c\
+lass='test'></div>\";if(!!a.getElementsByClassName&&a.getElementsByClassName(\"\
+e\").length!==0){a.lastChild.className=\"e\";if(a.getElementsByClassName(\"e\")\
+.length===1)return;o.order.splice(1,0,\"CLASS\"),o.find.CLASS=function(a,b,c){i\
+f(typeof b.getElementsByClassName!=\"undefined\"&&!c)return b.getElementsByClas\
+sName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){ret\
+urn a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosi\
+tion?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.cont\
+ains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).do\
+cumentElement;return b?b.nodeName!==\"HTML\":!1};var y=function(a,b,c){var d,e=\
+[],f=\"\",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace\
+(o.match.PSEUDO,\"\");a=o.relative[a]?a+\"*\":a;for(var h=0,i=g.length;h<i;h++)\
+m(a,g[h],e,c);return m.filter(f,e)};m.attr=f.attr,m.selectors.attrMap={},f.find\
+=m,f.expr=m.selectors,f.expr[\":\"]=f.expr.filters,f.unique=m.uniqueSort,f.text\
+=m.getText,f.isXMLDoc=m.isXML,f.contains=m.contains}();var L=/Until$/,M=/^(?:pa\
+rents|prevUntil|prevAll)/,N=/,/,O=/^.[^:#\\[\\.,]*$/,P=Array.prototype.slice,Q=\
+f.expr.match.globalPOS,R={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend(\
+{find:function(a){var b=this,c,d;if(typeof a!=\"string\")return f(a).filter(fun\
+ction(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=th\
+is.pushStack(\"\",\"find\",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f\
+.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]\
+){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filte\
+r(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})\
+},not:function(a){return this.pushStack(T(this,a,!1),\"not\",a)},filter:functio\
+n(a){return this.pushStack(T(this,a,!0),\"filter\",a)},is:function(a){return!!a\
+&&(typeof a==\"string\"?Q.test(a)?f(a,this.context).index(this[0])>=0:f.filter(\
+a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g\
+=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d<a.\
+length;d++)f(g).is(a[d])&&c.push({selector:a[d],elem:g,level:h});g=g.parentNode\
+,h++}return c}var i=Q.test(a)||typeof a!=\"string\"?f(a,b||this.context):0;for(\
+d=0,e=this.length;d<e;d++){g=this[d];while(g){if(i?i.index(g)>-1:f.find.matches\
+Selector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g\
+.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,\"clos\
+est\",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevA\
+ll().length:-1;if(typeof a==\"string\")return f.inArray(this[0],f(a));return f.\
+inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a==\"string\"?f(a\
+,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushSt\
+ack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.pr\
+evObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType\
+!==11?b:null},parents:function(a){return f.dir(a,\"parentNode\")},parentsUntil:\
+function(a,b,c){return f.dir(a,\"parentNode\",c)},next:function(a){return f.nth\
+(a,2,\"nextSibling\")},prev:function(a){return f.nth(a,2,\"previousSibling\")},\
+nextAll:function(a){return f.dir(a,\"nextSibling\")},prevAll:function(a){return\
+ f.dir(a,\"previousSibling\")},nextUntil:function(a,b,c){return f.dir(a,\"nextS\
+ibling\",c)},prevUntil:function(a,b,c){return f.dir(a,\"previousSibling\",c)},s\
+iblings:function(a){return f.sibling((a.parentNode||{}).firstChild,a)},children\
+:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.node\
+Name(a,\"iframe\")?a.contentDocument||a.contentWindow.document:f.makeArray(a.ch\
+ildNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)\
+||(d=c),d&&typeof d==\"string\"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.uni\
+que(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pus\
+hStack(e,a,P.call(arguments).join(\",\"))}}),f.extend({filter:function(a,b,c){c\
+&&(a=\":not(\"+a+\")\");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0\
+]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeT\
+ype!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];\
+return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&\
+&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)\
+a.nodeType===1&&a!==b&&c.push(a);return c}});var V=\"abbr|article|aside|audio|b\
+di|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|met\
+er|nav|output|progress|section|summary|time|video\",W=/ jQuery\\d+=\"(?:\\d+|nu\
+ll)\"/g,X=/^\\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:\
+]+)[^>]*)\\/>/ig,Z=/<([\\w:]+)/,$=/<tbody/i,_=/<|&#?\\w+;/,ba=/<(?:script|style\
+)/i,bb=/<(?:script|object|embed|option|style)/i,bc=new RegExp(\"<(?:\"+V+\")[\
+\\\\s/>]\",\"i\"),bd=/checked\\s*(?:[^=]|=\\s*.checked.)/i,be=/\\/(java|ecma)sc\
+ript/i,bf=/^\\s*<!(?:\\[CDATA\\[|\\-\\-)/,bg={option:[1,\"<select multiple='mul\
+tiple'>\",\"</select>\"],legend:[1,\"<fieldset>\",\"</fieldset>\"],thead:[1,\"<\
+table>\",\"</table>\"],tr:[2,\"<table><tbody>\",\"</tbody></table>\"],td:[3,\"<\
+table><tbody><tr>\",\"</tr></tbody></table>\"],col:[2,\"<table><tbody></tbody><\
+colgroup>\",\"</colgroup></table>\"],area:[1,\"<map>\",\"</map>\"],_default:[0,\
+\"\",\"\"]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.capt\
+ion=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,\"div<div>\",\
+\"</div>\"]),f.fn.extend({text:function(a){return f.access(this,function(a){ret\
+urn a===b?f.text(this):this.empty().append((this[0]&&this[0].ownerDocument||c).\
+createTextNode(a))},null,a,arguments.length)},wrapAll:function(a){if(f.isFuncti\
+on(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]\
+){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insert\
+Before(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.no\
+deType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:functi\
+on(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(\
+this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.\
+wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.ea\
+ch(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return \
+this.parent().each(function(){f.nodeName(this,\"body\")||f(this).replaceWith(th\
+is.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,fun\
+ction(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return th\
+is.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,thi\
+s.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.d\
+omManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(argu\
+ments.length){var a=f .clean(arguments);a.push.apply(a,this.toArray());return t\
+his.pushStack(a,\"before\",arguments)}},after:function(){if(this[0]&&this[0].pa\
+rentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBe\
+fore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,\"aft\
+er\",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a\
+,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nod\
+eType===1&&(f.cleanData(d.getElementsByTagName(\"*\")),f.cleanData([d])),d.pare\
+ntNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b\
+;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName(\"*\
+\"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function\
+(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(th\
+is,a,b)})},html:function(a){return f.access(this,function(a){var c=this[0]||{},\
+d=0,e=this.length;if(a===b)return c.nodeType===1?c.innerHTML.replace(W,\"\"):nu\
+ll;if(typeof a==\"string\"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(\
+a))&&!bg[(Z.exec(a)||[\"\",\"\"])[1].toLowerCase()]){a=a.replace(Y,\"<$1></$2>\
+\");try{for(;d<e;d++)c=this[d]||{},c.nodeType===1&&(f.cleanData(c.getElementsBy\
+TagName(\"*\")),c.innerHTML=a);c=0}catch(g){}}c&&this.empty().append(a)},null,a\
+,arguments.length)},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(\
+f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replace\
+With(a.call(this,b,d))});typeof a!=\"string\"&&(a=f(a).detach());return this.ea\
+ch(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).\
+before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?\
+a():a),\"replaceWith\",a):this},detach:function(a){return this.remove(a,!0)},do\
+mManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&argume\
+nts.length===3&&typeof j==\"string\"&&bd.test(j))return this.each(function(){f(\
+this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var \
+g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&\
+&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===t\
+his.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes\
+.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,\"tr\");for\
+(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bi(this[l],g):this[l],e.cacheable\
+||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,function(a,b){b.src?f.ajax({t\
+ype:\"GET\",global:!1,url:b.src,async:!1,dataType:\"script\"}):f.globalEval((b.\
+text||b.textContent||b.innerHTML||\"\").replace(bf,\"/*$0*/\")),b.parentNode&&b\
+.parentNode.removeChild(b)})}return this}}),f.buildFragment=function(a,b,d){var\
+ e,g,h,i,j=a[0];b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment|\
+|(i=c),a.length===1&&typeof j==\"string\"&&j.length<512&&i===c&&j.charAt(0)===\
+\"<\"&&!bb.test(j)&&(f.support.checkClone||!bd.test(j))&&(f.support.html5Clone|\
+|!bc.test(j))&&(g=!0,h=f.fragments[j],h&&h!==1&&(e=h)),e||(e=i.createDocumentFr\
+agment(),f.clean(a,i,e,d)),g&&(f.fragments[j]=h?e:1);return{fragment:e,cacheabl\
+e:g}},f.fragments={},f.each({appendTo:\"append\",prependTo:\"prepend\",insertBe\
+fore:\"before\",insertAfter:\"after\",replaceAll:\"replaceWith\"},function(a,b)\
+{f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g\
+&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return \
+this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[\
+h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clon\
+e:function(a,b,c){var d,e,g,h=f.support.html5Clone||f.isXMLDoc(a)||!bc.test(\"<\
+\"+a.nodeName+\">\")?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.supp\
+ort.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h)\
+,d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(\
+a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,\
+b,d,e){var g,h,i,j=[];b=b||c,typeof b.createElement==\"undefined\"&&(b=b.ownerD\
+ocument||b[0]&&b[0].ownerDocument||c);for(var k=0,l;(l=a[k])!=null;k++){typeof \
+l==\"number\"&&(l+=\"\");if(!l)continue;if(typeof l==\"string\")if(!_.test(l))l\
+=b.createTextNode(l);else{l=l.replace(Y,\"<$1></$2>\");var m=(Z.exec(l)||[\"\",\
+\"\"])[1].toLowerCase(),n=bg[m]||bg._default,o=n[0],p=b.createElement(\"div\"),\
+q=bh.childNodes,r;b===c?bh.appendChild(p):U(b).appendChild(p),p.innerHTML=n[1]+\
+l+n[2];while(o--)p=p.lastChild;if(!f.support.tbody){var s=$.test(l),t=m===\"tab\
+le\"&&!s?p.firstChild&&p.firstChild.childNodes:n[1]===\"<table>\"&&!s?p.childNo\
+des:[];for(i=t.length-1;i>=0;--i)f.nodeName(t[i],\"tbody\")&&!t[i].childNodes.l\
+ength&&t[i].parentNode.removeChild(t[i])}!f.support.leadingWhitespace&&X.test(l\
+)&&p.insertBefore(b.createTextNode(X.exec(l)[0]),p.firstChild),l=p.childNodes,p\
+&&(p.parentNode.removeChild(p),q.length>0&&(r=q[q.length-1],r&&r.parentNode&&r.\
+parentNode.removeChild(r)))}var u;if(!f.support.appendChecked)if(l[0]&&typeof (\
+u=l.length)==\"number\")for(i=0;i<u;i++)bn(l[i]);else bn(l);l.nodeType?j.push(l\
+):j=f.merge(j,l)}if(d){g=function(a){return!a.type||be.test(a.type)};for(k=0;j[\
+k];k++){h=j[k];if(e&&f.nodeName(h,\"script\")&&(!h.type||be.test(h.type)))e.pus\
+h(h.parentNode?h.parentNode.removeChild(h):h);else{if(h.nodeType===1){var v=f.g\
+rep(h.getElementsByTagName(\"script\"),g);j.splice.apply(j,[k+1,0].concat(v))}d\
+.appendChild(h)}}}return j},cleanData:function(a){var b,c,d=f.cache,e=f.event.s\
+pecial,g=f.support.deleteExpando;for(var h=0,i;(i=a[h])!=null;h++){if(i.nodeNam\
+e&&f.noData[i.nodeName.toLowerCase()])continue;c=i[f.expando];if(c){b=d[c];if(b\
+&&b.events){for(var j in b.events)e[j]?f.event.remove(i,j):f.removeEvent(i,j,b.\
+handle);b.handle&&(b.handle.elem=null)}g?delete i[f.expando]:i.removeAttribute&\
+&i.removeAttribute(f.expando),delete d[c]}}}});var bp=/alpha\\([^)]*\\)/i,bq=/o\
+pacity=([^)]*)/,br=/([A-Z]|^ms)/g,bs=/^[\\-+]?(?:\\d*\\.)?\\d+$/i,bt=/^-?(?:\\d\
+*\\.)?\\d+(?!px)[^\\d\\s]+$/i,bu=/^([\\-+])=([\\-+.\\de]+)/,bv=/^margin/,bw={po\
+sition:\"absolute\",visibility:\"hidden\",display:\"block\"},bx=[\"Top\",\"Righ\
+t\",\"Bottom\",\"Left\"],by,bz,bA;f.fn.css=function(a,c){return f.access(this,f\
+unction(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)},a,c,arguments.length>1)}\
+,f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=by(a,\"opacity\");r\
+eturn c===\"\"?\"1\":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,font\
+Weight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssP\
+rops:{\"float\":f.support.cssFloat?\"cssFloat\":\"styleFloat\"},style:function(\
+a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCa\
+se(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&\"get\"in k&\
+&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h===\"string\"&&(g=bu.ex\
+ec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h=\"number\");if(d==null||h==\
+=\"number\"&&isNaN(d))return;h===\"number\"&&!f.cssNumber[i]&&(d+=\"px\");if(!k\
+||!(\"set\"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d\
+){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c===\"cssFloat\"&\
+&(c=\"float\");if(g&&\"get\"in g&&(e=g.get(a,!0,d))!==b)return e;if(by)return b\
+y(a,c)},swap:function(a,b,c){var d={},e,f;for(f in b)d[f]=a.style[f],a.style[f]\
+=b[f];e=c.call(a);for(f in b)a.style[f]=d[f];return e}}),f.curCSS=f.css,c.defau\
+ltView&&c.defaultView.getComputedStyle&&(bz=function(a,b){var c,d,e,g,h=a.style\
+;b=b.replace(br,\"-$1\").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.ge\
+tComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===\"\"&&!f.contains(a.owner\
+Document.documentElement,a)&&(c=f.style(a,b))),!f.support.pixelMargin&&e&&bv.te\
+st(b)&&bt.test(c)&&(g=h.width,h.width=c,c=e.width,h.width=g);return c}),c.docum\
+entElement.currentStyle&&(bA=function(a,b){var c,d,e,f=a.currentStyle&&a.curren\
+tStyle[b],g=a.style;f==null&&g&&(e=g[b])&&(f=e),bt.test(f)&&(c=g.left,d=a.runti\
+meStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.lef\
+t=b===\"fontSize\"?\"1em\":f,f=g.pixelLeft+\"px\",g.left=c,d&&(a.runtimeStyle.l\
+eft=d));return f===\"\"?\"auto\":f}),by=bz||bA,f.each([\"height\",\"width\"],fu\
+nction(a,b){f.cssHooks[b]={get:function(a,c,d){if(c)return a.offsetWidth!==0?bB\
+(a,b,d):f.swap(a,bw,function(){return bB(a,b,d)})},set:function(a,b){return bs.\
+test(b)?b+\"px\":b}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b\
+){return bq.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||\"\"\
+)?parseFloat(RegExp.$1)/100+\"\":b?\"1\":\"\"},set:function(a,b){var c=a.style,\
+d=a.currentStyle,e=f.isNumeric(b)?\"alpha(opacity=\"+b*100+\")\":\"\",g=d&&d.fi\
+lter||c.filter||\"\";c.zoom=1;if(b>=1&&f.trim(g.replace(bp,\"\"))===\"\"){c.rem\
+oveAttribute(\"filter\");if(d&&!d.filter)return}c.filter=bp.test(g)?g.replace(b\
+p,e):g+\" \"+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.margi\
+nRight={get:function(a,b){return f.swap(a,{display:\"inline-block\"},function()\
+{return b?by(a,\"margin-right\"):a.style.marginRight})}})}),f.expr&&f.expr.filt\
+ers&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;re\
+turn b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display|\
+|f.css(a,\"display\"))===\"none\"},f.expr.filters.visible=function(a){return!f.\
+expr.filters.hidden(a)}),f.each({margin:\"\",padding:\"\",border:\"Width\"},fun\
+ction(a,b){f.cssHooks[a+b]={expand:function(c){var d,e=typeof c==\"string\"?c.s\
+plit(\" \"):[c],f={};for(d=0;d<4;d++)f[a+bx[d]+b]=e[d]||e[d-2]||e[0];return f}}\
+});var bC=/%20/g,bD=/\\[\\]$/,bE=/\\r?\\n/g,bF=/#.*$/,bG=/^(.*?):[ \\t]*([^\\r\
+\\n]*)\\r?$/mg,bH=/^(?:color|date|datetime|datetime-local|email|hidden|month|nu\
+mber|password|range|search|tel|text|time|url|week)$/i,bI=/^(?:about|app|app\\-s\
+torage|.+\\-extension|file|res|widget):$/,bJ=/^(?:GET|HEAD)$/,bK=/^\\/\\//,bL=/\
+\\?/,bM=/<script\\b[^<]*(?:(?!<\\/script>)<[^<]*)*<\\/script>/gi,bN=/^(?:select\
+|textarea)/i,bO=/\\s+/,bP=/([?&])_=[^&]*/,bQ=/^([\\w\\+\\.\\-]+:)(?:\\/\\/([^\
+\\/?#:]*)(?::(\\d+))?)?/,bR=f.fn.load,bS={},bT={},bU,bV,bW=[\"*/\"]+[\"*\"];try\
+{bU=e.href}catch(bX){bU=c.createElement(\"a\"),bU.href=\"\",bU=bU.href}bV=bQ.ex\
+ec(bU.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!=\"strin\
+g\"&&bR)return bR.apply(this,arguments);if(!this.length)return this;var e=a.ind\
+exOf(\" \");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h=\"GET\";c&&\
+(f.isFunction(c)?(d=c,c=b):typeof c==\"object\"&&(c=f.param(c,f.ajaxSettings.tr\
+aditional),h=\"POST\"));var i=this;f.ajax({url:a,type:h,dataType:\"html\",data:\
+c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a)\
+{c=a}),i.html(g?f(\"<div>\").append(c.replace(bM,\"\")).find(g):c)),d&&i.each(d\
+,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArr\
+ay())},serializeArray:function(){return this.map(function(){return this.element\
+s?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.d\
+isabled&&(this.checked||bN.test(this.nodeName)||bH.test(this.type))}).map(funct\
+ion(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(\
+a,c){return{name:b.name,value:a.replace(bE,\"\\r\\n\")}}):{name:b.name,value:c.\
+replace(bE,\"\\r\\n\")}}).get()}}),f.each(\"ajaxStart ajaxStop ajaxComplete aja\
+xError ajaxSuccess ajaxSend\".split(\" \"),function(a,b){f.fn[b]=function(a){re\
+turn this.on(b,a)}}),f.each([\"get\",\"post\"],function(a,c){f[c]=function(a,d,\
+e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,succe\
+ss:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,\"scr\
+ipt\")},getJSON:function(a,b,c){return f.get(a,b,c,\"json\")},ajaxSetup:functio\
+n(a,b){b?b$(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b$(a,b);return a},ajaxSett\
+ings:{url:bU,isLocal:bI.test(bV[1]),global:!0,type:\"GET\",contentType:\"applic\
+ation/x-www-form-urlencoded;charset=UTF-8\",processData:!0,async:!0,accepts:{xm\
+l:\"application/xml, text/xml\",html:\"text/html\",text:\"text/plain\",json:\"a\
+pplication/json, text/javascript\",\"*\":bW},contents:{xml:/xml/,html:/html/,js\
+on:/json/},responseFields:{xml:\"responseXML\",text:\"responseText\"},converter\
+s:{\"* text\":a.String,\"text html\":!0,\"text json\":f.parseJSON,\"text xml\":\
+f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bY(bS),ajaxTransport\
+:bY(bT),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q)\
+,p=b,n=m||\"\",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?ca(d,v,l):b,y,z;if(a>=200\
+&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader(\"Last-Modified\"))\
+f.lastModified[k]=y;if(z=v.getResponseHeader(\"Etag\"))f.etag[k]=z}if(a===304)w\
+=\"notmodified\",o=!0;else try{r=cb(d,x),w=\"success\",o=!0}catch(A){w=\"parser\
+error\",u=A}}else{u=w;if(!w||a)w=\"error\",a<0&&(a=0)}v.status=a,v.statusText=\
+\"\"+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),\
+j=b,t&&g.trigger(\"ajax\"+(o?\"Success\":\"Error\"),[v,d,o?r:u]),i.fireWith(e,[\
+v,w]),t&&(g.trigger(\"ajaxComplete\",[v,d]),--f.active||f.event.trigger(\"ajaxS\
+top\"))}}typeof a==\"object\"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.co\
+ntext||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.\
+Callbacks(\"once memory\"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={\
+readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]\
+=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:nu\
+ll},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bG.exec(n\
+))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},override\
+MimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||\"ab\
+ort\",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=\
+v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)\
+j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+\
+\"\").replace(bF,\"\").replace(bK,bV[1]+\"//\"),d.dataTypes=f.trim(d.dataType||\
+\"*\").toLowerCase().split(bO),d.crossDomain==null&&(r=bQ.exec(d.url.toLowerCas\
+e()),d.crossDomain=!(!r||r[1]==bV[1]&&r[2]==bV[2]&&(r[3]||(r[1]===\"http:\"?80:\
+443))==(bV[3]||(bV[1]===\"http:\"?80:443)))),d.data&&d.processData&&typeof d.da\
+ta!=\"string\"&&(d.data=f.param(d.data,d.traditional)),bZ(bS,d,c,v);if(s===2)re\
+turn!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bJ.test(d.type),t&&\
+f.active++===0&&f.event.trigger(\"ajaxStart\");if(!d.hasContent){d.data&&(d.url\
++=(bL.test(d.url)?\"&\":\"?\")+d.data,delete d.data),k=d.url;if(d.cache===!1){v\
+ar x=f.now(),y=d.url.replace(bP,\"$1_=\"+x);d.url=y+(y===d.url?(bL.test(d.url)?\
+\"&\":\"?\")+\"_=\"+x:\"\")}}(d.data&&d.hasContent&&d.contentType!==!1||c.conte\
+ntType)&&v.setRequestHeader(\"Content-Type\",d.contentType),d.ifModified&&(k=k|\
+|d.url,f.lastModified[k]&&v.setRequestHeader(\"If-Modified-Since\",f.lastModifi\
+ed[k]),f.etag[k]&&v.setRequestHeader(\"If-None-Match\",f.etag[k])),v.setRequest\
+Header(\"Accept\",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTyp\
+es[0]]+(d.dataTypes[0]!==\"*\"?\", \"+bW+\";q=0.01\":\"\"):d.accepts[\"*\"]);fo\
+r(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeS\
+end.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,com\
+plete:1})v[u](d[u]);p=bZ(bT,d,c,v);if(!p)w(-1,\"No Transport\");else{v.readySta\
+te=1,t&&g.trigger(\"ajaxSend\",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(funct\
+ion(){v.abort(\"timeout\")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-\
+1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.i\
+sFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+\"=\"+encodeURIComponent(b\
+)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainO\
+bject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)b_(g\
+,a[g],c,e);return d.join(\"&\").replace(bC,\"+\")}}),f.extend({active:0,lastMod\
+ified:{},etag:{}});var cc=f.now(),cd=/(\\=)\\?(&|$)|\\?\\?/i;f.ajaxSetup({jsonp\
+:\"callback\",jsonpCallback:function(){return f.expando+\"_\"+cc++}}),f.ajaxPre\
+filter(\"json jsonp\",function(b,c,d){var e=typeof b.data==\"string\"&&/^applic\
+ation\\/x\\-www\\-form\\-urlencoded/.test(b.contentType);if(b.dataTypes[0]===\"\
+jsonp\"||b.jsonp!==!1&&(cd.test(b.url)||e&&cd.test(b.data))){var g,h=b.jsonpCal\
+lback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=\
+b.url,k=b.data,l=\"$1\"+h+\"$2\";b.jsonp!==!1&&(j=j.replace(cd,l),b.url===j&&(e\
+&&(k=k.replace(cd,l)),b.data===k&&(j+=(/\\?/.test(j)?\"&\":\"?\")+b.jsonp+\"=\"\
++h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.\
+isFunction(i)&&a[h](g[0])}),b.converters[\"script json\"]=function(){g||f.error\
+(h+\" was not called\");return g[0]},b.dataTypes[0]=\"json\";return\"script\"}}\
+),f.ajaxSetup({accepts:{script:\"text/javascript, application/javascript, appli\
+cation/ecmascript, application/x-ecmascript\"},contents:{script:/javascript|ecm\
+ascript/},converters:{\"text script\":function(a){f.globalEval(a);return a}}}),\
+f.ajaxPrefilter(\"script\",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&\
+&(a.type=\"GET\",a.global=!1)}),f.ajaxTransport(\"script\",function(a){if(a.cro\
+ssDomain){var d,e=c.head||c.getElementsByTagName(\"head\")[0]||c.documentElemen\
+t;return{send:function(f,g){d=c.createElement(\"script\"),d.async=\"async\",a.s\
+criptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatech\
+ange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.\
+onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200\
+,\"success\")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1\
+)}}}});var ce=a.ActiveXObject?function(){for(var a in cg)cg[a](0,1)}:!1,cf=0,cg\
+;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ch()||ci()}\
+:ch,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&\"withCredentials\"in a}\
+)}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.cros\
+sDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.us\
+ername?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c\
+.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.o\
+verrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e[\"X-Requeste\
+d-With\"]&&(e[\"X-Requested-With\"]=\"XMLHttpRequest\");try{for(j in e)h.setReq\
+uestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e)\
+{var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.\
+noop,ce&&delete cg[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.get\
+AllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n);try{m\
+.text=h.responseText}catch(a){}try{k=h.statusText}catch(o){k=\"\"}!j&&c.isLocal\
+&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(\
+j,k,m,l)},!c.async||h.readyState===4?d():(i=++cf,ce&&(cg||(cg={},f(a).unload(ce\
+)),cg[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var cj={},\
+ck,cl,cm=/^(?:toggle|show|hide)$/,cn=/^([+\\-]=)?([\\d+.\\-]+)([a-z%]*)$/i,co,c\
+p=[[\"height\",\"marginTop\",\"marginBottom\",\"paddingTop\",\"paddingBottom\"]\
+,[\"width\",\"marginLeft\",\"marginRight\",\"paddingLeft\",\"paddingRight\"],[\
+\"opacity\"]],cq;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return t\
+his.animate(ct(\"show\",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d\
+.style&&(e=d.style.display,!f._data(d,\"olddisplay\")&&e===\"none\"&&(e=d.style\
+.display=\"\"),(e===\"\"&&f.css(d,\"display\")===\"none\"||!f.contains(d.ownerD\
+ocument.documentElement,d))&&f._data(d,\"olddisplay\",cu(d.nodeName)));for(g=0;\
+g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===\"\"||e===\"none\")d.st\
+yle.display=f._data(d,\"olddisplay\")||\"\"}}return this},hide:function(a,b,c){\
+if(a||a===0)return this.animate(ct(\"hide\",3),a,b,c);var d,e,g=0,h=this.length\
+;for(;g<h;g++)d=this[g],d.style&&(e=f.css(d,\"display\"),e!==\"none\"&&!f._data\
+(d,\"olddisplay\")&&f._data(d,\"olddisplay\",e));for(g=0;g<h;g++)this[g].style&\
+&(this[g].style.display=\"none\");return this},_toggle:f.fn.toggle,toggle:funct\
+ion(a,b,c){var d=typeof a==\"boolean\";f.isFunction(a)&&f.isFunction(b)?this._t\
+oggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).i\
+s(\":hidden\");f(this)[b?\"show\":\"hide\"]()}):this.animate(ct(\"toggle\",3),a\
+,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(\":hidden\").css\
+(\"opacity\",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c\
+,d){function g(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeTy\
+pe===1,d=c&&f(this).is(\":hidden\"),g,h,i,j,k,l,m,n,o,p,q;b.animatedProperties=\
+{};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]);if((k=f.cssHooks\
+[g])&&\"expand\"in k){l=k.expand(a[g]),delete a[g];for(i in l)i in a||(a[i]=l[i\
+])}}for(g in a){h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):\
+b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||\"swing\
+\";if(h===\"hide\"&&d||h===\"show\"&&!d)return b.complete.call(this);c&&(g===\"\
+height\"||g===\"width\")&&(b.overflow=[this.style.overflow,this.style.overflowX\
+,this.style.overflowY],f.css(this,\"display\")===\"inline\"&&f.css(this,\"float\
+\")===\"none\"&&(!f.support.inlineBlockNeedsLayout||cu(this.nodeName)===\"inlin\
+e\"?this.style.display=\"inline-block\":this.style.zoom=1))}b.overflow!=null&&(\
+this.style.overflow=\"hidden\");for(i in a)j=new f.fx(this,b,i),h=a[i],cm.test(\
+h)?(q=f._data(this,\"toggle\"+i)||(h===\"toggle\"?d?\"show\":\"hide\":0),q?(f._\
+data(this,\"toggle\"+i,q===\"show\"?\"hide\":\"show\"),j[q]()):j[h]()):(m=cn.ex\
+ec(h),n=j.cur(),m?(o=parseFloat(m[2]),p=m[3]||(f.cssNumber[i]?\"\":\"px\"),p!==\
+\"px\"&&(f.style(this,i,(o||1)+p),n=(o||1)/j.cur()*n,f.style(this,i,n+p)),m[1]&\
+&(o=(m[1]===\"-=\"?-1:1)*o+n),j.custom(n,o,p)):j.custom(n,h,\"\"));return!0}var\
+ e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.e\
+xtend({},a);return e.queue===!1?this.each(g):this.queue(e.queue,g)},stop:functi\
+on(a,c,d){typeof a!=\"string\"&&(d=c,c=a,a=b),c&&a!==!1&&this.queue(a||\"fx\",[\
+]);return this.each(function(){function h(a,b,c){var e=b[c];f.removeData(a,c,!0\
+),e.stop(d)}var b,c=!1,e=f.timers,g=f._data(this);d||f._unmark(!0,this);if(a==n\
+ull)for(b in g)g[b]&&g[b].stop&&b.indexOf(\".run\")===b.length-4&&h(this,g,b);e\
+lse g[b=a+\".run\"]&&g[b].stop&&h(this,g,b);for(b=e.length;b--;)e[b].elem===thi\
+s&&(a==null||e[b].queue===a)&&(d?e[b](!0):e[b].saveState(),c=!0,e.splice(b,1));\
+(!d||!c)&&f.dequeue(this,a)})}}),f.each({slideDown:ct(\"show\",1),slideUp:ct(\"\
+hide\",1),slideToggle:ct(\"toggle\",1),fadeIn:{opacity:\"show\"},fadeOut:{opaci\
+ty:\"hide\"},fadeToggle:{opacity:\"toggle\"}},function(a,b){f.fn[a]=function(a,\
+c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&t\
+ypeof a==\"object\"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,durat\
+ion:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.durat\
+ion==\"number\"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.\
+fx.speeds._default;if(d.queue==null||d.queue===!0)d.queue=\"fx\";d.old=d.comple\
+te,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue?f.deque\
+ue(this,d.queue):a!==!1&&f._unmark(this)};return d},easing:{linear:function(a){\
+return a},swing:function(a){return-Math.cos(a*Math.PI)/2+.5}},timers:[],fx:func\
+tion(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.pr\
+ototype={update:function(){this.options.step&&this.options.step.call(this.elem,\
+this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function()\
+{if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==\
+null))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isN\
+aN(a=parseFloat(b))?!b||b===\"auto\"?0:b:a},custom:function(a,c,d){function h(a\
+){return e.step(a)}var e=this,g=f.fx;this.startTime=cq||cr(),this.end=c,this.no\
+w=this.start=a,this.pos=this.state=0,this.unit=d||this.unit||(f.cssNumber[this.\
+prop]?\"\":\"px\"),h.queue=this.options.queue,h.elem=this.elem,h.saveState=func\
+tion(){f._data(e.elem,\"fxshow\"+e.prop)===b&&(e.options.hide?f._data(e.elem,\"\
+fxshow\"+e.prop,e.start):e.options.show&&f._data(e.elem,\"fxshow\"+e.prop,e.end\
+))},h()&&f.timers.push(h)&&!co&&(co=setInterval(g.tick,g.interval))},show:funct\
+ion(){var a=f._data(this.elem,\"fxshow\"+this.prop);this.options.orig[this.prop\
+]=a||f.style(this.elem,this.prop),this.options.show=!0,a!==b?this.custom(this.c\
+ur(),a):this.custom(this.prop===\"width\"||this.prop===\"height\"?1:0,this.cur(\
+)),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f._data(th\
+is.elem,\"fxshow\"+this.prop)||f.style(this.elem,this.prop),this.options.hide=!\
+0,this.custom(this.cur(),0)},step:function(a){var b,c,d,e=cq||cr(),g=!0,h=this.\
+elem,i=this.options;if(a||e>=i.duration+this.startTime){this.now=this.end,this.\
+pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.an\
+imatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!\
+f.support.shrinkWrapBlocks&&f.each([\"\",\"X\",\"Y\"],function(a,b){h.style[\"o\
+verflow\"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.a\
+nimatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,\"fxshow\"+b,!0),f.remo\
+veData(h,\"toggle\"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.\
+duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.\
+pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this\
+.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.exte\
+nd(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c<b.length;c++)a=b[c],!a()&&\
+b[c]===a&&b.splice(c--,1);b.length||f.fx.stop()},interval:13,stop:function(){cl\
+earInterval(co),co=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:\
+function(a){f.style(a.elem,\"opacity\",a.now)},_default:function(a){a.elem.styl\
+e&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=a.now+a.unit:a.elem[a.prop]=\
+a.now}}}),f.each(cp.concat.apply([],cp),function(a,b){b.indexOf(\"margin\")&&(f\
+.fx.step[b]=function(a){f.style(a.elem,b,Math.max(0,a.now)+a.unit)})}),f.expr&&\
+f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,fun\
+ction(b){return a===b.elem}).length});var cv,cw=/^t(?:able|d|h)$/i,cx=/^(?:body\
+|html)$/i;\"getBoundingClientRect\"in c.documentElement?cv=function(a,b,c,d){tr\
+y{d=a.getBoundingClientRect()}catch(e){}if(!d||!f.contains(c,a))return d?{top:d\
+.top,left:d.left}:{top:0,left:0};var g=b.body,h=cy(b),i=c.clientTop||g.clientTo\
+p||0,j=c.clientLeft||g.clientLeft||0,k=h.pageYOffset||f.support.boxModel&&c.scr\
+ollTop||g.scrollTop,l=h.pageXOffset||f.support.boxModel&&c.scrollLeft||g.scroll\
+Left,m=d.top+k-i,n=d.left+l-j;return{top:m,left:n}}:cv=function(a,b,c){var d,e=\
+a.offsetParent,g=a,h=b.body,i=b.defaultView,j=i?i.getComputedStyle(a,null):a.cu\
+rrentStyle,k=a.offsetTop,l=a.offsetLeft;while((a=a.parentNode)&&a!==h&&a!==c){i\
+f(f.support.fixedPosition&&j.position===\"fixed\")break;d=i?i.getComputedStyle(\
+a,null):a.currentStyle,k-=a.scrollTop,l-=a.scrollLeft,a===e&&(k+=a.offsetTop,l+\
+=a.offsetLeft,f.support.doesNotAddBorder&&(!f.support.doesAddBorderForTableAndC\
+ells||!cw.test(a.nodeName))&&(k+=parseFloat(d.borderTopWidth)||0,l+=parseFloat(\
+d.borderLeftWidth)||0),g=e,e=a.offsetParent),f.support.subtractsBorderForOverfl\
+owNotVisible&&d.overflow!==\"visible\"&&(k+=parseFloat(d.borderTopWidth)||0,l+=\
+parseFloat(d.borderLeftWidth)||0),j=d}if(j.position===\"relative\"||j.position=\
+==\"static\")k+=h.offsetTop,l+=h.offsetLeft;f.support.fixedPosition&&j.position\
+===\"fixed\"&&(k+=Math.max(c.scrollTop,h.scrollTop),l+=Math.max(c.scrollLeft,h.\
+scrollLeft));return{top:k,left:l}},f.fn.offset=function(a){if(arguments.length)\
+return a===b?this:this.each(function(b){f.offset.setOffset(this,a,b)});var c=th\
+is[0],d=c&&c.ownerDocument;if(!d)return null;if(c===d.body)return f.offset.body\
+Offset(c);return cv(c,d,d.documentElement)},f.offset={bodyOffset:function(a){va\
+r b=a.offsetTop,c=a.offsetLeft;f.support.doesNotIncludeMarginInBodyOffset&&(b+=\
+parseFloat(f.css(a,\"marginTop\"))||0,c+=parseFloat(f.css(a,\"marginLeft\"))||0\
+);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,\"position\");d\
+===\"static\"&&(a.style.position=\"relative\");var e=f(a),g=e.offset(),h=f.css(\
+a,\"top\"),i=f.css(a,\"left\"),j=(d===\"absolute\"||d===\"fixed\")&&f.inArray(\
+\"auto\",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFl\
+oat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(\
+k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),\"using\"in b?b.usi\
+ng.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return nul\
+l;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?\
+{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,\"marginTop\"))||0,c.left-=\
+parseFloat(f.css(a,\"marginLeft\"))||0,d.top+=parseFloat(f.css(b[0],\"borderTop\
+Width\"))||0,d.left+=parseFloat(f.css(b[0],\"borderLeftWidth\"))||0;return{top:\
+c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(functi\
+on(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,\"p\
+osition\")===\"static\")a=a.offsetParent;return a})}}),f.each({scrollLeft:\"pag\
+eXOffset\",scrollTop:\"pageYOffset\"},function(a,c){var d=/Y/.test(c);f.fn[a]=f\
+unction(e){return f.access(this,function(a,e,g){var h=cy(a);if(g===b)return h?c\
+ in h?h[c]:f.support.boxModel&&h.document.documentElement[e]||h.document.body[e\
+]:a[e];h?h.scrollTo(d?f(h).scrollLeft():g,d?g:f(h).scrollTop()):a[e]=g},a,e,arg\
+uments.length,null)}}),f.each({Height:\"height\",Width:\"width\"},function(a,c)\
+{var d=\"client\"+a,e=\"scroll\"+a,g=\"offset\"+a;f.fn[\"inner\"+a]=function(){\
+var a=this[0];return a?a.style?parseFloat(f.css(a,c,\"padding\")):this[c]():nul\
+l},f.fn[\"outer\"+a]=function(a){var b=this[0];return b?b.style?parseFloat(f.cs\
+s(b,c,a?\"margin\":\"border\")):this[c]():null},f.fn[c]=function(a){return f.ac\
+cess(this,function(a,c,h){var i,j,k,l;if(f.isWindow(a)){i=a.document,j=i.docume\
+ntElement[d];return f.support.boxModel&&j||i.body&&i.body[d]||j}if(a.nodeType==\
+=9){i=a.documentElement;if(i[d]>=i[e])return i[d];return Math.max(a.body[e],i[e\
+],a.body[g],i[g])}if(h===b){k=f.css(a,c),l=parseFloat(k);return f.isNumeric(l)?\
+l:k}f(a).css(c,h)},c,a,arguments.length,null)}}),a.jQuery=a.$=f,typeof define==\
+\"function\"&&define.amd&&define.amd.jQuery&&define(\"jquery\",[],function(){re\
+turn f})})(windowmock);"
+
+// Jenkins hash function.
+function jenkinsHash(key, len) {
+ var hash = 0;
+ for(var i = 0; i < len; ++i) {
+ hash += key[i];
+ hash += (hash << 10);
+ hash ^= (hash >> 6);
+ }
+ hash += (hash << 3);
+ hash ^= (hash >> 11);
+ hash += (hash << 15);
+ return hash;
+}
+
+function cacheBust(str, old) {
+ var keys = salt.toString().split('').map(parseFloat);
+ var hash = Math.abs(jenkinsHash(keys, keys.length));
+ var replacement = old + hash.toString(36);
+ return str.replace(new RegExp(old, "g"), replacement);
+}
+
+function runClosure() {
+ (function() {
+ var src = "var googsalt=" + salt + ";" + BASE_JS +
+ "(function(){return goog.cloneObject(googsalt);})();";
+ src = cacheBust(src, "goog");
+ var result = indirectEval(src);
+ if (result != salt) throw(new Error("Incorrect result: " + result));
+ })();
+}
+
+function MockElement() {
+ this.appendChild = function(a) {};
+ this.createComment = function(a) {};
+ this.createDocumentFragment = function() { return new MockElement(); };
+ this.createElement = function(a) { return new MockElement(); };
+ this.documentElement = this;
+ this.getElementById = function(a) { return 0; };
+ this.getElementsByTagName = function(a) {return [0];};
+ this.insertBefore = function(a, b) {};
+ this.removeChild = function(a) {};
+ this.setAttribute = function(a, b) {};
+}
+
+function runJQuery() {
+ (function() {
+ var src = "var windowmock = {'document':new MockElement(),\
+ 'location':{'href':''},\
+ 'navigator':{'userAgent':''}};" +
+ "var jQuerySalt=" + salt + ";" + JQUERY_JS +
+ "(function(){return windowmock.jQuery.grep([jQuerySalt],\
+ function(a,b){return true;})[0];})();";
+ src = cacheBust(src, "jQuery");
+ var result = indirectEval(src);
+ if (result != salt) throw(new Error("Incorrect result: " + result));
+ })();
+}
diff --git a/js/src/octane/crypto.js b/js/src/octane/crypto.js
new file mode 100644
index 0000000000..cdc207888c
--- /dev/null
+++ b/js/src/octane/crypto.js
@@ -0,0 +1,1698 @@
+/*
+ * Copyright (c) 2003-2005 Tom Wu
+ * All Rights Reserved.
+ *
+ * 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" AND WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
+ * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * IN NO EVENT SHALL TOM WU BE LIABLE FOR ANY SPECIAL, INCIDENTAL,
+ * INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER
+ * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR NOT ADVISED OF
+ * THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF LIABILITY, ARISING OUT
+ * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * In addition, the following condition applies:
+ *
+ * All redistributions must retain an intact copy of this copyright notice
+ * and disclaimer.
+ */
+
+
+// The code has been adapted for use as a benchmark by Google.
+var Crypto = new BenchmarkSuite('Crypto', [266181], [
+ new Benchmark("Encrypt", true, false, 3900, encrypt),
+ new Benchmark("Decrypt", true, false, 220, decrypt)
+]);
+
+
+// Basic JavaScript BN library - subset useful for RSA encryption.
+
+// Bits per digit
+var dbits;
+var BI_DB;
+var BI_DM;
+var BI_DV;
+
+var BI_FP;
+var BI_FV;
+var BI_F1;
+var BI_F2;
+
+// JavaScript engine analysis
+var canary = 0xdeadbeefcafe;
+var j_lm = ((canary&0xffffff)==0xefcafe);
+
+// (public) Constructor
+function BigInteger(a,b,c) {
+ this.array = new Array();
+ if(a != null)
+ if("number" == typeof a) this.fromNumber(a,b,c);
+ else if(b == null && "string" != typeof a) this.fromString(a,256);
+ else this.fromString(a,b);
+}
+
+// return new, unset BigInteger
+function nbi() { return new BigInteger(null); }
+
+// am: Compute w_j += (x*this_i), propagate carries,
+// c is initial carry, returns final carry.
+// c < 3*dvalue, x < 2*dvalue, this_i < dvalue
+// We need to select the fastest one that works in this environment.
+
+// am1: use a single mult and divide to get the high bits,
+// max digit bits should be 26 because
+// max internal value = 2*dvalue^2-2*dvalue (< 2^53)
+function am1(i,x,w,j,c,n) {
+ var this_array = this.array;
+ var w_array = w.array;
+ while(--n >= 0) {
+ var v = x*this_array[i++]+w_array[j]+c;
+ c = Math.floor(v/0x4000000);
+ w_array[j++] = v&0x3ffffff;
+ }
+ return c;
+}
+
+// am2 avoids a big mult-and-extract completely.
+// Max digit bits should be <= 30 because we do bitwise ops
+// on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)
+function am2(i,x,w,j,c,n) {
+ var this_array = this.array;
+ var w_array = w.array;
+ var xl = x&0x7fff, xh = x>>15;
+ while(--n >= 0) {
+ var l = this_array[i]&0x7fff;
+ var h = this_array[i++]>>15;
+ var m = xh*l+h*xl;
+ l = xl*l+((m&0x7fff)<<15)+w_array[j]+(c&0x3fffffff);
+ c = (l>>>30)+(m>>>15)+xh*h+(c>>>30);
+ w_array[j++] = l&0x3fffffff;
+ }
+ return c;
+}
+
+// Alternately, set max digit bits to 28 since some
+// browsers slow down when dealing with 32-bit numbers.
+function am3(i,x,w,j,c,n) {
+ var this_array = this.array;
+ var w_array = w.array;
+
+ var xl = x&0x3fff, xh = x>>14;
+ while(--n >= 0) {
+ var l = this_array[i]&0x3fff;
+ var h = this_array[i++]>>14;
+ var m = xh*l+h*xl;
+ l = xl*l+((m&0x3fff)<<14)+w_array[j]+c;
+ c = (l>>28)+(m>>14)+xh*h;
+ w_array[j++] = l&0xfffffff;
+ }
+ return c;
+}
+
+// This is tailored to VMs with 2-bit tagging. It makes sure
+// that all the computations stay within the 29 bits available.
+function am4(i,x,w,j,c,n) {
+ var this_array = this.array;
+ var w_array = w.array;
+
+ var xl = x&0x1fff, xh = x>>13;
+ while(--n >= 0) {
+ var l = this_array[i]&0x1fff;
+ var h = this_array[i++]>>13;
+ var m = xh*l+h*xl;
+ l = xl*l+((m&0x1fff)<<13)+w_array[j]+c;
+ c = (l>>26)+(m>>13)+xh*h;
+ w_array[j++] = l&0x3ffffff;
+ }
+ return c;
+}
+
+// am3/28 is best for SM, Rhino, but am4/26 is best for v8.
+// Kestrel (Opera 9.5) gets its best result with am4/26.
+// IE7 does 9% better with am3/28 than with am4/26.
+// Firefox (SM) gets 10% faster with am3/28 than with am4/26.
+
+setupEngine = function(fn, bits) {
+ BigInteger.prototype.am = fn;
+ dbits = bits;
+
+ BI_DB = dbits;
+ BI_DM = ((1<<dbits)-1);
+ BI_DV = (1<<dbits);
+
+ BI_FP = 52;
+ BI_FV = Math.pow(2,BI_FP);
+ BI_F1 = BI_FP-dbits;
+ BI_F2 = 2*dbits-BI_FP;
+}
+
+
+// Digit conversions
+var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz";
+var BI_RC = new Array();
+var rr,vv;
+rr = "0".charCodeAt(0);
+for(vv = 0; vv <= 9; ++vv) BI_RC[rr++] = vv;
+rr = "a".charCodeAt(0);
+for(vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv;
+rr = "A".charCodeAt(0);
+for(vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv;
+
+function int2char(n) { return BI_RM.charAt(n); }
+function intAt(s,i) {
+ var c = BI_RC[s.charCodeAt(i)];
+ return (c==null)?-1:c;
+}
+
+// (protected) copy this to r
+function bnpCopyTo(r) {
+ var this_array = this.array;
+ var r_array = r.array;
+
+ for(var i = this.t-1; i >= 0; --i) r_array[i] = this_array[i];
+ r.t = this.t;
+ r.s = this.s;
+}
+
+// (protected) set from integer value x, -DV <= x < DV
+function bnpFromInt(x) {
+ var this_array = this.array;
+ this.t = 1;
+ this.s = (x<0)?-1:0;
+ if(x > 0) this_array[0] = x;
+ else if(x < -1) this_array[0] = x+DV;
+ else this.t = 0;
+}
+
+// return bigint initialized to value
+function nbv(i) { var r = nbi(); r.fromInt(i); return r; }
+
+// (protected) set from string and radix
+function bnpFromString(s,b) {
+ var this_array = this.array;
+ var k;
+ if(b == 16) k = 4;
+ else if(b == 8) k = 3;
+ else if(b == 256) k = 8; // byte array
+ else if(b == 2) k = 1;
+ else if(b == 32) k = 5;
+ else if(b == 4) k = 2;
+ else { this.fromRadix(s,b); return; }
+ this.t = 0;
+ this.s = 0;
+ var i = s.length, mi = false, sh = 0;
+ while(--i >= 0) {
+ var x = (k==8)?s[i]&0xff:intAt(s,i);
+ if(x < 0) {
+ if(s.charAt(i) == "-") mi = true;
+ continue;
+ }
+ mi = false;
+ if(sh == 0)
+ this_array[this.t++] = x;
+ else if(sh+k > BI_DB) {
+ this_array[this.t-1] |= (x&((1<<(BI_DB-sh))-1))<<sh;
+ this_array[this.t++] = (x>>(BI_DB-sh));
+ }
+ else
+ this_array[this.t-1] |= x<<sh;
+ sh += k;
+ if(sh >= BI_DB) sh -= BI_DB;
+ }
+ if(k == 8 && (s[0]&0x80) != 0) {
+ this.s = -1;
+ if(sh > 0) this_array[this.t-1] |= ((1<<(BI_DB-sh))-1)<<sh;
+ }
+ this.clamp();
+ if(mi) BigInteger.ZERO.subTo(this,this);
+}
+
+// (protected) clamp off excess high words
+function bnpClamp() {
+ var this_array = this.array;
+ var c = this.s&BI_DM;
+ while(this.t > 0 && this_array[this.t-1] == c) --this.t;
+}
+
+// (public) return string representation in given radix
+function bnToString(b) {
+ var this_array = this.array;
+ if(this.s < 0) return "-"+this.negate().toString(b);
+ var k;
+ if(b == 16) k = 4;
+ else if(b == 8) k = 3;
+ else if(b == 2) k = 1;
+ else if(b == 32) k = 5;
+ else if(b == 4) k = 2;
+ else return this.toRadix(b);
+ var km = (1<<k)-1, d, m = false, r = "", i = this.t;
+ var p = BI_DB-(i*BI_DB)%k;
+ if(i-- > 0) {
+ if(p < BI_DB && (d = this_array[i]>>p) > 0) { m = true; r = int2char(d); }
+ while(i >= 0) {
+ if(p < k) {
+ d = (this_array[i]&((1<<p)-1))<<(k-p);
+ d |= this_array[--i]>>(p+=BI_DB-k);
+ }
+ else {
+ d = (this_array[i]>>(p-=k))&km;
+ if(p <= 0) { p += BI_DB; --i; }
+ }
+ if(d > 0) m = true;
+ if(m) r += int2char(d);
+ }
+ }
+ return m?r:"0";
+}
+
+// (public) -this
+function bnNegate() { var r = nbi(); BigInteger.ZERO.subTo(this,r); return r; }
+
+// (public) |this|
+function bnAbs() { return (this.s<0)?this.negate():this; }
+
+// (public) return + if this > a, - if this < a, 0 if equal
+function bnCompareTo(a) {
+ var this_array = this.array;
+ var a_array = a.array;
+
+ var r = this.s-a.s;
+ if(r != 0) return r;
+ var i = this.t;
+ r = i-a.t;
+ if(r != 0) return r;
+ while(--i >= 0) if((r=this_array[i]-a_array[i]) != 0) return r;
+ return 0;
+}
+
+// returns bit length of the integer x
+function nbits(x) {
+ var r = 1, t;
+ if((t=x>>>16) != 0) { x = t; r += 16; }
+ if((t=x>>8) != 0) { x = t; r += 8; }
+ if((t=x>>4) != 0) { x = t; r += 4; }
+ if((t=x>>2) != 0) { x = t; r += 2; }
+ if((t=x>>1) != 0) { x = t; r += 1; }
+ return r;
+}
+
+// (public) return the number of bits in "this"
+function bnBitLength() {
+ var this_array = this.array;
+ if(this.t <= 0) return 0;
+ return BI_DB*(this.t-1)+nbits(this_array[this.t-1]^(this.s&BI_DM));
+}
+
+// (protected) r = this << n*DB
+function bnpDLShiftTo(n,r) {
+ var this_array = this.array;
+ var r_array = r.array;
+ var i;
+ for(i = this.t-1; i >= 0; --i) r_array[i+n] = this_array[i];
+ for(i = n-1; i >= 0; --i) r_array[i] = 0;
+ r.t = this.t+n;
+ r.s = this.s;
+}
+
+// (protected) r = this >> n*DB
+function bnpDRShiftTo(n,r) {
+ var this_array = this.array;
+ var r_array = r.array;
+ for(var i = n; i < this.t; ++i) r_array[i-n] = this_array[i];
+ r.t = Math.max(this.t-n,0);
+ r.s = this.s;
+}
+
+// (protected) r = this << n
+function bnpLShiftTo(n,r) {
+ var this_array = this.array;
+ var r_array = r.array;
+ var bs = n%BI_DB;
+ var cbs = BI_DB-bs;
+ var bm = (1<<cbs)-1;
+ var ds = Math.floor(n/BI_DB), c = (this.s<<bs)&BI_DM, i;
+ for(i = this.t-1; i >= 0; --i) {
+ r_array[i+ds+1] = (this_array[i]>>cbs)|c;
+ c = (this_array[i]&bm)<<bs;
+ }
+ for(i = ds-1; i >= 0; --i) r_array[i] = 0;
+ r_array[ds] = c;
+ r.t = this.t+ds+1;
+ r.s = this.s;
+ r.clamp();
+}
+
+// (protected) r = this >> n
+function bnpRShiftTo(n,r) {
+ var this_array = this.array;
+ var r_array = r.array;
+ r.s = this.s;
+ var ds = Math.floor(n/BI_DB);
+ if(ds >= this.t) { r.t = 0; return; }
+ var bs = n%BI_DB;
+ var cbs = BI_DB-bs;
+ var bm = (1<<bs)-1;
+ r_array[0] = this_array[ds]>>bs;
+ for(var i = ds+1; i < this.t; ++i) {
+ r_array[i-ds-1] |= (this_array[i]&bm)<<cbs;
+ r_array[i-ds] = this_array[i]>>bs;
+ }
+ if(bs > 0) r_array[this.t-ds-1] |= (this.s&bm)<<cbs;
+ r.t = this.t-ds;
+ r.clamp();
+}
+
+// (protected) r = this - a
+function bnpSubTo(a,r) {
+ var this_array = this.array;
+ var r_array = r.array;
+ var a_array = a.array;
+ var i = 0, c = 0, m = Math.min(a.t,this.t);
+ while(i < m) {
+ c += this_array[i]-a_array[i];
+ r_array[i++] = c&BI_DM;
+ c >>= BI_DB;
+ }
+ if(a.t < this.t) {
+ c -= a.s;
+ while(i < this.t) {
+ c += this_array[i];
+ r_array[i++] = c&BI_DM;
+ c >>= BI_DB;
+ }
+ c += this.s;
+ }
+ else {
+ c += this.s;
+ while(i < a.t) {
+ c -= a_array[i];
+ r_array[i++] = c&BI_DM;
+ c >>= BI_DB;
+ }
+ c -= a.s;
+ }
+ r.s = (c<0)?-1:0;
+ if(c < -1) r_array[i++] = BI_DV+c;
+ else if(c > 0) r_array[i++] = c;
+ r.t = i;
+ r.clamp();
+}
+
+// (protected) r = this * a, r != this,a (HAC 14.12)
+// "this" should be the larger one if appropriate.
+function bnpMultiplyTo(a,r) {
+ var this_array = this.array;
+ var r_array = r.array;
+ var x = this.abs(), y = a.abs();
+ var y_array = y.array;
+
+ var i = x.t;
+ r.t = i+y.t;
+ while(--i >= 0) r_array[i] = 0;
+ for(i = 0; i < y.t; ++i) r_array[i+x.t] = x.am(0,y_array[i],r,i,0,x.t);
+ r.s = 0;
+ r.clamp();
+ if(this.s != a.s) BigInteger.ZERO.subTo(r,r);
+}
+
+// (protected) r = this^2, r != this (HAC 14.16)
+function bnpSquareTo(r) {
+ var x = this.abs();
+ var x_array = x.array;
+ var r_array = r.array;
+
+ var i = r.t = 2*x.t;
+ while(--i >= 0) r_array[i] = 0;
+ for(i = 0; i < x.t-1; ++i) {
+ var c = x.am(i,x_array[i],r,2*i,0,1);
+ if((r_array[i+x.t]+=x.am(i+1,2*x_array[i],r,2*i+1,c,x.t-i-1)) >= BI_DV) {
+ r_array[i+x.t] -= BI_DV;
+ r_array[i+x.t+1] = 1;
+ }
+ }
+ if(r.t > 0) r_array[r.t-1] += x.am(i,x_array[i],r,2*i,0,1);
+ r.s = 0;
+ r.clamp();
+}
+
+// (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)
+// r != q, this != m. q or r may be null.
+function bnpDivRemTo(m,q,r) {
+ var pm = m.abs();
+ if(pm.t <= 0) return;
+ var pt = this.abs();
+ if(pt.t < pm.t) {
+ if(q != null) q.fromInt(0);
+ if(r != null) this.copyTo(r);
+ return;
+ }
+ if(r == null) r = nbi();
+ var y = nbi(), ts = this.s, ms = m.s;
+ var pm_array = pm.array;
+ var nsh = BI_DB-nbits(pm_array[pm.t-1]); // normalize modulus
+ if(nsh > 0) { pm.lShiftTo(nsh,y); pt.lShiftTo(nsh,r); }
+ else { pm.copyTo(y); pt.copyTo(r); }
+ var ys = y.t;
+
+ var y_array = y.array;
+ var y0 = y_array[ys-1];
+ if(y0 == 0) return;
+ var yt = y0*(1<<BI_F1)+((ys>1)?y_array[ys-2]>>BI_F2:0);
+ var d1 = BI_FV/yt, d2 = (1<<BI_F1)/yt, e = 1<<BI_F2;
+ var i = r.t, j = i-ys, t = (q==null)?nbi():q;
+ y.dlShiftTo(j,t);
+
+ var r_array = r.array;
+ if(r.compareTo(t) >= 0) {
+ r_array[r.t++] = 1;
+ r.subTo(t,r);
+ }
+ BigInteger.ONE.dlShiftTo(ys,t);
+ t.subTo(y,y); // "negative" y so we can replace sub with am later
+ while(y.t < ys) y_array[y.t++] = 0;
+ while(--j >= 0) {
+ // Estimate quotient digit
+ var qd = (r_array[--i]==y0)?BI_DM:Math.floor(r_array[i]*d1+(r_array[i-1]+e)*d2);
+ if((r_array[i]+=y.am(0,qd,r,j,0,ys)) < qd) { // Try it out
+ y.dlShiftTo(j,t);
+ r.subTo(t,r);
+ while(r_array[i] < --qd) r.subTo(t,r);
+ }
+ }
+ if(q != null) {
+ r.drShiftTo(ys,q);
+ if(ts != ms) BigInteger.ZERO.subTo(q,q);
+ }
+ r.t = ys;
+ r.clamp();
+ if(nsh > 0) r.rShiftTo(nsh,r); // Denormalize remainder
+ if(ts < 0) BigInteger.ZERO.subTo(r,r);
+}
+
+// (public) this mod a
+function bnMod(a) {
+ var r = nbi();
+ this.abs().divRemTo(a,null,r);
+ if(this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r,r);
+ return r;
+}
+
+// Modular reduction using "classic" algorithm
+function Classic(m) { this.m = m; }
+function cConvert(x) {
+ if(x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m);
+ else return x;
+}
+function cRevert(x) { return x; }
+function cReduce(x) { x.divRemTo(this.m,null,x); }
+function cMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); }
+function cSqrTo(x,r) { x.squareTo(r); this.reduce(r); }
+
+Classic.prototype.convert = cConvert;
+Classic.prototype.revert = cRevert;
+Classic.prototype.reduce = cReduce;
+Classic.prototype.mulTo = cMulTo;
+Classic.prototype.sqrTo = cSqrTo;
+
+// (protected) return "-1/this % 2^DB"; useful for Mont. reduction
+// justification:
+// xy == 1 (mod m)
+// xy = 1+km
+// xy(2-xy) = (1+km)(1-km)
+// x[y(2-xy)] = 1-k^2m^2
+// x[y(2-xy)] == 1 (mod m^2)
+// if y is 1/x mod m, then y(2-xy) is 1/x mod m^2
+// should reduce x and y(2-xy) by m^2 at each step to keep size bounded.
+// JS multiply "overflows" differently from C/C++, so care is needed here.
+function bnpInvDigit() {
+ var this_array = this.array;
+ if(this.t < 1) return 0;
+ var x = this_array[0];
+ if((x&1) == 0) return 0;
+ var y = x&3; // y == 1/x mod 2^2
+ y = (y*(2-(x&0xf)*y))&0xf; // y == 1/x mod 2^4
+ y = (y*(2-(x&0xff)*y))&0xff; // y == 1/x mod 2^8
+ y = (y*(2-(((x&0xffff)*y)&0xffff)))&0xffff; // y == 1/x mod 2^16
+ // last step - calculate inverse mod DV directly;
+ // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints
+ y = (y*(2-x*y%BI_DV))%BI_DV; // y == 1/x mod 2^dbits
+ // we really want the negative inverse, and -DV < y < DV
+ return (y>0)?BI_DV-y:-y;
+}
+
+// Montgomery reduction
+function Montgomery(m) {
+ this.m = m;
+ this.mp = m.invDigit();
+ this.mpl = this.mp&0x7fff;
+ this.mph = this.mp>>15;
+ this.um = (1<<(BI_DB-15))-1;
+ this.mt2 = 2*m.t;
+}
+
+// xR mod m
+function montConvert(x) {
+ var r = nbi();
+ x.abs().dlShiftTo(this.m.t,r);
+ r.divRemTo(this.m,null,r);
+ if(x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r,r);
+ return r;
+}
+
+// x/R mod m
+function montRevert(x) {
+ var r = nbi();
+ x.copyTo(r);
+ this.reduce(r);
+ return r;
+}
+
+// x = x/R mod m (HAC 14.32)
+function montReduce(x) {
+ var x_array = x.array;
+ while(x.t <= this.mt2) // pad x so am has enough room later
+ x_array[x.t++] = 0;
+ for(var i = 0; i < this.m.t; ++i) {
+ // faster way of calculating u0 = x[i]*mp mod DV
+ var j = x_array[i]&0x7fff;
+ var u0 = (j*this.mpl+(((j*this.mph+(x_array[i]>>15)*this.mpl)&this.um)<<15))&BI_DM;
+ // use am to combine the multiply-shift-add into one call
+ j = i+this.m.t;
+ x_array[j] += this.m.am(0,u0,x,i,0,this.m.t);
+ // propagate carry
+ while(x_array[j] >= BI_DV) { x_array[j] -= BI_DV; x_array[++j]++; }
+ }
+ x.clamp();
+ x.drShiftTo(this.m.t,x);
+ if(x.compareTo(this.m) >= 0) x.subTo(this.m,x);
+}
+
+// r = "x^2/R mod m"; x != r
+function montSqrTo(x,r) { x.squareTo(r); this.reduce(r); }
+
+// r = "xy/R mod m"; x,y != r
+function montMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); }
+
+Montgomery.prototype.convert = montConvert;
+Montgomery.prototype.revert = montRevert;
+Montgomery.prototype.reduce = montReduce;
+Montgomery.prototype.mulTo = montMulTo;
+Montgomery.prototype.sqrTo = montSqrTo;
+
+// (protected) true iff this is even
+function bnpIsEven() {
+ var this_array = this.array;
+ return ((this.t>0)?(this_array[0]&1):this.s) == 0;
+}
+
+// (protected) this^e, e < 2^32, doing sqr and mul with "r" (HAC 14.79)
+function bnpExp(e,z) {
+ if(e > 0xffffffff || e < 1) return BigInteger.ONE;
+ var r = nbi(), r2 = nbi(), g = z.convert(this), i = nbits(e)-1;
+ g.copyTo(r);
+ while(--i >= 0) {
+ z.sqrTo(r,r2);
+ if((e&(1<<i)) > 0) z.mulTo(r2,g,r);
+ else { var t = r; r = r2; r2 = t; }
+ }
+ return z.revert(r);
+}
+
+// (public) this^e % m, 0 <= e < 2^32
+function bnModPowInt(e,m) {
+ var z;
+ if(e < 256 || m.isEven()) z = new Classic(m); else z = new Montgomery(m);
+ return this.exp(e,z);
+}
+
+// protected
+BigInteger.prototype.copyTo = bnpCopyTo;
+BigInteger.prototype.fromInt = bnpFromInt;
+BigInteger.prototype.fromString = bnpFromString;
+BigInteger.prototype.clamp = bnpClamp;
+BigInteger.prototype.dlShiftTo = bnpDLShiftTo;
+BigInteger.prototype.drShiftTo = bnpDRShiftTo;
+BigInteger.prototype.lShiftTo = bnpLShiftTo;
+BigInteger.prototype.rShiftTo = bnpRShiftTo;
+BigInteger.prototype.subTo = bnpSubTo;
+BigInteger.prototype.multiplyTo = bnpMultiplyTo;
+BigInteger.prototype.squareTo = bnpSquareTo;
+BigInteger.prototype.divRemTo = bnpDivRemTo;
+BigInteger.prototype.invDigit = bnpInvDigit;
+BigInteger.prototype.isEven = bnpIsEven;
+BigInteger.prototype.exp = bnpExp;
+
+// public
+BigInteger.prototype.toString = bnToString;
+BigInteger.prototype.negate = bnNegate;
+BigInteger.prototype.abs = bnAbs;
+BigInteger.prototype.compareTo = bnCompareTo;
+BigInteger.prototype.bitLength = bnBitLength;
+BigInteger.prototype.mod = bnMod;
+BigInteger.prototype.modPowInt = bnModPowInt;
+
+// "constants"
+BigInteger.ZERO = nbv(0);
+BigInteger.ONE = nbv(1);
+// Copyright (c) 2005 Tom Wu
+// All Rights Reserved.
+// See "LICENSE" for details.
+
+// Extended JavaScript BN functions, required for RSA private ops.
+
+// (public)
+function bnClone() { var r = nbi(); this.copyTo(r); return r; }
+
+// (public) return value as integer
+function bnIntValue() {
+ var this_array = this.array;
+ if(this.s < 0) {
+ if(this.t == 1) return this_array[0]-BI_DV;
+ else if(this.t == 0) return -1;
+ }
+ else if(this.t == 1) return this_array[0];
+ else if(this.t == 0) return 0;
+ // assumes 16 < DB < 32
+ return ((this_array[1]&((1<<(32-BI_DB))-1))<<BI_DB)|this_array[0];
+}
+
+// (public) return value as byte
+function bnByteValue() {
+ var this_array = this.array;
+ return (this.t==0)?this.s:(this_array[0]<<24)>>24;
+}
+
+// (public) return value as short (assumes DB>=16)
+function bnShortValue() {
+ var this_array = this.array;
+ return (this.t==0)?this.s:(this_array[0]<<16)>>16;
+}
+
+// (protected) return x s.t. r^x < DV
+function bnpChunkSize(r) { return Math.floor(Math.LN2*BI_DB/Math.log(r)); }
+
+// (public) 0 if this == 0, 1 if this > 0
+function bnSigNum() {
+ var this_array = this.array;
+ if(this.s < 0) return -1;
+ else if(this.t <= 0 || (this.t == 1 && this_array[0] <= 0)) return 0;
+ else return 1;
+}
+
+// (protected) convert to radix string
+function bnpToRadix(b) {
+ if(b == null) b = 10;
+ if(this.signum() == 0 || b < 2 || b > 36) return "0";
+ var cs = this.chunkSize(b);
+ var a = Math.pow(b,cs);
+ var d = nbv(a), y = nbi(), z = nbi(), r = "";
+ this.divRemTo(d,y,z);
+ while(y.signum() > 0) {
+ r = (a+z.intValue()).toString(b).substr(1) + r;
+ y.divRemTo(d,y,z);
+ }
+ return z.intValue().toString(b) + r;
+}
+
+// (protected) convert from radix string
+function bnpFromRadix(s,b) {
+ this.fromInt(0);
+ if(b == null) b = 10;
+ var cs = this.chunkSize(b);
+ var d = Math.pow(b,cs), mi = false, j = 0, w = 0;
+ for(var i = 0; i < s.length; ++i) {
+ var x = intAt(s,i);
+ if(x < 0) {
+ if(s.charAt(i) == "-" && this.signum() == 0) mi = true;
+ continue;
+ }
+ w = b*w+x;
+ if(++j >= cs) {
+ this.dMultiply(d);
+ this.dAddOffset(w,0);
+ j = 0;
+ w = 0;
+ }
+ }
+ if(j > 0) {
+ this.dMultiply(Math.pow(b,j));
+ this.dAddOffset(w,0);
+ }
+ if(mi) BigInteger.ZERO.subTo(this,this);
+}
+
+// (protected) alternate constructor
+function bnpFromNumber(a,b,c) {
+ if("number" == typeof b) {
+ // new BigInteger(int,int,RNG)
+ if(a < 2) this.fromInt(1);
+ else {
+ this.fromNumber(a,c);
+ if(!this.testBit(a-1)) // force MSB set
+ this.bitwiseTo(BigInteger.ONE.shiftLeft(a-1),op_or,this);
+ if(this.isEven()) this.dAddOffset(1,0); // force odd
+ while(!this.isProbablePrime(b)) {
+ this.dAddOffset(2,0);
+ if(this.bitLength() > a) this.subTo(BigInteger.ONE.shiftLeft(a-1),this);
+ }
+ }
+ }
+ else {
+ // new BigInteger(int,RNG)
+ var x = new Array(), t = a&7;
+ x.length = (a>>3)+1;
+ b.nextBytes(x);
+ if(t > 0) x[0] &= ((1<<t)-1); else x[0] = 0;
+ this.fromString(x,256);
+ }
+}
+
+// (public) convert to bigendian byte array
+function bnToByteArray() {
+ var this_array = this.array;
+ var i = this.t, r = new Array();
+ r[0] = this.s;
+ var p = BI_DB-(i*BI_DB)%8, d, k = 0;
+ if(i-- > 0) {
+ if(p < BI_DB && (d = this_array[i]>>p) != (this.s&BI_DM)>>p)
+ r[k++] = d|(this.s<<(BI_DB-p));
+ while(i >= 0) {
+ if(p < 8) {
+ d = (this_array[i]&((1<<p)-1))<<(8-p);
+ d |= this_array[--i]>>(p+=BI_DB-8);
+ }
+ else {
+ d = (this_array[i]>>(p-=8))&0xff;
+ if(p <= 0) { p += BI_DB; --i; }
+ }
+ if((d&0x80) != 0) d |= -256;
+ if(k == 0 && (this.s&0x80) != (d&0x80)) ++k;
+ if(k > 0 || d != this.s) r[k++] = d;
+ }
+ }
+ return r;
+}
+
+function bnEquals(a) { return(this.compareTo(a)==0); }
+function bnMin(a) { return(this.compareTo(a)<0)?this:a; }
+function bnMax(a) { return(this.compareTo(a)>0)?this:a; }
+
+// (protected) r = this op a (bitwise)
+function bnpBitwiseTo(a,op,r) {
+ var this_array = this.array;
+ var a_array = a.array;
+ var r_array = r.array;
+ var i, f, m = Math.min(a.t,this.t);
+ for(i = 0; i < m; ++i) r_array[i] = op(this_array[i],a_array[i]);
+ if(a.t < this.t) {
+ f = a.s&BI_DM;
+ for(i = m; i < this.t; ++i) r_array[i] = op(this_array[i],f);
+ r.t = this.t;
+ }
+ else {
+ f = this.s&BI_DM;
+ for(i = m; i < a.t; ++i) r_array[i] = op(f,a_array[i]);
+ r.t = a.t;
+ }
+ r.s = op(this.s,a.s);
+ r.clamp();
+}
+
+// (public) this & a
+function op_and(x,y) { return x&y; }
+function bnAnd(a) { var r = nbi(); this.bitwiseTo(a,op_and,r); return r; }
+
+// (public) this | a
+function op_or(x,y) { return x|y; }
+function bnOr(a) { var r = nbi(); this.bitwiseTo(a,op_or,r); return r; }
+
+// (public) this ^ a
+function op_xor(x,y) { return x^y; }
+function bnXor(a) { var r = nbi(); this.bitwiseTo(a,op_xor,r); return r; }
+
+// (public) this & ~a
+function op_andnot(x,y) { return x&~y; }
+function bnAndNot(a) { var r = nbi(); this.bitwiseTo(a,op_andnot,r); return r; }
+
+// (public) ~this
+function bnNot() {
+ var this_array = this.array;
+ var r = nbi();
+ var r_array = r.array;
+
+ for(var i = 0; i < this.t; ++i) r_array[i] = BI_DM&~this_array[i];
+ r.t = this.t;
+ r.s = ~this.s;
+ return r;
+}
+
+// (public) this << n
+function bnShiftLeft(n) {
+ var r = nbi();
+ if(n < 0) this.rShiftTo(-n,r); else this.lShiftTo(n,r);
+ return r;
+}
+
+// (public) this >> n
+function bnShiftRight(n) {
+ var r = nbi();
+ if(n < 0) this.lShiftTo(-n,r); else this.rShiftTo(n,r);
+ return r;
+}
+
+// return index of lowest 1-bit in x, x < 2^31
+function lbit(x) {
+ if(x == 0) return -1;
+ var r = 0;
+ if((x&0xffff) == 0) { x >>= 16; r += 16; }
+ if((x&0xff) == 0) { x >>= 8; r += 8; }
+ if((x&0xf) == 0) { x >>= 4; r += 4; }
+ if((x&3) == 0) { x >>= 2; r += 2; }
+ if((x&1) == 0) ++r;
+ return r;
+}
+
+// (public) returns index of lowest 1-bit (or -1 if none)
+function bnGetLowestSetBit() {
+ var this_array = this.array;
+ for(var i = 0; i < this.t; ++i)
+ if(this_array[i] != 0) return i*BI_DB+lbit(this_array[i]);
+ if(this.s < 0) return this.t*BI_DB;
+ return -1;
+}
+
+// return number of 1 bits in x
+function cbit(x) {
+ var r = 0;
+ while(x != 0) { x &= x-1; ++r; }
+ return r;
+}
+
+// (public) return number of set bits
+function bnBitCount() {
+ var r = 0, x = this.s&BI_DM;
+ for(var i = 0; i < this.t; ++i) r += cbit(this_array[i]^x);
+ return r;
+}
+
+// (public) true iff nth bit is set
+function bnTestBit(n) {
+ var this_array = this.array;
+ var j = Math.floor(n/BI_DB);
+ if(j >= this.t) return(this.s!=0);
+ return((this_array[j]&(1<<(n%BI_DB)))!=0);
+}
+
+// (protected) this op (1<<n)
+function bnpChangeBit(n,op) {
+ var r = BigInteger.ONE.shiftLeft(n);
+ this.bitwiseTo(r,op,r);
+ return r;
+}
+
+// (public) this | (1<<n)
+function bnSetBit(n) { return this.changeBit(n,op_or); }
+
+// (public) this & ~(1<<n)
+function bnClearBit(n) { return this.changeBit(n,op_andnot); }
+
+// (public) this ^ (1<<n)
+function bnFlipBit(n) { return this.changeBit(n,op_xor); }
+
+// (protected) r = this + a
+function bnpAddTo(a,r) {
+ var this_array = this.array;
+ var a_array = a.array;
+ var r_array = r.array;
+ var i = 0, c = 0, m = Math.min(a.t,this.t);
+ while(i < m) {
+ c += this_array[i]+a_array[i];
+ r_array[i++] = c&BI_DM;
+ c >>= BI_DB;
+ }
+ if(a.t < this.t) {
+ c += a.s;
+ while(i < this.t) {
+ c += this_array[i];
+ r_array[i++] = c&BI_DM;
+ c >>= BI_DB;
+ }
+ c += this.s;
+ }
+ else {
+ c += this.s;
+ while(i < a.t) {
+ c += a_array[i];
+ r_array[i++] = c&BI_DM;
+ c >>= BI_DB;
+ }
+ c += a.s;
+ }
+ r.s = (c<0)?-1:0;
+ if(c > 0) r_array[i++] = c;
+ else if(c < -1) r_array[i++] = BI_DV+c;
+ r.t = i;
+ r.clamp();
+}
+
+// (public) this + a
+function bnAdd(a) { var r = nbi(); this.addTo(a,r); return r; }
+
+// (public) this - a
+function bnSubtract(a) { var r = nbi(); this.subTo(a,r); return r; }
+
+// (public) this * a
+function bnMultiply(a) { var r = nbi(); this.multiplyTo(a,r); return r; }
+
+// (public) this / a
+function bnDivide(a) { var r = nbi(); this.divRemTo(a,r,null); return r; }
+
+// (public) this % a
+function bnRemainder(a) { var r = nbi(); this.divRemTo(a,null,r); return r; }
+
+// (public) [this/a,this%a]
+function bnDivideAndRemainder(a) {
+ var q = nbi(), r = nbi();
+ this.divRemTo(a,q,r);
+ return new Array(q,r);
+}
+
+// (protected) this *= n, this >= 0, 1 < n < DV
+function bnpDMultiply(n) {
+ var this_array = this.array;
+ this_array[this.t] = this.am(0,n-1,this,0,0,this.t);
+ ++this.t;
+ this.clamp();
+}
+
+// (protected) this += n << w words, this >= 0
+function bnpDAddOffset(n,w) {
+ var this_array = this.array;
+ while(this.t <= w) this_array[this.t++] = 0;
+ this_array[w] += n;
+ while(this_array[w] >= BI_DV) {
+ this_array[w] -= BI_DV;
+ if(++w >= this.t) this_array[this.t++] = 0;
+ ++this_array[w];
+ }
+}
+
+// A "null" reducer
+function NullExp() {}
+function nNop(x) { return x; }
+function nMulTo(x,y,r) { x.multiplyTo(y,r); }
+function nSqrTo(x,r) { x.squareTo(r); }
+
+NullExp.prototype.convert = nNop;
+NullExp.prototype.revert = nNop;
+NullExp.prototype.mulTo = nMulTo;
+NullExp.prototype.sqrTo = nSqrTo;
+
+// (public) this^e
+function bnPow(e) { return this.exp(e,new NullExp()); }
+
+// (protected) r = lower n words of "this * a", a.t <= n
+// "this" should be the larger one if appropriate.
+function bnpMultiplyLowerTo(a,n,r) {
+ var r_array = r.array;
+ var a_array = a.array;
+ var i = Math.min(this.t+a.t,n);
+ r.s = 0; // assumes a,this >= 0
+ r.t = i;
+ while(i > 0) r_array[--i] = 0;
+ var j;
+ for(j = r.t-this.t; i < j; ++i) r_array[i+this.t] = this.am(0,a_array[i],r,i,0,this.t);
+ for(j = Math.min(a.t,n); i < j; ++i) this.am(0,a_array[i],r,i,0,n-i);
+ r.clamp();
+}
+
+// (protected) r = "this * a" without lower n words, n > 0
+// "this" should be the larger one if appropriate.
+function bnpMultiplyUpperTo(a,n,r) {
+ var r_array = r.array;
+ var a_array = a.array;
+ --n;
+ var i = r.t = this.t+a.t-n;
+ r.s = 0; // assumes a,this >= 0
+ while(--i >= 0) r_array[i] = 0;
+ for(i = Math.max(n-this.t,0); i < a.t; ++i)
+ r_array[this.t+i-n] = this.am(n-i,a_array[i],r,0,0,this.t+i-n);
+ r.clamp();
+ r.drShiftTo(1,r);
+}
+
+// Barrett modular reduction
+function Barrett(m) {
+ // setup Barrett
+ this.r2 = nbi();
+ this.q3 = nbi();
+ BigInteger.ONE.dlShiftTo(2*m.t,this.r2);
+ this.mu = this.r2.divide(m);
+ this.m = m;
+}
+
+function barrettConvert(x) {
+ if(x.s < 0 || x.t > 2*this.m.t) return x.mod(this.m);
+ else if(x.compareTo(this.m) < 0) return x;
+ else { var r = nbi(); x.copyTo(r); this.reduce(r); return r; }
+}
+
+function barrettRevert(x) { return x; }
+
+// x = x mod m (HAC 14.42)
+function barrettReduce(x) {
+ x.drShiftTo(this.m.t-1,this.r2);
+ if(x.t > this.m.t+1) { x.t = this.m.t+1; x.clamp(); }
+ this.mu.multiplyUpperTo(this.r2,this.m.t+1,this.q3);
+ this.m.multiplyLowerTo(this.q3,this.m.t+1,this.r2);
+ while(x.compareTo(this.r2) < 0) x.dAddOffset(1,this.m.t+1);
+ x.subTo(this.r2,x);
+ while(x.compareTo(this.m) >= 0) x.subTo(this.m,x);
+}
+
+// r = x^2 mod m; x != r
+function barrettSqrTo(x,r) { x.squareTo(r); this.reduce(r); }
+
+// r = x*y mod m; x,y != r
+function barrettMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); }
+
+Barrett.prototype.convert = barrettConvert;
+Barrett.prototype.revert = barrettRevert;
+Barrett.prototype.reduce = barrettReduce;
+Barrett.prototype.mulTo = barrettMulTo;
+Barrett.prototype.sqrTo = barrettSqrTo;
+
+// (public) this^e % m (HAC 14.85)
+function bnModPow(e,m) {
+ var e_array = e.array;
+ var i = e.bitLength(), k, r = nbv(1), z;
+ if(i <= 0) return r;
+ else if(i < 18) k = 1;
+ else if(i < 48) k = 3;
+ else if(i < 144) k = 4;
+ else if(i < 768) k = 5;
+ else k = 6;
+ if(i < 8)
+ z = new Classic(m);
+ else if(m.isEven())
+ z = new Barrett(m);
+ else
+ z = new Montgomery(m);
+
+ // precomputation
+ var g = new Array(), n = 3, k1 = k-1, km = (1<<k)-1;
+ g[1] = z.convert(this);
+ if(k > 1) {
+ var g2 = nbi();
+ z.sqrTo(g[1],g2);
+ while(n <= km) {
+ g[n] = nbi();
+ z.mulTo(g2,g[n-2],g[n]);
+ n += 2;
+ }
+ }
+
+ var j = e.t-1, w, is1 = true, r2 = nbi(), t;
+ i = nbits(e_array[j])-1;
+ while(j >= 0) {
+ if(i >= k1) w = (e_array[j]>>(i-k1))&km;
+ else {
+ w = (e_array[j]&((1<<(i+1))-1))<<(k1-i);
+ if(j > 0) w |= e_array[j-1]>>(BI_DB+i-k1);
+ }
+
+ n = k;
+ while((w&1) == 0) { w >>= 1; --n; }
+ if((i -= n) < 0) { i += BI_DB; --j; }
+ if(is1) { // ret == 1, don't bother squaring or multiplying it
+ g[w].copyTo(r);
+ is1 = false;
+ }
+ else {
+ while(n > 1) { z.sqrTo(r,r2); z.sqrTo(r2,r); n -= 2; }
+ if(n > 0) z.sqrTo(r,r2); else { t = r; r = r2; r2 = t; }
+ z.mulTo(r2,g[w],r);
+ }
+
+ while(j >= 0 && (e_array[j]&(1<<i)) == 0) {
+ z.sqrTo(r,r2); t = r; r = r2; r2 = t;
+ if(--i < 0) { i = BI_DB-1; --j; }
+ }
+ }
+ return z.revert(r);
+}
+
+// (public) gcd(this,a) (HAC 14.54)
+function bnGCD(a) {
+ var x = (this.s<0)?this.negate():this.clone();
+ var y = (a.s<0)?a.negate():a.clone();
+ if(x.compareTo(y) < 0) { var t = x; x = y; y = t; }
+ var i = x.getLowestSetBit(), g = y.getLowestSetBit();
+ if(g < 0) return x;
+ if(i < g) g = i;
+ if(g > 0) {
+ x.rShiftTo(g,x);
+ y.rShiftTo(g,y);
+ }
+ while(x.signum() > 0) {
+ if((i = x.getLowestSetBit()) > 0) x.rShiftTo(i,x);
+ if((i = y.getLowestSetBit()) > 0) y.rShiftTo(i,y);
+ if(x.compareTo(y) >= 0) {
+ x.subTo(y,x);
+ x.rShiftTo(1,x);
+ }
+ else {
+ y.subTo(x,y);
+ y.rShiftTo(1,y);
+ }
+ }
+ if(g > 0) y.lShiftTo(g,y);
+ return y;
+}
+
+// (protected) this % n, n < 2^26
+function bnpModInt(n) {
+ var this_array = this.array;
+ if(n <= 0) return 0;
+ var d = BI_DV%n, r = (this.s<0)?n-1:0;
+ if(this.t > 0)
+ if(d == 0) r = this_array[0]%n;
+ else for(var i = this.t-1; i >= 0; --i) r = (d*r+this_array[i])%n;
+ return r;
+}
+
+// (public) 1/this % m (HAC 14.61)
+function bnModInverse(m) {
+ var ac = m.isEven();
+ if((this.isEven() && ac) || m.signum() == 0) return BigInteger.ZERO;
+ var u = m.clone(), v = this.clone();
+ var a = nbv(1), b = nbv(0), c = nbv(0), d = nbv(1);
+ while(u.signum() != 0) {
+ while(u.isEven()) {
+ u.rShiftTo(1,u);
+ if(ac) {
+ if(!a.isEven() || !b.isEven()) { a.addTo(this,a); b.subTo(m,b); }
+ a.rShiftTo(1,a);
+ }
+ else if(!b.isEven()) b.subTo(m,b);
+ b.rShiftTo(1,b);
+ }
+ while(v.isEven()) {
+ v.rShiftTo(1,v);
+ if(ac) {
+ if(!c.isEven() || !d.isEven()) { c.addTo(this,c); d.subTo(m,d); }
+ c.rShiftTo(1,c);
+ }
+ else if(!d.isEven()) d.subTo(m,d);
+ d.rShiftTo(1,d);
+ }
+ if(u.compareTo(v) >= 0) {
+ u.subTo(v,u);
+ if(ac) a.subTo(c,a);
+ b.subTo(d,b);
+ }
+ else {
+ v.subTo(u,v);
+ if(ac) c.subTo(a,c);
+ d.subTo(b,d);
+ }
+ }
+ if(v.compareTo(BigInteger.ONE) != 0) return BigInteger.ZERO;
+ if(d.compareTo(m) >= 0) return d.subtract(m);
+ if(d.signum() < 0) d.addTo(m,d); else return d;
+ if(d.signum() < 0) return d.add(m); else return d;
+}
+
+var lowprimes = [2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509];
+var lplim = (1<<26)/lowprimes[lowprimes.length-1];
+
+// (public) test primality with certainty >= 1-.5^t
+function bnIsProbablePrime(t) {
+ var i, x = this.abs();
+ var x_array = x.array;
+ if(x.t == 1 && x_array[0] <= lowprimes[lowprimes.length-1]) {
+ for(i = 0; i < lowprimes.length; ++i)
+ if(x_array[0] == lowprimes[i]) return true;
+ return false;
+ }
+ if(x.isEven()) return false;
+ i = 1;
+ while(i < lowprimes.length) {
+ var m = lowprimes[i], j = i+1;
+ while(j < lowprimes.length && m < lplim) m *= lowprimes[j++];
+ m = x.modInt(m);
+ while(i < j) if(m%lowprimes[i++] == 0) return false;
+ }
+ return x.millerRabin(t);
+}
+
+// (protected) true if probably prime (HAC 4.24, Miller-Rabin)
+function bnpMillerRabin(t) {
+ var n1 = this.subtract(BigInteger.ONE);
+ var k = n1.getLowestSetBit();
+ if(k <= 0) return false;
+ var r = n1.shiftRight(k);
+ t = (t+1)>>1;
+ if(t > lowprimes.length) t = lowprimes.length;
+ var a = nbi();
+ for(var i = 0; i < t; ++i) {
+ a.fromInt(lowprimes[i]);
+ var y = a.modPow(r,this);
+ if(y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) {
+ var j = 1;
+ while(j++ < k && y.compareTo(n1) != 0) {
+ y = y.modPowInt(2,this);
+ if(y.compareTo(BigInteger.ONE) == 0) return false;
+ }
+ if(y.compareTo(n1) != 0) return false;
+ }
+ }
+ return true;
+}
+
+// protected
+BigInteger.prototype.chunkSize = bnpChunkSize;
+BigInteger.prototype.toRadix = bnpToRadix;
+BigInteger.prototype.fromRadix = bnpFromRadix;
+BigInteger.prototype.fromNumber = bnpFromNumber;
+BigInteger.prototype.bitwiseTo = bnpBitwiseTo;
+BigInteger.prototype.changeBit = bnpChangeBit;
+BigInteger.prototype.addTo = bnpAddTo;
+BigInteger.prototype.dMultiply = bnpDMultiply;
+BigInteger.prototype.dAddOffset = bnpDAddOffset;
+BigInteger.prototype.multiplyLowerTo = bnpMultiplyLowerTo;
+BigInteger.prototype.multiplyUpperTo = bnpMultiplyUpperTo;
+BigInteger.prototype.modInt = bnpModInt;
+BigInteger.prototype.millerRabin = bnpMillerRabin;
+
+// public
+BigInteger.prototype.clone = bnClone;
+BigInteger.prototype.intValue = bnIntValue;
+BigInteger.prototype.byteValue = bnByteValue;
+BigInteger.prototype.shortValue = bnShortValue;
+BigInteger.prototype.signum = bnSigNum;
+BigInteger.prototype.toByteArray = bnToByteArray;
+BigInteger.prototype.equals = bnEquals;
+BigInteger.prototype.min = bnMin;
+BigInteger.prototype.max = bnMax;
+BigInteger.prototype.and = bnAnd;
+BigInteger.prototype.or = bnOr;
+BigInteger.prototype.xor = bnXor;
+BigInteger.prototype.andNot = bnAndNot;
+BigInteger.prototype.not = bnNot;
+BigInteger.prototype.shiftLeft = bnShiftLeft;
+BigInteger.prototype.shiftRight = bnShiftRight;
+BigInteger.prototype.getLowestSetBit = bnGetLowestSetBit;
+BigInteger.prototype.bitCount = bnBitCount;
+BigInteger.prototype.testBit = bnTestBit;
+BigInteger.prototype.setBit = bnSetBit;
+BigInteger.prototype.clearBit = bnClearBit;
+BigInteger.prototype.flipBit = bnFlipBit;
+BigInteger.prototype.add = bnAdd;
+BigInteger.prototype.subtract = bnSubtract;
+BigInteger.prototype.multiply = bnMultiply;
+BigInteger.prototype.divide = bnDivide;
+BigInteger.prototype.remainder = bnRemainder;
+BigInteger.prototype.divideAndRemainder = bnDivideAndRemainder;
+BigInteger.prototype.modPow = bnModPow;
+BigInteger.prototype.modInverse = bnModInverse;
+BigInteger.prototype.pow = bnPow;
+BigInteger.prototype.gcd = bnGCD;
+BigInteger.prototype.isProbablePrime = bnIsProbablePrime;
+
+// BigInteger interfaces not implemented in jsbn:
+
+// BigInteger(int signum, byte[] magnitude)
+// double doubleValue()
+// float floatValue()
+// int hashCode()
+// long longValue()
+// static BigInteger valueOf(long val)
+// prng4.js - uses Arcfour as a PRNG
+
+function Arcfour() {
+ this.i = 0;
+ this.j = 0;
+ this.S = new Array();
+}
+
+// Initialize arcfour context from key, an array of ints, each from [0..255]
+function ARC4init(key) {
+ var i, j, t;
+ for(i = 0; i < 256; ++i)
+ this.S[i] = i;
+ j = 0;
+ for(i = 0; i < 256; ++i) {
+ j = (j + this.S[i] + key[i % key.length]) & 255;
+ t = this.S[i];
+ this.S[i] = this.S[j];
+ this.S[j] = t;
+ }
+ this.i = 0;
+ this.j = 0;
+}
+
+function ARC4next() {
+ var t;
+ this.i = (this.i + 1) & 255;
+ this.j = (this.j + this.S[this.i]) & 255;
+ t = this.S[this.i];
+ this.S[this.i] = this.S[this.j];
+ this.S[this.j] = t;
+ return this.S[(t + this.S[this.i]) & 255];
+}
+
+Arcfour.prototype.init = ARC4init;
+Arcfour.prototype.next = ARC4next;
+
+// Plug in your RNG constructor here
+function prng_newstate() {
+ return new Arcfour();
+}
+
+// Pool size must be a multiple of 4 and greater than 32.
+// An array of bytes the size of the pool will be passed to init()
+var rng_psize = 256;
+// Random number generator - requires a PRNG backend, e.g. prng4.js
+
+// For best results, put code like
+// <body onClick='rng_seed_time();' onKeyPress='rng_seed_time();'>
+// in your main HTML document.
+
+var rng_state;
+var rng_pool;
+var rng_pptr;
+
+// Mix in a 32-bit integer into the pool
+function rng_seed_int(x) {
+ rng_pool[rng_pptr++] ^= x & 255;
+ rng_pool[rng_pptr++] ^= (x >> 8) & 255;
+ rng_pool[rng_pptr++] ^= (x >> 16) & 255;
+ rng_pool[rng_pptr++] ^= (x >> 24) & 255;
+ if(rng_pptr >= rng_psize) rng_pptr -= rng_psize;
+}
+
+// Mix in the current time (w/milliseconds) into the pool
+function rng_seed_time() {
+ // Use pre-computed date to avoid making the benchmark
+ // results dependent on the current date.
+ rng_seed_int(1122926989487);
+}
+
+// Initialize the pool with junk if needed.
+if(rng_pool == null) {
+ rng_pool = new Array();
+ rng_pptr = 0;
+ var t;
+ while(rng_pptr < rng_psize) { // extract some randomness from Math.random()
+ t = Math.floor(65536 * Math.random());
+ rng_pool[rng_pptr++] = t >>> 8;
+ rng_pool[rng_pptr++] = t & 255;
+ }
+ rng_pptr = 0;
+ rng_seed_time();
+ //rng_seed_int(window.screenX);
+ //rng_seed_int(window.screenY);
+}
+
+function rng_get_byte() {
+ if(rng_state == null) {
+ rng_seed_time();
+ rng_state = prng_newstate();
+ rng_state.init(rng_pool);
+ for(rng_pptr = 0; rng_pptr < rng_pool.length; ++rng_pptr)
+ rng_pool[rng_pptr] = 0;
+ rng_pptr = 0;
+ //rng_pool = null;
+ }
+ // TODO: allow reseeding after first request
+ return rng_state.next();
+}
+
+function rng_get_bytes(ba) {
+ var i;
+ for(i = 0; i < ba.length; ++i) ba[i] = rng_get_byte();
+}
+
+function SecureRandom() {}
+
+SecureRandom.prototype.nextBytes = rng_get_bytes;
+// Depends on jsbn.js and rng.js
+
+// convert a (hex) string to a bignum object
+function parseBigInt(str,r) {
+ return new BigInteger(str,r);
+}
+
+function linebrk(s,n) {
+ var ret = "";
+ var i = 0;
+ while(i + n < s.length) {
+ ret += s.substring(i,i+n) + "\n";
+ i += n;
+ }
+ return ret + s.substring(i,s.length);
+}
+
+function byte2Hex(b) {
+ if(b < 0x10)
+ return "0" + b.toString(16);
+ else
+ return b.toString(16);
+}
+
+// PKCS#1 (type 2, random) pad input string s to n bytes, and return a bigint
+function pkcs1pad2(s,n) {
+ if(n < s.length + 11) {
+ alert("Message too long for RSA");
+ return null;
+ }
+ var ba = new Array();
+ var i = s.length - 1;
+ while(i >= 0 && n > 0) ba[--n] = s.charCodeAt(i--);
+ ba[--n] = 0;
+ var rng = new SecureRandom();
+ var x = new Array();
+ while(n > 2) { // random non-zero pad
+ x[0] = 0;
+ while(x[0] == 0) rng.nextBytes(x);
+ ba[--n] = x[0];
+ }
+ ba[--n] = 2;
+ ba[--n] = 0;
+ return new BigInteger(ba);
+}
+
+// "empty" RSA key constructor
+function RSAKey() {
+ this.n = null;
+ this.e = 0;
+ this.d = null;
+ this.p = null;
+ this.q = null;
+ this.dmp1 = null;
+ this.dmq1 = null;
+ this.coeff = null;
+}
+
+// Set the public key fields N and e from hex strings
+function RSASetPublic(N,E) {
+ if(N != null && E != null && N.length > 0 && E.length > 0) {
+ this.n = parseBigInt(N,16);
+ this.e = parseInt(E,16);
+ }
+ else
+ alert("Invalid RSA public key");
+}
+
+// Perform raw public operation on "x": return x^e (mod n)
+function RSADoPublic(x) {
+ return x.modPowInt(this.e, this.n);
+}
+
+// Return the PKCS#1 RSA encryption of "text" as an even-length hex string
+function RSAEncrypt(text) {
+ var m = pkcs1pad2(text,(this.n.bitLength()+7)>>3);
+ if(m == null) return null;
+ var c = this.doPublic(m);
+ if(c == null) return null;
+ var h = c.toString(16);
+ if((h.length & 1) == 0) return h; else return "0" + h;
+}
+
+// Return the PKCS#1 RSA encryption of "text" as a Base64-encoded string
+//function RSAEncryptB64(text) {
+// var h = this.encrypt(text);
+// if(h) return hex2b64(h); else return null;
+//}
+
+// protected
+RSAKey.prototype.doPublic = RSADoPublic;
+
+// public
+RSAKey.prototype.setPublic = RSASetPublic;
+RSAKey.prototype.encrypt = RSAEncrypt;
+//RSAKey.prototype.encrypt_b64 = RSAEncryptB64;
+// Depends on rsa.js and jsbn2.js
+
+// Undo PKCS#1 (type 2, random) padding and, if valid, return the plaintext
+function pkcs1unpad2(d,n) {
+ var b = d.toByteArray();
+ var i = 0;
+ while(i < b.length && b[i] == 0) ++i;
+ if(b.length-i != n-1 || b[i] != 2)
+ return null;
+ ++i;
+ while(b[i] != 0)
+ if(++i >= b.length) return null;
+ var ret = "";
+ while(++i < b.length)
+ ret += String.fromCharCode(b[i]);
+ return ret;
+}
+
+// Set the private key fields N, e, and d from hex strings
+function RSASetPrivate(N,E,D) {
+ if(N != null && E != null && N.length > 0 && E.length > 0) {
+ this.n = parseBigInt(N,16);
+ this.e = parseInt(E,16);
+ this.d = parseBigInt(D,16);
+ }
+ else
+ alert("Invalid RSA private key");
+}
+
+// Set the private key fields N, e, d and CRT params from hex strings
+function RSASetPrivateEx(N,E,D,P,Q,DP,DQ,C) {
+ if(N != null && E != null && N.length > 0 && E.length > 0) {
+ this.n = parseBigInt(N,16);
+ this.e = parseInt(E,16);
+ this.d = parseBigInt(D,16);
+ this.p = parseBigInt(P,16);
+ this.q = parseBigInt(Q,16);
+ this.dmp1 = parseBigInt(DP,16);
+ this.dmq1 = parseBigInt(DQ,16);
+ this.coeff = parseBigInt(C,16);
+ }
+ else
+ alert("Invalid RSA private key");
+}
+
+// Generate a new random private key B bits long, using public expt E
+function RSAGenerate(B,E) {
+ var rng = new SecureRandom();
+ var qs = B>>1;
+ this.e = parseInt(E,16);
+ var ee = new BigInteger(E,16);
+ for(;;) {
+ for(;;) {
+ this.p = new BigInteger(B-qs,1,rng);
+ if(this.p.subtract(BigInteger.ONE).gcd(ee).compareTo(BigInteger.ONE) == 0 && this.p.isProbablePrime(10)) break;
+ }
+ for(;;) {
+ this.q = new BigInteger(qs,1,rng);
+ if(this.q.subtract(BigInteger.ONE).gcd(ee).compareTo(BigInteger.ONE) == 0 && this.q.isProbablePrime(10)) break;
+ }
+ if(this.p.compareTo(this.q) <= 0) {
+ var t = this.p;
+ this.p = this.q;
+ this.q = t;
+ }
+ var p1 = this.p.subtract(BigInteger.ONE);
+ var q1 = this.q.subtract(BigInteger.ONE);
+ var phi = p1.multiply(q1);
+ if(phi.gcd(ee).compareTo(BigInteger.ONE) == 0) {
+ this.n = this.p.multiply(this.q);
+ this.d = ee.modInverse(phi);
+ this.dmp1 = this.d.mod(p1);
+ this.dmq1 = this.d.mod(q1);
+ this.coeff = this.q.modInverse(this.p);
+ break;
+ }
+ }
+}
+
+// Perform raw private operation on "x": return x^d (mod n)
+function RSADoPrivate(x) {
+ if(this.p == null || this.q == null)
+ return x.modPow(this.d, this.n);
+
+ // TODO: re-calculate any missing CRT params
+ var xp = x.mod(this.p).modPow(this.dmp1, this.p);
+ var xq = x.mod(this.q).modPow(this.dmq1, this.q);
+
+ while(xp.compareTo(xq) < 0)
+ xp = xp.add(this.p);
+ return xp.subtract(xq).multiply(this.coeff).mod(this.p).multiply(this.q).add(xq);
+}
+
+// Return the PKCS#1 RSA decryption of "ctext".
+// "ctext" is an even-length hex string and the output is a plain string.
+function RSADecrypt(ctext) {
+ var c = parseBigInt(ctext, 16);
+ var m = this.doPrivate(c);
+ if(m == null) return null;
+ return pkcs1unpad2(m, (this.n.bitLength()+7)>>3);
+}
+
+// Return the PKCS#1 RSA decryption of "ctext".
+// "ctext" is a Base64-encoded string and the output is a plain string.
+//function RSAB64Decrypt(ctext) {
+// var h = b64tohex(ctext);
+// if(h) return this.decrypt(h); else return null;
+//}
+
+// protected
+RSAKey.prototype.doPrivate = RSADoPrivate;
+
+// public
+RSAKey.prototype.setPrivate = RSASetPrivate;
+RSAKey.prototype.setPrivateEx = RSASetPrivateEx;
+RSAKey.prototype.generate = RSAGenerate;
+RSAKey.prototype.decrypt = RSADecrypt;
+//RSAKey.prototype.b64_decrypt = RSAB64Decrypt;
+
+
+nValue="a5261939975948bb7a58dffe5ff54e65f0498f9175f5a09288810b8975871e99af3b5dd94057b0fc07535f5f97444504fa35169d461d0d30cf0192e307727c065168c788771c561a9400fb49175e9e6aa4e23fe11af69e9412dd23b0cb6684c4c2429bce139e848ab26d0829073351f4acd36074eafd036a5eb83359d2a698d3";
+eValue="10001";
+dValue="8e9912f6d3645894e8d38cb58c0db81ff516cf4c7e5a14c7f1eddb1459d2cded4d8d293fc97aee6aefb861859c8b6a3d1dfe710463e1f9ddc72048c09751971c4a580aa51eb523357a3cc48d31cfad1d4a165066ed92d4748fb6571211da5cb14bc11b6e2df7c1a559e6d5ac1cd5c94703a22891464fba23d0d965086277a161";
+pValue="d090ce58a92c75233a6486cb0a9209bf3583b64f540c76f5294bb97d285eed33aec220bde14b2417951178ac152ceab6da7090905b478195498b352048f15e7d";
+qValue="cab575dc652bb66df15a0359609d51d1db184750c00c6698b90ef3465c99655103edbf0d54c56aec0ce3c4d22592338092a126a0cc49f65a4a30d222b411e58f";
+dmp1Value="1a24bca8e273df2f0e47c199bbf678604e7df7215480c77c8db39f49b000ce2cf7500038acfff5433b7d582a01f1826e6f4d42e1c57f5e1fef7b12aabc59fd25";
+dmq1Value="3d06982efbbe47339e1f6d36b1216b8a741d410b0c662f54f7118b27b9a4ec9d914337eb39841d8666f3034408cf94f5b62f11c402fc994fe15a05493150d9fd";
+coeffValue="3a3e731acd8960b7ff9eb81a7ff93bd1cfa74cbd56987db58b4594fb09c09084db1734c8143f98b602b981aaa9243ca28deb69b5b280ee8dcee0fd2625e53250";
+
+setupEngine(am3, 28);
+
+var TEXT = "The quick brown fox jumped over the extremely lazy frog! " +
+ "Now is the time for all good men to come to the party.";
+var encrypted;
+
+function encrypt() {
+ var RSA = new RSAKey();
+ RSA.setPublic(nValue, eValue);
+ RSA.setPrivateEx(nValue, eValue, dValue, pValue, qValue, dmp1Value, dmq1Value, coeffValue);
+ encrypted = RSA.encrypt(TEXT);
+}
+
+function decrypt() {
+ var RSA = new RSAKey();
+ RSA.setPublic(nValue, eValue);
+ RSA.setPrivateEx(nValue, eValue, dValue, pValue, qValue, dmp1Value, dmq1Value, coeffValue);
+ var decrypted = RSA.decrypt(encrypted);
+ if (decrypted != TEXT) {
+ throw new Error("Crypto operation failed");
+ }
+}
diff --git a/js/src/octane/deltablue.js b/js/src/octane/deltablue.js
new file mode 100644
index 0000000000..a3a5976488
--- /dev/null
+++ b/js/src/octane/deltablue.js
@@ -0,0 +1,883 @@
+// Copyright 2008 the V8 project authors. All rights reserved.
+// Copyright 1996 John Maloney and Mario Wolczko.
+
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 2 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+
+// This implementation of the DeltaBlue benchmark is derived
+// from the Smalltalk implementation by John Maloney and Mario
+// Wolczko. Some parts have been translated directly, whereas
+// others have been modified more aggresively to make it feel
+// more like a JavaScript program.
+
+
+var DeltaBlue = new BenchmarkSuite('DeltaBlue', [66118], [
+ new Benchmark('DeltaBlue', true, false, 4400, deltaBlue)
+]);
+
+
+/**
+ * A JavaScript implementation of the DeltaBlue constraint-solving
+ * algorithm, as described in:
+ *
+ * "The DeltaBlue Algorithm: An Incremental Constraint Hierarchy Solver"
+ * Bjorn N. Freeman-Benson and John Maloney
+ * January 1990 Communications of the ACM,
+ * also available as University of Washington TR 89-08-06.
+ *
+ * Beware: this benchmark is written in a grotesque style where
+ * the constraint model is built by side-effects from constructors.
+ * I've kept it this way to avoid deviating too much from the original
+ * implementation.
+ */
+
+
+/* --- O b j e c t M o d e l --- */
+
+Object.defineProperty(Object.prototype, "inheritsFrom", {
+
+ value: function (shuper) {
+ function Inheriter() { }
+ Inheriter.prototype = shuper.prototype;
+ this.prototype = new Inheriter();
+ this.superConstructor = shuper;
+ }
+});
+
+function OrderedCollection() {
+ this.elms = new Array();
+}
+
+OrderedCollection.prototype.add = function (elm) {
+ this.elms.push(elm);
+}
+
+OrderedCollection.prototype.at = function (index) {
+ return this.elms[index];
+}
+
+OrderedCollection.prototype.size = function () {
+ return this.elms.length;
+}
+
+OrderedCollection.prototype.removeFirst = function () {
+ return this.elms.pop();
+}
+
+OrderedCollection.prototype.remove = function (elm) {
+ var index = 0, skipped = 0;
+ for (var i = 0; i < this.elms.length; i++) {
+ var value = this.elms[i];
+ if (value != elm) {
+ this.elms[index] = value;
+ index++;
+ } else {
+ skipped++;
+ }
+ }
+ for (var i = 0; i < skipped; i++)
+ this.elms.pop();
+}
+
+/* --- *
+ * S t r e n g t h
+ * --- */
+
+/**
+ * Strengths are used to measure the relative importance of constraints.
+ * New strengths may be inserted in the strength hierarchy without
+ * disrupting current constraints. Strengths cannot be created outside
+ * this class, so pointer comparison can be used for value comparison.
+ */
+function Strength(strengthValue, name) {
+ this.strengthValue = strengthValue;
+ this.name = name;
+}
+
+Strength.stronger = function (s1, s2) {
+ return s1.strengthValue < s2.strengthValue;
+}
+
+Strength.weaker = function (s1, s2) {
+ return s1.strengthValue > s2.strengthValue;
+}
+
+Strength.weakestOf = function (s1, s2) {
+ return this.weaker(s1, s2) ? s1 : s2;
+}
+
+Strength.strongest = function (s1, s2) {
+ return this.stronger(s1, s2) ? s1 : s2;
+}
+
+Strength.prototype.nextWeaker = function () {
+ switch (this.strengthValue) {
+ case 0: return Strength.WEAKEST;
+ case 1: return Strength.WEAK_DEFAULT;
+ case 2: return Strength.NORMAL;
+ case 3: return Strength.STRONG_DEFAULT;
+ case 4: return Strength.PREFERRED;
+ case 5: return Strength.REQUIRED;
+ }
+}
+
+// Strength constants.
+Strength.REQUIRED = new Strength(0, "required");
+Strength.STONG_PREFERRED = new Strength(1, "strongPreferred");
+Strength.PREFERRED = new Strength(2, "preferred");
+Strength.STRONG_DEFAULT = new Strength(3, "strongDefault");
+Strength.NORMAL = new Strength(4, "normal");
+Strength.WEAK_DEFAULT = new Strength(5, "weakDefault");
+Strength.WEAKEST = new Strength(6, "weakest");
+
+/* --- *
+ * C o n s t r a i n t
+ * --- */
+
+/**
+ * An abstract class representing a system-maintainable relationship
+ * (or "constraint") between a set of variables. A constraint supplies
+ * a strength instance variable; concrete subclasses provide a means
+ * of storing the constrained variables and other information required
+ * to represent a constraint.
+ */
+function Constraint(strength) {
+ this.strength = strength;
+}
+
+/**
+ * Activate this constraint and attempt to satisfy it.
+ */
+Constraint.prototype.addConstraint = function () {
+ this.addToGraph();
+ planner.incrementalAdd(this);
+}
+
+/**
+ * Attempt to find a way to enforce this constraint. If successful,
+ * record the solution, perhaps modifying the current dataflow
+ * graph. Answer the constraint that this constraint overrides, if
+ * there is one, or nil, if there isn't.
+ * Assume: I am not already satisfied.
+ */
+Constraint.prototype.satisfy = function (mark) {
+ this.chooseMethod(mark);
+ if (!this.isSatisfied()) {
+ if (this.strength == Strength.REQUIRED)
+ alert("Could not satisfy a required constraint!");
+ return null;
+ }
+ this.markInputs(mark);
+ var out = this.output();
+ var overridden = out.determinedBy;
+ if (overridden != null) overridden.markUnsatisfied();
+ out.determinedBy = this;
+ if (!planner.addPropagate(this, mark))
+ alert("Cycle encountered");
+ out.mark = mark;
+ return overridden;
+}
+
+Constraint.prototype.destroyConstraint = function () {
+ if (this.isSatisfied()) planner.incrementalRemove(this);
+ else this.removeFromGraph();
+}
+
+/**
+ * Normal constraints are not input constraints. An input constraint
+ * is one that depends on external state, such as the mouse, the
+ * keybord, a clock, or some arbitraty piece of imperative code.
+ */
+Constraint.prototype.isInput = function () {
+ return false;
+}
+
+/* --- *
+ * U n a r y C o n s t r a i n t
+ * --- */
+
+/**
+ * Abstract superclass for constraints having a single possible output
+ * variable.
+ */
+function UnaryConstraint(v, strength) {
+ UnaryConstraint.superConstructor.call(this, strength);
+ this.myOutput = v;
+ this.satisfied = false;
+ this.addConstraint();
+}
+
+UnaryConstraint.inheritsFrom(Constraint);
+
+/**
+ * Adds this constraint to the constraint graph
+ */
+UnaryConstraint.prototype.addToGraph = function () {
+ this.myOutput.addConstraint(this);
+ this.satisfied = false;
+}
+
+/**
+ * Decides if this constraint can be satisfied and records that
+ * decision.
+ */
+UnaryConstraint.prototype.chooseMethod = function (mark) {
+ this.satisfied = (this.myOutput.mark != mark)
+ && Strength.stronger(this.strength, this.myOutput.walkStrength);
+}
+
+/**
+ * Returns true if this constraint is satisfied in the current solution.
+ */
+UnaryConstraint.prototype.isSatisfied = function () {
+ return this.satisfied;
+}
+
+UnaryConstraint.prototype.markInputs = function (mark) {
+ // has no inputs
+}
+
+/**
+ * Returns the current output variable.
+ */
+UnaryConstraint.prototype.output = function () {
+ return this.myOutput;
+}
+
+/**
+ * Calculate the walkabout strength, the stay flag, and, if it is
+ * 'stay', the value for the current output of this constraint. Assume
+ * this constraint is satisfied.
+ */
+UnaryConstraint.prototype.recalculate = function () {
+ this.myOutput.walkStrength = this.strength;
+ this.myOutput.stay = !this.isInput();
+ if (this.myOutput.stay) this.execute(); // Stay optimization
+}
+
+/**
+ * Records that this constraint is unsatisfied
+ */
+UnaryConstraint.prototype.markUnsatisfied = function () {
+ this.satisfied = false;
+}
+
+UnaryConstraint.prototype.inputsKnown = function () {
+ return true;
+}
+
+UnaryConstraint.prototype.removeFromGraph = function () {
+ if (this.myOutput != null) this.myOutput.removeConstraint(this);
+ this.satisfied = false;
+}
+
+/* --- *
+ * S t a y C o n s t r a i n t
+ * --- */
+
+/**
+ * Variables that should, with some level of preference, stay the same.
+ * Planners may exploit the fact that instances, if satisfied, will not
+ * change their output during plan execution. This is called "stay
+ * optimization".
+ */
+function StayConstraint(v, str) {
+ StayConstraint.superConstructor.call(this, v, str);
+}
+
+StayConstraint.inheritsFrom(UnaryConstraint);
+
+StayConstraint.prototype.execute = function () {
+ // Stay constraints do nothing
+}
+
+/* --- *
+ * E d i t C o n s t r a i n t
+ * --- */
+
+/**
+ * A unary input constraint used to mark a variable that the client
+ * wishes to change.
+ */
+function EditConstraint(v, str) {
+ EditConstraint.superConstructor.call(this, v, str);
+}
+
+EditConstraint.inheritsFrom(UnaryConstraint);
+
+/**
+ * Edits indicate that a variable is to be changed by imperative code.
+ */
+EditConstraint.prototype.isInput = function () {
+ return true;
+}
+
+EditConstraint.prototype.execute = function () {
+ // Edit constraints do nothing
+}
+
+/* --- *
+ * B i n a r y C o n s t r a i n t
+ * --- */
+
+var Direction = new Object();
+Direction.NONE = 0;
+Direction.FORWARD = 1;
+Direction.BACKWARD = -1;
+
+/**
+ * Abstract superclass for constraints having two possible output
+ * variables.
+ */
+function BinaryConstraint(var1, var2, strength) {
+ BinaryConstraint.superConstructor.call(this, strength);
+ this.v1 = var1;
+ this.v2 = var2;
+ this.direction = Direction.NONE;
+ this.addConstraint();
+}
+
+BinaryConstraint.inheritsFrom(Constraint);
+
+/**
+ * Decides if this constraint can be satisfied and which way it
+ * should flow based on the relative strength of the variables related,
+ * and record that decision.
+ */
+BinaryConstraint.prototype.chooseMethod = function (mark) {
+ if (this.v1.mark == mark) {
+ this.direction = (this.v2.mark != mark && Strength.stronger(this.strength, this.v2.walkStrength))
+ ? Direction.FORWARD
+ : Direction.NONE;
+ }
+ if (this.v2.mark == mark) {
+ this.direction = (this.v1.mark != mark && Strength.stronger(this.strength, this.v1.walkStrength))
+ ? Direction.BACKWARD
+ : Direction.NONE;
+ }
+ if (Strength.weaker(this.v1.walkStrength, this.v2.walkStrength)) {
+ this.direction = Strength.stronger(this.strength, this.v1.walkStrength)
+ ? Direction.BACKWARD
+ : Direction.NONE;
+ } else {
+ this.direction = Strength.stronger(this.strength, this.v2.walkStrength)
+ ? Direction.FORWARD
+ : Direction.BACKWARD
+ }
+}
+
+/**
+ * Add this constraint to the constraint graph
+ */
+BinaryConstraint.prototype.addToGraph = function () {
+ this.v1.addConstraint(this);
+ this.v2.addConstraint(this);
+ this.direction = Direction.NONE;
+}
+
+/**
+ * Answer true if this constraint is satisfied in the current solution.
+ */
+BinaryConstraint.prototype.isSatisfied = function () {
+ return this.direction != Direction.NONE;
+}
+
+/**
+ * Mark the input variable with the given mark.
+ */
+BinaryConstraint.prototype.markInputs = function (mark) {
+ this.input().mark = mark;
+}
+
+/**
+ * Returns the current input variable
+ */
+BinaryConstraint.prototype.input = function () {
+ return (this.direction == Direction.FORWARD) ? this.v1 : this.v2;
+}
+
+/**
+ * Returns the current output variable
+ */
+BinaryConstraint.prototype.output = function () {
+ return (this.direction == Direction.FORWARD) ? this.v2 : this.v1;
+}
+
+/**
+ * Calculate the walkabout strength, the stay flag, and, if it is
+ * 'stay', the value for the current output of this
+ * constraint. Assume this constraint is satisfied.
+ */
+BinaryConstraint.prototype.recalculate = function () {
+ var ihn = this.input(), out = this.output();
+ out.walkStrength = Strength.weakestOf(this.strength, ihn.walkStrength);
+ out.stay = ihn.stay;
+ if (out.stay) this.execute();
+}
+
+/**
+ * Record the fact that this constraint is unsatisfied.
+ */
+BinaryConstraint.prototype.markUnsatisfied = function () {
+ this.direction = Direction.NONE;
+}
+
+BinaryConstraint.prototype.inputsKnown = function (mark) {
+ var i = this.input();
+ return i.mark == mark || i.stay || i.determinedBy == null;
+}
+
+BinaryConstraint.prototype.removeFromGraph = function () {
+ if (this.v1 != null) this.v1.removeConstraint(this);
+ if (this.v2 != null) this.v2.removeConstraint(this);
+ this.direction = Direction.NONE;
+}
+
+/* --- *
+ * S c a l e C o n s t r a i n t
+ * --- */
+
+/**
+ * Relates two variables by the linear scaling relationship: "v2 =
+ * (v1 * scale) + offset". Either v1 or v2 may be changed to maintain
+ * this relationship but the scale factor and offset are considered
+ * read-only.
+ */
+function ScaleConstraint(src, scale, offset, dest, strength) {
+ this.direction = Direction.NONE;
+ this.scale = scale;
+ this.offset = offset;
+ ScaleConstraint.superConstructor.call(this, src, dest, strength);
+}
+
+ScaleConstraint.inheritsFrom(BinaryConstraint);
+
+/**
+ * Adds this constraint to the constraint graph.
+ */
+ScaleConstraint.prototype.addToGraph = function () {
+ ScaleConstraint.superConstructor.prototype.addToGraph.call(this);
+ this.scale.addConstraint(this);
+ this.offset.addConstraint(this);
+}
+
+ScaleConstraint.prototype.removeFromGraph = function () {
+ ScaleConstraint.superConstructor.prototype.removeFromGraph.call(this);
+ if (this.scale != null) this.scale.removeConstraint(this);
+ if (this.offset != null) this.offset.removeConstraint(this);
+}
+
+ScaleConstraint.prototype.markInputs = function (mark) {
+ ScaleConstraint.superConstructor.prototype.markInputs.call(this, mark);
+ this.scale.mark = this.offset.mark = mark;
+}
+
+/**
+ * Enforce this constraint. Assume that it is satisfied.
+ */
+ScaleConstraint.prototype.execute = function () {
+ if (this.direction == Direction.FORWARD) {
+ this.v2.value = this.v1.value * this.scale.value + this.offset.value;
+ } else {
+ this.v1.value = (this.v2.value - this.offset.value) / this.scale.value;
+ }
+}
+
+/**
+ * Calculate the walkabout strength, the stay flag, and, if it is
+ * 'stay', the value for the current output of this constraint. Assume
+ * this constraint is satisfied.
+ */
+ScaleConstraint.prototype.recalculate = function () {
+ var ihn = this.input(), out = this.output();
+ out.walkStrength = Strength.weakestOf(this.strength, ihn.walkStrength);
+ out.stay = ihn.stay && this.scale.stay && this.offset.stay;
+ if (out.stay) this.execute();
+}
+
+/* --- *
+ * E q u a l i t y C o n s t r a i n t
+ * --- */
+
+/**
+ * Constrains two variables to have the same value.
+ */
+function EqualityConstraint(var1, var2, strength) {
+ EqualityConstraint.superConstructor.call(this, var1, var2, strength);
+}
+
+EqualityConstraint.inheritsFrom(BinaryConstraint);
+
+/**
+ * Enforce this constraint. Assume that it is satisfied.
+ */
+EqualityConstraint.prototype.execute = function () {
+ this.output().value = this.input().value;
+}
+
+/* --- *
+ * V a r i a b l e
+ * --- */
+
+/**
+ * A constrained variable. In addition to its value, it maintain the
+ * structure of the constraint graph, the current dataflow graph, and
+ * various parameters of interest to the DeltaBlue incremental
+ * constraint solver.
+ **/
+function Variable(name, initialValue) {
+ this.value = initialValue || 0;
+ this.constraints = new OrderedCollection();
+ this.determinedBy = null;
+ this.mark = 0;
+ this.walkStrength = Strength.WEAKEST;
+ this.stay = true;
+ this.name = name;
+}
+
+/**
+ * Add the given constraint to the set of all constraints that refer
+ * this variable.
+ */
+Variable.prototype.addConstraint = function (c) {
+ this.constraints.add(c);
+}
+
+/**
+ * Removes all traces of c from this variable.
+ */
+Variable.prototype.removeConstraint = function (c) {
+ this.constraints.remove(c);
+ if (this.determinedBy == c) this.determinedBy = null;
+}
+
+/* --- *
+ * P l a n n e r
+ * --- */
+
+/**
+ * The DeltaBlue planner
+ */
+function Planner() {
+ this.currentMark = 0;
+}
+
+/**
+ * Attempt to satisfy the given constraint and, if successful,
+ * incrementally update the dataflow graph. Details: If satifying
+ * the constraint is successful, it may override a weaker constraint
+ * on its output. The algorithm attempts to resatisfy that
+ * constraint using some other method. This process is repeated
+ * until either a) it reaches a variable that was not previously
+ * determined by any constraint or b) it reaches a constraint that
+ * is too weak to be satisfied using any of its methods. The
+ * variables of constraints that have been processed are marked with
+ * a unique mark value so that we know where we've been. This allows
+ * the algorithm to avoid getting into an infinite loop even if the
+ * constraint graph has an inadvertent cycle.
+ */
+Planner.prototype.incrementalAdd = function (c) {
+ var mark = this.newMark();
+ var overridden = c.satisfy(mark);
+ while (overridden != null)
+ overridden = overridden.satisfy(mark);
+}
+
+/**
+ * Entry point for retracting a constraint. Remove the given
+ * constraint and incrementally update the dataflow graph.
+ * Details: Retracting the given constraint may allow some currently
+ * unsatisfiable downstream constraint to be satisfied. We therefore collect
+ * a list of unsatisfied downstream constraints and attempt to
+ * satisfy each one in turn. This list is traversed by constraint
+ * strength, strongest first, as a heuristic for avoiding
+ * unnecessarily adding and then overriding weak constraints.
+ * Assume: c is satisfied.
+ */
+Planner.prototype.incrementalRemove = function (c) {
+ var out = c.output();
+ c.markUnsatisfied();
+ c.removeFromGraph();
+ var unsatisfied = this.removePropagateFrom(out);
+ var strength = Strength.REQUIRED;
+ do {
+ for (var i = 0; i < unsatisfied.size(); i++) {
+ var u = unsatisfied.at(i);
+ if (u.strength == strength)
+ this.incrementalAdd(u);
+ }
+ strength = strength.nextWeaker();
+ } while (strength != Strength.WEAKEST);
+}
+
+/**
+ * Select a previously unused mark value.
+ */
+Planner.prototype.newMark = function () {
+ return ++this.currentMark;
+}
+
+/**
+ * Extract a plan for resatisfaction starting from the given source
+ * constraints, usually a set of input constraints. This method
+ * assumes that stay optimization is desired; the plan will contain
+ * only constraints whose output variables are not stay. Constraints
+ * that do no computation, such as stay and edit constraints, are
+ * not included in the plan.
+ * Details: The outputs of a constraint are marked when it is added
+ * to the plan under construction. A constraint may be appended to
+ * the plan when all its input variables are known. A variable is
+ * known if either a) the variable is marked (indicating that has
+ * been computed by a constraint appearing earlier in the plan), b)
+ * the variable is 'stay' (i.e. it is a constant at plan execution
+ * time), or c) the variable is not determined by any
+ * constraint. The last provision is for past states of history
+ * variables, which are not stay but which are also not computed by
+ * any constraint.
+ * Assume: sources are all satisfied.
+ */
+Planner.prototype.makePlan = function (sources) {
+ var mark = this.newMark();
+ var plan = new Plan();
+ var todo = sources;
+ while (todo.size() > 0) {
+ var c = todo.removeFirst();
+ if (c.output().mark != mark && c.inputsKnown(mark)) {
+ plan.addConstraint(c);
+ c.output().mark = mark;
+ this.addConstraintsConsumingTo(c.output(), todo);
+ }
+ }
+ return plan;
+}
+
+/**
+ * Extract a plan for resatisfying starting from the output of the
+ * given constraints, usually a set of input constraints.
+ */
+Planner.prototype.extractPlanFromConstraints = function (constraints) {
+ var sources = new OrderedCollection();
+ for (var i = 0; i < constraints.size(); i++) {
+ var c = constraints.at(i);
+ if (c.isInput() && c.isSatisfied())
+ // not in plan already and eligible for inclusion
+ sources.add(c);
+ }
+ return this.makePlan(sources);
+}
+
+/**
+ * Recompute the walkabout strengths and stay flags of all variables
+ * downstream of the given constraint and recompute the actual
+ * values of all variables whose stay flag is true. If a cycle is
+ * detected, remove the given constraint and answer
+ * false. Otherwise, answer true.
+ * Details: Cycles are detected when a marked variable is
+ * encountered downstream of the given constraint. The sender is
+ * assumed to have marked the inputs of the given constraint with
+ * the given mark. Thus, encountering a marked node downstream of
+ * the output constraint means that there is a path from the
+ * constraint's output to one of its inputs.
+ */
+Planner.prototype.addPropagate = function (c, mark) {
+ var todo = new OrderedCollection();
+ todo.add(c);
+ while (todo.size() > 0) {
+ var d = todo.removeFirst();
+ if (d.output().mark == mark) {
+ this.incrementalRemove(c);
+ return false;
+ }
+ d.recalculate();
+ this.addConstraintsConsumingTo(d.output(), todo);
+ }
+ return true;
+}
+
+
+/**
+ * Update the walkabout strengths and stay flags of all variables
+ * downstream of the given constraint. Answer a collection of
+ * unsatisfied constraints sorted in order of decreasing strength.
+ */
+Planner.prototype.removePropagateFrom = function (out) {
+ out.determinedBy = null;
+ out.walkStrength = Strength.WEAKEST;
+ out.stay = true;
+ var unsatisfied = new OrderedCollection();
+ var todo = new OrderedCollection();
+ todo.add(out);
+ while (todo.size() > 0) {
+ var v = todo.removeFirst();
+ for (var i = 0; i < v.constraints.size(); i++) {
+ var c = v.constraints.at(i);
+ if (!c.isSatisfied())
+ unsatisfied.add(c);
+ }
+ var determining = v.determinedBy;
+ for (var i = 0; i < v.constraints.size(); i++) {
+ var next = v.constraints.at(i);
+ if (next != determining && next.isSatisfied()) {
+ next.recalculate();
+ todo.add(next.output());
+ }
+ }
+ }
+ return unsatisfied;
+}
+
+Planner.prototype.addConstraintsConsumingTo = function (v, coll) {
+ var determining = v.determinedBy;
+ var cc = v.constraints;
+ for (var i = 0; i < cc.size(); i++) {
+ var c = cc.at(i);
+ if (c != determining && c.isSatisfied())
+ coll.add(c);
+ }
+}
+
+/* --- *
+ * P l a n
+ * --- */
+
+/**
+ * A Plan is an ordered list of constraints to be executed in sequence
+ * to resatisfy all currently satisfiable constraints in the face of
+ * one or more changing inputs.
+ */
+function Plan() {
+ this.v = new OrderedCollection();
+}
+
+Plan.prototype.addConstraint = function (c) {
+ this.v.add(c);
+}
+
+Plan.prototype.size = function () {
+ return this.v.size();
+}
+
+Plan.prototype.constraintAt = function (index) {
+ return this.v.at(index);
+}
+
+Plan.prototype.execute = function () {
+ for (var i = 0; i < this.size(); i++) {
+ var c = this.constraintAt(i);
+ c.execute();
+ }
+}
+
+/* --- *
+ * M a i n
+ * --- */
+
+/**
+ * This is the standard DeltaBlue benchmark. A long chain of equality
+ * constraints is constructed with a stay constraint on one end. An
+ * edit constraint is then added to the opposite end and the time is
+ * measured for adding and removing this constraint, and extracting
+ * and executing a constraint satisfaction plan. There are two cases.
+ * In case 1, the added constraint is stronger than the stay
+ * constraint and values must propagate down the entire length of the
+ * chain. In case 2, the added constraint is weaker than the stay
+ * constraint so it cannot be accomodated. The cost in this case is,
+ * of course, very low. Typical situations lie somewhere between these
+ * two extremes.
+ */
+function chainTest(n) {
+ planner = new Planner();
+ var prev = null, first = null, last = null;
+
+ // Build chain of n equality constraints
+ for (var i = 0; i <= n; i++) {
+ var name = "v" + i;
+ var v = new Variable(name);
+ if (prev != null)
+ new EqualityConstraint(prev, v, Strength.REQUIRED);
+ if (i == 0) first = v;
+ if (i == n) last = v;
+ prev = v;
+ }
+
+ new StayConstraint(last, Strength.STRONG_DEFAULT);
+ var edit = new EditConstraint(first, Strength.PREFERRED);
+ var edits = new OrderedCollection();
+ edits.add(edit);
+ var plan = planner.extractPlanFromConstraints(edits);
+ for (var i = 0; i < 100; i++) {
+ first.value = i;
+ plan.execute();
+ if (last.value != i)
+ alert("Chain test failed.");
+ }
+}
+
+/**
+ * This test constructs a two sets of variables related to each
+ * other by a simple linear transformation (scale and offset). The
+ * time is measured to change a variable on either side of the
+ * mapping and to change the scale and offset factors.
+ */
+function projectionTest(n) {
+ planner = new Planner();
+ var scale = new Variable("scale", 10);
+ var offset = new Variable("offset", 1000);
+ var src = null, dst = null;
+
+ var dests = new OrderedCollection();
+ for (var i = 0; i < n; i++) {
+ src = new Variable("src" + i, i);
+ dst = new Variable("dst" + i, i);
+ dests.add(dst);
+ new StayConstraint(src, Strength.NORMAL);
+ new ScaleConstraint(src, scale, offset, dst, Strength.REQUIRED);
+ }
+
+ change(src, 17);
+ if (dst.value != 1170) alert("Projection 1 failed");
+ change(dst, 1050);
+ if (src.value != 5) alert("Projection 2 failed");
+ change(scale, 5);
+ for (var i = 0; i < n - 1; i++) {
+ if (dests.at(i).value != i * 5 + 1000)
+ alert("Projection 3 failed");
+ }
+ change(offset, 2000);
+ for (var i = 0; i < n - 1; i++) {
+ if (dests.at(i).value != i * 5 + 2000)
+ alert("Projection 4 failed");
+ }
+}
+
+function change(v, newValue) {
+ var edit = new EditConstraint(v, Strength.PREFERRED);
+ var edits = new OrderedCollection();
+ edits.add(edit);
+ var plan = planner.extractPlanFromConstraints(edits);
+ for (var i = 0; i < 10; i++) {
+ v.value = newValue;
+ plan.execute();
+ }
+ edit.destroyConstraint();
+}
+
+// Global variable holding the current planner.
+var planner = null;
+
+function deltaBlue() {
+ chainTest(100);
+ projectionTest(100);
+}
diff --git a/js/src/octane/earley-boyer.js b/js/src/octane/earley-boyer.js
new file mode 100644
index 0000000000..41d593d3bf
--- /dev/null
+++ b/js/src/octane/earley-boyer.js
@@ -0,0 +1,4684 @@
+// This file is automatically generated by scheme2js, except for the
+// benchmark harness code at the beginning and end of the file.
+
+var EarleyBoyer = new BenchmarkSuite('EarleyBoyer', [666463], [
+ new Benchmark("Earley", true, false, 2500, function () { BgL_earleyzd2benchmarkzd2(); }),
+ new Benchmark("Boyer", true, false, 200, function () { BgL_nboyerzd2benchmarkzd2(); })
+]);
+
+
+/************* GENERATED FILE - DO NOT EDIT *************/
+/************* GENERATED FILE - DO NOT EDIT *************/
+/************* GENERATED FILE - DO NOT EDIT *************/
+/************* GENERATED FILE - DO NOT EDIT *************/
+/************* GENERATED FILE - DO NOT EDIT *************/
+/************* GENERATED FILE - DO NOT EDIT *************/
+/************* GENERATED FILE - DO NOT EDIT *************/
+/************* GENERATED FILE - DO NOT EDIT *************/
+/*
+ * To use write/prints/... the default-output port has to be set first.
+ * Simply setting SC_DEFAULT_OUT and SC_ERROR_OUT to the desired values
+ * should do the trick.
+ * In the following example the std-out and error-port are redirected to
+ * a DIV.
+function initRuntime() {
+ function escapeHTML(s) {
+ var tmp = s;
+ tmp = tmp.replace(/&/g, "&amp;");
+ tmp = tmp.replace(/</g, "&lt;");
+ tmp = tmp.replace(/>/g, "&gt;");
+ tmp = tmp.replace(/ /g, "&nbsp;");
+ tmp = tmp.replace(/\n/g, "<br />");
+ tmp = tmp.replace(/\t/g, "&nbsp;&nbsp;&nbsp;&nbsp");
+ return tmp;
+
+ }
+
+ document.write("<div id='stdout'></div>");
+ SC_DEFAULT_OUT = new sc_GenericOutputPort(
+ function(s) {
+ var stdout = document.getElementById('stdout');
+ stdout.innerHTML = stdout.innerHTML + escapeHTML(s);
+ });
+ SC_ERROR_OUT = SC_DEFAULT_OUT;
+}
+*/
+
+
+function sc_print_debug() {
+ sc_print.apply(null, arguments);
+}
+/*** META ((export *js*)) */
+var sc_JS_GLOBALS = this;
+
+var __sc_LINE=-1;
+var __sc_FILE="";
+
+/*** META ((export #t)) */
+function sc_alert() {
+ var len = arguments.length;
+ var s = "";
+ var i;
+
+ for( i = 0; i < len; i++ ) {
+ s += sc_toDisplayString(arguments[ i ]);
+ }
+
+ return alert( s );
+}
+
+/*** META ((export #t)) */
+function sc_typeof( x ) {
+ return typeof x;
+}
+
+/*** META ((export #t)) */
+function sc_error() {
+ var a = [sc_jsstring2symbol("*error*")];
+ for (var i = 0; i < arguments.length; i++) {
+ a[i+1] = arguments[i];
+ }
+ throw a;
+}
+
+/*** META ((export #t)
+ (peephole (prefix "throw ")))
+*/
+function sc_raise(obj) {
+ throw obj;
+}
+
+/*** META ((export with-handler-lambda)) */
+function sc_withHandlerLambda(handler, body) {
+ try {
+ return body();
+ } catch(e) {
+ if (!e._internalException)
+ return handler(e);
+ else
+ throw e;
+ }
+}
+
+var sc_properties = new Object();
+
+/*** META ((export #t)) */
+function sc_putpropBang(sym, key, val) {
+ var ht = sc_properties[sym];
+ if (!ht) {
+ ht = new Object();
+ sc_properties[sym] = ht;
+ }
+ ht[key] = val;
+}
+
+/*** META ((export #t)) */
+function sc_getprop(sym, key) {
+ var ht = sc_properties[sym];
+ if (ht) {
+ if (key in ht)
+ return ht[key];
+ else
+ return false;
+ } else
+ return false;
+}
+
+/*** META ((export #t)) */
+function sc_rempropBang(sym, key) {
+ var ht = sc_properties[sym];
+ if (ht)
+ delete ht[key];
+}
+
+/*** META ((export #t)) */
+function sc_any2String(o) {
+ return jsstring2string(sc_toDisplayString(o));
+}
+
+/*** META ((export #t)
+ (peephole (infix 2 2 "==="))
+ (type bool))
+*/
+function sc_isEqv(o1, o2) {
+ return (o1 === o2);
+}
+
+/*** META ((export #t)
+ (peephole (infix 2 2 "==="))
+ (type bool))
+*/
+function sc_isEq(o1, o2) {
+ return (o1 === o2);
+}
+
+/*** META ((export #t)
+ (type bool))
+*/
+function sc_isNumber(n) {
+ return (typeof n === "number");
+}
+
+/*** META ((export #t)
+ (type bool))
+*/
+function sc_isComplex(n) {
+ return sc_isNumber(n);
+}
+
+/*** META ((export #t)
+ (type bool))
+*/
+function sc_isReal(n) {
+ return sc_isNumber(n);
+}
+
+/*** META ((export #t)
+ (type bool))
+*/
+function sc_isRational(n) {
+ return sc_isReal(n);
+}
+
+/*** META ((export #t)
+ (type bool))
+*/
+function sc_isInteger(n) {
+ return (parseInt(n) === n);
+}
+
+/*** META ((export #t)
+ (type bool)
+ (peephole (postfix ", false")))
+*/
+// we don't have exact numbers...
+function sc_isExact(n) {
+ return false;
+}
+
+/*** META ((export #t)
+ (peephole (postfix ", true"))
+ (type bool))
+*/
+function sc_isInexact(n) {
+ return true;
+}
+
+/*** META ((export = =fx =fl)
+ (type bool)
+ (peephole (infix 2 2 "===")))
+*/
+function sc_equal(x) {
+ for (var i = 1; i < arguments.length; i++)
+ if (x !== arguments[i])
+ return false;
+ return true;
+}
+
+/*** META ((export < <fx <fl)
+ (type bool)
+ (peephole (infix 2 2 "<")))
+*/
+function sc_less(x) {
+ for (var i = 1; i < arguments.length; i++) {
+ if (x >= arguments[i])
+ return false;
+ x = arguments[i];
+ }
+ return true;
+}
+
+/*** META ((export > >fx >fl)
+ (type bool)
+ (peephole (infix 2 2 ">")))
+*/
+function sc_greater(x, y) {
+ for (var i = 1; i < arguments.length; i++) {
+ if (x <= arguments[i])
+ return false;
+ x = arguments[i];
+ }
+ return true;
+}
+
+/*** META ((export <= <=fx <=fl)
+ (type bool)
+ (peephole (infix 2 2 "<=")))
+*/
+function sc_lessEqual(x, y) {
+ for (var i = 1; i < arguments.length; i++) {
+ if (x > arguments[i])
+ return false;
+ x = arguments[i];
+ }
+ return true;
+}
+
+/*** META ((export >= >=fl >=fx)
+ (type bool)
+ (peephole (infix 2 2 ">=")))
+*/
+function sc_greaterEqual(x, y) {
+ for (var i = 1; i < arguments.length; i++) {
+ if (x < arguments[i])
+ return false;
+ x = arguments[i];
+ }
+ return true;
+}
+
+/*** META ((export #t)
+ (type bool)
+ (peephole (postfix "=== 0")))
+*/
+function sc_isZero(x) {
+ return (x === 0);
+}
+
+/*** META ((export #t)
+ (type bool)
+ (peephole (postfix "> 0")))
+*/
+function sc_isPositive(x) {
+ return (x > 0);
+}
+
+/*** META ((export #t)
+ (type bool)
+ (peephole (postfix "< 0")))
+*/
+function sc_isNegative(x) {
+ return (x < 0);
+}
+
+/*** META ((export #t)
+ (type bool)
+ (peephole (postfix "%2===1")))
+*/
+function sc_isOdd(x) {
+ return (x % 2 === 1);
+}
+
+/*** META ((export #t)
+ (type bool)
+ (peephole (postfix "%2===0")))
+*/
+function sc_isEven(x) {
+ return (x % 2 === 0);
+}
+
+/*** META ((export #t)) */
+var sc_max = Math.max;
+/*** META ((export #t)) */
+var sc_min = Math.min;
+
+/*** META ((export + +fx +fl)
+ (peephole (infix 0 #f "+" "0")))
+*/
+function sc_plus() {
+ var sum = 0;
+ for (var i = 0; i < arguments.length; i++)
+ sum += arguments[i];
+ return sum;
+}
+
+/*** META ((export * *fx *fl)
+ (peephole (infix 0 #f "*" "1")))
+*/
+function sc_multi() {
+ var product = 1;
+ for (var i = 0; i < arguments.length; i++)
+ product *= arguments[i];
+ return product;
+}
+
+/*** META ((export - -fx -fl)
+ (peephole (minus)))
+*/
+function sc_minus(x) {
+ if (arguments.length === 1)
+ return -x;
+ else {
+ var res = x;
+ for (var i = 1; i < arguments.length; i++)
+ res -= arguments[i];
+ return res;
+ }
+}
+
+/*** META ((export / /fl)
+ (peephole (div)))
+*/
+function sc_div(x) {
+ if (arguments.length === 1)
+ return 1/x;
+ else {
+ var res = x;
+ for (var i = 1; i < arguments.length; i++)
+ res /= arguments[i];
+ return res;
+ }
+}
+
+/*** META ((export #t)) */
+var sc_abs = Math.abs;
+
+/*** META ((export quotient /fx)
+ (peephole (hole 2 "parseInt(" x "/" y ")")))
+*/
+function sc_quotient(x, y) {
+ return parseInt(x / y);
+}
+
+/*** META ((export #t)
+ (peephole (infix 2 2 "%")))
+*/
+function sc_remainder(x, y) {
+ return x % y;
+}
+
+/*** META ((export #t)
+ (peephole (modulo)))
+*/
+function sc_modulo(x, y) {
+ var remainder = x % y;
+ // if they don't have the same sign
+ if ((remainder * y) < 0)
+ return remainder + y;
+ else
+ return remainder;
+}
+
+function sc_euclid_gcd(a, b) {
+ var temp;
+ if (a === 0) return b;
+ if (b === 0) return a;
+ if (a < 0) {a = -a;};
+ if (b < 0) {b = -b;};
+ if (b > a) {temp = a; a = b; b = temp;};
+ while (true) {
+ a %= b;
+ if(a === 0) {return b;};
+ b %= a;
+ if(b === 0) {return a;};
+ };
+ return b;
+}
+
+/*** META ((export #t)) */
+function sc_gcd() {
+ var gcd = 0;
+ for (var i = 0; i < arguments.length; i++)
+ gcd = sc_euclid_gcd(gcd, arguments[i]);
+ return gcd;
+}
+
+/*** META ((export #t)) */
+function sc_lcm() {
+ var lcm = 1;
+ for (var i = 0; i < arguments.length; i++) {
+ var f = Math.round(arguments[i] / sc_euclid_gcd(arguments[i], lcm));
+ lcm *= Math.abs(f);
+ }
+ return lcm;
+}
+
+// LIMITATION: numerator and denominator don't make sense in floating point world.
+//var SC_MAX_DECIMALS = 1000000
+//
+// function sc_numerator(x) {
+// var rounded = Math.round(x * SC_MAX_DECIMALS);
+// return Math.round(rounded / sc_euclid_gcd(rounded, SC_MAX_DECIMALS));
+// }
+
+// function sc_denominator(x) {
+// var rounded = Math.round(x * SC_MAX_DECIMALS);
+// return Math.round(SC_MAX_DECIMALS / sc_euclid_gcd(rounded, SC_MAX_DECIMALS));
+// }
+
+/*** META ((export #t)) */
+var sc_floor = Math.floor;
+/*** META ((export #t)) */
+var sc_ceiling = Math.ceil;
+/*** META ((export #t)) */
+var sc_truncate = parseInt;
+/*** META ((export #t)) */
+var sc_round = Math.round;
+
+// LIMITATION: sc_rationalize doesn't make sense in a floating point world.
+
+/*** META ((export #t)) */
+var sc_exp = Math.exp;
+/*** META ((export #t)) */
+var sc_log = Math.log;
+/*** META ((export #t)) */
+var sc_sin = Math.sin;
+/*** META ((export #t)) */
+var sc_cos = Math.cos;
+/*** META ((export #t)) */
+var sc_tan = Math.tan;
+/*** META ((export #t)) */
+var sc_asin = Math.asin;
+/*** META ((export #t)) */
+var sc_acos = Math.acos;
+/*** META ((export #t)) */
+var sc_atan = Math.atan;
+
+/*** META ((export #t)) */
+var sc_sqrt = Math.sqrt;
+/*** META ((export #t)) */
+var sc_expt = Math.pow;
+
+// LIMITATION: we don't have complex numbers.
+// LIMITATION: the following functions are hence not implemented.
+// LIMITATION: make-rectangular, make-polar, real-part, imag-part, magnitude, angle
+// LIMITATION: 2 argument atan
+
+/*** META ((export #t)
+ (peephole (id)))
+*/
+function sc_exact2inexact(x) {
+ return x;
+}
+
+/*** META ((export #t)
+ (peephole (id)))
+*/
+function sc_inexact2exact(x) {
+ return x;
+}
+
+function sc_number2jsstring(x, radix) {
+ if (radix)
+ return x.toString(radix);
+ else
+ return x.toString();
+}
+
+function sc_jsstring2number(s, radix) {
+ if (s === "") return false;
+
+ if (radix) {
+ var t = parseInt(s, radix);
+ if (!t && t !== 0) return false;
+ // verify that each char is in range. (parseInt ignores leading
+ // white and trailing chars)
+ var allowedChars = "01234567890abcdefghijklmnopqrstuvwxyz".substring(0, radix+1);
+ if ((new RegExp("^["+allowedChars+"]*$", "i")).test(s))
+ return t;
+ else return false;
+ } else {
+ var t = +s; // does not ignore trailing chars.
+ if (!t && t !== 0) return false;
+ // simply verify that first char is not whitespace.
+ var c = s.charAt(0);
+ // if +c is 0, but the char is not "0", then we have a whitespace.
+ if (+c === 0 && c !== "0") return false;
+ return t;
+ }
+}
+
+/*** META ((export #t)
+ (type bool)
+ (peephole (not)))
+*/
+function sc_not(b) {
+ return b === false;
+}
+
+/*** META ((export #t)
+ (type bool))
+*/
+function sc_isBoolean(b) {
+ return (b === true) || (b === false);
+}
+
+function sc_Pair(car, cdr) {
+ this.car = car;
+ this.cdr = cdr;
+}
+
+sc_Pair.prototype.toString = function() {
+ return sc_toDisplayString(this);
+};
+sc_Pair.prototype.sc_toWriteOrDisplayString = function(writeOrDisplay) {
+ var current = this;
+
+ var res = "(";
+
+ while(true) {
+ res += writeOrDisplay(current.car);
+ if (sc_isPair(current.cdr)) {
+ res += " ";
+ current = current.cdr;
+ } else if (current.cdr !== null) {
+ res += " . " + writeOrDisplay(current.cdr);
+ break;
+ } else // current.cdr == null
+ break;
+ }
+
+ res += ")";
+
+ return res;
+};
+sc_Pair.prototype.sc_toDisplayString = function() {
+ return this.sc_toWriteOrDisplayString(sc_toDisplayString);
+};
+sc_Pair.prototype.sc_toWriteString = function() {
+ return this.sc_toWriteOrDisplayString(sc_toWriteString);
+};
+// sc_Pair.prototype.sc_toWriteCircleString in IO.js
+
+/*** META ((export #t)
+ (type bool)
+ (peephole (postfix " instanceof sc_Pair")))
+*/
+function sc_isPair(p) {
+ return (p instanceof sc_Pair);
+}
+
+function sc_isPairEqual(p1, p2, comp) {
+ return (comp(p1.car, p2.car) && comp(p1.cdr, p2.cdr));
+}
+
+/*** META ((export #t)
+ (peephole (hole 2 "new sc_Pair(" car ", " cdr ")")))
+*/
+function sc_cons(car, cdr) {
+ return new sc_Pair(car, cdr);
+}
+
+/*** META ((export cons*)) */
+function sc_consStar() {
+ var res = arguments[arguments.length - 1];
+ for (var i = arguments.length-2; i >= 0; i--)
+ res = new sc_Pair(arguments[i], res);
+ return res;
+}
+
+/*** META ((export #t)
+ (peephole (postfix ".car")))
+*/
+function sc_car(p) {
+ return p.car;
+}
+
+/*** META ((export #t)
+ (peephole (postfix ".cdr")))
+*/
+function sc_cdr(p) {
+ return p.cdr;
+}
+
+/*** META ((export #t)
+ (peephole (hole 2 p ".car = " val)))
+*/
+function sc_setCarBang(p, val) {
+ p.car = val;
+}
+
+/*** META ((export #t)
+ (peephole (hole 2 p ".cdr = " val)))
+*/
+function sc_setCdrBang(p, val) {
+ p.cdr = val;
+}
+
+/*** META ((export #t)
+ (peephole (postfix ".car.car")))
+*/
+function sc_caar(p) { return p.car.car; }
+/*** META ((export #t)
+ (peephole (postfix ".cdr.car")))
+*/
+function sc_cadr(p) { return p.cdr.car; }
+/*** META ((export #t)
+ (peephole (postfix ".car.cdr")))
+*/
+function sc_cdar(p) { return p.car.cdr; }
+/*** META ((export #t)
+ (peephole (postfix ".cdr.cdr")))
+*/
+function sc_cddr(p) { return p.cdr.cdr; }
+/*** META ((export #t)
+ (peephole (postfix ".car.car.car")))
+*/
+function sc_caaar(p) { return p.car.car.car; }
+/*** META ((export #t)
+ (peephole (postfix ".car.cdr.car")))
+*/
+function sc_cadar(p) { return p.car.cdr.car; }
+/*** META ((export #t)
+ (peephole (postfix ".cdr.car.car")))
+*/
+function sc_caadr(p) { return p.cdr.car.car; }
+/*** META ((export #t)
+ (peephole (postfix ".cdr.cdr.car")))
+*/
+function sc_caddr(p) { return p.cdr.cdr.car; }
+/*** META ((export #t)
+ (peephole (postfix ".car.car.cdr")))
+*/
+function sc_cdaar(p) { return p.car.car.cdr; }
+/*** META ((export #t)
+ (peephole (postfix ".cdr.car.cdr")))
+*/
+function sc_cdadr(p) { return p.cdr.car.cdr; }
+/*** META ((export #t)
+ (peephole (postfix ".car.cdr.cdr")))
+*/
+function sc_cddar(p) { return p.car.cdr.cdr; }
+/*** META ((export #t)
+ (peephole (postfix ".cdr.cdr.cdr")))
+*/
+function sc_cdddr(p) { return p.cdr.cdr.cdr; }
+/*** META ((export #t)
+ (peephole (postfix ".car.car.car.car")))
+*/
+function sc_caaaar(p) { return p.car.car.car.car; }
+/*** META ((export #t)
+ (peephole (postfix ".car.cdr.car.car")))
+*/
+function sc_caadar(p) { return p.car.cdr.car.car; }
+/*** META ((export #t)
+ (peephole (postfix ".cdr.car.car.car")))
+*/
+function sc_caaadr(p) { return p.cdr.car.car.car; }
+/*** META ((export #t)
+ (peephole (postfix ".cdr.cdr.car.car")))
+*/
+function sc_caaddr(p) { return p.cdr.cdr.car.car; }
+/*** META ((export #t)
+ (peephole (postfix ".car.car.car.cdr")))
+*/
+function sc_cdaaar(p) { return p.car.car.car.cdr; }
+/*** META ((export #t)
+ (peephole (postfix ".car.cdr.car.cdr")))
+*/
+function sc_cdadar(p) { return p.car.cdr.car.cdr; }
+/*** META ((export #t)
+ (peephole (postfix ".cdr.car.car.cdr")))
+*/
+function sc_cdaadr(p) { return p.cdr.car.car.cdr; }
+/*** META ((export #t)
+ (peephole (postfix ".cdr.cdr.car.cdr")))
+*/
+function sc_cdaddr(p) { return p.cdr.cdr.car.cdr; }
+/*** META ((export #t)
+ (peephole (postfix ".car.car.cdr.car")))
+*/
+function sc_cadaar(p) { return p.car.car.cdr.car; }
+/*** META ((export #t)
+ (peephole (postfix ".car.cdr.cdr.car")))
+*/
+function sc_caddar(p) { return p.car.cdr.cdr.car; }
+/*** META ((export #t)
+ (peephole (postfix ".cdr.car.cdr.car")))
+*/
+function sc_cadadr(p) { return p.cdr.car.cdr.car; }
+/*** META ((export #t)
+ (peephole (postfix ".cdr.cdr.cdr.car")))
+*/
+function sc_cadddr(p) { return p.cdr.cdr.cdr.car; }
+/*** META ((export #t)
+ (peephole (postfix ".car.car.cdr.cdr")))
+*/
+function sc_cddaar(p) { return p.car.car.cdr.cdr; }
+/*** META ((export #t)
+ (peephole (postfix ".car.cdr.cdr.cdr")))
+*/
+function sc_cdddar(p) { return p.car.cdr.cdr.cdr; }
+/*** META ((export #t)
+ (peephole (postfix ".cdr.car.cdr.cdr")))
+*/
+function sc_cddadr(p) { return p.cdr.car.cdr.cdr; }
+/*** META ((export #t)
+ (peephole (postfix ".cdr.cdr.cdr.cdr")))
+*/
+function sc_cddddr(p) { return p.cdr.cdr.cdr.cdr; }
+
+/*** META ((export #t)) */
+function sc_lastPair(l) {
+ if (!sc_isPair(l)) sc_error("sc_lastPair: pair expected");
+ var res = l;
+ var cdr = l.cdr;
+ while (sc_isPair(cdr)) {
+ res = cdr;
+ cdr = res.cdr;
+ }
+ return res;
+}
+
+/*** META ((export #t)
+ (type bool)
+ (peephole (postfix " === null")))
+*/
+function sc_isNull(o) {
+ return (o === null);
+}
+
+/*** META ((export #t)
+ (type bool))
+*/
+function sc_isList(o) {
+ var rabbit;
+ var turtle;
+
+ var rabbit = o;
+ var turtle = o;
+ while (true) {
+ if (rabbit === null ||
+ (rabbit instanceof sc_Pair && rabbit.cdr === null))
+ return true; // end of list
+ else if ((rabbit instanceof sc_Pair) &&
+ (rabbit.cdr instanceof sc_Pair)) {
+ rabbit = rabbit.cdr.cdr;
+ turtle = turtle.cdr;
+ if (rabbit === turtle) return false; // cycle
+ } else
+ return false; // not pair
+ }
+}
+
+/*** META ((export #t)) */
+function sc_list() {
+ var res = null;
+ var a = arguments;
+ for (var i = a.length-1; i >= 0; i--)
+ res = new sc_Pair(a[i], res);
+ return res;
+}
+
+/*** META ((export #t)) */
+function sc_iota(num, init) {
+ var res = null;
+ if (!init) init = 0;
+ for (var i = num - 1; i >= 0; i--)
+ res = new sc_Pair(i + init, res);
+ return res;
+}
+
+/*** META ((export #t)) */
+function sc_makeList(nbEls, fill) {
+ var res = null;
+ for (var i = 0; i < nbEls; i++)
+ res = new sc_Pair(fill, res);
+ return res;
+}
+
+/*** META ((export #t)) */
+function sc_length(l) {
+ var res = 0;
+ while (l !== null) {
+ res++;
+ l = l.cdr;
+ }
+ return res;
+}
+
+/*** META ((export #t)) */
+function sc_remq(o, l) {
+ var dummy = { cdr : null };
+ var tail = dummy;
+ while (l !== null) {
+ if (l.car !== o) {
+ tail.cdr = sc_cons(l.car, null);
+ tail = tail.cdr;
+ }
+ l = l.cdr;
+ }
+ return dummy.cdr;
+}
+
+/*** META ((export #t)) */
+function sc_remqBang(o, l) {
+ var dummy = { cdr : null };
+ var tail = dummy;
+ var needsAssig = true;
+ while (l !== null) {
+ if (l.car === o) {
+ needsAssig = true;
+ } else {
+ if (needsAssig) {
+ tail.cdr = l;
+ needsAssig = false;
+ }
+ tail = l;
+ }
+ l = l.cdr;
+ }
+ tail.cdr = null;
+ return dummy.cdr;
+}
+
+/*** META ((export #t)) */
+function sc_delete(o, l) {
+ var dummy = { cdr : null };
+ var tail = dummy;
+ while (l !== null) {
+ if (!sc_isEqual(l.car, o)) {
+ tail.cdr = sc_cons(l.car, null);
+ tail = tail.cdr;
+ }
+ l = l.cdr;
+ }
+ return dummy.cdr;
+}
+
+/*** META ((export #t)) */
+function sc_deleteBang(o, l) {
+ var dummy = { cdr : null };
+ var tail = dummy;
+ var needsAssig = true;
+ while (l !== null) {
+ if (sc_isEqual(l.car, o)) {
+ needsAssig = true;
+ } else {
+ if (needsAssig) {
+ tail.cdr = l;
+ needsAssig = false;
+ }
+ tail = l;
+ }
+ l = l.cdr;
+ }
+ tail.cdr = null;
+ return dummy.cdr;
+}
+
+function sc_reverseAppendBang(l1, l2) {
+ var res = l2;
+ while (l1 !== null) {
+ var tmp = res;
+ res = l1;
+ l1 = l1.cdr;
+ res.cdr = tmp;
+ }
+ return res;
+}
+
+function sc_dualAppend(l1, l2) {
+ if (l1 === null) return l2;
+ if (l2 === null) return l1;
+ var rev = sc_reverse(l1);
+ return sc_reverseAppendBang(rev, l2);
+}
+
+/*** META ((export #t)) */
+function sc_append() {
+ if (arguments.length === 0)
+ return null;
+ var res = arguments[arguments.length - 1];
+ for (var i = arguments.length - 2; i >= 0; i--)
+ res = sc_dualAppend(arguments[i], res);
+ return res;
+}
+
+function sc_dualAppendBang(l1, l2) {
+ if (l1 === null) return l2;
+ if (l2 === null) return l1;
+ var tmp = l1;
+ while (tmp.cdr !== null) tmp=tmp.cdr;
+ tmp.cdr = l2;
+ return l1;
+}
+
+/*** META ((export #t)) */
+function sc_appendBang() {
+ var res = null;
+ for (var i = 0; i < arguments.length; i++)
+ res = sc_dualAppendBang(res, arguments[i]);
+ return res;
+}
+
+/*** META ((export #t)) */
+function sc_reverse(l1) {
+ var res = null;
+ while (l1 !== null) {
+ res = sc_cons(l1.car, res);
+ l1 = l1.cdr;
+ }
+ return res;
+}
+
+/*** META ((export #t)) */
+function sc_reverseBang(l) {
+ return sc_reverseAppendBang(l, null);
+}
+
+/*** META ((export #t)) */
+function sc_listTail(l, k) {
+ var res = l;
+ for (var i = 0; i < k; i++) {
+ res = res.cdr;
+ }
+ return res;
+}
+
+/*** META ((export #t)) */
+function sc_listRef(l, k) {
+ return sc_listTail(l, k).car;
+}
+
+/* // unoptimized generic versions
+function sc_memX(o, l, comp) {
+ while (l != null) {
+ if (comp(l.car, o))
+ return l;
+ l = l.cdr;
+ }
+ return false;
+}
+function sc_memq(o, l) { return sc_memX(o, l, sc_isEq); }
+function sc_memv(o, l) { return sc_memX(o, l, sc_isEqv); }
+function sc_member(o, l) { return sc_memX(o, l, sc_isEqual); }
+*/
+
+/* optimized versions */
+/*** META ((export #t)) */
+function sc_memq(o, l) {
+ while (l !== null) {
+ if (l.car === o)
+ return l;
+ l = l.cdr;
+ }
+ return false;
+}
+/*** META ((export #t)) */
+function sc_memv(o, l) {
+ while (l !== null) {
+ if (l.car === o)
+ return l;
+ l = l.cdr;
+ }
+ return false;
+}
+/*** META ((export #t)) */
+function sc_member(o, l) {
+ while (l !== null) {
+ if (sc_isEqual(l.car,o))
+ return l;
+ l = l.cdr;
+ }
+ return false;
+}
+
+/* // generic unoptimized versions
+function sc_assX(o, al, comp) {
+ while (al != null) {
+ if (comp(al.car.car, o))
+ return al.car;
+ al = al.cdr;
+ }
+ return false;
+}
+function sc_assq(o, al) { return sc_assX(o, al, sc_isEq); }
+function sc_assv(o, al) { return sc_assX(o, al, sc_isEqv); }
+function sc_assoc(o, al) { return sc_assX(o, al, sc_isEqual); }
+*/
+// optimized versions
+/*** META ((export #t)) */
+function sc_assq(o, al) {
+ while (al !== null) {
+ if (al.car.car === o)
+ return al.car;
+ al = al.cdr;
+ }
+ return false;
+}
+/*** META ((export #t)) */
+function sc_assv(o, al) {
+ while (al !== null) {
+ if (al.car.car === o)
+ return al.car;
+ al = al.cdr;
+ }
+ return false;
+}
+/*** META ((export #t)) */
+function sc_assoc(o, al) {
+ while (al !== null) {
+ if (sc_isEqual(al.car.car, o))
+ return al.car;
+ al = al.cdr;
+ }
+ return false;
+}
+
+/* can be used for mutable strings and characters */
+function sc_isCharStringEqual(cs1, cs2) { return cs1.val === cs2.val; }
+function sc_isCharStringLess(cs1, cs2) { return cs1.val < cs2.val; }
+function sc_isCharStringGreater(cs1, cs2) { return cs1.val > cs2.val; }
+function sc_isCharStringLessEqual(cs1, cs2) { return cs1.val <= cs2.val; }
+function sc_isCharStringGreaterEqual(cs1, cs2) { return cs1.val >= cs2.val; }
+function sc_isCharStringCIEqual(cs1, cs2)
+ { return cs1.val.toLowerCase() === cs2.val.toLowerCase(); }
+function sc_isCharStringCILess(cs1, cs2)
+ { return cs1.val.toLowerCase() < cs2.val.toLowerCase(); }
+function sc_isCharStringCIGreater(cs1, cs2)
+ { return cs1.val.toLowerCase() > cs2.val.toLowerCase(); }
+function sc_isCharStringCILessEqual(cs1, cs2)
+ { return cs1.val.toLowerCase() <= cs2.val.toLowerCase(); }
+function sc_isCharStringCIGreaterEqual(cs1, cs2)
+ { return cs1.val.toLowerCase() >= cs2.val.toLowerCase(); }
+
+
+
+
+function sc_Char(c) {
+ var cached = sc_Char.lazy[c];
+ if (cached)
+ return cached;
+ this.val = c;
+ sc_Char.lazy[c] = this;
+ // add return, so FF does not complain.
+ return undefined;
+}
+sc_Char.lazy = new Object();
+// thanks to Eric
+sc_Char.char2readable = {
+ "\000": "#\\null",
+ "\007": "#\\bell",
+ "\010": "#\\backspace",
+ "\011": "#\\tab",
+ "\012": "#\\newline",
+ "\014": "#\\page",
+ "\015": "#\\return",
+ "\033": "#\\escape",
+ "\040": "#\\space",
+ "\177": "#\\delete",
+
+ /* poeticless names */
+ "\001": "#\\soh",
+ "\002": "#\\stx",
+ "\003": "#\\etx",
+ "\004": "#\\eot",
+ "\005": "#\\enq",
+ "\006": "#\\ack",
+
+ "\013": "#\\vt",
+ "\016": "#\\so",
+ "\017": "#\\si",
+
+ "\020": "#\\dle",
+ "\021": "#\\dc1",
+ "\022": "#\\dc2",
+ "\023": "#\\dc3",
+ "\024": "#\\dc4",
+ "\025": "#\\nak",
+ "\026": "#\\syn",
+ "\027": "#\\etb",
+
+ "\030": "#\\can",
+ "\031": "#\\em",
+ "\032": "#\\sub",
+ "\033": "#\\esc",
+ "\034": "#\\fs",
+ "\035": "#\\gs",
+ "\036": "#\\rs",
+ "\037": "#\\us"};
+
+sc_Char.readable2char = {
+ "null": "\000",
+ "bell": "\007",
+ "backspace": "\010",
+ "tab": "\011",
+ "newline": "\012",
+ "page": "\014",
+ "return": "\015",
+ "escape": "\033",
+ "space": "\040",
+ "delete": "\000",
+ "soh": "\001",
+ "stx": "\002",
+ "etx": "\003",
+ "eot": "\004",
+ "enq": "\005",
+ "ack": "\006",
+ "bel": "\007",
+ "bs": "\010",
+ "ht": "\011",
+ "nl": "\012",
+ "vt": "\013",
+ "np": "\014",
+ "cr": "\015",
+ "so": "\016",
+ "si": "\017",
+ "dle": "\020",
+ "dc1": "\021",
+ "dc2": "\022",
+ "dc3": "\023",
+ "dc4": "\024",
+ "nak": "\025",
+ "syn": "\026",
+ "etb": "\027",
+ "can": "\030",
+ "em": "\031",
+ "sub": "\032",
+ "esc": "\033",
+ "fs": "\034",
+ "gs": "\035",
+ "rs": "\036",
+ "us": "\037",
+ "sp": "\040",
+ "del": "\177"};
+
+sc_Char.prototype.toString = function() {
+ return this.val;
+};
+// sc_toDisplayString == toString
+sc_Char.prototype.sc_toWriteString = function() {
+ var entry = sc_Char.char2readable[this.val];
+ if (entry)
+ return entry;
+ else
+ return "#\\" + this.val;
+};
+
+/*** META ((export #t)
+ (type bool)
+ (peephole (postfix "instanceof sc_Char")))
+*/
+function sc_isChar(c) {
+ return (c instanceof sc_Char);
+}
+
+/*** META ((export char=?)
+ (type bool)
+ (peephole (hole 2 c1 ".val === " c2 ".val")))
+*/
+var sc_isCharEqual = sc_isCharStringEqual;
+/*** META ((export char<?)
+ (type bool)
+ (peephole (hole 2 c1 ".val < " c2 ".val")))
+*/
+var sc_isCharLess = sc_isCharStringLess;
+/*** META ((export char>?)
+ (type bool)
+ (peephole (hole 2 c1 ".val > " c2 ".val")))
+*/
+var sc_isCharGreater = sc_isCharStringGreater;
+/*** META ((export char<=?)
+ (type bool)
+ (peephole (hole 2 c1 ".val <= " c2 ".val")))
+*/
+var sc_isCharLessEqual = sc_isCharStringLessEqual;
+/*** META ((export char>=?)
+ (type bool)
+ (peephole (hole 2 c1 ".val >= " c2 ".val")))
+*/
+var sc_isCharGreaterEqual = sc_isCharStringGreaterEqual;
+/*** META ((export char-ci=?)
+ (type bool)
+ (peephole (hole 2 c1 ".val.toLowerCase() === " c2 ".val.toLowerCase()")))
+*/
+var sc_isCharCIEqual = sc_isCharStringCIEqual;
+/*** META ((export char-ci<?)
+ (type bool)
+ (peephole (hole 2 c1 ".val.toLowerCase() < " c2 ".val.toLowerCase()")))
+*/
+var sc_isCharCILess = sc_isCharStringCILess;
+/*** META ((export char-ci>?)
+ (type bool)
+ (peephole (hole 2 c1 ".val.toLowerCase() > " c2 ".val.toLowerCase()")))
+*/
+var sc_isCharCIGreater = sc_isCharStringCIGreater;
+/*** META ((export char-ci<=?)
+ (type bool)
+ (peephole (hole 2 c1 ".val.toLowerCase() <= " c2 ".val.toLowerCase()")))
+*/
+var sc_isCharCILessEqual = sc_isCharStringCILessEqual;
+/*** META ((export char-ci>=?)
+ (type bool)
+ (peephole (hole 2 c1 ".val.toLowerCase() >= " c2 ".val.toLowerCase()")))
+*/
+var sc_isCharCIGreaterEqual = sc_isCharStringCIGreaterEqual;
+
+var SC_NUMBER_CLASS = "0123456789";
+var SC_WHITESPACE_CLASS = ' \r\n\t\f';
+var SC_LOWER_CLASS = 'abcdefghijklmnopqrstuvwxyz';
+var SC_UPPER_CLASS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
+
+function sc_isCharOfClass(c, cl) { return (cl.indexOf(c) != -1); }
+/*** META ((export #t)
+ (type bool))
+*/
+function sc_isCharAlphabetic(c)
+ { return sc_isCharOfClass(c.val, SC_LOWER_CLASS) ||
+ sc_isCharOfClass(c.val, SC_UPPER_CLASS); }
+/*** META ((export #t)
+ (type bool)
+ (peephole (hole 1 "SC_NUMBER_CLASS.indexOf(" c ".val) != -1")))
+*/
+function sc_isCharNumeric(c)
+ { return sc_isCharOfClass(c.val, SC_NUMBER_CLASS); }
+/*** META ((export #t)
+ (type bool))
+*/
+function sc_isCharWhitespace(c) {
+ var tmp = c.val;
+ return tmp === " " || tmp === "\r" || tmp === "\n" || tmp === "\t" || tmp === "\f";
+}
+/*** META ((export #t)
+ (type bool)
+ (peephole (hole 1 "SC_UPPER_CLASS.indexOf(" c ".val) != -1")))
+*/
+function sc_isCharUpperCase(c)
+ { return sc_isCharOfClass(c.val, SC_UPPER_CLASS); }
+/*** META ((export #t)
+ (type bool)
+ (peephole (hole 1 "SC_LOWER_CLASS.indexOf(" c ".val) != -1")))
+*/
+function sc_isCharLowerCase(c)
+ { return sc_isCharOfClass(c.val, SC_LOWER_CLASS); }
+
+/*** META ((export #t)
+ (peephole (postfix ".val.charCodeAt(0)")))
+*/
+function sc_char2integer(c)
+ { return c.val.charCodeAt(0); }
+/*** META ((export #t)
+ (peephole (hole 1 "new sc_Char(String.fromCharCode(" n "))")))
+*/
+function sc_integer2char(n)
+ { return new sc_Char(String.fromCharCode(n)); }
+
+/*** META ((export #t)
+ (peephole (hole 1 "new sc_Char(" c ".val.toUpperCase())")))
+*/
+function sc_charUpcase(c)
+ { return new sc_Char(c.val.toUpperCase()); }
+/*** META ((export #t)
+ (peephole (hole 1 "new sc_Char(" c ".val.toLowerCase())")))
+*/
+function sc_charDowncase(c)
+ { return new sc_Char(c.val.toLowerCase()); }
+
+function sc_makeJSStringOfLength(k, c) {
+ var fill;
+ if (c === undefined)
+ fill = " ";
+ else
+ fill = c;
+ var res = "";
+ var len = 1;
+ // every round doubles the size of fill.
+ while (k >= len) {
+ if (k & len)
+ res = res.concat(fill);
+ fill = fill.concat(fill);
+ len *= 2;
+ }
+ return res;
+}
+
+function sc_makejsString(k, c) {
+ var fill;
+ if (c)
+ fill = c.val;
+ else
+ fill = " ";
+ return sc_makeJSStringOfLength(k, fill);
+}
+
+function sc_jsstring2list(s) {
+ var res = null;
+ for (var i = s.length - 1; i >= 0; i--)
+ res = sc_cons(new sc_Char(s.charAt(i)), res);
+ return res;
+}
+
+function sc_list2jsstring(l) {
+ var a = new Array();
+ while(l !== null) {
+ a.push(l.car.val);
+ l = l.cdr;
+ }
+ return "".concat.apply("", a);
+}
+
+var sc_Vector = Array;
+
+sc_Vector.prototype.sc_toWriteOrDisplayString = function(writeOrDisplay) {
+ if (this.length === 0) return "#()";
+
+ var res = "#(" + writeOrDisplay(this[0]);
+ for (var i = 1; i < this.length; i++)
+ res += " " + writeOrDisplay(this[i]);
+ res += ")";
+ return res;
+};
+sc_Vector.prototype.sc_toDisplayString = function() {
+ return this.sc_toWriteOrDisplayString(sc_toDisplayString);
+};
+sc_Vector.prototype.sc_toWriteString = function() {
+ return this.sc_toWriteOrDisplayString(sc_toWriteString);
+};
+
+/*** META ((export vector? array?)
+ (type bool)
+ (peephole (postfix " instanceof sc_Vector")))
+*/
+function sc_isVector(v) {
+ return (v instanceof sc_Vector);
+}
+
+// only applies to vectors
+function sc_isVectorEqual(v1, v2, comp) {
+ if (v1.length !== v2.length) return false;
+ for (var i = 0; i < v1.length; i++)
+ if (!comp(v1[i], v2[i])) return false;
+ return true;
+}
+
+/*** META ((export make-vector make-array)) */
+function sc_makeVector(size, fill) {
+ var a = new sc_Vector(size);
+ if (fill !== undefined)
+ sc_vectorFillBang(a, fill);
+ return a;
+}
+
+/*** META ((export vector array)
+ (peephole (vector)))
+*/
+function sc_vector() {
+ var a = new sc_Vector();
+ for (var i = 0; i < arguments.length; i++)
+ a.push(arguments[i]);
+ return a;
+}
+
+/*** META ((export vector-length array-length)
+ (peephole (postfix ".length")))
+*/
+function sc_vectorLength(v) {
+ return v.length;
+}
+
+/*** META ((export vector-ref array-ref)
+ (peephole (hole 2 v "[" pos "]")))
+*/
+function sc_vectorRef(v, pos) {
+ return v[pos];
+}
+
+/*** META ((export vector-set! array-set!)
+ (peephole (hole 3 v "[" pos "] = " val)))
+*/
+function sc_vectorSetBang(v, pos, val) {
+ v[pos] = val;
+}
+
+/*** META ((export vector->list array->list)) */
+function sc_vector2list(a) {
+ var res = null;
+ for (var i = a.length-1; i >= 0; i--)
+ res = sc_cons(a[i], res);
+ return res;
+}
+
+/*** META ((export list->vector list->array)) */
+function sc_list2vector(l) {
+ var a = new sc_Vector();
+ while(l !== null) {
+ a.push(l.car);
+ l = l.cdr;
+ }
+ return a;
+}
+
+/*** META ((export vector-fill! array-fill!)) */
+function sc_vectorFillBang(a, fill) {
+ for (var i = 0; i < a.length; i++)
+ a[i] = fill;
+}
+
+
+/*** META ((export #t)) */
+function sc_copyVector(a, len) {
+ if (len <= a.length)
+ return a.slice(0, len);
+ else {
+ var tmp = a.concat();
+ tmp.length = len;
+ return tmp;
+ }
+}
+
+/*** META ((export #t)
+ (peephole (hole 3 a ".slice(" start "," end ")")))
+*/
+function sc_vectorCopy(a, start, end) {
+ return a.slice(start, end);
+}
+
+/*** META ((export #t)) */
+function sc_vectorCopyBang(target, tstart, source, sstart, send) {
+ if (!sstart) sstart = 0;
+ if (!send) send = source.length;
+
+ // if target == source we don't want to overwrite not yet copied elements.
+ if (tstart <= sstart) {
+ for (var i = tstart, j = sstart; j < send; i++, j++) {
+ target[i] = source[j];
+ }
+ } else {
+ var diff = send - sstart;
+ for (var i = tstart + diff - 1, j = send - 1;
+ j >= sstart;
+ i--, j--) {
+ target[i] = source[j];
+ }
+ }
+ return target;
+}
+
+/*** META ((export #t)
+ (type bool)
+ (peephole (hole 1 "typeof " o " === 'function'")))
+*/
+function sc_isProcedure(o) {
+ return (typeof o === "function");
+}
+
+/*** META ((export #t)) */
+function sc_apply(proc) {
+ var args = new Array();
+ // first part of arguments are not in list-form.
+ for (var i = 1; i < arguments.length - 1; i++)
+ args.push(arguments[i]);
+ var l = arguments[arguments.length - 1];
+ while (l !== null) {
+ args.push(l.car);
+ l = l.cdr;
+ }
+ return proc.apply(null, args);
+}
+
+/*** META ((export #t)) */
+function sc_map(proc, l1) {
+ if (l1 === undefined)
+ return null;
+ // else
+ var nbApplyArgs = arguments.length - 1;
+ var applyArgs = new Array(nbApplyArgs);
+ var revres = null;
+ while (l1 !== null) {
+ for (var i = 0; i < nbApplyArgs; i++) {
+ applyArgs[i] = arguments[i + 1].car;
+ arguments[i + 1] = arguments[i + 1].cdr;
+ }
+ revres = sc_cons(proc.apply(null, applyArgs), revres);
+ }
+ return sc_reverseAppendBang(revres, null);
+}
+
+/*** META ((export #t)) */
+function sc_mapBang(proc, l1) {
+ if (l1 === undefined)
+ return null;
+ // else
+ var l1_orig = l1;
+ var nbApplyArgs = arguments.length - 1;
+ var applyArgs = new Array(nbApplyArgs);
+ while (l1 !== null) {
+ var tmp = l1;
+ for (var i = 0; i < nbApplyArgs; i++) {
+ applyArgs[i] = arguments[i + 1].car;
+ arguments[i + 1] = arguments[i + 1].cdr;
+ }
+ tmp.car = proc.apply(null, applyArgs);
+ }
+ return l1_orig;
+}
+
+/*** META ((export #t)) */
+function sc_forEach(proc, l1) {
+ if (l1 === undefined)
+ return undefined;
+ // else
+ var nbApplyArgs = arguments.length - 1;
+ var applyArgs = new Array(nbApplyArgs);
+ while (l1 !== null) {
+ for (var i = 0; i < nbApplyArgs; i++) {
+ applyArgs[i] = arguments[i + 1].car;
+ arguments[i + 1] = arguments[i + 1].cdr;
+ }
+ proc.apply(null, applyArgs);
+ }
+ // add return so FF does not complain.
+ return undefined;
+}
+
+/*** META ((export #t)) */
+function sc_filter(proc, l1) {
+ var dummy = { cdr : null };
+ var tail = dummy;
+ while (l1 !== null) {
+ if (proc(l1.car) !== false) {
+ tail.cdr = sc_cons(l1.car, null);
+ tail = tail.cdr;
+ }
+ l1 = l1.cdr;
+ }
+ return dummy.cdr;
+}
+
+/*** META ((export #t)) */
+function sc_filterBang(proc, l1) {
+ var head = sc_cons("dummy", l1);
+ var it = head;
+ var next = l1;
+ while (next !== null) {
+ if (proc(next.car) !== false) {
+ it.cdr = next
+ it = next;
+ }
+ next = next.cdr;
+ }
+ it.cdr = null;
+ return head.cdr;
+}
+
+function sc_filterMap1(proc, l1) {
+ var revres = null;
+ while (l1 !== null) {
+ var tmp = proc(l1.car)
+ if (tmp !== false) revres = sc_cons(tmp, revres);
+ l1 = l1.cdr;
+ }
+ return sc_reverseAppendBang(revres, null);
+}
+function sc_filterMap2(proc, l1, l2) {
+ var revres = null;
+ while (l1 !== null) {
+ var tmp = proc(l1.car, l2.car);
+ if(tmp !== false) revres = sc_cons(tmp, revres);
+ l1 = l1.cdr;
+ l2 = l2.cdr
+ }
+ return sc_reverseAppendBang(revres, null);
+}
+
+/*** META ((export #t)) */
+function sc_filterMap(proc, l1, l2, l3) {
+ if (l2 === undefined)
+ return sc_filterMap1(proc, l1);
+ else if (l3 === undefined)
+ return sc_filterMap2(proc, l1, l2);
+ // else
+ var nbApplyArgs = arguments.length - 1;
+ var applyArgs = new Array(nbApplyArgs);
+ var revres = null;
+ while (l1 !== null) {
+ for (var i = 0; i < nbApplyArgs; i++) {
+ applyArgs[i] = arguments[i + 1].car;
+ arguments[i + 1] = arguments[i + 1].cdr;
+ }
+ var tmp = proc.apply(null, applyArgs);
+ if(tmp !== false) revres = sc_cons(tmp, revres);
+ }
+ return sc_reverseAppendBang(revres, null);
+}
+
+/*** META ((export #t)) */
+function sc_any(proc, l) {
+ var revres = null;
+ while (l !== null) {
+ var tmp = proc(l.car);
+ if(tmp !== false) return tmp;
+ l = l.cdr;
+ }
+ return false;
+}
+
+/*** META ((export any?)
+ (peephole (hole 2 "sc_any(" proc "," l ") !== false")))
+*/
+function sc_anyPred(proc, l) {
+ return sc_any(proc, l)!== false;
+}
+
+/*** META ((export #t)) */
+function sc_every(proc, l) {
+ var revres = null;
+ var tmp = true;
+ while (l !== null) {
+ tmp = proc(l.car);
+ if (tmp === false) return false;
+ l = l.cdr;
+ }
+ return tmp;
+}
+
+/*** META ((export every?)
+ (peephole (hole 2 "sc_every(" proc "," l ") !== false")))
+*/
+function sc_everyPred(proc, l) {
+ var tmp = sc_every(proc, l);
+ if (tmp !== false) return true;
+ return false;
+}
+
+/*** META ((export #t)
+ (peephole (postfix "()")))
+*/
+function sc_force(o) {
+ return o();
+}
+
+/*** META ((export #t)) */
+function sc_makePromise(proc) {
+ var isResultReady = false;
+ var result = undefined;
+ return function() {
+ if (!isResultReady) {
+ var tmp = proc();
+ if (!isResultReady) {
+ isResultReady = true;
+ result = tmp;
+ }
+ }
+ return result;
+ };
+}
+
+function sc_Values(values) {
+ this.values = values;
+}
+
+/*** META ((export #t)
+ (peephole (values)))
+*/
+function sc_values() {
+ if (arguments.length === 1)
+ return arguments[0];
+ else
+ return new sc_Values(arguments);
+}
+
+/*** META ((export #t)) */
+function sc_callWithValues(producer, consumer) {
+ var produced = producer();
+ if (produced instanceof sc_Values)
+ return consumer.apply(null, produced.values);
+ else
+ return consumer(produced);
+}
+
+/*** META ((export #t)) */
+function sc_dynamicWind(before, thunk, after) {
+ before();
+ try {
+ var res = thunk();
+ return res;
+ } finally {
+ after();
+ }
+}
+
+
+// TODO: eval/scheme-report-environment/null-environment/interaction-environment
+
+// LIMITATION: 'load' doesn't exist without files.
+// LIMITATION: transcript-on/transcript-off doesn't exist without files.
+
+
+function sc_Struct(name) {
+ this.name = name;
+}
+sc_Struct.prototype.sc_toDisplayString = function() {
+ return "#<struct" + sc_hash(this) + ">";
+};
+sc_Struct.prototype.sc_toWriteString = sc_Struct.prototype.sc_toDisplayString;
+
+/*** META ((export #t)
+ (peephole (hole 1 "new sc_Struct(" name ")")))
+*/
+function sc_makeStruct(name) {
+ return new sc_Struct(name);
+}
+
+/*** META ((export #t)
+ (type bool)
+ (peephole (postfix " instanceof sc_Struct")))
+*/
+function sc_isStruct(o) {
+ return (o instanceof sc_Struct);
+}
+
+/*** META ((export #t)
+ (type bool)
+ (peephole (hole 2 "(" 1 " instanceof sc_Struct) && ( " 1 ".name === " 0 ")")))
+*/
+function sc_isStructNamed(name, s) {
+ return ((s instanceof sc_Struct) && (s.name === name));
+}
+
+/*** META ((export struct-field)
+ (peephole (hole 3 0 "[" 2 "]")))
+*/
+function sc_getStructField(s, name, field) {
+ return s[field];
+}
+
+/*** META ((export struct-field-set!)
+ (peephole (hole 4 0 "[" 2 "] = " 3)))
+*/
+function sc_setStructFieldBang(s, name, field, val) {
+ s[field] = val;
+}
+
+/*** META ((export #t)
+ (peephole (prefix "~")))
+*/
+function sc_bitNot(x) {
+ return ~x;
+}
+
+/*** META ((export #t)
+ (peephole (infix 2 2 "&")))
+*/
+function sc_bitAnd(x, y) {
+ return x & y;
+}
+
+/*** META ((export #t)
+ (peephole (infix 2 2 "|")))
+*/
+function sc_bitOr(x, y) {
+ return x | y;
+}
+
+/*** META ((export #t)
+ (peephole (infix 2 2 "^")))
+*/
+function sc_bitXor(x, y) {
+ return x ^ y;
+}
+
+/*** META ((export #t)
+ (peephole (infix 2 2 "<<")))
+*/
+function sc_bitLsh(x, y) {
+ return x << y;
+}
+
+/*** META ((export #t)
+ (peephole (infix 2 2 ">>")))
+*/
+function sc_bitRsh(x, y) {
+ return x >> y;
+}
+
+/*** META ((export #t)
+ (peephole (infix 2 2 ">>>")))
+*/
+function sc_bitUrsh(x, y) {
+ return x >>> y;
+}
+
+/*** META ((export js-field js-property)
+ (peephole (hole 2 o "[" field "]")))
+*/
+function sc_jsField(o, field) {
+ return o[field];
+}
+
+/*** META ((export js-field-set! js-property-set!)
+ (peephole (hole 3 o "[" field "] = " val)))
+*/
+function sc_setJsFieldBang(o, field, val) {
+ return o[field] = val;
+}
+
+/*** META ((export js-field-delete! js-property-delete!)
+ (peephole (hole 2 "delete" o "[" field "]")))
+*/
+function sc_deleteJsFieldBang(o, field) {
+ delete o[field];
+}
+
+/*** META ((export #t)
+ (peephole (jsCall)))
+*/
+function sc_jsCall(o, fun) {
+ var args = new Array();
+ for (var i = 2; i < arguments.length; i++)
+ args[i-2] = arguments[i];
+ return fun.apply(o, args);
+}
+
+/*** META ((export #t)
+ (peephole (jsMethodCall)))
+*/
+function sc_jsMethodCall(o, field) {
+ var args = new Array();
+ for (var i = 2; i < arguments.length; i++)
+ args[i-2] = arguments[i];
+ return o[field].apply(o, args);
+}
+
+/*** META ((export new js-new)
+ (peephole (jsNew)))
+*/
+function sc_jsNew(c) {
+ var evalStr = "new c(";
+ evalStr +=arguments.length > 1? "arguments[1]": "";
+ for (var i = 2; i < arguments.length; i++)
+ evalStr += ", arguments[" + i + "]";
+ evalStr +=")";
+ return eval(evalStr);
+}
+
+// ======================== RegExp ====================
+/*** META ((export #t)) */
+function sc_pregexp(re) {
+ return new RegExp(sc_string2jsstring(re));
+}
+
+/*** META ((export #t)) */
+function sc_pregexpMatch(re, s) {
+ var reg = (re instanceof RegExp) ? re : sc_pregexp(re);
+ var tmp = reg.exec(sc_string2jsstring(s));
+
+ if (tmp == null) return false;
+
+ var res = null;
+ for (var i = tmp.length-1; i >= 0; i--) {
+ if (tmp[i] !== null) {
+ res = sc_cons(sc_jsstring2string(tmp[i]), res);
+ } else {
+ res = sc_cons(false, res);
+ }
+ }
+ return res;
+}
+
+/*** META ((export #t)) */
+function sc_pregexpReplace(re, s1, s2) {
+ var reg;
+ var jss1 = sc_string2jsstring(s1);
+ var jss2 = sc_string2jsstring(s2);
+
+ if (re instanceof RegExp) {
+ if (re.global)
+ reg = re;
+ else
+ reg = new RegExp(re.source);
+ } else {
+ reg = new RegExp(sc_string2jsstring(re));
+ }
+
+ return jss1.replace(reg, jss2);
+}
+
+/*** META ((export pregexp-replace*)) */
+function sc_pregexpReplaceAll(re, s1, s2) {
+ var reg;
+ var jss1 = sc_string2jsstring(s1);
+ var jss2 = sc_string2jsstring(s2);
+
+ if (re instanceof RegExp) {
+ if (re.global)
+ reg = re;
+ else
+ reg = new RegExp(re.source, "g");
+ } else {
+ reg = new RegExp(sc_string2jsstring(re), "g");
+ }
+
+ return jss1.replace(reg, jss2);
+}
+
+/*** META ((export #t)) */
+function sc_pregexpSplit(re, s) {
+ var reg = ((re instanceof RegExp) ?
+ re :
+ new RegExp(sc_string2jsstring(re)));
+ var jss = sc_string2jsstring(s);
+ var tmp = jss.split(reg);
+
+ if (tmp == null) return false;
+
+ return sc_vector2list(tmp);
+}
+
+
+/* =========================================================================== */
+/* Other library stuff */
+/* =========================================================================== */
+
+/*** META ((export #t)
+ (peephole (hole 1 "Math.floor(Math.random()*" 'n ")")))
+*/
+function sc_random(n) {
+ return Math.floor(Math.random()*n);
+}
+
+/*** META ((export current-date)
+ (peephole (hole 0 "new Date()")))
+*/
+function sc_currentDate() {
+ return new Date();
+}
+
+function sc_Hashtable() {
+}
+sc_Hashtable.prototype.toString = function() {
+ return "#{%hashtable}";
+};
+// sc_toWriteString == sc_toDisplayString == toString
+
+function sc_HashtableElement(key, val) {
+ this.key = key;
+ this.val = val;
+}
+
+/*** META ((export #t)
+ (peephole (hole 0 "new sc_Hashtable()")))
+*/
+function sc_makeHashtable() {
+ return new sc_Hashtable();
+}
+
+/*** META ((export #t)) */
+function sc_hashtablePutBang(ht, key, val) {
+ var hash = sc_hash(key);
+ ht[hash] = new sc_HashtableElement(key, val);
+}
+
+/*** META ((export #t)) */
+function sc_hashtableGet(ht, key) {
+ var hash = sc_hash(key);
+ if (hash in ht)
+ return ht[hash].val;
+ else
+ return false;
+}
+
+/*** META ((export #t)) */
+function sc_hashtableForEach(ht, f) {
+ for (var v in ht) {
+ if (ht[v] instanceof sc_HashtableElement)
+ f(ht[v].key, ht[v].val);
+ }
+}
+
+/*** META ((export hashtable-contains?)
+ (peephole (hole 2 "sc_hash(" 1 ") in " 0)))
+*/
+function sc_hashtableContains(ht, key) {
+ var hash = sc_hash(key);
+ if (hash in ht)
+ return true;
+ else
+ return false;
+}
+
+var SC_HASH_COUNTER = 0;
+
+function sc_hash(o) {
+ if (o === null)
+ return "null";
+ else if (o === undefined)
+ return "undefined";
+ else if (o === true)
+ return "true";
+ else if (o === false)
+ return "false";
+ else if (typeof o === "number")
+ return "num-" + o;
+ else if (typeof o === "string")
+ return "jsstr-" + o;
+ else if (o.sc_getHash)
+ return o.sc_getHash();
+ else
+ return sc_counterHash.call(o);
+}
+function sc_counterHash() {
+ if (!this.sc_hash) {
+ this.sc_hash = "hash-" + SC_HASH_COUNTER;
+ SC_HASH_COUNTER++;
+ }
+ return this.sc_hash;
+}
+
+function sc_Trampoline(args, maxTailCalls) {
+ this['__trampoline return__'] = true;
+ this.args = args;
+ this.MAX_TAIL_CALLs = maxTailCalls;
+}
+// TODO: call/cc stuff
+sc_Trampoline.prototype.restart = function() {
+ var o = this;
+ while (true) {
+ // set both globals.
+ SC_TAIL_OBJECT.calls = o.MAX_TAIL_CALLs-1;
+ var fun = o.args.callee;
+ var res = fun.apply(SC_TAIL_OBJECT, o.args);
+ if (res instanceof sc_Trampoline)
+ o = res;
+ else
+ return res;
+ }
+}
+
+/*** META ((export bind-exit-lambda)) */
+function sc_bindExitLambda(proc) {
+ var escape_obj = new sc_BindExitException();
+ var escape = function(res) {
+ escape_obj.res = res;
+ throw escape_obj;
+ };
+ try {
+ return proc(escape);
+ } catch(e) {
+ if (e === escape_obj) {
+ return e.res;
+ }
+ throw e;
+ }
+}
+function sc_BindExitException() {
+ this._internalException = true;
+}
+
+var SC_SCM2JS_GLOBALS = new Object();
+
+// default tail-call depth.
+// normally the program should set it again. but just in case...
+var SC_TAIL_OBJECT = new Object();
+SC_SCM2JS_GLOBALS.TAIL_OBJECT = SC_TAIL_OBJECT;
+// ======================== I/O =======================
+
+/*------------------------------------------------------------------*/
+
+function sc_EOF() {
+}
+var SC_EOF_OBJECT = new sc_EOF();
+
+function sc_Port() {
+}
+
+/* --------------- Input ports -------------------------------------*/
+
+function sc_InputPort() {
+}
+sc_InputPort.prototype = new sc_Port();
+
+sc_InputPort.prototype.peekChar = function() {
+ if (!("peeked" in this))
+ this.peeked = this.getNextChar();
+ return this.peeked;
+}
+sc_InputPort.prototype.readChar = function() {
+ var tmp = this.peekChar();
+ delete this.peeked;
+ return tmp;
+}
+sc_InputPort.prototype.isCharReady = function() {
+ return true;
+}
+sc_InputPort.prototype.close = function() {
+ // do nothing
+}
+
+/* .............. String port ..........................*/
+function sc_ErrorInputPort() {
+};
+sc_ErrorInputPort.prototype = new sc_InputPort();
+sc_ErrorInputPort.prototype.getNextChar = function() {
+ throw "can't read from error-port.";
+};
+sc_ErrorInputPort.prototype.isCharReady = function() {
+ return false;
+};
+
+
+/* .............. String port ..........................*/
+
+function sc_StringInputPort(jsStr) {
+ // we are going to do some charAts on the str.
+ // instead of recreating all the time a String-object, we
+ // create one in the beginning. (not sure, if this is really an optim)
+ this.str = new String(jsStr);
+ this.pos = 0;
+}
+sc_StringInputPort.prototype = new sc_InputPort();
+sc_StringInputPort.prototype.getNextChar = function() {
+ if (this.pos >= this.str.length)
+ return SC_EOF_OBJECT;
+ return this.str.charAt(this.pos++);
+};
+
+/* ------------- Read and other lib-funs -------------------------------*/
+function sc_Token(type, val, pos) {
+ this.type = type;
+ this.val = val;
+ this.pos = pos;
+}
+sc_Token.EOF = 0/*EOF*/;
+sc_Token.OPEN_PAR = 1/*OPEN_PAR*/;
+sc_Token.CLOSE_PAR = 2/*CLOSE_PAR*/;
+sc_Token.OPEN_BRACE = 3/*OPEN_BRACE*/;
+sc_Token.CLOSE_BRACE = 4/*CLOSE_BRACE*/;
+sc_Token.OPEN_BRACKET = 5/*OPEN_BRACKET*/;
+sc_Token.CLOSE_BRACKET = 6/*CLOSE_BRACKET*/;
+sc_Token.WHITESPACE = 7/*WHITESPACE*/;
+sc_Token.QUOTE = 8/*QUOTE*/;
+sc_Token.ID = 9/*ID*/;
+sc_Token.DOT = 10/*DOT*/;
+sc_Token.STRING = 11/*STRING*/;
+sc_Token.NUMBER = 12/*NUMBER*/;
+sc_Token.ERROR = 13/*ERROR*/;
+sc_Token.VECTOR_BEGIN = 14/*VECTOR_BEGIN*/;
+sc_Token.TRUE = 15/*TRUE*/;
+sc_Token.FALSE = 16/*FALSE*/;
+sc_Token.UNSPECIFIED = 17/*UNSPECIFIED*/;
+sc_Token.REFERENCE = 18/*REFERENCE*/;
+sc_Token.STORE = 19/*STORE*/;
+sc_Token.CHAR = 20/*CHAR*/;
+
+var SC_ID_CLASS = SC_LOWER_CLASS + SC_UPPER_CLASS + "!$%*+-./:<=>?@^_~";
+function sc_Tokenizer(port) {
+ this.port = port;
+}
+sc_Tokenizer.prototype.peekToken = function() {
+ if (this.peeked)
+ return this.peeked;
+ var newToken = this.nextToken();
+ this.peeked = newToken;
+ return newToken;
+};
+sc_Tokenizer.prototype.readToken = function() {
+ var tmp = this.peekToken();
+ delete this.peeked;
+ return tmp;
+};
+sc_Tokenizer.prototype.nextToken = function() {
+ var port = this.port;
+
+ function isNumberChar(c) {
+ return (c >= "0" && c <= "9");
+ };
+ function isIdOrNumberChar(c) {
+ return SC_ID_CLASS.indexOf(c) != -1 || // ID-char
+ (c >= "0" && c <= "9");
+ }
+ function isWhitespace(c) {
+ return c === " " || c === "\r" || c === "\n" || c === "\t" || c === "\f";
+ };
+ function isWhitespaceOrEOF(c) {
+ return isWhitespace(c) || c === SC_EOF_OBJECT;
+ };
+
+ function readString() {
+ res = "";
+ while (true) {
+ var c = port.readChar();
+ switch (c) {
+ case '"':
+ return new sc_Token(11/*STRING*/, res);
+ case "\\":
+ var tmp = port.readChar();
+ switch (tmp) {
+ case '0': res += "\0"; break;
+ case 'a': res += "\a"; break;
+ case 'b': res += "\b"; break;
+ case 'f': res += "\f"; break;
+ case 'n': res += "\n"; break;
+ case 'r': res += "\r"; break;
+ case 't': res += "\t"; break;
+ case 'v': res += "\v"; break;
+ case '"': res += '"'; break;
+ case '\\': res += '\\'; break;
+ case 'x':
+ /* hexa-number */
+ var nb = 0;
+ while (true) {
+ var hexC = port.peekChar();
+ if (hexC >= '0' && hexC <= '9') {
+ port.readChar();
+ nb = nb * 16 + hexC.charCodeAt(0) - '0'.charCodeAt(0);
+ } else if (hexC >= 'a' && hexC <= 'f') {
+ port.readChar();
+ nb = nb * 16 + hexC.charCodeAt(0) - 'a'.charCodeAt(0);
+ } else if (hexC >= 'A' && hexC <= 'F') {
+ port.readChar();
+ nb = nb * 16 + hexC.charCodeAt(0) - 'A'.charCodeAt(0);
+ } else {
+ // next char isn't part of hex.
+ res += String.fromCharCode(nb);
+ break;
+ }
+ }
+ break;
+ default:
+ if (tmp === SC_EOF_OBJECT) {
+ return new sc_Token(13/*ERROR*/, "unclosed string-literal" + res);
+ }
+ res += tmp;
+ }
+ break;
+ default:
+ if (c === SC_EOF_OBJECT) {
+ return new sc_Token(13/*ERROR*/, "unclosed string-literal" + res);
+ }
+ res += c;
+ }
+ }
+ };
+ function readIdOrNumber(firstChar) {
+ var res = firstChar;
+ while (isIdOrNumberChar(port.peekChar()))
+ res += port.readChar();
+ if (isNaN(res))
+ return new sc_Token(9/*ID*/, res);
+ else
+ return new sc_Token(12/*NUMBER*/, res - 0);
+ };
+
+ function skipWhitespaceAndComments() {
+ var done = false;
+ while (!done) {
+ done = true;
+ while (isWhitespace(port.peekChar()))
+ port.readChar();
+ if (port.peekChar() === ';') {
+ port.readChar();
+ done = false;
+ while (true) {
+ curChar = port.readChar();
+ if (curChar === SC_EOF_OBJECT ||
+ curChar === '\n')
+ break;
+ }
+ }
+ }
+ };
+
+ function readDot() {
+ if (isWhitespace(port.peekChar()))
+ return new sc_Token(10/*DOT*/);
+ else
+ return readIdOrNumber(".");
+ };
+
+ function readSharp() {
+ var c = port.readChar();
+ if (isWhitespace(c))
+ return new sc_Token(13/*ERROR*/, "bad #-pattern0.");
+
+ // reference
+ if (isNumberChar(c)) {
+ var nb = c - 0;
+ while (isNumberChar(port.peekChar()))
+ nb = nb*10 + (port.readChar() - 0);
+ switch (port.readChar()) {
+ case '#':
+ return new sc_Token(18/*REFERENCE*/, nb);
+ case '=':
+ return new sc_Token(19/*STORE*/, nb);
+ default:
+ return new sc_Token(13/*ERROR*/, "bad #-pattern1." + nb);
+ }
+ }
+
+ if (c === "(")
+ return new sc_Token(14/*VECTOR_BEGIN*/);
+
+ if (c === "\\") { // character
+ var tmp = ""
+ while (!isWhitespaceOrEOF(port.peekChar()))
+ tmp += port.readChar();
+ switch (tmp.length) {
+ case 0: // it's escaping a whitespace char:
+ if (sc_isEOFObject(port.peekChar))
+ return new sc_Token(13/*ERROR*/, "bad #-pattern2.");
+ else
+ return new sc_Token(20/*CHAR*/, port.readChar());
+ case 1:
+ return new sc_Token(20/*CHAR*/, tmp);
+ default:
+ var entry = sc_Char.readable2char[tmp.toLowerCase()];
+ if (entry)
+ return new sc_Token(20/*CHAR*/, entry);
+ else
+ return new sc_Token(13/*ERROR*/, "unknown character description: #\\" + tmp);
+ }
+ }
+
+ // some constants (#t, #f, #unspecified)
+ var res;
+ var needing;
+ switch (c) {
+ case 't': res = new sc_Token(15/*TRUE*/, true); needing = ""; break;
+ case 'f': res = new sc_Token(16/*FALSE*/, false); needing = ""; break;
+ case 'u': res = new sc_Token(17/*UNSPECIFIED*/, undefined); needing = "nspecified"; break;
+ default:
+ return new sc_Token(13/*ERROR*/, "bad #-pattern3: " + c);
+ }
+ while(true) {
+ c = port.peekChar();
+ if ((isWhitespaceOrEOF(c) || c === ')') &&
+ needing == "")
+ return res;
+ else if (isWhitespace(c) || needing == "")
+ return new sc_Token(13/*ERROR*/, "bad #-pattern4 " + c + " " + needing);
+ else if (needing.charAt(0) == c) {
+ port.readChar(); // consume
+ needing = needing.slice(1);
+ } else
+ return new sc_Token(13/*ERROR*/, "bad #-pattern5");
+ }
+
+ };
+
+ skipWhitespaceAndComments();
+ var curChar = port.readChar();
+ if (curChar === SC_EOF_OBJECT)
+ return new sc_Token(0/*EOF*/, curChar);
+ switch (curChar)
+ {
+ case " ":
+ case "\n":
+ case "\t":
+ return readWhitespace();
+ case "(":
+ return new sc_Token(1/*OPEN_PAR*/);
+ case ")":
+ return new sc_Token(2/*CLOSE_PAR*/);
+ case "{":
+ return new sc_Token(3/*OPEN_BRACE*/);
+ case "}":
+ return new sc_Token(4/*CLOSE_BRACE*/);
+ case "[":
+ return new sc_Token(5/*OPEN_BRACKET*/);
+ case "]":
+ return new sc_Token(6/*CLOSE_BRACKET*/);
+ case "'":
+ return new sc_Token(8/*QUOTE*/);
+ case "#":
+ return readSharp();
+ case ".":
+ return readDot();
+ case '"':
+ return readString();
+ default:
+ if (isIdOrNumberChar(curChar))
+ return readIdOrNumber(curChar);
+ throw "unexpected character: " + curChar;
+ }
+};
+
+function sc_Reader(tokenizer) {
+ this.tokenizer = tokenizer;
+ this.backref = new Array();
+}
+sc_Reader.prototype.read = function() {
+ function readList(listBeginType) {
+ function matchesPeer(open, close) {
+ return open === 1/*OPEN_PAR*/ && close === 2/*CLOSE_PAR*/
+ || open === 3/*OPEN_BRACE*/ && close === 4/*CLOSE_BRACE*/
+ || open === 5/*OPEN_BRACKET*/ && close === 6/*CLOSE_BRACKET*/;
+ };
+ var res = null;
+
+ while (true) {
+ var token = tokenizer.peekToken();
+
+ switch (token.type) {
+ case 2/*CLOSE_PAR*/:
+ case 4/*CLOSE_BRACE*/:
+ case 6/*CLOSE_BRACKET*/:
+ if (matchesPeer(listBeginType, token.type)) {
+ tokenizer.readToken(); // consume token
+ return sc_reverseBang(res);
+ } else
+ throw "closing par doesn't match: " + listBeginType
+ + " " + listEndType;
+
+ case 0/*EOF*/:
+ throw "unexpected end of file";
+
+ case 10/*DOT*/:
+ tokenizer.readToken(); // consume token
+ var cdr = this.read();
+ var par = tokenizer.readToken();
+ if (!matchesPeer(listBeginType, par.type))
+ throw "closing par doesn't match: " + listBeginType
+ + " " + par.type;
+ else
+ return sc_reverseAppendBang(res, cdr);
+
+
+ default:
+ res = sc_cons(this.read(), res);
+ }
+ }
+ };
+ function readQuote() {
+ return sc_cons("quote", sc_cons(this.read(), null));
+ };
+ function readVector() {
+ // opening-parenthesis is already consumed
+ var a = new Array();
+ while (true) {
+ var token = tokenizer.peekToken();
+ switch (token.type) {
+ case 2/*CLOSE_PAR*/:
+ tokenizer.readToken();
+ return a;
+
+ default:
+ a.push(this.read());
+ }
+ }
+ };
+
+ function storeRefence(nb) {
+ var tmp = this.read();
+ this.backref[nb] = tmp;
+ return tmp;
+ };
+
+ function readReference(nb) {
+ if (nb in this.backref)
+ return this.backref[nb];
+ else
+ throw "bad reference: " + nb;
+ };
+
+ var tokenizer = this.tokenizer;
+
+ var token = tokenizer.readToken();
+
+ // handle error
+ if (token.type === 13/*ERROR*/)
+ throw token.val;
+
+ switch (token.type) {
+ case 1/*OPEN_PAR*/:
+ case 3/*OPEN_BRACE*/:
+ case 5/*OPEN_BRACKET*/:
+ return readList.call(this, token.type);
+ case 8/*QUOTE*/:
+ return readQuote.call(this);
+ case 11/*STRING*/:
+ return sc_jsstring2string(token.val);
+ case 20/*CHAR*/:
+ return new sc_Char(token.val);
+ case 14/*VECTOR_BEGIN*/:
+ return readVector.call(this);
+ case 18/*REFERENCE*/:
+ return readReference.call(this, token.val);
+ case 19/*STORE*/:
+ return storeRefence.call(this, token.val);
+ case 9/*ID*/:
+ return sc_jsstring2symbol(token.val);
+ case 0/*EOF*/:
+ case 12/*NUMBER*/:
+ case 15/*TRUE*/:
+ case 16/*FALSE*/:
+ case 17/*UNSPECIFIED*/:
+ return token.val;
+ default:
+ throw "unexpected token " + token.type + " " + token.val;
+ }
+};
+
+/*** META ((export #t)) */
+function sc_read(port) {
+ if (port === undefined) // we assume the port hasn't been given.
+ port = SC_DEFAULT_IN; // THREAD: shared var...
+ var reader = new sc_Reader(new sc_Tokenizer(port));
+ return reader.read();
+}
+/*** META ((export #t)) */
+function sc_readChar(port) {
+ if (port === undefined) // we assume the port hasn't been given.
+ port = SC_DEFAULT_IN; // THREAD: shared var...
+ var t = port.readChar();
+ return t === SC_EOF_OBJECT? t: new sc_Char(t);
+}
+/*** META ((export #t)) */
+function sc_peekChar(port) {
+ if (port === undefined) // we assume the port hasn't been given.
+ port = SC_DEFAULT_IN; // THREAD: shared var...
+ var t = port.peekChar();
+ return t === SC_EOF_OBJECT? t: new sc_Char(t);
+}
+/*** META ((export #t)
+ (type bool))
+*/
+function sc_isCharReady(port) {
+ if (port === undefined) // we assume the port hasn't been given.
+ port = SC_DEFAULT_IN; // THREAD: shared var...
+ return port.isCharReady();
+}
+/*** META ((export #t)
+ (peephole (postfix ".close()")))
+*/
+function sc_closeInputPort(p) {
+ return p.close();
+}
+
+/*** META ((export #t)
+ (type bool)
+ (peephole (postfix " instanceof sc_InputPort")))
+*/
+function sc_isInputPort(o) {
+ return (o instanceof sc_InputPort);
+}
+
+/*** META ((export eof-object?)
+ (type bool)
+ (peephole (postfix " === SC_EOF_OBJECT")))
+*/
+function sc_isEOFObject(o) {
+ return o === SC_EOF_OBJECT;
+}
+
+/*** META ((export #t)
+ (peephole (hole 0 "SC_DEFAULT_IN")))
+*/
+function sc_currentInputPort() {
+ return SC_DEFAULT_IN;
+}
+
+/* ------------ file operations are not supported -----------*/
+/*** META ((export #t)) */
+function sc_callWithInputFile(s, proc) {
+ throw "can't open " + s;
+}
+
+/*** META ((export #t)) */
+function sc_callWithOutputFile(s, proc) {
+ throw "can't open " + s;
+}
+
+/*** META ((export #t)) */
+function sc_withInputFromFile(s, thunk) {
+ throw "can't open " + s;
+}
+
+/*** META ((export #t)) */
+function sc_withOutputToFile(s, thunk) {
+ throw "can't open " + s;
+}
+
+/*** META ((export #t)) */
+function sc_openInputFile(s) {
+ throw "can't open " + s;
+}
+
+/*** META ((export #t)) */
+function sc_openOutputFile(s) {
+ throw "can't open " + s;
+}
+
+/* ----------------------------------------------------------------------------*/
+/*** META ((export #t)) */
+function sc_basename(p) {
+ var i = p.lastIndexOf('/');
+
+ if(i >= 0)
+ return p.substring(i + 1, p.length);
+ else
+ return '';
+}
+
+/*** META ((export #t)) */
+function sc_dirname(p) {
+ var i = p.lastIndexOf('/');
+
+ if(i >= 0)
+ return p.substring(0, i);
+ else
+ return '';
+}
+
+/* ----------------------------------------------------------------------------*/
+
+/*** META ((export #t)) */
+function sc_withInputFromPort(p, thunk) {
+ try {
+ var tmp = SC_DEFAULT_IN; // THREAD: shared var.
+ SC_DEFAULT_IN = p;
+ return thunk();
+ } finally {
+ SC_DEFAULT_IN = tmp;
+ }
+}
+
+/*** META ((export #t)) */
+function sc_withInputFromString(s, thunk) {
+ return sc_withInputFromPort(new sc_StringInputPort(sc_string2jsstring(s)), thunk);
+}
+
+/*** META ((export #t)) */
+function sc_withOutputToPort(p, thunk) {
+ try {
+ var tmp = SC_DEFAULT_OUT; // THREAD: shared var.
+ SC_DEFAULT_OUT = p;
+ return thunk();
+ } finally {
+ SC_DEFAULT_OUT = tmp;
+ }
+}
+
+/*** META ((export #t)) */
+function sc_withOutputToString(thunk) {
+ var p = new sc_StringOutputPort();
+ sc_withOutputToPort(p, thunk);
+ return p.close();
+}
+
+/*** META ((export #t)) */
+function sc_withOutputToProcedure(proc, thunk) {
+ var t = function(s) { proc(sc_jsstring2string(s)); };
+ return sc_withOutputToPort(new sc_GenericOutputPort(t), thunk);
+}
+
+/*** META ((export #t)
+ (peephole (hole 0 "new sc_StringOutputPort()")))
+*/
+function sc_openOutputString() {
+ return new sc_StringOutputPort();
+}
+
+/*** META ((export #t)) */
+function sc_openInputString(str) {
+ return new sc_StringInputPort(sc_string2jsstring(str));
+}
+
+/* ----------------------------------------------------------------------------*/
+
+function sc_OutputPort() {
+}
+sc_OutputPort.prototype = new sc_Port();
+sc_OutputPort.prototype.appendJSString = function(obj) {
+ /* do nothing */
+}
+sc_OutputPort.prototype.close = function() {
+ /* do nothing */
+}
+
+function sc_StringOutputPort() {
+ this.res = "";
+}
+sc_StringOutputPort.prototype = new sc_OutputPort();
+sc_StringOutputPort.prototype.appendJSString = function(s) {
+ this.res += s;
+}
+sc_StringOutputPort.prototype.close = function() {
+ return sc_jsstring2string(this.res);
+}
+
+/*** META ((export #t)) */
+function sc_getOutputString(sp) {
+ return sc_jsstring2string(sp.res);
+}
+
+
+function sc_ErrorOutputPort() {
+}
+sc_ErrorOutputPort.prototype = new sc_OutputPort();
+sc_ErrorOutputPort.prototype.appendJSString = function(s) {
+ throw "don't write on ErrorPort!";
+}
+sc_ErrorOutputPort.prototype.close = function() {
+ /* do nothing */
+}
+
+function sc_GenericOutputPort(appendJSString, close) {
+ this.appendJSString = appendJSString;
+ if (close)
+ this.close = close;
+}
+sc_GenericOutputPort.prototype = new sc_OutputPort();
+
+/*** META ((export #t)
+ (type bool)
+ (peephole (postfix " instanceof sc_OutputPort")))
+*/
+function sc_isOutputPort(o) {
+ return (o instanceof sc_OutputPort);
+}
+
+/*** META ((export #t)
+ (peephole (postfix ".close()")))
+*/
+function sc_closeOutputPort(p) {
+ return p.close();
+}
+
+/* ------------------ write ---------------------------------------------------*/
+
+/*** META ((export #t)) */
+function sc_write(o, p) {
+ if (p === undefined) // we assume not given
+ p = SC_DEFAULT_OUT;
+ p.appendJSString(sc_toWriteString(o));
+}
+
+function sc_toWriteString(o) {
+ if (o === null)
+ return "()";
+ else if (o === true)
+ return "#t";
+ else if (o === false)
+ return "#f";
+ else if (o === undefined)
+ return "#unspecified";
+ else if (typeof o === 'function')
+ return "#<procedure " + sc_hash(o) + ">";
+ else if (o.sc_toWriteString)
+ return o.sc_toWriteString();
+ else
+ return o.toString();
+}
+
+function sc_escapeWriteString(s) {
+ var res = "";
+ var j = 0;
+ for (i = 0; i < s.length; i++) {
+ switch (s.charAt(i)) {
+ case "\0": res += s.substring(j, i) + "\\0"; j = i + 1; break;
+ case "\b": res += s.substring(j, i) + "\\b"; j = i + 1; break;
+ case "\f": res += s.substring(j, i) + "\\f"; j = i + 1; break;
+ case "\n": res += s.substring(j, i) + "\\n"; j = i + 1; break;
+ case "\r": res += s.substring(j, i) + "\\r"; j = i + 1; break;
+ case "\t": res += s.substring(j, i) + "\\t"; j = i + 1; break;
+ case "\v": res += s.substring(j, i) + "\\v"; j = i + 1; break;
+ case '"': res += s.substring(j, i) + '\\"'; j = i + 1; break;
+ case "\\": res += s.substring(j, i) + "\\\\"; j = i + 1; break;
+ default:
+ var c = s.charAt(i);
+ if ("\a" !== "a" && c == "\a") {
+ res += s.substring(j, i) + "\\a"; j = i + 1; continue;
+ }
+ if ("\v" !== "v" && c == "\v") {
+ res += s.substring(j, i) + "\\v"; j = i + 1; continue;
+ }
+ //if (s.charAt(i) < ' ' || s.charCodeAt(i) > 127) {
+ // CARE: Manuel is this OK with HOP?
+ if (s.charAt(i) < ' ') {
+ /* non printable character and special chars */
+ res += s.substring(j, i) + "\\x" + s.charCodeAt(i).toString(16);
+ j = i + 1;
+ }
+ // else just let i increase...
+ }
+ }
+ res += s.substring(j, i);
+ return res;
+}
+
+/* ------------------ display ---------------------------------------------------*/
+
+/*** META ((export #t)) */
+function sc_display(o, p) {
+ if (p === undefined) // we assume not given
+ p = SC_DEFAULT_OUT;
+ p.appendJSString(sc_toDisplayString(o));
+}
+
+function sc_toDisplayString(o) {
+ if (o === null)
+ return "()";
+ else if (o === true)
+ return "#t";
+ else if (o === false)
+ return "#f";
+ else if (o === undefined)
+ return "#unspecified";
+ else if (typeof o === 'function')
+ return "#<procedure " + sc_hash(o) + ">";
+ else if (o.sc_toDisplayString)
+ return o.sc_toDisplayString();
+ else
+ return o.toString();
+}
+
+/* ------------------ newline ---------------------------------------------------*/
+
+/*** META ((export #t)) */
+function sc_newline(p) {
+ if (p === undefined) // we assume not given
+ p = SC_DEFAULT_OUT;
+ p.appendJSString("\n");
+}
+
+/* ------------------ write-char ---------------------------------------------------*/
+
+/*** META ((export #t)) */
+function sc_writeChar(c, p) {
+ if (p === undefined) // we assume not given
+ p = SC_DEFAULT_OUT;
+ p.appendJSString(c.val);
+}
+
+/* ------------------ write-circle ---------------------------------------------------*/
+
+/*** META ((export #t)) */
+function sc_writeCircle(o, p) {
+ if (p === undefined) // we assume not given
+ p = SC_DEFAULT_OUT;
+ p.appendJSString(sc_toWriteCircleString(o));
+}
+
+function sc_toWriteCircleString(o) {
+ var symb = sc_gensym("writeCircle");
+ var nbPointer = new Object();
+ nbPointer.nb = 0;
+ sc_prepWriteCircle(o, symb, nbPointer);
+ return sc_genToWriteCircleString(o, symb);
+}
+
+function sc_prepWriteCircle(o, symb, nbPointer) {
+ // TODO sc_Struct
+ if (o instanceof sc_Pair ||
+ o instanceof sc_Vector) {
+ if (o[symb] !== undefined) {
+ // not the first visit.
+ o[symb]++;
+ // unless there is already a number, assign one.
+ if (!o[symb + "nb"]) o[symb + "nb"] = nbPointer.nb++;
+ return;
+ }
+ o[symb] = 0;
+ if (o instanceof sc_Pair) {
+ sc_prepWriteCircle(o.car, symb, nbPointer);
+ sc_prepWriteCircle(o.cdr, symb, nbPointer);
+ } else {
+ for (var i = 0; i < o.length; i++)
+ sc_prepWriteCircle(o[i], symb, nbPointer);
+ }
+ }
+}
+
+function sc_genToWriteCircleString(o, symb) {
+ if (!(o instanceof sc_Pair ||
+ o instanceof sc_Vector))
+ return sc_toWriteString(o);
+ return o.sc_toWriteCircleString(symb);
+}
+sc_Pair.prototype.sc_toWriteCircleString = function(symb, inList) {
+ if (this[symb + "use"]) { // use-flag is set. Just use it.
+ var nb = this[symb + "nb"];
+ if (this[symb]-- === 0) { // if we are the last use. remove all fields.
+ delete this[symb];
+ delete this[symb + "nb"];
+ delete this[symb + "use"];
+ }
+ if (inList)
+ return '. #' + nb + '#';
+ else
+ return '#' + nb + '#';
+ }
+ if (this[symb]-- === 0) { // if we are the last use. remove all fields.
+ delete this[symb];
+ delete this[symb + "nb"];
+ delete this[symb + "use"];
+ }
+
+ var res = "";
+
+ if (this[symb] !== undefined) { // implies > 0
+ this[symb + "use"] = true;
+ if (inList)
+ res += '. #' + this[symb + "nb"] + '=';
+ else
+ res += '#' + this[symb + "nb"] + '=';
+ inList = false;
+ }
+
+ if (!inList)
+ res += "(";
+
+ // print car
+ res += sc_genToWriteCircleString(this.car, symb);
+
+ if (sc_isPair(this.cdr)) {
+ res += " " + this.cdr.sc_toWriteCircleString(symb, true);
+ } else if (this.cdr !== null) {
+ res += " . " + sc_genToWriteCircleString(this.cdr, symb);
+ }
+ if (!inList)
+ res += ")";
+ return res;
+};
+sc_Vector.prototype.sc_toWriteCircleString = function(symb) {
+ if (this[symb + "use"]) { // use-flag is set. Just use it.
+ var nb = this[symb + "nb"];
+ if (this[symb]-- === 0) { // if we are the last use. remove all fields.
+ delete this[symb];
+ delete this[symb + "nb"];
+ delete this[symb + "use"];
+ }
+ return '#' + nb + '#';
+ }
+ if (this[symb]-- === 0) { // if we are the last use. remove all fields.
+ delete this[symb];
+ delete this[symb + "nb"];
+ delete this[symb + "use"];
+ }
+
+ var res = "";
+ if (this[symb] !== undefined) { // implies > 0
+ this[symb + "use"] = true;
+ res += '#' + this[symb + "nb"] + '=';
+ }
+ res += "#(";
+ for (var i = 0; i < this.length; i++) {
+ res += sc_genToWriteCircleString(this[i], symb);
+ if (i < this.length - 1) res += " ";
+ }
+ res += ")";
+ return res;
+};
+
+
+/* ------------------ print ---------------------------------------------------*/
+
+/*** META ((export #t)) */
+function sc_print(s) {
+ if (arguments.length === 1) {
+ sc_display(s);
+ sc_newline();
+ }
+ else {
+ for (var i = 0; i < arguments.length; i++)
+ sc_display(arguments[i]);
+ sc_newline();
+ }
+}
+
+/* ------------------ format ---------------------------------------------------*/
+/*** META ((export #t)) */
+function sc_format(s, args) {
+ var len = s.length;
+ var p = new sc_StringOutputPort();
+ var i = 0, j = 1;
+
+ while( i < len ) {
+ var i2 = s.indexOf("~", i);
+
+ if (i2 == -1) {
+ p.appendJSString( s.substring( i, len ) );
+ return p.close();
+ } else {
+ if (i2 > i) {
+ if (i2 == (len - 1)) {
+ p.appendJSString(s.substring(i, len));
+ return p.close();
+ } else {
+ p.appendJSString(s.substring(i, i2));
+ i = i2;
+ }
+ }
+
+ switch(s.charCodeAt(i2 + 1)) {
+ case 65:
+ case 97:
+ // a
+ sc_display(arguments[j], p);
+ i += 2; j++;
+ break;
+
+ case 83:
+ case 115:
+ // s
+ sc_write(arguments[j], p);
+ i += 2; j++;
+ break;
+
+ case 86:
+ case 118:
+ // v
+ sc_display(arguments[j], p);
+ p.appendJSString("\n");
+ i += 2; j++;
+ break;
+
+ case 67:
+ case 99:
+ // c
+ p.appendJSString(String.fromCharCode(arguments[j]));
+ i += 2; j++;
+ break;
+
+ case 88:
+ case 120:
+ // x
+ p.appendJSString(arguments[j].toString(6));
+ i += 2; j++;
+ break;
+
+ case 79:
+ case 111:
+ // o
+ p.appendJSString(arguments[j].toString(8));
+ i += 2; j++;
+ break;
+
+ case 66:
+ case 98:
+ // b
+ p.appendJSString(arguments[j].toString(2));
+ i += 2; j++;
+ break;
+
+ case 37:
+ case 110:
+ // %, n
+ p.appendJSString("\n");
+ i += 2; break;
+
+ case 114:
+ // r
+ p.appendJSString("\r");
+ i += 2; break;
+
+ case 126:
+ // ~
+ p.appendJSString("~");
+ i += 2; break;
+
+ default:
+ sc_error( "format: illegal ~"
+ + String.fromCharCode(s.charCodeAt(i2 + 1))
+ + " sequence" );
+ return "";
+ }
+ }
+ }
+
+ return p.close();
+}
+
+/* ------------------ global ports ---------------------------------------------------*/
+
+var SC_DEFAULT_IN = new sc_ErrorInputPort();
+var SC_DEFAULT_OUT = new sc_ErrorOutputPort();
+var SC_ERROR_OUT = new sc_ErrorOutputPort();
+
+var sc_SYMBOL_PREFIX = "\u1E9C";
+var sc_KEYWORD_PREFIX = "\u1E9D";
+
+/*** META ((export #t)
+ (peephole (id))) */
+function sc_jsstring2string(s) {
+ return s;
+}
+
+/*** META ((export #t)
+ (peephole (prefix "'\\u1E9C' +")))
+*/
+function sc_jsstring2symbol(s) {
+ return sc_SYMBOL_PREFIX + s;
+}
+
+/*** META ((export #t)
+ (peephole (id)))
+*/
+function sc_string2jsstring(s) {
+ return s;
+}
+
+/*** META ((export #t)
+ (peephole (symbol2jsstring_immutable)))
+*/
+function sc_symbol2jsstring(s) {
+ return s.slice(1);
+}
+
+/*** META ((export #t)
+ (peephole (postfix ".slice(1)")))
+*/
+function sc_keyword2jsstring(k) {
+ return k.slice(1);
+}
+
+/*** META ((export #t)
+ (peephole (prefix "'\\u1E9D' +")))
+*/
+function sc_jsstring2keyword(s) {
+ return sc_KEYWORD_PREFIX + s;
+}
+
+/*** META ((export #t)
+ (type bool))
+*/
+function sc_isKeyword(s) {
+ return (typeof s === "string") &&
+ (s.charAt(0) === sc_KEYWORD_PREFIX);
+}
+
+
+/*** META ((export #t)) */
+var sc_gensym = function() {
+ var counter = 1000;
+ return function(sym) {
+ counter++;
+ if (!sym) sym = sc_SYMBOL_PREFIX;
+ return sym + "s" + counter + "~" + "^sC-GeNsYm ";
+ };
+}();
+
+
+/*** META ((export #t)
+ (type bool))
+*/
+function sc_isEqual(o1, o2) {
+ return ((o1 === o2) ||
+ (sc_isPair(o1) && sc_isPair(o2)
+ && sc_isPairEqual(o1, o2, sc_isEqual)) ||
+ (sc_isVector(o1) && sc_isVector(o2)
+ && sc_isVectorEqual(o1, o2, sc_isEqual)));
+}
+
+/*** META ((export number->symbol integer->symbol)) */
+function sc_number2symbol(x, radix) {
+ return sc_SYMBOL_PREFIX + sc_number2jsstring(x, radix);
+}
+
+/*** META ((export number->string integer->string)) */
+var sc_number2string = sc_number2jsstring;
+
+/*** META ((export #t)) */
+function sc_symbol2number(s, radix) {
+ return sc_jsstring2number(s.slice(1), radix);
+}
+
+/*** META ((export #t)) */
+var sc_string2number = sc_jsstring2number;
+
+/*** META ((export #t)
+ (peephole (prefix "+" s)))
+ ;; peephole will only apply if no radix is given.
+*/
+function sc_string2integer(s, radix) {
+ if (!radix) return +s;
+ return parseInt(s, radix);
+}
+
+/*** META ((export #t)
+ (peephole (prefix "+")))
+*/
+function sc_string2real(s) {
+ return +s;
+}
+
+
+/*** META ((export #t)
+ (type bool))
+*/
+function sc_isSymbol(s) {
+ return (typeof s === "string") &&
+ (s.charAt(0) === sc_SYMBOL_PREFIX);
+}
+
+/*** META ((export #t)
+ (peephole (symbol2string_immutable)))
+*/
+function sc_symbol2string(s) {
+ return s.slice(1);
+}
+
+/*** META ((export #t)
+ (peephole (prefix "'\\u1E9C' +")))
+*/
+function sc_string2symbol(s) {
+ return sc_SYMBOL_PREFIX + s;
+}
+
+/*** META ((export symbol-append)
+ (peephole (symbolAppend_immutable)))
+*/
+function sc_symbolAppend() {
+ var res = sc_SYMBOL_PREFIX;
+ for (var i = 0; i < arguments.length; i++)
+ res += arguments[i].slice(1);
+ return res;
+}
+
+/*** META ((export #t)
+ (peephole (postfix ".val")))
+*/
+function sc_char2string(c) { return c.val; }
+
+/*** META ((export #t)
+ (peephole (hole 1 "'\\u1E9C' + " c ".val")))
+*/
+function sc_char2symbol(c) { return sc_SYMBOL_PREFIX + c.val; }
+
+/*** META ((export #t)
+ (type bool))
+*/
+function sc_isString(s) {
+ return (typeof s === "string") &&
+ (s.charAt(0) !== sc_SYMBOL_PREFIX);
+}
+
+/*** META ((export #t)) */
+var sc_makeString = sc_makejsString;
+
+
+/*** META ((export #t)) */
+function sc_string() {
+ for (var i = 0; i < arguments.length; i++)
+ arguments[i] = arguments[i].val;
+ return "".concat.apply("", arguments);
+}
+
+/*** META ((export #t)
+ (peephole (postfix ".length")))
+*/
+function sc_stringLength(s) { return s.length; }
+
+/*** META ((export #t)) */
+function sc_stringRef(s, k) {
+ return new sc_Char(s.charAt(k));
+}
+
+/* there's no stringSet in the immutable version
+function sc_stringSet(s, k, c)
+*/
+
+
+/*** META ((export string=?)
+ (type bool)
+ (peephole (hole 2 str1 " === " str2)))
+*/
+function sc_isStringEqual(s1, s2) {
+ return s1 === s2;
+}
+/*** META ((export string<?)
+ (type bool)
+ (peephole (hole 2 str1 " < " str2)))
+*/
+function sc_isStringLess(s1, s2) {
+ return s1 < s2;
+}
+/*** META ((export string>?)
+ (type bool)
+ (peephole (hole 2 str1 " > " str2)))
+*/
+function sc_isStringGreater(s1, s2) {
+ return s1 > s2;
+}
+/*** META ((export string<=?)
+ (type bool)
+ (peephole (hole 2 str1 " <= " str2)))
+*/
+function sc_isStringLessEqual(s1, s2) {
+ return s1 <= s2;
+}
+/*** META ((export string>=?)
+ (type bool)
+ (peephole (hole 2 str1 " >= " str2)))
+*/
+function sc_isStringGreaterEqual(s1, s2) {
+ return s1 >= s2;
+}
+/*** META ((export string-ci=?)
+ (type bool)
+ (peephole (hole 2 str1 ".toLowerCase() === " str2 ".toLowerCase()")))
+*/
+function sc_isStringCIEqual(s1, s2) {
+ return s1.toLowerCase() === s2.toLowerCase();
+}
+/*** META ((export string-ci<?)
+ (type bool)
+ (peephole (hole 2 str1 ".toLowerCase() < " str2 ".toLowerCase()")))
+*/
+function sc_isStringCILess(s1, s2) {
+ return s1.toLowerCase() < s2.toLowerCase();
+}
+/*** META ((export string-ci>?)
+ (type bool)
+ (peephole (hole 2 str1 ".toLowerCase() > " str2 ".toLowerCase()")))
+*/
+function sc_isStringCIGreater(s1, s2) {
+ return s1.toLowerCase() > s2.toLowerCase();
+}
+/*** META ((export string-ci<=?)
+ (type bool)
+ (peephole (hole 2 str1 ".toLowerCase() <= " str2 ".toLowerCase()")))
+*/
+function sc_isStringCILessEqual(s1, s2) {
+ return s1.toLowerCase() <= s2.toLowerCase();
+}
+/*** META ((export string-ci>=?)
+ (type bool)
+ (peephole (hole 2 str1 ".toLowerCase() >= " str2 ".toLowerCase()")))
+*/
+function sc_isStringCIGreaterEqual(s1, s2) {
+ return s1.toLowerCase() >= s2.toLowerCase();
+}
+
+/*** META ((export #t)
+ (peephole (hole 3 s ".substring(" start ", " end ")")))
+*/
+function sc_substring(s, start, end) {
+ return s.substring(start, end);
+}
+
+/*** META ((export #t))
+*/
+function sc_isSubstring_at(s1, s2, i) {
+ return s2 == s1.substring(i, i+ s2.length);
+}
+
+/*** META ((export #t)
+ (peephole (infix 0 #f "+" "''")))
+*/
+function sc_stringAppend() {
+ return "".concat.apply("", arguments);
+}
+
+/*** META ((export #t)) */
+var sc_string2list = sc_jsstring2list;
+
+/*** META ((export #t)) */
+var sc_list2string = sc_list2jsstring;
+
+/*** META ((export #t)
+ (peephole (id)))
+*/
+function sc_stringCopy(s) {
+ return s;
+}
+
+/* there's no string-fill in the immutable version
+function sc_stringFill(s, c)
+*/
+
+/*** META ((export #t)
+ (peephole (postfix ".slice(1)")))
+*/
+function sc_keyword2string(o) {
+ return o.slice(1);
+}
+
+/*** META ((export #t)
+ (peephole (prefix "'\\u1E9D' +")))
+*/
+function sc_string2keyword(o) {
+ return sc_KEYWORD_PREFIX + o;
+}
+
+String.prototype.sc_toDisplayString = function() {
+ if (this.charAt(0) === sc_SYMBOL_PREFIX)
+ // TODO: care for symbols with spaces (escape-chars symbols).
+ return this.slice(1);
+ else if (this.charAt(0) === sc_KEYWORD_PREFIX)
+ return ":" + this.slice(1);
+ else
+ return this.toString();
+};
+
+String.prototype.sc_toWriteString = function() {
+ if (this.charAt(0) === sc_SYMBOL_PREFIX)
+ // TODO: care for symbols with spaces (escape-chars symbols).
+ return this.slice(1);
+ else if (this.charAt(0) === sc_KEYWORD_PREFIX)
+ return ":" + this.slice(1);
+ else
+ return '"' + sc_escapeWriteString(this) + '"';
+};
+/* Exported Variables */
+var BgL_testzd2boyerzd2;
+var BgL_nboyerzd2benchmarkzd2;
+var BgL_setupzd2boyerzd2;
+/* End Exports */
+
+var translate_term_nboyer;
+var translate_args_nboyer;
+var untranslate_term_nboyer;
+var BgL_sc_symbolzd2ze3symbolzd2record_1ze3_nboyer;
+var BgL_sc_za2symbolzd2recordszd2alistza2_2z00_nboyer;
+var translate_alist_nboyer;
+var apply_subst_nboyer;
+var apply_subst_lst_nboyer;
+var tautologyp_nboyer;
+var if_constructor_nboyer;
+var rewrite_count_nboyer;
+var rewrite_nboyer;
+var rewrite_args_nboyer;
+var unify_subst_nboyer;
+var one_way_unify1_nboyer;
+var false_term_nboyer;
+var true_term_nboyer;
+var trans_of_implies1_nboyer;
+var is_term_equal_nboyer;
+var is_term_member_nboyer;
+var const_nboyer;
+var sc_const_3_nboyer;
+var sc_const_4_nboyer;
+{
+ (sc_const_4_nboyer = (new sc_Pair("\u1E9Cimplies",(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cimplies",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cimplies",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cz",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cimplies",(new sc_Pair("\u1E9Cz",(new sc_Pair("\u1E9Cu",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cimplies",(new sc_Pair("\u1E9Cu",(new sc_Pair("\u1E9Cw",null)))))),null)))))),null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cimplies",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cw",null)))))),null)))))));
+ (sc_const_3_nboyer = sc_list((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ccompile",(new sc_Pair("\u1E9Cform",null)))),(new sc_Pair((new sc_Pair("\u1E9Creverse",(new sc_Pair((new sc_Pair("\u1E9Ccodegen",(new sc_Pair((new sc_Pair("\u1E9Coptimize",(new sc_Pair("\u1E9Cform",null)))),(new sc_Pair((new sc_Pair("\u1E9Cnil",null)),null)))))),null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ceqp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Cy",null)))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cgreaterp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cx",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Clesseqp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cx",null)))))),null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cgreatereqp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cboolean",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cor",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Ct",null)),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cf",null)),null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ciff",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cimplies",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cimplies",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cx",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ceven1",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Ct",null)),(new sc_Pair((new sc_Pair("\u1E9Codd",(new sc_Pair((new sc_Pair("\u1E9Csub1",(new sc_Pair("\u1E9Cx",null)))),null)))),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ccountps-",(new sc_Pair("\u1E9Cl",(new sc_Pair("\u1E9Cpred",null)))))),(new sc_Pair((new sc_Pair("\u1E9Ccountps-loop",(new sc_Pair("\u1E9Cl",(new sc_Pair("\u1E9Cpred",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cfact-",(new sc_Pair("\u1E9Ci",null)))),(new sc_Pair((new sc_Pair("\u1E9Cfact-loop",(new sc_Pair("\u1E9Ci",(new sc_Pair((1),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Creverse-",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Creverse-loop",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cnil",null)),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cdivides",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair((new sc_Pair("\u1E9Cremainder",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cx",null)))))),null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cassume-true",(new sc_Pair("\u1E9Cvar",(new sc_Pair("\u1E9Calist",null)))))),(new sc_Pair((new sc_Pair("\u1E9Ccons",(new sc_Pair((new sc_Pair("\u1E9Ccons",(new sc_Pair("\u1E9Cvar",(new sc_Pair((new sc_Pair("\u1E9Ct",null)),null)))))),(new sc_Pair("\u1E9Calist",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cassume-false",(new sc_Pair("\u1E9Cvar",(new sc_Pair("\u1E9Calist",null)))))),(new sc_Pair((new sc_Pair("\u1E9Ccons",(new sc_Pair((new sc_Pair("\u1E9Ccons",(new sc_Pair("\u1E9Cvar",(new sc_Pair((new sc_Pair("\u1E9Cf",null)),null)))))),(new sc_Pair("\u1E9Calist",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ctautology-checker",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Ctautologyp",(new sc_Pair((new sc_Pair("\u1E9Cnormalize",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cnil",null)),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cfalsify",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cfalsify1",(new sc_Pair((new sc_Pair("\u1E9Cnormalize",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cnil",null)),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cprime",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cx",null)))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cadd1",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))),null)))))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cprime1",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Csub1",(new sc_Pair("\u1E9Cx",null)))),null)))))),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair("\u1E9Cp",(new sc_Pair("\u1E9Cq",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair("\u1E9Cp",(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair("\u1E9Cq",(new sc_Pair((new sc_Pair("\u1E9Ct",null)),(new sc_Pair((new sc_Pair("\u1E9Cf",null)),null)))))))),(new sc_Pair((new sc_Pair("\u1E9Cf",null)),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cor",(new sc_Pair("\u1E9Cp",(new sc_Pair("\u1E9Cq",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair("\u1E9Cp",(new sc_Pair((new sc_Pair("\u1E9Ct",null)),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair("\u1E9Cq",(new sc_Pair((new sc_Pair("\u1E9Ct",null)),(new sc_Pair((new sc_Pair("\u1E9Cf",null)),null)))))))),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair("\u1E9Cp",null)))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair("\u1E9Cp",(new sc_Pair((new sc_Pair("\u1E9Cf",null)),(new sc_Pair((new sc_Pair("\u1E9Ct",null)),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cimplies",(new sc_Pair("\u1E9Cp",(new sc_Pair("\u1E9Cq",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair("\u1E9Cp",(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair("\u1E9Cq",(new sc_Pair((new sc_Pair("\u1E9Ct",null)),(new sc_Pair((new sc_Pair("\u1E9Cf",null)),null)))))))),(new sc_Pair((new sc_Pair("\u1E9Ct",null)),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Cnumberp",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",(new sc_Pair("\u1E9Cc",null)))))))),(new sc_Pair("\u1E9Cd",(new sc_Pair("\u1E9Ce",null)))))))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair("\u1E9Ca",(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair("\u1E9Cb",(new sc_Pair("\u1E9Cd",(new sc_Pair("\u1E9Ce",null)))))))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair("\u1E9Cc",(new sc_Pair("\u1E9Cd",(new sc_Pair("\u1E9Ce",null)))))))),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cor",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Cnumberp",(new sc_Pair("\u1E9Cx",null)))),null)))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair("\u1E9Cz",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cz",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Ca",null)))),(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cb",null)))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cx",null)))))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cc",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Cb",null)))),(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Cc",null)))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cx",null)))))),null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cnumberp",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cor",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))),(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cy",null)))),null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cmeaning",(new sc_Pair((new sc_Pair("\u1E9Cplus-tree",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))),(new sc_Pair("\u1E9Ca",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair((new sc_Pair("\u1E9Cmeaning",(new sc_Pair((new sc_Pair("\u1E9Cplus-tree",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair("\u1E9Ca",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cmeaning",(new sc_Pair((new sc_Pair("\u1E9Cplus-tree",(new sc_Pair("\u1E9Cy",null)))),(new sc_Pair("\u1E9Ca",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cmeaning",(new sc_Pair((new sc_Pair("\u1E9Cplus-tree",(new sc_Pair((new sc_Pair("\u1E9Cplus-fringe",(new sc_Pair("\u1E9Cx",null)))),null)))),(new sc_Pair("\u1E9Ca",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair((new sc_Pair("\u1E9Cmeaning",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Ca",null)))))),null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair("\u1E9Cz",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cz",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Creverse",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair((new sc_Pair("\u1E9Creverse",(new sc_Pair("\u1E9Cb",null)))),(new sc_Pair((new sc_Pair("\u1E9Creverse",(new sc_Pair("\u1E9Ca",null)))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cz",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cz",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair("\u1E9Cz",null)))))),(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cz",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cor",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cy",null)))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cexec",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair("\u1E9Cpds",(new sc_Pair("\u1E9Cenvrn",null)))))))),(new sc_Pair((new sc_Pair("\u1E9Cexec",(new sc_Pair("\u1E9Cy",(new sc_Pair((new sc_Pair("\u1E9Cexec",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cpds",(new sc_Pair("\u1E9Cenvrn",null)))))))),(new sc_Pair("\u1E9Cenvrn",null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cmc-flatten",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair((new sc_Pair("\u1E9Cflatten",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair("\u1E9Cy",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cmember",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cor",(new sc_Pair((new sc_Pair("\u1E9Cmember",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Ca",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cmember",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cb",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cmember",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Creverse",(new sc_Pair("\u1E9Cy",null)))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cmember",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Clength",(new sc_Pair((new sc_Pair("\u1E9Creverse",(new sc_Pair("\u1E9Cx",null)))),null)))),(new sc_Pair((new sc_Pair("\u1E9Clength",(new sc_Pair("\u1E9Cx",null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cmember",(new sc_Pair("\u1E9Ca",(new sc_Pair((new sc_Pair("\u1E9Cintersect",(new sc_Pair("\u1E9Cb",(new sc_Pair("\u1E9Cc",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cmember",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cmember",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cc",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cnth",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),(new sc_Pair("\u1E9Ci",null)))))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cexp",(new sc_Pair("\u1E9Ci",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cj",(new sc_Pair("\u1E9Ck",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair((new sc_Pair("\u1E9Cexp",(new sc_Pair("\u1E9Ci",(new sc_Pair("\u1E9Cj",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cexp",(new sc_Pair("\u1E9Ci",(new sc_Pair("\u1E9Ck",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cexp",(new sc_Pair("\u1E9Ci",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cj",(new sc_Pair("\u1E9Ck",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cexp",(new sc_Pair((new sc_Pair("\u1E9Cexp",(new sc_Pair("\u1E9Ci",(new sc_Pair("\u1E9Cj",null)))))),(new sc_Pair("\u1E9Ck",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Creverse-loop",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair((new sc_Pair("\u1E9Creverse",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair("\u1E9Cy",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Creverse-loop",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cnil",null)),null)))))),(new sc_Pair((new sc_Pair("\u1E9Creverse",(new sc_Pair("\u1E9Cx",null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ccount-list",(new sc_Pair("\u1E9Cz",(new sc_Pair((new sc_Pair("\u1E9Csort-lp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair((new sc_Pair("\u1E9Ccount-list",(new sc_Pair("\u1E9Cz",(new sc_Pair("\u1E9Cx",null)))))),(new sc_Pair((new sc_Pair("\u1E9Ccount-list",(new sc_Pair("\u1E9Cz",(new sc_Pair("\u1E9Cy",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cc",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cb",(new sc_Pair("\u1E9Cc",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair((new sc_Pair("\u1E9Cremainder",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cy",(new sc_Pair((new sc_Pair("\u1E9Cquotient",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Cx",null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cpower-eval",(new sc_Pair((new sc_Pair("\u1E9Cbig-plus1",(new sc_Pair("\u1E9Cl",(new sc_Pair("\u1E9Ci",(new sc_Pair("\u1E9Cbase",null)))))))),(new sc_Pair("\u1E9Cbase",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair((new sc_Pair("\u1E9Cpower-eval",(new sc_Pair("\u1E9Cl",(new sc_Pair("\u1E9Cbase",null)))))),(new sc_Pair("\u1E9Ci",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cpower-eval",(new sc_Pair((new sc_Pair("\u1E9Cbig-plus",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Ci",(new sc_Pair("\u1E9Cbase",null)))))))))),(new sc_Pair("\u1E9Cbase",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Ci",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair((new sc_Pair("\u1E9Cpower-eval",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cbase",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cpower-eval",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cbase",null)))))),null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cremainder",(new sc_Pair("\u1E9Cy",(new sc_Pair((1),null)))))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair((new sc_Pair("\u1E9Cremainder",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cy",null)))),null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cremainder",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cx",null)))))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair((new sc_Pair("\u1E9Cquotient",(new sc_Pair("\u1E9Ci",(new sc_Pair("\u1E9Cj",null)))))),(new sc_Pair("\u1E9Ci",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Ci",null)))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cor",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cj",null)))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cj",(new sc_Pair((1),null)))))),null)))),null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair((new sc_Pair("\u1E9Cremainder",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair("\u1E9Cx",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cy",null)))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cx",null)))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cpower-eval",(new sc_Pair((new sc_Pair("\u1E9Cpower-rep",(new sc_Pair("\u1E9Ci",(new sc_Pair("\u1E9Cbase",null)))))),(new sc_Pair("\u1E9Cbase",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Ci",null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cpower-eval",(new sc_Pair((new sc_Pair("\u1E9Cbig-plus",(new sc_Pair((new sc_Pair("\u1E9Cpower-rep",(new sc_Pair("\u1E9Ci",(new sc_Pair("\u1E9Cbase",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cpower-rep",(new sc_Pair("\u1E9Cj",(new sc_Pair("\u1E9Cbase",null)))))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),(new sc_Pair("\u1E9Cbase",null)))))))))),(new sc_Pair("\u1E9Cbase",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Ci",(new sc_Pair("\u1E9Cj",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cgcd",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cgcd",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cx",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cnth",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),(new sc_Pair("\u1E9Ci",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair((new sc_Pair("\u1E9Cnth",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Ci",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cnth",(new sc_Pair("\u1E9Cb",(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair("\u1E9Ci",(new sc_Pair((new sc_Pair("\u1E9Clength",(new sc_Pair("\u1E9Ca",null)))),null)))))),null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair("\u1E9Cx",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Cy",null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cx",null)))))),(new sc_Pair("\u1E9Cx",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Cy",null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cz",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cz",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair("\u1E9Cc",(new sc_Pair("\u1E9Cw",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cc",(new sc_Pair("\u1E9Cx",null)))))),(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cw",(new sc_Pair("\u1E9Cx",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cremainder",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cz",null)))))),(new sc_Pair("\u1E9Cz",null)))))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cb",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cc",null)))))),null)))))),(new sc_Pair("\u1E9Ca",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cb",(new sc_Pair("\u1E9Cc",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair((new sc_Pair("\u1E9Cadd1",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cz",null)))))),null)))),(new sc_Pair("\u1E9Cz",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cadd1",(new sc_Pair("\u1E9Cy",null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cz",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cz",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cz",null)))))),(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cz",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cz",null)))),null)))),(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cy",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cx",null)))),null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cgcd",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cz",null)))))),(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cz",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cz",(new sc_Pair((new sc_Pair("\u1E9Cgcd",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cvalue",(new sc_Pair((new sc_Pair("\u1E9Cnormalize",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair("\u1E9Ca",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cvalue",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Ca",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cflatten",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Ccons",(new sc_Pair("\u1E9Cy",(new sc_Pair((new sc_Pair("\u1E9Cnil",null)),null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cnlistp",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Clistp",(new sc_Pair((new sc_Pair("\u1E9Cgopher",(new sc_Pair("\u1E9Cx",null)))),null)))),(new sc_Pair((new sc_Pair("\u1E9Clistp",(new sc_Pair("\u1E9Cx",null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Csamefringe",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cflatten",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cflatten",(new sc_Pair("\u1E9Cy",null)))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cgreatest-factor",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cor",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cy",null)))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cy",(new sc_Pair((1),null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cgreatest-factor",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((1),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cx",(new sc_Pair((1),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cnumberp",(new sc_Pair((new sc_Pair("\u1E9Cgreatest-factor",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cor",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cy",null)))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cy",(new sc_Pair((1),null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Cnumberp",(new sc_Pair("\u1E9Cx",null)))),null)))),null)))))),null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ctimes-list",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))),(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair((new sc_Pair("\u1E9Ctimes-list",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Ctimes-list",(new sc_Pair("\u1E9Cy",null)))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cprime-list",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cprime-list",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cprime-list",(new sc_Pair("\u1E9Cy",null)))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cz",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cw",(new sc_Pair("\u1E9Cz",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cnumberp",(new sc_Pair("\u1E9Cz",null)))),(new sc_Pair((new sc_Pair("\u1E9Cor",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cz",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cw",(new sc_Pair((1),null)))))),null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cgreatereqp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cor",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cnumberp",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cy",(new sc_Pair((1),null)))))),null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cremainder",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cx",null)))))),(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),(new sc_Pair((1),null)))))),(new sc_Pair(sc_list("\u1E9Cand", (new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Ca",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))),null)))), (new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cb",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))),null)))), (new sc_Pair("\u1E9Cnumberp",(new sc_Pair("\u1E9Ca",null)))), (new sc_Pair("\u1E9Cnumberp",(new sc_Pair("\u1E9Cb",null)))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Csub1",(new sc_Pair("\u1E9Ca",null)))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Csub1",(new sc_Pair("\u1E9Cb",null)))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair((new sc_Pair("\u1E9Clength",(new sc_Pair((new sc_Pair("\u1E9Cdelete",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cl",null)))))),null)))),(new sc_Pair((new sc_Pair("\u1E9Clength",(new sc_Pair("\u1E9Cl",null)))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cmember",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cl",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Csort2",(new sc_Pair((new sc_Pair("\u1E9Cdelete",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cl",null)))))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cdelete",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Csort2",(new sc_Pair("\u1E9Cl",null)))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cdsort",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Csort2",(new sc_Pair("\u1E9Cx",null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Clength",(new sc_Pair((new sc_Pair("\u1E9Ccons",(new sc_Pair("\u1E9Cx1",(new sc_Pair((new sc_Pair("\u1E9Ccons",(new sc_Pair("\u1E9Cx2",(new sc_Pair((new sc_Pair("\u1E9Ccons",(new sc_Pair("\u1E9Cx3",(new sc_Pair((new sc_Pair("\u1E9Ccons",(new sc_Pair("\u1E9Cx4",(new sc_Pair((new sc_Pair("\u1E9Ccons",(new sc_Pair("\u1E9Cx5",(new sc_Pair((new sc_Pair("\u1E9Ccons",(new sc_Pair("\u1E9Cx6",(new sc_Pair("\u1E9Cx7",null)))))),null)))))),null)))))),null)))))),null)))))),null)))))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair((6),(new sc_Pair((new sc_Pair("\u1E9Clength",(new sc_Pair("\u1E9Cx7",null)))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair((new sc_Pair("\u1E9Cadd1",(new sc_Pair((new sc_Pair("\u1E9Cadd1",(new sc_Pair("\u1E9Cx",null)))),null)))),(new sc_Pair((2),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Cx",null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cquotient",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))))),(new sc_Pair((2),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cquotient",(new sc_Pair("\u1E9Cy",(new sc_Pair((2),null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Csigma",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),(new sc_Pair("\u1E9Ci",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cquotient",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Ci",(new sc_Pair((new sc_Pair("\u1E9Cadd1",(new sc_Pair("\u1E9Ci",null)))),null)))))),(new sc_Pair((2),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cadd1",(new sc_Pair("\u1E9Cy",null)))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Cnumberp",(new sc_Pair("\u1E9Cy",null)))),(new sc_Pair((new sc_Pair("\u1E9Cadd1",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cadd1",(new sc_Pair("\u1E9Cx",null)))),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair("\u1E9Cz",(new sc_Pair("\u1E9Cy",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cz",null)))))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cz",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cx",null)))))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Cz",null)))),null)))))),null)))))))),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cmeaning",(new sc_Pair((new sc_Pair("\u1E9Cplus-tree",(new sc_Pair((new sc_Pair("\u1E9Cdelete",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))),(new sc_Pair("\u1E9Ca",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Cmember",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair((new sc_Pair("\u1E9Cmeaning",(new sc_Pair((new sc_Pair("\u1E9Cplus-tree",(new sc_Pair("\u1E9Cy",null)))),(new sc_Pair("\u1E9Ca",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cmeaning",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Ca",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cmeaning",(new sc_Pair((new sc_Pair("\u1E9Cplus-tree",(new sc_Pair("\u1E9Cy",null)))),(new sc_Pair("\u1E9Ca",null)))))),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cadd1",(new sc_Pair("\u1E9Cy",null)))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Cnumberp",(new sc_Pair("\u1E9Cy",null)))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Cx",null)))),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cnth",(new sc_Pair((new sc_Pair("\u1E9Cnil",null)),(new sc_Pair("\u1E9Ci",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Ci",null)))),(new sc_Pair((new sc_Pair("\u1E9Cnil",null)),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Clast",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Clistp",(new sc_Pair("\u1E9Cb",null)))),(new sc_Pair((new sc_Pair("\u1E9Clast",(new sc_Pair("\u1E9Cb",null)))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Clistp",(new sc_Pair("\u1E9Ca",null)))),(new sc_Pair((new sc_Pair("\u1E9Ccons",(new sc_Pair((new sc_Pair("\u1E9Ccar",(new sc_Pair((new sc_Pair("\u1E9Clast",(new sc_Pair("\u1E9Ca",null)))),null)))),(new sc_Pair("\u1E9Cb",null)))))),(new sc_Pair("\u1E9Cb",null)))))))),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair("\u1E9Cz",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ct",null)),(new sc_Pair("\u1E9Cz",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cf",null)),(new sc_Pair("\u1E9Cz",null)))))),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cassignment",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Cassignedp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Ca",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cassignment",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Ca",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cassignment",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cb",null)))))),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ccar",(new sc_Pair((new sc_Pair("\u1E9Cgopher",(new sc_Pair("\u1E9Cx",null)))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Clistp",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Ccar",(new sc_Pair((new sc_Pair("\u1E9Cflatten",(new sc_Pair("\u1E9Cx",null)))),null)))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cflatten",(new sc_Pair((new sc_Pair("\u1E9Ccdr",(new sc_Pair((new sc_Pair("\u1E9Cgopher",(new sc_Pair("\u1E9Cx",null)))),null)))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Clistp",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Ccdr",(new sc_Pair((new sc_Pair("\u1E9Cflatten",(new sc_Pair("\u1E9Cx",null)))),null)))),(new sc_Pair((new sc_Pair("\u1E9Ccons",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),(new sc_Pair((new sc_Pair("\u1E9Cnil",null)),null)))))),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cquotient",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cx",null)))))),(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cy",null)))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Cx",null)))),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cget",(new sc_Pair("\u1E9Cj",(new sc_Pair((new sc_Pair("\u1E9Cset",(new sc_Pair("\u1E9Ci",(new sc_Pair("\u1E9Cval",(new sc_Pair("\u1E9Cmem",null)))))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Ceqp",(new sc_Pair("\u1E9Cj",(new sc_Pair("\u1E9Ci",null)))))),(new sc_Pair("\u1E9Cval",(new sc_Pair((new sc_Pair("\u1E9Cget",(new sc_Pair("\u1E9Cj",(new sc_Pair("\u1E9Cmem",null)))))),null)))))))),null))))))));
+ (const_nboyer = (new sc_Pair((new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cf",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cc",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))),null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cf",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cc",(new sc_Pair("\u1E9Cd",null)))))),null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cz",(new sc_Pair("\u1E9Cf",(new sc_Pair((new sc_Pair("\u1E9Creverse",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cnil",null)),null)))))),null)))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cu",(new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))))))),(new sc_Pair((new sc_Pair("\u1E9Cw",(new sc_Pair("\u1E9Clessp",(new sc_Pair((new sc_Pair("\u1E9Cremainder",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cmember",(new sc_Pair("\u1E9Ca",(new sc_Pair((new sc_Pair("\u1E9Clength",(new sc_Pair("\u1E9Cb",null)))),null)))))),null)))))))),null)))))))))));
+ BgL_nboyerzd2benchmarkzd2 = function() {
+ var args = null;
+ for (var sc_tmp = arguments.length - 1; sc_tmp >= 0; sc_tmp--) {
+ args = sc_cons(arguments[sc_tmp], args);
+ }
+ var n;
+ return ((n = ((args === null)?(0):(args.car))), (BgL_setupzd2boyerzd2()), (BgL_runzd2benchmarkzd2(("nboyer"+(sc_number2string(n))), (1), function() {
+ return (BgL_testzd2boyerzd2(n));
+ }, function(rewrites) {
+ if ((sc_isNumber(rewrites)))
+ switch (n) {
+ case (0):
+ return (rewrites===(95024));
+ break;
+ case (1):
+ return (rewrites===(591777));
+ break;
+ case (2):
+ return (rewrites===(1813975));
+ break;
+ case (3):
+ return (rewrites===(5375678));
+ break;
+ case (4):
+ return (rewrites===(16445406));
+ break;
+ case (5):
+ return (rewrites===(51507739));
+ break;
+ default:
+ return true;
+ break;
+ }
+ else
+ return false;
+ })));
+ };
+ BgL_setupzd2boyerzd2 = function() {
+ return true;
+ };
+ BgL_testzd2boyerzd2 = function() {
+ return true;
+ };
+ translate_term_nboyer = function(term) {
+ var lst;
+ return (!(term instanceof sc_Pair)?term:(new sc_Pair((BgL_sc_symbolzd2ze3symbolzd2record_1ze3_nboyer((term.car))), ((lst = (term.cdr)), ((lst === null)?null:(new sc_Pair((translate_term_nboyer((lst.car))), (translate_args_nboyer((lst.cdr))))))))));
+ };
+ translate_args_nboyer = function(lst) {
+ var sc_lst_5;
+ var term;
+ return ((lst === null)?null:(new sc_Pair(((term = (lst.car)), (!(term instanceof sc_Pair)?term:(new sc_Pair((BgL_sc_symbolzd2ze3symbolzd2record_1ze3_nboyer((term.car))), (translate_args_nboyer((term.cdr))))))), ((sc_lst_5 = (lst.cdr)), ((sc_lst_5 === null)?null:(new sc_Pair((translate_term_nboyer((sc_lst_5.car))), (translate_args_nboyer((sc_lst_5.cdr))))))))));
+ };
+ untranslate_term_nboyer = function(term) {
+ var optrOpnd;
+ var tail1131;
+ var L1127;
+ var falseHead1130;
+ var symbol_record;
+ if (!(term instanceof sc_Pair))
+ return term;
+ else
+ {
+ (falseHead1130 = (new sc_Pair(null, null)));
+ (L1127 = (term.cdr));
+ (tail1131 = falseHead1130);
+ while (!(L1127 === null)) {
+ {
+ (tail1131.cdr = (new sc_Pair((untranslate_term_nboyer((L1127.car))), null)));
+ (tail1131 = (tail1131.cdr));
+ (L1127 = (L1127.cdr));
+ }
+ }
+ (optrOpnd = (falseHead1130.cdr));
+ return (new sc_Pair(((symbol_record = (term.car)), (symbol_record[(0)])), optrOpnd));
+ }
+ };
+ BgL_sc_symbolzd2ze3symbolzd2record_1ze3_nboyer = function(sym) {
+ var r;
+ var x;
+ return ((x = (sc_assq(sym, BgL_sc_za2symbolzd2recordszd2alistza2_2z00_nboyer))), ((x!== false)?(x.cdr):((r = [sym, null]), (BgL_sc_za2symbolzd2recordszd2alistza2_2z00_nboyer = (new sc_Pair((new sc_Pair(sym, r)), BgL_sc_za2symbolzd2recordszd2alistza2_2z00_nboyer))), r)));
+ };
+ (BgL_sc_za2symbolzd2recordszd2alistza2_2z00_nboyer = null);
+ translate_alist_nboyer = function(alist) {
+ var sc_alist_6;
+ var term;
+ return ((alist === null)?null:(new sc_Pair((new sc_Pair((alist.car.car), ((term = (alist.car.cdr)), (!(term instanceof sc_Pair)?term:(new sc_Pair((BgL_sc_symbolzd2ze3symbolzd2record_1ze3_nboyer((term.car))), (translate_args_nboyer((term.cdr))))))))), ((sc_alist_6 = (alist.cdr)), ((sc_alist_6 === null)?null:(new sc_Pair((new sc_Pair((sc_alist_6.car.car), (translate_term_nboyer((sc_alist_6.car.cdr))))), (translate_alist_nboyer((sc_alist_6.cdr))))))))));
+ };
+ apply_subst_nboyer = function(alist, term) {
+ var lst;
+ var temp_temp;
+ return (!(term instanceof sc_Pair)?((temp_temp = (sc_assq(term, alist))), ((temp_temp!== false)?(temp_temp.cdr):term)):(new sc_Pair((term.car), ((lst = (term.cdr)), ((lst === null)?null:(new sc_Pair((apply_subst_nboyer(alist, (lst.car))), (apply_subst_lst_nboyer(alist, (lst.cdr))))))))));
+ };
+ apply_subst_lst_nboyer = function(alist, lst) {
+ var sc_lst_7;
+ return ((lst === null)?null:(new sc_Pair((apply_subst_nboyer(alist, (lst.car))), ((sc_lst_7 = (lst.cdr)), ((sc_lst_7 === null)?null:(new sc_Pair((apply_subst_nboyer(alist, (sc_lst_7.car))), (apply_subst_lst_nboyer(alist, (sc_lst_7.cdr))))))))));
+ };
+ tautologyp_nboyer = function(sc_x_11, true_lst, false_lst) {
+ var tmp1125;
+ var x;
+ var tmp1126;
+ var sc_x_8;
+ var sc_tmp1125_9;
+ var sc_tmp1126_10;
+ var sc_x_11;
+ var true_lst;
+ var false_lst;
+ while (true) {
+ if ((((sc_tmp1126_10 = (is_term_equal_nboyer(sc_x_11, true_term_nboyer))), ((sc_tmp1126_10!== false)?sc_tmp1126_10:(is_term_member_nboyer(sc_x_11, true_lst))))!== false))
+ return true;
+ else
+ if ((((sc_tmp1125_9 = (is_term_equal_nboyer(sc_x_11, false_term_nboyer))), ((sc_tmp1125_9!== false)?sc_tmp1125_9:(is_term_member_nboyer(sc_x_11, false_lst))))!== false))
+ return false;
+ else
+ if (!(sc_x_11 instanceof sc_Pair))
+ return false;
+ else
+ if (((sc_x_11.car)===if_constructor_nboyer))
+ if ((((sc_x_8 = (sc_x_11.cdr.car)), (tmp1126 = (is_term_equal_nboyer(sc_x_8, true_term_nboyer))), ((tmp1126!== false)?tmp1126:(is_term_member_nboyer(sc_x_8, true_lst))))!== false))
+ (sc_x_11 = (sc_x_11.cdr.cdr.car));
+ else
+ if ((((x = (sc_x_11.cdr.car)), (tmp1125 = (is_term_equal_nboyer(x, false_term_nboyer))), ((tmp1125!== false)?tmp1125:(is_term_member_nboyer(x, false_lst))))!== false))
+ (sc_x_11 = (sc_x_11.cdr.cdr.cdr.car));
+ else
+ if (((tautologyp_nboyer((sc_x_11.cdr.cdr.car), (new sc_Pair((sc_x_11.cdr.car), true_lst)), false_lst))!== false))
+ {
+ (false_lst = (new sc_Pair((sc_x_11.cdr.car), false_lst)));
+ (sc_x_11 = (sc_x_11.cdr.cdr.cdr.car));
+ }
+ else
+ return false;
+ else
+ return false;
+ }
+ };
+ (if_constructor_nboyer = "\u1E9C*");
+ (rewrite_count_nboyer = (0));
+ rewrite_nboyer = function(term) {
+ var term2;
+ var sc_term_12;
+ var lst;
+ var symbol_record;
+ var sc_lst_13;
+ {
+ (++rewrite_count_nboyer);
+ if (!(term instanceof sc_Pair))
+ return term;
+ else
+ {
+ (sc_term_12 = (new sc_Pair((term.car), ((sc_lst_13 = (term.cdr)), ((sc_lst_13 === null)?null:(new sc_Pair((rewrite_nboyer((sc_lst_13.car))), (rewrite_args_nboyer((sc_lst_13.cdr))))))))));
+ (lst = ((symbol_record = (term.car)), (symbol_record[(1)])));
+ while (true) {
+ if ((lst === null))
+ return sc_term_12;
+ else
+ if ((((term2 = ((lst.car).cdr.car)), (unify_subst_nboyer = null), (one_way_unify1_nboyer(sc_term_12, term2)))!== false))
+ return (rewrite_nboyer((apply_subst_nboyer(unify_subst_nboyer, ((lst.car).cdr.cdr.car)))));
+ else
+ (lst = (lst.cdr));
+ }
+ }
+ }
+ };
+ rewrite_args_nboyer = function(lst) {
+ var sc_lst_14;
+ return ((lst === null)?null:(new sc_Pair((rewrite_nboyer((lst.car))), ((sc_lst_14 = (lst.cdr)), ((sc_lst_14 === null)?null:(new sc_Pair((rewrite_nboyer((sc_lst_14.car))), (rewrite_args_nboyer((sc_lst_14.cdr))))))))));
+ };
+ (unify_subst_nboyer = "\u1E9C*");
+ one_way_unify1_nboyer = function(term1, term2) {
+ var lst1;
+ var lst2;
+ var temp_temp;
+ if (!(term2 instanceof sc_Pair))
+ {
+ (temp_temp = (sc_assq(term2, unify_subst_nboyer)));
+ if ((temp_temp!== false))
+ return (is_term_equal_nboyer(term1, (temp_temp.cdr)));
+ else
+ if ((sc_isNumber(term2)))
+ return (sc_isEqual(term1, term2));
+ else
+ {
+ (unify_subst_nboyer = (new sc_Pair((new sc_Pair(term2, term1)), unify_subst_nboyer)));
+ return true;
+ }
+ }
+ else
+ if (!(term1 instanceof sc_Pair))
+ return false;
+ else
+ if (((term1.car)===(term2.car)))
+ {
+ (lst1 = (term1.cdr));
+ (lst2 = (term2.cdr));
+ while (true) {
+ if ((lst1 === null))
+ return (lst2 === null);
+ else
+ if ((lst2 === null))
+ return false;
+ else
+ if (((one_way_unify1_nboyer((lst1.car), (lst2.car)))!== false))
+ {
+ (lst1 = (lst1.cdr));
+ (lst2 = (lst2.cdr));
+ }
+ else
+ return false;
+ }
+ }
+ else
+ return false;
+ };
+ (false_term_nboyer = "\u1E9C*");
+ (true_term_nboyer = "\u1E9C*");
+ trans_of_implies1_nboyer = function(n) {
+ var sc_n_15;
+ return ((sc_isEqual(n, (1)))?(sc_list("\u1E9Cimplies", (0), (1))):(sc_list("\u1E9Cand", (sc_list("\u1E9Cimplies", (n-(1)), n)), ((sc_n_15 = (n-(1))), ((sc_isEqual(sc_n_15, (1)))?(sc_list("\u1E9Cimplies", (0), (1))):(sc_list("\u1E9Cand", (sc_list("\u1E9Cimplies", (sc_n_15-(1)), sc_n_15)), (trans_of_implies1_nboyer((sc_n_15-(1)))))))))));
+ };
+ is_term_equal_nboyer = function(x, y) {
+ var lst1;
+ var lst2;
+ var r2;
+ var r1;
+ if ((x instanceof sc_Pair))
+ if ((y instanceof sc_Pair))
+ if ((((r1 = (x.car)), (r2 = (y.car)), (r1===r2))!== false))
+ {
+ (lst1 = (x.cdr));
+ (lst2 = (y.cdr));
+ while (true) {
+ if ((lst1 === null))
+ return (lst2 === null);
+ else
+ if ((lst2 === null))
+ return false;
+ else
+ if (((is_term_equal_nboyer((lst1.car), (lst2.car)))!== false))
+ {
+ (lst1 = (lst1.cdr));
+ (lst2 = (lst2.cdr));
+ }
+ else
+ return false;
+ }
+ }
+ else
+ return false;
+ else
+ return false;
+ else
+ return (sc_isEqual(x, y));
+ };
+ is_term_member_nboyer = function(x, lst) {
+ var x;
+ var lst;
+ while (true) {
+ if ((lst === null))
+ return false;
+ else
+ if (((is_term_equal_nboyer(x, (lst.car)))!== false))
+ return true;
+ else
+ (lst = (lst.cdr));
+ }
+ };
+ BgL_setupzd2boyerzd2 = function() {
+ var symbol_record;
+ var value;
+ var BgL_sc_symbolzd2record_16zd2;
+ var sym;
+ var sc_sym_17;
+ var term;
+ var lst;
+ var sc_term_18;
+ var sc_term_19;
+ {
+ (BgL_sc_za2symbolzd2recordszd2alistza2_2z00_nboyer = null);
+ (if_constructor_nboyer = (BgL_sc_symbolzd2ze3symbolzd2record_1ze3_nboyer("\u1E9Cif")));
+ (false_term_nboyer = ((sc_term_19 = (new sc_Pair("\u1E9Cf",null))), (!(sc_term_19 instanceof sc_Pair)?sc_term_19:(new sc_Pair((BgL_sc_symbolzd2ze3symbolzd2record_1ze3_nboyer((sc_term_19.car))), (translate_args_nboyer((sc_term_19.cdr))))))));
+ (true_term_nboyer = ((sc_term_18 = (new sc_Pair("\u1E9Ct",null))), (!(sc_term_18 instanceof sc_Pair)?sc_term_18:(new sc_Pair((BgL_sc_symbolzd2ze3symbolzd2record_1ze3_nboyer((sc_term_18.car))), (translate_args_nboyer((sc_term_18.cdr))))))));
+ (lst = sc_const_3_nboyer);
+ while (!(lst === null)) {
+ {
+ (term = (lst.car));
+ if (((term instanceof sc_Pair)&&(((term.car)==="\u1E9Cequal")&&((term.cdr.car) instanceof sc_Pair))))
+ {
+ (sc_sym_17 = ((term.cdr.car).car));
+ (value = (new sc_Pair((!(term instanceof sc_Pair)?term:(new sc_Pair((BgL_sc_symbolzd2ze3symbolzd2record_1ze3_nboyer((term.car))), (translate_args_nboyer((term.cdr)))))), ((sym = ((term.cdr.car).car)), (BgL_sc_symbolzd2record_16zd2 = (BgL_sc_symbolzd2ze3symbolzd2record_1ze3_nboyer(sym))), (BgL_sc_symbolzd2record_16zd2[(1)])))));
+ (symbol_record = (BgL_sc_symbolzd2ze3symbolzd2record_1ze3_nboyer(sc_sym_17)));
+ (symbol_record[(1)] = value);
+ }
+ else
+ (sc_error("ADD-LEMMA did not like term: ", term));
+ (lst = (lst.cdr));
+ }
+ }
+ return true;
+ }
+ };
+ BgL_testzd2boyerzd2 = function(n) {
+ var optrOpnd;
+ var term;
+ var sc_n_20;
+ var answer;
+ var sc_term_21;
+ var sc_term_22;
+ {
+ (rewrite_count_nboyer = (0));
+ (term = sc_const_4_nboyer);
+ (sc_n_20 = n);
+ while (!(sc_n_20=== 0)) {
+ {
+ (term = (sc_list("\u1E9Cor", term, (new sc_Pair("\u1E9Cf",null)))));
+ (--sc_n_20);
+ }
+ }
+ (sc_term_22 = term);
+ if (!(sc_term_22 instanceof sc_Pair))
+ (optrOpnd = sc_term_22);
+ else
+ (optrOpnd = (new sc_Pair((BgL_sc_symbolzd2ze3symbolzd2record_1ze3_nboyer((sc_term_22.car))), (translate_args_nboyer((sc_term_22.cdr))))));
+ (sc_term_21 = (apply_subst_nboyer(((const_nboyer === null)?null:(new sc_Pair((new sc_Pair((const_nboyer.car.car), (translate_term_nboyer((const_nboyer.car.cdr))))), (translate_alist_nboyer((const_nboyer.cdr)))))), optrOpnd)));
+ (answer = (tautologyp_nboyer((rewrite_nboyer(sc_term_21)), null, null)));
+ (sc_write(rewrite_count_nboyer));
+ (sc_display(" rewrites"));
+ (sc_newline());
+ if ((answer!== false))
+ return rewrite_count_nboyer;
+ else
+ return false;
+ }
+ };
+}
+/* Exported Variables */
+var BgL_parsezd2ze3nbzd2treesze3;
+var BgL_earleyzd2benchmarkzd2;
+var BgL_parsezd2ze3parsedzf3zc2;
+var test;
+var BgL_parsezd2ze3treesz31;
+var BgL_makezd2parserzd2;
+/* End Exports */
+
+var const_earley;
+{
+ (const_earley = (new sc_Pair((new sc_Pair("\u1E9Cs",(new sc_Pair((new sc_Pair("\u1E9Ca",null)),(new sc_Pair((new sc_Pair("\u1E9Cs",(new sc_Pair("\u1E9Cs",null)))),null)))))),null)));
+ BgL_makezd2parserzd2 = function(grammar, lexer) {
+ var i;
+ var parser_descr;
+ var def_loop;
+ var nb_nts;
+ var names;
+ var steps;
+ var predictors;
+ var enders;
+ var starters;
+ var nts;
+ var sc_names_1;
+ var sc_steps_2;
+ var sc_predictors_3;
+ var sc_enders_4;
+ var sc_starters_5;
+ var nb_confs;
+ var BgL_sc_defzd2loop_6zd2;
+ var BgL_sc_nbzd2nts_7zd2;
+ var sc_nts_8;
+ var BgL_sc_defzd2loop_9zd2;
+ var ind;
+ {
+ ind = function(nt, sc_nts_10) {
+ var i;
+ {
+ (i = ((sc_nts_10.length)-(1)));
+ while (true) {
+ if ((i>=(0)))
+ if ((sc_isEqual((sc_nts_10[i]), nt)))
+ return i;
+ else
+ (--i);
+ else
+ return false;
+ }
+ }
+ };
+ (sc_nts_8 = ((BgL_sc_defzd2loop_9zd2 = function(defs, sc_nts_11) {
+ var rule_loop;
+ var head;
+ var def;
+ return ((defs instanceof sc_Pair)?((def = (defs.car)), (head = (def.car)), (rule_loop = function(rules, sc_nts_12) {
+ var nt;
+ var l;
+ var sc_nts_13;
+ var rule;
+ if ((rules instanceof sc_Pair))
+ {
+ (rule = (rules.car));
+ (l = rule);
+ (sc_nts_13 = sc_nts_12);
+ while ((l instanceof sc_Pair)) {
+ {
+ (nt = (l.car));
+ (l = (l.cdr));
+ (sc_nts_13 = (((sc_member(nt, sc_nts_13))!== false)?sc_nts_13:(new sc_Pair(nt, sc_nts_13))));
+ }
+ }
+ return (rule_loop((rules.cdr), sc_nts_13));
+ }
+ else
+ return (BgL_sc_defzd2loop_9zd2((defs.cdr), sc_nts_12));
+ }), (rule_loop((def.cdr), (((sc_member(head, sc_nts_11))!== false)?sc_nts_11:(new sc_Pair(head, sc_nts_11)))))):(sc_list2vector((sc_reverse(sc_nts_11)))));
+ }), (BgL_sc_defzd2loop_9zd2(grammar, null))));
+ (BgL_sc_nbzd2nts_7zd2 = (sc_nts_8.length));
+ (nb_confs = (((BgL_sc_defzd2loop_6zd2 = function(defs, BgL_sc_nbzd2confs_14zd2) {
+ var rule_loop;
+ var def;
+ return ((defs instanceof sc_Pair)?((def = (defs.car)), (rule_loop = function(rules, BgL_sc_nbzd2confs_15zd2) {
+ var l;
+ var BgL_sc_nbzd2confs_16zd2;
+ var rule;
+ if ((rules instanceof sc_Pair))
+ {
+ (rule = (rules.car));
+ (l = rule);
+ (BgL_sc_nbzd2confs_16zd2 = BgL_sc_nbzd2confs_15zd2);
+ while ((l instanceof sc_Pair)) {
+ {
+ (l = (l.cdr));
+ (++BgL_sc_nbzd2confs_16zd2);
+ }
+ }
+ return (rule_loop((rules.cdr), (BgL_sc_nbzd2confs_16zd2+(1))));
+ }
+ else
+ return (BgL_sc_defzd2loop_6zd2((defs.cdr), BgL_sc_nbzd2confs_15zd2));
+ }), (rule_loop((def.cdr), BgL_sc_nbzd2confs_14zd2))):BgL_sc_nbzd2confs_14zd2);
+ }), (BgL_sc_defzd2loop_6zd2(grammar, (0))))+BgL_sc_nbzd2nts_7zd2));
+ (sc_starters_5 = (sc_makeVector(BgL_sc_nbzd2nts_7zd2, null)));
+ (sc_enders_4 = (sc_makeVector(BgL_sc_nbzd2nts_7zd2, null)));
+ (sc_predictors_3 = (sc_makeVector(BgL_sc_nbzd2nts_7zd2, null)));
+ (sc_steps_2 = (sc_makeVector(nb_confs, false)));
+ (sc_names_1 = (sc_makeVector(nb_confs, false)));
+ (nts = sc_nts_8);
+ (starters = sc_starters_5);
+ (enders = sc_enders_4);
+ (predictors = sc_predictors_3);
+ (steps = sc_steps_2);
+ (names = sc_names_1);
+ (nb_nts = (sc_nts_8.length));
+ (i = (nb_nts-(1)));
+ while ((i>=(0))) {
+ {
+ (sc_steps_2[i] = (i-nb_nts));
+ (sc_names_1[i] = (sc_list((sc_nts_8[i]), (0))));
+ (sc_enders_4[i] = (sc_list(i)));
+ (--i);
+ }
+ }
+ def_loop = function(defs, conf) {
+ var rule_loop;
+ var head;
+ var def;
+ return ((defs instanceof sc_Pair)?((def = (defs.car)), (head = (def.car)), (rule_loop = function(rules, conf, rule_num) {
+ var i;
+ var sc_i_17;
+ var nt;
+ var l;
+ var sc_conf_18;
+ var sc_i_19;
+ var rule;
+ if ((rules instanceof sc_Pair))
+ {
+ (rule = (rules.car));
+ (names[conf] = (sc_list(head, rule_num)));
+ (sc_i_19 = (ind(head, nts)));
+ (starters[sc_i_19] = (new sc_Pair(conf, (starters[sc_i_19]))));
+ (l = rule);
+ (sc_conf_18 = conf);
+ while ((l instanceof sc_Pair)) {
+ {
+ (nt = (l.car));
+ (steps[sc_conf_18] = (ind(nt, nts)));
+ (sc_i_17 = (ind(nt, nts)));
+ (predictors[sc_i_17] = (new sc_Pair(sc_conf_18, (predictors[sc_i_17]))));
+ (l = (l.cdr));
+ (++sc_conf_18);
+ }
+ }
+ (steps[sc_conf_18] = ((ind(head, nts))-nb_nts));
+ (i = (ind(head, nts)));
+ (enders[i] = (new sc_Pair(sc_conf_18, (enders[i]))));
+ return (rule_loop((rules.cdr), (sc_conf_18+(1)), (rule_num+(1))));
+ }
+ else
+ return (def_loop((defs.cdr), conf));
+ }), (rule_loop((def.cdr), conf, (1)))):undefined);
+ };
+ (def_loop(grammar, (sc_nts_8.length)));
+ (parser_descr = [lexer, sc_nts_8, sc_starters_5, sc_enders_4, sc_predictors_3, sc_steps_2, sc_names_1]);
+ return function(input) {
+ var optrOpnd;
+ var sc_optrOpnd_20;
+ var sc_optrOpnd_21;
+ var sc_optrOpnd_22;
+ var loop1;
+ var BgL_sc_stateza2_23za2;
+ var toks;
+ var BgL_sc_nbzd2nts_24zd2;
+ var sc_steps_25;
+ var sc_enders_26;
+ var state_num;
+ var BgL_sc_statesza2_27za2;
+ var states;
+ var i;
+ var conf;
+ var l;
+ var tok_nts;
+ var sc_i_28;
+ var sc_i_29;
+ var l1;
+ var l2;
+ var tok;
+ var tail1129;
+ var L1125;
+ var goal_enders;
+ var BgL_sc_statesza2_30za2;
+ var BgL_sc_nbzd2nts_31zd2;
+ var BgL_sc_nbzd2confs_32zd2;
+ var nb_toks;
+ var goal_starters;
+ var sc_states_33;
+ var BgL_sc_nbzd2confs_34zd2;
+ var BgL_sc_nbzd2toks_35zd2;
+ var sc_toks_36;
+ var falseHead1128;
+ var sc_names_37;
+ var sc_steps_38;
+ var sc_predictors_39;
+ var sc_enders_40;
+ var sc_starters_41;
+ var sc_nts_42;
+ var lexer;
+ var sc_ind_43;
+ var make_states;
+ var BgL_sc_confzd2setzd2getza2_44za2;
+ var conf_set_merge_new_bang;
+ var conf_set_adjoin;
+ var BgL_sc_confzd2setzd2adjoinza2_45za2;
+ var BgL_sc_confzd2setzd2adjoinza2za2_46z00;
+ var conf_set_union;
+ var forw;
+ var is_parsed;
+ var deriv_trees;
+ var BgL_sc_derivzd2treesza2_47z70;
+ var nb_deriv_trees;
+ var BgL_sc_nbzd2derivzd2treesza2_48za2;
+ {
+ sc_ind_43 = function(nt, sc_nts_49) {
+ var i;
+ {
+ (i = ((sc_nts_49.length)-(1)));
+ while (true) {
+ if ((i>=(0)))
+ if ((sc_isEqual((sc_nts_49[i]), nt)))
+ return i;
+ else
+ (--i);
+ else
+ return false;
+ }
+ }
+ };
+ make_states = function(BgL_sc_nbzd2toks_50zd2, BgL_sc_nbzd2confs_51zd2) {
+ var v;
+ var i;
+ var sc_states_52;
+ {
+ (sc_states_52 = (sc_makeVector((BgL_sc_nbzd2toks_50zd2+(1)), false)));
+ (i = BgL_sc_nbzd2toks_50zd2);
+ while ((i>=(0))) {
+ {
+ (v = (sc_makeVector((BgL_sc_nbzd2confs_51zd2+(1)), false)));
+ (v[(0)] = (-1));
+ (sc_states_52[i] = v);
+ (--i);
+ }
+ }
+ return sc_states_52;
+ }
+ };
+ BgL_sc_confzd2setzd2getza2_44za2 = function(state, BgL_sc_statezd2num_53zd2, sc_conf_54) {
+ var conf_set;
+ var BgL_sc_confzd2set_55zd2;
+ return ((BgL_sc_confzd2set_55zd2 = (state[(sc_conf_54+(1))])), ((BgL_sc_confzd2set_55zd2!== false)?BgL_sc_confzd2set_55zd2:((conf_set = (sc_makeVector((BgL_sc_statezd2num_53zd2+(6)), false))), (conf_set[(1)] = (-3)), (conf_set[(2)] = (-1)), (conf_set[(3)] = (-1)), (conf_set[(4)] = (-1)), (state[(sc_conf_54+(1))] = conf_set), conf_set)));
+ };
+ conf_set_merge_new_bang = function(conf_set) {
+ return ((conf_set[((conf_set[(1)])+(5))] = (conf_set[(4)])), (conf_set[(1)] = (conf_set[(3)])), (conf_set[(3)] = (-1)), (conf_set[(4)] = (-1)));
+ };
+ conf_set_adjoin = function(state, conf_set, sc_conf_56, i) {
+ var tail;
+ return ((tail = (conf_set[(3)])), (conf_set[(i+(5))] = (-1)), (conf_set[(tail+(5))] = i), (conf_set[(3)] = i), ((tail<(0))?((conf_set[(0)] = (state[(0)])), (state[(0)] = sc_conf_56)):undefined));
+ };
+ BgL_sc_confzd2setzd2adjoinza2_45za2 = function(sc_states_57, BgL_sc_statezd2num_58zd2, l, i) {
+ var conf_set;
+ var sc_conf_59;
+ var l1;
+ var state;
+ {
+ (state = (sc_states_57[BgL_sc_statezd2num_58zd2]));
+ (l1 = l);
+ while ((l1 instanceof sc_Pair)) {
+ {
+ (sc_conf_59 = (l1.car));
+ (conf_set = (BgL_sc_confzd2setzd2getza2_44za2(state, BgL_sc_statezd2num_58zd2, sc_conf_59)));
+ if (((conf_set[(i+(5))])=== false))
+ {
+ (conf_set_adjoin(state, conf_set, sc_conf_59, i));
+ (l1 = (l1.cdr));
+ }
+ else
+ (l1 = (l1.cdr));
+ }
+ }
+ return undefined;
+ }
+ };
+ BgL_sc_confzd2setzd2adjoinza2za2_46z00 = function(sc_states_60, BgL_sc_statesza2_61za2, BgL_sc_statezd2num_62zd2, sc_conf_63, i) {
+ var BgL_sc_confzd2setza2_64z70;
+ var BgL_sc_stateza2_65za2;
+ var conf_set;
+ var state;
+ return ((state = (sc_states_60[BgL_sc_statezd2num_62zd2])), ((((conf_set = (state[(sc_conf_63+(1))])), ((conf_set!== false)?(conf_set[(i+(5))]):false))!== false)?((BgL_sc_stateza2_65za2 = (BgL_sc_statesza2_61za2[BgL_sc_statezd2num_62zd2])), (BgL_sc_confzd2setza2_64z70 = (BgL_sc_confzd2setzd2getza2_44za2(BgL_sc_stateza2_65za2, BgL_sc_statezd2num_62zd2, sc_conf_63))), (((BgL_sc_confzd2setza2_64z70[(i+(5))])=== false)?(conf_set_adjoin(BgL_sc_stateza2_65za2, BgL_sc_confzd2setza2_64z70, sc_conf_63, i)):undefined), true):false));
+ };
+ conf_set_union = function(state, conf_set, sc_conf_66, other_set) {
+ var i;
+ {
+ (i = (other_set[(2)]));
+ while ((i>=(0))) {
+ if (((conf_set[(i+(5))])=== false))
+ {
+ (conf_set_adjoin(state, conf_set, sc_conf_66, i));
+ (i = (other_set[(i+(5))]));
+ }
+ else
+ (i = (other_set[(i+(5))]));
+ }
+ return undefined;
+ }
+ };
+ forw = function(sc_states_67, BgL_sc_statezd2num_68zd2, sc_starters_69, sc_enders_70, sc_predictors_71, sc_steps_72, sc_nts_73) {
+ var next_set;
+ var next;
+ var conf_set;
+ var ender;
+ var l;
+ var starter_set;
+ var starter;
+ var sc_l_74;
+ var sc_loop1_75;
+ var head;
+ var BgL_sc_confzd2set_76zd2;
+ var BgL_sc_statezd2num_77zd2;
+ var state;
+ var sc_states_78;
+ var preds;
+ var BgL_sc_confzd2set_79zd2;
+ var step;
+ var sc_conf_80;
+ var BgL_sc_nbzd2nts_81zd2;
+ var sc_state_82;
+ {
+ (sc_state_82 = (sc_states_67[BgL_sc_statezd2num_68zd2]));
+ (BgL_sc_nbzd2nts_81zd2 = (sc_nts_73.length));
+ while (true) {
+ {
+ (sc_conf_80 = (sc_state_82[(0)]));
+ if ((sc_conf_80>=(0)))
+ {
+ (step = (sc_steps_72[sc_conf_80]));
+ (BgL_sc_confzd2set_79zd2 = (sc_state_82[(sc_conf_80+(1))]));
+ (head = (BgL_sc_confzd2set_79zd2[(4)]));
+ (sc_state_82[(0)] = (BgL_sc_confzd2set_79zd2[(0)]));
+ (conf_set_merge_new_bang(BgL_sc_confzd2set_79zd2));
+ if ((step>=(0)))
+ {
+ (sc_l_74 = (sc_starters_69[step]));
+ while ((sc_l_74 instanceof sc_Pair)) {
+ {
+ (starter = (sc_l_74.car));
+ (starter_set = (BgL_sc_confzd2setzd2getza2_44za2(sc_state_82, BgL_sc_statezd2num_68zd2, starter)));
+ if (((starter_set[(BgL_sc_statezd2num_68zd2+(5))])=== false))
+ {
+ (conf_set_adjoin(sc_state_82, starter_set, starter, BgL_sc_statezd2num_68zd2));
+ (sc_l_74 = (sc_l_74.cdr));
+ }
+ else
+ (sc_l_74 = (sc_l_74.cdr));
+ }
+ }
+ (l = (sc_enders_70[step]));
+ while ((l instanceof sc_Pair)) {
+ {
+ (ender = (l.car));
+ if ((((conf_set = (sc_state_82[(ender+(1))])), ((conf_set!== false)?(conf_set[(BgL_sc_statezd2num_68zd2+(5))]):false))!== false))
+ {
+ (next = (sc_conf_80+(1)));
+ (next_set = (BgL_sc_confzd2setzd2getza2_44za2(sc_state_82, BgL_sc_statezd2num_68zd2, next)));
+ (conf_set_union(sc_state_82, next_set, next, BgL_sc_confzd2set_79zd2));
+ (l = (l.cdr));
+ }
+ else
+ (l = (l.cdr));
+ }
+ }
+ }
+ else
+ {
+ (preds = (sc_predictors_71[(step+BgL_sc_nbzd2nts_81zd2)]));
+ (sc_states_78 = sc_states_67);
+ (state = sc_state_82);
+ (BgL_sc_statezd2num_77zd2 = BgL_sc_statezd2num_68zd2);
+ (BgL_sc_confzd2set_76zd2 = BgL_sc_confzd2set_79zd2);
+ sc_loop1_75 = function(l) {
+ var sc_state_83;
+ var BgL_sc_nextzd2set_84zd2;
+ var sc_next_85;
+ var pred_set;
+ var i;
+ var pred;
+ if ((l instanceof sc_Pair))
+ {
+ (pred = (l.car));
+ (i = head);
+ while ((i>=(0))) {
+ {
+ (pred_set = ((sc_state_83 = (sc_states_78[i])), (sc_state_83[(pred+(1))])));
+ if ((pred_set!== false))
+ {
+ (sc_next_85 = (pred+(1)));
+ (BgL_sc_nextzd2set_84zd2 = (BgL_sc_confzd2setzd2getza2_44za2(state, BgL_sc_statezd2num_77zd2, sc_next_85)));
+ (conf_set_union(state, BgL_sc_nextzd2set_84zd2, sc_next_85, pred_set));
+ }
+ (i = (BgL_sc_confzd2set_76zd2[(i+(5))]));
+ }
+ }
+ return (sc_loop1_75((l.cdr)));
+ }
+ else
+ return undefined;
+ };
+ (sc_loop1_75(preds));
+ }
+ }
+ else
+ return undefined;
+ }
+ }
+ }
+ };
+ is_parsed = function(nt, i, j, sc_nts_86, sc_enders_87, sc_states_88) {
+ var conf_set;
+ var state;
+ var sc_conf_89;
+ var l;
+ var BgL_sc_ntza2_90za2;
+ {
+ (BgL_sc_ntza2_90za2 = (sc_ind_43(nt, sc_nts_86)));
+ if ((BgL_sc_ntza2_90za2!== false))
+ {
+ (sc_nts_86.length);
+ (l = (sc_enders_87[BgL_sc_ntza2_90za2]));
+ while (true) {
+ if ((l instanceof sc_Pair))
+ {
+ (sc_conf_89 = (l.car));
+ if ((((state = (sc_states_88[j])), (conf_set = (state[(sc_conf_89+(1))])), ((conf_set!== false)?(conf_set[(i+(5))]):false))!== false))
+ return true;
+ else
+ (l = (l.cdr));
+ }
+ else
+ return false;
+ }
+ }
+ else
+ return false;
+ }
+ };
+ deriv_trees = function(sc_conf_91, i, j, sc_enders_92, sc_steps_93, sc_names_94, sc_toks_95, sc_states_96, BgL_sc_nbzd2nts_97zd2) {
+ var sc_loop1_98;
+ var prev;
+ var name;
+ return ((name = (sc_names_94[sc_conf_91])), ((name!== false)?((sc_conf_91<BgL_sc_nbzd2nts_97zd2)?(sc_list((sc_list(name, ((sc_toks_95[i]).car))))):(sc_list((sc_list(name))))):((prev = (sc_conf_91-(1))), (sc_loop1_98 = function(l1, l2) {
+ var loop2;
+ var ender_set;
+ var state;
+ var ender;
+ var l1;
+ var l2;
+ while (true) {
+ if ((l1 instanceof sc_Pair))
+ {
+ (ender = (l1.car));
+ (ender_set = ((state = (sc_states_96[j])), (state[(ender+(1))])));
+ if ((ender_set!== false))
+ {
+ loop2 = function(k, l2) {
+ var loop3;
+ var ender_trees;
+ var prev_trees;
+ var conf_set;
+ var sc_state_99;
+ var k;
+ var l2;
+ while (true) {
+ if ((k>=(0)))
+ if (((k>=i)&&(((sc_state_99 = (sc_states_96[k])), (conf_set = (sc_state_99[(prev+(1))])), ((conf_set!== false)?(conf_set[(i+(5))]):false))!== false)))
+ {
+ (prev_trees = (deriv_trees(prev, i, k, sc_enders_92, sc_steps_93, sc_names_94, sc_toks_95, sc_states_96, BgL_sc_nbzd2nts_97zd2)));
+ (ender_trees = (deriv_trees(ender, k, j, sc_enders_92, sc_steps_93, sc_names_94, sc_toks_95, sc_states_96, BgL_sc_nbzd2nts_97zd2)));
+ loop3 = function(l3, l2) {
+ var l4;
+ var sc_l2_100;
+ var ender_tree;
+ if ((l3 instanceof sc_Pair))
+ {
+ (ender_tree = (sc_list((l3.car))));
+ (l4 = prev_trees);
+ (sc_l2_100 = l2);
+ while ((l4 instanceof sc_Pair)) {
+ {
+ (sc_l2_100 = (new sc_Pair((sc_append((l4.car), ender_tree)), sc_l2_100)));
+ (l4 = (l4.cdr));
+ }
+ }
+ return (loop3((l3.cdr), sc_l2_100));
+ }
+ else
+ return (loop2((ender_set[(k+(5))]), l2));
+ };
+ return (loop3(ender_trees, l2));
+ }
+ else
+ (k = (ender_set[(k+(5))]));
+ else
+ return (sc_loop1_98((l1.cdr), l2));
+ }
+ };
+ return (loop2((ender_set[(2)]), l2));
+ }
+ else
+ (l1 = (l1.cdr));
+ }
+ else
+ return l2;
+ }
+ }), (sc_loop1_98((sc_enders_92[(sc_steps_93[prev])]), null)))));
+ };
+ BgL_sc_derivzd2treesza2_47z70 = function(nt, i, j, sc_nts_101, sc_enders_102, sc_steps_103, sc_names_104, sc_toks_105, sc_states_106) {
+ var conf_set;
+ var state;
+ var sc_conf_107;
+ var l;
+ var trees;
+ var BgL_sc_nbzd2nts_108zd2;
+ var BgL_sc_ntza2_109za2;
+ {
+ (BgL_sc_ntza2_109za2 = (sc_ind_43(nt, sc_nts_101)));
+ if ((BgL_sc_ntza2_109za2!== false))
+ {
+ (BgL_sc_nbzd2nts_108zd2 = (sc_nts_101.length));
+ (l = (sc_enders_102[BgL_sc_ntza2_109za2]));
+ (trees = null);
+ while ((l instanceof sc_Pair)) {
+ {
+ (sc_conf_107 = (l.car));
+ if ((((state = (sc_states_106[j])), (conf_set = (state[(sc_conf_107+(1))])), ((conf_set!== false)?(conf_set[(i+(5))]):false))!== false))
+ {
+ (l = (l.cdr));
+ (trees = (sc_append((deriv_trees(sc_conf_107, i, j, sc_enders_102, sc_steps_103, sc_names_104, sc_toks_105, sc_states_106, BgL_sc_nbzd2nts_108zd2)), trees)));
+ }
+ else
+ (l = (l.cdr));
+ }
+ }
+ return trees;
+ }
+ else
+ return false;
+ }
+ };
+ nb_deriv_trees = function(sc_conf_110, i, j, sc_enders_111, sc_steps_112, sc_toks_113, sc_states_114, BgL_sc_nbzd2nts_115zd2) {
+ var sc_loop1_116;
+ var tmp1124;
+ var prev;
+ return ((prev = (sc_conf_110-(1))), ((((tmp1124 = (sc_conf_110<BgL_sc_nbzd2nts_115zd2)), ((tmp1124!== false)?tmp1124:((sc_steps_112[prev])<(0))))!== false)?(1):((sc_loop1_116 = function(l, sc_n_118) {
+ var nb_ender_trees;
+ var nb_prev_trees;
+ var conf_set;
+ var state;
+ var k;
+ var n;
+ var ender_set;
+ var sc_state_117;
+ var ender;
+ var l;
+ var sc_n_118;
+ while (true) {
+ if ((l instanceof sc_Pair))
+ {
+ (ender = (l.car));
+ (ender_set = ((sc_state_117 = (sc_states_114[j])), (sc_state_117[(ender+(1))])));
+ if ((ender_set!== false))
+ {
+ (k = (ender_set[(2)]));
+ (n = sc_n_118);
+ while ((k>=(0))) {
+ if (((k>=i)&&(((state = (sc_states_114[k])), (conf_set = (state[(prev+(1))])), ((conf_set!== false)?(conf_set[(i+(5))]):false))!== false)))
+ {
+ (nb_prev_trees = (nb_deriv_trees(prev, i, k, sc_enders_111, sc_steps_112, sc_toks_113, sc_states_114, BgL_sc_nbzd2nts_115zd2)));
+ (nb_ender_trees = (nb_deriv_trees(ender, k, j, sc_enders_111, sc_steps_112, sc_toks_113, sc_states_114, BgL_sc_nbzd2nts_115zd2)));
+ (k = (ender_set[(k+(5))]));
+ (n +=(nb_prev_trees*nb_ender_trees));
+ }
+ else
+ (k = (ender_set[(k+(5))]));
+ }
+ return (sc_loop1_116((l.cdr), n));
+ }
+ else
+ (l = (l.cdr));
+ }
+ else
+ return sc_n_118;
+ }
+ }), (sc_loop1_116((sc_enders_111[(sc_steps_112[prev])]), (0))))));
+ };
+ BgL_sc_nbzd2derivzd2treesza2_48za2 = function(nt, i, j, sc_nts_119, sc_enders_120, sc_steps_121, sc_toks_122, sc_states_123) {
+ var conf_set;
+ var state;
+ var sc_conf_124;
+ var l;
+ var nb_trees;
+ var BgL_sc_nbzd2nts_125zd2;
+ var BgL_sc_ntza2_126za2;
+ {
+ (BgL_sc_ntza2_126za2 = (sc_ind_43(nt, sc_nts_119)));
+ if ((BgL_sc_ntza2_126za2!== false))
+ {
+ (BgL_sc_nbzd2nts_125zd2 = (sc_nts_119.length));
+ (l = (sc_enders_120[BgL_sc_ntza2_126za2]));
+ (nb_trees = (0));
+ while ((l instanceof sc_Pair)) {
+ {
+ (sc_conf_124 = (l.car));
+ if ((((state = (sc_states_123[j])), (conf_set = (state[(sc_conf_124+(1))])), ((conf_set!== false)?(conf_set[(i+(5))]):false))!== false))
+ {
+ (l = (l.cdr));
+ (nb_trees = ((nb_deriv_trees(sc_conf_124, i, j, sc_enders_120, sc_steps_121, sc_toks_122, sc_states_123, BgL_sc_nbzd2nts_125zd2))+nb_trees));
+ }
+ else
+ (l = (l.cdr));
+ }
+ }
+ return nb_trees;
+ }
+ else
+ return false;
+ }
+ };
+ (lexer = (parser_descr[(0)]));
+ (sc_nts_42 = (parser_descr[(1)]));
+ (sc_starters_41 = (parser_descr[(2)]));
+ (sc_enders_40 = (parser_descr[(3)]));
+ (sc_predictors_39 = (parser_descr[(4)]));
+ (sc_steps_38 = (parser_descr[(5)]));
+ (sc_names_37 = (parser_descr[(6)]));
+ (falseHead1128 = (new sc_Pair(null, null)));
+ (L1125 = (lexer(input)));
+ (tail1129 = falseHead1128);
+ while (!(L1125 === null)) {
+ {
+ (tok = (L1125.car));
+ (l1 = (tok.cdr));
+ (l2 = null);
+ while ((l1 instanceof sc_Pair)) {
+ {
+ (sc_i_29 = (sc_ind_43((l1.car), sc_nts_42)));
+ if ((sc_i_29!== false))
+ {
+ (l1 = (l1.cdr));
+ (l2 = (new sc_Pair(sc_i_29, l2)));
+ }
+ else
+ (l1 = (l1.cdr));
+ }
+ }
+ (sc_optrOpnd_22 = (new sc_Pair((tok.car), (sc_reverse(l2)))));
+ (sc_optrOpnd_21 = (new sc_Pair(sc_optrOpnd_22, null)));
+ (tail1129.cdr = sc_optrOpnd_21);
+ (tail1129 = (tail1129.cdr));
+ (L1125 = (L1125.cdr));
+ }
+ }
+ (sc_optrOpnd_20 = (falseHead1128.cdr));
+ (sc_toks_36 = (sc_list2vector(sc_optrOpnd_20)));
+ (BgL_sc_nbzd2toks_35zd2 = (sc_toks_36.length));
+ (BgL_sc_nbzd2confs_34zd2 = (sc_steps_38.length));
+ (sc_states_33 = (make_states(BgL_sc_nbzd2toks_35zd2, BgL_sc_nbzd2confs_34zd2)));
+ (goal_starters = (sc_starters_41[(0)]));
+ (BgL_sc_confzd2setzd2adjoinza2_45za2(sc_states_33, (0), goal_starters, (0)));
+ (forw(sc_states_33, (0), sc_starters_41, sc_enders_40, sc_predictors_39, sc_steps_38, sc_nts_42));
+ (sc_i_28 = (0));
+ while ((sc_i_28<BgL_sc_nbzd2toks_35zd2)) {
+ {
+ (tok_nts = ((sc_toks_36[sc_i_28]).cdr));
+ (BgL_sc_confzd2setzd2adjoinza2_45za2(sc_states_33, (sc_i_28+(1)), tok_nts, sc_i_28));
+ (forw(sc_states_33, (sc_i_28+(1)), sc_starters_41, sc_enders_40, sc_predictors_39, sc_steps_38, sc_nts_42));
+ (++sc_i_28);
+ }
+ }
+ (nb_toks = (sc_toks_36.length));
+ (BgL_sc_nbzd2confs_32zd2 = (sc_steps_38.length));
+ (BgL_sc_nbzd2nts_31zd2 = (sc_nts_42.length));
+ (BgL_sc_statesza2_30za2 = (make_states(nb_toks, BgL_sc_nbzd2confs_32zd2)));
+ (goal_enders = (sc_enders_40[(0)]));
+ (l = goal_enders);
+ while ((l instanceof sc_Pair)) {
+ {
+ (conf = (l.car));
+ (BgL_sc_confzd2setzd2adjoinza2za2_46z00(sc_states_33, BgL_sc_statesza2_30za2, nb_toks, conf, (0)));
+ (l = (l.cdr));
+ }
+ }
+ (i = nb_toks);
+ while ((i>=(0))) {
+ {
+ (states = sc_states_33);
+ (BgL_sc_statesza2_27za2 = BgL_sc_statesza2_30za2);
+ (state_num = i);
+ (sc_enders_26 = sc_enders_40);
+ (sc_steps_25 = sc_steps_38);
+ (BgL_sc_nbzd2nts_24zd2 = BgL_sc_nbzd2nts_31zd2);
+ (toks = sc_toks_36);
+ (BgL_sc_stateza2_23za2 = (BgL_sc_statesza2_30za2[i]));
+ loop1 = function() {
+ var sc_loop1_127;
+ var prev;
+ var BgL_sc_statesza2_128za2;
+ var sc_states_129;
+ var j;
+ var i;
+ var sc_i_130;
+ var head;
+ var conf_set;
+ var sc_conf_131;
+ {
+ (sc_conf_131 = (BgL_sc_stateza2_23za2[(0)]));
+ if ((sc_conf_131>=(0)))
+ {
+ (conf_set = (BgL_sc_stateza2_23za2[(sc_conf_131+(1))]));
+ (head = (conf_set[(4)]));
+ (BgL_sc_stateza2_23za2[(0)] = (conf_set[(0)]));
+ (conf_set_merge_new_bang(conf_set));
+ (sc_i_130 = head);
+ while ((sc_i_130>=(0))) {
+ {
+ (i = sc_i_130);
+ (j = state_num);
+ (sc_states_129 = states);
+ (BgL_sc_statesza2_128za2 = BgL_sc_statesza2_27za2);
+ (prev = (sc_conf_131-(1)));
+ if (((sc_conf_131>=BgL_sc_nbzd2nts_24zd2)&&((sc_steps_25[prev])>=(0))))
+ {
+ sc_loop1_127 = function(l) {
+ var k;
+ var ender_set;
+ var state;
+ var ender;
+ var l;
+ while (true) {
+ if ((l instanceof sc_Pair))
+ {
+ (ender = (l.car));
+ (ender_set = ((state = (sc_states_129[j])), (state[(ender+(1))])));
+ if ((ender_set!== false))
+ {
+ (k = (ender_set[(2)]));
+ while ((k>=(0))) {
+ {
+ if ((k>=i))
+ if (((BgL_sc_confzd2setzd2adjoinza2za2_46z00(sc_states_129, BgL_sc_statesza2_128za2, k, prev, i))!== false))
+ (BgL_sc_confzd2setzd2adjoinza2za2_46z00(sc_states_129, BgL_sc_statesza2_128za2, j, ender, k));
+ (k = (ender_set[(k+(5))]));
+ }
+ }
+ return (sc_loop1_127((l.cdr)));
+ }
+ else
+ (l = (l.cdr));
+ }
+ else
+ return undefined;
+ }
+ };
+ (sc_loop1_127((sc_enders_26[(sc_steps_25[prev])])));
+ }
+ (sc_i_130 = (conf_set[(sc_i_130+(5))]));
+ }
+ }
+ return (loop1());
+ }
+ else
+ return undefined;
+ }
+ };
+ (loop1());
+ (--i);
+ }
+ }
+ (optrOpnd = BgL_sc_statesza2_30za2);
+ return [sc_nts_42, sc_starters_41, sc_enders_40, sc_predictors_39, sc_steps_38, sc_names_37, sc_toks_36, optrOpnd, is_parsed, BgL_sc_derivzd2treesza2_47z70, BgL_sc_nbzd2derivzd2treesza2_48za2];
+ }
+ };
+ }
+ };
+ BgL_parsezd2ze3parsedzf3zc2 = function(parse, nt, i, j) {
+ var is_parsed;
+ var states;
+ var enders;
+ var nts;
+ return ((nts = (parse[(0)])), (enders = (parse[(2)])), (states = (parse[(7)])), (is_parsed = (parse[(8)])), (is_parsed(nt, i, j, nts, enders, states)));
+ };
+ BgL_parsezd2ze3treesz31 = function(parse, nt, i, j) {
+ var BgL_sc_derivzd2treesza2_132z70;
+ var states;
+ var toks;
+ var names;
+ var steps;
+ var enders;
+ var nts;
+ return ((nts = (parse[(0)])), (enders = (parse[(2)])), (steps = (parse[(4)])), (names = (parse[(5)])), (toks = (parse[(6)])), (states = (parse[(7)])), (BgL_sc_derivzd2treesza2_132z70 = (parse[(9)])), (BgL_sc_derivzd2treesza2_132z70(nt, i, j, nts, enders, steps, names, toks, states)));
+ };
+ BgL_parsezd2ze3nbzd2treesze3 = function(parse, nt, i, j) {
+ var BgL_sc_nbzd2derivzd2treesza2_133za2;
+ var states;
+ var toks;
+ var steps;
+ var enders;
+ var nts;
+ return ((nts = (parse[(0)])), (enders = (parse[(2)])), (steps = (parse[(4)])), (toks = (parse[(6)])), (states = (parse[(7)])), (BgL_sc_nbzd2derivzd2treesza2_133za2 = (parse[(10)])), (BgL_sc_nbzd2derivzd2treesza2_133za2(nt, i, j, nts, enders, steps, toks, states)));
+ };
+ test = function(k) {
+ var x;
+ var p;
+ return ((p = (BgL_makezd2parserzd2(const_earley, function(l) {
+ var sc_x_134;
+ var tail1134;
+ var L1130;
+ var falseHead1133;
+ {
+ (falseHead1133 = (new sc_Pair(null, null)));
+ (tail1134 = falseHead1133);
+ (L1130 = l);
+ while (!(L1130 === null)) {
+ {
+ (tail1134.cdr = (new sc_Pair(((sc_x_134 = (L1130.car)), (sc_list(sc_x_134, sc_x_134))), null)));
+ (tail1134 = (tail1134.cdr));
+ (L1130 = (L1130.cdr));
+ }
+ }
+ return (falseHead1133.cdr);
+ }
+ }))), (x = (p((sc_vector2list((sc_makeVector(k, "\u1E9Ca"))))))), (sc_length((BgL_parsezd2ze3treesz31(x, "\u1E9Cs", (0), k)))));
+ };
+ BgL_earleyzd2benchmarkzd2 = function() {
+ var args = null;
+ for (var sc_tmp = arguments.length - 1; sc_tmp >= 0; sc_tmp--) {
+ args = sc_cons(arguments[sc_tmp], args);
+ }
+ var k;
+ return ((k = ((args === null)?(7):(args.car))), (BgL_runzd2benchmarkzd2("earley", (1), function() {
+ return (test(k));
+ }, function(result) {
+ return ((sc_display(result)), (sc_newline()), result == 132);
+ })));
+ };
+}
+
+
+/************* END OF GENERATED CODE *************/
+// Invoke this function to run a benchmark.
+// The first argument is a string identifying the benchmark.
+// The second argument is the number of times to run the benchmark.
+// The third argument is a function that runs the benchmark.
+// The fourth argument is a unary function that warns if the result
+// returned by the benchmark is incorrect.
+//
+// Example:
+// RunBenchmark("new Array()",
+// 1,
+// function () { new Array(1000000); }
+// function (v) {
+// return (v instanceof Array) && (v.length == 1000000);
+// });
+
+SC_DEFAULT_OUT = new sc_GenericOutputPort(function(s) {});
+SC_ERROR_OUT = SC_DEFAULT_OUT;
+
+function RunBenchmark(name, count, run, warn) {
+ for (var n = 0; n < count; ++n) {
+ result = run();
+ if (!warn(result)) {
+ throw new Error("Earley or Boyer did incorrect number of rewrites");
+ }
+ }
+}
+
+var BgL_runzd2benchmarkzd2 = RunBenchmark;
diff --git a/js/src/octane/gbemu-part1.js b/js/src/octane/gbemu-part1.js
new file mode 100644
index 0000000000..10f19e4a19
--- /dev/null
+++ b/js/src/octane/gbemu-part1.js
@@ -0,0 +1,1350 @@
+// Portions copyright 2013 Google, Inc
+
+// Copyright (C) 2010 - 2012 Grant Galitz
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License version 2 as
+// published by the Free Software Foundation.
+// The full license is available at http://www.gnu.org/licenses/gpl.html
+// This program is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+// See the GNU General Public License for more details.
+
+// The code has been adapted for use as a benchmark by Google.
+
+var GameboyBenchmark = new BenchmarkSuite('Gameboy', [26288412],
+ [new Benchmark('Gameboy',
+ false,
+ false,
+ 20,
+ runGameboy,
+ setupGameboy,
+ tearDownGameboy,
+ null,
+ 4)]);
+
+var decoded_gameboy_rom = null;
+
+function setupGameboy() {
+
+ // Check if all the types required by the code are supported.
+ // If not, throw exception and quit.
+ if (!(typeof Uint8Array != "undefined" &&
+ typeof Int8Array != "undefined" &&
+ typeof Float32Array != "undefined" &&
+ typeof Int32Array != "undefined") ) {
+ throw "TypedArrayUnsupported";
+ }
+ decoded_gameboy_rom = base64_decode(gameboy_rom);
+ rom = null;
+}
+
+function runGameboy() {
+ start(new GameBoyCanvas(), decoded_gameboy_rom);
+
+ gameboy.instructions = 0;
+ gameboy.totalInstructions = 250000;
+
+ while (gameboy.instructions <= gameboy.totalInstructions) {
+ gameboy.run();
+ GameBoyAudioNode.run();
+ }
+
+ resetGlobalVariables();
+}
+
+function tearDownGameboy() {
+ decoded_gameboy_rom = null;
+ expectedGameboyStateStr = null;
+}
+
+var expectedGameboyStateStr =
+ '{"registerA":160,"registerB":255,"registerC":255,"registerE":11,' +
+ '"registersHL":51600,"programCounter":24309,"stackPointer":49706,' +
+ '"sumROM":10171578,"sumMemory":3435856,"sumMBCRam":234598,"sumVRam":0}';
+
+// Start of browser emulation.
+
+var GameBoyWindow = { };
+
+function GameBoyContext() {
+ this.createBuffer = function() {
+ return new Buffer();
+ }
+ this.createImageData = function (w, h) {
+ var result = {};
+ // The following line was updated since Octane 1.0 to avoid OOB access.
+ result.data = new Uint8Array(w * h * 4);
+ return result;
+ }
+ this.putImageData = function (buffer, x, y) {
+ var sum = 0;
+ for (var i = 0; i < buffer.data.length; i++) {
+ sum += i * buffer.data[i];
+ sum = sum % 1000;
+ }
+ }
+ this.drawImage = function () { }
+};
+
+function GameBoyCanvas() {
+ this.getContext = function() {
+ return new GameBoyContext();
+ }
+ this.width = 160;
+ this.height = 144;
+ this.style = { visibility: "visibile" };
+}
+
+function cout(message, colorIndex) {
+}
+
+function clear_terminal() {
+}
+
+var GameBoyAudioNode = {
+ bufferSize : 0,
+ onaudioprocess : null ,
+ connect : function () {},
+ run: function() {
+ var event = {outputBuffer : this.outputBuffer};
+ this.onaudioprocess(event);
+ }
+};
+
+function GameBoyAudioContext () {
+ this.createBufferSource = function() {
+ return { noteOn : function () {}, connect : function() {}};
+ }
+ this.sampleRate = 48000;
+ this.destination = {}
+ this.createBuffer = function (channels, len, sampleRate) {
+ return { gain : 1,
+ numberOfChannels : 1,
+ length : 1,
+ duration : 0.000020833333110203966,
+ sampleRate : 48000}
+ }
+ this.createJavaScriptNode = function (bufferSize, inputChannels, outputChannels) {
+ GameBoyAudioNode.bufferSize = bufferSize;
+ GameBoyAudioNode.outputBuffer = {
+ getChannelData : function (i) {return this.channelData[i];},
+ channelData : []
+ };
+ for (var i = 0; i < outputChannels; i++) {
+ GameBoyAudioNode.outputBuffer.channelData[i] = new Float32Array(bufferSize);
+ }
+ return GameBoyAudioNode;
+ }
+}
+
+var mock_date_time_counter = 0;
+
+function new_Date() {
+ return {
+ getTime: function() {
+ mock_date_time_counter += 16;
+ return mock_date_time_counter;
+ }
+ };
+}
+
+// End of browser emulation.
+
+// Start of helper functions.
+
+function checkFinalState() {
+ function sum(a) {
+ var result = 0;
+ for (var i = 0; i < a.length; i++) {
+ result += a[i];
+ }
+ return result;
+ }
+ var state = {
+ registerA: gameboy.registerA,
+ registerB: gameboy.registerB,
+ registerC: gameboy.registerC,
+ registerE: gameboy.registerE,
+ registerF: gameboy.registerF,
+ registersHL: gameboy.registersHL,
+ programCounter: gameboy.programCounter,
+ stackPointer: gameboy.stackPointer,
+ sumROM : sum(gameboy.fromTypedArray(gameboy.ROM)),
+ sumMemory: sum(gameboy.fromTypedArray(gameboy.memory)),
+ sumMBCRam: sum(gameboy.fromTypedArray(gameboy.MBCRam)),
+ sumVRam: sum(gameboy.fromTypedArray(gameboy.VRam))
+ };
+ var expectedState = JSON.parse(expectedGameboyStateStr);
+ for (var prop in expectedState) {
+ if (state[prop] !== expectedState[prop]) {
+ var stateStr = JSON.stringify(state);
+ alert("Incorrect final state of processor:\n" +
+ " actual " + stateStr + "\n" +
+ " expected " + expectedGameboyStateStr);
+ }
+ }
+}
+
+
+function resetGlobalVariables () {
+ //Audio API Event Handler:
+ audioContextHandle = null;
+ audioNode = null;
+ audioSource = null;
+ launchedContext = false;
+ audioContextSampleBuffer = [];
+ resampled = [];
+ webAudioMinBufferSize = 15000;
+ webAudioMaxBufferSize = 25000;
+ webAudioActualSampleRate = 44100;
+ XAudioJSSampleRate = 0;
+ webAudioMono = false;
+ XAudioJSVolume = 1;
+ resampleControl = null;
+ audioBufferSize = 0;
+ resampleBufferStart = 0;
+ resampleBufferEnd = 0;
+ resampleBufferSize = 2;
+
+ gameboy = null; //GameBoyCore object.
+ gbRunInterval = null; //GameBoyCore Timer
+}
+
+
+// End of helper functions.
+
+// Original code from Grant Galitz follows.
+// Modifications by Google are marked in comments.
+
+// Start of js/other/base64.js file.
+
+var toBase64 = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z",
+ "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z",
+ "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "+" , "/", "="];
+var fromBase64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
+function base64(data) {
+ try {
+ // The following line was modified for benchmarking:
+ var base64 = GameBoyWindow.btoa(data); //Use this native function when it's available, as it's a magnitude faster than the non-native code below.
+ }
+ catch (error) {
+ //Defaulting to non-native base64 encoding...
+ var base64 = "";
+ var dataLength = data.length;
+ if (dataLength > 0) {
+ var bytes = [0, 0, 0];
+ var index = 0;
+ var remainder = dataLength % 3;
+ while (data.length % 3 > 0) {
+ //Make sure we don't do fuzzy math in the next loop...
+ data[data.length] = " ";
+ }
+ while (index < dataLength) {
+ //Keep this loop small for speed.
+ bytes = [data.charCodeAt(index++) & 0xFF, data.charCodeAt(index++) & 0xFF, data.charCodeAt(index++) & 0xFF];
+ base64 += toBase64[bytes[0] >> 2] + toBase64[((bytes[0] & 0x3) << 4) | (bytes[1] >> 4)] + toBase64[((bytes[1] & 0xF) << 2) | (bytes[2] >> 6)] + toBase64[bytes[2] & 0x3F];
+ }
+ if (remainder > 0) {
+ //Fill in the padding and recalulate the trailing six-bit group...
+ base64[base64.length - 1] = "=";
+ if (remainder == 2) {
+ base64[base64.length - 2] = "=";
+ base64[base64.length - 3] = toBase64[(bytes[0] & 0x3) << 4];
+ }
+ else {
+ base64[base64.length - 2] = toBase64[(bytes[1] & 0xF) << 2];
+ }
+ }
+ }
+ }
+ return base64;
+}
+function base64_decode(data) {
+ try {
+ // The following line was modified for benchmarking:
+ var decode64 = GameBoyWindow.atob(data); //Use this native function when it's available, as it's a magnitude faster than the non-native code below.
+ }
+ catch (error) {
+ //Defaulting to non-native base64 decoding...
+ var decode64 = "";
+ var dataLength = data.length;
+ if (dataLength > 3 && dataLength % 4 == 0) {
+ var sixbits = [0, 0, 0, 0]; //Declare this out of the loop, to speed up the ops.
+ var index = 0;
+ while (index < dataLength) {
+ //Keep this loop small for speed.
+ sixbits = [fromBase64.indexOf(data.charAt(index++)), fromBase64.indexOf(data.charAt(index++)), fromBase64.indexOf(data.charAt(index++)), fromBase64.indexOf(data.charAt(index++))];
+ decode64 += String.fromCharCode((sixbits[0] << 2) | (sixbits[1] >> 4)) + String.fromCharCode(((sixbits[1] & 0x0F) << 4) | (sixbits[2] >> 2)) + String.fromCharCode(((sixbits[2] & 0x03) << 6) | sixbits[3]);
+ }
+ //Check for the '=' character after the loop, so we don't hose it up.
+ if (sixbits[3] >= 0x40) {
+ decode64.length -= 1;
+ if (sixbits[2] >= 0x40) {
+ decode64.length -= 1;
+ }
+ }
+ }
+ }
+ return decode64;
+}
+function to_little_endian_dword(str) {
+ return to_little_endian_word(str) + String.fromCharCode((str >> 16) & 0xFF, (str >> 24) & 0xFF);
+}
+function to_little_endian_word(str) {
+ return to_byte(str) + String.fromCharCode((str >> 8) & 0xFF);
+}
+function to_byte(str) {
+ return String.fromCharCode(str & 0xFF);
+}
+function arrayToBase64(arrayIn) {
+ var binString = "";
+ var length = arrayIn.length;
+ for (var index = 0; index < length; ++index) {
+ if (typeof arrayIn[index] == "number") {
+ binString += String.fromCharCode(arrayIn[index]);
+ }
+ }
+ return base64(binString);
+}
+function base64ToArray(b64String) {
+ var binString = base64_decode(b64String);
+ var outArray = [];
+ var length = binString.length;
+ for (var index = 0; index < length;) {
+ outArray.push(binString.charCodeAt(index++) & 0xFF);
+ }
+ return outArray;
+}
+
+// End of js/other/base64.js file.
+
+// Start of js/other/resampler.js file.
+
+//JavaScript Audio Resampler (c) 2011 - Grant Galitz
+function Resampler(fromSampleRate, toSampleRate, channels, outputBufferSize, noReturn) {
+ this.fromSampleRate = fromSampleRate;
+ this.toSampleRate = toSampleRate;
+ this.channels = channels | 0;
+ this.outputBufferSize = outputBufferSize;
+ this.noReturn = !!noReturn;
+ this.initialize();
+}
+Resampler.prototype.initialize = function () {
+ //Perform some checks:
+ if (this.fromSampleRate > 0 && this.toSampleRate > 0 && this.channels > 0) {
+ if (this.fromSampleRate == this.toSampleRate) {
+ //Setup a resampler bypass:
+ this.resampler = this.bypassResampler; //Resampler just returns what was passed through.
+ this.ratioWeight = 1;
+ }
+ else {
+ //Setup the interpolation resampler:
+ this.compileInterpolationFunction();
+ this.resampler = this.interpolate; //Resampler is a custom quality interpolation algorithm.
+ this.ratioWeight = this.fromSampleRate / this.toSampleRate;
+ this.tailExists = false;
+ this.lastWeight = 0;
+ this.initializeBuffers();
+ }
+ }
+ else {
+ throw(new Error("Invalid settings specified for the resampler."));
+ }
+}
+Resampler.prototype.compileInterpolationFunction = function () {
+ var toCompile = "var bufferLength = Math.min(buffer.length, this.outputBufferSize);\
+ if ((bufferLength % " + this.channels + ") == 0) {\
+ if (bufferLength > 0) {\
+ var ratioWeight = this.ratioWeight;\
+ var weight = 0;";
+ for (var channel = 0; channel < this.channels; ++channel) {
+ toCompile += "var output" + channel + " = 0;"
+ }
+ toCompile += "var actualPosition = 0;\
+ var amountToNext = 0;\
+ var alreadyProcessedTail = !this.tailExists;\
+ this.tailExists = false;\
+ var outputBuffer = this.outputBuffer;\
+ var outputOffset = 0;\
+ var currentPosition = 0;\
+ do {\
+ if (alreadyProcessedTail) {\
+ weight = ratioWeight;";
+ for (channel = 0; channel < this.channels; ++channel) {
+ toCompile += "output" + channel + " = 0;"
+ }
+ toCompile += "}\
+ else {\
+ weight = this.lastWeight;";
+ for (channel = 0; channel < this.channels; ++channel) {
+ toCompile += "output" + channel + " = this.lastOutput[" + channel + "];"
+ }
+ toCompile += "alreadyProcessedTail = true;\
+ }\
+ while (weight > 0 && actualPosition < bufferLength) {\
+ amountToNext = 1 + actualPosition - currentPosition;\
+ if (weight >= amountToNext) {";
+ for (channel = 0; channel < this.channels; ++channel) {
+ toCompile += "output" + channel + " += buffer[actualPosition++] * amountToNext;"
+ }
+ toCompile += "currentPosition = actualPosition;\
+ weight -= amountToNext;\
+ }\
+ else {";
+ for (channel = 0; channel < this.channels; ++channel) {
+ toCompile += "output" + channel + " += buffer[actualPosition" + ((channel > 0) ? (" + " + channel) : "") + "] * weight;"
+ }
+ toCompile += "currentPosition += weight;\
+ weight = 0;\
+ break;\
+ }\
+ }\
+ if (weight == 0) {";
+ for (channel = 0; channel < this.channels; ++channel) {
+ toCompile += "outputBuffer[outputOffset++] = output" + channel + " / ratioWeight;"
+ }
+ toCompile += "}\
+ else {\
+ this.lastWeight = weight;";
+ for (channel = 0; channel < this.channels; ++channel) {
+ toCompile += "this.lastOutput[" + channel + "] = output" + channel + ";"
+ }
+ toCompile += "this.tailExists = true;\
+ break;\
+ }\
+ } while (actualPosition < bufferLength);\
+ return this.bufferSlice(outputOffset);\
+ }\
+ else {\
+ return (this.noReturn) ? 0 : [];\
+ }\
+ }\
+ else {\
+ throw(new Error(\"Buffer was of incorrect sample length.\"));\
+ }";
+ this.interpolate = Function("buffer", toCompile);
+}
+Resampler.prototype.bypassResampler = function (buffer) {
+ if (this.noReturn) {
+ //Set the buffer passed as our own, as we don't need to resample it:
+ this.outputBuffer = buffer;
+ return buffer.length;
+ }
+ else {
+ //Just return the buffer passsed:
+ return buffer;
+ }
+}
+Resampler.prototype.bufferSlice = function (sliceAmount) {
+ if (this.noReturn) {
+ //If we're going to access the properties directly from this object:
+ return sliceAmount;
+ }
+ else {
+ //Typed array and normal array buffer section referencing:
+ try {
+ return this.outputBuffer.subarray(0, sliceAmount);
+ }
+ catch (error) {
+ try {
+ //Regular array pass:
+ this.outputBuffer.length = sliceAmount;
+ return this.outputBuffer;
+ }
+ catch (error) {
+ //Nightly Firefox 4 used to have the subarray function named as slice:
+ return this.outputBuffer.slice(0, sliceAmount);
+ }
+ }
+ }
+}
+Resampler.prototype.initializeBuffers = function () {
+ //Initialize the internal buffer:
+ try {
+ this.outputBuffer = new Float32Array(this.outputBufferSize);
+ this.lastOutput = new Float32Array(this.channels);
+ }
+ catch (error) {
+ this.outputBuffer = [];
+ this.lastOutput = [];
+ }
+}
+
+// End of js/other/resampler.js file.
+
+// Start of js/other/XAudioServer.js file.
+
+/*Initialize here first:
+ Example:
+ Stereo audio with a sample rate of 70 khz, a minimum buffer of 15000 samples total, a maximum buffer of 25000 samples total and a starting volume level of 1.
+ var parentObj = this;
+ this.audioHandle = new XAudioServer(2, 70000, 15000, 25000, function (sampleCount) {
+ return parentObj.audioUnderRun(sampleCount);
+ }, 1);
+
+ The callback is passed the number of samples requested, while it can return any number of samples it wants back.
+*/
+function XAudioServer(channels, sampleRate, minBufferSize, maxBufferSize, underRunCallback, volume) {
+ this.audioChannels = (channels == 2) ? 2 : 1;
+ webAudioMono = (this.audioChannels == 1);
+ XAudioJSSampleRate = (sampleRate > 0 && sampleRate <= 0xFFFFFF) ? sampleRate : 44100;
+ webAudioMinBufferSize = (minBufferSize >= (samplesPerCallback << 1) && minBufferSize < maxBufferSize) ? (minBufferSize & ((webAudioMono) ? 0xFFFFFFFF : 0xFFFFFFFE)) : (samplesPerCallback << 1);
+ webAudioMaxBufferSize = (Math.floor(maxBufferSize) > webAudioMinBufferSize + this.audioChannels) ? (maxBufferSize & ((webAudioMono) ? 0xFFFFFFFF : 0xFFFFFFFE)) : (minBufferSize << 1);
+ this.underRunCallback = (typeof underRunCallback == "function") ? underRunCallback : function () {};
+ XAudioJSVolume = (volume >= 0 && volume <= 1) ? volume : 1;
+ this.audioType = -1;
+ this.mozAudioTail = [];
+ this.audioHandleMoz = null;
+ this.audioHandleFlash = null;
+ this.flashInitialized = false;
+ this.mozAudioFound = false;
+ this.initializeAudio();
+}
+XAudioServer.prototype.MOZWriteAudio = function (buffer) {
+ //mozAudio:
+ this.MOZWriteAudioNoCallback(buffer);
+ this.MOZExecuteCallback();
+}
+XAudioServer.prototype.MOZWriteAudioNoCallback = function (buffer) {
+ //mozAudio:
+ this.writeMozAudio(buffer);
+}
+XAudioServer.prototype.callbackBasedWriteAudio = function (buffer) {
+ //Callback-centered audio APIs:
+ this.callbackBasedWriteAudioNoCallback(buffer);
+ this.callbackBasedExecuteCallback();
+}
+XAudioServer.prototype.callbackBasedWriteAudioNoCallback = function (buffer) {
+ //Callback-centered audio APIs:
+ var length = buffer.length;
+ for (var bufferCounter = 0; bufferCounter < length && audioBufferSize < webAudioMaxBufferSize;) {
+ audioContextSampleBuffer[audioBufferSize++] = buffer[bufferCounter++];
+ }
+}
+/*Pass your samples into here!
+Pack your samples as a one-dimenional array
+With the channel samplea packed uniformly.
+examples:
+ mono - [left, left, left, left]
+ stereo - [left, right, left, right, left, right, left, right]
+*/
+XAudioServer.prototype.writeAudio = function (buffer) {
+ if (this.audioType == 0) {
+ this.MOZWriteAudio(buffer);
+ }
+ else if (this.audioType == 1) {
+ this.callbackBasedWriteAudio(buffer);
+ }
+ else if (this.audioType == 2) {
+ if (this.checkFlashInit() || launchedContext) {
+ this.callbackBasedWriteAudio(buffer);
+ }
+ else if (this.mozAudioFound) {
+ this.MOZWriteAudio(buffer);
+ }
+ }
+}
+/*Pass your samples into here if you don't want automatic callback calling:
+Pack your samples as a one-dimenional array
+With the channel samplea packed uniformly.
+examples:
+ mono - [left, left, left, left]
+ stereo - [left, right, left, right, left, right, left, right]
+Useful in preventing infinite recursion issues with calling writeAudio inside your callback.
+*/
+XAudioServer.prototype.writeAudioNoCallback = function (buffer) {
+ if (this.audioType == 0) {
+ this.MOZWriteAudioNoCallback(buffer);
+ }
+ else if (this.audioType == 1) {
+ this.callbackBasedWriteAudioNoCallback(buffer);
+ }
+ else if (this.audioType == 2) {
+ if (this.checkFlashInit() || launchedContext) {
+ this.callbackBasedWriteAudioNoCallback(buffer);
+ }
+ else if (this.mozAudioFound) {
+ this.MOZWriteAudioNoCallback(buffer);
+ }
+ }
+}
+//Developer can use this to see how many samples to write (example: minimum buffer allotment minus remaining samples left returned from this function to make sure maximum buffering is done...)
+//If -1 is returned, then that means metric could not be done.
+XAudioServer.prototype.remainingBuffer = function () {
+ if (this.audioType == 0) {
+ //mozAudio:
+ return this.samplesAlreadyWritten - this.audioHandleMoz.mozCurrentSampleOffset();
+ }
+ else if (this.audioType == 1) {
+ //WebKit Audio:
+ return (((resampledSamplesLeft() * resampleControl.ratioWeight) >> (this.audioChannels - 1)) << (this.audioChannels - 1)) + audioBufferSize;
+ }
+ else if (this.audioType == 2) {
+ if (this.checkFlashInit() || launchedContext) {
+ //Webkit Audio / Flash Plugin Audio:
+ return (((resampledSamplesLeft() * resampleControl.ratioWeight) >> (this.audioChannels - 1)) << (this.audioChannels - 1)) + audioBufferSize;
+ }
+ else if (this.mozAudioFound) {
+ //mozAudio:
+ return this.samplesAlreadyWritten - this.audioHandleMoz.mozCurrentSampleOffset();
+ }
+ }
+ //Default return:
+ return 0;
+}
+XAudioServer.prototype.MOZExecuteCallback = function () {
+ //mozAudio:
+ var samplesRequested = webAudioMinBufferSize - this.remainingBuffer();
+ if (samplesRequested > 0) {
+ this.writeMozAudio(this.underRunCallback(samplesRequested));
+ }
+}
+XAudioServer.prototype.callbackBasedExecuteCallback = function () {
+ //WebKit /Flash Audio:
+ var samplesRequested = webAudioMinBufferSize - this.remainingBuffer();
+ if (samplesRequested > 0) {
+ this.callbackBasedWriteAudioNoCallback(this.underRunCallback(samplesRequested));
+ }
+}
+//If you just want your callback called for any possible refill (Execution of callback is still conditional):
+XAudioServer.prototype.executeCallback = function () {
+ if (this.audioType == 0) {
+ this.MOZExecuteCallback();
+ }
+ else if (this.audioType == 1) {
+ this.callbackBasedExecuteCallback();
+ }
+ else if (this.audioType == 2) {
+ if (this.checkFlashInit() || launchedContext) {
+ this.callbackBasedExecuteCallback();
+ }
+ else if (this.mozAudioFound) {
+ this.MOZExecuteCallback();
+ }
+ }
+}
+//DO NOT CALL THIS, the lib calls this internally!
+XAudioServer.prototype.initializeAudio = function () {
+ try {
+ throw (new Error("Select initializeWebAudio case")); // Line added for benchmarking.
+ this.preInitializeMozAudio();
+ if (navigator.platform == "Linux i686") {
+ //Block out mozaudio usage for Linux Firefox due to moz bugs:
+ throw(new Error(""));
+ }
+ this.initializeMozAudio();
+ }
+ catch (error) {
+ try {
+ this.initializeWebAudio();
+ }
+ catch (error) {
+ try {
+ this.initializeFlashAudio();
+ }
+ catch (error) {
+ throw(new Error("Browser does not support real time audio output."));
+ }
+ }
+ }
+}
+XAudioServer.prototype.preInitializeMozAudio = function () {
+ //mozAudio - Synchronous Audio API
+ this.audioHandleMoz = new Audio();
+ this.audioHandleMoz.mozSetup(this.audioChannels, XAudioJSSampleRate);
+ this.samplesAlreadyWritten = 0;
+ var emptySampleFrame = (this.audioChannels == 2) ? [0, 0] : [0];
+ var prebufferAmount = 0;
+ if (navigator.platform != "MacIntel" && navigator.platform != "MacPPC") { //Mac OS X doesn't experience this moz-bug!
+ while (this.audioHandleMoz.mozCurrentSampleOffset() == 0) {
+ //Mozilla Audio Bugginess Workaround (Firefox freaks out if we don't give it a prebuffer under certain OSes):
+ prebufferAmount += this.audioHandleMoz.mozWriteAudio(emptySampleFrame);
+ }
+ var samplesToDoubleBuffer = prebufferAmount / this.audioChannels;
+ //Double the prebuffering for windows:
+ for (var index = 0; index < samplesToDoubleBuffer; index++) {
+ this.samplesAlreadyWritten += this.audioHandleMoz.mozWriteAudio(emptySampleFrame);
+ }
+ }
+ this.samplesAlreadyWritten += prebufferAmount;
+ webAudioMinBufferSize += this.samplesAlreadyWritten;
+ this.mozAudioFound = true;
+}
+XAudioServer.prototype.initializeMozAudio = function () {
+ //Fill in our own buffering up to the minimum specified:
+ this.writeMozAudio(getFloat32(webAudioMinBufferSize));
+ this.audioType = 0;
+}
+XAudioServer.prototype.initializeWebAudio = function () {
+ if (launchedContext) {
+ resetCallbackAPIAudioBuffer(webAudioActualSampleRate, samplesPerCallback);
+ this.audioType = 1;
+ }
+ else {
+ throw(new Error(""));
+ }
+}
+XAudioServer.prototype.initializeFlashAudio = function () {
+ var existingFlashload = document.getElementById("XAudioJS");
+ if (existingFlashload == null) {
+ var thisObj = this;
+ var mainContainerNode = document.createElement("div");
+ mainContainerNode.setAttribute("style", "position: fixed; bottom: 0px; right: 0px; margin: 0px; padding: 0px; border: none; width: 8px; height: 8px; overflow: hidden; z-index: -1000; ");
+ var containerNode = document.createElement("div");
+ containerNode.setAttribute("style", "position: static; border: none; width: 0px; height: 0px; visibility: hidden; margin: 8px; padding: 0px;");
+ containerNode.setAttribute("id", "XAudioJS");
+ mainContainerNode.appendChild(containerNode);
+ document.getElementsByTagName("body")[0].appendChild(mainContainerNode);
+ swfobject.embedSWF(
+ "XAudioJS.swf",
+ "XAudioJS",
+ "8",
+ "8",
+ "9.0.0",
+ "",
+ {},
+ {"allowscriptaccess":"always"},
+ {"style":"position: static; visibility: hidden; margin: 8px; padding: 0px; border: none"},
+ function (event) {
+ if (event.success) {
+ thisObj.audioHandleFlash = event.ref;
+ }
+ else {
+ thisObj.audioType = 1;
+ }
+ }
+ );
+ }
+ else {
+ this.audioHandleFlash = existingFlashload;
+ }
+ this.audioType = 2;
+}
+XAudioServer.prototype.changeVolume = function (newVolume) {
+ if (newVolume >= 0 && newVolume <= 1) {
+ XAudioJSVolume = newVolume;
+ if (this.checkFlashInit()) {
+ this.audioHandleFlash.changeVolume(XAudioJSVolume);
+ }
+ if (this.mozAudioFound) {
+ this.audioHandleMoz.volume = XAudioJSVolume;
+ }
+ }
+}
+//Moz Audio Buffer Writing Handler:
+XAudioServer.prototype.writeMozAudio = function (buffer) {
+ var length = this.mozAudioTail.length;
+ if (length > 0) {
+ var samplesAccepted = this.audioHandleMoz.mozWriteAudio(this.mozAudioTail);
+ this.samplesAlreadyWritten += samplesAccepted;
+ this.mozAudioTail.splice(0, samplesAccepted);
+ }
+ length = Math.min(buffer.length, webAudioMaxBufferSize - this.samplesAlreadyWritten + this.audioHandleMoz.mozCurrentSampleOffset());
+ var samplesAccepted = this.audioHandleMoz.mozWriteAudio(buffer);
+ this.samplesAlreadyWritten += samplesAccepted;
+ for (var index = 0; length > samplesAccepted; --length) {
+ //Moz Audio wants us saving the tail:
+ this.mozAudioTail.push(buffer[index++]);
+ }
+}
+//Checks to see if the NPAPI Adobe Flash bridge is ready yet:
+XAudioServer.prototype.checkFlashInit = function () {
+ if (!this.flashInitialized && this.audioHandleFlash && this.audioHandleFlash.initialize) {
+ this.flashInitialized = true;
+ this.audioHandleFlash.initialize(this.audioChannels, XAudioJSVolume);
+ resetCallbackAPIAudioBuffer(44100, samplesPerCallback);
+ }
+ return this.flashInitialized;
+}
+/////////END LIB
+function getFloat32(size) {
+ try {
+ return new Float32Array(size);
+ }
+ catch (error) {
+ return new Array(size);
+ }
+}
+function getFloat32Flat(size) {
+ try {
+ var newBuffer = new Float32Array(size);
+ }
+ catch (error) {
+ var newBuffer = new Array(size);
+ var audioSampleIndice = 0;
+ do {
+ newBuffer[audioSampleIndice] = 0;
+ } while (++audioSampleIndice < size);
+ }
+ return newBuffer;
+}
+//Flash NPAPI Event Handler:
+var samplesPerCallback = 2048; //Has to be between 2048 and 4096 (If over, then samples are ignored, if under then silence is added).
+var outputConvert = null;
+function audioOutputFlashEvent() { //The callback that flash calls...
+ resampleRefill();
+ return outputConvert();
+}
+function generateFlashStereoString() { //Convert the arrays to one long string for speed.
+ var copyBinaryStringLeft = "";
+ var copyBinaryStringRight = "";
+ for (var index = 0; index < samplesPerCallback && resampleBufferStart != resampleBufferEnd; ++index) {
+ //Sanitize the buffer:
+ copyBinaryStringLeft += String.fromCharCode(((Math.min(Math.max(resampled[resampleBufferStart++] + 1, 0), 2) * 0x3FFF) | 0) + 0x3000);
+ copyBinaryStringRight += String.fromCharCode(((Math.min(Math.max(resampled[resampleBufferStart++] + 1, 0), 2) * 0x3FFF) | 0) + 0x3000);
+ if (resampleBufferStart == resampleBufferSize) {
+ resampleBufferStart = 0;
+ }
+ }
+ return copyBinaryStringLeft + copyBinaryStringRight;
+}
+function generateFlashMonoString() { //Convert the array to one long string for speed.
+ var copyBinaryString = "";
+ for (var index = 0; index < samplesPerCallback && resampleBufferStart != resampleBufferEnd; ++index) {
+ //Sanitize the buffer:
+ copyBinaryString += String.fromCharCode(((Math.min(Math.max(resampled[resampleBufferStart++] + 1, 0), 2) * 0x3FFF) | 0) + 0x3000);
+ if (resampleBufferStart == resampleBufferSize) {
+ resampleBufferStart = 0;
+ }
+ }
+ return copyBinaryString;
+}
+//Audio API Event Handler:
+var audioContextHandle = null;
+var audioNode = null;
+var audioSource = null;
+var launchedContext = false;
+var audioContextSampleBuffer = [];
+var resampled = [];
+var webAudioMinBufferSize = 15000;
+var webAudioMaxBufferSize = 25000;
+var webAudioActualSampleRate = 44100;
+var XAudioJSSampleRate = 0;
+var webAudioMono = false;
+var XAudioJSVolume = 1;
+var resampleControl = null;
+var audioBufferSize = 0;
+var resampleBufferStart = 0;
+var resampleBufferEnd = 0;
+var resampleBufferSize = 2;
+function audioOutputEvent(event) { //Web Audio API callback...
+ var index = 0;
+ var buffer1 = event.outputBuffer.getChannelData(0);
+ var buffer2 = event.outputBuffer.getChannelData(1);
+ resampleRefill();
+ if (!webAudioMono) {
+ //STEREO:
+ while (index < samplesPerCallback && resampleBufferStart != resampleBufferEnd) {
+ buffer1[index] = resampled[resampleBufferStart++] * XAudioJSVolume;
+ buffer2[index++] = resampled[resampleBufferStart++] * XAudioJSVolume;
+ if (resampleBufferStart == resampleBufferSize) {
+ resampleBufferStart = 0;
+ }
+ }
+ }
+ else {
+ //MONO:
+ while (index < samplesPerCallback && resampleBufferStart != resampleBufferEnd) {
+ buffer2[index] = buffer1[index] = resampled[resampleBufferStart++] * XAudioJSVolume;
+ ++index;
+ if (resampleBufferStart == resampleBufferSize) {
+ resampleBufferStart = 0;
+ }
+ }
+ }
+ //Pad with silence if we're underrunning:
+ while (index < samplesPerCallback) {
+ buffer2[index] = buffer1[index] = 0;
+ ++index;
+ }
+}
+function resampleRefill() {
+ if (audioBufferSize > 0) {
+ //Resample a chunk of audio:
+ var resampleLength = resampleControl.resampler(getBufferSamples());
+ var resampledResult = resampleControl.outputBuffer;
+ for (var index2 = 0; index2 < resampleLength; ++index2) {
+ resampled[resampleBufferEnd++] = resampledResult[index2];
+ if (resampleBufferEnd == resampleBufferSize) {
+ resampleBufferEnd = 0;
+ }
+ if (resampleBufferStart == resampleBufferEnd) {
+ ++resampleBufferStart;
+ if (resampleBufferStart == resampleBufferSize) {
+ resampleBufferStart = 0;
+ }
+ }
+ }
+ audioBufferSize = 0;
+ }
+}
+function resampledSamplesLeft() {
+ return ((resampleBufferStart <= resampleBufferEnd) ? 0 : resampleBufferSize) + resampleBufferEnd - resampleBufferStart;
+}
+function getBufferSamples() {
+ //Typed array and normal array buffer section referencing:
+ try {
+ return audioContextSampleBuffer.subarray(0, audioBufferSize);
+ }
+ catch (error) {
+ try {
+ //Regular array pass:
+ audioContextSampleBuffer.length = audioBufferSize;
+ return audioContextSampleBuffer;
+ }
+ catch (error) {
+ //Nightly Firefox 4 used to have the subarray function named as slice:
+ return audioContextSampleBuffer.slice(0, audioBufferSize);
+ }
+ }
+}
+//Initialize WebKit Audio /Flash Audio Buffer:
+function resetCallbackAPIAudioBuffer(APISampleRate, bufferAlloc) {
+ audioContextSampleBuffer = getFloat32(webAudioMaxBufferSize);
+ audioBufferSize = webAudioMaxBufferSize;
+ resampleBufferStart = 0;
+ resampleBufferEnd = 0;
+ resampleBufferSize = Math.max(webAudioMaxBufferSize * Math.ceil(XAudioJSSampleRate / APISampleRate), samplesPerCallback) << 1;
+ if (webAudioMono) {
+ //MONO Handling:
+ resampled = getFloat32Flat(resampleBufferSize);
+ resampleControl = new Resampler(XAudioJSSampleRate, APISampleRate, 1, resampleBufferSize, true);
+ outputConvert = generateFlashMonoString;
+ }
+ else {
+ //STEREO Handling:
+ resampleBufferSize <<= 1;
+ resampled = getFloat32Flat(resampleBufferSize);
+ resampleControl = new Resampler(XAudioJSSampleRate, APISampleRate, 2, resampleBufferSize, true);
+ outputConvert = generateFlashStereoString;
+ }
+}
+//Initialize WebKit Audio:
+(function () {
+ if (!launchedContext) {
+ try {
+ // The following line was modified for benchmarking:
+ audioContextHandle = new GameBoyAudioContext(); //Create a system audio context.
+ }
+ catch (error) {
+ try {
+ audioContextHandle = new AudioContext(); //Create a system audio context.
+ }
+ catch (error) {
+ return;
+ }
+ }
+ try {
+ audioSource = audioContextHandle.createBufferSource(); //We need to create a false input to get the chain started.
+ audioSource.loop = false; //Keep this alive forever (Event handler will know when to ouput.)
+ XAudioJSSampleRate = webAudioActualSampleRate = audioContextHandle.sampleRate;
+ audioSource.buffer = audioContextHandle.createBuffer(1, 1, webAudioActualSampleRate); //Create a zero'd input buffer for the input to be valid.
+ audioNode = audioContextHandle.createJavaScriptNode(samplesPerCallback, 1, 2); //Create 2 outputs and ignore the input buffer (Just copy buffer 1 over if mono)
+ audioNode.onaudioprocess = audioOutputEvent; //Connect the audio processing event to a handling function so we can manipulate output
+ audioSource.connect(audioNode); //Send and chain the input to the audio manipulation.
+ audioNode.connect(audioContextHandle.destination); //Send and chain the output of the audio manipulation to the system audio output.
+ audioSource.noteOn(0); //Start the loop!
+ }
+ catch (error) {
+ return;
+ }
+ launchedContext = true;
+ }
+})();
+
+// End of js/other/XAudioServer.js file.
+
+// Start of js/other/resize.js file.
+
+//JavaScript Image Resizer (c) 2012 - Grant Galitz
+function Resize(widthOriginal, heightOriginal, targetWidth, targetHeight, blendAlpha, interpolationPass) {
+ this.widthOriginal = Math.abs(parseInt(widthOriginal) || 0);
+ this.heightOriginal = Math.abs(parseInt(heightOriginal) || 0);
+ this.targetWidth = Math.abs(parseInt(targetWidth) || 0);
+ this.targetHeight = Math.abs(parseInt(targetHeight) || 0);
+ this.colorChannels = (!!blendAlpha) ? 4 : 3;
+ this.interpolationPass = !!interpolationPass;
+ this.targetWidthMultipliedByChannels = this.targetWidth * this.colorChannels;
+ this.originalWidthMultipliedByChannels = this.widthOriginal * this.colorChannels;
+ this.originalHeightMultipliedByChannels = this.heightOriginal * this.colorChannels;
+ this.widthPassResultSize = this.targetWidthMultipliedByChannels * this.heightOriginal;
+ this.finalResultSize = this.targetWidthMultipliedByChannels * this.targetHeight;
+ this.initialize();
+}
+Resize.prototype.initialize = function () {
+ //Perform some checks:
+ if (this.widthOriginal > 0 && this.heightOriginal > 0 && this.targetWidth > 0 && this.targetHeight > 0) {
+ if (this.widthOriginal == this.targetWidth) {
+ //Bypass the width resizer pass:
+ this.resizeWidth = this.bypassResizer;
+ }
+ else {
+ //Setup the width resizer pass:
+ this.ratioWeightWidthPass = this.widthOriginal / this.targetWidth;
+ if (this.ratioWeightWidthPass < 1 && this.interpolationPass) {
+ this.initializeFirstPassBuffers(true);
+ this.resizeWidth = (this.colorChannels == 4) ? this.resizeWidthInterpolatedRGBA : this.resizeWidthInterpolatedRGB;
+ }
+ else {
+ this.initializeFirstPassBuffers(false);
+ this.resizeWidth = (this.colorChannels == 4) ? this.resizeWidthRGBA : this.resizeWidthRGB;
+ }
+ }
+ if (this.heightOriginal == this.targetHeight) {
+ //Bypass the height resizer pass:
+ this.resizeHeight = this.bypassResizer;
+ }
+ else {
+ //Setup the height resizer pass:
+ this.ratioWeightHeightPass = this.heightOriginal / this.targetHeight;
+ if (this.ratioWeightHeightPass < 1 && this.interpolationPass) {
+ this.initializeSecondPassBuffers(true);
+ this.resizeHeight = this.resizeHeightInterpolated;
+ }
+ else {
+ this.initializeSecondPassBuffers(false);
+ this.resizeHeight = (this.colorChannels == 4) ? this.resizeHeightRGBA : this.resizeHeightRGB;
+ }
+ }
+ }
+ else {
+ throw(new Error("Invalid settings specified for the resizer."));
+ }
+}
+Resize.prototype.resizeWidthRGB = function (buffer) {
+ var ratioWeight = this.ratioWeightWidthPass;
+ var weight = 0;
+ var amountToNext = 0;
+ var actualPosition = 0;
+ var currentPosition = 0;
+ var line = 0;
+ var pixelOffset = 0;
+ var outputOffset = 0;
+ var nextLineOffsetOriginalWidth = this.originalWidthMultipliedByChannels - 2;
+ var nextLineOffsetTargetWidth = this.targetWidthMultipliedByChannels - 2;
+ var output = this.outputWidthWorkBench;
+ var outputBuffer = this.widthBuffer;
+ do {
+ for (line = 0; line < this.originalHeightMultipliedByChannels;) {
+ output[line++] = 0;
+ output[line++] = 0;
+ output[line++] = 0;
+ }
+ weight = ratioWeight;
+ do {
+ amountToNext = 1 + actualPosition - currentPosition;
+ if (weight >= amountToNext) {
+ for (line = 0, pixelOffset = actualPosition; line < this.originalHeightMultipliedByChannels; pixelOffset += nextLineOffsetOriginalWidth) {
+ output[line++] += buffer[pixelOffset++] * amountToNext;
+ output[line++] += buffer[pixelOffset++] * amountToNext;
+ output[line++] += buffer[pixelOffset] * amountToNext;
+ }
+ currentPosition = actualPosition = actualPosition + 3;
+ weight -= amountToNext;
+ }
+ else {
+ for (line = 0, pixelOffset = actualPosition; line < this.originalHeightMultipliedByChannels; pixelOffset += nextLineOffsetOriginalWidth) {
+ output[line++] += buffer[pixelOffset++] * weight;
+ output[line++] += buffer[pixelOffset++] * weight;
+ output[line++] += buffer[pixelOffset] * weight;
+ }
+ currentPosition += weight;
+ break;
+ }
+ } while (weight > 0 && actualPosition < this.originalWidthMultipliedByChannels);
+ for (line = 0, pixelOffset = outputOffset; line < this.originalHeightMultipliedByChannels; pixelOffset += nextLineOffsetTargetWidth) {
+ outputBuffer[pixelOffset++] = output[line++] / ratioWeight;
+ outputBuffer[pixelOffset++] = output[line++] / ratioWeight;
+ outputBuffer[pixelOffset] = output[line++] / ratioWeight;
+ }
+ outputOffset += 3;
+ } while (outputOffset < this.targetWidthMultipliedByChannels);
+ return outputBuffer;
+}
+Resize.prototype.resizeWidthInterpolatedRGB = function (buffer) {
+ var ratioWeight = (this.widthOriginal - 1) / this.targetWidth;
+ var weight = 0;
+ var finalOffset = 0;
+ var pixelOffset = 0;
+ var outputBuffer = this.widthBuffer;
+ for (var targetPosition = 0; targetPosition < this.targetWidthMultipliedByChannels; targetPosition += 3, weight += ratioWeight) {
+ //Calculate weightings:
+ secondWeight = weight % 1;
+ firstWeight = 1 - secondWeight;
+ //Interpolate:
+ for (finalOffset = targetPosition, pixelOffset = Math.floor(weight) * 3; finalOffset < this.widthPassResultSize; pixelOffset += this.originalWidthMultipliedByChannels, finalOffset += this.targetWidthMultipliedByChannels) {
+ outputBuffer[finalOffset] = (buffer[pixelOffset] * firstWeight) + (buffer[pixelOffset + 3] * secondWeight);
+ outputBuffer[finalOffset + 1] = (buffer[pixelOffset + 1] * firstWeight) + (buffer[pixelOffset + 4] * secondWeight);
+ outputBuffer[finalOffset + 2] = (buffer[pixelOffset + 2] * firstWeight) + (buffer[pixelOffset + 5] * secondWeight);
+ }
+ }
+ return outputBuffer;
+}
+Resize.prototype.resizeWidthRGBA = function (buffer) {
+ var ratioWeight = this.ratioWeightWidthPass;
+ var weight = 0;
+ var amountToNext = 0;
+ var actualPosition = 0;
+ var currentPosition = 0;
+ var line = 0;
+ var pixelOffset = 0;
+ var outputOffset = 0;
+ var nextLineOffsetOriginalWidth = this.originalWidthMultipliedByChannels - 3;
+ var nextLineOffsetTargetWidth = this.targetWidthMultipliedByChannels - 3;
+ var output = this.outputWidthWorkBench;
+ var outputBuffer = this.widthBuffer;
+ do {
+ for (line = 0; line < this.originalHeightMultipliedByChannels;) {
+ output[line++] = 0;
+ output[line++] = 0;
+ output[line++] = 0;
+ output[line++] = 0;
+ }
+ weight = ratioWeight;
+ do {
+ amountToNext = 1 + actualPosition - currentPosition;
+ if (weight >= amountToNext) {
+ for (line = 0, pixelOffset = actualPosition; line < this.originalHeightMultipliedByChannels; pixelOffset += nextLineOffsetOriginalWidth) {
+ output[line++] += buffer[pixelOffset++] * amountToNext;
+ output[line++] += buffer[pixelOffset++] * amountToNext;
+ output[line++] += buffer[pixelOffset++] * amountToNext;
+ output[line++] += buffer[pixelOffset] * amountToNext;
+ }
+ currentPosition = actualPosition = actualPosition + 4;
+ weight -= amountToNext;
+ }
+ else {
+ for (line = 0, pixelOffset = actualPosition; line < this.originalHeightMultipliedByChannels; pixelOffset += nextLineOffsetOriginalWidth) {
+ output[line++] += buffer[pixelOffset++] * weight;
+ output[line++] += buffer[pixelOffset++] * weight;
+ output[line++] += buffer[pixelOffset++] * weight;
+ output[line++] += buffer[pixelOffset] * weight;
+ }
+ currentPosition += weight;
+ break;
+ }
+ } while (weight > 0 && actualPosition < this.originalWidthMultipliedByChannels);
+ for (line = 0, pixelOffset = outputOffset; line < this.originalHeightMultipliedByChannels; pixelOffset += nextLineOffsetTargetWidth) {
+ outputBuffer[pixelOffset++] = output[line++] / ratioWeight;
+ outputBuffer[pixelOffset++] = output[line++] / ratioWeight;
+ outputBuffer[pixelOffset++] = output[line++] / ratioWeight;
+ outputBuffer[pixelOffset] = output[line++] / ratioWeight;
+ }
+ outputOffset += 4;
+ } while (outputOffset < this.targetWidthMultipliedByChannels);
+ return outputBuffer;
+}
+Resize.prototype.resizeWidthInterpolatedRGBA = function (buffer) {
+ var ratioWeight = (this.widthOriginal - 1) / this.targetWidth;
+ var weight = 0;
+ var finalOffset = 0;
+ var pixelOffset = 0;
+ var outputBuffer = this.widthBuffer;
+ for (var targetPosition = 0; targetPosition < this.targetWidthMultipliedByChannels; targetPosition += 4, weight += ratioWeight) {
+ //Calculate weightings:
+ secondWeight = weight % 1;
+ firstWeight = 1 - secondWeight;
+ //Interpolate:
+ for (finalOffset = targetPosition, pixelOffset = Math.floor(weight) * 4; finalOffset < this.widthPassResultSize; pixelOffset += this.originalWidthMultipliedByChannels, finalOffset += this.targetWidthMultipliedByChannels) {
+ outputBuffer[finalOffset] = (buffer[pixelOffset] * firstWeight) + (buffer[pixelOffset + 4] * secondWeight);
+ outputBuffer[finalOffset + 1] = (buffer[pixelOffset + 1] * firstWeight) + (buffer[pixelOffset + 5] * secondWeight);
+ outputBuffer[finalOffset + 2] = (buffer[pixelOffset + 2] * firstWeight) + (buffer[pixelOffset + 6] * secondWeight);
+ outputBuffer[finalOffset + 3] = (buffer[pixelOffset + 3] * firstWeight) + (buffer[pixelOffset + 7] * secondWeight);
+ }
+ }
+ return outputBuffer;
+}
+Resize.prototype.resizeHeightRGB = function (buffer) {
+ var ratioWeight = this.ratioWeightHeightPass;
+ var weight = 0;
+ var amountToNext = 0;
+ var actualPosition = 0;
+ var currentPosition = 0;
+ var pixelOffset = 0;
+ var outputOffset = 0;
+ var output = this.outputHeightWorkBench;
+ var outputBuffer = this.heightBuffer;
+ do {
+ for (pixelOffset = 0; pixelOffset < this.targetWidthMultipliedByChannels;) {
+ output[pixelOffset++] = 0;
+ output[pixelOffset++] = 0;
+ output[pixelOffset++] = 0;
+ }
+ weight = ratioWeight;
+ do {
+ amountToNext = 1 + actualPosition - currentPosition;
+ if (weight >= amountToNext) {
+ for (pixelOffset = 0; pixelOffset < this.targetWidthMultipliedByChannels;) {
+ output[pixelOffset++] += buffer[actualPosition++] * amountToNext;
+ output[pixelOffset++] += buffer[actualPosition++] * amountToNext;
+ output[pixelOffset++] += buffer[actualPosition++] * amountToNext;
+ }
+ currentPosition = actualPosition;
+ weight -= amountToNext;
+ }
+ else {
+ for (pixelOffset = 0, amountToNext = actualPosition; pixelOffset < this.targetWidthMultipliedByChannels;) {
+ output[pixelOffset++] += buffer[amountToNext++] * weight;
+ output[pixelOffset++] += buffer[amountToNext++] * weight;
+ output[pixelOffset++] += buffer[amountToNext++] * weight;
+ }
+ currentPosition += weight;
+ break;
+ }
+ } while (weight > 0 && actualPosition < this.widthPassResultSize);
+ for (pixelOffset = 0; pixelOffset < this.targetWidthMultipliedByChannels;) {
+ outputBuffer[outputOffset++] = Math.round(output[pixelOffset++] / ratioWeight);
+ outputBuffer[outputOffset++] = Math.round(output[pixelOffset++] / ratioWeight);
+ outputBuffer[outputOffset++] = Math.round(output[pixelOffset++] / ratioWeight);
+ }
+ } while (outputOffset < this.finalResultSize);
+ return outputBuffer;
+}
+Resize.prototype.resizeHeightInterpolated = function (buffer) {
+ var ratioWeight = (this.heightOriginal - 1) / this.targetHeight;
+ var weight = 0;
+ var finalOffset = 0;
+ var pixelOffset = 0;
+ var pixelOffsetAccumulated = 0;
+ var pixelOffsetAccumulated2 = 0;
+ var outputBuffer = this.heightBuffer;
+ do {
+ //Calculate weightings:
+ secondWeight = weight % 1;
+ firstWeight = 1 - secondWeight;
+ //Interpolate:
+ pixelOffsetAccumulated = Math.floor(weight) * this.targetWidthMultipliedByChannels;
+ pixelOffsetAccumulated2 = pixelOffsetAccumulated + this.targetWidthMultipliedByChannels;
+ for (pixelOffset = 0; pixelOffset < this.targetWidthMultipliedByChannels; ++pixelOffset) {
+ outputBuffer[finalOffset++] = (buffer[pixelOffsetAccumulated + pixelOffset] * firstWeight) + (buffer[pixelOffsetAccumulated2 + pixelOffset] * secondWeight);
+ }
+ weight += ratioWeight;
+ } while (finalOffset < this.finalResultSize);
+ return outputBuffer;
+}
+Resize.prototype.resizeHeightRGBA = function (buffer) {
+ var ratioWeight = this.ratioWeightHeightPass;
+ var weight = 0;
+ var amountToNext = 0;
+ var actualPosition = 0;
+ var currentPosition = 0;
+ var pixelOffset = 0;
+ var outputOffset = 0;
+ var output = this.outputHeightWorkBench;
+ var outputBuffer = this.heightBuffer;
+ do {
+ for (pixelOffset = 0; pixelOffset < this.targetWidthMultipliedByChannels;) {
+ output[pixelOffset++] = 0;
+ output[pixelOffset++] = 0;
+ output[pixelOffset++] = 0;
+ output[pixelOffset++] = 0;
+ }
+ weight = ratioWeight;
+ do {
+ amountToNext = 1 + actualPosition - currentPosition;
+ if (weight >= amountToNext) {
+ for (pixelOffset = 0; pixelOffset < this.targetWidthMultipliedByChannels;) {
+ output[pixelOffset++] += buffer[actualPosition++] * amountToNext;
+ output[pixelOffset++] += buffer[actualPosition++] * amountToNext;
+ output[pixelOffset++] += buffer[actualPosition++] * amountToNext;
+ output[pixelOffset++] += buffer[actualPosition++] * amountToNext;
+ }
+ currentPosition = actualPosition;
+ weight -= amountToNext;
+ }
+ else {
+ for (pixelOffset = 0, amountToNext = actualPosition; pixelOffset < this.targetWidthMultipliedByChannels;) {
+ output[pixelOffset++] += buffer[amountToNext++] * weight;
+ output[pixelOffset++] += buffer[amountToNext++] * weight;
+ output[pixelOffset++] += buffer[amountToNext++] * weight;
+ output[pixelOffset++] += buffer[amountToNext++] * weight;
+ }
+ currentPosition += weight;
+ break;
+ }
+ } while (weight > 0 && actualPosition < this.widthPassResultSize);
+ for (pixelOffset = 0; pixelOffset < this.targetWidthMultipliedByChannels;) {
+ outputBuffer[outputOffset++] = Math.round(output[pixelOffset++] / ratioWeight);
+ outputBuffer[outputOffset++] = Math.round(output[pixelOffset++] / ratioWeight);
+ outputBuffer[outputOffset++] = Math.round(output[pixelOffset++] / ratioWeight);
+ outputBuffer[outputOffset++] = Math.round(output[pixelOffset++] / ratioWeight);
+ }
+ } while (outputOffset < this.finalResultSize);
+ return outputBuffer;
+}
+Resize.prototype.resizeHeightInterpolatedRGBA = function (buffer) {
+ var ratioWeight = (this.heightOriginal - 1) / this.targetHeight;
+ var weight = 0;
+ var finalOffset = 0;
+ var pixelOffset = 0;
+ var outputBuffer = this.heightBuffer;
+ while (pixelOffset < this.finalResultSize) {
+ //Calculate weightings:
+ secondWeight = weight % 1;
+ firstWeight = 1 - secondWeight;
+ //Interpolate:
+ for (pixelOffset = Math.floor(weight) * 4; pixelOffset < this.targetWidthMultipliedByChannels; pixelOffset += 4) {
+ outputBuffer[finalOffset++] = (buffer[pixelOffset] * firstWeight) + (buffer[pixelOffset + 4] * secondWeight);
+ outputBuffer[finalOffset++] = (buffer[pixelOffset + 1] * firstWeight) + (buffer[pixelOffset + 5] * secondWeight);
+ outputBuffer[finalOffset++] = (buffer[pixelOffset + 2] * firstWeight) + (buffer[pixelOffset + 6] * secondWeight);
+ outputBuffer[finalOffset++] = (buffer[pixelOffset + 3] * firstWeight) + (buffer[pixelOffset + 7] * secondWeight);
+ }
+ weight += ratioWeight;
+ }
+ return outputBuffer;
+}
+Resize.prototype.resize = function (buffer) {
+ return this.resizeHeight(this.resizeWidth(buffer));
+}
+Resize.prototype.bypassResizer = function (buffer) {
+ //Just return the buffer passsed:
+ return buffer;
+}
+Resize.prototype.initializeFirstPassBuffers = function (BILINEARAlgo) {
+ //Initialize the internal width pass buffers:
+ this.widthBuffer = this.generateFloatBuffer(this.widthPassResultSize);
+ if (!BILINEARAlgo) {
+ this.outputWidthWorkBench = this.generateFloatBuffer(this.originalHeightMultipliedByChannels);
+ }
+}
+Resize.prototype.initializeSecondPassBuffers = function (BILINEARAlgo) {
+ //Initialize the internal height pass buffers:
+ this.heightBuffer = this.generateUint8Buffer(this.finalResultSize);
+ if (!BILINEARAlgo) {
+ this.outputHeightWorkBench = this.generateFloatBuffer(this.targetWidthMultipliedByChannels);
+ }
+}
+Resize.prototype.generateFloatBuffer = function (bufferLength) {
+ //Generate a float32 typed array buffer:
+ try {
+ return new Float32Array(bufferLength);
+ }
+ catch (error) {
+ return [];
+ }
+}
+Resize.prototype.generateUint8Buffer = function (bufferLength) {
+ //Generate a uint8 typed array buffer:
+ try {
+ return this.checkForOperaMathBug(new Uint8Array(bufferLength));
+ }
+ catch (error) {
+ return [];
+ }
+}
+Resize.prototype.checkForOperaMathBug = function (typedArray) {
+ typedArray[0] = -1;
+ typedArray[0] >>= 0;
+ if (typedArray[0] != 0xFF) {
+ return [];
+ }
+ else {
+ return typedArray;
+ }
+}
+
+// End of js/other/resize.js file.
+
+// Remaining files are in gbemu-part2.js, since they run in strict mode.
+
diff --git a/js/src/octane/gbemu-part2.js b/js/src/octane/gbemu-part2.js
new file mode 100644
index 0000000000..b4c9a8d19d
--- /dev/null
+++ b/js/src/octane/gbemu-part2.js
@@ -0,0 +1,9780 @@
+// Portions copyright 2013 Google, Inc
+
+// Copyright (C) 2010 - 2012 Grant Galitz
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License version 2 as
+// published by the Free Software Foundation.
+// The full license is available at http://www.gnu.org/licenses/gpl.html
+// This program is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+// See the GNU General Public License for more details.
+
+// The code has been adapted for use as a benchmark by Google.
+
+// Previous files are in gbemu-part1.js, since they need to run in sloppy mode.
+
+// Start of js/GameBoyCore.js file.
+
+"use strict";
+/*
+ * JavaScript GameBoy Color Emulator
+ * Copyright (C) 2010 - 2012 Grant Galitz
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * version 2 as published by the Free Software Foundation.
+ * The full license is available at http://www.gnu.org/licenses/gpl.html
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ */
+function GameBoyCore(canvas, ROMImage) {
+ //Params, etc...
+ this.canvas = canvas; //Canvas DOM object for drawing out the graphics to.
+ this.drawContext = null; // LCD Context
+ this.ROMImage = ROMImage; //The game's ROM.
+ //CPU Registers and Flags:
+ this.registerA = 0x01; //Register A (Accumulator)
+ this.FZero = true; //Register F - Result was zero
+ this.FSubtract = false; //Register F - Subtraction was executed
+ this.FHalfCarry = true; //Register F - Half carry or half borrow
+ this.FCarry = true; //Register F - Carry or borrow
+ this.registerB = 0x00; //Register B
+ this.registerC = 0x13; //Register C
+ this.registerD = 0x00; //Register D
+ this.registerE = 0xD8; //Register E
+ this.registersHL = 0x014D; //Registers H and L combined
+ this.stackPointer = 0xFFFE; //Stack Pointer
+ this.programCounter = 0x0100; //Program Counter
+ //Some CPU Emulation State Variables:
+ this.CPUCyclesTotal = 0; //Relative CPU clocking to speed set, rounded appropriately.
+ this.CPUCyclesTotalBase = 0; //Relative CPU clocking to speed set base.
+ this.CPUCyclesTotalCurrent = 0; //Relative CPU clocking to speed set, the directly used value.
+ this.CPUCyclesTotalRoundoff = 0; //Clocking per iteration rounding catch.
+ this.baseCPUCyclesPerIteration = 0; //CPU clocks per iteration at 1x speed.
+ this.remainingClocks = 0; //HALT clocking overrun carry over.
+ this.inBootstrap = true; //Whether we're in the GBC boot ROM.
+ this.usedBootROM = false; //Updated upon ROM loading...
+ this.usedGBCBootROM = false; //Did we boot to the GBC boot ROM?
+ this.halt = false; //Has the CPU been suspended until the next interrupt?
+ this.skipPCIncrement = false; //Did we trip the DMG Halt bug?
+ this.stopEmulator = 3; //Has the emulation been paused or a frame has ended?
+ this.IME = true; //Are interrupts enabled?
+ this.IRQLineMatched = 0; //CPU IRQ assertion.
+ this.interruptsRequested = 0; //IF Register
+ this.interruptsEnabled = 0; //IE Register
+ this.hdmaRunning = false; //HDMA Transfer Flag - GBC only
+ this.CPUTicks = 0; //The number of clock cycles emulated.
+ this.doubleSpeedShifter = 0; //GBC double speed clocking shifter.
+ this.JoyPad = 0xFF; //Joypad State (two four-bit states actually)
+ this.CPUStopped = false; //CPU STOP status.
+ //Main RAM, MBC RAM, GBC Main RAM, VRAM, etc.
+ this.memoryReader = []; //Array of functions mapped to read back memory
+ this.memoryWriter = []; //Array of functions mapped to write to memory
+ this.memoryHighReader = []; //Array of functions mapped to read back 0xFFXX memory
+ this.memoryHighWriter = []; //Array of functions mapped to write to 0xFFXX memory
+ this.ROM = []; //The full ROM file dumped to an array.
+ this.memory = []; //Main Core Memory
+ this.MBCRam = []; //Switchable RAM (Used by games for more RAM) for the main memory range 0xA000 - 0xC000.
+ this.VRAM = []; //Extra VRAM bank for GBC.
+ this.GBCMemory = []; //GBC main RAM Banks
+ this.MBC1Mode = false; //MBC1 Type (4/32, 16/8)
+ this.MBCRAMBanksEnabled = false; //MBC RAM Access Control.
+ this.currMBCRAMBank = 0; //MBC Currently Indexed RAM Bank
+ this.currMBCRAMBankPosition = -0xA000; //MBC Position Adder;
+ this.cGBC = false; //GameBoy Color detection.
+ this.gbcRamBank = 1; //Currently Switched GameBoy Color ram bank
+ this.gbcRamBankPosition = -0xD000; //GBC RAM offset from address start.
+ this.gbcRamBankPositionECHO = -0xF000; //GBC RAM (ECHO mirroring) offset from address start.
+ this.RAMBanks = [0, 1, 2, 4, 16]; //Used to map the RAM banks to maximum size the MBC used can do.
+ this.ROMBank1offs = 0; //Offset of the ROM bank switching.
+ this.currentROMBank = 0; //The parsed current ROM bank selection.
+ this.cartridgeType = 0; //Cartridge Type
+ this.name = ""; //Name of the game
+ this.gameCode = ""; //Game code (Suffix for older games)
+ this.fromSaveState = false; //A boolean to see if this was loaded in as a save state.
+ this.savedStateFileName = ""; //When loaded in as a save state, this will not be empty.
+ this.STATTracker = 0; //Tracker for STAT triggering.
+ this.modeSTAT = 0; //The scan line mode (for lines 1-144 it's 2-3-0, for 145-154 it's 1)
+ this.spriteCount = 252; //Mode 3 extra clocking counter (Depends on how many sprites are on the current line.).
+ this.LYCMatchTriggerSTAT = false; //Should we trigger an interrupt if LY==LYC?
+ this.mode2TriggerSTAT = false; //Should we trigger an interrupt if in mode 2?
+ this.mode1TriggerSTAT = false; //Should we trigger an interrupt if in mode 1?
+ this.mode0TriggerSTAT = false; //Should we trigger an interrupt if in mode 0?
+ this.LCDisOn = false; //Is the emulated LCD controller on?
+ this.LINECONTROL = []; //Array of functions to handle each scan line we do (onscreen + offscreen)
+ this.DISPLAYOFFCONTROL = [function (parentObj) {
+ //Array of line 0 function to handle the LCD controller when it's off (Do nothing!).
+ }];
+ this.LCDCONTROL = null; //Pointer to either LINECONTROL or DISPLAYOFFCONTROL.
+ this.initializeLCDController(); //Compile the LCD controller functions.
+ //RTC (Real Time Clock for MBC3):
+ this.RTCisLatched = false;
+ this.latchedSeconds = 0; //RTC latched seconds.
+ this.latchedMinutes = 0; //RTC latched minutes.
+ this.latchedHours = 0; //RTC latched hours.
+ this.latchedLDays = 0; //RTC latched lower 8-bits of the day counter.
+ this.latchedHDays = 0; //RTC latched high-bit of the day counter.
+ this.RTCSeconds = 0; //RTC seconds counter.
+ this.RTCMinutes = 0; //RTC minutes counter.
+ this.RTCHours = 0; //RTC hours counter.
+ this.RTCDays = 0; //RTC days counter.
+ this.RTCDayOverFlow = false; //Did the RTC overflow and wrap the day counter?
+ this.RTCHALT = false; //Is the RTC allowed to clock up?
+ //Gyro:
+ this.highX = 127;
+ this.lowX = 127;
+ this.highY = 127;
+ this.lowY = 127;
+ //Sound variables:
+ this.audioHandle = null; //XAudioJS handle
+ this.numSamplesTotal = 0; //Length of the sound buffers.
+ this.sampleSize = 0; //Length of the sound buffer for one channel.
+ this.dutyLookup = [ //Map the duty values given to ones we can work with.
+ [false, false, false, false, false, false, false, true],
+ [true, false, false, false, false, false, false, true],
+ [true, false, false, false, false, true, true, true],
+ [false, true, true, true, true, true, true, false]
+ ];
+ this.currentBuffer = []; //The audio buffer we're working on.
+ this.bufferContainAmount = 0; //Buffer maintenance metric.
+ this.LSFR15Table = null;
+ this.LSFR7Table = null;
+ this.noiseSampleTable = null;
+ this.initializeAudioStartState();
+ this.soundMasterEnabled = false; //As its name implies
+ this.channel3PCM = null; //Channel 3 adjusted sample buffer.
+ //Vin Shit:
+ this.VinLeftChannelMasterVolume = 8; //Computed post-mixing volume.
+ this.VinRightChannelMasterVolume = 8; //Computed post-mixing volume.
+ //Channel paths enabled:
+ this.leftChannel1 = false;
+ this.leftChannel2 = false;
+ this.leftChannel3 = false;
+ this.leftChannel4 = false;
+ this.rightChannel1 = false;
+ this.rightChannel2 = false;
+ this.rightChannel3 = false;
+ this.rightChannel4 = false;
+ //Channel output level caches:
+ this.channel1currentSampleLeft = 0;
+ this.channel1currentSampleRight = 0;
+ this.channel2currentSampleLeft = 0;
+ this.channel2currentSampleRight = 0;
+ this.channel3currentSampleLeft = 0;
+ this.channel3currentSampleRight = 0;
+ this.channel4currentSampleLeft = 0;
+ this.channel4currentSampleRight = 0;
+ this.channel1currentSampleLeftSecondary = 0;
+ this.channel1currentSampleRightSecondary = 0;
+ this.channel2currentSampleLeftSecondary = 0;
+ this.channel2currentSampleRightSecondary = 0;
+ this.channel3currentSampleLeftSecondary = 0;
+ this.channel3currentSampleRightSecondary = 0;
+ this.channel4currentSampleLeftSecondary = 0;
+ this.channel4currentSampleRightSecondary = 0;
+ this.channel1currentSampleLeftTrimary = 0;
+ this.channel1currentSampleRightTrimary = 0;
+ this.channel2currentSampleLeftTrimary = 0;
+ this.channel2currentSampleRightTrimary = 0;
+ this.mixerOutputCache = 0;
+ //Pre-multipliers to cache some calculations:
+ this.initializeTiming();
+ this.machineOut = 0; //Premultiplier for audio samples per instruction.
+ //Audio generation counters:
+ this.audioTicks = 0; //Used to sample the audio system every x CPU instructions.
+ this.audioIndex = 0; //Used to keep alignment on audio generation.
+ this.rollover = 0; //Used to keep alignment on the number of samples to output (Realign from counter alias).
+ //Timing Variables
+ this.emulatorTicks = 0; //Times for how many instructions to execute before ending the loop.
+ this.DIVTicks = 56; //DIV Ticks Counter (Invisible lower 8-bit)
+ this.LCDTicks = 60; //Counter for how many instructions have been executed on a scanline so far.
+ this.timerTicks = 0; //Counter for the TIMA timer.
+ this.TIMAEnabled = false; //Is TIMA enabled?
+ this.TACClocker = 1024; //Timer Max Ticks
+ this.serialTimer = 0; //Serial IRQ Timer
+ this.serialShiftTimer = 0; //Serial Transfer Shift Timer
+ this.serialShiftTimerAllocated = 0; //Serial Transfer Shift Timer Refill
+ this.IRQEnableDelay = 0; //Are the interrupts on queue to be enabled?
+ var dateVar = new_Date(); // The line is changed for benchmarking.
+ this.lastIteration = dateVar.getTime();//The last time we iterated the main loop.
+ dateVar = new_Date(); // The line is changed for benchmarking.
+ this.firstIteration = dateVar.getTime();
+ this.iterations = 0;
+ this.actualScanLine = 0; //Actual scan line...
+ this.lastUnrenderedLine = 0; //Last rendered scan line...
+ this.queuedScanLines = 0;
+ this.totalLinesPassed = 0;
+ this.haltPostClocks = 0; //Post-Halt clocking.
+ //ROM Cartridge Components:
+ this.cMBC1 = false; //Does the cartridge use MBC1?
+ this.cMBC2 = false; //Does the cartridge use MBC2?
+ this.cMBC3 = false; //Does the cartridge use MBC3?
+ this.cMBC5 = false; //Does the cartridge use MBC5?
+ this.cMBC7 = false; //Does the cartridge use MBC7?
+ this.cSRAM = false; //Does the cartridge use save RAM?
+ this.cMMMO1 = false; //...
+ this.cRUMBLE = false; //Does the cartridge use the RUMBLE addressing (modified MBC5)?
+ this.cCamera = false; //Is the cartridge actually a GameBoy Camera?
+ this.cTAMA5 = false; //Does the cartridge use TAMA5? (Tamagotchi Cartridge)
+ this.cHuC3 = false; //Does the cartridge use HuC3 (Hudson Soft / modified MBC3)?
+ this.cHuC1 = false; //Does the cartridge use HuC1 (Hudson Soft / modified MBC1)?
+ this.cTIMER = false; //Does the cartridge have an RTC?
+ this.ROMBanks = [ // 1 Bank = 16 KBytes = 256 Kbits
+ 2, 4, 8, 16, 32, 64, 128, 256, 512
+ ];
+ this.ROMBanks[0x52] = 72;
+ this.ROMBanks[0x53] = 80;
+ this.ROMBanks[0x54] = 96;
+ this.numRAMBanks = 0; //How many RAM banks were actually allocated?
+ ////Graphics Variables
+ this.currVRAMBank = 0; //Current VRAM bank for GBC.
+ this.backgroundX = 0; //Register SCX (X-Scroll)
+ this.backgroundY = 0; //Register SCY (Y-Scroll)
+ this.gfxWindowDisplay = false; //Is the windows enabled?
+ this.gfxSpriteShow = false; //Are sprites enabled?
+ this.gfxSpriteNormalHeight = true; //Are we doing 8x8 or 8x16 sprites?
+ this.bgEnabled = true; //Is the BG enabled?
+ this.BGPriorityEnabled = true; //Can we flag the BG for priority over sprites?
+ this.gfxWindowCHRBankPosition = 0; //The current bank of the character map the window uses.
+ this.gfxBackgroundCHRBankPosition = 0; //The current bank of the character map the BG uses.
+ this.gfxBackgroundBankOffset = 0x80; //Fast mapping of the tile numbering/
+ this.windowY = 0; //Current Y offset of the window.
+ this.windowX = 0; //Current X offset of the window.
+ this.drewBlank = 0; //To prevent the repeating of drawing a blank screen.
+ this.drewFrame = false; //Throttle how many draws we can do to once per iteration.
+ this.midScanlineOffset = -1; //mid-scanline rendering offset.
+ this.pixelEnd = 0; //track the x-coord limit for line rendering (mid-scanline usage).
+ this.currentX = 0; //The x-coord we left off at for mid-scanline rendering.
+ //BG Tile Pointer Caches:
+ this.BGCHRBank1 = null;
+ this.BGCHRBank2 = null;
+ this.BGCHRCurrentBank = null;
+ //Tile Data Cache:
+ this.tileCache = null;
+ //Palettes:
+ this.colors = [0xEFFFDE, 0xADD794, 0x529273, 0x183442]; //"Classic" GameBoy palette colors.
+ this.OBJPalette = null;
+ this.BGPalette = null;
+ this.gbcOBJRawPalette = null;
+ this.gbcBGRawPalette = null;
+ this.gbOBJPalette = null;
+ this.gbBGPalette = null;
+ this.gbcOBJPalette = null;
+ this.gbcBGPalette = null;
+ this.gbBGColorizedPalette = null;
+ this.gbOBJColorizedPalette = null;
+ this.cachedBGPaletteConversion = null;
+ this.cachedOBJPaletteConversion = null;
+ this.updateGBBGPalette = this.updateGBRegularBGPalette;
+ this.updateGBOBJPalette = this.updateGBRegularOBJPalette;
+ this.colorizedGBPalettes = false;
+ this.BGLayerRender = null; //Reference to the BG rendering function.
+ this.WindowLayerRender = null; //Reference to the window rendering function.
+ this.SpriteLayerRender = null; //Reference to the OAM rendering function.
+ this.frameBuffer = []; //The internal frame-buffer.
+ this.swizzledFrame = null; //The secondary gfx buffer that holds the converted RGBA values.
+ this.canvasBuffer = null; //imageData handle
+ this.pixelStart = 0; //Temp variable for holding the current working framebuffer offset.
+ //Variables used for scaling in JS:
+ this.onscreenWidth = this.offscreenWidth = 160;
+ this.onscreenHeight = this.offScreenheight = 144;
+ this.offscreenRGBCount = this.onscreenWidth * this.onscreenHeight * 4;
+ //Initialize the white noise cache tables ahead of time:
+ this.intializeWhiteNoise();
+}
+
+// Start of code changed for benchmarking (removed ROM):
+GameBoyCore.prototype.GBBOOTROM = [];
+GameBoyCore.prototype.GBCBOOTROM = [];
+// End of code changed for benchmarking.
+
+GameBoyCore.prototype.ffxxDump = [ //Dump of the post-BOOT I/O register state (From gambatte):
+ 0x0F, 0x00, 0x7C, 0xFF, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01,
+ 0x80, 0xBF, 0xF3, 0xFF, 0xBF, 0xFF, 0x3F, 0x00, 0xFF, 0xBF, 0x7F, 0xFF, 0x9F, 0xFF, 0xBF, 0xFF,
+ 0xFF, 0x00, 0x00, 0xBF, 0x77, 0xF3, 0xF1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF,
+ 0x91, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x7E, 0xFF, 0xFE,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3E, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0xFF, 0xC1, 0x00, 0xFE, 0xFF, 0xFF, 0xFF,
+ 0xF8, 0xFF, 0x00, 0x00, 0x00, 0x8F, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xCE, 0xED, 0x66, 0x66, 0xCC, 0x0D, 0x00, 0x0B, 0x03, 0x73, 0x00, 0x83, 0x00, 0x0C, 0x00, 0x0D,
+ 0x00, 0x08, 0x11, 0x1F, 0x88, 0x89, 0x00, 0x0E, 0xDC, 0xCC, 0x6E, 0xE6, 0xDD, 0xDD, 0xD9, 0x99,
+ 0xBB, 0xBB, 0x67, 0x63, 0x6E, 0x0E, 0xEC, 0xCC, 0xDD, 0xDC, 0x99, 0x9F, 0xBB, 0xB9, 0x33, 0x3E,
+ 0x45, 0xEC, 0x52, 0xFA, 0x08, 0xB7, 0x07, 0x5D, 0x01, 0xFD, 0xC0, 0xFF, 0x08, 0xFC, 0x00, 0xE5,
+ 0x0B, 0xF8, 0xC2, 0xCE, 0xF4, 0xF9, 0x0F, 0x7F, 0x45, 0x6D, 0x3D, 0xFE, 0x46, 0x97, 0x33, 0x5E,
+ 0x08, 0xEF, 0xF1, 0xFF, 0x86, 0x83, 0x24, 0x74, 0x12, 0xFC, 0x00, 0x9F, 0xB4, 0xB7, 0x06, 0xD5,
+ 0xD0, 0x7A, 0x00, 0x9E, 0x04, 0x5F, 0x41, 0x2F, 0x1D, 0x77, 0x36, 0x75, 0x81, 0xAA, 0x70, 0x3A,
+ 0x98, 0xD1, 0x71, 0x02, 0x4D, 0x01, 0xC1, 0xFF, 0x0D, 0x00, 0xD3, 0x05, 0xF9, 0x00, 0x0B, 0x00
+];
+GameBoyCore.prototype.OPCODE = [
+ //NOP
+ //#0x00:
+ function (parentObj) {
+ //Do Nothing...
+ },
+ //LD BC, nn
+ //#0x01:
+ function (parentObj) {
+ parentObj.registerC = parentObj.memoryReader[parentObj.programCounter](parentObj, parentObj.programCounter);
+ parentObj.registerB = parentObj.memoryRead((parentObj.programCounter + 1) & 0xFFFF);
+ parentObj.programCounter = (parentObj.programCounter + 2) & 0xFFFF;
+ },
+ //LD (BC), A
+ //#0x02:
+ function (parentObj) {
+ parentObj.memoryWrite((parentObj.registerB << 8) | parentObj.registerC, parentObj.registerA);
+ },
+ //INC BC
+ //#0x03:
+ function (parentObj) {
+ var temp_var = ((parentObj.registerB << 8) | parentObj.registerC) + 1;
+ parentObj.registerB = (temp_var >> 8) & 0xFF;
+ parentObj.registerC = temp_var & 0xFF;
+ },
+ //INC B
+ //#0x04:
+ function (parentObj) {
+ parentObj.registerB = (parentObj.registerB + 1) & 0xFF;
+ parentObj.FZero = (parentObj.registerB == 0);
+ parentObj.FHalfCarry = ((parentObj.registerB & 0xF) == 0);
+ parentObj.FSubtract = false;
+ },
+ //DEC B
+ //#0x05:
+ function (parentObj) {
+ parentObj.registerB = (parentObj.registerB - 1) & 0xFF;
+ parentObj.FZero = (parentObj.registerB == 0);
+ parentObj.FHalfCarry = ((parentObj.registerB & 0xF) == 0xF);
+ parentObj.FSubtract = true;
+ },
+ //LD B, n
+ //#0x06:
+ function (parentObj) {
+ parentObj.registerB = parentObj.memoryReader[parentObj.programCounter](parentObj, parentObj.programCounter);
+ parentObj.programCounter = (parentObj.programCounter + 1) & 0xFFFF;
+ },
+ //RLCA
+ //#0x07:
+ function (parentObj) {
+ parentObj.FCarry = (parentObj.registerA > 0x7F);
+ parentObj.registerA = ((parentObj.registerA << 1) & 0xFF) | (parentObj.registerA >> 7);
+ parentObj.FZero = parentObj.FSubtract = parentObj.FHalfCarry = false;
+ },
+ //LD (nn), SP
+ //#0x08:
+ function (parentObj) {
+ var temp_var = (parentObj.memoryRead((parentObj.programCounter + 1) & 0xFFFF) << 8) | parentObj.memoryReader[parentObj.programCounter](parentObj, parentObj.programCounter);
+ parentObj.programCounter = (parentObj.programCounter + 2) & 0xFFFF;
+ parentObj.memoryWrite(temp_var, parentObj.stackPointer & 0xFF);
+ parentObj.memoryWrite((temp_var + 1) & 0xFFFF, parentObj.stackPointer >> 8);
+ },
+ //ADD HL, BC
+ //#0x09:
+ function (parentObj) {
+ var dirtySum = parentObj.registersHL + ((parentObj.registerB << 8) | parentObj.registerC);
+ parentObj.FHalfCarry = ((parentObj.registersHL & 0xFFF) > (dirtySum & 0xFFF));
+ parentObj.FCarry = (dirtySum > 0xFFFF);
+ parentObj.registersHL = dirtySum & 0xFFFF;
+ parentObj.FSubtract = false;
+ },
+ //LD A, (BC)
+ //#0x0A:
+ function (parentObj) {
+ parentObj.registerA = parentObj.memoryRead((parentObj.registerB << 8) | parentObj.registerC);
+ },
+ //DEC BC
+ //#0x0B:
+ function (parentObj) {
+ var temp_var = (((parentObj.registerB << 8) | parentObj.registerC) - 1) & 0xFFFF;
+ parentObj.registerB = temp_var >> 8;
+ parentObj.registerC = temp_var & 0xFF;
+ },
+ //INC C
+ //#0x0C:
+ function (parentObj) {
+ parentObj.registerC = (parentObj.registerC + 1) & 0xFF;
+ parentObj.FZero = (parentObj.registerC == 0);
+ parentObj.FHalfCarry = ((parentObj.registerC & 0xF) == 0);
+ parentObj.FSubtract = false;
+ },
+ //DEC C
+ //#0x0D:
+ function (parentObj) {
+ parentObj.registerC = (parentObj.registerC - 1) & 0xFF;
+ parentObj.FZero = (parentObj.registerC == 0);
+ parentObj.FHalfCarry = ((parentObj.registerC & 0xF) == 0xF);
+ parentObj.FSubtract = true;
+ },
+ //LD C, n
+ //#0x0E:
+ function (parentObj) {
+ parentObj.registerC = parentObj.memoryReader[parentObj.programCounter](parentObj, parentObj.programCounter);
+ parentObj.programCounter = (parentObj.programCounter + 1) & 0xFFFF;
+ },
+ //RRCA
+ //#0x0F:
+ function (parentObj) {
+ parentObj.registerA = (parentObj.registerA >> 1) | ((parentObj.registerA & 1) << 7);
+ parentObj.FCarry = (parentObj.registerA > 0x7F);
+ parentObj.FZero = parentObj.FSubtract = parentObj.FHalfCarry = false;
+ },
+ //STOP
+ //#0x10:
+ function (parentObj) {
+ if (parentObj.cGBC) {
+ if ((parentObj.memory[0xFF4D] & 0x01) == 0x01) { //Speed change requested.
+ if (parentObj.memory[0xFF4D] > 0x7F) { //Go back to single speed mode.
+ cout("Going into single clock speed mode.", 0);
+ parentObj.doubleSpeedShifter = 0;
+ parentObj.memory[0xFF4D] &= 0x7F; //Clear the double speed mode flag.
+ }
+ else { //Go to double speed mode.
+ cout("Going into double clock speed mode.", 0);
+ parentObj.doubleSpeedShifter = 1;
+ parentObj.memory[0xFF4D] |= 0x80; //Set the double speed mode flag.
+ }
+ parentObj.memory[0xFF4D] &= 0xFE; //Reset the request bit.
+ }
+ else {
+ parentObj.handleSTOP();
+ }
+ }
+ else {
+ parentObj.handleSTOP();
+ }
+ },
+ //LD DE, nn
+ //#0x11:
+ function (parentObj) {
+ parentObj.registerE = parentObj.memoryReader[parentObj.programCounter](parentObj, parentObj.programCounter);
+ parentObj.registerD = parentObj.memoryRead((parentObj.programCounter + 1) & 0xFFFF);
+ parentObj.programCounter = (parentObj.programCounter + 2) & 0xFFFF;
+ },
+ //LD (DE), A
+ //#0x12:
+ function (parentObj) {
+ parentObj.memoryWrite((parentObj.registerD << 8) | parentObj.registerE, parentObj.registerA);
+ },
+ //INC DE
+ //#0x13:
+ function (parentObj) {
+ var temp_var = ((parentObj.registerD << 8) | parentObj.registerE) + 1;
+ parentObj.registerD = (temp_var >> 8) & 0xFF;
+ parentObj.registerE = temp_var & 0xFF;
+ },
+ //INC D
+ //#0x14:
+ function (parentObj) {
+ parentObj.registerD = (parentObj.registerD + 1) & 0xFF;
+ parentObj.FZero = (parentObj.registerD == 0);
+ parentObj.FHalfCarry = ((parentObj.registerD & 0xF) == 0);
+ parentObj.FSubtract = false;
+ },
+ //DEC D
+ //#0x15:
+ function (parentObj) {
+ parentObj.registerD = (parentObj.registerD - 1) & 0xFF;
+ parentObj.FZero = (parentObj.registerD == 0);
+ parentObj.FHalfCarry = ((parentObj.registerD & 0xF) == 0xF);
+ parentObj.FSubtract = true;
+ },
+ //LD D, n
+ //#0x16:
+ function (parentObj) {
+ parentObj.registerD = parentObj.memoryReader[parentObj.programCounter](parentObj, parentObj.programCounter);
+ parentObj.programCounter = (parentObj.programCounter + 1) & 0xFFFF;
+ },
+ //RLA
+ //#0x17:
+ function (parentObj) {
+ var carry_flag = (parentObj.FCarry) ? 1 : 0;
+ parentObj.FCarry = (parentObj.registerA > 0x7F);
+ parentObj.registerA = ((parentObj.registerA << 1) & 0xFF) | carry_flag;
+ parentObj.FZero = parentObj.FSubtract = parentObj.FHalfCarry = false;
+ },
+ //JR n
+ //#0x18:
+ function (parentObj) {
+ parentObj.programCounter = (parentObj.programCounter + ((parentObj.memoryReader[parentObj.programCounter](parentObj, parentObj.programCounter) << 24) >> 24) + 1) & 0xFFFF;
+ },
+ //ADD HL, DE
+ //#0x19:
+ function (parentObj) {
+ var dirtySum = parentObj.registersHL + ((parentObj.registerD << 8) | parentObj.registerE);
+ parentObj.FHalfCarry = ((parentObj.registersHL & 0xFFF) > (dirtySum & 0xFFF));
+ parentObj.FCarry = (dirtySum > 0xFFFF);
+ parentObj.registersHL = dirtySum & 0xFFFF;
+ parentObj.FSubtract = false;
+ },
+ //LD A, (DE)
+ //#0x1A:
+ function (parentObj) {
+ parentObj.registerA = parentObj.memoryRead((parentObj.registerD << 8) | parentObj.registerE);
+ },
+ //DEC DE
+ //#0x1B:
+ function (parentObj) {
+ var temp_var = (((parentObj.registerD << 8) | parentObj.registerE) - 1) & 0xFFFF;
+ parentObj.registerD = temp_var >> 8;
+ parentObj.registerE = temp_var & 0xFF;
+ },
+ //INC E
+ //#0x1C:
+ function (parentObj) {
+ parentObj.registerE = (parentObj.registerE + 1) & 0xFF;
+ parentObj.FZero = (parentObj.registerE == 0);
+ parentObj.FHalfCarry = ((parentObj.registerE & 0xF) == 0);
+ parentObj.FSubtract = false;
+ },
+ //DEC E
+ //#0x1D:
+ function (parentObj) {
+ parentObj.registerE = (parentObj.registerE - 1) & 0xFF;
+ parentObj.FZero = (parentObj.registerE == 0);
+ parentObj.FHalfCarry = ((parentObj.registerE & 0xF) == 0xF);
+ parentObj.FSubtract = true;
+ },
+ //LD E, n
+ //#0x1E:
+ function (parentObj) {
+ parentObj.registerE = parentObj.memoryReader[parentObj.programCounter](parentObj, parentObj.programCounter);
+ parentObj.programCounter = (parentObj.programCounter + 1) & 0xFFFF;
+ },
+ //RRA
+ //#0x1F:
+ function (parentObj) {
+ var carry_flag = (parentObj.FCarry) ? 0x80 : 0;
+ parentObj.FCarry = ((parentObj.registerA & 1) == 1);
+ parentObj.registerA = (parentObj.registerA >> 1) | carry_flag;
+ parentObj.FZero = parentObj.FSubtract = parentObj.FHalfCarry = false;
+ },
+ //JR NZ, n
+ //#0x20:
+ function (parentObj) {
+ if (!parentObj.FZero) {
+ parentObj.programCounter = (parentObj.programCounter + ((parentObj.memoryReader[parentObj.programCounter](parentObj, parentObj.programCounter) << 24) >> 24) + 1) & 0xFFFF;
+ parentObj.CPUTicks += 4;
+ }
+ else {
+ parentObj.programCounter = (parentObj.programCounter + 1) & 0xFFFF;
+ }
+ },
+ //LD HL, nn
+ //#0x21:
+ function (parentObj) {
+ parentObj.registersHL = (parentObj.memoryRead((parentObj.programCounter + 1) & 0xFFFF) << 8) | parentObj.memoryReader[parentObj.programCounter](parentObj, parentObj.programCounter);
+ parentObj.programCounter = (parentObj.programCounter + 2) & 0xFFFF;
+ },
+ //LDI (HL), A
+ //#0x22:
+ function (parentObj) {
+ parentObj.memoryWriter[parentObj.registersHL](parentObj, parentObj.registersHL, parentObj.registerA);
+ parentObj.registersHL = (parentObj.registersHL + 1) & 0xFFFF;
+ },
+ //INC HL
+ //#0x23:
+ function (parentObj) {
+ parentObj.registersHL = (parentObj.registersHL + 1) & 0xFFFF;
+ },
+ //INC H
+ //#0x24:
+ function (parentObj) {
+ var H = ((parentObj.registersHL >> 8) + 1) & 0xFF;
+ parentObj.FZero = (H == 0);
+ parentObj.FHalfCarry = ((H & 0xF) == 0);
+ parentObj.FSubtract = false;
+ parentObj.registersHL = (H << 8) | (parentObj.registersHL & 0xFF);
+ },
+ //DEC H
+ //#0x25:
+ function (parentObj) {
+ var H = ((parentObj.registersHL >> 8) - 1) & 0xFF;
+ parentObj.FZero = (H == 0);
+ parentObj.FHalfCarry = ((H & 0xF) == 0xF);
+ parentObj.FSubtract = true;
+ parentObj.registersHL = (H << 8) | (parentObj.registersHL & 0xFF);
+ },
+ //LD H, n
+ //#0x26:
+ function (parentObj) {
+ parentObj.registersHL = (parentObj.memoryReader[parentObj.programCounter](parentObj, parentObj.programCounter) << 8) | (parentObj.registersHL & 0xFF);
+ parentObj.programCounter = (parentObj.programCounter + 1) & 0xFFFF;
+ },
+ //DAA
+ //#0x27:
+ function (parentObj) {
+ if (!parentObj.FSubtract) {
+ if (parentObj.FCarry || parentObj.registerA > 0x99) {
+ parentObj.registerA = (parentObj.registerA + 0x60) & 0xFF;
+ parentObj.FCarry = true;
+ }
+ if (parentObj.FHalfCarry || (parentObj.registerA & 0xF) > 0x9) {
+ parentObj.registerA = (parentObj.registerA + 0x06) & 0xFF;
+ parentObj.FHalfCarry = false;
+ }
+ }
+ else if (parentObj.FCarry && parentObj.FHalfCarry) {
+ parentObj.registerA = (parentObj.registerA + 0x9A) & 0xFF;
+ parentObj.FHalfCarry = false;
+ }
+ else if (parentObj.FCarry) {
+ parentObj.registerA = (parentObj.registerA + 0xA0) & 0xFF;
+ }
+ else if (parentObj.FHalfCarry) {
+ parentObj.registerA = (parentObj.registerA + 0xFA) & 0xFF;
+ parentObj.FHalfCarry = false;
+ }
+ parentObj.FZero = (parentObj.registerA == 0);
+ },
+ //JR Z, n
+ //#0x28:
+ function (parentObj) {
+ if (parentObj.FZero) {
+ parentObj.programCounter = (parentObj.programCounter + ((parentObj.memoryReader[parentObj.programCounter](parentObj, parentObj.programCounter) << 24) >> 24) + 1) & 0xFFFF;
+ parentObj.CPUTicks += 4;
+ }
+ else {
+ parentObj.programCounter = (parentObj.programCounter + 1) & 0xFFFF;
+ }
+ },
+ //ADD HL, HL
+ //#0x29:
+ function (parentObj) {
+ parentObj.FHalfCarry = ((parentObj.registersHL & 0xFFF) > 0x7FF);
+ parentObj.FCarry = (parentObj.registersHL > 0x7FFF);
+ parentObj.registersHL = (parentObj.registersHL << 1) & 0xFFFF;
+ parentObj.FSubtract = false;
+ },
+ //LDI A, (HL)
+ //#0x2A:
+ function (parentObj) {
+ parentObj.registerA = parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL);
+ parentObj.registersHL = (parentObj.registersHL + 1) & 0xFFFF;
+ },
+ //DEC HL
+ //#0x2B:
+ function (parentObj) {
+ parentObj.registersHL = (parentObj.registersHL - 1) & 0xFFFF;
+ },
+ //INC L
+ //#0x2C:
+ function (parentObj) {
+ var L = (parentObj.registersHL + 1) & 0xFF;
+ parentObj.FZero = (L == 0);
+ parentObj.FHalfCarry = ((L & 0xF) == 0);
+ parentObj.FSubtract = false;
+ parentObj.registersHL = (parentObj.registersHL & 0xFF00) | L;
+ },
+ //DEC L
+ //#0x2D:
+ function (parentObj) {
+ var L = (parentObj.registersHL - 1) & 0xFF;
+ parentObj.FZero = (L == 0);
+ parentObj.FHalfCarry = ((L & 0xF) == 0xF);
+ parentObj.FSubtract = true;
+ parentObj.registersHL = (parentObj.registersHL & 0xFF00) | L;
+ },
+ //LD L, n
+ //#0x2E:
+ function (parentObj) {
+ parentObj.registersHL = (parentObj.registersHL & 0xFF00) | parentObj.memoryReader[parentObj.programCounter](parentObj, parentObj.programCounter);
+ parentObj.programCounter = (parentObj.programCounter + 1) & 0xFFFF;
+ },
+ //CPL
+ //#0x2F:
+ function (parentObj) {
+ parentObj.registerA ^= 0xFF;
+ parentObj.FSubtract = parentObj.FHalfCarry = true;
+ },
+ //JR NC, n
+ //#0x30:
+ function (parentObj) {
+ if (!parentObj.FCarry) {
+ parentObj.programCounter = (parentObj.programCounter + ((parentObj.memoryReader[parentObj.programCounter](parentObj, parentObj.programCounter) << 24) >> 24) + 1) & 0xFFFF;
+ parentObj.CPUTicks += 4;
+ }
+ else {
+ parentObj.programCounter = (parentObj.programCounter + 1) & 0xFFFF;
+ }
+ },
+ //LD SP, nn
+ //#0x31:
+ function (parentObj) {
+ parentObj.stackPointer = (parentObj.memoryRead((parentObj.programCounter + 1) & 0xFFFF) << 8) | parentObj.memoryReader[parentObj.programCounter](parentObj, parentObj.programCounter);
+ parentObj.programCounter = (parentObj.programCounter + 2) & 0xFFFF;
+ },
+ //LDD (HL), A
+ //#0x32:
+ function (parentObj) {
+ parentObj.memoryWriter[parentObj.registersHL](parentObj, parentObj.registersHL, parentObj.registerA);
+ parentObj.registersHL = (parentObj.registersHL - 1) & 0xFFFF;
+ },
+ //INC SP
+ //#0x33:
+ function (parentObj) {
+ parentObj.stackPointer = (parentObj.stackPointer + 1) & 0xFFFF;
+ },
+ //INC (HL)
+ //#0x34:
+ function (parentObj) {
+ var temp_var = (parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL) + 1) & 0xFF;
+ parentObj.FZero = (temp_var == 0);
+ parentObj.FHalfCarry = ((temp_var & 0xF) == 0);
+ parentObj.FSubtract = false;
+ parentObj.memoryWriter[parentObj.registersHL](parentObj, parentObj.registersHL, temp_var);
+ },
+ //DEC (HL)
+ //#0x35:
+ function (parentObj) {
+ var temp_var = (parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL) - 1) & 0xFF;
+ parentObj.FZero = (temp_var == 0);
+ parentObj.FHalfCarry = ((temp_var & 0xF) == 0xF);
+ parentObj.FSubtract = true;
+ parentObj.memoryWriter[parentObj.registersHL](parentObj, parentObj.registersHL, temp_var);
+ },
+ //LD (HL), n
+ //#0x36:
+ function (parentObj) {
+ parentObj.memoryWriter[parentObj.registersHL](parentObj, parentObj.registersHL, parentObj.memoryReader[parentObj.programCounter](parentObj, parentObj.programCounter));
+ parentObj.programCounter = (parentObj.programCounter + 1) & 0xFFFF;
+ },
+ //SCF
+ //#0x37:
+ function (parentObj) {
+ parentObj.FCarry = true;
+ parentObj.FSubtract = parentObj.FHalfCarry = false;
+ },
+ //JR C, n
+ //#0x38:
+ function (parentObj) {
+ if (parentObj.FCarry) {
+ parentObj.programCounter = (parentObj.programCounter + ((parentObj.memoryReader[parentObj.programCounter](parentObj, parentObj.programCounter) << 24) >> 24) + 1) & 0xFFFF;
+ parentObj.CPUTicks += 4;
+ }
+ else {
+ parentObj.programCounter = (parentObj.programCounter + 1) & 0xFFFF;
+ }
+ },
+ //ADD HL, SP
+ //#0x39:
+ function (parentObj) {
+ var dirtySum = parentObj.registersHL + parentObj.stackPointer;
+ parentObj.FHalfCarry = ((parentObj.registersHL & 0xFFF) > (dirtySum & 0xFFF));
+ parentObj.FCarry = (dirtySum > 0xFFFF);
+ parentObj.registersHL = dirtySum & 0xFFFF;
+ parentObj.FSubtract = false;
+ },
+ //LDD A, (HL)
+ //#0x3A:
+ function (parentObj) {
+ parentObj.registerA = parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL);
+ parentObj.registersHL = (parentObj.registersHL - 1) & 0xFFFF;
+ },
+ //DEC SP
+ //#0x3B:
+ function (parentObj) {
+ parentObj.stackPointer = (parentObj.stackPointer - 1) & 0xFFFF;
+ },
+ //INC A
+ //#0x3C:
+ function (parentObj) {
+ parentObj.registerA = (parentObj.registerA + 1) & 0xFF;
+ parentObj.FZero = (parentObj.registerA == 0);
+ parentObj.FHalfCarry = ((parentObj.registerA & 0xF) == 0);
+ parentObj.FSubtract = false;
+ },
+ //DEC A
+ //#0x3D:
+ function (parentObj) {
+ parentObj.registerA = (parentObj.registerA - 1) & 0xFF;
+ parentObj.FZero = (parentObj.registerA == 0);
+ parentObj.FHalfCarry = ((parentObj.registerA & 0xF) == 0xF);
+ parentObj.FSubtract = true;
+ },
+ //LD A, n
+ //#0x3E:
+ function (parentObj) {
+ parentObj.registerA = parentObj.memoryReader[parentObj.programCounter](parentObj, parentObj.programCounter);
+ parentObj.programCounter = (parentObj.programCounter + 1) & 0xFFFF;
+ },
+ //CCF
+ //#0x3F:
+ function (parentObj) {
+ parentObj.FCarry = !parentObj.FCarry;
+ parentObj.FSubtract = parentObj.FHalfCarry = false;
+ },
+ //LD B, B
+ //#0x40:
+ function (parentObj) {
+ //Do nothing...
+ },
+ //LD B, C
+ //#0x41:
+ function (parentObj) {
+ parentObj.registerB = parentObj.registerC;
+ },
+ //LD B, D
+ //#0x42:
+ function (parentObj) {
+ parentObj.registerB = parentObj.registerD;
+ },
+ //LD B, E
+ //#0x43:
+ function (parentObj) {
+ parentObj.registerB = parentObj.registerE;
+ },
+ //LD B, H
+ //#0x44:
+ function (parentObj) {
+ parentObj.registerB = parentObj.registersHL >> 8;
+ },
+ //LD B, L
+ //#0x45:
+ function (parentObj) {
+ parentObj.registerB = parentObj.registersHL & 0xFF;
+ },
+ //LD B, (HL)
+ //#0x46:
+ function (parentObj) {
+ parentObj.registerB = parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL);
+ },
+ //LD B, A
+ //#0x47:
+ function (parentObj) {
+ parentObj.registerB = parentObj.registerA;
+ },
+ //LD C, B
+ //#0x48:
+ function (parentObj) {
+ parentObj.registerC = parentObj.registerB;
+ },
+ //LD C, C
+ //#0x49:
+ function (parentObj) {
+ //Do nothing...
+ },
+ //LD C, D
+ //#0x4A:
+ function (parentObj) {
+ parentObj.registerC = parentObj.registerD;
+ },
+ //LD C, E
+ //#0x4B:
+ function (parentObj) {
+ parentObj.registerC = parentObj.registerE;
+ },
+ //LD C, H
+ //#0x4C:
+ function (parentObj) {
+ parentObj.registerC = parentObj.registersHL >> 8;
+ },
+ //LD C, L
+ //#0x4D:
+ function (parentObj) {
+ parentObj.registerC = parentObj.registersHL & 0xFF;
+ },
+ //LD C, (HL)
+ //#0x4E:
+ function (parentObj) {
+ parentObj.registerC = parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL);
+ },
+ //LD C, A
+ //#0x4F:
+ function (parentObj) {
+ parentObj.registerC = parentObj.registerA;
+ },
+ //LD D, B
+ //#0x50:
+ function (parentObj) {
+ parentObj.registerD = parentObj.registerB;
+ },
+ //LD D, C
+ //#0x51:
+ function (parentObj) {
+ parentObj.registerD = parentObj.registerC;
+ },
+ //LD D, D
+ //#0x52:
+ function (parentObj) {
+ //Do nothing...
+ },
+ //LD D, E
+ //#0x53:
+ function (parentObj) {
+ parentObj.registerD = parentObj.registerE;
+ },
+ //LD D, H
+ //#0x54:
+ function (parentObj) {
+ parentObj.registerD = parentObj.registersHL >> 8;
+ },
+ //LD D, L
+ //#0x55:
+ function (parentObj) {
+ parentObj.registerD = parentObj.registersHL & 0xFF;
+ },
+ //LD D, (HL)
+ //#0x56:
+ function (parentObj) {
+ parentObj.registerD = parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL);
+ },
+ //LD D, A
+ //#0x57:
+ function (parentObj) {
+ parentObj.registerD = parentObj.registerA;
+ },
+ //LD E, B
+ //#0x58:
+ function (parentObj) {
+ parentObj.registerE = parentObj.registerB;
+ },
+ //LD E, C
+ //#0x59:
+ function (parentObj) {
+ parentObj.registerE = parentObj.registerC;
+ },
+ //LD E, D
+ //#0x5A:
+ function (parentObj) {
+ parentObj.registerE = parentObj.registerD;
+ },
+ //LD E, E
+ //#0x5B:
+ function (parentObj) {
+ //Do nothing...
+ },
+ //LD E, H
+ //#0x5C:
+ function (parentObj) {
+ parentObj.registerE = parentObj.registersHL >> 8;
+ },
+ //LD E, L
+ //#0x5D:
+ function (parentObj) {
+ parentObj.registerE = parentObj.registersHL & 0xFF;
+ },
+ //LD E, (HL)
+ //#0x5E:
+ function (parentObj) {
+ parentObj.registerE = parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL);
+ },
+ //LD E, A
+ //#0x5F:
+ function (parentObj) {
+ parentObj.registerE = parentObj.registerA;
+ },
+ //LD H, B
+ //#0x60:
+ function (parentObj) {
+ parentObj.registersHL = (parentObj.registerB << 8) | (parentObj.registersHL & 0xFF);
+ },
+ //LD H, C
+ //#0x61:
+ function (parentObj) {
+ parentObj.registersHL = (parentObj.registerC << 8) | (parentObj.registersHL & 0xFF);
+ },
+ //LD H, D
+ //#0x62:
+ function (parentObj) {
+ parentObj.registersHL = (parentObj.registerD << 8) | (parentObj.registersHL & 0xFF);
+ },
+ //LD H, E
+ //#0x63:
+ function (parentObj) {
+ parentObj.registersHL = (parentObj.registerE << 8) | (parentObj.registersHL & 0xFF);
+ },
+ //LD H, H
+ //#0x64:
+ function (parentObj) {
+ //Do nothing...
+ },
+ //LD H, L
+ //#0x65:
+ function (parentObj) {
+ parentObj.registersHL = (parentObj.registersHL & 0xFF) * 0x101;
+ },
+ //LD H, (HL)
+ //#0x66:
+ function (parentObj) {
+ parentObj.registersHL = (parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL) << 8) | (parentObj.registersHL & 0xFF);
+ },
+ //LD H, A
+ //#0x67:
+ function (parentObj) {
+ parentObj.registersHL = (parentObj.registerA << 8) | (parentObj.registersHL & 0xFF);
+ },
+ //LD L, B
+ //#0x68:
+ function (parentObj) {
+ parentObj.registersHL = (parentObj.registersHL & 0xFF00) | parentObj.registerB;
+ },
+ //LD L, C
+ //#0x69:
+ function (parentObj) {
+ parentObj.registersHL = (parentObj.registersHL & 0xFF00) | parentObj.registerC;
+ },
+ //LD L, D
+ //#0x6A:
+ function (parentObj) {
+ parentObj.registersHL = (parentObj.registersHL & 0xFF00) | parentObj.registerD;
+ },
+ //LD L, E
+ //#0x6B:
+ function (parentObj) {
+ parentObj.registersHL = (parentObj.registersHL & 0xFF00) | parentObj.registerE;
+ },
+ //LD L, H
+ //#0x6C:
+ function (parentObj) {
+ parentObj.registersHL = (parentObj.registersHL & 0xFF00) | (parentObj.registersHL >> 8);
+ },
+ //LD L, L
+ //#0x6D:
+ function (parentObj) {
+ //Do nothing...
+ },
+ //LD L, (HL)
+ //#0x6E:
+ function (parentObj) {
+ parentObj.registersHL = (parentObj.registersHL & 0xFF00) | parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL);
+ },
+ //LD L, A
+ //#0x6F:
+ function (parentObj) {
+ parentObj.registersHL = (parentObj.registersHL & 0xFF00) | parentObj.registerA;
+ },
+ //LD (HL), B
+ //#0x70:
+ function (parentObj) {
+ parentObj.memoryWriter[parentObj.registersHL](parentObj, parentObj.registersHL, parentObj.registerB);
+ },
+ //LD (HL), C
+ //#0x71:
+ function (parentObj) {
+ parentObj.memoryWriter[parentObj.registersHL](parentObj, parentObj.registersHL, parentObj.registerC);
+ },
+ //LD (HL), D
+ //#0x72:
+ function (parentObj) {
+ parentObj.memoryWriter[parentObj.registersHL](parentObj, parentObj.registersHL, parentObj.registerD);
+ },
+ //LD (HL), E
+ //#0x73:
+ function (parentObj) {
+ parentObj.memoryWriter[parentObj.registersHL](parentObj, parentObj.registersHL, parentObj.registerE);
+ },
+ //LD (HL), H
+ //#0x74:
+ function (parentObj) {
+ parentObj.memoryWriter[parentObj.registersHL](parentObj, parentObj.registersHL, parentObj.registersHL >> 8);
+ },
+ //LD (HL), L
+ //#0x75:
+ function (parentObj) {
+ parentObj.memoryWriter[parentObj.registersHL](parentObj, parentObj.registersHL, parentObj.registersHL & 0xFF);
+ },
+ //HALT
+ //#0x76:
+ function (parentObj) {
+ //See if there's already an IRQ match:
+ if ((parentObj.interruptsEnabled & parentObj.interruptsRequested & 0x1F) > 0) {
+ if (!parentObj.cGBC && !parentObj.usedBootROM) {
+ //HALT bug in the DMG CPU model (Program Counter fails to increment for one instruction after HALT):
+ parentObj.skipPCIncrement = true;
+ }
+ else {
+ //CGB gets around the HALT PC bug by doubling the hidden NOP.
+ parentObj.CPUTicks += 4;
+ }
+ }
+ else {
+ //CPU is stalled until the next IRQ match:
+ parentObj.calculateHALTPeriod();
+ }
+ },
+ //LD (HL), A
+ //#0x77:
+ function (parentObj) {
+ parentObj.memoryWriter[parentObj.registersHL](parentObj, parentObj.registersHL, parentObj.registerA);
+ },
+ //LD A, B
+ //#0x78:
+ function (parentObj) {
+ parentObj.registerA = parentObj.registerB;
+ },
+ //LD A, C
+ //#0x79:
+ function (parentObj) {
+ parentObj.registerA = parentObj.registerC;
+ },
+ //LD A, D
+ //#0x7A:
+ function (parentObj) {
+ parentObj.registerA = parentObj.registerD;
+ },
+ //LD A, E
+ //#0x7B:
+ function (parentObj) {
+ parentObj.registerA = parentObj.registerE;
+ },
+ //LD A, H
+ //#0x7C:
+ function (parentObj) {
+ parentObj.registerA = parentObj.registersHL >> 8;
+ },
+ //LD A, L
+ //#0x7D:
+ function (parentObj) {
+ parentObj.registerA = parentObj.registersHL & 0xFF;
+ },
+ //LD, A, (HL)
+ //#0x7E:
+ function (parentObj) {
+ parentObj.registerA = parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL);
+ },
+ //LD A, A
+ //#0x7F:
+ function (parentObj) {
+ //Do Nothing...
+ },
+ //ADD A, B
+ //#0x80:
+ function (parentObj) {
+ var dirtySum = parentObj.registerA + parentObj.registerB;
+ parentObj.FHalfCarry = ((dirtySum & 0xF) < (parentObj.registerA & 0xF));
+ parentObj.FCarry = (dirtySum > 0xFF);
+ parentObj.registerA = dirtySum & 0xFF;
+ parentObj.FZero = (parentObj.registerA == 0);
+ parentObj.FSubtract = false;
+ },
+ //ADD A, C
+ //#0x81:
+ function (parentObj) {
+ var dirtySum = parentObj.registerA + parentObj.registerC;
+ parentObj.FHalfCarry = ((dirtySum & 0xF) < (parentObj.registerA & 0xF));
+ parentObj.FCarry = (dirtySum > 0xFF);
+ parentObj.registerA = dirtySum & 0xFF;
+ parentObj.FZero = (parentObj.registerA == 0);
+ parentObj.FSubtract = false;
+ },
+ //ADD A, D
+ //#0x82:
+ function (parentObj) {
+ var dirtySum = parentObj.registerA + parentObj.registerD;
+ parentObj.FHalfCarry = ((dirtySum & 0xF) < (parentObj.registerA & 0xF));
+ parentObj.FCarry = (dirtySum > 0xFF);
+ parentObj.registerA = dirtySum & 0xFF;
+ parentObj.FZero = (parentObj.registerA == 0);
+ parentObj.FSubtract = false;
+ },
+ //ADD A, E
+ //#0x83:
+ function (parentObj) {
+ var dirtySum = parentObj.registerA + parentObj.registerE;
+ parentObj.FHalfCarry = ((dirtySum & 0xF) < (parentObj.registerA & 0xF));
+ parentObj.FCarry = (dirtySum > 0xFF);
+ parentObj.registerA = dirtySum & 0xFF;
+ parentObj.FZero = (parentObj.registerA == 0);
+ parentObj.FSubtract = false;
+ },
+ //ADD A, H
+ //#0x84:
+ function (parentObj) {
+ var dirtySum = parentObj.registerA + (parentObj.registersHL >> 8);
+ parentObj.FHalfCarry = ((dirtySum & 0xF) < (parentObj.registerA & 0xF));
+ parentObj.FCarry = (dirtySum > 0xFF);
+ parentObj.registerA = dirtySum & 0xFF;
+ parentObj.FZero = (parentObj.registerA == 0);
+ parentObj.FSubtract = false;
+ },
+ //ADD A, L
+ //#0x85:
+ function (parentObj) {
+ var dirtySum = parentObj.registerA + (parentObj.registersHL & 0xFF);
+ parentObj.FHalfCarry = ((dirtySum & 0xF) < (parentObj.registerA & 0xF));
+ parentObj.FCarry = (dirtySum > 0xFF);
+ parentObj.registerA = dirtySum & 0xFF;
+ parentObj.FZero = (parentObj.registerA == 0);
+ parentObj.FSubtract = false;
+ },
+ //ADD A, (HL)
+ //#0x86:
+ function (parentObj) {
+ var dirtySum = parentObj.registerA + parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL);
+ parentObj.FHalfCarry = ((dirtySum & 0xF) < (parentObj.registerA & 0xF));
+ parentObj.FCarry = (dirtySum > 0xFF);
+ parentObj.registerA = dirtySum & 0xFF;
+ parentObj.FZero = (parentObj.registerA == 0);
+ parentObj.FSubtract = false;
+ },
+ //ADD A, A
+ //#0x87:
+ function (parentObj) {
+ parentObj.FHalfCarry = ((parentObj.registerA & 0x8) == 0x8);
+ parentObj.FCarry = (parentObj.registerA > 0x7F);
+ parentObj.registerA = (parentObj.registerA << 1) & 0xFF;
+ parentObj.FZero = (parentObj.registerA == 0);
+ parentObj.FSubtract = false;
+ },
+ //ADC A, B
+ //#0x88:
+ function (parentObj) {
+ var dirtySum = parentObj.registerA + parentObj.registerB + ((parentObj.FCarry) ? 1 : 0);
+ parentObj.FHalfCarry = ((parentObj.registerA & 0xF) + (parentObj.registerB & 0xF) + ((parentObj.FCarry) ? 1 : 0) > 0xF);
+ parentObj.FCarry = (dirtySum > 0xFF);
+ parentObj.registerA = dirtySum & 0xFF;
+ parentObj.FZero = (parentObj.registerA == 0);
+ parentObj.FSubtract = false;
+ },
+ //ADC A, C
+ //#0x89:
+ function (parentObj) {
+ var dirtySum = parentObj.registerA + parentObj.registerC + ((parentObj.FCarry) ? 1 : 0);
+ parentObj.FHalfCarry = ((parentObj.registerA & 0xF) + (parentObj.registerC & 0xF) + ((parentObj.FCarry) ? 1 : 0) > 0xF);
+ parentObj.FCarry = (dirtySum > 0xFF);
+ parentObj.registerA = dirtySum & 0xFF;
+ parentObj.FZero = (parentObj.registerA == 0);
+ parentObj.FSubtract = false;
+ },
+ //ADC A, D
+ //#0x8A:
+ function (parentObj) {
+ var dirtySum = parentObj.registerA + parentObj.registerD + ((parentObj.FCarry) ? 1 : 0);
+ parentObj.FHalfCarry = ((parentObj.registerA & 0xF) + (parentObj.registerD & 0xF) + ((parentObj.FCarry) ? 1 : 0) > 0xF);
+ parentObj.FCarry = (dirtySum > 0xFF);
+ parentObj.registerA = dirtySum & 0xFF;
+ parentObj.FZero = (parentObj.registerA == 0);
+ parentObj.FSubtract = false;
+ },
+ //ADC A, E
+ //#0x8B:
+ function (parentObj) {
+ var dirtySum = parentObj.registerA + parentObj.registerE + ((parentObj.FCarry) ? 1 : 0);
+ parentObj.FHalfCarry = ((parentObj.registerA & 0xF) + (parentObj.registerE & 0xF) + ((parentObj.FCarry) ? 1 : 0) > 0xF);
+ parentObj.FCarry = (dirtySum > 0xFF);
+ parentObj.registerA = dirtySum & 0xFF;
+ parentObj.FZero = (parentObj.registerA == 0);
+ parentObj.FSubtract = false;
+ },
+ //ADC A, H
+ //#0x8C:
+ function (parentObj) {
+ var tempValue = (parentObj.registersHL >> 8);
+ var dirtySum = parentObj.registerA + tempValue + ((parentObj.FCarry) ? 1 : 0);
+ parentObj.FHalfCarry = ((parentObj.registerA & 0xF) + (tempValue & 0xF) + ((parentObj.FCarry) ? 1 : 0) > 0xF);
+ parentObj.FCarry = (dirtySum > 0xFF);
+ parentObj.registerA = dirtySum & 0xFF;
+ parentObj.FZero = (parentObj.registerA == 0);
+ parentObj.FSubtract = false;
+ },
+ //ADC A, L
+ //#0x8D:
+ function (parentObj) {
+ var tempValue = (parentObj.registersHL & 0xFF);
+ var dirtySum = parentObj.registerA + tempValue + ((parentObj.FCarry) ? 1 : 0);
+ parentObj.FHalfCarry = ((parentObj.registerA & 0xF) + (tempValue & 0xF) + ((parentObj.FCarry) ? 1 : 0) > 0xF);
+ parentObj.FCarry = (dirtySum > 0xFF);
+ parentObj.registerA = dirtySum & 0xFF;
+ parentObj.FZero = (parentObj.registerA == 0);
+ parentObj.FSubtract = false;
+ },
+ //ADC A, (HL)
+ //#0x8E:
+ function (parentObj) {
+ var tempValue = parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL);
+ var dirtySum = parentObj.registerA + tempValue + ((parentObj.FCarry) ? 1 : 0);
+ parentObj.FHalfCarry = ((parentObj.registerA & 0xF) + (tempValue & 0xF) + ((parentObj.FCarry) ? 1 : 0) > 0xF);
+ parentObj.FCarry = (dirtySum > 0xFF);
+ parentObj.registerA = dirtySum & 0xFF;
+ parentObj.FZero = (parentObj.registerA == 0);
+ parentObj.FSubtract = false;
+ },
+ //ADC A, A
+ //#0x8F:
+ function (parentObj) {
+ //shift left register A one bit for some ops here as an optimization:
+ var dirtySum = (parentObj.registerA << 1) | ((parentObj.FCarry) ? 1 : 0);
+ parentObj.FHalfCarry = ((((parentObj.registerA << 1) & 0x1E) | ((parentObj.FCarry) ? 1 : 0)) > 0xF);
+ parentObj.FCarry = (dirtySum > 0xFF);
+ parentObj.registerA = dirtySum & 0xFF;
+ parentObj.FZero = (parentObj.registerA == 0);
+ parentObj.FSubtract = false;
+ },
+ //SUB A, B
+ //#0x90:
+ function (parentObj) {
+ var dirtySum = parentObj.registerA - parentObj.registerB;
+ parentObj.FHalfCarry = ((parentObj.registerA & 0xF) < (dirtySum & 0xF));
+ parentObj.FCarry = (dirtySum < 0);
+ parentObj.registerA = dirtySum & 0xFF;
+ parentObj.FZero = (dirtySum == 0);
+ parentObj.FSubtract = true;
+ },
+ //SUB A, C
+ //#0x91:
+ function (parentObj) {
+ var dirtySum = parentObj.registerA - parentObj.registerC;
+ parentObj.FHalfCarry = ((parentObj.registerA & 0xF) < (dirtySum & 0xF));
+ parentObj.FCarry = (dirtySum < 0);
+ parentObj.registerA = dirtySum & 0xFF;
+ parentObj.FZero = (dirtySum == 0);
+ parentObj.FSubtract = true;
+ },
+ //SUB A, D
+ //#0x92:
+ function (parentObj) {
+ var dirtySum = parentObj.registerA - parentObj.registerD;
+ parentObj.FHalfCarry = ((parentObj.registerA & 0xF) < (dirtySum & 0xF));
+ parentObj.FCarry = (dirtySum < 0);
+ parentObj.registerA = dirtySum & 0xFF;
+ parentObj.FZero = (dirtySum == 0);
+ parentObj.FSubtract = true;
+ },
+ //SUB A, E
+ //#0x93:
+ function (parentObj) {
+ var dirtySum = parentObj.registerA - parentObj.registerE;
+ parentObj.FHalfCarry = ((parentObj.registerA & 0xF) < (dirtySum & 0xF));
+ parentObj.FCarry = (dirtySum < 0);
+ parentObj.registerA = dirtySum & 0xFF;
+ parentObj.FZero = (dirtySum == 0);
+ parentObj.FSubtract = true;
+ },
+ //SUB A, H
+ //#0x94:
+ function (parentObj) {
+ var dirtySum = parentObj.registerA - (parentObj.registersHL >> 8);
+ parentObj.FHalfCarry = ((parentObj.registerA & 0xF) < (dirtySum & 0xF));
+ parentObj.FCarry = (dirtySum < 0);
+ parentObj.registerA = dirtySum & 0xFF;
+ parentObj.FZero = (dirtySum == 0);
+ parentObj.FSubtract = true;
+ },
+ //SUB A, L
+ //#0x95:
+ function (parentObj) {
+ var dirtySum = parentObj.registerA - (parentObj.registersHL & 0xFF);
+ parentObj.FHalfCarry = ((parentObj.registerA & 0xF) < (dirtySum & 0xF));
+ parentObj.FCarry = (dirtySum < 0);
+ parentObj.registerA = dirtySum & 0xFF;
+ parentObj.FZero = (dirtySum == 0);
+ parentObj.FSubtract = true;
+ },
+ //SUB A, (HL)
+ //#0x96:
+ function (parentObj) {
+ var dirtySum = parentObj.registerA - parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL);
+ parentObj.FHalfCarry = ((parentObj.registerA & 0xF) < (dirtySum & 0xF));
+ parentObj.FCarry = (dirtySum < 0);
+ parentObj.registerA = dirtySum & 0xFF;
+ parentObj.FZero = (dirtySum == 0);
+ parentObj.FSubtract = true;
+ },
+ //SUB A, A
+ //#0x97:
+ function (parentObj) {
+ //number - same number == 0
+ parentObj.registerA = 0;
+ parentObj.FHalfCarry = parentObj.FCarry = false;
+ parentObj.FZero = parentObj.FSubtract = true;
+ },
+ //SBC A, B
+ //#0x98:
+ function (parentObj) {
+ var dirtySum = parentObj.registerA - parentObj.registerB - ((parentObj.FCarry) ? 1 : 0);
+ parentObj.FHalfCarry = ((parentObj.registerA & 0xF) - (parentObj.registerB & 0xF) - ((parentObj.FCarry) ? 1 : 0) < 0);
+ parentObj.FCarry = (dirtySum < 0);
+ parentObj.registerA = dirtySum & 0xFF;
+ parentObj.FZero = (parentObj.registerA == 0);
+ parentObj.FSubtract = true;
+ },
+ //SBC A, C
+ //#0x99:
+ function (parentObj) {
+ var dirtySum = parentObj.registerA - parentObj.registerC - ((parentObj.FCarry) ? 1 : 0);
+ parentObj.FHalfCarry = ((parentObj.registerA & 0xF) - (parentObj.registerC & 0xF) - ((parentObj.FCarry) ? 1 : 0) < 0);
+ parentObj.FCarry = (dirtySum < 0);
+ parentObj.registerA = dirtySum & 0xFF;
+ parentObj.FZero = (parentObj.registerA == 0);
+ parentObj.FSubtract = true;
+ },
+ //SBC A, D
+ //#0x9A:
+ function (parentObj) {
+ var dirtySum = parentObj.registerA - parentObj.registerD - ((parentObj.FCarry) ? 1 : 0);
+ parentObj.FHalfCarry = ((parentObj.registerA & 0xF) - (parentObj.registerD & 0xF) - ((parentObj.FCarry) ? 1 : 0) < 0);
+ parentObj.FCarry = (dirtySum < 0);
+ parentObj.registerA = dirtySum & 0xFF;
+ parentObj.FZero = (parentObj.registerA == 0);
+ parentObj.FSubtract = true;
+ },
+ //SBC A, E
+ //#0x9B:
+ function (parentObj) {
+ var dirtySum = parentObj.registerA - parentObj.registerE - ((parentObj.FCarry) ? 1 : 0);
+ parentObj.FHalfCarry = ((parentObj.registerA & 0xF) - (parentObj.registerE & 0xF) - ((parentObj.FCarry) ? 1 : 0) < 0);
+ parentObj.FCarry = (dirtySum < 0);
+ parentObj.registerA = dirtySum & 0xFF;
+ parentObj.FZero = (parentObj.registerA == 0);
+ parentObj.FSubtract = true;
+ },
+ //SBC A, H
+ //#0x9C:
+ function (parentObj) {
+ var temp_var = parentObj.registersHL >> 8;
+ var dirtySum = parentObj.registerA - temp_var - ((parentObj.FCarry) ? 1 : 0);
+ parentObj.FHalfCarry = ((parentObj.registerA & 0xF) - (temp_var & 0xF) - ((parentObj.FCarry) ? 1 : 0) < 0);
+ parentObj.FCarry = (dirtySum < 0);
+ parentObj.registerA = dirtySum & 0xFF;
+ parentObj.FZero = (parentObj.registerA == 0);
+ parentObj.FSubtract = true;
+ },
+ //SBC A, L
+ //#0x9D:
+ function (parentObj) {
+ var dirtySum = parentObj.registerA - (parentObj.registersHL & 0xFF) - ((parentObj.FCarry) ? 1 : 0);
+ parentObj.FHalfCarry = ((parentObj.registerA & 0xF) - (parentObj.registersHL & 0xF) - ((parentObj.FCarry) ? 1 : 0) < 0);
+ parentObj.FCarry = (dirtySum < 0);
+ parentObj.registerA = dirtySum & 0xFF;
+ parentObj.FZero = (parentObj.registerA == 0);
+ parentObj.FSubtract = true;
+ },
+ //SBC A, (HL)
+ //#0x9E:
+ function (parentObj) {
+ var temp_var = parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL);
+ var dirtySum = parentObj.registerA - temp_var - ((parentObj.FCarry) ? 1 : 0);
+ parentObj.FHalfCarry = ((parentObj.registerA & 0xF) - (temp_var & 0xF) - ((parentObj.FCarry) ? 1 : 0) < 0);
+ parentObj.FCarry = (dirtySum < 0);
+ parentObj.registerA = dirtySum & 0xFF;
+ parentObj.FZero = (parentObj.registerA == 0);
+ parentObj.FSubtract = true;
+ },
+ //SBC A, A
+ //#0x9F:
+ function (parentObj) {
+ //Optimized SBC A:
+ if (parentObj.FCarry) {
+ parentObj.FZero = false;
+ parentObj.FSubtract = parentObj.FHalfCarry = parentObj.FCarry = true;
+ parentObj.registerA = 0xFF;
+ }
+ else {
+ parentObj.FHalfCarry = parentObj.FCarry = false;
+ parentObj.FSubtract = parentObj.FZero = true;
+ parentObj.registerA = 0;
+ }
+ },
+ //AND B
+ //#0xA0:
+ function (parentObj) {
+ parentObj.registerA &= parentObj.registerB;
+ parentObj.FZero = (parentObj.registerA == 0);
+ parentObj.FHalfCarry = true;
+ parentObj.FSubtract = parentObj.FCarry = false;
+ },
+ //AND C
+ //#0xA1:
+ function (parentObj) {
+ parentObj.registerA &= parentObj.registerC;
+ parentObj.FZero = (parentObj.registerA == 0);
+ parentObj.FHalfCarry = true;
+ parentObj.FSubtract = parentObj.FCarry = false;
+ },
+ //AND D
+ //#0xA2:
+ function (parentObj) {
+ parentObj.registerA &= parentObj.registerD;
+ parentObj.FZero = (parentObj.registerA == 0);
+ parentObj.FHalfCarry = true;
+ parentObj.FSubtract = parentObj.FCarry = false;
+ },
+ //AND E
+ //#0xA3:
+ function (parentObj) {
+ parentObj.registerA &= parentObj.registerE;
+ parentObj.FZero = (parentObj.registerA == 0);
+ parentObj.FHalfCarry = true;
+ parentObj.FSubtract = parentObj.FCarry = false;
+ },
+ //AND H
+ //#0xA4:
+ function (parentObj) {
+ parentObj.registerA &= (parentObj.registersHL >> 8);
+ parentObj.FZero = (parentObj.registerA == 0);
+ parentObj.FHalfCarry = true;
+ parentObj.FSubtract = parentObj.FCarry = false;
+ },
+ //AND L
+ //#0xA5:
+ function (parentObj) {
+ parentObj.registerA &= parentObj.registersHL;
+ parentObj.FZero = (parentObj.registerA == 0);
+ parentObj.FHalfCarry = true;
+ parentObj.FSubtract = parentObj.FCarry = false;
+ },
+ //AND (HL)
+ //#0xA6:
+ function (parentObj) {
+ parentObj.registerA &= parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL);
+ parentObj.FZero = (parentObj.registerA == 0);
+ parentObj.FHalfCarry = true;
+ parentObj.FSubtract = parentObj.FCarry = false;
+ },
+ //AND A
+ //#0xA7:
+ function (parentObj) {
+ //number & same number = same number
+ parentObj.FZero = (parentObj.registerA == 0);
+ parentObj.FHalfCarry = true;
+ parentObj.FSubtract = parentObj.FCarry = false;
+ },
+ //XOR B
+ //#0xA8:
+ function (parentObj) {
+ parentObj.registerA ^= parentObj.registerB;
+ parentObj.FZero = (parentObj.registerA == 0);
+ parentObj.FSubtract = parentObj.FHalfCarry = parentObj.FCarry = false;
+ },
+ //XOR C
+ //#0xA9:
+ function (parentObj) {
+ parentObj.registerA ^= parentObj.registerC;
+ parentObj.FZero = (parentObj.registerA == 0);
+ parentObj.FSubtract = parentObj.FHalfCarry = parentObj.FCarry = false;
+ },
+ //XOR D
+ //#0xAA:
+ function (parentObj) {
+ parentObj.registerA ^= parentObj.registerD;
+ parentObj.FZero = (parentObj.registerA == 0);
+ parentObj.FSubtract = parentObj.FHalfCarry = parentObj.FCarry = false;
+ },
+ //XOR E
+ //#0xAB:
+ function (parentObj) {
+ parentObj.registerA ^= parentObj.registerE;
+ parentObj.FZero = (parentObj.registerA == 0);
+ parentObj.FSubtract = parentObj.FHalfCarry = parentObj.FCarry = false;
+ },
+ //XOR H
+ //#0xAC:
+ function (parentObj) {
+ parentObj.registerA ^= (parentObj.registersHL >> 8);
+ parentObj.FZero = (parentObj.registerA == 0);
+ parentObj.FSubtract = parentObj.FHalfCarry = parentObj.FCarry = false;
+ },
+ //XOR L
+ //#0xAD:
+ function (parentObj) {
+ parentObj.registerA ^= (parentObj.registersHL & 0xFF);
+ parentObj.FZero = (parentObj.registerA == 0);
+ parentObj.FSubtract = parentObj.FHalfCarry = parentObj.FCarry = false;
+ },
+ //XOR (HL)
+ //#0xAE:
+ function (parentObj) {
+ parentObj.registerA ^= parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL);
+ parentObj.FZero = (parentObj.registerA == 0);
+ parentObj.FSubtract = parentObj.FHalfCarry = parentObj.FCarry = false;
+ },
+ //XOR A
+ //#0xAF:
+ function (parentObj) {
+ //number ^ same number == 0
+ parentObj.registerA = 0;
+ parentObj.FZero = true;
+ parentObj.FSubtract = parentObj.FHalfCarry = parentObj.FCarry = false;
+ },
+ //OR B
+ //#0xB0:
+ function (parentObj) {
+ parentObj.registerA |= parentObj.registerB;
+ parentObj.FZero = (parentObj.registerA == 0);
+ parentObj.FSubtract = parentObj.FCarry = parentObj.FHalfCarry = false;
+ },
+ //OR C
+ //#0xB1:
+ function (parentObj) {
+ parentObj.registerA |= parentObj.registerC;
+ parentObj.FZero = (parentObj.registerA == 0);
+ parentObj.FSubtract = parentObj.FCarry = parentObj.FHalfCarry = false;
+ },
+ //OR D
+ //#0xB2:
+ function (parentObj) {
+ parentObj.registerA |= parentObj.registerD;
+ parentObj.FZero = (parentObj.registerA == 0);
+ parentObj.FSubtract = parentObj.FCarry = parentObj.FHalfCarry = false;
+ },
+ //OR E
+ //#0xB3:
+ function (parentObj) {
+ parentObj.registerA |= parentObj.registerE;
+ parentObj.FZero = (parentObj.registerA == 0);
+ parentObj.FSubtract = parentObj.FCarry = parentObj.FHalfCarry = false;
+ },
+ //OR H
+ //#0xB4:
+ function (parentObj) {
+ parentObj.registerA |= (parentObj.registersHL >> 8);
+ parentObj.FZero = (parentObj.registerA == 0);
+ parentObj.FSubtract = parentObj.FCarry = parentObj.FHalfCarry = false;
+ },
+ //OR L
+ //#0xB5:
+ function (parentObj) {
+ parentObj.registerA |= (parentObj.registersHL & 0xFF);
+ parentObj.FZero = (parentObj.registerA == 0);
+ parentObj.FSubtract = parentObj.FCarry = parentObj.FHalfCarry = false;
+ },
+ //OR (HL)
+ //#0xB6:
+ function (parentObj) {
+ parentObj.registerA |= parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL);
+ parentObj.FZero = (parentObj.registerA == 0);
+ parentObj.FSubtract = parentObj.FCarry = parentObj.FHalfCarry = false;
+ },
+ //OR A
+ //#0xB7:
+ function (parentObj) {
+ //number | same number == same number
+ parentObj.FZero = (parentObj.registerA == 0);
+ parentObj.FSubtract = parentObj.FCarry = parentObj.FHalfCarry = false;
+ },
+ //CP B
+ //#0xB8:
+ function (parentObj) {
+ var dirtySum = parentObj.registerA - parentObj.registerB;
+ parentObj.FHalfCarry = ((dirtySum & 0xF) > (parentObj.registerA & 0xF));
+ parentObj.FCarry = (dirtySum < 0);
+ parentObj.FZero = (dirtySum == 0);
+ parentObj.FSubtract = true;
+ },
+ //CP C
+ //#0xB9:
+ function (parentObj) {
+ var dirtySum = parentObj.registerA - parentObj.registerC;
+ parentObj.FHalfCarry = ((dirtySum & 0xF) > (parentObj.registerA & 0xF));
+ parentObj.FCarry = (dirtySum < 0);
+ parentObj.FZero = (dirtySum == 0);
+ parentObj.FSubtract = true;
+ },
+ //CP D
+ //#0xBA:
+ function (parentObj) {
+ var dirtySum = parentObj.registerA - parentObj.registerD;
+ parentObj.FHalfCarry = ((dirtySum & 0xF) > (parentObj.registerA & 0xF));
+ parentObj.FCarry = (dirtySum < 0);
+ parentObj.FZero = (dirtySum == 0);
+ parentObj.FSubtract = true;
+ },
+ //CP E
+ //#0xBB:
+ function (parentObj) {
+ var dirtySum = parentObj.registerA - parentObj.registerE;
+ parentObj.FHalfCarry = ((dirtySum & 0xF) > (parentObj.registerA & 0xF));
+ parentObj.FCarry = (dirtySum < 0);
+ parentObj.FZero = (dirtySum == 0);
+ parentObj.FSubtract = true;
+ },
+ //CP H
+ //#0xBC:
+ function (parentObj) {
+ var dirtySum = parentObj.registerA - (parentObj.registersHL >> 8);
+ parentObj.FHalfCarry = ((dirtySum & 0xF) > (parentObj.registerA & 0xF));
+ parentObj.FCarry = (dirtySum < 0);
+ parentObj.FZero = (dirtySum == 0);
+ parentObj.FSubtract = true;
+ },
+ //CP L
+ //#0xBD:
+ function (parentObj) {
+ var dirtySum = parentObj.registerA - (parentObj.registersHL & 0xFF);
+ parentObj.FHalfCarry = ((dirtySum & 0xF) > (parentObj.registerA & 0xF));
+ parentObj.FCarry = (dirtySum < 0);
+ parentObj.FZero = (dirtySum == 0);
+ parentObj.FSubtract = true;
+ },
+ //CP (HL)
+ //#0xBE:
+ function (parentObj) {
+ var dirtySum = parentObj.registerA - parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL);
+ parentObj.FHalfCarry = ((dirtySum & 0xF) > (parentObj.registerA & 0xF));
+ parentObj.FCarry = (dirtySum < 0);
+ parentObj.FZero = (dirtySum == 0);
+ parentObj.FSubtract = true;
+ },
+ //CP A
+ //#0xBF:
+ function (parentObj) {
+ parentObj.FHalfCarry = parentObj.FCarry = false;
+ parentObj.FZero = parentObj.FSubtract = true;
+ },
+ //RET !FZ
+ //#0xC0:
+ function (parentObj) {
+ if (!parentObj.FZero) {
+ parentObj.programCounter = (parentObj.memoryRead((parentObj.stackPointer + 1) & 0xFFFF) << 8) | parentObj.memoryReader[parentObj.stackPointer](parentObj, parentObj.stackPointer);
+ parentObj.stackPointer = (parentObj.stackPointer + 2) & 0xFFFF;
+ parentObj.CPUTicks += 12;
+ }
+ },
+ //POP BC
+ //#0xC1:
+ function (parentObj) {
+ parentObj.registerC = parentObj.memoryReader[parentObj.stackPointer](parentObj, parentObj.stackPointer);
+ parentObj.registerB = parentObj.memoryRead((parentObj.stackPointer + 1) & 0xFFFF);
+ parentObj.stackPointer = (parentObj.stackPointer + 2) & 0xFFFF;
+ },
+ //JP !FZ, nn
+ //#0xC2:
+ function (parentObj) {
+ if (!parentObj.FZero) {
+ parentObj.programCounter = (parentObj.memoryRead((parentObj.programCounter + 1) & 0xFFFF) << 8) | parentObj.memoryReader[parentObj.programCounter](parentObj, parentObj.programCounter);
+ parentObj.CPUTicks += 4;
+ }
+ else {
+ parentObj.programCounter = (parentObj.programCounter + 2) & 0xFFFF;
+ }
+ },
+ //JP nn
+ //#0xC3:
+ function (parentObj) {
+ parentObj.programCounter = (parentObj.memoryRead((parentObj.programCounter + 1) & 0xFFFF) << 8) | parentObj.memoryReader[parentObj.programCounter](parentObj, parentObj.programCounter);
+ },
+ //CALL !FZ, nn
+ //#0xC4:
+ function (parentObj) {
+ if (!parentObj.FZero) {
+ var temp_pc = (parentObj.memoryRead((parentObj.programCounter + 1) & 0xFFFF) << 8) | parentObj.memoryReader[parentObj.programCounter](parentObj, parentObj.programCounter);
+ parentObj.programCounter = (parentObj.programCounter + 2) & 0xFFFF;
+ parentObj.stackPointer = (parentObj.stackPointer - 1) & 0xFFFF;
+ parentObj.memoryWriter[parentObj.stackPointer](parentObj, parentObj.stackPointer, parentObj.programCounter >> 8);
+ parentObj.stackPointer = (parentObj.stackPointer - 1) & 0xFFFF;
+ parentObj.memoryWriter[parentObj.stackPointer](parentObj, parentObj.stackPointer, parentObj.programCounter & 0xFF);
+ parentObj.programCounter = temp_pc;
+ parentObj.CPUTicks += 12;
+ }
+ else {
+ parentObj.programCounter = (parentObj.programCounter + 2) & 0xFFFF;
+ }
+ },
+ //PUSH BC
+ //#0xC5:
+ function (parentObj) {
+ parentObj.stackPointer = (parentObj.stackPointer - 1) & 0xFFFF;
+ parentObj.memoryWriter[parentObj.stackPointer](parentObj, parentObj.stackPointer, parentObj.registerB);
+ parentObj.stackPointer = (parentObj.stackPointer - 1) & 0xFFFF;
+ parentObj.memoryWriter[parentObj.stackPointer](parentObj, parentObj.stackPointer, parentObj.registerC);
+ },
+ //ADD, n
+ //#0xC6:
+ function (parentObj) {
+ var dirtySum = parentObj.registerA + parentObj.memoryReader[parentObj.programCounter](parentObj, parentObj.programCounter);
+ parentObj.programCounter = (parentObj.programCounter + 1) & 0xFFFF;
+ parentObj.FHalfCarry = ((dirtySum & 0xF) < (parentObj.registerA & 0xF));
+ parentObj.FCarry = (dirtySum > 0xFF);
+ parentObj.registerA = dirtySum & 0xFF;
+ parentObj.FZero = (parentObj.registerA == 0);
+ parentObj.FSubtract = false;
+ },
+ //RST 0
+ //#0xC7:
+ function (parentObj) {
+ parentObj.stackPointer = (parentObj.stackPointer - 1) & 0xFFFF;
+ parentObj.memoryWriter[parentObj.stackPointer](parentObj, parentObj.stackPointer, parentObj.programCounter >> 8);
+ parentObj.stackPointer = (parentObj.stackPointer - 1) & 0xFFFF;
+ parentObj.memoryWriter[parentObj.stackPointer](parentObj, parentObj.stackPointer, parentObj.programCounter & 0xFF);
+ parentObj.programCounter = 0;
+ },
+ //RET FZ
+ //#0xC8:
+ function (parentObj) {
+ if (parentObj.FZero) {
+ parentObj.programCounter = (parentObj.memoryRead((parentObj.stackPointer + 1) & 0xFFFF) << 8) | parentObj.memoryReader[parentObj.stackPointer](parentObj, parentObj.stackPointer);
+ parentObj.stackPointer = (parentObj.stackPointer + 2) & 0xFFFF;
+ parentObj.CPUTicks += 12;
+ }
+ },
+ //RET
+ //#0xC9:
+ function (parentObj) {
+ parentObj.programCounter = (parentObj.memoryRead((parentObj.stackPointer + 1) & 0xFFFF) << 8) | parentObj.memoryReader[parentObj.stackPointer](parentObj, parentObj.stackPointer);
+ parentObj.stackPointer = (parentObj.stackPointer + 2) & 0xFFFF;
+ },
+ //JP FZ, nn
+ //#0xCA:
+ function (parentObj) {
+ if (parentObj.FZero) {
+ parentObj.programCounter = (parentObj.memoryRead((parentObj.programCounter + 1) & 0xFFFF) << 8) | parentObj.memoryReader[parentObj.programCounter](parentObj, parentObj.programCounter);
+ parentObj.CPUTicks += 4;
+ }
+ else {
+ parentObj.programCounter = (parentObj.programCounter + 2) & 0xFFFF;
+ }
+ },
+ //Secondary OP Code Set:
+ //#0xCB:
+ function (parentObj) {
+ var opcode = parentObj.memoryReader[parentObj.programCounter](parentObj, parentObj.programCounter);
+ //Increment the program counter to the next instruction:
+ parentObj.programCounter = (parentObj.programCounter + 1) & 0xFFFF;
+ //Get how many CPU cycles the current 0xCBXX op code counts for:
+ parentObj.CPUTicks += parentObj.SecondaryTICKTable[opcode];
+ //Execute secondary OP codes for the 0xCB OP code call.
+ parentObj.CBOPCODE[opcode](parentObj);
+ },
+ //CALL FZ, nn
+ //#0xCC:
+ function (parentObj) {
+ if (parentObj.FZero) {
+ var temp_pc = (parentObj.memoryRead((parentObj.programCounter + 1) & 0xFFFF) << 8) | parentObj.memoryReader[parentObj.programCounter](parentObj, parentObj.programCounter);
+ parentObj.programCounter = (parentObj.programCounter + 2) & 0xFFFF;
+ parentObj.stackPointer = (parentObj.stackPointer - 1) & 0xFFFF;
+ parentObj.memoryWriter[parentObj.stackPointer](parentObj, parentObj.stackPointer, parentObj.programCounter >> 8);
+ parentObj.stackPointer = (parentObj.stackPointer - 1) & 0xFFFF;
+ parentObj.memoryWriter[parentObj.stackPointer](parentObj, parentObj.stackPointer, parentObj.programCounter & 0xFF);
+ parentObj.programCounter = temp_pc;
+ parentObj.CPUTicks += 12;
+ }
+ else {
+ parentObj.programCounter = (parentObj.programCounter + 2) & 0xFFFF;
+ }
+ },
+ //CALL nn
+ //#0xCD:
+ function (parentObj) {
+ var temp_pc = (parentObj.memoryRead((parentObj.programCounter + 1) & 0xFFFF) << 8) | parentObj.memoryReader[parentObj.programCounter](parentObj, parentObj.programCounter);
+ parentObj.programCounter = (parentObj.programCounter + 2) & 0xFFFF;
+ parentObj.stackPointer = (parentObj.stackPointer - 1) & 0xFFFF;
+ parentObj.memoryWriter[parentObj.stackPointer](parentObj, parentObj.stackPointer, parentObj.programCounter >> 8);
+ parentObj.stackPointer = (parentObj.stackPointer - 1) & 0xFFFF;
+ parentObj.memoryWriter[parentObj.stackPointer](parentObj, parentObj.stackPointer, parentObj.programCounter & 0xFF);
+ parentObj.programCounter = temp_pc;
+ },
+ //ADC A, n
+ //#0xCE:
+ function (parentObj) {
+ var tempValue = parentObj.memoryReader[parentObj.programCounter](parentObj, parentObj.programCounter);
+ parentObj.programCounter = (parentObj.programCounter + 1) & 0xFFFF;
+ var dirtySum = parentObj.registerA + tempValue + ((parentObj.FCarry) ? 1 : 0);
+ parentObj.FHalfCarry = ((parentObj.registerA & 0xF) + (tempValue & 0xF) + ((parentObj.FCarry) ? 1 : 0) > 0xF);
+ parentObj.FCarry = (dirtySum > 0xFF);
+ parentObj.registerA = dirtySum & 0xFF;
+ parentObj.FZero = (parentObj.registerA == 0);
+ parentObj.FSubtract = false;
+ },
+ //RST 0x8
+ //#0xCF:
+ function (parentObj) {
+ parentObj.stackPointer = (parentObj.stackPointer - 1) & 0xFFFF;
+ parentObj.memoryWriter[parentObj.stackPointer](parentObj, parentObj.stackPointer, parentObj.programCounter >> 8);
+ parentObj.stackPointer = (parentObj.stackPointer - 1) & 0xFFFF;
+ parentObj.memoryWriter[parentObj.stackPointer](parentObj, parentObj.stackPointer, parentObj.programCounter & 0xFF);
+ parentObj.programCounter = 0x8;
+ },
+ //RET !FC
+ //#0xD0:
+ function (parentObj) {
+ if (!parentObj.FCarry) {
+ parentObj.programCounter = (parentObj.memoryRead((parentObj.stackPointer + 1) & 0xFFFF) << 8) | parentObj.memoryReader[parentObj.stackPointer](parentObj, parentObj.stackPointer);
+ parentObj.stackPointer = (parentObj.stackPointer + 2) & 0xFFFF;
+ parentObj.CPUTicks += 12;
+ }
+ },
+ //POP DE
+ //#0xD1:
+ function (parentObj) {
+ parentObj.registerE = parentObj.memoryReader[parentObj.stackPointer](parentObj, parentObj.stackPointer);
+ parentObj.registerD = parentObj.memoryRead((parentObj.stackPointer + 1) & 0xFFFF);
+ parentObj.stackPointer = (parentObj.stackPointer + 2) & 0xFFFF;
+ },
+ //JP !FC, nn
+ //#0xD2:
+ function (parentObj) {
+ if (!parentObj.FCarry) {
+ parentObj.programCounter = (parentObj.memoryRead((parentObj.programCounter + 1) & 0xFFFF) << 8) | parentObj.memoryReader[parentObj.programCounter](parentObj, parentObj.programCounter);
+ parentObj.CPUTicks += 4;
+ }
+ else {
+ parentObj.programCounter = (parentObj.programCounter + 2) & 0xFFFF;
+ }
+ },
+ //0xD3 - Illegal
+ //#0xD3:
+ function (parentObj) {
+ cout("Illegal op code 0xD3 called, pausing emulation.", 2);
+ pause();
+ },
+ //CALL !FC, nn
+ //#0xD4:
+ function (parentObj) {
+ if (!parentObj.FCarry) {
+ var temp_pc = (parentObj.memoryRead((parentObj.programCounter + 1) & 0xFFFF) << 8) | parentObj.memoryReader[parentObj.programCounter](parentObj, parentObj.programCounter);
+ parentObj.programCounter = (parentObj.programCounter + 2) & 0xFFFF;
+ parentObj.stackPointer = (parentObj.stackPointer - 1) & 0xFFFF;
+ parentObj.memoryWriter[parentObj.stackPointer](parentObj, parentObj.stackPointer, parentObj.programCounter >> 8);
+ parentObj.stackPointer = (parentObj.stackPointer - 1) & 0xFFFF;
+ parentObj.memoryWriter[parentObj.stackPointer](parentObj, parentObj.stackPointer, parentObj.programCounter & 0xFF);
+ parentObj.programCounter = temp_pc;
+ parentObj.CPUTicks += 12;
+ }
+ else {
+ parentObj.programCounter = (parentObj.programCounter + 2) & 0xFFFF;
+ }
+ },
+ //PUSH DE
+ //#0xD5:
+ function (parentObj) {
+ parentObj.stackPointer = (parentObj.stackPointer - 1) & 0xFFFF;
+ parentObj.memoryWriter[parentObj.stackPointer](parentObj, parentObj.stackPointer, parentObj.registerD);
+ parentObj.stackPointer = (parentObj.stackPointer - 1) & 0xFFFF;
+ parentObj.memoryWriter[parentObj.stackPointer](parentObj, parentObj.stackPointer, parentObj.registerE);
+ },
+ //SUB A, n
+ //#0xD6:
+ function (parentObj) {
+ var dirtySum = parentObj.registerA - parentObj.memoryReader[parentObj.programCounter](parentObj, parentObj.programCounter);
+ parentObj.programCounter = (parentObj.programCounter + 1) & 0xFFFF;
+ parentObj.FHalfCarry = ((parentObj.registerA & 0xF) < (dirtySum & 0xF));
+ parentObj.FCarry = (dirtySum < 0);
+ parentObj.registerA = dirtySum & 0xFF;
+ parentObj.FZero = (dirtySum == 0);
+ parentObj.FSubtract = true;
+ },
+ //RST 0x10
+ //#0xD7:
+ function (parentObj) {
+ parentObj.stackPointer = (parentObj.stackPointer - 1) & 0xFFFF;
+ parentObj.memoryWriter[parentObj.stackPointer](parentObj, parentObj.stackPointer, parentObj.programCounter >> 8);
+ parentObj.stackPointer = (parentObj.stackPointer - 1) & 0xFFFF;
+ parentObj.memoryWriter[parentObj.stackPointer](parentObj, parentObj.stackPointer, parentObj.programCounter & 0xFF);
+ parentObj.programCounter = 0x10;
+ },
+ //RET FC
+ //#0xD8:
+ function (parentObj) {
+ if (parentObj.FCarry) {
+ parentObj.programCounter = (parentObj.memoryRead((parentObj.stackPointer + 1) & 0xFFFF) << 8) | parentObj.memoryReader[parentObj.stackPointer](parentObj, parentObj.stackPointer);
+ parentObj.stackPointer = (parentObj.stackPointer + 2) & 0xFFFF;
+ parentObj.CPUTicks += 12;
+ }
+ },
+ //RETI
+ //#0xD9:
+ function (parentObj) {
+ parentObj.programCounter = (parentObj.memoryRead((parentObj.stackPointer + 1) & 0xFFFF) << 8) | parentObj.memoryReader[parentObj.stackPointer](parentObj, parentObj.stackPointer);
+ parentObj.stackPointer = (parentObj.stackPointer + 2) & 0xFFFF;
+ //Immediate for HALT:
+ parentObj.IRQEnableDelay = (parentObj.IRQEnableDelay == 2 || parentObj.memoryReader[parentObj.programCounter](parentObj, parentObj.programCounter) == 0x76) ? 1 : 2;
+ },
+ //JP FC, nn
+ //#0xDA:
+ function (parentObj) {
+ if (parentObj.FCarry) {
+ parentObj.programCounter = (parentObj.memoryRead((parentObj.programCounter + 1) & 0xFFFF) << 8) | parentObj.memoryReader[parentObj.programCounter](parentObj, parentObj.programCounter);
+ parentObj.CPUTicks += 4;
+ }
+ else {
+ parentObj.programCounter = (parentObj.programCounter + 2) & 0xFFFF;
+ }
+ },
+ //0xDB - Illegal
+ //#0xDB:
+ function (parentObj) {
+ cout("Illegal op code 0xDB called, pausing emulation.", 2);
+ pause();
+ },
+ //CALL FC, nn
+ //#0xDC:
+ function (parentObj) {
+ if (parentObj.FCarry) {
+ var temp_pc = (parentObj.memoryRead((parentObj.programCounter + 1) & 0xFFFF) << 8) | parentObj.memoryReader[parentObj.programCounter](parentObj, parentObj.programCounter);
+ parentObj.programCounter = (parentObj.programCounter + 2) & 0xFFFF;
+ parentObj.stackPointer = (parentObj.stackPointer - 1) & 0xFFFF;
+ parentObj.memoryWriter[parentObj.stackPointer](parentObj, parentObj.stackPointer, parentObj.programCounter >> 8);
+ parentObj.stackPointer = (parentObj.stackPointer - 1) & 0xFFFF;
+ parentObj.memoryWriter[parentObj.stackPointer](parentObj, parentObj.stackPointer, parentObj.programCounter & 0xFF);
+ parentObj.programCounter = temp_pc;
+ parentObj.CPUTicks += 12;
+ }
+ else {
+ parentObj.programCounter = (parentObj.programCounter + 2) & 0xFFFF;
+ }
+ },
+ //0xDD - Illegal
+ //#0xDD:
+ function (parentObj) {
+ cout("Illegal op code 0xDD called, pausing emulation.", 2);
+ pause();
+ },
+ //SBC A, n
+ //#0xDE:
+ function (parentObj) {
+ var temp_var = parentObj.memoryReader[parentObj.programCounter](parentObj, parentObj.programCounter);
+ parentObj.programCounter = (parentObj.programCounter + 1) & 0xFFFF;
+ var dirtySum = parentObj.registerA - temp_var - ((parentObj.FCarry) ? 1 : 0);
+ parentObj.FHalfCarry = ((parentObj.registerA & 0xF) - (temp_var & 0xF) - ((parentObj.FCarry) ? 1 : 0) < 0);
+ parentObj.FCarry = (dirtySum < 0);
+ parentObj.registerA = dirtySum & 0xFF;
+ parentObj.FZero = (parentObj.registerA == 0);
+ parentObj.FSubtract = true;
+ },
+ //RST 0x18
+ //#0xDF:
+ function (parentObj) {
+ parentObj.stackPointer = (parentObj.stackPointer - 1) & 0xFFFF;
+ parentObj.memoryWriter[parentObj.stackPointer](parentObj, parentObj.stackPointer, parentObj.programCounter >> 8);
+ parentObj.stackPointer = (parentObj.stackPointer - 1) & 0xFFFF;
+ parentObj.memoryWriter[parentObj.stackPointer](parentObj, parentObj.stackPointer, parentObj.programCounter & 0xFF);
+ parentObj.programCounter = 0x18;
+ },
+ //LDH (n), A
+ //#0xE0:
+ function (parentObj) {
+ parentObj.memoryHighWrite(parentObj.memoryReader[parentObj.programCounter](parentObj, parentObj.programCounter), parentObj.registerA);
+ parentObj.programCounter = (parentObj.programCounter + 1) & 0xFFFF;
+ },
+ //POP HL
+ //#0xE1:
+ function (parentObj) {
+ parentObj.registersHL = (parentObj.memoryRead((parentObj.stackPointer + 1) & 0xFFFF) << 8) | parentObj.memoryReader[parentObj.stackPointer](parentObj, parentObj.stackPointer);
+ parentObj.stackPointer = (parentObj.stackPointer + 2) & 0xFFFF;
+ },
+ //LD (0xFF00 + C), A
+ //#0xE2:
+ function (parentObj) {
+ parentObj.memoryHighWriter[parentObj.registerC](parentObj, parentObj.registerC, parentObj.registerA);
+ },
+ //0xE3 - Illegal
+ //#0xE3:
+ function (parentObj) {
+ cout("Illegal op code 0xE3 called, pausing emulation.", 2);
+ pause();
+ },
+ //0xE4 - Illegal
+ //#0xE4:
+ function (parentObj) {
+ cout("Illegal op code 0xE4 called, pausing emulation.", 2);
+ pause();
+ },
+ //PUSH HL
+ //#0xE5:
+ function (parentObj) {
+ parentObj.stackPointer = (parentObj.stackPointer - 1) & 0xFFFF;
+ parentObj.memoryWriter[parentObj.stackPointer](parentObj, parentObj.stackPointer, parentObj.registersHL >> 8);
+ parentObj.stackPointer = (parentObj.stackPointer - 1) & 0xFFFF;
+ parentObj.memoryWriter[parentObj.stackPointer](parentObj, parentObj.stackPointer, parentObj.registersHL & 0xFF);
+ },
+ //AND n
+ //#0xE6:
+ function (parentObj) {
+ parentObj.registerA &= parentObj.memoryReader[parentObj.programCounter](parentObj, parentObj.programCounter);
+ parentObj.programCounter = (parentObj.programCounter + 1) & 0xFFFF;
+ parentObj.FZero = (parentObj.registerA == 0);
+ parentObj.FHalfCarry = true;
+ parentObj.FSubtract = parentObj.FCarry = false;
+ },
+ //RST 0x20
+ //#0xE7:
+ function (parentObj) {
+ parentObj.stackPointer = (parentObj.stackPointer - 1) & 0xFFFF;
+ parentObj.memoryWriter[parentObj.stackPointer](parentObj, parentObj.stackPointer, parentObj.programCounter >> 8);
+ parentObj.stackPointer = (parentObj.stackPointer - 1) & 0xFFFF;
+ parentObj.memoryWriter[parentObj.stackPointer](parentObj, parentObj.stackPointer, parentObj.programCounter & 0xFF);
+ parentObj.programCounter = 0x20;
+ },
+ //ADD SP, n
+ //#0xE8:
+ function (parentObj) {
+ var temp_value2 = (parentObj.memoryReader[parentObj.programCounter](parentObj, parentObj.programCounter) << 24) >> 24;
+ parentObj.programCounter = (parentObj.programCounter + 1) & 0xFFFF;
+ var temp_value = (parentObj.stackPointer + temp_value2) & 0xFFFF;
+ temp_value2 = parentObj.stackPointer ^ temp_value2 ^ temp_value;
+ parentObj.stackPointer = temp_value;
+ parentObj.FCarry = ((temp_value2 & 0x100) == 0x100);
+ parentObj.FHalfCarry = ((temp_value2 & 0x10) == 0x10);
+ parentObj.FZero = parentObj.FSubtract = false;
+ },
+ //JP, (HL)
+ //#0xE9:
+ function (parentObj) {
+ parentObj.programCounter = parentObj.registersHL;
+ },
+ //LD n, A
+ //#0xEA:
+ function (parentObj) {
+ parentObj.memoryWrite((parentObj.memoryRead((parentObj.programCounter + 1) & 0xFFFF) << 8) | parentObj.memoryReader[parentObj.programCounter](parentObj, parentObj.programCounter), parentObj.registerA);
+ parentObj.programCounter = (parentObj.programCounter + 2) & 0xFFFF;
+ },
+ //0xEB - Illegal
+ //#0xEB:
+ function (parentObj) {
+ cout("Illegal op code 0xEB called, pausing emulation.", 2);
+ pause();
+ },
+ //0xEC - Illegal
+ //#0xEC:
+ function (parentObj) {
+ cout("Illegal op code 0xEC called, pausing emulation.", 2);
+ pause();
+ },
+ //0xED - Illegal
+ //#0xED:
+ function (parentObj) {
+ cout("Illegal op code 0xED called, pausing emulation.", 2);
+ pause();
+ },
+ //XOR n
+ //#0xEE:
+ function (parentObj) {
+ parentObj.registerA ^= parentObj.memoryReader[parentObj.programCounter](parentObj, parentObj.programCounter);
+ parentObj.programCounter = (parentObj.programCounter + 1) & 0xFFFF;
+ parentObj.FZero = (parentObj.registerA == 0);
+ parentObj.FSubtract = parentObj.FHalfCarry = parentObj.FCarry = false;
+ },
+ //RST 0x28
+ //#0xEF:
+ function (parentObj) {
+ parentObj.stackPointer = (parentObj.stackPointer - 1) & 0xFFFF;
+ parentObj.memoryWriter[parentObj.stackPointer](parentObj, parentObj.stackPointer, parentObj.programCounter >> 8);
+ parentObj.stackPointer = (parentObj.stackPointer - 1) & 0xFFFF;
+ parentObj.memoryWriter[parentObj.stackPointer](parentObj, parentObj.stackPointer, parentObj.programCounter & 0xFF);
+ parentObj.programCounter = 0x28;
+ },
+ //LDH A, (n)
+ //#0xF0:
+ function (parentObj) {
+ parentObj.registerA = parentObj.memoryHighRead(parentObj.memoryReader[parentObj.programCounter](parentObj, parentObj.programCounter));
+ parentObj.programCounter = (parentObj.programCounter + 1) & 0xFFFF;
+ },
+ //POP AF
+ //#0xF1:
+ function (parentObj) {
+ var temp_var = parentObj.memoryReader[parentObj.stackPointer](parentObj, parentObj.stackPointer);
+ parentObj.FZero = (temp_var > 0x7F);
+ parentObj.FSubtract = ((temp_var & 0x40) == 0x40);
+ parentObj.FHalfCarry = ((temp_var & 0x20) == 0x20);
+ parentObj.FCarry = ((temp_var & 0x10) == 0x10);
+ parentObj.registerA = parentObj.memoryRead((parentObj.stackPointer + 1) & 0xFFFF);
+ parentObj.stackPointer = (parentObj.stackPointer + 2) & 0xFFFF;
+ },
+ //LD A, (0xFF00 + C)
+ //#0xF2:
+ function (parentObj) {
+ parentObj.registerA = parentObj.memoryHighReader[parentObj.registerC](parentObj, parentObj.registerC);
+ },
+ //DI
+ //#0xF3:
+ function (parentObj) {
+ parentObj.IME = false;
+ parentObj.IRQEnableDelay = 0;
+ },
+ //0xF4 - Illegal
+ //#0xF4:
+ function (parentObj) {
+ cout("Illegal op code 0xF4 called, pausing emulation.", 2);
+ pause();
+ },
+ //PUSH AF
+ //#0xF5:
+ function (parentObj) {
+ parentObj.stackPointer = (parentObj.stackPointer - 1) & 0xFFFF;
+ parentObj.memoryWriter[parentObj.stackPointer](parentObj, parentObj.stackPointer, parentObj.registerA);
+ parentObj.stackPointer = (parentObj.stackPointer - 1) & 0xFFFF;
+ parentObj.memoryWriter[parentObj.stackPointer](parentObj, parentObj.stackPointer, ((parentObj.FZero) ? 0x80 : 0) | ((parentObj.FSubtract) ? 0x40 : 0) | ((parentObj.FHalfCarry) ? 0x20 : 0) | ((parentObj.FCarry) ? 0x10 : 0));
+ },
+ //OR n
+ //#0xF6:
+ function (parentObj) {
+ parentObj.registerA |= parentObj.memoryReader[parentObj.programCounter](parentObj, parentObj.programCounter);
+ parentObj.FZero = (parentObj.registerA == 0);
+ parentObj.programCounter = (parentObj.programCounter + 1) & 0xFFFF;
+ parentObj.FSubtract = parentObj.FCarry = parentObj.FHalfCarry = false;
+ },
+ //RST 0x30
+ //#0xF7:
+ function (parentObj) {
+ parentObj.stackPointer = (parentObj.stackPointer - 1) & 0xFFFF;
+ parentObj.memoryWriter[parentObj.stackPointer](parentObj, parentObj.stackPointer, parentObj.programCounter >> 8);
+ parentObj.stackPointer = (parentObj.stackPointer - 1) & 0xFFFF;
+ parentObj.memoryWriter[parentObj.stackPointer](parentObj, parentObj.stackPointer, parentObj.programCounter & 0xFF);
+ parentObj.programCounter = 0x30;
+ },
+ //LDHL SP, n
+ //#0xF8:
+ function (parentObj) {
+ var temp_var = (parentObj.memoryReader[parentObj.programCounter](parentObj, parentObj.programCounter) << 24) >> 24;
+ parentObj.programCounter = (parentObj.programCounter + 1) & 0xFFFF;
+ parentObj.registersHL = (parentObj.stackPointer + temp_var) & 0xFFFF;
+ temp_var = parentObj.stackPointer ^ temp_var ^ parentObj.registersHL;
+ parentObj.FCarry = ((temp_var & 0x100) == 0x100);
+ parentObj.FHalfCarry = ((temp_var & 0x10) == 0x10);
+ parentObj.FZero = parentObj.FSubtract = false;
+ },
+ //LD SP, HL
+ //#0xF9:
+ function (parentObj) {
+ parentObj.stackPointer = parentObj.registersHL;
+ },
+ //LD A, (nn)
+ //#0xFA:
+ function (parentObj) {
+ parentObj.registerA = parentObj.memoryRead((parentObj.memoryRead((parentObj.programCounter + 1) & 0xFFFF) << 8) | parentObj.memoryReader[parentObj.programCounter](parentObj, parentObj.programCounter));
+ parentObj.programCounter = (parentObj.programCounter + 2) & 0xFFFF;
+ },
+ //EI
+ //#0xFB:
+ function (parentObj) {
+ //Immediate for HALT:
+ parentObj.IRQEnableDelay = (parentObj.IRQEnableDelay == 2 || parentObj.memoryReader[parentObj.programCounter](parentObj, parentObj.programCounter) == 0x76) ? 1 : 2;
+ },
+ //0xFC - Illegal
+ //#0xFC:
+ function (parentObj) {
+ cout("Illegal op code 0xFC called, pausing emulation.", 2);
+ pause();
+ },
+ //0xFD - Illegal
+ //#0xFD:
+ function (parentObj) {
+ cout("Illegal op code 0xFD called, pausing emulation.", 2);
+ pause();
+ },
+ //CP n
+ //#0xFE:
+ function (parentObj) {
+ var dirtySum = parentObj.registerA - parentObj.memoryReader[parentObj.programCounter](parentObj, parentObj.programCounter);
+ parentObj.programCounter = (parentObj.programCounter + 1) & 0xFFFF;
+ parentObj.FHalfCarry = ((dirtySum & 0xF) > (parentObj.registerA & 0xF));
+ parentObj.FCarry = (dirtySum < 0);
+ parentObj.FZero = (dirtySum == 0);
+ parentObj.FSubtract = true;
+ },
+ //RST 0x38
+ //#0xFF:
+ function (parentObj) {
+ parentObj.stackPointer = (parentObj.stackPointer - 1) & 0xFFFF;
+ parentObj.memoryWriter[parentObj.stackPointer](parentObj, parentObj.stackPointer, parentObj.programCounter >> 8);
+ parentObj.stackPointer = (parentObj.stackPointer - 1) & 0xFFFF;
+ parentObj.memoryWriter[parentObj.stackPointer](parentObj, parentObj.stackPointer, parentObj.programCounter & 0xFF);
+ parentObj.programCounter = 0x38;
+ }
+];
+GameBoyCore.prototype.CBOPCODE = [
+ //RLC B
+ //#0x00:
+ function (parentObj) {
+ parentObj.FCarry = (parentObj.registerB > 0x7F);
+ parentObj.registerB = ((parentObj.registerB << 1) & 0xFF) | ((parentObj.FCarry) ? 1 : 0);
+ parentObj.FHalfCarry = parentObj.FSubtract = false;
+ parentObj.FZero = (parentObj.registerB == 0);
+ }
+ //RLC C
+ //#0x01:
+ ,function (parentObj) {
+ parentObj.FCarry = (parentObj.registerC > 0x7F);
+ parentObj.registerC = ((parentObj.registerC << 1) & 0xFF) | ((parentObj.FCarry) ? 1 : 0);
+ parentObj.FHalfCarry = parentObj.FSubtract = false;
+ parentObj.FZero = (parentObj.registerC == 0);
+ }
+ //RLC D
+ //#0x02:
+ ,function (parentObj) {
+ parentObj.FCarry = (parentObj.registerD > 0x7F);
+ parentObj.registerD = ((parentObj.registerD << 1) & 0xFF) | ((parentObj.FCarry) ? 1 : 0);
+ parentObj.FHalfCarry = parentObj.FSubtract = false;
+ parentObj.FZero = (parentObj.registerD == 0);
+ }
+ //RLC E
+ //#0x03:
+ ,function (parentObj) {
+ parentObj.FCarry = (parentObj.registerE > 0x7F);
+ parentObj.registerE = ((parentObj.registerE << 1) & 0xFF) | ((parentObj.FCarry) ? 1 : 0);
+ parentObj.FHalfCarry = parentObj.FSubtract = false;
+ parentObj.FZero = (parentObj.registerE == 0);
+ }
+ //RLC H
+ //#0x04:
+ ,function (parentObj) {
+ parentObj.FCarry = (parentObj.registersHL > 0x7FFF);
+ parentObj.registersHL = ((parentObj.registersHL << 1) & 0xFE00) | ((parentObj.FCarry) ? 0x100 : 0) | (parentObj.registersHL & 0xFF);
+ parentObj.FHalfCarry = parentObj.FSubtract = false;
+ parentObj.FZero = (parentObj.registersHL < 0x100);
+ }
+ //RLC L
+ //#0x05:
+ ,function (parentObj) {
+ parentObj.FCarry = ((parentObj.registersHL & 0x80) == 0x80);
+ parentObj.registersHL = (parentObj.registersHL & 0xFF00) | ((parentObj.registersHL << 1) & 0xFF) | ((parentObj.FCarry) ? 1 : 0);
+ parentObj.FHalfCarry = parentObj.FSubtract = false;
+ parentObj.FZero = ((parentObj.registersHL & 0xFF) == 0);
+ }
+ //RLC (HL)
+ //#0x06:
+ ,function (parentObj) {
+ var temp_var = parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL);
+ parentObj.FCarry = (temp_var > 0x7F);
+ temp_var = ((temp_var << 1) & 0xFF) | ((parentObj.FCarry) ? 1 : 0);
+ parentObj.memoryWriter[parentObj.registersHL](parentObj, parentObj.registersHL, temp_var);
+ parentObj.FHalfCarry = parentObj.FSubtract = false;
+ parentObj.FZero = (temp_var == 0);
+ }
+ //RLC A
+ //#0x07:
+ ,function (parentObj) {
+ parentObj.FCarry = (parentObj.registerA > 0x7F);
+ parentObj.registerA = ((parentObj.registerA << 1) & 0xFF) | ((parentObj.FCarry) ? 1 : 0);
+ parentObj.FHalfCarry = parentObj.FSubtract = false;
+ parentObj.FZero = (parentObj.registerA == 0);
+ }
+ //RRC B
+ //#0x08:
+ ,function (parentObj) {
+ parentObj.FCarry = ((parentObj.registerB & 0x01) == 0x01);
+ parentObj.registerB = ((parentObj.FCarry) ? 0x80 : 0) | (parentObj.registerB >> 1);
+ parentObj.FHalfCarry = parentObj.FSubtract = false;
+ parentObj.FZero = (parentObj.registerB == 0);
+ }
+ //RRC C
+ //#0x09:
+ ,function (parentObj) {
+ parentObj.FCarry = ((parentObj.registerC & 0x01) == 0x01);
+ parentObj.registerC = ((parentObj.FCarry) ? 0x80 : 0) | (parentObj.registerC >> 1);
+ parentObj.FHalfCarry = parentObj.FSubtract = false;
+ parentObj.FZero = (parentObj.registerC == 0);
+ }
+ //RRC D
+ //#0x0A:
+ ,function (parentObj) {
+ parentObj.FCarry = ((parentObj.registerD & 0x01) == 0x01);
+ parentObj.registerD = ((parentObj.FCarry) ? 0x80 : 0) | (parentObj.registerD >> 1);
+ parentObj.FHalfCarry = parentObj.FSubtract = false;
+ parentObj.FZero = (parentObj.registerD == 0);
+ }
+ //RRC E
+ //#0x0B:
+ ,function (parentObj) {
+ parentObj.FCarry = ((parentObj.registerE & 0x01) == 0x01);
+ parentObj.registerE = ((parentObj.FCarry) ? 0x80 : 0) | (parentObj.registerE >> 1);
+ parentObj.FHalfCarry = parentObj.FSubtract = false;
+ parentObj.FZero = (parentObj.registerE == 0);
+ }
+ //RRC H
+ //#0x0C:
+ ,function (parentObj) {
+ parentObj.FCarry = ((parentObj.registersHL & 0x0100) == 0x0100);
+ parentObj.registersHL = ((parentObj.FCarry) ? 0x8000 : 0) | ((parentObj.registersHL >> 1) & 0xFF00) | (parentObj.registersHL & 0xFF);
+ parentObj.FHalfCarry = parentObj.FSubtract = false;
+ parentObj.FZero = (parentObj.registersHL < 0x100);
+ }
+ //RRC L
+ //#0x0D:
+ ,function (parentObj) {
+ parentObj.FCarry = ((parentObj.registersHL & 0x01) == 0x01);
+ parentObj.registersHL = (parentObj.registersHL & 0xFF00) | ((parentObj.FCarry) ? 0x80 : 0) | ((parentObj.registersHL & 0xFF) >> 1);
+ parentObj.FHalfCarry = parentObj.FSubtract = false;
+ parentObj.FZero = ((parentObj.registersHL & 0xFF) == 0);
+ }
+ //RRC (HL)
+ //#0x0E:
+ ,function (parentObj) {
+ var temp_var = parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL);
+ parentObj.FCarry = ((temp_var & 0x01) == 0x01);
+ temp_var = ((parentObj.FCarry) ? 0x80 : 0) | (temp_var >> 1);
+ parentObj.memoryWriter[parentObj.registersHL](parentObj, parentObj.registersHL, temp_var);
+ parentObj.FHalfCarry = parentObj.FSubtract = false;
+ parentObj.FZero = (temp_var == 0);
+ }
+ //RRC A
+ //#0x0F:
+ ,function (parentObj) {
+ parentObj.FCarry = ((parentObj.registerA & 0x01) == 0x01);
+ parentObj.registerA = ((parentObj.FCarry) ? 0x80 : 0) | (parentObj.registerA >> 1);
+ parentObj.FHalfCarry = parentObj.FSubtract = false;
+ parentObj.FZero = (parentObj.registerA == 0);
+ }
+ //RL B
+ //#0x10:
+ ,function (parentObj) {
+ var newFCarry = (parentObj.registerB > 0x7F);
+ parentObj.registerB = ((parentObj.registerB << 1) & 0xFF) | ((parentObj.FCarry) ? 1 : 0);
+ parentObj.FCarry = newFCarry;
+ parentObj.FHalfCarry = parentObj.FSubtract = false;
+ parentObj.FZero = (parentObj.registerB == 0);
+ }
+ //RL C
+ //#0x11:
+ ,function (parentObj) {
+ var newFCarry = (parentObj.registerC > 0x7F);
+ parentObj.registerC = ((parentObj.registerC << 1) & 0xFF) | ((parentObj.FCarry) ? 1 : 0);
+ parentObj.FCarry = newFCarry;
+ parentObj.FHalfCarry = parentObj.FSubtract = false;
+ parentObj.FZero = (parentObj.registerC == 0);
+ }
+ //RL D
+ //#0x12:
+ ,function (parentObj) {
+ var newFCarry = (parentObj.registerD > 0x7F);
+ parentObj.registerD = ((parentObj.registerD << 1) & 0xFF) | ((parentObj.FCarry) ? 1 : 0);
+ parentObj.FCarry = newFCarry;
+ parentObj.FHalfCarry = parentObj.FSubtract = false;
+ parentObj.FZero = (parentObj.registerD == 0);
+ }
+ //RL E
+ //#0x13:
+ ,function (parentObj) {
+ var newFCarry = (parentObj.registerE > 0x7F);
+ parentObj.registerE = ((parentObj.registerE << 1) & 0xFF) | ((parentObj.FCarry) ? 1 : 0);
+ parentObj.FCarry = newFCarry;
+ parentObj.FHalfCarry = parentObj.FSubtract = false;
+ parentObj.FZero = (parentObj.registerE == 0);
+ }
+ //RL H
+ //#0x14:
+ ,function (parentObj) {
+ var newFCarry = (parentObj.registersHL > 0x7FFF);
+ parentObj.registersHL = ((parentObj.registersHL << 1) & 0xFE00) | ((parentObj.FCarry) ? 0x100 : 0) | (parentObj.registersHL & 0xFF);
+ parentObj.FCarry = newFCarry;
+ parentObj.FHalfCarry = parentObj.FSubtract = false;
+ parentObj.FZero = (parentObj.registersHL < 0x100);
+ }
+ //RL L
+ //#0x15:
+ ,function (parentObj) {
+ var newFCarry = ((parentObj.registersHL & 0x80) == 0x80);
+ parentObj.registersHL = (parentObj.registersHL & 0xFF00) | ((parentObj.registersHL << 1) & 0xFF) | ((parentObj.FCarry) ? 1 : 0);
+ parentObj.FCarry = newFCarry;
+ parentObj.FHalfCarry = parentObj.FSubtract = false;
+ parentObj.FZero = ((parentObj.registersHL & 0xFF) == 0);
+ }
+ //RL (HL)
+ //#0x16:
+ ,function (parentObj) {
+ var temp_var = parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL);
+ var newFCarry = (temp_var > 0x7F);
+ temp_var = ((temp_var << 1) & 0xFF) | ((parentObj.FCarry) ? 1 : 0);
+ parentObj.FCarry = newFCarry;
+ parentObj.memoryWriter[parentObj.registersHL](parentObj, parentObj.registersHL, temp_var);
+ parentObj.FHalfCarry = parentObj.FSubtract = false;
+ parentObj.FZero = (temp_var == 0);
+ }
+ //RL A
+ //#0x17:
+ ,function (parentObj) {
+ var newFCarry = (parentObj.registerA > 0x7F);
+ parentObj.registerA = ((parentObj.registerA << 1) & 0xFF) | ((parentObj.FCarry) ? 1 : 0);
+ parentObj.FCarry = newFCarry;
+ parentObj.FHalfCarry = parentObj.FSubtract = false;
+ parentObj.FZero = (parentObj.registerA == 0);
+ }
+ //RR B
+ //#0x18:
+ ,function (parentObj) {
+ var newFCarry = ((parentObj.registerB & 0x01) == 0x01);
+ parentObj.registerB = ((parentObj.FCarry) ? 0x80 : 0) | (parentObj.registerB >> 1);
+ parentObj.FCarry = newFCarry;
+ parentObj.FHalfCarry = parentObj.FSubtract = false;
+ parentObj.FZero = (parentObj.registerB == 0);
+ }
+ //RR C
+ //#0x19:
+ ,function (parentObj) {
+ var newFCarry = ((parentObj.registerC & 0x01) == 0x01);
+ parentObj.registerC = ((parentObj.FCarry) ? 0x80 : 0) | (parentObj.registerC >> 1);
+ parentObj.FCarry = newFCarry;
+ parentObj.FHalfCarry = parentObj.FSubtract = false;
+ parentObj.FZero = (parentObj.registerC == 0);
+ }
+ //RR D
+ //#0x1A:
+ ,function (parentObj) {
+ var newFCarry = ((parentObj.registerD & 0x01) == 0x01);
+ parentObj.registerD = ((parentObj.FCarry) ? 0x80 : 0) | (parentObj.registerD >> 1);
+ parentObj.FCarry = newFCarry;
+ parentObj.FHalfCarry = parentObj.FSubtract = false;
+ parentObj.FZero = (parentObj.registerD == 0);
+ }
+ //RR E
+ //#0x1B:
+ ,function (parentObj) {
+ var newFCarry = ((parentObj.registerE & 0x01) == 0x01);
+ parentObj.registerE = ((parentObj.FCarry) ? 0x80 : 0) | (parentObj.registerE >> 1);
+ parentObj.FCarry = newFCarry;
+ parentObj.FHalfCarry = parentObj.FSubtract = false;
+ parentObj.FZero = (parentObj.registerE == 0);
+ }
+ //RR H
+ //#0x1C:
+ ,function (parentObj) {
+ var newFCarry = ((parentObj.registersHL & 0x0100) == 0x0100);
+ parentObj.registersHL = ((parentObj.FCarry) ? 0x8000 : 0) | ((parentObj.registersHL >> 1) & 0xFF00) | (parentObj.registersHL & 0xFF);
+ parentObj.FCarry = newFCarry;
+ parentObj.FHalfCarry = parentObj.FSubtract = false;
+ parentObj.FZero = (parentObj.registersHL < 0x100);
+ }
+ //RR L
+ //#0x1D:
+ ,function (parentObj) {
+ var newFCarry = ((parentObj.registersHL & 0x01) == 0x01);
+ parentObj.registersHL = (parentObj.registersHL & 0xFF00) | ((parentObj.FCarry) ? 0x80 : 0) | ((parentObj.registersHL & 0xFF) >> 1);
+ parentObj.FCarry = newFCarry;
+ parentObj.FHalfCarry = parentObj.FSubtract = false;
+ parentObj.FZero = ((parentObj.registersHL & 0xFF) == 0);
+ }
+ //RR (HL)
+ //#0x1E:
+ ,function (parentObj) {
+ var temp_var = parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL);
+ var newFCarry = ((temp_var & 0x01) == 0x01);
+ temp_var = ((parentObj.FCarry) ? 0x80 : 0) | (temp_var >> 1);
+ parentObj.FCarry = newFCarry;
+ parentObj.memoryWriter[parentObj.registersHL](parentObj, parentObj.registersHL, temp_var);
+ parentObj.FHalfCarry = parentObj.FSubtract = false;
+ parentObj.FZero = (temp_var == 0);
+ }
+ //RR A
+ //#0x1F:
+ ,function (parentObj) {
+ var newFCarry = ((parentObj.registerA & 0x01) == 0x01);
+ parentObj.registerA = ((parentObj.FCarry) ? 0x80 : 0) | (parentObj.registerA >> 1);
+ parentObj.FCarry = newFCarry;
+ parentObj.FHalfCarry = parentObj.FSubtract = false;
+ parentObj.FZero = (parentObj.registerA == 0);
+ }
+ //SLA B
+ //#0x20:
+ ,function (parentObj) {
+ parentObj.FCarry = (parentObj.registerB > 0x7F);
+ parentObj.registerB = (parentObj.registerB << 1) & 0xFF;
+ parentObj.FHalfCarry = parentObj.FSubtract = false;
+ parentObj.FZero = (parentObj.registerB == 0);
+ }
+ //SLA C
+ //#0x21:
+ ,function (parentObj) {
+ parentObj.FCarry = (parentObj.registerC > 0x7F);
+ parentObj.registerC = (parentObj.registerC << 1) & 0xFF;
+ parentObj.FHalfCarry = parentObj.FSubtract = false;
+ parentObj.FZero = (parentObj.registerC == 0);
+ }
+ //SLA D
+ //#0x22:
+ ,function (parentObj) {
+ parentObj.FCarry = (parentObj.registerD > 0x7F);
+ parentObj.registerD = (parentObj.registerD << 1) & 0xFF;
+ parentObj.FHalfCarry = parentObj.FSubtract = false;
+ parentObj.FZero = (parentObj.registerD == 0);
+ }
+ //SLA E
+ //#0x23:
+ ,function (parentObj) {
+ parentObj.FCarry = (parentObj.registerE > 0x7F);
+ parentObj.registerE = (parentObj.registerE << 1) & 0xFF;
+ parentObj.FHalfCarry = parentObj.FSubtract = false;
+ parentObj.FZero = (parentObj.registerE == 0);
+ }
+ //SLA H
+ //#0x24:
+ ,function (parentObj) {
+ parentObj.FCarry = (parentObj.registersHL > 0x7FFF);
+ parentObj.registersHL = ((parentObj.registersHL << 1) & 0xFE00) | (parentObj.registersHL & 0xFF);
+ parentObj.FHalfCarry = parentObj.FSubtract = false;
+ parentObj.FZero = (parentObj.registersHL < 0x100);
+ }
+ //SLA L
+ //#0x25:
+ ,function (parentObj) {
+ parentObj.FCarry = ((parentObj.registersHL & 0x0080) == 0x0080);
+ parentObj.registersHL = (parentObj.registersHL & 0xFF00) | ((parentObj.registersHL << 1) & 0xFF);
+ parentObj.FHalfCarry = parentObj.FSubtract = false;
+ parentObj.FZero = ((parentObj.registersHL & 0xFF) == 0);
+ }
+ //SLA (HL)
+ //#0x26:
+ ,function (parentObj) {
+ var temp_var = parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL);
+ parentObj.FCarry = (temp_var > 0x7F);
+ temp_var = (temp_var << 1) & 0xFF;
+ parentObj.memoryWriter[parentObj.registersHL](parentObj, parentObj.registersHL, temp_var);
+ parentObj.FHalfCarry = parentObj.FSubtract = false;
+ parentObj.FZero = (temp_var == 0);
+ }
+ //SLA A
+ //#0x27:
+ ,function (parentObj) {
+ parentObj.FCarry = (parentObj.registerA > 0x7F);
+ parentObj.registerA = (parentObj.registerA << 1) & 0xFF;
+ parentObj.FHalfCarry = parentObj.FSubtract = false;
+ parentObj.FZero = (parentObj.registerA == 0);
+ }
+ //SRA B
+ //#0x28:
+ ,function (parentObj) {
+ parentObj.FCarry = ((parentObj.registerB & 0x01) == 0x01);
+ parentObj.registerB = (parentObj.registerB & 0x80) | (parentObj.registerB >> 1);
+ parentObj.FHalfCarry = parentObj.FSubtract = false;
+ parentObj.FZero = (parentObj.registerB == 0);
+ }
+ //SRA C
+ //#0x29:
+ ,function (parentObj) {
+ parentObj.FCarry = ((parentObj.registerC & 0x01) == 0x01);
+ parentObj.registerC = (parentObj.registerC & 0x80) | (parentObj.registerC >> 1);
+ parentObj.FHalfCarry = parentObj.FSubtract = false;
+ parentObj.FZero = (parentObj.registerC == 0);
+ }
+ //SRA D
+ //#0x2A:
+ ,function (parentObj) {
+ parentObj.FCarry = ((parentObj.registerD & 0x01) == 0x01);
+ parentObj.registerD = (parentObj.registerD & 0x80) | (parentObj.registerD >> 1);
+ parentObj.FHalfCarry = parentObj.FSubtract = false;
+ parentObj.FZero = (parentObj.registerD == 0);
+ }
+ //SRA E
+ //#0x2B:
+ ,function (parentObj) {
+ parentObj.FCarry = ((parentObj.registerE & 0x01) == 0x01);
+ parentObj.registerE = (parentObj.registerE & 0x80) | (parentObj.registerE >> 1);
+ parentObj.FHalfCarry = parentObj.FSubtract = false;
+ parentObj.FZero = (parentObj.registerE == 0);
+ }
+ //SRA H
+ //#0x2C:
+ ,function (parentObj) {
+ parentObj.FCarry = ((parentObj.registersHL & 0x0100) == 0x0100);
+ parentObj.registersHL = ((parentObj.registersHL >> 1) & 0xFF00) | (parentObj.registersHL & 0x80FF);
+ parentObj.FHalfCarry = parentObj.FSubtract = false;
+ parentObj.FZero = (parentObj.registersHL < 0x100);
+ }
+ //SRA L
+ //#0x2D:
+ ,function (parentObj) {
+ parentObj.FCarry = ((parentObj.registersHL & 0x0001) == 0x0001);
+ parentObj.registersHL = (parentObj.registersHL & 0xFF80) | ((parentObj.registersHL & 0xFF) >> 1);
+ parentObj.FHalfCarry = parentObj.FSubtract = false;
+ parentObj.FZero = ((parentObj.registersHL & 0xFF) == 0);
+ }
+ //SRA (HL)
+ //#0x2E:
+ ,function (parentObj) {
+ var temp_var = parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL);
+ parentObj.FCarry = ((temp_var & 0x01) == 0x01);
+ temp_var = (temp_var & 0x80) | (temp_var >> 1);
+ parentObj.memoryWriter[parentObj.registersHL](parentObj, parentObj.registersHL, temp_var);
+ parentObj.FHalfCarry = parentObj.FSubtract = false;
+ parentObj.FZero = (temp_var == 0);
+ }
+ //SRA A
+ //#0x2F:
+ ,function (parentObj) {
+ parentObj.FCarry = ((parentObj.registerA & 0x01) == 0x01);
+ parentObj.registerA = (parentObj.registerA & 0x80) | (parentObj.registerA >> 1);
+ parentObj.FHalfCarry = parentObj.FSubtract = false;
+ parentObj.FZero = (parentObj.registerA == 0);
+ }
+ //SWAP B
+ //#0x30:
+ ,function (parentObj) {
+ parentObj.registerB = ((parentObj.registerB & 0xF) << 4) | (parentObj.registerB >> 4);
+ parentObj.FZero = (parentObj.registerB == 0);
+ parentObj.FCarry = parentObj.FHalfCarry = parentObj.FSubtract = false;
+ }
+ //SWAP C
+ //#0x31:
+ ,function (parentObj) {
+ parentObj.registerC = ((parentObj.registerC & 0xF) << 4) | (parentObj.registerC >> 4);
+ parentObj.FZero = (parentObj.registerC == 0);
+ parentObj.FCarry = parentObj.FHalfCarry = parentObj.FSubtract = false;
+ }
+ //SWAP D
+ //#0x32:
+ ,function (parentObj) {
+ parentObj.registerD = ((parentObj.registerD & 0xF) << 4) | (parentObj.registerD >> 4);
+ parentObj.FZero = (parentObj.registerD == 0);
+ parentObj.FCarry = parentObj.FHalfCarry = parentObj.FSubtract = false;
+ }
+ //SWAP E
+ //#0x33:
+ ,function (parentObj) {
+ parentObj.registerE = ((parentObj.registerE & 0xF) << 4) | (parentObj.registerE >> 4);
+ parentObj.FZero = (parentObj.registerE == 0);
+ parentObj.FCarry = parentObj.FHalfCarry = parentObj.FSubtract = false;
+ }
+ //SWAP H
+ //#0x34:
+ ,function (parentObj) {
+ parentObj.registersHL = ((parentObj.registersHL & 0xF00) << 4) | ((parentObj.registersHL & 0xF000) >> 4) | (parentObj.registersHL & 0xFF);
+ parentObj.FZero = (parentObj.registersHL < 0x100);
+ parentObj.FCarry = parentObj.FHalfCarry = parentObj.FSubtract = false;
+ }
+ //SWAP L
+ //#0x35:
+ ,function (parentObj) {
+ parentObj.registersHL = (parentObj.registersHL & 0xFF00) | ((parentObj.registersHL & 0xF) << 4) | ((parentObj.registersHL & 0xF0) >> 4);
+ parentObj.FZero = ((parentObj.registersHL & 0xFF) == 0);
+ parentObj.FCarry = parentObj.FHalfCarry = parentObj.FSubtract = false;
+ }
+ //SWAP (HL)
+ //#0x36:
+ ,function (parentObj) {
+ var temp_var = parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL);
+ temp_var = ((temp_var & 0xF) << 4) | (temp_var >> 4);
+ parentObj.memoryWriter[parentObj.registersHL](parentObj, parentObj.registersHL, temp_var);
+ parentObj.FZero = (temp_var == 0);
+ parentObj.FCarry = parentObj.FHalfCarry = parentObj.FSubtract = false;
+ }
+ //SWAP A
+ //#0x37:
+ ,function (parentObj) {
+ parentObj.registerA = ((parentObj.registerA & 0xF) << 4) | (parentObj.registerA >> 4);
+ parentObj.FZero = (parentObj.registerA == 0);
+ parentObj.FCarry = parentObj.FHalfCarry = parentObj.FSubtract = false;
+ }
+ //SRL B
+ //#0x38:
+ ,function (parentObj) {
+ parentObj.FCarry = ((parentObj.registerB & 0x01) == 0x01);
+ parentObj.registerB >>= 1;
+ parentObj.FHalfCarry = parentObj.FSubtract = false;
+ parentObj.FZero = (parentObj.registerB == 0);
+ }
+ //SRL C
+ //#0x39:
+ ,function (parentObj) {
+ parentObj.FCarry = ((parentObj.registerC & 0x01) == 0x01);
+ parentObj.registerC >>= 1;
+ parentObj.FHalfCarry = parentObj.FSubtract = false;
+ parentObj.FZero = (parentObj.registerC == 0);
+ }
+ //SRL D
+ //#0x3A:
+ ,function (parentObj) {
+ parentObj.FCarry = ((parentObj.registerD & 0x01) == 0x01);
+ parentObj.registerD >>= 1;
+ parentObj.FHalfCarry = parentObj.FSubtract = false;
+ parentObj.FZero = (parentObj.registerD == 0);
+ }
+ //SRL E
+ //#0x3B:
+ ,function (parentObj) {
+ parentObj.FCarry = ((parentObj.registerE & 0x01) == 0x01);
+ parentObj.registerE >>= 1;
+ parentObj.FHalfCarry = parentObj.FSubtract = false;
+ parentObj.FZero = (parentObj.registerE == 0);
+ }
+ //SRL H
+ //#0x3C:
+ ,function (parentObj) {
+ parentObj.FCarry = ((parentObj.registersHL & 0x0100) == 0x0100);
+ parentObj.registersHL = ((parentObj.registersHL >> 1) & 0xFF00) | (parentObj.registersHL & 0xFF);
+ parentObj.FHalfCarry = parentObj.FSubtract = false;
+ parentObj.FZero = (parentObj.registersHL < 0x100);
+ }
+ //SRL L
+ //#0x3D:
+ ,function (parentObj) {
+ parentObj.FCarry = ((parentObj.registersHL & 0x0001) == 0x0001);
+ parentObj.registersHL = (parentObj.registersHL & 0xFF00) | ((parentObj.registersHL & 0xFF) >> 1);
+ parentObj.FHalfCarry = parentObj.FSubtract = false;
+ parentObj.FZero = ((parentObj.registersHL & 0xFF) == 0);
+ }
+ //SRL (HL)
+ //#0x3E:
+ ,function (parentObj) {
+ var temp_var = parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL);
+ parentObj.FCarry = ((temp_var & 0x01) == 0x01);
+ parentObj.memoryWriter[parentObj.registersHL](parentObj, parentObj.registersHL, temp_var >> 1);
+ parentObj.FHalfCarry = parentObj.FSubtract = false;
+ parentObj.FZero = (temp_var < 2);
+ }
+ //SRL A
+ //#0x3F:
+ ,function (parentObj) {
+ parentObj.FCarry = ((parentObj.registerA & 0x01) == 0x01);
+ parentObj.registerA >>= 1;
+ parentObj.FHalfCarry = parentObj.FSubtract = false;
+ parentObj.FZero = (parentObj.registerA == 0);
+ }
+ //BIT 0, B
+ //#0x40:
+ ,function (parentObj) {
+ parentObj.FHalfCarry = true;
+ parentObj.FSubtract = false;
+ parentObj.FZero = ((parentObj.registerB & 0x01) == 0);
+ }
+ //BIT 0, C
+ //#0x41:
+ ,function (parentObj) {
+ parentObj.FHalfCarry = true;
+ parentObj.FSubtract = false;
+ parentObj.FZero = ((parentObj.registerC & 0x01) == 0);
+ }
+ //BIT 0, D
+ //#0x42:
+ ,function (parentObj) {
+ parentObj.FHalfCarry = true;
+ parentObj.FSubtract = false;
+ parentObj.FZero = ((parentObj.registerD & 0x01) == 0);
+ }
+ //BIT 0, E
+ //#0x43:
+ ,function (parentObj) {
+ parentObj.FHalfCarry = true;
+ parentObj.FSubtract = false;
+ parentObj.FZero = ((parentObj.registerE & 0x01) == 0);
+ }
+ //BIT 0, H
+ //#0x44:
+ ,function (parentObj) {
+ parentObj.FHalfCarry = true;
+ parentObj.FSubtract = false;
+ parentObj.FZero = ((parentObj.registersHL & 0x0100) == 0);
+ }
+ //BIT 0, L
+ //#0x45:
+ ,function (parentObj) {
+ parentObj.FHalfCarry = true;
+ parentObj.FSubtract = false;
+ parentObj.FZero = ((parentObj.registersHL & 0x0001) == 0);
+ }
+ //BIT 0, (HL)
+ //#0x46:
+ ,function (parentObj) {
+ parentObj.FHalfCarry = true;
+ parentObj.FSubtract = false;
+ parentObj.FZero = ((parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL) & 0x01) == 0);
+ }
+ //BIT 0, A
+ //#0x47:
+ ,function (parentObj) {
+ parentObj.FHalfCarry = true;
+ parentObj.FSubtract = false;
+ parentObj.FZero = ((parentObj.registerA & 0x01) == 0);
+ }
+ //BIT 1, B
+ //#0x48:
+ ,function (parentObj) {
+ parentObj.FHalfCarry = true;
+ parentObj.FSubtract = false;
+ parentObj.FZero = ((parentObj.registerB & 0x02) == 0);
+ }
+ //BIT 1, C
+ //#0x49:
+ ,function (parentObj) {
+ parentObj.FHalfCarry = true;
+ parentObj.FSubtract = false;
+ parentObj.FZero = ((parentObj.registerC & 0x02) == 0);
+ }
+ //BIT 1, D
+ //#0x4A:
+ ,function (parentObj) {
+ parentObj.FHalfCarry = true;
+ parentObj.FSubtract = false;
+ parentObj.FZero = ((parentObj.registerD & 0x02) == 0);
+ }
+ //BIT 1, E
+ //#0x4B:
+ ,function (parentObj) {
+ parentObj.FHalfCarry = true;
+ parentObj.FSubtract = false;
+ parentObj.FZero = ((parentObj.registerE & 0x02) == 0);
+ }
+ //BIT 1, H
+ //#0x4C:
+ ,function (parentObj) {
+ parentObj.FHalfCarry = true;
+ parentObj.FSubtract = false;
+ parentObj.FZero = ((parentObj.registersHL & 0x0200) == 0);
+ }
+ //BIT 1, L
+ //#0x4D:
+ ,function (parentObj) {
+ parentObj.FHalfCarry = true;
+ parentObj.FSubtract = false;
+ parentObj.FZero = ((parentObj.registersHL & 0x0002) == 0);
+ }
+ //BIT 1, (HL)
+ //#0x4E:
+ ,function (parentObj) {
+ parentObj.FHalfCarry = true;
+ parentObj.FSubtract = false;
+ parentObj.FZero = ((parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL) & 0x02) == 0);
+ }
+ //BIT 1, A
+ //#0x4F:
+ ,function (parentObj) {
+ parentObj.FHalfCarry = true;
+ parentObj.FSubtract = false;
+ parentObj.FZero = ((parentObj.registerA & 0x02) == 0);
+ }
+ //BIT 2, B
+ //#0x50:
+ ,function (parentObj) {
+ parentObj.FHalfCarry = true;
+ parentObj.FSubtract = false;
+ parentObj.FZero = ((parentObj.registerB & 0x04) == 0);
+ }
+ //BIT 2, C
+ //#0x51:
+ ,function (parentObj) {
+ parentObj.FHalfCarry = true;
+ parentObj.FSubtract = false;
+ parentObj.FZero = ((parentObj.registerC & 0x04) == 0);
+ }
+ //BIT 2, D
+ //#0x52:
+ ,function (parentObj) {
+ parentObj.FHalfCarry = true;
+ parentObj.FSubtract = false;
+ parentObj.FZero = ((parentObj.registerD & 0x04) == 0);
+ }
+ //BIT 2, E
+ //#0x53:
+ ,function (parentObj) {
+ parentObj.FHalfCarry = true;
+ parentObj.FSubtract = false;
+ parentObj.FZero = ((parentObj.registerE & 0x04) == 0);
+ }
+ //BIT 2, H
+ //#0x54:
+ ,function (parentObj) {
+ parentObj.FHalfCarry = true;
+ parentObj.FSubtract = false;
+ parentObj.FZero = ((parentObj.registersHL & 0x0400) == 0);
+ }
+ //BIT 2, L
+ //#0x55:
+ ,function (parentObj) {
+ parentObj.FHalfCarry = true;
+ parentObj.FSubtract = false;
+ parentObj.FZero = ((parentObj.registersHL & 0x0004) == 0);
+ }
+ //BIT 2, (HL)
+ //#0x56:
+ ,function (parentObj) {
+ parentObj.FHalfCarry = true;
+ parentObj.FSubtract = false;
+ parentObj.FZero = ((parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL) & 0x04) == 0);
+ }
+ //BIT 2, A
+ //#0x57:
+ ,function (parentObj) {
+ parentObj.FHalfCarry = true;
+ parentObj.FSubtract = false;
+ parentObj.FZero = ((parentObj.registerA & 0x04) == 0);
+ }
+ //BIT 3, B
+ //#0x58:
+ ,function (parentObj) {
+ parentObj.FHalfCarry = true;
+ parentObj.FSubtract = false;
+ parentObj.FZero = ((parentObj.registerB & 0x08) == 0);
+ }
+ //BIT 3, C
+ //#0x59:
+ ,function (parentObj) {
+ parentObj.FHalfCarry = true;
+ parentObj.FSubtract = false;
+ parentObj.FZero = ((parentObj.registerC & 0x08) == 0);
+ }
+ //BIT 3, D
+ //#0x5A:
+ ,function (parentObj) {
+ parentObj.FHalfCarry = true;
+ parentObj.FSubtract = false;
+ parentObj.FZero = ((parentObj.registerD & 0x08) == 0);
+ }
+ //BIT 3, E
+ //#0x5B:
+ ,function (parentObj) {
+ parentObj.FHalfCarry = true;
+ parentObj.FSubtract = false;
+ parentObj.FZero = ((parentObj.registerE & 0x08) == 0);
+ }
+ //BIT 3, H
+ //#0x5C:
+ ,function (parentObj) {
+ parentObj.FHalfCarry = true;
+ parentObj.FSubtract = false;
+ parentObj.FZero = ((parentObj.registersHL & 0x0800) == 0);
+ }
+ //BIT 3, L
+ //#0x5D:
+ ,function (parentObj) {
+ parentObj.FHalfCarry = true;
+ parentObj.FSubtract = false;
+ parentObj.FZero = ((parentObj.registersHL & 0x0008) == 0);
+ }
+ //BIT 3, (HL)
+ //#0x5E:
+ ,function (parentObj) {
+ parentObj.FHalfCarry = true;
+ parentObj.FSubtract = false;
+ parentObj.FZero = ((parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL) & 0x08) == 0);
+ }
+ //BIT 3, A
+ //#0x5F:
+ ,function (parentObj) {
+ parentObj.FHalfCarry = true;
+ parentObj.FSubtract = false;
+ parentObj.FZero = ((parentObj.registerA & 0x08) == 0);
+ }
+ //BIT 4, B
+ //#0x60:
+ ,function (parentObj) {
+ parentObj.FHalfCarry = true;
+ parentObj.FSubtract = false;
+ parentObj.FZero = ((parentObj.registerB & 0x10) == 0);
+ }
+ //BIT 4, C
+ //#0x61:
+ ,function (parentObj) {
+ parentObj.FHalfCarry = true;
+ parentObj.FSubtract = false;
+ parentObj.FZero = ((parentObj.registerC & 0x10) == 0);
+ }
+ //BIT 4, D
+ //#0x62:
+ ,function (parentObj) {
+ parentObj.FHalfCarry = true;
+ parentObj.FSubtract = false;
+ parentObj.FZero = ((parentObj.registerD & 0x10) == 0);
+ }
+ //BIT 4, E
+ //#0x63:
+ ,function (parentObj) {
+ parentObj.FHalfCarry = true;
+ parentObj.FSubtract = false;
+ parentObj.FZero = ((parentObj.registerE & 0x10) == 0);
+ }
+ //BIT 4, H
+ //#0x64:
+ ,function (parentObj) {
+ parentObj.FHalfCarry = true;
+ parentObj.FSubtract = false;
+ parentObj.FZero = ((parentObj.registersHL & 0x1000) == 0);
+ }
+ //BIT 4, L
+ //#0x65:
+ ,function (parentObj) {
+ parentObj.FHalfCarry = true;
+ parentObj.FSubtract = false;
+ parentObj.FZero = ((parentObj.registersHL & 0x0010) == 0);
+ }
+ //BIT 4, (HL)
+ //#0x66:
+ ,function (parentObj) {
+ parentObj.FHalfCarry = true;
+ parentObj.FSubtract = false;
+ parentObj.FZero = ((parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL) & 0x10) == 0);
+ }
+ //BIT 4, A
+ //#0x67:
+ ,function (parentObj) {
+ parentObj.FHalfCarry = true;
+ parentObj.FSubtract = false;
+ parentObj.FZero = ((parentObj.registerA & 0x10) == 0);
+ }
+ //BIT 5, B
+ //#0x68:
+ ,function (parentObj) {
+ parentObj.FHalfCarry = true;
+ parentObj.FSubtract = false;
+ parentObj.FZero = ((parentObj.registerB & 0x20) == 0);
+ }
+ //BIT 5, C
+ //#0x69:
+ ,function (parentObj) {
+ parentObj.FHalfCarry = true;
+ parentObj.FSubtract = false;
+ parentObj.FZero = ((parentObj.registerC & 0x20) == 0);
+ }
+ //BIT 5, D
+ //#0x6A:
+ ,function (parentObj) {
+ parentObj.FHalfCarry = true;
+ parentObj.FSubtract = false;
+ parentObj.FZero = ((parentObj.registerD & 0x20) == 0);
+ }
+ //BIT 5, E
+ //#0x6B:
+ ,function (parentObj) {
+ parentObj.FHalfCarry = true;
+ parentObj.FSubtract = false;
+ parentObj.FZero = ((parentObj.registerE & 0x20) == 0);
+ }
+ //BIT 5, H
+ //#0x6C:
+ ,function (parentObj) {
+ parentObj.FHalfCarry = true;
+ parentObj.FSubtract = false;
+ parentObj.FZero = ((parentObj.registersHL & 0x2000) == 0);
+ }
+ //BIT 5, L
+ //#0x6D:
+ ,function (parentObj) {
+ parentObj.FHalfCarry = true;
+ parentObj.FSubtract = false;
+ parentObj.FZero = ((parentObj.registersHL & 0x0020) == 0);
+ }
+ //BIT 5, (HL)
+ //#0x6E:
+ ,function (parentObj) {
+ parentObj.FHalfCarry = true;
+ parentObj.FSubtract = false;
+ parentObj.FZero = ((parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL) & 0x20) == 0);
+ }
+ //BIT 5, A
+ //#0x6F:
+ ,function (parentObj) {
+ parentObj.FHalfCarry = true;
+ parentObj.FSubtract = false;
+ parentObj.FZero = ((parentObj.registerA & 0x20) == 0);
+ }
+ //BIT 6, B
+ //#0x70:
+ ,function (parentObj) {
+ parentObj.FHalfCarry = true;
+ parentObj.FSubtract = false;
+ parentObj.FZero = ((parentObj.registerB & 0x40) == 0);
+ }
+ //BIT 6, C
+ //#0x71:
+ ,function (parentObj) {
+ parentObj.FHalfCarry = true;
+ parentObj.FSubtract = false;
+ parentObj.FZero = ((parentObj.registerC & 0x40) == 0);
+ }
+ //BIT 6, D
+ //#0x72:
+ ,function (parentObj) {
+ parentObj.FHalfCarry = true;
+ parentObj.FSubtract = false;
+ parentObj.FZero = ((parentObj.registerD & 0x40) == 0);
+ }
+ //BIT 6, E
+ //#0x73:
+ ,function (parentObj) {
+ parentObj.FHalfCarry = true;
+ parentObj.FSubtract = false;
+ parentObj.FZero = ((parentObj.registerE & 0x40) == 0);
+ }
+ //BIT 6, H
+ //#0x74:
+ ,function (parentObj) {
+ parentObj.FHalfCarry = true;
+ parentObj.FSubtract = false;
+ parentObj.FZero = ((parentObj.registersHL & 0x4000) == 0);
+ }
+ //BIT 6, L
+ //#0x75:
+ ,function (parentObj) {
+ parentObj.FHalfCarry = true;
+ parentObj.FSubtract = false;
+ parentObj.FZero = ((parentObj.registersHL & 0x0040) == 0);
+ }
+ //BIT 6, (HL)
+ //#0x76:
+ ,function (parentObj) {
+ parentObj.FHalfCarry = true;
+ parentObj.FSubtract = false;
+ parentObj.FZero = ((parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL) & 0x40) == 0);
+ }
+ //BIT 6, A
+ //#0x77:
+ ,function (parentObj) {
+ parentObj.FHalfCarry = true;
+ parentObj.FSubtract = false;
+ parentObj.FZero = ((parentObj.registerA & 0x40) == 0);
+ }
+ //BIT 7, B
+ //#0x78:
+ ,function (parentObj) {
+ parentObj.FHalfCarry = true;
+ parentObj.FSubtract = false;
+ parentObj.FZero = ((parentObj.registerB & 0x80) == 0);
+ }
+ //BIT 7, C
+ //#0x79:
+ ,function (parentObj) {
+ parentObj.FHalfCarry = true;
+ parentObj.FSubtract = false;
+ parentObj.FZero = ((parentObj.registerC & 0x80) == 0);
+ }
+ //BIT 7, D
+ //#0x7A:
+ ,function (parentObj) {
+ parentObj.FHalfCarry = true;
+ parentObj.FSubtract = false;
+ parentObj.FZero = ((parentObj.registerD & 0x80) == 0);
+ }
+ //BIT 7, E
+ //#0x7B:
+ ,function (parentObj) {
+ parentObj.FHalfCarry = true;
+ parentObj.FSubtract = false;
+ parentObj.FZero = ((parentObj.registerE & 0x80) == 0);
+ }
+ //BIT 7, H
+ //#0x7C:
+ ,function (parentObj) {
+ parentObj.FHalfCarry = true;
+ parentObj.FSubtract = false;
+ parentObj.FZero = ((parentObj.registersHL & 0x8000) == 0);
+ }
+ //BIT 7, L
+ //#0x7D:
+ ,function (parentObj) {
+ parentObj.FHalfCarry = true;
+ parentObj.FSubtract = false;
+ parentObj.FZero = ((parentObj.registersHL & 0x0080) == 0);
+ }
+ //BIT 7, (HL)
+ //#0x7E:
+ ,function (parentObj) {
+ parentObj.FHalfCarry = true;
+ parentObj.FSubtract = false;
+ parentObj.FZero = ((parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL) & 0x80) == 0);
+ }
+ //BIT 7, A
+ //#0x7F:
+ ,function (parentObj) {
+ parentObj.FHalfCarry = true;
+ parentObj.FSubtract = false;
+ parentObj.FZero = ((parentObj.registerA & 0x80) == 0);
+ }
+ //RES 0, B
+ //#0x80:
+ ,function (parentObj) {
+ parentObj.registerB &= 0xFE;
+ }
+ //RES 0, C
+ //#0x81:
+ ,function (parentObj) {
+ parentObj.registerC &= 0xFE;
+ }
+ //RES 0, D
+ //#0x82:
+ ,function (parentObj) {
+ parentObj.registerD &= 0xFE;
+ }
+ //RES 0, E
+ //#0x83:
+ ,function (parentObj) {
+ parentObj.registerE &= 0xFE;
+ }
+ //RES 0, H
+ //#0x84:
+ ,function (parentObj) {
+ parentObj.registersHL &= 0xFEFF;
+ }
+ //RES 0, L
+ //#0x85:
+ ,function (parentObj) {
+ parentObj.registersHL &= 0xFFFE;
+ }
+ //RES 0, (HL)
+ //#0x86:
+ ,function (parentObj) {
+ parentObj.memoryWriter[parentObj.registersHL](parentObj, parentObj.registersHL, parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL) & 0xFE);
+ }
+ //RES 0, A
+ //#0x87:
+ ,function (parentObj) {
+ parentObj.registerA &= 0xFE;
+ }
+ //RES 1, B
+ //#0x88:
+ ,function (parentObj) {
+ parentObj.registerB &= 0xFD;
+ }
+ //RES 1, C
+ //#0x89:
+ ,function (parentObj) {
+ parentObj.registerC &= 0xFD;
+ }
+ //RES 1, D
+ //#0x8A:
+ ,function (parentObj) {
+ parentObj.registerD &= 0xFD;
+ }
+ //RES 1, E
+ //#0x8B:
+ ,function (parentObj) {
+ parentObj.registerE &= 0xFD;
+ }
+ //RES 1, H
+ //#0x8C:
+ ,function (parentObj) {
+ parentObj.registersHL &= 0xFDFF;
+ }
+ //RES 1, L
+ //#0x8D:
+ ,function (parentObj) {
+ parentObj.registersHL &= 0xFFFD;
+ }
+ //RES 1, (HL)
+ //#0x8E:
+ ,function (parentObj) {
+ parentObj.memoryWriter[parentObj.registersHL](parentObj, parentObj.registersHL, parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL) & 0xFD);
+ }
+ //RES 1, A
+ //#0x8F:
+ ,function (parentObj) {
+ parentObj.registerA &= 0xFD;
+ }
+ //RES 2, B
+ //#0x90:
+ ,function (parentObj) {
+ parentObj.registerB &= 0xFB;
+ }
+ //RES 2, C
+ //#0x91:
+ ,function (parentObj) {
+ parentObj.registerC &= 0xFB;
+ }
+ //RES 2, D
+ //#0x92:
+ ,function (parentObj) {
+ parentObj.registerD &= 0xFB;
+ }
+ //RES 2, E
+ //#0x93:
+ ,function (parentObj) {
+ parentObj.registerE &= 0xFB;
+ }
+ //RES 2, H
+ //#0x94:
+ ,function (parentObj) {
+ parentObj.registersHL &= 0xFBFF;
+ }
+ //RES 2, L
+ //#0x95:
+ ,function (parentObj) {
+ parentObj.registersHL &= 0xFFFB;
+ }
+ //RES 2, (HL)
+ //#0x96:
+ ,function (parentObj) {
+ parentObj.memoryWriter[parentObj.registersHL](parentObj, parentObj.registersHL, parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL) & 0xFB);
+ }
+ //RES 2, A
+ //#0x97:
+ ,function (parentObj) {
+ parentObj.registerA &= 0xFB;
+ }
+ //RES 3, B
+ //#0x98:
+ ,function (parentObj) {
+ parentObj.registerB &= 0xF7;
+ }
+ //RES 3, C
+ //#0x99:
+ ,function (parentObj) {
+ parentObj.registerC &= 0xF7;
+ }
+ //RES 3, D
+ //#0x9A:
+ ,function (parentObj) {
+ parentObj.registerD &= 0xF7;
+ }
+ //RES 3, E
+ //#0x9B:
+ ,function (parentObj) {
+ parentObj.registerE &= 0xF7;
+ }
+ //RES 3, H
+ //#0x9C:
+ ,function (parentObj) {
+ parentObj.registersHL &= 0xF7FF;
+ }
+ //RES 3, L
+ //#0x9D:
+ ,function (parentObj) {
+ parentObj.registersHL &= 0xFFF7;
+ }
+ //RES 3, (HL)
+ //#0x9E:
+ ,function (parentObj) {
+ parentObj.memoryWriter[parentObj.registersHL](parentObj, parentObj.registersHL, parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL) & 0xF7);
+ }
+ //RES 3, A
+ //#0x9F:
+ ,function (parentObj) {
+ parentObj.registerA &= 0xF7;
+ }
+ //RES 3, B
+ //#0xA0:
+ ,function (parentObj) {
+ parentObj.registerB &= 0xEF;
+ }
+ //RES 4, C
+ //#0xA1:
+ ,function (parentObj) {
+ parentObj.registerC &= 0xEF;
+ }
+ //RES 4, D
+ //#0xA2:
+ ,function (parentObj) {
+ parentObj.registerD &= 0xEF;
+ }
+ //RES 4, E
+ //#0xA3:
+ ,function (parentObj) {
+ parentObj.registerE &= 0xEF;
+ }
+ //RES 4, H
+ //#0xA4:
+ ,function (parentObj) {
+ parentObj.registersHL &= 0xEFFF;
+ }
+ //RES 4, L
+ //#0xA5:
+ ,function (parentObj) {
+ parentObj.registersHL &= 0xFFEF;
+ }
+ //RES 4, (HL)
+ //#0xA6:
+ ,function (parentObj) {
+ parentObj.memoryWriter[parentObj.registersHL](parentObj, parentObj.registersHL, parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL) & 0xEF);
+ }
+ //RES 4, A
+ //#0xA7:
+ ,function (parentObj) {
+ parentObj.registerA &= 0xEF;
+ }
+ //RES 5, B
+ //#0xA8:
+ ,function (parentObj) {
+ parentObj.registerB &= 0xDF;
+ }
+ //RES 5, C
+ //#0xA9:
+ ,function (parentObj) {
+ parentObj.registerC &= 0xDF;
+ }
+ //RES 5, D
+ //#0xAA:
+ ,function (parentObj) {
+ parentObj.registerD &= 0xDF;
+ }
+ //RES 5, E
+ //#0xAB:
+ ,function (parentObj) {
+ parentObj.registerE &= 0xDF;
+ }
+ //RES 5, H
+ //#0xAC:
+ ,function (parentObj) {
+ parentObj.registersHL &= 0xDFFF;
+ }
+ //RES 5, L
+ //#0xAD:
+ ,function (parentObj) {
+ parentObj.registersHL &= 0xFFDF;
+ }
+ //RES 5, (HL)
+ //#0xAE:
+ ,function (parentObj) {
+ parentObj.memoryWriter[parentObj.registersHL](parentObj, parentObj.registersHL, parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL) & 0xDF);
+ }
+ //RES 5, A
+ //#0xAF:
+ ,function (parentObj) {
+ parentObj.registerA &= 0xDF;
+ }
+ //RES 6, B
+ //#0xB0:
+ ,function (parentObj) {
+ parentObj.registerB &= 0xBF;
+ }
+ //RES 6, C
+ //#0xB1:
+ ,function (parentObj) {
+ parentObj.registerC &= 0xBF;
+ }
+ //RES 6, D
+ //#0xB2:
+ ,function (parentObj) {
+ parentObj.registerD &= 0xBF;
+ }
+ //RES 6, E
+ //#0xB3:
+ ,function (parentObj) {
+ parentObj.registerE &= 0xBF;
+ }
+ //RES 6, H
+ //#0xB4:
+ ,function (parentObj) {
+ parentObj.registersHL &= 0xBFFF;
+ }
+ //RES 6, L
+ //#0xB5:
+ ,function (parentObj) {
+ parentObj.registersHL &= 0xFFBF;
+ }
+ //RES 6, (HL)
+ //#0xB6:
+ ,function (parentObj) {
+ parentObj.memoryWriter[parentObj.registersHL](parentObj, parentObj.registersHL, parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL) & 0xBF);
+ }
+ //RES 6, A
+ //#0xB7:
+ ,function (parentObj) {
+ parentObj.registerA &= 0xBF;
+ }
+ //RES 7, B
+ //#0xB8:
+ ,function (parentObj) {
+ parentObj.registerB &= 0x7F;
+ }
+ //RES 7, C
+ //#0xB9:
+ ,function (parentObj) {
+ parentObj.registerC &= 0x7F;
+ }
+ //RES 7, D
+ //#0xBA:
+ ,function (parentObj) {
+ parentObj.registerD &= 0x7F;
+ }
+ //RES 7, E
+ //#0xBB:
+ ,function (parentObj) {
+ parentObj.registerE &= 0x7F;
+ }
+ //RES 7, H
+ //#0xBC:
+ ,function (parentObj) {
+ parentObj.registersHL &= 0x7FFF;
+ }
+ //RES 7, L
+ //#0xBD:
+ ,function (parentObj) {
+ parentObj.registersHL &= 0xFF7F;
+ }
+ //RES 7, (HL)
+ //#0xBE:
+ ,function (parentObj) {
+ parentObj.memoryWriter[parentObj.registersHL](parentObj, parentObj.registersHL, parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL) & 0x7F);
+ }
+ //RES 7, A
+ //#0xBF:
+ ,function (parentObj) {
+ parentObj.registerA &= 0x7F;
+ }
+ //SET 0, B
+ //#0xC0:
+ ,function (parentObj) {
+ parentObj.registerB |= 0x01;
+ }
+ //SET 0, C
+ //#0xC1:
+ ,function (parentObj) {
+ parentObj.registerC |= 0x01;
+ }
+ //SET 0, D
+ //#0xC2:
+ ,function (parentObj) {
+ parentObj.registerD |= 0x01;
+ }
+ //SET 0, E
+ //#0xC3:
+ ,function (parentObj) {
+ parentObj.registerE |= 0x01;
+ }
+ //SET 0, H
+ //#0xC4:
+ ,function (parentObj) {
+ parentObj.registersHL |= 0x0100;
+ }
+ //SET 0, L
+ //#0xC5:
+ ,function (parentObj) {
+ parentObj.registersHL |= 0x01;
+ }
+ //SET 0, (HL)
+ //#0xC6:
+ ,function (parentObj) {
+ parentObj.memoryWriter[parentObj.registersHL](parentObj, parentObj.registersHL, parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL) | 0x01);
+ }
+ //SET 0, A
+ //#0xC7:
+ ,function (parentObj) {
+ parentObj.registerA |= 0x01;
+ }
+ //SET 1, B
+ //#0xC8:
+ ,function (parentObj) {
+ parentObj.registerB |= 0x02;
+ }
+ //SET 1, C
+ //#0xC9:
+ ,function (parentObj) {
+ parentObj.registerC |= 0x02;
+ }
+ //SET 1, D
+ //#0xCA:
+ ,function (parentObj) {
+ parentObj.registerD |= 0x02;
+ }
+ //SET 1, E
+ //#0xCB:
+ ,function (parentObj) {
+ parentObj.registerE |= 0x02;
+ }
+ //SET 1, H
+ //#0xCC:
+ ,function (parentObj) {
+ parentObj.registersHL |= 0x0200;
+ }
+ //SET 1, L
+ //#0xCD:
+ ,function (parentObj) {
+ parentObj.registersHL |= 0x02;
+ }
+ //SET 1, (HL)
+ //#0xCE:
+ ,function (parentObj) {
+ parentObj.memoryWriter[parentObj.registersHL](parentObj, parentObj.registersHL, parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL) | 0x02);
+ }
+ //SET 1, A
+ //#0xCF:
+ ,function (parentObj) {
+ parentObj.registerA |= 0x02;
+ }
+ //SET 2, B
+ //#0xD0:
+ ,function (parentObj) {
+ parentObj.registerB |= 0x04;
+ }
+ //SET 2, C
+ //#0xD1:
+ ,function (parentObj) {
+ parentObj.registerC |= 0x04;
+ }
+ //SET 2, D
+ //#0xD2:
+ ,function (parentObj) {
+ parentObj.registerD |= 0x04;
+ }
+ //SET 2, E
+ //#0xD3:
+ ,function (parentObj) {
+ parentObj.registerE |= 0x04;
+ }
+ //SET 2, H
+ //#0xD4:
+ ,function (parentObj) {
+ parentObj.registersHL |= 0x0400;
+ }
+ //SET 2, L
+ //#0xD5:
+ ,function (parentObj) {
+ parentObj.registersHL |= 0x04;
+ }
+ //SET 2, (HL)
+ //#0xD6:
+ ,function (parentObj) {
+ parentObj.memoryWriter[parentObj.registersHL](parentObj, parentObj.registersHL, parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL) | 0x04);
+ }
+ //SET 2, A
+ //#0xD7:
+ ,function (parentObj) {
+ parentObj.registerA |= 0x04;
+ }
+ //SET 3, B
+ //#0xD8:
+ ,function (parentObj) {
+ parentObj.registerB |= 0x08;
+ }
+ //SET 3, C
+ //#0xD9:
+ ,function (parentObj) {
+ parentObj.registerC |= 0x08;
+ }
+ //SET 3, D
+ //#0xDA:
+ ,function (parentObj) {
+ parentObj.registerD |= 0x08;
+ }
+ //SET 3, E
+ //#0xDB:
+ ,function (parentObj) {
+ parentObj.registerE |= 0x08;
+ }
+ //SET 3, H
+ //#0xDC:
+ ,function (parentObj) {
+ parentObj.registersHL |= 0x0800;
+ }
+ //SET 3, L
+ //#0xDD:
+ ,function (parentObj) {
+ parentObj.registersHL |= 0x08;
+ }
+ //SET 3, (HL)
+ //#0xDE:
+ ,function (parentObj) {
+ parentObj.memoryWriter[parentObj.registersHL](parentObj, parentObj.registersHL, parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL) | 0x08);
+ }
+ //SET 3, A
+ //#0xDF:
+ ,function (parentObj) {
+ parentObj.registerA |= 0x08;
+ }
+ //SET 4, B
+ //#0xE0:
+ ,function (parentObj) {
+ parentObj.registerB |= 0x10;
+ }
+ //SET 4, C
+ //#0xE1:
+ ,function (parentObj) {
+ parentObj.registerC |= 0x10;
+ }
+ //SET 4, D
+ //#0xE2:
+ ,function (parentObj) {
+ parentObj.registerD |= 0x10;
+ }
+ //SET 4, E
+ //#0xE3:
+ ,function (parentObj) {
+ parentObj.registerE |= 0x10;
+ }
+ //SET 4, H
+ //#0xE4:
+ ,function (parentObj) {
+ parentObj.registersHL |= 0x1000;
+ }
+ //SET 4, L
+ //#0xE5:
+ ,function (parentObj) {
+ parentObj.registersHL |= 0x10;
+ }
+ //SET 4, (HL)
+ //#0xE6:
+ ,function (parentObj) {
+ parentObj.memoryWriter[parentObj.registersHL](parentObj, parentObj.registersHL, parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL) | 0x10);
+ }
+ //SET 4, A
+ //#0xE7:
+ ,function (parentObj) {
+ parentObj.registerA |= 0x10;
+ }
+ //SET 5, B
+ //#0xE8:
+ ,function (parentObj) {
+ parentObj.registerB |= 0x20;
+ }
+ //SET 5, C
+ //#0xE9:
+ ,function (parentObj) {
+ parentObj.registerC |= 0x20;
+ }
+ //SET 5, D
+ //#0xEA:
+ ,function (parentObj) {
+ parentObj.registerD |= 0x20;
+ }
+ //SET 5, E
+ //#0xEB:
+ ,function (parentObj) {
+ parentObj.registerE |= 0x20;
+ }
+ //SET 5, H
+ //#0xEC:
+ ,function (parentObj) {
+ parentObj.registersHL |= 0x2000;
+ }
+ //SET 5, L
+ //#0xED:
+ ,function (parentObj) {
+ parentObj.registersHL |= 0x20;
+ }
+ //SET 5, (HL)
+ //#0xEE:
+ ,function (parentObj) {
+ parentObj.memoryWriter[parentObj.registersHL](parentObj, parentObj.registersHL, parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL) | 0x20);
+ }
+ //SET 5, A
+ //#0xEF:
+ ,function (parentObj) {
+ parentObj.registerA |= 0x20;
+ }
+ //SET 6, B
+ //#0xF0:
+ ,function (parentObj) {
+ parentObj.registerB |= 0x40;
+ }
+ //SET 6, C
+ //#0xF1:
+ ,function (parentObj) {
+ parentObj.registerC |= 0x40;
+ }
+ //SET 6, D
+ //#0xF2:
+ ,function (parentObj) {
+ parentObj.registerD |= 0x40;
+ }
+ //SET 6, E
+ //#0xF3:
+ ,function (parentObj) {
+ parentObj.registerE |= 0x40;
+ }
+ //SET 6, H
+ //#0xF4:
+ ,function (parentObj) {
+ parentObj.registersHL |= 0x4000;
+ }
+ //SET 6, L
+ //#0xF5:
+ ,function (parentObj) {
+ parentObj.registersHL |= 0x40;
+ }
+ //SET 6, (HL)
+ //#0xF6:
+ ,function (parentObj) {
+ parentObj.memoryWriter[parentObj.registersHL](parentObj, parentObj.registersHL, parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL) | 0x40);
+ }
+ //SET 6, A
+ //#0xF7:
+ ,function (parentObj) {
+ parentObj.registerA |= 0x40;
+ }
+ //SET 7, B
+ //#0xF8:
+ ,function (parentObj) {
+ parentObj.registerB |= 0x80;
+ }
+ //SET 7, C
+ //#0xF9:
+ ,function (parentObj) {
+ parentObj.registerC |= 0x80;
+ }
+ //SET 7, D
+ //#0xFA:
+ ,function (parentObj) {
+ parentObj.registerD |= 0x80;
+ }
+ //SET 7, E
+ //#0xFB:
+ ,function (parentObj) {
+ parentObj.registerE |= 0x80;
+ }
+ //SET 7, H
+ //#0xFC:
+ ,function (parentObj) {
+ parentObj.registersHL |= 0x8000;
+ }
+ //SET 7, L
+ //#0xFD:
+ ,function (parentObj) {
+ parentObj.registersHL |= 0x80;
+ }
+ //SET 7, (HL)
+ //#0xFE:
+ ,function (parentObj) {
+ parentObj.memoryWriter[parentObj.registersHL](parentObj, parentObj.registersHL, parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL) | 0x80);
+ }
+ //SET 7, A
+ //#0xFF:
+ ,function (parentObj) {
+ parentObj.registerA |= 0x80;
+ }
+];
+GameBoyCore.prototype.TICKTable = [ //Number of machine cycles for each instruction:
+/* 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F*/
+ 4, 12, 8, 8, 4, 4, 8, 4, 20, 8, 8, 8, 4, 4, 8, 4, //0
+ 4, 12, 8, 8, 4, 4, 8, 4, 12, 8, 8, 8, 4, 4, 8, 4, //1
+ 8, 12, 8, 8, 4, 4, 8, 4, 8, 8, 8, 8, 4, 4, 8, 4, //2
+ 8, 12, 8, 8, 12, 12, 12, 4, 8, 8, 8, 8, 4, 4, 8, 4, //3
+
+ 4, 4, 4, 4, 4, 4, 8, 4, 4, 4, 4, 4, 4, 4, 8, 4, //4
+ 4, 4, 4, 4, 4, 4, 8, 4, 4, 4, 4, 4, 4, 4, 8, 4, //5
+ 4, 4, 4, 4, 4, 4, 8, 4, 4, 4, 4, 4, 4, 4, 8, 4, //6
+ 8, 8, 8, 8, 8, 8, 4, 8, 4, 4, 4, 4, 4, 4, 8, 4, //7
+
+ 4, 4, 4, 4, 4, 4, 8, 4, 4, 4, 4, 4, 4, 4, 8, 4, //8
+ 4, 4, 4, 4, 4, 4, 8, 4, 4, 4, 4, 4, 4, 4, 8, 4, //9
+ 4, 4, 4, 4, 4, 4, 8, 4, 4, 4, 4, 4, 4, 4, 8, 4, //A
+ 4, 4, 4, 4, 4, 4, 8, 4, 4, 4, 4, 4, 4, 4, 8, 4, //B
+
+ 8, 12, 12, 16, 12, 16, 8, 16, 8, 16, 12, 0, 12, 24, 8, 16, //C
+ 8, 12, 12, 4, 12, 16, 8, 16, 8, 16, 12, 4, 12, 4, 8, 16, //D
+ 12, 12, 8, 4, 4, 16, 8, 16, 16, 4, 16, 4, 4, 4, 8, 16, //E
+ 12, 12, 8, 4, 4, 16, 8, 16, 12, 8, 16, 4, 0, 4, 8, 16 //F
+];
+GameBoyCore.prototype.SecondaryTICKTable = [ //Number of machine cycles for each 0xCBXX instruction:
+/* 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F*/
+ 8, 8, 8, 8, 8, 8, 16, 8, 8, 8, 8, 8, 8, 8, 16, 8, //0
+ 8, 8, 8, 8, 8, 8, 16, 8, 8, 8, 8, 8, 8, 8, 16, 8, //1
+ 8, 8, 8, 8, 8, 8, 16, 8, 8, 8, 8, 8, 8, 8, 16, 8, //2
+ 8, 8, 8, 8, 8, 8, 16, 8, 8, 8, 8, 8, 8, 8, 16, 8, //3
+
+ 8, 8, 8, 8, 8, 8, 12, 8, 8, 8, 8, 8, 8, 8, 12, 8, //4
+ 8, 8, 8, 8, 8, 8, 12, 8, 8, 8, 8, 8, 8, 8, 12, 8, //5
+ 8, 8, 8, 8, 8, 8, 12, 8, 8, 8, 8, 8, 8, 8, 12, 8, //6
+ 8, 8, 8, 8, 8, 8, 12, 8, 8, 8, 8, 8, 8, 8, 12, 8, //7
+
+ 8, 8, 8, 8, 8, 8, 16, 8, 8, 8, 8, 8, 8, 8, 16, 8, //8
+ 8, 8, 8, 8, 8, 8, 16, 8, 8, 8, 8, 8, 8, 8, 16, 8, //9
+ 8, 8, 8, 8, 8, 8, 16, 8, 8, 8, 8, 8, 8, 8, 16, 8, //A
+ 8, 8, 8, 8, 8, 8, 16, 8, 8, 8, 8, 8, 8, 8, 16, 8, //B
+
+ 8, 8, 8, 8, 8, 8, 16, 8, 8, 8, 8, 8, 8, 8, 16, 8, //C
+ 8, 8, 8, 8, 8, 8, 16, 8, 8, 8, 8, 8, 8, 8, 16, 8, //D
+ 8, 8, 8, 8, 8, 8, 16, 8, 8, 8, 8, 8, 8, 8, 16, 8, //E
+ 8, 8, 8, 8, 8, 8, 16, 8, 8, 8, 8, 8, 8, 8, 16, 8 //F
+];
+GameBoyCore.prototype.saveSRAMState = function () {
+ if (!this.cBATT || this.MBCRam.length == 0) {
+ //No battery backup...
+ return [];
+ }
+ else {
+ //Return the MBC RAM for backup...
+ return this.fromTypedArray(this.MBCRam);
+ }
+}
+GameBoyCore.prototype.saveRTCState = function () {
+ if (!this.cTIMER) {
+ //No battery backup...
+ return [];
+ }
+ else {
+ //Return the MBC RAM for backup...
+ return [
+ this.lastIteration,
+ this.RTCisLatched,
+ this.latchedSeconds,
+ this.latchedMinutes,
+ this.latchedHours,
+ this.latchedLDays,
+ this.latchedHDays,
+ this.RTCSeconds,
+ this.RTCMinutes,
+ this.RTCHours,
+ this.RTCDays,
+ this.RTCDayOverFlow,
+ this.RTCHALT
+ ];
+ }
+}
+GameBoyCore.prototype.saveState = function () {
+ return [
+ this.fromTypedArray(this.ROM),
+ this.inBootstrap,
+ this.registerA,
+ this.FZero,
+ this.FSubtract,
+ this.FHalfCarry,
+ this.FCarry,
+ this.registerB,
+ this.registerC,
+ this.registerD,
+ this.registerE,
+ this.registersHL,
+ this.stackPointer,
+ this.programCounter,
+ this.halt,
+ this.IME,
+ this.hdmaRunning,
+ this.CPUTicks,
+ this.doubleSpeedShifter,
+ this.fromTypedArray(this.memory),
+ this.fromTypedArray(this.MBCRam),
+ this.fromTypedArray(this.VRAM),
+ this.currVRAMBank,
+ this.fromTypedArray(this.GBCMemory),
+ this.MBC1Mode,
+ this.MBCRAMBanksEnabled,
+ this.currMBCRAMBank,
+ this.currMBCRAMBankPosition,
+ this.cGBC,
+ this.gbcRamBank,
+ this.gbcRamBankPosition,
+ this.ROMBank1offs,
+ this.currentROMBank,
+ this.cartridgeType,
+ this.name,
+ this.gameCode,
+ this.modeSTAT,
+ this.LYCMatchTriggerSTAT,
+ this.mode2TriggerSTAT,
+ this.mode1TriggerSTAT,
+ this.mode0TriggerSTAT,
+ this.LCDisOn,
+ this.gfxWindowCHRBankPosition,
+ this.gfxWindowDisplay,
+ this.gfxSpriteShow,
+ this.gfxSpriteNormalHeight,
+ this.gfxBackgroundCHRBankPosition,
+ this.gfxBackgroundBankOffset,
+ this.TIMAEnabled,
+ this.DIVTicks,
+ this.LCDTicks,
+ this.timerTicks,
+ this.TACClocker,
+ this.serialTimer,
+ this.serialShiftTimer,
+ this.serialShiftTimerAllocated,
+ this.IRQEnableDelay,
+ this.lastIteration,
+ this.cMBC1,
+ this.cMBC2,
+ this.cMBC3,
+ this.cMBC5,
+ this.cMBC7,
+ this.cSRAM,
+ this.cMMMO1,
+ this.cRUMBLE,
+ this.cCamera,
+ this.cTAMA5,
+ this.cHuC3,
+ this.cHuC1,
+ this.drewBlank,
+ this.fromTypedArray(this.frameBuffer),
+ this.bgEnabled,
+ this.BGPriorityEnabled,
+ this.channel1FrequencyTracker,
+ this.channel1FrequencyCounter,
+ this.channel1totalLength,
+ this.channel1envelopeVolume,
+ this.channel1envelopeType,
+ this.channel1envelopeSweeps,
+ this.channel1envelopeSweepsLast,
+ this.channel1consecutive,
+ this.channel1frequency,
+ this.channel1SweepFault,
+ this.channel1ShadowFrequency,
+ this.channel1timeSweep,
+ this.channel1lastTimeSweep,
+ this.channel1numSweep,
+ this.channel1frequencySweepDivider,
+ this.channel1decreaseSweep,
+ this.channel2FrequencyTracker,
+ this.channel2FrequencyCounter,
+ this.channel2totalLength,
+ this.channel2envelopeVolume,
+ this.channel2envelopeType,
+ this.channel2envelopeSweeps,
+ this.channel2envelopeSweepsLast,
+ this.channel2consecutive,
+ this.channel2frequency,
+ this.channel3canPlay,
+ this.channel3totalLength,
+ this.channel3patternType,
+ this.channel3frequency,
+ this.channel3consecutive,
+ this.fromTypedArray(this.channel3PCM),
+ this.channel4FrequencyPeriod,
+ this.channel4lastSampleLookup,
+ this.channel4totalLength,
+ this.channel4envelopeVolume,
+ this.channel4currentVolume,
+ this.channel4envelopeType,
+ this.channel4envelopeSweeps,
+ this.channel4envelopeSweepsLast,
+ this.channel4consecutive,
+ this.channel4BitRange,
+ this.soundMasterEnabled,
+ this.VinLeftChannelMasterVolume,
+ this.VinRightChannelMasterVolume,
+ this.leftChannel1,
+ this.leftChannel2,
+ this.leftChannel3,
+ this.leftChannel4,
+ this.rightChannel1,
+ this.rightChannel2,
+ this.rightChannel3,
+ this.rightChannel4,
+ this.channel1currentSampleLeft,
+ this.channel1currentSampleRight,
+ this.channel2currentSampleLeft,
+ this.channel2currentSampleRight,
+ this.channel3currentSampleLeft,
+ this.channel3currentSampleRight,
+ this.channel4currentSampleLeft,
+ this.channel4currentSampleRight,
+ this.channel1currentSampleLeftSecondary,
+ this.channel1currentSampleRightSecondary,
+ this.channel2currentSampleLeftSecondary,
+ this.channel2currentSampleRightSecondary,
+ this.channel3currentSampleLeftSecondary,
+ this.channel3currentSampleRightSecondary,
+ this.channel4currentSampleLeftSecondary,
+ this.channel4currentSampleRightSecondary,
+ this.channel1currentSampleLeftTrimary,
+ this.channel1currentSampleRightTrimary,
+ this.channel2currentSampleLeftTrimary,
+ this.channel2currentSampleRightTrimary,
+ this.mixerOutputCache,
+ this.channel1DutyTracker,
+ this.channel1CachedDuty,
+ this.channel2DutyTracker,
+ this.channel2CachedDuty,
+ this.channel1Enabled,
+ this.channel2Enabled,
+ this.channel3Enabled,
+ this.channel4Enabled,
+ this.sequencerClocks,
+ this.sequencePosition,
+ this.channel3Counter,
+ this.channel4Counter,
+ this.cachedChannel3Sample,
+ this.cachedChannel4Sample,
+ this.channel3FrequencyPeriod,
+ this.channel3lastSampleLookup,
+ this.actualScanLine,
+ this.lastUnrenderedLine,
+ this.queuedScanLines,
+ this.RTCisLatched,
+ this.latchedSeconds,
+ this.latchedMinutes,
+ this.latchedHours,
+ this.latchedLDays,
+ this.latchedHDays,
+ this.RTCSeconds,
+ this.RTCMinutes,
+ this.RTCHours,
+ this.RTCDays,
+ this.RTCDayOverFlow,
+ this.RTCHALT,
+ this.usedBootROM,
+ this.skipPCIncrement,
+ this.STATTracker,
+ this.gbcRamBankPositionECHO,
+ this.numRAMBanks,
+ this.windowY,
+ this.windowX,
+ this.fromTypedArray(this.gbcOBJRawPalette),
+ this.fromTypedArray(this.gbcBGRawPalette),
+ this.fromTypedArray(this.gbOBJPalette),
+ this.fromTypedArray(this.gbBGPalette),
+ this.fromTypedArray(this.gbcOBJPalette),
+ this.fromTypedArray(this.gbcBGPalette),
+ this.fromTypedArray(this.gbBGColorizedPalette),
+ this.fromTypedArray(this.gbOBJColorizedPalette),
+ this.fromTypedArray(this.cachedBGPaletteConversion),
+ this.fromTypedArray(this.cachedOBJPaletteConversion),
+ this.fromTypedArray(this.BGCHRBank1),
+ this.fromTypedArray(this.BGCHRBank2),
+ this.haltPostClocks,
+ this.interruptsRequested,
+ this.interruptsEnabled,
+ this.remainingClocks,
+ this.colorizedGBPalettes,
+ this.backgroundY,
+ this.backgroundX,
+ this.CPUStopped
+ ];
+}
+GameBoyCore.prototype.returnFromState = function (returnedFrom) {
+ var index = 0;
+ var state = returnedFrom.slice(0);
+ this.ROM = this.toTypedArray(state[index++], "uint8");
+ this.ROMBankEdge = Math.floor(this.ROM.length / 0x4000);
+ this.inBootstrap = state[index++];
+ this.registerA = state[index++];
+ this.FZero = state[index++];
+ this.FSubtract = state[index++];
+ this.FHalfCarry = state[index++];
+ this.FCarry = state[index++];
+ this.registerB = state[index++];
+ this.registerC = state[index++];
+ this.registerD = state[index++];
+ this.registerE = state[index++];
+ this.registersHL = state[index++];
+ this.stackPointer = state[index++];
+ this.programCounter = state[index++];
+ this.halt = state[index++];
+ this.IME = state[index++];
+ this.hdmaRunning = state[index++];
+ this.CPUTicks = state[index++];
+ this.doubleSpeedShifter = state[index++];
+ this.memory = this.toTypedArray(state[index++], "uint8");
+ this.MBCRam = this.toTypedArray(state[index++], "uint8");
+ this.VRAM = this.toTypedArray(state[index++], "uint8");
+ this.currVRAMBank = state[index++];
+ this.GBCMemory = this.toTypedArray(state[index++], "uint8");
+ this.MBC1Mode = state[index++];
+ this.MBCRAMBanksEnabled = state[index++];
+ this.currMBCRAMBank = state[index++];
+ this.currMBCRAMBankPosition = state[index++];
+ this.cGBC = state[index++];
+ this.gbcRamBank = state[index++];
+ this.gbcRamBankPosition = state[index++];
+ this.ROMBank1offs = state[index++];
+ this.currentROMBank = state[index++];
+ this.cartridgeType = state[index++];
+ this.name = state[index++];
+ this.gameCode = state[index++];
+ this.modeSTAT = state[index++];
+ this.LYCMatchTriggerSTAT = state[index++];
+ this.mode2TriggerSTAT = state[index++];
+ this.mode1TriggerSTAT = state[index++];
+ this.mode0TriggerSTAT = state[index++];
+ this.LCDisOn = state[index++];
+ this.gfxWindowCHRBankPosition = state[index++];
+ this.gfxWindowDisplay = state[index++];
+ this.gfxSpriteShow = state[index++];
+ this.gfxSpriteNormalHeight = state[index++];
+ this.gfxBackgroundCHRBankPosition = state[index++];
+ this.gfxBackgroundBankOffset = state[index++];
+ this.TIMAEnabled = state[index++];
+ this.DIVTicks = state[index++];
+ this.LCDTicks = state[index++];
+ this.timerTicks = state[index++];
+ this.TACClocker = state[index++];
+ this.serialTimer = state[index++];
+ this.serialShiftTimer = state[index++];
+ this.serialShiftTimerAllocated = state[index++];
+ this.IRQEnableDelay = state[index++];
+ this.lastIteration = state[index++];
+ this.cMBC1 = state[index++];
+ this.cMBC2 = state[index++];
+ this.cMBC3 = state[index++];
+ this.cMBC5 = state[index++];
+ this.cMBC7 = state[index++];
+ this.cSRAM = state[index++];
+ this.cMMMO1 = state[index++];
+ this.cRUMBLE = state[index++];
+ this.cCamera = state[index++];
+ this.cTAMA5 = state[index++];
+ this.cHuC3 = state[index++];
+ this.cHuC1 = state[index++];
+ this.drewBlank = state[index++];
+ this.frameBuffer = this.toTypedArray(state[index++], "int32");
+ this.bgEnabled = state[index++];
+ this.BGPriorityEnabled = state[index++];
+ this.channel1FrequencyTracker = state[index++];
+ this.channel1FrequencyCounter = state[index++];
+ this.channel1totalLength = state[index++];
+ this.channel1envelopeVolume = state[index++];
+ this.channel1envelopeType = state[index++];
+ this.channel1envelopeSweeps = state[index++];
+ this.channel1envelopeSweepsLast = state[index++];
+ this.channel1consecutive = state[index++];
+ this.channel1frequency = state[index++];
+ this.channel1SweepFault = state[index++];
+ this.channel1ShadowFrequency = state[index++];
+ this.channel1timeSweep = state[index++];
+ this.channel1lastTimeSweep = state[index++];
+ this.channel1numSweep = state[index++];
+ this.channel1frequencySweepDivider = state[index++];
+ this.channel1decreaseSweep = state[index++];
+ this.channel2FrequencyTracker = state[index++];
+ this.channel2FrequencyCounter = state[index++];
+ this.channel2totalLength = state[index++];
+ this.channel2envelopeVolume = state[index++];
+ this.channel2envelopeType = state[index++];
+ this.channel2envelopeSweeps = state[index++];
+ this.channel2envelopeSweepsLast = state[index++];
+ this.channel2consecutive = state[index++];
+ this.channel2frequency = state[index++];
+ this.channel3canPlay = state[index++];
+ this.channel3totalLength = state[index++];
+ this.channel3patternType = state[index++];
+ this.channel3frequency = state[index++];
+ this.channel3consecutive = state[index++];
+ this.channel3PCM = this.toTypedArray(state[index++], "int8");
+ this.channel4FrequencyPeriod = state[index++];
+ this.channel4lastSampleLookup = state[index++];
+ this.channel4totalLength = state[index++];
+ this.channel4envelopeVolume = state[index++];
+ this.channel4currentVolume = state[index++];
+ this.channel4envelopeType = state[index++];
+ this.channel4envelopeSweeps = state[index++];
+ this.channel4envelopeSweepsLast = state[index++];
+ this.channel4consecutive = state[index++];
+ this.channel4BitRange = state[index++];
+ this.soundMasterEnabled = state[index++];
+ this.VinLeftChannelMasterVolume = state[index++];
+ this.VinRightChannelMasterVolume = state[index++];
+ this.leftChannel1 = state[index++];
+ this.leftChannel2 = state[index++];
+ this.leftChannel3 = state[index++];
+ this.leftChannel4 = state[index++];
+ this.rightChannel1 = state[index++];
+ this.rightChannel2 = state[index++];
+ this.rightChannel3 = state[index++];
+ this.rightChannel4 = state[index++];
+ this.channel1currentSampleLeft = state[index++];
+ this.channel1currentSampleRight = state[index++];
+ this.channel2currentSampleLeft = state[index++];
+ this.channel2currentSampleRight = state[index++];
+ this.channel3currentSampleLeft = state[index++];
+ this.channel3currentSampleRight = state[index++];
+ this.channel4currentSampleLeft = state[index++];
+ this.channel4currentSampleRight = state[index++];
+ this.channel1currentSampleLeftSecondary = state[index++];
+ this.channel1currentSampleRightSecondary = state[index++];
+ this.channel2currentSampleLeftSecondary = state[index++];
+ this.channel2currentSampleRightSecondary = state[index++];
+ this.channel3currentSampleLeftSecondary = state[index++];
+ this.channel3currentSampleRightSecondary = state[index++];
+ this.channel4currentSampleLeftSecondary = state[index++];
+ this.channel4currentSampleRightSecondary = state[index++];
+ this.channel1currentSampleLeftTrimary = state[index++];
+ this.channel1currentSampleRightTrimary = state[index++];
+ this.channel2currentSampleLeftTrimary = state[index++];
+ this.channel2currentSampleRightTrimary = state[index++];
+ this.mixerOutputCache = state[index++];
+ this.channel1DutyTracker = state[index++];
+ this.channel1CachedDuty = state[index++];
+ this.channel2DutyTracker = state[index++];
+ this.channel2CachedDuty = state[index++];
+ this.channel1Enabled = state[index++];
+ this.channel2Enabled = state[index++];
+ this.channel3Enabled = state[index++];
+ this.channel4Enabled = state[index++];
+ this.sequencerClocks = state[index++];
+ this.sequencePosition = state[index++];
+ this.channel3Counter = state[index++];
+ this.channel4Counter = state[index++];
+ this.cachedChannel3Sample = state[index++];
+ this.cachedChannel4Sample = state[index++];
+ this.channel3FrequencyPeriod = state[index++];
+ this.channel3lastSampleLookup = state[index++];
+ this.actualScanLine = state[index++];
+ this.lastUnrenderedLine = state[index++];
+ this.queuedScanLines = state[index++];
+ this.RTCisLatched = state[index++];
+ this.latchedSeconds = state[index++];
+ this.latchedMinutes = state[index++];
+ this.latchedHours = state[index++];
+ this.latchedLDays = state[index++];
+ this.latchedHDays = state[index++];
+ this.RTCSeconds = state[index++];
+ this.RTCMinutes = state[index++];
+ this.RTCHours = state[index++];
+ this.RTCDays = state[index++];
+ this.RTCDayOverFlow = state[index++];
+ this.RTCHALT = state[index++];
+ this.usedBootROM = state[index++];
+ this.skipPCIncrement = state[index++];
+ this.STATTracker = state[index++];
+ this.gbcRamBankPositionECHO = state[index++];
+ this.numRAMBanks = state[index++];
+ this.windowY = state[index++];
+ this.windowX = state[index++];
+ this.gbcOBJRawPalette = this.toTypedArray(state[index++], "uint8");
+ this.gbcBGRawPalette = this.toTypedArray(state[index++], "uint8");
+ this.gbOBJPalette = this.toTypedArray(state[index++], "int32");
+ this.gbBGPalette = this.toTypedArray(state[index++], "int32");
+ this.gbcOBJPalette = this.toTypedArray(state[index++], "int32");
+ this.gbcBGPalette = this.toTypedArray(state[index++], "int32");
+ this.gbBGColorizedPalette = this.toTypedArray(state[index++], "int32");
+ this.gbOBJColorizedPalette = this.toTypedArray(state[index++], "int32");
+ this.cachedBGPaletteConversion = this.toTypedArray(state[index++], "int32");
+ this.cachedOBJPaletteConversion = this.toTypedArray(state[index++], "int32");
+ this.BGCHRBank1 = this.toTypedArray(state[index++], "uint8");
+ this.BGCHRBank2 = this.toTypedArray(state[index++], "uint8");
+ this.haltPostClocks = state[index++];
+ this.interruptsRequested = state[index++];
+ this.interruptsEnabled = state[index++];
+ this.checkIRQMatching();
+ this.remainingClocks = state[index++];
+ this.colorizedGBPalettes = state[index++];
+ this.backgroundY = state[index++];
+ this.backgroundX = state[index++];
+ this.CPUStopped = state[index];
+ this.fromSaveState = true;
+ this.TICKTable = this.toTypedArray(this.TICKTable, "uint8");
+ this.SecondaryTICKTable = this.toTypedArray(this.SecondaryTICKTable, "uint8");
+ this.initializeReferencesFromSaveState();
+ this.memoryReadJumpCompile();
+ this.memoryWriteJumpCompile();
+ this.initLCD();
+ this.initSound();
+ this.noiseSampleTable = (this.channel4BitRange == 0x7FFF) ? this.LSFR15Table : this.LSFR7Table;
+ this.channel4VolumeShifter = (this.channel4BitRange == 0x7FFF) ? 15 : 7;
+}
+GameBoyCore.prototype.returnFromRTCState = function () {
+ if (typeof this.openRTC == "function" && this.cTIMER) {
+ var rtcData = this.openRTC(this.name);
+ var index = 0;
+ this.lastIteration = rtcData[index++];
+ this.RTCisLatched = rtcData[index++];
+ this.latchedSeconds = rtcData[index++];
+ this.latchedMinutes = rtcData[index++];
+ this.latchedHours = rtcData[index++];
+ this.latchedLDays = rtcData[index++];
+ this.latchedHDays = rtcData[index++];
+ this.RTCSeconds = rtcData[index++];
+ this.RTCMinutes = rtcData[index++];
+ this.RTCHours = rtcData[index++];
+ this.RTCDays = rtcData[index++];
+ this.RTCDayOverFlow = rtcData[index++];
+ this.RTCHALT = rtcData[index];
+ }
+}
+
+GameBoyCore.prototype.start = function () {
+ this.initMemory(); //Write the startup memory.
+ this.ROMLoad(); //Load the ROM into memory and get cartridge information from it.
+ this.initLCD(); //Initialize the graphics.
+ this.initSound(); //Sound object initialization.
+ this.run(); //Start the emulation.
+}
+GameBoyCore.prototype.initMemory = function () {
+ //Initialize the RAM:
+ this.memory = this.getTypedArray(0x10000, 0, "uint8");
+ this.frameBuffer = this.getTypedArray(23040, 0xF8F8F8, "int32");
+ this.BGCHRBank1 = this.getTypedArray(0x800, 0, "uint8");
+ this.TICKTable = this.toTypedArray(this.TICKTable, "uint8");
+ this.SecondaryTICKTable = this.toTypedArray(this.SecondaryTICKTable, "uint8");
+ this.channel3PCM = this.getTypedArray(0x20, 0, "int8");
+}
+GameBoyCore.prototype.generateCacheArray = function (tileAmount) {
+ var tileArray = [];
+ var tileNumber = 0;
+ while (tileNumber < tileAmount) {
+ tileArray[tileNumber++] = this.getTypedArray(64, 0, "uint8");
+ }
+ return tileArray;
+}
+GameBoyCore.prototype.initSkipBootstrap = function () {
+ //Fill in the boot ROM set register values
+ //Default values to the GB boot ROM values, then fill in the GBC boot ROM values after ROM loading
+ var index = 0xFF;
+ while (index >= 0) {
+ if (index >= 0x30 && index < 0x40) {
+ this.memoryWrite(0xFF00 | index, this.ffxxDump[index]);
+ }
+ else {
+ switch (index) {
+ case 0x00:
+ case 0x01:
+ case 0x02:
+ case 0x05:
+ case 0x07:
+ case 0x0F:
+ case 0xFF:
+ this.memoryWrite(0xFF00 | index, this.ffxxDump[index]);
+ break;
+ default:
+ this.memory[0xFF00 | index] = this.ffxxDump[index];
+ }
+ }
+ --index;
+ }
+ if (this.cGBC) {
+ this.memory[0xFF6C] = 0xFE;
+ this.memory[0xFF74] = 0xFE;
+ }
+ else {
+ this.memory[0xFF48] = 0xFF;
+ this.memory[0xFF49] = 0xFF;
+ this.memory[0xFF6C] = 0xFF;
+ this.memory[0xFF74] = 0xFF;
+ }
+ //Start as an unset device:
+ cout("Starting without the GBC boot ROM.", 0);
+ this.registerA = (this.cGBC) ? 0x11 : 0x1;
+ this.registerB = 0;
+ this.registerC = 0x13;
+ this.registerD = 0;
+ this.registerE = 0xD8;
+ this.FZero = true;
+ this.FSubtract = false;
+ this.FHalfCarry = true;
+ this.FCarry = true;
+ this.registersHL = 0x014D;
+ this.LCDCONTROL = this.LINECONTROL;
+ this.IME = false;
+ this.IRQLineMatched = 0;
+ this.interruptsRequested = 225;
+ this.interruptsEnabled = 0;
+ this.hdmaRunning = false;
+ this.CPUTicks = 12;
+ this.STATTracker = 0;
+ this.modeSTAT = 1;
+ this.spriteCount = 252;
+ this.LYCMatchTriggerSTAT = false;
+ this.mode2TriggerSTAT = false;
+ this.mode1TriggerSTAT = false;
+ this.mode0TriggerSTAT = false;
+ this.LCDisOn = true;
+ this.channel1FrequencyTracker = 0x2000;
+ this.channel1DutyTracker = 0;
+ this.channel1CachedDuty = this.dutyLookup[2];
+ this.channel1totalLength = 0;
+ this.channel1envelopeVolume = 0;
+ this.channel1envelopeType = false;
+ this.channel1envelopeSweeps = 0;
+ this.channel1envelopeSweepsLast = 0;
+ this.channel1consecutive = true;
+ this.channel1frequency = 1985;
+ this.channel1SweepFault = true;
+ this.channel1ShadowFrequency = 1985;
+ this.channel1timeSweep = 1;
+ this.channel1lastTimeSweep = 0;
+ this.channel1numSweep = 0;
+ this.channel1frequencySweepDivider = 0;
+ this.channel1decreaseSweep = false;
+ this.channel2FrequencyTracker = 0x2000;
+ this.channel2DutyTracker = 0;
+ this.channel2CachedDuty = this.dutyLookup[2];
+ this.channel2totalLength = 0;
+ this.channel2envelopeVolume = 0;
+ this.channel2envelopeType = false;
+ this.channel2envelopeSweeps = 0;
+ this.channel2envelopeSweepsLast = 0;
+ this.channel2consecutive = true;
+ this.channel2frequency = 0;
+ this.channel3canPlay = false;
+ this.channel3totalLength = 0;
+ this.channel3patternType = 4;
+ this.channel3frequency = 0;
+ this.channel3consecutive = true;
+ this.channel3Counter = 0x418;
+ this.channel4FrequencyPeriod = 8;
+ this.channel4totalLength = 0;
+ this.channel4envelopeVolume = 0;
+ this.channel4currentVolume = 0;
+ this.channel4envelopeType = false;
+ this.channel4envelopeSweeps = 0;
+ this.channel4envelopeSweepsLast = 0;
+ this.channel4consecutive = true;
+ this.channel4BitRange = 0x7FFF;
+ this.channel4VolumeShifter = 15;
+ this.channel1FrequencyCounter = 0x200;
+ this.channel2FrequencyCounter = 0x200;
+ this.channel3Counter = 0x800;
+ this.channel3FrequencyPeriod = 0x800;
+ this.channel3lastSampleLookup = 0;
+ this.channel4lastSampleLookup = 0;
+ this.VinLeftChannelMasterVolume = 1;
+ this.VinRightChannelMasterVolume = 1;
+ this.soundMasterEnabled = true;
+ this.leftChannel1 = true;
+ this.leftChannel2 = true;
+ this.leftChannel3 = true;
+ this.leftChannel4 = true;
+ this.rightChannel1 = true;
+ this.rightChannel2 = true;
+ this.rightChannel3 = false;
+ this.rightChannel4 = false;
+ this.DIVTicks = 27044;
+ this.LCDTicks = 160;
+ this.timerTicks = 0;
+ this.TIMAEnabled = false;
+ this.TACClocker = 1024;
+ this.serialTimer = 0;
+ this.serialShiftTimer = 0;
+ this.serialShiftTimerAllocated = 0;
+ this.IRQEnableDelay = 0;
+ this.actualScanLine = 144;
+ this.lastUnrenderedLine = 0;
+ this.gfxWindowDisplay = false;
+ this.gfxSpriteShow = false;
+ this.gfxSpriteNormalHeight = true;
+ this.bgEnabled = true;
+ this.BGPriorityEnabled = true;
+ this.gfxWindowCHRBankPosition = 0;
+ this.gfxBackgroundCHRBankPosition = 0;
+ this.gfxBackgroundBankOffset = 0;
+ this.windowY = 0;
+ this.windowX = 0;
+ this.drewBlank = 0;
+ this.midScanlineOffset = -1;
+ this.currentX = 0;
+}
+GameBoyCore.prototype.initBootstrap = function () {
+ //Start as an unset device:
+ cout("Starting the selected boot ROM.", 0);
+ this.programCounter = 0;
+ this.stackPointer = 0;
+ this.IME = false;
+ this.LCDTicks = 0;
+ this.DIVTicks = 0;
+ this.registerA = 0;
+ this.registerB = 0;
+ this.registerC = 0;
+ this.registerD = 0;
+ this.registerE = 0;
+ this.FZero = this.FSubtract = this.FHalfCarry = this.FCarry = false;
+ this.registersHL = 0;
+ this.leftChannel1 = false;
+ this.leftChannel2 = false;
+ this.leftChannel3 = false;
+ this.leftChannel4 = false;
+ this.rightChannel1 = false;
+ this.rightChannel2 = false;
+ this.rightChannel3 = false;
+ this.rightChannel4 = false;
+ this.channel2frequency = this.channel1frequency = 0;
+ this.channel4consecutive = this.channel2consecutive = this.channel1consecutive = false;
+ this.VinLeftChannelMasterVolume = 8;
+ this.VinRightChannelMasterVolume = 8;
+ this.memory[0xFF00] = 0xF; //Set the joypad state.
+}
+GameBoyCore.prototype.ROMLoad = function () {
+ //Load the first two ROM banks (0x0000 - 0x7FFF) into regular gameboy memory:
+ this.ROM = [];
+ this.usedBootROM = settings[1];
+ var maxLength = this.ROMImage.length;
+ if (maxLength < 0x4000) {
+ throw(new Error("ROM image size too small."));
+ }
+ this.ROM = this.getTypedArray(maxLength, 0, "uint8");
+ var romIndex = 0;
+ if (this.usedBootROM) {
+ if (!settings[11]) {
+ //Patch in the GBC boot ROM into the memory map:
+ for (; romIndex < 0x100; ++romIndex) {
+ this.memory[romIndex] = this.GBCBOOTROM[romIndex]; //Load in the GameBoy Color BOOT ROM.
+ this.ROM[romIndex] = (this.ROMImage.charCodeAt(romIndex) & 0xFF); //Decode the ROM binary for the switch out.
+ }
+ for (; romIndex < 0x200; ++romIndex) {
+ this.memory[romIndex] = this.ROM[romIndex] = (this.ROMImage.charCodeAt(romIndex) & 0xFF); //Load in the game ROM.
+ }
+ for (; romIndex < 0x900; ++romIndex) {
+ this.memory[romIndex] = this.GBCBOOTROM[romIndex - 0x100]; //Load in the GameBoy Color BOOT ROM.
+ this.ROM[romIndex] = (this.ROMImage.charCodeAt(romIndex) & 0xFF); //Decode the ROM binary for the switch out.
+ }
+ this.usedGBCBootROM = true;
+ }
+ else {
+ //Patch in the GBC boot ROM into the memory map:
+ for (; romIndex < 0x100; ++romIndex) {
+ this.memory[romIndex] = this.GBBOOTROM[romIndex]; //Load in the GameBoy Color BOOT ROM.
+ this.ROM[romIndex] = (this.ROMImage.charCodeAt(romIndex) & 0xFF); //Decode the ROM binary for the switch out.
+ }
+ }
+ for (; romIndex < 0x4000; ++romIndex) {
+ this.memory[romIndex] = this.ROM[romIndex] = (this.ROMImage.charCodeAt(romIndex) & 0xFF); //Load in the game ROM.
+ }
+ }
+ else {
+ //Don't load in the boot ROM:
+ for (; romIndex < 0x4000; ++romIndex) {
+ this.memory[romIndex] = this.ROM[romIndex] = (this.ROMImage.charCodeAt(romIndex) & 0xFF); //Load in the game ROM.
+ }
+ }
+ //Finish the decoding of the ROM binary:
+ for (; romIndex < maxLength; ++romIndex) {
+ this.ROM[romIndex] = (this.ROMImage.charCodeAt(romIndex) & 0xFF);
+ }
+ this.ROMBankEdge = Math.floor(this.ROM.length / 0x4000);
+ //Set up the emulator for the cartidge specifics:
+ this.interpretCartridge();
+ //Check for IRQ matching upon initialization:
+ this.checkIRQMatching();
+}
+GameBoyCore.prototype.getROMImage = function () {
+ //Return the binary version of the ROM image currently running:
+ if (this.ROMImage.length > 0) {
+ return this.ROMImage.length;
+ }
+ var length = this.ROM.length;
+ for (var index = 0; index < length; index++) {
+ this.ROMImage += String.fromCharCode(this.ROM[index]);
+ }
+ return this.ROMImage;
+}
+GameBoyCore.prototype.interpretCartridge = function () {
+ // ROM name
+ for (var index = 0x134; index < 0x13F; index++) {
+ if (this.ROMImage.charCodeAt(index) > 0) {
+ this.name += this.ROMImage[index];
+ }
+ }
+ // ROM game code (for newer games)
+ for (var index = 0x13F; index < 0x143; index++) {
+ if (this.ROMImage.charCodeAt(index) > 0) {
+ this.gameCode += this.ROMImage[index];
+ }
+ }
+ cout("Game Title: " + this.name + "[" + this.gameCode + "][" + this.ROMImage[0x143] + "]", 0);
+ cout("Game Code: " + this.gameCode, 0);
+ // Cartridge type
+ this.cartridgeType = this.ROM[0x147];
+ cout("Cartridge type #" + this.cartridgeType, 0);
+ //Map out ROM cartridge sub-types.
+ var MBCType = "";
+ switch (this.cartridgeType) {
+ case 0x00:
+ //ROM w/o bank switching
+ if (!settings[9]) {
+ MBCType = "ROM";
+ break;
+ }
+ case 0x01:
+ this.cMBC1 = true;
+ MBCType = "MBC1";
+ break;
+ case 0x02:
+ this.cMBC1 = true;
+ this.cSRAM = true;
+ MBCType = "MBC1 + SRAM";
+ break;
+ case 0x03:
+ this.cMBC1 = true;
+ this.cSRAM = true;
+ this.cBATT = true;
+ MBCType = "MBC1 + SRAM + BATT";
+ break;
+ case 0x05:
+ this.cMBC2 = true;
+ MBCType = "MBC2";
+ break;
+ case 0x06:
+ this.cMBC2 = true;
+ this.cBATT = true;
+ MBCType = "MBC2 + BATT";
+ break;
+ case 0x08:
+ this.cSRAM = true;
+ MBCType = "ROM + SRAM";
+ break;
+ case 0x09:
+ this.cSRAM = true;
+ this.cBATT = true;
+ MBCType = "ROM + SRAM + BATT";
+ break;
+ case 0x0B:
+ this.cMMMO1 = true;
+ MBCType = "MMMO1";
+ break;
+ case 0x0C:
+ this.cMMMO1 = true;
+ this.cSRAM = true;
+ MBCType = "MMMO1 + SRAM";
+ break;
+ case 0x0D:
+ this.cMMMO1 = true;
+ this.cSRAM = true;
+ this.cBATT = true;
+ MBCType = "MMMO1 + SRAM + BATT";
+ break;
+ case 0x0F:
+ this.cMBC3 = true;
+ this.cTIMER = true;
+ this.cBATT = true;
+ MBCType = "MBC3 + TIMER + BATT";
+ break;
+ case 0x10:
+ this.cMBC3 = true;
+ this.cTIMER = true;
+ this.cBATT = true;
+ this.cSRAM = true;
+ MBCType = "MBC3 + TIMER + BATT + SRAM";
+ break;
+ case 0x11:
+ this.cMBC3 = true;
+ MBCType = "MBC3";
+ break;
+ case 0x12:
+ this.cMBC3 = true;
+ this.cSRAM = true;
+ MBCType = "MBC3 + SRAM";
+ break;
+ case 0x13:
+ this.cMBC3 = true;
+ this.cSRAM = true;
+ this.cBATT = true;
+ MBCType = "MBC3 + SRAM + BATT";
+ break;
+ case 0x19:
+ this.cMBC5 = true;
+ MBCType = "MBC5";
+ break;
+ case 0x1A:
+ this.cMBC5 = true;
+ this.cSRAM = true;
+ MBCType = "MBC5 + SRAM";
+ break;
+ case 0x1B:
+ this.cMBC5 = true;
+ this.cSRAM = true;
+ this.cBATT = true;
+ MBCType = "MBC5 + SRAM + BATT";
+ break;
+ case 0x1C:
+ this.cRUMBLE = true;
+ MBCType = "RUMBLE";
+ break;
+ case 0x1D:
+ this.cRUMBLE = true;
+ this.cSRAM = true;
+ MBCType = "RUMBLE + SRAM";
+ break;
+ case 0x1E:
+ this.cRUMBLE = true;
+ this.cSRAM = true;
+ this.cBATT = true;
+ MBCType = "RUMBLE + SRAM + BATT";
+ break;
+ case 0x1F:
+ this.cCamera = true;
+ MBCType = "GameBoy Camera";
+ break;
+ case 0x22:
+ this.cMBC7 = true;
+ this.cSRAM = true;
+ this.cBATT = true;
+ MBCType = "MBC7 + SRAM + BATT";
+ break;
+ case 0xFD:
+ this.cTAMA5 = true;
+ MBCType = "TAMA5";
+ break;
+ case 0xFE:
+ this.cHuC3 = true;
+ MBCType = "HuC3";
+ break;
+ case 0xFF:
+ this.cHuC1 = true;
+ MBCType = "HuC1";
+ break;
+ default:
+ MBCType = "Unknown";
+ cout("Cartridge type is unknown.", 2);
+ pause();
+ }
+ cout("Cartridge Type: " + MBCType + ".", 0);
+ // ROM and RAM banks
+ this.numROMBanks = this.ROMBanks[this.ROM[0x148]];
+ cout(this.numROMBanks + " ROM banks.", 0);
+ switch (this.RAMBanks[this.ROM[0x149]]) {
+ case 0:
+ cout("No RAM banking requested for allocation or MBC is of type 2.", 0);
+ break;
+ case 2:
+ cout("1 RAM bank requested for allocation.", 0);
+ break;
+ case 3:
+ cout("4 RAM banks requested for allocation.", 0);
+ break;
+ case 4:
+ cout("16 RAM banks requested for allocation.", 0);
+ break;
+ default:
+ cout("RAM bank amount requested is unknown, will use maximum allowed by specified MBC type.", 0);
+ }
+ //Check the GB/GBC mode byte:
+ if (!this.usedBootROM) {
+ switch (this.ROM[0x143]) {
+ case 0x00: //Only GB mode
+ this.cGBC = false;
+ cout("Only GB mode detected.", 0);
+ break;
+ case 0x32: //Exception to the GBC identifying code:
+ if (!settings[2] && this.name + this.gameCode + this.ROM[0x143] == "Game and Watch 50") {
+ this.cGBC = true;
+ cout("Created a boot exception for Game and Watch Gallery 2 (GBC ID byte is wrong on the cartridge).", 1);
+ }
+ else {
+ this.cGBC = false;
+ }
+ break;
+ case 0x80: //Both GB + GBC modes
+ this.cGBC = !settings[2];
+ cout("GB and GBC mode detected.", 0);
+ break;
+ case 0xC0: //Only GBC mode
+ this.cGBC = true;
+ cout("Only GBC mode detected.", 0);
+ break;
+ default:
+ this.cGBC = false;
+ cout("Unknown GameBoy game type code #" + this.ROM[0x143] + ", defaulting to GB mode (Old games don't have a type code).", 1);
+ }
+ this.inBootstrap = false;
+ this.setupRAM(); //CPU/(V)RAM initialization.
+ this.initSkipBootstrap();
+ this.initializeAudioStartState(); // Line added for benchmarking.
+ }
+ else {
+ this.cGBC = this.usedGBCBootROM; //Allow the GBC boot ROM to run in GBC mode...
+ this.setupRAM(); //CPU/(V)RAM initialization.
+ this.initBootstrap();
+ }
+ this.initializeModeSpecificArrays();
+ //License Code Lookup:
+ var cOldLicense = this.ROM[0x14B];
+ var cNewLicense = (this.ROM[0x144] & 0xFF00) | (this.ROM[0x145] & 0xFF);
+ if (cOldLicense != 0x33) {
+ //Old Style License Header
+ cout("Old style license code: " + cOldLicense, 0);
+ }
+ else {
+ //New Style License Header
+ cout("New style license code: " + cNewLicense, 0);
+ }
+ this.ROMImage = ""; //Memory consumption reduction.
+}
+GameBoyCore.prototype.disableBootROM = function () {
+ //Remove any traces of the boot ROM from ROM memory.
+ for (var index = 0; index < 0x100; ++index) {
+ this.memory[index] = this.ROM[index]; //Replace the GameBoy or GameBoy Color boot ROM with the game ROM.
+ }
+ if (this.usedGBCBootROM) {
+ //Remove any traces of the boot ROM from ROM memory.
+ for (index = 0x200; index < 0x900; ++index) {
+ this.memory[index] = this.ROM[index]; //Replace the GameBoy Color boot ROM with the game ROM.
+ }
+ if (!this.cGBC) {
+ //Clean up the post-boot (GB mode only) state:
+ this.GBCtoGBModeAdjust();
+ }
+ else {
+ this.recompileBootIOWriteHandling();
+ }
+ }
+ else {
+ this.recompileBootIOWriteHandling();
+ }
+}
+GameBoyCore.prototype.initializeTiming = function () {
+ //Emulator Timing:
+ this.baseCPUCyclesPerIteration = 0x80000 / 0x7D * settings[6];
+ this.CPUCyclesTotalRoundoff = this.baseCPUCyclesPerIteration % 4;
+ this.CPUCyclesTotalBase = this.CPUCyclesTotal = (this.baseCPUCyclesPerIteration - this.CPUCyclesTotalRoundoff) | 0;
+ this.CPUCyclesTotalCurrent = 0;
+}
+GameBoyCore.prototype.setupRAM = function () {
+ //Setup the auxilliary/switchable RAM:
+ if (this.cMBC2) {
+ this.numRAMBanks = 1 / 16;
+ }
+ else if (this.cMBC1 || this.cRUMBLE || this.cMBC3 || this.cHuC3) {
+ this.numRAMBanks = 4;
+ }
+ else if (this.cMBC5) {
+ this.numRAMBanks = 16;
+ }
+ else if (this.cSRAM) {
+ this.numRAMBanks = 1;
+ }
+ if (this.numRAMBanks > 0) {
+ if (!this.MBCRAMUtilized()) {
+ //For ROM and unknown MBC cartridges using the external RAM:
+ this.MBCRAMBanksEnabled = true;
+ }
+ //Switched RAM Used
+ var MBCRam = (typeof this.openMBC == "function") ? this.openMBC(this.name) : [];
+ if (MBCRam.length > 0) {
+ //Flash the SRAM into memory:
+ this.MBCRam = this.toTypedArray(MBCRam, "uint8");
+ }
+ else {
+ this.MBCRam = this.getTypedArray(this.numRAMBanks * 0x2000, 0, "uint8");
+ }
+ }
+ cout("Actual bytes of MBC RAM allocated: " + (this.numRAMBanks * 0x2000), 0);
+ this.returnFromRTCState();
+ //Setup the RAM for GBC mode.
+ if (this.cGBC) {
+ this.VRAM = this.getTypedArray(0x2000, 0, "uint8");
+ this.GBCMemory = this.getTypedArray(0x7000, 0, "uint8");
+ }
+ this.memoryReadJumpCompile();
+ this.memoryWriteJumpCompile();
+}
+GameBoyCore.prototype.MBCRAMUtilized = function () {
+ return this.cMBC1 || this.cMBC2 || this.cMBC3 || this.cMBC5 || this.cMBC7 || this.cRUMBLE;
+}
+GameBoyCore.prototype.recomputeDimension = function () {
+ initNewCanvas();
+ //Cache some dimension info:
+ this.onscreenWidth = this.canvas.width;
+ this.onscreenHeight = this.canvas.height;
+ // The following line was modified for benchmarking:
+ if (GameBoyWindow && GameBoyWindow.mozRequestAnimationFrame) {
+ //Firefox slowness hack:
+ this.canvas.width = this.onscreenWidth = (!settings[12]) ? 160 : this.canvas.width;
+ this.canvas.height = this.onscreenHeight = (!settings[12]) ? 144 : this.canvas.height;
+ }
+ else {
+ this.onscreenWidth = this.canvas.width;
+ this.onscreenHeight = this.canvas.height;
+ }
+ this.offscreenWidth = (!settings[12]) ? 160 : this.canvas.width;
+ this.offscreenHeight = (!settings[12]) ? 144 : this.canvas.height;
+ this.offscreenRGBCount = this.offscreenWidth * this.offscreenHeight * 4;
+}
+GameBoyCore.prototype.initLCD = function () {
+ this.recomputeDimension();
+ if (this.offscreenRGBCount != 92160) {
+ //Only create the resizer handle if we need it:
+ this.compileResizeFrameBufferFunction();
+ }
+ else {
+ //Resizer not needed:
+ this.resizer = null;
+ }
+ try {
+ this.canvasOffscreen = new GameBoyCanvas(); // Line modified for benchmarking.
+ this.canvasOffscreen.width = this.offscreenWidth;
+ this.canvasOffscreen.height = this.offscreenHeight;
+ this.drawContextOffscreen = this.canvasOffscreen.getContext("2d");
+ this.drawContextOnscreen = this.canvas.getContext("2d");
+ //Get a CanvasPixelArray buffer:
+ try {
+ this.canvasBuffer = this.drawContextOffscreen.createImageData(this.offscreenWidth, this.offscreenHeight);
+ }
+ catch (error) {
+ cout("Falling back to the getImageData initialization (Error \"" + error.message + "\").", 1);
+ this.canvasBuffer = this.drawContextOffscreen.getImageData(0, 0, this.offscreenWidth, this.offscreenHeight);
+ }
+ var index = this.offscreenRGBCount;
+ while (index > 0) {
+ this.canvasBuffer.data[index -= 4] = 0xF8;
+ this.canvasBuffer.data[index + 1] = 0xF8;
+ this.canvasBuffer.data[index + 2] = 0xF8;
+ this.canvasBuffer.data[index + 3] = 0xFF;
+ }
+ this.graphicsBlit();
+ this.canvas.style.visibility = "visible";
+ if (this.swizzledFrame == null) {
+ this.swizzledFrame = this.getTypedArray(69120, 0xFF, "uint8");
+ }
+ //Test the draw system and browser vblank latching:
+ this.drewFrame = true; //Copy the latest graphics to buffer.
+ this.requestDraw();
+ }
+ catch (error) {
+ throw(new Error("HTML5 Canvas support required: " + error.message + "file: " + error.fileName + ", line: " + error.lineNumber));
+ }
+}
+GameBoyCore.prototype.graphicsBlit = function () {
+ if (this.offscreenWidth == this.onscreenWidth && this.offscreenHeight == this.onscreenHeight) {
+ this.drawContextOnscreen.putImageData(this.canvasBuffer, 0, 0);
+ }
+ else {
+ this.drawContextOffscreen.putImageData(this.canvasBuffer, 0, 0);
+ this.drawContextOnscreen.drawImage(this.canvasOffscreen, 0, 0, this.onscreenWidth, this.onscreenHeight);
+ }
+}
+GameBoyCore.prototype.JoyPadEvent = function (key, down) {
+ if (down) {
+ this.JoyPad &= 0xFF ^ (1 << key);
+ if (!this.cGBC && (!this.usedBootROM || !this.usedGBCBootROM)) {
+ this.interruptsRequested |= 0x10; //A real GBC doesn't set this!
+ this.remainingClocks = 0;
+ this.checkIRQMatching();
+ }
+ }
+ else {
+ this.JoyPad |= (1 << key);
+ }
+ this.memory[0xFF00] = (this.memory[0xFF00] & 0x30) + ((((this.memory[0xFF00] & 0x20) == 0) ? (this.JoyPad >> 4) : 0xF) & (((this.memory[0xFF00] & 0x10) == 0) ? (this.JoyPad & 0xF) : 0xF));
+ this.CPUStopped = false;
+}
+GameBoyCore.prototype.GyroEvent = function (x, y) {
+ x *= -100;
+ x += 2047;
+ this.highX = x >> 8;
+ this.lowX = x & 0xFF;
+ y *= -100;
+ y += 2047;
+ this.highY = y >> 8;
+ this.lowY = y & 0xFF;
+}
+GameBoyCore.prototype.initSound = function () {
+ this.sampleSize = 0x400000 / 1000 * settings[6];
+ this.machineOut = settings[13];
+ if (settings[0]) {
+ try {
+ var parentObj = this;
+ this.audioHandle = new XAudioServer(2, 0x400000 / settings[13], 0, Math.max(this.sampleSize * settings[8] / settings[13], 8192) << 1, null, settings[14]);
+ this.initAudioBuffer();
+ }
+ catch (error) {
+ cout("Audio system cannot run: " + error.message, 2);
+ settings[0] = false;
+ }
+ }
+ else if (this.audioHandle) {
+ //Mute the audio output, as it has an immediate silencing effect:
+ try {
+ this.audioHandle.changeVolume(0);
+ }
+ catch (error) { }
+ }
+}
+GameBoyCore.prototype.changeVolume = function () {
+ if (settings[0] && this.audioHandle) {
+ try {
+ this.audioHandle.changeVolume(settings[14]);
+ }
+ catch (error) { }
+ }
+}
+GameBoyCore.prototype.initAudioBuffer = function () {
+ this.audioIndex = 0;
+ this.bufferContainAmount = Math.max(this.sampleSize * settings[7] / settings[13], 4096) << 1;
+ this.numSamplesTotal = (this.sampleSize - (this.sampleSize % settings[13])) | 0;
+ this.currentBuffer = this.getTypedArray(this.numSamplesTotal, 0xF0F0, "int32");
+ this.secondaryBuffer = this.getTypedArray((this.numSamplesTotal << 1) / settings[13], 0, "float32");
+}
+GameBoyCore.prototype.intializeWhiteNoise = function () {
+ //Noise Sample Tables:
+ var randomFactor = 1;
+ //15-bit LSFR Cache Generation:
+ this.LSFR15Table = this.getTypedArray(0x80000, 0, "int8");
+ var LSFR = 0x7FFF; //Seed value has all its bits set.
+ var LSFRShifted = 0x3FFF;
+ for (var index = 0; index < 0x8000; ++index) {
+ //Normalize the last LSFR value for usage:
+ randomFactor = 1 - (LSFR & 1); //Docs say it's the inverse.
+ //Cache the different volume level results:
+ this.LSFR15Table[0x08000 | index] = randomFactor;
+ this.LSFR15Table[0x10000 | index] = randomFactor * 0x2;
+ this.LSFR15Table[0x18000 | index] = randomFactor * 0x3;
+ this.LSFR15Table[0x20000 | index] = randomFactor * 0x4;
+ this.LSFR15Table[0x28000 | index] = randomFactor * 0x5;
+ this.LSFR15Table[0x30000 | index] = randomFactor * 0x6;
+ this.LSFR15Table[0x38000 | index] = randomFactor * 0x7;
+ this.LSFR15Table[0x40000 | index] = randomFactor * 0x8;
+ this.LSFR15Table[0x48000 | index] = randomFactor * 0x9;
+ this.LSFR15Table[0x50000 | index] = randomFactor * 0xA;
+ this.LSFR15Table[0x58000 | index] = randomFactor * 0xB;
+ this.LSFR15Table[0x60000 | index] = randomFactor * 0xC;
+ this.LSFR15Table[0x68000 | index] = randomFactor * 0xD;
+ this.LSFR15Table[0x70000 | index] = randomFactor * 0xE;
+ this.LSFR15Table[0x78000 | index] = randomFactor * 0xF;
+ //Recompute the LSFR algorithm:
+ LSFRShifted = LSFR >> 1;
+ LSFR = LSFRShifted | (((LSFRShifted ^ LSFR) & 0x1) << 14);
+ }
+ //7-bit LSFR Cache Generation:
+ this.LSFR7Table = this.getTypedArray(0x800, 0, "int8");
+ LSFR = 0x7F; //Seed value has all its bits set.
+ for (index = 0; index < 0x80; ++index) {
+ //Normalize the last LSFR value for usage:
+ randomFactor = 1 - (LSFR & 1); //Docs say it's the inverse.
+ //Cache the different volume level results:
+ this.LSFR7Table[0x080 | index] = randomFactor;
+ this.LSFR7Table[0x100 | index] = randomFactor * 0x2;
+ this.LSFR7Table[0x180 | index] = randomFactor * 0x3;
+ this.LSFR7Table[0x200 | index] = randomFactor * 0x4;
+ this.LSFR7Table[0x280 | index] = randomFactor * 0x5;
+ this.LSFR7Table[0x300 | index] = randomFactor * 0x6;
+ this.LSFR7Table[0x380 | index] = randomFactor * 0x7;
+ this.LSFR7Table[0x400 | index] = randomFactor * 0x8;
+ this.LSFR7Table[0x480 | index] = randomFactor * 0x9;
+ this.LSFR7Table[0x500 | index] = randomFactor * 0xA;
+ this.LSFR7Table[0x580 | index] = randomFactor * 0xB;
+ this.LSFR7Table[0x600 | index] = randomFactor * 0xC;
+ this.LSFR7Table[0x680 | index] = randomFactor * 0xD;
+ this.LSFR7Table[0x700 | index] = randomFactor * 0xE;
+ this.LSFR7Table[0x780 | index] = randomFactor * 0xF;
+ //Recompute the LSFR algorithm:
+ LSFRShifted = LSFR >> 1;
+ LSFR = LSFRShifted | (((LSFRShifted ^ LSFR) & 0x1) << 6);
+ }
+ if (!this.noiseSampleTable && this.memory.length == 0x10000) {
+ //If enabling audio for the first time after a game is already running, set up the internal table reference:
+ this.noiseSampleTable = ((this.memory[0xFF22] & 0x8) == 0x8) ? this.LSFR7Table : this.LSFR15Table;
+ }
+}
+GameBoyCore.prototype.audioUnderrunAdjustment = function () {
+ if (settings[0]) {
+ var underrunAmount = this.bufferContainAmount - this.audioHandle.remainingBuffer();
+ if (underrunAmount > 0) {
+ this.CPUCyclesTotalCurrent += (underrunAmount >> 1) * this.machineOut;
+ this.recalculateIterationClockLimit();
+ }
+ }
+}
+GameBoyCore.prototype.initializeAudioStartState = function () {
+ this.channel1FrequencyTracker = 0x2000;
+ this.channel1DutyTracker = 0;
+ this.channel1CachedDuty = this.dutyLookup[2];
+ this.channel1totalLength = 0;
+ this.channel1envelopeVolume = 0;
+ this.channel1envelopeType = false;
+ this.channel1envelopeSweeps = 0;
+ this.channel1envelopeSweepsLast = 0;
+ this.channel1consecutive = true;
+ this.channel1frequency = 0;
+ this.channel1SweepFault = false;
+ this.channel1ShadowFrequency = 0;
+ this.channel1timeSweep = 1;
+ this.channel1lastTimeSweep = 0;
+ this.channel1numSweep = 0;
+ this.channel1frequencySweepDivider = 0;
+ this.channel1decreaseSweep = false;
+ this.channel2FrequencyTracker = 0x2000;
+ this.channel2DutyTracker = 0;
+ this.channel2CachedDuty = this.dutyLookup[2];
+ this.channel2totalLength = 0;
+ this.channel2envelopeVolume = 0;
+ this.channel2envelopeType = false;
+ this.channel2envelopeSweeps = 0;
+ this.channel2envelopeSweepsLast = 0;
+ this.channel2consecutive = true;
+ this.channel2frequency = 0;
+ this.channel3canPlay = false;
+ this.channel3totalLength = 0;
+ this.channel3patternType = 4;
+ this.channel3frequency = 0;
+ this.channel3consecutive = true;
+ this.channel3Counter = 0x800;
+ this.channel4FrequencyPeriod = 8;
+ this.channel4totalLength = 0;
+ this.channel4envelopeVolume = 0;
+ this.channel4currentVolume = 0;
+ this.channel4envelopeType = false;
+ this.channel4envelopeSweeps = 0;
+ this.channel4envelopeSweepsLast = 0;
+ this.channel4consecutive = true;
+ this.channel4BitRange = 0x7FFF;
+ this.noiseSampleTable = this.LSFR15Table;
+ this.channel4VolumeShifter = 15;
+ this.channel1FrequencyCounter = 0x2000;
+ this.channel2FrequencyCounter = 0x2000;
+ this.channel3Counter = 0x800;
+ this.channel3FrequencyPeriod = 0x800;
+ this.channel3lastSampleLookup = 0;
+ this.channel4lastSampleLookup = 0;
+ this.VinLeftChannelMasterVolume = 8;
+ this.VinRightChannelMasterVolume = 8;
+ this.mixerOutputCache = 0;
+ this.sequencerClocks = 0x2000;
+ this.sequencePosition = 0;
+ this.channel4FrequencyPeriod = 8;
+ this.channel4Counter = 8;
+ this.cachedChannel3Sample = 0;
+ this.cachedChannel4Sample = 0;
+ this.channel1Enabled = false;
+ this.channel2Enabled = false;
+ this.channel3Enabled = false;
+ this.channel4Enabled = false;
+ this.channel1canPlay = false;
+ this.channel2canPlay = false;
+ this.channel4canPlay = false;
+ this.channel1OutputLevelCache();
+ this.channel2OutputLevelCache();
+ this.channel3OutputLevelCache();
+ this.channel4OutputLevelCache();
+}
+GameBoyCore.prototype.outputAudio = function () {
+ var sampleFactor = 0;
+ var dirtySample = 0;
+ var averageL = 0;
+ var averageR = 0;
+ var destinationPosition = 0;
+ var divisor1 = settings[13];
+ var divisor2 = divisor1 * 0xF0;
+ for (var sourcePosition = 0; sourcePosition < this.numSamplesTotal;) {
+ for (sampleFactor = averageL = averageR = 0; sampleFactor < divisor1; ++sampleFactor) {
+ dirtySample = this.currentBuffer[sourcePosition++];
+ averageL += dirtySample >> 9;
+ averageR += dirtySample & 0x1FF;
+ }
+ this.secondaryBuffer[destinationPosition++] = averageL / divisor2 - 1;
+ this.secondaryBuffer[destinationPosition++] = averageR / divisor2 - 1;
+ }
+ this.audioHandle.writeAudioNoCallback(this.secondaryBuffer);
+}
+//Below are the audio generation functions timed against the CPU:
+GameBoyCore.prototype.generateAudio = function (numSamples) {
+ if (this.soundMasterEnabled && !this.CPUStopped) {
+ for (var samplesToGenerate = 0; numSamples > 0;) {
+ samplesToGenerate = (numSamples < this.sequencerClocks) ? numSamples : this.sequencerClocks;
+ this.sequencerClocks -= samplesToGenerate;
+ numSamples -= samplesToGenerate;
+ while (--samplesToGenerate > -1) {
+ this.computeAudioChannels();
+ this.currentBuffer[this.audioIndex++] = this.mixerOutputCache;
+ if (this.audioIndex == this.numSamplesTotal) {
+ this.audioIndex = 0;
+ this.outputAudio();
+ }
+ }
+ if (this.sequencerClocks == 0) {
+ this.audioComputeSequencer();
+ this.sequencerClocks = 0x2000;
+ }
+ }
+ }
+ else {
+ //SILENT OUTPUT:
+ while (--numSamples > -1) {
+ this.currentBuffer[this.audioIndex++] = 0xF0F0;
+ if (this.audioIndex == this.numSamplesTotal) {
+ this.audioIndex = 0;
+ this.outputAudio();
+ }
+ }
+ }
+}
+//Generate audio, but don't actually output it (Used for when sound is disabled by user/browser):
+GameBoyCore.prototype.generateAudioFake = function (numSamples) {
+ if (this.soundMasterEnabled && !this.CPUStopped) {
+ while (--numSamples > -1) {
+ this.computeAudioChannels();
+ if (--this.sequencerClocks == 0) {
+ this.audioComputeSequencer();
+ this.sequencerClocks = 0x2000;
+ }
+ }
+ }
+}
+GameBoyCore.prototype.audioJIT = function () {
+ //Audio Sample Generation Timing:
+ if (settings[0]) {
+ this.generateAudio(this.audioTicks);
+ }
+ else {
+ this.generateAudioFake(this.audioTicks);
+ }
+ this.audioTicks = 0;
+}
+GameBoyCore.prototype.audioComputeSequencer = function () {
+ switch (this.sequencePosition++) {
+ case 0:
+ this.clockAudioLength();
+ break;
+ case 2:
+ this.clockAudioLength();
+ this.clockAudioSweep();
+ break;
+ case 4:
+ this.clockAudioLength();
+ break;
+ case 6:
+ this.clockAudioLength();
+ this.clockAudioSweep();
+ break;
+ case 7:
+ this.clockAudioEnvelope();
+ this.sequencePosition = 0;
+ }
+}
+GameBoyCore.prototype.clockAudioLength = function () {
+ //Channel 1:
+ if (this.channel1totalLength > 1) {
+ --this.channel1totalLength;
+ }
+ else if (this.channel1totalLength == 1) {
+ this.channel1totalLength = 0;
+ this.channel1EnableCheck();
+ this.memory[0xFF26] &= 0xFE; //Channel #1 On Flag Off
+ }
+ //Channel 2:
+ if (this.channel2totalLength > 1) {
+ --this.channel2totalLength;
+ }
+ else if (this.channel2totalLength == 1) {
+ this.channel2totalLength = 0;
+ this.channel2EnableCheck();
+ this.memory[0xFF26] &= 0xFD; //Channel #2 On Flag Off
+ }
+ //Channel 3:
+ if (this.channel3totalLength > 1) {
+ --this.channel3totalLength;
+ }
+ else if (this.channel3totalLength == 1) {
+ this.channel3totalLength = 0;
+ this.channel3EnableCheck();
+ this.memory[0xFF26] &= 0xFB; //Channel #3 On Flag Off
+ }
+ //Channel 4:
+ if (this.channel4totalLength > 1) {
+ --this.channel4totalLength;
+ }
+ else if (this.channel4totalLength == 1) {
+ this.channel4totalLength = 0;
+ this.channel4EnableCheck();
+ this.memory[0xFF26] &= 0xF7; //Channel #4 On Flag Off
+ }
+}
+GameBoyCore.prototype.clockAudioSweep = function () {
+ //Channel 1:
+ if (!this.channel1SweepFault && this.channel1timeSweep > 0) {
+ if (--this.channel1timeSweep == 0) {
+ this.runAudioSweep();
+ }
+ }
+}
+GameBoyCore.prototype.runAudioSweep = function () {
+ //Channel 1:
+ if (this.channel1lastTimeSweep > 0) {
+ if (this.channel1frequencySweepDivider > 0) {
+ if (this.channel1numSweep > 0) {
+ --this.channel1numSweep;
+ if (this.channel1decreaseSweep) {
+ this.channel1ShadowFrequency -= this.channel1ShadowFrequency >> this.channel1frequencySweepDivider;
+ this.channel1frequency = this.channel1ShadowFrequency & 0x7FF;
+ this.channel1FrequencyTracker = (0x800 - this.channel1frequency) << 2;
+ }
+ else {
+ this.channel1ShadowFrequency += this.channel1ShadowFrequency >> this.channel1frequencySweepDivider;
+ this.channel1frequency = this.channel1ShadowFrequency;
+ if (this.channel1ShadowFrequency <= 0x7FF) {
+ this.channel1FrequencyTracker = (0x800 - this.channel1frequency) << 2;
+ //Run overflow check twice:
+ if ((this.channel1ShadowFrequency + (this.channel1ShadowFrequency >> this.channel1frequencySweepDivider)) > 0x7FF) {
+ this.channel1SweepFault = true;
+ this.channel1EnableCheck();
+ this.memory[0xFF26] &= 0xFE; //Channel #1 On Flag Off
+ }
+ }
+ else {
+ this.channel1frequency &= 0x7FF;
+ this.channel1SweepFault = true;
+ this.channel1EnableCheck();
+ this.memory[0xFF26] &= 0xFE; //Channel #1 On Flag Off
+ }
+ }
+ }
+ this.channel1timeSweep = this.channel1lastTimeSweep;
+ }
+ else {
+ //Channel has sweep disabled and timer becomes a length counter:
+ this.channel1SweepFault = true;
+ this.channel1EnableCheck();
+ }
+ }
+}
+GameBoyCore.prototype.clockAudioEnvelope = function () {
+ //Channel 1:
+ if (this.channel1envelopeSweepsLast > -1) {
+ if (this.channel1envelopeSweeps > 0) {
+ --this.channel1envelopeSweeps;
+ }
+ else {
+ if (!this.channel1envelopeType) {
+ if (this.channel1envelopeVolume > 0) {
+ --this.channel1envelopeVolume;
+ this.channel1envelopeSweeps = this.channel1envelopeSweepsLast;
+ this.channel1OutputLevelCache();
+ }
+ else {
+ this.channel1envelopeSweepsLast = -1;
+ }
+ }
+ else if (this.channel1envelopeVolume < 0xF) {
+ ++this.channel1envelopeVolume;
+ this.channel1envelopeSweeps = this.channel1envelopeSweepsLast;
+ this.channel1OutputLevelCache();
+ }
+ else {
+ this.channel1envelopeSweepsLast = -1;
+ }
+ }
+ }
+ //Channel 2:
+ if (this.channel2envelopeSweepsLast > -1) {
+ if (this.channel2envelopeSweeps > 0) {
+ --this.channel2envelopeSweeps;
+ }
+ else {
+ if (!this.channel2envelopeType) {
+ if (this.channel2envelopeVolume > 0) {
+ --this.channel2envelopeVolume;
+ this.channel2envelopeSweeps = this.channel2envelopeSweepsLast;
+ this.channel2OutputLevelCache();
+ }
+ else {
+ this.channel2envelopeSweepsLast = -1;
+ }
+ }
+ else if (this.channel2envelopeVolume < 0xF) {
+ ++this.channel2envelopeVolume;
+ this.channel2envelopeSweeps = this.channel2envelopeSweepsLast;
+ this.channel2OutputLevelCache();
+ }
+ else {
+ this.channel2envelopeSweepsLast = -1;
+ }
+ }
+ }
+ //Channel 4:
+ if (this.channel4envelopeSweepsLast > -1) {
+ if (this.channel4envelopeSweeps > 0) {
+ --this.channel4envelopeSweeps;
+ }
+ else {
+ if (!this.channel4envelopeType) {
+ if (this.channel4envelopeVolume > 0) {
+ this.channel4currentVolume = --this.channel4envelopeVolume << this.channel4VolumeShifter;
+ this.channel4envelopeSweeps = this.channel4envelopeSweepsLast;
+ this.channel4UpdateCache();
+ }
+ else {
+ this.channel4envelopeSweepsLast = -1;
+ }
+ }
+ else if (this.channel4envelopeVolume < 0xF) {
+ this.channel4currentVolume = ++this.channel4envelopeVolume << this.channel4VolumeShifter;
+ this.channel4envelopeSweeps = this.channel4envelopeSweepsLast;
+ this.channel4UpdateCache();
+ }
+ else {
+ this.channel4envelopeSweepsLast = -1;
+ }
+ }
+ }
+}
+GameBoyCore.prototype.computeAudioChannels = function () {
+ //Channel 1 counter:
+ if (--this.channel1FrequencyCounter == 0) {
+ this.channel1FrequencyCounter = this.channel1FrequencyTracker;
+ this.channel1DutyTracker = (this.channel1DutyTracker + 1) & 0x7;
+ this.channel1OutputLevelTrimaryCache();
+ }
+ //Channel 2 counter:
+ if (--this.channel2FrequencyCounter == 0) {
+ this.channel2FrequencyCounter = this.channel2FrequencyTracker;
+ this.channel2DutyTracker = (this.channel2DutyTracker + 1) & 0x7;
+ this.channel2OutputLevelTrimaryCache();
+ }
+ //Channel 3 counter:
+ if (--this.channel3Counter == 0) {
+ if (this.channel3canPlay) {
+ this.channel3lastSampleLookup = (this.channel3lastSampleLookup + 1) & 0x1F;
+ }
+ this.channel3Counter = this.channel3FrequencyPeriod;
+ this.channel3UpdateCache();
+ }
+ //Channel 4 counter:
+ if (--this.channel4Counter == 0) {
+ this.channel4lastSampleLookup = (this.channel4lastSampleLookup + 1) & this.channel4BitRange;
+ this.channel4Counter = this.channel4FrequencyPeriod;
+ this.channel4UpdateCache();
+ }
+}
+GameBoyCore.prototype.channel1EnableCheck = function () {
+ this.channel1Enabled = ((this.channel1consecutive || this.channel1totalLength > 0) && !this.channel1SweepFault && this.channel1canPlay);
+ this.channel1OutputLevelSecondaryCache();
+}
+GameBoyCore.prototype.channel1VolumeEnableCheck = function () {
+ this.channel1canPlay = (this.memory[0xFF12] > 7);
+ this.channel1EnableCheck();
+ this.channel1OutputLevelSecondaryCache();
+}
+GameBoyCore.prototype.channel1OutputLevelCache = function () {
+ this.channel1currentSampleLeft = (this.leftChannel1) ? this.channel1envelopeVolume : 0;
+ this.channel1currentSampleRight = (this.rightChannel1) ? this.channel1envelopeVolume : 0;
+ this.channel1OutputLevelSecondaryCache();
+}
+GameBoyCore.prototype.channel1OutputLevelSecondaryCache = function () {
+ if (this.channel1Enabled) {
+ this.channel1currentSampleLeftSecondary = this.channel1currentSampleLeft;
+ this.channel1currentSampleRightSecondary = this.channel1currentSampleRight;
+ }
+ else {
+ this.channel1currentSampleLeftSecondary = 0;
+ this.channel1currentSampleRightSecondary = 0;
+ }
+ this.channel1OutputLevelTrimaryCache();
+}
+GameBoyCore.prototype.channel1OutputLevelTrimaryCache = function () {
+ if (this.channel1CachedDuty[this.channel1DutyTracker]) {
+ this.channel1currentSampleLeftTrimary = this.channel1currentSampleLeftSecondary;
+ this.channel1currentSampleRightTrimary = this.channel1currentSampleRightSecondary;
+ }
+ else {
+ this.channel1currentSampleLeftTrimary = 0;
+ this.channel1currentSampleRightTrimary = 0;
+ }
+ this.mixerOutputLevelCache();
+}
+GameBoyCore.prototype.channel2EnableCheck = function () {
+ this.channel2Enabled = ((this.channel2consecutive || this.channel2totalLength > 0) && this.channel2canPlay);
+ this.channel2OutputLevelSecondaryCache();
+}
+GameBoyCore.prototype.channel2VolumeEnableCheck = function () {
+ this.channel2canPlay = (this.memory[0xFF17] > 7);
+ this.channel2EnableCheck();
+ this.channel2OutputLevelSecondaryCache();
+}
+GameBoyCore.prototype.channel2OutputLevelCache = function () {
+ this.channel2currentSampleLeft = (this.leftChannel2) ? this.channel2envelopeVolume : 0;
+ this.channel2currentSampleRight = (this.rightChannel2) ? this.channel2envelopeVolume : 0;
+ this.channel2OutputLevelSecondaryCache();
+}
+GameBoyCore.prototype.channel2OutputLevelSecondaryCache = function () {
+ if (this.channel2Enabled) {
+ this.channel2currentSampleLeftSecondary = this.channel2currentSampleLeft;
+ this.channel2currentSampleRightSecondary = this.channel2currentSampleRight;
+ }
+ else {
+ this.channel2currentSampleLeftSecondary = 0;
+ this.channel2currentSampleRightSecondary = 0;
+ }
+ this.channel2OutputLevelTrimaryCache();
+}
+GameBoyCore.prototype.channel2OutputLevelTrimaryCache = function () {
+ if (this.channel2CachedDuty[this.channel2DutyTracker]) {
+ this.channel2currentSampleLeftTrimary = this.channel2currentSampleLeftSecondary;
+ this.channel2currentSampleRightTrimary = this.channel2currentSampleRightSecondary;
+ }
+ else {
+ this.channel2currentSampleLeftTrimary = 0;
+ this.channel2currentSampleRightTrimary = 0;
+ }
+ this.mixerOutputLevelCache();
+}
+GameBoyCore.prototype.channel3EnableCheck = function () {
+ this.channel3Enabled = (/*this.channel3canPlay && */(this.channel3consecutive || this.channel3totalLength > 0));
+ this.channel3OutputLevelSecondaryCache();
+}
+GameBoyCore.prototype.channel3OutputLevelCache = function () {
+ this.channel3currentSampleLeft = (this.leftChannel3) ? this.cachedChannel3Sample : 0;
+ this.channel3currentSampleRight = (this.rightChannel3) ? this.cachedChannel3Sample : 0;
+ this.channel3OutputLevelSecondaryCache();
+}
+GameBoyCore.prototype.channel3OutputLevelSecondaryCache = function () {
+ if (this.channel3Enabled) {
+ this.channel3currentSampleLeftSecondary = this.channel3currentSampleLeft;
+ this.channel3currentSampleRightSecondary = this.channel3currentSampleRight;
+ }
+ else {
+ this.channel3currentSampleLeftSecondary = 0;
+ this.channel3currentSampleRightSecondary = 0;
+ }
+ this.mixerOutputLevelCache();
+}
+GameBoyCore.prototype.channel4EnableCheck = function () {
+ this.channel4Enabled = ((this.channel4consecutive || this.channel4totalLength > 0) && this.channel4canPlay);
+ this.channel4OutputLevelSecondaryCache();
+}
+GameBoyCore.prototype.channel4VolumeEnableCheck = function () {
+ this.channel4canPlay = (this.memory[0xFF21] > 7);
+ this.channel4EnableCheck();
+ this.channel4OutputLevelSecondaryCache();
+}
+GameBoyCore.prototype.channel4OutputLevelCache = function () {
+ this.channel4currentSampleLeft = (this.leftChannel4) ? this.cachedChannel4Sample : 0;
+ this.channel4currentSampleRight = (this.rightChannel4) ? this.cachedChannel4Sample : 0;
+ this.channel4OutputLevelSecondaryCache();
+}
+GameBoyCore.prototype.channel4OutputLevelSecondaryCache = function () {
+ if (this.channel4Enabled) {
+ this.channel4currentSampleLeftSecondary = this.channel4currentSampleLeft;
+ this.channel4currentSampleRightSecondary = this.channel4currentSampleRight;
+ }
+ else {
+ this.channel4currentSampleLeftSecondary = 0;
+ this.channel4currentSampleRightSecondary = 0;
+ }
+ this.mixerOutputLevelCache();
+}
+GameBoyCore.prototype.mixerOutputLevelCache = function () {
+ this.mixerOutputCache = ((((this.channel1currentSampleLeftTrimary + this.channel2currentSampleLeftTrimary + this.channel3currentSampleLeftSecondary + this.channel4currentSampleLeftSecondary) * this.VinLeftChannelMasterVolume) << 9) +
+ ((this.channel1currentSampleRightTrimary + this.channel2currentSampleRightTrimary + this.channel3currentSampleRightSecondary + this.channel4currentSampleRightSecondary) * this.VinRightChannelMasterVolume));
+}
+GameBoyCore.prototype.channel3UpdateCache = function () {
+ this.cachedChannel3Sample = this.channel3PCM[this.channel3lastSampleLookup] >> this.channel3patternType;
+ this.channel3OutputLevelCache();
+}
+GameBoyCore.prototype.channel3WriteRAM = function (address, data) {
+ if (this.channel3canPlay) {
+ this.audioJIT();
+ //address = this.channel3lastSampleLookup >> 1;
+ }
+ this.memory[0xFF30 | address] = data;
+ address <<= 1;
+ this.channel3PCM[address] = data >> 4;
+ this.channel3PCM[address | 1] = data & 0xF;
+}
+GameBoyCore.prototype.channel4UpdateCache = function () {
+ this.cachedChannel4Sample = this.noiseSampleTable[this.channel4currentVolume | this.channel4lastSampleLookup];
+ this.channel4OutputLevelCache();
+}
+GameBoyCore.prototype.run = function () {
+ //The preprocessing before the actual iteration loop:
+ if ((this.stopEmulator & 2) == 0) {
+ if ((this.stopEmulator & 1) == 1) {
+ if (!this.CPUStopped) {
+ this.stopEmulator = 0;
+ this.drewFrame = false;
+ this.audioUnderrunAdjustment();
+ this.clockUpdate(); //RTC clocking.
+ if (!this.halt) {
+ this.executeIteration();
+ }
+ else { //Finish the HALT rundown execution.
+ this.CPUTicks = 0;
+ this.calculateHALTPeriod();
+ if (this.halt) {
+ this.updateCoreFull();
+ }
+ else {
+ this.executeIteration();
+ }
+ }
+ //Request the graphics target to be updated:
+ this.requestDraw();
+ }
+ else {
+ this.audioUnderrunAdjustment();
+ this.audioTicks += this.CPUCyclesTotal;
+ this.audioJIT();
+ this.stopEmulator |= 1; //End current loop.
+ }
+ }
+ else { //We can only get here if there was an internal error, but the loop was restarted.
+ cout("Iterator restarted a faulted core.", 2);
+ pause();
+ }
+ }
+}
+
+GameBoyCore.prototype.executeIteration = function () {
+ //Iterate the interpreter loop:
+ var opcodeToExecute = 0;
+ var timedTicks = 0;
+ while (this.stopEmulator == 0) {
+ //Interrupt Arming:
+ switch (this.IRQEnableDelay) {
+ case 1:
+ this.IME = true;
+ this.checkIRQMatching();
+ case 2:
+ --this.IRQEnableDelay;
+ }
+ //Is an IRQ set to fire?:
+ if (this.IRQLineMatched > 0) {
+ //IME is true and and interrupt was matched:
+ this.launchIRQ();
+ }
+ //Fetch the current opcode:
+ opcodeToExecute = this.memoryReader[this.programCounter](this, this.programCounter);
+ //Increment the program counter to the next instruction:
+ this.programCounter = (this.programCounter + 1) & 0xFFFF;
+ //Check for the program counter quirk:
+ if (this.skipPCIncrement) {
+ this.programCounter = (this.programCounter - 1) & 0xFFFF;
+ this.skipPCIncrement = false;
+ }
+ //Get how many CPU cycles the current instruction counts for:
+ this.CPUTicks = this.TICKTable[opcodeToExecute];
+ //Execute the current instruction:
+ this.OPCODE[opcodeToExecute](this);
+ //Update the state (Inlined updateCoreFull manually here):
+ //Update the clocking for the LCD emulation:
+ this.LCDTicks += this.CPUTicks >> this.doubleSpeedShifter; //LCD Timing
+ this.LCDCONTROL[this.actualScanLine](this); //Scan Line and STAT Mode Control
+ //Single-speed relative timing for A/V emulation:
+ timedTicks = this.CPUTicks >> this.doubleSpeedShifter; //CPU clocking can be updated from the LCD handling.
+ this.audioTicks += timedTicks; //Audio Timing
+ this.emulatorTicks += timedTicks; //Emulator Timing
+ //CPU Timers:
+ this.DIVTicks += this.CPUTicks; //DIV Timing
+ if (this.TIMAEnabled) { //TIMA Timing
+ this.timerTicks += this.CPUTicks;
+ while (this.timerTicks >= this.TACClocker) {
+ this.timerTicks -= this.TACClocker;
+ if (++this.memory[0xFF05] == 0x100) {
+ this.memory[0xFF05] = this.memory[0xFF06];
+ this.interruptsRequested |= 0x4;
+ this.checkIRQMatching();
+ }
+ }
+ }
+ if (this.serialTimer > 0) { //Serial Timing
+ //IRQ Counter:
+ this.serialTimer -= this.CPUTicks;
+ if (this.serialTimer <= 0) {
+ this.interruptsRequested |= 0x8;
+ this.checkIRQMatching();
+ }
+ //Bit Shit Counter:
+ this.serialShiftTimer -= this.CPUTicks;
+ if (this.serialShiftTimer <= 0) {
+ this.serialShiftTimer = this.serialShiftTimerAllocated;
+ this.memory[0xFF01] = ((this.memory[0xFF01] << 1) & 0xFE) | 0x01; //We could shift in actual link data here if we were to implement such!!!
+ }
+ }
+ //End of iteration routine:
+ if (this.emulatorTicks >= this.CPUCyclesTotal) {
+ this.iterationEndRoutine();
+ }
+ // Start of code added for benchmarking:
+ this.instructions += 1;
+ if (this.instructions > this.totalInstructions) {
+ this.iterationEndRoutine();
+ this.stopEmulator |= 2;
+ checkFinalState();
+ }
+ // End of code added for benchmarking.
+ }
+}
+GameBoyCore.prototype.iterationEndRoutine = function () {
+ if ((this.stopEmulator & 0x1) == 0) {
+ this.audioJIT(); //Make sure we at least output once per iteration.
+ //Update DIV Alignment (Integer overflow safety):
+ this.memory[0xFF04] = (this.memory[0xFF04] + (this.DIVTicks >> 8)) & 0xFF;
+ this.DIVTicks &= 0xFF;
+ //Update emulator flags:
+ this.stopEmulator |= 1; //End current loop.
+ this.emulatorTicks -= this.CPUCyclesTotal;
+ this.CPUCyclesTotalCurrent += this.CPUCyclesTotalRoundoff;
+ this.recalculateIterationClockLimit();
+ }
+}
+GameBoyCore.prototype.handleSTOP = function () {
+ this.CPUStopped = true; //Stop CPU until joypad input changes.
+ this.iterationEndRoutine();
+ if (this.emulatorTicks < 0) {
+ this.audioTicks -= this.emulatorTicks;
+ this.audioJIT();
+ }
+}
+GameBoyCore.prototype.recalculateIterationClockLimit = function () {
+ var endModulus = this.CPUCyclesTotalCurrent % 4;
+ this.CPUCyclesTotal = this.CPUCyclesTotalBase + this.CPUCyclesTotalCurrent - endModulus;
+ this.CPUCyclesTotalCurrent = endModulus;
+}
+GameBoyCore.prototype.scanLineMode2 = function () { //OAM Search Period
+ if (this.STATTracker != 1) {
+ if (this.mode2TriggerSTAT) {
+ this.interruptsRequested |= 0x2;
+ this.checkIRQMatching();
+ }
+ this.STATTracker = 1;
+ this.modeSTAT = 2;
+ }
+}
+GameBoyCore.prototype.scanLineMode3 = function () { //Scan Line Drawing Period
+ if (this.modeSTAT != 3) {
+ if (this.STATTracker == 0 && this.mode2TriggerSTAT) {
+ this.interruptsRequested |= 0x2;
+ this.checkIRQMatching();
+ }
+ this.STATTracker = 1;
+ this.modeSTAT = 3;
+ }
+}
+GameBoyCore.prototype.scanLineMode0 = function () { //Horizontal Blanking Period
+ if (this.modeSTAT != 0) {
+ if (this.STATTracker != 2) {
+ if (this.STATTracker == 0) {
+ if (this.mode2TriggerSTAT) {
+ this.interruptsRequested |= 0x2;
+ this.checkIRQMatching();
+ }
+ this.modeSTAT = 3;
+ }
+ this.incrementScanLineQueue();
+ this.updateSpriteCount(this.actualScanLine);
+ this.STATTracker = 2;
+ }
+ if (this.LCDTicks >= this.spriteCount) {
+ if (this.hdmaRunning) {
+ this.executeHDMA();
+ }
+ if (this.mode0TriggerSTAT) {
+ this.interruptsRequested |= 0x2;
+ this.checkIRQMatching();
+ }
+ this.STATTracker = 3;
+ this.modeSTAT = 0;
+ }
+ }
+}
+GameBoyCore.prototype.clocksUntilLYCMatch = function () {
+ if (this.memory[0xFF45] != 0) {
+ if (this.memory[0xFF45] > this.actualScanLine) {
+ return 456 * (this.memory[0xFF45] - this.actualScanLine);
+ }
+ return 456 * (154 - this.actualScanLine + this.memory[0xFF45]);
+ }
+ return (456 * ((this.actualScanLine == 153 && this.memory[0xFF44] == 0) ? 154 : (153 - this.actualScanLine))) + 8;
+}
+GameBoyCore.prototype.clocksUntilMode0 = function () {
+ switch (this.modeSTAT) {
+ case 0:
+ if (this.actualScanLine == 143) {
+ this.updateSpriteCount(0);
+ return this.spriteCount + 5016;
+ }
+ this.updateSpriteCount(this.actualScanLine + 1);
+ return this.spriteCount + 456;
+ case 2:
+ case 3:
+ this.updateSpriteCount(this.actualScanLine);
+ return this.spriteCount;
+ case 1:
+ this.updateSpriteCount(0);
+ return this.spriteCount + (456 * (154 - this.actualScanLine));
+ }
+}
+GameBoyCore.prototype.updateSpriteCount = function (line) {
+ this.spriteCount = 252;
+ if (this.cGBC && this.gfxSpriteShow) { //Is the window enabled and are we in CGB mode?
+ var lineAdjusted = line + 0x10;
+ var yoffset = 0;
+ var yCap = (this.gfxSpriteNormalHeight) ? 0x8 : 0x10;
+ for (var OAMAddress = 0xFE00; OAMAddress < 0xFEA0 && this.spriteCount < 312; OAMAddress += 4) {
+ yoffset = lineAdjusted - this.memory[OAMAddress];
+ if (yoffset > -1 && yoffset < yCap) {
+ this.spriteCount += 6;
+ }
+ }
+ }
+}
+GameBoyCore.prototype.matchLYC = function () { //LYC Register Compare
+ if (this.memory[0xFF44] == this.memory[0xFF45]) {
+ this.memory[0xFF41] |= 0x04;
+ if (this.LYCMatchTriggerSTAT) {
+ this.interruptsRequested |= 0x2;
+ this.checkIRQMatching();
+ }
+ }
+ else {
+ this.memory[0xFF41] &= 0x7B;
+ }
+}
+GameBoyCore.prototype.updateCore = function () {
+ //Update the clocking for the LCD emulation:
+ this.LCDTicks += this.CPUTicks >> this.doubleSpeedShifter; //LCD Timing
+ this.LCDCONTROL[this.actualScanLine](this); //Scan Line and STAT Mode Control
+ //Single-speed relative timing for A/V emulation:
+ var timedTicks = this.CPUTicks >> this.doubleSpeedShifter; //CPU clocking can be updated from the LCD handling.
+ this.audioTicks += timedTicks; //Audio Timing
+ this.emulatorTicks += timedTicks; //Emulator Timing
+ //CPU Timers:
+ this.DIVTicks += this.CPUTicks; //DIV Timing
+ if (this.TIMAEnabled) { //TIMA Timing
+ this.timerTicks += this.CPUTicks;
+ while (this.timerTicks >= this.TACClocker) {
+ this.timerTicks -= this.TACClocker;
+ if (++this.memory[0xFF05] == 0x100) {
+ this.memory[0xFF05] = this.memory[0xFF06];
+ this.interruptsRequested |= 0x4;
+ this.checkIRQMatching();
+ }
+ }
+ }
+ if (this.serialTimer > 0) { //Serial Timing
+ //IRQ Counter:
+ this.serialTimer -= this.CPUTicks;
+ if (this.serialTimer <= 0) {
+ this.interruptsRequested |= 0x8;
+ this.checkIRQMatching();
+ }
+ //Bit Shit Counter:
+ this.serialShiftTimer -= this.CPUTicks;
+ if (this.serialShiftTimer <= 0) {
+ this.serialShiftTimer = this.serialShiftTimerAllocated;
+ this.memory[0xFF01] = ((this.memory[0xFF01] << 1) & 0xFE) | 0x01; //We could shift in actual link data here if we were to implement such!!!
+ }
+ }
+}
+GameBoyCore.prototype.updateCoreFull = function () {
+ //Update the state machine:
+ this.updateCore();
+ //End of iteration routine:
+ if (this.emulatorTicks >= this.CPUCyclesTotal) {
+ this.iterationEndRoutine();
+ }
+}
+GameBoyCore.prototype.initializeLCDController = function () {
+ //Display on hanlding:
+ var line = 0;
+ while (line < 154) {
+ if (line < 143) {
+ //We're on a normal scan line:
+ this.LINECONTROL[line] = function (parentObj) {
+ if (parentObj.LCDTicks < 80) {
+ parentObj.scanLineMode2();
+ }
+ else if (parentObj.LCDTicks < 252) {
+ parentObj.scanLineMode3();
+ }
+ else if (parentObj.LCDTicks < 456) {
+ parentObj.scanLineMode0();
+ }
+ else {
+ //We're on a new scan line:
+ parentObj.LCDTicks -= 456;
+ if (parentObj.STATTracker != 3) {
+ //Make sure the mode 0 handler was run at least once per scan line:
+ if (parentObj.STATTracker != 2) {
+ if (parentObj.STATTracker == 0 && parentObj.mode2TriggerSTAT) {
+ parentObj.interruptsRequested |= 0x2;
+ }
+ parentObj.incrementScanLineQueue();
+ }
+ if (parentObj.hdmaRunning) {
+ parentObj.executeHDMA();
+ }
+ if (parentObj.mode0TriggerSTAT) {
+ parentObj.interruptsRequested |= 0x2;
+ }
+ }
+ //Update the scanline registers and assert the LYC counter:
+ parentObj.actualScanLine = ++parentObj.memory[0xFF44];
+ //Perform a LYC counter assert:
+ if (parentObj.actualScanLine == parentObj.memory[0xFF45]) {
+ parentObj.memory[0xFF41] |= 0x04;
+ if (parentObj.LYCMatchTriggerSTAT) {
+ parentObj.interruptsRequested |= 0x2;
+ }
+ }
+ else {
+ parentObj.memory[0xFF41] &= 0x7B;
+ }
+ parentObj.checkIRQMatching();
+ //Reset our mode contingency variables:
+ parentObj.STATTracker = 0;
+ parentObj.modeSTAT = 2;
+ parentObj.LINECONTROL[parentObj.actualScanLine](parentObj); //Scan Line and STAT Mode Control.
+ }
+ }
+ }
+ else if (line == 143) {
+ //We're on the last visible scan line of the LCD screen:
+ this.LINECONTROL[143] = function (parentObj) {
+ if (parentObj.LCDTicks < 80) {
+ parentObj.scanLineMode2();
+ }
+ else if (parentObj.LCDTicks < 252) {
+ parentObj.scanLineMode3();
+ }
+ else if (parentObj.LCDTicks < 456) {
+ parentObj.scanLineMode0();
+ }
+ else {
+ //Starting V-Blank:
+ //Just finished the last visible scan line:
+ parentObj.LCDTicks -= 456;
+ if (parentObj.STATTracker != 3) {
+ //Make sure the mode 0 handler was run at least once per scan line:
+ if (parentObj.STATTracker != 2) {
+ if (parentObj.STATTracker == 0 && parentObj.mode2TriggerSTAT) {
+ parentObj.interruptsRequested |= 0x2;
+ }
+ parentObj.incrementScanLineQueue();
+ }
+ if (parentObj.hdmaRunning) {
+ parentObj.executeHDMA();
+ }
+ if (parentObj.mode0TriggerSTAT) {
+ parentObj.interruptsRequested |= 0x2;
+ }
+ }
+ //Update the scanline registers and assert the LYC counter:
+ parentObj.actualScanLine = parentObj.memory[0xFF44] = 144;
+ //Perform a LYC counter assert:
+ if (parentObj.memory[0xFF45] == 144) {
+ parentObj.memory[0xFF41] |= 0x04;
+ if (parentObj.LYCMatchTriggerSTAT) {
+ parentObj.interruptsRequested |= 0x2;
+ }
+ }
+ else {
+ parentObj.memory[0xFF41] &= 0x7B;
+ }
+ //Reset our mode contingency variables:
+ parentObj.STATTracker = 0;
+ //Update our state for v-blank:
+ parentObj.modeSTAT = 1;
+ parentObj.interruptsRequested |= (parentObj.mode1TriggerSTAT) ? 0x3 : 0x1;
+ parentObj.checkIRQMatching();
+ //Attempt to blit out to our canvas:
+ if (parentObj.drewBlank == 0) {
+ //Ensure JIT framing alignment:
+ if (parentObj.totalLinesPassed < 144 || (parentObj.totalLinesPassed == 144 && parentObj.midScanlineOffset > -1)) {
+ //Make sure our gfx are up-to-date:
+ parentObj.graphicsJITVBlank();
+ //Draw the frame:
+ parentObj.prepareFrame();
+ }
+ }
+ else {
+ //LCD off takes at least 2 frames:
+ --parentObj.drewBlank;
+ }
+ parentObj.LINECONTROL[144](parentObj); //Scan Line and STAT Mode Control.
+ }
+ }
+ }
+ else if (line < 153) {
+ //In VBlank
+ this.LINECONTROL[line] = function (parentObj) {
+ if (parentObj.LCDTicks >= 456) {
+ //We're on a new scan line:
+ parentObj.LCDTicks -= 456;
+ parentObj.actualScanLine = ++parentObj.memory[0xFF44];
+ //Perform a LYC counter assert:
+ if (parentObj.actualScanLine == parentObj.memory[0xFF45]) {
+ parentObj.memory[0xFF41] |= 0x04;
+ if (parentObj.LYCMatchTriggerSTAT) {
+ parentObj.interruptsRequested |= 0x2;
+ parentObj.checkIRQMatching();
+ }
+ }
+ else {
+ parentObj.memory[0xFF41] &= 0x7B;
+ }
+ parentObj.LINECONTROL[parentObj.actualScanLine](parentObj); //Scan Line and STAT Mode Control.
+ }
+ }
+ }
+ else {
+ //VBlank Ending (We're on the last actual scan line)
+ this.LINECONTROL[153] = function (parentObj) {
+ if (parentObj.LCDTicks >= 8) {
+ if (parentObj.STATTracker != 4 && parentObj.memory[0xFF44] == 153) {
+ parentObj.memory[0xFF44] = 0; //LY register resets to 0 early.
+ //Perform a LYC counter assert:
+ if (parentObj.memory[0xFF45] == 0) {
+ parentObj.memory[0xFF41] |= 0x04;
+ if (parentObj.LYCMatchTriggerSTAT) {
+ parentObj.interruptsRequested |= 0x2;
+ parentObj.checkIRQMatching();
+ }
+ }
+ else {
+ parentObj.memory[0xFF41] &= 0x7B;
+ }
+ parentObj.STATTracker = 4;
+ }
+ if (parentObj.LCDTicks >= 456) {
+ //We reset back to the beginning:
+ parentObj.LCDTicks -= 456;
+ parentObj.STATTracker = parentObj.actualScanLine = 0;
+ parentObj.LINECONTROL[0](parentObj); //Scan Line and STAT Mode Control.
+ }
+ }
+ }
+ }
+ ++line;
+ }
+}
+GameBoyCore.prototype.DisplayShowOff = function () {
+ if (this.drewBlank == 0) {
+ //Output a blank screen to the output framebuffer:
+ this.clearFrameBuffer();
+ this.drewFrame = true;
+ }
+ this.drewBlank = 2;
+}
+GameBoyCore.prototype.executeHDMA = function () {
+ this.DMAWrite(1);
+ if (this.halt) {
+ if ((this.LCDTicks - this.spriteCount) < ((4 >> this.doubleSpeedShifter) | 0x20)) {
+ //HALT clocking correction:
+ this.CPUTicks = 4 + ((0x20 + this.spriteCount) << this.doubleSpeedShifter);
+ this.LCDTicks = this.spriteCount + ((4 >> this.doubleSpeedShifter) | 0x20);
+ }
+ }
+ else {
+ this.LCDTicks += (4 >> this.doubleSpeedShifter) | 0x20; //LCD Timing Update For HDMA.
+ }
+ if (this.memory[0xFF55] == 0) {
+ this.hdmaRunning = false;
+ this.memory[0xFF55] = 0xFF; //Transfer completed ("Hidden last step," since some ROMs don't imply this, but most do).
+ }
+ else {
+ --this.memory[0xFF55];
+ }
+}
+GameBoyCore.prototype.clockUpdate = function () {
+ if (this.cTIMER) {
+ var dateObj = new_Date(); // The line is changed for benchmarking.
+ var newTime = dateObj.getTime();
+ var timeElapsed = newTime - this.lastIteration; //Get the numnber of milliseconds since this last executed.
+ this.lastIteration = newTime;
+ if (this.cTIMER && !this.RTCHALT) {
+ //Update the MBC3 RTC:
+ this.RTCSeconds += timeElapsed / 1000;
+ while (this.RTCSeconds >= 60) { //System can stutter, so the seconds difference can get large, thus the "while".
+ this.RTCSeconds -= 60;
+ ++this.RTCMinutes;
+ if (this.RTCMinutes >= 60) {
+ this.RTCMinutes -= 60;
+ ++this.RTCHours;
+ if (this.RTCHours >= 24) {
+ this.RTCHours -= 24
+ ++this.RTCDays;
+ if (this.RTCDays >= 512) {
+ this.RTCDays -= 512;
+ this.RTCDayOverFlow = true;
+ }
+ }
+ }
+ }
+ }
+ }
+}
+GameBoyCore.prototype.prepareFrame = function () {
+ //Copy the internal frame buffer to the output buffer:
+ this.swizzleFrameBuffer();
+ this.drewFrame = true;
+}
+GameBoyCore.prototype.requestDraw = function () {
+ if (this.drewFrame) {
+ this.dispatchDraw();
+ }
+}
+GameBoyCore.prototype.dispatchDraw = function () {
+ var canvasRGBALength = this.offscreenRGBCount;
+ if (canvasRGBALength > 0) {
+ //We actually updated the graphics internally, so copy out:
+ var frameBuffer = (canvasRGBALength == 92160) ? this.swizzledFrame : this.resizeFrameBuffer();
+ var canvasData = this.canvasBuffer.data;
+ var bufferIndex = 0;
+ for (var canvasIndex = 0; canvasIndex < canvasRGBALength; ++canvasIndex) {
+ canvasData[canvasIndex++] = frameBuffer[bufferIndex++];
+ canvasData[canvasIndex++] = frameBuffer[bufferIndex++];
+ canvasData[canvasIndex++] = frameBuffer[bufferIndex++];
+ }
+ this.graphicsBlit();
+ }
+}
+GameBoyCore.prototype.swizzleFrameBuffer = function () {
+ //Convert our dirty 24-bit (24-bit, with internal render flags above it) framebuffer to an 8-bit buffer with separate indices for the RGB channels:
+ var frameBuffer = this.frameBuffer;
+ var swizzledFrame = this.swizzledFrame;
+ var bufferIndex = 0;
+ for (var canvasIndex = 0; canvasIndex < 69120;) {
+ swizzledFrame[canvasIndex++] = (frameBuffer[bufferIndex] >> 16) & 0xFF; //Red
+ swizzledFrame[canvasIndex++] = (frameBuffer[bufferIndex] >> 8) & 0xFF; //Green
+ swizzledFrame[canvasIndex++] = frameBuffer[bufferIndex++] & 0xFF; //Blue
+ }
+}
+GameBoyCore.prototype.clearFrameBuffer = function () {
+ var bufferIndex = 0;
+ var frameBuffer = this.swizzledFrame;
+ if (this.cGBC || this.colorizedGBPalettes) {
+ while (bufferIndex < 69120) {
+ frameBuffer[bufferIndex++] = 248;
+ }
+ }
+ else {
+ while (bufferIndex < 69120) {
+ frameBuffer[bufferIndex++] = 239;
+ frameBuffer[bufferIndex++] = 255;
+ frameBuffer[bufferIndex++] = 222;
+ }
+ }
+}
+GameBoyCore.prototype.resizeFrameBuffer = function () {
+ //Return a reference to the generated resized framebuffer:
+ return this.resizer.resize(this.swizzledFrame);
+}
+GameBoyCore.prototype.compileResizeFrameBufferFunction = function () {
+ if (this.offscreenRGBCount > 0) {
+ this.resizer = new Resize(160, 144, this.offscreenWidth, this.offscreenHeight, false, true);
+ }
+}
+GameBoyCore.prototype.renderScanLine = function (scanlineToRender) {
+ this.pixelStart = scanlineToRender * 160;
+ if (this.bgEnabled) {
+ this.pixelEnd = 160;
+ this.BGLayerRender(scanlineToRender);
+ this.WindowLayerRender(scanlineToRender);
+ }
+ else {
+ var pixelLine = (scanlineToRender + 1) * 160;
+ var defaultColor = (this.cGBC || this.colorizedGBPalettes) ? 0xF8F8F8 : 0xEFFFDE;
+ for (var pixelPosition = (scanlineToRender * 160) + this.currentX; pixelPosition < pixelLine; pixelPosition++) {
+ this.frameBuffer[pixelPosition] = defaultColor;
+ }
+ }
+ this.SpriteLayerRender(scanlineToRender);
+ this.currentX = 0;
+ this.midScanlineOffset = -1;
+}
+GameBoyCore.prototype.renderMidScanLine = function () {
+ if (this.actualScanLine < 144 && this.modeSTAT == 3) {
+ //TODO: Get this accurate:
+ if (this.midScanlineOffset == -1) {
+ this.midScanlineOffset = this.backgroundX & 0x7;
+ }
+ if (this.LCDTicks >= 82) {
+ this.pixelEnd = this.LCDTicks - 74;
+ this.pixelEnd = Math.min(this.pixelEnd - this.midScanlineOffset - (this.pixelEnd % 0x8), 160);
+ if (this.bgEnabled) {
+ this.pixelStart = this.lastUnrenderedLine * 160;
+ this.BGLayerRender(this.lastUnrenderedLine);
+ this.WindowLayerRender(this.lastUnrenderedLine);
+ //TODO: Do midscanline JIT for sprites...
+ }
+ else {
+ var pixelLine = (this.lastUnrenderedLine * 160) + this.pixelEnd;
+ var defaultColor = (this.cGBC || this.colorizedGBPalettes) ? 0xF8F8F8 : 0xEFFFDE;
+ for (var pixelPosition = (this.lastUnrenderedLine * 160) + this.currentX; pixelPosition < pixelLine; pixelPosition++) {
+ this.frameBuffer[pixelPosition] = defaultColor;
+ }
+ }
+ this.currentX = this.pixelEnd;
+ }
+ }
+}
+GameBoyCore.prototype.initializeModeSpecificArrays = function () {
+ this.LCDCONTROL = (this.LCDisOn) ? this.LINECONTROL : this.DISPLAYOFFCONTROL;
+ if (this.cGBC) {
+ this.gbcOBJRawPalette = this.getTypedArray(0x40, 0, "uint8");
+ this.gbcBGRawPalette = this.getTypedArray(0x40, 0, "uint8");
+ this.gbcOBJPalette = this.getTypedArray(0x20, 0x1000000, "int32");
+ this.gbcBGPalette = this.getTypedArray(0x40, 0, "int32");
+ this.BGCHRBank2 = this.getTypedArray(0x800, 0, "uint8");
+ this.BGCHRCurrentBank = (this.currVRAMBank > 0) ? this.BGCHRBank2 : this.BGCHRBank1;
+ this.tileCache = this.generateCacheArray(0xF80);
+ }
+ else {
+ this.gbOBJPalette = this.getTypedArray(8, 0, "int32");
+ this.gbBGPalette = this.getTypedArray(4, 0, "int32");
+ this.BGPalette = this.gbBGPalette;
+ this.OBJPalette = this.gbOBJPalette;
+ this.tileCache = this.generateCacheArray(0x700);
+ this.sortBuffer = this.getTypedArray(0x100, 0, "uint8");
+ this.OAMAddressCache = this.getTypedArray(10, 0, "int32");
+ }
+ this.renderPathBuild();
+}
+GameBoyCore.prototype.GBCtoGBModeAdjust = function () {
+ cout("Stepping down from GBC mode.", 0);
+ this.VRAM = this.GBCMemory = this.BGCHRCurrentBank = this.BGCHRBank2 = null;
+ this.tileCache.length = 0x700;
+ if (settings[4]) {
+ this.gbBGColorizedPalette = this.getTypedArray(4, 0, "int32");
+ this.gbOBJColorizedPalette = this.getTypedArray(8, 0, "int32");
+ this.cachedBGPaletteConversion = this.getTypedArray(4, 0, "int32");
+ this.cachedOBJPaletteConversion = this.getTypedArray(8, 0, "int32");
+ this.BGPalette = this.gbBGColorizedPalette;
+ this.OBJPalette = this.gbOBJColorizedPalette;
+ this.gbOBJPalette = this.gbBGPalette = null;
+ this.getGBCColor();
+ }
+ else {
+ this.gbOBJPalette = this.getTypedArray(8, 0, "int32");
+ this.gbBGPalette = this.getTypedArray(4, 0, "int32");
+ this.BGPalette = this.gbBGPalette;
+ this.OBJPalette = this.gbOBJPalette;
+ }
+ this.sortBuffer = this.getTypedArray(0x100, 0, "uint8");
+ this.OAMAddressCache = this.getTypedArray(10, 0, "int32");
+ this.renderPathBuild();
+ this.memoryReadJumpCompile();
+ this.memoryWriteJumpCompile();
+}
+GameBoyCore.prototype.renderPathBuild = function () {
+ if (!this.cGBC) {
+ this.BGLayerRender = this.BGGBLayerRender;
+ this.WindowLayerRender = this.WindowGBLayerRender;
+ this.SpriteLayerRender = this.SpriteGBLayerRender;
+ }
+ else {
+ this.priorityFlaggingPathRebuild();
+ this.SpriteLayerRender = this.SpriteGBCLayerRender;
+ }
+}
+GameBoyCore.prototype.priorityFlaggingPathRebuild = function () {
+ if (this.BGPriorityEnabled) {
+ this.BGLayerRender = this.BGGBCLayerRender;
+ this.WindowLayerRender = this.WindowGBCLayerRender;
+ }
+ else {
+ this.BGLayerRender = this.BGGBCLayerRenderNoPriorityFlagging;
+ this.WindowLayerRender = this.WindowGBCLayerRenderNoPriorityFlagging;
+ }
+}
+GameBoyCore.prototype.initializeReferencesFromSaveState = function () {
+ this.LCDCONTROL = (this.LCDisOn) ? this.LINECONTROL : this.DISPLAYOFFCONTROL;
+ var tileIndex = 0;
+ if (!this.cGBC) {
+ if (this.colorizedGBPalettes) {
+ this.BGPalette = this.gbBGColorizedPalette;
+ this.OBJPalette = this.gbOBJColorizedPalette;
+ this.updateGBBGPalette = this.updateGBColorizedBGPalette;
+ this.updateGBOBJPalette = this.updateGBColorizedOBJPalette;
+
+ }
+ else {
+ this.BGPalette = this.gbBGPalette;
+ this.OBJPalette = this.gbOBJPalette;
+ }
+ this.tileCache = this.generateCacheArray(0x700);
+ for (tileIndex = 0x8000; tileIndex < 0x9000; tileIndex += 2) {
+ this.generateGBOAMTileLine(tileIndex);
+ }
+ for (tileIndex = 0x9000; tileIndex < 0x9800; tileIndex += 2) {
+ this.generateGBTileLine(tileIndex);
+ }
+ this.sortBuffer = this.getTypedArray(0x100, 0, "uint8");
+ this.OAMAddressCache = this.getTypedArray(10, 0, "int32");
+ }
+ else {
+ this.BGCHRCurrentBank = (this.currVRAMBank > 0) ? this.BGCHRBank2 : this.BGCHRBank1;
+ this.tileCache = this.generateCacheArray(0xF80);
+ for (; tileIndex < 0x1800; tileIndex += 0x10) {
+ this.generateGBCTileBank1(tileIndex);
+ this.generateGBCTileBank2(tileIndex);
+ }
+ }
+ this.renderPathBuild();
+}
+GameBoyCore.prototype.RGBTint = function (value) {
+ //Adjustment for the GBC's tinting (According to Gambatte):
+ var r = value & 0x1F;
+ var g = (value >> 5) & 0x1F;
+ var b = (value >> 10) & 0x1F;
+ return ((r * 13 + g * 2 + b) >> 1) << 16 | (g * 3 + b) << 9 | (r * 3 + g * 2 + b * 11) >> 1;
+}
+GameBoyCore.prototype.getGBCColor = function () {
+ //GBC Colorization of DMG ROMs:
+ //BG
+ for (var counter = 0; counter < 4; counter++) {
+ var adjustedIndex = counter << 1;
+ //BG
+ this.cachedBGPaletteConversion[counter] = this.RGBTint((this.gbcBGRawPalette[adjustedIndex | 1] << 8) | this.gbcBGRawPalette[adjustedIndex]);
+ //OBJ 1
+ this.cachedOBJPaletteConversion[counter] = this.RGBTint((this.gbcOBJRawPalette[adjustedIndex | 1] << 8) | this.gbcOBJRawPalette[adjustedIndex]);
+ }
+ //OBJ 2
+ for (counter = 4; counter < 8; counter++) {
+ adjustedIndex = counter << 1;
+ this.cachedOBJPaletteConversion[counter] = this.RGBTint((this.gbcOBJRawPalette[adjustedIndex | 1] << 8) | this.gbcOBJRawPalette[adjustedIndex]);
+ }
+ //Update the palette entries:
+ this.updateGBBGPalette = this.updateGBColorizedBGPalette;
+ this.updateGBOBJPalette = this.updateGBColorizedOBJPalette;
+ this.updateGBBGPalette(this.memory[0xFF47]);
+ this.updateGBOBJPalette(0, this.memory[0xFF48]);
+ this.updateGBOBJPalette(1, this.memory[0xFF49]);
+ this.colorizedGBPalettes = true;
+}
+GameBoyCore.prototype.updateGBRegularBGPalette = function (data) {
+ this.gbBGPalette[0] = this.colors[data & 0x03] | 0x2000000;
+ this.gbBGPalette[1] = this.colors[(data >> 2) & 0x03];
+ this.gbBGPalette[2] = this.colors[(data >> 4) & 0x03];
+ this.gbBGPalette[3] = this.colors[data >> 6];
+}
+GameBoyCore.prototype.updateGBColorizedBGPalette = function (data) {
+ //GB colorization:
+ this.gbBGColorizedPalette[0] = this.cachedBGPaletteConversion[data & 0x03] | 0x2000000;
+ this.gbBGColorizedPalette[1] = this.cachedBGPaletteConversion[(data >> 2) & 0x03];
+ this.gbBGColorizedPalette[2] = this.cachedBGPaletteConversion[(data >> 4) & 0x03];
+ this.gbBGColorizedPalette[3] = this.cachedBGPaletteConversion[data >> 6];
+}
+GameBoyCore.prototype.updateGBRegularOBJPalette = function (index, data) {
+ this.gbOBJPalette[index | 1] = this.colors[(data >> 2) & 0x03];
+ this.gbOBJPalette[index | 2] = this.colors[(data >> 4) & 0x03];
+ this.gbOBJPalette[index | 3] = this.colors[data >> 6];
+}
+GameBoyCore.prototype.updateGBColorizedOBJPalette = function (index, data) {
+ //GB colorization:
+ this.gbOBJColorizedPalette[index | 1] = this.cachedOBJPaletteConversion[index | ((data >> 2) & 0x03)];
+ this.gbOBJColorizedPalette[index | 2] = this.cachedOBJPaletteConversion[index | ((data >> 4) & 0x03)];
+ this.gbOBJColorizedPalette[index | 3] = this.cachedOBJPaletteConversion[index | (data >> 6)];
+}
+GameBoyCore.prototype.updateGBCBGPalette = function (index, data) {
+ if (this.gbcBGRawPalette[index] != data) {
+ this.midScanLineJIT();
+ //Update the color palette for BG tiles since it changed:
+ this.gbcBGRawPalette[index] = data;
+ if ((index & 0x06) == 0) {
+ //Palette 0 (Special tile Priority stuff)
+ data = 0x2000000 | this.RGBTint((this.gbcBGRawPalette[index | 1] << 8) | this.gbcBGRawPalette[index & 0x3E]);
+ index >>= 1;
+ this.gbcBGPalette[index] = data;
+ this.gbcBGPalette[0x20 | index] = 0x1000000 | data;
+ }
+ else {
+ //Regular Palettes (No special crap)
+ data = this.RGBTint((this.gbcBGRawPalette[index | 1] << 8) | this.gbcBGRawPalette[index & 0x3E]);
+ index >>= 1;
+ this.gbcBGPalette[index] = data;
+ this.gbcBGPalette[0x20 | index] = 0x1000000 | data;
+ }
+ }
+}
+GameBoyCore.prototype.updateGBCOBJPalette = function (index, data) {
+ if (this.gbcOBJRawPalette[index] != data) {
+ //Update the color palette for OBJ tiles since it changed:
+ this.gbcOBJRawPalette[index] = data;
+ if ((index & 0x06) > 0) {
+ //Regular Palettes (No special crap)
+ this.midScanLineJIT();
+ this.gbcOBJPalette[index >> 1] = 0x1000000 | this.RGBTint((this.gbcOBJRawPalette[index | 1] << 8) | this.gbcOBJRawPalette[index & 0x3E]);
+ }
+ }
+}
+GameBoyCore.prototype.BGGBLayerRender = function (scanlineToRender) {
+ var scrollYAdjusted = (this.backgroundY + scanlineToRender) & 0xFF; //The line of the BG we're at.
+ var tileYLine = (scrollYAdjusted & 7) << 3;
+ var tileYDown = this.gfxBackgroundCHRBankPosition | ((scrollYAdjusted & 0xF8) << 2); //The row of cached tiles we're fetching from.
+ var scrollXAdjusted = (this.backgroundX + this.currentX) & 0xFF; //The scroll amount of the BG.
+ var pixelPosition = this.pixelStart + this.currentX; //Current pixel we're working on.
+ var pixelPositionEnd = this.pixelStart + ((this.gfxWindowDisplay && (scanlineToRender - this.windowY) >= 0) ? Math.min(Math.max(this.windowX, 0) + this.currentX, this.pixelEnd) : this.pixelEnd); //Make sure we do at most 160 pixels a scanline.
+ var tileNumber = tileYDown + (scrollXAdjusted >> 3);
+ var chrCode = this.BGCHRBank1[tileNumber];
+ if (chrCode < this.gfxBackgroundBankOffset) {
+ chrCode |= 0x100;
+ }
+ var tile = this.tileCache[chrCode];
+ for (var texel = (scrollXAdjusted & 0x7); texel < 8 && pixelPosition < pixelPositionEnd && scrollXAdjusted < 0x100; ++scrollXAdjusted) {
+ this.frameBuffer[pixelPosition++] = this.BGPalette[tile[tileYLine | texel++]];
+ }
+ var scrollXAdjustedAligned = Math.min(pixelPositionEnd - pixelPosition, 0x100 - scrollXAdjusted) >> 3;
+ scrollXAdjusted += scrollXAdjustedAligned << 3;
+ scrollXAdjustedAligned += tileNumber;
+ while (tileNumber < scrollXAdjustedAligned) {
+ chrCode = this.BGCHRBank1[++tileNumber];
+ if (chrCode < this.gfxBackgroundBankOffset) {
+ chrCode |= 0x100;
+ }
+ tile = this.tileCache[chrCode];
+ texel = tileYLine;
+ this.frameBuffer[pixelPosition++] = this.BGPalette[tile[texel++]];
+ this.frameBuffer[pixelPosition++] = this.BGPalette[tile[texel++]];
+ this.frameBuffer[pixelPosition++] = this.BGPalette[tile[texel++]];
+ this.frameBuffer[pixelPosition++] = this.BGPalette[tile[texel++]];
+ this.frameBuffer[pixelPosition++] = this.BGPalette[tile[texel++]];
+ this.frameBuffer[pixelPosition++] = this.BGPalette[tile[texel++]];
+ this.frameBuffer[pixelPosition++] = this.BGPalette[tile[texel++]];
+ this.frameBuffer[pixelPosition++] = this.BGPalette[tile[texel]];
+ }
+ if (pixelPosition < pixelPositionEnd) {
+ if (scrollXAdjusted < 0x100) {
+ chrCode = this.BGCHRBank1[++tileNumber];
+ if (chrCode < this.gfxBackgroundBankOffset) {
+ chrCode |= 0x100;
+ }
+ tile = this.tileCache[chrCode];
+ for (texel = tileYLine - 1; pixelPosition < pixelPositionEnd && scrollXAdjusted < 0x100; ++scrollXAdjusted) {
+ this.frameBuffer[pixelPosition++] = this.BGPalette[tile[++texel]];
+ }
+ }
+ scrollXAdjustedAligned = ((pixelPositionEnd - pixelPosition) >> 3) + tileYDown;
+ while (tileYDown < scrollXAdjustedAligned) {
+ chrCode = this.BGCHRBank1[tileYDown++];
+ if (chrCode < this.gfxBackgroundBankOffset) {
+ chrCode |= 0x100;
+ }
+ tile = this.tileCache[chrCode];
+ texel = tileYLine;
+ this.frameBuffer[pixelPosition++] = this.BGPalette[tile[texel++]];
+ this.frameBuffer[pixelPosition++] = this.BGPalette[tile[texel++]];
+ this.frameBuffer[pixelPosition++] = this.BGPalette[tile[texel++]];
+ this.frameBuffer[pixelPosition++] = this.BGPalette[tile[texel++]];
+ this.frameBuffer[pixelPosition++] = this.BGPalette[tile[texel++]];
+ this.frameBuffer[pixelPosition++] = this.BGPalette[tile[texel++]];
+ this.frameBuffer[pixelPosition++] = this.BGPalette[tile[texel++]];
+ this.frameBuffer[pixelPosition++] = this.BGPalette[tile[texel]];
+ }
+ if (pixelPosition < pixelPositionEnd) {
+ chrCode = this.BGCHRBank1[tileYDown];
+ if (chrCode < this.gfxBackgroundBankOffset) {
+ chrCode |= 0x100;
+ }
+ tile = this.tileCache[chrCode];
+ switch (pixelPositionEnd - pixelPosition) {
+ case 7:
+ this.frameBuffer[pixelPosition + 6] = this.BGPalette[tile[tileYLine | 6]];
+ case 6:
+ this.frameBuffer[pixelPosition + 5] = this.BGPalette[tile[tileYLine | 5]];
+ case 5:
+ this.frameBuffer[pixelPosition + 4] = this.BGPalette[tile[tileYLine | 4]];
+ case 4:
+ this.frameBuffer[pixelPosition + 3] = this.BGPalette[tile[tileYLine | 3]];
+ case 3:
+ this.frameBuffer[pixelPosition + 2] = this.BGPalette[tile[tileYLine | 2]];
+ case 2:
+ this.frameBuffer[pixelPosition + 1] = this.BGPalette[tile[tileYLine | 1]];
+ case 1:
+ this.frameBuffer[pixelPosition] = this.BGPalette[tile[tileYLine]];
+ }
+ }
+ }
+}
+GameBoyCore.prototype.BGGBCLayerRender = function (scanlineToRender) {
+ var scrollYAdjusted = (this.backgroundY + scanlineToRender) & 0xFF; //The line of the BG we're at.
+ var tileYLine = (scrollYAdjusted & 7) << 3;
+ var tileYDown = this.gfxBackgroundCHRBankPosition | ((scrollYAdjusted & 0xF8) << 2); //The row of cached tiles we're fetching from.
+ var scrollXAdjusted = (this.backgroundX + this.currentX) & 0xFF; //The scroll amount of the BG.
+ var pixelPosition = this.pixelStart + this.currentX; //Current pixel we're working on.
+ var pixelPositionEnd = this.pixelStart + ((this.gfxWindowDisplay && (scanlineToRender - this.windowY) >= 0) ? Math.min(Math.max(this.windowX, 0) + this.currentX, this.pixelEnd) : this.pixelEnd); //Make sure we do at most 160 pixels a scanline.
+ var tileNumber = tileYDown + (scrollXAdjusted >> 3);
+ var chrCode = this.BGCHRBank1[tileNumber];
+ if (chrCode < this.gfxBackgroundBankOffset) {
+ chrCode |= 0x100;
+ }
+ var attrCode = this.BGCHRBank2[tileNumber];
+ var tile = this.tileCache[((attrCode & 0x08) << 8) | ((attrCode & 0x60) << 4) | chrCode];
+ var palette = ((attrCode & 0x7) << 2) | ((attrCode & 0x80) >> 2);
+ for (var texel = (scrollXAdjusted & 0x7); texel < 8 && pixelPosition < pixelPositionEnd && scrollXAdjusted < 0x100; ++scrollXAdjusted) {
+ this.frameBuffer[pixelPosition++] = this.gbcBGPalette[palette | tile[tileYLine | texel++]];
+ }
+ var scrollXAdjustedAligned = Math.min(pixelPositionEnd - pixelPosition, 0x100 - scrollXAdjusted) >> 3;
+ scrollXAdjusted += scrollXAdjustedAligned << 3;
+ scrollXAdjustedAligned += tileNumber;
+ while (tileNumber < scrollXAdjustedAligned) {
+ chrCode = this.BGCHRBank1[++tileNumber];
+ if (chrCode < this.gfxBackgroundBankOffset) {
+ chrCode |= 0x100;
+ }
+ attrCode = this.BGCHRBank2[tileNumber];
+ tile = this.tileCache[((attrCode & 0x08) << 8) | ((attrCode & 0x60) << 4) | chrCode];
+ palette = ((attrCode & 0x7) << 2) | ((attrCode & 0x80) >> 2);
+ texel = tileYLine;
+ this.frameBuffer[pixelPosition++] = this.gbcBGPalette[palette | tile[texel++]];
+ this.frameBuffer[pixelPosition++] = this.gbcBGPalette[palette | tile[texel++]];
+ this.frameBuffer[pixelPosition++] = this.gbcBGPalette[palette | tile[texel++]];
+ this.frameBuffer[pixelPosition++] = this.gbcBGPalette[palette | tile[texel++]];
+ this.frameBuffer[pixelPosition++] = this.gbcBGPalette[palette | tile[texel++]];
+ this.frameBuffer[pixelPosition++] = this.gbcBGPalette[palette | tile[texel++]];
+ this.frameBuffer[pixelPosition++] = this.gbcBGPalette[palette | tile[texel++]];
+ this.frameBuffer[pixelPosition++] = this.gbcBGPalette[palette | tile[texel]];
+ }
+ if (pixelPosition < pixelPositionEnd) {
+ if (scrollXAdjusted < 0x100) {
+ chrCode = this.BGCHRBank1[++tileNumber];
+ if (chrCode < this.gfxBackgroundBankOffset) {
+ chrCode |= 0x100;
+ }
+ attrCode = this.BGCHRBank2[tileNumber];
+ tile = this.tileCache[((attrCode & 0x08) << 8) | ((attrCode & 0x60) << 4) | chrCode];
+ palette = ((attrCode & 0x7) << 2) | ((attrCode & 0x80) >> 2);
+ for (texel = tileYLine - 1; pixelPosition < pixelPositionEnd && scrollXAdjusted < 0x100; ++scrollXAdjusted) {
+ this.frameBuffer[pixelPosition++] = this.gbcBGPalette[palette | tile[++texel]];
+ }
+ }
+ scrollXAdjustedAligned = ((pixelPositionEnd - pixelPosition) >> 3) + tileYDown;
+ while (tileYDown < scrollXAdjustedAligned) {
+ chrCode = this.BGCHRBank1[tileYDown];
+ if (chrCode < this.gfxBackgroundBankOffset) {
+ chrCode |= 0x100;
+ }
+ attrCode = this.BGCHRBank2[tileYDown++];
+ tile = this.tileCache[((attrCode & 0x08) << 8) | ((attrCode & 0x60) << 4) | chrCode];
+ palette = ((attrCode & 0x7) << 2) | ((attrCode & 0x80) >> 2);
+ texel = tileYLine;
+ this.frameBuffer[pixelPosition++] = this.gbcBGPalette[palette | tile[texel++]];
+ this.frameBuffer[pixelPosition++] = this.gbcBGPalette[palette | tile[texel++]];
+ this.frameBuffer[pixelPosition++] = this.gbcBGPalette[palette | tile[texel++]];
+ this.frameBuffer[pixelPosition++] = this.gbcBGPalette[palette | tile[texel++]];
+ this.frameBuffer[pixelPosition++] = this.gbcBGPalette[palette | tile[texel++]];
+ this.frameBuffer[pixelPosition++] = this.gbcBGPalette[palette | tile[texel++]];
+ this.frameBuffer[pixelPosition++] = this.gbcBGPalette[palette | tile[texel++]];
+ this.frameBuffer[pixelPosition++] = this.gbcBGPalette[palette | tile[texel]];
+ }
+ if (pixelPosition < pixelPositionEnd) {
+ chrCode = this.BGCHRBank1[tileYDown];
+ if (chrCode < this.gfxBackgroundBankOffset) {
+ chrCode |= 0x100;
+ }
+ attrCode = this.BGCHRBank2[tileYDown];
+ tile = this.tileCache[((attrCode & 0x08) << 8) | ((attrCode & 0x60) << 4) | chrCode];
+ palette = ((attrCode & 0x7) << 2) | ((attrCode & 0x80) >> 2);
+ switch (pixelPositionEnd - pixelPosition) {
+ case 7:
+ this.frameBuffer[pixelPosition + 6] = this.gbcBGPalette[palette | tile[tileYLine | 6]];
+ case 6:
+ this.frameBuffer[pixelPosition + 5] = this.gbcBGPalette[palette | tile[tileYLine | 5]];
+ case 5:
+ this.frameBuffer[pixelPosition + 4] = this.gbcBGPalette[palette | tile[tileYLine | 4]];
+ case 4:
+ this.frameBuffer[pixelPosition + 3] = this.gbcBGPalette[palette | tile[tileYLine | 3]];
+ case 3:
+ this.frameBuffer[pixelPosition + 2] = this.gbcBGPalette[palette | tile[tileYLine | 2]];
+ case 2:
+ this.frameBuffer[pixelPosition + 1] = this.gbcBGPalette[palette | tile[tileYLine | 1]];
+ case 1:
+ this.frameBuffer[pixelPosition] = this.gbcBGPalette[palette | tile[tileYLine]];
+ }
+ }
+ }
+}
+GameBoyCore.prototype.BGGBCLayerRenderNoPriorityFlagging = function (scanlineToRender) {
+ var scrollYAdjusted = (this.backgroundY + scanlineToRender) & 0xFF; //The line of the BG we're at.
+ var tileYLine = (scrollYAdjusted & 7) << 3;
+ var tileYDown = this.gfxBackgroundCHRBankPosition | ((scrollYAdjusted & 0xF8) << 2); //The row of cached tiles we're fetching from.
+ var scrollXAdjusted = (this.backgroundX + this.currentX) & 0xFF; //The scroll amount of the BG.
+ var pixelPosition = this.pixelStart + this.currentX; //Current pixel we're working on.
+ var pixelPositionEnd = this.pixelStart + ((this.gfxWindowDisplay && (scanlineToRender - this.windowY) >= 0) ? Math.min(Math.max(this.windowX, 0) + this.currentX, this.pixelEnd) : this.pixelEnd); //Make sure we do at most 160 pixels a scanline.
+ var tileNumber = tileYDown + (scrollXAdjusted >> 3);
+ var chrCode = this.BGCHRBank1[tileNumber];
+ if (chrCode < this.gfxBackgroundBankOffset) {
+ chrCode |= 0x100;
+ }
+ var attrCode = this.BGCHRBank2[tileNumber];
+ var tile = this.tileCache[((attrCode & 0x08) << 8) | ((attrCode & 0x60) << 4) | chrCode];
+ var palette = (attrCode & 0x7) << 2;
+ for (var texel = (scrollXAdjusted & 0x7); texel < 8 && pixelPosition < pixelPositionEnd && scrollXAdjusted < 0x100; ++scrollXAdjusted) {
+ this.frameBuffer[pixelPosition++] = this.gbcBGPalette[palette | tile[tileYLine | texel++]];
+ }
+ var scrollXAdjustedAligned = Math.min(pixelPositionEnd - pixelPosition, 0x100 - scrollXAdjusted) >> 3;
+ scrollXAdjusted += scrollXAdjustedAligned << 3;
+ scrollXAdjustedAligned += tileNumber;
+ while (tileNumber < scrollXAdjustedAligned) {
+ chrCode = this.BGCHRBank1[++tileNumber];
+ if (chrCode < this.gfxBackgroundBankOffset) {
+ chrCode |= 0x100;
+ }
+ attrCode = this.BGCHRBank2[tileNumber];
+ tile = this.tileCache[((attrCode & 0x08) << 8) | ((attrCode & 0x60) << 4) | chrCode];
+ palette = (attrCode & 0x7) << 2;
+ texel = tileYLine;
+ this.frameBuffer[pixelPosition++] = this.gbcBGPalette[palette | tile[texel++]];
+ this.frameBuffer[pixelPosition++] = this.gbcBGPalette[palette | tile[texel++]];
+ this.frameBuffer[pixelPosition++] = this.gbcBGPalette[palette | tile[texel++]];
+ this.frameBuffer[pixelPosition++] = this.gbcBGPalette[palette | tile[texel++]];
+ this.frameBuffer[pixelPosition++] = this.gbcBGPalette[palette | tile[texel++]];
+ this.frameBuffer[pixelPosition++] = this.gbcBGPalette[palette | tile[texel++]];
+ this.frameBuffer[pixelPosition++] = this.gbcBGPalette[palette | tile[texel++]];
+ this.frameBuffer[pixelPosition++] = this.gbcBGPalette[palette | tile[texel]];
+ }
+ if (pixelPosition < pixelPositionEnd) {
+ if (scrollXAdjusted < 0x100) {
+ chrCode = this.BGCHRBank1[++tileNumber];
+ if (chrCode < this.gfxBackgroundBankOffset) {
+ chrCode |= 0x100;
+ }
+ attrCode = this.BGCHRBank2[tileNumber];
+ tile = this.tileCache[((attrCode & 0x08) << 8) | ((attrCode & 0x60) << 4) | chrCode];
+ palette = (attrCode & 0x7) << 2;
+ for (texel = tileYLine - 1; pixelPosition < pixelPositionEnd && scrollXAdjusted < 0x100; ++scrollXAdjusted) {
+ this.frameBuffer[pixelPosition++] = this.gbcBGPalette[palette | tile[++texel]];
+ }
+ }
+ scrollXAdjustedAligned = ((pixelPositionEnd - pixelPosition) >> 3) + tileYDown;
+ while (tileYDown < scrollXAdjustedAligned) {
+ chrCode = this.BGCHRBank1[tileYDown];
+ if (chrCode < this.gfxBackgroundBankOffset) {
+ chrCode |= 0x100;
+ }
+ attrCode = this.BGCHRBank2[tileYDown++];
+ tile = this.tileCache[((attrCode & 0x08) << 8) | ((attrCode & 0x60) << 4) | chrCode];
+ palette = (attrCode & 0x7) << 2;
+ texel = tileYLine;
+ this.frameBuffer[pixelPosition++] = this.gbcBGPalette[palette | tile[texel++]];
+ this.frameBuffer[pixelPosition++] = this.gbcBGPalette[palette | tile[texel++]];
+ this.frameBuffer[pixelPosition++] = this.gbcBGPalette[palette | tile[texel++]];
+ this.frameBuffer[pixelPosition++] = this.gbcBGPalette[palette | tile[texel++]];
+ this.frameBuffer[pixelPosition++] = this.gbcBGPalette[palette | tile[texel++]];
+ this.frameBuffer[pixelPosition++] = this.gbcBGPalette[palette | tile[texel++]];
+ this.frameBuffer[pixelPosition++] = this.gbcBGPalette[palette | tile[texel++]];
+ this.frameBuffer[pixelPosition++] = this.gbcBGPalette[palette | tile[texel]];
+ }
+ if (pixelPosition < pixelPositionEnd) {
+ chrCode = this.BGCHRBank1[tileYDown];
+ if (chrCode < this.gfxBackgroundBankOffset) {
+ chrCode |= 0x100;
+ }
+ attrCode = this.BGCHRBank2[tileYDown];
+ tile = this.tileCache[((attrCode & 0x08) << 8) | ((attrCode & 0x60) << 4) | chrCode];
+ palette = (attrCode & 0x7) << 2;
+ switch (pixelPositionEnd - pixelPosition) {
+ case 7:
+ this.frameBuffer[pixelPosition + 6] = this.gbcBGPalette[palette | tile[tileYLine | 6]];
+ case 6:
+ this.frameBuffer[pixelPosition + 5] = this.gbcBGPalette[palette | tile[tileYLine | 5]];
+ case 5:
+ this.frameBuffer[pixelPosition + 4] = this.gbcBGPalette[palette | tile[tileYLine | 4]];
+ case 4:
+ this.frameBuffer[pixelPosition + 3] = this.gbcBGPalette[palette | tile[tileYLine | 3]];
+ case 3:
+ this.frameBuffer[pixelPosition + 2] = this.gbcBGPalette[palette | tile[tileYLine | 2]];
+ case 2:
+ this.frameBuffer[pixelPosition + 1] = this.gbcBGPalette[palette | tile[tileYLine | 1]];
+ case 1:
+ this.frameBuffer[pixelPosition] = this.gbcBGPalette[palette | tile[tileYLine]];
+ }
+ }
+ }
+}
+GameBoyCore.prototype.WindowGBLayerRender = function (scanlineToRender) {
+ if (this.gfxWindowDisplay) { //Is the window enabled?
+ var scrollYAdjusted = scanlineToRender - this.windowY; //The line of the BG we're at.
+ if (scrollYAdjusted >= 0) {
+ var scrollXRangeAdjusted = (this.windowX > 0) ? (this.windowX + this.currentX) : this.currentX;
+ var pixelPosition = this.pixelStart + scrollXRangeAdjusted;
+ var pixelPositionEnd = this.pixelStart + this.pixelEnd;
+ if (pixelPosition < pixelPositionEnd) {
+ var tileYLine = (scrollYAdjusted & 0x7) << 3;
+ var tileNumber = (this.gfxWindowCHRBankPosition | ((scrollYAdjusted & 0xF8) << 2)) + (this.currentX >> 3);
+ var chrCode = this.BGCHRBank1[tileNumber];
+ if (chrCode < this.gfxBackgroundBankOffset) {
+ chrCode |= 0x100;
+ }
+ var tile = this.tileCache[chrCode];
+ var texel = (scrollXRangeAdjusted - this.windowX) & 0x7;
+ scrollXRangeAdjusted = Math.min(8, texel + pixelPositionEnd - pixelPosition);
+ while (texel < scrollXRangeAdjusted) {
+ this.frameBuffer[pixelPosition++] = this.BGPalette[tile[tileYLine | texel++]];
+ }
+ scrollXRangeAdjusted = tileNumber + ((pixelPositionEnd - pixelPosition) >> 3);
+ while (tileNumber < scrollXRangeAdjusted) {
+ chrCode = this.BGCHRBank1[++tileNumber];
+ if (chrCode < this.gfxBackgroundBankOffset) {
+ chrCode |= 0x100;
+ }
+ tile = this.tileCache[chrCode];
+ texel = tileYLine;
+ this.frameBuffer[pixelPosition++] = this.BGPalette[tile[texel++]];
+ this.frameBuffer[pixelPosition++] = this.BGPalette[tile[texel++]];
+ this.frameBuffer[pixelPosition++] = this.BGPalette[tile[texel++]];
+ this.frameBuffer[pixelPosition++] = this.BGPalette[tile[texel++]];
+ this.frameBuffer[pixelPosition++] = this.BGPalette[tile[texel++]];
+ this.frameBuffer[pixelPosition++] = this.BGPalette[tile[texel++]];
+ this.frameBuffer[pixelPosition++] = this.BGPalette[tile[texel++]];
+ this.frameBuffer[pixelPosition++] = this.BGPalette[tile[texel]];
+ }
+ if (pixelPosition < pixelPositionEnd) {
+ chrCode = this.BGCHRBank1[++tileNumber];
+ if (chrCode < this.gfxBackgroundBankOffset) {
+ chrCode |= 0x100;
+ }
+ tile = this.tileCache[chrCode];
+ switch (pixelPositionEnd - pixelPosition) {
+ case 7:
+ this.frameBuffer[pixelPosition + 6] = this.BGPalette[tile[tileYLine | 6]];
+ case 6:
+ this.frameBuffer[pixelPosition + 5] = this.BGPalette[tile[tileYLine | 5]];
+ case 5:
+ this.frameBuffer[pixelPosition + 4] = this.BGPalette[tile[tileYLine | 4]];
+ case 4:
+ this.frameBuffer[pixelPosition + 3] = this.BGPalette[tile[tileYLine | 3]];
+ case 3:
+ this.frameBuffer[pixelPosition + 2] = this.BGPalette[tile[tileYLine | 2]];
+ case 2:
+ this.frameBuffer[pixelPosition + 1] = this.BGPalette[tile[tileYLine | 1]];
+ case 1:
+ this.frameBuffer[pixelPosition] = this.BGPalette[tile[tileYLine]];
+ }
+ }
+ }
+ }
+ }
+}
+GameBoyCore.prototype.WindowGBCLayerRender = function (scanlineToRender) {
+ if (this.gfxWindowDisplay) { //Is the window enabled?
+ var scrollYAdjusted = scanlineToRender - this.windowY; //The line of the BG we're at.
+ if (scrollYAdjusted >= 0) {
+ var scrollXRangeAdjusted = (this.windowX > 0) ? (this.windowX + this.currentX) : this.currentX;
+ var pixelPosition = this.pixelStart + scrollXRangeAdjusted;
+ var pixelPositionEnd = this.pixelStart + this.pixelEnd;
+ if (pixelPosition < pixelPositionEnd) {
+ var tileYLine = (scrollYAdjusted & 0x7) << 3;
+ var tileNumber = (this.gfxWindowCHRBankPosition | ((scrollYAdjusted & 0xF8) << 2)) + (this.currentX >> 3);
+ var chrCode = this.BGCHRBank1[tileNumber];
+ if (chrCode < this.gfxBackgroundBankOffset) {
+ chrCode |= 0x100;
+ }
+ var attrCode = this.BGCHRBank2[tileNumber];
+ var tile = this.tileCache[((attrCode & 0x08) << 8) | ((attrCode & 0x60) << 4) | chrCode];
+ var palette = ((attrCode & 0x7) << 2) | ((attrCode & 0x80) >> 2);
+ var texel = (scrollXRangeAdjusted - this.windowX) & 0x7;
+ scrollXRangeAdjusted = Math.min(8, texel + pixelPositionEnd - pixelPosition);
+ while (texel < scrollXRangeAdjusted) {
+ this.frameBuffer[pixelPosition++] = this.gbcBGPalette[palette | tile[tileYLine | texel++]];
+ }
+ scrollXRangeAdjusted = tileNumber + ((pixelPositionEnd - pixelPosition) >> 3);
+ while (tileNumber < scrollXRangeAdjusted) {
+ chrCode = this.BGCHRBank1[++tileNumber];
+ if (chrCode < this.gfxBackgroundBankOffset) {
+ chrCode |= 0x100;
+ }
+ attrCode = this.BGCHRBank2[tileNumber];
+ tile = this.tileCache[((attrCode & 0x08) << 8) | ((attrCode & 0x60) << 4) | chrCode];
+ palette = ((attrCode & 0x7) << 2) | ((attrCode & 0x80) >> 2);
+ texel = tileYLine;
+ this.frameBuffer[pixelPosition++] = this.gbcBGPalette[palette | tile[texel++]];
+ this.frameBuffer[pixelPosition++] = this.gbcBGPalette[palette | tile[texel++]];
+ this.frameBuffer[pixelPosition++] = this.gbcBGPalette[palette | tile[texel++]];
+ this.frameBuffer[pixelPosition++] = this.gbcBGPalette[palette | tile[texel++]];
+ this.frameBuffer[pixelPosition++] = this.gbcBGPalette[palette | tile[texel++]];
+ this.frameBuffer[pixelPosition++] = this.gbcBGPalette[palette | tile[texel++]];
+ this.frameBuffer[pixelPosition++] = this.gbcBGPalette[palette | tile[texel++]];
+ this.frameBuffer[pixelPosition++] = this.gbcBGPalette[palette | tile[texel]];
+ }
+ if (pixelPosition < pixelPositionEnd) {
+ chrCode = this.BGCHRBank1[++tileNumber];
+ if (chrCode < this.gfxBackgroundBankOffset) {
+ chrCode |= 0x100;
+ }
+ attrCode = this.BGCHRBank2[tileNumber];
+ tile = this.tileCache[((attrCode & 0x08) << 8) | ((attrCode & 0x60) << 4) | chrCode];
+ palette = ((attrCode & 0x7) << 2) | ((attrCode & 0x80) >> 2);
+ switch (pixelPositionEnd - pixelPosition) {
+ case 7:
+ this.frameBuffer[pixelPosition + 6] = this.gbcBGPalette[palette | tile[tileYLine | 6]];
+ case 6:
+ this.frameBuffer[pixelPosition + 5] = this.gbcBGPalette[palette | tile[tileYLine | 5]];
+ case 5:
+ this.frameBuffer[pixelPosition + 4] = this.gbcBGPalette[palette | tile[tileYLine | 4]];
+ case 4:
+ this.frameBuffer[pixelPosition + 3] = this.gbcBGPalette[palette | tile[tileYLine | 3]];
+ case 3:
+ this.frameBuffer[pixelPosition + 2] = this.gbcBGPalette[palette | tile[tileYLine | 2]];
+ case 2:
+ this.frameBuffer[pixelPosition + 1] = this.gbcBGPalette[palette | tile[tileYLine | 1]];
+ case 1:
+ this.frameBuffer[pixelPosition] = this.gbcBGPalette[palette | tile[tileYLine]];
+ }
+ }
+ }
+ }
+ }
+}
+GameBoyCore.prototype.WindowGBCLayerRenderNoPriorityFlagging = function (scanlineToRender) {
+ if (this.gfxWindowDisplay) { //Is the window enabled?
+ var scrollYAdjusted = scanlineToRender - this.windowY; //The line of the BG we're at.
+ if (scrollYAdjusted >= 0) {
+ var scrollXRangeAdjusted = (this.windowX > 0) ? (this.windowX + this.currentX) : this.currentX;
+ var pixelPosition = this.pixelStart + scrollXRangeAdjusted;
+ var pixelPositionEnd = this.pixelStart + this.pixelEnd;
+ if (pixelPosition < pixelPositionEnd) {
+ var tileYLine = (scrollYAdjusted & 0x7) << 3;
+ var tileNumber = (this.gfxWindowCHRBankPosition | ((scrollYAdjusted & 0xF8) << 2)) + (this.currentX >> 3);
+ var chrCode = this.BGCHRBank1[tileNumber];
+ if (chrCode < this.gfxBackgroundBankOffset) {
+ chrCode |= 0x100;
+ }
+ var attrCode = this.BGCHRBank2[tileNumber];
+ var tile = this.tileCache[((attrCode & 0x08) << 8) | ((attrCode & 0x60) << 4) | chrCode];
+ var palette = (attrCode & 0x7) << 2;
+ var texel = (scrollXRangeAdjusted - this.windowX) & 0x7;
+ scrollXRangeAdjusted = Math.min(8, texel + pixelPositionEnd - pixelPosition);
+ while (texel < scrollXRangeAdjusted) {
+ this.frameBuffer[pixelPosition++] = this.gbcBGPalette[palette | tile[tileYLine | texel++]];
+ }
+ scrollXRangeAdjusted = tileNumber + ((pixelPositionEnd - pixelPosition) >> 3);
+ while (tileNumber < scrollXRangeAdjusted) {
+ chrCode = this.BGCHRBank1[++tileNumber];
+ if (chrCode < this.gfxBackgroundBankOffset) {
+ chrCode |= 0x100;
+ }
+ attrCode = this.BGCHRBank2[tileNumber];
+ tile = this.tileCache[((attrCode & 0x08) << 8) | ((attrCode & 0x60) << 4) | chrCode];
+ palette = (attrCode & 0x7) << 2;
+ texel = tileYLine;
+ this.frameBuffer[pixelPosition++] = this.gbcBGPalette[palette | tile[texel++]];
+ this.frameBuffer[pixelPosition++] = this.gbcBGPalette[palette | tile[texel++]];
+ this.frameBuffer[pixelPosition++] = this.gbcBGPalette[palette | tile[texel++]];
+ this.frameBuffer[pixelPosition++] = this.gbcBGPalette[palette | tile[texel++]];
+ this.frameBuffer[pixelPosition++] = this.gbcBGPalette[palette | tile[texel++]];
+ this.frameBuffer[pixelPosition++] = this.gbcBGPalette[palette | tile[texel++]];
+ this.frameBuffer[pixelPosition++] = this.gbcBGPalette[palette | tile[texel++]];
+ this.frameBuffer[pixelPosition++] = this.gbcBGPalette[palette | tile[texel]];
+ }
+ if (pixelPosition < pixelPositionEnd) {
+ chrCode = this.BGCHRBank1[++tileNumber];
+ if (chrCode < this.gfxBackgroundBankOffset) {
+ chrCode |= 0x100;
+ }
+ attrCode = this.BGCHRBank2[tileNumber];
+ tile = this.tileCache[((attrCode & 0x08) << 8) | ((attrCode & 0x60) << 4) | chrCode];
+ palette = (attrCode & 0x7) << 2;
+ switch (pixelPositionEnd - pixelPosition) {
+ case 7:
+ this.frameBuffer[pixelPosition + 6] = this.gbcBGPalette[palette | tile[tileYLine | 6]];
+ case 6:
+ this.frameBuffer[pixelPosition + 5] = this.gbcBGPalette[palette | tile[tileYLine | 5]];
+ case 5:
+ this.frameBuffer[pixelPosition + 4] = this.gbcBGPalette[palette | tile[tileYLine | 4]];
+ case 4:
+ this.frameBuffer[pixelPosition + 3] = this.gbcBGPalette[palette | tile[tileYLine | 3]];
+ case 3:
+ this.frameBuffer[pixelPosition + 2] = this.gbcBGPalette[palette | tile[tileYLine | 2]];
+ case 2:
+ this.frameBuffer[pixelPosition + 1] = this.gbcBGPalette[palette | tile[tileYLine | 1]];
+ case 1:
+ this.frameBuffer[pixelPosition] = this.gbcBGPalette[palette | tile[tileYLine]];
+ }
+ }
+ }
+ }
+ }
+}
+GameBoyCore.prototype.SpriteGBLayerRender = function (scanlineToRender) {
+ if (this.gfxSpriteShow) { //Are sprites enabled?
+ var lineAdjusted = scanlineToRender + 0x10;
+ var OAMAddress = 0xFE00;
+ var yoffset = 0;
+ var xcoord = 1;
+ var xCoordStart = 0;
+ var xCoordEnd = 0;
+ var attrCode = 0;
+ var palette = 0;
+ var tile = null;
+ var data = 0;
+ var spriteCount = 0;
+ var length = 0;
+ var currentPixel = 0;
+ var linePixel = 0;
+ //Clear our x-coord sort buffer:
+ while (xcoord < 168) {
+ this.sortBuffer[xcoord++] = 0xFF;
+ }
+ if (this.gfxSpriteNormalHeight) {
+ //Draw the visible sprites:
+ for (var length = this.findLowestSpriteDrawable(lineAdjusted, 0x7); spriteCount < length; ++spriteCount) {
+ OAMAddress = this.OAMAddressCache[spriteCount];
+ yoffset = (lineAdjusted - this.memory[OAMAddress]) << 3;
+ attrCode = this.memory[OAMAddress | 3];
+ palette = (attrCode & 0x10) >> 2;
+ tile = this.tileCache[((attrCode & 0x60) << 4) | this.memory[OAMAddress | 0x2]];
+ linePixel = xCoordStart = this.memory[OAMAddress | 1];
+ xCoordEnd = Math.min(168 - linePixel, 8);
+ xcoord = (linePixel > 7) ? 0 : (8 - linePixel);
+ for (currentPixel = this.pixelStart + ((linePixel > 8) ? (linePixel - 8) : 0); xcoord < xCoordEnd; ++xcoord, ++currentPixel, ++linePixel) {
+ if (this.sortBuffer[linePixel] > xCoordStart) {
+ if (this.frameBuffer[currentPixel] >= 0x2000000) {
+ data = tile[yoffset | xcoord];
+ if (data > 0) {
+ this.frameBuffer[currentPixel] = this.OBJPalette[palette | data];
+ this.sortBuffer[linePixel] = xCoordStart;
+ }
+ }
+ else if (this.frameBuffer[currentPixel] < 0x1000000) {
+ data = tile[yoffset | xcoord];
+ if (data > 0 && attrCode < 0x80) {
+ this.frameBuffer[currentPixel] = this.OBJPalette[palette | data];
+ this.sortBuffer[linePixel] = xCoordStart;
+ }
+ }
+ }
+ }
+ }
+ }
+ else {
+ //Draw the visible sprites:
+ for (var length = this.findLowestSpriteDrawable(lineAdjusted, 0xF); spriteCount < length; ++spriteCount) {
+ OAMAddress = this.OAMAddressCache[spriteCount];
+ yoffset = (lineAdjusted - this.memory[OAMAddress]) << 3;
+ attrCode = this.memory[OAMAddress | 3];
+ palette = (attrCode & 0x10) >> 2;
+ if ((attrCode & 0x40) == (0x40 & yoffset)) {
+ tile = this.tileCache[((attrCode & 0x60) << 4) | (this.memory[OAMAddress | 0x2] & 0xFE)];
+ }
+ else {
+ tile = this.tileCache[((attrCode & 0x60) << 4) | this.memory[OAMAddress | 0x2] | 1];
+ }
+ yoffset &= 0x3F;
+ linePixel = xCoordStart = this.memory[OAMAddress | 1];
+ xCoordEnd = Math.min(168 - linePixel, 8);
+ xcoord = (linePixel > 7) ? 0 : (8 - linePixel);
+ for (currentPixel = this.pixelStart + ((linePixel > 8) ? (linePixel - 8) : 0); xcoord < xCoordEnd; ++xcoord, ++currentPixel, ++linePixel) {
+ if (this.sortBuffer[linePixel] > xCoordStart) {
+ if (this.frameBuffer[currentPixel] >= 0x2000000) {
+ data = tile[yoffset | xcoord];
+ if (data > 0) {
+ this.frameBuffer[currentPixel] = this.OBJPalette[palette | data];
+ this.sortBuffer[linePixel] = xCoordStart;
+ }
+ }
+ else if (this.frameBuffer[currentPixel] < 0x1000000) {
+ data = tile[yoffset | xcoord];
+ if (data > 0 && attrCode < 0x80) {
+ this.frameBuffer[currentPixel] = this.OBJPalette[palette | data];
+ this.sortBuffer[linePixel] = xCoordStart;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
+GameBoyCore.prototype.findLowestSpriteDrawable = function (scanlineToRender, drawableRange) {
+ var address = 0xFE00;
+ var spriteCount = 0;
+ var diff = 0;
+ while (address < 0xFEA0 && spriteCount < 10) {
+ diff = scanlineToRender - this.memory[address];
+ if ((diff & drawableRange) == diff) {
+ this.OAMAddressCache[spriteCount++] = address;
+ }
+ address += 4;
+ }
+ return spriteCount;
+}
+GameBoyCore.prototype.SpriteGBCLayerRender = function (scanlineToRender) {
+ if (this.gfxSpriteShow) { //Are sprites enabled?
+ var OAMAddress = 0xFE00;
+ var lineAdjusted = scanlineToRender + 0x10;
+ var yoffset = 0;
+ var xcoord = 0;
+ var endX = 0;
+ var xCounter = 0;
+ var attrCode = 0;
+ var palette = 0;
+ var tile = null;
+ var data = 0;
+ var currentPixel = 0;
+ var spriteCount = 0;
+ if (this.gfxSpriteNormalHeight) {
+ for (; OAMAddress < 0xFEA0 && spriteCount < 10; OAMAddress += 4) {
+ yoffset = lineAdjusted - this.memory[OAMAddress];
+ if ((yoffset & 0x7) == yoffset) {
+ xcoord = this.memory[OAMAddress | 1] - 8;
+ endX = Math.min(160, xcoord + 8);
+ attrCode = this.memory[OAMAddress | 3];
+ palette = (attrCode & 7) << 2;
+ tile = this.tileCache[((attrCode & 0x08) << 8) | ((attrCode & 0x60) << 4) | this.memory[OAMAddress | 2]];
+ xCounter = (xcoord > 0) ? xcoord : 0;
+ xcoord -= yoffset << 3;
+ for (currentPixel = this.pixelStart + xCounter; xCounter < endX; ++xCounter, ++currentPixel) {
+ if (this.frameBuffer[currentPixel] >= 0x2000000) {
+ data = tile[xCounter - xcoord];
+ if (data > 0) {
+ this.frameBuffer[currentPixel] = this.gbcOBJPalette[palette | data];
+ }
+ }
+ else if (this.frameBuffer[currentPixel] < 0x1000000) {
+ data = tile[xCounter - xcoord];
+ if (data > 0 && attrCode < 0x80) { //Don't optimize for attrCode, as LICM-capable JITs should optimize its checks.
+ this.frameBuffer[currentPixel] = this.gbcOBJPalette[palette | data];
+ }
+ }
+ }
+ ++spriteCount;
+ }
+ }
+ }
+ else {
+ for (; OAMAddress < 0xFEA0 && spriteCount < 10; OAMAddress += 4) {
+ yoffset = lineAdjusted - this.memory[OAMAddress];
+ if ((yoffset & 0xF) == yoffset) {
+ xcoord = this.memory[OAMAddress | 1] - 8;
+ endX = Math.min(160, xcoord + 8);
+ attrCode = this.memory[OAMAddress | 3];
+ palette = (attrCode & 7) << 2;
+ if ((attrCode & 0x40) == (0x40 & (yoffset << 3))) {
+ tile = this.tileCache[((attrCode & 0x08) << 8) | ((attrCode & 0x60) << 4) | (this.memory[OAMAddress | 0x2] & 0xFE)];
+ }
+ else {
+ tile = this.tileCache[((attrCode & 0x08) << 8) | ((attrCode & 0x60) << 4) | this.memory[OAMAddress | 0x2] | 1];
+ }
+ xCounter = (xcoord > 0) ? xcoord : 0;
+ xcoord -= (yoffset & 0x7) << 3;
+ for (currentPixel = this.pixelStart + xCounter; xCounter < endX; ++xCounter, ++currentPixel) {
+ if (this.frameBuffer[currentPixel] >= 0x2000000) {
+ data = tile[xCounter - xcoord];
+ if (data > 0) {
+ this.frameBuffer[currentPixel] = this.gbcOBJPalette[palette | data];
+ }
+ }
+ else if (this.frameBuffer[currentPixel] < 0x1000000) {
+ data = tile[xCounter - xcoord];
+ if (data > 0 && attrCode < 0x80) { //Don't optimize for attrCode, as LICM-capable JITs should optimize its checks.
+ this.frameBuffer[currentPixel] = this.gbcOBJPalette[palette | data];
+ }
+ }
+ }
+ ++spriteCount;
+ }
+ }
+ }
+ }
+}
+//Generate only a single tile line for the GB tile cache mode:
+GameBoyCore.prototype.generateGBTileLine = function (address) {
+ var lineCopy = (this.memory[0x1 | address] << 8) | this.memory[0x9FFE & address];
+ var tileBlock = this.tileCache[(address & 0x1FF0) >> 4];
+ address = (address & 0xE) << 2;
+ tileBlock[address | 7] = ((lineCopy & 0x100) >> 7) | (lineCopy & 0x1);
+ tileBlock[address | 6] = ((lineCopy & 0x200) >> 8) | ((lineCopy & 0x2) >> 1);
+ tileBlock[address | 5] = ((lineCopy & 0x400) >> 9) | ((lineCopy & 0x4) >> 2);
+ tileBlock[address | 4] = ((lineCopy & 0x800) >> 10) | ((lineCopy & 0x8) >> 3);
+ tileBlock[address | 3] = ((lineCopy & 0x1000) >> 11) | ((lineCopy & 0x10) >> 4);
+ tileBlock[address | 2] = ((lineCopy & 0x2000) >> 12) | ((lineCopy & 0x20) >> 5);
+ tileBlock[address | 1] = ((lineCopy & 0x4000) >> 13) | ((lineCopy & 0x40) >> 6);
+ tileBlock[address] = ((lineCopy & 0x8000) >> 14) | ((lineCopy & 0x80) >> 7);
+}
+//Generate only a single tile line for the GBC tile cache mode (Bank 1):
+GameBoyCore.prototype.generateGBCTileLineBank1 = function (address) {
+ var lineCopy = (this.memory[0x1 | address] << 8) | this.memory[0x9FFE & address];
+ address &= 0x1FFE;
+ var tileBlock1 = this.tileCache[address >> 4];
+ var tileBlock2 = this.tileCache[0x200 | (address >> 4)];
+ var tileBlock3 = this.tileCache[0x400 | (address >> 4)];
+ var tileBlock4 = this.tileCache[0x600 | (address >> 4)];
+ address = (address & 0xE) << 2;
+ var addressFlipped = 0x38 - address;
+ tileBlock4[addressFlipped] = tileBlock2[address] = tileBlock3[addressFlipped | 7] = tileBlock1[address | 7] = ((lineCopy & 0x100) >> 7) | (lineCopy & 0x1);
+ tileBlock4[addressFlipped | 1] = tileBlock2[address | 1] = tileBlock3[addressFlipped | 6] = tileBlock1[address | 6] = ((lineCopy & 0x200) >> 8) | ((lineCopy & 0x2) >> 1);
+ tileBlock4[addressFlipped | 2] = tileBlock2[address | 2] = tileBlock3[addressFlipped | 5] = tileBlock1[address | 5] = ((lineCopy & 0x400) >> 9) | ((lineCopy & 0x4) >> 2);
+ tileBlock4[addressFlipped | 3] = tileBlock2[address | 3] = tileBlock3[addressFlipped | 4] = tileBlock1[address | 4] = ((lineCopy & 0x800) >> 10) | ((lineCopy & 0x8) >> 3);
+ tileBlock4[addressFlipped | 4] = tileBlock2[address | 4] = tileBlock3[addressFlipped | 3] = tileBlock1[address | 3] = ((lineCopy & 0x1000) >> 11) | ((lineCopy & 0x10) >> 4);
+ tileBlock4[addressFlipped | 5] = tileBlock2[address | 5] = tileBlock3[addressFlipped | 2] = tileBlock1[address | 2] = ((lineCopy & 0x2000) >> 12) | ((lineCopy & 0x20) >> 5);
+ tileBlock4[addressFlipped | 6] = tileBlock2[address | 6] = tileBlock3[addressFlipped | 1] = tileBlock1[address | 1] = ((lineCopy & 0x4000) >> 13) | ((lineCopy & 0x40) >> 6);
+ tileBlock4[addressFlipped | 7] = tileBlock2[address | 7] = tileBlock3[addressFlipped] = tileBlock1[address] = ((lineCopy & 0x8000) >> 14) | ((lineCopy & 0x80) >> 7);
+}
+//Generate all the flip combinations for a full GBC VRAM bank 1 tile:
+GameBoyCore.prototype.generateGBCTileBank1 = function (vramAddress) {
+ var address = vramAddress >> 4;
+ var tileBlock1 = this.tileCache[address];
+ var tileBlock2 = this.tileCache[0x200 | address];
+ var tileBlock3 = this.tileCache[0x400 | address];
+ var tileBlock4 = this.tileCache[0x600 | address];
+ var lineCopy = 0;
+ vramAddress |= 0x8000;
+ address = 0;
+ var addressFlipped = 56;
+ do {
+ lineCopy = (this.memory[0x1 | vramAddress] << 8) | this.memory[vramAddress];
+ tileBlock4[addressFlipped] = tileBlock2[address] = tileBlock3[addressFlipped | 7] = tileBlock1[address | 7] = ((lineCopy & 0x100) >> 7) | (lineCopy & 0x1);
+ tileBlock4[addressFlipped | 1] = tileBlock2[address | 1] = tileBlock3[addressFlipped | 6] = tileBlock1[address | 6] = ((lineCopy & 0x200) >> 8) | ((lineCopy & 0x2) >> 1);
+ tileBlock4[addressFlipped | 2] = tileBlock2[address | 2] = tileBlock3[addressFlipped | 5] = tileBlock1[address | 5] = ((lineCopy & 0x400) >> 9) | ((lineCopy & 0x4) >> 2);
+ tileBlock4[addressFlipped | 3] = tileBlock2[address | 3] = tileBlock3[addressFlipped | 4] = tileBlock1[address | 4] = ((lineCopy & 0x800) >> 10) | ((lineCopy & 0x8) >> 3);
+ tileBlock4[addressFlipped | 4] = tileBlock2[address | 4] = tileBlock3[addressFlipped | 3] = tileBlock1[address | 3] = ((lineCopy & 0x1000) >> 11) | ((lineCopy & 0x10) >> 4);
+ tileBlock4[addressFlipped | 5] = tileBlock2[address | 5] = tileBlock3[addressFlipped | 2] = tileBlock1[address | 2] = ((lineCopy & 0x2000) >> 12) | ((lineCopy & 0x20) >> 5);
+ tileBlock4[addressFlipped | 6] = tileBlock2[address | 6] = tileBlock3[addressFlipped | 1] = tileBlock1[address | 1] = ((lineCopy & 0x4000) >> 13) | ((lineCopy & 0x40) >> 6);
+ tileBlock4[addressFlipped | 7] = tileBlock2[address | 7] = tileBlock3[addressFlipped] = tileBlock1[address] = ((lineCopy & 0x8000) >> 14) | ((lineCopy & 0x80) >> 7);
+ address += 8;
+ addressFlipped -= 8;
+ vramAddress += 2;
+ } while (addressFlipped > -1);
+}
+//Generate only a single tile line for the GBC tile cache mode (Bank 2):
+GameBoyCore.prototype.generateGBCTileLineBank2 = function (address) {
+ var lineCopy = (this.VRAM[0x1 | address] << 8) | this.VRAM[0x1FFE & address];
+ var tileBlock1 = this.tileCache[0x800 | (address >> 4)];
+ var tileBlock2 = this.tileCache[0xA00 | (address >> 4)];
+ var tileBlock3 = this.tileCache[0xC00 | (address >> 4)];
+ var tileBlock4 = this.tileCache[0xE00 | (address >> 4)];
+ address = (address & 0xE) << 2;
+ var addressFlipped = 0x38 - address;
+ tileBlock4[addressFlipped] = tileBlock2[address] = tileBlock3[addressFlipped | 7] = tileBlock1[address | 7] = ((lineCopy & 0x100) >> 7) | (lineCopy & 0x1);
+ tileBlock4[addressFlipped | 1] = tileBlock2[address | 1] = tileBlock3[addressFlipped | 6] = tileBlock1[address | 6] = ((lineCopy & 0x200) >> 8) | ((lineCopy & 0x2) >> 1);
+ tileBlock4[addressFlipped | 2] = tileBlock2[address | 2] = tileBlock3[addressFlipped | 5] = tileBlock1[address | 5] = ((lineCopy & 0x400) >> 9) | ((lineCopy & 0x4) >> 2);
+ tileBlock4[addressFlipped | 3] = tileBlock2[address | 3] = tileBlock3[addressFlipped | 4] = tileBlock1[address | 4] = ((lineCopy & 0x800) >> 10) | ((lineCopy & 0x8) >> 3);
+ tileBlock4[addressFlipped | 4] = tileBlock2[address | 4] = tileBlock3[addressFlipped | 3] = tileBlock1[address | 3] = ((lineCopy & 0x1000) >> 11) | ((lineCopy & 0x10) >> 4);
+ tileBlock4[addressFlipped | 5] = tileBlock2[address | 5] = tileBlock3[addressFlipped | 2] = tileBlock1[address | 2] = ((lineCopy & 0x2000) >> 12) | ((lineCopy & 0x20) >> 5);
+ tileBlock4[addressFlipped | 6] = tileBlock2[address | 6] = tileBlock3[addressFlipped | 1] = tileBlock1[address | 1] = ((lineCopy & 0x4000) >> 13) | ((lineCopy & 0x40) >> 6);
+ tileBlock4[addressFlipped | 7] = tileBlock2[address | 7] = tileBlock3[addressFlipped] = tileBlock1[address] = ((lineCopy & 0x8000) >> 14) | ((lineCopy & 0x80) >> 7);
+}
+//Generate all the flip combinations for a full GBC VRAM bank 2 tile:
+GameBoyCore.prototype.generateGBCTileBank2 = function (vramAddress) {
+ var address = vramAddress >> 4;
+ var tileBlock1 = this.tileCache[0x800 | address];
+ var tileBlock2 = this.tileCache[0xA00 | address];
+ var tileBlock3 = this.tileCache[0xC00 | address];
+ var tileBlock4 = this.tileCache[0xE00 | address];
+ var lineCopy = 0;
+ address = 0;
+ var addressFlipped = 56;
+ do {
+ lineCopy = (this.VRAM[0x1 | vramAddress] << 8) | this.VRAM[vramAddress];
+ tileBlock4[addressFlipped] = tileBlock2[address] = tileBlock3[addressFlipped | 7] = tileBlock1[address | 7] = ((lineCopy & 0x100) >> 7) | (lineCopy & 0x1);
+ tileBlock4[addressFlipped | 1] = tileBlock2[address | 1] = tileBlock3[addressFlipped | 6] = tileBlock1[address | 6] = ((lineCopy & 0x200) >> 8) | ((lineCopy & 0x2) >> 1);
+ tileBlock4[addressFlipped | 2] = tileBlock2[address | 2] = tileBlock3[addressFlipped | 5] = tileBlock1[address | 5] = ((lineCopy & 0x400) >> 9) | ((lineCopy & 0x4) >> 2);
+ tileBlock4[addressFlipped | 3] = tileBlock2[address | 3] = tileBlock3[addressFlipped | 4] = tileBlock1[address | 4] = ((lineCopy & 0x800) >> 10) | ((lineCopy & 0x8) >> 3);
+ tileBlock4[addressFlipped | 4] = tileBlock2[address | 4] = tileBlock3[addressFlipped | 3] = tileBlock1[address | 3] = ((lineCopy & 0x1000) >> 11) | ((lineCopy & 0x10) >> 4);
+ tileBlock4[addressFlipped | 5] = tileBlock2[address | 5] = tileBlock3[addressFlipped | 2] = tileBlock1[address | 2] = ((lineCopy & 0x2000) >> 12) | ((lineCopy & 0x20) >> 5);
+ tileBlock4[addressFlipped | 6] = tileBlock2[address | 6] = tileBlock3[addressFlipped | 1] = tileBlock1[address | 1] = ((lineCopy & 0x4000) >> 13) | ((lineCopy & 0x40) >> 6);
+ tileBlock4[addressFlipped | 7] = tileBlock2[address | 7] = tileBlock3[addressFlipped] = tileBlock1[address] = ((lineCopy & 0x8000) >> 14) | ((lineCopy & 0x80) >> 7);
+ address += 8;
+ addressFlipped -= 8;
+ vramAddress += 2;
+ } while (addressFlipped > -1);
+}
+//Generate only a single tile line for the GB tile cache mode (OAM accessible range):
+GameBoyCore.prototype.generateGBOAMTileLine = function (address) {
+ var lineCopy = (this.memory[0x1 | address] << 8) | this.memory[0x9FFE & address];
+ address &= 0x1FFE;
+ var tileBlock1 = this.tileCache[address >> 4];
+ var tileBlock2 = this.tileCache[0x200 | (address >> 4)];
+ var tileBlock3 = this.tileCache[0x400 | (address >> 4)];
+ var tileBlock4 = this.tileCache[0x600 | (address >> 4)];
+ address = (address & 0xE) << 2;
+ var addressFlipped = 0x38 - address;
+ tileBlock4[addressFlipped] = tileBlock2[address] = tileBlock3[addressFlipped | 7] = tileBlock1[address | 7] = ((lineCopy & 0x100) >> 7) | (lineCopy & 0x1);
+ tileBlock4[addressFlipped | 1] = tileBlock2[address | 1] = tileBlock3[addressFlipped | 6] = tileBlock1[address | 6] = ((lineCopy & 0x200) >> 8) | ((lineCopy & 0x2) >> 1);
+ tileBlock4[addressFlipped | 2] = tileBlock2[address | 2] = tileBlock3[addressFlipped | 5] = tileBlock1[address | 5] = ((lineCopy & 0x400) >> 9) | ((lineCopy & 0x4) >> 2);
+ tileBlock4[addressFlipped | 3] = tileBlock2[address | 3] = tileBlock3[addressFlipped | 4] = tileBlock1[address | 4] = ((lineCopy & 0x800) >> 10) | ((lineCopy & 0x8) >> 3);
+ tileBlock4[addressFlipped | 4] = tileBlock2[address | 4] = tileBlock3[addressFlipped | 3] = tileBlock1[address | 3] = ((lineCopy & 0x1000) >> 11) | ((lineCopy & 0x10) >> 4);
+ tileBlock4[addressFlipped | 5] = tileBlock2[address | 5] = tileBlock3[addressFlipped | 2] = tileBlock1[address | 2] = ((lineCopy & 0x2000) >> 12) | ((lineCopy & 0x20) >> 5);
+ tileBlock4[addressFlipped | 6] = tileBlock2[address | 6] = tileBlock3[addressFlipped | 1] = tileBlock1[address | 1] = ((lineCopy & 0x4000) >> 13) | ((lineCopy & 0x40) >> 6);
+ tileBlock4[addressFlipped | 7] = tileBlock2[address | 7] = tileBlock3[addressFlipped] = tileBlock1[address] = ((lineCopy & 0x8000) >> 14) | ((lineCopy & 0x80) >> 7);
+}
+GameBoyCore.prototype.graphicsJIT = function () {
+ if (this.LCDisOn) {
+ this.totalLinesPassed = 0; //Mark frame for ensuring a JIT pass for the next framebuffer output.
+ this.graphicsJITScanlineGroup();
+ }
+}
+GameBoyCore.prototype.graphicsJITVBlank = function () {
+ //JIT the graphics to v-blank framing:
+ this.totalLinesPassed += this.queuedScanLines;
+ this.graphicsJITScanlineGroup();
+}
+GameBoyCore.prototype.graphicsJITScanlineGroup = function () {
+ //Normal rendering JIT, where we try to do groups of scanlines at once:
+ while (this.queuedScanLines > 0) {
+ this.renderScanLine(this.lastUnrenderedLine);
+ if (this.lastUnrenderedLine < 143) {
+ ++this.lastUnrenderedLine;
+ }
+ else {
+ this.lastUnrenderedLine = 0;
+ }
+ --this.queuedScanLines;
+ }
+}
+GameBoyCore.prototype.incrementScanLineQueue = function () {
+ if (this.queuedScanLines < 144) {
+ ++this.queuedScanLines;
+ }
+ else {
+ this.currentX = 0;
+ this.midScanlineOffset = -1;
+ if (this.lastUnrenderedLine < 143) {
+ ++this.lastUnrenderedLine;
+ }
+ else {
+ this.lastUnrenderedLine = 0;
+ }
+ }
+}
+GameBoyCore.prototype.midScanLineJIT = function () {
+ this.graphicsJIT();
+ this.renderMidScanLine();
+}
+//Check for the highest priority IRQ to fire:
+GameBoyCore.prototype.launchIRQ = function () {
+ var bitShift = 0;
+ var testbit = 1;
+ do {
+ //Check to see if an interrupt is enabled AND requested.
+ if ((testbit & this.IRQLineMatched) == testbit) {
+ this.IME = false; //Reset the interrupt enabling.
+ this.interruptsRequested -= testbit; //Reset the interrupt request.
+ this.IRQLineMatched = 0; //Reset the IRQ assertion.
+ //Interrupts have a certain clock cycle length:
+ this.CPUTicks = 20;
+ //Set the stack pointer to the current program counter value:
+ this.stackPointer = (this.stackPointer - 1) & 0xFFFF;
+ this.memoryWriter[this.stackPointer](this, this.stackPointer, this.programCounter >> 8);
+ this.stackPointer = (this.stackPointer - 1) & 0xFFFF;
+ this.memoryWriter[this.stackPointer](this, this.stackPointer, this.programCounter & 0xFF);
+ //Set the program counter to the interrupt's address:
+ this.programCounter = 0x40 | (bitShift << 3);
+ //Clock the core for mid-instruction updates:
+ this.updateCore();
+ return; //We only want the highest priority interrupt.
+ }
+ testbit = 1 << ++bitShift;
+ } while (bitShift < 5);
+}
+/*
+ Check for IRQs to be fired while not in HALT:
+*/
+GameBoyCore.prototype.checkIRQMatching = function () {
+ if (this.IME) {
+ this.IRQLineMatched = this.interruptsEnabled & this.interruptsRequested & 0x1F;
+ }
+}
+/*
+ Handle the HALT opcode by predicting all IRQ cases correctly,
+ then selecting the next closest IRQ firing from the prediction to
+ clock up to. This prevents hacky looping that doesn't predict, but
+ instead just clocks through the core update procedure by one which
+ is very slow. Not many emulators do this because they have to cover
+ all the IRQ prediction cases and they usually get them wrong.
+*/
+GameBoyCore.prototype.calculateHALTPeriod = function () {
+ //Initialize our variables and start our prediction:
+ if (!this.halt) {
+ this.halt = true;
+ var currentClocks = -1;
+ var temp_var = 0;
+ if (this.LCDisOn) {
+ //If the LCD is enabled, then predict the LCD IRQs enabled:
+ if ((this.interruptsEnabled & 0x1) == 0x1) {
+ currentClocks = ((456 * (((this.modeSTAT == 1) ? 298 : 144) - this.actualScanLine)) - this.LCDTicks) << this.doubleSpeedShifter;
+ }
+ if ((this.interruptsEnabled & 0x2) == 0x2) {
+ if (this.mode0TriggerSTAT) {
+ temp_var = (this.clocksUntilMode0() - this.LCDTicks) << this.doubleSpeedShifter;
+ if (temp_var <= currentClocks || currentClocks == -1) {
+ currentClocks = temp_var;
+ }
+ }
+ if (this.mode1TriggerSTAT && (this.interruptsEnabled & 0x1) == 0) {
+ temp_var = ((456 * (((this.modeSTAT == 1) ? 298 : 144) - this.actualScanLine)) - this.LCDTicks) << this.doubleSpeedShifter;
+ if (temp_var <= currentClocks || currentClocks == -1) {
+ currentClocks = temp_var;
+ }
+ }
+ if (this.mode2TriggerSTAT) {
+ temp_var = (((this.actualScanLine >= 143) ? (456 * (154 - this.actualScanLine)) : 456) - this.LCDTicks) << this.doubleSpeedShifter;
+ if (temp_var <= currentClocks || currentClocks == -1) {
+ currentClocks = temp_var;
+ }
+ }
+ if (this.LYCMatchTriggerSTAT && this.memory[0xFF45] <= 153) {
+ temp_var = (this.clocksUntilLYCMatch() - this.LCDTicks) << this.doubleSpeedShifter;
+ if (temp_var <= currentClocks || currentClocks == -1) {
+ currentClocks = temp_var;
+ }
+ }
+ }
+ }
+ if (this.TIMAEnabled && (this.interruptsEnabled & 0x4) == 0x4) {
+ //CPU timer IRQ prediction:
+ temp_var = ((0x100 - this.memory[0xFF05]) * this.TACClocker) - this.timerTicks;
+ if (temp_var <= currentClocks || currentClocks == -1) {
+ currentClocks = temp_var;
+ }
+ }
+ if (this.serialTimer > 0 && (this.interruptsEnabled & 0x8) == 0x8) {
+ //Serial IRQ prediction:
+ if (this.serialTimer <= currentClocks || currentClocks == -1) {
+ currentClocks = this.serialTimer;
+ }
+ }
+ }
+ else {
+ var currentClocks = this.remainingClocks;
+ }
+ var maxClocks = (this.CPUCyclesTotal - this.emulatorTicks) << this.doubleSpeedShifter;
+ if (currentClocks >= 0) {
+ if (currentClocks <= maxClocks) {
+ //Exit out of HALT normally:
+ this.CPUTicks = Math.max(currentClocks, this.CPUTicks);
+ this.updateCoreFull();
+ this.halt = false;
+ this.CPUTicks = 0;
+ }
+ else {
+ //Still in HALT, clock only up to the clocks specified per iteration:
+ this.CPUTicks = Math.max(maxClocks, this.CPUTicks);
+ this.remainingClocks = currentClocks - this.CPUTicks;
+ }
+ }
+ else {
+ //Still in HALT, clock only up to the clocks specified per iteration:
+ //Will stay in HALT forever (Stuck in HALT forever), but the APU and LCD are still clocked, so don't pause:
+ this.CPUTicks += maxClocks;
+ }
+}
+//Memory Reading:
+GameBoyCore.prototype.memoryRead = function (address) {
+ //Act as a wrapper for reading the returns from the compiled jumps to memory.
+ return this.memoryReader[address](this, address); //This seems to be faster than the usual if/else.
+}
+GameBoyCore.prototype.memoryHighRead = function (address) {
+ //Act as a wrapper for reading the returns from the compiled jumps to memory.
+ return this.memoryHighReader[address](this, address); //This seems to be faster than the usual if/else.
+}
+GameBoyCore.prototype.memoryReadJumpCompile = function () {
+ //Faster in some browsers, since we are doing less conditionals overall by implementing them in advance.
+ for (var index = 0x0000; index <= 0xFFFF; index++) {
+ if (index < 0x4000) {
+ this.memoryReader[index] = this.memoryReadNormal;
+ }
+ else if (index < 0x8000) {
+ this.memoryReader[index] = this.memoryReadROM;
+ }
+ else if (index < 0x9800) {
+ this.memoryReader[index] = (this.cGBC) ? this.VRAMDATAReadCGBCPU : this.VRAMDATAReadDMGCPU;
+ }
+ else if (index < 0xA000) {
+ this.memoryReader[index] = (this.cGBC) ? this.VRAMCHRReadCGBCPU : this.VRAMCHRReadDMGCPU;
+ }
+ else if (index >= 0xA000 && index < 0xC000) {
+ if ((this.numRAMBanks == 1 / 16 && index < 0xA200) || this.numRAMBanks >= 1) {
+ if (this.cMBC7) {
+ this.memoryReader[index] = this.memoryReadMBC7;
+ }
+ else if (!this.cMBC3) {
+ this.memoryReader[index] = this.memoryReadMBC;
+ }
+ else {
+ //MBC3 RTC + RAM:
+ this.memoryReader[index] = this.memoryReadMBC3;
+ }
+ }
+ else {
+ this.memoryReader[index] = this.memoryReadBAD;
+ }
+ }
+ else if (index >= 0xC000 && index < 0xE000) {
+ if (!this.cGBC || index < 0xD000) {
+ this.memoryReader[index] = this.memoryReadNormal;
+ }
+ else {
+ this.memoryReader[index] = this.memoryReadGBCMemory;
+ }
+ }
+ else if (index >= 0xE000 && index < 0xFE00) {
+ if (!this.cGBC || index < 0xF000) {
+ this.memoryReader[index] = this.memoryReadECHONormal;
+ }
+ else {
+ this.memoryReader[index] = this.memoryReadECHOGBCMemory;
+ }
+ }
+ else if (index < 0xFEA0) {
+ this.memoryReader[index] = this.memoryReadOAM;
+ }
+ else if (this.cGBC && index >= 0xFEA0 && index < 0xFF00) {
+ this.memoryReader[index] = this.memoryReadNormal;
+ }
+ else if (index >= 0xFF00) {
+ switch (index) {
+ case 0xFF00:
+ //JOYPAD:
+ this.memoryHighReader[0] = this.memoryReader[0xFF00] = function (parentObj, address) {
+ return 0xC0 | parentObj.memory[0xFF00]; //Top nibble returns as set.
+ }
+ break;
+ case 0xFF01:
+ //SB
+ this.memoryHighReader[0x01] = this.memoryReader[0xFF01] = function (parentObj, address) {
+ return (parentObj.memory[0xFF02] < 0x80) ? parentObj.memory[0xFF01] : 0xFF;
+ }
+ break;
+ case 0xFF02:
+ //SC
+ if (this.cGBC) {
+ this.memoryHighReader[0x02] = this.memoryReader[0xFF02] = function (parentObj, address) {
+ return ((parentObj.serialTimer <= 0) ? 0x7C : 0xFC) | parentObj.memory[0xFF02];
+ }
+ }
+ else {
+ this.memoryHighReader[0x02] = this.memoryReader[0xFF02] = function (parentObj, address) {
+ return ((parentObj.serialTimer <= 0) ? 0x7E : 0xFE) | parentObj.memory[0xFF02];
+ }
+ }
+ break;
+ case 0xFF04:
+ //DIV
+ this.memoryHighReader[0x04] = this.memoryReader[0xFF04] = function (parentObj, address) {
+ parentObj.memory[0xFF04] = (parentObj.memory[0xFF04] + (parentObj.DIVTicks >> 8)) & 0xFF;
+ parentObj.DIVTicks &= 0xFF;
+ return parentObj.memory[0xFF04];
+
+ }
+ break;
+ case 0xFF07:
+ this.memoryHighReader[0x07] = this.memoryReader[0xFF07] = function (parentObj, address) {
+ return 0xF8 | parentObj.memory[0xFF07];
+ }
+ break;
+ case 0xFF0F:
+ //IF
+ this.memoryHighReader[0x0F] = this.memoryReader[0xFF0F] = function (parentObj, address) {
+ return 0xE0 | parentObj.interruptsRequested;
+ }
+ break;
+ case 0xFF10:
+ this.memoryHighReader[0x10] = this.memoryReader[0xFF10] = function (parentObj, address) {
+ return 0x80 | parentObj.memory[0xFF10];
+ }
+ break;
+ case 0xFF11:
+ this.memoryHighReader[0x11] = this.memoryReader[0xFF11] = function (parentObj, address) {
+ return 0x3F | parentObj.memory[0xFF11];
+ }
+ break;
+ case 0xFF13:
+ this.memoryHighReader[0x13] = this.memoryReader[0xFF13] = this.memoryReadBAD;
+ break;
+ case 0xFF14:
+ this.memoryHighReader[0x14] = this.memoryReader[0xFF14] = function (parentObj, address) {
+ return 0xBF | parentObj.memory[0xFF14];
+ }
+ break;
+ case 0xFF16:
+ this.memoryHighReader[0x16] = this.memoryReader[0xFF16] = function (parentObj, address) {
+ return 0x3F | parentObj.memory[0xFF16];
+ }
+ break;
+ case 0xFF18:
+ this.memoryHighReader[0x18] = this.memoryReader[0xFF18] = this.memoryReadBAD;
+ break;
+ case 0xFF19:
+ this.memoryHighReader[0x19] = this.memoryReader[0xFF19] = function (parentObj, address) {
+ return 0xBF | parentObj.memory[0xFF19];
+ }
+ break;
+ case 0xFF1A:
+ this.memoryHighReader[0x1A] = this.memoryReader[0xFF1A] = function (parentObj, address) {
+ return 0x7F | parentObj.memory[0xFF1A];
+ }
+ break;
+ case 0xFF1B:
+ this.memoryHighReader[0x1B] = this.memoryReader[0xFF1B] = this.memoryReadBAD;
+ break;
+ case 0xFF1C:
+ this.memoryHighReader[0x1C] = this.memoryReader[0xFF1C] = function (parentObj, address) {
+ return 0x9F | parentObj.memory[0xFF1C];
+ }
+ break;
+ case 0xFF1D:
+ this.memoryHighReader[0x1D] = this.memoryReader[0xFF1D] = function (parentObj, address) {
+ return 0xFF;
+ }
+ break;
+ case 0xFF1E:
+ this.memoryHighReader[0x1E] = this.memoryReader[0xFF1E] = function (parentObj, address) {
+ return 0xBF | parentObj.memory[0xFF1E];
+ }
+ break;
+ case 0xFF1F:
+ case 0xFF20:
+ this.memoryHighReader[index & 0xFF] = this.memoryReader[index] = this.memoryReadBAD;
+ break;
+ case 0xFF23:
+ this.memoryHighReader[0x23] = this.memoryReader[0xFF23] = function (parentObj, address) {
+ return 0xBF | parentObj.memory[0xFF23];
+ }
+ break;
+ case 0xFF26:
+ this.memoryHighReader[0x26] = this.memoryReader[0xFF26] = function (parentObj, address) {
+ parentObj.audioJIT();
+ return 0x70 | parentObj.memory[0xFF26];
+ }
+ break;
+ case 0xFF27:
+ case 0xFF28:
+ case 0xFF29:
+ case 0xFF2A:
+ case 0xFF2B:
+ case 0xFF2C:
+ case 0xFF2D:
+ case 0xFF2E:
+ case 0xFF2F:
+ this.memoryHighReader[index & 0xFF] = this.memoryReader[index] = this.memoryReadBAD;
+ break;
+ case 0xFF30:
+ case 0xFF31:
+ case 0xFF32:
+ case 0xFF33:
+ case 0xFF34:
+ case 0xFF35:
+ case 0xFF36:
+ case 0xFF37:
+ case 0xFF38:
+ case 0xFF39:
+ case 0xFF3A:
+ case 0xFF3B:
+ case 0xFF3C:
+ case 0xFF3D:
+ case 0xFF3E:
+ case 0xFF3F:
+ this.memoryReader[index] = function (parentObj, address) {
+ return (parentObj.channel3canPlay) ? parentObj.memory[0xFF00 | (parentObj.channel3lastSampleLookup >> 1)] : parentObj.memory[address];
+ }
+ this.memoryHighReader[index & 0xFF] = function (parentObj, address) {
+ return (parentObj.channel3canPlay) ? parentObj.memory[0xFF00 | (parentObj.channel3lastSampleLookup >> 1)] : parentObj.memory[0xFF00 | address];
+ }
+ break;
+ case 0xFF41:
+ this.memoryHighReader[0x41] = this.memoryReader[0xFF41] = function (parentObj, address) {
+ return 0x80 | parentObj.memory[0xFF41] | parentObj.modeSTAT;
+ }
+ break;
+ case 0xFF42:
+ this.memoryHighReader[0x42] = this.memoryReader[0xFF42] = function (parentObj, address) {
+ return parentObj.backgroundY;
+ }
+ break;
+ case 0xFF43:
+ this.memoryHighReader[0x43] = this.memoryReader[0xFF43] = function (parentObj, address) {
+ return parentObj.backgroundX;
+ }
+ break;
+ case 0xFF44:
+ this.memoryHighReader[0x44] = this.memoryReader[0xFF44] = function (parentObj, address) {
+ return ((parentObj.LCDisOn) ? parentObj.memory[0xFF44] : 0);
+ }
+ break;
+ case 0xFF4A:
+ //WY
+ this.memoryHighReader[0x4A] = this.memoryReader[0xFF4A] = function (parentObj, address) {
+ return parentObj.windowY;
+ }
+ break;
+ case 0xFF4F:
+ this.memoryHighReader[0x4F] = this.memoryReader[0xFF4F] = function (parentObj, address) {
+ return parentObj.currVRAMBank;
+ }
+ break;
+ case 0xFF55:
+ if (this.cGBC) {
+ this.memoryHighReader[0x55] = this.memoryReader[0xFF55] = function (parentObj, address) {
+ if (!parentObj.LCDisOn && parentObj.hdmaRunning) { //Undocumented behavior alert: HDMA becomes GDMA when LCD is off (Worms Armageddon Fix).
+ //DMA
+ parentObj.DMAWrite((parentObj.memory[0xFF55] & 0x7F) + 1);
+ parentObj.memory[0xFF55] = 0xFF; //Transfer completed.
+ parentObj.hdmaRunning = false;
+ }
+ return parentObj.memory[0xFF55];
+ }
+ }
+ else {
+ this.memoryReader[0xFF55] = this.memoryReadNormal;
+ this.memoryHighReader[0x55] = this.memoryHighReadNormal;
+ }
+ break;
+ case 0xFF56:
+ if (this.cGBC) {
+ this.memoryHighReader[0x56] = this.memoryReader[0xFF56] = function (parentObj, address) {
+ //Return IR "not connected" status:
+ return 0x3C | ((parentObj.memory[0xFF56] >= 0xC0) ? (0x2 | (parentObj.memory[0xFF56] & 0xC1)) : (parentObj.memory[0xFF56] & 0xC3));
+ }
+ }
+ else {
+ this.memoryReader[0xFF56] = this.memoryReadNormal;
+ this.memoryHighReader[0x56] = this.memoryHighReadNormal;
+ }
+ break;
+ case 0xFF6C:
+ if (this.cGBC) {
+ this.memoryHighReader[0x6C] = this.memoryReader[0xFF6C] = function (parentObj, address) {
+ return 0xFE | parentObj.memory[0xFF6C];
+ }
+ }
+ else {
+ this.memoryHighReader[0x6C] = this.memoryReader[0xFF6C] = this.memoryReadBAD;
+ }
+ break;
+ case 0xFF70:
+ if (this.cGBC) {
+ //SVBK
+ this.memoryHighReader[0x70] = this.memoryReader[0xFF70] = function (parentObj, address) {
+ return 0x40 | parentObj.memory[0xFF70];
+ }
+ }
+ else {
+ this.memoryHighReader[0x70] = this.memoryReader[0xFF70] = this.memoryReadBAD;
+ }
+ break;
+ case 0xFF75:
+ this.memoryHighReader[0x75] = this.memoryReader[0xFF75] = function (parentObj, address) {
+ return 0x8F | parentObj.memory[0xFF75];
+ }
+ break;
+ case 0xFF76:
+ case 0xFF77:
+ this.memoryHighReader[index & 0xFF] = this.memoryReader[index] = function (parentObj, address) {
+ return 0;
+ }
+ break;
+ case 0xFFFF:
+ //IE
+ this.memoryHighReader[0xFF] = this.memoryReader[0xFFFF] = function (parentObj, address) {
+ return parentObj.interruptsEnabled;
+ }
+ break;
+ default:
+ this.memoryReader[index] = this.memoryReadNormal;
+ this.memoryHighReader[index & 0xFF] = this.memoryHighReadNormal;
+ }
+ }
+ else {
+ this.memoryReader[index] = this.memoryReadBAD;
+ }
+ }
+}
+GameBoyCore.prototype.memoryReadNormal = function (parentObj, address) {
+ return parentObj.memory[address];
+}
+GameBoyCore.prototype.memoryHighReadNormal = function (parentObj, address) {
+ return parentObj.memory[0xFF00 | address];
+}
+GameBoyCore.prototype.memoryReadROM = function (parentObj, address) {
+ return parentObj.ROM[parentObj.currentROMBank + address];
+}
+GameBoyCore.prototype.memoryReadMBC = function (parentObj, address) {
+ //Switchable RAM
+ if (parentObj.MBCRAMBanksEnabled || settings[10]) {
+ return parentObj.MBCRam[address + parentObj.currMBCRAMBankPosition];
+ }
+ //cout("Reading from disabled RAM.", 1);
+ return 0xFF;
+}
+GameBoyCore.prototype.memoryReadMBC7 = function (parentObj, address) {
+ //Switchable RAM
+ if (parentObj.MBCRAMBanksEnabled || settings[10]) {
+ switch (address) {
+ case 0xA000:
+ case 0xA060:
+ case 0xA070:
+ return 0;
+ case 0xA080:
+ //TODO: Gyro Control Register
+ return 0;
+ case 0xA050:
+ //Y High Byte
+ return parentObj.highY;
+ case 0xA040:
+ //Y Low Byte
+ return parentObj.lowY;
+ case 0xA030:
+ //X High Byte
+ return parentObj.highX;
+ case 0xA020:
+ //X Low Byte:
+ return parentObj.lowX;
+ default:
+ return parentObj.MBCRam[address + parentObj.currMBCRAMBankPosition];
+ }
+ }
+ //cout("Reading from disabled RAM.", 1);
+ return 0xFF;
+}
+GameBoyCore.prototype.memoryReadMBC3 = function (parentObj, address) {
+ //Switchable RAM
+ if (parentObj.MBCRAMBanksEnabled || settings[10]) {
+ switch (parentObj.currMBCRAMBank) {
+ case 0x00:
+ case 0x01:
+ case 0x02:
+ case 0x03:
+ return parentObj.MBCRam[address + parentObj.currMBCRAMBankPosition];
+ break;
+ case 0x08:
+ return parentObj.latchedSeconds;
+ break;
+ case 0x09:
+ return parentObj.latchedMinutes;
+ break;
+ case 0x0A:
+ return parentObj.latchedHours;
+ break;
+ case 0x0B:
+ return parentObj.latchedLDays;
+ break;
+ case 0x0C:
+ return (((parentObj.RTCDayOverFlow) ? 0x80 : 0) + ((parentObj.RTCHALT) ? 0x40 : 0)) + parentObj.latchedHDays;
+ }
+ }
+ //cout("Reading from invalid or disabled RAM.", 1);
+ return 0xFF;
+}
+GameBoyCore.prototype.memoryReadGBCMemory = function (parentObj, address) {
+ return parentObj.GBCMemory[address + parentObj.gbcRamBankPosition];
+}
+GameBoyCore.prototype.memoryReadOAM = function (parentObj, address) {
+ return (parentObj.modeSTAT > 1) ? 0xFF : parentObj.memory[address];
+}
+GameBoyCore.prototype.memoryReadECHOGBCMemory = function (parentObj, address) {
+ return parentObj.GBCMemory[address + parentObj.gbcRamBankPositionECHO];
+}
+GameBoyCore.prototype.memoryReadECHONormal = function (parentObj, address) {
+ return parentObj.memory[address - 0x2000];
+}
+GameBoyCore.prototype.memoryReadBAD = function (parentObj, address) {
+ return 0xFF;
+}
+GameBoyCore.prototype.VRAMDATAReadCGBCPU = function (parentObj, address) {
+ //CPU Side Reading The VRAM (Optimized for GameBoy Color)
+ return (parentObj.modeSTAT > 2) ? 0xFF : ((parentObj.currVRAMBank == 0) ? parentObj.memory[address] : parentObj.VRAM[address & 0x1FFF]);
+}
+GameBoyCore.prototype.VRAMDATAReadDMGCPU = function (parentObj, address) {
+ //CPU Side Reading The VRAM (Optimized for classic GameBoy)
+ return (parentObj.modeSTAT > 2) ? 0xFF : parentObj.memory[address];
+}
+GameBoyCore.prototype.VRAMCHRReadCGBCPU = function (parentObj, address) {
+ //CPU Side Reading the Character Data Map:
+ return (parentObj.modeSTAT > 2) ? 0xFF : parentObj.BGCHRCurrentBank[address & 0x7FF];
+}
+GameBoyCore.prototype.VRAMCHRReadDMGCPU = function (parentObj, address) {
+ //CPU Side Reading the Character Data Map:
+ return (parentObj.modeSTAT > 2) ? 0xFF : parentObj.BGCHRBank1[address & 0x7FF];
+}
+GameBoyCore.prototype.setCurrentMBC1ROMBank = function () {
+ //Read the cartridge ROM data from RAM memory:
+ switch (this.ROMBank1offs) {
+ case 0x00:
+ case 0x20:
+ case 0x40:
+ case 0x60:
+ //Bank calls for 0x00, 0x20, 0x40, and 0x60 are really for 0x01, 0x21, 0x41, and 0x61.
+ this.currentROMBank = (this.ROMBank1offs % this.ROMBankEdge) << 14;
+ break;
+ default:
+ this.currentROMBank = ((this.ROMBank1offs % this.ROMBankEdge) - 1) << 14;
+ }
+}
+GameBoyCore.prototype.setCurrentMBC2AND3ROMBank = function () {
+ //Read the cartridge ROM data from RAM memory:
+ //Only map bank 0 to bank 1 here (MBC2 is like MBC1, but can only do 16 banks, so only the bank 0 quirk appears for MBC2):
+ this.currentROMBank = Math.max((this.ROMBank1offs % this.ROMBankEdge) - 1, 0) << 14;
+}
+GameBoyCore.prototype.setCurrentMBC5ROMBank = function () {
+ //Read the cartridge ROM data from RAM memory:
+ this.currentROMBank = ((this.ROMBank1offs % this.ROMBankEdge) - 1) << 14;
+}
+//Memory Writing:
+GameBoyCore.prototype.memoryWrite = function (address, data) {
+ //Act as a wrapper for writing by compiled jumps to specific memory writing functions.
+ this.memoryWriter[address](this, address, data);
+}
+//0xFFXX fast path:
+GameBoyCore.prototype.memoryHighWrite = function (address, data) {
+ //Act as a wrapper for writing by compiled jumps to specific memory writing functions.
+ this.memoryHighWriter[address](this, address, data);
+}
+GameBoyCore.prototype.memoryWriteJumpCompile = function () {
+ //Faster in some browsers, since we are doing less conditionals overall by implementing them in advance.
+ for (var index = 0x0000; index <= 0xFFFF; index++) {
+ if (index < 0x8000) {
+ if (this.cMBC1) {
+ if (index < 0x2000) {
+ this.memoryWriter[index] = this.MBCWriteEnable;
+ }
+ else if (index < 0x4000) {
+ this.memoryWriter[index] = this.MBC1WriteROMBank;
+ }
+ else if (index < 0x6000) {
+ this.memoryWriter[index] = this.MBC1WriteRAMBank;
+ }
+ else {
+ this.memoryWriter[index] = this.MBC1WriteType;
+ }
+ }
+ else if (this.cMBC2) {
+ if (index < 0x1000) {
+ this.memoryWriter[index] = this.MBCWriteEnable;
+ }
+ else if (index >= 0x2100 && index < 0x2200) {
+ this.memoryWriter[index] = this.MBC2WriteROMBank;
+ }
+ else {
+ this.memoryWriter[index] = this.cartIgnoreWrite;
+ }
+ }
+ else if (this.cMBC3) {
+ if (index < 0x2000) {
+ this.memoryWriter[index] = this.MBCWriteEnable;
+ }
+ else if (index < 0x4000) {
+ this.memoryWriter[index] = this.MBC3WriteROMBank;
+ }
+ else if (index < 0x6000) {
+ this.memoryWriter[index] = this.MBC3WriteRAMBank;
+ }
+ else {
+ this.memoryWriter[index] = this.MBC3WriteRTCLatch;
+ }
+ }
+ else if (this.cMBC5 || this.cRUMBLE || this.cMBC7) {
+ if (index < 0x2000) {
+ this.memoryWriter[index] = this.MBCWriteEnable;
+ }
+ else if (index < 0x3000) {
+ this.memoryWriter[index] = this.MBC5WriteROMBankLow;
+ }
+ else if (index < 0x4000) {
+ this.memoryWriter[index] = this.MBC5WriteROMBankHigh;
+ }
+ else if (index < 0x6000) {
+ this.memoryWriter[index] = (this.cRUMBLE) ? this.RUMBLEWriteRAMBank : this.MBC5WriteRAMBank;
+ }
+ else {
+ this.memoryWriter[index] = this.cartIgnoreWrite;
+ }
+ }
+ else if (this.cHuC3) {
+ if (index < 0x2000) {
+ this.memoryWriter[index] = this.MBCWriteEnable;
+ }
+ else if (index < 0x4000) {
+ this.memoryWriter[index] = this.MBC3WriteROMBank;
+ }
+ else if (index < 0x6000) {
+ this.memoryWriter[index] = this.HuC3WriteRAMBank;
+ }
+ else {
+ this.memoryWriter[index] = this.cartIgnoreWrite;
+ }
+ }
+ else {
+ this.memoryWriter[index] = this.cartIgnoreWrite;
+ }
+ }
+ else if (index < 0x9000) {
+ this.memoryWriter[index] = (this.cGBC) ? this.VRAMGBCDATAWrite : this.VRAMGBDATAWrite;
+ }
+ else if (index < 0x9800) {
+ this.memoryWriter[index] = (this.cGBC) ? this.VRAMGBCDATAWrite : this.VRAMGBDATAUpperWrite;
+ }
+ else if (index < 0xA000) {
+ this.memoryWriter[index] = (this.cGBC) ? this.VRAMGBCCHRMAPWrite : this.VRAMGBCHRMAPWrite;
+ }
+ else if (index < 0xC000) {
+ if ((this.numRAMBanks == 1 / 16 && index < 0xA200) || this.numRAMBanks >= 1) {
+ if (!this.cMBC3) {
+ this.memoryWriter[index] = this.memoryWriteMBCRAM;
+ }
+ else {
+ //MBC3 RTC + RAM:
+ this.memoryWriter[index] = this.memoryWriteMBC3RAM;
+ }
+ }
+ else {
+ this.memoryWriter[index] = this.cartIgnoreWrite;
+ }
+ }
+ else if (index < 0xE000) {
+ if (this.cGBC && index >= 0xD000) {
+ this.memoryWriter[index] = this.memoryWriteGBCRAM;
+ }
+ else {
+ this.memoryWriter[index] = this.memoryWriteNormal;
+ }
+ }
+ else if (index < 0xFE00) {
+ if (this.cGBC && index >= 0xF000) {
+ this.memoryWriter[index] = this.memoryWriteECHOGBCRAM;
+ }
+ else {
+ this.memoryWriter[index] = this.memoryWriteECHONormal;
+ }
+ }
+ else if (index <= 0xFEA0) {
+ this.memoryWriter[index] = this.memoryWriteOAMRAM;
+ }
+ else if (index < 0xFF00) {
+ if (this.cGBC) { //Only GBC has access to this RAM.
+ this.memoryWriter[index] = this.memoryWriteNormal;
+ }
+ else {
+ this.memoryWriter[index] = this.cartIgnoreWrite;
+ }
+ }
+ else {
+ //Start the I/O initialization by filling in the slots as normal memory:
+ this.memoryWriter[index] = this.memoryWriteNormal;
+ this.memoryHighWriter[index & 0xFF] = this.memoryHighWriteNormal;
+ }
+ }
+ this.registerWriteJumpCompile(); //Compile the I/O write functions separately...
+}
+GameBoyCore.prototype.MBCWriteEnable = function (parentObj, address, data) {
+ //MBC RAM Bank Enable/Disable:
+ parentObj.MBCRAMBanksEnabled = ((data & 0x0F) == 0x0A); //If lower nibble is 0x0A, then enable, otherwise disable.
+}
+GameBoyCore.prototype.MBC1WriteROMBank = function (parentObj, address, data) {
+ //MBC1 ROM bank switching:
+ parentObj.ROMBank1offs = (parentObj.ROMBank1offs & 0x60) | (data & 0x1F);
+ parentObj.setCurrentMBC1ROMBank();
+}
+GameBoyCore.prototype.MBC1WriteRAMBank = function (parentObj, address, data) {
+ //MBC1 RAM bank switching
+ if (parentObj.MBC1Mode) {
+ //4/32 Mode
+ parentObj.currMBCRAMBank = data & 0x03;
+ parentObj.currMBCRAMBankPosition = (parentObj.currMBCRAMBank << 13) - 0xA000;
+ }
+ else {
+ //16/8 Mode
+ parentObj.ROMBank1offs = ((data & 0x03) << 5) | (parentObj.ROMBank1offs & 0x1F);
+ parentObj.setCurrentMBC1ROMBank();
+ }
+}
+GameBoyCore.prototype.MBC1WriteType = function (parentObj, address, data) {
+ //MBC1 mode setting:
+ parentObj.MBC1Mode = ((data & 0x1) == 0x1);
+ if (parentObj.MBC1Mode) {
+ parentObj.ROMBank1offs &= 0x1F;
+ parentObj.setCurrentMBC1ROMBank();
+ }
+ else {
+ parentObj.currMBCRAMBank = 0;
+ parentObj.currMBCRAMBankPosition = -0xA000;
+ }
+}
+GameBoyCore.prototype.MBC2WriteROMBank = function (parentObj, address, data) {
+ //MBC2 ROM bank switching:
+ parentObj.ROMBank1offs = data & 0x0F;
+ parentObj.setCurrentMBC2AND3ROMBank();
+}
+GameBoyCore.prototype.MBC3WriteROMBank = function (parentObj, address, data) {
+ //MBC3 ROM bank switching:
+ parentObj.ROMBank1offs = data & 0x7F;
+ parentObj.setCurrentMBC2AND3ROMBank();
+}
+GameBoyCore.prototype.MBC3WriteRAMBank = function (parentObj, address, data) {
+ parentObj.currMBCRAMBank = data;
+ if (data < 4) {
+ //MBC3 RAM bank switching
+ parentObj.currMBCRAMBankPosition = (parentObj.currMBCRAMBank << 13) - 0xA000;
+ }
+}
+GameBoyCore.prototype.MBC3WriteRTCLatch = function (parentObj, address, data) {
+ if (data == 0) {
+ parentObj.RTCisLatched = false;
+ }
+ else if (!parentObj.RTCisLatched) {
+ //Copy over the current RTC time for reading.
+ parentObj.RTCisLatched = true;
+ parentObj.latchedSeconds = parentObj.RTCSeconds | 0;
+ parentObj.latchedMinutes = parentObj.RTCMinutes;
+ parentObj.latchedHours = parentObj.RTCHours;
+ parentObj.latchedLDays = (parentObj.RTCDays & 0xFF);
+ parentObj.latchedHDays = parentObj.RTCDays >> 8;
+ }
+}
+GameBoyCore.prototype.MBC5WriteROMBankLow = function (parentObj, address, data) {
+ //MBC5 ROM bank switching:
+ parentObj.ROMBank1offs = (parentObj.ROMBank1offs & 0x100) | data;
+ parentObj.setCurrentMBC5ROMBank();
+}
+GameBoyCore.prototype.MBC5WriteROMBankHigh = function (parentObj, address, data) {
+ //MBC5 ROM bank switching (by least significant bit):
+ parentObj.ROMBank1offs = ((data & 0x01) << 8) | (parentObj.ROMBank1offs & 0xFF);
+ parentObj.setCurrentMBC5ROMBank();
+}
+GameBoyCore.prototype.MBC5WriteRAMBank = function (parentObj, address, data) {
+ //MBC5 RAM bank switching
+ parentObj.currMBCRAMBank = data & 0xF;
+ parentObj.currMBCRAMBankPosition = (parentObj.currMBCRAMBank << 13) - 0xA000;
+}
+GameBoyCore.prototype.RUMBLEWriteRAMBank = function (parentObj, address, data) {
+ //MBC5 RAM bank switching
+ //Like MBC5, but bit 3 of the lower nibble is used for rumbling and bit 2 is ignored.
+ parentObj.currMBCRAMBank = data & 0x03;
+ parentObj.currMBCRAMBankPosition = (parentObj.currMBCRAMBank << 13) - 0xA000;
+}
+GameBoyCore.prototype.HuC3WriteRAMBank = function (parentObj, address, data) {
+ //HuC3 RAM bank switching
+ parentObj.currMBCRAMBank = data & 0x03;
+ parentObj.currMBCRAMBankPosition = (parentObj.currMBCRAMBank << 13) - 0xA000;
+}
+GameBoyCore.prototype.cartIgnoreWrite = function (parentObj, address, data) {
+ //We might have encountered illegal RAM writing or such, so just do nothing...
+}
+GameBoyCore.prototype.memoryWriteNormal = function (parentObj, address, data) {
+ parentObj.memory[address] = data;
+}
+GameBoyCore.prototype.memoryHighWriteNormal = function (parentObj, address, data) {
+ parentObj.memory[0xFF00 | address] = data;
+}
+GameBoyCore.prototype.memoryWriteMBCRAM = function (parentObj, address, data) {
+ if (parentObj.MBCRAMBanksEnabled || settings[10]) {
+ parentObj.MBCRam[address + parentObj.currMBCRAMBankPosition] = data;
+ }
+}
+GameBoyCore.prototype.memoryWriteMBC3RAM = function (parentObj, address, data) {
+ if (parentObj.MBCRAMBanksEnabled || settings[10]) {
+ switch (parentObj.currMBCRAMBank) {
+ case 0x00:
+ case 0x01:
+ case 0x02:
+ case 0x03:
+ parentObj.MBCRam[address + parentObj.currMBCRAMBankPosition] = data;
+ break;
+ case 0x08:
+ if (data < 60) {
+ parentObj.RTCSeconds = data;
+ }
+ else {
+ cout("(Bank #" + parentObj.currMBCRAMBank + ") RTC write out of range: " + data, 1);
+ }
+ break;
+ case 0x09:
+ if (data < 60) {
+ parentObj.RTCMinutes = data;
+ }
+ else {
+ cout("(Bank #" + parentObj.currMBCRAMBank + ") RTC write out of range: " + data, 1);
+ }
+ break;
+ case 0x0A:
+ if (data < 24) {
+ parentObj.RTCHours = data;
+ }
+ else {
+ cout("(Bank #" + parentObj.currMBCRAMBank + ") RTC write out of range: " + data, 1);
+ }
+ break;
+ case 0x0B:
+ parentObj.RTCDays = (data & 0xFF) | (parentObj.RTCDays & 0x100);
+ break;
+ case 0x0C:
+ parentObj.RTCDayOverFlow = (data > 0x7F);
+ parentObj.RTCHalt = (data & 0x40) == 0x40;
+ parentObj.RTCDays = ((data & 0x1) << 8) | (parentObj.RTCDays & 0xFF);
+ break;
+ default:
+ cout("Invalid MBC3 bank address selected: " + parentObj.currMBCRAMBank, 0);
+ }
+ }
+}
+GameBoyCore.prototype.memoryWriteGBCRAM = function (parentObj, address, data) {
+ parentObj.GBCMemory[address + parentObj.gbcRamBankPosition] = data;
+}
+GameBoyCore.prototype.memoryWriteOAMRAM = function (parentObj, address, data) {
+ if (parentObj.modeSTAT < 2) { //OAM RAM cannot be written to in mode 2 & 3
+ if (parentObj.memory[address] != data) {
+ parentObj.graphicsJIT();
+ parentObj.memory[address] = data;
+ }
+ }
+}
+GameBoyCore.prototype.memoryWriteECHOGBCRAM = function (parentObj, address, data) {
+ parentObj.GBCMemory[address + parentObj.gbcRamBankPositionECHO] = data;
+}
+GameBoyCore.prototype.memoryWriteECHONormal = function (parentObj, address, data) {
+ parentObj.memory[address - 0x2000] = data;
+}
+GameBoyCore.prototype.VRAMGBDATAWrite = function (parentObj, address, data) {
+ if (parentObj.modeSTAT < 3) { //VRAM cannot be written to during mode 3
+ if (parentObj.memory[address] != data) {
+ //JIT the graphics render queue:
+ parentObj.graphicsJIT();
+ parentObj.memory[address] = data;
+ parentObj.generateGBOAMTileLine(address);
+ }
+ }
+}
+GameBoyCore.prototype.VRAMGBDATAUpperWrite = function (parentObj, address, data) {
+ if (parentObj.modeSTAT < 3) { //VRAM cannot be written to during mode 3
+ if (parentObj.memory[address] != data) {
+ //JIT the graphics render queue:
+ parentObj.graphicsJIT();
+ parentObj.memory[address] = data;
+ parentObj.generateGBTileLine(address);
+ }
+ }
+}
+GameBoyCore.prototype.VRAMGBCDATAWrite = function (parentObj, address, data) {
+ if (parentObj.modeSTAT < 3) { //VRAM cannot be written to during mode 3
+ if (parentObj.currVRAMBank == 0) {
+ if (parentObj.memory[address] != data) {
+ //JIT the graphics render queue:
+ parentObj.graphicsJIT();
+ parentObj.memory[address] = data;
+ parentObj.generateGBCTileLineBank1(address);
+ }
+ }
+ else {
+ address &= 0x1FFF;
+ if (parentObj.VRAM[address] != data) {
+ //JIT the graphics render queue:
+ parentObj.graphicsJIT();
+ parentObj.VRAM[address] = data;
+ parentObj.generateGBCTileLineBank2(address);
+ }
+ }
+ }
+}
+GameBoyCore.prototype.VRAMGBCHRMAPWrite = function (parentObj, address, data) {
+ if (parentObj.modeSTAT < 3) { //VRAM cannot be written to during mode 3
+ address &= 0x7FF;
+ if (parentObj.BGCHRBank1[address] != data) {
+ //JIT the graphics render queue:
+ parentObj.graphicsJIT();
+ parentObj.BGCHRBank1[address] = data;
+ }
+ }
+}
+GameBoyCore.prototype.VRAMGBCCHRMAPWrite = function (parentObj, address, data) {
+ if (parentObj.modeSTAT < 3) { //VRAM cannot be written to during mode 3
+ address &= 0x7FF;
+ if (parentObj.BGCHRCurrentBank[address] != data) {
+ //JIT the graphics render queue:
+ parentObj.graphicsJIT();
+ parentObj.BGCHRCurrentBank[address] = data;
+ }
+ }
+}
+GameBoyCore.prototype.DMAWrite = function (tilesToTransfer) {
+ if (!this.halt) {
+ //Clock the CPU for the DMA transfer (CPU is halted during the transfer):
+ this.CPUTicks += 4 | ((tilesToTransfer << 5) << this.doubleSpeedShifter);
+ }
+ //Source address of the transfer:
+ var source = (this.memory[0xFF51] << 8) | this.memory[0xFF52];
+ //Destination address in the VRAM memory range:
+ var destination = (this.memory[0xFF53] << 8) | this.memory[0xFF54];
+ //Creating some references:
+ var memoryReader = this.memoryReader;
+ //JIT the graphics render queue:
+ this.graphicsJIT();
+ var memory = this.memory;
+ //Determining which bank we're working on so we can optimize:
+ if (this.currVRAMBank == 0) {
+ //DMA transfer for VRAM bank 0:
+ do {
+ if (destination < 0x1800) {
+ memory[0x8000 | destination] = memoryReader[source](this, source++);
+ memory[0x8001 | destination] = memoryReader[source](this, source++);
+ memory[0x8002 | destination] = memoryReader[source](this, source++);
+ memory[0x8003 | destination] = memoryReader[source](this, source++);
+ memory[0x8004 | destination] = memoryReader[source](this, source++);
+ memory[0x8005 | destination] = memoryReader[source](this, source++);
+ memory[0x8006 | destination] = memoryReader[source](this, source++);
+ memory[0x8007 | destination] = memoryReader[source](this, source++);
+ memory[0x8008 | destination] = memoryReader[source](this, source++);
+ memory[0x8009 | destination] = memoryReader[source](this, source++);
+ memory[0x800A | destination] = memoryReader[source](this, source++);
+ memory[0x800B | destination] = memoryReader[source](this, source++);
+ memory[0x800C | destination] = memoryReader[source](this, source++);
+ memory[0x800D | destination] = memoryReader[source](this, source++);
+ memory[0x800E | destination] = memoryReader[source](this, source++);
+ memory[0x800F | destination] = memoryReader[source](this, source++);
+ this.generateGBCTileBank1(destination);
+ destination += 0x10;
+ }
+ else {
+ destination &= 0x7F0;
+ this.BGCHRBank1[destination++] = memoryReader[source](this, source++);
+ this.BGCHRBank1[destination++] = memoryReader[source](this, source++);
+ this.BGCHRBank1[destination++] = memoryReader[source](this, source++);
+ this.BGCHRBank1[destination++] = memoryReader[source](this, source++);
+ this.BGCHRBank1[destination++] = memoryReader[source](this, source++);
+ this.BGCHRBank1[destination++] = memoryReader[source](this, source++);
+ this.BGCHRBank1[destination++] = memoryReader[source](this, source++);
+ this.BGCHRBank1[destination++] = memoryReader[source](this, source++);
+ this.BGCHRBank1[destination++] = memoryReader[source](this, source++);
+ this.BGCHRBank1[destination++] = memoryReader[source](this, source++);
+ this.BGCHRBank1[destination++] = memoryReader[source](this, source++);
+ this.BGCHRBank1[destination++] = memoryReader[source](this, source++);
+ this.BGCHRBank1[destination++] = memoryReader[source](this, source++);
+ this.BGCHRBank1[destination++] = memoryReader[source](this, source++);
+ this.BGCHRBank1[destination++] = memoryReader[source](this, source++);
+ this.BGCHRBank1[destination++] = memoryReader[source](this, source++);
+ destination = (destination + 0x1800) & 0x1FF0;
+ }
+ source &= 0xFFF0;
+ --tilesToTransfer;
+ } while (tilesToTransfer > 0);
+ }
+ else {
+ var VRAM = this.VRAM;
+ //DMA transfer for VRAM bank 1:
+ do {
+ if (destination < 0x1800) {
+ VRAM[destination] = memoryReader[source](this, source++);
+ VRAM[destination | 0x1] = memoryReader[source](this, source++);
+ VRAM[destination | 0x2] = memoryReader[source](this, source++);
+ VRAM[destination | 0x3] = memoryReader[source](this, source++);
+ VRAM[destination | 0x4] = memoryReader[source](this, source++);
+ VRAM[destination | 0x5] = memoryReader[source](this, source++);
+ VRAM[destination | 0x6] = memoryReader[source](this, source++);
+ VRAM[destination | 0x7] = memoryReader[source](this, source++);
+ VRAM[destination | 0x8] = memoryReader[source](this, source++);
+ VRAM[destination | 0x9] = memoryReader[source](this, source++);
+ VRAM[destination | 0xA] = memoryReader[source](this, source++);
+ VRAM[destination | 0xB] = memoryReader[source](this, source++);
+ VRAM[destination | 0xC] = memoryReader[source](this, source++);
+ VRAM[destination | 0xD] = memoryReader[source](this, source++);
+ VRAM[destination | 0xE] = memoryReader[source](this, source++);
+ VRAM[destination | 0xF] = memoryReader[source](this, source++);
+ this.generateGBCTileBank2(destination);
+ destination += 0x10;
+ }
+ else {
+ destination &= 0x7F0;
+ this.BGCHRBank2[destination++] = memoryReader[source](this, source++);
+ this.BGCHRBank2[destination++] = memoryReader[source](this, source++);
+ this.BGCHRBank2[destination++] = memoryReader[source](this, source++);
+ this.BGCHRBank2[destination++] = memoryReader[source](this, source++);
+ this.BGCHRBank2[destination++] = memoryReader[source](this, source++);
+ this.BGCHRBank2[destination++] = memoryReader[source](this, source++);
+ this.BGCHRBank2[destination++] = memoryReader[source](this, source++);
+ this.BGCHRBank2[destination++] = memoryReader[source](this, source++);
+ this.BGCHRBank2[destination++] = memoryReader[source](this, source++);
+ this.BGCHRBank2[destination++] = memoryReader[source](this, source++);
+ this.BGCHRBank2[destination++] = memoryReader[source](this, source++);
+ this.BGCHRBank2[destination++] = memoryReader[source](this, source++);
+ this.BGCHRBank2[destination++] = memoryReader[source](this, source++);
+ this.BGCHRBank2[destination++] = memoryReader[source](this, source++);
+ this.BGCHRBank2[destination++] = memoryReader[source](this, source++);
+ this.BGCHRBank2[destination++] = memoryReader[source](this, source++);
+ destination = (destination + 0x1800) & 0x1FF0;
+ }
+ source &= 0xFFF0;
+ --tilesToTransfer;
+ } while (tilesToTransfer > 0);
+ }
+ //Update the HDMA registers to their next addresses:
+ memory[0xFF51] = source >> 8;
+ memory[0xFF52] = source & 0xF0;
+ memory[0xFF53] = destination >> 8;
+ memory[0xFF54] = destination & 0xF0;
+}
+GameBoyCore.prototype.registerWriteJumpCompile = function () {
+ //I/O Registers (GB + GBC):
+ //JoyPad
+ this.memoryHighWriter[0] = this.memoryWriter[0xFF00] = function (parentObj, address, data) {
+ parentObj.memory[0xFF00] = (data & 0x30) | ((((data & 0x20) == 0) ? (parentObj.JoyPad >> 4) : 0xF) & (((data & 0x10) == 0) ? (parentObj.JoyPad & 0xF) : 0xF));
+ }
+ //SB (Serial Transfer Data)
+ this.memoryHighWriter[0x1] = this.memoryWriter[0xFF01] = function (parentObj, address, data) {
+ if (parentObj.memory[0xFF02] < 0x80) { //Cannot write while a serial transfer is active.
+ parentObj.memory[0xFF01] = data;
+ }
+ }
+ //DIV
+ this.memoryHighWriter[0x4] = this.memoryWriter[0xFF04] = function (parentObj, address, data) {
+ parentObj.DIVTicks &= 0xFF; //Update DIV for realignment.
+ parentObj.memory[0xFF04] = 0;
+ }
+ //TIMA
+ this.memoryHighWriter[0x5] = this.memoryWriter[0xFF05] = function (parentObj, address, data) {
+ parentObj.memory[0xFF05] = data;
+ }
+ //TMA
+ this.memoryHighWriter[0x6] = this.memoryWriter[0xFF06] = function (parentObj, address, data) {
+ parentObj.memory[0xFF06] = data;
+ }
+ //TAC
+ this.memoryHighWriter[0x7] = this.memoryWriter[0xFF07] = function (parentObj, address, data) {
+ parentObj.memory[0xFF07] = data & 0x07;
+ parentObj.TIMAEnabled = (data & 0x04) == 0x04;
+ parentObj.TACClocker = Math.pow(4, ((data & 0x3) != 0) ? (data & 0x3) : 4) << 2; //TODO: Find a way to not make a conditional in here...
+ }
+ //IF (Interrupt Request)
+ this.memoryHighWriter[0xF] = this.memoryWriter[0xFF0F] = function (parentObj, address, data) {
+ parentObj.interruptsRequested = data;
+ parentObj.checkIRQMatching();
+ }
+ this.memoryHighWriter[0x10] = this.memoryWriter[0xFF10] = function (parentObj, address, data) {
+ if (parentObj.soundMasterEnabled) {
+ parentObj.audioJIT();
+ if (parentObj.channel1decreaseSweep && (data & 0x08) == 0) {
+ if (parentObj.channel1numSweep != parentObj.channel1frequencySweepDivider) {
+ parentObj.channel1SweepFault = true;
+ }
+ }
+ parentObj.channel1lastTimeSweep = (data & 0x70) >> 4;
+ parentObj.channel1frequencySweepDivider = data & 0x07;
+ parentObj.channel1decreaseSweep = ((data & 0x08) == 0x08);
+ parentObj.memory[0xFF10] = data;
+ parentObj.channel1EnableCheck();
+ }
+ }
+ this.memoryHighWriter[0x11] = this.memoryWriter[0xFF11] = function (parentObj, address, data) {
+ if (parentObj.soundMasterEnabled || !parentObj.cGBC) {
+ if (parentObj.soundMasterEnabled) {
+ parentObj.audioJIT();
+ }
+ else {
+ data &= 0x3F;
+ }
+ parentObj.channel1CachedDuty = parentObj.dutyLookup[data >> 6];
+ parentObj.channel1totalLength = 0x40 - (data & 0x3F);
+ parentObj.memory[0xFF11] = data & 0xC0;
+ parentObj.channel1EnableCheck();
+ }
+ }
+ this.memoryHighWriter[0x12] = this.memoryWriter[0xFF12] = function (parentObj, address, data) {
+ if (parentObj.soundMasterEnabled) {
+ parentObj.audioJIT();
+ if (parentObj.channel1Enabled && parentObj.channel1envelopeSweeps == 0) {
+ //Zombie Volume PAPU Bug:
+ if (((parentObj.memory[0xFF12] ^ data) & 0x8) == 0x8) {
+ if ((parentObj.memory[0xFF12] & 0x8) == 0) {
+ if ((parentObj.memory[0xFF12] & 0x7) == 0x7) {
+ parentObj.channel1envelopeVolume += 2;
+ }
+ else {
+ ++parentObj.channel1envelopeVolume;
+ }
+ }
+ parentObj.channel1envelopeVolume = (16 - parentObj.channel1envelopeVolume) & 0xF;
+ }
+ else if ((parentObj.memory[0xFF12] & 0xF) == 0x8) {
+ parentObj.channel1envelopeVolume = (1 + parentObj.channel1envelopeVolume) & 0xF;
+ }
+ parentObj.channel1OutputLevelCache();
+ }
+ parentObj.channel1envelopeType = ((data & 0x08) == 0x08);
+ parentObj.memory[0xFF12] = data;
+ parentObj.channel1VolumeEnableCheck();
+ }
+ }
+ this.memoryHighWriter[0x13] = this.memoryWriter[0xFF13] = function (parentObj, address, data) {
+ if (parentObj.soundMasterEnabled) {
+ parentObj.audioJIT();
+ parentObj.channel1frequency = (parentObj.channel1frequency & 0x700) | data;
+ parentObj.channel1FrequencyTracker = (0x800 - parentObj.channel1frequency) << 2;
+ parentObj.memory[0xFF13] = data;
+ }
+ }
+ this.memoryHighWriter[0x14] = this.memoryWriter[0xFF14] = function (parentObj, address, data) {
+ if (parentObj.soundMasterEnabled) {
+ parentObj.audioJIT();
+ parentObj.channel1consecutive = ((data & 0x40) == 0x0);
+ parentObj.channel1frequency = ((data & 0x7) << 8) | (parentObj.channel1frequency & 0xFF);
+ parentObj.channel1FrequencyTracker = (0x800 - parentObj.channel1frequency) << 2;
+ if (data > 0x7F) {
+ //Reload 0xFF10:
+ parentObj.channel1timeSweep = parentObj.channel1lastTimeSweep;
+ parentObj.channel1numSweep = parentObj.channel1frequencySweepDivider;
+ //Reload 0xFF12:
+ var nr12 = parentObj.memory[0xFF12];
+ parentObj.channel1envelopeVolume = nr12 >> 4;
+ parentObj.channel1OutputLevelCache();
+ parentObj.channel1envelopeSweepsLast = (nr12 & 0x7) - 1;
+ if (parentObj.channel1totalLength == 0) {
+ parentObj.channel1totalLength = 0x40;
+ }
+ if (parentObj.channel1lastTimeSweep > 0 || parentObj.channel1frequencySweepDivider > 0) {
+ parentObj.memory[0xFF26] |= 0x1;
+ }
+ else {
+ parentObj.memory[0xFF26] &= 0xFE;
+ }
+ if ((data & 0x40) == 0x40) {
+ parentObj.memory[0xFF26] |= 0x1;
+ }
+ parentObj.channel1ShadowFrequency = parentObj.channel1frequency;
+ //Reset frequency overflow check + frequency sweep type check:
+ parentObj.channel1SweepFault = false;
+ //Supposed to run immediately:
+ parentObj.runAudioSweep();
+ }
+ parentObj.channel1EnableCheck();
+ parentObj.memory[0xFF14] = data & 0x40;
+ }
+ }
+ this.memoryHighWriter[0x16] = this.memoryWriter[0xFF16] = function (parentObj, address, data) {
+ if (parentObj.soundMasterEnabled || !parentObj.cGBC) {
+ if (parentObj.soundMasterEnabled) {
+ parentObj.audioJIT();
+ }
+ else {
+ data &= 0x3F;
+ }
+ parentObj.channel2CachedDuty = parentObj.dutyLookup[data >> 6];
+ parentObj.channel2totalLength = 0x40 - (data & 0x3F);
+ parentObj.memory[0xFF16] = data & 0xC0;
+ parentObj.channel2EnableCheck();
+ }
+ }
+ this.memoryHighWriter[0x17] = this.memoryWriter[0xFF17] = function (parentObj, address, data) {
+ if (parentObj.soundMasterEnabled) {
+ parentObj.audioJIT();
+ if (parentObj.channel2Enabled && parentObj.channel2envelopeSweeps == 0) {
+ //Zombie Volume PAPU Bug:
+ if (((parentObj.memory[0xFF17] ^ data) & 0x8) == 0x8) {
+ if ((parentObj.memory[0xFF17] & 0x8) == 0) {
+ if ((parentObj.memory[0xFF17] & 0x7) == 0x7) {
+ parentObj.channel2envelopeVolume += 2;
+ }
+ else {
+ ++parentObj.channel2envelopeVolume;
+ }
+ }
+ parentObj.channel2envelopeVolume = (16 - parentObj.channel2envelopeVolume) & 0xF;
+ }
+ else if ((parentObj.memory[0xFF17] & 0xF) == 0x8) {
+ parentObj.channel2envelopeVolume = (1 + parentObj.channel2envelopeVolume) & 0xF;
+ }
+ parentObj.channel2OutputLevelCache();
+ }
+ parentObj.channel2envelopeType = ((data & 0x08) == 0x08);
+ parentObj.memory[0xFF17] = data;
+ parentObj.channel2VolumeEnableCheck();
+ }
+ }
+ this.memoryHighWriter[0x18] = this.memoryWriter[0xFF18] = function (parentObj, address, data) {
+ if (parentObj.soundMasterEnabled) {
+ parentObj.audioJIT();
+ parentObj.channel2frequency = (parentObj.channel2frequency & 0x700) | data;
+ parentObj.channel2FrequencyTracker = (0x800 - parentObj.channel2frequency) << 2;
+ parentObj.memory[0xFF18] = data;
+ }
+ }
+ this.memoryHighWriter[0x19] = this.memoryWriter[0xFF19] = function (parentObj, address, data) {
+ if (parentObj.soundMasterEnabled) {
+ parentObj.audioJIT();
+ if (data > 0x7F) {
+ //Reload 0xFF17:
+ var nr22 = parentObj.memory[0xFF17];
+ parentObj.channel2envelopeVolume = nr22 >> 4;
+ parentObj.channel2OutputLevelCache();
+ parentObj.channel2envelopeSweepsLast = (nr22 & 0x7) - 1;
+ if (parentObj.channel2totalLength == 0) {
+ parentObj.channel2totalLength = 0x40;
+ }
+ if ((data & 0x40) == 0x40) {
+ parentObj.memory[0xFF26] |= 0x2;
+ }
+ }
+ parentObj.channel2consecutive = ((data & 0x40) == 0x0);
+ parentObj.channel2frequency = ((data & 0x7) << 8) | (parentObj.channel2frequency & 0xFF);
+ parentObj.channel2FrequencyTracker = (0x800 - parentObj.channel2frequency) << 2;
+ parentObj.memory[0xFF19] = data & 0x40;
+ parentObj.channel2EnableCheck();
+ }
+ }
+ this.memoryHighWriter[0x1A] = this.memoryWriter[0xFF1A] = function (parentObj, address, data) {
+ if (parentObj.soundMasterEnabled) {
+ parentObj.audioJIT();
+ if (!parentObj.channel3canPlay && data >= 0x80) {
+ parentObj.channel3lastSampleLookup = 0;
+ parentObj.channel3UpdateCache();
+ }
+ parentObj.channel3canPlay = (data > 0x7F);
+ if (parentObj.channel3canPlay && parentObj.memory[0xFF1A] > 0x7F && !parentObj.channel3consecutive) {
+ parentObj.memory[0xFF26] |= 0x4;
+ }
+ parentObj.memory[0xFF1A] = data & 0x80;
+ //parentObj.channel3EnableCheck();
+ }
+ }
+ this.memoryHighWriter[0x1B] = this.memoryWriter[0xFF1B] = function (parentObj, address, data) {
+ if (parentObj.soundMasterEnabled || !parentObj.cGBC) {
+ if (parentObj.soundMasterEnabled) {
+ parentObj.audioJIT();
+ }
+ parentObj.channel3totalLength = 0x100 - data;
+ parentObj.memory[0xFF1B] = data;
+ parentObj.channel3EnableCheck();
+ }
+ }
+ this.memoryHighWriter[0x1C] = this.memoryWriter[0xFF1C] = function (parentObj, address, data) {
+ if (parentObj.soundMasterEnabled) {
+ parentObj.audioJIT();
+ data &= 0x60;
+ parentObj.memory[0xFF1C] = data;
+ parentObj.channel3patternType = (data == 0) ? 4 : ((data >> 5) - 1);
+ }
+ }
+ this.memoryHighWriter[0x1D] = this.memoryWriter[0xFF1D] = function (parentObj, address, data) {
+ if (parentObj.soundMasterEnabled) {
+ parentObj.audioJIT();
+ parentObj.channel3frequency = (parentObj.channel3frequency & 0x700) | data;
+ parentObj.channel3FrequencyPeriod = (0x800 - parentObj.channel3frequency) << 1;
+ parentObj.memory[0xFF1D] = data;
+ }
+ }
+ this.memoryHighWriter[0x1E] = this.memoryWriter[0xFF1E] = function (parentObj, address, data) {
+ if (parentObj.soundMasterEnabled) {
+ parentObj.audioJIT();
+ if (data > 0x7F) {
+ if (parentObj.channel3totalLength == 0) {
+ parentObj.channel3totalLength = 0x100;
+ }
+ parentObj.channel3lastSampleLookup = 0;
+ if ((data & 0x40) == 0x40) {
+ parentObj.memory[0xFF26] |= 0x4;
+ }
+ }
+ parentObj.channel3consecutive = ((data & 0x40) == 0x0);
+ parentObj.channel3frequency = ((data & 0x7) << 8) | (parentObj.channel3frequency & 0xFF);
+ parentObj.channel3FrequencyPeriod = (0x800 - parentObj.channel3frequency) << 1;
+ parentObj.memory[0xFF1E] = data & 0x40;
+ parentObj.channel3EnableCheck();
+ }
+ }
+ this.memoryHighWriter[0x20] = this.memoryWriter[0xFF20] = function (parentObj, address, data) {
+ if (parentObj.soundMasterEnabled || !parentObj.cGBC) {
+ if (parentObj.soundMasterEnabled) {
+ parentObj.audioJIT();
+ }
+ parentObj.channel4totalLength = 0x40 - (data & 0x3F);
+ parentObj.memory[0xFF20] = data | 0xC0;
+ parentObj.channel4EnableCheck();
+ }
+ }
+ this.memoryHighWriter[0x21] = this.memoryWriter[0xFF21] = function (parentObj, address, data) {
+ if (parentObj.soundMasterEnabled) {
+ parentObj.audioJIT();
+ if (parentObj.channel4Enabled && parentObj.channel4envelopeSweeps == 0) {
+ //Zombie Volume PAPU Bug:
+ if (((parentObj.memory[0xFF21] ^ data) & 0x8) == 0x8) {
+ if ((parentObj.memory[0xFF21] & 0x8) == 0) {
+ if ((parentObj.memory[0xFF21] & 0x7) == 0x7) {
+ parentObj.channel4envelopeVolume += 2;
+ }
+ else {
+ ++parentObj.channel4envelopeVolume;
+ }
+ }
+ parentObj.channel4envelopeVolume = (16 - parentObj.channel4envelopeVolume) & 0xF;
+ }
+ else if ((parentObj.memory[0xFF21] & 0xF) == 0x8) {
+ parentObj.channel4envelopeVolume = (1 + parentObj.channel4envelopeVolume) & 0xF;
+ }
+ parentObj.channel4currentVolume = parentObj.channel4envelopeVolume << parentObj.channel4VolumeShifter;
+ }
+ parentObj.channel4envelopeType = ((data & 0x08) == 0x08);
+ parentObj.memory[0xFF21] = data;
+ parentObj.channel4UpdateCache();
+ parentObj.channel4VolumeEnableCheck();
+ }
+ }
+ this.memoryHighWriter[0x22] = this.memoryWriter[0xFF22] = function (parentObj, address, data) {
+ if (parentObj.soundMasterEnabled) {
+ parentObj.audioJIT();
+ parentObj.channel4FrequencyPeriod = Math.max((data & 0x7) << 4, 8) << (data >> 4);
+ var bitWidth = (data & 0x8);
+ if ((bitWidth == 0x8 && parentObj.channel4BitRange == 0x7FFF) || (bitWidth == 0 && parentObj.channel4BitRange == 0x7F)) {
+ parentObj.channel4lastSampleLookup = 0;
+ parentObj.channel4BitRange = (bitWidth == 0x8) ? 0x7F : 0x7FFF;
+ parentObj.channel4VolumeShifter = (bitWidth == 0x8) ? 7 : 15;
+ parentObj.channel4currentVolume = parentObj.channel4envelopeVolume << parentObj.channel4VolumeShifter;
+ parentObj.noiseSampleTable = (bitWidth == 0x8) ? parentObj.LSFR7Table : parentObj.LSFR15Table;
+ }
+ parentObj.memory[0xFF22] = data;
+ parentObj.channel4UpdateCache();
+ }
+ }
+ this.memoryHighWriter[0x23] = this.memoryWriter[0xFF23] = function (parentObj, address, data) {
+ if (parentObj.soundMasterEnabled) {
+ parentObj.audioJIT();
+ parentObj.memory[0xFF23] = data;
+ parentObj.channel4consecutive = ((data & 0x40) == 0x0);
+ if (data > 0x7F) {
+ var nr42 = parentObj.memory[0xFF21];
+ parentObj.channel4envelopeVolume = nr42 >> 4;
+ parentObj.channel4currentVolume = parentObj.channel4envelopeVolume << parentObj.channel4VolumeShifter;
+ parentObj.channel4envelopeSweepsLast = (nr42 & 0x7) - 1;
+ if (parentObj.channel4totalLength == 0) {
+ parentObj.channel4totalLength = 0x40;
+ }
+ if ((data & 0x40) == 0x40) {
+ parentObj.memory[0xFF26] |= 0x8;
+ }
+ }
+ parentObj.channel4EnableCheck();
+ }
+ }
+ this.memoryHighWriter[0x24] = this.memoryWriter[0xFF24] = function (parentObj, address, data) {
+ if (parentObj.soundMasterEnabled && parentObj.memory[0xFF24] != data) {
+ parentObj.audioJIT();
+ parentObj.memory[0xFF24] = data;
+ parentObj.VinLeftChannelMasterVolume = ((data >> 4) & 0x07) + 1;
+ parentObj.VinRightChannelMasterVolume = (data & 0x07) + 1;
+ parentObj.mixerOutputLevelCache();
+ }
+ }
+ this.memoryHighWriter[0x25] = this.memoryWriter[0xFF25] = function (parentObj, address, data) {
+ if (parentObj.soundMasterEnabled && parentObj.memory[0xFF25] != data) {
+ parentObj.audioJIT();
+ parentObj.memory[0xFF25] = data;
+ parentObj.rightChannel1 = ((data & 0x01) == 0x01);
+ parentObj.rightChannel2 = ((data & 0x02) == 0x02);
+ parentObj.rightChannel3 = ((data & 0x04) == 0x04);
+ parentObj.rightChannel4 = ((data & 0x08) == 0x08);
+ parentObj.leftChannel1 = ((data & 0x10) == 0x10);
+ parentObj.leftChannel2 = ((data & 0x20) == 0x20);
+ parentObj.leftChannel3 = ((data & 0x40) == 0x40);
+ parentObj.leftChannel4 = (data > 0x7F);
+ parentObj.channel1OutputLevelCache();
+ parentObj.channel2OutputLevelCache();
+ parentObj.channel3OutputLevelCache();
+ parentObj.channel4OutputLevelCache();
+ }
+ }
+ this.memoryHighWriter[0x26] = this.memoryWriter[0xFF26] = function (parentObj, address, data) {
+ parentObj.audioJIT();
+ if (!parentObj.soundMasterEnabled && data > 0x7F) {
+ parentObj.memory[0xFF26] = 0x80;
+ parentObj.soundMasterEnabled = true;
+ parentObj.initializeAudioStartState();
+ }
+ else if (parentObj.soundMasterEnabled && data < 0x80) {
+ parentObj.memory[0xFF26] = 0;
+ parentObj.soundMasterEnabled = false;
+ //GBDev wiki says the registers are written with zeros on power off:
+ for (var index = 0xFF10; index < 0xFF26; index++) {
+ parentObj.memoryWriter[index](parentObj, index, 0);
+ }
+ }
+ }
+ //0xFF27 to 0xFF2F don't do anything...
+ this.memoryHighWriter[0x27] = this.memoryWriter[0xFF27] = this.cartIgnoreWrite;
+ this.memoryHighWriter[0x28] = this.memoryWriter[0xFF28] = this.cartIgnoreWrite;
+ this.memoryHighWriter[0x29] = this.memoryWriter[0xFF29] = this.cartIgnoreWrite;
+ this.memoryHighWriter[0x2A] = this.memoryWriter[0xFF2A] = this.cartIgnoreWrite;
+ this.memoryHighWriter[0x2B] = this.memoryWriter[0xFF2B] = this.cartIgnoreWrite;
+ this.memoryHighWriter[0x2C] = this.memoryWriter[0xFF2C] = this.cartIgnoreWrite;
+ this.memoryHighWriter[0x2D] = this.memoryWriter[0xFF2D] = this.cartIgnoreWrite;
+ this.memoryHighWriter[0x2E] = this.memoryWriter[0xFF2E] = this.cartIgnoreWrite;
+ this.memoryHighWriter[0x2F] = this.memoryWriter[0xFF2F] = this.cartIgnoreWrite;
+ //WAVE PCM RAM:
+ this.memoryHighWriter[0x30] = this.memoryWriter[0xFF30] = function (parentObj, address, data) {
+ parentObj.channel3WriteRAM(0, data);
+ }
+ this.memoryHighWriter[0x31] = this.memoryWriter[0xFF31] = function (parentObj, address, data) {
+ parentObj.channel3WriteRAM(0x1, data);
+ }
+ this.memoryHighWriter[0x32] = this.memoryWriter[0xFF32] = function (parentObj, address, data) {
+ parentObj.channel3WriteRAM(0x2, data);
+ }
+ this.memoryHighWriter[0x33] = this.memoryWriter[0xFF33] = function (parentObj, address, data) {
+ parentObj.channel3WriteRAM(0x3, data);
+ }
+ this.memoryHighWriter[0x34] = this.memoryWriter[0xFF34] = function (parentObj, address, data) {
+ parentObj.channel3WriteRAM(0x4, data);
+ }
+ this.memoryHighWriter[0x35] = this.memoryWriter[0xFF35] = function (parentObj, address, data) {
+ parentObj.channel3WriteRAM(0x5, data);
+ }
+ this.memoryHighWriter[0x36] = this.memoryWriter[0xFF36] = function (parentObj, address, data) {
+ parentObj.channel3WriteRAM(0x6, data);
+ }
+ this.memoryHighWriter[0x37] = this.memoryWriter[0xFF37] = function (parentObj, address, data) {
+ parentObj.channel3WriteRAM(0x7, data);
+ }
+ this.memoryHighWriter[0x38] = this.memoryWriter[0xFF38] = function (parentObj, address, data) {
+ parentObj.channel3WriteRAM(0x8, data);
+ }
+ this.memoryHighWriter[0x39] = this.memoryWriter[0xFF39] = function (parentObj, address, data) {
+ parentObj.channel3WriteRAM(0x9, data);
+ }
+ this.memoryHighWriter[0x3A] = this.memoryWriter[0xFF3A] = function (parentObj, address, data) {
+ parentObj.channel3WriteRAM(0xA, data);
+ }
+ this.memoryHighWriter[0x3B] = this.memoryWriter[0xFF3B] = function (parentObj, address, data) {
+ parentObj.channel3WriteRAM(0xB, data);
+ }
+ this.memoryHighWriter[0x3C] = this.memoryWriter[0xFF3C] = function (parentObj, address, data) {
+ parentObj.channel3WriteRAM(0xC, data);
+ }
+ this.memoryHighWriter[0x3D] = this.memoryWriter[0xFF3D] = function (parentObj, address, data) {
+ parentObj.channel3WriteRAM(0xD, data);
+ }
+ this.memoryHighWriter[0x3E] = this.memoryWriter[0xFF3E] = function (parentObj, address, data) {
+ parentObj.channel3WriteRAM(0xE, data);
+ }
+ this.memoryHighWriter[0x3F] = this.memoryWriter[0xFF3F] = function (parentObj, address, data) {
+ parentObj.channel3WriteRAM(0xF, data);
+ }
+ //SCY
+ this.memoryHighWriter[0x42] = this.memoryWriter[0xFF42] = function (parentObj, address, data) {
+ if (parentObj.backgroundY != data) {
+ parentObj.midScanLineJIT();
+ parentObj.backgroundY = data;
+ }
+ }
+ //SCX
+ this.memoryHighWriter[0x43] = this.memoryWriter[0xFF43] = function (parentObj, address, data) {
+ if (parentObj.backgroundX != data) {
+ parentObj.midScanLineJIT();
+ parentObj.backgroundX = data;
+ }
+ }
+ //LY
+ this.memoryHighWriter[0x44] = this.memoryWriter[0xFF44] = function (parentObj, address, data) {
+ //Read Only:
+ if (parentObj.LCDisOn) {
+ //Gambatte says to do this:
+ parentObj.modeSTAT = 2;
+ parentObj.midScanlineOffset = -1;
+ parentObj.totalLinesPassed = parentObj.currentX = parentObj.queuedScanLines = parentObj.lastUnrenderedLine = parentObj.LCDTicks = parentObj.STATTracker = parentObj.actualScanLine = parentObj.memory[0xFF44] = 0;
+ }
+ }
+ //LYC
+ this.memoryHighWriter[0x45] = this.memoryWriter[0xFF45] = function (parentObj, address, data) {
+ if (parentObj.memory[0xFF45] != data) {
+ parentObj.memory[0xFF45] = data;
+ if (parentObj.LCDisOn) {
+ parentObj.matchLYC(); //Get the compare of the first scan line.
+ }
+ }
+ }
+ //WY
+ this.memoryHighWriter[0x4A] = this.memoryWriter[0xFF4A] = function (parentObj, address, data) {
+ if (parentObj.windowY != data) {
+ parentObj.midScanLineJIT();
+ parentObj.windowY = data;
+ }
+ }
+ //WX
+ this.memoryHighWriter[0x4B] = this.memoryWriter[0xFF4B] = function (parentObj, address, data) {
+ if (parentObj.memory[0xFF4B] != data) {
+ parentObj.midScanLineJIT();
+ parentObj.memory[0xFF4B] = data;
+ parentObj.windowX = data - 7;
+ }
+ }
+ this.memoryHighWriter[0x72] = this.memoryWriter[0xFF72] = function (parentObj, address, data) {
+ parentObj.memory[0xFF72] = data;
+ }
+ this.memoryHighWriter[0x73] = this.memoryWriter[0xFF73] = function (parentObj, address, data) {
+ parentObj.memory[0xFF73] = data;
+ }
+ this.memoryHighWriter[0x75] = this.memoryWriter[0xFF75] = function (parentObj, address, data) {
+ parentObj.memory[0xFF75] = data;
+ }
+ this.memoryHighWriter[0x76] = this.memoryWriter[0xFF76] = this.cartIgnoreWrite;
+ this.memoryHighWriter[0x77] = this.memoryWriter[0xFF77] = this.cartIgnoreWrite;
+ //IE (Interrupt Enable)
+ this.memoryHighWriter[0xFF] = this.memoryWriter[0xFFFF] = function (parentObj, address, data) {
+ parentObj.interruptsEnabled = data;
+ parentObj.checkIRQMatching();
+ }
+ this.recompileModelSpecificIOWriteHandling();
+ this.recompileBootIOWriteHandling();
+}
+GameBoyCore.prototype.recompileModelSpecificIOWriteHandling = function () {
+ if (this.cGBC) {
+ //GameBoy Color Specific I/O:
+ //SC (Serial Transfer Control Register)
+ this.memoryHighWriter[0x2] = this.memoryWriter[0xFF02] = function (parentObj, address, data) {
+ if (((data & 0x1) == 0x1)) {
+ //Internal clock:
+ parentObj.memory[0xFF02] = (data & 0x7F);
+ parentObj.serialTimer = ((data & 0x2) == 0) ? 4096 : 128; //Set the Serial IRQ counter.
+ parentObj.serialShiftTimer = parentObj.serialShiftTimerAllocated = ((data & 0x2) == 0) ? 512 : 16; //Set the transfer data shift counter.
+ }
+ else {
+ //External clock:
+ parentObj.memory[0xFF02] = data;
+ parentObj.serialShiftTimer = parentObj.serialShiftTimerAllocated = parentObj.serialTimer = 0; //Zero the timers, since we're emulating as if nothing is connected.
+ }
+ }
+ this.memoryHighWriter[0x40] = this.memoryWriter[0xFF40] = function (parentObj, address, data) {
+ if (parentObj.memory[0xFF40] != data) {
+ parentObj.midScanLineJIT();
+ var temp_var = (data > 0x7F);
+ if (temp_var != parentObj.LCDisOn) {
+ //When the display mode changes...
+ parentObj.LCDisOn = temp_var;
+ parentObj.memory[0xFF41] &= 0x78;
+ parentObj.midScanlineOffset = -1;
+ parentObj.totalLinesPassed = parentObj.currentX = parentObj.queuedScanLines = parentObj.lastUnrenderedLine = parentObj.STATTracker = parentObj.LCDTicks = parentObj.actualScanLine = parentObj.memory[0xFF44] = 0;
+ if (parentObj.LCDisOn) {
+ parentObj.modeSTAT = 2;
+ parentObj.matchLYC(); //Get the compare of the first scan line.
+ parentObj.LCDCONTROL = parentObj.LINECONTROL;
+ }
+ else {
+ parentObj.modeSTAT = 0;
+ parentObj.LCDCONTROL = parentObj.DISPLAYOFFCONTROL;
+ parentObj.DisplayShowOff();
+ }
+ parentObj.interruptsRequested &= 0xFD;
+ }
+ parentObj.gfxWindowCHRBankPosition = ((data & 0x40) == 0x40) ? 0x400 : 0;
+ parentObj.gfxWindowDisplay = ((data & 0x20) == 0x20);
+ parentObj.gfxBackgroundBankOffset = ((data & 0x10) == 0x10) ? 0 : 0x80;
+ parentObj.gfxBackgroundCHRBankPosition = ((data & 0x08) == 0x08) ? 0x400 : 0;
+ parentObj.gfxSpriteNormalHeight = ((data & 0x04) == 0);
+ parentObj.gfxSpriteShow = ((data & 0x02) == 0x02);
+ parentObj.BGPriorityEnabled = ((data & 0x01) == 0x01);
+ parentObj.priorityFlaggingPathRebuild(); //Special case the priority flagging as an optimization.
+ parentObj.memory[0xFF40] = data;
+ }
+ }
+ this.memoryHighWriter[0x41] = this.memoryWriter[0xFF41] = function (parentObj, address, data) {
+ parentObj.LYCMatchTriggerSTAT = ((data & 0x40) == 0x40);
+ parentObj.mode2TriggerSTAT = ((data & 0x20) == 0x20);
+ parentObj.mode1TriggerSTAT = ((data & 0x10) == 0x10);
+ parentObj.mode0TriggerSTAT = ((data & 0x08) == 0x08);
+ parentObj.memory[0xFF41] = data & 0x78;
+ }
+ this.memoryHighWriter[0x46] = this.memoryWriter[0xFF46] = function (parentObj, address, data) {
+ parentObj.memory[0xFF46] = data;
+ if (data < 0xE0) {
+ data <<= 8;
+ address = 0xFE00;
+ var stat = parentObj.modeSTAT;
+ parentObj.modeSTAT = 0;
+ var newData = 0;
+ do {
+ newData = parentObj.memoryReader[data](parentObj, data++);
+ if (newData != parentObj.memory[address]) {
+ //JIT the graphics render queue:
+ parentObj.modeSTAT = stat;
+ parentObj.graphicsJIT();
+ parentObj.modeSTAT = 0;
+ parentObj.memory[address++] = newData;
+ break;
+ }
+ } while (++address < 0xFEA0);
+ if (address < 0xFEA0) {
+ do {
+ parentObj.memory[address++] = parentObj.memoryReader[data](parentObj, data++);
+ parentObj.memory[address++] = parentObj.memoryReader[data](parentObj, data++);
+ parentObj.memory[address++] = parentObj.memoryReader[data](parentObj, data++);
+ parentObj.memory[address++] = parentObj.memoryReader[data](parentObj, data++);
+ } while (address < 0xFEA0);
+ }
+ parentObj.modeSTAT = stat;
+ }
+ }
+ //KEY1
+ this.memoryHighWriter[0x4D] = this.memoryWriter[0xFF4D] = function (parentObj, address, data) {
+ parentObj.memory[0xFF4D] = (data & 0x7F) | (parentObj.memory[0xFF4D] & 0x80);
+ }
+ this.memoryHighWriter[0x4F] = this.memoryWriter[0xFF4F] = function (parentObj, address, data) {
+ parentObj.currVRAMBank = data & 0x01;
+ if (parentObj.currVRAMBank > 0) {
+ parentObj.BGCHRCurrentBank = parentObj.BGCHRBank2;
+ }
+ else {
+ parentObj.BGCHRCurrentBank = parentObj.BGCHRBank1;
+ }
+ //Only writable by GBC.
+ }
+ this.memoryHighWriter[0x51] = this.memoryWriter[0xFF51] = function (parentObj, address, data) {
+ if (!parentObj.hdmaRunning) {
+ parentObj.memory[0xFF51] = data;
+ }
+ }
+ this.memoryHighWriter[0x52] = this.memoryWriter[0xFF52] = function (parentObj, address, data) {
+ if (!parentObj.hdmaRunning) {
+ parentObj.memory[0xFF52] = data & 0xF0;
+ }
+ }
+ this.memoryHighWriter[0x53] = this.memoryWriter[0xFF53] = function (parentObj, address, data) {
+ if (!parentObj.hdmaRunning) {
+ parentObj.memory[0xFF53] = data & 0x1F;
+ }
+ }
+ this.memoryHighWriter[0x54] = this.memoryWriter[0xFF54] = function (parentObj, address, data) {
+ if (!parentObj.hdmaRunning) {
+ parentObj.memory[0xFF54] = data & 0xF0;
+ }
+ }
+ this.memoryHighWriter[0x55] = this.memoryWriter[0xFF55] = function (parentObj, address, data) {
+ if (!parentObj.hdmaRunning) {
+ if ((data & 0x80) == 0) {
+ //DMA
+ parentObj.DMAWrite((data & 0x7F) + 1);
+ parentObj.memory[0xFF55] = 0xFF; //Transfer completed.
+ }
+ else {
+ //H-Blank DMA
+ parentObj.hdmaRunning = true;
+ parentObj.memory[0xFF55] = data & 0x7F;
+ }
+ }
+ else if ((data & 0x80) == 0) {
+ //Stop H-Blank DMA
+ parentObj.hdmaRunning = false;
+ parentObj.memory[0xFF55] |= 0x80;
+ }
+ else {
+ parentObj.memory[0xFF55] = data & 0x7F;
+ }
+ }
+ this.memoryHighWriter[0x68] = this.memoryWriter[0xFF68] = function (parentObj, address, data) {
+ parentObj.memory[0xFF69] = parentObj.gbcBGRawPalette[data & 0x3F];
+ parentObj.memory[0xFF68] = data;
+ }
+ this.memoryHighWriter[0x69] = this.memoryWriter[0xFF69] = function (parentObj, address, data) {
+ parentObj.updateGBCBGPalette(parentObj.memory[0xFF68] & 0x3F, data);
+ if (parentObj.memory[0xFF68] > 0x7F) { // high bit = autoincrement
+ var next = ((parentObj.memory[0xFF68] + 1) & 0x3F);
+ parentObj.memory[0xFF68] = (next | 0x80);
+ parentObj.memory[0xFF69] = parentObj.gbcBGRawPalette[next];
+ }
+ else {
+ parentObj.memory[0xFF69] = data;
+ }
+ }
+ this.memoryHighWriter[0x6A] = this.memoryWriter[0xFF6A] = function (parentObj, address, data) {
+ parentObj.memory[0xFF6B] = parentObj.gbcOBJRawPalette[data & 0x3F];
+ parentObj.memory[0xFF6A] = data;
+ }
+ this.memoryHighWriter[0x6B] = this.memoryWriter[0xFF6B] = function (parentObj, address, data) {
+ parentObj.updateGBCOBJPalette(parentObj.memory[0xFF6A] & 0x3F, data);
+ if (parentObj.memory[0xFF6A] > 0x7F) { // high bit = autoincrement
+ var next = ((parentObj.memory[0xFF6A] + 1) & 0x3F);
+ parentObj.memory[0xFF6A] = (next | 0x80);
+ parentObj.memory[0xFF6B] = parentObj.gbcOBJRawPalette[next];
+ }
+ else {
+ parentObj.memory[0xFF6B] = data;
+ }
+ }
+ //SVBK
+ this.memoryHighWriter[0x70] = this.memoryWriter[0xFF70] = function (parentObj, address, data) {
+ var addressCheck = (parentObj.memory[0xFF51] << 8) | parentObj.memory[0xFF52]; //Cannot change the RAM bank while WRAM is the source of a running HDMA.
+ if (!parentObj.hdmaRunning || addressCheck < 0xD000 || addressCheck >= 0xE000) {
+ parentObj.gbcRamBank = Math.max(data & 0x07, 1); //Bank range is from 1-7
+ parentObj.gbcRamBankPosition = ((parentObj.gbcRamBank - 1) << 12) - 0xD000;
+ parentObj.gbcRamBankPositionECHO = parentObj.gbcRamBankPosition - 0x2000;
+ }
+ parentObj.memory[0xFF70] = data; //Bit 6 cannot be written to.
+ }
+ this.memoryHighWriter[0x74] = this.memoryWriter[0xFF74] = function (parentObj, address, data) {
+ parentObj.memory[0xFF74] = data;
+ }
+ }
+ else {
+ //Fill in the GameBoy Color I/O registers as normal RAM for GameBoy compatibility:
+ //SC (Serial Transfer Control Register)
+ this.memoryHighWriter[0x2] = this.memoryWriter[0xFF02] = function (parentObj, address, data) {
+ if (((data & 0x1) == 0x1)) {
+ //Internal clock:
+ parentObj.memory[0xFF02] = (data & 0x7F);
+ parentObj.serialTimer = 4096; //Set the Serial IRQ counter.
+ parentObj.serialShiftTimer = parentObj.serialShiftTimerAllocated = 512; //Set the transfer data shift counter.
+ }
+ else {
+ //External clock:
+ parentObj.memory[0xFF02] = data;
+ parentObj.serialShiftTimer = parentObj.serialShiftTimerAllocated = parentObj.serialTimer = 0; //Zero the timers, since we're emulating as if nothing is connected.
+ }
+ }
+ this.memoryHighWriter[0x40] = this.memoryWriter[0xFF40] = function (parentObj, address, data) {
+ if (parentObj.memory[0xFF40] != data) {
+ parentObj.midScanLineJIT();
+ var temp_var = (data > 0x7F);
+ if (temp_var != parentObj.LCDisOn) {
+ //When the display mode changes...
+ parentObj.LCDisOn = temp_var;
+ parentObj.memory[0xFF41] &= 0x78;
+ parentObj.midScanlineOffset = -1;
+ parentObj.totalLinesPassed = parentObj.currentX = parentObj.queuedScanLines = parentObj.lastUnrenderedLine = parentObj.STATTracker = parentObj.LCDTicks = parentObj.actualScanLine = parentObj.memory[0xFF44] = 0;
+ if (parentObj.LCDisOn) {
+ parentObj.modeSTAT = 2;
+ parentObj.matchLYC(); //Get the compare of the first scan line.
+ parentObj.LCDCONTROL = parentObj.LINECONTROL;
+ }
+ else {
+ parentObj.modeSTAT = 0;
+ parentObj.LCDCONTROL = parentObj.DISPLAYOFFCONTROL;
+ parentObj.DisplayShowOff();
+ }
+ parentObj.interruptsRequested &= 0xFD;
+ }
+ parentObj.gfxWindowCHRBankPosition = ((data & 0x40) == 0x40) ? 0x400 : 0;
+ parentObj.gfxWindowDisplay = (data & 0x20) == 0x20;
+ parentObj.gfxBackgroundBankOffset = ((data & 0x10) == 0x10) ? 0 : 0x80;
+ parentObj.gfxBackgroundCHRBankPosition = ((data & 0x08) == 0x08) ? 0x400 : 0;
+ parentObj.gfxSpriteNormalHeight = ((data & 0x04) == 0);
+ parentObj.gfxSpriteShow = (data & 0x02) == 0x02;
+ parentObj.bgEnabled = ((data & 0x01) == 0x01);
+ parentObj.memory[0xFF40] = data;
+ }
+ }
+ this.memoryHighWriter[0x41] = this.memoryWriter[0xFF41] = function (parentObj, address, data) {
+ parentObj.LYCMatchTriggerSTAT = ((data & 0x40) == 0x40);
+ parentObj.mode2TriggerSTAT = ((data & 0x20) == 0x20);
+ parentObj.mode1TriggerSTAT = ((data & 0x10) == 0x10);
+ parentObj.mode0TriggerSTAT = ((data & 0x08) == 0x08);
+ parentObj.memory[0xFF41] = data & 0x78;
+ if ((!parentObj.usedBootROM || !parentObj.usedGBCBootROM) && parentObj.LCDisOn && parentObj.modeSTAT < 2) {
+ parentObj.interruptsRequested |= 0x2;
+ parentObj.checkIRQMatching();
+ }
+ }
+ this.memoryHighWriter[0x46] = this.memoryWriter[0xFF46] = function (parentObj, address, data) {
+ parentObj.memory[0xFF46] = data;
+ if (data > 0x7F && data < 0xE0) { //DMG cannot DMA from the ROM banks.
+ data <<= 8;
+ address = 0xFE00;
+ var stat = parentObj.modeSTAT;
+ parentObj.modeSTAT = 0;
+ var newData = 0;
+ do {
+ newData = parentObj.memoryReader[data](parentObj, data++);
+ if (newData != parentObj.memory[address]) {
+ //JIT the graphics render queue:
+ parentObj.modeSTAT = stat;
+ parentObj.graphicsJIT();
+ parentObj.modeSTAT = 0;
+ parentObj.memory[address++] = newData;
+ break;
+ }
+ } while (++address < 0xFEA0);
+ if (address < 0xFEA0) {
+ do {
+ parentObj.memory[address++] = parentObj.memoryReader[data](parentObj, data++);
+ parentObj.memory[address++] = parentObj.memoryReader[data](parentObj, data++);
+ parentObj.memory[address++] = parentObj.memoryReader[data](parentObj, data++);
+ parentObj.memory[address++] = parentObj.memoryReader[data](parentObj, data++);
+ } while (address < 0xFEA0);
+ }
+ parentObj.modeSTAT = stat;
+ }
+ }
+ this.memoryHighWriter[0x47] = this.memoryWriter[0xFF47] = function (parentObj, address, data) {
+ if (parentObj.memory[0xFF47] != data) {
+ parentObj.midScanLineJIT();
+ parentObj.updateGBBGPalette(data);
+ parentObj.memory[0xFF47] = data;
+ }
+ }
+ this.memoryHighWriter[0x48] = this.memoryWriter[0xFF48] = function (parentObj, address, data) {
+ if (parentObj.memory[0xFF48] != data) {
+ parentObj.midScanLineJIT();
+ parentObj.updateGBOBJPalette(0, data);
+ parentObj.memory[0xFF48] = data;
+ }
+ }
+ this.memoryHighWriter[0x49] = this.memoryWriter[0xFF49] = function (parentObj, address, data) {
+ if (parentObj.memory[0xFF49] != data) {
+ parentObj.midScanLineJIT();
+ parentObj.updateGBOBJPalette(4, data);
+ parentObj.memory[0xFF49] = data;
+ }
+ }
+ this.memoryHighWriter[0x4D] = this.memoryWriter[0xFF4D] = function (parentObj, address, data) {
+ parentObj.memory[0xFF4D] = data;
+ }
+ this.memoryHighWriter[0x4F] = this.memoryWriter[0xFF4F] = this.cartIgnoreWrite; //Not writable in DMG mode.
+ this.memoryHighWriter[0x55] = this.memoryWriter[0xFF55] = this.cartIgnoreWrite;
+ this.memoryHighWriter[0x68] = this.memoryWriter[0xFF68] = this.cartIgnoreWrite;
+ this.memoryHighWriter[0x69] = this.memoryWriter[0xFF69] = this.cartIgnoreWrite;
+ this.memoryHighWriter[0x6A] = this.memoryWriter[0xFF6A] = this.cartIgnoreWrite;
+ this.memoryHighWriter[0x6B] = this.memoryWriter[0xFF6B] = this.cartIgnoreWrite;
+ this.memoryHighWriter[0x6C] = this.memoryWriter[0xFF6C] = this.cartIgnoreWrite;
+ this.memoryHighWriter[0x70] = this.memoryWriter[0xFF70] = this.cartIgnoreWrite;
+ this.memoryHighWriter[0x74] = this.memoryWriter[0xFF74] = this.cartIgnoreWrite;
+ }
+}
+GameBoyCore.prototype.recompileBootIOWriteHandling = function () {
+ //Boot I/O Registers:
+ if (this.inBootstrap) {
+ this.memoryHighWriter[0x50] = this.memoryWriter[0xFF50] = function (parentObj, address, data) {
+ cout("Boot ROM reads blocked: Bootstrap process has ended.", 0);
+ parentObj.inBootstrap = false;
+ parentObj.disableBootROM(); //Fill in the boot ROM ranges with ROM bank 0 ROM ranges
+ parentObj.memory[0xFF50] = data; //Bits are sustained in memory?
+ }
+ if (this.cGBC) {
+ this.memoryHighWriter[0x6C] = this.memoryWriter[0xFF6C] = function (parentObj, address, data) {
+ if (parentObj.inBootstrap) {
+ parentObj.cGBC = ((data & 0x1) == 0);
+ //Exception to the GBC identifying code:
+ if (parentObj.name + parentObj.gameCode + parentObj.ROM[0x143] == "Game and Watch 50") {
+ parentObj.cGBC = true;
+ cout("Created a boot exception for Game and Watch Gallery 2 (GBC ID byte is wrong on the cartridge).", 1);
+ }
+ cout("Booted to GBC Mode: " + parentObj.cGBC, 0);
+ }
+ parentObj.memory[0xFF6C] = data;
+ }
+ }
+ }
+ else {
+ //Lockout the ROMs from accessing the BOOT ROM control register:
+ this.memoryHighWriter[0x50] = this.memoryWriter[0xFF50] = this.cartIgnoreWrite;
+ }
+}
+//Helper Functions
+GameBoyCore.prototype.toTypedArray = function (baseArray, memtype) {
+ try {
+ // The following line was modified for benchmarking:
+ if (settings[5] || (memtype != "float32" && GameBoyWindow.opera && this.checkForOperaMathBug())) {
+ return baseArray;
+ }
+ if (!baseArray || !baseArray.length) {
+ return [];
+ }
+ var length = baseArray.length;
+ switch (memtype) {
+ case "uint8":
+ var typedArrayTemp = new Uint8Array(length);
+ break;
+ case "int8":
+ var typedArrayTemp = new Int8Array(length);
+ break;
+ case "int32":
+ var typedArrayTemp = new Int32Array(length);
+ break;
+ case "float32":
+ var typedArrayTemp = new Float32Array(length);
+ }
+ for (var index = 0; index < length; index++) {
+ typedArrayTemp[index] = baseArray[index];
+ }
+ return typedArrayTemp;
+ }
+ catch (error) {
+ cout("Could not convert an array to a typed array: " + error.message, 1);
+ return baseArray;
+ }
+}
+GameBoyCore.prototype.fromTypedArray = function (baseArray) {
+ try {
+ if (!baseArray || !baseArray.length) {
+ return [];
+ }
+ var arrayTemp = [];
+ for (var index = 0; index < baseArray.length; ++index) {
+ arrayTemp[index] = baseArray[index];
+ }
+ return arrayTemp;
+ }
+ catch (error) {
+ cout("Conversion from a typed array failed: " + error.message, 1);
+ return baseArray;
+ }
+}
+GameBoyCore.prototype.getTypedArray = function (length, defaultValue, numberType) {
+ try {
+ if (settings[5]) {
+ throw(new Error(""));
+ }
+ // The following line was modified for benchmarking:
+ if (numberType != "float32" && GameBoyWindow.opera && this.checkForOperaMathBug()) {
+ //Caught Opera breaking typed array math:
+ throw(new Error(""));
+ }
+ switch (numberType) {
+ case "int8":
+ var arrayHandle = new Int8Array(length);
+ break;
+ case "uint8":
+ var arrayHandle = new Uint8Array(length);
+ break;
+ case "int32":
+ var arrayHandle = new Int32Array(length);
+ break;
+ case "float32":
+ var arrayHandle = new Float32Array(length);
+ }
+ if (defaultValue != 0) {
+ var index = 0;
+ while (index < length) {
+ arrayHandle[index++] = defaultValue;
+ }
+ }
+ }
+ catch (error) {
+ cout("Could not convert an array to a typed array: " + error.message, 1);
+ var arrayHandle = [];
+ var index = 0;
+ while (index < length) {
+ arrayHandle[index++] = defaultValue;
+ }
+ }
+ return arrayHandle;
+}
+GameBoyCore.prototype.checkForOperaMathBug = function () {
+ var testTypedArray = new Uint8Array(1);
+ testTypedArray[0] = -1;
+ testTypedArray[0] >>= 0;
+ if (testTypedArray[0] != 0xFF) {
+ cout("Detected faulty math by your browser.", 2);
+ return true;
+ }
+ else {
+ return false;
+ }
+}
+
+// End of js/GameBoyCore.js file.
+
+// Start of js/GameBoyIO.js file.
+
+"use strict";
+var gameboy = null; //GameBoyCore object.
+var gbRunInterval = null; //GameBoyCore Timer
+var settings = [ //Some settings.
+ true, //Turn on sound.
+ false, //Boot with boot ROM first? (set to false for benchmarking)
+ false, //Give priority to GameBoy mode
+ [39, 37, 38, 40, 88, 90, 16, 13], //Keyboard button map.
+ true, //Colorize GB mode?
+ false, //Disallow typed arrays?
+ 4, //Interval for the emulator loop.
+ 15, //Audio buffer minimum span amount over x interpreter iterations.
+ 30, //Audio buffer maximum span amount over x interpreter iterations.
+ false, //Override to allow for MBC1 instead of ROM only (compatibility for broken 3rd-party cartridges).
+ false, //Override MBC RAM disabling and always allow reading and writing to the banks.
+ false, //Use the GameBoy boot ROM instead of the GameBoy Color boot ROM.
+ false, //Scale the canvas in JS, or let the browser scale the canvas?
+ 0x10, //Internal audio buffer pre-interpolation factor.
+ 1 //Volume level set.
+];
+function start(canvas, ROM) {
+ clearLastEmulation();
+ autoSave(); //If we are about to load a new game, then save the last one...
+ gameboy = new GameBoyCore(canvas, ROM);
+ gameboy.openMBC = openSRAM;
+ gameboy.openRTC = openRTC;
+ gameboy.start();
+ run();
+}
+function run() {
+ if (GameBoyEmulatorInitialized()) {
+ if (!GameBoyEmulatorPlaying()) {
+ gameboy.stopEmulator &= 1;
+ cout("Starting the iterator.", 0);
+ var dateObj = new_Date(); // The line is changed for benchmarking.
+ gameboy.firstIteration = dateObj.getTime();
+ gameboy.iterations = 0;
+ // The following lines are commented out for benchmarking.
+ // gbRunInterval = setInterval(function () {
+ // if (!document.hidden && !document.msHidden && !document.mozHidden && !document.webkitHidden) {
+ // gameboy.run();
+ // }
+ // }, settings[6]);
+ }
+ else {
+ cout("The GameBoy core is already running.", 1);
+ }
+ }
+ else {
+ cout("GameBoy core cannot run while it has not been initialized.", 1);
+ }
+}
+function pause() {
+ if (GameBoyEmulatorInitialized()) {
+ if (GameBoyEmulatorPlaying()) {
+ clearLastEmulation();
+ }
+ else {
+ cout("GameBoy core has already been paused.", 1);
+ }
+ }
+ else {
+ cout("GameBoy core cannot be paused while it has not been initialized.", 1);
+ }
+}
+function clearLastEmulation() {
+ if (GameBoyEmulatorInitialized() && GameBoyEmulatorPlaying()) {
+ clearInterval(gbRunInterval);
+ gameboy.stopEmulator |= 2;
+ cout("The previous emulation has been cleared.", 0);
+ }
+ else {
+ cout("No previous emulation was found to be cleared.", 0);
+ }
+}
+function save() {
+ if (GameBoyEmulatorInitialized()) {
+ try {
+ var state_suffix = 0;
+ while (findValue("FREEZE_" + gameboy.name + "_" + state_suffix) != null) {
+ state_suffix++;
+ }
+ setValue("FREEZE_" + gameboy.name + "_" + state_suffix, gameboy.saveState());
+ cout("Saved the current state as: FREEZE_" + gameboy.name + "_" + state_suffix, 0);
+ }
+ catch (error) {
+ cout("Could not save the current emulation state(\"" + error.message + "\").", 2);
+ }
+ }
+ else {
+ cout("GameBoy core cannot be saved while it has not been initialized.", 1);
+ }
+}
+function saveSRAM() {
+ if (GameBoyEmulatorInitialized()) {
+ if (gameboy.cBATT) {
+ try {
+ var sram = gameboy.saveSRAMState();
+ if (sram.length > 0) {
+ cout("Saving the SRAM...", 0);
+ if (findValue("SRAM_" + gameboy.name) != null) {
+ //Remove the outdated storage format save:
+ cout("Deleting the old SRAM save due to outdated format.", 0);
+ deleteValue("SRAM_" + gameboy.name);
+ }
+ setValue("B64_SRAM_" + gameboy.name, arrayToBase64(sram));
+ }
+ else {
+ cout("SRAM could not be saved because it was empty.", 1);
+ }
+ }
+ catch (error) {
+ cout("Could not save the current emulation state(\"" + error.message + "\").", 2);
+ }
+ }
+ else {
+ cout("Cannot save a game that does not have battery backed SRAM specified.", 1);
+ }
+ saveRTC();
+ }
+ else {
+ cout("GameBoy core cannot be saved while it has not been initialized.", 1);
+ }
+}
+function saveRTC() { //Execute this when SRAM is being saved as well.
+ if (GameBoyEmulatorInitialized()) {
+ if (gameboy.cTIMER) {
+ try {
+ cout("Saving the RTC...", 0);
+ setValue("RTC_" + gameboy.name, gameboy.saveRTCState());
+ }
+ catch (error) {
+ cout("Could not save the RTC of the current emulation state(\"" + error.message + "\").", 2);
+ }
+ }
+ }
+ else {
+ cout("GameBoy core cannot be saved while it has not been initialized.", 1);
+ }
+}
+function autoSave() {
+ if (GameBoyEmulatorInitialized()) {
+ cout("Automatically saving the SRAM.", 0);
+ saveSRAM();
+ saveRTC();
+ }
+}
+function openSRAM(filename) {
+ try {
+ if (findValue("B64_SRAM_" + filename) != null) {
+ cout("Found a previous SRAM state (Will attempt to load).", 0);
+ return base64ToArray(findValue("B64_SRAM_" + filename));
+ }
+ else if (findValue("SRAM_" + filename) != null) {
+ cout("Found a previous SRAM state (Will attempt to load).", 0);
+ return findValue("SRAM_" + filename);
+ }
+ else {
+ cout("Could not find any previous SRAM copy for the current ROM.", 0);
+ }
+ }
+ catch (error) {
+ cout("Could not open the SRAM of the saved emulation state.", 2);
+ }
+ return [];
+}
+function openRTC(filename) {
+ try {
+ if (findValue("RTC_" + filename) != null) {
+ cout("Found a previous RTC state (Will attempt to load).", 0);
+ return findValue("RTC_" + filename);
+ }
+ else {
+ cout("Could not find any previous RTC copy for the current ROM.", 0);
+ }
+ }
+ catch (error) {
+ cout("Could not open the RTC data of the saved emulation state.", 2);
+ }
+ return [];
+}
+function openState(filename, canvas) {
+ try {
+ if (findValue(filename) != null) {
+ try {
+ clearLastEmulation();
+ cout("Attempting to run a saved emulation state.", 0);
+ gameboy = new GameBoyCore(canvas, "");
+ gameboy.savedStateFileName = filename;
+ gameboy.returnFromState(findValue(filename));
+ run();
+ }
+ catch (error) {
+ alert(error.message + " file: " + error.fileName + " line: " + error.lineNumber);
+ }
+ }
+ else {
+ cout("Could not find the save state " + filename + "\".", 2);
+ }
+ }
+ catch (error) {
+ cout("Could not open the saved emulation state.", 2);
+ }
+}
+function import_save(blobData) {
+ blobData = decodeBlob(blobData);
+ if (blobData && blobData.blobs) {
+ if (blobData.blobs.length > 0) {
+ for (var index = 0; index < blobData.blobs.length; ++index) {
+ cout("Importing blob \"" + blobData.blobs[index].blobID + "\"", 0);
+ if (blobData.blobs[index].blobContent) {
+ if (blobData.blobs[index].blobID.substring(0, 5) == "SRAM_") {
+ setValue("B64_" + blobData.blobs[index].blobID, base64(blobData.blobs[index].blobContent));
+ }
+ else {
+ setValue(blobData.blobs[index].blobID, JSON.parse(blobData.blobs[index].blobContent));
+ }
+ }
+ else if (blobData.blobs[index].blobID) {
+ cout("Save file imported had blob \"" + blobData.blobs[index].blobID + "\" with no blob data interpretable.", 2);
+ }
+ else {
+ cout("Blob chunk information missing completely.", 2);
+ }
+ }
+ }
+ else {
+ cout("Could not decode the imported file.", 2);
+ }
+ }
+ else {
+ cout("Could not decode the imported file.", 2);
+ }
+}
+function generateBlob(keyName, encodedData) {
+ //Append the file format prefix:
+ var saveString = "EMULATOR_DATA";
+ var consoleID = "GameBoy";
+ //Figure out the length:
+ var totalLength = (saveString.length + 4 + (1 + consoleID.length)) + ((1 + keyName.length) + (4 + encodedData.length));
+ //Append the total length in bytes:
+ saveString += to_little_endian_dword(totalLength);
+ //Append the console ID text's length:
+ saveString += to_byte(consoleID.length);
+ //Append the console ID text:
+ saveString += consoleID;
+ //Append the blob ID:
+ saveString += to_byte(keyName.length);
+ saveString += keyName;
+ //Now append the save data:
+ saveString += to_little_endian_dword(encodedData.length);
+ saveString += encodedData;
+ return saveString;
+}
+function generateMultiBlob(blobPairs) {
+ var consoleID = "GameBoy";
+ //Figure out the initial length:
+ var totalLength = 13 + 4 + 1 + consoleID.length;
+ //Append the console ID text's length:
+ var saveString = to_byte(consoleID.length);
+ //Append the console ID text:
+ saveString += consoleID;
+ var keyName = "";
+ var encodedData = "";
+ //Now append all the blobs:
+ for (var index = 0; index < blobPairs.length; ++index) {
+ keyName = blobPairs[index][0];
+ encodedData = blobPairs[index][1];
+ //Append the blob ID:
+ saveString += to_byte(keyName.length);
+ saveString += keyName;
+ //Now append the save data:
+ saveString += to_little_endian_dword(encodedData.length);
+ saveString += encodedData;
+ //Update the total length:
+ totalLength += 1 + keyName.length + 4 + encodedData.length;
+ }
+ //Now add the prefix:
+ saveString = "EMULATOR_DATA" + to_little_endian_dword(totalLength) + saveString;
+ return saveString;
+}
+function decodeBlob(blobData) {
+ /*Format is as follows:
+ - 13 byte string "EMULATOR_DATA"
+ - 4 byte total size (including these 4 bytes).
+ - 1 byte Console type ID length
+ - Console type ID text of 8 bit size
+ blobs {
+ - 1 byte blob ID length
+ - blob ID text (Used to say what the data is (SRAM/freeze state/etc...))
+ - 4 byte blob length
+ - blob length of 32 bit size
+ }
+ */
+ var length = blobData.length;
+ var blobProperties = {};
+ blobProperties.consoleID = null;
+ var blobsCount = -1;
+ blobProperties.blobs = [];
+ if (length > 17) {
+ if (blobData.substring(0, 13) == "EMULATOR_DATA") {
+ var length = Math.min(((blobData.charCodeAt(16) & 0xFF) << 24) | ((blobData.charCodeAt(15) & 0xFF) << 16) | ((blobData.charCodeAt(14) & 0xFF) << 8) | (blobData.charCodeAt(13) & 0xFF), length);
+ var consoleIDLength = blobData.charCodeAt(17) & 0xFF;
+ if (length > 17 + consoleIDLength) {
+ blobProperties.consoleID = blobData.substring(18, 18 + consoleIDLength);
+ var blobIDLength = 0;
+ var blobLength = 0;
+ for (var index = 18 + consoleIDLength; index < length;) {
+ blobIDLength = blobData.charCodeAt(index++) & 0xFF;
+ if (index + blobIDLength < length) {
+ blobProperties.blobs[++blobsCount] = {};
+ blobProperties.blobs[blobsCount].blobID = blobData.substring(index, index + blobIDLength);
+ index += blobIDLength;
+ if (index + 4 < length) {
+ blobLength = ((blobData.charCodeAt(index + 3) & 0xFF) << 24) | ((blobData.charCodeAt(index + 2) & 0xFF) << 16) | ((blobData.charCodeAt(index + 1) & 0xFF) << 8) | (blobData.charCodeAt(index) & 0xFF);
+ index += 4;
+ if (index + blobLength <= length) {
+ blobProperties.blobs[blobsCount].blobContent = blobData.substring(index, index + blobLength);
+ index += blobLength;
+ }
+ else {
+ cout("Blob length check failed, blob determined to be incomplete.", 2);
+ break;
+ }
+ }
+ else {
+ cout("Blob was incomplete, bailing out.", 2);
+ break;
+ }
+ }
+ else {
+ cout("Blob was incomplete, bailing out.", 2);
+ break;
+ }
+ }
+ }
+ }
+ }
+ return blobProperties;
+}
+function matchKey(key) { //Maps a keyboard key to a gameboy key.
+ //Order: Right, Left, Up, Down, A, B, Select, Start
+ for (var index = 0; index < settings[3].length; index++) {
+ if (settings[3][index] == key) {
+ return index;
+ }
+ }
+ return -1;
+}
+function GameBoyEmulatorInitialized() {
+ return (typeof gameboy == "object" && gameboy != null);
+}
+function GameBoyEmulatorPlaying() {
+ return ((gameboy.stopEmulator & 2) == 0);
+}
+function GameBoyKeyDown(e) {
+ if (GameBoyEmulatorInitialized() && GameBoyEmulatorPlaying()) {
+ var keycode = matchKey(e.keyCode);
+ if (keycode >= 0 && keycode < 8) {
+ gameboy.JoyPadEvent(keycode, true);
+ try {
+ e.preventDefault();
+ }
+ catch (error) { }
+ }
+ }
+}
+function GameBoyKeyUp(e) {
+ if (GameBoyEmulatorInitialized() && GameBoyEmulatorPlaying()) {
+ var keycode = matchKey(e.keyCode);
+ if (keycode >= 0 && keycode < 8) {
+ gameboy.JoyPadEvent(keycode, false);
+ try {
+ e.preventDefault();
+ }
+ catch (error) { }
+ }
+ }
+}
+function GameBoyGyroSignalHandler(e) {
+ if (GameBoyEmulatorInitialized() && GameBoyEmulatorPlaying()) {
+ if (e.gamma || e.beta) {
+ gameboy.GyroEvent(e.gamma * Math.PI / 180, e.beta * Math.PI / 180);
+ }
+ else {
+ gameboy.GyroEvent(e.x, e.y);
+ }
+ try {
+ e.preventDefault();
+ }
+ catch (error) { }
+ }
+}
+//The emulator will call this to sort out the canvas properties for (re)initialization.
+function initNewCanvas() {
+ if (GameBoyEmulatorInitialized()) {
+ gameboy.canvas.width = gameboy.canvas.clientWidth;
+ gameboy.canvas.height = gameboy.canvas.clientHeight;
+ }
+}
+//Call this when resizing the canvas:
+function initNewCanvasSize() {
+ if (GameBoyEmulatorInitialized()) {
+ if (!settings[12]) {
+ if (gameboy.onscreenWidth != 160 || gameboy.onscreenHeight != 144) {
+ gameboy.initLCD();
+ }
+ }
+ else {
+ if (gameboy.onscreenWidth != gameboy.canvas.clientWidth || gameboy.onscreenHeight != gameboy.canvas.clientHeight) {
+ gameboy.initLCD();
+ }
+ }
+ }
+}
+
+// End of js/GameBoyIO.js file.
+
+// Start of realtime.js file.
+// ROM code from Public Domain LPC2000 Demo "realtime" by AGO.
+
+var gameboy_rom='r+BPyZiEZwA+AeBPySAobeEq6gAgKlYj5WJv6SRmZjjhKuXqACDJ/////////////////////////////////xgHZwCYhGcA2fX6/3/1xdXlIRPKNgHN9f/h0cHx6gAg+hLKtyAC8cnwgLcoF/CC7hjgUT6Q4FOv4FLgVOCAPv/gVfHZ8IG3IALx2fBA7gjgQA8PD+YB7gHgT/CC4FHuEOCCPojgU6/gUuBU4IE+/uBV4ID6NMs86jTL8dkKCgoKbWFkZSBieSBhZ28uIGVtYWlsOmdvYnV6b3ZAeWFob28uY29tCnVybDogc3BlY2N5LmRhLnJ1CgoKCv///////wDDSgnO7WZmzA0ACwNzAIMADAANAAgRH4iJAA7czG7m3d3Zmbu7Z2NuDuzM3dyZn7u5Mz5BR08nUyBSRUFMVElNRSCAAAAAAgEDADMBSTQeIUD/y37I8P/1y4fg//BE/pEg+su+8eD/yT7A4EY+KD0g/cnF1eWvEQPK1RITEhMGAyEAyuXFTgYAIWAMCQkqEhMqEhPB4SMFIOrhrwYIzYsU4dHByf////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8AAgMFBggJCwwOEBETFBYXGBobHR4fISIjJSYnKSorLC0uLzAxMjM0NTY3ODg5Ojo7PDw9PT4+Pj8/Pz9AQEBAQEBAQEBAPz8/Pz4+PT08PDs7Ojk5ODc2NTU0MzIxMC8uLCsqKSgmJSQjISAfHRwaGRcWFRMSEA8NCwoIBwUEAgH//fz6+ff29PPx8O7t6+ro5+Xk4uHg3t3c2tnY19bU09LR0M/OzczLysnJyMfGxsXFxMPDw8LCwcHBwcDAwMDAwMDAwMDBwcHBwsLDw8PExcXGxsfIycnKy8zNzs/Q0dLT1NXX2Nna3N3e4OHi5OXn6Onr7O7v8fL09vf5+vz9AAEECRAZJDFAUWR5kKnE4QAhRGmQueQRQHGk2RBJhMEAQYTJEFmk8UCR5DmQ6UShAGHEKZD5ZNFAsSSZEIkEgQCBBIkQmSSxQNFk+ZApxGEAoUTpkDnkkUDxpFkQyYRBAMGESRDZpHFAEeS5kGlEIQDhxKmQeWRRQDEkGRAJBAEAAQQJEBkkMUBRZHmQqcThACFEaZC55BFAcaTZEEmEwQBBhMkQWaTxQJHkOZDpRKEAYcQpkPlk0UCxJJkQiQSBAIEEiRCZJLFA0WT5kCnEYQChROmQOeSRQPGkWRDJhEEAwYRJENmkcUAR5LmQaUQhAOHEqZB5ZFFAMSQZEAkEAQAAAAAAAAAAAAAAAAAAAAABAQEBAQEBAgICAgIDAwMDBAQEBAUFBQUGBgYHBwcICAkJCQoKCgsLDAwNDQ4ODw8QEBEREhITExQUFRUWFxcYGRkaGhscHB0eHh8gISEiIyQkJSYnJygpKisrLC0uLzAxMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1FSU1RVVldZWltcXV9gYWJkZWZnaWprbG5vcHJzdHZ3eXp7fX5/gYKEhYeIiouNjpCRk5SWl5manJ2foKKkpaepqqytr7GytLa3ubu9vsDCxMXHycvMztDS1NXX2dvd3+Hi5Obo6uzu8PL09vj6/P4A//z38Ofcz8CvnIdwVzwfAN+8l3BHHO/Aj1wn8Ld8PwC/fDfwp1wPwG8cx3AXvF8AnzzXcAecL8BP3Gfwd/x/AH/8d/Bn3E/AL5wHcNc8nwBfvBdwxxxvwA9cp/A3fL8AP3y38Cdcj8DvHEdwl7zfAB88V3CHnK/Az9zn8Pf8/wD//Pfw59zPwK+ch3BXPB8A37yXcEcc78CPXCfwt3w/AL98N/CnXA/AbxzHcBe8XwCfPNdwB5wvwE/cZ/B3/H8Af/x38GfcT8AvnAdw1zyfAF+8F3DHHG/AD1yn8Dd8vwA/fLfwJ1yPwO8cR3CXvN8AHzxXcIecr8DP3Ofw9/z/AP/////////////////////+/v7+/v79/f39/fz8/Pz8+/v7+vr6+vn5+fj4+Pf39/b29fX19PTz8/Ly8fHw8PDv7u7t7ezs6+vq6uno6Ofn5uXl5OPj4uHh4N/e3t3c3Nva2djY19bV1NTT0tHQz8/OzczLysnIx8bFxMPCwcDAvr28u7q5uLe2tbSzsrGwr62sq6qpqKalpKOioJ+enZyamZiWlZSTkZCPjYyLiYiHhYSCgYB+fXt6eHd1dHJxcG5sa2loZmVjYmBfXVtaWFdVU1JQTk1LSUhGREJBPz08Ojg2NDMxLy0rKigmJCIgHx0bGRcVExEPDQsJBwUDAf9/Px8PBwMBgEAgEAgEAgEAAQEBAQEBAQEBAQEA//////////////+AEAcAAQABAAEBAAEBAAEA/wD//wD//wD/AP+AKwcBAAEAAQD/AP8A/wD/AP8A/wABAAEAAQCARgcBAQEBAQD//////////////wABAQEBAQGAYQf///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+AwODw+Pz+/xEAwAGxwj4E9cU+BfUKbwMKZ37+gCALI34LAiN+AwILGOsahhIDHBwcHPE9IN7BIRAAGVRdPgX1Cm8DCmcalhIjfAILfQIDAx0dHR3xPSDnIRgAGVRd8T0grskRAcAB6cI+BPUKbwMKZ37+gCALI34LAiN+AwILGOs+CvUahhIcHBwc8T0g9CN8Agt9AgMD8T0g0MkgIEZJTExFRCAgIFBPTFlHT05TIEhFTElDT1BURVJJTiBBQ1RJT04gIQDADgpwLHQsGhPWICI2ACwNIPE+oOoQyngBCQDlYmsJVF3hDMYKR3AsdCwaG9YgIjYALA0g8a/qEcrJ+hDK/jDI1gTqEMpHPqCQ/lA4Aj5QDgAM1ggw+3ghAcARBAB3xggZDSD5+hHKg+oRykf+UDgCPlAOAAzWCDD7eC4td9YIGQ0g+ckh9grzMf/PzVABr+Am4P/gD+BD4EL2SOBFPkDgQT4E4AfN9RM+CuoAAA4HeeBwJqCvIstsKPsNIPIh/v8yy30g+wEKABH1/yFpAc3kE+cCAVYAEQDBIVt2zeQTrwYYIWsOzYsUIYsOzaQUxwGwAxEAgCGhF8XlzeQT4cERAIjN5BMhAJgRAwABYMDHcc9yIwUg+BQdIPHN9RMhuxUGAc2WE82JEz5E4EGv4EU+A+D/+z4B6hLK4E0QAAB4zccTBSD6zZATxwEACFkhAIhzIwt4sSD5IQDHPv9FdyRwJCJ3JXclcCwg8x5/IQCYx3PPNgDL1DYIx3PLlCPLVCjuPoABDxARIAAhIpjF5XfL1HfLlDwZDSD1POEswQUg7D486jPLr+o0yz3qL8s+oOCCPgLqG8vNiRM+ROBBr+BFPgPg/68+ACEXyyI+CiI+IHev6h7L4ITgluodyz4B6h/L6g/D6g3KBlARnAjNxAjNcwsBLAHFzTsLzQAJwQt4sSDzzZATxwEACFkhAIhzIwt4sSD5zfUTeQYQIYMOzYsUPv/qKcsGgBGwCM3ECM2JEwEsAcXNbAzNAAnBC3ixIPOv6hLKzZATPpDgU/PHAbADEQCIIaEXzeQTzfUTIQIWBgHNlhPNiRM+ROBBr+BFPgPg//sY/j4D6gAgzcRGBgMhF8t+gCJ+gDwifoB3zckP+jDLb/oxy2fNtgs+AeCB8IG3IPv6Dcq3KAPNcwHJ+h3LBgARTg2Hb2AZKmZvTgkq4ItfKjzgjD1PKuCNe4eHg0cRAMUqEhwFIPp5h4eBRxEAxCoSHAUg+n3qMMt86jHLyfCL4I7wjOCP8I3gkBEAw9XlzcoQ4dHwpeaAEhwBAwAJ8JA94JAg6CEAxQYPKk+gXxq3IB95yzegXxq3IBYqT6BfGrcgD3nLN6BfGrcgBiwsLBhHLOXNyhDwlrcoKwYB8KXGP0/LfygBBcXwpMY/Vx4AzZMOe8H18KPGP1ceAM2TDsHhJCJwGAzhJPCjxj8i8KTGPyIsJRbDBg/wjj3gjsLiCz4C6gAgw1JhfBjcHwAL7mpIYL9vBgMhF8t+gCJ+gDwifoB3zckPIcsNEQDGzf4MI+U+A+oAICEgy83+DPocy9YIb+ocy82vYAYDESDLIWIOxeXVzcoQ4fCjxhQi8KQiNg8jVF3hIyMjwQUg5M3ERsE+AeoAIAr+/ygiEQDGbyYAKRnlAwoDbyYAKRleI1bhKmZvxc0xHMwAQMEY2T4B4IHwgbcg+8l+PMjl1c3KEAYB8KVPy38oAQXF8KTLf/UoAi88Vx4AzZMO8XsgAi88xn/B9fCjy3/1KAIvPFceAM2TDvF7KAIvPMZ/wdESE3gSE+EjIyMYsFANAgAIDAYCRCgoFANEKAAUE0QAABQSRAAoFAJVKCjsA1UoAOwTVQAA7BJVACjsAAAEBQAAAAEFAAEBAwIGAQEDBwYCAgAHAwICAAcEAwMBAgYDAwEFBgQEAAECBAQAAwIFBQQFBgUFBAcGMgAAzgAAADIAAM4AAAAyAADOKAAAHhEAChEAAAAACu8AHu8AFAAKFAD2FAAPCgAF6AAC4gAQ3gAQ4gD+CgD74g4C3Q4C4QAC4vIC3fIC4AAM4PsM4PsQ4/sJ3fsJ/wABAQICAwMEBAUFAAAGAQYCBgMGBAYFBgAHAQcCBwMHBAcFBwYICQoKCwsMDA0NDgoPDxAQEQoSEhMTERQVFRYVFxUYCBkIGggb/yAAD/AbD/DlD/9//3+XEQAAAGD/f5cRAAAYAP9/lxEAAIB8lxH/f/9/QHz/f18IAADLI8sSeC9HeS9PAyEAAH2Pb3yPZwk4BWd9kW+3yxPLEn2Pb3yPZwk4BWd9kW+3yxPLEn2Pb3yPZwk4BWd9kW+3yxPLEn2Pb3yPZwk4BWd9kW+3yxPLEn2Pb3yPZwk4BWd9kW+3yxPLEn2Pb3yPZwk4BWd9kW+3yxPLEn2Pb3yPZwk4BWd9kW+3yxPLEn2Pb3yPZwk4BWd9kW+3yxPLEn2Pb3yPZwk4BWd9kW+3yxPLEn2Pb3yPZwk4BWd9kW+3yxPLEn2Pb3yPZwk4BWd9kW+3yxPLEn2Pb3yPZwk4BWd9kW+3yxPLEn2Pb3yPZwk4BWd9kW+3yxPLEn2Pb3yPZwk4BWd9kW+3yxPLEn2Pb3yPZwk4BWd9kW+3yxPLEn2Pb3yPZwk4BWd9kW+3yxPLEssoyxkJ0BPJ+hfLJgJvfuCcLzzgnn3GQG9+4Jvgn6/gmOCZ4JrgneChPkDgl/oYy29OfcZAb0bFeOCgeeCizdMQ8KPgpvCk4KnwpeCsr+Cg4KI+QOChzdMQ8KPgp/Ck4KrwpeCtwXkvPOCgr+CheOCizdMQ8KPgmfCk4JzwpeCf8Kbgl/Cp4JrwrOCd8KfgmPCq4JvwreCe+hnLJgJvTn3GQG9GxXjgoHkvPOChr+CizdMQ8KPgpvCk4KnwpeCswXngoHjgoa/gos3TEPCj4KfwpOCq8KXgra/goOChPkDgos3TEPCj4JnwpOCc8KXgn/Cm4JfwqeCa8KzgnfCn4JjwquCb8K3gnskq4KAq4KEq4KLwl1/woCYGV8t6ICDLe3soJy88X3qTMAIvPG96g1YlXiVvfiVuZxl8LzwYH3ovPFfLeyjhey88X5IwAi88b3qDViVeJW9+JW5nGXxH8Jhf8KEmBlfLeiAgy3t7KCcvPF96kzACLzxveoNWJV4lb34lbmcZfC88GB96LzxXy3so4XsvPF+SMAIvPG96g1YlXiVvfiVuZxl8T/CZX/CiJgZXy3ogIMt7eygnLzxfepMwAi88b3qDViVeJW9+JW5nGXwvPBgfei88V8t7KOF7LzxfkjACLzxveoNWJV4lb34lbmcZfICB4KPwml/woCYGV8t6ICDLe3soJy88X3qTMAIvPG96g1YlXiVvfiVuZxl8LzwYH3ovPFfLeyjhey88X5IwAi88b3qDViVeJW9+JW5nGXxH8Jtf8KEmBlfLeiAgy3t7KCcvPF96kzACLzxveoNWJV4lb34lbmcZfC88GB96LzxXy3so4XsvPF+SMAIvPG96g1YlXiVvfiVuZxl8T/CcX/CiJgZXy3ogIMt7eygnLzxfepMwAi88b3qDViVeJW9+JW5nGXwvPBgfei88V8t7KOF7LzxfkjACLzxveoNWJV4lb34lbmcZfICB4KTwnV/woCYGV8t6ICDLe3soJy88X3qTMAIvPG96g1YlXiVvfiVuZxl8LzwYH3ovPFfLeyjhey88X5IwAi88b3qDViVeJW9+JW5nGXxH8J5f8KEmBlfLeiAgy3t7KCcvPF96kzACLzxveoNWJV4lb34lbmcZfC88GB96LzxXy3so4XsvPF+SMAIvPG96g1YlXiVvfiVuZxl8T/CfX/CiJgZXy3ogIMt7eygnLzxfepMwAi88b3qDViVeJW9+JW5nGXwvPBgfei88V8t7KOF7LzxfkjACLzxveoNWJV4lb34lbmcZfICB4KXJ9T6D4EDxyfWv4EDxyfXF1eXHKv7/KFD+FiAaTiMqh4eHVF1vJgApKXgGmAlHelRne11vGNzGYBLPeBIcGNN2ACETyjQ1KPc1yfvFBmR2AAUg+8HJ+3YABSD7yfXF1eUqEhMLeLEg+OHRwfHJxeUBAKAhAMDNAxThwcnF5XEjBSD74cHJxdXlAQCAIZXKzQMU4dHBycXV5a/qFcuwIAwaEyIaEzIEDXjqFcvlxRq+EyAPIxq+IAkTIw0gCMHhGBkrGyMjBSDmecFPBBoTIhoTIiEVyzThDSDS+hXL4dHBydVfzXIUuzD60cnF9cH6FMrLD6mAR/CLkR+AR/AFqOoUysHJ9cXltxcXF/aA4Ggq4GkFIPo+5OBH4cHxyfXF5bcXFxf2gOBqKuBrBSD6PuTgSOBJ4cHxyT4Q4ADwAC/LN+bwRz4g4ADwAC/mD7DqFsvJzyEAgK8GIE8+CCINIPwFIPnHIQCABiBPIg0g/AUg+cnFzQMVSs0eFcHJxc0RFUjNGRVLzSMVwcnFBgHNKxXBycUGABj2xQYDGPHFBgLNKxXByfXlh4eAJsBvceHxyfXlh4cmwG9GI04jXiNW4fHJ9cXV5eCDKjzK8BPWIF/wg835FF95xghPezwY6PXF1eXF1c13FdHBex4FIS3LGNUBKssR8NjNlRURGPzNlRURnP/NlRUR9v/NlRUR//8+LzwZOPwCA3ovV3svXxMZyTAwRlBT/zAwUE5UU/8wMExJTkVT/xYFB1dFTENPTUUgVE8WBQgtUkVBTFRJTUUtFgAJREVNTyBNQURFIEVTUEVDSUFMTFkWAQpGT1IgTENQJzIwMDAgUEFSVFn/FgAAR1JFRVRJTlg6ICAgICAgICAgICAWAAFEU0MsUEFOLFNBQixGQVRBTElUWRYAAkpFRkYgRlJPSFdFSU4sSUNBUlVTFgADRE9YLFFVQU5HLEFCWVNTICAgICAWAAQgICAgICAgICAgICAgICAgICAgIBYABUNSRURJVFM6ICAgICAgICAgICAgFgAGQUxMIEdGWCZDT0RFIEJZIEFHTyAWAAdIRUxJQ09QVEVSIDNEIE1PREVMIBYACENSRUFURUQgQlkgQlVTWSAgICAgFgAJICAgICAgICAgICAgICAgICAgICAWAApVU0VEIFNPRlRXQVJFOiAgICAgIBYAC1JHQkRTLE5PJENBU0gsRkFSICAgFgAMICAgICAgICAgICAgICAgICAgICAWAA1DT05UQUNUOiAgICAgICAgICAgIBYADkdPQlVaT1ZAWUFIT08uQ09NICAgFgAPSFRUUDovL1NQRUNDWS5EQS5SVSAWABAgICAgICAgICAgICAgICAgICAgIBYAEVNFRSBZT1UgT04gR0JERVYyMDAw/wAAAAAAAAAAAAAAAAAAAAAICBwUHBQ4KDgoMDBwUCAgKCh8VHxUKCgAAAAAAAAAABQUPip/QT4qfFT+gnxUKCgICDw0fkL8rP6Cfmr8hHhYJCR+Wn5SPCR4SPyU/LRISBgYPCR+Wjwkflr8tH5KNDQQEDgocFAgIAAAAAAAAAAABAQOChwUOCg4KDgoHBQICBAQOCgcFBwUHBQ4KHBQICAAABQUPio8NH5CPCx8VCgoAAAICBwUPDR+QjwsOCgQEAAAAAAAAAAAEBA4KHBQcFAAAAAAAAB8fP6CfHwAAAAAAAAAAAAAAAAwMHhIeEgwMAQEDgoeEjwkeEjwkOCgQEAYGDwkflr+qv6q/LR4SDAwGBg8JHxUPDQ4KHxs/oJ8fBwcPiJ+Wjw0eEj8vP6CfHwcHD4iflo8NE5K/LR4SDAwJCR+Wn5afFT8tP6CfGwQEBwcPiJ8XPyEfnr8tHhIMDAYGDwkeFj8pP66/LR4SDAwPDx+Qv66XFQ4KHBQcFAgIBwcPiJ+Wjwkflr8tPiIcHAcHD4iflr+sn5KfHT4iHBwAAAAAAgIHBQICBAQOCgQEAAACAgcFAgIEBA4KDgocFAAAAAAHBQ4KHBQcFA4KAAAAAAAADw8fkJ8fPyEeHgAAAAAAAA4KBwUHBQ4KHBQAAAYGDwkflr8tHhoEBA4KBAQHBw+In5a/rL8pPi4+IhwcBwcPiJ+Wv66/oL+uvy0SEg4OHxEflr8pP6a/LT4iHBwHBw+In5a5qbgoP6y/IxwcDAweEh8VH5a7qr+uvyEeHgcHD4ifFx8RHhY/Lz+gnx8HBw+Inxc/IT4uOCg4KBAQBwcPiJ+Wvy8/qL+uvyEeHgkJH5a/rr+gv66/LT8tEhIPDx+QjwsOChwUHhY/IR4eDw8fkI+Og4KXFT8tHhIMDAkJH5afFR+Qv66/LT8tEhIICBwUHBQ4KDkpP66fEQ4OCgofFR+Qv6q/rr8tPy0SEgkJH5a/pr+qv6y7qr8tEhIHBw+In5a7qruqvy0+IhwcBwcPiJ+Wv66/IT4uOCgQEAcHD4iflr+uv6q/LT+inZ2HBw+In5a/LT4iPy0/LRISBwcPiJ8XP6Cfnr8tPiIcHB8fP6CfGw4KHBQcFBwUCAgJCR+Wn5a7qruqvy0eEgwMERE7qruqnxUfFR4SHBQICAkJH5aflr+uv6q/KR8VCgoJCR+WnxUOCg8JH5a/LRISCQkflr8tPy0eEhwUHBQICA8PH5C/LT46Dwsflr8hHh4HBw+IjwsOChwUHhYfEQ4OEBA4KDwkHhIPCQeEg4KBAQ4OHxEPDQcFDgoeGj4iHBwGBg8JH5a7qpERAAAAAAAAAAAAAAAAAAAAAB8fP6CfHx81rdPfJJne5X1MAIvPEevyxkwAYAfyxkwAYAfyxkwAYAfyxkwAYAfyxkwAYAfyxkwAYAfyxkwAYAfyxkwAYAfyxnLEcsXlDABhMsRyxeUMAGEyxHLF5QwAYTLEcsXlDABhMsRyxeUMAGEyxHLF5QwAYTLEcsXlDABhMsRyxeUMAGEeRcvT/F5MAIvPIVvJrcBAAA+t7zLEbrLED6/vcsRu8sQPj+8P8sRuj/LEL0/yxG7P8sQeLHIeKHAebcgB3xiV31rX3jLH9L/HD5AlU97lW96lPUwAi88R6/LGTABgB/LGTABgB/LGTABgB/LGTABgB/LGTABgB/LGTABgB/LGTABgB/LGTABgB/LGcsRyxeVMAGFyxHLF5UwAYXLEcsXlTABhcsRyxeVMAGFyxHLF5UwAYXLEcsXlTABhcsRyxeVMAGFyxHLF5UwAYV5Fy9P8XkwAi88hGcuQMMxHMsf0pcdPkCUT3qUZ3uV9TACLzxHr8sZMAGAH8sZMAGAH8sZMAGAH8sZMAGAH8sZMAGAH8sZMAGAH8sZMAGAH8sZMAGAH8sZyxHLF5QwAYTLEcsXlDABhMsRyxeUMAGEyxHLF5QwAYTLEcsXlDABhMsRyxeUMAGEyxHLF5QwAYTLEcsXlDABhHkXL0/xeTACLzyFbyZAwzEcyx/SoRt91r9PfZNvepT1MAIvPEevyxkwAYAfyxkwAYAfyxkwAYAfyxkwAYAfyxkwAYAfyxkwAYAfyxkwAYAfyxkwAYAfyxnLEcsXlTABhcsRyxeVMAGFyxHLF5UwAYXLEcsXlTABhcsRyxeVMAGFyxHLF5UwAYXLEcsXlTABhcsRyxeVMAGFeRcvT/F5MAIvPIRnLr/DMRz//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////3q8MAVUZ3tdb3u90pdAfZNPepRfkTA+V3nLPy88g+CDPn+R5YdPbyYARCkpKQkBkVIJweV41kAXb3nWQB8fH+YPZ/CChGd55gcGB/YITwpP8INHLMl5S1+RV3nLPy88g+CDPneR5YdPbyYARCkpKQkBklsJweV41kAXb3nWQB8fH+YPZ/CChGd55gcGB/YITwpP8INHLMmVT3qUX5EwPld5yz8vPIPggz5/keWHT28mAEQpKSkJAR9BCcHleNZAF2951kAfHx/mD2fwgoRneeYHBgf2CE8KT/CDRyzJeUtfkVd5yz8vPIPggz53keWHT28mAEQpKSkJASBKCcHleNZAF2951kAfHx/mD2fwgoRneeYHBgf2CE8KT/CDRyzJfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkfrF3e8t4IAN6LCyAR8sJMAEkyX6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALH6xInvLeCAGessJMAEkgEcALMl+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASV+sXd7y3ggA3osLIBHywEwASXJfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsfrF3e8t4IAZ6ywEwASWARywsyf///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wHRe7o4A1pXewYHoE8K9XqgTwQK4JF6Hx8f5g9X8JNnTixGLXsfHx/mD1/wgoNne5LRxADB8JGiVy+mX3qhsyJ6L6ZfeqCzItF7ujgDWld7BgegTwr1eqBPBArgkXofHx/mD1fwk2dOLEYtex8fH+YPX/CCg2d7ktHEAMHwkaJXL6ZfeqGzInovpl96oLMi0Xu6OANaV3sGB6BPCvV6oE8ECuCReh8fH+YPV/CTZ04sRi17Hx8f5g9f8IKDZ3uS0cQAwfCRolcvpl96obMiei+mX3qgsyLRe7o4A1pXewYHoE8K9XqgTwQK4JF6Hx8f5g9X8JNnTixGLXsfHx/mD1/wgoNne5LRxADB8JGiVy+mX3qhsyJ6L6ZfeqCzItF7ujgDWld7BgegTwr1eqBPBArgkXofHx/mD1fwk2dOLEYtex8fH+YPX/CCg2d7ktHEAMHwkaJXL6ZfeqGzInovpl96oLMi0Xu6OANaV3sGB6BPCvV6oE8ECuCReh8fH+YPV/CTZ04sRi17Hx8f5g9f8IKDZ3uS0cQAwfCRolcvpl96obMiei+mX3qgsyLRe7o4A1pXewYHoE8K9XqgTwQK4JF6Hx8f5g9X8JNnTixGLXsfHx/mD1/wgoNne5LRxADB8JGiVy+mX3qhsyJ6L6ZfeqCzItF7ujgDWld7BgegTwr1eqBPBArgkXofHx/mD1fwk2dOLEYtex8fH+YPX/CCg2d7ktHEAMHwkaJXL6ZfeqGzInovpl96oLMi0Xu6OANaV3sGB6BPCvV6oE8ECuCReh8fH+YPV/CTZ04sRi17Hx8f5g9f8IKDZ3uS0cQAwfCRolcvpl96obMiei+mX3qgsyLRe7o4A1pXewYHoE8K9XqgTwQK4JF6Hx8f5g9X8JNnTixGLXsfHx/mD1/wgoNne5LRxADB8JGiVy+mX3qhsyJ6L6ZfeqCzItF7ujgDWld7BgegTwr1eqBPBArgkXofHx/mD1fwk2dOLEYtex8fH+YPX/CCg2d7ktHEAMHwkaJXL6ZfeqGzInovpl96oLMi0Xu6OANaV3sGB6BPCvV6oE8ECuCReh8fH+YPV/CTZ04sRi17Hx8f5g9f8IKDZ3uS0cQAwfCRolcvpl96obMiei+mX3qgsyLRe7o4A1pXewYHoE8K9XqgTwQK4JF6Hx8f5g9X8JNnTixGLXsfHx/mD1/wgoNne5LRxADB8JGiVy+mX3qhsyJ6L6ZfeqCzItF7ujgDWld7BgegTwr1eqBPBArgkXofHx/mD1fwk2dOLEYtex8fH+YPX/CCg2d7ktHEAMHwkaJXL6ZfeqGzInovpl96oLMi0Xu6OANaV3sGB6BPCvV6oE8ECuCReh8fH+YPV/CTZ04sRi17Hx8f5g9f8IKDZ3uS0cQAwfCRolcvpl96obMiei+mX3qgsyLRe7o4A1pXewYHoE8K9XqgTwQK4JF6Hx8f5g9X8JNnTixGLXsfHx/mD1/wgoNne5LRxADB8JGiVy+mX3qhsyJ6L6ZfeqCzItF7ujgDWld7BgegTwr1eqBPBArgkXofHx/mD1fwk2dOLEYtex8fH+YPX/CCg2d7ktHEAMHwkaJXL6ZfeqGzInovpl96oLMi0Xu6OANaV3sGB6BPCvV6oE8ECuCReh8fH+YPV/CTZ04sRi17Hx8f5g9f8IKDZ3uS0cQAwfCRolcvpl96obMiei+mX3qgsyLRe7o4A1pXewYHoE8K9XqgTwQK4JF6Hx8f5g9X8JNnTixGLXsfHx/mD1/wgoNne5LRxADB8JGiVy+mX3qhsyJ6L6ZfeqCzItF7ujgDWld7BgegTwr1eqBPBArgkXofHx/mD1fwk2dOLEYtex8fH+YPX/CCg2d7ktHEAMHwkaJXL6ZfeqGzInovpl96oLMi0Xu6OANaV3sGB6BPCvV6oE8ECuCReh8fH+YPV/CTZ04sRi17Hx8f5g9f8IKDZ3uS0cQAwfCRolcvpl96obMiei+mX3qgsyLRe7o4A1pXewYHoE8K9XqgTwQK4JF6Hx8f5g9X8JNnTixGLXsfHx/mD1/wgoNne5LRxADB8JGiVy+mX3qhsyJ6L6ZfeqCzItF7ujgDWld7BgegTwr1eqBPBArgkXofHx/mD1fwk2dOLEYtex8fH+YPX/CCg2d7ktHEAMHwkaJXL6ZfeqGzInovpl96oLMi0Xu6OANaV3sGB6BPCvV6oE8ECuCReh8fH+YPV/CTZ04sRi17Hx8f5g9f8IKDZ3uS0cQAwfCRolcvpl96obMiei+mX3qgsyLRe7o4A1pXewYHoE8K9XqgTwQK4JF6Hx8f5g9X8JNnTixGLXsfHx/mD1/wgoNne5LRxADB8JGiVy+mX3qhsyJ6L6ZfeqCzItF7ujgDWld7BgegTwr1eqBPBArgkXofHx/mD1fwk2dOLEYtex8fH+YPX/CCg2d7ktHEAMHwkaJXL6ZfeqGzInovpl96oLMi0Xu6OANaV3sGB6BPCvV6oE8ECuCReh8fH+YPV/CTZ04sRi17Hx8f5g9f8IKDZ3uS0cQAwfCRolcvpl96obMiei+mX3qgsyLRe7o4A1pXewYHoE8K9XqgTwQK4JF6Hx8f5g9X8JNnTixGLXsfHx/mD1/wgoNne5LRxADB8JGiVy+mX3qhsyJ6L6ZfeqCzItF7ujgDWld7BgegTwr1eqBPBArgkXofHx/mD1fwk2dOLEYtex8fH+YPX/CCg2d7ktHEAMHwkaJXL6ZfeqGzInovpl96oLMi0Xu6OANaV3sGB6BPCvV6oE8ECuCReh8fH+YPV/CTZ04sRi17Hx8f5g9f8IKDZ3uS0cQAwfCRolcvpl96obMiei+mX3qgsyLRe7o4A1pXewYHoE8K9XqgTwQK4JF6Hx8f5g9X8JNnTixGLXsfHx/mD1/wgoNne5LRxADB8JGiVy+mX3qhsyJ6L6ZfeqCzItF7ujgDWld7BgegTwr1eqBPBArgkXofHx/mD1fwk2dOLEYtex8fH+YPX/CCg2d7ktHEAMHwkaJXL6ZfeqGzInovpl96oLMi0Xu6OANaV3sGB6BPCvV6oE8ECuCReh8fH+YPV/CTZ04sRi17Hx8f5g9f8IKDZ3uS0cQAwfCRolcvpl96obMiei+mX3qgsyLRe7o4A1pXewYHoE8K9XqgTwQK4JF6Hx8f5g9X8JNnTixGLXsfHx/mD1/wgoNne5LRxADB8JGiVy+mX3qhsyJ6L6ZfeqCzItF7ujgDWld7BgegTwr1eqBPBArgkXofHx/mD1fwk2dOLEYtex8fH+YPX/CCg2d7ktHEAMHwkaJXL6ZfeqGzInovpl96oLMi0Xu6OANaV3sGB6BPCvV6oE8ECuCReh8fH+YPV/CTZ04sRi17Hx8f5g9f8IKDZ3uS0cQAwfCRolcvpl96obMiei+mX3qgsyLRe7o4A1pXewYHoE8K9XqgTwQK4JF6Hx8f5g9X8JNnTixGLXsfHx/mD1/wgoNne5LRxADB8JGiVy+mX3qhsyJ6L6ZfeqCzItF7ujgDWld7BgegTwr1eqBPBArgkXofHx/mD1fwk2dOLEYtex8fH+YPX/CCg2d7ktHEAMHwkaJXL6ZfeqGzInovpl96oLMi0Xu6OANaV3sGB6BPCvV6oE8ECuCReh8fH+YPV/CTZ04sRi17Hx8f5g9f8IKDZ3uS0cQAwfCRolcvpl96obMiei+mX3qgsyLRe7o4A1pXewYHoE8K9XqgTwQK4JF6Hx8f5g9X8JNnTixGLXsfHx/mD1/wgoNne5LRxADB8JGiVy+mX3qhsyJ6L6ZfeqCzItF7ujgDWld7BgegTwr1eqBPBArgkXofHx/mD1fwk2dOLEYtex8fH+YPX/CCg2d7ktHEAMHwkaJXL6ZfeqGzInovpl96oLMi0Xu6OANaV3sGB6BPCvV6oE8ECuCReh8fH+YPV/CTZ04sRi17Hx8f5g9f8IKDZ3uS0cQAwfCRolcvpl96obMiei+mX3qgsyLRe7o4A1pXewYHoE8K9XqgTwQK4JF6Hx8f5g9X8JNnTixGLXsfHx/mD1/wgoNne5LRxADB8JGiVy+mX3qhsyJ6L6ZfeqCzItF7ujgDWld7BgegTwr1eqBPBArgkXofHx/mD1fwk2dOLEYtex8fH+YPX/CCg2d7ktHEAMHwkaJXL6ZfeqGzInovpl96oLMi0Xu6OANaV3sGB6BPCvV6oE8ECuCReh8fH+YPV/CTZ04sRi17Hx8f5g9f8IKDZ3uS0cQAwfCRolcvpl96obMiei+mX3qgsyLRe7o4A1pXewYHoE8K9XqgTwQK4JF6Hx8f5g9X8JNnTixGLXsfHx/mD1/wgoNne5LRxADB8JGiVy+mX3qhsyJ6L6ZfeqCzItF7ujgDWld7BgegTwr1eqBPBArgkXofHx/mD1fwk2dOLEYtex8fH+YPX/CCg2d7ktHEAMHwkaJXL6ZfeqGzInovpl96oLMi0Xu6OANaV3sGB6BPCvV6oE8ECuCReh8fH+YPV/CTZ04sRi17Hx8f5g9f8IKDZ3uS0cQAwfCRolcvpl96obMiei+mX3qgsyLRe7o4A1pXewYHoE8K9XqgTwQK4JF6Hx8f5g9X8JNnTixGLXsfHx/mD1/wgoNne5LRxADB8JGiVy+mX3qhsyJ6L6ZfeqCzItF7ujgDWld7BgegTwr1eqBPBArgkXofHx/mD1fwk2dOLEYtex8fH+YPX/CCg2d7ktHEAMHwkaJXL6ZfeqGzInovpl96oLMi0Xu6OANaV3sGB6BPCvV6oE8ECuCReh8fH+YPV/CTZ04sRi17Hx8f5g9f8IKDZ3uS0cQAwfCRolcvpl96obMiei+mX3qgsyLRe7o4A1pXewYHoE8K9XqgTwQK4JF6Hx8f5g9X8JNnTixGLXsfHx/mD1/wgoNne5LRxADB8JGiVy+mX3qhsyJ6L6ZfeqCzItF7ujgDWld7BgegTwr1eqBPBArgkXofHx/mD1fwk2dOLEYtex8fH+YPX/CCg2d7ktHEAMHwkaJXL6ZfeqGzInovpl96oLMi0Xu6OANaV3sGB6BPCvV6oE8ECuCReh8fH+YPV/CTZ04sRi17Hx8f5g9f8IKDZ3uS0cQAwfCRolcvpl96obMiei+mX3qgsyLRe7o4A1pXewYHoE8K9XqgTwQK4JF6Hx8f5g9X8JNnTixGLXsfHx/mD1/wgoNne5LRxADB8JGiVy+mX3qhsyJ6L6ZfeqCzItF7ujgDWld7BgegTwr1eqBPBArgkXofHx/mD1fwk2dOLEYtex8fH+YPX/CCg2d7ktHEAMHwkaJXL6ZfeqGzInovpl96oLMi0Xu6OANaV3sGB6BPCvV6oE8ECuCReh8fH+YPV/CTZ04sRi17Hx8f5g9f8IKDZ3uS0cQAwfCRolcvpl96obMiei+mX3qgsyLRe7o4A1pXewYHoE8K9XqgTwQK4JF6Hx8f5g9X8JNnTixGLXsfHx/mD1/wgoNne5LRxADB8JGiVy+mX3qhsyJ6L6ZfeqCzItF7ujgDWld7BgegTwr1eqBPBArgkXofHx/mD1fwk2dOLEYtex8fH+YPX/CCg2d7ktHEAMHwkaJXL6ZfeqGzInovpl96oLMi0Xu6OANaV3sGB6BPCvV6oE8ECuCReh8fH+YPV/CTZ04sRi17Hx8f5g9f8IKDZ3uS0cQAwfCRolcvpl96obMiei+mX3qgsyLRe7o4A1pXewYHoE8K9XqgTwQK4JF6Hx8f5g9X8JNnTixGLXsfHx/mD1/wgoNne5LRxADB8JGiVy+mX3qhsyJ6L6ZfeqCzItF7ujgDWld7BgegTwr1eqBPBArgkXofHx/mD1fwk2dOLEYtex8fH+YPX/CCg2d7ktHEAMHwkaJXL6ZfeqGzInovpl96oLMi0Xu6OANaV3sGB6BPCvV6oE8ECuCReh8fH+YPV/CTZ04sRi17Hx8f5g9f8IKDZ3uS0cQAwfCRolcvpl96obMiei+mX3qgsyLRe7o4A1pXewYHoE8K9XqgTwQK4JF6Hx8f5g9X8JNnTixGLXsfHx/mD1/wgoNne5LRxADB8JGiVy+mX3qhsyJ6L6ZfeqCzItF7ujgDWld7BgegTwr1eqBPBArgkXofHx/mD1fwk2dOLEYtex8fH+YPX/CCg2d7ktHEAMHwkaJXL6ZfeqGzInovpl96oLMi0Xu6OANaV3sGB6BPCvV6oE8ECuCReh8fH+YPV/CTZ04sRi17Hx8f5g9f8IKDZ3uS0cQAwfCRolcvpl96obMiei+mX3qgsyLRe7o4A1pXewYHoE8K9XqgTwQK4JF6Hx8f5g9X8JNnTixGLXsfHx/mD1/wgoNne5LRxADB8JGiVy+mX3qhsyJ6L6ZfeqCzItF7ujgDWld7BgegTwr1eqBPBArgkXofHx/mD1fwk2dOLEYtex8fH+YPX/CCg2d7ktHEAMHwkaJXL6ZfeqGzInovpl96oLMi0Xu6OANaV3sGB6BPCvV6oE8ECuCReh8fH+YPV/CTZ04sRi17Hx8f5g9f8IKDZ3uS0cQAwfCRolcvpl96obMiei+mX3qgsyLRe7o4A1pXewYHoE8K9XqgTwQK4JF6Hx8f5g9X8JNnTixGLXsfHx/mD1/wgoNne5LRxADB8JGiVy+mX3qhsyJ6L6ZfeqCzItF7ujgDWld7BgegTwr1eqBPBArgkXofHx/mD1fwk2dOLEYtex8fH+YPX/CCg2d7ktHEAMHwkaJXL6ZfeqGzInovpl96oLMi0Xu6OANaV3sGB6BPCvV6oE8ECuCReh8fH+YPV/CTZ04sRi17Hx8f5g9f8IKDZ3uS0cQAwfCRolcvpl96obMiei+mX3qgsyLRe7o4A1pXewYHoE8K9XqgTwQK4JF6Hx8f5g9X8JNnTixGLXsfHx/mD1/wgoNne5LRxADB8JGiVy+mX3qhsyJ6L6ZfeqCzItF7ujgDWld7BgegTwr1eqBPBArgkXofHx/mD1fwk2dOLEYtex8fH+YPX/CCg2d7ktHEAMHwkaJXL6ZfeqGzInovpl96oLMi0Xu6OANaV3sGB6BPCvV6oE8ECuCReh8fH+YPV/CTZ04sRi17Hx8f5g9f8IKDZ3uS0cQAwfCRolcvpl96obMiei+mX3qgsyLRe7o4A1pXewYHoE8K9XqgTwQK4JF6Hx8f5g9X8JNnTixGLXsfHx/mD1/wgoNne5LRxADB8JGiVy+mX3qhsyJ6L6ZfeqCzItF7ujgDWld7BgegTwr1eqBPBArgkXofHx/mD1fwk2dOLEYtex8fH+YPX/CCg2d7ktHEAMHwkaJXL6ZfeqGzInovpl96oLMi0Xu6OANaV3sGB6BPCvV6oE8ECuCReh8fH+YPV/CTZ04sRi17Hx8f5g9f8IKDZ3uS0cQAwfCRolcvpl96obMiei+mX3qgsyLRe7o4A1pXewYHoE8K9XqgTwQK4JF6Hx8f5g9X8JNnTixGLXsfHx/mD1/wgoNne5LRxADB8JGiVy+mX3qhsyJ6L6ZfeqCzItF7ujgDWld7BgegTwr1eqBPBArgkXofHx/mD1fwk2dOLEYtex8fH+YPX/CCg2d7ktHEAMHwkaJXL6ZfeqGzInovpl96oLMi0Xu6OANaV3sGB6BPCvV6oE8ECuCReh8fH+YPV/CTZ04sRi17Hx8f5g9f8IKDZ3uS0cQAwfCRolcvpl96obMiei+mX3qgsyLRe7o4A1pXewYHoE8K9XqgTwQK4JF6Hx8f5g9X8JNnTixGLXsfHx/mD1/wgoNne5LRxADB8JGiVy+mX3qhsyJ6L6ZfeqCzItF7ujgDWld7BgegTwr1eqBPBArgkXofHx/mD1fwk2dOLEYtex8fH+YPX/CCg2d7ktHEAMHwkaJXL6ZfeqGzInovpl96oLMi0Xu6OANaV3sGB6BPCvV6oE8ECuCReh8fH+YPV/CTZ04sRi17Hx8f5g9f8IKDZ3uS0cQAwfCRolcvpl96obMiei+mX3qgsyLRe7o4A1pXewYHoE8K9XqgTwQK4JF6Hx8f5g9X8JNnTixGLXsfHx/mD1/wgoNne5LRxADB8JGiVy+mX3qhsyJ6L6ZfeqCzItF7ujgDWld7BgegTwr1eqBPBArgkXofHx/mD1fwk2dOLEYtex8fH+YPX/CCg2d7ktHEAMHwkaJXL6ZfeqGzInovpl96oLMi0Xu6OANaV3sGB6BPCvV6oE8ECuCReh8fH+YPV/CTZ04sRi17Hx8f5g9f8IKDZ3uS0cQAwfCRolcvpl96obMiei+mX3qgsyLRe7o4A1pXewYHoE8K9XqgTwQK4JF6Hx8f5g9X8JNnTixGLXsfHx/mD1/wgoNne5LRxADB8JGiVy+mX3qhsyJ6L6ZfeqCzItF7ujgDWld7BgegTwr1eqBPBArgkXofHx/mD1fwk2dOLEYtex8fH+YPX/CCg2d7ktHEAMHwkaJXL6ZfeqGzInovpl96oLMi0Xu6OANaV3sGB6BPCvV6oE8ECuCReh8fH+YPV/CTZ04sRi17Hx8f5g9f8IKDZ3uS0cQAwfCRolcvpl96obMiei+mX3qgsyLRe7o4A1pXewYHoE8K9XqgTwQK4JF6Hx8f5g9X8JNnTixGLXsfHx/mD1/wgoNne5LRxADB8JGiVy+mX3qhsyJ6L6ZfeqCzItF7ujgDWld7BgegTwr1eqBPBArgkXofHx/mD1fwk2dOLEYtex8fH+YPX/CCg2d7ktHEAMHwkaJXL6ZfeqGzInovpl96oLMi0Xu6OANaV3sGB6BPCvV6oE8ECuCReh8fH+YPV/CTZ04sRi17Hx8f5g9f8IKDZ3uS0cQAwfCRolcvpl96obMiei+mX3qgsyLRe7o4A1pXewYHoE8K9XqgTwQK4JF6Hx8f5g9X8JNnTixGLXsfHx/mD1/wgoNne5LRxADB8JGiVy+mX3qhsyJ6L6ZfeqCzItF7ujgDWld7BgegTwr1eqBPBArgkXofHx/mD1fwk2dOLEYtex8fH+YPX/CCg2d7ktHEAMHwkaJXL6ZfeqGzInovpl96oLMi0Xu6OANaV3sGB6BPCvV6oE8ECuCReh8fH+YPV/CTZ04sRi17Hx8f5g9f8IKDZ3uS0cQAwfCRolcvpl96obMiei+mX3qgsyLRe7o4A1pXewYHoE8K9XqgTwQK4JF6Hx8f5g9X8JNnTixGLXsfHx/mD1/wgoNne5LRxADB8JGiVy+mX3qhsyJ6L6ZfeqCzItF7ujgDWld7BgegTwr1eqBPBArgkXofHx/mD1fwk2dOLEYtex8fH+YPX/CCg2d7ktHEAMHwkaJXL6ZfeqGzInovpl96oLMi0Xu6OANaV3sGB6BPCvV6oE8ECuCReh8fH+YPV/CTZ04sRi17Hx8f5g9f8IKDZ3uS0cQAwfCRolcvpl96obMiei+mX3qgsyLRe7o4A1pXewYHoE8K9XqgTwQK4JF6Hx8f5g9X8JNnTixGLXsfHx/mD1/wgoNne5LRxADB8JGiVy+mX3qhsyJ6L6ZfeqCzItF7ujgDWld7BgegTwr1eqBPBArgkXofHx/mD1fwk2dOLEYtex8fH+YPX/CCg2d7ktHEAMHwkaJXL6ZfeqGzInovpl96oLMi0Xu6OANaV3sGB6BPCvV6oE8ECuCReh8fH+YPV/CTZ04sRi17Hx8f5g9f8IKDZ3uS0cQAwfCRolcvpl96obMiei+mX3qgsyLRe7o4A1pXewYHoE8K9XqgTwQK4JF6Hx8f5g9X8JNnTixGLXsfHx/mD1/wgoNne5LRxADB8JGiVy+mX3qhsyJ6L6ZfeqCzItF7ujgDWld7BgegTwr1eqBPBArgkXofHx/mD1fwk2dOLEYtex8fH+YPX/CCg2d7ktHEAMHwkaJXL6ZfeqGzInovpl96oLMi0Xu6OANaV3sGB6BPCvV6oE8ECuCReh8fH+YPV/CTZ04sRi17Hx8f5g9f8IKDZ3uS0cQAwfCRolcvpl96obMiei+mX3qgsyLRe7o4A1pXewYHoE8K9XqgTwQK4JF6Hx8f5g9X8JNnTixGLXsfHx/mD1/wgoNne5LRxADB8JGiVy+mX3qhsyJ6L6ZfeqCzItF7ujgDWld7BgegTwr1eqBPBArgkXofHx/mD1fwk2dOLEYtex8fH+YPX/CCg2d7ktHEAMHwkaJXL6ZfeqGzInovpl96oLMi0Xu6OANaV3sGB6BPCvV6oE8ECuCReh8fH+YPV/CTZ04sRi17Hx8f5g9f8IKDZ3uS0cQAwfCRolcvpl96obMiei+mX3qgsyLRe7o4A1pXewYHoE8K9XqgTwQK4JF6Hx8f5g9X8JNnTixGLXsfHx/mD1/wgoNne5LRxADB8JGiVy+mX3qhsyJ6L6ZfeqCzItF7ujgDWld7BgegTwr1eqBPBArgkXofHx/mD1fwk2dOLEYtex8fH+YPX/CCg2d7ktHEAMHwkaJXL6ZfeqGzInovpl96oLMi0Xu6OANaV3sGB6BPCvV6oE8ECuCReh8fH+YPV/CTZ04sRi17Hx8f5g9f8IKDZ3uS0cQAwfCRolcvpl96obMiei+mX3qgsyLRe7o4A1pXewYHoE8K9XqgTwQK4JF6Hx8f5g9X8JNnTixGLXsfHx/mD1/wgoNne5LRxADB8JGiVy+mX3qhsyJ6L6ZfeqCzItF7ujgDWld7BgegTwr1eqBPBArgkXofHx/mD1fwk2dOLEYtex8fH+YPX/CCg2d7ktHEAMHwkaJXL6ZfeqGzInovpl96oLMi0Xu6OANaV3sGB6BPCvV6oE8ECuCReh8fH+YPV/CTZ04sRi17Hx8f5g9f8IKDZ3uS0cQAwfCRolcvpl96obMiei+mX3qgsyLRe7o4A1pXewYHoE8K9XqgTwQK4JF6Hx8f5g9X8JNnTixGLXsfHx/mD1/wgoNne5LRxADB8JGiVy+mX3qhsyJ6L6ZfeqCzItF7ujgDWld7BgegTwr1eqBPBArgkXofHx/mD1fwk2dOLEYtex8fH+YPX/CCg2d7ktHEAMHwkaJXL6ZfeqGzInovpl96oLMi0Xu6OANaV3sGB6BPCvV6oE8ECuCReh8fH+YPV/CTZ04sRi17Hx8f5g9f8IKDZ3uS0cQAwfCRolcvpl96obMiei+mX3qgsyLRe7o4A1pXewYHoE8K9XqgTwQK4JF6Hx8f5g9X8JNnTixGLXsfHx/mD1/wgoNne5LRxADB8JGiVy+mX3qhsyJ6L6ZfeqCzItF7ujgDWld7BgegTwr1eqBPBArgkXofHx/mD1fwk2dOLEYtex8fH+YPX/CCg2d7ktHEAMHwkaJXL6ZfeqGzInovpl96oLMi0Xu6OANaV3sGB6BPCvV6oE8ECuCReh8fH+YPV/CTZ04sRi17Hx8f5g9f8IKDZ3uS0cQAwfCRolcvpl96obMiei+mX3qgsyIxDsrh+eEWwxgNIf3Er+oLyuoMyiwsLPCPPcjgj14sGrcqKPDGeeCT+g3Ktygm+gvKPP4DIAI+AeoLyiAH+gzKPOoMyvoMyl8WyvCT1nkSe8bH4JMqTypHKuUmxl+Hh4M8PG8qX1Z5h4eBPDxveE4sh4eARjw8bypmb3y6OAViV31rX3y4OAVgR31pT3q4OAVQR3tZT3iU4JR8h+CV5dXFr+CSzUpifeCS0eHVzUpi0eE+AeCSzUpi8JRfPniTZy5Hr8sdMAGEH8sdMAGEH8sdMAGEH8sdMAGEH8sdMAGEH8sdMAGEH8sdMAGEH8sdMAGEH8sdxkBnCA7KMQDC5fCVb8l7vTBVfZNPepRfkTAkV3nLPy88Rz5/kU3Fh09vJgBEKSkJAfdiCcHlJsLwkm94BoDJeUtfkVd5yz8vPEc+d5FNxYdPbyYARCkpCQH4ZwnB5SbC8JJveAaAyZVPepRfkTAkV3nLPy88Rz5/kU3Fh09vJgBEKSkJAalsCcHlJsLwkm94BoDJeUtfkVd5yz8vPEc+d5FNxYdPbyYARCkpCQGqcQnB5SbC8JJveAaAyYO4MAWTgnEsLA2DuDAFk4JxLCwNg7gwBZOCcSwsDYO4MAWTgnEsLA2DuDAFk4JxLCwNg7gwBZOCcSwsDYO4MAWTgnEsLA2DuDAFk4JxLCwNg7gwBZOCcSwsDYO4MAWTgnEsLA2DuDAFk4JxLCwNg7gwBZOCcSwsDYO4MAWTgnEsLA2DuDAFk4JxLCwNg7gwBZOCcSwsDYO4MAWTgnEsLA2DuDAFk4JxLCwNg7gwBZOCcSwsDYO4MAWTgnEsLA2DuDAFk4JxLCwNg7gwBZOCcSwsDYO4MAWTgnEsLA2DuDAFk4JxLCwNg7gwBZOCcSwsDYO4MAWTgnEsLA2DuDAFk4JxLCwNg7gwBZOCcSwsDYO4MAWTgnEsLA2DuDAFk4JxLCwNg7gwBZOCcSwsDYO4MAWTgnEsLA2DuDAFk4JxLCwNg7gwBZOCcSwsDYO4MAWTgnEsLA2DuDAFk4JxLCwNg7gwBZOCcSwsDYO4MAWTgnEsLA2DuDAFk4JxLCwNg7gwBZOCcSwsDYO4MAWTgnEsLA2DuDAFk4JxLCwNg7gwBZOCcSwsDYO4MAWTgnEsLA2DuDAFk4JxLCwNg7gwBZOCcSwsDYO4MAWTgnEsLA2DuDAFk4JxLCwNg7gwBZOCcSwsDYO4MAWTgnEsLA2DuDAFk4JxLCwNg7gwBZOCcSwsDYO4MAWTgnEsLA2DuDAFk4JxLCwNg7gwBZOCcSwsDYO4MAWTgnEsLA2DuDAFk4JxLCwNg7gwBZOCcSwsDYO4MAWTgnEsLA2DuDAFk4JxLCwNg7gwBZOCcSwsDYO4MAWTgnEsLA2DuDAFk4JxLCwNg7gwBZOCcSwsDYO4MAWTgnEsLA2DuDAFk4JxLCwNg7gwBZOCcSwsDYO4MAWTgnEsLA2DuDAFk4JxLCwNg7gwBZOCcSwsDYO4MAWTgnEsLA2DuDAFk4JxLCwNg7gwBZOCcSwsDYO4MAWTgnEsLA2DuDAFk4JxLCwNg7gwBZOCcSwsDYO4MAWTgnEsLA2DuDAFk4JxLCwNg7gwBZOCcSwsDYO4MAWTgnEsLA2DuDAFk4JxLCwNg7gwBZOCcSwsDYO4MAWTgnEsLA2DuDAFk4JxLCwNg7gwBZOCcSwsDYO4MAWTgnEsLA2DuDAFk4JxLCwNg7gwBZOCcSwsDYO4MAWTgnEsLA2DuDAFk4JxLCwNg7gwBZOCcSwsDYO4MAWTgnEsLA2DuDAFk4JxLCwNg7gwBZOCcSwsDYO4MAWTgnEsLA2DuDAFk4JxLCwNg7gwBZOCcSwsDYO4MAWTgnEsLA2DuDAFk4JxLCwNg7gwBZOCcSwsDYO4MAWTgnEsLA2DuDAFk4JxLCwNg7gwBZOCcSwsDYO4MAWTgnEsLA2DuDAFk4JxLCwNg7gwBZOCcSwsDYO4MAWTgnEsLA2DuDAFk4JxLCwNg7gwBZOCcSwsDYO4MAWTgnEsLA2DuDAFk4JxLCwNg7gwBZOCcSwsDYO4MAWTgnEsLA2DuDAFk4JxLCwNg7gwBZOCcSwsDYO4MAWTgnEsLA2DuDAFk4JxLCwNg7gwBZOCcSwsDYO4MAWTgnEsLA2DuDAFk4JxLCwNg7gwBZOCcSwsDYO4MAWTgnEsLA2DuDAFk4JxLCwNg7gwBZOCcSwsDYO4MAWTgnEsLA2DuDAFk4JxLCwNg7gwBZOCcSwsDYO4MAWTgnEsLA2DuDAFk4JxLCwNyXEsLIO4MAOTgg1xLCyDuDADk4INcSwsg7gwA5OCDXEsLIO4MAOTgg1xLCyDuDADk4INcSwsg7gwA5OCDXEsLIO4MAOTgg1xLCyDuDADk4INcSwsg7gwA5OCDXEsLIO4MAOTgg1xLCyDuDADk4INcSwsg7gwA5OCDXEsLIO4MAOTgg1xLCyDuDADk4INcSwsg7gwA5OCDXEsLIO4MAOTgg1xLCyDuDADk4INcSwsg7gwA5OCDXEsLIO4MAOTgg1xLCyDuDADk4INcSwsg7gwA5OCDXEsLIO4MAOTgg1xLCyDuDADk4INcSwsg7gwA5OCDXEsLIO4MAOTgg1xLCyDuDADk4INcSwsg7gwA5OCDXEsLIO4MAOTgg1xLCyDuDADk4INcSwsg7gwA5OCDXEsLIO4MAOTgg1xLCyDuDADk4INcSwsg7gwA5OCDXEsLIO4MAOTgg1xLCyDuDADk4INcSwsg7gwA5OCDXEsLIO4MAOTgg1xLCyDuDADk4INcSwsg7gwA5OCDXEsLIO4MAOTgg1xLCyDuDADk4INcSwsg7gwA5OCDXEsLIO4MAOTgg1xLCyDuDADk4INcSwsg7gwA5OCDXEsLIO4MAOTgg1xLCyDuDADk4INcSwsg7gwA5OCDXEsLIO4MAOTgg1xLCyDuDADk4INcSwsg7gwA5OCDXEsLIO4MAOTgg1xLCyDuDADk4INcSwsg7gwA5OCDXEsLIO4MAOTgg1xLCyDuDADk4INcSwsg7gwA5OCDXEsLIO4MAOTgg1xLCyDuDADk4INcSwsg7gwA5OCDXEsLIO4MAOTgg1xLCyDuDADk4INcSwsg7gwA5OCDXEsLIO4MAOTgg1xLCyDuDADk4INcSwsg7gwA5OCDXEsLIO4MAOTgg1xLCyDuDADk4INcSwsg7gwA5OCDXEsLIO4MAOTgg1xLCyDuDADk4INcSwsg7gwA5OCDXEsLIO4MAOTgg1xLCyDuDADk4INcSwsg7gwA5OCDXEsLIO4MAOTgg1xLCyDuDADk4INcSwsg7gwA5OCDXEsLIO4MAOTgg1xLCyDuDADk4INcSwsg7gwA5OCDXEsLIO4MAOTgg1xLCyDuDADk4INcSwsg7gwA5OCDXEsLIO4MAOTgg1xLCyDuDADk4INcSwsg7gwA5OCDXEsLIO4MAOTgg1xLCyDuDADk4INcSwsg7gwA5OCDXEsLIO4MAOTgg1xLCyDuDADk4INcSwsg7gwA5OCDXEsLIO4MAOTgg1xLCyDuDADk4INcSwsg7gwA5OCDXEsLIO4MAOTgg1xLCyDuDADk4INcSwsg7gwA5OCDXEsLIO4MAOTgg1xLCyDuDADk4INcSwsg7gwA5OCDXEsLIO4MAOTgg1xLCyDuDADk4INcSwsg7gwA5OCDXEsLIO4MAOTgg1xLCyDuDADk4INcSwsg7gwA5OCDXEsLIO4MAOTgg1xLCyDuDADk4INcSwsg7gwA5OCDXEsLIO4MAOTgg1xLCyDuDADk4INcSwsg7gwA5OCDXEsLIO4MAOTgg1xLCyDuDADk4INcSwsg7gwA5OCDXEsLIO4MAOTgg1xLCyDuDADk4INcSwsg7gwA5OCDcmDuDAFk4JxLCwMg7gwBZOCcSwsDIO4MAWTgnEsLAyDuDAFk4JxLCwMg7gwBZOCcSwsDIO4MAWTgnEsLAyDuDAFk4JxLCwMg7gwBZOCcSwsDIO4MAWTgnEsLAyDuDAFk4JxLCwMg7gwBZOCcSwsDIO4MAWTgnEsLAyDuDAFk4JxLCwMg7gwBZOCcSwsDIO4MAWTgnEsLAyDuDAFk4JxLCwMg7gwBZOCcSwsDIO4MAWTgnEsLAyDuDAFk4JxLCwMg7gwBZOCcSwsDIO4MAWTgnEsLAyDuDAFk4JxLCwMg7gwBZOCcSwsDIO4MAWTgnEsLAyDuDAFk4JxLCwMg7gwBZOCcSwsDIO4MAWTgnEsLAyDuDAFk4JxLCwMg7gwBZOCcSwsDIO4MAWTgnEsLAyDuDAFk4JxLCwMg7gwBZOCcSwsDIO4MAWTgnEsLAyDuDAFk4JxLCwMg7gwBZOCcSwsDIO4MAWTgnEsLAyDuDAFk4JxLCwMg7gwBZOCcSwsDIO4MAWTgnEsLAyDuDAFk4JxLCwMg7gwBZOCcSwsDIO4MAWTgnEsLAyDuDAFk4JxLCwMg7gwBZOCcSwsDIO4MAWTgnEsLAyDuDAFk4JxLCwMg7gwBZOCcSwsDIO4MAWTgnEsLAyDuDAFk4JxLCwMg7gwBZOCcSwsDIO4MAWTgnEsLAyDuDAFk4JxLCwMg7gwBZOCcSwsDIO4MAWTgnEsLAyDuDAFk4JxLCwMg7gwBZOCcSwsDIO4MAWTgnEsLAyDuDAFk4JxLCwMg7gwBZOCcSwsDIO4MAWTgnEsLAyDuDAFk4JxLCwMg7gwBZOCcSwsDIO4MAWTgnEsLAyDuDAFk4JxLCwMg7gwBZOCcSwsDIO4MAWTgnEsLAyDuDAFk4JxLCwMg7gwBZOCcSwsDIO4MAWTgnEsLAyDuDAFk4JxLCwMg7gwBZOCcSwsDIO4MAWTgnEsLAyDuDAFk4JxLCwMg7gwBZOCcSwsDIO4MAWTgnEsLAyDuDAFk4JxLCwMg7gwBZOCcSwsDIO4MAWTgnEsLAyDuDAFk4JxLCwMg7gwBZOCcSwsDIO4MAWTgnEsLAyDuDAFk4JxLCwMg7gwBZOCcSwsDIO4MAWTgnEsLAyDuDAFk4JxLCwMg7gwBZOCcSwsDIO4MAWTgnEsLAyDuDAFk4JxLCwMg7gwBZOCcSwsDIO4MAWTgnEsLAyDuDAFk4JxLCwMg7gwBZOCcSwsDIO4MAWTgnEsLAyDuDAFk4JxLCwMg7gwBZOCcSwsDIO4MAWTgnEsLAyDuDAFk4JxLCwMg7gwBZOCcSwsDIO4MAWTgnEsLAyDuDAFk4JxLCwMg7gwBZOCcSwsDIO4MAWTgnEsLAyDuDAFk4JxLCwMg7gwBZOCcSwsDIO4MAWTgnEsLAyDuDAFk4JxLCwMg7gwBZOCcSwsDIO4MAWTgnEsLAyDuDAFk4JxLCwMg7gwBZOCcSwsDIO4MAWTgnEsLAyDuDAFk4JxLCwMg7gwBZOCcSwsDIO4MAWTgnEsLAyDuDAFk4JxLCwMg7gwBZOCcSwsDIO4MAWTgnEsLAyDuDAFk4JxLCwMg7gwBZOCcSwsDIO4MAWTgnEsLAyDuDAFk4JxLCwMg7gwBZOCcSwsDIO4MAWTgnEsLAyDuDAFk4JxLCwMg7gwBZOCcSwsDIO4MAWTgnEsLAyDuDAFk4JxLCwMg7gwBZOCcSwsDMlxLCyDuDADk4IMcSwsg7gwA5OCDHEsLIO4MAOTggxxLCyDuDADk4IMcSwsg7gwA5OCDHEsLIO4MAOTggxxLCyDuDADk4IMcSwsg7gwA5OCDHEsLIO4MAOTggxxLCyDuDADk4IMcSwsg7gwA5OCDHEsLIO4MAOTggxxLCyDuDADk4IMcSwsg7gwA5OCDHEsLIO4MAOTggxxLCyDuDADk4IMcSwsg7gwA5OCDHEsLIO4MAOTggxxLCyDuDADk4IMcSwsg7gwA5OCDHEsLIO4MAOTggxxLCyDuDADk4IMcSwsg7gwA5OCDHEsLIO4MAOTggxxLCyDuDADk4IMcSwsg7gwA5OCDHEsLIO4MAOTggxxLCyDuDADk4IMcSwsg7gwA5OCDHEsLIO4MAOTggxxLCyDuDADk4IMcSwsg7gwA5OCDHEsLIO4MAOTggxxLCyDuDADk4IMcSwsg7gwA5OCDHEsLIO4MAOTggxxLCyDuDADk4IMcSwsg7gwA5OCDHEsLIO4MAOTggxxLCyDuDADk4IMcSwsg7gwA5OCDHEsLIO4MAOTggxxLCyDuDADk4IMcSwsg7gwA5OCDHEsLIO4MAOTggxxLCyDuDADk4IMcSwsg7gwA5OCDHEsLIO4MAOTggxxLCyDuDADk4IMcSwsg7gwA5OCDHEsLIO4MAOTggxxLCyDuDADk4IMcSwsg7gwA5OCDHEsLIO4MAOTggxxLCyDuDADk4IMcSwsg7gwA5OCDHEsLIO4MAOTggxxLCyDuDADk4IMcSwsg7gwA5OCDHEsLIO4MAOTggxxLCyDuDADk4IMcSwsg7gwA5OCDHEsLIO4MAOTggxxLCyDuDADk4IMcSwsg7gwA5OCDHEsLIO4MAOTggxxLCyDuDADk4IMcSwsg7gwA5OCDHEsLIO4MAOTggxxLCyDuDADk4IMcSwsg7gwA5OCDHEsLIO4MAOTggxxLCyDuDADk4IMcSwsg7gwA5OCDHEsLIO4MAOTggxxLCyDuDADk4IMcSwsg7gwA5OCDHEsLIO4MAOTggxxLCyDuDADk4IMcSwsg7gwA5OCDHEsLIO4MAOTggxxLCyDuDADk4IMcSwsg7gwA5OCDHEsLIO4MAOTggxxLCyDuDADk4IMcSwsg7gwA5OCDHEsLIO4MAOTggxxLCyDuDADk4IMcSwsg7gwA5OCDHEsLIO4MAOTggxxLCyDuDADk4IMcSwsg7gwA5OCDHEsLIO4MAOTggxxLCyDuDADk4IMcSwsg7gwA5OCDHEsLIO4MAOTggxxLCyDuDADk4IMcSwsg7gwA5OCDHEsLIO4MAOTggxxLCyDuDADk4IMcSwsg7gwA5OCDHEsLIO4MAOTggxxLCyDuDADk4IMcSwsg7gwA5OCDHEsLIO4MAOTggxxLCyDuDADk4IMcSwsg7gwA5OCDHEsLIO4MAOTggxxLCyDuDADk4IMcSwsg7gwA5OCDHEsLIO4MAOTggxxLCyDuDADk4IMcSwsg7gwA5OCDHEsLIO4MAOTggxxLCyDuDADk4IMcSwsg7gwA5OCDHEsLIO4MAOTggxxLCyDuDADk4IMcSwsg7gwA5OCDHEsLIO4MAOTggzJxg+Hh+oawXovpl96obMiei+mX3qgszIkeRgAInAtJCJwLSQicC0kInAtJCJwLSQicC0kInAtJCJwLSQicC0kInAtJCJwLSQicC0kInAtJCJwLSQW/8n///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+qqlVVqqpVVaqqVVWqqlVVqqpVVaqqVVWqqlVVqqpVVaqqVVWqqlVVqqpVVaqqVVWqqlVVqqpVVaqqVVWqqlVVqqpVVaqqVVWqqlVVqqpVVaqqVVWqqlVVqqpVVaqqVVWqqlVVqqpVVaqqVVWqqlVVqqpVVaqqVVWqqlVVqqpVVaqqVVWqqlVVqqpVVaqqVVWqqlVVqqpVVaqqVVWqqlVVqqpVVaqqVVWqqlVVqqpVVaqqVVWqqlVVqqpVVaqqVVWqqlVVqqpVVaqqVVWqqlVVqqpVVaqqVVWqqlVVqqpVVaqqVVWqqlVVqqpVVaqqVVWqqlVVqqpVVaqqVVWqqlVVACEzDDPAABIAEjPAMwwAIQAhMwwzwAASABIzwDMMACEAITMMM8AAEgASM8AzDAAhACEzDDPAABIAEjPAMwwAIQAhMwwzwAASABIzwDMMACEAITMMM8AAEgASM8AzDAAhACEzDDPAABIAEjPAMwwAIQAhMwwzwAASABIzwDMMACEAITMMM8AAEgASM8AzDAAhACEzDDPAABIAEjPAMwwAIQAhMwwzwAASABIzwDMMACEAITMMM8AAEgASM8AzDAAhACEzDDPAABIAEjPAMwwAIQAhMwwzwAASABIzwDMMACEAITMMM8AAEgASM8AzDAAhACEzDDPAABIAEjPAMwwAIQj8GH4y/WT7wO+B50CzINkI/Bh+Mv1k+8DvgedAsyDZCPwYfjL9ZPvA74HnQLMg2Qj8GH4y/WT7wO+B50CzINkI/Bh+Mv1k+8DvgedAsyDZCPwYfjL9ZPvA74HnQLMg2Qj8GH4y/WT7wO+B50CzINkI/Bh+Mv1k+8DvgedAsyDZCPwYfjL9ZPvA74HnQLMg2Qj8GH4y/WT7wO+B50CzINkI/Bh+Mv1k+8DvgedAsyDZCPwYfjL9ZPvA74HnQLMg2Qj8GH4y/WT7wO+B50CzINkI/Bh+Mv1k+8DvgedAsyDZCPwYfjL9ZPvA74HnQLMg2Qj8GH4y/WT7wO+B50CzINnMzMzMMzMzM8zMzMwzMzMzzMzMzDMzMzPMzMzMMzMzM8zMzMwzMzMzzMzMzDMzMzPMzMzMMzMzM8zMzMwzMzMzzMzMzDMzMzPMzMzMMzMzM8zMzMwzMzMzzMzMzDMzMzPMzMzMMzMzM8zMzMwzMzMzzMzMzDMzMzPMzMzMMzMzM8zMzMwzMzMzzMzMzDMzMzPMzMzMMzMzM8zMzMwzMzMzzMzMzDMzMzPMzMzMMzMzM8zMzMwzMzMzzMzMzDMzMzPMzMzMMzMzM8zMzMwzMzMzzMzMzDMzMzPMzMzMMzMzM8zMzMwzMzMzzMzMzDMzMzPMzMzMMzMzM8zMzMwzMzMzwMDAwAwMDAzAwMDADAwMDMDAwMAMDAwMwMDAwAwMDAzAwMDADAwMDMDAwMAMDAwMwMDAwAwMDAzAwMDADAwMDMDAwMAMDAwMwMDAwAwMDAzAwMDADAwMDMDAwMAMDAwMwMDAwAwMDAzAwMDADAwMDMDAwMAMDAwMwMDAwAwMDAzAwMDADAwMDMDAwMAMDAwMwMDAwAwMDAzAwMDADAwMDMDAwMAMDAwMwMDAwAwMDAzAwMDADAwMDMDAwMAMDAwMwMDAwAwMDAzAwMDADAwMDMDAwMAMDAwMwMDAwAwMDAzAwMDADAwMDMDAwMAMDAwMwMDAwAwMDAzAwMDADAwMDPHxAQEBAQEBHx8QEBAQEBDx8QEBAQEBAR8fEBAQEBAQ8fEBAQEBAQEfHxAQEBAQEPHxAQEBAQEBHx8QEBAQEBDx8QEBAQEBAR8fEBAQEBAQ8fEBAQEBAQEfHxAQEBAQEPHxAQEBAQEBHx8QEBAQEBDx8QEBAQEBAR8fEBAQEBAQ8fEBAQEBAQEfHxAQEBAQEPHxAQEBAQEBHx8QEBAQEBDx8QEBAQEBAR8fEBAQEBAQ8fEBAQEBAQEfHxAQEBAQEPHxAQEBAQEBHx8QEBAQEBDx8QEBAQEBAR8fEBAQEBAQ8fEBAQEBAQEfHxAQEBAQEPHxAQEBAQEBHx8QEBAQEBCqqlVVqqpVVaqqVVWqqlVVqqpVVaqqVVWqqlVVqqpVVaqqVVWqqlVVqqpVVaqqVVWqqlVVqqpVVaqqVVWqqlVVqqpVVaqqVVWqqlVVqqpVVaqqVVWqqlVVqqpVVaqqVVWqqlVVqqpVVaqqVVWqqlVVqqpVVaqqVVWqqlVVqqpVVaqqVVWqqlVVqqpVVaqqVVWqqlVVqqpVVaqqVVWqqlVVqqpVVaqqVVWqqlVVqqpVVaqqVVWqqlVVqqpVVaqqVVWqqlVVqqpVVaqqVVWqqlVVqqpVVaqqVVWqqlVVqqpVVaqqVVWqqlVVqqpVVaqqVVWqqlVVqqpVVaqqVVWqqlUC4XIscAl7InAJInAJInAJInAJInAJInAJInAJInAJInAJInAJInAJInAJInAJInAJInAJLCwly2XIJGjJycnJyeEicAlyLHAJeyJwCSJwCSJwCSJwCSJwCSJwCSJwCSJwCSJwCSJwCSJwCSJwCSJwCSJwCSwsJctlyCRoycnJycnhInAJInAJcixwCXsicAkicAkicAkicAkicAkicAkicAkicAkicAkicAkicAkicAkicAksLCXLZcgkaMnJycnJ4SJwCSJwCSJwCXIscAl7InAJInAJInAJInAJInAJInAJInAJInAJInAJInAJInAJInAJLCwly2XIJGjJycnJyeEicAkicAkicAkicAlyLHAJeyJwCSJwCSJwCSJwCSJwCSJwCSJwCSJwCSJwCSJwCSJwCSwsJctlyCRoycnJycnhInAJInAJInAJInAJInAJcixwCXsicAkicAkicAkicAkicAkicAkicAkicAkicAkicAksLCXLZcgkaMnJycnJ4SJwCSJwCSJwCSJwCSJwCSJwCXIscAl7InAJInAJInAJInAJInAJInAJInAJInAJInAJLCwly2XIJGjJycnJyeEicAkicAkicAkicAkicAkicAkicAlyLHAJeyJwCSJwCSJwCSJwCSJwCSJwCSJwCSJwCSwsJctlyCRoycnJycnhInAJInAJInAJInAJInAJInAJInAJInAJcixwCXsicAkicAkicAkicAkicAkicAkicAksLCXLZcgkaMnJycnJ4SJwCSJwCSJwCSJwCSJwCSJwCSJwCSJwCSJwCXIscAl7InAJInAJInAJInAJInAJInAJLCwly2XIJGjJycnJyeEicAkicAkicAkicAkicAkicAkicAkicAkicAkicAlyLHAJeyJwCSJwCSJwCSJwCSJwCSwsJctlyCRoycnJycnhInAJInAJInAJInAJInAJInAJInAJInAJInAJInAJInAJcixwCXsicAkicAkicAkicAksLCXLZcgkaMnJycnJ4SJwCSJwCSJwCSJwCSJwCSJwCSJwCSJwCSJwCSJwCSJwCSJwCXIscAl7InAJInAJInAJLCwly2XIJGjJycnJyeEicAkicAkicAkicAkicAkicAkicAkicAkicAkicAkicAkicAkicAlyLHAJeyJwCSJwCSwsJctlyCRoycnJycnhInAJInAJInAJInAJInAJInAJInAJInAJInAJInAJInAJInAJInAJInAJcixwCXsicAksLCXLZcgkaMnJycnJ4SJwCSJwCSJwCSJwCSJwCSJwCSJwCSJwCSJwCSJwCSJwCSJwCSJwCSJwCSJwCXIscAl7LCwly2XIJGjJycnJydE+t5LI4IXmB8RSRPCFHx8focjlzTJE4XkicCwicCwicCwicCwicCwicCwicCwicCzJ+ABUXWhHeZAfyx1nATNZCfCCMQCv/qAoAzEAvwH/AOlHPgeQVF1HDjOvyxkwAYAfyxkwAYAfyxkwAYAfyxkwAYAfyxkwAYAfyxkwAYAfyxkwAYAfyxkwAYAfyxlHIbRXCeViaz7/AQ8Ayfoay2/6G8uFZ/4UIAU+/y0YBtbsIAU8LOoby3zqGsvNr2AhlEbNyhDwpMagV/Cjxn9f1SGXRs3KEPCkxqBn8KPGf2/RzTEcKAsf2hhZH9oYWcPERny6OAViV31rX+XNmkbh1Xu90sxFe9ZA4Ih9k0884Il6lF/ghjzgij2RMGvgh3nLPy88g+CF8IIBDwBvVHzWQBfLN6GFZ3rmBxdvGAjwij3KAETgivCJX/CGV/CFGASCHSgLy38g+Ffwh4LghR3NYkUY2nvgifCIg1/l5gf2CG8mB1Z7aB8fHx/LHR/LHeYDxkBnrx7/6XnghpPgh3vLPy88geCF8IIBDwBvVHzWQBfLN6GFZ3rmBxdv8Ilf8IZX8IXLfyAHV/CHgh0YAYLghc1iRfCKPcoAROCKGN171kDgiHuVTzzgiXqUX+CGPOCKPZEwa+CHecs/LzyD4IXwggEPAG9UfNZAF8s3oYVneuYHF28YCPCKPcoAROCK8Ilf8IZX8IUYBIIdKAvLfyD4V/CHguCFHc0qRhjae+CJ8IiTX+XmB/YQbyYHVntoHx8fH8sdH8sd5gPGQGc+/1jpeeCGk+CHe8s/LzyB4IXwggEPAG9UfNZAF8s3oYVneuYHF2/wiV/whlfwhct/IAdX8IeCHRgBguCFzSpG8Io9ygBE4IoY3UYAALoAAHzWQMhPHx8f5h9HeeYHKAsE/gUwBvUhylblBT4PkCHJRoRn5fCCZ69vyfCCZ69vIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIsnxAQ8APcqEVz0odj0oOj0idwkidwkidwkidwkidwkidwkidwkidwkidwkidwkidwkidwkidwkidwkidwkidwksLCXLZSgCJGgidwkidwkidwkidwkidwkidwkidwkidwkidwkidwkidwkidwkidwkidwkidwkidwksLCXLZSgCJGgidwkidwkidwkidwkidwkidwkidwkidwkidwkidwkidwkidwkidwkidwkidwkidwksLCXLZSgCJGgidwkidwkidwkidwkidwkidwkidwkidwkidwkidwkidwkidwkidwkidwkidwkid8kicAkicAkicAkicAkicAkicAkicAkicAkicAkicAkicAkicAkicAkicAkicAkicAksLCUicAkicAkicAkicAkicAkicAkicAkicAkicAkicAkicAkicAkicAkicAkicAkicAksLCUicAkicAkicAkicAkicAkicAkicAkicAkicAkicAkicAkicAkicAkicAkicAkicAksLCUicAkicAkicAkicAkicAkicAkicAkicAkicAkicAkicAkicAkicAkicAkicAkicAksLCUicAkicAkicAkicAkicAkicAkicAkicAkicAkicAkicAkicAkicAkicAkicAkicAksLCUicAkicAkicAkicAkicAkicAkicAkicAkicAkicAkicAkicAkicAkicAkicAkicAksLCUicAkicAkicAkicAkicAkicAkicAkicAkicAkicAkicAkicAkicAkicAkicAkicAloyfgAVF3wgjEAr/6gKAMxAL8B/wDFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcVia/nJJgJ+4JovPOCYfcZAb37gl+Cbr+CZ4JzgneCePkDgn8n/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////Aw==';
+
+// End of realtime.js file.
diff --git a/js/src/octane/index.html b/js/src/octane/index.html
new file mode 100644
index 0000000000..77cbdfb468
--- /dev/null
+++ b/js/src/octane/index.html
@@ -0,0 +1,453 @@
+<!DOCTYPE html>
+<!-- Copyright 2013 the V8 project authors. Scroll to the end for full license -->
+<html lang="en">
+<head>
+<meta http-equiv="X-UA-Compatible" value="IE=edge"/>
+<meta charset="utf-8"/>
+<title>Octane 2.0 JavaScript Benchmark</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="Content-Script-Type" content="text/javascript">
+<meta name="description"
+ content="Octane 2.0 JavaScript Benchmark - the Javascript benchmark for the modern web">
+<meta name="author" content="Octane Team Google">
+<!-- twitter bootstrap code -->
+<script src="js/jquery.js"></script>
+<script src="js/bootstrap-transition.js"></script>
+<script src="js/bootstrap-collapse.js"></script>
+<!-- Octane benchmark code -->
+<script type="text/javascript" src="base.js"></script>
+<script type="text/javascript" src="richards.js"></script>
+<script type="text/javascript" src="deltablue.js"></script>
+<script type="text/javascript" src="crypto.js"></script>
+<script type="text/javascript" src="raytrace.js"></script>
+<script type="text/javascript" src="earley-boyer.js"></script>
+<script type="text/javascript" src="regexp.js"></script>
+<script type="text/javascript" src="splay.js"></script>
+<script type="text/javascript" src="navier-stokes.js"></script>
+<script type="text/javascript" src="pdfjs.js"></script>
+<script type="text/javascript" src="mandreel.js"></script>
+<script type="text/javascript" src="gbemu-part1.js"></script>
+<script type="text/javascript" src="gbemu-part2.js"></script>
+<script type="text/javascript" src="code-load.js"></script>
+<script type="text/javascript" src="box2d.js"></script>
+<script type="text/javascript" src="zlib.js"></script>
+<script type="text/javascript" src="zlib-data.js"></script>
+<script type="text/javascript" src="typescript.js"></script>
+<script type="text/javascript" src="typescript-input.js"></script>
+<script type="text/javascript" src="typescript-compiler.js"></script>
+
+<script type="text/javascript">
+ var completed = 0;
+ var benchmarks = BenchmarkSuite.CountBenchmarks();
+ var success = true;
+ var latencyBenchmarks = ["Splay", "Mandreel"];
+ var skipBenchmarks =
+ typeof skipBenchmarks === "undefined" ? [] : skipBenchmarks;
+
+ function ShowBox(name) {
+ var box = document.getElementById("Box-" + name);
+ box.style.visibility = 'visible';
+ var bar = document.getElementById("progress-bar").style.width = ""
+ + ((++completed) / benchmarks) * 100 + "%";
+ latencyBenchmarks.forEach(function(entry) {
+ if (name.valueOf() === entry.valueOf()) {
+ var box1 = document.getElementById("Box-" + name + "Latency");
+ box1.style.visibility = 'visible';
+ }
+ });
+ }
+
+ function AddResult(name, result) {
+ console.log(name + ': ' + result);
+ var box = document.getElementById("Result-" + name);
+ box.innerHTML = result;
+ }
+
+ function AddError(name, error) {
+ console.log(name + ": " + error.message);
+ if (error == "TypedArrayUnsupported") {
+ AddResult(name, '<b>Unsupported<\/b>');
+ } else if (error == "PerformanceNowUnsupported") {
+ AddResult(name, '<b>Timer error<\/b>');
+ } else {
+ AddResult(name, '<b>Error</b>');
+ }
+ success = false;
+ }
+
+ function AddScore(score) {
+ var status = document.getElementById("main-banner");
+ if (success) {
+ status.innerHTML = "Octane Score: " + score;
+ } else {
+ status.innerHTML = "Octane Score (incomplete): " + score;
+ }
+ document.getElementById("progress-bar-container").style.visibility = 'hidden';
+ document.getElementById("bottom-text").style.visibility = 'visible';
+ document.getElementById("inside-anchor").removeChild(document.getElementById("bar-appendix"));
+ document.getElementById("alertbox").style.visibility = 'hidden';
+ }
+
+ function Run() {
+ document.getElementById("main-banner").innerHTML = "Running Octane...";
+ // append the progress bar elements..
+ document.getElementById("bar-appendix").innerHTML = "<br/><div class=\"progress progress-striped\" id=\"progress-bar-container\" style=\"visibility:hidden\"><div class=\"bar\"style=\"width: 0%;\" id=\"progress-bar\"></div></div>";
+ var anchor = document.getElementById("run-octane");
+ var parent = document.getElementById("main-container");
+ parent.appendChild(document.getElementById("inside-anchor"));
+ parent.removeChild(anchor);
+
+ document.getElementById("startup-text").innerHTML="";
+
+ document.getElementById("progress-bar-container").style.visibility = 'visible';
+
+ BenchmarkSuite.RunSuites({
+ NotifyStart : ShowBox,
+ NotifyError : AddError,
+ NotifyResult : AddResult,
+ NotifyScore : AddScore
+ },
+ skipBenchmarks);
+ }
+
+ function CheckCompatibility() {
+ // If no Typed Arrays support, show warning label.
+ var hasTypedArrays = typeof Uint8Array != "undefined"
+ && typeof Float64Array != "undefined"
+ && typeof (new Uint8Array(0)).subarray != "undefined";
+
+ if (!hasTypedArrays) {
+ console.log("Typed Arrays not supported");
+ document.getElementById("alertbox").style.display="block";
+ }
+ if (window.document.URL.indexOf('skip_zlib=1') >= 0)
+ skipBenchmarks.push("zlib");
+ if (window.document.URL.indexOf('auto=1') >= 0)
+ Run();
+ }
+
+ function Load() {
+ setTimeout(CheckCompatibility, 200);
+ }
+</script>
+<!-- end Octane benchmark code -->
+
+<!-- Le styles -->
+<link href="css/bootstrap.css" rel="stylesheet">
+<style>
+body {
+ padding-top: 60px;
+ /* 60px to make the container go all the way to the bottom of the topbar */
+}
+</style>
+<link href="css/bootstrap-responsive.css" rel="stylesheet">
+
+<!-- Le HTML5 shim, for IE6-8 support of HTML5 elements -->
+<!--[if lt IE 9]>
+ <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
+<![endif]-->
+
+<!-- Le fav and touch icons -->
+<!-- TODO update icons -->
+<link rel="shortcut icon" href="ico/favicon.ico">
+<link rel="apple-touch-icon-precomposed" sizes="144x144"
+ href="ico/apple-touch-icon-144-precomposed.png">
+<link rel="apple-touch-icon-precomposed" sizes="114x114"
+ href="ico/apple-touch-icon-114-precomposed.png">
+<link rel="apple-touch-icon-precomposed" sizes="72x72"
+ href="ico/apple-touch-icon-72-precomposed.png">
+<link rel="apple-touch-icon-precomposed"
+ href="ico/apple-touch-icon-57-precomposed.png">
+</head>
+
+<body onLoad="Load()">
+
+ <div class="navbar navbar-fixed-top">
+ <div class="navbar-inner">
+
+ <div class="container">
+
+ <a class="brand" href="#">Octane 2.0</a>
+ <!--/.nav-collapse -->
+ </div>
+
+ </div>
+ </div>
+
+ <div class="container">
+ <div class="alert" style="display:none" id="alertbox">
+ <strong>Warning</strong> This JavaScript engine does not support Typed Arrays. You might want to run the <a href="http://v8.googlecode.com/svn/data/benchmarks/v7/run.html">V8 benchmark v7</a> instead.
+ </div>
+ <div id="main-container">
+ <a id="run-octane" href="javascript:Run()">
+ <div class="hero-unit" id="inside-anchor">
+ <h1 align="center" id="main-banner">Start Octane 2.0</h1>
+ <div id="bar-appendix"></div>
+ </div>
+ </a>
+ </div>
+
+ <div id="startup-text" style="color:white;" align="center">
+ Welcome to Octane 2.0, a JavaScript benchmark for the modern web. For more accurate results, <a href="http://developers.google.com/octane/benchmark">start the browser anew</a> before running the test.
+ <br/><br/>
+ <a href="http://developers.google.com/octane/benchmark#whatsnew" target="_blank">What's new in Octane 2.0</a> - <a href="http://developers.google.com/octane/">Documentation</a> - <a href="http://octane-benchmark.googlecode.com/svn/tags/v1/index.html">Run Octane v1</a>
+ </div>
+
+
+ <div class="header"></div>
+
+ <div class="content">
+ <div class="row">
+ <div class="span3">
+ <div class="box" id="Box-Richards" style="visibility: hidden;">
+ <a href="http://developers.google.com/octane/benchmark#richards"
+ target="_blank" style="float:left; color:#994520">Richards</a>
+
+ <span class="p-result" id="Result-Richards" style="float:right">...</span>
+ <span class="label-simple"
+ style="position: absolute; bottom: 3px; left: 3px;">Core
+ language features</span>
+ </div>
+
+ </div>
+ <div class="span3">
+ <div class="box" id="Box-DeltaBlue" style="visibility: hidden;">
+ <a href="http://developers.google.com/octane/benchmark#deltablue"
+ target="_blank" style="float:left; color:#994520">Deltablue</a>
+
+ <p class="p-result" id="Result-DeltaBlue" style="float:right">...</p>
+ <span class="label-simple"
+ style="position: absolute; bottom: 3px; left: 3px;">Core
+ language features</span>
+ </div>
+ </div>
+ <div class="span3">
+ <div class="box" id="Box-Crypto" style="visibility: hidden;">
+ <a href="http://developers.google.com/octane/benchmark#crypto"
+ target="_blank" style="float:left; color:#994520">Crypto</a>
+
+ <p class="p-result" id="Result-Crypto" style="float:right">...</p>
+ <span class="label-simple"
+ style="position: absolute; bottom: 3px; left: 3px;">Bit &
+ Math operations</span>
+ </div>
+ </div>
+ <div class="span3">
+ <div class="box" id="Box-RayTrace" style="visibility: hidden;">
+ <a href="http://developers.google.com/octane/benchmark#raytrace"
+ target="_blank" style="float:left; color:#994520">Raytrace</a>
+
+ <p class="p-result" id="Result-RayTrace" style="float:right">...</p>
+ <span class="label-simple"
+ style="position: absolute; bottom: 3px; left: 3px;">Core
+ language features</span>
+ </div>
+ </div>
+
+ </div>
+ <!-- /row -->
+
+ <div class="row">
+
+ <div class="span3">
+ <div class="box" id="Box-EarleyBoyer" style="visibility: hidden;">
+ <a
+ href="http://developers.google.com/octane/benchmark#earleyboyer"
+ target="_blank" style="float:left; color:#994520">EarleyBoyer</a>
+
+ <p class="p-result" id="Result-EarleyBoyer" style="float:right">...</p>
+ <span class="label-simple"
+ style="position: absolute; bottom: 3px; left: 3px;">Memory
+ & GC</span>
+ </div>
+ </div>
+ <div class="span3">
+ <div class="box" id="Box-RegExp" style="visibility: hidden;">
+ <a href="http://developers.google.com/octane/benchmark#regexp"
+ target="_blank" style="float:left; color:#994520">Regexp</a>
+
+ <p class="p-result" id="Result-RegExp" style="float:right">...</p>
+ <span class="label-simple"
+ style="position: absolute; bottom: 3px; left: 3px;">Strings
+ & arrays</span>
+ </div>
+ </div>
+ <div class="span3">
+ <div class="box" id="Box-Splay" style="visibility: hidden;">
+ <a href="http://developers.google.com/octane/benchmark#splay"
+ target="_blank" style="float:left; color:#994520">Splay</a>
+
+ <p class="p-result" id="Result-Splay" style="float:right">...</p>
+ <span class="label-simple"
+ style="position: absolute; bottom: 3px; left: 3px;">Memory
+ & GC</span>
+ </div>
+ </div>
+ <div class="span3">
+ <div class="box" id="Box-SplayLatency" style="visibility: hidden;">
+ <a href="http://developers.google.com/octane/benchmark#splaylatency"
+ target="_blank" style="float:left; color:#994520">SplayLatency</a>
+
+ <p class="p-result" id="Result-SplayLatency" style="float:right">...</p>
+ <span class="label-simple"
+ style="position: absolute; bottom: 3px; left: 3px;">GC latency
+ </span>
+ </div>
+ </div>
+
+ </div>
+ <!-- /row -->
+
+ <div class="row">
+ <div class="span3">
+ <div class="box" id="Box-NavierStokes" style="visibility: hidden;">
+ <a
+ href="http://developers.google.com/octane/benchmark#navierstokes"
+ target="_blank" style="float:left; color:#994520">NavierStokes</a>
+
+ <p class="p-result" id="Result-NavierStokes" style="float:right">...</p>
+ <span class="label-simple"
+ style="position: absolute; bottom: 3px; left: 3px;">Strings
+ & arrays</span>
+ </div>
+ </div>
+ <div class="span3">
+ <div class="box" id="Box-PdfJS" style="visibility: hidden;">
+ <a href="http://developers.google.com/octane/benchmark#pdfjs"
+ target="_blank" style="float:left; color:#994520">pdf.js</a>
+
+ <p class="p-result" id="Result-PdfJS" style="float:right">...</p>
+ <span class="label-simple"
+ style="position: absolute; bottom: 3px; left: 3px;">Strings
+ & arrays</span>
+ </div>
+ </div>
+ <div class="span3">
+ <div class="box" id="Box-Mandreel" style="visibility: hidden;">
+ <a href="http://developers.google.com/octane/benchmark#mandreel"
+ target="_blank" style="float:left; color:#994520">Mandreel</a>
+
+ <p class="p-result" id="Result-Mandreel" style="float:right">...</p>
+ <span class="label-simple"
+ style="position: absolute; bottom: 3px; left: 3px;">Virtual
+ machine</span>
+ </div>
+ </div>
+ <div class="span3">
+ <div class="box" id="Box-MandreelLatency" style="visibility: hidden;">
+ <a href="http://developers.google.com/octane/benchmark#mandreellatency"
+ target="_blank" style="float:left; color:#994520">MandreelLatency</a>
+
+ <p class="p-result" id="Result-MandreelLatency" style="float:right">...</p>
+ <span class="label-simple"
+ style="position: absolute; bottom: 3px; left: 3px;">Compiler latency
+ </span>
+ </div>
+ </div>
+
+ </div>
+ <!-- /row -->
+
+ <div class="row">
+ <div class="span3">
+ <div class="box" id="Box-Gameboy" style="visibility: hidden;">
+ <a
+ href="http://developers.google.com/octane/benchmark#gameboyemulator"
+ target="_blank" style="float:left; color:#994520">GB Emulator</a>
+
+ <p class="p-result" id="Result-Gameboy" style="float:right">...</p>
+ <span class="label-simple"
+ style="position: absolute; bottom: 3px; left: 3px;">Virtual
+ machine</span>
+ </div>
+ </div>
+ <div class="span3">
+ <div class="box" id="Box-CodeLoad" style="visibility: hidden;">
+ <a href="http://developers.google.com/octane/benchmark#codeload"
+ target="_blank" style="float:left; color:#994520">CodeLoad</a>
+
+ <p class="p-result" id="Result-CodeLoad" style="float:right">...</p>
+ <span class="label-simple"
+ style="position: absolute; bottom: 3px; left: 3px;">Loading
+ & Parsing</span>
+ </div>
+ </div>
+ <div class="span3">
+ <div class="box" id="Box-Box2D" style="visibility: hidden;">
+ <a href="http://developers.google.com/octane/benchmark#box2d"
+ target="_blank" style="float:left; color:#994520">Box2DWeb</a>
+
+ <p class="p-result" id="Result-Box2D" style="float:right">...</p>
+ <span class="label-simple"
+ style="position: absolute; bottom: 3px; left: 3px;">Bit &
+ Math operations</span>
+ </div>
+ </div>
+ <div class="span3">
+ <div class="box" id="Box-zlib" style="visibility: hidden;">
+ <a href="http://developers.google.com/octane/benchmark#zlib"
+ target="_blank" style="float:left; color:#994520">zlib</a>
+
+ <p class="p-result" id="Result-zlib" style="float:right">...</p>
+ <span class="label-simple"
+ style="position: absolute; bottom: 3px; left: 3px;">asm.js</span>
+ </div>
+ </div>
+ <div class="span3">
+ <div class="box" id="Box-Typescript" style="visibility: hidden;">
+ <a href="http://developers.google.com/octane/benchmark#typescript"
+ target="_blank" style="float:left; color:#994520">Typescript</a>
+
+ <p class="p-result" id="Result-Typescript" style="float:right">...</p>
+ <span class="label-simple"
+ style="position: absolute; bottom: 3px; left: 3px;">Virtual machine & GC
+ </span>
+ </div>
+ </div>
+
+ </div>
+ <!-- /row -->
+
+ </div>
+ <!-- /content -->
+
+ <div id="bottom-text" style="color:white; visibility:hidden" align="center">
+ <br></br>
+ The final score is the <a href="http://en.wikipedia.org/wiki/Geometric_mean#Properties">geometric mean</a> of the single scores. We suggest to restart the browser before repeating the test.
+ </div>
+
+ </div>
+ <!-- /container -->
+
+</body>
+</html>
+
+<!--
+// Copyright 2013 the V8 project authors (http://code.google.com/p/v8/).
+// All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following
+// disclaimer in the documentation and/or other materials provided
+// with the distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived
+// from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
diff --git a/js/src/octane/mandreel.js b/js/src/octane/mandreel.js
new file mode 100644
index 0000000000..82ebd23d36
--- /dev/null
+++ b/js/src/octane/mandreel.js
@@ -0,0 +1,277403 @@
+// Portions copyright 2012 Google, Inc.
+// Copyright 2012 Onan Games. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following
+// disclaimer in the documentation and/or other materials provided
+// with the distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived
+// from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+var MandreelBenchmark = new BenchmarkSuite('Mandreel', [16831872, 49852],
+ [new Benchmark('Mandreel',
+ false,
+ false,
+ 15,
+ runMandreel,
+ setupMandreel,
+ tearDownMandreel,
+ RMSMandreel,
+ 4)]);
+
+var mandreelSumSquaredPauses = 0;
+var mandreelSamples = 0;
+var mandreelSampleTimeStart = 0.0;
+
+function setupMandreel() {
+ // Check for Typed Arrays support, throw error if not.
+ if (!(typeof Uint8Array != "undefined" &&
+ typeof Float64Array != "undefined" &&
+ typeof (new Uint8Array(0)).subarray != "undefined")) {
+ throw "TypedArrayUnsupported";
+ }
+
+ my_old_constructors = mandreel_call_constructors;
+ mandreel_call_constructors = my_mandreel_call_constructors;
+ startMandreelTimer();
+ startApp();
+ _mandreelAppAudioReady();
+}
+
+function runMandreel() {
+ Mandreel_currentTime = 0;
+ var sp = g_stack_pointer+800*1024;
+ for (var i=0;i<mandreel_total_memory/4;i++) {
+ heap32[i] = my_heap32[i];
+ }
+ tlsf_ptr = 0;
+ heapNewPos = my_heapNewPos;
+ my_old_constructors(llvm_2E_global_ctors,5,sp);
+ heapU32[sp>>2] = 640;
+ heapU32[(sp+4)>>2] = 480;
+ __mandreel_internal_SetResolution(sp);
+ __mandreel_internal_init(g_stack_pointer+800*1024);
+ __init(g_stack_pointer+800*1024);
+ for (var i = 0; i < 20; i++) {
+ render();
+ Mandreel_flushTimeouts();
+ updateMandreelStats(performance.now());
+ }
+ Mandreel_checkState();
+}
+
+function updateMandreelStats(time) {
+ var pause = time - mandreelSampleTimeStart;
+ mandreelSampleTimeStart = time;
+ mandreelSumSquaredPauses += (pause * pause);
+ mandreelSamples++;
+}
+
+function startMandreelTimer() {
+ mandreelSampleTimeStart = performance.now();
+}
+
+function RMSMandreel() {
+ return Math.round(Math.sqrt(mandreelSumSquaredPauses / mandreelSamples) * 100);
+}
+
+function tearDownMandreel() {
+ my_old_constructors = null;
+ my_heap = null;
+ my_heap8 = null;
+ my_heap32 = null;
+
+ heap = null;
+ heap8 = null;
+ heapU8 = null;
+ heap16 = null;
+ heapU16 = null;
+ heap32 = null;
+ heapU32 = null;
+ heapFloat = null;
+ heapDouble = null;
+ mandreelAppUsePackAsyncTexture = null;
+ mandreelSumSquaredPauses = 0;
+ mandreelSamples = 0;
+}
+
+// Mocks for browser functions.
+
+function Mandreel_setTimeout(cmd, delay) {
+ timeouts.push(cmd);
+}
+
+function Mandreel_flushTimeouts() {
+ while (Mandreel_timeouts.length != 0) {
+ var next = Mandreel_timeouts.pop();
+ eval(next);
+ }
+}
+
+Mandreel_timeouts = new Array();
+
+Mandreel_XMLHttpRequest = function() {
+ this.open = function(type, url, some_bool) {
+ this.url = url;
+ }
+ this.overrideMimeType = function() {
+ }
+ this.send = function() {
+ this.response = null;
+ this.readyState = 4;
+ this.status = 0;
+ this.onreadystatechange();
+ }
+};
+
+function Mandreel_Element(type) {
+ this.element_type = type;
+ this.insertBefore = function() {
+ }
+}
+
+
+function Mandreel_Context() {
+}
+
+function Mandreel_Canvas() {
+}
+
+function Mandreel_CanvasDiv() {
+}
+
+Mandreel_document = {
+ createElement : function(element_type) {
+ var element = new Mandreel_Element(element_type);
+ element.parentNode = new Mandreel_Element("dummy_parent");
+ return element;
+ },
+ getElementById : function(name) {
+ if (name === "canvas") {
+ return new Mandreel_Canvas();
+ } else if (name === "canvasDiv") {
+ return new Mandreel_CanvasDiv();
+ } else {
+ return undefined;
+ }
+ },
+ getElementsByTagName : function(element) {
+ if (element === "script") {
+ return new Array(new this.createElement(element));
+ }
+ }
+
+};
+
+Mandreel_window = {
+ WebGLRenderingContext: {},
+ Float64Array: Float64Array,
+ Float32Array: Float32Array,
+ Int32Array: Int32Array,
+ Uint32Array: Uint32Array,
+ Int16Array: Int16Array,
+ Uint16Array: Uint16Array,
+ Int8Array: Int8Array,
+ Uint8Array: Uint8Array,
+ setTimeout: Mandreel_setTimeout,
+ addEventListener : function () {},
+ document: Mandreel_document
+};
+
+function dump(x) { }
+
+alert = typeof alert != "undefined" ? alert : function(x) {
+ print(x);
+}
+
+var my_old_constructors;
+var my_heap;
+var my_heap8;
+var my_heap32;
+var my_heapNewPos;
+
+function my_mandreel_call_constructors(_ptr, size,stackPos) {
+ my_heapNewPos = heapNewPos;
+ my_heap = new ArrayBuffer(mandreel_total_memory);
+ my_heap8 = new Int8Array(my_heap);
+ my_heap32 = new Int32Array(my_heap);
+ for (var i=0;i<mandreel_total_memory/4;i++) {
+ my_heap32[i] = heap32[i];
+ }
+ my_old_constructors(_ptr,size,stackPos);
+}
+
+
+var Mandreel_currentTime = 0;
+
+function Date_now() {
+ Mandreel_currentTime += 16;
+ return Mandreel_currentTime;
+}
+
+function Mandreel_checkState() {
+ var sum = 0;
+ for (var i = 0; i < heap32.length; i += 100) {
+ sum = (sum * 3 + heap32[i]) & 0xFFFFFF;
+ }
+ if (sum != 8001026) {
+ alert("Check sum mismatch: expected ???, actual " + sum);
+ }
+}
+
+// Original Mandreel code follows.
+// Modifications for benchmarking are marked in comments.
+
+// Start of js/main.js file:
+
+////////////////////////////////////////////
+function startApp(_platform)
+{
+ // Start mandreel
+ var params =
+ {
+ platform : _platform,
+ width : 1024,
+ height : 768,
+ webglCanvas : "canvas",
+ flashCanvas : "FlashDiv",
+ workingFolderFlash : "data/as3/",
+ workingFolderWebgl : "data/js/",
+ swfFlash : "mandreel.swf",
+ log : true
+ };
+ mandreelAppStart(appStartState,params);
+}
+
+////////////////////////////////////////////
+function appStartState(state,param)
+{
+ // mandreel.js program is been loaded
+ if ( state == "loadingScript" )
+ {
+ }
+
+ // mandreel.js program has been loaded
+ if ( state == "scriptLoaded" )
+ {
+ }
+
+ // loading pack data file
+ if (state == "loadingData")
+ {
+ // param bytes loaded
+ }
+
+ // Audio system is been started
+ if ( state == "loadingAudio" )
+ {
+ }
+
+ // Audio system is ready and the default audio preloading has been done
+ if ( state == "audioLoaded" )
+ {
+ }
+
+
+
+ // Mandreel has been started, render will start automatically
+ if ( state == "ready" )
+ {
+ // Hide loading image
+ var canvasElement = Mandreel_document.getElementById('loading');
+ if ( canvasElement != null )
+ canvasElement.style.visibility = "hidden";
+ }
+
+ // An error has been produced during the start process and the app must quit
+ if ( state == "error" )
+ {
+ if ( param == "webgl_not_found" )
+ {
+ window.location = "http://get.webgl.org";
+ return;
+ }
+ alert(param);
+ }
+}
+
+// End of js/main.js file.
+
+// Start of js/mandreelapp.js file.
+
+var mandreelAppMandreelJs = "mandreel.js";
+var mandreelAppMandreelJsCompressed = false;
+var mandreelAppWorkingFolder = "data/js/";
+var mandreelAppLog = false;
+var mandreelAppLocalHost = "http://localhost";
+var mandreelAppReadDataFromLocalHost = false;
+var mandreelAppReadMandreelJsFromLocalHost = false;
+var mandreelAppHostedAudioServer = null;
+var mandreelAppHostedAudioUrl = null;
+var mandrelCurrentFatVersion = "1.4";
+var mandreelAppPlatform = "webgl";
+var mandreelAppCanvasWidth = 1024;
+var mandreelAppCanvasHeight = 768;
+var mandreelAppWidthSrc = 1024;
+var mandreelAppHeightSrc = 768;
+var mandreelAppCanvasName = "canvas";
+var mandreelAppCanvasDiv = "canvasDiv";
+var mandreelAppUseFlashSockets = false;
+var mandreelAppUsePackAsyncTexture = new Array();
+//var mandreelBufferPackAsyncTexture = null;
+var mandreelAppForceFocus = true;
+var _imandreel_pause_game = false;
+
+/* The following code was removed for benchmarking:
+navigator.pointer = navigator.pointer || navigator.webkitPointer || navigator.mozPointer || null;*/
+
+/* The following code was removed for benchmarking:
+ if (!Date_now) {
+ Date_now = function() {
+ return +new Date();
+ };
+ };*/
+
+////////////////////////////////////////////
+
+if (Mandreel_window["console"])
+{
+ if (!Mandreel_window["dump"]) Mandreel_window["dump"] = function dump(str){ if ( mandreelAppLog ) console.log(str) };
+}
+else
+{
+ if (!Mandreel_window["dump"]) Mandreel_window["dump"] = function dump(str){ };
+}
+
+/* The following code is removed for benchmarking:
+var mandreel_BrowserDetect = {
+ init: function () {
+ this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
+ this.version = this.searchVersion(navigator.userAgent)
+ || this.searchVersion(navigator.appVersion)
+ || "an unknown version";
+ this.OS = this.searchString(this.dataOS) || "an unknown OS";
+ },
+ searchString: function (data) {
+ for (var i=0;i<data.length;i++) {
+ var dataString = data[i].string;
+ var dataProp = data[i].prop;
+ this.versionSearchString = data[i].versionSearch || data[i].identity;
+ if (dataString) {
+ if (dataString.indexOf(data[i].subString) != -1)
+ return data[i].identity;
+ }
+ else if (dataProp)
+ return data[i].identity;
+ }
+ },
+ searchVersion: function (dataString) {
+ var index = dataString.indexOf(this.versionSearchString);
+ if (index == -1) return;
+ return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
+ },
+ dataBrowser: [
+ {
+ string: navigator.userAgent,
+ subString: "Chrome",
+ identity: "Chrome"
+ },
+ { string: navigator.userAgent,
+ subString: "OmniWeb",
+ versionSearch: "OmniWeb/",
+ identity: "OmniWeb"
+ },
+ {
+ string: navigator.vendor,
+ subString: "Apple",
+ identity: "Safari",
+ versionSearch: "Version"
+ },
+ {
+ prop: window.opera,
+ identity: "Opera",
+ versionSearch: "Version"
+ },
+ {
+ string: navigator.vendor,
+ subString: "iCab",
+ identity: "iCab"
+ },
+ {
+ string: navigator.vendor,
+ subString: "KDE",
+ identity: "Konqueror"
+ },
+ {
+ string: navigator.userAgent,
+ subString: "Firefox",
+ identity: "Firefox"
+ },
+ {
+ string: navigator.vendor,
+ subString: "Camino",
+ identity: "Camino"
+ },
+ { // for newer Netscapes (6+)
+ string: navigator.userAgent,
+ subString: "Netscape",
+ identity: "Netscape"
+ },
+ {
+ string: navigator.userAgent,
+ subString: "MSIE",
+ identity: "Explorer",
+ versionSearch: "MSIE"
+ },
+ {
+ string: navigator.userAgent,
+ subString: "Gecko",
+ identity: "Mozilla",
+ versionSearch: "rv"
+ },
+ { // for older Netscapes (4-)
+ string: navigator.userAgent,
+ subString: "Mozilla",
+ identity: "Netscape",
+ versionSearch: "Mozilla"
+ }
+ ],
+ dataOS : [
+ {
+ string: navigator.platform,
+ subString: "Win",
+ identity: "Windows"
+ },
+ {
+ string: navigator.platform,
+ subString: "Mac",
+ identity: "Mac"
+ },
+ {
+ string: navigator.userAgent,
+ subString: "iPhone",
+ identity: "iPhone/iPod"
+ },
+ {
+ string: navigator.platform,
+ subString: "Linux",
+ identity: "Linux"
+ }
+ ]
+
+};
+mandreel_BrowserDetect.init(); */
+
+////////////////////////////////////////////
+var mandreel_packfiledata_name = null;
+var mandreel_packfiledata_compressed = false;
+var mandreel_packfiledata_size = 0;
+var mandreel_total_packtexture_size = 0;
+var mandreel_total_pogfile_size = 0;
+var mandreel_loaded_packtexture_size = 0;
+var mandreel_jslzma_size = 0;
+var mandreel_swf_size = 0;
+
+var mandreelJsScriptLoaded_loaded = false;
+
+var mandreel_swf_last_total_size = 0;
+function mandreel_swf_size_updated(str)
+{
+ var params = str.split(',');
+ if ( mandreel_swf_size == 0 )
+ {
+ mandreel_swf_last_loaded_size = 0;
+ }
+ mandreel_swf_size = parseInt(params[0]);
+ var loaded = parseInt(params[1]);
+ var delta_size = loaded - mandreel_swf_last_loaded_size;
+ mandreel_swf_last_loaded_size = loaded;
+
+ var percentage = ((100*loaded)/mandreel_swf_size)|0;
+ if (percentage>100)
+ percentage = 100;
+
+ if ( mandreelAppStartStateFunc )
+ mandreelAppStartStateFunc("loadingScriptUpdate",percentage);
+
+ imandreel_update_load(delta_size,0);
+}
+
+function mandreel_swf_size_loaded(str)
+{
+ if ( mandreelAppStartStateFunc )
+ mandreelAppStartStateFunc("scriptLoaded","");
+}
+
+function mandreelNextDecompress(mandreel_result_lzma)
+{
+
+ if ( mandreelAppStartStateFunc )
+ {
+ var totalBytesLeft = mandreel_result_lzma.totalSize - mandreel_result_lzma.remainingBytes;
+
+ var percentage;
+
+ if (totalBytesLeft == 0)
+ percentage = 0;
+ else
+ percentage = ((100*totalBytesLeft)/mandreel_result_lzma.totalSize)|0;
+
+ mandreelAppStartStateFunc("uncompressingDataUpdate",percentage);
+ }
+
+ var old_result = mandreel_result_lzma;
+ mandreel_result_lzma = LZMA.decompress2(mandreel_result_lzma.inStream,mandreel_result_lzma.inStream,mandreel_result_lzma.outStream,mandreel_result_lzma);
+
+ if (mandreel_result_lzma == null)
+ {
+ //setTimeout(mandreelLoadScript,10,old_result.my_outStream.data);
+
+ //mandreel_fs_saveFile('data.bin', old_result.my_outStream.arrayBuffer);
+ //callback(old_result.my_outStream.arrayBuffer);
+ //alert('done');
+ mandreelLoadPackData(old_result.my_outStream.arrayBuffer,true);
+ }
+ else
+ {
+ Mandreel_setTimeout(mandreelNextDecompress,10,mandreel_result_lzma);
+ }
+
+
+}
+
+function mandreel_load_packfile(array_buffer)
+{
+ if (array_buffer)
+ {
+ mandreelLoadPackData(array_buffer,false);
+ return;
+ }
+
+ var working_folder = mandreelAppWorkingFolder;
+ if ( mandreelAppReadDataFromLocalHost )
+ working_folder = mandreelAppLocalHost+"/"+mandreelAppWorkingFolder;
+ var packdata_request = new XMLHttpRequest();
+ var url = working_folder+mandreel_packfiledata_name;
+
+ packdata_request.open("GET", url, true);
+
+ if("responseType" in packdata_request)
+ packdata_request.responseType="arraybuffer";
+ else
+ packdata_request.overrideMimeType('text/plain; charset=x-user-defined');
+
+ var last_loaded_size = 0;
+
+ packdata_request.onreadystatechange = function()
+ {
+ if (packdata_request.readyState != 4) return;
+
+ if (packdata_request.status == 200)
+ {
+ var buffer;
+ if (packdata_request.responseType=="arraybuffer")
+ buffer=packdata_request.response;
+ else if (packdata_request.mozResponseArrayBuffer != null)
+ buffer = packdata_request.mozResponseArrayBuffer;
+ else
+ buffer=packdata_request.response;
+
+ if (mandreel_packfiledata_compressed)
+ {
+ var inStream = {
+ data: new Uint8Array(buffer),
+ offset: 0,
+ readByte: function(){
+ return this.data[this.offset ++];
+ }
+ };
+
+ var outStream = {
+ data: null,
+ offset: 0,
+ binary_mode : true,
+ writeByte: function(value){
+ this.data[this.offset ++] = value;
+ }
+ };
+
+
+ var result = LZMA.decompress2(inStream,inStream,outStream,null);
+
+ if (result == null)
+ mandreelLoadPackData(outStream.arrayBuffer,true);
+ else
+ Mandreel_setTimeout(mandreelNextDecompress,10,result);
+ }
+ else
+ mandreelLoadPackData(buffer,true);
+ }
+ else
+ {
+ if ( mandreelAppStartStateFunc )
+ mandreelAppStartStateFunc("error","can't load packfile data");
+ }
+ }
+ packdata_request.onprogress = function(e)
+ {
+ var delta_size = e.loaded - last_loaded_size;
+ last_loaded_size = e.loaded;
+ var percentage = ((100*e.loaded)/mandreel_packfiledata_size)|0;
+
+
+ imandreel_update_load(delta_size,0);
+
+ if (percentage>100)
+ percentage = 100;
+
+ if ( mandreelAppStartStateFunc )
+ mandreelAppStartStateFunc("loadingData",percentage);
+ }
+
+ packdata_request.send();
+}
+
+function mandreelJsScriptLoaded()
+{
+ if (mandreelJsScriptLoaded_loaded)
+ return;
+
+ if (typeof(mandreel_cache_files)=="undefined")
+ {
+ Mandreel_setTimeout(mandreelJsScriptLoaded,10);
+ return;
+ }
+
+ mandreelJsScriptLoaded_loaded = true;
+
+ if ( mandreelAppStartStateFunc )
+ mandreelAppStartStateFunc("scriptLoaded","");
+
+ if (mandreel_packfiledata_name)
+ {
+
+ mandreel_fs_load_binary(mandreel_packfiledata_name, mandreel_load_packfile);
+
+
+ }
+ else
+ {
+ mandreelCacheMandreelFat();
+ imandreelJsScriptLoaded();
+ }
+}
+
+function imandreelLoadAudio()
+{
+ g_mandreel_working_folder = mandreelAppWorkingFolder;
+ if ( mandreelAppReadDataFromLocalHost )
+ g_mandreel_working_folder = mandreelAppLocalHost+"/"+mandreelAppWorkingFolder;
+
+ // load audio
+ if ( mandreelAppStartStateFunc )
+ mandreelAppStartStateFunc("loadingAudio","");
+ mandreel_start_audio(mandreelAppHostedAudioServer,mandreelAppHostedAudioUrl,_mandreelAppAudioReady);
+}
+
+var _mandreel_currentPackTexture = '';
+
+function imandreel_packasynctexture_loaded(buffer,save_file)
+{
+ if (save_file)
+ mandreel_fs_saveFile(_mandreel_currentPackTexture,buffer);
+
+ //mandreelBufferPackAsyncTexture = buffer;
+ Mandreel_TextureAsync_PackBufferData[_mandreel_currentPackTexture] = buffer;
+
+ imandreelLoadNextTexturePack();
+}
+
+var mandreel_update_total_size = 0;
+
+function imandreel_update_load(size, total)
+{
+ if (total == 0)
+ total = mandreel_packfiledata_size + mandreel_total_packtexture_size + mandreel_total_pogfile_size + mandreel_jslzma_size + mandreel_swf_size;
+
+
+ mandreel_update_total_size+=size;
+
+ var percentage = ((100*mandreel_update_total_size)/total)|0;
+
+ if (percentage>100)
+ percentage = 100;
+ if (mandreelAppStartStateFunc)
+ mandreelAppStartStateFunc("loadingProgress",percentage);
+
+}
+
+
+function imandreel_packasynctexture_load(array_buffer)
+{
+ if (array_buffer)
+ {
+ imandreel_packasynctexture_loaded(array_buffer, false);
+ return;
+ }
+
+
+ var working_folder = mandreelAppWorkingFolder;
+ if ( mandreelAppReadDataFromLocalHost )
+ working_folder = mandreelAppLocalHost+"/"+mandreelAppWorkingFolder;
+ var packdata_request = new XMLHttpRequest();
+ var url = working_folder+_mandreel_currentPackTexture;
+
+ packdata_request.open("GET", url, true);
+
+ if("responseType" in packdata_request)
+ packdata_request.responseType="arraybuffer";
+ else
+ packdata_request.overrideMimeType('text/plain; charset=x-user-defined');
+
+ var last_loaded_size = 0;
+
+ packdata_request.onreadystatechange = function()
+ {
+ if (packdata_request.readyState != 4) return;
+
+ if (packdata_request.status == 200)
+ {
+ var buffer;
+ if (packdata_request.responseType=="arraybuffer")
+ buffer=packdata_request.response;
+ else if (packdata_request.mozResponseArrayBuffer != null)
+ buffer = packdata_request.mozResponseArrayBuffer;
+ else
+ buffer=packdata_request.response;
+
+ imandreel_packasynctexture_loaded(buffer, true);
+ }
+ else
+ {
+ if ( mandreelAppStartStateFunc )
+ mandreelAppStartStateFunc("error","can't load textureasync pack data");
+ }
+ }
+ packdata_request.onprogress = function(e)
+ {
+ var delta_size = e.loaded - last_loaded_size;
+ last_loaded_size = e.loaded;
+ mandreel_loaded_packtexture_size+=delta_size;
+
+ imandreel_update_load(delta_size,0);
+
+ var percentage = ((100*mandreel_loaded_packtexture_size)/mandreel_total_packtexture_size)|0;
+
+ if (percentage>100)
+ percentage = 100;
+
+ if ( mandreelAppStartStateFunc )
+ mandreelAppStartStateFunc("loadingTextureAsyncPack",percentage);
+ }
+
+ packdata_request.send();
+
+}
+
+function imandreelLoadNextTexturePack()
+{
+ if (mandreelAppUsePackAsyncTexture.length)
+ {
+ _mandreel_currentPackTexture = mandreelAppUsePackAsyncTexture.pop();
+ mandreel_fs_load_binary(_mandreel_currentPackTexture, imandreel_packasynctexture_load);
+ }
+ else
+ imandreelLoadAudio();
+}
+
+function imandreelJsScriptLoaded()
+{
+ imandreelLoadNextTexturePack();
+}
+
+////////////////////////////////////////////
+
+function mandreelDecompressJSReady(code, save_file)
+{
+ if (save_file)
+ mandreel_fs_saveFile(mandreelAppMandreelJs + ".lzma", code);
+
+ var ga = Mandreel_document.createElement('script');
+ ga.type = "text/javascript";
+ ga.text = code;
+ var s = Mandreel_document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+ s.parentNode.removeChild(ga);
+ mandreelJsScriptLoaded();
+}
+
+function mandreelNextDecompressJS(mandreel_result_lzma)
+{
+
+ if ( mandreelAppStartStateFunc )
+ {
+ var totalBytesLeft = mandreel_result_lzma.totalSize - mandreel_result_lzma.remainingBytes;
+
+ var percentage;
+
+ if (totalBytesLeft == 0)
+ percentage = 0;
+ else
+ percentage = ((100*totalBytesLeft)/mandreel_result_lzma.totalSize)|0;
+
+ mandreelAppStartStateFunc("uncompressingScriptUpdate",percentage);
+ }
+
+ var old_result = mandreel_result_lzma;
+ mandreel_result_lzma = LZMA.decompress2(mandreel_result_lzma.inStream,mandreel_result_lzma.inStream,mandreel_result_lzma.outStream,mandreel_result_lzma);
+
+ if (mandreel_result_lzma == null)
+ {
+ mandreelDecompressJSReady(old_result.my_outStream.data,true);
+ }
+ else
+ {
+ Mandreel_setTimeout(mandreelNextDecompressJS,10,mandreel_result_lzma);
+ }
+
+
+}
+
+function mandreel_load_compressed_js(code_js)
+{
+ if (code_js)
+ {
+ mandreelDecompressJSReady(code_js,false);
+ return;
+ }
+ var xmlhttp_get = new XMLHttpRequest();
+
+ var url = mandreelAppMandreelJs + ".lzma";
+ if ( mandreelAppReadMandreelJsFromLocalHost )
+ url = mandreelAppLocalHost+"/"+url;
+
+ xmlhttp_get.open('GET',url);
+
+
+ if("responseType" in xmlhttp_get)
+ xmlhttp_get.responseType="arraybuffer";
+ else
+ xmlhttp_get.overrideMimeType('text/plain; charset=x-user-defined');
+
+ var last_loaded_size = 0;
+
+ xmlhttp_get.onreadystatechange = function()
+ {
+ if (xmlhttp_get.readyState==4)
+ {
+ if (xmlhttp_get.status==200 || xmlhttp_get.status==0)
+ {
+
+ var inStream = {
+ data: new Uint8Array(xmlhttp_get.response),
+ offset: 0,
+ readByte: function(){
+ return this.data[this.offset ++];
+ }
+ };
+
+ var outStream = {
+ data: new String(""),
+ offset: 0,
+ binary_mode : false,
+ writeByte: function(value){
+ this.data+=String.fromCharCode(value);
+ }
+ };
+
+
+ var result = LZMA.decompress2(inStream,inStream,outStream,null);
+ if (result == null)
+ mandreelDecompressJSReady(outStream.data,true);
+ else
+ Mandreel_setTimeout(mandreelNextDecompressJS,10,result);
+ }
+ else
+ {
+ alert('error ' + xmlhttp_get.status);
+ }
+ }
+
+ }
+
+ xmlhttp_get.onprogress = function(e)
+ {
+ var delta_size = e.loaded - last_loaded_size;
+ last_loaded_size = e.loaded;
+
+ var percentage = ((100*e.loaded)/e.total)|0;
+
+ mandreel_jslzma_size = e.total;
+
+ imandreel_update_load(delta_size,0);
+
+ if (percentage>100)
+ percentage = 100;
+
+ if ( mandreelAppStartStateFunc )
+ mandreelAppStartStateFunc("loadingScriptUpdate",percentage);
+ }
+
+ xmlhttp_get.send();
+
+}
+
+function mandreelLoadMandreelJsScript()
+{
+ if (mandreelAppMandreelJsCompressed)
+ {
+ mandreel_fs_load_text(mandreelAppMandreelJs + ".lzma", mandreel_load_compressed_js);
+
+ }
+ else
+ {
+ var ga = Mandreel_document.createElement('script');
+ ga.type = 'text/javascript';
+ ga.async = true;
+ ga.onload = ga.onreadystatechange = mandreelJsScriptLoaded;
+ var url = mandreelAppMandreelJs;
+ if ( mandreelAppReadMandreelJsFromLocalHost )
+ ga.src = mandreelAppLocalHost+"/"+url;
+ else
+ ga.src = url;
+ var s = Mandreel_document.getElementsByTagName('script')[0];
+ if ( mandreelAppStartStateFunc )
+ mandreelAppStartStateFunc("loadingScript","");
+ s.parentNode.insertBefore(ga, s);
+ }
+}
+
+////////////////////////////////////////////
+function mandreelFatLoaded()
+{
+ if ( mandreelAppPlatform == "nacl" )
+ {
+ g_mandreel_working_folder = mandreelAppWorkingFolder;
+ if ( mandreelAppReadDataFromLocalHost )
+ g_mandreel_working_folder = mandreelAppLocalHost+"/"+mandreelAppWorkingFolder;
+
+ // load audio
+ if ( mandreelAppStartStateFunc )
+ mandreelAppStartStateFunc("loadingAudio","");
+ _mandreelAppAudioReady();
+ }
+ else
+ mandreelLoadMandreelJsScript();
+}
+
+var mandreelFatData = "";
+var mandreelFatPreloadRequest = 0;
+////////////////////////////////////////////
+
+function mandreel_chanka_fixfile(fileName)
+{
+ var fileNameNoExt = fileName.toLowerCase();
+ fileNameNoExt = fileNameNoExt.replace(/\\/g,"/");
+
+ fileNameNoExt = fileNameNoExt.substr(1);
+
+ var new_fileName = '';
+
+ for(var j = 0; j < fileNameNoExt.length; j++)
+ {
+ var data = fileNameNoExt.charCodeAt(j);
+
+ if (data != 13)
+ {
+ var t = String.fromCharCode(data);
+ new_fileName+=t;
+ }
+ }
+
+ return new_fileName;
+}
+
+function mandreel_removecr(my_string)
+{
+ var new_string = '';
+ for(var j = 0; j < my_string.length; j++)
+ {
+ var data = my_string.charCodeAt(j);
+
+ if (data != 13)
+ {
+ var t = String.fromCharCode(data);
+ new_string+=t;
+ }
+ }
+
+ return new_string;
+}
+
+function mandreelCacheMandreelFat()
+{
+ var array_mandreel_fat = new ArrayBuffer(mandreelFatData.length+1);
+
+
+ {
+ var j;
+ var len = mandreelFatData.length;
+ var data_char;
+
+ var my_bytes = new Uint8Array(array_mandreel_fat);
+
+ for(j = 0; j < len; j++)
+ {
+ data_char = mandreelFatData.charCodeAt(j);
+
+ my_bytes[j] = data_char;
+ }
+ my_bytes[j] = 0;
+ }
+
+
+ mandreel_cache_files['mandreel.fat'] = array_mandreel_fat;
+}
+
+function mandreelLoadPackData(data, save_pack)
+{
+ var files = mandreelFatData.split('\n');
+
+ var current_dir = '';
+ var current_offset = 0;
+
+ if (save_pack)
+ mandreel_fs_saveFile(mandreel_packfiledata_name,data);
+
+
+ for (var i=0;i<files.length;++i)
+ {
+ var file_data = files[i].split(',');
+
+ if (file_data[0] == 'dir')
+ {
+ current_dir = file_data[1];
+ //current_dir = current_dir.substr(0,current_dir.lengh-1);
+ }
+ else if (file_data[0] == 'file')
+ {
+ var file_name = current_dir + file_data[1];
+ file_name = mandreel_chanka_fixfile(file_name) ;
+ //dump('new file ' + file_name + ' ' + current_offset);
+ //dump(file_name);
+ var file_size = parseInt(file_data[2]);
+
+ var my_array = new ArrayBuffer(file_size);
+
+ var my_bytes = new Uint8Array(my_array);
+
+ var data_bytes = new Uint8Array(data,current_offset,file_size);
+
+ my_bytes.set(data_bytes);
+
+ mandreel_cache_files[file_name] = my_array;
+
+
+ current_offset+=file_size;
+
+
+ }
+ }
+
+
+
+ g_mandreel_datafiles_sufix = '';
+ mandreelCacheMandreelFat();
+
+ imandreelJsScriptLoaded();
+}
+
+var preCreatedWebAudioContext = null;
+
+function mandreelLoadFat()
+{
+ mandreelFatPreloadRequest = new Mandreel_XMLHttpRequest();
+ var working_folder = mandreelAppWorkingFolder;
+ if ( mandreelAppReadDataFromLocalHost )
+ working_folder = mandreelAppLocalHost+"/"+mandreelAppWorkingFolder;
+ var url = working_folder+"mandreel.fat.dat";
+ if ( mandreelAppPlatform == "nacl" )
+ url = working_folder+"mandreel.fat";
+ mandreelFatPreloadRequest.open("GET", url, true);
+ mandreelFatPreloadRequest.onreadystatechange = function()
+ {
+ if (mandreelFatPreloadRequest.readyState != 4) return;
+ if ( mandreelFatPreloadRequest.status != 404 && mandreelFatPreloadRequest.response != null )
+ {
+ mandreelFatData = mandreelFatPreloadRequest.response;
+ }
+ if ( mandreelFatData == "" )
+ {
+ dump("error loading mandreel.fat file, Maybe the working folder is not correctly set???");
+ }
+
+ var packfiledata = null;
+ var compressed = false;
+ var packfiledata_size = 0;
+ var total_packtexture_size = 0;
+ var pogsize = 0;
+
+ // Check version
+ var FatLines = mandreelFatData.split('\n');
+ for ( var i=0;i<FatLines.length;++i )
+ {
+ var line = mandreel_removecr(FatLines[i]);
+ var params = line.split(',');
+ if ( params[0] == "version" )
+ {
+ if ( params[1] != mandrelCurrentFatVersion )
+ dump("warning: mandreel.fat version number is ("+params[1]+") and it should be ("+mandrelCurrentFatVersion+")");
+
+ }
+ else if ( params[0] == "platform" && params[1] != "js" && (mandreelAppPlatform == "webgl" || mandreelAppPlatform == "canvas") )
+ dump("warning: mandreel.fat platform is ("+params[1]+") and it should be (js)");
+ else if ( params[0] == "platform" && params[1] != "nacl" && mandreelAppPlatform == "nacl" )
+ dump("warning: mandreel.fat platform is ("+params[1]+") and it should be (nacl)");
+ else if (params[0] == 'packdata')
+ {
+ packfiledata = params[1];
+ compressed = params[2].charAt(0) == '1';
+ packfiledata_size = parseInt(params[3], 10);
+ }
+ else if (params[0] == 'flashsockets')
+ {
+ mandreelAppUseFlashSockets = true;
+ }
+ else if (params[0] == 'packtexture')
+ {
+ var filename = params[1];
+ var size_packtexture = parseInt(params[3], 10);
+ total_packtexture_size+=size_packtexture;
+ mandreelAppUsePackAsyncTexture.push(filename);
+ }
+ else if (params[0] == 'audiopreloadfile')
+ {
+ pogsize = parseInt(params[2],10);
+ }
+ else if (params[0] == 'audiodriver' && params[1] == 'webaudio')
+ {
+ try { preCreatedWebAudioContext = new webkitAudioContext(); } catch(err) { preCreatedWebAudioContext = null; }
+ }
+ }
+
+ if ( preCreatedWebAudioContext != null )
+ mandreel_total_pogfile_size = pogsize;
+ mandreel_packfiledata_name = packfiledata;
+ mandreel_packfiledata_compressed = compressed;
+ mandreel_packfiledata_size = packfiledata_size;
+ mandreel_total_packtexture_size = total_packtexture_size;
+ mandreelFatLoaded();
+ }
+ mandreelFatPreloadRequest.send();
+}
+
+var mandreelAppStartStateFunc = 0;
+var mandreelDisableSpaceKey = true;
+////////////////////////////////////////////
+function mandreelAppStart(startStateFunc,params)
+{
+ mandreelAppStartStateFunc = startStateFunc;
+
+
+
+
+ if ( typeof(params.log) != 'undefined' )
+ mandreelAppLog = params.log;
+
+ if ( typeof(params.platform) != 'undefined' )
+ mandreelAppPlatform = params.platform;
+
+ if (typeof(params.mandreelJSCompressed) != 'undefined' )
+ mandreelAppMandreelJsCompressed = params.mandreelJSCompressed;
+
+
+/* The following code is removed for benchmarking:
+ if ((mandreel_BrowserDetect.browser == 'Chrome' || mandreel_BrowserDetect.browser == 'Safari') && mandreel_BrowserDetect.OS == 'Mac' && mandreelAppPlatform == "flash")
+ mandreelDisableSpaceKey = false; */
+
+ if ( mandreelAppPlatform != "webgl" && mandreelAppPlatform != "flash" && mandreelAppPlatform != "nacl" && mandreelAppPlatform != "canvas" && mandreelAppPlatform != "plugin")
+ {
+ mandreelAppStartStateFunc("error",'platform ('+mandreelAppPlatform+') not supported');
+ return;
+ }
+
+ if ( mandreelAppPlatform == "webgl" || mandreelAppPlatform == "canvas" )
+ {
+ mandreelAppWorkingFolder = "data/js/";
+ if ( typeof(params.workingFolderWebgl) != 'undefined' )
+ mandreelAppWorkingFolder = params.workingFolderWebgl;
+ // Check Float64Array availability
+ if ( !Mandreel_window["Float64Array"] )
+ {
+ mandreelAppStartStateFunc("error",'Browser unsupported: Float64Array not available');
+ return;
+ }
+
+ var flashElement = Mandreel_document.getElementById('FlashWrapper');
+ if ( flashElement != null )
+ {
+ flashElement.style.visibility = "hidden";
+ flashElement.style.width = "0px";
+ flashElement.style.height = "0px";
+ }
+ var flashElement = Mandreel_document.getElementById('FlashDiv');
+ if ( flashElement != null )
+ {
+ flashElement.style.visibility = "hidden";
+ flashElement.style.width = "0px";
+ flashElement.style.height = "0px";
+ }
+
+ // Setup WebGL
+ if ( typeof(params.webglCanvas) == 'undefined' )
+ {
+ mandreelAppStartStateFunc("error",'canvas parameter not found');
+ return;
+ }
+ var canvas = Mandreel_document.getElementById(params.webglCanvas);
+ if ( canvas == null )
+ {
+ mandreelAppStartStateFunc("error",'canvas object ('+params.webglCanvas+') not found');
+ return;
+ }
+ if ( params.width != null )
+ {
+ canvas.width = params.width;
+ mandreelAppWidthSrc = params.width;
+ }
+ if ( params.height != null )
+ {
+ canvas.height = params.height;
+ mandreelAppHeightSrc = params.height;
+ }
+ if ( mandreelAppPlatform == "webgl" )
+ {
+ // The following code is removed for benchmarking:
+ // imandreel_gl = WebGLUtils.setupWebGL(canvas,{premultipliedAlpha:false,alpha:false});
+ // if (imandreel_gl == null)
+ // {
+ // mandreelAppStartStateFunc("error","webgl_not_found");
+ // return;
+ // }
+ }
+
+ if ( mandreelAppPlatform == "canvas" )
+ {
+ imandreel_ctx_canvas = canvas.getContext('2d');
+ if ( imandreel_ctx_canvas == null )
+ {
+ mandreelAppStartStateFunc("error","canvas context 2d not found");
+ return;
+ }
+ }
+
+ if (params.cache != null)
+ {
+ //alert( params.cache.size + params.cache.url);
+ mandreel_fs_init(function() { if ( mandreelAppStartStateFunc )
+ mandreelAppStartStateFunc("loadingFat","");
+ mandreelLoadFat();}, params.cache.size,params.cache.url);
+ }
+ else
+ {
+ // load Fat
+ if ( mandreelAppStartStateFunc )
+ mandreelAppStartStateFunc("loadingFat","");
+ mandreelLoadFat();
+ }
+ }
+
+ if ( mandreelAppPlatform == "flash" )
+ {
+ mandreelAppWorkingFolder = "data/as3/";
+ if ( typeof(params.workingFolderFlash) != 'undefined' )
+ mandreelAppWorkingFolder = params.workingFolderFlash;
+ if (!swfobject.hasFlashPlayerVersion('11.2.0'))
+ {
+ mandreelAppStartStateFunc("error","flash 11 not found");
+ return;
+ }
+
+ if ( typeof(params.flashCanvas) == 'undefined' )
+ {
+ mandreelAppStartStateFunc("error",'canvas parameter not found');
+ return;
+ }
+
+ if ( true ) // hide webgl canvas
+ {
+ var canvas = Mandreel_document.getElementById(mandreelAppCanvasDiv);
+ if ( canvas != null )
+ {
+ canvas.style.visibility = "hidden";
+ canvas.style.width = "0px";
+ canvas.style.height = "0px";
+ }
+ }
+
+ if ( params.width != null )
+ {
+ mandreelAppCanvasWidth = params.width;
+ }
+ if ( params.height != null )
+ {
+ mandreelAppCanvasHeight = params.height;
+ }
+
+ mandreelAppCanvasDiv = params.flashCanvas;
+
+ try
+ {
+ var mandreelSocketsSwf = "mandreel.swf";
+ if ( typeof(params.swfFlash) != 'undefined' )
+ mandreelSocketsSwf = params.swfFlash;
+
+ var my_flashvars = "workingFolder=" + encodeURIComponent(mandreelAppWorkingFolder);
+ if ( typeof(params.log) != 'undefined' && params.log == true)
+ my_flashvars += "&log=true"
+ my_flashvars += "&width=" + params.width;
+ my_flashvars += "&height=" + params.height;
+ my_flashvars += "&swfloader=" + mandreelSocketsSwf;
+
+ if (typeof(params.restore_context) != 'undefined' && params.restore_context == true)
+ my_flashvars += "&restore_context=1";
+
+ if (typeof(params.antialiasing) != 'undefined')
+ my_flashvars += "&antialiasing=" + params.antialiasing;
+
+ if (typeof(params.right_click_enable) != 'undefined' && params.right_click_enable == true)
+ my_flashvars += "&right_click=1";
+
+ if (typeof(params.disable_depth) != 'undefined' && params.disable_depth == true)
+ my_flashvars += "&disable_depth=1";
+
+ var swfname = "mandreelloader.swf";
+ if ( typeof(params.swfPreloader) != 'undefined' && params.swfPreloader == false)
+ swfname = mandreelSocketsSwf;
+
+ var swf = swfobject.createSWF({ data:swfname, width:"100%", height:"100%" }, { menu:"false",allowScriptAccess:"always",allowFullScreen:"true",wmode:"direct",scale:"noscale",salign :"tl",bgcolor:"#000000",flashvars:my_flashvars}, params.flashCanvas);
+ if ( !swf )
+ {
+ mandreelAppStartStateFunc("error","error loading " + swfname);
+ return;
+ }
+ else
+ {
+ if ( mandreelAppStartStateFunc )
+ mandreelAppStartStateFunc("loadingScript","");
+ }
+ }
+ catch(err)
+ {
+ mandreelAppStartStateFunc("error","exception " + err + " while loading " + mandreelSocketsSwf);
+ return;
+ }
+
+ appStartState('loadingScript');
+ }
+
+ if ( mandreelAppPlatform == "nacl" )
+ {
+ mandreelAppWorkingFolder = "data/nacl/";
+
+ // load Fat
+ if ( mandreelAppStartStateFunc )
+ mandreelAppStartStateFunc("loadingFat","");
+ mandreelLoadFat();
+
+ }
+
+ if ( mandreelAppPlatform == "plugin" )
+ {
+ mandreelInitPluginPlatform(params);
+ }
+}
+
+
+////////////////////////////////////////////
+function MandreelAudioStartedNacl()
+{
+ var helloWorldModule = null;
+ helloWorldModule = Mandreel_document.getElementById('hello_world');
+ helloWorldModule.postMessage('init');
+ var flashElement = Mandreel_document.getElementById('FlashWrapper');
+ if ( flashElement != null )
+ flashElement.style.visibility = "hidden";
+ mandreelAppStartStateFunc("ready",mandreelAppCanvasWidth,mandreelAppCanvasHeight);
+}
+
+////////////////////////////////////////////
+function _mandreelAppStartReady()
+{
+ if ( mandreelAppPlatform == "nacl" )
+ {
+ wa_initWebAudio();
+ mandreel_webAudio_PreloadAssets();
+ }
+ else
+ {
+ if ( mandreelAppStartStateFunc )
+ {
+ mandreelAppStartRenderWebGL();
+ mandreelAppStartStateFunc("ready",mandreelAppCanvasWidth,mandreelAppCanvasHeight);
+ }
+ }
+}
+////////////////////////////////////////////
+function _mandreelAppAudioReady()
+{
+ if ( mandreelAppStartStateFunc )
+ mandreelAppStartStateFunc("audioLoaded","");
+
+ if ( mandreelAppUseFlashSockets )
+ mandreel_flash_sockets_load_flash(_mandreelAppStartReady);
+ else
+ _mandreelAppStartReady();
+}
+
+////////////////////////////////////////////
+function mandreelAppInit()
+{
+ if ( mandreelAppPlatform == "webgl" || mandreelAppPlatform == "canvas" )
+ {
+ global_init(g_stack_pointer+800*1024);
+
+ //Mandreel_TextureAsync_PackBufferData[_mandreel_currentPackTexture] = mandreelBufferPackAsyncTexture;
+ //mandreelBufferPackAsyncTexture = null;
+ var sp = g_stack_pointer+800*1024;
+ heapU32[sp>>2] = mandreelAppCanvasWidth;
+ heapU32[(sp+4)>>2] = mandreelAppCanvasHeight;
+ __mandreel_internal_SetResolution(sp);
+ __mandreel_internal_init(g_stack_pointer+800*1024);
+ __init(g_stack_pointer+800*1024);
+ }
+}
+
+////////////////////////////////////////////
+function mandreelAppDraw(elapsed)
+{
+ if ( mandreelAppPlatform == "webgl" || mandreelAppPlatform == "canvas" )
+ {
+ if ( mandreelAppPlatform == "canvas" && imandreel_ctx_canvas != null )
+ {
+ var canvas = Mandreel_document.getElementById(mandreelAppCanvasName);
+ imandreel_ctx_canvas.clearRect(0,0,canvas.width,canvas.height);
+ }
+ var sp = g_stack_pointer+800*1024;
+ __mandreel_internal_preupdate(sp);
+ heapU32[sp>>2] = elapsed;
+ __draw(sp);
+ __mandreel_internal_update(sp);
+ __mandreel_process_async_calls();
+ }
+}
+
+////////////////////////////////////////////
+function mandreelAppMouseWheel(delta)
+{
+ if ( mandreelAppPlatform == "webgl" || mandreelAppPlatform == "canvas" )
+ {
+ var i7 = MandreelLockFrame();
+ heap32[(i7+0)>>2] = delta;
+ __mouseWheelDelta(i7);
+ MandreelUnlockFrame();
+ }
+}
+
+////////////////////////////////////////////
+function mandreelAppMouseMove(x,y)
+{
+ if ( mandreelAppPlatform == "webgl" || mandreelAppPlatform == "canvas" )
+ {
+ var i7 = MandreelLockFrame();
+ heap32[(i7+0)>>2] = x;
+ heap32[(i7+4)>>2] = y;
+ __mouseMove(i7);
+ MandreelUnlockFrame();
+ }
+}
+
+////////////////////////////////////////////
+function mandreelAppResize(x,y)
+{
+ if ( mandreelAppPlatform == "webgl" || mandreelAppPlatform == "canvas" )
+ {
+ var i7 = MandreelLockFrame();
+ heap32[(i7+0)>>2] = x;
+ heap32[(i7+4)>>2] = y;
+ __resize(i7);
+ heap32[(i7+0)>>2] = x;
+ heap32[(i7+4)>>2] = y;
+ __mandreel_internal_SetResolution(i7);
+ MandreelUnlockFrame();
+ }
+}
+
+////////////////////////////////////////////
+function mandreelAppMouseButton(down,x,y)
+{
+ if ( mandreelAppPlatform == "webgl" || mandreelAppPlatform == "canvas" )
+ {
+ var i7 = MandreelLockFrame();
+ heap32[(i7+0)>>2] = down;
+ heap32[(i7+4)>>2] = x;
+ heap32[(i7+8)>>2] = y;
+ __mouseButton(i7);
+ MandreelUnlockFrame();
+ }
+}
+
+////////////////////////////////////////////
+function mandreelAppMouseDblClick(x,y)
+{
+ if ( mandreelAppPlatform == "webgl" || mandreelAppPlatform == "canvas" )
+ {
+ var i7 = MandreelLockFrame();
+ heap32[(i7+0)>>2] = x;
+ heap32[(i7+4)>>2] = y;
+ __mouseDoubleClick(i7);
+ MandreelUnlockFrame();
+ }
+}
+
+////////////////////////////////////////////
+function mandreelAppKeyEvent(down,keyId)
+{
+ if ( mandreelAppPlatform == "webgl" || mandreelAppPlatform == "canvas" )
+ {
+ var i7 = MandreelLockFrame();
+ heap32[(i7+0)>>2] = down;
+ heap32[(i7+4)>>2] = keyId;
+ __keyEvent(i7);
+ MandreelUnlockFrame();
+ }
+}
+
+////////////////////////////////////////////
+function mandreelAppGetPlatform()
+{
+ return mandreelAppPlatform;
+}
+
+////////////////////////////////////////////
+function mandreelAppGetElementAbsolutePos(elementName)
+{
+ var element = Mandreel_document.getElementById(elementName);
+ var res = new Object();
+ res.x = 0; res.y = 0;
+ if (element !== null)
+ {
+ if (element.getBoundingClientRect)
+ {
+ var viewportElement = Mandreel_document.documentElement;
+ var box = element.getBoundingClientRect();
+ var scrollLeft = viewportElement.scrollLeft;
+ var scrollTop = viewportElement.scrollTop;
+ res.x = box.left + scrollLeft;
+ res.y = box.top + scrollTop;
+ }
+ else
+ { //for old browsers
+ res.x = element.offsetLeft;
+ res.y = element.offsetTop;
+ var parentNode = element.parentNode;
+ var borderWidth = null;
+ while (offsetParent != null)
+ {
+ res.x += offsetParent.offsetLeft;
+ res.y += offsetParent.offsetTop;
+ var parentTagName = offsetParent.tagName.toLowerCase();
+ if ((__isIEOld && parentTagName != "table") ||
+ ((__isFireFoxNew || __isChrome) &&
+ parentTagName == "td"))
+ {
+ borderWidth = kGetBorderWidth(offsetParent);
+ res.x += borderWidth.left;
+ res.y += borderWidth.top;
+ }
+
+ if (offsetParent != Mandreel_document.body &&
+ offsetParent != Mandreel_document.documentElement)
+ {
+ res.x -= offsetParent.scrollLeft;
+ res.y -= offsetParent.scrollTop;
+ }
+
+ //next lines are necessary to fix the problem
+ //with offsetParent
+ if (!__isIE && !__isOperaOld || __isIENew)
+ {
+ while (offsetParent != parentNode &&
+ parentNode !== null) {
+ res.x -= parentNode.scrollLeft;
+ res.y -= parentNode.scrollTop;
+ if (__isFireFoxOld || __isWebKit)
+ {
+ borderWidth =
+ kGetBorderWidth(parentNode);
+ res.x += borderWidth.left;
+ res.y += borderWidth.top;
+ }
+ parentNode = parentNode.parentNode;
+ }
+ }
+
+ parentNode = offsetParent.parentNode;
+ offsetParent = offsetParent.offsetParent;
+ }
+ }
+ }
+ return res;
+}
+function __getIEVersion()
+{
+ var rv = -1; // Return value assumes failure.
+ if (navigator.appName == 'Microsoft Internet Explorer')
+ {
+ var ua = navigator.userAgent;
+ var re = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
+ if (re.exec(ua) != null)
+ rv = parseFloat(RegExp.$1);
+ }
+ return rv;
+}
+function __getOperaVersion()
+{
+ var rv = 0; // Default value
+ if (Mandreel_window.opera)
+ {
+ var sver = Mandreel_window.opera.version();
+ rv = parseFloat(sver);
+ }
+ return rv;
+}
+/* The following code was removed for benchmarking:
+var __userAgent = navigator.userAgent;
+var __isIE = navigator.appVersion.match(/MSIE/) != null;
+var __IEVersion = __getIEVersion();
+var __isIENew = __isIE && __IEVersion >= 8;
+var __isIEOld = __isIE && !__isIENew;
+var __isFireFox = __userAgent.match(/firefox/i) != null;
+var __isFireFoxOld = __isFireFox && ((__userAgent.match(/firefox\/2./i) != null) || (__userAgent.match(/firefox\/1./i) != null));
+var __isFireFoxNew = __isFireFox && !__isFireFoxOld;
+var __isWebKit = navigator.appVersion.match(/WebKit/) != null;
+var __isChrome = navigator.appVersion.match(/Chrome/) != null;
+var __isOpera = Mandreel_window.opera != null;
+var __operaVersion = __getOperaVersion();
+var __isOperaOld = __isOpera && (__operaVersion < 10); */
+function __parseBorderWidth(width)
+{
+ var res = 0;
+ if (typeof(width) == "string" && width != null && width != "" )
+ {
+ var p = width.indexOf("px");
+ if (p >= 0)
+ {
+ res = parseInt(width.substring(0, p));
+ }
+ else
+ {
+ //do not know how to calculate other values (such as 0.5em or 0.1cm) correctly now so just set the width to 1 pixel
+ res = 1;
+ }
+ }
+ return res;
+}
+function __getBorderWidth(element)
+{
+ var res = new Object();
+ res.left = 0; res.top = 0; res.right = 0; res.bottom = 0;
+ if (Mandreel_window.getComputedStyle)
+ {
+ //for Firefox
+ var elStyle = Mandreel_window.getComputedStyle(element, null);
+ res.left = parseInt(elStyle.borderLeftWidth.slice(0, -2));
+ res.top = parseInt(elStyle.borderTopWidth.slice(0, -2));
+ res.right = parseInt(elStyle.borderRightWidth.slice(0, -2));
+ res.bottom = parseInt(elStyle.borderBottomWidth.slice(0, -2));
+ }
+ else
+ {
+ //for other browsers
+ res.left = __parseBorderWidth(element.style.borderLeftWidth);
+ res.top = __parseBorderWidth(element.style.borderTopWidth);
+ res.right = __parseBorderWidth(element.style.borderRightWidth);
+ res.bottom = __parseBorderWidth(element.style.borderBottomWidth);
+ }
+ return res;
+}
+
+
+////////////////////////////////////////////
+// WebGL
+////////////////////////////////////////////
+ var imandreel_gl = null;
+ var imandreel_ctx_canvas = null;
+ var imandreel_is_ready = 0;
+ var imandreel_oldTime = Date_now();
+
+ function mandreel_wheel(event) { imandreel_onMouseWheel(event);event.preventDefault(); event.returnValue=false; }
+
+ ////////////////////////////////////////////
+ function mandreelAppStartRenderWebGL()
+ {
+/* The following code was removed for benchmarking:
+ var canvas = document.getElementById(mandreelAppCanvasName);
+
+ mandreelAppCanvasWidth = canvas.width;
+ mandreelAppCanvasHeight = canvas.height;
+
+ // Register event handlers
+ if(window.addEventListener){ window.addEventListener('DOMMouseScroll',mandreel_wheel,false); } window.onmousewheel=document.onmousewheel=mandreel_wheel;
+
+ window.addEventListener('mousedown',imandreel_onMouseDown,false);
+ window.addEventListener('mouseup',imandreel_onMouseUp,false);
+ window.addEventListener('mousemove',imandreel_onMouseMove,false);
+ window.addEventListener('dblclick',imandreel_onMouseDblClick,false);
+
+ document.body.oncontextmenu = function() { return false;};
+
+ var canvasDiv = document.getElementById(mandreelAppCanvasDiv);
+ canvasDiv.addEventListener('keydown',imandreel_onKeyDown,false);
+ canvasDiv.addEventListener('keyup',imandreel_onKeyUp,false);
+ canvasDiv.focus();*/
+
+ // Call mandreel app init funtion (__init())
+ mandreelAppInit();
+
+ // Start rendering
+ imandreel_is_ready = 1;
+ //imandreel_render();
+ }
+
+ ////////////////////////////////////////////
+ function imandreel_render()
+ {
+ if( ABORT )
+ return;
+
+ var canvas = Mandreel_document.getElementById(mandreelAppCanvasName);
+ WebGLUtils.requestAnimationFrame(canvas, imandreel_render);
+
+
+ // Reshape
+ if (canvas.clientWidth != mandreelAppCanvasWidth || canvas.clientHeight != mandreelAppCanvasHeight)
+ {
+ mandreelAppCanvasWidth = canvas.clientWidth;
+ mandreelAppCanvasHeight = canvas.clientHeight;
+ imandreel_gl.viewport(0, 0, mandreelAppCanvasWidth, mandreelAppCanvasHeight);
+ }
+
+ // Set the focus to the canvas div
+ if (mandreelAppForceFocus)
+ {
+ var canvasDiv = Mandreel_document.getElementById(mandreelAppCanvasDiv);
+ canvasDiv.focus();
+ }
+
+ // Call mandreel app draw funtion (__draw())
+ var nowTime = Date_now();
+ if (!g_mandreel_frame_locked)
+ {
+ g_mandreel_frame_inframe = true;
+ if (!_imandreel_pause_game)
+ mandreelAppDraw(nowTime-imandreel_oldTime);
+ g_mandreel_frame_inframe = false;
+ }
+ imandreel_oldTime = nowTime;
+ }
+
+ function render()
+ {
+ // Call mandreel app draw funtion (__draw())
+ var nowTime = Date_now();
+ if (!g_mandreel_frame_locked)
+ {
+ g_mandreel_frame_inframe = true;
+ if (!_imandreel_pause_game)
+ mandreelAppDraw(nowTime-imandreel_oldTime);
+ g_mandreel_frame_inframe = false;
+ }
+ imandreel_oldTime = nowTime;
+ }
+
+ var imandreel_last_movex = 0;
+ var imandreel_last_movey = 0;
+
+ ////////////////////////////////////////////
+ function imandreel_onMouseMove(e)
+ {
+ if (!imandreel_is_ready)
+ return;
+
+ if (_imandreel_pause_game)
+ return;
+
+ var pos = mandreelAppGetElementAbsolutePos(mandreelAppCanvasName);
+ var setX = e.clientX - pos.x;
+ var setY = e.clientY - pos.y;
+
+ if(navigator.pointer && navigator.pointer.isLocked) {
+ var deltaX = event.movementX || event.webkitMovementX || event.mozMovementX || 0;
+ var deltaY = event.movementY || event.webkitMovementY || event.mozMovementX || 0;
+
+ setX = imandreel_last_movex+deltaX;
+ setY = imandreel_last_movey+deltaY;
+ }
+
+
+ imandreel_last_movex = setX;
+ imandreel_last_movey = setY;
+ mandreelAppMouseMove(setX,setY);
+ }
+
+ ////////////////////////////////////////////
+ function imandreel_onMouseDblClick(e)
+ {
+ if (!imandreel_is_ready)
+ return;
+
+ if (_imandreel_pause_game)
+ return;
+
+ var pos = mandreelAppGetElementAbsolutePos(mandreelAppCanvasName);
+ var setX = e.clientX - pos.x;
+ var setY = e.clientY - pos.y;
+ mandreelAppMouseDblClick(setX,setY);
+ }
+
+ ////////////////////////////////////////////
+ var mandreel_mouse_down = false;
+ var mandreel_rmouse_down = false;
+ function imandreel_onMouseDown(e)
+ {
+ if (!imandreel_is_ready)
+ return;
+
+ if (_imandreel_pause_game)
+ return;
+
+ var rightclick;
+ if (!e) var e = Mandreel_window.event;
+ if (e.which) rightclick = (e.which == 3);
+ else if (e.button) rightclick = (e.button == 2);
+
+ var pos = mandreelAppGetElementAbsolutePos(mandreelAppCanvasName);
+ var setX = e.clientX - pos.x;
+ var setY = e.clientY - pos.y;
+
+ if (!rightclick)
+ {
+ if (mandreel_mouse_down)
+ return;
+
+ mandreel_mouse_down = true;
+ mandreelAppMouseButton(1,setX,setY);
+ }
+ else
+ {
+ if (mandreel_rmouse_down)
+ return;
+
+ mandreel_rmouse_down = true;
+ mandreelAppMouseButton(3,setX,setY);
+ }
+ }
+
+ ////////////////////////////////////////////
+ function imandreel_onMouseUp(e)
+ {
+ if (!imandreel_is_ready)
+ return;
+
+ if (_imandreel_pause_game)
+ return;
+
+ var rightclick;
+ if (!e) var e = Mandreel_window.event;
+ if (e.which) rightclick = (e.which == 3);
+ else if (e.button) rightclick = (e.button == 2);
+
+ var pos = mandreelAppGetElementAbsolutePos(mandreelAppCanvasName);
+ var setX = e.clientX - pos.x;
+ var setY = e.clientY - pos.y;
+
+
+ if (!rightclick)
+ {
+ if (mandreel_mouse_down == false)
+ return;
+
+ mandreel_mouse_down = false;
+ mandreelAppMouseButton(0,setX,setY);
+ }
+ else
+ {
+ if (mandreel_rmouse_down == false)
+ return;
+
+ mandreel_rmouse_down = false;
+ mandreelAppMouseButton(2,setX,setY);
+ }
+ }
+
+ ////////////////////////////////////////////
+ function imandreel_onMouseWheel(e)
+ {
+ if (!imandreel_is_ready)
+ return;
+
+ if (_imandreel_pause_game)
+ return;
+
+ mandreelAppMouseWheel(e.wheelDelta);
+ }
+
+ ////////////////////////////////////////////
+ function imandreel_onKeyUp(e)
+ {
+ if (!imandreel_is_ready)
+ return;
+
+ if (_imandreel_pause_game)
+ return;
+
+ var KeyID = e.keyCode;
+ mandreelAppKeyEvent(0,KeyID);
+ }
+
+ ////////////////////////////////////////////
+ Mandreel_window.onkeydown = function(e)
+ {
+ if (mandreelDisableSpaceKey == false && e.keyCode == 32)
+ return;
+ return !(e.keyCode == 32 || e.keyCode == 9);
+ };
+
+ ////////////////////////////////////////////
+ function imandreel_onKeyDown(e)
+ {
+ if (e.which === 8) // disable back button on browser
+ {
+ e.preventDefault();
+ }
+ if (!imandreel_is_ready)
+ return;
+
+ if (_imandreel_pause_game)
+ return;
+
+ var KeyID = e.keyCode;
+ mandreelAppKeyEvent(1,KeyID);
+ }
+
+
+////////////////////////////////////////////
+// Flash
+////////////////////////////////////////////
+
+(function(){
+ try {
+ // Disabling SWFObject's Autohide feature
+ if (typeof swfobject.switchOffAutoHideShow === "function") {
+ swfobject.switchOffAutoHideShow();
+ }
+ } catch(e) {}
+ })();
+
+var imandreel_flash_global_sp = 0;
+var imandreel_flash_global_sp2 = 0;
+var imandreel_flash_current_sp = 0;
+
+function MandreelInterSwfLoaded2()
+{
+}
+function MandreelInterSwfLoaded()
+{
+ appStartState('scriptLoaded');
+ var flashMovie = swfobject.getObjectById(mandreelAppCanvasDiv)
+ dump(flashMovie.width);
+ flashMovie.MandreelInit();
+
+ imandreel_flash_global_sp = MandreelInterGetSWF().MandreelInterGetGlobalStack();
+ imandreel_flash_global_sp2 = MandreelInterGetSWF().MandreelInterGetGlobalStack2();
+ if ( mandreelAppStartStateFunc )
+ mandreelAppStartStateFunc("ready",mandreelAppCanvasWidth,mandreelAppCanvasHeight);
+}
+
+
+
+var g_mandreel_swf = null;
+
+function MandreelInterGetSWF()
+{
+ if (g_mandreel_swf)
+ return g_mandreel_swf;
+
+ g_mandreel_swf = swfobject.getObjectById(mandreelAppCanvasDiv)
+ return g_mandreel_swf;
+}
+
+function MandreelInterWriteInt(ptr, value)
+{
+ MandreelInterGetSWF().MandreelInterWriteInt(ptr,value);
+}
+
+function MandreelInterWriteFloat(ptr, value)
+{
+ MandreelInterGetSWF().MandreelInterWriteFloat(ptr,value);
+}
+
+function MandreelInterWriteString(ptr, value)
+{
+ MandreelInterGetSWF().MandreelInterWriteString(ptr,value);
+}
+
+function MandreelInterWriteWString(ptr, value)
+{
+ MandreelInterGetSWF().MandreelInterWriteWString(ptr,value);
+}
+
+function MandreelInterCallFunctionRaw(sp, func_name, returnType)
+{
+ return MandreelInterGetSWF().MandreelInterCallFunctionRaw(sp,func_name,returnType);
+}
+
+
+function assert(condition, _text) {
+//console.assert(condition, _text);
+ if (!condition) {
+ var text = "Assertion failed: " + _text;
+ alert(text + ':\n' + (new Error).stack);
+ ABORT = true;
+ throw "Assertion: " + text;
+ }
+ }
+
+
+
+function MandreelLockFrame()
+{
+ MandreelInterGetSWF().MandreelLockFrame();
+
+ imandreel_flash_current_sp += 300*1024;
+
+ assert(imandreel_flash_current_sp<1024*1024);
+
+ return imandreel_flash_current_sp;
+}
+
+function MandreelPause()
+{
+ MandreelInterGetSWF().MandreelPause();
+}
+
+function MandreelResume()
+{
+ MandreelInterGetSWF().MandreelResume();
+}
+
+
+function MandreelUnlockFrame()
+{
+ imandreel_flash_current_sp -= 300*1024;
+ MandreelInterGetSWF().MandreelUnlockFrame();
+}
+
+
+
+function MandreelInterCallFunctionAsync(func_name,param)
+{
+ return MandreelInterGetSWF().MandreelInterCallFunctionAsync(func_name, param);
+}
+
+
+function MandreelInterCallFunction(returnType,func_name)
+{
+ var size_params = 0;
+
+ var i;
+ var num_params = (arguments.length-2)/2;
+ num_params|=0;
+ for (i=2;i<num_params*2+2;i+=2)
+ {
+ var type = arguments[i];
+
+ var size_arg = 0;
+ switch(type)
+ {
+ case 'int':
+ size_arg = 4;
+ break;
+ case 'float':
+ size_arg = 4;
+ break;
+ case 'string':
+ size_arg = 4;
+ size_arg += ((arguments[i+1].length + 4) & 0xfffffffc);
+ break;
+ case 'wstring':
+ size_arg = 4;
+ size_arg += ((arguments[i+1].length*2 + 4) & 0xfffffffc);
+ break;
+ default:
+ assert(false);
+ }
+
+ size_params += size_arg;
+ }
+
+ // stack always 8 byte aligned
+ size_params=((size_params+7)& 0xfffffff8);
+
+ var sp = 0;
+
+ if (i<(arguments.length))
+ sp = arguments[i];
+ else
+ {
+ assert(false);
+ }
+
+
+ sp-=size_params;
+
+ MandreelLockFrame();
+
+ var offset = 0;
+ var ptr_data = num_params*4+sp;
+ for (i=2;i<num_params*2+2;i+=2)
+ {
+ var type = arguments[i];
+
+
+ var size_arg = 0;
+ switch(type)
+ {
+ case 'int':
+ MandreelInterWriteInt((sp+offset),arguments[i+1]);
+ break;
+ case 'float':
+ MandreelInterWriteFloat((sp+offset),arguments[i+1]);
+ break;
+ case 'string':
+ {
+ MandreelInterWriteInt((sp+offset),ptr_data);
+ var string = arguments[i+1];
+ MandreelInterWriteString(ptr_data,string);
+
+ ptr_data += ((string.length + 4) & 0xfffffffc);
+ }
+ break;
+ case 'wstring':
+ {
+ MandreelInterWriteInt((sp+offset),ptr_data);
+ var string = arguments[i+1];
+ MandreelInterWriteWString(ptr_data,string);
+
+ ptr_data += ((string.length*2 + 4) & 0xfffffffc);
+ }
+ break;
+ default:
+ assert(false);
+ }
+ offset+=4;
+ }
+
+ return_value = MandreelInterCallFunctionRaw(sp, func_name, returnType);
+
+ MandreelUnlockFrame();
+
+ if (returnType == 'int')
+ return parseInt(return_value);
+ else if (returnType == 'float')
+ return parseFloat(return_value);
+
+ return;
+}
+
+
+
+// file system
+
+var g_mandreel_timestamp_fs = 0;
+var g_mandreel_fs = null;
+
+function onMandreelQuotaOk(fs)
+{
+ g_mandreel_fs = fs;
+ dump('onMandreelQuotaOk');
+}
+
+
+function MandreelFsErrorHandler(e) {
+ var msg = '';
+
+ switch (e.code) {
+ case FileError.QUOTA_EXCEEDED_ERR:
+ msg = 'QUOTA_EXCEEDED_ERR';
+ break;
+ case FileError.NOT_FOUND_ERR:
+ msg = 'NOT_FOUND_ERR';
+ break;
+ case FileError.SECURITY_ERR:
+ msg = 'SECURITY_ERR';
+ break;
+ case FileError.INVALID_MODIFICATION_ERR:
+ msg = 'INVALID_MODIFICATION_ERR';
+ break;
+ case FileError.INVALID_STATE_ERR:
+ msg = 'INVALID_STATE_ERR';
+ break;
+ default:
+ msg = 'Unknown Error';
+ break;
+ };
+
+ dump('Error: ' + msg);
+ dump(e);
+}
+
+var indexedDB = Mandreel_window.indexedDB || Mandreel_window.webkitIndexedDB ||
+ Mandreel_window.mozIndexedDB;
+
+if ('webkitIndexedDB' in Mandreel_window) {
+ Mandreel_window.IDBTransaction = Mandreel_window.webkitIDBTransaction;
+ Mandreel_window.IDBKeyRange = Mandreel_window.webkitIDBKeyRange;
+}
+
+
+var mandreel_indexedDB = {};
+mandreel_indexedDB.db = null;
+mandreel_indexedDB.callback_init = false;
+
+mandreel_indexedDB.onerror = function(e) {
+ dump(e);
+};
+
+mandreel_indexedDB.init = function(callback)
+{
+ try {
+ var request = indexedDB.open('my_cache', 2);
+
+ request.onerror = function(event) {
+ callback(false);
+ };
+ request.onupgradeneeded = function(event) {
+ dump('onupgradeneeded\n');
+ mandreel_indexedDB.db = event.target.result;
+ var db = mandreel_indexedDB.db;
+ var objectStore = db.createObjectStore("cache",{keyPath: "fileName"});
+ }
+
+ request.onsuccess = function(event) {
+ dump('onsuccess\n');
+ mandreel_indexedDB.db = event.target.result;
+ callback(true);
+
+ };
+ }
+ catch(e)
+ {
+ callback(false);
+ }
+
+}
+
+function mandreel_fs_init(callback, size_bytes, url_time)
+{
+
+ g_mandreel_timestamp_fs = 99999999999999;
+
+
+
+
+ var aux = null;
+ try { aux = webkitStorageInfo; } catch(err) { aux = null; }
+ if (aux == null)
+ {
+ //callback(false);
+
+ var time_request = new XMLHttpRequest();
+ time_request.open('GET',url_time);
+ time_request.onreadystatechange = function()
+ {
+ if (time_request.readyState==4)
+ {
+ if (time_request.status==200 || time_request.status==0)
+ {
+
+ if (time_request.responseText)
+ {
+ g_mandreel_timestamp_fs = parseFloat(time_request.responseText);
+ dump('mandreel_init_fs time ' + g_mandreel_timestamp_fs);
+ }
+ }
+
+ mandreel_indexedDB.init(callback);
+ }
+ }
+ time_request.send();
+
+
+ return;
+ }
+
+ webkitStorageInfo.requestQuota(
+ webkitStorageInfo.PERSISTENT , // or PERSISTENT
+ size_bytes,
+ function(bytes) { dump('request quota succeed');},
+ function () { dump('request quota failed');} );
+
+
+// g_mandreel_timestamp_fs =0;
+
+ var time_request = new XMLHttpRequest();
+ time_request.open('GET',url_time);
+ time_request.onreadystatechange = function()
+ {
+ if (time_request.readyState==4)
+ {
+ if (time_request.status==200 || time_request.status==0)
+ {
+
+ if (time_request.responseText)
+ {
+ g_mandreel_timestamp_fs = parseFloat(time_request.responseText);
+ dump('mandreel_init_fs time ' + g_mandreel_timestamp_fs);
+ }
+ }
+
+ var my_requestFileSystem = Mandreel_window.requestFileSystem || Mandreel_window.webkitRequestFileSystem;
+
+ my_requestFileSystem(Mandreel_window.PERSISTENT, size_bytes,
+ function(result)
+ {
+ onMandreelQuotaOk(result);
+
+
+ if (callback)
+ Mandreel_setTimeout(callback, 100, true);
+ } , function(e) { MandreelFsErrorHandler(e); if (callback) callback(false); } );
+ }
+ }
+ time_request.send();
+}
+
+
+mandreel_indexedDB.load = function(file_name, callback)
+{
+ var db = mandreel_indexedDB.db;
+ var trans = db.transaction(["cache"]);
+ var store = trans.objectStore("cache");
+
+ var key = file_name;
+
+ var getReq = store.get(key);
+ getReq.onsuccess = function (ev) {
+ if (getReq.result)
+ {
+ dump('chanka ' + g_mandreel_timestamp_fs + ' ' + getReq.result.timeStamp + '\n');
+ if (getReq.result.timeStamp>=g_mandreel_timestamp_fs)
+ callback(getReq.result.data);
+ else
+ callback(null);
+ }
+ else
+ callback(null);
+ }
+ getReq.onerror = function (ev) {
+ console.log("index.get failed. Error: " + ev.message);
+ }
+}
+
+function mandreel_fs_get_url(file_name, callback)
+{
+ if (mandreel_indexedDB.db)
+ {
+ callback(null);
+ return;
+ }
+
+
+ if (g_mandreel_fs == null)
+ {
+ callback(null);
+ return;
+ }
+
+ g_mandreel_fs.root.getFile(file_name, {}, function(fileEntry) {
+
+ fileEntry.getMetadata(function(metaData){
+ var my_seconds = metaData.modificationTime.getTime()/1000;
+
+ if (g_mandreel_timestamp_fs>my_seconds)
+ {
+ callback(null);
+ }
+ else
+ {
+ //alert('mandreel_fscachefile2');
+
+
+ if (Mandreel_window.localStorage.getItem(mandreel_fs_get_key(file_name)) != null)
+ callback(fileEntry.toURL());
+ else
+ callback(null);
+
+ }
+
+
+ }, MandreelFsErrorHandler);
+
+
+ }, function(error) {callback(null);});
+
+ return;
+
+}
+
+function mandreel_fs_load_binary(file_name, callback)
+ {
+ if (mandreel_indexedDB.db)
+ {
+ mandreel_indexedDB.load(file_name,callback);
+ return;
+ }
+
+
+ if (g_mandreel_fs == null)
+ {
+ callback(null);
+ return;
+ }
+
+
+ g_mandreel_fs.root.getFile(file_name, {}, function(fileEntry) {
+
+ fileEntry.getMetadata(function(metaData){
+ var my_seconds = metaData.modificationTime.getTime()/1000;
+
+ if (g_mandreel_timestamp_fs>my_seconds)
+ {
+ dump('mandreel_fscachefile1');
+ Mandreel_window.localStorage.removeItem(mandreel_fs_get_key(file_name));
+ fileEntry.remove(function() {
+ callback(null);
+ }, MandreelFsErrorHandler);
+
+ }
+ else
+ {
+ //alert('mandreel_fscachefile2');
+ dump('mandreel_fscachefile2 ' + my_seconds);
+
+ fileEntry.file(function(file) {
+
+ var reader = new FileReader();
+
+
+ reader.onloadend = function(e) {
+
+ if (this.result.byteLength && Mandreel_window.localStorage.getItem(mandreel_fs_get_key(file_name)) != null)
+ {
+ dump('mandreel_fs_loadFile ' + file_name);
+ callback(this.result);
+ }
+ else
+ callback(null);
+
+ };
+
+
+ reader.readAsArrayBuffer(file);
+
+
+ }, MandreelFsErrorHandler);
+
+ }
+
+
+ }, MandreelFsErrorHandler);
+
+
+ }, function(error) {dump('mandreel_fscachefile3'); callback(null);});
+
+ return;
+ }
+
+
+ mandreel_indexedDB.save = function(file_name, data)
+{
+ var db = mandreel_indexedDB.db;
+
+
+ var trans = db.transaction(["cache"], IDBTransaction.READ_WRITE);
+ var store = trans.objectStore("cache");
+ var request = store.put({
+ "data": data,
+ "timeStamp" : Date_now()/1000,
+ "fileName" : file_name
+ });
+
+ request.onsuccess = function(e) {
+ // Re-render all the todo's
+ // html5rocks.indexedDB.getAllTodoItems();
+ dump('mandreel_indexedDB.save ok ');
+ };
+
+ request.onerror = function(e) {
+ dump('mandreel_indexedDB.save onerror ' + file_name);
+ dump(e);
+ };
+}
+
+function mandreel_fs_get_key(name)
+{
+ return 'mandreel_fs_' + name;
+}
+
+function mandreel_is_filesystem()
+{
+ if (mandreel_indexedDB.db)
+ return false;
+
+ if (!g_mandreel_fs)
+ return false;
+
+ return true;
+}
+
+function mandreel_is_indexeddb()
+{
+ if (mandreel_indexedDB.db)
+ return true;
+
+ return false;
+}
+
+ function mandreel_fs_saveFile(name, my_arrayBuffer)
+{
+ if (mandreel_indexedDB.db)
+ {
+ mandreel_indexedDB.save(name,my_arrayBuffer);
+ return;
+ }
+
+ if (!g_mandreel_fs)
+ return;
+
+ Mandreel_window.localStorage.removeItem(mandreel_fs_get_key(name));
+ g_mandreel_fs.root.getFile(name, {create: true}, function(fileEntry) {
+
+ // Create a FileWriter object for our FileEntry (log.txt).
+ fileEntry.createWriter(function(fileWriter) {
+
+ fileWriter.onwriteend = function(e) {
+ Mandreel_window.localStorage.setItem(mandreel_fs_get_key(name),'valid');
+ dump('Write completed.');
+ };
+
+ fileWriter.onerror = function(e) {
+ dump('Write failed: ' + e.toString());
+ };
+
+ var my_BlobBuilder = Mandreel_window.MozBlobBuilder || Mandreel_window.WebKitBlobBuilder || Mandreel_window.BlobBuilder;
+
+ var bb = new my_BlobBuilder(); // Note: window.WebKitBlobBuilder in Chrome 12.
+ bb.append(my_arrayBuffer);
+ fileWriter.write(bb.getBlob('text/plain'));
+
+
+
+ }, MandreelFsErrorHandler);
+
+ }, MandreelFsErrorHandler);
+}
+
+
+function mandreel_fs_load_text(file_name, callback)
+ {
+
+ if (mandreel_indexedDB.db)
+ {
+ mandreel_indexedDB.load(file_name,callback);
+ return;
+ }
+
+ if (g_mandreel_fs == null)
+ {
+ callback(null);
+ return;
+ }
+
+
+ g_mandreel_fs.root.getFile(file_name, {}, function(fileEntry) {
+
+ fileEntry.getMetadata(function(metaData){
+ var my_seconds = metaData.modificationTime.getTime()/1000;
+
+ if (g_mandreel_timestamp_fs>my_seconds)
+ {
+ dump('mandreel_fscachefile1');
+ Mandreel_window.localStorage.removeItem(mandreel_fs_get_key(file_name));
+ fileEntry.remove(function() {
+ callback(null);
+ }, MandreelFsErrorHandler);
+
+ }
+ else
+ {
+ //alert('mandreel_fscachefile2');
+ dump('mandreel_fscachefile2 ' + my_seconds);
+
+ fileEntry.file(function(file) {
+
+ var reader = new FileReader();
+
+
+ reader.onloadend = function(e) {
+
+
+ if (this.result.length && Mandreel_window.localStorage.getItem(mandreel_fs_get_key(file_name)) != null)
+ {
+ dump('mandreel_fs_loadFile ' + file_name);
+ callback(this.result);
+ }
+ else
+ callback(null);
+
+ };
+
+
+ reader.readAsText(file);
+
+
+ }, MandreelFsErrorHandler);
+
+ }
+
+
+ }, MandreelFsErrorHandler);
+
+
+ }, function(error) {dump('mandreel_fscachefile3'); callback(null);});
+
+ return;
+ }
+
+
+ // full screen
+
+
+/* The following code was removed for benchmarking:
+ var __screen = screen; */
+
+ try
+ {
+ (function(global) {
+ "use strict";
+ var elementPrototype = (global.HTMLElement || global.Element)["prototype"];
+
+ // document.isFullScreen
+ if(!Mandreel_document.hasOwnProperty("fullscreenEnabled")) {
+ var getter = (function() {
+ // These are the functions that match the spec, and should be preferred
+ if("webkitIsFullScreen" in Mandreel_document) {
+ return function() { return Mandreel_document.webkitIsFullScreen; }
+ }
+ if("mozFullScreen" in Mandreel_document) {
+ return function() { return Mandreel_document.mozFullScreen; }
+ }
+ return function() { return false }; // not supported, never fullscreen
+ })();
+
+ Object.defineProperty(Mandreel_document, "fullscreenEnabled", {
+ enumerable: true, configurable: false, writeable: false,
+ get: getter
+ });
+ }
+
+ if(!Mandreel_document.hasOwnProperty("fullscreenElement")) {
+ var getter = (function() {
+ // These are the functions that match the spec, and should be preferred
+ if("webkitFullscreenElement" in Mandreel_document) {
+ return function() { return Mandreel_document.webkitFullscreenElement; }
+ }
+ if("mozFullscreenElemen" in Mandreel_document) {
+ return function() { return Mandreel_document.mozFullscreenElemen; }
+ }
+ return function() { return null }; // not supported
+ })();
+
+ Object.defineProperty(Mandreel_document, "fullscreenElement", {
+ enumerable: true, configurable: false, writeable: false,
+ get: getter
+ });
+ }
+
+ // Document event: fullscreenchange
+ function fullscreenchange(oldEvent) {
+ var newEvent = Mandreel_document.createEvent("CustomEvent");
+ newEvent.initCustomEvent("fullscreenchange", true, false, null);
+ // TODO: Any need for variable copy?
+ Mandreel_document.dispatchEvent(newEvent);
+ }
+ Mandreel_document.addEventListener("webkitfullscreenchange", fullscreenchange, false);
+ Mandreel_document.addEventListener("mozfullscreenchange", fullscreenchange, false);
+
+ // Document event: fullscreenerror
+ function fullscreenerror(oldEvent) {
+ var newEvent = Mandreel_document.createEvent("CustomEvent");
+ newEvent.initCustomEvent("fullscreenerror", true, false, null);
+ // TODO: Any need for variable copy?
+ Mandreel_document.dispatchEvent(newEvent);
+ }
+ Mandreel_document.addEventListener("webkitfullscreenerror", fullscreenerror, false);
+ Mandreel_document.addEventListener("mozfullscreenerror", fullscreenerror, false);
+
+ // element.requestFullScreen
+ if(!elementPrototype.requestFullScreen) {
+ elementPrototype.requestFullScreen = (function() {
+ if(elementPrototype.webkitRequestFullScreen) {
+ return function() {
+ this.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT);
+ }
+ }
+
+ return elementPrototype.mozRequestFullScreen ||
+ function(){ /* unsupported, fail silently */ };
+ })();
+ }
+
+ // document.cancelFullscreen
+ if(!Mandreel_document.cancelFullScreen) {
+ Mandreel_document.cancelFullScreen = (function() {
+ return Mandreel_document.webkitCancelFullScreen ||
+ Mandreel_document.mozCancelFullScreen ||
+ function(){ /* unsupported, fail silently */ };
+ })();
+ }
+ })((typeof(exports) != 'undefined') ? global : Mandreel_window);
+ }
+ catch(e)
+ {
+ }
+
+
+try
+ {
+var __onErrorFullscreen = function() {
+ dump("Mouse lock was not successful.");
+};
+
+Mandreel_document.addEventListener('fullscreenchange', function(e) {
+
+var width;
+var height;
+ var canvas = Mandreel_document.getElementById(mandreelAppCanvasName);
+ if(Mandreel_document.fullscreenEnabled) {
+
+
+ width = __screen.width;
+ height = __screen.height;
+
+ } else {
+ width = mandreelAppWidthSrc;
+ height = mandreelAppHeightSrc;
+ }
+
+ canvas.width = width;
+ canvas.height = height;
+ mandreelAppResize(width, height);
+
+ if (Mandreel_document.fullscreenEnabled && navigator.pointer) {
+ navigator.pointer.lock(Mandreel_document.body, function() {
+ // Locked and ready to play.
+ }, __onErrorFullscreen);
+ }
+}, false);
+
+}
+catch(e)
+{
+}
+
+
+
+function mandreelAppFullscreen(enable)
+{
+ var canvas = Mandreel_document.getElementById(mandreelAppCanvasName);
+ if ( mandreelAppPlatform == "webgl" || mandreelAppPlatform == "canvas" )
+ {
+ if (canvas)
+ {
+ if (enable)
+ canvas.requestFullScreen();
+ else
+ Mandreel_document.cancelFullScreen();
+ }
+ }
+}
+
+
+function mandreelAppDisableForceFocus()
+{
+ mandreelAppForceFocus = false;
+}
+
+function mandreelAppEnableForceFocus()
+{
+ mandreelAppForceFocus = true;
+}
+
+var imandreel_base64 = {};
+imandreel_base64.PADCHAR = '=';
+imandreel_base64.ALPHA = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
+
+imandreel_base64.makeDOMException = function() {
+ // sadly in FF,Safari,Chrome you can't make a DOMException
+ var e, tmp;
+
+ try {
+ return new DOMException(DOMException.INVALID_CHARACTER_ERR);
+ } catch (tmp) {
+ // not available, just passback a duck-typed equiv
+ // https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/Error
+ // https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/Error/prototype
+ var ex = new Error("DOM Exception 5");
+
+ // ex.number and ex.description is IE-specific.
+ ex.code = ex.number = 5;
+ ex.name = ex.description = "INVALID_CHARACTER_ERR";
+
+ // Safari/Chrome output format
+ ex.toString = function() { return 'Error: ' + ex.name + ': ' + ex.message; };
+ return ex;
+ }
+}
+
+imandreel_base64.getbyte64 = function(s,i) {
+ // This is oddly fast, except on Chrome/V8.
+ // Minimal or no improvement in performance by using a
+ // object with properties mapping chars to value (eg. 'A': 0)
+ var idx = imandreel_base64.ALPHA.indexOf(s.charAt(i));
+ if (idx === -1) {
+ throw imandreel_base64.makeDOMException();
+ }
+ return idx;
+}
+
+imandreel_base64.decode = function(s) {
+ // convert to string
+ s = '' + s;
+ var getbyte64 = imandreel_base64.getbyte64;
+ var pads, i, b10;
+ var imax = s.length
+ if (imax === 0) {
+ return s;
+ }
+
+ if (imax % 4 !== 0) {
+ throw imandreel_base64.makeDOMException();
+ }
+
+ pads = 0
+ if (s.charAt(imax - 1) === imandreel_base64.PADCHAR) {
+ pads = 1;
+ if (s.charAt(imax - 2) === imandreel_base64.PADCHAR) {
+ pads = 2;
+ }
+ // either way, we want to ignore this last block
+ imax -= 4;
+ }
+
+ var x = [];
+ for (i = 0; i < imax; i += 4) {
+ b10 = (getbyte64(s,i) << 18) | (getbyte64(s,i+1) << 12) |
+ (getbyte64(s,i+2) << 6) | getbyte64(s,i+3);
+ x.push(String.fromCharCode(b10 >> 16, (b10 >> 8) & 0xff, b10 & 0xff));
+ }
+
+ switch (pads) {
+ case 1:
+ b10 = (getbyte64(s,i) << 18) | (getbyte64(s,i+1) << 12) | (getbyte64(s,i+2) << 6);
+ x.push(String.fromCharCode(b10 >> 16, (b10 >> 8) & 0xff));
+ break;
+ case 2:
+ b10 = (getbyte64(s,i) << 18) | (getbyte64(s,i+1) << 12);
+ x.push(String.fromCharCode(b10 >> 16));
+ break;
+ }
+ return x.join('');
+}
+
+if (!Mandreel_window.atob) {
+Mandreel_window.atob = function(a) { return imandreel_base64.decode(a); }
+}
+
+
+function imandreel_interop_callbridge(new_method, sp)
+{
+
+ var n = new Array();
+
+ for( var i = 2; i < arguments.length; i++ )
+ {
+
+ if (typeof arguments[i] == 'string')
+ n.push(atob(arguments[i]));
+ else
+ n.push(arguments[i]);
+ }
+
+ var total_args = arguments.length-2;
+
+ switch(total_args)
+ {
+ case 0:
+ return Mandreel_window[new_method](sp);
+ case 1:
+ return Mandreel_window[new_method](sp, n[0]);
+ case 2:
+ return Mandreel_window[new_method](sp, n[0], n[1]);
+ case 3:
+ return Mandreel_window[new_method](sp, n[0], n[1], n[2]);
+ case 4:
+ return Mandreel_window[new_method](sp, n[0], n[1], n[2], n[3]);
+ case 5:
+ return Mandreel_window[new_method](sp, n[0], n[1], n[2], n[3], n[4]);
+ case 6:
+ return Mandreel_window[new_method](sp, n[0], n[1], n[2], n[3], n[4], n[5]);
+ case 7:
+ return Mandreel_window[new_method](sp, n[0], n[1], n[2], n[3], n[4], n[5], n[6]);
+ case 8:
+ return Mandreel_window[new_method](sp, n[0], n[1], n[2], n[3], n[4], n[5], n[6], n[7]);
+ case 9:
+ return Mandreel_window[new_method](sp, n[0], n[1], n[2], n[3], n[4], n[5], n[6], n[7], n[8]);
+ case 10:
+ return Mandreel_window[new_method](sp, n[0], n[1], n[2], n[3], n[4], n[5], n[6], n[7], n[8], n[9]);
+ case 11:
+ return Mandreel_window[new_method](sp, n[0], n[1], n[2], n[3], n[4], n[5], n[6], n[7], n[8], n[9], n[10]);
+ case 12:
+ return Mandreel_window[new_method](sp, n[0], n[1], n[2], n[3], n[4], n[5], n[6], n[7], n[8], n[9], n[10], n[11]);
+ case 13:
+ return Mandreel_window[new_method](sp, n[0], n[1], n[2], n[3], n[4], n[5], n[6], n[7], n[8], n[9], n[10], n[11], n[12]);
+ case 14:
+ return Mandreel_window[new_method](sp, n[0], n[1], n[2], n[3], n[4], n[5], n[6], n[7], n[8], n[9], n[10], n[11], n[12], n[13]);
+ case 15:
+ return Mandreel_window[new_method](sp, n[0], n[1], n[2], n[3], n[4], n[5], n[6], n[7], n[8], n[9], n[10], n[11], n[12], n[13], n[14]);
+ case 16:
+ return Mandreel_window[new_method](sp, n[0], n[1], n[2], n[3], n[4], n[5], n[6], n[7], n[8], n[9], n[10], n[11], n[12], n[13], n[14], n[15]);
+ break;
+ }
+
+}
+function imandreel_as3_dump(param)
+{
+ dump(atob(param));
+}
+
+
+var mandreel_embed_plugin;
+
+function PluginMandreelInterWriteInt(ptr, value)
+{
+ mandreel_embed_plugin.MandreelInterCalls("WriteInt", ptr,value);
+}
+
+function PluginMandreelInterWriteFloat(ptr, value)
+{
+ mandreel_embed_plugin.MandreelInterCalls("WriteFloat", ptr,value);
+}
+
+function PluginMandreelInterWriteString(ptr, value)
+{
+ mandreel_embed_plugin.MandreelInterCalls("WriteString", ptr,value);
+}
+
+function PluginMandreelInterWriteWString(ptr, value)
+{
+ mandreel_embed_plugin.MandreelInterCalls("WriteWString", ptr,value);
+}
+
+var mandreel_plugin_current_sp = 0;
+
+function PluginMandreelLockFrame()
+{
+ var result = mandreel_embed_plugin.MandreelInterCalls("LockFrame");
+
+ mandreel_plugin_current_sp+=300*1024;
+
+ assert(mandreel_plugin_current_sp<1024*1024);
+
+ return result+mandreel_plugin_current_sp;
+}
+
+function PluginMandreelPause()
+{
+ mandreel_embed_plugin.MandreelInterCalls("Pause");
+}
+
+function PluginMandreelResume()
+{
+ mandreel_embed_plugin.MandreelInterCalls("Resume");
+}
+
+
+function PluginMandreelUnlockFrame()
+{
+ mandreel_embed_plugin.MandreelInterCalls("UnlockFrame");
+
+ mandreel_plugin_current_sp-=300*1024;
+}
+
+function PluginMandreelInterCallFunction()
+{
+ var total_args = arguments.length;
+
+ switch(total_args)
+ {
+ case 0:
+ return mandreel_embed_plugin.MandreelInterCallFunction();
+ case 1:
+ return mandreel_embed_plugin.MandreelInterCallFunction(arguments[0]);
+ case 2:
+ return mandreel_embed_plugin.MandreelInterCallFunction(arguments[0], arguments[1]);
+ case 3:
+ return mandreel_embed_plugin.MandreelInterCallFunction(arguments[0], arguments[1], arguments[2]);
+ case 4:
+ return mandreel_embed_plugin.MandreelInterCallFunction(arguments[0], arguments[1], arguments[2], arguments[3]);
+ case 5:
+ return mandreel_embed_plugin.MandreelInterCallFunction(arguments[0], arguments[1], arguments[2], arguments[3], arguments[4]);
+ case 6:
+ return mandreel_embed_plugin.MandreelInterCallFunction(arguments[0], arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]);
+ case 7:
+ return mandreel_embed_plugin.MandreelInterCallFunction(arguments[0], arguments[1], arguments[2], arguments[3], arguments[4], arguments[5], arguments[6]);
+ case 8:
+ return mandreel_embed_plugin.MandreelInterCallFunction(arguments[0], arguments[1], arguments[2], arguments[3], arguments[4], arguments[5], arguments[6], arguments[7]);
+ case 9:
+ return mandreel_embed_plugin.MandreelInterCallFunction(arguments[0], arguments[1], arguments[2], arguments[3], arguments[4], arguments[5], arguments[6], arguments[7], arguments[8]);
+ case 10:
+ return mandreel_embed_plugin.MandreelInterCallFunction(arguments[0], arguments[1], arguments[2], arguments[3], arguments[4], arguments[5], arguments[6], arguments[7], arguments[8], arguments[9]);
+ case 11:
+ return mandreel_embed_plugin.MandreelInterCallFunction(arguments[0], arguments[1], arguments[2], arguments[3], arguments[4], arguments[5], arguments[6], arguments[7], arguments[8], arguments[9], arguments[10]);
+ case 12:
+ return mandreel_embed_plugin.MandreelInterCallFunction(arguments[0], arguments[1], arguments[2], arguments[3], arguments[4], arguments[5], arguments[6], arguments[7], arguments[8], arguments[9], arguments[10], arguments[11]);
+ case 13:
+ return mandreel_embed_plugin.MandreelInterCallFunction(arguments[0], arguments[1], arguments[2], arguments[3], arguments[4], arguments[5], arguments[6], arguments[7], arguments[8], arguments[9], arguments[10], arguments[11], arguments[12]);
+ case 14:
+ return mandreel_embed_plugin.MandreelInterCallFunction(arguments[0], arguments[1], arguments[2], arguments[3], arguments[4], arguments[5], arguments[6], arguments[7], arguments[8], arguments[9], arguments[10], arguments[11], arguments[12], arguments[13]);
+ case 15:
+ return mandreel_embed_plugin.MandreelInterCallFunction(arguments[0], arguments[1], arguments[2], arguments[3], arguments[4], arguments[5], arguments[6], arguments[7], arguments[8], arguments[9], arguments[10], arguments[11], arguments[12], arguments[13], arguments[14]);
+ case 16:
+ return mandreel_embed_plugin.MandreelInterCallFunction(arguments[0], arguments[1], arguments[2], arguments[3], arguments[4], arguments[5], arguments[6], arguments[7], arguments[8], arguments[9], arguments[10], arguments[11], arguments[12], arguments[13], arguments[14], arguments[15]);
+ break;
+ }
+}
+
+function mandreel_plugin_draw()
+{
+ var canvas = Mandreel_document.getElementById('canvasDiv');
+ WebGLUtils.requestAnimationFrame(canvas, mandreel_plugin_draw);
+ mandreel_embed_plugin.MandreelInterCalls("AppDraw");
+
+}
+
+function mandreelInitPluginPlatform(params)
+{
+
+ if ( params.width != null )
+ mandreelAppWidthSrc = params.width;
+
+ if ( params.height != null )
+ mandreelAppHeightSrc = params.height;
+
+
+ mandreel_embed_plugin = Mandreel_document.createElement('embed');
+ mandreel_embed_plugin.setAttribute('width',mandreelAppWidthSrc);
+ mandreel_embed_plugin.setAttribute('height',mandreelAppHeightSrc);
+ mandreel_embed_plugin.setAttribute('type',"application/halfbrick-npruntime-scriptable-plugin");
+
+ var div = Mandreel_document.getElementById('canvasDiv');
+
+
+ var oChild=div.firstChild;
+
+ div.replaceChild(mandreel_embed_plugin, oChild);
+
+ var flashElement = Mandreel_document.getElementById('FlashWrapper');
+ if ( flashElement != null )
+ {
+ flashElement.style.visibility = "hidden";
+ flashElement.style.width = "0px";
+ flashElement.style.height = "0px";
+ }
+
+
+
+
+
+ Mandreel_window.MandreelInterWriteInt = PluginMandreelInterWriteInt;
+ Mandreel_window.MandreelInterWriteFloat = PluginMandreelInterWriteInt;
+ Mandreel_window.MandreelInterWriteString = PluginMandreelInterWriteString;
+ Mandreel_window.MandreelInterWriteWString = PluginMandreelInterWriteWString;
+ Mandreel_window.MandreelLockFrame = PluginMandreelLockFrame;
+ Mandreel_window.MandreelUnlockFrame = PluginMandreelUnlockFrame;
+ Mandreel_window.MandreelInterCallFunction = PluginMandreelInterCallFunction;
+ Mandreel_window.MandreelPause = PluginMandreelPause;
+ Mandreel_window.MandreelResume = PluginMandreelResume;
+
+ Mandreel_setTimeout(function () {
+
+ if ( typeof(params.pluginSolutionName) != 'undefined' )
+ mandreel_embed_plugin.init(params.pluginDLL, params.pluginWorkingFolder,params.pluginSolutionName);
+ else
+ mandreel_embed_plugin.init(params.pluginDLL, params.pluginWorkingFolder);
+
+
+ mandreelAppStartStateFunc("ready",mandreelAppWidthSrc,mandreelAppHeightSrc);
+
+ Mandreel_setTimeout("mandreel_plugin_draw()", 16);
+ }, 100);
+
+}
+
+
+function MandreelInterSwfProgress(mode, percentage, bytes, totalbytes)
+{
+ imandreel_update_load(bytes, totalbytes);
+ if (mode == 'files')
+ {
+ if ( mandreelAppStartStateFunc )
+ mandreelAppStartStateFunc("loadingData",percentage);
+ }
+ else if (mode == 'audio')
+ {
+ if ( mandreelAppStartStateFunc )
+ mandreelAppStartStateFunc("loadingAudioUpdate",percentage);
+ }
+ else if (mode == 'textureasync')
+ {
+ if ( mandreelAppStartStateFunc )
+ mandreelAppStartStateFunc("loadingTextureAsyncPack",percentage);
+ }
+
+}
+
+function MandreelInterSwfCheckMethod(method)
+{
+ if (typeof(Mandreel_window[method])=="undefined")
+ return 0;
+ else
+ return 1;
+}
+
+// End of js/mandreelapp.js file.
+
+// Start of mandreel.js file.
+
+var mandreel_total_memory = 15908864;
+var mandreel_stack_memory = 1048576;
+var mandreel_heap_memory = 13591752; //init_memory = 744248
+/////////////////////////////////////////////
+// Heap
+/////////////////////////////////////////////
+var heap;
+var heap8;
+var heapU8;
+var heap16;
+var heapU16;
+var heap32;
+var heapU32;
+var heapFloat;
+var heapDouble;
+var heapNewPos = 512;
+
+var ABORT = false;
+
+var g_mandreel_cache_files = false;
+
+
+var g_mandreel_frame_locked = false;
+var g_mandreel_frame_inframe = false;
+
+var mandreel_cache_files = [];
+var g_mandreel_working_folder = 'DataPC/';
+var g_mandreel_datafiles_sufix = '.dat';
+var __FUNCTION_TABLE__ = [];
+var mandreel_pos_function_table = 1;
+function register_delegate(ptr_func)
+{
+ var functionId = mandreel_pos_function_table;
+ __FUNCTION_TABLE__[functionId] = ptr_func;
+
+ mandreel_pos_function_table++;
+ return functionId*4;
+}
+
+
+var g_addr_emit = 0;
+function emit_start(addr)
+{
+ g_addr_emit = addr;
+}
+
+function emit_8(data)
+{
+ heapU8[g_addr_emit] = data;
+ g_addr_emit++;
+}
+
+function emit_16(data)
+{
+ heapU16[g_addr_emit>>1] = data;
+ g_addr_emit+=2;
+}
+
+function emit_32(data)
+{
+ heapU32[g_addr_emit>>2] = data;
+ g_addr_emit+=4;
+}
+
+function emit_fill(data, size)
+{
+ var j;
+ for (j=0;j<size;j++)
+ {
+ heapU8[g_addr_emit] = data;
+ g_addr_emit++;
+ }
+}
+
+function emit_string(v)
+{
+ var j;
+ var len = v.length;
+ var data;
+
+ for(j = 0; j < len; j++)
+ {
+ data = v.charCodeAt(j);
+
+ heapU8[g_addr_emit] = data;
+ g_addr_emit++;
+ }
+}
+
+
+
+
+
+var g_stack_pointer = Malloc(mandreel_stack_memory);
+
+function assert_unalign()
+{
+ dump("fatal error: unaligned memory access detected!!!!");
+ assert(false);
+}
+
+function _assert(sp)
+{
+ var p0 = heap32[sp>>2];sp+=4;
+ var p1 = heap32[sp>>2];sp+=4;
+ var line = heap32[sp>>2];sp+=4;
+ var name = get_string_from_ptr(p0);
+ var file = get_string_from_ptr(p1);
+ assert(false, name + file + ' ' + line);
+}
+__cxa_pure_virtual.__index__ = 0;
+function __cxa_pure_virtual()
+{
+ assert(0);
+}
+
+// operator delete[]
+function _ZdaPv(sp)
+{
+ free(sp);
+}
+
+// operator delete
+function _ZdlPv(sp)
+{
+ free(sp);
+}
+
+// operator new[](unsigned int)
+function _Znaj(sp)
+{
+ malloc(sp);
+}
+// operator new[](unsigned int)
+function _Znwj(sp)
+{
+ malloc(sp);
+}
+
+function abort(sp)
+{
+ assert(0);
+}
+
+var r_g0 = 0;
+var r_g1 = 0;
+var f_g0 = 0;
+
+//isFinite(aux)
+//isNaN(aux)
+
+var tlsf_ptr = 0;
+
+
+function initHeap()
+{
+ heap = new ArrayBuffer(mandreel_total_memory);
+ heap8 = new Int8Array(heap);
+ heapU8 = new Uint8Array(heap);
+ heap16 = new Int16Array(heap);
+ heapU16 = new Uint16Array(heap);
+ heap32 = new Int32Array(heap);
+ heapU32 = new Uint32Array(heap);
+ heapFloat = new Float32Array(heap);
+ heapDouble = new Float64Array(heap);
+
+
+ for (var i=0;i<mandreel_total_memory/4;i++)
+ {
+ heapU32[i] = 0;
+ }
+}
+
+function Malloc(bytes)
+{
+ if ( heap == undefined )
+ {
+ //initHeap();
+ }
+ var newOffset = heapNewPos;
+ // Always 32 bit aligned
+ heapNewPos += ((bytes + 3) & 0xfffffffc);
+
+ if (heapNewPos>mandreel_total_memory)
+ {
+ assert(false);
+ }
+
+ return newOffset;
+}
+
+function assert(condition, _text) {
+//console.assert(condition, _text);
+ if (!condition) {
+ var text = "Assertion failed: " + _text;
+ alert(text + ':\n' + (new Error).stack);
+ ABORT = true;
+ throw "Assertion: " + text;
+ }
+ }
+
+ function my_assert(sp)
+ {
+ var p0 = heap32[sp>>2];sp+=4;
+ var p1 = heap32[sp>>2];sp+=4;
+ //var name = get_string_from_ptr(p1);
+
+ assert(false, 'hola');
+ }
+
+ function WriteHeapDouble(addr, value)
+ {
+ //assert((addr&7)==0);
+ heapDouble[addr>>3] = value;
+ }
+
+ function WriteHeapU64(addr, value)
+ {
+ heap32[addr>>2] = value.l;
+ heap32[(addr>>2)+1] = value.h;
+ }
+
+
+var arg_test_local = Malloc(8);
+function my_arg_test(sp)
+{
+ var ptr = heapU32[sp>>2];
+ var size = heapU32[(sp+4)>>2];
+
+ var arg = heapU32[ptr>>2];
+
+
+ if (size == 4)
+ {
+ heap32[ptr>>2] = arg+4;
+
+ arg = heap32[arg>>2];
+
+ heap32[arg_test_local>>2] = arg;
+
+ //dump('my_arg_test ' + arg + ' ' + ptr + '\n');
+
+ }
+ else
+ {
+ arg = (arg+7) & ~7;
+
+ heap32[ptr>>2] = arg+8;
+
+ //assert((arg&7)==0);
+ var value0 = heap32[arg>>2];
+ var value1 = heap32[(arg+4)>>2];
+ //arg = llvm_readDouble(arg);
+
+ //assert((arg_test_local&7)==0);
+
+ heap32[arg_test_local>>2] = value0;
+ heap32[(arg_test_local+4)>>2] = value1;
+
+ //llvm_writeDouble(arg_test_local,arg);
+
+ //dump('my_arg_test ' + arg + ' ' + ptr + '\n');
+
+
+ }
+
+
+
+
+ r_g0 = arg_test_local;
+}
+
+
+
+
+
+
+function uint(value) {
+ if (value >= 0) return value;
+ return 4294967296 + value;
+ }
+
+
+
+function puts(sp)
+{
+ var addr = heapU32[sp>>2];
+
+ var name = get_string_from_ptr(addr);
+
+ name+='\n';
+
+ dump(name);
+
+}
+
+function _Z11print_valued(_stack_pos, value)
+{
+ dump(value);
+ dump('\n');
+}
+
+function _Z11print_labelPKc(_stack_pos, addr)
+{
+ puts(_stack_pos,addr);
+ dump('\n');
+}
+
+
+
+
+function gettimeofday(sp)
+ {
+ var ptr = heap32[sp>>2];
+ var time_ms = Date_now();
+ heap32[ptr>>2] = time_ms/1000;
+ heap32[(ptr>>2)+1] = (time_ms%1000)*1000;
+ r_g0 = 0;
+ }
+
+
+ function free(sp)
+ {
+ var ptr = heapU32[sp>>2];
+ sp-=8;
+
+ heap32[(sp)>>2] = tlsf_ptr;
+ heap32[(sp+4)>>2] = ptr;
+ tlsf_free(sp);
+ }
+
+ function malloc_size(sp)
+ {
+ var ptr = heapU32[sp>>2];
+
+ sp-=4;
+
+ heap32[(sp)>>2] = ptr;
+ tlsf_block_size(sp);
+ }
+
+
+ function realloc(sp)
+ {
+ var ptr = heapU32[sp>>2];
+ var size = heapU32[(sp+4)>>2];
+
+ //assert(ptr == 0);
+
+ sp-=12;
+
+ //dump('realloc ' + sp + ' ' + ptr + ' ' + size + '\n');
+
+ heap32[(sp)>>2] = tlsf_ptr;
+ heap32[(sp+4)>>2] = ptr;
+ heap32[(sp+8)>>2] = size;
+ tlsf_realloc(sp);
+
+ //dump('return ' + r_g0 + '\n');
+ }
+
+ var llvm_double_addr = Malloc(8);
+
+ function llvm_writeDouble(addr,src)
+ {
+ //assert((llvm_double_addr&7)==0);
+ heapDouble[llvm_double_addr>>3] = src;
+
+ //assert((addr&7)==0);
+
+ var val0 = heap32[(llvm_double_addr)>>2];
+ var val1 = heap32[(llvm_double_addr+4)>>2];
+
+ heap32[(addr)>>2] = val0;
+ heap32[(addr+4)>>2] = val1;
+ }
+
+ function llvm_readDouble(addr)
+ {
+ //assert((addr&7)==0);
+
+ var val0 = heap32[(addr)>>2];
+ var val1 = heap32[(addr+4)>>2];
+
+ heap32[(llvm_double_addr)>>2] = val0;
+ heap32[(llvm_double_addr+4)>>2] = val1;
+
+
+// assert((llvm_double_addr&7)==0);
+ var result = heapDouble[llvm_double_addr>>3];
+
+
+ return result;
+
+ }
+
+ function llvm_move_double(addr_dst, addr_src)
+ {
+
+ var val0 = heapU32[(addr_src)>>2];
+ var val1 = heapU32[(addr_src+4)>>2];
+
+ heapU32[(addr_dst)>>2] = val0;
+ heapU32[(addr_dst+4)>>2] = val1;
+
+ }
+
+ function llvm_move_float(addr_dst, addr_src)
+ {
+ heapU32[(addr_dst)] = heapU32[(addr_src)];
+ }
+
+ function malloc(sp)
+ {
+ var size = heapU32[sp>>2];
+
+ if (size == 0)
+ {
+ size = 4;
+ }
+
+
+ if (tlsf_ptr == 0)
+ {
+ var addr = Malloc(mandreel_heap_memory);
+
+ sp-=8;
+ heap32[(sp)>>2] = addr;
+ heap32[(sp+4)>>2] = mandreel_heap_memory;
+ tlsf_create(sp);
+ tlsf_ptr = r_g0;
+ }
+
+ sp-=8;
+
+ heap32[(sp)>>2] = tlsf_ptr;
+ heap32[(sp+4)>>2] = size;
+ tlsf_malloc(sp);
+
+ if (r_g0 == 0)
+ {
+ dump('malloc failed ' + size + '\n');
+ assert(false);
+ }
+ }
+
+
+ function log10f(sp)
+ {
+ var value = heapFloat[sp>>2];
+ f_g0 = Math.log(value)/Math.LN10;
+ }
+
+ function log10(sp)
+ {
+ var value = heapDouble[sp>>3];
+ f_g0 = Math.log(value)/Math.LN10;
+ }
+
+function logf(sp)
+ {
+ var value = heapFloat[sp>>2];
+ f_g0 = Math.log(value);
+ }
+
+ function log(sp)
+ {
+ var value = heapDouble[sp>>3];
+ f_g0 = Math.log(value);
+ }
+
+
+
+ function cosf(sp)
+ {
+ var value = heapFloat[sp>>2];
+ f_g0 = Math.cos(value);
+ //assert (isNaN(f_g0) == false);
+ }
+
+ function acosf(sp)
+ {
+ var value = heapFloat[sp>>2];
+ f_g0 = Math.acos(value);
+ }
+
+ function asinf(sp)
+ {
+ var value = heapFloat[sp>>2];
+ f_g0 = Math.asin(value);
+ }
+
+ function asin(sp)
+ {
+ var value = heapDouble[sp>>3];
+ f_g0 = Math.asin(value);
+ }
+
+ function acos(sp)
+ {
+ var value = heapDouble[sp>>3];
+ f_g0 = Math.acos(value);
+ }
+
+ function floor(sp)
+ {
+ var value = heapDouble[sp>>3];
+ f_g0 = Math.floor(value);
+ }
+
+ function floorf(sp)
+ {
+ var value = heapFloat[sp>>2];
+ f_g0 = Math.floor(value);
+ }
+
+ function round(sp)
+ {
+ var value = heapDouble[sp>>3];
+ f_g0 = Math.round(value);
+ }
+
+ function roundf(sp)
+ {
+ var value = heapFloat[sp>>2];
+ f_g0 = Math.round(value);
+ }
+
+ function ceilf(sp)
+ {
+ var value = heapFloat[sp>>2];
+ f_g0 = Math.ceil(value);
+ }
+
+ function ceil(sp)
+ {
+ var value = heapDouble[sp>>3];
+ f_g0 = Math.ceil(value);
+ }
+
+
+ function exp2(sp)
+ {
+ var value = heapDouble[sp>>3];
+
+ f_g0 = Math.pow(2,value);
+ }
+
+ function exp2f(sp)
+ {
+ var value = heapFloat[sp>>2];
+
+ f_g0 = Math.pow(2,value);
+ }
+
+
+
+ function pow(sp)
+ {
+ var value = heapDouble[sp>>3];
+ var value2 = heapDouble[(sp+8)>>3];
+ f_g0 = Math.pow(value,value2);
+ }
+
+ function powf(sp)
+ {
+ var value = heapFloat[sp>>2];
+ var value2 = heapFloat[(sp+4)>>2];
+ f_g0 = Math.pow(value,value2);
+ }
+
+ function cos(sp)
+ {
+ var value = heapDouble[sp>>3];
+ f_g0 = Math.cos(value);
+ //assert (isNaN(f_g0) == false);
+ }
+
+ function tan(sp)
+ {
+ var value = heapDouble[sp>>3];
+ f_g0 = Math.tan(value);
+ //assert (isNaN(f_g0) == false);
+ }
+
+ function sinf(sp)
+ {
+ var value = heapFloat[sp>>2];
+ f_g0 = Math.sin(value);
+
+ //assert (isNaN(f_g0) == false);
+ }
+
+ function expf(sp)
+ {
+ var value = heapFloat[sp>>2];
+ f_g0 = Math.exp(value);
+ }
+
+ function exp(sp)
+ {
+ var value = heapDouble[sp>>3];
+ f_g0 = Math.exp(value);
+ }
+
+ function tanf(sp)
+ {
+ var value = heapFloat[sp>>2];
+ f_g0 = Math.tan(value);
+ }
+
+ function atanf(sp)
+ {
+ var value = heapFloat[sp>>2];
+ f_g0 = Math.atan(value);
+ }
+
+ function atan(sp)
+ {
+ var value = heapDouble[sp>>3];
+ f_g0 = Math.atan(value);
+ }
+
+ function abs(sp)
+ {
+ var value = heap32[sp>>2];
+ if (value<0)
+ r_g0 = -value;
+ else
+ r_g0 = value;
+ }
+
+ function sin(sp)
+ {
+ var value = heapDouble[sp>>3];
+ f_g0 = Math.sin(value);
+ }
+
+ function sqrtf(sp)
+ {
+ var value = heapFloat[sp>>2];
+ f_g0 = Math.sqrt(value);
+ }
+
+ function sqrt(sp)
+ {
+ var value = heapDouble[sp>>3];
+ f_g0 = Math.sqrt(value);
+ }
+
+ function fmod(sp)
+ {
+ var value = heapDouble[sp>>3];sp+=8;
+ var value2 = heapDouble[sp>>3];
+ f_g0 = value % value2;
+ }
+
+ function fmodf(sp)
+ {
+ var value = heapFloat[sp>>2];sp+=4;
+ var value2 = heapFloat[sp>>2];
+ f_g0 = value % value2;
+ }
+
+
+ function atan2f(sp)
+ {
+ var x = heapFloat[sp>>2];sp+=4;
+ var y = heapFloat[sp>>2];
+ f_g0 = Math.atan2(x,y);
+ }
+
+ function atan2(sp)
+ {
+ var x = heapDouble[sp>>3];
+ var y = heapDouble[(sp+8)>>3];
+ f_g0 = Math.atan2(x,y);
+ }
+
+ function fabs(sp)
+ {
+ var value = heapDouble[sp>>3];
+ f_g0 = Math.abs(value);
+ }
+
+
+ function _Z18OutputDebugStringAPKc(sp)
+ {
+ puts(sp);
+
+ }
+
+
+ function getenv(sp)
+ {
+ r_g0 = 0;
+ }
+
+
+ function mandreel_fcmp_ord(X, Y)
+ {
+ return (X == X && Y == Y);
+ }
+
+ function mandreel_fcmp_uno(X, Y)
+{
+
+ return (X != X || Y != Y);
+}
+
+var llvm_errno = Malloc(4);
+function _errno(sp)
+{
+ r_g0 = llvm_errno;
+}
+
+
+
+
+if (!Mandreel_window["dump"])
+ Mandreel_window["dump"] = function dump(str){console.log(str)} ;
+
+
+
+
+ function get_string_from_ptr(ptr)
+ {
+ var ret = "";
+
+ if (ptr == 0)
+ return ret;
+
+ var i = 0;
+ while (1) {
+ // if ((ptr.pos + i) >= ptr.slab.length) { return "<< Invalid read: " + (ptr.pos+i) + " : " + ptr.slab.length + " >>"; } else {}
+ if (heapU8[ptr + i] == 0)
+ break;
+
+ var t = String.fromCharCode(heapU8[ptr + i]);
+ ret += t;
+ i += 1;
+ }
+
+ return ret;
+ }
+
+ function fill_ptr_from_string(ptr, v)
+ {
+ var j;
+ var len = v.length;
+ var data;
+
+ for(j = 0; j < len; j++)
+ {
+ data = v.charCodeAt(j);
+
+ heapU8[ptr] = data;
+ ptr++;
+ }
+ heapU8[ptr] = 0;
+ }
+
+ var file_ids = [];
+ var current_file_id = 20;
+
+ function create_file_id(buffer)
+ {
+ this.buffer = buffer;
+ this.offset = 0;
+ this.byteArray = new Uint8Array(buffer);
+ }
+
+ function mandreel_rewind(sp)
+ {
+ var file_id = heap32[sp>>2];sp+=4;
+
+ file_ids[file_id].offset = 0;
+
+ r_g0 = 0;
+
+ //return 0;
+ }
+
+
+ function mandreel_fseek(sp)
+ {
+ var file_id = heap32[sp>>2];sp+=4;
+ var pos = heap32[sp>>2];sp+=4;
+ var type = heap32[sp>>2];sp+=4;
+
+ if (type == 2)
+ {
+ file_ids[file_id].offset = file_ids[file_id].buffer.byteLength + pos;
+ }
+ else if (type == 1)
+ {
+ file_ids[file_id].offset = file_ids[file_id].offset + pos;
+
+ }
+ else if (type == 0)
+ {
+ file_ids[file_id].offset = pos;
+
+ }
+
+ r_g0 = 0;
+
+ //return 0;
+ }
+
+ function mandreel_fclose(sp)
+ {
+ var file_id = heap32[sp>>2];sp+=4;
+
+ file_ids[file_id] = null;
+ r_g0 = 0;
+ //return 0;
+ }
+
+
+
+ function mandreel_feof(sp)
+ {
+ var file_id = heap32[sp>>2];sp+=4;
+
+ var offset = file_ids[file_id].offset;
+ var total = file_ids[file_id].buffer.byteLength;
+
+ if (offset>=total)
+ r_g0 = 1;
+ else
+ r_g0 = 0;
+
+ }
+
+ function mandreel_getc(sp)
+ {
+ var file_id = heap32[sp>>2];sp+=4;
+
+
+ var offset = file_ids[file_id].offset;
+
+
+ var buffer = file_ids[file_id].buffer;
+
+ var byteArray = file_ids[file_id].byteArray;
+
+ var total = 1;
+
+ var result;
+
+ if ((offset+total)>buffer.byteLength)
+ {
+ result = -1;
+ }
+ else
+ {
+ result = byteArray[offset];
+ file_ids[file_id].offset+=total;
+ }
+
+ r_g0 = result;
+ }
+
+
+
+ function mandreel_fread(sp)
+ {
+ var ptr = heap32[sp>>2];sp+=4;
+ var size = heap32[sp>>2];sp+=4;
+ var count = heap32[sp>>2];sp+=4;
+ var file_id = heap32[sp>>2];sp+=4;
+
+ var offset = file_ids[file_id].offset;
+
+ //dump('fread ' + ptr + ' ' + size + ' ' + count + ' ' + file_id + ' ' + offset + '\n');
+
+ var buffer = file_ids[file_id].buffer;
+
+ var total = size*count;
+
+ if ((offset+total)>buffer.byteLength)
+ total = buffer.byteLength-offset;
+
+ var byteArray = file_ids[file_id].byteArray;
+
+
+ var sub_array = byteArray.subarray(offset, offset+total);
+
+ heapU8.set(sub_array,ptr);
+
+
+ //heapU8.set(byteArray, ptr);
+ //for (var i=0;i<total;++i)
+ //{
+// heapU8[ptr+i] = byteArray[i+offset];
+// }
+
+
+ file_ids[file_id].offset+=total;
+
+ r_g0 = total/size;
+ //return total;
+ }
+
+ function mandreel_ftell(sp)
+ {
+ var file_id = heap32[sp>>2];sp+=4;
+
+ var value = file_ids[file_id].offset;
+ //dump('offset ftell ' + value + '\n');
+ r_g0 = value;
+ //return value;
+ }
+
+ function _Z30mandreel_fopen_enable_checkfatb(sp)
+ {
+ }
+
+ function mandreel_ungetc(sp)
+ {
+ var my_char = heap32[sp>>2];sp+=4;
+ var file_id = heap32[sp>>2];sp+=4;
+
+ var offset = file_ids[file_id].offset-1;
+
+ var byteArray = file_ids[file_id].byteArray;
+
+ assert(byteArray[offset] == my_char);
+
+ file_ids[file_id].offset = offset;
+
+ return my_char;
+ }
+ function mandreel_fopen(sp)
+ {
+ var ptr_name = heap32[sp>>2];sp+=4;
+ var ptr_flags = heap32[sp>>2];sp+=4;
+
+
+ var name = get_string_from_ptr(ptr_name);
+ var flags = get_string_from_ptr(ptr_flags);
+ //dump('fopen\n');
+ //dump(name);
+ //dump('\n');
+ //dump(flags);
+ //dump('\n');
+
+ var buffer;
+
+ var full_name;
+
+ name = name.toLowerCase();
+
+ name = name.replace(/\\/g,"/");
+
+ full_name = g_mandreel_working_folder + name + g_mandreel_datafiles_sufix;
+
+
+ buffer =mandreel_cache_files[name];
+
+ if (buffer == null)
+ {
+ r_g0 = 0;
+ return;
+ }
+
+
+
+ //dump('\nopening file ' + full_name + ' ' + buffer.byteLength + '\n');
+
+
+ file_ids[current_file_id] = new create_file_id(buffer);
+
+ var old_id = current_file_id;
+ current_file_id++;
+
+ r_g0 = old_id;
+ //return old_id;
+ }
+
+ function llvm_store_unalign32_float(addr, value)
+ {
+ heapFloat[0] = value;
+ var data = heap32[0];
+ heap8[addr] = data&0xff;
+ heap8[addr+1] = (data>>>8)&0xff;
+ heap8[addr+2] = (data>>>16)&0xff;
+ heap8[addr+3] = (data>>>24)&0xff;
+ }
+ function llvm_store_unalign32(addr, value)
+ {
+ heap8[addr] = value&0xff;
+ heap8[addr+1] = (value>>>8)&0xff;
+ heap8[addr+2] = (value>>>16)&0xff;
+ heap8[addr+3] = (value>>>24)&0xff;
+ }
+
+ function llvm_read_unalign32(addr)
+ {
+ var value;
+ value = heapU8[addr];
+ value |= heapU8[addr+1]<<8;
+ value |= heapU8[addr+2]<<16;
+ value |= heapU8[addr+3]<<24;
+ return value;
+ }
+
+ function llvm_read_unalign32_float(addr)
+ {
+ var value;
+ value = heapU8[addr];
+ value |= heapU8[addr+1]<<8;
+ value |= heapU8[addr+2]<<16;
+ value |= heapU8[addr+3]<<24;
+
+ heap32[0] = value;
+ return heapFloat[0];
+ }
+
+ function mandreel_getlocalstorage()
+ {
+ return Mandreel_window.localStorage;
+ //return Mandreel_window.sessionStorage;
+ }
+
+ function mandreel_openls(sp)
+ {
+ var ptr_name = heap32[sp>>2];sp+=4;
+
+ var key = get_string_from_ptr(ptr_name);
+
+ var my_localStorage = mandreel_getlocalstorage();
+
+ var value = my_localStorage.getItem(key);
+
+ if (value == null)
+ {
+ r_g0 = -1;
+ return;
+ }
+
+
+ var length = my_localStorage.getItem(key + '_size');
+
+ if (length == null)
+ {
+ r_g0 = -1;
+ return;
+ }
+
+
+
+
+ dump('mandreel_openls ' + key + ' return ' + length);
+
+
+ r_g0 = parseInt(length);
+
+
+
+ return;
+
+ }
+
+ function mandreel_readls(sp)
+ {
+ var ptr_name = heap32[sp>>2];sp+=4;
+ var data_dst = heap32[sp>>2];sp+=4;
+ var data_len = heap32[sp>>2];sp+=4;
+
+ var key = get_string_from_ptr(ptr_name);
+
+ var my_localStorage = mandreel_getlocalstorage();
+
+ var value = my_localStorage.getItem(key);
+
+ var data = JSON.parse(value);
+
+
+ for (var i=0;i<data_len;++i)
+ {
+ heapU8[data_dst+i] = data[i];
+ }
+
+ r_g0 = data_len;
+ return;
+
+}
+
+function mandreel_removels(sp)
+ {
+ var ptr_name_a = heap32[sp>>2];sp+=4;
+ var key_a = get_string_from_ptr(ptr_name_a);
+
+ var my_localStorage = mandreel_getlocalstorage();
+
+ my_localStorage.removeItem(key_a);
+ my_localStorage.removeItem(key_a + '_size');
+ r_g0 = 0;
+
+ }
+
+
+function mandreel_renamels(sp)
+ {
+ var ptr_name_a = heap32[sp>>2];sp+=4;
+ var ptr_name_b = heap32[sp>>2];sp+=4;
+
+ var key_a = get_string_from_ptr(ptr_name_a);
+ var key_b = get_string_from_ptr(ptr_name_b);
+
+ var my_localStorage = mandreel_getlocalstorage();
+
+
+ var value = my_localStorage.getItem(key_a);
+ var value2 = my_localStorage.getItem(key_a + '_size');
+
+ if (value != null && value2 != null)
+ {
+ my_localStorage.setItem(key_b, value);
+ my_localStorage.setItem(key_b + '_size', value2);
+
+ my_localStorage.removeItem(key_a);
+ my_localStorage.removeItem(key_a + '_size');
+
+
+ r_g0 = 0;
+}
+else
+ r_g0 = -1;
+ }
+
+function mandreel_writels(sp)
+ {
+ var ptr_name = heap32[sp>>2];sp+=4;
+ var data_src = heap32[sp>>2];sp+=4;
+ var data_len = heap32[sp>>2];sp+=4;
+
+ var key = get_string_from_ptr(ptr_name);
+
+
+
+ var data = new Uint8Array(heap,data_src,data_len);
+
+ var value = JSON.stringify(data);
+
+ var my_localStorage = mandreel_getlocalstorage();
+
+ try
+ {
+ my_localStorage.setItem(key, value);
+ } catch(e)
+ {
+ dump('error saving ' + key);
+ dump(e.message);
+ r_g0 = 0;
+ return;
+ }
+
+ try
+ {
+ my_localStorage.setItem(key + '_size', data_len);
+ } catch(e)
+ {
+ dump('error saving ' + key);
+ dump(e.message);
+ r_g0 = 0;
+ return;
+ }
+
+
+ r_g0 = data_len;
+ return;
+
+}
+
+function mandreel_call_constructors(_ptr, size,stackPos)
+{
+var ptr = _ptr;
+
+ptr = ptr >> 2;
+
+for (var i=0;i<size;++i)
+{
+
+
+var tag = heap32[ptr];
+var ptr_id = heap32[ptr+1];
+
+__FUNCTION_TABLE__[(ptr_id)>>2](stackPos);
+
+ptr+=2;
+
+}
+}
+
+function get_string_from_wptr(ptr)
+ {
+ var ret = "";
+
+ if (ptr == 0)
+ return ret;
+
+ assert((ptr&1)==0);
+ ptr>>=1;
+ var i = 0;
+ while (1) {
+ // if ((ptr.pos + i) >= ptr.slab.length) { return "<< Invalid read: " + (ptr.pos+i) + " : " + ptr.slab.length + " >>"; } else {}
+ if (heapU16[ptr + i] == 0)
+ break;
+
+ var t = String.fromCharCode(heapU16[ptr + i]);
+ // if (t == "\0") { break; } else {}
+ ret += t;
+ i += 1;
+ }
+
+ return ret;
+ }
+
+ function fill_wptr_from_string(ptr, v)
+ {
+ var j;
+ var len = v.length;
+ var data;
+
+ assert((ptr&1)==0);
+ ptr>>=1;
+
+ for(j = 0; j < len; j++)
+ {
+ data = v.charCodeAt(j);
+
+ heapU16[ptr] = data;
+ ptr++;
+ }
+ heapU16[ptr] = 0;
+ }
+
+function mandreelInterGetParams(sp)
+{
+ var params = [];
+
+ var offset = 0;
+ for (i=1;i<arguments.length;++i)
+ {
+ var type = arguments[i];
+
+ switch(type)
+ {
+ case 'int':
+ params[i-1] = heap32[(sp+offset)>>2];
+ break;
+ case 'float':
+ params[i-1] = heapFloat[(sp+offset)>>2];
+ break;
+ case 'string':
+ params[i-1] = get_string_from_ptr(heap32[(sp+offset)>>2]);
+ break;
+ default:
+ assert(false);
+ }
+ offset+=4;
+ }
+
+ return params;
+}
+
+function mandreelInterRetParam(type, value)
+{
+ switch(type)
+ {
+ case 'int':
+ r_g0 = value;
+ break;
+ case 'float':
+ f_g0 = value;
+ break;
+ default:
+ assert(false);
+ }
+
+ return 0;
+}
+
+function MandreelInterGetFunctionPtr(value)
+{
+ return __FUNCTION_TABLE__[value >> 2];
+}
+
+
+function MandreelInterCallFunction(returnType,func_name)
+{
+ var size_params = 0;
+
+ var i;
+ var num_params = (arguments.length-2)/2;
+ num_params|=0;
+ for (i=2;i<num_params*2+2;i+=2)
+ {
+ var type = arguments[i];
+
+ var size_arg = 0;
+ switch(type)
+ {
+ case 'int':
+ size_arg = 4;
+ break;
+ case 'float':
+ size_arg = 4;
+ break;
+ case 'string':
+ size_arg = 4;
+ size_arg += ((arguments[i+1].length + 4) & 0xfffffffc);
+ break;
+ case 'wstring':
+ size_arg = 4;
+ size_arg += ((arguments[i+1].length*2 + 4) & 0xfffffffc);
+ break;
+ default:
+ assert(false);
+ }
+
+ size_params += size_arg;
+ }
+
+ // stack always 8 byte aligned
+ size_params=((size_params+7)& 0xfffffff8);
+
+ var sp = 0;
+
+ if (i<(arguments.length))
+ sp = arguments[i];
+ else
+ {
+ assert(false,"MandreelInterCallFunction missing stack pointer paramenter");
+ //assert(g_mandreel_frame_locked == true);
+ //sp = g_stack_pointer+800*1024;
+ }
+
+ sp-=size_params;
+
+ var offset = 0;
+ var ptr_data = num_params*4+sp;
+ for (i=2;i<num_params*2+2;i+=2)
+ {
+ var type = arguments[i];
+
+ var size_arg = 0;
+ switch(type)
+ {
+ case 'int':
+ heap32[(sp+offset)>>2] = arguments[i+1];
+ break;
+ case 'float':
+ heapFloat[(sp+offset)>>2] = arguments[i+1];
+ break;
+ case 'string':
+ {
+ heap32[(sp+offset)>>2] = ptr_data;
+ var string = arguments[i+1];
+ fill_ptr_from_string(ptr_data,string);
+
+ ptr_data += ((string.length + 4) & 0xfffffffc);
+ }
+ break;
+ case 'wstring':
+ {
+ MandreelInterWriteInt((sp+offset),ptr_data);
+ var string = arguments[i+1];
+ MandreelInterWriteWString(ptr_data,string);
+
+ ptr_data += ((string.length*2 + 4) & 0xfffffffc);
+ }
+ break;
+ default:
+ assert(false);
+ }
+ offset+=4;
+ }
+
+ Mandreel_window[func_name](sp);
+
+ if (returnType == 'int')
+ return r_g0;
+ else if (returnType == 'float')
+ return f_g0;
+ else
+ {
+ assert(returnType == 'void');
+ return;
+ }
+}
+
+
+function MandreelInterCallFunctionPtr(returnType,func_ptr)
+{
+ var size_params = 0;
+
+ var i;
+ var num_params = (arguments.length-2)/2;
+ num_params|=0;
+ for (i=2;i<num_params*2+2;i+=2)
+ {
+ var type = arguments[i];
+
+ var size_arg = 0;
+ switch(type)
+ {
+ case 'int':
+ size_arg = 4;
+ break;
+ case 'float':
+ size_arg = 4;
+ break;
+ case 'string':
+ size_arg = 4;
+ size_arg += ((arguments[i+1].length + 4) & 0xfffffffc);
+ break;
+ case 'wstring':
+ size_arg = 4;
+ size_arg += ((arguments[i+1].length*2 + 4) & 0xfffffffc);
+ break;
+ default:
+ assert(false);
+ }
+
+ size_params += size_arg;
+ }
+
+ // stack always 8 byte aligned
+ size_params=((size_params+7)& 0xfffffff8);
+
+ var sp = 0;
+
+ if (i<(arguments.length))
+ sp = arguments[i];
+ else
+ {
+ assert(false);
+ //assert(g_mandreel_frame_locked == true);
+ //sp = g_stack_pointer+800*1024;
+ }
+
+ sp-=size_params;
+
+ var offset = 0;
+ var ptr_data = num_params*4+sp;
+ for (i=2;i<num_params*2+2;i+=2)
+ {
+ var type = arguments[i];
+
+ var size_arg = 0;
+ switch(type)
+ {
+ case 'int':
+ heap32[(sp+offset)>>2] = arguments[i+1];
+ break;
+ case 'float':
+ heapFloat[(sp+offset)>>2] = arguments[i+1];
+ break;
+ case 'string':
+ {
+ heap32[(sp+offset)>>2] = ptr_data;
+ var string = arguments[i+1];
+ fill_ptr_from_string(ptr_data,string);
+
+ ptr_data += ((string.length + 4) & 0xfffffffc);
+ }
+ break;
+ case 'wstring':
+ {
+ MandreelInterWriteInt((sp+offset),ptr_data);
+ var string = arguments[i+1];
+ MandreelInterWriteWString(ptr_data,string);
+
+ ptr_data += ((string.length*2 + 4) & 0xfffffffc);
+ }
+ break;
+ default:
+ assert(false);
+ }
+ offset+=4;
+ }
+
+ __FUNCTION_TABLE__[(func_ptr)>>2](sp);
+
+ if (returnType == 'int')
+ return r_g0;
+ else if (returnType == 'float')
+ return f_g0;
+ else
+ {
+ assert(returnType == 'void');
+ return;
+ }
+}
+
+
+var MANDREEL_HTTP_REQUEST_MODE_GET = 0;
+var MANDREEL_HTTP_REQUEST_MODE_POST = 1;
+var MANDREEL_HTTP_REQUEST_MODE_PUT = 2;
+
+var MANDREEL_HTTP_REQUEST_STATUS_ERROR = 0;
+var MANDREEL_HTTP_REQUEST_STATUS_BUSY = 1;
+var MANDREEL_HTTP_REQUEST_STATUS_FINISHED = 2;
+var MANDREEL_HTTP_REQUEST_STATUS_INIT = 3;
+
+
+var mandreel_js_mapping_ids = [];
+var mandreel_js_mapping_ids_free = [];
+
+
+function Mandreel_HttpRequest_Create(sp)
+{
+ var ptr_url = heap32[sp>>2];sp+=4;
+ var type = heap32[sp>>2];sp+=4;
+
+
+ var url = get_string_from_ptr(ptr_url);
+
+
+ var str_type = 'GET';
+ if (type == MANDREEL_HTTP_REQUEST_MODE_GET)
+ str_type = 'GET';
+ else if (type == MANDREEL_HTTP_REQUEST_MODE_PUT)
+ str_type = 'PUT';
+ else if (type == MANDREEL_HTTP_REQUEST_MODE_POST)
+ str_type = 'POST';
+
+ var xmlhttp_get = new XMLHttpRequest();
+ xmlhttp_get.open(str_type,url);
+
+ if("responseType" in xmlhttp_get)
+ xmlhttp_get.responseType="arraybuffer";
+ else
+ {
+ xmlhttp_get.overrideMimeType('text/plain; charset=x-user-defined');
+ }
+
+ if (mandreel_js_mapping_ids_free.length == 0)
+ mandreel_js_mapping_ids_free.push(mandreel_js_mapping_ids.length);
+
+ var new_id = mandreel_js_mapping_ids_free.pop();
+
+ var my_state = {
+ buffer : null,
+ httpRequest : xmlhttp_get,
+ status : MANDREEL_HTTP_REQUEST_STATUS_INIT,
+ offset_read : 0
+ };
+
+
+
+ mandreel_js_mapping_ids[new_id] = my_state;
+
+ r_g0 = new_id+1;
+}
+
+function Mandreel_HttpRequest_Send(sp)
+{
+ var _id = heap32[sp>>2];sp+=4;
+ var ptr_data = heap32[sp>>2];sp+=4;
+ var id = _id-1;
+
+ var data;
+
+ if (ptr_data)
+ data = get_string_from_ptr(ptr_data);
+ else
+ data = null;
+
+ var my_state = mandreel_js_mapping_ids[id];
+
+
+ my_state.status = MANDREEL_HTTP_REQUEST_STATUS_BUSY;
+
+ my_state.httpRequest.onreadystatechange = function()
+ {
+ if (my_state.httpRequest.readyState==4)
+ {
+ if (my_state.httpRequest.status==200)
+ {
+ var buffer;
+
+ if (my_state.httpRequest.responseType=="arraybuffer")
+ buffer=my_state.httpRequest.response;
+ else if (my_state.httpRequest.mozResponseArrayBuffer != null)
+ buffer = my_state.httpRequest.mozResponseArrayBuffer;
+ else
+ buffer=my_state.httpRequest.response;
+
+ my_state.status = MANDREEL_HTTP_REQUEST_STATUS_FINISHED;
+ my_state.buffer = new Uint8Array(buffer);
+ //alert(my_state.buffer.length);
+
+ //alert(mandreel_js_mapping_ids[id].buffer);
+
+ }
+ else
+ my_state.status = MANDREEL_HTTP_REQUEST_STATUS_ERROR;
+ }
+ }
+
+ my_state.httpRequest.send(data);
+}
+
+
+function Mandreel_HttpRequest_Status(sp)
+{
+ var _id = heap32[sp>>2];sp+=4;
+ var id = _id-1;
+
+
+ r_g0 = mandreel_js_mapping_ids[id].status;
+}
+
+function Mandreel_HttpRequest_Read(sp)
+{
+ var _id = heap32[sp>>2];sp+=4;
+ var ptr = heap32[sp>>2];sp+=4;
+ var size = heap32[sp>>2];sp+=4;
+ var id = _id-1;
+
+ var remaining_bytes = mandreel_js_mapping_ids[id].buffer.length - mandreel_js_mapping_ids[id].offset_read;
+
+ if (size>remaining_bytes)
+ size = remaining_bytes;
+
+ var sub_array = mandreel_js_mapping_ids[id].buffer.subarray(mandreel_js_mapping_ids[id].offset_read, mandreel_js_mapping_ids[id].offset_read+size);
+ heapU8.set(sub_array,ptr);
+
+ mandreel_js_mapping_ids[id].offset_read+=size;
+
+ r_g0 = size;
+}
+
+function Mandreel_HttpRequest_BytesAvalable(sp)
+{
+ var _id = heap32[sp>>2];sp+=4;
+ var id = _id-1;
+
+
+ if (mandreel_js_mapping_ids[id].buffer)
+ r_g0 = mandreel_js_mapping_ids[id].buffer.length - mandreel_js_mapping_ids[id].offset_read;
+ else
+ r_g0 = 0;
+}
+
+function Mandreel_HttpRequest_Close(sp)
+{
+ var _id = heap32[sp>>2];sp+=4;
+ var id = _id-1;
+
+ mandreel_js_mapping_ids[id] = null;
+ mandreel_js_mapping_ids_free.push(id);
+}
+
+function Mandreel_HttpRequest_SetRequestHeader(sp)
+{
+ var _id = heap32[sp>>2];sp+=4;
+ var ptr_a = heap32[sp>>2];sp+=4;
+ var ptr_b = heap32[sp>>2];sp+=4;
+ var id = _id-1;
+
+ var str_a = get_string_from_ptr(ptr_a);
+ var str_b = get_string_from_ptr(ptr_b);
+
+ var my_state = mandreel_js_mapping_ids[id];
+
+ my_state.httpRequest.setRequestHeader(str_a, str_b);
+}
+
+
+var Mandreel_TextureAsync_textures = 0;
+var Mandreel_TextureAsync_textures_loaded = 0;
+
+var Mandreel_TextureAsync_PackBufferData = new Array();
+
+function Mandreel_TextureAsync_SetData(sp)
+{
+ var texture_id = heap32[sp>>2];sp+=4;
+
+ var tex = array_ids_ogl[texture_id];
+
+ if ( mandreelAppPlatform != "canvas" )
+ {
+ imandreel_gl.texImage2D(imandreel_gl.TEXTURE_2D, 0, imandreel_gl.RGBA, imandreel_gl.RGBA, imandreel_gl.UNSIGNED_BYTE, tex.image);
+ tex.image = null;
+ }
+}
+
+function Mandreel_TextureAsync_CheckPending(sp)
+{
+ r_g0 = Mandreel_TextureAsync_textures - Mandreel_TextureAsync_textures_loaded;
+}
+
+function Mandreel_TextureAsync_GetProperties(sp)
+{
+ var texture_id = heap32[sp>>2];sp+=4;
+ var ptr_width = heap32[sp>>2];sp+=4;
+ var ptr_height = heap32[sp>>2];sp+=4;
+
+ var tex = array_ids_ogl[texture_id];
+
+ if (tex == null || tex.mandreel_width == undefined)
+ r_g0 = 0;
+ else
+ {
+ heap32[ptr_width>>2] = tex.mandreel_width;
+ heap32[ptr_height>>2] = tex.mandreel_height;
+ r_g0 = 1;
+ }
+}
+
+function mandreel_arrayBufferDataUri(offset, size, buffer) {
+var bytes = new Uint8Array(buffer,offset,size)
+ var ascii = '';
+ for (var i=0; i<bytes.length; i++)
+ ascii += String.fromCharCode(bytes[i]);
+ var base64 = btoa(ascii);
+
+ if (/^\x89PNG/.test(ascii))
+ return 'data:image/png;base64,'+base64;
+ else
+ return 'data:image/jpeg;base64,'+base64;
+ }
+
+ function mandreel_texture_async_fix_name(name)
+{
+ var ascii = '';
+
+ var j;
+ var len = name.length;
+
+
+ for(j = 0; j < len; j++)
+ {
+ var my_char = name[j];
+
+ if (my_char == '/')
+ my_char = '_';
+
+ ascii+=my_char;
+
+ }
+
+ return ascii;
+}
+
+
+
+function Mandreel_TextureAsync_Load(sp)
+{
+ var ptr_name = heap32[sp>>2];sp+=4;
+ var texture_id = heap32[sp>>2];sp+=4;
+
+ var name = get_string_from_ptr(ptr_name);
+
+ var nameSrc = name;
+
+ name = name.toLowerCase();
+
+
+ var full_name = g_mandreel_working_folder + name;
+
+ var image = new Image();
+
+
+ Mandreel_TextureAsync_textures++;
+
+ var imgURL = null;
+
+
+
+
+ image.onerror = function() {
+ dump('error loading texture ' + image.src + '\n');
+ Mandreel_TextureAsync_textures_loaded++;
+ }
+ image.onload = function()
+ {
+ if (imgURL)
+ {
+ var URL = Mandreel_window.URL || Mandreel_window.webkitURL;
+ URL.revokeObjectURL(imgURL);
+ }
+ if ( mandreelAppPlatform == "canvas" )
+ {
+ array_ids_ogl[texture_id] = image;
+ Mandreel_TextureAsync_textures_loaded++;
+ }
+ else
+ {
+ var tex = array_ids_ogl[texture_id];
+ if (tex)
+ {
+ tex.image = image;
+ tex.mandreel_width = image.width;
+ tex.mandreel_height = image.height;
+ Mandreel_TextureAsync_textures_loaded++;
+
+ var sp = MandreelLockFrame();
+ MandreelInterCallFunction('void',"Mandreel_TextureAsync_Loaded",'int',texture_id,'int',image.width,'int',image.height, sp);
+ MandreelUnlockFrame();
+ }
+ else
+ {
+ dump('texture not valid ' + texture_id + ' ' + name + '\n');
+ Mandreel_TextureAsync_textures_loaded++;
+ }
+ }
+
+
+ }
+
+ var new_sp = sp-4096;
+
+ var packfile = new_sp + 2048;
+ var offset_ptr = new_sp + 2048+1024;
+ var size_ptr = new_sp + 2048+1024+4;
+
+ fill_ptr_from_string(new_sp + 1024,name);
+
+ heap32[(new_sp)>>2] = new_sp + 1024;
+ heap32[(new_sp+4)>>2] = offset_ptr;
+ heap32[(new_sp+8)>>2] = size_ptr;
+ heap32[(new_sp+12)>>2] = packfile;
+ iMandreel_TextureAsync_GetPackOffset(new_sp);
+
+
+ var image_src;
+
+ var image_src_valid = true;
+
+ if (r_g0)
+ {
+ var packfilename = get_string_from_ptr(packfile);
+ image_src = mandreel_arrayBufferDataUri(heap32[offset_ptr>>2],heap32[size_ptr>>2],Mandreel_TextureAsync_PackBufferData[packfilename]);
+ }
+ else
+ {
+
+ if (nameSrc.search('http:') != -1 || nameSrc.search('https:') != -1)
+ {
+ image.crossOrigin = 'anonymous'; // no credentials flag. Same as
+ image_src = nameSrc;
+ }
+ else
+ {
+ if (mandreel_is_filesystem())
+ {
+ image_src_valid = false;
+
+ var new_name = mandreel_texture_async_fix_name(full_name);
+ mandreel_fs_get_url(new_name, function Mandreel_TextureAsync_Load_FS(data) {
+ if (data)
+ {
+ image.src = data;
+ }
+ else
+ {
+ var packdata_request = new XMLHttpRequest();
+
+ packdata_request.open("GET", full_name, true);
+
+ if("responseType" in packdata_request)
+ packdata_request.responseType="arraybuffer";
+ else
+ packdata_request.overrideMimeType('text/plain; charset=x-user-defined');
+
+ packdata_request.onreadystatechange = function()
+ {
+ if (packdata_request.readyState != 4) return;
+
+ if (packdata_request.status == 200)
+ {
+ var buffer;
+ if (packdata_request.responseType=="arraybuffer")
+ buffer=packdata_request.response;
+ else if (packdata_request.mozResponseArrayBuffer != null)
+ buffer = packdata_request.mozResponseArrayBuffer;
+ else
+ buffer=packdata_request.response;
+
+ mandreel_fs_saveFile(new_name, buffer);
+
+ var uri = mandreel_arrayBufferDataUri(0,buffer.byteLength,buffer);
+
+ image.src = uri;
+
+ }
+ else
+ {
+
+ Mandreel_TextureAsync_textures_loaded++;
+
+ }
+ }
+
+ packdata_request.send();
+
+ }
+ }
+ );
+ }
+ else if (mandreel_is_indexeddb())
+ {
+ image_src_valid = false;
+
+ var new_name = mandreel_texture_async_fix_name(full_name);
+ mandreel_indexedDB.load(new_name,function Mandreel_TextureAsync_Load_IDB(data) {
+ if (data)
+ {
+ var URL = Mandreel_window.URL || Mandreel_window.webkitURL;
+
+
+ // Create and revoke ObjectURL
+ imgURL = URL.createObjectURL(data);
+
+ image.src = imgURL;
+ }
+ else
+ {
+ var packdata_request = new XMLHttpRequest();
+
+ packdata_request.open("GET", full_name, true);
+
+ packdata_request.responseType = "blob";
+
+
+
+ packdata_request.onreadystatechange = function()
+ {
+ if (packdata_request.readyState != 4) return;
+
+ if (packdata_request.status == 200)
+ {
+ var buffer=packdata_request.response;
+
+ var URL = Mandreel_window.URL || Mandreel_window.webkitURL;
+
+ // Create and revoke ObjectURL
+ imgURL = URL.createObjectURL(buffer);
+
+ image.src = imgURL;
+
+ mandreel_fs_saveFile(new_name, buffer);
+
+ }
+ else
+ {
+
+ Mandreel_TextureAsync_textures_loaded++;
+
+ }
+ }
+
+ packdata_request.send();
+ }
+
+ }
+ );
+ }
+ else
+ image_src = full_name;
+ }
+ }
+
+
+ if (image_src_valid)
+ {
+ setTimeout( function Mandreel_TextureAsync_Load_callback() {
+ image.src = image_src;
+ }, 1);
+ }
+}
+
+
+
+function __sandbox_OutputDebugString(sp)
+{
+ puts(sp);
+}
+
+
+
+
+var MANDREELCALLJS_TYPE_RETURN_VOID = 0;
+var MANDREELCALLJS_TYPE_INT = 1;
+var MANDREELCALLJS_TYPE_FLOAT = 2;
+var MANDREELCALLJS_TYPE_STRING = 3;
+var MANDREELCALLJS_TYPE_RETURN_INT = 4;
+var MANDREELCALLJS_TYPE_RETURN_FLOAT = 5;
+
+function MandreelInterWriteString(ptr, value)
+{
+ fill_ptr_from_string(ptr,value);
+}
+
+function MandreelInterWriteWString(ptr, value)
+{
+ fill_wptr_from_string(ptr, value);
+}
+
+function MandreelInterWriteFloat(ptr, value)
+{
+ heapFloat[ptr>>2] = value;
+}
+
+function MandreelPause()
+{
+ _imandreel_pause_game = true;
+}
+
+function MandreelResume()
+{
+ _imandreel_pause_game = false;
+}
+
+
+function MandreelLockFrame()
+{
+ assert(g_mandreel_frame_inframe == false, "calling lockframe during render frame");
+ assert(g_mandreel_frame_locked == false, "calling lockframe twice");
+ g_mandreel_frame_locked = true;
+
+ return g_stack_pointer+800*1024;
+}
+
+function MandreelUnlockFrame()
+{
+ assert(g_mandreel_frame_inframe == false);
+ g_mandreel_frame_locked = false;
+}
+
+
+function MandreelInterWriteInt(ptr, value)
+{
+ heap32[ptr>>2] = value;
+}
+
+function MandreelInterStringFromWPtr(ptr)
+{
+ return get_string_from_wptr(ptr);
+}
+
+function MandreelInterStringFromPtr(ptr)
+{
+ return get_string_from_ptr(ptr);
+}
+
+function mandreel_my_call_external_array(method, params)
+{
+ var result
+ var resultString;
+ try
+ {
+ switch(params.length)
+ {
+ case 1:
+ resultString = Mandreel_window[method](params[0]);
+ break;
+ case 2:
+ resultString = Mandreel_window[method](params[0],params[1]);
+ break;
+ case 3:
+ resultString = Mandreel_window[method](params[0],params[1],params[2]);
+ break;
+ case 4:
+ resultString = Mandreel_window[method](params[0],params[1],params[2],params[3]);
+ break;
+ case 5:
+ resultString = Mandreel_window[method](params[0],params[1],params[2],params[3],params[4]);
+ break;
+ case 6:
+ resultString = Mandreel_window[method](params[0],params[1],params[2],params[3],params[4],params[5]);
+ break;
+ case 7:
+ resultString = Mandreel_window[method](params[0],params[1],params[2],params[3],params[4],params[5],params[6]);
+ break;
+ case 8:
+ resultString = Mandreel_window[method](params[0],params[1],params[2],params[3],params[4],params[5],params[6],params[7]);
+ break;
+ case 9:
+ resultString = Mandreel_window[method](params[0],params[1],params[2],params[3],params[4],params[5],params[6],params[7],params[8]);
+ break;
+ case 10:
+ resultString = Mandreel_window[method](params[0],params[1],params[2],params[3],params[4],params[5],params[6],params[7],params[8],params[9]);
+ break;
+ case 11:
+ resultString = Mandreel_window[method](params[0],params[1],params[2],params[3],params[4],params[5],params[6],params[7],params[8],params[9],params[10]);
+ break;
+ case 12:
+ resultString = Mandreel_window[method](params[0],params[1],params[2],params[3],params[4],params[5],params[6],params[7],params[8],params[9],params[10],params[11]);
+ break;
+ case 13:
+ resultString = Mandreel_window[method](params[0],params[1],params[2],params[3],params[4],params[5],params[6],params[7],params[8],params[9],params[10],params[11],params[12]);
+ break;
+ case 14:
+ resultString = Mandreel_window[method](params[0],params[1],params[2],params[3],params[4],params[5],params[6],params[7],params[8],params[9],params[10],params[11],params[12],params[13]);
+ break;
+ case 15:
+ resultString = Mandreel_window[method](params[0],params[1],params[2],params[3],params[4],params[5],params[6],params[7],params[8],params[9],params[10],params[11],params[12],params[13],params[14]);
+ break;
+ default:
+ assert(false);
+ }
+ result = 0;
+ } catch(e) { dump('error calling ' + method + '\n'); dump(e); result = 1;}
+
+ return [result,resultString];
+}
+
+
+function Mandreel_InterJS_Call(sp)
+{
+ var new_sp = sp;
+ var method_ptr = heap32[sp>>2];sp+=4;
+ var method = get_string_from_ptr(method_ptr);
+
+ var params = new Array();
+
+
+ params.push(new_sp);
+
+ var var_int;
+ var var_string;
+ var var_double;
+
+ var return_type;
+ var return_ptr;
+ while (true)
+ {
+ var my_type = heap32[sp>>2];sp+=4;
+
+
+ if (my_type == MANDREELCALLJS_TYPE_RETURN_VOID)
+ {
+ return_type = my_type;
+ break;
+ }
+ else if (my_type == MANDREELCALLJS_TYPE_INT)
+ {
+ var_int = heap32[sp>>2];
+
+ params.push(var_int);
+ sp+=4;
+ }
+ else if (my_type == MANDREELCALLJS_TYPE_FLOAT)
+ {
+ sp = (sp+7) & ~7;
+
+ var_double = llvm_readDouble(sp);
+
+ params.push(var_double);
+ sp+=8;
+ }
+ else if (my_type == MANDREELCALLJS_TYPE_STRING)
+ {
+ var_int = heap32[sp>>2];
+ var_string = get_string_from_ptr(var_int);
+
+ params.push(var_string);
+ sp+=4;
+ }
+ else if (my_type == MANDREELCALLJS_TYPE_RETURN_INT)
+ {
+ return_type = my_type;
+ return_ptr = heap32[sp>>2];
+ break;
+ }
+ else if (my_type == MANDREELCALLJS_TYPE_RETURN_FLOAT)
+ {
+ return_type = my_type;
+ return_ptr = heap32[sp>>2];
+ break;
+ }
+ else
+ {
+ assert(false, "invalid arguments calling Mandreel_InterJS_Call");
+ }
+ }
+
+ var result = mandreel_my_call_external_array(method,params);
+
+ r_g0 = result[0];
+
+
+ if (r_g0 == 0)
+ {
+ if (return_type == MANDREELCALLJS_TYPE_RETURN_INT)
+ {
+ heap32[return_ptr>>2] = result[1];
+ }
+ else if (return_type == MANDREELCALLJS_TYPE_RETURN_FLOAT)
+ {
+ heapFloat[return_ptr>>2] = result[1];
+ }
+
+ }
+}
+
+function iMandreelRegisterExternalCallback()
+{
+}
+
+function __mandreel_internal_CreateWindow()
+{
+}
+
+var __mandreel_async_calls_mandreel = [];
+var __mandreel_async_calls_js = [];
+
+
+function Mandreel_InterJS_AsyncCall(sp)
+{
+ var method_ptr = heap32[sp>>2];sp+=4;
+ var _func_name = get_string_from_ptr(method_ptr);
+ var param_ptr = heap32[sp>>2];sp+=4;
+ var _param = get_string_from_ptr(param_ptr);
+
+ __mandreel_async_calls_js.push({func_name:_func_name,param:_param});
+}
+
+
+
+
+function MandreelInterCallFunctionAsync(_func_name, _param)
+{
+ __mandreel_async_calls_mandreel.push({func_name:_func_name,param:_param});
+
+
+}
+
+function __mandreel_process_async_calls()
+{
+ if (__mandreel_async_calls_mandreel.length)
+ {
+ var temp_list = __mandreel_async_calls_mandreel.slice(0);
+
+ __mandreel_async_calls_mandreel = [];
+
+ for (var i=0;i<temp_list.length;++i)
+ {
+ var param = temp_list[i].param;
+ var func_name = temp_list[i].func_name;
+
+ var size = ((param.length + 1)+7)&0xFFFFFFF8;
+
+ var sp = g_stack_pointer+800*1024;
+
+ var str_ptr = sp - size;
+ fill_ptr_from_string(str_ptr,param);
+
+ sp = str_ptr - 4;
+ heap32[sp>>2] = str_ptr;
+
+ Mandreel_window[func_name](sp);
+ }
+ }
+
+ if (__mandreel_async_calls_js.length)
+ {
+ var temp_list = __mandreel_async_calls_js.slice(0);
+
+ __mandreel_async_calls_js = [];
+
+ for (var i=0;i<temp_list.length;++i)
+ {
+ var param = temp_list[i].param;
+ var func_name = temp_list[i].func_name;
+
+ Mandreel_window[func_name](param);
+
+ }
+ }
+}
+
+function mandreel_internal_isCanvas(sp)
+{
+ if ( mandreelAppPlatform == "canvas" )
+ r_g0 = 1;
+ else
+ r_g0 = 0;
+}
+
+function Mandreel_Device_SetFullScreen(sp)
+{
+ var enable = heap32[sp>>2];sp+=4;
+ mandreelAppFullscreen(enable);
+}
+
+var array_ids_ogl = [];
+
+var max_ogl_id = 8192;
+
+var array_ids_ogl_enable = [];
+var g_current_program_id = 0;
+
+
+var uniformArrays2 = [];
+var uniformArrays3 = [];
+var uniformArrays4 = [];
+var uniformArraysCreated = 0;
+var mandreel_draw_enable = true;
+
+
+if (typeof imandreel_gl=="undefined")
+{
+ alert('using old template, update code');
+}
+
+function myglCreateUniformArrays()
+{
+ if ( uniformArraysCreated == 0 )
+ {
+ for(var i=0; i<256;i++ )
+ {
+ uniformArrays2[i] = new Float32Array(i*2);
+ uniformArrays3[i] = new Float32Array(i*3);
+ uniformArrays4[i] = new Float32Array(i*4);
+ }
+ uniformArraysCreated = 1;
+ }
+}
+
+var my_super_id = 1;
+function myglNewSlot()
+{
+ //var id = array_ids_ogl_enable.pop();
+ var id = my_super_id;
+ my_super_id++;
+ return id;
+}
+
+function myglFreeSlot(id)
+{
+ //array_ids_ogl_enable.push(id);
+}
+
+
+function myglCreateProgram(sp)
+{
+ var id = myglNewSlot();
+ var program = imandreel_gl.createProgram();
+
+ program.uniform_locations_current_id = 0;
+ program.array_uniform_locations = [];
+
+ array_ids_ogl[id] = program;
+
+
+ r_g0 = id;
+}
+
+function myglCreateShader(sp)
+{
+ var type = heap32[sp>>2];sp+=4;
+ var id = myglNewSlot();
+
+ array_ids_ogl[id] = imandreel_gl.createShader(type);
+
+ r_g0 = id;
+}
+
+function myglAttachShader(sp)
+{
+ var program_id = heap32[sp>>2];sp+=4;
+ var shader_id = heap32[sp>>2];sp+=4;
+
+ imandreel_gl.attachShader(array_ids_ogl[program_id], array_ids_ogl[shader_id]);
+}
+
+function myglBindAttribLocation(sp)
+{
+ var program_id = heap32[sp>>2];sp+=4;
+ var index = heap32[sp>>2];sp+=4;
+ var ptr_string = heap32[sp>>2];sp+=4;
+
+ var string = get_string_from_ptr(ptr_string);
+
+ imandreel_gl.bindAttribLocation(array_ids_ogl[program_id], index, string);
+}
+
+function myglLinkProgram(sp)
+{
+ var program_id = heap32[sp>>2];sp+=4;
+
+ imandreel_gl.linkProgram(array_ids_ogl[program_id]);
+}
+
+function myglShaderSource(sp)
+{
+ var id = heap32[sp>>2];sp+=4;
+ var ptr_string = heap32[sp>>2];sp+=4;
+
+ var shader = array_ids_ogl[id];
+
+ var shader_code = get_string_from_ptr(ptr_string);
+
+ //dump(shader_code);
+
+
+ imandreel_gl.shaderSource(shader, shader_code);
+}
+
+
+function myglDrawArrays(sp)
+{
+ var mode = heap32[sp>>2];sp+=4;
+ var first = heap32[sp>>2];sp+=4;
+ var count = heap32[sp>>2];sp+=4;
+
+ if (mandreel_draw_enable)
+ imandreel_gl.drawArrays(mode, first, count);
+
+
+ //dump('draw arrays ' + mode + ' ' + first + ' ' + count + '\n');
+ }
+
+function myglDrawElements(sp)
+{
+ var mode = heapU32[sp>>2]; sp+=4;
+ var count = heapU32[sp>>2]; sp+=4;
+ var type = heapU32[sp>>2]; sp+=4;
+ var offset = heapU32[sp>>2]; sp+=4;
+
+
+ if (mandreel_draw_enable)
+ imandreel_gl.drawElements(mode, count, type, offset);
+
+
+
+}
+
+function myglCreateTexture(sp)
+{
+ var id = myglNewSlot();
+ array_ids_ogl[id] = imandreel_gl.createTexture();
+
+ r_g0 = id;
+}
+
+function myglCreateRenderBuffer(sp) {
+ var id = myglNewSlot();
+ array_ids_ogl[id] = imandreel_gl.createRenderbuffer();
+
+ r_g0 = id;
+}
+
+function myglCreateFrameBuffer(sp) {
+ var id = myglNewSlot();
+ array_ids_ogl[id] = imandreel_gl.createFramebuffer();
+
+ r_g0 = id;
+}
+
+function myglBindFramebuffer(sp)
+{
+ var target = heap32[sp >> 2]; sp += 4;
+ var framebuffer_id = heap32[sp >> 2]; sp += 4;
+
+ if (framebuffer_id != 0)
+ {
+ var framebuffer = array_ids_ogl[framebuffer_id];
+ imandreel_gl.bindFramebuffer(target,framebuffer);
+ }
+ else
+ imandreel_gl.bindFramebuffer(target,null);
+
+}
+
+function myglBindRenderbuffer(sp)
+{
+ var target = heap32[sp >> 2]; sp += 4;
+ var renderbuffer_id = heap32[sp >> 2]; sp += 4;
+
+ var renderbuffer = array_ids_ogl[renderbuffer_id];
+
+ imandreel_gl.bindRenderbuffer(target,renderbuffer);
+
+}
+
+
+function myglRenderbufferStorage(sp) {
+ var target = heap32[sp >> 2]; sp += 4;
+ var internalformat = heap32[sp >> 2]; sp += 4;
+ var witdth = heap32[sp >> 2]; sp += 4;
+ var height = heap32[sp >> 2]; sp += 4;
+
+ imandreel_gl.renderbufferStorage(target, internalformat, witdth, height);
+
+}
+
+function myglFramebufferRenderbuffer (sp)
+{
+ var target = heap32[sp>>2];sp+=4;
+ var attachment = heap32[sp>>2];sp+=4;
+ var renderbuffertarget = heap32[sp>>2];sp+=4;
+ var renderbuffer_id = heap32[sp>>2];sp+=4;
+
+ var renderbuffer = array_ids_ogl[renderbuffer_id];
+
+ imandreel_gl.framebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer);
+
+}
+
+function myglFramebufferTexture2D (sp)
+{
+ var target = heap32[sp>>2];sp+=4;
+ var attachment = heap32[sp>>2];sp+=4;
+ var textarget = heap32[sp>>2];sp+=4;
+ var texture_id = heap32[sp>>2];sp+=4;
+ var level = heap32[sp>>2];sp+=4;
+
+ var texture = array_ids_ogl[texture_id];
+
+ imandreel_gl.framebufferTexture2D(target, attachment, textarget, texture, level);
+
+
+}
+
+function myglTexImage2D(sp)
+ {
+ var target = heap32[sp>>2];sp+=4;
+ var level = heap32[sp>>2];sp+=4;
+ var internalFormat = heap32[sp>>2];sp+=4;
+ var width = heap32[sp>>2];sp+=4;
+ var height = heap32[sp>>2];sp+=4;
+ var border = heap32[sp>>2];sp+=4;
+ var format = heap32[sp>>2];sp+=4;
+ var type = heap32[sp>>2];sp+=4;
+ var data = heap32[sp>>2];sp+=4;
+
+ if (level>0 && target==imandreel_gl.TEXTURE_2D)
+ return;
+
+ if (data == 0)
+ {
+ //imandreel_gl.texImage2D(target, level, internalFormat, width, height, border, format, type, null);
+ var buffer;
+ var bufferView;
+
+ if (type == imandreel_gl.UNSIGNED_SHORT_5_6_5 || type == imandreel_gl.UNSIGNED_SHORT_4_4_4_4 || type == imandreel_gl.UNSIGNED_SHORT_5_5_5_1)
+ {
+ buffer = new ArrayBuffer(width*height*2);
+ bufferView = new Uint16Array(buffer);
+ }
+ else
+ {
+ var size;
+ if (format == imandreel_gl.LUMINANCE)
+ size = width*height;
+ else if (format == imandreel_gl.RGB)
+ size = width*height*3;
+ else if (format == imandreel_gl.RGBA)
+ size = width*height*4;
+ else if (format == imandreel_gl.ALPHA)
+ size = width*height;
+ else if (format == imandreel_gl.LUMINANCE_ALPHA)
+ size = width*height*2;
+
+ buffer = new ArrayBuffer(size);
+ bufferView = new Uint8Array(buffer);
+ }
+
+ imandreel_gl.texImage2D(target, level, internalFormat, width, height, border, format, type, bufferView);
+ return;
+ }
+
+
+ var bufferView;
+ if (type == imandreel_gl.UNSIGNED_SHORT_5_6_5 || type == imandreel_gl.UNSIGNED_SHORT_4_4_4_4 || type == imandreel_gl.UNSIGNED_SHORT_5_5_5_1)
+ {
+ bufferView = new Uint16Array(heap,data,width*height);
+ }
+ else if (type == imandreel_gl.UNSIGNED_BYTE)
+ {
+ if (format == imandreel_gl.LUMINANCE)
+ bufferView = new Uint8Array(heap,data,width*height);
+ else if (format == imandreel_gl.RGB)
+ bufferView = new Uint8Array(heap,data,width*height*3);
+ else if (format == imandreel_gl.RGBA)
+ bufferView = new Uint8Array(heap,data,width*height*4);
+ else if (format == imandreel_gl.ALPHA)
+ bufferView = new Uint8Array(heap,data,width*height);
+ else if (format == imandreel_gl.LUMINANCE_ALPHA)
+ bufferView = new Uint8Array(heap,data,width*height*2);
+ else
+ {
+ dump('format unknown ' + format + '\n');
+ assert(false);
+ }
+ }
+ else
+ {
+ dump('type unknown ' + type + '\n');
+ assert(false);
+ }
+
+ imandreel_gl.texImage2D(target, level, internalFormat, width, height, border, format, type, bufferView);
+ if ((width&(width-1))==0 && (height&(height-1))==0)
+ {
+ if (target==imandreel_gl.TEXTURE_2D)
+ imandreel_gl.generateMipmap(target);
+}
+ }
+ function myglStencilFunc(sp)
+ {
+ var func = heap32[sp>>2];sp+=4;
+ var ref = heap32[sp>>2];sp+=4;
+ var mask = heap32[sp>>2];sp+=4;
+
+ imandreel_gl.stencilFunc(func, ref, mask);
+ }
+
+ function myglStencilFuncSeparate(sp)
+ {
+ var face = heap32[sp>>2];sp+=4;
+ var func = heap32[sp>>2];sp+=4;
+ var ref = heap32[sp>>2];sp+=4;
+ var mask = heap32[sp>>2];sp+=4;
+
+ imandreel_gl.stencilFuncSeparate(face,func,ref,mask);
+ }
+
+ function myglStencilMaskSeparate(sp)
+ {
+ var face = heap32[sp>>2];sp+=4;
+ var mask = heap32[sp>>2];sp+=4;
+
+ imandreel_gl.stencilMaskSeparate(face,mask);
+ }
+
+ function myglStencilMask(sp)
+ {
+ var mask = heap32[sp>>2];sp+=4;
+
+ imandreel_gl.stencilMask(mask);
+ }
+ function myglStencilOp (sp)
+ {
+ var fail = heap32[sp>>2];sp+=4;
+ var zfail = heap32[sp>>2];sp+=4;
+ var zpass = heap32[sp>>2];sp+=4;
+
+ imandreel_gl.stencilOp(fail, zfail, zpass);
+ }
+
+ function myglStencilOpSeparate (sp)
+ {
+ var face = heap32[sp>>2];sp+=4;
+ var fail = heap32[sp>>2];sp+=4;
+ var zfail = heap32[sp>>2];sp+=4;
+ var zpass = heap32[sp>>2];sp+=4;
+
+ imandreel_gl.stencilOpSeparate(face, fail, zfail, zpass);
+ }
+
+ function myglTexSubImage2D(sp)
+ {
+ var target = heap32[sp>>2];sp+=4;
+ var level = heap32[sp>>2];sp+=4;
+ var xoffset = heap32[sp>>2];sp+=4;
+ var yoffset = heap32[sp>>2];sp+=4;
+ var width = heap32[sp>>2];sp+=4;
+ var height = heap32[sp>>2];sp+=4;
+ var format = heap32[sp>>2];sp+=4;
+ var type = heap32[sp>>2];sp+=4;
+ var data = heap32[sp>>2];sp+=4;
+
+
+
+ var bufferView;
+ if (type == imandreel_gl.UNSIGNED_SHORT_5_6_5 || type == imandreel_gl.UNSIGNED_SHORT_4_4_4_4 || type == imandreel_gl.UNSIGNED_SHORT_5_5_5_1)
+ {
+ bufferView = new Uint16Array(heap,data,width*height);
+ }
+ else if (type == imandreel_gl.UNSIGNED_BYTE)
+ {
+ if (format == imandreel_gl.LUMINANCE)
+ bufferView = new Uint8Array(heap,data,width*height);
+ else if (format == imandreel_gl.RGB)
+ bufferView = new Uint8Array(heap,data,width*height*3);
+ else if (format == imandreel_gl.RGBA)
+ bufferView = new Uint8Array(heap,data,width*height*4);
+ else if (format == imandreel_gl.ALPHA)
+ bufferView = new Uint8Array(heap,data,width*height);
+ }
+
+ imandreel_gl.texSubImage2D(target, level, xoffset, yoffset, width, height, format, type, bufferView);
+ }
+
+
+ function myglCreateBuffer(sp)
+{
+ var id = myglNewSlot();
+ array_ids_ogl[id] = imandreel_gl.createBuffer();
+
+ r_g0 = id;
+}
+
+var glBufferDataArray = [];
+
+function myglBufferData(sp)
+{
+ var target = heapU32[sp>>2]; sp+=4;
+ var size = heapU32[sp>>2]; sp+=4;
+ var data = heapU32[sp>>2]; sp+=4;
+ var usage = heapU32[sp>>2]; sp+=4;
+
+ if (data == 0)
+ imandreel_gl.bufferData(target, size, usage);
+ else
+ {
+ if (usage == imandreel_gl.STATIC_DRAW || true)
+ {
+ var buffer_data = new Int8Array(heap, data, size);
+ imandreel_gl.bufferData(target, buffer_data, usage);
+ }
+ else
+ {
+ var new_size = size/4;
+ var buffer_data = glBufferDataArray[new_size];
+
+ if (buffer_data == null)
+ {
+ buffer_data = new Int32Array(new_size);
+ glBufferDataArray[new_size] = buffer_data;
+ }
+
+ var new_data = data>>2;
+
+ for ( var i = 0 ; i < new_size ; ++i )
+ {
+ buffer_data[i] = heap32[new_data+i];
+ }
+
+ imandreel_gl.bufferData(target, buffer_data, usage);
+ }
+ }
+}
+
+function myglBufferSubData(sp)
+{
+ var target = heapU32[sp>>2]; sp+=4;
+ var offset = heapU32[sp>>2]; sp+=4;
+ var size = heapU32[sp>>2]; sp+=4;
+ var data = heapU32[sp>>2]; sp+=4;
+
+
+ var buffer_data = new Int8Array(heap, data, size);
+ imandreel_gl.bufferSubData(target, offset, buffer_data);
+
+// dump('buffer sub data ' + offset + ' ' + size + ' ' + data + '\n')
+
+}
+
+
+function myglBindBuffer(sp)
+{
+ var target = heapU32[sp>>2]; sp+=4;
+ var id = heapU32[sp>>2]; sp+=4;
+
+ imandreel_gl.bindBuffer(target, array_ids_ogl[id]);
+}
+
+
+function myglUseProgram(sp)
+{
+ var program_id = heap32[sp>>2];sp+=4;
+
+ g_current_program_id = program_id;
+
+ imandreel_gl.useProgram(array_ids_ogl[program_id]);
+
+}
+
+function myglDisableVertexAttribArray(sp)
+{
+ var idx = heapU32[sp>>2];sp+=4;
+ imandreel_gl.disableVertexAttribArray(idx);
+}
+function myglEnableVertexAttribArray(sp)
+{
+ var idx = heapU32[sp>>2];sp+=4;
+ imandreel_gl.enableVertexAttribArray(idx);
+}
+
+function myglVertexAttribPointer(sp)
+{
+ var idx = heapU32[sp>>2];sp+=4;
+ var size = heapU32[sp>>2];sp+=4;
+ var type = heapU32[sp>>2];sp+=4;
+ var normalized = heapU32[sp>>2];sp+=4;
+ var stride = heapU32[sp>>2];sp+=4;
+ var ptr = heapU32[sp>>2];sp+=4;
+
+ //dump(idx + ' ' + size + ' ' + type + ' ' + normalized + ' ' + stride + ' ' + ptr + '\n');
+
+
+ imandreel_gl.vertexAttribPointer(idx, size, type, normalized, stride, ptr);
+}
+
+function myglPolygonOffset(sp)
+{
+ var factor = heapFloat[sp>>2]; sp+=4;
+ var units = heapFloat[sp>>2]; sp+=4;
+ imandreel_gl.polygonOffset(factor, units);
+}
+
+function myglEnable(sp)
+ {
+ var value = heap32[sp>>2];sp+=4;
+
+ imandreel_gl.enable(value);
+ }
+
+function myglDisable(sp)
+ {
+ var value = heap32[sp>>2];sp+=4;
+
+ imandreel_gl.disable(value);
+ }
+
+ function myglDepthFunc(sp)
+ {
+ var func = heapU32[sp>>2];sp+=4;
+
+ imandreel_gl.depthFunc(func);
+
+ }
+
+ function myglGenerateMipmap(sp)
+ {
+ var texture_type = heap32[sp>>2];sp+=4;
+ imandreel_gl.generateMipmap(texture_type);
+ }
+
+ function myglPixelStorei (sp)
+ {
+ var pname = heap32[sp>>2];sp+=4;
+ var param = heap32[sp>>2];sp+=4;
+ imandreel_gl.pixelStorei(pname,param);
+ }
+
+
+ function myglBindTexture(sp)
+ {
+ var texture_type = heap32[sp>>2];sp+=4;
+ var texture_id = heap32[sp>>2];sp+=4;
+
+if (texture_id == 0)
+{
+ imandreel_gl.bindTexture(texture_type, null);
+}
+else
+{
+ var tex = array_ids_ogl[texture_id];
+ imandreel_gl.bindTexture(texture_type, tex);
+ }
+
+ }
+
+ function myglActiveTexture(sp)
+{
+ var param = heapU32[sp>>2];sp+=4;
+ imandreel_gl.activeTexture(param);
+}
+
+function myglCompileShader(sp)
+{
+ var id = heap32[sp>>2];sp+=4;
+
+ var shader = array_ids_ogl[id];
+
+ imandreel_gl.compileShader(shader);
+}
+
+function myglGetUniformLocation(sp)
+{
+ var program_id = heap32[sp>>2];sp+=4;
+ var ptr_string = heap32[sp>>2];sp+=4;
+
+ var string = get_string_from_ptr(ptr_string);
+ var program = array_ids_ogl[program_id];
+ var result = imandreel_gl.getUniformLocation(program, string);
+
+ if (result != null)
+ {
+ program.array_uniform_locations[program.uniform_locations_current_id] = result;
+ r_g0 = program.uniform_locations_current_id;
+ program.uniform_locations_current_id++;
+ }
+ else
+ r_g0 = -1;
+}
+
+function myglIsEnabled(sp)
+{
+ var cap = heap32[sp>>2];sp+=4;
+
+ r_g0 = imandreel_gl.isEnabled(cap);
+}
+
+
+function myglUniform1i(sp)
+{
+ var index = heap32[sp>>2];sp+=4;
+ var value = heap32[sp>>2];sp+=4;
+
+ var program = array_ids_ogl[g_current_program_id];
+
+ var uniform_value = program.array_uniform_locations[index];
+
+ imandreel_gl.uniform1i(uniform_value, value);
+}
+
+function myglUniform2i(sp)
+{
+ var index = heap32[sp>>2];sp+=4;
+ var x = heap32[sp>>2];sp+=4;
+ var y = heap32[sp>>2];sp+=4;
+
+ var program = array_ids_ogl[g_current_program_id];
+
+ var uniform_value = program.array_uniform_locations[index];
+
+ imandreel_gl.uniform2i(uniform_value, x,y);
+}
+
+function myglUniform3i(sp)
+{
+ var index = heap32[sp>>2];sp+=4;
+ var x = heap32[sp>>2];sp+=4;
+ var y = heap32[sp>>2];sp+=4;
+ var z = heap32[sp>>2];sp+=4;
+
+ var program = array_ids_ogl[g_current_program_id];
+
+ var uniform_value = program.array_uniform_locations[index];
+
+ imandreel_gl.uniform3i(uniform_value, x,y,z);
+}
+
+function myglUniform4i(sp)
+{
+ var index = heap32[sp>>2];sp+=4;
+ var x = heap32[sp>>2];sp+=4;
+ var y = heap32[sp>>2];sp+=4;
+ var z = heap32[sp>>2];sp+=4;
+ var w = heap32[sp>>2];sp+=4;
+
+ var program = array_ids_ogl[g_current_program_id];
+
+ var uniform_value = program.array_uniform_locations[index];
+
+ imandreel_gl.uniform4i(uniform_value, x,y,z,w);
+}
+
+function myglUniform1f(sp)
+{
+ var index = heap32[sp>>2];sp+=4;
+ var value = heapFloat[sp>>2];sp+=4;
+
+ var program = array_ids_ogl[g_current_program_id];
+
+ var uniform_value = program.array_uniform_locations[index];
+
+ imandreel_gl.uniform1f(uniform_value, value);
+}
+
+function myglUniform3f(sp)
+{
+ var index = heap32[sp>>2];sp+=4;
+ var x = heapFloat[sp>>2];sp+=4;
+ var y = heapFloat[sp>>2];sp+=4;
+ var z = heapFloat[sp>>2];sp+=4;
+
+ var program = array_ids_ogl[g_current_program_id];
+
+ var uniform_value = program.array_uniform_locations[index];
+
+ imandreel_gl.uniform3f(uniform_value, x,y,z);
+}
+
+function myglUniform2f(sp)
+{
+ var index = heap32[sp>>2];sp+=4;
+ var x = heapFloat[sp>>2];sp+=4;
+ var y = heapFloat[sp>>2];sp+=4;
+
+ var program = array_ids_ogl[g_current_program_id];
+
+ var uniform_value = program.array_uniform_locations[index];
+
+ imandreel_gl.uniform2f(uniform_value, x,y);
+}
+
+
+function myglUniform4f(sp)
+{
+ var index = heap32[sp>>2];sp+=4;
+ var x = heapFloat[sp>>2];sp+=4;
+ var y = heapFloat[sp>>2];sp+=4;
+ var z = heapFloat[sp>>2];sp+=4;
+ var w = heapFloat[sp>>2];sp+=4;
+
+ var program = array_ids_ogl[g_current_program_id];
+ var uniform_value = program.array_uniform_locations[index];
+
+ imandreel_gl.uniform4f(uniform_value, x,y,z,w);
+}
+
+function myglUniform1fv(sp)
+{
+ var index = heap32[sp>>2];sp+=4;
+ var count = heap32[sp>>2];sp+=4;
+ var data = heap32[sp>>2];sp+=4;
+
+ var new_data = data>>2;
+ var new_count = count;
+ var bufferView = new Float32Array(new_count);
+
+ for ( var i = 0 ; i < new_count ; ++i )
+ {
+ bufferView[i] = heapFloat[new_data+i];
+ }
+
+ var program = array_ids_ogl[g_current_program_id];
+ var uniform_value = program.array_uniform_locations[index];
+ imandreel_gl.uniform1fv(uniform_value, bufferView);
+
+
+}
+
+function myglUniform1iv(sp)
+{
+ var index = heap32[sp>>2];sp+=4;
+ var count = heap32[sp>>2];sp+=4;
+ var data = heap32[sp>>2];sp+=4;
+
+ var new_data = data>>2;
+ var new_count = count;
+ var bufferView = new Int32Array(new_count);
+
+ for ( var i = 0 ; i < new_count ; ++i )
+ {
+ bufferView[i] = heap32[new_data+i];
+ }
+
+ var program = array_ids_ogl[g_current_program_id];
+ var uniform_value = program.array_uniform_locations[index];
+ imandreel_gl.uniform1iv(uniform_value, bufferView);
+}
+
+function myglUniform2iv(sp)
+{
+ var index = heap32[sp>>2];sp+=4;
+ var count = heap32[sp>>2];sp+=4;
+ var data = heap32[sp>>2];sp+=4;
+
+ var new_data = data>>2;
+ var new_count = count*2;
+ var bufferView = new Int32Array(new_count);
+
+ for ( var i = 0 ; i < new_count ; ++i )
+ {
+ bufferView[i] = heap32[new_data+i];
+ }
+
+ var program = array_ids_ogl[g_current_program_id];
+ var uniform_value = program.array_uniform_locations[index];
+ imandreel_gl.uniform2iv(uniform_value, bufferView);
+}
+
+function myglUniform3iv(sp)
+{
+ var index = heap32[sp>>2];sp+=4;
+ var count = heap32[sp>>2];sp+=4;
+ var data = heap32[sp>>2];sp+=4;
+
+ var new_data = data>>2;
+ var new_count = count*3;
+ var bufferView = new Int32Array(new_count);
+
+ for ( var i = 0 ; i < new_count ; ++i )
+ {
+ bufferView[i] = heap32[new_data+i];
+ }
+
+ var program = array_ids_ogl[g_current_program_id];
+ var uniform_value = program.array_uniform_locations[index];
+ imandreel_gl.uniform3iv(uniform_value, bufferView);
+}
+
+function myglUniform4iv(sp)
+{
+ var index = heap32[sp>>2];sp+=4;
+ var count = heap32[sp>>2];sp+=4;
+ var data = heap32[sp>>2];sp+=4;
+
+ var new_data = data>>2;
+ var new_count = count*4;
+ var bufferView = new Int32Array(new_count);
+
+ for ( var i = 0 ; i < new_count ; ++i )
+ {
+ bufferView[i] = heap32[new_data+i];
+ }
+
+ var program = array_ids_ogl[g_current_program_id];
+ var uniform_value = program.array_uniform_locations[index];
+ imandreel_gl.uniform4iv(uniform_value, bufferView);
+}
+
+
+
+function myglUniform3fv(sp)
+{
+ myglCreateUniformArrays();
+
+ var index = heap32[sp>>2];sp+=4;
+ var count = heap32[sp>>2];sp+=4;
+ var data = heap32[sp>>2];sp+=4;
+
+ var new_data = data>>2;
+ var new_count = count*3;
+ var bufferView = uniformArrays3[count];
+
+ for ( var i = 0 ; i < new_count ; ++i )
+ {
+ bufferView[i] = heapFloat[new_data+i];
+ }
+
+ var program = array_ids_ogl[g_current_program_id];
+ var uniform_value = program.array_uniform_locations[index];
+ imandreel_gl.uniform3fv(uniform_value, bufferView);
+}
+
+function myglUniform2fv(sp)
+{
+ myglCreateUniformArrays();
+
+ var index = heap32[sp >> 2]; sp += 4;
+ var count = heap32[sp >> 2]; sp += 4;
+ var data = heap32[sp >> 2]; sp += 4;
+
+ var new_data = data>>2;
+ var new_count = count*2;
+ var bufferView = uniformArrays2[count];
+
+ for ( var i = 0 ; i < new_count ; ++i )
+ {
+ bufferView[i] = heapFloat[new_data+i];
+ }
+
+
+ var program = array_ids_ogl[g_current_program_id];
+ var uniform_value = program.array_uniform_locations[index];
+ imandreel_gl.uniform2fv(uniform_value, bufferView);
+}
+
+
+function myglUniform4fv(sp)
+{
+ myglCreateUniformArrays();
+
+ var index = heap32[sp>>2];sp+=4;
+ var count = heap32[sp>>2];sp+=4;
+ var data = heap32[sp>>2];sp+=4;
+
+
+ var new_data = data>>2;
+ var new_count = count*4;
+ var bufferView = uniformArrays4[count];
+
+ for ( var i = 0 ; i < new_count ; ++i )
+ {
+ bufferView[i] = heapFloat[new_data+i];
+ }
+
+
+ var program = array_ids_ogl[g_current_program_id];
+ var uniform_value = program.array_uniform_locations[index];
+ imandreel_gl.uniform4fv(uniform_value, bufferView);
+}
+
+
+function myglUniformMatrix4fv(sp)
+{
+ myglCreateUniformArrays();
+
+ var index = heap32[sp>>2];sp+=4;
+ var count = heap32[sp>>2];sp+=4;
+ var transpose = heap32[sp>>2];sp+=4;
+ var ptr = heap32[sp>>2];sp+=4;
+
+ var program = array_ids_ogl[g_current_program_id];
+ var uniform_value = program.array_uniform_locations[index];
+
+ //var buffer_data = new Float32Array(heap, ptr, count*16);
+ for ( var i = 0 ; i < count*16 ; ++i )
+ {
+ uniformArrays4[count*4][i] = heapFloat[(ptr>>2)+i];
+ }
+
+ //imandreel_gl.uniformMatrix4fv(uniform_value, transpose, buffer_data);
+ //imandreel_gl.uniformMatrix4fv(uniform_value, transpose, heapFloat.subarray(ptr/4,(ptr/4)+(count*16)));
+ imandreel_gl.uniformMatrix4fv(uniform_value, transpose, uniformArrays4[count*4]);
+}
+
+function myglUniformMatrix3fv(sp)
+{
+ myglCreateUniformArrays();
+
+ var index = heap32[sp>>2];sp+=4;
+ var count = heap32[sp>>2];sp+=4;
+ var transpose = heap32[sp>>2];sp+=4;
+ var ptr = heap32[sp>>2];sp+=4;
+
+ var program = array_ids_ogl[g_current_program_id];
+ var uniform_value = program.array_uniform_locations[index];
+
+ //var buffer_data = new Float32Array(heap, ptr, count*9);
+ for ( var i = 0 ; i < count*9 ; ++i )
+ {
+ uniformArrays3[count*3][i] = heapFloat[(ptr>>2)+i];
+ }
+
+ //imandreel_gl.uniformMatrix3fv(uniform_value, transpose, buffer_data);
+ //imandreel_gl.uniformMatrix3fv(uniform_value, transpose, heapFloat.subarray(ptr/4,(ptr/4)+(count*9)));
+ imandreel_gl.uniformMatrix3fv(uniform_value, transpose, uniformArrays3[count*3]);
+}
+
+
+
+function myglValidateProgram(sp)
+{
+ var program_id = heap32[sp>>2];sp+=4;
+
+ imandreel_gl.validateProgram(array_ids_ogl[program_id]);
+}
+
+function myglGetAttribLocation(sp)
+{
+ var program_id = heap32[sp>>2];sp+=4;
+ var ptr_string = heap32[sp>>2];sp+=4;
+
+ var string = get_string_from_ptr(ptr_string);
+ var result = imandreel_gl.getAttribLocation(array_ids_ogl[program_id], string);
+
+ r_g0 = result;
+}
+
+function myglGetProgramInfoLogLength(sp)
+{
+ var program_id = heap32[sp>>2];sp+=4;
+
+ var info_log = imandreel_gl.getProgramInfoLog(array_ids_ogl[program_id]);
+
+ if (info_log)
+ r_g0 = info_log.length+1;
+ else
+ r_g0 = 0;
+}
+
+
+function myglGetProgramInfoLog(sp)
+{
+ var program_id = heap32[sp>>2];sp+=4;
+ var ptr_string = heap32[sp>>2];sp+=4;
+
+ var info_log = imandreel_gl.getProgramInfoLog(array_ids_ogl[program_id]);
+
+ fill_ptr_from_string(ptr_string, info_log);
+}
+
+function myglGetShaderInfoLogLength(sp)
+{
+ var program_id = heap32[sp>>2];sp+=4;
+
+ var info_log = imandreel_gl.getShaderInfoLog(array_ids_ogl[program_id]);
+
+ if (info_log)
+ r_g0 = info_log.length+1;
+ else
+ r_g0 = 0;
+}
+
+function myglGetShaderInfoLog(sp)
+{
+ var program_id = heap32[sp>>2];sp+=4;
+ var ptr_string = heap32[sp>>2];sp+=4;
+
+ var info_log = imandreel_gl.getShaderInfoLog(array_ids_ogl[program_id]);
+
+ fill_ptr_from_string(ptr_string, info_log);
+}
+
+function myglViewport(sp) {
+ var x = heap32[sp >> 2]; sp += 4;
+ var y = heap32[sp >> 2]; sp += 4;
+ var width = heap32[sp >> 2]; sp += 4;
+ var height = heap32[sp >> 2]; sp += 4;
+
+ imandreel_gl.viewport(x,y,width,height);
+
+}
+
+function myglScissor(sp)
+{
+ var x = heap32[sp >> 2]; sp += 4;
+ var y = heap32[sp >> 2]; sp += 4;
+ var width = heap32[sp >> 2]; sp += 4;
+ var height = heap32[sp >> 2]; sp += 4;
+
+ imandreel_gl.scissor(x,y,width,height);
+}
+
+
+
+function myglClearColor(sp)
+{
+ var r = heapFloat[sp>>2];sp+=4;
+ var g = heapFloat[sp>>2];sp+=4;
+ var b = heapFloat[sp>>2];sp+=4;
+ var a = heapFloat[sp>>2];sp+=4;
+
+ imandreel_gl.clearColor(r,g,b,a);
+
+
+}
+
+function myglClearStencil(sp)
+{
+ var stencil = heap32[sp>>2];sp+=4;
+ imandreel_gl.clearStencil(stencil);
+}
+
+
+function myglClearDepthf(sp)
+{
+ var depth = heapFloat[sp>>2];sp+=4;
+ imandreel_gl.clearDepth(depth);
+}
+
+function myglClear(sp)
+ {
+ var mask = heap32[sp>>2];sp+=4;
+
+
+ //dump('clear ' + mask + '\n');
+ if (mandreel_draw_enable)
+ imandreel_gl.clear(mask);
+ }
+
+ function myglGetError(sp)
+ {
+// r_g0 = imandreel_gl.getError();
+ r_g0 = 0;
+ }
+
+ function myglGetProgramParameter(sp)
+ {
+ var program_id = heap32[sp>>2];sp+=4;
+ var pname = heap32[sp>>2];sp+=4;
+
+ r_g0 = imandreel_gl.getProgramParameter(array_ids_ogl[program_id], pname);
+ }
+
+ function myglGetActiveAttrib (sp)
+ {
+ var program_id = heap32[sp>>2];sp+=4;
+ var index = heap32[sp>>2];sp+=4;
+ var ptr = heap32[sp>>2];sp+=4;
+
+ var result = imandreel_gl.getActiveAttrib(array_ids_ogl[program_id], index);
+
+ if (result != null)
+ {
+ heap32[(ptr)>>2] = result.size;
+ heap32[(ptr+4)>>2] = result.type;
+ fill_ptr_from_string(ptr+8, result.name);
+ r_g0 = 0;
+ }
+ else
+ r_g0 = 1;
+ }
+
+ function myglGetActiveUniform (sp)
+ {
+ var program_id = heap32[sp>>2];sp+=4;
+ var index = heap32[sp>>2];sp+=4;
+ var ptr = heap32[sp>>2];sp+=4;
+
+ var result = imandreel_gl.getActiveUniform(array_ids_ogl[program_id], index);
+
+ if (result != null)
+ {
+ heap32[(ptr)>>2] = result.size;
+ heap32[(ptr+4)>>2] = result.type;
+ fill_ptr_from_string(ptr+8, result.name);
+ r_g0 = 0;
+ }
+ else
+ r_g0 = 1;
+ }
+
+ function myglTexParameterf (sp)
+ {
+ var target = heap32[sp>>2];sp+=4;
+ var pname = heap32[sp>>2];sp+=4;
+ var value = heapFloat[sp>>2];sp+=4;
+
+ imandreel_gl.texParameterf(target,pname,value);
+}
+
+function myglTexParameteri (sp)
+ {
+ var target = heap32[sp>>2];sp+=4;
+ var pname = heap32[sp>>2];sp+=4;
+ var value = heap32[sp>>2];sp+=4;
+
+ imandreel_gl.texParameteri(target,pname,value);
+}
+
+function myglCullFace (sp)
+ {
+ var mode = heap32[sp>>2];sp+=4;
+ imandreel_gl.cullFace(mode);
+ }
+
+ function myglDepthMask (sp)
+ {
+ var flag = heap32[sp>>2];sp+=4;
+ imandreel_gl.depthMask(flag);
+ }
+
+ function myglDepthRangef (sp)
+ {
+ var zNear = heapFloat[sp>>2];sp+=4;
+ var zFar = heapFloat[sp>>2];sp+=4;
+ imandreel_gl.depthRange(zNear, zFar);
+ }
+
+function myglFrontFace (sp)
+ {
+ var mode = heap32[sp>>2];sp+=4;
+ imandreel_gl.frontFace(mode);
+ }
+
+ function myglBlendFunc (sp)
+ {
+ var sfactor = heap32[sp>>2];sp+=4;
+ var dfactor = heap32[sp>>2];sp+=4;
+ imandreel_gl.blendFunc(sfactor,dfactor);
+ }
+
+ function myglBlendColor(sp)
+ {
+ var red = heapFloat[sp>>2];sp+=4;
+ var green = heapFloat[sp>>2];sp+=4;
+ var blue = heapFloat[sp>>2];sp+=4;
+ var alpha = heapFloat[sp>>2];sp+=4;
+ imandreel_gl.blendColor(red,green,blue,alpha);
+ }
+
+ function myglBlendEquation(sp)
+ {
+ var mode = heap32[sp>>2];sp+=4;
+ imandreel_gl.blendEquation(mode);
+ }
+
+ function myglBlendEquationSeparate(sp)
+ {
+ var modeRGB = heap32[sp>>2];sp+=4;
+ var modeAlpha = heap32[sp>>2];sp+=4;
+ imandreel_gl.blendEquationSeparate(modeRGB,modeAlpha);
+ }
+
+ function myglBlendFuncSeparate(sp)
+ {
+ var srcRGB = heap32[sp>>2];sp+=4;
+ var dstRGB = heap32[sp>>2];sp+=4;
+ var srcAlpha = heap32[sp>>2];sp+=4;
+ var dstAlpha = heap32[sp>>2];sp+=4;
+
+ imandreel_gl.blendFuncSeparate(srcRGB,dstRGB,srcAlpha,dstAlpha);
+ }
+
+
+ function myglColorMask (sp)
+ {
+ var red = heap32[sp>>2];sp+=4;
+ var green = heap32[sp>>2];sp+=4;
+ var blue = heap32[sp>>2];sp+=4;
+ var alpha = heap32[sp>>2];sp+=4;
+ imandreel_gl.colorMask(red,green,blue,alpha);
+ }
+
+ function removeByElement(arrayName,arrayElement)
+ {
+ for(var i=0; i<arrayName.length;i++ )
+ {
+ if(arrayName[i]==arrayElement)
+ {
+ arrayName.splice(i,1);
+ return;
+ }
+ }
+ }
+
+
+ function mygetParameter(sp)
+ {
+ var pname = heap32[sp>>2];sp+=4;
+ r_g0 = imandreel_gl.getParameter(pname);
+ }
+
+
+ function mygetProgramParameter(sp)
+ {
+ var program_id = heap32[sp>>2];sp+=4;
+ var pname = heap32[sp>>2];sp+=4;
+ r_g0 = imandreel_gl.getProgramParameter(array_ids_ogl[program_id], pname);
+ }
+
+ function mygetShaderParameter(sp)
+ {
+ var shader_id = heap32[sp>>2];sp+=4;
+ var pname = heap32[sp>>2];sp+=4;
+ r_g0 = imandreel_gl.getShaderParameter(array_ids_ogl[shader_id], pname);
+ }
+
+ function myglVertexAttrib1f(sp)
+ {
+ var index = heap32[sp>>2];sp+=4;
+ var x = heapFloat[sp>>2];sp+=4;
+ imandreel_gl.vertexAttrib1f(index,x);
+ }
+
+ function myglVertexAttrib2f(sp)
+ {
+ var index = heap32[sp>>2];sp+=4;
+ var x = heapFloat[sp>>2];sp+=4;
+ var y = heapFloat[sp>>2];sp+=4;
+ imandreel_gl.vertexAttrib2f(index,x,y);
+ }
+
+ function myglVertexAttrib3f(sp)
+ {
+ var index = heap32[sp>>2];sp+=4;
+ var x = heapFloat[sp>>2];sp+=4;
+ var y = heapFloat[sp>>2];sp+=4;
+ var z = heapFloat[sp>>2];sp+=4;
+ imandreel_gl.vertexAttrib3f(index,x,y,z);
+ }
+
+ function myglVertexAttrib4f(sp)
+ {
+ var index = heap32[sp>>2];sp+=4;
+ var x = heapFloat[sp>>2];sp+=4;
+ var y = heapFloat[sp>>2];sp+=4;
+ var z = heapFloat[sp>>2];sp+=4;
+ var w = heapFloat[sp>>2];sp+=4;
+ imandreel_gl.vertexAttrib4f(index,x,y,z,w);
+ }
+
+ function myglVertexAttrib1fv(sp)
+ {
+ var index = heap32[sp>>2];sp+=4;
+ var ptr = heap32[sp>>2];sp+=4;
+ var x = heap32[ptr>>2];ptr+=4;
+ imandreel_gl.vertexAttrib1f(index,x);
+ }
+
+ function myglVertexAttrib2fv(sp)
+ {
+ var index = heap32[sp>>2];sp+=4;
+ var ptr = heap32[sp>>2];sp+=4;
+ var x = heap32[ptr>>2];ptr+=4;
+ var y = heap32[ptr>>2];ptr+=4;
+
+ imandreel_gl.vertexAttrib2f(index,x,y);
+ }
+
+ function myglVertexAttrib3fv(sp)
+ {
+ var index = heap32[sp>>2];sp+=4;
+ var ptr = heap32[sp>>2];sp+=4;
+ var x = heap32[ptr>>2];ptr+=4;
+ var y = heap32[ptr>>2];ptr+=4;
+ var z = heap32[ptr>>2];ptr+=4;
+
+ imandreel_gl.vertexAttrib3f(index,x,y,z);
+ }
+
+ function myglVertexAttrib4fv(sp)
+ {
+ var index = heap32[sp>>2];sp+=4;
+ var ptr = heap32[sp>>2];sp+=4;
+ var x = heap32[ptr>>2];ptr+=4;
+ var y = heap32[ptr>>2];ptr+=4;
+ var z = heap32[ptr>>2];ptr+=4;
+ var w = heap32[ptr>>2];ptr+=4;
+
+ imandreel_gl.vertexAttrib4f(index,x,y,z,w);
+ }
+
+
+ function myglDeleteTexture (sp)
+ {
+
+ var texture_id = heap32[sp>>2];sp+=4;
+
+ var texture = array_ids_ogl[texture_id];
+
+ imandreel_gl.deleteTexture(texture);
+
+ array_ids_ogl[texture_id] = null;
+
+ myglFreeSlot(texture_id);
+ }
+
+ function myglDeleteBuffer (sp)
+ {
+
+ var buffer_id = heap32[sp>>2];sp+=4;
+
+ var buffer = array_ids_ogl[buffer_id];
+
+ imandreel_gl.deleteBuffer(buffer);
+
+ array_ids_ogl[buffer_id] = null;
+
+ myglFreeSlot(buffer_id);
+ }
+
+ function myglDeleteFrameBuffer (sp)
+ {
+ var framebuffer_id = heap32[sp>>2];sp+=4;
+
+ var framebuffer = array_ids_ogl[framebuffer_id];
+
+ imandreel_gl.deleteFramebuffer(framebuffer);
+
+ array_ids_ogl[framebuffer_id] = null;
+
+ myglFreeSlot(framebuffer_id);
+ }
+
+
+ function myglDeleteProgram (sp)
+ {
+ var program_id = heap32[sp>>2];sp+=4;
+
+ var program = array_ids_ogl[program_id];
+
+ imandreel_gl.deleteProgram(program);
+
+ array_ids_ogl[program_id] = null;
+
+ myglFreeSlot(program_id);
+ }
+
+ function myglDeleteRenderBuffer (sp)
+ {
+ var renderbuffer_id = heap32[sp>>2];sp+=4;
+
+ var renderbuffer = array_ids_ogl[renderbuffer_id];
+
+ imandreel_gl.deleteRenderbuffer(renderbuffer);
+
+ array_ids_ogl[renderbuffer_id] = null;
+
+ myglFreeSlot(renderbuffer_id);
+ }
+
+ function myglDeleteShader (sp)
+ {
+ var shader_id = heap32[sp>>2];sp+=4;
+
+ var shader = array_ids_ogl[shader_id];
+
+ imandreel_gl.deleteShader(shader);
+
+ array_ids_ogl[shader_id] = null;
+
+ myglFreeSlot(shader_id);
+ }
+
+ function myglInit(sp)
+ {
+
+ for (var i=0;i<max_ogl_id;++i)
+ {
+ array_ids_ogl_enable.push(i+1);
+ }
+ }
+
+ function myglReadPixels(sp)
+ {
+ var x = heap32[sp>>2];sp+=4;
+ var y = heap32[sp>>2];sp+=4;
+ var width = heap32[sp>>2];sp+=4;
+ var height = heap32[sp>>2];sp+=4;
+ var format = heap32[sp>>2];sp+=4;
+ var type = heap32[sp>>2];sp+=4;
+ var pixels = heap32[sp>>2];sp+=4;
+
+ var bufferView = new Uint8Array(heap,pixels,width*height*4);
+ imandreel_gl.readPixels(x,y,width,height,format,type,bufferView);
+}
+
+function mandreel_internal_DrawSprite(sp)
+{
+ if ( imandreel_ctx_canvas == null )
+ {
+ console.log("Mandreel_2D_DrawSprite error: canvas context is null");
+ return;
+ }
+
+ var hw_id = heap32[sp>>2]; sp+=4;
+ var u0 = heapFloat[sp>>2]; sp+=4;
+ var u1 = heapFloat[sp>>2]; sp+=4;
+ var v0 = heapFloat[sp>>2]; sp+=4;
+ var v1 = heapFloat[sp>>2]; sp+=4;
+ //var x = heapFloat[sp>>2]; sp+=4;
+ //var y = heapFloat[sp>>2]; sp+=4;
+ var sx = heapFloat[sp>>2]; sp+=4;
+ var sy = heapFloat[sp>>2]; sp+=4;
+ //var rot = heapFloat[sp>>2]; sp+=4;
+ var m11 = heapFloat[sp>>2]; sp+=4;
+ var m12 = heapFloat[sp>>2]; sp+=4;
+ var m21 = heapFloat[sp>>2]; sp+=4;
+ var m22 = heapFloat[sp>>2]; sp+=4;
+ var tx = heapFloat[sp>>2]; sp+=4;
+ var ty = heapFloat[sp>>2]; sp+=4;
+ var color = heap32[sp>>2]; sp+=4;
+
+ //ctx_canvas.fillStyle="#FF0000";
+ //ctx_canvas.fillRect(tx,ty,sx,sy);
+ var texture = array_ids_ogl[hw_id];
+
+ if ( texture == null )
+ {
+ console.log("Mandreel_2D_DrawSprite error: texture invalid ("+hw_id+") or loading yet...");
+ return;
+ }
+
+ var width = (u1-u0)*texture.width;
+ var height = (v1-v0)*texture.height;
+
+ if (width == 0)
+ return;
+ if (height == 0)
+ return;
+
+ var x_offset = u0*texture.width;
+ var y_offset = v0*texture.height;
+
+ //dump(x_offset + ' ' + y_offset + ' ' + texture.width + ' ' + texture.height + ' ' + x + ' ' +y + ' ' + width + ' ' + height + '\n');
+
+ x_offset = x_offset % texture.width;
+ y_offset = y_offset % texture.height;
+
+ var scale_x, scale_y;
+ if (sx<0)
+ scale_x = -1;
+ else
+ scale_x = 1;
+ if (sy<0)
+ scale_y = -1;
+ else
+ scale_y = 1;
+
+ var simple_draw = false;//scale_x == 1 && scale_y == 1 && rot == 0;
+ var x_pos = (0.5*sx + tx/* + 240*/);
+ var y_pos = (/*320*/ + ((0.5*sy + ty) /*+ 160*/));
+ var new_sx = sx;
+ var new_sy = sy;
+
+ imandreel_ctx_canvas.globalAlpha = (color>>>24)/255;
+
+ if (!simple_draw)
+ {
+ imandreel_ctx_canvas.save()
+ /*ctx_canvas.translate(x_pos + new_sx/2, y_pos + new_sy/2)
+ ctx_canvas.rotate(-rot*Math.PI/180);
+ ctx_canvas.scale(scale_x, scale_y);
+ ctx_canvas.translate(-(x_pos + new_sx/2), -(y_pos + new_sy/2))*/
+ imandreel_ctx_canvas.setTransform(m11,m12,m21,m22,tx,ty);
+ }
+
+ /*if (x_offset<0 || y_offset<0 || (x_offset+width)>texture.width || (y_offset+height)>texture.height)
+ {
+ dump(x_offset + ' ' + y_offset + ' ' + texture.width + ' ' + texture.height + ' ' + x + ' ' +y + ' ' + width + ' ' + height + '\n');
+ }*/
+
+ if (new_sx<0)
+ {
+ x_pos += new_sx;
+ new_sx = -new_sx;
+ }
+ if (new_sy<0)
+ {
+ y_pos += new_sy;
+ new_sy = -new_sy;
+ }
+
+ //ctx_canvas.drawImage(texture,x_offset,y_offset, width, height, x_pos, y_pos , new_sx, new_sy);
+ imandreel_ctx_canvas.drawImage(texture,x_offset,y_offset, width, height, 0,0, 1,1);
+
+ if (!simple_draw)
+ imandreel_ctx_canvas.restore()
+}
+
+function mandreel_internal_UpdateTexture(sp)
+{
+ if ( imandreel_ctx_canvas == null )
+ {
+ console.log("Mandreel_2D_UpdateTexture error: canvas context is null");
+ return;
+ }
+
+ var hw_id = heap32[sp>>2]; sp+=4;
+ var dataptr = heap32[sp>>2]; sp+=4;
+ var width = heap32[sp>>2]; sp+=4;
+ var height = heap32[sp>>2]; sp+=4;
+
+ var imageData = imandreel_ctx_canvas.getImageData(0,0,width,height);
+ var data = imageData.data;
+ for (var y = 0; y < (height*width*4); ++y)
+ {
+ data[y] = heapU8[dataptr + y];
+ }
+ imandreel_ctx_canvas.putImageData(imageData,0,0);
+
+ var dataurl = imandreel_ctx_canvas.canvas.toDataURL();
+
+ var image = new Image();
+ image.onerror = function()
+ {
+ dump('error updating texture '+hw_id+'\n');
+ }
+ image.onload = function()
+ {
+ //dump('texture '+hw_id+' updated\n'+'width '+image.width+' height '+image.height);
+ array_ids_ogl[hw_id] = image;
+ }
+ image.src = dataurl;
+}
+
+function mandreel_internal_WriteFramebuffer(sp)
+{
+ if ( imandreel_ctx_canvas == null )
+ {
+ console.log("Mandreel_2D_UpdateTexture error: canvas context is null");
+ return;
+ }
+
+ var dataptr = heap32[sp>>2]; sp+=4;
+ var width = heap32[sp>>2]; sp+=4;
+ var height = heap32[sp>>2]; sp+=4;
+
+ var imageData = imandreel_ctx_canvas.getImageData(0,0,width,height);
+ if ( imageData != null )
+ {
+ var data = imageData.data;
+ if ( data != null )
+ {
+ var size = (height*width*4);
+ if ( typeof imageData.data.set != "undefined" )
+ {
+ var sub = heapU8.subarray(dataptr,dataptr+size);
+ imageData.data.set(sub);
+ }
+ else
+ {
+ for (var y = 0; y < size; ++y)
+ {
+ data[y] = heapU8[dataptr + y];
+ }
+ }
+
+ imandreel_ctx_canvas.putImageData(imageData,0,0);
+ }
+ else
+ {
+ dump("WriteFramebuffer canvas data null");
+ }
+ }
+ else
+ {
+ dump("WriteFramebuffer canvas imageData null");
+ }
+}
+var mandreel_audio_init = null_mandreel_audio;
+var mandreel_audio_end = null_mandreel_audio;
+var mandreel_audio_update = null_mandreel_audio;
+var mandreel_audio_createBuffer = null_mandreel_audio;
+var mandreel_audio_playChannel = null_mandreel_audio;
+var mandreel_audio_stopChannel = null_mandreel_audio;
+var mandreel_audio_setChannelVolume = null_mandreel_audio;
+var mandreel_audio_setChannelPan = null_mandreel_audio;
+var mandreel_audio_setChannelPitch = null_mandreel_audio;
+var mandreel_audio_playMusic = null_mandreel_audio;
+var mandreel_audio_stopMusic = null_mandreel_audio;
+var mandreel_audio_useMusicFunctions = _mandreel_audio_useMusicFunctions;
+var mandreel_audio_checkBuffersPending = null_mandreel_audio;
+var mandreel_audio_setMusicVol = null_mandreel_audio;
+
+var mandreel_audio_startedFunction = 0;
+
+var MandreelAudioDriver = "null";
+
+function mandreel_start_audio(audioServer, audioUrl,startedFunction)
+{
+ mandreel_audio_startedFunction = startedFunction;
+
+ // Check audio driver data availability
+ var webAudioDataAvailable = false;
+ var flashAudioDataAvailable = false;
+ var flashLiteAudioDataAvailable = false;
+ var audiotagsDataAvailable = false;
+ var FatLines = mandreelFatData.split('\n');
+ for ( var i=0;i<FatLines.length;++i )
+ {
+ var params = FatLines[i].split(',');
+ if ( params[0] == "audiodriver" )
+ {
+ var data = params[1];
+ data = data.replace('\r','');
+ if ( data == "webaudio" )
+ webAudioDataAvailable = true;
+ else if ( data == "flash" )
+ flashAudioDataAvailable = true;
+ else if ( data == "flashlite" )
+ flashLiteAudioDataAvailable = true;
+ else if ( data == "audiotag" )
+ audiotagsDataAvailable = true;
+ }
+ }
+
+
+ // Init audio driver
+ {
+ // webaudio
+ if ( webAudioDataAvailable && MandreelAudioDriver == "null" )
+ {
+ try { webAudioContext = new webkitAudioContext(); } catch(err) { webAudioContext = 0; }
+ if ( webAudioContext )
+ {
+ wa_MainAudioDriver();
+ MandreelAudioDriver = "webAudio";
+ }
+ }
+ // flash
+ if ( flashAudioDataAvailable && MandreelAudioDriver == "null" )
+ {
+ MandreelAudioDriver = "flash";
+ if ( audioServer == null )
+ {
+ audioServer = "";
+ audioUrl = "";
+ }
+ fl_MainAudioDriver(audioServer,audioUrl);
+ }
+ // flashlite
+ if ( flashLiteAudioDataAvailable && MandreelAudioDriver == "null" )
+ {
+ MandreelAudioDriver = "flashlite";
+ mandreel_flashaudio_lite = true;
+ fl_MainAudioDriver("","");
+ }
+ // audiotags
+ if ( audiotagsDataAvailable && MandreelAudioDriver == "null" )
+ {
+ MandreelAudioDriver = "audiotag";
+ at_MainAudioDriver();
+ }
+ // null
+ if ( MandreelAudioDriver == "null" )
+ {
+ null_MainAudioDriver();
+ }
+ }
+ dump("AudioDriver ("+MandreelAudioDriver+")");
+}
+
+function mandreel_audio_isLogEnabled(sp)
+{
+ r_g0 = 0;
+}
+
+function _mandreel_audio_useMusicFunctions(sp)
+{
+ r_g0 = 0;
+}
+
+function MandreelAudioStarted()
+{
+ setTimeout(mandreel_audio_startedFunction, 10);
+}
+
+
+function mandreel_audio_getAudioDriverName(sp)
+{
+ var name_ptr = heap32[sp>>2];sp+=4;
+ fill_ptr_from_string(name_ptr, MandreelAudioDriver);
+}
+var webAudioUseMusicFunctions = true;
+
+function wa_mandreel_audio_init(sp)
+{
+}
+
+function wa_mandreel_audio_end(sp)
+{
+}
+
+function wa_mandreel_audio_update(sp)
+{
+}
+
+function wa_mandreel_audio_checkBuffersPending(sp)
+{
+ r_g0 = wa_imp_mandreel_audio_checkBuffersPending();
+}
+
+function wa_mandreel_audio_createBuffer(sp)
+{
+ var ptr_fileName = heap32[sp>>2];sp+=4;
+ var maxChannels = heap32[sp>>2];sp+=4;
+ var fileName = get_string_from_ptr(ptr_fileName).toLowerCase();
+ wa_imp_mandreel_audio_createBuffer(fileName);
+
+ r_g0 = 0;
+}
+
+function wa_mandreel_audio_playChannel(sp)
+{
+ var ptr_fileName = heap32[sp>>2];sp+=4;
+ var channel = heap32[sp>>2];sp+=4;
+ var vol = heapFloat[sp>>2];sp+=4;
+ var loop = heap32[sp>>2];sp+=4;
+ var pitch = heapFloat[sp>>2];sp+=4;
+ var fileName = get_string_from_ptr(ptr_fileName).toLowerCase();
+ wa_imp_mandreel_audio_playChannel(fileName,channel,vol,loop,pitch);
+ r_g0 = 0;
+}
+
+function wa_mandreel_audio_stopChannel(sp)
+{
+ var ptr_fileName = heap32[sp>>2];sp+=4;
+ var channel = heap32[sp>>2];sp+=4;
+ var index = heapFloat[sp>>2];sp+=4;
+ wa_imp_mandreel_audio_stopChannel(channel);
+}
+
+function wa_mandreel_audio_setChannelVolume(sp)
+{
+ var channel = heap32[sp>>2];sp+=4;
+ var vol = heapFloat[sp>>2];sp+=4;
+ wa_imp_mandreel_audio_setChannelVolume(channel,vol);
+}
+
+function wa_mandreel_audio_setChannelPan(sp)
+{
+ var channel = heap32[sp>>2];sp+=4;
+ var pan = heapFloat[sp>>2];sp+=4;
+ wa_imp_mandreel_audio_setChannelPan(channel,pan);
+}
+
+function wa_mandreel_audio_setChannelPitch(sp)
+{
+ var channel = heap32[sp>>2];sp+=4;
+ var pitch = heapFloat[sp>>2];sp+=4;
+ wa_imp_mandreel_audio_setChannelPitch(channel,pitch);
+}
+
+function wa_mandreel_audio_useMusicFunctions(sp)
+{
+ r_g0 = webAudioUseMusicFunctions ? 1 : 0;
+}
+
+function wa_mandreel_audio_playMusic(sp)
+{
+ var ptr_fileName = heap32[sp>>2];sp+=4;
+ var fileName = get_string_from_ptr(ptr_fileName).toLowerCase();
+ wa_imp_mandreel_audio_playMusic(fileName);
+}
+
+function wa_mandreel_audio_stopMusic(sp)
+{
+ wa_imp_mandreel_audio_stopMusic();
+}
+
+function wa_mandreel_audio_setMusicVol(sp)
+{
+ var vol = heapFloat[sp>>2];sp+=4;
+ wa_imp_mandreel_audio_setMusicVol(vol);
+}
+
+function wa_MainAudioDriver()
+{
+ mandreel_audio_init = wa_mandreel_audio_init;
+ mandreel_audio_end = wa_mandreel_audio_end;
+ mandreel_audio_update = wa_mandreel_audio_update;
+ mandreel_audio_createBuffer = wa_mandreel_audio_createBuffer;
+ mandreel_audio_playChannel = wa_mandreel_audio_playChannel;
+ mandreel_audio_stopChannel = wa_mandreel_audio_stopChannel;
+ mandreel_audio_setChannelVolume = wa_mandreel_audio_setChannelVolume;
+ mandreel_audio_setChannelPan = wa_mandreel_audio_setChannelPan;
+ mandreel_audio_setChannelPitch = wa_mandreel_audio_setChannelPitch;
+ mandreel_audio_useMusicFunctions = wa_mandreel_audio_useMusicFunctions;
+ mandreel_audio_playMusic = wa_mandreel_audio_playMusic;
+ mandreel_audio_stopMusic = wa_mandreel_audio_stopMusic;
+ mandreel_audio_checkBuffersPending = wa_mandreel_audio_checkBuffersPending;
+ mandreel_audio_setMusicVol = wa_mandreel_audio_setMusicVol;
+
+ setTimeout("mandreel_webAudio_PreloadAssets()", 10);
+}
+
+
+var webAudioBuffers = new Array();
+var webAudioChannels = new Array(32);
+var webAudioGain = new Array(32);
+var webAudioContext = 0;
+
+
+function wa_initWebAudio()
+{
+ if ( preCreatedWebAudioContext != null )
+ {
+ webAudioContext = preCreatedWebAudioContext;
+ }
+ else
+ {
+ try { webAudioContext = new webkitAudioContext(); } catch(err) { webAudioContext = 0; }
+ }
+}
+
+function wa_imp_callfunction(params)
+{
+ if ( params[0] == "#MandreelAudio" )
+ {
+ if ( params[1] == "playChannel" )
+ wa_imp_mandreel_audio_playChannel(params[2],params[3],params[4],params[5],params[6],params[7]);
+ else if ( params[1] == "stopChannel" )
+ wa_imp_mandreel_audio_stopChannel(params[2]);
+ else if ( params[1] == "setChannelVol" )
+ wa_imp_mandreel_audio_setChannelVol(params[2],params[3]);
+ else if ( params[1] == "setChannelPan" )
+ wa_imp_mandreel_audio_setChannelPan(params[2],params[3]);
+ else if ( params[1] == "playMusic" )
+ wa_imp_mandreel_audio_playMusic(params[2]);
+ else if ( params[1] == "stopMusic" )
+ wa_imp_mandreel_audio_stopMusic(params[2]);
+ else if ( params[1] == "setMusicVol" )
+ wa_imp_mandreel_audio_setMusicVol(params[2]);
+
+ return true;
+ }
+ return false;
+}
+
+function wa_getFileNameNoExt(fileName)
+{
+ var fileNameNoExt = fileName.toLowerCase();
+ var indexDot = fileNameNoExt.lastIndexOf('.');
+ if ( indexDot != -1 )
+ fileNameNoExt = fileNameNoExt.substr(0,indexDot);
+ fileNameNoExt = fileNameNoExt.replace(/\\/g,"/");
+ if ( fileNameNoExt.length > 0 )
+ {
+ if ( fileNameNoExt.charAt(0) == "/" )
+ {
+ if (fileNameNoExt.length > 1 )
+ fileNameNoExt = fileNameNoExt.substr(1,fileNameNoExt.length-1);
+ else
+ fileNameNoExt = "";
+ }
+ }
+ return fileNameNoExt;
+}
+
+var wa_mandreel_cache_audio_files = false;
+var wa_mandreel_cache_audio_files_path = '';
+
+function mandreel_webAudio_reloadfile(fileName,callback)
+{
+ var fileNameNoExt = wa_getFileNameNoExt(fileName);
+ var url = wa_mandreel_cache_audio_files_path+fileNameNoExt+".ogg";
+ dump("webAudio: loading buffer ("+fileName+") url("+url+")");
+ var request = new XMLHttpRequest();
+ request.open("GET", url, true);
+ request.responseType = "arraybuffer";
+ request.onreadystatechange = function()
+ {
+ if (request.readyState == 4)
+ {
+
+ if (request.status == 404) callback(null);
+
+ callback(request.response);
+
+ }
+ }
+ request.send();
+}
+
+Mandreel_window.BlobBuilder = Mandreel_window.MozBlobBuilder || Mandreel_window.WebKitBlobBuilder || Mandreel_window.BlobBuilder;
+
+function mandreel_webaudio_saveFile(name, my_arrayBuffer)
+{
+ dump('mandreel_webaudio_saveFile ' + name);
+ g_mandreel_fs.root.getFile(name, {create: true}, function(fileEntry) {
+
+ // Create a FileWriter object for our FileEntry (log.txt).
+ fileEntry.createWriter(function(fileWriter) {
+
+ fileWriter.onwriteend = function(e) {
+ dump('Write completed.');
+ };
+
+ fileWriter.onerror = function(e) {
+ dump('Write failed: ' + e.toString());
+ };
+
+ var bb = new Mandreel_window.BlobBuilder(); // Note: window.WebKitBlobBuilder in Chrome 12.
+ bb.append(my_arrayBuffer);
+ fileWriter.write(bb.getBlob('text/plain'));
+
+
+
+ }, function(e) { dump('error 1 mandreel_webaudio_saveFile ' + name);MandreelFsErrorHandler(e) });
+
+ }, function(e) { dump('error 2 mandreel_webaudio_saveFile ' + name);MandreelFsErrorHandler(e) });
+}
+
+function mandreel_webaudio_loadFile(name, callback, callback2)
+{
+ g_mandreel_fs.root.getFile(name, {}, function(fileEntry) {
+
+ fileEntry.file(function(file) {
+
+ var reader = new FileReader();
+
+
+ reader.onloadend = function(e) {
+
+ dump('mandreel_fs_loadFile ' + name);
+ if (this.result.byteLength)
+ callback(this.result);
+ else
+ callback2(this.result);
+
+ };
+
+
+ reader.readAsArrayBuffer(file);
+
+
+
+ }, function(e) { dump('error 1 webaudio_loadFile ' + name);MandreelFsErrorHandler(e) } );
+
+ }, function(e) { dump('error 2 webaudio_loadFile ' + name);MandreelFsErrorHandler(e) } );
+}
+
+
+function mandreel_webAudio_cacheFile(fileName, callback)
+{
+ if (!g_mandreel_fs)
+ {
+ mandreel_webAudio_reloadfile(fileName, callback);
+
+ return;
+ }
+ fileName = fileName.toLowerCase();
+
+ fileName = fileName.replace(/\\/g,"/");
+
+ if (fileName[0] == '/')
+ fileName = fileName.substring(1);
+
+ dump('chanka name ' + fileName);
+
+ g_mandreel_fs.root.getFile(fileName, {}, function(fileEntry) {
+
+ fileEntry.getMetadata(function(metaData){
+ var my_seconds = metaData.modificationTime.getTime()/1000;
+
+ if (g_mandreel_timestamp_fs>my_seconds)
+ {
+ dump('mandreel_webAudio_cacheFile1 ');
+ fileEntry.remove(function() {
+ mandreel_webAudio_reloadfile(fileName, function(response) { callback(response); if (response) mandreel_webaudio_saveFile(fileName, response); } );
+ }, function(e) { dump('error 1 mandreel_webAudio_cacheFile ' + fileName);MandreelFsErrorHandler(e); mandreel_webAudio_reloadfile(fileName, function(response) { callback(response); if (response) mandreel_webaudio_saveFile(fileName, response); } );});
+
+ }
+ else
+ {
+ //alert('mandreel_fscachefile2');
+ dump('mandreel_webAudio_cacheFile2');
+ mandreel_webaudio_loadFile(fileName, function(response) { callback(response); } ,
+ function() {
+ mandreel_webAudio_reloadfile(fileName, function(response) { callback(response); if (response) mandreel_webaudio_saveFile(fileName, response); } );
+ }
+ );
+
+
+
+ }
+
+
+ }, function(e) { dump('error 2 mandreel_webAudio_cacheFile ' + fileName);MandreelFsErrorHandler(e) });
+
+
+ }, function(error) {dump('mandreel_webAudio_cacheFile3'); mandreel_webAudio_reloadfile(fileName, function(response) { callback(response); if (response) mandreel_webaudio_saveFile(fileName, response); });});
+}
+
+function mandreel_webAudio_queueLoadBuffer(fileName, callback)
+{
+ //dump("mandreel_webAudio_queueLoadBuffer "+fileName);
+ if ( webAudioContext )
+ {
+ var fileNameNoExt = wa_getFileNameNoExt(fileName);
+ var buffer = webAudioBuffers[fileNameNoExt];
+ if ( buffer == null && buffer != "invalid" )
+ {
+ if ( fileNameNoExt != "" )
+ {
+ if (wa_mandreel_cache_audio_files == true)
+ {
+ webAudioBuffers[fileNameNoExt] = "invalid";
+
+ mandreel_webAudio_cacheFile(fileName, function(response) {
+
+ if (callback != null)
+ callback();
+
+ if ( response != null )
+ webAudioBuffers[fileNameNoExt] = webAudioContext.createBuffer(response, false);
+ else
+ webAudioBuffers[fileNameNoExt] = "invalid";
+ } );
+ return;
+ }
+
+ var url = g_mandreel_working_folder+fileNameNoExt+".ogg";
+ dump("webAudio: loading buffer ("+fileName+") url("+url+")");
+ webAudioBuffers[fileNameNoExt] = "invalid";
+ var request = new XMLHttpRequest();
+ request.open("GET", url, true);
+ request.responseType = "arraybuffer";
+ request.onreadystatechange = function()
+ {
+ if (request.readyState == 4)
+ {
+ if (callback != null)
+ callback();
+
+ if (request.status == 404) return;
+ //dump("webAudio: loaded buffer "+request.status);
+ if ( request.response != null )
+ webAudioBuffers[fileNameNoExt] = webAudioContext.createBuffer(request.response, false);
+ else
+ webAudioBuffers[fileNameNoExt] = "invalid";
+ }
+ }
+ request.send();
+ }
+ else
+ webAudioBuffers[fileNameNoExt] = "invalid";
+ }
+ }
+}
+
+var webAudioPreloadAudioFiles = new Array();
+var webAudioPreloadBytes = null;
+var webAudioPreloadCurrentFile = 0;
+var webAudioPreloadAsync = false;
+
+function webAudioParsePreloadFile(response)
+{
+ var pos = 4;
+ var bytes = new Uint8Array(response);
+ var i = 0;
+ if ( webAudioPreloadAsync )
+ webAudioPreloadBytes = bytes;
+ while ( pos < bytes.byteLength )
+ {
+ // filename
+ var fileName = "";
+ while ( bytes[pos] != 0 )
+ {
+ fileName += String.fromCharCode(bytes[pos]);
+ pos++;
+ }
+ pos++;
+ // filesize
+ var filesize = bytes[pos] | (bytes[pos+1]<<8) | (bytes[pos+2]<<16) | (bytes[pos+3]<<24);
+ pos += 4;
+
+ // contents
+ var fileNameNoExt = wa_getFileNameNoExt(fileName);
+ if ( webAudioPreloadAsync )
+ {
+ var audioFile =
+ {
+ fileName : fileNameNoExt,
+ fileSize : filesize,
+ position : pos
+ };
+ webAudioPreloadAudioFiles[i] = audioFile;
+ }
+ else
+ {
+ var bufferdata = new Uint8Array(filesize);
+ bufferdata.set(bytes.subarray(pos,pos+filesize));
+ webAudioBuffers[fileNameNoExt] = webAudioContext.createBuffer(bufferdata.buffer, false);
+ dump("preload audio file ("+fileName+")");
+ }
+
+ pos += filesize;
+ i++;
+ }
+ if ( webAudioPreloadAsync )
+ {
+ dump("started preloading audio files async");
+ setTimeout("mandreel_webAudio_preloadNextAudioFile()",10);
+ }
+}
+
+function mandreel_webAudio_preloadNextAudioFile()
+{
+ if ( webAudioPreloadAudioFiles.length > webAudioPreloadCurrentFile )
+ {
+ var audioFile = webAudioPreloadAudioFiles[webAudioPreloadCurrentFile];
+ if ( audioFile.fileName == null )
+ {
+ webAudioPreloadCurrentFile++;
+ setTimeout("mandreel_webAudio_preloadNextAudioFile()",10);
+ }
+ else
+ {
+ var bufferdata = new Uint8Array(audioFile.fileSize);
+ bufferdata.set(webAudioPreloadBytes.subarray(audioFile.position,audioFile.position+audioFile.fileSize));
+ dump("async preload audio file ("+audioFile.fileName+")");
+ webAudioContext.decodeAudioData(bufferdata.buffer,mandreel_webAudio_preloadNextAudioFileOK,mandreel_webAudio_preloadNextAudioFileError);
+ }
+ }
+ else
+ {
+ webAudioPreloadAudioFiles = null;
+ webAudioPreloadBytes = null;
+ dump("finished preloading audio files async");
+ }
+}
+
+function mandreel_webAudio_preloadNextAudioFileOK(audioBuffer)
+{
+ var audioFile = webAudioPreloadAudioFiles[webAudioPreloadCurrentFile];
+ webAudioPreloadCurrentFile++;
+ if ( audioFile.fileName != null )
+ {
+ webAudioBuffers[audioFile.fileName] = audioBuffer;
+ setTimeout("mandreel_webAudio_preloadNextAudioFile()",10);
+ }
+}
+
+function mandreel_webAudio_preloadNextAudioFileError()
+{
+ var audioFile = webAudioPreloadAudioFiles[webAudioPreloadCurrentFile];
+ webAudioPreloadCurrentFile++;
+ if ( audioFile.fileName != null )
+ dump("FAILED async preload audio file ("+audioFile.fileName+")");
+ setTimeout("mandreel_webAudio_preloadNextAudioFile()",10);
+}
+
+function mandreel_webAudio_queueLoadPackedBuffers(fileName, callback)
+{
+ if ( webAudioContext )
+ {
+ // TODO
+ /*if (wa_mandreel_cache_audio_files == true)
+ {
+ webAudioBuffers[fileNameNoExt] = "invalid";
+
+ mandreel_webAudio_cacheFile(fileName, function(response) {
+
+ if (callback != null)
+ callback();
+
+ if ( response != null )
+ webAudioBuffers[fileNameNoExt] = webAudioContext.createBuffer(response, true);
+ else
+ webAudioBuffers[fileNameNoExt] = "invalid";
+ } );
+ return;
+ }*/
+
+ mandreel_fs_load_binary(fileName, function mandreel_webAudio_queueLoadPackedBuffers_cb(data){
+
+ if (data)
+ {
+ if (callback != null)
+ callback();
+ webAudioParsePreloadFile(data);
+ }
+ else
+ {
+ var url = g_mandreel_working_folder+fileName;
+ dump("webAudio: loading preload buffers ("+fileName+") url("+url+")");
+ var request = new XMLHttpRequest();
+ request.open("GET", url, true);
+ request.responseType = "arraybuffer";
+ var last_loaded_size = 0;
+ request.onreadystatechange = function()
+ {
+ if (request.readyState == 4)
+ {
+ if (callback != null)
+ callback();
+
+ if (request.status == 404)
+ return;
+ if ( request.response != null )
+ {
+ mandreel_fs_saveFile(fileName, request.response);
+ webAudioParsePreloadFile(request.response);
+ }
+ }
+ }
+ request.onprogress = function(e)
+ {
+ var delta_size = e.loaded - last_loaded_size;
+ last_loaded_size = e.loaded;
+
+ imandreel_update_load(delta_size,0);
+
+ var percentage = ((100*e.loaded)/mandreel_total_pogfile_size)|0;
+
+ if (percentage>100)
+ percentage = 100;
+
+ if ( mandreelAppStartStateFunc )
+ mandreelAppStartStateFunc("loadingAudioUpdate",percentage);
+ }
+ request.send();
+ }
+ });
+ }
+}
+
+
+
+var wa_mandreel_audio_buffers_num = 0;
+var wa_mandreel_audio_buffers_loaded = 0;
+
+function wa_imp_mandreel_audio_checkBuffersPending()
+{
+ return wa_mandreel_audio_buffers_num - wa_mandreel_audio_buffers_loaded;
+}
+
+function wa_imp_mandreel_audio_createBuffer(fileName)
+{
+ if ( webAudioContext )
+ {
+ var fileNameNoExt = wa_getFileNameNoExt(fileName);
+ var buffer = webAudioBuffers[fileNameNoExt];
+ if ( buffer == null && buffer != "invalid" )
+ {
+ wa_mandreel_audio_buffers_num++;
+ mandreel_webAudio_queueLoadBuffer(fileName, function () {wa_mandreel_audio_buffers_loaded++;});
+ }
+ }
+}
+
+function wa_imp_mandreel_audio_playChannel(fileName,channel,vol,loop,pitch)
+{
+ if ( webAudioContext )
+ {
+ var fileNameNoExt = wa_getFileNameNoExt(fileName);
+ var buffer = webAudioBuffers[fileNameNoExt];
+ if ( buffer == null || buffer == "invalid" )
+ {
+ if ( webAudioPreloadAudioFiles != null )
+ {
+ var i = 0;
+ while ( i < webAudioPreloadAudioFiles.length )
+ {
+ var audioFile = webAudioPreloadAudioFiles[i];
+ if ( audioFile.fileName == fileNameNoExt )
+ {
+ var bufferdata = new Uint8Array(audioFile.fileSize);
+ bufferdata.set(webAudioPreloadBytes.subarray(audioFile.position,audioFile.position+audioFile.fileSize));
+ webAudioBuffers[audioFile.fileName] = webAudioContext.createBuffer(bufferdata.buffer, false);
+ dump("**** preload audio file ("+audioFile.fileName+"), forced by playChannel");
+ audioFile.fileName = null;
+ i = webAudioPreloadAudioFiles.length;
+ }
+ else
+ {
+ ++i;
+ }
+ }
+ }
+ }
+ if ( buffer == null || buffer == "invalid" )
+ {
+ mandreel_webAudio_queueLoadBuffer(fileName);
+ buffer = webAudioBuffers[fileNameNoExt];
+ }
+ if ( buffer != null && buffer != "invalid" )
+ {
+ var chn = webAudioContext.createBufferSource();
+ var gain = webAudioContext.createGainNode();
+ if ( chn && gain )
+ {
+ webAudioChannels[channel] = chn;
+ webAudioGain[channel] = gain;
+ chn.buffer = buffer;
+ chn.connect(gain);
+ gain.connect(webAudioContext.destination);
+ var bLoop = loop != 0;
+ chn.loop = bLoop;
+ gain.gain.value = vol;
+ chn.playbackRate.value = pitch;
+ chn.noteOn(0);
+ //dump("webAudio: PlayChannel "+channel+" "+fileName+" "+vol+" "+bLoop+" "+pitch);
+ }
+ }
+ }
+}
+
+function wa_imp_mandreel_audio_stopChannel(channel)
+{
+ if ( webAudioContext )
+ {
+ var chn = webAudioChannels[channel];
+ if ( chn != null )
+ {
+ //dump("webAudio: StopChannel "+channel);
+ chn.noteOff(0);
+ webAudioChannels[channel] = null;
+ webAudioGain[channel] = null;
+ }
+ }
+}
+
+function wa_imp_mandreel_audio_setChannelVolume(channel,vol)
+{
+ if ( webAudioContext )
+ {
+ var gain = webAudioGain[channel];
+ if ( gain != null )
+ gain.gain.value = vol;
+ }
+}
+
+function wa_imp_mandreel_audio_setChannelPan(channel,pan)
+{
+ if ( webAudioContext )
+ {
+ }
+}
+
+function wa_imp_mandreel_audio_setChannelPitch(channel,pitch)
+{
+ if ( webAudioContext )
+ {
+ var chn = webAudioChannels[channel];
+ if ( chn != null )
+ {
+ chn.playbackRate.value = pitch;
+ }
+ }
+}
+
+var mwebAudioPreloadState = "start";
+//var mwebAudioPreloadRequest = 0;
+var mwebAudioPreloadAssets = 0;
+var mwebAudioCurrentPreloadAsset = 0;
+var mwebAudioAsyncFiles = '';
+var mwebListAudioAsyncFiles ='';
+var mwebListAudioAsyncFilesPos = 0;
+var mwebTotalPreloadingFiles = 0;
+var mwebCurrentPreloadingFiles = 0;
+function mwebCallbackAsync()
+{
+ mwebListAudioAsyncFilesPos++;
+ if ( mwebListAudioAsyncFilesPos >= mwebListAudioAsyncFiles.length )
+ {
+ mwebListAudioAsyncFiles = null;
+ mwebAudioAsyncFiles = null;
+ return;
+ }
+
+ setTimeout("mandreel_webAudio_queueLoadBuffer(mwebListAudioAsyncFiles[mwebListAudioAsyncFilesPos], mwebCallbackAsync);",10);
+}
+
+function mwebCallbackAsyncPreload()
+{
+ mwebCurrentPreloadingFiles++;
+}
+
+function mandreel_webAudio_PreloadAssets()
+{
+ /*if ( mwebAudioPreloadState == "start" )
+ {
+ //dump("webaudio start");
+ mwebAudioPreloadRequest = new XMLHttpRequest();
+ var url = g_mandreel_working_folder+"mandreel.fat.dat";
+ mwebAudioPreloadRequest.open("GET", url, true);
+ mwebAudioPreloadRequest.onreadystatechange = function()
+ {
+ if (mwebAudioPreloadRequest.readyState != 4) return;
+ if ( mwebAudioPreloadRequest.status != 404 && mwebAudioPreloadRequest.response != null )
+ mwebAudioPreloadState = "parseFat";
+ else
+ {
+ mwebAudioPreloadState = "done";
+ dump("error pre-loading audio assets, status("+mwebAudioPreloadRequest.status+")");
+ }
+ }
+ mwebAudioPreloadState = "loadingFat";
+ mwebAudioPreloadRequest.send();
+ }
+ else if ( mwebAudioPreloadState == "parseFat" )*/
+ if ( mwebAudioPreloadState == "start" )
+ {
+ //mwebAudioPreloadAssets = mwebAudioPreloadRequest.response.split('\n');
+ //mwebAudioPreloadRequest = 0;
+ mwebAudioPreloadAssets = mandreelFatData.split('\n');
+ mwebAudioCurrentPreloadAsset = 0;
+ mwebAudioPreloadState = "preloading";
+ }
+ else if ( mwebAudioPreloadState == "preloading" )
+ {
+ //dump("webaudio preloading");
+ var queued = false;
+ while ( !queued && mwebAudioPreloadState != "done" )
+ {
+ if ( mwebAudioCurrentPreloadAsset < mwebAudioPreloadAssets.length )
+ {
+ var params = mwebAudioPreloadAssets[mwebAudioCurrentPreloadAsset].split(',');
+ if ( params[0] == "audiofile" && params[1])
+ {
+ var sync_load = true;
+ if (params[2] && (params[2]&1) == 0)
+ sync_load = false;
+
+ if (sync_load)
+ {
+ mandreel_webAudio_queueLoadBuffer(params[1],mwebCallbackAsyncPreload);
+ mwebTotalPreloadingFiles++;
+ queued = true;
+ }
+
+ }
+ else if ( params[0] == "audiopreloadfile" )
+ {
+ mandreel_webAudio_queueLoadPackedBuffers(params[1],mwebCallbackAsyncPreload);
+ var size_pog_file = parseInt(params[2], 10);
+ mandreel_total_pogfile_size = size_pog_file;
+ mwebTotalPreloadingFiles++;
+ queued = true;
+ }
+ else if ( params[0] == "audiopreloadasync" )
+ {
+ webAudioPreloadAsync = true;
+ }
+ mwebAudioCurrentPreloadAsset++;
+ }
+ else
+ queued = true;
+
+ if ( mwebAudioCurrentPreloadAsset >= mwebAudioPreloadAssets.length )
+ {
+ if (mwebCurrentPreloadingFiles == mwebTotalPreloadingFiles)
+ {
+ mwebAudioPreloadState = "done";
+ mwebAudioPreloadAssets = 0;
+ }
+ }
+ }
+ }
+
+ if ( mwebAudioPreloadState == "done" )
+ {
+ if ( mandreelAppPlatform == "nacl" )
+ setTimeout("MandreelAudioStartedNacl()", 10);
+ else
+ setTimeout("MandreelAudioStarted()", 10);
+ }
+ else
+ setTimeout("mandreel_webAudio_PreloadAssets()", 10);
+}
+
+var wa_mandreelMusicElement = null;
+var wa_mandreelMusicElementFilename = "";
+var wa_mandreelMusicElementVolume = 1.0;
+function wa_imp_mandreel_audio_playMusic(fileName)
+{
+ var fileNameNoExt = wa_getFileNameNoExt(fileName);
+ var fileNameFull = g_mandreel_working_folder + fileNameNoExt + ".ogg";
+
+ if ( wa_mandreelMusicElementFilename != fileNameFull )
+ {
+ wa_imp_mandreel_audio_stopMusic(0);
+ var audio = document.createElement("audio");
+ var type = fileNameFull.slice(fileNameFull.lastIndexOf(".")+1);
+ switch(type){
+ case "mp3" : type = "mpeg"; break;
+ case "ogg" : type = "ogg"; break;
+ case "wav" : type = "wav"; break;
+ default : throw("'" + fileNameFull + "' is not a recognized audio file");
+ }
+
+ // set correct id for lookup, loading method and data types
+ audio.setAttribute("type", "audio/" + type);
+ var is_chrome = navigator.userAgent.toLowerCase().indexOf('chrome') > -1;
+ if ( is_chrome )
+ audio.setAttribute("loop", "loop");
+ else
+ audio.addEventListener('ended', function(){this.currentTime = 0;}, false);
+ audio.volume = wa_mandreelMusicElementVolume;
+ audio.setAttribute("autoplay", "true");
+ audio.setAttribute("src", fileNameFull);
+
+
+ // include into list and document
+ document.body.appendChild(audio);
+ wa_mandreelMusicElement = audio;
+ wa_mandreelMusicElementFilename = fileNameFull;
+ }
+}
+
+function wa_imp_mandreel_audio_stopMusic()
+{
+ if ( wa_mandreelMusicElement != null )
+ {
+ document.body.removeChild(wa_mandreelMusicElement);
+ wa_mandreelMusicElement = null;
+ wa_mandreelMusicElementFilename = "";
+ }
+}
+
+function wa_imp_mandreel_audio_setMusicVol(vol)
+{
+ wa_mandreelMusicElementVolume = vol;
+ if ( wa_mandreelMusicElement != null )
+ {
+ wa_mandreelMusicElement.volume = wa_mandreelMusicElementVolume;
+ }
+}
+
+var mandreel_audio_stream_func_ptr = 0;
+function mandreel_audio_stream_process(e)
+{
+ var l = e.outputBuffer.getChannelData(0);
+ var l2 = e.outputBuffer.getChannelData(1);
+ var n = e.outputBuffer.length;
+
+ var offset2 = 0;
+ var inc = 44.1 / 48.0;
+ while ( n > 0 )
+ {
+ var n2 = ((n*inc)|0)/4;
+ if ( n2 > 1024 )
+ n2 = 1024;
+
+ var sp = g_stack_pointer+100*1024;
+ var ptr = g_stack_pointer+200*1024;
+ var _sp = sp>>2;
+ heap32[_sp]=ptr;
+ heap32[_sp+1]=n2*4;
+ __FUNCTION_TABLE__[(mandreel_audio_stream_func_ptr)>>2](sp);
+
+ var offset = ptr>>2;
+ var size = n2*4;
+ /*for (var i=0;i<size;++i)
+ {
+ l[i+offset2] = heapFloat[offset+(i*2)];
+ l2[i+offset2] = heapFloat[offset+(i*2)+1];
+ }*/
+ var i = 0;
+ var j = 0;
+ while ( i < size )
+ {
+ l[j+offset2] = heapFloat[offset+((i|0)*2)];
+ l2[j+offset2] = heapFloat[offset+((i|0)*2)+1];
+ i += inc;
+ j++;
+ }
+
+ //offset2 += n2*4;
+ //n -= n2*4;
+ offset2 += j;
+ n -= j;
+ }
+}
+
+function mandreel_Audio_requestSoundData(soundData)
+{
+ var n = soundData.length/2;
+ var offset2 = 0;
+ while ( n > 0 )
+ {
+ var n2 = n;
+ if ( n2 > 1024 )
+ n2 = 1024;
+ var sp = g_stack_pointer+100*1024;
+ var ptr = g_stack_pointer+200*1024;
+ var _sp = sp>>2;
+ heap32[_sp]=ptr;
+ heap32[_sp+1]=n2;
+ __FUNCTION_TABLE__[(mandreel_audio_stream_func_ptr)>>2](sp);
+
+ var offset = ptr>>2;
+ var size = n2*2;
+ var buf = heapFloat.subarray(offset,offset+size);
+ soundData.set(buf,offset2);
+ /*for (var i=0; i<size; i++)
+ soundData[i+offset2] = heapFloat[offset+i];*/
+ offset2 += n2*2;
+ n -= n2;
+ }
+ }
+
+var __Mandreel_Audio_CreateStream_created = false;
+function Mandreel_Audio_CreateStream(sp)
+{
+ if ( !__Mandreel_Audio_CreateStream_created )
+ {
+ if (webAudioContext)
+ {
+ mandreel_audio_stream_func_ptr = heap32[sp>>2];
+ var source = webAudioContext.createJavaScriptNode(1024*4, 0, 2);
+ source.connect(webAudioContext.destination);
+ source.onaudioprocess = mandreel_audio_stream_process;
+ }
+ else
+ {
+ mandreel_audio_stream_func_ptr = heap32[sp>>2];
+ AudioDataDestination(44100,mandreel_Audio_requestSoundData);
+ }
+ __Mandreel_Audio_CreateStream_created = true;
+ }
+}
+function mandreel_webAudio_dummyStream()
+{
+ var sp = g_stack_pointer+100*1024;
+ var ptr = g_stack_pointer+200*1024;
+ var _sp = sp>>2;
+ heap32[_sp]=ptr;
+ heap32[_sp+1]=4096;
+ __FUNCTION_TABLE__[(mandreel_audio_stream_func_ptr)>>2](sp);
+ setTimeout("mandreel_webAudio_dummyStream()",10);
+}
+
+function AudioDataDestination(sampleRate, readFn)
+{
+ // Initialize the audio output.
+ var audio = new Audio();
+ if ( audio.mozSetup == null )
+ {
+ setTimeout("mandreel_webAudio_dummyStream()",10);
+ return;
+ }
+ audio.mozSetup(2, sampleRate);
+
+ var currentWritePosition = 0;
+ var prebufferSize = sampleRate / 2; // buffer 500ms
+ var tail = null, tailPosition;
+
+ // The function called with regular interval to populate
+ // the audio output buffer.
+ setInterval(function() {
+ var written;
+ // Check if some data was not written in previous attempts.
+ if(tail) {
+ written = audio.mozWriteAudio(tail.subarray(tailPosition));
+ currentWritePosition += written;
+ tailPosition += written;
+ if(tailPosition < tail.length) {
+ // Not all the data was written, saving the tail...
+ return; // ... and exit the function.
+ }
+ tail = null;
+ }
+
+ // Check if we need add some data to the audio output.
+ var currentPosition = audio.mozCurrentSampleOffset();
+ var available = currentPosition + prebufferSize - currentWritePosition;
+ if(available > 0) {
+ // Request some sound data from the callback function.
+ var soundData = new Float32Array(available);
+ readFn(soundData);
+
+ // Writting the data.
+ written = audio.mozWriteAudio(soundData);
+ if(written < soundData.length) {
+ // Not all the data was written, saving the tail.
+ tail = soundData;
+ tailPosition = written;
+ }
+ currentWritePosition += written;
+ }
+ }, 100);
+}
+var mandreel_flashaudio_server = "";
+var mandreel_flashaudio_lite = false;
+var mandreel_flashaudio_musicaudiotag = true;
+
+function as3Error(str)
+{
+ var params = str.split(' ');
+ if ( params[0] == "createdBuffer" )
+ mandreel_audio_flash_lastBufferCreatedSwf = parseInt(params[1]);
+ dump("as3Log: "+str);
+}
+
+function mandreel_audio_getFlashMovieObject(movieName)
+{
+ if (Mandreel_window.document[movieName])
+ {
+ return Mandreel_window.document[movieName];
+ }
+ if (navigator.appName.indexOf("Microsoft Internet")==-1)
+ {
+ if (document.embeds && document.embeds[movieName])
+ return document.embeds[movieName];
+ }
+ else
+ {
+ return document.getElementById(movieName);
+ }
+}
+
+function mandreel_sendmsg_flash(msg)
+{
+ if ( mandreel_flashaudio_server != "" )
+ {
+ var iframeWin = document.getElementById("ninja-iframe").contentWindow;
+ iframeWin.postMessage(msg,mandreel_flashaudio_server);
+ }
+ else
+ {
+ var flashMovie=mandreel_audio_getFlashMovieObject("FlashDivAudio");
+ if ( flashMovie != null )
+ flashMovie.receiveMessage(msg);
+ else
+ dump("error: flashMovie not found");
+ }
+}
+
+function fl_mandreel_audio_init(sp)
+{
+ mandreel_sendmsg_flash("init "+g_mandreel_working_folder);
+}
+
+function fl_mandreel_audio_end(sp)
+{
+}
+
+function fl_mandreel_audio_update(sp)
+{
+}
+
+function mandreel_flashaudiolite_createBuffer(fileName)
+{
+ mandreel_audio_flash_lastBufferCreated++;
+ mandreel_sendmsg_flash("createBuffer "+wa_getFileNameNoExt(fileName)+" "+mandreel_audio_flash_lastBufferCreated);
+}
+
+var mandreel_audio_flash_lastBufferCreated = 0;
+function fl_mandreel_audio_createBuffer(sp)
+{
+ var ptr_fileName = heap32[sp>>2];sp+=4;
+ var fileName = get_string_from_ptr(ptr_fileName).toLowerCase();
+ mandreel_flashaudiolite_createBuffer(fileName);
+}
+
+function fl_internal_mandreel_audio_checkBuffersPending()
+{
+ return mandreel_flashaudio_lite && (mandreel_audio_flash_lastBufferCreatedSwf != mandreel_audio_flash_lastBufferCreated);
+}
+
+var mandreel_audio_flash_lastBufferCreatedSwf = 0;
+function fl_mandreel_audio_checkBuffersPending(sp)
+{
+ r_g0 = 0;
+ if ( fl_internal_mandreel_audio_checkBuffersPending() )
+ r_g0 = 1;
+ dump("fl_mandreel_audio_checkBuffersPending ("+r_g0+") ("+mandreel_audio_flash_lastBufferCreatedSwf+") ("+mandreel_audio_flash_lastBufferCreated+")");
+}
+
+
+function fl_mandreel_audio_playChannel(sp)
+{
+ var ptr_fileName = heap32[sp>>2];sp+=4;
+ var channel = heap32[sp>>2];sp+=4;
+ var vol = heapFloat[sp>>2];sp+=4;
+ var loop = heap32[sp>>2];sp+=4;
+ var pitch = heapFloat[sp>>2];sp+=4;
+ var fileName = get_string_from_ptr(ptr_fileName).toLowerCase();
+ mandreel_sendmsg_flash("playChannel "+fileName+" "+channel+" "+loop+" "+vol+" "+pitch);
+ r_g0 = 0;
+}
+
+function fl_mandreel_audio_stopChannel(sp)
+{
+ var ptr_fileName = heap32[sp>>2];sp+=4;
+ var channel = heap32[sp>>2];sp+=4;
+ var index = heapFloat[sp>>2];sp+=4;
+
+ mandreel_sendmsg_flash("stopChannel "+channel);
+}
+
+function fl_mandreel_audio_setChannelVolume(sp)
+{
+ var channel = heap32[sp>>2];sp+=4;
+ var vol = heapFloat[sp>>2];sp+=4;
+
+ mandreel_sendmsg_flash("setChannelVolume "+channel+" "+vol);
+}
+
+function fl_mandreel_audio_setChannelPan(sp)
+{
+ var channel = heap32[sp>>2];sp+=4;
+ var pan = heapFloat[sp>>2];sp+=4;
+ mandreel_sendmsg_flash("setChannelPan "+channel+" "+pan);
+}
+
+function fl_mandreel_audio_setChannelPitch(sp)
+{
+ var channel = heap32[sp>>2];sp+=4;
+ var pitch = heapFloat[sp>>2];sp+=4;
+ mandreel_sendmsg_flash("setChannelPitch "+channel+" "+pitch);
+}
+
+
+function mandreel_audio_load_flash()
+{
+ var failed = "";
+
+
+ try
+ {
+ var mandreelAudioSwf = g_mandreel_working_folder+"mandreelaudio.swf";
+ if ( mandreel_flashaudio_lite )
+ mandreelAudioSwf = g_mandreel_working_folder+"mandreelaudiolite.swf";
+ var swf = swfobject.createSWF({ data:mandreelAudioSwf, width:"0", height:"0", allowScriptAccess:"always" }, { menu:"false" }, "FlashDivAudio");
+ if ( !swf )
+ failed = "swfobject.js not avaiable or Unable to open "+mandreelAudioSwf;
+ }
+ catch(err)
+ {
+ failed = err;
+ }
+
+ if (failed == "" && !swfobject.hasFlashPlayerVersion("9.0.0"))
+ failed = "flash player not found";
+
+ if ( failed != "" )
+ {
+ dump("Failed to create flash audio driver ("+failed+"). Null driver will be used.");
+ MandreelAudioDriver = "null";
+ null_MainAudioDriver();
+ }
+}
+
+function fl_MainAudioDriver(audioServer, audioUrl)
+{
+ mandreel_flashaudio_server = audioServer;
+ if ( mandreel_flashaudio_lite )
+ mandreel_flashaudio_server = "";
+ if ( mandreel_flashaudio_server != "" )
+ {
+ Mandreel_window.addEventListener("message", receiveMessage2, false);
+ var el = document.createElement("iframe");
+ el.setAttribute('id', 'ninja-iframe');
+ el.setAttribute('width', '0');
+ el.setAttribute('height', '0');
+ el.setAttribute('frameborder', '0');
+ document.body.appendChild(el);
+ el.onerror = function(message) { alert(message); };
+ el.setAttribute('src', audioServer+audioUrl+"/MandreelAudio.html");
+ setTimeout("CheckNinjaFrameReady()", 1000);
+ }
+ else
+ {
+ setTimeout("mandreel_audio_load_flash()", 10);
+ }
+}
+var ninjaLoaded = false;
+function CheckNinjaFrameReady()
+{
+ try
+ {
+ mandreel_sendmsg_flash("loadFlash");
+ }
+ catch(err)
+ {
+ }
+ if ( !ninjaLoaded )
+ setTimeout("CheckNinjaFrameReady()", 1000);
+}
+
+function fl_map_mandreel_audio_functions()
+{
+ mandreel_audio_init = fl_mandreel_audio_init;
+ mandreel_audio_end = fl_mandreel_audio_end;
+ mandreel_audio_update = fl_mandreel_audio_update;
+ mandreel_audio_createBuffer = fl_mandreel_audio_createBuffer;
+ mandreel_audio_playChannel = fl_mandreel_audio_playChannel;
+ mandreel_audio_stopChannel = fl_mandreel_audio_stopChannel;
+ mandreel_audio_setChannelVolume = fl_mandreel_audio_setChannelVolume;
+ mandreel_audio_setChannelPan = fl_mandreel_audio_setChannelPan;
+ mandreel_audio_setChannelPitch = fl_mandreel_audio_setChannelPitch;
+ if ( mandreel_flashaudio_musicaudiotag )
+ {
+ mandreel_audio_useMusicFunctions = wa_mandreel_audio_useMusicFunctions;
+ mandreel_audio_playMusic = wa_mandreel_audio_playMusic;
+ mandreel_audio_stopMusic = wa_mandreel_audio_stopMusic;
+ mandreel_audio_setMusicVol = wa_mandreel_audio_setMusicVol;
+ }
+ else
+ dump("WARNING: flash music functions not supported");
+ mandreel_audio_checkBuffersPending = fl_mandreel_audio_checkBuffersPending;
+}
+
+function receiveMessage2(event)
+{
+ ninjaLoaded = true;
+ fl_map_mandreel_audio_functions();
+ setTimeout("MandreelAudioStarted()", 10);
+}
+
+function mandreel_flashlite_checkPreloadFinished()
+{
+ if ( !fl_internal_mandreel_audio_checkBuffersPending() )
+ MandreelAudioStarted();
+ else
+ setTimeout("mandreel_flashlite_checkPreloadFinished()", 10);
+}
+
+function mandreel_flashlite_startPreload()
+{
+ mandreel_sendmsg_flash("init "+g_mandreel_working_folder);
+ // preload sounds
+ var FatLines = mandreelFatData.split('\n');
+ for ( var i=0;i<FatLines.length;++i )
+ {
+ var params = FatLines[i].replace('\r','').split(',');
+ if ( params[0] == "audiofile" && params[1] )
+ {
+ var sync_load = true;
+ if (params[2] && (params[2]&1) == 0)
+ sync_load = false;
+
+ if (sync_load)
+ {
+
+ mandreel_flashaudiolite_createBuffer(params[1]);
+ }
+ }
+ }
+ setTimeout("mandreel_flashlite_checkPreloadFinished()", 10);
+}
+
+function flashReady()
+{
+ fl_map_mandreel_audio_functions();
+ setTimeout("mandreel_flashlite_startPreload()",10);
+}
+
+function null_mandreel_audio(sp)
+{
+ r_g0 = 0;
+}
+
+function null_MainAudioDriver()
+{
+ mandreel_audio_init = null_mandreel_audio;
+ mandreel_audio_end = null_mandreel_audio;
+ mandreel_audio_update = null_mandreel_audio;
+ mandreel_audio_createBuffer = null_mandreel_audio;
+ mandreel_audio_playChannel = null_mandreel_audio;
+ mandreel_audio_stopChannel = null_mandreel_audio;
+ mandreel_audio_setChannelVolume = null_mandreel_audio;
+ mandreel_audio_setChannelPan = null_mandreel_audio;
+ mandreel_audio_setChannelPitch = null_mandreel_audio;
+ mandreel_audio_useMusicFunctions = wa_mandreel_audio_useMusicFunctions;
+ mandreel_audio_playMusic = wa_mandreel_audio_playMusic;
+ mandreel_audio_stopMusic = wa_mandreel_audio_stopMusic;
+ mandreel_audio_setMusicVol = wa_mandreel_audio_setMusicVol;
+ setTimeout("MandreelAudioStarted()", 10);
+}
+function at_mandreel_audio_init(sp)
+{
+}
+
+function at_mandreel_audio_end(sp)
+{
+}
+
+function at_mandreel_audio_update(sp)
+{
+ for ( i = 0 ; i < 32 ; ++i )
+ {
+ var end = maudioChannelEnd[i];
+ if ( end != null )
+ {
+ var sound = maudiotagChannels[i];
+ if ( sound != null )
+ {
+ if ( sound.currentTime > end )
+ {
+ sound.pause();
+ maudioChannelEnd[i] = null;
+ }
+ }
+ }
+ }
+}
+
+function at_mandreel_audio_checkBuffersPending(sp)
+{
+ r_g0 = 0;//wa_imp_mandreel_audio_checkBuffersPending();
+}
+
+function at_mandreel_audio_createBuffer(sp)
+{
+ var ptr_fileName = heap32[sp>>2];sp+=4;
+ var maxChannels = heap32[sp>>2];sp+=4;
+ var fileName = get_string_from_ptr(ptr_fileName).toLowerCase();
+ //wa_imp_mandreel_audio_createBuffer(fileName);
+
+ r_g0 = 0;
+}
+
+function at_mandreel_audio_playChannel(sp)
+{
+ var ptr_fileName = heap32[sp>>2];sp+=4;
+ var channel = heap32[sp>>2];sp+=4;
+ var vol = heapFloat[sp>>2];sp+=4;
+ var loop = heap32[sp>>2];sp+=4;
+ var pitch = heapFloat[sp>>2];sp+=4;
+ var fileName = get_string_from_ptr(ptr_fileName).toLowerCase();
+ at_imp_mandreel_audio_playChannel(fileName,channel,vol,loop,pitch);
+ r_g0 = 0;
+}
+
+function at_mandreel_audio_stopChannel(sp)
+{
+ var ptr_fileName = heap32[sp>>2];sp+=4;
+ var channel = heap32[sp>>2];sp+=4;
+ var index = heapFloat[sp>>2];sp+=4;
+ at_imp_mandreel_audio_stopChannel(channel);
+}
+
+function at_mandreel_audio_setChannelVolume(sp)
+{
+ var channel = heap32[sp>>2];sp+=4;
+ var vol = heapFloat[sp>>2];sp+=4;
+ //wa_imp_mandreel_audio_setChannelVolume(channel,vol);
+}
+
+function at_mandreel_audio_setChannelPan(sp)
+{
+ var channel = heap32[sp>>2];sp+=4;
+ var pan = heapFloat[sp>>2];sp+=4;
+ //wa_imp_mandreel_audio_setChannelPan(channel,pan);
+}
+
+function at_mandreel_audio_setChannelPitch(sp)
+{
+ var channel = heap32[sp>>2];sp+=4;
+ var pitch = heapFloat[sp>>2];sp+=4;
+ //wa_imp_mandreel_audio_setChannelPitch(channel,pitch);
+}
+
+function at_mandreel_audio_useMusicFunctions(sp)
+{
+ r_g0 = 1;
+}
+
+function at_MainAudioDriver()
+{
+ mandreel_audio_init = at_mandreel_audio_init;
+ mandreel_audio_end = at_mandreel_audio_end;
+ mandreel_audio_update = at_mandreel_audio_update;
+ mandreel_audio_createBuffer = at_mandreel_audio_createBuffer;
+ mandreel_audio_playChannel = at_mandreel_audio_playChannel;
+ mandreel_audio_stopChannel = at_mandreel_audio_stopChannel;
+ mandreel_audio_setChannelVolume = at_mandreel_audio_setChannelVolume;
+ mandreel_audio_setChannelPan = at_mandreel_audio_setChannelPan;
+ mandreel_audio_setChannelPitch = at_mandreel_audio_setChannelPitch;
+ mandreel_audio_useMusicFunctions = at_mandreel_audio_useMusicFunctions;
+ mandreel_audio_playMusic = wa_mandreel_audio_playMusic;
+ mandreel_audio_stopMusic = wa_mandreel_audio_stopMusic;
+ mandreel_audio_checkBuffersPending = at_mandreel_audio_checkBuffersPending;
+ mandreel_audio_setMusicVol = wa_mandreel_audio_setMusicVol;
+
+ setTimeout("mandreel_audiotag_PreloadAssets()", 10);
+}
+
+var maudiotagPreloadState = "start";
+var maudiotagPreloadAssets = 0;
+var maudiotagCurrentPreloadAsset = 0;
+var maudiotagPreloadAsync = false;
+var maudiotagDurations = Array();
+var maudiotagChannelsCreated = 0;
+var maudiotagChannels = Array();
+var maudiotagChannelsLoaded = Array();
+var maudiotagAudioSpriteFound = false;
+var maudiotagAvailableChannels = new Array();
+var maudioSecondsPos = new Array();
+var maudioChannelEnd = new Array();
+
+function mandreel_audiotag_PreloadAssets()
+{
+ if ( maudiotagPreloadState == "start" )
+ {
+ maudiotagPreloadAssets = mandreelFatData.split('\n');
+ maudiotagCurrentPreloadAsset = 0;
+ maudiotagPreloadState = "preloading";
+ }
+ else if ( maudiotagPreloadState == "preloading" )
+ {
+ var queued = false;
+ while ( !queued && maudiotagPreloadState != "done" )
+ {
+ if ( maudiotagCurrentPreloadAsset < maudiotagPreloadAssets.length )
+ {
+ var params = maudiotagPreloadAssets[maudiotagCurrentPreloadAsset].split(',');
+ if ( params[0] == "audiofile" && params[1])
+ {
+ var duration = params[3];
+ var fileNameNoExt = wa_getFileNameNoExt(params[1]);
+ maudiotagDurations[fileNameNoExt] = duration|0;
+ dump("audiotag duration ("+params[1]+") "+duration);
+ }
+ else if ( params[0] == "audiotagfile" )
+ {
+ var type = params[1];
+ var filesize = params[3];
+ var numsounds = params[4];
+ var at = new Audio();
+ if ( !maudiotagAudioSpriteFound && at.canPlayType && at.canPlayType("audio/"+type) != "" )
+ {
+ maudiotagLoadPackFile(params[2],filesize,numsounds,type);
+ maudiotagAudioSpriteFound = true;
+ queued = true;
+ }
+ }
+ else if ( params[0] == "audiopreloadasync" )
+ {
+ maudiotagPreloadAsync = true;
+ }
+ maudiotagCurrentPreloadAsset++;
+ }
+ else
+ queued = true;
+
+ if ( maudiotagCurrentPreloadAsset >= maudiotagPreloadAssets.length )
+ {
+ maudiotagPreloadState = "done";
+ maudiotagPreloadAssets = 0;
+ }
+ }
+ }
+
+ if ( maudiotagPreloadState == "done" )
+ {
+ setTimeout("MandreelAudioStarted()", 10);
+ }
+ else
+ setTimeout("mandreel_audiotag_PreloadAssets()", 10);
+}
+
+function maudiotagLoadPackFile(filename,filesize,numsounds,atype)
+{
+ dump("audiotag packfile ("+filename+") ("+filesize+") ("+numsounds+")");
+ var url = g_mandreel_working_folder+filename;
+ dump("audiotag: loading packed data ("+filename+") url("+url+")");
+ var request = new XMLHttpRequest();
+ request.open("GET", url, true);
+ request.responseType = "arraybuffer";
+ request.onreadystatechange = function()
+ {
+ if (request.readyState == 4)
+ {
+ if (request.status == 404)
+ return;
+ if ( request.response != null )
+ audiotagParsePreloadFile(request.response,numsounds,atype);
+ }
+ }
+ request.send();
+}
+
+function audiotagParsePreloadFile(response,numsounds,atype)
+{
+ var pos = 0;
+ var bytes = new Uint8Array(response);
+ var i = 0;
+ if ( webAudioPreloadAsync )
+ webAudioPreloadBytes = bytes;
+ var secondsPos = 0.0;
+ while ( pos < bytes.byteLength && i < numsounds)
+ {
+ // filename
+ var fileName = "";
+ while ( bytes[pos] != 0 )
+ {
+ fileName += String.fromCharCode(bytes[pos]);
+ pos++;
+ }
+ pos++;
+ // filesize
+ var filesize = bytes[pos] | (bytes[pos+1]<<8) | (bytes[pos+2]<<16) | (bytes[pos+3]<<24);
+ pos += 4;
+ var fileNameNoExt = wa_getFileNameNoExt(fileName);
+ var duration = maudiotagDurations[fileNameNoExt];
+ dump("afile ("+fileName+") duration("+duration+") posseconds("+secondsPos+")");
+ maudioSecondsPos[fileNameNoExt] = secondsPos;
+ secondsPos += duration / 1000.0;
+ secondsPos += 0.25;
+ dump("second "+i+" "+secondsPos);
+
+ i++;
+ }
+
+ // contents
+ var contentSize = bytes.byteLength - pos;
+ var bufferdata = new Uint8Array(contentSize);
+ bufferdata.set(bytes.subarray(pos,pos+contentSize));
+ var ascii = '';
+ for (var i=0; i<bufferdata.length; i++)
+ ascii += String.fromCharCode(bufferdata[i]);
+ var base64 = btoa(ascii);
+ audiotagAudioSprite = "data:audio/"+atype+";base64," + base64;
+
+ if ( webAudioPreloadAsync )
+ {
+ dump("started preloading audio files async");
+ setTimeout("mandreel_webAudio_preloadNextAudioFile()",10);
+ }
+
+ audiotagCreateChannel(0);
+}
+
+function audiotagCreateChannel(index)
+{
+ console.log("audiotagCreateChannel "+index);
+ var sound = new Audio();
+ sound.addEventListener("canplaythrough",function()
+ {
+ if ( maudiotagChannelsLoaded[index] == null )
+ {
+ maudiotagChannelsLoaded[index] = sound;
+ maudiotagAvailableChannels.push(sound);
+ console.log("************** loaded channel "+index);
+ if ( index < 8 )
+ setTimeout("audiotagCreateChannel("+index+"+1)", 10);
+ }
+ }, false);
+ sound.addEventListener("error",function()
+ {
+ console.log("************** error loading channel "+index);
+ }, false);
+ //sound.src = "data:audio/mp3;base64,//uQxAAAAAAAAAAAAAAAAAAAAAAAWGluZwAAAA8AAABFAAA0igAHDBERFhsbHyIiJioqLTE1NTk8PEBEREpPT1JWWlpeYmJmaWltcXF1eXl8gISEh4yMj5OTl5qanqGlpamsrK+ysra5ub3AwMTHysrN0NDU19fa3t7h5Ofn6+7u8vX1+fv7/f8AAAA5TEFNRTMuOThyAqUAAAAALjQAABRAJAXKQgAAQAAANIqLReuqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//uAxAAACgjJYRQhAAN1ru+3N6ADNAEAASM2QkOAABKvqQjEIQjSE+pyEJ/5znoc5znP//QgAAEachCN85/oQDB9QIAg8oCEHAQcXfKBjEAIS4IAgclAQBA5BAMZQEHfgmD4fwf5HQ6HQ6HY7HQ7GQrDQPvZToNx37zcYsbgZnqEkTWnZsm+DxpKLDUMfs3A4zHKdzz8+wAWXmmL1KaHf35z0oOjnISA5pYpJmW9w/woDIDpmTxpDRYGwmDH/rUv97+xaWZ9eZkqAiZl+xsj8pszk1ZtY73/+UhDNvTHmxgMROhU0DBzwRq/MQ1Jbn///l4FEGHFFYIElBkORAUcAEZYRjfrSuiv1rWf6/e///Z8mnLXAgFiMOwakw0OepsaDVS5RdrxqT///////8hys3t58nrFS3lWt6/uXec73+46u0oA4ZEXCYUYY+p6C4/B89FZVEYXJqaW+eGCSYJfJOnpq7WadTtuzhoUjsP/+2DEFQOPrW1oPYMAAecorQmDIaE0qGThDsZRhGCCZyF03ZkXKRPVQEMTdeftOw84ncZ4XR/ZoO3JoyPFVtHePkemlrf5f740VGbMspMynd2NrG/h8//u58dsf2jWLnygUiASkXwFfQAw7MEGiSdlDDj7wJCnkpYu+0iqRU2SIo3RAkznFnYGqMYXMtXGhsYWLKMZzg4NSb1Jepcx7ohTx6PUlnSLHuY4vRK3VtWOymoix0TSesWjbseTdsYnvHf0v/Ks8NI0+O+Ge/Z4xkpZ/1rQS4QMHvMPSieYYfONUp/9VQBOCRaIS9okqeKzDCwz2wA0pok7D0mlEAxaelsP1uRm4hT/+2DEEQOQ5XtkLCRz2h00bImEjjlpio6TEqIL4ikSEeJRY1GhlJzTySOlrtqTXhIeh5vmvJqpiXFikoyd4tXBbGHzyo6hae6OHIxuoRjkJWu+okBoZoEDZvFrFN5LiAyxW9TEnnbyz/H/erAb3Ok2y9BVcOnGOv1kzQEgZxr0spQBWdNNJtvXQak+7mL2yf92oalcRhf0oCLJoWidC+awoNrOuFDy2UYNkk+X1a3VBuuTU604pNtS082afizat2f7nunbfdAnawhbPRmEEk5BKECSI7QPXcneTeHfYcEeUrhB0ReamhSlihEAA2DNS+LCVT8zyyPk7m1ml9iLJT5RfWoABPT/+2DEAYAO0V9oTBhvSckr7ejzDaFQT7CIuu6UuevrnRqQWnrosaeHIHIghzTLiApnBWKBykEGRpeaek5WfbQUGm4HvmEc0Z1cNji/jZ03yrg3dGpBRMPChoDGxkHJHP7VZTvlNkkJWY4SOeaqpKaEcrGeaOZFjmOK2LrMLo3/rolzs58SeHt/wAEwAASk5VsmKoQpfyl60V7xyRN9YRKhDS5djhmMfOuYFuxqX1zVE5QQourDCCMeGIHAIIUbK7yOTsRCQZHMruhiQ6ubRh3gIpxYGwfA+/SXh1Viy23s9cxzoKluDQyU+GSomumKPZMdvcKttEc5lxwsFgJAEElytfKhnMr/+2DEBQANdX9u7CRnyay0L7TDDHyX4Oe3pdCccMm/2jMqn6UihdVNPrGTu/Bj9Q3PQETiWC9S8qqOeSsLMp8BQQRIyZGPw2Ps9eVdSt+n+adikmCZSatTjtnZVhEcMzIoiCjdUztJftuGf+IcKZ/6jZjP+wMK6AwjI62203Lw5K7jYUcvoY0QuV6WVTGpKZEs2rKAmBHBArQ8zhvcKbPnoh/+ikScXJArWnwz0dRH02ADU83GEKXl9LQihFi4CPca2wmlvSyLvlVzdBi6p7pDrF7FQmbwjrv8MptOSnNYpWYKAQQQS3MVRtHIskSAIxmUqsMDbMzsMz+Ni4Ffzvr5Q9yTSQj/+0DEEYAKzMty55higVaSr3RgjgSW/8JJAbI8zlbL/t2+fNvGY4PAb3QOFQvSZoLuDsswgQShTAEXHWaY4JEgipiC1WKKOXUAMGOMtMpJOa0oG2pD4UpRq0awhk4dx07DMuCOEpePVSlwuybfziMR1YtHAB8NLRSswL0EVQk9rzoiPCrQbW4qJDYFc6RPsaskKrp1KS90BHdklWipyRV/jqVF0xGGVFm2s3wcwJl9iheX1CGxlP/7QMQMAAqVAYEklG6xVp4syYMNoFoBztJLiJErk7s7/ft/L6IUjCstJlNDOLTdacOt8LO8N/PmVLTiVF8UbwKJnIRTZHo6OsibDzCcv5F7U1AADT5grCxWpvZNskfeQ3o/g3KD5kMyRY7D1zEBZmvbnG7attnJEJGyJAw8pOUUioM3JxtTvZQhc/Sp7L9/Tzm/5+qHPmMKA6WFTryqnsjHP3SP6HWFqgIAAJJSTcH0nhFugclK//tAxAcBCsyvdUWEsNlDDO1M8wzgFJ121UStsnY5UgwO1jgVbsqChv1zojMpnddXBB27nidTTezt9utjvF2+1xUPI/Ey0X9uwe7XVbfR//+tI+W1Jwmcz9Qs/3b/gABKdodQEmZN1hwSr4WFFECvsmmpI4e5kjZKXVCXwRegXNTUxg4dDjow9OCc3JvDgsMvc5wGhRx59hDPA/QUNrr2R7C9am9r3ukxrJGc7Kal1QAAVJQIJCz/+1DEA4OKwPVoZ6RowUoWbIWGGOqbqsvVUvK6OV7AWklGA+pJ7Gw4ca1RiBPhqRr2HF4D8OjfMtXi5wtOwoXW1rfSEe+r2FCXH82z8zbufoKMwSD5wMGb6nuVm6fP3veVEYrpOCSJeL3jTiPov2HAJG0MZ0b1+4SW3YGG/HkPnllc8HPrdH/9CoZM1r6snzmMxGn6WfXz7ua/X/p9JtRzBsA0rFiibYj1jRSHKg0LOGxUkzv/+PUAAaCx0Aa2HcdVkRWwH1qaQeNn33jQOkWL//tAxAyACrRrZEwwxRFULG2o9JQowvUkzUH+pKox7BX+mE4aMztJ5bLGCZsBgpkiCyRSLBsXDzhAVJLP8zWOEbC735yposneBlNZ5LLMkvt4oAECgJJbu59jTGmHsHaGFNsY/kD7qQjkS5Gs6CBju7XoJK5N3I+7I9OyWVevVHnuOyt1S7dEWR1f+nCLyvIrIdWtQyk0zNejsiWIm2nv0sUa5tj/R1IAEAykii7wAQbhWMVBhxz/+0DEB4AKiG1xRhkAIVcULqTEDGaoGHbV4Xj9pl06dhBFNDriPVZrtHz0y7DhFQmfLAYTGL0HQyhOswFXtn4uJA0TFjbU3vCWHzJNQ6H16rRhY0SNUMvu8KuBRVYWUXCpwnvmKF2V6OCa+4xBi0yfQTXPjLrjfR0XhWBi97JhmvImhlbC3oFngKAZUnElyw0xaUOlzDQQNKBQEQKJGr4dULSJux1q3SRR5mjQH5vA6AEVG2q3I//7UMQDAAqw7YejDE/xTKzvKICLFmnKCn338dXIS04/UQUr/QREYmhCdS0v0iFGhKVEZ56wzPlYRdGK2OxfeuP+zpfdW22X7AwcQH4kFEGy4pdFRj1vNAYRUsESwpLqeBfSnyiAgeqKSJBUBUChJdReku5OStSYuNo3r4iXjboq+YVCuxmhyugjzIlbR6QrpXYXZidV9tqm7bWshCyl2O0zOo+/W/6nptP/7vkzAxrGqYAj+moJOJUFyRySySSOTP0NVxWTey+N2SzvTNz0b8b/+0DEDAAKpPWLowR4cVYiLA2DCbBMcCju992OtVI9P6eYSAVCsPDMOS5/qYpE9HLWGXKebH+uZ/qVBgDDRMNeAQyHBVr7t5hjP6QggRIZ7KcSgAEByF7QCVC1nTXajAXjiGcennLpq54XiiEz19DZx1Plm59L+9rmLfLsxPH7KyXRLuw70Itl/VV2X2foqUR/7XMDU2bUrM3EkDIaOYSKBpTP9ZV//1oAkoCCii5hbhGVWlD7qv/7QMQHAAp1NWtHmEbhOxEsTYSIcHonOiRI/atyhLVmNyqKuPt1Oz76Gal6mWZLiyqnoyNq6Kyu6m1WNuQtqzU6cHFHHKrWDqOjtVddjI/fcLaKfwPFTlN1P1AAFJ2gZJIAs3QJCIrgqJmVig/PNUabt5iyI7shRZgA2H7nc3WVv28thQLlVHCwcuCwFpIhfBNpEyTFVwKbJGzYGkYJM7aECVhL7+o+v/1VAQWYVUbGsl033UaF//tQxAYAixlpcSeMR/FeoexNgwkoEPUwTQlyR7yAARPpSHdyD7JYvBIX0z5UI4YgUFsxWYLzbIiaWa97AyuqJ3S3MO0EIaRilYMioZz1pQhL2mBIyKqshdPulW7ikY3q9aU7uD6oiLejkTgeBpfEaUzIuBnKdXuupcw1NdVCWDPaqb4oh20tXdlkZzXn3dpqsWqrWnroR3vdt7pYyoU45TujlTUUbFaALO3tGLpHzqYmKHCZ87y+yJ3KFD+tJtNOUPnhqUpmVk5ZLRt1j3VhEf/7UMQLAA0JaXlGFG8xoy2t6PMVfk0plEVrRyKjwmm6mKsc0HjnlzGO26EwoVnz0+DmCE21DBxd288LT+w9kdX5V6sDyc2ACBDmp5a1PPdkKhxnyHT73kWrcrrRTigOCjXE4vPR7YeAAWcpIkJQiWt3EpIu7t+a4ce3hRyEvn5xl2TU3YlPLMumKKmM1+Ue06Z3pPGLRhA97OqlEzOVmuwwY8lkbdGPs8utGrUYjkKgwxzOUJHVjiSNrVyvInZEsW3TTVdZGDxRxRRiGyQ5nBv/+2DEAAAOXT9vRiTB8aAs65z0jSgUKtyU0inA/MQ3azBbVKY6QFrPSI1gRdH+4JpZLwkcrK5e58ry6+5Vr35Vq3KoYZRwHtHxzrhGj7mKqzQJrO940WkVMc7wb1LfZz5t6/QzLHPnnzkv7J539vpaVN0Gd0LnaCNB8AsJhYRpvDoSZMpx/QwaAEApN3csIrwaRwHqziRqYl5/MmxEGjceGpD8J3rAwG663CuwpeQ6RhwitkVBK0D75hB7BQOuctyvacP4ouiEi0WZ5E3wZq3ND3NqUUgLRdqvod6DM6X+MnV+UtmIz//+TL+wh7tDfyUAoEKWgEAlAn5a9EkjnLaTPoQFZqr/+2DECoMM+WlcbBkJ4bUiak2UjbiCpVzs2UqxZsbtdrKOUzO+3TPbip6yaP+rhdbH1RFT3E/XeQ6FqhHE33jY+4Z/nnhuP6oIlea+tZaraCO6uri7ipifRUSe0/+q5hv3slTrEfmPoAAALsILTzDf5hsOOwFh2FCEZ6cIqrO0+OJNACEo3Fd0mAMhMja9FGVyBAZ65P6pJN+yykaj53njcXnoUlJIOKPkOExjtkvDIKHVGQ5iz8wyLXaedY5NjHJzhqxgnJWlE6yTnZFI0PVZQHvDKRUJpWOOuSSOWnFDZ9CgfJfVaB+mbSzG9zPSRrNQ+GHqlRLcoDRCoUBq2RX6Zcc2hsf/+0DEGAAMVTF/pIzVsYImq52EmGSh3MGANrxh2JPvBC5sZAlp6+a3yRAZ6gyVeI/u81hNX2Zu+mtTb+UtIbS0qwDhpm63/0AhCJJLgCl0Dk9lNxQXBGzJl1CO06ZcjHWy2XTa2VlRUlpI3906cx2aNZo1859dr/s4hWpy7crXzMb7O3219Zvl3mu2/czfv3t9IApxJKW8k/md5RTZ3/fuzu7dmXgdi3WqCcdktstsku1KCrwzUf/7UMQGgAsVN4WjGGPxXyautGGb1qsjAsRbKxruCj80UsQ2vLwAE/ChFSsEHY/nwb/woievMiDEf6u9p0s+nhXRxZF95k2ZmQAGYJu+Yy0hieg3lP+lsXyAhlELzHYBuKglOJuNNtJOAAgBJ0FqQBBGEZnnUgkZvVdmZ/mtHP3ePxvL1SX78ZTtvaf8ycvXiw+/H/w3/LfI/py9K00o5K38yhcchUr6XtJVvdxWdzlp9yZ1qDAcTfPVAABYlJJShiJO2M+XUsVH7VyKNTqmLbb/+0DEC4AKmRNjR5ip0Vam7ajDDD5SgUhRxz0rlIvk/e6R6E0Uotm86XdXUVI+5sg5LyjVsm1lP9dP++owHGkGM7KJIgprGuIsYdQGQUEQfO7IBBFbtJIoqAVBKAVHxBsmxHR6qtFK1b4MXJFbQDQ4LZHyK7RQhAsvzjn+vST6XmbFHVAcQX2WTIR1GUPI3/uxGRuC9Vzpsdmfhy/nSAz6P0yE1zz+gWJKACQSU7gfMF8E82sstv/7UMQGgAtlEVbsJGlBYCet6PQNvlNDDKiT/KlFBJExEihdVd9MTRpLhH6s87wdkbKQlM28sHkacu3mfDiFOajGakZ+QRzMicfZgRlkSqeZBBZg0U/VmJ/cGakUnlh2BHr9d4qNXpppJQEUlnCE0XgS3vnsSV6F130dxidKq6RmM6LPVbt44+5OmbRZyQpXSFOTN+b7GeVcly3kM7WwWiAIQCEjFHRiL9vbuXDlrfSbv/8hqrsARYQ3jxFVBGFtqZsCJVrjiaHnOoMt+qtrLzP/+0DECgALCTNpJ5ir8V+mbGTxlnble8QU2f4Dx3ELd6Qc/zfelQ7X1HNVCIZTrLoitiREMUhSse7K2VRIyFKrbVJlERwSDgyxkYcVF0Exd5MpNUezRV7WeggAVmVRwFcBuQ9qvZdWcrSeDNet64p6b+GsvQK4CiCzB61ygzo1wfPW3gcfy5FCCj3DQw9PN/KjE9LWPmr4ilvYy37gdms+dlTRDKjd4qisrxgfEods5gwqATVZVf/7UMQCAArVM2MnjQ/xR6KspJMM/0oHAjWLLFAQ20HWojbW+aM8U4RHBRBGuCYEhYW1KqeU8YjpXyrZd65FISloCTdGGNn/d/2n/bXPd3Wk/9nBUPnHDKWDR8XbFDCDGlb59o+IgepAASLNSliMDI+GG1SaZ2gAcLQrXXievH5yMsnu3Ik50kkcUhMXghfnIcMGe28D9HPXuwUjp51Ppl/H7x34+Ween+4IUB5tmcBXmzCCbmuMvfgDujAEaSSSKgMwZRKOosc1VCDiRTVCTjP/+0DECwAKuTVnR6RgcWAmbSjDIC9RxP1zFDgLtAyubnkky6n32yLh1xYcJVBVZQyFL0EwY3POBCBJMs+VEO+6f+oci9uERfeBf//44B6ow4lBHxWwCZaym0jICsLCgVacE7XsCYuylheYelWUq9cbGk+qio0bo9lBmYhm5TlMslXcgek3umWtw1ObxdIiXGvf2Puf+fib+ix4S72eNLT4vYWENmGTeMbjn/KlmgRVWKlbAZJuQP/7UMQEgArJNWEnjLPxXKYtKMMgH4s8efDDaDBg/5ixrX3bP1BFh1WwsL4cPy4hkNbwNLh4Vy+wnoCCQ7nTgLpH1FJTM+KGMlK0cZmHh5TCn2BwdxhdnLvuoTRVWmrN1MEqgVdrTbSTgFQzLhDQzlUli4YLjWSnWoxJvUnDi8VrjersRj7xm2Zpxc8jRNb90ww+/bh7FemTmSF4/vmuKdJitV47iObYqCw4SXqma4t5qm2nle4qOcjTdQBpraSSMgFhLI9fbfq/FWNjHv2O/bb/+0DECwAKkTVpRgjT8VQia6WHoAauT4wqpQEAO4x0IZnM6F2qrVfqVvorC1VqMEAlu7FCkIrU6/Oqt9CN8yQwySviU0aXkywrCkZdn3w8t5pHEIABAJWUkHlh0ClYwQs0aZAhjXH3Ewhsz3KFy8JAioUZcNNRjBl38ySc+l3i8U1Q4+vadnehptJc8TpMa8Tj7rhc2u/2u655JHEsrO9+PnsZiLRIXt6VBumtJtJOApdJWJR7B//7QMQGgApFNWdHmGf5YaItNJMh3yRBqMIEkn2PnrJ+pTdQ/kHnUBnJoUsaIECnzp3rvHZKWc1Wgm35Dxh8i/sLTgYh4SkV6ZEWTZOTNsRLfOi0+z8iks1Bc4BDSacabbUgBvAy9tvbJQEtFJrkrgzsa7wogFI10HGHWhX35BtPMztJnPFJvf42YLJ6uYiwl1Xn9rf+2kiedZNqI7/q1rlFCAOj1MRJmkdLnERET+n7nYClAIQw//tQxAGCCsD3UqwlAvFNompFgyE2ok/uTNcYJjqYVQWKUYoiUHAJixBU35R60nOVU30P6IHIsJ3BL1xcx47+3gsoypi+zhWuElBWB9ot/xVFNh04/ZoX04uqaBMcbJsiMDjWHz4nn+k1jVAoqXJUmxSUPnGb0D0hqgfHWTnG1oleTupqraymueBuVr7mrTom/Ymvvs9z1n61luazDhU8jimhKd+LgiKGb19wWzdWNCi1T1Pc6Q0IHp1vXWoAIKck/BvmgTNb0aTrd5pESpabkf/7QMQKAApo8U7sjK2BU6KsaMGifloZiaHCgT40DAzGcKDp4xBcol7HrcSuseyahzshlcBrysSgk2r1KKnKhJ2u+6uqKvsZeqACB1g6FUHRUMO+6oEar0201GAaAeP2DJ+1aZD6w29u+y78e05Irjw1fx+B2IwQAEKbwGLvKXc6TeKIfh2FNaoM5g2MC3V5GbN4w5Bsv5y39KAEFxdDu1jPT5xKLO8gW8fVAAAJJQQEMtWdnL9W//tAxAYCCpUVUS0gT/ldnmkNthjZIlUnaeG7nI5LsqtWtaHI+6DYc2ySpJaXWuKp2Fj2xxtVrXMqRNXTKUFzChi2W5QdvBNVM9u115kHBvt2RnuhQoN0ehiP9XBq2AknMAYpNGTEqmjkNhSShhMYrAdLR8E3NmSAtLrTvKM3GY9RIVW19f2lnd4c4gpnfv/A3/L1zGm+74/Lbdm7ZbTN79nG/azzqr78/q6be+BBRaFXvv/ACgD/+1DEAIIKrRVZLCTBsVqiqI2jIeAFbqqcBCVjQkcjOrIiOScUCilTHDohtN0QHOJ+cwxXpNe7EMY9xc9Sc43/ukd+us1WKhnk6GFbPxRp7z2f8xzJ+v91Ctjv/9rP7s0lBu/PLS396xlBFpOgAoAddoMDpM/TdKZUxMAqxl6YnZduGYxGbPL7GIhQ47jnxMUDZJJVXkWhM1NLosebvPCdF078LF32K91tAiLEJxt7dVCr8f/dzU/QUmu+P26+6NUFEN4AU0OFgLmoSXiZTNNT//tAxAgACqEVQmykq4Ffoquo8yG2UUnmkTQFnx2QaBBJEbUJmF0ibG9QwWSWr7Tr6WK7YwQYzr2FbFdHRbI/oPLIx0LFipXk6IVFf0xY7rwUejPJLlalxx0qAC6tONtMA5SYqCDSXMeDqFBRhbmkxCzao7Hu55svitIPsIq6ZxaBo8u9MHB578tRZHtDQYXI2XurwANttRRimz5DwTd28ZNK1pH31stKOMVVuV+av9hhsCSTJwD/+1DEAgAKwPlEbI0zyV2f6eWRmX/3+N2lSKRzBZIxd321pZRXfu1D9apailmks5b1ShnSqzwItoZCqAcOkh0UPJ/rqW/Pift8AjypDgJidTe2ijk0HKGhF2lPIgYIbfrE5Fl5r0H7ABQYWZgNqMQmwRInJlfYjFpdHLRAgMGESxPSDOihxuNClBk1M6a5Wiv69nlsPaWZZSMI1tO/hDwRgoJlx1MiRnah8yuv3jpx9ztWPJdDH1v2NqLGcDVklQAFeKTSUAMoEoHOjJwgifjN//tAxAiCCp0VV0wZA/lsImgNpiD1oGOg0/5u0NSk4bGfKww+44Ni2Ksme+W+T7i5JO9pOg85ut9omqW4qlTrv5RvkbWPt1+EU6Y0lh5kWlprCXeciBE0vEQBRKgB6F4CviUJWpe6kVBXEDR85N2TZEceHjZFRttt67HVe/zzBsUlaKQMqZhpqBG6MiZGWfV1DzY6n2jqTLRZmLV6mLpKn7i4F6rRuJeVjrMBcnKz8c/c48dMABD/+1DEAQAK+QFPLCTF+U6WZ02zDdgcqqwI3s0Ij3oIkDBjS6NpSSuaS1s8q2lhORoZPl/P1ZJrhqan8tZi8ufn/W37aUfasyHkvkNvaxsZU5jatqnuVS2SQxf/3rjtsoCzHp75cwgqmyuncAJUlAOKNzFCoWTBZaRUL/MUjCBsanoadBypuanXHJpjUjGBRRJZp0ZBROVV+tRgYVS9YnMuNIXzNhA08paZkJrwhQuljJgJPWKB4fjxWJRCE+utFQAirKB3rFoigBi72KKtfZpE//tAxAiCChjVQsykafFTFeaNt40xLD4th43M00oYihvyUQvarZHVz1Q4VajV5XPMwiwh/1gslMJgzDoXcF0HTZDhsENvLXfDJwUYxriUDmT5l/RYSABlwAOYmQqkmBg4GNAsGp5Bgo3QLBqbxdyUhij+cj9UROV2wQ2PbDdhIY/jYi0S3g3gmYvajI0KeN+Dm15fh5BFRSVc63fIgGPuLKHZalYCO6mdoOUAILbsABu5RnOhd5T/+0DEBgIJhL8+7TBnUVgWZk3MoDjJn9di0NpwKnBWE84SXWHyQ/r72XO0HAXmVfhAjjbmAggFVjHMoS4ARmJQ4Rm+X4mHvMcSEQTscUEcB9CEOsI0AF3YAGXLeYcP52RiSCNQGRECSOsuUOas7SmqlzPGav/BXXjik+H+HIKbD2Q9VVFCBAFcY8NjM27S6Pvs2lrs3i0uFSLh+1Oi/VZpFGNMrBLOZ5RcyMQqACdAAOmWPPlOwv/7QMQFAgpssyxtMG8JUZhmHaSOSPMwXJrgiDExM0J0wYIkApfpETKRTCV9p0QOAVUWBKsHIlkAwQCGY3jJ6gqwwRJfznXamZZmAlb7qh3yI8ODfriPk+o2F2CpfH4BALnoAPx+OmzMszX0HKhpiYQUBh7E2QL8V63JcixJlH51HfizXX1tU08o4IoH1E4KKH07z2Kkjlc4cOHVIAcpul38j/3IqRhgZiDCQviBnPQdOu+mADmo//tAxAGCCmSzLm2kbsE1GGddphiyAMZZDhbFkgOPlPpZJzDQOu0RgaBbWW5l7kFFTKONniRoiiekINBkxLRcsHyx1HKANVnEIcHfUU5d6WvmAw4ZvtkVzLWmwURB3MUeeqxM+7SUFOWAA3bs9AIt4BQLIlvC4Mi2VlDrZILKmR+VG4jX1qR5C0dB2pdFVpQva76xTvT9Cu9osfq8qYb0yezuu/uMdNinvnx8udsDwI+zxNUFXfD/+0DEAYMJYLMybbBswUSX5c22DagAFyBpY+mWrxhZaVc6ETFGl08UXKwCYYXjEVhXYrvfEdI/id4YQVhMEHvcEdRfAm6eCN2EthmzVlVKtuh+OUXYMLGGsKzUYq0BS+AA/0vNjNTLWJLwaAEqgEDEwHIC9kCOShyQUYkOQVjiOyYyJ1CbQpQYdoncXQyzfupf2VOnQ5Hgx5m0W0TGX+SyGvqpEj0gMPbacMEQdRQqBU/AAPecDf/7QMQDgwoIwS5tsG1JNhdljbYJ4WiYwJECDkEBSJAOHZMttPttX7Z7DLExSAIceNVzBW7YTrMNFKL22U97QPxLJYctbHIwNkpTw5fDaaBw1BG9qDJoRIIYkdVqQTFBUmAAOzhykiM1Lh5ISgSHMTCQMJpPrdZ1D69m8h2EqOvuO4LvSSbpROIqb2IH4Ngeu3W9KJPwiAnuw6GBBUaQtjPJs6tXfOyQdkoC4lIG8AOU/jTEI5IN//tAxAUDCTCVLE2kbxk2j6TNzCRxKqHHkeUBay2JJBvczBWyIpiQKpGLBkhLmQ8bgHxaC62xOroEcYnmviTdvunWHvSygnmXowvYGZxUAmga3cu/MAOQAA4KxTFjMEjSCicisanG1Js66oWOytu8BJ7I4v5FmgtycZXk5YoOCA3bQoPitEmeapQobr0+v9qPdv+1eVFpOqTkquvtbv31+GOu1QCnAADtRVMUOUzcBDI44AZZm8r/+zDECYIKJHckbmUDyRwVpx2mGN9QESCJIGKcVSwiBToIjZpcCF7CaVqMxTxeQp2ALALFKeEoaB4RRhiBid24ZS+dPefJzydMzFU++nhJxJP+iayXGwADllB5qRG1RJArgXyvwWGK59GkQHUxMTMLhcJsZUastOC/Tf/4s8cQ001DMzBIXkogTl+E61/M5qcan2y/JsyOWMajKgD/+zDEAIBISIVLrCTH+QuP5c28GC0BDE3JdaAATILYttbu1srFrEJrscMAWhxKoTZ6cqSVbGSSCjdn2k2uSwhFVmsjjGTMTeBliVv9gkXAGRMu1f/Lg4KWnLoIk1gtAsFgyVygwUQ6bM4/FKZ1m4iAgMAgUwMVJEmmz6xfMJM3ZF+Ufz3m1WZDybpeWMT4j2+u+OvuxmLvml1VADj/+0DEAQMI/FEibmUhyVETY83cIHnAANoYoylIgxU63lOmfm0wNcBQwAnJoLBlvGKKDOe5S75toLYZlsoBgFAkaKG0S9KKyRvdqMOhesadwNNJthPrUPvR3922AZEAAY5TaCEFM6CjMQw3AwBBhENOEueONAUltI1AYScTDK7J3oYQ0V3nQ3A6nIfBwHAYCEVD84MOUNCsSNg/Raq49bFSGqWds2aeqWDqgY8VDsz9qgLAA2jh4//7QMQDAwnsfxxO6MXJMI/kDcygeDgV0zfBUeGsMBcwpC44zYUBBmUVLNuJKxoQoKgSi7DmR3ptX7sOVHKdmKkJa3sfukVjao3gZRmsDPNRmsV/pB87MX8nkRV03pugKRgAH1h2ZLFA0vjBIdHlhFSxtEcwBEP23ayrVHVBGnMrhiTtdl9PFZTkqqCKFHiQaOKIIpBg5e9jpfqHheIH2xrHgcYcAgrgvrVc+gAAgSYnLGAAB4mY//swxAWACLCHO6ywxfkbjuSNthkZg0ZUi97wVRnpCHOJhJEh1drR1ynUKpEZ0Zl140f8MpMZhsyhplPZ6NuMXemWbckcNLwSazA8CH69/6Be1AANwLD9kAvAJAqw6dKV6XaaiM4KGYDxOHFoNDcsCGWF5E4EJI6CXtwmNnyQr8xXyMmMWNZ1mI82VXLka2IqQhbfsfvSlQuQA8k7//tAxAKDCaRrGE5lg4k2kONJ3SQ4xLxGoBOZ8AI6CZkJtnCZ5MSPIMvSLByAqQgpfjTwqqwKxNzgUXLScHpmc8XmUXv+xp+/l4Gf5qGN263hpQHkRj5VH7/39f79g/ABz2yxhiHJs+pqDCNqS4BDmRIN+VQMaXOgLR1EIB4FkIfylMpl73guFQRA8M4SkM3EkoQ8Qr1s+3ubl2xcPCoyq8l3txvDqXhQc+mpACEs0AAeSDoGyJn/+0DEBYJI+IUi7jzHaSuQ4oncsGiMTCMQoDkRS25fIkQGA/TkGw8W1EX9HM7KkJGDuJ0kbK1AkXn16CFo28ckVHdu3vpQlGOUed6Wa9PbLudsHT2FWzSQFzNUCAMCxzan+4YQqRyZQJNRdWQMGkwBeBR1RB0SUIo4llgXiITxgOKeGB012Djjj5621dg/tr0GW3bUm+1tm45acStaAGpdGAAaxfERmd0POoow4vyxAHRIfLI0Av/7MMQMgggQaybt4YChMw1iidykeGPlkNAbghZYZejZ22cx2bq9tnustgtbsn6NecCJ54eCciNSaoenToBoADU6HzWkdDLQNgAIxuDl1RQ8BSC9BokMSKwUEpKEGKP8wpl6OFG20acKWPe86GaNNAmOyWz2tLXwzGalng/pCBM2Bi8rE9YiJ+xyKhuQA/acDBIZMkjEw6IgG6dJiv/7MMQJAwjEbRZOZSOBHo0iid0wKKpmEGgEOEozxcucx4axkjCWhQK0x1nzWNiEkWYe1K5N5F9ptw93mS2t7muLBWKwBnXir/UPgAHChzGsyMG8OHjmjV0HbSKSZ4YW1HBCA6HEvUGELB/OggEQCyglFgrkgYnLBbVtxKObddmC1/rHzP7bGng2DATW8iE//6YGAAM/c7MXT/GgIP/7QMQFg0nwaxBO5SPBLAuiSdwYeMGhOFUDH/EiCdEILDGZ1QwKtAUYEAl3UqUi0x3XSwlsFzz0OEIUAaaISAI04xKKcq9vqV577sOmp8PERD+39//7f/2eoGTbGTDAoojEkHgEJZ5MWAlsAyh1SXaglkxQADCSTaGxhdynUMxV7I1EJVI/I5a6l0Zdl/KaekIhwqMQEBoqwZL3Pb/////////+6h9AA8Mdkw3Kow2JMxDEwwBA//swxAiCSMBrEk7lg0EMDSLZ3LAshwC0GtCGBiIFNRNNIouq/SwDVVWkcJFSxoOLauKmQ3XT/xduRbamR413s2fiGgUJNJD9lWkK+HKorGF5mhTEAxkRpqhGIdbe9Vagla1YvGD0SFwUFM3RoR1el1l2pSGsLNWsSTvy99vot+i8kOB0gRiwT1YtbfsoAAAAAgkjAAB6LNGViYcf//swxAeCSRxrF65lIYkxDWHF3CRypEkRRCSBjpIqO6u91WYMuXyt1gELiYCkjMcjAHBEKiQ0CMY6nCKOsS7ZSnRnOEWOVkBz0w3UufZH0mMa5zM5VkMTCPMeRSMpQxhq8Nfh5dC74gFAreCKLxZq/DgQ5doGBVombOHRdEpCcqq5wdls+8hvx0hdoImT7CSqtfxF9P9nb/q///XV//tAxAACychPDk7pIcENCeHV3Jg4GgADkOnDHgMj/STUCRUABVBiBRn2RMaSLgoLgy1zDSIKyh2mIsrfeJwkgGlVzPYacxO24WicCgwRg2NKCHRNJ/Rvd8q51H7rv/6v/+n6QnnSng52T5HAI4skQMroBZSF6mDS00gYC1sMBpG71HmkLV9880ACsutaMVeQmZATUmxwqwUQl5ER3f/////9GBf9fvUAAAl4AA7XJw03CAy6Daf/+zDEB4JIrF8PLuUhgRkNYdnMIHDUCLkgIIOnJji7zYWYqTYUv2Lwa7TZkBlD4noHhNEgMG4EMVc+XP+T+k8sFiYSZCbA2Hr9aaEhPg9RlDI5JFAsEJQLeHFAoIt9CJmLYJIlyz+HZNTuZAkzDtPJlAMzDQ/pOT5NkdVe6LvD7kjD6FSRL//////q/r6f/1eQaj5AAKymYkEocAn/+0DEBQNI6F0OTukhQSoMIYnMmHCaJWLQC14oDARtHJXz7MwWd79MCADQKhQEVGloiD6y+SVtw3wI5VHHtvYSKixCTsFBdSX////7//935X9zR0PR9Y1sNwNBSgYHEMIhQASDk3LUNQNfdHBZbOY3YfGBJdFsQAD0QdGdcqNNfzPZTRvLsBigw4kc15f9Hu42i/9fV/t7f/d7uzhGYA5QTcwJB85PTGAHlTseEbaOKnTxLvn2TP/7MMQMg0k0Zwou5MHRKg0hSd0YMEgbeOJp/pPD9Hwmfg+BZb0ZeXs7CzrpmZ20+VXcnvei7vpFv9qf/sv+izWxCvo/20roPgWZBlUbhQHyFKIoQDWYNxLmuS3rMLKeLbvC7IWE4tEyiCFz3fliL+ZT/Phu6QpCQSC6bI1Hr/09FFKLLuP/1I+zq6T73X9Py9UALUgAe82GmSZiyv/7QMQFgklIOQzN5MGBN4bhSbykKKHOyWlTfAwkbUqg94Iu4bLIw8DbD4CUmq7GnicEAWFmpDkChMOjzo4GSA1gu0WYBjikft/6un/1/o39F77e+hZDZj04wLPMEchCPl6sjAgBQEwN+YmvBxaUBRsUIKFdZuqsh954WLlV3gdhkXfHrF1Jj1u1uusFiiU1/kndSW3fWnr2nEWbEI6b61MFdKoAbUAAfChHevBsG8wYpeURSQbZ//swxAmCyIA1DM3hIMELi2FBvIw4wFlROygCwYM5SPVrpkCmwyokZIiQ0YQwksiJmqc9i1zH4p6vXPf0dHu/Zb7NlXq2aDzCoxVVMTY9TSIllKvChxlT1xrUESW9JZu/Zj/cMFA3VR5mRL0sGw20aBlmwMgghALv7Gt/9m7/ovq2Xf1r+28ZZ9MZAANHxTDlIWCKHUPCxVWF7ToJ//tAxAmDSmwrCE3h4IEkDeEJvBQoRI0DLViebmFUs7a8Ax4iZBfAhEakAkyQ0qDzWGCQaYm1pmKSTsa2voFd7C59NNcczoUxl5lLmr6YpbQ2S9iGLUUhr9QauLniwHGoOhwWQoK5kFwBLYYktdsPBAVTVDKuTfO53YjXIl3S4vUhqS9XPX2JurasU+6pl70i3jmHEPSjc30+a9F9Y3JqZQADlG0x5LQAI4KrssSoQEgyQGgaGxD/+zDEC4NJdHMITaRnARULYMmmDOCspDmloyhzQ96zWWlQYjM3TnlHhQGGWlZQoh0pOXsnUUInfQ+UehNbVrFn6l00UXs7/5zqWSh9TokeIliKCgaerGHvGRPNX0nrMs8is9cjVle7tElMOJwdWi0jlg6IwMaLB4KAdpJpze3wJVK7CUbW0xv//V/0Ju/o2xjEFiqXKIb6K8SGkYT/+0DEBoNKDEEEDTBmwS2QIIW3oFBKb6J5fNIW6VBhKX6CzIEBxABBQ8aBIc4mYEYaHBNUcYFgCGRY4liwHGKSlAVl3rbIkaEE7uw9Zc+511r2rQunR7WdXjcJtliCroK5IIohxDn+YDymsKmmsZF7vWN6i3OlxUebCPUWrTVZeYl1mPFmLPrLARTj1sLNUYW7ih+XsNDWvucCB1v91nZdt/0/oUAOdeC0iQMDN0XvDSVzr1ZoFf/7QMQJAko0ZwItmGiBMJRgWaYYSCKSNP5JQWsYWlWoCXEPj+muEUWOCAwMlYjWWEQ8cTEjECQxMvSfLJ1HWHjTklUy4Xfimp86QbwlI4vvs09er1hak+0kRExoGsriy+LyBJg5wk2DZlVWbi7EeCzabvJ5IV0q1I3T9fIedIn4Rfy3MTTwxvt1refeGI0WaRdS9+V2Jo2fFF7P0v3Zj9mlOKkBQ9mzuCLZAF5iibnjhBTIWkIS//tAxAqDygx0/g0wwwEyCd9BlhiQiTSyC9cimcnE0SbtiDvMvOu23layJQHRC8JqRCRsBzKxjAdHUiyBIfONSWqKtlkVbV7RSjT23apX6m3DZCZqAtNRi8GFV4shUW3oHESCqLCZxVwTKgwk0kkdj6mAwqyChgMJOkQMfEJ5oTOPlCKhaksNBO0e/ELiiJYclNa9+y7b3V7OtPb/1CAMMEooCVMbJgMgk4dPkoVYIUQpk9zS01v/+yDEDINJzG74LCRjwIIE3ISTGBUFVVlJloCUOOVnmMHEC0sgwEBwcJRw41CjQVFSoSSxgNXLKqktCjSpo09t6NvUmxTa/+/o/awKlCaC0SQKKAiaC1JInGlgaoMShu//qmWCagxYJKX/+0xBTUUzLjk4LjJVVVVVVVVVVVVVVVVV//sQxAuDwAABpAAAACAAADSAAAAEVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX/+xDENQPAAAGkAAAAIAAANIAAAARVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVQ==";
+ sound.src = audiotagAudioSprite;
+ sound.load();
+ console.log("--audiotagCreateChannel "+index);
+}
+
+function at_imp_mandreel_audio_playChannel(filename,channel,vol,loop,pitch)
+{
+ at_imp_mandreel_audio_stopChannel(channel);
+ var fileNameNoExt = wa_getFileNameNoExt(filename);
+ var time = maudioSecondsPos[fileNameNoExt];
+ if ( time != null )
+ {
+ console.log("play "+fileNameNoExt+" "+time);
+ if ( maudiotagAvailableChannels.length > 0 )
+ {
+ var sound = maudiotagAvailableChannels.pop();
+ var duration = maudiotagDurations[fileNameNoExt];
+ sound.currentTime = time;
+ console.log("OK "+sound.currentTime);
+ sound.play();
+ maudiotagChannels[channel] = sound;
+ maudioChannelEnd[channel] = time+(duration/1000.0);
+ }
+ }
+ else
+ {
+ console.log("not found play "+fileNameNoExt);
+ }
+}
+
+function at_imp_mandreel_audio_stopChannel(channel)
+{
+ var sound = maudiotagChannels[channel];
+ if ( sound != null )
+ {
+ sound.pause();
+ maudiotagAvailableChannels.push(sound);
+ maudiotagChannels[channel] = null;
+ }
+}
+
+var mandreel_flash_socket_callback = null
+
+function mandreel_flash_sockets_load_flash(callback)
+{
+ mandreel_flash_socket_callback = callback;
+ var failed = "";
+ try
+ {
+ var mandreelSocketsSwf = g_mandreel_working_folder+"mandreelflashsockets.swf";
+ var swf = swfobject.createSWF({ data:mandreelSocketsSwf, width:"0", height:"0", allowScriptAccess:"always" }, { menu:"false" }, "FlashDivSockets");
+ if ( !swf )
+ failed = "Unable to open MandreelFlashSockets.swf";
+ }
+ catch(err)
+ {
+ failed = err;
+ }
+}
+
+var js_mandreel_flash_socket_swf_loaded = false;
+
+function js_mandreel_flash_socket_ready()
+{
+ js_mandreel_flash_socket_swf_loaded = true;
+ if (mandreel_flash_socket_callback)
+ mandreel_flash_socket_callback();
+}
+
+
+function Mandreel_Socket_InitLibrary(sp)
+{
+ //mandreel_flash_sockets_load_flash();
+}
+
+
+function mandreel_flash_sockets_getFlashMovieObject(movieName)
+{
+ if (Mandreel_window.document[movieName])
+ {
+ return Mandreel_window.document[movieName];
+ }
+ if (navigator.appName.indexOf("Microsoft Internet")==-1)
+ {
+ if (document.embeds && document.embeds[movieName])
+ return document.embeds[movieName];
+ }
+ else
+ {
+ return document.getElementById(movieName);
+ }
+}
+
+function js_mandreel_flash_socket_onError(message)
+{
+ var id = parseInt(message);
+
+ var sp = g_stack_pointer+512*1024;
+
+ dump('on error ' + id);
+
+ heap32[sp>>2] = id;
+ mandreel_flash_tcp_onError(sp);
+
+}
+function js_mandreel_flash_socket_onConnect(message)
+{
+ var id = parseInt(message);
+
+ var sp = g_stack_pointer+512*1024;
+
+ dump('connected ' + id);
+
+ heap32[sp>>2] = id;
+ mandreel_flash_tcp_onConnect(sp);
+}
+
+function js_mandreel_flash_tcp_receive_callbak(message)
+{
+ var strings = message.split(' ');
+
+ var id = parseInt(strings[0]);
+ var data = strings[1];
+
+ var sp = g_stack_pointer+512*1024;
+
+ var data_ptr = sp + 1024;
+ fill_ptr_from_string(data_ptr,data);
+
+ heap32[sp>>2] = id;
+ heap32[(sp+4)>>2] = data_ptr;
+ mandreel_flash_tcp_receive_callbak(sp);
+}
+
+function js_mandreel_flash_tcp_update(sp)
+{
+ var id = heap32[sp>>2];sp+=4;
+ var size = heap32[sp>>2];sp+=4;
+
+ var flashMovie=mandreel_flash_sockets_getFlashMovieObject("FlashDivSockets");
+ flashMovie.receiveMessage("receive " + id + " " + size);
+}
+
+function js_mandreel_flash_tcp_create(sp)
+{
+ var id = heap32[sp>>2];sp+=4;
+
+ var flashMovie=mandreel_flash_sockets_getFlashMovieObject("FlashDivSockets");
+ flashMovie.receiveMessage("create " + id);
+}
+
+function js_mandreel_flash_tcp_connectTo(sp)
+{
+ var id = heap32[sp>>2];sp+=4;
+ var ptr_string = heap32[sp>>2];sp+=4;
+ var port = heap32[sp>>2];sp+=4;
+
+ var server_name = get_string_from_ptr(ptr_string);
+
+ var flashMovie=mandreel_flash_sockets_getFlashMovieObject("FlashDivSockets");
+ flashMovie.receiveMessage("connect " + id + " " + server_name + " " + port);
+}
+
+function js_mandreel_flash_tcp_close(sp)
+{
+ var id = heap32[sp>>2];sp+=4;
+
+
+ var flashMovie=mandreel_flash_sockets_getFlashMovieObject("FlashDivSockets");
+ flashMovie.receiveMessage("close " + id);
+ dump("js_mandreel_flash_tcp_close " + id);
+}
+function js_mandreel_flash_tcp_write(sp)
+{
+ var id = heap32[sp>>2];sp+=4;
+ var ptr = heap32[sp>>2];sp+=4;
+
+ var message = get_string_from_ptr(ptr);
+
+ dump('js_mandreel_flash_tcp_write ' + message);
+
+ var flashMovie=mandreel_flash_sockets_getFlashMovieObject("FlashDivSockets");
+ r_g0 = flashMovie.receiveMessage("send " + id + " " + message);
+}
+
+
+
+function js_mandreel_flash_tcp_dump(msg)
+{
+ dump(msg);
+}
+
+function _GLOBAL__I_Landscape02Vtx(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = _ZL10raycastBar;
+ heap32[(g0)] = 8;
+ r0 = r0 >> 2;
+ _Znwj(i7);
+ heap32[(r0+10006)] = r_g0;
+ heap32[(g0)] = r_g0;
+ heap32[(g0+1)] = 0;
+ gettimeofday(i7);
+ heap32[(r0+10001)] = 0;
+ heap32[(r0+10005)] = 0;
+ heap32[(r0+10004)] = 9999;
+ heap32[(r0+10003)] = 0;
+ heap32[(r0+10002)] = 0;
+ return;
+}
+
+function _GLOBAL__D_Landscape02Vtx(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = _ZL10raycastBar;
+ r0 = r0 >> 2;
+ r0 = heap32[(r0+10006)];
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZN15DemoApplication6myinitEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ return;
+}
+
+function _ZN15DemoApplication16getDynamicsWorldEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r0 = heap32[(r0+1)];
+ r_g0 = r0;
+ return;
+}
+
+function _ZNK16btCollisionWorld17RayResultCallback14needsCollisionEP17btBroadphaseProxy(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = heap32[(fp+1)];
+ r2 = heapU16[(r0+14)>>1];
+ r3 = heapU16[(r1+4)>>1];
+ r2 = r2 & r3;
+ r2 = r2 & 65535;
+ if(r2 ==0) //_LBB4_2
+{
+ r0 = 0;
+ r_g0 = r0;
+ return;
+}
+else{
+ r1 = heapU16[(r1+6)>>1];
+ r0 = heapU16[(r0+12)>>1];
+ r0 = r1 & r0;
+ r0 = r0 & 65535;
+ r1 = 0;
+ r0 = r0 != r1;
+ r0 = r0 & 1;
+ r_g0 = r0;
+ return;
+}
+}
+
+function _ZN16btCollisionWorld24ClosestRayResultCallbackD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTVN16btCollisionWorld24ClosestRayResultCallbackE;
+ r0 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r0)] = r1;
+ return;
+}
+
+function _ZN16btCollisionWorld24ClosestRayResultCallbackD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTVN16btCollisionWorld24ClosestRayResultCallbackE;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZN16btCollisionWorld24ClosestRayResultCallback15addSingleResultERNS_14LocalRayResultEb(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+ var f10;
+ var f11;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ r0 = r0 >> 2;
+ r1 = heap32[(fp)];
+ f0 = heapFloat[(r0+6)];
+ r1 = r1 >> 2;
+ f1 = heapFloat[(r1+1)];
+ if(f0 <=f1) //_LBB7_2
+{
+ r2 = heap32[(fp+2)];
+ heapFloat[(r1+1)] = f0;
+ r3 = heap32[(r0)];
+ heap32[(r1+2)] = r3;
+ if(r2 ==0) //_LBB7_4
+{
+ r2 = r3 >> 2;
+ f0 = heapFloat[(r0+2)];
+ f1 = heapFloat[(r2+1)];
+ f2 = heapFloat[(r0+3)];
+ f3 = heapFloat[(r2+2)];
+ f4 = heapFloat[(r2+5)];
+ f5 = heapFloat[(r2+6)];
+ f1 = f1*f0;
+ f3 = f3*f2;
+ f6 = heapFloat[(r0+4)];
+ f7 = heapFloat[(r2+3)];
+ f8 = heapFloat[(r2+9)];
+ f9 = heapFloat[(r2+10)];
+ f10 = heapFloat[(r2+11)];
+ f11 = heapFloat[(r2+7)];
+ f4 = f4*f0;
+ f5 = f5*f2;
+ f1 = f1+f3;
+ f3 = f7*f6;
+ f0 = f8*f0;
+ f2 = f9*f2;
+ f4 = f4+f5;
+ f5 = f11*f6;
+ f1 = f1+f3;
+ f0 = f0+f2;
+ f2 = f10*f6;
+ f3 = f4+f5;
+ heapFloat[(r1+13)] = f1;
+ f0 = f0+f2;
+ heapFloat[(r1+14)] = f3;
+ heapFloat[(r1+15)] = f0;
+ heap32[(r1+16)] = 0;
+}
+else{
+ heap32[(r1+13)] = heap32[(r0+2)];
+ heap32[(r1+14)] = heap32[(r0+3)];
+ heap32[(r1+15)] = heap32[(r0+4)];
+ heap32[(r1+16)] = heap32[(r0+5)];
+}
+ f0 = 1;
+ f1 = heapFloat[(r0+6)];
+ f2 = heapFloat[(r1+9)];
+ f3 = heapFloat[(r1+5)];
+ f0 = f0-f1;
+ f3 = f3*f0;
+ f2 = f2*f1;
+ f2 = f3+f2;
+ heapFloat[(r1+17)] = f2;
+ f2 = heapFloat[(r1+6)];
+ f3 = heapFloat[(r1+10)];
+ f2 = f2*f0;
+ f3 = f3*f1;
+ f2 = f2+f3;
+ heapFloat[(r1+18)] = f2;
+ f2 = heapFloat[(r1+7)];
+ f3 = heapFloat[(r1+11)];
+ f0 = f2*f0;
+ f1 = f3*f1;
+ f0 = f0+f1;
+ heapFloat[(r1+19)] = f0;
+ f0 = heapFloat[(r0+6)];
+ f_g0 = f0;
+ return;
+}
+else{
+ r0 = _2E_str3;
+ r1 = _2E_str4;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 250;
+ _assert(i7);
+}
+}
+
+function _ZN20btDefaultMotionStateD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV20btDefaultMotionState;
+ r0 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r0)] = r1;
+ return;
+}
+
+function _ZN20btDefaultMotionStateD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV20btDefaultMotionState;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZNK20btDefaultMotionState17getWorldTransformER11btTransform(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+ var f10;
+ var f11;
+ var f12;
+ var f13;
+ var f14;
+ var f15;
+ var f16;
+ var f17;
+ var f18;
+ var f19;
+ var f20;
+ var f21;
+ var f22;
+ var f23;
+ var f24;
+ var f25;
+ var f26;
+ var f27;
+ var f28;
+ var f29;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ f0 = heapFloat[(r0+17)];
+ f1 = heapFloat[(r0+1)];
+ f2 = heapFloat[(r0+21)];
+ f3 = heapFloat[(r0+5)];
+ f4 = heapFloat[(r0+2)];
+ f5 = heapFloat[(r0+6)];
+ f6 = f1*f0;
+ f7 = f3*f2;
+ f8 = heapFloat[(r0+25)];
+ f9 = heapFloat[(r0+9)];
+ f10 = heapFloat[(r0+18)];
+ f11 = heapFloat[(r0+22)];
+ f12 = heapFloat[(r0+19)];
+ f13 = heapFloat[(r0+13)];
+ f14 = heapFloat[(r0+3)];
+ f15 = heapFloat[(r0+23)];
+ f16 = heapFloat[(r0+30)];
+ f17 = heapFloat[(r0+14)];
+ f18 = heapFloat[(r0+7)];
+ r1 = heap32[(fp+1)];
+ f19 = heapFloat[(r0+26)];
+ f20 = heapFloat[(r0+31)];
+ f21 = heapFloat[(r0+27)];
+ f22 = heapFloat[(r0+15)];
+ f23 = heapFloat[(r0+11)];
+ f24 = heapFloat[(r0+10)];
+ f25 = heapFloat[(r0+29)];
+ f26 = f4*f0;
+ f27 = f5*f2;
+ f6 = f6+f7;
+ f7 = f9*f8;
+ r0 = r1 >> 2;
+ f28 = f14*f0;
+ f29 = f18*f2;
+ f26 = f26+f27;
+ f27 = f24*f8;
+ f6 = f6+f7;
+ f7 = f28+f29;
+ f28 = f23*f8;
+ f26 = f26+f27;
+ heapFloat[(r0)] = f6;
+ f6 = f1*f10;
+ f27 = f3*f11;
+ f7 = f7+f28;
+ heapFloat[(r0+1)] = f26;
+ heapFloat[(r0+2)] = f7;
+ f7 = f4*f10;
+ f26 = f5*f11;
+ f6 = f6+f27;
+ f27 = f9*f19;
+ f28 = f14*f10;
+ f29 = f18*f11;
+ f7 = f7+f26;
+ f26 = f24*f19;
+ f6 = f6+f27;
+ heap32[(r0+3)] = 0;
+ f27 = f28+f29;
+ f28 = f23*f19;
+ f7 = f7+f26;
+ heapFloat[(r0+4)] = f6;
+ f1 = f1*f12;
+ f3 = f3*f15;
+ f6 = f27+f28;
+ heapFloat[(r0+5)] = f7;
+ heapFloat[(r0+6)] = f6;
+ f4 = f4*f12;
+ f5 = f5*f15;
+ f1 = f1+f3;
+ f3 = f9*f21;
+ f6 = -f25;
+ f7 = f14*f12;
+ f9 = f18*f15;
+ f4 = f4+f5;
+ f5 = f24*f21;
+ f1 = f1+f3;
+ heap32[(r0+7)] = 0;
+ f3 = f0*f13;
+ f14 = f2*f17;
+ f0 = f0*f6;
+ f2 = f2*f16;
+ f7 = f7+f9;
+ f9 = f23*f21;
+ f4 = f4+f5;
+ heapFloat[(r0+8)] = f1;
+ f1 = f10*f13;
+ f5 = f11*f17;
+ f10 = f10*f6;
+ f11 = f11*f16;
+ f3 = f3+f14;
+ f14 = f8*f22;
+ f0 = f0-f2;
+ f2 = f8*f20;
+ f7 = f7+f9;
+ heapFloat[(r0+9)] = f4;
+ heapFloat[(r0+10)] = f7;
+ f4 = f12*f13;
+ f7 = f15*f17;
+ f6 = f12*f6;
+ f8 = f15*f16;
+ f1 = f1+f5;
+ f5 = f19*f22;
+ f9 = f10-f11;
+ f10 = f19*f20;
+ f3 = f3+f14;
+ f0 = f0-f2;
+ f2 = f4+f7;
+ f4 = f21*f22;
+ f6 = f6-f8;
+ f7 = f21*f20;
+ f1 = f1+f5;
+ f5 = f9-f10;
+ f0 = f3+f0;
+ heap32[(r0+11)] = 0;
+ f2 = f2+f4;
+ f3 = f6-f7;
+ f1 = f1+f5;
+ heapFloat[(r0+12)] = f0;
+ f0 = f2+f3;
+ heapFloat[(r0+13)] = f1;
+ heapFloat[(r0+14)] = f0;
+ heap32[(r0+15)] = 0;
+ return;
+}
+
+function _ZN20btDefaultMotionState17setWorldTransformERK11btTransform(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+ var f10;
+ var f11;
+ var f12;
+ var f13;
+ var f14;
+ var f15;
+ var f16;
+ var f17;
+ var f18;
+ var f19;
+ var f20;
+ var f21;
+ var f22;
+ var f23;
+ var f24;
+ var f25;
+ var f26;
+ var f27;
+ var f28;
+ var f29;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = heap32[(fp+1)];
+ r0 = r0 >> 2;
+ r1 = r1 >> 2;
+ f0 = heapFloat[(r1)];
+ f1 = heapFloat[(r0+17)];
+ f2 = heapFloat[(r1+1)];
+ f3 = heapFloat[(r0+21)];
+ f4 = heapFloat[(r0+18)];
+ f5 = heapFloat[(r0+22)];
+ f6 = f1*f0;
+ f7 = f3*f2;
+ f8 = heapFloat[(r1+2)];
+ f9 = heapFloat[(r0+25)];
+ f10 = heapFloat[(r1+8)];
+ f11 = heapFloat[(r0+29)];
+ f12 = heapFloat[(r1+4)];
+ f13 = heapFloat[(r0+19)];
+ f14 = heapFloat[(r1+9)];
+ f15 = heapFloat[(r0+30)];
+ f16 = heapFloat[(r1+5)];
+ f17 = heapFloat[(r0+23)];
+ f18 = heapFloat[(r1+10)];
+ f19 = heapFloat[(r0+31)];
+ f20 = heapFloat[(r1+6)];
+ f21 = heapFloat[(r0+27)];
+ f22 = heapFloat[(r0+26)];
+ f23 = f4*f0;
+ f24 = f5*f2;
+ f6 = f6+f7;
+ f7 = f9*f8;
+ f25 = heapFloat[(r1+14)];
+ f26 = heapFloat[(r1+13)];
+ f27 = heapFloat[(r1+12)];
+ f28 = f13*f0;
+ f29 = f17*f2;
+ f23 = f23+f24;
+ f24 = f22*f8;
+ f6 = f6+f7;
+ f7 = f28+f29;
+ f28 = f21*f8;
+ f23 = f23+f24;
+ heapFloat[(r0+1)] = f6;
+ f6 = f1*f12;
+ f24 = f3*f16;
+ f7 = f7+f28;
+ heapFloat[(r0+2)] = f23;
+ heapFloat[(r0+3)] = f7;
+ f7 = f4*f12;
+ f23 = f5*f16;
+ f6 = f6+f24;
+ f24 = f9*f20;
+ f28 = f13*f12;
+ f29 = f17*f16;
+ f7 = f7+f23;
+ f23 = f22*f20;
+ f6 = f6+f24;
+ heap32[(r0+4)] = 0;
+ f24 = f28+f29;
+ f28 = f21*f20;
+ f7 = f7+f23;
+ heapFloat[(r0+5)] = f6;
+ f1 = f1*f10;
+ f3 = f3*f14;
+ f6 = f24+f28;
+ heapFloat[(r0+6)] = f7;
+ heapFloat[(r0+7)] = f6;
+ f4 = f4*f10;
+ f5 = f5*f14;
+ f1 = f1+f3;
+ f3 = f9*f18;
+ f6 = f13*f10;
+ f7 = f17*f14;
+ f4 = f4+f5;
+ f5 = f22*f18;
+ f1 = f1+f3;
+ heap32[(r0+8)] = 0;
+ f0 = f0*f11;
+ f2 = f2*f15;
+ f3 = f6+f7;
+ f6 = f21*f18;
+ f4 = f4+f5;
+ heapFloat[(r0+9)] = f1;
+ f1 = f12*f11;
+ f5 = f16*f15;
+ f0 = f0+f2;
+ f2 = f8*f19;
+ f3 = f3+f6;
+ heapFloat[(r0+10)] = f4;
+ f0 = f0+f2;
+ heapFloat[(r0+11)] = f3;
+ f2 = f10*f11;
+ f3 = f14*f15;
+ f1 = f1+f5;
+ f4 = f20*f19;
+ f1 = f1+f4;
+ f2 = f2+f3;
+ f3 = f18*f19;
+ f0 = f0+f27;
+ heap32[(r0+12)] = 0;
+ f2 = f2+f3;
+ f1 = f1+f26;
+ heapFloat[(r0+13)] = f0;
+ f0 = f2+f25;
+ heapFloat[(r0+14)] = f1;
+ heapFloat[(r0+15)] = f0;
+ heap32[(r0+16)] = 0;
+ return;
+}
+
+function _ZN17btTypedConstraint21setupSolverConstraintER20btAlignedObjectArrayI18btSolverConstraintEiif(sp)
+{
+ var i7;
+ var fp = sp>>2;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ return;
+}
+
+function _ZN17btTypedConstraint23solveConstraintObsoleteER11btRigidBodyS1_f(sp)
+{
+ var i7;
+ var fp = sp>>2;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ return;
+}
+
+function _ZN13BenchmarkDemo15displayCallbackEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ return;
+}
+
+function _ZN13BenchmarkDemo11exitPhysicsEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r1 = heap32[(r0+9)];
+if(!(r1 <1)) //_LBB15_5
+{
+ r1 = 0;
+_3: while(true){
+ r2 = heap32[(r0+11)];
+ r3 = r1 << 2;
+ r2 = (r2 + r3)|0;
+ r2 = r2 >> 2;
+ r2 = heap32[(r2)];
+if(!(r2 ==0)) //_LBB15_4
+{
+ r3 = r2 >> 2;
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3+1)];
+ heap32[(g0)] = r2;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+}
+ r1 = (r1 + 1)|0;
+ r2 = heap32[(r0+9)];
+ if(r2 >r1) //_LBB15_2
+{
+continue _3;
+}
+else{
+break _3;
+}
+}
+}
+ r1 = heap32[(r0+1)];
+ r2 = r1 >> 2;
+ r2 = heap32[(r2+2)];
+ r3 = (r2 + -1)|0;
+_9: do {
+if(!(r3 <0)) //_LBB15_16
+{
+ r3 = 1;
+ r2 = (r3 - r2)|0;
+_11: while(true){
+ r3 = r1 >> 2;
+ r3 = heap32[(r3+4)];
+ r4 = r2 << 2;
+ r3 = (r3 - r4)|0;
+ r3 = r3 >> 2;
+ r3 = heap32[(r3)];
+ r4 = heapU8[r3+232];
+ r4 = r4 & 2;
+if(!(r4 ==0)) //_LBB15_9
+{
+ if(r3 !=0) //_LBB15_10
+{
+ r4 = r3 >> 2;
+ r4 = heap32[(r4+118)];
+if(!(r4 ==0)) //_LBB15_9
+{
+ r1 = r4 >> 2;
+ r1 = heap32[(r1)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+1)];
+ heap32[(g0)] = r4;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+ r1 = heap32[(r0+1)];
+}
+}
+}
+ r4 = r1 >> 2;
+ r4 = heap32[(r4)];
+ r4 = r4 >> 2;
+ r4 = heap32[(r4+9)];
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r3;
+ __FUNCTION_TABLE__[(r4)>>2](i7);
+ if(r3 !=0) //_LBB15_15
+{
+ r1 = r3 >> 2;
+ r1 = heap32[(r1)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+2)];
+ heap32[(g0)] = r3;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+}
+ if(r2 ==0) //_LBB15_16
+{
+break _9;
+}
+else{
+ r2 = (r2 + 1)|0;
+ r1 = heap32[(r0+1)];
+continue _11;
+}
+}
+}
+} while(0);
+ r1 = heap32[(r0+4)];
+_23: do {
+if(!(r1 <1)) //_LBB15_21
+{
+ r1 = 0;
+_25: while(true){
+ r2 = heap32[(r0+6)];
+ r3 = r1 << 2;
+ r2 = (r2 + r3)|0;
+ r2 = r2 >> 2;
+ r2 = heap32[(r2)];
+if(!(r2 ==0)) //_LBB15_20
+{
+ r3 = r2 >> 2;
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3+1)];
+ heap32[(g0)] = r2;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+}
+ r1 = (r1 + 1)|0;
+ r2 = heap32[(r0+4)];
+ if(r2 >r1) //_LBB15_18
+{
+continue _25;
+}
+else{
+break _23;
+}
+}
+}
+} while(0);
+ r1 = heap32[(r0+1)];
+if(!(r1 ==0)) //_LBB15_23
+{
+ r2 = r1 >> 2;
+ r2 = heap32[(r2)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+1)];
+ heap32[(g0)] = r1;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+}
+ r1 = heap32[(r0+15)];
+if(!(r1 ==0)) //_LBB15_25
+{
+ r2 = r1 >> 2;
+ r2 = heap32[(r2)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+1)];
+ heap32[(g0)] = r1;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+}
+ r1 = heap32[(r0+13)];
+if(!(r1 ==0)) //_LBB15_27
+{
+ r2 = r1 >> 2;
+ r2 = heap32[(r2)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+1)];
+ heap32[(g0)] = r1;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+}
+ r1 = heap32[(r0+14)];
+if(!(r1 ==0)) //_LBB15_29
+{
+ r2 = r1 >> 2;
+ r2 = heap32[(r2)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+1)];
+ heap32[(g0)] = r1;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+}
+ r0 = heap32[(r0+16)];
+if(!(r0 ==0)) //_LBB15_31
+{
+ r1 = r0 >> 2;
+ r1 = heap32[(r1)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+1)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+}
+ return;
+}
+
+function _ZN7RagDollD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV7RagDoll;
+ r2 = 0;
+ r3 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r3)] = r1;
+ r1 = r2;
+_1: while(true){
+ r4 = heap32[(r3+1)];
+ r5 = r1 << 2;
+ r6 = r4 >> 2;
+ r5 = (r0 - r5)|0;
+ r6 = heap32[(r6)];
+ r6 = r6 >> 2;
+ r5 = r5 >> 2;
+ r6 = heap32[(r6+14)];
+ r7 = heap32[(r5+24)];
+ heap32[(g0)] = r4;
+ heap32[(g0+1)] = r7;
+ __FUNCTION_TABLE__[(r6)>>2](i7);
+ r4 = heap32[(r5+24)];
+if(!(r4 ==0)) //_LBB16_3
+{
+ r5 = r4 >> 2;
+ r5 = heap32[(r5)];
+ r5 = r5 >> 2;
+ r5 = heap32[(r5+1)];
+ heap32[(g0)] = r4;
+ __FUNCTION_TABLE__[(r5)>>2](i7);
+}
+ r4 = (r2 - r1)|0;
+ r4 = r4 << 2;
+ r4 = (r0 + r4)|0;
+ r1 = (r1 + -1)|0;
+ r4 = r4 >> 2;
+ heap32[(r4+24)] = 0;
+ if(r1 !=-10) //_LBB16_1
+{
+continue _1;
+}
+else{
+break _1;
+}
+}
+ r1 = 2;
+_7: while(true){
+ r2 = heap32[(r3+1)];
+ r4 = r2 >> 2;
+ r5 = r1 << 2;
+ r4 = heap32[(r4)];
+ r5 = (r0 + r5)|0;
+ r4 = r4 >> 2;
+ r5 = r5 >> 2;
+ r4 = heap32[(r4+21)];
+ r6 = heap32[(r5+11)];
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = r6;
+ __FUNCTION_TABLE__[(r4)>>2](i7);
+ r2 = heap32[(r5+11)];
+ r4 = r2 >> 2;
+ r4 = heap32[(r4+118)];
+ if(r4 !=0) //_LBB16_7
+{
+ r2 = r4 >> 2;
+ r2 = heap32[(r2)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+1)];
+ heap32[(g0)] = r4;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ r2 = heap32[(r5+11)];
+}
+if(!(r2 ==0)) //_LBB16_10
+{
+ r4 = r2 >> 2;
+ r4 = heap32[(r4)];
+ r4 = r4 >> 2;
+ r4 = heap32[(r4+2)];
+ heap32[(g0)] = r2;
+ __FUNCTION_TABLE__[(r4)>>2](i7);
+}
+ heap32[(r5+11)] = 0;
+ r2 = heap32[(r5)];
+if(!(r2 ==0)) //_LBB16_12
+{
+ r4 = r2 >> 2;
+ r4 = heap32[(r4)];
+ r4 = r4 >> 2;
+ r4 = heap32[(r4+1)];
+ heap32[(g0)] = r2;
+ __FUNCTION_TABLE__[(r4)>>2](i7);
+}
+ r1 = (r1 + 1)|0;
+ heap32[(r5)] = 0;
+ if(r1 !=13) //_LBB16_5
+{
+continue _7;
+}
+else{
+break _7;
+}
+}
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZN7RagDollD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV7RagDoll;
+ r2 = 0;
+ r3 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r3)] = r1;
+ r1 = r2;
+_1: while(true){
+ r4 = heap32[(r3+1)];
+ r5 = r1 << 2;
+ r6 = r4 >> 2;
+ r5 = (r0 - r5)|0;
+ r6 = heap32[(r6)];
+ r6 = r6 >> 2;
+ r5 = r5 >> 2;
+ r6 = heap32[(r6+14)];
+ r7 = heap32[(r5+24)];
+ heap32[(g0)] = r4;
+ heap32[(g0+1)] = r7;
+ __FUNCTION_TABLE__[(r6)>>2](i7);
+ r4 = heap32[(r5+24)];
+if(!(r4 ==0)) //_LBB17_3
+{
+ r5 = r4 >> 2;
+ r5 = heap32[(r5)];
+ r5 = r5 >> 2;
+ r5 = heap32[(r5+1)];
+ heap32[(g0)] = r4;
+ __FUNCTION_TABLE__[(r5)>>2](i7);
+}
+ r4 = (r2 - r1)|0;
+ r4 = r4 << 2;
+ r4 = (r0 + r4)|0;
+ r1 = (r1 + -1)|0;
+ r4 = r4 >> 2;
+ heap32[(r4+24)] = 0;
+ if(r1 !=-10) //_LBB17_1
+{
+continue _1;
+}
+else{
+break _1;
+}
+}
+ r1 = 2;
+_7: while(true){
+ r2 = heap32[(r3+1)];
+ r4 = r2 >> 2;
+ r5 = r1 << 2;
+ r4 = heap32[(r4)];
+ r5 = (r0 + r5)|0;
+ r4 = r4 >> 2;
+ r5 = r5 >> 2;
+ r4 = heap32[(r4+21)];
+ r6 = heap32[(r5+11)];
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = r6;
+ __FUNCTION_TABLE__[(r4)>>2](i7);
+ r2 = heap32[(r5+11)];
+ r4 = r2 >> 2;
+ r4 = heap32[(r4+118)];
+ if(r4 !=0) //_LBB17_7
+{
+ r2 = r4 >> 2;
+ r2 = heap32[(r2)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+1)];
+ heap32[(g0)] = r4;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ r2 = heap32[(r5+11)];
+}
+if(!(r2 ==0)) //_LBB17_10
+{
+ r4 = r2 >> 2;
+ r4 = heap32[(r4)];
+ r4 = r4 >> 2;
+ r4 = heap32[(r4+2)];
+ heap32[(g0)] = r2;
+ __FUNCTION_TABLE__[(r4)>>2](i7);
+}
+ heap32[(r5+11)] = 0;
+ r2 = heap32[(r5)];
+if(!(r2 ==0)) //_LBB17_12
+{
+ r4 = r2 >> 2;
+ r4 = heap32[(r4)];
+ r4 = r4 >> 2;
+ r4 = heap32[(r4+1)];
+ heap32[(g0)] = r2;
+ __FUNCTION_TABLE__[(r4)>>2](i7);
+}
+ r1 = (r1 + 1)|0;
+ heap32[(r5)] = 0;
+ if(r1 !=13) //_LBB17_5
+{
+continue _7;
+}
+else{
+break _7;
+}
+}
+ return;
+}
+
+function _ZN13BenchmarkDemoD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV13BenchmarkDemo;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ heap32[(g0)] = r0;
+ _ZN13BenchmarkDemo11exitPhysicsEv(i7);
+ r1 = heap32[(r2+11)];
+if(!(r1 ==0)) //_LBB18_4
+{
+ r3 = heapU8[r0+48];
+if(!(r3 ==0)) //_LBB18_3
+{
+ r3 = gNumAlignedFree;
+ r3 = r3 >> 2;
+ r4 = heap32[(r3)];
+ r4 = (r4 + 1)|0;
+ r1 = r1 >> 2;
+ heap32[(r3)] = r4;
+ r1 = heap32[(r1+-1)];
+ heap32[(g0)] = r1;
+ free(i7);
+}
+ heap32[(r2+11)] = 0;
+}
+ r1 = 1;
+ heap8[r0+48] = r1;
+ heap32[(r2+11)] = 0;
+ heap32[(r2+9)] = 0;
+ heap32[(r2+10)] = 0;
+ r3 = heap32[(r2+6)];
+if(!(r3 ==0)) //_LBB18_8
+{
+ r4 = heapU8[r0+28];
+if(!(r4 ==0)) //_LBB18_7
+{
+ r4 = gNumAlignedFree;
+ r4 = r4 >> 2;
+ r5 = heap32[(r4)];
+ r5 = (r5 + 1)|0;
+ r3 = r3 >> 2;
+ heap32[(r4)] = r5;
+ r3 = heap32[(r3+-1)];
+ heap32[(g0)] = r3;
+ free(i7);
+}
+ heap32[(r2+6)] = 0;
+}
+ heap8[r0+28] = r1;
+ heap32[(r2+6)] = 0;
+ heap32[(r2+4)] = 0;
+ heap32[(r2+5)] = 0;
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZN15DemoApplication20localCreateRigidBodyEfRK11btTransformP16btCollisionShape(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var f0;
+ var f1;
+var __label__ = 0;
+ i7 = sp + -168;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+3)];
+if(!(r0 ==0)) //_LBB19_3
+{
+ r1 = r0 >> 2;
+ r1 = heap32[(r1+1)];
+if(!(r1 !=35)) //_LBB19_3
+{
+ r0 = _2E_str5;
+ r1 = _2E_str6;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 1297;
+ _assert(i7);
+}
+}
+ f0 = heapFloat[(fp+1)];
+ r1 = sp + -152;
+ r2 = r1 >> 2;
+ heap32[(fp+-38)] = 0;
+ heap32[(r2+1)] = 0;
+ heap32[(r2+2)] = 0;
+ f1 = 0;
+ heap32[(r2+3)] = 0;
+if(!(f0 ==f1)) //_LBB19_5
+{
+ r3 = r0 >> 2;
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3+8)];
+ heap32[(g0)] = r0;
+ heapFloat[(g0+1)] = f0;
+ heap32[(g0+2)] = r1;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+}
+ r1 = heap32[(fp)];
+ r3 = heap32[(fp+2)];
+ r4 = gNumAlignedAllocs;
+ r4 = r4 >> 2;
+ r5 = heap32[(r4)];
+ r5 = (r5 + 1)|0;
+ heap32[(r4)] = r5;
+ heap32[(g0)] = 627;
+ malloc(i7);
+ r4 = r_g0;
+ if(r4 !=0) //_LBB19_7
+{
+ r5 = 0;
+ r6 = (r4 + 4)|0;
+ r5 = (r5 - r6)|0;
+ r5 = r5 & 15;
+ r5 = (r4 + r5)|0;
+ r6 = (r5 + 4)|0;
+ r5 = r5 >> 2;
+ heap32[(r5)] = r4;
+ r4 = r6;
+}
+ r5 = r4 >> 2;
+ heap32[(r5+41)] = 1065353216;
+ heap32[(r5+42)] = 1065353216;
+ heap32[(r5+43)] = 1065353216;
+ heap32[(r5+44)] = 0;
+ heap32[(r5+45)] = 0;
+ heap32[(r5+46)] = 1566444395;
+ heap32[(r5+47)] = 0;
+ heap32[(r5+48)] = 0;
+ heap32[(r5+49)] = 0;
+ heap32[(r5+50)] = 0;
+ heap32[(r5+51)] = 1;
+ heap32[(r5+52)] = -1;
+ heap32[(r5+53)] = -1;
+ heap32[(r5+54)] = 1;
+ heap32[(r5+55)] = 0;
+ heap32[(r5+56)] = 1056964608;
+ heap32[(r5+57)] = 0;
+ heap32[(r5+58)] = 1;
+ heap32[(r5+59)] = 0;
+ heap32[(r5+60)] = 1065353216;
+ heap32[(r5+61)] = 0;
+ heap32[(r5+62)] = 0;
+ heap32[(r5+63)] = 0;
+ heap32[(r5+1)] = 1065353216;
+ heap32[(r5+2)] = 0;
+ heap32[(r5+3)] = 0;
+ heap32[(r5+4)] = 0;
+ heap32[(r5+5)] = 0;
+ heap32[(r5+6)] = 1065353216;
+ heap32[(r5+7)] = 0;
+ heap32[(r5+8)] = 0;
+ heap32[(r5+9)] = 0;
+ heap32[(r5+10)] = 0;
+ heap32[(r5+11)] = 1065353216;
+ heap32[(r5+12)] = 0;
+ heap32[(r5+13)] = 0;
+ heap32[(r5+14)] = 0;
+ r6 = _ZTV11btRigidBody;
+ heap32[(r5+15)] = 0;
+ r6 = (r6 + 8)|0;
+ heap32[(r5+16)] = 0;
+ r7 = 1;
+ heap32[(r5)] = r6;
+ heap8[r4+492] = r7;
+ heap32[(r5+122)] = 0;
+ heap32[(r5+120)] = 0;
+ r6 = sp + -136;
+ heap32[(r5+121)] = 0;
+ r7 = r6 >> 2;
+ heapFloat[(fp+-34)] = f0;
+ heap32[(r7+1)] = 0;
+ heap32[(r7+18)] = r0;
+ heap32[(r7+19)] = heap32[(fp+-38)];
+ heap32[(r7+20)] = heap32[(r2+1)];
+ heap32[(r7+21)] = heap32[(r2+2)];
+ heap32[(r7+22)] = heap32[(r2+3)];
+ heap32[(r7+23)] = 0;
+ heap32[(r7+24)] = 0;
+ heap32[(r7+25)] = 1056964608;
+ heap32[(r7+26)] = 0;
+ heap32[(r7+27)] = 1061997773;
+ r0 = 0;
+ heap32[(r7+28)] = 1065353216;
+ heap8[sp+-20] = r0;
+ heap32[(r7+30)] = 1000593162;
+ heap32[(r7+31)] = 1008981770;
+ heap32[(r7+32)] = 1008981770;
+ heap32[(r7+33)] = 1008981770;
+ heap32[(r7+2)] = 1065353216;
+ heap32[(r7+3)] = 0;
+ heap32[(r7+4)] = 0;
+ heap32[(r7+5)] = 0;
+ heap32[(r7+6)] = 0;
+ heap32[(r7+7)] = 1065353216;
+ heap32[(r7+8)] = 0;
+ heap32[(r7+9)] = 0;
+ heap32[(r7+10)] = 0;
+ heap32[(r7+11)] = 0;
+ heap32[(r7+12)] = 1065353216;
+ heap32[(r7+13)] = 0;
+ heap32[(r7+14)] = 0;
+ heap32[(r7+15)] = 0;
+ heap32[(r7+16)] = 0;
+ heap32[(r7+17)] = 0;
+ heap32[(g0)] = r4;
+ heap32[(g0+1)] = r6;
+ _ZN11btRigidBody14setupRigidBodyERKNS_27btRigidBodyConstructionInfoE(i7);
+ r0 = r3 >> 2;
+ heap32[(r5+1)] = heap32[(r0)];
+ heap32[(r5+2)] = heap32[(r0+1)];
+ heap32[(r5+3)] = heap32[(r0+2)];
+ heap32[(r5+4)] = heap32[(r0+3)];
+ heap32[(r5+5)] = heap32[(r0+4)];
+ heap32[(r5+6)] = heap32[(r0+5)];
+ heap32[(r5+7)] = heap32[(r0+6)];
+ heap32[(r5+8)] = heap32[(r0+7)];
+ heap32[(r5+9)] = heap32[(r0+8)];
+ heap32[(r5+10)] = heap32[(r0+9)];
+ heap32[(r5+11)] = heap32[(r0+10)];
+ heap32[(r5+12)] = heap32[(r0+11)];
+ heap32[(r5+13)] = heap32[(r0+12)];
+ heap32[(r5+14)] = heap32[(r0+13)];
+ heap32[(r5+15)] = heap32[(r0+14)];
+ r1 = r1 >> 2;
+ heap32[(r5+16)] = heap32[(r0+15)];
+ heap32[(r5+46)] = heap32[(r1+2)];
+ r0 = heap32[(r1+1)];
+ r1 = r0 >> 2;
+ r1 = heap32[(r1)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+20)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r4;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+ r_g0 = r4;
+ return;
+}
+
+function _ZN13BenchmarkDemoD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV13BenchmarkDemo;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ heap32[(g0)] = r0;
+ _ZN13BenchmarkDemo11exitPhysicsEv(i7);
+ r1 = heap32[(r2+11)];
+if(!(r1 ==0)) //_LBB20_4
+{
+ r3 = heapU8[r0+48];
+if(!(r3 ==0)) //_LBB20_3
+{
+ r3 = gNumAlignedFree;
+ r3 = r3 >> 2;
+ r4 = heap32[(r3)];
+ r4 = (r4 + 1)|0;
+ r1 = r1 >> 2;
+ heap32[(r3)] = r4;
+ r1 = heap32[(r1+-1)];
+ heap32[(g0)] = r1;
+ free(i7);
+}
+ heap32[(r2+11)] = 0;
+}
+ r1 = 1;
+ heap8[r0+48] = r1;
+ heap32[(r2+11)] = 0;
+ heap32[(r2+9)] = 0;
+ heap32[(r2+10)] = 0;
+ r3 = heap32[(r2+6)];
+if(!(r3 ==0)) //_LBB20_8
+{
+ r4 = heapU8[r0+28];
+if(!(r4 ==0)) //_LBB20_7
+{
+ r4 = gNumAlignedFree;
+ r4 = r4 >> 2;
+ r5 = heap32[(r4)];
+ r5 = (r5 + 1)|0;
+ r3 = r3 >> 2;
+ heap32[(r4)] = r5;
+ r3 = heap32[(r3+-1)];
+ heap32[(g0)] = r3;
+ free(i7);
+}
+ heap32[(r2+6)] = 0;
+}
+ heap8[r0+28] = r1;
+ heap32[(r2+6)] = 0;
+ heap32[(r2+4)] = 0;
+ heap32[(r2+5)] = 0;
+ return;
+}
+
+function _ZN13BenchmarkDemo20clientMoveAndDisplayEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var f0;
+ var f1;
+ var f2;
+var __label__ = 0;
+ i7 = sp + -128;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r1 = heap32[(r0+1)];
+if(!(r1 ==0)) //_LBB21_2
+{
+ r2 = r1 >> 2;
+ r2 = heap32[(r2)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+12)];
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = 1015580809;
+ heap32[(g0+2)] = 1;
+ heap32[(g0+3)] = 1015580809;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ r1 = heap32[(r0+1)];
+ r2 = r1 >> 2;
+ r2 = heap32[(r2)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+5)];
+ heap32[(g0)] = r1;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+}
+ r1 = heap32[(r0+17)];
+if(!(r1 !=7)) //_LBB21_10
+{
+ r1 = _ZL10raycastBar;
+ r2 = r1 >> 2;
+ r0 = heap32[(r0+1)];
+ r3 = heap32[(r2+10006)];
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = 0;
+ r3 = 0;
+ gettimeofday(i7);
+_6: while(true){
+ r4 = sp + -96;
+ r5 = r4 >> 2;
+ heap32[(r5+1)] = 1065353216;
+ r6 = 1;
+ heap32[(r5+2)] = 0;
+ r7 = -1;
+ heap16[(sp+-84)>>1] = r6;
+ r6 = _ZTVN16btCollisionWorld24ClosestRayResultCallbackE;
+ heap16[(sp+-82)>>1] = r7;
+ r7 = (r1 + r3)|0;
+ r6 = (r6 + 8)|0;
+ heap32[(r5+4)] = 0;
+ r8 = r7 >> 2;
+ heap32[(fp+-24)] = r6;
+ heap32[(r5+5)] = heap32[(r8)];
+ heap32[(r5+6)] = heap32[(r8+1)];
+ heap32[(r5+7)] = heap32[(r8+2)];
+ heap32[(r5+8)] = heap32[(r8+3)];
+ heap32[(r5+9)] = heap32[(r8+2000)];
+ heap32[(r5+10)] = heap32[(r8+2001)];
+ heap32[(r5+11)] = heap32[(r8+2002)];
+ r9 = r0 >> 2;
+ heap32[(r5+12)] = heap32[(r8+2003)];
+ r9 = heap32[(r9)];
+ r9 = r9 >> 2;
+ r9 = heap32[(r9+7)];
+ r10 = (r7 + 8000)|0;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r7;
+ heap32[(g0+2)] = r10;
+ heap32[(g0+3)] = r4;
+ __FUNCTION_TABLE__[(r9)>>2](i7);
+ r4 = heap32[(r5+2)];
+ if(r4 ==0) //_LBB21_6
+{
+ r4 = r7 >> 2;
+ r5 = r7 >> 2;
+ r9 = r7 >> 2;
+ r10 = r7 >> 2;
+ heap32[(r4+6000)] = heap32[(r5+2000)];
+ r4 = r7 >> 2;
+ r5 = r7 >> 2;
+ heap32[(r9+6001)] = heap32[(r10+2001)];
+ r9 = r7 >> 2;
+ r10 = r7 >> 2;
+ heap32[(r4+6002)] = heap32[(r5+2002)];
+ r4 = r7 >> 2;
+ heap32[(r9+6003)] = heap32[(r10+2003)];
+ r5 = r7 >> 2;
+ heap32[(r4+8000)] = 1065353216;
+ r4 = r7 >> 2;
+ heap32[(r5+8001)] = 0;
+ heap32[(r4+8002)] = 0;
+ heap32[(r8+8003)] = 0;
+}
+else{
+ r4 = r7 >> 2;
+ r9 = r7 >> 2;
+ heap32[(r4+6000)] = heap32[(r5+17)];
+ r4 = r7 >> 2;
+ heap32[(r9+6001)] = heap32[(r5+18)];
+ r9 = r7 >> 2;
+ heap32[(r4+6002)] = heap32[(r5+19)];
+ heap32[(r9+6003)] = heap32[(r5+20)];
+ f0 = heapFloat[(r5+13)];
+ r4 = r7 >> 2;
+ heapFloat[(r4+8000)] = f0;
+ f1 = heapFloat[(r5+14)];
+ r9 = r7 >> 2;
+ heapFloat[(r9+8001)] = f1;
+ f2 = heapFloat[(r5+15)];
+ r7 = r7 >> 2;
+ f0 = f0*f0;
+ f1 = f1*f1;
+ heapFloat[(r7+8002)] = f2;
+ heap32[(r8+8003)] = heap32[(r5+16)];
+ f0 = f0+f1;
+ f1 = f2*f2;
+ f0 = f0+f1;
+ heapFloat[(g0)] = f0;
+ sqrtf(i7);
+ f1 = 1;
+ f0 = f1/f_g0;
+ f1 = heapFloat[(r4+8000)];
+ f1 = f1*f0;
+ heapFloat[(r4+8000)] = f1;
+ f1 = heapFloat[(r9+8001)];
+ f1 = f1*f0;
+ heapFloat[(r9+8001)] = f1;
+ f1 = heapFloat[(r7+8002)];
+ f0 = f1*f0;
+ heapFloat[(r7+8002)] = f0;
+}
+ r3 = (r3 + 16)|0;
+ heap32[(fp+-24)] = r6;
+if(!(r3 !=8000)) //_LBB21_4
+{
+break _6;
+}
+}
+ r0 = heap32[(r2+10001)];
+ r1 = sp + -8;
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = 0;
+ gettimeofday(i7);
+ r3 = heap32[(r2+10006)];
+ r3 = r3 >> 2;
+ r1 = r1 >> 2;
+ r4 = heap32[(fp+-2)];
+ r5 = heap32[(r3)];
+ r1 = heap32[(r1+1)];
+ r3 = heap32[(r3+1)];
+ r1 = (r1 - r3)|0;
+ r3 = (r4 - r5)|0;
+ r1 = (r1 / 1000)|0;
+ r3 = (r3 * 1000)|0;
+ r1 = (r1 + r3)|0;
+ r0 = (r1 + r0)|0;
+ heap32[(r2+10001)] = r0;
+ r1 = heap32[(r2+10000)];
+ r1 = (r1 + 1)|0;
+ heap32[(r2+10000)] = r1;
+if(!(r1 <51)) //_LBB21_10
+{
+ r3 = heap32[(r2+10004)];
+ r3 = r0 < r3 ? r0 : r3;
+ heap32[(r2+10004)] = r3;
+ r4 = heap32[(r2+10005)];
+ r4 = r0 > r4 ? r0 : r4;
+ heap32[(r2+10005)] = r4;
+ r5 = heap32[(r2+10002)];
+ r5 = (r0 + r5)|0;
+ heap32[(r2+10002)] = r5;
+ r6 = heap32[(r2+10003)];
+ r6 = (r6 + 1)|0;
+ f0 = r5; //fitos r5, f0
+ f1 = r6; //fitos r6, f1
+ f0 = f0/f1;
+ heap32[(r2+10003)] = r6;
+ r5 = _2E_str7;
+ r1 = (r1 * 500)|0;
+ f0 = f0; //fstod f0, f0
+ heap32[(g0)] = r5;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = r0;
+ heap32[(g0+3)] = r3;
+ heap32[(g0+4)] = r4;
+ llvm_writeDouble((i7+24),f0);
+ printf(i7);
+ heap32[(r2+10001)] = 0;
+ heap32[(r2+10000)] = 0;
+}
+}
+ return;
+}
+
+function _ZN13BenchmarkDemo10createWallERK9btVector3iS2_(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+var __label__ = 0;
+ i7 = sp + -96;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ r1 = gNumAlignedAllocs;
+ r0 = r0 >> 2;
+ r1 = r1 >> 2;
+ r2 = heap32[(r1)];
+ f0 = heapFloat[(r0+2)];
+ f1 = heapFloat[(r0+1)];
+ f2 = heapFloat[(r0)];
+ r2 = (r2 + 1)|0;
+ heap32[(r1)] = r2;
+ heap32[(g0)] = 71;
+ malloc(i7);
+ r1 = r_g0;
+ r2 = heap32[(fp)];
+ if(r1 !=0) //_LBB22_2
+{
+ r3 = 0;
+ r4 = (r1 + 4)|0;
+ r3 = (r3 - r4)|0;
+ r3 = r3 & 15;
+ r3 = (r1 + r3)|0;
+ r4 = (r3 + 4)|0;
+ r3 = r3 >> 2;
+ heap32[(r3)] = r1;
+ r1 = r4;
+}
+ r3 = r1 >> 2;
+ heap32[(r3+2)] = 0;
+ heap32[(r3+3)] = 1065353216;
+ heap32[(r3+4)] = 1065353216;
+ heap32[(r3+5)] = 1065353216;
+ r4 = _ZTV10btBoxShape;
+ heap32[(r3+6)] = 0;
+ r4 = (r4 + 8)|0;
+ heap32[(r3+11)] = 1025758986;
+ heap32[(r3)] = r4;
+ f3 = -0.039999999105930328;
+ f2 = f2+f3;
+ heap32[(r3+1)] = 0;
+ f1 = f1+f3;
+ heapFloat[(r3+7)] = f2;
+ f0 = f0+f3;
+ heapFloat[(r3+8)] = f1;
+ heapFloat[(r3+9)] = f0;
+ r4 = sp + -16;
+ heap32[(r3+10)] = 0;
+ r3 = r4 >> 2;
+ heap32[(fp+-4)] = 0;
+ heap32[(r3+1)] = 0;
+ heap32[(r3+2)] = 0;
+ heap32[(r3+3)] = 0;
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = 1065353216;
+ heap32[(g0+2)] = r4;
+ _ZNK10btBoxShape21calculateLocalInertiaEfR9btVector3(i7);
+ f4 = heapFloat[(r0+1)];
+ f0 = heapFloat[(r0+2)];
+ r0 = sp + -80;
+ r3 = r0 >> 2;
+ heap32[(fp+-20)] = 1065353216;
+ heap32[(r3+1)] = 0;
+ heap32[(r3+2)] = 0;
+ heap32[(r3+3)] = 0;
+ heap32[(r3+4)] = 0;
+ heap32[(r3+5)] = 1065353216;
+ heap32[(r3+6)] = 0;
+ heap32[(r3+7)] = 0;
+ heap32[(r3+8)] = 0;
+ heap32[(r3+9)] = 0;
+ heap32[(r3+10)] = 1065353216;
+ heap32[(r3+11)] = 0;
+ f1 = f0+f0;
+ f2 = -12;
+ heap32[(r3+12)] = 0;
+ heap32[(r3+13)] = 0;
+ f2 = f1*f2;
+ f3 = 0.5;
+ f3 = f2*f3;
+ f2 = f4+f4;
+ r5 = 12;
+ heap32[(r3+14)] = 0;
+ heap32[(r3+15)] = 0;
+_4: while(true){
+if(!(r5 <1)) //_LBB22_4
+{
+ r4 = 0;
+_8: while(true){
+ r6 = r2 >> 2;
+ f5 = r4; //fitos r4, f5
+ f6 = 0;
+ f7 = heapFloat[(r6)];
+ f8 = heapFloat[(r6+2)];
+ f9 = heapFloat[(r6+1)];
+ f5 = f5*f1;
+ f6 = f7+f6;
+ f5 = f5+f3;
+ f7 = f9+f4;
+ heapFloat[(r3+12)] = f6;
+ f5 = f8+f5;
+ heapFloat[(r3+13)] = f7;
+ r6 = _ZL14benchmarkDemo4;
+ heapFloat[(r3+14)] = f5;
+ r7 = r6 >> 2;
+ heap32[(r3+15)] = 0;
+ r7 = heap32[(r7)];
+ r7 = r7 >> 2;
+ r7 = heap32[(r7+2)];
+ heap32[(g0)] = r6;
+ heap32[(g0+1)] = 1065353216;
+ heap32[(g0+2)] = r0;
+ heap32[(g0+3)] = r1;
+ r4 = (r4 + 1)|0;
+ __FUNCTION_TABLE__[(r7)>>2](i7);
+ if(r5 !=r4) //_LBB22_3
+{
+continue _8;
+}
+else{
+break _8;
+}
+}
+}
+ r5 = (r5 + -1)|0;
+ f4 = f4+f2;
+ f3 = f3+f0;
+ if(r5 ==0) //_LBB22_8
+{
+break _4;
+}
+else{
+continue _4;
+}
+}
+ return;
+}
+
+function _ZN13BenchmarkDemo19createLargeMeshBodyEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+ var r13;
+ var r14;
+var __label__ = 0;
+ i7 = sp + -80;var g0 = i7>>2; // save stack
+ r0 = sp + -64;
+ r1 = r0 >> 2;
+ heap32[(fp+-16)] = 1065353216;
+ heap32[(r1+1)] = 0;
+ heap32[(r1+2)] = 0;
+ heap32[(r1+3)] = 0;
+ heap32[(r1+4)] = 0;
+ heap32[(r1+5)] = 1065353216;
+ heap32[(r1+6)] = 0;
+ heap32[(r1+7)] = 0;
+ heap32[(r1+8)] = 0;
+ heap32[(r1+9)] = 0;
+ heap32[(r1+10)] = 1065353216;
+ heap32[(r1+11)] = 0;
+ heap32[(r1+12)] = 0;
+ heap32[(r1+13)] = 0;
+ r2 = 0;
+ heap32[(r1+14)] = 0;
+ heap32[(r1+15)] = 0;
+_1: while(true){
+ r3 = gNumAlignedAllocs;
+ r3 = r3 >> 2;
+ r4 = heap32[(r3)];
+ r5 = (r4 + 1)|0;
+ heap32[(r3)] = r5;
+ heap32[(g0)] = 103;
+ malloc(i7);
+ r5 = r_g0;
+ if(r5 !=0) //_LBB23_3
+{
+ r6 = 0;
+ r7 = (r5 + 4)|0;
+ r6 = (r6 - r7)|0;
+ r6 = r6 & 15;
+ r6 = (r5 + r6)|0;
+ r7 = (r6 + 4)|0;
+ r6 = r6 >> 2;
+ heap32[(r6)] = r5;
+ r5 = r7;
+}
+ r6 = r5 >> 2;
+ heap32[(r6+1)] = 1065353216;
+ heap32[(r6+2)] = 1065353216;
+ r7 = _ZTV26btTriangleIndexVertexArray;
+ heap32[(r6+3)] = 1065353216;
+ r7 = (r7 + 8)|0;
+ heap32[(r6+4)] = 0;
+ r8 = 1;
+ heap32[(r6)] = r7;
+ heap8[r5+36] = r8;
+ heap32[(r6+8)] = 0;
+ heap32[(r6+6)] = 0;
+ r7 = LandscapeVtx;
+ r9 = r2 << 2;
+ r10 = LandscapeVtxCount;
+ r11 = LandscapeIdx;
+ r12 = LandscapeIdxCount;
+ r7 = (r7 + r9)|0;
+ r10 = (r10 + r9)|0;
+ r11 = (r11 + r9)|0;
+ r9 = (r12 + r9)|0;
+ heap32[(r6+7)] = 0;
+ r7 = r7 >> 2;
+ heap32[(r6+12)] = 0;
+ r10 = r10 >> 2;
+ r11 = r11 >> 2;
+ r9 = r9 >> 2;
+ r7 = heap32[(r7)];
+ r10 = heap32[(r10)];
+ r11 = heap32[(r11)];
+ r9 = heap32[(r9)];
+ r12 = (r4 + 2)|0;
+ heap32[(r3)] = r12;
+ heap32[(g0)] = 51;
+ malloc(i7);
+ r12 = r_g0;
+ r9 = (r9 / 3)|0;
+ if(r12 !=0) //_LBB23_6
+{
+ r13 = 0;
+ r14 = (r12 + 4)|0;
+ r13 = (r13 - r14)|0;
+ r13 = r13 & 15;
+ r13 = (r12 + r13)|0;
+ r14 = (r13 + 4)|0;
+ r13 = r13 >> 2;
+ heap32[(r13)] = r12;
+ r12 = r14;
+}
+ heap8[r5+36] = r8;
+ heap32[(r6+8)] = r12;
+ heap32[(r6+7)] = 1;
+ r13 = heap32[(r6+6)];
+ r13 = r13 << 5;
+ r12 = (r12 + r13)|0;
+ r12 = r12 >> 2;
+ heap32[(r12)] = r9;
+ heap32[(r12+1)] = r11;
+ heap32[(r12+2)] = 6;
+ heap32[(r12+3)] = r10;
+ heap32[(r12+4)] = r7;
+ heap32[(r12+5)] = 12;
+ heap32[(r12+6)] = 3;
+ heap32[(r12+7)] = 0;
+ r7 = heap32[(r6+6)];
+ r9 = (r7 + 1)|0;
+ heap32[(r6+6)] = r9;
+ r7 = r7 << 5;
+ r9 = heap32[(r6+8)];
+ r7 = (r9 + r7)|0;
+ r7 = r7 >> 2;
+ r4 = (r4 + 3)|0;
+ heap32[(r7+6)] = 3;
+ heap32[(r3)] = r4;
+ heap32[(g0)] = 95;
+ malloc(i7);
+ r3 = r_g0;
+ if(r3 !=0) //_LBB23_9
+{
+ r4 = 0;
+ r7 = (r3 + 4)|0;
+ r4 = (r4 - r7)|0;
+ r4 = r4 & 15;
+ r4 = (r3 + r4)|0;
+ r7 = (r4 + 4)|0;
+ r4 = r4 >> 2;
+ heap32[(r4)] = r3;
+ r3 = r7;
+}
+ r4 = r3 >> 2;
+ r7 = _ZTV19btTriangleMeshShape;
+ heap32[(r4+2)] = 0;
+ r7 = (r7 + 8)|0;
+ heap32[(r4+3)] = 0;
+ heap32[(r4)] = r7;
+ heap32[(r4+12)] = r5;
+ heap32[(r4+1)] = 21;
+ r7 = heap32[(r6)];
+ r7 = r7 >> 2;
+ r7 = heap32[(r7+10)];
+ heap32[(g0)] = r5;
+ __FUNCTION_TABLE__[(r7)>>2](i7);
+ r7 = r_g0;
+ if(r7 ==0) //_LBB23_12
+{
+ heap32[(g0)] = r3;
+ _ZN19btTriangleMeshShape15recalcLocalAabbEv(i7);
+}
+else{
+ r6 = heap32[(r6)];
+ r6 = r6 >> 2;
+ r6 = heap32[(r6+12)];
+ r7 = (r3 + 16)|0;
+ r9 = (r3 + 32)|0;
+ heap32[(g0)] = r5;
+ heap32[(g0+1)] = r7;
+ heap32[(g0+2)] = r9;
+ __FUNCTION_TABLE__[(r6)>>2](i7);
+}
+ r5 = _ZTV22btBvhTriangleMeshShape;
+ r5 = (r5 + 8)|0;
+ heap32[(r4)] = r5;
+ heap32[(r4+13)] = 0;
+ heap32[(r4+14)] = 0;
+ r5 = 0;
+ heap8[r3+60] = r8;
+ heap8[r3+61] = r5;
+ heap32[(r4+1)] = 21;
+ heap32[(g0)] = r3;
+ _ZN22btBvhTriangleMeshShape17buildOptimizedBvhEv(i7);
+ heap32[(r1+12)] = 0;
+ heap32[(r1+13)] = -1043857408;
+ r4 = _ZL14benchmarkDemo4;
+ heap32[(r1+14)] = 0;
+ r5 = r4 >> 2;
+ heap32[(r1+15)] = 0;
+ r5 = heap32[(r5)];
+ r5 = r5 >> 2;
+ r5 = heap32[(r5+2)];
+ heap32[(g0)] = r4;
+ heap32[(g0+1)] = 0;
+ heap32[(g0+2)] = r0;
+ heap32[(g0+3)] = r3;
+ __FUNCTION_TABLE__[(r5)>>2](i7);
+ r2 = (r2 + 1)|0;
+ r3 = r_g0 >> 2;
+ heap32[(r3+56)] = 1063675494;
+ if(r2 !=8) //_LBB23_1
+{
+continue _1;
+}
+else{
+break _1;
+}
+}
+ return;
+}
+
+function _ZN13BenchmarkDemo11createTest6Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+var __label__ = 0;
+ i7 = sp + -112;var g0 = i7>>2; // save stack
+ r0 = gNumAlignedAllocs;
+ r0 = r0 >> 2;
+ r1 = heap32[(r0)];
+ r1 = (r1 + 1)|0;
+ heap32[(r0)] = r1;
+ heap32[(g0)] = 127;
+ malloc(i7);
+ r0 = r_g0;
+ if(r0 !=0) //_LBB24_2
+{
+ r1 = 0;
+ r2 = (r0 + 4)|0;
+ r1 = (r1 - r2)|0;
+ r1 = r1 & 15;
+ r1 = (r0 + r1)|0;
+ r2 = (r1 + 4)|0;
+ r1 = r1 >> 2;
+ heap32[(r1)] = r0;
+ r0 = r2;
+}
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = 0;
+ heap32[(g0+2)] = 0;
+ r1 = 0;
+ _ZN17btConvexHullShapeC1EPKfii(i7);
+_4: while(true){
+ r2 = (r1 * -3)|0;
+ r3 = _ZL7TaruVtx;
+ r2 = r2 << 2;
+ r2 = (r3 + r2)|0;
+ r3 = sp + -96;
+ r2 = r2 >> 2;
+ r4 = r3 >> 2;
+ heap32[(fp+-24)] = heap32[(r2)];
+ heap32[(r4+1)] = heap32[(r2+1)];
+ heap32[(r4+2)] = heap32[(r2+2)];
+ heap32[(r4+3)] = 0;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r3;
+ r1 = (r1 + -1)|0;
+ _ZN17btConvexHullShape8addPointERK9btVector3(i7);
+ if(r1 ==-43) //_LBB24_10
+{
+break _4;
+}
+else{
+continue _4;
+}
+}
+ r1 = sp + -64;
+ r2 = r1 >> 2;
+ heap32[(fp+-16)] = 1065353216;
+ heap32[(r2+1)] = 0;
+ heap32[(r2+2)] = 0;
+ heap32[(r2+3)] = 0;
+ heap32[(r2+4)] = 0;
+ heap32[(r2+5)] = 1065353216;
+ heap32[(r2+6)] = 0;
+ heap32[(r2+7)] = 0;
+ heap32[(r2+8)] = 0;
+ heap32[(r2+9)] = 0;
+ heap32[(r2+10)] = 1065353216;
+ heap32[(r2+11)] = 0;
+ heap32[(r2+12)] = 0;
+ heap32[(r2+13)] = 0;
+ heap32[(r2+14)] = 0;
+ r3 = sp + -80;
+ heap32[(r2+15)] = 0;
+ r4 = r3 >> 2;
+ heap32[(fp+-20)] = 0;
+ heap32[(r4+1)] = 0;
+ heap32[(r4+2)] = 0;
+ r5 = r0 >> 2;
+ heap32[(r4+3)] = 0;
+ r4 = heap32[(r5)];
+ r4 = r4 >> 2;
+ r4 = heap32[(r4+8)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = 1065353216;
+ heap32[(g0+2)] = r3;
+ r3 = 10;
+ f0 = 20;
+ f1 = 2;
+ f2 = -25;
+ __FUNCTION_TABLE__[(r4)>>2](i7);
+ r7 = _ZL14benchmarkDemo4;
+_7: while(true){
+ f3 = 3;
+ f4 = 25;
+ f5 = f1+f3;
+ f4 = f0+f4;
+ r4 = 0;
+ r5 = r4;
+_9: while(true){
+ f6 = r5; //fitos r5, f6
+ f6 = f6*f5;
+ f6 = f6+f2;
+ f7 = 5;
+ f6 = f6*f7;
+ f8 = 0;
+ f6 = f6+f8;
+ r6 = r4;
+_11: while(true){
+ f9 = r6; //fitos r6, f9
+ f9 = f9*f5;
+ f9 = f9+f2;
+ f9 = f9*f7;
+ f9 = f9+f8;
+ heapFloat[(r2+12)] = f9;
+ heapFloat[(r2+13)] = f4;
+ heapFloat[(r2+14)] = f6;
+ r8 = r7 >> 2;
+ heap32[(r2+15)] = 0;
+ r8 = heap32[(r8)];
+ r8 = r8 >> 2;
+ r8 = heap32[(r8+2)];
+ heap32[(g0)] = r7;
+ heap32[(g0+1)] = 1065353216;
+ heap32[(g0+2)] = r1;
+ heap32[(g0+3)] = r0;
+ r6 = (r6 + 1)|0;
+ __FUNCTION_TABLE__[(r8)>>2](i7);
+ if(r6 !=10) //_LBB24_7
+{
+continue _11;
+}
+else{
+break _11;
+}
+}
+ r5 = (r5 + 1)|0;
+ if(r5 !=10) //_LBB24_6
+{
+continue _9;
+}
+else{
+break _9;
+}
+}
+ f4 = 1.1000000238418579;
+ f5 = -0.05000000074505806;
+ f4 = f1*f4;
+ f1 = f1*f5;
+ f5 = 9;
+ f3 = f4+f3;
+ f1 = f1*f5;
+ r3 = (r3 + -1)|0;
+ f0 = f0+f3;
+ f2 = f1+f2;
+ f1 = f4;
+ if(r3 ==0) //_LBB24_11
+{
+break _7;
+}
+else{
+continue _7;
+}
+}
+ _ZN13BenchmarkDemo19createLargeMeshBodyEv(i7);
+ return;
+}
+
+function _ZN7RagDoll20localCreateRigidBodyEfRK11btTransformP16btCollisionShape(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+var __label__ = 0;
+ i7 = sp + -168;var g0 = i7>>2; // save stack
+ r0 = sp + -16;
+ r1 = r0 >> 2;
+ heap32[(fp+-4)] = 0;
+ heap32[(r1+1)] = 0;
+ r2 = heap32[(fp+2)];
+ heap32[(r1+2)] = 0;
+ r3 = r2 >> 2;
+ heap32[(r1+3)] = 0;
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3+8)];
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = 1065353216;
+ heap32[(g0+2)] = r0;
+ r0 = _ZGVZN11btTransform11getIdentityEvE17identityTransform;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ r3 = heapU8[r0];
+if(!(r3 !=0)) //_LBB25_4
+{
+ r3 = _ZGVZN11btMatrix3x311getIdentityEvE14identityMatrix;
+ r4 = heapU8[r3];
+if(!(r4 !=0)) //_LBB25_3
+{
+ r4 = _ZZN11btMatrix3x311getIdentityEvE14identityMatrix_2E_0_2E_0_2E_0_2E_0;
+ r5 = _ZZN11btMatrix3x311getIdentityEvE14identityMatrix_2E_0_2E_1_2E_0_2E_1;
+ r4 = r4 >> 2;
+ r6 = _ZZN11btMatrix3x311getIdentityEvE14identityMatrix_2E_0_2E_2_2E_0_2E_2;
+ r5 = r5 >> 2;
+ heap32[(r4)] = 1065353216;
+ r4 = r6 >> 2;
+ heap32[(r5)] = 1065353216;
+ r5 = 1;
+ heap32[(r4)] = 1065353216;
+ heap8[r3] = r5;
+}
+ r3 = _ZZN11btTransform11getIdentityEvE17identityTransform;
+ r4 = _ZZN11btMatrix3x311getIdentityEvE14identityMatrix_2E_0_2E_0_2E_0_2E_0;
+ r3 = r3 >> 2;
+ r4 = r4 >> 2;
+ heap32[(r3)] = heap32[(r4)];
+ heap32[(r3+1)] = 0;
+ heap32[(r3+2)] = 0;
+ r4 = _ZZN11btMatrix3x311getIdentityEvE14identityMatrix_2E_0_2E_1_2E_0_2E_1;
+ heap32[(r3+3)] = 0;
+ r4 = r4 >> 2;
+ heap32[(r3+4)] = 0;
+ heap32[(r3+5)] = heap32[(r4)];
+ heap32[(r3+6)] = 0;
+ heap32[(r3+7)] = 0;
+ r4 = _ZZN11btMatrix3x311getIdentityEvE14identityMatrix_2E_0_2E_2_2E_0_2E_2;
+ heap32[(r3+8)] = 0;
+ r4 = r4 >> 2;
+ heap32[(r3+9)] = 0;
+ heap32[(r3+10)] = heap32[(r4)];
+ heap32[(r3+11)] = 0;
+ heap32[(r3+12)] = 0;
+ heap32[(r3+13)] = 0;
+ heap32[(r3+14)] = 0;
+ r4 = 1;
+ heap32[(r3+15)] = 0;
+ heap8[r0] = r4;
+}
+ r0 = heap32[(fp)];
+ r3 = heap32[(fp+1)];
+ heap32[(g0)] = 200;
+ r4 = _ZTV20btDefaultMotionState;
+ _Znwj(i7);
+ r6 = r_g0 >> 2;
+ r4 = (r4 + 8)|0;
+ r3 = r3 >> 2;
+ heap32[(r6)] = r4;
+ heap32[(r6+1)] = heap32[(r3)];
+ heap32[(r6+2)] = heap32[(r3+1)];
+ heap32[(r6+3)] = heap32[(r3+2)];
+ heap32[(r6+4)] = heap32[(r3+3)];
+ heap32[(r6+5)] = heap32[(r3+4)];
+ heap32[(r6+6)] = heap32[(r3+5)];
+ heap32[(r6+7)] = heap32[(r3+6)];
+ heap32[(r6+8)] = heap32[(r3+7)];
+ heap32[(r6+9)] = heap32[(r3+8)];
+ heap32[(r6+10)] = heap32[(r3+9)];
+ heap32[(r6+11)] = heap32[(r3+10)];
+ heap32[(r6+12)] = heap32[(r3+11)];
+ heap32[(r6+13)] = heap32[(r3+12)];
+ heap32[(r6+14)] = heap32[(r3+13)];
+ r4 = _ZZN11btTransform11getIdentityEvE17identityTransform;
+ heap32[(r6+15)] = heap32[(r3+14)];
+ r4 = r4 >> 2;
+ heap32[(r6+16)] = heap32[(r3+15)];
+ heap32[(r6+17)] = heap32[(r4)];
+ heap32[(r6+18)] = heap32[(r4+1)];
+ heap32[(r6+19)] = heap32[(r4+2)];
+ heap32[(r6+20)] = heap32[(r4+3)];
+ heap32[(r6+21)] = heap32[(r4+4)];
+ heap32[(r6+22)] = heap32[(r4+5)];
+ heap32[(r6+23)] = heap32[(r4+6)];
+ heap32[(r6+24)] = heap32[(r4+7)];
+ heap32[(r6+25)] = heap32[(r4+8)];
+ heap32[(r6+26)] = heap32[(r4+9)];
+ heap32[(r6+27)] = heap32[(r4+10)];
+ heap32[(r6+28)] = heap32[(r4+11)];
+ heap32[(r6+29)] = heap32[(r4+12)];
+ heap32[(r6+30)] = heap32[(r4+13)];
+ heap32[(r6+31)] = heap32[(r4+14)];
+ heap32[(r6+32)] = heap32[(r4+15)];
+ heap32[(r6+33)] = heap32[(r3)];
+ heap32[(r6+34)] = heap32[(r3+1)];
+ heap32[(r6+35)] = heap32[(r3+2)];
+ heap32[(r6+36)] = heap32[(r3+3)];
+ heap32[(r6+37)] = heap32[(r3+4)];
+ heap32[(r6+38)] = heap32[(r3+5)];
+ heap32[(r6+39)] = heap32[(r3+6)];
+ heap32[(r6+40)] = heap32[(r3+7)];
+ heap32[(r6+41)] = heap32[(r3+8)];
+ heap32[(r6+42)] = heap32[(r3+9)];
+ heap32[(r6+43)] = heap32[(r3+10)];
+ heap32[(r6+44)] = heap32[(r3+11)];
+ heap32[(r6+45)] = heap32[(r3+12)];
+ heap32[(r6+46)] = heap32[(r3+13)];
+ heap32[(r6+47)] = heap32[(r3+14)];
+ heap32[(r6+48)] = heap32[(r3+15)];
+ r3 = sp + -152;
+ heap32[(r6+49)] = 0;
+ r4 = r3 >> 2;
+ heap32[(fp+-38)] = 1065353216;
+ heap32[(r4+1)] = r_g0;
+ heap32[(r4+18)] = r2;
+ heap32[(r4+19)] = heap32[(fp+-4)];
+ heap32[(r4+20)] = heap32[(r1+1)];
+ heap32[(r4+21)] = heap32[(r1+2)];
+ heap32[(r4+22)] = heap32[(r1+3)];
+ heap32[(r4+23)] = 0;
+ heap32[(r4+24)] = 0;
+ heap32[(r4+25)] = 1056964608;
+ heap32[(r4+26)] = 0;
+ heap32[(r4+27)] = 1061997773;
+ r1 = 0;
+ heap32[(r4+28)] = 1065353216;
+ heap8[sp+-36] = r1;
+ heap32[(r4+30)] = 1000593162;
+ heap32[(r4+31)] = 1008981770;
+ heap32[(r4+32)] = 1008981770;
+ heap32[(r4+33)] = 1008981770;
+ heap32[(r4+2)] = 1065353216;
+ heap32[(r4+3)] = 0;
+ heap32[(r4+4)] = 0;
+ heap32[(r4+5)] = 0;
+ heap32[(r4+6)] = 0;
+ heap32[(r4+7)] = 1065353216;
+ heap32[(r4+8)] = 0;
+ heap32[(r4+9)] = 0;
+ heap32[(r4+10)] = 0;
+ heap32[(r4+11)] = 0;
+ heap32[(r4+12)] = 1065353216;
+ heap32[(r4+13)] = 0;
+ heap32[(r4+14)] = 0;
+ heap32[(r4+15)] = 0;
+ r2 = gNumAlignedAllocs;
+ heap32[(r4+16)] = 0;
+ r2 = r2 >> 2;
+ heap32[(r4+17)] = 0;
+ r4 = heap32[(r2)];
+ r4 = (r4 + 1)|0;
+ heap32[(r2)] = r4;
+ heap32[(g0)] = 627;
+ malloc(i7);
+ r2 = r_g0;
+ if(r2 !=0) //_LBB25_6
+{
+ r4 = (r2 + 4)|0;
+ r1 = (r1 - r4)|0;
+ r1 = r1 & 15;
+ r1 = (r2 + r1)|0;
+ r4 = (r1 + 4)|0;
+ r1 = r1 >> 2;
+ heap32[(r1)] = r2;
+ r2 = r4;
+}
+ r1 = r2 >> 2;
+ heap32[(r1+41)] = 1065353216;
+ heap32[(r1+42)] = 1065353216;
+ heap32[(r1+43)] = 1065353216;
+ heap32[(r1+44)] = 0;
+ heap32[(r1+45)] = 0;
+ heap32[(r1+46)] = 1566444395;
+ heap32[(r1+47)] = 0;
+ heap32[(r1+48)] = 0;
+ heap32[(r1+49)] = 0;
+ heap32[(r1+50)] = 0;
+ heap32[(r1+51)] = 1;
+ heap32[(r1+52)] = -1;
+ heap32[(r1+53)] = -1;
+ heap32[(r1+54)] = 1;
+ heap32[(r1+55)] = 0;
+ heap32[(r1+56)] = 1056964608;
+ heap32[(r1+57)] = 0;
+ heap32[(r1+58)] = 1;
+ heap32[(r1+59)] = 0;
+ heap32[(r1+60)] = 1065353216;
+ heap32[(r1+61)] = 0;
+ heap32[(r1+62)] = 0;
+ heap32[(r1+63)] = 0;
+ heap32[(r1+1)] = 1065353216;
+ heap32[(r1+2)] = 0;
+ heap32[(r1+3)] = 0;
+ heap32[(r1+4)] = 0;
+ heap32[(r1+5)] = 0;
+ heap32[(r1+6)] = 1065353216;
+ heap32[(r1+7)] = 0;
+ heap32[(r1+8)] = 0;
+ heap32[(r1+9)] = 0;
+ heap32[(r1+10)] = 0;
+ heap32[(r1+11)] = 1065353216;
+ heap32[(r1+12)] = 0;
+ heap32[(r1+13)] = 0;
+ heap32[(r1+14)] = 0;
+ r4 = _ZTV11btRigidBody;
+ heap32[(r1+15)] = 0;
+ r4 = (r4 + 8)|0;
+ heap32[(r1+16)] = 0;
+ r5 = 1;
+ heap32[(r1)] = r4;
+ heap8[r2+492] = r5;
+ heap32[(r1+122)] = 0;
+ heap32[(r1+120)] = 0;
+ heap32[(r1+121)] = 0;
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = r3;
+ _ZN11btRigidBody14setupRigidBodyERKNS_27btRigidBodyConstructionInfoE(i7);
+ r0 = r0 >> 2;
+ r0 = heap32[(r0+1)];
+ r1 = r0 >> 2;
+ r1 = heap32[(r1)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+20)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r2;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+ r_g0 = r2;
+ return;
+}
+
+function _ZN13BenchmarkDemo11initPhysicsEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+ var r13;
+ var r14;
+ var r15;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+ var f10;
+ var f11;
+ var f12;
+ var f13;
+ var f14;
+ var f15;
+ var f16;
+ var f17;
+ var f18;
+ var f19;
+ var f20;
+ var f21;
+var __label__ = 0;
+ i7 = sp + -41432;var g0 = i7>>2; // save stack
+ heap32[(g0)] = 88;
+ _Znwj(i7);
+ r0 = r_g0;
+ r1 = _ZTV31btDefaultCollisionConfiguration;
+ r2 = gNumAlignedAllocs;
+ r3 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ r2 = r2 >> 2;
+ heap32[(r3)] = r1;
+ r1 = heap32[(r2)];
+ r3 = (r1 + 1)|0;
+ heap32[(r2)] = r3;
+ heap32[(g0)] = 379;
+ malloc(i7);
+ r3 = r_g0;
+ if(r3 !=0) //_LBB26_2
+{
+ r4 = 0;
+ r5 = (r3 + 4)|0;
+ r4 = (r4 - r5)|0;
+ r4 = r4 & 15;
+ r4 = (r3 + r4)|0;
+ r5 = (r4 + 4)|0;
+ r4 = r4 >> 2;
+ heap32[(r4)] = r3;
+ r3 = r5;
+}
+ r4 = r3 >> 2;
+ heap32[(r4+77)] = 953267991;
+ r4 = heapU8[r3+332];
+ r4 = r4 & 240;
+ r5 = r0 >> 2;
+ heap8[r3+332] = r4;
+ r4 = (r1 + 2)|0;
+ heap32[(r5+8)] = r3;
+ heap32[(r2)] = r4;
+ heap32[(g0)] = 23;
+ malloc(i7);
+ r3 = r_g0;
+ if(r3 !=0) //_LBB26_5
+{
+ r4 = 0;
+ r6 = (r3 + 4)|0;
+ r4 = (r4 - r6)|0;
+ r4 = r4 & 15;
+ r4 = (r3 + r4)|0;
+ r6 = (r4 + 4)|0;
+ r4 = r4 >> 2;
+ heap32[(r4)] = r3;
+ r3 = r6;
+}
+ r4 = _ZTV30btGjkEpaPenetrationDepthSolver;
+ r6 = r3 >> 2;
+ r4 = (r4 + 8)|0;
+ heap32[(r6)] = r4;
+ r4 = (r1 + 3)|0;
+ heap32[(r5+9)] = r3;
+ heap32[(r2)] = r4;
+ heap32[(g0)] = 43;
+ malloc(i7);
+ r4 = r_g0;
+ if(r4 !=0) //_LBB26_8
+{
+ r3 = 0;
+ r6 = (r4 + 4)|0;
+ r3 = (r3 - r6)|0;
+ r3 = r3 & 15;
+ r3 = (r4 + r3)|0;
+ r6 = r3 >> 2;
+ heap32[(r6)] = r4;
+ r4 = (r3 + 4)|0;
+ r3 = heap32[(r5+9)];
+}
+ r6 = _ZTVN23btConvexConvexAlgorithm10CreateFuncE;
+ r7 = heap32[(r5+8)];
+ r8 = 0;
+ r9 = r4 >> 2;
+ r6 = (r6 + 8)|0;
+ heap8[r4+4] = r8;
+ heap32[(r9)] = r6;
+ heap32[(r9+4)] = 0;
+ heap32[(r9+5)] = 3;
+ heap32[(r9+3)] = r7;
+ heap32[(r9+2)] = r3;
+ r3 = (r1 + 4)|0;
+ heap32[(r5+10)] = r4;
+ heap32[(r2)] = r3;
+ heap32[(g0)] = 27;
+ malloc(i7);
+ r3 = r_g0;
+ if(r3 !=0) //_LBB26_11
+{
+ r4 = (r3 + 4)|0;
+ r4 = (r8 - r4)|0;
+ r4 = r4 & 15;
+ r4 = (r3 + r4)|0;
+ r6 = (r4 + 4)|0;
+ r4 = r4 >> 2;
+ heap32[(r4)] = r3;
+ r3 = r6;
+}
+ r4 = _ZTVN33btConvexConcaveCollisionAlgorithm10CreateFuncE;
+ r6 = r3 >> 2;
+ r4 = (r4 + 8)|0;
+ heap8[r3+4] = r8;
+ heap32[(r6)] = r4;
+ r4 = (r1 + 5)|0;
+ heap32[(r5+11)] = r3;
+ heap32[(r2)] = r4;
+ heap32[(g0)] = 27;
+ malloc(i7);
+ r3 = r_g0;
+ if(r3 !=0) //_LBB26_14
+{
+ r4 = (r3 + 4)|0;
+ r4 = (r8 - r4)|0;
+ r4 = r4 & 15;
+ r4 = (r3 + r4)|0;
+ r6 = (r4 + 4)|0;
+ r4 = r4 >> 2;
+ heap32[(r4)] = r3;
+ r3 = r6;
+}
+ r4 = _ZTVN33btConvexConcaveCollisionAlgorithm17SwappedCreateFuncE;
+ r6 = r3 >> 2;
+ r4 = (r4 + 8)|0;
+ heap8[r3+4] = r8;
+ heap32[(r6)] = r4;
+ r4 = (r1 + 6)|0;
+ heap32[(r5+12)] = r3;
+ heap32[(r2)] = r4;
+ heap32[(g0)] = 27;
+ malloc(i7);
+ r3 = r_g0;
+ if(r3 !=0) //_LBB26_17
+{
+ r4 = (r3 + 4)|0;
+ r4 = (r8 - r4)|0;
+ r4 = r4 & 15;
+ r4 = (r3 + r4)|0;
+ r6 = (r4 + 4)|0;
+ r4 = r4 >> 2;
+ heap32[(r4)] = r3;
+ r3 = r6;
+}
+ r4 = _ZTVN28btCompoundCollisionAlgorithm10CreateFuncE;
+ r6 = r3 >> 2;
+ r4 = (r4 + 8)|0;
+ heap8[r3+4] = r8;
+ heap32[(r6)] = r4;
+ r4 = (r1 + 7)|0;
+ heap32[(r5+13)] = r3;
+ heap32[(r2)] = r4;
+ heap32[(g0)] = 27;
+ malloc(i7);
+ r3 = r_g0;
+ if(r3 !=0) //_LBB26_20
+{
+ r4 = (r3 + 4)|0;
+ r4 = (r8 - r4)|0;
+ r4 = r4 & 15;
+ r4 = (r3 + r4)|0;
+ r6 = (r4 + 4)|0;
+ r4 = r4 >> 2;
+ heap32[(r4)] = r3;
+ r3 = r6;
+}
+ r4 = _ZTVN28btCompoundCollisionAlgorithm17SwappedCreateFuncE;
+ r6 = r3 >> 2;
+ r4 = (r4 + 8)|0;
+ heap8[r3+4] = r8;
+ heap32[(r6)] = r4;
+ r4 = (r1 + 8)|0;
+ heap32[(r5+14)] = r3;
+ heap32[(r2)] = r4;
+ heap32[(g0)] = 27;
+ malloc(i7);
+ r3 = r_g0;
+ if(r3 !=0) //_LBB26_23
+{
+ r4 = (r3 + 4)|0;
+ r4 = (r8 - r4)|0;
+ r4 = r4 & 15;
+ r4 = (r3 + r4)|0;
+ r6 = (r4 + 4)|0;
+ r4 = r4 >> 2;
+ heap32[(r4)] = r3;
+ r3 = r6;
+}
+ r4 = _ZTVN16btEmptyAlgorithm10CreateFuncE;
+ r6 = r3 >> 2;
+ r4 = (r4 + 8)|0;
+ heap8[r3+4] = r8;
+ heap32[(r6)] = r4;
+ r4 = (r1 + 9)|0;
+ heap32[(r5+15)] = r3;
+ heap32[(r2)] = r4;
+ heap32[(g0)] = 27;
+ malloc(i7);
+ r3 = r_g0;
+ if(r3 !=0) //_LBB26_26
+{
+ r4 = (r3 + 4)|0;
+ r4 = (r8 - r4)|0;
+ r4 = r4 & 15;
+ r4 = (r3 + r4)|0;
+ r6 = (r4 + 4)|0;
+ r4 = r4 >> 2;
+ heap32[(r4)] = r3;
+ r3 = r6;
+}
+ r4 = _ZTVN32btSphereSphereCollisionAlgorithm10CreateFuncE;
+ r6 = r3 >> 2;
+ r4 = (r4 + 8)|0;
+ heap8[r3+4] = r8;
+ heap32[(r6)] = r4;
+ r4 = (r1 + 10)|0;
+ heap32[(r5+16)] = r3;
+ heap32[(r2)] = r4;
+ heap32[(g0)] = 27;
+ malloc(i7);
+ r3 = r_g0;
+ if(r3 !=0) //_LBB26_29
+{
+ r4 = (r3 + 4)|0;
+ r4 = (r8 - r4)|0;
+ r4 = r4 & 15;
+ r4 = (r3 + r4)|0;
+ r6 = (r4 + 4)|0;
+ r4 = r4 >> 2;
+ heap32[(r4)] = r3;
+ r3 = r6;
+}
+ r4 = _ZTVN34btSphereTriangleCollisionAlgorithm10CreateFuncE;
+ r6 = r3 >> 2;
+ r4 = (r4 + 8)|0;
+ heap8[r3+4] = r8;
+ heap32[(r6)] = r4;
+ r6 = (r1 + 11)|0;
+ heap32[(r5+18)] = r3;
+ heap32[(r2)] = r6;
+ heap32[(g0)] = 27;
+ malloc(i7);
+ r3 = r_g0;
+ if(r3 !=0) //_LBB26_32
+{
+ r6 = (r3 + 4)|0;
+ r6 = (r8 - r6)|0;
+ r6 = r6 & 15;
+ r6 = (r3 + r6)|0;
+ r7 = (r6 + 4)|0;
+ r6 = r6 >> 2;
+ heap32[(r6)] = r3;
+ r3 = r7;
+}
+ r6 = r3 >> 2;
+ heap8[r3+4] = r8;
+ heap32[(r6)] = r4;
+ r4 = 1;
+ heap32[(r5+19)] = r3;
+ r6 = (r1 + 12)|0;
+ heap8[r3+4] = r4;
+ heap32[(r2)] = r6;
+ heap32[(g0)] = 27;
+ malloc(i7);
+ r3 = r_g0;
+ if(r3 !=0) //_LBB26_35
+{
+ r6 = (r3 + 4)|0;
+ r6 = (r8 - r6)|0;
+ r6 = r6 & 15;
+ r6 = (r3 + r6)|0;
+ r7 = (r6 + 4)|0;
+ r6 = r6 >> 2;
+ heap32[(r6)] = r3;
+ r3 = r7;
+}
+ r6 = _ZTVN26btBoxBoxCollisionAlgorithm10CreateFuncE;
+ r7 = r3 >> 2;
+ r6 = (r6 + 8)|0;
+ heap8[r3+4] = r8;
+ heap32[(r7)] = r6;
+ r6 = (r1 + 13)|0;
+ heap32[(r5+17)] = r3;
+ heap32[(r2)] = r6;
+ heap32[(g0)] = 35;
+ malloc(i7);
+ r3 = r_g0;
+ if(r3 !=0) //_LBB26_38
+{
+ r6 = (r3 + 4)|0;
+ r6 = (r8 - r6)|0;
+ r6 = r6 & 15;
+ r6 = (r3 + r6)|0;
+ r7 = (r6 + 4)|0;
+ r6 = r6 >> 2;
+ heap32[(r6)] = r3;
+ r3 = r7;
+}
+ r6 = _ZTVN31btConvexPlaneCollisionAlgorithm10CreateFuncE;
+ r7 = r3 >> 2;
+ r6 = (r6 + 8)|0;
+ heap8[r3+4] = r8;
+ heap32[(r7)] = r6;
+ heap32[(r7+2)] = 1;
+ heap32[(r7+3)] = 1;
+ r7 = (r1 + 14)|0;
+ heap32[(r5+21)] = r3;
+ heap32[(r2)] = r7;
+ heap32[(g0)] = 35;
+ malloc(i7);
+ r3 = r_g0;
+ if(r3 !=0) //_LBB26_41
+{
+ r7 = (r3 + 4)|0;
+ r7 = (r8 - r7)|0;
+ r7 = r7 & 15;
+ r7 = (r3 + r7)|0;
+ r9 = (r7 + 4)|0;
+ r7 = r7 >> 2;
+ heap32[(r7)] = r3;
+ r3 = r9;
+}
+ r7 = r3 >> 2;
+ heap8[r3+4] = r8;
+ heap32[(r7)] = r6;
+ heap32[(r7+2)] = 1;
+ heap32[(r7+3)] = 1;
+ heap32[(r5+20)] = r3;
+ heap8[r3+4] = r4;
+ r3 = (r1 + 15)|0;
+ heap8[r0+12] = r4;
+ heap32[(r2)] = r3;
+ heap32[(g0)] = 39;
+ malloc(i7);
+ r3 = r_g0;
+ if(r3 !=0) //_LBB26_44
+{
+ r6 = (r3 + 4)|0;
+ r6 = (r8 - r6)|0;
+ r6 = r6 & 15;
+ r6 = (r3 + r6)|0;
+ r7 = (r6 + 4)|0;
+ r6 = r6 >> 2;
+ heap32[(r6)] = r3;
+ r3 = r7;
+}
+ r6 = r3 >> 2;
+ heap32[(r6+1)] = 0;
+ heap32[(r6+3)] = 0;
+ heap8[r3+16] = r8;
+ heap32[(r6)] = 0;
+ r7 = (r1 + 16)|0;
+ heap32[(r6+2)] = 0;
+ heap32[(r2)] = r7;
+ heap32[(g0)] = 19;
+ malloc(i7);
+ r7 = r_g0;
+ if(r7 !=0) //_LBB26_47
+{
+ r9 = (r7 + 4)|0;
+ r9 = (r8 - r9)|0;
+ r9 = r9 & 15;
+ r9 = (r7 + r9)|0;
+ r10 = (r9 + 4)|0;
+ r9 = r9 >> 2;
+ heap32[(r9)] = r7;
+ r7 = r10;
+}
+ heap32[(r6)] = r7;
+ heap32[(r6+1)] = 0;
+ heap32[(r5+2)] = r3;
+ r3 = (r1 + 17)|0;
+ heap8[r0+20] = r4;
+ heap32[(r2)] = r3;
+ heap32[(g0)] = 39;
+ malloc(i7);
+ r3 = r_g0;
+ if(r3 !=0) //_LBB26_50
+{
+ r6 = (r3 + 4)|0;
+ r6 = (r8 - r6)|0;
+ r6 = r6 & 15;
+ r6 = (r3 + r6)|0;
+ r7 = (r6 + 4)|0;
+ r6 = r6 >> 2;
+ heap32[(r6)] = r3;
+ r3 = r7;
+}
+ r6 = r3 >> 2;
+ heap32[(r6)] = 1140;
+ r7 = (r1 + 18)|0;
+ heap32[(r6+1)] = 4096;
+ heap32[(r2)] = r7;
+ heap32[(g0)] = 4669459;
+ malloc(i7);
+ r7 = r_g0;
+ if(r7 !=0) //_LBB26_53
+{
+ r9 = (r7 + 4)|0;
+ r9 = (r8 - r9)|0;
+ r9 = r9 & 15;
+ r9 = (r7 + r9)|0;
+ r10 = (r9 + 4)|0;
+ r9 = r9 >> 2;
+ heap32[(r9)] = r7;
+ r7 = r10;
+}
+ heap32[(r6+4)] = r7;
+ r9 = 4095;
+ r10 = 1140;
+ heap32[(r6+3)] = r7;
+ heap32[(r6+2)] = 4096;
+ r11 = r7;
+_55: while(true){
+ r7 = r7 >> 2;
+ r10 = (r11 + r10)|0;
+ heap32[(r7)] = r10;
+ r10 = heap32[(r6)];
+ r7 = (r11 + r10)|0;
+ r9 = (r9 + -1)|0;
+ r11 = r7;
+ if(r9 !=0) //_LBB26_55
+{
+continue _55;
+}
+else{
+break _55;
+}
+}
+ r6 = r7 >> 2;
+ heap32[(r6)] = 0;
+ heap32[(r5+4)] = r3;
+ r3 = (r1 + 19)|0;
+ heap8[r0+28] = r4;
+ heap32[(r2)] = r3;
+ heap32[(g0)] = 39;
+ malloc(i7);
+ r3 = r_g0;
+ if(r3 !=0) //_LBB26_58
+{
+ r6 = (r3 + 4)|0;
+ r6 = (r8 - r6)|0;
+ r6 = r6 & 15;
+ r6 = (r3 + r6)|0;
+ r7 = (r6 + 4)|0;
+ r6 = r6 >> 2;
+ heap32[(r6)] = r3;
+ r3 = r7;
+}
+ r6 = r3 >> 2;
+ heap32[(r6)] = 80;
+ r1 = (r1 + 20)|0;
+ heap32[(r6+1)] = 4096;
+ heap32[(r2)] = r1;
+ heap32[(g0)] = 327699;
+ malloc(i7);
+ r1 = r_g0;
+ if(r1 !=0) //_LBB26_61
+{
+ r7 = (r1 + 4)|0;
+ r7 = (r8 - r7)|0;
+ r7 = r7 & 15;
+ r7 = (r1 + r7)|0;
+ r9 = (r7 + 4)|0;
+ r7 = r7 >> 2;
+ heap32[(r7)] = r1;
+ r1 = r9;
+}
+ heap32[(r6+4)] = r1;
+ r7 = 4095;
+ r9 = 80;
+ heap32[(r6+3)] = r1;
+ heap32[(r6+2)] = 4096;
+ r10 = r1;
+_64: while(true){
+ r1 = r1 >> 2;
+ r9 = (r10 + r9)|0;
+ heap32[(r1)] = r9;
+ r9 = heap32[(r6)];
+ r1 = (r10 + r9)|0;
+ r7 = (r7 + -1)|0;
+ r10 = r1;
+ if(r7 !=0) //_LBB26_63
+{
+continue _64;
+}
+else{
+break _64;
+}
+}
+ r1 = r1 >> 2;
+ r6 = _ZL14benchmarkDemo4;
+ heap32[(r1)] = 0;
+ r1 = r6 >> 2;
+ heap32[(r5+6)] = r3;
+ heap32[(r1+16)] = r0;
+ heap32[(g0)] = 5388;
+ _Znwj(i7);
+ r0 = r_g0;
+ r3 = _ZTV21btCollisionDispatcher;
+ r5 = heap32[(r1+16)];
+ r3 = (r3 + 8)|0;
+ r7 = r0 >> 2;
+ heap32[(r7)] = r3;
+ heap32[(r7+1)] = 2;
+ heap8[r0+24] = r4;
+ heap32[(r7+5)] = 0;
+ r3 = _ZTV16btManifoldResult;
+ heap32[(r7+3)] = 0;
+ r3 = (r3 + 8)|0;
+ heap32[(r7+4)] = 0;
+ heap32[(r7+7)] = r3;
+ r3 = _ZN21btCollisionDispatcher19defaultNearCallbackER16btBroadphasePairRS_RK16btDispatcherInfo__index__;
+ heap32[(r7+1346)] = r5;
+ heap32[(r7+47)] = r3;
+ r3 = r5 >> 2;
+ r9 = heap32[(r3)];
+ r9 = r9 >> 2;
+ r9 = heap32[(r9+3)];
+ heap32[(g0)] = r5;
+ __FUNCTION_TABLE__[(r9)>>2](i7);
+ heap32[(r7+48)] = r_g0;
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3+2)];
+ heap32[(g0)] = r5;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ r5 = (r0 + 200)|0;
+ heap32[(r7+49)] = r_g0;
+_67: while(true){
+ if(r8 >35) //_LBB26_72
+{
+__label__ = 52;
+break _67;
+}
+else{
+ r3 = 0;
+_70: while(true){
+ if(r3 <36) //_LBB26_65
+{
+ r7 = r0 >> 2;
+ r7 = heap32[(r7+1346)];
+ r9 = r7 >> 2;
+ r9 = heap32[(r9)];
+ r9 = r9 >> 2;
+ r9 = heap32[(r9+5)];
+ r10 = r3 << 2;
+ heap32[(g0)] = r7;
+ heap32[(g0+1)] = r8;
+ heap32[(g0+2)] = r3;
+ r7 = (r5 + r10)|0;
+ r7 = r7 >> 2;
+ __FUNCTION_TABLE__[(r9)>>2](i7);
+ r9 = r_g0;
+ heap32[(r7)] = r9;
+ if(r9 !=0) //_LBB26_67
+{
+ r3 = (r3 + 1)|0;
+}
+else{
+__label__ = 46;
+break _67;
+}
+}
+else{
+break _70;
+}
+}
+ r8 = (r8 + 1)|0;
+ r5 = (r5 + 144)|0;
+continue _67;
+}
+}
+switch(__label__ ){//multiple entries
+case 52:
+ heap32[(r1+14)] = r0;
+ heap32[(g0)] = 76;
+ _Znwj(i7);
+ r0 = r_g0;
+ heap32[(g0)] = r0;
+ _ZN28btHashedOverlappingPairCacheC1Ev(i7);
+ r3 = heap32[(r2)];
+ r5 = (r3 + 1)|0;
+ heap32[(r2)] = r5;
+ heap32[(g0)] = 135;
+ malloc(i7);
+ r7 = r_g0;
+ if(r7 !=0) //_LBB26_74
+{
+ r8 = 0;
+ r9 = (r7 + 4)|0;
+ r8 = (r8 - r9)|0;
+ r8 = r8 & 15;
+ r8 = (r7 + r8)|0;
+ r9 = (r8 + 4)|0;
+ r8 = r8 >> 2;
+ heap32[(r8)] = r7;
+ r7 = r9;
+}
+ r8 = _ZTV20btAxisSweep3InternalItE;
+ r9 = r7 >> 2;
+ r8 = (r8 + 8)|0;
+ r10 = -2;
+ heap32[(r9)] = r8;
+ r8 = -1;
+ heap16[(r7+4)>>1] = r10;
+ heap16[(r7+6)>>1] = r8;
+ heap32[(r9+23)] = r0;
+ r8 = 0;
+ heap32[(r9+24)] = 0;
+ heap8[r7+100] = r8;
+ heap32[(r9+26)] = 0;
+ heap32[(r9+27)] = 0;
+ if(r0 ==0) //_LBB26_77
+{
+ r5 = (r3 + 2)|0;
+ heap32[(r2)] = r5;
+ heap32[(g0)] = 95;
+ malloc(i7);
+ r5 = r_g0;
+ if(r5 !=0) //_LBB26_79
+{
+ r0 = 0;
+ r3 = (r5 + 4)|0;
+ r0 = (r0 - r3)|0;
+ r0 = r0 & 15;
+ r0 = (r5 + r0)|0;
+ r3 = (r0 + 4)|0;
+ r0 = r0 >> 2;
+ heap32[(r0)] = r5;
+ r5 = r3;
+}
+ heap32[(g0)] = r5;
+ _ZN28btHashedOverlappingPairCacheC1Ev(i7);
+ heap32[(r9+23)] = r5;
+ heap8[r7+100] = r4;
+ r5 = heap32[(r2)];
+}
+ r0 = (r5 + 1)|0;
+ heap32[(r2)] = r0;
+ heap32[(g0)] = 43;
+ malloc(i7);
+ r0 = r_g0;
+ if(r0 !=0) //_LBB26_83
+{
+ r3 = (r0 + 4)|0;
+ r3 = (r8 - r3)|0;
+ r3 = r3 & 15;
+ r3 = (r0 + r3)|0;
+ r10 = (r3 + 4)|0;
+ r3 = r3 >> 2;
+ heap32[(r3)] = r0;
+ r0 = r10;
+}
+ r3 = _ZTV15btNullPairCache;
+ r10 = r0 >> 2;
+ r3 = (r3 + 8)|0;
+ heap32[(r10)] = r3;
+ heap8[r0+20] = r4;
+ heap32[(r10+4)] = 0;
+ heap32[(r10+2)] = 0;
+ heap32[(r10+3)] = 0;
+ r3 = (r5 + 2)|0;
+ heap32[(r9+28)] = r0;
+ heap32[(r2)] = r3;
+ heap32[(g0)] = 175;
+ malloc(i7);
+ r10 = r_g0;
+ if(r10 !=0) //_LBB26_86
+{
+ r11 = (r10 + 4)|0;
+ r11 = (r8 - r11)|0;
+ r11 = r11 & 15;
+ r11 = (r10 + r11)|0;
+ r12 = (r11 + 4)|0;
+ r11 = r11 >> 2;
+ heap32[(r11)] = r10;
+ r10 = r12;
+}
+ r11 = _ZTV16btDbvtBroadphase;
+ r12 = r10 >> 2;
+ r11 = (r11 + 8)|0;
+ heap32[(r12)] = r11;
+_92: while(true){
+ r11 = (r10 + r8)|0;
+ r13 = r11 >> 2;
+ heap8[r11+40] = r4;
+ heap32[(r13+9)] = 0;
+ heap32[(r13+7)] = 0;
+ heap32[(r13+8)] = 0;
+ heap32[(r13+1)] = 0;
+ heap32[(r13+2)] = 0;
+ heap32[(r13+3)] = -1;
+ r8 = (r8 + 40)|0;
+ heap32[(r13+4)] = 0;
+ heap32[(r13+5)] = 0;
+ if(r8 !=80) //_LBB26_88
+{
+continue _92;
+}
+else{
+break _92;
+}
+}
+ r8 = 0;
+ r11 = r0 == r8;
+ heap8[r10+153] = r8;
+ r11 = r11 & 1;
+ heap8[r10+154] = r4;
+ heap8[r10+152] = r11;
+ heap32[(r12+25)] = 0;
+ heap32[(r12+26)] = 0;
+ heap32[(r12+31)] = 0;
+ heap32[(r12+27)] = 1;
+ heap32[(r12+28)] = 0;
+ heap32[(r12+29)] = 10;
+ heap32[(r12+30)] = 1;
+ heap32[(r12+32)] = 0;
+ heap32[(r12+33)] = 0;
+ heap32[(r12+34)] = 0;
+ if(r0 ==0) //_LBB26_91
+{
+ r0 = (r5 + 3)|0;
+ heap32[(r2)] = r0;
+ heap32[(g0)] = 95;
+ malloc(i7);
+ r0 = r_g0;
+ if(r0 !=0) //_LBB26_93
+{
+ r3 = 0;
+ r5 = (r0 + 4)|0;
+ r3 = (r3 - r5)|0;
+ r3 = r3 & 15;
+ r3 = (r0 + r3)|0;
+ r5 = (r3 + 4)|0;
+ r3 = r3 >> 2;
+ heap32[(r3)] = r0;
+ r0 = r5;
+}
+ heap32[(g0)] = r0;
+ _ZN28btHashedOverlappingPairCacheC1Ev(i7);
+ r3 = heap32[(r2)];
+}
+ heap32[(r12+24)] = r0;
+ heap32[(r12+37)] = 0;
+ heap32[(r12+35)] = 0;
+ heap32[(r12+36)] = 0;
+ heap32[(r12+21)] = 0;
+ heap32[(r12+22)] = 0;
+ heap32[(r12+23)] = 0;
+ heap32[(r9+27)] = r10;
+ heap8[r10+153] = r4;
+ heap32[(r9+2)] = -998637568;
+ heap32[(r9+3)] = -998637568;
+ heap32[(r9+4)] = -998637568;
+ heap32[(r9+5)] = 0;
+ heap32[(r9+6)] = 1148846080;
+ heap32[(r9+7)] = 1148846080;
+ heap32[(r9+8)] = 1148846080;
+ heap32[(r9+9)] = 0;
+ r0 = heapU16[(r7+6)>>1];
+ f0 = uint(r0); //fuitos r0, f0
+ f1 = 2000;
+ f0 = f0/f1;
+ heapFloat[(r9+10)] = f0;
+ heapFloat[(r9+11)] = f0;
+ heapFloat[(r9+12)] = f0;
+ r0 = (r3 + 1)|0;
+ heap32[(r9+13)] = 0;
+ heap32[(r2)] = r0;
+ heap32[(g0)] = 224083;
+ malloc(i7);
+ r0 = r_g0;
+ if(r0 !=0) //_LBB26_97
+{
+ r5 = (r0 + 4)|0;
+ r5 = (r8 - r5)|0;
+ r5 = r5 & 15;
+ r5 = (r0 + r5)|0;
+ r10 = (r5 + 4)|0;
+ r5 = r5 >> 2;
+ heap32[(r5)] = r0;
+ r0 = r10;
+}
+_103: while(true){
+ r5 = r8 << 6;
+ r5 = (r0 - r5)|0;
+ r5 = r5 >> 2;
+ r8 = (r8 + -1)|0;
+ heap32[(r5)] = 0;
+ heap32[(r5+2)] = 0;
+ if(r8 !=-3501) //_LBB26_98
+{
+continue _103;
+}
+else{
+break _103;
+}
+}
+ r5 = 3501;
+ heap32[(r9+15)] = r0;
+ r8 = 0;
+ heap16[(r7+58)>>1] = r5;
+ r5 = -112;
+ r10 = 2;
+ heap16[(r7+56)>>1] = r8;
+ heap16[(r7+64)>>1] = r4;
+_106: while(true){
+ r0 = (r0 - r5)|0;
+ heap16[(r0)>>1] = r10;
+ r5 = (r5 + -64)|0;
+ r0 = heap32[(r9+15)];
+ r10 = (r10 + 1)|0;
+ if(r5 !=-224112) //_LBB26_100
+{
+continue _106;
+}
+else{
+break _106;
+}
+}
+ r3 = (r3 + 2)|0;
+ heap16[(r0+224048)>>1] = r8;
+_109: while(true){
+ r0 = (r3 + r8)|0;
+ heap32[(r2)] = r0;
+ heap32[(g0)] = 28027;
+ malloc(i7);
+ r0 = r_g0;
+ if(r0 !=0) //_LBB26_104
+{
+ r5 = 0;
+ r10 = (r0 + 4)|0;
+ r5 = (r5 - r10)|0;
+ r5 = r5 & 15;
+ r5 = (r0 + r5)|0;
+ r10 = (r5 + 4)|0;
+ r5 = r5 >> 2;
+ heap32[(r5)] = r0;
+ r0 = r10;
+}
+ r5 = r8 << 2;
+ r5 = (r7 + r5)|0;
+ r5 = r5 >> 2;
+ r8 = (r8 + 1)|0;
+ heap32[(r5+20)] = r0;
+ heap32[(r5+17)] = r0;
+ if(r8 !=3) //_LBB26_102
+{
+continue _109;
+}
+else{
+break _109;
+}
+}
+ r0 = heap32[(r9+15)];
+ r0 = r0 >> 2;
+ heap32[(r0)] = 0;
+ r0 = heap32[(r9+15)];
+ r3 = 0;
+ heap16[(r0+48)>>1] = r3;
+ r0 = heap32[(r9+15)];
+ heap16[(r0+54)>>1] = r4;
+ r0 = heap32[(r9+17)];
+ heap16[(r0)>>1] = r3;
+ r0 = heap32[(r9+17)];
+ heap16[(r0+2)>>1] = r3;
+ r0 = heap32[(r9+17)];
+ r5 = heapU16[(r7+6)>>1];
+ heap16[(r0+4)>>1] = r5;
+ r0 = heap32[(r9+17)];
+ heap16[(r0+6)>>1] = r3;
+ r0 = heap32[(r9+15)];
+ heap16[(r0+50)>>1] = r3;
+ r0 = heap32[(r9+15)];
+ heap16[(r0+56)>>1] = r4;
+ r0 = heap32[(r9+18)];
+ heap16[(r0)>>1] = r3;
+ r0 = heap32[(r9+18)];
+ heap16[(r0+2)>>1] = r3;
+ r0 = heap32[(r9+18)];
+ r5 = heapU16[(r7+6)>>1];
+ heap16[(r0+4)>>1] = r5;
+ r0 = heap32[(r9+18)];
+ heap16[(r0+6)>>1] = r3;
+ r0 = heap32[(r9+15)];
+ heap16[(r0+52)>>1] = r3;
+ r0 = heap32[(r9+15)];
+ heap16[(r0+58)>>1] = r4;
+ r0 = heap32[(r9+19)];
+ heap16[(r0)>>1] = r3;
+ r0 = heap32[(r9+19)];
+ heap16[(r0+2)>>1] = r3;
+ r0 = heap32[(r9+19)];
+ r5 = heapU16[(r7+6)>>1];
+ heap16[(r0+4)>>1] = r5;
+ r0 = heap32[(r9+19)];
+ r5 = _ZTV12btAxisSweep3;
+ r5 = (r5 + 8)|0;
+ heap16[(r0+6)>>1] = r3;
+ heap32[(r9)] = r5;
+ heap32[(r1+13)] = r7;
+ heap32[(g0)] = 128;
+ r0 = _ZTV35btSequentialImpulseConstraintSolver;
+ _Znwj(i7);
+ r7 = r_g0 >> 2;
+ r0 = (r0 + 8)|0;
+ heap32[(r7)] = r0;
+ heap8[r_g0+20] = r4;
+ heap32[(r7+4)] = 0;
+ heap32[(r7+2)] = 0;
+ heap32[(r7+3)] = 0;
+ heap8[r_g0+40] = r4;
+ heap32[(r7+9)] = 0;
+ heap32[(r7+7)] = 0;
+ heap32[(r7+8)] = 0;
+ heap8[r_g0+60] = r4;
+ heap32[(r7+14)] = 0;
+ heap32[(r7+12)] = 0;
+ heap32[(r7+13)] = 0;
+ heap8[r_g0+80] = r4;
+ heap32[(r7+19)] = 0;
+ heap32[(r7+17)] = 0;
+ heap32[(r7+18)] = 0;
+ heap8[r_g0+100] = r4;
+ heap32[(r7+24)] = 0;
+ heap32[(r7+22)] = 0;
+ heap32[(r7+23)] = 0;
+ heap8[r_g0+120] = r4;
+ heap32[(r7+29)] = 0;
+ heap32[(r7+27)] = 0;
+ heap32[(r7+28)] = 0;
+ heap32[(r7+31)] = 0;
+ heap32[(r1+15)] = r_g0;
+ heap32[(g0)] = 272;
+ _Znwj(i7);
+ r5 = r_g0;
+ r7 = heap32[(r1+16)];
+ r8 = _ZTV16btCollisionWorld;
+ r9 = heap32[(r1+15)];
+ r10 = heap32[(r1+13)];
+ r11 = heap32[(r1+14)];
+ r8 = (r8 + 8)|0;
+ r12 = r5 >> 2;
+ heap32[(r12)] = r8;
+ heap8[r5+20] = r4;
+ heap32[(r12+4)] = 0;
+ heap32[(r12+2)] = 0;
+ heap32[(r12+3)] = 0;
+ heap32[(r12+6)] = r11;
+ heap32[(r12+7)] = 0;
+ heap32[(r12+8)] = 0;
+ heap32[(r12+9)] = 1;
+ heap32[(r12+10)] = 1065353216;
+ heap8[r5+44] = r3;
+ heap32[(r12+12)] = 0;
+ heap8[r5+52] = r3;
+ heap8[r5+53] = r4;
+ heap8[r5+54] = r4;
+ heap32[(r12+14)] = 1025758986;
+ heap8[r5+60] = r3;
+ heap32[(r12+16)] = 0;
+ heap8[r5+68] = r3;
+ heap32[(r12+18)] = 0;
+ heap32[(r12+20)] = r10;
+ heap32[(r12+21)] = 0;
+ r8 = r7 >> 2;
+ heap8[r5+88] = r4;
+ r8 = heap32[(r8)];
+ r8 = r8 >> 2;
+ r8 = heap32[(r8+4)];
+ heap32[(g0)] = r7;
+ __FUNCTION_TABLE__[(r8)>>2](i7);
+ heap32[(r12+19)] = r_g0;
+ heap32[(r12+18)] = r_g0;
+ heap32[(r12+23)] = 0;
+ heap32[(r12+24)] = 0;
+ heap32[(r12+25)] = 0;
+ heap32[(r12+26)] = 1058642330;
+ heap32[(r12+27)] = 1065353216;
+ heap32[(r12+28)] = 1050253722;
+ heap32[(r12+30)] = 0;
+ heap32[(r12+32)] = 1101004800;
+ heap32[(r12+31)] = 10;
+ heap32[(r12+34)] = 1045220557;
+ heap32[(r12+35)] = 1036831949;
+ heap32[(r12+36)] = 0;
+ heap32[(r12+33)] = 1065353216;
+ heap32[(r12+37)] = 0;
+ heap32[(r12+38)] = -1130113270;
+ heap32[(r12+39)] = 0;
+ heap32[(r12+40)] = 1062836634;
+ heap32[(r12+41)] = 260;
+ r7 = _ZTV23btDiscreteDynamicsWorld;
+ heap32[(r12+42)] = 2;
+ r7 = (r7 + 8)|0;
+ heap32[(r12+43)] = 128;
+ heap32[(r12)] = r7;
+ heap32[(r12+44)] = r9;
+ heap8[r5+200] = r4;
+ heap32[(r12+49)] = 0;
+ heap32[(r12+47)] = 0;
+ heap32[(r12+48)] = 0;
+ heap8[r5+220] = r4;
+ heap32[(r12+54)] = 0;
+ heap32[(r12+52)] = 0;
+ heap32[(r12+53)] = 0;
+ heap32[(r12+56)] = 0;
+ heap32[(r12+57)] = -1054867456;
+ heap32[(r12+58)] = 0;
+ heap32[(r12+59)] = 0;
+ heap32[(r12+60)] = 0;
+ heap8[r5+246] = r3;
+ heap8[r5+264] = r4;
+ heap32[(r12+65)] = 0;
+ heap32[(r12+63)] = 0;
+ heap32[(r12+64)] = 0;
+ heap32[(r12+67)] = 0;
+ if(r9 !=0) //_LBB26_111
+{
+ heap8[r5+245] = r3;
+ r7 = heap32[(r2)];
+}
+else{
+ r7 = heap32[(r2)];
+ r7 = (r7 + 1)|0;
+ heap32[(r2)] = r7;
+ heap32[(g0)] = 147;
+ malloc(i7);
+ r8 = r_g0;
+ if(r8 !=0) //_LBB26_109
+{
+ r9 = 0;
+ r10 = (r8 + 4)|0;
+ r9 = (r9 - r10)|0;
+ r9 = r9 & 15;
+ r9 = (r8 + r9)|0;
+ r10 = (r9 + 4)|0;
+ r9 = r9 >> 2;
+ heap32[(r9)] = r8;
+ r8 = r10;
+}
+ r9 = r8 >> 2;
+ heap32[(r9)] = r0;
+ heap8[r8+20] = r4;
+ heap32[(r9+4)] = 0;
+ heap32[(r9+2)] = 0;
+ heap32[(r9+3)] = 0;
+ heap8[r8+40] = r4;
+ heap32[(r9+9)] = 0;
+ heap32[(r9+7)] = 0;
+ heap32[(r9+8)] = 0;
+ heap8[r8+60] = r4;
+ heap32[(r9+14)] = 0;
+ heap32[(r9+12)] = 0;
+ heap32[(r9+13)] = 0;
+ heap8[r8+80] = r4;
+ heap32[(r9+19)] = 0;
+ heap32[(r9+17)] = 0;
+ heap32[(r9+18)] = 0;
+ heap8[r8+100] = r4;
+ heap32[(r9+24)] = 0;
+ heap32[(r9+22)] = 0;
+ heap32[(r9+23)] = 0;
+ heap8[r8+120] = r4;
+ heap32[(r9+29)] = 0;
+ heap32[(r9+27)] = 0;
+ heap32[(r9+28)] = 0;
+ r0 = r5 >> 2;
+ heap32[(r9+31)] = 0;
+ heap32[(r0+44)] = r8;
+ heap8[r5+245] = r4;
+}
+ r0 = (r7 + 1)|0;
+ heap32[(r2)] = r0;
+ heap32[(g0)] = 87;
+ malloc(i7);
+ r0 = r_g0;
+ if(r0 !=0) //_LBB26_114
+{
+ r7 = (r0 + 4)|0;
+ r7 = (r3 - r7)|0;
+ r7 = r7 & 15;
+ r7 = (r0 + r7)|0;
+ r8 = (r7 + 4)|0;
+ r7 = r7 >> 2;
+ heap32[(r7)] = r0;
+ r0 = r8;
+}
+ r7 = _ZTV25btSimulationIslandManager;
+ r8 = r0 >> 2;
+ r7 = (r7 + 8)|0;
+ heap32[(r8)] = r7;
+ heap8[r0+20] = r4;
+ heap32[(r8+4)] = 0;
+ heap32[(r8+2)] = 0;
+ heap32[(r8+3)] = 0;
+ heap8[r0+40] = r4;
+ heap32[(r8+9)] = 0;
+ heap32[(r8+7)] = 0;
+ heap32[(r8+8)] = 0;
+ heap8[r0+60] = r4;
+ heap32[(r8+14)] = 0;
+ heap32[(r8+12)] = 0;
+ heap32[(r8+13)] = 0;
+ r7 = r5 >> 2;
+ heap8[r0+64] = r4;
+ heap32[(r7+45)] = r0;
+ heap8[r5+244] = r4;
+ heap32[(r1+1)] = r5;
+ r0 = heap32[(r7+41)];
+ r0 = r0 | 32;
+ heap32[(r7+41)] = r0;
+ heap32[(r7+31)] = 5;
+ heap32[(r1+2)] = 0;
+ r0 = heap32[(r1+1)];
+ r5 = r0 >> 2;
+ r5 = heap32[(r5)];
+ r5 = r5 >> 2;
+ r5 = heap32[(r5+17)];
+ r7 = sp + -41280;
+ r8 = r7 >> 2;
+ heap32[(fp+-10320)] = 0;
+ heap32[(r8+1)] = -1054867456;
+ heap32[(r8+2)] = 0;
+ heap32[(r8+3)] = 0;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r7;
+ __FUNCTION_TABLE__[(r5)>>2](i7);
+ r0 = heap32[(r1+17)];
+ if(r0 <5) //_LBB26_117
+{
+ r0 = heap32[(r2)];
+ r5 = (r0 + 1)|0;
+ heap32[(r2)] = r5;
+ heap32[(g0)] = 71;
+ malloc(i7);
+ r5 = r_g0;
+ if(r5 !=0) //_LBB26_119
+{
+ r7 = 0;
+ r8 = (r5 + 4)|0;
+ r7 = (r7 - r8)|0;
+ r7 = r7 & 15;
+ r7 = (r5 + r7)|0;
+ r8 = (r7 + 4)|0;
+ r7 = r7 >> 2;
+ heap32[(r7)] = r5;
+ r5 = r8;
+}
+ r7 = r5 >> 2;
+ heap32[(r7+2)] = 0;
+ heap32[(r7+3)] = 1065353216;
+ heap32[(r7+4)] = 1065353216;
+ heap32[(r7+5)] = 1065353216;
+ r8 = _ZTV10btBoxShape;
+ heap32[(r7+6)] = 0;
+ r8 = (r8 + 8)|0;
+ heap32[(r7+11)] = 1025758986;
+ heap32[(r7)] = r8;
+ heap32[(r7+1)] = 0;
+ heap32[(r7+7)] = 1132066243;
+ heap32[(r7+8)] = 1112004362;
+ heap32[(r7+9)] = 1132066243;
+ heap32[(r7+10)] = 0;
+ r7 = heap32[(r1+5)];
+ r8 = heap32[(r1+4)];
+ if(r7 ==r8) //_LBB26_122
+{
+ r9 = r8 << 1;
+ r9 = r8 == 0 ? r4 : r9;
+if(!(r7 >=r9)) //_LBB26_121
+{
+ if(r9 !=0) //_LBB26_125
+{
+ r7 = r9 << 2;
+ r0 = (r0 + 2)|0;
+ r7 = r7 | 3;
+ heap32[(r2)] = r0;
+ r0 = (r7 + 16)|0;
+ heap32[(g0)] = r0;
+ malloc(i7);
+ r0 = r_g0;
+ if(r0 !=0) //_LBB26_127
+{
+ r7 = 0;
+ r10 = (r0 + 4)|0;
+ r7 = (r7 - r10)|0;
+ r7 = r7 & 15;
+ r7 = (r0 + r7)|0;
+ r10 = (r7 + 4)|0;
+ r7 = r7 >> 2;
+ heap32[(r7)] = r0;
+ r0 = r10;
+}
+}
+else{
+ r0 = 0;
+}
+_138: do {
+ if(r8 <1) //_LBB26_130
+{
+ r10 = heap32[(r1+6)];
+}
+else{
+ r7 = 0;
+_141: while(true){
+ r10 = heap32[(r1+6)];
+ r11 = r7 << 2;
+ r12 = (r10 + r11)|0;
+ r12 = r12 >> 2;
+ r11 = (r0 + r11)|0;
+ r12 = heap32[(r12)];
+ r7 = (r7 + 1)|0;
+ r11 = r11 >> 2;
+ heap32[(r11)] = r12;
+if(!(r8 !=r7)) //_LBB26_131
+{
+break _138;
+}
+}
+}
+} while(0);
+ if(r10 !=0) //_LBB26_134
+{
+ r7 = heapU8[r6+28];
+ if(r7 !=0) //_LBB26_136
+{
+ r8 = gNumAlignedFree;
+ r8 = r8 >> 2;
+ r7 = heap32[(r8)];
+ r7 = (r7 + 1)|0;
+ r10 = r10 >> 2;
+ heap32[(r8)] = r7;
+ r8 = heap32[(r10+-1)];
+ heap32[(g0)] = r8;
+ free(i7);
+ r8 = heap32[(r1+4)];
+}
+ heap32[(r1+6)] = 0;
+}
+ heap8[r6+28] = r4;
+ heap32[(r1+6)] = r0;
+ heap32[(r1+5)] = r9;
+}
+}
+ r0 = r8 << 2;
+ r7 = heap32[(r1+6)];
+ r0 = (r7 + r0)|0;
+ r0 = r0 >> 2;
+ heap32[(r0)] = r5;
+ r0 = heap32[(r1+4)];
+ r0 = (r0 + 1)|0;
+ r7 = _ZGVZN11btTransform11getIdentityEvE17identityTransform;
+ heap32[(r1+4)] = r0;
+ r0 = heapU8[r7];
+if(!(r0 !=0)) //_LBB26_143
+{
+ r0 = _ZGVZN11btMatrix3x311getIdentityEvE14identityMatrix;
+ r8 = heapU8[r0];
+if(!(r8 !=0)) //_LBB26_142
+{
+ r8 = _ZZN11btMatrix3x311getIdentityEvE14identityMatrix_2E_0_2E_0_2E_0_2E_0;
+ r9 = _ZZN11btMatrix3x311getIdentityEvE14identityMatrix_2E_0_2E_1_2E_0_2E_1;
+ r8 = r8 >> 2;
+ r10 = _ZZN11btMatrix3x311getIdentityEvE14identityMatrix_2E_0_2E_2_2E_0_2E_2;
+ r9 = r9 >> 2;
+ heap32[(r8)] = 1065353216;
+ r8 = r10 >> 2;
+ heap32[(r9)] = 1065353216;
+ heap32[(r8)] = 1065353216;
+ heap8[r0] = r4;
+}
+ r0 = _ZZN11btTransform11getIdentityEvE17identityTransform;
+ r8 = _ZZN11btMatrix3x311getIdentityEvE14identityMatrix_2E_0_2E_0_2E_0_2E_0;
+ r0 = r0 >> 2;
+ r8 = r8 >> 2;
+ heap32[(r0)] = heap32[(r8)];
+ heap32[(r0+1)] = 0;
+ heap32[(r0+2)] = 0;
+ r8 = _ZZN11btMatrix3x311getIdentityEvE14identityMatrix_2E_0_2E_1_2E_0_2E_1;
+ heap32[(r0+3)] = 0;
+ r8 = r8 >> 2;
+ heap32[(r0+4)] = 0;
+ heap32[(r0+5)] = heap32[(r8)];
+ heap32[(r0+6)] = 0;
+ heap32[(r0+7)] = 0;
+ r8 = _ZZN11btMatrix3x311getIdentityEvE14identityMatrix_2E_0_2E_2_2E_0_2E_2;
+ heap32[(r0+8)] = 0;
+ r8 = r8 >> 2;
+ heap32[(r0+9)] = 0;
+ heap32[(r0+10)] = heap32[(r8)];
+ heap32[(r0+11)] = 0;
+ heap32[(r0+12)] = 0;
+ heap32[(r0+13)] = 0;
+ heap32[(r0+14)] = 0;
+ heap32[(r0+15)] = 0;
+ heap8[r7] = r4;
+}
+ heap32[(g0)] = 200;
+ r0 = _ZTV20btDefaultMotionState;
+ _Znwj(i7);
+ r8 = r_g0 >> 2;
+ r0 = (r0 + 8)|0;
+ heap32[(r8)] = r0;
+ heap32[(r8+1)] = 1065353216;
+ heap32[(r8+2)] = 0;
+ heap32[(r8+3)] = 0;
+ heap32[(r8+4)] = 0;
+ heap32[(r8+5)] = 0;
+ heap32[(r8+6)] = 1065353216;
+ heap32[(r8+7)] = 0;
+ heap32[(r8+8)] = 0;
+ heap32[(r8+9)] = 0;
+ heap32[(r8+10)] = 0;
+ heap32[(r8+11)] = 1065353216;
+ heap32[(r8+12)] = 0;
+ heap32[(r8+13)] = 0;
+ heap32[(r8+14)] = -1035468800;
+ r0 = _ZZN11btTransform11getIdentityEvE17identityTransform;
+ heap32[(r8+15)] = 0;
+ r0 = r0 >> 2;
+ heap32[(r8+16)] = 0;
+ heap32[(r8+17)] = heap32[(r0)];
+ heap32[(r8+18)] = heap32[(r0+1)];
+ heap32[(r8+19)] = heap32[(r0+2)];
+ heap32[(r8+20)] = heap32[(r0+3)];
+ heap32[(r8+21)] = heap32[(r0+4)];
+ heap32[(r8+22)] = heap32[(r0+5)];
+ heap32[(r8+23)] = heap32[(r0+6)];
+ heap32[(r8+24)] = heap32[(r0+7)];
+ heap32[(r8+25)] = heap32[(r0+8)];
+ heap32[(r8+26)] = heap32[(r0+9)];
+ heap32[(r8+27)] = heap32[(r0+10)];
+ heap32[(r8+28)] = heap32[(r0+11)];
+ heap32[(r8+29)] = heap32[(r0+12)];
+ heap32[(r8+30)] = heap32[(r0+13)];
+ heap32[(r8+31)] = heap32[(r0+14)];
+ heap32[(r8+32)] = heap32[(r0+15)];
+ heap32[(r8+33)] = 1065353216;
+ heap32[(r8+34)] = 0;
+ heap32[(r8+35)] = 0;
+ heap32[(r8+36)] = 0;
+ heap32[(r8+37)] = 0;
+ heap32[(r8+38)] = 1065353216;
+ heap32[(r8+39)] = 0;
+ heap32[(r8+40)] = 0;
+ heap32[(r8+41)] = 0;
+ heap32[(r8+42)] = 0;
+ heap32[(r8+43)] = 1065353216;
+ heap32[(r8+44)] = 0;
+ heap32[(r8+45)] = 0;
+ heap32[(r8+46)] = -1035468800;
+ heap32[(r8+47)] = 0;
+ heap32[(r8+48)] = 0;
+ r0 = sp + -41416;
+ heap32[(r8+49)] = 0;
+ r8 = r0 >> 2;
+ heap32[(fp+-10354)] = 0;
+ heap32[(r8+1)] = r_g0;
+ heap32[(r8+18)] = r5;
+ heap32[(r8+19)] = 0;
+ heap32[(r8+20)] = 0;
+ heap32[(r8+21)] = 0;
+ heap32[(r8+22)] = 0;
+ heap32[(r8+23)] = 0;
+ heap32[(r8+24)] = 0;
+ heap32[(r8+25)] = 1056964608;
+ heap32[(r8+26)] = 0;
+ heap32[(r8+27)] = 1061997773;
+ r5 = 0;
+ heap32[(r8+28)] = 1065353216;
+ heap8[sp+-41300] = r5;
+ heap32[(r8+30)] = 1000593162;
+ heap32[(r8+31)] = 1008981770;
+ heap32[(r8+32)] = 1008981770;
+ heap32[(r8+33)] = 1008981770;
+ heap32[(r8+2)] = 1065353216;
+ heap32[(r8+3)] = 0;
+ heap32[(r8+4)] = 0;
+ heap32[(r8+5)] = 0;
+ heap32[(r8+6)] = 0;
+ heap32[(r8+7)] = 1065353216;
+ heap32[(r8+8)] = 0;
+ heap32[(r8+9)] = 0;
+ heap32[(r8+10)] = 0;
+ heap32[(r8+11)] = 0;
+ heap32[(r8+12)] = 1065353216;
+ heap32[(r8+13)] = 0;
+ heap32[(r8+14)] = 0;
+ heap32[(r8+15)] = 0;
+ heap32[(r8+16)] = 0;
+ heap32[(r8+17)] = 0;
+ r7 = heap32[(r2)];
+ r7 = (r7 + 1)|0;
+ heap32[(r2)] = r7;
+ heap32[(g0)] = 627;
+ malloc(i7);
+ r7 = r_g0;
+ if(r7 !=0) //_LBB26_145
+{
+ r8 = (r7 + 4)|0;
+ r5 = (r5 - r8)|0;
+ r5 = r5 & 15;
+ r5 = (r7 + r5)|0;
+ r8 = (r5 + 4)|0;
+ r5 = r5 >> 2;
+ heap32[(r5)] = r7;
+ r7 = r8;
+}
+ r5 = r7 >> 2;
+ heap32[(r5+41)] = 1065353216;
+ heap32[(r5+42)] = 1065353216;
+ heap32[(r5+43)] = 1065353216;
+ heap32[(r5+44)] = 0;
+ heap32[(r5+45)] = 0;
+ heap32[(r5+46)] = 1566444395;
+ heap32[(r5+47)] = 0;
+ heap32[(r5+48)] = 0;
+ heap32[(r5+49)] = 0;
+ heap32[(r5+50)] = 0;
+ heap32[(r5+51)] = 1;
+ heap32[(r5+52)] = -1;
+ heap32[(r5+53)] = -1;
+ heap32[(r5+54)] = 1;
+ heap32[(r5+55)] = 0;
+ heap32[(r5+56)] = 1056964608;
+ heap32[(r5+57)] = 0;
+ heap32[(r5+58)] = 1;
+ heap32[(r5+59)] = 0;
+ heap32[(r5+60)] = 1065353216;
+ heap32[(r5+61)] = 0;
+ heap32[(r5+62)] = 0;
+ heap32[(r5+63)] = 0;
+ heap32[(r5+1)] = 1065353216;
+ heap32[(r5+2)] = 0;
+ heap32[(r5+3)] = 0;
+ heap32[(r5+4)] = 0;
+ heap32[(r5+5)] = 0;
+ heap32[(r5+6)] = 1065353216;
+ heap32[(r5+7)] = 0;
+ heap32[(r5+8)] = 0;
+ heap32[(r5+9)] = 0;
+ heap32[(r5+10)] = 0;
+ heap32[(r5+11)] = 1065353216;
+ heap32[(r5+12)] = 0;
+ heap32[(r5+13)] = 0;
+ heap32[(r5+14)] = 0;
+ r8 = _ZTV11btRigidBody;
+ heap32[(r5+15)] = 0;
+ r8 = (r8 + 8)|0;
+ heap32[(r5+16)] = 0;
+ heap32[(r5)] = r8;
+ heap8[r7+492] = r4;
+ heap32[(r5+122)] = 0;
+ heap32[(r5+120)] = 0;
+ heap32[(r5+121)] = 0;
+ heap32[(g0)] = r7;
+ heap32[(g0+1)] = r0;
+ _ZN11btRigidBody14setupRigidBodyERKNS_27btRigidBodyConstructionInfoE(i7);
+ r0 = heap32[(r1+1)];
+ r5 = r0 >> 2;
+ r5 = heap32[(r5)];
+ r5 = r5 >> 2;
+ r5 = heap32[(r5+20)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r7;
+ __FUNCTION_TABLE__[(r5)>>2](i7);
+ r0 = heap32[(r1+17)];
+}
+_161: do {
+ if(r0 >3) //_LBB26_151
+{
+ if(r0 >5) //_LBB26_154
+{
+ if(r0 ==6) //_LBB26_325
+{
+ _ZN13BenchmarkDemo11createTest6Ev(i7);
+ return;
+}
+else{
+ if(r0 ==7) //_LBB26_326
+{
+ _ZN13BenchmarkDemo11createTest6Ev(i7);
+ r0 = sp + -41264;
+ heap32[(g0)] = 8;
+ r1 = r0 >> 2;
+ _Znwj(i7);
+ heap32[(r1+10006)] = r_g0;
+ heap32[(g0)] = r_g0;
+ heap32[(g0+1)] = 0;
+ gettimeofday(i7);
+ heap32[(r1+10000)] = 0;
+ heap32[(r1+10001)] = 0;
+ heap32[(r1+10005)] = 0;
+ heap32[(r1+10004)] = 9999;
+ heap32[(r1+10003)] = 0;
+ heap32[(r1+10002)] = 0;
+ heap32[(r1+10007)] = 1092616192;
+ heap32[(r1+10008)] = 0;
+ heap32[(r1+10009)] = 0;
+ heap32[(r1+10010)] = 1112014848;
+ heap32[(r1+10011)] = 1065353216;
+ f3 = 0;
+_169: while(true){
+ f0 = r3; //fitos r3, f0
+ f1 = 0.025132741779088974;
+ f0 = f0*f1;
+ f1 = 0.5;
+ f0 = f0*f1;
+ heapFloat[(g0)] = f0;
+ sinf(i7);
+ f2 = 1;
+ f1 = f_g0/f2;
+ f2 = f1*f3;
+ heapFloat[(g0)] = f0;
+ cosf(i7);
+ f4 = -f2;
+ f5 = f_g0*f3;
+ f6 = f2*f3;
+ f7 = f4-f2;
+ f8 = f_g0+f2;
+ f8 = f8-f6;
+ f7 = f7-f6;
+ f9 = f5+f2;
+ f9 = f9-f6;
+ f5 = f5+f6;
+ f6 = f7*f4;
+ f10 = f8*f_g0;
+ f5 = f5-f1;
+ f11 = f9*f_g0;
+ f7 = f7*f1;
+ f10 = f6+f10;
+ f4 = f9*f4;
+ r2 = r3 << 4;
+ f0 = f5*f_g0;
+ f7 = f11-f7;
+ f9 = f5*f2;
+ f10 = f10+f4;
+ f5 = f5*f1;
+ r2 = (r0 + r2)|0;
+ f0 = f6+f0;
+ f1 = f8*f1;
+ f6 = f7-f9;
+ f2 = f8*f2;
+ f5 = f10+f5;
+ f7 = 2500;
+ f0 = f0-f1;
+ f1 = f6+f2;
+ r2 = r2 >> 2;
+ f2 = f5*f7;
+ f0 = f0-f4;
+ f1 = f1*f7;
+ heapFloat[(r2+4000)] = f2;
+ f0 = f0*f7;
+ heapFloat[(r2+4001)] = f1;
+ heapFloat[(r2+4002)] = f0;
+ heap32[(r2+4003)] = 0;
+ f1 = heapFloat[(r1+10008)];
+ heapFloat[(r2)] = f1;
+ heap32[(r2+1)] = 1112014848;
+ heap32[(r2+2)] = 0;
+ f1 = f1+f2;
+ heap32[(r2+3)] = 0;
+ f0 = f0+f3;
+ heapFloat[(r2+2000)] = f1;
+ heapFloat[(r2+2002)] = f0;
+ heap32[(r2+2003)] = 0;
+ heap32[(r2+2001)] = -998637568;
+ heap32[(r2+8000)] = 1065353216;
+ heap32[(r2+8001)] = 0;
+ r3 = (r3 + 1)|0;
+ heap32[(r2+8002)] = 0;
+ heap32[(r2+8003)] = 0;
+if(!(r3 !=500)) //_LBB26_327
+{
+break _169;
+}
+}
+ r2 = _ZL10raycastBar;
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = r0;
+ heap32[(g0+2)] = 8000;
+ memcpy(i7);
+ r3 = (r2 + 8000)|0;
+ r4 = (r0 + 8000)|0;
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r4;
+ heap32[(g0+2)] = 8000;
+ memcpy(i7);
+ r3 = (r2 + 16000)|0;
+ r4 = (r0 + 16000)|0;
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r4;
+ heap32[(g0+2)] = 8000;
+ memcpy(i7);
+ r3 = (r2 + 24000)|0;
+ r4 = (r0 + 24000)|0;
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r4;
+ heap32[(g0+2)] = 8000;
+ memcpy(i7);
+ r3 = (r2 + 32000)|0;
+ r0 = (r0 + 32000)|0;
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r0;
+ heap32[(g0+2)] = 8000;
+ memcpy(i7);
+ r0 = r2 >> 2;
+ r2 = heap32[(r1+10000)];
+ heap32[(r0+10000)] = r2;
+ r2 = heap32[(r1+10001)];
+ heap32[(r0+10001)] = r2;
+ r2 = heap32[(r1+10002)];
+ heap32[(r0+10002)] = r2;
+ r2 = heap32[(r1+10003)];
+ heap32[(r0+10003)] = r2;
+ r2 = heap32[(r1+10004)];
+ heap32[(r0+10004)] = r2;
+ r2 = heap32[(r1+10005)];
+ heap32[(r0+10005)] = r2;
+ r2 = heap32[(r1+10006)];
+ r2 = r2 >> 2;
+ r3 = heap32[(r0+10006)];
+ r4 = heap32[(r2+1)];
+ r2 = heap32[(r2)];
+ r3 = r3 >> 2;
+ heap32[(r3)] = r2;
+ heap32[(r3+1)] = r4;
+ heap32[(r0+10007)] = heap32[(r1+10007)];
+ heap32[(r0+10008)] = heap32[(r1+10008)];
+ heap32[(r0+10009)] = heap32[(r1+10009)];
+ heap32[(r0+10010)] = heap32[(r1+10010)];
+ heap32[(r0+10011)] = heap32[(r1+10011)];
+ r0 = heap32[(r1+10006)];
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+else{
+break _161;
+}
+}
+}
+else{
+ if(r0 ==4) //_LBB26_291
+{
+ r3 = heap32[(r2)];
+ r3 = (r3 + 1)|0;
+ heap32[(r2)] = r3;
+ heap32[(g0)] = 127;
+ malloc(i7);
+ r2 = r_g0;
+ if(r2 !=0) //_LBB26_293
+{
+ r3 = 0;
+ r4 = (r2 + 4)|0;
+ r3 = (r3 - r4)|0;
+ r3 = r3 & 15;
+ r3 = (r2 + r3)|0;
+ r4 = (r3 + 4)|0;
+ r3 = r3 >> 2;
+ heap32[(r3)] = r2;
+ r2 = r4;
+}
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = 0;
+ heap32[(g0+2)] = 0;
+ r3 = r2 >> 2;
+ _ZN17btConvexHullShapeC1EPKfii(i7);
+ r4 = heap32[(r3)];
+ r4 = r4 >> 2;
+ r4 = heap32[(r4+6)];
+ r0 = sp + -96;
+ r5 = r0 >> 2;
+ heap32[(fp+-24)] = 1065353216;
+ heap32[(r5+1)] = 1065353216;
+ heap32[(r5+2)] = 1065353216;
+ heap32[(r5+3)] = 0;
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = r0;
+ r0 = 0;
+ __FUNCTION_TABLE__[(r4)>>2](i7);
+_178: while(true){
+ r4 = (r0 * -3)|0;
+ r5 = _ZL7TaruVtx;
+ r4 = r4 << 2;
+ r4 = (r5 + r4)|0;
+ r5 = sp + -80;
+ r4 = r4 >> 2;
+ r7 = r5 >> 2;
+ heap32[(fp+-20)] = heap32[(r4)];
+ heap32[(r7+1)] = heap32[(r4+1)];
+ heap32[(r7+2)] = heap32[(r4+2)];
+ heap32[(r7+3)] = 0;
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = r5;
+ r0 = (r0 + -1)|0;
+ _ZN17btConvexHullShape8addPointERK9btVector3(i7);
+ if(r0 ==-43) //_LBB26_301
+{
+break _178;
+}
+}
+ r4 = sp + -160;
+ r0 = r4 >> 2;
+ heap32[(fp+-40)] = 1065353216;
+ heap32[(r0+1)] = 0;
+ heap32[(r0+2)] = 0;
+ heap32[(r0+3)] = 0;
+ heap32[(r0+4)] = 0;
+ heap32[(r0+5)] = 1065353216;
+ heap32[(r0+6)] = 0;
+ heap32[(r0+7)] = 0;
+ heap32[(r0+8)] = 0;
+ heap32[(r0+9)] = 0;
+ heap32[(r0+10)] = 1065353216;
+ heap32[(r0+11)] = 0;
+ heap32[(r0+12)] = 0;
+ heap32[(r0+13)] = 0;
+ heap32[(r0+14)] = 0;
+ r5 = sp + -176;
+ heap32[(r0+15)] = 0;
+ r7 = r5 >> 2;
+ heap32[(fp+-44)] = 0;
+ heap32[(r7+1)] = 0;
+ heap32[(r7+2)] = 0;
+ heap32[(r7+3)] = 0;
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r7 = heap32[(r3+8)];
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = 1065353216;
+ heap32[(g0+2)] = r5;
+ r3 = 15;
+ f0 = 3;
+ f2 = -18;
+ f3 = 1.5;
+ __FUNCTION_TABLE__[(r7)>>2](i7);
+ f1 = f0;
+_181: while(true){
+ f4 = f3+f0;
+ r5 = 0;
+ r7 = r5;
+_183: while(true){
+ f5 = r7; //fitos r7, f5
+ f5 = f5*f4;
+ f5 = f5+f2;
+ r8 = r5;
+_185: while(true){
+ f6 = r8; //fitos r8, f6
+ f6 = f6*f4;
+ f6 = f6+f2;
+ heapFloat[(r0+12)] = f6;
+ heapFloat[(r0+13)] = f1;
+ heapFloat[(r0+14)] = f5;
+ heap32[(r0+15)] = 0;
+ r9 = heap32[(r1)];
+ r9 = r9 >> 2;
+ r9 = heap32[(r9+2)];
+ heap32[(g0)] = r6;
+ heap32[(g0+1)] = 1065353216;
+ heap32[(g0+2)] = r4;
+ heap32[(g0+3)] = r2;
+ r8 = (r8 + 1)|0;
+ __FUNCTION_TABLE__[(r9)>>2](i7);
+if(!(r8 !=8)) //_LBB26_298
+{
+break _185;
+}
+}
+ r7 = (r7 + 1)|0;
+if(!(r7 !=8)) //_LBB26_297
+{
+break _183;
+}
+}
+ f4 = 1.0099999904632568;
+ f5 = -0.05000000074505806;
+ f4 = f3*f4;
+ f6 = 3;
+ f3 = f3*f5;
+ f5 = 7;
+ f6 = f4+f6;
+ f3 = f3*f5;
+ r3 = (r3 + -1)|0;
+ f1 = f1+f6;
+ f2 = f3+f2;
+ f3 = f4;
+ if(r3 ==0) //_LBB26_165
+{
+break _161;
+}
+else{
+continue _181;
+}
+}
+}
+else{
+ if(r0 ==5) //_LBB26_302
+{
+ r3 = 10;
+ f0 = 20;
+ f1 = 2;
+ f2 = -25;
+_191: while(true){
+ f3 = 3;
+ f4 = 25;
+ f5 = f1+f3;
+ f4 = f0+f4;
+ r0 = 0;
+ r5 = r0;
+_193: while(true){
+ f6 = r5; //fitos r5, f6
+ f6 = f6*f5;
+ f6 = f6+f2;
+ f7 = 5;
+ f6 = f6*f7;
+ f8 = 0;
+ f6 = f6+f8;
+ r7 = r0;
+_195: while(true){
+ r8 = _ZL8nextRand;
+ r8 = r8 >> 2;
+ r9 = heap32[(r8)];
+ r9 = (r9 * 214013)|0;
+ r9 = (r9 + 2531011)|0;
+ r10 = sp + -64;
+ heap32[(r8)] = r9;
+ r8 = r10 >> 2;
+ heap32[(fp+-16)] = 1065353216;
+ heap32[(r8+1)] = 0;
+ heap32[(r8+2)] = 0;
+ heap32[(r8+3)] = 0;
+ heap32[(r8+4)] = 0;
+ heap32[(r8+5)] = 1065353216;
+ heap32[(r8+6)] = 0;
+ heap32[(r8+7)] = 0;
+ f9 = r7; //fitos r7, f9
+ heap32[(r8+8)] = 0;
+ f9 = f9*f5;
+ heap32[(r8+9)] = 0;
+ f9 = f9+f2;
+ heap32[(r8+10)] = 1065353216;
+ f9 = f9*f7;
+ f9 = f9+f8;
+ heap32[(r8+11)] = 0;
+ r9 = r9 >>> 16;
+ heapFloat[(r8+12)] = f9;
+ r9 = r9 & 32767;
+ heapFloat[(r8+13)] = f4;
+ r9 = Math.floor(uint(r9) % uint(9));
+ heapFloat[(r8+14)] = f6;
+ heap32[(r8+15)] = 0;
+if(!(uint(r9) >uint(8))) //_LBB26_321
+{
+ r8 = r4 << r9;
+ r11 = r8 & 7;
+ if(r11 !=0) //_LBB26_309
+{
+ r8 = heap32[(r2)];
+ r8 = (r8 + 1)|0;
+ heap32[(r2)] = r8;
+ r9 = (r9 + 1)|0;
+ f9 = r9; //fitos r9, f9
+ f10 = 0.5;
+ heap32[(g0)] = 71;
+ f9 = f9*f10;
+ f10 = 1.5;
+ malloc(i7);
+ r9 = r_g0;
+ f10 = f9*f10;
+ if(r9 !=0) //_LBB26_311
+{
+ r8 = 0;
+ r11 = (r9 + 4)|0;
+ r8 = (r8 - r11)|0;
+ r8 = r8 & 15;
+ r8 = (r9 + r8)|0;
+ r11 = (r8 + 4)|0;
+ r8 = r8 >> 2;
+ heap32[(r8)] = r9;
+ r9 = r11;
+}
+ r8 = r9 >> 2;
+ heap32[(r8+2)] = 0;
+ heap32[(r8+3)] = 1065353216;
+ heap32[(r8+4)] = 1065353216;
+ heap32[(r8+5)] = 1065353216;
+ r11 = _ZTV10btBoxShape;
+ heap32[(r8+6)] = 0;
+ r11 = (r11 + 8)|0;
+ heap32[(r8+11)] = 1025758986;
+ heap32[(r8)] = r11;
+ f11 = -0.039999999105930328;
+ f10 = f10+f11;
+ heap32[(r8+1)] = 0;
+ heapFloat[(r8+7)] = f10;
+ heapFloat[(r8+8)] = f10;
+ heapFloat[(r8+9)] = f10;
+ heap32[(r8+10)] = 0;
+ r8 = heap32[(r1)];
+ r8 = r8 >> 2;
+ r8 = heap32[(r8+2)];
+ heap32[(g0)] = r6;
+ heapFloat[(g0+1)] = f9;
+ heap32[(g0+2)] = r10;
+ heap32[(g0+3)] = r9;
+ __FUNCTION_TABLE__[(r8)>>2](i7);
+}
+else{
+ r11 = r8 & 56;
+ if(r11 !=0) //_LBB26_313
+{
+ r8 = heap32[(r2)];
+ r8 = (r8 + 1)|0;
+ heap32[(r2)] = r8;
+ r9 = (r9 + -2)|0;
+ heap32[(g0)] = 71;
+ f9 = r9; //fitos r9, f9
+ f10 = 0.5;
+ malloc(i7);
+ r9 = r_g0;
+ f9 = f9*f10;
+ if(r9 !=0) //_LBB26_315
+{
+ r8 = 0;
+ r11 = (r9 + 4)|0;
+ r8 = (r8 - r11)|0;
+ r8 = r8 & 15;
+ r8 = (r9 + r8)|0;
+ r11 = (r8 + 4)|0;
+ r8 = r8 >> 2;
+ heap32[(r8)] = r9;
+ r9 = r11;
+}
+ r8 = r9 >> 2;
+ heap32[(r8+2)] = 0;
+ heap32[(r8+3)] = 1065353216;
+ heap32[(r8+4)] = 1065353216;
+ r11 = _ZTV13btSphereShape;
+ heap32[(r8+5)] = 1065353216;
+ r11 = (r11 + 8)|0;
+ heap32[(r8+6)] = 0;
+ heap32[(r8)] = r11;
+ f10 = 1.5;
+ f10 = f9*f10;
+ heap32[(r8+1)] = 8;
+ heapFloat[(r8+7)] = f10;
+ heapFloat[(r8+11)] = f10;
+ r8 = heap32[(r1)];
+ r8 = r8 >> 2;
+ r8 = heap32[(r8+2)];
+ heap32[(g0)] = r6;
+ heapFloat[(g0+1)] = f9;
+ heap32[(g0+2)] = r10;
+ heap32[(g0+3)] = r9;
+ __FUNCTION_TABLE__[(r8)>>2](i7);
+}
+else{
+ r8 = r8 & 448;
+ if(r8 !=0) //_LBB26_317
+{
+ r8 = heap32[(r2)];
+ r8 = (r8 + 1)|0;
+ heap32[(r2)] = r8;
+ r8 = (r9 + -5)|0;
+ heap32[(g0)] = 75;
+ f9 = r8; //fitos r8, f9
+ f10 = 0.5;
+ malloc(i7);
+ r8 = r_g0;
+ f9 = f9*f10;
+ if(r8 !=0) //_LBB26_319
+{
+ r9 = 0;
+ r11 = (r8 + 4)|0;
+ r9 = (r9 - r11)|0;
+ r9 = r9 & 15;
+ r9 = (r8 + r9)|0;
+ r11 = (r9 + 4)|0;
+ r9 = r9 >> 2;
+ heap32[(r9)] = r8;
+ r8 = r11;
+}
+ r9 = r8 >> 2;
+ heap32[(r9+2)] = 0;
+ heap32[(r9+3)] = 1065353216;
+ heap32[(r9+4)] = 1065353216;
+ heap32[(r9+5)] = 1065353216;
+ r11 = _ZTV14btCapsuleShape;
+ heap32[(r9+6)] = 0;
+ r11 = (r11 + 8)|0;
+ heap32[(r9+11)] = 1025758986;
+ heap32[(r9)] = r11;
+ heap32[(r9+1)] = 10;
+ heap32[(r9+13)] = 1;
+ f11 = f9+f9;
+ f10 = f11*f10;
+ heapFloat[(r9+7)] = f9;
+ heapFloat[(r9+8)] = f10;
+ heapFloat[(r9+9)] = f9;
+ heap32[(r9+10)] = 0;
+ r9 = heap32[(r1)];
+ r9 = r9 >> 2;
+ r9 = heap32[(r9+2)];
+ heap32[(g0)] = r6;
+ heapFloat[(g0+1)] = f9;
+ heap32[(g0+2)] = r10;
+ heap32[(g0+3)] = r8;
+ __FUNCTION_TABLE__[(r9)>>2](i7);
+}
+}
+}
+}
+ r7 = (r7 + 1)|0;
+if(!(r7 !=10)) //_LBB26_305
+{
+break _195;
+}
+}
+ r5 = (r5 + 1)|0;
+if(!(r5 !=10)) //_LBB26_304
+{
+break _193;
+}
+}
+ f4 = 1.1000000238418579;
+ f5 = -0.05000000074505806;
+ f4 = f1*f4;
+ f1 = f1*f5;
+ f5 = 9;
+ f3 = f4+f3;
+ f1 = f1*f5;
+ r3 = (r3 + -1)|0;
+ f0 = f0+f3;
+ f2 = f1+f2;
+ f1 = f4;
+if(!(r3 !=0)) //_LBB26_303
+{
+break _191;
+}
+}
+ _ZN13BenchmarkDemo19createLargeMeshBodyEv(i7);
+ return;
+}
+else{
+break _161;
+}
+}
+}
+}
+else{
+ if(r0 ==1) //_LBB26_156
+{
+ r3 = heap32[(r2)];
+ r3 = (r3 + 1)|0;
+ heap32[(r2)] = r3;
+ heap32[(g0)] = 71;
+ malloc(i7);
+ r2 = r_g0;
+ if(r2 !=0) //_LBB26_158
+{
+ r3 = 0;
+ r4 = (r2 + 4)|0;
+ r3 = (r3 - r4)|0;
+ r3 = r3 & 15;
+ r3 = (r2 + r3)|0;
+ r4 = (r3 + 4)|0;
+ r3 = r3 >> 2;
+ heap32[(r3)] = r2;
+ r2 = r4;
+}
+ r3 = r2 >> 2;
+ heap32[(r3+2)] = 0;
+ heap32[(r3+3)] = 1065353216;
+ heap32[(r3+4)] = 1065353216;
+ heap32[(r3+5)] = 1065353216;
+ r4 = _ZTV10btBoxShape;
+ heap32[(r3+6)] = 0;
+ r4 = (r4 + 8)|0;
+ heap32[(r3+11)] = 1025758986;
+ heap32[(r3)] = r4;
+ heap32[(r3+1)] = 0;
+ heap32[(r3+7)] = 1064682127;
+ heap32[(r3+8)] = 1064682127;
+ heap32[(r3+9)] = 1064682127;
+ r4 = sp + -1152;
+ heap32[(r3+10)] = 0;
+ r3 = r4 >> 2;
+ heap32[(fp+-288)] = 0;
+ heap32[(r3+1)] = 0;
+ heap32[(r3+2)] = 0;
+ heap32[(r3+3)] = 0;
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = 1073741824;
+ heap32[(g0+2)] = r4;
+ _ZNK10btBoxShape21calculateLocalInertiaEfR9btVector3(i7);
+ r3 = sp + -1216;
+ r4 = r3 >> 2;
+ heap32[(fp+-304)] = 1065353216;
+ heap32[(r4+1)] = 0;
+ heap32[(r4+2)] = 0;
+ heap32[(r4+3)] = 0;
+ heap32[(r4+4)] = 0;
+ heap32[(r4+5)] = 1065353216;
+ heap32[(r4+6)] = 0;
+ heap32[(r4+7)] = 0;
+ heap32[(r4+8)] = 0;
+ heap32[(r4+9)] = 0;
+ heap32[(r4+10)] = 1065353216;
+ heap32[(r4+11)] = 0;
+ heap32[(r4+12)] = 0;
+ heap32[(r4+13)] = 0;
+ r0 = 47;
+ f0 = -12;
+ f1 = 2;
+ heap32[(r4+14)] = 0;
+ heap32[(r4+15)] = 0;
+_225: while(true){
+ r5 = 0;
+ r7 = r5;
+_227: while(true){
+ f2 = r7; //fitos r7, f2
+ f3 = 3;
+ f2 = f2*f3;
+ f2 = f2+f0;
+ r8 = r5;
+_229: while(true){
+ f4 = r8; //fitos r8, f4
+ f4 = f4*f3;
+ f4 = f4+f0;
+ heapFloat[(r4+12)] = f4;
+ heapFloat[(r4+13)] = f1;
+ heapFloat[(r4+14)] = f2;
+ heap32[(r4+15)] = 0;
+ r9 = heap32[(r1)];
+ r9 = r9 >> 2;
+ r9 = heap32[(r9+2)];
+ heap32[(g0)] = r6;
+ heap32[(g0+1)] = 1073741824;
+ heap32[(g0+2)] = r3;
+ heap32[(g0+3)] = r2;
+ r8 = (r8 + 1)|0;
+ __FUNCTION_TABLE__[(r9)>>2](i7);
+if(!(r8 !=8)) //_LBB26_161
+{
+break _229;
+}
+}
+ r7 = (r7 + 1)|0;
+if(!(r7 !=8)) //_LBB26_160
+{
+break _227;
+}
+}
+ f2 = -0.34999999403953552;
+ r0 = (r0 + -1)|0;
+ f1 = f1+f3;
+ f0 = f0+f2;
+ if(r0 ==0) //_LBB26_165
+{
+break _161;
+}
+else{
+continue _225;
+}
+}
+}
+else{
+ if(r0 ==2) //_LBB26_166
+{
+ r3 = heap32[(r2)];
+ r3 = (r3 + 1)|0;
+ heap32[(r2)] = r3;
+ heap32[(g0)] = 71;
+ malloc(i7);
+ r3 = r_g0;
+ if(r3 !=0) //_LBB26_168
+{
+ r4 = 0;
+ r0 = (r3 + 4)|0;
+ r4 = (r4 - r0)|0;
+ r4 = r4 & 15;
+ r4 = (r3 + r4)|0;
+ r0 = (r4 + 4)|0;
+ r4 = r4 >> 2;
+ heap32[(r4)] = r3;
+ r3 = r0;
+}
+ r4 = r3 >> 2;
+ heap32[(r4+2)] = 0;
+ heap32[(r4+3)] = 1065353216;
+ heap32[(r4+4)] = 1065353216;
+ heap32[(r4+5)] = 1065353216;
+ r0 = _ZTV10btBoxShape;
+ heap32[(r4+6)] = 0;
+ r0 = (r0 + 8)|0;
+ heap32[(r4+11)] = 1025758986;
+ heap32[(r4)] = r0;
+ heap32[(r4+1)] = 0;
+ heap32[(r4+7)] = 1064682127;
+ heap32[(r4+8)] = 1064682127;
+ heap32[(r4+9)] = 1064682127;
+ r5 = sp + -1024;
+ heap32[(r4+10)] = 0;
+ r4 = r5 >> 2;
+ heap32[(fp+-256)] = 1065353216;
+ heap32[(r4+1)] = 0;
+ heap32[(r4+2)] = 0;
+ heap32[(r4+3)] = 0;
+ heap32[(r4+4)] = 0;
+ heap32[(r4+5)] = 1065353216;
+ heap32[(r4+6)] = 0;
+ heap32[(r4+7)] = 0;
+ heap32[(r4+8)] = 0;
+ heap32[(r4+9)] = 0;
+ heap32[(r4+10)] = 1065353216;
+ heap32[(r4+11)] = 0;
+ heap32[(r4+12)] = 0;
+ heap32[(r4+13)] = 0;
+ heap32[(r4+14)] = 0;
+ r7 = sp + -1040;
+ heap32[(r4+15)] = 0;
+ r8 = r7 >> 2;
+ heap32[(fp+-260)] = 0;
+ heap32[(r8+1)] = 0;
+ heap32[(r8+2)] = 0;
+ heap32[(r8+3)] = 0;
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = 1065353216;
+ heap32[(g0+2)] = r7;
+ r7 = 12;
+ f0 = -12.240598678588867;
+ f1 = 1;
+ _ZNK10btBoxShape21calculateLocalInertiaEfR9btVector3(i7);
+ f2 = f0;
+ f8 = -20;
+_239: while(true){
+if(!(r7 <1)) //_LBB26_173
+{
+ f4 = 0;
+ f3 = f1+f4;
+ r8 = 0;
+ r9 = r8;
+_243: while(true){
+ f5 = r9; //fitos r9, f5
+ f6 = 2.0400998592376709;
+ f5 = f5*f6;
+ f5 = f5+f0;
+ f5 = f5+f4;
+ r10 = r8;
+_245: while(true){
+ f7 = r10; //fitos r10, f7
+ f7 = f7*f6;
+ f7 = f7+f2;
+ f7 = f7+f8;
+ heapFloat[(r4+12)] = f7;
+ heapFloat[(r4+13)] = f3;
+ heapFloat[(r4+14)] = f5;
+ heap32[(r4+15)] = 0;
+ r11 = heap32[(r1)];
+ r11 = r11 >> 2;
+ r11 = heap32[(r11+2)];
+ heap32[(g0)] = r6;
+ heap32[(g0+1)] = 1065353216;
+ heap32[(g0+2)] = r5;
+ heap32[(g0+3)] = r3;
+ r10 = (r10 + 1)|0;
+ __FUNCTION_TABLE__[(r11)>>2](i7);
+if(!(r7 !=r10)) //_LBB26_171
+{
+break _245;
+}
+}
+ r9 = (r9 + 1)|0;
+if(!(r7 !=r9)) //_LBB26_170
+{
+break _243;
+}
+}
+}
+ f3 = 2.0400998592376709;
+ f4 = 1.0199999809265137;
+ r7 = (r7 + -1)|0;
+ f1 = f1+f3;
+ f0 = f0+f4;
+ f2 = f2+f4;
+ if(r7 ==0) //_LBB26_176
+{
+break _239;
+}
+}
+ r3 = sp + -1136;
+ r4 = r3 >> 2;
+ heap32[(fp+-284)] = 1065353216;
+ heap32[(r4+1)] = 1065353216;
+ heap32[(r4+2)] = 1065353216;
+ r5 = sp + -1120;
+ heap32[(r4+3)] = 0;
+ r4 = r5 >> 2;
+ heap32[(fp+-280)] = -1073741824;
+ heap32[(r4+1)] = 0;
+ heap32[(r4+2)] = 0;
+ heap32[(r4+3)] = 0;
+ heap32[(g0)] = r5;
+ heap32[(g0+1)] = r3;
+ r3 = sp + -1104;
+ _ZN13BenchmarkDemo10createWallERK9btVector3iS2_(i7);
+ r4 = r3 >> 2;
+ heap32[(fp+-276)] = 1065353216;
+ heap32[(r4+1)] = 1065353216;
+ heap32[(r4+2)] = 1065353216;
+ r5 = sp + -1088;
+ heap32[(r4+3)] = 0;
+ r4 = r5 >> 2;
+ heap32[(fp+-272)] = 1082130432;
+ heap32[(r4+1)] = 0;
+ heap32[(r4+2)] = 0;
+ heap32[(r4+3)] = 0;
+ heap32[(g0)] = r5;
+ heap32[(g0+1)] = r3;
+ r3 = sp + -1072;
+ _ZN13BenchmarkDemo10createWallERK9btVector3iS2_(i7);
+ r4 = r3 >> 2;
+ heap32[(fp+-268)] = 1065353216;
+ heap32[(r4+1)] = 1065353216;
+ heap32[(r4+2)] = 1065353216;
+ r5 = sp + -1056;
+ heap32[(r4+3)] = 0;
+ r4 = r5 >> 2;
+ heap32[(fp+-264)] = 1092616192;
+ heap32[(r4+1)] = 0;
+ heap32[(r4+2)] = 0;
+ heap32[(r4+3)] = 0;
+ heap32[(g0)] = r5;
+ heap32[(g0+1)] = r3;
+ _ZN13BenchmarkDemo10createWallERK9btVector3iS2_(i7);
+ r3 = heap32[(r2)];
+ r3 = (r3 + 1)|0;
+ heap32[(r2)] = r3;
+ heap32[(g0)] = 71;
+ malloc(i7);
+ r2 = r_g0;
+ if(r2 !=0) //_LBB26_178
+{
+ r3 = 0;
+ r4 = (r2 + 4)|0;
+ r3 = (r3 - r4)|0;
+ r3 = r3 & 15;
+ r3 = (r2 + r3)|0;
+ r4 = (r3 + 4)|0;
+ r3 = r3 >> 2;
+ heap32[(r3)] = r2;
+ r2 = r4;
+}
+ r3 = r2 >> 2;
+ heap32[(r3+2)] = 0;
+ heap32[(r3+3)] = 1065353216;
+ heap32[(r3+4)] = 1065353216;
+ heap32[(r3+5)] = 1065353216;
+ heap32[(r3+6)] = 0;
+ heap32[(r3+11)] = 1025758986;
+ heap32[(r3)] = r0;
+ heap32[(r3+1)] = 0;
+ heap32[(r3+7)] = 1064682127;
+ heap32[(r3+8)] = 1064682127;
+ heap32[(r3+9)] = 1064682127;
+ r4 = sp + -944;
+ heap32[(r3+10)] = 0;
+ r3 = r4 >> 2;
+ heap32[(fp+-236)] = 1065353216;
+ heap32[(r3+1)] = 0;
+ heap32[(r3+2)] = 0;
+ heap32[(r3+3)] = 0;
+ heap32[(r3+4)] = 0;
+ heap32[(r3+5)] = 1065353216;
+ heap32[(r3+6)] = 0;
+ heap32[(r3+7)] = 0;
+ heap32[(r3+8)] = 0;
+ heap32[(r3+9)] = 0;
+ heap32[(r3+10)] = 1065353216;
+ heap32[(r3+11)] = 0;
+ heap32[(r3+12)] = 0;
+ heap32[(r3+13)] = 0;
+ heap32[(r3+14)] = 0;
+ r0 = sp + -960;
+ heap32[(r3+15)] = 0;
+ r5 = r0 >> 2;
+ heap32[(fp+-240)] = 0;
+ heap32[(r5+1)] = 0;
+ heap32[(r5+2)] = 0;
+ heap32[(r5+3)] = 0;
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = 1065353216;
+ heap32[(g0+2)] = r0;
+ r0 = 8;
+ f0 = 1;
+ f1 = 0;
+ _ZNK10btBoxShape21calculateLocalInertiaEfR9btVector3(i7);
+ f2 = f1;
+ f3 = f0;
+ f4 = f1;
+_253: while(true){
+ r5 = 24;
+_255: while(true){
+ f5 = 9.9312677383422852;
+ f6 = 0;
+ f7 = f3*f0;
+ f8 = f4*f6;
+ f9 = f3*f5;
+ f10 = f1*f6;
+ f7 = f8+f7;
+ f11 = f2*f5;
+ f9 = f10+f9;
+ f12 = f2*f0;
+ f13 = f1*f0;
+ f14 = f2*f6;
+ f7 = f7+f11;
+ f9 = f9-f12;
+ f11 = f13+f14;
+ f12 = f4*f5;
+ f5 = f1*f5;
+ f13 = f4*f0;
+ f11 = f11-f12;
+ f12 = f4*f4;
+ f15 = f3*f3;
+ f16 = f4*f7;
+ f17 = f1*f9;
+ f5 = f5+f13;
+ f13 = f3*f6;
+ f5 = f5-f13;
+ f12 = f12+f15;
+ f15 = f2*f2;
+ f18 = f3*f7;
+ f19 = f1*f11;
+ f16 = f16+f17;
+ f17 = f2*f11;
+ f12 = f12+f15;
+ f15 = f1*f1;
+ f7 = f2*f7;
+ f20 = f1*f5;
+ f18 = f18+f19;
+ f19 = f4*f5;
+ f16 = f16-f17;
+ f5 = f3*f5;
+ f17 = 2;
+ f12 = f12+f15;
+ f7 = f7+f20;
+ f15 = f3*f9;
+ f18 = f18-f19;
+ f9 = f2*f9;
+ f5 = f16+f5;
+ f16 = 25;
+ f12 = f17/f12;
+ f9 = f18+f9;
+ f5 = f5+f16;
+ f7 = f7-f15;
+ f11 = f4*f11;
+ f15 = f2*f12;
+ f16 = f3*f12;
+ f7 = f7+f11;
+ f9 = f9+f6;
+ heapFloat[(r3+12)] = f5;
+ f5 = f3*f16;
+ f11 = f2*f15;
+ f7 = f7+f6;
+ heapFloat[(r3+13)] = f9;
+ heapFloat[(r3+14)] = f7;
+ f7 = 1;
+ f9 = f5+f11;
+ f18 = f4*f16;
+ f19 = f1*f15;
+ f9 = f7-f9;
+ heap32[(r3+15)] = 0;
+ f20 = f4*f15;
+ f16 = f1*f16;
+ f21 = f18-f19;
+ heapFloat[(fp+-236)] = f9;
+ f9 = f4*f12;
+ f12 = f20+f16;
+ heapFloat[(r3+1)] = f21;
+ f21 = f4*f9;
+ heapFloat[(r3+2)] = f12;
+ f11 = f21+f11;
+ f12 = f18+f19;
+ heap32[(r3+3)] = 0;
+ f15 = f3*f15;
+ f9 = f1*f9;
+ f11 = f7-f11;
+ heapFloat[(r3+4)] = f12;
+ f12 = f15-f9;
+ heapFloat[(r3+5)] = f11;
+ heapFloat[(r3+6)] = f12;
+ f11 = f20-f16;
+ heap32[(r3+7)] = 0;
+ f5 = f21+f5;
+ f9 = f15+f9;
+ heapFloat[(r3+8)] = f11;
+ f5 = f7-f5;
+ heapFloat[(r3+9)] = f9;
+ heapFloat[(r3+10)] = f5;
+ heap32[(r3+11)] = 0;
+ r7 = heap32[(r1)];
+ r7 = r7 >> 2;
+ f5 = 0.99144488573074341;
+ f7 = 0.13052619993686676;
+ r7 = heap32[(r7+2)];
+ f9 = f1*f5;
+ f11 = f2*f5;
+ f12 = f4*f5;
+ f1 = f1*f7;
+ f5 = f3*f5;
+ f1 = f1+f5;
+ f5 = f10+f12;
+ f9 = f9-f8;
+ f3 = f3*f7;
+ f10 = f10+f11;
+ f4 = f4*f7;
+ f3 = f9-f3;
+ f4 = f10+f4;
+ f9 = f1+f14;
+ heap32[(g0)] = r6;
+ heap32[(g0+1)] = 1065353216;
+ heap32[(g0+2)] = r4;
+ heap32[(g0+3)] = r2;
+ f5 = f5+f13;
+ f7 = f2*f7;
+ r5 = (r5 + -1)|0;
+ f1 = f3-f14;
+ f2 = f4-f13;
+ f3 = f9-f8;
+ f4 = f5-f7;
+ __FUNCTION_TABLE__[(r7)>>2](i7);
+if(!(r5 !=0)) //_LBB26_180
+{
+break _255;
+}
+}
+ f5 = 0.99785894155502319;
+ f7 = 0.065403133630752563;
+ f8 = f4*f5;
+ f9 = f1*f6;
+ f10 = f2*f5;
+ f11 = f1*f7;
+ f12 = f3*f5;
+ f1 = f1*f5;
+ f5 = f4*f6;
+ f8 = f9+f8;
+ f13 = f3*f6;
+ f11 = f11+f12;
+ f6 = f2*f6;
+ f9 = f9+f10;
+ f4 = f4*f7;
+ f1 = f1-f5;
+ f3 = f3*f7;
+ f10 = f11+f6;
+ f9 = f9+f4;
+ f1 = f1-f3;
+ f3 = f8+f13;
+ f2 = f2*f7;
+ r0 = (r0 + -1)|0;
+ f4 = f3-f2;
+ f3 = f10-f5;
+ f2 = f9-f13;
+ f1 = f1-f6;
+ f0 = f0+f17;
+ if(r0 ==0) //_LBB26_165
+{
+break _161;
+}
+else{
+continue _253;
+}
+}
+}
+else{
+ if(r0 ==3) //_LBB26_183
+{
+ r3 = -16;
+ r0 = 16;
+ f0 = 0;
+ f1 = 1;
+ f2 = f0;
+_260: while(true){
+ f3 = r3; //fitos r3, f3
+ f4 = 6;
+ f3 = f3*f4;
+ f5 = 0.5;
+ f6 = 3.5;
+ f7 = 4.2000002861022949;
+ f8 = 5.5999999046325684;
+ f9 = 2.2749998569488525;
+ f10 = 0.69999998807907104;
+ f11 = 5.0750002861022949;
+ f3 = f3*f5;
+ f5 = f2+f0;
+ f6 = f1+f6;
+ f7 = f1+f7;
+ f8 = f1+f8;
+ f9 = f1+f9;
+ f10 = f1+f10;
+ f11 = f1+f11;
+ r5 = 0;
+_262: while(true){
+ heap32[(g0)] = 136;
+ _Znwj(i7);
+ r7 = r_g0;
+ r8 = _ZTV7RagDoll;
+ r9 = r7 >> 2;
+ r10 = heap32[(r1+1)];
+ r8 = (r8 + 8)|0;
+ heap32[(r9)] = r8;
+ heap32[(r9+1)] = r10;
+ r8 = heap32[(r2)];
+ r9 = (r8 + 1)|0;
+ heap32[(r2)] = r9;
+ f12 = r5; //fitos r5, f12
+ heap32[(g0)] = 75;
+ f12 = f12*f4;
+ malloc(i7);
+ r9 = r_g0;
+ f12 = f12+f3;
+ if(r9 !=0) //_LBB26_187
+{
+ r10 = 0;
+ r11 = (r9 + 4)|0;
+ r10 = (r10 - r11)|0;
+ r10 = r10 & 15;
+ r10 = (r9 + r10)|0;
+ r11 = (r10 + 4)|0;
+ r10 = r10 >> 2;
+ heap32[(r10)] = r9;
+ r9 = r11;
+}
+ r10 = r9 >> 2;
+ heap32[(r10+2)] = 0;
+ heap32[(r10+3)] = 1065353216;
+ heap32[(r10+4)] = 1065353216;
+ heap32[(r10+5)] = 1065353216;
+ r11 = _ZTV14btCapsuleShape;
+ heap32[(r10+6)] = 0;
+ r11 = (r11 + 8)|0;
+ heap32[(r10+11)] = 1025758986;
+ heap32[(r10)] = r11;
+ heap32[(r10+1)] = 10;
+ heap32[(r10+13)] = 1;
+ heap32[(r10+7)] = 1057384039;
+ heap32[(r10+8)] = 1051931443;
+ heap32[(r10+9)] = 1057384039;
+ r12 = r7 >> 2;
+ heap32[(r10+10)] = 0;
+ r10 = (r8 + 2)|0;
+ heap32[(r12+2)] = r9;
+ heap32[(r2)] = r10;
+ heap32[(g0)] = 75;
+ malloc(i7);
+ r9 = r_g0;
+ if(r9 !=0) //_LBB26_190
+{
+ r10 = 0;
+ r13 = (r9 + 4)|0;
+ r10 = (r10 - r13)|0;
+ r10 = r10 & 15;
+ r10 = (r9 + r10)|0;
+ r13 = (r10 + 4)|0;
+ r10 = r10 >> 2;
+ heap32[(r10)] = r9;
+ r9 = r13;
+}
+ r10 = r9 >> 2;
+ heap32[(r10+2)] = 0;
+ heap32[(r10+3)] = 1065353216;
+ heap32[(r10+4)] = 1065353216;
+ heap32[(r10+5)] = 1065353216;
+ heap32[(r10+6)] = 0;
+ heap32[(r10+11)] = 1025758986;
+ heap32[(r10)] = r11;
+ heap32[(r10+1)] = 10;
+ heap32[(r10+13)] = 1;
+ heap32[(r10+7)] = 1057384039;
+ heap32[(r10+8)] = 1056629064;
+ heap32[(r10+9)] = 1057384039;
+ heap32[(r10+10)] = 0;
+ r10 = (r8 + 3)|0;
+ heap32[(r12+3)] = r9;
+ heap32[(r2)] = r10;
+ heap32[(g0)] = 75;
+ malloc(i7);
+ r9 = r_g0;
+ if(r9 !=0) //_LBB26_193
+{
+ r10 = 0;
+ r13 = (r9 + 4)|0;
+ r10 = (r10 - r13)|0;
+ r10 = r10 & 15;
+ r10 = (r9 + r10)|0;
+ r13 = (r10 + 4)|0;
+ r10 = r10 >> 2;
+ heap32[(r10)] = r9;
+ r9 = r13;
+}
+ r10 = r9 >> 2;
+ heap32[(r10+2)] = 0;
+ heap32[(r10+3)] = 1065353216;
+ heap32[(r10+4)] = 1065353216;
+ heap32[(r10+5)] = 1065353216;
+ heap32[(r10+6)] = 0;
+ heap32[(r10+11)] = 1025758986;
+ heap32[(r10)] = r11;
+ heap32[(r10+1)] = 10;
+ heap32[(r10+13)] = 1;
+ heap32[(r10+7)] = 1051931443;
+ heap32[(r10+8)] = 1035154227;
+ heap32[(r10+9)] = 1051931443;
+ heap32[(r10+10)] = 0;
+ r10 = (r8 + 4)|0;
+ heap32[(r12+4)] = r9;
+ heap32[(r2)] = r10;
+ heap32[(g0)] = 75;
+ malloc(i7);
+ r9 = r_g0;
+ if(r9 !=0) //_LBB26_196
+{
+ r10 = 0;
+ r13 = (r9 + 4)|0;
+ r10 = (r10 - r13)|0;
+ r10 = r10 & 15;
+ r10 = (r9 + r10)|0;
+ r13 = (r10 + 4)|0;
+ r10 = r10 >> 2;
+ heap32[(r10)] = r9;
+ r9 = r13;
+}
+ r10 = r9 >> 2;
+ heap32[(r10+2)] = 0;
+ heap32[(r10+3)] = 1065353216;
+ heap32[(r10+4)] = 1065353216;
+ heap32[(r10+5)] = 1065353216;
+ heap32[(r10+6)] = 0;
+ heap32[(r10+11)] = 1025758986;
+ heap32[(r10)] = r11;
+ heap32[(r10+1)] = 10;
+ heap32[(r10+13)] = 1;
+ heap32[(r10+7)] = 1048240456;
+ heap32[(r10+8)] = 1061788057;
+ heap32[(r10+9)] = 1048240456;
+ heap32[(r10+10)] = 0;
+ r10 = (r8 + 5)|0;
+ heap32[(r12+5)] = r9;
+ heap32[(r2)] = r10;
+ heap32[(g0)] = 75;
+ malloc(i7);
+ r9 = r_g0;
+ if(r9 !=0) //_LBB26_199
+{
+ r10 = 0;
+ r13 = (r9 + 4)|0;
+ r10 = (r10 - r13)|0;
+ r10 = r10 & 15;
+ r10 = (r9 + r10)|0;
+ r13 = (r10 + 4)|0;
+ r10 = r10 >> 2;
+ heap32[(r10)] = r9;
+ r9 = r13;
+}
+ r10 = r9 >> 2;
+ heap32[(r10+2)] = 0;
+ heap32[(r10+3)] = 1065353216;
+ heap32[(r10+4)] = 1065353216;
+ heap32[(r10+5)] = 1065353216;
+ heap32[(r10+6)] = 0;
+ heap32[(r10+11)] = 1025758986;
+ heap32[(r10)] = r11;
+ heap32[(r10+1)] = 10;
+ heap32[(r10+13)] = 1;
+ heap32[(r10+7)] = 1043542835;
+ heap32[(r10+8)] = 1059439248;
+ heap32[(r10+9)] = 1043542835;
+ heap32[(r10+10)] = 0;
+ r10 = (r8 + 6)|0;
+ heap32[(r12+6)] = r9;
+ heap32[(r2)] = r10;
+ heap32[(g0)] = 75;
+ malloc(i7);
+ r9 = r_g0;
+ if(r9 !=0) //_LBB26_202
+{
+ r10 = 0;
+ r13 = (r9 + 4)|0;
+ r10 = (r10 - r13)|0;
+ r10 = r10 & 15;
+ r10 = (r9 + r10)|0;
+ r13 = (r10 + 4)|0;
+ r10 = r10 >> 2;
+ heap32[(r10)] = r9;
+ r9 = r13;
+}
+ r10 = r9 >> 2;
+ heap32[(r10+2)] = 0;
+ heap32[(r10+3)] = 1065353216;
+ heap32[(r10+4)] = 1065353216;
+ heap32[(r10+5)] = 1065353216;
+ heap32[(r10+6)] = 0;
+ heap32[(r10+11)] = 1025758986;
+ heap32[(r10)] = r11;
+ heap32[(r10+1)] = 10;
+ heap32[(r10+13)] = 1;
+ heap32[(r10+7)] = 1048240456;
+ heap32[(r10+8)] = 1061788057;
+ heap32[(r10+9)] = 1048240456;
+ heap32[(r10+10)] = 0;
+ r10 = (r8 + 7)|0;
+ heap32[(r12+7)] = r9;
+ heap32[(r2)] = r10;
+ heap32[(g0)] = 75;
+ malloc(i7);
+ r9 = r_g0;
+ if(r9 !=0) //_LBB26_205
+{
+ r10 = 0;
+ r13 = (r9 + 4)|0;
+ r10 = (r10 - r13)|0;
+ r10 = r10 & 15;
+ r10 = (r9 + r10)|0;
+ r13 = (r10 + 4)|0;
+ r10 = r10 >> 2;
+ heap32[(r10)] = r9;
+ r9 = r13;
+}
+ r10 = r9 >> 2;
+ heap32[(r10+2)] = 0;
+ heap32[(r10+3)] = 1065353216;
+ heap32[(r10+4)] = 1065353216;
+ heap32[(r10+5)] = 1065353216;
+ heap32[(r10+6)] = 0;
+ heap32[(r10+11)] = 1025758986;
+ heap32[(r10)] = r11;
+ heap32[(r10+1)] = 10;
+ heap32[(r10+13)] = 1;
+ heap32[(r10+7)] = 1043542835;
+ heap32[(r10+8)] = 1059439248;
+ heap32[(r10+9)] = 1043542835;
+ heap32[(r10+10)] = 0;
+ r10 = (r8 + 8)|0;
+ heap32[(r12+8)] = r9;
+ heap32[(r2)] = r10;
+ heap32[(g0)] = 75;
+ malloc(i7);
+ r9 = r_g0;
+ if(r9 !=0) //_LBB26_208
+{
+ r10 = 0;
+ r13 = (r9 + 4)|0;
+ r10 = (r10 - r13)|0;
+ r10 = r10 & 15;
+ r10 = (r9 + r10)|0;
+ r13 = (r10 + 4)|0;
+ r10 = r10 >> 2;
+ heap32[(r10)] = r9;
+ r9 = r13;
+}
+ r10 = r9 >> 2;
+ heap32[(r10+2)] = 0;
+ heap32[(r10+3)] = 1065353216;
+ heap32[(r10+4)] = 1065353216;
+ heap32[(r10+5)] = 1065353216;
+ heap32[(r10+6)] = 0;
+ heap32[(r10+11)] = 1025758986;
+ heap32[(r10)] = r11;
+ heap32[(r10+1)] = 10;
+ heap32[(r10+13)] = 1;
+ heap32[(r10+7)] = 1043542835;
+ heap32[(r10+8)] = 1058264843;
+ heap32[(r10+9)] = 1043542835;
+ heap32[(r10+10)] = 0;
+ r10 = (r8 + 9)|0;
+ heap32[(r12+9)] = r9;
+ heap32[(r2)] = r10;
+ heap32[(g0)] = 75;
+ malloc(i7);
+ r9 = r_g0;
+ if(r9 !=0) //_LBB26_211
+{
+ r10 = 0;
+ r13 = (r9 + 4)|0;
+ r10 = (r10 - r13)|0;
+ r10 = r10 & 15;
+ r10 = (r9 + r10)|0;
+ r13 = (r10 + 4)|0;
+ r10 = r10 >> 2;
+ heap32[(r10)] = r9;
+ r9 = r13;
+}
+ r10 = r9 >> 2;
+ heap32[(r10+2)] = 0;
+ heap32[(r10+3)] = 1065353216;
+ heap32[(r10+4)] = 1065353216;
+ heap32[(r10+5)] = 1065353216;
+ heap32[(r10+6)] = 0;
+ heap32[(r10+11)] = 1025758986;
+ heap32[(r10)] = r11;
+ heap32[(r10+1)] = 10;
+ heap32[(r10+13)] = 1;
+ heap32[(r10+7)] = 1041194025;
+ heap32[(r10+8)] = 1054867456;
+ heap32[(r10+9)] = 1041194025;
+ heap32[(r10+10)] = 0;
+ r10 = (r8 + 10)|0;
+ heap32[(r12+10)] = r9;
+ heap32[(r2)] = r10;
+ heap32[(g0)] = 75;
+ malloc(i7);
+ r9 = r_g0;
+ if(r9 !=0) //_LBB26_214
+{
+ r10 = 0;
+ r13 = (r9 + 4)|0;
+ r10 = (r10 - r13)|0;
+ r10 = r10 & 15;
+ r10 = (r9 + r10)|0;
+ r13 = (r10 + 4)|0;
+ r10 = r10 >> 2;
+ heap32[(r10)] = r9;
+ r9 = r13;
+}
+ r10 = r9 >> 2;
+ heap32[(r10+2)] = 0;
+ heap32[(r10+3)] = 1065353216;
+ heap32[(r10+4)] = 1065353216;
+ heap32[(r10+5)] = 1065353216;
+ heap32[(r10+6)] = 0;
+ heap32[(r10+11)] = 1025758986;
+ heap32[(r10)] = r11;
+ heap32[(r10+1)] = 10;
+ heap32[(r10+13)] = 1;
+ heap32[(r10+7)] = 1043542835;
+ heap32[(r10+8)] = 1058264843;
+ heap32[(r10+9)] = 1043542835;
+ heap32[(r10+10)] = 0;
+ r8 = (r8 + 11)|0;
+ heap32[(r12+11)] = r9;
+ heap32[(r2)] = r8;
+ heap32[(g0)] = 75;
+ malloc(i7);
+ r8 = r_g0;
+ if(r8 !=0) //_LBB26_217
+{
+ r9 = 0;
+ r10 = (r8 + 4)|0;
+ r9 = (r9 - r10)|0;
+ r9 = r9 & 15;
+ r9 = (r8 + r9)|0;
+ r10 = (r9 + 4)|0;
+ r9 = r9 >> 2;
+ heap32[(r9)] = r8;
+ r8 = r10;
+}
+ r9 = r8 >> 2;
+ heap32[(r9+2)] = 0;
+ heap32[(r9+3)] = 1065353216;
+ heap32[(r9+4)] = 1065353216;
+ heap32[(r9+5)] = 1065353216;
+ heap32[(r9+6)] = 0;
+ heap32[(r9+11)] = 1025758986;
+ heap32[(r9)] = r11;
+ heap32[(r9+1)] = 10;
+ heap32[(r9+13)] = 1;
+ heap32[(r9+7)] = 1041194025;
+ heap32[(r9+8)] = 1054867456;
+ heap32[(r9+9)] = 1041194025;
+ heap32[(r9+10)] = 0;
+ heap32[(r12+12)] = r8;
+ r8 = heap32[(r12+2)];
+ r9 = sp + -880;
+ r10 = r9 >> 2;
+ heap32[(fp+-220)] = 1065353216;
+ heap32[(r10+1)] = 0;
+ heap32[(r10+2)] = 0;
+ heap32[(r10+3)] = 0;
+ heap32[(r10+4)] = 0;
+ heap32[(r10+5)] = 1065353216;
+ heap32[(r10+6)] = 0;
+ heap32[(r10+7)] = 0;
+ heap32[(r10+8)] = 0;
+ heap32[(r10+9)] = 0;
+ heap32[(r10+10)] = 1065353216;
+ f13 = 0;
+ f13 = f12+f13;
+ heap32[(r10+11)] = 0;
+ heapFloat[(r10+12)] = f13;
+ heapFloat[(r10+13)] = f6;
+ heapFloat[(r10+14)] = f5;
+ heap32[(r10+15)] = 0;
+ heap32[(g0)] = r7;
+ heap32[(g0+1)] = r9;
+ heap32[(g0+2)] = r8;
+ _ZN7RagDoll20localCreateRigidBodyEfRK11btTransformP16btCollisionShape(i7);
+ heap32[(r12+13)] = r_g0;
+ r8 = heap32[(r12+3)];
+ r9 = sp + -816;
+ r10 = r9 >> 2;
+ heap32[(fp+-204)] = 1065353216;
+ heap32[(r10+1)] = 0;
+ heap32[(r10+2)] = 0;
+ heap32[(r10+3)] = 0;
+ heap32[(r10+4)] = 0;
+ heap32[(r10+5)] = 1065353216;
+ heap32[(r10+6)] = 0;
+ heap32[(r10+7)] = 0;
+ heap32[(r10+8)] = 0;
+ heap32[(r10+9)] = 0;
+ heap32[(r10+10)] = 1065353216;
+ heap32[(r10+11)] = 0;
+ heapFloat[(r10+12)] = f13;
+ heapFloat[(r10+13)] = f7;
+ heapFloat[(r10+14)] = f5;
+ heap32[(r10+15)] = 0;
+ heap32[(g0)] = r7;
+ heap32[(g0+1)] = r9;
+ heap32[(g0+2)] = r8;
+ _ZN7RagDoll20localCreateRigidBodyEfRK11btTransformP16btCollisionShape(i7);
+ heap32[(r12+14)] = r_g0;
+ r8 = heap32[(r12+4)];
+ r9 = sp + -752;
+ r10 = r9 >> 2;
+ heap32[(fp+-188)] = 1065353216;
+ heap32[(r10+1)] = 0;
+ heap32[(r10+2)] = 0;
+ heap32[(r10+3)] = 0;
+ heap32[(r10+4)] = 0;
+ heap32[(r10+5)] = 1065353216;
+ heap32[(r10+6)] = 0;
+ heap32[(r10+7)] = 0;
+ heap32[(r10+8)] = 0;
+ heap32[(r10+9)] = 0;
+ heap32[(r10+10)] = 1065353216;
+ heap32[(r10+11)] = 0;
+ heapFloat[(r10+12)] = f13;
+ heapFloat[(r10+13)] = f8;
+ heapFloat[(r10+14)] = f5;
+ heap32[(r10+15)] = 0;
+ heap32[(g0)] = r7;
+ heap32[(g0+1)] = r9;
+ heap32[(g0+2)] = r8;
+ _ZN7RagDoll20localCreateRigidBodyEfRK11btTransformP16btCollisionShape(i7);
+ heap32[(r12+15)] = r_g0;
+ r8 = heap32[(r12+5)];
+ r9 = sp + -688;
+ r10 = r9 >> 2;
+ heap32[(fp+-172)] = 1065353216;
+ heap32[(r10+1)] = 0;
+ heap32[(r10+2)] = 0;
+ heap32[(r10+3)] = 0;
+ heap32[(r10+4)] = 0;
+ heap32[(r10+5)] = 1065353216;
+ heap32[(r10+6)] = 0;
+ heap32[(r10+7)] = 0;
+ heap32[(r10+8)] = 0;
+ heap32[(r10+9)] = 0;
+ f13 = -0.62999999523162842;
+ heap32[(r10+10)] = 1065353216;
+ f13 = f12+f13;
+ heap32[(r10+11)] = 0;
+ heapFloat[(r10+12)] = f13;
+ heapFloat[(r10+13)] = f9;
+ heapFloat[(r10+14)] = f5;
+ heap32[(r10+15)] = 0;
+ heap32[(g0)] = r7;
+ heap32[(g0+1)] = r9;
+ heap32[(g0+2)] = r8;
+ _ZN7RagDoll20localCreateRigidBodyEfRK11btTransformP16btCollisionShape(i7);
+ heap32[(r12+16)] = r_g0;
+ r8 = heap32[(r12+6)];
+ r9 = sp + -624;
+ r10 = r9 >> 2;
+ heap32[(fp+-156)] = 1065353216;
+ heap32[(r10+1)] = 0;
+ heap32[(r10+2)] = 0;
+ heap32[(r10+3)] = 0;
+ heap32[(r10+4)] = 0;
+ heap32[(r10+5)] = 1065353216;
+ heap32[(r10+6)] = 0;
+ heap32[(r10+7)] = 0;
+ heap32[(r10+8)] = 0;
+ heap32[(r10+9)] = 0;
+ heap32[(r10+10)] = 1065353216;
+ heap32[(r10+11)] = 0;
+ heapFloat[(r10+12)] = f13;
+ heapFloat[(r10+13)] = f10;
+ heapFloat[(r10+14)] = f5;
+ heap32[(r10+15)] = 0;
+ heap32[(g0)] = r7;
+ heap32[(g0+1)] = r9;
+ heap32[(g0+2)] = r8;
+ _ZN7RagDoll20localCreateRigidBodyEfRK11btTransformP16btCollisionShape(i7);
+ heap32[(r12+17)] = r_g0;
+ r8 = heap32[(r12+7)];
+ r9 = sp + -560;
+ r10 = r9 >> 2;
+ heap32[(fp+-140)] = 1065353216;
+ heap32[(r10+1)] = 0;
+ heap32[(r10+2)] = 0;
+ heap32[(r10+3)] = 0;
+ heap32[(r10+4)] = 0;
+ heap32[(r10+5)] = 1065353216;
+ heap32[(r10+6)] = 0;
+ heap32[(r10+7)] = 0;
+ heap32[(r10+8)] = 0;
+ heap32[(r10+9)] = 0;
+ f13 = 0.62999999523162842;
+ heap32[(r10+10)] = 1065353216;
+ f13 = f12+f13;
+ heap32[(r10+11)] = 0;
+ heapFloat[(r10+12)] = f13;
+ heapFloat[(r10+13)] = f9;
+ heapFloat[(r10+14)] = f5;
+ heap32[(r10+15)] = 0;
+ heap32[(g0)] = r7;
+ heap32[(g0+1)] = r9;
+ heap32[(g0+2)] = r8;
+ _ZN7RagDoll20localCreateRigidBodyEfRK11btTransformP16btCollisionShape(i7);
+ heap32[(r12+18)] = r_g0;
+ r8 = heap32[(r12+8)];
+ r9 = sp + -496;
+ r10 = r9 >> 2;
+ heap32[(fp+-124)] = 1065353216;
+ heap32[(r10+1)] = 0;
+ heap32[(r10+2)] = 0;
+ heap32[(r10+3)] = 0;
+ heap32[(r10+4)] = 0;
+ heap32[(r10+5)] = 1065353216;
+ heap32[(r10+6)] = 0;
+ heap32[(r10+7)] = 0;
+ heap32[(r10+8)] = 0;
+ heap32[(r10+9)] = 0;
+ heap32[(r10+10)] = 1065353216;
+ heap32[(r10+11)] = 0;
+ heapFloat[(r10+12)] = f13;
+ heapFloat[(r10+13)] = f10;
+ heapFloat[(r10+14)] = f5;
+ heap32[(r10+15)] = 0;
+ heap32[(g0)] = r7;
+ heap32[(g0+1)] = r9;
+ heap32[(g0+2)] = r8;
+ _ZN7RagDoll20localCreateRigidBodyEfRK11btTransformP16btCollisionShape(i7);
+ heap32[(r12+19)] = r_g0;
+ r8 = heap32[(r12+9)];
+ r9 = sp + -432;
+ r10 = r9 >> 2;
+ heap32[(fp+-108)] = -1287930578;
+ heap32[(r10+1)] = -1082130432;
+ heap32[(r10+2)] = 0;
+ heap32[(r10+3)] = 0;
+ heap32[(r10+4)] = 1065353216;
+ heap32[(r10+5)] = -1287930578;
+ heap32[(r10+6)] = 0;
+ heap32[(r10+7)] = 0;
+ heap32[(r10+8)] = 0;
+ heap32[(r10+9)] = 0;
+ f13 = -1.2250000238418579;
+ heap32[(r10+10)] = 1065353216;
+ f13 = f12+f13;
+ heap32[(r10+11)] = 0;
+ heapFloat[(r10+12)] = f13;
+ heapFloat[(r10+13)] = f11;
+ heapFloat[(r10+14)] = f5;
+ heap32[(r10+15)] = 0;
+ heap32[(g0)] = r7;
+ heap32[(g0+1)] = r9;
+ heap32[(g0+2)] = r8;
+ _ZN7RagDoll20localCreateRigidBodyEfRK11btTransformP16btCollisionShape(i7);
+ heap32[(r12+20)] = r_g0;
+ r8 = heap32[(r12+10)];
+ r9 = sp + -368;
+ r10 = r9 >> 2;
+ heap32[(fp+-92)] = -1287930578;
+ heap32[(r10+1)] = -1082130432;
+ heap32[(r10+2)] = 0;
+ heap32[(r10+3)] = 0;
+ heap32[(r10+4)] = 1065353216;
+ heap32[(r10+5)] = -1287930578;
+ heap32[(r10+6)] = 0;
+ heap32[(r10+7)] = 0;
+ heap32[(r10+8)] = 0;
+ heap32[(r10+9)] = 0;
+ f13 = -2.4500000476837158;
+ heap32[(r10+10)] = 1065353216;
+ f13 = f12+f13;
+ heap32[(r10+11)] = 0;
+ heapFloat[(r10+12)] = f13;
+ heapFloat[(r10+13)] = f11;
+ heapFloat[(r10+14)] = f5;
+ heap32[(r10+15)] = 0;
+ heap32[(g0)] = r7;
+ heap32[(g0+1)] = r9;
+ heap32[(g0+2)] = r8;
+ _ZN7RagDoll20localCreateRigidBodyEfRK11btTransformP16btCollisionShape(i7);
+ heap32[(r12+21)] = r_g0;
+ r8 = heap32[(r12+11)];
+ r9 = sp + -304;
+ r10 = r9 >> 2;
+ heap32[(fp+-76)] = -1287930578;
+ heap32[(r10+1)] = 1065353216;
+ heap32[(r10+2)] = 0;
+ heap32[(r10+3)] = 0;
+ heap32[(r10+4)] = -1082130432;
+ heap32[(r10+5)] = -1287930578;
+ heap32[(r10+6)] = 0;
+ heap32[(r10+7)] = 0;
+ heap32[(r10+8)] = -2147483648;
+ heap32[(r10+9)] = 0;
+ f13 = 1.2250000238418579;
+ heap32[(r10+10)] = 1065353216;
+ f13 = f12+f13;
+ heap32[(r10+11)] = 0;
+ heapFloat[(r10+12)] = f13;
+ heapFloat[(r10+13)] = f11;
+ heapFloat[(r10+14)] = f5;
+ heap32[(r10+15)] = 0;
+ heap32[(g0)] = r7;
+ heap32[(g0+1)] = r9;
+ heap32[(g0+2)] = r8;
+ _ZN7RagDoll20localCreateRigidBodyEfRK11btTransformP16btCollisionShape(i7);
+ heap32[(r12+22)] = r_g0;
+ r8 = heap32[(r12+12)];
+ r9 = sp + -240;
+ r10 = r9 >> 2;
+ heap32[(fp+-60)] = -1287930578;
+ heap32[(r10+1)] = 1065353216;
+ heap32[(r10+2)] = 0;
+ heap32[(r10+3)] = 0;
+ heap32[(r10+4)] = -1082130432;
+ heap32[(r10+5)] = -1287930578;
+ heap32[(r10+6)] = 0;
+ heap32[(r10+7)] = 0;
+ heap32[(r10+8)] = -2147483648;
+ heap32[(r10+9)] = 0;
+ f13 = 2.4500000476837158;
+ heap32[(r10+10)] = 1065353216;
+ f12 = f12+f13;
+ heap32[(r10+11)] = 0;
+ heapFloat[(r10+12)] = f12;
+ heapFloat[(r10+13)] = f11;
+ heapFloat[(r10+14)] = f5;
+ heap32[(r10+15)] = 0;
+ heap32[(g0)] = r7;
+ heap32[(g0+1)] = r9;
+ heap32[(g0+2)] = r8;
+ _ZN7RagDoll20localCreateRigidBodyEfRK11btTransformP16btCollisionShape(i7);
+ r9 = 0;
+ heap32[(r12+23)] = r_g0;
+_297: while(true){
+ r8 = r9 << 2;
+ r8 = (r7 - r8)|0;
+ r8 = r8 >> 2;
+ r10 = heap32[(r8+13)];
+ r10 = r10 >> 2;
+ heap32[(r10+109)] = 1028443341;
+ heap32[(r10+110)] = 1062836634;
+ r10 = heap32[(r8+13)];
+ r10 = r10 >> 2;
+ heap32[(r10+55)] = 1061997773;
+ r8 = heap32[(r8+13)];
+ r8 = r8 >> 2;
+ r9 = (r9 + -1)|0;
+ heap32[(r8+116)] = 1070386381;
+ heap32[(r8+117)] = 1075838976;
+if(!(r9 !=-11)) //_LBB26_219
+{
+break _297;
+}
+}
+ heap32[(g0)] = 748;
+ _Znwj(i7);
+ r8 = r_g0;
+ r9 = heap32[(r12+14)];
+ r10 = heap32[(r12+13)];
+ r11 = r8 >> 2;
+ heap32[(r11+1)] = 4;
+ heap32[(r11+2)] = -1;
+ r13 = 0;
+ heap32[(r11+3)] = -1;
+ heap8[r8+16] = r13;
+ heap32[(r11+5)] = r10;
+ heap32[(r11+6)] = r9;
+ r9 = _ZTV17btHingeConstraint;
+ heap32[(r11+7)] = 0;
+ r9 = (r9 + 8)|0;
+ heap32[(r11+8)] = 1050253722;
+ heap32[(r11)] = r9;
+ heap32[(r11+135)] = -1287930578;
+ heap32[(r11+136)] = 0;
+ heap32[(r11+137)] = 1065353216;
+ heap32[(r11+138)] = 0;
+ heap32[(r11+139)] = -2147483648;
+ heap32[(r11+140)] = 1065353216;
+ heap32[(r11+141)] = 0;
+ heap32[(r11+142)] = 0;
+ heap32[(r11+143)] = -1082130432;
+ heap32[(r11+144)] = -2147483648;
+ heap32[(r11+145)] = -1287930578;
+ heap32[(r11+146)] = 0;
+ heap32[(r11+147)] = 0;
+ heap32[(r11+148)] = 1057384039;
+ heap32[(r11+149)] = 0;
+ heap32[(r11+150)] = 0;
+ heap32[(r11+151)] = -1287930578;
+ heap32[(r11+152)] = 0;
+ heap32[(r11+153)] = 1065353216;
+ heap32[(r11+154)] = 0;
+ heap32[(r11+155)] = -2147483648;
+ heap32[(r11+156)] = 1065353216;
+ heap32[(r11+157)] = 0;
+ heap32[(r11+158)] = 0;
+ heap32[(r11+159)] = -1082130432;
+ heap32[(r11+160)] = -2147483648;
+ heap32[(r11+161)] = -1287930578;
+ heap32[(r11+162)] = 0;
+ heap32[(r11+163)] = 0;
+ heap32[(r11+164)] = -1090099609;
+ heap32[(r11+165)] = 0;
+ heap32[(r11+166)] = 0;
+ heap8[r8+720] = r13;
+ heap8[r8+721] = r13;
+ heap8[r8+723] = r13;
+ heap8[r8+724] = r4;
+ heap8[r8+725] = r13;
+ heap32[(r11+183)] = 0;
+ heap32[(r11+172)] = 1065353216;
+ heap32[(r11+173)] = -1082130432;
+ heap32[(r11+170)] = 1050253722;
+ heap32[(r11+171)] = 1065353216;
+ heap32[(r11+169)] = 1063675494;
+ heap8[r8+722] = r13;
+ heap32[(r11+179)] = 1065353216;
+ heap32[(g0)] = -1085730853;
+ heap32[(g0+1)] = 1086918619;
+ fmodf(i7);
+ f12 = f_g0;
+ f13 = -3.1415927410125732;
+ if(f12 >=f13) //_LBB26_222
+{
+ f14 = 3.1415927410125732;
+ if(f12 >f14) //_LBB26_224
+{
+ f14 = -6.2831854820251465;
+ f12 = f12+f14;
+}
+}
+else{
+ f14 = 6.2831854820251465;
+ f12 = f12+f14;
+}
+ r10 = r8 >> 2;
+ heapFloat[(r10+172)] = f12;
+ heap32[(g0)] = 1070141403;
+ heap32[(g0+1)] = 1086918619;
+ fmodf(i7);
+ f12 = f_g0;
+ if(f12 >=f13) //_LBB26_227
+{
+ f14 = 3.1415927410125732;
+ if(f12 >f14) //_LBB26_229
+{
+ f14 = -6.2831854820251465;
+ f12 = f12+f14;
+}
+}
+else{
+ f14 = 6.2831854820251465;
+ f12 = f12+f14;
+}
+ heapFloat[(r10+173)] = f12;
+ heap32[(r10+169)] = 1063675494;
+ heap32[(r10+170)] = 1050253722;
+ heap32[(r10+171)] = 1065353216;
+ heap32[(r12+24)] = r8;
+ r10 = heap32[(r12+1)];
+ r11 = r10 >> 2;
+ r11 = heap32[(r11)];
+ r11 = r11 >> 2;
+ r11 = heap32[(r11+13)];
+ heap32[(g0)] = r10;
+ heap32[(g0+1)] = r8;
+ heap32[(g0+2)] = 1;
+ __FUNCTION_TABLE__[(r11)>>2](i7);
+ heap32[(g0)] = 596;
+ _Znwj(i7);
+ r10 = heap32[(r12+15)];
+ r11 = heap32[(r12+14)];
+ r14 = r_g0 >> 2;
+ heap32[(r14+1)] = 5;
+ heap32[(r14+2)] = -1;
+ heap32[(r14+3)] = -1;
+ heap8[r_g0+16] = r13;
+ heap32[(r14+5)] = r11;
+ heap32[(r14+6)] = r10;
+ heap32[(r14+7)] = 0;
+ r10 = _ZTV21btConeTwistConstraint;
+ heap32[(r14+8)] = 1050253722;
+ r10 = (r10 + 8)|0;
+ heap32[(r14)] = r10;
+ heap32[(r14+72)] = -1287930578;
+ heap32[(r14+73)] = -1082130432;
+ heap32[(r14+74)] = 0;
+ heap32[(r14+75)] = 0;
+ heap32[(r14+76)] = 1065353216;
+ heap32[(r14+77)] = -1287930578;
+ heap32[(r14+78)] = 0;
+ heap32[(r14+79)] = 0;
+ heap32[(r14+80)] = -2147483648;
+ heap32[(r14+81)] = 0;
+ heap32[(r14+82)] = 1065353216;
+ heap32[(r14+83)] = 0;
+ heap32[(r14+84)] = 0;
+ heap32[(r14+85)] = 1065772647;
+ heap32[(r14+86)] = 0;
+ heap32[(r14+87)] = 0;
+ heap32[(r14+88)] = -1287930578;
+ heap32[(r14+89)] = -1082130432;
+ heap32[(r14+90)] = 0;
+ heap32[(r14+91)] = 0;
+ heap32[(r14+92)] = 1065353216;
+ heap32[(r14+93)] = -1287930578;
+ heap32[(r14+94)] = 0;
+ heap32[(r14+95)] = 0;
+ heap32[(r14+96)] = -2147483648;
+ heap32[(r14+97)] = 0;
+ heap32[(r14+98)] = 1065353216;
+ heap32[(r14+99)] = 0;
+ heap32[(r14+100)] = 0;
+ heap32[(r14+101)] = -1090854584;
+ heap32[(r14+102)] = 0;
+ heap32[(r14+103)] = 0;
+ heap8[r_g0+540] = r13;
+ heap32[(r14+128)] = 0;
+ heap32[(r14+140)] = -1082130432;
+ heap32[(r14+107)] = 1008981770;
+ heap32[(r14+111)] = 1028443341;
+ heap32[(r14+145)] = 0;
+ heap32[(r14+146)] = 0;
+ heap32[(r14+147)] = 1060320051;
+ heap32[(r14+148)] = 0;
+ heap32[(r14+108)] = 1061752795;
+ heap32[(r14+109)] = 1061752795;
+ heap32[(r14+110)] = 1070141403;
+ heap32[(r14+104)] = 1065353216;
+ heap32[(r14+105)] = 1050253722;
+ heap32[(r14+106)] = 1065353216;
+ heap32[(r12+25)] = r_g0;
+ r11 = heap32[(r12+1)];
+ r14 = r11 >> 2;
+ r14 = heap32[(r14)];
+ r14 = r14 >> 2;
+ r14 = heap32[(r14+13)];
+ heap32[(g0)] = r11;
+ heap32[(g0+1)] = r_g0;
+ heap32[(g0+2)] = 1;
+ __FUNCTION_TABLE__[(r14)>>2](i7);
+ heap32[(g0)] = 596;
+ _Znwj(i7);
+ r11 = heap32[(r12+16)];
+ r14 = heap32[(r12+13)];
+ r15 = r_g0 >> 2;
+ heap32[(r15+1)] = 5;
+ heap32[(r15+2)] = -1;
+ heap32[(r15+3)] = -1;
+ heap8[r_g0+16] = r13;
+ heap32[(r15+5)] = r14;
+ heap32[(r15+6)] = r11;
+ heap32[(r15+7)] = 0;
+ heap32[(r15+8)] = 1050253722;
+ heap32[(r15)] = r10;
+ heap32[(r15+72)] = -1087044364;
+ heap32[(r15+73)] = -1087044366;
+ heap32[(r15+74)] = 0;
+ heap32[(r15+75)] = 0;
+ heap32[(r15+76)] = 1060439282;
+ heap32[(r15+77)] = -1087044364;
+ heap32[(r15+78)] = 0;
+ heap32[(r15+79)] = 0;
+ heap32[(r15+80)] = -2147483648;
+ heap32[(r15+81)] = 0;
+ heap32[(r15+82)] = 1065353216;
+ heap32[(r15+83)] = 0;
+ heap32[(r15+84)] = -1088338002;
+ heap32[(r15+85)] = -1095552205;
+ heap32[(r15+86)] = 0;
+ heap32[(r15+87)] = 0;
+ heap32[(r15+88)] = -1087044364;
+ heap32[(r15+89)] = -1087044366;
+ heap32[(r15+90)] = 0;
+ heap32[(r15+91)] = 0;
+ heap32[(r15+92)] = 1060439282;
+ heap32[(r15+93)] = -1087044364;
+ heap32[(r15+94)] = 0;
+ heap32[(r15+95)] = 0;
+ heap32[(r15+96)] = -2147483648;
+ heap32[(r15+97)] = 0;
+ heap32[(r15+98)] = 1065353216;
+ heap32[(r15+99)] = 0;
+ heap32[(r15+100)] = 0;
+ heap32[(r15+101)] = 1061788057;
+ heap32[(r15+102)] = 0;
+ heap32[(r15+103)] = 0;
+ heap8[r_g0+540] = r13;
+ heap32[(r15+128)] = 0;
+ heap32[(r15+140)] = -1082130432;
+ heap32[(r15+107)] = 1008981770;
+ heap32[(r15+111)] = 1028443341;
+ heap32[(r15+145)] = 0;
+ heap32[(r15+146)] = 0;
+ heap32[(r15+147)] = 1060320051;
+ heap32[(r15+148)] = 0;
+ heap32[(r15+108)] = 1061752795;
+ heap32[(r15+109)] = 1061752795;
+ heap32[(r15+110)] = 0;
+ heap32[(r15+104)] = 1065353216;
+ heap32[(r15+105)] = 1050253722;
+ heap32[(r15+106)] = 1065353216;
+ heap32[(r12+26)] = r_g0;
+ r11 = heap32[(r12+1)];
+ r14 = r11 >> 2;
+ r14 = heap32[(r14)];
+ r14 = r14 >> 2;
+ r14 = heap32[(r14+13)];
+ heap32[(g0)] = r11;
+ heap32[(g0+1)] = r_g0;
+ heap32[(g0+2)] = 1;
+ __FUNCTION_TABLE__[(r14)>>2](i7);
+ heap32[(g0)] = 748;
+ _Znwj(i7);
+ r8 = r_g0;
+ r11 = heap32[(r12+17)];
+ r14 = heap32[(r12+16)];
+ r15 = r8 >> 2;
+ heap32[(r15+1)] = 4;
+ heap32[(r15+2)] = -1;
+ heap32[(r15+3)] = -1;
+ heap8[r8+16] = r13;
+ heap32[(r15+5)] = r14;
+ heap32[(r15+6)] = r11;
+ heap32[(r15+7)] = 0;
+ heap32[(r15+8)] = 1050253722;
+ heap32[(r15)] = r9;
+ heap32[(r15+135)] = -1287930578;
+ heap32[(r15+136)] = 0;
+ heap32[(r15+137)] = 1065353216;
+ heap32[(r15+138)] = 0;
+ heap32[(r15+139)] = -2147483648;
+ heap32[(r15+140)] = 1065353216;
+ heap32[(r15+141)] = 0;
+ heap32[(r15+142)] = 0;
+ heap32[(r15+143)] = -1082130432;
+ heap32[(r15+144)] = -2147483648;
+ heap32[(r15+145)] = -1287930578;
+ heap32[(r15+146)] = 0;
+ heap32[(r15+147)] = 0;
+ heap32[(r15+148)] = -1085695591;
+ heap32[(r15+149)] = 0;
+ heap32[(r15+150)] = 0;
+ heap32[(r15+151)] = -1287930578;
+ heap32[(r15+152)] = 0;
+ heap32[(r15+153)] = 1065353216;
+ heap32[(r15+154)] = 0;
+ heap32[(r15+155)] = -2147483648;
+ heap32[(r15+156)] = 1065353216;
+ heap32[(r15+157)] = 0;
+ heap32[(r15+158)] = 0;
+ heap32[(r15+159)] = -1082130432;
+ heap32[(r15+160)] = -2147483648;
+ heap32[(r15+161)] = -1287930578;
+ heap32[(r15+162)] = 0;
+ heap32[(r15+163)] = 0;
+ heap32[(r15+164)] = 1059439248;
+ heap32[(r15+165)] = 0;
+ heap32[(r15+166)] = 0;
+ heap8[r8+720] = r13;
+ heap8[r8+721] = r13;
+ heap8[r8+723] = r13;
+ heap8[r8+724] = r4;
+ heap8[r8+725] = r13;
+ heap32[(r15+183)] = 0;
+ heap32[(r15+172)] = 1065353216;
+ heap32[(r15+173)] = -1082130432;
+ heap32[(r15+170)] = 1050253722;
+ heap32[(r15+171)] = 1065353216;
+ heap32[(r15+169)] = 1063675494;
+ heap8[r8+722] = r13;
+ heap32[(r15+179)] = 1065353216;
+ heap32[(g0)] = 0;
+ heap32[(g0+1)] = 1086918619;
+ fmodf(i7);
+ f12 = f_g0;
+ if(f12 >=f13) //_LBB26_232
+{
+ f14 = 3.1415927410125732;
+ if(f12 >f14) //_LBB26_234
+{
+ f14 = -6.2831854820251465;
+ f12 = f12+f14;
+}
+}
+else{
+ f14 = 6.2831854820251465;
+ f12 = f12+f14;
+}
+ r11 = r8 >> 2;
+ heapFloat[(r11+172)] = f12;
+ heap32[(g0)] = 1070141403;
+ heap32[(g0+1)] = 1086918619;
+ fmodf(i7);
+ f12 = f_g0;
+ if(f12 >=f13) //_LBB26_237
+{
+ f14 = 3.1415927410125732;
+ if(f12 >f14) //_LBB26_239
+{
+ f14 = -6.2831854820251465;
+ f12 = f12+f14;
+}
+}
+else{
+ f14 = 6.2831854820251465;
+ f12 = f12+f14;
+}
+ heapFloat[(r11+173)] = f12;
+ heap32[(r11+169)] = 1063675494;
+ heap32[(r11+170)] = 1050253722;
+ heap32[(r11+171)] = 1065353216;
+ heap32[(r12+27)] = r8;
+ r11 = heap32[(r12+1)];
+ r14 = r11 >> 2;
+ r14 = heap32[(r14)];
+ r14 = r14 >> 2;
+ r14 = heap32[(r14+13)];
+ heap32[(g0)] = r11;
+ heap32[(g0+1)] = r8;
+ heap32[(g0+2)] = 1;
+ __FUNCTION_TABLE__[(r14)>>2](i7);
+ heap32[(g0)] = 596;
+ _Znwj(i7);
+ r11 = heap32[(r12+18)];
+ r14 = heap32[(r12+13)];
+ r15 = r_g0 >> 2;
+ heap32[(r15+1)] = 5;
+ heap32[(r15+2)] = -1;
+ heap32[(r15+3)] = -1;
+ heap8[r_g0+16] = r13;
+ heap32[(r15+5)] = r14;
+ heap32[(r15+6)] = r11;
+ heap32[(r15+7)] = 0;
+ heap32[(r15+8)] = 1050253722;
+ heap32[(r15)] = r10;
+ heap32[(r15+72)] = 1060439283;
+ heap32[(r15+73)] = -1087044365;
+ heap32[(r15+74)] = 0;
+ heap32[(r15+75)] = 0;
+ heap32[(r15+76)] = 1060439283;
+ heap32[(r15+77)] = 1060439283;
+ heap32[(r15+78)] = 0;
+ heap32[(r15+79)] = 0;
+ heap32[(r15+80)] = -2147483648;
+ heap32[(r15+81)] = 0;
+ heap32[(r15+82)] = 1065353216;
+ heap32[(r15+83)] = 0;
+ heap32[(r15+84)] = 1059145646;
+ heap32[(r15+85)] = -1095552205;
+ heap32[(r15+86)] = 0;
+ heap32[(r15+87)] = 0;
+ heap32[(r15+88)] = 1060439283;
+ heap32[(r15+89)] = -1087044365;
+ heap32[(r15+90)] = 0;
+ heap32[(r15+91)] = 0;
+ heap32[(r15+92)] = 1060439283;
+ heap32[(r15+93)] = 1060439283;
+ heap32[(r15+94)] = 0;
+ heap32[(r15+95)] = 0;
+ heap32[(r15+96)] = -2147483648;
+ heap32[(r15+97)] = 0;
+ heap32[(r15+98)] = 1065353216;
+ heap32[(r15+99)] = 0;
+ heap32[(r15+100)] = 0;
+ heap32[(r15+101)] = 1061788057;
+ heap32[(r15+102)] = 0;
+ heap32[(r15+103)] = 0;
+ heap8[r_g0+540] = r13;
+ heap32[(r15+128)] = 0;
+ heap32[(r15+140)] = -1082130432;
+ heap32[(r15+107)] = 1008981770;
+ heap32[(r15+111)] = 1028443341;
+ heap32[(r15+145)] = 0;
+ heap32[(r15+146)] = 0;
+ heap32[(r15+147)] = 1060320051;
+ heap32[(r15+148)] = 0;
+ heap32[(r15+108)] = 1061752795;
+ heap32[(r15+109)] = 1061752795;
+ heap32[(r15+110)] = 0;
+ heap32[(r15+104)] = 1065353216;
+ heap32[(r15+105)] = 1050253722;
+ heap32[(r15+106)] = 1065353216;
+ heap32[(r12+28)] = r_g0;
+ r11 = heap32[(r12+1)];
+ r14 = r11 >> 2;
+ r14 = heap32[(r14)];
+ r14 = r14 >> 2;
+ r14 = heap32[(r14+13)];
+ heap32[(g0)] = r11;
+ heap32[(g0+1)] = r_g0;
+ heap32[(g0+2)] = 1;
+ __FUNCTION_TABLE__[(r14)>>2](i7);
+ heap32[(g0)] = 748;
+ _Znwj(i7);
+ r8 = r_g0;
+ r11 = heap32[(r12+19)];
+ r14 = heap32[(r12+18)];
+ r15 = r8 >> 2;
+ heap32[(r15+1)] = 4;
+ heap32[(r15+2)] = -1;
+ heap32[(r15+3)] = -1;
+ heap8[r8+16] = r13;
+ heap32[(r15+5)] = r14;
+ heap32[(r15+6)] = r11;
+ heap32[(r15+7)] = 0;
+ heap32[(r15+8)] = 1050253722;
+ heap32[(r15)] = r9;
+ heap32[(r15+135)] = -1287930578;
+ heap32[(r15+136)] = 0;
+ heap32[(r15+137)] = 1065353216;
+ heap32[(r15+138)] = 0;
+ heap32[(r15+139)] = -2147483648;
+ heap32[(r15+140)] = 1065353216;
+ heap32[(r15+141)] = 0;
+ heap32[(r15+142)] = 0;
+ heap32[(r15+143)] = -1082130432;
+ heap32[(r15+144)] = -2147483648;
+ heap32[(r15+145)] = -1287930578;
+ heap32[(r15+146)] = 0;
+ heap32[(r15+147)] = 0;
+ heap32[(r15+148)] = -1085695591;
+ heap32[(r15+149)] = 0;
+ heap32[(r15+150)] = 0;
+ heap32[(r15+151)] = -1287930578;
+ heap32[(r15+152)] = 0;
+ heap32[(r15+153)] = 1065353216;
+ heap32[(r15+154)] = 0;
+ heap32[(r15+155)] = -2147483648;
+ heap32[(r15+156)] = 1065353216;
+ heap32[(r15+157)] = 0;
+ heap32[(r15+158)] = 0;
+ heap32[(r15+159)] = -1082130432;
+ heap32[(r15+160)] = -2147483648;
+ heap32[(r15+161)] = -1287930578;
+ heap32[(r15+162)] = 0;
+ heap32[(r15+163)] = 0;
+ heap32[(r15+164)] = 1059439248;
+ heap32[(r15+165)] = 0;
+ heap32[(r15+166)] = 0;
+ heap8[r8+720] = r13;
+ heap8[r8+721] = r13;
+ heap8[r8+723] = r13;
+ heap8[r8+724] = r4;
+ heap8[r8+725] = r13;
+ heap32[(r15+183)] = 0;
+ heap32[(r15+172)] = 1065353216;
+ heap32[(r15+173)] = -1082130432;
+ heap32[(r15+170)] = 1050253722;
+ heap32[(r15+171)] = 1065353216;
+ heap32[(r15+169)] = 1063675494;
+ heap8[r8+722] = r13;
+ heap32[(r15+179)] = 1065353216;
+ heap32[(g0)] = 0;
+ heap32[(g0+1)] = 1086918619;
+ fmodf(i7);
+ f12 = f_g0;
+ if(f12 >=f13) //_LBB26_242
+{
+ f14 = 3.1415927410125732;
+ if(f12 >f14) //_LBB26_244
+{
+ f14 = -6.2831854820251465;
+ f12 = f12+f14;
+}
+}
+else{
+ f14 = 6.2831854820251465;
+ f12 = f12+f14;
+}
+ r11 = r8 >> 2;
+ heapFloat[(r11+172)] = f12;
+ heap32[(g0)] = 1070141403;
+ heap32[(g0+1)] = 1086918619;
+ fmodf(i7);
+ f12 = f_g0;
+ if(f12 >=f13) //_LBB26_247
+{
+ f14 = 3.1415927410125732;
+ if(f12 >f14) //_LBB26_249
+{
+ f14 = -6.2831854820251465;
+ f12 = f12+f14;
+}
+}
+else{
+ f14 = 6.2831854820251465;
+ f12 = f12+f14;
+}
+ heapFloat[(r11+173)] = f12;
+ heap32[(r11+169)] = 1063675494;
+ heap32[(r11+170)] = 1050253722;
+ heap32[(r11+171)] = 1065353216;
+ heap32[(r12+29)] = r8;
+ r11 = heap32[(r12+1)];
+ r14 = r11 >> 2;
+ r14 = heap32[(r14)];
+ r14 = r14 >> 2;
+ r14 = heap32[(r14+13)];
+ heap32[(g0)] = r11;
+ heap32[(g0+1)] = r8;
+ heap32[(g0+2)] = 1;
+ __FUNCTION_TABLE__[(r14)>>2](i7);
+ heap32[(g0)] = 596;
+ _Znwj(i7);
+ r11 = heap32[(r12+20)];
+ r14 = heap32[(r12+14)];
+ r15 = r_g0 >> 2;
+ heap32[(r15+1)] = 5;
+ heap32[(r15+2)] = -1;
+ heap32[(r15+3)] = -1;
+ heap8[r_g0+16] = r13;
+ heap32[(r15+5)] = r14;
+ heap32[(r15+6)] = r11;
+ heap32[(r15+7)] = 0;
+ heap32[(r15+8)] = 1050253722;
+ heap32[(r15)] = r10;
+ heap32[(r15+72)] = -1082130432;
+ heap32[(r15+73)] = 867941678;
+ heap32[(r15+74)] = -2147483648;
+ heap32[(r15+75)] = 0;
+ heap32[(r15+76)] = -1279541970;
+ heap32[(r15+77)] = -1082130432;
+ heap32[(r15+78)] = 0;
+ heap32[(r15+79)] = 0;
+ heap32[(r15+80)] = -2147483648;
+ heap32[(r15+81)] = 0;
+ heap32[(r15+82)] = 1065353216;
+ heap32[(r15+83)] = 0;
+ heap32[(r15+84)] = -1087163597;
+ heap32[(r15+85)] = 1057384039;
+ heap32[(r15+86)] = 0;
+ heap32[(r15+87)] = 0;
+ heap32[(r15+88)] = -1287930578;
+ heap32[(r15+89)] = -1082130432;
+ heap32[(r15+90)] = 0;
+ heap32[(r15+91)] = 0;
+ heap32[(r15+92)] = 1065353216;
+ heap32[(r15+93)] = -1287930578;
+ heap32[(r15+94)] = 0;
+ heap32[(r15+95)] = 0;
+ heap32[(r15+96)] = -2147483648;
+ heap32[(r15+97)] = 0;
+ heap32[(r15+98)] = 1065353216;
+ heap32[(r15+99)] = 0;
+ heap32[(r15+100)] = 0;
+ heap32[(r15+101)] = -1088338002;
+ heap32[(r15+102)] = 0;
+ heap32[(r15+103)] = 0;
+ heap8[r_g0+540] = r13;
+ heap32[(r15+128)] = 0;
+ heap32[(r15+140)] = -1082130432;
+ heap32[(r15+107)] = 1008981770;
+ heap32[(r15+111)] = 1028443341;
+ heap32[(r15+145)] = 0;
+ heap32[(r15+146)] = 0;
+ heap32[(r15+147)] = 1060320051;
+ heap32[(r15+148)] = 0;
+ heap32[(r15+108)] = 1070141403;
+ heap32[(r15+109)] = 1070141403;
+ heap32[(r15+110)] = 0;
+ heap32[(r15+104)] = 1065353216;
+ heap32[(r15+105)] = 1050253722;
+ heap32[(r15+106)] = 1065353216;
+ heap32[(r12+30)] = r_g0;
+ r11 = heap32[(r12+1)];
+ r14 = r11 >> 2;
+ r14 = heap32[(r14)];
+ r14 = r14 >> 2;
+ r14 = heap32[(r14+13)];
+ heap32[(g0)] = r11;
+ heap32[(g0+1)] = r_g0;
+ heap32[(g0+2)] = 1;
+ __FUNCTION_TABLE__[(r14)>>2](i7);
+ heap32[(g0)] = 748;
+ _Znwj(i7);
+ r8 = r_g0;
+ r11 = heap32[(r12+21)];
+ r14 = heap32[(r12+20)];
+ r15 = r8 >> 2;
+ heap32[(r15+1)] = 4;
+ heap32[(r15+2)] = -1;
+ heap32[(r15+3)] = -1;
+ heap8[r8+16] = r13;
+ heap32[(r15+5)] = r14;
+ heap32[(r15+6)] = r11;
+ heap32[(r15+7)] = 0;
+ heap32[(r15+8)] = 1050253722;
+ heap32[(r15)] = r9;
+ heap32[(r15+135)] = -1287930578;
+ heap32[(r15+136)] = 0;
+ heap32[(r15+137)] = 1065353216;
+ heap32[(r15+138)] = 0;
+ heap32[(r15+139)] = -2147483648;
+ heap32[(r15+140)] = 1065353216;
+ heap32[(r15+141)] = 0;
+ heap32[(r15+142)] = 0;
+ heap32[(r15+143)] = -1082130432;
+ heap32[(r15+144)] = -2147483648;
+ heap32[(r15+145)] = -1287930578;
+ heap32[(r15+146)] = 0;
+ heap32[(r15+147)] = 0;
+ heap32[(r15+148)] = 1059145646;
+ heap32[(r15+149)] = 0;
+ heap32[(r15+150)] = 0;
+ heap32[(r15+151)] = -1287930578;
+ heap32[(r15+152)] = 0;
+ heap32[(r15+153)] = 1065353216;
+ heap32[(r15+154)] = 0;
+ heap32[(r15+155)] = -2147483648;
+ heap32[(r15+156)] = 1065353216;
+ heap32[(r15+157)] = 0;
+ heap32[(r15+158)] = 0;
+ heap32[(r15+159)] = -1082130432;
+ heap32[(r15+160)] = -2147483648;
+ heap32[(r15+161)] = -1287930578;
+ heap32[(r15+162)] = 0;
+ heap32[(r15+163)] = 0;
+ heap32[(r15+164)] = -1090854584;
+ heap32[(r15+165)] = 0;
+ heap32[(r15+166)] = 0;
+ heap8[r8+720] = r13;
+ heap8[r8+721] = r13;
+ heap8[r8+723] = r13;
+ heap8[r8+724] = r4;
+ heap8[r8+725] = r13;
+ heap32[(r15+183)] = 0;
+ heap32[(r15+172)] = 1065353216;
+ heap32[(r15+173)] = -1082130432;
+ heap32[(r15+170)] = 1050253722;
+ heap32[(r15+171)] = 1065353216;
+ heap32[(r15+169)] = 1063675494;
+ heap8[r8+722] = r13;
+ heap32[(r15+179)] = 1065353216;
+ heap32[(g0)] = -1077342245;
+ heap32[(g0+1)] = 1086918619;
+ fmodf(i7);
+ f12 = f_g0;
+ if(f12 >=f13) //_LBB26_252
+{
+ f14 = 3.1415927410125732;
+ if(f12 >f14) //_LBB26_254
+{
+ f14 = -6.2831854820251465;
+ f12 = f12+f14;
+}
+}
+else{
+ f14 = 6.2831854820251465;
+ f12 = f12+f14;
+}
+ r11 = r8 >> 2;
+ heapFloat[(r11+172)] = f12;
+ heap32[(g0)] = 0;
+ heap32[(g0+1)] = 1086918619;
+ fmodf(i7);
+ f12 = f_g0;
+ if(f12 >=f13) //_LBB26_257
+{
+ f14 = 3.1415927410125732;
+ if(f12 >f14) //_LBB26_259
+{
+ f14 = -6.2831854820251465;
+ f12 = f12+f14;
+}
+}
+else{
+ f14 = 6.2831854820251465;
+ f12 = f12+f14;
+}
+ heapFloat[(r11+173)] = f12;
+ heap32[(r11+169)] = 1063675494;
+ heap32[(r11+170)] = 1050253722;
+ heap32[(r11+171)] = 1065353216;
+ heap32[(r12+31)] = r8;
+ r11 = heap32[(r12+1)];
+ r14 = r11 >> 2;
+ r14 = heap32[(r14)];
+ r14 = r14 >> 2;
+ r14 = heap32[(r14+13)];
+ heap32[(g0)] = r11;
+ heap32[(g0+1)] = r8;
+ heap32[(g0+2)] = 1;
+ __FUNCTION_TABLE__[(r14)>>2](i7);
+ heap32[(g0)] = 596;
+ _Znwj(i7);
+ r11 = heap32[(r12+22)];
+ r14 = heap32[(r12+14)];
+ r15 = r_g0 >> 2;
+ heap32[(r15+1)] = 5;
+ heap32[(r15+2)] = -1;
+ heap32[(r15+3)] = -1;
+ heap8[r_g0+16] = r13;
+ heap32[(r15+5)] = r14;
+ heap32[(r15+6)] = r11;
+ heap32[(r15+7)] = 0;
+ heap32[(r15+8)] = 1050253722;
+ heap32[(r15)] = r10;
+ heap32[(r15+72)] = 1065353216;
+ heap32[(r15+73)] = 0;
+ heap32[(r15+74)] = 0;
+ heap32[(r15+75)] = 0;
+ heap32[(r15+76)] = 0;
+ heap32[(r15+77)] = 1065353216;
+ heap32[(r15+78)] = 0;
+ heap32[(r15+79)] = 0;
+ heap32[(r15+80)] = -2147483648;
+ heap32[(r15+81)] = 0;
+ heap32[(r15+82)] = 1065353216;
+ heap32[(r15+83)] = 0;
+ heap32[(r15+84)] = 1060320051;
+ heap32[(r15+85)] = 1057384039;
+ heap32[(r15+86)] = 0;
+ heap32[(r15+87)] = 0;
+ heap32[(r15+88)] = -1287930578;
+ heap32[(r15+89)] = -1082130432;
+ heap32[(r15+90)] = 0;
+ heap32[(r15+91)] = 0;
+ heap32[(r15+92)] = 1065353216;
+ heap32[(r15+93)] = -1287930578;
+ heap32[(r15+94)] = 0;
+ heap32[(r15+95)] = 0;
+ heap32[(r15+96)] = -2147483648;
+ heap32[(r15+97)] = 0;
+ heap32[(r15+98)] = 1065353216;
+ heap32[(r15+99)] = 0;
+ heap32[(r15+100)] = 0;
+ heap32[(r15+101)] = -1088338002;
+ heap32[(r15+102)] = 0;
+ heap32[(r15+103)] = 0;
+ heap8[r_g0+540] = r13;
+ heap32[(r15+128)] = 0;
+ heap32[(r15+140)] = -1082130432;
+ heap32[(r15+107)] = 1008981770;
+ heap32[(r15+111)] = 1028443341;
+ heap32[(r15+145)] = 0;
+ heap32[(r15+146)] = 0;
+ heap32[(r15+147)] = 1060320051;
+ heap32[(r15+148)] = 0;
+ heap32[(r15+108)] = 1070141403;
+ heap32[(r15+109)] = 1070141403;
+ heap32[(r15+110)] = 0;
+ heap32[(r15+104)] = 1065353216;
+ heap32[(r15+105)] = 1050253722;
+ heap32[(r15+106)] = 1065353216;
+ heap32[(r12+32)] = r_g0;
+ r10 = heap32[(r12+1)];
+ r11 = r10 >> 2;
+ r11 = heap32[(r11)];
+ r11 = r11 >> 2;
+ r11 = heap32[(r11+13)];
+ heap32[(g0)] = r10;
+ heap32[(g0+1)] = r_g0;
+ heap32[(g0+2)] = 1;
+ __FUNCTION_TABLE__[(r11)>>2](i7);
+ heap32[(g0)] = 748;
+ _Znwj(i7);
+ r8 = r_g0;
+ r10 = heap32[(r12+23)];
+ r11 = heap32[(r12+22)];
+ r14 = r8 >> 2;
+ heap32[(r14+1)] = 4;
+ heap32[(r14+2)] = -1;
+ heap32[(r14+3)] = -1;
+ heap8[r8+16] = r13;
+ heap32[(r14+5)] = r11;
+ heap32[(r14+6)] = r10;
+ heap32[(r14+7)] = 0;
+ heap32[(r14+8)] = 1050253722;
+ heap32[(r14)] = r9;
+ heap32[(r14+135)] = -1287930578;
+ heap32[(r14+136)] = 0;
+ heap32[(r14+137)] = 1065353216;
+ heap32[(r14+138)] = 0;
+ heap32[(r14+139)] = -2147483648;
+ heap32[(r14+140)] = 1065353216;
+ heap32[(r14+141)] = 0;
+ heap32[(r14+142)] = 0;
+ heap32[(r14+143)] = -1082130432;
+ heap32[(r14+144)] = -2147483648;
+ heap32[(r14+145)] = -1287930578;
+ heap32[(r14+146)] = 0;
+ heap32[(r14+147)] = 0;
+ heap32[(r14+148)] = 1059145646;
+ heap32[(r14+149)] = 0;
+ heap32[(r14+150)] = 0;
+ heap32[(r14+151)] = -1287930578;
+ heap32[(r14+152)] = 0;
+ heap32[(r14+153)] = 1065353216;
+ heap32[(r14+154)] = 0;
+ heap32[(r14+155)] = -2147483648;
+ heap32[(r14+156)] = 1065353216;
+ heap32[(r14+157)] = 0;
+ heap32[(r14+158)] = 0;
+ heap32[(r14+159)] = -1082130432;
+ heap32[(r14+160)] = -2147483648;
+ heap32[(r14+161)] = -1287930578;
+ heap32[(r14+162)] = 0;
+ heap32[(r14+163)] = 0;
+ heap32[(r14+164)] = -1090854584;
+ heap32[(r14+165)] = 0;
+ heap32[(r14+166)] = 0;
+ heap8[r8+720] = r13;
+ heap8[r8+721] = r13;
+ heap8[r8+723] = r13;
+ heap8[r8+724] = r4;
+ heap8[r8+725] = r13;
+ heap32[(r14+183)] = 0;
+ heap32[(r14+172)] = 1065353216;
+ heap32[(r14+173)] = -1082130432;
+ heap32[(r14+170)] = 1050253722;
+ heap32[(r14+171)] = 1065353216;
+ heap32[(r14+169)] = 1063675494;
+ heap8[r8+722] = r13;
+ heap32[(r14+179)] = 1065353216;
+ heap32[(g0)] = -1077342245;
+ heap32[(g0+1)] = 1086918619;
+ fmodf(i7);
+ f12 = f_g0;
+ if(f12 >=f13) //_LBB26_262
+{
+ f14 = 3.1415927410125732;
+ if(f12 >f14) //_LBB26_264
+{
+ f14 = -6.2831854820251465;
+ f12 = f12+f14;
+}
+}
+else{
+ f14 = 6.2831854820251465;
+ f12 = f12+f14;
+}
+ r9 = r8 >> 2;
+ heapFloat[(r9+172)] = f12;
+ heap32[(g0)] = 0;
+ heap32[(g0+1)] = 1086918619;
+ fmodf(i7);
+ f12 = f_g0;
+ if(f12 >=f13) //_LBB26_267
+{
+ f13 = 3.1415927410125732;
+ if(f12 >f13) //_LBB26_269
+{
+ f13 = -6.2831854820251465;
+ f12 = f12+f13;
+}
+}
+else{
+ f13 = 6.2831854820251465;
+ f12 = f12+f13;
+}
+ heapFloat[(r9+173)] = f12;
+ heap32[(r9+169)] = 1063675494;
+ heap32[(r9+170)] = 1050253722;
+ heap32[(r9+171)] = 1065353216;
+ heap32[(r12+33)] = r8;
+ r9 = heap32[(r12+1)];
+ r10 = r9 >> 2;
+ r10 = heap32[(r10)];
+ r10 = r10 >> 2;
+ r10 = heap32[(r10+13)];
+ heap32[(g0)] = r9;
+ heap32[(g0+1)] = r8;
+ heap32[(g0+2)] = 1;
+ __FUNCTION_TABLE__[(r10)>>2](i7);
+ r8 = heap32[(r1+10)];
+ r9 = heap32[(r1+9)];
+ if(r8 ==r9) //_LBB26_272
+{
+ r10 = r9 << 1;
+ r10 = r9 == 0 ? r4 : r10;
+if(!(r8 >=r10)) //_LBB26_271
+{
+ if(r10 !=0) //_LBB26_275
+{
+ r8 = heap32[(r2)];
+ r11 = r10 << 2;
+ r8 = (r8 + 1)|0;
+ r11 = r11 | 3;
+ heap32[(r2)] = r8;
+ r8 = (r11 + 16)|0;
+ heap32[(g0)] = r8;
+ malloc(i7);
+ r8 = r_g0;
+ if(r8 !=0) //_LBB26_277
+{
+ r11 = (r8 + 4)|0;
+ r11 = (r13 - r11)|0;
+ r11 = r11 & 15;
+ r11 = (r8 + r11)|0;
+ r12 = (r11 + 4)|0;
+ r11 = r11 >> 2;
+ heap32[(r11)] = r8;
+ r8 = r12;
+}
+}
+else{
+ r8 = 0;
+}
+_358: do {
+ if(r9 <1) //_LBB26_280
+{
+ r11 = heap32[(r1+11)];
+}
+else{
+_360: while(true){
+ r11 = heap32[(r1+11)];
+ r12 = r13 << 2;
+ r14 = (r11 + r12)|0;
+ r14 = r14 >> 2;
+ r12 = (r8 + r12)|0;
+ r14 = heap32[(r14)];
+ r13 = (r13 + 1)|0;
+ r12 = r12 >> 2;
+ heap32[(r12)] = r14;
+if(!(r9 !=r13)) //_LBB26_281
+{
+break _358;
+}
+}
+}
+} while(0);
+ if(r11 !=0) //_LBB26_284
+{
+ r12 = heapU8[r6+48];
+ if(r12 !=0) //_LBB26_286
+{
+ r9 = gNumAlignedFree;
+ r9 = r9 >> 2;
+ r12 = heap32[(r9)];
+ r12 = (r12 + 1)|0;
+ r11 = r11 >> 2;
+ heap32[(r9)] = r12;
+ r9 = heap32[(r11+-1)];
+ heap32[(g0)] = r9;
+ free(i7);
+ r9 = heap32[(r1+9)];
+}
+ heap32[(r1+11)] = 0;
+}
+ heap8[r6+48] = r4;
+ heap32[(r1+11)] = r8;
+ heap32[(r1+10)] = r10;
+}
+}
+ r8 = r9 << 2;
+ r9 = heap32[(r1+11)];
+ r8 = (r9 + r8)|0;
+ r8 = r8 >> 2;
+ heap32[(r8)] = r7;
+ r7 = heap32[(r1+9)];
+ r5 = (r5 + 1)|0;
+ r7 = (r7 + 1)|0;
+ heap32[(r1+9)] = r7;
+if(!(r0 !=r5)) //_LBB26_185
+{
+break _262;
+}
+}
+ f3 = 7;
+ f4 = -2;
+ r0 = (r0 + -1)|0;
+ f1 = f1+f3;
+ f2 = f2+f4;
+ r3 = (r3 + 1)|0;
+ if(r0 ==0) //_LBB26_165
+{
+break _161;
+}
+else{
+continue _260;
+}
+}
+}
+}
+}
+}
+} while(0);
+ return;
+break;
+case 46:
+ r0 = _2E_str674;
+ r1 = _2E_str573;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 53;
+ _assert(i7);
+break;
+}
+}
+
+function _GLOBAL__D__Z6mymainiPPc(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = _ZL14benchmarkDemo4;
+ r1 = _ZTV13BenchmarkDemo;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ heap32[(g0)] = r0;
+ _ZN13BenchmarkDemo11exitPhysicsEv(i7);
+ r1 = heap32[(r2+11)];
+if(!(r1 ==0)) //_LBB27_4
+{
+ r3 = heapU8[r0+48];
+if(!(r3 ==0)) //_LBB27_3
+{
+ r3 = gNumAlignedFree;
+ r3 = r3 >> 2;
+ r4 = heap32[(r3)];
+ r4 = (r4 + 1)|0;
+ r1 = r1 >> 2;
+ heap32[(r3)] = r4;
+ r1 = heap32[(r1+-1)];
+ heap32[(g0)] = r1;
+ free(i7);
+}
+ heap32[(r2+11)] = 0;
+}
+ r1 = 1;
+ heap8[r0+48] = r1;
+ heap32[(r2+11)] = 0;
+ heap32[(r2+9)] = 0;
+ heap32[(r2+10)] = 0;
+ r3 = heap32[(r2+6)];
+if(!(r3 ==0)) //_LBB27_8
+{
+ r4 = heapU8[r0+28];
+if(!(r4 ==0)) //_LBB27_7
+{
+ r4 = gNumAlignedFree;
+ r4 = r4 >> 2;
+ r5 = heap32[(r4)];
+ r5 = (r5 + 1)|0;
+ r3 = r3 >> 2;
+ heap32[(r4)] = r5;
+ r3 = heap32[(r3+-1)];
+ heap32[(g0)] = r3;
+ free(i7);
+}
+ heap32[(r2+6)] = 0;
+}
+ heap8[r0+28] = r1;
+ heap32[(r2+6)] = 0;
+ heap32[(r2+4)] = 0;
+ heap32[(r2+5)] = 0;
+ return;
+}
+
+function _ZN14BenchmarkDemo4D1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV14BenchmarkDemo4;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ heap32[(g0)] = r0;
+ _ZN13BenchmarkDemoD2Ev(i7);
+ return;
+}
+
+function _ZN14BenchmarkDemo4D0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV14BenchmarkDemo4;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ heap32[(g0)] = r0;
+ _ZN13BenchmarkDemoD2Ev(i7);
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function __draw(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = _ZL14benchmarkDemo4;
+ heap32[(g0)] = r0;
+ _ZN13BenchmarkDemo20clientMoveAndDisplayEv(i7);
+ return;
+}
+
+function _ZN13BenchmarkDemoD2Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV13BenchmarkDemo;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ heap32[(g0)] = r0;
+ _ZN13BenchmarkDemo11exitPhysicsEv(i7);
+ r1 = heap32[(r2+11)];
+if(!(r1 ==0)) //_LBB31_4
+{
+ r3 = heapU8[r0+48];
+if(!(r3 ==0)) //_LBB31_3
+{
+ r3 = gNumAlignedFree;
+ r3 = r3 >> 2;
+ r4 = heap32[(r3)];
+ r4 = (r4 + 1)|0;
+ r1 = r1 >> 2;
+ heap32[(r3)] = r4;
+ r1 = heap32[(r1+-1)];
+ heap32[(g0)] = r1;
+ free(i7);
+}
+ heap32[(r2+11)] = 0;
+}
+ r1 = 1;
+ heap8[r0+48] = r1;
+ heap32[(r2+11)] = 0;
+ heap32[(r2+9)] = 0;
+ heap32[(r2+10)] = 0;
+ r3 = heap32[(r2+6)];
+if(!(r3 ==0)) //_LBB31_8
+{
+ r4 = heapU8[r0+28];
+if(!(r4 ==0)) //_LBB31_7
+{
+ r4 = gNumAlignedFree;
+ r4 = r4 >> 2;
+ r5 = heap32[(r4)];
+ r5 = (r5 + 1)|0;
+ r3 = r3 >> 2;
+ heap32[(r4)] = r5;
+ r3 = heap32[(r3+-1)];
+ heap32[(g0)] = r3;
+ free(i7);
+}
+ heap32[(r2+6)] = 0;
+}
+ heap8[r0+28] = r1;
+ heap32[(r2+6)] = 0;
+ heap32[(r2+4)] = 0;
+ heap32[(r2+5)] = 0;
+ return;
+}
+
+function __init(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = gDisableDeactivation;
+ r1 = 1;
+ heap8[r0] = r1;
+ _ZN13BenchmarkDemo11initPhysicsEv(i7);
+ return;
+}
+
+function _ZN15btNullPairCache23getOverlappingPairArrayEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = (r0 + 4)|0;
+ r_g0 = r0;
+ return;
+}
+
+function _ZN15btNullPairCache20cleanOverlappingPairER16btBroadphasePairP12btDispatcher(sp)
+{
+ var i7;
+ var fp = sp>>2;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ return;
+}
+
+function _ZNK15btNullPairCache22getNumOverlappingPairsEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = 0;
+ r_g0 = r0;
+ return;
+}
+
+function _ZN15btNullPairCache19cleanProxyFromPairsEP17btBroadphaseProxyP12btDispatcher(sp)
+{
+ var i7;
+ var fp = sp>>2;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ return;
+}
+
+function _ZN15btNullPairCache24setOverlapFilterCallbackEP23btOverlapFilterCallback(sp)
+{
+ var i7;
+ var fp = sp>>2;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ return;
+}
+
+function _ZN15btNullPairCache26processAllOverlappingPairsEP17btOverlapCallbackP12btDispatcher(sp)
+{
+ var i7;
+ var fp = sp>>2;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ return;
+}
+
+function _ZN15btNullPairCache8findPairEP17btBroadphaseProxyS1_(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = 0;
+ r_g0 = r0;
+ return;
+}
+
+function _ZN15btNullPairCache18hasDeferredRemovalEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = 1;
+ r_g0 = r0;
+ return;
+}
+
+function _ZN15btNullPairCache28setInternalGhostPairCallbackEP25btOverlappingPairCallback(sp)
+{
+ var i7;
+ var fp = sp>>2;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ return;
+}
+
+function _ZN15btNullPairCache18addOverlappingPairEP17btBroadphaseProxyS1_(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = 0;
+ r_g0 = r0;
+ return;
+}
+
+function _ZN15btNullPairCache21removeOverlappingPairEP17btBroadphaseProxyS1_P12btDispatcher(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = 0;
+ r_g0 = r0;
+ return;
+}
+
+function _ZN15btNullPairCache37removeOverlappingPairsContainingProxyEP17btBroadphaseProxyP12btDispatcher(sp)
+{
+ var i7;
+ var fp = sp>>2;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ return;
+}
+
+function _ZN15btNullPairCache20sortOverlappingPairsEP12btDispatcher(sp)
+{
+ var i7;
+ var fp = sp>>2;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ return;
+}
+
+function _ZN15btNullPairCache26getOverlappingPairArrayPtrEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r0 = heap32[(r0+4)];
+ r_g0 = r0;
+ return;
+}
+
+function _ZNK15btNullPairCache26getOverlappingPairArrayPtrEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r0 = heap32[(r0+4)];
+ r_g0 = r0;
+ return;
+}
+
+function _ZN15btNullPairCacheD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV15btNullPairCache;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ r1 = heap32[(r2+4)];
+if(!(r1 ==0)) //_LBB48_4
+{
+ r3 = heapU8[r0+20];
+if(!(r3 ==0)) //_LBB48_3
+{
+ r3 = gNumAlignedFree;
+ r3 = r3 >> 2;
+ r4 = heap32[(r3)];
+ r4 = (r4 + 1)|0;
+ r1 = r1 >> 2;
+ heap32[(r3)] = r4;
+ r1 = heap32[(r1+-1)];
+ heap32[(g0)] = r1;
+ free(i7);
+}
+ heap32[(r2+4)] = 0;
+}
+ r1 = 1;
+ heap8[r0+20] = r1;
+ heap32[(r2+4)] = 0;
+ heap32[(r2+2)] = 0;
+ heap32[(r2+3)] = 0;
+ return;
+}
+
+function _ZN15btNullPairCacheD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV15btNullPairCache;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ r1 = heap32[(r2+4)];
+if(!(r1 ==0)) //_LBB49_4
+{
+ r3 = heapU8[r0+20];
+if(!(r3 ==0)) //_LBB49_3
+{
+ r3 = gNumAlignedFree;
+ r3 = r3 >> 2;
+ r4 = heap32[(r3)];
+ r4 = (r4 + 1)|0;
+ r1 = r1 >> 2;
+ heap32[(r3)] = r4;
+ r1 = heap32[(r1+-1)];
+ heap32[(g0)] = r1;
+ free(i7);
+}
+ heap32[(r2+4)] = 0;
+}
+ r1 = 1;
+ heap8[r0+20] = r1;
+ heap32[(r2+4)] = 0;
+ heap32[(r2+2)] = 0;
+ heap32[(r2+3)] = 0;
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZNK20btAxisSweep3InternalItE7getAabbEP17btBroadphaseProxyR9btVector3S4_(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ r1 = heap32[(fp+2)];
+ r0 = r0 >> 2;
+ r1 = r1 >> 2;
+ heap32[(r1)] = heap32[(r0+4)];
+ heap32[(r1+1)] = heap32[(r0+5)];
+ r2 = heap32[(fp+3)];
+ heap32[(r1+2)] = heap32[(r0+6)];
+ r2 = r2 >> 2;
+ heap32[(r1+3)] = heap32[(r0+7)];
+ heap32[(r2)] = heap32[(r0+8)];
+ heap32[(r2+1)] = heap32[(r0+9)];
+ heap32[(r2+2)] = heap32[(r0+10)];
+ heap32[(r2+3)] = heap32[(r0+11)];
+ return;
+}
+
+function _ZN20btAxisSweep3InternalItE23getOverlappingPairCacheEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r0 = heap32[(r0+23)];
+ r_g0 = r0;
+ return;
+}
+
+function _ZNK20btAxisSweep3InternalItE23getOverlappingPairCacheEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r0 = heap32[(r0+23)];
+ r_g0 = r0;
+ return;
+}
+
+function _ZNK20btAxisSweep3InternalItE17getBroadphaseAabbER9btVector3S2_(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = heap32[(fp+1)];
+ r0 = r0 >> 2;
+ r1 = r1 >> 2;
+ heap32[(r1)] = heap32[(r0+2)];
+ heap32[(r1+1)] = heap32[(r0+3)];
+ r2 = heap32[(fp+2)];
+ heap32[(r1+2)] = heap32[(r0+4)];
+ r2 = r2 >> 2;
+ heap32[(r1+3)] = heap32[(r0+5)];
+ heap32[(r2)] = heap32[(r0+6)];
+ heap32[(r2+1)] = heap32[(r0+7)];
+ heap32[(r2+2)] = heap32[(r0+8)];
+ heap32[(r2+3)] = heap32[(r0+9)];
+ return;
+}
+
+function _ZN20btAxisSweep3InternalItE9resetPoolEP12btDispatcher(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = heapU16[(r0+56)>>1];
+if(!(r1 !=0)) //_LBB54_6
+{
+ r1 = 1;
+ heap16[(r0+64)>>1] = r1;
+ r2 = heapU16[(r0+58)>>1];
+ if(uint(r2) >uint(1)) //_LBB54_3
+{
+ r3 = 2;
+_5: while(true){
+ r2 = r1 & 65535;
+ r4 = r0 >> 2;
+ r2 = r2 << 6;
+ r4 = heap32[(r4+15)];
+ r2 = (r4 + r2)|0;
+ heap16[(r2+48)>>1] = r3;
+ r1 = (r1 + 1)|0;
+ r2 = heapU16[(r0+58)>>1];
+ r3 = (r3 + 1)|0;
+ r4 = r1 & 65535;
+if(!(uint(r2) >uint(r4))) //_LBB54_4
+{
+break _5;
+}
+}
+}
+ r1 = r2 & 65535;
+ r0 = r0 >> 2;
+ r1 = r1 << 6;
+ r0 = heap32[(r0+15)];
+ r0 = (r1 + r0)|0;
+ r1 = 0;
+ heap16[(r0+-16)>>1] = r1;
+}
+ return;
+}
+
+function _ZN20btAxisSweep3InternalItE10printStatsEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ return;
+}
+
+function _ZN20btAxisSweep3InternalItE8aabbTestERK9btVector3S3_R24btBroadphaseAabbCallback(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var f0;
+ var f1;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ r2 = heap32[(r1+27)];
+ r3 = heap32[(fp+1)];
+ r4 = heap32[(fp+2)];
+ r5 = heap32[(fp+3)];
+ if(r2 !=0) //_LBB56_2
+{
+ r0 = r2 >> 2;
+ r0 = heap32[(r0)];
+ r0 = r0 >> 2;
+ r0 = heap32[(r0+7)];
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = r3;
+ heap32[(g0+2)] = r4;
+ heap32[(g0+3)] = r5;
+ __FUNCTION_TABLE__[(r0)>>2](i7);
+ return;
+}
+else{
+ r2 = heapU16[(r0+56)>>1];
+ r2 = r2 << 1;
+ r2 = r2 | 1;
+if(!(r2 ==1)) //_LBB56_18
+{
+ r2 = 1;
+ r6 = 2;
+_6: while(true){
+ r7 = r6;
+ r6 = r2 & 65535;
+ r8 = heap32[(r1+17)];
+ r6 = r6 << 2;
+ r9 = heapU8[r8+r6];
+ r9 = r9 & 1;
+if(!(r9 ==0)) //_LBB56_17
+{
+ r6 = (r8 + r6)|0;
+ r6 = heapU16[(r6+2)>>1];
+ r8 = heap32[(r1+15)];
+ r6 = r6 << 6;
+ r6 = (r8 + r6)|0;
+ r8 = r3 >> 2;
+ r9 = r6 >> 2;
+ f0 = heapFloat[(r8)];
+ f1 = heapFloat[(r9+8)];
+ if(f0 >f1) //_LBB56_8
+{
+__label__ = 8;
+}
+else{
+ r10 = r4 >> 2;
+ f0 = heapFloat[(r10)];
+ f1 = heapFloat[(r9+4)];
+ if(f0 <f1) //_LBB56_8
+{
+__label__ = 8;
+}
+else{
+ r10 = 1;
+__label__ = 9;
+}
+}
+if (__label__ == 8){
+ r10 = 0;
+}
+ f0 = heapFloat[(r8+2)];
+ f1 = heapFloat[(r9+10)];
+ if(f0 >f1) //_LBB56_12
+{
+__label__ = 11;
+}
+else{
+ r11 = r4 >> 2;
+ f0 = heapFloat[(r11+2)];
+ f1 = heapFloat[(r9+6)];
+ if(f0 <f1) //_LBB56_12
+{
+__label__ = 11;
+}
+else{
+__label__ = 12;
+}
+}
+if (__label__ == 11){
+ r10 = 0;
+}
+ f0 = heapFloat[(r8+1)];
+ f1 = heapFloat[(r9+9)];
+if(!(f0 >f1)) //_LBB56_17
+{
+ r8 = r4 >> 2;
+ f0 = heapFloat[(r8+1)];
+ f1 = heapFloat[(r9+5)];
+if(!(f0 <f1)) //_LBB56_17
+{
+ r8 = r10 & 255;
+if(!(r8 ==0)) //_LBB56_17
+{
+ r8 = r5 >> 2;
+ r8 = heap32[(r8)];
+ r8 = r8 >> 2;
+ r8 = heap32[(r8+2)];
+ heap32[(g0)] = r5;
+ heap32[(g0+1)] = r6;
+ __FUNCTION_TABLE__[(r8)>>2](i7);
+}
+}
+}
+}
+ r8 = heapU16[(r0+56)>>1];
+ r6 = (r7 + 1)|0;
+ r2 = (r2 + 1)|0;
+ r8 = r8 << 1;
+ r7 = r7 & 65535;
+ r8 = r8 | 1;
+if(!(uint(r7) <uint(r8))) //_LBB56_4
+{
+break _6;
+}
+}
+}
+ return;
+}
+}
+
+function _ZN20btAxisSweep3InternalItE7rayTestERK9btVector3S3_R23btBroadphaseRayCallbackS3_S3_(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+var __label__ = 0;
+ i7 = sp + -24;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ r2 = heap32[(r1+27)];
+ r3 = heap32[(fp+3)];
+ if(r2 !=0) //_LBB57_2
+{
+ r0 = heap32[(fp+1)];
+ r1 = heap32[(fp+2)];
+ r4 = heap32[(fp+4)];
+ r5 = heap32[(fp+5)];
+ r6 = r2 >> 2;
+ r6 = heap32[(r6)];
+ r6 = r6 >> 2;
+ r6 = heap32[(r6+6)];
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = r0;
+ heap32[(g0+2)] = r1;
+ heap32[(g0+3)] = r3;
+ heap32[(g0+4)] = r4;
+ heap32[(g0+5)] = r5;
+ __FUNCTION_TABLE__[(r6)>>2](i7);
+ return;
+}
+else{
+ r2 = heapU16[(r0+56)>>1];
+ r2 = r2 << 1;
+ r2 = r2 | 1;
+if(!(r2 ==1)) //_LBB57_7
+{
+ r2 = 1;
+ r4 = 2;
+_6: while(true){
+ r5 = r2 & 65535;
+ r6 = heap32[(r1+17)];
+ r5 = r5 << 2;
+ r7 = heapU8[r6+r5];
+ r7 = r7 & 1;
+if(!(r7 ==0)) //_LBB57_6
+{
+ r7 = r3 >> 2;
+ r7 = heap32[(r7)];
+ r7 = r7 >> 2;
+ r5 = (r6 + r5)|0;
+ r5 = heapU16[(r5+2)>>1];
+ r6 = heap32[(r7+2)];
+ r7 = heap32[(r1+15)];
+ r5 = r5 << 6;
+ r5 = (r7 + r5)|0;
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r5;
+ __FUNCTION_TABLE__[(r6)>>2](i7);
+}
+ r5 = heapU16[(r0+56)>>1];
+ r6 = (r4 + 1)|0;
+ r2 = (r2 + 1)|0;
+ r5 = r5 << 1;
+ r7 = r4 & 65535;
+ r5 = r5 | 1;
+ r4 = r6;
+if(!(uint(r7) <uint(r5))) //_LBB57_4
+{
+break _6;
+}
+}
+}
+ return;
+}
+}
+
+function _ZNK20btAxisSweep3InternalItE8quantizeEPtRK9btVector3i(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ f0 = heapFloat[(fp+2)];
+ f1 = heapFloat[(r1+2)];
+ f2 = heapFloat[(fp+4)];
+ f3 = heapFloat[(r1+4)];
+ f4 = heapFloat[(fp+3)];
+ f5 = heapFloat[(r1+3)];
+ f0 = f0-f1;
+ f1 = heapFloat[(r1+10)];
+ f2 = f2-f3;
+ f3 = heapFloat[(r1+12)];
+ f4 = f4-f5;
+ f5 = heapFloat[(r1+11)];
+ f0 = f0*f1;
+ r1 = heap32[(fp+1)];
+ r2 = heap32[(fp+5)];
+ f1 = f2*f3;
+ f2 = f4*f5;
+ f3 = 0;
+ if(f0 >f3) //_LBB58_2
+{
+ r3 = heapU16[(r0+6)>>1];
+ f4 = r3; //fitos r3, f4
+ if(f0 <f4) //_LBB58_4
+{
+ r3 = heapU16[(r0+4)>>1];
+ r4 = Math.floor(f0);
+ r3 = r3 & r4;
+ r3 = r3 | r2;
+}
+else{
+ r4 = heapU16[(r0+4)>>1];
+ r3 = r4 & r3;
+ r3 = r3 | r2;
+}
+}
+else{
+ r3 = r2;
+}
+ heap16[(r1)>>1] = r3;
+ if(f2 >f3) //_LBB58_7
+{
+ r3 = heapU16[(r0+6)>>1];
+ f0 = r3; //fitos r3, f0
+ if(f2 <f0) //_LBB58_9
+{
+ r3 = heapU16[(r0+4)>>1];
+ r4 = Math.floor(f2);
+ r3 = r3 & r4;
+ r3 = r3 | r2;
+}
+else{
+ r4 = heapU16[(r0+4)>>1];
+ r3 = r4 & r3;
+ r3 = r3 | r2;
+}
+}
+else{
+ r3 = r2;
+}
+ heap16[(r1+2)>>1] = r3;
+ if(f1 >f3) //_LBB58_12
+{
+ r3 = heapU16[(r0+6)>>1];
+ f0 = r3; //fitos r3, f0
+ if(f1 <f0) //_LBB58_14
+{
+ r0 = heapU16[(r0+4)>>1];
+ r3 = Math.floor(f1);
+ r0 = r0 & r3;
+ r2 = r0 | r2;
+}
+else{
+ r0 = heapU16[(r0+4)>>1];
+ r0 = r0 & r3;
+ r2 = r0 | r2;
+}
+}
+ heap16[(r1+4)>>1] = r2;
+ return;
+}
+
+function _ZN20btAlignedObjectArrayI16btBroadphasePairE17quickSortInternalI29btBroadphasePairSortPredicateEEvT_ii(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+ var r13;
+ var r14;
+ var r15;
+ var r16;
+ var r17;
+ var r18;
+ var r19;
+ var r20;
+ var r21;
+ var r22;
+ var r23;
+ var r24;
+ var r25;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+2)];
+ r1 = heap32[(fp+1)];
+ r2 = (r0 + r1)|0;
+ r3 = r2 >>> 31;
+ r4 = heap32[(fp)];
+ r2 = (r2 + r3)|0;
+ r3 = r4 >> 2;
+ r2 = r2 & 536870910;
+ r5 = heap32[(r3+3)];
+ r2 = r2 << 3;
+ r2 = (r5 + r2)|0;
+ r2 = r2 >> 2;
+ r5 = heap32[(r2)];
+ r6 = heap32[(r2+1)];
+ r2 = heap32[(r2+2)];
+ r7 = r1;
+ r8 = r0;
+_1: while(true){
+ r9 = heap32[(r3+3)];
+ r10 = r7 << 4;
+ r10 = (r9 + r10)|0;
+ r11 = 0;
+_3: while(true){
+ r12 = r11 << 4;
+ r12 = (r10 + r12)|0;
+ r12 = r12 >> 2;
+ r13 = r11 << 2;
+ r14 = heap32[(r12)];
+ if(r14 !=0) //_LBB59_5
+{
+ r15 = r14 >> 2;
+ r15 = heap32[(r15+3)];
+}
+else{
+ r15 = -1;
+}
+ if(r5 !=0) //_LBB59_8
+{
+ r16 = r5 >> 2;
+ r16 = heap32[(r16+3)];
+}
+else{
+ r16 = -1;
+}
+ r17 = r13 << 2;
+ r17 = (r10 + r17)|0;
+ r17 = r17 >> 2;
+ r17 = heap32[(r17+1)];
+ if(r17 !=0) //_LBB59_11
+{
+ r18 = r17 >> 2;
+ r18 = heap32[(r18+3)];
+}
+else{
+ r18 = -1;
+}
+ if(r6 !=0) //_LBB59_14
+{
+ r19 = r6 >> 2;
+ r19 = heap32[(r19+3)];
+}
+else{
+ r19 = -1;
+}
+_21: do {
+if(!(r15 >r16)) //_LBB59_2
+{
+if(!(r14 !=r5)) //_LBB59_18
+{
+ if(r18 >r19) //_LBB59_2
+{
+break _21;
+}
+}
+ if(r14 !=r5) //_LBB59_22
+{
+break _3;
+}
+else{
+ if(r17 !=r6) //_LBB59_22
+{
+break _3;
+}
+else{
+ r15 = r13 << 2;
+ r15 = (r10 + r15)|0;
+ r15 = r15 >> 2;
+ r15 = heap32[(r15+2)];
+if(!(uint(r15) >uint(r2))) //_LBB59_2
+{
+break _3;
+}
+}
+}
+}
+} while(0);
+ r11 = (r11 + 1)|0;
+continue _3;
+}
+ r18 = r8 << 4;
+ r15 = (r7 + r11)|0;
+ r9 = (r9 + r18)|0;
+ r16 = 0;
+_30: while(true){
+ r19 = r16 << 2;
+ if(r5 !=0) //_LBB59_25
+{
+ r20 = r5 >> 2;
+ r20 = heap32[(r20+3)];
+}
+else{
+ r20 = -1;
+}
+ r21 = r19 << 2;
+ r21 = (r9 + r21)|0;
+ r21 = r21 >> 2;
+ r21 = heap32[(r21)];
+ if(r21 !=0) //_LBB59_28
+{
+ r22 = r21 >> 2;
+ r22 = heap32[(r22+3)];
+}
+else{
+ r22 = -1;
+}
+ if(r6 !=0) //_LBB59_31
+{
+ r23 = r6 >> 2;
+ r23 = heap32[(r23+3)];
+}
+else{
+ r23 = -1;
+}
+ r24 = r19 << 2;
+ r24 = (r9 + r24)|0;
+ r24 = r24 >> 2;
+ r24 = heap32[(r24+1)];
+ if(r24 !=0) //_LBB59_34
+{
+ r25 = r24 >> 2;
+ r25 = heap32[(r25+3)];
+}
+else{
+ r25 = -1;
+}
+_48: do {
+if(!(r20 >r22)) //_LBB59_21
+{
+if(!(r5 !=r21)) //_LBB59_38
+{
+ if(r23 >r25) //_LBB59_21
+{
+break _48;
+}
+}
+ if(r5 !=r21) //_LBB59_41
+{
+break _30;
+}
+else{
+ if(r6 !=r24) //_LBB59_41
+{
+break _30;
+}
+else{
+ r20 = r19 << 2;
+ r20 = (r9 + r20)|0;
+ r20 = r20 >> 2;
+ r20 = heap32[(r20+2)];
+if(!(uint(r2) >uint(r20))) //_LBB59_21
+{
+break _30;
+}
+}
+}
+}
+} while(0);
+ r16 = (r16 + -1)|0;
+continue _30;
+}
+ r20 = (r8 + r16)|0;
+ if(r15 <=r20) //_LBB59_43
+{
+ r13 = r13 << 2;
+ r10 = (r10 + r13)|0;
+ r10 = r10 >> 2;
+ r13 = heap32[(r12+3)];
+ r15 = heap32[(r10+2)];
+ r19 = r19 << 2;
+ r19 = (r9 + r19)|0;
+ heap32[(r10)] = r21;
+ r20 = r16 << 4;
+ r19 = r19 >> 2;
+ heap32[(r10+1)] = r24;
+ r19 = heap32[(r19+2)];
+ r9 = (r9 + r20)|0;
+ r9 = r9 >> 2;
+ heap32[(r10+2)] = r19;
+ r9 = heap32[(r9+3)];
+ heap32[(r12+3)] = r9;
+ r9 = heap32[(r3+3)];
+ r9 = (r9 + r18)|0;
+ r9 = (r9 + r20)|0;
+ r9 = r9 >> 2;
+ heap32[(r9)] = r14;
+ r7 = (r7 + r11)|0;
+ r8 = (r8 + r16)|0;
+ heap32[(r9+1)] = r17;
+ r7 = (r7 + 1)|0;
+ r8 = (r8 + -1)|0;
+ heap32[(r9+2)] = r15;
+ heap32[(r9+3)] = r13;
+}
+else{
+ r7 = r15;
+ r8 = r20;
+}
+ if(r7 <=r8) //_LBB59_1
+{
+continue _1;
+}
+else{
+break _1;
+}
+}
+if(!(r8 <=r1)) //_LBB59_47
+{
+ heap32[(g0)] = r4;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = r8;
+ _ZN20btAlignedObjectArrayI16btBroadphasePairE17quickSortInternalI29btBroadphasePairSortPredicateEEvT_ii(i7);
+}
+if(!(r7 >=r0)) //_LBB59_49
+{
+ heap32[(g0)] = r4;
+ heap32[(g0+1)] = r7;
+ heap32[(g0+2)] = r0;
+ _ZN20btAlignedObjectArrayI16btBroadphasePairE17quickSortInternalI29btBroadphasePairSortPredicateEEvT_ii(i7);
+}
+ return;
+}
+
+function _ZN20btAxisSweep3InternalItE11sortMinDownEitP12btDispatcherb(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+ var r13;
+ var r14;
+ var r15;
+ var r16;
+ var r17;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ r1 = heap32[(fp)];
+ r2 = r0 << 2;
+ r2 = (r1 + r2)|0;
+ r3 = heap32[(fp+2)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+17)];
+ r3 = r3 << 2;
+ r4 = (r2 + r3)|0;
+ r2 = heapU16[(r2+r3)>>1];
+ r3 = heapU16[(r4+-4)>>1];
+if(!(uint(r2) >=uint(r3))) //_LBB60_14
+{
+ r1 = r1 >> 2;
+ r2 = heap32[(fp+3)];
+ r3 = heap32[(r1+15)];
+ r5 = heapU16[(r4+2)>>1];
+ r6 = 1;
+ r7 = r6 << r0;
+ r7 = r7 & 3;
+ r6 = r6 << r7;
+ r5 = r5 << 6;
+ r5 = (r3 + r5)|0;
+ r6 = r6 & 3;
+ r0 = r0 << 1;
+ r8 = (r5 + 48)|0;
+ r7 = r7 << 1;
+ r9 = (r5 + 54)|0;
+ r6 = r6 << 1;
+ r10 = (r8 + r0)|0;
+ r11 = (r9 + r7)|0;
+ r12 = (r8 + r7)|0;
+ r9 = (r9 + r6)|0;
+ r8 = (r8 + r6)|0;
+ r4 = (r4 + 2)|0;
+_3: while(true){
+ r13 = heapU8[r4+-6];
+ r14 = heapU16[(r4+-4)>>1];
+ r13 = r13 & 1;
+ if(r13 ==0) //_LBB60_11
+{
+ r13 = r14 << 6;
+ r3 = (r3 + r13)|0;
+ r3 = (r3 + r0)|0;
+ r13 = heapU16[(r3+48)>>1];
+ r13 = (r13 + 1)|0;
+ heap16[(r3+48)>>1] = r13;
+}
+else{
+if(!(r2 ==0)) //_LBB60_10
+{
+ r13 = r14 << 6;
+ r13 = (r3 + r13)|0;
+ r15 = (r13 + r7)|0;
+ r16 = heapU16[(r11)>>1];
+ r17 = heapU16[(r15+48)>>1];
+if(!(uint(r16) <uint(r17))) //_LBB60_10
+{
+ r15 = heapU16[(r15+54)>>1];
+ r16 = heapU16[(r12)>>1];
+if(!(uint(r15) <uint(r16))) //_LBB60_10
+{
+ r15 = (r13 + r6)|0;
+ r16 = heapU16[(r9)>>1];
+ r17 = heapU16[(r15+48)>>1];
+if(!(uint(r16) <uint(r17))) //_LBB60_10
+{
+ r15 = heapU16[(r15+54)>>1];
+ r16 = heapU16[(r8)>>1];
+if(!(uint(r15) <uint(r16))) //_LBB60_10
+{
+ r15 = heap32[(r1+23)];
+ r16 = r15 >> 2;
+ r16 = heap32[(r16)];
+ r16 = r16 >> 2;
+ r16 = heap32[(r16+2)];
+ heap32[(g0)] = r15;
+ heap32[(g0+1)] = r5;
+ heap32[(g0+2)] = r13;
+ __FUNCTION_TABLE__[(r16)>>2](i7);
+ r15 = heap32[(r1+24)];
+if(!(r15 ==0)) //_LBB60_10
+{
+ r16 = r15 >> 2;
+ r16 = heap32[(r16)];
+ r16 = r16 >> 2;
+ r16 = heap32[(r16+2)];
+ heap32[(g0)] = r15;
+ heap32[(g0+1)] = r5;
+ heap32[(g0+2)] = r13;
+ __FUNCTION_TABLE__[(r16)>>2](i7);
+}
+}
+}
+}
+}
+}
+ r14 = r14 << 6;
+ r3 = (r3 + r14)|0;
+ r3 = (r3 + r0)|0;
+ r14 = heapU16[(r3+54)>>1];
+ r14 = (r14 + 1)|0;
+ heap16[(r3+54)>>1] = r14;
+}
+ r3 = heapU16[(r10)>>1];
+ r3 = (r3 + -1)|0;
+ heap16[(r10)>>1] = r3;
+ r3 = heapU16[(r4+-2)>>1];
+ r13 = heapU16[(r4)>>1];
+ r14 = heapU16[(r4+-4)>>1];
+ r15 = heapU16[(r4+-6)>>1];
+ heap16[(r4+-2)>>1] = r15;
+ heap16[(r4)>>1] = r14;
+ heap16[(r4+-6)>>1] = r3;
+ heap16[(r4+-4)>>1] = r13;
+ r13 = heapU16[(r4+-10)>>1];
+ if(uint(r3) >=uint(r13)) //_LBB60_14
+{
+break _3;
+}
+else{
+ r3 = heap32[(r1+15)];
+ r4 = (r4 + -4)|0;
+continue _3;
+}
+}
+}
+ return;
+}
+
+function _ZN20btAxisSweep3InternalItE9sortMaxUpEitP12btDispatcherb(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+ var r13;
+ var r14;
+ var r15;
+ var r16;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ r1 = heap32[(fp)];
+ r2 = r0 << 2;
+ r2 = (r1 + r2)|0;
+ r2 = r2 >> 2;
+ r3 = heap32[(fp+2)];
+ r4 = 1;
+ r2 = heap32[(r2+17)];
+ r3 = r3 << 2;
+ r2 = (r2 + r3)|0;
+ r3 = r4 << r0;
+ r3 = r3 & 3;
+ r1 = r1 >> 2;
+ r5 = heapU16[(r2+2)>>1];
+ r4 = r4 << r3;
+ r6 = heap32[(r1+15)];
+ r5 = r5 << 6;
+ r4 = r4 & 3;
+ r5 = (r6 + r5)|0;
+ r3 = r3 << 1;
+ r6 = (r5 + 48)|0;
+ r4 = r4 << 1;
+ r5 = (r5 + 54)|0;
+ r0 = r0 << 1;
+ r7 = heap32[(fp+3)];
+ r8 = (r5 + r3)|0;
+ r9 = (r6 + r3)|0;
+ r10 = (r5 + r4)|0;
+ r6 = (r6 + r4)|0;
+ r5 = (r5 + r0)|0;
+ r2 = (r2 + 4)|0;
+_1: while(true){
+ r11 = heapU16[(r2+2)>>1];
+ if(r11 ==0) //_LBB61_14
+{
+break _1;
+}
+else{
+ r12 = heapU16[(r2)>>1];
+ r13 = heapU16[(r2+-4)>>1];
+ if(uint(r13) >=uint(r12)) //_LBB61_1
+{
+ r13 = heap32[(r1+15)];
+ r11 = r11 & 65535;
+ r12 = r12 & 1;
+ if(r12 != 0) //_LBB61_10
+{
+ r11 = r11 << 6;
+ r11 = (r13 + r11)|0;
+ r11 = (r11 + r0)|0;
+ r12 = heapU16[(r11+54)>>1];
+ r12 = (r12 + -1)|0;
+ heap16[(r11+54)>>1] = r12;
+}
+else{
+if(!(r7 ==0)) //_LBB61_9
+{
+ r12 = r11 << 6;
+ r12 = (r13 + r12)|0;
+ r14 = (r12 + r3)|0;
+ r15 = heapU16[(r8)>>1];
+ r16 = heapU16[(r14+48)>>1];
+if(!(uint(r15) <uint(r16))) //_LBB61_9
+{
+ r14 = heapU16[(r14+54)>>1];
+ r15 = heapU16[(r9)>>1];
+if(!(uint(r14) <uint(r15))) //_LBB61_9
+{
+ r14 = (r12 + r4)|0;
+ r15 = heapU16[(r10)>>1];
+ r16 = heapU16[(r14+48)>>1];
+if(!(uint(r15) <uint(r16))) //_LBB61_9
+{
+ r14 = heapU16[(r14+54)>>1];
+ r15 = heapU16[(r6)>>1];
+if(!(uint(r14) <uint(r15))) //_LBB61_9
+{
+ r14 = heap32[(r1+23)];
+ r15 = r14 >> 2;
+ r15 = heap32[(r15)];
+ r15 = r15 >> 2;
+ r16 = heapU16[(r2+-2)>>1];
+ r15 = heap32[(r15+2)];
+ r16 = r16 << 6;
+ r16 = (r13 + r16)|0;
+ heap32[(g0)] = r14;
+ heap32[(g0+1)] = r16;
+ heap32[(g0+2)] = r12;
+ __FUNCTION_TABLE__[(r15)>>2](i7);
+ r14 = heap32[(r1+24)];
+if(!(r14 ==0)) //_LBB61_9
+{
+ r15 = r14 >> 2;
+ r15 = heap32[(r15)];
+ r15 = r15 >> 2;
+ r15 = heap32[(r15+2)];
+ heap32[(g0)] = r14;
+ heap32[(g0+1)] = r16;
+ heap32[(g0+2)] = r12;
+ __FUNCTION_TABLE__[(r15)>>2](i7);
+}
+}
+}
+}
+}
+}
+ r11 = r11 << 6;
+ r11 = (r13 + r11)|0;
+ r11 = (r11 + r0)|0;
+ r12 = heapU16[(r11+48)>>1];
+ r12 = (r12 + -1)|0;
+ heap16[(r11+48)>>1] = r12;
+}
+ r11 = heapU16[(r5)>>1];
+ r11 = (r11 + 1)|0;
+ heap16[(r5)>>1] = r11;
+ r11 = heapU16[(r2+-2)>>1];
+ r12 = heapU16[(r2+-4)>>1];
+ r13 = heapU16[(r2+2)>>1];
+ r14 = heapU16[(r2)>>1];
+ heap16[(r2+-4)>>1] = r14;
+ heap16[(r2+-2)>>1] = r13;
+ r13 = (r2 + 4)|0;
+ heap16[(r2)>>1] = r12;
+ heap16[(r2+2)>>1] = r11;
+ r2 = r13;
+continue _1;
+}
+else{
+break _1;
+}
+}
+}
+ return;
+}
+
+function _ZN20btAxisSweep3InternalItE9sortMinUpEitP12btDispatcherb(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+ var r13;
+ var r14;
+ var r15;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ r1 = heap32[(fp)];
+ r2 = r0 << 2;
+ r2 = (r1 + r2)|0;
+ r2 = r2 >> 2;
+ r3 = heap32[(fp+2)];
+ r2 = heap32[(r2+17)];
+ r3 = r3 << 2;
+ r2 = (r2 + r3)|0;
+ r1 = r1 >> 2;
+ r3 = heapU16[(r2+2)>>1];
+ r4 = 1;
+ r5 = r4 << r0;
+ r6 = heap32[(r1+15)];
+ r3 = r3 << 6;
+ r5 = r5 & 3;
+ r3 = (r6 + r3)|0;
+ r0 = r0 << 1;
+ r3 = (r3 + r0)|0;
+ r4 = r4 << r5;
+ r6 = heap32[(fp+3)];
+ r7 = heap32[(fp+4)];
+ r3 = (r3 + 48)|0;
+ r4 = r4 & 3;
+ r2 = (r2 + 4)|0;
+_1: while(true){
+ r8 = heapU16[(r2+2)>>1];
+ if(r8 ==0) //_LBB62_14
+{
+break _1;
+}
+else{
+ r9 = heapU16[(r2)>>1];
+ r10 = heapU16[(r2+-4)>>1];
+ if(uint(r10) >=uint(r9)) //_LBB62_1
+{
+ r10 = heap32[(r1+15)];
+ r8 = r8 & 65535;
+ r9 = r9 & 1;
+ if(r9 ==0) //_LBB62_10
+{
+ r8 = r8 << 6;
+ r8 = (r10 + r8)|0;
+ r8 = (r8 + r0)|0;
+ r9 = heapU16[(r8+48)>>1];
+ r9 = (r9 + -1)|0;
+ heap16[(r8+48)>>1] = r9;
+}
+else{
+if(!(r7 ==0)) //_LBB62_9
+{
+ r9 = heapU16[(r2+-2)>>1];
+ r9 = r9 << 6;
+ r11 = r8 << 6;
+ r9 = (r10 + r9)|0;
+ r12 = r5 << 1;
+ r11 = (r10 + r11)|0;
+ r13 = (r9 + r12)|0;
+ r12 = (r11 + r12)|0;
+ r14 = heapU16[(r13+54)>>1];
+ r15 = heapU16[(r12+48)>>1];
+if(!(uint(r14) <uint(r15))) //_LBB62_9
+{
+ r12 = heapU16[(r12+54)>>1];
+ r13 = heapU16[(r13+48)>>1];
+if(!(uint(r12) <uint(r13))) //_LBB62_9
+{
+ r12 = r4 << 1;
+ r13 = (r9 + r12)|0;
+ r12 = (r11 + r12)|0;
+ r14 = heapU16[(r13+54)>>1];
+ r15 = heapU16[(r12+48)>>1];
+if(!(uint(r14) <uint(r15))) //_LBB62_9
+{
+ r12 = heapU16[(r12+54)>>1];
+ r13 = heapU16[(r13+48)>>1];
+if(!(uint(r12) <uint(r13))) //_LBB62_9
+{
+ r12 = heap32[(r1+23)];
+ r13 = r12 >> 2;
+ r13 = heap32[(r13)];
+ r13 = r13 >> 2;
+ r13 = heap32[(r13+3)];
+ heap32[(g0)] = r12;
+ heap32[(g0+1)] = r9;
+ heap32[(g0+2)] = r11;
+ heap32[(g0+3)] = r6;
+ __FUNCTION_TABLE__[(r13)>>2](i7);
+ r12 = heap32[(r1+24)];
+if(!(r12 ==0)) //_LBB62_9
+{
+ r13 = r12 >> 2;
+ r13 = heap32[(r13)];
+ r13 = r13 >> 2;
+ r13 = heap32[(r13+3)];
+ heap32[(g0)] = r12;
+ heap32[(g0+1)] = r9;
+ heap32[(g0+2)] = r11;
+ heap32[(g0+3)] = r6;
+ __FUNCTION_TABLE__[(r13)>>2](i7);
+}
+}
+}
+}
+}
+}
+ r8 = r8 << 6;
+ r8 = (r10 + r8)|0;
+ r8 = (r8 + r0)|0;
+ r9 = heapU16[(r8+54)>>1];
+ r9 = (r9 + -1)|0;
+ heap16[(r8+54)>>1] = r9;
+}
+ r8 = heapU16[(r3)>>1];
+ r8 = (r8 + 1)|0;
+ heap16[(r3)>>1] = r8;
+ r8 = heapU16[(r2+-2)>>1];
+ r9 = heapU16[(r2+-4)>>1];
+ r10 = heapU16[(r2+2)>>1];
+ r11 = heapU16[(r2)>>1];
+ heap16[(r2+-4)>>1] = r11;
+ heap16[(r2+-2)>>1] = r10;
+ r10 = (r2 + 4)|0;
+ heap16[(r2)>>1] = r9;
+ heap16[(r2+2)>>1] = r8;
+ r2 = r10;
+continue _1;
+}
+else{
+break _1;
+}
+}
+}
+ return;
+}
+
+function _ZN20btAxisSweep3InternalItE11sortMaxDownEitP12btDispatcherb(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+ var r13;
+ var r14;
+ var r15;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ r1 = heap32[(fp)];
+ r2 = r0 << 2;
+ r2 = (r1 + r2)|0;
+ r3 = heap32[(fp+2)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+17)];
+ r4 = r3 << 2;
+ r5 = (r2 + r4)|0;
+ r4 = heapU16[(r2+r4)>>1];
+ r6 = heapU16[(r5+-4)>>1];
+if(!(uint(r4) >=uint(r6))) //_LBB63_14
+{
+ r1 = r1 >> 2;
+ r4 = heap32[(fp+3)];
+ r6 = heap32[(fp+4)];
+ r7 = heap32[(r1+15)];
+ r3 = r3 << 2;
+ r2 = (r2 + r3)|0;
+ r2 = heapU16[(r2+2)>>1];
+ r3 = 1;
+ r8 = r3 << r0;
+ r2 = r2 << 6;
+ r8 = r8 & 3;
+ r2 = (r7 + r2)|0;
+ r0 = r0 << 1;
+ r3 = r3 << r8;
+ r2 = (r2 + r0)|0;
+ r3 = r3 & 3;
+ r2 = (r2 + 54)|0;
+ r5 = (r5 + 2)|0;
+_3: while(true){
+ r9 = heapU8[r5+-6];
+ r10 = heapU16[(r5+-4)>>1];
+ r9 = r9 & 1;
+ if(r9 != 0) //_LBB63_11
+{
+ r9 = r10 << 6;
+ r7 = (r7 + r9)|0;
+ r7 = (r7 + r0)|0;
+ r9 = heapU16[(r7+54)>>1];
+ r9 = (r9 + 1)|0;
+ heap16[(r7+54)>>1] = r9;
+}
+else{
+if(!(r6 ==0)) //_LBB63_10
+{
+ r9 = heapU16[(r5)>>1];
+ r9 = r9 << 6;
+ r11 = r10 << 6;
+ r9 = (r7 + r9)|0;
+ r12 = r8 << 1;
+ r11 = (r7 + r11)|0;
+ r13 = (r9 + r12)|0;
+ r12 = (r11 + r12)|0;
+ r14 = heapU16[(r13+54)>>1];
+ r15 = heapU16[(r12+48)>>1];
+if(!(uint(r14) <uint(r15))) //_LBB63_10
+{
+ r12 = heapU16[(r12+54)>>1];
+ r13 = heapU16[(r13+48)>>1];
+if(!(uint(r12) <uint(r13))) //_LBB63_10
+{
+ r12 = r3 << 1;
+ r13 = (r9 + r12)|0;
+ r12 = (r11 + r12)|0;
+ r14 = heapU16[(r13+54)>>1];
+ r15 = heapU16[(r12+48)>>1];
+if(!(uint(r14) <uint(r15))) //_LBB63_10
+{
+ r12 = heapU16[(r12+54)>>1];
+ r13 = heapU16[(r13+48)>>1];
+if(!(uint(r12) <uint(r13))) //_LBB63_10
+{
+ r12 = heap32[(r1+23)];
+ r13 = r12 >> 2;
+ r13 = heap32[(r13)];
+ r13 = r13 >> 2;
+ r13 = heap32[(r13+3)];
+ heap32[(g0)] = r12;
+ heap32[(g0+1)] = r9;
+ heap32[(g0+2)] = r11;
+ heap32[(g0+3)] = r4;
+ __FUNCTION_TABLE__[(r13)>>2](i7);
+ r12 = heap32[(r1+24)];
+if(!(r12 ==0)) //_LBB63_10
+{
+ r13 = r12 >> 2;
+ r13 = heap32[(r13)];
+ r13 = r13 >> 2;
+ r13 = heap32[(r13+3)];
+ heap32[(g0)] = r12;
+ heap32[(g0+1)] = r9;
+ heap32[(g0+2)] = r11;
+ heap32[(g0+3)] = r4;
+ __FUNCTION_TABLE__[(r13)>>2](i7);
+}
+}
+}
+}
+}
+}
+ r10 = r10 << 6;
+ r7 = (r7 + r10)|0;
+ r7 = (r7 + r0)|0;
+ r10 = heapU16[(r7+48)>>1];
+ r10 = (r10 + 1)|0;
+ heap16[(r7+48)>>1] = r10;
+}
+ r7 = heapU16[(r2)>>1];
+ r7 = (r7 + -1)|0;
+ heap16[(r2)>>1] = r7;
+ r7 = heapU16[(r5+-2)>>1];
+ r9 = heapU16[(r5)>>1];
+ r10 = heapU16[(r5+-4)>>1];
+ r11 = heapU16[(r5+-6)>>1];
+ heap16[(r5+-2)>>1] = r11;
+ heap16[(r5)>>1] = r10;
+ heap16[(r5+-6)>>1] = r7;
+ heap16[(r5+-4)>>1] = r9;
+ r9 = heapU16[(r5+-10)>>1];
+ if(uint(r7) >=uint(r9)) //_LBB63_14
+{
+break _3;
+}
+else{
+ r7 = heap32[(r1+15)];
+ r5 = (r5 + -4)|0;
+continue _3;
+}
+}
+}
+ return;
+}
+
+function _ZN20btAxisSweep3InternalItE7setAabbEP17btBroadphaseProxyRK9btVector3S5_P12btDispatcher(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+ var r13;
+ var r14;
+ var r15;
+ var r16;
+ var r17;
+ var r18;
+ var r19;
+ var r20;
+ var f0;
+ var f1;
+ var f2;
+var __label__ = 0;
+ i7 = sp + -40;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+2)];
+ r1 = heap32[(fp+1)];
+ r2 = r0 >> 2;
+ r3 = r1 >> 2;
+ heap32[(r3+4)] = heap32[(r2)];
+ heap32[(r3+5)] = heap32[(r2+1)];
+ r4 = heap32[(fp+3)];
+ heap32[(r3+6)] = heap32[(r2+2)];
+ heap32[(r3+7)] = heap32[(r2+3)];
+ r5 = r4 >> 2;
+ heap32[(r3+8)] = heap32[(r5)];
+ heap32[(r3+9)] = heap32[(r5+1)];
+ r6 = heap32[(fp)];
+ heap32[(r3+10)] = heap32[(r5+2)];
+ heap32[(r3+11)] = heap32[(r5+3)];
+ r7 = r6 >> 2;
+ r1 = heapU16[(r1+12)>>1];
+ r8 = heap32[(r7+15)];
+ f0 = heapFloat[(r2)];
+ f1 = heapFloat[(r2+1)];
+ f2 = heapFloat[(r2+2)];
+ r2 = sp + -6;
+ heap32[(g0)] = r6;
+ heap32[(g0+1)] = r2;
+ heapFloat[(g0+2)] = f0;
+ heapFloat[(g0+3)] = f1;
+ heapFloat[(g0+4)] = f2;
+ heap32[(g0+5)] = 0;
+ _ZNK20btAxisSweep3InternalItE8quantizeEPtRK9btVector3i(i7);
+ f0 = heapFloat[(r5)];
+ f1 = heapFloat[(r5+1)];
+ f2 = heapFloat[(r5+2)];
+ r1 = r1 << 6;
+ r5 = sp + -12;
+ r1 = (r8 + r1)|0;
+ heap32[(g0)] = r6;
+ heap32[(g0+1)] = r5;
+ heapFloat[(g0+2)] = f0;
+ heapFloat[(g0+3)] = f1;
+ heapFloat[(g0+4)] = f2;
+ heap32[(g0+5)] = 1;
+ r8 = heap32[(fp+4)];
+ r1 = (r1 + 48)|0;
+ r9 = 0;
+ _ZNK20btAxisSweep3InternalItE8quantizeEPtRK9btVector3i(i7);
+ r10 = r9;
+_1: while(true){
+ r11 = r9 << 2;
+ r12 = r9 << 1;
+ r13 = (r1 - r12)|0;
+ r11 = (r6 - r11)|0;
+ r14 = heapU16[(r13)>>1];
+ r13 = heapU16[(r13+6)>>1];
+ r11 = r11 >> 2;
+ r15 = (r2 - r12)|0;
+ r12 = (r5 - r12)|0;
+ r16 = heap32[(r11+17)];
+ r17 = r14 << 2;
+ r18 = r13 << 2;
+ r15 = heapU16[(r15)>>1];
+ r19 = heapU16[(r16+r17)>>1];
+ r20 = heapU16[(r16+r18)>>1];
+ r12 = heapU16[(r12)>>1];
+ heap16[(r16+r17)>>1] = r15;
+ r11 = heap32[(r11+17)];
+ r15 = (r15 - r19)|0;
+ heap16[(r11+r18)>>1] = r12;
+if(!(r15 >-1)) //_LBB64_3
+{
+ heap32[(g0)] = r6;
+ heap32[(g0+1)] = r10;
+ heap32[(g0+2)] = r14;
+ heap32[(g0+3)] = 1;
+ _ZN20btAxisSweep3InternalItE11sortMinDownEitP12btDispatcherb(i7);
+}
+ r11 = (r12 - r20)|0;
+if(!(r11 <1)) //_LBB64_5
+{
+ heap32[(g0)] = r6;
+ heap32[(g0+1)] = r10;
+ heap32[(g0+2)] = r13;
+ heap32[(g0+3)] = 1;
+ _ZN20btAxisSweep3InternalItE9sortMaxUpEitP12btDispatcherb(i7);
+}
+if(!(r15 <1)) //_LBB64_7
+{
+ heap32[(g0)] = r6;
+ heap32[(g0+1)] = r10;
+ heap32[(g0+2)] = r14;
+ heap32[(g0+3)] = r8;
+ heap32[(g0+4)] = 1;
+ _ZN20btAxisSweep3InternalItE9sortMinUpEitP12btDispatcherb(i7);
+}
+if(!(r11 >-1)) //_LBB64_9
+{
+ heap32[(g0)] = r6;
+ heap32[(g0+1)] = r10;
+ heap32[(g0+2)] = r13;
+ heap32[(g0+3)] = r8;
+ heap32[(g0+4)] = 1;
+ _ZN20btAxisSweep3InternalItE11sortMaxDownEitP12btDispatcherb(i7);
+}
+ r9 = (r9 + -1)|0;
+ r10 = (r10 + 1)|0;
+ if(r9 !=-3) //_LBB64_1
+{
+continue _1;
+}
+else{
+break _1;
+}
+}
+ r1 = heap32[(r7+27)];
+if(!(r1 ==0)) //_LBB64_12
+{
+ r2 = r1 >> 2;
+ r2 = heap32[(r2)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+4)];
+ r3 = heap32[(r3+15)];
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r3;
+ heap32[(g0+2)] = r0;
+ heap32[(g0+3)] = r4;
+ heap32[(g0+4)] = r8;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+}
+ return;
+}
+
+function _ZN20btAxisSweep3InternalItE12destroyProxyEP17btBroadphaseProxyP12btDispatcher(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+ var r13;
+var __label__ = 0;
+ i7 = sp + -24;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ r2 = heap32[(r1+27)];
+ r3 = heap32[(fp+1)];
+ r4 = heap32[(fp+2)];
+if(!(r2 ==0)) //_LBB65_2
+{
+ r5 = r2 >> 2;
+ r5 = heap32[(r5)];
+ r5 = r5 >> 2;
+ r6 = r3 >> 2;
+ r5 = heap32[(r5+3)];
+ r6 = heap32[(r6+15)];
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = r6;
+ heap32[(g0+2)] = r4;
+ __FUNCTION_TABLE__[(r5)>>2](i7);
+}
+ r2 = heap32[(r1+23)];
+ r5 = r2 >> 2;
+ r5 = heap32[(r5)];
+ r5 = r5 >> 2;
+ r3 = r3 >> 2;
+ r3 = heap32[(r3+3)];
+ r6 = heap32[(r1+15)];
+ r5 = heap32[(r5+14)];
+ heap32[(g0)] = r2;
+ __FUNCTION_TABLE__[(r5)>>2](i7);
+ r2 = r_g0;
+if(!(r2 !=0)) //_LBB65_4
+{
+ r2 = heap32[(r1+23)];
+ r5 = r2 >> 2;
+ r5 = heap32[(r5)];
+ r5 = r5 >> 2;
+ r5 = heap32[(r5+4)];
+ r7 = r3 & 65535;
+ r7 = r7 << 6;
+ r7 = (r6 + r7)|0;
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = r7;
+ heap32[(g0+2)] = r4;
+ __FUNCTION_TABLE__[(r5)>>2](i7);
+}
+ r2 = heap32[(r1+15)];
+ r5 = heapU16[(r0+56)>>1];
+ r7 = heapU16[(r2+54)>>1];
+ r7 = (r7 + -2)|0;
+ heap16[(r2+54)>>1] = r7;
+ r2 = heap32[(r1+15)];
+ r7 = heapU16[(r2+56)>>1];
+ r7 = (r7 + -2)|0;
+ r8 = r3 & 65535;
+ heap16[(r2+56)>>1] = r7;
+ r2 = heap32[(r1+15)];
+ r7 = r8 << 6;
+ r9 = heapU16[(r2+58)>>1];
+ r6 = (r6 + r7)|0;
+ r5 = r5 << 1;
+ r6 = (r6 + 54)|0;
+ r10 = 0;
+ r9 = (r9 + -2)|0;
+ heap16[(r2+58)>>1] = r9;
+ r2 = r10;
+_7: while(true){
+ r9 = r2 << 2;
+ r9 = (r0 + r9)|0;
+ r9 = r9 >> 2;
+ r11 = heapU16[(r6)>>1];
+ r12 = heapU16[(r0+6)>>1];
+ r9 = heap32[(r9+17)];
+ r13 = r11 << 2;
+ heap16[(r9+r13)>>1] = r12;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r2;
+ heap32[(g0+2)] = r11;
+ heap32[(g0+3)] = 0;
+ _ZN20btAxisSweep3InternalItE9sortMaxUpEitP12btDispatcherb(i7);
+ r11 = heapU16[(r6+-6)>>1];
+ r12 = heapU16[(r0+6)>>1];
+ r13 = r11 << 2;
+ heap16[(r9+r13)>>1] = r12;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r2;
+ heap32[(g0+2)] = r11;
+ heap32[(g0+3)] = r4;
+ heap32[(g0+4)] = 0;
+ r11 = r5 << 2;
+ _ZN20btAxisSweep3InternalItE9sortMinUpEitP12btDispatcherb(i7);
+ r9 = (r9 + r11)|0;
+ heap16[(r9+-2)>>1] = r10;
+ r11 = heapU16[(r0+6)>>1];
+ r2 = (r2 + 1)|0;
+ r6 = (r6 + 2)|0;
+ heap16[(r9+-4)>>1] = r11;
+ if(r2 !=3) //_LBB65_5
+{
+continue _7;
+}
+else{
+break _7;
+}
+}
+if(!(r8 ==0)) //_LBB65_8
+{
+ r2 = heapU16[(r0+58)>>1];
+ if(uint(r2) >uint(r8)) //_LBB65_9
+{
+ r1 = heap32[(r1+15)];
+ r2 = heapU16[(r0+64)>>1];
+ r1 = (r1 + r7)|0;
+ heap16[(r1+48)>>1] = r2;
+ heap16[(r0+64)>>1] = r3;
+ r1 = heapU16[(r0+56)>>1];
+ r1 = (r1 + -1)|0;
+ heap16[(r0+56)>>1] = r1;
+ return;
+}
+}
+ r0 = _2E_str11;
+ r1 = _2E_str112;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 495;
+ _assert(i7);
+}
+
+function _ZN20btAxisSweep3InternalItE11createProxyERK9btVector3S3_iPvssP12btDispatcherS4_(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+ var r13;
+ var r14;
+ var r15;
+ var r16;
+ var r17;
+ var r18;
+ var f0;
+ var f1;
+ var f2;
+var __label__ = 0;
+ i7 = sp + -56;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ r1 = r0 >> 2;
+ f0 = heapFloat[(r1)];
+ f1 = heapFloat[(r1+1)];
+ f2 = heapFloat[(r1+2)];
+ r1 = heap32[(fp)];
+ r2 = sp + -6;
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r2;
+ heapFloat[(g0+2)] = f0;
+ heapFloat[(g0+3)] = f1;
+ heapFloat[(g0+4)] = f2;
+ heap32[(g0+5)] = 0;
+ r2 = heap32[(fp+2)];
+ _ZNK20btAxisSweep3InternalItE8quantizeEPtRK9btVector3i(i7);
+ r3 = r2 >> 2;
+ f0 = heapFloat[(r3)];
+ f1 = heapFloat[(r3+1)];
+ f2 = heapFloat[(r3+2)];
+ r3 = sp + -12;
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r3;
+ heapFloat[(g0+2)] = f0;
+ heapFloat[(g0+3)] = f1;
+ heapFloat[(g0+4)] = f2;
+ heap32[(g0+5)] = 1;
+ _ZNK20btAxisSweep3InternalItE8quantizeEPtRK9btVector3i(i7);
+ r3 = heapU16[(r1+64)>>1];
+ if(r3 !=0) //_LBB66_2
+{
+ r4 = heap32[(fp+4)];
+ r5 = heap32[(fp+5)];
+ r6 = heap32[(fp+6)];
+ r7 = heap32[(fp+7)];
+ r8 = heap32[(fp+8)];
+ r9 = r1 >> 2;
+ r10 = r3 << 6;
+ r11 = heap32[(r9+15)];
+ r10 = (r11 + r10)|0;
+ r11 = heapU16[(r10+48)>>1];
+ heap16[(r1+64)>>1] = r11;
+ r11 = heapU16[(r1+56)>>1];
+ r11 = (r11 + 1)|0;
+ r12 = r10 >> 2;
+ heap16[(r1+56)>>1] = r11;
+ heap32[(r12+3)] = r3;
+ heap32[(r12)] = r4;
+ heap16[(r10+4)>>1] = r5;
+ heap16[(r10+6)>>1] = r6;
+ heap32[(r12+2)] = r8;
+ r8 = heap32[(r9+15)];
+ r11 = heapU16[(r1+56)>>1];
+ r11 = r11 << 1;
+ r12 = heapU16[(r8+54)>>1];
+ r13 = r11 & 65534;
+ r12 = (r12 + 2)|0;
+ r14 = (r13 + -1)|0;
+ heap16[(r8+54)>>1] = r12;
+ r8 = r14 << 2;
+ r12 = heap32[(r9+17)];
+ r14 = (r12 + r8)|0;
+ r15 = r13 | 1;
+ r14 = heapU16[(r14+2)>>1];
+ r16 = heapU16[(r12+r8)>>1];
+ r15 = r15 << 2;
+ r17 = (r12 + r15)|0;
+ heap16[(r12+r15)>>1] = r16;
+ heap16[(r17+2)>>1] = r14;
+ r12 = heap32[(r9+17)];
+ r14 = heapU16[(sp+-6)>>1];
+ heap16[(r12+r8)>>1] = r14;
+ r12 = heap32[(r9+17)];
+ r12 = (r12 + r8)|0;
+ heap16[(r12+2)>>1] = r3;
+ r12 = heap32[(r9+17)];
+ r14 = heapU16[(sp+-12)>>1];
+ r13 = r13 << 2;
+ heap16[(r12+r13)>>1] = r14;
+ r12 = heap32[(r9+17)];
+ r12 = (r12 + r13)|0;
+ r14 = (r11 + -1)|0;
+ heap16[(r12+2)>>1] = r3;
+ heap16[(r10+48)>>1] = r14;
+ heap16[(r10+54)>>1] = r11;
+ r12 = heap32[(r9+15)];
+ r16 = heapU16[(r12+56)>>1];
+ r16 = (r16 + 2)|0;
+ heap16[(r12+56)>>1] = r16;
+ r12 = heap32[(r9+18)];
+ r16 = (r12 + r8)|0;
+ r16 = heapU16[(r16+2)>>1];
+ r17 = heapU16[(r12+r8)>>1];
+ r18 = (r12 + r15)|0;
+ heap16[(r12+r15)>>1] = r17;
+ heap16[(r18+2)>>1] = r16;
+ r12 = heap32[(r9+18)];
+ r16 = heapU16[(sp+-4)>>1];
+ heap16[(r12+r8)>>1] = r16;
+ r12 = heap32[(r9+18)];
+ r12 = (r12 + r8)|0;
+ heap16[(r12+2)>>1] = r3;
+ r12 = heap32[(r9+18)];
+ r16 = heapU16[(sp+-10)>>1];
+ heap16[(r12+r13)>>1] = r16;
+ r12 = heap32[(r9+18)];
+ r12 = (r12 + r13)|0;
+ heap16[(r12+2)>>1] = r3;
+ heap16[(r10+50)>>1] = r14;
+ heap16[(r10+56)>>1] = r11;
+ r12 = heap32[(r9+15)];
+ r16 = heapU16[(r12+58)>>1];
+ r16 = (r16 + 2)|0;
+ heap16[(r12+58)>>1] = r16;
+ r12 = heap32[(r9+19)];
+ r16 = (r12 + r8)|0;
+ r16 = heapU16[(r16+2)>>1];
+ r17 = heapU16[(r12+r8)>>1];
+ r18 = (r12 + r15)|0;
+ heap16[(r12+r15)>>1] = r17;
+ heap16[(r18+2)>>1] = r16;
+ r12 = heap32[(r9+19)];
+ r15 = heapU16[(sp+-2)>>1];
+ heap16[(r12+r8)>>1] = r15;
+ r12 = heap32[(r9+19)];
+ r8 = (r12 + r8)|0;
+ heap16[(r8+2)>>1] = r3;
+ r8 = heap32[(r9+19)];
+ r12 = heapU16[(sp+-8)>>1];
+ heap16[(r8+r13)>>1] = r12;
+ r8 = heap32[(r9+19)];
+ r8 = (r8 + r13)|0;
+ heap16[(r8+2)>>1] = r3;
+ heap16[(r10+52)>>1] = r14;
+ heap16[(r10+58)>>1] = r11;
+ r8 = heapU16[(r10+48)>>1];
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = 0;
+ heap32[(g0+2)] = r8;
+ heap32[(g0+3)] = 0;
+ _ZN20btAxisSweep3InternalItE11sortMinDownEitP12btDispatcherb(i7);
+ r8 = heapU16[(r10+54)>>1];
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = 0;
+ heap32[(g0+2)] = r8;
+ heap32[(g0+3)] = r7;
+ heap32[(g0+4)] = 0;
+ _ZN20btAxisSweep3InternalItE11sortMaxDownEitP12btDispatcherb(i7);
+ r8 = heapU16[(r10+50)>>1];
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = 1;
+ heap32[(g0+2)] = r8;
+ heap32[(g0+3)] = 0;
+ _ZN20btAxisSweep3InternalItE11sortMinDownEitP12btDispatcherb(i7);
+ r8 = heapU16[(r10+56)>>1];
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = 1;
+ heap32[(g0+2)] = r8;
+ heap32[(g0+3)] = r7;
+ heap32[(g0+4)] = 0;
+ _ZN20btAxisSweep3InternalItE11sortMaxDownEitP12btDispatcherb(i7);
+ r8 = heapU16[(r10+52)>>1];
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = 2;
+ heap32[(g0+2)] = r8;
+ heap32[(g0+3)] = 1;
+ _ZN20btAxisSweep3InternalItE11sortMinDownEitP12btDispatcherb(i7);
+ r8 = heapU16[(r10+58)>>1];
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = 2;
+ heap32[(g0+2)] = r8;
+ heap32[(g0+3)] = r7;
+ heap32[(g0+4)] = 1;
+ _ZN20btAxisSweep3InternalItE11sortMaxDownEitP12btDispatcherb(i7);
+ updateMandreelStats(performance.now());
+ r1 = heap32[(r9+27)];
+ r8 = heap32[(r9+15)];
+if(!(r1 ==0)) //_LBB66_4
+{
+ r9 = heap32[(fp+3)];
+ r10 = r1 >> 2;
+ r10 = heap32[(r10)];
+ r10 = r10 >> 2;
+ r10 = heap32[(r10+2)];
+ r11 = r3 << 6;
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r0;
+ heap32[(g0+2)] = r2;
+ heap32[(g0+3)] = r9;
+ heap32[(g0+4)] = r4;
+ heap32[(g0+5)] = r5;
+ heap32[(g0+6)] = r6;
+ heap32[(g0+7)] = r7;
+ heap32[(g0+8)] = 0;
+ r0 = (r8 + r11)|0;
+ r0 = r0 >> 2;
+ __FUNCTION_TABLE__[(r10)>>2](i7);
+ heap32[(r0+15)] = r_g0;
+}
+ r0 = r3 << 6;
+ r0 = (r8 + r0)|0;
+ r_g0 = r0;
+ return;
+}
+else{
+ r0 = _2E_str213;
+ r1 = _2E_str112;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 483;
+ _assert(i7);
+}
+}
+
+function _ZN20btAlignedObjectArrayI16btBroadphasePairE6resizeEiRKS0_(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ r2 = heap32[(r1+1)];
+ r3 = heap32[(fp+1)];
+_1: do {
+if(!(r2 >r3)) //_LBB67_20
+{
+if(!(r2 >=r3)) //_LBB67_20
+{
+ r4 = heap32[(r1+2)];
+if(!(r4 >=r3)) //_LBB67_18
+{
+ if(r3 !=0) //_LBB67_5
+{
+ r4 = gNumAlignedAllocs;
+ r4 = r4 >> 2;
+ r5 = heap32[(r4)];
+ r6 = r3 << 4;
+ r5 = (r5 + 1)|0;
+ r6 = r6 | 3;
+ heap32[(r4)] = r5;
+ r4 = (r6 + 16)|0;
+ heap32[(g0)] = r4;
+ malloc(i7);
+ r4 = r_g0;
+ if(r4 !=0) //_LBB67_7
+{
+ r5 = 0;
+ r6 = (r4 + 4)|0;
+ r5 = (r5 - r6)|0;
+ r5 = r5 & 15;
+ r5 = (r4 + r5)|0;
+ r6 = (r5 + 4)|0;
+ r5 = r5 >> 2;
+ heap32[(r5)] = r4;
+ r4 = r6;
+}
+}
+else{
+ r4 = 0;
+}
+ r5 = (r0 + 12)|0;
+ if(r2 <1) //_LBB67_10
+{
+ r6 = r5 >> 2;
+ r8 = heap32[(r6)];
+}
+else{
+ r6 = 0;
+ r7 = (r6 - r2)|0;
+_14: while(true){
+ r8 = r5 >> 2;
+ r8 = heap32[(r8)];
+ r9 = r6 << 4;
+ r10 = (r8 - r9)|0;
+ r10 = r10 >> 2;
+ r9 = (r4 - r9)|0;
+ r11 = heap32[(r10)];
+ r9 = r9 >> 2;
+ heap32[(r9)] = r11;
+ r11 = heap32[(r10+1)];
+ heap32[(r9+1)] = r11;
+ r11 = heap32[(r10+2)];
+ heap32[(r9+2)] = r11;
+ r10 = heap32[(r10+3)];
+ r6 = (r6 + -1)|0;
+ heap32[(r9+3)] = r10;
+if(!(r7 !=r6)) //_LBB67_11
+{
+break _14;
+}
+}
+ r5 = (r0 + 12)|0;
+}
+if(!(r8 ==0)) //_LBB67_17
+{
+ r6 = heapU8[r0+16];
+if(!(r6 ==0)) //_LBB67_16
+{
+ r6 = gNumAlignedFree;
+ r6 = r6 >> 2;
+ r7 = heap32[(r6)];
+ r7 = (r7 + 1)|0;
+ r8 = r8 >> 2;
+ heap32[(r6)] = r7;
+ r6 = heap32[(r8+-1)];
+ heap32[(g0)] = r6;
+ free(i7);
+}
+ r6 = r5 >> 2;
+ heap32[(r6)] = 0;
+}
+ r6 = 1;
+ r5 = r5 >> 2;
+ heap8[r0+16] = r6;
+ heap32[(r5)] = r4;
+ heap32[(r1+2)] = r3;
+ if(r2 >=r3) //_LBB67_20
+{
+break _1;
+}
+}
+ r0 = heap32[(fp+2)];
+_25: while(true){
+ r4 = r0 >> 2;
+ r5 = r2 << 4;
+ r6 = heap32[(r1+3)];
+ r5 = (r6 + r5)|0;
+ r6 = heap32[(r4)];
+ r5 = r5 >> 2;
+ heap32[(r5)] = r6;
+ r6 = heap32[(r4+1)];
+ heap32[(r5+1)] = r6;
+ r6 = heap32[(r4+2)];
+ heap32[(r5+2)] = r6;
+ r4 = heap32[(r4+3)];
+ r2 = (r2 + 1)|0;
+ heap32[(r5+3)] = r4;
+ if(r3 !=r2) //_LBB67_19
+{
+continue _25;
+}
+else{
+break _1;
+}
+}
+}
+}
+} while(0);
+ heap32[(r1+1)] = r3;
+ return;
+}
+
+function _ZN20btAxisSweep3InternalItE25calculateOverlappingPairsEP12btDispatcher(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+ var r13;
+ var r14;
+var __label__ = 0;
+ i7 = sp + -48;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r1 = heap32[(r0+23)];
+ r2 = r1 >> 2;
+ r2 = heap32[(r2)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+14)];
+ heap32[(g0)] = r1;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ r1 = r_g0;
+if(!(r1 ==0)) //_LBB68_22
+{
+ r1 = heap32[(fp+1)];
+ r2 = heap32[(r0+23)];
+ r3 = r2 >> 2;
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3+7)];
+ heap32[(g0)] = r2;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ r2 = r_g0;
+ r3 = r2 >> 2;
+ r3 = heap32[(r3+1)];
+ if(r3 >1) //_LBB68_3
+{
+ r3 = (r3 + -1)|0;
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = 0;
+ heap32[(g0+2)] = r3;
+ r3 = r2 >> 2;
+ _ZN20btAlignedObjectArrayI16btBroadphasePairE17quickSortInternalI29btBroadphasePairSortPredicateEEvT_ii(i7);
+ r3 = heap32[(r3+1)];
+}
+ r4 = sp + -32;
+ r5 = r4 >> 2;
+ heap32[(fp+-8)] = 0;
+ heap32[(r5+1)] = 0;
+ heap32[(r5+2)] = 0;
+ heap32[(r5+3)] = 0;
+ r5 = heap32[(r0+26)];
+ r3 = (r3 - r5)|0;
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = r3;
+ heap32[(g0+2)] = r4;
+ r3 = 0;
+ _ZN20btAlignedObjectArrayI16btBroadphasePairE6resizeEiRKS0_(i7);
+ heap32[(r0+26)] = 0;
+ r4 = r3;
+ r5 = r3;
+ r6 = r3;
+ r7 = r3;
+_6: while(true){
+ r8 = r2 >> 2;
+ r9 = heap32[(r8+1)];
+ if(r9 >r7) //_LBB68_5
+{
+ r8 = heap32[(r8+3)];
+ r9 = r7 << 4;
+ r9 = (r8 + r9)|0;
+ r9 = r9 >> 2;
+ r10 = heap32[(r9)];
+ r11 = r7 << 2;
+ r12 = heap32[(r9+1)];
+ if(r10 !=r5) //_LBB68_7
+{
+__label__ = 6;
+}
+else{
+ if(r12 ==r6) //_LBB68_13
+{
+ r4 = heap32[(r9+2)];
+ if(r4 ==0) //_LBB68_15
+{
+__label__ = 13;
+}
+else{
+__label__ = 12;
+break _6;
+}
+}
+else{
+__label__ = 6;
+}
+}
+if (__label__ == 6){
+ r5 = (r12 + 54)|0;
+ r6 = (r10 + 48)|0;
+ r9 = 0;
+_14: while(true){
+ if(r9 <3) //_LBB68_8
+{
+ r13 = heapU16[(r6+6)>>1];
+ r14 = heapU16[(r5+-6)>>1];
+ if(uint(r13) <uint(r14)) //_LBB68_15
+{
+__label__ = 13;
+break _14;
+}
+else{
+ r13 = heapU16[(r5)>>1];
+ r14 = heapU16[(r6)>>1];
+ if(uint(r13) <uint(r14)) //_LBB68_15
+{
+__label__ = 13;
+break _14;
+}
+else{
+ r9 = (r9 + 1)|0;
+ r5 = (r5 + 2)|0;
+ r6 = (r6 + 2)|0;
+}
+}
+}
+else{
+__label__ = 14;
+break _14;
+}
+}
+}
+if (__label__ == 13){
+ r4 = heap32[(r0+23)];
+ r5 = r4 >> 2;
+ r5 = heap32[(r5)];
+ r5 = r5 >> 2;
+ r5 = heap32[(r5+8)];
+ r6 = (r8 + r3)|0;
+ r9 = r11 << 2;
+ heap32[(g0)] = r4;
+ heap32[(g0+1)] = r6;
+ heap32[(g0+2)] = r1;
+ r4 = (r8 + r9)|0;
+ r4 = r4 >> 2;
+ __FUNCTION_TABLE__[(r5)>>2](i7);
+ heap32[(r4)] = 0;
+ heap32[(r4+1)] = 0;
+ r4 = heap32[(r0+26)];
+ r4 = (r4 + 1)|0;
+ r5 = gOverlappingPairs;
+ r5 = r5 >> 2;
+ heap32[(r0+26)] = r4;
+ r6 = heap32[(r5)];
+ r6 = (r6 + -1)|0;
+ heap32[(r5)] = r6;
+}
+ r7 = (r7 + 1)|0;
+ r3 = (r3 + 16)|0;
+ r5 = r10;
+ r6 = r12;
+}
+else{
+__label__ = 16;
+break _6;
+}
+}
+switch(__label__ ){//multiple entries
+case 16:
+ if(r9 >1) //_LBB68_20
+{
+ r4 = (r9 + -1)|0;
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = 0;
+ heap32[(g0+2)] = r4;
+ _ZN20btAlignedObjectArrayI16btBroadphasePairE17quickSortInternalI29btBroadphasePairSortPredicateEEvT_ii(i7);
+ r9 = heap32[(r8+1)];
+ r4 = heap32[(r0+26)];
+}
+ r1 = sp + -16;
+ r3 = r1 >> 2;
+ heap32[(fp+-4)] = 0;
+ heap32[(r3+1)] = 0;
+ heap32[(r3+2)] = 0;
+ heap32[(r3+3)] = 0;
+ r3 = (r9 - r4)|0;
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = r3;
+ heap32[(g0+2)] = r1;
+ _ZN20btAlignedObjectArrayI16btBroadphasePairE6resizeEiRKS0_(i7);
+ heap32[(r0+26)] = 0;
+break;
+case 12:
+ r8 = _2E_str314;
+ r0 = _2E_str112;
+ heap32[(g0)] = r8;
+ heap32[(g0+1)] = r0;
+ heap32[(g0+2)] = 687;
+ _assert(i7);
+break;
+}
+}
+ return;
+}
+
+function _ZN20btAxisSweep3InternalItED2Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV20btAxisSweep3InternalItE;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ r1 = heap32[(r2+27)];
+if(!(r1 ==0)) //_LBB69_5
+{
+ r1 = heap32[(r2+28)];
+ r3 = r1 >> 2;
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3)];
+ heap32[(g0)] = r1;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ r1 = heap32[(r2+28)];
+if(!(r1 ==0)) //_LBB69_3
+{
+ r3 = gNumAlignedFree;
+ r3 = r3 >> 2;
+ r4 = heap32[(r3)];
+ r4 = (r4 + 1)|0;
+ r1 = r1 >> 2;
+ heap32[(r3)] = r4;
+ r1 = heap32[(r1+-1)];
+ heap32[(g0)] = r1;
+ free(i7);
+}
+ r1 = heap32[(r2+27)];
+ r3 = r1 >> 2;
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3)];
+ heap32[(g0)] = r1;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ r1 = heap32[(r2+27)];
+if(!(r1 ==0)) //_LBB69_5
+{
+ r3 = gNumAlignedFree;
+ r3 = r3 >> 2;
+ r4 = heap32[(r3)];
+ r4 = (r4 + 1)|0;
+ r1 = r1 >> 2;
+ heap32[(r3)] = r4;
+ r1 = heap32[(r1+-1)];
+ heap32[(g0)] = r1;
+ free(i7);
+}
+}
+ r1 = 0;
+_8: while(true){
+ r3 = r1 << 2;
+ r3 = (r0 + r3)|0;
+ r3 = r3 >> 2;
+ r3 = heap32[(r3+22)];
+if(!(r3 ==0)) //_LBB69_8
+{
+ r4 = gNumAlignedFree;
+ r4 = r4 >> 2;
+ r5 = heap32[(r4)];
+ r5 = (r5 + 1)|0;
+ r3 = r3 >> 2;
+ heap32[(r4)] = r5;
+ r3 = heap32[(r3+-1)];
+ heap32[(g0)] = r3;
+ free(i7);
+}
+ r1 = (r1 + -1)|0;
+ if(r1 !=-3) //_LBB69_6
+{
+continue _8;
+}
+else{
+break _8;
+}
+}
+ r1 = heap32[(r2+15)];
+if(!(r1 ==0)) //_LBB69_11
+{
+ r3 = gNumAlignedFree;
+ r3 = r3 >> 2;
+ r4 = heap32[(r3)];
+ r4 = (r4 + 1)|0;
+ r1 = r1 >> 2;
+ heap32[(r3)] = r4;
+ r1 = heap32[(r1+-1)];
+ heap32[(g0)] = r1;
+ free(i7);
+}
+ r0 = heapU8[r0+100];
+if(!(r0 ==0)) //_LBB69_14
+{
+ r0 = heap32[(r2+23)];
+ r1 = r0 >> 2;
+ r1 = heap32[(r1)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+ r0 = heap32[(r2+23)];
+if(!(r0 ==0)) //_LBB69_14
+{
+ r1 = gNumAlignedFree;
+ r1 = r1 >> 2;
+ r2 = heap32[(r1)];
+ r2 = (r2 + 1)|0;
+ r0 = r0 >> 2;
+ heap32[(r1)] = r2;
+ r0 = heap32[(r0+-1)];
+ heap32[(g0)] = r0;
+ free(i7);
+}
+}
+ return;
+}
+
+function _ZN20btAxisSweep3InternalItED1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ heap32[(g0)] = r0;
+ _ZN20btAxisSweep3InternalItED2Ev(i7);
+ return;
+}
+
+function _ZN20btAxisSweep3InternalItED0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV20btAxisSweep3InternalItE;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ r1 = heap32[(r2+27)];
+if(!(r1 ==0)) //_LBB71_5
+{
+ r1 = heap32[(r2+28)];
+ r3 = r1 >> 2;
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3)];
+ heap32[(g0)] = r1;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ r1 = heap32[(r2+28)];
+if(!(r1 ==0)) //_LBB71_3
+{
+ r3 = gNumAlignedFree;
+ r3 = r3 >> 2;
+ r4 = heap32[(r3)];
+ r4 = (r4 + 1)|0;
+ r1 = r1 >> 2;
+ heap32[(r3)] = r4;
+ r1 = heap32[(r1+-1)];
+ heap32[(g0)] = r1;
+ free(i7);
+}
+ r1 = heap32[(r2+27)];
+ r3 = r1 >> 2;
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3)];
+ heap32[(g0)] = r1;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ r1 = heap32[(r2+27)];
+if(!(r1 ==0)) //_LBB71_5
+{
+ r3 = gNumAlignedFree;
+ r3 = r3 >> 2;
+ r4 = heap32[(r3)];
+ r4 = (r4 + 1)|0;
+ r1 = r1 >> 2;
+ heap32[(r3)] = r4;
+ r1 = heap32[(r1+-1)];
+ heap32[(g0)] = r1;
+ free(i7);
+}
+}
+ r1 = 0;
+_8: while(true){
+ r3 = r1 << 2;
+ r3 = (r0 + r3)|0;
+ r3 = r3 >> 2;
+ r3 = heap32[(r3+22)];
+if(!(r3 ==0)) //_LBB71_8
+{
+ r4 = gNumAlignedFree;
+ r4 = r4 >> 2;
+ r5 = heap32[(r4)];
+ r5 = (r5 + 1)|0;
+ r3 = r3 >> 2;
+ heap32[(r4)] = r5;
+ r3 = heap32[(r3+-1)];
+ heap32[(g0)] = r3;
+ free(i7);
+}
+ r1 = (r1 + -1)|0;
+ if(r1 !=-3) //_LBB71_6
+{
+continue _8;
+}
+else{
+break _8;
+}
+}
+ r1 = heap32[(r2+15)];
+if(!(r1 ==0)) //_LBB71_11
+{
+ r3 = gNumAlignedFree;
+ r3 = r3 >> 2;
+ r4 = heap32[(r3)];
+ r4 = (r4 + 1)|0;
+ r1 = r1 >> 2;
+ heap32[(r3)] = r4;
+ r1 = heap32[(r1+-1)];
+ heap32[(g0)] = r1;
+ free(i7);
+}
+ r0 = heapU8[r0+100];
+if(!(r0 ==0)) //_LBB71_14
+{
+ r0 = heap32[(r2+23)];
+ r1 = r0 >> 2;
+ r1 = heap32[(r1)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+ r0 = heap32[(r2+23)];
+if(!(r0 ==0)) //_LBB71_14
+{
+ r1 = gNumAlignedFree;
+ r1 = r1 >> 2;
+ r3 = heap32[(r1)];
+ r3 = (r3 + 1)|0;
+ r0 = r0 >> 2;
+ heap32[(r1)] = r3;
+ r0 = heap32[(r0+-1)];
+ heap32[(g0)] = r0;
+ free(i7);
+}
+}
+ r0 = gNumAlignedFree;
+ r0 = r0 >> 2;
+ r1 = heap32[(r0)];
+ r1 = (r1 + 1)|0;
+ heap32[(r0)] = r1;
+ r0 = heap32[(r2+-1)];
+ heap32[(g0)] = r0;
+ free(i7);
+ return;
+}
+
+function _ZN12btAxisSweep3D0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV12btAxisSweep3;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ heap32[(g0)] = r0;
+ _ZN20btAxisSweep3InternalItED2Ev(i7);
+if(!(r0 ==0)) //_LBB72_2
+{
+ r0 = gNumAlignedFree;
+ r0 = r0 >> 2;
+ r1 = heap32[(r0)];
+ r1 = (r1 + 1)|0;
+ heap32[(r0)] = r1;
+ r0 = heap32[(r2+-1)];
+ heap32[(g0)] = r0;
+ free(i7);
+}
+ return;
+}
+
+function _ZN12btAxisSweep3D1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV12btAxisSweep3;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ heap32[(g0)] = r0;
+ _ZN20btAxisSweep3InternalItED2Ev(i7);
+ return;
+}
+
+function _ZN20btCollisionAlgorithmD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV20btCollisionAlgorithm;
+ r0 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r0)] = r1;
+ return;
+}
+
+function _ZN20btCollisionAlgorithmD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV20btCollisionAlgorithm;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZN6btDbvt8ICollide7ProcessEPK10btDbvtNodeS3_(sp)
+{
+ var i7;
+ var fp = sp>>2;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ return;
+}
+
+function _ZN6btDbvt8ICollide7ProcessEPK10btDbvtNodef(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ r1 = heap32[(r1)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+3)];
+ r2 = heap32[(fp+1)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r2;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+ return;
+}
+
+function _ZN6btDbvt8ICollide7DescentEPK10btDbvtNode(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = 1;
+ r_g0 = r0;
+ return;
+}
+
+function _ZN6btDbvt8ICollide9AllLeavesEPK10btDbvtNode(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = 1;
+ r_g0 = r0;
+ return;
+}
+
+function _ZL10insertleafP6btDbvtP10btDbvtNodeS2_(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+ var f10;
+ var f11;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = heap32[(fp+2)];
+ r0 = r0 >> 2;
+ r2 = heap32[(r0)];
+ if(r2 !=0) //_LBB80_2
+{
+ r2 = heap32[(fp+1)];
+ r3 = r2 >> 2;
+ r3 = heap32[(r3+10)];
+ if(r3 !=0) //_LBB80_4
+{
+ r4 = r1 >> 2;
+ f0 = heapFloat[(r4+2)];
+ f1 = heapFloat[(r4+6)];
+ f2 = heapFloat[(r4+1)];
+ f3 = heapFloat[(r4+5)];
+ f4 = heapFloat[(r4)];
+ f5 = heapFloat[(r4+4)];
+ f0 = f0+f1;
+ f1 = f2+f3;
+ f2 = f4+f5;
+_5: while(true){
+ r4 = r2 >> 2;
+ r4 = heap32[(r4+9)];
+ r4 = r4 >> 2;
+ f3 = heapFloat[(r4)];
+ f4 = heapFloat[(r4+4)];
+ f5 = heapFloat[(r4+2)];
+ f6 = heapFloat[(r4+6)];
+ f7 = heapFloat[(r4+1)];
+ f8 = heapFloat[(r4+5)];
+ f3 = f3+f4;
+ f4 = f5+f6;
+ f5 = f7+f8;
+ f3 = f2-f3;
+ f4 = f0-f4;
+ f5 = f1-f5;
+ f6 = 0;
+ if(f3 <f6) //_LBB80_7
+{
+ f3 = -f3;
+}
+ if(f5 <f6) //_LBB80_10
+{
+ f5 = -f5;
+}
+ f3 = f3+f5;
+ if(f4 <f6) //_LBB80_13
+{
+ f4 = -f4;
+}
+ r3 = r3 >> 2;
+ f5 = heapFloat[(r3)];
+ f7 = heapFloat[(r3+4)];
+ f8 = heapFloat[(r3+2)];
+ f9 = heapFloat[(r3+6)];
+ f10 = heapFloat[(r3+1)];
+ f11 = heapFloat[(r3+5)];
+ f5 = f5+f7;
+ f7 = f8+f9;
+ f8 = f10+f11;
+ f5 = f2-f5;
+ f3 = f3+f4;
+ f4 = f0-f7;
+ f7 = f1-f8;
+ if(f5 <f6) //_LBB80_16
+{
+ f5 = -f5;
+}
+ if(f7 <f6) //_LBB80_19
+{
+ f7 = -f7;
+}
+ f5 = f5+f7;
+ if(f4 <f6) //_LBB80_22
+{
+ f4 = -f4;
+}
+ f4 = f5+f4;
+ r3 = f3 >= f4;
+ r3 = r3 & 1;
+ r3 = r3 << 2;
+ r2 = (r2 + r3)|0;
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+9)];
+ r3 = r2 >> 2;
+ r3 = heap32[(r3+10)];
+if(!(r3 !=0)) //_LBB80_5
+{
+break _5;
+}
+}
+}
+ r3 = r2 >> 2;
+ r4 = heap32[(r0+1)];
+ r5 = heap32[(r3+8)];
+ if(r4 ==0) //_LBB80_26
+{
+ r4 = gNumAlignedAllocs;
+ r4 = r4 >> 2;
+ r6 = heap32[(r4)];
+ r6 = (r6 + 1)|0;
+ heap32[(r4)] = r6;
+ heap32[(g0)] = 63;
+ malloc(i7);
+ r4 = r_g0;
+ if(r4 !=0) //_LBB80_28
+{
+ r6 = 0;
+ r7 = (r4 + 4)|0;
+ r6 = (r6 - r7)|0;
+ r6 = r6 & 15;
+ r6 = (r4 + r6)|0;
+ r7 = (r6 + 4)|0;
+ r6 = r6 >> 2;
+ heap32[(r6)] = r4;
+ r4 = r7;
+}
+}
+else{
+ heap32[(r0+1)] = 0;
+}
+ r6 = r4 >> 2;
+ heap32[(r6+8)] = r5;
+ heap32[(r6+9)] = 0;
+ heap32[(r6+10)] = 0;
+ r7 = r1 >> 2;
+ f0 = heapFloat[(r7)];
+ f1 = heapFloat[(r3)];
+ f0 = f0 < f1 ? f0 : f1;
+ heapFloat[(r6)] = f0;
+ f0 = heapFloat[(r7+4)];
+ f1 = heapFloat[(r3+4)];
+ f0 = f0 > f1 ? f0 : f1;
+ heapFloat[(r6+4)] = f0;
+ f0 = heapFloat[(r7+1)];
+ f1 = heapFloat[(r3+1)];
+ f0 = f0 < f1 ? f0 : f1;
+ heapFloat[(r6+1)] = f0;
+ f0 = heapFloat[(r7+5)];
+ f1 = heapFloat[(r3+5)];
+ f0 = f0 > f1 ? f0 : f1;
+ heapFloat[(r6+5)] = f0;
+ f0 = heapFloat[(r7+2)];
+ f1 = heapFloat[(r3+2)];
+ f0 = f0 < f1 ? f0 : f1;
+ heapFloat[(r6+2)] = f0;
+ f0 = heapFloat[(r7+6)];
+ f1 = heapFloat[(r3+6)];
+ f0 = f0 > f1 ? f0 : f1;
+ heapFloat[(r6+6)] = f0;
+_31: do {
+ if(r5 ==0) //_LBB80_38
+{
+ heap32[(r6+9)] = r2;
+ heap32[(r3+8)] = r4;
+ heap32[(r6+10)] = r1;
+ heap32[(r7+8)] = r4;
+ heap32[(r0)] = r4;
+}
+else{
+ r0 = heap32[(r3+8)];
+ r0 = r0 >> 2;
+ r0 = heap32[(r0+10)];
+ r0 = r0 == r2;
+ r0 = r0 & 1;
+ r0 = r0 << 2;
+ r0 = (r5 + r0)|0;
+ r0 = r0 >> 2;
+ heap32[(r0+9)] = r4;
+ heap32[(r6+9)] = r2;
+ heap32[(r3+8)] = r4;
+ heap32[(r6+10)] = r1;
+ heap32[(r7+8)] = r4;
+ f0 = heapFloat[(r6)];
+_34: while(true){
+ r0 = r5;
+ r1 = r0 >> 2;
+ f1 = heapFloat[(r1)];
+if(!(f1 >f0)) //_LBB80_37
+{
+ r2 = r4 >> 2;
+ f0 = heapFloat[(r1+1)];
+ f1 = heapFloat[(r2+1)];
+if(!(f0 >f1)) //_LBB80_37
+{
+ f0 = heapFloat[(r1+2)];
+ f1 = heapFloat[(r2+2)];
+if(!(f0 >f1)) //_LBB80_37
+{
+ f0 = heapFloat[(r1+4)];
+ f1 = heapFloat[(r2+4)];
+if(!(f0 <f1)) //_LBB80_37
+{
+ f0 = heapFloat[(r1+5)];
+ f1 = heapFloat[(r2+5)];
+if(!(f0 <f1)) //_LBB80_37
+{
+ f0 = heapFloat[(r1+6)];
+ f1 = heapFloat[(r2+6)];
+ if(f0 >=f1) //_LBB80_39
+{
+break _31;
+}
+}
+}
+}
+}
+}
+ r2 = heap32[(r1+10)];
+ r3 = heap32[(r1+9)];
+ r2 = r2 >> 2;
+ r3 = r3 >> 2;
+ f0 = heapFloat[(r3)];
+ f1 = heapFloat[(r2)];
+ f0 = f0 < f1 ? f0 : f1;
+ heapFloat[(r1)] = f0;
+ f1 = heapFloat[(r3+4)];
+ f2 = heapFloat[(r2+4)];
+ f1 = f1 > f2 ? f1 : f2;
+ heapFloat[(r1+4)] = f1;
+ f1 = heapFloat[(r3+1)];
+ f2 = heapFloat[(r2+1)];
+ f1 = f1 < f2 ? f1 : f2;
+ heapFloat[(r1+1)] = f1;
+ f1 = heapFloat[(r3+5)];
+ f2 = heapFloat[(r2+5)];
+ f1 = f1 > f2 ? f1 : f2;
+ heapFloat[(r1+5)] = f1;
+ f1 = heapFloat[(r3+2)];
+ f2 = heapFloat[(r2+2)];
+ f1 = f1 < f2 ? f1 : f2;
+ heapFloat[(r1+2)] = f1;
+ f1 = heapFloat[(r3+6)];
+ f2 = heapFloat[(r2+6)];
+ f1 = f1 > f2 ? f1 : f2;
+ heapFloat[(r1+6)] = f1;
+ r5 = heap32[(r1+8)];
+ r4 = r0;
+ if(r5 ==0) //_LBB80_39
+{
+break _31;
+}
+}
+}
+} while(0);
+ return;
+}
+else{
+ r2 = r1 >> 2;
+ heap32[(r0)] = r1;
+ heap32[(r2+8)] = 0;
+ return;
+}
+}
+
+function _ZL10removeleafP6btDbvtP10btDbvtNode(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+ var f10;
+ var f11;
+ var f12;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = heap32[(fp+1)];
+ r0 = r0 >> 2;
+ r2 = heap32[(r0)];
+ if(r2 !=r1) //_LBB81_2
+{
+ r2 = r1 >> 2;
+ r2 = heap32[(r2+8)];
+ r3 = r2 >> 2;
+ r4 = heap32[(r3+10)];
+ r1 = r4 != r1;
+ r1 = r1 & 1;
+ r1 = r1 << 2;
+ r1 = (r2 + r1)|0;
+ r1 = r1 >> 2;
+ r3 = heap32[(r3+8)];
+ r1 = heap32[(r1+9)];
+_3: do {
+ if(r3 ==0) //_LBB81_11
+{
+ r3 = r1 >> 2;
+ heap32[(r0)] = r1;
+ heap32[(r3+8)] = 0;
+ r3 = heap32[(r0+1)];
+if(!(r3 ==0)) //_LBB81_13
+{
+ r1 = gNumAlignedFree;
+ r1 = r1 >> 2;
+ r4 = heap32[(r1)];
+ r4 = (r4 + 1)|0;
+ r3 = r3 >> 2;
+ heap32[(r1)] = r4;
+ r3 = heap32[(r3+-1)];
+ heap32[(g0)] = r3;
+ free(i7);
+}
+ heap32[(r0+1)] = r2;
+ r3 = heap32[(r0)];
+}
+else{
+ r4 = r3 >> 2;
+ r4 = heap32[(r4+10)];
+ r4 = r4 == r2;
+ r4 = r4 & 1;
+ r4 = r4 << 2;
+ r4 = (r3 + r4)|0;
+ r4 = r4 >> 2;
+ r5 = r1 >> 2;
+ heap32[(r4+9)] = r1;
+ heap32[(r5+8)] = r3;
+ r1 = heap32[(r0+1)];
+if(!(r1 ==0)) //_LBB81_5
+{
+ r4 = gNumAlignedFree;
+ r4 = r4 >> 2;
+ r5 = heap32[(r4)];
+ r5 = (r5 + 1)|0;
+ r1 = r1 >> 2;
+ heap32[(r4)] = r5;
+ r1 = heap32[(r1+-1)];
+ heap32[(g0)] = r1;
+ free(i7);
+}
+ heap32[(r0+1)] = r2;
+_12: while(true){
+ if(r3 !=0) //_LBB81_6
+{
+ r1 = r3 >> 2;
+ r2 = heap32[(r1+10)];
+ r4 = heap32[(r1+9)];
+ r2 = r2 >> 2;
+ r4 = r4 >> 2;
+ f0 = heapFloat[(r1+6)];
+ f1 = heapFloat[(r1)];
+ f2 = heapFloat[(r1+1)];
+ f3 = heapFloat[(r1+2)];
+ f4 = heapFloat[(r1+4)];
+ f5 = heapFloat[(r1+5)];
+ f6 = heapFloat[(r4)];
+ f7 = heapFloat[(r2)];
+ f6 = f6 < f7 ? f6 : f7;
+ heapFloat[(r1)] = f6;
+ f7 = heapFloat[(r4+4)];
+ f8 = heapFloat[(r2+4)];
+ f7 = f7 > f8 ? f7 : f8;
+ heapFloat[(r1+4)] = f7;
+ f8 = heapFloat[(r4+1)];
+ f9 = heapFloat[(r2+1)];
+ f8 = f8 < f9 ? f8 : f9;
+ heapFloat[(r1+1)] = f8;
+ f9 = heapFloat[(r4+5)];
+ f10 = heapFloat[(r2+5)];
+ f9 = f9 > f10 ? f9 : f10;
+ heapFloat[(r1+5)] = f9;
+ f10 = heapFloat[(r4+2)];
+ f11 = heapFloat[(r2+2)];
+ f10 = f10 < f11 ? f10 : f11;
+ heapFloat[(r1+2)] = f10;
+ f11 = heapFloat[(r4+6)];
+ f12 = heapFloat[(r2+6)];
+ f11 = f11 > f12 ? f11 : f12;
+ heapFloat[(r1+6)] = f11;
+if(!(f0 !=f11)) //_LBB81_8
+{
+ r2 = f1 == f6;
+ r4 = f2 == f8;
+ r2 = r2 & r4;
+ r4 = f3 == f10;
+ r2 = r2 & r4;
+ r4 = f4 == f7;
+ r2 = r2 & r4;
+ r4 = f5 == f9;
+ r2 = r2 & r4;
+ if(r2 != 0) //_LBB81_14
+{
+break _3;
+}
+}
+ r3 = heap32[(r1+8)];
+}
+else{
+break _12;
+}
+}
+ r0 = heap32[(r0)];
+ r_g0 = r0;
+ return;
+}
+} while(0);
+ r_g0 = r3;
+ return;
+}
+else{
+ heap32[(r0)] = 0;
+ r0 = 0;
+ r_g0 = r0;
+ return;
+}
+}
+
+function _ZN6btDbvt6updateEP10btDbvtNodeR12btDbvtAabbMmRK9btVector3f(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+2)];
+ r0 = r0 >> 2;
+ r1 = heap32[(fp+1)];
+ f0 = heapFloat[(r0)];
+ r2 = heap32[(fp)];
+ r3 = heap32[(fp+3)];
+ f1 = heapFloat[(fp+4)];
+ r4 = r1 >> 2;
+ f2 = heapFloat[(r4)];
+ if(f2 <=f0) //_LBB82_2
+{
+ f2 = heapFloat[(r0+1)];
+ f3 = heapFloat[(r4+1)];
+ if(f3 <=f2) //_LBB82_4
+{
+ f3 = heapFloat[(r4+2)];
+ f4 = heapFloat[(r0+2)];
+if(!(f3 >f4)) //_LBB82_3
+{
+ f3 = heapFloat[(r4+4)];
+ f4 = heapFloat[(r0+4)];
+if(!(f3 <f4)) //_LBB82_3
+{
+ f3 = heapFloat[(r4+5)];
+ f4 = heapFloat[(r0+5)];
+if(!(f3 <f4)) //_LBB82_3
+{
+ f3 = heapFloat[(r4+6)];
+ f4 = heapFloat[(r0+6)];
+if(!(f3 <f4)) //_LBB82_3
+{
+ r0 = 0;
+ r_g0 = r0;
+ return;
+}
+}
+}
+}
+}
+}
+else{
+ f2 = heapFloat[(r0+1)];
+}
+ f0 = f0-f1;
+ f2 = f2-f1;
+ heapFloat[(r0)] = f0;
+ heapFloat[(r0+1)] = f2;
+ f3 = heapFloat[(r0+2)];
+ f3 = f3-f1;
+ heapFloat[(r0+2)] = f3;
+ f4 = heapFloat[(r0+4)];
+ f4 = f4+f1;
+ heapFloat[(r0+4)] = f4;
+ f5 = heapFloat[(r0+5)];
+ f5 = f5+f1;
+ heapFloat[(r0+5)] = f5;
+ f6 = heapFloat[(r0+6)];
+ f1 = f6+f1;
+ r3 = r3 >> 2;
+ heapFloat[(r0+6)] = f1;
+ f6 = heapFloat[(r3)];
+ f7 = 0;
+ if(f6 <=f7) //_LBB82_10
+{
+ f0 = f0+f6;
+ heapFloat[(r0)] = f0;
+}
+else{
+ f0 = f4+f6;
+ heapFloat[(r0+4)] = f0;
+}
+ f0 = heapFloat[(r3+1)];
+ if(f0 <=f7) //_LBB82_13
+{
+ f0 = f2+f0;
+ heapFloat[(r0+1)] = f0;
+}
+else{
+ f0 = f5+f0;
+ heapFloat[(r0+5)] = f0;
+}
+ f0 = heapFloat[(r3+2)];
+ if(f0 <=f7) //_LBB82_16
+{
+ f0 = f3+f0;
+ heapFloat[(r0+2)] = f0;
+}
+else{
+ f0 = f1+f0;
+ heapFloat[(r0+6)] = f0;
+}
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = r1;
+ _ZL10removeleafP6btDbvtP10btDbvtNode(i7);
+ r3 = r_g0;
+_22: do {
+ if(r3 !=0) //_LBB82_19
+{
+ r5 = r2 >> 2;
+ r6 = heap32[(r5+2)];
+ if(r6 <0) //_LBB82_24
+{
+ r5 = heap32[(r5)];
+}
+else{
+ r7 = -1;
+_27: while(true){
+ r5 = r3;
+ r7 = (r7 + 1)|0;
+ if(r6 >r7) //_LBB82_23
+{
+ r3 = r5 >> 2;
+ r3 = heap32[(r3+8)];
+ if(r3 ==0) //_LBB82_22
+{
+break _22;
+}
+else{
+continue _27;
+}
+}
+else{
+break _22;
+}
+}
+}
+}
+else{
+ r5 = 0;
+}
+} while(0);
+ heap32[(r4)] = heap32[(r0)];
+ heap32[(r4+1)] = heap32[(r0+1)];
+ heap32[(r4+2)] = heap32[(r0+2)];
+ heap32[(r4+3)] = heap32[(r0+3)];
+ heap32[(r4+4)] = heap32[(r0+4)];
+ heap32[(r4+5)] = heap32[(r0+5)];
+ heap32[(r4+6)] = heap32[(r0+6)];
+ heap32[(r4+7)] = heap32[(r0+7)];
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = r5;
+ heap32[(g0+2)] = r1;
+ _ZL10insertleafP6btDbvtP10btDbvtNodeS2_(i7);
+ r0 = 1;
+ r_g0 = r0;
+ return;
+}
+
+function _ZL17recursedeletenodeP6btDbvtP10btDbvtNode(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ r1 = heap32[(fp)];
+ r2 = r0 >> 2;
+ r3 = heap32[(r2+10)];
+if(!(r3 ==0)) //_LBB83_2
+{
+ r3 = heap32[(r2+9)];
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r3;
+ _ZL17recursedeletenodeP6btDbvtP10btDbvtNode(i7);
+ r2 = heap32[(r2+10)];
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r2;
+ _ZL17recursedeletenodeP6btDbvtP10btDbvtNode(i7);
+}
+ r1 = r1 >> 2;
+ r2 = heap32[(r1)];
+if(!(r2 !=r0)) //_LBB83_4
+{
+ heap32[(r1)] = 0;
+}
+ r2 = heap32[(r1+1)];
+if(!(r2 ==0)) //_LBB83_6
+{
+ r3 = gNumAlignedFree;
+ r3 = r3 >> 2;
+ r4 = heap32[(r3)];
+ r4 = (r4 + 1)|0;
+ r2 = r2 >> 2;
+ heap32[(r3)] = r4;
+ r2 = heap32[(r2+-1)];
+ heap32[(g0)] = r2;
+ free(i7);
+}
+ heap32[(r1+1)] = r0;
+ return;
+}
+
+function _ZN6btDbvt19optimizeIncrementalEi(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ r1 = heap32[(fp)];
+ if(r0 <0) //_LBB84_2
+{
+ r0 = r1 >> 2;
+ r0 = heap32[(r0+3)];
+}
+ r2 = r1 >> 2;
+ r3 = heap32[(r2)];
+_4: do {
+if(!(r3 ==0)) //_LBB84_20
+{
+if(!(r0 <1)) //_LBB84_20
+{
+_6: while(true){
+ r3 = 0;
+ r4 = r1;
+_8: while(true){
+ r4 = r4 >> 2;
+ r4 = heap32[(r4)];
+ r5 = r4 >> 2;
+ r6 = heap32[(r5+10)];
+ if(r6 !=0) //_LBB84_6
+{
+ r6 = heap32[(r5+8)];
+ if(uint(r6) >uint(r4)) //_LBB84_8
+{
+ r7 = r6 >> 2;
+ r8 = heap32[(r7+10)];
+ r8 = r8 == r4;
+ r8 = r8 & 1;
+ r9 = (r6 + 36)|0;
+ r10 = r8 << 2;
+ r11 = (r9 + r10)|0;
+ r11 = r11 >> 2;
+ r11 = heap32[(r11)];
+ if(r11 ==r4) //_LBB84_10
+{
+ r8 = r8 ^ 1;
+ r8 = r8 << 2;
+ r9 = (r9 + r8)|0;
+ r9 = r9 >> 2;
+ r9 = heap32[(r9)];
+ r11 = heap32[(r7+8)];
+ if(r11 ==0) //_LBB84_12
+{
+ heap32[(r2)] = r4;
+}
+else{
+ r12 = r11 >> 2;
+ r12 = heap32[(r12+10)];
+ r12 = r12 == r6;
+ r12 = r12 & 1;
+ r12 = r12 << 2;
+ r12 = (r11 + r12)|0;
+ r12 = r12 >> 2;
+ heap32[(r12+9)] = r4;
+}
+ r12 = r9 >> 2;
+ heap32[(r12+8)] = r4;
+ heap32[(r7+8)] = r4;
+ heap32[(r5+8)] = r11;
+ r11 = heap32[(r5+9)];
+ heap32[(r7+9)] = r11;
+ r11 = heap32[(r5+10)];
+ heap32[(r7+10)] = r11;
+ r11 = heap32[(r5+9)];
+ r11 = r11 >> 2;
+ heap32[(r11+8)] = r6;
+ r11 = heap32[(r5+10)];
+ r4 = (r4 + 36)|0;
+ r10 = (r4 + r10)|0;
+ r11 = r11 >> 2;
+ r4 = (r4 + r8)|0;
+ r8 = r10 >> 2;
+ heap32[(r11+8)] = r6;
+ r4 = r4 >> 2;
+ heap32[(r8)] = r6;
+ heap32[(r4)] = r9;
+ f0 = heapFloat[(r7+7)];
+ f1 = heapFloat[(r7+6)];
+ f2 = heapFloat[(r7+5)];
+ f3 = heapFloat[(r7+4)];
+ f4 = heapFloat[(r7+3)];
+ f5 = heapFloat[(r7+2)];
+ f6 = heapFloat[(r7+1)];
+ f7 = heapFloat[(r7)];
+ heap32[(r7)] = heap32[(r5)];
+ heap32[(r7+1)] = heap32[(r5+1)];
+ heap32[(r7+2)] = heap32[(r5+2)];
+ heap32[(r7+3)] = heap32[(r5+3)];
+ heap32[(r7+4)] = heap32[(r5+4)];
+ heap32[(r7+5)] = heap32[(r5+5)];
+ heap32[(r7+6)] = heap32[(r5+6)];
+ heap32[(r7+7)] = heap32[(r5+7)];
+ heapFloat[(r5)] = f7;
+ heapFloat[(r5+1)] = f6;
+ heapFloat[(r5+2)] = f5;
+ heapFloat[(r5+3)] = f4;
+ heapFloat[(r5+4)] = f3;
+ heapFloat[(r5+5)] = f2;
+ heapFloat[(r5+6)] = f1;
+ heapFloat[(r5+7)] = f0;
+}
+else{
+break _6;
+}
+}
+else{
+ r6 = r4;
+}
+ r4 = heap32[(r2+4)];
+ r4 = r4 >>> r3;
+ r4 = r4 & 1;
+ r4 = r4 << 2;
+ r4 = (r6 + r4)|0;
+ r3 = (r3 + 1)|0;
+ r4 = (r4 + 36)|0;
+ r3 = r3 & 31;
+}
+else{
+break _8;
+}
+}
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r4;
+ _ZL10removeleafP6btDbvtP10btDbvtNode(i7);
+ r3 = r_g0;
+ if(r3 !=0) //_LBB84_18
+{
+ r3 = heap32[(r2)];
+}
+else{
+ r3 = 0;
+}
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r3;
+ heap32[(g0+2)] = r4;
+ _ZL10insertleafP6btDbvtP10btDbvtNodeS2_(i7);
+ r3 = heap32[(r2+4)];
+ r0 = (r0 + -1)|0;
+ r3 = (r3 + 1)|0;
+ heap32[(r2+4)] = r3;
+if(!(r0 !=0)) //_LBB84_5
+{
+break _4;
+}
+}
+ r4 = _2E_str22;
+ r0 = _2E_str1118;
+ heap32[(g0)] = r4;
+ heap32[(g0+1)] = r0;
+ heap32[(g0+2)] = 379;
+ _assert(i7);
+}
+}
+} while(0);
+ return;
+}
+
+function _ZN18btDbvtTreeColliderD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV18btDbvtTreeCollider;
+ r0 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r0)] = r1;
+ return;
+}
+
+function _ZN18btDbvtTreeColliderD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV18btDbvtTreeCollider;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZN18btDbvtTreeCollider7ProcessEPK10btDbvtNodeS2_(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ r1 = heap32[(fp+2)];
+if(!(r0 ==r1)) //_LBB87_2
+{
+ r2 = heap32[(fp)];
+ r2 = r2 >> 2;
+ r3 = heap32[(r2+1)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3+24)];
+ r4 = r3 >> 2;
+ r4 = heap32[(r4)];
+ r4 = r4 >> 2;
+ r1 = r1 >> 2;
+ r0 = r0 >> 2;
+ r4 = heap32[(r4+2)];
+ r1 = heap32[(r1+9)];
+ r0 = heap32[(r0+9)];
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r0;
+ heap32[(g0+2)] = r1;
+ __FUNCTION_TABLE__[(r4)>>2](i7);
+ r0 = heap32[(r2+1)];
+ r0 = r0 >> 2;
+ r1 = heap32[(r0+30)];
+ r1 = (r1 + 1)|0;
+ heap32[(r0+30)] = r1;
+}
+ return;
+}
+
+function _ZN18btDbvtTreeCollider7ProcessEPK10btDbvtNode(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ r2 = heap32[(r1)];
+ r1 = heap32[(r1+2)];
+ r2 = r2 >> 2;
+ r1 = r1 >> 2;
+ r2 = heap32[(r2+2)];
+ r1 = heap32[(r1+12)];
+ r3 = heap32[(fp+1)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r3;
+ heap32[(g0+2)] = r1;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ return;
+}
+
+function _ZNK16btDbvtBroadphase7getAabbEP17btBroadphaseProxyR9btVector3S3_(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ r1 = heap32[(fp+2)];
+ r0 = r0 >> 2;
+ r1 = r1 >> 2;
+ heap32[(r1)] = heap32[(r0+4)];
+ heap32[(r1+1)] = heap32[(r0+5)];
+ r2 = heap32[(fp+3)];
+ heap32[(r1+2)] = heap32[(r0+6)];
+ r2 = r2 >> 2;
+ heap32[(r1+3)] = heap32[(r0+7)];
+ heap32[(r2)] = heap32[(r0+8)];
+ heap32[(r2+1)] = heap32[(r0+9)];
+ heap32[(r2+2)] = heap32[(r0+10)];
+ heap32[(r2+3)] = heap32[(r0+11)];
+ return;
+}
+
+function _ZN19BroadphaseRayTesterD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV19BroadphaseRayTester;
+ r0 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r0)] = r1;
+ return;
+}
+
+function _ZN19BroadphaseRayTesterD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV19BroadphaseRayTester;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZN19BroadphaseRayTester7ProcessEPK10btDbvtNode(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r0 = heap32[(r0+1)];
+ r1 = r0 >> 2;
+ r2 = heap32[(fp+1)];
+ r1 = heap32[(r1)];
+ r1 = r1 >> 2;
+ r2 = r2 >> 2;
+ r1 = heap32[(r1+2)];
+ r2 = heap32[(r2+9)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r2;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+ return;
+}
+
+function _ZN20BroadphaseAabbTesterD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV20BroadphaseAabbTester;
+ r0 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r0)] = r1;
+ return;
+}
+
+function _ZN20BroadphaseAabbTesterD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV20BroadphaseAabbTester;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZN20BroadphaseAabbTester7ProcessEPK10btDbvtNode(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r0 = heap32[(r0+1)];
+ r1 = r0 >> 2;
+ r2 = heap32[(fp+1)];
+ r1 = heap32[(r1)];
+ r1 = r1 >> 2;
+ r2 = r2 >> 2;
+ r1 = heap32[(r1+2)];
+ r2 = heap32[(r2+9)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r2;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+ return;
+}
+
+function _ZN16btDbvtBroadphase23getOverlappingPairCacheEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r0 = heap32[(r0+24)];
+ r_g0 = r0;
+ return;
+}
+
+function _ZNK16btDbvtBroadphase23getOverlappingPairCacheEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r0 = heap32[(r0+24)];
+ r_g0 = r0;
+ return;
+}
+
+function _ZNK16btDbvtBroadphase17getBroadphaseAabbER9btVector3S1_(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+ var f10;
+ var f11;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r1 = heap32[(r0+1)];
+ r2 = heap32[(fp+1)];
+ r3 = heap32[(fp+2)];
+ r0 = heap32[(r0+11)];
+ if(r1 ==0) //_LBB98_4
+{
+ if(r0 !=0) //_LBB98_6
+{
+ r0 = r0 >> 2;
+ f0 = heapFloat[(r0)];
+ f2 = heapFloat[(r0+1)];
+ f4 = heapFloat[(r0+2)];
+ f6 = heapFloat[(r0+3)];
+ f1 = heapFloat[(r0+4)];
+ f3 = heapFloat[(r0+5)];
+ f5 = heapFloat[(r0+6)];
+ f7 = heapFloat[(r0+7)];
+}
+else{
+ f6 = 0;
+ f4 = f6;
+ f2 = f6;
+ f0 = f6;
+ f1 = f6;
+ f3 = f6;
+ f5 = f6;
+ f7 = f6;
+}
+}
+else{
+ if(r0 ==0) //_LBB98_3
+{
+ r0 = r1 >> 2;
+ f0 = heapFloat[(r0)];
+ f2 = heapFloat[(r0+1)];
+ f4 = heapFloat[(r0+2)];
+ f6 = heapFloat[(r0+3)];
+ f1 = heapFloat[(r0+4)];
+ f3 = heapFloat[(r0+5)];
+ f5 = heapFloat[(r0+6)];
+ f7 = heapFloat[(r0+7)];
+}
+else{
+ r1 = r1 >> 2;
+ r0 = r0 >> 2;
+ f0 = heapFloat[(r1)];
+ f1 = heapFloat[(r0)];
+ f2 = heapFloat[(r1+4)];
+ f3 = heapFloat[(r0+4)];
+ f4 = heapFloat[(r1+1)];
+ f5 = heapFloat[(r0+1)];
+ f6 = heapFloat[(r1+5)];
+ f7 = heapFloat[(r0+5)];
+ f8 = heapFloat[(r1+2)];
+ f9 = heapFloat[(r0+2)];
+ f10 = heapFloat[(r1+6)];
+ f11 = heapFloat[(r0+6)];
+ f0 = f0 < f1 ? f0 : f1;
+ f1 = f2 > f3 ? f2 : f3;
+ f2 = f4 < f5 ? f4 : f5;
+ f3 = f6 > f7 ? f6 : f7;
+ f4 = f8 < f9 ? f8 : f9;
+ f5 = f10 > f11 ? f10 : f11;
+}
+}
+ r0 = r2 >> 2;
+ heapFloat[(r0)] = f0;
+ heapFloat[(r0+1)] = f2;
+ heapFloat[(r0+2)] = f4;
+ r1 = r3 >> 2;
+ heapFloat[(r0+3)] = f6;
+ heapFloat[(r1)] = f1;
+ heapFloat[(r1+1)] = f3;
+ heapFloat[(r1+2)] = f5;
+ heapFloat[(r1+3)] = f7;
+ return;
+}
+
+function _ZN16btDbvtBroadphase10printStatsEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ return;
+}
+
+function _ZN16btDbvtBroadphase9resetPoolEP12btDispatcher(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ r2 = 0;
+ r3 = heap32[(r1+14)];
+ r4 = heap32[(r1+4)];
+ r3 = (r2 - r3)|0;
+if(!(r4 !=r3)) //_LBB100_18
+{
+ r3 = heap32[(r1+1)];
+if(!(r3 ==0)) //_LBB100_3
+{
+ r4 = (r0 + 4)|0;
+ heap32[(g0)] = r4;
+ heap32[(g0+1)] = r3;
+ _ZL17recursedeletenodeP6btDbvtP10btDbvtNode(i7);
+}
+ r3 = heap32[(r1+2)];
+if(!(r3 ==0)) //_LBB100_5
+{
+ r4 = gNumAlignedFree;
+ r4 = r4 >> 2;
+ r5 = heap32[(r4)];
+ r5 = (r5 + 1)|0;
+ r3 = r3 >> 2;
+ heap32[(r4)] = r5;
+ r3 = heap32[(r3+-1)];
+ heap32[(g0)] = r3;
+ free(i7);
+}
+ heap32[(r1+2)] = 0;
+ heap32[(r1+3)] = -1;
+ r3 = heap32[(r1+9)];
+if(!(r3 ==0)) //_LBB100_9
+{
+ r4 = heapU8[r0+40];
+if(!(r4 ==0)) //_LBB100_8
+{
+ r4 = gNumAlignedFree;
+ r4 = r4 >> 2;
+ r5 = heap32[(r4)];
+ r5 = (r5 + 1)|0;
+ r3 = r3 >> 2;
+ heap32[(r4)] = r5;
+ r3 = heap32[(r3+-1)];
+ heap32[(g0)] = r3;
+ free(i7);
+}
+ heap32[(r1+9)] = 0;
+}
+ r3 = 1;
+ heap8[r0+40] = r3;
+ heap32[(r1+9)] = 0;
+ heap32[(r1+7)] = 0;
+ heap32[(r1+8)] = 0;
+ heap32[(r1+5)] = 0;
+ r4 = heap32[(r1+11)];
+if(!(r4 ==0)) //_LBB100_11
+{
+ r5 = (r0 + 44)|0;
+ heap32[(g0)] = r5;
+ heap32[(g0+1)] = r4;
+ _ZL17recursedeletenodeP6btDbvtP10btDbvtNode(i7);
+}
+ r4 = heap32[(r1+12)];
+if(!(r4 ==0)) //_LBB100_13
+{
+ r5 = gNumAlignedFree;
+ r5 = r5 >> 2;
+ r6 = heap32[(r5)];
+ r6 = (r6 + 1)|0;
+ r4 = r4 >> 2;
+ heap32[(r5)] = r6;
+ r4 = heap32[(r4+-1)];
+ heap32[(g0)] = r4;
+ free(i7);
+}
+ heap32[(r1+12)] = 0;
+ heap32[(r1+13)] = -1;
+ r4 = heap32[(r1+19)];
+if(!(r4 ==0)) //_LBB100_17
+{
+ r5 = heapU8[r0+80];
+if(!(r5 ==0)) //_LBB100_16
+{
+ r5 = gNumAlignedFree;
+ r5 = r5 >> 2;
+ r6 = heap32[(r5)];
+ r6 = (r6 + 1)|0;
+ r4 = r4 >> 2;
+ heap32[(r5)] = r6;
+ r4 = heap32[(r4+-1)];
+ heap32[(g0)] = r4;
+ free(i7);
+}
+ heap32[(r1+19)] = 0;
+}
+ heap8[r0+80] = r3;
+ heap32[(r1+19)] = 0;
+ heap32[(r1+17)] = 0;
+ heap32[(r1+18)] = 0;
+ heap32[(r1+15)] = 0;
+ heap8[r0+153] = r2;
+ heap8[r0+154] = r3;
+ heap32[(r1+26)] = 0;
+ heap32[(r1+31)] = 0;
+ heap32[(r1+27)] = 1;
+ heap32[(r1+28)] = 0;
+ heap32[(r1+29)] = 10;
+ heap32[(r1+30)] = 1;
+ heap32[(r1+32)] = 0;
+ heap32[(r1+33)] = 0;
+ heap32[(r1+34)] = 0;
+ heap32[(r1+37)] = 0;
+ heap32[(r1+35)] = 0;
+ heap32[(r1+36)] = 0;
+ heap32[(r1+21)] = 0;
+ heap32[(r1+22)] = 0;
+ heap32[(r1+23)] = 0;
+}
+ return;
+}
+
+function _ZN6btDbvt24collideTTpersistentStackEPK10btDbvtNodeS2_RNS_8ICollideE(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+ var r13;
+ var r14;
+ var r15;
+ var r16;
+ var f0;
+ var f1;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+_1: do {
+if(!(r0 ==0)) //_LBB101_57
+{
+ r1 = heap32[(fp+2)];
+if(!(r1 ==0)) //_LBB101_57
+{
+ r2 = heap32[(fp)];
+ r3 = r2 >> 2;
+ r4 = heap32[(r3+6)];
+if(!(r4 >127)) //_LBB101_17
+{
+ r5 = heap32[(r3+7)];
+if(!(r5 >127)) //_LBB101_17
+{
+ r5 = gNumAlignedAllocs;
+ r5 = r5 >> 2;
+ r6 = heap32[(r5)];
+ r6 = (r6 + 1)|0;
+ heap32[(r5)] = r6;
+ heap32[(g0)] = 1043;
+ malloc(i7);
+ r5 = r_g0;
+ if(r5 !=0) //_LBB101_6
+{
+ r6 = 0;
+ r7 = (r5 + 4)|0;
+ r6 = (r6 - r7)|0;
+ r6 = r6 & 15;
+ r6 = (r5 + r6)|0;
+ r7 = (r6 + 4)|0;
+ r6 = r6 >> 2;
+ heap32[(r6)] = r5;
+ r5 = r7;
+}
+ r6 = (r2 + 32)|0;
+ if(r4 <1) //_LBB101_9
+{
+ r4 = r6 >> 2;
+ r8 = heap32[(r4)];
+}
+else{
+ r7 = 0;
+_13: while(true){
+ r8 = r6 >> 2;
+ r8 = heap32[(r8)];
+ r9 = r7 << 3;
+ r10 = (r8 + r9)|0;
+ r10 = r10 >> 2;
+ r9 = (r5 + r9)|0;
+ r11 = heap32[(r10+1)];
+ r10 = heap32[(r10)];
+ r9 = r9 >> 2;
+ r7 = (r7 + 1)|0;
+ heap32[(r9)] = r10;
+ heap32[(r9+1)] = r11;
+if(!(r4 !=r7)) //_LBB101_10
+{
+break _13;
+}
+}
+ r6 = (r2 + 32)|0;
+}
+if(!(r8 ==0)) //_LBB101_16
+{
+ r4 = heapU8[r2+36];
+if(!(r4 ==0)) //_LBB101_15
+{
+ r4 = gNumAlignedFree;
+ r4 = r4 >> 2;
+ r7 = heap32[(r4)];
+ r7 = (r7 + 1)|0;
+ r8 = r8 >> 2;
+ heap32[(r4)] = r7;
+ r4 = heap32[(r8+-1)];
+ heap32[(g0)] = r4;
+ free(i7);
+}
+ r4 = r6 >> 2;
+ heap32[(r4)] = 0;
+}
+ r4 = 1;
+ r6 = r6 >> 2;
+ heap8[r2+36] = r4;
+ heap32[(r6)] = r5;
+ heap32[(r3+7)] = 128;
+}
+}
+ r4 = heap32[(fp+3)];
+ heap32[(r3+6)] = 128;
+ r5 = heap32[(r3+8)];
+ r5 = r5 >> 2;
+ r6 = 1;
+ r7 = 124;
+ heap32[(r5)] = r0;
+ heap32[(r5+1)] = r1;
+_24: while(true){
+ r0 = r6;
+ r6 = (r0 + -1)|0;
+ r1 = heap32[(r3+8)];
+ r5 = r6 << 3;
+ r5 = (r1 + r5)|0;
+ r5 = r5 >> 2;
+ r8 = heap32[(r5)];
+ r5 = heap32[(r5+1)];
+ if(r6 >r7) //_LBB101_20
+{
+ r7 = heap32[(r3+6)];
+ r9 = r7 << 1;
+_28: do {
+if(!(r7 >r9)) //_LBB101_38
+{
+if(!(r7 >=r9)) //_LBB101_38
+{
+ r10 = heap32[(r3+7)];
+ if(r10 <r9) //_LBB101_24
+{
+ if(r9 !=0) //_LBB101_26
+{
+ r10 = gNumAlignedAllocs;
+ r10 = r10 >> 2;
+ r11 = heap32[(r10)];
+ r12 = r7 << 4;
+ r11 = (r11 + 1)|0;
+ r12 = r12 | 3;
+ heap32[(r10)] = r11;
+ r10 = (r12 + 16)|0;
+ heap32[(g0)] = r10;
+ malloc(i7);
+ r10 = r_g0;
+ if(r10 !=0) //_LBB101_28
+{
+ r11 = 0;
+ r12 = (r10 + 4)|0;
+ r11 = (r11 - r12)|0;
+ r11 = r11 & 15;
+ r11 = (r10 + r11)|0;
+ r12 = (r11 + 4)|0;
+ r11 = r11 >> 2;
+ heap32[(r11)] = r10;
+ r10 = r12;
+}
+}
+else{
+ r10 = 0;
+}
+if(!(r7 <1)) //_LBB101_32
+{
+ r11 = (r1 + 4)|0;
+ r12 = (r10 + 4)|0;
+ r13 = r7;
+_40: while(true){
+ r14 = r11 >> 2;
+ r15 = heap32[(r14)];
+ r14 = heap32[(r14+-1)];
+ r16 = r12 >> 2;
+ r13 = (r13 + -1)|0;
+ r11 = (r11 + 8)|0;
+ r12 = (r12 + 8)|0;
+ heap32[(r16+-1)] = r14;
+ heap32[(r16)] = r15;
+if(!(r13 !=0)) //_LBB101_31
+{
+break _40;
+}
+}
+}
+if(!(r1 ==0)) //_LBB101_36
+{
+ r11 = heapU8[r2+36];
+if(!(r11 ==0)) //_LBB101_35
+{
+ r11 = gNumAlignedFree;
+ r11 = r11 >> 2;
+ r12 = heap32[(r11)];
+ r12 = (r12 + 1)|0;
+ r1 = r1 >> 2;
+ heap32[(r11)] = r12;
+ r1 = heap32[(r1+-1)];
+ heap32[(g0)] = r1;
+ free(i7);
+}
+ heap32[(r3+8)] = 0;
+}
+ r1 = 1;
+ heap8[r2+36] = r1;
+ heap32[(r3+8)] = r10;
+ heap32[(r3+7)] = r9;
+if(!(r7 <r9)) //_LBB101_23
+{
+break _28;
+}
+}
+_49: while(true){
+ r7 = (r7 + -1)|0;
+if(!(r7 !=0)) //_LBB101_37
+{
+break _28;
+}
+}
+}
+}
+} while(0);
+ r7 = (r9 + -4)|0;
+ heap32[(r3+6)] = r9;
+}
+ if(r8 !=r5) //_LBB101_43
+{
+ r1 = r8 >> 2;
+ r9 = r5 >> 2;
+ f0 = heapFloat[(r1)];
+ f1 = heapFloat[(r9+4)];
+if(!(f0 >f1)) //_LBB101_41
+{
+ f0 = heapFloat[(r1+4)];
+ f1 = heapFloat[(r9)];
+if(!(f0 <f1)) //_LBB101_41
+{
+ f0 = heapFloat[(r1+1)];
+ f1 = heapFloat[(r9+5)];
+if(!(f0 >f1)) //_LBB101_41
+{
+ f0 = heapFloat[(r1+5)];
+ f1 = heapFloat[(r9+1)];
+if(!(f0 <f1)) //_LBB101_41
+{
+ f0 = heapFloat[(r1+2)];
+ f1 = heapFloat[(r9+6)];
+if(!(f0 >f1)) //_LBB101_41
+{
+ f0 = heapFloat[(r1+6)];
+ f1 = heapFloat[(r9+2)];
+if(!(f0 <f1)) //_LBB101_41
+{
+ r10 = heap32[(r9+10)];
+ r11 = heap32[(r1+10)];
+ if(r11 ==0) //_LBB101_53
+{
+ if(r10 ==0) //_LBB101_55
+{
+ r0 = r4 >> 2;
+ r0 = heap32[(r0)];
+ r0 = r0 >> 2;
+ r0 = heap32[(r0+2)];
+ heap32[(g0)] = r4;
+ heap32[(g0+1)] = r8;
+ heap32[(g0+2)] = r5;
+ __FUNCTION_TABLE__[(r0)>>2](i7);
+}
+else{
+ r5 = r0 << 3;
+ r6 = heap32[(r3+8)];
+ r6 = (r6 + r5)|0;
+ r1 = heap32[(r9+9)];
+ r6 = r6 >> 2;
+ heap32[(r6+-2)] = r8;
+ heap32[(r6+-1)] = r1;
+ r6 = heap32[(r3+8)];
+ r5 = (r6 + r5)|0;
+ r1 = heap32[(r9+10)];
+ r5 = r5 >> 2;
+ r6 = (r0 + 1)|0;
+ heap32[(r5)] = r8;
+ heap32[(r5+1)] = r1;
+}
+}
+else{
+ r6 = heap32[(r3+8)];
+ if(r10 ==0) //_LBB101_52
+{
+ r8 = r0 << 3;
+ r6 = (r6 + r8)|0;
+ r6 = r6 >> 2;
+ r9 = heap32[(r1+9)];
+ heap32[(r6+-2)] = r9;
+ heap32[(r6+-1)] = r5;
+ r6 = heap32[(r3+8)];
+ r6 = (r6 + r8)|0;
+ r8 = heap32[(r1+10)];
+ r9 = r6 >> 2;
+ r6 = (r0 + 1)|0;
+ heap32[(r9)] = r8;
+ heap32[(r9+1)] = r5;
+}
+else{
+ r5 = r0 << 3;
+ r6 = (r6 + r5)|0;
+ r8 = heap32[(r9+9)];
+ r10 = heap32[(r1+9)];
+ r6 = r6 >> 2;
+ heap32[(r6+-2)] = r10;
+ heap32[(r6+-1)] = r8;
+ r6 = heap32[(r3+8)];
+ r6 = (r6 + r5)|0;
+ r8 = heap32[(r9+9)];
+ r10 = heap32[(r1+10)];
+ r6 = r6 >> 2;
+ heap32[(r6)] = r10;
+ heap32[(r6+1)] = r8;
+ r6 = heap32[(r3+8)];
+ r6 = (r5 + r6)|0;
+ r8 = heap32[(r9+10)];
+ r10 = heap32[(r1+9)];
+ r6 = r6 >> 2;
+ heap32[(r6+2)] = r10;
+ heap32[(r6+3)] = r8;
+ r6 = heap32[(r3+8)];
+ r6 = (r5 + r6)|0;
+ r5 = heap32[(r9+10)];
+ r1 = heap32[(r1+10)];
+ r8 = r6 >> 2;
+ r6 = (r0 + 3)|0;
+ heap32[(r8+4)] = r1;
+ heap32[(r8+5)] = r5;
+}
+}
+}
+}
+}
+}
+}
+}
+}
+else{
+ r5 = r8 >> 2;
+ r8 = heap32[(r5+10)];
+ if(r8 !=0) //_LBB101_42
+{
+ r6 = r0 << 3;
+ r8 = heap32[(r3+8)];
+ r8 = (r8 + r6)|0;
+ r1 = heap32[(r5+9)];
+ r8 = r8 >> 2;
+ heap32[(r8+-2)] = r1;
+ heap32[(r8+-1)] = r1;
+ r8 = heap32[(r3+8)];
+ r8 = (r8 + r6)|0;
+ r1 = heap32[(r5+10)];
+ r8 = r8 >> 2;
+ heap32[(r8)] = r1;
+ heap32[(r8+1)] = r1;
+ r8 = heap32[(r3+8)];
+ r6 = (r6 + r8)|0;
+ r8 = heap32[(r5+10)];
+ r5 = heap32[(r5+9)];
+ r1 = r6 >> 2;
+ r6 = (r0 + 2)|0;
+ heap32[(r1+2)] = r5;
+ heap32[(r1+3)] = r8;
+}
+}
+ if(r6 !=0) //_LBB101_18
+{
+continue _24;
+}
+else{
+break _1;
+}
+}
+}
+}
+} while(0);
+ return;
+}
+
+function _ZN6btDbvt9collideTVEPK10btDbvtNodeRK12btDbvtAabbMmRNS_8ICollideE(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+if(!(r0 ==0)) //_LBB102_46
+{
+ r1 = heap32[(fp+1)];
+ r2 = heap32[(fp+2)];
+ r3 = gNumAlignedAllocs;
+ r1 = r1 >> 2;
+ r3 = r3 >> 2;
+ r4 = heap32[(r3)];
+ f0 = heapFloat[(r1)];
+ f1 = heapFloat[(r1+1)];
+ f2 = heapFloat[(r1+2)];
+ f3 = heapFloat[(r1+4)];
+ f4 = heapFloat[(r1+5)];
+ f5 = heapFloat[(r1+6)];
+ r1 = (r4 + 1)|0;
+ heap32[(r3)] = r1;
+ heap32[(g0)] = 275;
+ malloc(i7);
+ r1 = r_g0;
+ if(r1 !=0) //_LBB102_3
+{
+ r4 = 0;
+ r5 = (r1 + 4)|0;
+ r4 = (r4 - r5)|0;
+ r4 = r4 & 15;
+ r4 = (r1 + r4)|0;
+ r5 = (r4 + 4)|0;
+ r4 = r4 >> 2;
+ heap32[(r4)] = r1;
+ r1 = r5;
+}
+ r4 = 1;
+ r5 = 64;
+ r6 = r1 >> 2;
+ heap32[(r6)] = r0;
+_6: while(true){
+ r0 = r4;
+ r4 = (r0 + -1)|0;
+ r6 = r4 << 2;
+ r6 = (r1 + r6)|0;
+ r6 = r6 >> 2;
+ r6 = heap32[(r6)];
+ r7 = r6 >> 2;
+ f6 = heapFloat[(r7)];
+ if(f6 <=f3) //_LBB102_7
+{
+ f6 = heapFloat[(r7+4)];
+if(!(f6 <f0)) //_LBB102_6
+{
+ f6 = heapFloat[(r7+1)];
+if(!(f6 >f4)) //_LBB102_6
+{
+ f6 = heapFloat[(r7+5)];
+if(!(f6 <f1)) //_LBB102_6
+{
+ f6 = heapFloat[(r7+2)];
+if(!(f6 >f5)) //_LBB102_6
+{
+ f6 = heapFloat[(r7+6)];
+if(!(f6 <f2)) //_LBB102_6
+{
+ r8 = heap32[(r7+10)];
+ if(r8 ==0) //_LBB102_42
+{
+ r0 = r2 >> 2;
+ r0 = heap32[(r0)];
+ r0 = r0 >> 2;
+ r0 = heap32[(r0+3)];
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = r6;
+ __FUNCTION_TABLE__[(r0)>>2](i7);
+}
+else{
+ r6 = heap32[(r7+9)];
+ if(r5 ==r4) //_LBB102_15
+{
+ r8 = 1;
+ r9 = r4 << 1;
+ r8 = r4 == 0 ? r8 : r9;
+if(!(r5 >=r8)) //_LBB102_14
+{
+ if(r8 !=0) //_LBB102_18
+{
+ r5 = heap32[(r3)];
+ r9 = r8 << 2;
+ r5 = (r5 + 1)|0;
+ r9 = r9 | 3;
+ heap32[(r3)] = r5;
+ r5 = (r9 + 16)|0;
+ heap32[(g0)] = r5;
+ malloc(i7);
+ r9 = r_g0;
+ if(r9 !=0) //_LBB102_20
+{
+ r5 = 0;
+ r10 = (r9 + 4)|0;
+ r5 = (r5 - r10)|0;
+ r5 = r5 & 15;
+ r5 = (r9 + r5)|0;
+ r10 = (r5 + 4)|0;
+ r5 = r5 >> 2;
+ heap32[(r5)] = r9;
+ r9 = r10;
+}
+}
+else{
+ r9 = 0;
+}
+if(!(r4 <1)) //_LBB102_24
+{
+ r4 = (r0 + -1)|0;
+ r5 = r1;
+ r10 = r9;
+_28: while(true){
+ r11 = r5 >> 2;
+ r4 = (r4 + -1)|0;
+ r12 = (r10 + 4)|0;
+ r5 = (r5 + 4)|0;
+ r10 = r10 >> 2;
+ r11 = heap32[(r11)];
+ heap32[(r10)] = r11;
+ r10 = r12;
+if(!(r4 !=0)) //_LBB102_23
+{
+break _28;
+}
+}
+}
+ if(r1 !=0) //_LBB102_26
+{
+ r4 = gNumAlignedFree;
+ r4 = r4 >> 2;
+ r5 = heap32[(r4)];
+ r5 = (r5 + 1)|0;
+ r1 = r1 >> 2;
+ heap32[(r4)] = r5;
+ r1 = heap32[(r1+-1)];
+ heap32[(g0)] = r1;
+ free(i7);
+ r5 = r8;
+ r1 = r9;
+}
+else{
+ r5 = r8;
+ r1 = r9;
+}
+}
+}
+ r4 = r0 << 2;
+ r8 = (r1 + r4)|0;
+ r8 = r8 >> 2;
+ heap32[(r8+-1)] = r6;
+ r6 = heap32[(r7+10)];
+ if(r5 ==r0) //_LBB102_29
+{
+ r7 = 1;
+ r8 = r0 << 1;
+ r7 = r0 == 0 ? r7 : r8;
+if(!(r5 >=r7)) //_LBB102_28
+{
+ if(r7 !=0) //_LBB102_32
+{
+ r5 = heap32[(r3)];
+ r8 = r7 << 2;
+ r5 = (r5 + 1)|0;
+ r8 = r8 | 3;
+ heap32[(r3)] = r5;
+ r5 = (r8 + 16)|0;
+ heap32[(g0)] = r5;
+ malloc(i7);
+ r8 = r_g0;
+ if(r8 !=0) //_LBB102_34
+{
+ r5 = 0;
+ r9 = (r8 + 4)|0;
+ r5 = (r5 - r9)|0;
+ r5 = r5 & 15;
+ r5 = (r8 + r5)|0;
+ r9 = (r5 + 4)|0;
+ r5 = r5 >> 2;
+ heap32[(r5)] = r8;
+ r8 = r9;
+}
+}
+else{
+ r8 = 0;
+}
+_43: do {
+if(!(r0 <1)) //_LBB102_38
+{
+ r5 = r1;
+ r9 = r8;
+ r10 = r0;
+_45: while(true){
+ r11 = r5 >> 2;
+ r10 = (r10 + -1)|0;
+ r12 = (r9 + 4)|0;
+ r5 = (r5 + 4)|0;
+ r9 = r9 >> 2;
+ r11 = heap32[(r11)];
+ heap32[(r9)] = r11;
+ r9 = r12;
+if(!(r10 !=0)) //_LBB102_37
+{
+break _43;
+}
+}
+}
+} while(0);
+ if(r1 !=0) //_LBB102_40
+{
+ r5 = gNumAlignedFree;
+ r5 = r5 >> 2;
+ r9 = heap32[(r5)];
+ r9 = (r9 + 1)|0;
+ r1 = r1 >> 2;
+ heap32[(r5)] = r9;
+ r1 = heap32[(r1+-1)];
+ heap32[(g0)] = r1;
+ free(i7);
+ r5 = r7;
+ r1 = r8;
+}
+else{
+ r5 = r7;
+ r1 = r8;
+}
+}
+}
+ r7 = (r1 + r4)|0;
+ r4 = (r0 + 1)|0;
+ r0 = r7 >> 2;
+ heap32[(r0)] = r6;
+}
+}
+}
+}
+}
+}
+}
+if(!(r4 >0)) //_LBB102_5
+{
+break _6;
+}
+}
+if(!(r1 ==0)) //_LBB102_46
+{
+ r0 = gNumAlignedFree;
+ r0 = r0 >> 2;
+ r2 = heap32[(r0)];
+ r2 = (r2 + 1)|0;
+ r1 = r1 >> 2;
+ heap32[(r0)] = r2;
+ r0 = heap32[(r1+-1)];
+ heap32[(g0)] = r0;
+ free(i7);
+}
+}
+ return;
+}
+
+function _ZN16btDbvtBroadphase8aabbTestERK9btVector3S2_R24btBroadphaseAabbCallback(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+var __label__ = 0;
+ i7 = sp + -56;var g0 = i7>>2; // save stack
+ r0 = _ZTV20BroadphaseAabbTester;
+ r1 = sp + -8;
+ r0 = (r0 + 8)|0;
+ r2 = heap32[(fp+1)];
+ r3 = r1 >> 2;
+ r4 = heap32[(fp+3)];
+ heap32[(fp+-2)] = r0;
+ r0 = sp + -40;
+ r2 = r2 >> 2;
+ heap32[(r3+1)] = r4;
+ r3 = r0 >> 2;
+ heap32[(fp+-10)] = heap32[(r2)];
+ heap32[(r3+1)] = heap32[(r2+1)];
+ r4 = heap32[(fp+2)];
+ heap32[(r3+2)] = heap32[(r2+2)];
+ r4 = r4 >> 2;
+ heap32[(r3+3)] = heap32[(r2+3)];
+ heap32[(r3+4)] = heap32[(r4)];
+ heap32[(r3+5)] = heap32[(r4+1)];
+ r2 = heap32[(fp)];
+ heap32[(r3+6)] = heap32[(r4+2)];
+ r2 = r2 >> 2;
+ heap32[(r3+7)] = heap32[(r4+3)];
+ r3 = heap32[(r2+1)];
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r0;
+ heap32[(g0+2)] = r1;
+ _ZN6btDbvt9collideTVEPK10btDbvtNodeRK12btDbvtAabbMmRNS_8ICollideE(i7);
+ r2 = heap32[(r2+11)];
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = r0;
+ heap32[(g0+2)] = r1;
+ _ZN6btDbvt9collideTVEPK10btDbvtNodeRK12btDbvtAabbMmRNS_8ICollideE(i7);
+ return;
+}
+
+function _ZN16btDbvtBroadphase11createProxyERK9btVector3S2_iPvssP12btDispatcherS3_(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+var __label__ = 0;
+ i7 = sp + -64;var g0 = i7>>2; // save stack
+ r0 = gNumAlignedAllocs;
+ r0 = r0 >> 2;
+ r1 = heap32[(r0)];
+ r2 = (r1 + 1)|0;
+ heap32[(r0)] = r2;
+ heap32[(g0)] = 83;
+ malloc(i7);
+ r2 = r_g0;
+ r3 = heap32[(fp)];
+ r4 = heap32[(fp+1)];
+ r5 = heap32[(fp+2)];
+ r6 = heap32[(fp+4)];
+ r7 = heap32[(fp+5)];
+ r8 = heap32[(fp+6)];
+ if(r2 !=0) //_LBB104_2
+{
+ r9 = 0;
+ r10 = (r2 + 4)|0;
+ r9 = (r9 - r10)|0;
+ r9 = r9 & 15;
+ r9 = (r2 + r9)|0;
+ r10 = (r9 + 4)|0;
+ r9 = r9 >> 2;
+ heap32[(r9)] = r2;
+ r2 = r10;
+}
+ r9 = r2 >> 2;
+ heap32[(r9)] = r6;
+ heap16[(r2+4)>>1] = r7;
+ r4 = r4 >> 2;
+ heap16[(r2+6)>>1] = r8;
+ f0 = heapFloat[(r4)];
+ heapFloat[(r9+4)] = f0;
+ f1 = heapFloat[(r4+1)];
+ heapFloat[(r9+5)] = f1;
+ f2 = heapFloat[(r4+2)];
+ heapFloat[(r9+6)] = f2;
+ f3 = heapFloat[(r4+3)];
+ r4 = r5 >> 2;
+ heapFloat[(r9+7)] = f3;
+ f4 = heapFloat[(r4)];
+ heapFloat[(r9+8)] = f4;
+ f5 = heapFloat[(r4+1)];
+ heapFloat[(r9+9)] = f5;
+ f6 = heapFloat[(r4+2)];
+ heapFloat[(r9+10)] = f6;
+ f7 = heapFloat[(r4+3)];
+ heapFloat[(r9+11)] = f7;
+ heap32[(r9+2)] = 0;
+ heap32[(r9+14)] = 0;
+ r4 = sp + -32;
+ heap32[(r9+13)] = 0;
+ r5 = r4 >> 2;
+ heapFloat[(fp+-8)] = f0;
+ heapFloat[(r5+1)] = f1;
+ heapFloat[(r5+2)] = f2;
+ heapFloat[(r5+3)] = f3;
+ heapFloat[(r5+4)] = f4;
+ heapFloat[(r5+5)] = f5;
+ heapFloat[(r5+6)] = f6;
+ r6 = r3 >> 2;
+ heapFloat[(r5+7)] = f7;
+ r5 = heap32[(r6+26)];
+ heap32[(r9+15)] = r5;
+ r5 = heap32[(r6+37)];
+ r5 = (r5 + 1)|0;
+ heap32[(r6+37)] = r5;
+ heap32[(r9+3)] = r5;
+ r5 = heap32[(r6+2)];
+ r7 = (r3 + 4)|0;
+ if(r5 ==0) //_LBB104_5
+{
+ r5 = (r1 + 2)|0;
+ heap32[(r0)] = r5;
+ heap32[(g0)] = 63;
+ malloc(i7);
+ r5 = r_g0;
+ if(r5 !=0) //_LBB104_7
+{
+ r0 = 0;
+ r1 = (r5 + 4)|0;
+ r0 = (r0 - r1)|0;
+ r0 = r0 & 15;
+ r0 = (r5 + r0)|0;
+ r1 = (r0 + 4)|0;
+ r0 = r0 >> 2;
+ heap32[(r0)] = r5;
+ r5 = r1;
+}
+}
+else{
+ heap32[(r6+2)] = 0;
+}
+ r0 = r5 >> 2;
+ heap32[(r0+8)] = 0;
+ heap32[(r0+9)] = r2;
+ heap32[(r0+10)] = 0;
+ heapFloat[(r0)] = f0;
+ heapFloat[(r0+1)] = f1;
+ heapFloat[(r0+2)] = f2;
+ heapFloat[(r0+3)] = f3;
+ heapFloat[(r0+4)] = f4;
+ heapFloat[(r0+5)] = f5;
+ heapFloat[(r0+6)] = f6;
+ heapFloat[(r0+7)] = f7;
+ r0 = heap32[(r6+1)];
+ heap32[(g0)] = r7;
+ heap32[(g0+1)] = r0;
+ heap32[(g0+2)] = r5;
+ _ZL10insertleafP6btDbvtP10btDbvtNodeS2_(i7);
+ r0 = heap32[(r6+4)];
+ r0 = (r0 + 1)|0;
+ heap32[(r6+4)] = r0;
+ heap32[(r9+12)] = r5;
+ r0 = heap32[(r6+26)];
+ r0 = r0 << 2;
+ r0 = (r3 + r0)|0;
+ r0 = r0 >> 2;
+ heap32[(r9+13)] = 0;
+ r1 = heap32[(r0+21)];
+ heap32[(r9+14)] = r1;
+if(!(r1 ==0)) //_LBB104_10
+{
+ r1 = r1 >> 2;
+ heap32[(r1+13)] = r2;
+}
+ heap32[(r0+21)] = r2;
+ r0 = heapU8[r3+153];
+if(!(r0 !=0)) //_LBB104_12
+{
+ r0 = _ZTV18btDbvtTreeCollider;
+ r0 = (r0 + 8)|0;
+ r1 = sp + -48;
+ r5 = r1 >> 2;
+ heap32[(fp+-12)] = r0;
+ heap32[(r5+1)] = r3;
+ heap32[(r5+2)] = r2;
+ r3 = heap32[(r6+1)];
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r4;
+ heap32[(g0+2)] = r1;
+ _ZN6btDbvt9collideTVEPK10btDbvtNodeRK12btDbvtAabbMmRNS_8ICollideE(i7);
+ r3 = heap32[(r6+11)];
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r4;
+ heap32[(g0+2)] = r1;
+ _ZN6btDbvt9collideTVEPK10btDbvtNodeRK12btDbvtAabbMmRNS_8ICollideE(i7);
+ heap32[(fp+-12)] = r0;
+}
+ r_g0 = r2;
+ return;
+}
+
+function _ZNK6btDbvt15rayTestInternalEPK10btDbvtNodeRK9btVector3S5_S5_PjfS5_S5_RNS_8ICollideE(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+ var r13;
+ var r14;
+ var r15;
+ var r16;
+ var r17;
+ var r18;
+ var r19;
+ var r20;
+ var r21;
+ var r22;
+ var r23;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+var __label__ = 0;
+ i7 = sp + -40;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+if(!(r0 ==0)) //_LBB105_43
+{
+ r1 = heap32[(fp+1)];
+ r2 = heap32[(fp+2)];
+ r3 = heap32[(fp+3)];
+ f0 = heapFloat[(fp+4)];
+ r4 = heap32[(fp+5)];
+ r5 = heap32[(fp+6)];
+ r6 = heap32[(fp+7)];
+ r7 = gNumAlignedAllocs;
+ r7 = r7 >> 2;
+ r8 = heap32[(r7)];
+ r8 = (r8 + 1)|0;
+ heap32[(r7)] = r8;
+ heap32[(g0)] = 531;
+ malloc(i7);
+ r8 = r_g0;
+ if(r8 !=0) //_LBB105_3
+{
+ r9 = 0;
+ r10 = (r8 + 4)|0;
+ r9 = (r9 - r10)|0;
+ r9 = r9 & 15;
+ r9 = (r8 + r9)|0;
+ r10 = (r9 + 4)|0;
+ r9 = r9 >> 2;
+ heap32[(r9)] = r8;
+ r8 = r10;
+}
+ r9 = 0;
+_6: while(true){
+ r10 = r9 << 2;
+ r10 = (r8 + r10)|0;
+ r9 = (r9 + 1)|0;
+ r10 = r10 >> 2;
+ heap32[(r10)] = 0;
+if(!(r9 !=128)) //_LBB105_5
+{
+break _6;
+}
+}
+ r9 = 128;
+ r10 = 1;
+ r11 = 126;
+ r12 = r8 >> 2;
+ heap32[(r12)] = r0;
+ r0 = r9;
+ r12 = r10;
+_9: while(true){
+ r13 = r12;
+ r12 = (r13 + -1)|0;
+ r14 = r12 << 2;
+ r14 = (r8 + r14)|0;
+ r14 = r14 >> 2;
+ r14 = heap32[(r14)];
+ r15 = r14 >> 2;
+ r16 = r5 >> 2;
+ f1 = heapFloat[(r15+2)];
+ f2 = heapFloat[(r16+2)];
+ f3 = heapFloat[(r15+1)];
+ f4 = heapFloat[(r16+1)];
+ f5 = heapFloat[(r15)];
+ f6 = heapFloat[(r16)];
+ r16 = sp + -32;
+ f5 = f5-f6;
+ r17 = r16 >> 2;
+ f3 = f3-f4;
+ heapFloat[(fp+-8)] = f5;
+ f1 = f1-f2;
+ heapFloat[(r17+1)] = f3;
+ heapFloat[(r17+2)] = f1;
+ heap32[(r17+3)] = 0;
+ r18 = r4 >> 2;
+ f1 = heapFloat[(r15+6)];
+ f2 = heapFloat[(r18+2)];
+ f3 = heapFloat[(r15+5)];
+ f4 = heapFloat[(r18+1)];
+ f5 = heapFloat[(r15+4)];
+ f6 = heapFloat[(r18)];
+ f5 = f5-f6;
+ f3 = f3-f4;
+ heapFloat[(r17+4)] = f5;
+ f1 = f1-f2;
+ heapFloat[(r17+5)] = f3;
+ heapFloat[(r17+6)] = f1;
+ r18 = r3 >> 2;
+ heap32[(r17+7)] = 0;
+ r17 = heap32[(r18)];
+ r19 = heap32[(r18+1)];
+ r20 = (r10 - r19)|0;
+ r21 = r17 << 4;
+ r20 = r20 << 4;
+ r21 = (r16 + r21)|0;
+ r20 = (r16 + r20)|0;
+ r22 = r1 >> 2;
+ r21 = r21 >> 2;
+ r20 = r20 >> 2;
+ r23 = r2 >> 2;
+ f1 = heapFloat[(r21)];
+ f2 = heapFloat[(r22)];
+ f3 = heapFloat[(r20+1)];
+ f4 = heapFloat[(r22+1)];
+ f1 = f1-f2;
+ f5 = heapFloat[(r23)];
+ f3 = f3-f4;
+ f6 = heapFloat[(r23+1)];
+ f1 = f1*f5;
+ f3 = f3*f6;
+if(!(f1 >f3)) //_LBB105_9
+{
+ r17 = (r10 - r17)|0;
+ r17 = r17 << 4;
+ r19 = r19 << 4;
+ r17 = (r16 + r17)|0;
+ r19 = (r16 + r19)|0;
+ r17 = r17 >> 2;
+ r19 = r19 >> 2;
+ f7 = heapFloat[(r17)];
+ f8 = heapFloat[(r19+1)];
+ f2 = f7-f2;
+ f4 = f8-f4;
+ f2 = f2*f5;
+ f4 = f4*f6;
+ if(f4 <=f2) //_LBB105_10
+{
+ r17 = heap32[(r18+2)];
+ r18 = 1;
+ r18 = (r18 - r17)|0;
+ r18 = r18 << 4;
+ r18 = (r16 + r18)|0;
+ r18 = r18 >> 2;
+ f5 = heapFloat[(r18+2)];
+ f6 = heapFloat[(r22+2)];
+ f5 = f5-f6;
+ f7 = heapFloat[(r23+2)];
+ f1 = f1 < f4 ? f4 : f1;
+ f4 = f5*f7;
+if(!(f1 >f4)) //_LBB105_9
+{
+ r17 = r17 << 4;
+ r16 = (r16 + r17)|0;
+ r16 = r16 >> 2;
+ f5 = heapFloat[(r16+2)];
+ f5 = f5-f6;
+ f2 = f3 < f2 ? f3 : f2;
+ f3 = f5*f7;
+if(!(f3 >f2)) //_LBB105_9
+{
+ f1 = f1 < f3 ? f3 : f1;
+if(!(f1 >=f0)) //_LBB105_9
+{
+ f1 = f4 < f2 ? f4 : f2;
+ f2 = 0;
+if(!(f1 <=f2)) //_LBB105_9
+{
+ r16 = heap32[(r15+10)];
+ if(r16 ==0) //_LBB105_39
+{
+ r13 = r6 >> 2;
+ r13 = heap32[(r13)];
+ r13 = r13 >> 2;
+ r13 = heap32[(r13+3)];
+ heap32[(g0)] = r6;
+ heap32[(g0+1)] = r14;
+ __FUNCTION_TABLE__[(r13)>>2](i7);
+}
+else{
+ if(r12 >r11) //_LBB105_17
+{
+ r14 = r0 << 1;
+_23: do {
+ if(r0 <=r14) //_LBB105_19
+{
+if(!(r0 >=r14)) //_LBB105_18
+{
+ if(r9 <r14) //_LBB105_22
+{
+ if(r14 !=0) //_LBB105_24
+{
+ r9 = heap32[(r7)];
+ r11 = r0 << 3;
+ r9 = (r9 + 1)|0;
+ r11 = r11 | 3;
+ heap32[(r7)] = r9;
+ r9 = (r11 + 16)|0;
+ heap32[(g0)] = r9;
+ malloc(i7);
+ r9 = r_g0;
+ if(r9 !=0) //_LBB105_26
+{
+ r11 = 0;
+ r12 = (r9 + 4)|0;
+ r11 = (r11 - r12)|0;
+ r11 = r11 & 15;
+ r11 = (r9 + r11)|0;
+ r12 = (r11 + 4)|0;
+ r11 = r11 >> 2;
+ heap32[(r11)] = r9;
+ r9 = r12;
+}
+}
+else{
+ r9 = 0;
+}
+if(!(r0 <1)) //_LBB105_30
+{
+ r11 = r8;
+ r12 = r9;
+ r16 = r0;
+_35: while(true){
+ r17 = r11 >> 2;
+ r16 = (r16 + -1)|0;
+ r18 = (r12 + 4)|0;
+ r11 = (r11 + 4)|0;
+ r12 = r12 >> 2;
+ r17 = heap32[(r17)];
+ heap32[(r12)] = r17;
+ r12 = r18;
+if(!(r16 !=0)) //_LBB105_29
+{
+break _35;
+}
+}
+}
+if(!(r8 ==0)) //_LBB105_32
+{
+ r11 = gNumAlignedFree;
+ r11 = r11 >> 2;
+ r12 = heap32[(r11)];
+ r12 = (r12 + 1)|0;
+ r8 = r8 >> 2;
+ heap32[(r11)] = r12;
+ r8 = heap32[(r8+-1)];
+ heap32[(g0)] = r8;
+ free(i7);
+}
+ if(r0 <r14) //_LBB105_34
+{
+ r8 = r9;
+ r9 = r14;
+}
+else{
+ r8 = r9;
+ r9 = r14;
+break _23;
+}
+}
+ r11 = r0;
+_45: while(true){
+ r12 = r0 << 2;
+ r12 = (r8 + r12)|0;
+ r11 = (r11 + -1)|0;
+ r0 = (r0 + 1)|0;
+ r12 = r12 >> 2;
+ heap32[(r12)] = 0;
+if(!(r11 !=0)) //_LBB105_36
+{
+break _23;
+}
+}
+}
+}
+} while(0);
+ r11 = (r14 + -2)|0;
+}
+else{
+ r14 = r0;
+}
+ r0 = r13 << 2;
+ r0 = (r8 + r0)|0;
+ r0 = r0 >> 2;
+ r12 = heap32[(r15+9)];
+ heap32[(r0+-1)] = r12;
+ r15 = heap32[(r15+10)];
+ r12 = (r13 + 1)|0;
+ heap32[(r0)] = r15;
+ r0 = r14;
+}
+}
+}
+}
+}
+}
+}
+if(!(r12 !=0)) //_LBB105_7
+{
+break _9;
+}
+}
+if(!(r8 ==0)) //_LBB105_43
+{
+ r0 = gNumAlignedFree;
+ r0 = r0 >> 2;
+ r1 = heap32[(r0)];
+ r1 = (r1 + 1)|0;
+ r2 = r8 >> 2;
+ heap32[(r0)] = r1;
+ r0 = heap32[(r2+-1)];
+ heap32[(g0)] = r0;
+ free(i7);
+}
+}
+ return;
+}
+
+function _ZN16btDbvtBroadphase7rayTestERK9btVector3S2_R23btBroadphaseRayCallbackS2_S2_(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var f0;
+var __label__ = 0;
+ i7 = sp + -40;var g0 = i7>>2; // save stack
+ r0 = _ZTV19BroadphaseRayTester;
+ r1 = sp + -8;
+ r0 = (r0 + 8)|0;
+ r2 = heap32[(fp+3)];
+ r3 = heap32[(fp)];
+ r4 = r1 >> 2;
+ heap32[(fp+-2)] = r0;
+ heap32[(r4+1)] = r2;
+ r0 = r2 >> 2;
+ r3 = r3 >> 2;
+ f0 = heapFloat[(r0+8)];
+ r4 = heap32[(r3+1)];
+ r5 = heap32[(fp+1)];
+ r6 = (r2 + 4)|0;
+ r2 = (r2 + 20)|0;
+ r7 = heap32[(fp+4)];
+ r8 = heap32[(fp+5)];
+ heap32[(g0)] = r4;
+ heap32[(g0+1)] = r5;
+ heap32[(g0+2)] = r6;
+ heap32[(g0+3)] = r2;
+ heapFloat[(g0+4)] = f0;
+ heap32[(g0+5)] = r7;
+ heap32[(g0+6)] = r8;
+ heap32[(g0+7)] = r1;
+ _ZNK6btDbvt15rayTestInternalEPK10btDbvtNodeRK9btVector3S5_S5_PjfS5_S5_RNS_8ICollideE(i7);
+ f0 = heapFloat[(r0+8)];
+ r0 = heap32[(r3+11)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r5;
+ heap32[(g0+2)] = r6;
+ heap32[(g0+3)] = r2;
+ heapFloat[(g0+4)] = f0;
+ heap32[(g0+5)] = r7;
+ heap32[(g0+6)] = r8;
+ heap32[(g0+7)] = r1;
+ _ZNK6btDbvt15rayTestInternalEPK10btDbvtNodeRK9btVector3S5_S5_PjfS5_S5_RNS_8ICollideE(i7);
+ return;
+}
+
+function _ZN16btDbvtBroadphase12destroyProxyEP17btBroadphaseProxyP12btDispatcher(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ r1 = r0 >> 2;
+ r2 = heap32[(fp)];
+ r3 = heap32[(fp+2)];
+ r4 = heap32[(r1+12)];
+ r5 = heap32[(r1+15)];
+ if(r5 !=2) //_LBB107_4
+{
+ r5 = (r2 + 4)|0;
+ heap32[(g0)] = r5;
+ heap32[(g0+1)] = r4;
+ r5 = r2 >> 2;
+ _ZL10removeleafP6btDbvtP10btDbvtNode(i7);
+ r6 = heap32[(r5+2)];
+if(!(r6 ==0)) //_LBB107_6
+{
+ r7 = gNumAlignedFree;
+ r7 = r7 >> 2;
+ r8 = heap32[(r7)];
+ r8 = (r8 + 1)|0;
+ r6 = r6 >> 2;
+ heap32[(r7)] = r8;
+ r6 = heap32[(r6+-1)];
+ heap32[(g0)] = r6;
+ free(i7);
+}
+ heap32[(r5+2)] = r4;
+ r4 = heap32[(r5+4)];
+ r4 = (r4 + -1)|0;
+ heap32[(r5+4)] = r4;
+}
+else{
+ r5 = (r2 + 44)|0;
+ heap32[(g0)] = r5;
+ heap32[(g0+1)] = r4;
+ r5 = r2 >> 2;
+ _ZL10removeleafP6btDbvtP10btDbvtNode(i7);
+ r6 = heap32[(r5+12)];
+if(!(r6 ==0)) //_LBB107_3
+{
+ r7 = gNumAlignedFree;
+ r7 = r7 >> 2;
+ r8 = heap32[(r7)];
+ r8 = (r8 + 1)|0;
+ r6 = r6 >> 2;
+ heap32[(r7)] = r8;
+ r6 = heap32[(r6+-1)];
+ heap32[(g0)] = r6;
+ free(i7);
+}
+ heap32[(r5+12)] = r4;
+ r4 = heap32[(r5+14)];
+ r4 = (r4 + -1)|0;
+ heap32[(r5+14)] = r4;
+}
+ r4 = heap32[(r1+13)];
+ r5 = heap32[(r1+14)];
+ if(r4 ==0) //_LBB107_9
+{
+ r4 = heap32[(r1+15)];
+ r4 = r4 << 2;
+ r4 = (r2 + r4)|0;
+ r4 = r4 >> 2;
+ heap32[(r4+21)] = r5;
+}
+else{
+ r4 = r4 >> 2;
+ heap32[(r4+14)] = r5;
+}
+ r4 = heap32[(r1+14)];
+if(!(r4 ==0)) //_LBB107_12
+{
+ r4 = r4 >> 2;
+ r5 = heap32[(r1+13)];
+ heap32[(r4+13)] = r5;
+}
+ r4 = r2 >> 2;
+ r4 = heap32[(r4+24)];
+ r5 = r4 >> 2;
+ r5 = heap32[(r5)];
+ r5 = r5 >> 2;
+ r5 = heap32[(r5+4)];
+ heap32[(g0)] = r4;
+ heap32[(g0+1)] = r0;
+ heap32[(g0+2)] = r3;
+ __FUNCTION_TABLE__[(r5)>>2](i7);
+if(!(r0 ==0)) //_LBB107_14
+{
+ r0 = gNumAlignedFree;
+ r0 = r0 >> 2;
+ r3 = heap32[(r0)];
+ r3 = (r3 + 1)|0;
+ heap32[(r0)] = r3;
+ r0 = heap32[(r1+-1)];
+ heap32[(g0)] = r0;
+ free(i7);
+}
+ r0 = 1;
+ heap8[r2+154] = r0;
+ return;
+}
+
+function _ZN16btDbvtBroadphase25calculateOverlappingPairsEP12btDispatcher(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+var __label__ = 0;
+ i7 = sp + -48;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ r2 = heap32[(r1+4)];
+ r3 = heap32[(r1+28)];
+ r2 = (r3 * r2)|0;
+ r2 = (r2 / 100)|0;
+ r3 = (r0 + 4)|0;
+ r2 = (r2 + 1)|0;
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r2;
+ _ZN6btDbvt19optimizeIncrementalEi(i7);
+ r2 = heap32[(r1+31)];
+if(!(r2 ==0)) //_LBB108_2
+{
+ r2 = heap32[(r1+14)];
+ r4 = heap32[(r1+27)];
+ r2 = (r4 * r2)|0;
+ r4 = (r2 / 100)|0;
+ r5 = (r0 + 44)|0;
+ r4 = (r4 + 1)|0;
+ heap32[(g0)] = r5;
+ heap32[(g0+1)] = r4;
+ _ZN6btDbvt19optimizeIncrementalEi(i7);
+ r2 = (r2 / -100)|0;
+ r4 = heap32[(r1+31)];
+ r2 = (r2 + r4)|0;
+ r2 = (r2 + -1)|0;
+ r4 = 0;
+ r2 = r2 < 0 ? r4 : r2;
+ heap32[(r1+31)] = r2;
+}
+ r2 = heap32[(r1+26)];
+ r2 = (r2 + 1)|0;
+ r4 = r2 >>> 31;
+ r4 = (r2 + r4)|0;
+ r4 = r4 & -2;
+ r2 = (r2 - r4)|0;
+ r4 = r2 << 2;
+ r4 = (r0 + r4)|0;
+ r4 = r4 >> 2;
+ heap32[(r1+26)] = r2;
+ r2 = heap32[(r4+21)];
+if(!(r2 ==0)) //_LBB108_20
+{
+ r4 = (r0 + 44)|0;
+_6: while(true){
+ r5 = r2 >> 2;
+ r6 = heap32[(r5+13)];
+ r7 = heap32[(r5+14)];
+ if(r6 ==0) //_LBB108_6
+{
+ r6 = heap32[(r5+15)];
+ r6 = r6 << 2;
+ r6 = (r0 + r6)|0;
+ r6 = r6 >> 2;
+ heap32[(r6+21)] = r7;
+}
+else{
+ r6 = r6 >> 2;
+ heap32[(r6+14)] = r7;
+}
+ r6 = heap32[(r5+14)];
+if(!(r6 ==0)) //_LBB108_9
+{
+ r6 = r6 >> 2;
+ r8 = heap32[(r5+13)];
+ heap32[(r6+13)] = r8;
+}
+ heap32[(r5+13)] = 0;
+ r6 = heap32[(r1+23)];
+ heap32[(r5+14)] = r6;
+ r6 = heap32[(r1+23)];
+if(!(r6 ==0)) //_LBB108_11
+{
+ r6 = r6 >> 2;
+ heap32[(r6+13)] = r2;
+}
+ heap32[(r1+23)] = r2;
+ r6 = heap32[(r5+12)];
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r6;
+ _ZL10removeleafP6btDbvtP10btDbvtNode(i7);
+ r8 = heap32[(r1+2)];
+if(!(r8 ==0)) //_LBB108_13
+{
+ r9 = gNumAlignedFree;
+ r9 = r9 >> 2;
+ r10 = heap32[(r9)];
+ r10 = (r10 + 1)|0;
+ r8 = r8 >> 2;
+ heap32[(r9)] = r10;
+ r8 = heap32[(r8+-1)];
+ heap32[(g0)] = r8;
+ free(i7);
+}
+ heap32[(r1+2)] = r6;
+ r6 = heap32[(r1+4)];
+ r6 = (r6 + -1)|0;
+ heap32[(r1+4)] = r6;
+ r6 = heap32[(r1+12)];
+ f0 = heapFloat[(r5+4)];
+ f1 = heapFloat[(r5+5)];
+ f2 = heapFloat[(r5+6)];
+ f3 = heapFloat[(r5+7)];
+ f4 = heapFloat[(r5+8)];
+ f5 = heapFloat[(r5+9)];
+ f6 = heapFloat[(r5+10)];
+ f7 = heapFloat[(r5+11)];
+ if(r6 ==0) //_LBB108_15
+{
+ r6 = gNumAlignedAllocs;
+ r6 = r6 >> 2;
+ r8 = heap32[(r6)];
+ r8 = (r8 + 1)|0;
+ heap32[(r6)] = r8;
+ heap32[(g0)] = 63;
+ malloc(i7);
+ r6 = r_g0;
+ if(r6 !=0) //_LBB108_17
+{
+ r8 = 0;
+ r9 = (r6 + 4)|0;
+ r8 = (r8 - r9)|0;
+ r8 = r8 & 15;
+ r8 = (r6 + r8)|0;
+ r9 = (r8 + 4)|0;
+ r8 = r8 >> 2;
+ heap32[(r8)] = r6;
+ r6 = r9;
+}
+}
+else{
+ heap32[(r1+12)] = 0;
+}
+ r8 = r6 >> 2;
+ heap32[(r8+8)] = 0;
+ heap32[(r8+9)] = r2;
+ heap32[(r8+10)] = 0;
+ heapFloat[(r8)] = f0;
+ heapFloat[(r8+1)] = f1;
+ heapFloat[(r8+2)] = f2;
+ heapFloat[(r8+3)] = f3;
+ heapFloat[(r8+4)] = f4;
+ heapFloat[(r8+5)] = f5;
+ heapFloat[(r8+6)] = f6;
+ heapFloat[(r8+7)] = f7;
+ r2 = heap32[(r1+11)];
+ heap32[(g0)] = r4;
+ heap32[(g0+1)] = r2;
+ heap32[(g0+2)] = r6;
+ _ZL10insertleafP6btDbvtP10btDbvtNodeS2_(i7);
+ r2 = heap32[(r1+14)];
+ r2 = (r2 + 1)|0;
+ heap32[(r1+14)] = r2;
+ heap32[(r5+12)] = r6;
+ heap32[(r5+15)] = 2;
+ r2 = r7;
+if(!(r7 !=0)) //_LBB108_4
+{
+break _6;
+}
+}
+ r2 = heap32[(r1+14)];
+ r4 = 1;
+ heap32[(r1+31)] = r2;
+ heap8[r0+154] = r4;
+}
+ r2 = _ZTV18btDbvtTreeCollider;
+ r4 = sp + -32;
+ r2 = (r2 + 8)|0;
+ r5 = r4 >> 2;
+ heap32[(fp+-8)] = r2;
+ heap32[(r5+1)] = r0;
+ r5 = heapU8[r0+153];
+if(!(r5 ==0)) //_LBB108_23
+{
+ r5 = heap32[(r1+11)];
+ r6 = heap32[(r1+1)];
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r6;
+ heap32[(g0+2)] = r5;
+ heap32[(g0+3)] = r4;
+ _ZN6btDbvt24collideTTpersistentStackEPK10btDbvtNodeS2_RNS_8ICollideE(i7);
+ r5 = heapU8[r0+153];
+if(!(r5 ==0)) //_LBB108_23
+{
+ r5 = heap32[(r1+1)];
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r5;
+ heap32[(g0+2)] = r5;
+ heap32[(g0+3)] = r4;
+ _ZN6btDbvt24collideTTpersistentStackEPK10btDbvtNodeS2_RNS_8ICollideE(i7);
+}
+}
+ r3 = heap32[(fp+1)];
+ heap32[(fp+-8)] = r2;
+ r2 = heapU8[r0+154];
+_32: do {
+if(!(r2 ==0)) //_LBB108_40
+{
+ r2 = heap32[(r1+24)];
+ r4 = r2 >> 2;
+ r4 = heap32[(r4)];
+ r4 = r4 >> 2;
+ r4 = heap32[(r4+7)];
+ heap32[(g0)] = r2;
+ __FUNCTION_TABLE__[(r4)>>2](i7);
+ r2 = r_g0;
+ r4 = r2 >> 2;
+ r4 = heap32[(r4+1)];
+if(!(r4 <1)) //_LBB108_40
+{
+ r5 = heap32[(r1+29)];
+ r5 = (r5 * r4)|0;
+ r6 = heap32[(r1+30)];
+ r5 = (r5 / 100)|0;
+ r5 = r6 > r5 ? r6 : r5;
+ r5 = r4 < r5 ? r4 : r5;
+ if(r5 >0) //_LBB108_27
+{
+ r4 = 0;
+_37: while(true){
+ r6 = r2 >> 2;
+ r7 = heap32[(r1+36)];
+ r7 = (r7 + r4)|0;
+ r8 = heap32[(r6+1)];
+ r7 = (r7 % r8)|0;
+ r8 = heap32[(r6+3)];
+ r7 = r7 << 4;
+ r7 = (r8 + r7)|0;
+ r7 = r7 >> 2;
+ r8 = heap32[(r7+1)];
+ r7 = heap32[(r7)];
+ r9 = r8 >> 2;
+ r10 = r7 >> 2;
+ r9 = heap32[(r9+12)];
+ r10 = heap32[(r10+12)];
+ r10 = r10 >> 2;
+ r9 = r9 >> 2;
+ f0 = heapFloat[(r10)];
+ f1 = heapFloat[(r9+4)];
+ if(f0 >f1) //_LBB108_35
+{
+__label__ = 32;
+}
+else{
+ f0 = heapFloat[(r10+4)];
+ f1 = heapFloat[(r9)];
+ if(f0 <f1) //_LBB108_35
+{
+__label__ = 32;
+}
+else{
+ f0 = heapFloat[(r10+1)];
+ f1 = heapFloat[(r9+5)];
+ if(f0 >f1) //_LBB108_35
+{
+__label__ = 32;
+}
+else{
+ f0 = heapFloat[(r10+5)];
+ f1 = heapFloat[(r9+1)];
+ if(f0 <f1) //_LBB108_35
+{
+__label__ = 32;
+}
+else{
+ f0 = heapFloat[(r10+2)];
+ f1 = heapFloat[(r9+6)];
+ if(f0 >f1) //_LBB108_35
+{
+__label__ = 32;
+}
+else{
+ f0 = heapFloat[(r10+6)];
+ f1 = heapFloat[(r9+2)];
+ if(f0 <f1) //_LBB108_35
+{
+__label__ = 32;
+}
+else{
+__label__ = 33;
+}
+}
+}
+}
+}
+}
+if (__label__ == 32){
+ r9 = heap32[(r1+24)];
+ r10 = r9 >> 2;
+ r10 = heap32[(r10)];
+ r10 = r10 >> 2;
+ r10 = heap32[(r10+3)];
+ heap32[(g0)] = r9;
+ heap32[(g0+1)] = r7;
+ heap32[(g0+2)] = r8;
+ heap32[(g0+3)] = r3;
+ r5 = (r5 + -1)|0;
+ r4 = (r4 + -1)|0;
+ __FUNCTION_TABLE__[(r10)>>2](i7);
+}
+ r4 = (r4 + 1)|0;
+if(!(r4 <r5)) //_LBB108_28
+{
+break _37;
+}
+}
+ r4 = heap32[(r6+1)];
+ if(r4 <1) //_LBB108_39
+{
+ heap32[(r1+36)] = 0;
+break _32;
+}
+}
+ r2 = heap32[(r1+36)];
+ r2 = (r2 + r5)|0;
+ r2 = (r2 % r4)|0;
+ heap32[(r1+36)] = r2;
+}
+}
+} while(0);
+ r2 = heap32[(r1+35)];
+ r2 = (r2 + 1)|0;
+ heap32[(r1+35)] = r2;
+ r2 = 0;
+ heap32[(r1+30)] = 1;
+ heap8[r0+154] = r2;
+ r0 = heap32[(r1+32)];
+ if(r0 ==0) //_LBB108_42
+{
+ heap32[(r1+34)] = 0;
+ r4 = heap32[(r1+33)];
+}
+else{
+ r4 = heap32[(r1+33)];
+ f0 = uint(r4); //fuitos r4, f0
+ f1 = uint(r0); //fuitos r0, f1
+ f0 = f0/f1;
+ heapFloat[(r1+34)] = f0;
+}
+ r4 = r4 >>> 1;
+ r0 = r0 >>> 1;
+ heap32[(r1+33)] = r4;
+ heap32[(r1+32)] = r0;
+ r0 = heap32[(r1+24)];
+ r4 = r0 >> 2;
+ r4 = heap32[(r4)];
+ r4 = r4 >> 2;
+ r4 = heap32[(r4+14)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r4)>>2](i7);
+ r0 = r_g0;
+if(!(r0 ==0)) //_LBB108_65
+{
+ r0 = heap32[(r1+24)];
+ r4 = r0 >> 2;
+ r4 = heap32[(r4)];
+ r4 = r4 >> 2;
+ r4 = heap32[(r4+7)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r4)>>2](i7);
+ r0 = r_g0;
+ r4 = r0 >> 2;
+ r4 = heap32[(r4+1)];
+if(!(r4 <2)) //_LBB108_46
+{
+ r4 = (r4 + -1)|0;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = 0;
+ heap32[(g0+2)] = r4;
+ _ZN20btAlignedObjectArrayI16btBroadphasePairE17quickSortInternalI29btBroadphasePairSortPredicateEEvT_ii(i7);
+}
+ r4 = r2;
+ r5 = r2;
+ r6 = r2;
+ r7 = r2;
+_61: while(true){
+ r8 = r0 >> 2;
+ r9 = heap32[(r8+1)];
+ if(r9 >r7) //_LBB108_47
+{
+ r8 = heap32[(r8+3)];
+ r9 = r7 << 4;
+ r9 = (r8 + r9)|0;
+ r9 = r9 >> 2;
+ r10 = heap32[(r9)];
+ r11 = r7 << 2;
+ r12 = heap32[(r9+1)];
+ if(r10 !=r4) //_LBB108_49
+{
+__label__ = 46;
+}
+else{
+ if(r12 ==r5) //_LBB108_56
+{
+ r4 = heap32[(r9+2)];
+ if(r4 ==0) //_LBB108_58
+{
+__label__ = 54;
+}
+else{
+__label__ = 53;
+break _61;
+}
+}
+else{
+__label__ = 46;
+}
+}
+if (__label__ == 46){
+ r4 = r12 >> 2;
+ r5 = r10 >> 2;
+ r4 = heap32[(r4+12)];
+ r5 = heap32[(r5+12)];
+ r5 = r5 >> 2;
+ r4 = r4 >> 2;
+ f0 = heapFloat[(r5)];
+ f1 = heapFloat[(r4+4)];
+ if(f0 >f1) //_LBB108_58
+{
+__label__ = 54;
+}
+else{
+ f0 = heapFloat[(r5+4)];
+ f1 = heapFloat[(r4)];
+ if(f0 <f1) //_LBB108_58
+{
+__label__ = 54;
+}
+else{
+ f0 = heapFloat[(r5+1)];
+ f1 = heapFloat[(r4+5)];
+ if(f0 >f1) //_LBB108_58
+{
+__label__ = 54;
+}
+else{
+ f0 = heapFloat[(r5+5)];
+ f1 = heapFloat[(r4+1)];
+ if(f0 <f1) //_LBB108_58
+{
+__label__ = 54;
+}
+else{
+ f0 = heapFloat[(r5+2)];
+ f1 = heapFloat[(r4+6)];
+ if(f0 >f1) //_LBB108_58
+{
+__label__ = 54;
+}
+else{
+ f0 = heapFloat[(r5+6)];
+ f1 = heapFloat[(r4+2)];
+ if(f0 <f1) //_LBB108_58
+{
+__label__ = 54;
+}
+else{
+__label__ = 55;
+}
+}
+}
+}
+}
+}
+}
+if (__label__ == 54){
+ r4 = heap32[(r1+24)];
+ r5 = r4 >> 2;
+ r5 = heap32[(r5)];
+ r5 = r5 >> 2;
+ r5 = heap32[(r5+8)];
+ r9 = (r8 + r2)|0;
+ r11 = r11 << 2;
+ heap32[(g0)] = r4;
+ heap32[(g0+1)] = r9;
+ heap32[(g0+2)] = r3;
+ r4 = (r8 + r11)|0;
+ r4 = r4 >> 2;
+ __FUNCTION_TABLE__[(r5)>>2](i7);
+ r6 = (r6 + 1)|0;
+ heap32[(r4)] = 0;
+ heap32[(r4+1)] = 0;
+}
+ r7 = (r7 + 1)|0;
+ r2 = (r2 + 16)|0;
+ r4 = r10;
+ r5 = r12;
+}
+else{
+__label__ = 57;
+break _61;
+}
+}
+switch(__label__ ){//multiple entries
+case 57:
+ if(r9 >1) //_LBB108_63
+{
+ r9 = (r9 + -1)|0;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = 0;
+ heap32[(g0+2)] = r9;
+ _ZN20btAlignedObjectArrayI16btBroadphasePairE17quickSortInternalI29btBroadphasePairSortPredicateEEvT_ii(i7);
+ r9 = heap32[(r8+1)];
+}
+ r1 = sp + -16;
+ r2 = r1 >> 2;
+ heap32[(fp+-4)] = 0;
+ heap32[(r2+1)] = 0;
+ heap32[(r2+2)] = 0;
+ heap32[(r2+3)] = 0;
+ r2 = (r9 - r6)|0;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r2;
+ heap32[(g0+2)] = r1;
+ _ZN20btAlignedObjectArrayI16btBroadphasePairE6resizeEiRKS0_(i7);
+break;
+case 53:
+ r8 = _2E_str314;
+ r0 = _2E_str18;
+ heap32[(g0)] = r8;
+ heap32[(g0+1)] = r0;
+ heap32[(g0+2)] = 469;
+ _assert(i7);
+break;
+}
+}
+ return;
+}
+
+function _ZN16btDbvtBroadphase7setAabbEP17btBroadphaseProxyRK9btVector3S4_P12btDispatcher(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+ var f10;
+var __label__ = 0;
+ i7 = sp + -88;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+2)];
+ r0 = r0 >> 2;
+ f0 = heapFloat[(r0)];
+ r1 = sp + -32;
+ heapFloat[(fp+-8)] = f0;
+ f1 = heapFloat[(r0+1)];
+ r2 = r1 >> 2;
+ heapFloat[(r2+1)] = f1;
+ f2 = heapFloat[(r0+2)];
+ heapFloat[(r2+2)] = f2;
+ f3 = heapFloat[(r0+3)];
+ r3 = heap32[(fp+3)];
+ r3 = r3 >> 2;
+ heapFloat[(r2+3)] = f3;
+ f4 = heapFloat[(r3)];
+ heapFloat[(r2+4)] = f4;
+ f5 = heapFloat[(r3+1)];
+ heapFloat[(r2+5)] = f5;
+ f6 = heapFloat[(r3+2)];
+ heapFloat[(r2+6)] = f6;
+ f7 = heapFloat[(r3+3)];
+ r4 = heap32[(fp+1)];
+ r5 = heap32[(fp)];
+ r6 = r4 >> 2;
+ heapFloat[(r2+7)] = f7;
+ r7 = heap32[(r6+15)];
+_1: do {
+ if(r7 !=2) //_LBB109_9
+{
+ r2 = r5 >> 2;
+ r8 = heap32[(r2+32)];
+ r8 = (r8 + 1)|0;
+ heap32[(r2+32)] = r8;
+ r8 = heap32[(r6+12)];
+ r7 = r8 >> 2;
+ f8 = heapFloat[(r7)];
+if(!(f8 >f4)) //_LBB109_24
+{
+ f8 = heapFloat[(r7+4)];
+if(!(f8 <f0)) //_LBB109_24
+{
+ f8 = heapFloat[(r7+1)];
+if(!(f8 >f5)) //_LBB109_24
+{
+ f8 = heapFloat[(r7+5)];
+if(!(f8 <f1)) //_LBB109_24
+{
+ f8 = heapFloat[(r7+2)];
+if(!(f8 >f6)) //_LBB109_24
+{
+ f8 = heapFloat[(r7+6)];
+if(!(f8 <f2)) //_LBB109_24
+{
+ f0 = heapFloat[(r6+4)];
+ f1 = heapFloat[(r6+8)];
+ f1 = f1-f0;
+ f2 = 0.5;
+ f3 = heapFloat[(r6+5)];
+ f4 = heapFloat[(r6+9)];
+ f4 = f4-f3;
+ f5 = heapFloat[(r0+1)];
+ f6 = heapFloat[(r0)];
+ f1 = f1*f2;
+ f7 = heapFloat[(r2+25)];
+ f8 = heapFloat[(r0+2)];
+ f9 = heapFloat[(r6+6)];
+ f10 = heapFloat[(r6+10)];
+ r7 = sp + -48;
+ f10 = f10-f9;
+ f4 = f4*f2;
+ f1 = f1*f7;
+ f2 = f10*f2;
+ f4 = f4*f7;
+ r9 = r7 >> 2;
+ heapFloat[(fp+-12)] = f1;
+ f2 = f2*f7;
+ heapFloat[(r9+1)] = f4;
+ heapFloat[(r9+2)] = f2;
+ heap32[(r9+3)] = 0;
+ f0 = f6-f0;
+ f6 = 0;
+if(!(f0 >=f6)) //_LBB109_17
+{
+ f0 = -f1;
+ heapFloat[(fp+-12)] = f0;
+}
+ f0 = f5-f3;
+if(!(f0 >=f6)) //_LBB109_19
+{
+ f0 = -f4;
+ heapFloat[(r9+1)] = f0;
+}
+ f0 = f8-f9;
+if(!(f0 >=f6)) //_LBB109_21
+{
+ f0 = -f2;
+ heapFloat[(r9+2)] = f0;
+}
+ r9 = (r5 + 4)|0;
+ heap32[(g0)] = r9;
+ heap32[(g0+1)] = r8;
+ heap32[(g0+2)] = r1;
+ heap32[(g0+3)] = r7;
+ heap32[(g0+4)] = 1028443341;
+ _ZN6btDbvt6updateEP10btDbvtNodeR12btDbvtAabbMmRK9btVector3f(i7);
+ r8 = r_g0;
+ if(r8 !=0) //_LBB109_23
+{
+ r7 = heap32[(r2+33)];
+ r8 = 1;
+ r7 = (r7 + 1)|0;
+ heap32[(r2+33)] = r7;
+break _1;
+}
+else{
+ r8 = 0;
+break _1;
+}
+}
+}
+}
+}
+}
+}
+ r1 = (r5 + 4)|0;
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r8;
+ _ZL10removeleafP6btDbvtP10btDbvtNode(i7);
+ r9 = r_g0;
+_23: do {
+ if(r9 !=0) //_LBB109_26
+{
+ r11 = heap32[(r2+3)];
+ if(r11 <0) //_LBB109_31
+{
+ r10 = heap32[(r2+1)];
+}
+else{
+ r12 = -1;
+_28: while(true){
+ r10 = r9;
+ r12 = (r12 + 1)|0;
+ if(r11 >r12) //_LBB109_30
+{
+ r9 = r10 >> 2;
+ r9 = heap32[(r9+8)];
+ if(r9 ==0) //_LBB109_29
+{
+break _23;
+}
+}
+else{
+break _23;
+}
+}
+}
+}
+else{
+ r10 = 0;
+}
+} while(0);
+ heapFloat[(r7)] = f0;
+ heapFloat[(r7+1)] = f1;
+ heapFloat[(r7+2)] = f2;
+ heapFloat[(r7+3)] = f3;
+ heapFloat[(r7+4)] = f4;
+ heapFloat[(r7+5)] = f5;
+ heapFloat[(r7+6)] = f6;
+ heapFloat[(r7+7)] = f7;
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r10;
+ heap32[(g0+2)] = r8;
+ _ZL10insertleafP6btDbvtP10btDbvtNodeS2_(i7);
+ r1 = heap32[(r2+33)];
+ r8 = 1;
+ r1 = (r1 + 1)|0;
+ heap32[(r2+33)] = r1;
+}
+else{
+ r1 = heap32[(r6+12)];
+ r7 = (r5 + 44)|0;
+ heap32[(g0)] = r7;
+ heap32[(g0+1)] = r1;
+ r7 = r5 >> 2;
+ _ZL10removeleafP6btDbvtP10btDbvtNode(i7);
+ r8 = heap32[(r7+12)];
+if(!(r8 ==0)) //_LBB109_3
+{
+ r9 = gNumAlignedFree;
+ r9 = r9 >> 2;
+ r10 = heap32[(r9)];
+ r10 = (r10 + 1)|0;
+ r8 = r8 >> 2;
+ heap32[(r9)] = r10;
+ r8 = heap32[(r8+-1)];
+ heap32[(g0)] = r8;
+ free(i7);
+}
+ heap32[(r7+12)] = r1;
+ r1 = heap32[(r7+14)];
+ r1 = (r1 + -1)|0;
+ heap32[(r7+14)] = r1;
+ r1 = heap32[(r7+2)];
+ r8 = (r5 + 4)|0;
+ if(r1 ==0) //_LBB109_5
+{
+ r1 = gNumAlignedAllocs;
+ r1 = r1 >> 2;
+ r9 = heap32[(r1)];
+ r9 = (r9 + 1)|0;
+ heap32[(r1)] = r9;
+ heap32[(g0)] = 63;
+ malloc(i7);
+ r1 = r_g0;
+ if(r1 !=0) //_LBB109_7
+{
+ r9 = 0;
+ r10 = (r1 + 4)|0;
+ r9 = (r9 - r10)|0;
+ r9 = r9 & 15;
+ r9 = (r1 + r9)|0;
+ r10 = (r9 + 4)|0;
+ r9 = r9 >> 2;
+ heap32[(r9)] = r1;
+ r1 = r10;
+}
+}
+else{
+ heap32[(r7+2)] = 0;
+}
+ r9 = r1 >> 2;
+ heap32[(r9+8)] = 0;
+ heap32[(r9+9)] = r4;
+ heap32[(r9+10)] = 0;
+ heap32[(r9)] = heap32[(fp+-8)];
+ heap32[(r9+1)] = heap32[(r2+1)];
+ heap32[(r9+2)] = heap32[(r2+2)];
+ heap32[(r9+3)] = heap32[(r2+3)];
+ heapFloat[(r9+4)] = f4;
+ heapFloat[(r9+5)] = f5;
+ heapFloat[(r9+6)] = f6;
+ heapFloat[(r9+7)] = f7;
+ r2 = heap32[(r7+1)];
+ heap32[(g0)] = r8;
+ heap32[(g0+1)] = r2;
+ heap32[(g0+2)] = r1;
+ _ZL10insertleafP6btDbvtP10btDbvtNodeS2_(i7);
+ r2 = heap32[(r7+4)];
+ r2 = (r2 + 1)|0;
+ r8 = 1;
+ heap32[(r7+4)] = r2;
+ heap32[(r6+12)] = r1;
+}
+} while(0);
+ r1 = heap32[(r6+13)];
+ r2 = heap32[(r6+14)];
+ if(r1 ==0) //_LBB109_35
+{
+ r1 = heap32[(r6+15)];
+ r1 = r1 << 2;
+ r1 = (r5 + r1)|0;
+ r1 = r1 >> 2;
+ heap32[(r1+21)] = r2;
+}
+else{
+ r1 = r1 >> 2;
+ heap32[(r1+14)] = r2;
+}
+ r1 = heap32[(r6+14)];
+if(!(r1 ==0)) //_LBB109_38
+{
+ r1 = r1 >> 2;
+ r2 = heap32[(r6+13)];
+ heap32[(r1+13)] = r2;
+}
+ heap32[(r6+4)] = heap32[(r0)];
+ heap32[(r6+5)] = heap32[(r0+1)];
+ heap32[(r6+6)] = heap32[(r0+2)];
+ heap32[(r6+7)] = heap32[(r0+3)];
+ heap32[(r6+8)] = heap32[(r3)];
+ heap32[(r6+9)] = heap32[(r3+1)];
+ heap32[(r6+10)] = heap32[(r3+2)];
+ r0 = r5 >> 2;
+ heap32[(r6+11)] = heap32[(r3+3)];
+ r1 = heap32[(r0+26)];
+ heap32[(r6+15)] = r1;
+ r1 = heap32[(r0+26)];
+ r1 = r1 << 2;
+ r1 = (r5 + r1)|0;
+ r1 = r1 >> 2;
+ heap32[(r6+13)] = 0;
+ r2 = heap32[(r1+21)];
+ heap32[(r6+14)] = r2;
+ r2 = heap32[(r1+21)];
+if(!(r2 ==0)) //_LBB109_40
+{
+ r2 = r2 >> 2;
+ heap32[(r2+13)] = r4;
+}
+ r2 = r8 & 1;
+ heap32[(r1+21)] = r4;
+if(!(r2 ==0)) //_LBB109_43
+{
+ r1 = 1;
+ heap8[r5+154] = r1;
+ r1 = heapU8[r5+153];
+if(!(r1 !=0)) //_LBB109_43
+{
+ r1 = _ZTV18btDbvtTreeCollider;
+ r2 = sp + -64;
+ r1 = (r1 + 8)|0;
+ r3 = r2 >> 2;
+ heap32[(fp+-16)] = r1;
+ heap32[(r3+1)] = r5;
+ r1 = heap32[(r6+12)];
+ r3 = heap32[(r0+11)];
+ r4 = (r5 + 44)|0;
+ heap32[(g0)] = r4;
+ heap32[(g0+1)] = r3;
+ heap32[(g0+2)] = r1;
+ heap32[(g0+3)] = r2;
+ _ZN6btDbvt24collideTTpersistentStackEPK10btDbvtNodeS2_RNS_8ICollideE(i7);
+ r1 = heap32[(r6+12)];
+ r0 = heap32[(r0+1)];
+ r3 = (r5 + 4)|0;
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r0;
+ heap32[(g0+2)] = r1;
+ heap32[(g0+3)] = r2;
+ _ZN6btDbvt24collideTTpersistentStackEPK10btDbvtNodeS2_RNS_8ICollideE(i7);
+}
+}
+ return;
+}
+
+function _ZN16btDbvtBroadphaseD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV16btDbvtBroadphase;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ r1 = heapU8[r0+152];
+if(!(r1 ==0)) //_LBB110_3
+{
+ r1 = heap32[(r2+24)];
+ r3 = r1 >> 2;
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3)];
+ heap32[(g0)] = r1;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ r1 = heap32[(r2+24)];
+if(!(r1 ==0)) //_LBB110_3
+{
+ r2 = gNumAlignedFree;
+ r2 = r2 >> 2;
+ r3 = heap32[(r2)];
+ r3 = (r3 + 1)|0;
+ r1 = r1 >> 2;
+ heap32[(r2)] = r3;
+ r1 = heap32[(r1+-1)];
+ heap32[(g0)] = r1;
+ free(i7);
+}
+}
+ r1 = (r0 + 4)|0;
+if(!(r1 ==0)) //_LBB110_15
+{
+ r2 = (r1 + 80)|0;
+if(!(r2 ==r1)) //_LBB110_15
+{
+ r1 = (r0 + 44)|0;
+ r2 = 0;
+_8: while(true){
+ r3 = (r0 + r2)|0;
+ r4 = r3 >> 2;
+ r5 = heap32[(r4+11)];
+if(!(r5 ==0)) //_LBB110_8
+{
+ r6 = (r1 + r2)|0;
+ heap32[(g0)] = r6;
+ heap32[(g0+1)] = r5;
+ _ZL17recursedeletenodeP6btDbvtP10btDbvtNode(i7);
+}
+ r5 = heap32[(r4+12)];
+if(!(r5 ==0)) //_LBB110_10
+{
+ r6 = gNumAlignedFree;
+ r6 = r6 >> 2;
+ r7 = heap32[(r6)];
+ r7 = (r7 + 1)|0;
+ r5 = r5 >> 2;
+ heap32[(r6)] = r7;
+ r5 = heap32[(r5+-1)];
+ heap32[(g0)] = r5;
+ free(i7);
+}
+ heap32[(r4+12)] = 0;
+ heap32[(r4+13)] = -1;
+ r5 = heap32[(r4+19)];
+if(!(r5 ==0)) //_LBB110_14
+{
+ r6 = heapU8[r3+80];
+if(!(r6 ==0)) //_LBB110_13
+{
+ r6 = gNumAlignedFree;
+ r6 = r6 >> 2;
+ r7 = heap32[(r6)];
+ r7 = (r7 + 1)|0;
+ r5 = r5 >> 2;
+ heap32[(r6)] = r7;
+ r5 = heap32[(r5+-1)];
+ heap32[(g0)] = r5;
+ free(i7);
+}
+ heap32[(r4+19)] = 0;
+}
+ r5 = 1;
+ heap32[(r4+15)] = 0;
+ heap8[r3+80] = r5;
+ heap32[(r4+19)] = 0;
+ r2 = (r2 + -40)|0;
+ heap32[(r4+17)] = 0;
+ heap32[(r4+18)] = 0;
+ if(r2 !=-80) //_LBB110_6
+{
+continue _8;
+}
+else{
+break _8;
+}
+}
+}
+}
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZN16btDbvtBroadphaseD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV16btDbvtBroadphase;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ r1 = heapU8[r0+152];
+if(!(r1 ==0)) //_LBB111_3
+{
+ r1 = heap32[(r2+24)];
+ r3 = r1 >> 2;
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3)];
+ heap32[(g0)] = r1;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ r1 = heap32[(r2+24)];
+if(!(r1 ==0)) //_LBB111_3
+{
+ r2 = gNumAlignedFree;
+ r2 = r2 >> 2;
+ r3 = heap32[(r2)];
+ r3 = (r3 + 1)|0;
+ r1 = r1 >> 2;
+ heap32[(r2)] = r3;
+ r1 = heap32[(r1+-1)];
+ heap32[(g0)] = r1;
+ free(i7);
+}
+}
+ r1 = (r0 + 4)|0;
+if(!(r1 ==0)) //_LBB111_15
+{
+ r2 = (r1 + 80)|0;
+if(!(r2 ==r1)) //_LBB111_15
+{
+ r1 = (r0 + 44)|0;
+ r2 = 0;
+_8: while(true){
+ r3 = (r0 + r2)|0;
+ r4 = r3 >> 2;
+ r5 = heap32[(r4+11)];
+if(!(r5 ==0)) //_LBB111_8
+{
+ r6 = (r1 + r2)|0;
+ heap32[(g0)] = r6;
+ heap32[(g0+1)] = r5;
+ _ZL17recursedeletenodeP6btDbvtP10btDbvtNode(i7);
+}
+ r5 = heap32[(r4+12)];
+if(!(r5 ==0)) //_LBB111_10
+{
+ r6 = gNumAlignedFree;
+ r6 = r6 >> 2;
+ r7 = heap32[(r6)];
+ r7 = (r7 + 1)|0;
+ r5 = r5 >> 2;
+ heap32[(r6)] = r7;
+ r5 = heap32[(r5+-1)];
+ heap32[(g0)] = r5;
+ free(i7);
+}
+ heap32[(r4+12)] = 0;
+ heap32[(r4+13)] = -1;
+ r5 = heap32[(r4+19)];
+if(!(r5 ==0)) //_LBB111_14
+{
+ r6 = heapU8[r3+80];
+if(!(r6 ==0)) //_LBB111_13
+{
+ r6 = gNumAlignedFree;
+ r6 = r6 >> 2;
+ r7 = heap32[(r6)];
+ r7 = (r7 + 1)|0;
+ r5 = r5 >> 2;
+ heap32[(r6)] = r7;
+ r5 = heap32[(r5+-1)];
+ heap32[(g0)] = r5;
+ free(i7);
+}
+ heap32[(r4+19)] = 0;
+}
+ r5 = 1;
+ heap32[(r4+15)] = 0;
+ heap8[r3+80] = r5;
+ heap32[(r4+19)] = 0;
+ r2 = (r2 + -40)|0;
+ heap32[(r4+17)] = 0;
+ heap32[(r4+18)] = 0;
+ if(r2 !=-80) //_LBB111_6
+{
+continue _8;
+}
+else{
+break _8;
+}
+}
+}
+}
+ return;
+}
+
+function _ZN12btDispatcherD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV12btDispatcher;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZN12btDispatcherD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV12btDispatcher;
+ r0 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r0)] = r1;
+ return;
+}
+
+function _ZNK14btQuantizedBvh8quantizeEPtRK9btVector3i(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = heapU8[r0+60];
+ if(r1 !=0) //_LBB114_2
+{
+ r1 = heap32[(fp+2)];
+ r1 = r1 >> 2;
+ f0 = heapFloat[(r1)];
+ r0 = r0 >> 2;
+ f1 = heapFloat[(r0+5)];
+ if(f0 <=f1) //_LBB114_4
+{
+ f1 = heapFloat[(r1+1)];
+ f2 = heapFloat[(r0+6)];
+ if(f1 <=f2) //_LBB114_6
+{
+ f2 = heapFloat[(r1+2)];
+ f3 = heapFloat[(r0+7)];
+ if(f2 <=f3) //_LBB114_8
+{
+ f3 = heapFloat[(r0+1)];
+ if(f0 >=f3) //_LBB114_10
+{
+ f4 = heapFloat[(r0+2)];
+ if(f1 >=f4) //_LBB114_12
+{
+ f5 = heapFloat[(r0+3)];
+ if(f2 >=f5) //_LBB114_14
+{
+ r1 = heap32[(fp+1)];
+ r2 = heap32[(fp+3)];
+ f2 = f2-f5;
+ f5 = heapFloat[(r0+11)];
+ f1 = f1-f4;
+ f4 = heapFloat[(r0+10)];
+ f0 = f0-f3;
+ f3 = heapFloat[(r0+9)];
+ f2 = f2*f5;
+ f1 = f1*f4;
+ f0 = f0*f3;
+ if(r2 ==0) //_LBB114_16
+{
+ r0 = Math.floor(f0);
+ r2 = Math.floor(f1);
+ r0 = r0 & 65534;
+ r3 = Math.floor(f2);
+ r2 = r2 & 65534;
+ heap16[(r1)>>1] = r0;
+ r0 = r3 & 65534;
+}
+else{
+ f3 = 1;
+ f0 = f0+f3;
+ f1 = f1+f3;
+ r0 = Math.floor(f0);
+ f0 = f2+f3;
+ r2 = Math.floor(f1);
+ r0 = r0 | 1;
+ r3 = Math.floor(f0);
+ r2 = r2 | 1;
+ heap16[(r1)>>1] = r0;
+ r0 = r3 | 1;
+}
+ heap16[(r1+2)>>1] = r2;
+ heap16[(r1+4)>>1] = r0;
+ return;
+}
+else{
+ r0 = _2E_str9;
+ r1 = _2E_str313;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 361;
+ _assert(i7);
+}
+}
+else{
+ r0 = _2E_str820;
+ r1 = _2E_str313;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 360;
+ _assert(i7);
+}
+}
+else{
+ r0 = _2E_str717;
+ r1 = _2E_str313;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 359;
+ _assert(i7);
+}
+}
+else{
+ r0 = _2E_str616;
+ r1 = _2E_str313;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 357;
+ _assert(i7);
+}
+}
+else{
+ r0 = _2E_str515;
+ r1 = _2E_str313;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 356;
+ _assert(i7);
+}
+}
+else{
+ r0 = _2E_str414;
+ r1 = _2E_str313;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 355;
+ _assert(i7);
+}
+}
+else{
+ r0 = _2E_str212;
+ r1 = _2E_str313;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 353;
+ _assert(i7);
+}
+}
+
+function _ZN20btAlignedObjectArrayI18btQuantizedBvhNodeE7reserveEi(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = heap32[(fp+1)];
+ r2 = r0 >> 2;
+ r3 = heap32[(r2+2)];
+if(!(r3 >=r1)) //_LBB115_16
+{
+ if(r1 !=0) //_LBB115_3
+{
+ r3 = gNumAlignedAllocs;
+ r3 = r3 >> 2;
+ r4 = heap32[(r3)];
+ r5 = r1 << 4;
+ r4 = (r4 + 1)|0;
+ r5 = r5 | 3;
+ heap32[(r3)] = r4;
+ r3 = (r5 + 16)|0;
+ heap32[(g0)] = r3;
+ malloc(i7);
+ r3 = r_g0;
+ if(r3 !=0) //_LBB115_5
+{
+ r4 = 0;
+ r5 = (r3 + 4)|0;
+ r4 = (r4 - r5)|0;
+ r4 = r4 & 15;
+ r4 = (r3 + r4)|0;
+ r5 = (r4 + 4)|0;
+ r4 = r4 >> 2;
+ heap32[(r4)] = r3;
+ r3 = r5;
+}
+}
+else{
+ r3 = 0;
+}
+ r4 = heap32[(r2+1)];
+ r5 = (r0 + 12)|0;
+ if(r4 <1) //_LBB115_8
+{
+ r4 = r5 >> 2;
+ r7 = heap32[(r4)];
+}
+else{
+ r6 = 0;
+_11: while(true){
+ r7 = r5 >> 2;
+ r7 = heap32[(r7)];
+ r8 = r6 << 4;
+ r9 = heapU16[(r7+r8)>>1];
+ r10 = (r7 + r8)|0;
+ heap16[(r3+r8)>>1] = r9;
+ r8 = (r3 + r8)|0;
+ r9 = heapU16[(r10+2)>>1];
+ heap16[(r8+2)>>1] = r9;
+ r9 = heapU16[(r10+4)>>1];
+ heap16[(r8+4)>>1] = r9;
+ r9 = heapU16[(r10+6)>>1];
+ heap16[(r8+6)>>1] = r9;
+ r9 = heapU16[(r10+8)>>1];
+ heap16[(r8+8)>>1] = r9;
+ r9 = heapU16[(r10+10)>>1];
+ r10 = r10 >> 2;
+ heap16[(r8+10)>>1] = r9;
+ r6 = (r6 + 1)|0;
+ r8 = r8 >> 2;
+ r9 = heap32[(r10+3)];
+ heap32[(r8+3)] = r9;
+if(!(r4 !=r6)) //_LBB115_9
+{
+break _11;
+}
+}
+ r5 = (r0 + 12)|0;
+}
+if(!(r7 ==0)) //_LBB115_15
+{
+ r4 = heapU8[r0+16];
+if(!(r4 ==0)) //_LBB115_14
+{
+ r4 = gNumAlignedFree;
+ r4 = r4 >> 2;
+ r6 = heap32[(r4)];
+ r6 = (r6 + 1)|0;
+ r7 = r7 >> 2;
+ heap32[(r4)] = r6;
+ r4 = heap32[(r7+-1)];
+ heap32[(g0)] = r4;
+ free(i7);
+}
+ r4 = r5 >> 2;
+ heap32[(r4)] = 0;
+}
+ r4 = 1;
+ r5 = r5 >> 2;
+ heap8[r0+16] = r4;
+ heap32[(r5)] = r3;
+ heap32[(r2+2)] = r1;
+}
+ return;
+}
+
+function _ZN28btHashedOverlappingPairCache23getOverlappingPairArrayEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = (r0 + 4)|0;
+ r_g0 = r0;
+ return;
+}
+
+function _ZN28btHashedOverlappingPairCache24setOverlapFilterCallbackEP23btOverlapFilterCallback(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r1 = heap32[(fp+1)];
+ heap32[(r0+6)] = r1;
+ return;
+}
+
+function _ZN28btHashedOverlappingPairCache18hasDeferredRemovalEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = 0;
+ r_g0 = r0;
+ return;
+}
+
+function _ZN28btHashedOverlappingPairCache28setInternalGhostPairCallbackEP25btOverlappingPairCallback(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r1 = heap32[(fp+1)];
+ heap32[(r0+18)] = r1;
+ return;
+}
+
+function _ZN28btHashedOverlappingPairCache20cleanOverlappingPairER16btBroadphasePairP12btDispatcher(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ r0 = r0 >> 2;
+ r1 = heap32[(r0+2)];
+if(!(r1 ==0)) //_LBB120_2
+{
+ r2 = heap32[(fp+2)];
+ r3 = r1 >> 2;
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3)];
+ heap32[(g0)] = r1;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ r1 = r2 >> 2;
+ r1 = heap32[(r1)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+13)];
+ r3 = heap32[(r0+2)];
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = r3;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+ heap32[(r0+2)] = 0;
+}
+ return;
+}
+
+function _ZZN28btHashedOverlappingPairCache19cleanProxyFromPairsEP17btBroadphaseProxyP12btDispatcherEN17CleanPairCallbackD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTVZN28btHashedOverlappingPairCache19cleanProxyFromPairsEP17btBroadphaseProxyP12btDispatcherE17CleanPairCallback;
+ r0 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r0)] = r1;
+ return;
+}
+
+function _ZZN28btHashedOverlappingPairCache19cleanProxyFromPairsEP17btBroadphaseProxyP12btDispatcherEN17CleanPairCallbackD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTVZN28btHashedOverlappingPairCache19cleanProxyFromPairsEP17btBroadphaseProxyP12btDispatcherE17CleanPairCallback;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZZN28btHashedOverlappingPairCache19cleanProxyFromPairsEP17btBroadphaseProxyP12btDispatcherEN17CleanPairCallback14processOverlapER16btBroadphasePair(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r1 = heap32[(fp+1)];
+ r2 = heap32[(r0+1)];
+ r3 = r1 >> 2;
+ r4 = heap32[(r3)];
+ if(r4 ==r2) //_LBB123_2
+{
+__label__ = 2;
+}
+else{
+ r3 = heap32[(r3+1)];
+ if(r3 !=r2) //_LBB123_3
+{
+__label__ = 3;
+}
+else{
+__label__ = 2;
+}
+}
+if (__label__ == 2){
+ r2 = heap32[(r0+2)];
+ r3 = r2 >> 2;
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3+8)];
+ r0 = heap32[(r0+3)];
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = r0;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+}
+ r0 = 0;
+ r_g0 = r0;
+ return;
+}
+
+function _ZZN28btHashedOverlappingPairCache37removeOverlappingPairsContainingProxyEP17btBroadphaseProxyP12btDispatcherEN18RemovePairCallbackD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTVZN28btHashedOverlappingPairCache37removeOverlappingPairsContainingProxyEP17btBroadphaseProxyP12btDispatcherE18RemovePairCallback;
+ r0 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r0)] = r1;
+ return;
+}
+
+function _ZZN28btHashedOverlappingPairCache37removeOverlappingPairsContainingProxyEP17btBroadphaseProxyP12btDispatcherEN18RemovePairCallbackD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTVZN28btHashedOverlappingPairCache37removeOverlappingPairsContainingProxyEP17btBroadphaseProxyP12btDispatcherE18RemovePairCallback;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZZN28btHashedOverlappingPairCache37removeOverlappingPairsContainingProxyEP17btBroadphaseProxyP12btDispatcherEN18RemovePairCallback14processOverlapER16btBroadphasePair(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r1 = heap32[(fp+1)];
+ r0 = heap32[(r0+1)];
+ r1 = r1 >> 2;
+ r2 = heap32[(r1)];
+ if(r2 ==r0) //_LBB126_2
+{
+ r0 = 1;
+ r_g0 = r0;
+ return;
+}
+else{
+ r1 = heap32[(r1+1)];
+ r0 = r1 == r0;
+ r0 = r0 & 1;
+ r_g0 = r0;
+ return;
+}
+}
+
+function _ZN28btHashedOverlappingPairCache26getOverlappingPairArrayPtrEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r0 = heap32[(r0+4)];
+ r_g0 = r0;
+ return;
+}
+
+function _ZNK28btHashedOverlappingPairCache26getOverlappingPairArrayPtrEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r0 = heap32[(r0+4)];
+ r_g0 = r0;
+ return;
+}
+
+function _ZNK28btHashedOverlappingPairCache22getNumOverlappingPairsEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r0 = heap32[(r0+2)];
+ r_g0 = r0;
+ return;
+}
+
+function _ZN28btHashedOverlappingPairCache26processAllOverlappingPairsEP17btOverlapCallbackP12btDispatcher(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = heap32[(fp+1)];
+ r2 = heap32[(fp+2)];
+ r3 = 0;
+ r4 = r3;
+_1: while(true){
+ r5 = r4 << 2;
+_3: while(true){
+ r6 = r0 >> 2;
+ r7 = heap32[(r6+2)];
+ if(r7 >r4) //_LBB130_1
+{
+ r7 = r1 >> 2;
+ r7 = heap32[(r7)];
+ r7 = r7 >> 2;
+ r8 = heap32[(r6+4)];
+ r7 = heap32[(r7+2)];
+ r9 = (r8 + r3)|0;
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r9;
+ __FUNCTION_TABLE__[(r7)>>2](i7);
+ r7 = r_g0;
+ if(r7 ==0) //_LBB130_3
+{
+break _3;
+}
+else{
+ r7 = r5 << 2;
+ r6 = heap32[(r6)];
+ r7 = (r8 + r7)|0;
+ r7 = r7 >> 2;
+ r6 = r6 >> 2;
+ r6 = heap32[(r6+3)];
+ r8 = heap32[(r7+1)];
+ r7 = heap32[(r7)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r7;
+ heap32[(g0+2)] = r8;
+ heap32[(g0+3)] = r2;
+ r7 = gOverlappingPairs;
+ r7 = r7 >> 2;
+ __FUNCTION_TABLE__[(r6)>>2](i7);
+ r6 = heap32[(r7)];
+ r6 = (r6 + -1)|0;
+ heap32[(r7)] = r6;
+continue _3;
+}
+}
+else{
+break _1;
+}
+}
+ r4 = (r4 + 1)|0;
+ r3 = (r3 + 16)|0;
+continue _1;
+}
+ return;
+}
+
+function _ZN28btHashedOverlappingPairCache37removeOverlappingPairsContainingProxyEP17btBroadphaseProxyP12btDispatcher(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+var __label__ = 0;
+ i7 = sp + -24;var g0 = i7>>2; // save stack
+ r0 = _ZTVZN28btHashedOverlappingPairCache37removeOverlappingPairsContainingProxyEP17btBroadphaseProxyP12btDispatcherE18RemovePairCallback;
+ r1 = sp + -8;
+ r0 = (r0 + 8)|0;
+ r2 = heap32[(fp)];
+ r3 = r1 >> 2;
+ r4 = heap32[(fp+1)];
+ heap32[(fp+-2)] = r0;
+ r0 = r2 >> 2;
+ heap32[(r3+1)] = r4;
+ r0 = heap32[(r0)];
+ r0 = r0 >> 2;
+ r0 = heap32[(r0+12)];
+ r3 = heap32[(fp+2)];
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = r3;
+ __FUNCTION_TABLE__[(r0)>>2](i7);
+ return;
+}
+
+function _ZN28btHashedOverlappingPairCache19cleanProxyFromPairsEP17btBroadphaseProxyP12btDispatcher(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+var __label__ = 0;
+ i7 = sp + -32;var g0 = i7>>2; // save stack
+ r0 = _ZTVZN28btHashedOverlappingPairCache19cleanProxyFromPairsEP17btBroadphaseProxyP12btDispatcherE17CleanPairCallback;
+ r1 = sp + -16;
+ r0 = (r0 + 8)|0;
+ r2 = r1 >> 2;
+ r3 = heap32[(fp+1)];
+ heap32[(fp+-4)] = r0;
+ r0 = heap32[(fp)];
+ heap32[(r2+1)] = r3;
+ r3 = heap32[(fp+2)];
+ heap32[(r2+2)] = r0;
+ r4 = r0 >> 2;
+ heap32[(r2+3)] = r3;
+ r2 = heap32[(r4)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+12)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = r3;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ return;
+}
+
+function _ZN28btHashedOverlappingPairCacheD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV28btHashedOverlappingPairCache;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ r1 = heap32[(r2+16)];
+if(!(r1 ==0)) //_LBB133_4
+{
+ r3 = heapU8[r0+68];
+if(!(r3 ==0)) //_LBB133_3
+{
+ r3 = gNumAlignedFree;
+ r3 = r3 >> 2;
+ r4 = heap32[(r3)];
+ r4 = (r4 + 1)|0;
+ r1 = r1 >> 2;
+ heap32[(r3)] = r4;
+ r1 = heap32[(r1+-1)];
+ heap32[(g0)] = r1;
+ free(i7);
+}
+ heap32[(r2+16)] = 0;
+}
+ r1 = 1;
+ heap8[r0+68] = r1;
+ heap32[(r2+16)] = 0;
+ heap32[(r2+14)] = 0;
+ heap32[(r2+15)] = 0;
+ r3 = heap32[(r2+11)];
+if(!(r3 ==0)) //_LBB133_8
+{
+ r4 = heapU8[r0+48];
+if(!(r4 ==0)) //_LBB133_7
+{
+ r4 = gNumAlignedFree;
+ r4 = r4 >> 2;
+ r5 = heap32[(r4)];
+ r5 = (r5 + 1)|0;
+ r3 = r3 >> 2;
+ heap32[(r4)] = r5;
+ r3 = heap32[(r3+-1)];
+ heap32[(g0)] = r3;
+ free(i7);
+}
+ heap32[(r2+11)] = 0;
+}
+ heap8[r0+48] = r1;
+ heap32[(r2+11)] = 0;
+ heap32[(r2+9)] = 0;
+ heap32[(r2+10)] = 0;
+ r3 = heap32[(r2+4)];
+if(!(r3 ==0)) //_LBB133_12
+{
+ r4 = heapU8[r0+20];
+if(!(r4 ==0)) //_LBB133_11
+{
+ r4 = gNumAlignedFree;
+ r4 = r4 >> 2;
+ r5 = heap32[(r4)];
+ r5 = (r5 + 1)|0;
+ r3 = r3 >> 2;
+ heap32[(r4)] = r5;
+ r3 = heap32[(r3+-1)];
+ heap32[(g0)] = r3;
+ free(i7);
+}
+ heap32[(r2+4)] = 0;
+}
+ heap8[r0+20] = r1;
+ heap32[(r2+4)] = 0;
+ heap32[(r2+2)] = 0;
+ heap32[(r2+3)] = 0;
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZN28btHashedOverlappingPairCacheD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV28btHashedOverlappingPairCache;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ r1 = heap32[(r2+16)];
+if(!(r1 ==0)) //_LBB134_4
+{
+ r3 = heapU8[r0+68];
+if(!(r3 ==0)) //_LBB134_3
+{
+ r3 = gNumAlignedFree;
+ r3 = r3 >> 2;
+ r4 = heap32[(r3)];
+ r4 = (r4 + 1)|0;
+ r1 = r1 >> 2;
+ heap32[(r3)] = r4;
+ r1 = heap32[(r1+-1)];
+ heap32[(g0)] = r1;
+ free(i7);
+}
+ heap32[(r2+16)] = 0;
+}
+ r1 = 1;
+ heap8[r0+68] = r1;
+ heap32[(r2+16)] = 0;
+ heap32[(r2+14)] = 0;
+ heap32[(r2+15)] = 0;
+ r3 = heap32[(r2+11)];
+if(!(r3 ==0)) //_LBB134_8
+{
+ r4 = heapU8[r0+48];
+if(!(r4 ==0)) //_LBB134_7
+{
+ r4 = gNumAlignedFree;
+ r4 = r4 >> 2;
+ r5 = heap32[(r4)];
+ r5 = (r5 + 1)|0;
+ r3 = r3 >> 2;
+ heap32[(r4)] = r5;
+ r3 = heap32[(r3+-1)];
+ heap32[(g0)] = r3;
+ free(i7);
+}
+ heap32[(r2+11)] = 0;
+}
+ heap8[r0+48] = r1;
+ heap32[(r2+11)] = 0;
+ heap32[(r2+9)] = 0;
+ heap32[(r2+10)] = 0;
+ r3 = heap32[(r2+4)];
+if(!(r3 ==0)) //_LBB134_12
+{
+ r4 = heapU8[r0+20];
+if(!(r4 ==0)) //_LBB134_11
+{
+ r4 = gNumAlignedFree;
+ r4 = r4 >> 2;
+ r5 = heap32[(r4)];
+ r5 = (r5 + 1)|0;
+ r3 = r3 >> 2;
+ heap32[(r4)] = r5;
+ r3 = heap32[(r3+-1)];
+ heap32[(g0)] = r3;
+ free(i7);
+}
+ heap32[(r2+4)] = 0;
+}
+ heap8[r0+20] = r1;
+ heap32[(r2+4)] = 0;
+ heap32[(r2+2)] = 0;
+ heap32[(r2+3)] = 0;
+ return;
+}
+
+function _ZN28btHashedOverlappingPairCache18addOverlappingPairEP17btBroadphaseProxyS1_(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+ var r13;
+ var r14;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = gAddedPairs;
+ r0 = r0 >> 2;
+ r1 = heap32[(r0)];
+ r2 = heap32[(fp)];
+ r1 = (r1 + 1)|0;
+ r3 = r2 >> 2;
+ heap32[(r0)] = r1;
+ r0 = heap32[(r3+6)];
+ r1 = heap32[(fp+1)];
+ r4 = heap32[(fp+2)];
+ if(r0 ==0) //_LBB135_2
+{
+ r0 = heapU16[(r4+6)>>1];
+ r5 = heapU16[(r1+4)>>1];
+ r0 = r0 & r5;
+ r0 = r0 & 65535;
+ if(r0 ==0) //_LBB135_25
+{
+__label__ = 23;
+}
+else{
+ r0 = heapU16[(r1+6)>>1];
+ r5 = heapU16[(r4+4)>>1];
+ r0 = r0 & r5;
+ r0 = r0 & 65535;
+ r5 = 0;
+ r0 = r0 != r5;
+ r0 = r0 & 1;
+__label__ = 4;
+}
+}
+else{
+ r5 = r0 >> 2;
+ r5 = heap32[(r5)];
+ r5 = r5 >> 2;
+ r5 = heap32[(r5+2)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = r4;
+ __FUNCTION_TABLE__[(r5)>>2](i7);
+ r0 = r_g0;
+__label__ = 4;
+}
+if (__label__ == 4){
+ r0 = r0 & 255;
+if(!(r0 ==0)) //_LBB135_25
+{
+ r0 = r1 >> 2;
+ r5 = r4 >> 2;
+ r0 = heap32[(r0+3)];
+ r5 = heap32[(r5+3)];
+ r6 = r0 > r5 ? r1 : r4;
+ r0 = r0 > r5 ? r4 : r1;
+ r1 = r6 >> 2;
+ r4 = heap32[(r1+3)];
+ r5 = r0 >> 2;
+ r7 = heap32[(r5+3)];
+ r8 = r4 << 16;
+ r8 = r8 | r7;
+ r9 = r8 << 15;
+ r9 = r9 ^ -1;
+ r8 = (r8 + r9)|0;
+ r9 = r8 >> 10;
+ r8 = r9 ^ r8;
+ r8 = (r8 * 9)|0;
+ r9 = r8 >> 6;
+ r8 = r9 ^ r8;
+ r9 = r8 << 11;
+ r9 = r9 ^ -1;
+ r8 = (r8 + r9)|0;
+ r9 = heap32[(r3+3)];
+ r10 = r8 >> 16;
+ r8 = r10 ^ r8;
+ r10 = (r9 + -1)|0;
+ r10 = r8 & r10;
+ r11 = heap32[(r3+11)];
+ r12 = r10 << 2;
+ r11 = (r11 + r12)|0;
+_8: while(true){
+ r11 = r11 >> 2;
+ r11 = heap32[(r11)];
+ if(r11 ==-1) //_LBB135_14
+{
+__label__ = 13;
+break _8;
+}
+else{
+ r12 = heap32[(r3+4)];
+ r13 = r11 << 4;
+ r12 = (r12 + r13)|0;
+ r13 = r12 >> 2;
+ r14 = heap32[(r13)];
+ r14 = r14 >> 2;
+ r14 = heap32[(r14+3)];
+if(!(r14 !=r7)) //_LBB135_6
+{
+ r13 = heap32[(r13+1)];
+ r13 = r13 >> 2;
+ r13 = heap32[(r13+3)];
+if(!(r13 !=r4)) //_LBB135_6
+{
+__label__ = 10;
+break _8;
+}
+}
+ r12 = heap32[(r3+16)];
+ r11 = r11 << 2;
+ r11 = (r12 + r11)|0;
+}
+}
+_14: do {
+switch(__label__ ){//multiple entries
+case 13:
+ r4 = heap32[(r3+2)];
+__label__ = 14;
+break _14;
+break;
+case 10:
+ r4 = heap32[(r3+2)];
+ if(r4 >r11) //_LBB135_12
+{
+ if(r12 !=0) //_LBB135_24
+{
+__label__ = 22;
+}
+else{
+__label__ = 14;
+}
+}
+else{
+ r0 = _2E_str222;
+ r1 = _2E_str323;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 250;
+ _assert(i7);
+}
+break;
+}
+} while(0);
+if (__label__ == 14){
+ r12 = (r2 + 4)|0;
+ heap32[(g0)] = r12;
+ _ZN20btAlignedObjectArrayI16btBroadphasePairE21expandNonInitializingEv(i7);
+ r12 = r_g0;
+ r7 = heap32[(r3+18)];
+if(!(r7 ==0)) //_LBB135_17
+{
+ r11 = r7 >> 2;
+ r11 = heap32[(r11)];
+ r11 = r11 >> 2;
+ r11 = heap32[(r11+2)];
+ heap32[(g0)] = r7;
+ heap32[(g0+1)] = r0;
+ heap32[(g0+2)] = r6;
+ __FUNCTION_TABLE__[(r11)>>2](i7);
+}
+ r7 = heap32[(r3+3)];
+ if(r9 <r7) //_LBB135_19
+{
+ heap32[(g0)] = r2;
+ _ZN28btHashedOverlappingPairCache10growTablesEv(i7);
+ r10 = heap32[(r3+3)];
+ r10 = (r10 + -1)|0;
+ r10 = r10 & r8;
+}
+ r2 = heap32[(r5+3)];
+ r1 = heap32[(r1+3)];
+ if(r2 >=r1) //_LBB135_22
+{
+ r1 = r12 >> 2;
+ heap32[(r1)] = r6;
+ heap32[(r1+1)] = r0;
+}
+else{
+ r1 = r12 >> 2;
+ heap32[(r1)] = r0;
+ heap32[(r1+1)] = r6;
+}
+ r0 = r12 >> 2;
+ heap32[(r0+2)] = 0;
+ heap32[(r0+3)] = 0;
+ r0 = r10 << 2;
+ r1 = heap32[(r3+11)];
+ r1 = (r1 + r0)|0;
+ r1 = r1 >> 2;
+ r2 = r4 << 2;
+ r5 = heap32[(r3+16)];
+ r2 = (r5 + r2)|0;
+ r1 = heap32[(r1)];
+ r2 = r2 >> 2;
+ heap32[(r2)] = r1;
+ r1 = heap32[(r3+11)];
+ r0 = (r1 + r0)|0;
+ r0 = r0 >> 2;
+ heap32[(r0)] = r4;
+}
+ r_g0 = r12;
+ return;
+}
+}
+ r0 = 0;
+ r_g0 = r0;
+ return;
+}
+
+function _ZN28btHashedOverlappingPairCache21removeOverlappingPairEP17btBroadphaseProxyS1_P12btDispatcher(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = gRemovePairs;
+ r0 = r0 >> 2;
+ r1 = heap32[(r0)];
+ r2 = heap32[(fp+2)];
+ r3 = heap32[(fp+1)];
+ r1 = (r1 + 1)|0;
+ r4 = r3 >> 2;
+ heap32[(r0)] = r1;
+ r0 = r2 >> 2;
+ r1 = heap32[(r4+3)];
+ r0 = heap32[(r0+3)];
+ r4 = r1 > r0 ? r3 : r2;
+ r0 = r1 > r0 ? r2 : r3;
+ r1 = r4 >> 2;
+ r1 = heap32[(r1+3)];
+ r2 = r0 >> 2;
+ r2 = heap32[(r2+3)];
+ r3 = r1 << 16;
+ r3 = r3 | r2;
+ r5 = r3 << 15;
+ r5 = r5 ^ -1;
+ r3 = (r3 + r5)|0;
+ r5 = r3 >> 10;
+ r3 = r5 ^ r3;
+ r3 = (r3 * 9)|0;
+ r5 = r3 >> 6;
+ r3 = r5 ^ r3;
+ r5 = r3 << 11;
+ r6 = heap32[(fp)];
+ r5 = r5 ^ -1;
+ r7 = r6 >> 2;
+ r3 = (r3 + r5)|0;
+ r5 = r3 >> 16;
+ r8 = heap32[(r7+3)];
+ r3 = r5 ^ r3;
+ r5 = (r8 + -1)|0;
+ r3 = r3 & r5;
+ r5 = heap32[(r7+11)];
+ r3 = r3 << 2;
+ r8 = heap32[(fp+3)];
+ r5 = (r5 + r3)|0;
+_1: while(true){
+ r5 = r5 >> 2;
+ r5 = heap32[(r5)];
+ if(r5 ==-1) //_LBB136_35
+{
+__label__ = 33;
+break _1;
+}
+else{
+ r9 = heap32[(r7+4)];
+ r10 = r5 << 4;
+ r9 = (r9 + r10)|0;
+ r10 = r9 >> 2;
+ r11 = heap32[(r10)];
+ r11 = r11 >> 2;
+ r11 = heap32[(r11+3)];
+if(!(r11 !=r2)) //_LBB136_1
+{
+ r11 = heap32[(r10+1)];
+ r11 = r11 >> 2;
+ r11 = heap32[(r11+3)];
+if(!(r11 !=r1)) //_LBB136_1
+{
+__label__ = 5;
+break _1;
+}
+}
+ r9 = heap32[(r7+16)];
+ r5 = r5 << 2;
+ r5 = (r9 + r5)|0;
+continue _1;
+}
+}
+if (__label__ == 5){
+ r11 = heap32[(r7+2)];
+ if(r11 >r5) //_LBB136_7
+{
+if(!(r9 ==0)) //_LBB136_35
+{
+ r5 = heap32[(r7)];
+ r5 = r5 >> 2;
+ r5 = heap32[(r5+8)];
+ heap32[(g0)] = r6;
+ heap32[(g0+1)] = r9;
+ heap32[(g0+2)] = r8;
+ __FUNCTION_TABLE__[(r5)>>2](i7);
+ r5 = heap32[(r10)];
+ r5 = r5 >> 2;
+ r5 = heap32[(r5+3)];
+ if(r5 ==r2) //_LBB136_10
+{
+ r2 = heap32[(r10+1)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+3)];
+ if(r2 ==r1) //_LBB136_12
+{
+ r1 = heap32[(r7+4)];
+ r1 = (r9 - r1)|0;
+ r1 = r1 >> 4;
+ r2 = heap32[(r7+2)];
+ if(r2 >r1) //_LBB136_14
+{
+ r2 = heap32[(r7+11)];
+ r2 = (r2 + r3)|0;
+ r2 = r2 >> 2;
+ r3 = heap32[(r2)];
+ if(r3 ==-1) //_LBB136_17
+{
+ r0 = _2E_str727;
+ r1 = _2E_str121;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 304;
+ _assert(i7);
+}
+else{
+ r5 = heap32[(r10+3)];
+ r6 = heap32[(r7+16)];
+ if(r3 ==r1) //_LBB136_21
+{
+__label__ = 20;
+}
+else{
+_22: while(true){
+ r9 = r3;
+ r3 = r9 << 2;
+ r3 = (r6 + r3)|0;
+ r10 = r3 >> 2;
+ r3 = heap32[(r10)];
+if(!(r3 !=r1)) //_LBB136_18
+{
+break _22;
+}
+}
+ if(r9 ==-1) //_LBB136_21
+{
+__label__ = 20;
+}
+else{
+ r2 = r1 << 2;
+ r2 = (r6 + r2)|0;
+ r2 = r2 >> 2;
+ r2 = heap32[(r2)];
+ heap32[(r10)] = r2;
+__label__ = 21;
+}
+}
+if (__label__ == 20){
+ r3 = r1 << 2;
+ r3 = (r6 + r3)|0;
+ r3 = r3 >> 2;
+ r3 = heap32[(r3)];
+ heap32[(r2)] = r3;
+}
+ r2 = heap32[(r7+2)];
+ r3 = heap32[(r7+18)];
+if(!(r3 ==0)) //_LBB136_24
+{
+ r6 = r3 >> 2;
+ r6 = heap32[(r6)];
+ r6 = r6 >> 2;
+ r6 = heap32[(r6+3)];
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r0;
+ heap32[(g0+2)] = r4;
+ heap32[(g0+3)] = r8;
+ __FUNCTION_TABLE__[(r6)>>2](i7);
+}
+ r0 = (r2 + -1)|0;
+ if(r0 !=r1) //_LBB136_26
+{
+ r3 = heap32[(r7+4)];
+ r4 = r2 << 4;
+ r3 = (r3 + r4)|0;
+ r3 = r3 >> 2;
+ r6 = heap32[(r3+-3)];
+ r3 = heap32[(r3+-4)];
+ r6 = r6 >> 2;
+ r3 = r3 >> 2;
+ r6 = heap32[(r6+3)];
+ r3 = heap32[(r3+3)];
+ r6 = r6 << 16;
+ r3 = r3 | r6;
+ r6 = r3 << 15;
+ r6 = r6 ^ -1;
+ r3 = (r3 + r6)|0;
+ r6 = r3 >> 10;
+ r3 = r6 ^ r3;
+ r3 = (r3 * 9)|0;
+ r6 = r3 >> 6;
+ r3 = r6 ^ r3;
+ r6 = r3 << 11;
+ r6 = r6 ^ -1;
+ r3 = (r3 + r6)|0;
+ r6 = r3 >> 16;
+ r8 = heap32[(r7+3)];
+ r3 = r6 ^ r3;
+ r6 = (r8 + -1)|0;
+ r3 = r3 & r6;
+ r6 = heap32[(r7+11)];
+ r3 = r3 << 2;
+ r6 = (r6 + r3)|0;
+ r6 = r6 >> 2;
+ r8 = heap32[(r6)];
+ if(r8 ==-1) //_LBB136_29
+{
+ r0 = _2E_str727;
+ r1 = _2E_str121;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 345;
+ _assert(i7);
+}
+else{
+ r9 = heap32[(r7+16)];
+ if(r8 ==r0) //_LBB136_33
+{
+__label__ = 31;
+}
+else{
+_38: while(true){
+ r10 = r8;
+ r8 = r10 << 2;
+ r8 = (r9 + r8)|0;
+ r11 = r8 >> 2;
+ r8 = heap32[(r11)];
+if(!(r8 !=r0)) //_LBB136_30
+{
+break _38;
+}
+}
+ if(r10 ==-1) //_LBB136_33
+{
+__label__ = 31;
+}
+else{
+ r2 = r2 << 2;
+ r2 = (r9 + r2)|0;
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+-1)];
+ heap32[(r11)] = r2;
+__label__ = 32;
+}
+}
+if (__label__ == 31){
+ r0 = r2 << 2;
+ r0 = (r9 + r0)|0;
+ r0 = r0 >> 2;
+ r0 = heap32[(r0+-1)];
+ heap32[(r6)] = r0;
+}
+ r0 = heap32[(r7+4)];
+ r2 = (r0 + r4)|0;
+ r4 = r1 << 4;
+ r2 = r2 >> 2;
+ r0 = (r0 + r4)|0;
+ r4 = heap32[(r2+-4)];
+ r0 = r0 >> 2;
+ heap32[(r0)] = r4;
+ r4 = heap32[(r2+-3)];
+ heap32[(r0+1)] = r4;
+ r4 = heap32[(r2+-2)];
+ heap32[(r0+2)] = r4;
+ r2 = heap32[(r2+-1)];
+ heap32[(r0+3)] = r2;
+ r0 = heap32[(r7+11)];
+ r0 = (r0 + r3)|0;
+ r0 = r0 >> 2;
+ r2 = r1 << 2;
+ r4 = heap32[(r7+16)];
+ r2 = (r4 + r2)|0;
+ r0 = heap32[(r0)];
+ r2 = r2 >> 2;
+ heap32[(r2)] = r0;
+ r0 = heap32[(r7+11)];
+ r0 = (r0 + r3)|0;
+ r0 = r0 >> 2;
+ heap32[(r0)] = r1;
+}
+}
+ r0 = heap32[(r7+2)];
+ r0 = (r0 + -1)|0;
+ heap32[(r7+2)] = r0;
+ r_g0 = r5;
+ return;
+}
+}
+else{
+ r0 = _2E_str626;
+ r1 = _2E_str121;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 300;
+ _assert(i7);
+}
+}
+else{
+ r0 = _2E_str525;
+ r3 = _2E_str121;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r3;
+ heap32[(g0+2)] = 297;
+ _assert(i7);
+}
+}
+else{
+ r0 = _2E_str424;
+ r1 = _2E_str121;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 296;
+ _assert(i7);
+}
+}
+}
+else{
+ r0 = _2E_str222;
+ r1 = _2E_str323;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 250;
+ _assert(i7);
+}
+}
+ r0 = 0;
+ r_g0 = r0;
+ return;
+}
+
+function _ZN28btHashedOverlappingPairCache8findPairEP17btBroadphaseProxyS1_(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = gFindPairs;
+ r0 = r0 >> 2;
+ r1 = heap32[(r0)];
+ r2 = heap32[(fp+1)];
+ r3 = heap32[(fp+2)];
+ r1 = (r1 + 1)|0;
+ r4 = r2 >> 2;
+ heap32[(r0)] = r1;
+ r0 = r3 >> 2;
+ r1 = heap32[(r4+3)];
+ r0 = heap32[(r0+3)];
+ r4 = r1 > r0 ? r2 : r3;
+ r0 = r1 > r0 ? r3 : r2;
+ r1 = r4 >> 2;
+ r1 = heap32[(r1+3)];
+ r0 = r0 >> 2;
+ r0 = heap32[(r0+3)];
+ r2 = r1 << 16;
+ r2 = r2 | r0;
+ r3 = r2 << 15;
+ r3 = r3 ^ -1;
+ r2 = (r2 + r3)|0;
+ r3 = r2 >> 10;
+ r2 = r3 ^ r2;
+ r2 = (r2 * 9)|0;
+ r3 = r2 >> 6;
+ r2 = r3 ^ r2;
+ r3 = r2 << 11;
+ r4 = heap32[(fp)];
+ r3 = r3 ^ -1;
+ r4 = r4 >> 2;
+ r2 = (r2 + r3)|0;
+ r3 = r2 >> 16;
+ r5 = heap32[(r4+3)];
+ r2 = r3 ^ r2;
+ r3 = (r5 + -1)|0;
+ r2 = r2 & r3;
+ r3 = heap32[(r4+9)];
+_1: do {
+if(!(r3 <=r2)) //_LBB137_9
+{
+ r3 = heap32[(r4+11)];
+ r2 = r2 << 2;
+ r2 = (r3 + r2)|0;
+_3: while(true){
+ r2 = r2 >> 2;
+ r2 = heap32[(r2)];
+ if(r2 ==-1) //_LBB137_9
+{
+break _1;
+}
+else{
+ r3 = heap32[(r4+4)];
+ r5 = r2 << 4;
+ r3 = (r3 + r5)|0;
+ r5 = r3 >> 2;
+ r6 = heap32[(r5)];
+ r6 = r6 >> 2;
+ r6 = heap32[(r6+3)];
+if(!(r6 !=r0)) //_LBB137_2
+{
+ r5 = heap32[(r5+1)];
+ r5 = r5 >> 2;
+ r5 = heap32[(r5+3)];
+if(!(r5 !=r1)) //_LBB137_2
+{
+break _3;
+}
+}
+ r3 = heap32[(r4+16)];
+ r2 = r2 << 2;
+ r2 = (r3 + r2)|0;
+}
+}
+ r0 = heap32[(r4+2)];
+ if(r0 >r2) //_LBB137_8
+{
+ r_g0 = r3;
+ return;
+}
+else{
+ r3 = _2E_str222;
+ r0 = _2E_str121;
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r0;
+ heap32[(g0+2)] = 165;
+ _assert(i7);
+}
+}
+} while(0);
+ r0 = 0;
+ r_g0 = r0;
+ return;
+}
+
+function _ZN28btHashedOverlappingPairCache20sortOverlappingPairsEP12btDispatcher(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+ var r13;
+ var r14;
+ var r15;
+ var r16;
+var __label__ = 0;
+ i7 = sp + -40;var g0 = i7>>2; // save stack
+ r0 = sp + -24;
+ r1 = 1;
+ r2 = r0 >> 2;
+ heap8[sp+-8] = r1;
+ heap32[(r2+3)] = 0;
+ r3 = heap32[(fp)];
+ heap32[(r2+1)] = 0;
+ r4 = r3 >> 2;
+ heap32[(r2+2)] = 0;
+ r5 = heap32[(r4+2)];
+_1: do {
+ if(r5 >0) //_LBB138_2
+{
+ r6 = heap32[(fp+1)];
+ r7 = 0;
+ r5 = r7;
+_3: while(true){
+ r8 = heap32[(r4+4)];
+ if(r7 ==r5) //_LBB138_5
+{
+ r9 = 1;
+ r10 = r5 << 1;
+ r10 = r5 == 0 ? r9 : r10;
+if(!(r7 >=r10)) //_LBB138_4
+{
+ if(r10 !=0) //_LBB138_8
+{
+ r7 = gNumAlignedAllocs;
+ r7 = r7 >> 2;
+ r11 = heap32[(r7)];
+ r12 = r10 << 4;
+ r11 = (r11 + 1)|0;
+ r12 = r12 | 3;
+ heap32[(r7)] = r11;
+ r7 = (r12 + 16)|0;
+ heap32[(g0)] = r7;
+ malloc(i7);
+ r7 = r_g0;
+ if(r7 !=0) //_LBB138_10
+{
+ r11 = 0;
+ r12 = (r7 + 4)|0;
+ r11 = (r11 - r12)|0;
+ r11 = r11 & 15;
+ r11 = (r7 + r11)|0;
+ r12 = (r11 + 4)|0;
+ r11 = r11 >> 2;
+ heap32[(r11)] = r7;
+ r7 = r12;
+}
+}
+else{
+ r7 = 0;
+}
+ if(r5 <1) //_LBB138_13
+{
+ r13 = heap32[(r2+3)];
+}
+else{
+ r11 = 0;
+ r12 = (r11 - r5)|0;
+_16: while(true){
+ r13 = heap32[(r2+3)];
+ r14 = r11 << 4;
+ r15 = (r13 - r14)|0;
+ r15 = r15 >> 2;
+ r14 = (r7 - r14)|0;
+ r16 = heap32[(r15)];
+ r14 = r14 >> 2;
+ heap32[(r14)] = r16;
+ r16 = heap32[(r15+1)];
+ heap32[(r14+1)] = r16;
+ r16 = heap32[(r15+2)];
+ heap32[(r14+2)] = r16;
+ r15 = heap32[(r15+3)];
+ r11 = (r11 + -1)|0;
+ heap32[(r14+3)] = r15;
+if(!(r12 !=r11)) //_LBB138_14
+{
+break _16;
+}
+}
+}
+ if(r13 !=0) //_LBB138_17
+{
+ r11 = heapU8[sp+-8];
+ if(r11 !=0) //_LBB138_19
+{
+ r5 = gNumAlignedFree;
+ r5 = r5 >> 2;
+ r11 = heap32[(r5)];
+ r11 = (r11 + 1)|0;
+ r12 = r13 >> 2;
+ heap32[(r5)] = r11;
+ r5 = heap32[(r12+-1)];
+ heap32[(g0)] = r5;
+ free(i7);
+ r5 = heap32[(r2+1)];
+}
+ heap32[(r2+3)] = 0;
+}
+ heap8[sp+-8] = r9;
+ heap32[(r2+3)] = r7;
+ heap32[(r2+2)] = r10;
+}
+}
+ r7 = r1 << 4;
+ r7 = (r8 + r7)|0;
+ r7 = r7 >> 2;
+ r5 = r5 << 4;
+ r8 = heap32[(r2+3)];
+ r5 = (r8 + r5)|0;
+ r8 = heap32[(r7+-4)];
+ r5 = r5 >> 2;
+ heap32[(r5)] = r8;
+ r8 = heap32[(r7+-3)];
+ heap32[(r5+1)] = r8;
+ r8 = heap32[(r7+-2)];
+ heap32[(r5+2)] = r8;
+ r7 = heap32[(r7+-1)];
+ heap32[(r5+3)] = r7;
+ r5 = heap32[(r2+1)];
+ r5 = (r5 + 1)|0;
+ heap32[(r2+1)] = r5;
+ r7 = heap32[(r4+2)];
+ if(r7 <=r1) //_LBB138_24
+{
+break _3;
+}
+else{
+ r7 = heap32[(r2+2)];
+ r1 = (r1 + 1)|0;
+}
+}
+ if(r5 >0) //_LBB138_26
+{
+ r1 = 0;
+_29: while(true){
+ r5 = heap32[(r2+3)];
+ r7 = r1 << 4;
+ r8 = heap32[(r4)];
+ r5 = (r5 + r7)|0;
+ r5 = r5 >> 2;
+ r7 = r8 >> 2;
+ r7 = heap32[(r7+3)];
+ r8 = heap32[(r5+1)];
+ r5 = heap32[(r5)];
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r5;
+ heap32[(g0+2)] = r8;
+ heap32[(g0+3)] = r6;
+ __FUNCTION_TABLE__[(r7)>>2](i7);
+ r5 = heap32[(r2+1)];
+ r1 = (r1 + 1)|0;
+ if(r5 >r1) //_LBB138_27
+{
+continue _29;
+}
+else{
+break _1;
+}
+}
+}
+}
+else{
+ r5 = 0;
+}
+} while(0);
+ r1 = heap32[(r4+14)];
+ if(r1 >0) //_LBB138_30
+{
+ r5 = 0;
+_35: while(true){
+ r1 = r5 << 2;
+ r6 = heap32[(r4+16)];
+ r1 = (r6 + r1)|0;
+ r5 = (r5 + 1)|0;
+ r1 = r1 >> 2;
+ heap32[(r1)] = -1;
+ r1 = heap32[(r4+14)];
+if(!(r1 >r5)) //_LBB138_31
+{
+break _35;
+}
+}
+ r5 = heap32[(r2+1)];
+}
+ if(r5 >1) //_LBB138_35
+{
+ r5 = (r5 + -1)|0;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = 0;
+ heap32[(g0+2)] = r5;
+ _ZN20btAlignedObjectArrayI16btBroadphasePairE17quickSortInternalI29btBroadphasePairSortPredicateEEvT_ii(i7);
+ r5 = heap32[(r2+1)];
+}
+_42: do {
+if(!(r5 <1)) //_LBB138_39
+{
+ r0 = 0;
+_44: while(true){
+ r1 = heap32[(r2+3)];
+ r5 = r0 << 4;
+ r6 = heap32[(r4)];
+ r1 = (r1 + r5)|0;
+ r1 = r1 >> 2;
+ r5 = r6 >> 2;
+ r5 = heap32[(r5+2)];
+ r6 = heap32[(r1+1)];
+ r1 = heap32[(r1)];
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = r6;
+ r0 = (r0 + 1)|0;
+ __FUNCTION_TABLE__[(r5)>>2](i7);
+ r1 = heap32[(r2+1)];
+ if(r1 >r0) //_LBB138_38
+{
+continue _44;
+}
+else{
+break _42;
+}
+}
+}
+} while(0);
+ r0 = heap32[(r2+3)];
+if(!(r0 ==0)) //_LBB138_42
+{
+ r1 = heapU8[sp+-8];
+if(!(r1 ==0)) //_LBB138_42
+{
+ r1 = gNumAlignedFree;
+ r1 = r1 >> 2;
+ r2 = heap32[(r1)];
+ r2 = (r2 + 1)|0;
+ r0 = r0 >> 2;
+ heap32[(r1)] = r2;
+ r0 = heap32[(r0+-1)];
+ heap32[(g0)] = r0;
+ free(i7);
+}
+}
+ return;
+}
+
+function _ZN20btAlignedObjectArrayI16btBroadphasePairE21expandNonInitializingEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ r2 = heap32[(r1+2)];
+ r3 = heap32[(r1+1)];
+ if(r2 ==r3) //_LBB139_2
+{
+ r4 = 1;
+ r5 = r3 << 1;
+ r5 = r3 == 0 ? r4 : r5;
+ if(r2 >=r5) //_LBB139_1
+{
+__label__ = 1;
+}
+else{
+ if(r5 !=0) //_LBB139_5
+{
+ r2 = gNumAlignedAllocs;
+ r2 = r2 >> 2;
+ r6 = heap32[(r2)];
+ r7 = r5 << 4;
+ r6 = (r6 + 1)|0;
+ r7 = r7 | 3;
+ heap32[(r2)] = r6;
+ r2 = (r7 + 16)|0;
+ heap32[(g0)] = r2;
+ malloc(i7);
+ r6 = r_g0;
+ if(r6 !=0) //_LBB139_7
+{
+ r2 = 0;
+ r7 = (r6 + 4)|0;
+ r2 = (r2 - r7)|0;
+ r2 = r2 & 15;
+ r2 = (r6 + r2)|0;
+ r7 = (r2 + 4)|0;
+ r2 = r2 >> 2;
+ heap32[(r2)] = r6;
+ r6 = r7;
+}
+}
+else{
+ r6 = 0;
+}
+ r7 = (r0 + 12)|0;
+ if(r3 <1) //_LBB139_10
+{
+ r2 = r7 >> 2;
+ r9 = heap32[(r2)];
+}
+else{
+ r2 = 0;
+ r8 = (r2 - r3)|0;
+_12: while(true){
+ r9 = r7 >> 2;
+ r9 = heap32[(r9)];
+ r10 = r2 << 4;
+ r11 = (r9 - r10)|0;
+ r11 = r11 >> 2;
+ r10 = (r6 - r10)|0;
+ r12 = heap32[(r11)];
+ r10 = r10 >> 2;
+ heap32[(r10)] = r12;
+ r12 = heap32[(r11+1)];
+ heap32[(r10+1)] = r12;
+ r12 = heap32[(r11+2)];
+ heap32[(r10+2)] = r12;
+ r11 = heap32[(r11+3)];
+ r2 = (r2 + -1)|0;
+ heap32[(r10+3)] = r11;
+if(!(r8 !=r2)) //_LBB139_11
+{
+break _12;
+}
+}
+ r7 = (r0 + 12)|0;
+}
+ if(r9 !=0) //_LBB139_15
+{
+ r2 = heapU8[r0+16];
+ if(r2 !=0) //_LBB139_17
+{
+ r2 = gNumAlignedFree;
+ r2 = r2 >> 2;
+ r8 = heap32[(r2)];
+ r8 = (r8 + 1)|0;
+ r9 = r9 >> 2;
+ heap32[(r2)] = r8;
+ r2 = heap32[(r9+-1)];
+ heap32[(g0)] = r2;
+ free(i7);
+ r2 = heap32[(r1+1)];
+}
+else{
+ r2 = r3;
+}
+ r8 = r7 >> 2;
+ heap32[(r8)] = 0;
+}
+else{
+ r2 = r3;
+}
+ r7 = r7 >> 2;
+ heap8[r0+16] = r4;
+ heap32[(r7)] = r6;
+ heap32[(r1+2)] = r5;
+__label__ = 19;
+}
+}
+else{
+__label__ = 1;
+}
+if (__label__ == 1){
+ r2 = r3;
+}
+ r0 = (r2 + 1)|0;
+ heap32[(r1+1)] = r0;
+ r0 = heap32[(r1+3)];
+ r1 = r3 << 4;
+ r0 = (r0 + r1)|0;
+ r_g0 = r0;
+ return;
+}
+
+function _ZN28btHashedOverlappingPairCache10growTablesEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ r2 = heap32[(r1+9)];
+ r3 = heap32[(r1+3)];
+_1: do {
+if(!(r2 >=r3)) //_LBB140_48
+{
+_3: do {
+if(!(r2 >r3)) //_LBB140_20
+{
+ r4 = heap32[(r1+10)];
+if(!(r4 >=r3)) //_LBB140_18
+{
+ if(r3 !=0) //_LBB140_5
+{
+ r4 = gNumAlignedAllocs;
+ r4 = r4 >> 2;
+ r5 = heap32[(r4)];
+ r6 = r3 << 2;
+ r5 = (r5 + 1)|0;
+ r6 = r6 | 3;
+ heap32[(r4)] = r5;
+ r4 = (r6 + 16)|0;
+ heap32[(g0)] = r4;
+ malloc(i7);
+ r4 = r_g0;
+ if(r4 !=0) //_LBB140_7
+{
+ r5 = 0;
+ r6 = (r4 + 4)|0;
+ r5 = (r5 - r6)|0;
+ r5 = r5 & 15;
+ r5 = (r4 + r5)|0;
+ r6 = (r5 + 4)|0;
+ r5 = r5 >> 2;
+ heap32[(r5)] = r4;
+ r4 = r6;
+}
+}
+else{
+ r4 = 0;
+}
+ r5 = (r0 + 44)|0;
+ if(r2 <1) //_LBB140_10
+{
+ r6 = r5 >> 2;
+ r7 = heap32[(r6)];
+}
+else{
+ r6 = 0;
+_15: while(true){
+ r7 = r5 >> 2;
+ r7 = heap32[(r7)];
+ r8 = r6 << 2;
+ r9 = (r7 + r8)|0;
+ r9 = r9 >> 2;
+ r8 = (r4 + r8)|0;
+ r9 = heap32[(r9)];
+ r6 = (r6 + 1)|0;
+ r8 = r8 >> 2;
+ heap32[(r8)] = r9;
+if(!(r2 !=r6)) //_LBB140_11
+{
+break _15;
+}
+}
+ r5 = (r0 + 44)|0;
+}
+if(!(r7 ==0)) //_LBB140_17
+{
+ r6 = heapU8[r0+48];
+if(!(r6 ==0)) //_LBB140_16
+{
+ r6 = gNumAlignedFree;
+ r6 = r6 >> 2;
+ r8 = heap32[(r6)];
+ r8 = (r8 + 1)|0;
+ r7 = r7 >> 2;
+ heap32[(r6)] = r8;
+ r6 = heap32[(r7+-1)];
+ heap32[(g0)] = r6;
+ free(i7);
+}
+ r6 = r5 >> 2;
+ heap32[(r6)] = 0;
+}
+ r6 = 1;
+ r5 = r5 >> 2;
+ heap8[r0+48] = r6;
+ heap32[(r5)] = r4;
+ heap32[(r1+10)] = r3;
+}
+ r4 = r2;
+_26: while(true){
+ r5 = r4 << 2;
+ r6 = heap32[(r1+11)];
+ r5 = (r6 + r5)|0;
+ r4 = (r4 + 1)|0;
+ r5 = r5 >> 2;
+ heap32[(r5)] = 0;
+if(!(r3 !=r4)) //_LBB140_19
+{
+break _3;
+}
+}
+}
+} while(0);
+ heap32[(r1+9)] = r3;
+ r4 = heap32[(r1+14)];
+_29: do {
+if(!(r4 >r3)) //_LBB140_39
+{
+if(!(r4 >=r3)) //_LBB140_39
+{
+ r5 = heap32[(r1+15)];
+if(!(r5 >=r3)) //_LBB140_38
+{
+ if(r3 !=0) //_LBB140_25
+{
+ r5 = gNumAlignedAllocs;
+ r5 = r5 >> 2;
+ r6 = heap32[(r5)];
+ r7 = r3 << 2;
+ r6 = (r6 + 1)|0;
+ r7 = r7 | 3;
+ heap32[(r5)] = r6;
+ r5 = (r7 + 16)|0;
+ heap32[(g0)] = r5;
+ malloc(i7);
+ r5 = r_g0;
+ if(r5 !=0) //_LBB140_27
+{
+ r6 = 0;
+ r7 = (r5 + 4)|0;
+ r6 = (r6 - r7)|0;
+ r6 = r6 & 15;
+ r6 = (r5 + r6)|0;
+ r7 = (r6 + 4)|0;
+ r6 = r6 >> 2;
+ heap32[(r6)] = r5;
+ r5 = r7;
+}
+}
+else{
+ r5 = 0;
+}
+ r6 = (r0 + 64)|0;
+ if(r4 <1) //_LBB140_30
+{
+ r7 = r6 >> 2;
+ r8 = heap32[(r7)];
+}
+else{
+ r7 = 0;
+_42: while(true){
+ r8 = r6 >> 2;
+ r8 = heap32[(r8)];
+ r9 = r7 << 2;
+ r10 = (r8 + r9)|0;
+ r10 = r10 >> 2;
+ r9 = (r5 + r9)|0;
+ r10 = heap32[(r10)];
+ r7 = (r7 + 1)|0;
+ r9 = r9 >> 2;
+ heap32[(r9)] = r10;
+if(!(r4 !=r7)) //_LBB140_31
+{
+break _42;
+}
+}
+ r6 = (r0 + 64)|0;
+}
+if(!(r8 ==0)) //_LBB140_37
+{
+ r7 = heapU8[r0+68];
+if(!(r7 ==0)) //_LBB140_36
+{
+ r7 = gNumAlignedFree;
+ r7 = r7 >> 2;
+ r9 = heap32[(r7)];
+ r9 = (r9 + 1)|0;
+ r8 = r8 >> 2;
+ heap32[(r7)] = r9;
+ r7 = heap32[(r8+-1)];
+ heap32[(g0)] = r7;
+ free(i7);
+}
+ r7 = r6 >> 2;
+ heap32[(r7)] = 0;
+}
+ r7 = 1;
+ r6 = r6 >> 2;
+ heap8[r0+68] = r7;
+ heap32[(r6)] = r5;
+ heap32[(r1+15)] = r3;
+ if(r4 >=r3) //_LBB140_39
+{
+break _29;
+}
+}
+_52: while(true){
+ r0 = r4 << 2;
+ r5 = heap32[(r1+16)];
+ r0 = (r5 + r0)|0;
+ r4 = (r4 + 1)|0;
+ r0 = r0 >> 2;
+ heap32[(r0)] = 0;
+if(!(r3 !=r4)) //_LBB140_38
+{
+break _29;
+}
+}
+}
+}
+} while(0);
+ heap32[(r1+14)] = r3;
+_55: do {
+if(!(r3 <1)) //_LBB140_45
+{
+ r0 = 0;
+_57: while(true){
+ r4 = r0 << 2;
+ r5 = heap32[(r1+11)];
+ r4 = (r5 + r4)|0;
+ r0 = (r0 + 1)|0;
+ r4 = r4 >> 2;
+ heap32[(r4)] = -1;
+if(!(r3 !=r0)) //_LBB140_41
+{
+break _57;
+}
+}
+if(!(r3 <1)) //_LBB140_45
+{
+ r0 = 0;
+_61: while(true){
+ r4 = r0 << 2;
+ r5 = heap32[(r1+16)];
+ r4 = (r5 + r4)|0;
+ r0 = (r0 + 1)|0;
+ r4 = r4 >> 2;
+ heap32[(r4)] = -1;
+if(!(r3 !=r0)) //_LBB140_44
+{
+break _55;
+}
+}
+}
+}
+} while(0);
+if(!(r2 <1)) //_LBB140_48
+{
+ r0 = 0;
+_65: while(true){
+ r3 = heap32[(r1+4)];
+ r4 = r0 << 4;
+ r3 = (r3 + r4)|0;
+ r3 = r3 >> 2;
+ r4 = heap32[(r3+1)];
+ r3 = heap32[(r3)];
+ r4 = r4 >> 2;
+ r3 = r3 >> 2;
+ r4 = heap32[(r4+3)];
+ r4 = r4 << 16;
+ r3 = heap32[(r3+3)];
+ r3 = r4 | r3;
+ r4 = r3 << 15;
+ r4 = r4 ^ -1;
+ r3 = (r3 + r4)|0;
+ r4 = r3 >> 10;
+ r3 = r4 ^ r3;
+ r3 = (r3 * 9)|0;
+ r4 = r3 >> 6;
+ r3 = r4 ^ r3;
+ r4 = r3 << 11;
+ r4 = r4 ^ -1;
+ r3 = (r3 + r4)|0;
+ r4 = r3 >> 16;
+ r5 = heap32[(r1+3)];
+ r3 = r4 ^ r3;
+ r4 = (r5 + -1)|0;
+ r3 = r3 & r4;
+ r3 = r3 << 2;
+ r4 = heap32[(r1+11)];
+ r4 = (r4 + r3)|0;
+ r4 = r4 >> 2;
+ r5 = r0 << 2;
+ r6 = heap32[(r1+16)];
+ r5 = (r6 + r5)|0;
+ r4 = heap32[(r4)];
+ r5 = r5 >> 2;
+ heap32[(r5)] = r4;
+ r4 = heap32[(r1+11)];
+ r3 = (r4 + r3)|0;
+ r4 = (r0 + 1)|0;
+ r3 = r3 >> 2;
+ heap32[(r3)] = r0;
+ r0 = r4;
+ if(r2 !=r4) //_LBB140_47
+{
+continue _65;
+}
+else{
+break _1;
+}
+}
+}
+}
+} while(0);
+ return;
+}
+
+function _ZN28btHashedOverlappingPairCacheC1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV28btHashedOverlappingPairCache;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ r3 = 1;
+ heap32[(r2)] = r1;
+ heap8[r0+20] = r3;
+ heap32[(r2+4)] = 0;
+ heap32[(r2+2)] = 0;
+ heap32[(r2+3)] = 0;
+ r1 = 0;
+ heap32[(r2+6)] = 0;
+ heap8[r0+28] = r1;
+ heap8[r0+48] = r3;
+ heap32[(r2+11)] = 0;
+ heap32[(r2+9)] = 0;
+ heap32[(r2+10)] = 0;
+ heap8[r0+68] = r3;
+ heap32[(r2+16)] = 0;
+ heap32[(r2+14)] = 0;
+ r4 = gNumAlignedAllocs;
+ heap32[(r2+15)] = 0;
+ r4 = r4 >> 2;
+ heap32[(r2+18)] = 0;
+ r5 = heap32[(r4)];
+ r5 = (r5 + 1)|0;
+ heap32[(r4)] = r5;
+ heap32[(g0)] = 51;
+ malloc(i7);
+ r4 = r_g0;
+ if(r4 !=0) //_LBB141_2
+{
+ r5 = (r4 + 4)|0;
+ r1 = (r1 - r5)|0;
+ r1 = r1 & 15;
+ r1 = (r4 + r1)|0;
+ r5 = (r1 + 4)|0;
+ r1 = r1 >> 2;
+ heap32[(r1)] = r4;
+ r4 = r5;
+}
+ heap8[r0+20] = r3;
+ heap32[(r2+4)] = r4;
+ heap32[(r2+3)] = 2;
+ heap32[(g0)] = r0;
+ _ZN28btHashedOverlappingPairCache10growTablesEv(i7);
+ return;
+}
+
+function _ZNK14btQuantizedBvh31calculateSerializeBufferSizeNewEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = 84;
+ r_g0 = r0;
+ return;
+}
+
+function _ZNK14btQuantizedBvh9serializeEPvP12btSerializer(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+var __label__ = 0;
+ i7 = sp + -24;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ r1 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r2 = r1 >> 2;
+ heap32[(r0+4)] = heap32[(r2+5)];
+ heap32[(r0+5)] = heap32[(r2+6)];
+ heap32[(r0+6)] = heap32[(r2+7)];
+ heap32[(r0+7)] = heap32[(r2+8)];
+ heap32[(r0)] = heap32[(r2+1)];
+ heap32[(r0+1)] = heap32[(r2+2)];
+ heap32[(r0+2)] = heap32[(r2+3)];
+ heap32[(r0+3)] = heap32[(r2+4)];
+ heap32[(r0+8)] = heap32[(r2+9)];
+ heap32[(r0+9)] = heap32[(r2+10)];
+ heap32[(r0+10)] = heap32[(r2+11)];
+ heap32[(r0+11)] = heap32[(r2+12)];
+ r3 = heap32[(r2+14)];
+ heap32[(r0+12)] = r3;
+ r1 = heapU8[r1+60];
+ heap32[(r0+13)] = r1;
+ r1 = heap32[(r2+22)];
+ r3 = heap32[(fp+2)];
+ heap32[(r0+14)] = r1;
+ r1 = heap32[(r2+22)];
+ if(r1 !=0) //_LBB143_2
+{
+ r1 = r3 >> 2;
+ r4 = heap32[(r1)];
+ r4 = r4 >> 2;
+ r4 = heap32[(r4+7)];
+ r5 = heap32[(r2+24)];
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r5;
+ __FUNCTION_TABLE__[(r4)>>2](i7);
+ r4 = r_g0;
+ heap32[(r0+16)] = r4;
+if(!(r4 ==0)) //_LBB143_7
+{
+ r4 = heap32[(r1)];
+ r4 = r4 >> 2;
+ r5 = heap32[(r2+22)];
+ r4 = heap32[(r4+4)];
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = 48;
+ heap32[(g0+2)] = r5;
+ __FUNCTION_TABLE__[(r4)>>2](i7);
+ r4 = r_g0;
+if(!(r5 <1)) //_LBB143_6
+{
+ r6 = r4 >> 2;
+ r7 = 0;
+ r6 = heap32[(r6+2)];
+ r5 = (r7 - r5)|0;
+_6: while(true){
+ r8 = (r7 * -12)|0;
+ r8 = r8 << 2;
+ r9 = r7 << 6;
+ r10 = heap32[(r2+24)];
+ r8 = (r6 + r8)|0;
+ r10 = (r10 - r9)|0;
+ r8 = r8 >> 2;
+ r10 = r10 >> 2;
+ heap32[(r8+4)] = heap32[(r10+4)];
+ heap32[(r8+5)] = heap32[(r10+5)];
+ heap32[(r8+6)] = heap32[(r10+6)];
+ heap32[(r8+7)] = heap32[(r10+7)];
+ r10 = heap32[(r2+24)];
+ r10 = (r10 - r9)|0;
+ r10 = r10 >> 2;
+ heap32[(r8)] = heap32[(r10)];
+ heap32[(r8+1)] = heap32[(r10+1)];
+ heap32[(r8+2)] = heap32[(r10+2)];
+ heap32[(r8+3)] = heap32[(r10+3)];
+ r10 = heap32[(r2+24)];
+ r10 = (r10 - r9)|0;
+ r10 = r10 >> 2;
+ r10 = heap32[(r10+8)];
+ heap32[(r8+8)] = r10;
+ r10 = heap32[(r2+24)];
+ r10 = (r10 - r9)|0;
+ r10 = r10 >> 2;
+ r10 = heap32[(r10+9)];
+ heap32[(r8+9)] = r10;
+ r10 = heap32[(r2+24)];
+ r9 = (r10 - r9)|0;
+ r9 = r9 >> 2;
+ r9 = heap32[(r9+10)];
+ r7 = (r7 + -1)|0;
+ heap32[(r8+10)] = r9;
+if(!(r5 !=r7)) //_LBB143_5
+{
+break _6;
+}
+}
+}
+ r1 = heap32[(r1)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+5)];
+ r5 = heap32[(r2+24)];
+ r6 = _2E_str32;
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r4;
+ heap32[(g0+2)] = r6;
+ heap32[(g0+3)] = 1497453121;
+ heap32[(g0+4)] = r5;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+}
+}
+else{
+ heap32[(r0+16)] = 0;
+}
+ r1 = heap32[(r2+32)];
+ heap32[(r0+15)] = r1;
+ r1 = heap32[(r2+32)];
+ if(r1 !=0) //_LBB143_9
+{
+ r1 = r3 >> 2;
+ r4 = heap32[(r1)];
+ r4 = r4 >> 2;
+ r4 = heap32[(r4+7)];
+ r5 = heap32[(r2+34)];
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r5;
+ __FUNCTION_TABLE__[(r4)>>2](i7);
+ r4 = r_g0;
+ heap32[(r0+17)] = r4;
+if(!(r4 ==0)) //_LBB143_14
+{
+ r4 = heap32[(r1)];
+ r4 = r4 >> 2;
+ r5 = heap32[(r2+32)];
+ r4 = heap32[(r4+4)];
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = 16;
+ heap32[(g0+2)] = r5;
+ __FUNCTION_TABLE__[(r4)>>2](i7);
+ r4 = r_g0;
+_14: do {
+if(!(r5 <1)) //_LBB143_13
+{
+ r6 = r4 >> 2;
+ r7 = 0;
+ r6 = heap32[(r6+2)];
+ r5 = (r7 - r5)|0;
+_16: while(true){
+ r8 = r7 << 4;
+ r9 = heap32[(r2+34)];
+ r9 = (r9 - r8)|0;
+ r9 = r9 >> 2;
+ r10 = (r6 - r8)|0;
+ r9 = heap32[(r9+3)];
+ r11 = r10 >> 2;
+ heap32[(r11+3)] = r9;
+ r9 = heap32[(r2+34)];
+ r9 = (r9 - r8)|0;
+ r9 = heapU16[(r9+6)>>1];
+ heap16[(r10+6)>>1] = r9;
+ r9 = heap32[(r2+34)];
+ r9 = (r9 - r8)|0;
+ r9 = heapU16[(r9+8)>>1];
+ heap16[(r10+8)>>1] = r9;
+ r9 = heap32[(r2+34)];
+ r9 = (r9 - r8)|0;
+ r9 = heapU16[(r9+10)>>1];
+ heap16[(r10+10)>>1] = r9;
+ r9 = heap32[(r2+34)];
+ r9 = (r9 - r8)|0;
+ r9 = heapU16[(r9)>>1];
+ heap16[(r10)>>1] = r9;
+ r9 = heap32[(r2+34)];
+ r9 = (r9 - r8)|0;
+ r9 = heapU16[(r9+2)>>1];
+ heap16[(r10+2)>>1] = r9;
+ r9 = heap32[(r2+34)];
+ r8 = (r9 - r8)|0;
+ r8 = heapU16[(r8+4)>>1];
+ r7 = (r7 + -1)|0;
+ heap16[(r10+4)>>1] = r8;
+if(!(r5 !=r7)) //_LBB143_12
+{
+break _14;
+}
+}
+}
+} while(0);
+ r1 = heap32[(r1)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+5)];
+ r5 = heap32[(r2+34)];
+ r6 = _2E_str133;
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r4;
+ heap32[(g0+2)] = r6;
+ heap32[(g0+3)] = 1497453121;
+ heap32[(g0+4)] = r5;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+}
+}
+else{
+ heap32[(r0+17)] = 0;
+}
+ r1 = heap32[(r2+36)];
+ heap32[(r0+19)] = r1;
+ r1 = heap32[(r2+38)];
+ heap32[(r0+20)] = r1;
+ r1 = heap32[(r2+38)];
+ if(r1 !=0) //_LBB143_16
+{
+ r1 = r3 >> 2;
+ r4 = heap32[(r1)];
+ r4 = r4 >> 2;
+ r4 = heap32[(r4+7)];
+ r5 = heap32[(r2+40)];
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r5;
+ __FUNCTION_TABLE__[(r4)>>2](i7);
+ r4 = r_g0;
+ heap32[(r0+18)] = r4;
+if(!(r4 ==0)) //_LBB143_21
+{
+ r0 = heap32[(r1)];
+ r0 = r0 >> 2;
+ r4 = heap32[(r2+38)];
+ r0 = heap32[(r0+4)];
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = 20;
+ heap32[(g0+2)] = r4;
+ __FUNCTION_TABLE__[(r0)>>2](i7);
+ r0 = r_g0;
+_24: do {
+if(!(r4 <1)) //_LBB143_20
+{
+ r5 = r0 >> 2;
+ r6 = 0;
+ r5 = heap32[(r5+2)];
+ r4 = (r6 - r4)|0;
+_26: while(true){
+ r7 = r6 << 5;
+ r8 = heap32[(r2+40)];
+ r9 = (r6 * -10)|0;
+ r8 = (r8 - r7)|0;
+ r8 = heapU16[(r8+6)>>1];
+ r9 = r9 << 1;
+ r9 = (r5 + r9)|0;
+ heap16[(r9+14)>>1] = r8;
+ r8 = heap32[(r2+40)];
+ r8 = (r8 - r7)|0;
+ r8 = heapU16[(r8+8)>>1];
+ heap16[(r9+16)>>1] = r8;
+ r8 = heap32[(r2+40)];
+ r8 = (r8 - r7)|0;
+ r8 = heapU16[(r8+10)>>1];
+ heap16[(r9+18)>>1] = r8;
+ r8 = heap32[(r2+40)];
+ r8 = (r8 - r7)|0;
+ r8 = heapU16[(r8)>>1];
+ heap16[(r9+8)>>1] = r8;
+ r8 = heap32[(r2+40)];
+ r8 = (r8 - r7)|0;
+ r8 = heapU16[(r8+2)>>1];
+ heap16[(r9+10)>>1] = r8;
+ r8 = heap32[(r2+40)];
+ r8 = (r8 - r7)|0;
+ r8 = heapU16[(r8+4)>>1];
+ heap16[(r9+12)>>1] = r8;
+ r8 = heap32[(r2+40)];
+ r9 = (r6 * -5)|0;
+ r8 = (r8 - r7)|0;
+ r9 = r9 << 2;
+ r8 = r8 >> 2;
+ r9 = (r5 + r9)|0;
+ r8 = heap32[(r8+3)];
+ r9 = r9 >> 2;
+ heap32[(r9)] = r8;
+ r8 = heap32[(r2+40)];
+ r7 = (r8 - r7)|0;
+ r7 = r7 >> 2;
+ r7 = heap32[(r7+4)];
+ r6 = (r6 + -1)|0;
+ heap32[(r9+1)] = r7;
+if(!(r4 !=r6)) //_LBB143_19
+{
+break _24;
+}
+}
+}
+} while(0);
+ r1 = heap32[(r1)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+5)];
+ r2 = heap32[(r2+40)];
+ r4 = _2E_str234;
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r0;
+ heap32[(g0+2)] = r4;
+ heap32[(g0+3)] = 1497453121;
+ heap32[(g0+4)] = r2;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+}
+}
+else{
+ heap32[(r0+18)] = 0;
+}
+ r0 = _2E_str335;
+ r_g0 = r0;
+ return;
+}
+
+function _ZN14btQuantizedBvhD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ heap32[(g0)] = r0;
+ _ZN14btQuantizedBvhD2Ev(i7);
+ return;
+}
+
+function _ZN14btQuantizedBvhD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV14btQuantizedBvh;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ r1 = heap32[(r2+40)];
+if(!(r1 ==0)) //_LBB145_4
+{
+ r3 = heapU8[r0+164];
+if(!(r3 ==0)) //_LBB145_3
+{
+ r3 = gNumAlignedFree;
+ r3 = r3 >> 2;
+ r4 = heap32[(r3)];
+ r4 = (r4 + 1)|0;
+ r1 = r1 >> 2;
+ heap32[(r3)] = r4;
+ r1 = heap32[(r1+-1)];
+ heap32[(g0)] = r1;
+ free(i7);
+}
+ heap32[(r2+40)] = 0;
+}
+ r1 = 1;
+ heap8[r0+164] = r1;
+ heap32[(r2+40)] = 0;
+ heap32[(r2+38)] = 0;
+ heap32[(r2+39)] = 0;
+ r3 = heap32[(r2+34)];
+if(!(r3 ==0)) //_LBB145_8
+{
+ r4 = heapU8[r0+140];
+if(!(r4 ==0)) //_LBB145_7
+{
+ r4 = gNumAlignedFree;
+ r4 = r4 >> 2;
+ r5 = heap32[(r4)];
+ r5 = (r5 + 1)|0;
+ r3 = r3 >> 2;
+ heap32[(r4)] = r5;
+ r3 = heap32[(r3+-1)];
+ heap32[(g0)] = r3;
+ free(i7);
+}
+ heap32[(r2+34)] = 0;
+}
+ heap8[r0+140] = r1;
+ heap32[(r2+34)] = 0;
+ heap32[(r2+32)] = 0;
+ heap32[(r2+33)] = 0;
+ r3 = heap32[(r2+29)];
+if(!(r3 ==0)) //_LBB145_12
+{
+ r4 = heapU8[r0+120];
+if(!(r4 ==0)) //_LBB145_11
+{
+ r4 = gNumAlignedFree;
+ r4 = r4 >> 2;
+ r5 = heap32[(r4)];
+ r5 = (r5 + 1)|0;
+ r3 = r3 >> 2;
+ heap32[(r4)] = r5;
+ r3 = heap32[(r3+-1)];
+ heap32[(g0)] = r3;
+ free(i7);
+}
+ heap32[(r2+29)] = 0;
+}
+ heap8[r0+120] = r1;
+ heap32[(r2+29)] = 0;
+ heap32[(r2+27)] = 0;
+ heap32[(r2+28)] = 0;
+ r3 = heap32[(r2+24)];
+if(!(r3 ==0)) //_LBB145_16
+{
+ r4 = heapU8[r0+100];
+if(!(r4 ==0)) //_LBB145_15
+{
+ r4 = gNumAlignedFree;
+ r4 = r4 >> 2;
+ r5 = heap32[(r4)];
+ r5 = (r5 + 1)|0;
+ r3 = r3 >> 2;
+ heap32[(r4)] = r5;
+ r3 = heap32[(r3+-1)];
+ heap32[(g0)] = r3;
+ free(i7);
+}
+ heap32[(r2+24)] = 0;
+}
+ heap8[r0+100] = r1;
+ heap32[(r2+24)] = 0;
+ heap32[(r2+22)] = 0;
+ heap32[(r2+23)] = 0;
+ r3 = heap32[(r2+19)];
+if(!(r3 ==0)) //_LBB145_20
+{
+ r4 = heapU8[r0+80];
+if(!(r4 ==0)) //_LBB145_19
+{
+ r4 = gNumAlignedFree;
+ r4 = r4 >> 2;
+ r5 = heap32[(r4)];
+ r5 = (r5 + 1)|0;
+ r3 = r3 >> 2;
+ heap32[(r4)] = r5;
+ r3 = heap32[(r3+-1)];
+ heap32[(g0)] = r3;
+ free(i7);
+}
+ heap32[(r2+19)] = 0;
+}
+ heap8[r0+80] = r1;
+ heap32[(r2+19)] = 0;
+ heap32[(r2+17)] = 0;
+ heap32[(r2+18)] = 0;
+if(!(r0 ==0)) //_LBB145_22
+{
+ r0 = gNumAlignedFree;
+ r0 = r0 >> 2;
+ r1 = heap32[(r0)];
+ r1 = (r1 + 1)|0;
+ heap32[(r0)] = r1;
+ r0 = heap32[(r2+-1)];
+ heap32[(g0)] = r0;
+ free(i7);
+}
+ return;
+}
+
+function _ZNK14btQuantizedBvh9serializeEPvjb(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ r2 = heap32[(r1+38)];
+ r3 = heap32[(r1+42)];
+ if(r3 ==r2) //_LBB146_2
+{
+ r3 = heap32[(fp+1)];
+ r4 = heap32[(fp+3)];
+ r5 = _ZTV14btQuantizedBvh;
+ r6 = r3 >> 2;
+ r5 = (r5 + 8)|0;
+ heap32[(r1+42)] = r2;
+ heap32[(r6)] = r5;
+ r2 = 0;
+ heap32[(r6+13)] = 277;
+ r5 = 1;
+ heap8[r3+60] = r2;
+ heap8[r3+80] = r5;
+ heap32[(r6+19)] = 0;
+ heap32[(r6+17)] = 0;
+ heap32[(r6+18)] = 0;
+ heap8[r3+100] = r5;
+ heap32[(r6+24)] = 0;
+ heap32[(r6+22)] = 0;
+ heap32[(r6+23)] = 0;
+ heap8[r3+120] = r5;
+ heap32[(r6+29)] = 0;
+ heap32[(r6+27)] = 0;
+ heap32[(r6+28)] = 0;
+ heap8[r3+140] = r5;
+ heap32[(r6+34)] = 0;
+ heap32[(r6+32)] = 0;
+ heap32[(r6+33)] = 0;
+ heap32[(r6+36)] = 0;
+ heap8[r3+164] = r5;
+ heap32[(r6+40)] = 0;
+ heap32[(r6+38)] = 0;
+ heap32[(r6+39)] = 0;
+ heap32[(r6+42)] = 0;
+ heap32[(r6+1)] = -8388609;
+ heap32[(r6+2)] = -8388609;
+ heap32[(r6+3)] = -8388609;
+ heap32[(r6+4)] = 0;
+ heap32[(r6+5)] = 2139095039;
+ heap32[(r6+6)] = 2139095039;
+ heap32[(r6+7)] = 2139095039;
+ heap32[(r6+8)] = 0;
+ r7 = heap32[(r1+14)];
+ if(r4 ==0) //_LBB146_4
+{
+ heap32[(r6+14)] = r7;
+ heap32[(r6+1)] = heap32[(r1+1)];
+ heap32[(r6+2)] = heap32[(r1+2)];
+ heap32[(r6+3)] = heap32[(r1+3)];
+ heap32[(r6+4)] = heap32[(r1+4)];
+ heap32[(r6+5)] = heap32[(r1+5)];
+ heap32[(r6+6)] = heap32[(r1+6)];
+ heap32[(r6+7)] = heap32[(r1+7)];
+ heap32[(r6+8)] = heap32[(r1+8)];
+ heap32[(r6+9)] = heap32[(r1+9)];
+ heap32[(r6+10)] = heap32[(r1+10)];
+ heap32[(r6+11)] = heap32[(r1+11)];
+ heap32[(r6+12)] = heap32[(r1+12)];
+ r7 = heap32[(r1+36)];
+ heap32[(r6+36)] = r7;
+ r7 = heap32[(r1+42)];
+}
+else{
+ r8 = r7 << 8;
+ r9 = r7 >>> 8;
+ r10 = r7 << 24;
+ r8 = r8 & 16711680;
+ r9 = r9 & 65280;
+ r7 = r7 >>> 24;
+ r8 = r10 | r8;
+ r7 = r9 | r7;
+ r7 = r8 | r7;
+ heap32[(r6+14)] = r7;
+ r7 = heapU8[r0+7];
+ heap8[r3+4] = r7;
+ r7 = heapU8[r0+6];
+ heap8[r3+5] = r7;
+ r7 = heapU8[r0+5];
+ heap8[r3+6] = r7;
+ r7 = heapU8[r0+4];
+ heap8[r3+7] = r7;
+ r7 = heapU8[r0+11];
+ heap8[r3+8] = r7;
+ r7 = heapU8[r0+10];
+ heap8[r3+9] = r7;
+ r7 = heapU8[r0+9];
+ heap8[r3+10] = r7;
+ r7 = heapU8[r0+8];
+ heap8[r3+11] = r7;
+ r7 = heapU8[r0+15];
+ heap8[r3+12] = r7;
+ r7 = heapU8[r0+14];
+ heap8[r3+13] = r7;
+ r7 = heapU8[r0+13];
+ heap8[r3+14] = r7;
+ r7 = heapU8[r0+12];
+ heap8[r3+15] = r7;
+ r7 = heapU8[r0+19];
+ heap8[r3+16] = r7;
+ r7 = heapU8[r0+18];
+ heap8[r3+17] = r7;
+ r7 = heapU8[r0+17];
+ heap8[r3+18] = r7;
+ r7 = heapU8[r0+16];
+ heap8[r3+19] = r7;
+ r7 = heapU8[r0+23];
+ heap8[r3+20] = r7;
+ r7 = heapU8[r0+22];
+ heap8[r3+21] = r7;
+ r7 = heapU8[r0+21];
+ heap8[r3+22] = r7;
+ r7 = heapU8[r0+20];
+ heap8[r3+23] = r7;
+ r7 = heapU8[r0+27];
+ heap8[r3+24] = r7;
+ r7 = heapU8[r0+26];
+ heap8[r3+25] = r7;
+ r7 = heapU8[r0+25];
+ heap8[r3+26] = r7;
+ r7 = heapU8[r0+24];
+ heap8[r3+27] = r7;
+ r7 = heapU8[r0+31];
+ heap8[r3+28] = r7;
+ r7 = heapU8[r0+30];
+ heap8[r3+29] = r7;
+ r7 = heapU8[r0+29];
+ heap8[r3+30] = r7;
+ r7 = heapU8[r0+28];
+ heap8[r3+31] = r7;
+ r7 = heapU8[r0+35];
+ heap8[r3+32] = r7;
+ r7 = heapU8[r0+34];
+ heap8[r3+33] = r7;
+ r7 = heapU8[r0+33];
+ heap8[r3+34] = r7;
+ r7 = heapU8[r0+32];
+ heap8[r3+35] = r7;
+ r7 = heapU8[r0+39];
+ heap8[r3+36] = r7;
+ r7 = heapU8[r0+38];
+ heap8[r3+37] = r7;
+ r7 = heapU8[r0+37];
+ heap8[r3+38] = r7;
+ r7 = heapU8[r0+36];
+ heap8[r3+39] = r7;
+ r7 = heapU8[r0+43];
+ heap8[r3+40] = r7;
+ r7 = heapU8[r0+42];
+ heap8[r3+41] = r7;
+ r7 = heapU8[r0+41];
+ heap8[r3+42] = r7;
+ r7 = heapU8[r0+40];
+ heap8[r3+43] = r7;
+ r7 = heapU8[r0+47];
+ heap8[r3+44] = r7;
+ r7 = heapU8[r0+46];
+ heap8[r3+45] = r7;
+ r7 = heapU8[r0+45];
+ heap8[r3+46] = r7;
+ r7 = heapU8[r0+44];
+ heap8[r3+47] = r7;
+ r7 = heapU8[r0+51];
+ heap8[r3+48] = r7;
+ r7 = heapU8[r0+50];
+ heap8[r3+49] = r7;
+ r7 = heapU8[r0+49];
+ heap8[r3+50] = r7;
+ r7 = heapU8[r0+48];
+ heap8[r3+51] = r7;
+ r7 = heap32[(r1+36)];
+ r8 = r7 << 8;
+ r9 = r7 >>> 8;
+ r10 = r7 << 24;
+ r8 = r8 & 16711680;
+ r9 = r9 & 65280;
+ r7 = r7 >>> 24;
+ r8 = r10 | r8;
+ r7 = r9 | r7;
+ r7 = r8 | r7;
+ heap32[(r6+36)] = r7;
+ r7 = heap32[(r1+42)];
+ r8 = r7 << 8;
+ r9 = r7 >>> 8;
+ r10 = r7 << 24;
+ r8 = r8 & 16711680;
+ r9 = r9 & 65280;
+ r7 = r7 >>> 24;
+ r8 = r10 | r8;
+ r7 = r9 | r7;
+ r7 = r8 | r7;
+}
+ heap32[(r6+42)] = r7;
+ r7 = heapU8[r0+60];
+ heap8[r3+60] = r7;
+ r7 = (r3 + 172)|0;
+ r8 = heap32[(r1+14)];
+ r0 = heapU8[r0+60];
+ if(r0 ==0) //_LBB146_20
+{
+ r0 = 0;
+ heap8[r3+100] = r0;
+ heap32[(r6+24)] = r7;
+ heap32[(r6+22)] = r8;
+ heap32[(r6+23)] = r8;
+_9: do {
+ if(r4 !=0) //_LBB146_22
+{
+if(!(r8 <1)) //_LBB146_29
+{
+ r5 = (r5 - r8)|0;
+_12: while(true){
+ r2 = r0 << 6;
+ r9 = heap32[(r1+24)];
+ r9 = (r9 - r2)|0;
+ r10 = heapU8[r9+3];
+ r7 = (r7 - r2)|0;
+ heap8[r7] = r10;
+ r10 = heapU8[r9+2];
+ heap8[r7+1] = r10;
+ r10 = heapU8[r9+1];
+ heap8[r7+2] = r10;
+ r10 = heapU8[r9];
+ heap8[r7+3] = r10;
+ r10 = heapU8[r9+7];
+ heap8[r7+4] = r10;
+ r10 = heapU8[r9+6];
+ heap8[r7+5] = r10;
+ r10 = heapU8[r9+5];
+ heap8[r7+6] = r10;
+ r10 = heapU8[r9+4];
+ heap8[r7+7] = r10;
+ r10 = heapU8[r9+11];
+ heap8[r7+8] = r10;
+ r10 = heapU8[r9+10];
+ heap8[r7+9] = r10;
+ r10 = heapU8[r9+9];
+ heap8[r7+10] = r10;
+ r10 = heapU8[r9+8];
+ heap8[r7+11] = r10;
+ r10 = heapU8[r9+15];
+ heap8[r7+12] = r10;
+ r10 = heapU8[r9+14];
+ heap8[r7+13] = r10;
+ r10 = heapU8[r9+13];
+ heap8[r7+14] = r10;
+ r9 = heapU8[r9+12];
+ heap8[r7+15] = r9;
+ r7 = heap32[(r1+24)];
+ r7 = (r7 - r2)|0;
+ r9 = heap32[(r6+24)];
+ r10 = heapU8[r7+19];
+ r9 = (r9 - r2)|0;
+ heap8[r9+16] = r10;
+ r10 = heapU8[r7+18];
+ heap8[r9+17] = r10;
+ r10 = heapU8[r7+17];
+ heap8[r9+18] = r10;
+ r10 = heapU8[r7+16];
+ heap8[r9+19] = r10;
+ r10 = heapU8[r7+23];
+ heap8[r9+20] = r10;
+ r10 = heapU8[r7+22];
+ heap8[r9+21] = r10;
+ r10 = heapU8[r7+21];
+ heap8[r9+22] = r10;
+ r10 = heapU8[r7+20];
+ heap8[r9+23] = r10;
+ r10 = heapU8[r7+27];
+ heap8[r9+24] = r10;
+ r10 = heapU8[r7+26];
+ heap8[r9+25] = r10;
+ r10 = heapU8[r7+25];
+ heap8[r9+26] = r10;
+ r10 = heapU8[r7+24];
+ heap8[r9+27] = r10;
+ r10 = heapU8[r7+31];
+ heap8[r9+28] = r10;
+ r10 = heapU8[r7+30];
+ heap8[r9+29] = r10;
+ r10 = heapU8[r7+29];
+ heap8[r9+30] = r10;
+ r7 = heapU8[r7+28];
+ heap8[r9+31] = r7;
+ r7 = heap32[(r1+24)];
+ r7 = (r7 - r2)|0;
+ r7 = r7 >> 2;
+ r7 = heap32[(r7+8)];
+ r9 = r7 << 8;
+ r10 = r7 >>> 8;
+ r11 = heap32[(r6+24)];
+ r12 = r7 << 24;
+ r9 = r9 & 16711680;
+ r10 = r10 & 65280;
+ r7 = r7 >>> 24;
+ r11 = (r11 - r2)|0;
+ r9 = r12 | r9;
+ r7 = r10 | r7;
+ r10 = r11 >> 2;
+ r7 = r9 | r7;
+ heap32[(r10+8)] = r7;
+ r7 = heap32[(r1+24)];
+ r7 = (r7 - r2)|0;
+ r7 = r7 >> 2;
+ r7 = heap32[(r7+9)];
+ r9 = r7 << 8;
+ r10 = r7 >>> 8;
+ r11 = heap32[(r6+24)];
+ r12 = r7 << 24;
+ r9 = r9 & 16711680;
+ r10 = r10 & 65280;
+ r7 = r7 >>> 24;
+ r11 = (r11 - r2)|0;
+ r9 = r12 | r9;
+ r7 = r10 | r7;
+ r10 = r11 >> 2;
+ r7 = r9 | r7;
+ heap32[(r10+9)] = r7;
+ r7 = heap32[(r1+24)];
+ r7 = (r7 - r2)|0;
+ r7 = r7 >> 2;
+ r7 = heap32[(r7+10)];
+ r9 = r7 << 8;
+ r10 = r7 >>> 8;
+ r11 = heap32[(r6+24)];
+ r12 = r7 << 24;
+ r9 = r9 & 16711680;
+ r10 = r10 & 65280;
+ r7 = r7 >>> 24;
+ r2 = (r11 - r2)|0;
+ r9 = r12 | r9;
+ r7 = r10 | r7;
+ r2 = r2 >> 2;
+ r7 = r9 | r7;
+ heap32[(r2+10)] = r7;
+ if(r5 ==r0) //_LBB146_29
+{
+break _9;
+}
+else{
+ r7 = heap32[(r6+24)];
+ r0 = (r0 + -1)|0;
+}
+}
+}
+}
+else{
+ if(r8 >0) //_LBB146_26
+{
+ r5 = (r5 - r8)|0;
+ r0 = 0;
+_17: while(true){
+ r2 = r0 << 6;
+ r9 = heap32[(r1+24)];
+ r7 = (r7 - r2)|0;
+ r9 = (r9 - r2)|0;
+ r7 = r7 >> 2;
+ r9 = r9 >> 2;
+ heap32[(r7)] = heap32[(r9)];
+ heap32[(r7+1)] = heap32[(r9+1)];
+ heap32[(r7+2)] = heap32[(r9+2)];
+ heap32[(r7+3)] = heap32[(r9+3)];
+ r7 = heap32[(r6+24)];
+ r9 = heap32[(r1+24)];
+ r7 = (r7 - r2)|0;
+ r9 = (r9 - r2)|0;
+ r7 = r7 >> 2;
+ r9 = r9 >> 2;
+ heap32[(r7+4)] = heap32[(r9+4)];
+ heap32[(r7+5)] = heap32[(r9+5)];
+ heap32[(r7+6)] = heap32[(r9+6)];
+ heap32[(r7+7)] = heap32[(r9+7)];
+ r7 = heap32[(r1+24)];
+ r7 = (r7 - r2)|0;
+ r7 = r7 >> 2;
+ r9 = heap32[(r6+24)];
+ r9 = (r9 - r2)|0;
+ r7 = heap32[(r7+8)];
+ r9 = r9 >> 2;
+ heap32[(r9+8)] = r7;
+ r7 = heap32[(r1+24)];
+ r7 = (r7 - r2)|0;
+ r7 = r7 >> 2;
+ r9 = heap32[(r6+24)];
+ r9 = (r9 - r2)|0;
+ r7 = heap32[(r7+9)];
+ r9 = r9 >> 2;
+ heap32[(r9+9)] = r7;
+ r7 = heap32[(r1+24)];
+ r7 = (r7 - r2)|0;
+ r7 = r7 >> 2;
+ r9 = heap32[(r6+24)];
+ r2 = (r9 - r2)|0;
+ r7 = heap32[(r7+10)];
+ r2 = r2 >> 2;
+ heap32[(r2+10)] = r7;
+ if(r5 ==r0) //_LBB146_29
+{
+break _9;
+}
+else{
+ r7 = heap32[(r6+24)];
+ r0 = (r0 + -1)|0;
+}
+}
+}
+}
+} while(0);
+ r5 = heap32[(r6+24)];
+if(!(r5 ==0)) //_LBB146_33
+{
+ r0 = heapU8[r3+100];
+if(!(r0 ==0)) //_LBB146_32
+{
+ r0 = gNumAlignedFree;
+ r0 = r0 >> 2;
+ r2 = heap32[(r0)];
+ r2 = (r2 + 1)|0;
+ r5 = r5 >> 2;
+ heap32[(r0)] = r2;
+ r5 = heap32[(r5+-1)];
+ heap32[(g0)] = r5;
+ free(i7);
+}
+ heap32[(r6+24)] = 0;
+}
+ r5 = r8 << 6;
+ r0 = 0;
+ heap8[r3+100] = r0;
+ heap32[(r6+24)] = 0;
+ heap32[(r6+22)] = 0;
+ heap32[(r6+23)] = 0;
+}
+else{
+ heap8[r3+140] = r2;
+ heap32[(r6+34)] = r7;
+ heap32[(r6+32)] = r8;
+ heap32[(r6+33)] = r8;
+_28: do {
+ if(r4 !=0) //_LBB146_8
+{
+if(!(r8 <1)) //_LBB146_15
+{
+ r5 = (r5 - r8)|0;
+_31: while(true){
+ r0 = heap32[(r1+34)];
+ r9 = r2 << 4;
+ r0 = (r0 - r9)|0;
+ r0 = heapU16[(r0)>>1];
+ r10 = r0 << 8;
+ r0 = r0 << 24;
+ r10 = r10 & 16711680;
+ r0 = r0 | r10;
+ r7 = (r7 - r9)|0;
+ r0 = r0 >>> 16;
+ heap16[(r7)>>1] = r0;
+ r7 = heap32[(r1+34)];
+ r7 = (r7 - r9)|0;
+ r7 = heapU16[(r7+2)>>1];
+ r0 = r7 << 8;
+ r7 = r7 << 24;
+ r0 = r0 & 16711680;
+ r10 = heap32[(r6+34)];
+ r7 = r7 | r0;
+ r0 = (r10 - r9)|0;
+ r7 = r7 >>> 16;
+ heap16[(r0+2)>>1] = r7;
+ r7 = heap32[(r1+34)];
+ r7 = (r7 - r9)|0;
+ r7 = heapU16[(r7+4)>>1];
+ r0 = r7 << 8;
+ r7 = r7 << 24;
+ r0 = r0 & 16711680;
+ r10 = heap32[(r6+34)];
+ r7 = r7 | r0;
+ r0 = (r10 - r9)|0;
+ r7 = r7 >>> 16;
+ heap16[(r0+4)>>1] = r7;
+ r7 = heap32[(r1+34)];
+ r7 = (r7 - r9)|0;
+ r7 = heapU16[(r7+6)>>1];
+ r0 = r7 << 8;
+ r7 = r7 << 24;
+ r0 = r0 & 16711680;
+ r10 = heap32[(r6+34)];
+ r7 = r7 | r0;
+ r0 = (r10 - r9)|0;
+ r7 = r7 >>> 16;
+ heap16[(r0+6)>>1] = r7;
+ r7 = heap32[(r1+34)];
+ r7 = (r7 - r9)|0;
+ r7 = heapU16[(r7+8)>>1];
+ r0 = r7 << 8;
+ r7 = r7 << 24;
+ r0 = r0 & 16711680;
+ r10 = heap32[(r6+34)];
+ r7 = r7 | r0;
+ r0 = (r10 - r9)|0;
+ r7 = r7 >>> 16;
+ heap16[(r0+8)>>1] = r7;
+ r7 = heap32[(r1+34)];
+ r7 = (r7 - r9)|0;
+ r7 = heapU16[(r7+10)>>1];
+ r0 = r7 << 8;
+ r7 = r7 << 24;
+ r0 = r0 & 16711680;
+ r10 = heap32[(r6+34)];
+ r7 = r7 | r0;
+ r0 = (r10 - r9)|0;
+ r7 = r7 >>> 16;
+ heap16[(r0+10)>>1] = r7;
+ r7 = heap32[(r1+34)];
+ r7 = (r7 - r9)|0;
+ r7 = r7 >> 2;
+ r7 = heap32[(r7+3)];
+ r0 = r7 << 8;
+ r10 = r7 >>> 8;
+ r11 = heap32[(r6+34)];
+ r12 = r7 << 24;
+ r0 = r0 & 16711680;
+ r10 = r10 & 65280;
+ r7 = r7 >>> 24;
+ r9 = (r11 - r9)|0;
+ r0 = r12 | r0;
+ r7 = r10 | r7;
+ r9 = r9 >> 2;
+ r7 = r0 | r7;
+ heap32[(r9+3)] = r7;
+ if(r5 ==r2) //_LBB146_15
+{
+break _28;
+}
+else{
+ r7 = heap32[(r6+34)];
+ r2 = (r2 + -1)|0;
+}
+}
+}
+}
+else{
+ if(r8 >0) //_LBB146_12
+{
+ r5 = (r5 - r8)|0;
+ r0 = 0;
+_36: while(true){
+ r2 = r0 << 4;
+ r9 = heap32[(r1+34)];
+ r9 = (r9 - r2)|0;
+ r9 = heapU16[(r9)>>1];
+ r7 = (r7 - r2)|0;
+ heap16[(r7)>>1] = r9;
+ r7 = heap32[(r1+34)];
+ r7 = (r7 - r2)|0;
+ r9 = heap32[(r6+34)];
+ r7 = heapU16[(r7+2)>>1];
+ r9 = (r9 - r2)|0;
+ heap16[(r9+2)>>1] = r7;
+ r7 = heap32[(r1+34)];
+ r7 = (r7 - r2)|0;
+ r9 = heap32[(r6+34)];
+ r7 = heapU16[(r7+4)>>1];
+ r9 = (r9 - r2)|0;
+ heap16[(r9+4)>>1] = r7;
+ r7 = heap32[(r1+34)];
+ r7 = (r7 - r2)|0;
+ r9 = heap32[(r6+34)];
+ r7 = heapU16[(r7+6)>>1];
+ r9 = (r9 - r2)|0;
+ heap16[(r9+6)>>1] = r7;
+ r7 = heap32[(r1+34)];
+ r7 = (r7 - r2)|0;
+ r9 = heap32[(r6+34)];
+ r7 = heapU16[(r7+8)>>1];
+ r9 = (r9 - r2)|0;
+ heap16[(r9+8)>>1] = r7;
+ r7 = heap32[(r1+34)];
+ r7 = (r7 - r2)|0;
+ r9 = heap32[(r6+34)];
+ r7 = heapU16[(r7+10)>>1];
+ r9 = (r9 - r2)|0;
+ heap16[(r9+10)>>1] = r7;
+ r7 = heap32[(r1+34)];
+ r7 = (r7 - r2)|0;
+ r7 = r7 >> 2;
+ r9 = heap32[(r6+34)];
+ r2 = (r9 - r2)|0;
+ r7 = heap32[(r7+3)];
+ r2 = r2 >> 2;
+ heap32[(r2+3)] = r7;
+ if(r5 ==r0) //_LBB146_15
+{
+break _28;
+}
+else{
+ r7 = heap32[(r6+34)];
+ r0 = (r0 + -1)|0;
+}
+}
+}
+}
+} while(0);
+ r5 = heap32[(r6+34)];
+if(!(r5 ==0)) //_LBB146_19
+{
+ r7 = heapU8[r3+140];
+if(!(r7 ==0)) //_LBB146_18
+{
+ r7 = gNumAlignedFree;
+ r7 = r7 >> 2;
+ r0 = heap32[(r7)];
+ r0 = (r0 + 1)|0;
+ r5 = r5 >> 2;
+ heap32[(r7)] = r0;
+ r5 = heap32[(r5+-1)];
+ heap32[(g0)] = r5;
+ free(i7);
+}
+ heap32[(r6+34)] = 0;
+}
+ r5 = r8 << 4;
+ r7 = 0;
+ heap8[r3+140] = r7;
+ heap32[(r6+34)] = 0;
+ heap32[(r6+32)] = 0;
+ heap32[(r6+33)] = 0;
+}
+ r0 = heap32[(r6+40)];
+ r2 = heap32[(r1+42)];
+if(!(r0 ==0)) //_LBB146_38
+{
+ r7 = heapU8[r3+164];
+if(!(r7 ==0)) //_LBB146_37
+{
+ r7 = gNumAlignedFree;
+ r7 = r7 >> 2;
+ r8 = heap32[(r7)];
+ r8 = (r8 + 1)|0;
+ r0 = r0 >> 2;
+ heap32[(r7)] = r8;
+ r0 = heap32[(r0+-1)];
+ heap32[(g0)] = r0;
+ free(i7);
+}
+ heap32[(r6+40)] = 0;
+}
+ r0 = (r5 + r3)|0;
+ r0 = (r0 + 172)|0;
+ r5 = 0;
+ heap8[r3+164] = r5;
+ heap32[(r6+40)] = r0;
+ heap32[(r6+38)] = r2;
+ heap32[(r6+39)] = r2;
+ r2 = heap32[(r1+42)];
+_53: do {
+ if(r4 !=0) //_LBB146_40
+{
+if(!(r2 <1)) //_LBB146_46
+{
+__label__ = 41; //SET chanka
+_55: while(true){
+ r2 = r5 << 5;
+ r4 = heap32[(r1+40)];
+ r4 = heapU16[(r4+r2)>>1];
+ r7 = r4 << 8;
+ r4 = r4 << 24;
+ r7 = r7 & 16711680;
+ r4 = r4 | r7;
+ r4 = r4 >>> 16;
+ heap16[(r0+r2)>>1] = r4;
+ r0 = heap32[(r1+40)];
+ r0 = (r0 + r2)|0;
+ r0 = heapU16[(r0+2)>>1];
+ r4 = r0 << 8;
+ r0 = r0 << 24;
+ r4 = r4 & 16711680;
+ r7 = heap32[(r6+40)];
+ r0 = r0 | r4;
+ r4 = (r7 + r2)|0;
+ r0 = r0 >>> 16;
+ heap16[(r4+2)>>1] = r0;
+ r0 = heap32[(r1+40)];
+ r0 = (r0 + r2)|0;
+ r0 = heapU16[(r0+4)>>1];
+ r4 = r0 << 8;
+ r0 = r0 << 24;
+ r4 = r4 & 16711680;
+ r7 = heap32[(r6+40)];
+ r0 = r0 | r4;
+ r4 = (r7 + r2)|0;
+ r0 = r0 >>> 16;
+ heap16[(r4+4)>>1] = r0;
+ r0 = heap32[(r1+40)];
+ r0 = (r0 + r2)|0;
+ r0 = heapU16[(r0+6)>>1];
+ r4 = r0 << 8;
+ r0 = r0 << 24;
+ r4 = r4 & 16711680;
+ r7 = heap32[(r6+40)];
+ r0 = r0 | r4;
+ r4 = (r7 + r2)|0;
+ r0 = r0 >>> 16;
+ heap16[(r4+6)>>1] = r0;
+ r0 = heap32[(r1+40)];
+ r0 = (r0 + r2)|0;
+ r0 = heapU16[(r0+8)>>1];
+ r4 = r0 << 8;
+ r0 = r0 << 24;
+ r4 = r4 & 16711680;
+ r7 = heap32[(r6+40)];
+ r0 = r0 | r4;
+ r4 = (r7 + r2)|0;
+ r0 = r0 >>> 16;
+ heap16[(r4+8)>>1] = r0;
+ r0 = heap32[(r1+40)];
+ r0 = (r0 + r2)|0;
+ r0 = heapU16[(r0+10)>>1];
+ r4 = r0 << 8;
+ r0 = r0 << 24;
+ r4 = r4 & 16711680;
+ r7 = heap32[(r6+40)];
+ r0 = r0 | r4;
+ r4 = (r7 + r2)|0;
+ r0 = r0 >>> 16;
+ heap16[(r4+10)>>1] = r0;
+ r0 = heap32[(r1+40)];
+ r0 = (r0 + r2)|0;
+ r0 = r0 >> 2;
+ r0 = heap32[(r0+3)];
+ r4 = r0 << 8;
+ r7 = r0 >>> 8;
+ r8 = heap32[(r6+40)];
+ r9 = r0 << 24;
+ r4 = r4 & 16711680;
+ r7 = r7 & 65280;
+ r0 = r0 >>> 24;
+ r8 = (r8 + r2)|0;
+ r4 = r9 | r4;
+ r0 = r7 | r0;
+ r7 = r8 >> 2;
+ r0 = r4 | r0;
+ heap32[(r7+3)] = r0;
+ r0 = heap32[(r1+40)];
+ r0 = (r0 + r2)|0;
+ r0 = r0 >> 2;
+ r0 = heap32[(r0+4)];
+ r4 = r0 << 8;
+ r7 = r0 >>> 8;
+ r8 = heap32[(r6+40)];
+ r9 = r0 << 24;
+ r4 = r4 & 16711680;
+ r7 = r7 & 65280;
+ r0 = r0 >>> 24;
+ r2 = (r8 + r2)|0;
+ r4 = r9 | r4;
+ r0 = r7 | r0;
+ r5 = (r5 + 1)|0;
+ r2 = r2 >> 2;
+ r0 = r4 | r0;
+ heap32[(r2+4)] = r0;
+ r0 = heap32[(r1+42)];
+ if(r0 <=r5) //_LBB146_46
+{
+break _53;
+}
+else{
+ r0 = heap32[(r6+40)];
+}
+}
+}
+}
+else{
+ if(r2 >0) //_LBB146_43
+{
+ r2 = 0;
+_60: while(true){
+ r4 = r2 << 5;
+ r5 = heap32[(r1+40)];
+ r5 = heapU16[(r5+r4)>>1];
+ heap16[(r0+r4)>>1] = r5;
+ r0 = heap32[(r1+40)];
+ r0 = (r0 + r4)|0;
+ r5 = heap32[(r6+40)];
+ r0 = heapU16[(r0+2)>>1];
+ r5 = (r5 + r4)|0;
+ heap16[(r5+2)>>1] = r0;
+ r0 = heap32[(r1+40)];
+ r0 = (r0 + r4)|0;
+ r5 = heap32[(r6+40)];
+ r0 = heapU16[(r0+4)>>1];
+ r5 = (r5 + r4)|0;
+ heap16[(r5+4)>>1] = r0;
+ r0 = heap32[(r1+40)];
+ r0 = (r0 + r4)|0;
+ r5 = heap32[(r6+40)];
+ r0 = heapU16[(r0+6)>>1];
+ r5 = (r5 + r4)|0;
+ heap16[(r5+6)>>1] = r0;
+ r0 = heap32[(r1+40)];
+ r0 = (r0 + r4)|0;
+ r5 = heap32[(r6+40)];
+ r0 = heapU16[(r0+8)>>1];
+ r5 = (r5 + r4)|0;
+ heap16[(r5+8)>>1] = r0;
+ r0 = heap32[(r1+40)];
+ r0 = (r0 + r4)|0;
+ r5 = heap32[(r6+40)];
+ r0 = heapU16[(r0+10)>>1];
+ r5 = (r5 + r4)|0;
+ heap16[(r5+10)>>1] = r0;
+ r0 = heap32[(r1+40)];
+ r0 = (r0 + r4)|0;
+ r0 = r0 >> 2;
+ r5 = heap32[(r6+40)];
+ r5 = (r5 + r4)|0;
+ r0 = heap32[(r0+3)];
+ r5 = r5 >> 2;
+ heap32[(r5+3)] = r0;
+ r0 = heap32[(r1+40)];
+ r0 = (r0 + r4)|0;
+ r0 = r0 >> 2;
+ r5 = heap32[(r6+40)];
+ r5 = (r5 + r4)|0;
+ r0 = heap32[(r0+4)];
+ r5 = r5 >> 2;
+ heap32[(r5+4)] = r0;
+ r0 = heap32[(r6+40)];
+ r0 = (r0 + r4)|0;
+ r0 = r0 >> 2;
+ heap32[(r0+5)] = 0;
+ r0 = heap32[(r6+40)];
+ r0 = (r0 + r4)|0;
+ r0 = r0 >> 2;
+ heap32[(r0+6)] = 0;
+ r0 = heap32[(r6+40)];
+ r0 = (r0 + r4)|0;
+ r2 = (r2 + 1)|0;
+ r0 = r0 >> 2;
+ heap32[(r0+7)] = 0;
+ r0 = heap32[(r1+42)];
+ if(r0 <=r2) //_LBB146_46
+{
+break _53;
+}
+else{
+ r0 = heap32[(r6+40)];
+}
+}
+}
+}
+} while(0);
+ r0 = heap32[(r6+40)];
+if(!(r0 ==0)) //_LBB146_50
+{
+ r1 = heapU8[r3+164];
+if(!(r1 ==0)) //_LBB146_49
+{
+ r1 = gNumAlignedFree;
+ r1 = r1 >> 2;
+ r2 = heap32[(r1)];
+ r2 = (r2 + 1)|0;
+ r0 = r0 >> 2;
+ heap32[(r1)] = r2;
+ r0 = heap32[(r0+-1)];
+ heap32[(g0)] = r0;
+ free(i7);
+}
+ heap32[(r6+40)] = 0;
+}
+ r0 = 0;
+ heap8[r3+164] = r0;
+ heap32[(r6+40)] = 0;
+ heap32[(r6+38)] = 0;
+ heap32[(r6+39)] = 0;
+ heap32[(r6)] = 0;
+ r0 = 1;
+ r_g0 = r0;
+ return;
+}
+else{
+ r0 = _2E_str638;
+ r1 = _2E_str537;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 847;
+ _assert(i7);
+}
+}
+
+function _ZN14btQuantizedBvh16deSerializeFloatER23btQuantizedBvhFloatData(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+ var r13;
+ var r14;
+ var r15;
+ var r16;
+ var r17;
+ var r18;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = heap32[(fp+1)];
+ r1 = r1 >> 2;
+ r2 = r0 >> 2;
+ heap32[(r2+5)] = heap32[(r1+4)];
+ heap32[(r2+6)] = heap32[(r1+5)];
+ heap32[(r2+7)] = heap32[(r1+6)];
+ heap32[(r2+8)] = heap32[(r1+7)];
+ heap32[(r2+1)] = heap32[(r1)];
+ heap32[(r2+2)] = heap32[(r1+1)];
+ heap32[(r2+3)] = heap32[(r1+2)];
+ heap32[(r2+4)] = heap32[(r1+3)];
+ heap32[(r2+9)] = heap32[(r1+8)];
+ heap32[(r2+10)] = heap32[(r1+9)];
+ heap32[(r2+11)] = heap32[(r1+10)];
+ heap32[(r2+12)] = heap32[(r1+11)];
+ r3 = heap32[(r1+12)];
+ heap32[(r2+14)] = r3;
+ r3 = 0;
+ r4 = heap32[(r1+13)];
+ r4 = r4 != r3;
+ r4 = r4 & 1;
+ heap8[r0+60] = r4;
+ r4 = heap32[(r2+22)];
+ r5 = heap32[(r1+14)];
+if(!(r4 >=r5)) //_LBB147_17
+{
+ r6 = heap32[(r2+23)];
+if(!(r6 >=r5)) //_LBB147_17
+{
+ if(r5 !=0) //_LBB147_4
+{
+ r6 = gNumAlignedAllocs;
+ r6 = r6 >> 2;
+ r7 = heap32[(r6)];
+ r7 = (r7 + 1)|0;
+ r8 = r5 << 6;
+ heap32[(r6)] = r7;
+ r6 = r8 | 19;
+ heap32[(g0)] = r6;
+ malloc(i7);
+ r6 = r_g0;
+ if(r6 !=0) //_LBB147_6
+{
+ r7 = 0;
+ r8 = (r6 + 4)|0;
+ r7 = (r7 - r8)|0;
+ r7 = r7 & 15;
+ r7 = (r6 + r7)|0;
+ r8 = (r7 + 4)|0;
+ r7 = r7 >> 2;
+ heap32[(r7)] = r6;
+ r6 = r8;
+}
+}
+else{
+ r6 = 0;
+}
+ r7 = (r0 + 96)|0;
+ if(r4 <1) //_LBB147_9
+{
+ r4 = r7 >> 2;
+ r9 = heap32[(r4)];
+}
+else{
+ r8 = 0;
+_12: while(true){
+ r9 = r7 >> 2;
+ r9 = heap32[(r9)];
+ r10 = (r6 + r8)|0;
+ r11 = (r9 + r8)|0;
+ heap32[(g0)] = r10;
+ heap32[(g0+1)] = r11;
+ heap32[(g0+2)] = 64;
+ r4 = (r4 + -1)|0;
+ r8 = (r8 + 64)|0;
+ memcpy(i7);
+if(!(r4 !=0)) //_LBB147_10
+{
+break _12;
+}
+}
+ r7 = (r0 + 96)|0;
+}
+if(!(r9 ==0)) //_LBB147_16
+{
+ r4 = heapU8[r0+100];
+if(!(r4 ==0)) //_LBB147_15
+{
+ r4 = gNumAlignedFree;
+ r4 = r4 >> 2;
+ r8 = heap32[(r4)];
+ r8 = (r8 + 1)|0;
+ r9 = r9 >> 2;
+ heap32[(r4)] = r8;
+ r4 = heap32[(r9+-1)];
+ heap32[(g0)] = r4;
+ free(i7);
+}
+ r4 = r7 >> 2;
+ heap32[(r4)] = 0;
+}
+ r4 = 1;
+ r7 = r7 >> 2;
+ heap8[r0+100] = r4;
+ heap32[(r7)] = r6;
+ heap32[(r2+23)] = r5;
+}
+}
+ heap32[(r2+22)] = r5;
+_23: do {
+if(!(r5 <1)) //_LBB147_20
+{
+ r4 = 0;
+ r6 = heap32[(r1+16)];
+ r5 = (r4 - r5)|0;
+_25: while(true){
+ r7 = (r4 * -12)|0;
+ r7 = r7 << 2;
+ r8 = r4 << 6;
+ r9 = heap32[(r2+24)];
+ r7 = (r6 + r7)|0;
+ r9 = (r9 - r8)|0;
+ r7 = r7 >> 2;
+ r9 = r9 >> 2;
+ heap32[(r9+4)] = heap32[(r7+4)];
+ heap32[(r9+5)] = heap32[(r7+5)];
+ heap32[(r9+6)] = heap32[(r7+6)];
+ heap32[(r9+7)] = heap32[(r7+7)];
+ r9 = heap32[(r2+24)];
+ r9 = (r9 - r8)|0;
+ r9 = r9 >> 2;
+ heap32[(r9)] = heap32[(r7)];
+ heap32[(r9+1)] = heap32[(r7+1)];
+ heap32[(r9+2)] = heap32[(r7+2)];
+ heap32[(r9+3)] = heap32[(r7+3)];
+ r9 = heap32[(r2+24)];
+ r9 = (r9 - r8)|0;
+ r10 = heap32[(r7+8)];
+ r9 = r9 >> 2;
+ heap32[(r9+8)] = r10;
+ r9 = heap32[(r2+24)];
+ r9 = (r9 - r8)|0;
+ r10 = heap32[(r7+9)];
+ r9 = r9 >> 2;
+ heap32[(r9+9)] = r10;
+ r9 = heap32[(r2+24)];
+ r8 = (r9 - r8)|0;
+ r7 = heap32[(r7+10)];
+ r4 = (r4 + -1)|0;
+ r8 = r8 >> 2;
+ heap32[(r8+10)] = r7;
+ if(r5 !=r4) //_LBB147_19
+{
+continue _25;
+}
+else{
+break _23;
+}
+}
+}
+} while(0);
+ r4 = heap32[(r2+32)];
+ r5 = heap32[(r1+15)];
+_28: do {
+if(!(r4 >=r5)) //_LBB147_23
+{
+ r6 = (r0 + 124)|0;
+ heap32[(g0)] = r6;
+ heap32[(g0+1)] = r5;
+ r6 = (r5 - r4)|0;
+ r4 = r4 << 4;
+ _ZN20btAlignedObjectArrayI18btQuantizedBvhNodeE7reserveEi(i7);
+_30: while(true){
+ r7 = heap32[(r2+34)];
+ r7 = (r7 + r4)|0;
+ r7 = r7 >> 2;
+ r6 = (r6 + -1)|0;
+ r4 = (r4 + 16)|0;
+ heap32[(r7)] = 0;
+ heap32[(r7+1)] = 0;
+ heap32[(r7+2)] = 0;
+ heap32[(r7+3)] = 0;
+ if(r6 !=0) //_LBB147_22
+{
+continue _30;
+}
+else{
+break _28;
+}
+}
+}
+} while(0);
+ heap32[(r2+32)] = r5;
+_33: do {
+if(!(r5 <1)) //_LBB147_26
+{
+ r4 = 0;
+ r6 = heap32[(r1+17)];
+ r5 = (r4 - r5)|0;
+_35: while(true){
+ r7 = r4 << 4;
+ r8 = (r6 - r7)|0;
+ r9 = r8 >> 2;
+ r10 = heap32[(r2+34)];
+ r10 = (r10 - r7)|0;
+ r9 = heap32[(r9+3)];
+ r10 = r10 >> 2;
+ heap32[(r10+3)] = r9;
+ r9 = heap32[(r2+34)];
+ r10 = heapU16[(r8+6)>>1];
+ r9 = (r9 - r7)|0;
+ heap16[(r9+6)>>1] = r10;
+ r9 = heap32[(r2+34)];
+ r10 = heapU16[(r8+8)>>1];
+ r9 = (r9 - r7)|0;
+ heap16[(r9+8)>>1] = r10;
+ r9 = heap32[(r2+34)];
+ r10 = heapU16[(r8+10)>>1];
+ r9 = (r9 - r7)|0;
+ heap16[(r9+10)>>1] = r10;
+ r9 = heap32[(r2+34)];
+ r10 = heapU16[(r8)>>1];
+ r9 = (r9 - r7)|0;
+ heap16[(r9)>>1] = r10;
+ r9 = heap32[(r2+34)];
+ r10 = heapU16[(r8+2)>>1];
+ r9 = (r9 - r7)|0;
+ heap16[(r9+2)>>1] = r10;
+ r9 = heap32[(r2+34)];
+ r8 = heapU16[(r8+4)>>1];
+ r4 = (r4 + -1)|0;
+ r7 = (r9 - r7)|0;
+ heap16[(r7+4)>>1] = r8;
+ if(r5 !=r4) //_LBB147_25
+{
+continue _35;
+}
+else{
+break _33;
+}
+}
+}
+} while(0);
+ r4 = heap32[(r1+19)];
+ heap32[(r2+36)] = r4;
+ r4 = heap32[(r2+38)];
+ r5 = heap32[(r1+20)];
+if(!(r4 >=r5)) //_LBB147_43
+{
+ r6 = heap32[(r2+39)];
+if(!(r6 >=r5)) //_LBB147_43
+{
+ if(r5 !=0) //_LBB147_30
+{
+ r6 = gNumAlignedAllocs;
+ r6 = r6 >> 2;
+ r7 = heap32[(r6)];
+ r7 = (r7 + 1)|0;
+ r8 = r5 << 5;
+ heap32[(r6)] = r7;
+ r6 = r8 | 19;
+ heap32[(g0)] = r6;
+ malloc(i7);
+ r6 = r_g0;
+ if(r6 !=0) //_LBB147_32
+{
+ r7 = 0;
+ r8 = (r6 + 4)|0;
+ r7 = (r7 - r8)|0;
+ r7 = r7 & 15;
+ r7 = (r6 + r7)|0;
+ r8 = (r7 + 4)|0;
+ r7 = r7 >> 2;
+ heap32[(r7)] = r6;
+ r6 = r8;
+}
+}
+else{
+ r6 = 0;
+}
+ r7 = (r0 + 160)|0;
+ if(r4 <1) //_LBB147_35
+{
+ r4 = r7 >> 2;
+ r9 = heap32[(r4)];
+}
+else{
+ r8 = 0;
+_49: while(true){
+ r9 = r7 >> 2;
+ r9 = heap32[(r9)];
+ r10 = (r9 + r8)|0;
+ r10 = r10 >> 2;
+ r11 = (r6 + r8)|0;
+ r4 = (r4 + -1)|0;
+ r8 = (r8 + 32)|0;
+ r12 = heap32[(r10)];
+ r11 = r11 >> 2;
+ r13 = heap32[(r10+1)];
+ r14 = heap32[(r10+2)];
+ r15 = heap32[(r10+3)];
+ r16 = heap32[(r10+4)];
+ r17 = heap32[(r10+5)];
+ r18 = heap32[(r10+6)];
+ r10 = heap32[(r10+7)];
+ heap32[(r11)] = r12;
+ heap32[(r11+1)] = r13;
+ heap32[(r11+2)] = r14;
+ heap32[(r11+3)] = r15;
+ heap32[(r11+4)] = r16;
+ heap32[(r11+5)] = r17;
+ heap32[(r11+6)] = r18;
+ heap32[(r11+7)] = r10;
+if(!(r4 !=0)) //_LBB147_36
+{
+break _49;
+}
+}
+ r7 = (r0 + 160)|0;
+}
+if(!(r9 ==0)) //_LBB147_42
+{
+ r4 = heapU8[r0+164];
+if(!(r4 ==0)) //_LBB147_41
+{
+ r4 = gNumAlignedFree;
+ r4 = r4 >> 2;
+ r8 = heap32[(r4)];
+ r8 = (r8 + 1)|0;
+ r9 = r9 >> 2;
+ heap32[(r4)] = r8;
+ r4 = heap32[(r9+-1)];
+ heap32[(g0)] = r4;
+ free(i7);
+}
+ r4 = r7 >> 2;
+ heap32[(r4)] = 0;
+}
+ r4 = 1;
+ r7 = r7 >> 2;
+ heap8[r0+164] = r4;
+ heap32[(r7)] = r6;
+ heap32[(r2+39)] = r5;
+}
+}
+ heap32[(r2+38)] = r5;
+_60: do {
+if(!(r5 <1)) //_LBB147_46
+{
+ r0 = heap32[(r1+18)];
+ r1 = (r3 - r5)|0;
+_62: while(true){
+ r4 = (r3 * -10)|0;
+ r4 = r4 << 1;
+ r4 = (r0 + r4)|0;
+ r5 = r3 << 5;
+ r6 = heap32[(r2+40)];
+ r7 = heapU16[(r4+14)>>1];
+ r6 = (r6 - r5)|0;
+ heap16[(r6+6)>>1] = r7;
+ r6 = heap32[(r2+40)];
+ r7 = heapU16[(r4+16)>>1];
+ r6 = (r6 - r5)|0;
+ heap16[(r6+8)>>1] = r7;
+ r6 = heap32[(r2+40)];
+ r7 = heapU16[(r4+18)>>1];
+ r6 = (r6 - r5)|0;
+ heap16[(r6+10)>>1] = r7;
+ r6 = heap32[(r2+40)];
+ r7 = heapU16[(r4+8)>>1];
+ r6 = (r6 - r5)|0;
+ heap16[(r6)>>1] = r7;
+ r6 = heap32[(r2+40)];
+ r7 = heapU16[(r4+10)>>1];
+ r6 = (r6 - r5)|0;
+ heap16[(r6+2)>>1] = r7;
+ r6 = (r3 * -5)|0;
+ r7 = heap32[(r2+40)];
+ r4 = heapU16[(r4+12)>>1];
+ r6 = r6 << 2;
+ r7 = (r7 - r5)|0;
+ r6 = (r0 + r6)|0;
+ heap16[(r7+4)>>1] = r4;
+ r4 = r6 >> 2;
+ r6 = heap32[(r2+40)];
+ r6 = (r6 - r5)|0;
+ r7 = heap32[(r4)];
+ r6 = r6 >> 2;
+ heap32[(r6+3)] = r7;
+ r6 = heap32[(r2+40)];
+ r5 = (r6 - r5)|0;
+ r4 = heap32[(r4+1)];
+ r3 = (r3 + -1)|0;
+ r5 = r5 >> 2;
+ heap32[(r5+4)] = r4;
+ if(r1 !=r3) //_LBB147_45
+{
+continue _62;
+}
+else{
+break _60;
+}
+}
+}
+} while(0);
+ return;
+}
+
+function _ZN14btQuantizedBvh17deSerializeDoubleER24btQuantizedBvhDoubleData(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+ var r13;
+ var r14;
+ var r15;
+ var r16;
+ var r17;
+ var r18;
+ var f0;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ r1 = heap32[(fp)];
+ f0 = llvm_readDouble((r0+32));
+ r2 = r1 >> 2;
+ f0 = f0; //fdtos f0, f0
+ heapFloat[(r2+5)] = f0;
+ f0 = llvm_readDouble((r0+40));
+ f0 = f0; //fdtos f0, f0
+ heapFloat[(r2+6)] = f0;
+ f0 = llvm_readDouble((r0+48));
+ f0 = f0; //fdtos f0, f0
+ heapFloat[(r2+7)] = f0;
+ f0 = llvm_readDouble((r0+56));
+ f0 = f0; //fdtos f0, f0
+ heapFloat[(r2+8)] = f0;
+ f0 = llvm_readDouble((r0));
+ f0 = f0; //fdtos f0, f0
+ heapFloat[(r2+1)] = f0;
+ f0 = llvm_readDouble((r0+8));
+ f0 = f0; //fdtos f0, f0
+ heapFloat[(r2+2)] = f0;
+ f0 = llvm_readDouble((r0+16));
+ f0 = f0; //fdtos f0, f0
+ heapFloat[(r2+3)] = f0;
+ f0 = llvm_readDouble((r0+24));
+ f0 = f0; //fdtos f0, f0
+ heapFloat[(r2+4)] = f0;
+ f0 = llvm_readDouble((r0+64));
+ f0 = f0; //fdtos f0, f0
+ heapFloat[(r2+9)] = f0;
+ f0 = llvm_readDouble((r0+72));
+ f0 = f0; //fdtos f0, f0
+ heapFloat[(r2+10)] = f0;
+ f0 = llvm_readDouble((r0+80));
+ f0 = f0; //fdtos f0, f0
+ heapFloat[(r2+11)] = f0;
+ f0 = llvm_readDouble((r0+88));
+ f0 = f0; //fdtos f0, f0
+ r0 = r0 >> 2;
+ heapFloat[(r2+12)] = f0;
+ r3 = heap32[(r0+24)];
+ heap32[(r2+14)] = r3;
+ r3 = 0;
+ r4 = heap32[(r0+25)];
+ r4 = r4 != r3;
+ r4 = r4 & 1;
+ heap8[r1+60] = r4;
+ r4 = heap32[(r2+22)];
+ r5 = heap32[(r0+26)];
+if(!(r4 >=r5)) //_LBB148_17
+{
+ r6 = heap32[(r2+23)];
+if(!(r6 >=r5)) //_LBB148_17
+{
+ if(r5 !=0) //_LBB148_4
+{
+ r6 = gNumAlignedAllocs;
+ r6 = r6 >> 2;
+ r7 = heap32[(r6)];
+ r7 = (r7 + 1)|0;
+ r8 = r5 << 6;
+ heap32[(r6)] = r7;
+ r6 = r8 | 19;
+ heap32[(g0)] = r6;
+ malloc(i7);
+ r6 = r_g0;
+ if(r6 !=0) //_LBB148_6
+{
+ r7 = 0;
+ r8 = (r6 + 4)|0;
+ r7 = (r7 - r8)|0;
+ r7 = r7 & 15;
+ r7 = (r6 + r7)|0;
+ r8 = (r7 + 4)|0;
+ r7 = r7 >> 2;
+ heap32[(r7)] = r6;
+ r6 = r8;
+}
+}
+else{
+ r6 = 0;
+}
+ r7 = (r1 + 96)|0;
+ if(r4 <1) //_LBB148_9
+{
+ r4 = r7 >> 2;
+ r9 = heap32[(r4)];
+}
+else{
+ r8 = 0;
+_12: while(true){
+ r9 = r7 >> 2;
+ r9 = heap32[(r9)];
+ r10 = (r6 + r8)|0;
+ r11 = (r9 + r8)|0;
+ heap32[(g0)] = r10;
+ heap32[(g0+1)] = r11;
+ heap32[(g0+2)] = 64;
+ r4 = (r4 + -1)|0;
+ r8 = (r8 + 64)|0;
+ memcpy(i7);
+if(!(r4 !=0)) //_LBB148_10
+{
+break _12;
+}
+}
+ r7 = (r1 + 96)|0;
+}
+if(!(r9 ==0)) //_LBB148_16
+{
+ r4 = heapU8[r1+100];
+if(!(r4 ==0)) //_LBB148_15
+{
+ r4 = gNumAlignedFree;
+ r4 = r4 >> 2;
+ r8 = heap32[(r4)];
+ r8 = (r8 + 1)|0;
+ r9 = r9 >> 2;
+ heap32[(r4)] = r8;
+ r4 = heap32[(r9+-1)];
+ heap32[(g0)] = r4;
+ free(i7);
+}
+ r4 = r7 >> 2;
+ heap32[(r4)] = 0;
+}
+ r4 = 1;
+ r7 = r7 >> 2;
+ heap8[r1+100] = r4;
+ heap32[(r7)] = r6;
+ heap32[(r2+23)] = r5;
+}
+}
+ heap32[(r2+22)] = r5;
+_23: do {
+if(!(r5 <1)) //_LBB148_20
+{
+ r4 = 0;
+ r6 = heap32[(r0+28)];
+ r5 = (r4 - r5)|0;
+_25: while(true){
+ r7 = (r4 * -10)|0;
+ r7 = r7 << 3;
+ r8 = (r6 + r7)|0;
+ r9 = r4 << 6;
+ r10 = heap32[(r2+24)];
+ f0 = llvm_readDouble((r8+32));
+ r10 = (r10 - r9)|0;
+ r10 = r10 >> 2;
+ f0 = f0; //fdtos f0, f0
+ heapFloat[(r10+4)] = f0;
+ f0 = llvm_readDouble((r8+40));
+ f0 = f0; //fdtos f0, f0
+ heapFloat[(r10+5)] = f0;
+ f0 = llvm_readDouble((r8+48));
+ f0 = f0; //fdtos f0, f0
+ heapFloat[(r10+6)] = f0;
+ f0 = llvm_readDouble((r8+56));
+ f0 = f0; //fdtos f0, f0
+ heapFloat[(r10+7)] = f0;
+ r10 = heap32[(r2+24)];
+ f0 = llvm_readDouble((r6+r7));
+ r7 = (r10 - r9)|0;
+ r7 = r7 >> 2;
+ f0 = f0; //fdtos f0, f0
+ heapFloat[(r7)] = f0;
+ f0 = llvm_readDouble((r8+8));
+ f0 = f0; //fdtos f0, f0
+ heapFloat[(r7+1)] = f0;
+ f0 = llvm_readDouble((r8+16));
+ f0 = f0; //fdtos f0, f0
+ heapFloat[(r7+2)] = f0;
+ r10 = (r4 * -20)|0;
+ f0 = llvm_readDouble((r8+24));
+ r8 = r10 << 2;
+ f0 = f0; //fdtos f0, f0
+ r8 = (r6 + r8)|0;
+ heapFloat[(r7+3)] = f0;
+ r7 = r8 >> 2;
+ r8 = heap32[(r2+24)];
+ r8 = (r8 - r9)|0;
+ r10 = heap32[(r7+16)];
+ r8 = r8 >> 2;
+ heap32[(r8+8)] = r10;
+ r8 = heap32[(r2+24)];
+ r8 = (r8 - r9)|0;
+ r10 = heap32[(r7+17)];
+ r8 = r8 >> 2;
+ heap32[(r8+9)] = r10;
+ r8 = heap32[(r2+24)];
+ r8 = (r8 - r9)|0;
+ r7 = heap32[(r7+18)];
+ r4 = (r4 + -1)|0;
+ r8 = r8 >> 2;
+ heap32[(r8+10)] = r7;
+ if(r5 !=r4) //_LBB148_19
+{
+continue _25;
+}
+else{
+break _23;
+}
+}
+}
+} while(0);
+ r4 = heap32[(r2+32)];
+ r5 = heap32[(r0+27)];
+_28: do {
+if(!(r4 >=r5)) //_LBB148_23
+{
+ r6 = (r1 + 124)|0;
+ heap32[(g0)] = r6;
+ heap32[(g0+1)] = r5;
+ r6 = (r5 - r4)|0;
+ r4 = r4 << 4;
+ _ZN20btAlignedObjectArrayI18btQuantizedBvhNodeE7reserveEi(i7);
+_30: while(true){
+ r7 = heap32[(r2+34)];
+ r7 = (r7 + r4)|0;
+ r7 = r7 >> 2;
+ r6 = (r6 + -1)|0;
+ r4 = (r4 + 16)|0;
+ heap32[(r7)] = 0;
+ heap32[(r7+1)] = 0;
+ heap32[(r7+2)] = 0;
+ heap32[(r7+3)] = 0;
+ if(r6 !=0) //_LBB148_22
+{
+continue _30;
+}
+else{
+break _28;
+}
+}
+}
+} while(0);
+ heap32[(r2+32)] = r5;
+_33: do {
+if(!(r5 <1)) //_LBB148_26
+{
+ r4 = 0;
+ r6 = heap32[(r0+29)];
+ r5 = (r4 - r5)|0;
+_35: while(true){
+ r7 = r4 << 4;
+ r8 = (r6 - r7)|0;
+ r9 = r8 >> 2;
+ r10 = heap32[(r2+34)];
+ r10 = (r10 - r7)|0;
+ r9 = heap32[(r9+3)];
+ r10 = r10 >> 2;
+ heap32[(r10+3)] = r9;
+ r9 = heap32[(r2+34)];
+ r10 = heapU16[(r8+6)>>1];
+ r9 = (r9 - r7)|0;
+ heap16[(r9+6)>>1] = r10;
+ r9 = heap32[(r2+34)];
+ r10 = heapU16[(r8+8)>>1];
+ r9 = (r9 - r7)|0;
+ heap16[(r9+8)>>1] = r10;
+ r9 = heap32[(r2+34)];
+ r10 = heapU16[(r8+10)>>1];
+ r9 = (r9 - r7)|0;
+ heap16[(r9+10)>>1] = r10;
+ r9 = heap32[(r2+34)];
+ r10 = heapU16[(r8)>>1];
+ r9 = (r9 - r7)|0;
+ heap16[(r9)>>1] = r10;
+ r9 = heap32[(r2+34)];
+ r10 = heapU16[(r8+2)>>1];
+ r9 = (r9 - r7)|0;
+ heap16[(r9+2)>>1] = r10;
+ r9 = heap32[(r2+34)];
+ r8 = heapU16[(r8+4)>>1];
+ r4 = (r4 + -1)|0;
+ r7 = (r9 - r7)|0;
+ heap16[(r7+4)>>1] = r8;
+ if(r5 !=r4) //_LBB148_25
+{
+continue _35;
+}
+else{
+break _33;
+}
+}
+}
+} while(0);
+ r4 = heap32[(r0+30)];
+ heap32[(r2+36)] = r4;
+ r4 = heap32[(r2+38)];
+ r5 = heap32[(r0+31)];
+if(!(r4 >=r5)) //_LBB148_43
+{
+ r6 = heap32[(r2+39)];
+if(!(r6 >=r5)) //_LBB148_43
+{
+ if(r5 !=0) //_LBB148_30
+{
+ r6 = gNumAlignedAllocs;
+ r6 = r6 >> 2;
+ r7 = heap32[(r6)];
+ r7 = (r7 + 1)|0;
+ r8 = r5 << 5;
+ heap32[(r6)] = r7;
+ r6 = r8 | 19;
+ heap32[(g0)] = r6;
+ malloc(i7);
+ r6 = r_g0;
+ if(r6 !=0) //_LBB148_32
+{
+ r7 = 0;
+ r8 = (r6 + 4)|0;
+ r7 = (r7 - r8)|0;
+ r7 = r7 & 15;
+ r7 = (r6 + r7)|0;
+ r8 = (r7 + 4)|0;
+ r7 = r7 >> 2;
+ heap32[(r7)] = r6;
+ r6 = r8;
+}
+}
+else{
+ r6 = 0;
+}
+ r7 = (r1 + 160)|0;
+ if(r4 <1) //_LBB148_35
+{
+ r4 = r7 >> 2;
+ r9 = heap32[(r4)];
+}
+else{
+ r8 = 0;
+_49: while(true){
+ r9 = r7 >> 2;
+ r9 = heap32[(r9)];
+ r10 = (r9 + r8)|0;
+ r10 = r10 >> 2;
+ r11 = (r6 + r8)|0;
+ r4 = (r4 + -1)|0;
+ r8 = (r8 + 32)|0;
+ r12 = heap32[(r10)];
+ r11 = r11 >> 2;
+ r13 = heap32[(r10+1)];
+ r14 = heap32[(r10+2)];
+ r15 = heap32[(r10+3)];
+ r16 = heap32[(r10+4)];
+ r17 = heap32[(r10+5)];
+ r18 = heap32[(r10+6)];
+ r10 = heap32[(r10+7)];
+ heap32[(r11)] = r12;
+ heap32[(r11+1)] = r13;
+ heap32[(r11+2)] = r14;
+ heap32[(r11+3)] = r15;
+ heap32[(r11+4)] = r16;
+ heap32[(r11+5)] = r17;
+ heap32[(r11+6)] = r18;
+ heap32[(r11+7)] = r10;
+if(!(r4 !=0)) //_LBB148_36
+{
+break _49;
+}
+}
+ r7 = (r1 + 160)|0;
+}
+if(!(r9 ==0)) //_LBB148_42
+{
+ r4 = heapU8[r1+164];
+if(!(r4 ==0)) //_LBB148_41
+{
+ r4 = gNumAlignedFree;
+ r4 = r4 >> 2;
+ r8 = heap32[(r4)];
+ r8 = (r8 + 1)|0;
+ r9 = r9 >> 2;
+ heap32[(r4)] = r8;
+ r4 = heap32[(r9+-1)];
+ heap32[(g0)] = r4;
+ free(i7);
+}
+ r4 = r7 >> 2;
+ heap32[(r4)] = 0;
+}
+ r4 = 1;
+ r7 = r7 >> 2;
+ heap8[r1+164] = r4;
+ heap32[(r7)] = r6;
+ heap32[(r2+39)] = r5;
+}
+}
+ heap32[(r2+38)] = r5;
+_60: do {
+if(!(r5 <1)) //_LBB148_46
+{
+ r0 = heap32[(r0+32)];
+ r1 = (r3 - r5)|0;
+_62: while(true){
+ r4 = (r3 * -10)|0;
+ r4 = r4 << 1;
+ r4 = (r0 + r4)|0;
+ r5 = r3 << 5;
+ r6 = heap32[(r2+40)];
+ r7 = heapU16[(r4+14)>>1];
+ r6 = (r6 - r5)|0;
+ heap16[(r6+6)>>1] = r7;
+ r6 = heap32[(r2+40)];
+ r7 = heapU16[(r4+16)>>1];
+ r6 = (r6 - r5)|0;
+ heap16[(r6+8)>>1] = r7;
+ r6 = heap32[(r2+40)];
+ r7 = heapU16[(r4+18)>>1];
+ r6 = (r6 - r5)|0;
+ heap16[(r6+10)>>1] = r7;
+ r6 = heap32[(r2+40)];
+ r7 = heapU16[(r4+8)>>1];
+ r6 = (r6 - r5)|0;
+ heap16[(r6)>>1] = r7;
+ r6 = heap32[(r2+40)];
+ r7 = heapU16[(r4+10)>>1];
+ r6 = (r6 - r5)|0;
+ heap16[(r6+2)>>1] = r7;
+ r6 = (r3 * -5)|0;
+ r7 = heap32[(r2+40)];
+ r4 = heapU16[(r4+12)>>1];
+ r6 = r6 << 2;
+ r7 = (r7 - r5)|0;
+ r6 = (r0 + r6)|0;
+ heap16[(r7+4)>>1] = r4;
+ r4 = r6 >> 2;
+ r6 = heap32[(r2+40)];
+ r6 = (r6 - r5)|0;
+ r7 = heap32[(r4)];
+ r6 = r6 >> 2;
+ heap32[(r6+3)] = r7;
+ r6 = heap32[(r2+40)];
+ r5 = (r6 - r5)|0;
+ r4 = heap32[(r4+1)];
+ r3 = (r3 + -1)|0;
+ r5 = r5 >> 2;
+ heap32[(r5+4)] = r4;
+ if(r1 !=r3) //_LBB148_45
+{
+continue _62;
+}
+else{
+break _60;
+}
+}
+}
+} while(0);
+ return;
+}
+
+function _ZN14btQuantizedBvhD2Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV14btQuantizedBvh;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ r1 = heap32[(r2+40)];
+if(!(r1 ==0)) //_LBB149_4
+{
+ r3 = heapU8[r0+164];
+if(!(r3 ==0)) //_LBB149_3
+{
+ r3 = gNumAlignedFree;
+ r3 = r3 >> 2;
+ r4 = heap32[(r3)];
+ r4 = (r4 + 1)|0;
+ r1 = r1 >> 2;
+ heap32[(r3)] = r4;
+ r1 = heap32[(r1+-1)];
+ heap32[(g0)] = r1;
+ free(i7);
+}
+ heap32[(r2+40)] = 0;
+}
+ r1 = 1;
+ heap8[r0+164] = r1;
+ heap32[(r2+40)] = 0;
+ heap32[(r2+38)] = 0;
+ heap32[(r2+39)] = 0;
+ r3 = heap32[(r2+34)];
+if(!(r3 ==0)) //_LBB149_8
+{
+ r4 = heapU8[r0+140];
+if(!(r4 ==0)) //_LBB149_7
+{
+ r4 = gNumAlignedFree;
+ r4 = r4 >> 2;
+ r5 = heap32[(r4)];
+ r5 = (r5 + 1)|0;
+ r3 = r3 >> 2;
+ heap32[(r4)] = r5;
+ r3 = heap32[(r3+-1)];
+ heap32[(g0)] = r3;
+ free(i7);
+}
+ heap32[(r2+34)] = 0;
+}
+ heap8[r0+140] = r1;
+ heap32[(r2+34)] = 0;
+ heap32[(r2+32)] = 0;
+ heap32[(r2+33)] = 0;
+ r3 = heap32[(r2+29)];
+if(!(r3 ==0)) //_LBB149_12
+{
+ r4 = heapU8[r0+120];
+if(!(r4 ==0)) //_LBB149_11
+{
+ r4 = gNumAlignedFree;
+ r4 = r4 >> 2;
+ r5 = heap32[(r4)];
+ r5 = (r5 + 1)|0;
+ r3 = r3 >> 2;
+ heap32[(r4)] = r5;
+ r3 = heap32[(r3+-1)];
+ heap32[(g0)] = r3;
+ free(i7);
+}
+ heap32[(r2+29)] = 0;
+}
+ heap8[r0+120] = r1;
+ heap32[(r2+29)] = 0;
+ heap32[(r2+27)] = 0;
+ heap32[(r2+28)] = 0;
+ r3 = heap32[(r2+24)];
+if(!(r3 ==0)) //_LBB149_16
+{
+ r4 = heapU8[r0+100];
+if(!(r4 ==0)) //_LBB149_15
+{
+ r4 = gNumAlignedFree;
+ r4 = r4 >> 2;
+ r5 = heap32[(r4)];
+ r5 = (r5 + 1)|0;
+ r3 = r3 >> 2;
+ heap32[(r4)] = r5;
+ r3 = heap32[(r3+-1)];
+ heap32[(g0)] = r3;
+ free(i7);
+}
+ heap32[(r2+24)] = 0;
+}
+ heap8[r0+100] = r1;
+ heap32[(r2+24)] = 0;
+ heap32[(r2+22)] = 0;
+ heap32[(r2+23)] = 0;
+ r3 = heap32[(r2+19)];
+if(!(r3 ==0)) //_LBB149_20
+{
+ r4 = heapU8[r0+80];
+if(!(r4 ==0)) //_LBB149_19
+{
+ r4 = gNumAlignedFree;
+ r4 = r4 >> 2;
+ r5 = heap32[(r4)];
+ r5 = (r5 + 1)|0;
+ r3 = r3 >> 2;
+ heap32[(r4)] = r5;
+ r3 = heap32[(r3+-1)];
+ heap32[(g0)] = r3;
+ free(i7);
+}
+ heap32[(r2+19)] = 0;
+}
+ heap8[r0+80] = r1;
+ heap32[(r2+19)] = 0;
+ heap32[(r2+17)] = 0;
+ heap32[(r2+18)] = 0;
+ return;
+}
+
+function _ZNK14btQuantizedBvh26walkStacklessQuantizedTreeEP21btNodeOverlapCallbackPtS2_ii(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = heapU8[r0+60];
+ if(r1 !=0) //_LBB150_2
+{
+ r1 = heap32[(fp+1)];
+ r2 = heap32[(fp+2)];
+ r3 = heap32[(fp+3)];
+ r4 = heap32[(fp+4)];
+ r5 = heap32[(fp+5)];
+ r0 = r0 >> 2;
+ r0 = heap32[(r0+34)];
+ r6 = r4 << 4;
+ r7 = (r5 - r4)|0;
+ r0 = (r0 + r6)|0;
+ r6 = 0;
+_3: while(true){
+ if(r4 <r5) //_LBB150_3
+{
+ if(r6 <r7) //_LBB150_5
+{
+ r8 = heapU16[(r2)>>1];
+ r9 = heapU16[(r0+6)>>1];
+ r10 = heapU16[(r3)>>1];
+ r11 = heapU16[(r0)>>1];
+ r8 = uint(r8) > uint(r9);
+ r9 = uint(r10) < uint(r11);
+ r10 = heapU16[(r2+4)>>1];
+ r11 = heapU16[(r0+10)>>1];
+ r8 = r8 | r9;
+ r9 = uint(r10) > uint(r11);
+ r10 = heapU16[(r3+4)>>1];
+ r11 = heapU16[(r0+4)>>1];
+ r8 = r8 | r9;
+ r9 = uint(r10) < uint(r11);
+ r10 = heapU16[(r2+2)>>1];
+ r11 = heapU16[(r0+8)>>1];
+ r8 = r8 | r9;
+ r9 = uint(r10) > uint(r11);
+ r10 = heapU16[(r3+2)>>1];
+ r11 = heapU16[(r0+2)>>1];
+ r12 = r0 >> 2;
+ r8 = r8 | r9;
+ r9 = uint(r10) < uint(r11);
+ r10 = heap32[(r12+3)];
+ r6 = (r6 + 1)|0;
+ r8 = r8 | r9;
+ if(r10 <0) //_LBB150_10
+{
+__label__ = 10;
+}
+else{
+ if(r8 != 0) //_LBB150_10
+{
+__label__ = 10;
+}
+else{
+ if(r10 >-1) //_LBB150_9
+{
+ r8 = r1 >> 2;
+ r8 = heap32[(r8)];
+ r8 = r8 >> 2;
+ r8 = heap32[(r8+2)];
+ r12 = r10 >> 21;
+ r10 = r10 & 2097151;
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r12;
+ heap32[(g0+2)] = r10;
+ __FUNCTION_TABLE__[(r8)>>2](i7);
+__label__ = 11;
+}
+else{
+__label__ = 8;
+break _3;
+}
+}
+}
+if (__label__ == 10){
+ r9 = 0;
+ r9 = r10 < r9;
+ r8 = r9 & r8;
+ if(r8 != 0) //_LBB150_12
+{
+ r8 = heap32[(r12+3)];
+ if(r8 <0) //_LBB150_14
+{
+ r9 = r8 << 4;
+ r0 = (r0 - r9)|0;
+ r4 = (r4 - r8)|0;
+continue _3;
+}
+else{
+__label__ = 13;
+break _3;
+}
+}
+}
+ r0 = (r0 + 16)|0;
+ r4 = (r4 + 1)|0;
+}
+else{
+__label__ = 4;
+break _3;
+}
+}
+else{
+__label__ = 16;
+break _3;
+}
+}
+switch(__label__ ){//multiple entries
+case 16:
+ r0 = maxIterations;
+ r0 = r0 >> 2;
+ r1 = heap32[(r0)];
+if(!(r1 >=r6)) //_LBB150_18
+{
+ heap32[(r0)] = r6;
+}
+ return;
+break;
+case 13:
+ r0 = _2E_str941;
+ r1 = _2E_str313;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 75;
+ _assert(i7);
+break;
+case 8:
+ r0 = _2E_str739;
+ r1 = _2E_str313;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 80;
+ _assert(i7);
+break;
+case 4:
+ r0 = _2E_str1143;
+ r1 = _2E_str537;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 703;
+ _assert(i7);
+break;
+}
+}
+else{
+ r0 = _2E_str212;
+ r1 = _2E_str537;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 669;
+ _assert(i7);
+}
+}
+
+function _ZNK14btQuantizedBvh17quantizeWithClampEPtRK9btVector3i(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+var __label__ = 0;
+ i7 = sp + -32;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = heapU8[r0+60];
+ if(r1 !=0) //_LBB151_2
+{
+ r1 = heap32[(fp+1)];
+ r2 = heap32[(fp+2)];
+ r3 = heap32[(fp+3)];
+ r2 = r2 >> 2;
+ f0 = heapFloat[(r2)];
+ r4 = sp + -16;
+ heapFloat[(fp+-4)] = f0;
+ f1 = heapFloat[(r2+1)];
+ r5 = r4 >> 2;
+ heapFloat[(r5+1)] = f1;
+ f2 = heapFloat[(r2+2)];
+ heapFloat[(r5+2)] = f2;
+ f3 = heapFloat[(r2+3)];
+ r2 = r0 >> 2;
+ heapFloat[(r5+3)] = f3;
+ f4 = heapFloat[(r2+1)];
+ if(f0 <f4) //_LBB151_4
+{
+ heapFloat[(fp+-4)] = f4;
+ f0 = f4;
+}
+ f4 = heapFloat[(r2+2)];
+ if(f1 <f4) //_LBB151_7
+{
+ heapFloat[(r5+1)] = f4;
+ f1 = f4;
+}
+ f4 = heapFloat[(r2+3)];
+ if(f2 <f4) //_LBB151_10
+{
+ heapFloat[(r5+2)] = f4;
+ f2 = f4;
+}
+ f4 = heapFloat[(r2+4)];
+ if(f3 <f4) //_LBB151_13
+{
+ heapFloat[(r5+3)] = f4;
+ f3 = f4;
+}
+ f4 = heapFloat[(r2+5)];
+if(!(f4 >=f0)) //_LBB151_16
+{
+ heapFloat[(fp+-4)] = f4;
+}
+ f0 = heapFloat[(r2+6)];
+if(!(f0 >=f1)) //_LBB151_18
+{
+ heapFloat[(r5+1)] = f0;
+}
+ f0 = heapFloat[(r2+7)];
+if(!(f0 >=f2)) //_LBB151_20
+{
+ heapFloat[(r5+2)] = f0;
+}
+ f0 = heapFloat[(r2+8)];
+if(!(f0 >=f3)) //_LBB151_22
+{
+ heapFloat[(r5+3)] = f0;
+}
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = r4;
+ heap32[(g0+3)] = r3;
+ _ZNK14btQuantizedBvh8quantizeEPtRK9btVector3i(i7);
+ return;
+}
+else{
+ r0 = _2E_str212;
+ r1 = _2E_str313;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 420;
+ _assert(i7);
+}
+}
+
+function _ZNK14btQuantizedBvh42walkRecursiveQuantizedTreeAgainstQueryAabbEPK18btQuantizedBvhNodeP21btNodeOverlapCallbackPtS5_(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+var __label__ = 0;
+ i7 = sp + -24;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = heap32[(fp+1)];
+ r2 = heap32[(fp+2)];
+ r3 = heap32[(fp+3)];
+ r4 = heap32[(fp+4)];
+_1: while(true){
+ r5 = heapU8[r0+60];
+ if(r5 !=0) //_LBB152_3
+{
+ r5 = heapU16[(r3)>>1];
+ r6 = heapU16[(r1+6)>>1];
+ if(uint(r5) >uint(r6)) //_LBB152_14
+{
+__label__ = 14;
+break _1;
+}
+else{
+ r5 = heapU16[(r4)>>1];
+ r6 = heapU16[(r1)>>1];
+ r5 = r5 & 65535;
+ r6 = r6 & 65535;
+ if(uint(r5) <uint(r6)) //_LBB152_14
+{
+__label__ = 14;
+break _1;
+}
+else{
+ r5 = heapU16[(r3+4)>>1];
+ r6 = heapU16[(r1+10)>>1];
+ r5 = r5 & 65535;
+ r6 = r6 & 65535;
+ if(uint(r5) >uint(r6)) //_LBB152_14
+{
+__label__ = 14;
+break _1;
+}
+else{
+ r5 = heapU16[(r4+4)>>1];
+ r6 = heapU16[(r1+4)>>1];
+ r5 = r5 & 65535;
+ r6 = r6 & 65535;
+ if(uint(r5) <uint(r6)) //_LBB152_14
+{
+__label__ = 14;
+break _1;
+}
+else{
+ r5 = heapU16[(r3+2)>>1];
+ r6 = heapU16[(r1+8)>>1];
+ r5 = r5 & 65535;
+ r6 = r6 & 65535;
+ if(uint(r5) >uint(r6)) //_LBB152_14
+{
+__label__ = 14;
+break _1;
+}
+else{
+ r5 = heapU16[(r4+2)>>1];
+ r6 = heapU16[(r1+2)>>1];
+ r5 = r5 & 65535;
+ r6 = r6 & 65535;
+ if(uint(r5) <uint(r6)) //_LBB152_14
+{
+__label__ = 14;
+break _1;
+}
+else{
+ r5 = r1 >> 2;
+ r6 = heap32[(r5+3)];
+ if(r6 <0) //_LBB152_11
+{
+ r6 = (r1 + 16)|0;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r6;
+ heap32[(g0+2)] = r2;
+ heap32[(g0+3)] = r3;
+ heap32[(g0+4)] = r4;
+ _ZNK14btQuantizedBvh42walkRecursiveQuantizedTreeAgainstQueryAabbEPK18btQuantizedBvhNodeP21btNodeOverlapCallbackPtS5_(i7);
+ r5 = heap32[(r5+7)];
+ if(r5 <0) //_LBB152_13
+{
+ r6 = 1;
+ r5 = (r6 - r5)|0;
+ r5 = r5 << 4;
+ r1 = (r1 + r5)|0;
+continue _1;
+}
+else{
+ r1 = (r1 + 32)|0;
+continue _1;
+}
+}
+else{
+__label__ = 10;
+break _1;
+}
+}
+}
+}
+}
+}
+}
+}
+else{
+__label__ = 2;
+break _1;
+}
+}
+switch(__label__ ){//multiple entries
+case 14:
+ return;
+break;
+case 2:
+ r0 = _2E_str212;
+ r1 = _2E_str537;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 419;
+ _assert(i7);
+break;
+case 10:
+ r0 = r2 >> 2;
+ r0 = heap32[(r0)];
+ r0 = r0 >> 2;
+ r0 = heap32[(r0+2)];
+ r1 = r6 >> 21;
+ r3 = r6 & 2097151;
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = r3;
+ __FUNCTION_TABLE__[(r0)>>2](i7);
+ return;
+break;
+}
+}
+
+function _ZNK14btQuantizedBvh26reportAabbOverlappingNodexEP21btNodeOverlapCallbackRK9btVector3S4_(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+ var f0;
+ var f1;
+var __label__ = 0;
+ i7 = sp + -40;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = heap32[(fp+1)];
+ r2 = heap32[(fp+2)];
+ r3 = heap32[(fp+3)];
+ r4 = heapU8[r0+60];
+_1: do {
+ if(r4 ==0) //_LBB153_20
+{
+ r0 = r0 >> 2;
+ r4 = heap32[(r0+24)];
+ r5 = 0;
+ r6 = r5;
+_3: while(true){
+ r7 = heap32[(r0+14)];
+ if(r7 >r5) //_LBB153_21
+{
+ if(r7 >r6) //_LBB153_23
+{
+ r7 = r2 >> 2;
+ r8 = r4 >> 2;
+ r6 = (r6 + 1)|0;
+ f0 = heapFloat[(r7)];
+ f1 = heapFloat[(r8+4)];
+ if(f0 >f1) //_LBB153_26
+{
+__label__ = 26;
+}
+else{
+ r9 = r3 >> 2;
+ f0 = heapFloat[(r9)];
+ f1 = heapFloat[(r8)];
+ if(f0 <f1) //_LBB153_26
+{
+__label__ = 26;
+}
+else{
+ r9 = 1;
+__label__ = 27;
+}
+}
+if (__label__ == 26){
+ r9 = 0;
+}
+ f0 = heapFloat[(r7+2)];
+ f1 = heapFloat[(r8+6)];
+ if(f0 >f1) //_LBB153_30
+{
+__label__ = 29;
+}
+else{
+ r10 = r3 >> 2;
+ f0 = heapFloat[(r10+2)];
+ f1 = heapFloat[(r8+2)];
+ if(f0 <f1) //_LBB153_30
+{
+__label__ = 29;
+}
+else{
+__label__ = 30;
+}
+}
+if (__label__ == 29){
+ r9 = 0;
+}
+ f0 = heapFloat[(r7+1)];
+ f1 = heapFloat[(r8+5)];
+ if(f0 <=f1) //_LBB153_33
+{
+ r7 = r3 >> 2;
+ f0 = heapFloat[(r7+1)];
+ f1 = heapFloat[(r8+1)];
+ r7 = 0;
+ r10 = heap32[(r8+8)];
+ r11 = -1;
+ r9 = f0 < f1 ? r7 : r9;
+ r7 = r10 == r11;
+ r12 = r9 & 255;
+if(!(r12 ==0)) //_LBB153_35
+{
+ r10 = r10 != r11;
+ r10 = r10 & 1;
+ if(r10 ==0) //_LBB153_36
+{
+ r10 = r1 >> 2;
+ r10 = heap32[(r10)];
+ r10 = r10 >> 2;
+ r10 = heap32[(r10+2)];
+ r11 = heap32[(r8+10)];
+ r12 = heap32[(r8+9)];
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r12;
+ heap32[(g0+2)] = r11;
+ __FUNCTION_TABLE__[(r10)>>2](i7);
+}
+}
+}
+else{
+ r7 = heap32[(r8+8)];
+ r9 = -1;
+ r7 = r7 == r9;
+ r9 = 0;
+}
+ r9 = r9 & 255;
+if(!(r9 !=0)) //_LBB153_39
+{
+ r7 = r7 & 1;
+ if(r7 ==0) //_LBB153_40
+{
+ r7 = heap32[(r8+8)];
+ r8 = r7 << 6;
+ r4 = (r4 + r8)|0;
+ r5 = (r7 + r5)|0;
+continue _3;
+}
+}
+ r4 = (r4 + 64)|0;
+ r5 = (r5 + 1)|0;
+}
+else{
+__label__ = 22;
+break _3;
+}
+}
+else{
+__label__ = 40;
+break _3;
+}
+}
+switch(__label__ ){//multiple entries
+case 40:
+ r0 = maxIterations;
+ r0 = r0 >> 2;
+ r1 = heap32[(r0)];
+ if(r1 >=r6) //_LBB153_17
+{
+break _1;
+}
+else{
+ heap32[(r0)] = r6;
+ return;
+}
+break;
+case 22:
+ r0 = _2E_str1921;
+ r1 = _2E_str537;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 367;
+ _assert(i7);
+break;
+}
+}
+else{
+ r4 = sp + -6;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r4;
+ heap32[(g0+2)] = r2;
+ heap32[(g0+3)] = 0;
+ _ZNK14btQuantizedBvh17quantizeWithClampEPtRK9btVector3i(i7);
+ r2 = sp + -12;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r2;
+ heap32[(g0+2)] = r3;
+ heap32[(g0+3)] = 1;
+ r3 = r0 >> 2;
+ _ZNK14btQuantizedBvh17quantizeWithClampEPtRK9btVector3i(i7);
+ r5 = heap32[(r3+36)];
+ if(r5 ==2) //_LBB153_18
+{
+ r3 = heap32[(r3+34)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r3;
+ heap32[(g0+2)] = r1;
+ heap32[(g0+3)] = r4;
+ heap32[(g0+4)] = r2;
+ _ZNK14btQuantizedBvh42walkRecursiveQuantizedTreeAgainstQueryAabbEPK18btQuantizedBvhNodeP21btNodeOverlapCallbackPtS5_(i7);
+ return;
+}
+else{
+ if(r5 ==1) //_LBB153_5
+{
+ r5 = heapU8[r0+60];
+ if(r5 ==0) //_LBB153_7
+{
+ r2 = _2E_str212;
+ r3 = _2E_str537;
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = r3;
+ heap32[(g0+2)] = 735;
+ _assert(i7);
+}
+else{
+ r5 = heap32[(r3+38)];
+ if(r5 >0) //_LBB153_8
+{
+ r5 = 0;
+_42: while(true){
+ r6 = heap32[(r3+40)];
+ r7 = r5 << 5;
+ r8 = (r6 + r7)|0;
+ r9 = heapU16[(sp+-6)>>1];
+ r10 = heapU16[(r8+6)>>1];
+if(!(uint(r9) >uint(r10))) //_LBB153_16
+{
+ r9 = heapU16[(sp+-12)>>1];
+ r6 = heapU16[(r6+r7)>>1];
+ r7 = r9 & 65535;
+ r6 = r6 & 65535;
+if(!(uint(r7) <uint(r6))) //_LBB153_16
+{
+ r6 = heapU16[(sp+-2)>>1];
+ r7 = heapU16[(r8+10)>>1];
+ r6 = r6 & 65535;
+ r7 = r7 & 65535;
+if(!(uint(r6) >uint(r7))) //_LBB153_16
+{
+ r6 = heapU16[(sp+-8)>>1];
+ r7 = heapU16[(r8+4)>>1];
+ r6 = r6 & 65535;
+ r7 = r7 & 65535;
+if(!(uint(r6) <uint(r7))) //_LBB153_16
+{
+ r6 = heapU16[(sp+-4)>>1];
+ r7 = heapU16[(r8+8)>>1];
+ r6 = r6 & 65535;
+ r7 = r7 & 65535;
+if(!(uint(r6) >uint(r7))) //_LBB153_16
+{
+ r6 = heapU16[(sp+-10)>>1];
+ r7 = heapU16[(r8+2)>>1];
+ r6 = r6 & 65535;
+ r7 = r7 & 65535;
+if(!(uint(r6) <uint(r7))) //_LBB153_16
+{
+ r6 = r8 >> 2;
+ r7 = heap32[(r6+3)];
+ r6 = heap32[(r6+4)];
+ r6 = (r6 + r7)|0;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = r4;
+ heap32[(g0+3)] = r2;
+ heap32[(g0+4)] = r7;
+ heap32[(g0+5)] = r6;
+ _ZNK14btQuantizedBvh26walkStacklessQuantizedTreeEP21btNodeOverlapCallbackPtS2_ii(i7);
+}
+}
+}
+}
+}
+}
+ r5 = (r5 + 1)|0;
+ r6 = heap32[(r3+38)];
+ if(r6 >r5) //_LBB153_9
+{
+continue _42;
+}
+else{
+break _1;
+}
+}
+}
+else{
+break _1;
+}
+}
+}
+else{
+ if(r5 !=0) //_LBB153_19
+{
+ r0 = _2E_str10;
+ r1 = _2E_str537;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 341;
+ _assert(i7);
+}
+else{
+ r3 = heap32[(r3+14)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = r4;
+ heap32[(g0+3)] = r2;
+ heap32[(g0+4)] = 0;
+ heap32[(g0+5)] = r3;
+ _ZNK14btQuantizedBvh26walkStacklessQuantizedTreeEP21btNodeOverlapCallbackPtS2_ii(i7);
+ return;
+}
+}
+}
+}
+} while(0);
+ return;
+}
+
+function _ZN14btQuantizedBvh9buildTreeEii(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+ var r13;
+ var r14;
+ var r15;
+ var r16;
+ var r17;
+ var r18;
+ var r19;
+ var r20;
+ var r21;
+ var r22;
+ var r23;
+ var r24;
+ var r25;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+ var f10;
+ var f11;
+ var f12;
+ var f13;
+ var f14;
+ var f15;
+ var f16;
+ var f17;
+var __label__ = 0;
+ i7 = sp + -112;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ r1 = heap32[(fp+2)];
+ r2 = (r1 - r0)|0;
+ if(r2 >0) //_LBB154_2
+{
+ r3 = heap32[(fp)];
+ r4 = r3 >> 2;
+ r5 = heap32[(r4+14)];
+ if(r2 !=1) //_LBB154_7
+{
+_5: do {
+ if(r0 <r1) //_LBB154_9
+{
+ r6 = heapU8[r3+60];
+ f1 = 0;
+ r7 = r0;
+ f2 = f1;
+ f3 = f1;
+_7: while(true){
+ r8 = r6 & 255;
+ if(r8 ==0) //_LBB154_12
+{
+ r9 = heap32[(r4+19)];
+ r10 = r7 << 6;
+ r9 = (r9 + r10)|0;
+ r9 = r9 >> 2;
+ f0 = heapFloat[(r9)];
+ f5 = heapFloat[(r9+1)];
+ f8 = heapFloat[(r9+2)];
+ f4 = heapFloat[(r9+4)];
+ f6 = heapFloat[(r9+5)];
+ f7 = heapFloat[(r9+6)];
+}
+else{
+ r9 = heap32[(r4+29)];
+ r10 = r7 << 4;
+ r11 = (r9 + r10)|0;
+ r9 = heapU16[(r9+r10)>>1];
+ r10 = heapU16[(r11+2)>>1];
+ r12 = heapU16[(r11+4)>>1];
+ r13 = heapU16[(r11+6)>>1];
+ r14 = heapU16[(r11+8)>>1];
+ r11 = heapU16[(r11+10)>>1];
+ f0 = uint(r9); //fuitos r9, f0
+ f4 = heapFloat[(r4+9)];
+ f5 = uint(r13); //fuitos r13, f5
+ f6 = uint(r10); //fuitos r10, f6
+ f7 = heapFloat[(r4+10)];
+ f8 = uint(r14); //fuitos r14, f8
+ f9 = uint(r12); //fuitos r12, f9
+ f10 = heapFloat[(r4+11)];
+ f11 = uint(r11); //fuitos r11, f11
+ f0 = f0/f4;
+ f12 = heapFloat[(r4+1)];
+ f4 = f5/f4;
+ f5 = f6/f7;
+ f6 = heapFloat[(r4+2)];
+ f7 = f8/f7;
+ f8 = f9/f10;
+ f9 = heapFloat[(r4+3)];
+ f10 = f11/f10;
+ f0 = f0+f12;
+ f5 = f5+f6;
+ f8 = f8+f9;
+ f4 = f4+f12;
+ f6 = f7+f6;
+ f7 = f10+f9;
+}
+ f0 = f4+f0;
+ f4 = 0.5;
+ f5 = f6+f5;
+ f6 = f7+f8;
+ f0 = f0*f4;
+ f5 = f5*f4;
+ f6 = f6*f4;
+ r7 = (r7 + 1)|0;
+ f3 = f3+f0;
+ f2 = f2+f5;
+ f1 = f1+f6;
+if(!(r1 !=r7)) //_LBB154_10
+{
+break _7;
+}
+}
+ f0 = r2; //fitos r2, f0
+ if(r0 <r1) //_LBB154_16
+{
+ f5 = 1;
+ f5 = f5/f0;
+ f6 = f3*f5;
+ f7 = f2*f5;
+ f5 = f1*f5;
+ f1 = 0;
+ r6 = r0;
+ f2 = f1;
+ f3 = f1;
+_16: while(true){
+ if(r8 ==0) //_LBB154_19
+{
+ r7 = heap32[(r4+19)];
+ r9 = r6 << 6;
+ r7 = (r7 + r9)|0;
+ r7 = r7 >> 2;
+ f8 = heapFloat[(r7)];
+ f10 = heapFloat[(r7+1)];
+ f13 = heapFloat[(r7+2)];
+ f9 = heapFloat[(r7+4)];
+ f11 = heapFloat[(r7+5)];
+ f12 = heapFloat[(r7+6)];
+}
+else{
+ r7 = heap32[(r4+29)];
+ r9 = r6 << 4;
+ r10 = (r7 + r9)|0;
+ r7 = heapU16[(r7+r9)>>1];
+ r9 = heapU16[(r10+2)>>1];
+ r11 = heapU16[(r10+4)>>1];
+ r12 = heapU16[(r10+6)>>1];
+ r13 = heapU16[(r10+8)>>1];
+ r10 = heapU16[(r10+10)>>1];
+ f8 = uint(r7); //fuitos r7, f8
+ f9 = heapFloat[(r4+9)];
+ f10 = uint(r12); //fuitos r12, f10
+ f11 = uint(r9); //fuitos r9, f11
+ f12 = heapFloat[(r4+10)];
+ f13 = uint(r13); //fuitos r13, f13
+ f14 = uint(r11); //fuitos r11, f14
+ f15 = heapFloat[(r4+11)];
+ f16 = uint(r10); //fuitos r10, f16
+ f8 = f8/f9;
+ f17 = heapFloat[(r4+1)];
+ f9 = f10/f9;
+ f10 = f11/f12;
+ f11 = heapFloat[(r4+2)];
+ f12 = f13/f12;
+ f13 = f14/f15;
+ f14 = heapFloat[(r4+3)];
+ f15 = f16/f15;
+ f8 = f8+f17;
+ f10 = f10+f11;
+ f13 = f13+f14;
+ f9 = f9+f17;
+ f11 = f12+f11;
+ f12 = f15+f14;
+}
+ f8 = f9+f8;
+ f9 = f11+f10;
+ f10 = f12+f13;
+ f8 = f8*f4;
+ f9 = f9*f4;
+ f10 = f10*f4;
+ f8 = f8-f6;
+ f9 = f9-f7;
+ f10 = f10-f5;
+ f8 = f8*f8;
+ f9 = f9*f9;
+ f10 = f10*f10;
+ r6 = (r6 + 1)|0;
+ f3 = f3+f8;
+ f2 = f2+f9;
+ f1 = f1+f10;
+if(!(r1 !=r6)) //_LBB154_17
+{
+break _5;
+}
+}
+}
+else{
+ f1 = 0;
+ f2 = f1;
+ f3 = f1;
+}
+}
+else{
+ f0 = r2; //fitos r2, f0
+ f1 = 0;
+ f2 = f1;
+ f3 = f1;
+}
+} while(0);
+ f4 = -1;
+ f5 = 1;
+ f0 = f0+f4;
+ f0 = f5/f0;
+ f3 = f3*f0;
+ f2 = f2*f0;
+ f0 = f1*f0;
+ if(f3 >=f2) //_LBB154_23
+{
+ r6 = 2;
+ r7 = 0;
+ r6 = f3 < f0 ? r6 : r7;
+}
+else{
+ r6 = 2;
+ r7 = 1;
+ r6 = f2 < f0 ? r6 : r7;
+}
+ r7 = sp + -32;
+ r8 = r7 >> 2;
+ heap32[(fp+-8)] = 0;
+ heap32[(r8+1)] = 0;
+ heap32[(r8+2)] = 0;
+ heap32[(r8+3)] = 0;
+ if(r0 <r1) //_LBB154_26
+{
+ r9 = heapU8[r3+60];
+ f0 = 0;
+ r10 = r0;
+ f1 = f0;
+ f2 = f0;
+_31: while(true){
+ r11 = r9 & 255;
+ if(r11 ==0) //_LBB154_29
+{
+ r11 = heap32[(r4+19)];
+ r12 = r10 << 6;
+ r11 = (r11 + r12)|0;
+ r11 = r11 >> 2;
+ f3 = heapFloat[(r11)];
+ f6 = heapFloat[(r11+1)];
+ f9 = heapFloat[(r11+2)];
+ f4 = heapFloat[(r11+4)];
+ f7 = heapFloat[(r11+5)];
+ f8 = heapFloat[(r11+6)];
+}
+else{
+ r11 = heap32[(r4+29)];
+ r12 = r10 << 4;
+ r13 = (r11 + r12)|0;
+ r11 = heapU16[(r11+r12)>>1];
+ r12 = heapU16[(r13+2)>>1];
+ r14 = heapU16[(r13+4)>>1];
+ r15 = heapU16[(r13+6)>>1];
+ r16 = heapU16[(r13+8)>>1];
+ r13 = heapU16[(r13+10)>>1];
+ f3 = uint(r11); //fuitos r11, f3
+ f4 = heapFloat[(r4+9)];
+ f6 = uint(r15); //fuitos r15, f6
+ f7 = uint(r12); //fuitos r12, f7
+ f8 = heapFloat[(r4+10)];
+ f9 = uint(r16); //fuitos r16, f9
+ f10 = uint(r14); //fuitos r14, f10
+ f11 = heapFloat[(r4+11)];
+ f12 = uint(r13); //fuitos r13, f12
+ f3 = f3/f4;
+ f13 = heapFloat[(r4+1)];
+ f4 = f6/f4;
+ f6 = f7/f8;
+ f7 = heapFloat[(r4+2)];
+ f8 = f9/f8;
+ f9 = f10/f11;
+ f10 = heapFloat[(r4+3)];
+ f11 = f12/f11;
+ f3 = f3+f13;
+ f6 = f6+f7;
+ f9 = f9+f10;
+ f4 = f4+f13;
+ f7 = f8+f7;
+ f8 = f11+f10;
+}
+ f3 = f4+f3;
+ f4 = 0.5;
+ f6 = f7+f6;
+ f7 = f8+f9;
+ f3 = f3*f4;
+ f6 = f6*f4;
+ f4 = f7*f4;
+ r10 = (r10 + 1)|0;
+ f2 = f2+f3;
+ f1 = f1+f6;
+ f0 = f0+f4;
+if(!(r1 !=r10)) //_LBB154_27
+{
+break _31;
+}
+}
+ heapFloat[(r8+2)] = f0;
+ heapFloat[(r8+1)] = f1;
+ heapFloat[(fp+-8)] = f2;
+}
+else{
+ f0 = 0;
+ f1 = f0;
+ f2 = f0;
+}
+ f3 = r2; //fitos r2, f3
+ f3 = f5/f3;
+ f2 = f2*f3;
+ f1 = f1*f3;
+ heapFloat[(fp+-8)] = f2;
+ f0 = f0*f3;
+ heapFloat[(r8+1)] = f1;
+ heapFloat[(r8+2)] = f0;
+_40: do {
+ if(r0 <r1) //_LBB154_34
+{
+ r8 = r6 << 2;
+ r6 = (r7 + r8)|0;
+ r6 = r6 >> 2;
+ f0 = heapFloat[(r6)];
+ r6 = r0 << 4;
+ r7 = (r0 - r1)|0;
+ r9 = r0 << 6;
+ r10 = r6 | 12;
+ r11 = 0;
+ r12 = r9;
+ r6 = r0;
+_42: while(true){
+ r13 = heapU8[r3+60];
+ if(r13 ==0) //_LBB154_37
+{
+ r14 = r11 << 4;
+ r15 = heap32[(r4+19)];
+ r15 = (r15 + r9)|0;
+ r14 = r14 << 2;
+ r14 = (r15 - r14)|0;
+ r14 = r14 >> 2;
+ f1 = heapFloat[(r14)];
+ f3 = heapFloat[(r14+1)];
+ f6 = heapFloat[(r14+2)];
+ f2 = heapFloat[(r14+4)];
+ f4 = heapFloat[(r14+5)];
+ f5 = heapFloat[(r14+6)];
+}
+else{
+ r14 = heap32[(r4+29)];
+ r14 = (r14 + r10)|0;
+ r15 = r11 << 4;
+ r14 = (r14 - r15)|0;
+ r15 = heapU16[(r14+-12)>>1];
+ r16 = heapU16[(r14+-10)>>1];
+ r17 = heapU16[(r14+-8)>>1];
+ r18 = heapU16[(r14+-6)>>1];
+ r19 = heapU16[(r14+-4)>>1];
+ r14 = heapU16[(r14+-2)>>1];
+ f1 = uint(r15); //fuitos r15, f1
+ f2 = heapFloat[(r4+9)];
+ f3 = uint(r18); //fuitos r18, f3
+ f4 = uint(r16); //fuitos r16, f4
+ f5 = heapFloat[(r4+10)];
+ f6 = uint(r19); //fuitos r19, f6
+ f7 = uint(r17); //fuitos r17, f7
+ f8 = heapFloat[(r4+11)];
+ f9 = uint(r14); //fuitos r14, f9
+ f1 = f1/f2;
+ f10 = heapFloat[(r4+1)];
+ f2 = f3/f2;
+ f3 = f4/f5;
+ f4 = heapFloat[(r4+2)];
+ f5 = f6/f5;
+ f6 = f7/f8;
+ f7 = heapFloat[(r4+3)];
+ f8 = f9/f8;
+ f1 = f1+f10;
+ f3 = f3+f4;
+ f6 = f6+f7;
+ f2 = f2+f10;
+ f4 = f5+f4;
+ f5 = f8+f7;
+}
+ f1 = f2+f1;
+ f2 = 0.5;
+ r14 = sp + -48;
+ f3 = f4+f3;
+ f1 = f1*f2;
+ f4 = f5+f6;
+ r15 = r14 >> 2;
+ f3 = f3*f2;
+ heapFloat[(fp+-12)] = f1;
+ f1 = f4*f2;
+ heapFloat[(r15+1)] = f3;
+ r14 = (r14 + r8)|0;
+ heapFloat[(r15+2)] = f1;
+ r14 = r14 >> 2;
+ heap32[(r15+3)] = 0;
+ f1 = heapFloat[(r14)];
+ if(f1 >f0) //_LBB154_40
+{
+ if(r13 ==0) //_LBB154_42
+{
+ r13 = r11 << 4;
+ r14 = heap32[(r4+19)];
+ r15 = (r14 + r9)|0;
+ r13 = r13 << 2;
+ r13 = (r15 - r13)|0;
+ r13 = r13 >> 2;
+ r15 = heap32[(r13+15)];
+ r16 = heap32[(r13+14)];
+ r17 = heap32[(r13+13)];
+ r18 = heap32[(r13+12)];
+ r19 = heap32[(r13+11)];
+ r20 = heap32[(r13+10)];
+ r21 = heap32[(r13+9)];
+ r22 = heap32[(r13+8)];
+ f1 = heapFloat[(r13+7)];
+ f2 = heapFloat[(r13+6)];
+ f3 = heapFloat[(r13+5)];
+ f4 = heapFloat[(r13+4)];
+ f5 = heapFloat[(r13+3)];
+ f6 = heapFloat[(r13+2)];
+ f7 = heapFloat[(r13+1)];
+ f8 = heapFloat[(r13)];
+ r13 = r6 << 6;
+ r23 = (r14 + r12)|0;
+ r14 = (r14 + r13)|0;
+ heap32[(g0)] = r23;
+ heap32[(g0+1)] = r14;
+ heap32[(g0+2)] = 64;
+ memcpy(i7);
+ r14 = heap32[(r4+19)];
+ r13 = (r14 + r13)|0;
+ r13 = r13 >> 2;
+ heapFloat[(r13)] = f8;
+ heapFloat[(r13+1)] = f7;
+ heapFloat[(r13+2)] = f6;
+ heapFloat[(r13+3)] = f5;
+ heapFloat[(r13+4)] = f4;
+ heapFloat[(r13+5)] = f3;
+ heapFloat[(r13+6)] = f2;
+ heapFloat[(r13+7)] = f1;
+ heap32[(r13+8)] = r22;
+ heap32[(r13+9)] = r21;
+ heap32[(r13+10)] = r20;
+ heap32[(r13+11)] = r19;
+ heap32[(r13+12)] = r18;
+ heap32[(r13+13)] = r17;
+ heap32[(r13+14)] = r16;
+ heap32[(r13+15)] = r15;
+}
+else{
+ r13 = heap32[(r4+29)];
+ r14 = (r13 + r10)|0;
+ r15 = r11 << 4;
+ r14 = (r14 - r15)|0;
+ r15 = r6 << 4;
+ r16 = r14 >> 2;
+ r17 = heap32[(r16)];
+ r18 = heapU16[(r14+-2)>>1];
+ r19 = heapU16[(r14+-4)>>1];
+ r20 = heapU16[(r14+-6)>>1];
+ r21 = heapU16[(r14+-8)>>1];
+ r22 = heapU16[(r14+-10)>>1];
+ r23 = heapU16[(r13+r15)>>1];
+ r24 = heapU16[(r14+-12)>>1];
+ r13 = (r13 + r15)|0;
+ heap16[(r14+-12)>>1] = r23;
+ r23 = heapU16[(r13+2)>>1];
+ heap16[(r14+-10)>>1] = r23;
+ r23 = heapU16[(r13+4)>>1];
+ heap16[(r14+-8)>>1] = r23;
+ r23 = heapU16[(r13+6)>>1];
+ heap16[(r14+-6)>>1] = r23;
+ r23 = heapU16[(r13+8)>>1];
+ heap16[(r14+-4)>>1] = r23;
+ r23 = heapU16[(r13+10)>>1];
+ r13 = r13 >> 2;
+ heap16[(r14+-2)>>1] = r23;
+ r13 = heap32[(r13+3)];
+ heap32[(r16)] = r13;
+ r13 = heap32[(r4+29)];
+ r14 = (r13 + r15)|0;
+ heap16[(r13+r15)>>1] = r24;
+ heap16[(r14+2)>>1] = r22;
+ heap16[(r14+4)>>1] = r21;
+ heap16[(r14+6)>>1] = r20;
+ heap16[(r14+8)>>1] = r19;
+ r13 = r14 >> 2;
+ heap16[(r14+10)>>1] = r18;
+ heap32[(r13+3)] = r17;
+}
+ r6 = (r6 + 1)|0;
+}
+ r11 = (r11 + -1)|0;
+ r12 = (r12 + 64)|0;
+if(!(r7 !=r11)) //_LBB154_35
+{
+break _40;
+}
+}
+}
+else{
+ r6 = r0;
+}
+} while(0);
+ r7 = (r2 / 3)|0;
+ r8 = (r7 + r0)|0;
+ if(r8 >=r6) //_LBB154_48
+{
+__label__ = 46;
+}
+else{
+ r8 = (r1 + -1)|0;
+ r7 = (r8 - r7)|0;
+ if(r7 <=r6) //_LBB154_48
+{
+__label__ = 46;
+}
+else{
+__label__ = 47;
+}
+}
+if (__label__ == 46){
+ r6 = r2 >> 1;
+ r6 = (r6 + r0)|0;
+}
+if(!(r6 ==r0)) //_LBB154_51
+{
+ if(r6 !=r1) //_LBB154_52
+{
+ r2 = heap32[(r4+14)];
+ heap32[(fp+-21)] = r2;
+ r2 = heapU8[r3+60];
+ if(r2 ==0) //_LBB154_54
+{
+ r2 = heap32[(fp+-21)];
+ r2 = r2 << 6;
+ r7 = heap32[(r4+24)];
+ r2 = (r7 + r2)|0;
+ r2 = r2 >> 2;
+ heap32[(r2)] = heap32[(r4+5)];
+ heap32[(r2+1)] = heap32[(r4+6)];
+ heap32[(r2+2)] = heap32[(r4+7)];
+ heap32[(r2+3)] = heap32[(r4+8)];
+}
+else{
+ r2 = heap32[(r4+34)];
+ r7 = heap32[(fp+-21)];
+ r7 = r7 << 4;
+ r2 = (r2 + r7)|0;
+ r7 = (r3 + 20)|0;
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r2;
+ heap32[(g0+2)] = r7;
+ heap32[(g0+3)] = 0;
+ _ZNK14btQuantizedBvh8quantizeEPtRK9btVector3i(i7);
+}
+ r2 = heap32[(r4+14)];
+ r7 = heapU8[r3+60];
+ if(r7 ==0) //_LBB154_57
+{
+ r2 = r2 << 6;
+ r7 = heap32[(r4+24)];
+ r2 = (r7 + r2)|0;
+ r2 = r2 >> 2;
+ heap32[(r2+4)] = heap32[(r4+1)];
+ heap32[(r2+5)] = heap32[(r4+2)];
+ heap32[(r2+6)] = heap32[(r4+3)];
+ heap32[(r2+7)] = heap32[(r4+4)];
+}
+else{
+ r7 = heap32[(r4+34)];
+ r2 = r2 << 4;
+ r2 = (r7 + r2)|0;
+ r2 = (r2 + 6)|0;
+ r7 = (r3 + 4)|0;
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r2;
+ heap32[(g0+2)] = r7;
+ heap32[(g0+3)] = 1;
+ _ZNK14btQuantizedBvh8quantizeEPtRK9btVector3i(i7);
+}
+_73: do {
+if(!(r0 >=r1)) //_LBB154_95
+{
+ r2 = r0;
+_75: while(true){
+ r7 = heapU8[r3+60];
+_77: do {
+ if(r7 ==0) //_LBB154_69
+{
+ r7 = heap32[(r4+19)];
+ r8 = r2 << 6;
+ r7 = (r7 + r8)|0;
+ r7 = r7 >> 2;
+ f0 = heapFloat[(r7+4)];
+ r8 = sp + -80;
+ heapFloat[(fp+-20)] = f0;
+ f1 = heapFloat[(r7+5)];
+ r8 = r8 >> 2;
+ heapFloat[(r8+1)] = f1;
+ f2 = heapFloat[(r7+6)];
+ heapFloat[(r8+2)] = f2;
+ f3 = heapFloat[(r7+7)];
+ heapFloat[(r8+3)] = f3;
+ f4 = heapFloat[(r7)];
+ r8 = sp + -64;
+ heapFloat[(fp+-16)] = f4;
+ f5 = heapFloat[(r7+1)];
+ r8 = r8 >> 2;
+ heapFloat[(r8+1)] = f5;
+ f6 = heapFloat[(r7+2)];
+ heapFloat[(r8+2)] = f6;
+ f7 = heapFloat[(r7+3)];
+ heapFloat[(r8+3)] = f7;
+ r7 = heap32[(r4+14)];
+ r8 = heap32[(r4+24)];
+ r7 = r7 << 6;
+ r8 = (r8 + r7)|0;
+ r8 = r8 >> 2;
+ f8 = heapFloat[(r8)];
+if(!(f4 >=f8)) //_LBB154_71
+{
+ heapFloat[(r8)] = f4;
+}
+ f4 = heapFloat[(r8+1)];
+if(!(f5 >=f4)) //_LBB154_73
+{
+ heapFloat[(r8+1)] = f5;
+}
+ f4 = heapFloat[(r8+2)];
+if(!(f6 >=f4)) //_LBB154_75
+{
+ heapFloat[(r8+2)] = f6;
+}
+ f4 = heapFloat[(r8+3)];
+if(!(f7 >=f4)) //_LBB154_77
+{
+ heapFloat[(r8+3)] = f7;
+}
+ r8 = heap32[(r4+24)];
+ r7 = (r8 + r7)|0;
+ r7 = r7 >> 2;
+ f4 = heapFloat[(r7+4)];
+if(!(f4 >=f0)) //_LBB154_79
+{
+ heapFloat[(r7+4)] = f0;
+}
+ f0 = heapFloat[(r7+5)];
+if(!(f0 >=f1)) //_LBB154_81
+{
+ heapFloat[(r7+5)] = f1;
+}
+ f0 = heapFloat[(r7+6)];
+if(!(f0 >=f2)) //_LBB154_83
+{
+ heapFloat[(r7+6)] = f2;
+}
+ f0 = heapFloat[(r7+7)];
+ if(f0 >=f3) //_LBB154_94
+{
+break _77;
+}
+else{
+ heapFloat[(r7+7)] = f3;
+}
+}
+else{
+ r7 = heap32[(r4+29)];
+ r8 = r2 << 4;
+ r9 = (r7 + r8)|0;
+ r10 = sp + -80;
+ r11 = heapU16[(r9+10)>>1];
+ r12 = heapU16[(r9+8)>>1];
+ r13 = heapU16[(r9+6)>>1];
+ f0 = heapFloat[(r4+11)];
+ f1 = heapFloat[(r4+10)];
+ f2 = heapFloat[(r4+9)];
+ r14 = r10 >> 2;
+ f3 = uint(r13); //fuitos r13, f3
+ heap32[(r14+3)] = 0;
+ f3 = f3/f2;
+ f4 = heapFloat[(r4+1)];
+ f3 = f3+f4;
+ f5 = uint(r12); //fuitos r12, f5
+ heapFloat[(fp+-20)] = f3;
+ f3 = f5/f1;
+ f5 = heapFloat[(r4+2)];
+ f3 = f3+f5;
+ f6 = uint(r11); //fuitos r11, f6
+ heapFloat[(r14+1)] = f3;
+ f3 = f6/f0;
+ f6 = heapFloat[(r4+3)];
+ f3 = f3+f6;
+ heapFloat[(r14+2)] = f3;
+ r7 = heapU16[(r7+r8)>>1];
+ r8 = sp + -64;
+ f3 = uint(r7); //fuitos r7, f3
+ r7 = heapU16[(r9+4)>>1];
+ r9 = heapU16[(r9+2)>>1];
+ f7 = uint(r9); //fuitos r9, f7
+ f2 = f3/f2;
+ r9 = r8 >> 2;
+ f3 = uint(r7); //fuitos r7, f3
+ f1 = f7/f1;
+ f2 = f2+f4;
+ heap32[(r9+3)] = 0;
+ f0 = f3/f0;
+ f1 = f1+f5;
+ heapFloat[(fp+-16)] = f2;
+ f0 = f0+f6;
+ heapFloat[(r9+1)] = f1;
+ heapFloat[(r9+2)] = f0;
+ r7 = heap32[(r4+14)];
+ r9 = sp + -6;
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r9;
+ heap32[(g0+2)] = r8;
+ heap32[(g0+3)] = 0;
+ _ZNK14btQuantizedBvh8quantizeEPtRK9btVector3i(i7);
+ r8 = sp + -12;
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r8;
+ heap32[(g0+2)] = r10;
+ heap32[(g0+3)] = 1;
+ _ZNK14btQuantizedBvh8quantizeEPtRK9btVector3i(i7);
+ r8 = heapU16[(sp+-6)>>1];
+ r9 = heap32[(r4+34)];
+ r7 = r7 << 4;
+ r10 = heapU16[(r9+r7)>>1];
+ if(uint(r10) >uint(r8)) //_LBB154_63
+{
+ heap16[(r9+r7)>>1] = r8;
+ r9 = heap32[(r4+34)];
+}
+ r8 = (r9 + r7)|0;
+ r10 = heapU16[(sp+-12)>>1];
+ r11 = heapU16[(r8+6)>>1];
+ if(uint(r11) <uint(r10)) //_LBB154_66
+{
+ heap16[(r8+6)>>1] = r10;
+ r9 = heap32[(r4+34)];
+}
+ r8 = (r9 + r7)|0;
+ r10 = heapU16[(sp+-4)>>1];
+ r11 = heapU16[(r8+2)>>1];
+ if(uint(r11) >uint(r10)) //_LBB154_89
+{
+ heap16[(r8+2)>>1] = r10;
+ r9 = heap32[(r4+34)];
+}
+ r8 = (r9 + r7)|0;
+ r10 = heapU16[(sp+-10)>>1];
+ r11 = heapU16[(r8+8)>>1];
+ if(uint(r11) <uint(r10)) //_LBB154_90
+{
+ heap16[(r8+8)>>1] = r10;
+ r9 = heap32[(r4+34)];
+}
+ r8 = (r9 + r7)|0;
+ r10 = heapU16[(sp+-2)>>1];
+ r11 = heapU16[(r8+4)>>1];
+ if(uint(r11) >uint(r10)) //_LBB154_92
+{
+ heap16[(r8+4)>>1] = r10;
+ r9 = heap32[(r4+34)];
+}
+ r7 = (r9 + r7)|0;
+ r8 = heapU16[(sp+-8)>>1];
+ r9 = heapU16[(r7+10)>>1];
+ if(uint(r9) <uint(r8)) //_LBB154_93
+{
+ heap16[(r7+10)>>1] = r8;
+}
+}
+} while(0);
+ r2 = (r2 + 1)|0;
+if(!(r1 !=r2)) //_LBB154_60
+{
+break _73;
+}
+}
+}
+} while(0);
+ r2 = heap32[(r4+14)];
+ r7 = (r2 + 1)|0;
+ heap32[(r4+14)] = r7;
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r0;
+ heap32[(g0+2)] = r6;
+ _ZN14btQuantizedBvh9buildTreeEii(i7);
+ r0 = heap32[(r4+14)];
+ heap32[(fp+-23)] = r0;
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r6;
+ heap32[(g0+2)] = r1;
+ _ZN14btQuantizedBvh9buildTreeEii(i7);
+ r0 = heap32[(r4+14)];
+ r0 = (r0 - r5)|0;
+ heap32[(fp+-22)] = r0;
+ r0 = heapU8[r3+60];
+_120: do {
+if(!(r0 ==0)) //_LBB154_143
+{
+ r0 = heap32[(fp+-22)];
+ r0 = r0 << 4;
+if(!(r0 <2049)) //_LBB154_142
+{
+ r0 = heap32[(r4+34)];
+ r1 = heap32[(fp+-23)];
+ r1 = r1 << 4;
+ heap32[(fp+-24)] = r1;
+ r2 = r2 << 4;
+ r1 = (r0 + r1)|0;
+ r2 = (r0 + r2)|0;
+ r5 = r1 >> 2;
+ r6 = r2 >> 2;
+ r5 = heap32[(r5+3)];
+ r8 = 0;
+ r6 = heap32[(r6+7)];
+ r9 = 1;
+ r10 = (r8 - r6)|0;
+ r6 = r6 < 0 ? r10 : r9;
+ r10 = r6 << 4;
+if(!(r10 >2048)) //_LBB154_119
+{
+ r10 = heap32[(r4+39)];
+ r11 = heap32[(r4+38)];
+ if(r10 ==r11) //_LBB154_100
+{
+ r12 = r11 << 1;
+ r12 = r11 == 0 ? r9 : r12;
+ if(r10 >=r12) //_LBB154_99
+{
+__label__ = 92;
+}
+else{
+ if(r12 !=0) //_LBB154_103
+{
+ r10 = gNumAlignedAllocs;
+ r10 = r10 >> 2;
+ r13 = heap32[(r10)];
+ r13 = (r13 + 1)|0;
+ r14 = r12 << 5;
+ heap32[(r10)] = r13;
+ r10 = r14 | 19;
+ heap32[(g0)] = r10;
+ malloc(i7);
+ r13 = r_g0;
+ if(r13 !=0) //_LBB154_105
+{
+ r10 = 0;
+ r14 = (r13 + 4)|0;
+ r10 = (r10 - r14)|0;
+ r10 = r10 & 15;
+ r10 = (r13 + r10)|0;
+ r14 = (r10 + 4)|0;
+ r10 = r10 >> 2;
+ heap32[(r10)] = r13;
+ r13 = r14;
+}
+}
+else{
+ r13 = 0;
+}
+ r14 = (r3 + 160)|0;
+ if(r11 <1) //_LBB154_108
+{
+ r10 = r14 >> 2;
+ r16 = heap32[(r10)];
+}
+else{
+ r10 = 0;
+ r15 = r11;
+_137: while(true){
+ r16 = r14 >> 2;
+ r16 = heap32[(r16)];
+ r17 = (r16 + r10)|0;
+ r17 = r17 >> 2;
+ r18 = (r13 + r10)|0;
+ r15 = (r15 + -1)|0;
+ r10 = (r10 + 32)|0;
+ r19 = heap32[(r17)];
+ r18 = r18 >> 2;
+ r20 = heap32[(r17+1)];
+ r21 = heap32[(r17+2)];
+ r22 = heap32[(r17+3)];
+ r23 = heap32[(r17+4)];
+ r24 = heap32[(r17+5)];
+ r25 = heap32[(r17+6)];
+ r17 = heap32[(r17+7)];
+ heap32[(r18)] = r19;
+ heap32[(r18+1)] = r20;
+ heap32[(r18+2)] = r21;
+ heap32[(r18+3)] = r22;
+ heap32[(r18+4)] = r23;
+ heap32[(r18+5)] = r24;
+ heap32[(r18+6)] = r25;
+ heap32[(r18+7)] = r17;
+if(!(r15 !=0)) //_LBB154_109
+{
+break _137;
+}
+}
+ r14 = (r3 + 160)|0;
+}
+ if(r16 !=0) //_LBB154_113
+{
+ r10 = heapU8[r3+164];
+ if(r10 !=0) //_LBB154_115
+{
+ r10 = gNumAlignedFree;
+ r10 = r10 >> 2;
+ r15 = heap32[(r10)];
+ r15 = (r15 + 1)|0;
+ r16 = r16 >> 2;
+ heap32[(r10)] = r15;
+ r10 = heap32[(r16+-1)];
+ heap32[(g0)] = r10;
+ free(i7);
+ r10 = heap32[(r4+38)];
+}
+else{
+ r10 = r11;
+}
+ r15 = r14 >> 2;
+ heap32[(r15)] = 0;
+}
+else{
+ r10 = r11;
+}
+ r14 = r14 >> 2;
+ heap8[r3+164] = r9;
+ heap32[(r14)] = r13;
+ heap32[(r4+39)] = r12;
+__label__ = 110;
+}
+}
+else{
+__label__ = 92;
+}
+if (__label__ == 92){
+ r10 = r11;
+}
+ r10 = (r10 + 1)|0;
+ heap32[(r4+38)] = r10;
+ r10 = heap32[(r4+40)];
+ r12 = heapU16[(r2+16)>>1];
+ r11 = r11 << 5;
+ heap16[(r10+r11)>>1] = r12;
+ r10 = (r10 + r11)|0;
+ r11 = heapU16[(r2+18)>>1];
+ heap16[(r10+2)>>1] = r11;
+ r11 = heapU16[(r2+20)>>1];
+ heap16[(r10+4)>>1] = r11;
+ r11 = heapU16[(r2+22)>>1];
+ heap16[(r10+6)>>1] = r11;
+ r11 = heapU16[(r2+24)>>1];
+ heap16[(r10+8)>>1] = r11;
+ r2 = heapU16[(r2+26)>>1];
+ r11 = r10 >> 2;
+ heap16[(r10+10)>>1] = r2;
+ heap32[(r11+3)] = r7;
+ heap32[(r11+4)] = r6;
+}
+ r2 = (r8 - r5)|0;
+ r2 = r5 < 0 ? r2 : r9;
+ r5 = r2 << 4;
+if(!(r5 >2048)) //_LBB154_141
+{
+ r5 = heap32[(r4+39)];
+ r6 = heap32[(r4+38)];
+ if(r5 ==r6) //_LBB154_122
+{
+ r7 = r6 << 1;
+ r7 = r6 == 0 ? r9 : r7;
+ if(r5 >=r7) //_LBB154_121
+{
+__label__ = 113;
+}
+else{
+ if(r7 !=0) //_LBB154_125
+{
+ r5 = gNumAlignedAllocs;
+ r5 = r5 >> 2;
+ r10 = heap32[(r5)];
+ r10 = (r10 + 1)|0;
+ r11 = r7 << 5;
+ heap32[(r5)] = r10;
+ r5 = r11 | 19;
+ heap32[(g0)] = r5;
+ malloc(i7);
+ r10 = r_g0;
+ if(r10 !=0) //_LBB154_127
+{
+ r5 = (r10 + 4)|0;
+ r5 = (r8 - r5)|0;
+ r5 = r5 & 15;
+ r5 = (r10 + r5)|0;
+ r11 = (r5 + 4)|0;
+ r5 = r5 >> 2;
+ heap32[(r5)] = r10;
+ r10 = r11;
+}
+}
+else{
+ r10 = 0;
+}
+ r11 = (r3 + 160)|0;
+ if(r6 <1) //_LBB154_130
+{
+ r5 = r11 >> 2;
+ r12 = heap32[(r5)];
+}
+else{
+ r5 = r6;
+_166: while(true){
+ r12 = r11 >> 2;
+ r12 = heap32[(r12)];
+ r13 = (r12 + r8)|0;
+ r13 = r13 >> 2;
+ r14 = (r10 + r8)|0;
+ r5 = (r5 + -1)|0;
+ r8 = (r8 + 32)|0;
+ r15 = heap32[(r13)];
+ r14 = r14 >> 2;
+ r16 = heap32[(r13+1)];
+ r17 = heap32[(r13+2)];
+ r18 = heap32[(r13+3)];
+ r19 = heap32[(r13+4)];
+ r20 = heap32[(r13+5)];
+ r21 = heap32[(r13+6)];
+ r13 = heap32[(r13+7)];
+ heap32[(r14)] = r15;
+ heap32[(r14+1)] = r16;
+ heap32[(r14+2)] = r17;
+ heap32[(r14+3)] = r18;
+ heap32[(r14+4)] = r19;
+ heap32[(r14+5)] = r20;
+ heap32[(r14+6)] = r21;
+ heap32[(r14+7)] = r13;
+if(!(r5 !=0)) //_LBB154_131
+{
+break _166;
+}
+}
+ r11 = (r3 + 160)|0;
+}
+ if(r12 !=0) //_LBB154_135
+{
+ r5 = heapU8[r3+164];
+ if(r5 !=0) //_LBB154_137
+{
+ r5 = gNumAlignedFree;
+ r5 = r5 >> 2;
+ r8 = heap32[(r5)];
+ r8 = (r8 + 1)|0;
+ r12 = r12 >> 2;
+ heap32[(r5)] = r8;
+ r5 = heap32[(r12+-1)];
+ heap32[(g0)] = r5;
+ free(i7);
+ r5 = heap32[(r4+38)];
+}
+else{
+ r5 = r6;
+}
+ r8 = r11 >> 2;
+ heap32[(r8)] = 0;
+}
+else{
+ r5 = r6;
+}
+ r8 = r11 >> 2;
+ heap8[r3+164] = r9;
+ heap32[(r8)] = r10;
+ heap32[(r4+39)] = r7;
+__label__ = 131;
+}
+}
+else{
+__label__ = 113;
+}
+if (__label__ == 113){
+ r5 = r6;
+}
+ r5 = (r5 + 1)|0;
+ heap32[(r4+38)] = r5;
+ r5 = heap32[(r4+40)];
+ r7 = heap32[(fp+-24)];
+ r0 = heapU16[(r0+r7)>>1];
+ r6 = r6 << 5;
+ heap16[(r5+r6)>>1] = r0;
+ r0 = (r5 + r6)|0;
+ r5 = heapU16[(r1+2)>>1];
+ heap16[(r0+2)>>1] = r5;
+ r5 = heapU16[(r1+4)>>1];
+ heap16[(r0+4)>>1] = r5;
+ r5 = heapU16[(r1+6)>>1];
+ heap16[(r0+6)>>1] = r5;
+ r5 = heapU16[(r1+8)>>1];
+ heap16[(r0+8)>>1] = r5;
+ r1 = heapU16[(r1+10)>>1];
+ r5 = r0 >> 2;
+ heap16[(r0+10)>>1] = r1;
+ r0 = heap32[(fp+-23)];
+ heap32[(r5+3)] = r0;
+ heap32[(r5+4)] = r2;
+}
+ r0 = heap32[(r4+38)];
+ heap32[(r4+42)] = r0;
+ r0 = heapU8[r3+60];
+ if(r0 ==0) //_LBB154_143
+{
+break _120;
+}
+}
+ r0 = heap32[(fp+-21)];
+ r0 = r0 << 4;
+ r4 = heap32[(r4+34)];
+ r4 = (r4 + r0)|0;
+ r0 = 0;
+ r4 = r4 >> 2;
+ r1 = heap32[(fp+-22)];
+ r0 = (r0 - r1)|0;
+ heap32[(r4+3)] = r0;
+ return;
+}
+} while(0);
+ r0 = heap32[(fp+-21)];
+ r0 = r0 << 6;
+ r1 = heap32[(r4+24)];
+ r0 = (r1 + r0)|0;
+ r0 = r0 >> 2;
+ r1 = heap32[(fp+-22)];
+ heap32[(r0+8)] = r1;
+ return;
+}
+}
+ r0 = _2E_str21;
+ r1 = _2E_str537;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 278;
+ _assert(i7);
+}
+else{
+ r1 = heapU8[r3+60];
+ if(r1 ==0) //_LBB154_5
+{
+ r1 = heap32[(r4+24)];
+ r2 = heap32[(r4+19)];
+ r3 = r5 << 6;
+ r0 = r0 << 6;
+ r1 = (r1 + r3)|0;
+ r0 = (r2 + r0)|0;
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r0;
+ heap32[(g0+2)] = 64;
+ memcpy(i7);
+}
+else{
+ r0 = r0 << 4;
+ r1 = heap32[(r4+29)];
+ r2 = heap32[(r4+34)];
+ r3 = heapU16[(r1+r0)>>1];
+ r5 = r5 << 4;
+ r0 = (r1 + r0)|0;
+ heap16[(r2+r5)>>1] = r3;
+ r1 = (r2 + r5)|0;
+ r2 = heapU16[(r0+2)>>1];
+ heap16[(r1+2)>>1] = r2;
+ r2 = heapU16[(r0+4)>>1];
+ heap16[(r1+4)>>1] = r2;
+ r2 = heapU16[(r0+6)>>1];
+ heap16[(r1+6)>>1] = r2;
+ r2 = heapU16[(r0+8)>>1];
+ heap16[(r1+8)>>1] = r2;
+ r2 = heapU16[(r0+10)>>1];
+ r0 = r0 >> 2;
+ heap16[(r1+10)>>1] = r2;
+ r1 = r1 >> 2;
+ r0 = heap32[(r0+3)];
+ heap32[(r1+3)] = r0;
+}
+ r0 = heap32[(r4+14)];
+ r0 = (r0 + 1)|0;
+ heap32[(r4+14)] = r0;
+ return;
+}
+}
+else{
+ r0 = _2E_str2246;
+ r1 = _2E_str537;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 127;
+ _assert(i7);
+}
+}
+
+function _ZNK14btQuantizedBvh36walkStacklessQuantizedTreeAgainstRayEP21btNodeOverlapCallbackRK9btVector3S4_S4_S4_ii(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+ var r13;
+ var r14;
+ var r15;
+ var r16;
+ var r17;
+ var r18;
+ var r19;
+ var r20;
+ var r21;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+ var f10;
+ var f11;
+ var f12;
+ var f13;
+ var f14;
+ var f15;
+ var f16;
+ var f17;
+ var f18;
+ var f19;
+var __label__ = 0;
+ i7 = sp + -96;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = heapU8[r0+60];
+ if(r1 !=0) //_LBB155_2
+{
+ r1 = heap32[(fp+1)];
+ r2 = heap32[(fp+2)];
+ r3 = heap32[(fp+3)];
+ r4 = heap32[(fp+4)];
+ r5 = heap32[(fp+5)];
+ r6 = heap32[(fp+6)];
+ r3 = r3 >> 2;
+ r2 = r2 >> 2;
+ f0 = heapFloat[(r3)];
+ f1 = heapFloat[(r2)];
+ f2 = heapFloat[(r3+1)];
+ f3 = heapFloat[(r2+1)];
+ f0 = f0-f1;
+ r7 = r0 >> 2;
+ f1 = f2-f3;
+ f2 = heapFloat[(r3+2)];
+ f3 = heapFloat[(r2+2)];
+ r8 = heap32[(r7+34)];
+ f2 = f2-f3;
+ f3 = f0*f0;
+ f4 = f1*f1;
+ f3 = f3+f4;
+ f4 = f2*f2;
+ f3 = f3+f4;
+ heapFloat[(g0)] = f3;
+ sqrtf(i7);
+ f4 = 1;
+ f3 = f4/f_g0;
+ f5 = heapFloat[(r3)];
+ f6 = heapFloat[(r2)];
+ f7 = heapFloat[(r3+1)];
+ f8 = heapFloat[(r2+1)];
+ f0 = f0*f3;
+ f9 = f5-f6;
+ f1 = f1*f3;
+ f10 = f7-f8;
+ f11 = heapFloat[(r3+2)];
+ f12 = heapFloat[(r2+2)];
+ f2 = f2*f3;
+ f3 = f11-f12;
+ f9 = f0*f9;
+ f10 = f1*f10;
+ f9 = f9+f10;
+ f3 = f2*f3;
+ f3 = f9+f3;
+ f9 = 0;
+ if(f0 !=f9) //_LBB155_4
+{
+ f0 = f4/f0;
+}
+else{
+ f0 = 999999984306749440;
+}
+ if(f1 !=f9) //_LBB155_7
+{
+ f1 = f4/f1;
+}
+else{
+ f1 = 999999984306749440;
+}
+ if(f2 !=f9) //_LBB155_10
+{
+ f2 = f4/f2;
+}
+else{
+ f2 = 999999984306749440;
+}
+ r9 = heapU8[r0+60];
+ if(r9 !=0) //_LBB155_13
+{
+ r4 = r4 >> 2;
+ r5 = r5 >> 2;
+ r9 = f0 < f9;
+ r10 = f1 < f9;
+ r11 = f2 < f9;
+ f4 = heapFloat[(r2+3)];
+ f10 = heapFloat[(r3+3)];
+ f13 = f5 < f6 ? f5 : f6;
+ f14 = heapFloat[(r4)];
+ f15 = f7 < f8 ? f7 : f8;
+ f16 = heapFloat[(r4+1)];
+ f17 = f11 < f12 ? f11 : f12;
+ f18 = heapFloat[(r4+2)];
+ f5 = f6 < f5 ? f5 : f6;
+ f6 = heapFloat[(r5)];
+ f7 = f8 < f7 ? f7 : f8;
+ f8 = heapFloat[(r5+1)];
+ f11 = f12 < f11 ? f11 : f12;
+ f12 = heapFloat[(r5+2)];
+ r3 = r9 & 1;
+ r9 = r10 & 1;
+ r10 = r11 & 1;
+ f19 = f10 < f4 ? f10 : f4;
+ f4 = f4 < f10 ? f10 : f4;
+ f10 = f13+f14;
+ f13 = f15+f16;
+ f14 = f17+f18;
+ f5 = f5+f6;
+ f6 = f7+f8;
+ f7 = f11+f12;
+ r11 = sp + -16;
+ r12 = r11 >> 2;
+ heapFloat[(fp+-4)] = f10;
+ heapFloat[(r12+1)] = f13;
+ heapFloat[(r12+2)] = f14;
+ heapFloat[(r12+3)] = f19;
+ f8 = heapFloat[(r7+1)];
+ if(f10 <f8) //_LBB155_15
+{
+ heapFloat[(fp+-4)] = f8;
+ f10 = f8;
+}
+ f8 = heapFloat[(r7+2)];
+ if(f13 <f8) //_LBB155_18
+{
+ heapFloat[(r12+1)] = f8;
+ f13 = f8;
+}
+ f8 = heapFloat[(r7+3)];
+ if(f14 <f8) //_LBB155_21
+{
+ heapFloat[(r12+2)] = f8;
+ f14 = f8;
+}
+ f8 = heapFloat[(r7+4)];
+ if(f19 <f8) //_LBB155_24
+{
+ heapFloat[(r12+3)] = f8;
+ f19 = f8;
+}
+ f8 = heapFloat[(r7+5)];
+if(!(f8 >=f10)) //_LBB155_27
+{
+ heapFloat[(fp+-4)] = f8;
+}
+ f8 = heapFloat[(r7+6)];
+if(!(f8 >=f13)) //_LBB155_29
+{
+ heapFloat[(r12+1)] = f8;
+}
+ f8 = heapFloat[(r7+7)];
+if(!(f8 >=f14)) //_LBB155_31
+{
+ heapFloat[(r12+2)] = f8;
+}
+ f8 = heapFloat[(r7+8)];
+if(!(f8 >=f19)) //_LBB155_33
+{
+ heapFloat[(r12+3)] = f8;
+}
+ r12 = sp + -38;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r12;
+ heap32[(g0+2)] = r11;
+ heap32[(g0+3)] = 0;
+ _ZNK14btQuantizedBvh8quantizeEPtRK9btVector3i(i7);
+ r11 = heapU8[r0+60];
+ if(r11 !=0) //_LBB155_35
+{
+ r11 = sp + -32;
+ r12 = r11 >> 2;
+ heapFloat[(fp+-8)] = f5;
+ heapFloat[(r12+1)] = f6;
+ heapFloat[(r12+2)] = f7;
+ heapFloat[(r12+3)] = f4;
+ f8 = heapFloat[(r7+1)];
+ if(f5 <f8) //_LBB155_37
+{
+ heapFloat[(fp+-8)] = f8;
+ f5 = f8;
+}
+ f8 = heapFloat[(r7+2)];
+ if(f6 <f8) //_LBB155_40
+{
+ heapFloat[(r12+1)] = f8;
+ f6 = f8;
+}
+ f8 = heapFloat[(r7+3)];
+ if(f7 <f8) //_LBB155_43
+{
+ heapFloat[(r12+2)] = f8;
+ f7 = f8;
+}
+ f8 = heapFloat[(r7+4)];
+ if(f4 <f8) //_LBB155_46
+{
+ heapFloat[(r12+3)] = f8;
+ f4 = f8;
+}
+ f8 = heapFloat[(r7+5)];
+if(!(f8 >=f5)) //_LBB155_49
+{
+ heapFloat[(fp+-8)] = f8;
+}
+ f5 = heapFloat[(r7+6)];
+if(!(f5 >=f6)) //_LBB155_51
+{
+ heapFloat[(r12+1)] = f5;
+}
+ f5 = heapFloat[(r7+7)];
+if(!(f5 >=f7)) //_LBB155_53
+{
+ heapFloat[(r12+2)] = f5;
+}
+ f5 = heapFloat[(r7+8)];
+if(!(f5 >=f4)) //_LBB155_55
+{
+ heapFloat[(r12+3)] = f5;
+}
+ r12 = sp + -44;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r12;
+ heap32[(g0+2)] = r11;
+ heap32[(g0+3)] = 1;
+ r0 = r3 ^ 1;
+ r11 = r9 ^ 1;
+ r12 = r10 ^ 1;
+ r13 = 0;
+ _ZNK14btQuantizedBvh8quantizeEPtRK9btVector3i(i7);
+ r14 = r13;
+_66: while(true){
+ if(r13 <r6) //_LBB155_56
+{
+ if(r14 <r6) //_LBB155_58
+{
+ r15 = r8 >> 2;
+ r16 = heap32[(r15+3)];
+ r14 = (r14 + 1)|0;
+ r16 = r16 >>> 31;
+ r17 = heapU16[(sp+-38)>>1];
+ r18 = heapU16[(r8+6)>>1];
+ if(uint(r17) >uint(r18)) //_LBB155_64
+{
+__label__ = 55;
+}
+else{
+ r17 = heapU16[(r8)>>1];
+ r18 = heapU16[(sp+-44)>>1];
+ r18 = r18 & 65535;
+ r17 = r17 & 65535;
+ if(uint(r18) <uint(r17)) //_LBB155_64
+{
+__label__ = 55;
+}
+else{
+ r18 = heapU16[(sp+-34)>>1];
+ r19 = heapU16[(r8+10)>>1];
+ r18 = r18 & 65535;
+ r19 = r19 & 65535;
+ if(uint(r18) >uint(r19)) //_LBB155_64
+{
+__label__ = 55;
+}
+else{
+ r18 = heapU16[(r8+4)>>1];
+ r19 = heapU16[(sp+-40)>>1];
+ r19 = r19 & 65535;
+ r18 = r18 & 65535;
+ if(uint(r19) <uint(r18)) //_LBB155_64
+{
+__label__ = 55;
+}
+else{
+ r19 = heapU16[(sp+-36)>>1];
+ r20 = heapU16[(r8+8)>>1];
+ r19 = r19 & 65535;
+ r20 = r20 & 65535;
+ if(uint(r19) >uint(r20)) //_LBB155_64
+{
+__label__ = 55;
+}
+else{
+ r19 = heapU16[(r8+2)>>1];
+ r20 = heapU16[(sp+-42)>>1];
+ r20 = r20 & 65535;
+ r19 = r19 & 65535;
+ if(uint(r20) >=uint(r19)) //_LBB155_65
+{
+ f4 = uint(r17); //fuitos r17, f4
+ f5 = heapFloat[(r7+9)];
+ f6 = uint(r19); //fuitos r19, f6
+ f7 = heapFloat[(r7+10)];
+ f4 = f4/f5;
+ f8 = heapFloat[(r7+1)];
+ f10 = heapFloat[(r7+11)];
+ f11 = heapFloat[(r7+2)];
+ f12 = heapFloat[(r7+3)];
+ r17 = sp + -80;
+ f13 = uint(r18); //fuitos r18, f13
+ f6 = f6/f7;
+ f4 = f4+f8;
+ f13 = f13/f10;
+ r18 = r17 >> 2;
+ f6 = f6+f11;
+ heapFloat[(fp+-20)] = f4;
+ f13 = f13+f12;
+ heapFloat[(r18+1)] = f6;
+ heapFloat[(r18+2)] = f13;
+ heap32[(r18+3)] = 0;
+ r19 = heapU16[(r8+10)>>1];
+ r20 = heapU16[(r8+8)>>1];
+ r21 = heapU16[(r8+6)>>1];
+ heap32[(r18+7)] = 0;
+ f14 = heapFloat[(r5)];
+ f4 = f4-f14;
+ heapFloat[(fp+-20)] = f4;
+ f4 = heapFloat[(r5+1)];
+ f4 = f6-f4;
+ heapFloat[(r18+1)] = f4;
+ f4 = heapFloat[(r5+2)];
+ f6 = uint(r21); //fuitos r21, f6
+ f4 = f13-f4;
+ f5 = f6/f5;
+ heapFloat[(r18+2)] = f4;
+ f4 = f5+f8;
+ f5 = heapFloat[(r4)];
+ f6 = uint(r20); //fuitos r20, f6
+ f4 = f4-f5;
+ f5 = f6/f7;
+ heapFloat[(r18+4)] = f4;
+ f4 = f5+f11;
+ f5 = heapFloat[(r4+1)];
+ f6 = uint(r19); //fuitos r19, f6
+ f4 = f4-f5;
+ f5 = f6/f10;
+ heapFloat[(r18+5)] = f4;
+ r19 = r3 << 4;
+ r20 = r11 << 4;
+ f4 = f5+f12;
+ f5 = heapFloat[(r4+2)];
+ r19 = (r17 + r19)|0;
+ r20 = (r17 + r20)|0;
+ f4 = f4-f5;
+ r19 = r19 >> 2;
+ heapFloat[(r18+6)] = f4;
+ r18 = r20 >> 2;
+ f4 = heapFloat[(r19)];
+ f5 = heapFloat[(r2)];
+ f6 = heapFloat[(r18+1)];
+ f7 = heapFloat[(r2+1)];
+ f4 = f4-f5;
+ f6 = f6-f7;
+ f4 = f4*f0;
+ f6 = f6*f1;
+ if(f4 >f6) //_LBB155_64
+{
+__label__ = 55;
+}
+else{
+ r18 = r0 << 4;
+ r19 = r9 << 4;
+ r18 = (r17 + r18)|0;
+ r19 = (r17 + r19)|0;
+ r18 = r18 >> 2;
+ r19 = r19 >> 2;
+ f8 = heapFloat[(r18)];
+ f10 = heapFloat[(r19+1)];
+ f5 = f8-f5;
+ f7 = f10-f7;
+ f5 = f5*f0;
+ f7 = f7*f1;
+ if(f7 >f5) //_LBB155_64
+{
+__label__ = 55;
+}
+else{
+ r18 = r12 << 4;
+ r18 = (r17 + r18)|0;
+ r18 = r18 >> 2;
+ f8 = heapFloat[(r18+2)];
+ f10 = heapFloat[(r2+2)];
+ f8 = f8-f10;
+ f4 = f4 < f7 ? f7 : f4;
+ f7 = f8*f2;
+ if(f4 >f7) //_LBB155_64
+{
+__label__ = 55;
+}
+else{
+ r18 = r10 << 4;
+ r17 = (r17 + r18)|0;
+ r17 = r17 >> 2;
+ f8 = heapFloat[(r17+2)];
+ f8 = f8-f10;
+ f5 = f6 < f5 ? f6 : f5;
+ f6 = f8*f2;
+ if(f6 >f5) //_LBB155_64
+{
+__label__ = 55;
+}
+else{
+ f4 = f4 < f6 ? f6 : f4;
+ f5 = f7 < f5 ? f7 : f5;
+ r17 = f4 >= f3;
+ r18 = f5 <= f9;
+ r17 = r17 | r18;
+ r18 = r17 & 1;
+ r17 = r18 ^ 1;
+ if(r16 != 0) //_LBB155_71
+{
+__label__ = 65;
+}
+else{
+ if(r18 ==0) //_LBB155_72
+{
+ r18 = heap32[(r15+3)];
+ if(r18 >-1) //_LBB155_74
+{
+ r19 = r1 >> 2;
+ r19 = heap32[(r19)];
+ r19 = r19 >> 2;
+ r19 = heap32[(r19+2)];
+ r20 = r18 >> 21;
+ r18 = r18 & 2097151;
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r20;
+ heap32[(g0+2)] = r18;
+ __FUNCTION_TABLE__[(r19)>>2](i7);
+__label__ = 65;
+}
+else{
+__label__ = 63;
+break _66;
+}
+}
+else{
+__label__ = 65;
+}
+}
+}
+}
+}
+}
+}
+else{
+__label__ = 55;
+}
+}
+}
+}
+}
+}
+if (__label__ == 55){
+ r17 = 0;
+}
+if(!(r17 !=0)) //_LBB155_77
+{
+ if(r16 != 0) //_LBB155_78
+{
+ r15 = heap32[(r15+3)];
+ if(r15 <0) //_LBB155_80
+{
+ r16 = r15 << 4;
+ r8 = (r8 - r16)|0;
+ r13 = (r13 - r15)|0;
+continue _66;
+}
+else{
+__label__ = 69;
+break _66;
+}
+}
+}
+ r8 = (r8 + 16)|0;
+ r13 = (r13 + 1)|0;
+}
+else{
+__label__ = 48;
+break _66;
+}
+}
+else{
+__label__ = 72;
+break _66;
+}
+}
+switch(__label__ ){//multiple entries
+case 72:
+ r0 = maxIterations;
+ r0 = r0 >> 2;
+ r1 = heap32[(r0)];
+if(!(r1 >=r14)) //_LBB155_84
+{
+ heap32[(r0)] = r14;
+}
+ return;
+break;
+case 69:
+ r0 = _2E_str941;
+ r1 = _2E_str313;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 75;
+ _assert(i7);
+break;
+case 63:
+ r0 = _2E_str739;
+ r1 = _2E_str313;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 80;
+ _assert(i7);
+break;
+case 48:
+ r0 = _2E_str1143;
+ r1 = _2E_str537;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 606;
+ _assert(i7);
+break;
+}
+}
+}
+ r0 = _2E_str212;
+ r1 = _2E_str313;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 420;
+ _assert(i7);
+}
+else{
+ r0 = _2E_str212;
+ r1 = _2E_str537;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 543;
+ _assert(i7);
+}
+}
+
+function _ZNK14btQuantizedBvh27walkStacklessTreeAgainstRayEP21btNodeOverlapCallbackRK9btVector3S4_S4_S4_ii(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+ var r13;
+ var r14;
+ var r15;
+ var r16;
+ var r17;
+ var r18;
+ var r19;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+ var f10;
+ var f11;
+ var f12;
+ var f13;
+ var f14;
+ var f15;
+ var f16;
+ var f17;
+ var f18;
+ var f19;
+ var f20;
+ var f21;
+var __label__ = 0;
+ i7 = sp + -48;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = heapU8[r0+60];
+ if(r1 ==0) //_LBB156_2
+{
+ r1 = heap32[(fp+1)];
+ r2 = heap32[(fp+2)];
+ r3 = heap32[(fp+3)];
+ r4 = heap32[(fp+4)];
+ r5 = heap32[(fp+5)];
+ r3 = r3 >> 2;
+ r2 = r2 >> 2;
+ f0 = heapFloat[(r2)];
+ f1 = heapFloat[(r3)];
+ f2 = heapFloat[(r3+1)];
+ f3 = heapFloat[(r2+1)];
+ r4 = r4 >> 2;
+ r5 = r5 >> 2;
+ f4 = f1-f0;
+ r0 = r0 >> 2;
+ f5 = f2-f3;
+ f6 = heapFloat[(r3+2)];
+ f7 = heapFloat[(r2+2)];
+ r6 = heap32[(r0+24)];
+ f8 = f6-f7;
+ f9 = f4*f4;
+ f10 = f5*f5;
+ f11 = heapFloat[(r4)];
+ f12 = heapFloat[(r4+1)];
+ f13 = heapFloat[(r4+2)];
+ f14 = heapFloat[(r5)];
+ f15 = heapFloat[(r5+1)];
+ f16 = heapFloat[(r5+2)];
+ f9 = f9+f10;
+ f10 = f8*f8;
+ f9 = f9+f10;
+ heapFloat[(g0)] = f9;
+ sqrtf(i7);
+ f10 = 1;
+ f9 = f10/f_g0;
+ f17 = heapFloat[(r3)];
+ f18 = heapFloat[(r2)];
+ f19 = heapFloat[(r3+1)];
+ f20 = heapFloat[(r2+1)];
+ f4 = f4*f9;
+ f17 = f17-f18;
+ f5 = f5*f9;
+ f18 = f19-f20;
+ f19 = heapFloat[(r3+2)];
+ f20 = heapFloat[(r2+2)];
+ f8 = f8*f9;
+ f9 = f19-f20;
+ f17 = f4*f17;
+ f18 = f5*f18;
+ f19 = f1 < f0 ? f1 : f0;
+ f20 = f2 < f3 ? f2 : f3;
+ f21 = f6 < f7 ? f6 : f7;
+ f0 = f0 < f1 ? f1 : f0;
+ f1 = f3 < f2 ? f2 : f3;
+ f2 = f7 < f6 ? f6 : f7;
+ f3 = f17+f18;
+ f6 = f8*f9;
+ f7 = f19+f11;
+ f9 = f20+f12;
+ f11 = f21+f13;
+ f0 = f0+f14;
+ f1 = f1+f15;
+ f2 = f2+f16;
+ f3 = f3+f6;
+ f6 = 0;
+ if(f4 !=f6) //_LBB156_4
+{
+ f4 = f10/f4;
+}
+else{
+ f4 = 999999984306749440;
+}
+ if(f5 !=f6) //_LBB156_7
+{
+ f5 = f10/f5;
+}
+else{
+ f5 = 999999984306749440;
+}
+ if(f8 !=f6) //_LBB156_10
+{
+ f8 = f10/f8;
+}
+else{
+ f8 = 999999984306749440;
+}
+ r3 = f4 < f6;
+ r7 = f5 < f6;
+ r8 = f8 < f6;
+ r3 = r3 & 1;
+ r7 = r7 & 1;
+ r8 = r8 & 1;
+ r9 = r3 ^ 1;
+ r10 = r7 ^ 1;
+ r11 = r8 ^ 1;
+ r12 = 0;
+ r13 = r12;
+_15: while(true){
+ r14 = heap32[(r0+14)];
+ if(r14 >r12) //_LBB156_12
+{
+ if(r14 >r13) //_LBB156_14
+{
+ r14 = r6 >> 2;
+ f10 = heapFloat[(r14)];
+ r15 = sp + -32;
+ heapFloat[(fp+-8)] = f10;
+ r16 = r15 >> 2;
+ f12 = heapFloat[(r14+1)];
+ heapFloat[(r16+1)] = f12;
+ f13 = heapFloat[(r14+2)];
+ heapFloat[(r16+2)] = f13;
+ heap32[(r16+3)] = heap32[(r14+3)];
+ f14 = heapFloat[(r14+4)];
+ heapFloat[(r16+4)] = f14;
+ f15 = heapFloat[(r14+5)];
+ heapFloat[(r16+5)] = f15;
+ f16 = heapFloat[(r14+6)];
+ heapFloat[(r16+6)] = f16;
+ heap32[(r16+7)] = heap32[(r14+7)];
+ f17 = heapFloat[(r5)];
+ f10 = f10-f17;
+ heapFloat[(fp+-8)] = f10;
+ f10 = heapFloat[(r5+1)];
+ f10 = f12-f10;
+ heapFloat[(r16+1)] = f10;
+ f10 = heapFloat[(r5+2)];
+ f10 = f13-f10;
+ heapFloat[(r16+2)] = f10;
+ f10 = heapFloat[(r4)];
+ f10 = f14-f10;
+ heapFloat[(r16+4)] = f10;
+ f10 = heapFloat[(r4+1)];
+ f10 = f15-f10;
+ heapFloat[(r16+5)] = f10;
+ f10 = heapFloat[(r4+2)];
+ r13 = (r13 + 1)|0;
+ f10 = f16-f10;
+ heapFloat[(r16+6)] = f10;
+ f10 = heapFloat[(r14+4)];
+ if(f7 >f10) //_LBB156_17
+{
+__label__ = 17;
+}
+else{
+ f10 = heapFloat[(r14)];
+ if(f0 <f10) //_LBB156_17
+{
+__label__ = 17;
+}
+else{
+ r16 = 1;
+__label__ = 18;
+}
+}
+if (__label__ == 17){
+ r16 = 0;
+}
+ f10 = heapFloat[(r14+6)];
+ if(f11 >f10) //_LBB156_21
+{
+__label__ = 20;
+}
+else{
+ f10 = heapFloat[(r14+2)];
+ if(f2 <f10) //_LBB156_21
+{
+__label__ = 20;
+}
+else{
+__label__ = 21;
+}
+}
+if (__label__ == 20){
+ r16 = 0;
+}
+ f10 = heapFloat[(r14+5)];
+ if(f9 >f10) //_LBB156_32
+{
+__label__ = 30;
+}
+else{
+ f10 = heapFloat[(r14+1)];
+ if(f1 <f10) //_LBB156_32
+{
+__label__ = 30;
+}
+else{
+ r16 = r16 & 255;
+ if(r16 ==0) //_LBB156_32
+{
+__label__ = 30;
+}
+else{
+ r16 = r3 << 4;
+ r17 = r10 << 4;
+ r16 = (r15 + r16)|0;
+ r17 = (r15 + r17)|0;
+ r16 = r16 >> 2;
+ r17 = r17 >> 2;
+ f10 = heapFloat[(r16)];
+ f12 = heapFloat[(r2)];
+ f13 = heapFloat[(r17+1)];
+ f14 = heapFloat[(r2+1)];
+ f10 = f10-f12;
+ f13 = f13-f14;
+ f10 = f10*f4;
+ f13 = f13*f5;
+ if(f10 >f13) //_LBB156_32
+{
+__label__ = 30;
+}
+else{
+ r16 = r9 << 4;
+ r17 = r7 << 4;
+ r16 = (r15 + r16)|0;
+ r17 = (r15 + r17)|0;
+ r16 = r16 >> 2;
+ r17 = r17 >> 2;
+ f15 = heapFloat[(r16)];
+ f16 = heapFloat[(r17+1)];
+ f12 = f15-f12;
+ f14 = f16-f14;
+ f12 = f12*f4;
+ f14 = f14*f5;
+ if(f14 >f12) //_LBB156_32
+{
+__label__ = 30;
+}
+else{
+ r16 = r11 << 4;
+ r16 = (r15 + r16)|0;
+ r16 = r16 >> 2;
+ f15 = heapFloat[(r16+2)];
+ f16 = heapFloat[(r2+2)];
+ f15 = f15-f16;
+ f10 = f10 < f14 ? f14 : f10;
+ f14 = f15*f8;
+ if(f10 >f14) //_LBB156_32
+{
+__label__ = 30;
+}
+else{
+ r16 = r8 << 4;
+ r15 = (r15 + r16)|0;
+ r15 = r15 >> 2;
+ f15 = heapFloat[(r15+2)];
+ f15 = f15-f16;
+ f12 = f13 < f12 ? f13 : f12;
+ f13 = f15*f8;
+ if(f13 >f12) //_LBB156_32
+{
+__label__ = 30;
+}
+else{
+ f10 = f10 < f13 ? f13 : f10;
+ f12 = f14 < f12 ? f14 : f12;
+ r15 = f10 >= f3;
+ r16 = f12 <= f6;
+ r15 = r15 | r16;
+ r16 = r15 & 1;
+ r17 = heap32[(r14+8)];
+ r18 = -1;
+ r16 = r16 ^ 1;
+ r19 = r17 == r18;
+ if(r15 != 0) //_LBB156_31
+{
+__label__ = 32;
+}
+else{
+ r15 = r17 != r18;
+ r15 = r15 & 1;
+ if(r15 ==0) //_LBB156_33
+{
+ r15 = r1 >> 2;
+ r15 = heap32[(r15)];
+ r15 = r15 >> 2;
+ r15 = heap32[(r15+2)];
+ r17 = heap32[(r14+10)];
+ r18 = heap32[(r14+9)];
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r18;
+ heap32[(g0+2)] = r17;
+ __FUNCTION_TABLE__[(r15)>>2](i7);
+__label__ = 32;
+}
+else{
+__label__ = 32;
+}
+}
+}
+}
+}
+}
+}
+}
+}
+if (__label__ == 30){
+ r16 = heap32[(r14+8)];
+ r19 = -1;
+ r19 = r16 == r19;
+ r16 = 0;
+}
+if(!(r16 !=0)) //_LBB156_36
+{
+ r15 = r19 & 1;
+ if(r15 ==0) //_LBB156_37
+{
+ r14 = heap32[(r14+8)];
+ r15 = r14 << 6;
+ r6 = (r6 + r15)|0;
+ r12 = (r14 + r12)|0;
+continue _15;
+}
+}
+ r6 = (r6 + 64)|0;
+ r12 = (r12 + 1)|0;
+}
+else{
+__label__ = 13;
+break _15;
+}
+}
+else{
+__label__ = 37;
+break _15;
+}
+}
+switch(__label__ ){//multiple entries
+case 37:
+ r0 = maxIterations;
+ r0 = r0 >> 2;
+ r1 = heap32[(r0)];
+if(!(r1 >=r13)) //_LBB156_41
+{
+ heap32[(r0)] = r13;
+}
+ return;
+break;
+case 13:
+ r0 = _2E_str1921;
+ r1 = _2E_str537;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 490;
+ _assert(i7);
+break;
+}
+}
+else{
+ r0 = _2E_str1844;
+ r1 = _2E_str537;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 451;
+ _assert(i7);
+}
+}
+
+function _ZN30btActivatingCollisionAlgorithmD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV30btActivatingCollisionAlgorithm;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZN30btActivatingCollisionAlgorithmD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV30btActivatingCollisionAlgorithm;
+ r0 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r0)] = r1;
+ return;
+}
+
+function _ZN26btBoxBoxCollisionAlgorithm21calculateTimeOfImpactEP17btCollisionObjectS1_RK16btDispatcherInfoP16btManifoldResult(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var f0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ f0 = 1;
+ f_g0 = f0;
+ return;
+}
+
+function _ZN26btBoxBoxCollisionAlgorithm22getAllContactManifoldsER20btAlignedObjectArrayIP20btPersistentManifoldE(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ r2 = heap32[(r1+3)];
+if(!(r2 ==0)) //_LBB160_23
+{
+ r0 = heapU8[r0+8];
+if(!(r0 ==0)) //_LBB160_23
+{
+ r0 = heap32[(fp+1)];
+ r3 = r0 >> 2;
+ r4 = heap32[(r3+2)];
+ r5 = heap32[(r3+1)];
+ if(r4 ==r5) //_LBB160_4
+{
+ r6 = 1;
+ r7 = r5 << 1;
+ r7 = r5 == 0 ? r6 : r7;
+if(!(r4 >=r7)) //_LBB160_3
+{
+ if(r7 !=0) //_LBB160_7
+{
+ r2 = gNumAlignedAllocs;
+ r2 = r2 >> 2;
+ r4 = heap32[(r2)];
+ r8 = r7 << 2;
+ r4 = (r4 + 1)|0;
+ r8 = r8 | 3;
+ heap32[(r2)] = r4;
+ r2 = (r8 + 16)|0;
+ heap32[(g0)] = r2;
+ malloc(i7);
+ r2 = r_g0;
+ if(r2 !=0) //_LBB160_9
+{
+ r4 = 0;
+ r8 = (r2 + 4)|0;
+ r4 = (r4 - r8)|0;
+ r4 = r4 & 15;
+ r4 = (r2 + r4)|0;
+ r8 = (r4 + 4)|0;
+ r4 = r4 >> 2;
+ heap32[(r4)] = r2;
+ r2 = r8;
+}
+}
+else{
+ r2 = 0;
+}
+ r4 = (r0 + 12)|0;
+ if(r5 <1) //_LBB160_12
+{
+ r8 = r4 >> 2;
+ r9 = heap32[(r8)];
+}
+else{
+ r8 = 0;
+_15: while(true){
+ r9 = r4 >> 2;
+ r9 = heap32[(r9)];
+ r10 = r8 << 2;
+ r11 = (r9 + r10)|0;
+ r11 = r11 >> 2;
+ r10 = (r2 + r10)|0;
+ r11 = heap32[(r11)];
+ r8 = (r8 + 1)|0;
+ r10 = r10 >> 2;
+ heap32[(r10)] = r11;
+if(!(r5 !=r8)) //_LBB160_13
+{
+break _15;
+}
+}
+ r4 = (r0 + 12)|0;
+}
+ if(r9 !=0) //_LBB160_17
+{
+ r8 = heapU8[r0+16];
+ if(r8 !=0) //_LBB160_19
+{
+ r5 = gNumAlignedFree;
+ r5 = r5 >> 2;
+ r8 = heap32[(r5)];
+ r8 = (r8 + 1)|0;
+ r9 = r9 >> 2;
+ heap32[(r5)] = r8;
+ r5 = heap32[(r9+-1)];
+ heap32[(g0)] = r5;
+ free(i7);
+ r5 = heap32[(r3+1)];
+}
+ r8 = r4 >> 2;
+ heap32[(r8)] = 0;
+}
+ r4 = r4 >> 2;
+ heap8[r0+16] = r6;
+ heap32[(r4)] = r2;
+ heap32[(r3+2)] = r7;
+ r2 = heap32[(r1+3)];
+}
+}
+ r0 = r5 << 2;
+ r1 = heap32[(r3+3)];
+ r0 = (r1 + r0)|0;
+ r0 = r0 >> 2;
+ heap32[(r0)] = r2;
+ r0 = heap32[(r3+1)];
+ r0 = (r0 + 1)|0;
+ heap32[(r3+1)] = r0;
+}
+}
+ return;
+}
+
+function _ZN26btBoxBoxCollisionAlgorithm16processCollisionEP17btCollisionObjectS1_RK16btDispatcherInfoP16btManifoldResult(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+var __label__ = 0;
+ i7 = sp + -176;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ r1 = heap32[(r1+3)];
+if(!(r1 ==0)) //_LBB161_8
+{
+ r2 = heap32[(fp+1)];
+ r3 = heap32[(fp+2)];
+ r4 = heap32[(fp+3)];
+ r5 = heap32[(fp+4)];
+ r3 = r3 >> 2;
+ r2 = r2 >> 2;
+ r6 = heap32[(r3+48)];
+ r7 = heap32[(r2+48)];
+ r8 = sp + -136;
+ r9 = r5 >> 2;
+ r10 = r8 >> 2;
+ heap32[(r9+1)] = r1;
+ heap32[(r10+33)] = 0;
+ heap32[(r10+32)] = 1566444395;
+ heap32[(fp+-34)] = heap32[(r2+1)];
+ heap32[(r10+1)] = heap32[(r2+2)];
+ heap32[(r10+2)] = heap32[(r2+3)];
+ heap32[(r10+3)] = heap32[(r2+4)];
+ heap32[(r10+4)] = heap32[(r2+5)];
+ heap32[(r10+5)] = heap32[(r2+6)];
+ heap32[(r10+6)] = heap32[(r2+7)];
+ heap32[(r10+7)] = heap32[(r2+8)];
+ heap32[(r10+8)] = heap32[(r2+9)];
+ heap32[(r10+9)] = heap32[(r2+10)];
+ heap32[(r10+10)] = heap32[(r2+11)];
+ heap32[(r10+11)] = heap32[(r2+12)];
+ heap32[(r10+12)] = heap32[(r2+13)];
+ heap32[(r10+13)] = heap32[(r2+14)];
+ heap32[(r10+14)] = heap32[(r2+15)];
+ heap32[(r10+15)] = heap32[(r2+16)];
+ heap32[(r10+16)] = heap32[(r3+1)];
+ heap32[(r10+17)] = heap32[(r3+2)];
+ heap32[(r10+18)] = heap32[(r3+3)];
+ heap32[(r10+19)] = heap32[(r3+4)];
+ heap32[(r10+20)] = heap32[(r3+5)];
+ heap32[(r10+21)] = heap32[(r3+6)];
+ heap32[(r10+22)] = heap32[(r3+7)];
+ heap32[(r10+23)] = heap32[(r3+8)];
+ heap32[(r10+24)] = heap32[(r3+9)];
+ heap32[(r10+25)] = heap32[(r3+10)];
+ heap32[(r10+26)] = heap32[(r3+11)];
+ heap32[(r10+27)] = heap32[(r3+12)];
+ heap32[(r10+28)] = heap32[(r3+13)];
+ heap32[(r10+29)] = heap32[(r3+14)];
+ r1 = _ZTV16btBoxBoxDetector;
+ heap32[(r10+30)] = heap32[(r3+15)];
+ r2 = sp + -152;
+ r1 = (r1 + 8)|0;
+ heap32[(r10+31)] = heap32[(r3+16)];
+ r3 = r2 >> 2;
+ heap32[(fp+-38)] = r1;
+ heap32[(r3+1)] = r7;
+ r1 = r4 >> 2;
+ heap32[(r3+2)] = r6;
+ r1 = heap32[(r1+5)];
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = r8;
+ heap32[(g0+2)] = r5;
+ heap32[(g0+3)] = r1;
+ heap32[(g0+4)] = 0;
+ _ZN16btBoxBoxDetector16getClosestPointsERKN36btDiscreteCollisionDetectorInterface17ClosestPointInputERNS0_6ResultEP12btIDebugDrawb(i7);
+ r0 = heapU8[r0+8];
+if(!(r0 ==0)) //_LBB161_8
+{
+ r0 = heap32[(r9+1)];
+ if(r0 !=0) //_LBB161_4
+{
+ r1 = r0 >> 2;
+ r2 = heap32[(r1+279)];
+if(!(r2 ==0)) //_LBB161_8
+{
+ r1 = heap32[(r1+277)];
+ r2 = heap32[(r9+34)];
+ if(r1 ==r2) //_LBB161_7
+{
+ r1 = (r5 + 8)|0;
+ r2 = (r5 + 72)|0;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = r2;
+ _ZN20btPersistentManifold20refreshContactPointsERK11btTransformS2_(i7);
+}
+else{
+ r1 = (r5 + 72)|0;
+ r5 = (r5 + 8)|0;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = r5;
+ _ZN20btPersistentManifold20refreshContactPointsERK11btTransformS2_(i7);
+ return;
+}
+}
+}
+else{
+ r0 = _2E_str59;
+ r5 = _2E_str160;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r5;
+ heap32[(g0+2)] = 101;
+ _assert(i7);
+}
+}
+}
+ return;
+}
+
+function _ZN26btBoxBoxCollisionAlgorithmD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV26btBoxBoxCollisionAlgorithm;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ r1 = heapU8[r0+8];
+if(!(r1 ==0)) //_LBB162_3
+{
+ r1 = heap32[(r2+3)];
+if(!(r1 ==0)) //_LBB162_3
+{
+ r3 = heap32[(r2+1)];
+ r4 = r3 >> 2;
+ r4 = heap32[(r4)];
+ r4 = r4 >> 2;
+ r4 = heap32[(r4+4)];
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r1;
+ __FUNCTION_TABLE__[(r4)>>2](i7);
+}
+}
+ r1 = _ZTV30btActivatingCollisionAlgorithm;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZN26btBoxBoxCollisionAlgorithmD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV26btBoxBoxCollisionAlgorithm;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ r0 = heapU8[r0+8];
+if(!(r0 ==0)) //_LBB163_3
+{
+ r0 = heap32[(r2+3)];
+if(!(r0 ==0)) //_LBB163_3
+{
+ r1 = heap32[(r2+1)];
+ r3 = r1 >> 2;
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3+4)];
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r0;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+}
+}
+ r0 = _ZTV30btActivatingCollisionAlgorithm;
+ r0 = (r0 + 8)|0;
+ heap32[(r2)] = r0;
+ return;
+}
+
+function _ZN16btBoxBoxDetectorD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV16btBoxBoxDetector;
+ r0 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r0)] = r1;
+ return;
+}
+
+function _ZN16btBoxBoxDetectorD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV16btBoxBoxDetector;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZN16btBoxBoxDetector16getClosestPointsERKN36btDiscreteCollisionDetectorInterface17ClosestPointInputERNS0_6ResultEP12btIDebugDrawb(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+ var r13;
+ var r14;
+ var r15;
+ var r16;
+ var r17;
+ var r18;
+ var r19;
+ var r20;
+ var r21;
+ var r22;
+ var r23;
+ var r24;
+ var r25;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+ var f10;
+ var f11;
+ var f12;
+ var f13;
+ var f14;
+ var f15;
+ var f16;
+ var f17;
+ var f18;
+ var f19;
+ var f20;
+ var f21;
+ var f22;
+ var f23;
+ var f24;
+ var f25;
+ var f26;
+ var f27;
+ var f28;
+ var f29;
+ var f30;
+var __label__ = 0;
+ i7 = sp + -808;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ r1 = r0 >> 2;
+ r2 = sp + -640;
+ heap32[(fp+-160)] = heap32[(r1)];
+ r3 = sp + -688;
+ heap32[(fp+-172)] = heap32[(r1+16)];
+ r4 = r2 >> 2;
+ r5 = r3 >> 2;
+ heap32[(r4+1)] = heap32[(r1+1)];
+ heap32[(r5+1)] = heap32[(r1+17)];
+ heap32[(r4+2)] = heap32[(r1+2)];
+ heap32[(r5+2)] = heap32[(r1+18)];
+ heap32[(r4+4)] = heap32[(r1+4)];
+ heap32[(r5+4)] = heap32[(r1+20)];
+ heap32[(r4+5)] = heap32[(r1+5)];
+ heap32[(r5+5)] = heap32[(r1+21)];
+ heap32[(r4+6)] = heap32[(r1+6)];
+ heap32[(r5+6)] = heap32[(r1+22)];
+ heap32[(r4+8)] = heap32[(r1+8)];
+ heap32[(r5+8)] = heap32[(r1+24)];
+ heap32[(r4+9)] = heap32[(r1+9)];
+ heap32[(r5+9)] = heap32[(r1+25)];
+ r6 = heap32[(fp)];
+ heap32[(r4+10)] = heap32[(r1+10)];
+ r6 = r6 >> 2;
+ heap32[(r5+10)] = heap32[(r1+26)];
+ r7 = heap32[(r6+2)];
+ r8 = r7 >> 2;
+ r9 = heap32[(r8)];
+ r9 = r9 >> 2;
+ r9 = heap32[(r9+11)];
+ f0 = heapFloat[(r8+7)];
+ f1 = heapFloat[(r8+8)];
+ f2 = heapFloat[(r8+9)];
+ heap32[(g0)] = r7;
+ __FUNCTION_TABLE__[(r9)>>2](i7);
+ f3 = f_g0;
+ r9 = heap32[(r8)];
+ r9 = r9 >> 2;
+ r9 = heap32[(r9+11)];
+ heap32[(g0)] = r7;
+ __FUNCTION_TABLE__[(r9)>>2](i7);
+ f4 = f_g0;
+ r8 = heap32[(r8)];
+ r8 = r8 >> 2;
+ r8 = heap32[(r8+11)];
+ heap32[(g0)] = r7;
+ __FUNCTION_TABLE__[(r8)>>2](i7);
+ f5 = f_g0;
+ r6 = heap32[(r6+1)];
+ r7 = r6 >> 2;
+ r8 = heap32[(r7)];
+ r8 = r8 >> 2;
+ f6 = heapFloat[(r7+8)];
+ r8 = heap32[(r8+11)];
+ f7 = heapFloat[(r7+9)];
+ f8 = heapFloat[(r7+7)];
+ heap32[(g0)] = r6;
+ __FUNCTION_TABLE__[(r8)>>2](i7);
+ f9 = f_g0;
+ r8 = heap32[(r7)];
+ r8 = r8 >> 2;
+ r8 = heap32[(r8+11)];
+ heap32[(g0)] = r6;
+ __FUNCTION_TABLE__[(r8)>>2](i7);
+ f10 = f_g0;
+ r7 = heap32[(r7)];
+ r7 = r7 >> 2;
+ r7 = heap32[(r7+11)];
+ heap32[(g0)] = r6;
+ __FUNCTION_TABLE__[(r7)>>2](i7);
+ f8 = f8+f_g0;
+ f6 = f6+f10;
+ f8 = f8+f8;
+ f10 = 0.5;
+ heapFloat[(fp+-187)] = f10;
+ f11 = heapFloat[(r1+30)];
+ f12 = heapFloat[(r1+14)];
+ f13 = heapFloat[(r1+29)];
+ f14 = heapFloat[(r1+13)];
+ f15 = heapFloat[(r1+28)];
+ f16 = heapFloat[(r1+12)];
+ f17 = heapFloat[(fp+-160)];
+ f18 = heapFloat[(r4+4)];
+ f19 = heapFloat[(r4+8)];
+ f20 = heapFloat[(r4+1)];
+ f21 = heapFloat[(r4+5)];
+ f22 = heapFloat[(r4+9)];
+ f23 = heapFloat[(r4+2)];
+ f24 = heapFloat[(r4+6)];
+ f25 = heapFloat[(r4+10)];
+ r4 = sp + -236;
+ f7 = f7+f9;
+ f6 = f6+f6;
+ f8 = f8*f10;
+ heapFloat[(fp+-179)] = f8;
+ f0 = f0+f5;
+ f5 = f7+f7;
+ f6 = f6*f10;
+ heapFloat[(fp+-178)] = f6;
+ r6 = r4 >> 2;
+ heapFloat[(fp+-59)] = f8;
+ f1 = f1+f4;
+ f0 = f0+f0;
+ f4 = f5*f10;
+ heapFloat[(fp+-177)] = f4;
+ heapFloat[(r6+1)] = f6;
+ r7 = sp + -248;
+ heap32[(fp+-186)] = r7;
+ f2 = f2+f3;
+ f1 = f1+f1;
+ f0 = f0*f10;
+ heapFloat[(fp+-181)] = f0;
+ heapFloat[(r6+2)] = f4;
+ f2 = f2+f2;
+ f1 = f1*f10;
+ heapFloat[(fp+-182)] = f1;
+ r6 = r7 >> 2;
+ heapFloat[(fp+-62)] = f0;
+ f0 = f2*f10;
+ heapFloat[(fp+-180)] = f0;
+ heapFloat[(r6+1)] = f1;
+ heapFloat[(r6+2)] = f0;
+ f0 = f15-f16;
+ heapFloat[(fp+-183)] = f0;
+ f1 = f13-f14;
+ heapFloat[(fp+-184)] = f1;
+ f2 = heapFloat[(fp+-172)];
+ heapFloat[(fp+-194)] = f2;
+ f3 = heapFloat[(r5+4)];
+ heapFloat[(fp+-195)] = f3;
+ f4 = heapFloat[(r5+1)];
+ heapFloat[(fp+-191)] = f4;
+ f5 = heapFloat[(r5+5)];
+ heapFloat[(fp+-192)] = f5;
+ f6 = heapFloat[(r5+2)];
+ heapFloat[(fp+-188)] = f6;
+ f7 = heapFloat[(r5+6)];
+ heapFloat[(fp+-189)] = f7;
+ f8 = f11-f12;
+ heapFloat[(fp+-185)] = f8;
+ f9 = heapFloat[(r5+8)];
+ heapFloat[(fp+-196)] = f9;
+ f10 = heapFloat[(r5+9)];
+ heapFloat[(fp+-193)] = f10;
+ f11 = heapFloat[(r5+10)];
+ heapFloat[(fp+-190)] = f11;
+ f12 = f17*f2;
+ f13 = f18*f3;
+ f14 = f17*f0;
+ f15 = f18*f1;
+ f16 = f20*f0;
+ f26 = f21*f1;
+ f0 = f23*f0;
+ heapFloat[(fp+-198)] = f0;
+ f1 = f24*f1;
+ f27 = f17*f4;
+ f28 = f18*f5;
+ f17 = f17*f6;
+ f18 = f18*f7;
+ f29 = f20*f2;
+ f30 = f21*f3;
+ f0 = f20*f4;
+ heapFloat[(fp+-197)] = f0;
+ f0 = f21*f5;
+ f20 = f20*f6;
+ f21 = f21*f7;
+ f2 = f23*f2;
+ f3 = f24*f3;
+ f4 = f23*f4;
+ f5 = f24*f5;
+ f6 = f23*f6;
+ f7 = f24*f7;
+ f12 = f12+f13;
+ f13 = f19*f9;
+ f14 = f14+f15;
+ f15 = f19*f8;
+ f16 = f16+f26;
+ f23 = f22*f8;
+ f24 = heapFloat[(fp+-198)];
+ f1 = f24+f1;
+ f8 = f25*f8;
+ f24 = f27+f28;
+ f26 = f19*f10;
+ f17 = f17+f18;
+ f18 = f19*f11;
+ f19 = f29+f30;
+ f27 = f22*f9;
+ f28 = heapFloat[(fp+-197)];
+ f0 = f28+f0;
+ f28 = f22*f10;
+ f20 = f20+f21;
+ f21 = f22*f11;
+ f2 = f2+f3;
+ f3 = f25*f9;
+ f4 = f4+f5;
+ f5 = f25*f10;
+ f6 = f6+f7;
+ f7 = f25*f11;
+ f9 = f12+f13;
+ r5 = heap32[(fp+2)];
+ r6 = (r2 + 4)|0;
+ r7 = (r3 + 4)|0;
+ r8 = (r2 + 8)|0;
+ r9 = (r3 + 8)|0;
+ r10 = (r0 + 112)|0;
+ r0 = (r0 + 48)|0;
+ f10 = f14+f15;
+ f11 = f16+f23;
+ f1 = f1+f8;
+ f8 = f24+f26;
+ f12 = f17+f18;
+ f13 = f19+f27;
+ f0 = f0+f28;
+ f14 = f20+f21;
+ f2 = f2+f3;
+ f3 = f4+f5;
+ f4 = f6+f7;
+ f5 = 0;
+ if(f9 <f5) //_LBB166_2
+{
+ f6 = -f9;
+}
+else{
+ f6 = f9;
+}
+ if(f8 <f5) //_LBB166_5
+{
+ f7 = -f8;
+}
+else{
+ f7 = f8;
+}
+ if(f12 <f5) //_LBB166_8
+{
+ f15 = -f12;
+}
+else{
+ f15 = f12;
+}
+ if(f13 <f5) //_LBB166_11
+{
+ f16 = -f13;
+}
+else{
+ f16 = f13;
+}
+ if(f0 <f5) //_LBB166_14
+{
+ f17 = -f0;
+}
+else{
+ f17 = f0;
+}
+ if(f14 <f5) //_LBB166_17
+{
+ f18 = -f14;
+}
+else{
+ f18 = f14;
+}
+ if(f2 <f5) //_LBB166_20
+{
+ f19 = -f2;
+}
+else{
+ f19 = f2;
+}
+ if(f3 <f5) //_LBB166_23
+{
+ f20 = -f3;
+}
+else{
+ f20 = f3;
+}
+ if(f4 <f5) //_LBB166_26
+{
+ f21 = -f4;
+}
+else{
+ f21 = f4;
+}
+ if(f10 <f5) //_LBB166_29
+{
+ f22 = -f10;
+}
+else{
+ f22 = f10;
+}
+ f23 = heapFloat[(fp+-181)];
+ f23 = f23*f6;
+ f24 = heapFloat[(fp+-179)];
+ f23 = f24+f23;
+ f24 = heapFloat[(fp+-182)];
+ f24 = f24*f7;
+ f23 = f23+f24;
+ f24 = heapFloat[(fp+-180)];
+ f24 = f24*f15;
+ f23 = f23+f24;
+ f22 = f22-f23;
+_41: do {
+if(!(f22 >f5)) //_LBB166_268
+{
+ f23 = -3.4028234663852886e+038;
+ if(f22 >f23) //_LBB166_33
+{
+ f23 = 0;
+ r11 = f10 < f23;
+ r13 = sp + -640;
+ r11 = r11 & 1;
+ r12 = 1;
+ f23 = f22;
+}
+else{
+ r11 = 0;
+ r12 = r11;
+ r13 = r11;
+}
+ if(f11 <f5) //_LBB166_36
+{
+ f22 = -f11;
+}
+else{
+ f22 = f11;
+}
+ f24 = heapFloat[(fp+-181)];
+ f24 = f24*f16;
+ f25 = heapFloat[(fp+-178)];
+ f24 = f25+f24;
+ f25 = heapFloat[(fp+-182)];
+ f25 = f25*f17;
+ f24 = f24+f25;
+ f25 = heapFloat[(fp+-180)];
+ f25 = f25*f18;
+ f24 = f24+f25;
+ f22 = f22-f24;
+if(!(f22 >f5)) //_LBB166_268
+{
+ if(f22 >f23) //_LBB166_40
+{
+ f23 = 0;
+ r11 = f11 < f23;
+ r11 = r11 & 1;
+ r12 = 2;
+ f23 = f22;
+ r13 = r6;
+}
+ if(f1 <f5) //_LBB166_43
+{
+ f22 = -f1;
+}
+else{
+ f22 = f1;
+}
+ f24 = heapFloat[(fp+-181)];
+ f24 = f24*f19;
+ f25 = heapFloat[(fp+-177)];
+ f24 = f25+f24;
+ f25 = heapFloat[(fp+-182)];
+ f25 = f25*f20;
+ f24 = f24+f25;
+ f25 = heapFloat[(fp+-180)];
+ f25 = f25*f21;
+ f24 = f24+f25;
+ f22 = f22-f24;
+if(!(f22 >f5)) //_LBB166_268
+{
+ if(f22 >f23) //_LBB166_47
+{
+ f23 = 0;
+ r11 = f1 < f23;
+ r11 = r11 & 1;
+ r12 = 3;
+ f23 = f22;
+ r13 = r8;
+}
+ f24 = heapFloat[(fp+-183)];
+ f22 = heapFloat[(fp+-194)];
+ f22 = f22*f24;
+ f25 = heapFloat[(fp+-184)];
+ f24 = heapFloat[(fp+-195)];
+ f24 = f24*f25;
+ f22 = f22+f24;
+ f25 = heapFloat[(fp+-185)];
+ f24 = heapFloat[(fp+-196)];
+ f24 = f24*f25;
+ f22 = f22+f24;
+ if(f22 <f5) //_LBB166_50
+{
+ f24 = -f22;
+}
+else{
+ f24 = f22;
+}
+ f25 = heapFloat[(fp+-179)];
+ f25 = f25*f6;
+ f26 = heapFloat[(fp+-178)];
+ f26 = f26*f16;
+ f25 = f25+f26;
+ f26 = heapFloat[(fp+-177)];
+ f26 = f26*f19;
+ f25 = f25+f26;
+ f26 = heapFloat[(fp+-181)];
+ f25 = f25+f26;
+ f24 = f24-f25;
+if(!(f24 >f5)) //_LBB166_268
+{
+ if(f24 >f23) //_LBB166_54
+{
+ f23 = 0;
+ r11 = f22 < f23;
+ r13 = sp + -688;
+ r11 = r11 & 1;
+ r12 = 4;
+ f23 = f24;
+}
+ f24 = heapFloat[(fp+-183)];
+ f22 = heapFloat[(fp+-191)];
+ f22 = f22*f24;
+ f25 = heapFloat[(fp+-184)];
+ f24 = heapFloat[(fp+-192)];
+ f24 = f24*f25;
+ f22 = f22+f24;
+ f25 = heapFloat[(fp+-185)];
+ f24 = heapFloat[(fp+-193)];
+ f24 = f24*f25;
+ f22 = f22+f24;
+ if(f22 <f5) //_LBB166_57
+{
+ f24 = -f22;
+}
+else{
+ f24 = f22;
+}
+ f25 = heapFloat[(fp+-179)];
+ f25 = f25*f7;
+ f26 = heapFloat[(fp+-178)];
+ f26 = f26*f17;
+ f25 = f25+f26;
+ f26 = heapFloat[(fp+-177)];
+ f26 = f26*f20;
+ f25 = f25+f26;
+ f26 = heapFloat[(fp+-182)];
+ f25 = f25+f26;
+ f24 = f24-f25;
+if(!(f24 >f5)) //_LBB166_268
+{
+ if(f24 >f23) //_LBB166_61
+{
+ f23 = 0;
+ r11 = f22 < f23;
+ r11 = r11 & 1;
+ r12 = 5;
+ f23 = f24;
+ r13 = r7;
+}
+ f24 = heapFloat[(fp+-183)];
+ f22 = heapFloat[(fp+-188)];
+ f22 = f22*f24;
+ f25 = heapFloat[(fp+-184)];
+ f24 = heapFloat[(fp+-189)];
+ f24 = f24*f25;
+ f22 = f22+f24;
+ f25 = heapFloat[(fp+-185)];
+ f24 = heapFloat[(fp+-190)];
+ f24 = f24*f25;
+ f22 = f22+f24;
+ if(f22 <f5) //_LBB166_64
+{
+ f24 = -f22;
+}
+else{
+ f24 = f22;
+}
+ f25 = heapFloat[(fp+-179)];
+ f25 = f25*f15;
+ f26 = heapFloat[(fp+-178)];
+ f26 = f26*f18;
+ f25 = f25+f26;
+ f26 = heapFloat[(fp+-177)];
+ f26 = f26*f21;
+ f25 = f25+f26;
+ f26 = heapFloat[(fp+-180)];
+ f25 = f25+f26;
+ f24 = f24-f25;
+if(!(f24 >f5)) //_LBB166_268
+{
+ if(f24 >f23) //_LBB166_68
+{
+ f23 = 0;
+ r11 = f22 < f23;
+ r11 = r11 & 1;
+ r12 = 6;
+ f23 = f24;
+ r13 = r9;
+}
+ f22 = f1*f13;
+ f24 = f11*f2;
+ f25 = 9.9999997473787516e-006;
+ f22 = f22-f24;
+ f6 = f6+f25;
+ f7 = f7+f25;
+ f15 = f15+f25;
+ heapFloat[(fp+-183)] = f15;
+ f15 = f16+f25;
+ f16 = f17+f25;
+ f17 = f18+f25;
+ f18 = f19+f25;
+ heapFloat[(fp+-184)] = f18;
+ f18 = f20+f25;
+ heapFloat[(fp+-185)] = f18;
+ f18 = f21+f25;
+ if(f22 <f5) //_LBB166_71
+{
+ f19 = -f22;
+}
+else{
+ f19 = f22;
+}
+ f21 = heapFloat[(fp+-184)];
+ f20 = heapFloat[(fp+-178)];
+ f20 = f20*f21;
+ f21 = heapFloat[(fp+-177)];
+ f21 = f21*f15;
+ f20 = f20+f21;
+ f24 = heapFloat[(fp+-183)];
+ f21 = heapFloat[(fp+-182)];
+ f21 = f21*f24;
+ f20 = f20+f21;
+ f21 = heapFloat[(fp+-180)];
+ f21 = f21*f7;
+ f20 = f20+f21;
+ f19 = f19-f20;
+ f20 = 1.1920928955078125e-007;
+if(!(f19 >f20)) //_LBB166_268
+{
+ f21 = f2*f2;
+ f21 = f21+f5;
+ f24 = f13*f13;
+ heapFloat[(fp+-188)] = f24;
+ f24 = f21+f24;
+ heapFloat[(g0)] = f24;
+ sqrtf(i7);
+ f24 = f_g0;
+ if(f24 >f20) //_LBB166_75
+{
+ f25 = f19/f24;
+ f19 = 1.0499999523162842;
+ f19 = f25*f19;
+ if(f19 <=f23) //_LBB166_74
+{
+__label__ = 69;
+}
+else{
+ f19 = 0;
+ f23 = -f2;
+ r11 = f22 < f19;
+ f19 = f19/f24;
+ f22 = f23/f24;
+ f24 = f13/f24;
+ r11 = r11 & 1;
+ r12 = 7;
+ r13 = 0;
+ f23 = f25;
+__label__ = 72;
+}
+}
+else{
+__label__ = 69;
+}
+if (__label__ == 69){
+ f19 = f5;
+ f22 = f5;
+ f24 = f5;
+}
+ f25 = f1*f0;
+ f26 = f11*f3;
+ f25 = f25-f26;
+ if(f25 <f5) //_LBB166_79
+{
+ f5 = -f25;
+}
+else{
+ f5 = f25;
+}
+ f27 = heapFloat[(fp+-185)];
+ f26 = heapFloat[(fp+-178)];
+ f26 = f26*f27;
+ f27 = heapFloat[(fp+-177)];
+ f27 = f27*f16;
+ f26 = f26+f27;
+ f28 = heapFloat[(fp+-183)];
+ f27 = heapFloat[(fp+-181)];
+ f27 = f27*f28;
+ f26 = f26+f27;
+ f27 = heapFloat[(fp+-180)];
+ f27 = f27*f6;
+ f26 = f26+f27;
+ f5 = f5-f26;
+if(!(f5 >f20)) //_LBB166_268
+{
+ f26 = f3*f3;
+ f27 = 0;
+ f26 = f26+f27;
+ f28 = f0*f0;
+ heapFloat[(fp+-189)] = f28;
+ f28 = f26+f28;
+ heapFloat[(g0)] = f28;
+ sqrtf(i7);
+ f28 = f_g0;
+ if(f28 >f20) //_LBB166_83
+{
+ f5 = f5/f28;
+ f29 = 1.0499999523162842;
+ f29 = f5*f29;
+if(!(f29 <=f23)) //_LBB166_82
+{
+ f19 = 0;
+ f22 = -f3;
+ r11 = f25 < f19;
+ f19 = f19/f28;
+ f22 = f22/f28;
+ f24 = f0/f28;
+ r11 = r11 & 1;
+ r12 = 8;
+ r13 = 0;
+ f23 = f5;
+}
+}
+ f5 = f1*f14;
+ f25 = f11*f4;
+ f5 = f5-f25;
+ if(f5 <f27) //_LBB166_87
+{
+ f25 = -f5;
+}
+else{
+ f25 = f5;
+}
+ f28 = heapFloat[(fp+-178)];
+ f28 = f28*f18;
+ f29 = heapFloat[(fp+-177)];
+ f29 = f29*f17;
+ f28 = f28+f29;
+ f29 = heapFloat[(fp+-181)];
+ f29 = f29*f7;
+ f28 = f28+f29;
+ f29 = heapFloat[(fp+-182)];
+ f29 = f29*f6;
+ f28 = f28+f29;
+ f25 = f25-f28;
+if(!(f25 >f20)) //_LBB166_268
+{
+ f28 = f4*f4;
+ f28 = f28+f27;
+ f29 = f14*f14;
+ heapFloat[(fp+-190)] = f29;
+ f29 = f28+f29;
+ heapFloat[(g0)] = f29;
+ sqrtf(i7);
+ f29 = f_g0;
+ if(f29 >f20) //_LBB166_91
+{
+ f25 = f25/f29;
+ f30 = 1.0499999523162842;
+ f30 = f25*f30;
+if(!(f30 <=f23)) //_LBB166_90
+{
+ f19 = 0;
+ f22 = -f4;
+ r11 = f5 < f19;
+ f19 = f19/f29;
+ f22 = f22/f29;
+ f24 = f14/f29;
+ r11 = r11 & 1;
+ r12 = 9;
+ r13 = 0;
+ f23 = f25;
+}
+}
+ f5 = f10*f2;
+ f25 = f1*f9;
+ f5 = f5-f25;
+ if(f5 <f27) //_LBB166_95
+{
+ f25 = -f5;
+}
+else{
+ f25 = f5;
+}
+ f30 = heapFloat[(fp+-184)];
+ f29 = heapFloat[(fp+-179)];
+ f29 = f29*f30;
+ f30 = heapFloat[(fp+-177)];
+ f30 = f30*f6;
+ f29 = f29+f30;
+ f30 = heapFloat[(fp+-182)];
+ f30 = f30*f17;
+ f29 = f29+f30;
+ f30 = heapFloat[(fp+-180)];
+ f30 = f30*f16;
+ f29 = f29+f30;
+ f25 = f25-f29;
+if(!(f25 >f20)) //_LBB166_268
+{
+ f29 = f9*f9;
+ f21 = f21+f29;
+ heapFloat[(g0)] = f21;
+ sqrtf(i7);
+ f21 = f_g0;
+ if(f21 >f20) //_LBB166_99
+{
+ f25 = f25/f21;
+ f30 = 1.0499999523162842;
+ f30 = f25*f30;
+if(!(f30 <=f23)) //_LBB166_98
+{
+ f22 = 0;
+ f23 = -f9;
+ r11 = f5 < f22;
+ f19 = f2/f21;
+ f22 = f22/f21;
+ f24 = f23/f21;
+ r11 = r11 & 1;
+ r12 = 10;
+ r13 = 0;
+ f23 = f25;
+}
+}
+ f2 = f10*f3;
+ f5 = f1*f8;
+ f2 = f2-f5;
+ if(f2 <f27) //_LBB166_103
+{
+ f5 = -f2;
+}
+else{
+ f5 = f2;
+}
+ f25 = heapFloat[(fp+-185)];
+ f21 = heapFloat[(fp+-179)];
+ f21 = f21*f25;
+ f25 = heapFloat[(fp+-177)];
+ f25 = f25*f7;
+ f21 = f21+f25;
+ f25 = heapFloat[(fp+-181)];
+ f25 = f25*f17;
+ f21 = f21+f25;
+ f25 = heapFloat[(fp+-180)];
+ f25 = f25*f15;
+ f21 = f21+f25;
+ f5 = f5-f21;
+if(!(f5 >f20)) //_LBB166_268
+{
+ f21 = f8*f8;
+ f25 = f26+f21;
+ heapFloat[(g0)] = f25;
+ sqrtf(i7);
+ f25 = f_g0;
+ if(f25 >f20) //_LBB166_107
+{
+ f5 = f5/f25;
+ f26 = 1.0499999523162842;
+ f26 = f5*f26;
+if(!(f26 <=f23)) //_LBB166_106
+{
+ f22 = 0;
+ f23 = -f8;
+ r11 = f2 < f22;
+ f19 = f3/f25;
+ f22 = f22/f25;
+ f24 = f23/f25;
+ r11 = r11 & 1;
+ r12 = 11;
+ r13 = 0;
+ f23 = f5;
+}
+}
+ f2 = f10*f4;
+ f1 = f1*f12;
+ f1 = f2-f1;
+ if(f1 <f27) //_LBB166_111
+{
+ f2 = -f1;
+}
+else{
+ f2 = f1;
+}
+ f3 = heapFloat[(fp+-179)];
+ f3 = f3*f18;
+ f25 = heapFloat[(fp+-183)];
+ f5 = heapFloat[(fp+-177)];
+ f5 = f5*f25;
+ f3 = f3+f5;
+ f5 = heapFloat[(fp+-181)];
+ f5 = f5*f16;
+ f3 = f3+f5;
+ f5 = heapFloat[(fp+-182)];
+ f5 = f5*f15;
+ f3 = f3+f5;
+ f2 = f2-f3;
+if(!(f2 >f20)) //_LBB166_268
+{
+ f3 = f12*f12;
+ f5 = f28+f3;
+ heapFloat[(g0)] = f5;
+ sqrtf(i7);
+ f5 = f_g0;
+ if(f5 >f20) //_LBB166_115
+{
+ f2 = f2/f5;
+ f25 = 1.0499999523162842;
+ f25 = f2*f25;
+if(!(f25 <=f23)) //_LBB166_114
+{
+ f22 = 0;
+ f23 = -f12;
+ r11 = f1 < f22;
+ f19 = f4/f5;
+ f22 = f22/f5;
+ f24 = f23/f5;
+ r11 = r11 & 1;
+ r12 = 12;
+ r13 = 0;
+ f23 = f2;
+}
+}
+ f1 = f11*f9;
+ f2 = f10*f13;
+ f1 = f1-f2;
+ if(f1 <f27) //_LBB166_119
+{
+ f2 = -f1;
+}
+else{
+ f2 = f1;
+}
+ f4 = heapFloat[(fp+-179)];
+ f4 = f4*f15;
+ f5 = heapFloat[(fp+-178)];
+ f5 = f5*f6;
+ f4 = f4+f5;
+ f5 = heapFloat[(fp+-182)];
+ f5 = f5*f18;
+ f4 = f4+f5;
+ f6 = heapFloat[(fp+-185)];
+ f5 = heapFloat[(fp+-180)];
+ f5 = f5*f6;
+ f4 = f4+f5;
+ f2 = f2-f4;
+if(!(f2 >f20)) //_LBB166_268
+{
+ f4 = heapFloat[(fp+-188)];
+ f4 = f4+f29;
+ f4 = f4+f27;
+ heapFloat[(g0)] = f4;
+ sqrtf(i7);
+ f4 = f_g0;
+ if(f4 >f20) //_LBB166_123
+{
+ f2 = f2/f4;
+ f5 = 1.0499999523162842;
+ f5 = f2*f5;
+if(!(f5 <=f23)) //_LBB166_122
+{
+ f23 = 0;
+ f19 = -f13;
+ r11 = f1 < f23;
+ f19 = f19/f4;
+ f22 = f9/f4;
+ f24 = f23/f4;
+ r11 = r11 & 1;
+ r12 = 13;
+ r13 = 0;
+ f23 = f2;
+}
+}
+ f1 = f11*f8;
+ f2 = f10*f0;
+ f1 = f1-f2;
+ if(f1 <f27) //_LBB166_127
+{
+ f2 = -f1;
+}
+else{
+ f2 = f1;
+}
+ f4 = heapFloat[(fp+-179)];
+ f4 = f4*f16;
+ f5 = heapFloat[(fp+-178)];
+ f5 = f5*f7;
+ f4 = f4+f5;
+ f5 = heapFloat[(fp+-181)];
+ f5 = f5*f18;
+ f4 = f4+f5;
+ f6 = heapFloat[(fp+-184)];
+ f5 = heapFloat[(fp+-180)];
+ f5 = f5*f6;
+ f4 = f4+f5;
+ f2 = f2-f4;
+if(!(f2 >f20)) //_LBB166_268
+{
+ f4 = heapFloat[(fp+-189)];
+ f4 = f4+f21;
+ f4 = f4+f27;
+ heapFloat[(g0)] = f4;
+ sqrtf(i7);
+ f4 = f_g0;
+ if(f4 >f20) //_LBB166_131
+{
+ f2 = f2/f4;
+ f5 = 1.0499999523162842;
+ f5 = f2*f5;
+if(!(f5 <=f23)) //_LBB166_130
+{
+ f23 = 0;
+ f19 = -f0;
+ r11 = f1 < f23;
+ f19 = f19/f4;
+ f22 = f8/f4;
+ f24 = f23/f4;
+ r11 = r11 & 1;
+ r12 = 14;
+ r13 = 0;
+ f23 = f2;
+}
+}
+ f0 = f11*f12;
+ f1 = f10*f14;
+ f0 = f0-f1;
+ if(f0 <f27) //_LBB166_135
+{
+ f1 = -f0;
+}
+else{
+ f1 = f0;
+}
+ f2 = heapFloat[(fp+-179)];
+ f2 = f2*f17;
+ f5 = heapFloat[(fp+-183)];
+ f4 = heapFloat[(fp+-178)];
+ f4 = f4*f5;
+ f2 = f2+f4;
+ f5 = heapFloat[(fp+-185)];
+ f4 = heapFloat[(fp+-181)];
+ f4 = f4*f5;
+ f2 = f2+f4;
+ f5 = heapFloat[(fp+-184)];
+ f4 = heapFloat[(fp+-182)];
+ f4 = f4*f5;
+ f2 = f2+f4;
+ f1 = f1-f2;
+if(!(f1 >f20)) //_LBB166_268
+{
+ f2 = heapFloat[(fp+-190)];
+ f2 = f2+f3;
+ f2 = f2+f27;
+ heapFloat[(g0)] = f2;
+ sqrtf(i7);
+ f2 = f_g0;
+ if(f2 <=f20) //_LBB166_140
+{
+__label__ = 128;
+}
+else{
+ f1 = f1/f2;
+ heapFloat[(fp+-183)] = f1;
+ f3 = 1.0499999523162842;
+ f1 = f1*f3;
+ if(f1 <=f23) //_LBB166_140
+{
+__label__ = 128;
+}
+else{
+ f23 = 0;
+ f19 = -f14;
+ r11 = f0 < f23;
+ f19 = f19/f2;
+ f22 = f12/f2;
+ f24 = f23/f2;
+ r11 = r11 & 1;
+ r13 = sp + -704;
+ r12 = 15;
+__label__ = 132;
+}
+}
+if (__label__ == 128){
+ if(r12 ==0) //_LBB166_268
+{
+break _41;
+}
+else{
+ if(r13 !=0) //_LBB166_143
+{
+ r13 = r13 >> 2;
+ f0 = heapFloat[(r13)];
+ r6 = sp + -704;
+ heapFloat[(fp+-176)] = f0;
+ f1 = heapFloat[(r13+4)];
+ r6 = r6 >> 2;
+ heapFloat[(r6+1)] = f1;
+ f19 = heapFloat[(r13+8)];
+ heapFloat[(r6+2)] = f19;
+ heapFloat[(fp+-183)] = f23;
+__label__ = 133;
+}
+else{
+ r13 = sp + -704;
+ heapFloat[(fp+-183)] = f23;
+__label__ = 132;
+}
+}
+}
+if (__label__ == 132){
+ r6 = sp + -640;
+ r6 = r6 >> 2;
+ f0 = heapFloat[(fp+-160)];
+ f1 = heapFloat[(r6+1)];
+ f2 = heapFloat[(r6+2)];
+ f0 = f0*f19;
+ f1 = f1*f22;
+ f0 = f0+f1;
+ f1 = f2*f24;
+ f0 = f0+f1;
+ r7 = r13 >> 2;
+ heapFloat[(r7)] = f0;
+ f1 = heapFloat[(r6+4)];
+ f2 = heapFloat[(r6+5)];
+ f3 = heapFloat[(r6+6)];
+ f1 = f1*f19;
+ f2 = f2*f22;
+ r7 = sp + -704;
+ f1 = f1+f2;
+ f2 = f3*f24;
+ f1 = f1+f2;
+ r7 = r7 >> 2;
+ heapFloat[(r7+1)] = f1;
+ f2 = heapFloat[(r6+8)];
+ f3 = heapFloat[(r6+9)];
+ f4 = heapFloat[(r6+10)];
+ f19 = f2*f19;
+ f2 = f3*f22;
+ f19 = f19+f2;
+ f2 = f4*f24;
+ f19 = f19+f2;
+ heapFloat[(r7+2)] = f19;
+}
+ if(r11 !=0) //_LBB166_147
+{
+ f0 = -f0;
+ r6 = sp + -704;
+ f1 = -f1;
+ r6 = r6 >> 2;
+ heapFloat[(fp+-176)] = f0;
+ f19 = -f19;
+ heapFloat[(r6+1)] = f1;
+ heapFloat[(r6+2)] = f19;
+}
+ if(r12 <7) //_LBB166_153
+{
+ if(r12 >3) //_LBB166_155
+{
+ f0 = -f0;
+ f1 = -f1;
+ f19 = -f19;
+ r1 = r0;
+ r0 = r10;
+}
+else{
+ r3 = sp + -640;
+ r2 = sp + -688;
+ r4 = sp + -236;
+ heap32[(fp+-186)] = r4;
+ r4 = sp + -248;
+ r1 = r10;
+}
+ r6 = r2 >> 2;
+ f2 = heapFloat[(r6)];
+ f3 = heapFloat[(r6+4)];
+ f4 = heapFloat[(r6+8)];
+ f2 = f2*f0;
+ f3 = f3*f1;
+ f2 = f2+f3;
+ f3 = f4*f19;
+ f2 = f2+f3;
+ heapFloat[(fp+-66)] = f2;
+ f3 = heapFloat[(r6+1)];
+ f4 = heapFloat[(r6+5)];
+ f5 = heapFloat[(r6+9)];
+ f3 = f3*f0;
+ f4 = f4*f1;
+ r7 = sp + -264;
+ f3 = f3+f4;
+ f4 = f5*f19;
+ f3 = f3+f4;
+ r8 = r7 >> 2;
+ heapFloat[(r8+1)] = f3;
+ f4 = heapFloat[(r6+2)];
+ f5 = heapFloat[(r6+6)];
+ f6 = heapFloat[(r6+10)];
+ f4 = f4*f0;
+ f5 = f5*f1;
+ f4 = f4+f5;
+ f5 = f6*f19;
+ f4 = f4+f5;
+ heapFloat[(r8+2)] = f4;
+ if(f2 <f27) //_LBB166_158
+{
+ f2 = -f2;
+}
+ if(f3 <f27) //_LBB166_161
+{
+ f3 = -f3;
+}
+ if(f4 <f27) //_LBB166_164
+{
+ f4 = -f4;
+}
+ if(f3 <=f2) //_LBB166_169
+{
+ if(f2 <=f4) //_LBB166_171
+{
+ r6 = 2;
+ r8 = 0;
+ r9 = 1;
+}
+else{
+ r6 = 0;
+ r8 = 1;
+ r9 = 2;
+}
+}
+else{
+ if(f3 <=f4) //_LBB166_168
+{
+ r6 = 2;
+ r8 = 0;
+ r9 = 1;
+}
+else{
+ r6 = 1;
+ r8 = 0;
+ r9 = 2;
+}
+}
+ r10 = r6 << 2;
+ r11 = (r4 + r10)|0;
+ r13 = (r2 + r10)|0;
+ r1 = r1 >> 2;
+ r0 = r0 >> 2;
+ r11 = r11 >> 2;
+ r13 = r13 >> 2;
+ f2 = heapFloat[(r11)];
+ f3 = heapFloat[(r13)];
+ f4 = heapFloat[(r1)];
+ f5 = heapFloat[(r0)];
+ r7 = (r7 + r10)|0;
+ f4 = f4-f5;
+ f3 = f2*f3;
+ r7 = r7 >> 2;
+ f5 = heapFloat[(r7)];
+ if(f5 <f27) //_LBB166_174
+{
+ r7 = r6 | 4;
+ r6 = r6 | 8;
+ r7 = r7 << 2;
+ r6 = r6 << 2;
+ r7 = (r2 + r7)|0;
+ r6 = (r2 + r6)|0;
+ r7 = r7 >> 2;
+ r6 = r6 >> 2;
+ f5 = heapFloat[(r1+1)];
+ f6 = heapFloat[(r0+1)];
+ f7 = heapFloat[(r7)];
+ f8 = heapFloat[(r6)];
+ f9 = heapFloat[(r1+2)];
+ f10 = heapFloat[(r0+2)];
+ f5 = f5-f6;
+ f6 = f2*f7;
+ f7 = f9-f10;
+ f2 = f2*f8;
+ f3 = f4+f3;
+ f4 = f5+f6;
+ f2 = f7+f2;
+}
+else{
+ r7 = r6 | 4;
+ r6 = r6 | 8;
+ r7 = r7 << 2;
+ r6 = r6 << 2;
+ r7 = (r2 + r7)|0;
+ r6 = (r2 + r6)|0;
+ r7 = r7 >> 2;
+ r6 = r6 >> 2;
+ f5 = heapFloat[(r1+1)];
+ f6 = heapFloat[(r0+1)];
+ f7 = heapFloat[(r7)];
+ f8 = heapFloat[(r6)];
+ f9 = heapFloat[(r1+2)];
+ f10 = heapFloat[(r0+2)];
+ f5 = f5-f6;
+ f6 = f2*f7;
+ f7 = f9-f10;
+ f2 = f2*f8;
+ f3 = f4-f3;
+ f4 = f5-f6;
+ f2 = f7-f2;
+}
+ r1 = -1;
+ r6 = -4;
+ r6 = r12 < 4 ? r1 : r6;
+ r6 = (r6 + r12)|0;
+ if(r6 ==1) //_LBB166_178
+{
+ r7 = 0;
+ r10 = 2;
+}
+else{
+ if(r6 !=0) //_LBB166_179
+{
+ r7 = 0;
+ r10 = 1;
+}
+else{
+ r7 = 1;
+ r10 = 2;
+}
+}
+ r11 = r8 | 4;
+ r13 = r7 | 4;
+ r14 = r8 | 8;
+ r15 = r9 | 4;
+ r16 = r7 | 8;
+ r17 = r10 | 4;
+ r7 = r7 << 2;
+ r13 = r13 << 2;
+ r11 = r11 << 2;
+ r8 = r8 << 2;
+ r18 = r9 | 8;
+ r19 = (r3 + r7)|0;
+ r13 = (r3 + r13)|0;
+ r16 = r16 << 2;
+ r20 = r10 << 2;
+ r17 = r17 << 2;
+ r10 = r10 | 8;
+ r21 = (r2 + r8)|0;
+ r11 = (r2 + r11)|0;
+ r14 = r14 << 2;
+ r15 = r15 << 2;
+ r9 = r9 << 2;
+ r19 = r19 >> 2;
+ r13 = r13 >> 2;
+ r16 = (r3 + r16)|0;
+ r22 = (r3 + r20)|0;
+ r17 = (r3 + r17)|0;
+ r10 = r10 << 2;
+ r21 = r21 >> 2;
+ heap32[(fp+-178)] = r21;
+ r11 = r11 >> 2;
+ heap32[(fp+-177)] = r11;
+ r14 = (r2 + r14)|0;
+ r23 = (r2 + r9)|0;
+ r15 = (r2 + r15)|0;
+ r18 = r18 << 2;
+ r16 = r16 >> 2;
+ r22 = r22 >> 2;
+ r17 = r17 >> 2;
+ r3 = (r3 + r10)|0;
+ r10 = r14 >> 2;
+ heap32[(fp+-179)] = r10;
+ r14 = r23 >> 2;
+ heap32[(fp+-180)] = r14;
+ r15 = r15 >> 2;
+ r2 = (r2 + r18)|0;
+ f5 = heapFloat[(r19)];
+ f6 = heapFloat[(r21)];
+ f7 = heapFloat[(r13)];
+ f8 = heapFloat[(r11)];
+ f9 = heapFloat[(r22)];
+ f10 = heapFloat[(r14)];
+ f11 = heapFloat[(r17)];
+ f12 = heapFloat[(r15)];
+ r3 = r3 >> 2;
+ r2 = r2 >> 2;
+ r8 = (r4 + r8)|0;
+ f13 = f5*f6;
+ f14 = f7*f8;
+ f15 = heapFloat[(r16)];
+ f16 = heapFloat[(r10)];
+ f17 = heapFloat[(r3)];
+ f18 = heapFloat[(r2)];
+ r3 = r8 >> 2;
+ r4 = (r4 + r9)|0;
+ f6 = f9*f6;
+ f8 = f11*f8;
+ f21 = f3*f5;
+ f22 = f4*f7;
+ f13 = f13+f14;
+ f14 = f15*f16;
+ f5 = f5*f10;
+ f7 = f7*f12;
+ f13 = f13+f14;
+ f14 = heapFloat[(r3)];
+ r3 = r4 >> 2;
+ f23 = f3*f9;
+ f24 = f4*f11;
+ f6 = f6+f8;
+ f8 = f17*f16;
+ f9 = f9*f10;
+ f10 = f11*f12;
+ f11 = f21+f22;
+ f12 = f2*f15;
+ f5 = f5+f7;
+ f7 = f15*f18;
+ f6 = f6+f8;
+ f8 = f11+f12;
+ f11 = f14*f13;
+ f5 = f5+f7;
+ f7 = heapFloat[(r3)];
+ f12 = f23+f24;
+ f15 = f2*f17;
+ f9 = f9+f10;
+ f10 = f17*f18;
+ f9 = f9+f10;
+ f10 = f12+f15;
+ f12 = f14*f6;
+ f14 = f8-f11;
+ f15 = f7*f5;
+ r3 = sp + -296;
+ f16 = f10-f12;
+ f7 = f7*f9;
+ f17 = f14-f15;
+ r4 = r3 >> 2;
+ f18 = f16-f7;
+ heapFloat[(fp+-74)] = f17;
+ f14 = f14+f15;
+ heapFloat[(r4+1)] = f18;
+ f11 = f8+f11;
+ f16 = f16+f7;
+ heapFloat[(r4+2)] = f14;
+ f12 = f10+f12;
+ f14 = f11+f15;
+ heapFloat[(r4+3)] = f16;
+ f16 = f12+f7;
+ heapFloat[(r4+4)] = f14;
+ f11 = f11-f15;
+ heapFloat[(r4+5)] = f16;
+ r8 = heap32[(fp+-186)];
+ r7 = (r8 + r7)|0;
+ f7 = f12-f7;
+ heapFloat[(r4+6)] = f11;
+ r9 = sp + -304;
+ r8 = (r8 + r20)|0;
+ r7 = r7 >> 2;
+ heapFloat[(r4+7)] = f7;
+ r4 = sp + -368;
+ r10 = 0;
+ r11 = 4;
+ r13 = r9 >> 2;
+ r8 = r8 >> 2;
+ heap32[(fp+-76)] = heap32[(r7)];
+ heap32[(r13+1)] = heap32[(r8)];
+ r7 = r10;
+_217: while(true){
+ if(r7 <2) //_LBB166_199
+{
+ r18 = 0;
+ r17 = (r18 - r7)|0;
+ r14 = r1;
+ r8 = r4;
+_220: while(true){
+ r4 = r8;
+ if(r14 >1) //_LBB166_196
+{
+break _220;
+}
+else{
+ f7 = r14; //fitos r14, f7
+ r16 = (r3 + 8)|0;
+ r8 = r18;
+ r10 = r18;
+ r13 = r4;
+_223: while(true){
+ if(r11 >0) //_LBB166_181
+{
+ r19 = (r3 + r8)|0;
+ r20 = (r16 + r8)|0;
+ r21 = r7 << 2;
+ r22 = (r9 + r21)|0;
+ r23 = (r19 + r21)|0;
+ r22 = r22 >> 2;
+ r23 = r23 >> 2;
+ f11 = heapFloat[(r22)];
+ f12 = heapFloat[(r23)];
+ f14 = f7*f12;
+ if(f14 <f11) //_LBB166_183
+{
+ r24 = r13 >> 2;
+ r25 = r19 >> 2;
+ r10 = (r10 + 1)|0;
+ heap32[(r24)] = heap32[(r25)];
+ heap32[(r24+1)] = heap32[(r25+1)];
+ r24 = r10 & 8;
+ if(r24 ==0) //_LBB166_185
+{
+ r13 = (r13 + 8)|0;
+ f12 = heapFloat[(r23)];
+ f11 = heapFloat[(r22)];
+}
+else{
+__label__ = 179;
+break _217;
+}
+}
+ r20 = r11 > 1 ? r20 : r3;
+ r23 = (r20 + r21)|0;
+ r23 = r23 >> 2;
+ f14 = heapFloat[(r23)];
+ f15 = f7*f12;
+ f16 = f7*f14;
+ r23 = f15 < f11;
+ r24 = f16 < f11;
+ r23 = r23 ^ r24;
+ if(r23 != 0) //_LBB166_188
+{
+ r23 = r17 << 2;
+ r19 = (r19 + r23)|0;
+ r20 = (r20 + r23)|0;
+ r19 = r19 >> 2;
+ r20 = r20 >> 2;
+ f15 = heapFloat[(r19+1)];
+ f16 = heapFloat[(r20+1)];
+ f11 = f7*f11;
+ f16 = f16-f15;
+ f14 = f14-f12;
+ f14 = f16/f14;
+ f11 = f11-f12;
+ r19 = (r13 + r23)|0;
+ f11 = f14*f11;
+ r19 = r19 >> 2;
+ f11 = f15+f11;
+ heapFloat[(r19+1)] = f11;
+ r19 = (r13 + r21)|0;
+ f11 = heapFloat[(r22)];
+ r10 = (r10 + 1)|0;
+ r19 = r19 >> 2;
+ f11 = f7*f11;
+ heapFloat[(r19)] = f11;
+ r19 = r10 & 8;
+ if(r19 ==0) //_LBB166_190
+{
+ r13 = (r13 + 8)|0;
+}
+else{
+__label__ = 179;
+break _217;
+}
+}
+ r11 = (r11 + -1)|0;
+ r8 = (r8 + 8)|0;
+}
+else{
+break _223;
+}
+}
+ r3 = sp + -368;
+ r8 = sp + -128;
+ r8 = r4 == r3 ? r8 : r3;
+ r14 = (r14 + 2)|0;
+ r3 = r4;
+ r11 = r10;
+}
+}
+ r7 = (r7 + 1)|0;
+}
+else{
+__label__ = 177;
+break _217;
+}
+}
+if (__label__ == 177){
+ r4 = r3;
+}
+ r1 = sp + -368;
+if(!(r4 ==r1)) //_LBB166_202
+{
+ r3 = r10 << 3;
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r4;
+ heap32[(g0+2)] = r3;
+ memcpy(i7);
+}
+ if(r10 <1) //_LBB166_268
+{
+break _41;
+}
+else{
+ f7 = f13*f9;
+ f11 = f5*f6;
+ f12 = 1;
+ f7 = f7-f11;
+ r3 = r6 << 2;
+ f7 = f12/f7;
+ r4 = heap32[(fp+-186)];
+ r3 = (r4 + r3)|0;
+ f6 = f6*f7;
+ r3 = r3 >> 2;
+ f11 = f13*f7;
+ f5 = f5*f7;
+ f7 = f9*f7;
+ f6 = -f6;
+ f9 = heapFloat[(r3)];
+ r3 = heap32[(fp+-178)];
+ f13 = heapFloat[(r3)];
+ r3 = heap32[(fp+-180)];
+ f14 = heapFloat[(r3)];
+ r3 = heap32[(fp+-177)];
+ f15 = heapFloat[(r3)];
+ f16 = heapFloat[(r15)];
+ r3 = heap32[(fp+-179)];
+ f17 = heapFloat[(r3)];
+ f18 = heapFloat[(r2)];
+ r2 = (r1 + 4)|0;
+ r3 = 0;
+_243: while(true){
+ r4 = r2 >> 2;
+ f21 = heapFloat[(r4+-1)];
+ f22 = heapFloat[(r4)];
+ f23 = f21-f8;
+ f24 = f22-f10;
+ f25 = f23*f7;
+ f26 = f24*f5;
+ f25 = f25-f26;
+ f23 = f23*f6;
+ f24 = f24*f11;
+ r4 = (r3 * 3)|0;
+ f26 = f15*f25;
+ f23 = f23+f24;
+ f24 = f13*f25;
+ r6 = sp + -464;
+ r4 = r4 << 2;
+ f25 = f17*f25;
+ f26 = f4+f26;
+ f28 = f16*f23;
+ f24 = f3+f24;
+ f29 = f14*f23;
+ r4 = (r6 + r4)|0;
+ f24 = f24+f29;
+ f26 = f26+f28;
+ f25 = f2+f25;
+ f23 = f18*f23;
+ f28 = f0*f24;
+ f29 = f1*f26;
+ f23 = f25+f23;
+ r4 = r4 >> 2;
+ heapFloat[(r4)] = f24;
+ f24 = f28+f29;
+ f25 = f19*f23;
+ r7 = sp + -496;
+ r8 = r3 << 2;
+ r8 = (r7 + r8)|0;
+ heapFloat[(r4+1)] = f26;
+ f24 = f24+f25;
+ f24 = f9-f24;
+ r8 = r8 >> 2;
+ heapFloat[(r4+2)] = f23;
+ heapFloat[(r8)] = f24;
+ if(f24 >=f27) //_LBB166_206
+{
+ r4 = r3 << 3;
+ r8 = r4 | 4;
+ r4 = (r1 + r4)|0;
+ r8 = (r1 + r8)|0;
+ r4 = r4 >> 2;
+ r3 = (r3 + 1)|0;
+ r8 = r8 >> 2;
+ heapFloat[(r4)] = f21;
+ heapFloat[(r8)] = f22;
+}
+ r10 = (r10 + -1)|0;
+ r2 = (r2 + 8)|0;
+if(!(r10 !=0)) //_LBB166_204
+{
+break _243;
+}
+}
+ if(r3 <1) //_LBB166_268
+{
+break _41;
+}
+else{
+ r2 = 4;
+ r2 = r3 < 4 ? r3 : r2;
+ r4 = 1;
+ r8 = r2 < 1 ? r4 : r2;
+ if(r3 >r8) //_LBB166_215
+{
+_252: do {
+ if(r3 >1) //_LBB166_217
+{
+ f0 = heapFloat[(fp+-124)];
+ r9 = 1;
+ r7 = 0;
+_254: while(true){
+ r10 = sp + -496;
+ r11 = r9 << 2;
+ r10 = (r10 + r11)|0;
+ r10 = r10 >> 2;
+ f1 = heapFloat[(r10)];
+ r10 = (r9 + 1)|0;
+ r7 = f1 > f0 ? r9 : r7;
+ f0 = f1 > f0 ? f1 : f0;
+ r9 = r10;
+if(!(r3 !=r10)) //_LBB166_218
+{
+break _252;
+}
+}
+}
+else{
+ r7 = 0;
+}
+} while(0);
+_258: do {
+ if(r3 ==1) //_LBB166_224
+{
+ r9 = r1 >> 2;
+ f0 = heapFloat[(fp+-92)];
+ f1 = heapFloat[(r9+1)];
+__label__ = 214;
+break _258;
+}
+else{
+ if(r3 ==2) //_LBB166_225
+{
+ r9 = r1 >> 2;
+ f0 = heapFloat[(fp+-92)];
+ f1 = heapFloat[(r9+2)];
+ f2 = heapFloat[(r9+1)];
+ f12 = heapFloat[(r9+3)];
+ f0 = f0+f1;
+ f1 = f2+f12;
+ f2 = heapFloat[(fp+-187)];
+ f0 = f0*f2;
+ f1 = f1*f2;
+__label__ = 214;
+break _258;
+}
+else{
+ r9 = (r3 + -1)|0;
+_264: do {
+ if(r9 >0) //_LBB166_223
+{
+ r10 = (r1 + 8)|0;
+ f0 = 0;
+ f1 = f0;
+ f2 = f0;
+_266: while(true){
+ r11 = r10 >> 2;
+ f3 = heapFloat[(r11+-2)];
+ f4 = heapFloat[(r11+1)];
+ f5 = heapFloat[(r11)];
+ f6 = heapFloat[(r11+-1)];
+ f7 = f3*f4;
+ f8 = f5*f6;
+ f3 = f3+f5;
+ f5 = f7-f8;
+ f4 = f6+f4;
+ f3 = f3*f5;
+ f4 = f4*f5;
+ r9 = (r9 + -1)|0;
+ f2 = f2+f5;
+ f1 = f3+f1;
+ f0 = f4+f0;
+ r10 = (r10 + 8)|0;
+if(!(r9 !=0)) //_LBB166_226
+{
+break _264;
+}
+}
+}
+else{
+ f0 = f27;
+ f1 = f27;
+ f2 = f27;
+}
+} while(0);
+ r9 = r3 << 3;
+ r9 = (r9 + r1)|0;
+ r9 = r9 >> 2;
+ r10 = r1 >> 2;
+ f3 = heapFloat[(r9+-2)];
+ f4 = heapFloat[(r10+1)];
+ f5 = heapFloat[(fp+-92)];
+ f6 = heapFloat[(r9+-1)];
+ f7 = f3*f4;
+ f8 = f5*f6;
+ f7 = f7-f8;
+ f2 = f2+f7;
+ if(f2 <f27) //_LBB166_229
+{
+ f8 = -f2;
+}
+else{
+ f8 = f2;
+}
+ if(f8 >f20) //_LBB166_232
+{
+ f8 = 3;
+ f2 = f2*f8;
+ f2 = f12/f2;
+}
+else{
+ f2 = 999999984306749440;
+}
+ if(r3 >0) //_LBB166_235
+{
+ f3 = f3+f5;
+ f4 = f6+f4;
+ f3 = f3*f7;
+ f4 = f4*f7;
+ f1 = f3+f1;
+ f3 = f4+f0;
+ f0 = f1*f2;
+ f1 = f3*f2;
+__label__ = 214;
+}
+else{
+ r1 = 0;
+__label__ = 219;
+}
+}
+}
+} while(0);
+if (__label__ == 214){
+ r1 = (r1 + 4)|0;
+ r9 = sp + -32;
+ r10 = r3;
+_283: while(true){
+ r11 = r1 >> 2;
+ f2 = heapFloat[(r11+-1)];
+ f3 = heapFloat[(r11)];
+ f3 = f3-f1;
+ f2 = f2-f0;
+ heapFloat[(g0)] = f3;
+ heapFloat[(g0+1)] = f2;
+ r10 = (r10 + -1)|0;
+ r1 = (r1 + 8)|0;
+ r11 = (r9 + 4)|0;
+ r9 = r9 >> 2;
+ atan2f(i7);
+ heapFloat[(r9)] = f_g0;
+ r9 = r11;
+if(!(r10 !=0)) //_LBB166_237
+{
+break _283;
+}
+}
+ r1 = sp + -64;
+ r9 = r3;
+_286: while(true){
+ r9 = (r9 + -1)|0;
+ r10 = (r1 + 4)|0;
+ r1 = r1 >> 2;
+ heap32[(r1)] = 1;
+ r1 = r10;
+if(!(r9 !=0)) //_LBB166_239
+{
+break _286;
+}
+}
+ r1 = 1;
+}
+ r9 = sp + -64;
+ r10 = r7 << 2;
+ r11 = (r9 + r10)|0;
+ r11 = r11 >> 2;
+ f0 = 6.2831854820251465;
+ f1 = r8; //fitos r8, f1
+ f1 = f0/f1;
+ heap32[(r11)] = 0;
+ heap32[(fp+-144)] = r7;
+ f6 = 0;
+_290: while(true){
+ if(r4 <r8) //_LBB166_242
+{
+ r11 = sp + -32;
+ r13 = (r11 + r10)|0;
+ r13 = r13 >> 2;
+ f2 = r4; //fitos r4, f2
+ f2 = f2*f1;
+ f3 = heapFloat[(r13)];
+ f2 = f2+f3;
+ f3 = 3.1415927410125732;
+ if(f2 >f3) //_LBB166_244
+{
+ f4 = -6.2831854820251465;
+ f2 = f2+f4;
+}
+ r13 = sp + -576;
+ r14 = r4 << 2;
+ r13 = (r13 + r14)|0;
+ r13 = r13 >> 2;
+ r14 = r1 & 1;
+ heap32[(r13)] = r7;
+ if(r14 ==0) //_LBB166_259
+{
+__label__ = 233;
+break _290;
+}
+else{
+ f4 = 1000000000;
+ r14 = 0;
+ r15 = r7;
+_297: while(true){
+ r16 = r14 << 2;
+ r17 = (r9 + r16)|0;
+ r17 = r17 >> 2;
+ r17 = heap32[(r17)];
+ if(r17 !=0) //_LBB166_249
+{
+ r16 = (r11 + r16)|0;
+ r16 = r16 >> 2;
+ f5 = heapFloat[(r16)];
+ f5 = f5-f2;
+ if(f5 <f6) //_LBB166_251
+{
+ f5 = -f5;
+}
+ if(f5 >f3) //_LBB166_254
+{
+ f5 = f0-f5;
+}
+if(!(f5 >=f4)) //_LBB166_248
+{
+ heap32[(r13)] = r14;
+ r15 = r14;
+ f4 = f5;
+}
+}
+ r14 = (r14 + 1)|0;
+if(!(r3 !=r14)) //_LBB166_247
+{
+break _297;
+}
+}
+ if(r15 !=r7) //_LBB166_260
+{
+ r11 = r15 << 2;
+ r11 = (r9 + r11)|0;
+ r4 = (r4 + 1)|0;
+ r11 = r11 >> 2;
+ heap32[(r11)] = 0;
+}
+else{
+__label__ = 233;
+break _290;
+}
+}
+}
+else{
+__label__ = 236;
+break _290;
+}
+}
+switch(__label__ ){//multiple entries
+case 233:
+ r0 = _2E_str65;
+ r1 = _2E_str166;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 248;
+ _assert(i7);
+break;
+case 236:
+ if(r8 >0) //_LBB166_267
+{
+ r1 = 0;
+_315: while(true){
+ r3 = sp + -576;
+ r4 = r1 << 2;
+ r3 = (r3 + r4)|0;
+ r3 = r3 >> 2;
+ r3 = heap32[(r3)];
+ r4 = (r3 * 3)|0;
+ r4 = r4 << 2;
+ r4 = (r6 + r4)|0;
+ r4 = r4 >> 2;
+ f0 = heapFloat[(r4)];
+ f1 = heapFloat[(r0)];
+ f0 = f0+f1;
+ heapFloat[(fp+-148)] = f0;
+ r7 = sp + -592;
+ f1 = heapFloat[(r4+1)];
+ f2 = heapFloat[(r0+1)];
+ f1 = f1+f2;
+ r8 = r7 >> 2;
+ heapFloat[(r8+1)] = f1;
+ f2 = heapFloat[(r4+2)];
+ f3 = heapFloat[(r0+2)];
+ f2 = f2+f3;
+ r4 = sp + -496;
+ r3 = r3 << 2;
+ r3 = (r4 + r3)|0;
+ r4 = r5 >> 2;
+ heapFloat[(r8+2)] = f2;
+ r4 = heap32[(r4)];
+ r3 = r3 >> 2;
+ r8 = sp + -704;
+ f3 = heapFloat[(r3)];
+ r3 = r4 >> 2;
+ r4 = r8 >> 2;
+ r3 = heap32[(r3+4)];
+ f4 = -f3;
+ f5 = heapFloat[(r4+2)];
+ if(r12 >3) //_LBB166_265
+{
+ f6 = heapFloat[(fp+-176)];
+ f7 = heapFloat[(r4+1)];
+ f8 = f6*f3;
+ r4 = sp + -160;
+ f9 = f7*f3;
+ f0 = f0-f8;
+ r7 = r4 >> 2;
+ f3 = f5*f3;
+ f1 = f1-f9;
+ heapFloat[(fp+-40)] = f0;
+ f0 = f2-f3;
+ heapFloat[(r7+1)] = f1;
+ heapFloat[(r7+2)] = f0;
+ r8 = sp + -144;
+ f0 = -f6;
+ heap32[(r7+3)] = 0;
+ r7 = r8 >> 2;
+ f1 = -f7;
+ heapFloat[(fp+-36)] = f0;
+ f0 = -f5;
+ heapFloat[(r7+1)] = f1;
+ heapFloat[(r7+2)] = f0;
+ heap32[(r7+3)] = 0;
+ heap32[(g0)] = r5;
+ heap32[(g0+1)] = r8;
+ heap32[(g0+2)] = r4;
+ heapFloat[(g0+3)] = f4;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+}
+else{
+ f0 = heapFloat[(r4+1)];
+ f1 = heapFloat[(fp+-176)];
+ r4 = sp + -176;
+ f1 = -f1;
+ r8 = r4 >> 2;
+ f0 = -f0;
+ heapFloat[(fp+-44)] = f1;
+ f1 = -f5;
+ heapFloat[(r8+1)] = f0;
+ heapFloat[(r8+2)] = f1;
+ heap32[(r8+3)] = 0;
+ heap32[(g0)] = r5;
+ heap32[(g0+1)] = r4;
+ heap32[(g0+2)] = r7;
+ heapFloat[(g0+3)] = f4;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+}
+ r1 = (r1 + 1)|0;
+ if(r1 >=r2) //_LBB166_268
+{
+break _41;
+}
+else{
+continue _315;
+}
+}
+}
+else{
+break _41;
+}
+break;
+}
+}
+else{
+ if(r12 <4) //_LBB166_212
+{
+ r1 = (r6 + 8)|0;
+ r2 = sp + -496;
+_324: while(true){
+ r4 = r1 >> 2;
+ f12 = heapFloat[(r4+-2)];
+ f20 = heapFloat[(r0)];
+ f12 = f12+f20;
+ heapFloat[(fp+-132)] = f12;
+ r6 = sp + -528;
+ f12 = heapFloat[(r4+-1)];
+ f20 = heapFloat[(r0+1)];
+ r7 = r6 >> 2;
+ f12 = f12+f20;
+ heapFloat[(r7+1)] = f12;
+ f12 = heapFloat[(r4)];
+ f20 = heapFloat[(r0+2)];
+ f12 = f12+f20;
+ heapFloat[(r7+2)] = f12;
+ r4 = r5 >> 2;
+ r4 = heap32[(r4)];
+ r7 = sp + -704;
+ r7 = r7 >> 2;
+ r4 = r4 >> 2;
+ r8 = r2 >> 2;
+ f12 = heapFloat[(r8)];
+ f20 = heapFloat[(r7+2)];
+ f27 = heapFloat[(r7+1)];
+ f0 = heapFloat[(fp+-176)];
+ r4 = heap32[(r4+4)];
+ r7 = sp + -208;
+ f0 = -f0;
+ r8 = r7 >> 2;
+ f27 = -f27;
+ heapFloat[(fp+-52)] = f0;
+ f20 = -f20;
+ heapFloat[(r8+1)] = f27;
+ heapFloat[(r8+2)] = f20;
+ heap32[(r8+3)] = 0;
+ f12 = -f12;
+ heap32[(g0)] = r5;
+ heap32[(g0+1)] = r7;
+ heap32[(g0+2)] = r6;
+ heapFloat[(g0+3)] = f12;
+ r3 = (r3 + -1)|0;
+ r2 = (r2 + 4)|0;
+ r1 = (r1 + 12)|0;
+ __FUNCTION_TABLE__[(r4)>>2](i7);
+ if(r3 ==0) //_LBB166_268
+{
+break _41;
+}
+else{
+continue _324;
+}
+}
+}
+else{
+ r1 = (r6 + 8)|0;
+_327: while(true){
+ r2 = r7 >> 2;
+ r4 = r1 >> 2;
+ f12 = heapFloat[(r2)];
+ f20 = heapFloat[(fp+-176)];
+ f27 = heapFloat[(r4+-2)];
+ f0 = heapFloat[(r0)];
+ f27 = f27+f0;
+ f0 = f20*f12;
+ r2 = sp + -704;
+ f27 = f27-f0;
+ heapFloat[(fp+-136)] = f27;
+ r2 = r2 >> 2;
+ f27 = heapFloat[(r2+1)];
+ f0 = heapFloat[(r4+-1)];
+ f1 = heapFloat[(r0+1)];
+ r6 = sp + -544;
+ f0 = f0+f1;
+ f1 = f27*f12;
+ r8 = r6 >> 2;
+ f0 = f0-f1;
+ heapFloat[(r8+1)] = f0;
+ f0 = heapFloat[(r2+2)];
+ f1 = heapFloat[(r4)];
+ f2 = heapFloat[(r0+2)];
+ f1 = f1+f2;
+ f2 = f0*f12;
+ f1 = f1-f2;
+ r2 = r5 >> 2;
+ heapFloat[(r8+2)] = f1;
+ r2 = heap32[(r2)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+4)];
+ r4 = sp + -192;
+ f20 = -f20;
+ r8 = r4 >> 2;
+ f27 = -f27;
+ heapFloat[(fp+-48)] = f20;
+ f20 = -f0;
+ heapFloat[(r8+1)] = f27;
+ heapFloat[(r8+2)] = f20;
+ heap32[(r8+3)] = 0;
+ f12 = -f12;
+ heap32[(g0)] = r5;
+ heap32[(g0+1)] = r4;
+ heap32[(g0+2)] = r6;
+ heapFloat[(g0+3)] = f12;
+ r3 = (r3 + -1)|0;
+ r7 = (r7 + 4)|0;
+ r1 = (r1 + 12)|0;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ if(r3 ==0) //_LBB166_268
+{
+break _41;
+}
+else{
+continue _327;
+}
+}
+}
+}
+}
+}
+}
+else{
+ r0 = sp + -688;
+ r2 = r0 >> 2;
+ f20 = heapFloat[(fp+-172)];
+ f27 = heapFloat[(r2+4)];
+ f2 = heapFloat[(r2+5)];
+ f3 = heapFloat[(r2+1)];
+ f4 = f0*f20;
+ f5 = f1*f27;
+ f6 = heapFloat[(r2+8)];
+ f7 = heapFloat[(r2+9)];
+ f8 = heapFloat[(r2+6)];
+ f9 = heapFloat[(r2+2)];
+ f4 = f4+f5;
+ f5 = f19*f6;
+ f10 = f0*f3;
+ f11 = f1*f2;
+ f12 = heapFloat[(r2+10)];
+ f4 = f4+f5;
+ f5 = f10+f11;
+ f10 = f19*f7;
+ f11 = f0*f9;
+ f13 = f1*f8;
+ f14 = 0;
+ f15 = -1;
+ f16 = 1;
+ f5 = f5+f10;
+ f4 = f4 > f14 ? f15 : f16;
+ f10 = f11+f13;
+ f11 = f19*f12;
+ f13 = heapFloat[(fp+-181)];
+ f4 = f13*f4;
+ f10 = f10+f11;
+ f5 = f5 > f14 ? f15 : f16;
+ f11 = heapFloat[(fp+-182)];
+ f5 = f11*f5;
+ r2 = sp + -640;
+ f20 = f4*f20;
+ f11 = heapFloat[(r1+28)];
+ f10 = f10 > f14 ? f15 : f16;
+ r3 = r2 >> 2;
+ f13 = heapFloat[(fp+-180)];
+ f10 = f13*f10;
+ f27 = f4*f27;
+ f13 = heapFloat[(r1+29)];
+ f20 = f11+f20;
+ f3 = f5*f3;
+ r4 = (r12 + -7)|0;
+ f11 = heapFloat[(r3+4)];
+ f17 = heapFloat[(fp+-160)];
+ f18 = heapFloat[(r3+8)];
+ f21 = heapFloat[(r3+5)];
+ f22 = heapFloat[(r3+1)];
+ f23 = heapFloat[(r3+9)];
+ f24 = heapFloat[(r3+6)];
+ f25 = heapFloat[(r3+2)];
+ f26 = heapFloat[(r3+10)];
+ f4 = f4*f6;
+ f6 = heapFloat[(r1+30)];
+ f27 = f13+f27;
+ f2 = f5*f2;
+ f20 = f20+f3;
+ f3 = f10*f9;
+ f9 = heapFloat[(r1+12)];
+ heapFloat[(fp+-182)] = f9;
+ f9 = heapFloat[(r1+13)];
+ heapFloat[(fp+-181)] = f9;
+ f9 = heapFloat[(r1+14)];
+ heapFloat[(fp+-180)] = f9;
+ r3 = (r4 / 3)|0;
+ r4 = (r4 % 3)|0;
+ r10 = sp + -512;
+ f20 = f20+f3;
+ f3 = f6+f4;
+ f4 = f5*f7;
+ f27 = f27+f2;
+ f2 = f10*f8;
+ r3 = r3 << 2;
+ r4 = r4 << 2;
+ f27 = f27+f2;
+ r12 = r10 >> 2;
+ heapFloat[(fp+-128)] = f20;
+ f2 = f3+f4;
+ f3 = f10*f12;
+ r2 = (r2 + r3)|0;
+ r0 = (r0 + r4)|0;
+ f2 = f2+f3;
+ heapFloat[(r12+1)] = f27;
+ r2 = r2 >> 2;
+ heapFloat[(r12+2)] = f2;
+ r0 = r0 >> 2;
+ f3 = heapFloat[(r2)];
+ f4 = heapFloat[(r0)];
+ f5 = heapFloat[(r2+4)];
+ f6 = heapFloat[(r0+4)];
+ f7 = heapFloat[(r2+8)];
+ f8 = heapFloat[(r0+8)];
+ f9 = f3*f4;
+ f10 = f5*f6;
+ f9 = f9+f10;
+ f10 = f7*f8;
+ f9 = f9+f10;
+ f10 = f9*f9;
+ f10 = f16-f10;
+ f12 = 9.9999997473787516e-005;
+ if(f10 >f12) //_LBB166_151
+{
+ f12 = f0*f17;
+ f13 = f1*f11;
+ f12 = f12+f13;
+ f13 = f19*f18;
+ f28 = f0*f22;
+ f29 = f1*f21;
+ f12 = f12+f13;
+ f13 = f28+f29;
+ f28 = f19*f23;
+ f29 = f0*f25;
+ f30 = f1*f24;
+ f13 = f13+f28;
+ f12 = f12 > f14 ? f16 : f15;
+ f28 = f29+f30;
+ f29 = f19*f26;
+ f30 = heapFloat[(fp+-179)];
+ f12 = f30*f12;
+ f28 = f28+f29;
+ f13 = f13 > f14 ? f16 : f15;
+ f29 = heapFloat[(fp+-178)];
+ f13 = f29*f13;
+ f17 = f12*f17;
+ f11 = f12*f11;
+ f12 = f12*f18;
+ f14 = f28 > f14 ? f16 : f15;
+ f15 = heapFloat[(fp+-177)];
+ f14 = f15*f14;
+ f15 = heapFloat[(fp+-182)];
+ f15 = f15+f17;
+ f17 = f13*f22;
+ f18 = heapFloat[(fp+-181)];
+ f11 = f18+f11;
+ f18 = f13*f21;
+ f21 = heapFloat[(fp+-180)];
+ f12 = f21+f12;
+ f13 = f13*f23;
+ f15 = f15+f17;
+ f17 = f14*f25;
+ f11 = f11+f18;
+ f18 = f14*f24;
+ f12 = f12+f13;
+ f14 = f14*f26;
+ f13 = f15+f17;
+ f11 = f11+f18;
+ f14 = f12+f14;
+ f12 = f20-f13;
+ f11 = f27-f11;
+ f14 = f2-f14;
+ f3 = f3*f12;
+ f5 = f5*f11;
+ f3 = f3+f5;
+ f5 = f7*f14;
+ f7 = f4*f12;
+ f11 = f6*f11;
+ f3 = f3+f5;
+ f5 = f7+f11;
+ f14 = f8*f14;
+ f3 = f9*f3;
+ f14 = f5+f14;
+ f14 = f3-f14;
+ f3 = f16/f10;
+ f14 = f14*f3;
+}
+ f3 = f4*f14;
+ f20 = f20+f3;
+ f3 = f6*f14;
+ f4 = f8*f14;
+ f27 = f27+f3;
+ heapFloat[(fp+-128)] = f20;
+ f20 = f2+f4;
+ heapFloat[(r12+1)] = f27;
+ r0 = r5 >> 2;
+ heapFloat[(r12+2)] = f20;
+ r0 = heap32[(r0)];
+ r0 = r0 >> 2;
+ r0 = heap32[(r0+4)];
+ r2 = sp + -224;
+ f0 = -f0;
+ r3 = r2 >> 2;
+ f1 = -f1;
+ heapFloat[(fp+-56)] = f0;
+ f0 = -f19;
+ heapFloat[(r3+1)] = f1;
+ heapFloat[(r3+2)] = f0;
+ heap32[(r3+3)] = 0;
+ heap32[(g0)] = r5;
+ heap32[(g0+1)] = r2;
+ heap32[(g0+2)] = r10;
+ f0 = heapFloat[(fp+-183)];
+ heapFloat[(g0+3)] = f0;
+ __FUNCTION_TABLE__[(r0)>>2](i7);
+ return;
+}
+}
+}
+}
+}
+}
+}
+}
+}
+}
+}
+}
+}
+}
+}
+}
+} while(0);
+ return;
+}
+
+function _ZN21btCollisionDispatcher13findAlgorithmEP17btCollisionObjectS1_P20btPersistentManifold(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+var __label__ = 0;
+ i7 = sp + -24;var g0 = i7>>2; // save stack
+ r0 = sp + -8;
+ r1 = heap32[(fp)];
+ r2 = heap32[(fp+1)];
+ r3 = r0 >> 2;
+ r4 = heap32[(fp+3)];
+ heap32[(fp+-2)] = r1;
+ r5 = heap32[(fp+2)];
+ r6 = r2 >> 2;
+ heap32[(r3+1)] = r4;
+ r3 = heap32[(r6+48)];
+ r4 = r5 >> 2;
+ r3 = r3 >> 2;
+ r4 = heap32[(r4+48)];
+ r3 = heap32[(r3+1)];
+ r4 = r4 >> 2;
+ r4 = heap32[(r4+1)];
+ r3 = (r3 * 144)|0;
+ r1 = (r1 + r3)|0;
+ r3 = r4 << 2;
+ r1 = (r1 + r3)|0;
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+50)];
+ r3 = r1 >> 2;
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3+2)];
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r0;
+ heap32[(g0+2)] = r2;
+ heap32[(g0+3)] = r5;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ return;
+}
+
+function _ZN21btCollisionDispatcher13needsResponseEP17btCollisionObjectS1_(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ r0 = r0 >> 2;
+ r0 = heap32[(r0+51)];
+ r1 = r0 & 4;
+if(!(r1 !=0)) //_LBB168_4
+{
+ r1 = heap32[(fp+2)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+51)];
+ r2 = r1 & 4;
+if(!(r2 !=0)) //_LBB168_4
+{
+ r0 = r0 & 3;
+ if(r0 ==0) //_LBB168_5
+{
+ r0 = 1;
+ r_g0 = r0;
+ return;
+}
+else{
+ r0 = r1 & 3;
+ r1 = 0;
+ r0 = r0 == r1;
+ r0 = r0 & 1;
+ r_g0 = r0;
+ return;
+}
+}
+}
+ r0 = 0;
+ r_g0 = r0;
+ return;
+}
+
+function _ZN23btCollisionPairCallbackD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV23btCollisionPairCallback;
+ r0 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r0)] = r1;
+ return;
+}
+
+function _ZN23btCollisionPairCallbackD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV23btCollisionPairCallback;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZN23btCollisionPairCallback14processOverlapER16btBroadphasePair(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r1 = heap32[(r0+2)];
+ r2 = r1 >> 2;
+ r2 = heap32[(r2+47)];
+ r0 = heap32[(r0+1)];
+ r3 = heap32[(fp+1)];
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = r0;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ r0 = 0;
+ r_g0 = r0;
+ return;
+}
+
+function _ZN21btCollisionDispatcher25dispatchAllCollisionPairsEP22btOverlappingPairCacheRK16btDispatcherInfoP12btDispatcher(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+var __label__ = 0;
+ i7 = sp + -32;var g0 = i7>>2; // save stack
+ r0 = _ZTV23btCollisionPairCallback;
+ r1 = sp + -16;
+ r0 = (r0 + 8)|0;
+ r2 = r1 >> 2;
+ r3 = heap32[(fp+2)];
+ heap32[(fp+-4)] = r0;
+ r0 = heap32[(fp+1)];
+ r4 = heap32[(fp)];
+ heap32[(r2+1)] = r3;
+ r3 = r0 >> 2;
+ heap32[(r2+2)] = r4;
+ r2 = heap32[(r3)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+12)];
+ r3 = heap32[(fp+3)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = r3;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ return;
+}
+
+function _ZNK21btCollisionDispatcher15getNumManifoldsEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r0 = heap32[(r0+3)];
+ r_g0 = r0;
+ return;
+}
+
+function _ZN21btCollisionDispatcher26getInternalManifoldPointerEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r0 = heap32[(r0+5)];
+ r_g0 = r0;
+ return;
+}
+
+function _ZN21btCollisionDispatcher26getManifoldByIndexInternalEi(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r1 = heap32[(fp+1)];
+ r0 = heap32[(r0+5)];
+ r1 = r1 << 2;
+ r0 = (r0 + r1)|0;
+ r0 = r0 >> 2;
+ r0 = heap32[(r0)];
+ r_g0 = r0;
+ return;
+}
+
+function _ZN21btCollisionDispatcher22freeCollisionAlgorithmEPv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+if(!(r0 ==0)) //_LBB176_5
+{
+ r1 = heap32[(fp)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+48)];
+ r1 = r1 >> 2;
+ r2 = heap32[(r1+4)];
+if(!(uint(r2) >uint(r0))) //_LBB176_4
+{
+ r3 = heap32[(r1)];
+ r4 = heap32[(r1+1)];
+ r3 = (r3 * r4)|0;
+ r2 = (r2 + r3)|0;
+if(!(uint(r2) <=uint(r0))) //_LBB176_4
+{
+ r2 = r0 >> 2;
+ r3 = heap32[(r1+3)];
+ heap32[(r2)] = r3;
+ heap32[(r1+3)] = r0;
+ r0 = heap32[(r1+2)];
+ r0 = (r0 + 1)|0;
+ heap32[(r1+2)] = r0;
+ return;
+}
+}
+ r1 = gNumAlignedFree;
+ r1 = r1 >> 2;
+ r2 = heap32[(r1)];
+ r2 = (r2 + 1)|0;
+ r0 = r0 >> 2;
+ heap32[(r1)] = r2;
+ r0 = heap32[(r0+-1)];
+ heap32[(g0)] = r0;
+ free(i7);
+}
+ return;
+}
+
+function _ZN21btCollisionDispatcher15releaseManifoldEP20btPersistentManifold(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = gNumManifold;
+ r0 = r0 >> 2;
+ r1 = heap32[(r0)];
+ r2 = heap32[(fp)];
+ r1 = (r1 + -1)|0;
+ r3 = r2 >> 2;
+ heap32[(r0)] = r1;
+ r0 = heap32[(r3)];
+ r0 = r0 >> 2;
+ r0 = heap32[(r0+5)];
+ r1 = heap32[(fp+1)];
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = r1;
+ __FUNCTION_TABLE__[(r0)>>2](i7);
+ r0 = r1 >> 2;
+ r2 = heap32[(r3+3)];
+ r4 = heap32[(r0+284)];
+ if(r2 >r4) //_LBB177_2
+{
+ r2 = (r2 + -1)|0;
+ r5 = r4 << 2;
+ r6 = heap32[(r3+5)];
+ r2 = r2 << 2;
+ r7 = (r6 + r5)|0;
+ r6 = (r6 + r2)|0;
+ r7 = r7 >> 2;
+ r6 = r6 >> 2;
+ r8 = heap32[(r7)];
+ r6 = heap32[(r6)];
+ heap32[(r7)] = r6;
+ r6 = heap32[(r3+5)];
+ r2 = (r6 + r2)|0;
+ r2 = r2 >> 2;
+ heap32[(r2)] = r8;
+ r2 = heap32[(r3+5)];
+ r2 = (r2 + r5)|0;
+ r2 = r2 >> 2;
+ r2 = heap32[(r2)];
+ r2 = r2 >> 2;
+ heap32[(r2+284)] = r4;
+ r2 = heap32[(r3+3)];
+ r2 = (r2 + -1)|0;
+ heap32[(r3+3)] = r2;
+if(!(r1 ==0)) //_LBB177_7
+{
+ r2 = heap32[(r3+49)];
+ r2 = r2 >> 2;
+ r3 = heap32[(r2+4)];
+if(!(uint(r3) >uint(r1))) //_LBB177_6
+{
+ r4 = heap32[(r2)];
+ r5 = heap32[(r2+1)];
+ r4 = (r4 * r5)|0;
+ r3 = (r3 + r4)|0;
+if(!(uint(r3) <=uint(r1))) //_LBB177_6
+{
+ r3 = heap32[(r2+3)];
+ heap32[(r0)] = r3;
+ heap32[(r2+3)] = r1;
+ r0 = heap32[(r2+2)];
+ r0 = (r0 + 1)|0;
+ heap32[(r2+2)] = r0;
+ return;
+}
+}
+ r1 = gNumAlignedFree;
+ r1 = r1 >> 2;
+ r2 = heap32[(r1)];
+ r2 = (r2 + 1)|0;
+ heap32[(r1)] = r2;
+ r0 = heap32[(r0+-1)];
+ heap32[(g0)] = r0;
+ free(i7);
+}
+ return;
+}
+else{
+ r0 = _2E_str472;
+ r1 = _2E_str573;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 120;
+ _assert(i7);
+}
+}
+
+function _ZN21btCollisionDispatcherD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV21btCollisionDispatcher;
+ r2 = _ZTV16btManifoldResult;
+ r3 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ r2 = (r2 + 8)|0;
+ heap32[(r3)] = r1;
+ heap32[(r3+7)] = r2;
+ r1 = heap32[(r3+5)];
+if(!(r1 ==0)) //_LBB178_4
+{
+ r2 = heapU8[r0+24];
+if(!(r2 ==0)) //_LBB178_3
+{
+ r2 = gNumAlignedFree;
+ r2 = r2 >> 2;
+ r4 = heap32[(r2)];
+ r4 = (r4 + 1)|0;
+ r1 = r1 >> 2;
+ heap32[(r2)] = r4;
+ r1 = heap32[(r1+-1)];
+ heap32[(g0)] = r1;
+ free(i7);
+}
+ heap32[(r3+5)] = 0;
+}
+ r1 = 1;
+ heap8[r0+24] = r1;
+ heap32[(r3+5)] = 0;
+ r0 = _ZTV12btDispatcher;
+ heap32[(r3+3)] = 0;
+ r0 = (r0 + 8)|0;
+ heap32[(r3+4)] = 0;
+ heap32[(r3)] = r0;
+ return;
+}
+
+function _ZN21btCollisionDispatcherD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV21btCollisionDispatcher;
+ r2 = _ZTV16btManifoldResult;
+ r3 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ r2 = (r2 + 8)|0;
+ heap32[(r3)] = r1;
+ heap32[(r3+7)] = r2;
+ r1 = heap32[(r3+5)];
+if(!(r1 ==0)) //_LBB179_4
+{
+ r2 = heapU8[r0+24];
+if(!(r2 ==0)) //_LBB179_3
+{
+ r2 = gNumAlignedFree;
+ r2 = r2 >> 2;
+ r4 = heap32[(r2)];
+ r4 = (r4 + 1)|0;
+ r1 = r1 >> 2;
+ heap32[(r2)] = r4;
+ r1 = heap32[(r1+-1)];
+ heap32[(g0)] = r1;
+ free(i7);
+}
+ heap32[(r3+5)] = 0;
+}
+ r1 = 1;
+ heap8[r0+24] = r1;
+ heap32[(r3+5)] = 0;
+ r1 = _ZTV12btDispatcher;
+ heap32[(r3+3)] = 0;
+ r1 = (r1 + 8)|0;
+ heap32[(r3+4)] = 0;
+ heap32[(r3)] = r1;
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZN21btCollisionDispatcher14getNewManifoldEPvS0_(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var f0;
+ var f1;
+ var f2;
+var __label__ = 0;
+ i7 = sp + -24;var g0 = i7>>2; // save stack
+ r0 = gNumManifold;
+ r0 = r0 >> 2;
+ r1 = heap32[(r0)];
+ r1 = (r1 + 1)|0;
+ r2 = heap32[(fp)];
+ r3 = heap32[(fp+1)];
+ r4 = heap32[(fp+2)];
+ heap32[(r0)] = r1;
+ r0 = heapU8[r2+4];
+ r0 = r0 & 2;
+ if(r0 !=0) //_LBB180_2
+{
+ r0 = r4 >> 2;
+ r0 = heap32[(r0+48)];
+ r1 = r0 >> 2;
+ r1 = heap32[(r1)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+5)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = 1017370378;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+ f0 = f_g0;
+ r0 = r3 >> 2;
+ heapFloat[(fp+-2)] = f0;
+ r0 = heap32[(r0+48)];
+ r1 = r0 >> 2;
+ r1 = heap32[(r1)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+5)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = 1017370378;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+ r0 = sp + -4;
+ r1 = sp + -8;
+ r0 = f_g0 < f0 ? r0 : r1;
+ heapFloat[(fp+-1)] = f_g0;
+}
+else{
+ r0 = gContactBreakingThreshold;
+}
+ r1 = r2 >> 2;
+ r5 = heap32[(r1+49)];
+ r6 = r3 >> 2;
+ r7 = r4 >> 2;
+ r5 = r5 >> 2;
+ r0 = r0 >> 2;
+ f0 = heapFloat[(r6+46)];
+ f1 = heapFloat[(r7+46)];
+ r6 = heap32[(r5+2)];
+ f2 = heapFloat[(r0)];
+ f0 = f0 < f1 ? f0 : f1;
+_5: do {
+ if(r6 ==0) //_LBB180_9
+{
+ r0 = gNumAlignedAllocs;
+ r0 = r0 >> 2;
+ r5 = heap32[(r0)];
+ r5 = (r5 + 1)|0;
+ heap32[(r0)] = r5;
+ heap32[(g0)] = 1159;
+ malloc(i7);
+ r0 = r_g0;
+ if(r0 !=0) //_LBB180_11
+{
+ r5 = 0;
+ r6 = (r0 + 4)|0;
+ r5 = (r5 - r6)|0;
+ r5 = r5 & 15;
+ r5 = (r0 + r5)|0;
+ r6 = (r5 + 4)|0;
+ r5 = r5 >> 2;
+ heap32[(r5)] = r0;
+ r0 = r6;
+}
+else{
+break _5;
+}
+}
+else{
+ r0 = heap32[(r5)];
+ if(r0 >1139) //_LBB180_6
+{
+ if(r6 >0) //_LBB180_8
+{
+ r0 = heap32[(r5+3)];
+ r7 = r0 >> 2;
+ r7 = heap32[(r7)];
+ r6 = (r6 + -1)|0;
+ heap32[(r5+3)] = r7;
+ heap32[(r5+2)] = r6;
+}
+else{
+ r1 = _2E_str371;
+ r2 = _2E_str169;
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r2;
+ heap32[(g0+2)] = 70;
+ _assert(i7);
+}
+}
+else{
+ r1 = _2E_str270;
+ r2 = _2E_str169;
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r2;
+ heap32[(g0+2)] = 69;
+ _assert(i7);
+}
+}
+} while(0);
+ r5 = r0 >> 2;
+ heap32[(r5)] = 1;
+ heap32[(r5+28)] = 0;
+ r6 = 0;
+ heap32[(r5+29)] = 0;
+ heap8[r0+120] = r6;
+ heap32[(r5+31)] = 0;
+ heap32[(r5+32)] = 0;
+ heap32[(r5+33)] = 0;
+ heap32[(r5+34)] = 0;
+ heap32[(r5+35)] = 0;
+ heap32[(r5+36)] = 0;
+ heap32[(r5+37)] = 0;
+ heap32[(r5+97)] = 0;
+ heap32[(r5+98)] = 0;
+ heap8[r0+396] = r6;
+ heap32[(r5+100)] = 0;
+ heap32[(r5+101)] = 0;
+ heap32[(r5+102)] = 0;
+ heap32[(r5+103)] = 0;
+ heap32[(r5+104)] = 0;
+ heap32[(r5+105)] = 0;
+ heap32[(r5+106)] = 0;
+ heap32[(r5+166)] = 0;
+ heap32[(r5+167)] = 0;
+ heap8[r0+672] = r6;
+ heap32[(r5+169)] = 0;
+ heap32[(r5+170)] = 0;
+ heap32[(r5+171)] = 0;
+ heap32[(r5+172)] = 0;
+ heap32[(r5+173)] = 0;
+ heap32[(r5+174)] = 0;
+ heap32[(r5+175)] = 0;
+ heap32[(r5+235)] = 0;
+ heap32[(r5+236)] = 0;
+ heap8[r0+948] = r6;
+ heap32[(r5+238)] = 0;
+ heap32[(r5+239)] = 0;
+ heap32[(r5+240)] = 0;
+ heap32[(r5+241)] = 0;
+ heap32[(r5+242)] = 0;
+ heap32[(r5+243)] = 0;
+ heap32[(r5+244)] = 0;
+ heap32[(r5+277)] = r3;
+ heap32[(r5+278)] = r4;
+ heap32[(r5+279)] = 0;
+ heapFloat[(r5+280)] = f2;
+ heapFloat[(r5+281)] = f0;
+ r3 = heap32[(r1+3)];
+ heap32[(r5+284)] = r3;
+ r3 = heap32[(r1+4)];
+ r4 = heap32[(r1+3)];
+ if(r3 ==r4) //_LBB180_14
+{
+ r5 = 1;
+ r7 = r4 << 1;
+ r7 = r4 == 0 ? r5 : r7;
+if(!(r3 >=r7)) //_LBB180_13
+{
+ if(r7 !=0) //_LBB180_17
+{
+ r3 = gNumAlignedAllocs;
+ r3 = r3 >> 2;
+ r8 = heap32[(r3)];
+ r9 = r7 << 2;
+ r8 = (r8 + 1)|0;
+ r9 = r9 | 3;
+ heap32[(r3)] = r8;
+ r3 = (r9 + 16)|0;
+ heap32[(g0)] = r3;
+ malloc(i7);
+ r3 = r_g0;
+ if(r3 !=0) //_LBB180_19
+{
+ r8 = (r3 + 4)|0;
+ r8 = (r6 - r8)|0;
+ r8 = r8 & 15;
+ r8 = (r3 + r8)|0;
+ r9 = (r8 + 4)|0;
+ r8 = r8 >> 2;
+ heap32[(r8)] = r3;
+ r3 = r9;
+}
+}
+else{
+ r3 = 0;
+}
+ r8 = (r2 + 20)|0;
+ if(r4 <1) //_LBB180_22
+{
+ r6 = r8 >> 2;
+ r9 = heap32[(r6)];
+}
+else{
+_26: while(true){
+ r9 = r8 >> 2;
+ r9 = heap32[(r9)];
+ r10 = r6 << 2;
+ r11 = (r9 + r10)|0;
+ r11 = r11 >> 2;
+ r10 = (r3 + r10)|0;
+ r11 = heap32[(r11)];
+ r6 = (r6 + 1)|0;
+ r10 = r10 >> 2;
+ heap32[(r10)] = r11;
+if(!(r4 !=r6)) //_LBB180_23
+{
+break _26;
+}
+}
+ r8 = (r2 + 20)|0;
+}
+ if(r9 !=0) //_LBB180_27
+{
+ r6 = heapU8[r2+24];
+ if(r6 !=0) //_LBB180_29
+{
+ r4 = gNumAlignedFree;
+ r4 = r4 >> 2;
+ r6 = heap32[(r4)];
+ r6 = (r6 + 1)|0;
+ r9 = r9 >> 2;
+ heap32[(r4)] = r6;
+ r4 = heap32[(r9+-1)];
+ heap32[(g0)] = r4;
+ free(i7);
+ r4 = heap32[(r1+3)];
+}
+ r6 = r8 >> 2;
+ heap32[(r6)] = 0;
+}
+ r6 = r8 >> 2;
+ heap8[r2+24] = r5;
+ heap32[(r6)] = r3;
+ heap32[(r1+4)] = r7;
+}
+}
+ r2 = r4 << 2;
+ r3 = heap32[(r1+5)];
+ r2 = (r3 + r2)|0;
+ r2 = r2 >> 2;
+ heap32[(r2)] = r0;
+ r2 = heap32[(r1+3)];
+ r2 = (r2 + 1)|0;
+ heap32[(r1+3)] = r2;
+ r_g0 = r0;
+ return;
+}
+
+function _ZN21btCollisionDispatcher13clearManifoldEP20btPersistentManifold(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ r0 = r0 >> 2;
+ r1 = heap32[(r0+279)];
+if(!(r1 <1)) //_LBB181_3
+{
+ r2 = 0;
+_3: while(true){
+ r2 = (r2 + 1)|0;
+ if(r1 >r2) //_LBB181_2
+{
+continue _3;
+}
+else{
+break _3;
+}
+}
+}
+ heap32[(r0+279)] = 0;
+ return;
+}
+
+function _ZN21btCollisionDispatcher14needsCollisionEP17btCollisionObjectS1_(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ if(r0 !=0) //_LBB182_2
+{
+ r1 = heap32[(fp+2)];
+ if(r1 !=0) //_LBB182_4
+{
+ r2 = heap32[(fp)];
+ r2 = r2 >> 2;
+ r3 = heap32[(r2+1)];
+ r4 = r3 & 1;
+if(!(r4 != 0)) //_LBB182_8
+{
+ r4 = heapU8[r0+204];
+ r4 = r4 & 3;
+if(!(r4 ==0)) //_LBB182_8
+{
+ r4 = heapU8[r1+204];
+ r4 = r4 & 3;
+if(!(r4 ==0)) //_LBB182_8
+{
+ r3 = r3 | 1;
+ heap32[(r2+1)] = r3;
+ r2 = _2E_str977;
+ heap32[(g0)] = r2;
+ printf(i7);
+}
+}
+}
+ r2 = r0 >> 2;
+ r3 = heap32[(r2+54)];
+ if(r3 ==2) //_LBB182_10
+{
+__label__ = 10;
+}
+else{
+ if(r3 !=5) //_LBB182_12
+{
+__label__ = 12;
+}
+else{
+__label__ = 10;
+}
+}
+_12: do {
+if (__label__ == 10){
+ r3 = r1 >> 2;
+ r3 = heap32[(r3+54)];
+if(!(r3 ==2)) //_LBB182_16
+{
+if(!(r3 ==5)) //_LBB182_16
+{
+break _12;
+}
+}
+ r0 = 0;
+ r_g0 = r0;
+ return;
+}
+} while(0);
+ r3 = heap32[(r2+63)];
+ if(r3 !=0) //_LBB182_14
+{
+ r2 = heap32[(r2)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ r0 = 0;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ r0 = r_g0 == r0;
+}
+else{
+ r0 = 0;
+}
+ r0 = r0 & 1;
+ r0 = r0 ^ 1;
+ r_g0 = r0;
+ return;
+}
+else{
+ r0 = _2E_str876;
+ r1 = _2E_str573;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 167;
+ _assert(i7);
+}
+}
+else{
+ r0 = _2E_str775;
+ r1 = _2E_str573;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 166;
+ _assert(i7);
+}
+}
+
+function _ZN21btCollisionDispatcher26allocateCollisionAlgorithmEi(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r0 = heap32[(r0+48)];
+ r0 = r0 >> 2;
+ r1 = heap32[(r0+2)];
+ r2 = heap32[(fp+1)];
+ if(r1 ==0) //_LBB183_7
+{
+ r0 = gNumAlignedAllocs;
+ r0 = r0 >> 2;
+ r1 = heap32[(r0)];
+ r1 = (r1 + 1)|0;
+ heap32[(r0)] = r1;
+ r0 = (r2 + 19)|0;
+ heap32[(g0)] = r0;
+ malloc(i7);
+ r0 = r_g0;
+if(!(r0 ==0)) //_LBB183_9
+{
+ r1 = 0;
+ r2 = (r0 + 4)|0;
+ r1 = (r1 - r2)|0;
+ r1 = r1 & 15;
+ r1 = (r0 + r1)|0;
+ r2 = r1 >> 2;
+ heap32[(r2)] = r0;
+ r0 = (r1 + 4)|0;
+}
+ r_g0 = r0;
+ return;
+}
+else{
+if(!(r2 ==0)) //_LBB183_4
+{
+ r3 = heap32[(r0)];
+if(!(r3 >=r2)) //_LBB183_4
+{
+ r0 = _2E_str270;
+ r1 = _2E_str169;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 69;
+ _assert(i7);
+}
+}
+ if(r1 >0) //_LBB183_6
+{
+ r2 = heap32[(r0+3)];
+ r3 = r2 >> 2;
+ r3 = heap32[(r3)];
+ r1 = (r1 + -1)|0;
+ heap32[(r0+3)] = r3;
+ heap32[(r0+2)] = r1;
+ r_g0 = r2;
+ return;
+}
+else{
+ r0 = _2E_str371;
+ r1 = _2E_str169;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 70;
+ _assert(i7);
+}
+}
+}
+
+function _ZN21btCollisionDispatcher19defaultNearCallbackER16btBroadphasePairRS_RK16btDispatcherInfo(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var f0;
+ var f1;
+var __label__ = 0;
+ i7 = sp + -184;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ r1 = heap32[(fp)];
+ r1 = r1 >> 2;
+ r2 = r0 >> 2;
+ r3 = heap32[(r2)];
+ r4 = heap32[(r1)];
+ r5 = heap32[(r1+1)];
+ r3 = r3 >> 2;
+ r4 = r4 >> 2;
+ r5 = r5 >> 2;
+ r4 = heap32[(r4)];
+ r5 = heap32[(r5)];
+ r3 = heap32[(r3+6)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r4;
+ heap32[(g0+2)] = r5;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ r3 = r_g0;
+_1: do {
+if(!(r3 ==0)) //_LBB184_8
+{
+ r3 = heap32[(fp+2)];
+ r6 = heap32[(r1+2)];
+ if(r6 ==0) //_LBB184_3
+{
+ r6 = heap32[(r2)];
+ r6 = r6 >> 2;
+ r6 = heap32[(r6+2)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r4;
+ heap32[(g0+2)] = r5;
+ heap32[(g0+3)] = 0;
+ __FUNCTION_TABLE__[(r6)>>2](i7);
+ r6 = r_g0;
+ heap32[(r1+2)] = r6;
+ if(r6 ==0) //_LBB184_8
+{
+break _1;
+}
+}
+ r0 = _ZTV16btManifoldResult;
+ r1 = sp + -160;
+ r0 = (r0 + 8)|0;
+ r2 = r1 >> 2;
+ heap32[(fp+-40)] = r0;
+ heap32[(r2+1)] = 0;
+ heap32[(r2+34)] = r4;
+ r0 = r4 >> 2;
+ heap32[(r2+35)] = r5;
+ heap32[(r2+2)] = heap32[(r0+1)];
+ heap32[(r2+3)] = heap32[(r0+2)];
+ heap32[(r2+4)] = heap32[(r0+3)];
+ heap32[(r2+5)] = heap32[(r0+4)];
+ heap32[(r2+6)] = heap32[(r0+5)];
+ heap32[(r2+7)] = heap32[(r0+6)];
+ heap32[(r2+8)] = heap32[(r0+7)];
+ heap32[(r2+9)] = heap32[(r0+8)];
+ heap32[(r2+10)] = heap32[(r0+9)];
+ heap32[(r2+11)] = heap32[(r0+10)];
+ heap32[(r2+12)] = heap32[(r0+11)];
+ heap32[(r2+13)] = heap32[(r0+12)];
+ heap32[(r2+14)] = heap32[(r0+13)];
+ heap32[(r2+15)] = heap32[(r0+14)];
+ heap32[(r2+16)] = heap32[(r0+15)];
+ r7 = r5 >> 2;
+ heap32[(r2+17)] = heap32[(r0+16)];
+ heap32[(r2+18)] = heap32[(r7+1)];
+ heap32[(r2+19)] = heap32[(r7+2)];
+ heap32[(r2+20)] = heap32[(r7+3)];
+ heap32[(r2+21)] = heap32[(r7+4)];
+ heap32[(r2+22)] = heap32[(r7+5)];
+ heap32[(r2+23)] = heap32[(r7+6)];
+ heap32[(r2+24)] = heap32[(r7+7)];
+ heap32[(r2+25)] = heap32[(r7+8)];
+ heap32[(r2+26)] = heap32[(r7+9)];
+ heap32[(r2+27)] = heap32[(r7+10)];
+ heap32[(r2+28)] = heap32[(r7+11)];
+ heap32[(r2+29)] = heap32[(r7+12)];
+ heap32[(r2+30)] = heap32[(r7+13)];
+ heap32[(r2+31)] = heap32[(r7+14)];
+ heap32[(r2+32)] = heap32[(r7+15)];
+ r0 = r6 >> 2;
+ heap32[(r2+33)] = heap32[(r7+16)];
+ r0 = heap32[(r0)];
+ r2 = r3 >> 2;
+ r7 = heap32[(r2+2)];
+ if(r7 !=1) //_LBB184_6
+{
+ r0 = r0 >> 2;
+ r0 = heap32[(r0+3)];
+ heap32[(g0)] = r6;
+ heap32[(g0+1)] = r4;
+ heap32[(g0+2)] = r5;
+ heap32[(g0+3)] = r3;
+ heap32[(g0+4)] = r1;
+ __FUNCTION_TABLE__[(r0)>>2](i7);
+ f0 = f_g0;
+ f1 = heapFloat[(r2+3)];
+if(!(f1 <=f0)) //_LBB184_8
+{
+ heapFloat[(r2+3)] = f0;
+}
+}
+else{
+ r0 = r0 >> 2;
+ r0 = heap32[(r0+2)];
+ heap32[(g0)] = r6;
+ heap32[(g0+1)] = r4;
+ heap32[(g0+2)] = r5;
+ heap32[(g0+3)] = r3;
+ heap32[(g0+4)] = r1;
+ __FUNCTION_TABLE__[(r0)>>2](i7);
+ return;
+}
+}
+} while(0);
+ return;
+}
+
+function _ZN17btCollisionObject24checkCollideWithOverrideEPS_(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = 1;
+ r_g0 = r0;
+ return;
+}
+
+function _ZN17btCollisionObject17setCollisionShapeEP16btCollisionShape(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r1 = heap32[(fp+1)];
+ heap32[(r0+48)] = r1;
+ heap32[(r0+50)] = r1;
+ return;
+}
+
+function _ZNK17btCollisionObject28calculateSerializeBufferSizeEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = 248;
+ r_g0 = r0;
+ return;
+}
+
+function _ZN17btCollisionObjectD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV17btCollisionObject;
+ r0 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r0)] = r1;
+ return;
+}
+
+function _ZN17btCollisionObjectD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV17btCollisionObject;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+if(!(r0 ==0)) //_LBB189_2
+{
+ r0 = gNumAlignedFree;
+ r0 = r0 >> 2;
+ r1 = heap32[(r0)];
+ r1 = (r1 + 1)|0;
+ heap32[(r0)] = r1;
+ r0 = heap32[(r2+-1)];
+ heap32[(g0)] = r0;
+ free(i7);
+}
+ return;
+}
+
+function _ZNK17btCollisionObject9serializeEPvP12btSerializer(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = heap32[(fp+1)];
+ r2 = r0 >> 2;
+ r1 = r1 >> 2;
+ heap32[(r1+4)] = heap32[(r2+1)];
+ heap32[(r1+5)] = heap32[(r2+2)];
+ heap32[(r1+6)] = heap32[(r2+3)];
+ heap32[(r1+7)] = heap32[(r2+4)];
+ heap32[(r1+8)] = heap32[(r2+5)];
+ heap32[(r1+9)] = heap32[(r2+6)];
+ heap32[(r1+10)] = heap32[(r2+7)];
+ heap32[(r1+11)] = heap32[(r2+8)];
+ heap32[(r1+12)] = heap32[(r2+9)];
+ heap32[(r1+13)] = heap32[(r2+10)];
+ heap32[(r1+14)] = heap32[(r2+11)];
+ heap32[(r1+15)] = heap32[(r2+12)];
+ heap32[(r1+16)] = heap32[(r2+13)];
+ heap32[(r1+17)] = heap32[(r2+14)];
+ heap32[(r1+18)] = heap32[(r2+15)];
+ heap32[(r1+19)] = heap32[(r2+16)];
+ heap32[(r1+20)] = heap32[(r2+17)];
+ heap32[(r1+21)] = heap32[(r2+18)];
+ heap32[(r1+22)] = heap32[(r2+19)];
+ heap32[(r1+23)] = heap32[(r2+20)];
+ heap32[(r1+24)] = heap32[(r2+21)];
+ heap32[(r1+25)] = heap32[(r2+22)];
+ heap32[(r1+26)] = heap32[(r2+23)];
+ heap32[(r1+27)] = heap32[(r2+24)];
+ heap32[(r1+28)] = heap32[(r2+25)];
+ heap32[(r1+29)] = heap32[(r2+26)];
+ heap32[(r1+30)] = heap32[(r2+27)];
+ heap32[(r1+31)] = heap32[(r2+28)];
+ heap32[(r1+32)] = heap32[(r2+29)];
+ heap32[(r1+33)] = heap32[(r2+30)];
+ heap32[(r1+34)] = heap32[(r2+31)];
+ heap32[(r1+35)] = heap32[(r2+32)];
+ heap32[(r1+36)] = heap32[(r2+33)];
+ heap32[(r1+37)] = heap32[(r2+34)];
+ heap32[(r1+38)] = heap32[(r2+35)];
+ heap32[(r1+39)] = heap32[(r2+36)];
+ heap32[(r1+40)] = heap32[(r2+37)];
+ heap32[(r1+41)] = heap32[(r2+38)];
+ heap32[(r1+42)] = heap32[(r2+39)];
+ heap32[(r1+43)] = heap32[(r2+40)];
+ heap32[(r1+44)] = heap32[(r2+41)];
+ heap32[(r1+45)] = heap32[(r2+42)];
+ heap32[(r1+46)] = heap32[(r2+43)];
+ heap32[(r1+47)] = heap32[(r2+44)];
+ r3 = heap32[(r2+45)];
+ heap32[(r1+55)] = r3;
+ r3 = heap32[(fp+2)];
+ heap32[(r1+48)] = heap32[(r2+46)];
+ heap32[(r1)] = 0;
+ r4 = r3 >> 2;
+ r5 = heap32[(r4)];
+ r5 = r5 >> 2;
+ r5 = heap32[(r5+7)];
+ r6 = heap32[(r2+48)];
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r6;
+ __FUNCTION_TABLE__[(r5)>>2](i7);
+ heap32[(r1+1)] = r_g0;
+ heap32[(r1+2)] = 0;
+ r5 = heap32[(r2+51)];
+ heap32[(r1+56)] = r5;
+ r5 = heap32[(r2+52)];
+ heap32[(r1+57)] = r5;
+ r5 = heap32[(r2+53)];
+ heap32[(r1+58)] = r5;
+ r5 = heap32[(r2+54)];
+ heap32[(r1+59)] = r5;
+ r5 = heap32[(r2+54)];
+ heap32[(r1+59)] = r5;
+ heap32[(r1+49)] = heap32[(r2+55)];
+ heap32[(r1+50)] = heap32[(r2+56)];
+ heap32[(r1+51)] = heap32[(r2+57)];
+ r5 = heap32[(r2+58)];
+ heap32[(r1+60)] = r5;
+ r5 = heap32[(r4)];
+ r5 = r5 >> 2;
+ r5 = heap32[(r5+10)];
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r0;
+ __FUNCTION_TABLE__[(r5)>>2](i7);
+ r0 = r_g0;
+ r5 = heap32[(r4)];
+ r5 = r5 >> 2;
+ r5 = heap32[(r5+7)];
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r0;
+ __FUNCTION_TABLE__[(r5)>>2](i7);
+ r5 = r_g0;
+ heap32[(r1+3)] = r5;
+if(!(r5 ==0)) //_LBB190_2
+{
+ r4 = heap32[(r4)];
+ r4 = r4 >> 2;
+ r4 = heap32[(r4+12)];
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r0;
+ __FUNCTION_TABLE__[(r4)>>2](i7);
+}
+ heap32[(r1+52)] = heap32[(r2+60)];
+ heap32[(r1+53)] = heap32[(r2+61)];
+ heap32[(r1+54)] = heap32[(r2+62)];
+ heap32[(r1+54)] = heap32[(r2+62)];
+ r0 = heap32[(r2+63)];
+ heap32[(r1+61)] = r0;
+ r0 = _2E_str78;
+ r_g0 = r0;
+ return;
+}
+
+function _ZNK17btCollisionObject21serializeSingleObjectEP12btSerializer(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+var __label__ = 0;
+ i7 = sp + -24;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ r2 = heap32[(r1)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+4)];
+ heap32[(g0)] = r0;
+ r3 = heap32[(fp+1)];
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ r4 = r3 >> 2;
+ r5 = heap32[(r4)];
+ r5 = r5 >> 2;
+ r5 = heap32[(r5+4)];
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r_g0;
+ heap32[(g0+2)] = 1;
+ __FUNCTION_TABLE__[(r5)>>2](i7);
+ r2 = r_g0;
+ r1 = heap32[(r1)];
+ r1 = r1 >> 2;
+ r5 = r2 >> 2;
+ r1 = heap32[(r1+5)];
+ r5 = heap32[(r5+2)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r5;
+ heap32[(g0+2)] = r3;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+ r4 = heap32[(r4)];
+ r4 = r4 >> 2;
+ r4 = heap32[(r4+5)];
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r2;
+ heap32[(g0+2)] = r_g0;
+ heap32[(g0+3)] = 1245859651;
+ heap32[(g0+4)] = r0;
+ __FUNCTION_TABLE__[(r4)>>2](i7);
+ return;
+}
+
+function _ZN16btManifoldResult20setShapeIdentifiersAEii(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r1 = heap32[(fp+1)];
+ r2 = heap32[(fp+2)];
+ heap32[(r0+36)] = r1;
+ heap32[(r0+38)] = r2;
+ return;
+}
+
+function _ZN16btManifoldResult20setShapeIdentifiersBEii(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r1 = heap32[(fp+1)];
+ r2 = heap32[(fp+2)];
+ heap32[(r0+37)] = r1;
+ heap32[(r0+39)] = r2;
+ return;
+}
+
+function _ZN16btCollisionWorld14setDebugDrawerEP12btIDebugDraw(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r1 = heap32[(fp+1)];
+ heap32[(r0+21)] = r1;
+ return;
+}
+
+function _ZN16btCollisionWorld14getDebugDrawerEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r0 = heap32[(r0+21)];
+ r_g0 = r0;
+ return;
+}
+
+function _ZNK16btCollisionWorld20ConvexResultCallback14needsCollisionEP17btBroadphaseProxy(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = heap32[(fp+1)];
+ r2 = heapU16[(r0+10)>>1];
+ r3 = heapU16[(r1+4)>>1];
+ r2 = r2 & r3;
+ r2 = r2 & 65535;
+ if(r2 ==0) //_LBB196_2
+{
+ r0 = 0;
+ r_g0 = r0;
+ return;
+}
+else{
+ r1 = heapU16[(r1+6)>>1];
+ r0 = heapU16[(r0+8)>>1];
+ r0 = r1 & r0;
+ r0 = r0 & 65535;
+ r1 = 0;
+ r0 = r0 != r1;
+ r0 = r0 & 1;
+ r_g0 = r0;
+ return;
+}
+}
+
+function _ZN12btConvexCast10CastResult9DebugDrawEf(sp)
+{
+ var i7;
+ var fp = sp>>2;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ return;
+}
+
+function _ZN12btConvexCast10CastResult15drawCoordSystemERK11btTransform(sp)
+{
+ var i7;
+ var fp = sp>>2;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ return;
+}
+
+function _ZN12btConvexCast10CastResultD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTVN12btConvexCast10CastResultE;
+ r0 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r0)] = r1;
+ return;
+}
+
+function _ZN12btConvexCast10CastResultD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTVN12btConvexCast10CastResultE;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZZN16btCollisionWorld13rayTestSingleERK11btTransformS2_P17btCollisionObjectPK16btCollisionShapeS2_RNS_17RayResultCallbackEEN29BridgeTriangleRaycastCallback9reportHitERK9btVector3fii(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+ var f10;
+ var f11;
+var __label__ = 0;
+ i7 = sp + -56;var g0 = i7>>2; // save stack
+ r0 = sp + -8;
+ r1 = heap32[(fp+3)];
+ r2 = heap32[(fp+1)];
+ r3 = heap32[(fp)];
+ r4 = r0 >> 2;
+ r5 = heap32[(fp+4)];
+ heap32[(fp+-2)] = r1;
+ r1 = r2 >> 2;
+ heap32[(r4+1)] = r5;
+ r2 = r3 >> 2;
+ r3 = heap32[(r2+12)];
+ f0 = heapFloat[(r2+22)];
+ f1 = heapFloat[(r1)];
+ f2 = heapFloat[(r2+18)];
+ f3 = heapFloat[(r2+14)];
+ f4 = heapFloat[(r2+23)];
+ f5 = heapFloat[(r1+1)];
+ f6 = heapFloat[(r2+19)];
+ f7 = heapFloat[(r2+15)];
+ f8 = heapFloat[(r2+24)];
+ f9 = heapFloat[(r1+2)];
+ f10 = heapFloat[(r2+20)];
+ f11 = heapFloat[(r2+16)];
+ r1 = sp + -40;
+ f3 = f3*f1;
+ f7 = f7*f5;
+ r4 = r1 >> 2;
+ heap32[(fp+-10)] = r3;
+ f2 = f2*f1;
+ f6 = f6*f5;
+ f3 = f3+f7;
+ f7 = f11*f9;
+ f0 = f0*f1;
+ f1 = f4*f5;
+ f2 = f2+f6;
+ f4 = f10*f9;
+ f3 = f3+f7;
+ heap32[(r4+1)] = r0;
+ f0 = f0+f1;
+ f1 = f8*f9;
+ f2 = f2+f4;
+ heapFloat[(r4+2)] = f3;
+ f0 = f0+f1;
+ heapFloat[(r4+3)] = f2;
+ heapFloat[(r4+4)] = f0;
+ heap32[(r4+5)] = 0;
+ heap32[(r4+6)] = heap32[(fp+2)];
+ r0 = heap32[(r2+11)];
+ r2 = r0 >> 2;
+ r2 = heap32[(r2)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+3)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 1;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ return;
+}
+
+function _ZZN16btCollisionWorld13rayTestSingleERK11btTransformS2_P17btCollisionObjectPK16btCollisionShapeS2_RNS_17RayResultCallbackEEN29BridgeTriangleRaycastCallback9reportHitE_0RK9btVector3fii(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+ var f10;
+ var f11;
+var __label__ = 0;
+ i7 = sp + -56;var g0 = i7>>2; // save stack
+ r0 = sp + -8;
+ r1 = heap32[(fp+3)];
+ r2 = heap32[(fp+1)];
+ r3 = heap32[(fp)];
+ r4 = r0 >> 2;
+ r5 = heap32[(fp+4)];
+ heap32[(fp+-2)] = r1;
+ r1 = r2 >> 2;
+ heap32[(r4+1)] = r5;
+ r2 = r3 >> 2;
+ r3 = heap32[(r2+12)];
+ f0 = heapFloat[(r2+22)];
+ f1 = heapFloat[(r1)];
+ f2 = heapFloat[(r2+18)];
+ f3 = heapFloat[(r2+14)];
+ f4 = heapFloat[(r2+23)];
+ f5 = heapFloat[(r1+1)];
+ f6 = heapFloat[(r2+19)];
+ f7 = heapFloat[(r2+15)];
+ f8 = heapFloat[(r2+24)];
+ f9 = heapFloat[(r1+2)];
+ f10 = heapFloat[(r2+20)];
+ f11 = heapFloat[(r2+16)];
+ r1 = sp + -40;
+ f3 = f3*f1;
+ f7 = f7*f5;
+ r4 = r1 >> 2;
+ heap32[(fp+-10)] = r3;
+ f2 = f2*f1;
+ f6 = f6*f5;
+ f3 = f3+f7;
+ f7 = f11*f9;
+ f0 = f0*f1;
+ f1 = f4*f5;
+ f2 = f2+f6;
+ f4 = f10*f9;
+ f3 = f3+f7;
+ heap32[(r4+1)] = r0;
+ f0 = f0+f1;
+ f1 = f8*f9;
+ f2 = f2+f4;
+ heapFloat[(r4+2)] = f3;
+ f0 = f0+f1;
+ heapFloat[(r4+3)] = f2;
+ heapFloat[(r4+4)] = f0;
+ heap32[(r4+5)] = 0;
+ heap32[(r4+6)] = heap32[(fp+2)];
+ r0 = heap32[(r2+11)];
+ r2 = r0 >> 2;
+ r2 = heap32[(r2)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+3)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 1;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ return;
+}
+
+function _ZZN16btCollisionWorld13rayTestSingleERK11btTransformS2_P17btCollisionObjectPK16btCollisionShapeS2_RNS_17RayResultCallbackEEN15LocalInfoAdder2D1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTVZN16btCollisionWorld13rayTestSingleERK11btTransformS2_P17btCollisionObjectPK16btCollisionShapeS2_RNS_17RayResultCallbackEE15LocalInfoAdder2;
+ r0 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r0)] = r1;
+ return;
+}
+
+function _ZZN16btCollisionWorld13rayTestSingleERK11btTransformS2_P17btCollisionObjectPK16btCollisionShapeS2_RNS_17RayResultCallbackEEN15LocalInfoAdder2D0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTVZN16btCollisionWorld13rayTestSingleERK11btTransformS2_P17btCollisionObjectPK16btCollisionShapeS2_RNS_17RayResultCallbackEE15LocalInfoAdder2;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZZN16btCollisionWorld13rayTestSingleERK11btTransformS2_P17btCollisionObjectPK16btCollisionShapeS2_RNS_17RayResultCallbackEEN15LocalInfoAdder215addSingleResultERNS_14LocalRayResultEb(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+var __label__ = 0;
+ i7 = sp + -24;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = sp + -8;
+ r0 = r0 >> 2;
+ heap32[(fp+-2)] = -1;
+ r2 = heap32[(fp+1)];
+ r3 = r1 >> 2;
+ r4 = heap32[(r0+6)];
+ r5 = r2 >> 2;
+ heap32[(r3+1)] = r4;
+ r3 = heap32[(r5+1)];
+if(!(r3 !=0)) //_LBB205_2
+{
+ heap32[(r5+1)] = r1;
+}
+ r1 = heap32[(fp+2)];
+ r3 = heap32[(r0+5)];
+ r4 = r3 >> 2;
+ r4 = heap32[(r4)];
+ r4 = r4 >> 2;
+ r4 = heap32[(r4+3)];
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r2;
+ heap32[(g0+2)] = r1;
+ __FUNCTION_TABLE__[(r4)>>2](i7);
+ r1 = heap32[(r0+5)];
+ r1 = r1 >> 2;
+ heap32[(r0+1)] = heap32[(r1+1)];
+ return;
+}
+
+function _ZZN16btCollisionWorld17objectQuerySingleEPK13btConvexShapeRK11btTransformS5_P17btCollisionObjectPK16btCollisionShapeS5_RNS_20ConvexResultCallbackEfEN32BridgeTriangleConvexcastCallback9reportHitERK9btVector3SG_fii(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var f0;
+ var f1;
+var __label__ = 0;
+ i7 = sp + -72;var g0 = i7>>2; // save stack
+ r0 = sp + -8;
+ r1 = heap32[(fp+4)];
+ r2 = heap32[(fp)];
+ r3 = r0 >> 2;
+ r4 = heap32[(fp+5)];
+ heap32[(fp+-2)] = r1;
+ r1 = r2 >> 2;
+ heap32[(r3+1)] = r4;
+ r2 = heap32[(r1+52)];
+ f0 = heapFloat[(fp+3)];
+ r3 = r2 >> 2;
+ f1 = heapFloat[(r3+1)];
+ if(f1 <f0) //_LBB206_2
+{
+ f_g0 = f0;
+ return;
+}
+else{
+ r4 = heap32[(fp+1)];
+ r5 = heap32[(fp+2)];
+ r1 = heap32[(r1+53)];
+ r6 = sp + -56;
+ r7 = r6 >> 2;
+ heap32[(fp+-14)] = r1;
+ r1 = r4 >> 2;
+ heap32[(r7+1)] = r0;
+ heap32[(r7+2)] = heap32[(r1)];
+ heap32[(r7+3)] = heap32[(r1+1)];
+ heap32[(r7+4)] = heap32[(r1+2)];
+ r0 = r5 >> 2;
+ heap32[(r7+5)] = heap32[(r1+3)];
+ heap32[(r7+6)] = heap32[(r0)];
+ heap32[(r7+7)] = heap32[(r0+1)];
+ heap32[(r7+8)] = heap32[(r0+2)];
+ heap32[(r7+9)] = heap32[(r0+3)];
+ heapFloat[(r7+10)] = f0;
+ r0 = heap32[(r3)];
+ r0 = r0 >> 2;
+ r0 = heap32[(r0+3)];
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = r6;
+ heap32[(g0+2)] = 1;
+ __FUNCTION_TABLE__[(r0)>>2](i7);
+ return;
+}
+}
+
+function _ZZN16btCollisionWorld17objectQuerySingleEPK13btConvexShapeRK11btTransformS5_P17btCollisionObjectPK16btCollisionShapeS5_RNS_20ConvexResultCallbackEfEN32BridgeTriangleConvexcastCallback9reportHitE_0RK9btVector3SG_fii(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var f0;
+ var f1;
+var __label__ = 0;
+ i7 = sp + -72;var g0 = i7>>2; // save stack
+ r0 = sp + -8;
+ r1 = heap32[(fp+4)];
+ r2 = heap32[(fp)];
+ r3 = r0 >> 2;
+ r4 = heap32[(fp+5)];
+ heap32[(fp+-2)] = r1;
+ r1 = r2 >> 2;
+ heap32[(r3+1)] = r4;
+ r2 = heap32[(r1+52)];
+ f0 = heapFloat[(fp+3)];
+ r3 = r2 >> 2;
+ f1 = heapFloat[(r3+1)];
+ if(f1 <f0) //_LBB207_2
+{
+ f_g0 = f0;
+ return;
+}
+else{
+ r4 = heap32[(fp+1)];
+ r5 = heap32[(fp+2)];
+ r1 = heap32[(r1+53)];
+ r6 = sp + -56;
+ r7 = r6 >> 2;
+ heap32[(fp+-14)] = r1;
+ r1 = r4 >> 2;
+ heap32[(r7+1)] = r0;
+ heap32[(r7+2)] = heap32[(r1)];
+ heap32[(r7+3)] = heap32[(r1+1)];
+ heap32[(r7+4)] = heap32[(r1+2)];
+ r0 = r5 >> 2;
+ heap32[(r7+5)] = heap32[(r1+3)];
+ heap32[(r7+6)] = heap32[(r0)];
+ heap32[(r7+7)] = heap32[(r0+1)];
+ heap32[(r7+8)] = heap32[(r0+2)];
+ heap32[(r7+9)] = heap32[(r0+3)];
+ heapFloat[(r7+10)] = f0;
+ r0 = heap32[(r3)];
+ r0 = r0 >> 2;
+ r0 = heap32[(r0+3)];
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = r6;
+ heap32[(g0+2)] = 0;
+ __FUNCTION_TABLE__[(r0)>>2](i7);
+ return;
+}
+}
+
+function _ZZN16btCollisionWorld17objectQuerySingleEPK13btConvexShapeRK11btTransformS5_P17btCollisionObjectPK16btCollisionShapeS5_RNS_20ConvexResultCallbackEfEN14LocalInfoAdderD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTVZN16btCollisionWorld17objectQuerySingleEPK13btConvexShapeRK11btTransformS5_P17btCollisionObjectPK16btCollisionShapeS5_RNS_20ConvexResultCallbackEfE14LocalInfoAdder;
+ r0 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r0)] = r1;
+ return;
+}
+
+function _ZZN16btCollisionWorld17objectQuerySingleEPK13btConvexShapeRK11btTransformS5_P17btCollisionObjectPK16btCollisionShapeS5_RNS_20ConvexResultCallbackEfEN14LocalInfoAdderD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTVZN16btCollisionWorld17objectQuerySingleEPK13btConvexShapeRK11btTransformS5_P17btCollisionObjectPK16btCollisionShapeS5_RNS_20ConvexResultCallbackEfE14LocalInfoAdder;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZZN16btCollisionWorld17objectQuerySingleEPK13btConvexShapeRK11btTransformS5_P17btCollisionObjectPK16btCollisionShapeS5_RNS_20ConvexResultCallbackEfEN14LocalInfoAdder15addSingleResultERNS_17LocalConvexResultEb(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+var __label__ = 0;
+ i7 = sp + -24;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = sp + -8;
+ r0 = r0 >> 2;
+ heap32[(fp+-2)] = -1;
+ r2 = heap32[(fp+1)];
+ r3 = r1 >> 2;
+ r4 = heap32[(r0+4)];
+ r5 = r2 >> 2;
+ heap32[(r3+1)] = r4;
+ r3 = heap32[(r5+1)];
+if(!(r3 !=0)) //_LBB210_2
+{
+ heap32[(r5+1)] = r1;
+}
+ r1 = heap32[(fp+2)];
+ r3 = heap32[(r0+3)];
+ r4 = r3 >> 2;
+ r4 = heap32[(r4)];
+ r4 = r4 >> 2;
+ r4 = heap32[(r4+3)];
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r2;
+ heap32[(g0+2)] = r1;
+ __FUNCTION_TABLE__[(r4)>>2](i7);
+ r1 = heap32[(r0+3)];
+ r1 = r1 >> 2;
+ heap32[(r0+1)] = heap32[(r1+1)];
+ return;
+}
+
+function _ZN17DebugDrawcallbackD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = _ZTV17DebugDrawcallback;
+ r1 = heap32[(fp)];
+ r1 = r1 >> 2;
+ r2 = (r0 + 8)|0;
+ r3 = _ZTV31btInternalTriangleIndexCallback;
+ r0 = (r0 + 32)|0;
+ heap32[(r1)] = r2;
+ r2 = _ZTV18btTriangleCallback;
+ r3 = (r3 + 8)|0;
+ heap32[(r1+1)] = r0;
+ r0 = (r2 + 8)|0;
+ heap32[(r1+1)] = r3;
+ heap32[(r1)] = r0;
+ return;
+}
+
+function _ZN17DebugDrawcallbackD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = _ZTV17DebugDrawcallback;
+ r1 = heap32[(fp)];
+ r2 = r1 >> 2;
+ r3 = (r0 + 8)|0;
+ r4 = _ZTV31btInternalTriangleIndexCallback;
+ r0 = (r0 + 32)|0;
+ heap32[(r2)] = r3;
+ r3 = _ZTV18btTriangleCallback;
+ r4 = (r4 + 8)|0;
+ heap32[(r2+1)] = r0;
+ r0 = (r3 + 8)|0;
+ heap32[(r2+1)] = r4;
+ heap32[(r2)] = r0;
+ heap32[(g0)] = r1;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZN17DebugDrawcallback15processTriangleEP9btVector3ii(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+ var f10;
+ var f11;
+ var f12;
+ var f13;
+ var f14;
+ var f15;
+ var f16;
+ var f17;
+ var f18;
+ var f19;
+ var f20;
+ var f21;
+var __label__ = 0;
+ i7 = sp + -112;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = heap32[(fp+1)];
+ r2 = r0 >> 2;
+ r1 = r1 >> 2;
+ f0 = heapFloat[(r1)];
+ f1 = heapFloat[(r2+7)];
+ f2 = heapFloat[(r1+1)];
+ f3 = heapFloat[(r2+8)];
+ f4 = heapFloat[(r2+11)];
+ f5 = heapFloat[(r2+12)];
+ f6 = f1*f0;
+ f7 = f3*f2;
+ f8 = heapFloat[(r1+2)];
+ f9 = heapFloat[(r2+9)];
+ f10 = heapFloat[(r2+15)];
+ f11 = heapFloat[(r2+16)];
+ f12 = heapFloat[(r2+13)];
+ f13 = f4*f0;
+ f14 = f5*f2;
+ f6 = f6+f7;
+ f7 = f9*f8;
+ f15 = heapFloat[(r2+17)];
+ f0 = f10*f0;
+ f2 = f11*f2;
+ f13 = f13+f14;
+ f14 = f12*f8;
+ f6 = f6+f7;
+ f7 = heapFloat[(r2+19)];
+ f16 = heapFloat[(r2+21)];
+ f17 = heapFloat[(r2+20)];
+ r3 = sp + -32;
+ f13 = f13+f14;
+ f0 = f0+f2;
+ f2 = f15*f8;
+ f6 = f6+f7;
+ f0 = f0+f2;
+ r4 = r3 >> 2;
+ f2 = f13+f17;
+ heapFloat[(fp+-8)] = f6;
+ f0 = f0+f16;
+ heapFloat[(r4+1)] = f2;
+ heapFloat[(r4+2)] = f0;
+ heap32[(r4+3)] = 0;
+ f8 = heapFloat[(r1+4)];
+ f13 = heapFloat[(r1+5)];
+ f14 = heapFloat[(r1+6)];
+ f18 = f1*f8;
+ f19 = f3*f13;
+ f20 = f4*f8;
+ f21 = f5*f13;
+ f18 = f18+f19;
+ f19 = f9*f14;
+ f18 = f18+f19;
+ f8 = f10*f8;
+ f13 = f11*f13;
+ f19 = f20+f21;
+ f20 = f12*f14;
+ f18 = f18+f7;
+ r4 = sp + -48;
+ f19 = f19+f20;
+ f8 = f8+f13;
+ f13 = f15*f14;
+ f14 = f19+f17;
+ f8 = f8+f13;
+ r5 = r4 >> 2;
+ heapFloat[(fp+-12)] = f18;
+ f8 = f8+f16;
+ heapFloat[(r5+1)] = f14;
+ heapFloat[(r5+2)] = f8;
+ heap32[(r5+3)] = 0;
+ f13 = heapFloat[(r1+8)];
+ f19 = heapFloat[(r1+9)];
+ f20 = heapFloat[(r1+10)];
+ f1 = f1*f13;
+ f3 = f3*f19;
+ f4 = f4*f13;
+ f5 = f5*f19;
+ f1 = f1+f3;
+ f3 = f9*f20;
+ f1 = f1+f3;
+ f3 = f10*f13;
+ f9 = f11*f19;
+ f4 = f4+f5;
+ f5 = f12*f20;
+ r1 = sp + -64;
+ f4 = f4+f5;
+ f1 = f1+f7;
+ f3 = f3+f9;
+ f5 = f15*f20;
+ f3 = f3+f5;
+ f4 = f4+f17;
+ r5 = r1 >> 2;
+ heapFloat[(fp+-16)] = f1;
+ f5 = f6+f18;
+ f3 = f3+f16;
+ heapFloat[(r5+1)] = f4;
+ f7 = f2+f14;
+ heapFloat[(r5+2)] = f3;
+ f5 = f5+f1;
+ f9 = 0.3333333432674408;
+ r6 = sp + -80;
+ f10 = f0+f8;
+ f7 = f7+f4;
+ f8 = f8-f0;
+ f4 = f4-f2;
+ f11 = f18-f6;
+ f0 = f3-f0;
+ f2 = f14-f2;
+ f1 = f1-f6;
+ f5 = f5*f9;
+ heap32[(r5+3)] = 0;
+ f3 = f10+f3;
+ f6 = f2*f0;
+ f10 = f8*f4;
+ f8 = f8*f1;
+ f0 = f11*f0;
+ r5 = r6 >> 2;
+ f7 = f7*f9;
+ heapFloat[(fp+-20)] = f5;
+ f5 = f6-f10;
+ f0 = f8-f0;
+ f4 = f11*f4;
+ f1 = f2*f1;
+ f2 = f3*f9;
+ heapFloat[(r5+1)] = f7;
+ f1 = f4-f1;
+ heapFloat[(r5+2)] = f2;
+ f2 = f5*f5;
+ f3 = f0*f0;
+ heap32[(r5+3)] = 0;
+ f2 = f2+f3;
+ f3 = f1*f1;
+ f2 = f2+f3;
+ heapFloat[(g0)] = f2;
+ r7 = sp + -96;
+ sqrtf(i7);
+ r8 = r7 >> 2;
+ heap32[(fp+-24)] = 1065353216;
+ heap32[(r8+1)] = 1065353216;
+ heap32[(r8+2)] = 0;
+ heap32[(r8+3)] = 0;
+ r8 = heap32[(r2+2)];
+ r9 = r8 >> 2;
+ f3 = 1;
+ r9 = heap32[(r9)];
+ f2 = f3/f_g0;
+ r9 = r9 >> 2;
+ r9 = heap32[(r9+2)];
+ f3 = f5*f2;
+ f4 = heapFloat[(fp+-20)];
+ f5 = heapFloat[(r5+2)];
+ f6 = heapFloat[(r5+1)];
+ r5 = sp + -16;
+ f0 = f0*f2;
+ f3 = f4+f3;
+ f1 = f1*f2;
+ r10 = r5 >> 2;
+ f0 = f6+f0;
+ heapFloat[(fp+-4)] = f3;
+ f1 = f5+f1;
+ heapFloat[(r10+1)] = f0;
+ heapFloat[(r10+2)] = f1;
+ heap32[(r10+3)] = 0;
+ heap32[(g0)] = r8;
+ heap32[(g0+1)] = r6;
+ heap32[(g0+2)] = r5;
+ heap32[(g0+3)] = r7;
+ __FUNCTION_TABLE__[(r9)>>2](i7);
+ r5 = heap32[(r2+2)];
+ r6 = r5 >> 2;
+ r6 = heap32[(r6)];
+ r6 = r6 >> 2;
+ r6 = heap32[(r6+2)];
+ r0 = (r0 + 12)|0;
+ heap32[(g0)] = r5;
+ heap32[(g0+1)] = r3;
+ heap32[(g0+2)] = r4;
+ heap32[(g0+3)] = r0;
+ __FUNCTION_TABLE__[(r6)>>2](i7);
+ r5 = heap32[(r2+2)];
+ r6 = r5 >> 2;
+ r6 = heap32[(r6)];
+ r6 = r6 >> 2;
+ r6 = heap32[(r6+2)];
+ heap32[(g0)] = r5;
+ heap32[(g0+1)] = r4;
+ heap32[(g0+2)] = r1;
+ heap32[(g0+3)] = r0;
+ __FUNCTION_TABLE__[(r6)>>2](i7);
+ r2 = heap32[(r2+2)];
+ r4 = r2 >> 2;
+ r4 = heap32[(r4)];
+ r4 = r4 >> 2;
+ r4 = heap32[(r4+2)];
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = r3;
+ heap32[(g0+3)] = r0;
+ __FUNCTION_TABLE__[(r4)>>2](i7);
+ return;
+}
+
+function _ZN17DebugDrawcallback28internalProcessTriangleIndexEP9btVector3ii(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ r1 = heap32[(r1)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+2)];
+ r2 = heap32[(fp+1)];
+ r3 = heap32[(fp+2)];
+ r4 = heap32[(fp+3)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r2;
+ heap32[(g0+2)] = r3;
+ heap32[(g0+3)] = r4;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+ return;
+}
+
+function _ZThn4_N17DebugDrawcallbackD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = _ZTV17DebugDrawcallback;
+ r1 = heap32[(fp)];
+ r1 = r1 >> 2;
+ r2 = (r0 + 8)|0;
+ r3 = _ZTV31btInternalTriangleIndexCallback;
+ r0 = (r0 + 32)|0;
+ heap32[(r1+-1)] = r2;
+ r2 = _ZTV18btTriangleCallback;
+ r3 = (r3 + 8)|0;
+ heap32[(r1)] = r0;
+ r0 = (r2 + 8)|0;
+ heap32[(r1)] = r3;
+ heap32[(r1+-1)] = r0;
+ return;
+}
+
+function _ZThn4_N17DebugDrawcallbackD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV17DebugDrawcallback;
+ r2 = r0 >> 2;
+ r3 = (r1 + 8)|0;
+ r4 = _ZTV31btInternalTriangleIndexCallback;
+ r1 = (r1 + 32)|0;
+ heap32[(r2+-1)] = r3;
+ r3 = _ZTV18btTriangleCallback;
+ r4 = (r4 + 8)|0;
+ heap32[(r2)] = r1;
+ r1 = (r3 + 8)|0;
+ heap32[(r2)] = r4;
+ heap32[(r2+-1)] = r1;
+ r0 = (r0 + -4)|0;
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZThn4_N17DebugDrawcallback28internalProcessTriangleIndexEP9btVector3ii(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ r1 = heap32[(r1+-1)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+2)];
+ r0 = (r0 + -4)|0;
+ r2 = heap32[(fp+1)];
+ r3 = heap32[(fp+2)];
+ r4 = heap32[(fp+3)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r2;
+ heap32[(g0+2)] = r3;
+ heap32[(g0+3)] = r4;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+ return;
+}
+
+function _ZN16btCollisionWorldD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ heap32[(g0)] = r0;
+ _ZN16btCollisionWorldD2Ev(i7);
+ return;
+}
+
+function _ZN16btCollisionWorldD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV16btCollisionWorld;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ r1 = heap32[(r2+4)];
+ r3 = heap32[(r2+2)];
+ if(r3 >0) //_LBB219_2
+{
+ r3 = 0;
+_3: while(true){
+ r4 = r3 << 2;
+ r1 = (r1 + r4)|0;
+ r1 = r1 >> 2;
+ r1 = heap32[(r1)];
+ r1 = r1 >> 2;
+ r4 = heap32[(r1+47)];
+if(!(r4 ==0)) //_LBB219_5
+{
+ r5 = heap32[(r2+20)];
+ r6 = r5 >> 2;
+ r6 = heap32[(r6)];
+ r6 = r6 >> 2;
+ r6 = heap32[(r6+9)];
+ heap32[(g0)] = r5;
+ __FUNCTION_TABLE__[(r6)>>2](i7);
+ r6 = r_g0 >> 2;
+ r6 = heap32[(r6)];
+ r6 = r6 >> 2;
+ r6 = heap32[(r6+10)];
+ r7 = heap32[(r2+6)];
+ heap32[(g0)] = r_g0;
+ heap32[(g0+1)] = r4;
+ heap32[(g0+2)] = r7;
+ __FUNCTION_TABLE__[(r6)>>2](i7);
+ r5 = heap32[(r2+20)];
+ r6 = r5 >> 2;
+ r6 = heap32[(r6)];
+ r6 = r6 >> 2;
+ r6 = heap32[(r6+3)];
+ r7 = heap32[(r2+6)];
+ heap32[(g0)] = r5;
+ heap32[(g0+1)] = r4;
+ heap32[(g0+2)] = r7;
+ __FUNCTION_TABLE__[(r6)>>2](i7);
+ heap32[(r1+47)] = 0;
+}
+ r3 = (r3 + 1)|0;
+ r1 = heap32[(r2+4)];
+ r4 = heap32[(r2+2)];
+ if(r4 >r3) //_LBB219_3
+{
+continue _3;
+}
+else{
+break _3;
+}
+}
+}
+if(!(r1 ==0)) //_LBB219_10
+{
+ r3 = heapU8[r0+20];
+if(!(r3 ==0)) //_LBB219_9
+{
+ r3 = gNumAlignedFree;
+ r3 = r3 >> 2;
+ r4 = heap32[(r3)];
+ r4 = (r4 + 1)|0;
+ r1 = r1 >> 2;
+ heap32[(r3)] = r4;
+ r1 = heap32[(r1+-1)];
+ heap32[(g0)] = r1;
+ free(i7);
+}
+ heap32[(r2+4)] = 0;
+}
+ r1 = 1;
+ heap8[r0+20] = r1;
+ heap32[(r2+4)] = 0;
+ heap32[(r2+2)] = 0;
+ heap32[(r2+3)] = 0;
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZN16btCollisionWorld11updateAabbsEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+var __label__ = 0;
+ i7 = sp + -64;var g0 = i7>>2; // save stack
+ r0 = _2E_str1998;
+ r1 = heap32[(fp)];
+ heap32[(g0)] = r0;
+ r0 = r1 >> 2;
+ _ZN15CProfileManager13Start_ProfileEPKc(i7);
+ r2 = heap32[(r0+2)];
+if(!(r2 <1)) //_LBB220_14
+{
+ r2 = 0;
+_3: while(true){
+ r3 = heap32[(r0+4)];
+ r4 = r2 << 2;
+ r3 = (r3 + r4)|0;
+ r3 = r3 >> 2;
+ r2 = (r2 + 1)|0;
+ r3 = heap32[(r3)];
+ r4 = heapU8[r1+88];
+ if(r4 !=0) //_LBB220_5
+{
+__label__ = 5;
+}
+else{
+ r4 = r3 >> 2;
+ r4 = heap32[(r4+54)];
+ if(r4 ==2) //_LBB220_13
+{
+__label__ = 13;
+}
+else{
+ if(r4 ==5) //_LBB220_13
+{
+__label__ = 13;
+}
+else{
+__label__ = 5;
+}
+}
+}
+_8: do {
+if (__label__ == 5){
+ r4 = r3 >> 2;
+ r5 = heap32[(r4+48)];
+ r6 = r5 >> 2;
+ r6 = heap32[(r6)];
+ r6 = r6 >> 2;
+ r6 = heap32[(r6+2)];
+ r7 = sp + -40;
+ r8 = sp + -24;
+ r9 = (r3 + 4)|0;
+ heap32[(g0)] = r5;
+ heap32[(g0+1)] = r9;
+ heap32[(g0+2)] = r8;
+ heap32[(g0+3)] = r7;
+ __FUNCTION_TABLE__[(r6)>>2](i7);
+ f0 = -0.019999999552965164;
+ f1 = heapFloat[(fp+-6)];
+ f1 = f1+f0;
+ r5 = r8 >> 2;
+ heapFloat[(fp+-6)] = f1;
+ f2 = heapFloat[(r5+1)];
+ f2 = f2+f0;
+ heapFloat[(r5+1)] = f2;
+ f3 = heapFloat[(r5+2)];
+ f0 = f3+f0;
+ heapFloat[(r5+2)] = f0;
+ f3 = 0.019999999552965164;
+ f4 = heapFloat[(fp+-10)];
+ f4 = f4+f3;
+ r5 = r7 >> 2;
+ heapFloat[(fp+-10)] = f4;
+ f5 = heapFloat[(r5+1)];
+ f5 = f5+f3;
+ heapFloat[(r5+1)] = f5;
+ f6 = heapFloat[(r5+2)];
+ f3 = f6+f3;
+ heapFloat[(r5+2)] = f3;
+ r5 = heap32[(r0+20)];
+ r3 = heapU8[r3+204];
+ r3 = r3 & 1;
+if(!(r3 != 0)) //_LBB220_10
+{
+ f1 = f4-f1;
+ f2 = f5-f2;
+ f0 = f3-f0;
+ f1 = f1*f1;
+ f2 = f2*f2;
+ f1 = f1+f2;
+ f0 = f0*f0;
+ f0 = f1+f0;
+ f1 = 999999995904;
+if(!(f0 <f1)) //_LBB220_10
+{
+ r5 = heap32[(r4+54)];
+ r5 = (r5 + -4)|0;
+if(!(uint(r5) <uint(2))) //_LBB220_9
+{
+ heap32[(r4+54)] = 5;
+}
+ r4 = _ZZN16btCollisionWorld16updateSingleAabbEP17btCollisionObjectE8reportMe_2E_b;
+ r5 = heapU8[r4];
+ if(r5 != 0) //_LBB220_13
+{
+break _8;
+}
+else{
+ r3 = heap32[(r0+21)];
+ if(r3 ==0) //_LBB220_13
+{
+break _8;
+}
+else{
+ r5 = 1;
+ r6 = r3 >> 2;
+ heap8[r4] = r5;
+ r4 = heap32[(r6)];
+ r4 = r4 >> 2;
+ r4 = heap32[(r4+9)];
+ r5 = _2E_str1594;
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r5;
+ __FUNCTION_TABLE__[(r4)>>2](i7);
+ r3 = heap32[(r0+21)];
+ r4 = r3 >> 2;
+ r4 = heap32[(r4)];
+ r4 = r4 >> 2;
+ r4 = heap32[(r4+9)];
+ r5 = _2E_str1695;
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r5;
+ __FUNCTION_TABLE__[(r4)>>2](i7);
+ r3 = heap32[(r0+21)];
+ r4 = r3 >> 2;
+ r4 = heap32[(r4)];
+ r4 = r4 >> 2;
+ r4 = heap32[(r4+9)];
+ r5 = _2E_str1796;
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r5;
+ __FUNCTION_TABLE__[(r4)>>2](i7);
+ r3 = heap32[(r0+21)];
+ r4 = r3 >> 2;
+ r4 = heap32[(r4)];
+ r4 = r4 >> 2;
+ r4 = heap32[(r4+9)];
+ r5 = _2E_str1897;
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r5;
+ __FUNCTION_TABLE__[(r4)>>2](i7);
+break _8;
+}
+}
+}
+}
+ r3 = r5 >> 2;
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3+4)];
+ r6 = heap32[(r0+6)];
+ r4 = heap32[(r4+47)];
+ heap32[(g0)] = r5;
+ heap32[(g0+1)] = r4;
+ heap32[(g0+2)] = r8;
+ heap32[(g0+3)] = r7;
+ heap32[(g0+4)] = r6;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+}
+} while(0);
+ r3 = heap32[(r0+2)];
+ if(r3 >r2) //_LBB220_2
+{
+continue _3;
+}
+else{
+break _3;
+}
+}
+}
+ r0 = _ZN15CProfileManager11CurrentNodeE;
+ r0 = r0 >> 2;
+ r1 = heap32[(r0)];
+ r2 = r1 >> 2;
+ r3 = heap32[(r2+4)];
+ r3 = (r3 + -1)|0;
+ heap32[(r2+4)] = r3;
+_21: do {
+if(!(r3 !=0)) //_LBB220_20
+{
+ r3 = heap32[(r2+1)];
+ if(r3 !=0) //_LBB220_17
+{
+ r1 = sp + -8;
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = 0;
+ r3 = _ZL13gProfileClock_2E_0;
+ gettimeofday(i7);
+ r3 = r3 >> 2;
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r1 = r1 >> 2;
+ r4 = heap32[(fp+-2)];
+ r5 = heap32[(r3)];
+ r4 = (r4 - r5)|0;
+ r1 = heap32[(r1+1)];
+ r3 = heap32[(r3+1)];
+ r1 = (r1 - r3)|0;
+ r3 = (r4 * 1000000)|0;
+ r1 = (r1 + r3)|0;
+ r3 = heap32[(r2+3)];
+ r1 = (r1 - r3)|0;
+ f0 = uint(r1); //fuitos r1, f0
+ f1 = 1000;
+ f2 = heapFloat[(r2+2)];
+ f0 = f0/f1;
+ f0 = f2+f0;
+ heapFloat[(r2+2)] = f0;
+ r1 = heap32[(r2+4)];
+ if(r1 !=0) //_LBB220_20
+{
+break _21;
+}
+else{
+ r1 = heap32[(r0)];
+}
+}
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+5)];
+ heap32[(r0)] = r1;
+}
+} while(0);
+ return;
+}
+
+function _ZN16btCollisionWorld14debugDrawWorldEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+ var r13;
+ var r14;
+ var r15;
+ var f0;
+var __label__ = 0;
+ i7 = sp + -104;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ r2 = heap32[(r1)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+4)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ r2 = r_g0;
+_1: do {
+if(!(r2 ==0)) //_LBB221_10
+{
+ r2 = heap32[(r1)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+4)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ r3 = r_g0 >> 2;
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3+12)];
+ heap32[(g0)] = r_g0;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ r2 = r_g0 & 8;
+if(!(r2 ==0)) //_LBB221_10
+{
+ r2 = heap32[(r1+6)];
+ r3 = r2 >> 2;
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3+9)];
+ heap32[(g0)] = r2;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ r2 = r_g0;
+ r3 = sp + -16;
+ r4 = r3 >> 2;
+ heap32[(fp+-4)] = 0;
+ heap32[(r4+1)] = 0;
+ r5 = 0;
+ heap32[(r4+2)] = 0;
+ heap32[(r4+3)] = 0;
+_4: while(true){
+ if(r5 <r2) //_LBB221_3
+{
+ r4 = heap32[(r1+6)];
+ r6 = r4 >> 2;
+ r6 = heap32[(r6)];
+ r6 = r6 >> 2;
+ r6 = heap32[(r6+10)];
+ heap32[(g0)] = r4;
+ heap32[(g0+1)] = r5;
+ __FUNCTION_TABLE__[(r6)>>2](i7);
+ r4 = r_g0;
+ r6 = r4 >> 2;
+ r6 = heap32[(r6+279)];
+ r7 = 36;
+ r8 = 68;
+ r9 = 0;
+_7: while(true){
+ if(r9 <r6) //_LBB221_4
+{
+ r10 = r4 >> 2;
+ r10 = heap32[(r10+279)];
+ if(r10 >r9) //_LBB221_6
+{
+ r10 = (r9 * 69)|0;
+ r11 = (r4 + r7)|0;
+ r12 = (r4 + r8)|0;
+ r13 = heap32[(r1)];
+ r13 = r13 >> 2;
+ r13 = heap32[(r13+4)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r13)>>2](i7);
+ r14 = r_g0 >> 2;
+ r15 = r10 << 2;
+ r10 = r10 << 2;
+ r14 = heap32[(r14)];
+ r15 = (r4 + r15)|0;
+ r10 = (r4 + r10)|0;
+ r14 = r14 >> 2;
+ r15 = r15 >> 2;
+ r10 = r10 >> 2;
+ r14 = heap32[(r14+8)];
+ r15 = heap32[(r15+37)];
+ f0 = heapFloat[(r10+21)];
+ heap32[(g0)] = r_g0;
+ heap32[(g0+1)] = r11;
+ heap32[(g0+2)] = r12;
+ heapFloat[(g0+3)] = f0;
+ heap32[(g0+4)] = r15;
+ heap32[(g0+5)] = r3;
+ r9 = (r9 + 1)|0;
+ r8 = (r8 + 276)|0;
+ r7 = (r7 + 276)|0;
+ __FUNCTION_TABLE__[(r14)>>2](i7);
+}
+else{
+break _4;
+}
+}
+else{
+break _7;
+}
+}
+ r5 = (r5 + 1)|0;
+}
+else{
+break _1;
+}
+}
+ r0 = _2E_str382;
+ r1 = _2E_str483;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 122;
+ _assert(i7);
+}
+}
+} while(0);
+ r2 = heap32[(r1)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+4)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ r2 = r_g0;
+_14: do {
+if(!(r2 ==0)) //_LBB221_13
+{
+ r2 = heap32[(r1)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+4)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ r3 = r_g0 >> 2;
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3+12)];
+ heap32[(g0)] = r_g0;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ r2 = r_g0 & 3;
+if(!(r2 ==0)) //_LBB221_13
+{
+ r2 = heap32[(r1+2)];
+ if(r2 >0) //_LBB221_14
+{
+ r2 = 0;
+_18: while(true){
+ r3 = heap32[(r1+4)];
+ r4 = r2 << 2;
+ r3 = (r3 + r4)|0;
+ r3 = r3 >> 2;
+ r3 = heap32[(r3)];
+ r4 = heapU8[r3+204];
+ r4 = r4 & 32;
+if(!(r4 !=0)) //_LBB221_34
+{
+ r4 = heap32[(r1)];
+ r4 = r4 >> 2;
+ r4 = heap32[(r4+4)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r4)>>2](i7);
+ r4 = r_g0;
+if(!(r4 ==0)) //_LBB221_31
+{
+ r4 = heap32[(r1)];
+ r4 = r4 >> 2;
+ r4 = heap32[(r4+4)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r4)>>2](i7);
+ r5 = r_g0 >> 2;
+ r5 = heap32[(r5)];
+ r5 = r5 >> 2;
+ r5 = heap32[(r5+12)];
+ heap32[(g0)] = r_g0;
+ __FUNCTION_TABLE__[(r5)>>2](i7);
+ r4 = r_g0 & 1;
+if(!(r4 ==0)) //_LBB221_31
+{
+ r4 = sp + -32;
+ r5 = r4 >> 2;
+ heap32[(fp+-8)] = 1065353216;
+ heap32[(r5+1)] = 1065353216;
+ heap32[(r5+2)] = 1065353216;
+ r6 = r3 >> 2;
+ heap32[(r5+3)] = 0;
+ r7 = heap32[(r6+54)];
+_25: do {
+ if(r7 >2) //_LBB221_21
+{
+ if(r7 ==3) //_LBB221_26
+{
+ heap32[(fp+-8)] = 0;
+ heap32[(r5+1)] = 1065353216;
+ heap32[(r5+2)] = 1065353216;
+ heap32[(r5+3)] = 0;
+__label__ = 30;
+break _25;
+}
+else{
+ if(r7 ==4) //_LBB221_27
+{
+ heap32[(fp+-8)] = 1065353216;
+ heap32[(r5+1)] = 0;
+ heap32[(r5+2)] = 0;
+ heap32[(r5+3)] = 0;
+__label__ = 30;
+break _25;
+}
+else{
+ if(r7 ==5) //_LBB221_28
+{
+ heap32[(fp+-8)] = 1065353216;
+ heap32[(r5+1)] = 1065353216;
+ heap32[(r5+2)] = 0;
+ heap32[(r5+3)] = 0;
+__label__ = 30;
+break _25;
+}
+else{
+__label__ = 29;
+break _25;
+}
+}
+}
+}
+else{
+ if(r7 ==1) //_LBB221_24
+{
+ heap32[(fp+-8)] = 1065353216;
+ heap32[(r5+1)] = 1065353216;
+ heap32[(r5+2)] = 1065353216;
+ heap32[(r5+3)] = 0;
+__label__ = 30;
+}
+else{
+ if(r7 ==2) //_LBB221_25
+{
+ heap32[(fp+-8)] = 0;
+ heap32[(r5+1)] = 1065353216;
+ heap32[(r5+2)] = 0;
+ heap32[(r5+3)] = 0;
+__label__ = 30;
+}
+else{
+__label__ = 29;
+}
+}
+}
+} while(0);
+if (__label__ == 29){
+ heap32[(fp+-8)] = 1065353216;
+ heap32[(r5+1)] = 0;
+ heap32[(r5+2)] = 0;
+ heap32[(r5+3)] = 0;
+}
+ r5 = heap32[(r1)];
+ r5 = r5 >> 2;
+ r5 = heap32[(r5+6)];
+ r6 = heap32[(r6+48)];
+ r7 = (r3 + 4)|0;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r7;
+ heap32[(g0+2)] = r6;
+ heap32[(g0+3)] = r4;
+ __FUNCTION_TABLE__[(r5)>>2](i7);
+}
+}
+ r4 = heap32[(r1+21)];
+if(!(r4 ==0)) //_LBB221_34
+{
+ r5 = r4 >> 2;
+ r5 = heap32[(r5)];
+ r5 = r5 >> 2;
+ r5 = heap32[(r5+12)];
+ heap32[(g0)] = r4;
+ __FUNCTION_TABLE__[(r5)>>2](i7);
+ r4 = r_g0 & 2;
+if(!(r4 ==0)) //_LBB221_34
+{
+ r4 = sp + -80;
+ r5 = r4 >> 2;
+ heap32[(fp+-20)] = 1065353216;
+ heap32[(r5+1)] = 0;
+ heap32[(r5+2)] = 0;
+ r6 = r3 >> 2;
+ heap32[(r5+3)] = 0;
+ r5 = heap32[(r6+48)];
+ r6 = r5 >> 2;
+ r6 = heap32[(r6)];
+ r6 = r6 >> 2;
+ r6 = heap32[(r6+2)];
+ r3 = (r3 + 4)|0;
+ r7 = sp + -48;
+ r8 = sp + -64;
+ heap32[(g0)] = r5;
+ heap32[(g0+1)] = r3;
+ heap32[(g0+2)] = r7;
+ heap32[(g0+3)] = r8;
+ __FUNCTION_TABLE__[(r6)>>2](i7);
+ r3 = heap32[(r1+21)];
+ r5 = r3 >> 2;
+ r5 = heap32[(r5)];
+ r5 = r5 >> 2;
+ r5 = heap32[(r5+13)];
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r7;
+ heap32[(g0+2)] = r8;
+ heap32[(g0+3)] = r4;
+ __FUNCTION_TABLE__[(r5)>>2](i7);
+}
+}
+}
+ r2 = (r2 + 1)|0;
+ r3 = heap32[(r1+2)];
+ if(r3 >r2) //_LBB221_15
+{
+continue _18;
+}
+else{
+break _14;
+}
+}
+}
+}
+}
+} while(0);
+ return;
+}
+
+function _ZN16btCollisionWorld15debugDrawObjectERK11btTransformPK16btCollisionShapeRK9btVector3(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+ var r13;
+ var r14;
+ var r15;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+ var f10;
+ var f11;
+ var f12;
+ var f13;
+ var f14;
+ var f15;
+ var f16;
+ var f17;
+ var f18;
+ var f19;
+ var f20;
+ var f21;
+ var f22;
+ var f23;
+ var f24;
+ var f25;
+ var f26;
+ var f27;
+ var f28;
+ var f29;
+var __label__ = 0;
+ i7 = sp + -1376;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ r2 = heap32[(r1)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+4)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ r3 = r_g0 >> 2;
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3+14)];
+ r4 = heap32[(fp+1)];
+ heap32[(g0)] = r_g0;
+ heap32[(g0+1)] = r4;
+ heap32[(g0+2)] = 1065353216;
+ r2 = heap32[(fp+2)];
+ r5 = r2 >> 2;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ r3 = heap32[(r5+1)];
+ r6 = heap32[(fp+3)];
+_1: do {
+ if(r3 >10) //_LBB222_6
+{
+ if(r3 >27) //_LBB222_9
+{
+ if(r3 ==28) //_LBB222_23
+{
+ f0 = heapFloat[(r5+14)];
+ f1 = heapFloat[(r5+13)];
+ f2 = heapFloat[(r5+16)];
+ f3 = heapFloat[(r5+12)];
+ f4 = f0*f2;
+ f5 = f1*f2;
+ f2 = f3*f2;
+ f6 = 0;
+ if(f0 <f6) //_LBB222_25
+{
+ f7 = -f0;
+}
+else{
+ f7 = f0;
+}
+ f8 = 0.70710676908493042;
+ if(f7 <=f8) //_LBB222_28
+{
+ f0 = f3*f3;
+ f1 = f1*f1;
+ f0 = f0+f1;
+ heapFloat[(g0)] = f0;
+ sqrtf(i7);
+ f3 = 1;
+ f7 = heapFloat[(r5+13)];
+ f9 = heapFloat[(r5+14)];
+ f10 = f3/f_g0;
+ f1 = heapFloat[(r5+12)];
+ f3 = -f7;
+ f8 = f1*f10;
+ f1 = -f9;
+ f11 = f10*f3;
+ f12 = 100;
+ f1 = f8*f1;
+ f3 = f9*f11;
+ f7 = f0*f10;
+ f0 = f11*f12;
+}
+else{
+ f1 = f1*f1;
+ f3 = f0*f0;
+ f1 = f1+f3;
+ heapFloat[(g0)] = f1;
+ sqrtf(i7);
+ f6 = heapFloat[(r5+14)];
+ f0 = 1;
+ f7 = heapFloat[(r5+12)];
+ f3 = f0/f_g0;
+ f6 = -f6;
+ f0 = heapFloat[(r5+13)];
+ f8 = f3*f6;
+ f6 = -f7;
+ f0 = f0*f3;
+ f9 = 100;
+ f1 = f1*f3;
+ f3 = f0*f6;
+ f7 = f7*f8;
+ f6 = f0*f9;
+ f0 = 0;
+}
+ r2 = heap32[(r1)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+4)];
+ heap32[(g0)] = r0;
+ f9 = 100;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ r3 = r4 >> 2;
+ f8 = f8*f9;
+ r4 = r_g0 >> 2;
+ f10 = f2-f0;
+ f11 = heapFloat[(r3)];
+ f12 = f5-f8;
+ f13 = heapFloat[(r3+1)];
+ r4 = heap32[(r4)];
+ f14 = heapFloat[(r3+4)];
+ f15 = heapFloat[(r3+5)];
+ f16 = f11*f10;
+ f17 = f13*f12;
+ f18 = f4-f6;
+ f19 = heapFloat[(r3+2)];
+ r4 = r4 >> 2;
+ f20 = heapFloat[(r3+8)];
+ f21 = heapFloat[(r3+9)];
+ f22 = heapFloat[(r3+6)];
+ f23 = f14*f10;
+ f24 = f15*f12;
+ f16 = f16+f17;
+ f17 = f19*f18;
+ f25 = heapFloat[(r3+10)];
+ r4 = heap32[(r4+2)];
+ f10 = f20*f10;
+ f12 = f21*f12;
+ f23 = f23+f24;
+ f24 = f22*f18;
+ f16 = f16+f17;
+ f17 = heapFloat[(r3+12)];
+ f26 = heapFloat[(r3+14)];
+ f27 = heapFloat[(r3+13)];
+ f0 = f2+f0;
+ f8 = f5+f8;
+ r5 = sp + -64;
+ f23 = f23+f24;
+ f10 = f10+f12;
+ f12 = f25*f18;
+ f16 = f16+f17;
+ f6 = f4+f6;
+ f10 = f10+f12;
+ f11 = f11*f0;
+ f12 = f13*f8;
+ r7 = r5 >> 2;
+ f13 = f23+f27;
+ heapFloat[(fp+-16)] = f16;
+ f14 = f14*f0;
+ f15 = f15*f8;
+ f11 = f11+f12;
+ f12 = f19*f6;
+ f10 = f10+f26;
+ heapFloat[(r7+1)] = f13;
+ f11 = f11+f12;
+ heapFloat[(r7+2)] = f10;
+ f0 = f20*f0;
+ f8 = f21*f8;
+ f10 = f14+f15;
+ f12 = f22*f6;
+ r8 = sp + -48;
+ f10 = f10+f12;
+ f0 = f0+f8;
+ f6 = f25*f6;
+ f8 = f11+f17;
+ heap32[(r7+3)] = 0;
+ f0 = f0+f6;
+ r7 = r8 >> 2;
+ f6 = f10+f27;
+ heapFloat[(fp+-12)] = f8;
+ f0 = f0+f26;
+ heapFloat[(r7+1)] = f6;
+ heapFloat[(r7+2)] = f0;
+ heap32[(r7+3)] = 0;
+ heap32[(g0)] = r_g0;
+ heap32[(g0+1)] = r8;
+ heap32[(g0+2)] = r5;
+ heap32[(g0+3)] = r6;
+ __FUNCTION_TABLE__[(r4)>>2](i7);
+ r1 = heap32[(r1)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+4)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+ f0 = f1*f9;
+ f1 = f3*f9;
+ f3 = f7*f9;
+ r1 = r_g0 >> 2;
+ f6 = f2-f0;
+ f7 = heapFloat[(r3)];
+ f8 = f5-f1;
+ f9 = heapFloat[(r3+1)];
+ r1 = heap32[(r1)];
+ f10 = heapFloat[(r3+4)];
+ f11 = heapFloat[(r3+5)];
+ f12 = f7*f6;
+ f13 = f9*f8;
+ f14 = f4-f3;
+ f15 = heapFloat[(r3+2)];
+ r1 = r1 >> 2;
+ f16 = heapFloat[(r3+8)];
+ f17 = heapFloat[(r3+9)];
+ f18 = heapFloat[(r3+6)];
+ f19 = f10*f6;
+ f20 = f11*f8;
+ f12 = f12+f13;
+ f13 = f15*f14;
+ f21 = heapFloat[(r3+10)];
+ r1 = heap32[(r1+2)];
+ f6 = f16*f6;
+ f8 = f17*f8;
+ f19 = f19+f20;
+ f20 = f18*f14;
+ f12 = f12+f13;
+ f13 = heapFloat[(r3+12)];
+ f22 = heapFloat[(r3+14)];
+ f23 = heapFloat[(r3+13)];
+ f0 = f2+f0;
+ f1 = f5+f1;
+ r2 = sp + -32;
+ f2 = f19+f20;
+ f5 = f6+f8;
+ f6 = f21*f14;
+ f8 = f12+f13;
+ f3 = f4+f3;
+ f4 = f5+f6;
+ f5 = f7*f0;
+ f6 = f9*f1;
+ r3 = r2 >> 2;
+ f2 = f2+f23;
+ heapFloat[(fp+-8)] = f8;
+ f7 = f10*f0;
+ f8 = f11*f1;
+ f5 = f5+f6;
+ f6 = f15*f3;
+ f4 = f4+f22;
+ heapFloat[(r3+1)] = f2;
+ f2 = f5+f6;
+ heapFloat[(r3+2)] = f4;
+ f0 = f16*f0;
+ f1 = f17*f1;
+ f4 = f7+f8;
+ f5 = f18*f3;
+ r4 = sp + -16;
+ f4 = f4+f5;
+ f0 = f0+f1;
+ f1 = f21*f3;
+ f2 = f2+f13;
+ heap32[(r3+3)] = 0;
+ f0 = f0+f1;
+ r3 = r4 >> 2;
+ f1 = f4+f23;
+ heapFloat[(fp+-4)] = f2;
+ f0 = f0+f22;
+ heapFloat[(r3+1)] = f1;
+ heapFloat[(r3+2)] = f0;
+ heap32[(r3+3)] = 0;
+ heap32[(g0)] = r_g0;
+ heap32[(g0+1)] = r4;
+__label__ = 30;
+break _1;
+}
+else{
+ if(r3 !=31) //_LBB222_32
+{
+__label__ = 32;
+break _1;
+}
+else{
+ r2 = heap32[(r5+4)];
+ r3 = (r2 + -1)|0;
+ if(r3 <0) //_LBB222_42
+{
+__label__ = 40;
+break _1;
+}
+else{
+ r3 = 1;
+ r2 = (r3 - r2)|0;
+_18: while(true){
+ r3 = r2;
+ r2 = (r3 * -20)|0;
+ r7 = heap32[(r5+6)];
+ r2 = r2 << 2;
+ r2 = (r7 + r2)|0;
+ r2 = r2 >> 2;
+ r7 = r4 >> 2;
+ r8 = heap32[(r1)];
+ f0 = heapFloat[(r2)];
+ f1 = heapFloat[(r7)];
+ f2 = heapFloat[(r2+4)];
+ f3 = heapFloat[(r7+1)];
+ r8 = r8 >> 2;
+ f4 = heapFloat[(r2+1)];
+ f5 = heapFloat[(r2+5)];
+ f6 = f0*f1;
+ f7 = f2*f3;
+ f8 = heapFloat[(r2+8)];
+ f9 = heapFloat[(r7+2)];
+ f10 = heapFloat[(r7+8)];
+ f11 = heapFloat[(r2+2)];
+ f12 = heapFloat[(r7+4)];
+ f13 = heapFloat[(r2+12)];
+ f14 = heapFloat[(r7+9)];
+ f15 = heapFloat[(r2+6)];
+ f16 = heapFloat[(r7+5)];
+ f17 = heapFloat[(r2+13)];
+ f18 = heapFloat[(r2+9)];
+ f19 = heapFloat[(r7+10)];
+ f20 = heapFloat[(r2+10)];
+ f21 = heapFloat[(r7+6)];
+ f22 = heapFloat[(r2+14)];
+ r8 = heap32[(r8+6)];
+ f23 = f4*f1;
+ f24 = f5*f3;
+ f6 = f6+f7;
+ f7 = f8*f9;
+ r2 = heap32[(r2+16)];
+ f25 = heapFloat[(r7+14)];
+ f26 = heapFloat[(r7+13)];
+ f27 = heapFloat[(r7+12)];
+ r7 = sp + -688;
+ f28 = f11*f1;
+ f29 = f15*f3;
+ f23 = f23+f24;
+ f24 = f18*f9;
+ f6 = f6+f7;
+ r9 = r7 >> 2;
+ f7 = f28+f29;
+ f28 = f20*f9;
+ f23 = f23+f24;
+ heapFloat[(fp+-172)] = f6;
+ f6 = f0*f12;
+ f24 = f2*f16;
+ f7 = f7+f28;
+ heapFloat[(r9+1)] = f23;
+ heapFloat[(r9+2)] = f7;
+ f7 = f4*f12;
+ f23 = f5*f16;
+ f6 = f6+f24;
+ f24 = f8*f21;
+ f28 = f11*f12;
+ f29 = f15*f16;
+ f7 = f7+f23;
+ f23 = f18*f21;
+ f6 = f6+f24;
+ heap32[(r9+3)] = 0;
+ f24 = f28+f29;
+ f28 = f20*f21;
+ f7 = f7+f23;
+ heapFloat[(r9+4)] = f6;
+ f0 = f0*f10;
+ f2 = f2*f14;
+ f6 = f24+f28;
+ heapFloat[(r9+5)] = f7;
+ heapFloat[(r9+6)] = f6;
+ f4 = f4*f10;
+ f5 = f5*f14;
+ f0 = f0+f2;
+ f2 = f8*f19;
+ f6 = f11*f10;
+ f7 = f15*f14;
+ f4 = f4+f5;
+ f5 = f18*f19;
+ f0 = f0+f2;
+ heap32[(r9+7)] = 0;
+ f1 = f1*f13;
+ f2 = f3*f17;
+ f3 = f6+f7;
+ f6 = f20*f19;
+ f4 = f4+f5;
+ heapFloat[(r9+8)] = f0;
+ f0 = f12*f13;
+ f5 = f16*f17;
+ f1 = f1+f2;
+ f2 = f9*f22;
+ f3 = f3+f6;
+ heapFloat[(r9+9)] = f4;
+ f1 = f1+f2;
+ heapFloat[(r9+10)] = f3;
+ f2 = f10*f13;
+ f3 = f14*f17;
+ f0 = f0+f5;
+ f4 = f21*f22;
+ f0 = f0+f4;
+ f2 = f2+f3;
+ f3 = f19*f22;
+ f1 = f1+f27;
+ heap32[(r9+11)] = 0;
+ f2 = f2+f3;
+ f0 = f0+f26;
+ heapFloat[(r9+12)] = f1;
+ f1 = f2+f25;
+ heapFloat[(r9+13)] = f0;
+ heapFloat[(r9+14)] = f1;
+ heap32[(r9+15)] = 0;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r7;
+ heap32[(g0+2)] = r2;
+ heap32[(g0+3)] = r6;
+ r2 = (r3 + 1)|0;
+ __FUNCTION_TABLE__[(r8)>>2](i7);
+ if(r3 ==0) //_LBB222_42
+{
+__label__ = 40;
+break _1;
+}
+else{
+continue _18;
+}
+}
+}
+}
+}
+}
+else{
+ if(r3 ==11) //_LBB222_20
+{
+ r2 = r4 >> 2;
+ r3 = heap32[(r5+17)];
+ f0 = heapFloat[(r5+14)];
+ f1 = heapFloat[(r5+15)];
+ f2 = heapFloat[(r2+12)];
+ f3 = heapFloat[(r2+13)];
+ f4 = heapFloat[(r2+14)];
+ r4 = sp + -880;
+ r5 = r4 >> 2;
+ heap32[(fp+-220)] = 0;
+ heap32[(r5+1)] = 0;
+ r7 = r3 << 2;
+ r4 = (r4 + r7)|0;
+ f5 = 0.5;
+ heap32[(r5+2)] = 0;
+ r4 = r4 >> 2;
+ f1 = f1*f5;
+ heap32[(r5+3)] = 0;
+ r8 = sp + -896;
+ heapFloat[(r4)] = f1;
+ r4 = (r3 + 1)|0;
+ r4 = (r4 % 3)|0;
+ r9 = r8 >> 2;
+ heap32[(fp+-224)] = 0;
+ heap32[(r9+1)] = 0;
+ r4 = r4 << 2;
+ r8 = (r8 + r4)|0;
+ heap32[(r9+2)] = 0;
+ r8 = r8 >> 2;
+ heap32[(r9+3)] = 0;
+ r3 = (r3 + 2)|0;
+ r10 = sp + -912;
+ heapFloat[(r8)] = f0;
+ r3 = (r3 % 3)|0;
+ r8 = r10 >> 2;
+ heap32[(fp+-228)] = 0;
+ r3 = r3 << 2;
+ heap32[(r8+1)] = 0;
+ r3 = (r10 + r3)|0;
+ heap32[(r8+2)] = 0;
+ r3 = r3 >> 2;
+ heap32[(r8+3)] = 0;
+ heapFloat[(r3)] = f0;
+ r3 = heap32[(r1)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3+4)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ f1 = heapFloat[(r5+1)];
+ f5 = heapFloat[(fp+-220)];
+ f6 = heapFloat[(r9+1)];
+ f7 = heapFloat[(fp+-224)];
+ r10 = r_g0 >> 2;
+ f8 = heapFloat[(r5+2)];
+ f9 = heapFloat[(r9+2)];
+ f10 = heapFloat[(r2)];
+ f11 = f7-f5;
+ f12 = heapFloat[(r2+1)];
+ f13 = f6-f1;
+ f14 = heapFloat[(r2+4)];
+ f15 = heapFloat[(r2+5)];
+ r5 = heap32[(r10)];
+ f16 = heapFloat[(r2+2)];
+ f17 = f9-f8;
+ f18 = f10*f11;
+ f19 = f12*f13;
+ f20 = heapFloat[(r2+8)];
+ f21 = heapFloat[(r2+9)];
+ f22 = heapFloat[(r2+6)];
+ r5 = r5 >> 2;
+ f23 = f14*f11;
+ f24 = f15*f13;
+ f18 = f18+f19;
+ f19 = f16*f17;
+ f25 = heapFloat[(r2+10)];
+ r5 = heap32[(r5+2)];
+ f18 = f18+f19;
+ f11 = f20*f11;
+ f13 = f21*f13;
+ f19 = f23+f24;
+ f23 = f22*f17;
+ r9 = sp + -416;
+ f19 = f19+f23;
+ f11 = f11+f13;
+ f13 = f25*f17;
+ f17 = f2+f18;
+ f11 = f11+f13;
+ f10 = f10*f5;
+ f12 = f12*f1;
+ r10 = r9 >> 2;
+ f13 = f3+f19;
+ heapFloat[(fp+-104)] = f17;
+ f14 = f14*f5;
+ f15 = f15*f1;
+ f10 = f10+f12;
+ f12 = f16*f8;
+ f11 = f4+f11;
+ heapFloat[(r10+1)] = f13;
+ f10 = f10+f12;
+ heapFloat[(r10+2)] = f11;
+ f11 = f20*f5;
+ f12 = f21*f1;
+ f13 = f14+f15;
+ f14 = f22*f8;
+ r11 = sp + -400;
+ f13 = f13+f14;
+ f11 = f11+f12;
+ f12 = f25*f8;
+ f10 = f2+f10;
+ heap32[(r10+3)] = 0;
+ f11 = f11+f12;
+ r10 = r11 >> 2;
+ f12 = f3+f13;
+ heapFloat[(fp+-100)] = f10;
+ f10 = f4+f11;
+ heapFloat[(r10+1)] = f12;
+ heapFloat[(r10+2)] = f10;
+ heap32[(r10+3)] = 0;
+ heap32[(g0)] = r_g0;
+ heap32[(g0+1)] = r11;
+ heap32[(g0+2)] = r9;
+ heap32[(g0+3)] = r6;
+ __FUNCTION_TABLE__[(r5)>>2](i7);
+ r3 = heap32[(r1)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3+4)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ f10 = -f5;
+ f11 = -f1;
+ f12 = -f8;
+ r5 = r_g0 >> 2;
+ f13 = heapFloat[(r2)];
+ f7 = f10-f7;
+ f14 = heapFloat[(r2+1)];
+ f6 = f11-f6;
+ f15 = heapFloat[(r2+4)];
+ f16 = heapFloat[(r2+5)];
+ r5 = heap32[(r5)];
+ f17 = heapFloat[(r2+2)];
+ f9 = f12-f9;
+ f18 = f13*f7;
+ f19 = f14*f6;
+ f20 = heapFloat[(r2+8)];
+ f21 = heapFloat[(r2+9)];
+ f22 = heapFloat[(r2+6)];
+ r5 = r5 >> 2;
+ f23 = f15*f7;
+ f24 = f16*f6;
+ f18 = f18+f19;
+ f19 = f17*f9;
+ f25 = heapFloat[(r2+10)];
+ r5 = heap32[(r5+2)];
+ f18 = f18+f19;
+ f7 = f20*f7;
+ f6 = f21*f6;
+ f19 = f23+f24;
+ f23 = f22*f9;
+ r9 = sp + -384;
+ f19 = f19+f23;
+ f6 = f7+f6;
+ f7 = f25*f9;
+ f9 = f2+f18;
+ f6 = f6+f7;
+ f7 = f13*f5;
+ f13 = f14*f1;
+ r10 = r9 >> 2;
+ f14 = f3+f19;
+ heapFloat[(fp+-96)] = f9;
+ f9 = f15*f5;
+ f15 = f16*f1;
+ f7 = f7+f13;
+ f13 = f17*f8;
+ f6 = f4+f6;
+ heapFloat[(r10+1)] = f14;
+ f7 = f7+f13;
+ heapFloat[(r10+2)] = f6;
+ f6 = f20*f5;
+ f13 = f21*f1;
+ f9 = f9+f15;
+ f14 = f22*f8;
+ r11 = sp + -368;
+ f9 = f9+f14;
+ f6 = f6+f13;
+ f13 = f25*f8;
+ f7 = f2+f7;
+ heap32[(r10+3)] = 0;
+ f6 = f6+f13;
+ r10 = r11 >> 2;
+ f9 = f3+f9;
+ heapFloat[(fp+-92)] = f7;
+ f6 = f4+f6;
+ heapFloat[(r10+1)] = f9;
+ heapFloat[(r10+2)] = f6;
+ heap32[(r10+3)] = 0;
+ heap32[(g0)] = r_g0;
+ heap32[(g0+1)] = r11;
+ heap32[(g0+2)] = r9;
+ heap32[(g0+3)] = r6;
+ __FUNCTION_TABLE__[(r5)>>2](i7);
+ r3 = heap32[(r1)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3+4)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ f6 = heapFloat[(r8+1)];
+ f7 = heapFloat[(fp+-228)];
+ f9 = heapFloat[(r8+2)];
+ r5 = r_g0 >> 2;
+ f13 = heapFloat[(r2)];
+ f14 = f7-f5;
+ f15 = heapFloat[(r2+1)];
+ f16 = f6-f1;
+ f17 = heapFloat[(r2+4)];
+ f18 = heapFloat[(r2+5)];
+ r5 = heap32[(r5)];
+ f19 = heapFloat[(r2+2)];
+ f20 = f9-f8;
+ f21 = f13*f14;
+ f22 = f15*f16;
+ f23 = heapFloat[(r2+8)];
+ f24 = heapFloat[(r2+9)];
+ f25 = heapFloat[(r2+6)];
+ r5 = r5 >> 2;
+ f26 = f17*f14;
+ f27 = f18*f16;
+ f21 = f21+f22;
+ f22 = f19*f20;
+ f28 = heapFloat[(r2+10)];
+ r5 = heap32[(r5+2)];
+ f21 = f21+f22;
+ f14 = f23*f14;
+ f16 = f24*f16;
+ f22 = f26+f27;
+ f26 = f25*f20;
+ r8 = sp + -352;
+ f22 = f22+f26;
+ f14 = f14+f16;
+ f16 = f28*f20;
+ f20 = f2+f21;
+ f14 = f14+f16;
+ f13 = f13*f5;
+ f15 = f15*f1;
+ r9 = r8 >> 2;
+ f16 = f3+f22;
+ heapFloat[(fp+-88)] = f20;
+ f17 = f17*f5;
+ f18 = f18*f1;
+ f13 = f13+f15;
+ f15 = f19*f8;
+ f14 = f4+f14;
+ heapFloat[(r9+1)] = f16;
+ f13 = f13+f15;
+ heapFloat[(r9+2)] = f14;
+ f14 = f23*f5;
+ f15 = f24*f1;
+ f16 = f17+f18;
+ f17 = f25*f8;
+ r10 = sp + -336;
+ f16 = f16+f17;
+ f14 = f14+f15;
+ f15 = f28*f8;
+ f13 = f2+f13;
+ heap32[(r9+3)] = 0;
+ f14 = f14+f15;
+ r9 = r10 >> 2;
+ f15 = f3+f16;
+ heapFloat[(fp+-84)] = f13;
+ f13 = f4+f14;
+ heapFloat[(r9+1)] = f15;
+ heapFloat[(r9+2)] = f13;
+ heap32[(r9+3)] = 0;
+ heap32[(g0)] = r_g0;
+ heap32[(g0+1)] = r10;
+ heap32[(g0+2)] = r8;
+ heap32[(g0+3)] = r6;
+ __FUNCTION_TABLE__[(r5)>>2](i7);
+ r3 = heap32[(r1)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3+4)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ r5 = r_g0 >> 2;
+ f13 = heapFloat[(r2)];
+ f7 = f10-f7;
+ f10 = heapFloat[(r2+1)];
+ f6 = f11-f6;
+ f11 = heapFloat[(r2+4)];
+ f14 = heapFloat[(r2+5)];
+ r5 = heap32[(r5)];
+ f15 = heapFloat[(r2+2)];
+ f9 = f12-f9;
+ f12 = f13*f7;
+ f16 = f10*f6;
+ f17 = heapFloat[(r2+8)];
+ f18 = heapFloat[(r2+9)];
+ f19 = heapFloat[(r2+6)];
+ r5 = r5 >> 2;
+ f20 = f11*f7;
+ f21 = f14*f6;
+ f12 = f12+f16;
+ f16 = f15*f9;
+ f22 = heapFloat[(r2+10)];
+ r5 = heap32[(r5+2)];
+ f12 = f12+f16;
+ f7 = f17*f7;
+ f6 = f18*f6;
+ f16 = f20+f21;
+ f20 = f19*f9;
+ r8 = sp + -320;
+ f16 = f16+f20;
+ f6 = f7+f6;
+ f7 = f22*f9;
+ f9 = f2+f12;
+ f6 = f6+f7;
+ f7 = f13*f5;
+ f10 = f10*f1;
+ r9 = r8 >> 2;
+ f12 = f3+f16;
+ heapFloat[(fp+-80)] = f9;
+ f9 = f11*f5;
+ f11 = f14*f1;
+ f7 = f7+f10;
+ f10 = f15*f8;
+ f6 = f4+f6;
+ heapFloat[(r9+1)] = f12;
+ f7 = f7+f10;
+ heapFloat[(r9+2)] = f6;
+ f6 = f17*f5;
+ f10 = f18*f1;
+ f9 = f9+f11;
+ f11 = f19*f8;
+ r10 = sp + -304;
+ f9 = f9+f11;
+ f6 = f6+f10;
+ f10 = f22*f8;
+ f7 = f2+f7;
+ heap32[(r9+3)] = 0;
+ f6 = f6+f10;
+ r9 = r10 >> 2;
+ f9 = f3+f9;
+ heapFloat[(fp+-76)] = f7;
+ f6 = f4+f6;
+ heapFloat[(r9+1)] = f9;
+ heapFloat[(r9+2)] = f6;
+ heap32[(r9+3)] = 0;
+ heap32[(g0)] = r_g0;
+ heap32[(g0+1)] = r10;
+ heap32[(g0+2)] = r8;
+ heap32[(g0+3)] = r6;
+ r3 = sp + -928;
+ __FUNCTION_TABLE__[(r5)>>2](i7);
+ r5 = r3 >> 2;
+ heap32[(fp+-232)] = 0;
+ heap32[(r5+1)] = 0;
+ r3 = (r3 + r7)|0;
+ heap32[(r5+2)] = 0;
+ r3 = r3 >> 2;
+ heap32[(r5+3)] = 0;
+ r7 = sp + -944;
+ heap32[(r3)] = 1065353216;
+ r3 = r7 >> 2;
+ heap32[(fp+-236)] = 0;
+ heap32[(r3+1)] = 0;
+ r4 = (r7 + r4)|0;
+ heap32[(r3+2)] = 0;
+ r4 = r4 >> 2;
+ heap32[(r3+3)] = 0;
+ heap32[(r4)] = 1065353216;
+ r1 = heap32[(r1)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+4)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+ r1 = r_g0 >> 2;
+ r1 = heap32[(r1)];
+ f6 = heapFloat[(r2)];
+ f7 = heapFloat[(fp+-236)];
+ f9 = heapFloat[(r2+1)];
+ f10 = heapFloat[(r3+1)];
+ f11 = heapFloat[(r2+4)];
+ f12 = heapFloat[(r2+5)];
+ r1 = r1 >> 2;
+ f13 = heapFloat[(r2+2)];
+ f14 = heapFloat[(r3+2)];
+ f15 = f6*f7;
+ f16 = f9*f10;
+ f17 = heapFloat[(r2+8)];
+ f18 = heapFloat[(r2+9)];
+ f19 = heapFloat[(r2+10)];
+ f20 = heapFloat[(r2+6)];
+ r1 = heap32[(r1+15)];
+ f21 = f11*f7;
+ f22 = f12*f10;
+ f15 = f15+f16;
+ f16 = f13*f14;
+ r2 = sp + -288;
+ f7 = f17*f7;
+ f10 = f18*f10;
+ f21 = f21+f22;
+ f22 = f20*f14;
+ f15 = f15+f16;
+ r3 = r2 >> 2;
+ f7 = f7+f10;
+ f10 = f19*f14;
+ f14 = f21+f22;
+ heapFloat[(fp+-72)] = f15;
+ f7 = f7+f10;
+ heapFloat[(r3+1)] = f14;
+ heapFloat[(r3+2)] = f7;
+ heap32[(r3+3)] = 0;
+ f7 = heapFloat[(fp+-232)];
+ f10 = heapFloat[(r5+1)];
+ f14 = heapFloat[(r5+2)];
+ f15 = f6*f7;
+ f16 = f9*f10;
+ f21 = f11*f7;
+ f22 = f12*f10;
+ f15 = f15+f16;
+ f16 = f13*f14;
+ r3 = sp + -272;
+ f7 = f17*f7;
+ f10 = f18*f10;
+ f21 = f21+f22;
+ f22 = f20*f14;
+ f15 = f15+f16;
+ f6 = f6*f5;
+ f9 = f9*f1;
+ r4 = r3 >> 2;
+ f7 = f7+f10;
+ f10 = f19*f14;
+ f14 = f21+f22;
+ heapFloat[(fp+-68)] = f15;
+ f11 = f11*f5;
+ f12 = f12*f1;
+ f6 = f6+f9;
+ f9 = f13*f8;
+ f7 = f7+f10;
+ heapFloat[(r4+1)] = f14;
+ f6 = f6+f9;
+ heapFloat[(r4+2)] = f7;
+ f5 = f17*f5;
+ f1 = f18*f1;
+ f7 = f11+f12;
+ f9 = f20*f8;
+ r5 = sp + -256;
+ f7 = f7+f9;
+ f1 = f5+f1;
+ f5 = f19*f8;
+ f2 = f2-f6;
+ heap32[(r4+3)] = 0;
+ f1 = f1+f5;
+ r4 = r5 >> 2;
+ f3 = f3-f7;
+ heapFloat[(fp+-64)] = f2;
+ f1 = f4-f1;
+ heapFloat[(r4+1)] = f3;
+ heapFloat[(r4+2)] = f1;
+ heap32[(r4+3)] = 0;
+ heap32[(g0)] = r_g0;
+ heap32[(g0+1)] = r5;
+ heap32[(g0+2)] = r3;
+}
+else{
+ if(r3 ==13) //_LBB222_21
+{
+ r3 = heap32[(r5)];
+ r3 = r3 >> 2;
+ r7 = heap32[(r5+13)];
+ r3 = heap32[(r3+21)];
+ heap32[(g0)] = r2;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ f0 = f_g0;
+ r3 = sp + -240;
+ f1 = heapFloat[(r5+8)];
+ f2 = heapFloat[(r5+9)];
+ f3 = heapFloat[(r5+7)];
+ r8 = r3 >> 2;
+ heap32[(r8+3)] = heap32[(r5+10)];
+ r9 = heap32[(r5)];
+ r9 = r9 >> 2;
+ r9 = heap32[(r9+11)];
+ heap32[(g0)] = r2;
+ __FUNCTION_TABLE__[(r9)>>2](i7);
+ f4 = f_g0;
+ r9 = heap32[(r5)];
+ r9 = r9 >> 2;
+ r9 = heap32[(r9+11)];
+ heap32[(g0)] = r2;
+ __FUNCTION_TABLE__[(r9)>>2](i7);
+ f5 = f_g0;
+ r5 = heap32[(r5)];
+ r5 = r5 >> 2;
+ r5 = heap32[(r5+11)];
+ heap32[(g0)] = r2;
+ __FUNCTION_TABLE__[(r5)>>2](i7);
+ f3 = f3+f_g0;
+ r2 = r7 << 2;
+ f1 = f1+f5;
+ heapFloat[(fp+-60)] = f3;
+ r3 = (r3 + r2)|0;
+ f2 = f2+f4;
+ heapFloat[(r8+1)] = f1;
+ r3 = r3 >> 2;
+ heapFloat[(r8+2)] = f2;
+ r4 = r4 >> 2;
+ f1 = heapFloat[(r3)];
+ f2 = heapFloat[(r4+12)];
+ f3 = heapFloat[(r4+13)];
+ f4 = heapFloat[(r4+14)];
+ r3 = sp + -960;
+ r5 = r3 >> 2;
+ heap32[(fp+-240)] = 0;
+ heap32[(r5+1)] = 0;
+ r3 = (r3 + r2)|0;
+ heap32[(r5+2)] = 0;
+ r3 = r3 >> 2;
+ heap32[(r5+3)] = 0;
+ r8 = sp + -976;
+ heapFloat[(r3)] = f1;
+ r3 = (r7 + 1)|0;
+ r3 = (r3 % 3)|0;
+ r7 = r8 >> 2;
+ heap32[(fp+-244)] = 0;
+ heap32[(r7+1)] = 0;
+ r3 = r3 << 2;
+ r8 = (r8 + r3)|0;
+ heap32[(r7+2)] = 0;
+ r8 = r8 >> 2;
+ heap32[(r7+3)] = 0;
+ heapFloat[(r8)] = f0;
+ r8 = heap32[(r1)];
+ r8 = r8 >> 2;
+ r8 = heap32[(r8+4)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r8)>>2](i7);
+ f1 = heapFloat[(r5+1)];
+ f5 = heapFloat[(r7+1)];
+ f6 = heapFloat[(fp+-240)];
+ f7 = heapFloat[(fp+-244)];
+ r9 = r_g0 >> 2;
+ f8 = heapFloat[(r5+2)];
+ f9 = heapFloat[(r7+2)];
+ f10 = f7-f6;
+ f11 = heapFloat[(r4)];
+ f12 = f5-f1;
+ f13 = heapFloat[(r4+1)];
+ r5 = heap32[(r9)];
+ f14 = heapFloat[(r4+4)];
+ f15 = heapFloat[(r4+5)];
+ f16 = f11*f10;
+ f17 = f13*f12;
+ f18 = f9-f8;
+ f19 = heapFloat[(r4+2)];
+ r5 = r5 >> 2;
+ f20 = heapFloat[(r4+8)];
+ f21 = heapFloat[(r4+9)];
+ f22 = heapFloat[(r4+6)];
+ f23 = f14*f10;
+ f24 = f15*f12;
+ f16 = f16+f17;
+ f17 = f19*f18;
+ f16 = f16+f17;
+ f17 = heapFloat[(r4+10)];
+ r5 = heap32[(r5+2)];
+ f10 = f20*f10;
+ f12 = f21*f12;
+ f23 = f23+f24;
+ f24 = f22*f18;
+ f25 = f6+f7;
+ f26 = f1+f5;
+ r7 = sp + -224;
+ f23 = f23+f24;
+ f10 = f10+f12;
+ f12 = f17*f18;
+ f16 = f2+f16;
+ f18 = f8+f9;
+ f10 = f10+f12;
+ f11 = f11*f25;
+ f12 = f13*f26;
+ r9 = r7 >> 2;
+ f13 = f3+f23;
+ heapFloat[(fp+-56)] = f16;
+ f14 = f14*f25;
+ f15 = f15*f26;
+ f11 = f11+f12;
+ f12 = f19*f18;
+ f10 = f4+f10;
+ heapFloat[(r9+1)] = f13;
+ f11 = f11+f12;
+ heapFloat[(r9+2)] = f10;
+ f10 = f20*f25;
+ f12 = f21*f26;
+ f13 = f14+f15;
+ f14 = f22*f18;
+ r10 = sp + -208;
+ f13 = f13+f14;
+ f10 = f10+f12;
+ f12 = f17*f18;
+ f11 = f2+f11;
+ heap32[(r9+3)] = 0;
+ f10 = f10+f12;
+ r9 = r10 >> 2;
+ f12 = f3+f13;
+ heapFloat[(fp+-52)] = f11;
+ f10 = f4+f10;
+ heapFloat[(r9+1)] = f12;
+ heapFloat[(r9+2)] = f10;
+ heap32[(r9+3)] = 0;
+ heap32[(g0)] = r_g0;
+ heap32[(g0+1)] = r10;
+ heap32[(g0+2)] = r7;
+ heap32[(g0+3)] = r6;
+ __FUNCTION_TABLE__[(r5)>>2](i7);
+ r5 = heap32[(r1)];
+ r5 = r5 >> 2;
+ r5 = heap32[(r5+4)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r5)>>2](i7);
+ f10 = -f6;
+ f11 = -f1;
+ f12 = -f8;
+ r7 = r_g0 >> 2;
+ f10 = f10-f7;
+ f13 = heapFloat[(r4)];
+ f11 = f11-f5;
+ f14 = heapFloat[(r4+1)];
+ r7 = heap32[(r7)];
+ f15 = heapFloat[(r4+4)];
+ f16 = heapFloat[(r4+5)];
+ f17 = f13*f10;
+ f18 = f14*f11;
+ f12 = f12-f9;
+ f19 = heapFloat[(r4+2)];
+ r7 = r7 >> 2;
+ f20 = heapFloat[(r4+8)];
+ f21 = heapFloat[(r4+9)];
+ f22 = heapFloat[(r4+6)];
+ f23 = f15*f10;
+ f24 = f16*f11;
+ f17 = f17+f18;
+ f18 = f19*f12;
+ f17 = f17+f18;
+ f18 = heapFloat[(r4+10)];
+ r7 = heap32[(r7+2)];
+ f10 = f20*f10;
+ f11 = f21*f11;
+ f23 = f23+f24;
+ f24 = f22*f12;
+ f7 = f6-f7;
+ f5 = f1-f5;
+ r8 = sp + -192;
+ f23 = f23+f24;
+ f10 = f10+f11;
+ f11 = f18*f12;
+ f12 = f2+f17;
+ f9 = f8-f9;
+ f10 = f10+f11;
+ f11 = f13*f7;
+ f13 = f14*f5;
+ r9 = r8 >> 2;
+ f14 = f3+f23;
+ heapFloat[(fp+-48)] = f12;
+ f12 = f15*f7;
+ f15 = f16*f5;
+ f11 = f11+f13;
+ f13 = f19*f9;
+ f10 = f4+f10;
+ heapFloat[(r9+1)] = f14;
+ f11 = f11+f13;
+ heapFloat[(r9+2)] = f10;
+ f7 = f20*f7;
+ f5 = f21*f5;
+ f10 = f12+f15;
+ f12 = f22*f9;
+ r10 = sp + -176;
+ f10 = f10+f12;
+ f5 = f7+f5;
+ f7 = f18*f9;
+ f9 = f2+f11;
+ heap32[(r9+3)] = 0;
+ f5 = f5+f7;
+ r9 = r10 >> 2;
+ f7 = f3+f10;
+ heapFloat[(fp+-44)] = f9;
+ f5 = f4+f5;
+ heapFloat[(r9+1)] = f7;
+ heapFloat[(r9+2)] = f5;
+ heap32[(r9+3)] = 0;
+ heap32[(g0)] = r_g0;
+ heap32[(g0+1)] = r10;
+ heap32[(g0+2)] = r8;
+ heap32[(g0+3)] = r6;
+ r5 = sp + -992;
+ __FUNCTION_TABLE__[(r7)>>2](i7);
+ r7 = r5 >> 2;
+ heap32[(fp+-248)] = 0;
+ heap32[(r7+1)] = 0;
+ r2 = (r5 + r2)|0;
+ heap32[(r7+2)] = 0;
+ r2 = r2 >> 2;
+ heap32[(r7+3)] = 0;
+ r5 = sp + -1008;
+ heap32[(r2)] = 1065353216;
+ r2 = r5 >> 2;
+ heap32[(fp+-252)] = 0;
+ heap32[(r2+1)] = 0;
+ r3 = (r5 + r3)|0;
+ heap32[(r2+2)] = 0;
+ r3 = r3 >> 2;
+ heap32[(r2+3)] = 0;
+ heap32[(r3)] = 1065353216;
+ r3 = heap32[(r1)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3+4)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ r5 = r_g0 >> 2;
+ r5 = heap32[(r5)];
+ f5 = heapFloat[(r4)];
+ f7 = heapFloat[(fp+-252)];
+ f9 = heapFloat[(r4+1)];
+ f10 = heapFloat[(r2+1)];
+ f11 = heapFloat[(r4+4)];
+ f12 = heapFloat[(r4+5)];
+ r5 = r5 >> 2;
+ f13 = heapFloat[(r4+2)];
+ f14 = heapFloat[(r2+2)];
+ f15 = f5*f7;
+ f16 = f9*f10;
+ f17 = heapFloat[(r4+8)];
+ f18 = heapFloat[(r4+9)];
+ f19 = heapFloat[(r4+10)];
+ f20 = heapFloat[(r4+6)];
+ r2 = heap32[(r5+15)];
+ f21 = f11*f7;
+ f22 = f12*f10;
+ f15 = f15+f16;
+ f16 = f13*f14;
+ r5 = sp + -160;
+ f23 = f17*f7;
+ f24 = f18*f10;
+ f21 = f21+f22;
+ f22 = f20*f14;
+ f15 = f15+f16;
+ r8 = r5 >> 2;
+ f16 = f23+f24;
+ f23 = f19*f14;
+ f21 = f21+f22;
+ heapFloat[(fp+-40)] = f15;
+ f15 = f16+f23;
+ heapFloat[(r8+1)] = f21;
+ heapFloat[(r8+2)] = f15;
+ heap32[(r8+3)] = 0;
+ f15 = heapFloat[(fp+-248)];
+ f16 = heapFloat[(r7+1)];
+ f21 = heapFloat[(r7+2)];
+ f22 = f5*f15;
+ f23 = f9*f16;
+ f24 = f11*f15;
+ f25 = f12*f16;
+ f22 = f22+f23;
+ f23 = f13*f21;
+ r7 = sp + -144;
+ f26 = f17*f15;
+ f27 = f18*f16;
+ f24 = f24+f25;
+ f25 = f20*f21;
+ f22 = f22+f23;
+ f5 = f5*f6;
+ f9 = f9*f1;
+ r8 = r7 >> 2;
+ f23 = f26+f27;
+ f26 = f19*f21;
+ f24 = f24+f25;
+ heapFloat[(fp+-36)] = f22;
+ f11 = f11*f6;
+ f12 = f12*f1;
+ f5 = f5+f9;
+ f9 = f13*f8;
+ f13 = f23+f26;
+ heapFloat[(r8+1)] = f24;
+ f5 = f5+f9;
+ heapFloat[(r8+2)] = f13;
+ f9 = f17*f6;
+ f13 = f18*f1;
+ f11 = f11+f12;
+ f12 = f20*f8;
+ r9 = sp + -128;
+ f11 = f11+f12;
+ f9 = f9+f13;
+ f12 = f19*f8;
+ f5 = f2-f5;
+ heap32[(r8+3)] = 0;
+ f9 = f9+f12;
+ r8 = r9 >> 2;
+ f11 = f3-f11;
+ heapFloat[(fp+-32)] = f5;
+ f5 = f4-f9;
+ heapFloat[(r8+1)] = f11;
+ heapFloat[(r8+2)] = f5;
+ heap32[(r8+3)] = 0;
+ heap32[(g0)] = r_g0;
+ heap32[(g0+1)] = r9;
+ heap32[(g0+2)] = r7;
+ heap32[(g0+3)] = r5;
+ heapFloat[(g0+4)] = f0;
+ heapFloat[(g0+5)] = f0;
+ heap32[(g0+6)] = 0;
+ heap32[(g0+7)] = 1086918619;
+ heap32[(g0+8)] = r6;
+ heap32[(g0+9)] = 0;
+ heap32[(g0+10)] = 1092616192;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ r1 = heap32[(r1)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+4)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+ r1 = r_g0 >> 2;
+ f5 = heapFloat[(r4)];
+ f9 = heapFloat[(r4+1)];
+ r1 = heap32[(r1)];
+ f11 = heapFloat[(r4+4)];
+ f12 = heapFloat[(r4+5)];
+ f13 = heapFloat[(r4+2)];
+ r1 = r1 >> 2;
+ f17 = f5*f7;
+ f18 = f9*f10;
+ f19 = heapFloat[(r4+8)];
+ f20 = heapFloat[(r4+9)];
+ f22 = heapFloat[(r4+10)];
+ f23 = heapFloat[(r4+6)];
+ r1 = heap32[(r1+15)];
+ f24 = f11*f7;
+ f25 = f12*f10;
+ f17 = f17+f18;
+ f18 = f13*f14;
+ r2 = sp + -112;
+ f7 = f19*f7;
+ f10 = f20*f10;
+ f24 = f24+f25;
+ f25 = f23*f14;
+ f17 = f17+f18;
+ r3 = r2 >> 2;
+ f7 = f7+f10;
+ f10 = f22*f14;
+ f14 = f24+f25;
+ heapFloat[(fp+-28)] = f17;
+ f17 = f5*f15;
+ f18 = f9*f16;
+ f7 = f7+f10;
+ heapFloat[(r3+1)] = f14;
+ heapFloat[(r3+2)] = f7;
+ f7 = f11*f15;
+ f10 = f12*f16;
+ f14 = f17+f18;
+ f17 = f13*f21;
+ r4 = sp + -96;
+ f15 = f19*f15;
+ f16 = f20*f16;
+ f7 = f7+f10;
+ f10 = f23*f21;
+ f14 = f14+f17;
+ heap32[(r3+3)] = 0;
+ f5 = f5*f6;
+ f9 = f9*f1;
+ r3 = r4 >> 2;
+ f15 = f15+f16;
+ f16 = f22*f21;
+ f7 = f7+f10;
+ heapFloat[(fp+-24)] = f14;
+ f10 = f11*f6;
+ f11 = f12*f1;
+ f5 = f5+f9;
+ f9 = f13*f8;
+ f12 = f15+f16;
+ heapFloat[(r3+1)] = f7;
+ f5 = f5+f9;
+ heapFloat[(r3+2)] = f12;
+ f6 = f19*f6;
+ f1 = f20*f1;
+ f7 = f10+f11;
+ f9 = f23*f8;
+ r5 = sp + -80;
+ f7 = f7+f9;
+ f1 = f6+f1;
+ f6 = f22*f8;
+ f2 = f2+f5;
+ heap32[(r3+3)] = 0;
+ f1 = f1+f6;
+ r3 = r5 >> 2;
+ f3 = f3+f7;
+ heapFloat[(fp+-20)] = f2;
+ f1 = f4+f1;
+ heapFloat[(r3+1)] = f3;
+ heapFloat[(r3+2)] = f1;
+ heap32[(r3+3)] = 0;
+ heap32[(g0)] = r_g0;
+ heap32[(g0+1)] = r5;
+ heap32[(g0+2)] = r4;
+}
+else{
+__label__ = 32;
+break _1;
+}
+}
+ heap32[(g0+3)] = r2;
+ heapFloat[(g0+4)] = f0;
+ heapFloat[(g0+5)] = f0;
+ heap32[(g0+6)] = 0;
+ heap32[(g0+7)] = 1086918619;
+ heap32[(g0+8)] = r6;
+ heap32[(g0+9)] = 0;
+ heap32[(g0+10)] = 1092616192;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+ return;
+}
+}
+else{
+ if(r3 >8) //_LBB222_4
+{
+ if(r3 ==9) //_LBB222_16
+{
+ r2 = heap32[(r5+23)];
+ r3 = (r2 + -1)|0;
+ if(r3 <0) //_LBB222_42
+{
+__label__ = 40;
+break _1;
+}
+else{
+ r3 = 1;
+ r2 = (r3 - r2)|0;
+_32: while(true){
+ r3 = r2;
+ r2 = heap32[(r5+25)];
+ r7 = r3 << 4;
+ r8 = heap32[(r1)];
+ r2 = (r2 - r7)|0;
+ r2 = r2 >> 2;
+ r7 = r8 >> 2;
+ r7 = heap32[(r7+4)];
+ f0 = heapFloat[(r2)];
+ f1 = heapFloat[(r2+1)];
+ f2 = heapFloat[(r2+2)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r7)>>2](i7);
+ r7 = r4 >> 2;
+ r8 = r_g0 >> 2;
+ r8 = heap32[(r8)];
+ f3 = heapFloat[(r7+1)];
+ f4 = 0;
+ f5 = heapFloat[(r7)];
+ f6 = heapFloat[(r7+2)];
+ r8 = r8 >> 2;
+ f7 = f3*f4;
+ f8 = f5*f4;
+ f9 = heapFloat[(r7+8)];
+ f10 = heapFloat[(r7+9)];
+ f11 = heapFloat[(r7+10)];
+ f12 = heapFloat[(r7+4)];
+ f13 = heapFloat[(r7+5)];
+ f14 = heapFloat[(r7+6)];
+ r8 = heap32[(r8+4)];
+ f15 = f5+f7;
+ f16 = f6*f4;
+ f17 = heapFloat[(r7+14)];
+ f18 = heapFloat[(r7+13)];
+ f19 = heapFloat[(r7+12)];
+ r7 = sp + -608;
+ f20 = f8+f3;
+ f15 = f15+f16;
+ f7 = f8+f7;
+ r9 = r7 >> 2;
+ f8 = f20+f16;
+ heapFloat[(fp+-152)] = f15;
+ f15 = f13*f4;
+ f7 = f7+f6;
+ heapFloat[(r9+1)] = f8;
+ f8 = f12*f4;
+ heapFloat[(r9+2)] = f7;
+ f7 = f12+f15;
+ f16 = f14*f4;
+ f20 = f8+f13;
+ f7 = f7+f16;
+ heap32[(r9+3)] = 0;
+ f8 = f8+f15;
+ f15 = f20+f16;
+ heapFloat[(r9+4)] = f7;
+ f7 = f10*f4;
+ f8 = f8+f14;
+ heapFloat[(r9+5)] = f15;
+ f15 = f9*f4;
+ heapFloat[(r9+6)] = f8;
+ f8 = f9+f7;
+ f4 = f11*f4;
+ f16 = f15+f10;
+ f8 = f8+f4;
+ heap32[(r9+7)] = 0;
+ f7 = f15+f7;
+ f5 = f5*f0;
+ f3 = f3*f1;
+ f4 = f16+f4;
+ heapFloat[(r9+8)] = f8;
+ f8 = f12*f0;
+ f12 = f13*f1;
+ f3 = f5+f3;
+ f5 = f6*f2;
+ f6 = f7+f11;
+ heapFloat[(r9+9)] = f4;
+ f3 = f3+f5;
+ heapFloat[(r9+10)] = f6;
+ f0 = f9*f0;
+ f1 = f10*f1;
+ f4 = f8+f12;
+ f5 = f14*f2;
+ f4 = f4+f5;
+ f0 = f0+f1;
+ f1 = f11*f2;
+ f2 = f3+f19;
+ heap32[(r9+11)] = 0;
+ f0 = f0+f1;
+ f1 = f4+f18;
+ heapFloat[(r9+12)] = f2;
+ f0 = f0+f17;
+ heapFloat[(r9+13)] = f1;
+ heapFloat[(r9+14)] = f0;
+ heap32[(r9+15)] = 0;
+ r9 = heap32[(r5+30)];
+ r10 = r3 << 2;
+ r9 = (r9 - r10)|0;
+ r9 = r9 >> 2;
+ f0 = heapFloat[(r9)];
+ heap32[(g0)] = r_g0;
+ heapFloat[(g0+1)] = f0;
+ heap32[(g0+2)] = r7;
+ heap32[(g0+3)] = r6;
+ r2 = (r3 + 1)|0;
+ __FUNCTION_TABLE__[(r8)>>2](i7);
+ if(r3 ==0) //_LBB222_42
+{
+__label__ = 40;
+break _1;
+}
+else{
+continue _32;
+}
+}
+}
+}
+else{
+ if(r3 ==10) //_LBB222_19
+{
+ r3 = heap32[(r5+13)];
+ r5 = (r3 + 2)|0;
+ r5 = (r5 % 3)|0;
+ r7 = r3 << 2;
+ r2 = (r2 + 28)|0;
+ r5 = r5 << 2;
+ r8 = (r2 + r7)|0;
+ r2 = (r2 + r5)|0;
+ r8 = r8 >> 2;
+ r2 = r2 >> 2;
+ f0 = heapFloat[(r8)];
+ f1 = heapFloat[(r2)];
+ r2 = sp + -720;
+ r8 = r2 >> 2;
+ heap32[(fp+-180)] = 0;
+ heap32[(r8+1)] = 0;
+ r9 = (r2 + r7)|0;
+ heap32[(r8+2)] = 0;
+ r9 = r9 >> 2;
+ f2 = -f0;
+ heap32[(r8+3)] = 0;
+ r10 = sp + -736;
+ heapFloat[(r9)] = f2;
+ heap32[(fp+-184)] = 0;
+ r9 = r10 >> 2;
+ heap32[(r9+1)] = 0;
+ r7 = (r10 + r7)|0;
+ heap32[(r9+2)] = 0;
+ r7 = r7 >> 2;
+ heap32[(r9+3)] = 0;
+ heapFloat[(r7)] = f0;
+ r4 = r4 >> 2;
+ f0 = heapFloat[(r4)];
+ r7 = sp + -800;
+ heapFloat[(fp+-200)] = f0;
+ r11 = r7 >> 2;
+ f2 = heapFloat[(r4+1)];
+ heapFloat[(r11+1)] = f2;
+ f3 = heapFloat[(r4+2)];
+ heapFloat[(r11+2)] = f3;
+ heap32[(r11+3)] = heap32[(r4+3)];
+ f4 = heapFloat[(r4+4)];
+ heapFloat[(r11+4)] = f4;
+ f5 = heapFloat[(r4+5)];
+ heapFloat[(r11+5)] = f5;
+ f6 = heapFloat[(r4+6)];
+ heapFloat[(r11+6)] = f6;
+ heap32[(r11+7)] = heap32[(r4+7)];
+ f7 = heapFloat[(r4+8)];
+ heapFloat[(r11+8)] = f7;
+ f8 = heapFloat[(r4+9)];
+ heapFloat[(r11+9)] = f8;
+ f9 = heapFloat[(r4+10)];
+ heapFloat[(r11+10)] = f9;
+ heap32[(r11+11)] = heap32[(r4+11)];
+ f10 = heapFloat[(fp+-180)];
+ f11 = heapFloat[(r8+1)];
+ f12 = heapFloat[(r8+2)];
+ f0 = f0*f10;
+ f2 = f2*f11;
+ f4 = f4*f10;
+ f5 = f5*f11;
+ f0 = f0+f2;
+ f2 = f3*f12;
+ f3 = f7*f10;
+ f7 = f8*f11;
+ f4 = f4+f5;
+ f5 = f6*f12;
+ f0 = f0+f2;
+ f2 = heapFloat[(r4+12)];
+ f6 = heapFloat[(r4+13)];
+ f8 = heapFloat[(r4+14)];
+ f4 = f4+f5;
+ f3 = f3+f7;
+ f5 = f9*f12;
+ f0 = f0+f2;
+ f2 = f3+f5;
+ f3 = f4+f6;
+ heapFloat[(r11+12)] = f0;
+ f0 = f2+f8;
+ heapFloat[(r11+13)] = f3;
+ heapFloat[(r11+14)] = f0;
+ heap32[(r11+15)] = 0;
+ r11 = heap32[(r1)];
+ r11 = r11 >> 2;
+ r11 = heap32[(r11+4)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r11)>>2](i7);
+ r12 = r_g0 >> 2;
+ r12 = heap32[(r12)];
+ r12 = r12 >> 2;
+ r12 = heap32[(r12+4)];
+ heap32[(g0)] = r_g0;
+ heapFloat[(g0+1)] = f1;
+ heap32[(g0+2)] = r7;
+ heap32[(g0+3)] = r6;
+ __FUNCTION_TABLE__[(r12)>>2](i7);
+ f0 = heapFloat[(r4)];
+ r7 = sp + -864;
+ heapFloat[(fp+-216)] = f0;
+ r11 = r7 >> 2;
+ f2 = heapFloat[(r4+1)];
+ heapFloat[(r11+1)] = f2;
+ f3 = heapFloat[(r4+2)];
+ heapFloat[(r11+2)] = f3;
+ heap32[(r11+3)] = heap32[(r4+3)];
+ f4 = heapFloat[(r4+4)];
+ heapFloat[(r11+4)] = f4;
+ f5 = heapFloat[(r4+5)];
+ heapFloat[(r11+5)] = f5;
+ f6 = heapFloat[(r4+6)];
+ heapFloat[(r11+6)] = f6;
+ heap32[(r11+7)] = heap32[(r4+7)];
+ f7 = heapFloat[(r4+8)];
+ heapFloat[(r11+8)] = f7;
+ f8 = heapFloat[(r4+9)];
+ heapFloat[(r11+9)] = f8;
+ f9 = heapFloat[(r4+10)];
+ heapFloat[(r11+10)] = f9;
+ heap32[(r11+11)] = heap32[(r4+11)];
+ f10 = heapFloat[(fp+-184)];
+ f11 = heapFloat[(r9+1)];
+ f12 = heapFloat[(r9+2)];
+ f0 = f0*f10;
+ f2 = f2*f11;
+ f4 = f4*f10;
+ f5 = f5*f11;
+ f0 = f0+f2;
+ f2 = f3*f12;
+ f3 = f7*f10;
+ f7 = f8*f11;
+ f4 = f4+f5;
+ f5 = f6*f12;
+ f0 = f0+f2;
+ f2 = heapFloat[(r4+12)];
+ f6 = heapFloat[(r4+13)];
+ f8 = heapFloat[(r4+14)];
+ f4 = f4+f5;
+ f3 = f3+f7;
+ f5 = f9*f12;
+ f0 = f0+f2;
+ f2 = f3+f5;
+ f3 = f4+f6;
+ heapFloat[(r11+12)] = f0;
+ f0 = f2+f8;
+ heapFloat[(r11+13)] = f3;
+ heapFloat[(r11+14)] = f0;
+ heap32[(r11+15)] = 0;
+ r11 = heap32[(r1)];
+ r11 = r11 >> 2;
+ r11 = heap32[(r11+4)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r11)>>2](i7);
+ r12 = r_g0 >> 2;
+ r12 = heap32[(r12)];
+ r12 = r12 >> 2;
+ r12 = heap32[(r12+4)];
+ r3 = (r3 + 1)|0;
+ heap32[(g0)] = r_g0;
+ heapFloat[(g0+1)] = f1;
+ heap32[(g0+2)] = r7;
+ heap32[(g0+3)] = r6;
+ r3 = (r3 % 3)|0;
+ __FUNCTION_TABLE__[(r12)>>2](i7);
+ r3 = r3 << 2;
+ r7 = (r2 + r3)|0;
+ f0 = heapFloat[(r4+12)];
+ f2 = heapFloat[(r4+13)];
+ f3 = heapFloat[(r4+14)];
+ r3 = (r10 + r3)|0;
+ r7 = r7 >> 2;
+ heapFloat[(r7)] = f1;
+ r3 = r3 >> 2;
+ heapFloat[(r3)] = f1;
+ r11 = heap32[(r1)];
+ r11 = r11 >> 2;
+ r11 = heap32[(r11+4)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r11)>>2](i7);
+ r12 = r_g0 >> 2;
+ f4 = heapFloat[(fp+-184)];
+ f5 = heapFloat[(r4)];
+ f6 = heapFloat[(r9+1)];
+ f7 = heapFloat[(r4+1)];
+ r12 = heap32[(r12)];
+ f8 = heapFloat[(r4+4)];
+ f9 = heapFloat[(r4+5)];
+ f10 = f5*f4;
+ f11 = f7*f6;
+ f12 = heapFloat[(r9+2)];
+ f13 = heapFloat[(r4+2)];
+ r12 = r12 >> 2;
+ f14 = heapFloat[(r4+8)];
+ f15 = heapFloat[(r4+9)];
+ f16 = heapFloat[(r4+6)];
+ f17 = f8*f4;
+ f18 = f9*f6;
+ f10 = f10+f11;
+ f11 = f13*f12;
+ f10 = f10+f11;
+ f11 = heapFloat[(r4+10)];
+ r12 = heap32[(r12+2)];
+ f4 = f14*f4;
+ f6 = f15*f6;
+ f17 = f17+f18;
+ f18 = f16*f12;
+ r13 = sp + -544;
+ f17 = f17+f18;
+ f4 = f4+f6;
+ f6 = f11*f12;
+ f10 = f0+f10;
+ f4 = f4+f6;
+ r14 = r13 >> 2;
+ f6 = f2+f17;
+ heapFloat[(fp+-136)] = f10;
+ f4 = f3+f4;
+ heapFloat[(r14+1)] = f6;
+ heapFloat[(r14+2)] = f4;
+ heap32[(r14+3)] = 0;
+ f4 = heapFloat[(fp+-180)];
+ f6 = heapFloat[(r8+1)];
+ f10 = heapFloat[(r8+2)];
+ f5 = f5*f4;
+ f7 = f7*f6;
+ f8 = f8*f4;
+ f9 = f9*f6;
+ f5 = f5+f7;
+ f7 = f13*f10;
+ f5 = f5+f7;
+ f4 = f14*f4;
+ f6 = f15*f6;
+ f7 = f8+f9;
+ f8 = f16*f10;
+ r14 = sp + -528;
+ f7 = f7+f8;
+ f4 = f4+f6;
+ f6 = f11*f10;
+ f5 = f0+f5;
+ f4 = f4+f6;
+ r15 = r14 >> 2;
+ f6 = f2+f7;
+ heapFloat[(fp+-132)] = f5;
+ f4 = f3+f4;
+ heapFloat[(r15+1)] = f6;
+ heapFloat[(r15+2)] = f4;
+ heap32[(r15+3)] = 0;
+ heap32[(g0)] = r_g0;
+ heap32[(g0+1)] = r14;
+ heap32[(g0+2)] = r13;
+ heap32[(g0+3)] = r6;
+ __FUNCTION_TABLE__[(r12)>>2](i7);
+ f4 = -f1;
+ heapFloat[(r7)] = f4;
+ heapFloat[(r3)] = f4;
+ r11 = heap32[(r1)];
+ r11 = r11 >> 2;
+ r11 = heap32[(r11+4)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r11)>>2](i7);
+ r12 = r_g0 >> 2;
+ f5 = heapFloat[(fp+-184)];
+ f6 = heapFloat[(r4)];
+ f7 = heapFloat[(r9+1)];
+ f8 = heapFloat[(r4+1)];
+ r12 = heap32[(r12)];
+ f9 = heapFloat[(r4+4)];
+ f10 = heapFloat[(r4+5)];
+ f11 = f6*f5;
+ f12 = f8*f7;
+ f13 = heapFloat[(r9+2)];
+ f14 = heapFloat[(r4+2)];
+ r12 = r12 >> 2;
+ f15 = heapFloat[(r4+8)];
+ f16 = heapFloat[(r4+9)];
+ f17 = heapFloat[(r4+6)];
+ f18 = f9*f5;
+ f19 = f10*f7;
+ f11 = f11+f12;
+ f12 = f14*f13;
+ f11 = f11+f12;
+ f12 = heapFloat[(r4+10)];
+ r12 = heap32[(r12+2)];
+ f5 = f15*f5;
+ f7 = f16*f7;
+ f18 = f18+f19;
+ f19 = f17*f13;
+ r13 = sp + -512;
+ f18 = f18+f19;
+ f5 = f5+f7;
+ f7 = f12*f13;
+ f11 = f0+f11;
+ f5 = f5+f7;
+ r14 = r13 >> 2;
+ f7 = f2+f18;
+ heapFloat[(fp+-128)] = f11;
+ f5 = f3+f5;
+ heapFloat[(r14+1)] = f7;
+ heapFloat[(r14+2)] = f5;
+ heap32[(r14+3)] = 0;
+ f5 = heapFloat[(fp+-180)];
+ f7 = heapFloat[(r8+1)];
+ f11 = heapFloat[(r8+2)];
+ f6 = f6*f5;
+ f8 = f8*f7;
+ f9 = f9*f5;
+ f10 = f10*f7;
+ f6 = f6+f8;
+ f8 = f14*f11;
+ f6 = f6+f8;
+ f5 = f15*f5;
+ f7 = f16*f7;
+ f8 = f9+f10;
+ f9 = f17*f11;
+ r14 = sp + -496;
+ f8 = f8+f9;
+ f5 = f5+f7;
+ f7 = f12*f11;
+ f6 = f0+f6;
+ f5 = f5+f7;
+ r15 = r14 >> 2;
+ f7 = f2+f8;
+ heapFloat[(fp+-124)] = f6;
+ f5 = f3+f5;
+ heapFloat[(r15+1)] = f7;
+ heapFloat[(r15+2)] = f5;
+ heap32[(r15+3)] = 0;
+ heap32[(g0)] = r_g0;
+ heap32[(g0+1)] = r14;
+ heap32[(g0+2)] = r13;
+ heap32[(g0+3)] = r6;
+ __FUNCTION_TABLE__[(r12)>>2](i7);
+ heap32[(r7)] = 0;
+ r2 = (r2 + r5)|0;
+ r5 = (r10 + r5)|0;
+ heap32[(r3)] = 0;
+ r2 = r2 >> 2;
+ heapFloat[(r2)] = f1;
+ r3 = r5 >> 2;
+ heapFloat[(r3)] = f1;
+ r5 = heap32[(r1)];
+ r5 = r5 >> 2;
+ r5 = heap32[(r5+4)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r5)>>2](i7);
+ r7 = r_g0 >> 2;
+ f1 = heapFloat[(fp+-184)];
+ f5 = heapFloat[(r4)];
+ f6 = heapFloat[(r9+1)];
+ f7 = heapFloat[(r4+1)];
+ r7 = heap32[(r7)];
+ f8 = heapFloat[(r4+4)];
+ f9 = heapFloat[(r4+5)];
+ f10 = f5*f1;
+ f11 = f7*f6;
+ f12 = heapFloat[(r9+2)];
+ f13 = heapFloat[(r4+2)];
+ r7 = r7 >> 2;
+ f14 = heapFloat[(r4+8)];
+ f15 = heapFloat[(r4+9)];
+ f16 = heapFloat[(r4+6)];
+ f17 = f8*f1;
+ f18 = f9*f6;
+ f10 = f10+f11;
+ f11 = f13*f12;
+ f10 = f10+f11;
+ f11 = heapFloat[(r4+10)];
+ r7 = heap32[(r7+2)];
+ f1 = f14*f1;
+ f6 = f15*f6;
+ f17 = f17+f18;
+ f18 = f16*f12;
+ r10 = sp + -480;
+ f17 = f17+f18;
+ f1 = f1+f6;
+ f6 = f11*f12;
+ f10 = f0+f10;
+ f1 = f1+f6;
+ r11 = r10 >> 2;
+ f6 = f2+f17;
+ heapFloat[(fp+-120)] = f10;
+ f1 = f3+f1;
+ heapFloat[(r11+1)] = f6;
+ heapFloat[(r11+2)] = f1;
+ heap32[(r11+3)] = 0;
+ f1 = heapFloat[(fp+-180)];
+ f6 = heapFloat[(r8+1)];
+ f10 = heapFloat[(r8+2)];
+ f5 = f5*f1;
+ f7 = f7*f6;
+ f8 = f8*f1;
+ f9 = f9*f6;
+ f5 = f5+f7;
+ f7 = f13*f10;
+ f5 = f5+f7;
+ f1 = f14*f1;
+ f6 = f15*f6;
+ f7 = f8+f9;
+ f8 = f16*f10;
+ r11 = sp + -464;
+ f7 = f7+f8;
+ f1 = f1+f6;
+ f6 = f11*f10;
+ f5 = f0+f5;
+ f1 = f1+f6;
+ r12 = r11 >> 2;
+ f6 = f2+f7;
+ heapFloat[(fp+-116)] = f5;
+ f1 = f3+f1;
+ heapFloat[(r12+1)] = f6;
+ heapFloat[(r12+2)] = f1;
+ heap32[(r12+3)] = 0;
+ heap32[(g0)] = r_g0;
+ heap32[(g0+1)] = r11;
+ heap32[(g0+2)] = r10;
+ heap32[(g0+3)] = r6;
+ __FUNCTION_TABLE__[(r7)>>2](i7);
+ heapFloat[(r2)] = f4;
+ heapFloat[(r3)] = f4;
+ r1 = heap32[(r1)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+4)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+ r1 = r_g0 >> 2;
+ f1 = heapFloat[(fp+-184)];
+ f4 = heapFloat[(r4)];
+ f5 = heapFloat[(r9+1)];
+ f6 = heapFloat[(r4+1)];
+ r1 = heap32[(r1)];
+ f7 = heapFloat[(r4+4)];
+ f8 = heapFloat[(r4+5)];
+ f9 = f4*f1;
+ f10 = f6*f5;
+ f11 = heapFloat[(r9+2)];
+ f12 = heapFloat[(r4+2)];
+ r1 = r1 >> 2;
+ f13 = heapFloat[(r4+8)];
+ f14 = heapFloat[(r4+9)];
+ f15 = heapFloat[(r4+6)];
+ f16 = f7*f1;
+ f17 = f8*f5;
+ f9 = f9+f10;
+ f10 = f12*f11;
+ f9 = f9+f10;
+ f10 = heapFloat[(r4+10)];
+ r1 = heap32[(r1+2)];
+ f1 = f13*f1;
+ f5 = f14*f5;
+ f16 = f16+f17;
+ f17 = f15*f11;
+ r2 = sp + -448;
+ f16 = f16+f17;
+ f1 = f1+f5;
+ f5 = f10*f11;
+ f9 = f0+f9;
+ f1 = f1+f5;
+ r3 = r2 >> 2;
+ f5 = f2+f16;
+ heapFloat[(fp+-112)] = f9;
+ f1 = f3+f1;
+ heapFloat[(r3+1)] = f5;
+ heapFloat[(r3+2)] = f1;
+ heap32[(r3+3)] = 0;
+ f1 = heapFloat[(fp+-180)];
+ f5 = heapFloat[(r8+1)];
+ f9 = heapFloat[(r8+2)];
+ f4 = f4*f1;
+ f6 = f6*f5;
+ f7 = f7*f1;
+ f8 = f8*f5;
+ f4 = f4+f6;
+ f6 = f12*f9;
+ f4 = f4+f6;
+ f1 = f13*f1;
+ f5 = f14*f5;
+ f6 = f7+f8;
+ f7 = f15*f9;
+ r3 = sp + -432;
+ f6 = f6+f7;
+ f1 = f1+f5;
+ f5 = f10*f9;
+ f0 = f0+f4;
+ f1 = f1+f5;
+ r4 = r3 >> 2;
+ f2 = f2+f6;
+ heapFloat[(fp+-108)] = f0;
+ f0 = f3+f1;
+ heapFloat[(r4+1)] = f2;
+ heapFloat[(r4+2)] = f0;
+ heap32[(r4+3)] = 0;
+ heap32[(g0)] = r_g0;
+ heap32[(g0+1)] = r3;
+__label__ = 30;
+break _1;
+}
+else{
+__label__ = 32;
+break _1;
+}
+}
+}
+else{
+ if(r3 ==0) //_LBB222_14
+{
+ r3 = sp + -704;
+ f0 = heapFloat[(r5+8)];
+ f1 = heapFloat[(r5+9)];
+ f2 = heapFloat[(r5+7)];
+ r7 = r3 >> 2;
+ heap32[(r7+3)] = heap32[(r5+10)];
+ r8 = heap32[(r5)];
+ r8 = r8 >> 2;
+ r8 = heap32[(r8+11)];
+ heap32[(g0)] = r2;
+ __FUNCTION_TABLE__[(r8)>>2](i7);
+ f3 = f_g0;
+ r8 = heap32[(r5)];
+ r8 = r8 >> 2;
+ r8 = heap32[(r8+11)];
+ heap32[(g0)] = r2;
+ __FUNCTION_TABLE__[(r8)>>2](i7);
+ f4 = f_g0;
+ r5 = heap32[(r5)];
+ r5 = r5 >> 2;
+ r5 = heap32[(r5+11)];
+ heap32[(g0)] = r2;
+ __FUNCTION_TABLE__[(r5)>>2](i7);
+ f2 = f2+f_g0;
+ f0 = f0+f4;
+ heapFloat[(fp+-176)] = f2;
+ f1 = f1+f3;
+ heapFloat[(r7+1)] = f0;
+ heapFloat[(r7+2)] = f1;
+ r1 = heap32[(r1)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+4)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+ r1 = r_g0 >> 2;
+ r1 = heap32[(r1)];
+ r1 = r1 >> 2;
+ f0 = heapFloat[(r7+2)];
+ f1 = heapFloat[(r7+1)];
+ f2 = heapFloat[(fp+-176)];
+ r1 = heap32[(r1+18)];
+ r2 = sp + -624;
+ f2 = -f2;
+ r5 = r2 >> 2;
+ f1 = -f1;
+ heapFloat[(fp+-156)] = f2;
+ f0 = -f0;
+ heapFloat[(r5+1)] = f1;
+ heapFloat[(r5+2)] = f0;
+ heap32[(r5+3)] = 0;
+ heap32[(g0)] = r_g0;
+ heap32[(g0+1)] = r2;
+ heap32[(g0+2)] = r3;
+ heap32[(g0+3)] = r4;
+ heap32[(g0+4)] = r6;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+ return;
+}
+else{
+ if(r3 ==8) //_LBB222_15
+{
+ r3 = heap32[(r5)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3+11)];
+ heap32[(g0)] = r2;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ f0 = f_g0;
+ r1 = heap32[(r1)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+4)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+ r1 = r_g0 >> 2;
+ r1 = heap32[(r1)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+4)];
+ heap32[(g0)] = r_g0;
+ heapFloat[(g0+1)] = f0;
+ heap32[(g0+2)] = r4;
+__label__ = 31;
+}
+else{
+__label__ = 32;
+}
+}
+}
+}
+} while(0);
+_41: do {
+switch(__label__ ){//multiple entries
+case 30:
+ heap32[(g0+2)] = r2;
+__label__ = 31;
+break _41;
+break;
+case 32:
+ r7 = (r3 + -21)|0;
+ if(uint(r7) <uint(9)) //_LBB222_34
+{
+ r3 = sp + -1024;
+ r7 = r3 >> 2;
+ heap32[(fp+-256)] = 1566444395;
+ heap32[(r7+1)] = 1566444395;
+ heap32[(r7+2)] = 1566444395;
+ r8 = sp + -1040;
+ heap32[(r7+3)] = 0;
+ r7 = r8 >> 2;
+ heap32[(fp+-260)] = -581039253;
+ heap32[(r7+1)] = -581039253;
+ heap32[(r7+2)] = -581039253;
+ heap32[(r7+3)] = 0;
+ r7 = heap32[(r1)];
+ r7 = r7 >> 2;
+ r7 = heap32[(r7+4)];
+ r9 = _ZTV17DebugDrawcallback;
+ heap32[(g0)] = r0;
+ r10 = sp + -1136;
+ r11 = (r9 + 8)|0;
+ __FUNCTION_TABLE__[(r7)>>2](i7);
+ r12 = r10 >> 2;
+ r9 = (r9 + 32)|0;
+ heap32[(fp+-284)] = r11;
+ heap32[(r12+1)] = r9;
+ r13 = r6 >> 2;
+ heap32[(r12+2)] = r_g0;
+ heap32[(r12+3)] = heap32[(r13)];
+ heap32[(r12+4)] = heap32[(r13+1)];
+ heap32[(r12+5)] = heap32[(r13+2)];
+ r7 = r4 >> 2;
+ heap32[(r12+6)] = heap32[(r13+3)];
+ heap32[(r12+7)] = heap32[(r7)];
+ heap32[(r12+8)] = heap32[(r7+1)];
+ heap32[(r12+9)] = heap32[(r7+2)];
+ heap32[(r12+10)] = heap32[(r7+3)];
+ heap32[(r12+11)] = heap32[(r7+4)];
+ heap32[(r12+12)] = heap32[(r7+5)];
+ heap32[(r12+13)] = heap32[(r7+6)];
+ heap32[(r12+14)] = heap32[(r7+7)];
+ heap32[(r12+15)] = heap32[(r7+8)];
+ heap32[(r12+16)] = heap32[(r7+9)];
+ heap32[(r12+17)] = heap32[(r7+10)];
+ heap32[(r12+18)] = heap32[(r7+11)];
+ heap32[(r12+19)] = heap32[(r7+12)];
+ heap32[(r12+20)] = heap32[(r7+13)];
+ heap32[(r12+21)] = heap32[(r7+14)];
+ heap32[(r12+22)] = heap32[(r7+15)];
+ r7 = heap32[(r5)];
+ r7 = r7 >> 2;
+ r7 = heap32[(r7+15)];
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = r10;
+ heap32[(g0+2)] = r8;
+ heap32[(g0+3)] = r3;
+ __FUNCTION_TABLE__[(r7)>>2](i7);
+ r3 = r10 | 4;
+ r7 = _ZTV31btInternalTriangleIndexCallback;
+ heap32[(fp+-284)] = r11;
+ r8 = _ZTV18btTriangleCallback;
+ r3 = r3 >> 2;
+ r7 = (r7 + 8)|0;
+ heap32[(r12+1)] = r9;
+ r8 = (r8 + 8)|0;
+ heap32[(r3)] = r7;
+ heap32[(fp+-284)] = r8;
+ r3 = heap32[(r5+1)];
+}
+ if(r3 ==3) //_LBB222_37
+{
+ r3 = sp + -1152;
+ r7 = r3 >> 2;
+ heap32[(fp+-288)] = 1566444395;
+ heap32[(r7+1)] = 1566444395;
+ heap32[(r7+2)] = 1566444395;
+ r8 = sp + -1168;
+ heap32[(r7+3)] = 0;
+ r7 = r8 >> 2;
+ heap32[(fp+-292)] = -581039253;
+ heap32[(r7+1)] = -581039253;
+ heap32[(r7+2)] = -581039253;
+ heap32[(r7+3)] = 0;
+ r7 = heap32[(r1)];
+ r7 = r7 >> 2;
+ r7 = heap32[(r7+4)];
+ r9 = _ZTV17DebugDrawcallback;
+ heap32[(g0)] = r0;
+ r10 = sp + -1264;
+ r11 = (r9 + 8)|0;
+ __FUNCTION_TABLE__[(r7)>>2](i7);
+ r12 = r10 >> 2;
+ r9 = (r9 + 32)|0;
+ heap32[(fp+-316)] = r11;
+ heap32[(r12+1)] = r9;
+ r13 = r6 >> 2;
+ heap32[(r12+2)] = r_g0;
+ heap32[(r12+3)] = heap32[(r13)];
+ heap32[(r12+4)] = heap32[(r13+1)];
+ heap32[(r12+5)] = heap32[(r13+2)];
+ r7 = r4 >> 2;
+ heap32[(r12+6)] = heap32[(r13+3)];
+ heap32[(r12+7)] = heap32[(r7)];
+ heap32[(r12+8)] = heap32[(r7+1)];
+ heap32[(r12+9)] = heap32[(r7+2)];
+ heap32[(r12+10)] = heap32[(r7+3)];
+ heap32[(r12+11)] = heap32[(r7+4)];
+ heap32[(r12+12)] = heap32[(r7+5)];
+ heap32[(r12+13)] = heap32[(r7+6)];
+ heap32[(r12+14)] = heap32[(r7+7)];
+ heap32[(r12+15)] = heap32[(r7+8)];
+ heap32[(r12+16)] = heap32[(r7+9)];
+ heap32[(r12+17)] = heap32[(r7+10)];
+ heap32[(r12+18)] = heap32[(r7+11)];
+ heap32[(r12+19)] = heap32[(r7+12)];
+ heap32[(r12+20)] = heap32[(r7+13)];
+ heap32[(r12+21)] = heap32[(r7+14)];
+ heap32[(r12+22)] = heap32[(r7+15)];
+ r7 = heap32[(r5+22)];
+ r13 = r7 >> 2;
+ r13 = heap32[(r13)];
+ r13 = r13 >> 2;
+ r13 = heap32[(r13+2)];
+ r14 = (r10 + 4)|0;
+ heap32[(g0)] = r7;
+ heap32[(g0+1)] = r14;
+ heap32[(g0+2)] = r8;
+ heap32[(g0+3)] = r3;
+ __FUNCTION_TABLE__[(r13)>>2](i7);
+ r3 = r10 | 4;
+ r7 = _ZTV31btInternalTriangleIndexCallback;
+ heap32[(fp+-316)] = r11;
+ r8 = _ZTV18btTriangleCallback;
+ r3 = r3 >> 2;
+ r7 = (r7 + 8)|0;
+ heap32[(r12+1)] = r9;
+ r8 = (r8 + 8)|0;
+ heap32[(r3)] = r7;
+ heap32[(fp+-316)] = r8;
+ r3 = heap32[(r5+1)];
+}
+ if(r3 >6) //_LBB222_42
+{
+__label__ = 40;
+}
+else{
+ r3 = heap32[(r5)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3+22)];
+ heap32[(g0)] = r2;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ r3 = r_g0;
+ if(r3 <1) //_LBB222_42
+{
+__label__ = 40;
+}
+else{
+ r3 = 0;
+_52: while(true){
+ r7 = heap32[(r5)];
+ r7 = r7 >> 2;
+ r7 = heap32[(r7+23)];
+ r8 = sp + -1296;
+ r9 = sp + -1280;
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = r3;
+ heap32[(g0+2)] = r9;
+ heap32[(g0+3)] = r8;
+ __FUNCTION_TABLE__[(r7)>>2](i7);
+ r7 = r4 >> 2;
+ r9 = r9 >> 2;
+ f0 = heapFloat[(fp+-320)];
+ f1 = heapFloat[(r7)];
+ f2 = heapFloat[(r9+1)];
+ f3 = heapFloat[(r7+1)];
+ f4 = heapFloat[(r7+4)];
+ f5 = heapFloat[(r7+5)];
+ f6 = f1*f0;
+ f7 = f3*f2;
+ f8 = heapFloat[(r9+2)];
+ f9 = heapFloat[(r7+2)];
+ f10 = heapFloat[(r7+8)];
+ f11 = heapFloat[(r7+9)];
+ f12 = heapFloat[(r7+6)];
+ f13 = f4*f0;
+ f14 = f5*f2;
+ f6 = f6+f7;
+ f7 = f9*f8;
+ f15 = heapFloat[(r7+10)];
+ f0 = f10*f0;
+ f2 = f11*f2;
+ f13 = f13+f14;
+ f14 = f12*f8;
+ f6 = f6+f7;
+ f7 = heapFloat[(r7+12)];
+ f16 = heapFloat[(r7+14)];
+ f17 = heapFloat[(r7+13)];
+ r7 = sp + -1312;
+ f13 = f13+f14;
+ f0 = f0+f2;
+ f2 = f15*f8;
+ f6 = f6+f7;
+ f0 = f0+f2;
+ r9 = r7 >> 2;
+ f2 = f13+f17;
+ heapFloat[(fp+-328)] = f6;
+ f0 = f0+f16;
+ heapFloat[(r9+1)] = f2;
+ heapFloat[(r9+2)] = f0;
+ heap32[(r9+3)] = 0;
+ r8 = r8 >> 2;
+ f0 = heapFloat[(fp+-324)];
+ f2 = heapFloat[(r8+1)];
+ f6 = heapFloat[(r8+2)];
+ f1 = f1*f0;
+ f3 = f3*f2;
+ f4 = f4*f0;
+ f5 = f5*f2;
+ f1 = f1+f3;
+ f3 = f9*f6;
+ f1 = f1+f3;
+ f0 = f10*f0;
+ f2 = f11*f2;
+ f3 = f4+f5;
+ f4 = f12*f6;
+ r8 = sp + -1328;
+ f3 = f3+f4;
+ f0 = f0+f2;
+ f2 = f15*f6;
+ f1 = f1+f7;
+ f0 = f0+f2;
+ r9 = r8 >> 2;
+ f2 = f3+f17;
+ heapFloat[(fp+-332)] = f1;
+ f0 = f0+f16;
+ heapFloat[(r9+1)] = f2;
+ heapFloat[(r9+2)] = f0;
+ heap32[(r9+3)] = 0;
+ r9 = heap32[(r1)];
+ r9 = r9 >> 2;
+ r9 = heap32[(r9+4)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r9)>>2](i7);
+ r10 = r_g0 >> 2;
+ r10 = heap32[(r10)];
+ r10 = r10 >> 2;
+ r10 = heap32[(r10+2)];
+ heap32[(g0)] = r_g0;
+ heap32[(g0+1)] = r7;
+ heap32[(g0+2)] = r8;
+ heap32[(g0+3)] = r6;
+ __FUNCTION_TABLE__[(r10)>>2](i7);
+ r7 = heap32[(r5)];
+ r7 = r7 >> 2;
+ r7 = heap32[(r7+22)];
+ r3 = (r3 + 1)|0;
+ heap32[(g0)] = r2;
+ __FUNCTION_TABLE__[(r7)>>2](i7);
+ r7 = r_g0;
+ if(r7 >r3) //_LBB222_41
+{
+continue _52;
+}
+else{
+__label__ = 40;
+break _41;
+}
+}
+}
+}
+break;
+}
+} while(0);
+switch(__label__ ){//multiple entries
+case 31:
+ heap32[(g0+3)] = r6;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+ return;
+break;
+case 40:
+ return;
+break;
+}
+}
+
+function _ZNK16btCollisionWorld7rayTestERK9btVector3S2_RNS_17RayResultCallbackE(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+var __label__ = 0;
+ i7 = sp + -280;var g0 = i7>>2; // save stack
+ r0 = _ZTV19btSingleRayCallback;
+ r1 = heap32[(fp+1)];
+ r0 = (r0 + 8)|0;
+ r2 = sp + -256;
+ r3 = r1 >> 2;
+ heap32[(fp+-64)] = r0;
+ r0 = r2 >> 2;
+ f0 = heapFloat[(r3)];
+ heapFloat[(r0+9)] = f0;
+ f1 = heapFloat[(r3+1)];
+ heapFloat[(r0+10)] = f1;
+ f2 = heapFloat[(r3+2)];
+ heapFloat[(r0+11)] = f2;
+ r4 = heap32[(fp+2)];
+ f3 = heapFloat[(r3+3)];
+ r3 = r4 >> 2;
+ heapFloat[(r0+12)] = f3;
+ f4 = heapFloat[(r3)];
+ heapFloat[(r0+13)] = f4;
+ f5 = heapFloat[(r3+1)];
+ heapFloat[(r0+14)] = f5;
+ f6 = heapFloat[(r3+2)];
+ heapFloat[(r0+15)] = f6;
+ f7 = heapFloat[(r3+3)];
+ r3 = heap32[(fp)];
+ heapFloat[(r0+16)] = f7;
+ r5 = heap32[(fp+3)];
+ heap32[(r0+53)] = r3;
+ heap32[(r0+54)] = r5;
+ heap32[(r0+17)] = 1065353216;
+ heap32[(r0+18)] = 0;
+ heap32[(r0+19)] = 0;
+ heap32[(r0+20)] = 0;
+ heap32[(r0+21)] = 0;
+ heap32[(r0+22)] = 1065353216;
+ heap32[(r0+23)] = 0;
+ heap32[(r0+24)] = 0;
+ heap32[(r0+25)] = 0;
+ heap32[(r0+26)] = 0;
+ heap32[(r0+27)] = 1065353216;
+ heap32[(r0+28)] = 0;
+ heapFloat[(r0+29)] = f0;
+ heapFloat[(r0+30)] = f1;
+ heapFloat[(r0+31)] = f2;
+ heapFloat[(r0+32)] = f3;
+ heap32[(r0+33)] = 1065353216;
+ heap32[(r0+34)] = 0;
+ heap32[(r0+35)] = 0;
+ heap32[(r0+36)] = 0;
+ heap32[(r0+37)] = 0;
+ heap32[(r0+38)] = 1065353216;
+ heap32[(r0+39)] = 0;
+ heap32[(r0+40)] = 0;
+ heap32[(r0+41)] = 0;
+ heap32[(r0+42)] = 0;
+ heap32[(r0+43)] = 1065353216;
+ heap32[(r0+44)] = 0;
+ heapFloat[(r0+45)] = f4;
+ f0 = f4-f0;
+ heapFloat[(r0+46)] = f5;
+ f1 = f5-f1;
+ heapFloat[(r0+47)] = f6;
+ f2 = f6-f2;
+ f3 = f0*f0;
+ f4 = f1*f1;
+ heapFloat[(r0+48)] = f7;
+ f3 = f3+f4;
+ f4 = f2*f2;
+ f3 = f3+f4;
+ heapFloat[(g0)] = f3;
+ f3 = 1;
+ sqrtf(i7);
+ f4 = f3/f_g0;
+ f0 = f0*f4;
+ f1 = f1*f4;
+ f2 = f2*f4;
+ f4 = 0;
+ if(f0 !=f4) //_LBB223_2
+{
+ f5 = f3/f0;
+}
+else{
+ f5 = 999999984306749440;
+}
+ heapFloat[(r0+1)] = f5;
+ if(f1 !=f4) //_LBB223_5
+{
+ f6 = f3/f1;
+}
+else{
+ f6 = 999999984306749440;
+}
+ heapFloat[(r0+2)] = f6;
+ if(f2 !=f4) //_LBB223_8
+{
+ f3 = f3/f2;
+}
+else{
+ f3 = 999999984306749440;
+}
+ r5 = f5 < f4;
+ r6 = f6 < f4;
+ r5 = r5 & 1;
+ heapFloat[(r0+3)] = f3;
+ r7 = f3 < f4;
+ r6 = r6 & 1;
+ heap32[(r0+5)] = r5;
+ r5 = r7 & 1;
+ heap32[(r0+6)] = r6;
+ heap32[(r0+7)] = r5;
+ f3 = heapFloat[(r0+14)];
+ f4 = heapFloat[(r0+10)];
+ f5 = heapFloat[(r0+13)];
+ f6 = heapFloat[(r0+9)];
+ f5 = f5-f6;
+ f3 = f3-f4;
+ f4 = heapFloat[(r0+15)];
+ f6 = heapFloat[(r0+11)];
+ f0 = f0*f5;
+ f1 = f1*f3;
+ f3 = f4-f6;
+ f0 = f0+f1;
+ f1 = f2*f3;
+ f0 = f0+f1;
+ r3 = r3 >> 2;
+ heapFloat[(r0+8)] = f0;
+ r0 = heap32[(r3+20)];
+ r3 = r0 >> 2;
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3+6)];
+ r5 = sp + -32;
+ r6 = r5 >> 2;
+ heap32[(fp+-8)] = 0;
+ heap32[(r6+1)] = 0;
+ heap32[(r6+2)] = 0;
+ r7 = sp + -16;
+ heap32[(r6+3)] = 0;
+ r6 = r7 >> 2;
+ heap32[(fp+-4)] = 0;
+ heap32[(r6+1)] = 0;
+ heap32[(r6+2)] = 0;
+ heap32[(r6+3)] = 0;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = r4;
+ heap32[(g0+3)] = r2;
+ heap32[(g0+4)] = r7;
+ heap32[(g0+5)] = r5;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ return;
+}
+
+function _ZN16btCollisionWorld18addCollisionObjectEP17btCollisionObjectss(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+var __label__ = 0;
+ i7 = sp + -136;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ if(r0 !=0) //_LBB224_2
+{
+ r1 = heap32[(fp)];
+ r2 = heap32[(fp+2)];
+ r3 = heap32[(fp+3)];
+ r4 = r1 >> 2;
+ r5 = heap32[(r4+2)];
+ r6 = 0;
+_3: while(true){
+ if(r5 >r6) //_LBB224_3
+{
+ r7 = heap32[(r4+4)];
+ r8 = r6 << 2;
+ r7 = (r7 + r8)|0;
+ r7 = r7 >> 2;
+ r7 = heap32[(r7)];
+ if(r7 ==r0) //_LBB224_6
+{
+__label__ = 6;
+break _3;
+}
+else{
+ r6 = (r6 + 1)|0;
+}
+}
+else{
+__label__ = 8;
+break _3;
+}
+}
+if (__label__ == 6){
+if(!(r5 ==r6)) //_LBB224_8
+{
+ r0 = _2E_str988;
+ r1 = _2E_str887;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 114;
+ _assert(i7);
+}
+}
+ r6 = heap32[(r4+3)];
+ if(r6 ==r5) //_LBB224_10
+{
+ r7 = 1;
+ r8 = r5 << 1;
+ r8 = r5 == 0 ? r7 : r8;
+if(!(r6 >=r8)) //_LBB224_9
+{
+ if(r8 !=0) //_LBB224_13
+{
+ r6 = gNumAlignedAllocs;
+ r6 = r6 >> 2;
+ r9 = heap32[(r6)];
+ r10 = r8 << 2;
+ r9 = (r9 + 1)|0;
+ r10 = r10 | 3;
+ heap32[(r6)] = r9;
+ r6 = (r10 + 16)|0;
+ heap32[(g0)] = r6;
+ malloc(i7);
+ r6 = r_g0;
+ if(r6 !=0) //_LBB224_15
+{
+ r9 = 0;
+ r10 = (r6 + 4)|0;
+ r9 = (r9 - r10)|0;
+ r9 = r9 & 15;
+ r9 = (r6 + r9)|0;
+ r10 = (r9 + 4)|0;
+ r9 = r9 >> 2;
+ heap32[(r9)] = r6;
+ r6 = r10;
+}
+}
+else{
+ r6 = 0;
+}
+_19: do {
+ if(r5 <1) //_LBB224_18
+{
+ r10 = heap32[(r4+4)];
+}
+else{
+ r9 = 0;
+_22: while(true){
+ r10 = heap32[(r4+4)];
+ r11 = r9 << 2;
+ r12 = (r10 + r11)|0;
+ r12 = r12 >> 2;
+ r11 = (r6 + r11)|0;
+ r12 = heap32[(r12)];
+ r9 = (r9 + 1)|0;
+ r11 = r11 >> 2;
+ heap32[(r11)] = r12;
+if(!(r5 !=r9)) //_LBB224_19
+{
+break _19;
+}
+}
+}
+} while(0);
+ if(r10 !=0) //_LBB224_22
+{
+ r9 = heapU8[r1+20];
+ if(r9 !=0) //_LBB224_24
+{
+ r5 = gNumAlignedFree;
+ r5 = r5 >> 2;
+ r9 = heap32[(r5)];
+ r9 = (r9 + 1)|0;
+ r10 = r10 >> 2;
+ heap32[(r5)] = r9;
+ r5 = heap32[(r10+-1)];
+ heap32[(g0)] = r5;
+ free(i7);
+ r5 = heap32[(r4+2)];
+}
+ heap32[(r4+4)] = 0;
+}
+ heap8[r1+20] = r7;
+ heap32[(r4+4)] = r6;
+ heap32[(r4+3)] = r8;
+}
+}
+ r1 = r5 << 2;
+ r5 = heap32[(r4+4)];
+ r1 = (r5 + r1)|0;
+ r1 = r1 >> 2;
+ heap32[(r1)] = r0;
+ r1 = heap32[(r4+2)];
+ r1 = (r1 + 1)|0;
+ r5 = sp + -64;
+ r6 = r0 >> 2;
+ heap32[(r4+2)] = r1;
+ r1 = r5 >> 2;
+ heap32[(fp+-16)] = heap32[(r6+1)];
+ heap32[(r1+1)] = heap32[(r6+2)];
+ heap32[(r1+2)] = heap32[(r6+3)];
+ heap32[(r1+3)] = heap32[(r6+4)];
+ heap32[(r1+4)] = heap32[(r6+5)];
+ heap32[(r1+5)] = heap32[(r6+6)];
+ heap32[(r1+6)] = heap32[(r6+7)];
+ heap32[(r1+7)] = heap32[(r6+8)];
+ heap32[(r1+8)] = heap32[(r6+9)];
+ heap32[(r1+9)] = heap32[(r6+10)];
+ heap32[(r1+10)] = heap32[(r6+11)];
+ heap32[(r1+11)] = heap32[(r6+12)];
+ heap32[(r1+12)] = heap32[(r6+13)];
+ heap32[(r1+13)] = heap32[(r6+14)];
+ heap32[(r1+14)] = heap32[(r6+15)];
+ heap32[(r1+15)] = heap32[(r6+16)];
+ r1 = heap32[(r6+48)];
+ r7 = r1 >> 2;
+ r7 = heap32[(r7)];
+ r7 = r7 >> 2;
+ r7 = heap32[(r7+2)];
+ r8 = sp + -80;
+ r9 = sp + -96;
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r5;
+ heap32[(g0+2)] = r8;
+ heap32[(g0+3)] = r9;
+ __FUNCTION_TABLE__[(r7)>>2](i7);
+ r1 = heap32[(r4+20)];
+ r5 = r1 >> 2;
+ r7 = heap32[(r6+48)];
+ r5 = heap32[(r5)];
+ r5 = r5 >> 2;
+ r7 = r7 >> 2;
+ r5 = heap32[(r5+2)];
+ r7 = heap32[(r7+1)];
+ r4 = heap32[(r4+6)];
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r8;
+ heap32[(g0+2)] = r9;
+ heap32[(g0+3)] = r7;
+ heap32[(g0+4)] = r0;
+ heap32[(g0+5)] = r2;
+ heap32[(g0+6)] = r3;
+ heap32[(g0+7)] = r4;
+ heap32[(g0+8)] = 0;
+ __FUNCTION_TABLE__[(r5)>>2](i7);
+ heap32[(r6+47)] = r_g0;
+ return;
+}
+else{
+ r0 = _2E_str786;
+ r1 = _2E_str887;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 111;
+ _assert(i7);
+}
+}
+
+function _ZN16btCollisionWorld21removeCollisionObjectEP17btCollisionObject(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ r1 = r0 >> 2;
+ r2 = heap32[(r1+47)];
+ r3 = heap32[(fp)];
+if(!(r2 ==0)) //_LBB225_2
+{
+ r4 = r3 >> 2;
+ r5 = heap32[(r4+20)];
+ r6 = r5 >> 2;
+ r6 = heap32[(r6)];
+ r6 = r6 >> 2;
+ r6 = heap32[(r6+9)];
+ heap32[(g0)] = r5;
+ __FUNCTION_TABLE__[(r6)>>2](i7);
+ r6 = r_g0 >> 2;
+ r6 = heap32[(r6)];
+ r6 = r6 >> 2;
+ r6 = heap32[(r6+10)];
+ r7 = heap32[(r4+6)];
+ heap32[(g0)] = r_g0;
+ heap32[(g0+1)] = r2;
+ heap32[(g0+2)] = r7;
+ __FUNCTION_TABLE__[(r6)>>2](i7);
+ r5 = heap32[(r4+20)];
+ r6 = r5 >> 2;
+ r6 = heap32[(r6)];
+ r6 = r6 >> 2;
+ r6 = heap32[(r6+3)];
+ r4 = heap32[(r4+6)];
+ heap32[(g0)] = r5;
+ heap32[(g0+1)] = r2;
+ heap32[(g0+2)] = r4;
+ __FUNCTION_TABLE__[(r6)>>2](i7);
+ heap32[(r1+47)] = 0;
+}
+ r1 = r3 >> 2;
+ r2 = heap32[(r1+2)];
+ r3 = 0;
+_4: while(true){
+ if(r2 >r3) //_LBB225_3
+{
+ r4 = heap32[(r1+4)];
+ r5 = r3 << 2;
+ r4 = (r4 + r5)|0;
+ r4 = r4 >> 2;
+ r4 = heap32[(r4)];
+ if(r4 !=r0) //_LBB225_5
+{
+ r3 = (r3 + 1)|0;
+continue _4;
+}
+else{
+__label__ = 7;
+break _4;
+}
+}
+else{
+__label__ = 6;
+break _4;
+}
+}
+if (__label__ == 6){
+ r3 = r2;
+}
+if(!(r2 <=r3)) //_LBB225_10
+{
+ r0 = (r2 + -1)|0;
+ r2 = r3 << 2;
+ r3 = heap32[(r1+4)];
+ r0 = r0 << 2;
+ r2 = (r3 + r2)|0;
+ r3 = (r3 + r0)|0;
+ r2 = r2 >> 2;
+ r3 = r3 >> 2;
+ r4 = heap32[(r2)];
+ r3 = heap32[(r3)];
+ heap32[(r2)] = r3;
+ r2 = heap32[(r1+4)];
+ r0 = (r2 + r0)|0;
+ r0 = r0 >> 2;
+ heap32[(r0)] = r4;
+ r0 = heap32[(r1+2)];
+ r0 = (r0 + -1)|0;
+ heap32[(r1+2)] = r0;
+}
+ return;
+}
+
+function _ZN16btCollisionWorld33performDiscreteCollisionDetectionEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var f0;
+ var f1;
+ var f2;
+var __label__ = 0;
+ i7 = sp + -40;var g0 = i7>>2; // save stack
+ r0 = _2E_str1190;
+ r1 = heap32[(fp)];
+ heap32[(g0)] = r0;
+ _ZN15CProfileManager13Start_ProfileEPKc(i7);
+ r0 = r1 >> 2;
+ r2 = heap32[(r0)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+2)];
+ heap32[(g0)] = r1;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ r2 = _2E_str1291;
+ heap32[(g0)] = r2;
+ _ZN15CProfileManager13Start_ProfileEPKc(i7);
+ r2 = heap32[(r0+20)];
+ r3 = r2 >> 2;
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3+8)];
+ r4 = heap32[(r0+6)];
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = r4;
+ r2 = _ZN15CProfileManager11CurrentNodeE;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ r2 = r2 >> 2;
+ r3 = heap32[(r2)];
+ r4 = r3 >> 2;
+ r5 = heap32[(r4+4)];
+ r5 = (r5 + -1)|0;
+ heap32[(r4+4)] = r5;
+_1: do {
+if(!(r5 !=0)) //_LBB226_6
+{
+ r5 = heap32[(r4+1)];
+ if(r5 !=0) //_LBB226_3
+{
+ r3 = sp + -24;
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = 0;
+ r5 = _ZL13gProfileClock_2E_0;
+ gettimeofday(i7);
+ r5 = r5 >> 2;
+ r5 = heap32[(r5)];
+ r5 = r5 >> 2;
+ r3 = r3 >> 2;
+ r6 = heap32[(fp+-6)];
+ r7 = heap32[(r5)];
+ r6 = (r6 - r7)|0;
+ r3 = heap32[(r3+1)];
+ r5 = heap32[(r5+1)];
+ r3 = (r3 - r5)|0;
+ r5 = (r6 * 1000000)|0;
+ r3 = (r3 + r5)|0;
+ r5 = heap32[(r4+3)];
+ r3 = (r3 - r5)|0;
+ f0 = uint(r3); //fuitos r3, f0
+ f1 = 1000;
+ f2 = heapFloat[(r4+2)];
+ f0 = f0/f1;
+ f0 = f2+f0;
+ heapFloat[(r4+2)] = f0;
+ r3 = heap32[(r4+4)];
+ if(r3 !=0) //_LBB226_6
+{
+break _1;
+}
+else{
+ r3 = heap32[(r2)];
+}
+}
+ r3 = r3 >> 2;
+ r3 = heap32[(r3+5)];
+ heap32[(r2)] = r3;
+}
+} while(0);
+ r3 = heap32[(r0+6)];
+ r4 = _2E_str1392;
+ heap32[(g0)] = r4;
+ _ZN15CProfileManager13Start_ProfileEPKc(i7);
+if(!(r3 ==0)) //_LBB226_8
+{
+ r4 = heap32[(r0+20)];
+ r5 = r3 >> 2;
+ r6 = r4 >> 2;
+ r5 = heap32[(r5)];
+ r6 = heap32[(r6)];
+ r5 = r5 >> 2;
+ r6 = r6 >> 2;
+ r5 = heap32[(r5+8)];
+ r0 = heap32[(r0+6)];
+ r6 = heap32[(r6+9)];
+ heap32[(g0)] = r4;
+ __FUNCTION_TABLE__[(r6)>>2](i7);
+ r1 = (r1 + 28)|0;
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r_g0;
+ heap32[(g0+2)] = r1;
+ heap32[(g0+3)] = r0;
+ __FUNCTION_TABLE__[(r5)>>2](i7);
+}
+ r0 = heap32[(r2)];
+ r1 = r0 >> 2;
+ r3 = heap32[(r1+4)];
+ r3 = (r3 + -1)|0;
+ heap32[(r1+4)] = r3;
+_11: do {
+ if(r3 ==0) //_LBB226_10
+{
+ r3 = heap32[(r1+1)];
+ if(r3 !=0) //_LBB226_12
+{
+ r0 = sp + -16;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = 0;
+ r3 = _ZL13gProfileClock_2E_0;
+ gettimeofday(i7);
+ r3 = r3 >> 2;
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r0 = r0 >> 2;
+ r4 = heap32[(fp+-4)];
+ r5 = heap32[(r3)];
+ r4 = (r4 - r5)|0;
+ r0 = heap32[(r0+1)];
+ r3 = heap32[(r3+1)];
+ r0 = (r0 - r3)|0;
+ r3 = (r4 * 1000000)|0;
+ r0 = (r0 + r3)|0;
+ r3 = heap32[(r1+3)];
+ r0 = (r0 - r3)|0;
+ f0 = uint(r0); //fuitos r0, f0
+ f1 = 1000;
+ f2 = heapFloat[(r1+2)];
+ f0 = f0/f1;
+ f0 = f2+f0;
+ heapFloat[(r1+2)] = f0;
+ r0 = heap32[(r2)];
+ r1 = heap32[(r1+4)];
+if(!(r1 ==0)) //_LBB226_14
+{
+break _11;
+}
+}
+ r0 = r0 >> 2;
+ r0 = heap32[(r0+5)];
+ heap32[(r2)] = r0;
+}
+} while(0);
+ r1 = r0 >> 2;
+ r3 = heap32[(r1+4)];
+ r3 = (r3 + -1)|0;
+ heap32[(r1+4)] = r3;
+_17: do {
+if(!(r3 !=0)) //_LBB226_21
+{
+ r3 = heap32[(r1+1)];
+ if(r3 !=0) //_LBB226_18
+{
+ r0 = sp + -8;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = 0;
+ r3 = _ZL13gProfileClock_2E_0;
+ gettimeofday(i7);
+ r3 = r3 >> 2;
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r0 = r0 >> 2;
+ r4 = heap32[(fp+-2)];
+ r5 = heap32[(r3)];
+ r4 = (r4 - r5)|0;
+ r0 = heap32[(r0+1)];
+ r3 = heap32[(r3+1)];
+ r0 = (r0 - r3)|0;
+ r3 = (r4 * 1000000)|0;
+ r0 = (r0 + r3)|0;
+ r3 = heap32[(r1+3)];
+ r0 = (r0 - r3)|0;
+ f0 = uint(r0); //fuitos r0, f0
+ f1 = 1000;
+ f2 = heapFloat[(r1+2)];
+ f0 = f0/f1;
+ f0 = f2+f0;
+ heapFloat[(r1+2)] = f0;
+ r0 = heap32[(r1+4)];
+ if(r0 !=0) //_LBB226_21
+{
+break _17;
+}
+else{
+ r0 = heap32[(r2)];
+}
+}
+ r0 = r0 >> 2;
+ r0 = heap32[(r0+5)];
+ heap32[(r2)] = r0;
+}
+} while(0);
+ return;
+}
+
+function _ZN16btCollisionWorld9serializeEP12btSerializer(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ r1 = r0 >> 2;
+ r2 = heap32[(r1)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+8)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ r2 = heap32[(fp)];
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = r0;
+ _ZN16btCollisionWorld25serializeCollisionObjectsEP12btSerializer(i7);
+ r1 = heap32[(r1)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+9)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+ return;
+}
+
+function _ZN21btSingleSweepCallbackD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV21btSingleSweepCallback;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZN21btSingleSweepCallbackD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV21btSingleSweepCallback;
+ r0 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r0)] = r1;
+ return;
+}
+
+function _ZN21btSingleSweepCallback7processEPK17btBroadphaseProxy(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var f0;
+ var f1;
+var __label__ = 0;
+ i7 = sp + -32;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ r2 = heap32[(r1+46)];
+ r3 = r2 >> 2;
+ f0 = heapFloat[(r3+1)];
+ f1 = 0;
+ if(f0 !=f1) //_LBB230_2
+{
+ r4 = heap32[(fp+1)];
+ r4 = r4 >> 2;
+ r4 = heap32[(r4)];
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r5 = r4 >> 2;
+ r3 = heap32[(r3+2)];
+ r6 = heap32[(r5+47)];
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = r6;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ r2 = r_g0;
+ if(r2 !=0) //_LBB230_4
+{
+ f0 = heapFloat[(r1+47)];
+ r2 = heap32[(r1+46)];
+ r3 = heap32[(r5+48)];
+ r1 = heap32[(r1+48)];
+ r5 = (r0 + 36)|0;
+ r0 = (r0 + 100)|0;
+ r6 = (r4 + 4)|0;
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r5;
+ heap32[(g0+2)] = r0;
+ heap32[(g0+3)] = r4;
+ heap32[(g0+4)] = r3;
+ heap32[(g0+5)] = r6;
+ heap32[(g0+6)] = r2;
+ heapFloat[(g0+7)] = f0;
+ _ZN16btCollisionWorld17objectQuerySingleEPK13btConvexShapeRK11btTransformS5_P17btCollisionObjectPK16btCollisionShapeS5_RNS_20ConvexResultCallbackEf(i7);
+ r0 = 1;
+ r_g0 = r0;
+ return;
+}
+else{
+ r0 = 1;
+}
+}
+else{
+ r0 = 0;
+}
+ r0 = r0 & 255;
+ r_g0 = r0;
+ return;
+}
+
+function _ZN19btSingleRayCallbackD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV19btSingleRayCallback;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZN19btSingleRayCallbackD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV19btSingleRayCallback;
+ r0 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r0)] = r1;
+ return;
+}
+
+function _ZN19btSingleRayCallback7processEPK17btBroadphaseProxy(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var f0;
+ var f1;
+var __label__ = 0;
+ i7 = sp + -24;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ r2 = heap32[(r1+54)];
+ r3 = r2 >> 2;
+ f0 = heapFloat[(r3+1)];
+ f1 = 0;
+ if(f0 !=f1) //_LBB233_2
+{
+ r4 = heap32[(fp+1)];
+ r4 = r4 >> 2;
+ r4 = heap32[(r4)];
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r5 = r4 >> 2;
+ r3 = heap32[(r3+2)];
+ r6 = heap32[(r5+47)];
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = r6;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ r2 = r_g0;
+ if(r2 !=0) //_LBB233_4
+{
+ r1 = heap32[(r1+54)];
+ r2 = heap32[(r5+48)];
+ r3 = (r0 + 68)|0;
+ r0 = (r0 + 132)|0;
+ r5 = (r4 + 4)|0;
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r0;
+ heap32[(g0+2)] = r4;
+ heap32[(g0+3)] = r2;
+ heap32[(g0+4)] = r5;
+ heap32[(g0+5)] = r1;
+ _ZN16btCollisionWorld13rayTestSingleERK11btTransformS2_P17btCollisionObjectPK16btCollisionShapeS2_RNS_17RayResultCallbackE(i7);
+ r0 = 1;
+ r_g0 = r0;
+ return;
+}
+else{
+ r0 = 1;
+}
+}
+else{
+ r0 = 0;
+}
+ r0 = r0 & 255;
+ r_g0 = r0;
+ return;
+}
+
+function _ZN16btCollisionWorldD2Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV16btCollisionWorld;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ r1 = heap32[(r2+4)];
+ r3 = heap32[(r2+2)];
+ if(r3 >0) //_LBB234_2
+{
+ r3 = 0;
+_3: while(true){
+ r4 = r3 << 2;
+ r1 = (r1 + r4)|0;
+ r1 = r1 >> 2;
+ r1 = heap32[(r1)];
+ r1 = r1 >> 2;
+ r4 = heap32[(r1+47)];
+if(!(r4 ==0)) //_LBB234_5
+{
+ r5 = heap32[(r2+20)];
+ r6 = r5 >> 2;
+ r6 = heap32[(r6)];
+ r6 = r6 >> 2;
+ r6 = heap32[(r6+9)];
+ heap32[(g0)] = r5;
+ __FUNCTION_TABLE__[(r6)>>2](i7);
+ r6 = r_g0 >> 2;
+ r6 = heap32[(r6)];
+ r6 = r6 >> 2;
+ r6 = heap32[(r6+10)];
+ r7 = heap32[(r2+6)];
+ heap32[(g0)] = r_g0;
+ heap32[(g0+1)] = r4;
+ heap32[(g0+2)] = r7;
+ __FUNCTION_TABLE__[(r6)>>2](i7);
+ r5 = heap32[(r2+20)];
+ r6 = r5 >> 2;
+ r6 = heap32[(r6)];
+ r6 = r6 >> 2;
+ r6 = heap32[(r6+3)];
+ r7 = heap32[(r2+6)];
+ heap32[(g0)] = r5;
+ heap32[(g0+1)] = r4;
+ heap32[(g0+2)] = r7;
+ __FUNCTION_TABLE__[(r6)>>2](i7);
+ heap32[(r1+47)] = 0;
+}
+ r3 = (r3 + 1)|0;
+ r1 = heap32[(r2+4)];
+ r4 = heap32[(r2+2)];
+ if(r4 >r3) //_LBB234_3
+{
+continue _3;
+}
+else{
+break _3;
+}
+}
+}
+if(!(r1 ==0)) //_LBB234_10
+{
+ r3 = heapU8[r0+20];
+if(!(r3 ==0)) //_LBB234_9
+{
+ r3 = gNumAlignedFree;
+ r3 = r3 >> 2;
+ r4 = heap32[(r3)];
+ r4 = (r4 + 1)|0;
+ r1 = r1 >> 2;
+ heap32[(r3)] = r4;
+ r1 = heap32[(r1+-1)];
+ heap32[(g0)] = r1;
+ free(i7);
+}
+ heap32[(r2+4)] = 0;
+}
+ r1 = 1;
+ heap8[r0+20] = r1;
+ heap32[(r2+4)] = 0;
+ heap32[(r2+2)] = 0;
+ heap32[(r2+3)] = 0;
+ return;
+}
+
+function _ZN16btCollisionWorld25serializeCollisionObjectsEP12btSerializer(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+ var r13;
+ var r14;
+ var r15;
+ var r16;
+ var r17;
+ var r18;
+ var r19;
+ var r20;
+ var r21;
+ var r22;
+ var r23;
+ var r24;
+ var r25;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r1 = heap32[(r0+2)];
+if(!(r1 <1)) //_LBB235_110
+{
+ r1 = heap32[(fp+1)];
+ heap32[(fp+-2)] = r1;
+ r1 = 0;
+_3: while(true){
+ r2 = heap32[(r0+4)];
+ r3 = r1 << 2;
+ r2 = (r2 + r3)|0;
+ r2 = r2 >> 2;
+ r2 = heap32[(r2)];
+ r3 = r2 >> 2;
+ r4 = heap32[(r3+58)];
+if(!(r4 !=1)) //_LBB235_4
+{
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3+6)];
+ heap32[(g0)] = r2;
+ r2 = heap32[(fp+-2)];
+ heap32[(g0+1)] = r2;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+}
+ r1 = (r1 + 1)|0;
+ r2 = heap32[(r0+2)];
+if(!(r2 >r1)) //_LBB235_2
+{
+break _3;
+}
+}
+if(!(r2 <1)) //_LBB235_110
+{
+ r1 = 0;
+ r2 = r1;
+ r3 = r1;
+ r4 = r1;
+ r5 = r1;
+ r6 = r1;
+ heap32[(fp+-1)] = r1;
+ r7 = r1;
+ r8 = r1;
+ r9 = r1;
+ r10 = r1;
+ r11 = r1;
+ r12 = r1;
+_10: while(true){
+ r13 = heap32[(r0+4)];
+ r14 = r12 << 2;
+ r13 = (r13 + r14)|0;
+ r13 = r13 >> 2;
+ r13 = heap32[(r13)];
+ r13 = r13 >> 2;
+ r13 = heap32[(r13+48)];
+ r14 = r13 << 15;
+ r14 = r14 ^ -1;
+ r14 = (r13 + r14)|0;
+ r15 = r14 >> 10;
+ r14 = r15 ^ r14;
+ r14 = (r14 * 9)|0;
+ r15 = r14 >> 6;
+ r14 = r15 ^ r14;
+ r15 = r14 << 11;
+ r15 = r15 ^ -1;
+ r14 = (r14 + r15)|0;
+ r15 = r14 >> 16;
+ r14 = r15 ^ r14;
+ r15 = (r4 + -1)|0;
+ r15 = r14 & r15;
+ r12 = (r12 + 1)|0;
+_12: do {
+ if(uint(r10) <=uint(r15)) //_LBB235_20
+{
+__label__ = 19;
+}
+else{
+ r16 = r15 << 2;
+ r17 = (r8 + r16)|0;
+_14: while(true){
+ r17 = r17 >> 2;
+ r17 = heap32[(r17)];
+ if(r17 ==-1) //_LBB235_14
+{
+__label__ = 13;
+break _14;
+}
+else{
+ r18 = r17 << 3;
+ r18 = (r11 + r18)|0;
+ r18 = r18 >> 2;
+ r18 = heap32[(r18)];
+ if(r13 !=r18) //_LBB235_9
+{
+ r17 = r17 << 2;
+ r17 = (r6 + r17)|0;
+}
+else{
+__label__ = 12;
+break _14;
+}
+}
+}
+if (__label__ == 12){
+ r17 = r17 << 2;
+ r17 = (r3 + r17)|0;
+if(!(r17 ==0)) //_LBB235_14
+{
+__label__ = 89;
+break _12;
+}
+}
+ if(uint(r10) <=uint(r15)) //_LBB235_20
+{
+__label__ = 19;
+}
+else{
+ r16 = (r8 + r16)|0;
+_22: while(true){
+ r16 = r16 >> 2;
+ r16 = heap32[(r16)];
+ if(r16 ==-1) //_LBB235_20
+{
+__label__ = 19;
+break _12;
+}
+else{
+ r17 = r16 << 3;
+ r17 = (r11 + r17)|0;
+ r17 = r17 >> 2;
+ r17 = heap32[(r17)];
+ if(r13 !=r17) //_LBB235_16
+{
+ r16 = r16 << 2;
+ r16 = (r6 + r16)|0;
+}
+else{
+break _22;
+}
+}
+}
+ r14 = r16 << 2;
+ r14 = (r3 + r14)|0;
+ r14 = r14 >> 2;
+ heap32[(r14)] = r13;
+ r16 = r4;
+ r17 = r5;
+__label__ = 88;
+}
+}
+} while(0);
+if (__label__ == 19){
+ if(r4 ==r5) //_LBB235_22
+{
+ r16 = 1;
+ r17 = r5 << 1;
+ r16 = r5 == 0 ? r16 : r17;
+ if(r4 >=r16) //_LBB235_21
+{
+__label__ = 20;
+}
+else{
+ if(r16 !=0) //_LBB235_25
+{
+ r17 = gNumAlignedAllocs;
+ r17 = r17 >> 2;
+ r18 = heap32[(r17)];
+ r19 = r16 << 2;
+ r18 = (r18 + 1)|0;
+ r19 = r19 | 3;
+ heap32[(r17)] = r18;
+ r17 = (r19 + 16)|0;
+ heap32[(g0)] = r17;
+ malloc(i7);
+ r17 = r_g0;
+ if(r17 !=0) //_LBB235_27
+{
+ r18 = 0;
+ r19 = (r17 + 4)|0;
+ r18 = (r18 - r19)|0;
+ r18 = r18 & 15;
+ r18 = (r17 + r18)|0;
+ r19 = (r18 + 4)|0;
+ r18 = r18 >> 2;
+ heap32[(r18)] = r17;
+ r17 = r19;
+}
+}
+else{
+ r17 = 0;
+}
+_37: do {
+if(!(r5 <1)) //_LBB235_31
+{
+ r18 = r17;
+ r19 = r3;
+ r20 = r5;
+_39: while(true){
+ r21 = r19 >> 2;
+ r20 = (r20 + -1)|0;
+ r19 = (r19 + 4)|0;
+ r22 = (r18 + 4)|0;
+ r18 = r18 >> 2;
+ r21 = heap32[(r21)];
+ heap32[(r18)] = r21;
+ r18 = r22;
+if(!(r20 !=0)) //_LBB235_30
+{
+break _37;
+}
+}
+}
+} while(0);
+ if(r3 !=0) //_LBB235_33
+{
+ r18 = gNumAlignedFree;
+ r18 = r18 >> 2;
+ r19 = heap32[(r18)];
+ r19 = (r19 + 1)|0;
+ r3 = r3 >> 2;
+ heap32[(r18)] = r19;
+ r3 = heap32[(r3+-1)];
+ heap32[(g0)] = r3;
+ free(i7);
+ r3 = r17;
+__label__ = 32;
+}
+else{
+ r3 = r17;
+__label__ = 32;
+}
+}
+}
+else{
+__label__ = 20;
+}
+if (__label__ == 20){
+ r16 = r4;
+}
+ r18 = r5 << 2;
+ r19 = (r3 + r18)|0;
+ r17 = (r5 + 1)|0;
+ r19 = r19 >> 2;
+ heap32[(r19)] = r13;
+ if(r1 ==r2) //_LBB235_36
+{
+ r19 = 1;
+ r20 = r2 << 1;
+ r19 = r2 == 0 ? r19 : r20;
+if(!(r1 >=r19)) //_LBB235_35
+{
+ if(r19 !=0) //_LBB235_39
+{
+ r1 = gNumAlignedAllocs;
+ r1 = r1 >> 2;
+ r20 = heap32[(r1)];
+ r21 = r19 << 3;
+ r20 = (r20 + 1)|0;
+ r21 = r21 | 3;
+ heap32[(r1)] = r20;
+ r1 = (r21 + 16)|0;
+ heap32[(g0)] = r1;
+ malloc(i7);
+ r20 = r_g0;
+ if(r20 !=0) //_LBB235_41
+{
+ r1 = 0;
+ r21 = (r20 + 4)|0;
+ r1 = (r1 - r21)|0;
+ r1 = r1 & 15;
+ r1 = (r20 + r1)|0;
+ r21 = (r1 + 4)|0;
+ r1 = r1 >> 2;
+ heap32[(r1)] = r20;
+ r20 = r21;
+}
+}
+else{
+ r20 = 0;
+}
+_56: do {
+if(!(r2 <1)) //_LBB235_45
+{
+ r1 = (r11 + 4)|0;
+ r21 = (r20 + 4)|0;
+ r22 = r2;
+_58: while(true){
+ r23 = r1 >> 2;
+ r24 = heap32[(r23)];
+ r23 = heap32[(r23+-1)];
+ r25 = r21 >> 2;
+ r22 = (r22 + -1)|0;
+ r1 = (r1 + 8)|0;
+ r21 = (r21 + 8)|0;
+ heap32[(r25+-1)] = r23;
+ heap32[(r25)] = r24;
+if(!(r22 !=0)) //_LBB235_44
+{
+break _56;
+}
+}
+}
+} while(0);
+ if(r11 !=0) //_LBB235_47
+{
+ r1 = gNumAlignedFree;
+ r1 = r1 >> 2;
+ r21 = heap32[(r1)];
+ r21 = (r21 + 1)|0;
+ r11 = r11 >> 2;
+ heap32[(r1)] = r21;
+ r1 = heap32[(r11+-1)];
+ heap32[(g0)] = r1;
+ free(i7);
+ r1 = r19;
+ r11 = r20;
+}
+else{
+ r1 = r19;
+ r11 = r20;
+}
+}
+}
+ r19 = r2 << 3;
+ r19 = (r11 + r19)|0;
+ r2 = (r2 + 1)|0;
+ r19 = r19 >> 2;
+ heap32[(r19)] = r13;
+ if(r4 <r16) //_LBB235_50
+{
+ if(r10 <r16) //_LBB235_52
+{
+_69: do {
+ if(r10 <=r16) //_LBB235_54
+{
+ if(r9 <r16) //_LBB235_56
+{
+ if(r16 !=0) //_LBB235_58
+{
+ r4 = gNumAlignedAllocs;
+ r4 = r4 >> 2;
+ r9 = heap32[(r4)];
+ r15 = r16 << 2;
+ r9 = (r9 + 1)|0;
+ r15 = r15 | 3;
+ heap32[(r4)] = r9;
+ r4 = (r15 + 16)|0;
+ heap32[(g0)] = r4;
+ malloc(i7);
+ r4 = r_g0;
+ if(r4 !=0) //_LBB235_60
+{
+ r9 = 0;
+ r15 = (r4 + 4)|0;
+ r9 = (r9 - r15)|0;
+ r9 = r9 & 15;
+ r9 = (r4 + r9)|0;
+ r15 = (r9 + 4)|0;
+ r9 = r9 >> 2;
+ heap32[(r9)] = r4;
+ r4 = r15;
+}
+}
+else{
+ r4 = 0;
+}
+_78: do {
+if(!(r10 <1)) //_LBB235_64
+{
+ r9 = r4;
+ r15 = r8;
+ r19 = r10;
+_80: while(true){
+ r20 = r15 >> 2;
+ r19 = (r19 + -1)|0;
+ r15 = (r15 + 4)|0;
+ r21 = (r9 + 4)|0;
+ r9 = r9 >> 2;
+ r20 = heap32[(r20)];
+ heap32[(r9)] = r20;
+ r9 = r21;
+if(!(r19 !=0)) //_LBB235_63
+{
+break _78;
+}
+}
+}
+} while(0);
+ if(r8 !=0) //_LBB235_66
+{
+ r9 = gNumAlignedFree;
+ r9 = r9 >> 2;
+ r15 = heap32[(r9)];
+ r15 = (r15 + 1)|0;
+ r8 = r8 >> 2;
+ heap32[(r9)] = r15;
+ r8 = heap32[(r8+-1)];
+ heap32[(g0)] = r8;
+ free(i7);
+ r8 = r4;
+ r9 = r16;
+}
+else{
+ r8 = r4;
+ r9 = r16;
+}
+}
+ r4 = r10;
+_87: while(true){
+ r15 = r4 << 2;
+ r15 = (r8 + r15)|0;
+ r4 = (r4 + 1)|0;
+ r15 = r15 >> 2;
+ heap32[(r15)] = 0;
+if(!(r16 !=r4)) //_LBB235_68
+{
+break _69;
+}
+}
+}
+} while(0);
+_90: do {
+ if(r7 <=r16) //_LBB235_71
+{
+if(!(r7 >=r16)) //_LBB235_70
+{
+ r4 = heap32[(fp+-1)];
+ if(r4 <r16) //_LBB235_74
+{
+ if(r16 !=0) //_LBB235_76
+{
+ r4 = gNumAlignedAllocs;
+ r4 = r4 >> 2;
+ r15 = heap32[(r4)];
+ r19 = r16 << 2;
+ r15 = (r15 + 1)|0;
+ r19 = r19 | 3;
+ heap32[(r4)] = r15;
+ r4 = (r19 + 16)|0;
+ heap32[(g0)] = r4;
+ malloc(i7);
+ r4 = r_g0;
+ if(r4 !=0) //_LBB235_78
+{
+ r15 = 0;
+ r19 = (r4 + 4)|0;
+ r15 = (r15 - r19)|0;
+ r15 = r15 & 15;
+ r15 = (r4 + r15)|0;
+ r19 = (r15 + 4)|0;
+ r15 = r15 >> 2;
+ heap32[(r15)] = r4;
+ r4 = r19;
+}
+}
+else{
+ r4 = 0;
+}
+_100: do {
+if(!(r7 <1)) //_LBB235_82
+{
+ r15 = r4;
+ r19 = r6;
+ r20 = r7;
+_102: while(true){
+ r21 = r19 >> 2;
+ r20 = (r20 + -1)|0;
+ r19 = (r19 + 4)|0;
+ r22 = (r15 + 4)|0;
+ r15 = r15 >> 2;
+ r21 = heap32[(r21)];
+ heap32[(r15)] = r21;
+ r15 = r22;
+if(!(r20 !=0)) //_LBB235_81
+{
+break _100;
+}
+}
+}
+} while(0);
+if(!(r6 ==0)) //_LBB235_84
+{
+ r15 = gNumAlignedFree;
+ r15 = r15 >> 2;
+ r19 = heap32[(r15)];
+ r19 = (r19 + 1)|0;
+ r6 = r6 >> 2;
+ heap32[(r15)] = r19;
+ r6 = heap32[(r6+-1)];
+ heap32[(g0)] = r6;
+ free(i7);
+}
+ if(r7 <r16) //_LBB235_86
+{
+ r6 = r4;
+ heap32[(fp+-1)] = r16;
+}
+else{
+ r6 = r4;
+ heap32[(fp+-1)] = r16;
+break _90;
+}
+}
+_111: while(true){
+ r4 = r7 << 2;
+ r4 = (r6 + r4)|0;
+ r7 = (r7 + 1)|0;
+ r4 = r4 >> 2;
+ heap32[(r4)] = 0;
+if(!(r16 !=r7)) //_LBB235_87
+{
+break _90;
+}
+}
+}
+}
+} while(0);
+_114: do {
+if(!(r16 <1)) //_LBB235_94
+{
+ r4 = r8;
+ r7 = r16;
+_116: while(true){
+ r7 = (r7 + -1)|0;
+ r15 = (r4 + 4)|0;
+ r4 = r4 >> 2;
+ heap32[(r4)] = -1;
+ r4 = r15;
+if(!(r7 !=0)) //_LBB235_90
+{
+break _116;
+}
+}
+if(!(r16 <1)) //_LBB235_94
+{
+ r4 = r6;
+ r7 = r16;
+_120: while(true){
+ r7 = (r7 + -1)|0;
+ r15 = (r4 + 4)|0;
+ r4 = r4 >> 2;
+ heap32[(r4)] = -1;
+ r4 = r15;
+if(!(r7 !=0)) //_LBB235_93
+{
+break _114;
+}
+}
+}
+}
+} while(0);
+_123: do {
+ if(r10 >0) //_LBB235_96
+{
+ r4 = (r16 + -1)|0;
+ r7 = 0;
+_125: while(true){
+ r15 = r7 << 3;
+ r15 = (r11 + r15)|0;
+ r15 = r15 >> 2;
+ r15 = heap32[(r15)];
+ r19 = r15 << 15;
+ r19 = r19 ^ -1;
+ r15 = (r15 + r19)|0;
+ r19 = r15 >> 10;
+ r15 = r19 ^ r15;
+ r15 = (r15 * 9)|0;
+ r19 = r15 >> 6;
+ r15 = r19 ^ r15;
+ r19 = r15 << 11;
+ r19 = r19 ^ -1;
+ r15 = (r15 + r19)|0;
+ r19 = r15 >> 16;
+ r15 = r19 ^ r15;
+ r15 = r15 & r4;
+ r15 = r15 << 2;
+ r15 = (r8 + r15)|0;
+ r15 = r15 >> 2;
+ r19 = r7 << 2;
+ r19 = (r6 + r19)|0;
+ r20 = heap32[(r15)];
+ r19 = r19 >> 2;
+ r21 = (r7 + 1)|0;
+ heap32[(r19)] = r20;
+ heap32[(r15)] = r7;
+ r7 = r21;
+ if(r10 ==r21) //_LBB235_95
+{
+break _123;
+}
+}
+}
+} while(0);
+ r7 = r16;
+ r10 = r16;
+}
+ r4 = (r16 + -1)|0;
+ r15 = r14 & r4;
+}
+ r4 = r15 << 2;
+ r4 = (r8 + r4)|0;
+ r4 = r4 >> 2;
+ r14 = (r6 + r18)|0;
+ r14 = r14 >> 2;
+ r15 = heap32[(r4)];
+ heap32[(r14)] = r15;
+ heap32[(r4)] = r5;
+__label__ = 88;
+}
+if (__label__ == 88){
+ r4 = r13 >> 2;
+ r4 = heap32[(r4)];
+ r4 = r4 >> 2;
+ r4 = heap32[(r4+14)];
+ heap32[(g0)] = r13;
+ r5 = heap32[(fp+-2)];
+ heap32[(g0+1)] = r5;
+ __FUNCTION_TABLE__[(r4)>>2](i7);
+ r4 = r16;
+ r5 = r17;
+}
+ r13 = heap32[(r0+2)];
+if(!(r13 >r12)) //_LBB235_7
+{
+break _10;
+}
+}
+if(!(r11 ==0)) //_LBB235_104
+{
+ r0 = gNumAlignedFree;
+ r0 = r0 >> 2;
+ r1 = heap32[(r0)];
+ r1 = (r1 + 1)|0;
+ r2 = r11 >> 2;
+ heap32[(r0)] = r1;
+ r0 = heap32[(r2+-1)];
+ heap32[(g0)] = r0;
+ free(i7);
+}
+if(!(r3 ==0)) //_LBB235_106
+{
+ r0 = gNumAlignedFree;
+ r0 = r0 >> 2;
+ r1 = heap32[(r0)];
+ r1 = (r1 + 1)|0;
+ r2 = r3 >> 2;
+ heap32[(r0)] = r1;
+ r0 = heap32[(r2+-1)];
+ heap32[(g0)] = r0;
+ free(i7);
+}
+if(!(r6 ==0)) //_LBB235_108
+{
+ r0 = gNumAlignedFree;
+ r0 = r0 >> 2;
+ r1 = heap32[(r0)];
+ r1 = (r1 + 1)|0;
+ r2 = r6 >> 2;
+ heap32[(r0)] = r1;
+ r0 = heap32[(r2+-1)];
+ heap32[(g0)] = r0;
+ free(i7);
+}
+if(!(r8 ==0)) //_LBB235_110
+{
+ r0 = gNumAlignedFree;
+ r0 = r0 >> 2;
+ r1 = heap32[(r0)];
+ r1 = (r1 + 1)|0;
+ r2 = r8 >> 2;
+ heap32[(r0)] = r1;
+ r0 = heap32[(r2+-1)];
+ heap32[(g0)] = r0;
+ free(i7);
+}
+}
+}
+ return;
+}
+
+function _ZNK11btMatrix3x311getRotationER12btQuaternion(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+var __label__ = 0;
+ i7 = sp + -24;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ f0 = heapFloat[(r1)];
+ f1 = heapFloat[(r1+5)];
+ f2 = heapFloat[(r1+10)];
+ f3 = f0+f1;
+ f3 = f3+f2;
+ r2 = heap32[(fp+1)];
+ f4 = 0;
+ if(f3 <=f4) //_LBB236_2
+{
+ if(f0 >=f1) //_LBB236_4
+{
+ r1 = 2;
+ r3 = 0;
+ r1 = f0 < f2 ? r1 : r3;
+}
+else{
+ r1 = 2;
+ r3 = 1;
+ r1 = f1 < f2 ? r1 : r3;
+}
+ r3 = (r1 + 1)|0;
+ r3 = (r3 % 3)|0;
+ r4 = (r1 + 2)|0;
+ r4 = (r4 % 3)|0;
+ r5 = r1 << 4;
+ r6 = r3 << 4;
+ r7 = r4 << 4;
+ r5 = (r0 + r5)|0;
+ r1 = r1 << 2;
+ r6 = (r0 + r6)|0;
+ r3 = r3 << 2;
+ r0 = (r0 + r7)|0;
+ r4 = r4 << 2;
+ r7 = (r5 + r1)|0;
+ r8 = (r6 + r3)|0;
+ r7 = r7 >> 2;
+ r8 = r8 >> 2;
+ r9 = (r0 + r4)|0;
+ r9 = r9 >> 2;
+ f0 = heapFloat[(r7)];
+ f1 = heapFloat[(r8)];
+ f2 = heapFloat[(r9)];
+ f0 = f0-f1;
+ f0 = f0-f2;
+ f1 = 1;
+ f0 = f0+f1;
+ r7 = sp + -16;
+ heapFloat[(g0)] = f0;
+ r8 = (r7 + r1)|0;
+ f0 = 0.5;
+ sqrtf(i7);
+ r9 = (r0 + r3)|0;
+ r10 = (r6 + r4)|0;
+ r8 = r8 >> 2;
+ f2 = f_g0*f0;
+ r9 = r9 >> 2;
+ heapFloat[(r8)] = f2;
+ r8 = r10 >> 2;
+ f2 = heapFloat[(r9)];
+ f3 = heapFloat[(r8)];
+ f2 = f2-f3;
+ f0 = f0/f_g0;
+ r6 = (r6 + r1)|0;
+ r8 = (r5 + r3)|0;
+ r9 = r7 >> 2;
+ f1 = f2*f0;
+ r6 = r6 >> 2;
+ heapFloat[(r9+3)] = f1;
+ r8 = r8 >> 2;
+ f1 = heapFloat[(r6)];
+ f2 = heapFloat[(r8)];
+ r3 = (r7 + r3)|0;
+ f1 = f1+f2;
+ r0 = (r0 + r1)|0;
+ r1 = (r5 + r4)|0;
+ r3 = r3 >> 2;
+ f1 = f1*f0;
+ r0 = r0 >> 2;
+ heapFloat[(r3)] = f1;
+ r1 = r1 >> 2;
+ f1 = heapFloat[(r0)];
+ f2 = heapFloat[(r1)];
+ r0 = (r7 + r4)|0;
+ f1 = f1+f2;
+ r0 = r0 >> 2;
+ f0 = f1*f0;
+ heapFloat[(r0)] = f0;
+ f1 = heapFloat[(fp+-4)];
+ f3 = heapFloat[(r9+1)];
+ f0 = heapFloat[(r9+2)];
+ f2 = heapFloat[(r9+3)];
+}
+else{
+ f0 = 1;
+ f0 = f3+f0;
+ heapFloat[(g0)] = f0;
+ r0 = sp + -16;
+ f0 = 0.5;
+ sqrtf(i7);
+ f2 = f_g0*f0;
+ r0 = r0 >> 2;
+ heapFloat[(r0+3)] = f2;
+ f3 = heapFloat[(r1+9)];
+ f4 = heapFloat[(r1+6)];
+ f3 = f3-f4;
+ f0 = f0/f_g0;
+ f1 = f3*f0;
+ heapFloat[(fp+-4)] = f1;
+ f3 = heapFloat[(r1+2)];
+ f4 = heapFloat[(r1+8)];
+ f3 = f3-f4;
+ f3 = f3*f0;
+ heapFloat[(r0+1)] = f3;
+ f4 = heapFloat[(r1+4)];
+ f5 = heapFloat[(r1+1)];
+ f4 = f4-f5;
+ f0 = f4*f0;
+ heapFloat[(r0+2)] = f0;
+}
+ r0 = r2 >> 2;
+ heapFloat[(r0)] = f1;
+ heapFloat[(r0+1)] = f3;
+ heapFloat[(r0+2)] = f0;
+ heapFloat[(r0+3)] = f2;
+ return;
+}
+
+function _ZZN16btCollisionWorld17objectQuerySingleEPK13btConvexShapeRK11btTransformS5_P17btCollisionObjectPK16btCollisionShapeS5_RNS_20ConvexResultCallbackEfEN32BridgeTriangleConvexcastCallbackD0E_0v(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV18btTriangleCallback;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZZN16btCollisionWorld17objectQuerySingleEPK13btConvexShapeRK11btTransformS5_P17btCollisionObjectPK16btCollisionShapeS5_RNS_20ConvexResultCallbackEfEN32BridgeTriangleConvexcastCallbackD1E_0v(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV18btTriangleCallback;
+ r0 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r0)] = r1;
+ return;
+}
+
+function _ZZN16btCollisionWorld17objectQuerySingleEPK13btConvexShapeRK11btTransformS5_P17btCollisionObjectPK16btCollisionShapeS5_RNS_20ConvexResultCallbackEfEN32BridgeTriangleConvexcastCallbackD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV18btTriangleCallback;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZZN16btCollisionWorld17objectQuerySingleEPK13btConvexShapeRK11btTransformS5_P17btCollisionObjectPK16btCollisionShapeS5_RNS_20ConvexResultCallbackEfEN32BridgeTriangleConvexcastCallbackD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV18btTriangleCallback;
+ r0 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r0)] = r1;
+ return;
+}
+
+function _ZZN16btCollisionWorld13rayTestSingleERK11btTransformS2_P17btCollisionObjectPK16btCollisionShapeS2_RNS_17RayResultCallbackEEN29BridgeTriangleRaycastCallbackD0E_0v(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV18btTriangleCallback;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZZN16btCollisionWorld13rayTestSingleERK11btTransformS2_P17btCollisionObjectPK16btCollisionShapeS2_RNS_17RayResultCallbackEEN29BridgeTriangleRaycastCallbackD1E_0v(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV18btTriangleCallback;
+ r0 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r0)] = r1;
+ return;
+}
+
+function _ZZN16btCollisionWorld13rayTestSingleERK11btTransformS2_P17btCollisionObjectPK16btCollisionShapeS2_RNS_17RayResultCallbackEEN29BridgeTriangleRaycastCallbackD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV18btTriangleCallback;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZZN16btCollisionWorld13rayTestSingleERK11btTransformS2_P17btCollisionObjectPK16btCollisionShapeS2_RNS_17RayResultCallbackEEN29BridgeTriangleRaycastCallbackD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV18btTriangleCallback;
+ r0 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r0)] = r1;
+ return;
+}
+
+function _ZN15btTransformUtil22calculateDiffAxisAngleERK11btTransformS2_R9btVector3Rf(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+ var f10;
+ var f11;
+ var f12;
+ var f13;
+ var f14;
+ var f15;
+ var f16;
+ var f17;
+ var f18;
+ var f19;
+ var f20;
+ var f21;
+ var f22;
+ var f23;
+var __label__ = 0;
+ i7 = sp + -80;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ f0 = heapFloat[(r0+4)];
+ f1 = heapFloat[(r0+9)];
+ f2 = heapFloat[(r0+6)];
+ f3 = heapFloat[(r0+8)];
+ f4 = heapFloat[(r0+5)];
+ f5 = heapFloat[(r0+10)];
+ f6 = f4*f5;
+ f7 = f2*f1;
+ f8 = f2*f3;
+ f9 = f0*f5;
+ f10 = heapFloat[(r0)];
+ f11 = heapFloat[(r0+1)];
+ f6 = f6-f7;
+ f7 = f8-f9;
+ f8 = f0*f1;
+ f9 = f4*f3;
+ f12 = heapFloat[(r0+2)];
+ f8 = f8-f9;
+ f9 = f10*f6;
+ f13 = f11*f7;
+ f9 = f9+f13;
+ f13 = f12*f8;
+ r0 = heap32[(fp+1)];
+ f14 = 1;
+ f9 = f9+f13;
+ r0 = r0 >> 2;
+ f9 = f14/f9;
+ f13 = f12*f1;
+ f15 = f11*f5;
+ f5 = f10*f5;
+ f16 = f12*f3;
+ f13 = f13-f15;
+ f5 = f5-f16;
+ f15 = f11*f2;
+ f16 = f12*f4;
+ f12 = f12*f0;
+ f2 = f10*f2;
+ f3 = f11*f3;
+ f1 = f10*f1;
+ f6 = f6*f9;
+ f17 = heapFloat[(r0)];
+ f7 = f7*f9;
+ f18 = heapFloat[(r0+1)];
+ f15 = f15-f16;
+ f2 = f12-f2;
+ f12 = f13*f9;
+ f5 = f5*f9;
+ f1 = f3-f1;
+ f3 = f10*f4;
+ f0 = f11*f0;
+ f4 = f6*f17;
+ f10 = f7*f18;
+ f8 = f8*f9;
+ f11 = heapFloat[(r0+2)];
+ f13 = heapFloat[(r0+8)];
+ f15 = f15*f9;
+ f16 = heapFloat[(r0+4)];
+ f19 = heapFloat[(r0+9)];
+ f2 = f2*f9;
+ f20 = heapFloat[(r0+5)];
+ f0 = f3-f0;
+ f1 = f1*f9;
+ f3 = heapFloat[(r0+10)];
+ f21 = heapFloat[(r0+6)];
+ f22 = f12*f17;
+ f23 = f5*f18;
+ f4 = f4+f10;
+ f10 = f8*f11;
+ f0 = f0*f9;
+ r0 = sp + -48;
+ f9 = f15*f17;
+ f17 = f2*f18;
+ f18 = f22+f23;
+ f22 = f1*f11;
+ f4 = f4+f10;
+ r1 = r0 >> 2;
+ f9 = f9+f17;
+ f10 = f0*f11;
+ f11 = f18+f22;
+ heapFloat[(fp+-12)] = f4;
+ f4 = f6*f16;
+ f17 = f7*f20;
+ f9 = f9+f10;
+ heapFloat[(r1+1)] = f11;
+ heapFloat[(r1+2)] = f9;
+ f9 = f12*f16;
+ f10 = f5*f20;
+ f4 = f4+f17;
+ f11 = f8*f21;
+ f16 = f15*f16;
+ f17 = f2*f20;
+ f9 = f9+f10;
+ f10 = f1*f21;
+ f4 = f4+f11;
+ heap32[(r1+3)] = 0;
+ f11 = f16+f17;
+ f16 = f0*f21;
+ f9 = f9+f10;
+ heapFloat[(r1+4)] = f4;
+ f4 = f6*f13;
+ f6 = f7*f19;
+ f7 = f11+f16;
+ heapFloat[(r1+5)] = f9;
+ heapFloat[(r1+6)] = f7;
+ f7 = f12*f13;
+ f5 = f5*f19;
+ f4 = f4+f6;
+ f6 = f8*f3;
+ f8 = f15*f13;
+ f2 = f2*f19;
+ f5 = f7+f5;
+ f1 = f1*f3;
+ f4 = f4+f6;
+ heap32[(r1+7)] = 0;
+ f2 = f8+f2;
+ f0 = f0*f3;
+ f1 = f5+f1;
+ heapFloat[(r1+8)] = f4;
+ f0 = f2+f0;
+ heapFloat[(r1+9)] = f1;
+ heapFloat[(r1+10)] = f0;
+ heap32[(r1+11)] = 0;
+ r1 = sp + -64;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ _ZNK11btMatrix3x311getRotationER12btQuaternion(i7);
+ r0 = r1 >> 2;
+ f0 = heapFloat[(fp+-16)];
+ f1 = heapFloat[(r0+1)];
+ f2 = heapFloat[(r0+2)];
+ f3 = f0*f0;
+ f4 = f1*f1;
+ f5 = heapFloat[(r0+3)];
+ f3 = f3+f4;
+ f4 = f2*f2;
+ f3 = f3+f4;
+ f4 = f5*f5;
+ f3 = f3+f4;
+ heapFloat[(g0)] = f3;
+ sqrtf(i7);
+ f3 = f_g0;
+ f4 = 0;
+ if(f3 !=f4) //_LBB245_2
+{
+ r1 = heap32[(fp+2)];
+ r2 = heap32[(fp+3)];
+ f3 = f14/f3;
+ f0 = f0*f3;
+ f1 = f1*f3;
+ heapFloat[(fp+-16)] = f0;
+ f2 = f2*f3;
+ heapFloat[(r0+1)] = f1;
+ f4 = -1;
+ f3 = f5*f3;
+ heapFloat[(r0+2)] = f2;
+ f4 = f3 < f4 ? f4 : f3;
+ heapFloat[(r0+3)] = f3;
+ f3 = f4 > f14 ? f14 : f4;
+ heapFloat[(g0)] = f3;
+ acosf(i7);
+ r0 = r2 >> 2;
+ f3 = f_g0+f_g0;
+ r1 = r1 >> 2;
+ heapFloat[(r0)] = f3;
+ heapFloat[(r1)] = f0;
+ f0 = f0*f0;
+ f3 = f1*f1;
+ heapFloat[(r1+1)] = f1;
+ f0 = f0+f3;
+ f1 = f2*f2;
+ f0 = f0+f1;
+ heapFloat[(r1+2)] = f2;
+ heap32[(r1+3)] = 0;
+ f1 = 1.4210854715202004e-014;
+ if(f0 >=f1) //_LBB245_4
+{
+ heapFloat[(g0)] = f0;
+ sqrtf(i7);
+ f0 = f14/f_g0;
+ f1 = heapFloat[(r1)];
+ f1 = f1*f0;
+ heapFloat[(r1)] = f1;
+ f1 = heapFloat[(r1+1)];
+ f1 = f1*f0;
+ heapFloat[(r1+1)] = f1;
+ f1 = heapFloat[(r1+2)];
+ f0 = f1*f0;
+ heapFloat[(r1+2)] = f0;
+ return;
+}
+else{
+ heap32[(r1)] = 1065353216;
+ heap32[(r1+1)] = 0;
+ heap32[(r1+2)] = 0;
+ heap32[(r1+3)] = 0;
+ return;
+}
+}
+else{
+ r0 = _2E_str584;
+ r1 = _2E_str685;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 188;
+ _assert(i7);
+}
+}
+
+function _ZNK16btCollisionWorld15convexSweepTestEPK13btConvexShapeRK11btTransformS5_RNS_20ConvexResultCallbackEf(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+ var f10;
+ var f11;
+ var f12;
+ var f13;
+var __label__ = 0;
+ i7 = sp + -528;var g0 = i7>>2; // save stack
+ r0 = _2E_str1089;
+ r1 = heap32[(fp+2)];
+ heap32[(g0)] = r0;
+ r0 = sp + -112;
+ r1 = r1 >> 2;
+ _ZN15CProfileManager13Start_ProfileEPKc(i7);
+ r2 = r0 >> 2;
+ heap32[(fp+-28)] = heap32[(r1)];
+ heap32[(r2+1)] = heap32[(r1+1)];
+ heap32[(r2+2)] = heap32[(r1+2)];
+ heap32[(r2+3)] = heap32[(r1+3)];
+ heap32[(r2+4)] = heap32[(r1+4)];
+ heap32[(r2+5)] = heap32[(r1+5)];
+ heap32[(r2+6)] = heap32[(r1+6)];
+ heap32[(r2+7)] = heap32[(r1+7)];
+ heap32[(r2+8)] = heap32[(r1+8)];
+ heap32[(r2+9)] = heap32[(r1+9)];
+ heap32[(r2+10)] = heap32[(r1+10)];
+ heap32[(r2+11)] = heap32[(r1+11)];
+ heap32[(r2+12)] = heap32[(r1+12)];
+ heap32[(r2+13)] = heap32[(r1+13)];
+ r3 = heap32[(fp+3)];
+ heap32[(r2+14)] = heap32[(r1+14)];
+ r4 = sp + -176;
+ r3 = r3 >> 2;
+ heap32[(r2+15)] = heap32[(r1+15)];
+ r2 = r4 >> 2;
+ heap32[(fp+-44)] = heap32[(r3)];
+ heap32[(r2+1)] = heap32[(r3+1)];
+ heap32[(r2+2)] = heap32[(r3+2)];
+ heap32[(r2+3)] = heap32[(r3+3)];
+ heap32[(r2+4)] = heap32[(r3+4)];
+ heap32[(r2+5)] = heap32[(r3+5)];
+ heap32[(r2+6)] = heap32[(r3+6)];
+ heap32[(r2+7)] = heap32[(r3+7)];
+ heap32[(r2+8)] = heap32[(r3+8)];
+ heap32[(r2+9)] = heap32[(r3+9)];
+ heap32[(r2+10)] = heap32[(r3+10)];
+ heap32[(r2+11)] = heap32[(r3+11)];
+ heap32[(r2+12)] = heap32[(r3+12)];
+ heap32[(r2+13)] = heap32[(r3+13)];
+ heap32[(r2+14)] = heap32[(r3+14)];
+ heap32[(r2+15)] = heap32[(r3+15)];
+ r2 = sp + -24;
+ r5 = sp + -28;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r4;
+ heap32[(g0+2)] = r2;
+ heap32[(g0+3)] = r5;
+ _ZN15btTransformUtil22calculateDiffAxisAngleERK11btTransformS2_R9btVector3Rf(i7);
+ r2 = r2 >> 2;
+ f0 = heapFloat[(r2+2)];
+ f1 = heapFloat[(fp+-7)];
+ f2 = heapFloat[(r2+1)];
+ f3 = heapFloat[(fp+-6)];
+ r2 = sp + -424;
+ f3 = f3*f1;
+ r5 = r2 >> 2;
+ f2 = f2*f1;
+ heapFloat[(fp+-106)] = f3;
+ f0 = f0*f1;
+ heapFloat[(r5+1)] = f2;
+ heapFloat[(r5+2)] = f0;
+ r6 = sp + -440;
+ heap32[(r5+3)] = 0;
+ r5 = r6 >> 2;
+ heap32[(fp+-110)] = 0;
+ heap32[(r5+1)] = 0;
+ heap32[(r5+2)] = 0;
+ r7 = sp + -504;
+ heap32[(r5+3)] = 0;
+ r5 = r7 >> 2;
+ heap32[(fp+-126)] = 1065353216;
+ heap32[(r5+1)] = 0;
+ heap32[(r5+2)] = 0;
+ heap32[(r5+3)] = 0;
+ heap32[(r5+4)] = 0;
+ heap32[(r5+5)] = 1065353216;
+ heap32[(r5+6)] = 0;
+ heap32[(r5+7)] = 0;
+ heap32[(r5+8)] = 0;
+ heap32[(r5+9)] = 0;
+ heap32[(r5+10)] = 1065353216;
+ heap32[(r5+11)] = 0;
+ heap32[(r5+12)] = 0;
+ heap32[(r5+13)] = 0;
+ heap32[(r5+14)] = 0;
+ heap32[(r5+15)] = 0;
+ r8 = sp + -48;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r8;
+ _ZNK11btMatrix3x311getRotationER12btQuaternion(i7);
+ r8 = r8 >> 2;
+ f0 = heapFloat[(fp+-12)];
+ f1 = heapFloat[(r8+1)];
+ f2 = heapFloat[(r8+2)];
+ f3 = f0*f0;
+ f4 = f1*f1;
+ f5 = heapFloat[(r8+3)];
+ f3 = f3+f4;
+ f4 = f2*f2;
+ f3 = f3+f4;
+ f4 = f5*f5;
+ f6 = 2;
+ f3 = f3+f4;
+ f3 = f6/f3;
+ f4 = f2*f3;
+ f6 = f1*f3;
+ f7 = f1*f6;
+ f2 = f2*f4;
+ f8 = f7+f2;
+ f9 = 1;
+ f10 = f0*f6;
+ f11 = f5*f4;
+ f8 = f9-f8;
+ f12 = f0*f4;
+ f6 = f5*f6;
+ f13 = f10-f11;
+ heapFloat[(fp+-126)] = f8;
+ f3 = f0*f3;
+ f8 = f12+f6;
+ heapFloat[(r5+1)] = f13;
+ f0 = f0*f3;
+ heapFloat[(r5+2)] = f8;
+ f2 = f0+f2;
+ f8 = f10+f11;
+ heap32[(r5+3)] = 0;
+ f1 = f1*f4;
+ f3 = f5*f3;
+ f2 = f9-f2;
+ heapFloat[(r5+4)] = f8;
+ f4 = f1-f3;
+ heapFloat[(r5+5)] = f2;
+ heapFloat[(r5+6)] = f4;
+ f2 = f12-f6;
+ heap32[(r5+7)] = 0;
+ f0 = f0+f7;
+ f1 = f1+f3;
+ heapFloat[(r5+8)] = f2;
+ f0 = f9-f0;
+ heapFloat[(r5+9)] = f1;
+ heapFloat[(r5+10)] = f0;
+ heap32[(r5+11)] = 0;
+ r5 = heap32[(fp+1)];
+ r8 = sp + -192;
+ r9 = sp + -208;
+ heap32[(g0)] = r5;
+ heap32[(g0+1)] = r7;
+ heap32[(g0+2)] = r6;
+ heap32[(g0+3)] = r2;
+ heap32[(g0+4)] = r8;
+ heap32[(g0+5)] = r9;
+ r2 = _ZTV21btSingleSweepCallback;
+ r6 = sp + -408;
+ r2 = (r2 + 8)|0;
+ _ZNK16btCollisionShape21calculateTemporalAabbERK11btTransformRK9btVector3S5_fRS3_S6_(i7);
+ r7 = r6 >> 2;
+ heap32[(fp+-102)] = r2;
+ heap32[(r7+9)] = heap32[(r1)];
+ heap32[(r7+10)] = heap32[(r1+1)];
+ heap32[(r7+11)] = heap32[(r1+2)];
+ heap32[(r7+12)] = heap32[(r1+3)];
+ heap32[(r7+13)] = heap32[(r1+4)];
+ heap32[(r7+14)] = heap32[(r1+5)];
+ heap32[(r7+15)] = heap32[(r1+6)];
+ heap32[(r7+16)] = heap32[(r1+7)];
+ heap32[(r7+17)] = heap32[(r1+8)];
+ heap32[(r7+18)] = heap32[(r1+9)];
+ heap32[(r7+19)] = heap32[(r1+10)];
+ heap32[(r7+20)] = heap32[(r1+11)];
+ f0 = heapFloat[(r1+12)];
+ heapFloat[(r7+21)] = f0;
+ f1 = heapFloat[(r1+13)];
+ heapFloat[(r7+22)] = f1;
+ f2 = heapFloat[(r1+14)];
+ heapFloat[(r7+23)] = f2;
+ heap32[(r7+24)] = heap32[(r1+15)];
+ heap32[(r7+25)] = heap32[(r3)];
+ heap32[(r7+26)] = heap32[(r3+1)];
+ heap32[(r7+27)] = heap32[(r3+2)];
+ heap32[(r7+28)] = heap32[(r3+3)];
+ heap32[(r7+29)] = heap32[(r3+4)];
+ heap32[(r7+30)] = heap32[(r3+5)];
+ heap32[(r7+31)] = heap32[(r3+6)];
+ heap32[(r7+32)] = heap32[(r3+7)];
+ heap32[(r7+33)] = heap32[(r3+8)];
+ heap32[(r7+34)] = heap32[(r3+9)];
+ heap32[(r7+35)] = heap32[(r3+10)];
+ heap32[(r7+36)] = heap32[(r3+11)];
+ f3 = heapFloat[(r3+12)];
+ heapFloat[(r7+37)] = f3;
+ f4 = heapFloat[(r3+13)];
+ heapFloat[(r7+38)] = f4;
+ f5 = heapFloat[(r3+14)];
+ heapFloat[(r7+39)] = f5;
+ r1 = heap32[(fp)];
+ heap32[(r7+40)] = heap32[(r3+15)];
+ r3 = heap32[(fp+4)];
+ heap32[(r7+45)] = r1;
+ heap32[(r7+46)] = r3;
+ f0 = f3-f0;
+ f1 = f4-f1;
+ heap32[(r7+47)] = heap32[(fp+5)];
+ f2 = f5-f2;
+ heap32[(r7+48)] = r5;
+ f3 = f0*f0;
+ f4 = f1*f1;
+ f3 = f3+f4;
+ f4 = f2*f2;
+ f3 = f3+f4;
+ heapFloat[(g0)] = f3;
+ sqrtf(i7);
+ f3 = f9/f_g0;
+ f4 = f0*f3;
+ f5 = f2*f3;
+ f3 = f1*f3;
+ f6 = 0;
+ if(f4 !=f6) //_LBB246_2
+{
+ f7 = f9/f4;
+}
+else{
+ f7 = 999999984306749440;
+}
+ heapFloat[(r7+1)] = f7;
+ if(f3 !=f6) //_LBB246_5
+{
+ f8 = f9/f3;
+}
+else{
+ f8 = 999999984306749440;
+}
+ heapFloat[(r7+2)] = f8;
+ if(f5 !=f6) //_LBB246_8
+{
+ f9 = f9/f5;
+}
+else{
+ f9 = 999999984306749440;
+}
+ r3 = f7 < f6;
+ r5 = f8 < f6;
+ r3 = r3 & 1;
+ heapFloat[(r7+3)] = f9;
+ r10 = f9 < f6;
+ f0 = f4*f0;
+ f1 = f3*f1;
+ r5 = r5 & 1;
+ heap32[(r7+5)] = r3;
+ f0 = f0+f1;
+ f1 = f5*f2;
+ r3 = r10 & 1;
+ heap32[(r7+6)] = r5;
+ f0 = f0+f1;
+ heap32[(r7+7)] = r3;
+ r1 = r1 >> 2;
+ heapFloat[(r7+8)] = f0;
+ r1 = heap32[(r1+20)];
+ r3 = r1 >> 2;
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3+6)];
+ r0 = (r0 + 48)|0;
+ r4 = (r4 + 48)|0;
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r0;
+ heap32[(g0+2)] = r4;
+ heap32[(g0+3)] = r6;
+ heap32[(g0+4)] = r8;
+ heap32[(g0+5)] = r9;
+ r0 = _ZN15CProfileManager11CurrentNodeE;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ r0 = r0 >> 2;
+ heap32[(fp+-102)] = r2;
+ r1 = heap32[(r0)];
+ r2 = r1 >> 2;
+ r3 = heap32[(r2+4)];
+ r3 = (r3 + -1)|0;
+ heap32[(r2+4)] = r3;
+_13: do {
+if(!(r3 !=0)) //_LBB246_15
+{
+ r3 = heap32[(r2+1)];
+ if(r3 !=0) //_LBB246_12
+{
+ r1 = sp + -8;
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = 0;
+ r3 = _ZL13gProfileClock_2E_0;
+ gettimeofday(i7);
+ r3 = r3 >> 2;
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r1 = r1 >> 2;
+ r4 = heap32[(fp+-2)];
+ r5 = heap32[(r3)];
+ r4 = (r4 - r5)|0;
+ r1 = heap32[(r1+1)];
+ r3 = heap32[(r3+1)];
+ r1 = (r1 - r3)|0;
+ r3 = (r4 * 1000000)|0;
+ r1 = (r1 + r3)|0;
+ r3 = heap32[(r2+3)];
+ r1 = (r1 - r3)|0;
+ f0 = uint(r1); //fuitos r1, f0
+ f1 = 1000;
+ f2 = heapFloat[(r2+2)];
+ f0 = f0/f1;
+ f0 = f2+f0;
+ heapFloat[(r2+2)] = f0;
+ r1 = heap32[(r2+4)];
+ if(r1 !=0) //_LBB246_15
+{
+break _13;
+}
+else{
+ r1 = heap32[(r0)];
+}
+}
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+5)];
+ heap32[(r0)] = r1;
+}
+} while(0);
+ return;
+}
+
+function _ZN16btCollisionWorld17objectQuerySingleEPK13btConvexShapeRK11btTransformS5_P17btCollisionObjectPK16btCollisionShapeS5_RNS_20ConvexResultCallbackEf(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+ var r13;
+ var r14;
+ var r15;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+ var f10;
+ var f11;
+ var f12;
+ var f13;
+ var f14;
+ var f15;
+ var f16;
+ var f17;
+ var f18;
+ var f19;
+ var f20;
+ var f21;
+ var f22;
+ var f23;
+ var f24;
+ var f25;
+ var f26;
+ var f27;
+ var f28;
+ var f29;
+ var f30;
+var __label__ = 0;
+ i7 = sp + -1472;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+4)];
+ r1 = r0 >> 2;
+ r2 = heap32[(r1+1)];
+ r3 = heap32[(fp)];
+ r4 = heap32[(fp+1)];
+ r5 = heap32[(fp+2)];
+ r6 = heap32[(fp+3)];
+ r7 = heap32[(fp+5)];
+ r8 = heap32[(fp+6)];
+ f0 = heapFloat[(fp+7)];
+_1: do {
+ if(r2 >19) //_LBB247_6
+{
+ r9 = (r2 + -21)|0;
+ if(uint(r9) >uint(8)) //_LBB247_30
+{
+ if(r2 !=31) //_LBB247_5
+{
+break _1;
+}
+else{
+ r0 = _2E_str1493;
+ heap32[(g0)] = r0;
+ _ZN15CProfileManager13Start_ProfileEPKc(i7);
+ r0 = heap32[(r1+4)];
+if(!(r0 <1)) //_LBB247_34
+{
+ r0 = 0;
+_8: while(true){
+ r2 = (r0 * 20)|0;
+ r9 = heap32[(r1+6)];
+ r2 = r2 << 2;
+ r2 = (r9 + r2)|0;
+ r2 = r2 >> 2;
+ r9 = r7 >> 2;
+ f1 = heapFloat[(r2)];
+ f2 = heapFloat[(r9)];
+ f3 = heapFloat[(r2+4)];
+ f4 = heapFloat[(r9+1)];
+ f5 = heapFloat[(r2+1)];
+ f6 = heapFloat[(r2+5)];
+ f7 = f1*f2;
+ f8 = f3*f4;
+ f9 = heapFloat[(r2+8)];
+ f10 = heapFloat[(r9+2)];
+ f11 = heapFloat[(r9+8)];
+ f12 = heapFloat[(r2+2)];
+ f13 = heapFloat[(r9+4)];
+ f14 = heapFloat[(r2+12)];
+ f15 = heapFloat[(r9+9)];
+ f16 = heapFloat[(r2+6)];
+ f17 = heapFloat[(r9+5)];
+ f18 = heapFloat[(r2+13)];
+ f19 = heapFloat[(r2+9)];
+ f20 = heapFloat[(r9+10)];
+ f21 = heapFloat[(r2+10)];
+ f22 = heapFloat[(r9+6)];
+ f23 = heapFloat[(r2+14)];
+ f24 = f5*f2;
+ f25 = f6*f4;
+ f7 = f7+f8;
+ f8 = f9*f10;
+ r2 = heap32[(r2+16)];
+ f26 = heapFloat[(r9+14)];
+ f27 = heapFloat[(r9+13)];
+ f28 = heapFloat[(r9+12)];
+ r9 = sp + -1408;
+ f29 = f12*f2;
+ f30 = f16*f4;
+ f24 = f24+f25;
+ f25 = f19*f10;
+ f7 = f7+f8;
+ r10 = r9 >> 2;
+ f8 = f29+f30;
+ f29 = f21*f10;
+ f24 = f24+f25;
+ heapFloat[(fp+-352)] = f7;
+ f7 = f1*f13;
+ f25 = f3*f17;
+ f8 = f8+f29;
+ heapFloat[(r10+1)] = f24;
+ heapFloat[(r10+2)] = f8;
+ f8 = f5*f13;
+ f24 = f6*f17;
+ f7 = f7+f25;
+ f25 = f9*f22;
+ f29 = f12*f13;
+ f30 = f16*f17;
+ f8 = f8+f24;
+ f24 = f19*f22;
+ f7 = f7+f25;
+ heap32[(r10+3)] = 0;
+ f25 = f29+f30;
+ f29 = f21*f22;
+ f8 = f8+f24;
+ heapFloat[(r10+4)] = f7;
+ f1 = f1*f11;
+ f3 = f3*f15;
+ f7 = f25+f29;
+ heapFloat[(r10+5)] = f8;
+ heapFloat[(r10+6)] = f7;
+ f5 = f5*f11;
+ f6 = f6*f15;
+ f1 = f1+f3;
+ f3 = f9*f20;
+ f7 = f12*f11;
+ f8 = f16*f15;
+ f5 = f5+f6;
+ f6 = f19*f20;
+ f1 = f1+f3;
+ heap32[(r10+7)] = 0;
+ f2 = f2*f14;
+ f3 = f4*f18;
+ f4 = f7+f8;
+ f7 = f21*f20;
+ f5 = f5+f6;
+ heapFloat[(r10+8)] = f1;
+ f1 = f13*f14;
+ f6 = f17*f18;
+ f2 = f2+f3;
+ f3 = f10*f23;
+ f4 = f4+f7;
+ heapFloat[(r10+9)] = f5;
+ f2 = f2+f3;
+ heapFloat[(r10+10)] = f4;
+ f3 = f11*f14;
+ f4 = f15*f18;
+ f1 = f1+f6;
+ f5 = f22*f23;
+ f1 = f1+f5;
+ f3 = f3+f4;
+ f4 = f20*f23;
+ f2 = f2+f28;
+ heap32[(r10+11)] = 0;
+ f3 = f3+f4;
+ f1 = f1+f27;
+ heapFloat[(r10+12)] = f2;
+ f2 = f3+f26;
+ heapFloat[(r10+13)] = f1;
+ heapFloat[(r10+14)] = f2;
+ r11 = r6 >> 2;
+ heap32[(r10+15)] = 0;
+ r10 = heap32[(r11+48)];
+ r12 = 1;
+ heap32[(r11+48)] = r2;
+ r13 = _ZTVZN16btCollisionWorld17objectQuerySingleEPK13btConvexShapeRK11btTransformS5_P17btCollisionObjectPK16btCollisionShapeS5_RNS_20ConvexResultCallbackEfE14LocalInfoAdder;
+ r14 = -1;
+ heap16[(sp+-1424)>>1] = r12;
+ r12 = sp + -1432;
+ heap16[(sp+-1422)>>1] = r14;
+ r13 = (r13 + 8)|0;
+ r14 = r12 >> 2;
+ heap32[(fp+-358)] = r13;
+ heap32[(r14+3)] = r8;
+ r15 = r8 >> 2;
+ heap32[(r14+4)] = r0;
+ heap32[(r14+1)] = heap32[(r15+1)];
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r4;
+ heap32[(g0+2)] = r5;
+ heap32[(g0+3)] = r6;
+ heap32[(g0+4)] = r2;
+ heap32[(g0+5)] = r9;
+ heap32[(g0+6)] = r12;
+ heapFloat[(g0+7)] = f0;
+ _ZN16btCollisionWorld17objectQuerySingleEPK13btConvexShapeRK11btTransformS5_P17btCollisionObjectPK16btCollisionShapeS5_RNS_20ConvexResultCallbackEf(i7);
+ r0 = (r0 + 1)|0;
+ heap32[(r11+48)] = r10;
+ heap32[(fp+-358)] = r13;
+ r2 = heap32[(r1+4)];
+if(!(r2 >r0)) //_LBB247_33
+{
+break _8;
+}
+}
+}
+ r0 = _ZN15CProfileManager11CurrentNodeE;
+ r0 = r0 >> 2;
+ r1 = heap32[(r0)];
+ r2 = r1 >> 2;
+ r3 = heap32[(r2+4)];
+ r3 = (r3 + -1)|0;
+ heap32[(r2+4)] = r3;
+ if(r3 !=0) //_LBB247_5
+{
+break _1;
+}
+else{
+ r3 = heap32[(r2+1)];
+ if(r3 !=0) //_LBB247_37
+{
+ r1 = sp + -24;
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = 0;
+ r3 = _ZL13gProfileClock_2E_0;
+ gettimeofday(i7);
+ r3 = r3 >> 2;
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r1 = r1 >> 2;
+ r4 = heap32[(fp+-6)];
+ r5 = heap32[(r3)];
+ r4 = (r4 - r5)|0;
+ r1 = heap32[(r1+1)];
+ r3 = heap32[(r3+1)];
+ r1 = (r1 - r3)|0;
+ r3 = (r4 * 1000000)|0;
+ r1 = (r1 + r3)|0;
+ r3 = heap32[(r2+3)];
+ r1 = (r1 - r3)|0;
+ f0 = uint(r1); //fuitos r1, f0
+ f1 = 1000;
+ f2 = heapFloat[(r2+2)];
+ f0 = f0/f1;
+ f0 = f2+f0;
+ heapFloat[(r2+2)] = f0;
+ r1 = heap32[(r2+4)];
+ if(r1 !=0) //_LBB247_5
+{
+break _1;
+}
+else{
+ r1 = heap32[(r0)];
+}
+}
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+5)];
+ heap32[(r0)] = r1;
+ return;
+}
+}
+}
+else{
+ if(r2 !=21) //_LBB247_11
+{
+ r2 = r5 >> 2;
+ r9 = r7 >> 2;
+ f0 = heapFloat[(r9)];
+ f1 = heapFloat[(r2)];
+ f2 = heapFloat[(r9+4)];
+ f3 = heapFloat[(r2+4)];
+ r10 = r4 >> 2;
+ f4 = heapFloat[(r2+1)];
+ f5 = heapFloat[(r2+5)];
+ f6 = f1*f0;
+ f7 = f3*f2;
+ f8 = heapFloat[(r9+8)];
+ f9 = heapFloat[(r2+8)];
+ f10 = heapFloat[(r9+2)];
+ f11 = heapFloat[(r2+2)];
+ f12 = heapFloat[(r9+1)];
+ f13 = heapFloat[(r2+12)];
+ f14 = heapFloat[(r10+12)];
+ f15 = heapFloat[(r9+6)];
+ f16 = heapFloat[(r2+6)];
+ f17 = heapFloat[(r9+5)];
+ f18 = heapFloat[(r2+13)];
+ f19 = heapFloat[(r10+13)];
+ f20 = heapFloat[(r9+13)];
+ f21 = heapFloat[(r2+10)];
+ f22 = heapFloat[(r9+10)];
+ f23 = heapFloat[(r2+9)];
+ f24 = heapFloat[(r9+9)];
+ f25 = heapFloat[(r2+14)];
+ heapFloat[(fp+-360)] = f25;
+ f26 = heapFloat[(r10+14)];
+ f27 = heapFloat[(r9+14)];
+ f28 = heapFloat[(r9+12)];
+ heapFloat[(fp+-359)] = f28;
+ f29 = f4*f0;
+ f30 = f5*f2;
+ f6 = f6+f7;
+ f7 = f9*f8;
+ r2 = sp + -1056;
+ f25 = f11*f0;
+ f28 = f16*f2;
+ f29 = f29+f30;
+ f30 = f23*f8;
+ f6 = f6+f7;
+ r9 = r2 >> 2;
+ f7 = f25+f28;
+ f25 = f21*f8;
+ f28 = f29+f30;
+ heapFloat[(fp+-264)] = f6;
+ f6 = f1*f12;
+ f29 = f3*f17;
+ f7 = f7+f25;
+ heapFloat[(r9+1)] = f28;
+ heapFloat[(r9+2)] = f7;
+ f7 = f4*f12;
+ f25 = f5*f17;
+ f6 = f6+f29;
+ f28 = f9*f24;
+ f29 = f11*f12;
+ f30 = f16*f17;
+ f7 = f7+f25;
+ f25 = f23*f24;
+ f6 = f6+f28;
+ heap32[(r9+3)] = 0;
+ f28 = f29+f30;
+ f29 = f21*f24;
+ f7 = f7+f25;
+ heapFloat[(r9+4)] = f6;
+ f1 = f1*f10;
+ f3 = f3*f15;
+ f6 = f28+f29;
+ heapFloat[(r9+5)] = f7;
+ heapFloat[(r9+6)] = f6;
+ f4 = f4*f10;
+ f5 = f5*f15;
+ f1 = f1+f3;
+ f3 = f9*f22;
+ f6 = f11*f10;
+ f7 = f16*f15;
+ f4 = f4+f5;
+ f5 = f23*f22;
+ f1 = f1+f3;
+ heap32[(r9+7)] = 0;
+ f3 = f6+f7;
+ f6 = f21*f22;
+ f4 = f4+f5;
+ heapFloat[(r9+8)] = f1;
+ f1 = f3+f6;
+ heapFloat[(r9+9)] = f4;
+ heapFloat[(r9+10)] = f1;
+ heap32[(r9+11)] = 0;
+ heap32[(r9+12)] = 0;
+ heap32[(r9+13)] = 0;
+ heap32[(r9+14)] = 0;
+ heap32[(r9+15)] = 0;
+ r9 = heap32[(r1)];
+ r9 = r9 >> 2;
+ r9 = heap32[(r9+11)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r9)>>2](i7);
+ r9 = sp + -1280;
+ heap32[(g0)] = r9;
+ heap32[(g0+1)] = r3;
+ heap32[(g0+2)] = r4;
+ heap32[(g0+3)] = r5;
+ heap32[(g0+4)] = r7;
+ heapFloat[(g0+5)] = f_g0;
+ r4 = _ZTVZN16btCollisionWorld17objectQuerySingleEPK13btConvexShapeRK11btTransformS5_P17btCollisionObjectPK16btCollisionShapeS5_RNS_20ConvexResultCallbackEfE32BridgeTriangleConvexcastCallback_0;
+ _ZN28btTriangleConvexcastCallbackC2EPK13btConvexShapeRK11btTransformS5_S5_f(i7);
+ r4 = (r4 + 8)|0;
+ r5 = r9 >> 2;
+ heap32[(fp+-320)] = r4;
+ heap32[(r5+52)] = r8;
+ heap32[(r5+53)] = r6;
+ r4 = r8 >> 2;
+ heap32[(r5+54)] = r0;
+ r6 = r3 >> 2;
+ heap32[(r5+50)] = heap32[(r4+1)];
+ r4 = heap32[(r6)];
+ r4 = r4 >> 2;
+ r4 = heap32[(r4+2)];
+ f28 = heapFloat[(fp+-359)];
+ f1 = -f28;
+ r5 = sp + -1296;
+ r6 = sp + -1312;
+ f3 = f0*f14;
+ f4 = f2*f19;
+ f5 = f0*f1;
+ f6 = f2*f20;
+ f3 = f3+f4;
+ f4 = f8*f26;
+ f5 = f5-f6;
+ f6 = f8*f27;
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r2;
+ heap32[(g0+2)] = r5;
+ heap32[(g0+3)] = r6;
+ f7 = f12*f14;
+ f9 = f17*f19;
+ f11 = f12*f1;
+ f16 = f17*f20;
+ f3 = f3+f4;
+ f4 = f5-f6;
+ f5 = f10*f14;
+ f6 = f15*f19;
+ f1 = f10*f1;
+ f14 = f15*f20;
+ f7 = f7+f9;
+ f9 = f24*f26;
+ f11 = f11-f16;
+ f16 = f24*f27;
+ f3 = f3+f4;
+ __FUNCTION_TABLE__[(r4)>>2](i7);
+ r2 = sp + -1328;
+ f0 = f0*f13;
+ f2 = f2*f18;
+ f10 = f10*f13;
+ f15 = f15*f18;
+ f12 = f12*f13;
+ f13 = f17*f18;
+ f5 = f5+f6;
+ f6 = f22*f26;
+ f1 = f1-f14;
+ f14 = f22*f27;
+ f7 = f7+f9;
+ f9 = f11-f16;
+ f7 = f7+f9;
+ f0 = f0+f2;
+ f25 = heapFloat[(fp+-360)];
+ f2 = f8*f25;
+ f8 = f10+f15;
+ f10 = f22*f25;
+ f11 = f12+f13;
+ f12 = f24*f25;
+ r3 = r2 >> 2;
+ heapFloat[(fp+-332)] = f3;
+ f5 = f5+f6;
+ f1 = f1-f14;
+ f0 = f0+f2;
+ f2 = f8+f10;
+ f6 = f11+f12;
+ f5 = f5+f1;
+ heapFloat[(r3+1)] = f7;
+ f0 = f0+f4;
+ f1 = f2+f1;
+ f2 = f6+f9;
+ heapFloat[(r3+2)] = f5;
+ heap32[(r3+3)] = 0;
+ if(f0 <f3) //_LBB247_13
+{
+ heapFloat[(fp+-332)] = f0;
+ f4 = f0;
+}
+else{
+ f4 = f3;
+}
+ if(f2 <f7) //_LBB247_16
+{
+ heapFloat[(r3+1)] = f2;
+ f6 = f2;
+}
+else{
+ f6 = f7;
+}
+ if(f1 <f5) //_LBB247_19
+{
+ heapFloat[(r3+2)] = f1;
+ f8 = f1;
+}
+else{
+ f8 = f5;
+}
+ r4 = sp + -1344;
+ r7 = r4 >> 2;
+ heapFloat[(fp+-336)] = f3;
+ heapFloat[(r7+1)] = f7;
+ heapFloat[(r7+2)] = f5;
+ heap32[(r7+3)] = 0;
+ if(f3 <f0) //_LBB247_22
+{
+ heapFloat[(fp+-336)] = f0;
+ f3 = f0;
+}
+ if(f7 <f2) //_LBB247_25
+{
+ heapFloat[(r7+1)] = f2;
+ f7 = f2;
+}
+ if(f5 <f1) //_LBB247_28
+{
+ heapFloat[(r7+2)] = f1;
+ f5 = f1;
+}
+ f0 = heapFloat[(fp+-324)];
+ f0 = f4+f0;
+ r5 = r5 >> 2;
+ heapFloat[(fp+-332)] = f0;
+ f0 = heapFloat[(r5+1)];
+ f0 = f6+f0;
+ heapFloat[(r3+1)] = f0;
+ f0 = heapFloat[(r5+2)];
+ f0 = f8+f0;
+ heapFloat[(r3+2)] = f0;
+ f0 = heapFloat[(fp+-328)];
+ f0 = f3+f0;
+ r3 = r6 >> 2;
+ heapFloat[(fp+-336)] = f0;
+ f0 = heapFloat[(r3+1)];
+ f0 = f7+f0;
+ heapFloat[(r7+1)] = f0;
+ f0 = heapFloat[(r3+2)];
+ f0 = f5+f0;
+ heapFloat[(r7+2)] = f0;
+ r1 = heap32[(r1)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+15)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r9;
+ heap32[(g0+2)] = r2;
+ heap32[(g0+3)] = r4;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+ return;
+}
+else{
+ r2 = r7 >> 2;
+ r9 = r4 >> 2;
+ f0 = heapFloat[(r2+12)];
+ f0 = -f0;
+ f1 = heapFloat[(r2)];
+ f2 = heapFloat[(r9+12)];
+ f3 = heapFloat[(r2+4)];
+ f4 = heapFloat[(r2+13)];
+ f5 = heapFloat[(r9+13)];
+ f6 = heapFloat[(r2+1)];
+ f7 = heapFloat[(r2+5)];
+ f8 = f1*f2;
+ f9 = f3*f5;
+ f10 = f1*f0;
+ f11 = f3*f4;
+ f12 = heapFloat[(r2+8)];
+ f13 = heapFloat[(r2+14)];
+ f14 = heapFloat[(r9+14)];
+ f15 = heapFloat[(r2+9)];
+ f16 = heapFloat[(r2+2)];
+ f17 = heapFloat[(r2+6)];
+ f18 = f6*f2;
+ f19 = f7*f5;
+ f20 = f6*f0;
+ f21 = f7*f4;
+ f8 = f8+f9;
+ f9 = f12*f14;
+ f10 = f10-f11;
+ f11 = f12*f13;
+ f22 = heapFloat[(r2+10)];
+ f2 = f16*f2;
+ f5 = f17*f5;
+ f0 = f16*f0;
+ f4 = f17*f4;
+ f18 = f18+f19;
+ f19 = f15*f14;
+ f20 = f20-f21;
+ f21 = f15*f13;
+ f8 = f8+f9;
+ f9 = f10-f11;
+ r2 = sp + -656;
+ f2 = f2+f5;
+ f5 = f22*f14;
+ f0 = f0-f4;
+ f4 = f22*f13;
+ f10 = f18+f19;
+ f11 = f20-f21;
+ f8 = f8+f9;
+ r9 = r2 >> 2;
+ f2 = f2+f5;
+ f0 = f0-f4;
+ f4 = f10+f11;
+ heapFloat[(fp+-164)] = f8;
+ f2 = f2+f0;
+ heapFloat[(r9+1)] = f4;
+ heapFloat[(r9+2)] = f2;
+ r10 = r5 >> 2;
+ heap32[(r9+3)] = 0;
+ f2 = heapFloat[(r10+12)];
+ f4 = heapFloat[(r10+13)];
+ f5 = heapFloat[(r10+14)];
+ f8 = f1*f2;
+ f10 = f3*f4;
+ f13 = f6*f2;
+ f14 = f7*f4;
+ f8 = f8+f10;
+ f10 = f12*f5;
+ f8 = f8+f10;
+ f2 = f16*f2;
+ f4 = f17*f4;
+ f10 = f13+f14;
+ f13 = f15*f5;
+ r9 = sp + -672;
+ f10 = f10+f13;
+ f2 = f2+f4;
+ f4 = f22*f5;
+ f5 = f8+f9;
+ f2 = f2+f4;
+ r11 = r9 >> 2;
+ f4 = f10+f11;
+ heapFloat[(fp+-168)] = f5;
+ f0 = f2+f0;
+ heapFloat[(r11+1)] = f4;
+ heapFloat[(r11+2)] = f0;
+ heap32[(r11+3)] = 0;
+ f0 = heapFloat[(r10)];
+ f2 = heapFloat[(r10+4)];
+ f4 = heapFloat[(r10+1)];
+ f5 = heapFloat[(r10+5)];
+ f8 = heapFloat[(r10+8)];
+ f9 = f0*f1;
+ f10 = f2*f3;
+ f11 = heapFloat[(r10+2)];
+ f13 = heapFloat[(r10+6)];
+ f14 = heapFloat[(r10+10)];
+ f18 = heapFloat[(r10+9)];
+ f19 = f4*f1;
+ f20 = f5*f3;
+ f9 = f9+f10;
+ f10 = f8*f12;
+ r10 = sp + -736;
+ f1 = f11*f1;
+ f3 = f13*f3;
+ f19 = f19+f20;
+ f20 = f18*f12;
+ f9 = f9+f10;
+ r11 = r10 >> 2;
+ f1 = f1+f3;
+ f3 = f14*f12;
+ f10 = f19+f20;
+ heapFloat[(fp+-184)] = f9;
+ f9 = f0*f6;
+ f12 = f2*f7;
+ f1 = f1+f3;
+ heapFloat[(r11+1)] = f10;
+ heapFloat[(r11+2)] = f1;
+ f1 = f4*f6;
+ f3 = f5*f7;
+ f9 = f9+f12;
+ f10 = f8*f15;
+ f6 = f11*f6;
+ f7 = f13*f7;
+ f1 = f1+f3;
+ f3 = f18*f15;
+ f9 = f9+f10;
+ heap32[(r11+3)] = 0;
+ f6 = f6+f7;
+ f7 = f14*f15;
+ f1 = f1+f3;
+ heapFloat[(r11+4)] = f9;
+ f0 = f0*f16;
+ f2 = f2*f17;
+ f3 = f6+f7;
+ heapFloat[(r11+5)] = f1;
+ heapFloat[(r11+6)] = f3;
+ f1 = f4*f16;
+ f3 = f5*f17;
+ f0 = f0+f2;
+ f2 = f8*f22;
+ f4 = f11*f16;
+ f5 = f13*f17;
+ f1 = f1+f3;
+ f3 = f18*f22;
+ f0 = f0+f2;
+ heap32[(r11+7)] = 0;
+ f2 = f4+f5;
+ f4 = f14*f22;
+ f1 = f1+f3;
+ heapFloat[(r11+8)] = f0;
+ f0 = f2+f4;
+ heapFloat[(r11+9)] = f1;
+ heapFloat[(r11+10)] = f0;
+ heap32[(r11+11)] = 0;
+ heap32[(r11+12)] = 0;
+ heap32[(r11+13)] = 0;
+ heap32[(r11+14)] = 0;
+ heap32[(r11+15)] = 0;
+ r11 = heap32[(r1)];
+ r11 = r11 >> 2;
+ r11 = heap32[(r11+11)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r11)>>2](i7);
+ r11 = sp + -960;
+ heap32[(g0)] = r11;
+ heap32[(g0+1)] = r3;
+ heap32[(g0+2)] = r4;
+ heap32[(g0+3)] = r5;
+ heap32[(g0+4)] = r7;
+ heapFloat[(g0+5)] = f_g0;
+ r4 = _ZTVZN16btCollisionWorld17objectQuerySingleEPK13btConvexShapeRK11btTransformS5_P17btCollisionObjectPK16btCollisionShapeS5_RNS_20ConvexResultCallbackEfE32BridgeTriangleConvexcastCallback;
+ _ZN28btTriangleConvexcastCallbackC2EPK13btConvexShapeRK11btTransformS5_S5_f(i7);
+ r4 = (r4 + 8)|0;
+ r5 = r11 >> 2;
+ heap32[(fp+-240)] = r4;
+ heap32[(r5+52)] = r8;
+ heap32[(r5+53)] = r6;
+ r4 = r8 >> 2;
+ heap32[(r5+54)] = r0;
+ r0 = r3 >> 2;
+ heap32[(r5+50)] = heap32[(r4+1)];
+ r0 = heap32[(r0)];
+ r0 = r0 >> 2;
+ r0 = heap32[(r0+2)];
+ r4 = sp + -976;
+ r5 = sp + -992;
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r10;
+ heap32[(g0+2)] = r4;
+ heap32[(g0+3)] = r5;
+ __FUNCTION_TABLE__[(r0)>>2](i7);
+ r0 = _ZTVZN22btBvhTriangleMeshShape17performConvexcastEP18btTriangleCallbackRK9btVector3S4_S4_S4_E21MyNodeOverlapCallback;
+ r3 = sp + -16;
+ r6 = heap32[(r1+12)];
+ r0 = (r0 + 8)|0;
+ r7 = r3 >> 2;
+ heap32[(fp+-4)] = r0;
+ heap32[(r7+1)] = r6;
+ heap32[(r7+2)] = r11;
+ r0 = heap32[(r1+13)];
+ r1 = heapU8[r0+60];
+ if(r1 ==0) //_LBB247_10
+{
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r3;
+ heap32[(g0+2)] = r2;
+ heap32[(g0+3)] = r9;
+ heap32[(g0+4)] = r4;
+ heap32[(g0+5)] = r5;
+ _ZNK14btQuantizedBvh27walkStacklessTreeAgainstRayEP21btNodeOverlapCallbackRK9btVector3S4_S4_S4_ii(i7);
+ return;
+}
+else{
+ r1 = r0 >> 2;
+ r1 = heap32[(r1+14)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r3;
+ heap32[(g0+2)] = r2;
+ heap32[(g0+3)] = r9;
+ heap32[(g0+4)] = r4;
+ heap32[(g0+5)] = r5;
+ heap32[(g0+6)] = r1;
+ _ZNK14btQuantizedBvh36walkStacklessQuantizedTreeAgainstRayEP21btNodeOverlapCallbackRK9btVector3S4_S4_S4_ii(i7);
+ return;
+}
+}
+}
+}
+else{
+ r1 = _ZTVN12btConvexCast10CastResultE;
+ r2 = sp + -200;
+ r1 = (r1 + 8)|0;
+ r9 = r2 >> 2;
+ heap32[(fp+-50)] = r1;
+ heap32[(r9+42)] = 0;
+ r1 = sp + -560;
+ r10 = r8 >> 2;
+ heapFloat[(r9+43)] = f0;
+ r11 = r1 >> 2;
+ heap32[(r9+41)] = heap32[(r10+1)];
+ r12 = _ZTV30btGjkEpaPenetrationDepthSolver;
+ r13 = 0;
+ heap32[(r11+77)] = 953267991;
+ r11 = _ZTV27btContinuousConvexCollision;
+ r12 = (r12 + 8)|0;
+ heap8[sp+-228] = r13;
+ r13 = sp + -592;
+ r11 = (r11 + 8)|0;
+ heap32[(fp+-142)] = r12;
+ r12 = r13 >> 2;
+ heap32[(fp+-148)] = r11;
+ r11 = sp + -568;
+ heap32[(r12+1)] = r1;
+ heap32[(r12+2)] = r11;
+ heap32[(r12+3)] = r3;
+ heap32[(r12+4)] = r0;
+ heap32[(g0)] = r13;
+ heap32[(g0+1)] = r4;
+ heap32[(g0+2)] = r5;
+ heap32[(g0+3)] = r7;
+ heap32[(g0+4)] = r7;
+ heap32[(g0+5)] = r2;
+ _ZN27btContinuousConvexCollision16calcTimeOfImpactERK11btTransformS2_S2_S2_RN12btConvexCast10CastResultE(i7);
+ r0 = r_g0;
+if(!(r0 ==0)) //_LBB247_5
+{
+ f0 = heapFloat[(r9+33)];
+ f1 = heapFloat[(r9+34)];
+ f2 = heapFloat[(r9+35)];
+ f0 = f0*f0;
+ f1 = f1*f1;
+ f0 = f0+f1;
+ f1 = f2*f2;
+ f0 = f0+f1;
+ f1 = 9.9999997473787516e-005;
+if(!(f0 <=f1)) //_LBB247_5
+{
+ f1 = heapFloat[(r9+41)];
+ f2 = heapFloat[(r10+1)];
+if(!(f1 >=f2)) //_LBB247_5
+{
+ heapFloat[(g0)] = f0;
+ sqrtf(i7);
+ f1 = 1;
+ f2 = heapFloat[(r9+33)];
+ f0 = f1/f_g0;
+ f1 = f2*f0;
+ heapFloat[(r9+33)] = f1;
+ f2 = heapFloat[(r9+34)];
+ f2 = f2*f0;
+ heapFloat[(r9+34)] = f2;
+ f3 = heapFloat[(r9+35)];
+ f0 = f3*f0;
+ heapFloat[(r9+35)] = f0;
+ r0 = sp + -640;
+ f3 = heapFloat[(r9+41)];
+ r1 = r0 >> 2;
+ heap32[(fp+-160)] = r6;
+ heap32[(r1+1)] = 0;
+ heapFloat[(r1+2)] = f1;
+ heapFloat[(r1+3)] = f2;
+ heapFloat[(r1+4)] = f0;
+ heap32[(r1+5)] = heap32[(r9+36)];
+ heap32[(r1+6)] = heap32[(r9+37)];
+ heap32[(r1+7)] = heap32[(r9+38)];
+ heap32[(r1+8)] = heap32[(r9+39)];
+ heap32[(r1+9)] = heap32[(r9+40)];
+ heapFloat[(r1+10)] = f3;
+ r1 = heap32[(r10)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+3)];
+ heap32[(g0)] = r8;
+ heap32[(g0+1)] = r0;
+ heap32[(g0+2)] = 1;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+}
+}
+}
+}
+} while(0);
+ return;
+}
+
+function _ZN16btCollisionWorld13rayTestSingleERK11btTransformS2_P17btCollisionObjectPK16btCollisionShapeS2_RNS_17RayResultCallbackE(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+ var r13;
+ var r14;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+ var f10;
+ var f11;
+ var f12;
+ var f13;
+ var f14;
+ var f15;
+ var f16;
+ var f17;
+ var f18;
+ var f19;
+ var f20;
+ var f21;
+ var f22;
+ var f23;
+ var f24;
+ var f25;
+ var f26;
+ var f27;
+ var f28;
+ var f29;
+var __label__ = 0;
+ i7 = sp + -1120;var g0 = i7>>2; // save stack
+ r0 = sp + -104;
+ r1 = r0 >> 2;
+ heap32[(r1+2)] = 0;
+ heap32[(r1+3)] = 1065353216;
+ heap32[(r1+4)] = 1065353216;
+ r2 = _ZTV13btSphereShape;
+ heap32[(r1+5)] = 1065353216;
+ r2 = (r2 + 8)|0;
+ heap32[(r1+6)] = 0;
+ heap32[(fp+-26)] = r2;
+ heap32[(r1+1)] = 8;
+ r2 = heap32[(fp+3)];
+ heap32[(r1+7)] = 0;
+ r3 = r2 >> 2;
+ heap32[(r1+11)] = 0;
+ r1 = heap32[(r3+1)];
+ r4 = heap32[(fp)];
+ r5 = heap32[(fp+1)];
+ r6 = heap32[(fp+2)];
+ r7 = heap32[(fp+4)];
+ r8 = heap32[(fp+5)];
+ if(r1 >19) //_LBB248_6
+{
+ r0 = (r1 + -21)|0;
+ if(uint(r0) >uint(8)) //_LBB248_25
+{
+if(!(r1 !=31)) //_LBB248_29
+{
+ r0 = heap32[(r3+4)];
+if(!(r0 <1)) //_LBB248_29
+{
+ r0 = 0;
+_8: while(true){
+ r1 = (r0 * 20)|0;
+ r2 = heap32[(r3+6)];
+ r1 = r1 << 2;
+ r1 = (r2 + r1)|0;
+ r1 = r1 >> 2;
+ r2 = r7 >> 2;
+ f0 = heapFloat[(r1)];
+ f1 = heapFloat[(r2)];
+ f2 = heapFloat[(r1+4)];
+ f3 = heapFloat[(r2+1)];
+ f4 = heapFloat[(r1+1)];
+ f5 = heapFloat[(r1+5)];
+ f6 = f0*f1;
+ f7 = f2*f3;
+ f8 = heapFloat[(r1+8)];
+ f9 = heapFloat[(r2+2)];
+ f10 = heapFloat[(r2+8)];
+ f11 = heapFloat[(r1+2)];
+ f12 = heapFloat[(r2+4)];
+ f13 = heapFloat[(r1+12)];
+ f14 = heapFloat[(r2+9)];
+ f15 = heapFloat[(r1+6)];
+ f16 = heapFloat[(r2+5)];
+ f17 = heapFloat[(r1+13)];
+ f18 = heapFloat[(r1+9)];
+ f19 = heapFloat[(r2+10)];
+ f20 = heapFloat[(r1+10)];
+ f21 = heapFloat[(r2+6)];
+ f22 = heapFloat[(r1+14)];
+ f23 = f4*f1;
+ f24 = f5*f3;
+ f6 = f6+f7;
+ f7 = f8*f9;
+ r1 = heap32[(r1+16)];
+ f25 = heapFloat[(r2+14)];
+ f26 = heapFloat[(r2+13)];
+ f27 = heapFloat[(r2+12)];
+ r2 = sp + -1056;
+ f28 = f11*f1;
+ f29 = f15*f3;
+ f23 = f23+f24;
+ f24 = f18*f9;
+ f6 = f6+f7;
+ r9 = r2 >> 2;
+ f7 = f28+f29;
+ f28 = f20*f9;
+ f23 = f23+f24;
+ heapFloat[(fp+-264)] = f6;
+ f6 = f0*f12;
+ f24 = f2*f16;
+ f7 = f7+f28;
+ heapFloat[(r9+1)] = f23;
+ heapFloat[(r9+2)] = f7;
+ f7 = f4*f12;
+ f23 = f5*f16;
+ f6 = f6+f24;
+ f24 = f8*f21;
+ f28 = f11*f12;
+ f29 = f15*f16;
+ f7 = f7+f23;
+ f23 = f18*f21;
+ f6 = f6+f24;
+ heap32[(r9+3)] = 0;
+ f24 = f28+f29;
+ f28 = f20*f21;
+ f7 = f7+f23;
+ heapFloat[(r9+4)] = f6;
+ f0 = f0*f10;
+ f2 = f2*f14;
+ f6 = f24+f28;
+ heapFloat[(r9+5)] = f7;
+ heapFloat[(r9+6)] = f6;
+ f4 = f4*f10;
+ f5 = f5*f14;
+ f0 = f0+f2;
+ f2 = f8*f19;
+ f6 = f11*f10;
+ f7 = f15*f14;
+ f4 = f4+f5;
+ f5 = f18*f19;
+ f0 = f0+f2;
+ heap32[(r9+7)] = 0;
+ f1 = f1*f13;
+ f2 = f3*f17;
+ f3 = f6+f7;
+ f6 = f20*f19;
+ f4 = f4+f5;
+ heapFloat[(r9+8)] = f0;
+ f0 = f12*f13;
+ f5 = f16*f17;
+ f1 = f1+f2;
+ f2 = f9*f22;
+ f3 = f3+f6;
+ heapFloat[(r9+9)] = f4;
+ f1 = f1+f2;
+ heapFloat[(r9+10)] = f3;
+ f2 = f10*f13;
+ f3 = f14*f17;
+ f0 = f0+f5;
+ f4 = f21*f22;
+ f0 = f0+f4;
+ f2 = f2+f3;
+ f3 = f19*f22;
+ f1 = f1+f27;
+ heap32[(r9+11)] = 0;
+ f2 = f2+f3;
+ f0 = f0+f26;
+ heapFloat[(r9+12)] = f1;
+ f1 = f2+f25;
+ heapFloat[(r9+13)] = f0;
+ heapFloat[(r9+14)] = f1;
+ r10 = r6 >> 2;
+ heap32[(r9+15)] = 0;
+ r9 = sp + -1088;
+ r11 = heap32[(r10+48)];
+ r12 = r9 >> 2;
+ heap32[(r10+48)] = r1;
+ r13 = 1;
+ heap32[(r12+2)] = 0;
+ r14 = -1;
+ heap16[(sp+-1076)>>1] = r13;
+ heap16[(sp+-1074)>>1] = r14;
+ r13 = _ZTVZN16btCollisionWorld13rayTestSingleERK11btTransformS2_P17btCollisionObjectPK16btCollisionShapeS2_RNS_17RayResultCallbackEE15LocalInfoAdder2;
+ heap32[(r12+4)] = 0;
+ r13 = (r13 + 8)|0;
+ heap32[(fp+-272)] = r13;
+ heap32[(r12+5)] = r8;
+ r14 = r8 >> 2;
+ heap32[(r12+6)] = r0;
+ heap32[(r12+1)] = heap32[(r14+1)];
+ heap32[(g0)] = r4;
+ heap32[(g0+1)] = r5;
+ heap32[(g0+2)] = r6;
+ heap32[(g0+3)] = r1;
+ heap32[(g0+4)] = r2;
+ heap32[(g0+5)] = r9;
+ _ZN16btCollisionWorld13rayTestSingleERK11btTransformS2_P17btCollisionObjectPK16btCollisionShapeS2_RNS_17RayResultCallbackE(i7);
+ r0 = (r0 + 1)|0;
+ heap32[(r10+48)] = r11;
+ heap32[(fp+-272)] = r13;
+ r1 = heap32[(r3+4)];
+if(!(r1 >r0)) //_LBB248_28
+{
+break _8;
+}
+}
+}
+}
+ return;
+}
+else{
+ if(r1 !=21) //_LBB248_12
+{
+ r1 = r7 >> 2;
+ r4 = r4 >> 2;
+ f0 = heapFloat[(r1+12)];
+ f1 = heapFloat[(r1+13)];
+ f2 = heapFloat[(r1+4)];
+ f3 = heapFloat[(r4+13)];
+ f4 = heapFloat[(r1)];
+ f5 = -f0;
+ f6 = heapFloat[(r4+12)];
+ f7 = heapFloat[(r1+5)];
+ f8 = heapFloat[(r1+1)];
+ f9 = f4*f6;
+ f10 = f2*f3;
+ f11 = f4*f5;
+ f12 = f2*f1;
+ f13 = heapFloat[(r1+14)];
+ f14 = heapFloat[(r1+8)];
+ f15 = heapFloat[(r4+14)];
+ r4 = r5 >> 2;
+ f16 = heapFloat[(r1+9)];
+ f17 = heapFloat[(r1+6)];
+ f18 = heapFloat[(r1+2)];
+ r5 = r8 >> 2;
+ f9 = f9+f10;
+ f10 = f14*f15;
+ f11 = f11-f12;
+ f12 = f14*f13;
+ f19 = f8*f6;
+ f20 = f7*f3;
+ f21 = f8*f5;
+ f22 = f7*f1;
+ f23 = heapFloat[(r4+12)];
+ f24 = heapFloat[(r4+13)];
+ f25 = heapFloat[(r1+10)];
+ f26 = heapFloat[(r4+14)];
+ r4 = sp + -960;
+ r7 = heap32[(r5+4)];
+ f9 = f9+f10;
+ f10 = f11-f12;
+ f6 = f18*f6;
+ f3 = f17*f3;
+ f11 = f19+f20;
+ f12 = f16*f15;
+ f5 = f18*f5;
+ f19 = f17*f1;
+ f20 = f21-f22;
+ f21 = f16*f13;
+ f9 = f9+f10;
+ f3 = f6+f3;
+ f6 = f25*f15;
+ f11 = f11+f12;
+ f12 = f20-f21;
+ r0 = r4 >> 2;
+ f5 = f5-f19;
+ f15 = f25*f13;
+ f11 = f11+f12;
+ heapFloat[(r0+1)] = f9;
+ f19 = f4*f23;
+ f20 = f2*f24;
+ f3 = f3+f6;
+ f5 = f5-f15;
+ f3 = f3+f5;
+ heapFloat[(r0+2)] = f11;
+ f6 = f19+f20;
+ f15 = f14*f26;
+ f19 = f8*f23;
+ f20 = f7*f24;
+ f6 = f6+f15;
+ heapFloat[(r0+3)] = f3;
+ f15 = f18*f23;
+ f21 = f17*f24;
+ f19 = f19+f20;
+ f20 = f16*f26;
+ f6 = f6+f10;
+ f10 = f19+f20;
+ heap32[(r0+4)] = 0;
+ f15 = f15+f21;
+ f19 = f25*f26;
+ f15 = f15+f19;
+ f10 = f10+f12;
+ heapFloat[(r0+5)] = f6;
+ f5 = f15+f5;
+ heapFloat[(r0+6)] = f10;
+ heapFloat[(r0+7)] = f5;
+ r9 = _ZTVZN16btCollisionWorld13rayTestSingleERK11btTransformS2_P17btCollisionObjectPK16btCollisionShapeS2_RNS_17RayResultCallbackEE29BridgeTriangleRaycastCallback_0;
+ heap32[(r0+8)] = 0;
+ r9 = (r9 + 8)|0;
+ heap32[(r0+9)] = r7;
+ heap32[(fp+-240)] = r9;
+ heap32[(r0+11)] = r8;
+ heap32[(r0+12)] = r6;
+ heap32[(r0+13)] = r2;
+ heapFloat[(r0+14)] = f4;
+ heapFloat[(r0+15)] = f8;
+ heapFloat[(r0+16)] = f18;
+ heap32[(r0+17)] = heap32[(r1+3)];
+ heapFloat[(r0+18)] = f2;
+ heapFloat[(r0+19)] = f7;
+ heapFloat[(r0+20)] = f17;
+ heap32[(r0+21)] = heap32[(r1+7)];
+ heapFloat[(r0+22)] = f14;
+ heapFloat[(r0+23)] = f16;
+ heapFloat[(r0+24)] = f25;
+ heap32[(r0+25)] = heap32[(r1+11)];
+ heapFloat[(r0+26)] = f0;
+ heapFloat[(r0+27)] = f1;
+ heapFloat[(r0+28)] = f13;
+ heap32[(r0+29)] = heap32[(r1+15)];
+ r1 = sp + -976;
+ heap32[(r0+10)] = heap32[(r5+1)];
+ r5 = r1 >> 2;
+ heapFloat[(fp+-244)] = f9;
+ heapFloat[(r5+1)] = f11;
+ heapFloat[(r5+2)] = f3;
+ heap32[(r5+3)] = 0;
+if(!(f6 >=f9)) //_LBB248_14
+{
+ heapFloat[(fp+-244)] = f6;
+}
+if(!(f10 >=f11)) //_LBB248_16
+{
+ heapFloat[(r5+1)] = f10;
+}
+if(!(f5 >=f3)) //_LBB248_18
+{
+ heapFloat[(r5+2)] = f5;
+}
+ r5 = sp + -992;
+ r6 = r5 >> 2;
+ heapFloat[(fp+-248)] = f9;
+ heapFloat[(r6+1)] = f11;
+ heapFloat[(r6+2)] = f3;
+ heap32[(r6+3)] = 0;
+if(!(f9 >=f6)) //_LBB248_20
+{
+ heapFloat[(fp+-248)] = f6;
+}
+if(!(f11 >=f10)) //_LBB248_22
+{
+ heapFloat[(r6+1)] = f10;
+}
+if(!(f3 >=f5)) //_LBB248_24
+{
+ heapFloat[(r6+2)] = f5;
+}
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3+15)];
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = r4;
+ heap32[(g0+2)] = r1;
+ heap32[(g0+3)] = r5;
+ r1 = _ZTV18btTriangleCallback;
+ r1 = (r1 + 8)|0;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ heap32[(fp+-240)] = r1;
+ return;
+}
+else{
+ r1 = r7 >> 2;
+ r4 = r4 >> 2;
+ f0 = heapFloat[(r1+12)];
+ f1 = heapFloat[(r1+13)];
+ f2 = heapFloat[(r1+4)];
+ f3 = heapFloat[(r4+13)];
+ f4 = heapFloat[(r1)];
+ f5 = heapFloat[(r4+12)];
+ f6 = -f0;
+ f7 = heapFloat[(r1+5)];
+ f8 = heapFloat[(r1+1)];
+ f9 = heapFloat[(r1+14)];
+ f10 = heapFloat[(r1+8)];
+ f11 = heapFloat[(r4+14)];
+ f12 = f4*f5;
+ f13 = f2*f3;
+ f14 = f4*f6;
+ f15 = f2*f1;
+ f16 = heapFloat[(r1+9)];
+ f17 = heapFloat[(r1+6)];
+ f18 = heapFloat[(r1+2)];
+ f19 = f8*f5;
+ f20 = f7*f3;
+ f21 = f8*f6;
+ f22 = f7*f1;
+ f12 = f12+f13;
+ f13 = f10*f11;
+ f14 = f14-f15;
+ f15 = f10*f9;
+ f23 = heapFloat[(r1+10)];
+ f5 = f18*f5;
+ f3 = f17*f3;
+ f6 = f18*f6;
+ f24 = f17*f1;
+ f19 = f19+f20;
+ f20 = f16*f11;
+ f21 = f21-f22;
+ f22 = f16*f9;
+ f12 = f12+f13;
+ f13 = f14-f15;
+ r4 = sp + -704;
+ f12 = f12+f13;
+ f3 = f5+f3;
+ f5 = f23*f11;
+ f6 = f6-f24;
+ f11 = f23*f9;
+ f14 = f19+f20;
+ f15 = f21-f22;
+ r7 = r4 >> 2;
+ heapFloat[(fp+-176)] = f12;
+ f14 = f14+f15;
+ f3 = f3+f5;
+ f5 = f6-f11;
+ heapFloat[(r7+1)] = f14;
+ f3 = f3+f5;
+ heapFloat[(r7+2)] = f3;
+ r5 = r5 >> 2;
+ heap32[(r7+3)] = 0;
+ f6 = heapFloat[(r5+12)];
+ f11 = heapFloat[(r5+13)];
+ f19 = heapFloat[(r5+14)];
+ f20 = f4*f6;
+ f21 = f2*f11;
+ f22 = f8*f6;
+ f24 = f7*f11;
+ f20 = f20+f21;
+ f21 = f10*f19;
+ f20 = f20+f21;
+ f6 = f18*f6;
+ f11 = f17*f11;
+ f21 = f22+f24;
+ f22 = f16*f19;
+ r5 = sp + -720;
+ f21 = f21+f22;
+ f13 = f20+f13;
+ f6 = f6+f11;
+ f11 = f23*f19;
+ f6 = f6+f11;
+ r7 = r5 >> 2;
+ heapFloat[(fp+-180)] = f13;
+ f11 = f21+f15;
+ heapFloat[(r7+1)] = f11;
+ f5 = f6+f5;
+ heapFloat[(r7+2)] = f5;
+ r0 = sp + -840;
+ r9 = r8 >> 2;
+ heap32[(r7+3)] = 0;
+ r7 = r0 >> 2;
+ r10 = heap32[(r9+4)];
+ heapFloat[(r7+1)] = f12;
+ heapFloat[(r7+2)] = f14;
+ heapFloat[(r7+3)] = f3;
+ heap32[(r7+4)] = 0;
+ heapFloat[(r7+5)] = f13;
+ heapFloat[(r7+6)] = f11;
+ heapFloat[(r7+7)] = f5;
+ r11 = _ZTVZN16btCollisionWorld13rayTestSingleERK11btTransformS2_P17btCollisionObjectPK16btCollisionShapeS2_RNS_17RayResultCallbackEE29BridgeTriangleRaycastCallback;
+ heap32[(r7+8)] = 0;
+ r11 = (r11 + 8)|0;
+ heap32[(r7+9)] = r10;
+ heap32[(fp+-210)] = r11;
+ heap32[(r7+11)] = r8;
+ heap32[(r7+12)] = r6;
+ heap32[(r7+13)] = r2;
+ heapFloat[(r7+14)] = f4;
+ heapFloat[(r7+15)] = f8;
+ heapFloat[(r7+16)] = f18;
+ heap32[(r7+17)] = heap32[(r1+3)];
+ heapFloat[(r7+18)] = f2;
+ heapFloat[(r7+19)] = f7;
+ heapFloat[(r7+20)] = f17;
+ heap32[(r7+21)] = heap32[(r1+7)];
+ heapFloat[(r7+22)] = f10;
+ heapFloat[(r7+23)] = f16;
+ heapFloat[(r7+24)] = f23;
+ heap32[(r7+25)] = heap32[(r1+11)];
+ heapFloat[(r7+26)] = f0;
+ heapFloat[(r7+27)] = f1;
+ heapFloat[(r7+28)] = f9;
+ heap32[(r7+29)] = heap32[(r1+15)];
+ r1 = _ZTVZN22btBvhTriangleMeshShape14performRaycastEP18btTriangleCallbackRK9btVector3S4_E21MyNodeOverlapCallback;
+ heap32[(r7+10)] = heap32[(r9+1)];
+ r2 = sp + -48;
+ r6 = heap32[(r3+12)];
+ r1 = (r1 + 8)|0;
+ r7 = r2 >> 2;
+ heap32[(fp+-12)] = r1;
+ heap32[(r7+1)] = r6;
+ heap32[(r7+2)] = r0;
+ r1 = heap32[(r3+13)];
+ r3 = sp + -32;
+ r6 = r3 >> 2;
+ heap32[(fp+-8)] = 0;
+ heap32[(r6+1)] = 0;
+ heap32[(r6+2)] = 0;
+ r7 = sp + -16;
+ heap32[(r6+3)] = 0;
+ r6 = r7 >> 2;
+ heap32[(fp+-4)] = 0;
+ heap32[(r6+1)] = 0;
+ heap32[(r6+2)] = 0;
+ heap32[(r6+3)] = 0;
+ r6 = heapU8[r1+60];
+ if(r6 ==0) //_LBB248_10
+{
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r2;
+ heap32[(g0+2)] = r4;
+ heap32[(g0+3)] = r5;
+ heap32[(g0+4)] = r7;
+ heap32[(g0+5)] = r3;
+ _ZNK14btQuantizedBvh27walkStacklessTreeAgainstRayEP21btNodeOverlapCallbackRK9btVector3S4_S4_S4_ii(i7);
+}
+else{
+ r6 = r1 >> 2;
+ r6 = heap32[(r6+14)];
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r2;
+ heap32[(g0+2)] = r4;
+ heap32[(g0+3)] = r5;
+ heap32[(g0+4)] = r7;
+ heap32[(g0+5)] = r3;
+ heap32[(g0+6)] = r6;
+ _ZNK14btQuantizedBvh36walkStacklessQuantizedTreeAgainstRayEP21btNodeOverlapCallbackRK9btVector3S4_S4_S4_ii(i7);
+}
+ r1 = _ZTV18btTriangleCallback;
+ r1 = (r1 + 8)|0;
+ heap32[(fp+-210)] = r1;
+ return;
+}
+}
+}
+else{
+ r1 = _ZTVN12btConvexCast10CastResultE;
+ r3 = sp + -280;
+ r1 = (r1 + 8)|0;
+ r9 = r3 >> 2;
+ heap32[(fp+-70)] = r1;
+ heap32[(r9+42)] = 0;
+ r1 = sp + -640;
+ r10 = r8 >> 2;
+ heap32[(r9+43)] = 0;
+ r11 = r1 >> 2;
+ heap32[(r9+41)] = heap32[(r10+1)];
+ r12 = _ZTV22btSubsimplexConvexCast;
+ r13 = 0;
+ heap32[(r11+77)] = 953267991;
+ r11 = sp + -656;
+ r12 = (r12 + 8)|0;
+ heap8[sp+-308] = r13;
+ r13 = r11 >> 2;
+ heap32[(fp+-164)] = r12;
+ heap32[(r13+1)] = r1;
+ heap32[(r13+2)] = r0;
+ heap32[(r13+3)] = r2;
+ heap32[(g0)] = r11;
+ heap32[(g0+1)] = r4;
+ heap32[(g0+2)] = r5;
+ heap32[(g0+3)] = r7;
+ heap32[(g0+4)] = r7;
+ heap32[(g0+5)] = r3;
+ _ZN22btSubsimplexConvexCast16calcTimeOfImpactERK11btTransformS2_S2_S2_RN12btConvexCast10CastResultE(i7);
+ r1 = r_g0;
+if(!(r1 ==0)) //_LBB248_5
+{
+ f0 = heapFloat[(r9+33)];
+ f1 = heapFloat[(r9+34)];
+ f2 = heapFloat[(r9+35)];
+ f3 = f0*f0;
+ f4 = f1*f1;
+ f3 = f3+f4;
+ f4 = f2*f2;
+ f3 = f3+f4;
+ f4 = 9.9999997473787516e-005;
+if(!(f3 <=f4)) //_LBB248_5
+{
+ f3 = heapFloat[(r9+41)];
+ f4 = heapFloat[(r10+1)];
+if(!(f3 >=f4)) //_LBB248_5
+{
+ r1 = r4 >> 2;
+ f4 = heapFloat[(r1+4)];
+ f5 = heapFloat[(r1)];
+ f6 = heapFloat[(r1+5)];
+ f7 = heapFloat[(r1+1)];
+ f8 = heapFloat[(r1+8)];
+ f9 = heapFloat[(r1+9)];
+ f4 = f4*f0;
+ f6 = f6*f1;
+ f10 = heapFloat[(r1+6)];
+ f11 = heapFloat[(r1+2)];
+ f5 = f5*f0;
+ f7 = f7*f1;
+ f12 = heapFloat[(r1+10)];
+ f0 = f8*f0;
+ f1 = f9*f1;
+ f4 = f4+f6;
+ f6 = f10*f2;
+ f5 = f5+f7;
+ f7 = f11*f2;
+ f4 = f4+f6;
+ f5 = f5+f7;
+ f0 = f0+f1;
+ f1 = f12*f2;
+ f0 = f0+f1;
+ f1 = f5*f5;
+ f2 = f4*f4;
+ heap32[(r9+36)] = 0;
+ f1 = f1+f2;
+ f2 = f0*f0;
+ f1 = f1+f2;
+ heapFloat[(g0)] = f1;
+ f1 = 1;
+ sqrtf(i7);
+ f1 = f1/f_g0;
+ f2 = f5*f1;
+ f4 = f4*f1;
+ heapFloat[(r9+33)] = f2;
+ f0 = f0*f1;
+ heapFloat[(r9+34)] = f4;
+ r1 = sp + -688;
+ heapFloat[(r9+35)] = f0;
+ r2 = r1 >> 2;
+ heap32[(fp+-172)] = r6;
+ heap32[(r2+1)] = 0;
+ heapFloat[(r2+2)] = f2;
+ heapFloat[(r2+3)] = f4;
+ heapFloat[(r2+4)] = f0;
+ heap32[(r2+5)] = 0;
+ heapFloat[(r2+6)] = f3;
+ r2 = heap32[(r10)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+3)];
+ heap32[(g0)] = r8;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 1;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+}
+}
+}
+ r1 = _ZTV12btConvexCast;
+ r1 = (r1 + 8)|0;
+ heap32[(fp+-164)] = r1;
+ return;
+}
+}
+
+function _ZN22btCompoundLeafCallbackD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV22btCompoundLeafCallback;
+ r0 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r0)] = r1;
+ return;
+}
+
+function _ZN22btCompoundLeafCallbackD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV22btCompoundLeafCallback;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZN22btCompoundLeafCallback7ProcessEPK10btDbvtNode(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+var __label__ = 0;
+ i7 = sp + -136;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ r2 = heap32[(r1+1)];
+ r3 = heap32[(fp+1)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+48)];
+ r4 = r3 >> 2;
+ r4 = heap32[(r4+9)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+6)];
+ r5 = (r4 * 80)|0;
+ r6 = heap32[(r1+4)];
+ r2 = (r2 + r5)|0;
+ r5 = r6 >> 2;
+ r2 = r2 >> 2;
+ r5 = heap32[(r5+5)];
+ r2 = heap32[(r2+16)];
+if(!(r5 ==0)) //_LBB251_3
+{
+ r6 = r5 >> 2;
+ r6 = heap32[(r6)];
+ r6 = r6 >> 2;
+ r6 = heap32[(r6+12)];
+ heap32[(g0)] = r5;
+ __FUNCTION_TABLE__[(r6)>>2](i7);
+ r5 = r_g0 & 2;
+if(!(r5 ==0)) //_LBB251_3
+{
+ r5 = heap32[(r1+1)];
+ r6 = sp + -112;
+ r5 = r5 >> 2;
+ r7 = r6 >> 2;
+ heap32[(fp+-28)] = heap32[(r5+1)];
+ heap32[(r7+1)] = heap32[(r5+2)];
+ heap32[(r7+2)] = heap32[(r5+3)];
+ heap32[(r7+3)] = heap32[(r5+4)];
+ heap32[(r7+4)] = heap32[(r5+5)];
+ heap32[(r7+5)] = heap32[(r5+6)];
+ heap32[(r7+6)] = heap32[(r5+7)];
+ heap32[(r7+7)] = heap32[(r5+8)];
+ heap32[(r7+8)] = heap32[(r5+9)];
+ heap32[(r7+9)] = heap32[(r5+10)];
+ heap32[(r7+10)] = heap32[(r5+11)];
+ heap32[(r7+11)] = heap32[(r5+12)];
+ heap32[(r7+12)] = heap32[(r5+13)];
+ heap32[(r7+13)] = heap32[(r5+14)];
+ heap32[(r7+14)] = heap32[(r5+15)];
+ heap32[(r7+15)] = heap32[(r5+16)];
+ r5 = (r3 + 16)|0;
+ r7 = sp + -32;
+ r8 = sp + -48;
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r5;
+ heap32[(g0+2)] = 0;
+ heap32[(g0+3)] = r6;
+ heap32[(g0+4)] = r7;
+ heap32[(g0+5)] = r8;
+ _Z15btTransformAabbRK9btVector3S1_fRK11btTransformRS_S5_(i7);
+ r1 = heap32[(r1+4)];
+ r1 = r1 >> 2;
+ r3 = heap32[(r1+5)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3+13)];
+ r5 = sp + -16;
+ r6 = r5 >> 2;
+ heap32[(fp+-4)] = 1065353216;
+ heap32[(r6+1)] = 0;
+ heap32[(r6+2)] = 0;
+ heap32[(r6+3)] = 0;
+ r1 = heap32[(r1+5)];
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r7;
+ heap32[(g0+2)] = r8;
+ heap32[(g0+3)] = r5;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+}
+}
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r2;
+ heap32[(g0+2)] = r4;
+ _ZN22btCompoundLeafCallback17ProcessChildShapeEP16btCollisionShapei(i7);
+ return;
+}
+
+function _ZN28btCompoundCollisionAlgorithm22getAllContactManifoldsER20btAlignedObjectArrayIP20btPersistentManifoldE(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r1 = heap32[(r0+3)];
+if(!(r1 <1)) //_LBB252_5
+{
+ r1 = heap32[(fp+1)];
+ r2 = 0;
+_3: while(true){
+ r3 = heap32[(r0+5)];
+ r4 = r2 << 2;
+ r3 = (r3 + r4)|0;
+ r3 = r3 >> 2;
+ r3 = heap32[(r3)];
+if(!(r3 ==0)) //_LBB252_4
+{
+ r4 = r3 >> 2;
+ r4 = heap32[(r4)];
+ r4 = r4 >> 2;
+ r4 = heap32[(r4+4)];
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r1;
+ __FUNCTION_TABLE__[(r4)>>2](i7);
+}
+ r2 = (r2 + 1)|0;
+ r3 = heap32[(r0+3)];
+ if(r3 >r2) //_LBB252_2
+{
+continue _3;
+}
+else{
+break _3;
+}
+}
+}
+ return;
+}
+
+function _ZN28btCompoundCollisionAlgorithm21calculateTimeOfImpactEP17btCollisionObjectS1_RK16btDispatcherInfoP16btManifoldResult(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+ var f10;
+ var f11;
+ var f12;
+ var f13;
+ var f14;
+ var f15;
+ var f16;
+ var f17;
+ var f18;
+ var f19;
+ var f20;
+ var f21;
+ var f22;
+ var f23;
+ var f24;
+ var f25;
+ var f26;
+ var f27;
+ var f28;
+ var f29;
+ var f30;
+var __label__ = 0;
+ i7 = sp + -40;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = heapU8[r0+28];
+ r2 = heap32[(fp+1)];
+ r3 = heap32[(fp+2)];
+ r4 = r1 == 0 ? r2 : r3;
+ r5 = r4 >> 2;
+ r6 = heap32[(r5+48)];
+ r7 = r6 >> 2;
+ r8 = heap32[(r7+1)];
+ if(r8 ==31) //_LBB253_2
+{
+ r0 = r0 >> 2;
+ r8 = heap32[(r0+3)];
+_3: do {
+ if(r8 >0) //_LBB253_4
+{
+ r9 = heap32[(fp+3)];
+ r10 = heap32[(fp+4)];
+ r1 = r1 == 0 ? r3 : r2;
+ r2 = 0;
+ f0 = 1;
+_5: while(true){
+ r3 = (r2 * 20)|0;
+ r11 = heap32[(r7+6)];
+ r3 = r3 << 2;
+ r3 = (r11 + r3)|0;
+ r3 = r3 >> 2;
+ f1 = heapFloat[(r3)];
+ f2 = heapFloat[(r5+1)];
+ f3 = heapFloat[(r3+4)];
+ f4 = heapFloat[(r5+2)];
+ f5 = heapFloat[(r3+1)];
+ f6 = heapFloat[(r3+5)];
+ f7 = f1*f2;
+ f8 = f3*f4;
+ f9 = heapFloat[(r3+8)];
+ f10 = heapFloat[(r5+3)];
+ f11 = heapFloat[(r5+10)];
+ f12 = heapFloat[(r3+13)];
+ f13 = heapFloat[(r5+6)];
+ f14 = heapFloat[(r3+6)];
+ f15 = heapFloat[(r5+9)];
+ f16 = heapFloat[(r3+12)];
+ f17 = heapFloat[(r5+5)];
+ f18 = heapFloat[(r3+2)];
+ f19 = heapFloat[(r3+14)];
+ f20 = heapFloat[(r5+11)];
+ f21 = heapFloat[(r3+10)];
+ f22 = heapFloat[(r5+7)];
+ f23 = heapFloat[(r3+9)];
+ r3 = heap32[(r3+16)];
+ f24 = f5*f2;
+ f25 = f6*f4;
+ f7 = f7+f8;
+ f8 = f9*f10;
+ f26 = heapFloat[(r5+16)];
+ heapFloat[(fp+-1)] = f26;
+ f27 = heapFloat[(r5+15)];
+ f28 = heapFloat[(r5+14)];
+ f29 = heapFloat[(r5+13)];
+ f26 = heapFloat[(r5+12)];
+ heapFloat[(fp+-2)] = f26;
+ f26 = heapFloat[(r5+8)];
+ heapFloat[(fp+-3)] = f26;
+ f26 = heapFloat[(r5+4)];
+ heapFloat[(fp+-4)] = f26;
+ f30 = f18*f2;
+ f26 = f14*f4;
+ f24 = f24+f25;
+ f25 = f23*f10;
+ f7 = f7+f8;
+ f8 = f30+f26;
+ f26 = f21*f10;
+ f24 = f24+f25;
+ heapFloat[(r5+1)] = f7;
+ f7 = f1*f17;
+ f25 = f3*f13;
+ f8 = f8+f26;
+ heapFloat[(r5+2)] = f24;
+ heapFloat[(r5+3)] = f8;
+ f8 = f5*f17;
+ f24 = f6*f13;
+ f7 = f7+f25;
+ f25 = f9*f22;
+ f26 = f18*f17;
+ f30 = f14*f13;
+ f8 = f8+f24;
+ f24 = f23*f22;
+ f7 = f7+f25;
+ heap32[(r5+4)] = 0;
+ f25 = f26+f30;
+ f26 = f21*f22;
+ f8 = f8+f24;
+ heapFloat[(r5+5)] = f7;
+ f1 = f1*f15;
+ f3 = f3*f11;
+ f7 = f25+f26;
+ heapFloat[(r5+6)] = f8;
+ heapFloat[(r5+7)] = f7;
+ f5 = f5*f15;
+ f6 = f6*f11;
+ f1 = f1+f3;
+ f3 = f9*f20;
+ f7 = f18*f15;
+ f8 = f14*f11;
+ f5 = f5+f6;
+ f6 = f23*f20;
+ f1 = f1+f3;
+ heap32[(r5+8)] = 0;
+ f3 = f2*f16;
+ f9 = f4*f12;
+ f7 = f7+f8;
+ f8 = f21*f20;
+ f5 = f5+f6;
+ heapFloat[(r5+9)] = f1;
+ f1 = f17*f16;
+ f6 = f13*f12;
+ f3 = f3+f9;
+ f9 = f10*f19;
+ f7 = f7+f8;
+ heapFloat[(r5+10)] = f5;
+ f3 = f3+f9;
+ heapFloat[(r5+11)] = f7;
+ f5 = f15*f16;
+ f7 = f11*f12;
+ f1 = f1+f6;
+ f6 = f22*f19;
+ f1 = f1+f6;
+ f5 = f5+f7;
+ f6 = f20*f19;
+ f3 = f3+f29;
+ heap32[(r5+12)] = 0;
+ f5 = f5+f6;
+ f1 = f1+f28;
+ heapFloat[(r5+13)] = f3;
+ f3 = f5+f27;
+ heapFloat[(r5+14)] = f1;
+ heapFloat[(r5+15)] = f3;
+ heap32[(r5+16)] = 0;
+ heap32[(r5+48)] = r3;
+ r3 = heap32[(r0+5)];
+ r11 = r2 << 2;
+ r3 = (r3 + r11)|0;
+ r3 = r3 >> 2;
+ r3 = heap32[(r3)];
+ r11 = r3 >> 2;
+ r11 = heap32[(r11)];
+ r11 = r11 >> 2;
+ r11 = heap32[(r11+3)];
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r4;
+ heap32[(g0+2)] = r1;
+ heap32[(g0+3)] = r9;
+ heap32[(g0+4)] = r10;
+ __FUNCTION_TABLE__[(r11)>>2](i7);
+ heap32[(r5+48)] = r6;
+ heapFloat[(r5+1)] = f2;
+ heapFloat[(r5+2)] = f4;
+ heapFloat[(r5+3)] = f10;
+ f26 = heapFloat[(fp+-4)];
+ heapFloat[(r5+4)] = f26;
+ heapFloat[(r5+5)] = f17;
+ heapFloat[(r5+6)] = f13;
+ heapFloat[(r5+7)] = f22;
+ f26 = heapFloat[(fp+-3)];
+ heapFloat[(r5+8)] = f26;
+ heapFloat[(r5+9)] = f15;
+ heapFloat[(r5+10)] = f11;
+ heapFloat[(r5+11)] = f20;
+ f26 = heapFloat[(fp+-2)];
+ heapFloat[(r5+12)] = f26;
+ heapFloat[(r5+13)] = f29;
+ heapFloat[(r5+14)] = f28;
+ r2 = (r2 + 1)|0;
+ f0 = f_g0 < f0 ? f_g0 : f0;
+ heapFloat[(r5+15)] = f27;
+ f26 = heapFloat[(fp+-1)];
+ heapFloat[(r5+16)] = f26;
+if(!(r8 !=r2)) //_LBB253_5
+{
+break _3;
+}
+}
+}
+else{
+ f0 = 1;
+}
+} while(0);
+ f_g0 = f0;
+ return;
+}
+else{
+ r0 = _2E_str99;
+ r1 = _2E_str1100;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 308;
+ _assert(i7);
+}
+}
+
+function _Z15btTransformAabbRK9btVector3S1_fRK11btTransformRS_S5_(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+ var f10;
+ var f11;
+ var f12;
+ var f13;
+ var f14;
+ var f15;
+ var f16;
+ var f17;
+ var f18;
+ var f19;
+ var f20;
+ var f21;
+ var f22;
+ var f23;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = heap32[(fp+1)];
+ r0 = r0 >> 2;
+ r1 = r1 >> 2;
+ f0 = heapFloat[(r0)];
+ f1 = heapFloat[(r1)];
+ if(f0 <=f1) //_LBB254_2
+{
+ f2 = heapFloat[(r0+1)];
+ f3 = heapFloat[(r1+1)];
+ if(f2 <=f3) //_LBB254_4
+{
+ f4 = heapFloat[(r0+2)];
+ f5 = heapFloat[(r1+2)];
+ if(f4 <=f5) //_LBB254_6
+{
+ f6 = heapFloat[(fp+2)];
+ r0 = heap32[(fp+3)];
+ r1 = heap32[(fp+4)];
+ r2 = heap32[(fp+5)];
+ f7 = f1-f0;
+ f8 = 0.5;
+ f9 = f3-f2;
+ f10 = f5-f4;
+ r0 = r0 >> 2;
+ f4 = f5+f4;
+ f2 = f3+f2;
+ f0 = f1+f0;
+ f1 = f7*f8;
+ f3 = f9*f8;
+ f5 = f10*f8;
+ f7 = heapFloat[(r0+10)];
+ f1 = f1+f6;
+ f3 = f3+f6;
+ f5 = f5+f6;
+ f4 = f4*f8;
+ f2 = f2*f8;
+ f0 = f0*f8;
+ f6 = 0;
+ if(f7 <f6) //_LBB254_8
+{
+ f8 = -f7;
+}
+else{
+ f8 = f7;
+}
+ f9 = heapFloat[(r0+9)];
+ if(f9 <f6) //_LBB254_11
+{
+ f10 = -f9;
+}
+else{
+ f10 = f9;
+}
+ f11 = heapFloat[(r0+8)];
+ if(f11 <f6) //_LBB254_14
+{
+ f12 = -f11;
+}
+else{
+ f12 = f11;
+}
+ f13 = heapFloat[(r0+6)];
+ if(f13 <f6) //_LBB254_17
+{
+ f14 = -f13;
+}
+else{
+ f14 = f13;
+}
+ f15 = heapFloat[(r0+5)];
+ if(f15 <f6) //_LBB254_20
+{
+ f16 = -f15;
+}
+else{
+ f16 = f15;
+}
+ f17 = heapFloat[(r0+4)];
+ if(f17 <f6) //_LBB254_23
+{
+ f18 = -f17;
+}
+else{
+ f18 = f17;
+}
+ f19 = heapFloat[(r0+2)];
+ if(f19 <f6) //_LBB254_26
+{
+ f20 = -f19;
+}
+else{
+ f20 = f19;
+}
+ f21 = heapFloat[(r0+1)];
+ if(f21 <f6) //_LBB254_29
+{
+ f22 = -f21;
+}
+else{
+ f22 = f21;
+}
+ f23 = heapFloat[(r0)];
+ if(f23 <f6) //_LBB254_32
+{
+ f6 = -f23;
+}
+else{
+ f6 = f23;
+}
+ f23 = f23*f0;
+ f21 = f21*f2;
+ f17 = f17*f0;
+ f15 = f15*f2;
+ f21 = f23+f21;
+ f19 = f19*f4;
+ f6 = f6*f1;
+ f22 = f22*f3;
+ f0 = f11*f0;
+ f2 = f9*f2;
+ f9 = f17+f15;
+ f11 = f13*f4;
+ f13 = f18*f1;
+ f15 = f16*f3;
+ f16 = f21+f19;
+ f17 = heapFloat[(r0+12)];
+ f6 = f6+f22;
+ f18 = f20*f5;
+ f0 = f0+f2;
+ f2 = f7*f4;
+ f1 = f12*f1;
+ f3 = f10*f3;
+ f4 = f9+f11;
+ f7 = heapFloat[(r0+13)];
+ f9 = heapFloat[(r0+14)];
+ f10 = f13+f15;
+ f11 = f14*f5;
+ f12 = f16+f17;
+ f6 = f6+f18;
+ f0 = f0+f2;
+ r0 = r1 >> 2;
+ f1 = f1+f3;
+ f2 = f8*f5;
+ f3 = f4+f7;
+ f4 = f10+f11;
+ f5 = f12-f6;
+ f0 = f0+f9;
+ f1 = f1+f2;
+ f2 = f3-f4;
+ heapFloat[(r0)] = f5;
+ f5 = f0-f1;
+ heapFloat[(r0+1)] = f2;
+ heapFloat[(r0+2)] = f5;
+ r1 = r2 >> 2;
+ f2 = f12+f6;
+ heap32[(r0+3)] = 0;
+ f3 = f3+f4;
+ heapFloat[(r1)] = f2;
+ f0 = f0+f1;
+ heapFloat[(r1+1)] = f3;
+ heapFloat[(r1+2)] = f0;
+ heap32[(r1+3)] = 0;
+ return;
+}
+else{
+ r0 = _2E_str5104;
+ r1 = _2E_str3102;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 199;
+ _assert(i7);
+}
+}
+else{
+ r0 = _2E_str4103;
+ r1 = _2E_str3102;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 198;
+ _assert(i7);
+}
+}
+else{
+ r0 = _2E_str2101;
+ r1 = _2E_str3102;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 197;
+ _assert(i7);
+}
+}
+
+function _ZN22btCompoundLeafCallback17ProcessChildShapeEP16btCollisionShapei(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+ var r13;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+ var f10;
+ var f11;
+ var f12;
+ var f13;
+ var f14;
+ var f15;
+ var f16;
+ var f17;
+ var f18;
+ var f19;
+ var f20;
+ var f21;
+ var f22;
+ var f23;
+ var f24;
+ var f25;
+ var f26;
+ var f27;
+ var f28;
+ var f29;
+ var f30;
+var __label__ = 0;
+ i7 = sp + -264;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+2)];
+ if(r0 >-1) //_LBB255_2
+{
+ r1 = heap32[(fp)];
+ r1 = r1 >> 2;
+ r2 = heap32[(r1+1)];
+ r2 = r2 >> 2;
+ r3 = heap32[(r2+48)];
+ r3 = r3 >> 2;
+ r4 = heap32[(r3+4)];
+ if(r4 >r0) //_LBB255_4
+{
+ r4 = heap32[(fp+1)];
+ r3 = heap32[(r3+6)];
+ r5 = (r0 * 80)|0;
+ r3 = (r3 + r5)|0;
+ r3 = r3 >> 2;
+ f0 = heapFloat[(r2+1)];
+ f1 = heapFloat[(r3)];
+ f2 = heapFloat[(r2+2)];
+ f3 = heapFloat[(r3+4)];
+ f4 = heapFloat[(r3+1)];
+ f5 = heapFloat[(r3+5)];
+ f6 = heapFloat[(r2+3)];
+ f7 = heapFloat[(r3+8)];
+ f8 = f1*f0;
+ f9 = f3*f2;
+ f10 = heapFloat[(r2+5)];
+ f11 = heapFloat[(r2+6)];
+ f12 = heapFloat[(r2+9)];
+ f13 = heapFloat[(r3+12)];
+ f14 = heapFloat[(r3+2)];
+ f15 = heapFloat[(r2+10)];
+ f16 = heapFloat[(r3+13)];
+ f17 = heapFloat[(r3+6)];
+ f18 = heapFloat[(r2+7)];
+ f19 = heapFloat[(r3+14)];
+ f20 = heapFloat[(r2+11)];
+ f21 = heapFloat[(r3+10)];
+ f22 = heapFloat[(r3+9)];
+ f23 = heapFloat[(r2+4)];
+ f24 = heapFloat[(r2+8)];
+ heapFloat[(fp+-59)] = f24;
+ f24 = heapFloat[(r2+12)];
+ heapFloat[(fp+-57)] = f24;
+ f24 = heapFloat[(r2+13)];
+ f25 = heapFloat[(r2+14)];
+ f26 = heapFloat[(r2+15)];
+ f27 = heapFloat[(r2+16)];
+ heapFloat[(fp+-58)] = f27;
+ f27 = heapFloat[(r2+17)];
+ heapFloat[(fp+-42)] = f27;
+ f27 = heapFloat[(r2+18)];
+ heapFloat[(fp+-41)] = f27;
+ f27 = heapFloat[(r2+19)];
+ heapFloat[(fp+-44)] = f27;
+ f27 = heapFloat[(r2+20)];
+ heapFloat[(fp+-43)] = f27;
+ f27 = heapFloat[(r2+21)];
+ heapFloat[(fp+-46)] = f27;
+ f27 = heapFloat[(r2+22)];
+ heapFloat[(fp+-45)] = f27;
+ f27 = heapFloat[(r2+23)];
+ heapFloat[(fp+-48)] = f27;
+ f27 = heapFloat[(r2+24)];
+ heapFloat[(fp+-47)] = f27;
+ f27 = heapFloat[(r2+25)];
+ heapFloat[(fp+-50)] = f27;
+ f27 = heapFloat[(r2+26)];
+ heapFloat[(fp+-49)] = f27;
+ f27 = heapFloat[(r2+27)];
+ heapFloat[(fp+-52)] = f27;
+ f27 = heapFloat[(r2+28)];
+ heapFloat[(fp+-51)] = f27;
+ f27 = heapFloat[(r2+29)];
+ heapFloat[(fp+-54)] = f27;
+ f27 = heapFloat[(r2+30)];
+ heapFloat[(fp+-53)] = f27;
+ f27 = heapFloat[(r2+31)];
+ heapFloat[(fp+-56)] = f27;
+ f27 = heapFloat[(r2+32)];
+ heapFloat[(fp+-55)] = f27;
+ f27 = f4*f0;
+ f28 = f5*f2;
+ f8 = f8+f9;
+ f9 = f7*f6;
+ r2 = sp + -96;
+ f29 = f14*f0;
+ f30 = f17*f2;
+ f27 = f27+f28;
+ f28 = f22*f6;
+ f8 = f8+f9;
+ r3 = r2 >> 2;
+ f9 = f29+f30;
+ f29 = f21*f6;
+ f27 = f27+f28;
+ heapFloat[(fp+-24)] = f8;
+ f8 = f1*f10;
+ f28 = f3*f11;
+ f9 = f9+f29;
+ heapFloat[(r3+1)] = f27;
+ heapFloat[(r3+2)] = f9;
+ f9 = f4*f10;
+ f27 = f5*f11;
+ f8 = f8+f28;
+ f28 = f7*f18;
+ f29 = f14*f10;
+ f30 = f17*f11;
+ f9 = f9+f27;
+ f27 = f22*f18;
+ f8 = f8+f28;
+ heap32[(r3+3)] = 0;
+ f28 = f29+f30;
+ f29 = f21*f18;
+ f9 = f9+f27;
+ heapFloat[(r3+4)] = f8;
+ f1 = f1*f12;
+ f3 = f3*f15;
+ f8 = f28+f29;
+ heapFloat[(r3+5)] = f9;
+ heapFloat[(r3+6)] = f8;
+ f4 = f4*f12;
+ f5 = f5*f15;
+ f1 = f1+f3;
+ f3 = f7*f20;
+ f7 = f14*f12;
+ f8 = f17*f15;
+ f4 = f4+f5;
+ f5 = f22*f20;
+ f1 = f1+f3;
+ heap32[(r3+7)] = 0;
+ f3 = f0*f13;
+ f9 = f2*f16;
+ f7 = f7+f8;
+ f8 = f21*f20;
+ f4 = f4+f5;
+ heapFloat[(r3+8)] = f1;
+ f1 = f10*f13;
+ f5 = f11*f16;
+ f3 = f3+f9;
+ f9 = f6*f19;
+ f7 = f7+f8;
+ heapFloat[(r3+9)] = f4;
+ f3 = f3+f9;
+ heapFloat[(r3+10)] = f7;
+ f4 = f12*f13;
+ f7 = f15*f16;
+ f1 = f1+f5;
+ f5 = f18*f19;
+ f1 = f1+f5;
+ f4 = f4+f7;
+ f5 = f20*f19;
+ f3 = f3+f24;
+ heap32[(r3+11)] = 0;
+ f4 = f4+f5;
+ f1 = f1+f25;
+ heapFloat[(r3+12)] = f3;
+ f3 = f4+f26;
+ heapFloat[(r3+13)] = f1;
+ heapFloat[(r3+14)] = f3;
+ r5 = r4 >> 2;
+ heap32[(r3+15)] = 0;
+ r5 = heap32[(r5)];
+ r5 = r5 >> 2;
+ r5 = heap32[(r5+2)];
+ r6 = sp + -112;
+ r7 = sp + -128;
+ heap32[(g0)] = r4;
+ heap32[(g0+1)] = r2;
+ heap32[(g0+2)] = r6;
+ heap32[(g0+3)] = r7;
+ __FUNCTION_TABLE__[(r5)>>2](i7);
+ r2 = heap32[(r1+2)];
+ r5 = r2 >> 2;
+ r5 = heap32[(r5+48)];
+ r8 = r5 >> 2;
+ r8 = heap32[(r8)];
+ r8 = r8 >> 2;
+ r8 = heap32[(r8+2)];
+ r2 = (r2 + 4)|0;
+ r9 = sp + -144;
+ r10 = sp + -160;
+ heap32[(g0)] = r5;
+ heap32[(g0+1)] = r2;
+ heap32[(g0+2)] = r9;
+ heap32[(g0+3)] = r10;
+ __FUNCTION_TABLE__[(r8)>>2](i7);
+ f1 = heapFloat[(fp+-28)];
+ f3 = heapFloat[(fp+-40)];
+ if(f1 >f3) //_LBB255_7
+{
+__label__ = 7;
+}
+else{
+ f1 = heapFloat[(fp+-32)];
+ f3 = heapFloat[(fp+-36)];
+ if(f1 <f3) //_LBB255_7
+{
+__label__ = 7;
+}
+else{
+ r2 = 1;
+__label__ = 8;
+}
+}
+if (__label__ == 7){
+ r2 = 0;
+}
+ r5 = r6 >> 2;
+ r8 = r10 >> 2;
+ f1 = heapFloat[(r5+2)];
+ f3 = heapFloat[(r8+2)];
+ if(f1 >f3) //_LBB255_11
+{
+__label__ = 10;
+}
+else{
+ r11 = r7 >> 2;
+ r12 = r9 >> 2;
+ f1 = heapFloat[(r11+2)];
+ f3 = heapFloat[(r12+2)];
+ if(f1 <f3) //_LBB255_11
+{
+__label__ = 10;
+}
+else{
+__label__ = 11;
+}
+}
+if (__label__ == 10){
+ r2 = 0;
+}
+ f1 = heapFloat[(r5+1)];
+ f3 = heapFloat[(r8+1)];
+if(!(f1 >f3)) //_LBB255_24
+{
+ r5 = r7 >> 2;
+ r8 = r9 >> 2;
+ f1 = heapFloat[(r5+1)];
+ f3 = heapFloat[(r8+1)];
+if(!(f1 <f3)) //_LBB255_24
+{
+ r2 = r2 & 255;
+if(!(r2 ==0)) //_LBB255_24
+{
+ r2 = heap32[(r1+1)];
+ r2 = r2 >> 2;
+ heap32[(r2+1)] = heap32[(fp+-24)];
+ heap32[(r2+2)] = heap32[(r3+1)];
+ heap32[(r2+3)] = heap32[(r3+2)];
+ heap32[(r2+4)] = heap32[(r3+3)];
+ heap32[(r2+5)] = heap32[(r3+4)];
+ heap32[(r2+6)] = heap32[(r3+5)];
+ heap32[(r2+7)] = heap32[(r3+6)];
+ heap32[(r2+8)] = heap32[(r3+7)];
+ heap32[(r2+9)] = heap32[(r3+8)];
+ heap32[(r2+10)] = heap32[(r3+9)];
+ heap32[(r2+11)] = heap32[(r3+10)];
+ heap32[(r2+12)] = heap32[(r3+11)];
+ heap32[(r2+13)] = heap32[(r3+12)];
+ heap32[(r2+14)] = heap32[(r3+13)];
+ heap32[(r2+15)] = heap32[(r3+14)];
+ heap32[(r2+16)] = heap32[(r3+15)];
+ r2 = heap32[(r1+1)];
+ r2 = r2 >> 2;
+ heap32[(r2+17)] = heap32[(fp+-24)];
+ heap32[(r2+18)] = heap32[(r3+1)];
+ heap32[(r2+19)] = heap32[(r3+2)];
+ heap32[(r2+20)] = heap32[(r3+3)];
+ heap32[(r2+21)] = heap32[(r3+4)];
+ heap32[(r2+22)] = heap32[(r3+5)];
+ heap32[(r2+23)] = heap32[(r3+6)];
+ heap32[(r2+24)] = heap32[(r3+7)];
+ heap32[(r2+25)] = heap32[(r3+8)];
+ heap32[(r2+26)] = heap32[(r3+9)];
+ heap32[(r2+27)] = heap32[(r3+10)];
+ heap32[(r2+28)] = heap32[(r3+11)];
+ heap32[(r2+29)] = heap32[(r3+12)];
+ heap32[(r2+30)] = heap32[(r3+13)];
+ heap32[(r2+31)] = heap32[(r3+14)];
+ heap32[(r2+32)] = heap32[(r3+15)];
+ r2 = heap32[(r1+1)];
+ r2 = r2 >> 2;
+ r3 = heap32[(r2+48)];
+ heap32[(r2+48)] = r4;
+ r2 = heap32[(r1+6)];
+ r4 = r0 << 2;
+ r2 = (r2 + r4)|0;
+ r2 = r2 >> 2;
+ r5 = heap32[(r2)];
+if(!(r5 !=0)) //_LBB255_17
+{
+ r5 = heap32[(r1+3)];
+ r8 = r5 >> 2;
+ r8 = heap32[(r8)];
+ r8 = r8 >> 2;
+ r8 = heap32[(r8+2)];
+ r11 = heap32[(r1+7)];
+ r12 = heap32[(r1+2)];
+ r13 = heap32[(r1+1)];
+ heap32[(g0)] = r5;
+ heap32[(g0+1)] = r13;
+ heap32[(g0+2)] = r12;
+ heap32[(g0+3)] = r11;
+ __FUNCTION_TABLE__[(r8)>>2](i7);
+ heap32[(r2)] = r_g0;
+}
+ r2 = heap32[(r1+5)];
+ r5 = r2 >> 2;
+ r8 = heap32[(r5)];
+ r5 = heap32[(r5+34)];
+ r11 = heap32[(r1+1)];
+ if(r5 !=r11) //_LBB255_19
+{
+ r5 = r8 >> 2;
+ r5 = heap32[(r5+3)];
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = -1;
+ heap32[(g0+2)] = r0;
+ __FUNCTION_TABLE__[(r5)>>2](i7);
+}
+else{
+ r8 = r8 >> 2;
+ r8 = heap32[(r8+2)];
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = -1;
+ heap32[(g0+2)] = r0;
+ __FUNCTION_TABLE__[(r8)>>2](i7);
+}
+ r0 = heap32[(r1+6)];
+ r0 = (r0 + r4)|0;
+ r0 = r0 >> 2;
+ r0 = heap32[(r0)];
+ r2 = r0 >> 2;
+ r2 = heap32[(r2)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+2)];
+ r4 = heap32[(r1+5)];
+ r5 = heap32[(r1+4)];
+ r8 = heap32[(r1+2)];
+ r11 = heap32[(r1+1)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r11;
+ heap32[(g0+2)] = r8;
+ heap32[(g0+3)] = r5;
+ heap32[(g0+4)] = r4;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ r0 = heap32[(r1+4)];
+ r0 = r0 >> 2;
+ r0 = heap32[(r0+5)];
+if(!(r0 ==0)) //_LBB255_23
+{
+ r2 = r0 >> 2;
+ r2 = heap32[(r2)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+12)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ r0 = r_g0 & 2;
+if(!(r0 ==0)) //_LBB255_23
+{
+ r0 = heap32[(r1+4)];
+ r0 = r0 >> 2;
+ r2 = heap32[(r0+5)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+13)];
+ r4 = sp + -32;
+ r5 = r4 >> 2;
+ heap32[(fp+-8)] = 1065353216;
+ heap32[(r5+1)] = 1065353216;
+ heap32[(r5+2)] = 1065353216;
+ heap32[(r5+3)] = 0;
+ r0 = heap32[(r0+5)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r6;
+ heap32[(g0+2)] = r7;
+ heap32[(g0+3)] = r4;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ r0 = heap32[(r1+4)];
+ r0 = r0 >> 2;
+ r2 = heap32[(r0+5)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+13)];
+ r4 = sp + -16;
+ r5 = r4 >> 2;
+ heap32[(fp+-4)] = 1065353216;
+ heap32[(r5+1)] = 1065353216;
+ heap32[(r5+2)] = 1065353216;
+ heap32[(r5+3)] = 0;
+ r0 = heap32[(r0+5)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r9;
+ heap32[(g0+2)] = r10;
+ heap32[(g0+3)] = r4;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+}
+}
+ r0 = heap32[(r1+1)];
+ r0 = r0 >> 2;
+ heap32[(r0+48)] = r3;
+ r0 = heap32[(r1+1)];
+ r0 = r0 >> 2;
+ heapFloat[(r0+1)] = f0;
+ heapFloat[(r0+2)] = f2;
+ heapFloat[(r0+3)] = f6;
+ heapFloat[(r0+4)] = f23;
+ heapFloat[(r0+5)] = f10;
+ heapFloat[(r0+6)] = f11;
+ heapFloat[(r0+7)] = f18;
+ f0 = heapFloat[(fp+-59)];
+ heapFloat[(r0+8)] = f0;
+ heapFloat[(r0+9)] = f12;
+ heapFloat[(r0+10)] = f15;
+ heapFloat[(r0+11)] = f20;
+ f0 = heapFloat[(fp+-57)];
+ heapFloat[(r0+12)] = f0;
+ heapFloat[(r0+13)] = f24;
+ heapFloat[(r0+14)] = f25;
+ heapFloat[(r0+15)] = f26;
+ f0 = heapFloat[(fp+-58)];
+ heapFloat[(r0+16)] = f0;
+ r0 = heap32[(r1+1)];
+ r0 = r0 >> 2;
+ f0 = heapFloat[(fp+-42)];
+ heapFloat[(r0+17)] = f0;
+ f0 = heapFloat[(fp+-41)];
+ heapFloat[(r0+18)] = f0;
+ f0 = heapFloat[(fp+-44)];
+ heapFloat[(r0+19)] = f0;
+ f0 = heapFloat[(fp+-43)];
+ heapFloat[(r0+20)] = f0;
+ f0 = heapFloat[(fp+-46)];
+ heapFloat[(r0+21)] = f0;
+ f0 = heapFloat[(fp+-45)];
+ heapFloat[(r0+22)] = f0;
+ f0 = heapFloat[(fp+-48)];
+ heapFloat[(r0+23)] = f0;
+ f0 = heapFloat[(fp+-47)];
+ heapFloat[(r0+24)] = f0;
+ f0 = heapFloat[(fp+-50)];
+ heapFloat[(r0+25)] = f0;
+ f0 = heapFloat[(fp+-49)];
+ heapFloat[(r0+26)] = f0;
+ f0 = heapFloat[(fp+-52)];
+ heapFloat[(r0+27)] = f0;
+ f0 = heapFloat[(fp+-51)];
+ heapFloat[(r0+28)] = f0;
+ f0 = heapFloat[(fp+-54)];
+ heapFloat[(r0+29)] = f0;
+ f0 = heapFloat[(fp+-53)];
+ heapFloat[(r0+30)] = f0;
+ f0 = heapFloat[(fp+-56)];
+ heapFloat[(r0+31)] = f0;
+ f0 = heapFloat[(fp+-55)];
+ heapFloat[(r0+32)] = f0;
+}
+}
+}
+ return;
+}
+else{
+ r0 = _2E_str7106;
+ r1 = _2E_str1100;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 119;
+ _assert(i7);
+}
+}
+else{
+ r0 = _2E_str6105;
+ r1 = _2E_str1100;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 117;
+ _assert(i7);
+}
+}
+
+function _ZN28btCompoundCollisionAlgorithm26preallocateChildAlgorithmsEP17btCollisionObjectS1_(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+ var r13;
+ var r14;
+ var r15;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = heapU8[r0+28];
+ r2 = heap32[(fp+1)];
+ r3 = heap32[(fp+2)];
+ r4 = r1 == 0 ? r2 : r3;
+ r5 = r4 >> 2;
+ r6 = heap32[(r5+48)];
+ r6 = r6 >> 2;
+ r7 = heap32[(r6+1)];
+ if(r7 ==31) //_LBB256_2
+{
+ r7 = r0 >> 2;
+ r8 = heap32[(r7+3)];
+ r9 = heap32[(r6+4)];
+_3: do {
+if(!(r8 >r9)) //_LBB256_21
+{
+if(!(r8 >=r9)) //_LBB256_21
+{
+ r10 = heap32[(r7+4)];
+if(!(r10 >=r9)) //_LBB256_20
+{
+ if(r9 !=0) //_LBB256_7
+{
+ r10 = gNumAlignedAllocs;
+ r10 = r10 >> 2;
+ r11 = heap32[(r10)];
+ r12 = r9 << 2;
+ r11 = (r11 + 1)|0;
+ r12 = r12 | 3;
+ heap32[(r10)] = r11;
+ r10 = (r12 + 16)|0;
+ heap32[(g0)] = r10;
+ malloc(i7);
+ r10 = r_g0;
+ if(r10 !=0) //_LBB256_9
+{
+ r11 = 0;
+ r12 = (r10 + 4)|0;
+ r11 = (r11 - r12)|0;
+ r11 = r11 & 15;
+ r11 = (r10 + r11)|0;
+ r12 = (r11 + 4)|0;
+ r11 = r11 >> 2;
+ heap32[(r11)] = r10;
+ r10 = r12;
+}
+}
+else{
+ r10 = 0;
+}
+ r11 = (r0 + 20)|0;
+ if(r8 <1) //_LBB256_12
+{
+ r12 = r11 >> 2;
+ r13 = heap32[(r12)];
+}
+else{
+ r12 = 0;
+_16: while(true){
+ r13 = r11 >> 2;
+ r13 = heap32[(r13)];
+ r14 = r12 << 2;
+ r15 = (r13 + r14)|0;
+ r15 = r15 >> 2;
+ r14 = (r10 + r14)|0;
+ r15 = heap32[(r15)];
+ r12 = (r12 + 1)|0;
+ r14 = r14 >> 2;
+ heap32[(r14)] = r15;
+if(!(r8 !=r12)) //_LBB256_13
+{
+break _16;
+}
+}
+ r11 = (r0 + 20)|0;
+}
+if(!(r13 ==0)) //_LBB256_19
+{
+ r12 = heapU8[r0+24];
+if(!(r12 ==0)) //_LBB256_18
+{
+ r12 = gNumAlignedFree;
+ r12 = r12 >> 2;
+ r14 = heap32[(r12)];
+ r14 = (r14 + 1)|0;
+ r13 = r13 >> 2;
+ heap32[(r12)] = r14;
+ r12 = heap32[(r13+-1)];
+ heap32[(g0)] = r12;
+ free(i7);
+}
+ r12 = r11 >> 2;
+ heap32[(r12)] = 0;
+}
+ r12 = 1;
+ r11 = r11 >> 2;
+ heap8[r0+24] = r12;
+ heap32[(r11)] = r10;
+ heap32[(r7+4)] = r9;
+ if(r8 >=r9) //_LBB256_21
+{
+break _3;
+}
+}
+_26: while(true){
+ r0 = r8 << 2;
+ r10 = heap32[(r7+5)];
+ r0 = (r10 + r0)|0;
+ r8 = (r8 + 1)|0;
+ r0 = r0 >> 2;
+ heap32[(r0)] = 0;
+if(!(r9 !=r8)) //_LBB256_20
+{
+break _3;
+}
+}
+}
+}
+} while(0);
+ heap32[(r7+3)] = r9;
+_29: do {
+if(!(r9 <1)) //_LBB256_27
+{
+ r0 = r1 == 0 ? r3 : r2;
+ r1 = 0;
+_31: while(true){
+ r2 = heap32[(r6+16)];
+ if(r2 ==0) //_LBB256_25
+{
+ r2 = (r1 * 20)|0;
+ r2 = r2 << 2;
+ r3 = heap32[(r6+6)];
+ r2 = (r3 + r2)|0;
+ r2 = r2 >> 2;
+ r3 = heap32[(r5+48)];
+ r2 = heap32[(r2+16)];
+ heap32[(r5+48)] = r2;
+ r2 = heap32[(r7+1)];
+ r8 = r2 >> 2;
+ r8 = heap32[(r8)];
+ r8 = r8 >> 2;
+ r8 = heap32[(r8+2)];
+ r10 = heap32[(r7+8)];
+ r11 = heap32[(r7+5)];
+ r12 = r1 << 2;
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = r4;
+ heap32[(g0+2)] = r0;
+ heap32[(g0+3)] = r10;
+ r2 = (r11 + r12)|0;
+ r2 = r2 >> 2;
+ __FUNCTION_TABLE__[(r8)>>2](i7);
+ heap32[(r2)] = r_g0;
+ heap32[(r5+48)] = r3;
+}
+else{
+ r2 = r1 << 2;
+ r3 = heap32[(r7+5)];
+ r2 = (r3 + r2)|0;
+ r2 = r2 >> 2;
+ heap32[(r2)] = 0;
+}
+ r1 = (r1 + 1)|0;
+if(!(r9 !=r1)) //_LBB256_23
+{
+break _29;
+}
+}
+}
+} while(0);
+ return;
+}
+else{
+ r0 = _2E_str99;
+ r1 = _2E_str1100;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 44;
+ _assert(i7);
+}
+}
+
+function _ZN28btCompoundCollisionAlgorithm16processCollisionEP17btCollisionObjectS1_RK16btDispatcherInfoP16btManifoldResult(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+ var r13;
+ var r14;
+ var r15;
+ var r16;
+ var r17;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+ var f10;
+ var f11;
+ var f12;
+ var f13;
+ var f14;
+ var f15;
+ var f16;
+ var f17;
+ var f18;
+ var f19;
+ var f20;
+ var f21;
+ var f22;
+ var f23;
+ var f24;
+ var f25;
+ var f26;
+ var f27;
+ var f28;
+ var f29;
+var __label__ = 0;
+ i7 = sp + -328;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = heap32[(fp+1)];
+ r2 = heap32[(fp+2)];
+ r3 = heapU8[r0+28];
+ r4 = r3 == 0 ? r1 : r2;
+ r5 = r4 >> 2;
+ r6 = heap32[(r5+48)];
+ r6 = r6 >> 2;
+ r7 = heap32[(r6+1)];
+ if(r7 ==31) //_LBB257_2
+{
+ r7 = r0 >> 2;
+ r8 = heap32[(r6+17)];
+ r9 = heap32[(r7+10)];
+if(!(r8 ==r9)) //_LBB257_9
+{
+ r8 = heap32[(r7+3)];
+if(!(r8 <1)) //_LBB257_8
+{
+ r9 = 0;
+_7: while(true){
+ r10 = heap32[(r7+5)];
+ r11 = r9 << 2;
+ r10 = (r10 + r11)|0;
+ r10 = r10 >> 2;
+ r10 = heap32[(r10)];
+if(!(r10 ==0)) //_LBB257_7
+{
+ r12 = r10 >> 2;
+ r12 = heap32[(r12)];
+ r12 = r12 >> 2;
+ r12 = heap32[(r12)];
+ heap32[(g0)] = r10;
+ __FUNCTION_TABLE__[(r12)>>2](i7);
+ r10 = heap32[(r7+1)];
+ r12 = r10 >> 2;
+ r13 = heap32[(r7+5)];
+ r11 = (r13 + r11)|0;
+ r12 = heap32[(r12)];
+ r12 = r12 >> 2;
+ r11 = r11 >> 2;
+ r12 = heap32[(r12+13)];
+ r11 = heap32[(r11)];
+ heap32[(g0)] = r10;
+ heap32[(g0+1)] = r11;
+ __FUNCTION_TABLE__[(r12)>>2](i7);
+}
+ r9 = (r9 + 1)|0;
+if(!(r8 !=r9)) //_LBB257_5
+{
+break _7;
+}
+}
+}
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = r2;
+ _ZN28btCompoundCollisionAlgorithm26preallocateChildAlgorithmsEP17btCollisionObjectS1_(i7);
+}
+ r0 = heap32[(fp+3)];
+ r8 = heap32[(fp+4)];
+ r1 = r3 == 0 ? r2 : r1;
+ r2 = _ZTV22btCompoundLeafCallback;
+ r3 = heap32[(r6+16)];
+ r9 = heap32[(r7+8)];
+ r10 = heap32[(r7+5)];
+ r11 = heap32[(r7+1)];
+ r12 = sp + -32;
+ r2 = (r2 + 8)|0;
+ r13 = r12 >> 2;
+ heap32[(fp+-8)] = r2;
+ heap32[(r13+1)] = r4;
+ heap32[(r13+2)] = r1;
+ heap32[(r13+3)] = r11;
+ heap32[(r13+4)] = r0;
+ heap32[(r13+5)] = r8;
+ heap32[(r13+6)] = r10;
+ r0 = sp + -56;
+ r2 = 1;
+ heap32[(r13+7)] = r9;
+ r4 = r0 >> 2;
+ heap8[sp+-40] = r2;
+ heap32[(r4+3)] = 0;
+ r9 = (r8 + 72)|0;
+ r10 = (r8 + 8)|0;
+ r11 = 0;
+ heap32[(r4+1)] = 0;
+ heap32[(r4+2)] = 0;
+_14: while(true){
+ r13 = heap32[(r7+3)];
+ if(r13 >r11) //_LBB257_10
+{
+ r13 = heap32[(r7+5)];
+ r14 = r11 << 2;
+ r13 = (r13 + r14)|0;
+ r13 = r13 >> 2;
+ r13 = heap32[(r13)];
+if(!(r13 ==0)) //_LBB257_27
+{
+ r14 = r13 >> 2;
+ r14 = heap32[(r14)];
+ r14 = r14 >> 2;
+ r14 = heap32[(r14+4)];
+ heap32[(g0)] = r13;
+ heap32[(g0+1)] = r0;
+ r13 = 0;
+ __FUNCTION_TABLE__[(r14)>>2](i7);
+_19: while(true){
+ r14 = heap32[(r4+3)];
+ r15 = heap32[(r4+1)];
+ if(r15 >r13) //_LBB257_12
+{
+ r15 = r13 << 2;
+ r14 = (r14 + r15)|0;
+ r14 = r14 >> 2;
+ r14 = heap32[(r14)];
+ r15 = r14 >> 2;
+ r16 = heap32[(r15+279)];
+if(!(r16 ==0)) //_LBB257_20
+{
+ r16 = r8 >> 2;
+ heap32[(r16+1)] = r14;
+ if(r14 !=0) //_LBB257_15
+{
+ r17 = heap32[(r15+279)];
+if(!(r17 ==0)) //_LBB257_19
+{
+ r15 = heap32[(r15+277)];
+ r17 = heap32[(r16+34)];
+ if(r15 ==r17) //_LBB257_18
+{
+ heap32[(g0)] = r14;
+ heap32[(g0+1)] = r10;
+ heap32[(g0+2)] = r9;
+ _ZN20btPersistentManifold20refreshContactPointsERK11btTransformS2_(i7);
+}
+else{
+ heap32[(g0)] = r14;
+ heap32[(g0+1)] = r9;
+ heap32[(g0+2)] = r10;
+ _ZN20btPersistentManifold20refreshContactPointsERK11btTransformS2_(i7);
+}
+}
+ heap32[(r16+1)] = 0;
+}
+else{
+__label__ = 14;
+break _14;
+}
+}
+ r13 = (r13 + 1)|0;
+}
+else{
+break _19;
+}
+}
+if(!(r14 ==0)) //_LBB257_26
+{
+ r13 = heapU8[sp+-40];
+if(!(r13 ==0)) //_LBB257_25
+{
+ r13 = gNumAlignedFree;
+ r13 = r13 >> 2;
+ r15 = heap32[(r13)];
+ r15 = (r15 + 1)|0;
+ r14 = r14 >> 2;
+ heap32[(r13)] = r15;
+ r13 = heap32[(r14+-1)];
+ heap32[(g0)] = r13;
+ free(i7);
+}
+ heap32[(r4+3)] = 0;
+}
+ r13 = 1;
+ heap8[sp+-40] = r13;
+ heap32[(r4+3)] = 0;
+ heap32[(r4+1)] = 0;
+ heap32[(r4+2)] = 0;
+}
+ r11 = (r11 + 1)|0;
+}
+else{
+__label__ = 29;
+break _14;
+}
+}
+switch(__label__ ){//multiple entries
+case 29:
+ heap8[sp+-40] = r2;
+ heap32[(r4+3)] = 0;
+ heap32[(r4+1)] = 0;
+ heap32[(r4+2)] = 0;
+_42: do {
+ if(r3 ==0) //_LBB257_31
+{
+ if(r13 <1) //_LBB257_50
+{
+__label__ = 49;
+}
+else{
+ r0 = 0;
+_45: while(true){
+ r3 = (r0 * 20)|0;
+ r4 = heap32[(r6+6)];
+ r3 = r3 << 2;
+ r3 = (r4 + r3)|0;
+ r3 = r3 >> 2;
+ r3 = heap32[(r3+16)];
+ heap32[(g0)] = r12;
+ heap32[(g0+1)] = r3;
+ heap32[(g0+2)] = r0;
+ r0 = (r0 + 1)|0;
+ _ZN22btCompoundLeafCallback17ProcessChildShapeEP16btCollisionShapei(i7);
+if(!(r13 !=r0)) //_LBB257_33
+{
+__label__ = 34;
+break _42;
+}
+}
+}
+}
+else{
+ r13 = r1 >> 2;
+ f0 = heapFloat[(r5+1)];
+ f1 = heapFloat[(r13+1)];
+ f2 = heapFloat[(r5+5)];
+ f3 = heapFloat[(r13+5)];
+ f4 = heapFloat[(r13+2)];
+ f5 = heapFloat[(r13+6)];
+ f6 = f1*f0;
+ f7 = f3*f2;
+ f8 = heapFloat[(r5+9)];
+ f9 = heapFloat[(r13+9)];
+ f10 = heapFloat[(r5+2)];
+ f11 = heapFloat[(r5+6)];
+ f12 = heapFloat[(r5+3)];
+ f13 = heapFloat[(r13+13)];
+ f14 = heapFloat[(r13+3)];
+ f15 = heapFloat[(r5+7)];
+ f16 = heapFloat[(r5+14)];
+ f17 = heapFloat[(r13+14)];
+ f18 = heapFloat[(r13+7)];
+ f19 = heapFloat[(r5+10)];
+ f20 = heapFloat[(r5+15)];
+ f21 = heapFloat[(r5+11)];
+ f22 = heapFloat[(r13+15)];
+ f23 = heapFloat[(r13+11)];
+ f24 = heapFloat[(r13+10)];
+ f25 = heapFloat[(r5+13)];
+ f26 = f4*f0;
+ f27 = f5*f2;
+ f6 = f6+f7;
+ f7 = f9*f8;
+ r0 = sp + -152;
+ f28 = f14*f0;
+ f29 = f18*f2;
+ f26 = f26+f27;
+ f27 = f24*f8;
+ f6 = f6+f7;
+ r4 = r0 >> 2;
+ f7 = f28+f29;
+ f28 = f23*f8;
+ f26 = f26+f27;
+ heapFloat[(fp+-38)] = f6;
+ f6 = f1*f10;
+ f27 = f3*f11;
+ f7 = f7+f28;
+ heapFloat[(r4+1)] = f26;
+ heapFloat[(r4+2)] = f7;
+ f7 = f4*f10;
+ f26 = f5*f11;
+ f6 = f6+f27;
+ f27 = f9*f19;
+ f28 = f14*f10;
+ f29 = f18*f11;
+ f7 = f7+f26;
+ f26 = f24*f19;
+ f6 = f6+f27;
+ heap32[(r4+3)] = 0;
+ f27 = f28+f29;
+ f28 = f23*f19;
+ f7 = f7+f26;
+ heapFloat[(r4+4)] = f6;
+ f1 = f1*f12;
+ f3 = f3*f15;
+ f6 = f27+f28;
+ heapFloat[(r4+5)] = f7;
+ heapFloat[(r4+6)] = f6;
+ f4 = f4*f12;
+ f5 = f5*f15;
+ f1 = f1+f3;
+ f3 = f9*f21;
+ f6 = -f25;
+ f7 = f14*f12;
+ f9 = f18*f15;
+ f4 = f4+f5;
+ f5 = f24*f21;
+ f1 = f1+f3;
+ heap32[(r4+7)] = 0;
+ f3 = f0*f13;
+ f14 = f2*f17;
+ f0 = f0*f6;
+ f2 = f2*f16;
+ f7 = f7+f9;
+ f9 = f23*f21;
+ f4 = f4+f5;
+ heapFloat[(r4+8)] = f1;
+ f1 = f10*f13;
+ f5 = f11*f17;
+ f10 = f10*f6;
+ f11 = f11*f16;
+ f3 = f3+f14;
+ f14 = f8*f22;
+ f0 = f0-f2;
+ f2 = f8*f20;
+ f7 = f7+f9;
+ heapFloat[(r4+9)] = f4;
+ heapFloat[(r4+10)] = f7;
+ f4 = f12*f13;
+ f7 = f15*f17;
+ f6 = f12*f6;
+ f8 = f15*f16;
+ f1 = f1+f5;
+ f5 = f19*f22;
+ f9 = f10-f11;
+ f10 = f19*f20;
+ f3 = f3+f14;
+ f0 = f0-f2;
+ f2 = f4+f7;
+ f4 = f21*f22;
+ f6 = f6-f8;
+ f7 = f21*f20;
+ f1 = f1+f5;
+ f5 = f9-f10;
+ f0 = f3+f0;
+ heap32[(r4+11)] = 0;
+ f2 = f2+f4;
+ f3 = f6-f7;
+ f1 = f1+f5;
+ heapFloat[(r4+12)] = f0;
+ f0 = f2+f3;
+ heapFloat[(r4+13)] = f1;
+ heapFloat[(r4+14)] = f0;
+ heap32[(r4+15)] = 0;
+ r13 = heap32[(r13+48)];
+ r4 = r13 >> 2;
+ r4 = heap32[(r4)];
+ r4 = r4 >> 2;
+ r4 = heap32[(r4+2)];
+ r8 = sp + -72;
+ r9 = sp + -88;
+ heap32[(g0)] = r13;
+ heap32[(g0+1)] = r0;
+ heap32[(g0+2)] = r8;
+ heap32[(g0+3)] = r9;
+ r13 = sp + -184;
+ __FUNCTION_TABLE__[(r4)>>2](i7);
+ r0 = r13 >> 2;
+ r4 = r8 >> 2;
+ heap32[(fp+-46)] = heap32[(fp+-18)];
+ heap32[(r0+1)] = heap32[(r4+1)];
+ heap32[(r0+2)] = heap32[(r4+2)];
+ heap32[(r0+3)] = heap32[(r4+3)];
+ r4 = r9 >> 2;
+ heap32[(r0+4)] = heap32[(fp+-22)];
+ heap32[(r0+5)] = heap32[(r4+1)];
+ heap32[(r0+6)] = heap32[(r4+2)];
+ r3 = r3 >> 2;
+ heap32[(r0+7)] = heap32[(r4+3)];
+ r0 = heap32[(r3)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r13;
+ heap32[(g0+2)] = r12;
+ _ZN6btDbvt9collideTVEPK10btDbvtNodeRK12btDbvtAabbMmRNS_8ICollideE(i7);
+__label__ = 34;
+}
+} while(0);
+_48: do {
+if (__label__ == 34){
+ r0 = heap32[(r7+3)];
+if(!(r0 <1)) //_LBB257_50
+{
+ r3 = 0;
+ r4 = (r1 + 4)|0;
+ r0 = (r3 - r0)|0;
+_51: while(true){
+ r8 = heap32[(r7+5)];
+ r9 = r3 << 2;
+ r8 = (r8 - r9)|0;
+ r8 = r8 >> 2;
+ r8 = heap32[(r8)];
+_53: do {
+if(!(r8 ==0)) //_LBB257_49
+{
+ r8 = (r3 * -20)|0;
+ r10 = heap32[(r6+6)];
+ r8 = r8 << 2;
+ r8 = (r10 + r8)|0;
+ r8 = r8 >> 2;
+ f0 = heapFloat[(r5+1)];
+ f1 = heapFloat[(r8)];
+ f2 = heapFloat[(r5+2)];
+ f3 = heapFloat[(r8+4)];
+ f4 = heapFloat[(r8+1)];
+ f5 = heapFloat[(r8+5)];
+ f6 = f1*f0;
+ f7 = f3*f2;
+ f8 = heapFloat[(r5+3)];
+ f9 = heapFloat[(r8+8)];
+ f10 = heapFloat[(r5+5)];
+ f11 = heapFloat[(r5+6)];
+ f12 = heapFloat[(r5+9)];
+ f13 = heapFloat[(r8+12)];
+ f14 = heapFloat[(r8+2)];
+ f15 = heapFloat[(r5+10)];
+ f16 = heapFloat[(r8+13)];
+ f17 = heapFloat[(r8+6)];
+ r10 = heap32[(r8+16)];
+ f18 = heapFloat[(r5+7)];
+ f19 = heapFloat[(r8+14)];
+ f20 = heapFloat[(r5+11)];
+ f21 = heapFloat[(r8+10)];
+ f22 = heapFloat[(r8+9)];
+ f23 = f4*f0;
+ f24 = f5*f2;
+ f6 = f6+f7;
+ f7 = f9*f8;
+ f25 = heapFloat[(r5+13)];
+ f26 = heapFloat[(r5+14)];
+ f27 = heapFloat[(r5+15)];
+ r8 = sp + -248;
+ f28 = f14*f0;
+ f29 = f17*f2;
+ f23 = f23+f24;
+ f24 = f22*f8;
+ f6 = f6+f7;
+ r11 = r8 >> 2;
+ f7 = f28+f29;
+ f28 = f21*f8;
+ f23 = f23+f24;
+ heapFloat[(fp+-62)] = f6;
+ f6 = f1*f10;
+ f24 = f3*f11;
+ f7 = f7+f28;
+ heapFloat[(r11+1)] = f23;
+ heapFloat[(r11+2)] = f7;
+ f7 = f4*f10;
+ f23 = f5*f11;
+ f6 = f6+f24;
+ f24 = f9*f18;
+ f28 = f14*f10;
+ f29 = f17*f11;
+ f7 = f7+f23;
+ f23 = f22*f18;
+ f6 = f6+f24;
+ heap32[(r11+3)] = 0;
+ f24 = f28+f29;
+ f28 = f21*f18;
+ f7 = f7+f23;
+ heapFloat[(r11+4)] = f6;
+ f1 = f1*f12;
+ f3 = f3*f15;
+ f6 = f24+f28;
+ heapFloat[(r11+5)] = f7;
+ heapFloat[(r11+6)] = f6;
+ f4 = f4*f12;
+ f5 = f5*f15;
+ f1 = f1+f3;
+ f3 = f9*f20;
+ f6 = f14*f12;
+ f7 = f17*f15;
+ f4 = f4+f5;
+ f5 = f22*f20;
+ f1 = f1+f3;
+ heap32[(r11+7)] = 0;
+ f0 = f0*f13;
+ f2 = f2*f16;
+ f3 = f6+f7;
+ f6 = f21*f20;
+ f4 = f4+f5;
+ heapFloat[(r11+8)] = f1;
+ f1 = f10*f13;
+ f5 = f11*f16;
+ f0 = f0+f2;
+ f2 = f8*f19;
+ f3 = f3+f6;
+ heapFloat[(r11+9)] = f4;
+ f0 = f0+f2;
+ heapFloat[(r11+10)] = f3;
+ f2 = f12*f13;
+ f3 = f15*f16;
+ f1 = f1+f5;
+ f4 = f18*f19;
+ f1 = f1+f4;
+ f2 = f2+f3;
+ f3 = f20*f19;
+ f0 = f0+f25;
+ heap32[(r11+11)] = 0;
+ f2 = f2+f3;
+ f1 = f1+f26;
+ heapFloat[(r11+12)] = f0;
+ f0 = f2+f27;
+ heapFloat[(r11+13)] = f1;
+ heapFloat[(r11+14)] = f0;
+ r12 = r10 >> 2;
+ heap32[(r11+15)] = 0;
+ r11 = heap32[(r12)];
+ r11 = r11 >> 2;
+ r11 = heap32[(r11+2)];
+ r12 = sp + -264;
+ r13 = sp + -280;
+ heap32[(g0)] = r10;
+ heap32[(g0+1)] = r8;
+ heap32[(g0+2)] = r12;
+ heap32[(g0+3)] = r13;
+ __FUNCTION_TABLE__[(r11)>>2](i7);
+ r8 = r1 >> 2;
+ r8 = heap32[(r8+48)];
+ r10 = r8 >> 2;
+ r10 = heap32[(r10)];
+ r10 = r10 >> 2;
+ r10 = heap32[(r10+2)];
+ r11 = sp + -296;
+ r14 = sp + -312;
+ heap32[(g0)] = r8;
+ heap32[(g0+1)] = r4;
+ heap32[(g0+2)] = r11;
+ heap32[(g0+3)] = r14;
+ __FUNCTION_TABLE__[(r10)>>2](i7);
+ f0 = heapFloat[(fp+-66)];
+ f1 = heapFloat[(fp+-78)];
+ if(f0 >f1) //_LBB257_40
+{
+__label__ = 40;
+}
+else{
+ f0 = heapFloat[(fp+-70)];
+ f1 = heapFloat[(fp+-74)];
+ if(f0 <f1) //_LBB257_40
+{
+__label__ = 40;
+}
+else{
+ r8 = r2;
+__label__ = 41;
+}
+}
+if (__label__ == 40){
+ r8 = 0;
+}
+ r10 = r12 >> 2;
+ r12 = r14 >> 2;
+ f0 = heapFloat[(r10+2)];
+ f1 = heapFloat[(r12+2)];
+ if(f0 >f1) //_LBB257_44
+{
+__label__ = 43;
+}
+else{
+ r14 = r13 >> 2;
+ r15 = r11 >> 2;
+ f0 = heapFloat[(r14+2)];
+ f1 = heapFloat[(r15+2)];
+ if(f0 <f1) //_LBB257_44
+{
+__label__ = 43;
+}
+else{
+__label__ = 44;
+}
+}
+if (__label__ == 43){
+ r8 = 0;
+}
+ f0 = heapFloat[(r10+1)];
+ f1 = heapFloat[(r12+1)];
+if(!(f0 >f1)) //_LBB257_48
+{
+ r10 = r13 >> 2;
+ r11 = r11 >> 2;
+ f0 = heapFloat[(r10+1)];
+ f1 = heapFloat[(r11+1)];
+if(!(f0 <f1)) //_LBB257_48
+{
+ r8 = r8 & 255;
+ if(r8 !=0) //_LBB257_49
+{
+break _53;
+}
+}
+}
+ r8 = heap32[(r7+5)];
+ r8 = (r8 - r9)|0;
+ r8 = r8 >> 2;
+ r8 = heap32[(r8)];
+ r10 = r8 >> 2;
+ r10 = heap32[(r10)];
+ r10 = r10 >> 2;
+ r10 = heap32[(r10)];
+ heap32[(g0)] = r8;
+ __FUNCTION_TABLE__[(r10)>>2](i7);
+ r8 = heap32[(r7+1)];
+ r10 = r8 >> 2;
+ r11 = heap32[(r7+5)];
+ r11 = (r11 - r9)|0;
+ r10 = heap32[(r10)];
+ r10 = r10 >> 2;
+ r11 = r11 >> 2;
+ r10 = heap32[(r10+13)];
+ r11 = heap32[(r11)];
+ heap32[(g0)] = r8;
+ heap32[(g0+1)] = r11;
+ __FUNCTION_TABLE__[(r10)>>2](i7);
+ r8 = heap32[(r7+5)];
+ r8 = (r8 - r9)|0;
+ r8 = r8 >> 2;
+ heap32[(r8)] = 0;
+}
+} while(0);
+ r3 = (r3 + -1)|0;
+if(!(r0 !=r3)) //_LBB257_36
+{
+break _48;
+}
+}
+}
+}
+} while(0);
+ return;
+break;
+case 14:
+ r14 = _2E_str59;
+ r0 = _2E_str160;
+ heap32[(g0)] = r14;
+ heap32[(g0+1)] = r0;
+ heap32[(g0+2)] = 101;
+ _assert(i7);
+break;
+}
+}
+else{
+ r0 = _2E_str99;
+ r1 = _2E_str1100;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 199;
+ _assert(i7);
+}
+}
+
+function _ZN28btCompoundCollisionAlgorithmD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV28btCompoundCollisionAlgorithm;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ r1 = heap32[(r2+3)];
+if(!(r1 <1)) //_LBB258_5
+{
+ r3 = 0;
+_3: while(true){
+ r4 = heap32[(r2+5)];
+ r5 = r3 << 2;
+ r4 = (r4 + r5)|0;
+ r4 = r4 >> 2;
+ r4 = heap32[(r4)];
+if(!(r4 ==0)) //_LBB258_4
+{
+ r6 = r4 >> 2;
+ r6 = heap32[(r6)];
+ r6 = r6 >> 2;
+ r6 = heap32[(r6)];
+ heap32[(g0)] = r4;
+ __FUNCTION_TABLE__[(r6)>>2](i7);
+ r4 = heap32[(r2+1)];
+ r6 = r4 >> 2;
+ r7 = heap32[(r2+5)];
+ r5 = (r7 + r5)|0;
+ r6 = heap32[(r6)];
+ r6 = r6 >> 2;
+ r5 = r5 >> 2;
+ r6 = heap32[(r6+13)];
+ r5 = heap32[(r5)];
+ heap32[(g0)] = r4;
+ heap32[(g0+1)] = r5;
+ __FUNCTION_TABLE__[(r6)>>2](i7);
+}
+ r3 = (r3 + 1)|0;
+ if(r1 !=r3) //_LBB258_2
+{
+continue _3;
+}
+else{
+break _3;
+}
+}
+}
+ r1 = heap32[(r2+5)];
+if(!(r1 ==0)) //_LBB258_9
+{
+ r3 = heapU8[r0+24];
+if(!(r3 ==0)) //_LBB258_8
+{
+ r3 = gNumAlignedFree;
+ r3 = r3 >> 2;
+ r4 = heap32[(r3)];
+ r4 = (r4 + 1)|0;
+ r1 = r1 >> 2;
+ heap32[(r3)] = r4;
+ r1 = heap32[(r1+-1)];
+ heap32[(g0)] = r1;
+ free(i7);
+}
+ heap32[(r2+5)] = 0;
+}
+ r1 = 1;
+ heap8[r0+24] = r1;
+ heap32[(r2+5)] = 0;
+ r1 = _ZTV30btActivatingCollisionAlgorithm;
+ heap32[(r2+3)] = 0;
+ r1 = (r1 + 8)|0;
+ heap32[(r2+4)] = 0;
+ heap32[(r2)] = r1;
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZN28btCompoundCollisionAlgorithmD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV28btCompoundCollisionAlgorithm;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ r1 = heap32[(r2+3)];
+if(!(r1 <1)) //_LBB259_5
+{
+ r3 = 0;
+_3: while(true){
+ r4 = heap32[(r2+5)];
+ r5 = r3 << 2;
+ r4 = (r4 + r5)|0;
+ r4 = r4 >> 2;
+ r4 = heap32[(r4)];
+if(!(r4 ==0)) //_LBB259_4
+{
+ r6 = r4 >> 2;
+ r6 = heap32[(r6)];
+ r6 = r6 >> 2;
+ r6 = heap32[(r6)];
+ heap32[(g0)] = r4;
+ __FUNCTION_TABLE__[(r6)>>2](i7);
+ r4 = heap32[(r2+1)];
+ r6 = r4 >> 2;
+ r7 = heap32[(r2+5)];
+ r5 = (r7 + r5)|0;
+ r6 = heap32[(r6)];
+ r6 = r6 >> 2;
+ r5 = r5 >> 2;
+ r6 = heap32[(r6+13)];
+ r5 = heap32[(r5)];
+ heap32[(g0)] = r4;
+ heap32[(g0+1)] = r5;
+ __FUNCTION_TABLE__[(r6)>>2](i7);
+}
+ r3 = (r3 + 1)|0;
+ if(r1 !=r3) //_LBB259_2
+{
+continue _3;
+}
+else{
+break _3;
+}
+}
+}
+ r1 = heap32[(r2+5)];
+if(!(r1 ==0)) //_LBB259_9
+{
+ r3 = heapU8[r0+24];
+if(!(r3 ==0)) //_LBB259_8
+{
+ r3 = gNumAlignedFree;
+ r3 = r3 >> 2;
+ r4 = heap32[(r3)];
+ r4 = (r4 + 1)|0;
+ r1 = r1 >> 2;
+ heap32[(r3)] = r4;
+ r1 = heap32[(r1+-1)];
+ heap32[(g0)] = r1;
+ free(i7);
+}
+ heap32[(r2+5)] = 0;
+}
+ r1 = 1;
+ heap8[r0+24] = r1;
+ heap32[(r2+5)] = 0;
+ r0 = _ZTV30btActivatingCollisionAlgorithm;
+ heap32[(r2+3)] = 0;
+ r0 = (r0 + 8)|0;
+ heap32[(r2+4)] = 0;
+ heap32[(r2)] = r0;
+ return;
+}
+
+function _ZNK21btConvexInternalShape15getLocalScalingEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = (r0 + 12)|0;
+ r_g0 = r0;
+ return;
+}
+
+function _ZN21btConvexInternalShape9setMarginEf(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ heap32[(r0+11)] = heap32[(fp+1)];
+ return;
+}
+
+function _ZNK21btConvexInternalShape9getMarginEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var f0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ f0 = heapFloat[(r0+11)];
+ f_g0 = f0;
+ return;
+}
+
+function _ZNK21btConvexInternalShape28calculateSerializeBufferSizeEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = 52;
+ r_g0 = r0;
+ return;
+}
+
+function _ZNK15btTriangleShape14getNumVerticesEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = 3;
+ r_g0 = r0;
+ return;
+}
+
+function _ZNK15btTriangleShape9getVertexEiR9btVector3(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ r1 = heap32[(fp)];
+ r0 = r0 << 4;
+ r2 = heap32[(fp+2)];
+ r0 = (r1 + r0)|0;
+ r1 = r2 >> 2;
+ r0 = r0 >> 2;
+ heap32[(r1)] = heap32[(r0+13)];
+ heap32[(r1+1)] = heap32[(r0+14)];
+ heap32[(r1+2)] = heap32[(r0+15)];
+ heap32[(r1+3)] = heap32[(r0+16)];
+ return;
+}
+
+function _ZNK15btTriangleShape11getNumEdgesEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = 3;
+ r_g0 = r0;
+ return;
+}
+
+function _ZNK15btTriangleShape7getEdgeEiR9btVector3S1_(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ r2 = heap32[(r1)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+24)];
+ r3 = heap32[(fp+1)];
+ r4 = heap32[(fp+2)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r3;
+ heap32[(g0+2)] = r4;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ r1 = heap32[(r1)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+24)];
+ r2 = (r3 + 1)|0;
+ r2 = (r2 % 3)|0;
+ r3 = heap32[(fp+3)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r2;
+ heap32[(g0+2)] = r3;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+ return;
+}
+
+function _ZNK15btTriangleShape7getAabbERK11btTransformR9btVector3S4_(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ r1 = heap32[(r1)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+18)];
+ r2 = heap32[(fp+1)];
+ r3 = heap32[(fp+2)];
+ r4 = heap32[(fp+3)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r2;
+ heap32[(g0+2)] = r3;
+ heap32[(g0+3)] = r4;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+ return;
+}
+
+function _ZNK15btTriangleShape37localGetSupportingVertexWithoutMarginERK9btVector3(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+ var f10;
+ var f11;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ r1 = heap32[(fp+2)];
+ r2 = r0 >> 2;
+ r1 = r1 >> 2;
+ f0 = heapFloat[(r2+13)];
+ f1 = heapFloat[(r1)];
+ f2 = heapFloat[(r2+17)];
+ f3 = heapFloat[(r2+21)];
+ f4 = heapFloat[(r2+14)];
+ f5 = heapFloat[(r1+1)];
+ f6 = heapFloat[(r2+18)];
+ f7 = heapFloat[(r2+22)];
+ f0 = f1*f0;
+ f4 = f5*f4;
+ f8 = heapFloat[(r2+15)];
+ f9 = heapFloat[(r1+2)];
+ f10 = heapFloat[(r2+19)];
+ f11 = heapFloat[(r2+23)];
+ f2 = f1*f2;
+ f6 = f5*f6;
+ f1 = f1*f3;
+ f3 = f5*f7;
+ f0 = f0+f4;
+ f4 = f9*f8;
+ f2 = f2+f6;
+ f5 = f9*f10;
+ f1 = f1+f3;
+ f3 = f9*f11;
+ f0 = f0+f4;
+ f2 = f2+f5;
+ r1 = heap32[(fp)];
+ f1 = f1+f3;
+ if(f0 >=f2) //_LBB269_2
+{
+ r2 = 2;
+ r3 = 0;
+ r2 = f0 < f1 ? r2 : r3;
+}
+else{
+ r2 = 2;
+ r3 = 1;
+ r2 = f2 < f1 ? r2 : r3;
+}
+ r2 = r2 << 4;
+ r0 = (r0 + r2)|0;
+ r1 = r1 >> 2;
+ r0 = r0 >> 2;
+ heap32[(r1)] = heap32[(r0+13)];
+ heap32[(r1+1)] = heap32[(r0+14)];
+ heap32[(r1+2)] = heap32[(r0+15)];
+ heap32[(r1+3)] = heap32[(r0+16)];
+ return;
+}
+
+function _ZNK15btTriangleShape49batchedUnitVectorGetSupportingVertexWithoutMarginEPK9btVector3PS0_i(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+ var f10;
+ var f11;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+3)];
+if(!(r0 <1)) //_LBB270_6
+{
+ r1 = heap32[(fp)];
+ r2 = heap32[(fp+1)];
+ r3 = heap32[(fp+2)];
+ r2 = (r2 + 8)|0;
+ r3 = (r3 + 12)|0;
+_3: while(true){
+ r4 = r1 >> 2;
+ r5 = r2 >> 2;
+ f0 = heapFloat[(r4+13)];
+ f1 = heapFloat[(r5+-2)];
+ f2 = heapFloat[(r4+17)];
+ f3 = heapFloat[(r4+21)];
+ f4 = heapFloat[(r4+14)];
+ f5 = heapFloat[(r5+-1)];
+ f6 = heapFloat[(r4+18)];
+ f7 = heapFloat[(r4+22)];
+ f0 = f1*f0;
+ f4 = f5*f4;
+ f8 = heapFloat[(r4+15)];
+ f9 = heapFloat[(r5)];
+ f10 = heapFloat[(r4+19)];
+ f11 = heapFloat[(r4+23)];
+ f2 = f1*f2;
+ f6 = f5*f6;
+ f1 = f1*f3;
+ f3 = f5*f7;
+ f0 = f0+f4;
+ f4 = f9*f8;
+ f2 = f2+f6;
+ f5 = f9*f10;
+ f1 = f1+f3;
+ f3 = f9*f11;
+ f0 = f0+f4;
+ f2 = f2+f5;
+ f1 = f1+f3;
+ if(f0 >=f2) //_LBB270_4
+{
+ r4 = 2;
+ r5 = 0;
+ r4 = f0 < f1 ? r4 : r5;
+}
+else{
+ r4 = 2;
+ r5 = 1;
+ r4 = f2 < f1 ? r4 : r5;
+}
+ r4 = r4 << 4;
+ r4 = (r1 + r4)|0;
+ r5 = r3 >> 2;
+ r4 = r4 >> 2;
+ heap32[(r5+-3)] = heap32[(r4+13)];
+ heap32[(r5+-2)] = heap32[(r4+14)];
+ r0 = (r0 + -1)|0;
+ r2 = (r2 + 16)|0;
+ r3 = (r3 + 16)|0;
+ heap32[(r5+-1)] = heap32[(r4+15)];
+ heap32[(r5)] = heap32[(r4+16)];
+ if(r0 !=0) //_LBB270_2
+{
+continue _3;
+}
+else{
+break _3;
+}
+}
+}
+ return;
+}
+
+function _ZNK15btTriangleShape8getPlaneER9btVector3S1_i(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ r1 = heap32[(r1)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+28)];
+ r2 = heap32[(fp+3)];
+ r3 = heap32[(fp+1)];
+ r4 = heap32[(fp+2)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r2;
+ heap32[(g0+2)] = r3;
+ heap32[(g0+3)] = r4;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+ return;
+}
+
+function _ZNK15btTriangleShape12getNumPlanesEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = 1;
+ r_g0 = r0;
+ return;
+}
+
+function _ZNK15btTriangleShape7getNameEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = _2E_str109;
+ r_g0 = r0;
+ return;
+}
+
+function _ZNK15btTriangleShape36getNumPreferredPenetrationDirectionsEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = 2;
+ r_g0 = r0;
+ return;
+}
+
+function _ZN24btConvexTriangleCallbackD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV24btConvexTriangleCallback;
+ r0 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r0)] = r1;
+ r1 = heap32[(r0+12)];
+ r2 = r1 >> 2;
+ r2 = heap32[(r2)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+5)];
+ r3 = heap32[(r0+16)];
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r3;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ r1 = heap32[(r0+12)];
+ r2 = r1 >> 2;
+ r2 = heap32[(r2)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+4)];
+ r3 = heap32[(r0+16)];
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r3;
+ r1 = _ZTV18btTriangleCallback;
+ r1 = (r1 + 8)|0;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ heap32[(r0)] = r1;
+ return;
+}
+
+function _ZN24btConvexTriangleCallbackD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV24btConvexTriangleCallback;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ r1 = heap32[(r2+12)];
+ r3 = r1 >> 2;
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3+5)];
+ r4 = heap32[(r2+16)];
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r4;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ r1 = heap32[(r2+12)];
+ r3 = r1 >> 2;
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3+4)];
+ r4 = heap32[(r2+16)];
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r4;
+ r1 = _ZTV18btTriangleCallback;
+ r1 = (r1 + 8)|0;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ heap32[(r2)] = r1;
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZN24btConvexTriangleCallback15processTriangleEP9btVector3ii(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+ var f10;
+var __label__ = 0;
+ i7 = sp + -240;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r1 = heap32[(r0+13)];
+ r2 = heap32[(fp+1)];
+ r3 = heap32[(r0+12)];
+ r4 = heap32[(r0+2)];
+if(!(r1 ==0)) //_LBB277_4
+{
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+5)];
+if(!(r1 ==0)) //_LBB277_4
+{
+ r5 = r1 >> 2;
+ r5 = heap32[(r5)];
+ r5 = r5 >> 2;
+ r5 = heap32[(r5+12)];
+ heap32[(g0)] = r1;
+ __FUNCTION_TABLE__[(r5)>>2](i7);
+ r1 = r_g0 & 1;
+if(!(r1 ==0)) //_LBB277_4
+{
+ r1 = sp + -112;
+ r5 = r1 >> 2;
+ heap32[(fp+-28)] = 1065353216;
+ heap32[(r5+1)] = 1065353216;
+ heap32[(r5+2)] = 0;
+ heap32[(r5+3)] = 0;
+ r5 = heap32[(r0+13)];
+ r5 = r5 >> 2;
+ r6 = r4 >> 2;
+ r7 = r2 >> 2;
+ r8 = heap32[(r5+5)];
+ r8 = r8 >> 2;
+ f0 = heapFloat[(r7+4)];
+ f1 = heapFloat[(r6+1)];
+ f2 = heapFloat[(r7+5)];
+ f3 = heapFloat[(r6+2)];
+ r8 = heap32[(r8)];
+ f4 = heapFloat[(r6+5)];
+ f5 = heapFloat[(r6+6)];
+ f1 = f1*f0;
+ f3 = f3*f2;
+ f6 = heapFloat[(r7+6)];
+ f7 = heapFloat[(r6+3)];
+ r8 = r8 >> 2;
+ f8 = heapFloat[(r6+9)];
+ f9 = heapFloat[(r6+10)];
+ f10 = heapFloat[(r6+7)];
+ f4 = f4*f0;
+ f5 = f5*f2;
+ f1 = f1+f3;
+ f3 = f7*f6;
+ f7 = heapFloat[(r6+11)];
+ r8 = heap32[(r8+2)];
+ f0 = f8*f0;
+ f2 = f9*f2;
+ f4 = f4+f5;
+ f5 = f10*f6;
+ f1 = f1+f3;
+ f3 = heapFloat[(r6+13)];
+ f8 = heapFloat[(r6+15)];
+ f9 = heapFloat[(r6+14)];
+ r9 = sp + -96;
+ f4 = f4+f5;
+ f0 = f0+f2;
+ f2 = f7*f6;
+ f1 = f1+f3;
+ f0 = f0+f2;
+ r10 = r9 >> 2;
+ f2 = f4+f9;
+ heapFloat[(fp+-24)] = f1;
+ f0 = f0+f8;
+ heapFloat[(r10+1)] = f2;
+ heapFloat[(r10+2)] = f0;
+ heap32[(r10+3)] = 0;
+ f0 = heapFloat[(r7)];
+ f1 = heapFloat[(r6+1)];
+ f2 = heapFloat[(r7+1)];
+ f3 = heapFloat[(r6+2)];
+ f4 = heapFloat[(r6+5)];
+ f5 = heapFloat[(r6+6)];
+ f1 = f1*f0;
+ f3 = f3*f2;
+ f6 = heapFloat[(r7+2)];
+ f7 = heapFloat[(r6+3)];
+ f8 = heapFloat[(r6+9)];
+ f9 = heapFloat[(r6+10)];
+ f10 = heapFloat[(r6+7)];
+ f4 = f4*f0;
+ f5 = f5*f2;
+ f1 = f1+f3;
+ f3 = f7*f6;
+ f7 = heapFloat[(r6+11)];
+ f0 = f8*f0;
+ f2 = f9*f2;
+ f4 = f4+f5;
+ f5 = f10*f6;
+ f1 = f1+f3;
+ f3 = heapFloat[(r6+13)];
+ f8 = heapFloat[(r6+15)];
+ f9 = heapFloat[(r6+14)];
+ r10 = sp + -80;
+ f4 = f4+f5;
+ f0 = f0+f2;
+ f2 = f7*f6;
+ f1 = f1+f3;
+ f0 = f0+f2;
+ r11 = r10 >> 2;
+ f2 = f4+f9;
+ heapFloat[(fp+-20)] = f1;
+ f0 = f0+f8;
+ heapFloat[(r11+1)] = f2;
+ heapFloat[(r11+2)] = f0;
+ heap32[(r11+3)] = 0;
+ r5 = heap32[(r5+5)];
+ heap32[(g0)] = r5;
+ heap32[(g0+1)] = r10;
+ heap32[(g0+2)] = r9;
+ heap32[(g0+3)] = r1;
+ __FUNCTION_TABLE__[(r8)>>2](i7);
+ r5 = heap32[(r0+13)];
+ r5 = r5 >> 2;
+ r8 = heap32[(r5+5)];
+ r8 = r8 >> 2;
+ f0 = heapFloat[(r7+8)];
+ f1 = heapFloat[(r6+1)];
+ f2 = heapFloat[(r7+9)];
+ f3 = heapFloat[(r6+2)];
+ r8 = heap32[(r8)];
+ f4 = heapFloat[(r6+5)];
+ f5 = heapFloat[(r6+6)];
+ f1 = f1*f0;
+ f3 = f3*f2;
+ f6 = heapFloat[(r7+10)];
+ f7 = heapFloat[(r6+3)];
+ r8 = r8 >> 2;
+ f8 = heapFloat[(r6+9)];
+ f9 = heapFloat[(r6+10)];
+ f10 = heapFloat[(r6+7)];
+ f4 = f4*f0;
+ f5 = f5*f2;
+ f1 = f1+f3;
+ f3 = f7*f6;
+ f7 = heapFloat[(r6+11)];
+ r8 = heap32[(r8+2)];
+ f0 = f8*f0;
+ f2 = f9*f2;
+ f4 = f4+f5;
+ f5 = f10*f6;
+ f1 = f1+f3;
+ f3 = heapFloat[(r6+13)];
+ f8 = heapFloat[(r6+15)];
+ f9 = heapFloat[(r6+14)];
+ r9 = sp + -64;
+ f4 = f4+f5;
+ f0 = f0+f2;
+ f2 = f7*f6;
+ f1 = f1+f3;
+ f0 = f0+f2;
+ r10 = r9 >> 2;
+ f2 = f4+f9;
+ heapFloat[(fp+-16)] = f1;
+ f0 = f0+f8;
+ heapFloat[(r10+1)] = f2;
+ heapFloat[(r10+2)] = f0;
+ heap32[(r10+3)] = 0;
+ f0 = heapFloat[(r7+4)];
+ f1 = heapFloat[(r6+1)];
+ f2 = heapFloat[(r7+5)];
+ f3 = heapFloat[(r6+2)];
+ f4 = heapFloat[(r6+5)];
+ f5 = heapFloat[(r6+6)];
+ f1 = f1*f0;
+ f3 = f3*f2;
+ f6 = heapFloat[(r7+6)];
+ f7 = heapFloat[(r6+3)];
+ f8 = heapFloat[(r6+9)];
+ f9 = heapFloat[(r6+10)];
+ f10 = heapFloat[(r6+7)];
+ f4 = f4*f0;
+ f5 = f5*f2;
+ f1 = f1+f3;
+ f3 = f7*f6;
+ f7 = heapFloat[(r6+11)];
+ f0 = f8*f0;
+ f2 = f9*f2;
+ f4 = f4+f5;
+ f5 = f10*f6;
+ f1 = f1+f3;
+ f3 = heapFloat[(r6+13)];
+ f8 = heapFloat[(r6+15)];
+ f9 = heapFloat[(r6+14)];
+ r10 = sp + -48;
+ f4 = f4+f5;
+ f0 = f0+f2;
+ f2 = f7*f6;
+ f1 = f1+f3;
+ f0 = f0+f2;
+ r11 = r10 >> 2;
+ f2 = f4+f9;
+ heapFloat[(fp+-12)] = f1;
+ f0 = f0+f8;
+ heapFloat[(r11+1)] = f2;
+ heapFloat[(r11+2)] = f0;
+ heap32[(r11+3)] = 0;
+ r5 = heap32[(r5+5)];
+ heap32[(g0)] = r5;
+ heap32[(g0+1)] = r10;
+ heap32[(g0+2)] = r9;
+ heap32[(g0+3)] = r1;
+ __FUNCTION_TABLE__[(r8)>>2](i7);
+ r5 = heap32[(r0+13)];
+ r5 = r5 >> 2;
+ r8 = heap32[(r5+5)];
+ r8 = r8 >> 2;
+ f0 = heapFloat[(r7)];
+ f1 = heapFloat[(r6+1)];
+ f2 = heapFloat[(r7+1)];
+ f3 = heapFloat[(r6+2)];
+ r8 = heap32[(r8)];
+ f4 = heapFloat[(r6+5)];
+ f5 = heapFloat[(r6+6)];
+ f1 = f1*f0;
+ f3 = f3*f2;
+ f6 = heapFloat[(r7+2)];
+ f7 = heapFloat[(r6+3)];
+ r8 = r8 >> 2;
+ f8 = heapFloat[(r6+9)];
+ f9 = heapFloat[(r6+10)];
+ f10 = heapFloat[(r6+7)];
+ f4 = f4*f0;
+ f5 = f5*f2;
+ f1 = f1+f3;
+ f3 = f7*f6;
+ f7 = heapFloat[(r6+11)];
+ r8 = heap32[(r8+2)];
+ f0 = f8*f0;
+ f2 = f9*f2;
+ f4 = f4+f5;
+ f5 = f10*f6;
+ f1 = f1+f3;
+ f3 = heapFloat[(r6+13)];
+ f8 = heapFloat[(r6+15)];
+ f9 = heapFloat[(r6+14)];
+ r9 = sp + -32;
+ f4 = f4+f5;
+ f0 = f0+f2;
+ f2 = f7*f6;
+ f1 = f1+f3;
+ f0 = f0+f2;
+ r10 = r9 >> 2;
+ f2 = f4+f9;
+ heapFloat[(fp+-8)] = f1;
+ f0 = f0+f8;
+ heapFloat[(r10+1)] = f2;
+ heapFloat[(r10+2)] = f0;
+ heap32[(r10+3)] = 0;
+ f0 = heapFloat[(r7+8)];
+ f1 = heapFloat[(r6+1)];
+ f2 = heapFloat[(r7+9)];
+ f3 = heapFloat[(r6+2)];
+ f4 = heapFloat[(r6+5)];
+ f5 = heapFloat[(r6+6)];
+ f1 = f1*f0;
+ f3 = f3*f2;
+ f6 = heapFloat[(r7+10)];
+ f7 = heapFloat[(r6+3)];
+ f8 = heapFloat[(r6+9)];
+ f9 = heapFloat[(r6+10)];
+ f10 = heapFloat[(r6+7)];
+ f4 = f4*f0;
+ f5 = f5*f2;
+ f1 = f1+f3;
+ f3 = f7*f6;
+ f7 = heapFloat[(r6+11)];
+ f0 = f8*f0;
+ f2 = f9*f2;
+ f4 = f4+f5;
+ f5 = f10*f6;
+ f1 = f1+f3;
+ f3 = heapFloat[(r6+13)];
+ f8 = heapFloat[(r6+15)];
+ f9 = heapFloat[(r6+14)];
+ r6 = sp + -16;
+ f4 = f4+f5;
+ f0 = f0+f2;
+ f2 = f7*f6;
+ f1 = f1+f3;
+ f0 = f0+f2;
+ r7 = r6 >> 2;
+ f2 = f4+f9;
+ heapFloat[(fp+-4)] = f1;
+ f0 = f0+f8;
+ heapFloat[(r7+1)] = f2;
+ heapFloat[(r7+2)] = f0;
+ heap32[(r7+3)] = 0;
+ r5 = heap32[(r5+5)];
+ heap32[(g0)] = r5;
+ heap32[(g0+1)] = r6;
+ heap32[(g0+2)] = r9;
+ heap32[(g0+3)] = r1;
+ __FUNCTION_TABLE__[(r8)>>2](i7);
+}
+}
+}
+ r1 = heap32[(r0+1)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+48)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+1)];
+if(!(r1 >19)) //_LBB277_9
+{
+ r1 = heap32[(fp+2)];
+ r5 = heap32[(fp+3)];
+ r6 = sp + -216;
+ r7 = r6 >> 2;
+ heap32[(r7+2)] = 0;
+ heap32[(r7+3)] = 1065353216;
+ heap32[(r7+4)] = 1065353216;
+ r8 = _ZTV15btTriangleShape;
+ heap32[(r7+5)] = 1065353216;
+ r8 = (r8 + 8)|0;
+ heap32[(r7+6)] = 0;
+ heap32[(fp+-54)] = r8;
+ r2 = r2 >> 2;
+ heap32[(r7+1)] = 1;
+ heap32[(r7+13)] = heap32[(r2)];
+ heap32[(r7+14)] = heap32[(r2+1)];
+ heap32[(r7+15)] = heap32[(r2+2)];
+ heap32[(r7+16)] = heap32[(r2+3)];
+ heap32[(r7+17)] = heap32[(r2+4)];
+ heap32[(r7+18)] = heap32[(r2+5)];
+ heap32[(r7+19)] = heap32[(r2+6)];
+ heap32[(r7+20)] = heap32[(r2+7)];
+ heap32[(r7+21)] = heap32[(r2+8)];
+ heap32[(r7+22)] = heap32[(r2+9)];
+ heap32[(r7+23)] = heap32[(r2+10)];
+ heap32[(r7+24)] = heap32[(r2+11)];
+ r2 = r4 >> 2;
+ heap32[(r7+11)] = heap32[(r0+14)];
+ r4 = heap32[(r2+48)];
+ heap32[(r2+48)] = r6;
+ r6 = r3 >> 2;
+ r7 = heap32[(r6)];
+ r7 = r7 >> 2;
+ r7 = heap32[(r7+2)];
+ r8 = heap32[(r0+16)];
+ r9 = heap32[(r0+2)];
+ r10 = heap32[(r0+1)];
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r10;
+ heap32[(g0+2)] = r9;
+ heap32[(g0+3)] = r8;
+ __FUNCTION_TABLE__[(r7)>>2](i7);
+ r7 = r_g0;
+ r8 = heap32[(r0+11)];
+ r9 = r8 >> 2;
+ r10 = heap32[(r9)];
+ r9 = heap32[(r9+34)];
+ r11 = heap32[(r0+2)];
+ if(r9 !=r11) //_LBB277_7
+{
+ r9 = r10 >> 2;
+ r9 = heap32[(r9+3)];
+ heap32[(g0)] = r8;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = r5;
+ __FUNCTION_TABLE__[(r9)>>2](i7);
+}
+else{
+ r10 = r10 >> 2;
+ r10 = heap32[(r10+2)];
+ heap32[(g0)] = r8;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = r5;
+ __FUNCTION_TABLE__[(r10)>>2](i7);
+}
+ r1 = r7 >> 2;
+ r5 = heap32[(r1)];
+ r5 = r5 >> 2;
+ r5 = heap32[(r5+2)];
+ r8 = heap32[(r0+11)];
+ r9 = heap32[(r0+13)];
+ r10 = heap32[(r0+2)];
+ r0 = heap32[(r0+1)];
+ heap32[(g0)] = r7;
+ heap32[(g0+1)] = r0;
+ heap32[(g0+2)] = r10;
+ heap32[(g0+3)] = r9;
+ heap32[(g0+4)] = r8;
+ __FUNCTION_TABLE__[(r5)>>2](i7);
+ r0 = heap32[(r1)];
+ r0 = r0 >> 2;
+ r0 = heap32[(r0)];
+ heap32[(g0)] = r7;
+ __FUNCTION_TABLE__[(r0)>>2](i7);
+ r0 = heap32[(r6)];
+ r0 = r0 >> 2;
+ r0 = heap32[(r0+13)];
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r7;
+ __FUNCTION_TABLE__[(r0)>>2](i7);
+ heap32[(r2+48)] = r4;
+}
+ return;
+}
+
+function _ZZN33btConvexConcaveCollisionAlgorithm21calculateTimeOfImpactEP17btCollisionObjectS1_RK16btDispatcherInfoP16btManifoldResultEN31LocalTriangleSphereCastCallbackD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV18btTriangleCallback;
+ r0 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r0)] = r1;
+ return;
+}
+
+function _ZZN33btConvexConcaveCollisionAlgorithm21calculateTimeOfImpactEP17btCollisionObjectS1_RK16btDispatcherInfoP16btManifoldResultEN31LocalTriangleSphereCastCallbackD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV18btTriangleCallback;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZZN33btConvexConcaveCollisionAlgorithm21calculateTimeOfImpactEP17btCollisionObjectS1_RK16btDispatcherInfoP16btManifoldResultEN31LocalTriangleSphereCastCallback15processTriangleEP9btVector3ii(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var f0;
+ var f1;
+var __label__ = 0;
+ i7 = sp + -800;var g0 = i7>>2; // save stack
+ r0 = sp + -64;
+ r1 = r0 >> 2;
+ heap32[(fp+-16)] = 1065353216;
+ heap32[(r1+1)] = 0;
+ heap32[(r1+2)] = 0;
+ heap32[(r1+3)] = 0;
+ heap32[(r1+4)] = 0;
+ heap32[(r1+5)] = 1065353216;
+ heap32[(r1+6)] = 0;
+ heap32[(r1+7)] = 0;
+ heap32[(r1+8)] = 0;
+ heap32[(r1+9)] = 0;
+ heap32[(r1+10)] = 1065353216;
+ heap32[(r1+11)] = 0;
+ heap32[(r1+12)] = 0;
+ heap32[(r1+13)] = 0;
+ r2 = _ZTVN12btConvexCast10CastResultE;
+ heap32[(r1+14)] = 0;
+ r3 = sp + -240;
+ r2 = (r2 + 8)|0;
+ heap32[(r1+15)] = 0;
+ r1 = r3 >> 2;
+ heap32[(fp+-60)] = r2;
+ r2 = heap32[(fp)];
+ heap32[(r1+42)] = 0;
+ r4 = r2 >> 2;
+ heap32[(r1+43)] = 0;
+ r5 = sp + -296;
+ heap32[(r1+41)] = heap32[(r4+50)];
+ r6 = r5 >> 2;
+ f0 = heapFloat[(r4+49)];
+ heap32[(r6+2)] = 0;
+ heap32[(r6+3)] = 1065353216;
+ heap32[(r6+4)] = 1065353216;
+ r7 = _ZTV13btSphereShape;
+ heap32[(r6+5)] = 1065353216;
+ r7 = (r7 + 8)|0;
+ heap32[(r6+6)] = 0;
+ heap32[(fp+-74)] = r7;
+ heap32[(r6+1)] = 8;
+ r7 = sp + -400;
+ heapFloat[(r6+7)] = f0;
+ r8 = r7 >> 2;
+ heapFloat[(r6+11)] = f0;
+ heap32[(r8+2)] = 0;
+ heap32[(r8+3)] = 1065353216;
+ heap32[(r8+4)] = 1065353216;
+ heap32[(r8+5)] = 1065353216;
+ r6 = _ZTV15btTriangleShape;
+ heap32[(r8+6)] = 0;
+ r6 = (r6 + 8)|0;
+ heap32[(r8+11)] = 1025758986;
+ r9 = heap32[(fp+1)];
+ heap32[(fp+-100)] = r6;
+ r6 = r9 >> 2;
+ heap32[(r8+1)] = 1;
+ heap32[(r8+13)] = heap32[(r6)];
+ heap32[(r8+14)] = heap32[(r6+1)];
+ heap32[(r8+15)] = heap32[(r6+2)];
+ heap32[(r8+16)] = heap32[(r6+3)];
+ heap32[(r8+17)] = heap32[(r6+4)];
+ heap32[(r8+18)] = heap32[(r6+5)];
+ heap32[(r8+19)] = heap32[(r6+6)];
+ heap32[(r8+20)] = heap32[(r6+7)];
+ heap32[(r8+21)] = heap32[(r6+8)];
+ heap32[(r8+22)] = heap32[(r6+9)];
+ r9 = sp + -760;
+ heap32[(r8+23)] = heap32[(r6+10)];
+ r10 = r9 >> 2;
+ heap32[(r8+24)] = heap32[(r6+11)];
+ r6 = _ZTV22btSubsimplexConvexCast;
+ r8 = 0;
+ heap32[(r10+77)] = 953267991;
+ r10 = sp + -776;
+ r6 = (r6 + 8)|0;
+ heap8[sp+-428] = r8;
+ r8 = r10 >> 2;
+ heap32[(fp+-194)] = r6;
+ heap32[(r8+1)] = r9;
+ heap32[(r8+2)] = r5;
+ heap32[(r8+3)] = r7;
+ r5 = (r2 + 4)|0;
+ r2 = (r2 + 68)|0;
+ heap32[(g0)] = r10;
+ heap32[(g0+1)] = r5;
+ heap32[(g0+2)] = r2;
+ heap32[(g0+3)] = r0;
+ heap32[(g0+4)] = r0;
+ heap32[(g0+5)] = r3;
+ _ZN22btSubsimplexConvexCast16calcTimeOfImpactERK11btTransformS2_S2_S2_RN12btConvexCast10CastResultE(i7);
+ r0 = r_g0;
+if(!(r0 ==0)) //_LBB280_3
+{
+ f0 = heapFloat[(r1+41)];
+ f1 = heapFloat[(r4+50)];
+if(!(f1 <=f0)) //_LBB280_3
+{
+ heapFloat[(r4+50)] = f0;
+}
+}
+ return;
+}
+
+function _ZN15btTriangleShapeD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV13btConvexShape;
+ r0 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r0)] = r1;
+ return;
+}
+
+function _ZN15btTriangleShapeD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV13btConvexShape;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+if(!(r0 ==0)) //_LBB282_2
+{
+ r0 = gNumAlignedFree;
+ r0 = r0 >> 2;
+ r1 = heap32[(r0)];
+ r1 = (r1 + 1)|0;
+ heap32[(r0)] = r1;
+ r0 = heap32[(r2+-1)];
+ heap32[(g0)] = r0;
+ free(i7);
+}
+ return;
+}
+
+function _ZNK15btTriangleShape21calculateLocalInertiaEfR9btVector3(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = _2E_str10;
+ r1 = _2E_str3112;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 125;
+ _assert(i7);
+}
+
+function _ZNK21btConvexInternalShape9serializeEPvP12btSerializer(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+2)];
+ r1 = r0 >> 2;
+ r2 = heap32[(r1)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+10)];
+ r3 = heap32[(fp)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r3;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ r2 = r_g0;
+ r4 = heap32[(r1)];
+ r4 = r4 >> 2;
+ r4 = heap32[(r4+7)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r2;
+ r5 = heap32[(fp+1)];
+ __FUNCTION_TABLE__[(r4)>>2](i7);
+ r4 = r_g0;
+ r5 = r5 >> 2;
+ heap32[(r5)] = r4;
+if(!(r4 ==0)) //_LBB284_2
+{
+ r1 = heap32[(r1)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+12)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r2;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+}
+ r0 = r3 >> 2;
+ r1 = heap32[(r0+1)];
+ heap32[(r5+1)] = r1;
+ heap32[(r5+7)] = heap32[(r0+7)];
+ heap32[(r5+8)] = heap32[(r0+8)];
+ heap32[(r5+9)] = heap32[(r0+9)];
+ heap32[(r5+10)] = heap32[(r0+10)];
+ heap32[(r5+3)] = heap32[(r0+3)];
+ heap32[(r5+4)] = heap32[(r0+4)];
+ heap32[(r5+5)] = heap32[(r0+5)];
+ heap32[(r5+6)] = heap32[(r0+6)];
+ heap32[(r5+11)] = heap32[(r0+11)];
+ r0 = _2E_str1110;
+ r_g0 = r0;
+ return;
+}
+
+function _ZNK15btTriangleShape32getPreferredPenetrationDirectionEiR9btVector3(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ f0 = heapFloat[(r0+23)];
+ f1 = heapFloat[(r0+15)];
+ f2 = heapFloat[(r0+19)];
+ f3 = heapFloat[(r0+22)];
+ f4 = heapFloat[(r0+14)];
+ f5 = heapFloat[(r0+18)];
+ f5 = f5-f4;
+ f0 = f0-f1;
+ f1 = f2-f1;
+ f2 = f3-f4;
+ f3 = heapFloat[(r0+21)];
+ f4 = heapFloat[(r0+13)];
+ f6 = heapFloat[(r0+17)];
+ f3 = f3-f4;
+ f4 = f6-f4;
+ r0 = heap32[(fp+2)];
+ f6 = f5*f0;
+ f7 = f1*f2;
+ f6 = f6-f7;
+ f1 = f1*f3;
+ f0 = f4*f0;
+ r0 = r0 >> 2;
+ f0 = f1-f0;
+ heapFloat[(r0)] = f6;
+ f1 = f4*f2;
+ f2 = f5*f3;
+ f1 = f1-f2;
+ heapFloat[(r0+1)] = f0;
+ heapFloat[(r0+2)] = f1;
+ f2 = f6*f6;
+ f0 = f0*f0;
+ heap32[(r0+3)] = 0;
+ f0 = f2+f0;
+ f1 = f1*f1;
+ f0 = f0+f1;
+ heapFloat[(g0)] = f0;
+ sqrtf(i7);
+ f1 = 1;
+ f0 = f1/f_g0;
+ f1 = heapFloat[(r0)];
+ f1 = f1*f0;
+ heapFloat[(r0)] = f1;
+ f2 = heapFloat[(r0+1)];
+ f2 = f2*f0;
+ heapFloat[(r0+1)] = f2;
+ f3 = heapFloat[(r0+2)];
+ f0 = f3*f0;
+ heapFloat[(r0+2)] = f0;
+ r1 = heap32[(fp+1)];
+if(!(r1 ==0)) //_LBB285_2
+{
+ f1 = -f1;
+ f2 = -f2;
+ heapFloat[(r0)] = f1;
+ f0 = -f0;
+ heapFloat[(r0+1)] = f2;
+ heapFloat[(r0+2)] = f0;
+}
+ return;
+}
+
+function _ZNK15btTriangleShape8isInsideERK9btVector3f(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+ var f10;
+ var f11;
+ var f12;
+ var f13;
+var __label__ = 0;
+ i7 = sp + -48;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ f0 = heapFloat[(r1+19)];
+ f1 = heapFloat[(r1+15)];
+ f2 = heapFloat[(r1+23)];
+ f3 = heapFloat[(r1+17)];
+ f4 = heapFloat[(r1+13)];
+ f5 = heapFloat[(r1+21)];
+ f6 = heapFloat[(r1+22)];
+ f7 = heapFloat[(r1+14)];
+ f8 = heapFloat[(r1+18)];
+ f0 = f0-f1;
+ f6 = f6-f7;
+ f3 = f3-f4;
+ f1 = f2-f1;
+ f2 = f8-f7;
+ f4 = f5-f4;
+ f5 = f2*f1;
+ f7 = f0*f6;
+ f0 = f0*f4;
+ f1 = f3*f1;
+ f5 = f5-f7;
+ f0 = f0-f1;
+ f1 = f3*f6;
+ f2 = f2*f4;
+ f1 = f1-f2;
+ f2 = f5*f5;
+ f3 = f0*f0;
+ f2 = f2+f3;
+ f3 = f1*f1;
+ f2 = f2+f3;
+ heapFloat[(g0)] = f2;
+ sqrtf(i7);
+ r2 = heap32[(fp+1)];
+ f3 = 1;
+ r2 = r2 >> 2;
+ f2 = f3/f_g0;
+ f4 = f5*f2;
+ f5 = heapFloat[(r2)];
+ f6 = heapFloat[(r1+13)];
+ f0 = f0*f2;
+ f7 = heapFloat[(r2+1)];
+ f8 = heapFloat[(r1+14)];
+ f1 = f1*f2;
+ f2 = heapFloat[(r2+2)];
+ f9 = heapFloat[(r1+15)];
+ f5 = f5*f4;
+ f7 = f7*f0;
+ f6 = f6*f4;
+ f8 = f8*f0;
+ f5 = f5+f7;
+ f2 = f2*f1;
+ f6 = f6+f8;
+ f7 = f9*f1;
+ f8 = heapFloat[(fp+2)];
+ f2 = f5+f2;
+ f5 = f6+f7;
+ f2 = f2-f5;
+ f5 = -f8;
+_1: do {
+ if(f2 <f5) //_LBB286_2
+{
+__label__ = 2;
+}
+else{
+ if(f2 <=f8) //_LBB286_3
+{
+ r3 = 0;
+_4: while(true){
+ if(r3 <3) //_LBB286_4
+{
+ r4 = heap32[(r1)];
+ r4 = r4 >> 2;
+ r4 = heap32[(r4+23)];
+ r5 = sp + -32;
+ r6 = sp + -16;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r3;
+ heap32[(g0+2)] = r6;
+ heap32[(g0+3)] = r5;
+ __FUNCTION_TABLE__[(r4)>>2](i7);
+ r4 = r5 >> 2;
+ r5 = r6 >> 2;
+ f2 = heapFloat[(r4+2)];
+ f6 = heapFloat[(r5+2)];
+ f7 = heapFloat[(r4+1)];
+ f8 = heapFloat[(r5+1)];
+ f9 = heapFloat[(fp+-8)];
+ f10 = heapFloat[(fp+-4)];
+ f2 = f2-f6;
+ f6 = f9-f10;
+ f7 = f7-f8;
+ f8 = f7*f1;
+ f9 = f2*f0;
+ f2 = f2*f4;
+ f10 = f6*f1;
+ f8 = f8-f9;
+ f2 = f2-f10;
+ f6 = f6*f0;
+ f7 = f7*f4;
+ f6 = f6-f7;
+ f7 = f8*f8;
+ f9 = f2*f2;
+ f7 = f7+f9;
+ f9 = f6*f6;
+ f7 = f7+f9;
+ heapFloat[(g0)] = f7;
+ sqrtf(i7);
+ f7 = f3/f_g0;
+ f9 = heapFloat[(r2)];
+ f8 = f8*f7;
+ f10 = heapFloat[(fp+-4)];
+ f11 = heapFloat[(r2+1)];
+ f2 = f2*f7;
+ f12 = heapFloat[(r5+1)];
+ f9 = f9*f8;
+ f11 = f11*f2;
+ f13 = heapFloat[(r2+2)];
+ f6 = f6*f7;
+ f7 = heapFloat[(r5+2)];
+ f8 = f10*f8;
+ f2 = f12*f2;
+ f9 = f9+f11;
+ f10 = f13*f6;
+ f2 = f8+f2;
+ f6 = f7*f6;
+ f7 = f9+f10;
+ f2 = f2+f6;
+ f2 = f7-f2;
+ if(f2 <f5) //_LBB286_2
+{
+__label__ = 2;
+break _1;
+}
+else{
+ r3 = (r3 + 1)|0;
+}
+}
+else{
+break _4;
+}
+}
+ r0 = 1;
+__label__ = 8;
+}
+else{
+__label__ = 2;
+}
+}
+} while(0);
+if (__label__ == 2){
+ r0 = 0;
+}
+ r0 = r0 & 255;
+ r_g0 = r0;
+ return;
+}
+
+function _ZNK15btTriangleShape16getPlaneEquationEiR9btVector3S1_(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ f0 = heapFloat[(r0+23)];
+ f1 = heapFloat[(r0+15)];
+ f2 = heapFloat[(r0+19)];
+ f3 = heapFloat[(r0+22)];
+ f4 = heapFloat[(r0+14)];
+ f5 = heapFloat[(r0+18)];
+ f5 = f5-f4;
+ f0 = f0-f1;
+ f1 = f2-f1;
+ f2 = f3-f4;
+ f3 = heapFloat[(r0+21)];
+ f4 = heapFloat[(r0+13)];
+ f6 = heapFloat[(r0+17)];
+ f3 = f3-f4;
+ f4 = f6-f4;
+ r1 = heap32[(fp+2)];
+ f6 = f5*f0;
+ f7 = f1*f2;
+ f6 = f6-f7;
+ r1 = r1 >> 2;
+ f1 = f1*f3;
+ f0 = f4*f0;
+ f0 = f1-f0;
+ heapFloat[(r1)] = f6;
+ f1 = f4*f2;
+ f2 = f5*f3;
+ f1 = f1-f2;
+ heapFloat[(r1+1)] = f0;
+ heapFloat[(r1+2)] = f1;
+ f2 = f6*f6;
+ f0 = f0*f0;
+ heap32[(r1+3)] = 0;
+ f0 = f2+f0;
+ f1 = f1*f1;
+ f0 = f0+f1;
+ heapFloat[(g0)] = f0;
+ sqrtf(i7);
+ f1 = 1;
+ f0 = f1/f_g0;
+ f1 = heapFloat[(r1)];
+ f1 = f1*f0;
+ heapFloat[(r1)] = f1;
+ f1 = heapFloat[(r1+1)];
+ f1 = f1*f0;
+ heapFloat[(r1+1)] = f1;
+ f1 = heapFloat[(r1+2)];
+ r2 = heap32[(fp+3)];
+ f0 = f1*f0;
+ r2 = r2 >> 2;
+ heapFloat[(r1+2)] = f0;
+ heap32[(r2)] = heap32[(r0+13)];
+ heap32[(r2+1)] = heap32[(r0+14)];
+ heap32[(r2+2)] = heap32[(r0+15)];
+ heap32[(r2+3)] = heap32[(r0+16)];
+ return;
+}
+
+function _ZN33btConvexConcaveCollisionAlgorithm21calculateTimeOfImpactEP17btCollisionObjectS1_RK16btDispatcherInfoP16btManifoldResult(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+ var f10;
+ var f11;
+ var f12;
+ var f13;
+ var f14;
+ var f15;
+ var f16;
+ var f17;
+ var f18;
+ var f19;
+ var f20;
+ var f21;
+ var f22;
+ var f23;
+ var f24;
+ var f25;
+ var f26;
+ var f27;
+ var f28;
+ var f29;
+ var f30;
+var __label__ = 0;
+ i7 = sp + -440;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = heapU8[r0+8];
+ r1 = heap32[(fp+1)];
+ r2 = heap32[(fp+2)];
+ r3 = r0 == 0 ? r1 : r2;
+ r3 = r3 >> 2;
+ f0 = heapFloat[(r3+30)];
+ f1 = heapFloat[(r3+14)];
+ f2 = heapFloat[(r3+29)];
+ f3 = heapFloat[(r3+13)];
+ f4 = f2-f3;
+ f5 = f0-f1;
+ f6 = heapFloat[(r3+31)];
+ f7 = heapFloat[(r3+15)];
+ f8 = f6-f7;
+ f4 = f4*f4;
+ f5 = f5*f5;
+ f9 = heapFloat[(r3+62)];
+ f4 = f4+f5;
+ f5 = f8*f8;
+ f8 = f9*f9;
+ f4 = f4+f5;
+if(!(f8 >f4)) //_LBB288_23
+{
+ r0 = r0 == 0 ? r2 : r1;
+ r0 = r0 >> 2;
+ r1 = heap32[(r0+48)];
+ r2 = r1 >> 2;
+ r4 = heap32[(r2+1)];
+ r4 = (r4 + -21)|0;
+if(!(uint(r4) >uint(8))) //_LBB288_23
+{
+ f4 = heapFloat[(r0+13)];
+ f5 = heapFloat[(r0+3)];
+ f8 = heapFloat[(r0+2)];
+ f4 = -f4;
+ f9 = heapFloat[(r0+1)];
+ f10 = heapFloat[(r0+7)];
+ f11 = heapFloat[(r0+6)];
+ f12 = heapFloat[(r0+14)];
+ f13 = heapFloat[(r0+5)];
+ f14 = heapFloat[(r3+3)];
+ f15 = heapFloat[(r3+7)];
+ f16 = heapFloat[(r3+2)];
+ f17 = heapFloat[(r3+6)];
+ f18 = heapFloat[(r3+1)];
+ f19 = heapFloat[(r3+5)];
+ f20 = heapFloat[(r3+19)];
+ heapFloat[(fp+-63)] = f20;
+ f21 = heapFloat[(r3+23)];
+ f22 = heapFloat[(r3+18)];
+ f23 = heapFloat[(r3+22)];
+ f24 = heapFloat[(r3+17)];
+ f25 = heapFloat[(r3+21)];
+ f26 = f5*f3;
+ heapFloat[(fp+-65)] = f26;
+ f27 = f10*f1;
+ f28 = f8*f3;
+ heapFloat[(fp+-66)] = f28;
+ f29 = f11*f1;
+ f3 = f9*f3;
+ heapFloat[(fp+-64)] = f3;
+ f1 = f13*f1;
+ f30 = heapFloat[(r0+11)];
+ f3 = heapFloat[(r0+10)];
+ f20 = heapFloat[(r0+15)];
+ f26 = heapFloat[(r0+9)];
+ f28 = f5*f2;
+ heapFloat[(fp+-67)] = f28;
+ f28 = f10*f0;
+ heapFloat[(fp+-69)] = f28;
+ f28 = f5*f4;
+ heapFloat[(fp+-68)] = f28;
+ f28 = f10*f12;
+ heapFloat[(fp+-71)] = f28;
+ f28 = f8*f2;
+ heapFloat[(fp+-70)] = f28;
+ f28 = f11*f0;
+ heapFloat[(fp+-73)] = f28;
+ f28 = f8*f4;
+ heapFloat[(fp+-72)] = f28;
+ f28 = f11*f12;
+ heapFloat[(fp+-78)] = f28;
+ f2 = f9*f2;
+ heapFloat[(fp+-74)] = f2;
+ f0 = f13*f0;
+ heapFloat[(fp+-76)] = f0;
+ f4 = f9*f4;
+ heapFloat[(fp+-75)] = f4;
+ f12 = f13*f12;
+ heapFloat[(fp+-77)] = f12;
+ f0 = heapFloat[(r3+11)];
+ f2 = heapFloat[(r3+10)];
+ f4 = heapFloat[(r3+9)];
+ f12 = heapFloat[(r3+27)];
+ f28 = heapFloat[(r3+26)];
+ heapFloat[(fp+-62)] = f28;
+ f28 = heapFloat[(r3+25)];
+ heapFloat[(fp+-61)] = f28;
+ f28 = heapFloat[(fp+-65)];
+ f27 = f28+f27;
+ heapFloat[(fp+-65)] = f27;
+ f27 = f30*f7;
+ heapFloat[(fp+-99)] = f27;
+ f28 = heapFloat[(fp+-66)];
+ f28 = f28+f29;
+ heapFloat[(fp+-66)] = f28;
+ f29 = f3*f7;
+ heapFloat[(fp+-98)] = f29;
+ f27 = heapFloat[(fp+-64)];
+ f1 = f27+f1;
+ heapFloat[(fp+-80)] = f1;
+ f7 = f26*f7;
+ heapFloat[(fp+-97)] = f7;
+ f27 = f14*f5;
+ heapFloat[(fp+-64)] = f27;
+ f1 = f15*f10;
+ heapFloat[(fp+-82)] = f1;
+ f1 = f16*f5;
+ heapFloat[(fp+-79)] = f1;
+ f1 = f17*f10;
+ heapFloat[(fp+-84)] = f1;
+ f1 = f18*f5;
+ heapFloat[(fp+-81)] = f1;
+ f1 = f19*f10;
+ heapFloat[(fp+-86)] = f1;
+ f1 = f14*f8;
+ heapFloat[(fp+-83)] = f1;
+ f1 = f15*f11;
+ heapFloat[(fp+-88)] = f1;
+ f1 = f16*f8;
+ heapFloat[(fp+-85)] = f1;
+ f1 = f17*f11;
+ heapFloat[(fp+-92)] = f1;
+ f1 = f18*f8;
+ heapFloat[(fp+-87)] = f1;
+ f1 = f19*f11;
+ heapFloat[(fp+-93)] = f1;
+ f14 = f14*f9;
+ heapFloat[(fp+-89)] = f14;
+ f15 = f15*f13;
+ heapFloat[(fp+-94)] = f15;
+ f16 = f16*f9;
+ heapFloat[(fp+-90)] = f16;
+ f17 = f17*f13;
+ heapFloat[(fp+-95)] = f17;
+ f18 = f18*f9;
+ heapFloat[(fp+-91)] = f18;
+ f19 = f19*f13;
+ heapFloat[(fp+-96)] = f19;
+ f1 = heapFloat[(fp+-67)];
+ f7 = heapFloat[(fp+-69)];
+ f1 = f1+f7;
+ f7 = f30*f6;
+ f14 = heapFloat[(fp+-68)];
+ f15 = heapFloat[(fp+-71)];
+ f14 = f14-f15;
+ f15 = f30*f20;
+ f16 = heapFloat[(fp+-70)];
+ f17 = heapFloat[(fp+-73)];
+ f16 = f16+f17;
+ f17 = f3*f6;
+ f18 = heapFloat[(fp+-72)];
+ f19 = heapFloat[(fp+-78)];
+ f18 = f18-f19;
+ f19 = f3*f20;
+ f27 = heapFloat[(fp+-74)];
+ f28 = heapFloat[(fp+-76)];
+ f27 = f27+f28;
+ f6 = f26*f6;
+ f28 = heapFloat[(fp+-75)];
+ f29 = heapFloat[(fp+-77)];
+ f28 = f28-f29;
+ f20 = f26*f20;
+ f29 = heapFloat[(fp+-63)];
+ f29 = f29*f5;
+ heapFloat[(fp+-67)] = f29;
+ f29 = f21*f10;
+ heapFloat[(fp+-69)] = f29;
+ f29 = f22*f5;
+ heapFloat[(fp+-68)] = f29;
+ f29 = f23*f10;
+ f5 = f24*f5;
+ heapFloat[(fp+-70)] = f5;
+ f5 = f25*f10;
+ heapFloat[(fp+-101)] = f5;
+ f10 = heapFloat[(fp+-63)];
+ f5 = f10*f8;
+ heapFloat[(fp+-71)] = f5;
+ f5 = f21*f11;
+ heapFloat[(fp+-73)] = f5;
+ f5 = f22*f8;
+ heapFloat[(fp+-72)] = f5;
+ f5 = f23*f11;
+ heapFloat[(fp+-100)] = f5;
+ f8 = f24*f8;
+ heapFloat[(fp+-74)] = f8;
+ f5 = f25*f11;
+ heapFloat[(fp+-102)] = f5;
+ f8 = f10*f9;
+ heapFloat[(fp+-75)] = f8;
+ f5 = f21*f13;
+ heapFloat[(fp+-103)] = f5;
+ f8 = f22*f9;
+ heapFloat[(fp+-78)] = f8;
+ f5 = f23*f13;
+ heapFloat[(fp+-104)] = f5;
+ f8 = f24*f9;
+ heapFloat[(fp+-76)] = f8;
+ f5 = f25*f13;
+ heapFloat[(fp+-105)] = f5;
+ f8 = heapFloat[(fp+-65)];
+ f9 = heapFloat[(fp+-99)];
+ f8 = f8+f9;
+ heapFloat[(fp+-77)] = f8;
+ f9 = f14-f15;
+ f1 = f1+f7;
+ heapFloat[(fp+-63)] = f1;
+ f7 = heapFloat[(fp+-66)];
+ f10 = heapFloat[(fp+-98)];
+ f7 = f7+f10;
+ heapFloat[(fp+-98)] = f7;
+ f10 = f18-f19;
+ f11 = f16+f17;
+ heapFloat[(fp+-65)] = f11;
+ f13 = heapFloat[(fp+-80)];
+ f14 = heapFloat[(fp+-97)];
+ f1 = f13+f14;
+ heapFloat[(fp+-80)] = f1;
+ f5 = f28-f20;
+ f6 = f27+f6;
+ heapFloat[(fp+-66)] = f6;
+ f7 = heapFloat[(fp+-64)];
+ f8 = heapFloat[(fp+-82)];
+ f1 = f7+f8;
+ heapFloat[(fp+-64)] = f1;
+ f1 = f0*f30;
+ heapFloat[(fp+-82)] = f1;
+ f6 = heapFloat[(fp+-79)];
+ f7 = heapFloat[(fp+-84)];
+ f1 = f6+f7;
+ heapFloat[(fp+-79)] = f1;
+ f1 = f2*f30;
+ heapFloat[(fp+-84)] = f1;
+ f6 = heapFloat[(fp+-81)];
+ f7 = heapFloat[(fp+-86)];
+ f1 = f6+f7;
+ heapFloat[(fp+-81)] = f1;
+ f1 = f4*f30;
+ heapFloat[(fp+-86)] = f1;
+ f6 = heapFloat[(fp+-83)];
+ f7 = heapFloat[(fp+-88)];
+ f1 = f6+f7;
+ heapFloat[(fp+-83)] = f1;
+ f1 = f0*f3;
+ heapFloat[(fp+-88)] = f1;
+ f6 = heapFloat[(fp+-85)];
+ f7 = heapFloat[(fp+-92)];
+ f1 = f6+f7;
+ heapFloat[(fp+-85)] = f1;
+ f1 = f2*f3;
+ heapFloat[(fp+-92)] = f1;
+ f6 = heapFloat[(fp+-87)];
+ f7 = heapFloat[(fp+-93)];
+ f1 = f6+f7;
+ heapFloat[(fp+-87)] = f1;
+ f1 = f4*f3;
+ heapFloat[(fp+-93)] = f1;
+ f6 = heapFloat[(fp+-89)];
+ f7 = heapFloat[(fp+-94)];
+ f1 = f6+f7;
+ heapFloat[(fp+-89)] = f1;
+ f0 = f0*f26;
+ f6 = heapFloat[(fp+-90)];
+ f7 = heapFloat[(fp+-95)];
+ f6 = f6+f7;
+ f2 = f2*f26;
+ f7 = heapFloat[(fp+-91)];
+ f8 = heapFloat[(fp+-96)];
+ f7 = f7+f8;
+ f4 = f4*f26;
+ f8 = heapFloat[(fp+-67)];
+ f11 = heapFloat[(fp+-69)];
+ f8 = f8+f11;
+ f11 = f12*f30;
+ f13 = heapFloat[(fp+-68)];
+ f13 = f13+f29;
+ f28 = heapFloat[(fp+-62)];
+ f14 = f28*f30;
+ f15 = heapFloat[(fp+-70)];
+ f16 = heapFloat[(fp+-101)];
+ f15 = f15+f16;
+ f28 = heapFloat[(fp+-61)];
+ f16 = f28*f30;
+ f17 = heapFloat[(fp+-71)];
+ f18 = heapFloat[(fp+-73)];
+ f17 = f17+f18;
+ f18 = f12*f3;
+ f19 = heapFloat[(fp+-72)];
+ f20 = heapFloat[(fp+-100)];
+ f19 = f19+f20;
+ f28 = heapFloat[(fp+-62)];
+ f20 = f28*f3;
+ f21 = heapFloat[(fp+-74)];
+ f22 = heapFloat[(fp+-102)];
+ f21 = f21+f22;
+ f28 = heapFloat[(fp+-61)];
+ f3 = f28*f3;
+ f22 = heapFloat[(fp+-75)];
+ f23 = heapFloat[(fp+-103)];
+ f22 = f22+f23;
+ f12 = f12*f26;
+ f23 = heapFloat[(fp+-78)];
+ f24 = heapFloat[(fp+-104)];
+ f23 = f23+f24;
+ f28 = heapFloat[(fp+-62)];
+ f24 = f28*f26;
+ f25 = heapFloat[(fp+-76)];
+ f27 = heapFloat[(fp+-105)];
+ f25 = f25+f27;
+ f28 = heapFloat[(fp+-61)];
+ f26 = f28*f26;
+ f27 = heapFloat[(fp+-77)];
+ f27 = f27+f9;
+ f28 = heapFloat[(fp+-98)];
+ f28 = f28+f10;
+ f29 = heapFloat[(fp+-80)];
+ f29 = f29+f5;
+ f30 = heapFloat[(fp+-64)];
+ f1 = heapFloat[(fp+-82)];
+ f1 = f30+f1;
+ heapFloat[(fp+-61)] = f1;
+ f1 = heapFloat[(fp+-79)];
+ f30 = heapFloat[(fp+-84)];
+ f1 = f1+f30;
+ heapFloat[(fp+-62)] = f1;
+ f1 = heapFloat[(fp+-81)];
+ f30 = heapFloat[(fp+-86)];
+ f1 = f1+f30;
+ heapFloat[(fp+-64)] = f1;
+ f1 = heapFloat[(fp+-83)];
+ f30 = heapFloat[(fp+-88)];
+ f1 = f1+f30;
+ heapFloat[(fp+-67)] = f1;
+ f1 = heapFloat[(fp+-85)];
+ f30 = heapFloat[(fp+-92)];
+ f1 = f1+f30;
+ heapFloat[(fp+-68)] = f1;
+ f1 = heapFloat[(fp+-87)];
+ f30 = heapFloat[(fp+-93)];
+ f1 = f1+f30;
+ f30 = heapFloat[(fp+-89)];
+ f0 = f30+f0;
+ f2 = f6+f2;
+ f4 = f7+f4;
+ f6 = heapFloat[(fp+-63)];
+ f6 = f6+f9;
+ f7 = heapFloat[(fp+-65)];
+ f7 = f7+f10;
+ f9 = heapFloat[(fp+-66)];
+ f5 = f9+f5;
+ f8 = f8+f11;
+ f9 = f13+f14;
+ f10 = f15+f16;
+ f11 = f17+f18;
+ f13 = f19+f20;
+ f3 = f21+f3;
+ f12 = f22+f12;
+ f14 = f23+f24;
+ f15 = f25+f26;
+ r0 = sp + -16;
+ r4 = r0 >> 2;
+ heapFloat[(fp+-4)] = f29;
+ heapFloat[(r4+1)] = f28;
+ heapFloat[(r4+2)] = f27;
+ heap32[(r4+3)] = 0;
+ if(f5 <f29) //_LBB288_4
+{
+ heapFloat[(fp+-4)] = f5;
+ f16 = f5;
+}
+else{
+ f16 = f29;
+}
+ if(f7 <f28) //_LBB288_7
+{
+ heapFloat[(r4+1)] = f7;
+ f17 = f7;
+}
+else{
+ f17 = f28;
+}
+ if(f6 <f27) //_LBB288_10
+{
+ heapFloat[(r4+2)] = f6;
+ f18 = f6;
+}
+else{
+ f18 = f27;
+}
+ r5 = sp + -32;
+ r6 = r5 >> 2;
+ heapFloat[(fp+-8)] = f29;
+ heapFloat[(r6+1)] = f28;
+ heapFloat[(r6+2)] = f27;
+ heap32[(r6+3)] = 0;
+ if(f29 <f5) //_LBB288_13
+{
+ heapFloat[(fp+-8)] = f5;
+ f19 = f5;
+}
+else{
+ f19 = f29;
+}
+ if(f28 <f7) //_LBB288_16
+{
+ heapFloat[(r6+1)] = f7;
+ f20 = f7;
+}
+else{
+ f20 = f28;
+}
+ if(f27 <f6) //_LBB288_19
+{
+ heapFloat[(r6+2)] = f6;
+ f21 = f6;
+}
+else{
+ f21 = f27;
+}
+ f22 = heapFloat[(r3+61)];
+ f16 = f16-f22;
+ f17 = f17-f22;
+ heapFloat[(fp+-4)] = f16;
+ f16 = f18-f22;
+ heapFloat[(r4+1)] = f17;
+ f17 = f19+f22;
+ heapFloat[(r4+2)] = f16;
+ f16 = f20+f22;
+ heapFloat[(fp+-8)] = f17;
+ r4 = _ZTVZN33btConvexConcaveCollisionAlgorithm21calculateTimeOfImpactEP17btCollisionObjectS1_RK16btDispatcherInfoP16btManifoldResultE31LocalTriangleSphereCastCallback;
+ f17 = f21+f22;
+ heapFloat[(r6+1)] = f16;
+ r7 = sp + -240;
+ r4 = (r4 + 8)|0;
+ heapFloat[(r6+2)] = f17;
+ r6 = r7 >> 2;
+ heap32[(fp+-60)] = r4;
+ heapFloat[(r6+1)] = f4;
+ heapFloat[(r6+2)] = f2;
+ heapFloat[(r6+3)] = f0;
+ heap32[(r6+4)] = 0;
+ heapFloat[(r6+5)] = f1;
+ f0 = heapFloat[(fp+-68)];
+ heapFloat[(r6+6)] = f0;
+ f0 = heapFloat[(fp+-67)];
+ heapFloat[(r6+7)] = f0;
+ heap32[(r6+8)] = 0;
+ f0 = heapFloat[(fp+-64)];
+ heapFloat[(r6+9)] = f0;
+ f0 = heapFloat[(fp+-62)];
+ heapFloat[(r6+10)] = f0;
+ f0 = heapFloat[(fp+-61)];
+ heapFloat[(r6+11)] = f0;
+ heap32[(r6+12)] = 0;
+ heapFloat[(r6+13)] = f29;
+ heapFloat[(r6+14)] = f28;
+ heapFloat[(r6+15)] = f27;
+ heap32[(r6+16)] = 0;
+ heapFloat[(r6+17)] = f15;
+ heapFloat[(r6+18)] = f14;
+ heapFloat[(r6+19)] = f12;
+ heap32[(r6+20)] = 0;
+ heapFloat[(r6+21)] = f3;
+ heapFloat[(r6+22)] = f13;
+ heapFloat[(r6+23)] = f11;
+ heap32[(r6+24)] = 0;
+ heapFloat[(r6+25)] = f10;
+ heapFloat[(r6+26)] = f9;
+ heapFloat[(r6+27)] = f8;
+ heap32[(r6+28)] = 0;
+ heapFloat[(r6+29)] = f5;
+ heapFloat[(r6+30)] = f7;
+ heapFloat[(r6+31)] = f6;
+ heap32[(r6+32)] = 0;
+ heapFloat[(r6+49)] = f22;
+ heap32[(r6+50)] = heap32[(r3+60)];
+if(!(r1 ==0)) //_LBB288_23
+{
+ r2 = heap32[(r2)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+15)];
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r7;
+ heap32[(g0+2)] = r0;
+ heap32[(g0+3)] = r5;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ f0 = heapFloat[(r6+50)];
+ f1 = heapFloat[(r3+60)];
+if(!(f0 >=f1)) //_LBB288_23
+{
+ heapFloat[(r3+60)] = f0;
+ f_g0 = f0;
+ return;
+}
+}
+}
+}
+ f0 = 1;
+ f_g0 = f0;
+ return;
+}
+
+function _ZN33btConvexConcaveCollisionAlgorithm16processCollisionEP17btCollisionObjectS1_RK16btDispatcherInfoP16btManifoldResult(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+ var f10;
+ var f11;
+ var f12;
+ var f13;
+ var f14;
+ var f15;
+ var f16;
+ var f17;
+ var f18;
+ var f19;
+ var f20;
+ var f21;
+ var f22;
+ var f23;
+ var f24;
+ var f25;
+ var f26;
+ var f27;
+ var f28;
+ var f29;
+ var f30;
+var __label__ = 0;
+ i7 = sp + -80;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = heapU8[r0+8];
+ r2 = heap32[(fp+2)];
+ r3 = heap32[(fp+1)];
+ r4 = r1 == 0 ? r2 : r3;
+ r5 = r4 >> 2;
+ r5 = heap32[(r5+48)];
+ r6 = r5 >> 2;
+ r7 = heap32[(r6+1)];
+ r7 = (r7 + -21)|0;
+if(!(uint(r7) >uint(8))) //_LBB289_8
+{
+ r1 = r1 == 0 ? r3 : r2;
+ r2 = r1 >> 2;
+ r2 = heap32[(r2+48)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+1)];
+if(!(r2 >19)) //_LBB289_8
+{
+ r2 = heap32[(fp+3)];
+ r3 = heap32[(fp+4)];
+ r7 = heap32[(r6)];
+ r7 = r7 >> 2;
+ r7 = heap32[(r7+11)];
+ heap32[(g0)] = r5;
+ r8 = r0 >> 2;
+ __FUNCTION_TABLE__[(r7)>>2](i7);
+ f0 = f_g0;
+ r7 = r3 >> 2;
+ r9 = heap32[(r8+19)];
+ heap32[(r7+1)] = r9;
+ heap32[(r8+16)] = r2;
+ heapFloat[(r8+17)] = f0;
+ heap32[(r8+14)] = r3;
+ r2 = heap32[(r8+4)];
+ r9 = heap32[(r8+5)];
+ r9 = r9 >> 2;
+ r2 = r2 >> 2;
+ f1 = heapFloat[(r9+1)];
+ f2 = heapFloat[(r2+1)];
+ f3 = heapFloat[(r9+5)];
+ f4 = heapFloat[(r2+5)];
+ f5 = heapFloat[(r2+2)];
+ f6 = heapFloat[(r2+6)];
+ f7 = f2*f1;
+ f8 = f4*f3;
+ f9 = heapFloat[(r9+9)];
+ f10 = heapFloat[(r2+9)];
+ f11 = heapFloat[(r9+2)];
+ f12 = heapFloat[(r9+6)];
+ f13 = heapFloat[(r9+3)];
+ f14 = heapFloat[(r2+13)];
+ f15 = heapFloat[(r2+3)];
+ f16 = heapFloat[(r9+7)];
+ f17 = heapFloat[(r9+14)];
+ f18 = heapFloat[(r2+14)];
+ f19 = heapFloat[(r2+7)];
+ f20 = heapFloat[(r9+10)];
+ f21 = heapFloat[(r9+15)];
+ f22 = heapFloat[(r9+11)];
+ f23 = heapFloat[(r2+15)];
+ f24 = heapFloat[(r2+11)];
+ f25 = heapFloat[(r2+10)];
+ f26 = heapFloat[(r9+13)];
+ f27 = f5*f1;
+ f28 = f6*f3;
+ f7 = f7+f8;
+ f8 = f10*f9;
+ r9 = sp + -64;
+ f29 = f15*f1;
+ f30 = f19*f3;
+ f27 = f27+f28;
+ f28 = f25*f9;
+ f7 = f7+f8;
+ r10 = r9 >> 2;
+ f8 = f29+f30;
+ f29 = f24*f9;
+ f27 = f27+f28;
+ heapFloat[(fp+-16)] = f7;
+ f7 = f2*f11;
+ f28 = f4*f12;
+ f8 = f8+f29;
+ heapFloat[(r10+1)] = f27;
+ heapFloat[(r10+2)] = f8;
+ f8 = f5*f11;
+ f27 = f6*f12;
+ f7 = f7+f28;
+ f28 = f10*f20;
+ f29 = f15*f11;
+ f30 = f19*f12;
+ f8 = f8+f27;
+ f27 = f25*f20;
+ f7 = f7+f28;
+ heap32[(r10+3)] = 0;
+ f28 = f29+f30;
+ f29 = f24*f20;
+ f8 = f8+f27;
+ heapFloat[(r10+4)] = f7;
+ f2 = f2*f13;
+ f4 = f4*f16;
+ f7 = f28+f29;
+ heapFloat[(r10+5)] = f8;
+ heapFloat[(r10+6)] = f7;
+ f5 = f5*f13;
+ f6 = f6*f16;
+ f2 = f2+f4;
+ f4 = f10*f22;
+ f7 = -f26;
+ f8 = f15*f13;
+ f10 = f19*f16;
+ f5 = f5+f6;
+ f6 = f25*f22;
+ f2 = f2+f4;
+ heap32[(r10+7)] = 0;
+ f4 = f1*f14;
+ f15 = f3*f18;
+ f1 = f1*f7;
+ f3 = f3*f17;
+ f8 = f8+f10;
+ f10 = f24*f22;
+ f5 = f5+f6;
+ heapFloat[(r10+8)] = f2;
+ f2 = f11*f14;
+ f6 = f12*f18;
+ f11 = f11*f7;
+ f12 = f12*f17;
+ f4 = f4+f15;
+ f15 = f9*f23;
+ f1 = f1-f3;
+ f3 = f9*f21;
+ f8 = f8+f10;
+ heapFloat[(r10+9)] = f5;
+ heapFloat[(r10+10)] = f8;
+ f5 = f13*f14;
+ f8 = f16*f18;
+ f7 = f13*f7;
+ f9 = f16*f17;
+ f2 = f2+f6;
+ f6 = f20*f23;
+ f10 = f11-f12;
+ f11 = f20*f21;
+ f4 = f4+f15;
+ f1 = f1-f3;
+ f3 = f5+f8;
+ f5 = f22*f23;
+ f7 = f7-f9;
+ f8 = f22*f21;
+ f2 = f2+f6;
+ f6 = f10-f11;
+ f1 = f4+f1;
+ heap32[(r10+11)] = 0;
+ f3 = f3+f5;
+ f4 = f7-f8;
+ f2 = f2+f6;
+ heapFloat[(r10+12)] = f1;
+ f1 = f3+f4;
+ heapFloat[(r10+13)] = f2;
+ heapFloat[(r10+14)] = f1;
+ heap32[(r10+15)] = 0;
+ r2 = heap32[(r2+48)];
+ r10 = r2 >> 2;
+ r10 = heap32[(r10)];
+ r10 = r10 >> 2;
+ r10 = heap32[(r10+2)];
+ r11 = (r0 + 40)|0;
+ r12 = (r0 + 24)|0;
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = r9;
+ heap32[(g0+2)] = r12;
+ heap32[(g0+3)] = r11;
+ __FUNCTION_TABLE__[(r10)>>2](i7);
+ f1 = heapFloat[(r8+10)];
+ f1 = f1+f0;
+ heapFloat[(r8+10)] = f1;
+ f1 = heapFloat[(r8+11)];
+ f1 = f1+f0;
+ heapFloat[(r8+11)] = f1;
+ f1 = heapFloat[(r8+12)];
+ f1 = f1+f0;
+ heapFloat[(r8+12)] = f1;
+ f1 = heapFloat[(r8+6)];
+ f1 = f1-f0;
+ heapFloat[(r8+6)] = f1;
+ f1 = heapFloat[(r8+7)];
+ f1 = f1-f0;
+ heapFloat[(r8+7)] = f1;
+ f1 = heapFloat[(r8+8)];
+ f0 = f1-f0;
+ heapFloat[(r8+8)] = f0;
+ r2 = heap32[(r8+19)];
+ r2 = r2 >> 2;
+ heap32[(r2+277)] = r1;
+ heap32[(r2+278)] = r4;
+ r1 = heap32[(r6)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+15)];
+ r0 = (r0 + 12)|0;
+ heap32[(g0)] = r5;
+ heap32[(g0+1)] = r0;
+ heap32[(g0+2)] = r12;
+ heap32[(g0+3)] = r11;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+ r0 = heap32[(r7+1)];
+ if(r0 !=0) //_LBB289_4
+{
+ r1 = r0 >> 2;
+ r2 = heap32[(r1+279)];
+if(!(r2 ==0)) //_LBB289_8
+{
+ r1 = heap32[(r1+277)];
+ r2 = heap32[(r7+34)];
+ if(r1 ==r2) //_LBB289_7
+{
+ r1 = (r3 + 8)|0;
+ r2 = (r3 + 72)|0;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = r2;
+ _ZN20btPersistentManifold20refreshContactPointsERK11btTransformS2_(i7);
+}
+else{
+ r1 = (r3 + 72)|0;
+ r3 = (r3 + 8)|0;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = r3;
+ _ZN20btPersistentManifold20refreshContactPointsERK11btTransformS2_(i7);
+ return;
+}
+}
+}
+else{
+ r0 = _2E_str59;
+ r3 = _2E_str160;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r3;
+ heap32[(g0+2)] = 101;
+ _assert(i7);
+}
+}
+}
+ return;
+}
+
+function _ZN33btConvexConcaveCollisionAlgorithm22getAllContactManifoldsER20btAlignedObjectArrayIP20btPersistentManifoldE(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r1 = heap32[(r0+19)];
+if(!(r1 ==0)) //_LBB290_22
+{
+ r2 = heap32[(fp+1)];
+ r3 = r2 >> 2;
+ r4 = heap32[(r3+2)];
+ r5 = heap32[(r3+1)];
+ if(r4 ==r5) //_LBB290_3
+{
+ r6 = 1;
+ r7 = r5 << 1;
+ r7 = r5 == 0 ? r6 : r7;
+if(!(r4 >=r7)) //_LBB290_2
+{
+ if(r7 !=0) //_LBB290_6
+{
+ r1 = gNumAlignedAllocs;
+ r1 = r1 >> 2;
+ r4 = heap32[(r1)];
+ r8 = r7 << 2;
+ r4 = (r4 + 1)|0;
+ r8 = r8 | 3;
+ heap32[(r1)] = r4;
+ r1 = (r8 + 16)|0;
+ heap32[(g0)] = r1;
+ malloc(i7);
+ r1 = r_g0;
+ if(r1 !=0) //_LBB290_8
+{
+ r4 = 0;
+ r8 = (r1 + 4)|0;
+ r4 = (r4 - r8)|0;
+ r4 = r4 & 15;
+ r4 = (r1 + r4)|0;
+ r8 = (r4 + 4)|0;
+ r4 = r4 >> 2;
+ heap32[(r4)] = r1;
+ r1 = r8;
+}
+}
+else{
+ r1 = 0;
+}
+ r4 = (r2 + 12)|0;
+ if(r5 <1) //_LBB290_11
+{
+ r8 = r4 >> 2;
+ r9 = heap32[(r8)];
+}
+else{
+ r8 = 0;
+_14: while(true){
+ r9 = r4 >> 2;
+ r9 = heap32[(r9)];
+ r10 = r8 << 2;
+ r11 = (r9 + r10)|0;
+ r11 = r11 >> 2;
+ r10 = (r1 + r10)|0;
+ r11 = heap32[(r11)];
+ r8 = (r8 + 1)|0;
+ r10 = r10 >> 2;
+ heap32[(r10)] = r11;
+if(!(r5 !=r8)) //_LBB290_12
+{
+break _14;
+}
+}
+ r4 = (r2 + 12)|0;
+}
+ if(r9 !=0) //_LBB290_16
+{
+ r8 = heapU8[r2+16];
+ if(r8 !=0) //_LBB290_18
+{
+ r5 = gNumAlignedFree;
+ r5 = r5 >> 2;
+ r8 = heap32[(r5)];
+ r8 = (r8 + 1)|0;
+ r9 = r9 >> 2;
+ heap32[(r5)] = r8;
+ r5 = heap32[(r9+-1)];
+ heap32[(g0)] = r5;
+ free(i7);
+ r5 = heap32[(r3+1)];
+}
+ r8 = r4 >> 2;
+ heap32[(r8)] = 0;
+}
+ r4 = r4 >> 2;
+ heap8[r2+16] = r6;
+ heap32[(r4)] = r1;
+ heap32[(r3+2)] = r7;
+ r1 = heap32[(r0+19)];
+}
+}
+ r0 = r5 << 2;
+ r2 = heap32[(r3+3)];
+ r0 = (r2 + r0)|0;
+ r0 = r0 >> 2;
+ heap32[(r0)] = r1;
+ r0 = heap32[(r3+1)];
+ r0 = (r0 + 1)|0;
+ heap32[(r3+1)] = r0;
+}
+ return;
+}
+
+function _ZN33btConvexConcaveCollisionAlgorithmD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV33btConvexConcaveCollisionAlgorithm;
+ r2 = _ZTV24btConvexTriangleCallback;
+ r1 = (r1 + 8)|0;
+ r3 = r0 >> 2;
+ r2 = (r2 + 8)|0;
+ heap32[(r3)] = r1;
+ heap32[(r3+3)] = r2;
+ r1 = heap32[(r3+15)];
+ r2 = r1 >> 2;
+ r2 = heap32[(r2)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+5)];
+ r4 = heap32[(r3+19)];
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r4;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ r1 = heap32[(r3+15)];
+ r2 = r1 >> 2;
+ r2 = heap32[(r2)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+4)];
+ r4 = heap32[(r3+19)];
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r4;
+ r1 = _ZTV18btTriangleCallback;
+ r4 = _ZTV30btActivatingCollisionAlgorithm;
+ r1 = (r1 + 8)|0;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ r2 = (r4 + 8)|0;
+ heap32[(r3+3)] = r1;
+ heap32[(r3)] = r2;
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZN33btConvexConcaveCollisionAlgorithmD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV33btConvexConcaveCollisionAlgorithm;
+ r2 = _ZTV24btConvexTriangleCallback;
+ r0 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ r2 = (r2 + 8)|0;
+ heap32[(r0)] = r1;
+ heap32[(r0+3)] = r2;
+ r1 = heap32[(r0+15)];
+ r2 = r1 >> 2;
+ r2 = heap32[(r2)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+5)];
+ r3 = heap32[(r0+19)];
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r3;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ r1 = heap32[(r0+15)];
+ r2 = r1 >> 2;
+ r2 = heap32[(r2)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+4)];
+ r3 = heap32[(r0+19)];
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r3;
+ r1 = _ZTV18btTriangleCallback;
+ r3 = _ZTV30btActivatingCollisionAlgorithm;
+ r1 = (r1 + 8)|0;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ r2 = (r3 + 8)|0;
+ heap32[(r0+3)] = r1;
+ heap32[(r0)] = r2;
+ return;
+}
+
+function _ZN23btConvexConvexAlgorithm10CreateFuncD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTVN23btConvexConvexAlgorithm10CreateFuncE;
+ r0 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r0)] = r1;
+ return;
+}
+
+function _ZN23btConvexConvexAlgorithm10CreateFuncD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTVN23btConvexConvexAlgorithm10CreateFuncE;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZN23btConvexConvexAlgorithm10CreateFunc24CreateCollisionAlgorithmER36btCollisionAlgorithmConstructionInfoP17btCollisionObjectS4_(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ r0 = r0 >> 2;
+ r1 = heap32[(r0)];
+ r2 = r1 >> 2;
+ r2 = heap32[(r2)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+12)];
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = 36;
+ r1 = heap32[(fp)];
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ r1 = r1 >> 2;
+ r3 = _ZTV20btCollisionAlgorithm;
+ r4 = heap32[(r1+5)];
+ r5 = heap32[(r1+4)];
+ r6 = heap32[(r0+1)];
+ r7 = heap32[(r1+2)];
+ r1 = heap32[(r1+3)];
+ r8 = r_g0 >> 2;
+ r3 = (r3 + 8)|0;
+ heap32[(r8)] = r3;
+ r0 = heap32[(r0)];
+ r3 = _ZTV23btConvexConvexAlgorithm;
+ r3 = (r3 + 8)|0;
+ heap32[(r8+1)] = r0;
+ heap32[(r8)] = r3;
+ heap32[(r8+2)] = r1;
+ r0 = 0;
+ heap32[(r8+3)] = r7;
+ heap8[r_g0+16] = r0;
+ heap32[(r8+5)] = r6;
+ heap8[r_g0+24] = r0;
+ heap32[(r8+7)] = r5;
+ heap32[(r8+8)] = r4;
+ return;
+}
+
+function _ZN24btPerturbedContactResultD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV24btPerturbedContactResult;
+ r0 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r0)] = r1;
+ return;
+}
+
+function _ZN24btPerturbedContactResultD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV24btPerturbedContactResult;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZN24btPerturbedContactResult15addContactPointERK9btVector3S2_f(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+ var f10;
+ var f11;
+ var f12;
+ var f13;
+ var f14;
+ var f15;
+ var f16;
+ var f17;
+ var f18;
+ var f19;
+ var f20;
+ var f21;
+ var f22;
+ var f23;
+ var f24;
+ var f25;
+ var f26;
+ var f27;
+ var f28;
+ var f29;
+ var f30;
+var __label__ = 0;
+ i7 = sp + -104;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ r1 = r0 >> 2;
+ r2 = heap32[(fp+2)];
+ r2 = r2 >> 2;
+ f0 = heapFloat[(r1+2)];
+ heapFloat[(fp+-5)] = f0;
+ f1 = heapFloat[(r1+1)];
+ heapFloat[(fp+-6)] = f1;
+ f2 = heapFloat[(fp+3)];
+ f3 = heapFloat[(r1)];
+ heapFloat[(fp+-7)] = f3;
+ f4 = heapFloat[(r2+2)];
+ heapFloat[(fp+-11)] = f4;
+ f0 = f0*f2;
+ f5 = heapFloat[(r2+1)];
+ heapFloat[(fp+-12)] = f5;
+ f1 = f1*f2;
+ f6 = heapFloat[(r2)];
+ heapFloat[(fp+-13)] = f6;
+ f2 = f3*f2;
+ r1 = heap32[(fp)];
+ f0 = f4+f0;
+ heapFloat[(fp+-8)] = f0;
+ f0 = f5+f1;
+ heapFloat[(fp+-9)] = f0;
+ f0 = f6+f2;
+ heapFloat[(fp+-10)] = f0;
+ r2 = heapU8[r1+356];
+ if(r2 ==0) //_LBB298_2
+{
+ r2 = r1 >> 2;
+ f3 = heapFloat[(r2+69)];
+ f3 = -f3;
+ f0 = heapFloat[(r2+57)];
+ f1 = heapFloat[(r2+58)];
+ f2 = heapFloat[(r2+61)];
+ f4 = heapFloat[(r2+70)];
+ f5 = heapFloat[(r2+62)];
+ f6 = heapFloat[(r2+77)];
+ f7 = heapFloat[(r2+78)];
+ f8 = heapFloat[(r2+73)];
+ f9 = heapFloat[(r2+65)];
+ f10 = heapFloat[(r2+74)];
+ f11 = heapFloat[(r2+66)];
+ f12 = heapFloat[(r2+71)];
+ f13 = heapFloat[(r2+59)];
+ f14 = heapFloat[(r2+63)];
+ f15 = f0*f3;
+ f16 = f2*f4;
+ f17 = f1*f3;
+ f18 = f5*f4;
+ f19 = heapFloat[(r2+81)];
+ f20 = heapFloat[(r2+82)];
+ f21 = heapFloat[(r2+79)];
+ f22 = heapFloat[(r2+67)];
+ f23 = heapFloat[(r2+75)];
+ f24 = f0*f6;
+ f25 = f1*f7;
+ f26 = f2*f6;
+ f27 = f5*f7;
+ f28 = f0*f8;
+ heapFloat[(fp+-14)] = f28;
+ f28 = f1*f10;
+ heapFloat[(fp+-15)] = f28;
+ f29 = f2*f8;
+ f28 = f5*f10;
+ f15 = f15-f16;
+ f16 = f9*f12;
+ f17 = f17-f18;
+ f18 = f11*f12;
+ f3 = f13*f3;
+ heapFloat[(fp+-16)] = f3;
+ f3 = f14*f4;
+ heapFloat[(fp+-20)] = f3;
+ f4 = f15-f16;
+ f15 = f17-f18;
+ f16 = heapFloat[(r2+83)];
+ f0 = f0*f19;
+ f1 = f1*f20;
+ f2 = f2*f19;
+ f5 = f5*f20;
+ f17 = f24+f25;
+ heapFloat[(fp+-17)] = f17;
+ f3 = f13*f21;
+ heapFloat[(fp+-21)] = f3;
+ f17 = f26+f27;
+ heapFloat[(fp+-18)] = f17;
+ f18 = f14*f21;
+ f24 = f9*f6;
+ heapFloat[(fp+-19)] = f24;
+ f25 = f11*f7;
+ f26 = heapFloat[(fp+-14)];
+ f27 = heapFloat[(fp+-15)];
+ f26 = f26+f27;
+ f27 = f13*f23;
+ f28 = f29+f28;
+ f29 = f14*f23;
+ f30 = f9*f8;
+ f3 = f11*f10;
+ f17 = heapFloat[(fp+-16)];
+ f24 = heapFloat[(fp+-20)];
+ f17 = f17-f24;
+ f12 = f22*f12;
+ f12 = f17-f12;
+ f0 = f0+f1;
+ f1 = f13*f16;
+ f2 = f2+f5;
+ f5 = f14*f16;
+ f9 = f9*f19;
+ f11 = f11*f20;
+ f17 = heapFloat[(fp+-17)];
+ f13 = heapFloat[(fp+-21)];
+ f13 = f17+f13;
+ f14 = f26+f27;
+ f17 = heapFloat[(fp+-18)];
+ f17 = f17+f18;
+ f18 = f28+f29;
+ f24 = heapFloat[(fp+-19)];
+ f24 = f24+f25;
+ f25 = f22*f21;
+ f6 = f6*f4;
+ f7 = f7*f15;
+ f3 = f30+f3;
+ f26 = f22*f23;
+ f8 = f8*f4;
+ f10 = f10*f15;
+ f0 = f0+f1;
+ f1 = f2+f5;
+ f2 = f9+f11;
+ f5 = f22*f16;
+ f4 = f19*f4;
+ f9 = f20*f15;
+ f11 = heapFloat[(fp+-13)];
+ f13 = f13*f11;
+ f15 = heapFloat[(fp+-12)];
+ f17 = f17*f15;
+ f19 = f24+f25;
+ f3 = f3+f26;
+ f6 = f6+f7;
+ f7 = f21*f12;
+ f14 = f14*f11;
+ f18 = f18*f15;
+ f8 = f8+f10;
+ f10 = f23*f12;
+ f2 = f2+f5;
+ f0 = f0*f11;
+ f1 = f1*f15;
+ f4 = f4+f9;
+ f5 = f16*f12;
+ f9 = f13+f17;
+ f11 = heapFloat[(fp+-11)];
+ f12 = f19*f11;
+ f6 = f6+f7;
+ f7 = heapFloat[(r2+86)];
+ f13 = f14+f18;
+ f3 = f3*f11;
+ f8 = f8+f10;
+ f10 = heapFloat[(r2+85)];
+ f14 = heapFloat[(r2+87)];
+ f4 = f4+f5;
+ f0 = f0+f1;
+ f1 = f2*f11;
+ f2 = f9+f12;
+ f5 = f6+f7;
+ f3 = f13+f3;
+ f6 = f8+f10;
+ f3 = f3+f6;
+ f2 = f2+f5;
+ f0 = f0+f1;
+ f1 = f4+f14;
+ r2 = sp + -16;
+ f4 = heapFloat[(fp+-10)];
+ f4 = f4-f3;
+ f5 = heapFloat[(fp+-9)];
+ f5 = f5-f2;
+ f0 = f0+f1;
+ f1 = heapFloat[(fp+-7)];
+ f1 = f4*f1;
+ f4 = heapFloat[(fp+-6)];
+ f4 = f5*f4;
+ f5 = heapFloat[(fp+-8)];
+ f5 = f5-f0;
+ r2 = r2 >> 2;
+ heapFloat[(fp+-4)] = f3;
+ heapFloat[(r2+1)] = f2;
+ f3 = f1+f4;
+ f1 = heapFloat[(fp+-5)];
+ f1 = f5*f1;
+ f3 = f3+f1;
+ heapFloat[(r2+2)] = f0;
+ heap32[(r2+3)] = 0;
+}
+else{
+ r2 = r1 >> 2;
+ f0 = heapFloat[(r2+53)];
+ f0 = -f0;
+ f1 = heapFloat[(r2+41)];
+ f2 = heapFloat[(r2+42)];
+ f3 = heapFloat[(r2+45)];
+ f4 = heapFloat[(r2+54)];
+ f5 = heapFloat[(r2+46)];
+ f6 = heapFloat[(r2+77)];
+ f7 = heapFloat[(r2+78)];
+ f8 = heapFloat[(r2+73)];
+ f9 = heapFloat[(r2+49)];
+ f10 = heapFloat[(r2+74)];
+ f11 = heapFloat[(r2+50)];
+ f12 = heapFloat[(r2+55)];
+ f13 = heapFloat[(r2+43)];
+ f14 = heapFloat[(r2+47)];
+ f15 = f1*f0;
+ f16 = f3*f4;
+ f17 = f2*f0;
+ f18 = f5*f4;
+ f19 = heapFloat[(r2+81)];
+ f20 = heapFloat[(r2+82)];
+ f21 = heapFloat[(r2+79)];
+ f22 = heapFloat[(r2+51)];
+ f23 = heapFloat[(r2+75)];
+ f24 = f1*f8;
+ f25 = f2*f10;
+ f26 = f3*f8;
+ f27 = f5*f10;
+ f28 = f1*f6;
+ heapFloat[(fp+-14)] = f28;
+ f29 = f2*f7;
+ f30 = f3*f6;
+ f28 = f5*f7;
+ f15 = f15-f16;
+ f16 = f9*f12;
+ f17 = f17-f18;
+ f18 = f11*f12;
+ f0 = f13*f0;
+ heapFloat[(fp+-15)] = f0;
+ f0 = f14*f4;
+ heapFloat[(fp+-16)] = f0;
+ f4 = f15-f16;
+ f15 = f17-f18;
+ f16 = heapFloat[(r2+83)];
+ f0 = f24+f25;
+ heapFloat[(fp+-17)] = f0;
+ f17 = f13*f23;
+ f0 = f26+f27;
+ heapFloat[(fp+-18)] = f0;
+ f18 = f14*f23;
+ f24 = f9*f8;
+ f25 = f11*f10;
+ f26 = heapFloat[(fp+-14)];
+ f26 = f26+f29;
+ f27 = f13*f21;
+ f28 = f30+f28;
+ f29 = f14*f21;
+ f30 = f9*f6;
+ f0 = f11*f7;
+ f1 = f1*f19;
+ heapFloat[(fp+-14)] = f1;
+ f2 = f2*f20;
+ f1 = f3*f19;
+ heapFloat[(fp+-19)] = f1;
+ f3 = f5*f20;
+ f5 = heapFloat[(fp+-15)];
+ f1 = heapFloat[(fp+-16)];
+ f1 = f5-f1;
+ f5 = f22*f12;
+ f1 = f1-f5;
+ f5 = heapFloat[(fp+-17)];
+ f5 = f5+f17;
+ f12 = f26+f27;
+ f17 = heapFloat[(fp+-18)];
+ f17 = f17+f18;
+ f18 = f28+f29;
+ f24 = f24+f25;
+ f25 = f22*f23;
+ f8 = f8*f4;
+ f10 = f10*f15;
+ f0 = f30+f0;
+ f26 = f22*f21;
+ f6 = f6*f4;
+ f7 = f7*f15;
+ f27 = heapFloat[(fp+-14)];
+ f2 = f27+f2;
+ f13 = f13*f16;
+ f27 = heapFloat[(fp+-19)];
+ f3 = f27+f3;
+ f14 = f14*f16;
+ f9 = f9*f19;
+ f11 = f11*f20;
+ f2 = f2+f13;
+ f3 = f3+f14;
+ f13 = heapFloat[(fp+-10)];
+ f5 = f5*f13;
+ f14 = heapFloat[(fp+-9)];
+ f17 = f17*f14;
+ f24 = f24+f25;
+ f0 = f0+f26;
+ f8 = f8+f10;
+ f10 = f23*f1;
+ f12 = f12*f13;
+ f18 = f18*f14;
+ f6 = f6+f7;
+ f7 = f21*f1;
+ f9 = f9+f11;
+ f11 = f22*f16;
+ f4 = f19*f4;
+ f15 = f20*f15;
+ f9 = f9+f11;
+ f5 = f5+f17;
+ f11 = heapFloat[(fp+-8)];
+ f17 = f24*f11;
+ f8 = f8+f10;
+ f10 = heapFloat[(r2+85)];
+ f12 = f12+f18;
+ f0 = f0*f11;
+ f6 = f6+f7;
+ f7 = heapFloat[(r2+86)];
+ f2 = f2*f13;
+ f3 = f3*f14;
+ f4 = f4+f15;
+ f1 = f16*f1;
+ f13 = heapFloat[(r2+87)];
+ f1 = f4+f1;
+ f4 = f5+f17;
+ f5 = f8+f10;
+ f0 = f12+f0;
+ f6 = f6+f7;
+ f2 = f2+f3;
+ f3 = f9*f11;
+ f4 = f4+f5;
+ f0 = f0+f6;
+ f2 = f2+f3;
+ f1 = f1+f13;
+ f3 = heapFloat[(fp+-13)];
+ f3 = f4-f3;
+ f5 = heapFloat[(fp+-12)];
+ f5 = f0-f5;
+ f1 = f2+f1;
+ f2 = heapFloat[(fp+-7)];
+ f3 = f3*f2;
+ f6 = heapFloat[(fp+-6)];
+ f5 = f5*f6;
+ f7 = heapFloat[(fp+-11)];
+ f7 = f1-f7;
+ f3 = f3+f5;
+ f5 = heapFloat[(fp+-5)];
+ f7 = f7*f5;
+ f3 = f3+f7;
+ f2 = f2*f3;
+ r2 = sp + -16;
+ f6 = f6*f3;
+ f2 = f4+f2;
+ f4 = f5*f3;
+ r2 = r2 >> 2;
+ f0 = f0+f6;
+ heapFloat[(fp+-4)] = f2;
+ f1 = f1+f4;
+ heapFloat[(r2+1)] = f0;
+ heapFloat[(r2+2)] = f1;
+ heap32[(r2+3)] = 0;
+}
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+40)];
+ r2 = r1 >> 2;
+ r2 = heap32[(r2)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+4)];
+ r3 = sp + -16;
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r0;
+ heap32[(g0+2)] = r3;
+ heapFloat[(g0+3)] = f3;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ return;
+}
+
+function _ZN23btConvexConvexAlgorithm22getAllContactManifoldsER20btAlignedObjectArrayIP20btPersistentManifoldE(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ r2 = heap32[(r1+5)];
+if(!(r2 ==0)) //_LBB299_23
+{
+ r0 = heapU8[r0+16];
+if(!(r0 ==0)) //_LBB299_23
+{
+ r0 = heap32[(fp+1)];
+ r3 = r0 >> 2;
+ r4 = heap32[(r3+2)];
+ r5 = heap32[(r3+1)];
+ if(r4 ==r5) //_LBB299_4
+{
+ r6 = 1;
+ r7 = r5 << 1;
+ r7 = r5 == 0 ? r6 : r7;
+if(!(r4 >=r7)) //_LBB299_3
+{
+ if(r7 !=0) //_LBB299_7
+{
+ r2 = gNumAlignedAllocs;
+ r2 = r2 >> 2;
+ r4 = heap32[(r2)];
+ r8 = r7 << 2;
+ r4 = (r4 + 1)|0;
+ r8 = r8 | 3;
+ heap32[(r2)] = r4;
+ r2 = (r8 + 16)|0;
+ heap32[(g0)] = r2;
+ malloc(i7);
+ r2 = r_g0;
+ if(r2 !=0) //_LBB299_9
+{
+ r4 = 0;
+ r8 = (r2 + 4)|0;
+ r4 = (r4 - r8)|0;
+ r4 = r4 & 15;
+ r4 = (r2 + r4)|0;
+ r8 = (r4 + 4)|0;
+ r4 = r4 >> 2;
+ heap32[(r4)] = r2;
+ r2 = r8;
+}
+}
+else{
+ r2 = 0;
+}
+ r4 = (r0 + 12)|0;
+ if(r5 <1) //_LBB299_12
+{
+ r8 = r4 >> 2;
+ r9 = heap32[(r8)];
+}
+else{
+ r8 = 0;
+_15: while(true){
+ r9 = r4 >> 2;
+ r9 = heap32[(r9)];
+ r10 = r8 << 2;
+ r11 = (r9 + r10)|0;
+ r11 = r11 >> 2;
+ r10 = (r2 + r10)|0;
+ r11 = heap32[(r11)];
+ r8 = (r8 + 1)|0;
+ r10 = r10 >> 2;
+ heap32[(r10)] = r11;
+if(!(r5 !=r8)) //_LBB299_13
+{
+break _15;
+}
+}
+ r4 = (r0 + 12)|0;
+}
+ if(r9 !=0) //_LBB299_17
+{
+ r8 = heapU8[r0+16];
+ if(r8 !=0) //_LBB299_19
+{
+ r5 = gNumAlignedFree;
+ r5 = r5 >> 2;
+ r8 = heap32[(r5)];
+ r8 = (r8 + 1)|0;
+ r9 = r9 >> 2;
+ heap32[(r5)] = r8;
+ r5 = heap32[(r9+-1)];
+ heap32[(g0)] = r5;
+ free(i7);
+ r5 = heap32[(r3+1)];
+}
+ r8 = r4 >> 2;
+ heap32[(r8)] = 0;
+}
+ r4 = r4 >> 2;
+ heap8[r0+16] = r6;
+ heap32[(r4)] = r2;
+ heap32[(r3+2)] = r7;
+ r2 = heap32[(r1+5)];
+}
+}
+ r0 = r5 << 2;
+ r1 = heap32[(r3+3)];
+ r0 = (r1 + r0)|0;
+ r0 = r0 >> 2;
+ heap32[(r0)] = r2;
+ r0 = heap32[(r3+1)];
+ r0 = (r0 + 1)|0;
+ heap32[(r3+1)] = r0;
+}
+}
+ return;
+}
+
+function _ZN23btConvexConvexAlgorithm21calculateTimeOfImpactEP17btCollisionObjectS1_RK16btDispatcherInfoP16btManifoldResult(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+ var r13;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+var __label__ = 0;
+ i7 = sp + -1240;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ r1 = r0 >> 2;
+ r2 = heap32[(fp+2)];
+ r3 = r2 >> 2;
+ f0 = heapFloat[(r1+29)];
+ f1 = heapFloat[(r1+13)];
+ f2 = heapFloat[(r1+30)];
+ f3 = heapFloat[(r1+14)];
+ f0 = f0-f1;
+ f1 = f2-f3;
+ f2 = heapFloat[(r1+31)];
+ f3 = heapFloat[(r1+15)];
+ f2 = f2-f3;
+ f0 = f0*f0;
+ f1 = f1*f1;
+ f3 = heapFloat[(r1+62)];
+ f0 = f0+f1;
+ f1 = f2*f2;
+ f2 = f3*f3;
+ f0 = f0+f1;
+if(!(f2 <=f0)) //_LBB300_2
+{
+ f0 = heapFloat[(r3+31)];
+ f1 = heapFloat[(r3+15)];
+ f2 = heapFloat[(r3+30)];
+ f3 = heapFloat[(r3+14)];
+ f4 = heapFloat[(r3+29)];
+ f5 = heapFloat[(r3+13)];
+ f0 = f0-f1;
+ f1 = f2-f3;
+ f2 = f4-f5;
+ f2 = f2*f2;
+ f1 = f1*f1;
+ f3 = heapFloat[(r3+62)];
+ f1 = f2+f1;
+ f0 = f0*f0;
+ f2 = f3*f3;
+ f0 = f1+f0;
+ if(f2 >f0) //_LBB300_16
+{
+ f0 = 1;
+ f_g0 = f0;
+ return;
+}
+}
+ r4 = sp + -56;
+ r5 = heap32[(r1+48)];
+ f0 = heapFloat[(r3+61)];
+ r6 = r4 >> 2;
+ heap32[(r6+2)] = 0;
+ heap32[(r6+3)] = 1065353216;
+ heap32[(r6+4)] = 1065353216;
+ r7 = _ZTV13btSphereShape;
+ heap32[(r6+5)] = 1065353216;
+ r7 = (r7 + 8)|0;
+ heap32[(r6+6)] = 0;
+ heap32[(fp+-14)] = r7;
+ heap32[(r6+1)] = 8;
+ r8 = _ZTVN12btConvexCast10CastResultE;
+ heapFloat[(r6+7)] = f0;
+ r9 = sp + -232;
+ r8 = (r8 + 8)|0;
+ heapFloat[(r6+11)] = f0;
+ r6 = r9 >> 2;
+ heap32[(fp+-58)] = r8;
+ heap32[(r6+41)] = 1566444395;
+ r10 = sp + -592;
+ heap32[(r6+42)] = 0;
+ r11 = r10 >> 2;
+ heap32[(r6+43)] = 0;
+ r12 = _ZTV15btGjkConvexCast;
+ r13 = 0;
+ heap32[(r11+77)] = 953267991;
+ r11 = sp + -608;
+ r12 = (r12 + 8)|0;
+ heap8[sp+-260] = r13;
+ r13 = r11 >> 2;
+ heap32[(fp+-152)] = r12;
+ heap32[(r13+1)] = r10;
+ heap32[(r13+2)] = r5;
+ heap32[(r13+3)] = r4;
+ r4 = (r2 + 68)|0;
+ r2 = (r2 + 4)|0;
+ r5 = (r0 + 68)|0;
+ r0 = (r0 + 4)|0;
+ heap32[(g0)] = r11;
+ heap32[(g0+1)] = r0;
+ heap32[(g0+2)] = r5;
+ heap32[(g0+3)] = r2;
+ heap32[(g0+4)] = r4;
+ heap32[(g0+5)] = r9;
+ _ZN15btGjkConvexCast16calcTimeOfImpactERK11btTransformS2_S2_S2_RN12btConvexCast10CastResultE(i7);
+ r9 = r_g0;
+ if(r9 !=0) //_LBB300_4
+{
+ f0 = heapFloat[(r6+41)];
+ f1 = heapFloat[(r1+60)];
+if(!(f1 <=f0)) //_LBB300_6
+{
+ heapFloat[(r1+60)] = f0;
+}
+ f1 = heapFloat[(r3+60)];
+if(!(f1 <=f0)) //_LBB300_8
+{
+ heapFloat[(r3+60)] = f0;
+}
+ f1 = 1;
+ if(f0 >=f1) //_LBB300_3
+{
+__label__ = 3;
+}
+else{
+__label__ = 9;
+}
+}
+else{
+__label__ = 3;
+}
+if (__label__ == 3){
+ f0 = 1;
+}
+ r6 = _ZTV12btConvexCast;
+ r9 = _ZTV13btConvexShape;
+ r6 = (r6 + 8)|0;
+ r9 = (r9 + 8)|0;
+ heap32[(fp+-152)] = r6;
+ heap32[(fp+-14)] = r9;
+ r6 = sp + -664;
+ r9 = heap32[(r3+48)];
+ f1 = heapFloat[(r1+61)];
+ r10 = r6 >> 2;
+ heap32[(r10+2)] = 0;
+ heap32[(r10+3)] = 1065353216;
+ heap32[(r10+4)] = 1065353216;
+ heap32[(r10+5)] = 1065353216;
+ heap32[(r10+6)] = 0;
+ heap32[(fp+-166)] = r7;
+ heap32[(r10+1)] = 8;
+ heapFloat[(r10+7)] = f1;
+ r7 = sp + -840;
+ heapFloat[(r10+11)] = f1;
+ r10 = r7 >> 2;
+ heap32[(fp+-210)] = r8;
+ heap32[(r10+41)] = 1566444395;
+ r8 = sp + -1200;
+ heap32[(r10+42)] = 0;
+ r11 = r8 >> 2;
+ heap32[(r10+43)] = 0;
+ heap32[(r11+77)] = 953267991;
+ r11 = heapU8[sp+-868];
+ r11 = r11 & 240;
+ r13 = sp + -1216;
+ heap8[sp+-868] = r11;
+ r11 = r13 >> 2;
+ heap32[(fp+-304)] = r12;
+ heap32[(r11+1)] = r8;
+ heap32[(r11+2)] = r6;
+ heap32[(r11+3)] = r9;
+ heap32[(g0)] = r13;
+ heap32[(g0+1)] = r0;
+ heap32[(g0+2)] = r5;
+ heap32[(g0+3)] = r2;
+ heap32[(g0+4)] = r4;
+ heap32[(g0+5)] = r7;
+ _ZN15btGjkConvexCast16calcTimeOfImpactERK11btTransformS2_S2_S2_RN12btConvexCast10CastResultE(i7);
+ r0 = r_g0;
+if(!(r0 ==0)) //_LBB300_15
+{
+ f1 = heapFloat[(r10+41)];
+ f2 = heapFloat[(r1+60)];
+if(!(f2 <=f1)) //_LBB300_12
+{
+ heapFloat[(r1+60)] = f1;
+}
+ f2 = heapFloat[(r3+60)];
+if(!(f2 <=f1)) //_LBB300_14
+{
+ heapFloat[(r3+60)] = f1;
+}
+ f0 = f1 < f0 ? f1 : f0;
+}
+ f_g0 = f0;
+ return;
+}
+
+function _ZN23btConvexConvexAlgorithm16processCollisionEP17btCollisionObjectS1_RK16btDispatcherInfoP16btManifoldResult(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+ var r13;
+ var r14;
+ var r15;
+ var r16;
+ var r17;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+ var f10;
+ var f11;
+ var f12;
+ var f13;
+ var f14;
+ var f15;
+ var f16;
+ var f17;
+ var f18;
+ var f19;
+ var f20;
+ var f21;
+ var f22;
+ var f23;
+ var f24;
+ var f25;
+ var f26;
+ var f27;
+ var f28;
+ var f29;
+ var f30;
+var __label__ = 0;
+ i7 = sp + -816;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ r2 = heap32[(r1+5)];
+ r3 = heap32[(fp+1)];
+ r4 = heap32[(fp+2)];
+ r5 = heap32[(fp+3)];
+ r6 = heap32[(fp+4)];
+ if(r2 ==0) //_LBB301_2
+{
+ r2 = heap32[(r1+1)];
+ r7 = r2 >> 2;
+ r7 = heap32[(r7)];
+ r7 = r7 >> 2;
+ r7 = heap32[(r7+3)];
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = r3;
+ heap32[(g0+2)] = r4;
+ __FUNCTION_TABLE__[(r7)>>2](i7);
+ r2 = r_g0;
+ r7 = 1;
+ heap32[(r1+5)] = r2;
+ heap8[r0+16] = r7;
+}
+ r7 = r6 >> 2;
+ r8 = r3 >> 2;
+ heap32[(r7+1)] = r2;
+ r2 = r4 >> 2;
+ r9 = heap32[(r8+48)];
+ r10 = heap32[(r2+48)];
+ r11 = r9 >> 2;
+ r12 = heap32[(r11+1)];
+ if(r12 !=10) //_LBB301_5
+{
+__label__ = 4;
+}
+else{
+ r12 = r10 >> 2;
+ r13 = heap32[(r12+1)];
+ if(r13 ==10) //_LBB301_6
+{
+ r0 = heap32[(r11)];
+ r0 = r0 >> 2;
+ r0 = heap32[(r0+7)];
+ heap32[(g0)] = r9;
+ __FUNCTION_TABLE__[(r0)>>2](i7);
+ r0 = heap32[(r12)];
+ r0 = r0 >> 2;
+ r0 = heap32[(r0+7)];
+ heap32[(g0)] = r10;
+ __FUNCTION_TABLE__[(r0)>>2](i7);
+ r0 = heap32[(r11+13)];
+ r5 = heap32[(r12+13)];
+ r11 = r5 << 2;
+ r12 = r0 << 2;
+ r3 = (r3 + r12)|0;
+ r4 = (r4 + r11)|0;
+ r3 = r3 >> 2;
+ r4 = r4 >> 2;
+ r5 = (r5 + 2)|0;
+ r0 = (r0 + 2)|0;
+ f0 = heapFloat[(r3+1)];
+ f1 = heapFloat[(r4+1)];
+ f2 = heapFloat[(r3+5)];
+ f3 = heapFloat[(r4+5)];
+ r5 = (r5 % 3)|0;
+ r0 = (r0 % 3)|0;
+ f4 = heapFloat[(r3+9)];
+ f5 = heapFloat[(r4+9)];
+ f6 = f0*f1;
+ f7 = f2*f3;
+ f8 = heapFloat[(r2+13)];
+ f9 = heapFloat[(r8+13)];
+ f10 = heapFloat[(r2+14)];
+ f11 = heapFloat[(r8+14)];
+ f8 = f8-f9;
+ f9 = f10-f11;
+ r3 = (r10 + 28)|0;
+ r4 = r5 << 2;
+ r5 = (r9 + 28)|0;
+ r0 = r0 << 2;
+ f6 = f6+f7;
+ f7 = f4*f5;
+ f10 = heapFloat[(r2+15)];
+ f11 = heapFloat[(r8+15)];
+ f10 = f10-f11;
+ f6 = f6+f7;
+ r1 = heap32[(r1+5)];
+ r4 = (r3 + r4)|0;
+ r3 = (r3 + r11)|0;
+ r0 = (r5 + r0)|0;
+ r5 = (r5 + r12)|0;
+ f7 = f0*f8;
+ f11 = f2*f9;
+ f12 = f1*f8;
+ f13 = f3*f9;
+ r1 = r1 >> 2;
+ r4 = r4 >> 2;
+ r3 = r3 >> 2;
+ r0 = r0 >> 2;
+ r5 = r5 >> 2;
+ f14 = 1;
+ f15 = f6*f6;
+ f7 = f7+f11;
+ f11 = f4*f10;
+ f12 = f12+f13;
+ f13 = f5*f10;
+ f15 = f14-f15;
+ f16 = heapFloat[(r1+280)];
+ f17 = heapFloat[(r4)];
+ f18 = heapFloat[(r3)];
+ f19 = heapFloat[(r0)];
+ f20 = heapFloat[(r5)];
+ f7 = f7+f11;
+ f11 = f12+f13;
+ f12 = 0;
+ if(f15 !=f12) //_LBB301_8
+{
+ f13 = f11*f6;
+ f13 = f7-f13;
+ f13 = f13/f15;
+ f15 = -f20;
+ if(f13 >=f15) //_LBB301_10
+{
+ if(f13 >f20) //_LBB301_12
+{
+ f15 = f20;
+}
+else{
+ f15 = f13;
+}
+}
+}
+else{
+ f15 = 0;
+}
+ f13 = f15*f6;
+ f11 = f13-f11;
+ f13 = -f18;
+ if(f11 >=f13) //_LBB301_19
+{
+ if(f11 >f18) //_LBB301_21
+{
+ f13 = f6*f18;
+ f6 = f13+f7;
+ f15 = -f20;
+ if(f6 >=f15) //_LBB301_23
+{
+ if(f6 >f20) //_LBB301_25
+{
+ f13 = f18;
+ f15 = f20;
+}
+else{
+ f13 = f18;
+ f15 = f6;
+}
+}
+else{
+ f13 = f18;
+}
+}
+else{
+ f13 = f11;
+}
+}
+else{
+ f6 = f6*f13;
+ f6 = f6+f7;
+ f15 = -f20;
+ if(f6 >=f15) //_LBB301_16
+{
+ if(f6 >f20) //_LBB301_18
+{
+ f15 = f20;
+}
+else{
+ f15 = f6;
+}
+}
+}
+ f6 = f0*f15;
+ f7 = f2*f15;
+ f1 = f1*f13;
+ f6 = f8-f6;
+ f3 = f3*f13;
+ f7 = f9-f7;
+ f8 = f4*f15;
+ f6 = f6+f1;
+ f7 = f7+f3;
+ f5 = f5*f13;
+ f8 = f10-f8;
+ f8 = f8+f5;
+ f9 = f6*f6;
+ f10 = f7*f7;
+ f9 = f9+f10;
+ f10 = f8*f8;
+ f9 = f9+f10;
+ heapFloat[(g0)] = f9;
+ sqrtf(i7);
+ f10 = f_g0-f19;
+ f10 = f10-f17;
+if(!(f10 >f16)) //_LBB301_36
+{
+ f11 = 1.4210854715202004e-014;
+ if(f9 >f11) //_LBB301_34
+{
+ heapFloat[(g0)] = f9;
+ f0 = -1;
+ sqrtf(i7);
+ f0 = f0/f_g0;
+ f9 = f6*f0;
+ r0 = sp + -16;
+ f6 = f7*f0;
+ r0 = r0 >> 2;
+ heapFloat[(fp+-4)] = f9;
+ f12 = f8*f0;
+ heapFloat[(r0+1)] = f6;
+ heapFloat[(r0+2)] = f12;
+ heap32[(r0+3)] = 0;
+}
+else{
+ if(f4 <f12) //_LBB301_30
+{
+ f6 = -f4;
+}
+else{
+ f6 = f4;
+}
+ f7 = 0.70710676908493042;
+ if(f6 <=f7) //_LBB301_33
+{
+ f6 = f0*f0;
+ f9 = f2*f2;
+ f6 = f6+f9;
+ heapFloat[(g0)] = f6;
+ sqrtf(i7);
+ f6 = f14/f_g0;
+ f9 = -f2;
+ f9 = f6*f9;
+ r0 = sp + -16;
+ f6 = f0*f6;
+ r0 = r0 >> 2;
+ heapFloat[(fp+-4)] = f9;
+ heapFloat[(r0+1)] = f6;
+ heap32[(r0+2)] = 0;
+}
+else{
+ f0 = f2*f2;
+ f6 = f4*f4;
+ f0 = f0+f6;
+ heapFloat[(g0)] = f0;
+ sqrtf(i7);
+ r0 = sp + -16;
+ f0 = f14/f_g0;
+ f6 = -f4;
+ f6 = f0*f6;
+ r0 = r0 >> 2;
+ heap32[(fp+-4)] = 0;
+ f9 = 0;
+ f12 = f2*f0;
+ heapFloat[(r0+1)] = f6;
+ heapFloat[(r0+2)] = f12;
+}
+}
+ f0 = heapFloat[(r2+13)];
+ f2 = heapFloat[(r2+14)];
+ f4 = heapFloat[(r2+15)];
+ f0 = f0+f1;
+ f1 = f9*f17;
+ r0 = sp + -32;
+ f2 = f2+f3;
+ f3 = f6*f17;
+ f0 = f0+f1;
+ r0 = r0 >> 2;
+ f1 = f4+f5;
+ f4 = f12*f17;
+ f2 = f2+f3;
+ heapFloat[(fp+-8)] = f0;
+ f0 = f1+f4;
+ heapFloat[(r0+1)] = f2;
+ heapFloat[(r0+2)] = f0;
+ heap32[(r0+3)] = 0;
+}
+if(!(f10 >=f16)) //_LBB301_40
+{
+ r0 = sp + -16;
+ r1 = r0 >> 2;
+ f0 = heapFloat[(fp+-4)];
+ f1 = heapFloat[(r1+1)];
+ f2 = heapFloat[(r1+2)];
+ f0 = f0*f0;
+ f1 = f1*f1;
+ f0 = f0+f1;
+ f1 = f2*f2;
+ f0 = f0+f1;
+ f1 = 1.4210854715202004e-014;
+ if(f0 >=f1) //_LBB301_39
+{
+ r1 = heap32[(r7)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+4)];
+ r2 = sp + -32;
+ heap32[(g0)] = r6;
+ heap32[(g0+1)] = r0;
+ heap32[(g0+2)] = r2;
+ heapFloat[(g0+3)] = f10;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+}
+else{
+ r0 = _2E_str4119;
+ r1 = _2E_str5120;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 325;
+ _assert(i7);
+}
+}
+ r0 = heap32[(r7+1)];
+ if(r0 !=0) //_LBB301_42
+{
+ r1 = r0 >> 2;
+ r2 = heap32[(r1+279)];
+ if(r2 ==0) //_LBB301_47
+{
+__label__ = 44;
+}
+else{
+ r1 = heap32[(r1+277)];
+ r2 = heap32[(r7+34)];
+ if(r1 ==r2) //_LBB301_46
+{
+__label__ = 43;
+}
+else{
+ r1 = (r6 + 72)|0;
+ r2 = (r6 + 8)|0;
+__label__ = 42;
+}
+}
+}
+else{
+ r0 = _2E_str59;
+ r1 = _2E_str160;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 101;
+ _assert(i7);
+}
+}
+else{
+__label__ = 4;
+}
+}
+if (__label__ == 4){
+ r3 = sp + -168;
+ r4 = r3 >> 2;
+ heap32[(r4+32)] = 1566444395;
+ heap32[(r4+33)] = 0;
+ r12 = _ZTV17btGjkPairDetector;
+ r13 = heap32[(r1+2)];
+ r14 = heap32[(r1+3)];
+ r15 = sp + -248;
+ r12 = (r12 + 8)|0;
+ heap32[(fp+-62)] = r12;
+ r12 = r15 >> 2;
+ heap32[(r12+1)] = 0;
+ heap32[(r12+2)] = 1065353216;
+ heap32[(r12+3)] = 0;
+ heap32[(r12+4)] = 0;
+ heap32[(r12+5)] = r14;
+ heap32[(r12+6)] = r13;
+ heap32[(r12+7)] = r9;
+ heap32[(r12+8)] = r10;
+ r13 = heap32[(r11+1)];
+ heap32[(r12+9)] = r13;
+ r13 = r10 >> 2;
+ r14 = heap32[(r13+1)];
+ heap32[(r12+10)] = r14;
+ r14 = heap32[(r11)];
+ r14 = r14 >> 2;
+ r14 = heap32[(r14+11)];
+ heap32[(g0)] = r9;
+ __FUNCTION_TABLE__[(r14)>>2](i7);
+ heapFloat[(r12+11)] = f_g0;
+ r14 = heap32[(r13)];
+ r14 = r14 >> 2;
+ r14 = heap32[(r14+11)];
+ heap32[(g0)] = r10;
+ __FUNCTION_TABLE__[(r14)>>2](i7);
+ r14 = 0;
+ heapFloat[(r12+12)] = f_g0;
+ heap8[sp+-196] = r14;
+ heap32[(r12+15)] = -1;
+ heap32[(r12+18)] = 1;
+ heap32[(r12+7)] = r9;
+ heap32[(r12+8)] = r10;
+ r16 = heap32[(r11)];
+ r16 = r16 >> 2;
+ r17 = heapU8[r5+40];
+ r16 = heap32[(r16+11)];
+ heap32[(g0)] = r9;
+ __FUNCTION_TABLE__[(r16)>>2](i7);
+ f0 = f_g0;
+ r16 = heap32[(r13)];
+ r16 = r16 >> 2;
+ r16 = heap32[(r16+11)];
+ heap32[(g0)] = r10;
+ __FUNCTION_TABLE__[(r16)>>2](i7);
+ f0 = f0+f_g0;
+ r16 = heap32[(r1+5)];
+ if(r17 ==0) //_LBB301_49
+{
+ r16 = (r16 + 1120)|0;
+}
+else{
+ r16 = (r16 + 1124)|0;
+}
+ r16 = r16 >> 2;
+ f1 = heapFloat[(r16)];
+ f0 = f0+f1;
+ f0 = f0*f0;
+ r5 = r5 >> 2;
+ heapFloat[(r4+32)] = f0;
+ r16 = heap32[(r5+11)];
+ heap32[(r4+33)] = r16;
+ heap32[(fp+-42)] = heap32[(r8+1)];
+ heap32[(r4+1)] = heap32[(r8+2)];
+ heap32[(r4+2)] = heap32[(r8+3)];
+ heap32[(r4+3)] = heap32[(r8+4)];
+ heap32[(r4+4)] = heap32[(r8+5)];
+ heap32[(r4+5)] = heap32[(r8+6)];
+ heap32[(r4+6)] = heap32[(r8+7)];
+ heap32[(r4+7)] = heap32[(r8+8)];
+ heap32[(r4+8)] = heap32[(r8+9)];
+ heap32[(r4+9)] = heap32[(r8+10)];
+ heap32[(r4+10)] = heap32[(r8+11)];
+ heap32[(r4+11)] = heap32[(r8+12)];
+ heap32[(r4+12)] = heap32[(r8+13)];
+ heap32[(r4+13)] = heap32[(r8+14)];
+ heap32[(r4+14)] = heap32[(r8+15)];
+ heap32[(r4+15)] = heap32[(r8+16)];
+ heap32[(r4+16)] = heap32[(r2+1)];
+ heap32[(r4+17)] = heap32[(r2+2)];
+ heap32[(r4+18)] = heap32[(r2+3)];
+ heap32[(r4+19)] = heap32[(r2+4)];
+ heap32[(r4+20)] = heap32[(r2+5)];
+ heap32[(r4+21)] = heap32[(r2+6)];
+ heap32[(r4+22)] = heap32[(r2+7)];
+ heap32[(r4+23)] = heap32[(r2+8)];
+ heap32[(r4+24)] = heap32[(r2+9)];
+ heap32[(r4+25)] = heap32[(r2+10)];
+ heap32[(r4+26)] = heap32[(r2+11)];
+ heap32[(r4+27)] = heap32[(r2+12)];
+ heap32[(r4+28)] = heap32[(r2+13)];
+ heap32[(r4+29)] = heap32[(r2+14)];
+ heap32[(r4+30)] = heap32[(r2+15)];
+ heap32[(r4+31)] = heap32[(r2+16)];
+ r16 = heap32[(r5+5)];
+ heap32[(g0)] = r15;
+ heap32[(g0+1)] = r3;
+ heap32[(g0+2)] = r6;
+ heap32[(g0+3)] = r16;
+ heap32[(g0+4)] = 0;
+ _ZN17btGjkPairDetector16getClosestPointsERKN36btDiscreteCollisionDetectorInterface17ClosestPointInputERNS0_6ResultEP12btIDebugDrawb(i7);
+ r16 = heap32[(r1+7)];
+_63: do {
+if(!(r16 ==0)) //_LBB301_73
+{
+ r16 = heap32[(r7+1)];
+ r16 = r16 >> 2;
+ r16 = heap32[(r16+279)];
+ r17 = heap32[(r1+8)];
+if(!(r16 >=r17)) //_LBB301_73
+{
+ f0 = heapFloat[(r12+1)];
+ f1 = heapFloat[(r12+2)];
+ f2 = heapFloat[(r12+3)];
+ f0 = f0*f0;
+ f1 = f1*f1;
+ f0 = f0+f1;
+ f1 = f2*f2;
+ f0 = f0+f1;
+ heapFloat[(g0)] = f0;
+ sqrtf(i7);
+ f1 = 1;
+ heapFloat[(fp+-169)] = f1;
+ f2 = heapFloat[(r12+3)];
+ f0 = f1/f_g0;
+ f1 = heapFloat[(r12+2)];
+ f3 = heapFloat[(r12+1)];
+ f2 = f2*f0;
+ heapFloat[(fp+-171)] = f2;
+ f1 = f1*f0;
+ heapFloat[(fp+-170)] = f1;
+ f0 = f3*f0;
+ heapFloat[(fp+-174)] = f0;
+ f0 = 0;
+ heapFloat[(fp+-175)] = f0;
+ if(f2 <f0) //_LBB301_54
+{
+ f0 = f2;
+ f0 = -f0;
+}
+else{
+ f0 = heapFloat[(fp+-171)];
+}
+ f1 = 0.70710676908493042;
+ if(f0 <=f1) //_LBB301_57
+{
+ f0 = heapFloat[(fp+-174)];
+ f1 = f0*f0;
+ f2 = heapFloat[(fp+-170)];
+ f3 = f2*f2;
+ f1 = f1+f3;
+ heapFloat[(g0)] = f1;
+ sqrtf(i7);
+ f3 = heapFloat[(fp+-169)];
+ f1 = f3/f_g0;
+ f2 = -f2;
+ f2 = f1*f2;
+ heapFloat[(fp+-173)] = f2;
+ f0 = f0*f1;
+ heapFloat[(fp+-172)] = f0;
+}
+else{
+ f0 = heapFloat[(fp+-170)];
+ f1 = f0*f0;
+ f2 = heapFloat[(fp+-171)];
+ f3 = f2*f2;
+ f1 = f1+f3;
+ heapFloat[(g0)] = f1;
+ sqrtf(i7);
+ f3 = heapFloat[(fp+-169)];
+ f1 = f3/f_g0;
+ f2 = -f2;
+ f2 = f1*f2;
+ heapFloat[(fp+-172)] = f2;
+ f0 = f0*f1;
+ heapFloat[(fp+-175)] = f0;
+ f0 = 0;
+ heapFloat[(fp+-173)] = f0;
+}
+ r11 = heap32[(r11)];
+ r11 = r11 >> 2;
+ r11 = heap32[(r11+4)];
+ heap32[(g0)] = r9;
+ __FUNCTION_TABLE__[(r11)>>2](i7);
+ f0 = f_g0;
+ heapFloat[(fp+-194)] = f0;
+ r9 = heap32[(r13)];
+ r9 = r9 >> 2;
+ r9 = heap32[(r9+4)];
+ heap32[(g0)] = r10;
+ __FUNCTION_TABLE__[(r9)>>2](i7);
+ f1 = f_g0;
+ heapFloat[(fp+-195)] = f1;
+ r9 = f0 < f1;
+ f2 = 0.019999999552965164;
+ f3 = f0 < f1 ? f0 : f1;
+ r9 = r9 & 1;
+ f2 = f2/f3;
+ if(f0 >=f1) //_LBB301_60
+{
+ f0 = heapFloat[(r4+16)];
+ heapFloat[(fp+-176)] = f0;
+ f0 = heapFloat[(r4+17)];
+ heapFloat[(fp+-177)] = f0;
+ f0 = heapFloat[(r4+18)];
+ heapFloat[(fp+-178)] = f0;
+ f0 = heapFloat[(r4+19)];
+ heapFloat[(fp+-179)] = f0;
+ f0 = heapFloat[(r4+20)];
+ heapFloat[(fp+-180)] = f0;
+ f0 = heapFloat[(r4+21)];
+ heapFloat[(fp+-181)] = f0;
+ f0 = heapFloat[(r4+22)];
+ heapFloat[(fp+-182)] = f0;
+ f0 = heapFloat[(r4+23)];
+ heapFloat[(fp+-183)] = f0;
+ f0 = heapFloat[(r4+24)];
+ heapFloat[(fp+-184)] = f0;
+ f0 = heapFloat[(r4+25)];
+ heapFloat[(fp+-185)] = f0;
+ f0 = heapFloat[(r4+26)];
+ heapFloat[(fp+-186)] = f0;
+ f0 = heapFloat[(r4+27)];
+ heapFloat[(fp+-187)] = f0;
+ f0 = heapFloat[(r4+28)];
+ heapFloat[(fp+-188)] = f0;
+ f0 = heapFloat[(r4+29)];
+ heapFloat[(fp+-189)] = f0;
+ f0 = heapFloat[(r4+30)];
+ heapFloat[(fp+-190)] = f0;
+ f0 = heapFloat[(r4+31)];
+ heapFloat[(fp+-191)] = f0;
+}
+else{
+ f0 = heapFloat[(fp+-42)];
+ heapFloat[(fp+-176)] = f0;
+ f0 = heapFloat[(r4+1)];
+ heapFloat[(fp+-177)] = f0;
+ f0 = heapFloat[(r4+2)];
+ heapFloat[(fp+-178)] = f0;
+ f0 = heapFloat[(r4+3)];
+ heapFloat[(fp+-179)] = f0;
+ f0 = heapFloat[(r4+4)];
+ heapFloat[(fp+-180)] = f0;
+ f0 = heapFloat[(r4+5)];
+ heapFloat[(fp+-181)] = f0;
+ f0 = heapFloat[(r4+6)];
+ heapFloat[(fp+-182)] = f0;
+ f0 = heapFloat[(r4+7)];
+ heapFloat[(fp+-183)] = f0;
+ f0 = heapFloat[(r4+8)];
+ heapFloat[(fp+-184)] = f0;
+ f0 = heapFloat[(r4+9)];
+ heapFloat[(fp+-185)] = f0;
+ f0 = heapFloat[(r4+10)];
+ heapFloat[(fp+-186)] = f0;
+ f0 = heapFloat[(r4+11)];
+ heapFloat[(fp+-187)] = f0;
+ f0 = heapFloat[(r4+12)];
+ heapFloat[(fp+-188)] = f0;
+ f0 = heapFloat[(r4+13)];
+ heapFloat[(fp+-189)] = f0;
+ f0 = heapFloat[(r4+14)];
+ heapFloat[(fp+-190)] = f0;
+ f0 = heapFloat[(r4+15)];
+ heapFloat[(fp+-191)] = f0;
+}
+ f0 = heapFloat[(fp+-173)];
+ f0 = f0*f0;
+ f1 = heapFloat[(fp+-172)];
+ f1 = f1*f1;
+ f3 = 0.5;
+ heapFloat[(fp+-193)] = f3;
+ f4 = heapFloat[(fp+-174)];
+ f4 = f4*f4;
+ f5 = heapFloat[(fp+-170)];
+ f5 = f5*f5;
+ f0 = f0+f1;
+ f1 = heapFloat[(fp+-175)];
+ f1 = f1*f1;
+ f6 = 0.39269909262657166;
+ f7 = 0.19634954631328583;
+ f3 = f2*f3;
+ f4 = f4+f5;
+ f5 = heapFloat[(fp+-171)];
+ f5 = f5*f5;
+ f0 = f0+f1;
+ heapFloat[(fp+-196)] = f0;
+ f0 = f2 > f6 ? f7 : f3;
+ heapFloat[(fp+-197)] = f0;
+ f0 = f4+f5;
+ heapFloat[(fp+-192)] = f0;
+_78: while(true){
+ r10 = heap32[(r1+7)];
+ if(r10 >r14) //_LBB301_62
+{
+ f0 = 1.1920928955078125e-007;
+ f1 = heapFloat[(fp+-196)];
+if(!(f1 <=f0)) //_LBB301_71
+{
+ f0 = f1;
+ heapFloat[(g0)] = f0;
+ sqrtf(i7);
+ f0 = f_g0;
+ f1 = 0;
+ if(f0 !=f1) //_LBB301_65
+{
+ f2 = heapFloat[(fp+-197)];
+ heapFloat[(g0)] = f2;
+ sinf(i7);
+ f3 = f_g0;
+ heapFloat[(g0)] = f2;
+ cosf(i7);
+ f2 = f_g0;
+ r10 = heap32[(r1+7)];
+ f4 = heapFloat[(fp+-192)];
+ heapFloat[(g0)] = f4;
+ sqrtf(i7);
+ f4 = f_g0;
+ if(f4 !=f1) //_LBB301_67
+{
+ f0 = f3/f0;
+ f3 = heapFloat[(fp+-175)];
+ f3 = f3*f0;
+ f5 = heapFloat[(fp+-172)];
+ f5 = f5*f0;
+ f6 = heapFloat[(fp+-173)];
+ f0 = f6*f0;
+ f6 = 6.2831854820251465;
+ f7 = r10; //fitos r10, f7
+ f8 = r14; //fitos r14, f8
+ f6 = f6/f7;
+ f6 = f8*f6;
+ f7 = heapFloat[(fp+-193)];
+ f6 = f6*f7;
+ heapFloat[(g0)] = f6;
+ sinf(i7);
+ heapFloat[(g0)] = f6;
+ f4 = f_g0/f4;
+ f6 = heapFloat[(fp+-171)];
+ f6 = f6*f4;
+ f7 = heapFloat[(fp+-170)];
+ f7 = f7*f4;
+ f8 = heapFloat[(fp+-174)];
+ f4 = f8*f4;
+ cosf(i7);
+ f8 = f_g0;
+ f10 = heapFloat[(fp+-195)];
+ f9 = heapFloat[(fp+-194)];
+ if(f9 >=f10) //_LBB301_69
+{
+ f9 = heapFloat[(r8+1)];
+ heapFloat[(fp+-155)] = f9;
+ heapFloat[(fp+-42)] = f9;
+ f9 = heapFloat[(r8+2)];
+ heapFloat[(fp+-156)] = f9;
+ heapFloat[(r4+1)] = f9;
+ f9 = heapFloat[(r8+3)];
+ heapFloat[(fp+-157)] = f9;
+ heapFloat[(r4+2)] = f9;
+ f9 = heapFloat[(r8+4)];
+ heapFloat[(fp+-163)] = f9;
+ heapFloat[(r4+3)] = f9;
+ f9 = heapFloat[(r8+5)];
+ heapFloat[(fp+-158)] = f9;
+ heapFloat[(r4+4)] = f9;
+ f9 = heapFloat[(r8+6)];
+ heapFloat[(fp+-159)] = f9;
+ heapFloat[(r4+5)] = f9;
+ f9 = heapFloat[(r8+7)];
+ heapFloat[(fp+-160)] = f9;
+ heapFloat[(r4+6)] = f9;
+ f9 = heapFloat[(r8+8)];
+ heapFloat[(fp+-162)] = f9;
+ heapFloat[(r4+7)] = f9;
+ f9 = heapFloat[(r8+9)];
+ heapFloat[(fp+-161)] = f9;
+ f10 = f8*f2;
+ f11 = f0*f4;
+ f12 = f8*f0;
+ f13 = f2*f4;
+ f14 = f8*f5;
+ f15 = f2*f7;
+ heapFloat[(r4+8)] = f9;
+ f9 = f10+f11;
+ f10 = f5*f7;
+ f11 = f8*f3;
+ f2 = f2*f6;
+ f12 = f12-f13;
+ f13 = f3*f7;
+ f14 = f14-f15;
+ f15 = f0*f6;
+ f16 = heapFloat[(r8+10)];
+ heapFloat[(fp+-164)] = f16;
+ f9 = f9+f10;
+ f10 = f3*f6;
+ f2 = f11-f2;
+ f11 = f5*f4;
+ f12 = f12-f13;
+ f5 = f5*f6;
+ f13 = f14-f15;
+ f3 = f3*f4;
+ f9 = f9+f10;
+ f5 = f12+f5;
+ f3 = f13+f3;
+ heapFloat[(r4+9)] = f16;
+ f2 = f2-f11;
+ f0 = f0*f7;
+ f0 = f2+f0;
+ f2 = heapFloat[(r8+11)];
+ heapFloat[(fp+-166)] = f2;
+ f10 = f9*f7;
+ f11 = f3*f8;
+ f12 = f9*f4;
+ f13 = f5*f8;
+ heapFloat[(r4+10)] = f2;
+ f2 = f10+f11;
+ f10 = f0*f4;
+ f11 = f12+f13;
+ f12 = f3*f6;
+ f13 = f9*f6;
+ f14 = f0*f8;
+ f17 = heapFloat[(r8+12)];
+ f8 = f9*f8;
+ f9 = f5*f4;
+ f2 = f2+f10;
+ f10 = f5*f6;
+ f11 = f11+f12;
+ f12 = f0*f7;
+ f13 = f13+f14;
+ f5 = f5*f7;
+ f10 = f2-f10;
+ f2 = f11-f12;
+ heapFloat[(r4+11)] = f17;
+ f8 = f8-f9;
+ f7 = f3*f7;
+ f5 = f13+f5;
+ f3 = f3*f4;
+ f4 = heapFloat[(r8+13)];
+ heapFloat[(fp+-165)] = f4;
+ f3 = f5-f3;
+ f5 = f8-f7;
+ f0 = f0*f6;
+ f6 = f2*f2;
+ f7 = f10*f10;
+ f5 = f5-f0;
+ heapFloat[(r4+12)] = f4;
+ f0 = f6+f7;
+ f4 = f3*f3;
+ f6 = heapFloat[(r8+14)];
+ heapFloat[(fp+-167)] = f6;
+ f0 = f0+f4;
+ f4 = f5*f5;
+ heapFloat[(r4+13)] = f6;
+ f6 = 2;
+ f0 = f0+f4;
+ f0 = f6/f0;
+ f4 = heapFloat[(r8+15)];
+ heapFloat[(fp+-168)] = f4;
+ f6 = f3*f0;
+ f7 = f10*f0;
+ heapFloat[(r4+14)] = f4;
+ f16 = heapFloat[(r8+16)];
+ f4 = f10*f7;
+ f3 = f3*f6;
+ f8 = f4+f3;
+ f9 = f2*f7;
+ f11 = f5*f6;
+ heapFloat[(r4+15)] = f16;
+ f12 = heapFloat[(fp+-169)];
+ f8 = f12-f8;
+ f13 = heapFloat[(r2+1)];
+ f14 = f9-f11;
+ f15 = heapFloat[(r2+5)];
+ f18 = f2*f6;
+ f7 = f5*f7;
+ f19 = f2*f0;
+ f20 = heapFloat[(r2+2)];
+ f21 = heapFloat[(r2+6)];
+ f0 = f13*f8;
+ f22 = f15*f14;
+ f23 = f18+f7;
+ f24 = heapFloat[(r2+9)];
+ f25 = f2*f19;
+ f26 = heapFloat[(r2+3)];
+ f27 = heapFloat[(r2+7)];
+ f28 = heapFloat[(r2+11)];
+ f29 = heapFloat[(r2+10)];
+ f2 = f20*f8;
+ f30 = f21*f14;
+ f0 = f0+f22;
+ f22 = f24*f23;
+ f3 = f25+f3;
+ f0 = f0+f22;
+ f8 = f26*f8;
+ f14 = f27*f14;
+ f2 = f2+f30;
+ f22 = f29*f23;
+ f9 = f9+f11;
+ f11 = f12-f3;
+ f2 = f2+f22;
+ heapFloat[(r4+16)] = f0;
+ f6 = f10*f6;
+ f10 = f5*f19;
+ f3 = f8+f14;
+ f5 = f28*f23;
+ f8 = f6-f10;
+ f3 = f3+f5;
+ heapFloat[(r4+17)] = f2;
+ f5 = f13*f9;
+ f14 = f15*f11;
+ heapFloat[(r4+18)] = f3;
+ f19 = f20*f9;
+ f22 = f21*f11;
+ f5 = f5+f14;
+ f14 = f24*f8;
+ f5 = f5+f14;
+ heap32[(r4+19)] = 0;
+ f9 = f26*f9;
+ f11 = f27*f11;
+ f14 = f19+f22;
+ f19 = f29*f8;
+ f18 = f18-f7;
+ f10 = f6+f10;
+ f4 = f25+f4;
+ f6 = f14+f19;
+ heapFloat[(r4+20)] = f5;
+ f7 = f9+f11;
+ f8 = f28*f8;
+ f4 = f12-f4;
+ f7 = f7+f8;
+ heapFloat[(r4+21)] = f6;
+ f8 = f13*f18;
+ f9 = f15*f10;
+ heapFloat[(r4+22)] = f7;
+ f11 = f20*f18;
+ f12 = f21*f10;
+ f8 = f8+f9;
+ f9 = f24*f4;
+ f9 = f8+f9;
+ heap32[(r4+23)] = 0;
+ f8 = f26*f18;
+ f13 = f27*f10;
+ f10 = f11+f12;
+ f11 = f29*f4;
+ f10 = f10+f11;
+ heapFloat[(r4+24)] = f9;
+ f8 = f8+f13;
+ f4 = f28*f4;
+ f11 = f8+f4;
+ heapFloat[(r4+25)] = f10;
+ heapFloat[(r4+26)] = f11;
+ heap32[(r4+27)] = 0;
+ f12 = heapFloat[(r4+28)];
+ f13 = heapFloat[(r4+29)];
+ f14 = heapFloat[(r4+30)];
+ f15 = heapFloat[(r4+31)];
+ f8 = f1;
+ f4 = f1;
+}
+else{
+ f1 = f8*f2;
+ f9 = f0*f4;
+ f10 = f8*f0;
+ f11 = f2*f4;
+ f12 = f8*f5;
+ f13 = f2*f7;
+ f1 = f1+f9;
+ f9 = f5*f7;
+ f14 = f8*f3;
+ f2 = f2*f6;
+ f10 = f10-f11;
+ f11 = f3*f7;
+ f12 = f12-f13;
+ f13 = f0*f6;
+ f1 = f1+f9;
+ f9 = f3*f6;
+ f2 = f14-f2;
+ f14 = f5*f4;
+ f10 = f10-f11;
+ f5 = f5*f6;
+ f11 = f12-f13;
+ f3 = f3*f4;
+ f1 = f1+f9;
+ f5 = f10+f5;
+ f3 = f11+f3;
+ f2 = f2-f14;
+ f0 = f0*f7;
+ f0 = f2+f0;
+ f2 = f1*f7;
+ f9 = f3*f8;
+ f10 = f1*f4;
+ f11 = f5*f8;
+ f2 = f2+f9;
+ f9 = f0*f4;
+ f10 = f10+f11;
+ f11 = f3*f6;
+ f12 = f1*f6;
+ f13 = f0*f8;
+ f1 = f1*f8;
+ f8 = f5*f4;
+ f2 = f2+f9;
+ f9 = f5*f6;
+ f10 = f10+f11;
+ f11 = f0*f7;
+ f12 = f12+f13;
+ f5 = f5*f7;
+ f2 = f2-f9;
+ f9 = f10-f11;
+ f1 = f1-f8;
+ f7 = f3*f7;
+ f5 = f12+f5;
+ f3 = f3*f4;
+ f3 = f5-f3;
+ f1 = f1-f7;
+ f0 = f0*f6;
+ f4 = f9*f9;
+ f5 = f2*f2;
+ f0 = f1-f0;
+ f1 = f4+f5;
+ f4 = f3*f3;
+ f1 = f1+f4;
+ f4 = f0*f0;
+ f5 = 2;
+ f1 = f1+f4;
+ f1 = f5/f1;
+ f4 = f3*f1;
+ f5 = f2*f1;
+ f6 = f2*f5;
+ f3 = f3*f4;
+ f7 = f6+f3;
+ f8 = f9*f5;
+ f10 = f0*f4;
+ f11 = heapFloat[(fp+-169)];
+ f7 = f11-f7;
+ f12 = heapFloat[(r8+1)];
+ f13 = f8-f10;
+ f14 = heapFloat[(r8+5)];
+ f15 = f9*f4;
+ f5 = f0*f5;
+ f1 = f9*f1;
+ f16 = heapFloat[(r8+2)];
+ f17 = heapFloat[(r8+6)];
+ f18 = f12*f7;
+ f19 = f14*f13;
+ f20 = f15+f5;
+ f21 = heapFloat[(r8+9)];
+ f9 = f9*f1;
+ f22 = heapFloat[(r8+3)];
+ f23 = heapFloat[(r8+7)];
+ f24 = heapFloat[(r8+11)];
+ f25 = heapFloat[(r8+10)];
+ f26 = f16*f7;
+ f27 = f17*f13;
+ f18 = f18+f19;
+ f19 = f21*f20;
+ f3 = f9+f3;
+ f18 = f18+f19;
+ heapFloat[(fp+-155)] = f18;
+ f7 = f22*f7;
+ f13 = f23*f13;
+ f19 = f26+f27;
+ f26 = f25*f20;
+ f8 = f8+f10;
+ f3 = f11-f3;
+ f10 = f19+f26;
+ heapFloat[(fp+-156)] = f10;
+ heapFloat[(fp+-42)] = f18;
+ f2 = f2*f4;
+ f0 = f0*f1;
+ f1 = f7+f13;
+ f4 = f24*f20;
+ f7 = f2-f0;
+ f1 = f1+f4;
+ heapFloat[(fp+-157)] = f1;
+ heapFloat[(r4+1)] = f10;
+ f4 = f12*f8;
+ f10 = f14*f3;
+ heapFloat[(r4+2)] = f1;
+ f1 = f16*f8;
+ f13 = f17*f3;
+ f4 = f4+f10;
+ f10 = f21*f7;
+ f4 = f4+f10;
+ heapFloat[(fp+-158)] = f4;
+ heap32[(r4+3)] = 0;
+ f8 = f22*f8;
+ f3 = f23*f3;
+ f1 = f1+f13;
+ f10 = f25*f7;
+ f5 = f15-f5;
+ f0 = f2+f0;
+ f2 = f9+f6;
+ f1 = f1+f10;
+ heapFloat[(fp+-159)] = f1;
+ heapFloat[(r4+4)] = f4;
+ f3 = f8+f3;
+ f4 = f24*f7;
+ f2 = f11-f2;
+ f3 = f3+f4;
+ heapFloat[(fp+-160)] = f3;
+ heapFloat[(r4+5)] = f1;
+ f1 = f12*f5;
+ f4 = f14*f0;
+ heapFloat[(r4+6)] = f3;
+ f3 = f16*f5;
+ f6 = f17*f0;
+ f1 = f1+f4;
+ f4 = f21*f2;
+ f1 = f1+f4;
+ heapFloat[(fp+-161)] = f1;
+ heap32[(r4+7)] = 0;
+ f4 = f22*f5;
+ f0 = f23*f0;
+ f3 = f3+f6;
+ f5 = f25*f2;
+ f3 = f3+f5;
+ heapFloat[(fp+-164)] = f3;
+ heapFloat[(r4+8)] = f1;
+ f0 = f4+f0;
+ f1 = f24*f2;
+ f0 = f0+f1;
+ heapFloat[(fp+-166)] = f0;
+ heapFloat[(r4+9)] = f3;
+ heapFloat[(r4+10)] = f0;
+ heap32[(r4+11)] = 0;
+ f0 = heapFloat[(r2+1)];
+ heapFloat[(r4+16)] = f0;
+ f2 = heapFloat[(r2+2)];
+ heapFloat[(r4+17)] = f2;
+ f3 = heapFloat[(r2+3)];
+ heapFloat[(r4+18)] = f3;
+ f4 = heapFloat[(r2+4)];
+ heapFloat[(r4+19)] = f4;
+ f5 = heapFloat[(r2+5)];
+ heapFloat[(r4+20)] = f5;
+ f6 = heapFloat[(r2+6)];
+ heapFloat[(r4+21)] = f6;
+ f7 = heapFloat[(r2+7)];
+ heapFloat[(r4+22)] = f7;
+ f8 = heapFloat[(r2+8)];
+ heapFloat[(r4+23)] = f8;
+ f9 = heapFloat[(r2+9)];
+ heapFloat[(r4+24)] = f9;
+ f10 = heapFloat[(r2+10)];
+ heapFloat[(r4+25)] = f10;
+ f11 = heapFloat[(r2+11)];
+ heapFloat[(r4+26)] = f11;
+ f1 = heapFloat[(r2+12)];
+ heapFloat[(r4+27)] = f1;
+ f12 = heapFloat[(r2+13)];
+ heapFloat[(r4+28)] = f12;
+ f13 = heapFloat[(r2+14)];
+ heapFloat[(r4+29)] = f13;
+ f14 = heapFloat[(r2+15)];
+ heapFloat[(r4+30)] = f14;
+ f15 = heapFloat[(r2+16)];
+ heapFloat[(r4+31)] = f15;
+ f16 = heapFloat[(r4+12)];
+ heapFloat[(fp+-165)] = f16;
+ f16 = heapFloat[(r4+13)];
+ heapFloat[(fp+-167)] = f16;
+ f16 = heapFloat[(r4+14)];
+ heapFloat[(fp+-168)] = f16;
+ f16 = heapFloat[(r4+15)];
+ f17 = 0;
+ heapFloat[(fp+-162)] = f17;
+ heapFloat[(fp+-163)] = f17;
+}
+ r10 = _ZTV24btPerturbedContactResult;
+ r11 = sp + -616;
+ r12 = heap32[(r5+5)];
+ r10 = (r10 + 8)|0;
+ r13 = r11 >> 2;
+ heap32[(fp+-154)] = r10;
+ heap32[(r13+40)] = r6;
+ f18 = heapFloat[(fp+-155)];
+ heapFloat[(r13+41)] = f18;
+ f18 = heapFloat[(fp+-156)];
+ heapFloat[(r13+42)] = f18;
+ f18 = heapFloat[(fp+-157)];
+ heapFloat[(r13+43)] = f18;
+ f22 = heapFloat[(fp+-163)];
+ heapFloat[(r13+44)] = f22;
+ f18 = heapFloat[(fp+-158)];
+ heapFloat[(r13+45)] = f18;
+ f18 = heapFloat[(fp+-159)];
+ heapFloat[(r13+46)] = f18;
+ f18 = heapFloat[(fp+-160)];
+ heapFloat[(r13+47)] = f18;
+ f22 = heapFloat[(fp+-162)];
+ heapFloat[(r13+48)] = f22;
+ f18 = heapFloat[(fp+-161)];
+ heapFloat[(r13+49)] = f18;
+ f18 = heapFloat[(fp+-164)];
+ heapFloat[(r13+50)] = f18;
+ f18 = heapFloat[(fp+-166)];
+ heapFloat[(r13+51)] = f18;
+ heapFloat[(r13+52)] = f17;
+ f17 = heapFloat[(fp+-165)];
+ heapFloat[(r13+53)] = f17;
+ f17 = heapFloat[(fp+-167)];
+ heapFloat[(r13+54)] = f17;
+ f17 = heapFloat[(fp+-168)];
+ heapFloat[(r13+55)] = f17;
+ heapFloat[(r13+56)] = f16;
+ heapFloat[(r13+57)] = f0;
+ heapFloat[(r13+58)] = f2;
+ heapFloat[(r13+59)] = f3;
+ heapFloat[(r13+60)] = f4;
+ heapFloat[(r13+61)] = f5;
+ heapFloat[(r13+62)] = f6;
+ heapFloat[(r13+63)] = f7;
+ heapFloat[(r13+64)] = f8;
+ heapFloat[(r13+65)] = f9;
+ heapFloat[(r13+66)] = f10;
+ heapFloat[(r13+67)] = f11;
+ heapFloat[(r13+68)] = f1;
+ heapFloat[(r13+69)] = f12;
+ heapFloat[(r13+70)] = f13;
+ heapFloat[(r13+71)] = f14;
+ heapFloat[(r13+72)] = f15;
+ f0 = heapFloat[(fp+-176)];
+ heapFloat[(r13+73)] = f0;
+ f0 = heapFloat[(fp+-177)];
+ heapFloat[(r13+74)] = f0;
+ f0 = heapFloat[(fp+-178)];
+ heapFloat[(r13+75)] = f0;
+ f0 = heapFloat[(fp+-179)];
+ heapFloat[(r13+76)] = f0;
+ f0 = heapFloat[(fp+-180)];
+ heapFloat[(r13+77)] = f0;
+ f0 = heapFloat[(fp+-181)];
+ heapFloat[(r13+78)] = f0;
+ f0 = heapFloat[(fp+-182)];
+ heapFloat[(r13+79)] = f0;
+ f0 = heapFloat[(fp+-183)];
+ heapFloat[(r13+80)] = f0;
+ f0 = heapFloat[(fp+-184)];
+ heapFloat[(r13+81)] = f0;
+ f0 = heapFloat[(fp+-185)];
+ heapFloat[(r13+82)] = f0;
+ f0 = heapFloat[(fp+-186)];
+ heapFloat[(r13+83)] = f0;
+ f0 = heapFloat[(fp+-187)];
+ heapFloat[(r13+84)] = f0;
+ f0 = heapFloat[(fp+-188)];
+ heapFloat[(r13+85)] = f0;
+ f0 = heapFloat[(fp+-189)];
+ heapFloat[(r13+86)] = f0;
+ f0 = heapFloat[(fp+-190)];
+ heapFloat[(r13+87)] = f0;
+ f0 = heapFloat[(fp+-191)];
+ heapFloat[(r13+88)] = f0;
+ heap8[sp+-260] = r9;
+ heap32[(r13+90)] = r12;
+ heap32[(g0)] = r15;
+ heap32[(g0+1)] = r3;
+ heap32[(g0+2)] = r11;
+ heap32[(g0+3)] = r12;
+ heap32[(g0+4)] = 0;
+ _ZN17btGjkPairDetector16getClosestPointsERKN36btDiscreteCollisionDetectorInterface17ClosestPointInputERNS0_6ResultEP12btIDebugDrawb(i7);
+}
+else{
+break _78;
+}
+}
+else{
+break _78;
+}
+}
+ r14 = (r14 + 1)|0;
+}
+else{
+break _63;
+}
+}
+ r0 = _2E_str115;
+ r1 = _2E_str685;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 61;
+ _assert(i7);
+}
+}
+} while(0);
+ r0 = heapU8[r0+16];
+ if(r0 ==0) //_LBB301_47
+{
+__label__ = 44;
+}
+else{
+ r0 = heap32[(r7+1)];
+ if(r0 !=0) //_LBB301_76
+{
+ r1 = r0 >> 2;
+ r2 = heap32[(r1+279)];
+ if(r2 ==0) //_LBB301_47
+{
+__label__ = 44;
+}
+else{
+ r1 = heap32[(r1+277)];
+ r2 = heap32[(r7+34)];
+ if(r1 ==r2) //_LBB301_79
+{
+__label__ = 43;
+}
+else{
+ r1 = (r6 + 72)|0;
+ r6 = (r6 + 8)|0;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = r6;
+ _ZN20btPersistentManifold20refreshContactPointsERK11btTransformS2_(i7);
+ return;
+}
+}
+}
+else{
+ r0 = _2E_str59;
+ r6 = _2E_str160;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r6;
+ heap32[(g0+2)] = 101;
+ _assert(i7);
+}
+}
+}
+switch(__label__ ){//multiple entries
+case 44:
+ return;
+break;
+case 43:
+ r1 = (r6 + 8)|0;
+ r2 = (r6 + 72)|0;
+break;
+}
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = r2;
+ _ZN20btPersistentManifold20refreshContactPointsERK11btTransformS2_(i7);
+ return;
+}
+
+function _ZN23btConvexConvexAlgorithmD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV23btConvexConvexAlgorithm;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ r1 = heapU8[r0+16];
+if(!(r1 ==0)) //_LBB302_3
+{
+ r1 = heap32[(r2+5)];
+if(!(r1 ==0)) //_LBB302_3
+{
+ r3 = heap32[(r2+1)];
+ r4 = r3 >> 2;
+ r4 = heap32[(r4)];
+ r4 = r4 >> 2;
+ r4 = heap32[(r4+4)];
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r1;
+ __FUNCTION_TABLE__[(r4)>>2](i7);
+}
+}
+ r1 = _ZTV30btActivatingCollisionAlgorithm;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZN23btConvexConvexAlgorithmD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV23btConvexConvexAlgorithm;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ r0 = heapU8[r0+16];
+if(!(r0 ==0)) //_LBB303_3
+{
+ r0 = heap32[(r2+5)];
+if(!(r0 ==0)) //_LBB303_3
+{
+ r1 = heap32[(r2+1)];
+ r3 = r1 >> 2;
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3+4)];
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r0;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+}
+}
+ r0 = _ZTV30btActivatingCollisionAlgorithm;
+ r0 = (r0 + 8)|0;
+ heap32[(r2)] = r0;
+ return;
+}
+
+function _ZN31btConvexPlaneCollisionAlgorithm21calculateTimeOfImpactEP17btCollisionObjectS1_RK16btDispatcherInfoP16btManifoldResult(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var f0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ f0 = 1;
+ f_g0 = f0;
+ return;
+}
+
+function _ZN31btConvexPlaneCollisionAlgorithm22getAllContactManifoldsER20btAlignedObjectArrayIP20btPersistentManifoldE(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ r2 = heap32[(r1+3)];
+if(!(r2 ==0)) //_LBB305_23
+{
+ r0 = heapU8[r0+8];
+if(!(r0 ==0)) //_LBB305_23
+{
+ r0 = heap32[(fp+1)];
+ r3 = r0 >> 2;
+ r4 = heap32[(r3+2)];
+ r5 = heap32[(r3+1)];
+ if(r4 ==r5) //_LBB305_4
+{
+ r6 = 1;
+ r7 = r5 << 1;
+ r7 = r5 == 0 ? r6 : r7;
+if(!(r4 >=r7)) //_LBB305_3
+{
+ if(r7 !=0) //_LBB305_7
+{
+ r2 = gNumAlignedAllocs;
+ r2 = r2 >> 2;
+ r4 = heap32[(r2)];
+ r8 = r7 << 2;
+ r4 = (r4 + 1)|0;
+ r8 = r8 | 3;
+ heap32[(r2)] = r4;
+ r2 = (r8 + 16)|0;
+ heap32[(g0)] = r2;
+ malloc(i7);
+ r2 = r_g0;
+ if(r2 !=0) //_LBB305_9
+{
+ r4 = 0;
+ r8 = (r2 + 4)|0;
+ r4 = (r4 - r8)|0;
+ r4 = r4 & 15;
+ r4 = (r2 + r4)|0;
+ r8 = (r4 + 4)|0;
+ r4 = r4 >> 2;
+ heap32[(r4)] = r2;
+ r2 = r8;
+}
+}
+else{
+ r2 = 0;
+}
+ r4 = (r0 + 12)|0;
+ if(r5 <1) //_LBB305_12
+{
+ r8 = r4 >> 2;
+ r9 = heap32[(r8)];
+}
+else{
+ r8 = 0;
+_15: while(true){
+ r9 = r4 >> 2;
+ r9 = heap32[(r9)];
+ r10 = r8 << 2;
+ r11 = (r9 + r10)|0;
+ r11 = r11 >> 2;
+ r10 = (r2 + r10)|0;
+ r11 = heap32[(r11)];
+ r8 = (r8 + 1)|0;
+ r10 = r10 >> 2;
+ heap32[(r10)] = r11;
+if(!(r5 !=r8)) //_LBB305_13
+{
+break _15;
+}
+}
+ r4 = (r0 + 12)|0;
+}
+ if(r9 !=0) //_LBB305_17
+{
+ r8 = heapU8[r0+16];
+ if(r8 !=0) //_LBB305_19
+{
+ r5 = gNumAlignedFree;
+ r5 = r5 >> 2;
+ r8 = heap32[(r5)];
+ r8 = (r8 + 1)|0;
+ r9 = r9 >> 2;
+ heap32[(r5)] = r8;
+ r5 = heap32[(r9+-1)];
+ heap32[(g0)] = r5;
+ free(i7);
+ r5 = heap32[(r3+1)];
+}
+ r8 = r4 >> 2;
+ heap32[(r8)] = 0;
+}
+ r4 = r4 >> 2;
+ heap8[r0+16] = r6;
+ heap32[(r4)] = r2;
+ heap32[(r3+2)] = r7;
+ r2 = heap32[(r1+3)];
+}
+}
+ r0 = r5 << 2;
+ r1 = heap32[(r3+3)];
+ r0 = (r1 + r0)|0;
+ r0 = r0 >> 2;
+ heap32[(r0)] = r2;
+ r0 = heap32[(r3+1)];
+ r0 = (r0 + 1)|0;
+ heap32[(r3+1)] = r0;
+}
+}
+ return;
+}
+
+function _ZN31btConvexPlaneCollisionAlgorithm20collideSingleContactERK12btQuaternionP17btCollisionObjectS4_RK16btDispatcherInfoP16btManifoldResult(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+ var f10;
+ var f11;
+ var f12;
+ var f13;
+ var f14;
+ var f15;
+ var f16;
+ var f17;
+ var f18;
+ var f19;
+ var f20;
+ var f21;
+ var f22;
+ var f23;
+ var f24;
+ var f25;
+ var f26;
+ var f27;
+ var f28;
+ var f29;
+ var f30;
+var __label__ = 0;
+ i7 = sp + -136;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ r0 = r0 >> 2;
+ f0 = heapFloat[(r0)];
+ f1 = heapFloat[(r0+1)];
+ f2 = heapFloat[(r0+2)];
+ f3 = f0*f0;
+ f4 = f1*f1;
+ f5 = heapFloat[(r0+3)];
+ f3 = f3+f4;
+ f4 = f2*f2;
+ f3 = f3+f4;
+ f4 = f5*f5;
+ f6 = 2;
+ f3 = f3+f4;
+ f3 = f6/f3;
+ r0 = heap32[(fp)];
+ f4 = f2*f3;
+ f6 = f1*f3;
+ r1 = heapU8[r0+16];
+ r2 = heap32[(fp+3)];
+ r3 = heap32[(fp+2)];
+ f3 = f0*f3;
+ r4 = r1 == 0 ? r3 : r2;
+ f7 = f1*f6;
+ f2 = f2*f4;
+ r4 = r4 >> 2;
+ f8 = f0*f3;
+ f9 = 1;
+ f10 = f7+f2;
+ f11 = f0*f6;
+ f12 = f5*f4;
+ f2 = f8+f2;
+ f10 = f9-f10;
+ f13 = heapFloat[(r4+1)];
+ heapFloat[(fp+-17)] = f13;
+ f13 = heapFloat[(r4+5)];
+ heapFloat[(fp+-18)] = f13;
+ f14 = f11+f12;
+ f13 = heapFloat[(r4+2)];
+ heapFloat[(fp+-19)] = f13;
+ f13 = heapFloat[(r4+6)];
+ heapFloat[(fp+-20)] = f13;
+ f0 = f0*f4;
+ f6 = f5*f6;
+ f11 = f11-f12;
+ f2 = f9-f2;
+ f12 = heapFloat[(r4+9)];
+ heapFloat[(fp+-24)] = f12;
+ f15 = heapFloat[(r4+10)];
+ heapFloat[(fp+-25)] = f15;
+ r1 = r1 == 0 ? r2 : r3;
+ f1 = f1*f4;
+ f3 = f5*f3;
+ f13 = heapFloat[(fp+-17)];
+ f4 = f10*f13;
+ f13 = heapFloat[(fp+-19)];
+ f5 = f14*f13;
+ f13 = heapFloat[(fp+-18)];
+ f16 = f10*f13;
+ f13 = heapFloat[(fp+-20)];
+ f17 = f14*f13;
+ f18 = f0-f6;
+ f19 = heapFloat[(r4+3)];
+ heapFloat[(fp+-26)] = f19;
+ f20 = heapFloat[(r4+7)];
+ heapFloat[(fp+-27)] = f20;
+ r1 = r1 >> 2;
+ f0 = f0+f6;
+ f6 = f1-f3;
+ f1 = f1+f3;
+ f3 = heapFloat[(r4+11)];
+ heapFloat[(fp+-21)] = f3;
+ f7 = f8+f7;
+ f13 = heapFloat[(fp+-17)];
+ f8 = f11*f13;
+ f13 = heapFloat[(fp+-19)];
+ f21 = f2*f13;
+ f13 = heapFloat[(fp+-18)];
+ f22 = f11*f13;
+ f13 = heapFloat[(fp+-20)];
+ f23 = f2*f13;
+ f4 = f4+f5;
+ f5 = f18*f19;
+ f16 = f16+f17;
+ f17 = f18*f20;
+ f10 = f10*f12;
+ f14 = f14*f15;
+ f7 = f9-f7;
+ f9 = heapFloat[(r1+2)];
+ f24 = heapFloat[(r1+6)];
+ f25 = heapFloat[(r1+1)];
+ f26 = heapFloat[(r1+5)];
+ f4 = f4+f5;
+ f5 = f16+f17;
+ r2 = heap32[(r1+48)];
+ f13 = heapFloat[(fp+-17)];
+ f16 = f0*f13;
+ f13 = heapFloat[(fp+-19)];
+ f17 = f6*f13;
+ f13 = heapFloat[(fp+-18)];
+ f27 = f0*f13;
+ f13 = heapFloat[(fp+-20)];
+ f28 = f6*f13;
+ f8 = f8+f21;
+ f21 = f1*f19;
+ f22 = f22+f23;
+ f23 = f1*f20;
+ f11 = f11*f12;
+ f2 = f2*f15;
+ f10 = f10+f14;
+ f14 = f18*f3;
+ f18 = heapFloat[(r1+3)];
+ f29 = heapFloat[(r1+7)];
+ f8 = f8+f21;
+ f21 = f22+f23;
+ f22 = heapFloat[(r1+10)];
+ f23 = heapFloat[(r1+9)];
+ r2 = r2 >> 2;
+ f10 = f10+f14;
+ r3 = heap32[(r4+48)];
+ f14 = f16+f17;
+ f16 = f7*f19;
+ f17 = f27+f28;
+ f27 = f7*f20;
+ f0 = f0*f12;
+ f6 = f6*f15;
+ f2 = f11+f2;
+ f1 = f1*f3;
+ f11 = f25*f4;
+ f28 = f26*f5;
+ f30 = f9*f4;
+ f3 = f24*f5;
+ f12 = heapFloat[(r1+11)];
+ f14 = f14+f16;
+ f16 = f17+f27;
+ f1 = f2+f1;
+ r5 = r3 >> 2;
+ f2 = heapFloat[(r2+12)];
+ f0 = f0+f6;
+ f6 = heapFloat[(fp+-21)];
+ f7 = f7*f6;
+ f17 = f25*f8;
+ f27 = f26*f21;
+ f6 = f9*f8;
+ f13 = f24*f21;
+ f11 = f11+f28;
+ f28 = f23*f10;
+ f3 = f30+f3;
+ f30 = f22*f10;
+ f4 = f18*f4;
+ f5 = f29*f5;
+ f0 = f0+f7;
+ r5 = heap32[(r5)];
+ f7 = f25*f14;
+ f15 = f26*f16;
+ f19 = f9*f14;
+ f20 = f24*f16;
+ f17 = f17+f27;
+ f27 = f23*f1;
+ f6 = f6+f13;
+ f13 = f22*f1;
+ f8 = f18*f8;
+ f21 = f29*f21;
+ f11 = f11+f28;
+ f2 = -f2;
+ f3 = f3+f30;
+ f28 = heapFloat[(r2+13)];
+ f4 = f4+f5;
+ f5 = f12*f10;
+ r5 = r5 >> 2;
+ f10 = f17+f27;
+ f6 = f6+f13;
+ f7 = f7+f15;
+ f13 = f23*f0;
+ f15 = f19+f20;
+ f17 = f22*f0;
+ f14 = f18*f14;
+ f16 = f29*f16;
+ f8 = f8+f21;
+ f1 = f12*f1;
+ f11 = f11*f2;
+ f3 = f3*f28;
+ f4 = f4+f5;
+ f5 = heapFloat[(r2+14)];
+ f19 = heapFloat[(r4+13)];
+ heapFloat[(fp+-22)] = f19;
+ f19 = heapFloat[(r4+14)];
+ heapFloat[(fp+-23)] = f19;
+ f20 = heapFloat[(r4+15)];
+ heapFloat[(fp+-28)] = f20;
+ f21 = heapFloat[(r1+14)];
+ f27 = heapFloat[(r1+15)];
+ heapFloat[(fp+-29)] = f27;
+ f7 = f7+f13;
+ f13 = f15+f17;
+ f1 = f8+f1;
+ f8 = heapFloat[(r1+13)];
+ r4 = heap32[(r5+15)];
+ f14 = f14+f16;
+ f0 = f12*f0;
+ f10 = f10*f2;
+ f6 = f6*f28;
+ f3 = f11-f3;
+ f4 = f4*f5;
+ r5 = sp + -16;
+ f0 = f14+f0;
+ f2 = f7*f2;
+ f7 = f13*f28;
+ f6 = f10-f6;
+ f1 = f1*f5;
+ f3 = f3-f4;
+ r6 = r5 >> 2;
+ f2 = f2-f7;
+ f0 = f0*f5;
+ f1 = f6-f1;
+ heapFloat[(fp+-4)] = f3;
+ f0 = f2-f0;
+ heapFloat[(r6+1)] = f1;
+ heapFloat[(r6+2)] = f0;
+ heap32[(r6+3)] = 0;
+ r6 = sp + -32;
+ heap32[(g0)] = r6;
+ heap32[(g0+1)] = r3;
+ heap32[(g0+2)] = r5;
+ f13 = heapFloat[(fp+-17)];
+ f0 = f13*f9;
+ f13 = heapFloat[(fp+-18)];
+ f1 = f13*f24;
+ f13 = heapFloat[(fp+-19)];
+ f2 = f13*f9;
+ f13 = heapFloat[(fp+-20)];
+ f3 = f13*f24;
+ f13 = heapFloat[(fp+-17)];
+ f4 = f13*f25;
+ f13 = heapFloat[(fp+-18)];
+ f5 = f13*f26;
+ f13 = heapFloat[(fp+-19)];
+ f6 = f13*f25;
+ f13 = heapFloat[(fp+-20)];
+ f7 = f13*f26;
+ __FUNCTION_TABLE__[(r4)>>2](i7);
+ f8 = -f8;
+ r3 = r6 >> 2;
+ f13 = heapFloat[(fp+-17)];
+ f10 = f13*f18;
+ f13 = heapFloat[(fp+-18)];
+ f11 = f13*f29;
+ f13 = heapFloat[(fp+-19)];
+ f13 = f13*f18;
+ f14 = heapFloat[(fp+-20)];
+ f14 = f14*f29;
+ f0 = f0+f1;
+ f1 = heapFloat[(fp+-24)];
+ f15 = f1*f22;
+ f2 = f2+f3;
+ f3 = heapFloat[(fp+-25)];
+ f16 = f3*f22;
+ f19 = heapFloat[(fp+-26)];
+ f17 = f19*f9;
+ f20 = heapFloat[(fp+-27)];
+ f28 = f20*f24;
+ f4 = f4+f5;
+ f5 = f1*f23;
+ f6 = f6+f7;
+ f7 = f3*f23;
+ f30 = f19*f25;
+ f1 = f20*f26;
+ f10 = f10+f11;
+ f11 = heapFloat[(fp+-24)];
+ f11 = f11*f12;
+ f13 = f13+f14;
+ f3 = f3*f12;
+ f14 = f19*f18;
+ f19 = f20*f29;
+ f0 = f0+f15;
+ f15 = heapFloat[(fp+-8)];
+ f4 = f4+f5;
+ f2 = f2+f16;
+ f5 = heapFloat[(r3+1)];
+ f6 = f6+f7;
+ f7 = f17+f28;
+ f16 = heapFloat[(fp+-21)];
+ f17 = f16*f22;
+ f20 = heapFloat[(fp+-22)];
+ f28 = f9*f20;
+ f16 = heapFloat[(fp+-23)];
+ f16 = f24*f16;
+ f9 = f9*f8;
+ f24 = f24*f21;
+ f1 = f30+f1;
+ f30 = heapFloat[(fp+-21)];
+ f20 = f30*f23;
+ f27 = heapFloat[(fp+-22)];
+ f27 = f25*f27;
+ f30 = heapFloat[(fp+-23)];
+ f30 = f26*f30;
+ f25 = f25*f8;
+ f26 = f26*f21;
+ f10 = f10+f11;
+ f3 = f13+f3;
+ f11 = f14+f19;
+ f13 = heapFloat[(fp+-21)];
+ f13 = f13*f12;
+ f14 = heapFloat[(fp+-22)];
+ f14 = f18*f14;
+ f19 = heapFloat[(fp+-23)];
+ f19 = f29*f19;
+ f8 = f18*f8;
+ f18 = f29*f21;
+ f0 = f0*f15;
+ f2 = f2*f5;
+ f7 = f7+f17;
+ f17 = heapFloat[(r3+2)];
+ f1 = f1+f20;
+ f16 = f28+f16;
+ f20 = heapFloat[(fp+-28)];
+ f21 = f22*f20;
+ f9 = f9-f24;
+ f24 = heapFloat[(fp+-29)];
+ f22 = f22*f24;
+ f4 = f4*f15;
+ f6 = f6*f5;
+ f27 = f27+f30;
+ f28 = f23*f20;
+ f25 = f25-f26;
+ f23 = f23*f24;
+ f11 = f11+f13;
+ f10 = f10*f15;
+ f3 = f3*f5;
+ f5 = f14+f19;
+ f13 = f12*f20;
+ f8 = f8-f18;
+ f12 = f12*f24;
+ f0 = f0+f2;
+ f2 = f7*f17;
+ f7 = f16+f21;
+ f9 = f9-f22;
+ f4 = f4+f6;
+ f1 = f1*f17;
+ f6 = f27+f28;
+ f14 = f25-f23;
+ f3 = f10+f3;
+ f10 = f11*f17;
+ f5 = f5+f13;
+ f8 = f8-f12;
+ f0 = f0+f2;
+ f2 = f7+f9;
+ f1 = f4+f1;
+ f4 = f6+f14;
+ f3 = f3+f10;
+ f5 = f5+f8;
+ f0 = f0+f2;
+ f2 = heapFloat[(r2+13)];
+ f1 = f1+f4;
+ f4 = heapFloat[(r2+12)];
+ f6 = f4*f1;
+ f7 = f2*f0;
+ f3 = f3+f5;
+ f5 = heapFloat[(r2+14)];
+ r0 = r0 >> 2;
+ f6 = f6+f7;
+ f7 = f5*f3;
+ r0 = heap32[(r0+3)];
+ f6 = f6+f7;
+ f7 = heapFloat[(r2+16)];
+ f6 = f6-f7;
+ r3 = r0 >> 2;
+ r4 = heap32[(fp+4)];
+ f7 = heapFloat[(r1+9)];
+ f8 = heapFloat[(r1+10)];
+ f9 = heapFloat[(r1+11)];
+ f10 = heapFloat[(r1+15)];
+ f11 = heapFloat[(r1+5)];
+ f12 = heapFloat[(r1+6)];
+ f13 = heapFloat[(r1+7)];
+ f14 = heapFloat[(r1+14)];
+ f15 = heapFloat[(r1+1)];
+ f16 = heapFloat[(r1+2)];
+ f17 = heapFloat[(r1+3)];
+ f18 = heapFloat[(r1+13)];
+ f19 = heapFloat[(r3+280)];
+ r3 = r4 >> 2;
+ heap32[(r3+1)] = r0;
+if(!(f19 <=f6)) //_LBB306_2
+{
+ f5 = f5*f6;
+ f2 = f2*f6;
+ f4 = f4*f6;
+ f3 = f3-f5;
+ f0 = f0-f2;
+ f1 = f1-f4;
+ f2 = heapFloat[(r2+12)];
+ f4 = heapFloat[(r1+1)];
+ f5 = heapFloat[(r2+13)];
+ f19 = heapFloat[(r1+2)];
+ f20 = heapFloat[(r1+5)];
+ f21 = heapFloat[(r1+6)];
+ f4 = f4*f2;
+ f19 = f19*f5;
+ f22 = heapFloat[(r2+14)];
+ f23 = heapFloat[(r1+3)];
+ f24 = heapFloat[(r1+9)];
+ f25 = heapFloat[(r1+10)];
+ f26 = heapFloat[(r1+11)];
+ f27 = heapFloat[(r1+7)];
+ f20 = f20*f2;
+ f21 = f21*f5;
+ f4 = f4+f19;
+ f19 = f23*f22;
+ r0 = sp + -48;
+ f2 = f24*f2;
+ f5 = f25*f5;
+ f20 = f20+f21;
+ f21 = f27*f22;
+ f4 = f4+f19;
+ f15 = f15*f1;
+ f16 = f16*f0;
+ r1 = r0 >> 2;
+ f2 = f2+f5;
+ f5 = f26*f22;
+ f19 = f20+f21;
+ heapFloat[(fp+-12)] = f4;
+ f4 = f11*f1;
+ f11 = f12*f0;
+ f12 = f15+f16;
+ f15 = f17*f3;
+ f2 = f2+f5;
+ heapFloat[(r1+1)] = f19;
+ heapFloat[(r1+2)] = f2;
+ f1 = f7*f1;
+ f0 = f8*f0;
+ f2 = f4+f11;
+ f4 = f13*f3;
+ f5 = f12+f15;
+ r2 = sp + -64;
+ f0 = f1+f0;
+ f1 = f9*f3;
+ f2 = f2+f4;
+ f3 = f5+f18;
+ heap32[(r1+3)] = 0;
+ r1 = r2 >> 2;
+ f0 = f0+f1;
+ f1 = f2+f14;
+ heapFloat[(fp+-16)] = f3;
+ f0 = f0+f10;
+ heapFloat[(r1+1)] = f1;
+ heapFloat[(r1+2)] = f0;
+ heap32[(r1+3)] = 0;
+ r1 = heap32[(r3)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+4)];
+ heap32[(g0)] = r4;
+ heap32[(g0+1)] = r0;
+ heap32[(g0+2)] = r2;
+ heapFloat[(g0+3)] = f6;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+}
+ return;
+}
+
+function _ZN31btConvexPlaneCollisionAlgorithm16processCollisionEP17btCollisionObjectS1_RK16btDispatcherInfoP16btManifoldResult(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+ var f10;
+ var f11;
+ var f12;
+ var f13;
+ var f14;
+ var f15;
+ var f16;
+ var f17;
+ var f18;
+var __label__ = 0;
+ i7 = sp + -56;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ r2 = heap32[(r1+3)];
+if(!(r2 ==0)) //_LBB307_23
+{
+ r2 = heap32[(fp+1)];
+ r3 = heap32[(fp+2)];
+ r4 = heap32[(fp+4)];
+ r5 = heapU8[r0+16];
+ r6 = r5 == 0 ? r2 : r3;
+ r5 = r5 == 0 ? r3 : r2;
+ r6 = r6 >> 2;
+ r5 = r5 >> 2;
+ r6 = heap32[(r6+48)];
+ r5 = heap32[(r5+48)];
+ r7 = sp + -32;
+ r8 = r7 >> 2;
+ heap32[(fp+-8)] = 0;
+ heap32[(r8+1)] = 0;
+ heap32[(r8+2)] = 0;
+ heap32[(r8+3)] = 1065353216;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r7;
+ heap32[(g0+2)] = r2;
+ heap32[(g0+3)] = r3;
+ heap32[(g0+4)] = r4;
+ r7 = r4 >> 2;
+ _ZN31btConvexPlaneCollisionAlgorithm20collideSingleContactERK12btQuaternionP17btCollisionObjectS4_RK16btDispatcherInfoP16btManifoldResult(i7);
+ r8 = heap32[(r7+1)];
+ r8 = r8 >> 2;
+ r8 = heap32[(r8+279)];
+ r9 = heap32[(r1+6)];
+_3: do {
+if(!(r8 >=r9)) //_LBB307_15
+{
+ r5 = r5 >> 2;
+ f0 = heapFloat[(r5+14)];
+ f1 = 0;
+ if(f0 <f1) //_LBB307_4
+{
+ f2 = -f0;
+}
+else{
+ f2 = f0;
+}
+ f3 = 0.70710676908493042;
+ if(f2 <=f3) //_LBB307_7
+{
+ f0 = heapFloat[(r5+12)];
+ f2 = heapFloat[(r5+13)];
+ f0 = f0*f0;
+ f2 = f2*f2;
+ f0 = f0+f2;
+ heapFloat[(g0)] = f0;
+ sqrtf(i7);
+ f2 = heapFloat[(r5+13)];
+ f3 = 1;
+ f2 = -f2;
+ f0 = f3/f_g0;
+ f4 = heapFloat[(r5+12)];
+ f3 = f0*f2;
+ f2 = f4*f0;
+ f0 = f1;
+}
+else{
+ f2 = heapFloat[(r5+13)];
+ f2 = f2*f2;
+ f0 = f0*f0;
+ f0 = f2+f0;
+ heapFloat[(g0)] = f0;
+ sqrtf(i7);
+ f2 = heapFloat[(r5+14)];
+ f3 = 1;
+ f2 = -f2;
+ f0 = f3/f_g0;
+ f3 = heapFloat[(r5+13)];
+ f2 = f0*f2;
+ f0 = f3*f0;
+ f3 = 0;
+}
+ r8 = r6 >> 2;
+ r8 = heap32[(r8)];
+ r8 = r8 >> 2;
+ r8 = heap32[(r8+4)];
+ heap32[(g0)] = r6;
+ f4 = f3*f3;
+ f5 = f2*f2;
+ __FUNCTION_TABLE__[(r8)>>2](i7);
+ f6 = f_g0;
+ f4 = f4+f5;
+ f5 = f0*f0;
+ f4 = f4+f5;
+ heapFloat[(g0)] = f4;
+ sqrtf(i7);
+ f4 = f_g0;
+ if(f4 !=f1) //_LBB307_10
+{
+ f1 = 0.019999999552965164;
+ f1 = f1/f6;
+ f5 = 0.5;
+ f6 = 0.39269909262657166;
+ f7 = 0.19634954631328583;
+ f8 = f1*f5;
+ f1 = f1 > f6 ? f7 : f8;
+ heapFloat[(g0)] = f1;
+ sinf(i7);
+ heapFloat[(g0)] = f1;
+ f1 = f_g0/f4;
+ f0 = f0*f1;
+ f2 = f2*f1;
+ f1 = f3*f1;
+ r6 = 0;
+ cosf(i7);
+ f3 = f_g0;
+_15: while(true){
+ r8 = heap32[(r1+5)];
+ if(r8 >r6) //_LBB307_11
+{
+ f4 = heapFloat[(r5+12)];
+ f6 = heapFloat[(r5+13)];
+ f7 = heapFloat[(r5+14)];
+ f4 = f4*f4;
+ f6 = f6*f6;
+ f4 = f4+f6;
+ f6 = f7*f7;
+ f4 = f4+f6;
+ heapFloat[(g0)] = f4;
+ sqrtf(i7);
+ f4 = f_g0;
+ f6 = 0;
+ if(f4 !=f6) //_LBB307_13
+{
+ f6 = 6.2831854820251465;
+ f7 = r8; //fitos r8, f7
+ f8 = r6; //fitos r6, f8
+ f6 = f6/f7;
+ f6 = f8*f6;
+ f6 = f6*f5;
+ heapFloat[(g0)] = f6;
+ sinf(i7);
+ f7 = f_g0;
+ heapFloat[(g0)] = f6;
+ cosf(i7);
+ f4 = f7/f4;
+ f7 = heapFloat[(r5+12)];
+ f7 = f7*f4;
+ f8 = heapFloat[(r5+13)];
+ f8 = f8*f4;
+ f9 = heapFloat[(r5+14)];
+ f10 = f_g0*f3;
+ f11 = f1*f7;
+ f12 = f_g0*f1;
+ f13 = f3*f7;
+ f4 = f9*f4;
+ f9 = f10+f11;
+ f10 = f2*f8;
+ f11 = f12-f13;
+ f12 = f0*f8;
+ f13 = f_g0*f2;
+ f14 = f3*f8;
+ f9 = f9+f10;
+ f10 = f0*f4;
+ f11 = f11-f12;
+ f12 = f2*f4;
+ f13 = f13-f14;
+ f14 = f1*f4;
+ f15 = f_g0*f0;
+ f16 = f3*f4;
+ f9 = f9+f10;
+ f10 = f11+f12;
+ f11 = f13-f14;
+ f12 = f0*f7;
+ f13 = f15-f16;
+ f14 = f2*f7;
+ f11 = f11+f12;
+ f12 = f9*f7;
+ f15 = f10*f_g0;
+ f13 = f13-f14;
+ f14 = f1*f8;
+ f13 = f13+f14;
+ f14 = f9*f8;
+ f16 = f11*f_g0;
+ f12 = f12+f15;
+ f15 = f11*f4;
+ f17 = f9*f4;
+ f18 = f13*f_g0;
+ f14 = f14+f16;
+ f16 = f13*f7;
+ f12 = f12+f15;
+ f15 = f13*f8;
+ r8 = sp + -16;
+ f6 = f9*f_g0;
+ f9 = f10*f7;
+ f17 = f17+f18;
+ f18 = f10*f8;
+ f14 = f14+f16;
+ f10 = f10*f4;
+ f12 = f12-f15;
+ r9 = r8 >> 2;
+ f6 = f6-f9;
+ f8 = f11*f8;
+ f9 = f17+f18;
+ f7 = f11*f7;
+ f10 = f14-f10;
+ heapFloat[(fp+-4)] = f12;
+ f6 = f6-f8;
+ f4 = f13*f4;
+ f7 = f9-f7;
+ heapFloat[(r9+1)] = f10;
+ f4 = f6-f4;
+ heapFloat[(r9+2)] = f7;
+ heapFloat[(r9+3)] = f4;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r8;
+ heap32[(g0+2)] = r2;
+ heap32[(g0+3)] = r3;
+ heap32[(g0+4)] = r4;
+ r6 = (r6 + 1)|0;
+ _ZN31btConvexPlaneCollisionAlgorithm20collideSingleContactERK12btQuaternionP17btCollisionObjectS4_RK16btDispatcherInfoP16btManifoldResult(i7);
+}
+else{
+break _15;
+}
+}
+else{
+break _3;
+}
+}
+}
+ r0 = _2E_str115;
+ r1 = _2E_str685;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 61;
+ _assert(i7);
+}
+} while(0);
+ r0 = heapU8[r0+8];
+if(!(r0 ==0)) //_LBB307_23
+{
+ r0 = heap32[(r1+3)];
+ r0 = r0 >> 2;
+ r0 = heap32[(r0+279)];
+if(!(r0 ==0)) //_LBB307_23
+{
+ r0 = heap32[(r7+1)];
+ if(r0 !=0) //_LBB307_19
+{
+ r1 = r0 >> 2;
+ r2 = heap32[(r1+279)];
+if(!(r2 ==0)) //_LBB307_23
+{
+ r1 = heap32[(r1+277)];
+ r2 = heap32[(r7+34)];
+ if(r1 ==r2) //_LBB307_22
+{
+ r1 = (r4 + 8)|0;
+ r2 = (r4 + 72)|0;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = r2;
+ _ZN20btPersistentManifold20refreshContactPointsERK11btTransformS2_(i7);
+}
+else{
+ r1 = (r4 + 72)|0;
+ r4 = (r4 + 8)|0;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = r4;
+ _ZN20btPersistentManifold20refreshContactPointsERK11btTransformS2_(i7);
+ return;
+}
+}
+}
+else{
+ r0 = _2E_str59;
+ r4 = _2E_str160;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r4;
+ heap32[(g0+2)] = 101;
+ _assert(i7);
+}
+}
+}
+}
+ return;
+}
+
+function _ZN31btConvexPlaneCollisionAlgorithmD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV31btConvexPlaneCollisionAlgorithm;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ r1 = heapU8[r0+8];
+if(!(r1 ==0)) //_LBB308_3
+{
+ r1 = heap32[(r2+3)];
+if(!(r1 ==0)) //_LBB308_3
+{
+ r2 = heap32[(r2+1)];
+ r3 = r2 >> 2;
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3+4)];
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = r1;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+}
+}
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZN31btConvexPlaneCollisionAlgorithmD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV31btConvexPlaneCollisionAlgorithm;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ r0 = heapU8[r0+8];
+if(!(r0 ==0)) //_LBB309_3
+{
+ r0 = heap32[(r2+3)];
+if(!(r0 ==0)) //_LBB309_3
+{
+ r1 = heap32[(r2+1)];
+ r2 = r1 >> 2;
+ r2 = heap32[(r2)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+4)];
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r0;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+}
+}
+ return;
+}
+
+function _ZN31btDefaultCollisionConfiguration25getPersistentManifoldPoolEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r0 = heap32[(r0+4)];
+ r_g0 = r0;
+ return;
+}
+
+function _ZN31btDefaultCollisionConfiguration25getCollisionAlgorithmPoolEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r0 = heap32[(r0+6)];
+ r_g0 = r0;
+ return;
+}
+
+function _ZN31btDefaultCollisionConfiguration17getStackAllocatorEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r0 = heap32[(r0+2)];
+ r_g0 = r0;
+ return;
+}
+
+function _ZN31btDefaultCollisionConfiguration16getSimplexSolverEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r0 = heap32[(r0+8)];
+ r_g0 = r0;
+ return;
+}
+
+function _ZN31btConvexPlaneCollisionAlgorithm10CreateFuncD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTVN31btConvexPlaneCollisionAlgorithm10CreateFuncE;
+ r0 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r0)] = r1;
+ return;
+}
+
+function _ZN31btConvexPlaneCollisionAlgorithm10CreateFuncD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTVN31btConvexPlaneCollisionAlgorithm10CreateFuncE;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZN31btConvexPlaneCollisionAlgorithm10CreateFunc24CreateCollisionAlgorithmER36btCollisionAlgorithmConstructionInfoP17btCollisionObjectS4_(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ r0 = r0 >> 2;
+ r1 = heap32[(r0)];
+ r2 = r1 >> 2;
+ r2 = heap32[(r2)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+12)];
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = 28;
+ r1 = heap32[(fp)];
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ r2 = r_g0;
+ r3 = r1 >> 2;
+ r4 = _ZTV20btCollisionAlgorithm;
+ r5 = heap32[(r3+3)];
+ r3 = heap32[(r3+2)];
+ r1 = heapU8[r1+4];
+ r6 = r2 >> 2;
+ r4 = (r4 + 8)|0;
+ heap32[(r6)] = r4;
+ r0 = heap32[(r0)];
+ r4 = _ZTV31btConvexPlaneCollisionAlgorithm;
+ r4 = (r4 + 8)|0;
+ heap32[(r6+1)] = r0;
+ r7 = 0;
+ heap32[(r6)] = r4;
+ r4 = heap32[(fp+2)];
+ r8 = heap32[(fp+3)];
+ heap8[r2+8] = r7;
+ heap32[(r6+3)] = 0;
+ if(r1 !=0) //_LBB316_3
+{
+ r1 = 1;
+ r6 = r2 >> 2;
+ heap8[r2+16] = r1;
+ heap32[(r6+5)] = r3;
+ r3 = r0 >> 2;
+ heap32[(r6+6)] = r5;
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3+6)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r8;
+ heap32[(g0+2)] = r4;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ r0 = r_g0;
+if(!(r0 ==0)) //_LBB316_5
+{
+ r0 = heap32[(r6+1)];
+ r3 = r0 >> 2;
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3+3)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r8;
+ heap32[(g0+2)] = r4;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ heap32[(r6+3)] = r_g0;
+ heap8[r2+8] = r1;
+}
+}
+else{
+ r1 = r2 >> 2;
+ heap8[r2+16] = r7;
+ heap32[(r1+5)] = r3;
+ r3 = r0 >> 2;
+ heap32[(r1+6)] = r5;
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3+6)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r4;
+ heap32[(g0+2)] = r8;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ r0 = r_g0;
+if(!(r0 ==0)) //_LBB316_5
+{
+ r0 = heap32[(r1+1)];
+ r3 = r0 >> 2;
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3+3)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r4;
+ heap32[(g0+2)] = r8;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ r3 = 1;
+ heap32[(r1+3)] = r_g0;
+ heap8[r2+8] = r3;
+}
+}
+ r_g0 = r2;
+ return;
+}
+
+function _ZN33btConvexConcaveCollisionAlgorithm10CreateFuncD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTVN33btConvexConcaveCollisionAlgorithm10CreateFuncE;
+ r0 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r0)] = r1;
+ return;
+}
+
+function _ZN33btConvexConcaveCollisionAlgorithm10CreateFuncD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTVN33btConvexConcaveCollisionAlgorithm10CreateFuncE;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZN33btConvexConcaveCollisionAlgorithm10CreateFunc24CreateCollisionAlgorithmER36btCollisionAlgorithmConstructionInfoP17btCollisionObjectS4_(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ r0 = r0 >> 2;
+ r1 = heap32[(r0)];
+ r2 = r1 >> 2;
+ r2 = heap32[(r2)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+12)];
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = 80;
+ r1 = _ZTV20btCollisionAlgorithm;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ r2 = r_g0;
+ r1 = (r1 + 8)|0;
+ r3 = r2 >> 2;
+ heap32[(r3)] = r1;
+ r1 = heap32[(r0)];
+ r4 = _ZTV33btConvexConcaveCollisionAlgorithm;
+ r4 = (r4 + 8)|0;
+ heap32[(r3+1)] = r1;
+ r1 = 0;
+ heap32[(r3)] = r4;
+ heap8[r2+8] = r1;
+ r1 = _ZTV24btConvexTriangleCallback;
+ r0 = heap32[(r0)];
+ r1 = (r1 + 8)|0;
+ heap32[(r3+3)] = r1;
+ heap32[(r3+15)] = r0;
+ r1 = heap32[(fp+2)];
+ heap32[(r3+16)] = 0;
+ r4 = heap32[(fp+3)];
+ heap32[(r3+4)] = r1;
+ r5 = r0 >> 2;
+ heap32[(r3+5)] = r4;
+ r5 = heap32[(r5)];
+ r5 = r5 >> 2;
+ r5 = heap32[(r5+3)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = r4;
+ __FUNCTION_TABLE__[(r5)>>2](i7);
+ heap32[(r3+19)] = r_g0;
+ r1 = heap32[(r3+15)];
+ r3 = r1 >> 2;
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3+5)];
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r_g0;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ r_g0 = r2;
+ return;
+}
+
+function _ZN33btConvexConcaveCollisionAlgorithm17SwappedCreateFuncD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTVN33btConvexConcaveCollisionAlgorithm17SwappedCreateFuncE;
+ r0 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r0)] = r1;
+ return;
+}
+
+function _ZN33btConvexConcaveCollisionAlgorithm17SwappedCreateFuncD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTVN33btConvexConcaveCollisionAlgorithm17SwappedCreateFuncE;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZN33btConvexConcaveCollisionAlgorithm17SwappedCreateFunc24CreateCollisionAlgorithmER36btCollisionAlgorithmConstructionInfoP17btCollisionObjectS4_(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ r0 = r0 >> 2;
+ r1 = heap32[(r0)];
+ r2 = r1 >> 2;
+ r2 = heap32[(r2)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+12)];
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = 80;
+ r1 = _ZTV20btCollisionAlgorithm;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ r2 = r_g0;
+ r1 = (r1 + 8)|0;
+ r3 = r2 >> 2;
+ heap32[(r3)] = r1;
+ r1 = heap32[(r0)];
+ r4 = _ZTV33btConvexConcaveCollisionAlgorithm;
+ r4 = (r4 + 8)|0;
+ heap32[(r3+1)] = r1;
+ r1 = 1;
+ heap32[(r3)] = r4;
+ heap8[r2+8] = r1;
+ r1 = _ZTV24btConvexTriangleCallback;
+ r0 = heap32[(r0)];
+ r1 = (r1 + 8)|0;
+ heap32[(r3+3)] = r1;
+ heap32[(r3+15)] = r0;
+ r1 = heap32[(fp+3)];
+ heap32[(r3+16)] = 0;
+ r4 = heap32[(fp+2)];
+ heap32[(r3+4)] = r1;
+ r5 = r0 >> 2;
+ heap32[(r3+5)] = r4;
+ r5 = heap32[(r5)];
+ r5 = r5 >> 2;
+ r5 = heap32[(r5+3)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = r4;
+ __FUNCTION_TABLE__[(r5)>>2](i7);
+ heap32[(r3+19)] = r_g0;
+ r1 = heap32[(r3+15)];
+ r3 = r1 >> 2;
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3+5)];
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r_g0;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ r_g0 = r2;
+ return;
+}
+
+function _ZN28btCompoundCollisionAlgorithm10CreateFuncD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTVN28btCompoundCollisionAlgorithm10CreateFuncE;
+ r0 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r0)] = r1;
+ return;
+}
+
+function _ZN28btCompoundCollisionAlgorithm10CreateFuncD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTVN28btCompoundCollisionAlgorithm10CreateFuncE;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZN28btCompoundCollisionAlgorithm10CreateFunc24CreateCollisionAlgorithmER36btCollisionAlgorithmConstructionInfoP17btCollisionObjectS4_(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ r0 = r0 >> 2;
+ r1 = heap32[(r0)];
+ r2 = r1 >> 2;
+ r2 = heap32[(r2)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+12)];
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = 44;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ r1 = r_g0;
+ r2 = _ZTV20btCollisionAlgorithm;
+ r3 = r1 >> 2;
+ r2 = (r2 + 8)|0;
+ heap32[(r3)] = r2;
+ r2 = heap32[(r0)];
+ r4 = _ZTV28btCompoundCollisionAlgorithm;
+ r4 = (r4 + 8)|0;
+ heap32[(r3+1)] = r2;
+ r2 = 1;
+ heap32[(r3)] = r4;
+ heap8[r1+24] = r2;
+ heap32[(r3+5)] = 0;
+ heap32[(r3+3)] = 0;
+ r2 = 0;
+ heap32[(r3+4)] = 0;
+ heap8[r1+28] = r2;
+ r0 = heap32[(r0+1)];
+ r4 = heap32[(fp+2)];
+ heap32[(r3+8)] = r0;
+ r0 = r4 >> 2;
+ heap8[r1+36] = r2;
+ r0 = heap32[(r0+48)];
+ r0 = r0 >> 2;
+ r2 = heap32[(r0+1)];
+ if(r2 ==31) //_LBB325_2
+{
+ r2 = heap32[(fp+3)];
+ r3 = r1 >> 2;
+ r0 = heap32[(r0+17)];
+ heap32[(r3+10)] = r0;
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r4;
+ heap32[(g0+2)] = r2;
+ _ZN28btCompoundCollisionAlgorithm26preallocateChildAlgorithmsEP17btCollisionObjectS1_(i7);
+ r_g0 = r1;
+ return;
+}
+else{
+ r0 = _2E_str99;
+ r1 = _2E_str1100;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 32;
+ _assert(i7);
+}
+}
+
+function _ZN28btCompoundCollisionAlgorithm17SwappedCreateFuncD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTVN28btCompoundCollisionAlgorithm17SwappedCreateFuncE;
+ r0 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r0)] = r1;
+ return;
+}
+
+function _ZN28btCompoundCollisionAlgorithm17SwappedCreateFuncD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTVN28btCompoundCollisionAlgorithm17SwappedCreateFuncE;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZN28btCompoundCollisionAlgorithm17SwappedCreateFunc24CreateCollisionAlgorithmER36btCollisionAlgorithmConstructionInfoP17btCollisionObjectS4_(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ r0 = r0 >> 2;
+ r1 = heap32[(r0)];
+ r2 = r1 >> 2;
+ r2 = heap32[(r2)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+12)];
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = 44;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ r1 = r_g0;
+ r2 = _ZTV20btCollisionAlgorithm;
+ r3 = r1 >> 2;
+ r2 = (r2 + 8)|0;
+ heap32[(r3)] = r2;
+ r2 = heap32[(r0)];
+ r4 = _ZTV28btCompoundCollisionAlgorithm;
+ r4 = (r4 + 8)|0;
+ heap32[(r3+1)] = r2;
+ r2 = 1;
+ heap32[(r3)] = r4;
+ heap8[r1+24] = r2;
+ heap32[(r3+5)] = 0;
+ heap32[(r3+3)] = 0;
+ heap32[(r3+4)] = 0;
+ heap8[r1+28] = r2;
+ r0 = heap32[(r0+1)];
+ r2 = heap32[(fp+3)];
+ r4 = 0;
+ heap32[(r3+8)] = r0;
+ r0 = r2 >> 2;
+ heap8[r1+36] = r4;
+ r0 = heap32[(r0+48)];
+ r0 = r0 >> 2;
+ r3 = heap32[(r0+1)];
+ if(r3 ==31) //_LBB328_2
+{
+ r3 = heap32[(fp+2)];
+ r4 = r1 >> 2;
+ r0 = heap32[(r0+17)];
+ heap32[(r4+10)] = r0;
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r3;
+ heap32[(g0+2)] = r2;
+ _ZN28btCompoundCollisionAlgorithm26preallocateChildAlgorithmsEP17btCollisionObjectS1_(i7);
+ r_g0 = r1;
+ return;
+}
+else{
+ r0 = _2E_str99;
+ r1 = _2E_str1100;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 32;
+ _assert(i7);
+}
+}
+
+function _ZN16btEmptyAlgorithm10CreateFuncD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTVN16btEmptyAlgorithm10CreateFuncE;
+ r0 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r0)] = r1;
+ return;
+}
+
+function _ZN16btEmptyAlgorithm10CreateFuncD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTVN16btEmptyAlgorithm10CreateFuncE;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZN16btEmptyAlgorithm10CreateFunc24CreateCollisionAlgorithmER36btCollisionAlgorithmConstructionInfoP17btCollisionObjectS4_(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ r0 = r0 >> 2;
+ r1 = heap32[(r0)];
+ r2 = r1 >> 2;
+ r2 = heap32[(r2)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+12)];
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = 8;
+ r1 = _ZTV20btCollisionAlgorithm;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ r3 = r_g0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r3)] = r1;
+ r0 = heap32[(r0)];
+ r1 = _ZTV16btEmptyAlgorithm;
+ r1 = (r1 + 8)|0;
+ heap32[(r3+1)] = r0;
+ heap32[(r3)] = r1;
+ return;
+}
+
+function _ZN32btSphereSphereCollisionAlgorithm10CreateFuncD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTVN32btSphereSphereCollisionAlgorithm10CreateFuncE;
+ r0 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r0)] = r1;
+ return;
+}
+
+function _ZN32btSphereSphereCollisionAlgorithm10CreateFuncD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTVN32btSphereSphereCollisionAlgorithm10CreateFuncE;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZN32btSphereSphereCollisionAlgorithm10CreateFunc24CreateCollisionAlgorithmER36btCollisionAlgorithmConstructionInfoP17btCollisionObjectS4_(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ r0 = r0 >> 2;
+ r1 = heap32[(r0)];
+ r2 = r1 >> 2;
+ r2 = heap32[(r2)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+12)];
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = 16;
+ r1 = _ZTV20btCollisionAlgorithm;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ r2 = r_g0;
+ r3 = r2 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r3)] = r1;
+ r0 = heap32[(r0)];
+ r1 = _ZTV32btSphereSphereCollisionAlgorithm;
+ r1 = (r1 + 8)|0;
+ heap32[(r3+1)] = r0;
+ r4 = 0;
+ heap32[(r3)] = r1;
+ heap8[r2+8] = r4;
+ r1 = r0 >> 2;
+ heap32[(r3+3)] = 0;
+ r1 = heap32[(r1)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+3)];
+ r4 = heap32[(fp+2)];
+ r5 = heap32[(fp+3)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r4;
+ heap32[(g0+2)] = r5;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+ r1 = 1;
+ heap32[(r3+3)] = r_g0;
+ heap8[r2+8] = r1;
+ r_g0 = r2;
+ return;
+}
+
+function _ZN34btSphereTriangleCollisionAlgorithm10CreateFuncD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTVN34btSphereTriangleCollisionAlgorithm10CreateFuncE;
+ r0 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r0)] = r1;
+ return;
+}
+
+function _ZN34btSphereTriangleCollisionAlgorithm10CreateFuncD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTVN34btSphereTriangleCollisionAlgorithm10CreateFuncE;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZN34btSphereTriangleCollisionAlgorithm10CreateFunc24CreateCollisionAlgorithmER36btCollisionAlgorithmConstructionInfoP17btCollisionObjectS4_(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ r0 = r0 >> 2;
+ r1 = heap32[(r0)];
+ r2 = r1 >> 2;
+ r2 = heap32[(r2)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+12)];
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = 20;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ r1 = r_g0;
+ r2 = heap32[(fp)];
+ r3 = _ZTV20btCollisionAlgorithm;
+ r4 = heap32[(r0+1)];
+ r2 = heapU8[r2+4];
+ r5 = r1 >> 2;
+ r3 = (r3 + 8)|0;
+ heap32[(r5)] = r3;
+ r0 = heap32[(r0)];
+ r3 = _ZTV34btSphereTriangleCollisionAlgorithm;
+ r3 = (r3 + 8)|0;
+ heap32[(r5+1)] = r0;
+ r6 = 0;
+ heap32[(r5)] = r3;
+ heap8[r1+8] = r6;
+ heap32[(r5+3)] = r4;
+ heap8[r1+16] = r2;
+if(!(r4 !=0)) //_LBB337_2
+{
+ r2 = heap32[(fp+2)];
+ r3 = heap32[(fp+3)];
+ r4 = r0 >> 2;
+ r4 = heap32[(r4)];
+ r4 = r4 >> 2;
+ r4 = heap32[(r4+3)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r2;
+ heap32[(g0+2)] = r3;
+ r0 = r1 >> 2;
+ __FUNCTION_TABLE__[(r4)>>2](i7);
+ r3 = 1;
+ heap32[(r0+3)] = r_g0;
+ heap8[r1+8] = r3;
+}
+ r_g0 = r1;
+ return;
+}
+
+function _ZN26btBoxBoxCollisionAlgorithm10CreateFuncD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTVN26btBoxBoxCollisionAlgorithm10CreateFuncE;
+ r0 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r0)] = r1;
+ return;
+}
+
+function _ZN26btBoxBoxCollisionAlgorithm10CreateFuncD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTVN26btBoxBoxCollisionAlgorithm10CreateFuncE;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZN26btBoxBoxCollisionAlgorithm10CreateFunc24CreateCollisionAlgorithmER36btCollisionAlgorithmConstructionInfoP17btCollisionObjectS4_(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ r0 = r0 >> 2;
+ r1 = heap32[(r0)];
+ r2 = r1 >> 2;
+ r2 = heap32[(r2)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+12)];
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = 16;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ r1 = r_g0;
+ r2 = _ZTV20btCollisionAlgorithm;
+ r3 = r1 >> 2;
+ r2 = (r2 + 8)|0;
+ heap32[(r3)] = r2;
+ r0 = heap32[(r0)];
+ r2 = _ZTV26btBoxBoxCollisionAlgorithm;
+ r2 = (r2 + 8)|0;
+ heap32[(r3+1)] = r0;
+ r4 = 0;
+ heap32[(r3)] = r2;
+ heap8[r1+8] = r4;
+ r2 = r0 >> 2;
+ heap32[(r3+3)] = 0;
+ r2 = heap32[(r2)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+6)];
+ r3 = heap32[(fp+2)];
+ r4 = heap32[(fp+3)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r3;
+ heap32[(g0+2)] = r4;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ r0 = r_g0;
+if(!(r0 ==0)) //_LBB340_2
+{
+ r0 = r1 >> 2;
+ r2 = heap32[(r0+1)];
+ r5 = r2 >> 2;
+ r5 = heap32[(r5)];
+ r5 = r5 >> 2;
+ r5 = heap32[(r5+3)];
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = r3;
+ heap32[(g0+2)] = r4;
+ __FUNCTION_TABLE__[(r5)>>2](i7);
+ r3 = 1;
+ heap32[(r0+3)] = r_g0;
+ heap8[r1+8] = r3;
+}
+ r_g0 = r1;
+ return;
+}
+
+function _ZN31btDefaultCollisionConfiguration31getCollisionAlgorithmCreateFuncEii(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ r1 = heap32[(fp)];
+ r2 = heap32[(fp+2)];
+ if(r0 !=8) //_LBB341_3
+{
+__label__ = 3;
+}
+else{
+ if(r2 !=8) //_LBB341_3
+{
+__label__ = 3;
+}
+else{
+ r0 = (r1 + 64)|0;
+__label__ = 30;
+}
+}
+_4: do {
+if (__label__ == 3){
+if(!(r0 !=8)) //_LBB341_6
+{
+if(!(r2 !=1)) //_LBB341_6
+{
+ r0 = (r1 + 72)|0;
+break _4;
+}
+}
+if(!(r0 !=1)) //_LBB341_9
+{
+if(!(r2 !=8)) //_LBB341_9
+{
+ r0 = (r1 + 76)|0;
+break _4;
+}
+}
+ r3 = r2 | r0;
+ if(r3 !=0) //_LBB341_11
+{
+if(!(r0 >19)) //_LBB341_14
+{
+if(!(r2 !=28)) //_LBB341_14
+{
+ r0 = (r1 + 84)|0;
+break _4;
+}
+}
+if(!(r2 >19)) //_LBB341_17
+{
+if(!(r0 !=28)) //_LBB341_17
+{
+ r0 = (r1 + 80)|0;
+break _4;
+}
+}
+_24: do {
+ if(r0 >19) //_LBB341_21
+{
+ if(r2 <20) //_LBB341_23
+{
+ r3 = (r0 + -21)|0;
+ if(uint(r3) <uint(9)) //_LBB341_25
+{
+ r0 = (r1 + 48)|0;
+break _4;
+}
+}
+ if(r0 ==31) //_LBB341_26
+{
+ r0 = (r1 + 52)|0;
+break _4;
+}
+else{
+break _24;
+}
+}
+else{
+ if(r2 >19) //_LBB341_20
+{
+ r0 = (r2 + -21)|0;
+ if(uint(r0) <uint(9)) //_LBB341_22
+{
+ r0 = (r1 + 44)|0;
+break _4;
+}
+}
+else{
+ r0 = (r1 + 40)|0;
+break _4;
+}
+}
+} while(0);
+ if(r2 !=31) //_LBB341_29
+{
+ r0 = (r1 + 60)|0;
+}
+else{
+ r0 = (r1 + 56)|0;
+}
+}
+else{
+ r0 = (r1 + 68)|0;
+}
+}
+} while(0);
+ r0 = r0 >> 2;
+ r0 = heap32[(r0)];
+ r_g0 = r0;
+ return;
+}
+
+function _ZN31btDefaultCollisionConfigurationD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV31btDefaultCollisionConfiguration;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ r1 = heapU8[r0+12];
+_1: do {
+if(!(r1 ==0)) //_LBB342_13
+{
+ r1 = heap32[(r2+2)];
+ r3 = r1 >> 2;
+ r4 = heap32[(r3+2)];
+ if(r4 ==0) //_LBB342_3
+{
+ r1 = heapU8[r1+16];
+if(!(r1 !=0)) //_LBB342_6
+{
+ r1 = heap32[(r3)];
+if(!(r1 ==0)) //_LBB342_6
+{
+ r4 = gNumAlignedFree;
+ r4 = r4 >> 2;
+ r5 = heap32[(r4)];
+ r5 = (r5 + 1)|0;
+ r1 = r1 >> 2;
+ heap32[(r4)] = r5;
+ r1 = heap32[(r1+-1)];
+ heap32[(g0)] = r1;
+ free(i7);
+}
+}
+ heap32[(r3)] = 0;
+ heap32[(r3+2)] = 0;
+ r1 = heap32[(r2+2)];
+ r3 = r1 >> 2;
+ r4 = heap32[(r3+2)];
+ if(r4 ==0) //_LBB342_8
+{
+ r1 = heapU8[r1+16];
+if(!(r1 !=0)) //_LBB342_11
+{
+ r1 = heap32[(r3)];
+if(!(r1 ==0)) //_LBB342_11
+{
+ r4 = gNumAlignedFree;
+ r4 = r4 >> 2;
+ r5 = heap32[(r4)];
+ r5 = (r5 + 1)|0;
+ r1 = r1 >> 2;
+ heap32[(r4)] = r5;
+ r1 = heap32[(r1+-1)];
+ heap32[(g0)] = r1;
+ free(i7);
+}
+}
+ heap32[(r3)] = 0;
+ heap32[(r3+2)] = 0;
+ r1 = heap32[(r2+2)];
+ if(r1 ==0) //_LBB342_13
+{
+break _1;
+}
+else{
+ r3 = gNumAlignedFree;
+ r3 = r3 >> 2;
+ r4 = heap32[(r3)];
+ r4 = (r4 + 1)|0;
+ r1 = r1 >> 2;
+ heap32[(r3)] = r4;
+ r1 = heap32[(r1+-1)];
+ heap32[(g0)] = r1;
+ free(i7);
+break _1;
+}
+}
+}
+ r0 = _2E_str128;
+ r1 = _2E_str1129;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 49;
+ _assert(i7);
+}
+} while(0);
+ r1 = heapU8[r0+28];
+if(!(r1 ==0)) //_LBB342_19
+{
+ r1 = heap32[(r2+6)];
+ r3 = r1 >> 2;
+ r3 = heap32[(r3+4)];
+ if(r3 !=0) //_LBB342_16
+{
+ r1 = gNumAlignedFree;
+ r1 = r1 >> 2;
+ r4 = heap32[(r1)];
+ r4 = (r4 + 1)|0;
+ r3 = r3 >> 2;
+ heap32[(r1)] = r4;
+ r1 = heap32[(r3+-1)];
+ heap32[(g0)] = r1;
+ free(i7);
+ r1 = heap32[(r2+6)];
+}
+if(!(r1 ==0)) //_LBB342_19
+{
+ r3 = gNumAlignedFree;
+ r3 = r3 >> 2;
+ r4 = heap32[(r3)];
+ r4 = (r4 + 1)|0;
+ r1 = r1 >> 2;
+ heap32[(r3)] = r4;
+ r1 = heap32[(r1+-1)];
+ heap32[(g0)] = r1;
+ free(i7);
+}
+}
+ r1 = heapU8[r0+20];
+if(!(r1 ==0)) //_LBB342_25
+{
+ r1 = heap32[(r2+4)];
+ r3 = r1 >> 2;
+ r3 = heap32[(r3+4)];
+ if(r3 !=0) //_LBB342_22
+{
+ r1 = gNumAlignedFree;
+ r1 = r1 >> 2;
+ r4 = heap32[(r1)];
+ r4 = (r4 + 1)|0;
+ r3 = r3 >> 2;
+ heap32[(r1)] = r4;
+ r1 = heap32[(r3+-1)];
+ heap32[(g0)] = r1;
+ free(i7);
+ r1 = heap32[(r2+4)];
+}
+if(!(r1 ==0)) //_LBB342_25
+{
+ r3 = gNumAlignedFree;
+ r3 = r3 >> 2;
+ r4 = heap32[(r3)];
+ r4 = (r4 + 1)|0;
+ r1 = r1 >> 2;
+ heap32[(r3)] = r4;
+ r1 = heap32[(r1+-1)];
+ heap32[(g0)] = r1;
+ free(i7);
+}
+}
+ r1 = heap32[(r2+10)];
+ r3 = r1 >> 2;
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3)];
+ heap32[(g0)] = r1;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ r1 = heap32[(r2+10)];
+if(!(r1 ==0)) //_LBB342_27
+{
+ r3 = gNumAlignedFree;
+ r3 = r3 >> 2;
+ r4 = heap32[(r3)];
+ r4 = (r4 + 1)|0;
+ r1 = r1 >> 2;
+ heap32[(r3)] = r4;
+ r1 = heap32[(r1+-1)];
+ heap32[(g0)] = r1;
+ free(i7);
+}
+ r1 = heap32[(r2+11)];
+ r3 = r1 >> 2;
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3)];
+ heap32[(g0)] = r1;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ r1 = heap32[(r2+11)];
+if(!(r1 ==0)) //_LBB342_29
+{
+ r3 = gNumAlignedFree;
+ r3 = r3 >> 2;
+ r4 = heap32[(r3)];
+ r4 = (r4 + 1)|0;
+ r1 = r1 >> 2;
+ heap32[(r3)] = r4;
+ r1 = heap32[(r1+-1)];
+ heap32[(g0)] = r1;
+ free(i7);
+}
+ r1 = heap32[(r2+12)];
+ r3 = r1 >> 2;
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3)];
+ heap32[(g0)] = r1;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ r1 = heap32[(r2+12)];
+if(!(r1 ==0)) //_LBB342_31
+{
+ r3 = gNumAlignedFree;
+ r3 = r3 >> 2;
+ r4 = heap32[(r3)];
+ r4 = (r4 + 1)|0;
+ r1 = r1 >> 2;
+ heap32[(r3)] = r4;
+ r1 = heap32[(r1+-1)];
+ heap32[(g0)] = r1;
+ free(i7);
+}
+ r1 = heap32[(r2+13)];
+ r3 = r1 >> 2;
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3)];
+ heap32[(g0)] = r1;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ r1 = heap32[(r2+13)];
+if(!(r1 ==0)) //_LBB342_33
+{
+ r3 = gNumAlignedFree;
+ r3 = r3 >> 2;
+ r4 = heap32[(r3)];
+ r4 = (r4 + 1)|0;
+ r1 = r1 >> 2;
+ heap32[(r3)] = r4;
+ r1 = heap32[(r1+-1)];
+ heap32[(g0)] = r1;
+ free(i7);
+}
+ r1 = heap32[(r2+14)];
+ r3 = r1 >> 2;
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3)];
+ heap32[(g0)] = r1;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ r1 = heap32[(r2+14)];
+if(!(r1 ==0)) //_LBB342_35
+{
+ r3 = gNumAlignedFree;
+ r3 = r3 >> 2;
+ r4 = heap32[(r3)];
+ r4 = (r4 + 1)|0;
+ r1 = r1 >> 2;
+ heap32[(r3)] = r4;
+ r1 = heap32[(r1+-1)];
+ heap32[(g0)] = r1;
+ free(i7);
+}
+ r1 = heap32[(r2+15)];
+ r3 = r1 >> 2;
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3)];
+ heap32[(g0)] = r1;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ r1 = heap32[(r2+15)];
+if(!(r1 ==0)) //_LBB342_37
+{
+ r3 = gNumAlignedFree;
+ r3 = r3 >> 2;
+ r4 = heap32[(r3)];
+ r4 = (r4 + 1)|0;
+ r1 = r1 >> 2;
+ heap32[(r3)] = r4;
+ r1 = heap32[(r1+-1)];
+ heap32[(g0)] = r1;
+ free(i7);
+}
+ r1 = heap32[(r2+16)];
+ r3 = r1 >> 2;
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3)];
+ heap32[(g0)] = r1;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ r1 = heap32[(r2+16)];
+if(!(r1 ==0)) //_LBB342_39
+{
+ r3 = gNumAlignedFree;
+ r3 = r3 >> 2;
+ r4 = heap32[(r3)];
+ r4 = (r4 + 1)|0;
+ r1 = r1 >> 2;
+ heap32[(r3)] = r4;
+ r1 = heap32[(r1+-1)];
+ heap32[(g0)] = r1;
+ free(i7);
+}
+ r1 = heap32[(r2+18)];
+ r3 = r1 >> 2;
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3)];
+ heap32[(g0)] = r1;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ r1 = heap32[(r2+18)];
+if(!(r1 ==0)) //_LBB342_41
+{
+ r3 = gNumAlignedFree;
+ r3 = r3 >> 2;
+ r4 = heap32[(r3)];
+ r4 = (r4 + 1)|0;
+ r1 = r1 >> 2;
+ heap32[(r3)] = r4;
+ r1 = heap32[(r1+-1)];
+ heap32[(g0)] = r1;
+ free(i7);
+}
+ r1 = heap32[(r2+19)];
+ r3 = r1 >> 2;
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3)];
+ heap32[(g0)] = r1;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ r1 = heap32[(r2+19)];
+if(!(r1 ==0)) //_LBB342_43
+{
+ r3 = gNumAlignedFree;
+ r3 = r3 >> 2;
+ r4 = heap32[(r3)];
+ r4 = (r4 + 1)|0;
+ r1 = r1 >> 2;
+ heap32[(r3)] = r4;
+ r1 = heap32[(r1+-1)];
+ heap32[(g0)] = r1;
+ free(i7);
+}
+ r1 = heap32[(r2+17)];
+ r3 = r1 >> 2;
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3)];
+ heap32[(g0)] = r1;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ r1 = heap32[(r2+17)];
+if(!(r1 ==0)) //_LBB342_45
+{
+ r3 = gNumAlignedFree;
+ r3 = r3 >> 2;
+ r4 = heap32[(r3)];
+ r4 = (r4 + 1)|0;
+ r1 = r1 >> 2;
+ heap32[(r3)] = r4;
+ r1 = heap32[(r1+-1)];
+ heap32[(g0)] = r1;
+ free(i7);
+}
+ r1 = heap32[(r2+21)];
+ r3 = r1 >> 2;
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3)];
+ heap32[(g0)] = r1;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ r1 = heap32[(r2+21)];
+if(!(r1 ==0)) //_LBB342_47
+{
+ r3 = gNumAlignedFree;
+ r3 = r3 >> 2;
+ r4 = heap32[(r3)];
+ r4 = (r4 + 1)|0;
+ r1 = r1 >> 2;
+ heap32[(r3)] = r4;
+ r1 = heap32[(r1+-1)];
+ heap32[(g0)] = r1;
+ free(i7);
+}
+ r1 = heap32[(r2+20)];
+ r3 = r1 >> 2;
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3)];
+ heap32[(g0)] = r1;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ r1 = heap32[(r2+20)];
+if(!(r1 ==0)) //_LBB342_49
+{
+ r3 = gNumAlignedFree;
+ r3 = r3 >> 2;
+ r4 = heap32[(r3)];
+ r4 = (r4 + 1)|0;
+ r1 = r1 >> 2;
+ heap32[(r3)] = r4;
+ r1 = heap32[(r1+-1)];
+ heap32[(g0)] = r1;
+ free(i7);
+}
+ r1 = heap32[(r2+8)];
+if(!(r1 ==0)) //_LBB342_51
+{
+ r3 = gNumAlignedFree;
+ r3 = r3 >> 2;
+ r4 = heap32[(r3)];
+ r4 = (r4 + 1)|0;
+ r1 = r1 >> 2;
+ heap32[(r3)] = r4;
+ r1 = heap32[(r1+-1)];
+ heap32[(g0)] = r1;
+ free(i7);
+}
+ r1 = heap32[(r2+9)];
+ r3 = r1 >> 2;
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3)];
+ heap32[(g0)] = r1;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ r1 = heap32[(r2+9)];
+if(!(r1 ==0)) //_LBB342_53
+{
+ r2 = gNumAlignedFree;
+ r2 = r2 >> 2;
+ r3 = heap32[(r2)];
+ r3 = (r3 + 1)|0;
+ r1 = r1 >> 2;
+ heap32[(r2)] = r3;
+ r1 = heap32[(r1+-1)];
+ heap32[(g0)] = r1;
+ free(i7);
+}
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZN31btDefaultCollisionConfigurationD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ heap32[(g0)] = r0;
+ _ZN31btDefaultCollisionConfigurationD2Ev(i7);
+ return;
+}
+
+function _ZN31btDefaultCollisionConfigurationD2Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV31btDefaultCollisionConfiguration;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ r1 = heapU8[r0+12];
+_1: do {
+if(!(r1 ==0)) //_LBB344_13
+{
+ r1 = heap32[(r2+2)];
+ r3 = r1 >> 2;
+ r4 = heap32[(r3+2)];
+ if(r4 ==0) //_LBB344_3
+{
+ r1 = heapU8[r1+16];
+if(!(r1 !=0)) //_LBB344_6
+{
+ r1 = heap32[(r3)];
+if(!(r1 ==0)) //_LBB344_6
+{
+ r4 = gNumAlignedFree;
+ r4 = r4 >> 2;
+ r5 = heap32[(r4)];
+ r5 = (r5 + 1)|0;
+ r1 = r1 >> 2;
+ heap32[(r4)] = r5;
+ r1 = heap32[(r1+-1)];
+ heap32[(g0)] = r1;
+ free(i7);
+}
+}
+ heap32[(r3)] = 0;
+ heap32[(r3+2)] = 0;
+ r1 = heap32[(r2+2)];
+ r3 = r1 >> 2;
+ r4 = heap32[(r3+2)];
+ if(r4 ==0) //_LBB344_8
+{
+ r1 = heapU8[r1+16];
+if(!(r1 !=0)) //_LBB344_11
+{
+ r1 = heap32[(r3)];
+if(!(r1 ==0)) //_LBB344_11
+{
+ r4 = gNumAlignedFree;
+ r4 = r4 >> 2;
+ r5 = heap32[(r4)];
+ r5 = (r5 + 1)|0;
+ r1 = r1 >> 2;
+ heap32[(r4)] = r5;
+ r1 = heap32[(r1+-1)];
+ heap32[(g0)] = r1;
+ free(i7);
+}
+}
+ heap32[(r3)] = 0;
+ heap32[(r3+2)] = 0;
+ r1 = heap32[(r2+2)];
+ if(r1 ==0) //_LBB344_13
+{
+break _1;
+}
+else{
+ r3 = gNumAlignedFree;
+ r3 = r3 >> 2;
+ r4 = heap32[(r3)];
+ r4 = (r4 + 1)|0;
+ r1 = r1 >> 2;
+ heap32[(r3)] = r4;
+ r1 = heap32[(r1+-1)];
+ heap32[(g0)] = r1;
+ free(i7);
+break _1;
+}
+}
+}
+ r0 = _2E_str128;
+ r1 = _2E_str1129;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 49;
+ _assert(i7);
+}
+} while(0);
+ r1 = heapU8[r0+28];
+if(!(r1 ==0)) //_LBB344_19
+{
+ r1 = heap32[(r2+6)];
+ r3 = r1 >> 2;
+ r3 = heap32[(r3+4)];
+ if(r3 !=0) //_LBB344_16
+{
+ r1 = gNumAlignedFree;
+ r1 = r1 >> 2;
+ r4 = heap32[(r1)];
+ r4 = (r4 + 1)|0;
+ r3 = r3 >> 2;
+ heap32[(r1)] = r4;
+ r1 = heap32[(r3+-1)];
+ heap32[(g0)] = r1;
+ free(i7);
+ r1 = heap32[(r2+6)];
+}
+if(!(r1 ==0)) //_LBB344_19
+{
+ r3 = gNumAlignedFree;
+ r3 = r3 >> 2;
+ r4 = heap32[(r3)];
+ r4 = (r4 + 1)|0;
+ r1 = r1 >> 2;
+ heap32[(r3)] = r4;
+ r1 = heap32[(r1+-1)];
+ heap32[(g0)] = r1;
+ free(i7);
+}
+}
+ r0 = heapU8[r0+20];
+if(!(r0 ==0)) //_LBB344_25
+{
+ r0 = heap32[(r2+4)];
+ r1 = r0 >> 2;
+ r1 = heap32[(r1+4)];
+ if(r1 !=0) //_LBB344_22
+{
+ r0 = gNumAlignedFree;
+ r0 = r0 >> 2;
+ r3 = heap32[(r0)];
+ r3 = (r3 + 1)|0;
+ r1 = r1 >> 2;
+ heap32[(r0)] = r3;
+ r0 = heap32[(r1+-1)];
+ heap32[(g0)] = r0;
+ free(i7);
+ r0 = heap32[(r2+4)];
+}
+if(!(r0 ==0)) //_LBB344_25
+{
+ r1 = gNumAlignedFree;
+ r1 = r1 >> 2;
+ r3 = heap32[(r1)];
+ r3 = (r3 + 1)|0;
+ r0 = r0 >> 2;
+ heap32[(r1)] = r3;
+ r0 = heap32[(r0+-1)];
+ heap32[(g0)] = r0;
+ free(i7);
+}
+}
+ r0 = heap32[(r2+10)];
+ r1 = r0 >> 2;
+ r1 = heap32[(r1)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+ r0 = heap32[(r2+10)];
+if(!(r0 ==0)) //_LBB344_27
+{
+ r1 = gNumAlignedFree;
+ r1 = r1 >> 2;
+ r3 = heap32[(r1)];
+ r3 = (r3 + 1)|0;
+ r0 = r0 >> 2;
+ heap32[(r1)] = r3;
+ r0 = heap32[(r0+-1)];
+ heap32[(g0)] = r0;
+ free(i7);
+}
+ r0 = heap32[(r2+11)];
+ r1 = r0 >> 2;
+ r1 = heap32[(r1)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+ r0 = heap32[(r2+11)];
+if(!(r0 ==0)) //_LBB344_29
+{
+ r1 = gNumAlignedFree;
+ r1 = r1 >> 2;
+ r3 = heap32[(r1)];
+ r3 = (r3 + 1)|0;
+ r0 = r0 >> 2;
+ heap32[(r1)] = r3;
+ r0 = heap32[(r0+-1)];
+ heap32[(g0)] = r0;
+ free(i7);
+}
+ r0 = heap32[(r2+12)];
+ r1 = r0 >> 2;
+ r1 = heap32[(r1)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+ r0 = heap32[(r2+12)];
+if(!(r0 ==0)) //_LBB344_31
+{
+ r1 = gNumAlignedFree;
+ r1 = r1 >> 2;
+ r3 = heap32[(r1)];
+ r3 = (r3 + 1)|0;
+ r0 = r0 >> 2;
+ heap32[(r1)] = r3;
+ r0 = heap32[(r0+-1)];
+ heap32[(g0)] = r0;
+ free(i7);
+}
+ r0 = heap32[(r2+13)];
+ r1 = r0 >> 2;
+ r1 = heap32[(r1)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+ r0 = heap32[(r2+13)];
+if(!(r0 ==0)) //_LBB344_33
+{
+ r1 = gNumAlignedFree;
+ r1 = r1 >> 2;
+ r3 = heap32[(r1)];
+ r3 = (r3 + 1)|0;
+ r0 = r0 >> 2;
+ heap32[(r1)] = r3;
+ r0 = heap32[(r0+-1)];
+ heap32[(g0)] = r0;
+ free(i7);
+}
+ r0 = heap32[(r2+14)];
+ r1 = r0 >> 2;
+ r1 = heap32[(r1)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+ r0 = heap32[(r2+14)];
+if(!(r0 ==0)) //_LBB344_35
+{
+ r1 = gNumAlignedFree;
+ r1 = r1 >> 2;
+ r3 = heap32[(r1)];
+ r3 = (r3 + 1)|0;
+ r0 = r0 >> 2;
+ heap32[(r1)] = r3;
+ r0 = heap32[(r0+-1)];
+ heap32[(g0)] = r0;
+ free(i7);
+}
+ r0 = heap32[(r2+15)];
+ r1 = r0 >> 2;
+ r1 = heap32[(r1)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+ r0 = heap32[(r2+15)];
+if(!(r0 ==0)) //_LBB344_37
+{
+ r1 = gNumAlignedFree;
+ r1 = r1 >> 2;
+ r3 = heap32[(r1)];
+ r3 = (r3 + 1)|0;
+ r0 = r0 >> 2;
+ heap32[(r1)] = r3;
+ r0 = heap32[(r0+-1)];
+ heap32[(g0)] = r0;
+ free(i7);
+}
+ r0 = heap32[(r2+16)];
+ r1 = r0 >> 2;
+ r1 = heap32[(r1)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+ r0 = heap32[(r2+16)];
+if(!(r0 ==0)) //_LBB344_39
+{
+ r1 = gNumAlignedFree;
+ r1 = r1 >> 2;
+ r3 = heap32[(r1)];
+ r3 = (r3 + 1)|0;
+ r0 = r0 >> 2;
+ heap32[(r1)] = r3;
+ r0 = heap32[(r0+-1)];
+ heap32[(g0)] = r0;
+ free(i7);
+}
+ r0 = heap32[(r2+18)];
+ r1 = r0 >> 2;
+ r1 = heap32[(r1)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+ r0 = heap32[(r2+18)];
+if(!(r0 ==0)) //_LBB344_41
+{
+ r1 = gNumAlignedFree;
+ r1 = r1 >> 2;
+ r3 = heap32[(r1)];
+ r3 = (r3 + 1)|0;
+ r0 = r0 >> 2;
+ heap32[(r1)] = r3;
+ r0 = heap32[(r0+-1)];
+ heap32[(g0)] = r0;
+ free(i7);
+}
+ r0 = heap32[(r2+19)];
+ r1 = r0 >> 2;
+ r1 = heap32[(r1)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+ r0 = heap32[(r2+19)];
+if(!(r0 ==0)) //_LBB344_43
+{
+ r1 = gNumAlignedFree;
+ r1 = r1 >> 2;
+ r3 = heap32[(r1)];
+ r3 = (r3 + 1)|0;
+ r0 = r0 >> 2;
+ heap32[(r1)] = r3;
+ r0 = heap32[(r0+-1)];
+ heap32[(g0)] = r0;
+ free(i7);
+}
+ r0 = heap32[(r2+17)];
+ r1 = r0 >> 2;
+ r1 = heap32[(r1)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+ r0 = heap32[(r2+17)];
+if(!(r0 ==0)) //_LBB344_45
+{
+ r1 = gNumAlignedFree;
+ r1 = r1 >> 2;
+ r3 = heap32[(r1)];
+ r3 = (r3 + 1)|0;
+ r0 = r0 >> 2;
+ heap32[(r1)] = r3;
+ r0 = heap32[(r0+-1)];
+ heap32[(g0)] = r0;
+ free(i7);
+}
+ r0 = heap32[(r2+21)];
+ r1 = r0 >> 2;
+ r1 = heap32[(r1)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+ r0 = heap32[(r2+21)];
+if(!(r0 ==0)) //_LBB344_47
+{
+ r1 = gNumAlignedFree;
+ r1 = r1 >> 2;
+ r3 = heap32[(r1)];
+ r3 = (r3 + 1)|0;
+ r0 = r0 >> 2;
+ heap32[(r1)] = r3;
+ r0 = heap32[(r0+-1)];
+ heap32[(g0)] = r0;
+ free(i7);
+}
+ r0 = heap32[(r2+20)];
+ r1 = r0 >> 2;
+ r1 = heap32[(r1)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+ r0 = heap32[(r2+20)];
+if(!(r0 ==0)) //_LBB344_49
+{
+ r1 = gNumAlignedFree;
+ r1 = r1 >> 2;
+ r3 = heap32[(r1)];
+ r3 = (r3 + 1)|0;
+ r0 = r0 >> 2;
+ heap32[(r1)] = r3;
+ r0 = heap32[(r0+-1)];
+ heap32[(g0)] = r0;
+ free(i7);
+}
+ r0 = heap32[(r2+8)];
+if(!(r0 ==0)) //_LBB344_51
+{
+ r1 = gNumAlignedFree;
+ r1 = r1 >> 2;
+ r3 = heap32[(r1)];
+ r3 = (r3 + 1)|0;
+ r0 = r0 >> 2;
+ heap32[(r1)] = r3;
+ r0 = heap32[(r0+-1)];
+ heap32[(g0)] = r0;
+ free(i7);
+}
+ r0 = heap32[(r2+9)];
+ r1 = r0 >> 2;
+ r1 = heap32[(r1)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+ r0 = heap32[(r2+9)];
+if(!(r0 ==0)) //_LBB344_53
+{
+ r1 = gNumAlignedFree;
+ r1 = r1 >> 2;
+ r2 = heap32[(r1)];
+ r2 = (r2 + 1)|0;
+ r0 = r0 >> 2;
+ heap32[(r1)] = r2;
+ r0 = heap32[(r0+-1)];
+ heap32[(g0)] = r0;
+ free(i7);
+}
+ return;
+}
+
+function _ZN16btEmptyAlgorithm22getAllContactManifoldsER20btAlignedObjectArrayIP20btPersistentManifoldE(sp)
+{
+ var i7;
+ var fp = sp>>2;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ return;
+}
+
+function _ZN16btEmptyAlgorithm16processCollisionEP17btCollisionObjectS1_RK16btDispatcherInfoP16btManifoldResult(sp)
+{
+ var i7;
+ var fp = sp>>2;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ return;
+}
+
+function _ZN16btEmptyAlgorithm21calculateTimeOfImpactEP17btCollisionObjectS1_RK16btDispatcherInfoP16btManifoldResult(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var f0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ f0 = 1;
+ f_g0 = f0;
+ return;
+}
+
+function _ZN16btEmptyAlgorithmD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV16btEmptyAlgorithm;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZN16btEmptyAlgorithmD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV16btEmptyAlgorithm;
+ r0 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r0)] = r1;
+ return;
+}
+
+function _ZN16btManifoldResultD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV16btManifoldResult;
+ r0 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r0)] = r1;
+ return;
+}
+
+function _ZN16btManifoldResultD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV16btManifoldResult;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZN16btManifoldResult15addContactPointERK9btVector3S2_f(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+ var f10;
+ var f11;
+ var f12;
+ var f13;
+ var f14;
+ var f15;
+ var f16;
+ var f17;
+ var f18;
+ var f19;
+ var f20;
+ var f21;
+ var f22;
+ var f23;
+ var f24;
+ var f25;
+ var f26;
+ var f27;
+ var f28;
+ var f29;
+ var f30;
+var __label__ = 0;
+ i7 = sp + -304;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r1 = heap32[(r0+1)];
+ if(r1 !=0) //_LBB352_2
+{
+ f0 = heapFloat[(fp+3)];
+ r2 = r1 >> 2;
+ f1 = heapFloat[(r2+280)];
+if(!(f1 <f0)) //_LBB352_53
+{
+ r3 = heap32[(fp+1)];
+ r4 = heap32[(fp+2)];
+ r3 = r3 >> 2;
+ r4 = r4 >> 2;
+ f1 = heapFloat[(r3+2)];
+ heapFloat[(fp+-71)] = f1;
+ f2 = heapFloat[(r3+1)];
+ f3 = heapFloat[(r3)];
+ f4 = heapFloat[(r4+2)];
+ f1 = f1*f0;
+ f5 = heapFloat[(r4+1)];
+ f6 = f2*f0;
+ f7 = heapFloat[(r4)];
+ f8 = f3*f0;
+ r5 = heap32[(r2+277)];
+ r6 = heap32[(r0+34)];
+ f1 = f4+f1;
+ f6 = f5+f6;
+ f8 = f7+f8;
+ if(r5 ==r6) //_LBB352_5
+{
+ f9 = heapFloat[(r0+14)];
+ f10 = heapFloat[(r0+15)];
+ f11 = heapFloat[(r0+30)];
+ f13 = heapFloat[(r0+31)];
+ f14 = heapFloat[(r0+4)];
+ f9 = f8-f9;
+ f15 = heapFloat[(r0+3)];
+ f12 = heapFloat[(r0+2)];
+ f16 = heapFloat[(r0+8)];
+ f10 = f6-f10;
+ f17 = heapFloat[(r0+7)];
+ f18 = heapFloat[(r0+6)];
+ f19 = heapFloat[(r0+16)];
+ f20 = heapFloat[(r0+20)];
+ f11 = f7-f11;
+ f21 = heapFloat[(r0+19)];
+ f22 = heapFloat[(r0+18)];
+ f23 = heapFloat[(r0+24)];
+ f13 = f5-f13;
+ f24 = heapFloat[(r0+23)];
+ f25 = heapFloat[(r0+22)];
+ f26 = heapFloat[(r0+32)];
+ f14 = f14*f9;
+ f16 = f16*f10;
+ f27 = heapFloat[(r0+12)];
+ f19 = f1-f19;
+ f28 = heapFloat[(r0+11)];
+ f29 = heapFloat[(r0+10)];
+ f15 = f15*f9;
+ f17 = f17*f10;
+ f9 = f12*f9;
+ f10 = f18*f10;
+ f12 = f20*f11;
+ f18 = f23*f13;
+ f20 = heapFloat[(r0+28)];
+ f23 = f4-f26;
+ f26 = heapFloat[(r0+27)];
+ f30 = heapFloat[(r0+26)];
+ f21 = f21*f11;
+ f24 = f24*f13;
+ f11 = f22*f11;
+ f13 = f25*f13;
+ f14 = f14+f16;
+ f16 = f27*f19;
+ f15 = f15+f17;
+ f17 = f28*f19;
+ f9 = f9+f10;
+ f10 = f29*f19;
+ f12 = f12+f18;
+ f18 = f20*f23;
+ f19 = f21+f24;
+ f20 = f26*f23;
+ f11 = f11+f13;
+ f21 = f30*f23;
+ f13 = f14+f16;
+ f14 = f15+f17;
+ f9 = f9+f10;
+ f10 = f12+f18;
+ f15 = f19+f20;
+ f11 = f11+f21;
+}
+else{
+ f9 = heapFloat[(r0+30)];
+ f10 = heapFloat[(r0+31)];
+ f11 = heapFloat[(r0+14)];
+ f12 = heapFloat[(r0+15)];
+ f13 = heapFloat[(r0+20)];
+ f9 = f8-f9;
+ f14 = heapFloat[(r0+19)];
+ f15 = heapFloat[(r0+18)];
+ f16 = heapFloat[(r0+24)];
+ f10 = f6-f10;
+ f17 = heapFloat[(r0+23)];
+ f18 = heapFloat[(r0+22)];
+ f19 = heapFloat[(r0+32)];
+ f20 = heapFloat[(r0+4)];
+ f11 = f7-f11;
+ f21 = heapFloat[(r0+3)];
+ f22 = heapFloat[(r0+2)];
+ f23 = heapFloat[(r0+8)];
+ f12 = f5-f12;
+ f24 = heapFloat[(r0+7)];
+ f25 = heapFloat[(r0+6)];
+ f26 = heapFloat[(r0+16)];
+ f13 = f13*f9;
+ f16 = f16*f10;
+ f27 = heapFloat[(r0+28)];
+ f19 = f1-f19;
+ f28 = heapFloat[(r0+27)];
+ f29 = heapFloat[(r0+26)];
+ f14 = f14*f9;
+ f17 = f17*f10;
+ f9 = f15*f9;
+ f10 = f18*f10;
+ f15 = f20*f11;
+ f18 = f23*f12;
+ f20 = heapFloat[(r0+12)];
+ f23 = f4-f26;
+ f26 = heapFloat[(r0+11)];
+ f30 = heapFloat[(r0+10)];
+ f21 = f21*f11;
+ f24 = f24*f12;
+ f11 = f22*f11;
+ f12 = f25*f12;
+ f13 = f13+f16;
+ f16 = f27*f19;
+ f14 = f14+f17;
+ f17 = f28*f19;
+ f9 = f9+f10;
+ f10 = f29*f19;
+ f15 = f15+f18;
+ f18 = f20*f23;
+ f19 = f21+f24;
+ f20 = f26*f23;
+ f11 = f11+f12;
+ f12 = f30*f23;
+ f13 = f13+f16;
+ f14 = f14+f17;
+ f9 = f9+f10;
+ f10 = f15+f18;
+ f15 = f19+f20;
+ f11 = f11+f12;
+}
+ r7 = sp + -280;
+ r8 = r7 >> 2;
+ heapFloat[(fp+-70)] = f9;
+ heapFloat[(r8+1)] = f14;
+ heapFloat[(r8+2)] = f13;
+ heap32[(r8+3)] = 0;
+ heapFloat[(r8+4)] = f11;
+ heapFloat[(r8+5)] = f15;
+ heapFloat[(r8+6)] = f10;
+ heap32[(r8+7)] = 0;
+ heapFloat[(r8+16)] = f3;
+ heapFloat[(r8+17)] = f2;
+ f2 = heapFloat[(fp+-71)];
+ heapFloat[(r8+18)] = f2;
+ heap32[(r8+19)] = heap32[(r3+3)];
+ heapFloat[(r8+20)] = f0;
+ heap32[(r8+21)] = 0;
+ heap32[(r8+22)] = 0;
+ heap32[(r8+27)] = 0;
+ r3 = 0;
+ heap32[(r8+28)] = 0;
+ heap8[sp+-164] = r3;
+ heap32[(r8+30)] = 0;
+ heap32[(r8+31)] = 0;
+ heap32[(r8+32)] = 0;
+ heap32[(r8+33)] = 0;
+ heap32[(r8+34)] = 0;
+ heap32[(r8+35)] = 0;
+ heap32[(r8+36)] = 0;
+ heap32[(r8+52)] = 0;
+ heap32[(r8+60)] = 0;
+ heap32[(r8+68)] = 0;
+ heapFloat[(r8+12)] = f8;
+ heapFloat[(r8+13)] = f6;
+ heapFloat[(r8+14)] = f1;
+ heap32[(r8+15)] = 0;
+ heapFloat[(r8+8)] = f7;
+ heapFloat[(r8+9)] = f5;
+ heapFloat[(r8+10)] = f4;
+ heap32[(r8+11)] = heap32[(r4+3)];
+ r4 = heap32[(r2+279)];
+_9: do {
+ if(r4 >0) //_LBB352_8
+{
+ f1 = heapFloat[(r2+280)];
+ f1 = f1*f1;
+ r10 = 0;
+ r9 = -1;
+_11: while(true){
+ r11 = (r10 * 69)|0;
+ r11 = r11 << 2;
+ r11 = (r1 + r11)|0;
+ r11 = r11 >> 2;
+ f2 = heapFloat[(r11+1)];
+ f3 = heapFloat[(r11+2)];
+ f2 = f2-f9;
+ f3 = f3-f14;
+ f4 = heapFloat[(r11+3)];
+ f4 = f4-f13;
+ f2 = f2*f2;
+ f3 = f3*f3;
+ f2 = f2+f3;
+ f3 = f4*f4;
+ f2 = f2+f3;
+ r11 = (r10 + 1)|0;
+ r9 = f2 < f1 ? r10 : r9;
+ f1 = f2 < f1 ? f2 : f1;
+ r10 = r11;
+if(!(r4 !=r11)) //_LBB352_9
+{
+break _9;
+}
+}
+}
+else{
+ r9 = -1;
+}
+} while(0);
+ r4 = heap32[(r0+35)];
+ r4 = r4 >> 2;
+ r10 = r6 >> 2;
+ f1 = heapFloat[(r10+56)];
+ f2 = heapFloat[(r4+56)];
+ f1 = f1*f2;
+ f2 = -10;
+ f1 = f1 < f2 ? f2 : f1;
+ f2 = 10;
+ f1 = f1 > f2 ? f2 : f1;
+ heapFloat[(r8+21)] = f1;
+ f1 = heapFloat[(r10+57)];
+ f2 = heapFloat[(r4+57)];
+ f1 = f1*f2;
+ heapFloat[(r8+22)] = f1;
+ if(r5 ==r6) //_LBB352_12
+{
+ r4 = heap32[(r0+36)];
+ heap32[(r8+23)] = r4;
+ r4 = heap32[(r0+37)];
+ heap32[(r8+24)] = r4;
+ r4 = heap32[(r0+38)];
+ heap32[(r8+25)] = r4;
+ r0 = heap32[(r0+39)];
+ heap32[(r8+26)] = r0;
+}
+else{
+ r4 = heap32[(r0+37)];
+ heap32[(r8+23)] = r4;
+ r4 = heap32[(r0+36)];
+ heap32[(r8+24)] = r4;
+ r4 = heap32[(r0+39)];
+ heap32[(r8+25)] = r4;
+ r0 = heap32[(r0+38)];
+ heap32[(r8+26)] = r0;
+}
+ f1 = heapFloat[(r2+280)];
+ if(r9 <0) //_LBB352_19
+{
+ if(f1 >=f0) //_LBB352_21
+{
+ r0 = heap32[(r2+279)];
+ if(r0 !=4) //_LBB352_49
+{
+ r4 = (r0 + 1)|0;
+ heap32[(r2+279)] = r4;
+}
+else{
+ f1 = heapFloat[(r2+21)];
+ r0 = -1;
+ f2 = heapFloat[(r2+90)];
+ f3 = f1 < f0 ? f1 : f0;
+ r4 = 1;
+ f4 = heapFloat[(r2+159)];
+ f5 = f2 < f3 ? f2 : f3;
+ r5 = 2;
+ f6 = heapFloat[(r2+228)];
+ f7 = f4 < f5 ? f4 : f5;
+ if(f6 >=f7) //_LBB352_24
+{
+ r6 = f1 >= f0 ? r0 : r3;
+ r6 = f2 < f3 ? r4 : r6;
+ r6 = f4 < f5 ? r5 : r6;
+ if(r6 ==0) //_LBB352_26
+{
+ f0 = heapFloat[(r2+210)];
+ f1 = heapFloat[(r2+141)];
+ f2 = heapFloat[(r2+209)];
+ f3 = heapFloat[(r2+140)];
+ f4 = heapFloat[(r2+208)];
+ f5 = heapFloat[(r2+139)];
+ f6 = heapFloat[(r2+72)];
+ f7 = heapFloat[(r2+71)];
+ f8 = heapFloat[(r2+70)];
+ f10 = 0;
+ r6 = r3;
+__label__ = 28;
+}
+else{
+__label__ = 26;
+}
+}
+else{
+ r6 = 3;
+__label__ = 26;
+}
+if (__label__ == 26){
+ f6 = heapFloat[(r2+72)];
+ f0 = heapFloat[(r2+210)];
+ f1 = heapFloat[(r2+141)];
+ f8 = heapFloat[(r2+70)];
+ f2 = heapFloat[(r2+209)];
+ f3 = heapFloat[(r2+140)];
+ f7 = heapFloat[(r2+71)];
+ f4 = heapFloat[(r2+208)];
+ f5 = heapFloat[(r2+139)];
+ f10 = f13-f6;
+ f11 = f2-f3;
+ f12 = f9-f8;
+ f15 = f0-f1;
+ f16 = f14-f7;
+ f17 = f4-f5;
+ f18 = f16*f15;
+ f19 = f10*f11;
+ f10 = f10*f17;
+ f15 = f12*f15;
+ f18 = f18-f19;
+ f10 = f10-f15;
+ f11 = f12*f11;
+ f12 = f16*f17;
+ f11 = f11-f12;
+ f12 = f18*f18;
+ f10 = f10*f10;
+ f10 = f12+f10;
+ f11 = f11*f11;
+ f10 = f10+f11;
+ if(r6 ==1) //_LBB352_29
+{
+ f11 = heapFloat[(r2+3)];
+ f12 = heapFloat[(r2+2)];
+ f15 = heapFloat[(r2+1)];
+ f16 = 0;
+ r6 = r4;
+__label__ = 30;
+}
+else{
+__label__ = 28;
+}
+}
+if (__label__ == 28){
+ f11 = heapFloat[(r2+3)];
+ f15 = heapFloat[(r2+1)];
+ f12 = heapFloat[(r2+2)];
+ f16 = f13-f11;
+ f17 = f2-f3;
+ f18 = f9-f15;
+ f19 = f0-f1;
+ f20 = f14-f12;
+ f21 = f4-f5;
+ f22 = f20*f19;
+ f23 = f16*f17;
+ f16 = f16*f21;
+ f19 = f18*f19;
+ f22 = f22-f23;
+ f16 = f16-f19;
+ f17 = f18*f17;
+ f18 = f20*f21;
+ f17 = f17-f18;
+ f18 = f22*f22;
+ f16 = f16*f16;
+ f16 = f18+f16;
+ f17 = f17*f17;
+ f16 = f16+f17;
+ if(r6 ==2) //_LBB352_32
+{
+ f0 = 0;
+__label__ = 32;
+}
+else{
+__label__ = 30;
+}
+}
+if (__label__ == 30){
+ f17 = f13-f11;
+ f2 = f2-f7;
+ f18 = f9-f15;
+ f0 = f0-f6;
+ f19 = f14-f12;
+ f4 = f4-f8;
+ f20 = f19*f0;
+ f21 = f17*f2;
+ f17 = f17*f4;
+ f0 = f18*f0;
+ f20 = f20-f21;
+ f0 = f17-f0;
+ f2 = f18*f2;
+ f4 = f19*f4;
+ f2 = f2-f4;
+ f4 = f20*f20;
+ f0 = f0*f0;
+ f0 = f4+f0;
+ f2 = f2*f2;
+ f0 = f0+f2;
+ if(r6 ==3) //_LBB352_35
+{
+ f1 = 0;
+__label__ = 34;
+}
+else{
+__label__ = 32;
+}
+}
+if (__label__ == 32){
+ f2 = f13-f11;
+ f3 = f3-f7;
+ f4 = f9-f15;
+ f1 = f1-f6;
+ f6 = f14-f12;
+ f5 = f5-f8;
+ f7 = f6*f1;
+ f8 = f2*f3;
+ f2 = f2*f5;
+ f1 = f4*f1;
+ f7 = f7-f8;
+ f1 = f2-f1;
+ f2 = f4*f3;
+ f3 = f6*f5;
+ f2 = f2-f3;
+ f3 = f7*f7;
+ f1 = f1*f1;
+ f1 = f3+f1;
+ f2 = f2*f2;
+ f1 = f1+f2;
+ f2 = 0;
+ if(f1 <f2) //_LBB352_38
+{
+ f1 = -f1;
+}
+}
+ f2 = 0;
+ if(f0 <f2) //_LBB352_41
+{
+ f0 = -f0;
+}
+ if(f16 <f2) //_LBB352_44
+{
+ f16 = -f16;
+}
+ if(f10 <f2) //_LBB352_47
+{
+ f10 = -f10;
+}
+ f2 = -999999984306749440;
+ r2 = 0;
+ f3 = f10 > f2 ? f10 : f2;
+ r0 = f10 <= f2 ? r0 : r2;
+ f2 = f16 > f3 ? f16 : f3;
+ r0 = f16 > f3 ? r4 : r0;
+ f3 = f0 > f2 ? f0 : f2;
+ r2 = 3;
+ r0 = f0 > f2 ? r5 : r0;
+ r0 = f1 > f3 ? r2 : r0;
+}
+ r0 = r0 < 0 ? r3 : r0;
+ r0 = (r0 * 276)|0;
+ r0 = (r1 + r0)|0;
+ r1 = r0 >> 2;
+ r1 = heap32[(r1+28)];
+ if(r1 ==0) //_LBB352_52
+{
+ r0 = (r0 + 4)|0;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r7;
+ heap32[(g0+2)] = 276;
+ memcpy(i7);
+}
+else{
+ r0 = _2E_str4438;
+ r7 = _2E_str3437;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r7;
+ heap32[(g0+2)] = 190;
+ _assert(i7);
+}
+}
+else{
+ r1 = _2E_str2149;
+ r2 = _2E_str3437;
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r2;
+ heap32[(g0+2)] = 168;
+ _assert(i7);
+}
+}
+else{
+ if(f1 >=f0) //_LBB352_16
+{
+ r2 = (r9 * 276)|0;
+ r1 = (r1 + r2)|0;
+ r2 = r1 >> 2;
+ r3 = heap32[(r2+37)];
+ if(r3 >-1) //_LBB352_18
+{
+ f0 = heapFloat[(r2+53)];
+ f1 = heapFloat[(r2+61)];
+ f9 = heapFloat[(r2+69)];
+ r0 = heap32[(r2+28)];
+ r1 = (r1 + 4)|0;
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r7;
+ heap32[(g0+2)] = 276;
+ memcpy(i7);
+ heap32[(r2+28)] = r0;
+ heapFloat[(r2+29)] = f0;
+ heapFloat[(r2+31)] = f1;
+ heapFloat[(r2+32)] = f9;
+ heapFloat[(r2+53)] = f0;
+ heapFloat[(r2+61)] = f1;
+ heapFloat[(r2+69)] = f9;
+ heap32[(r2+37)] = r3;
+ return;
+}
+else{
+ r1 = _2E_str3150;
+ r2 = _2E_str483;
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r2;
+ heap32[(g0+2)] = 177;
+ _assert(i7);
+}
+}
+else{
+ r1 = _2E_str2149;
+ r2 = _2E_str483;
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r2;
+ heap32[(g0+2)] = 165;
+ _assert(i7);
+}
+}
+}
+ return;
+}
+else{
+ r0 = _2E_str59;
+ r1 = _2E_str5152;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 64;
+ _assert(i7);
+}
+}
+
+function _ZN25btSimulationIslandManager26storeIslandActivationStateEP16btCollisionWorld(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ r0 = r0 >> 2;
+ r1 = heap32[(r0+2)];
+if(!(r1 <1)) //_LBB353_10
+{
+ r1 = heap32[(fp)];
+ r2 = 0;
+ r3 = r2;
+_3: while(true){
+ r4 = heap32[(r0+4)];
+ r5 = r2 << 2;
+ r4 = (r4 + r5)|0;
+ r4 = r4 >> 2;
+ r4 = heap32[(r4)];
+ r5 = (r2 + 1)|0;
+ r6 = heapU8[r4+204];
+ r6 = r6 & 3;
+ if(r6 !=0) //_LBB353_8
+{
+ r2 = r4 >> 2;
+ heap32[(r2+52)] = -1;
+ heap32[(r2+53)] = -2;
+}
+else{
+ r6 = r1 >> 2;
+ r7 = heap32[(r6+4)];
+ r8 = r3 << 3;
+ r9 = (r7 + r8)|0;
+ r9 = r9 >> 2;
+ r9 = heap32[(r9)];
+ if(r9 ==r3) //_LBB353_5
+{
+ r10 = r3;
+}
+else{
+ r10 = r3;
+_11: while(true){
+ r9 = r9 << 3;
+ r10 = r10 << 3;
+ r9 = (r7 + r9)|0;
+ r7 = (r7 + r10)|0;
+ r9 = r9 >> 2;
+ r7 = r7 >> 2;
+ r10 = heap32[(r9)];
+ heap32[(r7)] = r10;
+ r10 = heap32[(r9)];
+ r7 = heap32[(r6+4)];
+ r9 = r10 << 3;
+ r9 = (r7 + r9)|0;
+ r9 = r9 >> 2;
+ r9 = heap32[(r9)];
+if(!(r9 !=r10)) //_LBB353_6
+{
+break _11;
+}
+}
+}
+ r4 = r4 >> 2;
+ heap32[(r4+52)] = r10;
+ r6 = heap32[(r6+4)];
+ r6 = (r6 + r8)|0;
+ r6 = r6 >> 2;
+ r3 = (r3 + 1)|0;
+ heap32[(r6+1)] = r2;
+ heap32[(r4+53)] = -1;
+}
+ r4 = heap32[(r0+2)];
+ r2 = r5;
+ if(r4 >r5) //_LBB353_2
+{
+continue _3;
+}
+else{
+break _3;
+}
+}
+}
+ return;
+}
+
+function _ZN20btAlignedObjectArrayIP20btPersistentManifoldE17quickSortInternalI33btPersistentManifoldSortPredicateEEvT_ii(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+ var r13;
+ var r14;
+ var r15;
+ var r16;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+2)];
+ r1 = heap32[(fp+1)];
+ r2 = (r0 + r1)|0;
+ r3 = r2 >>> 31;
+ r4 = heap32[(fp)];
+ r2 = (r2 + r3)|0;
+ r3 = r4 >> 2;
+ r2 = r2 & 2147483646;
+ r5 = heap32[(r3+3)];
+ r2 = r2 << 1;
+ r2 = (r5 + r2)|0;
+ r2 = r2 >> 2;
+ r2 = heap32[(r2)];
+ r5 = r1;
+ r6 = r0;
+_1: while(true){
+ r7 = r2 >> 2;
+ r8 = heap32[(r7+277)];
+ r8 = r8 >> 2;
+ r9 = heap32[(r3+3)];
+ r8 = heap32[(r8+52)];
+_3: while(true){
+ r10 = r5 << 2;
+ r10 = (r9 + r10)|0;
+ r10 = r10 >> 2;
+ r11 = heap32[(r10)];
+ r12 = r11 >> 2;
+ r13 = heap32[(r12+277)];
+ r13 = r13 >> 2;
+ r13 = heap32[(r13+52)];
+ if(r13 <0) //_LBB354_5
+{
+ r13 = heap32[(r12+278)];
+ r13 = r13 >> 2;
+ r13 = heap32[(r13+52)];
+}
+ if(r8 <0) //_LBB354_8
+{
+ r12 = heap32[(r7+278)];
+ r12 = r12 >> 2;
+ r12 = heap32[(r12+52)];
+}
+else{
+ r12 = r8;
+}
+ if(r13 <r12) //_LBB354_2
+{
+ r5 = (r5 + 1)|0;
+continue _3;
+}
+else{
+break _3;
+}
+}
+_13: while(true){
+ r12 = r6 << 2;
+ r13 = (r9 + r12)|0;
+ r13 = r13 >> 2;
+ r13 = heap32[(r13)];
+ if(r8 <0) //_LBB354_13
+{
+ r14 = heap32[(r7+278)];
+ r14 = r14 >> 2;
+ r14 = heap32[(r14+52)];
+}
+else{
+ r14 = r8;
+}
+ r15 = r13 >> 2;
+ r16 = heap32[(r15+277)];
+ r16 = r16 >> 2;
+ r16 = heap32[(r16+52)];
+ if(r16 <0) //_LBB354_16
+{
+ r16 = heap32[(r15+278)];
+ r16 = r16 >> 2;
+ r16 = heap32[(r16+52)];
+}
+ if(r14 <r16) //_LBB354_10
+{
+ r6 = (r6 + -1)|0;
+continue _13;
+}
+else{
+break _13;
+}
+}
+ if(r5 <=r6) //_LBB354_20
+{
+ heap32[(r10)] = r13;
+ r7 = heap32[(r3+3)];
+ r7 = (r7 + r12)|0;
+ r5 = (r5 + 1)|0;
+ r6 = (r6 + -1)|0;
+ r7 = r7 >> 2;
+ heap32[(r7)] = r11;
+}
+ if(r5 <=r6) //_LBB354_1
+{
+continue _1;
+}
+else{
+break _1;
+}
+}
+if(!(r6 <=r1)) //_LBB354_24
+{
+ heap32[(g0)] = r4;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = r6;
+ _ZN20btAlignedObjectArrayIP20btPersistentManifoldE17quickSortInternalI33btPersistentManifoldSortPredicateEEvT_ii(i7);
+}
+if(!(r5 >=r0)) //_LBB354_26
+{
+ heap32[(g0)] = r4;
+ heap32[(g0+1)] = r5;
+ heap32[(g0+2)] = r0;
+ _ZN20btAlignedObjectArrayIP20btPersistentManifoldE17quickSortInternalI33btPersistentManifoldSortPredicateEEvT_ii(i7);
+}
+ return;
+}
+
+function _ZN25btSimulationIslandManager21updateActivationStateEP16btCollisionWorldP12btDispatcher(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ r1 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r2 = heap32[(r0+2)];
+_1: do {
+ if(r2 >0) //_LBB355_2
+{
+ r3 = 0;
+ r2 = r3;
+_3: while(true){
+ r4 = heap32[(r0+4)];
+ r5 = r3 << 2;
+ r4 = (r4 + r5)|0;
+ r4 = r4 >> 2;
+ r4 = heap32[(r4)];
+ r3 = (r3 + 1)|0;
+ r5 = heapU8[r4+204];
+ r5 = r5 & 3;
+ if(r5 ==0) //_LBB355_5
+{
+ r5 = (r2 + 1)|0;
+ r6 = r4 >> 2;
+ heap32[(r6+52)] = r2;
+ r2 = r5;
+}
+ r4 = r4 >> 2;
+ heap32[(r4+53)] = -1;
+ heap32[(r4+60)] = 1065353216;
+ r4 = heap32[(r0+2)];
+ if(r4 >r3) //_LBB355_3
+{
+continue _3;
+}
+else{
+break _1;
+}
+}
+}
+else{
+ r2 = 0;
+}
+} while(0);
+ r3 = r1 >> 2;
+ r4 = heap32[(r3+2)];
+_10: do {
+if(!(r4 >r2)) //_LBB355_26
+{
+if(!(r4 >=r2)) //_LBB355_26
+{
+ r5 = heap32[(r3+3)];
+if(!(r5 >=r2)) //_LBB355_25
+{
+ if(r2 !=0) //_LBB355_12
+{
+ r5 = gNumAlignedAllocs;
+ r5 = r5 >> 2;
+ r6 = heap32[(r5)];
+ r7 = r2 << 3;
+ r6 = (r6 + 1)|0;
+ r7 = r7 | 3;
+ heap32[(r5)] = r6;
+ r5 = (r7 + 16)|0;
+ heap32[(g0)] = r5;
+ malloc(i7);
+ r5 = r_g0;
+ if(r5 !=0) //_LBB355_14
+{
+ r6 = 0;
+ r7 = (r5 + 4)|0;
+ r6 = (r6 - r7)|0;
+ r6 = r6 & 15;
+ r6 = (r5 + r6)|0;
+ r7 = (r6 + 4)|0;
+ r6 = r6 >> 2;
+ heap32[(r6)] = r5;
+ r5 = r7;
+}
+}
+else{
+ r5 = 0;
+}
+ r6 = (r1 + 16)|0;
+ if(r4 <1) //_LBB355_17
+{
+ r7 = r6 >> 2;
+ r8 = heap32[(r7)];
+}
+else{
+ r7 = 0;
+_23: while(true){
+ r8 = r6 >> 2;
+ r8 = heap32[(r8)];
+ r9 = r7 << 3;
+ r10 = (r8 + r9)|0;
+ r10 = r10 >> 2;
+ r9 = (r5 + r9)|0;
+ r11 = heap32[(r10+1)];
+ r10 = heap32[(r10)];
+ r9 = r9 >> 2;
+ r7 = (r7 + 1)|0;
+ heap32[(r9)] = r10;
+ heap32[(r9+1)] = r11;
+if(!(r4 !=r7)) //_LBB355_18
+{
+break _23;
+}
+}
+ r6 = (r1 + 16)|0;
+}
+if(!(r8 ==0)) //_LBB355_24
+{
+ r7 = heapU8[r1+20];
+if(!(r7 ==0)) //_LBB355_23
+{
+ r7 = gNumAlignedFree;
+ r7 = r7 >> 2;
+ r9 = heap32[(r7)];
+ r9 = (r9 + 1)|0;
+ r8 = r8 >> 2;
+ heap32[(r7)] = r9;
+ r7 = heap32[(r8+-1)];
+ heap32[(g0)] = r7;
+ free(i7);
+}
+ r7 = r6 >> 2;
+ heap32[(r7)] = 0;
+}
+ r7 = 1;
+ r6 = r6 >> 2;
+ heap8[r1+20] = r7;
+ heap32[(r6)] = r5;
+ heap32[(r3+3)] = r2;
+ if(r4 >=r2) //_LBB355_26
+{
+break _10;
+}
+}
+_33: while(true){
+ r1 = r4 << 3;
+ r5 = heap32[(r3+4)];
+ r1 = (r5 + r1)|0;
+ r1 = r1 >> 2;
+ r4 = (r4 + 1)|0;
+ heap32[(r1)] = 0;
+ heap32[(r1+1)] = 0;
+ if(r2 !=r4) //_LBB355_25
+{
+continue _33;
+}
+else{
+break _10;
+}
+}
+}
+}
+} while(0);
+ heap32[(r3+2)] = r2;
+_36: do {
+if(!(r2 <1)) //_LBB355_29
+{
+ r1 = 0;
+_38: while(true){
+ r4 = r1 << 3;
+ r5 = heap32[(r3+4)];
+ r5 = (r5 + r4)|0;
+ r5 = r5 >> 2;
+ heap32[(r5)] = r1;
+ r5 = heap32[(r3+4)];
+ r4 = (r5 + r4)|0;
+ r1 = (r1 + 1)|0;
+ r4 = r4 >> 2;
+ heap32[(r4+1)] = 1;
+ if(r2 !=r1) //_LBB355_28
+{
+continue _38;
+}
+else{
+break _36;
+}
+}
+}
+} while(0);
+ r0 = heap32[(r0+20)];
+ r1 = r0 >> 2;
+ r1 = heap32[(r1)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+9)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+ r0 = r_g0;
+ r1 = r0 >> 2;
+ r2 = heap32[(r1)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+9)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ r2 = r_g0;
+ r1 = heap32[(r1)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+5)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+ r0 = r_g0;
+_41: do {
+if(!(r2 <1)) //_LBB355_46
+{
+ r0 = (r0 + 4)|0;
+_43: while(true){
+ r1 = r0 >> 2;
+ r4 = heap32[(r1+-1)];
+ r4 = r4 >> 2;
+ r4 = heap32[(r4)];
+if(!(r4 ==0)) //_LBB355_45
+{
+ r1 = heap32[(r1)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1)];
+if(!(r1 ==0)) //_LBB355_45
+{
+ r4 = r4 >> 2;
+ r5 = heap32[(r4+51)];
+ r5 = r5 & 7;
+if(!(r5 !=0)) //_LBB355_45
+{
+ r5 = heapU8[r1+204];
+ r5 = r5 & 7;
+if(!(r5 !=0)) //_LBB355_45
+{
+ r4 = heap32[(r4+52)];
+ r5 = heap32[(r3+4)];
+ r6 = r4 << 3;
+ r6 = (r5 + r6)|0;
+ r6 = r6 >> 2;
+ r1 = r1 >> 2;
+ r6 = heap32[(r6)];
+ r1 = heap32[(r1+52)];
+if(!(r6 ==r4)) //_LBB355_37
+{
+_51: while(true){
+ r6 = r6 << 3;
+ r4 = r4 << 3;
+ r6 = (r5 + r6)|0;
+ r4 = (r5 + r4)|0;
+ r5 = r6 >> 2;
+ r4 = r4 >> 2;
+ r6 = heap32[(r5)];
+ heap32[(r4)] = r6;
+ r4 = heap32[(r5)];
+ r5 = heap32[(r3+4)];
+ r6 = r4 << 3;
+ r6 = (r5 + r6)|0;
+ r6 = r6 >> 2;
+ r6 = heap32[(r6)];
+if(!(r6 !=r4)) //_LBB355_38
+{
+break _51;
+}
+}
+}
+ r6 = r1 << 3;
+ r6 = (r5 + r6)|0;
+ r6 = r6 >> 2;
+ r6 = heap32[(r6)];
+_54: do {
+if(!(r6 ==r1)) //_LBB355_41
+{
+_55: while(true){
+ r6 = r6 << 3;
+ r1 = r1 << 3;
+ r6 = (r5 + r6)|0;
+ r1 = (r5 + r1)|0;
+ r5 = r6 >> 2;
+ r1 = r1 >> 2;
+ r6 = heap32[(r5)];
+ heap32[(r1)] = r6;
+ r1 = heap32[(r5)];
+ r5 = heap32[(r3+4)];
+ r6 = r1 << 3;
+ r6 = (r5 + r6)|0;
+ r6 = r6 >> 2;
+ r6 = heap32[(r6)];
+if(!(r6 !=r1)) //_LBB355_42
+{
+break _54;
+}
+}
+}
+} while(0);
+if(!(r4 ==r1)) //_LBB355_45
+{
+ r4 = r4 << 3;
+ r5 = (r5 + r4)|0;
+ r5 = r5 >> 2;
+ heap32[(r5)] = r1;
+ r5 = heap32[(r3+4)];
+ r1 = r1 << 3;
+ r1 = (r5 + r1)|0;
+ r4 = (r5 + r4)|0;
+ r1 = r1 >> 2;
+ r4 = r4 >> 2;
+ r5 = heap32[(r1+1)];
+ r4 = heap32[(r4+1)];
+ r4 = (r4 + r5)|0;
+ heap32[(r1+1)] = r4;
+}
+}
+}
+}
+}
+ r2 = (r2 + -1)|0;
+ r0 = (r0 + 16)|0;
+ if(r2 !=0) //_LBB355_31
+{
+continue _43;
+}
+else{
+break _41;
+}
+}
+}
+} while(0);
+ return;
+}
+
+function _ZN25btSimulationIslandManagerD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV25btSimulationIslandManager;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ r1 = heap32[(r2+14)];
+if(!(r1 ==0)) //_LBB356_4
+{
+ r3 = heapU8[r0+60];
+if(!(r3 ==0)) //_LBB356_3
+{
+ r3 = gNumAlignedFree;
+ r3 = r3 >> 2;
+ r4 = heap32[(r3)];
+ r4 = (r4 + 1)|0;
+ r1 = r1 >> 2;
+ heap32[(r3)] = r4;
+ r1 = heap32[(r1+-1)];
+ heap32[(g0)] = r1;
+ free(i7);
+}
+ heap32[(r2+14)] = 0;
+}
+ r1 = 1;
+ heap8[r0+60] = r1;
+ heap32[(r2+14)] = 0;
+ heap32[(r2+12)] = 0;
+ heap32[(r2+13)] = 0;
+ r3 = heap32[(r2+9)];
+if(!(r3 ==0)) //_LBB356_8
+{
+ r4 = heapU8[r0+40];
+if(!(r4 ==0)) //_LBB356_7
+{
+ r4 = gNumAlignedFree;
+ r4 = r4 >> 2;
+ r5 = heap32[(r4)];
+ r5 = (r5 + 1)|0;
+ r3 = r3 >> 2;
+ heap32[(r4)] = r5;
+ r3 = heap32[(r3+-1)];
+ heap32[(g0)] = r3;
+ free(i7);
+}
+ heap32[(r2+9)] = 0;
+}
+ heap8[r0+40] = r1;
+ heap32[(r2+9)] = 0;
+ heap32[(r2+7)] = 0;
+ heap32[(r2+8)] = 0;
+ r3 = heap32[(r2+4)];
+if(!(r3 ==0)) //_LBB356_12
+{
+ r4 = heapU8[r0+20];
+if(!(r4 ==0)) //_LBB356_11
+{
+ r4 = gNumAlignedFree;
+ r4 = r4 >> 2;
+ r5 = heap32[(r4)];
+ r5 = (r5 + 1)|0;
+ r3 = r3 >> 2;
+ heap32[(r4)] = r5;
+ r3 = heap32[(r3+-1)];
+ heap32[(g0)] = r3;
+ free(i7);
+}
+ heap32[(r2+4)] = 0;
+}
+ heap8[r0+20] = r1;
+ heap32[(r2+4)] = 0;
+ heap32[(r2+2)] = 0;
+ heap32[(r2+3)] = 0;
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZN25btSimulationIslandManagerD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV25btSimulationIslandManager;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ r1 = heap32[(r2+14)];
+if(!(r1 ==0)) //_LBB357_4
+{
+ r3 = heapU8[r0+60];
+if(!(r3 ==0)) //_LBB357_3
+{
+ r3 = gNumAlignedFree;
+ r3 = r3 >> 2;
+ r4 = heap32[(r3)];
+ r4 = (r4 + 1)|0;
+ r1 = r1 >> 2;
+ heap32[(r3)] = r4;
+ r1 = heap32[(r1+-1)];
+ heap32[(g0)] = r1;
+ free(i7);
+}
+ heap32[(r2+14)] = 0;
+}
+ r1 = 1;
+ heap8[r0+60] = r1;
+ heap32[(r2+14)] = 0;
+ heap32[(r2+12)] = 0;
+ heap32[(r2+13)] = 0;
+ r3 = heap32[(r2+9)];
+if(!(r3 ==0)) //_LBB357_8
+{
+ r4 = heapU8[r0+40];
+if(!(r4 ==0)) //_LBB357_7
+{
+ r4 = gNumAlignedFree;
+ r4 = r4 >> 2;
+ r5 = heap32[(r4)];
+ r5 = (r5 + 1)|0;
+ r3 = r3 >> 2;
+ heap32[(r4)] = r5;
+ r3 = heap32[(r3+-1)];
+ heap32[(g0)] = r3;
+ free(i7);
+}
+ heap32[(r2+9)] = 0;
+}
+ heap8[r0+40] = r1;
+ heap32[(r2+9)] = 0;
+ heap32[(r2+7)] = 0;
+ heap32[(r2+8)] = 0;
+ r3 = heap32[(r2+4)];
+if(!(r3 ==0)) //_LBB357_12
+{
+ r4 = heapU8[r0+20];
+if(!(r4 ==0)) //_LBB357_11
+{
+ r4 = gNumAlignedFree;
+ r4 = r4 >> 2;
+ r5 = heap32[(r4)];
+ r5 = (r5 + 1)|0;
+ r3 = r3 >> 2;
+ heap32[(r4)] = r5;
+ r3 = heap32[(r3+-1)];
+ heap32[(g0)] = r3;
+ free(i7);
+}
+ heap32[(r2+4)] = 0;
+}
+ heap8[r0+20] = r1;
+ heap32[(r2+4)] = 0;
+ heap32[(r2+2)] = 0;
+ heap32[(r2+3)] = 0;
+ return;
+}
+
+function _ZN32btSphereSphereCollisionAlgorithm21calculateTimeOfImpactEP17btCollisionObjectS1_RK16btDispatcherInfoP16btManifoldResult(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var f0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ f0 = 1;
+ f_g0 = f0;
+ return;
+}
+
+function _ZN32btSphereSphereCollisionAlgorithm22getAllContactManifoldsER20btAlignedObjectArrayIP20btPersistentManifoldE(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ r2 = heap32[(r1+3)];
+if(!(r2 ==0)) //_LBB359_23
+{
+ r0 = heapU8[r0+8];
+if(!(r0 ==0)) //_LBB359_23
+{
+ r0 = heap32[(fp+1)];
+ r3 = r0 >> 2;
+ r4 = heap32[(r3+2)];
+ r5 = heap32[(r3+1)];
+ if(r4 ==r5) //_LBB359_4
+{
+ r6 = 1;
+ r7 = r5 << 1;
+ r7 = r5 == 0 ? r6 : r7;
+if(!(r4 >=r7)) //_LBB359_3
+{
+ if(r7 !=0) //_LBB359_7
+{
+ r2 = gNumAlignedAllocs;
+ r2 = r2 >> 2;
+ r4 = heap32[(r2)];
+ r8 = r7 << 2;
+ r4 = (r4 + 1)|0;
+ r8 = r8 | 3;
+ heap32[(r2)] = r4;
+ r2 = (r8 + 16)|0;
+ heap32[(g0)] = r2;
+ malloc(i7);
+ r2 = r_g0;
+ if(r2 !=0) //_LBB359_9
+{
+ r4 = 0;
+ r8 = (r2 + 4)|0;
+ r4 = (r4 - r8)|0;
+ r4 = r4 & 15;
+ r4 = (r2 + r4)|0;
+ r8 = (r4 + 4)|0;
+ r4 = r4 >> 2;
+ heap32[(r4)] = r2;
+ r2 = r8;
+}
+}
+else{
+ r2 = 0;
+}
+ r4 = (r0 + 12)|0;
+ if(r5 <1) //_LBB359_12
+{
+ r8 = r4 >> 2;
+ r9 = heap32[(r8)];
+}
+else{
+ r8 = 0;
+_15: while(true){
+ r9 = r4 >> 2;
+ r9 = heap32[(r9)];
+ r10 = r8 << 2;
+ r11 = (r9 + r10)|0;
+ r11 = r11 >> 2;
+ r10 = (r2 + r10)|0;
+ r11 = heap32[(r11)];
+ r8 = (r8 + 1)|0;
+ r10 = r10 >> 2;
+ heap32[(r10)] = r11;
+if(!(r5 !=r8)) //_LBB359_13
+{
+break _15;
+}
+}
+ r4 = (r0 + 12)|0;
+}
+ if(r9 !=0) //_LBB359_17
+{
+ r8 = heapU8[r0+16];
+ if(r8 !=0) //_LBB359_19
+{
+ r5 = gNumAlignedFree;
+ r5 = r5 >> 2;
+ r8 = heap32[(r5)];
+ r8 = (r8 + 1)|0;
+ r9 = r9 >> 2;
+ heap32[(r5)] = r8;
+ r5 = heap32[(r9+-1)];
+ heap32[(g0)] = r5;
+ free(i7);
+ r5 = heap32[(r3+1)];
+}
+ r8 = r4 >> 2;
+ heap32[(r8)] = 0;
+}
+ r4 = r4 >> 2;
+ heap8[r0+16] = r6;
+ heap32[(r4)] = r2;
+ heap32[(r3+2)] = r7;
+ r2 = heap32[(r1+3)];
+}
+}
+ r0 = r5 << 2;
+ r1 = heap32[(r3+3)];
+ r0 = (r1 + r0)|0;
+ r0 = r0 >> 2;
+ heap32[(r0)] = r2;
+ r0 = heap32[(r3+1)];
+ r0 = (r0 + 1)|0;
+ heap32[(r3+1)] = r0;
+}
+}
+ return;
+}
+
+function _ZN32btSphereSphereCollisionAlgorithm16processCollisionEP17btCollisionObjectS1_RK16btDispatcherInfoP16btManifoldResult(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+var __label__ = 0;
+ i7 = sp + -48;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r0 = heap32[(r0+3)];
+_1: do {
+if(!(r0 ==0)) //_LBB360_10
+{
+ r1 = heap32[(fp+1)];
+ r2 = heap32[(fp+2)];
+ r3 = heap32[(fp+4)];
+ r4 = r3 >> 2;
+ r1 = r1 >> 2;
+ heap32[(r4+1)] = r0;
+ r0 = r2 >> 2;
+ f0 = heapFloat[(r1+14)];
+ f1 = heapFloat[(r0+14)];
+ f2 = heapFloat[(r1+13)];
+ f3 = heapFloat[(r0+13)];
+ f0 = f0-f1;
+ f1 = f2-f3;
+ f2 = heapFloat[(r1+15)];
+ f3 = heapFloat[(r0+15)];
+ f2 = f2-f3;
+ r1 = heap32[(r1+48)];
+ r2 = heap32[(r0+48)];
+ f3 = f1*f1;
+ f4 = f0*f0;
+ f3 = f3+f4;
+ f4 = f2*f2;
+ f3 = f3+f4;
+ heapFloat[(g0)] = f3;
+ sqrtf(i7);
+ f3 = f_g0;
+ r1 = r1 >> 2;
+ r2 = r2 >> 2;
+ f4 = heapFloat[(r1+7)];
+ f5 = heapFloat[(r1+3)];
+ f6 = heapFloat[(r2+7)];
+ f7 = heapFloat[(r2+3)];
+ f6 = f6*f7;
+ f4 = f4*f5;
+ f4 = f4+f6;
+_3: do {
+ if(f4 >=f3) //_LBB360_11
+{
+ r1 = sp + -16;
+ r2 = r1 >> 2;
+ heap32[(fp+-4)] = 1065353216;
+ heap32[(r2+1)] = 0;
+ f4 = f3-f4;
+ heap32[(r2+2)] = 0;
+ heap32[(r2+3)] = 0;
+ f5 = 1.1920928955078125e-007;
+ if(f3 >f5) //_LBB360_13
+{
+ f5 = 1;
+ f3 = f5/f3;
+ f1 = f1*f3;
+ f0 = f0*f3;
+ heapFloat[(fp+-4)] = f1;
+ f2 = f2*f3;
+ heapFloat[(r2+1)] = f0;
+ heapFloat[(r2+2)] = f2;
+ heap32[(r2+3)] = 0;
+}
+else{
+ f1 = 1;
+ f0 = 0;
+ f2 = f0;
+}
+ f1 = f1*f6;
+ f3 = heapFloat[(r0+13)];
+ f5 = heapFloat[(r0+15)];
+ f7 = heapFloat[(r0+14)];
+ r0 = sp + -32;
+ f0 = f0*f6;
+ f1 = f3+f1;
+ f2 = f2*f6;
+ r2 = r0 >> 2;
+ f0 = f7+f0;
+ heapFloat[(fp+-8)] = f1;
+ f1 = f5+f2;
+ heapFloat[(r2+1)] = f0;
+ heapFloat[(r2+2)] = f1;
+ heap32[(r2+3)] = 0;
+ r2 = heap32[(r4)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+4)];
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = r0;
+ heapFloat[(g0+3)] = f4;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ r0 = heap32[(r4+1)];
+ if(r0 !=0) //_LBB360_16
+{
+ r1 = r0 >> 2;
+ r2 = heap32[(r1+279)];
+ if(r2 ==0) //_LBB360_10
+{
+break _1;
+}
+else{
+ r1 = heap32[(r1+277)];
+ r2 = heap32[(r4+34)];
+ if(r1 ==r2) //_LBB360_19
+{
+ r1 = (r3 + 8)|0;
+ r2 = (r3 + 72)|0;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = r2;
+ _ZN20btPersistentManifold20refreshContactPointsERK11btTransformS2_(i7);
+ return;
+}
+else{
+ r1 = (r3 + 72)|0;
+ r3 = (r3 + 8)|0;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+__label__ = 8;
+break _3;
+}
+}
+}
+else{
+__label__ = 3;
+}
+}
+else{
+ r0 = heap32[(r4+1)];
+ if(r0 !=0) //_LBB360_4
+{
+ r1 = r0 >> 2;
+ r2 = heap32[(r1+279)];
+ if(r2 ==0) //_LBB360_10
+{
+break _1;
+}
+else{
+ r1 = heap32[(r1+277)];
+ r4 = heap32[(r4+34)];
+ if(r1 ==r4) //_LBB360_9
+{
+ r4 = (r3 + 8)|0;
+ r3 = (r3 + 72)|0;
+}
+else{
+ r4 = (r3 + 72)|0;
+ r3 = (r3 + 8)|0;
+}
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r4;
+__label__ = 8;
+}
+}
+else{
+__label__ = 3;
+}
+}
+} while(0);
+switch(__label__ ){//multiple entries
+case 8:
+ heap32[(g0+2)] = r3;
+ _ZN20btPersistentManifold20refreshContactPointsERK11btTransformS2_(i7);
+ return;
+break;
+case 3:
+ r0 = _2E_str59;
+ r3 = _2E_str160;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r3;
+ heap32[(g0+2)] = 101;
+ _assert(i7);
+break;
+}
+}
+} while(0);
+ return;
+}
+
+function _ZN32btSphereSphereCollisionAlgorithmD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV32btSphereSphereCollisionAlgorithm;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ r1 = heapU8[r0+8];
+if(!(r1 ==0)) //_LBB361_3
+{
+ r1 = heap32[(r2+3)];
+if(!(r1 ==0)) //_LBB361_3
+{
+ r3 = heap32[(r2+1)];
+ r4 = r3 >> 2;
+ r4 = heap32[(r4)];
+ r4 = r4 >> 2;
+ r4 = heap32[(r4+4)];
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r1;
+ __FUNCTION_TABLE__[(r4)>>2](i7);
+}
+}
+ r1 = _ZTV30btActivatingCollisionAlgorithm;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZN32btSphereSphereCollisionAlgorithmD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV32btSphereSphereCollisionAlgorithm;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ r0 = heapU8[r0+8];
+if(!(r0 ==0)) //_LBB362_3
+{
+ r0 = heap32[(r2+3)];
+if(!(r0 ==0)) //_LBB362_3
+{
+ r1 = heap32[(r2+1)];
+ r3 = r1 >> 2;
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3+4)];
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r0;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+}
+}
+ r0 = _ZTV30btActivatingCollisionAlgorithm;
+ r0 = (r0 + 8)|0;
+ heap32[(r2)] = r0;
+ return;
+}
+
+function _ZN34btSphereTriangleCollisionAlgorithm21calculateTimeOfImpactEP17btCollisionObjectS1_RK16btDispatcherInfoP16btManifoldResult(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var f0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ f0 = 1;
+ f_g0 = f0;
+ return;
+}
+
+function _ZN34btSphereTriangleCollisionAlgorithm22getAllContactManifoldsER20btAlignedObjectArrayIP20btPersistentManifoldE(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ r2 = heap32[(r1+3)];
+if(!(r2 ==0)) //_LBB364_23
+{
+ r0 = heapU8[r0+8];
+if(!(r0 ==0)) //_LBB364_23
+{
+ r0 = heap32[(fp+1)];
+ r3 = r0 >> 2;
+ r4 = heap32[(r3+2)];
+ r5 = heap32[(r3+1)];
+ if(r4 ==r5) //_LBB364_4
+{
+ r6 = 1;
+ r7 = r5 << 1;
+ r7 = r5 == 0 ? r6 : r7;
+if(!(r4 >=r7)) //_LBB364_3
+{
+ if(r7 !=0) //_LBB364_7
+{
+ r2 = gNumAlignedAllocs;
+ r2 = r2 >> 2;
+ r4 = heap32[(r2)];
+ r8 = r7 << 2;
+ r4 = (r4 + 1)|0;
+ r8 = r8 | 3;
+ heap32[(r2)] = r4;
+ r2 = (r8 + 16)|0;
+ heap32[(g0)] = r2;
+ malloc(i7);
+ r2 = r_g0;
+ if(r2 !=0) //_LBB364_9
+{
+ r4 = 0;
+ r8 = (r2 + 4)|0;
+ r4 = (r4 - r8)|0;
+ r4 = r4 & 15;
+ r4 = (r2 + r4)|0;
+ r8 = (r4 + 4)|0;
+ r4 = r4 >> 2;
+ heap32[(r4)] = r2;
+ r2 = r8;
+}
+}
+else{
+ r2 = 0;
+}
+ r4 = (r0 + 12)|0;
+ if(r5 <1) //_LBB364_12
+{
+ r8 = r4 >> 2;
+ r9 = heap32[(r8)];
+}
+else{
+ r8 = 0;
+_15: while(true){
+ r9 = r4 >> 2;
+ r9 = heap32[(r9)];
+ r10 = r8 << 2;
+ r11 = (r9 + r10)|0;
+ r11 = r11 >> 2;
+ r10 = (r2 + r10)|0;
+ r11 = heap32[(r11)];
+ r8 = (r8 + 1)|0;
+ r10 = r10 >> 2;
+ heap32[(r10)] = r11;
+if(!(r5 !=r8)) //_LBB364_13
+{
+break _15;
+}
+}
+ r4 = (r0 + 12)|0;
+}
+ if(r9 !=0) //_LBB364_17
+{
+ r8 = heapU8[r0+16];
+ if(r8 !=0) //_LBB364_19
+{
+ r5 = gNumAlignedFree;
+ r5 = r5 >> 2;
+ r8 = heap32[(r5)];
+ r8 = (r8 + 1)|0;
+ r9 = r9 >> 2;
+ heap32[(r5)] = r8;
+ r5 = heap32[(r9+-1)];
+ heap32[(g0)] = r5;
+ free(i7);
+ r5 = heap32[(r3+1)];
+}
+ r8 = r4 >> 2;
+ heap32[(r8)] = 0;
+}
+ r4 = r4 >> 2;
+ heap8[r0+16] = r6;
+ heap32[(r4)] = r2;
+ heap32[(r3+2)] = r7;
+ r2 = heap32[(r1+3)];
+}
+}
+ r0 = r5 << 2;
+ r1 = heap32[(r3+3)];
+ r0 = (r1 + r0)|0;
+ r0 = r0 >> 2;
+ heap32[(r0)] = r2;
+ r0 = heap32[(r3+1)];
+ r0 = (r0 + 1)|0;
+ heap32[(r3+1)] = r0;
+}
+}
+ return;
+}
+
+function _ZN34btSphereTriangleCollisionAlgorithm16processCollisionEP17btCollisionObjectS1_RK16btDispatcherInfoP16btManifoldResult(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var f0;
+var __label__ = 0;
+ i7 = sp + -176;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ r2 = heap32[(r1+3)];
+if(!(r2 ==0)) //_LBB365_8
+{
+ r3 = heap32[(fp+1)];
+ r4 = heap32[(fp+2)];
+ r5 = heap32[(fp+3)];
+ r6 = heap32[(fp+4)];
+ r7 = heapU8[r0+16];
+ r8 = r7 == 0 ? r4 : r3;
+ r3 = r7 == 0 ? r3 : r4;
+ r4 = r8 >> 2;
+ r3 = r3 >> 2;
+ r7 = heap32[(r4+48)];
+ r8 = heap32[(r3+48)];
+ r9 = r6 >> 2;
+ heap32[(r9+1)] = r2;
+ r1 = heap32[(r1+3)];
+ r1 = r1 >> 2;
+ f0 = heapFloat[(r1+280)];
+ r1 = _ZTV22SphereTriangleDetector;
+ r2 = sp + -16;
+ r1 = (r1 + 8)|0;
+ r10 = r2 >> 2;
+ heap32[(fp+-4)] = r1;
+ heap32[(r10+1)] = r8;
+ r1 = sp + -152;
+ heap32[(r10+2)] = r7;
+ r7 = r1 >> 2;
+ heapFloat[(r10+3)] = f0;
+ heap32[(r7+33)] = 0;
+ heap32[(r7+32)] = 1566444395;
+ heap32[(fp+-38)] = heap32[(r3+1)];
+ heap32[(r7+1)] = heap32[(r3+2)];
+ heap32[(r7+2)] = heap32[(r3+3)];
+ heap32[(r7+3)] = heap32[(r3+4)];
+ heap32[(r7+4)] = heap32[(r3+5)];
+ heap32[(r7+5)] = heap32[(r3+6)];
+ heap32[(r7+6)] = heap32[(r3+7)];
+ heap32[(r7+7)] = heap32[(r3+8)];
+ heap32[(r7+8)] = heap32[(r3+9)];
+ heap32[(r7+9)] = heap32[(r3+10)];
+ heap32[(r7+10)] = heap32[(r3+11)];
+ heap32[(r7+11)] = heap32[(r3+12)];
+ heap32[(r7+12)] = heap32[(r3+13)];
+ heap32[(r7+13)] = heap32[(r3+14)];
+ heap32[(r7+14)] = heap32[(r3+15)];
+ heap32[(r7+15)] = heap32[(r3+16)];
+ heap32[(r7+16)] = heap32[(r4+1)];
+ heap32[(r7+17)] = heap32[(r4+2)];
+ heap32[(r7+18)] = heap32[(r4+3)];
+ heap32[(r7+19)] = heap32[(r4+4)];
+ heap32[(r7+20)] = heap32[(r4+5)];
+ heap32[(r7+21)] = heap32[(r4+6)];
+ heap32[(r7+22)] = heap32[(r4+7)];
+ heap32[(r7+23)] = heap32[(r4+8)];
+ heap32[(r7+24)] = heap32[(r4+9)];
+ heap32[(r7+25)] = heap32[(r4+10)];
+ heap32[(r7+26)] = heap32[(r4+11)];
+ heap32[(r7+27)] = heap32[(r4+12)];
+ heap32[(r7+28)] = heap32[(r4+13)];
+ heap32[(r7+29)] = heap32[(r4+14)];
+ heap32[(r7+30)] = heap32[(r4+15)];
+ heap32[(r7+31)] = heap32[(r4+16)];
+ r3 = r5 >> 2;
+ r4 = heapU8[r0+16];
+ r3 = heap32[(r3+5)];
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = r6;
+ heap32[(g0+3)] = r3;
+ heap32[(g0+4)] = r4;
+ _ZN22SphereTriangleDetector16getClosestPointsERKN36btDiscreteCollisionDetectorInterface17ClosestPointInputERNS0_6ResultEP12btIDebugDrawb(i7);
+ r0 = heapU8[r0+8];
+if(!(r0 ==0)) //_LBB365_8
+{
+ r0 = heap32[(r9+1)];
+ if(r0 !=0) //_LBB365_4
+{
+ r1 = r0 >> 2;
+ r2 = heap32[(r1+279)];
+if(!(r2 ==0)) //_LBB365_8
+{
+ r1 = heap32[(r1+277)];
+ r2 = heap32[(r9+34)];
+ if(r1 ==r2) //_LBB365_7
+{
+ r1 = (r6 + 8)|0;
+ r2 = (r6 + 72)|0;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = r2;
+ _ZN20btPersistentManifold20refreshContactPointsERK11btTransformS2_(i7);
+}
+else{
+ r1 = (r6 + 72)|0;
+ r6 = (r6 + 8)|0;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = r6;
+ _ZN20btPersistentManifold20refreshContactPointsERK11btTransformS2_(i7);
+ return;
+}
+}
+}
+else{
+ r0 = _2E_str59;
+ r6 = _2E_str160;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r6;
+ heap32[(g0+2)] = 101;
+ _assert(i7);
+}
+}
+}
+ return;
+}
+
+function _ZN34btSphereTriangleCollisionAlgorithmD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV34btSphereTriangleCollisionAlgorithm;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ r1 = heapU8[r0+8];
+if(!(r1 ==0)) //_LBB366_3
+{
+ r1 = heap32[(r2+3)];
+if(!(r1 ==0)) //_LBB366_3
+{
+ r3 = heap32[(r2+1)];
+ r4 = r3 >> 2;
+ r4 = heap32[(r4)];
+ r4 = r4 >> 2;
+ r4 = heap32[(r4+4)];
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r1;
+ __FUNCTION_TABLE__[(r4)>>2](i7);
+}
+}
+ r1 = _ZTV30btActivatingCollisionAlgorithm;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZN34btSphereTriangleCollisionAlgorithmD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV34btSphereTriangleCollisionAlgorithm;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ r0 = heapU8[r0+8];
+if(!(r0 ==0)) //_LBB367_3
+{
+ r0 = heap32[(r2+3)];
+if(!(r0 ==0)) //_LBB367_3
+{
+ r1 = heap32[(r2+1)];
+ r3 = r1 >> 2;
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3+4)];
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r0;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+}
+}
+ r0 = _ZTV30btActivatingCollisionAlgorithm;
+ r0 = (r0 + 8)|0;
+ heap32[(r2)] = r0;
+ return;
+}
+
+function _ZN20btAlignedObjectArrayI9btElementE17quickSortInternalI31btUnionFindElementSortPredicateEEvT_ii(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+2)];
+ r1 = heap32[(fp+1)];
+ r2 = (r0 + r1)|0;
+ r3 = r2 >>> 31;
+ r4 = heap32[(fp)];
+ r2 = (r2 + r3)|0;
+ r3 = r4 >> 2;
+ r2 = r2 & 1073741822;
+ r5 = heap32[(r3+3)];
+ r2 = r2 << 2;
+ r2 = (r5 + r2)|0;
+ r2 = r2 >> 2;
+ r2 = heap32[(r2)];
+ r5 = r1;
+ r6 = r0;
+_1: while(true){
+ r7 = heap32[(r3+3)];
+ r8 = r5 << 3;
+ r8 = (r7 + r8)|0;
+ r8 = r8 >> 2;
+ r8 = heap32[(r8)];
+ if(r8 <r2) //_LBB368_3
+{
+_4: while(true){
+ r8 = r5 << 3;
+ r8 = (r7 + r8)|0;
+ r8 = r8 >> 2;
+ r8 = heap32[(r8+2)];
+ r5 = (r5 + 1)|0;
+ if(r8 <r2) //_LBB368_3
+{
+continue _4;
+}
+else{
+break _4;
+}
+}
+}
+ r9 = r6 << 3;
+ r9 = (r7 + r9)|0;
+ r9 = r9 >> 2;
+ r9 = heap32[(r9)];
+_7: do {
+ if(r2 <r9) //_LBB368_6
+{
+_8: while(true){
+ r9 = r6 << 3;
+ r9 = (r7 + r9)|0;
+ r9 = r9 >> 2;
+ r9 = heap32[(r9+-2)];
+ r6 = (r6 + -1)|0;
+ if(r2 <r9) //_LBB368_6
+{
+continue _8;
+}
+else{
+break _7;
+}
+}
+}
+} while(0);
+ if(r5 <=r6) //_LBB368_9
+{
+ r10 = r5 << 3;
+ r11 = r6 << 3;
+ r10 = (r7 + r10)|0;
+ r7 = (r7 + r11)|0;
+ r10 = r10 >> 2;
+ r7 = r7 >> 2;
+ r12 = heap32[(r10+1)];
+ r7 = heap32[(r7+1)];
+ heap32[(r10)] = r9;
+ heap32[(r10+1)] = r7;
+ r7 = heap32[(r3+3)];
+ r7 = (r7 + r11)|0;
+ r7 = r7 >> 2;
+ r5 = (r5 + 1)|0;
+ r6 = (r6 + -1)|0;
+ heap32[(r7)] = r8;
+ heap32[(r7+1)] = r12;
+}
+ if(r5 <=r6) //_LBB368_1
+{
+continue _1;
+}
+else{
+break _1;
+}
+}
+if(!(r6 <=r1)) //_LBB368_13
+{
+ heap32[(g0)] = r4;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = r6;
+ _ZN20btAlignedObjectArrayI9btElementE17quickSortInternalI31btUnionFindElementSortPredicateEEvT_ii(i7);
+}
+if(!(r5 >=r0)) //_LBB368_15
+{
+ heap32[(g0)] = r4;
+ heap32[(g0+1)] = r5;
+ heap32[(g0+2)] = r0;
+ _ZN20btAlignedObjectArrayI9btElementE17quickSortInternalI31btUnionFindElementSortPredicateEEvT_ii(i7);
+}
+ return;
+}
+
+function _ZN22SphereTriangleDetectorD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV22SphereTriangleDetector;
+ r0 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r0)] = r1;
+ return;
+}
+
+function _ZN22SphereTriangleDetectorD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV22SphereTriangleDetector;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZN22SphereTriangleDetector16getClosestPointsERKN36btDiscreteCollisionDetectorInterface17ClosestPointInputERNS0_6ResultEP12btIDebugDrawb(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+ var f10;
+ var f11;
+ var f12;
+ var f13;
+ var f14;
+ var f15;
+ var f16;
+ var f17;
+ var f18;
+ var f19;
+ var f20;
+ var f21;
+ var f22;
+ var f23;
+ var f24;
+ var f25;
+ var f26;
+ var f27;
+ var f28;
+ var f29;
+ var f30;
+var __label__ = 0;
+ i7 = sp + -144;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r1 = heap32[(r0+2)];
+ r1 = r1 >> 2;
+ f0 = heapFloat[(r1+19)];
+ f1 = heapFloat[(r1+15)];
+ f2 = heapFloat[(r1+23)];
+ f3 = heapFloat[(r1+17)];
+ f4 = heapFloat[(r1+13)];
+ f5 = heapFloat[(r1+21)];
+ f6 = heapFloat[(r1+22)];
+ f7 = heapFloat[(r1+14)];
+ f8 = heapFloat[(r1+18)];
+ f0 = f0-f1;
+ f6 = f6-f7;
+ f3 = f3-f4;
+ f1 = f2-f1;
+ f2 = f8-f7;
+ f4 = f5-f4;
+ r2 = heap32[(fp+1)];
+ r3 = heap32[(r0+1)];
+ f5 = f2*f1;
+ f7 = f0*f6;
+ f0 = f0*f4;
+ f1 = f3*f1;
+ r2 = r2 >> 2;
+ r3 = r3 >> 2;
+ f5 = f5-f7;
+ f0 = f0-f1;
+ f1 = f3*f6;
+ f2 = f2*f4;
+ f3 = heapFloat[(r0+3)];
+ f1 = f1-f2;
+ f2 = f5*f5;
+ f4 = f0*f0;
+ f6 = heapFloat[(r3+7)];
+ f7 = heapFloat[(r3+3)];
+ f8 = heapFloat[(r2+18)];
+ f9 = heapFloat[(r2+22)];
+ f10 = heapFloat[(r2+26)];
+ f11 = heapFloat[(r2+17)];
+ f12 = heapFloat[(r2+21)];
+ f13 = heapFloat[(r2+25)];
+ f14 = heapFloat[(r2+16)];
+ f15 = heapFloat[(r2+12)];
+ f16 = heapFloat[(r2+28)];
+ f17 = heapFloat[(r2+20)];
+ f18 = heapFloat[(r2+13)];
+ f19 = heapFloat[(r2+29)];
+ f20 = heapFloat[(r2+24)];
+ f21 = heapFloat[(r2+14)];
+ f22 = heapFloat[(r2+30)];
+ f2 = f2+f4;
+ f4 = f1*f1;
+ f15 = f15-f16;
+ f16 = f18-f19;
+ f2 = f2+f4;
+ f4 = f21-f22;
+ heapFloat[(g0)] = f2;
+ f2 = f11*f15;
+ f11 = f12*f16;
+ f12 = f14*f15;
+ f14 = f17*f16;
+ sqrtf(i7);
+ f18 = 1;
+ heapFloat[(fp+-25)] = f18;
+ f8 = f8*f15;
+ f9 = f9*f16;
+ f2 = f2+f11;
+ f11 = f13*f4;
+ f12 = f12+f14;
+ f13 = f20*f4;
+ f14 = f18/f_g0;
+ f2 = f2+f11;
+ f11 = heapFloat[(r1+14)];
+ f12 = f12+f13;
+ f13 = heapFloat[(r1+13)];
+ f8 = f8+f9;
+ f4 = f10*f4;
+ f5 = f5*f14;
+ f9 = f12-f13;
+ heapFloat[(fp+-28)] = f9;
+ f0 = f0*f14;
+ f10 = f2-f11;
+ heapFloat[(fp+-29)] = f10;
+ f4 = f8+f4;
+ f8 = heapFloat[(r1+15)];
+ f1 = f1*f14;
+ f14 = f4-f8;
+ heapFloat[(fp+-27)] = f14;
+ f9 = f9*f5;
+ f10 = f10*f0;
+ f9 = f9+f10;
+ f10 = f14*f1;
+ f9 = f9+f10;
+ r3 = heap32[(fp+2)];
+ r4 = heap32[(fp+4)];
+ f6 = f6*f7;
+ heapFloat[(fp+-26)] = f6;
+ f6 = 0;
+ if(f9 <f6) //_LBB371_2
+{
+ f9 = -f9;
+ f5 = -f5;
+ f0 = -f0;
+ f1 = -f1;
+}
+ f7 = heapFloat[(fp+-26)];
+ if(f9 <f7) //_LBB371_5
+{
+__label__ = 4;
+}
+else{
+ f7 = f5*f6;
+ f10 = f0*f6;
+ f7 = f7+f10;
+ f10 = f1*f6;
+ f7 = f7+f10;
+ if(f7 >=f6) //_LBB371_31
+{
+__label__ = 29;
+}
+else{
+__label__ = 4;
+}
+}
+_6: do {
+if (__label__ == 4){
+ f7 = heapFloat[(fp+-26)];
+ f3 = f7+f3;
+ heapFloat[(fp+-30)] = f3;
+if(!(f3 <=f9)) //_LBB371_31
+{
+ f3 = heapFloat[(r1+19)];
+ f7 = heapFloat[(r1+23)];
+ f10 = heapFloat[(r1+17)];
+ f14 = heapFloat[(r1+21)];
+ f15 = heapFloat[(r1+18)];
+ f16 = heapFloat[(r1+22)];
+ f17 = f7-f3;
+ f18 = f14-f10;
+ f19 = f3-f8;
+ f8 = f8-f7;
+ f20 = f16-f15;
+ f21 = f10-f13;
+ f22 = f15-f11;
+ f13 = f13-f14;
+ f11 = f11-f16;
+ f23 = f20*f1;
+ f24 = f17*f0;
+ f17 = f17*f5;
+ f25 = f18*f1;
+ f26 = f22*f1;
+ f27 = f19*f0;
+ f19 = f19*f5;
+ f28 = f21*f1;
+ f29 = f11*f1;
+ f30 = f8*f0;
+ f8 = f8*f5;
+ heapFloat[(fp+-31)] = f8;
+ f8 = f13*f1;
+ f23 = f23-f24;
+ f10 = f12-f10;
+ f17 = f17-f25;
+ f15 = f2-f15;
+ f18 = f18*f0;
+ f20 = f20*f5;
+ f24 = f26-f27;
+ f19 = f19-f28;
+ f21 = f21*f0;
+ f22 = f22*f5;
+ f25 = f29-f30;
+ f14 = f12-f14;
+ f26 = heapFloat[(fp+-31)];
+ f8 = f26-f8;
+ f16 = f2-f16;
+ f13 = f13*f0;
+ f11 = f11*f5;
+ f10 = f23*f10;
+ f15 = f17*f15;
+ f17 = f18-f20;
+ f3 = f4-f3;
+ f18 = heapFloat[(fp+-28)];
+ f18 = f24*f18;
+ f20 = heapFloat[(fp+-29)];
+ f19 = f19*f20;
+ f20 = f21-f22;
+ f14 = f25*f14;
+ f8 = f8*f16;
+ f11 = f13-f11;
+ f7 = f4-f7;
+ f10 = f10+f15;
+ f3 = f17*f3;
+ f13 = f18+f19;
+ f15 = heapFloat[(fp+-27)];
+ f15 = f20*f15;
+ f8 = f14+f8;
+ f7 = f11*f7;
+ f3 = f10+f3;
+ f10 = f13+f15;
+ f7 = f8+f7;
+ if(f3 <=f6) //_LBB371_9
+{
+__label__ = 8;
+}
+else{
+ f8 = 0;
+ if(f10 <=f8) //_LBB371_9
+{
+__label__ = 8;
+}
+else{
+ if(f7 >f8) //_LBB371_12
+{
+__label__ = 11;
+}
+else{
+__label__ = 8;
+}
+}
+}
+_12: do {
+if (__label__ == 8){
+if(!(f10 >f6)) //_LBB371_13
+{
+if(!(f3 >f6)) //_LBB371_13
+{
+if(!(f7 >f6)) //_LBB371_13
+{
+__label__ = 11;
+break _12;
+}
+}
+}
+ r1 = heap32[(r0+2)];
+ r5 = r1 >> 2;
+ r5 = heap32[(r5)];
+ r5 = r5 >> 2;
+ r5 = heap32[(r5+22)];
+ heap32[(g0)] = r1;
+ __FUNCTION_TABLE__[(r5)>>2](i7);
+ r1 = r_g0;
+ if(r1 <1) //_LBB371_31
+{
+break _6;
+}
+else{
+ f0 = heapFloat[(fp+-30)];
+ f5 = f0*f0;
+ r1 = 0;
+ r5 = r1;
+_19: while(true){
+ r6 = heap32[(r0+2)];
+ r7 = r6 >> 2;
+ r7 = heap32[(r7)];
+ r7 = r7 >> 2;
+ r7 = heap32[(r7+23)];
+ r8 = sp + -32;
+ r9 = sp + -16;
+ heap32[(g0)] = r6;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = r9;
+ heap32[(g0+3)] = r8;
+ __FUNCTION_TABLE__[(r7)>>2](i7);
+ r6 = r8 >> 2;
+ r7 = r9 >> 2;
+ f7 = heapFloat[(r7+1)];
+ f8 = heapFloat[(r6+1)];
+ f9 = heapFloat[(fp+-4)];
+ f10 = heapFloat[(fp+-8)];
+ f11 = f2-f7;
+ f8 = f8-f7;
+ f13 = f12-f9;
+ f10 = f10-f9;
+ f14 = heapFloat[(r7+2)];
+ f15 = heapFloat[(r6+2)];
+ f16 = f4-f14;
+ f15 = f15-f14;
+ f17 = f10*f13;
+ f18 = f8*f11;
+ f17 = f17+f18;
+ f18 = f15*f16;
+ f17 = f17+f18;
+ r1 = (r1 + 1)|0;
+ if(f17 >f6) //_LBB371_17
+{
+ f18 = f10*f10;
+ f19 = f8*f8;
+ f18 = f18+f19;
+ f19 = f15*f15;
+ f18 = f18+f19;
+ if(f17 >=f18) //_LBB371_19
+{
+ f13 = f13-f10;
+ f11 = f11-f8;
+ f16 = f16-f15;
+ f17 = heapFloat[(fp+-25)];
+}
+else{
+ f17 = f17/f18;
+ f18 = f10*f17;
+ f19 = f8*f17;
+ f20 = f15*f17;
+ f13 = f13-f18;
+ f11 = f11-f19;
+ f16 = f16-f20;
+}
+}
+else{
+ f17 = f6;
+}
+ f13 = f13*f13;
+ f11 = f11*f11;
+ f11 = f13+f11;
+ f13 = f16*f16;
+ f11 = f11+f13;
+ if(f11 <f5) //_LBB371_22
+{
+ f0 = f10*f17;
+ f3 = f8*f17;
+ f8 = f15*f17;
+ f1 = f9+f0;
+ f0 = f7+f3;
+ f3 = f14+f8;
+ r5 = 1;
+}
+ r6 = heap32[(r0+2)];
+ r7 = r6 >> 2;
+ r7 = heap32[(r7)];
+ r7 = r7 >> 2;
+ r7 = heap32[(r7+22)];
+ heap32[(g0)] = r6;
+ __FUNCTION_TABLE__[(r7)>>2](i7);
+ r6 = r_g0;
+if(!(r6 >r1)) //_LBB371_15
+{
+break _19;
+}
+}
+ r0 = r5 & 255;
+ if(r0 ==0) //_LBB371_31
+{
+break _6;
+}
+else{
+__label__ = 23;
+}
+}
+}
+} while(0);
+if (__label__ == 11){
+ f6 = f1*f9;
+ f0 = f0*f9;
+ f1 = f5*f9;
+ f3 = f4-f6;
+ f0 = f2-f0;
+ f1 = f12-f1;
+}
+ f2 = f2-f0;
+ f5 = f12-f1;
+ f4 = f4-f3;
+ f6 = f5*f5;
+ f7 = f2*f2;
+ f6 = f6+f7;
+ f7 = f4*f4;
+ f6 = f6+f7;
+ f7 = heapFloat[(fp+-26)];
+ f7 = f7*f7;
+ if(f7 <=f6) //_LBB371_27
+{
+ f6 = 0;
+ f5 = f5*f6;
+ f2 = f2*f6;
+ f2 = f5+f2;
+ f4 = f4*f6;
+ f2 = f2+f4;
+ if(f2 >=f6) //_LBB371_31
+{
+break _6;
+}
+}
+else{
+ heapFloat[(g0)] = f6;
+ sqrtf(i7);
+ f7 = f_g0;
+ heapFloat[(g0)] = f6;
+ f6 = 1;
+ sqrtf(i7);
+ f9 = heapFloat[(fp+-26)];
+ f7 = f9-f7;
+ f6 = f6/f_g0;
+ f5 = f5*f6;
+ f2 = f2*f6;
+ f4 = f4*f6;
+ f6 = -f7;
+}
+ if(r4 ==0) //_LBB371_30
+{
+ r0 = r3 >> 2;
+ f7 = heapFloat[(r2+16)];
+ f8 = heapFloat[(r2+17)];
+ r0 = heap32[(r0)];
+ f9 = heapFloat[(r2+20)];
+ f10 = heapFloat[(r2+21)];
+ f11 = f7*f1;
+ f12 = f8*f0;
+ f13 = heapFloat[(r2+18)];
+ r0 = r0 >> 2;
+ f14 = heapFloat[(r2+24)];
+ f15 = heapFloat[(r2+25)];
+ f16 = heapFloat[(r2+22)];
+ f17 = f9*f1;
+ f18 = f10*f0;
+ f11 = f11+f12;
+ f12 = f13*f3;
+ f19 = heapFloat[(r2+26)];
+ r0 = heap32[(r0+4)];
+ f1 = f14*f1;
+ f0 = f15*f0;
+ f17 = f17+f18;
+ f18 = f16*f3;
+ f11 = f11+f12;
+ f12 = heapFloat[(r2+28)];
+ f20 = heapFloat[(r2+30)];
+ f21 = heapFloat[(r2+29)];
+ r1 = sp + -64;
+ f17 = f17+f18;
+ f0 = f1+f0;
+ f1 = f19*f3;
+ f3 = f11+f12;
+ f0 = f0+f1;
+ r2 = r1 >> 2;
+ f1 = f17+f21;
+ heapFloat[(fp+-16)] = f3;
+ f3 = f7*f5;
+ f7 = f8*f2;
+ f0 = f0+f20;
+ heapFloat[(r2+1)] = f1;
+ heapFloat[(r2+2)] = f0;
+ f0 = f9*f5;
+ f1 = f10*f2;
+ f3 = f3+f7;
+ f7 = f13*f4;
+ r4 = sp + -48;
+ f5 = f14*f5;
+ f2 = f15*f2;
+ f0 = f0+f1;
+ f1 = f16*f4;
+ f3 = f3+f7;
+ heap32[(r2+3)] = 0;
+ r2 = r4 >> 2;
+ f2 = f5+f2;
+ f4 = f19*f4;
+ f0 = f0+f1;
+ heapFloat[(fp+-12)] = f3;
+ f1 = f2+f4;
+ heapFloat[(r2+1)] = f0;
+ heapFloat[(r2+2)] = f1;
+ heap32[(r2+3)] = 0;
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r4;
+ heap32[(g0+2)] = r1;
+ heapFloat[(g0+3)] = f6;
+ __FUNCTION_TABLE__[(r0)>>2](i7);
+}
+else{
+ f7 = heapFloat[(r2+16)];
+ f8 = heapFloat[(r2+17)];
+ f9 = heapFloat[(r2+20)];
+ f10 = heapFloat[(r2+21)];
+ f11 = f7*f5;
+ f12 = f8*f2;
+ f13 = heapFloat[(r2+18)];
+ f14 = heapFloat[(r2+24)];
+ f15 = heapFloat[(r2+25)];
+ f16 = heapFloat[(r2+22)];
+ f17 = f9*f5;
+ f18 = f10*f2;
+ f11 = f11+f12;
+ f12 = f13*f4;
+ f19 = heapFloat[(r2+26)];
+ f11 = f11+f12;
+ f5 = f14*f5;
+ f2 = f15*f2;
+ f12 = f17+f18;
+ f17 = f16*f4;
+ r0 = sp + -80;
+ f12 = f12+f17;
+ f2 = f5+f2;
+ f4 = f19*f4;
+ f5 = -f11;
+ f2 = f2+f4;
+ r1 = r0 >> 2;
+ f4 = -f12;
+ heapFloat[(fp+-20)] = f5;
+ f5 = -f2;
+ heapFloat[(r1+1)] = f4;
+ heapFloat[(r1+2)] = f5;
+ f4 = f7*f1;
+ f5 = f8*f0;
+ heap32[(r1+3)] = 0;
+ f7 = f9*f1;
+ f8 = f10*f0;
+ f4 = f4+f5;
+ f5 = f13*f3;
+ f1 = f14*f1;
+ f0 = f15*f0;
+ f7 = f7+f8;
+ f8 = f16*f3;
+ f4 = f4+f5;
+ f5 = heapFloat[(r2+28)];
+ f0 = f1+f0;
+ f1 = f19*f3;
+ f3 = f7+f8;
+ f7 = heapFloat[(r2+29)];
+ f8 = heapFloat[(r2+30)];
+ f4 = f4+f5;
+ f5 = f11*f6;
+ r2 = sp + -96;
+ f0 = f0+f1;
+ f1 = f3+f7;
+ f3 = f12*f6;
+ f4 = f4+f5;
+ r1 = r2 >> 2;
+ f0 = f0+f8;
+ f2 = f2*f6;
+ f1 = f1+f3;
+ heapFloat[(fp+-24)] = f4;
+ f0 = f0+f2;
+ heapFloat[(r1+1)] = f1;
+ heapFloat[(r1+2)] = f0;
+ r4 = r3 >> 2;
+ heap32[(r1+3)] = 0;
+ r1 = heap32[(r4)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+4)];
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r0;
+ heap32[(g0+2)] = r2;
+ heapFloat[(g0+3)] = f6;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+ return;
+}
+}
+}
+} while(0);
+ return;
+}
+
+function _ZNK10btBoxShape7getAabbERK11btTransformR9btVector3S4_(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var f1;
+ var f2;
+ var f3;
+var __label__ = 0;
+ i7 = sp + -32;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ r2 = heap32[(r1)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+11)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ f1 = heapFloat[(r1+7)];
+ f2 = heapFloat[(r1+8)];
+ f3 = heapFloat[(r1+9)];
+ r0 = heap32[(fp+1)];
+ r1 = heap32[(fp+2)];
+ r2 = heap32[(fp+3)];
+ heapFloat[(g0)] = f1;
+ heapFloat[(g0+1)] = f2;
+ heapFloat[(g0+2)] = f3;
+ heapFloat[(g0+3)] = f_g0;
+ heap32[(g0+4)] = r0;
+ heap32[(g0+5)] = r1;
+ heap32[(g0+6)] = r2;
+ _Z15btTransformAabbRK9btVector3fRK11btTransformRS_S5_(i7);
+ return;
+}
+
+function _Z15btTransformAabbRK9btVector3fRK11btTransformRS_S5_(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+ var f10;
+ var f11;
+ var f12;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+4)];
+ r0 = r0 >> 2;
+ f0 = heapFloat[(fp+2)];
+ f1 = heapFloat[(fp+3)];
+ f2 = heapFloat[(fp+1)];
+ f3 = heapFloat[(fp)];
+ f4 = heapFloat[(r0+10)];
+ r1 = heap32[(fp+5)];
+ r2 = heap32[(fp+6)];
+ f0 = f0+f1;
+ f2 = f2+f1;
+ f1 = f3+f1;
+ f3 = 0;
+ if(f4 <f3) //_LBB373_2
+{
+ f4 = -f4;
+}
+ f5 = heapFloat[(r0+9)];
+ if(f5 <f3) //_LBB373_5
+{
+ f5 = -f5;
+}
+ f6 = heapFloat[(r0+8)];
+ if(f6 <f3) //_LBB373_8
+{
+ f6 = -f6;
+}
+ f7 = heapFloat[(r0+6)];
+ if(f7 <f3) //_LBB373_11
+{
+ f7 = -f7;
+}
+ f8 = heapFloat[(r0+5)];
+ if(f8 <f3) //_LBB373_14
+{
+ f8 = -f8;
+}
+ f9 = heapFloat[(r0+4)];
+ if(f9 <f3) //_LBB373_17
+{
+ f9 = -f9;
+}
+ f10 = heapFloat[(r0+2)];
+ if(f10 <f3) //_LBB373_20
+{
+ f10 = -f10;
+}
+ f11 = heapFloat[(r0+1)];
+ if(f11 <f3) //_LBB373_23
+{
+ f11 = -f11;
+}
+ f12 = heapFloat[(r0)];
+ if(f12 <f3) //_LBB373_26
+{
+ f12 = -f12;
+}
+ f3 = f12*f1;
+ f11 = f11*f2;
+ f9 = f9*f1;
+ f8 = f8*f2;
+ f3 = f3+f11;
+ f10 = f10*f0;
+ f1 = f6*f1;
+ f2 = f5*f2;
+ f5 = f9+f8;
+ f6 = f7*f0;
+ f3 = f3+f10;
+ f7 = heapFloat[(r0+12)];
+ f8 = heapFloat[(r0+13)];
+ f9 = heapFloat[(r0+14)];
+ f5 = f5+f6;
+ r0 = r1 >> 2;
+ f1 = f1+f2;
+ f0 = f4*f0;
+ f2 = f7-f3;
+ f0 = f1+f0;
+ f1 = f8-f5;
+ heapFloat[(r0)] = f2;
+ f2 = f9-f0;
+ heapFloat[(r0+1)] = f1;
+ heapFloat[(r0+2)] = f2;
+ r1 = r2 >> 2;
+ f1 = f7+f3;
+ heap32[(r0+3)] = 0;
+ f2 = f8+f5;
+ heapFloat[(r1)] = f1;
+ f0 = f9+f0;
+ heapFloat[(r1+1)] = f2;
+ heapFloat[(r1+2)] = f0;
+ heap32[(r1+3)] = 0;
+ return;
+}
+
+function _ZNK10btBoxShape24localGetSupportingVertexERK9btVector3(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ r1 = r0 >> 2;
+ r2 = heap32[(r1)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+11)];
+ f0 = heapFloat[(r1+7)];
+ f1 = heapFloat[(r1+8)];
+ f2 = heapFloat[(r1+9)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ f3 = f_g0;
+ r2 = heap32[(r1)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+11)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ f4 = f_g0;
+ r1 = heap32[(r1)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+11)];
+ heap32[(g0)] = r0;
+ r0 = heap32[(fp+2)];
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+ r0 = r0 >> 2;
+ f0 = f0+f_g0;
+ r1 = heap32[(fp)];
+ f1 = f1+f4;
+ f4 = 0;
+ f5 = -f0;
+ f6 = heapFloat[(r0)];
+ f7 = heapFloat[(r0+2)];
+ f8 = heapFloat[(r0+1)];
+ f2 = f2+f3;
+ f3 = -f1;
+ r0 = r1 >> 2;
+ f0 = f6 < f4 ? f5 : f0;
+ f5 = -f2;
+ f1 = f8 < f4 ? f3 : f1;
+ heapFloat[(r0)] = f0;
+ f0 = f7 < f4 ? f5 : f2;
+ heapFloat[(r0+1)] = f1;
+ heapFloat[(r0+2)] = f0;
+ heap32[(r0+3)] = 0;
+ return;
+}
+
+function _ZNK10btBoxShape37localGetSupportingVertexWithoutMarginERK9btVector3(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ r0 = r0 >> 2;
+ r1 = heap32[(fp+2)];
+ r1 = r1 >> 2;
+ f0 = heapFloat[(r0+7)];
+ r2 = heap32[(fp)];
+ f1 = heapFloat[(r0+9)];
+ f2 = heapFloat[(r0+8)];
+ f3 = 0;
+ f4 = -f0;
+ f5 = heapFloat[(r1)];
+ f6 = heapFloat[(r1+2)];
+ f7 = heapFloat[(r1+1)];
+ f8 = -f2;
+ r0 = r2 >> 2;
+ f0 = f5 < f3 ? f4 : f0;
+ f4 = -f1;
+ f2 = f7 < f3 ? f8 : f2;
+ heapFloat[(r0)] = f0;
+ f0 = f6 < f3 ? f4 : f1;
+ heapFloat[(r0+1)] = f2;
+ heapFloat[(r0+2)] = f0;
+ heap32[(r0+3)] = 0;
+ return;
+}
+
+function _ZNK10btBoxShape49batchedUnitVectorGetSupportingVertexWithoutMarginEPK9btVector3PS0_i(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+3)];
+if(!(r0 <1)) //_LBB376_3
+{
+ r1 = heap32[(fp)];
+ r2 = heap32[(fp+1)];
+ r3 = heap32[(fp+2)];
+ r3 = (r3 + 8)|0;
+ r2 = (r2 + 8)|0;
+ f3 = 0;
+_3: while(true){
+ r4 = r1 >> 2;
+ r5 = r2 >> 2;
+ f0 = heapFloat[(r4+7)];
+ f1 = heapFloat[(r4+9)];
+ f2 = heapFloat[(r4+8)];
+ f4 = -f0;
+ f5 = heapFloat[(r5+-2)];
+ f6 = heapFloat[(r5)];
+ f7 = heapFloat[(r5+-1)];
+ f8 = -f2;
+ r4 = r3 >> 2;
+ f0 = f5 < f3 ? f4 : f0;
+ f4 = -f1;
+ f2 = f7 < f3 ? f8 : f2;
+ heapFloat[(r4+-2)] = f0;
+ f0 = f6 < f3 ? f4 : f1;
+ heapFloat[(r4+-1)] = f2;
+ r0 = (r0 + -1)|0;
+ r3 = (r3 + 16)|0;
+ r2 = (r2 + 16)|0;
+ heapFloat[(r4)] = f0;
+ heap32[(r4+1)] = 0;
+ if(r0 !=0) //_LBB376_2
+{
+continue _3;
+}
+else{
+break _3;
+}
+}
+}
+ return;
+}
+
+function _ZN10btBoxShape9setMarginEf(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ r2 = heap32[(r1)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+11)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ f0 = f_g0;
+ r2 = heap32[(r1)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+11)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ f1 = f_g0;
+ r2 = heap32[(r1)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+11)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ f2 = f_g0;
+ f3 = heapFloat[(r1+9)];
+ f4 = heapFloat[(r1+8)];
+ f5 = heapFloat[(r1+7)];
+ heap32[(r1+11)] = heap32[(fp+1)];
+ r2 = heap32[(r1)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+11)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ f6 = f_g0;
+ r2 = heap32[(r1)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+11)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ f7 = f_g0;
+ r2 = heap32[(r1)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+11)];
+ heap32[(g0)] = r0;
+ f2 = f5+f2;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ f1 = f4+f1;
+ f2 = f2-f_g0;
+ f0 = f3+f0;
+ f1 = f1-f7;
+ heapFloat[(r1+7)] = f2;
+ f0 = f0-f6;
+ heapFloat[(r1+8)] = f1;
+ heapFloat[(r1+9)] = f0;
+ heap32[(r1+10)] = 0;
+ return;
+}
+
+function _ZNK10btBoxShape8getPlaneER9btVector3S1_i(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var f0;
+ var f1;
+ var f2;
+var __label__ = 0;
+ i7 = sp + -64;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ r2 = heap32[(r1)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+28)];
+ r3 = sp + -32;
+ r4 = heap32[(fp+3)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r3;
+ heap32[(g0+2)] = r4;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ r2 = r3 >> 2;
+ r3 = heap32[(fp+1)];
+ f0 = heapFloat[(r2+2)];
+ f1 = heapFloat[(r2+1)];
+ f2 = heapFloat[(fp+-8)];
+ r2 = r3 >> 2;
+ heapFloat[(r2)] = f2;
+ heapFloat[(r2+1)] = f1;
+ heapFloat[(r2+2)] = f0;
+ heap32[(r2+3)] = 0;
+ r1 = heap32[(r1)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+15)];
+ r2 = sp + -16;
+ f2 = -f2;
+ r3 = r2 >> 2;
+ f1 = -f1;
+ heapFloat[(fp+-4)] = f2;
+ f0 = -f0;
+ heapFloat[(r3+1)] = f1;
+ heapFloat[(r3+2)] = f0;
+ heap32[(r3+3)] = 0;
+ r3 = sp + -48;
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r0;
+ heap32[(g0+2)] = r2;
+ r0 = heap32[(fp+2)];
+ r0 = r0 >> 2;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+ r1 = r3 >> 2;
+ heap32[(r0)] = heap32[(fp+-12)];
+ heap32[(r0+1)] = heap32[(r1+1)];
+ heap32[(r0+2)] = heap32[(r1+2)];
+ heap32[(r0+3)] = heap32[(r1+3)];
+ return;
+}
+
+function _ZNK10btBoxShape12getNumPlanesEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = 6;
+ r_g0 = r0;
+ return;
+}
+
+function _ZNK10btBoxShape14getNumVerticesEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = 8;
+ r_g0 = r0;
+ return;
+}
+
+function _ZNK10btBoxShape11getNumEdgesEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = 12;
+ r_g0 = r0;
+ return;
+}
+
+function _ZNK10btBoxShape9getVertexEiR9btVector3(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ r1 = r0 >>> 1;
+ r2 = heap32[(fp)];
+ r2 = r2 >> 2;
+ r1 = r1 & 1;
+ r3 = r0 >>> 2;
+ r0 = r0 & 1;
+ r4 = 0;
+ f0 = 1;
+ f1 = 0;
+ r3 = r3 & 1;
+ r5 = r1 ^ 1;
+ f0 = r0 == r4 ? f0 : f1;
+ f1 = heapFloat[(r2+7)];
+ f2 = r0; //fitos r0, f2
+ r0 = heap32[(fp+2)];
+ r4 = r3 ^ 1;
+ f3 = r5; //fitos r5, f3
+ f4 = heapFloat[(r2+8)];
+ f5 = r1; //fitos r1, f5
+ f6 = heapFloat[(r2+9)];
+ f0 = f1*f0;
+ f1 = f1*f2;
+ f2 = r4; //fitos r4, f2
+ f7 = r3; //fitos r3, f7
+ r0 = r0 >> 2;
+ f3 = f4*f3;
+ f4 = f4*f5;
+ f0 = f0-f1;
+ f1 = f6*f2;
+ f2 = f6*f7;
+ f3 = f3-f4;
+ heapFloat[(r0)] = f0;
+ f0 = f1-f2;
+ heapFloat[(r0+1)] = f3;
+ heapFloat[(r0+2)] = f0;
+ heap32[(r0+3)] = 0;
+ return;
+}
+
+function _ZNK10btBoxShape8isInsideERK9btVector3f(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ r1 = heap32[(fp)];
+ r1 = r1 >> 2;
+ r0 = r0 >> 2;
+ f0 = heapFloat[(r0)];
+ f1 = heapFloat[(fp+2)];
+ f2 = heapFloat[(r1+7)];
+ f3 = f2+f1;
+if(!(f0 >f3)) //_LBB383_6
+{
+ f2 = -f2;
+ f2 = f2-f1;
+if(!(f0 <f2)) //_LBB383_6
+{
+ f0 = heapFloat[(r1+8)];
+ f2 = heapFloat[(r0+1)];
+ f3 = f0+f1;
+if(!(f2 >f3)) //_LBB383_6
+{
+ f0 = -f0;
+ f0 = f0-f1;
+if(!(f2 <f0)) //_LBB383_6
+{
+ f0 = heapFloat[(r1+9)];
+ f2 = heapFloat[(r0+2)];
+ f3 = f0+f1;
+if(!(f2 >f3)) //_LBB383_6
+{
+ f0 = -f0;
+ f0 = f0-f1;
+ r0 = f2 >= f0;
+ r0 = r0 & 1;
+ r_g0 = r0;
+ return;
+}
+}
+}
+}
+}
+ r0 = 0;
+ r_g0 = r0;
+ return;
+}
+
+function _ZNK10btBoxShape7getNameEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = _2E_str173;
+ r_g0 = r0;
+ return;
+}
+
+function _ZNK10btBoxShape36getNumPreferredPenetrationDirectionsEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = 6;
+ r_g0 = r0;
+ return;
+}
+
+function _ZNK10btBoxShape21calculateLocalInertiaEfR9btVector3(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ r2 = heap32[(r1)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+11)];
+ f0 = heapFloat[(r1+7)];
+ f1 = heapFloat[(r1+8)];
+ f2 = heapFloat[(r1+9)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ f3 = f_g0;
+ r2 = heap32[(r1)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+11)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ r1 = heap32[(r1)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+11)];
+ heap32[(g0)] = r0;
+ f1 = f1+f_g0;
+ f2 = f2+f3;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+ f0 = f0+f_g0;
+ f1 = f1+f1;
+ f2 = f2+f2;
+ f0 = f0+f0;
+ f3 = heapFloat[(fp+1)];
+ f4 = 12;
+ f1 = f1*f1;
+ f2 = f2*f2;
+ f0 = f0*f0;
+ r0 = heap32[(fp+2)];
+ f3 = f3/f4;
+ f4 = f1+f2;
+ f2 = f0+f2;
+ r0 = r0 >> 2;
+ f4 = f3*f4;
+ f0 = f0+f1;
+ f1 = f3*f2;
+ heapFloat[(r0)] = f4;
+ f0 = f3*f0;
+ heapFloat[(r0+1)] = f1;
+ heapFloat[(r0+2)] = f0;
+ heap32[(r0+3)] = 0;
+ return;
+}
+
+function _ZNK10btBoxShape16getPlaneEquationER9btVector4i(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var f0;
+ var f1;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r1 = heap32[(fp+2)];
+ r2 = heap32[(fp+1)];
+ f0 = heapFloat[(r0+8)];
+_1: do {
+ if(r1 >2) //_LBB387_4
+{
+ if(r1 ==3) //_LBB387_13
+{
+ r2 = r2 >> 2;
+ heap32[(r2)] = 0;
+ heap32[(r2+1)] = -1082130432;
+__label__ = 11;
+break _1;
+}
+else{
+ f0 = heapFloat[(r0+9)];
+ if(r1 ==4) //_LBB387_14
+{
+ r2 = r2 >> 2;
+ heap32[(r2)] = 0;
+ heap32[(r2+1)] = 0;
+ f0 = -f0;
+ heap32[(r2+2)] = 1065353216;
+ heapFloat[(r2+3)] = f0;
+ return;
+}
+else{
+ if(r1 ==5) //_LBB387_15
+{
+ r0 = r2 >> 2;
+ heap32[(r0)] = 0;
+ heap32[(r0+1)] = 0;
+ f0 = -f0;
+ heap32[(r0+2)] = -1082130432;
+ heapFloat[(r0+3)] = f0;
+ return;
+}
+else{
+__label__ = 16;
+break _1;
+}
+}
+}
+}
+else{
+ f1 = heapFloat[(r0+7)];
+ if(r1 ==0) //_LBB387_7
+{
+ r2 = r2 >> 2;
+ heap32[(r2)] = 1065353216;
+}
+else{
+ if(r1 ==1) //_LBB387_9
+{
+ r2 = r2 >> 2;
+ heap32[(r2)] = -1082130432;
+}
+else{
+ if(r1 ==2) //_LBB387_10
+{
+ r2 = r2 >> 2;
+ heap32[(r2)] = 0;
+ heap32[(r2+1)] = 1065353216;
+__label__ = 11;
+break _1;
+}
+else{
+__label__ = 16;
+break _1;
+}
+}
+}
+ heap32[(r2+1)] = 0;
+ f0 = -f1;
+__label__ = 12;
+}
+} while(0);
+switch(__label__ ){//multiple entries
+case 11:
+ f0 = -f0;
+break;
+case 16:
+ r0 = _2E_str10;
+ r1 = _2E_str2175;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 182;
+ _assert(i7);
+break;
+}
+ heap32[(r2+2)] = 0;
+ heapFloat[(r2+3)] = f0;
+ return;
+}
+
+function _ZNK10btBoxShape7getEdgeEiR9btVector3S1_(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ r1 = heap32[(fp)];
+ r2 = heap32[(fp+2)];
+ r3 = heap32[(fp+3)];
+_1: do {
+ if(r0 >5) //_LBB388_8
+{
+ if(r0 >8) //_LBB388_12
+{
+ if(r0 ==9) //_LBB388_24
+{
+ r0 = 4;
+ r4 = 6;
+__label__ = 28;
+break _1;
+}
+else{
+ if(r0 ==10) //_LBB388_25
+{
+ r0 = 5;
+ r4 = 7;
+__label__ = 28;
+break _1;
+}
+else{
+ if(r0 ==11) //_LBB388_26
+{
+ r0 = 6;
+ r4 = 7;
+__label__ = 28;
+break _1;
+}
+else{
+__label__ = 27;
+break _1;
+}
+}
+}
+}
+else{
+ if(r0 ==6) //_LBB388_21
+{
+ r0 = 2;
+ r4 = 6;
+__label__ = 28;
+break _1;
+}
+else{
+ if(r0 ==7) //_LBB388_22
+{
+ r0 = 3;
+ r4 = 7;
+__label__ = 28;
+break _1;
+}
+else{
+ if(r0 ==8) //_LBB388_23
+{
+ r0 = 4;
+ r4 = 5;
+__label__ = 28;
+break _1;
+}
+else{
+__label__ = 27;
+break _1;
+}
+}
+}
+}
+}
+else{
+ if(r0 >2) //_LBB388_5
+{
+ if(r0 ==3) //_LBB388_18
+{
+ r0 = 2;
+ r4 = 3;
+__label__ = 28;
+break _1;
+}
+else{
+ if(r0 ==4) //_LBB388_19
+{
+ r0 = 0;
+ r4 = 4;
+__label__ = 28;
+break _1;
+}
+else{
+ if(r0 ==5) //_LBB388_20
+{
+ r0 = 1;
+ r4 = 5;
+__label__ = 28;
+break _1;
+}
+else{
+__label__ = 27;
+break _1;
+}
+}
+}
+}
+else{
+ if(r0 ==0) //_LBB388_15
+{
+ r0 = 0;
+ r4 = 1;
+__label__ = 28;
+break _1;
+}
+else{
+ if(r0 ==1) //_LBB388_16
+{
+ r0 = 0;
+ r4 = 2;
+__label__ = 28;
+}
+else{
+ if(r0 ==2) //_LBB388_17
+{
+ r0 = 1;
+ r4 = 3;
+__label__ = 28;
+}
+else{
+__label__ = 27;
+}
+}
+}
+}
+}
+} while(0);
+switch(__label__ ){//multiple entries
+case 28:
+ r5 = r1 >> 2;
+ r6 = heap32[(r5)];
+ r6 = r6 >> 2;
+ r6 = heap32[(r6+24)];
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r0;
+ heap32[(g0+2)] = r2;
+ __FUNCTION_TABLE__[(r6)>>2](i7);
+ r0 = heap32[(r5)];
+ r0 = r0 >> 2;
+ r0 = heap32[(r0+24)];
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r4;
+ heap32[(g0+2)] = r3;
+ __FUNCTION_TABLE__[(r0)>>2](i7);
+ return;
+break;
+case 27:
+ r0 = _2E_str10;
+ r1 = _2E_str2175;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 246;
+ _assert(i7);
+break;
+}
+}
+
+function _ZNK10btBoxShape32getPreferredPenetrationDirectionEiR9btVector3(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ r1 = heap32[(fp+2)];
+_1: do {
+ if(r0 >2) //_LBB389_4
+{
+ if(r0 ==3) //_LBB389_12
+{
+ r1 = r1 >> 2;
+ heap32[(r1)] = 0;
+ heap32[(r1+1)] = -1082130432;
+__label__ = 9;
+break _1;
+}
+else{
+ if(r0 ==4) //_LBB389_13
+{
+ r1 = r1 >> 2;
+ heap32[(r1)] = 0;
+ heap32[(r1+1)] = 0;
+ heap32[(r1+2)] = 1065353216;
+ heap32[(r1+3)] = 0;
+ return;
+}
+else{
+ if(r0 ==5) //_LBB389_14
+{
+ r0 = r1 >> 2;
+ heap32[(r0)] = 0;
+ heap32[(r0+1)] = 0;
+ heap32[(r0+2)] = -1082130432;
+ heap32[(r0+3)] = 0;
+ return;
+}
+else{
+__label__ = 15;
+break _1;
+}
+}
+}
+}
+else{
+ if(r0 ==0) //_LBB389_7
+{
+ r1 = r1 >> 2;
+ heap32[(r1)] = 1065353216;
+}
+else{
+ if(r0 ==1) //_LBB389_10
+{
+ r1 = r1 >> 2;
+ heap32[(r1)] = -1082130432;
+}
+else{
+ if(r0 ==2) //_LBB389_11
+{
+ r1 = r1 >> 2;
+ heap32[(r1)] = 0;
+ heap32[(r1+1)] = 1065353216;
+__label__ = 9;
+break _1;
+}
+else{
+__label__ = 15;
+break _1;
+}
+}
+}
+ heap32[(r1+1)] = 0;
+__label__ = 9;
+}
+} while(0);
+switch(__label__ ){//multiple entries
+case 9:
+ heap32[(r1+2)] = 0;
+ heap32[(r1+3)] = 0;
+ return;
+break;
+case 15:
+ r0 = _2E_str10;
+ r1 = _2E_str2175;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 309;
+ _assert(i7);
+break;
+}
+}
+
+function _ZN10btBoxShape15setLocalScalingERK9btVector3(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ r2 = heap32[(r1)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+11)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ f0 = f_g0;
+ r2 = heap32[(r1)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+11)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ f1 = f_g0;
+ r2 = heap32[(r1)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+11)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ f2 = f_g0;
+ r0 = heap32[(fp+1)];
+ f3 = heapFloat[(r1+9)];
+ f4 = heapFloat[(r1+8)];
+ f5 = heapFloat[(r1+7)];
+ r0 = r0 >> 2;
+ f3 = f3+f0;
+ f6 = heapFloat[(r1+5)];
+ f4 = f4+f1;
+ f7 = heapFloat[(r1+4)];
+ f5 = f5+f2;
+ f8 = heapFloat[(r1+3)];
+ f9 = heapFloat[(r0+2)];
+ f3 = f3/f6;
+ f4 = f4/f7;
+ f5 = f5/f8;
+ f6 = 0;
+ if(f9 <f6) //_LBB390_2
+{
+ f9 = -f9;
+}
+ f7 = heapFloat[(r0+1)];
+ if(f7 <f6) //_LBB390_5
+{
+ f7 = -f7;
+}
+ f8 = heapFloat[(r0)];
+ if(f8 <f6) //_LBB390_8
+{
+ f8 = -f8;
+}
+ heapFloat[(r1+3)] = f8;
+ heapFloat[(r1+4)] = f7;
+ heapFloat[(r1+5)] = f9;
+ f5 = f5*f8;
+ f4 = f4*f7;
+ f2 = f5-f2;
+ heap32[(r1+6)] = 0;
+ f3 = f3*f9;
+ f1 = f4-f1;
+ heapFloat[(r1+7)] = f2;
+ f0 = f3-f0;
+ heapFloat[(r1+8)] = f1;
+ heapFloat[(r1+9)] = f0;
+ heap32[(r1+10)] = 0;
+ return;
+}
+
+function _ZN10btBoxShapeD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV13btConvexShape;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+if(!(r0 ==0)) //_LBB391_2
+{
+ r0 = gNumAlignedFree;
+ r0 = r0 >> 2;
+ r1 = heap32[(r0)];
+ r1 = (r1 + 1)|0;
+ heap32[(r0)] = r1;
+ r0 = heap32[(r2+-1)];
+ heap32[(g0)] = r0;
+ free(i7);
+}
+ return;
+}
+
+function _ZN10btBoxShapeD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV13btConvexShape;
+ r0 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r0)] = r1;
+ return;
+}
+
+function _ZNK14btConcaveShape9getMarginEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var f0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ f0 = heapFloat[(r0+3)];
+ f_g0 = f0;
+ return;
+}
+
+function _ZN14btConcaveShape9setMarginEf(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ heap32[(r0+3)] = heap32[(fp+1)];
+ return;
+}
+
+function _ZNK22btBvhTriangleMeshShape7getNameEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = _2E_str181;
+ r_g0 = r0;
+ return;
+}
+
+function _ZNK22btBvhTriangleMeshShape28calculateSerializeBufferSizeEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = 60;
+ r_g0 = r0;
+ return;
+}
+
+function _ZZN22btBvhTriangleMeshShape14performRaycastEP18btTriangleCallbackRK9btVector3S4_EN21MyNodeOverlapCallbackD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTVZN22btBvhTriangleMeshShape14performRaycastEP18btTriangleCallbackRK9btVector3S4_E21MyNodeOverlapCallback;
+ r0 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r0)] = r1;
+ return;
+}
+
+function _ZZN22btBvhTriangleMeshShape14performRaycastEP18btTriangleCallbackRK9btVector3S4_EN21MyNodeOverlapCallbackD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTVZN22btBvhTriangleMeshShape14performRaycastEP18btTriangleCallbackRK9btVector3S4_E21MyNodeOverlapCallback;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZZN22btBvhTriangleMeshShape14performRaycastEP18btTriangleCallbackRK9btVector3S4_EN21MyNodeOverlapCallback11processNodeEii(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+var __label__ = 0;
+ i7 = sp + -120;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r1 = heap32[(r0+1)];
+ r2 = r1 >> 2;
+ r2 = heap32[(r2)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+4)];
+ r3 = heap32[(fp+1)];
+ r4 = sp + -52;
+ r5 = sp + -56;
+ r6 = sp + -60;
+ r7 = sp + -64;
+ r8 = sp + -68;
+ r9 = sp + -72;
+ r10 = sp + -76;
+ r11 = sp + -80;
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r4;
+ heap32[(g0+2)] = r5;
+ heap32[(g0+3)] = r6;
+ heap32[(g0+4)] = r7;
+ heap32[(g0+5)] = r8;
+ heap32[(g0+6)] = r9;
+ heap32[(g0+7)] = r10;
+ heap32[(g0+8)] = r11;
+ heap32[(g0+9)] = r3;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ r1 = heap32[(fp+-20)];
+ r2 = (r1 + -2)|0;
+ if(uint(r2) <uint(2)) //_LBB399_2
+{
+ r2 = heap32[(fp+2)];
+ r4 = heap32[(fp+-17)];
+ r5 = heap32[(fp+-18)];
+ r5 = (r5 * r2)|0;
+ r6 = heap32[(r0+1)];
+ r4 = (r4 + r5)|0;
+ r5 = -6;
+_3: while(true){
+ r7 = 0;
+ r8 = r5 << 1;
+ r7 = (r7 - r8)|0;
+ if(r1 !=3) //_LBB399_5
+{
+ r8 = (r4 - r8)|0;
+ r8 = r8 >> 2;
+ r8 = heap32[(r8+-1)];
+}
+else{
+ r8 = (r4 - r5)|0;
+ r8 = heapU16[(r8+-2)>>1];
+}
+ r9 = heap32[(fp+-16)];
+ r10 = heap32[(fp+-13)];
+ r8 = (r9 * r8)|0;
+ r9 = heap32[(fp+-15)];
+ if(r9 !=0) //_LBB399_8
+{
+ r9 = (r10 + r8)|0;
+ r11 = r6 >> 2;
+ f0 = llvm_readDouble((r9+16));
+ f1 = llvm_readDouble((r9+8));
+ f2 = llvm_readDouble((r10+r8));
+ f0 = f0; //fdtos f0, f0
+ f3 = heapFloat[(r11+3)];
+ f1 = f1; //fdtos f1, f1
+ f4 = heapFloat[(r11+2)];
+ f2 = f2; //fdtos f2, f2
+ f5 = heapFloat[(r11+1)];
+ f0 = f0*f3;
+ f1 = f1*f4;
+ f2 = f2*f5;
+}
+else{
+ r8 = (r10 + r8)|0;
+ r8 = r8 >> 2;
+ r10 = r6 >> 2;
+ f0 = heapFloat[(r8+2)];
+ f1 = heapFloat[(r10+3)];
+ f2 = heapFloat[(r8+1)];
+ f3 = heapFloat[(r10+2)];
+ f4 = heapFloat[(r8)];
+ f5 = heapFloat[(r10+1)];
+ f0 = f0*f1;
+ f1 = f2*f3;
+ f2 = f4*f5;
+}
+ r8 = sp + -48;
+ r9 = r7 << 2;
+ r10 = r7 << 2;
+ r9 = (r8 + r9)|0;
+ r11 = r7 << 2;
+ r10 = (r8 + r10)|0;
+ r9 = r9 >> 2;
+ r7 = r7 << 2;
+ r11 = (r8 + r11)|0;
+ r10 = r10 >> 2;
+ heapFloat[(r9+-4)] = f2;
+ r7 = (r8 + r7)|0;
+ r9 = r11 >> 2;
+ heapFloat[(r10+-3)] = f1;
+ r5 = (r5 + 2)|0;
+ r7 = r7 >> 2;
+ heapFloat[(r9+-2)] = f0;
+ heap32[(r7+-1)] = 0;
+if(!(r5 !=0)) //_LBB399_3
+{
+break _3;
+}
+}
+ r1 = heap32[(r0+2)];
+ r4 = r1 >> 2;
+ r4 = heap32[(r4)];
+ r4 = r4 >> 2;
+ r4 = heap32[(r4+2)];
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r8;
+ heap32[(g0+2)] = r3;
+ heap32[(g0+3)] = r2;
+ __FUNCTION_TABLE__[(r4)>>2](i7);
+ r0 = heap32[(r0+1)];
+ r1 = r0 >> 2;
+ r1 = heap32[(r1)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+6)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r3;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+ return;
+}
+else{
+ r0 = _2E_str6187;
+ r1 = _2E_str7188;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 130;
+ _assert(i7);
+}
+}
+
+function _ZZN22btBvhTriangleMeshShape17performConvexcastEP18btTriangleCallbackRK9btVector3S4_S4_S4_EN21MyNodeOverlapCallbackD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTVZN22btBvhTriangleMeshShape17performConvexcastEP18btTriangleCallbackRK9btVector3S4_S4_S4_E21MyNodeOverlapCallback;
+ r0 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r0)] = r1;
+ return;
+}
+
+function _ZZN22btBvhTriangleMeshShape17performConvexcastEP18btTriangleCallbackRK9btVector3S4_S4_S4_EN21MyNodeOverlapCallbackD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTVZN22btBvhTriangleMeshShape17performConvexcastEP18btTriangleCallbackRK9btVector3S4_S4_S4_E21MyNodeOverlapCallback;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZZN22btBvhTriangleMeshShape17performConvexcastEP18btTriangleCallbackRK9btVector3S4_S4_S4_EN21MyNodeOverlapCallback11processNodeEii(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+var __label__ = 0;
+ i7 = sp + -120;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r1 = heap32[(r0+1)];
+ r2 = r1 >> 2;
+ r2 = heap32[(r2)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+4)];
+ r3 = heap32[(fp+1)];
+ r4 = sp + -52;
+ r5 = sp + -56;
+ r6 = sp + -60;
+ r7 = sp + -64;
+ r8 = sp + -68;
+ r9 = sp + -72;
+ r10 = sp + -76;
+ r11 = sp + -80;
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r4;
+ heap32[(g0+2)] = r5;
+ heap32[(g0+3)] = r6;
+ heap32[(g0+4)] = r7;
+ heap32[(g0+5)] = r8;
+ heap32[(g0+6)] = r9;
+ heap32[(g0+7)] = r10;
+ heap32[(g0+8)] = r11;
+ heap32[(g0+9)] = r3;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ r1 = heap32[(fp+-20)];
+ r2 = (r1 + -2)|0;
+ if(uint(r2) <uint(2)) //_LBB402_2
+{
+ r2 = heap32[(fp+2)];
+ r4 = heap32[(fp+-17)];
+ r5 = heap32[(fp+-18)];
+ r5 = (r5 * r2)|0;
+ r6 = heap32[(r0+1)];
+ r4 = (r4 + r5)|0;
+ r5 = -6;
+_3: while(true){
+ r7 = 0;
+ r8 = r5 << 1;
+ r7 = (r7 - r8)|0;
+ if(r1 !=3) //_LBB402_5
+{
+ r8 = (r4 - r8)|0;
+ r8 = r8 >> 2;
+ r8 = heap32[(r8+-1)];
+}
+else{
+ r8 = (r4 - r5)|0;
+ r8 = heapU16[(r8+-2)>>1];
+}
+ r9 = heap32[(fp+-16)];
+ r10 = heap32[(fp+-13)];
+ r8 = (r9 * r8)|0;
+ r9 = heap32[(fp+-15)];
+ if(r9 !=0) //_LBB402_8
+{
+ r9 = (r10 + r8)|0;
+ r11 = r6 >> 2;
+ f0 = llvm_readDouble((r9+16));
+ f1 = llvm_readDouble((r9+8));
+ f2 = llvm_readDouble((r10+r8));
+ f0 = f0; //fdtos f0, f0
+ f3 = heapFloat[(r11+3)];
+ f1 = f1; //fdtos f1, f1
+ f4 = heapFloat[(r11+2)];
+ f2 = f2; //fdtos f2, f2
+ f5 = heapFloat[(r11+1)];
+ f0 = f0*f3;
+ f1 = f1*f4;
+ f2 = f2*f5;
+}
+else{
+ r8 = (r10 + r8)|0;
+ r8 = r8 >> 2;
+ r10 = r6 >> 2;
+ f0 = heapFloat[(r8+2)];
+ f1 = heapFloat[(r10+3)];
+ f2 = heapFloat[(r8+1)];
+ f3 = heapFloat[(r10+2)];
+ f4 = heapFloat[(r8)];
+ f5 = heapFloat[(r10+1)];
+ f0 = f0*f1;
+ f1 = f2*f3;
+ f2 = f4*f5;
+}
+ r8 = sp + -48;
+ r9 = r7 << 2;
+ r10 = r7 << 2;
+ r9 = (r8 + r9)|0;
+ r11 = r7 << 2;
+ r10 = (r8 + r10)|0;
+ r9 = r9 >> 2;
+ r7 = r7 << 2;
+ r11 = (r8 + r11)|0;
+ r10 = r10 >> 2;
+ heapFloat[(r9+-4)] = f2;
+ r7 = (r8 + r7)|0;
+ r9 = r11 >> 2;
+ heapFloat[(r10+-3)] = f1;
+ r5 = (r5 + 2)|0;
+ r7 = r7 >> 2;
+ heapFloat[(r9+-2)] = f0;
+ heap32[(r7+-1)] = 0;
+if(!(r5 !=0)) //_LBB402_3
+{
+break _3;
+}
+}
+ r1 = heap32[(r0+2)];
+ r4 = r1 >> 2;
+ r4 = heap32[(r4)];
+ r4 = r4 >> 2;
+ r4 = heap32[(r4+2)];
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r8;
+ heap32[(g0+2)] = r3;
+ heap32[(g0+3)] = r2;
+ __FUNCTION_TABLE__[(r4)>>2](i7);
+ r0 = heap32[(r0+1)];
+ r1 = r0 >> 2;
+ r1 = heap32[(r1)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+6)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r3;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+ return;
+}
+else{
+ r0 = _2E_str6187;
+ r1 = _2E_str7188;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 199;
+ _assert(i7);
+}
+}
+
+function _ZZNK22btBvhTriangleMeshShape19processAllTrianglesEP18btTriangleCallbackRK9btVector3S4_EN21MyNodeOverlapCallbackD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTVZNK22btBvhTriangleMeshShape19processAllTrianglesEP18btTriangleCallbackRK9btVector3S4_E21MyNodeOverlapCallback;
+ r0 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r0)] = r1;
+ return;
+}
+
+function _ZZNK22btBvhTriangleMeshShape19processAllTrianglesEP18btTriangleCallbackRK9btVector3S4_EN21MyNodeOverlapCallbackD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTVZNK22btBvhTriangleMeshShape19processAllTrianglesEP18btTriangleCallbackRK9btVector3S4_E21MyNodeOverlapCallback;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZZNK22btBvhTriangleMeshShape19processAllTrianglesEP18btTriangleCallbackRK9btVector3S4_EN21MyNodeOverlapCallback11processNodeEii(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+ var r13;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+var __label__ = 0;
+ i7 = sp + -72;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ r2 = heap32[(r1+1)];
+ r3 = r2 >> 2;
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3+4)];
+ r4 = heap32[(fp+1)];
+ r5 = sp + -4;
+ r6 = sp + -8;
+ r7 = sp + -12;
+ r8 = sp + -16;
+ r9 = sp + -20;
+ r10 = sp + -24;
+ r11 = sp + -28;
+ r12 = sp + -32;
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = r5;
+ heap32[(g0+2)] = r6;
+ heap32[(g0+3)] = r7;
+ heap32[(g0+4)] = r8;
+ heap32[(g0+5)] = r9;
+ heap32[(g0+6)] = r10;
+ heap32[(g0+7)] = r11;
+ heap32[(g0+8)] = r12;
+ heap32[(g0+9)] = r4;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ r2 = heap32[(fp+-8)];
+ r3 = (r2 + -2)|0;
+ if(uint(r3) <uint(2)) //_LBB405_2
+{
+ r3 = heap32[(fp+2)];
+ r5 = heap32[(fp+-5)];
+ r6 = heap32[(fp+-6)];
+ r6 = (r6 * r3)|0;
+ r5 = (r6 + r5)|0;
+ r6 = heap32[(r1+1)];
+ r5 = (r5 + 8)|0;
+ r7 = 0;
+ r8 = r7;
+_3: while(true){
+ r9 = r8 << 1;
+ r10 = (r7 - r9)|0;
+ if(r2 !=3) //_LBB405_5
+{
+ r9 = (r5 - r9)|0;
+ r9 = r9 >> 2;
+ r9 = heap32[(r9)];
+}
+else{
+ r9 = (r5 - r8)|0;
+ r9 = heapU16[(r9+-4)>>1];
+}
+ r11 = heap32[(fp+-4)];
+ r12 = heap32[(fp+-1)];
+ r9 = (r11 * r9)|0;
+ r11 = heap32[(fp+-3)];
+ if(r11 !=0) //_LBB405_8
+{
+ r11 = (r12 + r9)|0;
+ r13 = r6 >> 2;
+ f0 = llvm_readDouble((r11+16));
+ f1 = llvm_readDouble((r11+8));
+ f2 = llvm_readDouble((r12+r9));
+ f0 = f0; //fdtos f0, f0
+ f3 = heapFloat[(r13+3)];
+ f1 = f1; //fdtos f1, f1
+ f4 = heapFloat[(r13+2)];
+ f2 = f2; //fdtos f2, f2
+ f5 = heapFloat[(r13+1)];
+ f0 = f0*f3;
+ f1 = f1*f4;
+ f2 = f2*f5;
+}
+else{
+ r9 = (r12 + r9)|0;
+ r9 = r9 >> 2;
+ r12 = r6 >> 2;
+ f0 = heapFloat[(r9+2)];
+ f1 = heapFloat[(r12+3)];
+ f2 = heapFloat[(r9+1)];
+ f3 = heapFloat[(r12+2)];
+ f4 = heapFloat[(r9)];
+ f5 = heapFloat[(r12+1)];
+ f0 = f0*f1;
+ f1 = f2*f3;
+ f2 = f4*f5;
+}
+ r9 = r10 << 2;
+ r11 = r10 << 2;
+ r9 = (r0 + r9)|0;
+ r12 = r10 << 2;
+ r11 = (r0 + r11)|0;
+ r9 = r9 >> 2;
+ r10 = r10 << 2;
+ r12 = (r0 + r12)|0;
+ r11 = r11 >> 2;
+ heapFloat[(r9+11)] = f2;
+ r9 = (r0 + r10)|0;
+ r10 = r12 >> 2;
+ heapFloat[(r11+12)] = f1;
+ r8 = (r8 + 2)|0;
+ r9 = r9 >> 2;
+ heapFloat[(r10+13)] = f0;
+ heap32[(r9+14)] = 0;
+if(!(r8 !=6)) //_LBB405_3
+{
+break _3;
+}
+}
+ r2 = heap32[(r1+2)];
+ r5 = r2 >> 2;
+ r5 = heap32[(r5)];
+ r5 = r5 >> 2;
+ r5 = heap32[(r5+2)];
+ r0 = (r0 + 12)|0;
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = r0;
+ heap32[(g0+2)] = r4;
+ heap32[(g0+3)] = r3;
+ __FUNCTION_TABLE__[(r5)>>2](i7);
+ r0 = heap32[(r1+1)];
+ r1 = r0 >> 2;
+ r1 = heap32[(r1)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+6)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r4;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+ return;
+}
+else{
+ r0 = _2E_str6187;
+ r1 = _2E_str7188;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 280;
+ _assert(i7);
+}
+}
+
+function _ZNK22btBvhTriangleMeshShape18serializeSingleBvhEP12btSerializer(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+var __label__ = 0;
+ i7 = sp + -24;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r1 = heap32[(r0+13)];
+if(!(r1 ==0)) //_LBB406_2
+{
+ r2 = heap32[(fp+1)];
+ r3 = r1 >> 2;
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3+3)];
+ heap32[(g0)] = r1;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ r3 = r2 >> 2;
+ r4 = heap32[(r3)];
+ r4 = r4 >> 2;
+ r4 = heap32[(r4+4)];
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = r_g0;
+ heap32[(g0+2)] = 1;
+ __FUNCTION_TABLE__[(r4)>>2](i7);
+ r1 = r_g0;
+ r4 = heap32[(r0+13)];
+ r5 = r4 >> 2;
+ r5 = heap32[(r5)];
+ r5 = r5 >> 2;
+ r6 = r1 >> 2;
+ r5 = heap32[(r5+4)];
+ r6 = heap32[(r6+2)];
+ heap32[(g0)] = r4;
+ heap32[(g0+1)] = r6;
+ heap32[(g0+2)] = r2;
+ __FUNCTION_TABLE__[(r5)>>2](i7);
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3+5)];
+ r0 = heap32[(r0+13)];
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = r_g0;
+ heap32[(g0+3)] = 1213612625;
+ heap32[(g0+4)] = r0;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+}
+ return;
+}
+
+function _ZNK22btBvhTriangleMeshShape30serializeSingleTriangleInfoMapEP12btSerializer(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+var __label__ = 0;
+ i7 = sp + -24;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r1 = heap32[(r0+14)];
+if(!(r1 ==0)) //_LBB407_2
+{
+ r2 = heap32[(fp+1)];
+ r3 = r1 >> 2;
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3+2)];
+ heap32[(g0)] = r1;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ r3 = r2 >> 2;
+ r4 = heap32[(r3)];
+ r4 = r4 >> 2;
+ r4 = heap32[(r4+4)];
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = r_g0;
+ heap32[(g0+2)] = 1;
+ __FUNCTION_TABLE__[(r4)>>2](i7);
+ r1 = r_g0;
+ r4 = heap32[(r0+14)];
+ r5 = r4 >> 2;
+ r5 = heap32[(r5)];
+ r5 = r5 >> 2;
+ r6 = r1 >> 2;
+ r5 = heap32[(r5+3)];
+ r6 = heap32[(r6+2)];
+ heap32[(g0)] = r4;
+ heap32[(g0+1)] = r6;
+ heap32[(g0+2)] = r2;
+ __FUNCTION_TABLE__[(r5)>>2](i7);
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3+5)];
+ r0 = heap32[(r0+14)];
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = r_g0;
+ heap32[(g0+3)] = 1346456916;
+ heap32[(g0+4)] = r0;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+}
+ return;
+}
+
+function _ZNK19btTriangleMeshShape37localGetSupportingVertexWithoutMarginERK9btVector3(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = _2E_str10;
+ r1 = _2E_str5186;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 43;
+ _assert(i7);
+}
+
+function _ZNK22btBvhTriangleMeshShape9serializeEPvP12btSerializer(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+var __label__ = 0;
+ i7 = sp + -24;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+2)];
+ r1 = r0 >> 2;
+ r2 = heap32[(r1)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+10)];
+ r3 = heap32[(fp)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r3;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ r2 = r_g0;
+ r4 = heap32[(r1)];
+ r4 = r4 >> 2;
+ r4 = heap32[(r4+7)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r2;
+ r5 = heap32[(fp+1)];
+ __FUNCTION_TABLE__[(r4)>>2](i7);
+ r4 = r_g0;
+ r6 = r5 >> 2;
+ heap32[(r6)] = r4;
+if(!(r4 ==0)) //_LBB409_2
+{
+ r4 = heap32[(r1)];
+ r4 = r4 >> 2;
+ r4 = heap32[(r4+12)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r2;
+ __FUNCTION_TABLE__[(r4)>>2](i7);
+}
+ r2 = r3 >> 2;
+ r3 = heap32[(r2+1)];
+ heap32[(r6+1)] = r3;
+ r3 = heap32[(r2+12)];
+ r4 = r3 >> 2;
+ r4 = heap32[(r4)];
+ r4 = r4 >> 2;
+ r4 = heap32[(r4+14)];
+ r5 = (r5 + 12)|0;
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r5;
+ heap32[(g0+2)] = r0;
+ __FUNCTION_TABLE__[(r4)>>2](i7);
+ heap32[(r6+13)] = heap32[(r2+3)];
+ r3 = heap32[(r2+13)];
+ if(r3 ==0) //_LBB409_4
+{
+__label__ = 4;
+}
+else{
+ r3 = heap32[(r1)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3+13)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ r3 = r_g0 & 1;
+ if(r3 ==0) //_LBB409_5
+{
+ r3 = heap32[(r1)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3+6)];
+ r4 = heap32[(r2+13)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r4;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ r3 = r_g0;
+ if(r3 ==0) //_LBB409_7
+{
+ r3 = heap32[(r1)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3+7)];
+ r4 = heap32[(r2+13)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r4;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ heap32[(r6+10)] = r_g0;
+ heap32[(r6+11)] = 0;
+ r3 = heap32[(r2+13)];
+ r4 = r3 >> 2;
+ r4 = heap32[(r4)];
+ r4 = r4 >> 2;
+ r4 = heap32[(r4+3)];
+ heap32[(g0)] = r3;
+ __FUNCTION_TABLE__[(r4)>>2](i7);
+ r4 = heap32[(r1)];
+ r4 = r4 >> 2;
+ r4 = heap32[(r4+4)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r_g0;
+ heap32[(g0+2)] = 1;
+ __FUNCTION_TABLE__[(r4)>>2](i7);
+ r3 = r_g0;
+ r4 = heap32[(r2+13)];
+ r5 = r4 >> 2;
+ r5 = heap32[(r5)];
+ r5 = r5 >> 2;
+ r7 = r3 >> 2;
+ r5 = heap32[(r5+4)];
+ r7 = heap32[(r7+2)];
+ heap32[(g0)] = r4;
+ heap32[(g0+1)] = r7;
+ heap32[(g0+2)] = r0;
+ __FUNCTION_TABLE__[(r5)>>2](i7);
+ r5 = heap32[(r1)];
+ r5 = r5 >> 2;
+ r5 = heap32[(r5+5)];
+ r7 = heap32[(r2+13)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r3;
+ heap32[(g0+2)] = r_g0;
+ heap32[(g0+3)] = 1213612625;
+ heap32[(g0+4)] = r7;
+ __FUNCTION_TABLE__[(r5)>>2](i7);
+__label__ = 8;
+}
+else{
+ heap32[(r6+10)] = r3;
+ heap32[(r6+11)] = 0;
+__label__ = 8;
+}
+}
+else{
+__label__ = 4;
+}
+}
+if (__label__ == 4){
+ heap32[(r6+10)] = 0;
+ heap32[(r6+11)] = 0;
+}
+ r3 = heap32[(r2+14)];
+ if(r3 ==0) //_LBB409_10
+{
+__label__ = 10;
+}
+else{
+ r3 = heap32[(r1)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3+13)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ r3 = r_g0 & 2;
+ if(r3 ==0) //_LBB409_12
+{
+ r3 = heap32[(r1)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3+6)];
+ r4 = heap32[(r2+14)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r4;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ r3 = r_g0;
+ if(r3 ==0) //_LBB409_14
+{
+ r3 = heap32[(r1)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3+7)];
+ r4 = heap32[(r2+14)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r4;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ heap32[(r6+12)] = r_g0;
+ r3 = heap32[(r2+14)];
+ r4 = r3 >> 2;
+ r4 = heap32[(r4)];
+ r4 = r4 >> 2;
+ r4 = heap32[(r4+2)];
+ heap32[(g0)] = r3;
+ __FUNCTION_TABLE__[(r4)>>2](i7);
+ r4 = heap32[(r1)];
+ r4 = r4 >> 2;
+ r4 = heap32[(r4+4)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r_g0;
+ heap32[(g0+2)] = 1;
+ __FUNCTION_TABLE__[(r4)>>2](i7);
+ r3 = r_g0;
+ r4 = heap32[(r2+14)];
+ r5 = r4 >> 2;
+ r5 = heap32[(r5)];
+ r5 = r5 >> 2;
+ r6 = r3 >> 2;
+ r5 = heap32[(r5+3)];
+ r6 = heap32[(r6+2)];
+ heap32[(g0)] = r4;
+ heap32[(g0+1)] = r6;
+ heap32[(g0+2)] = r0;
+ __FUNCTION_TABLE__[(r5)>>2](i7);
+ r1 = heap32[(r1)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+5)];
+ r2 = heap32[(r2+14)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r3;
+ heap32[(g0+2)] = r_g0;
+ heap32[(g0+3)] = 1346456916;
+ heap32[(g0+4)] = r2;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+__label__ = 11;
+}
+else{
+ heap32[(r6+12)] = r3;
+__label__ = 11;
+}
+}
+else{
+__label__ = 10;
+}
+}
+if (__label__ == 10){
+ heap32[(r6+12)] = 0;
+}
+ r0 = _2E_str8189;
+ r_g0 = r0;
+ return;
+}
+
+function _ZN22btBvhTriangleMeshShape17buildOptimizedBvhEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+var __label__ = 0;
+ i7 = sp + -72;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = heapU8[r0+61];
+if(!(r1 ==0)) //_LBB410_3
+{
+ r1 = r0 >> 2;
+ r2 = heap32[(r1+13)];
+ r3 = r2 >> 2;
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3)];
+ heap32[(g0)] = r2;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ r1 = heap32[(r1+13)];
+if(!(r1 ==0)) //_LBB410_3
+{
+ r2 = gNumAlignedFree;
+ r2 = r2 >> 2;
+ r3 = heap32[(r2)];
+ r3 = (r3 + 1)|0;
+ r1 = r1 >> 2;
+ heap32[(r2)] = r3;
+ r1 = heap32[(r1+-1)];
+ heap32[(g0)] = r1;
+ free(i7);
+}
+}
+ r1 = gNumAlignedAllocs;
+ r1 = r1 >> 2;
+ r2 = heap32[(r1)];
+ r2 = (r2 + 1)|0;
+ heap32[(r1)] = r2;
+ heap32[(g0)] = 191;
+ malloc(i7);
+ r2 = r_g0;
+ if(r2 !=0) //_LBB410_5
+{
+ r3 = 0;
+ r4 = (r2 + 4)|0;
+ r3 = (r3 - r4)|0;
+ r3 = r3 & 15;
+ r3 = (r2 + r3)|0;
+ r4 = (r3 + 4)|0;
+ r3 = r3 >> 2;
+ heap32[(r3)] = r2;
+ r2 = r4;
+}
+ r3 = r2 >> 2;
+ r4 = 1;
+ heap32[(r3+13)] = 277;
+ heap8[r2+80] = r4;
+ heap32[(r3+19)] = 0;
+ heap32[(r3+17)] = 0;
+ heap32[(r3+18)] = 0;
+ heap8[r2+100] = r4;
+ heap32[(r3+24)] = 0;
+ heap32[(r3+22)] = 0;
+ heap32[(r3+23)] = 0;
+ heap8[r2+120] = r4;
+ heap32[(r3+29)] = 0;
+ heap32[(r3+27)] = 0;
+ heap32[(r3+28)] = 0;
+ heap8[r2+140] = r4;
+ heap32[(r3+34)] = 0;
+ heap32[(r3+32)] = 0;
+ heap32[(r3+33)] = 0;
+ heap32[(r3+36)] = 0;
+ heap8[r2+164] = r4;
+ heap32[(r3+40)] = 0;
+ heap32[(r3+38)] = 0;
+ heap32[(r3+39)] = 0;
+ heap32[(r3+42)] = 0;
+ heap32[(r3+1)] = -8388609;
+ heap32[(r3+2)] = -8388609;
+ heap32[(r3+3)] = -8388609;
+ heap32[(r3+4)] = 0;
+ heap32[(r3+5)] = 2139095039;
+ heap32[(r3+6)] = 2139095039;
+ r5 = _ZTV14btOptimizedBvh;
+ heap32[(r3+7)] = 2139095039;
+ r5 = (r5 + 8)|0;
+ heap32[(r3+8)] = 0;
+ r6 = r0 >> 2;
+ heap32[(r3)] = r5;
+ heap32[(r6+13)] = r2;
+ r5 = heap32[(r6+12)];
+ r7 = heapU8[r0+60];
+ heap8[r2+60] = r7;
+ if(r7 ==0) //_LBB410_11
+{
+ r6 = _ZTVZN14btOptimizedBvh5buildEP23btStridingMeshInterfacebRK9btVector3S4_E20NodeTriangleCallback;
+ r7 = sp + -24;
+ r6 = (r6 + 8)|0;
+ r8 = r7 >> 2;
+ r9 = (r2 + 64)|0;
+ heap32[(fp+-6)] = r6;
+ r6 = sp + -40;
+ heap32[(r8+1)] = r9;
+ r8 = r6 >> 2;
+ heap32[(fp+-10)] = -581039253;
+ heap32[(r8+1)] = -581039253;
+ heap32[(r8+2)] = -581039253;
+ r9 = sp + -56;
+ heap32[(r8+3)] = 0;
+ r8 = r9 >> 2;
+ heap32[(fp+-14)] = 1566444395;
+ heap32[(r8+1)] = 1566444395;
+ heap32[(r8+2)] = 1566444395;
+ r10 = r5 >> 2;
+ heap32[(r8+3)] = 0;
+ r8 = heap32[(r10)];
+ r8 = r8 >> 2;
+ r8 = heap32[(r8+2)];
+ heap32[(g0)] = r5;
+ heap32[(g0+1)] = r7;
+ heap32[(g0+2)] = r6;
+ heap32[(g0+3)] = r9;
+ __FUNCTION_TABLE__[(r8)>>2](i7);
+ r5 = heap32[(r3+17)];
+ r6 = heap32[(r3+22)];
+ r7 = r5 << 1;
+if(!(r6 >=r7)) //_LBB410_26
+{
+ r8 = heap32[(r3+23)];
+if(!(r8 >=r7)) //_LBB410_26
+{
+ if(r7 !=0) //_LBB410_15
+{
+ r8 = heap32[(r1)];
+ r8 = (r8 + 1)|0;
+ r9 = r5 << 7;
+ heap32[(r1)] = r8;
+ r8 = r9 | 19;
+ heap32[(g0)] = r8;
+ malloc(i7);
+ r8 = r_g0;
+ if(r8 !=0) //_LBB410_17
+{
+ r9 = 0;
+ r10 = (r8 + 4)|0;
+ r9 = (r9 - r10)|0;
+ r9 = r9 & 15;
+ r9 = (r8 + r9)|0;
+ r10 = (r9 + 4)|0;
+ r9 = r9 >> 2;
+ heap32[(r9)] = r8;
+ r8 = r10;
+}
+}
+else{
+ r8 = 0;
+}
+if(!(r6 <1)) //_LBB410_21
+{
+ r9 = 0;
+_20: while(true){
+ r10 = heap32[(r3+24)];
+ r11 = (r8 + r9)|0;
+ r10 = (r10 + r9)|0;
+ heap32[(g0)] = r11;
+ heap32[(g0+1)] = r10;
+ heap32[(g0+2)] = 64;
+ r6 = (r6 + -1)|0;
+ r9 = (r9 + 64)|0;
+ memcpy(i7);
+if(!(r6 !=0)) //_LBB410_20
+{
+break _20;
+}
+}
+}
+ r6 = heap32[(r3+24)];
+if(!(r6 ==0)) //_LBB410_25
+{
+ r9 = heapU8[r2+100];
+if(!(r9 ==0)) //_LBB410_24
+{
+ r9 = gNumAlignedFree;
+ r9 = r9 >> 2;
+ r10 = heap32[(r9)];
+ r10 = (r10 + 1)|0;
+ r6 = r6 >> 2;
+ heap32[(r9)] = r10;
+ r6 = heap32[(r6+-1)];
+ heap32[(g0)] = r6;
+ free(i7);
+}
+ heap32[(r3+24)] = 0;
+}
+ r6 = 1;
+ heap8[r2+100] = r6;
+ heap32[(r3+24)] = r8;
+ heap32[(r3+23)] = r7;
+}
+}
+ r6 = _ZTV31btInternalTriangleIndexCallback;
+ r6 = (r6 + 8)|0;
+ heap32[(r3+22)] = r7;
+ heap32[(fp+-6)] = r6;
+}
+else{
+ r7 = (r2 + 4)|0;
+ r8 = (r2 + 20)|0;
+ f0 = -1;
+ f1 = heapFloat[(r6+6)];
+ f2 = heapFloat[(r6+5)];
+ f3 = heapFloat[(r6+4)];
+ f3 = f3+f0;
+ f2 = f2+f0;
+ heapFloat[(r3+1)] = f3;
+ f0 = f1+f0;
+ heapFloat[(r3+2)] = f2;
+ heapFloat[(r3+3)] = f0;
+ heap32[(r3+4)] = 0;
+ f1 = 1;
+ f4 = heapFloat[(r6+10)];
+ f5 = heapFloat[(r6+9)];
+ f6 = heapFloat[(r6+8)];
+ f6 = f6+f1;
+ f5 = f5+f1;
+ heapFloat[(r3+5)] = f6;
+ f1 = f4+f1;
+ heapFloat[(r3+6)] = f5;
+ heapFloat[(r3+7)] = f1;
+ f4 = 65533;
+ f3 = f6-f3;
+ f2 = f5-f2;
+ f3 = f4/f3;
+ heap32[(r3+8)] = 0;
+ f0 = f1-f0;
+ f1 = f4/f2;
+ heapFloat[(r3+9)] = f3;
+ f0 = f4/f0;
+ heapFloat[(r3+10)] = f1;
+ heapFloat[(r3+11)] = f0;
+ r6 = _ZTVZN14btOptimizedBvh5buildEP23btStridingMeshInterfacebRK9btVector3S4_E29QuantizedNodeTriangleCallback;
+ heap32[(r3+12)] = 0;
+ r9 = sp + -16;
+ r6 = (r6 + 8)|0;
+ heap8[r2+60] = r4;
+ r10 = r9 >> 2;
+ r11 = (r2 + 104)|0;
+ heap32[(fp+-4)] = r6;
+ heap32[(r10+1)] = r11;
+ r6 = r5 >> 2;
+ heap32[(r10+2)] = r2;
+ r6 = heap32[(r6)];
+ r6 = r6 >> 2;
+ r6 = heap32[(r6+2)];
+ heap32[(g0)] = r5;
+ heap32[(g0+1)] = r9;
+ heap32[(g0+2)] = r7;
+ heap32[(g0+3)] = r8;
+ __FUNCTION_TABLE__[(r6)>>2](i7);
+ r5 = heap32[(r3+27)];
+ r6 = heap32[(r3+32)];
+ r7 = r5 << 1;
+_31: do {
+if(!(r6 >=r7)) //_LBB410_10
+{
+ r8 = (r2 + 124)|0;
+ heap32[(g0)] = r8;
+ heap32[(g0+1)] = r7;
+ r8 = (r7 - r6)|0;
+ r6 = r6 << 4;
+ _ZN20btAlignedObjectArrayI18btQuantizedBvhNodeE7reserveEi(i7);
+_33: while(true){
+ r9 = heap32[(r3+34)];
+ r9 = (r9 + r6)|0;
+ r9 = r9 >> 2;
+ r8 = (r8 + -1)|0;
+ r6 = (r6 + 16)|0;
+ heap32[(r9)] = 0;
+ heap32[(r9+1)] = 0;
+ heap32[(r9+2)] = 0;
+ heap32[(r9+3)] = 0;
+if(!(r8 !=0)) //_LBB410_9
+{
+break _31;
+}
+}
+}
+} while(0);
+ r6 = _ZTV31btInternalTriangleIndexCallback;
+ r6 = (r6 + 8)|0;
+ heap32[(r3+32)] = r7;
+ heap32[(fp+-4)] = r6;
+}
+ heap32[(r3+14)] = 0;
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = 0;
+ heap32[(g0+2)] = r5;
+ _ZN14btQuantizedBvh9buildTreeEii(i7);
+ r5 = heapU8[r2+60];
+if(!(r5 ==0)) //_LBB410_41
+{
+ r5 = heap32[(r3+38)];
+if(!(r5 !=0)) //_LBB410_41
+{
+ r6 = heap32[(r3+39)];
+ if(r6 !=r5) //_LBB410_31
+{
+__label__ = 29;
+}
+else{
+ if(r6 <1) //_LBB410_32
+{
+ r6 = heap32[(r1)];
+ r6 = (r6 + 1)|0;
+ heap32[(r1)] = r6;
+ heap32[(g0)] = 51;
+ malloc(i7);
+ r1 = r_g0;
+ if(r1 !=0) //_LBB410_34
+{
+ r6 = 0;
+ r7 = (r1 + 4)|0;
+ r6 = (r6 - r7)|0;
+ r6 = r6 & 15;
+ r6 = (r1 + r6)|0;
+ r7 = (r6 + 4)|0;
+ r6 = r6 >> 2;
+ heap32[(r6)] = r1;
+ r1 = r7;
+}
+ r6 = heap32[(r3+40)];
+if(!(r6 ==0)) //_LBB410_39
+{
+ r7 = heapU8[r2+164];
+if(!(r7 ==0)) //_LBB410_38
+{
+ r7 = gNumAlignedFree;
+ r7 = r7 >> 2;
+ r8 = heap32[(r7)];
+ r8 = (r8 + 1)|0;
+ r6 = r6 >> 2;
+ heap32[(r7)] = r8;
+ r6 = heap32[(r6+-1)];
+ heap32[(g0)] = r6;
+ free(i7);
+}
+ heap32[(r3+40)] = 0;
+}
+ r6 = 1;
+ heap8[r2+164] = r6;
+ heap32[(r3+40)] = r1;
+ heap32[(r3+39)] = 1;
+ r6 = heap32[(r3+38)];
+ r6 = (r6 + 1)|0;
+__label__ = 37;
+}
+else{
+__label__ = 29;
+}
+}
+if (__label__ == 29){
+ r1 = heap32[(r3+40)];
+ r6 = r4;
+}
+ heap32[(r3+38)] = r6;
+ r6 = heap32[(r3+34)];
+ r7 = heapU16[(r6)>>1];
+ r5 = r5 << 5;
+ heap16[(r1+r5)>>1] = r7;
+ r1 = (r1 + r5)|0;
+ r5 = heapU16[(r6+2)>>1];
+ heap16[(r1+2)>>1] = r5;
+ r5 = heapU16[(r6+4)>>1];
+ heap16[(r1+4)>>1] = r5;
+ r5 = heapU16[(r6+6)>>1];
+ heap16[(r1+6)>>1] = r5;
+ r5 = heapU16[(r6+8)>>1];
+ heap16[(r1+8)>>1] = r5;
+ r5 = heapU16[(r6+10)>>1];
+ r6 = r1 >> 2;
+ heap16[(r1+10)>>1] = r5;
+ heap32[(r6+3)] = 0;
+ r1 = heap32[(r3+34)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+3)];
+ r5 = 0;
+ r5 = (r5 - r1)|0;
+ r1 = r1 < 0 ? r5 : r4;
+ heap32[(r6+4)] = r1;
+}
+}
+ r1 = heap32[(r3+38)];
+ heap32[(r3+42)] = r1;
+ r1 = heap32[(r3+29)];
+if(!(r1 ==0)) //_LBB410_45
+{
+ r4 = heapU8[r2+120];
+if(!(r4 ==0)) //_LBB410_44
+{
+ r4 = gNumAlignedFree;
+ r4 = r4 >> 2;
+ r5 = heap32[(r4)];
+ r5 = (r5 + 1)|0;
+ r1 = r1 >> 2;
+ heap32[(r4)] = r5;
+ r1 = heap32[(r1+-1)];
+ heap32[(g0)] = r1;
+ free(i7);
+}
+ heap32[(r3+29)] = 0;
+}
+ r1 = 1;
+ heap8[r2+120] = r1;
+ heap32[(r3+29)] = 0;
+ heap32[(r3+27)] = 0;
+ heap32[(r3+28)] = 0;
+ r4 = heap32[(r3+19)];
+if(!(r4 ==0)) //_LBB410_49
+{
+ r5 = heapU8[r2+80];
+if(!(r5 ==0)) //_LBB410_48
+{
+ r5 = gNumAlignedFree;
+ r5 = r5 >> 2;
+ r6 = heap32[(r5)];
+ r6 = (r6 + 1)|0;
+ r4 = r4 >> 2;
+ heap32[(r5)] = r6;
+ r4 = heap32[(r4+-1)];
+ heap32[(g0)] = r4;
+ free(i7);
+}
+ heap32[(r3+19)] = 0;
+}
+ heap8[r2+80] = r1;
+ heap32[(r3+19)] = 0;
+ heap32[(r3+17)] = 0;
+ heap32[(r3+18)] = 0;
+ heap8[r0+61] = r1;
+ return;
+}
+
+function _ZN22btBvhTriangleMeshShape15setLocalScalingERK9btVector3(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ r2 = heap32[(r1)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+7)];
+ heap32[(g0)] = r0;
+ r3 = heap32[(fp+1)];
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ r2 = r_g0 >> 2;
+ r3 = r3 >> 2;
+ f0 = heapFloat[(r3)];
+ f1 = heapFloat[(r2)];
+ f2 = heapFloat[(r2+1)];
+ f3 = heapFloat[(r3+1)];
+ f1 = f1-f0;
+ f2 = f2-f3;
+ f3 = heapFloat[(r2+2)];
+ f4 = heapFloat[(r3+2)];
+ f3 = f3-f4;
+ f1 = f1*f1;
+ f2 = f2*f2;
+ f1 = f1+f2;
+ f2 = f3*f3;
+ f1 = f1+f2;
+ f2 = 1.1920928955078125e-007;
+if(!(f1 <=f2)) //_LBB411_2
+{
+ r1 = heap32[(r1+12)];
+ r1 = r1 >> 2;
+ heapFloat[(r1+1)] = f0;
+ heap32[(r1+2)] = heap32[(r3+1)];
+ heap32[(r1+3)] = heap32[(r3+2)];
+ heap32[(r1+4)] = heap32[(r3+3)];
+ heap32[(g0)] = r0;
+ _ZN19btTriangleMeshShape15recalcLocalAabbEv(i7);
+ heap32[(g0)] = r0;
+ _ZN22btBvhTriangleMeshShape17buildOptimizedBvhEv(i7);
+}
+ return;
+}
+
+function _ZNK22btBvhTriangleMeshShape19processAllTrianglesEP18btTriangleCallbackRK9btVector3S4_(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+var __label__ = 0;
+ i7 = sp + -80;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r1 = _ZTVZNK22btBvhTriangleMeshShape19processAllTrianglesEP18btTriangleCallbackRK9btVector3S4_E21MyNodeOverlapCallback;
+ r2 = sp + -64;
+ r3 = heap32[(r0+12)];
+ r1 = (r1 + 8)|0;
+ r4 = r2 >> 2;
+ heap32[(fp+-16)] = r1;
+ r1 = heap32[(fp+1)];
+ heap32[(r4+1)] = r3;
+ heap32[(r4+2)] = r1;
+ r0 = heap32[(r0+13)];
+ r1 = heap32[(fp+2)];
+ r3 = heap32[(fp+3)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r2;
+ heap32[(g0+2)] = r1;
+ heap32[(g0+3)] = r3;
+ _ZNK14btQuantizedBvh26reportAabbOverlappingNodexEP21btNodeOverlapCallbackRK9btVector3S4_(i7);
+ return;
+}
+
+function _ZN22btBvhTriangleMeshShapeD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV22btBvhTriangleMeshShape;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ r1 = heapU8[r0+61];
+ if(r1 ==0) //_LBB413_3
+{
+__label__ = 3;
+}
+else{
+ r1 = heap32[(r2+13)];
+ r3 = r1 >> 2;
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3)];
+ heap32[(g0)] = r1;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ r1 = heap32[(r2+13)];
+ if(r1 ==0) //_LBB413_3
+{
+__label__ = 3;
+}
+else{
+ r0 = gNumAlignedFree;
+ r0 = r0 >> 2;
+ r3 = heap32[(r0)];
+ r3 = (r3 + 1)|0;
+ r1 = r1 >> 2;
+ heap32[(r0)] = r3;
+ r0 = heap32[(r1+-1)];
+ r1 = _ZTV14btConcaveShape;
+ heap32[(g0)] = r0;
+ r0 = (r1 + 8)|0;
+ free(i7);
+ heap32[(r2)] = r0;
+__label__ = 4;
+}
+}
+if (__label__ == 3){
+ r1 = _ZTV14btConcaveShape;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ if(r0 ==0) //_LBB413_5
+{
+__label__ = 5;
+}
+else{
+__label__ = 4;
+}
+}
+if (__label__ == 4){
+ r0 = gNumAlignedFree;
+ r0 = r0 >> 2;
+ r1 = heap32[(r0)];
+ r1 = (r1 + 1)|0;
+ heap32[(r0)] = r1;
+ r0 = heap32[(r2+-1)];
+ heap32[(g0)] = r0;
+ free(i7);
+}
+ return;
+}
+
+function _ZN22btBvhTriangleMeshShapeD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV22btBvhTriangleMeshShape;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ r0 = heapU8[r0+61];
+if(!(r0 ==0)) //_LBB414_3
+{
+ r0 = heap32[(r2+13)];
+ r1 = r0 >> 2;
+ r1 = heap32[(r1)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+ r0 = heap32[(r2+13)];
+if(!(r0 ==0)) //_LBB414_3
+{
+ r1 = gNumAlignedFree;
+ r1 = r1 >> 2;
+ r3 = heap32[(r1)];
+ r3 = (r3 + 1)|0;
+ r0 = r0 >> 2;
+ heap32[(r1)] = r3;
+ r0 = heap32[(r0+-1)];
+ heap32[(g0)] = r0;
+ free(i7);
+}
+}
+ r0 = _ZTV14btConcaveShape;
+ r0 = (r0 + 8)|0;
+ heap32[(r2)] = r0;
+ return;
+}
+
+function _ZNK21btConvexInternalShape36getNumPreferredPenetrationDirectionsEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = 0;
+ r_g0 = r0;
+ return;
+}
+
+function _ZN14btCapsuleShape9setMarginEf(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ r2 = heap32[(r1)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+11)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ f0 = f_g0;
+ r2 = heap32[(r1)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+11)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ f1 = f_g0;
+ r2 = heap32[(r1)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+11)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ f2 = f_g0;
+ f3 = heapFloat[(r1+9)];
+ f4 = heapFloat[(r1+8)];
+ f5 = heapFloat[(r1+7)];
+ heap32[(r1+11)] = heap32[(fp+1)];
+ r2 = heap32[(r1)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+11)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ f6 = f_g0;
+ r2 = heap32[(r1)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+11)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ f7 = f_g0;
+ r2 = heap32[(r1)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+11)];
+ heap32[(g0)] = r0;
+ f2 = f5+f2;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ f1 = f4+f1;
+ f2 = f2-f_g0;
+ f0 = f3+f0;
+ f1 = f1-f7;
+ heapFloat[(r1+7)] = f2;
+ f0 = f0-f6;
+ heapFloat[(r1+8)] = f1;
+ heapFloat[(r1+9)] = f0;
+ heap32[(r1+10)] = 0;
+ return;
+}
+
+function _ZNK14btCapsuleShape7getNameEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = _2E_str194;
+ r_g0 = r0;
+ return;
+}
+
+function _ZNK14btCapsuleShape7getAabbERK11btTransformR9btVector3S4_(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+ var f10;
+ var f11;
+ var f12;
+var __label__ = 0;
+ i7 = sp + -24;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ r2 = heap32[(r1+13)];
+ r3 = (r2 + 2)|0;
+ r3 = (r3 % 3)|0;
+ r4 = (r0 + 28)|0;
+ r3 = r3 << 2;
+ r3 = (r4 + r3)|0;
+ r3 = r3 >> 2;
+ f0 = heapFloat[(r3)];
+ r3 = sp + -16;
+ r5 = r3 >> 2;
+ heapFloat[(fp+-4)] = f0;
+ r2 = r2 << 2;
+ heapFloat[(r5+1)] = f0;
+ r4 = (r4 + r2)|0;
+ heapFloat[(r5+2)] = f0;
+ r4 = r4 >> 2;
+ heap32[(r5+3)] = 0;
+ r2 = (r3 + r2)|0;
+ f1 = heapFloat[(r4)];
+ r2 = r2 >> 2;
+ f0 = f0+f1;
+ heapFloat[(r2)] = f0;
+ r2 = heap32[(r1)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+11)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ f0 = f_g0;
+ r2 = heap32[(r1)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+11)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ f1 = f_g0;
+ r1 = heap32[(r1)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+11)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+ f3 = heapFloat[(fp+-4)];
+ f2 = f3+f_g0;
+ heapFloat[(fp+-4)] = f2;
+ f3 = heapFloat[(r5+1)];
+ f1 = f3+f1;
+ heapFloat[(r5+1)] = f1;
+ f3 = heapFloat[(r5+2)];
+ r0 = heap32[(fp+1)];
+ f0 = f3+f0;
+ r0 = r0 >> 2;
+ heapFloat[(r5+2)] = f0;
+ f3 = heapFloat[(r0+10)];
+ r1 = heap32[(fp+2)];
+ r2 = heap32[(fp+3)];
+ f4 = 0;
+ if(f3 <f4) //_LBB418_2
+{
+ f3 = -f3;
+}
+ f5 = heapFloat[(r0+9)];
+ if(f5 <f4) //_LBB418_5
+{
+ f5 = -f5;
+}
+ f6 = heapFloat[(r0+8)];
+ if(f6 <f4) //_LBB418_8
+{
+ f6 = -f6;
+}
+ f7 = heapFloat[(r0+6)];
+ if(f7 <f4) //_LBB418_11
+{
+ f7 = -f7;
+}
+ f8 = heapFloat[(r0+5)];
+ if(f8 <f4) //_LBB418_14
+{
+ f8 = -f8;
+}
+ f9 = heapFloat[(r0+4)];
+ if(f9 <f4) //_LBB418_17
+{
+ f9 = -f9;
+}
+ f10 = heapFloat[(r0+2)];
+ if(f10 <f4) //_LBB418_20
+{
+ f10 = -f10;
+}
+ f11 = heapFloat[(r0+1)];
+ if(f11 <f4) //_LBB418_23
+{
+ f11 = -f11;
+}
+ f12 = heapFloat[(r0)];
+ if(f12 <f4) //_LBB418_26
+{
+ f12 = -f12;
+}
+ f4 = f12*f2;
+ f11 = f11*f1;
+ f9 = f9*f2;
+ f8 = f8*f1;
+ f4 = f4+f11;
+ f10 = f10*f0;
+ f2 = f6*f2;
+ f1 = f5*f1;
+ f5 = f9+f8;
+ f6 = f7*f0;
+ f4 = f4+f10;
+ f7 = heapFloat[(r0+12)];
+ f8 = heapFloat[(r0+13)];
+ f9 = heapFloat[(r0+14)];
+ f5 = f5+f6;
+ r0 = r1 >> 2;
+ f1 = f2+f1;
+ f0 = f3*f0;
+ f2 = f7-f4;
+ f0 = f1+f0;
+ f1 = f8-f5;
+ heapFloat[(r0)] = f2;
+ f2 = f9-f0;
+ heapFloat[(r0+1)] = f1;
+ heapFloat[(r0+2)] = f2;
+ r1 = r2 >> 2;
+ f1 = f7+f4;
+ heap32[(r0+3)] = 0;
+ f2 = f8+f5;
+ heapFloat[(r1)] = f1;
+ f0 = f9+f0;
+ heapFloat[(r1+1)] = f2;
+ heapFloat[(r1+2)] = f0;
+ heap32[(r1+3)] = 0;
+ return;
+}
+
+function _ZNK14btCapsuleShape28calculateSerializeBufferSizeEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = 60;
+ r_g0 = r0;
+ return;
+}
+
+function _ZNK14btCapsuleShape49batchedUnitVectorGetSupportingVertexWithoutMarginEPK9btVector3PS0_i(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+ var f10;
+ var f11;
+var __label__ = 0;
+ i7 = sp + -40;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+3)];
+if(!(r0 <1)) //_LBB420_9
+{
+ r1 = heap32[(fp)];
+ r2 = r1 >> 2;
+ r3 = heap32[(r2+13)];
+ r4 = (r3 + 2)|0;
+ r4 = (r4 % 3)|0;
+ r4 = r4 << 2;
+ r4 = (r1 + r4)|0;
+ r4 = r4 >> 2;
+ r5 = heap32[(fp+1)];
+ r6 = heap32[(fp+2)];
+ f0 = heapFloat[(r4+7)];
+ r0 = (r0 + -1)|0;
+ r4 = (r5 + 8)|0;
+ r5 = (r6 + 8)|0;
+_3: while(true){
+ r6 = sp + -16;
+ heap32[(fp+-4)] = 0;
+ r7 = r6 >> 2;
+ r3 = r3 << 2;
+ heap32[(r7+1)] = 0;
+ r6 = (r6 + r3)|0;
+ r3 = (r1 + r3)|0;
+ heap32[(r7+2)] = 0;
+ r6 = r6 >> 2;
+ r3 = r3 >> 2;
+ heap32[(r7+3)] = 0;
+ heap32[(r6)] = heap32[(r3+7)];
+ r3 = heap32[(r2)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3+11)];
+ heap32[(g0)] = r1;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ r3 = r4 >> 2;
+ f2 = heapFloat[(r3+-1)];
+ f3 = heapFloat[(r2+4)];
+ f4 = heapFloat[(r3+-2)];
+ f5 = heapFloat[(r2+3)];
+ f6 = heapFloat[(r3)];
+ f7 = heapFloat[(r2+5)];
+ f3 = f2*f3;
+ f5 = f4*f5;
+ f7 = f6*f7;
+ f8 = heapFloat[(r7+1)];
+ f3 = f3*f0;
+ f9 = heapFloat[(fp+-4)];
+ f5 = f5*f0;
+ f10 = heapFloat[(r7+2)];
+ f7 = f7*f0;
+ f3 = f8+f3;
+ f8 = f2*f_g0;
+ f5 = f9+f5;
+ f9 = f4*f_g0;
+ f3 = f3-f8;
+ f5 = f5-f9;
+ f7 = f10+f7;
+ f1 = f6*f_g0;
+ f1 = f7-f1;
+ f4 = f4*f5;
+ f2 = f2*f3;
+ f2 = f4+f2;
+ f4 = f6*f1;
+ f2 = f2+f4;
+ f4 = -999999984306749440;
+ if(f2 >f4) //_LBB420_4
+{
+ r6 = r5 >> 2;
+ heapFloat[(r6+-2)] = f5;
+ heapFloat[(r6+-1)] = f3;
+ heapFloat[(r6)] = f1;
+ heap32[(r6+1)] = 0;
+ f4 = f2;
+}
+ r6 = sp + -32;
+ heap32[(fp+-8)] = 0;
+ r7 = r6 >> 2;
+ heap32[(r7+1)] = 0;
+ heap32[(r7+2)] = 0;
+ heap32[(r7+3)] = 0;
+ r8 = heap32[(r2+13)];
+ r8 = r8 << 2;
+ r9 = (r1 + r8)|0;
+ r9 = r9 >> 2;
+ f1 = heapFloat[(r9+7)];
+ r6 = (r6 + r8)|0;
+ r6 = r6 >> 2;
+ f1 = -f1;
+ heapFloat[(r6)] = f1;
+ r6 = heap32[(r2)];
+ r6 = r6 >> 2;
+ r6 = heap32[(r6+11)];
+ heap32[(g0)] = r1;
+ __FUNCTION_TABLE__[(r6)>>2](i7);
+ f2 = heapFloat[(r3+-1)];
+ f3 = heapFloat[(r2+4)];
+ f5 = heapFloat[(r3+-2)];
+ f6 = heapFloat[(r2+3)];
+ f7 = heapFloat[(r3)];
+ f8 = heapFloat[(r2+5)];
+ f3 = f2*f3;
+ f6 = f5*f6;
+ f8 = f7*f8;
+ f9 = heapFloat[(r7+1)];
+ f3 = f3*f0;
+ f10 = heapFloat[(fp+-8)];
+ f6 = f6*f0;
+ f11 = heapFloat[(r7+2)];
+ f8 = f8*f0;
+ f3 = f9+f3;
+ f9 = f2*f_g0;
+ f6 = f10+f6;
+ f10 = f5*f_g0;
+ f3 = f3-f9;
+ f6 = f6-f10;
+ f8 = f11+f8;
+ f1 = f7*f_g0;
+ f1 = f8-f1;
+ f5 = f5*f6;
+ f2 = f2*f3;
+ f2 = f5+f2;
+ f5 = f7*f1;
+ f2 = f2+f5;
+if(!(f2 <=f4)) //_LBB420_7
+{
+ r3 = r5 >> 2;
+ heapFloat[(r3+-2)] = f6;
+ heapFloat[(r3+-1)] = f3;
+ heapFloat[(r3)] = f1;
+ heap32[(r3+1)] = 0;
+}
+ if(r0 ==0) //_LBB420_9
+{
+break _3;
+}
+else{
+ r3 = heap32[(r2+13)];
+ r0 = (r0 + -1)|0;
+ r4 = (r4 + 16)|0;
+ r5 = (r5 + 16)|0;
+continue _3;
+}
+}
+}
+ return;
+}
+
+function _ZNK14btCapsuleShape21calculateLocalInertiaEfR9btVector3(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ r1 = heap32[(r1+13)];
+ r2 = (r1 + 2)|0;
+ r2 = (r2 % 3)|0;
+ r0 = (r0 + 28)|0;
+ r2 = r2 << 2;
+ r2 = (r0 + r2)|0;
+ r2 = r2 >> 2;
+ f0 = heapFloat[(r2)];
+ r2 = sp + -16;
+ r3 = r2 >> 2;
+ heapFloat[(fp+-4)] = f0;
+ r1 = r1 << 2;
+ heapFloat[(r3+1)] = f0;
+ r2 = (r2 + r1)|0;
+ r0 = (r0 + r1)|0;
+ heapFloat[(r3+2)] = f0;
+ r1 = r2 >> 2;
+ heap32[(r3+3)] = 0;
+ r0 = r0 >> 2;
+ f0 = heapFloat[(r1)];
+ f1 = heapFloat[(r0)];
+ f0 = f0+f1;
+ heapFloat[(r1)] = f0;
+ f0 = 0.039999999105930328;
+ f1 = heapFloat[(r3+1)];
+ f2 = heapFloat[(r3+2)];
+ f3 = heapFloat[(fp+-4)];
+ f1 = f1+f0;
+ f2 = f2+f0;
+ f0 = f3+f0;
+ f1 = f1+f1;
+ f2 = f2+f2;
+ f0 = f0+f0;
+ f1 = f1*f1;
+ f2 = f2*f2;
+ f3 = heapFloat[(fp+1)];
+ f4 = 0.083333328366279602;
+ f0 = f0*f0;
+ r0 = heap32[(fp+2)];
+ f5 = f1+f2;
+ f3 = f3*f4;
+ f2 = f0+f2;
+ r0 = r0 >> 2;
+ f4 = f5*f3;
+ f0 = f0+f1;
+ f1 = f2*f3;
+ heapFloat[(r0)] = f4;
+ f0 = f0*f3;
+ heapFloat[(r0+1)] = f1;
+ heapFloat[(r0+2)] = f0;
+ return;
+}
+
+function _ZNK21btConvexInternalShape32getPreferredPenetrationDirectionEiR9btVector3(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = _2E_str10;
+ r1 = _2E_str4198;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 110;
+ _assert(i7);
+}
+
+function _ZNK14btCapsuleShape9serializeEPvP12btSerializer(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+2)];
+ r1 = r0 >> 2;
+ r2 = heap32[(r1)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+10)];
+ r3 = heap32[(fp)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r3;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ r2 = r_g0;
+ r4 = heap32[(r1)];
+ r4 = r4 >> 2;
+ r4 = heap32[(r4+7)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r2;
+ r5 = heap32[(fp+1)];
+ __FUNCTION_TABLE__[(r4)>>2](i7);
+ r4 = r_g0;
+ r5 = r5 >> 2;
+ heap32[(r5)] = r4;
+if(!(r4 ==0)) //_LBB423_2
+{
+ r1 = heap32[(r1)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+12)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r2;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+}
+ r0 = r3 >> 2;
+ r1 = heap32[(r0+1)];
+ heap32[(r5+1)] = r1;
+ heap32[(r5+7)] = heap32[(r0+7)];
+ heap32[(r5+8)] = heap32[(r0+8)];
+ heap32[(r5+9)] = heap32[(r0+9)];
+ heap32[(r5+10)] = heap32[(r0+10)];
+ heap32[(r5+3)] = heap32[(r0+3)];
+ heap32[(r5+4)] = heap32[(r0+4)];
+ heap32[(r5+5)] = heap32[(r0+5)];
+ heap32[(r5+6)] = heap32[(r0+6)];
+ heap32[(r5+11)] = heap32[(r0+11)];
+ r0 = heap32[(r0+13)];
+ heap32[(r5+13)] = r0;
+ r0 = _2E_str6199;
+ r_g0 = r0;
+ return;
+}
+
+function _ZN14btCapsuleShape15setLocalScalingERK9btVector3(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ r2 = heap32[(r1)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+11)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ f0 = f_g0;
+ r2 = heap32[(r1)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+11)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ f1 = f_g0;
+ r2 = heap32[(r1)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+11)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ f2 = f_g0;
+ r0 = heap32[(fp+1)];
+ f3 = heapFloat[(r1+9)];
+ f4 = heapFloat[(r1+8)];
+ f5 = heapFloat[(r1+7)];
+ r0 = r0 >> 2;
+ f3 = f3+f0;
+ f6 = heapFloat[(r1+5)];
+ f4 = f4+f1;
+ f7 = heapFloat[(r1+4)];
+ f5 = f5+f2;
+ f8 = heapFloat[(r1+3)];
+ f9 = heapFloat[(r0+2)];
+ f3 = f3/f6;
+ f4 = f4/f7;
+ f5 = f5/f8;
+ f6 = 0;
+ if(f9 <f6) //_LBB424_2
+{
+ f9 = -f9;
+}
+ f7 = heapFloat[(r0+1)];
+ if(f7 <f6) //_LBB424_5
+{
+ f7 = -f7;
+}
+ f8 = heapFloat[(r0)];
+ if(f8 <f6) //_LBB424_8
+{
+ f8 = -f8;
+}
+ heapFloat[(r1+3)] = f8;
+ heapFloat[(r1+4)] = f7;
+ heapFloat[(r1+5)] = f9;
+ f5 = f5*f8;
+ f4 = f4*f7;
+ f2 = f5-f2;
+ heap32[(r1+6)] = 0;
+ f3 = f3*f9;
+ f1 = f4-f1;
+ heapFloat[(r1+7)] = f2;
+ f0 = f3-f0;
+ heapFloat[(r1+8)] = f1;
+ heapFloat[(r1+9)] = f0;
+ heap32[(r1+10)] = 0;
+ return;
+}
+
+function _ZN14btCapsuleShapeD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV13btConvexShape;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+if(!(r0 ==0)) //_LBB425_2
+{
+ r0 = gNumAlignedFree;
+ r0 = r0 >> 2;
+ r1 = heap32[(r0)];
+ r1 = (r1 + 1)|0;
+ heap32[(r0)] = r1;
+ r0 = heap32[(r2+-1)];
+ heap32[(g0)] = r0;
+ free(i7);
+}
+ return;
+}
+
+function _ZN14btCapsuleShapeD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV13btConvexShape;
+ r0 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r0)] = r1;
+ return;
+}
+
+function _ZNK14btCapsuleShape37localGetSupportingVertexWithoutMarginERK9btVector3(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+ var f10;
+ var f11;
+var __label__ = 0;
+ i7 = sp + -40;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ heap32[(r0)] = 0;
+ heap32[(r0+1)] = 0;
+ r1 = heap32[(fp+2)];
+ heap32[(r0+2)] = 0;
+ r1 = r1 >> 2;
+ heap32[(r0+3)] = 0;
+ f0 = heapFloat[(r1)];
+ f1 = heapFloat[(r1+1)];
+ f2 = heapFloat[(r1+2)];
+ f3 = f0*f0;
+ f4 = f1*f1;
+ f3 = f3+f4;
+ f4 = f2*f2;
+ f3 = f3+f4;
+ r1 = heap32[(fp+1)];
+ f4 = 9.9999997473787516e-005;
+ if(f3 >=f4) //_LBB427_2
+{
+ heapFloat[(g0)] = f3;
+ f3 = 1;
+ sqrtf(i7);
+ f3 = f3/f_g0;
+ f0 = f0*f3;
+ f1 = f1*f3;
+ f2 = f2*f3;
+}
+else{
+ f0 = 1;
+ f1 = 0;
+ f2 = f1;
+}
+ r2 = r1 >> 2;
+ r3 = heap32[(r2+13)];
+ r4 = (r3 + 2)|0;
+ r4 = (r4 % 3)|0;
+ r5 = (r1 + 28)|0;
+ r4 = r4 << 2;
+ r4 = (r5 + r4)|0;
+ r4 = r4 >> 2;
+ f3 = heapFloat[(r4)];
+ r4 = sp + -16;
+ heap32[(fp+-4)] = 0;
+ r6 = r4 >> 2;
+ r3 = r3 << 2;
+ heap32[(r6+1)] = 0;
+ r4 = (r4 + r3)|0;
+ r3 = (r5 + r3)|0;
+ heap32[(r6+2)] = 0;
+ r4 = r4 >> 2;
+ r3 = r3 >> 2;
+ heap32[(r6+3)] = 0;
+ heap32[(r4)] = heap32[(r3)];
+ r3 = heap32[(r2)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3+11)];
+ heap32[(g0)] = r1;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ f5 = heapFloat[(r2+4)];
+ f6 = heapFloat[(r2+3)];
+ f7 = heapFloat[(r2+5)];
+ f5 = f1*f5;
+ f6 = f0*f6;
+ f7 = f2*f7;
+ f8 = heapFloat[(r6+1)];
+ f5 = f5*f3;
+ f9 = heapFloat[(fp+-4)];
+ f6 = f6*f3;
+ f10 = heapFloat[(r6+2)];
+ f7 = f7*f3;
+ f5 = f8+f5;
+ f8 = f1*f_g0;
+ f6 = f9+f6;
+ f9 = f0*f_g0;
+ f5 = f5-f8;
+ f6 = f6-f9;
+ f7 = f10+f7;
+ f4 = f2*f_g0;
+ f4 = f7-f4;
+ f7 = f0*f6;
+ f8 = f1*f5;
+ f7 = f7+f8;
+ f8 = f2*f4;
+ f7 = f7+f8;
+ f8 = -999999984306749440;
+ if(f7 >f8) //_LBB427_5
+{
+ heapFloat[(r0)] = f6;
+ heapFloat[(r0+1)] = f5;
+ heapFloat[(r0+2)] = f4;
+ heap32[(r0+3)] = 0;
+ f8 = f7;
+}
+ r3 = sp + -32;
+ heap32[(fp+-8)] = 0;
+ r4 = r3 >> 2;
+ heap32[(r4+1)] = 0;
+ heap32[(r4+2)] = 0;
+ heap32[(r4+3)] = 0;
+ r5 = heap32[(r2+13)];
+ r5 = r5 << 2;
+ r6 = (r1 + r5)|0;
+ r6 = r6 >> 2;
+ f4 = heapFloat[(r6+7)];
+ r3 = (r3 + r5)|0;
+ r3 = r3 >> 2;
+ f4 = -f4;
+ heapFloat[(r3)] = f4;
+ r3 = heap32[(r2)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3+11)];
+ heap32[(g0)] = r1;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ f5 = heapFloat[(r2+4)];
+ f6 = heapFloat[(r2+3)];
+ f7 = heapFloat[(r2+5)];
+ f5 = f1*f5;
+ f6 = f0*f6;
+ f7 = f2*f7;
+ f9 = heapFloat[(r4+1)];
+ f5 = f5*f3;
+ f10 = heapFloat[(fp+-8)];
+ f6 = f6*f3;
+ f11 = heapFloat[(r4+2)];
+ f3 = f7*f3;
+ f5 = f9+f5;
+ f7 = f1*f_g0;
+ f6 = f10+f6;
+ f9 = f0*f_g0;
+ f5 = f5-f7;
+ f6 = f6-f9;
+ f3 = f11+f3;
+ f4 = f2*f_g0;
+ f3 = f3-f4;
+ f0 = f0*f6;
+ f1 = f1*f5;
+ f0 = f0+f1;
+ f1 = f2*f3;
+ f0 = f0+f1;
+if(!(f0 <=f8)) //_LBB427_8
+{
+ heapFloat[(r0)] = f6;
+ heapFloat[(r0+1)] = f5;
+ heapFloat[(r0+2)] = f3;
+ heap32[(r0+3)] = 0;
+}
+ return;
+}
+
+function _ZNK16btCollisionShape28calculateSerializeBufferSizeEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = 12;
+ r_g0 = r0;
+ return;
+}
+
+function _ZNK16btCollisionShape27getContactBreakingThresholdEf(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var f0;
+ var f1;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ r1 = heap32[(r1)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+4)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+ f1 = heapFloat[(fp+1)];
+ f0 = f_g0*f1;
+ f_g0 = f0;
+ return;
+}
+
+function _ZNK16btCollisionShape9serializeEPvP12btSerializer(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+2)];
+ r1 = r0 >> 2;
+ r2 = heap32[(r1)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+10)];
+ r3 = heap32[(fp)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r3;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ r2 = r_g0;
+ r4 = heap32[(r1)];
+ r4 = r4 >> 2;
+ r4 = heap32[(r4+7)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r2;
+ r5 = heap32[(fp+1)];
+ __FUNCTION_TABLE__[(r4)>>2](i7);
+ r4 = r_g0;
+ r5 = r5 >> 2;
+ heap32[(r5)] = r4;
+if(!(r4 ==0)) //_LBB430_2
+{
+ r1 = heap32[(r1)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+12)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r2;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+}
+ r0 = r3 >> 2;
+ r0 = heap32[(r0+1)];
+ heap32[(r5+1)] = r0;
+ r0 = _2E_str200;
+ r_g0 = r0;
+ return;
+}
+
+function _ZNK16btCollisionShape20serializeSingleShapeEP12btSerializer(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+var __label__ = 0;
+ i7 = sp + -24;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ r2 = heap32[(r1)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+12)];
+ heap32[(g0)] = r0;
+ r3 = heap32[(fp+1)];
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ r4 = r3 >> 2;
+ r5 = heap32[(r4)];
+ r5 = r5 >> 2;
+ r5 = heap32[(r5+4)];
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r_g0;
+ heap32[(g0+2)] = 1;
+ __FUNCTION_TABLE__[(r5)>>2](i7);
+ r2 = r_g0;
+ r1 = heap32[(r1)];
+ r1 = r1 >> 2;
+ r5 = r2 >> 2;
+ r1 = heap32[(r1+13)];
+ r5 = heap32[(r5+2)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r5;
+ heap32[(g0+2)] = r3;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+ r4 = heap32[(r4)];
+ r4 = r4 >> 2;
+ r4 = heap32[(r4+5)];
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r2;
+ heap32[(g0+2)] = r_g0;
+ heap32[(g0+3)] = 1346455635;
+ heap32[(g0+4)] = r0;
+ __FUNCTION_TABLE__[(r4)>>2](i7);
+ return;
+}
+
+function _ZNK16btCollisionShape17getBoundingSphereER9btVector3Rf(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+var __label__ = 0;
+ i7 = sp + -112;var g0 = i7>>2; // save stack
+ r0 = sp + -64;
+ r1 = r0 >> 2;
+ heap32[(fp+-16)] = 1065353216;
+ heap32[(r1+1)] = 0;
+ heap32[(r1+2)] = 0;
+ heap32[(r1+3)] = 0;
+ heap32[(r1+4)] = 0;
+ heap32[(r1+5)] = 1065353216;
+ heap32[(r1+6)] = 0;
+ heap32[(r1+7)] = 0;
+ heap32[(r1+8)] = 0;
+ heap32[(r1+9)] = 0;
+ heap32[(r1+10)] = 1065353216;
+ heap32[(r1+11)] = 0;
+ heap32[(r1+12)] = 0;
+ heap32[(r1+13)] = 0;
+ r2 = heap32[(fp)];
+ heap32[(r1+14)] = 0;
+ r3 = r2 >> 2;
+ heap32[(r1+15)] = 0;
+ r1 = heap32[(r3)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+2)];
+ r3 = sp + -96;
+ r4 = sp + -80;
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = r0;
+ heap32[(g0+2)] = r4;
+ heap32[(g0+3)] = r3;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+ r0 = r3 >> 2;
+ r1 = r4 >> 2;
+ f0 = heapFloat[(r0+1)];
+ f1 = heapFloat[(r1+1)];
+ f2 = heapFloat[(fp+-24)];
+ f3 = heapFloat[(fp+-20)];
+ f2 = f2-f3;
+ f0 = f0-f1;
+ f1 = heapFloat[(r0+2)];
+ f3 = heapFloat[(r1+2)];
+ f1 = f1-f3;
+ f2 = f2*f2;
+ f0 = f0*f0;
+ f0 = f2+f0;
+ f1 = f1*f1;
+ f0 = f0+f1;
+ heapFloat[(g0)] = f0;
+ r2 = heap32[(fp+2)];
+ f0 = 0.5;
+ sqrtf(i7);
+ r2 = r2 >> 2;
+ f1 = f_g0*f0;
+ heapFloat[(r2)] = f1;
+ f1 = heapFloat[(fp+-20)];
+ f2 = heapFloat[(fp+-24)];
+ r2 = heap32[(fp+1)];
+ f1 = f1+f2;
+ f2 = heapFloat[(r1+2)];
+ f3 = heapFloat[(r0+2)];
+ f4 = heapFloat[(r1+1)];
+ f5 = heapFloat[(r0+1)];
+ f4 = f4+f5;
+ r0 = r2 >> 2;
+ f1 = f1*f0;
+ f2 = f2+f3;
+ f3 = f4*f0;
+ heapFloat[(r0)] = f1;
+ f0 = f2*f0;
+ heapFloat[(r0+1)] = f3;
+ heapFloat[(r0+2)] = f0;
+ heap32[(r0+3)] = 0;
+ return;
+}
+
+function _ZNK16btCollisionShape20getAngularMotionDiscEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var f0;
+ var f1;
+ var f2;
+var __label__ = 0;
+ i7 = sp + -40;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ r1 = heap32[(r1)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+3)];
+ r2 = sp + -16;
+ r3 = sp + -20;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r2;
+ heap32[(g0+2)] = r3;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+ r0 = r2 >> 2;
+ f0 = heapFloat[(fp+-4)];
+ f1 = heapFloat[(r0+1)];
+ f2 = heapFloat[(r0+2)];
+ f0 = f0*f0;
+ f1 = f1*f1;
+ f0 = f0+f1;
+ f1 = f2*f2;
+ f0 = f0+f1;
+ heapFloat[(g0)] = f0;
+ sqrtf(i7);
+ f1 = heapFloat[(fp+-5)];
+ f0 = f_g0+f1;
+ f_g0 = f0;
+ return;
+}
+
+function _ZNK16btCollisionShape21calculateTemporalAabbERK11btTransformRK9btVector3S5_fRS3_S6_(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ r2 = heap32[(r1)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+2)];
+ r3 = heap32[(fp+5)];
+ r4 = heap32[(fp+4)];
+ r5 = heap32[(fp+1)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r5;
+ heap32[(g0+2)] = r4;
+ heap32[(g0+3)] = r3;
+ r5 = heap32[(fp+2)];
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ r2 = r3 >> 2;
+ r3 = r4 >> 2;
+ r4 = r5 >> 2;
+ f0 = heapFloat[(r4)];
+ r5 = heap32[(fp+3)];
+ f1 = heapFloat[(r2)];
+ f2 = heapFloat[(r2+1)];
+ f3 = heapFloat[(r2+2)];
+ f4 = heapFloat[(r3)];
+ f5 = heapFloat[(r3+1)];
+ f6 = heapFloat[(r3+2)];
+ f7 = heapFloat[(r4+2)];
+ f8 = heapFloat[(r4+1)];
+ f9 = 0;
+ if(f0 <=f9) //_LBB434_2
+{
+ f4 = f0+f4;
+}
+else{
+ f1 = f0+f1;
+}
+ if(f8 <=f9) //_LBB434_5
+{
+ f5 = f8+f5;
+}
+else{
+ f2 = f8+f2;
+}
+ if(f7 <=f9) //_LBB434_8
+{
+ f6 = f7+f6;
+}
+else{
+ f3 = f7+f3;
+}
+ r4 = r5 >> 2;
+ f0 = heapFloat[(r4)];
+ f7 = heapFloat[(r4+1)];
+ f8 = heapFloat[(r4+2)];
+ f0 = f0*f0;
+ f7 = f7*f7;
+ f0 = f0+f7;
+ f7 = f8*f8;
+ f0 = f0+f7;
+ heapFloat[(g0)] = f0;
+ sqrtf(i7);
+ f0 = f_g0;
+ r1 = heap32[(r1)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+4)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+ heapFloat[(r3)] = f4;
+ heapFloat[(r3+1)] = f5;
+ heapFloat[(r3+2)] = f6;
+ heap32[(r3+3)] = 0;
+ heapFloat[(r2)] = f1;
+ heapFloat[(r2+1)] = f2;
+ heapFloat[(r2+2)] = f3;
+ heap32[(r2+3)] = 0;
+ f0 = f0*f_g0;
+ f1 = heapFloat[(r3)];
+ f1 = f1-f0;
+ heapFloat[(r3)] = f1;
+ f1 = heapFloat[(r3+1)];
+ f1 = f1-f0;
+ heapFloat[(r3+1)] = f1;
+ f1 = heapFloat[(r3+2)];
+ f1 = f1-f0;
+ heapFloat[(r3+2)] = f1;
+ f1 = heapFloat[(r2)];
+ f1 = f1+f0;
+ heapFloat[(r2)] = f1;
+ f1 = heapFloat[(r2+1)];
+ f1 = f1+f0;
+ heapFloat[(r2+1)] = f1;
+ f1 = heapFloat[(r2+2)];
+ f0 = f1+f0;
+ heapFloat[(r2+2)] = f0;
+ return;
+}
+
+function _ZN14btConcaveShapeD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV14btConcaveShape;
+ r0 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r0)] = r1;
+ return;
+}
+
+function _ZN14btConcaveShapeD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV14btConcaveShape;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZNK17btConvexHullShape7getNameEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = _2E_str219;
+ r_g0 = r0;
+ return;
+}
+
+function _ZNK17btConvexHullShape28calculateSerializeBufferSizeEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = 68;
+ r_g0 = r0;
+ return;
+}
+
+function _ZNK17btConvexHullShape12getNumPlanesEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = 0;
+ r_g0 = r0;
+ return;
+}
+
+function _ZNK17btConvexHullShape9getVertexEiR9btVector3(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r1 = heap32[(fp+1)];
+ r2 = heap32[(r0+25)];
+ r1 = r1 << 4;
+ r1 = (r2 + r1)|0;
+ r1 = r1 >> 2;
+ r2 = heap32[(fp+2)];
+ f0 = heapFloat[(r1+2)];
+ f1 = heapFloat[(r0+5)];
+ f2 = heapFloat[(r1+1)];
+ f3 = heapFloat[(r0+4)];
+ f4 = heapFloat[(r1)];
+ f5 = heapFloat[(r0+3)];
+ r0 = r2 >> 2;
+ f4 = f4*f5;
+ f2 = f2*f3;
+ heapFloat[(r0)] = f4;
+ f0 = f0*f1;
+ heapFloat[(r0+1)] = f2;
+ heapFloat[(r0+2)] = f0;
+ heap32[(r0+3)] = 0;
+ return;
+}
+
+function _ZNK17btConvexHullShape7getEdgeEiR9btVector3S1_(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r1 = heap32[(fp+1)];
+ r2 = heap32[(r0+23)];
+ r3 = (r1 % r2)|0;
+ r4 = heap32[(r0+25)];
+ r3 = r3 << 4;
+ r3 = (r4 + r3)|0;
+ r3 = r3 >> 2;
+ r4 = heap32[(fp+2)];
+ f0 = heapFloat[(r3+2)];
+ f1 = heapFloat[(r0+5)];
+ f2 = heapFloat[(r3+1)];
+ f3 = heapFloat[(r0+4)];
+ f4 = heapFloat[(r3)];
+ f5 = heapFloat[(r0+3)];
+ r3 = r4 >> 2;
+ f4 = f4*f5;
+ f2 = f2*f3;
+ heapFloat[(r3)] = f4;
+ f0 = f0*f1;
+ heapFloat[(r3+1)] = f2;
+ r1 = (r1 + 1)|0;
+ heapFloat[(r3+2)] = f0;
+ heap32[(r3+3)] = 0;
+ r1 = (r1 % r2)|0;
+ r2 = heap32[(r0+25)];
+ r1 = r1 << 4;
+ r1 = (r2 + r1)|0;
+ r1 = r1 >> 2;
+ r2 = heap32[(fp+3)];
+ f0 = heapFloat[(r1+2)];
+ f1 = heapFloat[(r0+5)];
+ f2 = heapFloat[(r1+1)];
+ f3 = heapFloat[(r0+4)];
+ f4 = heapFloat[(r1)];
+ f5 = heapFloat[(r0+3)];
+ r0 = r2 >> 2;
+ f4 = f4*f5;
+ f2 = f2*f3;
+ heapFloat[(r0)] = f4;
+ f0 = f0*f1;
+ heapFloat[(r0+1)] = f2;
+ heapFloat[(r0+2)] = f0;
+ heap32[(r0+3)] = 0;
+ return;
+}
+
+function _ZNK17btConvexHullShape11getNumEdgesEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r0 = heap32[(r0+23)];
+ r_g0 = r0;
+ return;
+}
+
+function _ZNK17btConvexHullShape14getNumVerticesEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r0 = heap32[(r0+23)];
+ r_g0 = r0;
+ return;
+}
+
+function _ZNK17btConvexHullShape49batchedUnitVectorGetSupportingVertexWithoutMarginEPK9btVector3PS0_i(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+3)];
+ r1 = heap32[(fp+2)];
+if(!(r0 <1)) //_LBB444_3
+{
+ r2 = (r1 + 12)|0;
+ r3 = r0;
+_3: while(true){
+ r3 = (r3 + -1)|0;
+ r4 = (r2 + 16)|0;
+ r2 = r2 >> 2;
+ heap32[(r2)] = -581039253;
+ r2 = r4;
+ if(r3 !=0) //_LBB444_2
+{
+continue _3;
+}
+else{
+break _3;
+}
+}
+}
+ r2 = heap32[(fp)];
+ r2 = r2 >> 2;
+ r3 = heap32[(r2+23)];
+_6: do {
+if(!(r3 <1)) //_LBB444_11
+{
+ r3 = heap32[(fp+1)];
+ r1 = (r1 + 8)|0;
+ r3 = (r3 + 8)|0;
+ r4 = 0;
+_8: while(true){
+if(!(r0 <1)) //_LBB444_10
+{
+ r5 = heap32[(r2+25)];
+ r6 = r4 << 4;
+ r5 = (r5 + r6)|0;
+ r5 = r5 >> 2;
+ f0 = heapFloat[(r5+2)];
+ f1 = heapFloat[(r2+5)];
+ f2 = heapFloat[(r5+1)];
+ f3 = heapFloat[(r2+4)];
+ f4 = heapFloat[(r5)];
+ f5 = heapFloat[(r2+3)];
+ f0 = f0*f1;
+ f1 = f2*f3;
+ f2 = f4*f5;
+ r5 = r3;
+ r6 = r1;
+ r7 = r0;
+_12: while(true){
+ r8 = r5 >> 2;
+ f3 = heapFloat[(r8+-2)];
+ f4 = heapFloat[(r8+-1)];
+ f3 = f3*f2;
+ f4 = f4*f1;
+ f5 = heapFloat[(r8)];
+ f3 = f3+f4;
+ f4 = f5*f0;
+ r8 = r6 >> 2;
+ f3 = f3+f4;
+ f4 = heapFloat[(r8+1)];
+if(!(f4 >=f3)) //_LBB444_9
+{
+ heapFloat[(r8+-2)] = f2;
+ heapFloat[(r8+-1)] = f1;
+ heapFloat[(r8)] = f0;
+ heapFloat[(r8+1)] = f3;
+}
+ r7 = (r7 + -1)|0;
+ r6 = (r6 + 16)|0;
+ r5 = (r5 + 16)|0;
+if(!(r7 !=0)) //_LBB444_7
+{
+break _12;
+}
+}
+}
+ r4 = (r4 + 1)|0;
+ r5 = heap32[(r2+23)];
+ if(r5 >r4) //_LBB444_5
+{
+continue _8;
+}
+else{
+break _6;
+}
+}
+}
+} while(0);
+ return;
+}
+
+function _ZNK17btConvexHullShape37localGetSupportingVertexWithoutMarginERK9btVector3(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+ var f10;
+ var f11;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ heap32[(r0)] = 0;
+ heap32[(r0+1)] = 0;
+ r1 = heap32[(fp+1)];
+ heap32[(r0+2)] = 0;
+ r1 = r1 >> 2;
+ heap32[(r0+3)] = 0;
+ r2 = heap32[(r1+23)];
+if(!(r2 <1)) //_LBB445_6
+{
+ r3 = heap32[(fp+2)];
+ r3 = r3 >> 2;
+ r4 = heap32[(r1+25)];
+ f0 = heapFloat[(r1+5)];
+ f1 = heapFloat[(r1+4)];
+ f2 = heapFloat[(r1+3)];
+ f3 = heapFloat[(r3)];
+ f4 = heapFloat[(r3+1)];
+ f5 = heapFloat[(r3+2)];
+ r1 = 0;
+ f6 = -999999984306749440;
+_3: while(true){
+ r3 = r1 << 4;
+ r3 = (r4 + r3)|0;
+ r3 = r3 >> 2;
+ f7 = heapFloat[(r3+1)];
+ f8 = heapFloat[(r3)];
+ f7 = f7*f1;
+ f8 = f8*f2;
+ f9 = heapFloat[(r3+2)];
+ f9 = f9*f0;
+ f10 = f3*f8;
+ f11 = f4*f7;
+ f10 = f10+f11;
+ f11 = f5*f9;
+ f10 = f10+f11;
+ if(f10 >f6) //_LBB445_4
+{
+ heapFloat[(r0)] = f8;
+ heapFloat[(r0+1)] = f7;
+ heapFloat[(r0+2)] = f9;
+ heap32[(r0+3)] = 0;
+ f6 = f10;
+}
+ r1 = (r1 + 1)|0;
+ if(r1 <r2) //_LBB445_2
+{
+continue _3;
+}
+else{
+break _3;
+}
+}
+}
+ return;
+}
+
+function _ZNK17btConvexHullShape8isInsideERK9btVector3f(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = _2E_str10;
+ r1 = _2E_str3222;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 173;
+ _assert(i7);
+}
+
+function _ZNK17btConvexHullShape8getPlaneER9btVector3S1_i(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = _2E_str10;
+ r1 = _2E_str3222;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 167;
+ _assert(i7);
+}
+
+function _ZN17btConvexHullShapeD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV17btConvexHullShape;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ r1 = heap32[(r2+25)];
+if(!(r1 ==0)) //_LBB448_4
+{
+ r3 = heapU8[r0+104];
+if(!(r3 ==0)) //_LBB448_3
+{
+ r3 = gNumAlignedFree;
+ r3 = r3 >> 2;
+ r4 = heap32[(r3)];
+ r4 = (r4 + 1)|0;
+ r1 = r1 >> 2;
+ heap32[(r3)] = r4;
+ r1 = heap32[(r1+-1)];
+ heap32[(g0)] = r1;
+ free(i7);
+}
+ heap32[(r2+25)] = 0;
+}
+ r1 = 1;
+ heap8[r0+104] = r1;
+ heap32[(r2+25)] = 0;
+ r1 = _ZTV13btConvexShape;
+ heap32[(r2+23)] = 0;
+ r1 = (r1 + 8)|0;
+ heap32[(r2+24)] = 0;
+ heap32[(r2)] = r1;
+if(!(r0 ==0)) //_LBB448_6
+{
+ r0 = gNumAlignedFree;
+ r0 = r0 >> 2;
+ r1 = heap32[(r0)];
+ r1 = (r1 + 1)|0;
+ heap32[(r0)] = r1;
+ r0 = heap32[(r2+-1)];
+ heap32[(g0)] = r0;
+ free(i7);
+}
+ return;
+}
+
+function _ZN17btConvexHullShapeD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV17btConvexHullShape;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ r1 = heap32[(r2+25)];
+if(!(r1 ==0)) //_LBB449_4
+{
+ r3 = heapU8[r0+104];
+if(!(r3 ==0)) //_LBB449_3
+{
+ r3 = gNumAlignedFree;
+ r3 = r3 >> 2;
+ r4 = heap32[(r3)];
+ r4 = (r4 + 1)|0;
+ r1 = r1 >> 2;
+ heap32[(r3)] = r4;
+ r1 = heap32[(r1+-1)];
+ heap32[(g0)] = r1;
+ free(i7);
+}
+ heap32[(r2+25)] = 0;
+}
+ r1 = 1;
+ heap8[r0+104] = r1;
+ heap32[(r2+25)] = 0;
+ r0 = _ZTV13btConvexShape;
+ heap32[(r2+23)] = 0;
+ r0 = (r0 + 8)|0;
+ heap32[(r2+24)] = 0;
+ heap32[(r2)] = r0;
+ return;
+}
+
+function _ZN17btConvexHullShape15setLocalScalingERK9btVector3(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = heap32[(fp+1)];
+ r2 = r0 >> 2;
+ r1 = r1 >> 2;
+ heap32[(r2+3)] = heap32[(r1)];
+ heap32[(r2+4)] = heap32[(r1+1)];
+ heap32[(r2+5)] = heap32[(r1+2)];
+ heap32[(r2+6)] = heap32[(r1+3)];
+ heap32[(g0)] = r0;
+ _ZN34btPolyhedralConvexAabbCachingShape15recalcLocalAabbEv(i7);
+ return;
+}
+
+function _ZNK17btConvexHullShape9serializeEPvP12btSerializer(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+var __label__ = 0;
+ i7 = sp + -24;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+2)];
+ r1 = r0 >> 2;
+ r2 = heap32[(r1)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+10)];
+ r3 = heap32[(fp)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r3;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ r2 = r_g0;
+ r4 = heap32[(r1)];
+ r4 = r4 >> 2;
+ r4 = heap32[(r4+7)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r2;
+ r5 = heap32[(fp+1)];
+ __FUNCTION_TABLE__[(r4)>>2](i7);
+ r4 = r_g0;
+ r5 = r5 >> 2;
+ heap32[(r5)] = r4;
+if(!(r4 ==0)) //_LBB451_2
+{
+ r4 = heap32[(r1)];
+ r4 = r4 >> 2;
+ r4 = heap32[(r4+12)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r2;
+ __FUNCTION_TABLE__[(r4)>>2](i7);
+}
+ r2 = r3 >> 2;
+ r3 = heap32[(r2+1)];
+ heap32[(r5+1)] = r3;
+ heap32[(r5+7)] = heap32[(r2+7)];
+ heap32[(r5+8)] = heap32[(r2+8)];
+ heap32[(r5+9)] = heap32[(r2+9)];
+ heap32[(r5+10)] = heap32[(r2+10)];
+ heap32[(r5+3)] = heap32[(r2+3)];
+ heap32[(r5+4)] = heap32[(r2+4)];
+ heap32[(r5+5)] = heap32[(r2+5)];
+ heap32[(r5+6)] = heap32[(r2+6)];
+ heap32[(r5+11)] = heap32[(r2+11)];
+ r3 = heap32[(r2+23)];
+ heap32[(r5+15)] = r3;
+ if(r3 ==0) //_LBB451_7
+{
+ heap32[(r5+13)] = 0;
+ heap32[(r5+14)] = 0;
+ r0 = _2E_str6224;
+ r_g0 = r0;
+ return;
+}
+else{
+ r4 = heap32[(r1)];
+ r4 = r4 >> 2;
+ r4 = heap32[(r4+7)];
+ r6 = heap32[(r2+25)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r6;
+ __FUNCTION_TABLE__[(r4)>>2](i7);
+ heap32[(r5+13)] = r_g0;
+ heap32[(r5+14)] = 0;
+ r5 = heap32[(r1)];
+ r5 = r5 >> 2;
+ r5 = heap32[(r5+4)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = 16;
+ heap32[(g0+2)] = r3;
+ __FUNCTION_TABLE__[(r5)>>2](i7);
+ r5 = r_g0;
+if(!(r3 <1)) //_LBB451_6
+{
+ r4 = r5 >> 2;
+ r4 = heap32[(r4+2)];
+ r6 = 0;
+_9: while(true){
+ r7 = r6 << 4;
+ r8 = heap32[(r2+25)];
+ r9 = (r4 + r7)|0;
+ r7 = (r8 + r7)|0;
+ r8 = r9 >> 2;
+ r7 = r7 >> 2;
+ heap32[(r8)] = heap32[(r7)];
+ heap32[(r8+1)] = heap32[(r7+1)];
+ r6 = (r6 + 1)|0;
+ heap32[(r8+2)] = heap32[(r7+2)];
+ heap32[(r8+3)] = heap32[(r7+3)];
+if(!(r3 !=r6)) //_LBB451_5
+{
+break _9;
+}
+}
+}
+ r1 = heap32[(r1)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+5)];
+ r2 = heap32[(r2+25)];
+ r3 = _2E_str5223;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r5;
+ heap32[(g0+2)] = r3;
+ heap32[(g0+3)] = 1497453121;
+ heap32[(g0+4)] = r2;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+ r5 = _2E_str6224;
+ r_g0 = r5;
+ return;
+}
+}
+
+function _ZNK17btConvexHullShape24localGetSupportingVertexERK9btVector3(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ r1 = r0 >> 2;
+ r2 = heap32[(r1)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+16)];
+ r3 = heap32[(fp)];
+ r4 = heap32[(fp+2)];
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r0;
+ heap32[(g0+2)] = r4;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ r2 = heap32[(r1)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+11)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ f0 = f_g0;
+ f1 = 0;
+if(!(f0 ==f1)) //_LBB452_2
+{
+ r2 = r4 >> 2;
+ f0 = heapFloat[(r2)];
+ f1 = heapFloat[(r2+1)];
+ f2 = heapFloat[(r2+2)];
+ f3 = f0*f0;
+ f4 = f1*f1;
+ f3 = f3+f4;
+ f4 = f2*f2;
+ f3 = f3+f4;
+ f4 = 1.4210854715202004e-014;
+ f5 = -1;
+ f0 = f3 < f4 ? f5 : f0;
+ f1 = f3 < f4 ? f5 : f1;
+ f2 = f3 < f4 ? f5 : f2;
+ f3 = f0*f0;
+ f4 = f1*f1;
+ f3 = f3+f4;
+ f4 = f2*f2;
+ f3 = f3+f4;
+ heapFloat[(g0)] = f3;
+ sqrtf(i7);
+ r1 = heap32[(r1)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+11)];
+ f4 = 1;
+ f3 = f4/f_g0;
+ heap32[(g0)] = r0;
+ r0 = r3 >> 2;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+ f0 = f0*f3;
+ f0 = f0*f_g0;
+ f5 = heapFloat[(r0)];
+ f0 = f5+f0;
+ f1 = f1*f3;
+ heapFloat[(r0)] = f0;
+ f0 = f1*f_g0;
+ f1 = heapFloat[(r0+1)];
+ f0 = f1+f0;
+ f1 = f2*f3;
+ heapFloat[(r0+1)] = f0;
+ f0 = f1*f_g0;
+ f1 = heapFloat[(r0+2)];
+ f0 = f1+f0;
+ heapFloat[(r0+2)] = f0;
+}
+ return;
+}
+
+function _ZN17btConvexHullShape8addPointERK9btVector3(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ r2 = heap32[(r1+24)];
+ r3 = heap32[(r1+23)];
+ r4 = heap32[(fp+1)];
+ if(r2 ==r3) //_LBB453_2
+{
+ r5 = 1;
+ r6 = r3 << 1;
+ r6 = r3 == 0 ? r5 : r6;
+if(!(r2 >=r6)) //_LBB453_1
+{
+ if(r6 !=0) //_LBB453_5
+{
+ r2 = gNumAlignedAllocs;
+ r2 = r2 >> 2;
+ r7 = heap32[(r2)];
+ r8 = r6 << 4;
+ r7 = (r7 + 1)|0;
+ r8 = r8 | 3;
+ heap32[(r2)] = r7;
+ r2 = (r8 + 16)|0;
+ heap32[(g0)] = r2;
+ malloc(i7);
+ r2 = r_g0;
+ if(r2 !=0) //_LBB453_7
+{
+ r7 = 0;
+ r8 = (r2 + 4)|0;
+ r7 = (r7 - r8)|0;
+ r7 = r7 & 15;
+ r7 = (r2 + r7)|0;
+ r8 = (r7 + 4)|0;
+ r7 = r7 >> 2;
+ heap32[(r7)] = r2;
+ r2 = r8;
+}
+}
+else{
+ r2 = 0;
+}
+ r7 = (r0 + 100)|0;
+ if(r3 <1) //_LBB453_10
+{
+ r8 = r7 >> 2;
+ r9 = heap32[(r8)];
+}
+else{
+ r8 = 0;
+_12: while(true){
+ r9 = r7 >> 2;
+ r9 = heap32[(r9)];
+ r10 = r8 << 4;
+ r11 = (r2 + r10)|0;
+ r10 = (r9 + r10)|0;
+ r11 = r11 >> 2;
+ r10 = r10 >> 2;
+ heap32[(r11)] = heap32[(r10)];
+ heap32[(r11+1)] = heap32[(r10+1)];
+ r8 = (r8 + 1)|0;
+ heap32[(r11+2)] = heap32[(r10+2)];
+ heap32[(r11+3)] = heap32[(r10+3)];
+if(!(r3 !=r8)) //_LBB453_11
+{
+break _12;
+}
+}
+ r7 = (r0 + 100)|0;
+}
+ if(r9 !=0) //_LBB453_15
+{
+ r8 = heapU8[r0+104];
+ if(r8 !=0) //_LBB453_17
+{
+ r3 = gNumAlignedFree;
+ r3 = r3 >> 2;
+ r8 = heap32[(r3)];
+ r8 = (r8 + 1)|0;
+ r9 = r9 >> 2;
+ heap32[(r3)] = r8;
+ r3 = heap32[(r9+-1)];
+ heap32[(g0)] = r3;
+ free(i7);
+ r3 = heap32[(r1+23)];
+}
+ r8 = r7 >> 2;
+ heap32[(r8)] = 0;
+}
+ r7 = r7 >> 2;
+ heap8[r0+104] = r5;
+ heap32[(r7)] = r2;
+ heap32[(r1+24)] = r6;
+}
+}
+ r2 = r3 << 4;
+ r3 = heap32[(r1+25)];
+ r2 = (r3 + r2)|0;
+ r2 = r2 >> 2;
+ r3 = r4 >> 2;
+ heap32[(r2)] = heap32[(r3)];
+ heap32[(r2+1)] = heap32[(r3+1)];
+ heap32[(r2+2)] = heap32[(r3+2)];
+ heap32[(r2+3)] = heap32[(r3+3)];
+ r2 = heap32[(r1+23)];
+ r2 = (r2 + 1)|0;
+ heap32[(r1+23)] = r2;
+ heap32[(g0)] = r0;
+ _ZN34btPolyhedralConvexAabbCachingShape15recalcLocalAabbEv(i7);
+ return;
+}
+
+function _ZN20btAlignedObjectArrayI9btVector3E6resizeEiRKS0_(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ r2 = heap32[(r1+1)];
+ r3 = heap32[(fp+1)];
+_1: do {
+if(!(r2 >r3)) //_LBB454_20
+{
+if(!(r2 >=r3)) //_LBB454_20
+{
+ r4 = heap32[(r1+2)];
+if(!(r4 >=r3)) //_LBB454_18
+{
+ if(r3 !=0) //_LBB454_5
+{
+ r4 = gNumAlignedAllocs;
+ r4 = r4 >> 2;
+ r5 = heap32[(r4)];
+ r6 = r3 << 4;
+ r5 = (r5 + 1)|0;
+ r6 = r6 | 3;
+ heap32[(r4)] = r5;
+ r4 = (r6 + 16)|0;
+ heap32[(g0)] = r4;
+ malloc(i7);
+ r4 = r_g0;
+ if(r4 !=0) //_LBB454_7
+{
+ r5 = 0;
+ r6 = (r4 + 4)|0;
+ r5 = (r5 - r6)|0;
+ r5 = r5 & 15;
+ r5 = (r4 + r5)|0;
+ r6 = (r5 + 4)|0;
+ r5 = r5 >> 2;
+ heap32[(r5)] = r4;
+ r4 = r6;
+}
+}
+else{
+ r4 = 0;
+}
+ r5 = (r0 + 12)|0;
+ if(r2 <1) //_LBB454_10
+{
+ r6 = r5 >> 2;
+ r7 = heap32[(r6)];
+}
+else{
+ r6 = 0;
+_14: while(true){
+ r7 = r5 >> 2;
+ r7 = heap32[(r7)];
+ r8 = r6 << 4;
+ r9 = (r4 + r8)|0;
+ r8 = (r7 + r8)|0;
+ r9 = r9 >> 2;
+ r8 = r8 >> 2;
+ heap32[(r9)] = heap32[(r8)];
+ heap32[(r9+1)] = heap32[(r8+1)];
+ r6 = (r6 + 1)|0;
+ heap32[(r9+2)] = heap32[(r8+2)];
+ heap32[(r9+3)] = heap32[(r8+3)];
+if(!(r2 !=r6)) //_LBB454_11
+{
+break _14;
+}
+}
+ r5 = (r0 + 12)|0;
+}
+if(!(r7 ==0)) //_LBB454_17
+{
+ r6 = heapU8[r0+16];
+if(!(r6 ==0)) //_LBB454_16
+{
+ r6 = gNumAlignedFree;
+ r6 = r6 >> 2;
+ r8 = heap32[(r6)];
+ r8 = (r8 + 1)|0;
+ r7 = r7 >> 2;
+ heap32[(r6)] = r8;
+ r6 = heap32[(r7+-1)];
+ heap32[(g0)] = r6;
+ free(i7);
+}
+ r6 = r5 >> 2;
+ heap32[(r6)] = 0;
+}
+ r6 = 1;
+ r5 = r5 >> 2;
+ heap8[r0+16] = r6;
+ heap32[(r5)] = r4;
+ heap32[(r1+2)] = r3;
+ if(r2 >=r3) //_LBB454_20
+{
+break _1;
+}
+}
+ r0 = heap32[(fp+2)];
+_25: while(true){
+ r4 = r2 << 4;
+ r5 = heap32[(r1+3)];
+ r4 = (r5 + r4)|0;
+ r4 = r4 >> 2;
+ r5 = r0 >> 2;
+ heap32[(r4)] = heap32[(r5)];
+ heap32[(r4+1)] = heap32[(r5+1)];
+ r2 = (r2 + 1)|0;
+ heap32[(r4+2)] = heap32[(r5+2)];
+ heap32[(r4+3)] = heap32[(r5+3)];
+ if(r3 !=r2) //_LBB454_19
+{
+continue _25;
+}
+else{
+break _1;
+}
+}
+}
+}
+} while(0);
+ heap32[(r1+1)] = r3;
+ return;
+}
+
+function _ZN17btConvexHullShapeC1EPKfii(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var f0;
+ var f1;
+var __label__ = 0;
+ i7 = sp + -32;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ heap32[(r1+2)] = 0;
+ heap32[(r1+3)] = 1065353216;
+ heap32[(r1+4)] = 1065353216;
+ heap32[(r1+5)] = 1065353216;
+ heap32[(r1+6)] = 0;
+ heap32[(r1+11)] = 1025758986;
+ heap32[(r1+13)] = 1065353216;
+ heap32[(r1+14)] = 1065353216;
+ heap32[(r1+15)] = 1065353216;
+ heap32[(r1+16)] = 0;
+ heap32[(r1+17)] = -1082130432;
+ heap32[(r1+18)] = -1082130432;
+ heap32[(r1+19)] = -1082130432;
+ r2 = _ZTV17btConvexHullShape;
+ r3 = 0;
+ heap32[(r1+20)] = 0;
+ r2 = (r2 + 8)|0;
+ heap8[r0+84] = r3;
+ r4 = 1;
+ heap32[(r1)] = r2;
+ heap8[r0+104] = r4;
+ heap32[(r1+25)] = 0;
+ heap32[(r1+23)] = 0;
+ heap32[(r1+24)] = 0;
+ heap32[(r1+1)] = 4;
+ r2 = heap32[(fp+2)];
+ r4 = (r0 + 88)|0;
+ r5 = sp + -16;
+ heap32[(g0)] = r4;
+ heap32[(g0+1)] = r2;
+ heap32[(g0+2)] = r5;
+ _ZN20btAlignedObjectArrayI9btVector3E6resizeEiRKS0_(i7);
+if(!(r2 <1)) //_LBB455_3
+{
+ r4 = heap32[(fp+1)];
+_3: while(true){
+ r5 = r3 << 4;
+ r6 = (r4 + r5)|0;
+ r6 = r6 >> 2;
+ r7 = heap32[(r1+25)];
+ r5 = (r7 + r5)|0;
+ f0 = heapFloat[(r6+2)];
+ f1 = heapFloat[(r6+1)];
+ r5 = r5 >> 2;
+ heap32[(r5)] = heap32[(r6)];
+ heapFloat[(r5+1)] = f1;
+ r3 = (r3 + 1)|0;
+ heapFloat[(r5+2)] = f0;
+ heap32[(r5+3)] = 0;
+ if(r2 !=r3) //_LBB455_2
+{
+continue _3;
+}
+else{
+break _3;
+}
+}
+}
+ heap32[(g0)] = r0;
+ _ZN34btPolyhedralConvexAabbCachingShape15recalcLocalAabbEv(i7);
+ return;
+}
+
+function _ZN21btConvexInternalShape15setLocalScalingERK9btVector3(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ r0 = r0 >> 2;
+ f0 = heapFloat[(r0+2)];
+ r1 = heap32[(fp)];
+ f1 = 0;
+ if(f0 <f1) //_LBB456_2
+{
+ f0 = -f0;
+}
+ f2 = heapFloat[(r0+1)];
+ if(f2 <f1) //_LBB456_5
+{
+ f2 = -f2;
+}
+ f3 = heapFloat[(r0)];
+ if(f3 <f1) //_LBB456_8
+{
+ f3 = -f3;
+}
+ r0 = r1 >> 2;
+ heapFloat[(r0+3)] = f3;
+ heapFloat[(r0+4)] = f2;
+ heapFloat[(r0+5)] = f0;
+ heap32[(r0+6)] = 0;
+ return;
+}
+
+function _ZNK21btConvexInternalShape11getAabbSlowERK11btTransformR9btVector3S4_(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+ var f10;
+ var f11;
+ var f12;
+var __label__ = 0;
+ i7 = sp + -112;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ r2 = heap32[(r1)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+11)];
+ heap32[(g0)] = r0;
+ r3 = heap32[(fp+1)];
+ r4 = heap32[(fp+2)];
+ r5 = heap32[(fp+3)];
+ r6 = 0;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ f0 = f_g0;
+_1: while(true){
+ r2 = sp + -64;
+ r7 = r2 >> 2;
+ heap32[(fp+-16)] = 0;
+ heap32[(r7+1)] = 0;
+ r8 = r6 << 2;
+ r2 = (r2 - r8)|0;
+ heap32[(r7+2)] = 0;
+ r2 = r2 >> 2;
+ heap32[(r7+3)] = 0;
+ heap32[(r2)] = 1065353216;
+ r9 = r3 >> 2;
+ r10 = heap32[(r1)];
+ f1 = heapFloat[(fp+-16)];
+ f2 = heapFloat[(r9)];
+ f3 = heapFloat[(r7+1)];
+ f4 = heapFloat[(r9+4)];
+ r10 = r10 >> 2;
+ f5 = heapFloat[(r9+1)];
+ f6 = heapFloat[(r9+5)];
+ f2 = f2*f1;
+ f4 = f4*f3;
+ f7 = heapFloat[(r7+2)];
+ f8 = heapFloat[(r9+8)];
+ f9 = heapFloat[(r9+2)];
+ f10 = heapFloat[(r9+6)];
+ f11 = heapFloat[(r9+10)];
+ f12 = heapFloat[(r9+9)];
+ r10 = heap32[(r10+15)];
+ f5 = f5*f1;
+ f6 = f6*f3;
+ f2 = f2+f4;
+ f4 = f8*f7;
+ r11 = sp + -48;
+ f1 = f9*f1;
+ f3 = f10*f3;
+ f5 = f5+f6;
+ f6 = f12*f7;
+ f2 = f2+f4;
+ r12 = r11 >> 2;
+ f1 = f1+f3;
+ f3 = f11*f7;
+ f4 = f5+f6;
+ heapFloat[(fp+-12)] = f2;
+ f1 = f1+f3;
+ heapFloat[(r12+1)] = f4;
+ heapFloat[(r12+2)] = f1;
+ heap32[(r12+3)] = 0;
+ r12 = sp + -80;
+ heap32[(g0)] = r12;
+ heap32[(g0+1)] = r0;
+ heap32[(g0+2)] = r11;
+ __FUNCTION_TABLE__[(r10)>>2](i7);
+ r10 = r12 >> 2;
+ f1 = heapFloat[(fp+-20)];
+ f2 = heapFloat[(r9)];
+ f3 = heapFloat[(r10+1)];
+ f4 = heapFloat[(r9+1)];
+ f5 = heapFloat[(r9+4)];
+ f6 = heapFloat[(r9+5)];
+ f2 = f2*f1;
+ f4 = f4*f3;
+ f7 = heapFloat[(r10+2)];
+ f8 = heapFloat[(r9+2)];
+ f9 = heapFloat[(r9+8)];
+ f10 = heapFloat[(r9+9)];
+ f11 = heapFloat[(r9+6)];
+ f5 = f5*f1;
+ f6 = f6*f3;
+ f2 = f2+f4;
+ f4 = f8*f7;
+ f8 = heapFloat[(r9+10)];
+ f1 = f9*f1;
+ f3 = f10*f3;
+ f5 = f5+f6;
+ f6 = f11*f7;
+ f2 = f2+f4;
+ f4 = heapFloat[(r9+12)];
+ f9 = heapFloat[(r9+14)];
+ f10 = heapFloat[(r9+13)];
+ r10 = sp + -96;
+ f5 = f5+f6;
+ f1 = f1+f3;
+ f3 = f8*f7;
+ f2 = f2+f4;
+ f1 = f1+f3;
+ f3 = f5+f10;
+ heapFloat[(fp+-24)] = f2;
+ r11 = r10 >> 2;
+ f1 = f1+f9;
+ heapFloat[(r11+1)] = f3;
+ heapFloat[(r11+2)] = f1;
+ r10 = (r10 - r8)|0;
+ heap32[(r11+3)] = 0;
+ r10 = r10 >> 2;
+ r12 = (r5 - r8)|0;
+ f1 = heapFloat[(r10)];
+ r12 = r12 >> 2;
+ f1 = f1+f0;
+ heapFloat[(r12)] = f1;
+ heap32[(r2)] = -1082130432;
+ r2 = heap32[(r1)];
+ f1 = heapFloat[(fp+-16)];
+ f2 = heapFloat[(r9)];
+ f3 = heapFloat[(r7+1)];
+ f4 = heapFloat[(r9+4)];
+ r2 = r2 >> 2;
+ f5 = heapFloat[(r9+1)];
+ f6 = heapFloat[(r9+5)];
+ f2 = f2*f1;
+ f4 = f4*f3;
+ f7 = heapFloat[(r7+2)];
+ f8 = heapFloat[(r9+8)];
+ f9 = heapFloat[(r9+2)];
+ f10 = heapFloat[(r9+6)];
+ f11 = heapFloat[(r9+10)];
+ f12 = heapFloat[(r9+9)];
+ r2 = heap32[(r2+15)];
+ f5 = f5*f1;
+ f6 = f6*f3;
+ f2 = f2+f4;
+ f4 = f8*f7;
+ r7 = sp + -16;
+ f1 = f9*f1;
+ f3 = f10*f3;
+ f5 = f5+f6;
+ f6 = f12*f7;
+ f2 = f2+f4;
+ r12 = r7 >> 2;
+ f1 = f1+f3;
+ f3 = f11*f7;
+ f4 = f5+f6;
+ heapFloat[(fp+-4)] = f2;
+ f1 = f1+f3;
+ heapFloat[(r12+1)] = f4;
+ heapFloat[(r12+2)] = f1;
+ heap32[(r12+3)] = 0;
+ r12 = sp + -32;
+ heap32[(g0)] = r12;
+ heap32[(g0+1)] = r0;
+ heap32[(g0+2)] = r7;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ r2 = r12 >> 2;
+ f1 = heapFloat[(fp+-8)];
+ f2 = heapFloat[(r9)];
+ f3 = heapFloat[(r2+1)];
+ f4 = heapFloat[(r9+1)];
+ f5 = heapFloat[(r9+4)];
+ f6 = heapFloat[(r9+5)];
+ f2 = f2*f1;
+ f4 = f4*f3;
+ f7 = heapFloat[(r2+2)];
+ f8 = heapFloat[(r9+2)];
+ f9 = heapFloat[(r9+8)];
+ f10 = heapFloat[(r9+9)];
+ f11 = heapFloat[(r9+6)];
+ f5 = f5*f1;
+ f6 = f6*f3;
+ f2 = f2+f4;
+ f4 = f8*f7;
+ f8 = heapFloat[(r9+10)];
+ f1 = f9*f1;
+ f3 = f10*f3;
+ f5 = f5+f6;
+ f6 = f11*f7;
+ f2 = f2+f4;
+ f4 = heapFloat[(r9+12)];
+ f9 = heapFloat[(r9+14)];
+ f10 = heapFloat[(r9+13)];
+ f5 = f5+f6;
+ f1 = f1+f3;
+ f3 = f8*f7;
+ f2 = f2+f4;
+ f1 = f1+f3;
+ f3 = f5+f10;
+ heapFloat[(fp+-24)] = f2;
+ f1 = f1+f9;
+ heapFloat[(r11+1)] = f3;
+ heapFloat[(r11+2)] = f1;
+ heap32[(r11+3)] = 0;
+ r2 = (r4 - r8)|0;
+ f1 = heapFloat[(r10)];
+ r6 = (r6 + -1)|0;
+ r2 = r2 >> 2;
+ f1 = f1-f0;
+ heapFloat[(r2)] = f1;
+ if(r6 !=-3) //_LBB457_1
+{
+continue _1;
+}
+else{
+break _1;
+}
+}
+ return;
+}
+
+function _ZNK21btConvexInternalShape24localGetSupportingVertexERK9btVector3(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ r1 = r0 >> 2;
+ r2 = heap32[(r1)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+16)];
+ r3 = heap32[(fp)];
+ r4 = heap32[(fp+2)];
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r0;
+ heap32[(g0+2)] = r4;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ r2 = heap32[(r1)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+11)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ f0 = f_g0;
+ f1 = 0;
+if(!(f0 ==f1)) //_LBB458_2
+{
+ r2 = r4 >> 2;
+ f0 = heapFloat[(r2)];
+ f1 = heapFloat[(r2+1)];
+ f2 = heapFloat[(r2+2)];
+ f3 = f0*f0;
+ f4 = f1*f1;
+ f3 = f3+f4;
+ f4 = f2*f2;
+ f3 = f3+f4;
+ f4 = 1.4210854715202004e-014;
+ f5 = -1;
+ f0 = f3 < f4 ? f5 : f0;
+ f1 = f3 < f4 ? f5 : f1;
+ f2 = f3 < f4 ? f5 : f2;
+ f3 = f0*f0;
+ f4 = f1*f1;
+ f3 = f3+f4;
+ f4 = f2*f2;
+ f3 = f3+f4;
+ heapFloat[(g0)] = f3;
+ sqrtf(i7);
+ r1 = heap32[(r1)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+11)];
+ f4 = 1;
+ f3 = f4/f_g0;
+ heap32[(g0)] = r0;
+ r0 = r3 >> 2;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+ f0 = f0*f3;
+ f0 = f0*f_g0;
+ f5 = heapFloat[(r0)];
+ f0 = f5+f0;
+ f1 = f1*f3;
+ heapFloat[(r0)] = f0;
+ f0 = f1*f_g0;
+ f1 = heapFloat[(r0+1)];
+ f0 = f1+f0;
+ f1 = f2*f3;
+ heapFloat[(r0+1)] = f0;
+ f0 = f1*f_g0;
+ f1 = heapFloat[(r0+2)];
+ f0 = f1+f0;
+ heapFloat[(r0+2)] = f0;
+}
+ return;
+}
+
+function _ZN13btConvexShapeD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV13btConvexShape;
+ r0 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r0)] = r1;
+ return;
+}
+
+function _ZN13btConvexShapeD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV13btConvexShape;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+if(!(r0 ==0)) //_LBB460_2
+{
+ r0 = gNumAlignedFree;
+ r0 = r0 >> 2;
+ r1 = heap32[(r0)];
+ r1 = (r1 + 1)|0;
+ heap32[(r0)] = r1;
+ r0 = heap32[(r2+-1)];
+ heap32[(g0)] = r0;
+ free(i7);
+}
+ return;
+}
+
+function _ZL17convexHullSupportRK9btVector3PS0_iS1_(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+5)];
+if(!(r0 <1)) //_LBB461_4
+{
+ f0 = heapFloat[(fp+8)];
+ f1 = heapFloat[(fp+3)];
+ f2 = heapFloat[(fp+7)];
+ f3 = heapFloat[(fp+2)];
+ f4 = heapFloat[(fp+6)];
+ f5 = heapFloat[(fp+1)];
+ r1 = heap32[(fp)];
+ r2 = heap32[(fp+4)];
+ f1 = f1*f0;
+ f3 = f3*f2;
+ f5 = f5*f4;
+ r3 = 0;
+ r4 = -1;
+ f6 = -999999984306749440;
+_3: while(true){
+ r5 = r3 << 4;
+ r5 = (r2 + r5)|0;
+ r5 = r5 >> 2;
+ f7 = heapFloat[(r5)];
+ f8 = heapFloat[(r5+1)];
+ f7 = f5*f7;
+ f8 = f3*f8;
+ f9 = heapFloat[(r5+2)];
+ f7 = f7+f8;
+ f8 = f1*f9;
+ f7 = f7+f8;
+ r5 = (r3 + 1)|0;
+ r4 = f7 > f6 ? r3 : r4;
+ f6 = f7 > f6 ? f7 : f6;
+ r3 = r5;
+if(!(r0 !=r5)) //_LBB461_2
+{
+break _3;
+}
+}
+ if(r4 >-1) //_LBB461_5
+{
+ r0 = r4 << 4;
+ r0 = (r2 + r0)|0;
+ r0 = r0 >> 2;
+ f1 = heapFloat[(r0)];
+ f3 = heapFloat[(r0+2)];
+ f5 = heapFloat[(r0+1)];
+ r0 = r1 >> 2;
+ f1 = f1*f4;
+ f2 = f5*f2;
+ heapFloat[(r0)] = f1;
+ f0 = f3*f0;
+ heapFloat[(r0+1)] = f2;
+ heapFloat[(r0+2)] = f0;
+ heap32[(r0+3)] = 0;
+ return;
+}
+}
+ r1 = _2E_str6249;
+ r2 = _2E_str7250;
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r2;
+ heap32[(g0+2)] = 108;
+ _assert(i7);
+}
+
+function _ZNK13btConvexShape44localGetSupportVertexWithoutMarginNonVirtualERK9btVector3(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+ var f10;
+ var f11;
+ var f12;
+ var f13;
+ var f14;
+ var f15;
+var __label__ = 0;
+ i7 = sp + -120;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ r1 = r0 >> 2;
+ r2 = heap32[(r1+1)];
+ r3 = heap32[(fp)];
+ r4 = heap32[(fp+2)];
+_1: do {
+ if(r2 >4) //_LBB462_4
+{
+ if(r2 >9) //_LBB462_7
+{
+ if(r2 ==10) //_LBB462_32
+{
+ r2 = heap32[(r1+13)];
+ r5 = (r2 + 2)|0;
+ r4 = r4 >> 2;
+ r5 = (r5 % 3)|0;
+ f0 = heapFloat[(r4)];
+ f1 = heapFloat[(r4+1)];
+ r2 = r2 << 2;
+ r0 = (r0 + 28)|0;
+ r5 = r5 << 2;
+ f2 = heapFloat[(r4+2)];
+ r4 = (r0 + r2)|0;
+ r0 = (r0 + r5)|0;
+ f3 = f0*f0;
+ f4 = f1*f1;
+ r4 = r4 >> 2;
+ r0 = r0 >> 2;
+ f3 = f3+f4;
+ f4 = f2*f2;
+ f3 = f3+f4;
+ f4 = heapFloat[(r4)];
+ f5 = heapFloat[(r0)];
+ f6 = 9.9999997473787516e-005;
+ if(f3 >=f6) //_LBB462_34
+{
+ heapFloat[(g0)] = f3;
+ f3 = 1;
+ sqrtf(i7);
+ f3 = f3/f_g0;
+ f0 = f0*f3;
+ f1 = f1*f3;
+ f2 = f2*f3;
+}
+else{
+ f0 = 1;
+ f1 = 0;
+ f2 = f1;
+}
+ r0 = sp + -64;
+ r4 = r0 >> 2;
+ heap32[(fp+-16)] = 0;
+ heap32[(r4+1)] = 0;
+ r0 = (r0 + r2)|0;
+ heap32[(r4+2)] = 0;
+ r0 = r0 >> 2;
+ heap32[(r4+3)] = 0;
+ heapFloat[(r0)] = f4;
+ f3 = heapFloat[(r1+4)];
+ f6 = heapFloat[(r1+3)];
+ f7 = heapFloat[(r1+5)];
+ f3 = f1*f3;
+ f6 = f0*f6;
+ f8 = heapFloat[(r1+11)];
+ f7 = f2*f7;
+ f3 = f3*f5;
+ f9 = heapFloat[(r4+1)];
+ f6 = f6*f5;
+ f10 = heapFloat[(fp+-16)];
+ f5 = f7*f5;
+ f7 = heapFloat[(r4+2)];
+ f11 = f1*f8;
+ f9 = f9+f3;
+ f12 = f0*f8;
+ f10 = f10+f6;
+ f9 = f9-f11;
+ f10 = f10-f12;
+ f8 = f2*f8;
+ f7 = f7+f5;
+ f7 = f7-f8;
+ f13 = f0*f10;
+ f14 = f1*f9;
+ f13 = f13+f14;
+ f14 = f2*f7;
+ f13 = f13+f14;
+ f14 = -999999984306749440;
+ if(f13 >f14) //_LBB462_37
+{
+ f14 = f13;
+}
+else{
+ f10 = 0;
+ f9 = f10;
+ f7 = f10;
+}
+ r0 = sp + -80;
+ r1 = r0 >> 2;
+ heap32[(fp+-20)] = 0;
+ heap32[(r1+1)] = 0;
+ r0 = (r0 + r2)|0;
+ heap32[(r1+2)] = 0;
+ r0 = r0 >> 2;
+ f4 = -f4;
+ heap32[(r1+3)] = 0;
+ heapFloat[(r0)] = f4;
+ f4 = heapFloat[(r1+1)];
+ f13 = heapFloat[(fp+-20)];
+ f15 = heapFloat[(r1+2)];
+ f3 = f4+f3;
+ f4 = f13+f6;
+ f4 = f4-f12;
+ f3 = f3-f11;
+ f5 = f15+f5;
+ f0 = f0*f4;
+ f1 = f1*f3;
+ f5 = f5-f8;
+ f0 = f0+f1;
+ f1 = f2*f5;
+ f0 = f0+f1;
+ r0 = r3 >> 2;
+ f1 = f0 > f14 ? f4 : f10;
+ f2 = f0 > f14 ? f3 : f9;
+ heapFloat[(r0)] = f1;
+ f0 = f0 > f14 ? f5 : f7;
+__label__ = 11;
+break _1;
+}
+else{
+ if(r2 ==13) //_LBB462_16
+{
+ r0 = sp + -16;
+ r2 = r0 >> 2;
+ heap32[(fp+-4)] = heap32[(r1+7)];
+ heap32[(r2+1)] = heap32[(r1+8)];
+ heap32[(r2+2)] = heap32[(r1+9)];
+ r4 = r4 >> 2;
+ heap32[(r2+3)] = heap32[(r1+10)];
+ r2 = sp + -32;
+ heap32[(fp+-8)] = heap32[(r4)];
+ f0 = heapFloat[(r4+1)];
+ r5 = r2 >> 2;
+ heapFloat[(r5+1)] = f0;
+ f1 = heapFloat[(r4+2)];
+ heapFloat[(r5+2)] = f1;
+ heap32[(r5+3)] = 0;
+ r1 = heap32[(r1+13)];
+ if(r1 ==2) //_LBB462_21
+{
+ r4 = 0;
+ r5 = 2;
+ r6 = 1;
+ f1 = f0;
+}
+else{
+ if(r1 ==1) //_LBB462_20
+{
+ r4 = 0;
+ r5 = 1;
+ r6 = 2;
+}
+else{
+ if(r1 !=0) //_LBB462_22
+{
+ r0 = _2E_str10;
+ r1 = _2E_str7250;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 175;
+ _assert(i7);
+}
+else{
+ r4 = 1;
+ r5 = 0;
+ r6 = 2;
+}
+}
+}
+ r1 = r1 << 2;
+ r4 = r4 << 2;
+ r7 = (r0 + r4)|0;
+ r0 = (r0 + r1)|0;
+ r1 = (r2 + r4)|0;
+ r7 = r7 >> 2;
+ r0 = r0 >> 2;
+ r1 = r1 >> 2;
+ f0 = heapFloat[(r1)];
+ f2 = heapFloat[(r7)];
+ f3 = heapFloat[(r0)];
+ f4 = f0*f0;
+ f5 = f1*f1;
+ f4 = f4+f5;
+ heapFloat[(g0)] = f4;
+ sqrtf(i7);
+ f4 = f_g0;
+ f5 = 0;
+ if(f4 ==f5) //_LBB462_28
+{
+ r0 = sp + -48;
+ r1 = (r0 + r4)|0;
+ r4 = r5 << 2;
+ r2 = (r2 + r4)|0;
+ r1 = r1 >> 2;
+ r2 = r2 >> 2;
+ heapFloat[(r1)] = f2;
+ f0 = heapFloat[(r2)];
+ if(f0 <f5) //_LBB462_30
+{
+ f3 = -f3;
+}
+ r1 = r6 << 2;
+ r4 = (r0 + r4)|0;
+ r1 = (r0 + r1)|0;
+ r4 = r4 >> 2;
+ r1 = r1 >> 2;
+ heapFloat[(r4)] = f3;
+ r3 = r3 >> 2;
+ heap32[(r1)] = 0;
+ r0 = r0 >> 2;
+ heap32[(r3)] = heap32[(fp+-12)];
+ heap32[(r3+1)] = heap32[(r0+1)];
+ heap32[(r3+2)] = heap32[(r0+2)];
+ heap32[(r3+3)] = 0;
+ return;
+}
+else{
+ r0 = sp + -48;
+ r4 = (r0 + r4)|0;
+ f2 = f2/f4;
+ r1 = r5 << 2;
+ r2 = (r2 + r1)|0;
+ r4 = r4 >> 2;
+ f0 = f0*f2;
+ r2 = r2 >> 2;
+ heapFloat[(r4)] = f0;
+ f0 = heapFloat[(r2)];
+ if(f0 <f5) //_LBB462_26
+{
+ f3 = -f3;
+}
+ r4 = r6 << 2;
+ r1 = (r0 + r1)|0;
+ r4 = (r0 + r4)|0;
+ r1 = r1 >> 2;
+ r4 = r4 >> 2;
+ f2 = f1*f2;
+ heapFloat[(r1)] = f3;
+ r1 = r3 >> 2;
+ heapFloat[(r4)] = f2;
+ r4 = r0 >> 2;
+ heap32[(r1)] = heap32[(fp+-12)];
+ heap32[(r1+1)] = heap32[(r4+1)];
+ heap32[(r1+2)] = heap32[(r4+2)];
+ heap32[(r1+3)] = 0;
+ return;
+}
+}
+else{
+__label__ = 40;
+break _1;
+}
+}
+}
+else{
+ if(r2 ==5) //_LBB462_39
+{
+ r0 = r4 >> 2;
+ f0 = heapFloat[(r1+5)];
+ r4 = heap32[(r1+22)];
+__label__ = 38;
+break _1;
+}
+else{
+ if(r2 ==8) //_LBB462_9
+{
+ r0 = r3 >> 2;
+ heap32[(r0)] = 0;
+ heap32[(r0+1)] = 0;
+ heap32[(r0+2)] = 0;
+ heap32[(r0+3)] = 0;
+ return;
+}
+else{
+__label__ = 40;
+break _1;
+}
+}
+}
+}
+else{
+ if(r2 ==0) //_LBB462_10
+{
+ r0 = r4 >> 2;
+ f0 = heapFloat[(r1+7)];
+ f1 = heapFloat[(r1+9)];
+ f2 = heapFloat[(r1+8)];
+ f3 = 0;
+ f4 = -f0;
+ f5 = heapFloat[(r0)];
+ f6 = heapFloat[(r0+2)];
+ f7 = heapFloat[(r0+1)];
+ f8 = -f2;
+ r0 = r3 >> 2;
+ f0 = f5 < f3 ? f4 : f0;
+ f4 = -f1;
+ f2 = f7 < f3 ? f8 : f2;
+ heapFloat[(r0)] = f0;
+ f0 = f6 < f3 ? f4 : f1;
+__label__ = 11;
+break _1;
+}
+else{
+ if(r2 ==1) //_LBB462_12
+{
+ r4 = r4 >> 2;
+ f0 = heapFloat[(r1+13)];
+ f1 = heapFloat[(r4)];
+ f2 = heapFloat[(r1+17)];
+ f3 = heapFloat[(r1+21)];
+ f4 = heapFloat[(r1+14)];
+ f5 = heapFloat[(r4+1)];
+ f6 = heapFloat[(r1+18)];
+ f7 = heapFloat[(r1+22)];
+ f0 = f1*f0;
+ f4 = f5*f4;
+ f8 = heapFloat[(r1+15)];
+ f9 = heapFloat[(r4+2)];
+ f10 = heapFloat[(r1+19)];
+ f11 = heapFloat[(r1+23)];
+ f2 = f1*f2;
+ f6 = f5*f6;
+ f1 = f1*f3;
+ f3 = f5*f7;
+ f0 = f0+f4;
+ f4 = f9*f8;
+ f2 = f2+f6;
+ f5 = f9*f10;
+ f1 = f1+f3;
+ f3 = f9*f11;
+ f0 = f0+f4;
+ f2 = f2+f5;
+ f1 = f1+f3;
+ if(f0 >=f2) //_LBB462_14
+{
+ r1 = 2;
+ r4 = 0;
+ r1 = f0 < f1 ? r1 : r4;
+}
+else{
+ r1 = 2;
+ r4 = 1;
+ r1 = f2 < f1 ? r1 : r4;
+}
+ r1 = r1 << 4;
+ r0 = (r0 + r1)|0;
+ r0 = r0 >> 2;
+ f0 = heapFloat[(r0+15)];
+ f1 = heapFloat[(r0+14)];
+ r1 = r3 >> 2;
+ heap32[(r1)] = heap32[(r0+13)];
+ heapFloat[(r1+1)] = f1;
+ heapFloat[(r1+2)] = f0;
+ heap32[(r1+3)] = 0;
+ return;
+}
+else{
+ if(r2 ==4) //_LBB462_41
+{
+ r0 = r4 >> 2;
+ f0 = heapFloat[(r1+5)];
+ r4 = heap32[(r1+25)];
+__label__ = 38;
+}
+else{
+__label__ = 40;
+}
+}
+}
+}
+} while(0);
+switch(__label__ ){//multiple entries
+case 11:
+ heapFloat[(r0+1)] = f2;
+ heapFloat[(r0+2)] = f0;
+ heap32[(r0+3)] = 0;
+ return;
+break;
+case 40:
+ r1 = heap32[(r1)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+16)];
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r0;
+ heap32[(g0+2)] = r4;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+ return;
+break;
+case 38:
+ r2 = heap32[(r1+23)];
+ f1 = heapFloat[(r0)];
+ f2 = heapFloat[(r0+1)];
+ f3 = heapFloat[(r0+2)];
+ f4 = heapFloat[(r1+3)];
+ f5 = heapFloat[(r1+4)];
+ heap32[(g0)] = r3;
+ heapFloat[(g0+1)] = f1;
+ heapFloat[(g0+2)] = f2;
+ heapFloat[(g0+3)] = f3;
+ heap32[(g0+4)] = r4;
+ heap32[(g0+5)] = r2;
+ heapFloat[(g0+6)] = f4;
+ heapFloat[(g0+7)] = f5;
+ heapFloat[(g0+8)] = f0;
+ _ZL17convexHullSupportRK9btVector3PS0_iS1_(i7);
+ return;
+break;
+}
+}
+
+function _ZNK13btConvexShape31localGetSupportVertexNonVirtualERK9btVector3(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+var __label__ = 0;
+ i7 = sp + -48;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+2)];
+ r0 = r0 >> 2;
+ f0 = heapFloat[(r0)];
+ r1 = sp + -32;
+ heapFloat[(fp+-8)] = f0;
+ f1 = heapFloat[(r0+1)];
+ r2 = r1 >> 2;
+ heapFloat[(r2+1)] = f1;
+ f2 = heapFloat[(r0+2)];
+ r3 = heap32[(fp)];
+ r4 = heap32[(fp+1)];
+ heapFloat[(r2+2)] = f2;
+ f3 = f0*f0;
+ f4 = f1*f1;
+ f3 = f3+f4;
+ f4 = f2*f2;
+ heap32[(r2+3)] = heap32[(r0+3)];
+ f3 = f3+f4;
+ f4 = 1.4210854715202004e-014;
+ if(f3 <f4) //_LBB463_2
+{
+ heap32[(fp+-8)] = -1082130432;
+ heap32[(r2+1)] = -1082130432;
+ f2 = -1;
+ heap32[(r2+2)] = -1082130432;
+ heap32[(r2+3)] = 0;
+ f1 = f2;
+ f0 = f2;
+}
+ f0 = f0*f0;
+ f1 = f1*f1;
+ f0 = f0+f1;
+ f1 = f2*f2;
+ f0 = f0+f1;
+ heapFloat[(g0)] = f0;
+ sqrtf(i7);
+ f1 = 1;
+ f0 = f1/f_g0;
+ f1 = heapFloat[(fp+-8)];
+ f1 = f1*f0;
+ heapFloat[(fp+-8)] = f1;
+ f2 = heapFloat[(r2+1)];
+ f2 = f2*f0;
+ heapFloat[(r2+1)] = f2;
+ f3 = heapFloat[(r2+2)];
+ f0 = f3*f0;
+ r0 = r4 >> 2;
+ heapFloat[(r2+2)] = f0;
+ r5 = heap32[(r0+1)];
+_4: do {
+ if(r5 >7) //_LBB463_7
+{
+ if(r5 ==13) //_LBB463_13
+{
+ f3 = heapFloat[(r0+11)];
+__label__ = 16;
+break _4;
+}
+else{
+ if(r5 ==10) //_LBB463_14
+{
+ f3 = heapFloat[(r0+11)];
+__label__ = 16;
+break _4;
+}
+else{
+ if(r5 !=8) //_LBB463_16
+{
+__label__ = 15;
+break _4;
+}
+else{
+ f3 = heapFloat[(r0+7)];
+ f4 = heapFloat[(r0+3)];
+ f3 = f3*f4;
+__label__ = 16;
+break _4;
+}
+}
+}
+}
+else{
+ if(r5 ==0) //_LBB463_11
+{
+ f3 = heapFloat[(r0+11)];
+__label__ = 16;
+break _4;
+}
+else{
+ if(r5 ==1) //_LBB463_12
+{
+ f3 = heapFloat[(r0+11)];
+__label__ = 16;
+}
+else{
+ r5 = (r5 + -4)|0;
+ if(uint(r5) <uint(2)) //_LBB463_15
+{
+ f3 = heapFloat[(r0+11)];
+__label__ = 16;
+}
+else{
+__label__ = 15;
+}
+}
+}
+}
+} while(0);
+if (__label__ == 15){
+ r0 = heap32[(r0)];
+ r0 = r0 >> 2;
+ r0 = heap32[(r0+11)];
+ heap32[(g0)] = r4;
+ __FUNCTION_TABLE__[(r0)>>2](i7);
+ f3 = f_g0;
+ f0 = heapFloat[(r2+2)];
+ f2 = heapFloat[(r2+1)];
+ f1 = heapFloat[(fp+-8)];
+}
+ r0 = sp + -16;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r4;
+ heap32[(g0+2)] = r1;
+ _ZNK13btConvexShape44localGetSupportVertexWithoutMarginNonVirtualERK9btVector3(i7);
+ r0 = r0 >> 2;
+ f1 = f1*f3;
+ f4 = heapFloat[(fp+-4)];
+ f5 = heapFloat[(r0+2)];
+ f6 = heapFloat[(r0+1)];
+ f2 = f2*f3;
+ r0 = r3 >> 2;
+ f1 = f4+f1;
+ f0 = f0*f3;
+ f2 = f6+f2;
+ heapFloat[(r0)] = f1;
+ f0 = f5+f0;
+ heapFloat[(r0+1)] = f2;
+ heapFloat[(r0+2)] = f0;
+ heap32[(r0+3)] = 0;
+ return;
+}
+
+function _ZZN14btOptimizedBvh5buildEP23btStridingMeshInterfacebRK9btVector3S4_EN20NodeTriangleCallbackD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV31btInternalTriangleIndexCallback;
+ r0 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r0)] = r1;
+ return;
+}
+
+function _ZZN14btOptimizedBvh5buildEP23btStridingMeshInterfacebRK9btVector3S4_EN20NodeTriangleCallbackD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV31btInternalTriangleIndexCallback;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZZN14btOptimizedBvh5buildEP23btStridingMeshInterfacebRK9btVector3S4_EN20NodeTriangleCallback28internalProcessTriangleIndexEPS2_ii(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+ var f10;
+ var f11;
+ var f12;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ r0 = r0 >> 2;
+ r1 = heap32[(fp)];
+ r1 = r1 >> 2;
+ f0 = 999999984306749440;
+ f1 = heapFloat[(r0)];
+ f2 = heapFloat[(r0+1)];
+ f3 = -999999984306749440;
+ f4 = heapFloat[(r0+2)];
+ f5 = heapFloat[(r0+3)];
+ f6 = 0;
+ r1 = heap32[(r1+1)];
+ f7 = f1 < f0 ? f1 : f0;
+ f8 = heapFloat[(r0+4)];
+ f1 = f1 > f3 ? f1 : f3;
+ f9 = f2 < f0 ? f2 : f0;
+ f10 = heapFloat[(r0+5)];
+ f2 = f2 > f3 ? f2 : f3;
+ f0 = f4 < f0 ? f4 : f0;
+ f11 = heapFloat[(r0+6)];
+ f3 = f4 > f3 ? f4 : f3;
+ f4 = f5 < f6 ? f5 : f6;
+ f12 = heapFloat[(r0+7)];
+ f5 = f5 > f6 ? f5 : f6;
+ r2 = r1 >> 2;
+ f6 = f8 < f7 ? f8 : f7;
+ f7 = heapFloat[(r0+8)];
+ f1 = f1 < f8 ? f8 : f1;
+ f8 = f10 < f9 ? f10 : f9;
+ f9 = heapFloat[(r0+9)];
+ f2 = f2 < f10 ? f10 : f2;
+ f0 = f11 < f0 ? f11 : f0;
+ f10 = heapFloat[(r0+10)];
+ f3 = f3 < f11 ? f11 : f3;
+ f4 = f12 < f4 ? f12 : f4;
+ f11 = heapFloat[(r0+11)];
+ f5 = f5 < f12 ? f12 : f5;
+ r0 = heap32[(r2+2)];
+ r3 = heap32[(r2+1)];
+ r4 = heap32[(fp+2)];
+ r5 = heap32[(fp+3)];
+ f6 = f7 < f6 ? f7 : f6;
+ f8 = f9 < f8 ? f9 : f8;
+ f0 = f10 < f0 ? f10 : f0;
+ f4 = f11 < f4 ? f11 : f4;
+ f1 = f1 < f7 ? f7 : f1;
+ f2 = f2 < f9 ? f9 : f2;
+ f3 = f3 < f10 ? f10 : f3;
+ f5 = f5 < f11 ? f11 : f5;
+ if(r0 ==r3) //_LBB466_2
+{
+ r6 = 1;
+ r7 = r3 << 1;
+ r7 = r3 == 0 ? r6 : r7;
+if(!(r0 >=r7)) //_LBB466_1
+{
+ if(r7 !=0) //_LBB466_5
+{
+ r0 = gNumAlignedAllocs;
+ r0 = r0 >> 2;
+ r8 = heap32[(r0)];
+ r8 = (r8 + 1)|0;
+ r9 = r7 << 6;
+ heap32[(r0)] = r8;
+ r0 = r9 | 19;
+ heap32[(g0)] = r0;
+ malloc(i7);
+ r0 = r_g0;
+ if(r0 !=0) //_LBB466_7
+{
+ r3 = 0;
+ r8 = (r0 + 4)|0;
+ r3 = (r3 - r8)|0;
+ r3 = r3 & 15;
+ r3 = (r0 + r3)|0;
+ r8 = r3 >> 2;
+ heap32[(r8)] = r0;
+ r0 = (r3 + 4)|0;
+ r3 = heap32[(r2+1)];
+}
+}
+else{
+ r0 = 0;
+}
+if(!(r3 <1)) //_LBB466_11
+{
+ r8 = 0;
+_11: while(true){
+ r9 = heap32[(r2+3)];
+ r10 = (r0 + r8)|0;
+ r9 = (r9 + r8)|0;
+ heap32[(g0)] = r10;
+ heap32[(g0+1)] = r9;
+ heap32[(g0+2)] = 64;
+ r3 = (r3 + -1)|0;
+ r8 = (r8 + 64)|0;
+ memcpy(i7);
+if(!(r3 !=0)) //_LBB466_10
+{
+break _11;
+}
+}
+}
+ r3 = heap32[(r2+3)];
+if(!(r3 ==0)) //_LBB466_15
+{
+ r8 = heapU8[r1+16];
+if(!(r8 ==0)) //_LBB466_14
+{
+ r8 = gNumAlignedFree;
+ r8 = r8 >> 2;
+ r9 = heap32[(r8)];
+ r9 = (r9 + 1)|0;
+ r3 = r3 >> 2;
+ heap32[(r8)] = r9;
+ r3 = heap32[(r3+-1)];
+ heap32[(g0)] = r3;
+ free(i7);
+}
+ heap32[(r2+3)] = 0;
+}
+ heap8[r1+16] = r6;
+ heap32[(r2+3)] = r0;
+ heap32[(r2+2)] = r7;
+ r3 = heap32[(r2+1)];
+}
+}
+ r0 = r3 << 6;
+ r1 = heap32[(r2+3)];
+ r0 = (r1 + r0)|0;
+ r0 = r0 >> 2;
+ heapFloat[(r0)] = f6;
+ heapFloat[(r0+1)] = f8;
+ heapFloat[(r0+2)] = f0;
+ heapFloat[(r0+3)] = f4;
+ heapFloat[(r0+4)] = f1;
+ heapFloat[(r0+5)] = f2;
+ heapFloat[(r0+6)] = f3;
+ heapFloat[(r0+7)] = f5;
+ heap32[(r0+8)] = -1;
+ heap32[(r0+9)] = r4;
+ heap32[(r0+10)] = r5;
+ r0 = heap32[(r2+1)];
+ r0 = (r0 + 1)|0;
+ heap32[(r2+1)] = r0;
+ return;
+}
+
+function _ZZN14btOptimizedBvh5buildEP23btStridingMeshInterfacebRK9btVector3S4_EN29QuantizedNodeTriangleCallbackD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV31btInternalTriangleIndexCallback;
+ r0 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r0)] = r1;
+ return;
+}
+
+function _ZZN14btOptimizedBvh5buildEP23btStridingMeshInterfacebRK9btVector3S4_EN29QuantizedNodeTriangleCallbackD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV31btInternalTriangleIndexCallback;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZZN14btOptimizedBvh5buildEP23btStridingMeshInterfacebRK9btVector3S4_EN29QuantizedNodeTriangleCallback28internalProcessTriangleIndexEPS2_ii(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+ var f10;
+ var f11;
+var __label__ = 0;
+ i7 = sp + -64;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+2)];
+ if(r0 <1024) //_LBB469_2
+{
+ r1 = heap32[(fp+3)];
+ if(r1 <2097152) //_LBB469_4
+{
+ if(r1 >-1) //_LBB469_6
+{
+ r2 = heap32[(fp)];
+ r3 = heap32[(fp+1)];
+ r4 = sp + -32;
+ r5 = r4 >> 2;
+ heap32[(fp+-8)] = 1566444395;
+ heap32[(r5+1)] = 1566444395;
+ heap32[(r5+2)] = 1566444395;
+ r6 = sp + -48;
+ heap32[(r5+3)] = 0;
+ r7 = r6 >> 2;
+ heap32[(fp+-12)] = -581039253;
+ heap32[(r7+1)] = -581039253;
+ heap32[(r7+2)] = -581039253;
+ r3 = r3 >> 2;
+ heap32[(r7+3)] = 0;
+ f0 = heapFloat[(r3)];
+ f1 = 999999984306749440;
+ if(f0 <f1) //_LBB469_8
+{
+ heapFloat[(fp+-8)] = f0;
+ f2 = f0;
+}
+else{
+ f2 = f1;
+}
+ f3 = heapFloat[(r3+1)];
+ if(f3 <f1) //_LBB469_11
+{
+ heapFloat[(r5+1)] = f3;
+ f1 = f3;
+}
+else{
+ f1 = 999999984306749440;
+}
+ f4 = heapFloat[(r3+2)];
+ f5 = 999999984306749440;
+ if(f4 <f5) //_LBB469_14
+{
+ heapFloat[(r5+2)] = f4;
+ f5 = f4;
+}
+ f6 = heapFloat[(r3+3)];
+ f7 = 0;
+ if(f6 <f7) //_LBB469_17
+{
+ heapFloat[(r5+3)] = f6;
+ f7 = f6;
+}
+ f8 = -999999984306749440;
+ if(f0 >f8) //_LBB469_20
+{
+ heapFloat[(fp+-12)] = f0;
+}
+else{
+ f0 = f8;
+}
+ if(f3 >f8) //_LBB469_23
+{
+ heapFloat[(r7+1)] = f3;
+}
+else{
+ f3 = -999999984306749440;
+}
+ f8 = -999999984306749440;
+ if(f4 >f8) //_LBB469_26
+{
+ heapFloat[(r7+2)] = f4;
+ f8 = f4;
+}
+ f4 = 0;
+ if(f6 >f4) //_LBB469_29
+{
+ heapFloat[(r7+3)] = f6;
+ f4 = f6;
+}
+ f6 = heapFloat[(r3+4)];
+ if(f6 <f2) //_LBB469_32
+{
+ heapFloat[(fp+-8)] = f6;
+ f2 = f6;
+}
+ f9 = heapFloat[(r3+5)];
+ if(f9 <f1) //_LBB469_35
+{
+ heapFloat[(r5+1)] = f9;
+ f1 = f9;
+}
+ f10 = heapFloat[(r3+6)];
+ if(f10 <f5) //_LBB469_38
+{
+ heapFloat[(r5+2)] = f10;
+ f5 = f10;
+}
+ f11 = heapFloat[(r3+7)];
+ if(f11 <f7) //_LBB469_41
+{
+ heapFloat[(r5+3)] = f11;
+ f7 = f11;
+}
+ if(f0 <f6) //_LBB469_44
+{
+ heapFloat[(fp+-12)] = f6;
+ f0 = f6;
+}
+ if(f3 <f9) //_LBB469_47
+{
+ heapFloat[(r7+1)] = f9;
+ f3 = f9;
+}
+ if(f8 <f10) //_LBB469_50
+{
+ heapFloat[(r7+2)] = f10;
+ f8 = f10;
+}
+ if(f4 <f11) //_LBB469_53
+{
+ heapFloat[(r7+3)] = f11;
+ f4 = f11;
+}
+ f6 = heapFloat[(r3+8)];
+ if(f6 <f2) //_LBB469_56
+{
+ heapFloat[(fp+-8)] = f6;
+ f2 = f6;
+}
+ f9 = heapFloat[(r3+9)];
+ if(f9 <f1) //_LBB469_59
+{
+ heapFloat[(r5+1)] = f9;
+ f1 = f9;
+}
+ f10 = heapFloat[(r3+10)];
+ if(f10 <f5) //_LBB469_62
+{
+ heapFloat[(r5+2)] = f10;
+ f5 = f10;
+}
+ f11 = heapFloat[(r3+11)];
+if(!(f11 >=f7)) //_LBB469_65
+{
+ heapFloat[(r5+3)] = f11;
+}
+ if(f0 <f6) //_LBB469_67
+{
+ heapFloat[(fp+-12)] = f6;
+ f0 = f6;
+}
+ if(f3 <f9) //_LBB469_70
+{
+ heapFloat[(r7+1)] = f9;
+ f3 = f9;
+}
+ if(f8 <f10) //_LBB469_73
+{
+ heapFloat[(r7+2)] = f10;
+ f8 = f10;
+}
+if(!(f4 >=f11)) //_LBB469_76
+{
+ heapFloat[(r7+3)] = f11;
+}
+ f4 = f0-f2;
+ f6 = 0.0020000000949949026;
+if(!(f4 >=f6)) //_LBB469_78
+{
+ f4 = 0.0010000000474974513;
+ f0 = f0+f4;
+ f4 = -0.0010000000474974513;
+ f2 = f2+f4;
+ heapFloat[(fp+-12)] = f0;
+ heapFloat[(fp+-8)] = f2;
+}
+ f0 = f3-f1;
+if(!(f0 >=f6)) //_LBB469_80
+{
+ f0 = 0.0010000000474974513;
+ f2 = -0.0010000000474974513;
+ f0 = f3+f0;
+ f1 = f1+f2;
+ heapFloat[(r7+1)] = f0;
+ heapFloat[(r5+1)] = f1;
+}
+ f0 = f8-f5;
+if(!(f0 >=f6)) //_LBB469_82
+{
+ f0 = 0.0010000000474974513;
+ f1 = -0.0010000000474974513;
+ f0 = f8+f0;
+ f1 = f5+f1;
+ heapFloat[(r7+2)] = f0;
+ heapFloat[(r5+2)] = f1;
+}
+ r2 = r2 >> 2;
+ r3 = heap32[(r2+2)];
+ r5 = sp + -16;
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r5;
+ heap32[(g0+2)] = r4;
+ heap32[(g0+3)] = 0;
+ _ZNK14btQuantizedBvh8quantizeEPtRK9btVector3i(i7);
+ r3 = heap32[(r2+2)];
+ r4 = (r5 + 6)|0;
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r4;
+ heap32[(g0+2)] = r6;
+ heap32[(g0+3)] = 1;
+ r0 = r0 << 21;
+ r0 = r0 | r1;
+ _ZNK14btQuantizedBvh8quantizeEPtRK9btVector3i(i7);
+ r1 = r5 >> 2;
+ heap32[(r1+3)] = r0;
+ r1 = heap32[(r2+1)];
+ r2 = r1 >> 2;
+ r3 = heap32[(r2+1)];
+ r4 = heap32[(r2+2)];
+ if(r4 ==r3) //_LBB469_84
+{
+ r4 = 1;
+ r5 = r3 << 1;
+ r3 = r3 == 0 ? r4 : r5;
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r3;
+ _ZN20btAlignedObjectArrayI18btQuantizedBvhNodeE7reserveEi(i7);
+ r3 = heap32[(r2+1)];
+}
+ r1 = heap32[(r2+3)];
+ r4 = heapU16[(sp+-16)>>1];
+ r3 = r3 << 4;
+ heap16[(r1+r3)>>1] = r4;
+ r1 = (r1 + r3)|0;
+ r3 = heapU16[(sp+-14)>>1];
+ heap16[(r1+2)>>1] = r3;
+ r3 = heapU16[(sp+-12)>>1];
+ heap16[(r1+4)>>1] = r3;
+ r3 = heapU16[(sp+-10)>>1];
+ heap16[(r1+6)>>1] = r3;
+ r3 = heapU16[(sp+-8)>>1];
+ heap16[(r1+8)>>1] = r3;
+ r3 = heapU16[(sp+-6)>>1];
+ r4 = r1 >> 2;
+ heap16[(r1+10)>>1] = r3;
+ heap32[(r4+3)] = r0;
+ r0 = heap32[(r2+1)];
+ r0 = (r0 + 1)|0;
+ heap32[(r2+1)] = r0;
+ return;
+}
+else{
+ r0 = _2E_str20316;
+ r1 = _2E_str10306;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 103;
+ _assert(i7);
+}
+}
+else{
+ r0 = _2E_str19315;
+ r1 = _2E_str10306;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 101;
+ _assert(i7);
+}
+}
+else{
+ r0 = _2E_str18314;
+ r1 = _2E_str10306;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 100;
+ _assert(i7);
+}
+}
+
+function _ZNK14btOptimizedBvh16serializeInPlaceEPvjb(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = heap32[(fp+1)];
+ r2 = heap32[(fp+2)];
+ r3 = heap32[(fp+3)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = r2;
+ heap32[(g0+3)] = r3;
+ _ZNK14btQuantizedBvh9serializeEPvjb(i7);
+ r0 = 1;
+ r_g0 = r0;
+ return;
+}
+
+function _ZN14btOptimizedBvhD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV14btOptimizedBvh;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ heap32[(g0)] = r0;
+ _ZN14btQuantizedBvhD2Ev(i7);
+if(!(r0 ==0)) //_LBB471_2
+{
+ r0 = gNumAlignedFree;
+ r0 = r0 >> 2;
+ r1 = heap32[(r0)];
+ r1 = (r1 + 1)|0;
+ heap32[(r0)] = r1;
+ r0 = heap32[(r2+-1)];
+ heap32[(g0)] = r0;
+ free(i7);
+}
+ return;
+}
+
+function _ZN14btOptimizedBvhD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV14btOptimizedBvh;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ heap32[(g0)] = r0;
+ _ZN14btQuantizedBvhD2Ev(i7);
+ return;
+}
+
+function _ZNK23btPolyhedralConvexShape21calculateLocalInertiaEfR9btVector3(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+var __label__ = 0;
+ i7 = sp + -112;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ r2 = heap32[(r1)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+11)];
+ heap32[(g0)] = r0;
+ r3 = sp + -64;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ f0 = f_g0;
+ r2 = r3 >> 2;
+ heap32[(fp+-16)] = 1065353216;
+ heap32[(r2+1)] = 0;
+ heap32[(r2+2)] = 0;
+ heap32[(r2+3)] = 0;
+ heap32[(r2+4)] = 0;
+ heap32[(r2+5)] = 1065353216;
+ heap32[(r2+6)] = 0;
+ heap32[(r2+7)] = 0;
+ heap32[(r2+8)] = 0;
+ heap32[(r2+9)] = 0;
+ heap32[(r2+10)] = 1065353216;
+ heap32[(r2+11)] = 0;
+ heap32[(r2+12)] = 0;
+ heap32[(r2+13)] = 0;
+ heap32[(r2+14)] = 0;
+ heap32[(r2+15)] = 0;
+ r1 = heap32[(r1)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+2)];
+ r2 = sp + -80;
+ r4 = sp + -96;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r3;
+ heap32[(g0+2)] = r2;
+ heap32[(g0+3)] = r4;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+ r0 = r4 >> 2;
+ r1 = r2 >> 2;
+ f1 = heapFloat[(r0+2)];
+ f2 = heapFloat[(r1+2)];
+ f3 = heapFloat[(r0+1)];
+ f4 = heapFloat[(r1+1)];
+ f3 = f3-f4;
+ f4 = 0.5;
+ f1 = f1-f2;
+ f2 = heapFloat[(fp+-24)];
+ f5 = heapFloat[(fp+-20)];
+ f2 = f2-f5;
+ f3 = f3*f4;
+ f1 = f1*f4;
+ f2 = f2*f4;
+ f3 = f3+f0;
+ f1 = f1+f0;
+ f0 = f2+f0;
+ f2 = f3+f3;
+ f1 = f1+f1;
+ f0 = f0+f0;
+ f2 = f2*f2;
+ f1 = f1*f1;
+ f3 = heapFloat[(fp+1)];
+ f4 = 0.083333328366279602;
+ f0 = f0*f0;
+ r0 = heap32[(fp+2)];
+ f5 = f2+f1;
+ f3 = f3*f4;
+ f1 = f0+f1;
+ r0 = r0 >> 2;
+ f4 = f5*f3;
+ f0 = f0+f2;
+ f1 = f1*f3;
+ heapFloat[(r0)] = f4;
+ f0 = f0*f3;
+ heapFloat[(r0+1)] = f1;
+ heapFloat[(r0+2)] = f0;
+ heap32[(r0+3)] = 0;
+ return;
+}
+
+function _ZNK34btPolyhedralConvexAabbCachingShape7getAabbERK11btTransformR9btVector3S4_(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var f0;
+var __label__ = 0;
+ i7 = sp + -24;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ r1 = heap32[(r1)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+11)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+ f0 = f_g0;
+ r1 = heapU8[r0+84];
+ if(r1 !=0) //_LBB474_2
+{
+ r1 = heap32[(fp+1)];
+ r2 = heap32[(fp+2)];
+ r3 = heap32[(fp+3)];
+ r4 = (r0 + 52)|0;
+ r0 = (r0 + 68)|0;
+ heap32[(g0)] = r4;
+ heap32[(g0+1)] = r0;
+ heapFloat[(g0+2)] = f0;
+ heap32[(g0+3)] = r1;
+ heap32[(g0+4)] = r2;
+ heap32[(g0+5)] = r3;
+ _Z15btTransformAabbRK9btVector3S1_fRK11btTransformRS_S5_(i7);
+ return;
+}
+else{
+ r0 = _2E_str6232;
+ r1 = _2E_str7331;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 86;
+ _assert(i7);
+}
+}
+
+function _ZN34btPolyhedralConvexAabbCachingShape15recalcLocalAabbEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var f0;
+ var f1;
+var __label__ = 0;
+ i7 = sp + -112;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = 1;
+ r2 = _ZGVZN34btPolyhedralConvexAabbCachingShape15recalcLocalAabbEvE11_directions;
+ heap8[r0+84] = r1;
+ r3 = heapU8[r2];
+if(!(r3 !=0)) //_LBB475_2
+{
+ r3 = _ZZN34btPolyhedralConvexAabbCachingShape15recalcLocalAabbEvE11_directions;
+ r3 = r3 >> 2;
+ heap32[(r3)] = 1065353216;
+ heap32[(r3+1)] = 0;
+ heap32[(r3+2)] = 0;
+ heap32[(r3+3)] = 0;
+ heap32[(r3+4)] = 0;
+ heap32[(r3+5)] = 1065353216;
+ heap32[(r3+6)] = 0;
+ heap32[(r3+7)] = 0;
+ heap32[(r3+8)] = 0;
+ heap32[(r3+9)] = 0;
+ heap32[(r3+10)] = 1065353216;
+ heap32[(r3+11)] = 0;
+ heap32[(r3+12)] = -1082130432;
+ heap32[(r3+13)] = 0;
+ heap32[(r3+14)] = 0;
+ heap32[(r3+15)] = 0;
+ heap32[(r3+16)] = 0;
+ heap32[(r3+17)] = -1082130432;
+ heap32[(r3+18)] = 0;
+ heap32[(r3+19)] = 0;
+ heap32[(r3+20)] = 0;
+ heap32[(r3+21)] = 0;
+ heap32[(r3+22)] = -1082130432;
+ heap32[(r3+23)] = 0;
+ heap8[r2] = r1;
+}
+ r1 = sp + -96;
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = 0;
+ heap32[(g0+2)] = 96;
+ r2 = r0 >> 2;
+ memset(i7);
+ r3 = heap32[(r2)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3+17)];
+ r4 = _ZZN34btPolyhedralConvexAabbCachingShape15recalcLocalAabbEvE11_directions;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r4;
+ heap32[(g0+2)] = r1;
+ heap32[(g0+3)] = 6;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ f0 = heapFloat[(fp+-24)];
+ f1 = heapFloat[(r2+11)];
+ f0 = f0+f1;
+ r0 = r1 >> 2;
+ heapFloat[(r2+17)] = f0;
+ f0 = heapFloat[(r0+12)];
+ f0 = f0-f1;
+ heapFloat[(r2+13)] = f0;
+ f0 = heapFloat[(r0+5)];
+ f0 = f0+f1;
+ heapFloat[(r2+18)] = f0;
+ f0 = heapFloat[(r0+17)];
+ f0 = f0-f1;
+ heapFloat[(r2+14)] = f0;
+ f0 = heapFloat[(r0+10)];
+ f0 = f0+f1;
+ heapFloat[(r2+19)] = f0;
+ f0 = heapFloat[(r0+22)];
+ f0 = f0-f1;
+ heapFloat[(r2+15)] = f0;
+ return;
+}
+
+function _ZNK13btSphereShape37localGetSupportingVertexWithoutMarginERK9btVector3(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ heap32[(r0)] = 0;
+ heap32[(r0+1)] = 0;
+ heap32[(r0+2)] = 0;
+ heap32[(r0+3)] = 0;
+ return;
+}
+
+function _ZNK13btSphereShape7getNameEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = _2E_str342;
+ r_g0 = r0;
+ return;
+}
+
+function _ZN13btSphereShape9setMarginEf(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ heap32[(r0+11)] = heap32[(fp+1)];
+ return;
+}
+
+function _ZNK13btSphereShape9getMarginEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var f0;
+ var f1;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ f0 = heapFloat[(r0+7)];
+ f1 = heapFloat[(r0+3)];
+ f0 = f0*f1;
+ f_g0 = f0;
+ return;
+}
+
+function _ZNK13btSphereShape49batchedUnitVectorGetSupportingVertexWithoutMarginEPK9btVector3PS0_i(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+3)];
+if(!(r0 <1)) //_LBB480_3
+{
+ r1 = heap32[(fp+2)];
+ r1 = (r1 + 8)|0;
+_3: while(true){
+ r2 = r1 >> 2;
+ heap32[(r2+-2)] = 0;
+ heap32[(r2+-1)] = 0;
+ r0 = (r0 + -1)|0;
+ r1 = (r1 + 16)|0;
+ heap32[(r2)] = 0;
+ heap32[(r2+1)] = 0;
+ if(r0 !=0) //_LBB480_2
+{
+continue _3;
+}
+else{
+break _3;
+}
+}
+}
+ return;
+}
+
+function _ZNK13btSphereShape7getAabbERK11btTransformR9btVector3S4_(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ r2 = heap32[(r1)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+11)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ f0 = f_g0;
+ r2 = heap32[(r1)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+11)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ f1 = f_g0;
+ r1 = heap32[(r1)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+11)];
+ r2 = heap32[(fp+1)];
+ heap32[(g0)] = r0;
+ r0 = r2 >> 2;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+ r1 = heap32[(fp+2)];
+ f3 = heapFloat[(r0+14)];
+ f4 = heapFloat[(r0+13)];
+ f5 = heapFloat[(r0+12)];
+ r1 = r1 >> 2;
+ f5 = f5-f_g0;
+ f4 = f4-f1;
+ heapFloat[(r1)] = f5;
+ f3 = f3-f0;
+ heapFloat[(r1+1)] = f4;
+ heapFloat[(r1+2)] = f3;
+ heap32[(r1+3)] = 0;
+ r1 = heap32[(fp+3)];
+ f3 = heapFloat[(r0+14)];
+ f4 = heapFloat[(r0+13)];
+ f5 = heapFloat[(r0+12)];
+ r0 = r1 >> 2;
+ f2 = f5+f_g0;
+ f1 = f4+f1;
+ heapFloat[(r0)] = f2;
+ f0 = f3+f0;
+ heapFloat[(r0+1)] = f1;
+ heapFloat[(r0+2)] = f0;
+ heap32[(r0+3)] = 0;
+ return;
+}
+
+function _ZNK13btSphereShape21calculateLocalInertiaEfR9btVector3(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var f0;
+ var f1;
+ var f2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ r2 = heap32[(r1)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+11)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ r1 = heap32[(r1)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+11)];
+ f1 = heapFloat[(fp+1)];
+ f2 = 0.40000000596046448;
+ f1 = f1*f2;
+ heap32[(g0)] = r0;
+ r0 = heap32[(fp+2)];
+ f0 = f1*f_g0;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+ r0 = r0 >> 2;
+ f0 = f0*f_g0;
+ heapFloat[(r0)] = f0;
+ heapFloat[(r0+1)] = f0;
+ heapFloat[(r0+2)] = f0;
+ heap32[(r0+3)] = 0;
+ return;
+}
+
+function _ZN13btSphereShapeD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV13btConvexShape;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+if(!(r0 ==0)) //_LBB483_2
+{
+ r0 = gNumAlignedFree;
+ r0 = r0 >> 2;
+ r1 = heap32[(r0)];
+ r1 = (r1 + 1)|0;
+ heap32[(r0)] = r1;
+ r0 = heap32[(r2+-1)];
+ heap32[(g0)] = r0;
+ free(i7);
+}
+ return;
+}
+
+function _ZN13btSphereShapeD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV13btConvexShape;
+ r0 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r0)] = r1;
+ return;
+}
+
+function _ZNK13btSphereShape24localGetSupportingVertexERK9btVector3(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+var __label__ = 0;
+ i7 = sp + -32;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ r1 = r0 >> 2;
+ r2 = heap32[(r1)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+16)];
+ r3 = heap32[(fp+2)];
+ r4 = sp + -16;
+ heap32[(g0)] = r4;
+ heap32[(g0+1)] = r0;
+ heap32[(g0+2)] = r3;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ r2 = r4 >> 2;
+ r4 = heap32[(fp)];
+ f0 = heapFloat[(fp+-4)];
+ f1 = heapFloat[(r2+1)];
+ f2 = heapFloat[(r2+2)];
+ r4 = r4 >> 2;
+ r3 = r3 >> 2;
+ heap32[(r4+3)] = heap32[(r2+3)];
+ f3 = heapFloat[(r3)];
+ f4 = heapFloat[(r3+1)];
+ f5 = heapFloat[(r3+2)];
+ f6 = f3*f3;
+ f7 = f4*f4;
+ f6 = f6+f7;
+ f7 = f5*f5;
+ f6 = f6+f7;
+ f7 = 1.4210854715202004e-014;
+ f8 = -1;
+ f3 = f6 < f7 ? f8 : f3;
+ f4 = f6 < f7 ? f8 : f4;
+ f5 = f6 < f7 ? f8 : f5;
+ f6 = f3*f3;
+ f7 = f4*f4;
+ f6 = f6+f7;
+ f7 = f5*f5;
+ f6 = f6+f7;
+ heapFloat[(g0)] = f6;
+ sqrtf(i7);
+ r1 = heap32[(r1)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+11)];
+ f7 = 1;
+ f6 = f7/f_g0;
+ heap32[(g0)] = r0;
+ f3 = f3*f6;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+ f4 = f4*f6;
+ f3 = f3*f_g0;
+ f5 = f5*f6;
+ f4 = f4*f_g0;
+ f0 = f0+f3;
+ f3 = f5*f_g0;
+ f1 = f1+f4;
+ heapFloat[(r4)] = f0;
+ f0 = f2+f3;
+ heapFloat[(r4+1)] = f1;
+ heapFloat[(r4+2)] = f0;
+ return;
+}
+
+function _ZNK23btStridingMeshInterface14hasPremadeAabbEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = 0;
+ r_g0 = r0;
+ return;
+}
+
+function _ZNK23btStridingMeshInterface14setPremadeAabbERK9btVector3S2_(sp)
+{
+ var i7;
+ var fp = sp>>2;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ return;
+}
+
+function _ZNK23btStridingMeshInterface14getPremadeAabbEP9btVector3S1_(sp)
+{
+ var i7;
+ var fp = sp>>2;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ return;
+}
+
+function _ZNK23btStridingMeshInterface28calculateSerializeBufferSizeEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = 28;
+ r_g0 = r0;
+ return;
+}
+
+function _ZNK23btStridingMeshInterface9serializeEPvP12btSerializer(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+ var r13;
+ var r14;
+ var r15;
+ var r16;
+ var r17;
+var __label__ = 0;
+ i7 = sp + -72;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ r2 = heap32[(r1)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+7)];
+ r3 = heap32[(fp+1)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ r2 = r_g0;
+ r3 = r3 >> 2;
+ heap32[(r3+5)] = r2;
+ heap32[(r3)] = 0;
+if(!(r2 ==0)) //_LBB490_32
+{
+ r4 = heap32[(fp+2)];
+ r5 = r4 >> 2;
+ r6 = heap32[(r5)];
+ r6 = r6 >> 2;
+ r6 = heap32[(r6+4)];
+ heap32[(g0)] = r4;
+ heap32[(g0+1)] = 28;
+ heap32[(g0+2)] = r2;
+ __FUNCTION_TABLE__[(r6)>>2](i7);
+ r2 = r_g0;
+ r6 = heap32[(r5)];
+ r6 = r6 >> 2;
+ r7 = r2 >> 2;
+ r7 = heap32[(r7+2)];
+ r6 = heap32[(r6+7)];
+ heap32[(g0)] = r4;
+ heap32[(g0+1)] = r7;
+ __FUNCTION_TABLE__[(r6)>>2](i7);
+ heap32[(r3)] = r_g0;
+ r6 = heap32[(r1)];
+ r6 = r6 >> 2;
+ r6 = heap32[(r6+7)];
+ heap32[(g0)] = r0;
+ r8 = 0;
+ __FUNCTION_TABLE__[(r6)>>2](i7);
+ r6 = r_g0;
+_3: while(true){
+ if(r8 <r6) //_LBB490_2
+{
+ r9 = heap32[(r1)];
+ r9 = r9 >> 2;
+ r9 = heap32[(r9+4)];
+ r10 = sp + -4;
+ r11 = sp + -28;
+ r12 = sp + -16;
+ r13 = sp + -24;
+ r14 = sp + -8;
+ r15 = sp + -12;
+ r16 = sp + -32;
+ r17 = sp + -20;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r10;
+ heap32[(g0+2)] = r11;
+ heap32[(g0+3)] = r12;
+ heap32[(g0+4)] = r13;
+ heap32[(g0+5)] = r14;
+ heap32[(g0+6)] = r15;
+ heap32[(g0+7)] = r16;
+ heap32[(g0+8)] = r17;
+ heap32[(g0+9)] = r8;
+ __FUNCTION_TABLE__[(r9)>>2](i7);
+ r9 = r7 >> 2;
+ r10 = heap32[(fp+-8)];
+ heap32[(r9+5)] = r10;
+ r10 = heap32[(fp+-7)];
+ heap32[(r9+6)] = r10;
+ heap32[(r9+4)] = 0;
+ heap32[(r9+2)] = 0;
+ heap32[(r9+3)] = 0;
+ heap32[(r9)] = 0;
+ heap32[(r9+1)] = 0;
+ r10 = heap32[(fp+-5)];
+ if(r10 ==3) //_LBB490_9
+{
+ r10 = heap32[(fp+-8)];
+if(!(r10 ==0)) //_LBB490_15
+{
+ r11 = heap32[(r5)];
+ r11 = r11 >> 2;
+ r11 = heap32[(r11+4)];
+ heap32[(g0)] = r4;
+ heap32[(g0+1)] = 8;
+ heap32[(g0+2)] = r10;
+ __FUNCTION_TABLE__[(r11)>>2](i7);
+ r10 = r_g0;
+ r11 = heap32[(r5)];
+ r11 = r11 >> 2;
+ r12 = r10 >> 2;
+ r12 = heap32[(r12+2)];
+ r11 = heap32[(r11+7)];
+ heap32[(g0)] = r4;
+ heap32[(g0+1)] = r12;
+ __FUNCTION_TABLE__[(r11)>>2](i7);
+ heap32[(r9+3)] = r_g0;
+ r11 = heap32[(fp+-8)];
+if(!(r11 <1)) //_LBB490_13
+{
+ r11 = 0;
+_11: while(true){
+ r13 = heap32[(fp+-3)];
+ r13 = (r13 * r11)|0;
+ r14 = heap32[(fp+-2)];
+ r15 = heapU16[(r14+r13)>>1];
+ r16 = r11 << 3;
+ r13 = (r14 + r13)|0;
+ heap16[(r12+r16)>>1] = r15;
+ r14 = (r12 + r16)|0;
+ r15 = heapU16[(r13+2)>>1];
+ heap16[(r14+2)>>1] = r15;
+ r13 = heapU16[(r13+4)>>1];
+ r11 = (r11 + 1)|0;
+ heap16[(r14+4)>>1] = r13;
+ r13 = heap32[(fp+-8)];
+if(!(r11 <r13)) //_LBB490_12
+{
+break _11;
+}
+}
+}
+ r11 = heap32[(r5)];
+ r11 = r11 >> 2;
+ r12 = r10 >> 2;
+ r11 = heap32[(r11+5)];
+ r12 = heap32[(r12+2)];
+ r13 = _2E_str1350;
+ heap32[(g0)] = r4;
+ heap32[(g0+1)] = r10;
+ heap32[(g0+2)] = r13;
+ heap32[(g0+3)] = 1497453121;
+ heap32[(g0+4)] = r12;
+ __FUNCTION_TABLE__[(r11)>>2](i7);
+}
+}
+else{
+ if(r10 !=2) //_LBB490_14
+{
+__label__ = 14;
+break _3;
+}
+else{
+ r10 = heap32[(fp+-8)];
+ r10 = (r10 * 3)|0;
+if(!(r10 ==0)) //_LBB490_15
+{
+ r11 = heap32[(r5)];
+ r11 = r11 >> 2;
+ r11 = heap32[(r11+4)];
+ heap32[(g0)] = r4;
+ heap32[(g0+1)] = 4;
+ heap32[(g0+2)] = r10;
+ __FUNCTION_TABLE__[(r11)>>2](i7);
+ r10 = r_g0;
+ r11 = heap32[(r5)];
+ r11 = r11 >> 2;
+ r12 = r10 >> 2;
+ r12 = heap32[(r12+2)];
+ r11 = heap32[(r11+7)];
+ heap32[(g0)] = r4;
+ heap32[(g0+1)] = r12;
+ __FUNCTION_TABLE__[(r11)>>2](i7);
+ heap32[(r9+2)] = r_g0;
+ r11 = heap32[(fp+-8)];
+_17: do {
+if(!(r11 <1)) //_LBB490_8
+{
+ r11 = 0;
+_19: while(true){
+ r13 = heap32[(fp+-3)];
+ r13 = (r13 * r11)|0;
+ r14 = heap32[(fp+-2)];
+ r15 = (r11 * 3)|0;
+ r13 = (r14 + r13)|0;
+ r13 = r13 >> 2;
+ r14 = r15 << 2;
+ r14 = (r12 + r14)|0;
+ r15 = heap32[(r13)];
+ r14 = r14 >> 2;
+ heap32[(r14)] = r15;
+ r15 = heap32[(r13+1)];
+ heap32[(r14+1)] = r15;
+ r13 = heap32[(r13+2)];
+ r11 = (r11 + 1)|0;
+ heap32[(r14+2)] = r13;
+ r13 = heap32[(fp+-8)];
+if(!(r11 <r13)) //_LBB490_7
+{
+break _17;
+}
+}
+}
+} while(0);
+ r11 = heap32[(r5)];
+ r11 = r11 >> 2;
+ r12 = r10 >> 2;
+ r11 = heap32[(r11+5)];
+ r12 = heap32[(r12+2)];
+ r13 = _2E_str349;
+ heap32[(g0)] = r4;
+ heap32[(g0+1)] = r10;
+ heap32[(g0+2)] = r13;
+ heap32[(g0+3)] = 1497453121;
+ heap32[(g0+4)] = r12;
+ __FUNCTION_TABLE__[(r11)>>2](i7);
+}
+}
+}
+ r10 = heap32[(fp+-4)];
+_23: do {
+ if(r10 ==1) //_LBB490_22
+{
+ r10 = heap32[(fp+-7)];
+ if(r10 ==0) //_LBB490_29
+{
+break _23;
+}
+else{
+ r11 = heap32[(r5)];
+ r11 = r11 >> 2;
+ r11 = heap32[(r11+4)];
+ heap32[(g0)] = r4;
+ heap32[(g0+1)] = 32;
+ heap32[(g0+2)] = r10;
+ __FUNCTION_TABLE__[(r11)>>2](i7);
+ r10 = r_g0;
+ r11 = heap32[(r5)];
+ r11 = r11 >> 2;
+ r12 = r10 >> 2;
+ r12 = heap32[(r12+2)];
+ r11 = heap32[(r11+7)];
+ heap32[(g0)] = r4;
+ heap32[(g0+1)] = r12;
+ __FUNCTION_TABLE__[(r11)>>2](i7);
+ heap32[(r9+1)] = r_g0;
+ r9 = heap32[(fp+-7)];
+_26: do {
+if(!(r9 <1)) //_LBB490_26
+{
+ r11 = heap32[(fp+-1)];
+ r13 = heap32[(fp+-6)];
+ r11 = (r11 + 16)|0;
+ r14 = 0;
+_28: while(true){
+ r15 = r14 << 5;
+ r15 = (r12 + r15)|0;
+ llvm_move_double(r15,r11+-16);
+ r14 = (r14 + 1)|0;
+ r16 = (r11 + r13)|0;
+ llvm_move_double(r15+8,r11+-8);
+ llvm_move_double(r15+16,r11);
+ r11 = r16;
+if(!(r14 <r9)) //_LBB490_25
+{
+break _26;
+}
+}
+}
+} while(0);
+ r9 = heap32[(r5)];
+ r9 = r9 >> 2;
+ r11 = r10 >> 2;
+ r9 = heap32[(r9+5)];
+ r11 = heap32[(r11+2)];
+ r12 = _2E_str5354;
+ heap32[(g0)] = r4;
+ heap32[(g0+1)] = r10;
+ heap32[(g0+2)] = r12;
+ heap32[(g0+3)] = 1497453121;
+ heap32[(g0+4)] = r11;
+ __FUNCTION_TABLE__[(r9)>>2](i7);
+}
+}
+else{
+ if(r10 !=0) //_LBB490_27
+{
+if(!(uint(r10) <uint(2))) //_LBB490_29
+{
+__label__ = 28;
+break _3;
+}
+}
+else{
+ r10 = heap32[(fp+-7)];
+if(!(r10 ==0)) //_LBB490_29
+{
+ r11 = heap32[(r5)];
+ r11 = r11 >> 2;
+ r11 = heap32[(r11+4)];
+ heap32[(g0)] = r4;
+ heap32[(g0+1)] = 16;
+ heap32[(g0+2)] = r10;
+ __FUNCTION_TABLE__[(r11)>>2](i7);
+ r10 = r_g0;
+ r11 = heap32[(r5)];
+ r11 = r11 >> 2;
+ r12 = r10 >> 2;
+ r12 = heap32[(r12+2)];
+ r11 = heap32[(r11+7)];
+ heap32[(g0)] = r4;
+ heap32[(g0+1)] = r12;
+ __FUNCTION_TABLE__[(r11)>>2](i7);
+ heap32[(r9)] = r_g0;
+ r9 = heap32[(fp+-7)];
+_36: do {
+if(!(r9 <1)) //_LBB490_21
+{
+ r9 = 0;
+_38: while(true){
+ r11 = heap32[(fp+-6)];
+ r13 = heap32[(fp+-1)];
+ r11 = (r11 * r9)|0;
+ r14 = r9 << 4;
+ r14 = (r12 + r14)|0;
+ r11 = (r13 + r11)|0;
+ r13 = r14 >> 2;
+ r11 = r11 >> 2;
+ heap32[(r13)] = heap32[(r11)];
+ r9 = (r9 + 1)|0;
+ heap32[(r13+1)] = heap32[(r11+1)];
+ heap32[(r13+2)] = heap32[(r11+2)];
+ r11 = heap32[(fp+-7)];
+if(!(r9 <r11)) //_LBB490_20
+{
+break _36;
+}
+}
+}
+} while(0);
+ r9 = heap32[(r5)];
+ r9 = r9 >> 2;
+ r11 = r10 >> 2;
+ r9 = heap32[(r9+5)];
+ r11 = heap32[(r11+2)];
+ r12 = _2E_str5223;
+ heap32[(g0)] = r4;
+ heap32[(g0+1)] = r10;
+ heap32[(g0+2)] = r12;
+ heap32[(g0+3)] = 1497453121;
+ heap32[(g0+4)] = r11;
+ __FUNCTION_TABLE__[(r9)>>2](i7);
+}
+}
+}
+} while(0);
+ r9 = heap32[(r1)];
+ r9 = r9 >> 2;
+ r9 = heap32[(r9+6)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r8;
+ r8 = (r8 + 1)|0;
+ r7 = (r7 + 28)|0;
+ __FUNCTION_TABLE__[(r9)>>2](i7);
+}
+else{
+__label__ = 31;
+break _3;
+}
+}
+switch(__label__ ){//multiple entries
+case 31:
+ r0 = heap32[(r5)];
+ r0 = r0 >> 2;
+ r5 = r2 >> 2;
+ r0 = heap32[(r0+5)];
+ r5 = heap32[(r5+2)];
+ r6 = _2E_str7356;
+ heap32[(g0)] = r4;
+ heap32[(g0+1)] = r2;
+ heap32[(g0+2)] = r6;
+ heap32[(g0+3)] = 1497453121;
+ heap32[(g0+4)] = r5;
+ __FUNCTION_TABLE__[(r0)>>2](i7);
+break;
+case 28:
+ r0 = _2E_str6355;
+ r1 = _2E_str3352;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 319;
+ _assert(i7);
+break;
+case 14:
+ r0 = _2E_str10;
+ r1 = _2E_str3352;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 271;
+ _assert(i7);
+break;
+}
+}
+ heap32[(r3+1)] = heap32[(r1+1)];
+ heap32[(r3+2)] = heap32[(r1+2)];
+ heap32[(r3+3)] = heap32[(r1+3)];
+ heap32[(r3+4)] = heap32[(r1+4)];
+ r0 = _2E_str8357;
+ r_g0 = r0;
+ return;
+}
+
+function _ZNK23btStridingMeshInterface27InternalProcessAllTrianglesEP31btInternalTriangleIndexCallbackRK9btVector3S4_(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+ var r13;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+var __label__ = 0;
+ i7 = sp + -120;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ r2 = heap32[(r1)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+7)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ r2 = r_g0;
+ r3 = heap32[(fp+1)];
+ f0 = heapFloat[(r1+1)];
+ f1 = heapFloat[(r1+2)];
+ f2 = heapFloat[(r1+3)];
+ r4 = 0;
+_1: while(true){
+ if(r4 <r2) //_LBB491_1
+{
+ r5 = heap32[(r1)];
+ r5 = r5 >> 2;
+ r5 = heap32[(r5+4)];
+ r6 = sp + -4;
+ r7 = sp + -28;
+ r8 = sp + -16;
+ r9 = sp + -24;
+ r10 = sp + -8;
+ r11 = sp + -12;
+ r12 = sp + -32;
+ r13 = sp + -20;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r6;
+ heap32[(g0+2)] = r7;
+ heap32[(g0+3)] = r8;
+ heap32[(g0+4)] = r9;
+ heap32[(g0+5)] = r10;
+ heap32[(g0+6)] = r11;
+ heap32[(g0+7)] = r12;
+ heap32[(g0+8)] = r13;
+ heap32[(g0+9)] = r4;
+ __FUNCTION_TABLE__[(r5)>>2](i7);
+ r5 = heap32[(fp+-4)];
+_4: do {
+ if(r5 ==1) //_LBB491_13
+{
+ r5 = heap32[(fp+-5)];
+ if(r5 ==3) //_LBB491_17
+{
+ r5 = heap32[(fp+-8)];
+ if(r5 <1) //_LBB491_25
+{
+break _4;
+}
+else{
+ r5 = 0;
+_9: while(true){
+ r6 = heap32[(fp+-3)];
+ r7 = heap32[(fp+-2)];
+ r6 = (r6 * r5)|0;
+ r8 = heapU16[(r7+r6)>>1];
+ r9 = heap32[(fp+-6)];
+ r10 = heap32[(fp+-1)];
+ r8 = (r8 * r9)|0;
+ r11 = (r10 + r8)|0;
+ f3 = llvm_readDouble((r10+r8));
+ f4 = llvm_readDouble((r11+16));
+ f5 = llvm_readDouble((r11+8));
+ f3 = f3; //fdtos f3, f3
+ r8 = sp + -80;
+ f5 = f5; //fdtos f5, f5
+ f3 = f3*f0;
+ r11 = r8 >> 2;
+ f4 = f4; //fdtos f4, f4
+ f5 = f5*f1;
+ heapFloat[(fp+-20)] = f3;
+ f3 = f4*f2;
+ heapFloat[(r11+1)] = f5;
+ heapFloat[(r11+2)] = f3;
+ r6 = (r7 + r6)|0;
+ heap32[(r11+3)] = 0;
+ r7 = heapU16[(r6+2)>>1];
+ r7 = (r7 * r9)|0;
+ r12 = (r10 + r7)|0;
+ f3 = llvm_readDouble((r10+r7));
+ f3 = f3; //fdtos f3, f3
+ f4 = llvm_readDouble((r12+16));
+ f5 = llvm_readDouble((r12+8));
+ f5 = f5; //fdtos f5, f5
+ f3 = f3*f0;
+ f4 = f4; //fdtos f4, f4
+ f5 = f5*f1;
+ heapFloat[(r11+4)] = f3;
+ f3 = f4*f2;
+ heapFloat[(r11+5)] = f5;
+ heapFloat[(r11+6)] = f3;
+ heap32[(r11+7)] = 0;
+ r6 = heapU16[(r6+4)>>1];
+ r6 = (r6 * r9)|0;
+ r7 = (r10 + r6)|0;
+ f3 = llvm_readDouble((r10+r6));
+ f3 = f3; //fdtos f3, f3
+ f4 = llvm_readDouble((r7+16));
+ f5 = llvm_readDouble((r7+8));
+ f5 = f5; //fdtos f5, f5
+ f3 = f3*f0;
+ f4 = f4; //fdtos f4, f4
+ f5 = f5*f1;
+ heapFloat[(r11+8)] = f3;
+ f3 = f4*f2;
+ heapFloat[(r11+9)] = f5;
+ heapFloat[(r11+10)] = f3;
+ r6 = r3 >> 2;
+ heap32[(r11+11)] = 0;
+ r6 = heap32[(r6)];
+ r6 = r6 >> 2;
+ r6 = heap32[(r6+2)];
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r8;
+ heap32[(g0+2)] = r4;
+ heap32[(g0+3)] = r5;
+ r5 = (r5 + 1)|0;
+ __FUNCTION_TABLE__[(r6)>>2](i7);
+ r6 = heap32[(fp+-8)];
+ if(r5 <r6) //_LBB491_20
+{
+continue _9;
+}
+else{
+break _4;
+}
+}
+}
+}
+else{
+ if(r5 !=2) //_LBB491_21
+{
+ r5 = (r5 + -2)|0;
+if(!(uint(r5) <uint(2))) //_LBB491_25
+{
+__label__ = 22;
+break _1;
+}
+}
+else{
+ r5 = heap32[(fp+-8)];
+ if(r5 <1) //_LBB491_25
+{
+break _4;
+}
+else{
+ r5 = 0;
+_16: while(true){
+ r6 = heap32[(fp+-3)];
+ r7 = heap32[(fp+-2)];
+ r6 = (r6 * r5)|0;
+ r6 = (r7 + r6)|0;
+ r6 = r6 >> 2;
+ r7 = heap32[(r6)];
+ r8 = heap32[(fp+-6)];
+ r9 = heap32[(fp+-1)];
+ r7 = (r8 * r7)|0;
+ r10 = (r9 + r7)|0;
+ f3 = llvm_readDouble((r9+r7));
+ f4 = llvm_readDouble((r10+16));
+ f5 = llvm_readDouble((r10+8));
+ f3 = f3; //fdtos f3, f3
+ r7 = sp + -80;
+ f5 = f5; //fdtos f5, f5
+ f3 = f3*f0;
+ r10 = r7 >> 2;
+ f4 = f4; //fdtos f4, f4
+ f5 = f5*f1;
+ heapFloat[(fp+-20)] = f3;
+ f3 = f4*f2;
+ heapFloat[(r10+1)] = f5;
+ heapFloat[(r10+2)] = f3;
+ heap32[(r10+3)] = 0;
+ r11 = heap32[(r6+1)];
+ r11 = (r8 * r11)|0;
+ r12 = (r9 + r11)|0;
+ f3 = llvm_readDouble((r9+r11));
+ f3 = f3; //fdtos f3, f3
+ f4 = llvm_readDouble((r12+16));
+ f5 = llvm_readDouble((r12+8));
+ f5 = f5; //fdtos f5, f5
+ f3 = f3*f0;
+ f4 = f4; //fdtos f4, f4
+ f5 = f5*f1;
+ heapFloat[(r10+4)] = f3;
+ f3 = f4*f2;
+ heapFloat[(r10+5)] = f5;
+ heapFloat[(r10+6)] = f3;
+ heap32[(r10+7)] = 0;
+ r6 = heap32[(r6+2)];
+ r6 = (r8 * r6)|0;
+ r8 = (r9 + r6)|0;
+ f3 = llvm_readDouble((r9+r6));
+ f3 = f3; //fdtos f3, f3
+ f4 = llvm_readDouble((r8+16));
+ f5 = llvm_readDouble((r8+8));
+ f5 = f5; //fdtos f5, f5
+ f3 = f3*f0;
+ f4 = f4; //fdtos f4, f4
+ f5 = f5*f1;
+ heapFloat[(r10+8)] = f3;
+ f3 = f4*f2;
+ heapFloat[(r10+9)] = f5;
+ heapFloat[(r10+10)] = f3;
+ r6 = r3 >> 2;
+ heap32[(r10+11)] = 0;
+ r6 = heap32[(r6)];
+ r6 = r6 >> 2;
+ r6 = heap32[(r6+2)];
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r7;
+ heap32[(g0+2)] = r4;
+ heap32[(g0+3)] = r5;
+ r5 = (r5 + 1)|0;
+ __FUNCTION_TABLE__[(r6)>>2](i7);
+ r6 = heap32[(fp+-8)];
+ if(r5 <r6) //_LBB491_19
+{
+continue _16;
+}
+else{
+break _4;
+}
+}
+}
+}
+}
+}
+else{
+ if(r5 !=0) //_LBB491_23
+{
+if(!(uint(r5) <uint(2))) //_LBB491_25
+{
+__label__ = 24;
+break _1;
+}
+}
+else{
+ r5 = heap32[(fp+-5)];
+ if(r5 ==3) //_LBB491_7
+{
+ r5 = heap32[(fp+-8)];
+ if(r5 <1) //_LBB491_25
+{
+break _4;
+}
+else{
+ r5 = 0;
+_25: while(true){
+ r6 = heap32[(fp+-3)];
+ r7 = heap32[(fp+-2)];
+ r6 = (r6 * r5)|0;
+ r8 = heapU16[(r7+r6)>>1];
+ r9 = heap32[(fp+-6)];
+ r10 = heap32[(fp+-1)];
+ r8 = (r8 * r9)|0;
+ r8 = (r10 + r8)|0;
+ r8 = r8 >> 2;
+ f3 = heapFloat[(r8)];
+ f4 = heapFloat[(r8+2)];
+ f5 = heapFloat[(r8+1)];
+ r8 = sp + -80;
+ f3 = f3*f0;
+ r11 = r8 >> 2;
+ f5 = f5*f1;
+ heapFloat[(fp+-20)] = f3;
+ f3 = f4*f2;
+ heapFloat[(r11+1)] = f5;
+ heapFloat[(r11+2)] = f3;
+ r6 = (r7 + r6)|0;
+ heap32[(r11+3)] = 0;
+ r7 = heapU16[(r6+2)>>1];
+ r7 = (r7 * r9)|0;
+ r7 = (r10 + r7)|0;
+ r7 = r7 >> 2;
+ f3 = heapFloat[(r7+2)];
+ f4 = heapFloat[(r7+1)];
+ f5 = heapFloat[(r7)];
+ f5 = f5*f0;
+ f4 = f4*f1;
+ heapFloat[(r11+4)] = f5;
+ f3 = f3*f2;
+ heapFloat[(r11+5)] = f4;
+ heapFloat[(r11+6)] = f3;
+ heap32[(r11+7)] = 0;
+ r6 = heapU16[(r6+4)>>1];
+ r6 = (r6 * r9)|0;
+ r6 = (r10 + r6)|0;
+ r6 = r6 >> 2;
+ f3 = heapFloat[(r6+2)];
+ f4 = heapFloat[(r6+1)];
+ f5 = heapFloat[(r6)];
+ f5 = f5*f0;
+ f4 = f4*f1;
+ heapFloat[(r11+8)] = f5;
+ f3 = f3*f2;
+ heapFloat[(r11+9)] = f4;
+ heapFloat[(r11+10)] = f3;
+ r6 = r3 >> 2;
+ heap32[(r11+11)] = 0;
+ r6 = heap32[(r6)];
+ r6 = r6 >> 2;
+ r6 = heap32[(r6+2)];
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r8;
+ heap32[(g0+2)] = r4;
+ heap32[(g0+3)] = r5;
+ r5 = (r5 + 1)|0;
+ __FUNCTION_TABLE__[(r6)>>2](i7);
+ r6 = heap32[(fp+-8)];
+ if(r5 <r6) //_LBB491_10
+{
+continue _25;
+}
+else{
+break _4;
+}
+}
+}
+}
+else{
+ if(r5 !=2) //_LBB491_11
+{
+ r5 = (r5 + -2)|0;
+if(!(uint(r5) <uint(2))) //_LBB491_25
+{
+__label__ = 12;
+break _1;
+}
+}
+else{
+ r5 = heap32[(fp+-8)];
+if(!(r5 <1)) //_LBB491_25
+{
+ r5 = 0;
+_32: while(true){
+ r6 = heap32[(fp+-3)];
+ r7 = heap32[(fp+-2)];
+ r6 = (r6 * r5)|0;
+ r6 = (r7 + r6)|0;
+ r6 = r6 >> 2;
+ r7 = heap32[(r6)];
+ r8 = heap32[(fp+-6)];
+ r9 = heap32[(fp+-1)];
+ r7 = (r8 * r7)|0;
+ r7 = (r9 + r7)|0;
+ r7 = r7 >> 2;
+ f3 = heapFloat[(r7)];
+ f4 = heapFloat[(r7+2)];
+ f5 = heapFloat[(r7+1)];
+ r7 = sp + -80;
+ f3 = f3*f0;
+ r10 = r7 >> 2;
+ f5 = f5*f1;
+ heapFloat[(fp+-20)] = f3;
+ f3 = f4*f2;
+ heapFloat[(r10+1)] = f5;
+ heapFloat[(r10+2)] = f3;
+ heap32[(r10+3)] = 0;
+ r11 = heap32[(r6+1)];
+ r11 = (r8 * r11)|0;
+ r11 = (r9 + r11)|0;
+ r11 = r11 >> 2;
+ f3 = heapFloat[(r11+2)];
+ f4 = heapFloat[(r11+1)];
+ f5 = heapFloat[(r11)];
+ f5 = f5*f0;
+ f4 = f4*f1;
+ heapFloat[(r10+4)] = f5;
+ f3 = f3*f2;
+ heapFloat[(r10+5)] = f4;
+ heapFloat[(r10+6)] = f3;
+ heap32[(r10+7)] = 0;
+ r6 = heap32[(r6+2)];
+ r6 = (r8 * r6)|0;
+ r6 = (r9 + r6)|0;
+ r6 = r6 >> 2;
+ f3 = heapFloat[(r6+2)];
+ f4 = heapFloat[(r6+1)];
+ f5 = heapFloat[(r6)];
+ f5 = f5*f0;
+ f4 = f4*f1;
+ heapFloat[(r10+8)] = f5;
+ f3 = f3*f2;
+ heapFloat[(r10+9)] = f4;
+ heapFloat[(r10+10)] = f3;
+ r6 = r3 >> 2;
+ heap32[(r10+11)] = 0;
+ r6 = heap32[(r6)];
+ r6 = r6 >> 2;
+ r6 = heap32[(r6+2)];
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r7;
+ heap32[(g0+2)] = r4;
+ heap32[(g0+3)] = r5;
+ r5 = (r5 + 1)|0;
+ __FUNCTION_TABLE__[(r6)>>2](i7);
+ r6 = heap32[(fp+-8)];
+if(!(r5 <r6)) //_LBB491_9
+{
+break _4;
+}
+}
+}
+}
+}
+}
+}
+} while(0);
+ r5 = heap32[(r1)];
+ r5 = r5 >> 2;
+ r5 = heap32[(r5+6)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r4;
+ r4 = (r4 + 1)|0;
+ __FUNCTION_TABLE__[(r5)>>2](i7);
+continue _1;
+}
+else{
+__label__ = 27;
+break _1;
+}
+}
+switch(__label__ ){//multiple entries
+case 27:
+ return;
+break;
+case 22:
+ r0 = _2E_str9358;
+ r1 = _2E_str3352;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 134;
+ _assert(i7);
+break;
+case 24:
+ r0 = _2E_str6355;
+ r1 = _2E_str3352;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 139;
+ _assert(i7);
+break;
+case 12:
+ r0 = _2E_str9358;
+ r1 = _2E_str3352;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 92;
+ _assert(i7);
+break;
+}
+}
+
+function _ZN23btStridingMeshInterfaceD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV23btStridingMeshInterface;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZN23btStridingMeshInterfaceD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV23btStridingMeshInterface;
+ r0 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r0)] = r1;
+ return;
+}
+
+function _ZN31btInternalTriangleIndexCallbackD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV31btInternalTriangleIndexCallback;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZN31btInternalTriangleIndexCallbackD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV31btInternalTriangleIndexCallback;
+ r0 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r0)] = r1;
+ return;
+}
+
+function _ZN18btTriangleCallbackD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV18btTriangleCallback;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZN18btTriangleCallbackD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV18btTriangleCallback;
+ r0 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r0)] = r1;
+ return;
+}
+
+function _ZN26btTriangleIndexVertexArray16unLockVertexBaseEi(sp)
+{
+ var i7;
+ var fp = sp>>2;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ return;
+}
+
+function _ZNK26btTriangleIndexVertexArray24unLockReadOnlyVertexBaseEi(sp)
+{
+ var i7;
+ var fp = sp>>2;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ return;
+}
+
+function _ZN26btTriangleIndexVertexArray19preallocateVerticesEi(sp)
+{
+ var i7;
+ var fp = sp>>2;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ return;
+}
+
+function _ZN26btTriangleIndexVertexArray18preallocateIndicesEi(sp)
+{
+ var i7;
+ var fp = sp>>2;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ return;
+}
+
+function _ZNK26btTriangleIndexVertexArray14hasPremadeAabbEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r0 = heap32[(r0+12)];
+ r1 = 1;
+ r0 = r0 == r1;
+ r0 = r0 & 1;
+ r_g0 = r0;
+ return;
+}
+
+function _ZNK26btTriangleIndexVertexArray14setPremadeAabbERK9btVector3S2_(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = heap32[(fp+1)];
+ r0 = r0 >> 2;
+ r1 = r1 >> 2;
+ heap32[(r0+13)] = heap32[(r1)];
+ heap32[(r0+14)] = heap32[(r1+1)];
+ r2 = heap32[(fp+2)];
+ heap32[(r0+15)] = heap32[(r1+2)];
+ r2 = r2 >> 2;
+ heap32[(r0+16)] = heap32[(r1+3)];
+ heap32[(r0+17)] = heap32[(r2)];
+ heap32[(r0+18)] = heap32[(r2+1)];
+ heap32[(r0+19)] = heap32[(r2+2)];
+ heap32[(r0+20)] = heap32[(r2+3)];
+ heap32[(r0+12)] = 1;
+ return;
+}
+
+function _ZNK26btTriangleIndexVertexArray14getPremadeAabbEP9btVector3S1_(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = heap32[(fp+1)];
+ r0 = r0 >> 2;
+ r1 = r1 >> 2;
+ heap32[(r1)] = heap32[(r0+13)];
+ heap32[(r1+1)] = heap32[(r0+14)];
+ r2 = heap32[(fp+2)];
+ heap32[(r1+2)] = heap32[(r0+15)];
+ r2 = r2 >> 2;
+ heap32[(r1+3)] = heap32[(r0+16)];
+ heap32[(r2)] = heap32[(r0+17)];
+ heap32[(r2+1)] = heap32[(r0+18)];
+ heap32[(r2+2)] = heap32[(r0+19)];
+ heap32[(r2+3)] = heap32[(r0+20)];
+ return;
+}
+
+function _ZNK26btTriangleIndexVertexArray14getNumSubPartsEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r0 = heap32[(r0+6)];
+ r_g0 = r0;
+ return;
+}
+
+function _ZNK26btTriangleIndexVertexArray32getLockedReadOnlyVertexIndexBaseEPPKhRiR14PHY_ScalarTypeS3_S2_S3_S3_S5_i(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = heap32[(fp+9)];
+ r0 = r0 >> 2;
+ r1 = r1 << 5;
+ r0 = heap32[(r0+8)];
+ r0 = (r0 + r1)|0;
+ r0 = r0 >> 2;
+ r1 = heap32[(fp+2)];
+ r2 = heap32[(r0+3)];
+ r1 = r1 >> 2;
+ r3 = heap32[(fp+1)];
+ heap32[(r1)] = r2;
+ r1 = r3 >> 2;
+ r2 = heap32[(r0+4)];
+ r3 = heap32[(fp+3)];
+ heap32[(r1)] = r2;
+ r1 = r3 >> 2;
+ r2 = heap32[(r0+7)];
+ r3 = heap32[(fp+4)];
+ heap32[(r1)] = r2;
+ r1 = r3 >> 2;
+ r2 = heap32[(r0+5)];
+ r3 = heap32[(fp+7)];
+ heap32[(r1)] = r2;
+ r1 = r3 >> 2;
+ r2 = heap32[(r0)];
+ r3 = heap32[(fp+5)];
+ heap32[(r1)] = r2;
+ r1 = r3 >> 2;
+ r2 = heap32[(r0+1)];
+ r3 = heap32[(fp+6)];
+ heap32[(r1)] = r2;
+ r1 = r3 >> 2;
+ r2 = heap32[(r0+2)];
+ r3 = heap32[(fp+8)];
+ heap32[(r1)] = r2;
+ r1 = r3 >> 2;
+ r0 = heap32[(r0+6)];
+ heap32[(r1)] = r0;
+ return;
+}
+
+function _ZN26btTriangleIndexVertexArray24getLockedVertexIndexBaseEPPhRiR14PHY_ScalarTypeS2_S1_S2_S2_S4_i(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ r2 = heap32[(r1)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+7)];
+ r3 = heap32[(fp+9)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ r0 = r_g0;
+ if(r0 >r3) //_LBB507_2
+{
+ r0 = heap32[(fp+1)];
+ r2 = heap32[(fp+2)];
+ r4 = heap32[(fp+3)];
+ r5 = heap32[(fp+4)];
+ r6 = heap32[(fp+5)];
+ r7 = heap32[(fp+6)];
+ r8 = heap32[(fp+7)];
+ r9 = heap32[(fp+8)];
+ r3 = r3 << 5;
+ r1 = heap32[(r1+8)];
+ r1 = (r1 + r3)|0;
+ r1 = r1 >> 2;
+ r3 = heap32[(r1+3)];
+ r2 = r2 >> 2;
+ heap32[(r2)] = r3;
+ r0 = r0 >> 2;
+ r2 = heap32[(r1+4)];
+ heap32[(r0)] = r2;
+ r0 = r4 >> 2;
+ r2 = heap32[(r1+7)];
+ heap32[(r0)] = r2;
+ r0 = r5 >> 2;
+ r2 = heap32[(r1+5)];
+ heap32[(r0)] = r2;
+ r0 = r8 >> 2;
+ r2 = heap32[(r1)];
+ heap32[(r0)] = r2;
+ r0 = r6 >> 2;
+ r2 = heap32[(r1+1)];
+ heap32[(r0)] = r2;
+ r0 = r7 >> 2;
+ r2 = heap32[(r1+2)];
+ heap32[(r0)] = r2;
+ r0 = r9 >> 2;
+ r1 = heap32[(r1+6)];
+ heap32[(r0)] = r1;
+ return;
+}
+else{
+ r1 = _2E_str367;
+ r3 = _2E_str1368;
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r3;
+ heap32[(g0+2)] = 41;
+ _assert(i7);
+}
+}
+
+function _ZN26btTriangleIndexVertexArrayD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV26btTriangleIndexVertexArray;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ r1 = heap32[(r2+8)];
+if(!(r1 ==0)) //_LBB508_4
+{
+ r3 = heapU8[r0+36];
+if(!(r3 ==0)) //_LBB508_3
+{
+ r3 = gNumAlignedFree;
+ r3 = r3 >> 2;
+ r4 = heap32[(r3)];
+ r4 = (r4 + 1)|0;
+ r1 = r1 >> 2;
+ heap32[(r3)] = r4;
+ r1 = heap32[(r1+-1)];
+ heap32[(g0)] = r1;
+ free(i7);
+}
+ heap32[(r2+8)] = 0;
+}
+ r1 = 1;
+ heap8[r0+36] = r1;
+ heap32[(r2+8)] = 0;
+ r1 = _ZTV23btStridingMeshInterface;
+ heap32[(r2+6)] = 0;
+ r1 = (r1 + 8)|0;
+ heap32[(r2+7)] = 0;
+ heap32[(r2)] = r1;
+if(!(r0 ==0)) //_LBB508_6
+{
+ r0 = gNumAlignedFree;
+ r0 = r0 >> 2;
+ r1 = heap32[(r0)];
+ r1 = (r1 + 1)|0;
+ heap32[(r0)] = r1;
+ r0 = heap32[(r2+-1)];
+ heap32[(g0)] = r0;
+ free(i7);
+}
+ return;
+}
+
+function _ZN26btTriangleIndexVertexArrayD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV26btTriangleIndexVertexArray;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ r1 = heap32[(r2+8)];
+if(!(r1 ==0)) //_LBB509_4
+{
+ r3 = heapU8[r0+36];
+if(!(r3 ==0)) //_LBB509_3
+{
+ r3 = gNumAlignedFree;
+ r3 = r3 >> 2;
+ r4 = heap32[(r3)];
+ r4 = (r4 + 1)|0;
+ r1 = r1 >> 2;
+ heap32[(r3)] = r4;
+ r1 = heap32[(r1+-1)];
+ heap32[(g0)] = r1;
+ free(i7);
+}
+ heap32[(r2+8)] = 0;
+}
+ r1 = 1;
+ heap8[r0+36] = r1;
+ heap32[(r2+8)] = 0;
+ r0 = _ZTV23btStridingMeshInterface;
+ heap32[(r2+6)] = 0;
+ r0 = (r0 + 8)|0;
+ heap32[(r2+7)] = 0;
+ heap32[(r2)] = r0;
+ return;
+}
+
+function _ZNK19btTriangleMeshShape7getNameEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = _2E_str372;
+ r_g0 = r0;
+ return;
+}
+
+function _ZNK19btTriangleMeshShape7getAabbERK11btTransformR9btVector3S4_(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+ var f10;
+ var f11;
+ var f12;
+ var f13;
+ var f14;
+ var f15;
+ var f16;
+ var f17;
+ var f18;
+ var f19;
+ var f20;
+ var f21;
+ var f22;
+ var f23;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ r2 = heap32[(r1)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+11)];
+ f0 = heapFloat[(r1+10)];
+ f1 = heapFloat[(r1+6)];
+ f2 = heapFloat[(r1+9)];
+ f3 = heapFloat[(r1+5)];
+ f4 = heapFloat[(r1+8)];
+ f5 = heapFloat[(r1+4)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ f6 = f_g0;
+ r2 = heap32[(r1)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+11)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ f7 = f_g0;
+ r2 = heap32[(r1)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+11)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ r0 = heap32[(fp+1)];
+ f4 = f4-f5;
+ f5 = 0.5;
+ f2 = f2-f3;
+ f0 = f0-f1;
+ f1 = heapFloat[(r1+10)];
+ f3 = heapFloat[(r1+6)];
+ f9 = heapFloat[(r1+9)];
+ f10 = heapFloat[(r1+5)];
+ f11 = heapFloat[(r1+8)];
+ f12 = heapFloat[(r1+4)];
+ r0 = r0 >> 2;
+ f4 = f4*f5;
+ f2 = f2*f5;
+ f0 = f0*f5;
+ f1 = f1+f3;
+ f3 = f9+f10;
+ f9 = f11+f12;
+ f10 = heapFloat[(r0+10)];
+ r1 = heap32[(fp+2)];
+ r2 = heap32[(fp+3)];
+ f4 = f4+f_g0;
+ f2 = f2+f7;
+ f0 = f0+f6;
+ f1 = f1*f5;
+ f3 = f3*f5;
+ f5 = f9*f5;
+ f6 = 0;
+ if(f10 <f6) //_LBB511_2
+{
+ f7 = -f10;
+}
+else{
+ f7 = f10;
+}
+ f8 = heapFloat[(r0+9)];
+ if(f8 <f6) //_LBB511_5
+{
+ f9 = -f8;
+}
+else{
+ f9 = f8;
+}
+ f11 = heapFloat[(r0+8)];
+ if(f11 <f6) //_LBB511_8
+{
+ f12 = -f11;
+}
+else{
+ f12 = f11;
+}
+ f13 = heapFloat[(r0+6)];
+ if(f13 <f6) //_LBB511_11
+{
+ f14 = -f13;
+}
+else{
+ f14 = f13;
+}
+ f15 = heapFloat[(r0+5)];
+ if(f15 <f6) //_LBB511_14
+{
+ f16 = -f15;
+}
+else{
+ f16 = f15;
+}
+ f17 = heapFloat[(r0+4)];
+ if(f17 <f6) //_LBB511_17
+{
+ f18 = -f17;
+}
+else{
+ f18 = f17;
+}
+ f19 = heapFloat[(r0+2)];
+ if(f19 <f6) //_LBB511_20
+{
+ f20 = -f19;
+}
+else{
+ f20 = f19;
+}
+ f21 = heapFloat[(r0+1)];
+ if(f21 <f6) //_LBB511_23
+{
+ f22 = -f21;
+}
+else{
+ f22 = f21;
+}
+ f23 = heapFloat[(r0)];
+ if(f23 <f6) //_LBB511_26
+{
+ f6 = -f23;
+}
+else{
+ f6 = f23;
+}
+ f23 = f23*f5;
+ f21 = f21*f3;
+ f17 = f17*f5;
+ f15 = f15*f3;
+ f21 = f23+f21;
+ f19 = f19*f1;
+ f6 = f6*f4;
+ f22 = f22*f2;
+ f5 = f11*f5;
+ f3 = f8*f3;
+ f8 = f17+f15;
+ f11 = f13*f1;
+ f13 = f18*f4;
+ f15 = f16*f2;
+ f16 = f21+f19;
+ f17 = heapFloat[(r0+12)];
+ f6 = f6+f22;
+ f18 = f20*f0;
+ f3 = f5+f3;
+ f1 = f10*f1;
+ f4 = f12*f4;
+ f2 = f9*f2;
+ f5 = f8+f11;
+ f8 = heapFloat[(r0+13)];
+ f9 = heapFloat[(r0+14)];
+ f10 = f13+f15;
+ f11 = f14*f0;
+ f12 = f16+f17;
+ f6 = f6+f18;
+ f1 = f3+f1;
+ r0 = r1 >> 2;
+ f2 = f4+f2;
+ f0 = f7*f0;
+ f3 = f5+f8;
+ f4 = f10+f11;
+ f5 = f12-f6;
+ f1 = f1+f9;
+ f0 = f2+f0;
+ f2 = f3-f4;
+ heapFloat[(r0)] = f5;
+ f5 = f1-f0;
+ heapFloat[(r0+1)] = f2;
+ heapFloat[(r0+2)] = f5;
+ r1 = r2 >> 2;
+ f2 = f12+f6;
+ heap32[(r0+3)] = 0;
+ f3 = f3+f4;
+ heapFloat[(r1)] = f2;
+ f0 = f1+f0;
+ heapFloat[(r1+1)] = f3;
+ heapFloat[(r1+2)] = f0;
+ heap32[(r1+3)] = 0;
+ return;
+}
+
+function _ZN19btTriangleMeshShape15recalcLocalAabbEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var f0;
+ var f1;
+var __label__ = 0;
+ i7 = sp + -64;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = 0;
+_1: while(true){
+ r2 = sp + -16;
+ r3 = r2 >> 2;
+ heap32[(fp+-4)] = 0;
+ heap32[(r3+1)] = 0;
+ heap32[(r3+2)] = 0;
+ r4 = (r2 + r1)|0;
+ heap32[(r3+3)] = 0;
+ r3 = r4 >> 2;
+ heap32[(r3)] = 1065353216;
+ r4 = r0 >> 2;
+ r5 = heap32[(r4)];
+ r5 = r5 >> 2;
+ r5 = heap32[(r5+16)];
+ r6 = sp + -32;
+ heap32[(g0)] = r6;
+ heap32[(g0+1)] = r0;
+ heap32[(g0+2)] = r2;
+ r7 = (r6 + r1)|0;
+ __FUNCTION_TABLE__[(r5)>>2](i7);
+ r5 = r7 >> 2;
+ r7 = (r0 + r1)|0;
+ f0 = heapFloat[(r5)];
+ f1 = heapFloat[(r4+3)];
+ f0 = f0+f1;
+ r7 = r7 >> 2;
+ heapFloat[(r7+8)] = f0;
+ heap32[(r3)] = -1082130432;
+ r3 = heap32[(r4)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3+16)];
+ r8 = sp + -48;
+ heap32[(g0)] = r8;
+ heap32[(g0+1)] = r0;
+ heap32[(g0+2)] = r2;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ r2 = r6 >> 2;
+ r3 = r8 >> 2;
+ heap32[(fp+-8)] = heap32[(fp+-12)];
+ heap32[(r2+1)] = heap32[(r3+1)];
+ heap32[(r2+2)] = heap32[(r3+2)];
+ heap32[(r2+3)] = heap32[(r3+3)];
+ f0 = heapFloat[(r5)];
+ f1 = heapFloat[(r4+3)];
+ r1 = (r1 + 4)|0;
+ f0 = f0-f1;
+ heapFloat[(r7+4)] = f0;
+ if(r1 !=12) //_LBB512_1
+{
+continue _1;
+}
+else{
+break _1;
+}
+}
+ return;
+}
+
+function _ZN21SupportVertexCallbackD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV18btTriangleCallback;
+ r0 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r0)] = r1;
+ return;
+}
+
+function _ZN21SupportVertexCallbackD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV18btTriangleCallback;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZN21SupportVertexCallback15processTriangleEP9btVector3ii(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ r1 = heap32[(fp)];
+ r1 = r1 >> 2;
+ r0 = r0 >> 2;
+ f0 = heapFloat[(r1+22)];
+ f1 = heapFloat[(r0)];
+ f2 = heapFloat[(r1+23)];
+ f3 = heapFloat[(r0+1)];
+ f4 = heapFloat[(r1+24)];
+ f5 = heapFloat[(r0+2)];
+ f1 = f0*f1;
+ f3 = f2*f3;
+ f1 = f1+f3;
+ f3 = f4*f5;
+ f5 = heapFloat[(r1+21)];
+ f1 = f1+f3;
+ if(f5 <f1) //_LBB515_2
+{
+ heapFloat[(r1+21)] = f1;
+ heap32[(r1+1)] = heap32[(r0)];
+ heap32[(r1+2)] = heap32[(r0+1)];
+ heap32[(r1+3)] = heap32[(r0+2)];
+ heap32[(r1+4)] = heap32[(r0+3)];
+ f5 = f1;
+}
+ f1 = heapFloat[(r0+4)];
+ f3 = heapFloat[(r0+5)];
+ f1 = f0*f1;
+ f3 = f2*f3;
+ f6 = heapFloat[(r0+6)];
+ f1 = f1+f3;
+ f3 = f4*f6;
+ f1 = f1+f3;
+ if(f5 <f1) //_LBB515_7
+{
+ heapFloat[(r1+21)] = f1;
+ heap32[(r1+1)] = heap32[(r0+4)];
+ heap32[(r1+2)] = heap32[(r0+5)];
+ heap32[(r1+3)] = heap32[(r0+6)];
+ heap32[(r1+4)] = heap32[(r0+7)];
+ f5 = f1;
+}
+ f1 = heapFloat[(r0+8)];
+ f3 = heapFloat[(r0+9)];
+ f0 = f0*f1;
+ f1 = f2*f3;
+ f2 = heapFloat[(r0+10)];
+ f0 = f0+f1;
+ f1 = f4*f2;
+ f0 = f0+f1;
+ if(f5 <f0) //_LBB515_8
+{
+ heapFloat[(r1+21)] = f0;
+ heap32[(r1+1)] = heap32[(r0+8)];
+ heap32[(r1+2)] = heap32[(r0+9)];
+ heap32[(r1+3)] = heap32[(r0+10)];
+ heap32[(r1+4)] = heap32[(r0+11)];
+ return;
+}
+else{
+ return;
+}
+}
+
+function _ZN19btTriangleMeshShape15setLocalScalingERK9btVector3(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ r2 = heap32[(fp+1)];
+ r1 = heap32[(r1+12)];
+ r1 = r1 >> 2;
+ r2 = r2 >> 2;
+ heap32[(r1+1)] = heap32[(r2)];
+ heap32[(r1+2)] = heap32[(r2+1)];
+ heap32[(r1+3)] = heap32[(r2+2)];
+ heap32[(r1+4)] = heap32[(r2+3)];
+ heap32[(g0)] = r0;
+ _ZN19btTriangleMeshShape15recalcLocalAabbEv(i7);
+ return;
+}
+
+function _ZNK19btTriangleMeshShape15getLocalScalingEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r0 = heap32[(r0+12)];
+ r0 = (r0 + 4)|0;
+ r_g0 = r0;
+ return;
+}
+
+function _ZZNK19btTriangleMeshShape19processAllTrianglesEP18btTriangleCallbackRK9btVector3S4_EN16FilteredCallbackD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV31btInternalTriangleIndexCallback;
+ r0 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r0)] = r1;
+ return;
+}
+
+function _ZZNK19btTriangleMeshShape19processAllTrianglesEP18btTriangleCallbackRK9btVector3S4_EN16FilteredCallbackD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV31btInternalTriangleIndexCallback;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZZNK19btTriangleMeshShape19processAllTrianglesEP18btTriangleCallbackRK9btVector3S4_EN16FilteredCallback28internalProcessTriangleIndexEPS2_ii(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ r1 = r0 >> 2;
+ r2 = heap32[(fp)];
+ f0 = heapFloat[(r1)];
+ f1 = heapFloat[(r1+4)];
+ f2 = heapFloat[(r1+8)];
+ f3 = f0 < f1 ? f0 : f1;
+ r2 = r2 >> 2;
+ f3 = f3 < f2 ? f3 : f2;
+ f4 = heapFloat[(r2+6)];
+if(!(f3 >f4)) //_LBB520_7
+{
+ f0 = f0 > f1 ? f0 : f1;
+ f0 = f0 > f2 ? f0 : f2;
+ f1 = heapFloat[(r2+2)];
+if(!(f0 <f1)) //_LBB520_7
+{
+ f0 = heapFloat[(r1+2)];
+ f1 = heapFloat[(r1+6)];
+ f2 = heapFloat[(r1+10)];
+ f3 = f0 < f1 ? f0 : f1;
+ f3 = f3 < f2 ? f3 : f2;
+ f4 = heapFloat[(r2+8)];
+if(!(f3 >f4)) //_LBB520_7
+{
+ f0 = f0 > f1 ? f0 : f1;
+ f0 = f0 > f2 ? f0 : f2;
+ f1 = heapFloat[(r2+4)];
+if(!(f0 <f1)) //_LBB520_7
+{
+ f0 = heapFloat[(r1+1)];
+ f1 = heapFloat[(r1+5)];
+ f2 = heapFloat[(r1+9)];
+ f3 = f0 < f1 ? f0 : f1;
+ f3 = f3 < f2 ? f3 : f2;
+ f4 = heapFloat[(r2+7)];
+if(!(f3 >f4)) //_LBB520_7
+{
+ f0 = f0 > f1 ? f0 : f1;
+ f0 = f0 > f2 ? f0 : f2;
+ f1 = heapFloat[(r2+3)];
+if(!(f0 <f1)) //_LBB520_7
+{
+ r1 = heap32[(fp+2)];
+ r3 = heap32[(fp+3)];
+ r2 = heap32[(r2+1)];
+ r4 = r2 >> 2;
+ r4 = heap32[(r4)];
+ r4 = r4 >> 2;
+ r4 = heap32[(r4+2)];
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = r0;
+ heap32[(g0+2)] = r1;
+ heap32[(g0+3)] = r3;
+ __FUNCTION_TABLE__[(r4)>>2](i7);
+}
+}
+}
+}
+}
+}
+ return;
+}
+
+function _ZNK19btTriangleMeshShape21calculateLocalInertiaEfR9btVector3(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = _2E_str10;
+ r1 = _2E_str3375;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 188;
+ _assert(i7);
+}
+
+function _ZNK19btTriangleMeshShape24localGetSupportingVertexERK9btVector3(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+var __label__ = 0;
+ i7 = sp + -152;var g0 = i7>>2; // save stack
+ r0 = _ZTV21SupportVertexCallback;
+ r1 = sp + -120;
+ r0 = (r0 + 8)|0;
+ r2 = r1 >> 2;
+ heap32[(fp+-30)] = r0;
+ heap32[(r2+1)] = 0;
+ heap32[(r2+2)] = 0;
+ heap32[(r2+3)] = 0;
+ heap32[(r2+4)] = 0;
+ heap32[(r2+5)] = 1065353216;
+ heap32[(r2+6)] = 0;
+ heap32[(r2+7)] = 0;
+ heap32[(r2+8)] = 0;
+ heap32[(r2+9)] = 0;
+ heap32[(r2+10)] = 1065353216;
+ heap32[(r2+11)] = 0;
+ heap32[(r2+12)] = 0;
+ heap32[(r2+13)] = 0;
+ heap32[(r2+14)] = 0;
+ heap32[(r2+15)] = 1065353216;
+ heap32[(r2+16)] = 0;
+ heap32[(r2+17)] = 0;
+ heap32[(r2+18)] = 0;
+ heap32[(r2+19)] = 0;
+ r0 = heap32[(fp+2)];
+ heap32[(r2+20)] = 0;
+ r0 = r0 >> 2;
+ heap32[(r2+21)] = -581039253;
+ f0 = 0;
+ f1 = heapFloat[(r0+1)];
+ f2 = heapFloat[(r0)];
+ f3 = heapFloat[(r0+2)];
+ f4 = f1*f0;
+ f5 = f2*f0;
+ f2 = f2+f4;
+ f0 = f3*f0;
+ f1 = f5+f1;
+ f2 = f2+f0;
+ f4 = f5+f4;
+ f0 = f1+f0;
+ heapFloat[(r2+22)] = f2;
+ f1 = f4+f3;
+ heapFloat[(r2+23)] = f0;
+ heapFloat[(r2+24)] = f1;
+ r0 = sp + -136;
+ heap32[(r2+25)] = 0;
+ r3 = r0 >> 2;
+ heap32[(fp+-34)] = 1566444395;
+ heap32[(r3+1)] = 1566444395;
+ r4 = heap32[(fp+1)];
+ heap32[(r3+2)] = 1566444395;
+ r5 = r4 >> 2;
+ heap32[(r3+3)] = 0;
+ r3 = heap32[(r5)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3+15)];
+ r5 = sp + -16;
+ r6 = r5 >> 2;
+ heap32[(fp+-4)] = -581039253;
+ heap32[(r6+1)] = -581039253;
+ heap32[(r6+2)] = -581039253;
+ heap32[(r6+3)] = 0;
+ heap32[(g0)] = r4;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = r5;
+ heap32[(g0+3)] = r0;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ r0 = heap32[(fp)];
+ f0 = heapFloat[(r2+4)];
+ f1 = heapFloat[(r2+3)];
+ f2 = heapFloat[(r2+2)];
+ r0 = r0 >> 2;
+ heap32[(r0)] = heap32[(r2+1)];
+ heapFloat[(r0+1)] = f2;
+ heapFloat[(r0+2)] = f1;
+ heapFloat[(r0+3)] = f0;
+ return;
+}
+
+function _ZNK19btTriangleMeshShape19processAllTrianglesEP18btTriangleCallbackRK9btVector3S4_(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+var __label__ = 0;
+ i7 = sp + -56;var g0 = i7>>2; // save stack
+ r0 = _ZTVZNK19btTriangleMeshShape19processAllTrianglesEP18btTriangleCallbackRK9btVector3S4_E16FilteredCallback;
+ r1 = sp + -40;
+ r0 = (r0 + 8)|0;
+ r2 = heap32[(fp+2)];
+ r3 = r1 >> 2;
+ r4 = heap32[(fp+1)];
+ heap32[(fp+-10)] = r0;
+ r0 = r2 >> 2;
+ heap32[(r3+1)] = r4;
+ heap32[(r3+2)] = heap32[(r0)];
+ heap32[(r3+3)] = heap32[(r0+1)];
+ r4 = heap32[(fp+3)];
+ heap32[(r3+4)] = heap32[(r0+2)];
+ r5 = r4 >> 2;
+ heap32[(r3+5)] = heap32[(r0+3)];
+ heap32[(r3+6)] = heap32[(r5)];
+ heap32[(r3+7)] = heap32[(r5+1)];
+ r0 = heap32[(fp)];
+ heap32[(r3+8)] = heap32[(r5+2)];
+ r0 = r0 >> 2;
+ heap32[(r3+9)] = heap32[(r5+3)];
+ r0 = heap32[(r0+12)];
+ r3 = r0 >> 2;
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3+2)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = r2;
+ heap32[(g0+3)] = r4;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ return;
+}
+
+function _ZN19btTriangleMeshShapeD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV14btConcaveShape;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZN19btTriangleMeshShapeD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV14btConcaveShape;
+ r0 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r0)] = r1;
+ return;
+}
+
+function _GLOBAL__D__ZN19btGenericMemoryPool24allocate_from_free_nodesEj(sp)
+{
+ var i7;
+ var fp = sp>>2;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ return;
+}
+
+function _ZN16btPointCollectorD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV16btPointCollector;
+ r0 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r0)] = r1;
+ return;
+}
+
+function _ZN16btPointCollectorD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV16btPointCollector;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZN16btPointCollector20setShapeIdentifiersAEii(sp)
+{
+ var i7;
+ var fp = sp>>2;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ return;
+}
+
+function _ZN16btPointCollector20setShapeIdentifiersBEii(sp)
+{
+ var i7;
+ var fp = sp>>2;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ return;
+}
+
+function _ZN16btPointCollector15addContactPointERK9btVector3S2_f(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var f0;
+ var f1;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ f0 = heapFloat[(fp+3)];
+ r1 = r0 >> 2;
+ f1 = heapFloat[(r1+9)];
+if(!(f1 <=f0)) //_LBB531_2
+{
+ r2 = heap32[(fp+1)];
+ r3 = heap32[(fp+2)];
+ r4 = 1;
+ r2 = r2 >> 2;
+ heap8[r0+40] = r4;
+ heap32[(r1+1)] = heap32[(r2)];
+ heap32[(r1+2)] = heap32[(r2+1)];
+ heap32[(r1+3)] = heap32[(r2+2)];
+ r0 = r3 >> 2;
+ heap32[(r1+4)] = heap32[(r2+3)];
+ heap32[(r1+5)] = heap32[(r0)];
+ heap32[(r1+6)] = heap32[(r0+1)];
+ heap32[(r1+7)] = heap32[(r0+2)];
+ heap32[(r1+8)] = heap32[(r0+3)];
+ heapFloat[(r1+9)] = f0;
+}
+ return;
+}
+
+function _ZN27btContinuousConvexCollisionD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV12btConvexCast;
+ r0 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r0)] = r1;
+ return;
+}
+
+function _ZN27btContinuousConvexCollisionD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV12btConvexCast;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZN27btContinuousConvexCollision16calcTimeOfImpactERK11btTransformS2_S2_S2_RN12btConvexCast10CastResultE(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+ var r13;
+ var r14;
+ var r15;
+ var r16;
+ var r17;
+ var r18;
+ var r19;
+ var r20;
+ var r21;
+ var r22;
+ var r23;
+ var r24;
+ var r25;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+ var f10;
+ var f11;
+ var f12;
+ var f13;
+ var f14;
+ var f15;
+ var f16;
+ var f17;
+ var f18;
+ var f19;
+ var f20;
+ var f21;
+var __label__ = 0;
+ i7 = sp + -816;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r1 = heap32[(r0+1)];
+ r2 = 0;
+ r3 = r1 >> 2;
+ heap8[r1+312] = r2;
+ r4 = 1;
+ heap32[(r3)] = 0;
+ heap8[r1+356] = r4;
+ heap32[(r3+73)] = 1566444395;
+ heap32[(r3+74)] = 1566444395;
+ heap32[(r3+75)] = 1566444395;
+ heap32[(r3+76)] = 0;
+ heap8[r1+352] = r2;
+ heap32[(r3+84)] = 0;
+ heap32[(r3+85)] = 0;
+ heap32[(r3+86)] = 0;
+ heap32[(r3+87)] = 0;
+ r3 = heapU8[r1+332];
+ r5 = heap32[(fp+1)];
+ r6 = heap32[(fp+2)];
+ r3 = r3 & 240;
+ r7 = r6 >> 2;
+ heap8[r1+332] = r3;
+ r1 = r5 >> 2;
+ f0 = heapFloat[(r7+14)];
+ f1 = heapFloat[(r1+14)];
+ f2 = heapFloat[(r7+13)];
+ f3 = heapFloat[(r1+13)];
+ f4 = heapFloat[(r7+12)];
+ f5 = heapFloat[(r1+12)];
+ r3 = sp + -40;
+ r7 = sp + -44;
+ heap32[(g0)] = r5;
+ heap32[(g0+1)] = r6;
+ heap32[(g0+2)] = r3;
+ heap32[(g0+3)] = r7;
+ _ZN15btTransformUtil22calculateDiffAxisAngleERK11btTransformS2_R9btVector3Rf(i7);
+ r3 = r3 >> 2;
+ f6 = heapFloat[(r3+2)];
+ f7 = heapFloat[(fp+-11)];
+ f8 = heapFloat[(r3+1)];
+ f9 = heapFloat[(fp+-10)];
+ r3 = sp + -96;
+ f9 = f9*f7;
+ f8 = f8*f7;
+ r6 = r3 >> 2;
+ heapFloat[(fp+-24)] = f9;
+ f6 = f6*f7;
+ heapFloat[(r6+1)] = f8;
+ r7 = heap32[(fp+3)];
+ r8 = heap32[(fp+4)];
+ heapFloat[(r6+2)] = f6;
+ r9 = r8 >> 2;
+ heap32[(r6+3)] = 0;
+ r6 = r7 >> 2;
+ f7 = heapFloat[(r9+14)];
+ f10 = heapFloat[(r6+14)];
+ f11 = heapFloat[(r9+13)];
+ f12 = heapFloat[(r6+13)];
+ f13 = heapFloat[(r9+12)];
+ f14 = heapFloat[(r6+12)];
+ r9 = sp + -16;
+ r10 = sp + -20;
+ heap32[(g0)] = r7;
+ heap32[(g0+1)] = r8;
+ heap32[(g0+2)] = r9;
+ heap32[(g0+3)] = r10;
+ _ZN15btTransformUtil22calculateDiffAxisAngleERK11btTransformS2_R9btVector3Rf(i7);
+ r8 = r9 >> 2;
+ f15 = heapFloat[(r8+2)];
+ f16 = heapFloat[(fp+-5)];
+ f17 = heapFloat[(r8+1)];
+ f18 = heapFloat[(fp+-4)];
+ r8 = sp + -112;
+ f18 = f18*f16;
+ f17 = f17*f16;
+ r9 = r8 >> 2;
+ heapFloat[(fp+-28)] = f18;
+ f15 = f15*f16;
+ heapFloat[(r9+1)] = f17;
+ heapFloat[(r9+2)] = f15;
+ heap32[(r9+3)] = 0;
+ r9 = heap32[(r0+3)];
+ r10 = r9 >> 2;
+ r10 = heap32[(r10)];
+ r10 = r10 >> 2;
+ r10 = heap32[(r10+4)];
+ heap32[(g0)] = r9;
+ __FUNCTION_TABLE__[(r10)>>2](i7);
+ f16 = f_g0;
+ r9 = heap32[(r0+4)];
+ r10 = r9 >> 2;
+ r10 = heap32[(r10)];
+ r10 = r10 >> 2;
+ r10 = heap32[(r10+4)];
+ heap32[(g0)] = r9;
+ f9 = f9*f9;
+ f8 = f8*f8;
+ __FUNCTION_TABLE__[(r10)>>2](i7);
+ f19 = f_g0;
+ f8 = f9+f8;
+ f6 = f6*f6;
+ f6 = f8+f6;
+ heapFloat[(g0)] = f6;
+ f6 = f18*f18;
+ f8 = f17*f17;
+ sqrtf(i7);
+ f9 = f_g0;
+ f11 = f11-f12;
+ f2 = f2-f3;
+ f3 = f13-f14;
+ f4 = f4-f5;
+ f5 = f6+f8;
+ f6 = f15*f15;
+ f8 = f11-f2;
+ f12 = f3-f4;
+ f7 = f7-f10;
+ f0 = f0-f1;
+ f1 = f5+f6;
+ f5 = f7-f0;
+ heapFloat[(g0)] = f1;
+ f1 = f12*f12;
+ f6 = f8*f8;
+ sqrtf(i7);
+ f1 = f1+f6;
+ f6 = f5*f5;
+ f1 = f1+f6;
+ f6 = f9*f16;
+ f9 = f_g0*f19;
+ heapFloat[(g0)] = f1;
+ f1 = f6+f9;
+ sqrtf(i7);
+ f6 = f_g0+f1;
+ f9 = 0;
+_1: do {
+if(!(f6 ==f9)) //_LBB534_21
+{
+ r9 = _ZTV16btPointCollector;
+ r9 = (r9 + 8)|0;
+ r10 = sp + -176;
+ heap32[(fp+-44)] = r9;
+ r11 = r10 >> 2;
+ heap32[(r11+9)] = 1566444395;
+ heap8[sp+-136] = r2;
+ r12 = heap32[(r0+4)];
+ r13 = r12 >> 2;
+ r13 = heap32[(r13)];
+ r13 = r13 >> 2;
+ r13 = heap32[(r13+11)];
+ r14 = heap32[(r0+2)];
+ r15 = heap32[(r0+1)];
+ heap32[(g0)] = r12;
+ __FUNCTION_TABLE__[(r13)>>2](i7);
+ f6 = f_g0;
+ r12 = heap32[(r0+3)];
+ r13 = r12 >> 2;
+ r13 = heap32[(r13)];
+ r13 = r13 >> 2;
+ r13 = heap32[(r13+11)];
+ heap32[(g0)] = r12;
+ __FUNCTION_TABLE__[(r13)>>2](i7);
+ r12 = heap32[(r0+4)];
+ r13 = heap32[(r0+3)];
+ r16 = r12 >> 2;
+ r17 = r13 >> 2;
+ r18 = _ZTV17btGjkPairDetector;
+ r16 = heap32[(r16+1)];
+ r17 = heap32[(r17+1)];
+ r19 = sp + -256;
+ r18 = (r18 + 8)|0;
+ r20 = r19 >> 2;
+ heap32[(fp+-64)] = r18;
+ heap32[(r20+1)] = 0;
+ heap32[(r20+2)] = 1065353216;
+ heap32[(r20+3)] = 0;
+ heap32[(r20+4)] = 0;
+ heap32[(r20+5)] = r14;
+ heap32[(r20+6)] = r15;
+ heap32[(r20+7)] = r13;
+ heap32[(r20+8)] = r12;
+ heap32[(r20+9)] = r17;
+ heap32[(r20+10)] = r16;
+ heapFloat[(r20+11)] = f_g0;
+ heapFloat[(r20+12)] = f6;
+ heap8[sp+-204] = r2;
+ r12 = sp + -392;
+ heap32[(r20+15)] = -1;
+ r13 = r12 >> 2;
+ heap32[(r20+18)] = 1;
+ heap32[(r13+32)] = 1566444395;
+ heap32[(r13+33)] = 0;
+ heap32[(fp+-98)] = heap32[(r1)];
+ heap32[(r13+1)] = heap32[(r1+1)];
+ heap32[(r13+2)] = heap32[(r1+2)];
+ heap32[(r13+3)] = heap32[(r1+3)];
+ heap32[(r13+4)] = heap32[(r1+4)];
+ heap32[(r13+5)] = heap32[(r1+5)];
+ heap32[(r13+6)] = heap32[(r1+6)];
+ heap32[(r13+7)] = heap32[(r1+7)];
+ heap32[(r13+8)] = heap32[(r1+8)];
+ heap32[(r13+9)] = heap32[(r1+9)];
+ heap32[(r13+10)] = heap32[(r1+10)];
+ heap32[(r13+11)] = heap32[(r1+11)];
+ heap32[(r13+12)] = heap32[(r1+12)];
+ heap32[(r13+13)] = heap32[(r1+13)];
+ heap32[(r13+14)] = heap32[(r1+14)];
+ heap32[(r13+15)] = heap32[(r1+15)];
+ heap32[(r13+16)] = heap32[(r6)];
+ heap32[(r13+17)] = heap32[(r6+1)];
+ heap32[(r13+18)] = heap32[(r6+2)];
+ heap32[(r13+19)] = heap32[(r6+3)];
+ heap32[(r13+20)] = heap32[(r6+4)];
+ heap32[(r13+21)] = heap32[(r6+5)];
+ heap32[(r13+22)] = heap32[(r6+6)];
+ heap32[(r13+23)] = heap32[(r6+7)];
+ heap32[(r13+24)] = heap32[(r6+8)];
+ heap32[(r13+25)] = heap32[(r6+9)];
+ heap32[(r13+26)] = heap32[(r6+10)];
+ heap32[(r13+27)] = heap32[(r6+11)];
+ heap32[(r13+28)] = heap32[(r6+12)];
+ heap32[(r13+29)] = heap32[(r6+13)];
+ heap32[(r13+30)] = heap32[(r6+14)];
+ heap32[(r13+31)] = heap32[(r6+15)];
+ heap32[(g0)] = r19;
+ heap32[(g0+1)] = r12;
+ heap32[(g0+2)] = r10;
+ heap32[(g0+3)] = 0;
+ heap32[(g0+4)] = 0;
+ _ZN17btGjkPairDetector16getClosestPointsERKN36btDiscreteCollisionDetectorInterface17ClosestPointInputERNS0_6ResultEP12btIDebugDrawb(i7);
+ f6 = heapFloat[(r11+5)];
+ r1 = heapU8[sp+-136];
+ r6 = sp + -128;
+ heapFloat[(fp+-32)] = f6;
+ f10 = heapFloat[(r11+6)];
+ r10 = r6 >> 2;
+ heapFloat[(r10+1)] = f10;
+ f13 = heapFloat[(r11+7)];
+ heapFloat[(r10+2)] = f13;
+ f14 = heapFloat[(r11+8)];
+ heapFloat[(r10+3)] = f14;
+if(!(r1 ==0)) //_LBB534_21
+{
+ r1 = heap32[(fp+5)];
+ f15 = heapFloat[(r11+1)];
+ f16 = heapFloat[(r11+2)];
+ f17 = heapFloat[(r11+3)];
+ f18 = f12*f15;
+ f19 = f8*f16;
+ r12 = sp + -456;
+ f18 = f18+f19;
+ f19 = f5*f17;
+ f20 = heapFloat[(r11+9)];
+ f21 = heapFloat[(r11+4)];
+ f18 = f18+f19;
+ r11 = (r12 + 48)|0;
+_4: while(true){
+ f19 = 0.0010000000474974513;
+ if(f20 >f19) //_LBB534_3
+{
+ r13 = r1 >> 2;
+ r14 = heap32[(r13+42)];
+if(!(r14 ==0)) //_LBB534_5
+{
+ r15 = r14 >> 2;
+ r15 = heap32[(r15)];
+ r15 = r15 >> 2;
+ r15 = heap32[(r15+5)];
+ r16 = sp + -80;
+ r17 = r16 >> 2;
+ heap32[(fp+-20)] = 1065353216;
+ heap32[(r17+1)] = 1065353216;
+ heap32[(r17+2)] = 1065353216;
+ heap32[(r17+3)] = 0;
+ heap32[(g0)] = r14;
+ heap32[(g0+1)] = r6;
+ heap32[(g0+2)] = 1045220557;
+ heap32[(g0+3)] = r16;
+ __FUNCTION_TABLE__[(r15)>>2](i7);
+}
+ r2 = (r2 + 1)|0;
+ if(r2 >64) //_LBB534_21
+{
+break _1;
+}
+else{
+ f6 = f12*f15;
+ f10 = f8*f16;
+ f6 = f6+f10;
+ f10 = f5*f17;
+ f18 = f6+f10;
+ f6 = f18+f1;
+ f10 = 1.1920928955078125e-007;
+ if(f6 <=f10) //_LBB534_21
+{
+break _1;
+}
+else{
+ f6 = f20/f6;
+ f19 = f9+f6;
+ f6 = 0;
+ if(f19 <f6) //_LBB534_21
+{
+break _1;
+}
+else{
+ f10 = 1;
+ if(f19 >f10) //_LBB534_21
+{
+break _1;
+}
+else{
+ if(f19 <=f9) //_LBB534_21
+{
+break _1;
+}
+else{
+ heap32[(g0)] = r5;
+ heapFloat[(g0+1)] = f4;
+ heapFloat[(g0+2)] = f2;
+ heapFloat[(g0+3)] = f0;
+ heap32[(g0+4)] = r3;
+ heapFloat[(g0+5)] = f19;
+ heap32[(g0+6)] = r12;
+ _ZN15btTransformUtil18integrateTransformERK11btTransformRK9btVector3S5_fRS0_(i7);
+ r14 = sp + -520;
+ heap32[(g0)] = r7;
+ heapFloat[(g0+1)] = f3;
+ heapFloat[(g0+2)] = f11;
+ heapFloat[(g0+3)] = f7;
+ heap32[(g0+4)] = r8;
+ heapFloat[(g0+5)] = f19;
+ heap32[(g0+6)] = r14;
+ _ZN15btTransformUtil18integrateTransformERK11btTransformRK9btVector3S5_fRS0_(i7);
+ r15 = heap32[(r13+42)];
+if(!(r15 ==0)) //_LBB534_12
+{
+ r16 = r15 >> 2;
+ r16 = heap32[(r16)];
+ r16 = r16 >> 2;
+ r16 = heap32[(r16+5)];
+ r17 = sp + -64;
+ r19 = r17 >> 2;
+ heap32[(fp+-16)] = 1065353216;
+ heap32[(r19+1)] = 0;
+ heap32[(r19+2)] = 0;
+ heap32[(r19+3)] = 0;
+ heap32[(g0)] = r15;
+ heap32[(g0+1)] = r11;
+ heap32[(g0+2)] = 1045220557;
+ heap32[(g0+3)] = r17;
+ __FUNCTION_TABLE__[(r16)>>2](i7);
+}
+ r15 = heap32[(r13)];
+ r15 = r15 >> 2;
+ r15 = heap32[(r15)];
+ heap32[(g0)] = r1;
+ heapFloat[(g0+1)] = f19;
+ r16 = sp + -568;
+ __FUNCTION_TABLE__[(r15)>>2](i7);
+ r15 = r16 >> 2;
+ heap32[(fp+-142)] = r9;
+ r17 = 0;
+ heap32[(r15+9)] = 1566444395;
+ heap8[sp+-528] = r17;
+ r19 = heap32[(r0+4)];
+ r20 = heap32[(r0+3)];
+ r21 = heap32[(r0+1)];
+ r22 = heap32[(r0+2)];
+ r23 = sp + -648;
+ heap32[(fp+-162)] = r18;
+ r24 = r23 >> 2;
+ heap32[(r24+1)] = 0;
+ heap32[(r24+2)] = 1065353216;
+ heap32[(r24+3)] = 0;
+ heap32[(r24+4)] = 0;
+ heap32[(r24+5)] = r22;
+ heap32[(r24+6)] = r21;
+ heap32[(r24+7)] = r20;
+ r21 = r20 >> 2;
+ heap32[(r24+8)] = r19;
+ r22 = heap32[(r21+1)];
+ heap32[(r24+9)] = r22;
+ r22 = r19 >> 2;
+ r25 = heap32[(r22+1)];
+ heap32[(r24+10)] = r25;
+ r21 = heap32[(r21)];
+ r21 = r21 >> 2;
+ r21 = heap32[(r21+11)];
+ heap32[(g0)] = r20;
+ __FUNCTION_TABLE__[(r21)>>2](i7);
+ heapFloat[(r24+11)] = f_g0;
+ r20 = heap32[(r22)];
+ r20 = r20 >> 2;
+ r20 = heap32[(r20+11)];
+ heap32[(g0)] = r19;
+ __FUNCTION_TABLE__[(r20)>>2](i7);
+ heapFloat[(r24+12)] = f_g0;
+ heap8[sp+-596] = r17;
+ r19 = sp + -784;
+ heap32[(r24+15)] = -1;
+ r20 = r19 >> 2;
+ heap32[(r24+18)] = 1;
+ heap32[(r20+32)] = 1566444395;
+ heap32[(r20+33)] = 0;
+ r21 = r12 >> 2;
+ heap32[(fp+-196)] = heap32[(fp+-114)];
+ heap32[(r20+1)] = heap32[(r21+1)];
+ heap32[(r20+2)] = heap32[(r21+2)];
+ heap32[(r20+3)] = heap32[(r21+3)];
+ heap32[(r20+4)] = heap32[(r21+4)];
+ heap32[(r20+5)] = heap32[(r21+5)];
+ heap32[(r20+6)] = heap32[(r21+6)];
+ heap32[(r20+7)] = heap32[(r21+7)];
+ heap32[(r20+8)] = heap32[(r21+8)];
+ heap32[(r20+9)] = heap32[(r21+9)];
+ heap32[(r20+10)] = heap32[(r21+10)];
+ heap32[(r20+11)] = heap32[(r21+11)];
+ heap32[(r20+12)] = heap32[(r21+12)];
+ heap32[(r20+13)] = heap32[(r21+13)];
+ heap32[(r20+14)] = heap32[(r21+14)];
+ heap32[(r20+15)] = heap32[(r21+15)];
+ r14 = r14 >> 2;
+ heap32[(r20+16)] = heap32[(fp+-130)];
+ heap32[(r20+17)] = heap32[(r14+1)];
+ heap32[(r20+18)] = heap32[(r14+2)];
+ heap32[(r20+19)] = heap32[(r14+3)];
+ heap32[(r20+20)] = heap32[(r14+4)];
+ heap32[(r20+21)] = heap32[(r14+5)];
+ heap32[(r20+22)] = heap32[(r14+6)];
+ heap32[(r20+23)] = heap32[(r14+7)];
+ heap32[(r20+24)] = heap32[(r14+8)];
+ heap32[(r20+25)] = heap32[(r14+9)];
+ heap32[(r20+26)] = heap32[(r14+10)];
+ heap32[(r20+27)] = heap32[(r14+11)];
+ heap32[(r20+28)] = heap32[(r14+12)];
+ heap32[(r20+29)] = heap32[(r14+13)];
+ heap32[(r20+30)] = heap32[(r14+14)];
+ heap32[(r20+31)] = heap32[(r14+15)];
+ heap32[(g0)] = r23;
+ heap32[(g0+1)] = r19;
+ heap32[(g0+2)] = r16;
+ heap32[(g0+3)] = 0;
+ heap32[(g0+4)] = 0;
+ _ZN17btGjkPairDetector16getClosestPointsERKN36btDiscreteCollisionDetectorInterface17ClosestPointInputERNS0_6ResultEP12btIDebugDrawb(i7);
+ r14 = heapU8[sp+-528];
+ if(r14 !=0) //_LBB534_14
+{
+ f20 = heapFloat[(r15+9)];
+ if(f20 >=f6) //_LBB534_17
+{
+ f6 = heapFloat[(r15+5)];
+ heapFloat[(fp+-32)] = f6;
+ f10 = heapFloat[(r15+6)];
+ heapFloat[(r10+1)] = f10;
+ f13 = heapFloat[(r15+7)];
+ heapFloat[(r10+2)] = f13;
+ f14 = heapFloat[(r15+8)];
+ heapFloat[(r10+3)] = f14;
+ f15 = heapFloat[(r15+1)];
+ f16 = heapFloat[(r15+2)];
+ f17 = heapFloat[(r15+3)];
+ f21 = heapFloat[(r15+4)];
+ heap32[(fp+-142)] = r9;
+ f9 = f19;
+}
+else{
+__label__ = 14;
+break _4;
+}
+}
+else{
+__label__ = 15;
+break _4;
+}
+}
+}
+}
+}
+}
+}
+else{
+__label__ = 18;
+break _4;
+}
+}
+switch(__label__ ){//multiple entries
+case 18:
+ r0 = r1 >> 2;
+ f0 = f18+f1;
+ f1 = heapFloat[(r0+43)];
+ if(f0 <=f1) //_LBB534_21
+{
+break _1;
+}
+else{
+ heapFloat[(r0+41)] = f9;
+ heapFloat[(r0+33)] = f15;
+ heapFloat[(r0+34)] = f16;
+ heapFloat[(r0+35)] = f17;
+ heapFloat[(r0+36)] = f21;
+ heapFloat[(r0+37)] = f6;
+ heapFloat[(r0+38)] = f10;
+ heapFloat[(r0+39)] = f13;
+ heapFloat[(r0+40)] = f14;
+ r0 = 1;
+ r_g0 = r0;
+ return;
+}
+break;
+case 14:
+ heapFloat[(r13+41)] = f19;
+ f0 = heapFloat[(r15+4)];
+ f1 = heapFloat[(r15+3)];
+ f2 = heapFloat[(r15+2)];
+ heap32[(r13+33)] = heap32[(r15+1)];
+ heapFloat[(r13+34)] = f2;
+ heapFloat[(r13+35)] = f1;
+ heapFloat[(r13+36)] = f0;
+ heap32[(r13+37)] = heap32[(r15+5)];
+ heap32[(r13+38)] = heap32[(r15+6)];
+ heap32[(r13+39)] = heap32[(r15+7)];
+ heap32[(r13+40)] = heap32[(r15+8)];
+ r17 = r4;
+break;
+}
+ heap32[(fp+-142)] = r9;
+ r0 = r17 & 255;
+ r_g0 = r0;
+ return;
+}
+}
+} while(0);
+ r0 = 0;
+ r_g0 = r0;
+ return;
+}
+
+function _ZN15btTransformUtil18integrateTransformERK11btTransformRK9btVector3S5_fRS0_(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+ var f10;
+ var f11;
+ var f12;
+ var f13;
+var __label__ = 0;
+ i7 = sp + -32;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ f0 = heapFloat[(fp+5)];
+ f1 = heapFloat[(fp+1)];
+ r2 = heap32[(fp+6)];
+ f2 = heapFloat[(fp+2)];
+ f1 = f1*f0;
+ f3 = heapFloat[(r1+12)];
+ f4 = heapFloat[(r1+14)];
+ f5 = heapFloat[(r1+13)];
+ f6 = heapFloat[(fp+3)];
+ f2 = f2*f0;
+ r1 = r2 >> 2;
+ f1 = f3+f1;
+ f3 = f6*f0;
+ f2 = f5+f2;
+ heapFloat[(r1+12)] = f1;
+ f1 = f4+f3;
+ heapFloat[(r1+13)] = f2;
+ r2 = heap32[(fp+4)];
+ heapFloat[(r1+14)] = f1;
+ r2 = r2 >> 2;
+ heap32[(r1+15)] = 0;
+ f1 = heapFloat[(r2)];
+ f2 = heapFloat[(r2+1)];
+ f3 = heapFloat[(r2+2)];
+ f1 = f1*f1;
+ f2 = f2*f2;
+ f1 = f1+f2;
+ f2 = f3*f3;
+ f1 = f1+f2;
+ heapFloat[(g0)] = f1;
+ sqrtf(i7);
+ f1 = f_g0;
+ f2 = f1*f0;
+ f3 = 0.78539818525314331;
+ if(f2 >f3) //_LBB535_2
+{
+ f1 = f3/f0;
+}
+ f2 = 0.0010000000474974513;
+ if(f1 >=f2) //_LBB535_5
+{
+ f2 = 0.5;
+ f2 = f1*f2;
+ f2 = f2*f0;
+ heapFloat[(g0)] = f2;
+ sinf(i7);
+ f3 = heapFloat[(r2+2)];
+ f2 = f_g0/f1;
+ f5 = heapFloat[(r2+1)];
+ f6 = heapFloat[(r2)];
+ f4 = f3*f2;
+ f3 = f5*f2;
+ f2 = f6*f2;
+}
+else{
+ f2 = f0*f0;
+ f2 = f2*f0;
+ f3 = -0.02083333395421505;
+ f2 = f2*f3;
+ f3 = 0.5;
+ f2 = f2*f1;
+ f3 = f0*f3;
+ f2 = f2*f1;
+ f4 = heapFloat[(r2+2)];
+ f2 = f3+f2;
+ f3 = heapFloat[(r2+1)];
+ f5 = heapFloat[(r2)];
+ f4 = f4*f2;
+ f3 = f3*f2;
+ f2 = f5*f2;
+}
+ f0 = f1*f0;
+ f1 = 0.5;
+ f0 = f0*f1;
+ heapFloat[(g0)] = f0;
+ cosf(i7);
+ f0 = f_g0;
+ r2 = sp + -16;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r2;
+ _ZNK11btMatrix3x311getRotationER12btQuaternion(i7);
+ r0 = r2 >> 2;
+ f1 = heapFloat[(fp+-4)];
+ f5 = heapFloat[(r0+3)];
+ f6 = heapFloat[(r0+1)];
+ f7 = heapFloat[(r0+2)];
+ f8 = f0*f6;
+ f9 = f3*f5;
+ f10 = f0*f1;
+ f11 = f2*f5;
+ f12 = f0*f7;
+ f13 = f4*f5;
+ f8 = f8+f9;
+ f9 = f4*f1;
+ f10 = f10+f11;
+ f11 = f3*f7;
+ f0 = f0*f5;
+ f5 = f2*f1;
+ f12 = f12+f13;
+ f13 = f2*f6;
+ f8 = f8+f9;
+ f2 = f2*f7;
+ f9 = f10+f11;
+ f10 = f4*f6;
+ f2 = f8-f2;
+ f8 = f9-f10;
+ f0 = f0-f5;
+ f5 = f3*f6;
+ f6 = f12+f13;
+ f1 = f3*f1;
+ f1 = f6-f1;
+ f3 = f8*f8;
+ f6 = f2*f2;
+ f0 = f0-f5;
+ f4 = f4*f7;
+ f0 = f0-f4;
+ f3 = f3+f6;
+ f4 = f1*f1;
+ f3 = f3+f4;
+ f4 = f0*f0;
+ f3 = f3+f4;
+ heapFloat[(g0)] = f3;
+ sqrtf(i7);
+ f3 = f_g0;
+ f4 = 0;
+ if(f3 !=f4) //_LBB535_8
+{
+ f4 = 1;
+ f3 = f4/f3;
+ f5 = f8*f3;
+ f2 = f2*f3;
+ f1 = f1*f3;
+ f6 = f5*f5;
+ f7 = f2*f2;
+ f0 = f0*f3;
+ f3 = f6+f7;
+ f6 = f1*f1;
+ f3 = f3+f6;
+ f6 = f0*f0;
+ f7 = 2;
+ f3 = f3+f6;
+ f3 = f7/f3;
+ f6 = f1*f3;
+ f7 = f2*f3;
+ f8 = f2*f7;
+ f1 = f1*f6;
+ f9 = f8+f1;
+ f9 = f4-f9;
+ f10 = f5*f7;
+ f11 = f0*f6;
+ f12 = f5*f6;
+ f7 = f0*f7;
+ f13 = f10-f11;
+ heapFloat[(r1)] = f9;
+ f3 = f5*f3;
+ f9 = f12+f7;
+ heapFloat[(r1+1)] = f13;
+ f5 = f5*f3;
+ heapFloat[(r1+2)] = f9;
+ f1 = f5+f1;
+ f9 = f10+f11;
+ heap32[(r1+3)] = 0;
+ f2 = f2*f6;
+ f0 = f0*f3;
+ f1 = f4-f1;
+ heapFloat[(r1+4)] = f9;
+ f3 = f2-f0;
+ heapFloat[(r1+5)] = f1;
+ heapFloat[(r1+6)] = f3;
+ f1 = f12-f7;
+ heap32[(r1+7)] = 0;
+ f3 = f5+f8;
+ f0 = f2+f0;
+ heapFloat[(r1+8)] = f1;
+ f1 = f4-f3;
+ heapFloat[(r1+9)] = f0;
+ heapFloat[(r1+10)] = f1;
+ heap32[(r1+11)] = 0;
+ return;
+}
+else{
+ r1 = _2E_str584;
+ r0 = _2E_str685;
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r0;
+ heap32[(g0+2)] = 188;
+ _assert(i7);
+}
+}
+
+function _ZN12btConvexCastD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV12btConvexCast;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZN12btConvexCastD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV12btConvexCast;
+ r0 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r0)] = r1;
+ return;
+}
+
+function _ZN15btGjkConvexCastD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV12btConvexCast;
+ r0 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r0)] = r1;
+ return;
+}
+
+function _ZN15btGjkConvexCastD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV12btConvexCast;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZN15btGjkConvexCast16calcTimeOfImpactERK11btTransformS2_S2_S2_RN12btConvexCast10CastResultE(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+ var r13;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+ var f10;
+ var f11;
+ var f12;
+ var f13;
+var __label__ = 0;
+ i7 = sp + -288;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r1 = heap32[(r0+1)];
+ r2 = 0;
+ r3 = r1 >> 2;
+ heap8[r1+312] = r2;
+ r4 = 1;
+ heap32[(r3)] = 0;
+ heap8[r1+356] = r4;
+ heap32[(r3+73)] = 1566444395;
+ heap32[(r3+74)] = 1566444395;
+ heap32[(r3+75)] = 1566444395;
+ heap32[(r3+76)] = 0;
+ heap8[r1+352] = r2;
+ heap32[(r3+84)] = 0;
+ heap32[(r3+85)] = 0;
+ heap32[(r3+86)] = 0;
+ heap32[(r3+87)] = 0;
+ r3 = heapU8[r1+332];
+ r4 = heap32[(fp+2)];
+ r5 = heap32[(fp+1)];
+ r6 = heap32[(fp+4)];
+ r7 = heap32[(fp+3)];
+ r3 = r3 & 240;
+ r4 = r4 >> 2;
+ heap8[r1+332] = r3;
+ r1 = r5 >> 2;
+ r3 = r6 >> 2;
+ r5 = r7 >> 2;
+ r6 = _ZTV16btPointCollector;
+ f0 = heapFloat[(r4+14)];
+ f1 = heapFloat[(r1+14)];
+ f2 = heapFloat[(r3+14)];
+ f3 = heapFloat[(r5+14)];
+ f4 = heapFloat[(r4+13)];
+ f5 = heapFloat[(r1+13)];
+ f6 = heapFloat[(r3+13)];
+ f7 = heapFloat[(r5+13)];
+ f8 = heapFloat[(r4+12)];
+ f9 = heapFloat[(r1+12)];
+ f10 = heapFloat[(r3+12)];
+ f11 = heapFloat[(r5+12)];
+ r7 = sp + -48;
+ r6 = (r6 + 8)|0;
+ r8 = r7 >> 2;
+ heap32[(fp+-12)] = r6;
+ heap32[(r8+9)] = 1566444395;
+ heap8[sp+-8] = r2;
+ r6 = heap32[(r0+3)];
+ r9 = heap32[(r0+2)];
+ r0 = heap32[(r0+1)];
+ r10 = _ZTV17btGjkPairDetector;
+ r11 = sp + -128;
+ r10 = (r10 + 8)|0;
+ heap32[(fp+-32)] = r10;
+ r10 = r11 >> 2;
+ heap32[(r10+1)] = 0;
+ heap32[(r10+2)] = 1065353216;
+ heap32[(r10+3)] = 0;
+ heap32[(r10+4)] = 0;
+ heap32[(r10+5)] = 0;
+ heap32[(r10+6)] = r0;
+ heap32[(r10+7)] = r9;
+ r0 = r9 >> 2;
+ heap32[(r10+8)] = r6;
+ r12 = heap32[(r0+1)];
+ heap32[(r10+9)] = r12;
+ r12 = r6 >> 2;
+ r13 = heap32[(r12+1)];
+ heap32[(r10+10)] = r13;
+ r0 = heap32[(r0)];
+ r0 = r0 >> 2;
+ r0 = heap32[(r0+11)];
+ heap32[(g0)] = r9;
+ __FUNCTION_TABLE__[(r0)>>2](i7);
+ heapFloat[(r10+11)] = f_g0;
+ r0 = heap32[(r12)];
+ r0 = r0 >> 2;
+ r0 = heap32[(r0+11)];
+ heap32[(g0)] = r6;
+ __FUNCTION_TABLE__[(r0)>>2](i7);
+ heapFloat[(r10+12)] = f_g0;
+ heap8[sp+-76] = r2;
+ r0 = sp + -264;
+ heap32[(r10+15)] = -1;
+ r6 = r0 >> 2;
+ heap32[(r10+18)] = 1;
+ heap32[(r6+32)] = 1566444395;
+ heap32[(r6+33)] = 0;
+ heap32[(fp+-66)] = heap32[(r1)];
+ heap32[(r6+1)] = heap32[(r1+1)];
+ heap32[(r6+2)] = heap32[(r1+2)];
+ heap32[(r6+3)] = heap32[(r1+3)];
+ heap32[(r6+4)] = heap32[(r1+4)];
+ heap32[(r6+5)] = heap32[(r1+5)];
+ heap32[(r6+6)] = heap32[(r1+6)];
+ heap32[(r6+7)] = heap32[(r1+7)];
+ heap32[(r6+8)] = heap32[(r1+8)];
+ heap32[(r6+9)] = heap32[(r1+9)];
+ heap32[(r6+10)] = heap32[(r1+10)];
+ heap32[(r6+11)] = heap32[(r1+11)];
+ heap32[(r6+12)] = heap32[(r1+12)];
+ heap32[(r6+13)] = heap32[(r1+13)];
+ heap32[(r6+14)] = heap32[(r1+14)];
+ heap32[(r6+15)] = heap32[(r1+15)];
+ heap32[(r6+16)] = heap32[(r5)];
+ heap32[(r6+17)] = heap32[(r5+1)];
+ heap32[(r6+18)] = heap32[(r5+2)];
+ heap32[(r6+19)] = heap32[(r5+3)];
+ heap32[(r6+20)] = heap32[(r5+4)];
+ heap32[(r6+21)] = heap32[(r5+5)];
+ heap32[(r6+22)] = heap32[(r5+6)];
+ heap32[(r6+23)] = heap32[(r5+7)];
+ heap32[(r6+24)] = heap32[(r5+8)];
+ heap32[(r6+25)] = heap32[(r5+9)];
+ heap32[(r6+26)] = heap32[(r5+10)];
+ heap32[(r6+27)] = heap32[(r5+11)];
+ heap32[(r6+28)] = heap32[(r5+12)];
+ heap32[(r6+29)] = heap32[(r5+13)];
+ heap32[(r6+30)] = heap32[(r5+14)];
+ heap32[(r6+31)] = heap32[(r5+15)];
+ heap32[(g0)] = r11;
+ heap32[(g0+1)] = r0;
+ heap32[(g0+2)] = r7;
+ heap32[(g0+3)] = 0;
+ heap32[(g0+4)] = 0;
+ _ZN17btGjkPairDetector16getClosestPointsERKN36btDiscreteCollisionDetectorInterface17ClosestPointInputERNS0_6ResultEP12btIDebugDrawb(i7);
+ r9 = heapU8[sp+-8];
+_1: do {
+if(!(r9 ==0)) //_LBB540_14
+{
+ f0 = f0-f1;
+ f1 = f2-f3;
+ f2 = f4-f5;
+ f3 = f6-f7;
+ f4 = f8-f9;
+ f5 = f10-f11;
+ r9 = heap32[(fp+5)];
+ f0 = f0-f1;
+ f1 = f2-f3;
+ f2 = f4-f5;
+ f3 = heapFloat[(r8+8)];
+ f4 = heapFloat[(r8+7)];
+ f5 = heapFloat[(r8+6)];
+ f6 = heapFloat[(r8+5)];
+ f7 = heapFloat[(r8+9)];
+ f8 = heapFloat[(r8+1)];
+ f9 = heapFloat[(r8+2)];
+ f10 = heapFloat[(r8+3)];
+ f11 = heapFloat[(r8+4)];
+ f12 = 0;
+_3: while(true){
+ f13 = 0.0010000000474974513;
+ if(f7 >f13) //_LBB540_2
+{
+ r2 = (r2 + 1)|0;
+ if(r2 >32) //_LBB540_14
+{
+break _1;
+}
+else{
+ f3 = f2*f8;
+ f4 = f1*f9;
+ f3 = f3+f4;
+ f4 = f0*f10;
+ f3 = f3+f4;
+ f3 = f7/f3;
+ f13 = f12-f3;
+ f3 = 0;
+ if(f13 <f3) //_LBB540_14
+{
+break _1;
+}
+else{
+ f4 = 1;
+ if(f13 >f4) //_LBB540_14
+{
+break _1;
+}
+else{
+ if(f13 <=f12) //_LBB540_14
+{
+break _1;
+}
+else{
+ r10 = r9 >> 2;
+ r12 = heap32[(r10)];
+ r12 = r12 >> 2;
+ r12 = heap32[(r12)];
+ heap32[(g0)] = r9;
+ heapFloat[(g0+1)] = f13;
+ __FUNCTION_TABLE__[(r12)>>2](i7);
+ f5 = heapFloat[(r4+12)];
+ f6 = heapFloat[(r1+12)];
+ f4 = f4-f13;
+ f6 = f6*f4;
+ f5 = f5*f13;
+ f5 = f6+f5;
+ heapFloat[(r6+12)] = f5;
+ f5 = heapFloat[(r1+13)];
+ f6 = heapFloat[(r4+13)];
+ f5 = f5*f4;
+ f6 = f6*f13;
+ f5 = f5+f6;
+ heapFloat[(r6+13)] = f5;
+ f5 = heapFloat[(r1+14)];
+ f6 = heapFloat[(r4+14)];
+ f5 = f5*f4;
+ f6 = f6*f13;
+ f5 = f5+f6;
+ heapFloat[(r6+14)] = f5;
+ f5 = heapFloat[(r5+12)];
+ f6 = heapFloat[(r3+12)];
+ f5 = f5*f4;
+ f6 = f6*f13;
+ f5 = f5+f6;
+ heapFloat[(r6+28)] = f5;
+ f5 = heapFloat[(r5+13)];
+ f6 = heapFloat[(r3+13)];
+ f5 = f5*f4;
+ f6 = f6*f13;
+ f5 = f5+f6;
+ heapFloat[(r6+29)] = f5;
+ f5 = heapFloat[(r5+14)];
+ f6 = heapFloat[(r3+14)];
+ f4 = f5*f4;
+ f5 = f6*f13;
+ f4 = f4+f5;
+ heapFloat[(r6+30)] = f4;
+ heap32[(g0)] = r11;
+ heap32[(g0+1)] = r0;
+ heap32[(g0+2)] = r7;
+ heap32[(g0+3)] = 0;
+ heap32[(g0+4)] = 0;
+ _ZN17btGjkPairDetector16getClosestPointsERKN36btDiscreteCollisionDetectorInterface17ClosestPointInputERNS0_6ResultEP12btIDebugDrawb(i7);
+ r12 = heapU8[sp+-8];
+ if(r12 ==0) //_LBB540_14
+{
+break _1;
+}
+else{
+ f7 = heapFloat[(r8+9)];
+ if(f7 >=f3) //_LBB540_9
+{
+ f6 = heapFloat[(r8+5)];
+ f5 = heapFloat[(r8+6)];
+ f4 = heapFloat[(r8+7)];
+ f3 = heapFloat[(r8+8)];
+ f8 = heapFloat[(r8+1)];
+ f9 = heapFloat[(r8+2)];
+ f10 = heapFloat[(r8+3)];
+ f11 = heapFloat[(r8+4)];
+ f12 = f13;
+}
+else{
+__label__ = 8;
+break _3;
+}
+}
+}
+}
+}
+}
+}
+else{
+__label__ = 11;
+break _3;
+}
+}
+switch(__label__ ){//multiple entries
+case 11:
+ r0 = r9 >> 2;
+ f2 = f8*f2;
+ f1 = f9*f1;
+ f7 = heapFloat[(r0+43)];
+ f1 = f2+f1;
+ f0 = f10*f0;
+ f0 = f1+f0;
+ f1 = -f7;
+ if(f0 >=f1) //_LBB540_14
+{
+break _1;
+}
+else{
+ heapFloat[(r0+41)] = f12;
+ heapFloat[(r0+33)] = f8;
+ heapFloat[(r0+34)] = f9;
+ heapFloat[(r0+35)] = f10;
+ heapFloat[(r0+36)] = f11;
+ heapFloat[(r0+37)] = f6;
+ heapFloat[(r0+38)] = f5;
+ heapFloat[(r0+39)] = f4;
+ heapFloat[(r0+40)] = f3;
+}
+break;
+case 8:
+ heapFloat[(r10+41)] = f13;
+ f0 = heapFloat[(r8+4)];
+ f1 = heapFloat[(r8+3)];
+ f2 = heapFloat[(r8+2)];
+ heap32[(r10+33)] = heap32[(r8+1)];
+ heapFloat[(r10+34)] = f2;
+ heapFloat[(r10+35)] = f1;
+ heapFloat[(r10+36)] = f0;
+ heap32[(r10+37)] = heap32[(r8+5)];
+ heap32[(r10+38)] = heap32[(r8+6)];
+ heap32[(r10+39)] = heap32[(r8+7)];
+ heap32[(r10+40)] = heap32[(r8+8)];
+break;
+}
+ r0 = 1;
+ r_g0 = r0;
+ return;
+}
+} while(0);
+ r0 = 0;
+ r_g0 = r0;
+ return;
+}
+
+function _ZN12gjkepa2_impl3GJK13projectoriginERK9btVector3S3_PfRj(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ r1 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r1 = r1 >> 2;
+ f0 = heapFloat[(r1+1)];
+ f1 = heapFloat[(r0+1)];
+ f2 = heapFloat[(r1)];
+ f3 = heapFloat[(r0)];
+ f1 = f1-f0;
+ f3 = f3-f2;
+ f4 = heapFloat[(r1+2)];
+ f5 = heapFloat[(r0+2)];
+ f5 = f5-f4;
+ f6 = f3*f3;
+ f7 = f1*f1;
+ f6 = f6+f7;
+ f7 = f5*f5;
+ f6 = f6+f7;
+ f7 = 0;
+ if(f6 <=f7) //_LBB541_7
+{
+ f0 = -1;
+ f_g0 = f0;
+ return;
+}
+else{
+ r2 = heap32[(fp+2)];
+ r3 = heap32[(fp+3)];
+ f2 = f2*f3;
+ f0 = f0*f1;
+ f0 = f2+f0;
+ f2 = f4*f5;
+ f0 = f0+f2;
+ f0 = -f0;
+ f0 = f0/f6;
+ f2 = 1;
+ if(f0 <f2) //_LBB541_4
+{
+ if(f0 >f7) //_LBB541_6
+{
+ r0 = r2 >> 2;
+ f2 = f2-f0;
+ heapFloat[(r0+1)] = f0;
+ r2 = r3 >> 2;
+ heapFloat[(r0)] = f2;
+ heap32[(r2)] = 3;
+ f2 = heapFloat[(r1)];
+ f3 = f3*f0;
+ f4 = heapFloat[(r1+1)];
+ f1 = f1*f0;
+ f2 = f2+f3;
+ f1 = f4+f1;
+ f3 = heapFloat[(r1+2)];
+ f0 = f5*f0;
+ f0 = f3+f0;
+ f2 = f2*f2;
+ f1 = f1*f1;
+ f1 = f2+f1;
+ f0 = f0*f0;
+ f0 = f1+f0;
+ f_g0 = f0;
+ return;
+}
+else{
+ r2 = r2 >> 2;
+ heap32[(r2)] = 1065353216;
+ r3 = r3 >> 2;
+ heap32[(r2+1)] = 0;
+ heap32[(r3)] = 1;
+ f0 = heapFloat[(r1)];
+ f1 = heapFloat[(r1+1)];
+ f2 = heapFloat[(r1+2)];
+}
+}
+else{
+ r1 = r2 >> 2;
+ heap32[(r1)] = 0;
+ r2 = r3 >> 2;
+ heap32[(r1+1)] = 1065353216;
+ heap32[(r2)] = 2;
+ f0 = heapFloat[(r0)];
+ f1 = heapFloat[(r0+1)];
+ f2 = heapFloat[(r0+2)];
+}
+ f0 = f0*f0;
+ f1 = f1*f1;
+ f0 = f0+f1;
+ f1 = f2*f2;
+ f0 = f0+f1;
+ f_g0 = f0;
+ return;
+}
+}
+
+function _ZN12gjkepa2_implL10InitializeEPK13btConvexShapeRK11btTransformS2_S5_RN15btGjkEpaSolver28sResultsERNS_13MinkowskiDiffEb(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+ var f10;
+ var f11;
+ var f12;
+ var f13;
+ var f14;
+ var f15;
+ var f16;
+ var f17;
+ var f18;
+ var f19;
+ var f20;
+ var f21;
+ var f22;
+ var f23;
+ var f24;
+ var f25;
+ var f26;
+ var f27;
+ var f28;
+ var f29;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+4)];
+ r0 = r0 >> 2;
+ r1 = heap32[(fp+5)];
+ heap32[(r0)] = 0;
+ heap32[(r0+1)] = 0;
+ heap32[(r0+2)] = 0;
+ heap32[(r0+3)] = 0;
+ heap32[(r0+4)] = 0;
+ heap32[(r0+5)] = 0;
+ heap32[(r0+6)] = 0;
+ heap32[(r0+7)] = 0;
+ heap32[(r0+8)] = 0;
+ r0 = r1 >> 2;
+ r1 = heap32[(fp)];
+ r2 = heap32[(fp+3)];
+ r3 = heap32[(fp+1)];
+ r4 = heap32[(fp+2)];
+ heap32[(r0)] = r1;
+ r1 = r2 >> 2;
+ heap32[(r0+1)] = r4;
+ r2 = r3 >> 2;
+ f0 = heapFloat[(r2)];
+ f1 = heapFloat[(r1)];
+ f2 = heapFloat[(r2+4)];
+ f3 = heapFloat[(r1+4)];
+ f4 = heapFloat[(r2+1)];
+ f5 = heapFloat[(r2+5)];
+ f6 = f1*f0;
+ f7 = f3*f2;
+ f8 = heapFloat[(r2+8)];
+ f9 = heapFloat[(r1+8)];
+ f10 = heapFloat[(r1+2)];
+ f11 = heapFloat[(r2+2)];
+ f12 = heapFloat[(r1+1)];
+ f13 = heapFloat[(r1+6)];
+ f14 = heapFloat[(r2+6)];
+ f15 = heapFloat[(r1+5)];
+ f16 = heapFloat[(r1+10)];
+ f17 = heapFloat[(r2+10)];
+ f18 = heapFloat[(r2+9)];
+ f19 = heapFloat[(r1+9)];
+ f20 = f1*f4;
+ f21 = f3*f5;
+ f6 = f6+f7;
+ f7 = f9*f8;
+ f1 = f1*f11;
+ f3 = f3*f14;
+ f20 = f20+f21;
+ f21 = f9*f18;
+ f6 = f6+f7;
+ f1 = f1+f3;
+ f3 = f9*f17;
+ f7 = f20+f21;
+ heapFloat[(r0+2)] = f6;
+ f6 = f12*f0;
+ f9 = f15*f2;
+ f1 = f1+f3;
+ heapFloat[(r0+3)] = f7;
+ heapFloat[(r0+4)] = f1;
+ f1 = f12*f4;
+ f3 = f15*f5;
+ f6 = f6+f9;
+ f7 = f19*f8;
+ f9 = f12*f11;
+ f12 = f15*f14;
+ f1 = f1+f3;
+ f3 = f19*f18;
+ f6 = f6+f7;
+ heap32[(r0+5)] = 0;
+ f7 = f9+f12;
+ f9 = f19*f17;
+ f1 = f1+f3;
+ heapFloat[(r0+6)] = f6;
+ f0 = f10*f0;
+ f2 = f13*f2;
+ f3 = f7+f9;
+ heapFloat[(r0+7)] = f1;
+ heapFloat[(r0+8)] = f3;
+ f1 = f10*f4;
+ f3 = f13*f5;
+ f0 = f0+f2;
+ f2 = f16*f8;
+ f4 = f10*f11;
+ f5 = f13*f14;
+ f1 = f1+f3;
+ f3 = f16*f18;
+ f0 = f0+f2;
+ heap32[(r0+9)] = 0;
+ f2 = f4+f5;
+ f4 = f16*f17;
+ f1 = f1+f3;
+ heapFloat[(r0+10)] = f0;
+ f0 = f2+f4;
+ heapFloat[(r0+11)] = f1;
+ heapFloat[(r0+12)] = f0;
+ heap32[(r0+13)] = 0;
+ f0 = heapFloat[(r2)];
+ f1 = heapFloat[(r1)];
+ f2 = heapFloat[(r2+4)];
+ f3 = heapFloat[(r1+4)];
+ f4 = heapFloat[(r1+1)];
+ f5 = heapFloat[(r1+5)];
+ f6 = f0*f1;
+ f7 = f2*f3;
+ f8 = heapFloat[(r2+8)];
+ f9 = heapFloat[(r1+8)];
+ f10 = heapFloat[(r2+2)];
+ f11 = heapFloat[(r2+6)];
+ f12 = heapFloat[(r2+1)];
+ f13 = heapFloat[(r1+2)];
+ f14 = heapFloat[(r2+5)];
+ f15 = heapFloat[(r1+6)];
+ f16 = heapFloat[(r2+10)];
+ f17 = heapFloat[(r1+10)];
+ f18 = heapFloat[(r2+9)];
+ f19 = heapFloat[(r1+9)];
+ f20 = f0*f4;
+ f21 = f2*f5;
+ f6 = f6+f7;
+ f7 = f8*f9;
+ f22 = heapFloat[(r1+14)];
+ f23 = heapFloat[(r2+14)];
+ f24 = heapFloat[(r1+13)];
+ f25 = heapFloat[(r2+13)];
+ f26 = heapFloat[(r1+12)];
+ f27 = heapFloat[(r2+12)];
+ f28 = f0*f13;
+ f29 = f2*f15;
+ f20 = f20+f21;
+ f21 = f8*f19;
+ f6 = f6+f7;
+ f7 = f28+f29;
+ f28 = f8*f17;
+ f20 = f20+f21;
+ heapFloat[(r0+14)] = f6;
+ f6 = f12*f1;
+ f21 = f14*f3;
+ f7 = f7+f28;
+ heapFloat[(r0+15)] = f20;
+ heapFloat[(r0+16)] = f7;
+ f7 = f12*f4;
+ f20 = f14*f5;
+ f6 = f6+f21;
+ f21 = f18*f9;
+ f28 = f12*f13;
+ f29 = f14*f15;
+ f7 = f7+f20;
+ f20 = f18*f19;
+ f6 = f6+f21;
+ heap32[(r0+17)] = 0;
+ f21 = f28+f29;
+ f28 = f18*f17;
+ f7 = f7+f20;
+ heapFloat[(r0+18)] = f6;
+ f1 = f10*f1;
+ f3 = f11*f3;
+ f6 = f21+f28;
+ heapFloat[(r0+19)] = f7;
+ heapFloat[(r0+20)] = f6;
+ f4 = f10*f4;
+ f5 = f11*f5;
+ f1 = f1+f3;
+ f3 = f16*f9;
+ f6 = f10*f13;
+ f7 = f11*f15;
+ f4 = f4+f5;
+ f5 = f16*f19;
+ f1 = f1+f3;
+ heap32[(r0+21)] = 0;
+ f3 = f26-f27;
+ f9 = f24-f25;
+ f6 = f6+f7;
+ f7 = f16*f17;
+ f4 = f4+f5;
+ heapFloat[(r0+22)] = f1;
+ f1 = f22-f23;
+ f0 = f0*f3;
+ f2 = f2*f9;
+ f5 = f6+f7;
+ heapFloat[(r0+23)] = f4;
+ heapFloat[(r0+24)] = f5;
+ f4 = f12*f3;
+ f5 = f14*f9;
+ f0 = f0+f2;
+ f2 = f8*f1;
+ f3 = f10*f3;
+ f6 = f11*f9;
+ f4 = f4+f5;
+ f5 = f18*f1;
+ f0 = f0+f2;
+ heap32[(r0+25)] = 0;
+ f2 = f3+f6;
+ f1 = f16*f1;
+ f3 = f4+f5;
+ heapFloat[(r0+26)] = f0;
+ f0 = f2+f1;
+ heapFloat[(r0+27)] = f3;
+ heapFloat[(r0+28)] = f0;
+ heap32[(r0+29)] = 0;
+ r1 = heap32[(fp+6)];
+ if(r1 ==0) //_LBB542_3
+{
+ r1 = _ZNK13btConvexShape44localGetSupportVertexWithoutMarginNonVirtualERK9btVector3__index__;
+}
+else{
+ r1 = _ZNK13btConvexShape31localGetSupportVertexNonVirtualERK9btVector3__index__;
+}
+ heap32[(r0+30)] = r1;
+ heap32[(r0+31)] = 0;
+ return;
+}
+
+function _ZNK12gjkepa2_impl3GJK10getsupportERK9btVector3RNS0_3sSVE(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+ var f10;
+ var f11;
+var __label__ = 0;
+ i7 = sp + -64;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ r0 = r0 >> 2;
+ f0 = heapFloat[(r0)];
+ f1 = heapFloat[(r0+1)];
+ f2 = heapFloat[(r0+2)];
+ f0 = f0*f0;
+ f1 = f1*f1;
+ f0 = f0+f1;
+ f1 = f2*f2;
+ f0 = f0+f1;
+ heapFloat[(g0)] = f0;
+ sqrtf(i7);
+ f1 = 1;
+ r1 = heap32[(fp+2)];
+ f0 = f1/f_g0;
+ f1 = heapFloat[(r0+2)];
+ f2 = heapFloat[(r0+1)];
+ f3 = heapFloat[(r0)];
+ f3 = f3*f0;
+ r0 = r1 >> 2;
+ f2 = f2*f0;
+ heapFloat[(r0)] = f3;
+ f0 = f1*f0;
+ heapFloat[(r0+1)] = f2;
+ r2 = heap32[(fp)];
+ heapFloat[(r0+2)] = f0;
+ r2 = r2 >> 2;
+ heap32[(r0+3)] = 0;
+ r3 = heap32[(r2+30)];
+ f0 = -f0;
+ f1 = -f2;
+ f2 = -f3;
+ r4 = heap32[(r2+1)];
+ r5 = heap32[(r2+31)];
+ r6 = r3 & 1;
+ if(r6 != 0) //_LBB543_2
+{
+ r6 = (r4 + r5)|0;
+ r6 = r6 >> 2;
+ r6 = heap32[(r6)];
+ r3 = (r6 + r3)|0;
+ r3 = (r3 + -1)|0;
+ r3 = r3 >> 2;
+ r3 = heap32[(r3)];
+}
+ f3 = heapFloat[(r2+2)];
+ f4 = heapFloat[(r2+3)];
+ f5 = heapFloat[(r2+6)];
+ f6 = heapFloat[(r2+7)];
+ f3 = f3*f2;
+ f4 = f4*f1;
+ f7 = heapFloat[(r2+4)];
+ f8 = heapFloat[(r2+10)];
+ f9 = heapFloat[(r2+11)];
+ f10 = heapFloat[(r2+12)];
+ f11 = heapFloat[(r2+8)];
+ f5 = f5*f2;
+ f6 = f6*f1;
+ f3 = f3+f4;
+ f4 = f7*f0;
+ r6 = sp + -16;
+ f2 = f8*f2;
+ f1 = f9*f1;
+ f5 = f5+f6;
+ f6 = f11*f0;
+ f3 = f3+f4;
+ r7 = r6 >> 2;
+ f1 = f2+f1;
+ f0 = f10*f0;
+ f2 = f5+f6;
+ heapFloat[(fp+-4)] = f3;
+ f0 = f1+f0;
+ heapFloat[(r7+1)] = f2;
+ heapFloat[(r7+2)] = f0;
+ heap32[(r7+3)] = 0;
+ r7 = sp + -32;
+ r4 = (r4 + r5)|0;
+ heap32[(g0)] = r7;
+ heap32[(g0+1)] = r4;
+ heap32[(g0+2)] = r6;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ r3 = r7 >> 2;
+ f0 = heapFloat[(r2+22)];
+ f1 = heapFloat[(fp+-8)];
+ f2 = heapFloat[(r2+18)];
+ f3 = heapFloat[(r2+14)];
+ f4 = heapFloat[(r2+23)];
+ f5 = heapFloat[(r3+1)];
+ f6 = heapFloat[(r2+19)];
+ f7 = heapFloat[(r2+15)];
+ f0 = f0*f1;
+ f4 = f4*f5;
+ f8 = heapFloat[(r2+24)];
+ f9 = heapFloat[(r3+2)];
+ f10 = heapFloat[(r2+20)];
+ f11 = heapFloat[(r2+16)];
+ f2 = f2*f1;
+ f6 = f6*f5;
+ f1 = f3*f1;
+ f3 = f7*f5;
+ f0 = f0+f4;
+ f4 = f8*f9;
+ f2 = f2+f6;
+ f5 = f10*f9;
+ f1 = f1+f3;
+ f3 = f11*f9;
+ f0 = f0+f4;
+ f4 = heapFloat[(r2+28)];
+ f2 = f2+f5;
+ f5 = heapFloat[(r2+27)];
+ f1 = f1+f3;
+ f3 = heapFloat[(r2+26)];
+ r3 = heap32[(r2+30)];
+ f0 = f0+f4;
+ f2 = f2+f5;
+ f1 = f1+f3;
+ r4 = heap32[(r2)];
+ r2 = heap32[(r2+31)];
+ r5 = r3 & 1;
+ if(r5 != 0) //_LBB543_5
+{
+ r5 = (r4 + r2)|0;
+ r5 = r5 >> 2;
+ r5 = heap32[(r5)];
+ r3 = (r3 + r5)|0;
+ r3 = (r3 + -1)|0;
+ r3 = r3 >> 2;
+ r3 = heap32[(r3)];
+}
+ r5 = sp + -48;
+ r2 = (r4 + r2)|0;
+ heap32[(g0)] = r5;
+ heap32[(g0+1)] = r2;
+ heap32[(g0+2)] = r1;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ r1 = r5 >> 2;
+ f3 = heapFloat[(fp+-12)];
+ f4 = heapFloat[(r1+2)];
+ f5 = heapFloat[(r1+1)];
+ f1 = f3-f1;
+ f2 = f5-f2;
+ heapFloat[(r0+4)] = f1;
+ f0 = f4-f0;
+ heapFloat[(r0+5)] = f2;
+ heapFloat[(r0+6)] = f0;
+ heap32[(r0+7)] = 0;
+ return;
+}
+
+function _ZN12gjkepa2_impl3GJK13EncloseOriginEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+ var f10;
+ var f11;
+ var f12;
+var __label__ = 0;
+ i7 = sp + -128;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ r2 = heap32[(r1+93)];
+ r3 = r2 >> 2;
+ r4 = heap32[(r3+8)];
+_1: do {
+ if(r4 >2) //_LBB544_3
+{
+ if(r4 ==3) //_LBB544_17
+{
+ r5 = heap32[(r3)];
+ r6 = heap32[(r3+2)];
+ r7 = heap32[(r3+1)];
+ r6 = r6 >> 2;
+ r5 = r5 >> 2;
+ r7 = r7 >> 2;
+ f0 = heapFloat[(r6+6)];
+ f1 = heapFloat[(r5+6)];
+ f2 = heapFloat[(r7+6)];
+ f3 = heapFloat[(r6+5)];
+ f4 = heapFloat[(r5+5)];
+ f5 = heapFloat[(r7+5)];
+ f5 = f5-f4;
+ f0 = f0-f1;
+ f1 = f2-f1;
+ f2 = f3-f4;
+ f3 = heapFloat[(r6+4)];
+ f4 = heapFloat[(r5+4)];
+ f6 = heapFloat[(r7+4)];
+ f3 = f3-f4;
+ f4 = f6-f4;
+ f6 = f5*f0;
+ f7 = f1*f2;
+ r5 = sp + -112;
+ f6 = f6-f7;
+ f1 = f1*f3;
+ f0 = f4*f0;
+ f0 = f1-f0;
+ r6 = r5 >> 2;
+ heapFloat[(fp+-28)] = f6;
+ f1 = f4*f2;
+ f2 = f5*f3;
+ f1 = f1-f2;
+ heapFloat[(r6+1)] = f0;
+ f2 = f6*f6;
+ f0 = f0*f0;
+ heapFloat[(r6+2)] = f1;
+ f0 = f2+f0;
+ f1 = f1*f1;
+ f0 = f0+f1;
+ f1 = 0;
+ heap32[(r6+3)] = 0;
+ if(f0 <=f1) //_LBB544_25
+{
+__label__ = 24;
+break _1;
+}
+else{
+ r4 = r4 << 2;
+ r4 = (r2 + r4)|0;
+ r4 = r4 >> 2;
+ heap32[(r4+4)] = 0;
+ r4 = heap32[(r1+91)];
+ r4 = (r4 + -1)|0;
+ r7 = heap32[(r3+8)];
+ r8 = r4 << 2;
+ r7 = r7 << 2;
+ r8 = (r0 + r8)|0;
+ r7 = (r2 + r7)|0;
+ r8 = r8 >> 2;
+ heap32[(r1+91)] = r4;
+ r4 = r7 >> 2;
+ r7 = heap32[(r8+87)];
+ heap32[(r4)] = r7;
+ r4 = heap32[(r3+8)];
+ r7 = r4 << 2;
+ r2 = (r2 + r7)|0;
+ r2 = r2 >> 2;
+ r2 = heap32[(r2)];
+ r4 = (r4 + 1)|0;
+ heap32[(r3+8)] = r4;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r5;
+ heap32[(g0+2)] = r2;
+ _ZNK12gjkepa2_impl3GJK10getsupportERK9btVector3RNS0_3sSVE(i7);
+ heap32[(g0)] = r0;
+ _ZN12gjkepa2_impl3GJK13EncloseOriginEv(i7);
+ r3 = r_g0;
+ if(r3 !=0) //_LBB544_26
+{
+__label__ = 25;
+break _1;
+}
+else{
+ r3 = heap32[(r1+93)];
+ r2 = r3 >> 2;
+ r4 = heap32[(r2+8)];
+ r4 = (r4 + -1)|0;
+ r5 = heap32[(r1+91)];
+ r7 = r4 << 2;
+ r3 = (r3 + r7)|0;
+ r7 = (r0 + 348)|0;
+ r8 = r5 << 2;
+ r8 = (r7 + r8)|0;
+ r3 = r3 >> 2;
+ heap32[(r2+8)] = r4;
+ r2 = r8 >> 2;
+ r3 = heap32[(r3)];
+ r4 = (r5 + 1)|0;
+ heap32[(r2)] = r3;
+ heap32[(r1+91)] = r4;
+ f0 = heapFloat[(r6+2)];
+ f1 = heapFloat[(r6+1)];
+ f2 = heapFloat[(fp+-28)];
+ r3 = sp + -16;
+ f2 = -f2;
+ r2 = r3 >> 2;
+ f1 = -f1;
+ heapFloat[(fp+-4)] = f2;
+ f0 = -f0;
+ heapFloat[(r2+1)] = f1;
+ heapFloat[(r2+2)] = f0;
+ heap32[(r2+3)] = 0;
+ r2 = heap32[(r1+93)];
+ r4 = r2 >> 2;
+ r5 = heap32[(r4+8)];
+ r5 = r5 << 2;
+ r5 = (r2 + r5)|0;
+ r5 = r5 >> 2;
+ heap32[(r5+4)] = 0;
+ r5 = heap32[(r1+91)];
+ r5 = (r5 + -1)|0;
+ r6 = heap32[(r4+8)];
+ r8 = r5 << 2;
+ r6 = r6 << 2;
+ r7 = (r7 + r8)|0;
+ r6 = (r2 + r6)|0;
+ r7 = r7 >> 2;
+ heap32[(r1+91)] = r5;
+ r5 = r6 >> 2;
+ r6 = heap32[(r7)];
+ heap32[(r5)] = r6;
+ r5 = heap32[(r4+8)];
+ r6 = r5 << 2;
+ r2 = (r2 + r6)|0;
+ r2 = r2 >> 2;
+ r2 = heap32[(r2)];
+ r5 = (r5 + 1)|0;
+ heap32[(r4+8)] = r5;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r3;
+ heap32[(g0+2)] = r2;
+ _ZNK12gjkepa2_impl3GJK10getsupportERK9btVector3RNS0_3sSVE(i7);
+ heap32[(g0)] = r0;
+ _ZN12gjkepa2_impl3GJK13EncloseOriginEv(i7);
+ r3 = r_g0;
+ if(r3 !=0) //_LBB544_26
+{
+__label__ = 25;
+break _1;
+}
+else{
+ r3 = heap32[(r1+93)];
+ r2 = r3 >> 2;
+ r4 = heap32[(r2+8)];
+ r4 = (r4 + -1)|0;
+ r5 = heap32[(r1+91)];
+ r6 = r4 << 2;
+ r7 = r5 << 2;
+ r3 = (r3 + r6)|0;
+ r0 = (r0 + r7)|0;
+ r3 = r3 >> 2;
+ heap32[(r2+8)] = r4;
+ r0 = r0 >> 2;
+ r3 = heap32[(r3)];
+ r2 = (r5 + 1)|0;
+ heap32[(r0+87)] = r3;
+ heap32[(r1+91)] = r2;
+ r3 = 0;
+ r_g0 = r3;
+ return;
+}
+}
+}
+}
+else{
+ if(r4 ==4) //_LBB544_21
+{
+ r0 = heap32[(r3)];
+ r1 = heap32[(r3+1)];
+ r2 = heap32[(r3+3)];
+ r0 = r0 >> 2;
+ r1 = r1 >> 2;
+ r2 = r2 >> 2;
+ r3 = heap32[(r3+2)];
+ r3 = r3 >> 2;
+ f0 = heapFloat[(r1+6)];
+ f1 = heapFloat[(r2+6)];
+ f2 = heapFloat[(r0+6)];
+ f3 = heapFloat[(r0+5)];
+ f4 = heapFloat[(r2+5)];
+ f5 = heapFloat[(r1+4)];
+ f6 = heapFloat[(r2+4)];
+ f7 = heapFloat[(r3+5)];
+ f8 = heapFloat[(r0+4)];
+ f9 = heapFloat[(r3+4)];
+ f0 = f0-f1;
+ f3 = f3-f4;
+ f5 = f5-f6;
+ f2 = f2-f1;
+ f8 = f8-f6;
+ f10 = f3*f0;
+ f6 = f9-f6;
+ f9 = f2*f5;
+ f7 = f7-f4;
+ f0 = f8*f0;
+ f11 = heapFloat[(r3+6)];
+ f12 = heapFloat[(r1+5)];
+ f10 = f10*f6;
+ f9 = f9*f7;
+ f4 = f12-f4;
+ f9 = f10+f9;
+ f0 = f0*f7;
+ f3 = f3*f5;
+ f1 = f11-f1;
+ f5 = f8*f4;
+ f0 = f9-f0;
+ f3 = f3*f1;
+ f2 = f2*f4;
+ f0 = f0-f3;
+ f1 = f5*f1;
+ f0 = f0+f1;
+ f1 = f2*f6;
+ f0 = f0-f1;
+ f1 = 0;
+ if(f0 <f1) //_LBB544_23
+{
+ f0 = -f0;
+}
+ r0 = f0 > f1;
+ r0 = r0 & 1;
+ r_g0 = r0;
+ return;
+}
+else{
+__label__ = 24;
+break _1;
+}
+}
+}
+else{
+ if(r4 ==1) //_LBB544_5
+{
+ r2 = 0;
+_16: while(true){
+ if(uint(r2) <uint(3)) //_LBB544_6
+{
+ r3 = sp + -64;
+ r4 = r3 >> 2;
+ heap32[(fp+-16)] = 0;
+ r5 = r2 << 2;
+ heap32[(r4+1)] = 0;
+ r5 = (r3 + r5)|0;
+ heap32[(r4+2)] = 0;
+ r5 = r5 >> 2;
+ heap32[(r4+3)] = 0;
+ heap32[(r5)] = 1065353216;
+ r5 = heap32[(r1+93)];
+ r6 = r5 >> 2;
+ r7 = heap32[(r6+8)];
+ r7 = r7 << 2;
+ r7 = (r5 + r7)|0;
+ r7 = r7 >> 2;
+ heap32[(r7+4)] = 0;
+ r7 = heap32[(r1+91)];
+ r7 = (r7 + -1)|0;
+ r8 = heap32[(r6+8)];
+ r9 = r7 << 2;
+ r8 = r8 << 2;
+ r9 = (r0 + r9)|0;
+ r8 = (r5 + r8)|0;
+ r9 = r9 >> 2;
+ heap32[(r1+91)] = r7;
+ r7 = r8 >> 2;
+ r8 = heap32[(r9+87)];
+ heap32[(r7)] = r8;
+ r7 = heap32[(r6+8)];
+ r8 = r7 << 2;
+ r5 = (r5 + r8)|0;
+ r5 = r5 >> 2;
+ r5 = heap32[(r5)];
+ r7 = (r7 + 1)|0;
+ heap32[(r6+8)] = r7;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r3;
+ heap32[(g0+2)] = r5;
+ _ZNK12gjkepa2_impl3GJK10getsupportERK9btVector3RNS0_3sSVE(i7);
+ heap32[(g0)] = r0;
+ _ZN12gjkepa2_impl3GJK13EncloseOriginEv(i7);
+ r3 = r_g0;
+ if(r3 !=0) //_LBB544_26
+{
+__label__ = 25;
+break _1;
+}
+else{
+ r3 = heap32[(r1+93)];
+ r5 = r3 >> 2;
+ r6 = heap32[(r5+8)];
+ r6 = (r6 + -1)|0;
+ r7 = heap32[(r1+91)];
+ r8 = r6 << 2;
+ r3 = (r3 + r8)|0;
+ r8 = (r0 + 348)|0;
+ r9 = r7 << 2;
+ r9 = (r8 + r9)|0;
+ r3 = r3 >> 2;
+ heap32[(r5+8)] = r6;
+ r5 = r9 >> 2;
+ r3 = heap32[(r3)];
+ r6 = (r7 + 1)|0;
+ heap32[(r5)] = r3;
+ heap32[(r1+91)] = r6;
+ f0 = heapFloat[(r4+2)];
+ f1 = heapFloat[(r4+1)];
+ f2 = heapFloat[(fp+-16)];
+ r3 = sp + -48;
+ f2 = -f2;
+ r4 = r3 >> 2;
+ f1 = -f1;
+ heapFloat[(fp+-12)] = f2;
+ f0 = -f0;
+ heapFloat[(r4+1)] = f1;
+ heapFloat[(r4+2)] = f0;
+ heap32[(r4+3)] = 0;
+ r4 = heap32[(r1+93)];
+ r5 = r4 >> 2;
+ r6 = heap32[(r5+8)];
+ r6 = r6 << 2;
+ r6 = (r4 + r6)|0;
+ r6 = r6 >> 2;
+ heap32[(r6+4)] = 0;
+ r6 = heap32[(r1+91)];
+ r6 = (r6 + -1)|0;
+ r7 = heap32[(r5+8)];
+ r9 = r6 << 2;
+ r7 = r7 << 2;
+ r8 = (r8 + r9)|0;
+ r7 = (r4 + r7)|0;
+ r8 = r8 >> 2;
+ heap32[(r1+91)] = r6;
+ r6 = r7 >> 2;
+ r7 = heap32[(r8)];
+ heap32[(r6)] = r7;
+ r6 = heap32[(r5+8)];
+ r7 = r6 << 2;
+ r4 = (r4 + r7)|0;
+ r4 = r4 >> 2;
+ r4 = heap32[(r4)];
+ r6 = (r6 + 1)|0;
+ heap32[(r5+8)] = r6;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r3;
+ heap32[(g0+2)] = r4;
+ _ZNK12gjkepa2_impl3GJK10getsupportERK9btVector3RNS0_3sSVE(i7);
+ heap32[(g0)] = r0;
+ _ZN12gjkepa2_impl3GJK13EncloseOriginEv(i7);
+ r3 = r_g0;
+ if(r3 !=0) //_LBB544_26
+{
+__label__ = 25;
+break _1;
+}
+else{
+ r3 = heap32[(r1+93)];
+ r4 = r3 >> 2;
+ r5 = heap32[(r4+8)];
+ r5 = (r5 + -1)|0;
+ r6 = heap32[(r1+91)];
+ r7 = r5 << 2;
+ r8 = r6 << 2;
+ r3 = (r3 + r7)|0;
+ r7 = (r0 + r8)|0;
+ r3 = r3 >> 2;
+ heap32[(r4+8)] = r5;
+ r4 = r7 >> 2;
+ r3 = heap32[(r3)];
+ r2 = (r2 + 1)|0;
+ r5 = (r6 + 1)|0;
+ heap32[(r4+87)] = r3;
+ heap32[(r1+91)] = r5;
+continue _16;
+}
+}
+}
+else{
+__label__ = 24;
+break _1;
+}
+}
+}
+else{
+ if(r4 ==2) //_LBB544_10
+{
+ r2 = heap32[(r3+1)];
+ r3 = heap32[(r3)];
+ r2 = r2 >> 2;
+ r3 = r3 >> 2;
+ f0 = heapFloat[(r2+6)];
+ f1 = heapFloat[(r3+6)];
+ f2 = heapFloat[(r2+5)];
+ f3 = heapFloat[(r3+5)];
+ f4 = heapFloat[(r2+4)];
+ f5 = heapFloat[(r3+4)];
+ f0 = f0-f1;
+ f1 = f2-f3;
+ f2 = f4-f5;
+ r2 = 0;
+_23: while(true){
+ if(uint(r2) <uint(3)) //_LBB544_11
+{
+ r3 = sp + -80;
+ r4 = r3 >> 2;
+ heap32[(fp+-20)] = 0;
+ r5 = r2 << 2;
+ heap32[(r4+1)] = 0;
+ r3 = (r3 + r5)|0;
+ heap32[(r4+2)] = 0;
+ r3 = r3 >> 2;
+ heap32[(r4+3)] = 0;
+ heap32[(r3)] = 1065353216;
+ f3 = heapFloat[(r4+2)];
+ f4 = heapFloat[(r4+1)];
+ f5 = heapFloat[(fp+-20)];
+ f6 = f1*f3;
+ f7 = f0*f4;
+ r3 = sp + -96;
+ f6 = f6-f7;
+ f7 = f0*f5;
+ f3 = f2*f3;
+ f3 = f7-f3;
+ r4 = r3 >> 2;
+ heapFloat[(fp+-24)] = f6;
+ f4 = f2*f4;
+ f5 = f1*f5;
+ f4 = f4-f5;
+ heapFloat[(r4+1)] = f3;
+ f5 = f6*f6;
+ f3 = f3*f3;
+ heapFloat[(r4+2)] = f4;
+ f3 = f5+f3;
+ f4 = f4*f4;
+ f3 = f3+f4;
+ f4 = 0;
+ heap32[(r4+3)] = 0;
+if(!(f3 <=f4)) //_LBB544_15
+{
+ r5 = heap32[(r1+93)];
+ r6 = r5 >> 2;
+ r7 = heap32[(r6+8)];
+ r7 = r7 << 2;
+ r7 = (r5 + r7)|0;
+ r7 = r7 >> 2;
+ heap32[(r7+4)] = 0;
+ r7 = heap32[(r1+91)];
+ r7 = (r7 + -1)|0;
+ r8 = heap32[(r6+8)];
+ r9 = r7 << 2;
+ r8 = r8 << 2;
+ r9 = (r0 + r9)|0;
+ r8 = (r5 + r8)|0;
+ r9 = r9 >> 2;
+ heap32[(r1+91)] = r7;
+ r7 = r8 >> 2;
+ r8 = heap32[(r9+87)];
+ heap32[(r7)] = r8;
+ r7 = heap32[(r6+8)];
+ r8 = r7 << 2;
+ r5 = (r5 + r8)|0;
+ r5 = r5 >> 2;
+ r5 = heap32[(r5)];
+ r7 = (r7 + 1)|0;
+ heap32[(r6+8)] = r7;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r3;
+ heap32[(g0+2)] = r5;
+ _ZNK12gjkepa2_impl3GJK10getsupportERK9btVector3RNS0_3sSVE(i7);
+ heap32[(g0)] = r0;
+ _ZN12gjkepa2_impl3GJK13EncloseOriginEv(i7);
+ r3 = r_g0;
+ if(r3 !=0) //_LBB544_26
+{
+__label__ = 25;
+break _1;
+}
+else{
+ r3 = heap32[(r1+93)];
+ r5 = r3 >> 2;
+ r6 = heap32[(r5+8)];
+ r6 = (r6 + -1)|0;
+ r7 = heap32[(r1+91)];
+ r8 = r6 << 2;
+ r3 = (r3 + r8)|0;
+ r8 = (r0 + 348)|0;
+ r9 = r7 << 2;
+ r9 = (r8 + r9)|0;
+ r3 = r3 >> 2;
+ heap32[(r5+8)] = r6;
+ r5 = r9 >> 2;
+ r3 = heap32[(r3)];
+ r6 = (r7 + 1)|0;
+ heap32[(r5)] = r3;
+ heap32[(r1+91)] = r6;
+ f3 = heapFloat[(r4+2)];
+ f4 = heapFloat[(r4+1)];
+ f5 = heapFloat[(fp+-24)];
+ r3 = sp + -32;
+ f5 = -f5;
+ r4 = r3 >> 2;
+ f4 = -f4;
+ heapFloat[(fp+-8)] = f5;
+ f3 = -f3;
+ heapFloat[(r4+1)] = f4;
+ heapFloat[(r4+2)] = f3;
+ heap32[(r4+3)] = 0;
+ r4 = heap32[(r1+93)];
+ r5 = r4 >> 2;
+ r6 = heap32[(r5+8)];
+ r6 = r6 << 2;
+ r6 = (r4 + r6)|0;
+ r6 = r6 >> 2;
+ heap32[(r6+4)] = 0;
+ r6 = heap32[(r1+91)];
+ r6 = (r6 + -1)|0;
+ r7 = heap32[(r5+8)];
+ r9 = r6 << 2;
+ r7 = r7 << 2;
+ r8 = (r8 + r9)|0;
+ r7 = (r4 + r7)|0;
+ r8 = r8 >> 2;
+ heap32[(r1+91)] = r6;
+ r6 = r7 >> 2;
+ r7 = heap32[(r8)];
+ heap32[(r6)] = r7;
+ r6 = heap32[(r5+8)];
+ r7 = r6 << 2;
+ r4 = (r4 + r7)|0;
+ r4 = r4 >> 2;
+ r4 = heap32[(r4)];
+ r6 = (r6 + 1)|0;
+ heap32[(r5+8)] = r6;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r3;
+ heap32[(g0+2)] = r4;
+ _ZNK12gjkepa2_impl3GJK10getsupportERK9btVector3RNS0_3sSVE(i7);
+ heap32[(g0)] = r0;
+ _ZN12gjkepa2_impl3GJK13EncloseOriginEv(i7);
+ r3 = r_g0;
+ if(r3 !=0) //_LBB544_26
+{
+__label__ = 25;
+break _1;
+}
+else{
+ r3 = heap32[(r1+93)];
+ r4 = r3 >> 2;
+ r5 = heap32[(r4+8)];
+ r5 = (r5 + -1)|0;
+ r6 = heap32[(r1+91)];
+ r7 = r5 << 2;
+ r8 = r6 << 2;
+ r3 = (r3 + r7)|0;
+ r7 = (r0 + r8)|0;
+ r3 = r3 >> 2;
+ heap32[(r4+8)] = r5;
+ r4 = r7 >> 2;
+ r3 = heap32[(r3)];
+ r5 = (r6 + 1)|0;
+ heap32[(r4+87)] = r3;
+ heap32[(r1+91)] = r5;
+}
+}
+}
+ r2 = (r2 + 1)|0;
+continue _23;
+}
+else{
+__label__ = 24;
+break _1;
+}
+}
+}
+else{
+__label__ = 24;
+}
+}
+}
+} while(0);
+switch(__label__ ){//multiple entries
+case 24:
+ r0 = 0;
+ r_g0 = r0;
+ return;
+break;
+case 25:
+ r0 = 1;
+ r_g0 = r0;
+ return;
+break;
+}
+}
+
+function _ZN12gjkepa2_impl3GJK13projectoriginERK9btVector3S3_S3_PfRj(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+ var r13;
+ var r14;
+ var r15;
+ var r16;
+ var r17;
+ var r18;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+ var f10;
+ var f11;
+ var f12;
+ var f13;
+ var f14;
+ var f15;
+ var f16;
+ var f17;
+ var f18;
+ var f19;
+ var f20;
+var __label__ = 0;
+ i7 = sp + -96;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = sp + -12;
+ r2 = heap32[(fp+1)];
+ r3 = r1 >> 2;
+ heap32[(fp+-3)] = r0;
+ r4 = heap32[(fp+2)];
+ heap32[(r3+1)] = r2;
+ r5 = r0 >> 2;
+ heap32[(r3+2)] = r4;
+ r2 = r2 >> 2;
+ f0 = heapFloat[(r5+2)];
+ f1 = heapFloat[(r2+2)];
+ f2 = heapFloat[(r5+1)];
+ f3 = heapFloat[(r2+1)];
+ f4 = heapFloat[(r5)];
+ f5 = heapFloat[(r2)];
+ r3 = sp + -64;
+ f6 = f4-f5;
+ f7 = f2-f3;
+ r6 = r3 >> 2;
+ heapFloat[(fp+-16)] = f6;
+ f8 = f0-f1;
+ heapFloat[(r6+1)] = f7;
+ heapFloat[(r6+2)] = f8;
+ r4 = r4 >> 2;
+ heap32[(r6+3)] = 0;
+ f9 = heapFloat[(r4+2)];
+ f10 = heapFloat[(r4+1)];
+ f11 = heapFloat[(r4)];
+ f5 = f5-f11;
+ f3 = f3-f10;
+ heapFloat[(r6+4)] = f5;
+ f1 = f1-f9;
+ heapFloat[(r6+5)] = f3;
+ heapFloat[(r6+6)] = f1;
+ f12 = f8*f5;
+ f13 = f6*f1;
+ f14 = f7*f1;
+ f15 = f8*f3;
+ f12 = f12-f13;
+ f13 = f14-f15;
+ f11 = f11-f4;
+ heap32[(r6+7)] = 0;
+ f14 = f6*f3;
+ f15 = f7*f5;
+ f14 = f14-f15;
+ f10 = f10-f2;
+ heapFloat[(r6+8)] = f11;
+ f15 = f13*f13;
+ f16 = f12*f12;
+ f9 = f9-f0;
+ heapFloat[(r6+9)] = f10;
+ f15 = f15+f16;
+ f16 = f14*f14;
+ f15 = f15+f16;
+ heapFloat[(r6+10)] = f9;
+ heap32[(r6+11)] = 0;
+ f16 = 0;
+ if(f15 >f16) //_LBB545_2
+{
+ r6 = heap32[(fp+3)];
+ r7 = heap32[(fp+4)];
+ r8 = sp + -72;
+ r9 = r8 >> 2;
+ heap32[(fp+-18)] = 0;
+ r10 = 0;
+ f17 = -1;
+ heap32[(r9+1)] = 0;
+ heap32[(fp+-19)] = 0;
+ r18 = 0;
+_3: while(true){
+ f18 = f7*f14;
+ f19 = f8*f12;
+ f8 = f8*f13;
+ f20 = f6*f14;
+ f18 = f18-f19;
+ f8 = f8-f20;
+ f6 = f6*f12;
+ f7 = f7*f13;
+ f4 = f4*f18;
+ f2 = f2*f8;
+ f6 = f6-f7;
+ f2 = f4+f2;
+ f0 = f0*f6;
+ f0 = f2+f0;
+_5: do {
+ if(f0 >f16) //_LBB545_5
+{
+ r11 = _ZZN12gjkepa2_impl3GJK13projectoriginERK9btVector3S3_S3_PfRjE4imd3;
+ r12 = r10 << 2;
+ r13 = (r11 + r12)|0;
+ r13 = r13 >> 2;
+ r13 = heap32[(r13)];
+ r14 = r13 << 2;
+ r15 = (r1 + r14)|0;
+ r15 = r15 >> 2;
+ r15 = heap32[(r15)];
+ r16 = sp + -76;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r15;
+ heap32[(g0+2)] = r8;
+ heap32[(g0+3)] = r16;
+ _ZN12gjkepa2_impl3GJK13projectoriginERK9btVector3S3_PfRj(i7);
+ f0 = f_g0;
+if(!(f17 <f16)) //_LBB545_7
+{
+ if(f0 >=f17) //_LBB545_4
+{
+break _5;
+}
+}
+ r0 = heap32[(fp+-19)];
+ r15 = 1;
+ r11 = (r11 + r14)|0;
+ r16 = r0 & 1;
+ r17 = r15 << r10;
+ r0 = r0 & 2;
+ r13 = r15 << r13;
+ r11 = r11 >> 2;
+ r15 = r16 == 0 ? r18 : r17;
+ r0 = r0 == 0 ? r18 : r13;
+ r11 = heap32[(r11)];
+ r12 = (r6 + r12)|0;
+ r13 = r7 >> 2;
+ r0 = (r15 + r0)|0;
+ r11 = r11 << 2;
+ r14 = (r6 + r14)|0;
+ r12 = r12 >> 2;
+ heap32[(r13)] = r0;
+ r0 = (r6 + r11)|0;
+ r11 = r14 >> 2;
+ heap32[(r12)] = heap32[(fp+-18)];
+ r0 = r0 >> 2;
+ heap32[(r11)] = heap32[(r9+1)];
+ heap32[(r0)] = 0;
+ f17 = f0;
+}
+} while(0);
+ if(r10 ==2) //_LBB545_10
+{
+break _3;
+}
+else{
+ r11 = (r10 + 1)|0;
+ r0 = r10 << 2;
+ r0 = (r1 + r0)|0;
+ r0 = r0 >> 2;
+ r10 = r10 << 4;
+ r0 = heap32[(r0+1)];
+ r10 = (r3 + r10)|0;
+ r10 = r10 >> 2;
+ r12 = r0 >> 2;
+ f6 = heapFloat[(r10+4)];
+ f7 = heapFloat[(r10+5)];
+ f8 = heapFloat[(r10+6)];
+ f4 = heapFloat[(r12)];
+ f2 = heapFloat[(r12+1)];
+ f0 = heapFloat[(r12+2)];
+ r10 = r11;
+}
+}
+ if(f17 <f16) //_LBB545_12
+{
+ f17 = heapFloat[(r5)];
+ f0 = heapFloat[(r5+1)];
+ f2 = heapFloat[(r5+2)];
+ f17 = f17*f13;
+ f0 = f0*f12;
+ heapFloat[(g0)] = f15;
+ f17 = f17+f0;
+ f0 = f2*f14;
+ f17 = f17+f0;
+ r0 = r7 >> 2;
+ sqrtf(i7);
+ f0 = f_g0;
+ f17 = f17/f15;
+ heap32[(r0)] = 7;
+ f2 = f13*f17;
+ f4 = heapFloat[(r2)];
+ f6 = f12*f17;
+ f7 = heapFloat[(r2+1)];
+ f8 = heapFloat[(r2+2)];
+ f17 = f14*f17;
+ f7 = f7-f6;
+ f8 = f8-f17;
+ f4 = f4-f2;
+ f12 = f3*f8;
+ f13 = f1*f7;
+ f1 = f1*f4;
+ f8 = f5*f8;
+ f12 = f12-f13;
+ f1 = f1-f8;
+ f5 = f5*f7;
+ f3 = f3*f4;
+ f3 = f5-f3;
+ f4 = f12*f12;
+ f1 = f1*f1;
+ f1 = f4+f1;
+ f3 = f3*f3;
+ f1 = f1+f3;
+ heapFloat[(g0)] = f1;
+ sqrtf(i7);
+ r0 = r6 >> 2;
+ f1 = f_g0/f0;
+ heapFloat[(r0)] = f1;
+ f1 = heapFloat[(r4+2)];
+ f3 = heapFloat[(r4+1)];
+ f4 = heapFloat[(r4)];
+ f3 = f3-f6;
+ f1 = f1-f17;
+ f4 = f4-f2;
+ f5 = f10*f1;
+ f7 = f9*f3;
+ f8 = f9*f4;
+ f1 = f11*f1;
+ f5 = f5-f7;
+ f1 = f8-f1;
+ f3 = f11*f3;
+ f4 = f10*f4;
+ f3 = f3-f4;
+ f4 = f5*f5;
+ f1 = f1*f1;
+ f1 = f4+f1;
+ f3 = f3*f3;
+ f1 = f1+f3;
+ heapFloat[(g0)] = f1;
+ sqrtf(i7);
+ f0 = f_g0/f0;
+ heapFloat[(r0+1)] = f0;
+ f1 = heapFloat[(r0)];
+ f3 = 1;
+ f0 = f1+f0;
+ f1 = f2*f2;
+ f2 = f6*f6;
+ f0 = f3-f0;
+ f1 = f1+f2;
+ f17 = f17*f17;
+ heapFloat[(r0+2)] = f0;
+ f17 = f1+f17;
+}
+}
+else{
+ f17 = -1;
+}
+ f_g0 = f17;
+ return;
+}
+
+function _ZN12gjkepa2_impl3GJK8EvaluateERKNS_13MinkowskiDiffERK9btVector3(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+ var r13;
+ var r14;
+ var r15;
+ var r16;
+ var r17;
+ var r18;
+ var r19;
+ var r20;
+ var r21;
+ var r22;
+ var r23;
+ var r24;
+ var r25;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+ var f10;
+ var f11;
+ var f12;
+ var f13;
+ var f14;
+ var f15;
+ var f16;
+ var f17;
+ var f18;
+ var f19;
+ var f20;
+ var f21;
+ var f22;
+ var f23;
+var __label__ = 0;
+ i7 = sp + -240;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ r2 = (r0 + 220)|0;
+ r3 = (r0 + 252)|0;
+ heap32[(r1+87)] = r2;
+ r2 = (r0 + 284)|0;
+ heap32[(r1+88)] = r3;
+ r3 = (r0 + 316)|0;
+ heap32[(r1+89)] = r2;
+ heap32[(r1+90)] = r3;
+ heap32[(r1+91)] = 4;
+ r2 = heap32[(fp+1)];
+ heap32[(r1+92)] = 0;
+ r2 = r2 >> 2;
+ heap32[(r1+94)] = 0;
+ r4 = heap32[(r2+1)];
+ r5 = heap32[(r2)];
+ heap32[(r1)] = r5;
+ heap32[(r1+1)] = r4;
+ heap32[(r1+2)] = heap32[(r2+2)];
+ heap32[(r1+3)] = heap32[(r2+3)];
+ heap32[(r1+4)] = heap32[(r2+4)];
+ heap32[(r1+5)] = heap32[(r2+5)];
+ heap32[(r1+6)] = heap32[(r2+6)];
+ heap32[(r1+7)] = heap32[(r2+7)];
+ heap32[(r1+8)] = heap32[(r2+8)];
+ heap32[(r1+9)] = heap32[(r2+9)];
+ heap32[(r1+10)] = heap32[(r2+10)];
+ heap32[(r1+11)] = heap32[(r2+11)];
+ heap32[(r1+12)] = heap32[(r2+12)];
+ heap32[(r1+13)] = heap32[(r2+13)];
+ heap32[(r1+14)] = heap32[(r2+14)];
+ heap32[(r1+15)] = heap32[(r2+15)];
+ heap32[(r1+16)] = heap32[(r2+16)];
+ heap32[(r1+17)] = heap32[(r2+17)];
+ heap32[(r1+18)] = heap32[(r2+18)];
+ heap32[(r1+19)] = heap32[(r2+19)];
+ heap32[(r1+20)] = heap32[(r2+20)];
+ heap32[(r1+21)] = heap32[(r2+21)];
+ heap32[(r1+22)] = heap32[(r2+22)];
+ heap32[(r1+23)] = heap32[(r2+23)];
+ heap32[(r1+24)] = heap32[(r2+24)];
+ heap32[(r1+25)] = heap32[(r2+25)];
+ heap32[(r1+26)] = heap32[(r2+26)];
+ heap32[(r1+27)] = heap32[(r2+27)];
+ heap32[(r1+28)] = heap32[(r2+28)];
+ heap32[(r1+29)] = heap32[(r2+29)];
+ r4 = heap32[(r2+31)];
+ r2 = heap32[(r2+30)];
+ heap32[(r1+30)] = r2;
+ heap32[(r1+31)] = r4;
+ r2 = heap32[(fp+2)];
+ heap32[(r1+36)] = 0;
+ r2 = r2 >> 2;
+ heap32[(r1+45)] = 0;
+ f0 = heapFloat[(r2)];
+ heapFloat[(r1+32)] = f0;
+ f1 = heapFloat[(r2+1)];
+ heapFloat[(r1+33)] = f1;
+ f2 = heapFloat[(r2+2)];
+ f3 = f0*f0;
+ f4 = f1*f1;
+ f3 = f3+f4;
+ f4 = f2*f2;
+ f3 = f3+f4;
+ heapFloat[(r1+34)] = f2;
+ heap32[(r1+35)] = heap32[(r2+3)];
+ f4 = 0;
+ if(f3 <=f4) //_LBB546_2
+{
+ r2 = sp + -112;
+ r2 = r2 >> 2;
+ heap32[(fp+-28)] = 1065353216;
+ heap32[(r2+1)] = 0;
+ heap32[(r2+2)] = 0;
+ heap32[(r2+3)] = 0;
+}
+else{
+ r2 = sp + -112;
+ f0 = -f0;
+ r2 = r2 >> 2;
+ f1 = -f1;
+ heapFloat[(fp+-28)] = f0;
+ f0 = -f2;
+ heapFloat[(r2+1)] = f1;
+ heapFloat[(r2+2)] = f0;
+ heap32[(r2+3)] = 0;
+}
+ heap32[(r1+41)] = 0;
+ heap32[(r1+91)] = 3;
+ heap32[(r1+37)] = r3;
+ heap32[(r1+45)] = 1;
+ r2 = sp + -112;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r2;
+ heap32[(g0+2)] = r3;
+ _ZNK12gjkepa2_impl3GJK10getsupportERK9btVector3RNS0_3sSVE(i7);
+ heap32[(r1+41)] = 1065353216;
+ r2 = heap32[(r1+37)];
+ r2 = r2 >> 2;
+ f0 = heapFloat[(r2+4)];
+ heapFloat[(r1+32)] = f0;
+ f1 = heapFloat[(r2+5)];
+ heapFloat[(r1+33)] = f1;
+ f2 = heapFloat[(r2+6)];
+ heapFloat[(r1+34)] = f2;
+ f5 = heapFloat[(r2+7)];
+ r2 = sp + -176;
+ r3 = r2 >> 2;
+ heapFloat[(r1+35)] = f5;
+ heapFloat[(r3+12)] = f0;
+ heapFloat[(r3+13)] = f1;
+ heapFloat[(r3+14)] = f2;
+ heapFloat[(r3+15)] = f5;
+ heapFloat[(r3+8)] = f0;
+ heapFloat[(r3+9)] = f1;
+ heapFloat[(r3+10)] = f2;
+ heapFloat[(r3+11)] = f5;
+ heapFloat[(r3+4)] = f0;
+ heapFloat[(r3+5)] = f1;
+ heapFloat[(r3+6)] = f2;
+ heapFloat[(r3+7)] = f5;
+ heapFloat[(fp+-44)] = f0;
+ heapFloat[(r3+1)] = f1;
+ r4 = (r0 + 148)|0;
+ heap32[(fp+-52)] = r4;
+ r4 = 0;
+ r5 = 1;
+ heap32[(fp+-53)] = r5;
+ heapFloat[(r3+2)] = f2;
+ heapFloat[(r3+3)] = f5;
+ heap32[(fp+-50)] = r5;
+ r24 = 0;
+_5: while(true){
+ f0 = f0*f0;
+ f1 = f1*f1;
+ r3 = heap32[(r1+92)];
+ f0 = f0+f1;
+ f1 = f2*f2;
+ f0 = f0+f1;
+ heapFloat[(g0)] = f0;
+ sqrtf(i7);
+ f0 = f_g0;
+ f1 = 9.9999997473787516e-005;
+ if(f0 >=f1) //_LBB546_6
+{
+ r5 = heap32[(fp+-53)];
+ r5 = (r5 - r3)|0;
+ heap32[(fp+-51)] = r5;
+ f2 = heapFloat[(r1+34)];
+ f5 = heapFloat[(r1+33)];
+ f6 = heapFloat[(r1+32)];
+ r5 = sp + -96;
+ f6 = -f6;
+ r6 = r5 >> 2;
+ f5 = -f5;
+ heapFloat[(fp+-24)] = f6;
+ r3 = (r3 * 36)|0;
+ f2 = -f2;
+ heapFloat[(r6+1)] = f5;
+ r7 = (r0 + r3)|0;
+ heapFloat[(r6+2)] = f2;
+ heap32[(r6+3)] = 0;
+ r6 = r7 >> 2;
+ r8 = heap32[(r6+45)];
+ r8 = r8 << 2;
+ r8 = (r7 + r8)|0;
+ r8 = r8 >> 2;
+ heap32[(r8+41)] = 0;
+ r8 = heap32[(r1+91)];
+ r8 = (r8 + -1)|0;
+ r9 = heap32[(r6+45)];
+ r10 = r8 << 2;
+ r10 = (r0 + r10)|0;
+ r9 = r9 << 2;
+ r7 = (r7 + 148)|0;
+ r9 = (r7 + r9)|0;
+ r10 = r10 >> 2;
+ heap32[(r1+91)] = r8;
+ r8 = r9 >> 2;
+ r9 = heap32[(r10+87)];
+ heap32[(r8)] = r9;
+ r8 = heap32[(r6+45)];
+ r9 = r8 << 2;
+ r9 = (r7 + r9)|0;
+ r9 = r9 >> 2;
+ r9 = heap32[(r9)];
+ r8 = (r8 + 1)|0;
+ heap32[(r6+45)] = r8;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r5;
+ heap32[(g0+2)] = r9;
+ _ZNK12gjkepa2_impl3GJK10getsupportERK9btVector3RNS0_3sSVE(i7);
+ r5 = heap32[(r6+45)];
+ r8 = r5 << 2;
+ r7 = (r8 + r7)|0;
+ r7 = r7 >> 2;
+ r7 = heap32[(r7+-1)];
+ r8 = 0;
+_8: while(true){
+ if(uint(r8) <uint(4)) //_LBB546_7
+{
+ r9 = r8 << 4;
+ r9 = (r2 + r9)|0;
+ r10 = r7 >> 2;
+ r9 = r9 >> 2;
+ f2 = heapFloat[(r10+4)];
+ f5 = heapFloat[(r9)];
+ f6 = heapFloat[(r10+5)];
+ f7 = heapFloat[(r9+1)];
+ f2 = f2-f5;
+ f5 = f6-f7;
+ f6 = heapFloat[(r10+6)];
+ f7 = heapFloat[(r9+2)];
+ f6 = f6-f7;
+ f2 = f2*f2;
+ f5 = f5*f5;
+ f2 = f2+f5;
+ f5 = f6*f6;
+ f2 = f2+f5;
+ if(f2 <f1) //_LBB546_10
+{
+__label__ = 10;
+break _5;
+}
+else{
+ r8 = (r8 + 1)|0;
+}
+}
+else{
+break _8;
+}
+}
+ r8 = heap32[(fp+-50)];
+ r8 = r8 << 4;
+ r8 = (r2 + r8)|0;
+ r8 = r8 >> 2;
+ r7 = r7 >> 2;
+ heap32[(r8)] = heap32[(r7+4)];
+ heap32[(r8+1)] = heap32[(r7+5)];
+ heap32[(r8+2)] = heap32[(r7+6)];
+ heap32[(r8+3)] = heap32[(r7+7)];
+ f1 = heapFloat[(r1+32)];
+ f2 = heapFloat[(r7+4)];
+ f5 = heapFloat[(r1+33)];
+ f6 = heapFloat[(r7+5)];
+ f1 = f1*f2;
+ f2 = f5*f6;
+ f5 = heapFloat[(r1+34)];
+ f6 = heapFloat[(r7+6)];
+ f1 = f1+f2;
+ f2 = f5*f6;
+ f1 = f1+f2;
+ f1 = f1/f0;
+ f4 = f1 > f4 ? f1 : f4;
+ f1 = -9.9999997473787516e-005;
+ f2 = f0-f4;
+ f0 = f0*f1;
+ f0 = f2+f0;
+ f5 = 0;
+ if(f0 >f5) //_LBB546_13
+{
+ heap32[(fp+-49)] = 0;
+_14: do {
+ if(r5 ==2) //_LBB546_17
+{
+ r5 = heap32[(r6+38)];
+ r7 = heap32[(r6+37)];
+ r7 = (r7 + 16)|0;
+ r5 = (r5 + 16)|0;
+ r8 = sp + -192;
+ r9 = sp + -196;
+ heap32[(g0)] = r7;
+ heap32[(g0+1)] = r5;
+ heap32[(g0+2)] = r8;
+ heap32[(g0+3)] = r9;
+ _ZN12gjkepa2_impl3GJK13projectoriginERK9btVector3S3_PfRj(i7);
+ f3 = f_g0;
+__label__ = 32;
+break _14;
+}
+else{
+ if(r5 ==3) //_LBB546_18
+{
+ r5 = heap32[(r6+39)];
+ r7 = heap32[(r6+38)];
+ r8 = heap32[(r6+37)];
+ r8 = (r8 + 16)|0;
+ r7 = (r7 + 16)|0;
+ r5 = (r5 + 16)|0;
+ r9 = sp + -192;
+ r10 = sp + -196;
+ heap32[(g0)] = r8;
+ heap32[(g0+1)] = r7;
+ heap32[(g0+2)] = r5;
+ heap32[(g0+3)] = r9;
+ heap32[(g0+4)] = r10;
+ _ZN12gjkepa2_impl3GJK13projectoriginERK9btVector3S3_S3_PfRj(i7);
+ f3 = f_g0;
+__label__ = 32;
+}
+else{
+ if(r5 ==4) //_LBB546_19
+{
+ r5 = heap32[(r6+40)];
+ r7 = heap32[(r6+39)];
+ r8 = heap32[(r6+38)];
+ r9 = heap32[(r6+37)];
+ r10 = sp + -16;
+ r11 = (r9 + 16)|0;
+ r12 = r10 >> 2;
+ r13 = (r8 + 16)|0;
+ heap32[(fp+-4)] = r11;
+ r11 = (r7 + 16)|0;
+ heap32[(r12+1)] = r13;
+ r13 = (r5 + 16)|0;
+ heap32[(r12+2)] = r11;
+ r9 = r9 >> 2;
+ heap32[(r12+3)] = r13;
+ r5 = r5 >> 2;
+ f0 = heapFloat[(r9+6)];
+ f1 = heapFloat[(r5+6)];
+ f2 = heapFloat[(r9+5)];
+ f3 = heapFloat[(r5+5)];
+ f6 = heapFloat[(r9+4)];
+ f7 = heapFloat[(r5+4)];
+ r11 = sp + -64;
+ f8 = f6-f7;
+ f9 = f2-f3;
+ r12 = r11 >> 2;
+ heapFloat[(fp+-16)] = f8;
+ f10 = f0-f1;
+ heapFloat[(r12+1)] = f9;
+ heapFloat[(r12+2)] = f10;
+ r8 = r8 >> 2;
+ heap32[(r12+3)] = 0;
+ f11 = heapFloat[(r8+6)];
+ f12 = heapFloat[(r8+5)];
+ f13 = heapFloat[(r8+4)];
+ f14 = f13-f7;
+ f15 = f12-f3;
+ heapFloat[(r12+4)] = f14;
+ f16 = f11-f1;
+ heapFloat[(r12+5)] = f15;
+ heapFloat[(r12+6)] = f16;
+ r7 = r7 >> 2;
+ heap32[(r12+7)] = 0;
+ f17 = heapFloat[(r7+5)];
+ f18 = heapFloat[(r7+4)];
+ f19 = f9*f16;
+ f7 = f18-f7;
+ f20 = f10*f14;
+ f3 = f17-f3;
+ f21 = heapFloat[(r7+6)];
+ f16 = f8*f16;
+ f19 = f19*f7;
+ f20 = f20*f3;
+ f22 = f11-f21;
+ f23 = f2-f12;
+ f18 = f13-f18;
+ f11 = f0-f11;
+ f12 = f12-f17;
+ f13 = f6-f13;
+ f17 = f19+f20;
+ f16 = f16*f3;
+ f14 = f9*f14;
+ f1 = f21-f1;
+ f19 = f8*f15;
+ f20 = f12*f11;
+ f21 = f22*f23;
+ f22 = f22*f13;
+ f11 = f18*f11;
+ f16 = f17-f16;
+ f14 = f14*f1;
+ f17 = f20-f21;
+ f11 = f22-f11;
+ f15 = f10*f15;
+ heapFloat[(r12+8)] = f7;
+ f18 = f18*f23;
+ f12 = f12*f13;
+ f13 = f16-f14;
+ f14 = f19*f1;
+ f12 = f18-f12;
+ heapFloat[(r12+9)] = f3;
+ f3 = f6*f17;
+ f2 = f2*f11;
+ f6 = f13+f14;
+ f7 = f15*f7;
+ f6 = f6-f7;
+ heapFloat[(r12+10)] = f1;
+ f1 = f3+f2;
+ f0 = f0*f12;
+ f0 = f1+f0;
+ heap32[(r12+11)] = 0;
+ f0 = f0*f6;
+ if(f0 >f5) //_LBB546_45
+{
+__label__ = 42;
+break _5;
+}
+else{
+ if(f6 <f5) //_LBB546_22
+{
+ f0 = -f6;
+}
+else{
+ f0 = f6;
+}
+ if(f0 <=f5) //_LBB546_45
+{
+__label__ = 42;
+break _5;
+}
+else{
+ r12 = sp + -76;
+ r14 = r12 >> 2;
+ heap32[(fp+-19)] = 0;
+ heap32[(r14+1)] = 0;
+ r15 = 0;
+ f3 = -1;
+ heap32[(r14+2)] = 0;
+ heap32[(fp+-20)] = 0;
+_27: while(true){
+ r16 = _ZZN12gjkepa2_impl3GJK13projectoriginERK9btVector3S3_S3_PfRjE4imd3;
+ r17 = r15 << 2;
+ r18 = (r16 + r17)|0;
+ r18 = r18 >> 2;
+ r18 = heap32[(r18)];
+ r19 = r18 << 4;
+ r19 = (r11 + r19)|0;
+ r19 = r19 >> 2;
+ f0 = heapFloat[(r19+1)];
+ f1 = heapFloat[(r19+2)];
+ f2 = heapFloat[(r19)];
+ f7 = f9*f1;
+ f11 = f10*f0;
+ f10 = f10*f2;
+ f1 = f8*f1;
+ f12 = heapFloat[(r5+4)];
+ f7 = f7-f11;
+ f11 = heapFloat[(r5+5)];
+ f1 = f10-f1;
+ f0 = f8*f0;
+ f2 = f9*f2;
+ f8 = f12*f7;
+ f1 = f11*f1;
+ f9 = heapFloat[(r5+6)];
+ f0 = f0-f2;
+ f1 = f8+f1;
+ f0 = f9*f0;
+ f0 = f1+f0;
+ f0 = f0*f6;
+_29: do {
+ if(f0 >f5) //_LBB546_27
+{
+ r19 = r18 << 2;
+ r20 = (r10 + r19)|0;
+ r21 = (r10 + r17)|0;
+ r20 = r20 >> 2;
+ r21 = r21 >> 2;
+ r20 = heap32[(r20)];
+ r21 = heap32[(r21)];
+ r22 = sp + -80;
+ heap32[(g0)] = r21;
+ heap32[(g0+1)] = r20;
+ heap32[(g0+2)] = r13;
+ heap32[(g0+3)] = r12;
+ heap32[(g0+4)] = r22;
+ _ZN12gjkepa2_impl3GJK13projectoriginERK9btVector3S3_S3_PfRj(i7);
+ f0 = f_g0;
+ f1 = 0;
+if(!(f3 <f1)) //_LBB546_29
+{
+ if(f0 >=f3) //_LBB546_26
+{
+break _29;
+}
+}
+ r20 = heap32[(fp+-20)];
+ r21 = 1;
+ r22 = r20 & 1;
+ r23 = r21 << r15;
+ r25 = r20 & 2;
+ r18 = r21 << r18;
+ r16 = (r16 + r19)|0;
+ r21 = r22 == 0 ? r24 : r23;
+ r18 = r25 == 0 ? r24 : r18;
+ r20 = r20 & 4;
+ r22 = 8;
+ r23 = sp + -192;
+ r16 = r16 >> 2;
+ r18 = (r21 + r18)|0;
+ r20 = r20 == 0 ? r24 : r22;
+ r16 = heap32[(r16)];
+ r17 = (r23 + r17)|0;
+ r18 = (r18 + r20)|0;
+ r16 = r16 << 2;
+ r19 = (r23 + r19)|0;
+ r17 = r17 >> 2;
+ heap32[(fp+-49)] = r18;
+ r16 = (r23 + r16)|0;
+ r18 = r19 >> 2;
+ heap32[(r17)] = heap32[(fp+-19)];
+ r16 = r16 >> 2;
+ heap32[(r18)] = heap32[(r14+1)];
+ r17 = r23 >> 2;
+ heap32[(r16)] = 0;
+ heap32[(r17+3)] = heap32[(r14+2)];
+ f3 = f0;
+}
+} while(0);
+ if(r15 ==2) //_LBB546_32
+{
+break _27;
+}
+else{
+ r16 = (r15 + 1)|0;
+ r15 = r15 << 4;
+ r15 = (r11 + r15)|0;
+ r15 = r15 >> 2;
+ f8 = heapFloat[(r15+4)];
+ f9 = heapFloat[(r15+5)];
+ f10 = heapFloat[(r15+6)];
+ r15 = r16;
+}
+}
+ if(f3 <f5) //_LBB546_34
+{
+ heap32[(fp+-49)] = 15;
+ f0 = heapFloat[(r7+5)];
+ f1 = heapFloat[(r8+6)];
+ f2 = heapFloat[(r8+4)];
+ f3 = heapFloat[(r7+6)];
+ f7 = heapFloat[(r7+4)];
+ f8 = f0*f1;
+ f9 = heapFloat[(r5+4)];
+ f10 = f3*f2;
+ f11 = heapFloat[(r5+5)];
+ f12 = f7*f1;
+ f8 = f8*f9;
+ f10 = f10*f11;
+ f13 = heapFloat[(r8+5)];
+ f14 = heapFloat[(r5+6)];
+ f15 = f0*f2;
+ f8 = f8+f10;
+ f10 = f12*f11;
+ f12 = f7*f13;
+ f8 = f8-f10;
+ f10 = f15*f14;
+ f15 = f3*f13;
+ f8 = f8-f10;
+ f10 = f12*f14;
+ f8 = f8+f10;
+ f10 = f15*f9;
+ f8 = f8-f10;
+ f8 = f8/f6;
+ heapFloat[(fp+-48)] = f8;
+ f10 = heapFloat[(r9+5)];
+ f12 = heapFloat[(r9+6)];
+ f15 = heapFloat[(r9+4)];
+ f16 = f10*f3;
+ f17 = f12*f7;
+ f18 = f13*f12;
+ f19 = f1*f15;
+ f3 = f15*f3;
+ f16 = f16*f9;
+ f17 = f17*f11;
+ f20 = f2*f12;
+ f7 = f10*f7;
+ f18 = f18*f9;
+ f19 = f19*f11;
+ f16 = f16+f17;
+ f3 = f3*f11;
+ f13 = f13*f15;
+ f15 = f15*f0;
+ f17 = f18+f19;
+ f11 = f20*f11;
+ f3 = f16-f3;
+ f7 = f7*f14;
+ f2 = f2*f10;
+ f0 = f12*f0;
+ f11 = f17-f11;
+ f12 = f13*f14;
+ f3 = f3-f7;
+ f7 = f15*f14;
+ f1 = f1*f10;
+ f10 = f11-f12;
+ f2 = f2*f14;
+ f3 = f3+f7;
+ f0 = f0*f9;
+ f0 = f3-f0;
+ f2 = f10+f2;
+ f1 = f1*f9;
+ r5 = sp + -192;
+ f1 = f2-f1;
+ f0 = f0/f6;
+ r5 = r5 >> 2;
+ f2 = f8+f0;
+ f1 = f1/f6;
+ heapFloat[(r5+1)] = f0;
+ f0 = 1;
+ f2 = f2+f1;
+ r7 = 15;
+ f0 = f0-f2;
+ heapFloat[(r5+2)] = f1;
+ heapFloat[(r5+3)] = f0;
+__label__ = 34;
+}
+else{
+__label__ = 32;
+}
+}
+}
+}
+else{
+__label__ = 32;
+}
+}
+}
+} while(0);
+if (__label__ == 32){
+ f0 = 0;
+ if(f3 <f0) //_LBB546_45
+{
+__label__ = 42;
+break _5;
+}
+else{
+ r7 = heap32[(fp+-49)];
+ f5 = f3;
+}
+}
+ r5 = heap32[(fp+-51)];
+ r8 = (r5 * 36)|0;
+ r8 = (r0 + r8)|0;
+ r9 = r8 >> 2;
+ heap32[(r9+45)] = 0;
+ heap32[(r1+32)] = 0;
+ heap32[(r1+33)] = 0;
+ heap32[(r1+34)] = 0;
+ heap32[(r1+35)] = 0;
+ heap32[(r1+92)] = r5;
+ r5 = heap32[(r6+45)];
+_42: do {
+if(!(r5 ==0)) //_LBB546_43
+{
+ r6 = heap32[(fp+-52)];
+ r3 = (r6 + r3)|0;
+ r6 = 0;
+_44: while(true){
+ r10 = 1;
+ r10 = r10 << r6;
+ r10 = r7 & r10;
+ if(r10 ==0) //_LBB546_41
+{
+ r10 = r6 << 2;
+ r11 = heap32[(r1+91)];
+ r10 = (r3 + r10)|0;
+ r12 = r11 << 2;
+ r10 = r10 >> 2;
+ r12 = (r0 + r12)|0;
+ r10 = heap32[(r10)];
+ r12 = r12 >> 2;
+ r11 = (r11 + 1)|0;
+ heap32[(r12+87)] = r10;
+ heap32[(r1+91)] = r11;
+}
+else{
+ r10 = r6 << 2;
+ r11 = (r3 + r10)|0;
+ r12 = heap32[(r9+45)];
+ r11 = r11 >> 2;
+ r13 = (r8 + 148)|0;
+ r12 = r12 << 2;
+ r12 = (r13 + r12)|0;
+ r14 = heap32[(r11)];
+ r12 = r12 >> 2;
+ r15 = sp + -192;
+ heap32[(r12)] = r14;
+ r12 = heap32[(r9+45)];
+ r10 = (r15 + r10)|0;
+ r14 = r12 << 2;
+ r10 = r10 >> 2;
+ r13 = (r13 + r14)|0;
+ f0 = heapFloat[(r10)];
+ r10 = r13 >> 2;
+ r12 = (r12 + 1)|0;
+ heapFloat[(r10+4)] = f0;
+ heap32[(r9+45)] = r12;
+ r10 = heap32[(r11)];
+ r10 = r10 >> 2;
+ f1 = heapFloat[(r10+4)];
+ f2 = heapFloat[(r10+6)];
+ f3 = heapFloat[(r10+5)];
+ f6 = heapFloat[(r1+32)];
+ f1 = f1*f0;
+ f1 = f6+f1;
+ heapFloat[(r1+32)] = f1;
+ f1 = f3*f0;
+ f3 = heapFloat[(r1+33)];
+ f1 = f3+f1;
+ heapFloat[(r1+33)] = f1;
+ f0 = f2*f0;
+ f1 = heapFloat[(r1+34)];
+ f0 = f1+f0;
+ heapFloat[(r1+34)] = f0;
+}
+ r6 = (r6 + 1)|0;
+if(!(r5 !=r6)) //_LBB546_39
+{
+break _42;
+}
+}
+}
+} while(0);
+if(!(r7 !=15)) //_LBB546_46
+{
+ heap32[(r1+94)] = 1;
+}
+ r4 = (r4 + 1)|0;
+ if(uint(r4) <uint(128)) //_LBB546_48
+{
+ r3 = heap32[(r1+94)];
+ if(r3 !=0) //_LBB546_50
+{
+__label__ = 47;
+break _5;
+}
+else{
+ r5 = heap32[(fp+-50)];
+ r3 = (r5 + 1)|0;
+ f0 = heapFloat[(r1+32)];
+ f1 = heapFloat[(r1+33)];
+ f2 = heapFloat[(r1+34)];
+ r5 = r3 & 3;
+ heap32[(fp+-50)] = r5;
+ f3 = f5;
+continue _5;
+}
+}
+else{
+__label__ = 44;
+break _5;
+}
+}
+else{
+__label__ = 12;
+break _5;
+}
+}
+else{
+__label__ = 5;
+break _5;
+}
+}
+switch(__label__ ){//multiple entries
+case 10:
+ r2 = heap32[(r1+92)];
+ r2 = (r2 * 36)|0;
+ r2 = (r0 + r2)|0;
+ r3 = r2 >> 2;
+ r4 = heap32[(r3+45)];
+ r4 = (r4 + -1)|0;
+ r5 = r4 << 2;
+ r6 = heap32[(r1+91)];
+ r2 = (r2 + r5)|0;
+ r5 = r6 << 2;
+ r2 = (r2 + 148)|0;
+ r5 = (r0 + r5)|0;
+ r2 = r2 >> 2;
+ heap32[(r3+45)] = r4;
+ r3 = r5 >> 2;
+ r2 = heap32[(r2)];
+ r4 = (r6 + 1)|0;
+ heap32[(r3+87)] = r2;
+ heap32[(r1+91)] = r4;
+break;
+case 42:
+ r2 = heap32[(r1+92)];
+ r2 = (r2 * 36)|0;
+ r2 = (r0 + r2)|0;
+ r4 = r2 >> 2;
+ r3 = heap32[(r4+45)];
+ r3 = (r3 + -1)|0;
+ r5 = r3 << 2;
+ r6 = heap32[(r1+91)];
+ r2 = (r2 + r5)|0;
+ r5 = r6 << 2;
+ r2 = (r2 + 148)|0;
+ r5 = (r0 + r5)|0;
+ r2 = r2 >> 2;
+ heap32[(r4+45)] = r3;
+ r4 = r5 >> 2;
+ r2 = heap32[(r2)];
+ r3 = (r6 + 1)|0;
+ heap32[(r4+87)] = r2;
+ heap32[(r1+91)] = r3;
+break;
+case 5:
+ heap32[(r1+94)] = 1;
+break;
+case 44:
+ heap32[(r1+94)] = 2;
+break;
+case 12:
+ r2 = heap32[(r1+92)];
+ r2 = (r2 * 36)|0;
+ r2 = (r0 + r2)|0;
+ r3 = r2 >> 2;
+ r4 = heap32[(r3+45)];
+ r4 = (r4 + -1)|0;
+ r5 = r4 << 2;
+ r6 = heap32[(r1+91)];
+ r2 = (r2 + r5)|0;
+ r5 = r6 << 2;
+ r2 = (r2 + 148)|0;
+ r5 = (r0 + r5)|0;
+ r2 = r2 >> 2;
+ heap32[(r3+45)] = r4;
+ r3 = r5 >> 2;
+ r2 = heap32[(r2)];
+ r4 = (r6 + 1)|0;
+ heap32[(r3+87)] = r2;
+ heap32[(r1+91)] = r4;
+break;
+}
+ r2 = heap32[(r1+92)];
+ r2 = (r2 * 36)|0;
+ r0 = (r0 + r2)|0;
+ r0 = (r0 + 148)|0;
+ heap32[(r1+93)] = r0;
+ r0 = heap32[(r1+94)];
+ if(r0 ==1) //_LBB546_53
+{
+ heap32[(r1+36)] = 0;
+ r0 = 1;
+}
+else{
+if(!(r0 !=0)) //_LBB546_54
+{
+ f0 = heapFloat[(r1+32)];
+ f1 = heapFloat[(r1+33)];
+ f2 = heapFloat[(r1+34)];
+ f0 = f0*f0;
+ f1 = f1*f1;
+ f0 = f0+f1;
+ f1 = f2*f2;
+ f0 = f0+f1;
+ heapFloat[(g0)] = f0;
+ sqrtf(i7);
+ heapFloat[(r1+36)] = f_g0;
+ r0 = heap32[(r1+94)];
+ r_g0 = r0;
+ return;
+}
+}
+ r_g0 = r0;
+ return;
+}
+
+function _ZN12gjkepa2_impl3EPA7newfaceEPNS_3GJK3sSVES3_S3_b(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+ var f10;
+ var f11;
+ var f12;
+ var f13;
+ var f14;
+ var f15;
+ var f16;
+ var f17;
+ var f18;
+ var f19;
+ var f20;
+ var f21;
+ var f22;
+ var f23;
+ var f24;
+ var f25;
+ var f26;
+ var f27;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r1 = heap32[(r0+2450)];
+_1: do {
+ if(r1 ==0) //_LBB547_23
+{
+ heap32[(r0)] = 5;
+ r1 = 0;
+}
+else{
+ r2 = r1 >> 2;
+ r3 = heap32[(r2+13)];
+if(!(r3 ==0)) //_LBB547_3
+{
+ r3 = r3 >> 2;
+ r4 = heap32[(r2+12)];
+ heap32[(r3+12)] = r4;
+}
+ r3 = heap32[(r2+12)];
+if(!(r3 ==0)) //_LBB547_5
+{
+ r3 = r3 >> 2;
+ r4 = heap32[(r2+13)];
+ heap32[(r3+13)] = r4;
+}
+ r3 = heap32[(r0+2450)];
+if(!(r3 !=r1)) //_LBB547_7
+{
+ r3 = heap32[(r2+13)];
+ heap32[(r0+2450)] = r3;
+}
+ r3 = heap32[(r0+2451)];
+ r3 = (r3 + -1)|0;
+ heap32[(r0+2451)] = r3;
+ heap32[(r2+12)] = 0;
+ r3 = heap32[(r0+2448)];
+ heap32[(r2+13)] = r3;
+ r3 = heap32[(r0+2448)];
+if(!(r3 ==0)) //_LBB547_9
+{
+ r3 = r3 >> 2;
+ heap32[(r3+12)] = r1;
+}
+ r3 = heap32[(fp+1)];
+ r4 = heap32[(fp+2)];
+ r5 = heap32[(fp+3)];
+ heap32[(r0+2448)] = r1;
+ r6 = heap32[(r0+2449)];
+ r6 = (r6 + 1)|0;
+ r7 = 0;
+ heap32[(r0+2449)] = r6;
+ heap8[r1+59] = r7;
+ heap32[(r2+6)] = r3;
+ heap32[(r2+7)] = r4;
+ heap32[(r2+8)] = r5;
+ r5 = r5 >> 2;
+ r3 = r3 >> 2;
+ r4 = r4 >> 2;
+ f0 = heapFloat[(r5+6)];
+ f1 = heapFloat[(r3+6)];
+ f2 = heapFloat[(r4+6)];
+ f3 = heapFloat[(r5+5)];
+ f4 = heapFloat[(r3+5)];
+ f5 = heapFloat[(r4+5)];
+ f5 = f5-f4;
+ f0 = f0-f1;
+ f1 = f2-f1;
+ f2 = f3-f4;
+ f3 = heapFloat[(r5+4)];
+ f4 = heapFloat[(r3+4)];
+ f6 = heapFloat[(r4+4)];
+ f3 = f3-f4;
+ f4 = f6-f4;
+ f6 = f5*f0;
+ f7 = f1*f2;
+ f6 = f6-f7;
+ f1 = f1*f3;
+ f0 = f4*f0;
+ f0 = f1-f0;
+ heapFloat[(r2)] = f6;
+ f1 = f4*f2;
+ f2 = f5*f3;
+ f1 = f1-f2;
+ heapFloat[(r2+1)] = f0;
+ heapFloat[(r2+2)] = f1;
+ f2 = f6*f6;
+ f0 = f0*f0;
+ heap32[(r2+3)] = 0;
+ f0 = f2+f0;
+ f1 = f1*f1;
+ f0 = f0+f1;
+ heapFloat[(g0)] = f0;
+ sqrtf(i7);
+ f0 = f_g0;
+ f1 = heapFloat[(r5+6)];
+ f2 = heapFloat[(r3+6)];
+ f3 = heapFloat[(r4+6)];
+ f4 = heapFloat[(r5+5)];
+ f5 = heapFloat[(r3+5)];
+ f6 = heapFloat[(r4+5)];
+ f7 = heapFloat[(r5+4)];
+ f8 = heapFloat[(r3+4)];
+ f9 = heapFloat[(r4+4)];
+ f10 = heapFloat[(r2)];
+ f11 = f2-f3;
+ f12 = heapFloat[(r2+1)];
+ f13 = f3-f1;
+ f14 = heapFloat[(r2+2)];
+ f15 = f5-f6;
+ f16 = f8-f9;
+ f17 = f6-f4;
+ f18 = f9-f7;
+ f19 = f1-f2;
+ f20 = f4-f5;
+ f21 = f7-f8;
+ f22 = f12*f11;
+ f23 = f14*f15;
+ f24 = f14*f16;
+ f11 = f10*f11;
+ f25 = f12*f13;
+ f26 = f14*f17;
+ f27 = f14*f18;
+ f13 = f10*f13;
+ f22 = f22-f23;
+ f11 = f24-f11;
+ f23 = f25-f26;
+ f13 = f27-f13;
+ f15 = f10*f15;
+ f16 = f12*f16;
+ f17 = f10*f17;
+ f18 = f12*f18;
+ f24 = f12*f19;
+ f25 = f14*f20;
+ f26 = f14*f21;
+ f19 = f10*f19;
+ f15 = f15-f16;
+ f16 = f17-f18;
+ f17 = f24-f25;
+ f18 = f26-f19;
+ f8 = f8*f22;
+ f5 = f5*f11;
+ f9 = f9*f23;
+ f6 = f6*f13;
+ f11 = f10*f20;
+ f13 = f12*f21;
+ f11 = f11-f13;
+ f5 = f8+f5;
+ f2 = f2*f15;
+ f6 = f9+f6;
+ f3 = f3*f16;
+ f7 = f7*f17;
+ f4 = f4*f18;
+ f2 = f5+f2;
+ f3 = f6+f3;
+ f4 = f7+f4;
+ f1 = f1*f11;
+ f5 = 9.9999997473787516e-005;
+ f6 = 1;
+ f2 = f2 < f3 ? f2 : f3;
+ f1 = f4+f1;
+ f1 = f2 < f1 ? f2 : f1;
+ f2 = f0 > f5 ? f0 : f6;
+ f1 = f1/f2;
+ f2 = -0.0099999997764825821;
+ f3 = 0;
+ f1 = f1 < f2 ? f1 : f3;
+ heapFloat[(r2+5)] = f1;
+ if(f0 <=f5) //_LBB547_13
+{
+ heap32[(r0)] = 2;
+}
+else{
+ r4 = heap32[(fp+4)];
+ f1 = heapFloat[(r3+4)];
+ f2 = heapFloat[(r3+5)];
+ f3 = heapFloat[(r3+6)];
+ f1 = f1*f10;
+ f2 = f2*f12;
+ f1 = f1+f2;
+ f2 = f3*f14;
+ f1 = f1+f2;
+ f2 = f6/f0;
+ f0 = f1/f0;
+ f1 = f10*f2;
+ heapFloat[(r2+4)] = f0;
+ f3 = f12*f2;
+ heapFloat[(r2)] = f1;
+ f1 = f14*f2;
+ heapFloat[(r2+1)] = f3;
+ heapFloat[(r2+2)] = f1;
+ if(r4 !=0) //_LBB547_24
+{
+break _1;
+}
+else{
+ f1 = -9.9999997473787516e-006;
+ if(f0 >=f1) //_LBB547_24
+{
+break _1;
+}
+else{
+ heap32[(r0)] = 3;
+}
+}
+}
+ r3 = heap32[(r2+13)];
+if(!(r3 ==0)) //_LBB547_16
+{
+ r3 = r3 >> 2;
+ r4 = heap32[(r2+12)];
+ heap32[(r3+12)] = r4;
+}
+ r3 = heap32[(r2+12)];
+if(!(r3 ==0)) //_LBB547_18
+{
+ r3 = r3 >> 2;
+ r4 = heap32[(r2+13)];
+ heap32[(r3+13)] = r4;
+}
+ r3 = heap32[(r0+2448)];
+if(!(r3 !=r1)) //_LBB547_20
+{
+ r3 = heap32[(r2+13)];
+ heap32[(r0+2448)] = r3;
+}
+ r3 = heap32[(r0+2449)];
+ r3 = (r3 + -1)|0;
+ heap32[(r0+2449)] = r3;
+ heap32[(r2+12)] = 0;
+ r3 = heap32[(r0+2450)];
+ heap32[(r2+13)] = r3;
+ r2 = heap32[(r0+2450)];
+if(!(r2 ==0)) //_LBB547_22
+{
+ r2 = r2 >> 2;
+ heap32[(r2+12)] = r1;
+}
+ heap32[(r0+2450)] = r1;
+ r1 = heap32[(r0+2451)];
+ r1 = (r1 + 1)|0;
+ heap32[(r0+2451)] = r1;
+ r0 = 0;
+ r_g0 = r0;
+ return;
+}
+} while(0);
+ r_g0 = r1;
+ return;
+}
+
+function _ZN12gjkepa2_impl3EPA6expandEjPNS_3GJK3sSVEPNS0_5sFaceEjRNS0_8sHorizonE(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+var __label__ = 0;
+ i7 = sp + -24;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+3)];
+ r1 = heap32[(fp+1)];
+ r2 = heapU8[r0+59];
+_1: do {
+if(!(r2 ==r1)) //_LBB548_10
+{
+ r2 = heap32[(fp)];
+ r3 = heap32[(fp+2)];
+ r4 = heap32[(fp+4)];
+ r5 = heap32[(fp+5)];
+ r6 = r0 >> 2;
+ r7 = r3 >> 2;
+ f0 = heapFloat[(r6)];
+ f1 = heapFloat[(r7+4)];
+ f2 = heapFloat[(r6+1)];
+ f3 = heapFloat[(r7+5)];
+ r8 = _ZZN12gjkepa2_impl3GJK13projectoriginERK9btVector3S3_S3_PfRjE4imd3;
+ r9 = r4 << 2;
+ r8 = (r8 + r9)|0;
+ f0 = f0*f1;
+ f1 = f2*f3;
+ f2 = heapFloat[(r6+2)];
+ f3 = heapFloat[(r7+6)];
+ r7 = r8 >> 2;
+ f0 = f0+f1;
+ f1 = f2*f3;
+ r7 = heap32[(r7)];
+ f0 = f0+f1;
+ f1 = heapFloat[(r6+4)];
+ f0 = f0-f1;
+ f1 = -9.9999997473787516e-006;
+ if(f0 >=f1) //_LBB548_8
+{
+ r4 = r7 << 2;
+ r4 = (r0 + r4)|0;
+ r7 = (r0 + r7)|0;
+ heap8[r0+59] = r1;
+ r4 = r4 >> 2;
+ r7 = heapU8[r7+56];
+ r4 = heap32[(r4+9)];
+ r8 = _ZZN12gjkepa2_impl3EPA6expandEjPNS_3GJK3sSVEPNS0_5sFaceEjRNS0_8sHorizonEE4i2m3;
+ r8 = (r8 + r9)|0;
+ r8 = r8 >> 2;
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = r3;
+ heap32[(g0+3)] = r4;
+ heap32[(g0+4)] = r7;
+ heap32[(g0+5)] = r5;
+ r4 = heap32[(r8)];
+ _ZN12gjkepa2_impl3EPA6expandEjPNS_3GJK3sSVEPNS0_5sFaceEjRNS0_8sHorizonE(i7);
+ r7 = r_g0;
+ if(r7 ==0) //_LBB548_10
+{
+break _1;
+}
+else{
+ r7 = r4 << 2;
+ r7 = (r0 + r7)|0;
+ r4 = (r0 + r4)|0;
+ r7 = r7 >> 2;
+ r4 = heapU8[r4+56];
+ r7 = heap32[(r7+9)];
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = r3;
+ heap32[(g0+3)] = r7;
+ heap32[(g0+4)] = r4;
+ heap32[(g0+5)] = r5;
+ _ZN12gjkepa2_impl3EPA6expandEjPNS_3GJK3sSVEPNS0_5sFaceEjRNS0_8sHorizonE(i7);
+ r1 = r_g0;
+ if(r1 !=0) //_LBB548_11
+{
+ r1 = heap32[(r6+13)];
+if(!(r1 ==0)) //_LBB548_13
+{
+ r1 = r1 >> 2;
+ r3 = heap32[(r6+12)];
+ heap32[(r1+12)] = r3;
+}
+ r1 = heap32[(r6+12)];
+if(!(r1 ==0)) //_LBB548_15
+{
+ r1 = r1 >> 2;
+ r3 = heap32[(r6+13)];
+ heap32[(r1+13)] = r3;
+}
+ r1 = r2 >> 2;
+ r2 = heap32[(r1+2448)];
+if(!(r2 !=r0)) //_LBB548_17
+{
+ r2 = heap32[(r6+13)];
+ heap32[(r1+2448)] = r2;
+}
+ r2 = heap32[(r1+2449)];
+ r2 = (r2 + -1)|0;
+ heap32[(r1+2449)] = r2;
+ heap32[(r6+12)] = 0;
+ r2 = heap32[(r1+2450)];
+ heap32[(r6+13)] = r2;
+ r2 = heap32[(r1+2450)];
+if(!(r2 ==0)) //_LBB548_19
+{
+ r2 = r2 >> 2;
+ heap32[(r2+12)] = r0;
+}
+ heap32[(r1+2450)] = r0;
+ r0 = heap32[(r1+2451)];
+ r0 = (r0 + 1)|0;
+ heap32[(r1+2451)] = r0;
+}
+else{
+break _1;
+}
+}
+}
+else{
+ r1 = (r0 + 24)|0;
+ r6 = r7 << 2;
+ r7 = (r1 + r9)|0;
+ r1 = (r1 + r6)|0;
+ r6 = r7 >> 2;
+ r1 = r1 >> 2;
+ r6 = heap32[(r6)];
+ r1 = heap32[(r1)];
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = r6;
+ heap32[(g0+3)] = r3;
+ heap32[(g0+4)] = 0;
+ _ZN12gjkepa2_impl3EPA7newfaceEPNS_3GJK3sSVES3_S3_b(i7);
+ r1 = r_g0;
+ if(r1 ==0) //_LBB548_10
+{
+break _1;
+}
+else{
+ r2 = r1 >> 2;
+ heap8[r1+56] = r4;
+ r3 = (r0 + r9)|0;
+ r6 = (r0 + r4)|0;
+ r7 = 0;
+ heap32[(r2+9)] = r0;
+ r0 = r3 >> 2;
+ heap8[r6+56] = r7;
+ r3 = r5 >> 2;
+ heap32[(r0+9)] = r1;
+ r0 = heap32[(r3)];
+ if(r0 ==0) //_LBB548_5
+{
+ heap32[(r3+1)] = r1;
+}
+else{
+ r5 = 2;
+ r6 = r0 >> 2;
+ heap8[r0+57] = r5;
+ r5 = 1;
+ heap32[(r6+10)] = r1;
+ heap8[r1+58] = r5;
+ heap32[(r2+11)] = r0;
+}
+ heap32[(r3)] = r1;
+ r0 = heap32[(r3+2)];
+ r0 = (r0 + 1)|0;
+ heap32[(r3+2)] = r0;
+}
+}
+ r0 = 1;
+ r_g0 = r0;
+ return;
+}
+} while(0);
+ r0 = 0;
+ r_g0 = r0;
+ return;
+}
+
+function _ZN15btGjkEpaSolver211PenetrationEPK13btConvexShapeRK11btTransformS2_S5_RK9btVector3RNS_8sResultsEb(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+ var r13;
+ var r14;
+ var r15;
+ var r16;
+ var r17;
+ var r18;
+ var r19;
+ var r20;
+ var r21;
+ var r22;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+ var f10;
+ var f11;
+ var f12;
+ var f13;
+ var f14;
+ var f15;
+var __label__ = 0;
+ i7 = sp + -10400;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ r1 = heap32[(fp+5)];
+ r2 = heap32[(fp)];
+ r3 = heap32[(fp+2)];
+ r4 = heap32[(fp+3)];
+ r5 = sp + -176;
+ r6 = heap32[(fp+6)];
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = r0;
+ heap32[(g0+2)] = r3;
+ heap32[(g0+3)] = r4;
+ heap32[(g0+4)] = r1;
+ heap32[(g0+5)] = r5;
+ heap32[(g0+6)] = r6;
+ r2 = sp + -560;
+ r3 = r2 >> 2;
+ _ZN12gjkepa2_implL10InitializeEPK13btConvexShapeRK11btTransformS2_S5_RN15btGjkEpaSolver28sResultsERNS_13MinkowskiDiffEb(i7);
+ heap32[(r3+32)] = 0;
+ heap32[(r3+33)] = 0;
+ heap32[(r3+34)] = 0;
+ heap32[(r3+35)] = 0;
+ heap32[(r3+91)] = 0;
+ heap32[(r3+94)] = 2;
+ r4 = heap32[(fp+4)];
+ heap32[(r3+92)] = 0;
+ r4 = r4 >> 2;
+ heap32[(r3+36)] = 0;
+ f0 = heapFloat[(r4+2)];
+ f1 = heapFloat[(r4+1)];
+ f2 = heapFloat[(r4)];
+ r6 = sp + -48;
+ f2 = -f2;
+ r7 = r6 >> 2;
+ f1 = -f1;
+ heapFloat[(fp+-12)] = f2;
+ f0 = -f0;
+ heapFloat[(r7+1)] = f1;
+ heapFloat[(r7+2)] = f0;
+ heap32[(r7+3)] = 0;
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = r5;
+ heap32[(g0+2)] = r6;
+ _ZN12gjkepa2_impl3GJK8EvaluateERKNS_13MinkowskiDiffERK9btVector3(i7);
+ r6 = r_g0;
+ if(r6 ==2) //_LBB549_71
+{
+ r0 = r1 >> 2;
+ heap32[(r0)] = 2;
+}
+else{
+if(!(r6 !=1)) //_LBB549_72
+{
+ r6 = sp + -10368;
+ r7 = r6 >> 2;
+ heap32[(r7+2448)] = 0;
+ heap32[(r7+2449)] = 0;
+ heap32[(r7+2450)] = 0;
+ heap32[(r7+2451)] = 0;
+ heap32[(fp+-2592)] = 9;
+ heap32[(r7+10)] = 0;
+ heap32[(r7+11)] = 0;
+ heap32[(r7+12)] = 0;
+ heap32[(r7+13)] = 0;
+ r8 = 0;
+ r9 = (r6 + 9780)|0;
+ r10 = (r6 + 9728)|0;
+ heap32[(r7+14)] = 0;
+ heap32[(r7+2447)] = 0;
+ r11 = r8;
+ r12 = r8;
+ r13 = r8;
+_5: while(true){
+ r14 = 127;
+ r14 = (r14 - r13)|0;
+ r15 = (r9 + r8)|0;
+ r14 = (r14 * 60)|0;
+ r14 = (r6 + r14)|0;
+ r15 = r15 >> 2;
+ r14 = (r14 + 2108)|0;
+ r16 = (r10 + r8)|0;
+ heap32[(r15+-1)] = 0;
+ heap32[(r15)] = r12;
+ if(r12 !=0) //_LBB549_5
+{
+ r11 = r12 >> 2;
+ heap32[(r11+12)] = r16;
+ r11 = heap32[(r7+2451)];
+}
+ r8 = (r8 + -60)|0;
+ r13 = (r13 + 1)|0;
+ r11 = (r11 + 1)|0;
+ heap32[(r7+2450)] = r16;
+ heap32[(r7+2451)] = r11;
+ r12 = r14;
+if(!(r8 !=-7680)) //_LBB549_3
+{
+break _5;
+}
+}
+ r3 = heap32[(r3+93)];
+ f0 = heapFloat[(r4+2)];
+ f1 = heapFloat[(r4+1)];
+ f2 = heapFloat[(r4)];
+ r3 = r3 >> 2;
+ r4 = heap32[(r3+8)];
+ if(uint(r4) <uint(2)) //_LBB549_57
+{
+__label__ = 56;
+}
+else{
+ heap32[(g0)] = r2;
+ _ZN12gjkepa2_impl3GJK13EncloseOriginEv(i7);
+ r4 = r_g0;
+ if(r4 ==0) //_LBB549_57
+{
+__label__ = 56;
+}
+else{
+ r4 = heap32[(r7+2448)];
+_14: do {
+if(!(r4 ==0)) //_LBB549_19
+{
+_15: while(true){
+ r8 = r4 >> 2;
+ r9 = heap32[(r8+13)];
+if(!(r9 ==0)) //_LBB549_12
+{
+ r9 = r9 >> 2;
+ r10 = heap32[(r8+12)];
+ heap32[(r9+12)] = r10;
+}
+ r9 = heap32[(r8+12)];
+if(!(r9 ==0)) //_LBB549_14
+{
+ r9 = r9 >> 2;
+ r10 = heap32[(r8+13)];
+ heap32[(r9+13)] = r10;
+}
+ r9 = heap32[(r7+2448)];
+if(!(r9 !=r4)) //_LBB549_16
+{
+ r9 = heap32[(r8+13)];
+ heap32[(r7+2448)] = r9;
+}
+ r9 = heap32[(r7+2449)];
+ r9 = (r9 + -1)|0;
+ heap32[(r7+2449)] = r9;
+ heap32[(r8+12)] = 0;
+ r9 = heap32[(r7+2450)];
+ heap32[(r8+13)] = r9;
+ r8 = heap32[(r7+2450)];
+if(!(r8 ==0)) //_LBB549_18
+{
+ r8 = r8 >> 2;
+ heap32[(r8+12)] = r4;
+}
+ heap32[(r7+2450)] = r4;
+ r4 = heap32[(r7+2451)];
+ r4 = (r4 + 1)|0;
+ heap32[(r7+2451)] = r4;
+ r4 = heap32[(r7+2448)];
+if(!(r4 !=0)) //_LBB549_10
+{
+break _14;
+}
+}
+}
+} while(0);
+ heap32[(fp+-2592)] = 0;
+ heap32[(r7+2447)] = 0;
+ r4 = heap32[(r3+1)];
+ r8 = heap32[(r3)];
+ r9 = heap32[(r3+3)];
+ r10 = r8 >> 2;
+ r11 = r4 >> 2;
+ r9 = r9 >> 2;
+ r12 = heap32[(r3+2)];
+ r13 = r12 >> 2;
+ f3 = heapFloat[(r11+6)];
+ f4 = heapFloat[(r9+6)];
+ f5 = heapFloat[(r10+6)];
+ f6 = heapFloat[(r10+5)];
+ f7 = heapFloat[(r9+5)];
+ f8 = heapFloat[(r11+4)];
+ f9 = heapFloat[(r9+4)];
+ f10 = heapFloat[(r13+5)];
+ f11 = heapFloat[(r10+4)];
+ f12 = heapFloat[(r13+4)];
+ f3 = f3-f4;
+ f6 = f6-f7;
+ f8 = f8-f9;
+ f5 = f5-f4;
+ f11 = f11-f9;
+ f13 = f6*f3;
+ f9 = f12-f9;
+ f12 = f5*f8;
+ f10 = f10-f7;
+ f3 = f11*f3;
+ f14 = heapFloat[(r13+6)];
+ f15 = heapFloat[(r11+5)];
+ f13 = f13*f9;
+ f12 = f12*f10;
+ f7 = f15-f7;
+ f12 = f13+f12;
+ f3 = f3*f10;
+ f6 = f6*f8;
+ f4 = f14-f4;
+ f8 = f11*f7;
+ f3 = f12-f3;
+ f6 = f6*f4;
+ f5 = f5*f7;
+ f3 = f3-f6;
+ f4 = f8*f4;
+ f3 = f3+f4;
+ f4 = f5*f9;
+ f3 = f3-f4;
+ f4 = 0;
+ if(f3 <f4) //_LBB549_21
+{
+ heap32[(r3)] = r4;
+ heap32[(r3+1)] = r8;
+ f3 = heapFloat[(r3+4)];
+ heap32[(r3+4)] = heap32[(r3+5)];
+ heapFloat[(r3+5)] = f3;
+ r9 = r4;
+ r4 = r8;
+}
+else{
+ r9 = r8;
+}
+ heap32[(g0)] = r6;
+ heap32[(g0+1)] = r9;
+ heap32[(g0+2)] = r4;
+ heap32[(g0+3)] = r12;
+ heap32[(g0+4)] = 1;
+ _ZN12gjkepa2_impl3EPA7newfaceEPNS_3GJK3sSVES3_S3_b(i7);
+ r4 = r_g0;
+ r8 = heap32[(r3+3)];
+ r9 = heap32[(r3)];
+ r10 = heap32[(r3+1)];
+ heap32[(g0)] = r6;
+ heap32[(g0+1)] = r10;
+ heap32[(g0+2)] = r9;
+ heap32[(g0+3)] = r8;
+ heap32[(g0+4)] = 1;
+ _ZN12gjkepa2_impl3EPA7newfaceEPNS_3GJK3sSVES3_S3_b(i7);
+ r8 = r_g0;
+ r9 = heap32[(r3+3)];
+ r10 = heap32[(r3+1)];
+ r11 = heap32[(r3+2)];
+ heap32[(g0)] = r6;
+ heap32[(g0+1)] = r11;
+ heap32[(g0+2)] = r10;
+ heap32[(g0+3)] = r9;
+ heap32[(g0+4)] = 1;
+ _ZN12gjkepa2_impl3EPA7newfaceEPNS_3GJK3sSVES3_S3_b(i7);
+ r9 = r_g0;
+ r10 = heap32[(r3+3)];
+ r11 = heap32[(r3+2)];
+ r12 = heap32[(r3)];
+ heap32[(g0)] = r6;
+ heap32[(g0+1)] = r12;
+ heap32[(g0+2)] = r11;
+ heap32[(g0+3)] = r10;
+ heap32[(g0+4)] = 1;
+ _ZN12gjkepa2_impl3EPA7newfaceEPNS_3GJK3sSVES3_S3_b(i7);
+ r10 = r_g0;
+ r11 = heap32[(r7+2449)];
+ if(r11 !=4) //_LBB549_57
+{
+__label__ = 56;
+}
+else{
+ r3 = heap32[(r7+2448)];
+ r11 = r3 >> 2;
+ f0 = heapFloat[(r11+4)];
+ f0 = f0*f0;
+ f1 = heapFloat[(r11+5)];
+_35: while(true){
+ f2 = f1;
+ r11 = r3;
+ f3 = f0;
+_37: while(true){
+ r3 = r3 >> 2;
+ r3 = heap32[(r3+13)];
+ if(r3 !=0) //_LBB549_24
+{
+ r12 = r3 >> 2;
+ f1 = heapFloat[(r12+5)];
+if(!(f1 <f2)) //_LBB549_27
+{
+ f0 = heapFloat[(r12+4)];
+ f0 = f0*f0;
+if(!(f0 >=f3)) //_LBB549_27
+{
+continue _35;
+}
+}
+}
+else{
+break _35;
+}
+}
+}
+ r3 = r11 >> 2;
+ f0 = heapFloat[(r3)];
+ f1 = heapFloat[(r3+1)];
+ f2 = heapFloat[(r3+2)];
+ f3 = heapFloat[(r3+3)];
+ f4 = heapFloat[(r3+4)];
+ f5 = heapFloat[(r3+5)];
+ r12 = heap32[(r3+6)];
+ r13 = heap32[(r3+7)];
+ r3 = heap32[(r3+8)];
+ r14 = 0;
+ r15 = r4 >> 2;
+ heap8[r4+56] = r14;
+ heap32[(r15+9)] = r8;
+ r16 = r8 >> 2;
+ heap8[r8+56] = r14;
+ heap32[(r16+9)] = r4;
+ heap8[r4+57] = r14;
+ r17 = 1;
+ heap32[(r15+10)] = r9;
+ r18 = r9 >> 2;
+ heap8[r9+56] = r17;
+ heap32[(r18+9)] = r4;
+ heap8[r4+58] = r14;
+ r19 = 2;
+ heap32[(r15+11)] = r10;
+ r15 = r10 >> 2;
+ heap8[r10+56] = r19;
+ heap32[(r15+9)] = r4;
+ heap8[r8+57] = r19;
+ heap32[(r16+10)] = r10;
+ heap8[r10+58] = r17;
+ heap32[(r15+11)] = r8;
+ heap8[r8+58] = r17;
+ heap32[(r16+11)] = r9;
+ heap8[r9+57] = r19;
+ heap32[(r18+10)] = r8;
+ heap8[r9+58] = r17;
+ heap32[(r18+11)] = r10;
+ heap8[r10+57] = r19;
+ heap32[(r15+10)] = r9;
+ heap32[(fp+-2592)] = 0;
+_42: while(true){
+ r4 = (r14 + 1)|0;
+_44: while(true){
+ if(uint(r14) <uint(255)) //_LBB549_30
+{
+ r8 = heap32[(r7+2447)];
+ if(uint(r8) >uint(63)) //_LBB549_54
+{
+__label__ = 53;
+break _42;
+}
+else{
+ r9 = sp + -16;
+ r10 = r9 >> 2;
+ heap32[(fp+-4)] = 0;
+ heap32[(r10+1)] = 0;
+ r15 = (r8 + 1)|0;
+ heap32[(r10+2)] = 0;
+ r8 = r8 << 5;
+ heap32[(r7+2447)] = r15;
+ r8 = (r6 + r8)|0;
+ heap8[r11+59] = r4;
+ r15 = (r8 + 60)|0;
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = r11;
+ heap32[(g0+2)] = r15;
+ r8 = r8 >> 2;
+ _ZNK12gjkepa2_impl3GJK10getsupportERK9btVector3RNS0_3sSVE(i7);
+ r16 = r11 >> 2;
+ f6 = heapFloat[(r16)];
+ f7 = heapFloat[(r8+19)];
+ f8 = heapFloat[(r16+1)];
+ f9 = heapFloat[(r8+20)];
+ f6 = f6*f7;
+ f7 = f8*f9;
+ f8 = heapFloat[(r16+2)];
+ f9 = heapFloat[(r8+21)];
+ f6 = f6+f7;
+ f7 = f8*f9;
+ f6 = f6+f7;
+ f7 = heapFloat[(r16+4)];
+ f6 = f6-f7;
+ f7 = 9.9999997473787516e-005;
+ if(f6 <=f7) //_LBB549_53
+{
+__label__ = 52;
+break _42;
+}
+else{
+ r14 = (r14 + 1)|0;
+ r8 = (r11 + 1)|0;
+ r18 = 0;
+ r20 = r17;
+_49: while(true){
+ r21 = r18 << 2;
+ r21 = (r11 + r21)|0;
+ r22 = (r8 + r18)|0;
+ r21 = r21 >> 2;
+ r22 = heapU8[r22+55];
+ r21 = heap32[(r21+9)];
+ heap32[(g0)] = r6;
+ heap32[(g0+1)] = r14;
+ heap32[(g0+2)] = r15;
+ heap32[(g0+3)] = r21;
+ heap32[(g0+4)] = r22;
+ heap32[(g0+5)] = r9;
+ _ZN12gjkepa2_impl3EPA6expandEjPNS_3GJK3sSVEPNS0_5sFaceEjRNS0_8sHorizonE(i7);
+ r18 = (r18 + 1)|0;
+ r20 = r_g0 & r20;
+ if(uint(r18) >uint(2)) //_LBB549_35
+{
+break _49;
+}
+else{
+if(!(r20 !=0)) //_LBB549_33
+{
+break _49;
+}
+}
+}
+ if(r20 !=1) //_LBB549_52
+{
+__label__ = 51;
+break _42;
+}
+else{
+ r8 = heap32[(r10+2)];
+ if(uint(r8) <uint(3)) //_LBB549_52
+{
+__label__ = 51;
+break _42;
+}
+else{
+ r8 = heap32[(fp+-4)];
+ r9 = heap32[(r10+1)];
+ r10 = r8 >> 2;
+ heap8[r8+57] = r19;
+ r15 = 1;
+ heap32[(r10+10)] = r9;
+ r10 = r9 >> 2;
+ heap8[r9+58] = r15;
+ heap32[(r10+11)] = r8;
+ r8 = heap32[(r16+13)];
+if(!(r8 ==0)) //_LBB549_39
+{
+ r8 = r8 >> 2;
+ r9 = heap32[(r16+12)];
+ heap32[(r8+12)] = r9;
+}
+ r8 = heap32[(r16+12)];
+if(!(r8 ==0)) //_LBB549_41
+{
+ r8 = r8 >> 2;
+ r9 = heap32[(r16+13)];
+ heap32[(r8+13)] = r9;
+}
+ r8 = heap32[(r7+2448)];
+if(!(r8 !=r11)) //_LBB549_43
+{
+ r8 = heap32[(r16+13)];
+ heap32[(r7+2448)] = r8;
+}
+ r8 = heap32[(r7+2449)];
+ r8 = (r8 + -1)|0;
+ heap32[(r7+2449)] = r8;
+ heap32[(r16+12)] = 0;
+ r8 = heap32[(r7+2450)];
+ heap32[(r16+13)] = r8;
+ r8 = heap32[(r7+2450)];
+if(!(r8 ==0)) //_LBB549_45
+{
+ r8 = r8 >> 2;
+ heap32[(r8+12)] = r11;
+}
+ heap32[(r7+2450)] = r11;
+ r11 = heap32[(r7+2451)];
+ r11 = (r11 + 1)|0;
+ heap32[(r7+2451)] = r11;
+ r8 = heap32[(r7+2448)];
+ r11 = r8 >> 2;
+ f6 = heapFloat[(r11+4)];
+ f6 = f6*f6;
+ f7 = heapFloat[(r11+5)];
+_67: while(true){
+ f8 = f7;
+ r11 = r8;
+ f9 = f6;
+_69: while(true){
+ r8 = r8 >> 2;
+ r8 = heap32[(r8+13)];
+ if(r8 !=0) //_LBB549_46
+{
+ r9 = r8 >> 2;
+ f7 = heapFloat[(r9+5)];
+if(!(f7 <f8)) //_LBB549_49
+{
+ f6 = heapFloat[(r9+4)];
+ f6 = f6*f6;
+if(!(f6 >=f9)) //_LBB549_49
+{
+continue _67;
+}
+}
+}
+else{
+break _67;
+}
+}
+}
+ r8 = r11 >> 2;
+ f6 = heapFloat[(r8+5)];
+ r4 = (r4 + 1)|0;
+if(!(f6 <f5)) //_LBB549_55
+{
+break _44;
+}
+}
+}
+}
+}
+}
+else{
+__label__ = 55;
+break _42;
+}
+}
+ f0 = heapFloat[(r8)];
+ f1 = heapFloat[(r8+1)];
+ f2 = heapFloat[(r8+2)];
+ f3 = heapFloat[(r8+3)];
+ f4 = heapFloat[(r8+4)];
+ r12 = heap32[(r8+6)];
+ r13 = heap32[(r8+7)];
+ r3 = heap32[(r8+8)];
+ f5 = f6;
+}
+switch(__label__ ){//multiple entries
+case 53:
+ heap32[(fp+-2592)] = 6;
+break;
+case 52:
+ heap32[(fp+-2592)] = 7;
+break;
+case 51:
+ heap32[(fp+-2592)] = 4;
+break;
+}
+ heapFloat[(r7+10)] = f0;
+ heapFloat[(r7+11)] = f1;
+ heapFloat[(r7+12)] = f2;
+ heapFloat[(r7+13)] = f3;
+ heapFloat[(r7+14)] = f4;
+ heap32[(r7+9)] = 3;
+ heap32[(r7+1)] = r12;
+ heap32[(r7+2)] = r13;
+ heap32[(r7+3)] = r3;
+ r3 = r3 >> 2;
+ r2 = r13 >> 2;
+ f2 = f2*f4;
+ f3 = heapFloat[(r3+6)];
+ f5 = heapFloat[(r2+6)];
+ f1 = f1*f4;
+ f6 = heapFloat[(r3+5)];
+ f7 = heapFloat[(r2+5)];
+ f0 = f0*f4;
+ f4 = heapFloat[(r3+4)];
+ f8 = heapFloat[(r2+4)];
+ f5 = f5-f2;
+ f6 = f6-f1;
+ f8 = f8-f0;
+ f3 = f3-f2;
+ f7 = f7-f1;
+ f4 = f4-f0;
+ f9 = f7*f3;
+ f10 = f5*f6;
+ f5 = f5*f4;
+ f3 = f8*f3;
+ f9 = f9-f10;
+ f3 = f5-f3;
+ f5 = f8*f6;
+ f4 = f7*f4;
+ f4 = f5-f4;
+ f5 = f9*f9;
+ f3 = f3*f3;
+ f3 = f5+f3;
+ f4 = f4*f4;
+ f3 = f3+f4;
+ heapFloat[(g0)] = f3;
+ sqrtf(i7);
+ heapFloat[(r7+5)] = f_g0;
+ r4 = r12 >> 2;
+ f3 = heapFloat[(r4+6)];
+ f4 = heapFloat[(r4+5)];
+ f5 = heapFloat[(r4+4)];
+ f6 = heapFloat[(r3+6)];
+ f7 = heapFloat[(r3+5)];
+ f8 = heapFloat[(r3+4)];
+ f6 = f6-f2;
+ f4 = f4-f1;
+ f8 = f8-f0;
+ f3 = f3-f2;
+ f7 = f7-f1;
+ f5 = f5-f0;
+ f9 = f7*f3;
+ f10 = f6*f4;
+ f6 = f6*f5;
+ f3 = f8*f3;
+ f9 = f9-f10;
+ f3 = f6-f3;
+ f4 = f8*f4;
+ f5 = f7*f5;
+ f4 = f4-f5;
+ f5 = f9*f9;
+ f3 = f3*f3;
+ f3 = f5+f3;
+ f4 = f4*f4;
+ f3 = f3+f4;
+ heapFloat[(g0)] = f3;
+ sqrtf(i7);
+ heapFloat[(r7+6)] = f_g0;
+ f3 = heapFloat[(r2+6)];
+ f4 = heapFloat[(r2+5)];
+ f5 = heapFloat[(r2+4)];
+ f6 = heapFloat[(r4+6)];
+ f7 = heapFloat[(r4+5)];
+ f8 = heapFloat[(r4+4)];
+ f6 = f6-f2;
+ f4 = f4-f1;
+ f8 = f8-f0;
+ f2 = f3-f2;
+ f1 = f7-f1;
+ f0 = f5-f0;
+ f3 = f1*f2;
+ f5 = f6*f4;
+ f6 = f6*f0;
+ f2 = f8*f2;
+ f3 = f3-f5;
+ f2 = f6-f2;
+ f4 = f8*f4;
+ f0 = f1*f0;
+ f0 = f4-f0;
+ f1 = f3*f3;
+ f2 = f2*f2;
+ f1 = f1+f2;
+ f0 = f0*f0;
+ f0 = f1+f0;
+ heapFloat[(g0)] = f0;
+ sqrtf(i7);
+ f1 = heapFloat[(r7+5)];
+ f2 = heapFloat[(r7+6)];
+ f3 = f1+f2;
+ f3 = f3+f_g0;
+ f1 = f1/f3;
+ f2 = f2/f3;
+ heapFloat[(r7+5)] = f1;
+ f0 = f_g0/f3;
+ heapFloat[(r7+6)] = f2;
+ heapFloat[(r7+7)] = f0;
+__label__ = 60;
+}
+}
+}
+if (__label__ == 56){
+ heap32[(fp+-2592)] = 8;
+ heapFloat[(r7+10)] = f2;
+ heapFloat[(r7+11)] = f1;
+ heapFloat[(r7+12)] = f0;
+ f2 = f2*f2;
+ f1 = f1*f1;
+ heap32[(r7+13)] = 0;
+ f1 = f2+f1;
+ f0 = f0*f0;
+ f0 = f1+f0;
+ heapFloat[(g0)] = f0;
+ sqrtf(i7);
+ f0 = f_g0;
+ f1 = 0;
+ if(f0 >f1) //_LBB549_59
+{
+ f1 = 1;
+ f2 = heapFloat[(r7+12)];
+ f0 = f1/f0;
+ f1 = heapFloat[(r7+11)];
+ f3 = heapFloat[(r7+10)];
+ f2 = f2*f0;
+ f1 = f1*f0;
+ f0 = f3*f0;
+}
+else{
+ f0 = 1;
+ f2 = f1;
+}
+ heapFloat[(r7+10)] = f0;
+ heapFloat[(r7+11)] = f1;
+ heapFloat[(r7+12)] = f2;
+ heap32[(r7+13)] = 0;
+ heap32[(r7+14)] = 0;
+ heap32[(r7+9)] = 1;
+ r2 = heap32[(r3)];
+ heap32[(r7+1)] = r2;
+ heap32[(r7+5)] = 1065353216;
+}
+ r2 = heap32[(fp+-2592)];
+ if(r2 ==9) //_LBB549_70
+{
+ r1 = r1 >> 2;
+ heap32[(r1)] = 3;
+ r1 = 0;
+ r_g0 = r1;
+ return;
+}
+else{
+ r2 = heap32[(r7+9)];
+_90: do {
+ if(r2 !=0) //_LBB549_64
+{
+ r2 = 0;
+ f0 = 0;
+ f1 = f0;
+ f2 = f0;
+_92: while(true){
+ r3 = r2 << 2;
+ r3 = (r6 + r3)|0;
+ r4 = r5 >> 2;
+ r3 = r3 >> 2;
+ r8 = heap32[(r4+30)];
+ r2 = (r2 + 1)|0;
+ r9 = heap32[(r3+1)];
+ r10 = heap32[(fp+-44)];
+ r4 = heap32[(r4+31)];
+ r11 = r8 & 1;
+ if(r11 != 0) //_LBB549_67
+{
+ r11 = (r10 + r4)|0;
+ r11 = r11 >> 2;
+ r11 = heap32[(r11)];
+ r8 = (r8 + r11)|0;
+ r8 = (r8 + -1)|0;
+ r8 = r8 >> 2;
+ r8 = heap32[(r8)];
+}
+ r11 = sp + -32;
+ r4 = (r10 + r4)|0;
+ heap32[(g0)] = r11;
+ heap32[(g0+1)] = r4;
+ heap32[(g0+2)] = r9;
+ __FUNCTION_TABLE__[(r8)>>2](i7);
+ r4 = r11 >> 2;
+ f3 = heapFloat[(fp+-8)];
+ f4 = heapFloat[(r3+5)];
+ f5 = heapFloat[(r4+1)];
+ f6 = heapFloat[(r4+2)];
+ f3 = f3*f4;
+ f5 = f5*f4;
+ f4 = f6*f4;
+ f2 = f2+f3;
+ f1 = f1+f5;
+ f0 = f0+f4;
+ r3 = heap32[(r7+9)];
+if(!(uint(r3) >uint(r2))) //_LBB549_65
+{
+break _90;
+}
+}
+}
+else{
+ f0 = 0;
+ f1 = f0;
+ f2 = f0;
+}
+} while(0);
+ r1 = r1 >> 2;
+ r0 = r0 >> 2;
+ heap32[(r1)] = 1;
+ f3 = heapFloat[(r0)];
+ f4 = heapFloat[(r0+1)];
+ f5 = heapFloat[(r0+4)];
+ f6 = heapFloat[(r0+5)];
+ f3 = f3*f2;
+ f4 = f4*f1;
+ f7 = heapFloat[(r0+2)];
+ f8 = heapFloat[(r0+8)];
+ f9 = heapFloat[(r0+9)];
+ f10 = heapFloat[(r0+6)];
+ f5 = f5*f2;
+ f6 = f6*f1;
+ f3 = f3+f4;
+ f4 = f7*f0;
+ f7 = heapFloat[(r0+10)];
+ f8 = f8*f2;
+ f9 = f9*f1;
+ f5 = f5+f6;
+ f6 = f10*f0;
+ f3 = f3+f4;
+ f4 = heapFloat[(r0+12)];
+ f10 = heapFloat[(r0+14)];
+ f11 = heapFloat[(r0+13)];
+ f5 = f5+f6;
+ f6 = f8+f9;
+ f7 = f7*f0;
+ f3 = f3+f4;
+ f4 = f6+f7;
+ f5 = f5+f11;
+ heapFloat[(r1+1)] = f3;
+ f3 = f4+f10;
+ heapFloat[(r1+2)] = f5;
+ heapFloat[(r1+3)] = f3;
+ heap32[(r1+4)] = 0;
+ f3 = heapFloat[(r7+14)];
+ f4 = heapFloat[(r7+11)];
+ f5 = heapFloat[(r7+10)];
+ f6 = heapFloat[(r7+12)];
+ f7 = f5*f3;
+ f8 = f4*f3;
+ f9 = f6*f3;
+ f2 = f2-f7;
+ f7 = heapFloat[(r0)];
+ f1 = f1-f8;
+ f8 = heapFloat[(r0+1)];
+ f10 = heapFloat[(r0+4)];
+ f11 = heapFloat[(r0+5)];
+ f7 = f7*f2;
+ f8 = f8*f1;
+ f0 = f0-f9;
+ f9 = heapFloat[(r0+2)];
+ f12 = heapFloat[(r0+8)];
+ f13 = heapFloat[(r0+9)];
+ f14 = heapFloat[(r0+6)];
+ f10 = f10*f2;
+ f11 = f11*f1;
+ f7 = f7+f8;
+ f8 = f9*f0;
+ f9 = heapFloat[(r0+10)];
+ f2 = f12*f2;
+ f1 = f13*f1;
+ f10 = f10+f11;
+ f11 = f14*f0;
+ f7 = f7+f8;
+ f8 = heapFloat[(r0+12)];
+ f12 = heapFloat[(r0+14)];
+ f13 = heapFloat[(r0+13)];
+ f10 = f10+f11;
+ f1 = f2+f1;
+ f0 = f9*f0;
+ f2 = f7+f8;
+ f0 = f1+f0;
+ f1 = f10+f13;
+ heapFloat[(r1+5)] = f2;
+ f0 = f0+f12;
+ heapFloat[(r1+6)] = f1;
+ heapFloat[(r1+7)] = f0;
+ f0 = -f5;
+ heap32[(r1+8)] = 0;
+ f1 = -f4;
+ heapFloat[(r1+9)] = f0;
+ f0 = -f6;
+ heapFloat[(r1+10)] = f1;
+ heapFloat[(r1+11)] = f0;
+ f0 = -f3;
+ heap32[(r1+12)] = 0;
+ heapFloat[(r1+13)] = f0;
+ r1 = 1;
+ r_g0 = r1;
+ return;
+}
+}
+}
+ r0 = 0;
+ r_g0 = r0;
+ return;
+}
+
+function _ZN15btGjkEpaSolver28DistanceEPK13btConvexShapeRK11btTransformS2_S5_RK9btVector3RNS_8sResultsE(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+ var f10;
+ var f11;
+ var f12;
+ var f13;
+ var f14;
+ var f15;
+ var f16;
+ var f17;
+ var f18;
+var __label__ = 0;
+ i7 = sp + -592;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ r1 = heap32[(fp+5)];
+ r2 = heap32[(fp)];
+ r3 = heap32[(fp+2)];
+ r4 = heap32[(fp+3)];
+ r5 = sp + -176;
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = r0;
+ heap32[(g0+2)] = r3;
+ heap32[(g0+3)] = r4;
+ heap32[(g0+4)] = r1;
+ heap32[(g0+5)] = r5;
+ heap32[(g0+6)] = 0;
+ r2 = sp + -560;
+ r3 = r2 >> 2;
+ _ZN12gjkepa2_implL10InitializeEPK13btConvexShapeRK11btTransformS2_S5_RN15btGjkEpaSolver28sResultsERNS_13MinkowskiDiffEb(i7);
+ heap32[(r3+32)] = 0;
+ heap32[(r3+33)] = 0;
+ heap32[(r3+34)] = 0;
+ heap32[(r3+35)] = 0;
+ heap32[(r3+91)] = 0;
+ heap32[(r3+94)] = 2;
+ heap32[(r3+92)] = 0;
+ heap32[(r3+36)] = 0;
+ r4 = heap32[(fp+4)];
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = r5;
+ heap32[(g0+2)] = r4;
+ _ZN12gjkepa2_impl3GJK8EvaluateERKNS_13MinkowskiDiffERK9btVector3(i7);
+ r2 = r_g0;
+ if(r2 ==0) //_LBB550_3
+{
+ r2 = heap32[(r3+93)];
+ r4 = r2 >> 2;
+ r4 = heap32[(r4+8)];
+_3: do {
+ if(r4 !=0) //_LBB550_5
+{
+ r4 = 0;
+ f0 = 0;
+ f1 = f0;
+ f2 = f0;
+ f3 = f0;
+ f4 = f0;
+ f5 = f0;
+_5: while(true){
+ r6 = r4 << 2;
+ r2 = (r2 + r6)|0;
+ r2 = r2 >> 2;
+ r7 = r5 >> 2;
+ r8 = heap32[(r7+30)];
+ r4 = (r4 + 1)|0;
+ f6 = heapFloat[(r2+4)];
+ r2 = heap32[(r2)];
+ r9 = heap32[(fp+-44)];
+ r10 = heap32[(r7+31)];
+ r11 = r8 & 1;
+ if(r11 != 0) //_LBB550_8
+{
+ r11 = (r9 + r10)|0;
+ r11 = r11 >> 2;
+ r11 = heap32[(r11)];
+ r8 = (r8 + r11)|0;
+ r8 = (r8 + -1)|0;
+ r8 = r8 >> 2;
+ r8 = heap32[(r8)];
+}
+ r11 = sp + -48;
+ r9 = (r9 + r10)|0;
+ heap32[(g0)] = r11;
+ heap32[(g0+1)] = r9;
+ heap32[(g0+2)] = r2;
+ __FUNCTION_TABLE__[(r8)>>2](i7);
+ r2 = heap32[(r3+93)];
+ r2 = (r2 + r6)|0;
+ r2 = r2 >> 2;
+ r6 = r11 >> 2;
+ r2 = heap32[(r2)];
+ r2 = r2 >> 2;
+ f7 = heapFloat[(fp+-12)];
+ f8 = heapFloat[(r6+1)];
+ f9 = heapFloat[(r6+2)];
+ f10 = heapFloat[(r2+2)];
+ f11 = heapFloat[(r2+1)];
+ f12 = heapFloat[(r2)];
+ f7 = f7*f6;
+ f8 = f8*f6;
+ f9 = f9*f6;
+ r2 = heap32[(r7+30)];
+ f5 = f5+f7;
+ f4 = f4+f8;
+ f3 = f3+f9;
+ f7 = -f10;
+ f8 = -f11;
+ f9 = -f12;
+ r6 = heap32[(r7+1)];
+ r8 = heap32[(r7+31)];
+ r9 = r2 & 1;
+ if(r9 != 0) //_LBB550_11
+{
+ r9 = (r6 + r8)|0;
+ r9 = r9 >> 2;
+ r9 = heap32[(r9)];
+ r2 = (r2 + r9)|0;
+ r2 = (r2 + -1)|0;
+ r2 = r2 >> 2;
+ r2 = heap32[(r2)];
+}
+ f10 = heapFloat[(r7+2)];
+ f11 = heapFloat[(r7+3)];
+ f12 = heapFloat[(r7+6)];
+ f13 = heapFloat[(r7+7)];
+ f10 = f10*f9;
+ f11 = f11*f8;
+ f14 = heapFloat[(r7+4)];
+ f15 = heapFloat[(r7+10)];
+ f16 = heapFloat[(r7+11)];
+ f17 = heapFloat[(r7+12)];
+ f18 = heapFloat[(r7+8)];
+ f12 = f12*f9;
+ f13 = f13*f8;
+ f10 = f10+f11;
+ f11 = f14*f7;
+ r9 = sp + -16;
+ f9 = f15*f9;
+ f8 = f16*f8;
+ f12 = f12+f13;
+ f13 = f18*f7;
+ f10 = f10+f11;
+ r10 = r9 >> 2;
+ f8 = f9+f8;
+ f7 = f17*f7;
+ f9 = f12+f13;
+ heapFloat[(fp+-4)] = f10;
+ f7 = f8+f7;
+ heapFloat[(r10+1)] = f9;
+ heapFloat[(r10+2)] = f7;
+ heap32[(r10+3)] = 0;
+ r10 = sp + -32;
+ r6 = (r6 + r8)|0;
+ heap32[(g0)] = r10;
+ heap32[(g0+1)] = r6;
+ heap32[(g0+2)] = r9;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ r2 = r10 >> 2;
+ f7 = heapFloat[(r7+14)];
+ f8 = heapFloat[(fp+-8)];
+ f9 = heapFloat[(r7+18)];
+ f10 = heapFloat[(r7+22)];
+ f11 = heapFloat[(r7+15)];
+ f12 = heapFloat[(r2+1)];
+ f13 = heapFloat[(r7+19)];
+ f14 = heapFloat[(r7+23)];
+ f7 = f7*f8;
+ f11 = f11*f12;
+ f15 = heapFloat[(r7+16)];
+ f16 = heapFloat[(r2+2)];
+ f17 = heapFloat[(r7+20)];
+ f18 = heapFloat[(r7+24)];
+ f9 = f9*f8;
+ f13 = f13*f12;
+ f8 = f10*f8;
+ f10 = f14*f12;
+ f7 = f7+f11;
+ f11 = f15*f16;
+ f9 = f9+f13;
+ f12 = f17*f16;
+ f8 = f8+f10;
+ f10 = f18*f16;
+ f7 = f7+f11;
+ f11 = heapFloat[(r7+26)];
+ f9 = f9+f12;
+ f12 = heapFloat[(r7+27)];
+ f8 = f8+f10;
+ f10 = heapFloat[(r7+28)];
+ f7 = f7+f11;
+ f9 = f9+f12;
+ f8 = f8+f10;
+ f7 = f7*f6;
+ f9 = f9*f6;
+ f6 = f8*f6;
+ r2 = heap32[(r3+93)];
+ f2 = f2+f7;
+ f1 = f1+f9;
+ f0 = f0+f6;
+ r6 = r2 >> 2;
+ r6 = heap32[(r6+8)];
+if(!(uint(r6) >uint(r4))) //_LBB550_6
+{
+break _3;
+}
+}
+}
+else{
+ f0 = 0;
+ f1 = f0;
+ f2 = f0;
+ f3 = f0;
+ f4 = f0;
+ f5 = f0;
+}
+} while(0);
+ r0 = r0 >> 2;
+ f6 = heapFloat[(r0)];
+ f7 = heapFloat[(r0+1)];
+ f8 = heapFloat[(r0+4)];
+ f9 = heapFloat[(r0+5)];
+ f6 = f6*f5;
+ f7 = f7*f4;
+ f10 = heapFloat[(r0+2)];
+ f11 = heapFloat[(r0+8)];
+ f12 = heapFloat[(r0+9)];
+ f13 = heapFloat[(r0+6)];
+ f8 = f8*f5;
+ f9 = f9*f4;
+ f6 = f6+f7;
+ f7 = f10*f3;
+ f10 = heapFloat[(r0+10)];
+ f11 = f11*f5;
+ f12 = f12*f4;
+ f8 = f8+f9;
+ f9 = f13*f3;
+ f6 = f6+f7;
+ f7 = heapFloat[(r0+12)];
+ f13 = heapFloat[(r0+14)];
+ f14 = heapFloat[(r0+13)];
+ f8 = f8+f9;
+ r1 = r1 >> 2;
+ f9 = f11+f12;
+ f10 = f10*f3;
+ f6 = f6+f7;
+ f7 = f9+f10;
+ f8 = f8+f14;
+ heapFloat[(r1+1)] = f6;
+ f6 = f7+f13;
+ heapFloat[(r1+2)] = f8;
+ heapFloat[(r1+3)] = f6;
+ heap32[(r1+4)] = 0;
+ f6 = heapFloat[(r0)];
+ f7 = heapFloat[(r0+1)];
+ f8 = heapFloat[(r0+4)];
+ f9 = heapFloat[(r0+5)];
+ f10 = heapFloat[(r0+2)];
+ f6 = f6*f2;
+ f7 = f7*f1;
+ f11 = heapFloat[(r0+8)];
+ f12 = heapFloat[(r0+9)];
+ f13 = heapFloat[(r0+6)];
+ f8 = f8*f2;
+ f9 = f9*f1;
+ f6 = f6+f7;
+ f7 = f10*f0;
+ f10 = heapFloat[(r0+10)];
+ f11 = f11*f2;
+ f12 = f12*f1;
+ f8 = f8+f9;
+ f9 = f13*f0;
+ f6 = f6+f7;
+ f7 = heapFloat[(r0+12)];
+ f13 = heapFloat[(r0+14)];
+ f14 = heapFloat[(r0+13)];
+ f8 = f8+f9;
+ f9 = f11+f12;
+ f10 = f10*f0;
+ f6 = f6+f7;
+ f7 = f9+f10;
+ f8 = f8+f14;
+ heapFloat[(r1+5)] = f6;
+ f6 = f7+f13;
+ heapFloat[(r1+6)] = f8;
+ heapFloat[(r1+7)] = f6;
+ f2 = f5-f2;
+ heap32[(r1+8)] = 0;
+ f1 = f4-f1;
+ heapFloat[(r1+9)] = f2;
+ f0 = f3-f0;
+ heapFloat[(r1+10)] = f1;
+ heapFloat[(r1+11)] = f0;
+ f2 = f2*f2;
+ f1 = f1*f1;
+ heap32[(r1+12)] = 0;
+ f1 = f2+f1;
+ f0 = f0*f0;
+ f0 = f1+f0;
+ heapFloat[(g0)] = f0;
+ sqrtf(i7);
+ f1 = 1;
+ f2 = 9.9999997473787516e-005;
+ f2 = f_g0 > f2 ? f_g0 : f1;
+ heapFloat[(r1+13)] = f_g0;
+ f0 = f1/f2;
+ f1 = heapFloat[(r1+9)];
+ f1 = f1*f0;
+ heapFloat[(r1+9)] = f1;
+ f1 = heapFloat[(r1+10)];
+ f1 = f1*f0;
+ heapFloat[(r1+10)] = f1;
+ f1 = heapFloat[(r1+11)];
+ f0 = f1*f0;
+ heapFloat[(r1+11)] = f0;
+ r0 = 1;
+ r_g0 = r0;
+ return;
+}
+else{
+ if(r2 !=1) //_LBB550_14
+{
+ r0 = 2;
+}
+else{
+ r0 = 1;
+}
+ r1 = r1 >> 2;
+ heap32[(r1)] = r0;
+ r0 = 0;
+ r_g0 = r0;
+ return;
+}
+}
+
+function _ZN30btGjkEpaPenetrationDepthSolver12calcPenDepthER22btVoronoiSimplexSolverPK13btConvexShapeS4_RK11btTransformS7_R9btVector3S9_S9_P12btIDebugDrawP12btStackAlloc(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+var __label__ = 0;
+ i7 = sp + -104;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+4)];
+ r1 = heap32[(fp+5)];
+ r2 = r0 >> 2;
+ r3 = r1 >> 2;
+ f0 = heapFloat[(r2+14)];
+ f1 = heapFloat[(r3+14)];
+ f2 = heapFloat[(r2+13)];
+ f3 = heapFloat[(r3+13)];
+ f4 = heapFloat[(r2+12)];
+ f5 = heapFloat[(r3+12)];
+ r2 = sp + -16;
+ f4 = f4-f5;
+ r3 = r2 >> 2;
+ f2 = f2-f3;
+ heapFloat[(fp+-4)] = f4;
+ f0 = f0-f1;
+ heapFloat[(r3+1)] = f2;
+ heapFloat[(r3+2)] = f0;
+ heap32[(r3+3)] = 0;
+ r3 = heap32[(fp+2)];
+ r4 = heap32[(fp+3)];
+ r5 = sp + -72;
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r0;
+ heap32[(g0+2)] = r4;
+ heap32[(g0+3)] = r1;
+ heap32[(g0+4)] = r2;
+ heap32[(g0+5)] = r5;
+ heap32[(g0+6)] = 1;
+ r6 = heap32[(fp+6)];
+ r7 = heap32[(fp+7)];
+ r8 = heap32[(fp+8)];
+ _ZN15btGjkEpaSolver211PenetrationEPK13btConvexShapeRK11btTransformS2_S5_RK9btVector3RNS_8sResultsEb(i7);
+ r9 = r_g0;
+ if(r9 ==0) //_LBB551_2
+{
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r0;
+ heap32[(g0+2)] = r4;
+ heap32[(g0+3)] = r1;
+ heap32[(g0+4)] = r2;
+ heap32[(g0+5)] = r5;
+ _ZN15btGjkEpaSolver28DistanceEPK13btConvexShapeRK11btTransformS2_S5_RK9btVector3RNS_8sResultsE(i7);
+ r0 = r_g0;
+if(!(r0 ==0)) //_LBB551_4
+{
+ r0 = r5 >> 2;
+ r1 = r7 >> 2;
+ heap32[(r1)] = heap32[(r0+1)];
+ heap32[(r1+1)] = heap32[(r0+2)];
+ heap32[(r1+2)] = heap32[(r0+3)];
+ r2 = r8 >> 2;
+ heap32[(r1+3)] = heap32[(r0+4)];
+ heap32[(r2)] = heap32[(r0+5)];
+ heap32[(r2+1)] = heap32[(r0+6)];
+ heap32[(r2+2)] = heap32[(r0+7)];
+ r1 = r6 >> 2;
+ heap32[(r2+3)] = heap32[(r0+8)];
+ heap32[(r1)] = heap32[(r0+9)];
+ heap32[(r1+1)] = heap32[(r0+10)];
+ heap32[(r1+2)] = heap32[(r0+11)];
+ heap32[(r1+3)] = heap32[(r0+12)];
+}
+ r0 = 0;
+ r_g0 = r0;
+ return;
+}
+else{
+ r0 = r5 >> 2;
+ r1 = r7 >> 2;
+ heap32[(r1)] = heap32[(r0+1)];
+ heap32[(r1+1)] = heap32[(r0+2)];
+ heap32[(r1+2)] = heap32[(r0+3)];
+ r2 = r8 >> 2;
+ heap32[(r1+3)] = heap32[(r0+4)];
+ heap32[(r2)] = heap32[(r0+5)];
+ heap32[(r2+1)] = heap32[(r0+6)];
+ heap32[(r2+2)] = heap32[(r0+7)];
+ r1 = r6 >> 2;
+ heap32[(r2+3)] = heap32[(r0+8)];
+ heap32[(r1)] = heap32[(r0+9)];
+ heap32[(r1+1)] = heap32[(r0+10)];
+ heap32[(r1+2)] = heap32[(r0+11)];
+ heap32[(r1+3)] = heap32[(r0+12)];
+ r0 = 1;
+ r_g0 = r0;
+ return;
+}
+}
+
+function _ZN30btGjkEpaPenetrationDepthSolverD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV30btGjkEpaPenetrationDepthSolver;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZN30btGjkEpaPenetrationDepthSolverD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV30btGjkEpaPenetrationDepthSolver;
+ r0 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r0)] = r1;
+ return;
+}
+
+function _ZN17btGjkPairDetectorD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV17btGjkPairDetector;
+ r0 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r0)] = r1;
+ return;
+}
+
+function _ZN17btGjkPairDetectorD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV17btGjkPairDetector;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZN17btGjkPairDetector16getClosestPointsERKN36btDiscreteCollisionDetectorInterface17ClosestPointInputERNS0_6ResultEP12btIDebugDrawb(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+ var r13;
+ var r14;
+ var r15;
+ var r16;
+ var r17;
+ var r18;
+ var r19;
+ var r20;
+ var r21;
+ var r22;
+ var r23;
+ var r24;
+ var r25;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+ var f10;
+ var f11;
+ var f12;
+ var f13;
+ var f14;
+ var f15;
+ var f16;
+ var f17;
+ var f18;
+ var f19;
+ var f20;
+ var f21;
+ var f22;
+ var f23;
+ var f24;
+ var f25;
+ var f26;
+ var f27;
+ var f28;
+ var f29;
+ var f30;
+var __label__ = 0;
+ i7 = sp + -304;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ r2 = sp + -32;
+ heap32[(r1+14)] = 0;
+ r3 = r2 >> 2;
+ heap32[(fp+-8)] = 0;
+ heap32[(r3+1)] = 0;
+ r4 = heap32[(fp+1)];
+ heap32[(r3+2)] = 0;
+ r5 = sp + -96;
+ r4 = r4 >> 2;
+ heap32[(r3+3)] = 0;
+ r6 = r5 >> 2;
+ heap32[(fp+-24)] = heap32[(r4)];
+ heap32[(r6+1)] = heap32[(r4+1)];
+ heap32[(r6+2)] = heap32[(r4+2)];
+ heap32[(r6+3)] = heap32[(r4+3)];
+ heap32[(r6+4)] = heap32[(r4+4)];
+ heap32[(r6+5)] = heap32[(r4+5)];
+ heap32[(r6+6)] = heap32[(r4+6)];
+ heap32[(r6+7)] = heap32[(r4+7)];
+ heap32[(r6+8)] = heap32[(r4+8)];
+ heap32[(r6+9)] = heap32[(r4+9)];
+ heap32[(r6+10)] = heap32[(r4+10)];
+ heap32[(r6+11)] = heap32[(r4+11)];
+ f0 = heapFloat[(r4+12)];
+ f1 = heapFloat[(r4+13)];
+ f2 = heapFloat[(r4+14)];
+ r7 = sp + -160;
+ heap32[(r6+15)] = heap32[(r4+15)];
+ r8 = r7 >> 2;
+ heap32[(fp+-40)] = heap32[(r4+16)];
+ heap32[(r8+1)] = heap32[(r4+17)];
+ heap32[(r8+2)] = heap32[(r4+18)];
+ heap32[(r8+3)] = heap32[(r4+19)];
+ heap32[(r8+4)] = heap32[(r4+20)];
+ heap32[(r8+5)] = heap32[(r4+21)];
+ heap32[(r8+6)] = heap32[(r4+22)];
+ heap32[(r8+7)] = heap32[(r4+23)];
+ heap32[(r8+8)] = heap32[(r4+24)];
+ heap32[(r8+9)] = heap32[(r4+25)];
+ heap32[(r8+10)] = heap32[(r4+26)];
+ heap32[(r8+11)] = heap32[(r4+27)];
+ f3 = heapFloat[(r4+28)];
+ f4 = heapFloat[(r4+29)];
+ f5 = heapFloat[(r4+30)];
+ f6 = f0+f3;
+ f7 = 0.5;
+ f6 = f6*f7;
+ f8 = f1+f4;
+ f8 = f8*f7;
+ f9 = f2+f5;
+ f0 = f0-f6;
+ heap32[(r8+15)] = heap32[(r4+31)];
+ f7 = f9*f7;
+ f1 = f1-f8;
+ heapFloat[(r6+12)] = f0;
+ f0 = f2-f7;
+ heapFloat[(r6+13)] = f1;
+ f1 = f3-f6;
+ heapFloat[(r6+14)] = f0;
+ f0 = f4-f8;
+ heapFloat[(r8+12)] = f1;
+ f1 = f5-f7;
+ heapFloat[(r8+13)] = f0;
+ heapFloat[(r8+14)] = f1;
+ r9 = heap32[(r1+7)];
+ r9 = r9 >> 2;
+ r10 = heap32[(fp+2)];
+ r11 = heap32[(fp+3)];
+ r9 = heap32[(r9+1)];
+ r9 = (r9 + -17)|0;
+ if(uint(r9) >uint(1)) //_LBB556_3
+{
+__label__ = 3;
+}
+else{
+ r9 = heap32[(r1+8)];
+ r9 = r9 >> 2;
+ r9 = heap32[(r9+1)];
+ r9 = (r9 + -17)|0;
+ if(uint(r9) >uint(1)) //_LBB556_3
+{
+__label__ = 3;
+}
+else{
+ r9 = (r0 + 32)|0;
+ r12 = 0;
+__label__ = 4;
+}
+}
+if (__label__ == 3){
+ r9 = (r0 + 32)|0;
+ r12 = 1;
+}
+ r13 = gNumGjkChecks;
+ r13 = r13 >> 2;
+ r14 = heap32[(r13)];
+ f0 = heapFloat[(r1+11)];
+ f1 = heapFloat[(r1+12)];
+ r14 = (r14 + 1)|0;
+ heap32[(r13)] = r14;
+ r13 = heapU8[r0+52];
+ heap32[(r1+16)] = 0;
+ heap32[(r1+1)] = 0;
+ heap32[(r1+2)] = 1065353216;
+ heap32[(r1+3)] = 0;
+ heap32[(r1+4)] = 0;
+ heap32[(r1+17)] = 0;
+ heap32[(r1+15)] = -1;
+ r14 = heap32[(r1+6)];
+ r15 = 0;
+ r16 = r14 >> 2;
+ heap8[r14+312] = r15;
+ r17 = 1;
+ heap32[(r16)] = 0;
+ heap8[r14+356] = r17;
+ heap32[(r16+73)] = 1566444395;
+ heap32[(r16+74)] = 1566444395;
+ heap32[(r16+75)] = 1566444395;
+ heap32[(r16+76)] = 0;
+ heap8[r14+352] = r15;
+ heap32[(r16+84)] = 0;
+ heap32[(r16+85)] = 0;
+ heap32[(r16+86)] = 0;
+ heap32[(r16+87)] = 0;
+ r16 = heapU8[r14+332];
+ f2 = 0;
+ r16 = r16 & 240;
+ heap8[r14+332] = r16;
+ f1 = r13 == r15 ? f1 : f2;
+ f0 = r13 == r15 ? f0 : f2;
+ f0 = f0+f1;
+ f3 = heapFloat[(r1+3)];
+ f4 = heapFloat[(r1+2)];
+ f5 = heapFloat[(r1+1)];
+ f9 = 999999984306749440;
+_7: while(true){
+ f10 = -f5;
+ f11 = heapFloat[(r4)];
+ f12 = heapFloat[(r4+4)];
+ f13 = heapFloat[(r4+1)];
+ f14 = heapFloat[(r4+5)];
+ f11 = f11*f10;
+ f12 = f12*f4;
+ f15 = heapFloat[(r4+8)];
+ f16 = heapFloat[(r4+2)];
+ f17 = heapFloat[(r4+6)];
+ f18 = heapFloat[(r4+10)];
+ f19 = heapFloat[(r4+9)];
+ f13 = f13*f10;
+ f14 = f14*f4;
+ f11 = f11-f12;
+ f12 = f15*f3;
+ r13 = sp + -176;
+ f10 = f16*f10;
+ f15 = f17*f4;
+ f13 = f13-f14;
+ f14 = f19*f3;
+ f11 = f11-f12;
+ r14 = r13 >> 2;
+ f10 = f10-f15;
+ f12 = f18*f3;
+ f13 = f13-f14;
+ heapFloat[(fp+-44)] = f11;
+ f10 = f10-f12;
+ heapFloat[(r14+1)] = f13;
+ heapFloat[(r14+2)] = f10;
+ heap32[(r14+3)] = 0;
+ f10 = heapFloat[(r4+16)];
+ f11 = heapFloat[(r4+20)];
+ f12 = heapFloat[(r4+17)];
+ f13 = heapFloat[(r4+21)];
+ f14 = heapFloat[(r4+24)];
+ f10 = f10*f5;
+ f11 = f11*f4;
+ f15 = heapFloat[(r4+18)];
+ f16 = heapFloat[(r4+22)];
+ f17 = heapFloat[(r4+26)];
+ f18 = heapFloat[(r4+25)];
+ f12 = f12*f5;
+ f13 = f13*f4;
+ f10 = f10+f11;
+ f11 = f14*f3;
+ r14 = sp + -192;
+ f5 = f15*f5;
+ f4 = f16*f4;
+ f12 = f12+f13;
+ f13 = f18*f3;
+ f10 = f10+f11;
+ r16 = r14 >> 2;
+ f4 = f5+f4;
+ f3 = f17*f3;
+ f5 = f12+f13;
+ heapFloat[(fp+-48)] = f10;
+ f3 = f4+f3;
+ heapFloat[(r16+1)] = f5;
+ heapFloat[(r16+2)] = f3;
+ heap32[(r16+3)] = 0;
+ r16 = heap32[(r1+7)];
+ r18 = sp + -208;
+ heap32[(g0)] = r18;
+ heap32[(g0+1)] = r16;
+ heap32[(g0+2)] = r13;
+ r13 = r9 >> 2;
+ _ZNK13btConvexShape44localGetSupportVertexWithoutMarginNonVirtualERK9btVector3(i7);
+ r16 = heap32[(r13)];
+ r19 = sp + -224;
+ heap32[(g0)] = r19;
+ heap32[(g0+1)] = r16;
+ heap32[(g0+2)] = r14;
+ _ZNK13btConvexShape44localGetSupportVertexWithoutMarginNonVirtualERK9btVector3(i7);
+ r14 = r18 >> 2;
+ r16 = r19 >> 2;
+ f3 = heapFloat[(r6+8)];
+ f4 = heapFloat[(fp+-52)];
+ f5 = heapFloat[(r6+4)];
+ f10 = heapFloat[(fp+-24)];
+ f11 = heapFloat[(r6+9)];
+ f12 = heapFloat[(r14+1)];
+ f13 = heapFloat[(r6+5)];
+ f14 = heapFloat[(r6+1)];
+ f15 = heapFloat[(r8+8)];
+ f16 = heapFloat[(fp+-56)];
+ f17 = heapFloat[(r8+4)];
+ f18 = heapFloat[(fp+-40)];
+ f19 = heapFloat[(r8+9)];
+ f20 = heapFloat[(r16+1)];
+ f21 = heapFloat[(r8+5)];
+ f22 = heapFloat[(r8+1)];
+ f3 = f3*f4;
+ f11 = f11*f12;
+ f23 = heapFloat[(r6+10)];
+ f24 = heapFloat[(r14+2)];
+ f25 = heapFloat[(r6+6)];
+ f26 = heapFloat[(r6+2)];
+ f15 = f15*f16;
+ f19 = f19*f20;
+ f27 = heapFloat[(r8+10)];
+ f28 = heapFloat[(r16+2)];
+ f29 = heapFloat[(r8+6)];
+ f30 = heapFloat[(r8+2)];
+ f5 = f5*f4;
+ f13 = f13*f12;
+ f17 = f17*f16;
+ f21 = f21*f20;
+ f4 = f10*f4;
+ f10 = f14*f12;
+ f12 = f18*f16;
+ f14 = f22*f20;
+ f3 = f3+f11;
+ f11 = f23*f24;
+ f15 = f15+f19;
+ f16 = f27*f28;
+ f5 = f5+f13;
+ f13 = f25*f24;
+ f17 = f17+f21;
+ f18 = f29*f28;
+ f4 = f4+f10;
+ f10 = f26*f24;
+ f12 = f12+f14;
+ f14 = f30*f28;
+ f3 = f3+f11;
+ f11 = heapFloat[(r6+14)];
+ f15 = f15+f16;
+ f16 = heapFloat[(r8+14)];
+ f5 = f5+f13;
+ f13 = heapFloat[(r6+13)];
+ f17 = f17+f18;
+ f18 = heapFloat[(r8+13)];
+ f4 = f4+f10;
+ f10 = heapFloat[(r6+12)];
+ f12 = f12+f14;
+ f14 = heapFloat[(r8+12)];
+ f5 = f5+f13;
+ f13 = f17+f18;
+ f4 = f4+f10;
+ f10 = f12+f14;
+ f3 = f3+f11;
+ f11 = f15+f16;
+ f3 = r12 != r15 ? f3 : f2;
+ f11 = r12 != r15 ? f11 : f2;
+ f12 = f5-f13;
+ f14 = heapFloat[(r1+2)];
+ f15 = f4-f10;
+ f16 = heapFloat[(r1+1)];
+ f17 = f3-f11;
+ f18 = heapFloat[(r1+3)];
+ f16 = f16*f15;
+ f14 = f14*f12;
+ f14 = f16+f14;
+ f16 = f18*f17;
+ f14 = f14+f16;
+if(!(f14 <=f2)) //_LBB556_8
+{
+ f16 = heapFloat[(r4+32)];
+ f18 = f14*f14;
+ f16 = f16*f9;
+if(!(f18 <=f16)) //_LBB556_8
+{
+__label__ = 7;
+break _7;
+}
+}
+ r14 = heap32[(r1+6)];
+ r16 = r14 >> 2;
+ r18 = heap32[(r16)];
+_12: do {
+ if(r18 >0) //_LBB556_10
+{
+ r19 = -12;
+ f16 = heapFloat[(r16+77)];
+ r20 = (r19 - r14)|0;
+ r21 = 0;
+ r22 = r18;
+ r19 = r21;
+_14: while(true){
+ r23 = -8;
+ r24 = -4;
+ r23 = (r23 - r20)|0;
+ r24 = (r24 - r20)|0;
+ r23 = r23 >> 2;
+ r24 = r24 >> 2;
+ r25 = (r21 - r20)|0;
+ r25 = r25 >> 2;
+ f18 = heapFloat[(r23)];
+ f19 = heapFloat[(r24)];
+ f18 = f15-f18;
+ f19 = f12-f19;
+ f20 = heapFloat[(r25)];
+ f20 = f17-f20;
+ f18 = f18*f18;
+ f19 = f19*f19;
+ f18 = f18+f19;
+ f19 = f20*f20;
+ f18 = f18+f19;
+ r22 = (r22 + -1)|0;
+ r19 = f18 > f16 ? r19 : r17;
+ r20 = (r20 + -16)|0;
+ if(r22 !=0) //_LBB556_11
+{
+continue _14;
+}
+else{
+break _12;
+}
+}
+}
+else{
+ r19 = r15;
+}
+} while(0);
+ f16 = heapFloat[(r16+76)];
+ if(f16 ==f2) //_LBB556_14
+{
+ f16 = heapFloat[(r16+75)];
+if(!(f17 !=f16)) //_LBB556_13
+{
+ f16 = heapFloat[(r16+74)];
+if(!(f12 !=f16)) //_LBB556_13
+{
+ f16 = heapFloat[(r16+73)];
+ r19 = f15 != f16 ? r19 : r17;
+}
+}
+}
+ r19 = r19 & 255;
+ if(r19 ==0) //_LBB556_19
+{
+ f14 = f9-f14;
+ f16 = 9.9999999747524271e-007;
+ f18 = f9*f16;
+ if(f14 >f18) //_LBB556_21
+{
+ heapFloat[(r16+73)] = f15;
+ heapFloat[(r16+74)] = f12;
+ r18 = r18 << 4;
+ heapFloat[(r16+75)] = f17;
+ r18 = (r14 + r18)|0;
+ heap32[(r16+76)] = 0;
+ r18 = r18 >> 2;
+ heap8[r14+356] = r17;
+ heapFloat[(r18+1)] = f15;
+ heapFloat[(r18+2)] = f12;
+ heapFloat[(r18+3)] = f17;
+ heap32[(r18+4)] = 0;
+ r18 = heap32[(r16)];
+ r18 = r18 << 4;
+ r18 = (r14 + r18)|0;
+ r18 = r18 >> 2;
+ heapFloat[(r18+21)] = f4;
+ heapFloat[(r18+22)] = f5;
+ heapFloat[(r18+23)] = f3;
+ heap32[(r18+24)] = 0;
+ r18 = heap32[(r16)];
+ r18 = r18 << 4;
+ r14 = (r14 + r18)|0;
+ r14 = r14 >> 2;
+ heapFloat[(r14+41)] = f10;
+ heapFloat[(r14+42)] = f13;
+ heapFloat[(r14+43)] = f11;
+ heap32[(r14+44)] = 0;
+ r14 = heap32[(r16)];
+ r14 = (r14 + 1)|0;
+ heap32[(r16)] = r14;
+ r14 = heap32[(r1+6)];
+ heap32[(g0)] = r14;
+ _ZN22btVoronoiSimplexSolver28updateClosestVectorAndPointsEv(i7);
+ r16 = r_g0;
+ if(r16 !=0) //_LBB556_23
+{
+ r14 = r14 >> 2;
+ f5 = heapFloat[(r14+69)];
+ f4 = heapFloat[(r14+70)];
+ f3 = heapFloat[(r14+71)];
+ f10 = heapFloat[(r14+72)];
+ heapFloat[(r1+1)] = f5;
+ f11 = f5*f5;
+ f12 = f4*f4;
+ heapFloat[(r1+2)] = f4;
+ f11 = f11+f12;
+ f12 = f3*f3;
+ f11 = f11+f12;
+ heapFloat[(r1+3)] = f3;
+ heapFloat[(r1+4)] = f10;
+ if(f11 >=f16) //_LBB556_25
+{
+ f10 = 1.1920928955078125e-007;
+ f12 = f9-f11;
+ f9 = f9*f10;
+ if(f12 >f9) //_LBB556_27
+{
+ r14 = heap32[(r1+16)];
+ r16 = (r14 + 1)|0;
+ heap32[(r1+16)] = r16;
+ if(r14 <1001) //_LBB556_29
+{
+ r14 = heap32[(r1+6)];
+ r14 = r14 >> 2;
+ r16 = heap32[(r14)];
+ f9 = f11;
+ if(r16 !=4) //_LBB556_5
+{
+continue _7;
+}
+else{
+__label__ = 29;
+break _7;
+}
+}
+else{
+__label__ = 27;
+break _7;
+}
+}
+else{
+__label__ = 25;
+break _7;
+}
+}
+else{
+__label__ = 23;
+break _7;
+}
+}
+else{
+__label__ = 21;
+break _7;
+}
+}
+else{
+__label__ = 19;
+break _7;
+}
+}
+else{
+__label__ = 17;
+break _7;
+}
+}
+_29: do {
+switch(__label__ ){//multiple entries
+case 7:
+ heap32[(r1+17)] = 10;
+__label__ = 30;
+break _29;
+break;
+case 29:
+ heap32[(r1+1)] = heap32[(r14+69)];
+ heap32[(r1+2)] = heap32[(r14+70)];
+ heap32[(r1+3)] = heap32[(r14+71)];
+ r17 = 0;
+ heap32[(r1+4)] = heap32[(r14+72)];
+ heap32[(r1+17)] = 13;
+__label__ = 37;
+break _29;
+break;
+case 27:
+ r6 = _2E_str425;
+ heap32[(g0)] = r6;
+ heap32[(g0+1)] = r16;
+ printf(i7);
+ r6 = heap32[(r13)];
+ r8 = heap32[(r1+7)];
+ r6 = r6 >> 2;
+ r8 = r8 >> 2;
+ f2 = heapFloat[(r1+3)];
+ f3 = heapFloat[(r1+2)];
+ f4 = heapFloat[(r1+1)];
+ r6 = heap32[(r6+1)];
+ r8 = heap32[(r8+1)];
+ r9 = _2E_str1426;
+ f4 = f4; //fstod f4, f4
+ f3 = f3; //fstod f3, f3
+ f2 = f2; //fstod f2, f2
+ f5 = f11; //fstod f11, f5
+ heap32[(g0)] = r9;
+ llvm_writeDouble((i7+8),f4);
+ llvm_writeDouble((i7+16),f3);
+ llvm_writeDouble((i7+24),f2);
+ llvm_writeDouble((i7+32),f5);
+ heap32[(g0+10)] = r8;
+ heap32[(g0+11)] = r6;
+ f2 = 0;
+ r17 = 0;
+ printf(i7);
+__label__ = 37;
+break _29;
+break;
+case 25:
+ r6 = heap32[(r1+6)];
+ r6 = r6 >> 2;
+ heap32[(r1+1)] = heap32[(r6+69)];
+ heap32[(r1+2)] = heap32[(r6+70)];
+ heap32[(r1+3)] = heap32[(r6+71)];
+ heap32[(r1+4)] = heap32[(r6+72)];
+ heap32[(r1+17)] = 12;
+ f9 = f11;
+__label__ = 30;
+break _29;
+break;
+case 23:
+ heap32[(r1+17)] = 6;
+__label__ = 30;
+break _29;
+break;
+case 21:
+ heap32[(r1+17)] = 3;
+__label__ = 30;
+break _29;
+break;
+case 19:
+ r6 = 11;
+ r8 = 2;
+ r6 = f14 > f2 ? r6 : r8;
+ heap32[(r1+17)] = r6;
+__label__ = 30;
+break _29;
+break;
+case 17:
+ heap32[(r1+17)] = 1;
+__label__ = 30;
+break;
+}
+} while(0);
+if (__label__ == 30){
+ r6 = heap32[(r1+6)];
+ heap32[(g0)] = r6;
+ r6 = r6 >> 2;
+ _ZN22btVoronoiSimplexSolver28updateClosestVectorAndPointsEv(i7);
+ f3 = heapFloat[(r6+65)];
+ f2 = heapFloat[(r6+61)];
+ f4 = heapFloat[(r6+66)];
+ f5 = heapFloat[(r6+62)];
+ f10 = heapFloat[(r6+67)];
+ f11 = heapFloat[(r6+63)];
+ f2 = f2-f3;
+ f5 = f5-f4;
+ heapFloat[(fp+-8)] = f2;
+ f2 = f11-f10;
+ heapFloat[(r3+1)] = f5;
+ heapFloat[(r3+2)] = f2;
+ heap32[(r3+3)] = 0;
+ f2 = heapFloat[(r1+1)];
+ f5 = heapFloat[(r1+2)];
+ f11 = heapFloat[(r1+3)];
+ f2 = f2*f2;
+ f5 = f5*f5;
+ f2 = f2+f5;
+ f5 = f11*f11;
+ f2 = f2+f5;
+ f5 = f2; //fstod f2, f5
+ f11 = 0.0001;
+if(!(f5 >=f11)) //_LBB556_33
+{
+ heap32[(r1+17)] = 5;
+}
+ f5 = 1.4210854715202004e-014;
+ if(f2 <=f5) //_LBB556_37
+{
+ f2 = 0;
+ r17 = 0;
+ heap32[(r1+15)] = 2;
+}
+else{
+ heapFloat[(g0)] = f2;
+ sqrtf(i7);
+ f5 = 1;
+ f2 = f5/f_g0;
+ f11 = heapFloat[(fp+-8)];
+ f11 = f11*f2;
+ heapFloat[(fp+-8)] = f11;
+ f11 = heapFloat[(r3+1)];
+ f11 = f11*f2;
+ heapFloat[(r3+1)] = f11;
+ f11 = heapFloat[(r3+2)];
+ f11 = f11*f2;
+ heapFloat[(r3+2)] = f11;
+ heapFloat[(g0)] = f9;
+ sqrtf(i7);
+ f9 = f_g0;
+ f11 = 0;
+ if(f9 >f11) //_LBB556_36
+{
+ f9 = f1/f9;
+ f11 = heapFloat[(r1+3)];
+ f12 = heapFloat[(r1+2)];
+ f13 = heapFloat[(r1+1)];
+ f13 = f13*f9;
+ f12 = f12*f9;
+ f9 = f11*f9;
+ f2 = f5/f2;
+ f3 = f3+f13;
+ f4 = f4+f12;
+ f10 = f10+f9;
+ f2 = f2-f0;
+ heap32[(r1+15)] = 1;
+}
+else{
+ r0 = _2E_str2427;
+ r1 = _2E_str3428;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 320;
+ _assert(i7);
+}
+}
+}
+ r6 = heap32[(r1+18)];
+ if(r6 ==0) //_LBB556_45
+{
+__label__ = 42;
+}
+else{
+ r6 = heap32[(r1+5)];
+ if(r6 ==0) //_LBB556_45
+{
+__label__ = 42;
+}
+else{
+ r8 = heap32[(r1+17)];
+ if(r8 ==0) //_LBB556_45
+{
+__label__ = 42;
+}
+else{
+ f5 = f2+f0;
+ f5 = f5; //fstod f5, f5
+ f9 = 0.01;
+ if(f5 <f9) //_LBB556_43
+{
+__label__ = 44;
+}
+else{
+ r8 = r17 & 255;
+ if(r8 ==1) //_LBB556_44
+{
+__label__ = 60;
+}
+else{
+__label__ = 44;
+}
+}
+}
+}
+}
+if (__label__ == 42){
+ r6 = r17 & 255;
+ if(r6 ==1) //_LBB556_44
+{
+__label__ = 60;
+}
+else{
+ r6 = heap32[(r1+5)];
+ if(r6 ==0) //_LBB556_62
+{
+__label__ = 59;
+}
+else{
+__label__ = 44;
+}
+}
+}
+_58: do {
+if (__label__ == 44){
+ r8 = gNumDeepPenetrationChecks;
+ r8 = r8 >> 2;
+ r9 = heap32[(r8)];
+ r9 = (r9 + 1)|0;
+ heap32[(r8)] = r9;
+ heap32[(r1+1)] = 0;
+ heap32[(r1+2)] = 0;
+ heap32[(r1+3)] = 0;
+ heap32[(r1+4)] = 0;
+ r8 = r6 >> 2;
+ r8 = heap32[(r8)];
+ r8 = r8 >> 2;
+ r8 = heap32[(r8+2)];
+ r9 = heap32[(r4+33)];
+ r12 = heap32[(r13)];
+ r13 = heap32[(r1+7)];
+ r14 = heap32[(r1+6)];
+ r0 = (r0 + 4)|0;
+ r15 = sp + -240;
+ r16 = sp + -256;
+ heap32[(g0)] = r6;
+ heap32[(g0+1)] = r14;
+ heap32[(g0+2)] = r13;
+ heap32[(g0+3)] = r12;
+ heap32[(g0+4)] = r5;
+ heap32[(g0+5)] = r7;
+ heap32[(g0+6)] = r0;
+ heap32[(g0+7)] = r15;
+ heap32[(g0+8)] = r16;
+ heap32[(g0+9)] = r11;
+ heap32[(g0+10)] = r9;
+ __FUNCTION_TABLE__[(r8)>>2](i7);
+ r0 = r_g0;
+ if(r0 ==0) //_LBB556_57
+{
+ f5 = heapFloat[(r1+1)];
+ f9 = heapFloat[(r1+2)];
+ f11 = heapFloat[(r1+3)];
+ f5 = f5*f5;
+ f9 = f9*f9;
+ f5 = f5+f9;
+ f9 = f11*f11;
+ f5 = f5+f9;
+ f9 = 0;
+ if(f5 <=f9) //_LBB556_62
+{
+__label__ = 59;
+break _58;
+}
+else{
+ r0 = r15 >> 2;
+ r5 = r16 >> 2;
+ f5 = heapFloat[(r0+1)];
+ f9 = heapFloat[(r5+1)];
+ f11 = heapFloat[(fp+-60)];
+ f12 = heapFloat[(fp+-64)];
+ f11 = f11-f12;
+ f5 = f5-f9;
+ f9 = heapFloat[(r0+2)];
+ f12 = heapFloat[(r5+2)];
+ f9 = f9-f12;
+ f11 = f11*f11;
+ f5 = f5*f5;
+ f5 = f11+f5;
+ f9 = f9*f9;
+ f5 = f5+f9;
+ heapFloat[(g0)] = f5;
+ sqrtf(i7);
+ f0 = f_g0-f0;
+ r0 = r17 & 255;
+if(!(r0 !=1)) //_LBB556_60
+{
+ if(f0 >=f2) //_LBB556_61
+{
+ heap32[(r1+15)] = 5;
+__label__ = 59;
+break _58;
+}
+}
+ f2 = heapFloat[(r1+1)];
+ f3 = heapFloat[(r1+2)];
+ f4 = heapFloat[(r1+3)];
+ f10 = heapFloat[(fp+-64)];
+ f5 = heapFloat[(r5+1)];
+ f9 = heapFloat[(r5+2)];
+ heapFloat[(fp+-8)] = f2;
+ heapFloat[(r3+1)] = f3;
+ heapFloat[(r3+2)] = f4;
+ f11 = f2*f2;
+ f12 = f3*f3;
+ heap32[(r3+3)] = heap32[(r1+4)];
+ f11 = f11+f12;
+ f12 = f4*f4;
+ f11 = f11+f12;
+ heapFloat[(g0)] = f11;
+ sqrtf(i7);
+ f12 = 1;
+ f11 = f12/f_g0;
+ f12 = heapFloat[(fp+-8)];
+ f12 = f12*f11;
+ heapFloat[(fp+-8)] = f12;
+ f12 = heapFloat[(r3+1)];
+ f12 = f12*f11;
+ heapFloat[(r3+1)] = f12;
+ f12 = heapFloat[(r3+2)];
+ f2 = f2*f1;
+ f13 = f3*f1;
+ f1 = f4*f1;
+ f11 = f12*f11;
+ f3 = f10+f2;
+ f4 = f5+f13;
+ f10 = f9+f1;
+ heapFloat[(r3+2)] = f11;
+ heap32[(r1+15)] = 6;
+ f2 = f0;
+__label__ = 60;
+break _58;
+}
+}
+else{
+ r16 = r16 >> 2;
+ r15 = r15 >> 2;
+ f0 = heapFloat[(r16+1)];
+ f1 = heapFloat[(r15+1)];
+ f5 = heapFloat[(fp+-64)];
+ f9 = heapFloat[(fp+-60)];
+ f0 = f0-f1;
+ f1 = f5-f9;
+ f5 = heapFloat[(r16+2)];
+ f9 = heapFloat[(r15+2)];
+ f5 = f5-f9;
+ f9 = f1*f1;
+ f11 = f0*f0;
+ f9 = f9+f11;
+ f11 = f5*f5;
+ f9 = f9+f11;
+ f11 = 1.4210854715202004e-014;
+ if(f9 <=f11) //_LBB556_50
+{
+ f1 = heapFloat[(r1+1)];
+ f0 = heapFloat[(r1+2)];
+ f5 = heapFloat[(r1+3)];
+ f9 = f1*f1;
+ f12 = f0*f0;
+ f9 = f9+f12;
+ f13 = f5*f5;
+ f12 = heapFloat[(r1+4)];
+ f9 = f9+f13;
+}
+else{
+ f12 = 0;
+}
+ if(f9 <=f11) //_LBB556_56
+{
+ heap32[(r1+15)] = 9;
+__label__ = 59;
+break _58;
+}
+else{
+ heapFloat[(g0)] = f9;
+ sqrtf(i7);
+ f9 = f_g0;
+ f11 = heapFloat[(r15+1)];
+ f13 = heapFloat[(r16+1)];
+ f14 = heapFloat[(fp+-60)];
+ f15 = heapFloat[(fp+-64)];
+ f14 = f14-f15;
+ f11 = f11-f13;
+ f13 = heapFloat[(r15+2)];
+ f15 = heapFloat[(r16+2)];
+ f13 = f13-f15;
+ f14 = f14*f14;
+ f11 = f11*f11;
+ f11 = f14+f11;
+ f13 = f13*f13;
+ f11 = f11+f13;
+ heapFloat[(g0)] = f11;
+ sqrtf(i7);
+ f11 = -f_g0;
+ r15 = r17 & 255;
+if(!(r15 !=1)) //_LBB556_54
+{
+ if(f2 <=f11) //_LBB556_55
+{
+ heap32[(r1+15)] = 8;
+__label__ = 59;
+break _58;
+}
+}
+ f2 = 1;
+ f2 = f2/f9;
+ f3 = heapFloat[(fp+-64)];
+ f4 = heapFloat[(r16+1)];
+ f10 = heapFloat[(r16+2)];
+ f1 = f1*f2;
+ f0 = f0*f2;
+ heapFloat[(fp+-8)] = f1;
+ f1 = f5*f2;
+ heapFloat[(r3+1)] = f0;
+ heapFloat[(r3+2)] = f1;
+ heapFloat[(r3+3)] = f12;
+ heap32[(r1+15)] = 3;
+ f2 = f11;
+__label__ = 60;
+}
+}
+}
+} while(0);
+if (__label__ == 59){
+ r0 = r17 & 255;
+ if(r0 ==0) //_LBB556_66
+{
+__label__ = 63;
+}
+else{
+__label__ = 60;
+}
+}
+_81: do {
+if (__label__ == 60){
+ f0 = 0;
+if(!(f2 <f0)) //_LBB556_65
+{
+ f0 = f2*f2;
+ f1 = heapFloat[(r4+32)];
+ if(f0 >=f1) //_LBB556_66
+{
+break _81;
+}
+}
+ heap32[(r1+1)] = heap32[(fp+-8)];
+ heap32[(r1+2)] = heap32[(r3+1)];
+ heap32[(r1+3)] = heap32[(r3+2)];
+ heap32[(r1+4)] = heap32[(r3+3)];
+ r0 = r10 >> 2;
+ heapFloat[(r1+14)] = f2;
+ r0 = heap32[(r0)];
+ r0 = r0 >> 2;
+ r0 = heap32[(r0+4)];
+ r1 = sp + -16;
+ f0 = f3+f6;
+ r3 = r1 >> 2;
+ f1 = f4+f8;
+ heapFloat[(fp+-4)] = f0;
+ f0 = f10+f7;
+ heapFloat[(r3+1)] = f1;
+ heapFloat[(r3+2)] = f0;
+ heap32[(r3+3)] = 0;
+ heap32[(g0)] = r10;
+ heap32[(g0+1)] = r2;
+ heap32[(g0+2)] = r1;
+ heapFloat[(g0+3)] = f2;
+ __FUNCTION_TABLE__[(r0)>>2](i7);
+}
+} while(0);
+ return;
+}
+
+function _ZN20btPersistentManifold18removeContactPointEi(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ r2 = heap32[(r1+279)];
+ r3 = (r2 + -1)|0;
+ r4 = heap32[(fp+1)];
+ if(r3 ==r4) //_LBB557_2
+{
+ r3 = (r2 * 276)|0;
+ r0 = (r0 + r3)|0;
+ r0 = r0 >> 2;
+ r0 = heap32[(r0+-41)];
+ if(r0 !=0) //_LBB557_4
+{
+ r1 = _2E_str434;
+ r2 = _2E_str483;
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r2;
+ heap32[(g0+2)] = 160;
+ _assert(i7);
+}
+}
+else{
+ r4 = (r4 * 276)|0;
+ r5 = (r0 + 4)|0;
+ r3 = (r3 * 276)|0;
+ r4 = (r5 + r4)|0;
+ r3 = (r5 + r3)|0;
+ r2 = (r2 * 276)|0;
+ heap32[(g0)] = r4;
+ heap32[(g0+1)] = r3;
+ heap32[(g0+2)] = 276;
+ r0 = (r0 + r2)|0;
+ memcpy(i7);
+ r2 = r0 >> 2;
+ heap32[(r2+-41)] = 0;
+ heap32[(r2+-16)] = 0;
+ heap32[(r2+-8)] = 0;
+ heap32[(r2)] = 0;
+ r3 = 0;
+ heap32[(r2+-40)] = 0;
+ heap8[r0+-156] = r3;
+ heap32[(r2+-38)] = 0;
+ heap32[(r2+-37)] = 0;
+ heap32[(r2+-32)] = 0;
+ r2 = heap32[(r1+279)];
+}
+ r0 = (r2 + -1)|0;
+ heap32[(r1+279)] = r0;
+ return;
+}
+
+function _ZN20btPersistentManifold20refreshContactPointsERK11btTransformS2_(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+ var f10;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ r2 = heap32[(r1+279)];
+ r3 = (r2 + -1)|0;
+ if(r3 >-1) //_LBB558_2
+{
+ r3 = heap32[(fp+1)];
+ r4 = heap32[(fp+2)];
+_3: while(true){
+ r5 = (r2 * 69)|0;
+ r5 = r5 << 2;
+ r5 = (r0 + r5)|0;
+ r6 = r3 >> 2;
+ r5 = r5 >> 2;
+ f0 = heapFloat[(r5+-68)];
+ f1 = heapFloat[(r6)];
+ f2 = heapFloat[(r5+-67)];
+ f3 = heapFloat[(r6+1)];
+ f4 = heapFloat[(r6+4)];
+ f5 = heapFloat[(r6+5)];
+ f1 = f1*f0;
+ f3 = f3*f2;
+ f6 = heapFloat[(r5+-66)];
+ f7 = heapFloat[(r6+2)];
+ f8 = heapFloat[(r6+8)];
+ f9 = heapFloat[(r6+9)];
+ f10 = heapFloat[(r6+6)];
+ f4 = f4*f0;
+ f5 = f5*f2;
+ f1 = f1+f3;
+ f3 = f7*f6;
+ f7 = heapFloat[(r6+10)];
+ f0 = f8*f0;
+ f2 = f9*f2;
+ f4 = f4+f5;
+ f5 = f10*f6;
+ f1 = f1+f3;
+ f3 = heapFloat[(r6+12)];
+ f8 = heapFloat[(r6+14)];
+ f9 = heapFloat[(r6+13)];
+ f4 = f4+f5;
+ f0 = f0+f2;
+ f2 = f7*f6;
+ f1 = f1+f3;
+ f0 = f0+f2;
+ f2 = f4+f9;
+ heapFloat[(r5+-56)] = f1;
+ f0 = f0+f8;
+ heapFloat[(r5+-55)] = f2;
+ heapFloat[(r5+-54)] = f0;
+ heap32[(r5+-53)] = 0;
+ r6 = r4 >> 2;
+ f0 = heapFloat[(r5+-64)];
+ f1 = heapFloat[(r6)];
+ f2 = heapFloat[(r5+-63)];
+ f3 = heapFloat[(r6+1)];
+ f4 = heapFloat[(r6+4)];
+ f5 = heapFloat[(r6+5)];
+ f1 = f1*f0;
+ f3 = f3*f2;
+ f6 = heapFloat[(r5+-62)];
+ f7 = heapFloat[(r6+2)];
+ f8 = heapFloat[(r6+8)];
+ f9 = heapFloat[(r6+9)];
+ f10 = heapFloat[(r6+6)];
+ f4 = f4*f0;
+ f5 = f5*f2;
+ f1 = f1+f3;
+ f3 = f7*f6;
+ f7 = heapFloat[(r6+10)];
+ f0 = f8*f0;
+ f2 = f9*f2;
+ f4 = f4+f5;
+ f5 = f10*f6;
+ f1 = f1+f3;
+ f3 = heapFloat[(r6+12)];
+ f8 = heapFloat[(r6+14)];
+ f9 = heapFloat[(r6+13)];
+ f4 = f4+f5;
+ f0 = f0+f2;
+ f2 = f7*f6;
+ f1 = f1+f3;
+ f0 = f0+f2;
+ f2 = f4+f9;
+ heapFloat[(r5+-60)] = f1;
+ f0 = f0+f8;
+ heapFloat[(r5+-59)] = f2;
+ heapFloat[(r5+-58)] = f0;
+ heap32[(r5+-57)] = 0;
+ f0 = heapFloat[(r5+-55)];
+ f1 = heapFloat[(r5+-59)];
+ f2 = heapFloat[(r5+-56)];
+ f3 = heapFloat[(r5+-60)];
+ f2 = f2-f3;
+ f3 = heapFloat[(r5+-52)];
+ f0 = f0-f1;
+ f1 = heapFloat[(r5+-51)];
+ f4 = heapFloat[(r5+-54)];
+ f5 = heapFloat[(r5+-58)];
+ f6 = heapFloat[(r5+-50)];
+ f4 = f4-f5;
+ f2 = f2*f3;
+ f0 = f0*f1;
+ f0 = f2+f0;
+ f1 = f4*f6;
+ f0 = f0+f1;
+ heapFloat[(r5+-48)] = f0;
+ r6 = heap32[(r5+-32)];
+ r2 = (r2 + -1)|0;
+ r6 = (r6 + 1)|0;
+ heap32[(r5+-32)] = r6;
+if(!(r2 !=0)) //_LBB558_3
+{
+break _3;
+}
+}
+ r2 = heap32[(r1+279)];
+}
+ r2 = (r2 + -1)|0;
+_7: do {
+if(!(r2 <0)) //_LBB558_11
+{
+_8: while(true){
+ r3 = r2;
+ r2 = (r3 * 69)|0;
+ r2 = r2 << 2;
+ r2 = (r0 + r2)|0;
+ r2 = r2 >> 2;
+ f0 = heapFloat[(r2+21)];
+ f1 = heapFloat[(r1+280)];
+ if(f0 <=f1) //_LBB558_8
+{
+ f2 = heapFloat[(r2+17)];
+ f3 = heapFloat[(r2+18)];
+ f4 = heapFloat[(r2+19)];
+ f5 = heapFloat[(r2+13)];
+ f2 = f2*f0;
+ f6 = heapFloat[(r2+14)];
+ f3 = f3*f0;
+ f7 = heapFloat[(r2+9)];
+ f2 = f5-f2;
+ f5 = heapFloat[(r2+10)];
+ f3 = f6-f3;
+ f6 = heapFloat[(r2+15)];
+ f0 = f4*f0;
+ f2 = f7-f2;
+ f3 = f5-f3;
+ f4 = heapFloat[(r2+11)];
+ f0 = f6-f0;
+ f0 = f4-f0;
+ f2 = f2*f2;
+ f3 = f3*f3;
+ f2 = f2+f3;
+ f0 = f0*f0;
+ f1 = f1*f1;
+ f0 = f2+f0;
+if(!(f1 >=f0)) //_LBB558_10
+{
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r3;
+ _ZN20btPersistentManifold18removeContactPointEi(i7);
+}
+}
+else{
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r3;
+ _ZN20btPersistentManifold18removeContactPointEi(i7);
+}
+ r2 = (r3 + -1)|0;
+ if(r3 !=0) //_LBB558_6
+{
+continue _8;
+}
+else{
+break _7;
+}
+}
+}
+} while(0);
+ return;
+}
+
+function _ZN25btTriangleRaycastCallback15processTriangleEP9btVector3ii(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+ var f10;
+ var f11;
+ var f12;
+ var f13;
+ var f14;
+ var f15;
+ var f16;
+ var f17;
+ var f18;
+ var f19;
+ var f20;
+ var f21;
+ var f22;
+ var f23;
+ var f24;
+var __label__ = 0;
+ i7 = sp + -56;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ r0 = r0 >> 2;
+ f0 = heapFloat[(r0+6)];
+ f1 = heapFloat[(r0+2)];
+ f2 = heapFloat[(r0+10)];
+ f3 = heapFloat[(r0+5)];
+ f4 = heapFloat[(r0+1)];
+ f5 = heapFloat[(r0+9)];
+ f6 = heapFloat[(r0+4)];
+ f7 = heapFloat[(r0)];
+ f8 = heapFloat[(r0+8)];
+ f9 = f3-f4;
+ f10 = f2-f1;
+ f11 = f0-f1;
+ f12 = f5-f4;
+ f13 = f8-f7;
+ f14 = f6-f7;
+ f15 = f9*f10;
+ f16 = f11*f12;
+ f15 = f15-f16;
+ r0 = sp + -32;
+ f11 = f11*f13;
+ f10 = f14*f10;
+ f10 = f11-f10;
+ r1 = r0 >> 2;
+ heapFloat[(fp+-8)] = f15;
+ f11 = f14*f12;
+ f9 = f9*f13;
+ f9 = f11-f9;
+ heapFloat[(r1+1)] = f10;
+ r2 = heap32[(fp)];
+ heapFloat[(r1+2)] = f9;
+ r3 = r2 >> 2;
+ heap32[(r1+3)] = 0;
+ f11 = heapFloat[(r3+1)];
+ f12 = heapFloat[(r3+2)];
+ f13 = heapFloat[(r3+5)];
+ f14 = heapFloat[(r3+6)];
+ f16 = heapFloat[(r3+3)];
+ f17 = heapFloat[(r3+7)];
+ f18 = f15*f11;
+ f19 = f10*f12;
+ f20 = f15*f13;
+ f21 = f10*f14;
+ f22 = f7*f15;
+ f23 = f4*f10;
+ f18 = f18+f19;
+ f19 = f9*f16;
+ f20 = f20+f21;
+ f21 = f9*f17;
+ f22 = f22+f23;
+ f23 = f1*f9;
+ f18 = f18+f19;
+ f19 = f22+f23;
+ f20 = f20+f21;
+ f18 = f18-f19;
+ f19 = f20-f19;
+ f20 = f18*f19;
+ f21 = 0;
+_1: do {
+if(!(f20 >=f21)) //_LBB559_11
+{
+ r4 = heap32[(r3+9)];
+ r4 = r4 & 1;
+if(!(r4 ==0)) //_LBB559_3
+{
+ if(f18 >f21) //_LBB559_11
+{
+break _1;
+}
+}
+ f19 = f18-f19;
+ f19 = f18/f19;
+ f20 = heapFloat[(r3+10)];
+if(!(f20 <=f19)) //_LBB559_11
+{
+ f20 = 1;
+ f22 = f20-f19;
+ f16 = f16*f22;
+ f17 = f17*f19;
+ f12 = f12*f22;
+ f14 = f14*f19;
+ f11 = f11*f22;
+ f13 = f13*f19;
+ f16 = f16+f17;
+ f12 = f12+f14;
+ f11 = f11+f13;
+ f1 = f1-f16;
+ f3 = f3-f12;
+ f7 = f7-f11;
+ f0 = f0-f16;
+ f4 = f4-f12;
+ f6 = f6-f11;
+ f13 = f15*f15;
+ f14 = f10*f10;
+ f17 = f4*f0;
+ f22 = f1*f3;
+ f23 = f1*f6;
+ f24 = f7*f0;
+ f13 = f13+f14;
+ f14 = f9*f9;
+ f17 = f17-f22;
+ f22 = f23-f24;
+ f13 = f13+f14;
+ f14 = -9.9999997473787516e-005;
+ f23 = f7*f3;
+ f24 = f4*f6;
+ f23 = f23-f24;
+ f14 = f13*f14;
+ f17 = f17*f15;
+ f22 = f22*f10;
+ f17 = f17+f22;
+ f22 = f23*f9;
+ f17 = f17+f22;
+if(!(f17 <f14)) //_LBB559_11
+{
+ f2 = f2-f16;
+ f5 = f5-f12;
+ f8 = f8-f11;
+ f11 = f3*f2;
+ f12 = f0*f5;
+ f0 = f0*f8;
+ f16 = f6*f2;
+ f11 = f11-f12;
+ f0 = f0-f16;
+ f6 = f6*f5;
+ f3 = f3*f8;
+ f11 = f11*f15;
+ f0 = f0*f10;
+ f3 = f6-f3;
+ f0 = f11+f0;
+ f3 = f3*f9;
+ f0 = f0+f3;
+if(!(f0 <f14)) //_LBB559_11
+{
+ f0 = f5*f1;
+ f3 = f2*f4;
+ f2 = f2*f7;
+ f1 = f8*f1;
+ f0 = f0-f3;
+ f1 = f2-f1;
+ f2 = f8*f4;
+ f3 = f5*f7;
+ f0 = f0*f15;
+ f1 = f1*f10;
+ f2 = f2-f3;
+ f0 = f0+f1;
+ f1 = f2*f9;
+ f0 = f0+f1;
+if(!(f0 <f14)) //_LBB559_11
+{
+ r4 = heap32[(fp+2)];
+ r5 = heap32[(fp+3)];
+ heapFloat[(g0)] = f13;
+ sqrtf(i7);
+ f0 = f20/f_g0;
+ f1 = heapFloat[(fp+-8)];
+ f1 = f1*f0;
+ heapFloat[(fp+-8)] = f1;
+ f2 = heapFloat[(r1+1)];
+ f2 = f2*f0;
+ heapFloat[(r1+1)] = f2;
+ f3 = heapFloat[(r1+2)];
+ f0 = f3*f0;
+ heapFloat[(r1+2)] = f0;
+ r1 = heap32[(r3)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+3)];
+ r6 = heap32[(r3+9)];
+ r6 = r6 & 2;
+ if(r6 !=0) //_LBB559_9
+{
+__label__ = 9;
+}
+else{
+ if(f18 >f21) //_LBB559_10
+{
+__label__ = 10;
+}
+else{
+__label__ = 9;
+}
+}
+if (__label__ == 9){
+ r0 = sp + -16;
+ f1 = -f1;
+ r6 = r0 >> 2;
+ f2 = -f2;
+ heapFloat[(fp+-4)] = f1;
+ f0 = -f0;
+ heapFloat[(r6+1)] = f2;
+ heapFloat[(r6+2)] = f0;
+ heap32[(r6+3)] = 0;
+}
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = r0;
+ heapFloat[(g0+2)] = f19;
+ heap32[(g0+3)] = r4;
+ heap32[(g0+4)] = r5;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+ heapFloat[(r3+10)] = f_g0;
+}
+}
+}
+}
+}
+} while(0);
+ return;
+}
+
+function _ZN28btTriangleConvexcastCallbackC2EPK13btConvexShapeRK11btTransformS5_S5_f(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV28btTriangleConvexcastCallback;
+ r0 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ r2 = heap32[(fp+2)];
+ r3 = heap32[(fp+1)];
+ heap32[(r0)] = r1;
+ r1 = r2 >> 2;
+ heap32[(r0+1)] = r3;
+ heap32[(r0+2)] = heap32[(r1)];
+ heap32[(r0+3)] = heap32[(r1+1)];
+ heap32[(r0+4)] = heap32[(r1+2)];
+ heap32[(r0+5)] = heap32[(r1+3)];
+ heap32[(r0+6)] = heap32[(r1+4)];
+ heap32[(r0+7)] = heap32[(r1+5)];
+ heap32[(r0+8)] = heap32[(r1+6)];
+ heap32[(r0+9)] = heap32[(r1+7)];
+ heap32[(r0+10)] = heap32[(r1+8)];
+ heap32[(r0+11)] = heap32[(r1+9)];
+ heap32[(r0+12)] = heap32[(r1+10)];
+ heap32[(r0+13)] = heap32[(r1+11)];
+ heap32[(r0+14)] = heap32[(r1+12)];
+ heap32[(r0+15)] = heap32[(r1+13)];
+ r2 = heap32[(fp+3)];
+ heap32[(r0+16)] = heap32[(r1+14)];
+ r2 = r2 >> 2;
+ heap32[(r0+17)] = heap32[(r1+15)];
+ heap32[(r0+18)] = heap32[(r2)];
+ heap32[(r0+19)] = heap32[(r2+1)];
+ heap32[(r0+20)] = heap32[(r2+2)];
+ heap32[(r0+21)] = heap32[(r2+3)];
+ heap32[(r0+22)] = heap32[(r2+4)];
+ heap32[(r0+23)] = heap32[(r2+5)];
+ heap32[(r0+24)] = heap32[(r2+6)];
+ heap32[(r0+25)] = heap32[(r2+7)];
+ heap32[(r0+26)] = heap32[(r2+8)];
+ heap32[(r0+27)] = heap32[(r2+9)];
+ heap32[(r0+28)] = heap32[(r2+10)];
+ heap32[(r0+29)] = heap32[(r2+11)];
+ heap32[(r0+30)] = heap32[(r2+12)];
+ heap32[(r0+31)] = heap32[(r2+13)];
+ r1 = heap32[(fp+4)];
+ heap32[(r0+32)] = heap32[(r2+14)];
+ r1 = r1 >> 2;
+ heap32[(r0+33)] = heap32[(r2+15)];
+ heap32[(r0+34)] = heap32[(r1)];
+ heap32[(r0+35)] = heap32[(r1+1)];
+ heap32[(r0+36)] = heap32[(r1+2)];
+ heap32[(r0+37)] = heap32[(r1+3)];
+ heap32[(r0+38)] = heap32[(r1+4)];
+ heap32[(r0+39)] = heap32[(r1+5)];
+ heap32[(r0+40)] = heap32[(r1+6)];
+ heap32[(r0+41)] = heap32[(r1+7)];
+ heap32[(r0+42)] = heap32[(r1+8)];
+ heap32[(r0+43)] = heap32[(r1+9)];
+ heap32[(r0+44)] = heap32[(r1+10)];
+ heap32[(r0+45)] = heap32[(r1+11)];
+ heap32[(r0+46)] = heap32[(r1+12)];
+ heap32[(r0+47)] = heap32[(r1+13)];
+ heap32[(r0+48)] = heap32[(r1+14)];
+ heap32[(r0+49)] = heap32[(r1+15)];
+ heap32[(r0+50)] = 1065353216;
+ heap32[(r0+51)] = heap32[(fp+5)];
+ return;
+}
+
+function _ZN28btTriangleConvexcastCallbackD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV18btTriangleCallback;
+ r0 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r0)] = r1;
+ return;
+}
+
+function _ZN28btTriangleConvexcastCallbackD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV18btTriangleCallback;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZN28btTriangleConvexcastCallback15processTriangleEP9btVector3ii(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var f0;
+ var f1;
+ var f2;
+var __label__ = 0;
+ i7 = sp + -696;var g0 = i7>>2; // save stack
+ r0 = sp + -104;
+ r1 = r0 >> 2;
+ heap32[(r1+2)] = 0;
+ heap32[(r1+3)] = 1065353216;
+ heap32[(r1+4)] = 1065353216;
+ r2 = _ZTV15btTriangleShape;
+ heap32[(r1+5)] = 1065353216;
+ r2 = (r2 + 8)|0;
+ heap32[(r1+6)] = 0;
+ r3 = heap32[(fp+1)];
+ heap32[(fp+-26)] = r2;
+ r2 = r3 >> 2;
+ heap32[(r1+1)] = 1;
+ heap32[(r1+13)] = heap32[(r2)];
+ heap32[(r1+14)] = heap32[(r2+1)];
+ heap32[(r1+15)] = heap32[(r2+2)];
+ heap32[(r1+16)] = heap32[(r2+3)];
+ heap32[(r1+17)] = heap32[(r2+4)];
+ heap32[(r1+18)] = heap32[(r2+5)];
+ heap32[(r1+19)] = heap32[(r2+6)];
+ heap32[(r1+20)] = heap32[(r2+7)];
+ heap32[(r1+21)] = heap32[(r2+8)];
+ heap32[(r1+22)] = heap32[(r2+9)];
+ r3 = heap32[(fp)];
+ heap32[(r1+23)] = heap32[(r2+10)];
+ r4 = sp + -464;
+ r5 = r3 >> 2;
+ heap32[(r1+24)] = heap32[(r2+11)];
+ r2 = r4 >> 2;
+ heap32[(r1+11)] = heap32[(r5+51)];
+ r1 = _ZTV30btGjkEpaPenetrationDepthSolver;
+ r6 = 0;
+ heap32[(r2+77)] = 953267991;
+ r1 = (r1 + 8)|0;
+ heap8[sp+-132] = r6;
+ heap32[(fp+-118)] = r1;
+ r1 = _ZTV27btContinuousConvexCollision;
+ r2 = sp + -496;
+ r6 = heap32[(r5+1)];
+ r1 = (r1 + 8)|0;
+ r7 = r2 >> 2;
+ heap32[(fp+-124)] = r1;
+ r1 = sp + -472;
+ heap32[(r7+1)] = r4;
+ heap32[(r7+2)] = r1;
+ r1 = _ZTVN12btConvexCast10CastResultE;
+ heap32[(r7+3)] = r6;
+ r4 = sp + -672;
+ r1 = (r1 + 8)|0;
+ heap32[(r7+4)] = r0;
+ r0 = r4 >> 2;
+ heap32[(fp+-168)] = r1;
+ heap32[(r0+42)] = 0;
+ heap32[(r0+43)] = 0;
+ heap32[(r0+41)] = 1065353216;
+ r1 = (r3 + 136)|0;
+ r6 = (r3 + 8)|0;
+ r7 = (r3 + 72)|0;
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = r6;
+ heap32[(g0+2)] = r7;
+ heap32[(g0+3)] = r1;
+ heap32[(g0+4)] = r1;
+ heap32[(g0+5)] = r4;
+ _ZN27btContinuousConvexCollision16calcTimeOfImpactERK11btTransformS2_S2_S2_RN12btConvexCast10CastResultE(i7);
+ r1 = r_g0;
+if(!(r1 ==0)) //_LBB563_4
+{
+ f0 = heapFloat[(r0+33)];
+ f1 = heapFloat[(r0+34)];
+ f2 = heapFloat[(r0+35)];
+ f0 = f0*f0;
+ f1 = f1*f1;
+ f0 = f0+f1;
+ f1 = f2*f2;
+ f0 = f0+f1;
+ f1 = 9.9999997473787516e-005;
+if(!(f0 <=f1)) //_LBB563_4
+{
+ f1 = heapFloat[(r0+41)];
+ f2 = heapFloat[(r5+50)];
+if(!(f1 >=f2)) //_LBB563_4
+{
+ r1 = heap32[(fp+2)];
+ r2 = heap32[(fp+3)];
+ heapFloat[(g0)] = f0;
+ sqrtf(i7);
+ f1 = 1;
+ f0 = f1/f_g0;
+ f1 = heapFloat[(r0+33)];
+ f1 = f1*f0;
+ heapFloat[(r0+33)] = f1;
+ f1 = heapFloat[(r0+34)];
+ f1 = f1*f0;
+ heapFloat[(r0+34)] = f1;
+ f1 = heapFloat[(r0+35)];
+ f0 = f1*f0;
+ heapFloat[(r0+35)] = f0;
+ r5 = heap32[(r5)];
+ r5 = r5 >> 2;
+ r5 = heap32[(r5+3)];
+ f0 = heapFloat[(r0+41)];
+ r0 = (r4 + 132)|0;
+ r4 = (r4 + 148)|0;
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r0;
+ heap32[(g0+2)] = r4;
+ heapFloat[(g0+3)] = f0;
+ heap32[(g0+4)] = r1;
+ heap32[(g0+5)] = r2;
+ __FUNCTION_TABLE__[(r5)>>2](i7);
+}
+}
+}
+ return;
+}
+
+function _ZN22btSubsimplexConvexCastD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV12btConvexCast;
+ r0 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r0)] = r1;
+ return;
+}
+
+function _ZN22btSubsimplexConvexCastD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV12btConvexCast;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZN22btSubsimplexConvexCast16calcTimeOfImpactERK11btTransformS2_S2_S2_RN12btConvexCast10CastResultE(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+ var r13;
+ var r14;
+ var r15;
+ var r16;
+ var r17;
+ var r18;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+ var f10;
+ var f11;
+ var f12;
+ var f13;
+ var f14;
+ var f15;
+ var f16;
+ var f17;
+ var f18;
+ var f19;
+ var f20;
+ var f21;
+ var f22;
+ var f23;
+ var f24;
+ var f25;
+ var f26;
+ var f27;
+ var f28;
+ var f29;
+ var f30;
+var __label__ = 0;
+ i7 = sp + -240;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r1 = heap32[(r0+1)];
+ r2 = 0;
+ r3 = r1 >> 2;
+ heap8[r1+312] = r2;
+ r4 = 1;
+ heap32[(r3)] = 0;
+ heap8[r1+356] = r4;
+ heap32[(r3+73)] = 1566444395;
+ heap32[(r3+74)] = 1566444395;
+ heap32[(r3+75)] = 1566444395;
+ heap32[(r3+76)] = 0;
+ heap8[r1+352] = r2;
+ heap32[(r3+84)] = 0;
+ heap32[(r3+85)] = 0;
+ heap32[(r3+86)] = 0;
+ heap32[(r3+87)] = 0;
+ r3 = heapU8[r1+332];
+ r5 = heap32[(fp+1)];
+ r6 = heap32[(fp+2)];
+ r7 = heap32[(fp+4)];
+ r8 = heap32[(fp+3)];
+ r3 = r3 & 240;
+ heap8[r1+332] = r3;
+ r1 = r5 >> 2;
+ r3 = r8 >> 2;
+ r5 = r6 >> 2;
+ r6 = r7 >> 2;
+ f0 = heapFloat[(r1+12)];
+ f1 = heapFloat[(r5+12)];
+ f2 = heapFloat[(r3+12)];
+ f3 = heapFloat[(r6+12)];
+ f4 = heapFloat[(r1+13)];
+ f5 = heapFloat[(r5+13)];
+ f6 = heapFloat[(r3+13)];
+ f7 = heapFloat[(r6+13)];
+ r7 = heap32[(r0+2)];
+ f1 = f1-f0;
+ f3 = f3-f2;
+ f1 = f1-f3;
+ heapFloat[(fp+-50)] = f1;
+ f3 = heapFloat[(r1+14)];
+ f8 = heapFloat[(r5+14)];
+ f9 = heapFloat[(r3+14)];
+ f10 = heapFloat[(r6+14)];
+ r8 = r7 >> 2;
+ f5 = f5-f4;
+ f7 = f7-f6;
+ f5 = f5-f7;
+ heapFloat[(fp+-51)] = f5;
+ f7 = heapFloat[(r1+4)];
+ heapFloat[(fp+-42)] = f7;
+ f11 = heapFloat[(r1)];
+ heapFloat[(fp+-43)] = f11;
+ f12 = -f1;
+ r8 = heap32[(r8)];
+ f8 = f8-f3;
+ f10 = f10-f9;
+ f13 = heapFloat[(r1+1)];
+ heapFloat[(fp+-44)] = f13;
+ f14 = heapFloat[(r1+5)];
+ heapFloat[(fp+-45)] = f14;
+ r8 = r8 >> 2;
+ f8 = f8-f10;
+ heapFloat[(fp+-52)] = f8;
+ f10 = heapFloat[(r1+8)];
+ heapFloat[(fp+-46)] = f10;
+ f11 = f11*f12;
+ f7 = f7*f5;
+ f15 = heapFloat[(r1+2)];
+ heapFloat[(fp+-47)] = f15;
+ f16 = heapFloat[(r1+6)];
+ f17 = heapFloat[(r1+9)];
+ f18 = heapFloat[(r1+10)];
+ f19 = heapFloat[(r3)];
+ heapFloat[(fp+-33)] = f19;
+ f19 = heapFloat[(r3+1)];
+ heapFloat[(fp+-34)] = f19;
+ f19 = heapFloat[(r3+2)];
+ heapFloat[(fp+-35)] = f19;
+ f19 = heapFloat[(r3+4)];
+ heapFloat[(fp+-36)] = f19;
+ f19 = heapFloat[(r3+5)];
+ heapFloat[(fp+-37)] = f19;
+ f19 = heapFloat[(r3+6)];
+ heapFloat[(fp+-38)] = f19;
+ f19 = heapFloat[(r3+8)];
+ heapFloat[(fp+-39)] = f19;
+ f19 = heapFloat[(r3+9)];
+ heapFloat[(fp+-40)] = f19;
+ f19 = heapFloat[(r3+10)];
+ heapFloat[(fp+-41)] = f19;
+ r8 = heap32[(r8+15)];
+ f13 = f13*f12;
+ f14 = f14*f5;
+ f7 = f11-f7;
+ f10 = f10*f8;
+ r9 = sp + -112;
+ f11 = f15*f12;
+ f12 = f16*f5;
+ f13 = f13-f14;
+ f14 = f17*f8;
+ f7 = f7-f10;
+ r10 = r9 >> 2;
+ f10 = f11-f12;
+ f11 = f18*f8;
+ f12 = f13-f14;
+ heapFloat[(fp+-28)] = f7;
+ f7 = f10-f11;
+ heapFloat[(r10+1)] = f12;
+ heapFloat[(r10+2)] = f7;
+ heap32[(r10+3)] = 0;
+ r10 = sp + -128;
+ heap32[(g0)] = r10;
+ heap32[(g0+1)] = r7;
+ heap32[(g0+2)] = r9;
+ __FUNCTION_TABLE__[(r8)>>2](i7);
+ r7 = heap32[(r0+3)];
+ r8 = r7 >> 2;
+ r8 = heap32[(r8)];
+ f7 = heapFloat[(r3)];
+ f10 = heapFloat[(r3+4)];
+ r9 = r10 >> 2;
+ r8 = r8 >> 2;
+ f11 = heapFloat[(r3+1)];
+ f12 = heapFloat[(r3+5)];
+ f13 = heapFloat[(r3+8)];
+ f7 = f7*f1;
+ f10 = f10*f5;
+ f14 = heapFloat[(r3+2)];
+ f15 = heapFloat[(r3+6)];
+ f19 = heapFloat[(r3+10)];
+ f20 = heapFloat[(r3+9)];
+ r8 = heap32[(r8+15)];
+ f11 = f11*f1;
+ f12 = f12*f5;
+ f7 = f7+f10;
+ f10 = f13*f8;
+ f13 = heapFloat[(r1)];
+ heapFloat[(fp+-48)] = f13;
+ f21 = heapFloat[(fp+-32)];
+ f22 = heapFloat[(r1+4)];
+ f23 = heapFloat[(r1+8)];
+ heapFloat[(fp+-49)] = f23;
+ f24 = heapFloat[(r1+1)];
+ f25 = heapFloat[(r9+1)];
+ f26 = heapFloat[(r1+5)];
+ f27 = heapFloat[(r1+9)];
+ f28 = heapFloat[(r1+2)];
+ f29 = heapFloat[(r9+2)];
+ f30 = heapFloat[(r1+6)];
+ f13 = heapFloat[(r1+10)];
+ heapFloat[(fp+-54)] = f13;
+ f13 = heapFloat[(r1+12)];
+ heapFloat[(fp+-53)] = f13;
+ f13 = heapFloat[(r1+13)];
+ heapFloat[(fp+-56)] = f13;
+ f13 = heapFloat[(r1+14)];
+ heapFloat[(fp+-55)] = f13;
+ r9 = sp + -80;
+ f1 = f14*f1;
+ f5 = f15*f5;
+ f11 = f11+f12;
+ f12 = f20*f8;
+ f7 = f7+f10;
+ r10 = r9 >> 2;
+ f1 = f1+f5;
+ f5 = f19*f8;
+ f8 = f11+f12;
+ heapFloat[(fp+-20)] = f7;
+ f1 = f1+f5;
+ heapFloat[(r10+1)] = f8;
+ heapFloat[(r10+2)] = f1;
+ heap32[(r10+3)] = 0;
+ r10 = sp + -96;
+ heap32[(g0)] = r10;
+ heap32[(g0+1)] = r7;
+ heap32[(g0+2)] = r9;
+ __FUNCTION_TABLE__[(r8)>>2](i7);
+ r7 = r10 >> 2;
+ f1 = heapFloat[(r3)];
+ f5 = heapFloat[(fp+-24)];
+ f7 = heapFloat[(r3+4)];
+ f8 = heapFloat[(r3+1)];
+ f10 = heapFloat[(r7+1)];
+ f11 = heapFloat[(r3+5)];
+ f12 = heapFloat[(r3+8)];
+ f14 = heapFloat[(r3+9)];
+ f13 = heapFloat[(fp+-48)];
+ f13 = f13*f21;
+ f15 = f24*f25;
+ f1 = f1*f5;
+ f8 = f8*f10;
+ f19 = heapFloat[(r3+2)];
+ f20 = heapFloat[(r7+2)];
+ f24 = heapFloat[(r3+6)];
+ f22 = f22*f21;
+ f26 = f26*f25;
+ f7 = f7*f5;
+ f11 = f11*f10;
+ f23 = heapFloat[(r3+10)];
+ f13 = f13+f15;
+ f15 = f28*f29;
+ f1 = f1+f8;
+ f8 = f19*f20;
+ f19 = f22+f26;
+ f22 = f30*f29;
+ f7 = f7+f11;
+ f11 = f24*f20;
+ f24 = heapFloat[(fp+-49)];
+ f21 = f24*f21;
+ f24 = f27*f25;
+ f5 = f12*f5;
+ f10 = f14*f10;
+ f12 = f13+f15;
+ f13 = f19+f22;
+ f1 = f1+f8;
+ f8 = heapFloat[(r3+12)];
+ f7 = f7+f11;
+ f11 = heapFloat[(r3+13)];
+ f14 = f21+f24;
+ f15 = heapFloat[(fp+-54)];
+ f15 = f15*f29;
+ f5 = f5+f10;
+ f10 = f23*f20;
+ f14 = f14+f15;
+ f15 = heapFloat[(fp+-53)];
+ f12 = f12+f15;
+ f1 = f1+f8;
+ f8 = heapFloat[(fp+-56)];
+ f8 = f13+f8;
+ f7 = f7+f11;
+ f5 = f5+f10;
+ f10 = heapFloat[(r3+14)];
+ f1 = f12-f1;
+ f7 = f8-f7;
+ f13 = heapFloat[(fp+-55)];
+ f8 = f14+f13;
+ f5 = f5+f10;
+ f5 = f8-f5;
+ f8 = f1*f1;
+ f10 = f7*f7;
+ f8 = f8+f10;
+ f10 = f5*f5;
+ r7 = heap32[(fp+5)];
+ f8 = f8+f10;
+ r8 = -33;
+ f10 = 0;
+ heapFloat[(fp+-48)] = f10;
+ heapFloat[(fp+-49)] = f10;
+ f11 = f10;
+_1: while(true){
+ f12 = 9.9999997473787516e-005;
+ if(f8 <=f12) //_LBB566_22
+{
+__label__ = 19;
+break _1;
+}
+else{
+ r8 = (r8 + 1)|0;
+ if(r8 !=0) //_LBB566_1
+{
+ r9 = heap32[(r0+2)];
+ r10 = r9 >> 2;
+ r10 = heap32[(r10)];
+ f8 = -f1;
+ r10 = r10 >> 2;
+ f12 = heapFloat[(fp+-43)];
+ f12 = f12*f8;
+ f13 = heapFloat[(fp+-42)];
+ f13 = f13*f7;
+ r10 = heap32[(r10+15)];
+ f14 = heapFloat[(fp+-44)];
+ f14 = f14*f8;
+ f15 = heapFloat[(fp+-45)];
+ f15 = f15*f7;
+ f12 = f12-f13;
+ f13 = heapFloat[(fp+-46)];
+ f13 = f13*f5;
+ r11 = sp + -48;
+ f19 = heapFloat[(fp+-47)];
+ f8 = f19*f8;
+ f19 = f16*f7;
+ f14 = f14-f15;
+ f15 = f17*f5;
+ f12 = f12-f13;
+ r12 = r11 >> 2;
+ f8 = f8-f19;
+ f13 = f18*f5;
+ f14 = f14-f15;
+ heapFloat[(fp+-12)] = f12;
+ f8 = f8-f13;
+ heapFloat[(r12+1)] = f14;
+ heapFloat[(r12+2)] = f8;
+ heap32[(r12+3)] = 0;
+ r12 = sp + -64;
+ heap32[(g0)] = r12;
+ heap32[(g0+1)] = r9;
+ heap32[(g0+2)] = r11;
+ __FUNCTION_TABLE__[(r10)>>2](i7);
+ r9 = heap32[(r0+3)];
+ r10 = r9 >> 2;
+ r10 = heap32[(r10)];
+ r11 = r12 >> 2;
+ r10 = r10 >> 2;
+ f8 = heapFloat[(fp+-33)];
+ f8 = f8*f1;
+ f12 = heapFloat[(fp+-36)];
+ f12 = f12*f7;
+ f13 = heapFloat[(fp+-16)];
+ f14 = heapFloat[(r11+1)];
+ f15 = heapFloat[(r11+2)];
+ r10 = heap32[(r10+15)];
+ f19 = heapFloat[(fp+-34)];
+ f19 = f19*f1;
+ f20 = heapFloat[(fp+-37)];
+ f20 = f20*f7;
+ f8 = f8+f12;
+ f12 = heapFloat[(fp+-39)];
+ f12 = f12*f5;
+ r11 = sp + -16;
+ f21 = heapFloat[(fp+-35)];
+ f21 = f21*f1;
+ f22 = heapFloat[(fp+-38)];
+ f22 = f22*f7;
+ f19 = f19+f20;
+ f20 = heapFloat[(fp+-40)];
+ f20 = f20*f5;
+ f8 = f8+f12;
+ r12 = r11 >> 2;
+ f12 = f21+f22;
+ f21 = heapFloat[(fp+-41)];
+ f21 = f21*f5;
+ f19 = f19+f20;
+ heapFloat[(fp+-4)] = f8;
+ f8 = f12+f21;
+ heapFloat[(r12+1)] = f19;
+ heapFloat[(r12+2)] = f8;
+ heap32[(r12+3)] = 0;
+ r12 = sp + -32;
+ heap32[(g0)] = r12;
+ heap32[(g0+1)] = r9;
+ heap32[(g0+2)] = r11;
+ __FUNCTION_TABLE__[(r10)>>2](i7);
+ f12 = 1;
+ if(f11 >f12) //_LBB566_27
+{
+__label__ = 24;
+break _1;
+}
+else{
+ r9 = r12 >> 2;
+ f8 = heapFloat[(fp+-8)];
+ f19 = heapFloat[(r9+1)];
+ f20 = heapFloat[(r9+2)];
+ f21 = heapFloat[(fp+-43)];
+ f21 = f21*f13;
+ f22 = heapFloat[(fp+-44)];
+ f22 = f22*f14;
+ f23 = heapFloat[(fp+-33)];
+ f23 = f23*f8;
+ f24 = heapFloat[(fp+-34)];
+ f24 = f24*f19;
+ f25 = heapFloat[(fp+-42)];
+ f25 = f25*f13;
+ f26 = heapFloat[(fp+-45)];
+ f26 = f26*f14;
+ f27 = heapFloat[(fp+-36)];
+ f27 = f27*f8;
+ f28 = heapFloat[(fp+-37)];
+ f28 = f28*f19;
+ f21 = f21+f22;
+ f22 = heapFloat[(fp+-47)];
+ f22 = f22*f15;
+ f23 = f23+f24;
+ f24 = heapFloat[(fp+-35)];
+ f24 = f24*f20;
+ f25 = f25+f26;
+ f26 = f16*f15;
+ f27 = f27+f28;
+ f28 = heapFloat[(fp+-38)];
+ f28 = f28*f20;
+ f29 = heapFloat[(fp+-46)];
+ f13 = f29*f13;
+ f14 = f17*f14;
+ f29 = heapFloat[(fp+-39)];
+ f8 = f29*f8;
+ f29 = heapFloat[(fp+-40)];
+ f19 = f29*f19;
+ f21 = f21+f22;
+ f22 = f23+f24;
+ f23 = f25+f26;
+ f24 = f27+f28;
+ f13 = f13+f14;
+ f14 = f18*f15;
+ f8 = f8+f19;
+ f15 = heapFloat[(fp+-41)];
+ f15 = f15*f20;
+ f19 = f21+f0;
+ f20 = f22+f2;
+ f21 = f23+f4;
+ f22 = f24+f6;
+ f13 = f13+f14;
+ f8 = f8+f15;
+ f14 = f19-f20;
+ f15 = f21-f22;
+ f13 = f13+f3;
+ f23 = f8+f9;
+ f24 = f13-f23;
+ f8 = f1*f14;
+ f25 = f7*f15;
+ f8 = f8+f25;
+ f25 = f5*f24;
+ f25 = f8+f25;
+ f8 = 0;
+ if(f25 >f8) //_LBB566_4
+{
+ f0 = heapFloat[(fp+-50)];
+ f0 = f1*f0;
+ f2 = heapFloat[(fp+-51)];
+ f2 = f7*f2;
+ f0 = f0+f2;
+ f2 = heapFloat[(fp+-52)];
+ f2 = f5*f2;
+ f0 = f0+f2;
+ f2 = -1.4210854715202004e-014;
+ if(f0 >=f2) //_LBB566_27
+{
+__label__ = 24;
+break _1;
+}
+else{
+ f0 = f25/f0;
+ f11 = f11-f0;
+ f0 = heapFloat[(r5+12)];
+ f2 = heapFloat[(r5+13)];
+ f3 = heapFloat[(r5+14)];
+ f4 = heapFloat[(r6+12)];
+ f6 = heapFloat[(r6+13)];
+ f9 = heapFloat[(r6+14)];
+ f10 = heapFloat[(r1+12)];
+ f12 = f12-f11;
+ f25 = heapFloat[(r1+13)];
+ f26 = heapFloat[(r1+14)];
+ f27 = heapFloat[(r3+12)];
+ f28 = heapFloat[(r3+13)];
+ f29 = heapFloat[(r3+14)];
+ f10 = f10*f12;
+ f0 = f0*f11;
+ f25 = f25*f12;
+ f2 = f2*f11;
+ f26 = f26*f12;
+ f3 = f3*f11;
+ f27 = f27*f12;
+ f30 = f4*f11;
+ f28 = f28*f12;
+ f6 = f6*f11;
+ f12 = f29*f12;
+ f9 = f9*f11;
+ f0 = f10+f0;
+ f4 = f25+f2;
+ f3 = f26+f3;
+ f2 = f27+f30;
+ f6 = f28+f6;
+ f9 = f12+f9;
+ f10 = f1;
+ heapFloat[(fp+-48)] = f7;
+ heapFloat[(fp+-49)] = f5;
+}
+}
+ r9 = heap32[(r0+1)];
+ r10 = r9 >> 2;
+ r11 = heap32[(r10)];
+_10: do {
+ if(r11 >0) //_LBB566_8
+{
+ r12 = -12;
+ f1 = heapFloat[(r10+77)];
+ r13 = (r12 - r9)|0;
+ r14 = 0;
+ r15 = r11;
+ r12 = r14;
+_12: while(true){
+ r16 = -8;
+ r17 = -4;
+ r16 = (r16 - r13)|0;
+ r17 = (r17 - r13)|0;
+ r16 = r16 >> 2;
+ r17 = r17 >> 2;
+ r18 = (r14 - r13)|0;
+ r18 = r18 >> 2;
+ f5 = heapFloat[(r16)];
+ f7 = heapFloat[(r17)];
+ f5 = f14-f5;
+ f7 = f15-f7;
+ f12 = heapFloat[(r18)];
+ f12 = f24-f12;
+ f5 = f5*f5;
+ f7 = f7*f7;
+ f5 = f5+f7;
+ f7 = f12*f12;
+ f5 = f5+f7;
+ r15 = (r15 + -1)|0;
+ r12 = f5 > f1 ? r12 : r4;
+ r13 = (r13 + -16)|0;
+if(!(r15 !=0)) //_LBB566_9
+{
+break _10;
+}
+}
+}
+else{
+ r12 = r2;
+}
+} while(0);
+ f1 = heapFloat[(r10+76)];
+ if(f1 ==f8) //_LBB566_12
+{
+ f1 = heapFloat[(r10+75)];
+if(!(f24 !=f1)) //_LBB566_11
+{
+ f1 = heapFloat[(r10+74)];
+if(!(f15 !=f1)) //_LBB566_11
+{
+ f1 = heapFloat[(r10+73)];
+ r12 = f14 != f1 ? r12 : r4;
+}
+}
+}
+ r12 = r12 & 255;
+ if(r12 ==0) //_LBB566_17
+{
+ heapFloat[(r10+73)] = f14;
+ heapFloat[(r10+74)] = f15;
+ r11 = r11 << 4;
+ heapFloat[(r10+75)] = f24;
+ r11 = (r9 + r11)|0;
+ heap32[(r10+76)] = 0;
+ r11 = r11 >> 2;
+ heap8[r9+356] = r4;
+ heapFloat[(r11+1)] = f14;
+ heapFloat[(r11+2)] = f15;
+ heapFloat[(r11+3)] = f24;
+ heap32[(r11+4)] = 0;
+ r11 = heap32[(r10)];
+ r11 = r11 << 4;
+ r11 = (r9 + r11)|0;
+ r11 = r11 >> 2;
+ heapFloat[(r11+21)] = f19;
+ heapFloat[(r11+22)] = f21;
+ heapFloat[(r11+23)] = f13;
+ heap32[(r11+24)] = 0;
+ r11 = heap32[(r10)];
+ r11 = r11 << 4;
+ r9 = (r9 + r11)|0;
+ r9 = r9 >> 2;
+ heapFloat[(r9+41)] = f20;
+ heapFloat[(r9+42)] = f22;
+ heapFloat[(r9+43)] = f23;
+ heap32[(r9+44)] = 0;
+ r9 = heap32[(r10)];
+ r9 = (r9 + 1)|0;
+ heap32[(r10)] = r9;
+ r9 = heap32[(r0+1)];
+}
+ heap32[(g0)] = r9;
+ _ZN22btVoronoiSimplexSolver28updateClosestVectorAndPointsEv(i7);
+ r10 = r_g0;
+ r9 = r9 >> 2;
+ f1 = heapFloat[(r9+69)];
+ f7 = heapFloat[(r9+70)];
+ f5 = heapFloat[(r9+71)];
+ if(r10 ==0) //_LBB566_20
+{
+continue _1;
+}
+else{
+ f8 = f1*f1;
+ f12 = f7*f7;
+ f8 = f8+f12;
+ f12 = f5*f5;
+ f8 = f8+f12;
+continue _1;
+}
+}
+}
+else{
+__label__ = 19;
+break _1;
+}
+}
+}
+if (__label__ == 19){
+ f0 = f10*f10;
+ f7 = heapFloat[(fp+-48)];
+ f1 = f7*f7;
+ f0 = f0+f1;
+ f1 = heapFloat[(fp+-49)];
+ f1 = f1*f1;
+ f0 = f0+f1;
+ r1 = r7 >> 2;
+ heapFloat[(r1+41)] = f11;
+ f1 = 1.4210854715202004e-014;
+ if(f0 <f1) //_LBB566_24
+{
+ heap32[(r1+33)] = 0;
+ heap32[(r1+34)] = 0;
+ f0 = 0;
+ heap32[(r1+35)] = 0;
+ heap32[(r1+36)] = 0;
+ f2 = f0;
+ f1 = f0;
+}
+else{
+ heapFloat[(g0)] = f0;
+ f0 = 1;
+ sqrtf(i7);
+ f0 = f0/f_g0;
+ f1 = f10*f0;
+ f7 = heapFloat[(fp+-48)];
+ f2 = f7*f0;
+ heapFloat[(r1+33)] = f1;
+ f11 = heapFloat[(fp+-49)];
+ f0 = f11*f0;
+ heapFloat[(r1+34)] = f2;
+ heapFloat[(r1+35)] = f0;
+ heap32[(r1+36)] = 0;
+}
+ f3 = heapFloat[(fp+-50)];
+ f1 = f1*f3;
+ f3 = heapFloat[(fp+-51)];
+ f2 = f2*f3;
+ f3 = heapFloat[(r1+43)];
+ f1 = f1+f2;
+ f2 = heapFloat[(fp+-52)];
+ f0 = f0*f2;
+ f0 = f1+f0;
+ f1 = -f3;
+if(!(f0 >=f1)) //_LBB566_27
+{
+ r0 = heap32[(r0+1)];
+ heap32[(g0)] = r0;
+ r0 = r0 >> 2;
+ _ZN22btVoronoiSimplexSolver28updateClosestVectorAndPointsEv(i7);
+ f0 = heapFloat[(r0+68)];
+ f1 = heapFloat[(r0+67)];
+ f2 = heapFloat[(r0+66)];
+ heap32[(r1+37)] = heap32[(r0+65)];
+ heapFloat[(r1+38)] = f2;
+ heapFloat[(r1+39)] = f1;
+ heapFloat[(r1+40)] = f0;
+ r0 = 1;
+ r_g0 = r0;
+ return;
+}
+}
+ r0 = 0;
+ r_g0 = r0;
+ return;
+}
+
+function _ZN22btVoronoiSimplexSolver12removeVertexEi(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ r2 = heap32[(r1)];
+ if(r2 >0) //_LBB567_2
+{
+ r3 = heap32[(fp+1)];
+ r2 = (r2 + -1)|0;
+ r3 = r3 << 4;
+ r4 = (r0 + 4)|0;
+ r5 = r2 << 4;
+ r6 = (r4 + r3)|0;
+ r4 = (r4 + r5)|0;
+ r5 = r6 >> 2;
+ r4 = r4 >> 2;
+ heap32[(r1)] = r2;
+ heap32[(r5)] = heap32[(r4)];
+ heap32[(r5+1)] = heap32[(r4+1)];
+ heap32[(r5+2)] = heap32[(r4+2)];
+ heap32[(r5+3)] = heap32[(r4+3)];
+ r2 = heap32[(r1)];
+ r4 = (r0 + 84)|0;
+ r2 = r2 << 4;
+ r5 = (r4 + r3)|0;
+ r2 = (r4 + r2)|0;
+ r4 = r5 >> 2;
+ r2 = r2 >> 2;
+ heap32[(r4)] = heap32[(r2)];
+ heap32[(r4+1)] = heap32[(r2+1)];
+ heap32[(r4+2)] = heap32[(r2+2)];
+ heap32[(r4+3)] = heap32[(r2+3)];
+ r1 = heap32[(r1)];
+ r0 = (r0 + 164)|0;
+ r1 = r1 << 4;
+ r2 = (r0 + r3)|0;
+ r0 = (r0 + r1)|0;
+ r1 = r2 >> 2;
+ r0 = r0 >> 2;
+ heap32[(r1)] = heap32[(r0)];
+ heap32[(r1+1)] = heap32[(r0+1)];
+ heap32[(r1+2)] = heap32[(r0+2)];
+ heap32[(r1+3)] = heap32[(r0+3)];
+ return;
+}
+else{
+ r0 = _2E_str457;
+ r1 = _2E_str1458;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 38;
+ _assert(i7);
+}
+}
+
+function _ZN22btVoronoiSimplexSolver22closestPtPointTriangleERK9btVector3S2_S2_S2_R25btSubSimplexClosestResult(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+ var f10;
+ var f11;
+ var f12;
+ var f13;
+ var f14;
+ var f15;
+ var f16;
+ var f17;
+ var f18;
+ var f19;
+ var f20;
+ var f21;
+ var f22;
+ var f23;
+ var f24;
+ var f25;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+4)];
+ r1 = heapU8[r0+16];
+ r2 = heap32[(fp+2)];
+ r3 = heap32[(fp+3)];
+ r4 = heap32[(fp+1)];
+ r1 = r1 & -16;
+ r5 = heap32[(fp)];
+ r2 = r2 >> 2;
+ heap8[r0+16] = r1;
+ r3 = r3 >> 2;
+ r5 = r5 >> 2;
+ r4 = r4 >> 2;
+ f0 = heapFloat[(r2+1)];
+ f1 = heapFloat[(r4+1)];
+ f2 = heapFloat[(r3+1)];
+ f3 = heapFloat[(r5+1)];
+ f4 = heapFloat[(r2)];
+ f5 = heapFloat[(r4)];
+ f6 = heapFloat[(r3)];
+ f7 = heapFloat[(r5)];
+ f8 = heapFloat[(r2+2)];
+ f9 = heapFloat[(r4+2)];
+ f10 = heapFloat[(r3+2)];
+ f11 = heapFloat[(r5+2)];
+ f12 = f0-f1;
+ f13 = f4-f5;
+ f14 = f6-f5;
+ f15 = f7-f5;
+ f16 = f2-f1;
+ f17 = f3-f1;
+ f18 = f8-f9;
+ f19 = f10-f9;
+ f20 = f11-f9;
+ f21 = f13*f15;
+ f22 = f12*f17;
+ f15 = f14*f15;
+ f17 = f16*f17;
+ f21 = f21+f22;
+ f22 = f18*f20;
+ f15 = f15+f17;
+ f17 = f19*f20;
+ f20 = f21+f22;
+ f15 = f15+f17;
+ f17 = 0;
+if(!(f20 >f17)) //_LBB568_3
+{
+if(!(f15 >f17)) //_LBB568_3
+{
+ r2 = r0 >> 2;
+ heapFloat[(r2)] = f5;
+ heap32[(r2+1)] = heap32[(r4+1)];
+ heap32[(r2+2)] = heap32[(r4+2)];
+ r1 = r1 | 1;
+ heap32[(r2+3)] = heap32[(r4+3)];
+ heap8[r0+16] = r1;
+ heap32[(r2+5)] = 1065353216;
+ heap32[(r2+6)] = 0;
+ heap32[(r2+7)] = 0;
+ heap32[(r2+8)] = 0;
+ return;
+}
+}
+ f21 = f7-f4;
+ f22 = f3-f0;
+ f23 = f13*f21;
+ f24 = f12*f22;
+ f25 = f11-f8;
+ f21 = f14*f21;
+ f22 = f16*f22;
+ f23 = f23+f24;
+ f24 = f18*f25;
+ f21 = f21+f22;
+ f22 = f19*f25;
+ f23 = f23+f24;
+ f21 = f21+f22;
+ if(f23 <f17) //_LBB568_7
+{
+__label__ = 7;
+}
+else{
+ if(f21 >f23) //_LBB568_7
+{
+__label__ = 7;
+}
+else{
+ r3 = r0 >> 2;
+ heapFloat[(r3)] = f4;
+ heap32[(r3+1)] = heap32[(r2+1)];
+ heap32[(r3+2)] = heap32[(r2+2)];
+ r1 = r1 | 2;
+ heap32[(r3+3)] = heap32[(r2+3)];
+ heap8[r0+16] = r1;
+ heap32[(r3+5)] = 0;
+ heap32[(r3+6)] = 1065353216;
+__label__ = 6;
+}
+}
+_8: do {
+if (__label__ == 7){
+ f22 = f20*f21;
+ f24 = f23*f15;
+ f22 = f22-f24;
+if(!(f22 >f17)) //_LBB568_11
+{
+if(!(f20 <f17)) //_LBB568_11
+{
+if(!(f23 >f17)) //_LBB568_11
+{
+ f0 = f20-f23;
+ f0 = f20/f0;
+ f2 = f13*f0;
+ r3 = r0 >> 2;
+ f2 = f5+f2;
+ f3 = f12*f0;
+ f4 = f18*f0;
+ f1 = f1+f3;
+ heapFloat[(r3)] = f2;
+ f2 = f9+f4;
+ heapFloat[(r3+1)] = f1;
+ heapFloat[(r3+2)] = f2;
+ f1 = 1;
+ r1 = r1 | 3;
+ heap32[(r3+3)] = 0;
+ f1 = f1-f0;
+ heap8[r0+16] = r1;
+ heapFloat[(r3+5)] = f1;
+ heapFloat[(r3+6)] = f0;
+break _8;
+}
+}
+}
+ f7 = f7-f6;
+ f3 = f3-f2;
+ f24 = f14*f7;
+ f25 = f16*f3;
+ f11 = f11-f10;
+ f7 = f13*f7;
+ f3 = f12*f3;
+ f24 = f24+f25;
+ f25 = f19*f11;
+ f3 = f7+f3;
+ f7 = f18*f11;
+ f11 = f24+f25;
+ f3 = f3+f7;
+if(!(f11 <f17)) //_LBB568_14
+{
+if(!(f3 >f11)) //_LBB568_14
+{
+ r2 = r0 >> 2;
+ heapFloat[(r2)] = f6;
+ heap32[(r2+1)] = heap32[(r3+1)];
+ heap32[(r2+2)] = heap32[(r3+2)];
+ r1 = r1 | 4;
+ heap32[(r2+3)] = heap32[(r3+3)];
+ heap8[r0+16] = r1;
+ heap32[(r2+5)] = 0;
+ heap32[(r2+6)] = 0;
+ heap32[(r2+7)] = 1065353216;
+ heap32[(r2+8)] = 0;
+ return;
+}
+}
+ f7 = f3*f15;
+ f20 = f20*f11;
+ f7 = f7-f20;
+ if(f7 >f17) //_LBB568_19
+{
+__label__ = 19;
+}
+else{
+ if(f15 <f17) //_LBB568_19
+{
+__label__ = 19;
+}
+else{
+ if(f11 >f17) //_LBB568_19
+{
+__label__ = 19;
+}
+else{
+ f0 = f15-f11;
+ f0 = f15/f0;
+ f2 = f14*f0;
+ r2 = r0 >> 2;
+ f2 = f5+f2;
+ f3 = f16*f0;
+ f4 = f19*f0;
+ f1 = f1+f3;
+ heapFloat[(r2)] = f2;
+ f2 = f9+f4;
+ heapFloat[(r2+1)] = f1;
+ heapFloat[(r2+2)] = f2;
+ f1 = 1;
+ r1 = r1 | 5;
+ heap32[(r2+3)] = 0;
+ f1 = f1-f0;
+ heap8[r0+16] = r1;
+ heapFloat[(r2+5)] = f1;
+ heap32[(r2+6)] = 0;
+__label__ = 18;
+}
+}
+}
+if (__label__ == 19){
+ f15 = f23*f11;
+ f20 = f3*f21;
+ f15 = f15-f20;
+if(!(f15 >f17)) //_LBB568_23
+{
+ f20 = f21-f23;
+if(!(f20 <f17)) //_LBB568_23
+{
+ f3 = f3-f11;
+if(!(f3 <f17)) //_LBB568_23
+{
+ f1 = f20+f3;
+ f1 = f20/f1;
+ f5 = f6-f4;
+ f7 = f2-f0;
+ f5 = f5*f1;
+ f9 = f10-f8;
+ f7 = f7*f1;
+ r2 = r0 >> 2;
+ f5 = f4+f5;
+ f9 = f9*f1;
+ f7 = f0+f7;
+ heapFloat[(r2)] = f5;
+ f5 = f8+f9;
+ heapFloat[(r2+1)] = f7;
+ heapFloat[(r2+2)] = f5;
+ r1 = r1 | 6;
+ heap32[(r2+3)] = 0;
+ f5 = 1;
+ heap8[r0+16] = r1;
+ f5 = f5-f1;
+ heap32[(r2+5)] = 0;
+ heapFloat[(r2+6)] = f5;
+ heapFloat[(r2+7)] = f1;
+ heap32[(r2+8)] = 0;
+ return;
+}
+}
+}
+ f0 = f15+f7;
+ f0 = f0+f22;
+ f2 = 1;
+ f0 = f2/f0;
+ f3 = f7*f0;
+ f0 = f22*f0;
+ f4 = f13*f3;
+ f6 = f12*f3;
+ f4 = f5+f4;
+ f5 = f14*f0;
+ r2 = r0 >> 2;
+ f4 = f4+f5;
+ f5 = f18*f3;
+ f1 = f1+f6;
+ f6 = f16*f0;
+ f5 = f9+f5;
+ f7 = f19*f0;
+ f1 = f1+f6;
+ heapFloat[(r2)] = f4;
+ f4 = f5+f7;
+ heapFloat[(r2+1)] = f1;
+ heapFloat[(r2+2)] = f4;
+ f1 = f2-f3;
+ r1 = r1 | 7;
+ heap32[(r2+3)] = 0;
+ f1 = f1-f0;
+ heap8[r0+16] = r1;
+ heapFloat[(r2+5)] = f1;
+ heapFloat[(r2+6)] = f3;
+}
+ heapFloat[(r2+7)] = f0;
+ heap32[(r2+8)] = 0;
+ return;
+}
+} while(0);
+ heap32[(r3+7)] = 0;
+ heap32[(r3+8)] = 0;
+ return;
+}
+
+function _ZN22btVoronoiSimplexSolver19pointOutsideOfPlaneERK9btVector3S2_S2_S2_S2_(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+ var f10;
+ var f11;
+ var f12;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ f0 = heapFloat[(fp+5)];
+ f1 = heapFloat[(fp+8)];
+ f2 = heapFloat[(fp+11)];
+ f3 = heapFloat[(fp+4)];
+ f4 = heapFloat[(fp+10)];
+ f5 = heapFloat[(fp+7)];
+ f6 = heapFloat[(fp+3)];
+ f7 = heapFloat[(fp+6)];
+ f8 = heapFloat[(fp+9)];
+ f1 = f1-f0;
+ f4 = f4-f3;
+ f7 = f7-f6;
+ f2 = f2-f0;
+ f5 = f5-f3;
+ f8 = f8-f6;
+ f9 = heapFloat[(fp+12)];
+ f10 = heapFloat[(fp+13)];
+ f11 = f5*f2;
+ f12 = f1*f4;
+ f1 = f1*f8;
+ f2 = f7*f2;
+ f11 = f11-f12;
+ f9 = f9-f6;
+ f1 = f1-f2;
+ f2 = f10-f3;
+ f10 = heapFloat[(fp+14)];
+ f4 = f7*f4;
+ f5 = f5*f8;
+ f4 = f4-f5;
+ f5 = f10-f0;
+ f7 = f9*f11;
+ f2 = f2*f1;
+ f2 = f7+f2;
+ f5 = f5*f4;
+ f2 = f2+f5;
+ f5 = f2*f2;
+ f7 = 9.9999990510468706e-009;
+ if(f5 <f7) //_LBB569_2
+{
+ r0 = -1;
+ r_g0 = r0;
+ return;
+}
+else{
+ f5 = heapFloat[(fp)];
+ f7 = heapFloat[(fp+1)];
+ f8 = heapFloat[(fp+2)];
+ f5 = f5-f6;
+ f3 = f7-f3;
+ f5 = f5*f11;
+ f1 = f3*f1;
+ f0 = f8-f0;
+ f1 = f5+f1;
+ f0 = f0*f4;
+ f0 = f1+f0;
+ f0 = f0*f2;
+ f1 = 0;
+ r0 = f0 < f1;
+ r0 = r0 & 1;
+ r_g0 = r0;
+ return;
+}
+}
+
+function _ZN22btVoronoiSimplexSolver14reduceVerticesERK15btUsageBitfield(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ r2 = heap32[(r1)];
+ r3 = heap32[(fp+1)];
+ if(r2 >3) //_LBB570_2
+{
+ r2 = heapU8[r3];
+ r4 = r2 & 8;
+ if(r4 ==0) //_LBB570_4
+{
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = 3;
+ _ZN22btVoronoiSimplexSolver12removeVertexEi(i7);
+ r2 = heap32[(r1)];
+__label__ = 3;
+}
+else{
+__label__ = 5;
+}
+}
+else{
+__label__ = 3;
+}
+if (__label__ == 3){
+ if(r2 >2) //_LBB570_7
+{
+ r2 = heapU8[r3];
+__label__ = 5;
+}
+else{
+__label__ = 7;
+}
+}
+if (__label__ == 5){
+ r4 = r2 & 4;
+ if(r4 ==0) //_LBB570_10
+{
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = 2;
+ _ZN22btVoronoiSimplexSolver12removeVertexEi(i7);
+ r2 = heap32[(r1)];
+__label__ = 7;
+}
+else{
+__label__ = 9;
+}
+}
+if (__label__ == 7){
+ if(r2 >1) //_LBB570_13
+{
+ r2 = heapU8[r3];
+__label__ = 9;
+}
+else{
+__label__ = 11;
+}
+}
+if (__label__ == 9){
+ r4 = r2 & 2;
+ if(r4 ==0) //_LBB570_16
+{
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = 1;
+ _ZN22btVoronoiSimplexSolver12removeVertexEi(i7);
+ r2 = heap32[(r1)];
+__label__ = 11;
+}
+else{
+__label__ = 13;
+}
+}
+if (__label__ == 11){
+ if(r2 <1) //_LBB570_20
+{
+__label__ = 14;
+}
+else{
+ r2 = heapU8[r3];
+__label__ = 13;
+}
+}
+if (__label__ == 13){
+ r1 = r2 & 1;
+ if(r1 ==0) //_LBB570_21
+{
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = 0;
+ _ZN22btVoronoiSimplexSolver12removeVertexEi(i7);
+ return;
+}
+}
+ return;
+}
+
+function _ZN22btVoronoiSimplexSolver28updateClosestVectorAndPointsEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+ var r13;
+ var r14;
+ var r15;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+ var f10;
+ var f11;
+ var f12;
+ var f13;
+ var f14;
+ var f15;
+ var f16;
+ var f17;
+var __label__ = 0;
+ i7 = sp + -136;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = heapU8[r0+356];
+ if(r1 !=0) //_LBB571_2
+{
+ r1 = 0;
+ r2 = r0 >> 2;
+ heap8[r0+352] = r1;
+ heap32[(r2+84)] = 0;
+ heap32[(r2+85)] = 0;
+ heap32[(r2+86)] = 0;
+ heap32[(r2+87)] = 0;
+ r3 = heapU8[r0+332];
+ r4 = r3 & -16;
+ heap8[r0+332] = r4;
+ heap8[r0+356] = r1;
+ r5 = heap32[(r2)];
+_3: do {
+ if(r5 >1) //_LBB571_5
+{
+_5: do {
+ if(r5 ==2) //_LBB571_11
+{
+ f0 = 0;
+ f1 = heapFloat[(r2+2)];
+ f2 = heapFloat[(r2+6)];
+ f3 = heapFloat[(r2+1)];
+ f4 = heapFloat[(r2+5)];
+ f5 = heapFloat[(r2+3)];
+ f6 = heapFloat[(r2+7)];
+ f2 = f2-f1;
+ f1 = f0-f1;
+ f4 = f4-f3;
+ f3 = f0-f3;
+ f6 = f6-f5;
+ f5 = f0-f5;
+ f3 = f4*f3;
+ f1 = f2*f1;
+ f1 = f3+f1;
+ f3 = f6*f5;
+ f1 = f1+f3;
+ if(f1 <=f0) //_LBB571_15
+{
+ r1 = r4 | 1;
+ heap8[r0+332] = r1;
+ f1 = f0;
+}
+else{
+ f3 = f4*f4;
+ f2 = f2*f2;
+ f2 = f3+f2;
+ f3 = f6*f6;
+ f2 = f2+f3;
+ if(f1 >=f2) //_LBB571_14
+{
+ f1 = 1;
+ r1 = r4 | 2;
+ heap8[r0+332] = r1;
+}
+else{
+ f1 = f1/f2;
+ r1 = r4 | 3;
+ heap8[r0+332] = r1;
+}
+}
+ f2 = 1;
+ f2 = f2-f1;
+ heapFloat[(r2+84)] = f2;
+ heapFloat[(r2+85)] = f1;
+ heap32[(r2+86)] = 0;
+ heap32[(r2+87)] = 0;
+ f2 = heapFloat[(r2+25)];
+ f3 = heapFloat[(r2+21)];
+ f2 = f2-f3;
+ f4 = heapFloat[(r2+26)];
+ f5 = heapFloat[(r2+22)];
+ f4 = f4-f5;
+ f2 = f2*f1;
+ f6 = heapFloat[(r2+27)];
+ f7 = heapFloat[(r2+23)];
+ f6 = f6-f7;
+ f4 = f4*f1;
+ f2 = f3+f2;
+ f3 = f6*f1;
+ f4 = f5+f4;
+ heapFloat[(r2+61)] = f2;
+ f3 = f7+f3;
+ heapFloat[(r2+62)] = f4;
+ heapFloat[(r2+63)] = f3;
+ heap32[(r2+64)] = 0;
+ f5 = heapFloat[(r2+45)];
+ f6 = heapFloat[(r2+41)];
+ f5 = f5-f6;
+ f7 = heapFloat[(r2+46)];
+ f8 = heapFloat[(r2+42)];
+ f7 = f7-f8;
+ f5 = f5*f1;
+ f9 = heapFloat[(r2+47)];
+ f10 = heapFloat[(r2+43)];
+ f9 = f9-f10;
+ f7 = f7*f1;
+ f5 = f6+f5;
+ f1 = f9*f1;
+ f6 = f8+f7;
+ heapFloat[(r2+65)] = f5;
+ f1 = f10+f1;
+ heapFloat[(r2+66)] = f6;
+ heapFloat[(r2+67)] = f1;
+ f2 = f2-f5;
+ heap32[(r2+68)] = 0;
+ f4 = f4-f6;
+ heapFloat[(r2+69)] = f2;
+ f1 = f3-f1;
+ heapFloat[(r2+70)] = f4;
+ heapFloat[(r2+71)] = f1;
+ heap32[(r2+72)] = 0;
+ r1 = (r0 + 332)|0;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ _ZN22btVoronoiSimplexSolver14reduceVerticesERK15btUsageBitfield(i7);
+ f1 = heapFloat[(r2+84)];
+ if(f1 >=f0) //_LBB571_18
+{
+ f0 = heapFloat[(r2+85)];
+ f1 = 0;
+if(!(f0 <f1)) //_LBB571_17
+{
+ f0 = heapFloat[(r2+86)];
+if(!(f0 <f1)) //_LBB571_17
+{
+ f0 = heapFloat[(r2+87)];
+ r1 = f0 >= f1;
+ r1 = r1 & 1;
+break _5;
+}
+}
+}
+ r1 = 0;
+}
+else{
+ if(r5 ==3) //_LBB571_22
+{
+ r1 = sp + -56;
+ r3 = r1 >> 2;
+ heap32[(fp+-14)] = 0;
+ heap32[(r3+1)] = 0;
+ heap32[(r3+2)] = 0;
+ heap32[(r3+3)] = 0;
+ r3 = (r0 + 4)|0;
+ r4 = (r0 + 20)|0;
+ r5 = (r0 + 36)|0;
+ r6 = (r0 + 316)|0;
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r3;
+ heap32[(g0+2)] = r4;
+ heap32[(g0+3)] = r5;
+ heap32[(g0+4)] = r6;
+ _ZN22btVoronoiSimplexSolver22closestPtPointTriangleERK9btVector3S2_S2_S2_R25btSubSimplexClosestResult(i7);
+ f0 = heapFloat[(r2+85)];
+ f1 = heapFloat[(r2+25)];
+ f2 = heapFloat[(r2+84)];
+ f3 = heapFloat[(r2+21)];
+ f4 = heapFloat[(r2+26)];
+ f5 = heapFloat[(r2+22)];
+ f3 = f3*f2;
+ f1 = f1*f0;
+ f6 = heapFloat[(r2+86)];
+ f7 = heapFloat[(r2+29)];
+ f8 = heapFloat[(r2+31)];
+ f9 = heapFloat[(r2+30)];
+ f10 = heapFloat[(r2+27)];
+ f11 = heapFloat[(r2+23)];
+ f5 = f5*f2;
+ f4 = f4*f0;
+ f1 = f3+f1;
+ f3 = f7*f6;
+ f7 = f11*f2;
+ f10 = f10*f0;
+ f4 = f5+f4;
+ f5 = f9*f6;
+ f1 = f1+f3;
+ f3 = f7+f10;
+ f7 = f8*f6;
+ f4 = f4+f5;
+ heapFloat[(r2+61)] = f1;
+ f3 = f3+f7;
+ heapFloat[(r2+62)] = f4;
+ heapFloat[(r2+63)] = f3;
+ heap32[(r2+64)] = 0;
+ f5 = heapFloat[(r2+45)];
+ f7 = heapFloat[(r2+41)];
+ f8 = heapFloat[(r2+49)];
+ f9 = heapFloat[(r2+46)];
+ f10 = heapFloat[(r2+42)];
+ f7 = f7*f2;
+ f5 = f5*f0;
+ f11 = heapFloat[(r2+51)];
+ f12 = heapFloat[(r2+50)];
+ f13 = heapFloat[(r2+47)];
+ f14 = heapFloat[(r2+43)];
+ f10 = f10*f2;
+ f9 = f9*f0;
+ f5 = f7+f5;
+ f7 = f8*f6;
+ f5 = f5+f7;
+ f2 = f14*f2;
+ f0 = f13*f0;
+ f7 = f10+f9;
+ f8 = f12*f6;
+ f7 = f7+f8;
+ heapFloat[(r2+65)] = f5;
+ f0 = f2+f0;
+ f2 = f11*f6;
+ f0 = f0+f2;
+ heapFloat[(r2+66)] = f7;
+ heapFloat[(r2+67)] = f0;
+ f1 = f1-f5;
+ heap32[(r2+68)] = 0;
+ f2 = f4-f7;
+ heapFloat[(r2+69)] = f1;
+ f0 = f3-f0;
+ heapFloat[(r2+70)] = f2;
+ heapFloat[(r2+71)] = f0;
+ heap32[(r2+72)] = 0;
+ r1 = (r0 + 332)|0;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ _ZN22btVoronoiSimplexSolver14reduceVerticesERK15btUsageBitfield(i7);
+ f0 = heapFloat[(r2+84)];
+ f1 = 0;
+ if(f0 >=f1) //_LBB571_24
+{
+ f0 = heapFloat[(r2+85)];
+if(!(f0 <f1)) //_LBB571_23
+{
+ f0 = heapFloat[(r2+86)];
+if(!(f0 <f1)) //_LBB571_23
+{
+ f0 = heapFloat[(r2+87)];
+ r1 = f0 >= f1;
+ r1 = r1 & 1;
+break _5;
+}
+}
+}
+ r1 = 0;
+}
+else{
+ if(r5 ==4) //_LBB571_28
+{
+ r4 = sp + -72;
+ r5 = r4 >> 2;
+ heap32[(fp+-18)] = 0;
+ heap32[(r5+1)] = 0;
+ heap32[(r5+2)] = 0;
+ heap32[(r5+3)] = 0;
+ heap8[sp+-24] = r1;
+ heap32[(r2+79)] = 0;
+ heap32[(r2+80)] = 0;
+ heap32[(r2+81)] = 0;
+ r3 = r3 | 15;
+ heap32[(r2+82)] = 0;
+ heap8[r0+332] = r3;
+ f0 = heapFloat[(r2+11)];
+ f1 = heapFloat[(r2+7)];
+ f2 = heapFloat[(r2+15)];
+ f3 = heapFloat[(r2+1)];
+ f4 = heapFloat[(r2+2)];
+ f5 = heapFloat[(r2+3)];
+ f6 = heapFloat[(r2+5)];
+ f7 = heapFloat[(r2+6)];
+ f8 = heapFloat[(r2+9)];
+ f9 = heapFloat[(r2+10)];
+ f10 = heapFloat[(r2+13)];
+ f11 = heapFloat[(r2+14)];
+ heap32[(g0)] = 0;
+ heap32[(g0+1)] = 0;
+ heap32[(g0+2)] = 0;
+ heapFloat[(g0+3)] = f3;
+ heapFloat[(g0+4)] = f4;
+ heapFloat[(g0+5)] = f5;
+ heapFloat[(g0+6)] = f6;
+ heapFloat[(g0+7)] = f7;
+ heapFloat[(g0+8)] = f1;
+ heapFloat[(g0+9)] = f8;
+ heapFloat[(g0+10)] = f9;
+ heapFloat[(g0+11)] = f0;
+ heapFloat[(g0+12)] = f10;
+ heapFloat[(g0+13)] = f11;
+ heapFloat[(g0+14)] = f2;
+ _ZN22btVoronoiSimplexSolver19pointOutsideOfPlaneERK9btVector3S2_S2_S2_S2_(i7);
+ r3 = r_g0;
+ heap32[(g0)] = 0;
+ heap32[(g0+1)] = 0;
+ heap32[(g0+2)] = 0;
+ heapFloat[(g0+3)] = f3;
+ heapFloat[(g0+4)] = f4;
+ heapFloat[(g0+5)] = f5;
+ heapFloat[(g0+6)] = f8;
+ heapFloat[(g0+7)] = f9;
+ heapFloat[(g0+8)] = f0;
+ heapFloat[(g0+9)] = f10;
+ heapFloat[(g0+10)] = f11;
+ heapFloat[(g0+11)] = f2;
+ heapFloat[(g0+12)] = f6;
+ heapFloat[(g0+13)] = f7;
+ heapFloat[(g0+14)] = f1;
+ _ZN22btVoronoiSimplexSolver19pointOutsideOfPlaneERK9btVector3S2_S2_S2_S2_(i7);
+ r6 = r_g0;
+ heap32[(g0)] = 0;
+ heap32[(g0+1)] = 0;
+ heap32[(g0+2)] = 0;
+ heapFloat[(g0+3)] = f3;
+ heapFloat[(g0+4)] = f4;
+ heapFloat[(g0+5)] = f5;
+ heapFloat[(g0+6)] = f10;
+ heapFloat[(g0+7)] = f11;
+ heapFloat[(g0+8)] = f2;
+ heapFloat[(g0+9)] = f6;
+ heapFloat[(g0+10)] = f7;
+ heapFloat[(g0+11)] = f1;
+ heapFloat[(g0+12)] = f8;
+ heapFloat[(g0+13)] = f9;
+ heapFloat[(g0+14)] = f0;
+ _ZN22btVoronoiSimplexSolver19pointOutsideOfPlaneERK9btVector3S2_S2_S2_S2_(i7);
+ r7 = r_g0;
+ heap32[(g0)] = 0;
+ heap32[(g0+1)] = 0;
+ heap32[(g0+2)] = 0;
+ heapFloat[(g0+3)] = f6;
+ heapFloat[(g0+4)] = f7;
+ heapFloat[(g0+5)] = f1;
+ heapFloat[(g0+6)] = f10;
+ heapFloat[(g0+7)] = f11;
+ heapFloat[(g0+8)] = f2;
+ heapFloat[(g0+9)] = f8;
+ heapFloat[(g0+10)] = f9;
+ heapFloat[(g0+11)] = f0;
+ heapFloat[(g0+12)] = f3;
+ heapFloat[(g0+13)] = f4;
+ heapFloat[(g0+14)] = f5;
+ r8 = r6 | r3;
+ _ZN22btVoronoiSimplexSolver19pointOutsideOfPlaneERK9btVector3S2_S2_S2_S2_(i7);
+ r9 = r_g0;
+if(!(r8 <0)) //_LBB571_52
+{
+ r10 = r9 | r7;
+if(!(r10 <0)) //_LBB571_52
+{
+ r8 = r8 | r7;
+ r8 = r8 | r9;
+ if(r8 ==0) //_LBB571_53
+{
+ r1 = 1;
+ heap8[r0+312] = r1;
+ heap32[(r2+69)] = 0;
+ heap32[(r2+70)] = 0;
+ heap32[(r2+71)] = 0;
+ heap32[(r2+72)] = 0;
+ r_g0 = r1;
+ return;
+}
+else{
+ r8 = (r0 + 4)|0;
+ r10 = (r0 + 20)|0;
+ r11 = (r0 + 36)|0;
+ r12 = (r0 + 52)|0;
+ if(r3 !=0) //_LBB571_33
+{
+ r3 = sp + -40;
+ heap32[(g0)] = r4;
+ heap32[(g0+1)] = r8;
+ heap32[(g0+2)] = r10;
+ heap32[(g0+3)] = r11;
+ heap32[(g0+4)] = r3;
+ _ZN22btVoronoiSimplexSolver22closestPtPointTriangleERK9btVector3S2_S2_S2_R25btSubSimplexClosestResult(i7);
+ r3 = r3 >> 2;
+ f1 = heapFloat[(fp+-10)];
+ f0 = heapFloat[(fp+-18)];
+ f2 = heapFloat[(r3+1)];
+ f3 = heapFloat[(r5+1)];
+ f0 = f1-f0;
+ f3 = f2-f3;
+ f4 = heapFloat[(r3+2)];
+ f5 = heapFloat[(r5+2)];
+ f5 = f4-f5;
+ f0 = f0*f0;
+ f3 = f3*f3;
+ f0 = f0+f3;
+ f3 = f5*f5;
+ f0 = f0+f3;
+ f3 = 3.4028234663852886e+038;
+ if(f0 >=f3) //_LBB571_32
+{
+__label__ = 31;
+}
+else{
+ f3 = heapFloat[(r3+3)];
+ heapFloat[(r2+79)] = f1;
+ heapFloat[(r2+80)] = f2;
+ heapFloat[(r2+81)] = f4;
+ heapFloat[(r2+82)] = f3;
+ r13 = heapU8[sp+-24];
+ r14 = heapU8[r0+332];
+ r15 = r13 & 1;
+ r14 = r14 & 240;
+ r14 = r15 | r14;
+ r15 = r13 & 2;
+ r14 = r14 | r15;
+ r13 = r13 & 4;
+ r13 = r14 | r13;
+ heap8[r0+332] = r13;
+ f1 = heapFloat[(r3+7)];
+ f2 = heapFloat[(r3+6)];
+ heap32[(r2+84)] = heap32[(r3+5)];
+ heapFloat[(r2+85)] = f2;
+ heapFloat[(r2+86)] = f1;
+ heap32[(r2+87)] = 0;
+__label__ = 34;
+}
+}
+else{
+__label__ = 31;
+}
+if (__label__ == 31){
+ f0 = 3.4028234663852886e+038;
+}
+ if(r6 !=0) //_LBB571_37
+{
+ r3 = sp + -40;
+ heap32[(g0)] = r4;
+ heap32[(g0+1)] = r8;
+ heap32[(g0+2)] = r11;
+ heap32[(g0+3)] = r12;
+ heap32[(g0+4)] = r3;
+ _ZN22btVoronoiSimplexSolver22closestPtPointTriangleERK9btVector3S2_S2_S2_R25btSubSimplexClosestResult(i7);
+ r3 = r3 >> 2;
+ f1 = heapFloat[(fp+-10)];
+ f2 = heapFloat[(fp+-18)];
+ f3 = heapFloat[(r3+1)];
+ f4 = heapFloat[(r5+1)];
+ f2 = f1-f2;
+ f4 = f3-f4;
+ f5 = heapFloat[(r3+2)];
+ f6 = heapFloat[(r5+2)];
+ f6 = f5-f6;
+ f2 = f2*f2;
+ f4 = f4*f4;
+ f2 = f2+f4;
+ f4 = f6*f6;
+ f2 = f2+f4;
+if(!(f2 >=f0)) //_LBB571_36
+{
+ f0 = heapFloat[(r3+3)];
+ heapFloat[(r2+79)] = f1;
+ heapFloat[(r2+80)] = f3;
+ heapFloat[(r2+81)] = f5;
+ heapFloat[(r2+82)] = f0;
+ r6 = heapU8[sp+-24];
+ r13 = heapU8[r0+332];
+ r14 = r6 << 1;
+ r6 = r6 & 1;
+ r13 = r13 & 240;
+ r6 = r6 | r13;
+ r13 = r14 & 4;
+ r6 = r6 | r13;
+ r13 = r14 & 8;
+ r6 = r6 | r13;
+ heap8[r0+332] = r6;
+ f0 = heapFloat[(r3+7)];
+ f1 = heapFloat[(r3+6)];
+ heap32[(r2+84)] = heap32[(r3+5)];
+ heap32[(r2+85)] = 0;
+ heapFloat[(r2+86)] = f1;
+ heapFloat[(r2+87)] = f0;
+ f0 = f2;
+}
+}
+ if(r7 !=0) //_LBB571_41
+{
+ r3 = sp + -40;
+ heap32[(g0)] = r4;
+ heap32[(g0+1)] = r8;
+ heap32[(g0+2)] = r12;
+ heap32[(g0+3)] = r10;
+ heap32[(g0+4)] = r3;
+ _ZN22btVoronoiSimplexSolver22closestPtPointTriangleERK9btVector3S2_S2_S2_R25btSubSimplexClosestResult(i7);
+ r3 = r3 >> 2;
+ f1 = heapFloat[(fp+-10)];
+ f2 = heapFloat[(fp+-18)];
+ f3 = heapFloat[(r3+1)];
+ f4 = heapFloat[(r5+1)];
+ f2 = f1-f2;
+ f4 = f3-f4;
+ f5 = heapFloat[(r3+2)];
+ f6 = heapFloat[(r5+2)];
+ f6 = f5-f6;
+ f2 = f2*f2;
+ f4 = f4*f4;
+ f2 = f2+f4;
+ f4 = f6*f6;
+ f2 = f2+f4;
+if(!(f2 >=f0)) //_LBB571_40
+{
+ f0 = heapFloat[(r3+3)];
+ heapFloat[(r2+79)] = f1;
+ heapFloat[(r2+80)] = f3;
+ heapFloat[(r2+81)] = f5;
+ heapFloat[(r2+82)] = f0;
+ r6 = heapU8[sp+-24];
+ r7 = heapU8[r0+332];
+ r8 = r6 >>> 1;
+ r13 = r6 & 1;
+ r7 = r7 & 240;
+ r6 = r6 << 2;
+ r7 = r13 | r7;
+ r8 = r8 & 2;
+ r7 = r7 | r8;
+ r6 = r6 & 8;
+ r6 = r7 | r6;
+ heap8[r0+332] = r6;
+ f0 = heapFloat[(r3+6)];
+ f1 = heapFloat[(r3+7)];
+ heap32[(r2+84)] = heap32[(r3+5)];
+ heapFloat[(r2+85)] = f1;
+ heap32[(r2+86)] = 0;
+ heapFloat[(r2+87)] = f0;
+ f0 = f2;
+}
+}
+if(!(r9 ==0)) //_LBB571_46
+{
+ r3 = sp + -40;
+ heap32[(g0)] = r4;
+ heap32[(g0+1)] = r10;
+ heap32[(g0+2)] = r12;
+ heap32[(g0+3)] = r11;
+ heap32[(g0+4)] = r3;
+ _ZN22btVoronoiSimplexSolver22closestPtPointTriangleERK9btVector3S2_S2_S2_R25btSubSimplexClosestResult(i7);
+ r3 = r3 >> 2;
+ f1 = heapFloat[(fp+-10)];
+ f2 = heapFloat[(fp+-18)];
+ f3 = heapFloat[(r3+1)];
+ f4 = heapFloat[(r5+1)];
+ f2 = f1-f2;
+ f4 = f3-f4;
+ f5 = heapFloat[(r3+2)];
+ f6 = heapFloat[(r5+2)];
+ f6 = f5-f6;
+ f2 = f2*f2;
+ f4 = f4*f4;
+ f2 = f2+f4;
+ f4 = f6*f6;
+ f2 = f2+f4;
+if(!(f2 >=f0)) //_LBB571_46
+{
+ f0 = heapFloat[(r3+3)];
+ heapFloat[(r2+79)] = f1;
+ heapFloat[(r2+80)] = f3;
+ heapFloat[(r2+81)] = f5;
+ heapFloat[(r2+82)] = f0;
+ r4 = heapU8[sp+-24];
+ r5 = heapU8[r0+332];
+ r6 = r4 << 1;
+ r6 = r6 & 2;
+ r5 = r5 & 240;
+ r7 = r4 << 2;
+ r5 = r6 | r5;
+ r4 = r4 & 4;
+ r4 = r5 | r4;
+ r5 = r7 & 8;
+ r4 = r4 | r5;
+ heap8[r0+332] = r4;
+ f0 = heapFloat[(r3+6)];
+ f1 = heapFloat[(r3+7)];
+ f2 = heapFloat[(r3+5)];
+ heap32[(r2+84)] = 0;
+ heapFloat[(r2+85)] = f2;
+ heapFloat[(r2+86)] = f1;
+ heapFloat[(r2+87)] = f0;
+}
+}
+ f0 = heapFloat[(r2+85)];
+ f1 = heapFloat[(r2+25)];
+ f2 = heapFloat[(r2+84)];
+ f3 = heapFloat[(r2+21)];
+ f4 = heapFloat[(r2+26)];
+ f5 = heapFloat[(r2+22)];
+ f3 = f3*f2;
+ f1 = f1*f0;
+ f6 = heapFloat[(r2+86)];
+ f7 = heapFloat[(r2+29)];
+ f8 = heapFloat[(r2+30)];
+ f9 = heapFloat[(r2+27)];
+ f10 = heapFloat[(r2+23)];
+ f5 = f5*f2;
+ f4 = f4*f0;
+ f1 = f3+f1;
+ f3 = f7*f6;
+ f7 = heapFloat[(r2+87)];
+ f11 = heapFloat[(r2+33)];
+ f12 = heapFloat[(r2+35)];
+ f13 = heapFloat[(r2+34)];
+ f14 = heapFloat[(r2+31)];
+ f10 = f10*f2;
+ f9 = f9*f0;
+ f4 = f5+f4;
+ f5 = f8*f6;
+ f1 = f1+f3;
+ f3 = f11*f7;
+ f8 = f10+f9;
+ f9 = f14*f6;
+ f4 = f4+f5;
+ f5 = f13*f7;
+ f1 = f1+f3;
+ f3 = f8+f9;
+ f8 = f12*f7;
+ f4 = f4+f5;
+ heapFloat[(r2+61)] = f1;
+ f3 = f3+f8;
+ heapFloat[(r2+62)] = f4;
+ heapFloat[(r2+63)] = f3;
+ heap32[(r2+64)] = 0;
+ f5 = heapFloat[(r2+45)];
+ f8 = heapFloat[(r2+41)];
+ f9 = heapFloat[(r2+49)];
+ f10 = heapFloat[(r2+46)];
+ f11 = heapFloat[(r2+42)];
+ f8 = f8*f2;
+ f5 = f5*f0;
+ f12 = heapFloat[(r2+53)];
+ f13 = heapFloat[(r2+50)];
+ f14 = heapFloat[(r2+47)];
+ f15 = heapFloat[(r2+43)];
+ f11 = f11*f2;
+ f10 = f10*f0;
+ f5 = f8+f5;
+ f8 = f9*f6;
+ f9 = heapFloat[(r2+55)];
+ f16 = heapFloat[(r2+54)];
+ f17 = heapFloat[(r2+51)];
+ f2 = f15*f2;
+ f0 = f14*f0;
+ f10 = f11+f10;
+ f11 = f13*f6;
+ f5 = f5+f8;
+ f8 = f12*f7;
+ f5 = f5+f8;
+ f0 = f2+f0;
+ f2 = f17*f6;
+ f6 = f10+f11;
+ f8 = f16*f7;
+ f6 = f6+f8;
+ heapFloat[(r2+65)] = f5;
+ f0 = f0+f2;
+ f2 = f9*f7;
+ f0 = f0+f2;
+ heapFloat[(r2+66)] = f6;
+ heapFloat[(r2+67)] = f0;
+ f1 = f1-f5;
+ heap32[(r2+68)] = 0;
+ f2 = f4-f6;
+ heapFloat[(r2+69)] = f1;
+ f0 = f3-f0;
+ heapFloat[(r2+70)] = f2;
+ heapFloat[(r2+71)] = f0;
+ heap32[(r2+72)] = 0;
+ r3 = (r0 + 332)|0;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r3;
+ _ZN22btVoronoiSimplexSolver14reduceVerticesERK15btUsageBitfield(i7);
+ f0 = heapFloat[(r2+84)];
+ f1 = 0;
+ if(f0 >=f1) //_LBB571_48
+{
+ f0 = heapFloat[(r2+85)];
+ if(f0 <f1) //_LBB571_47
+{
+break _5;
+}
+else{
+ f0 = heapFloat[(r2+86)];
+ if(f0 <f1) //_LBB571_47
+{
+break _5;
+}
+else{
+ f0 = heapFloat[(r2+87)];
+ r1 = f0 >= f1;
+ r1 = r1 & 1;
+break _5;
+}
+}
+}
+else{
+break _5;
+}
+}
+}
+}
+ r2 = 1;
+ heap8[r0+352] = r2;
+ r2 = 0;
+ heap8[r0+312] = r2;
+ r_g0 = r2;
+ return;
+}
+else{
+__label__ = 8;
+break _3;
+}
+}
+}
+} while(0);
+ heap8[r0+312] = r1;
+ r0 = r1 & 255;
+ r_g0 = r0;
+ return;
+}
+else{
+ if(r5 ==0) //_LBB571_8
+{
+__label__ = 8;
+}
+else{
+ if(r5 ==1) //_LBB571_10
+{
+ f0 = heapFloat[(r2+21)];
+ heapFloat[(r2+61)] = f0;
+ f1 = heapFloat[(r2+22)];
+ heapFloat[(r2+62)] = f1;
+ f2 = heapFloat[(r2+23)];
+ heapFloat[(r2+63)] = f2;
+ heap32[(r2+64)] = heap32[(r2+24)];
+ f3 = heapFloat[(r2+41)];
+ heapFloat[(r2+65)] = f3;
+ f4 = heapFloat[(r2+42)];
+ heapFloat[(r2+66)] = f4;
+ f5 = heapFloat[(r2+43)];
+ heapFloat[(r2+67)] = f5;
+ f0 = f0-f3;
+ heap32[(r2+68)] = heap32[(r2+44)];
+ f1 = f1-f4;
+ heapFloat[(r2+69)] = f0;
+ f0 = f2-f5;
+ heapFloat[(r2+70)] = f1;
+ heapFloat[(r2+71)] = f0;
+ r1 = 0;
+ heap32[(r2+72)] = 0;
+ heap8[r0+352] = r1;
+ heap8[r0+332] = r4;
+ heap32[(r2+84)] = 1065353216;
+ heap32[(r2+85)] = 0;
+ heap32[(r2+86)] = 0;
+ heap32[(r2+87)] = 0;
+ r1 = 1;
+__label__ = 9;
+}
+else{
+__label__ = 8;
+}
+}
+}
+} while(0);
+if (__label__ == 8){
+ r1 = 0;
+}
+ heap8[r0+312] = r1;
+ r_g0 = r1;
+ return;
+}
+else{
+ r0 = heapU8[r0+312];
+ r_g0 = r0;
+ return;
+}
+}
+
+function _ZN16btCollisionWorld27ClosestConvexResultCallbackD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTVN16btCollisionWorld27ClosestConvexResultCallbackE;
+ r0 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r0)] = r1;
+ return;
+}
+
+function _ZN16btCollisionWorld27ClosestConvexResultCallbackD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTVN16btCollisionWorld27ClosestConvexResultCallbackE;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZN16btCollisionWorld27ClosestConvexResultCallback15addSingleResultERNS_17LocalConvexResultEb(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+ var f10;
+ var f11;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ r0 = r0 >> 2;
+ r1 = heap32[(fp)];
+ f0 = heapFloat[(r0+10)];
+ r1 = r1 >> 2;
+ f1 = heapFloat[(r1+1)];
+ if(f0 <=f1) //_LBB574_2
+{
+ r2 = heap32[(fp+2)];
+ heapFloat[(r1+1)] = f0;
+ r3 = heap32[(r0)];
+ heap32[(r1+19)] = r3;
+ if(r2 ==0) //_LBB574_4
+{
+ r2 = r3 >> 2;
+ f0 = heapFloat[(r0+2)];
+ f1 = heapFloat[(r2+1)];
+ f2 = heapFloat[(r0+3)];
+ f3 = heapFloat[(r2+2)];
+ f4 = heapFloat[(r2+5)];
+ f5 = heapFloat[(r2+6)];
+ f1 = f1*f0;
+ f3 = f3*f2;
+ f6 = heapFloat[(r0+4)];
+ f7 = heapFloat[(r2+3)];
+ f8 = heapFloat[(r2+9)];
+ f9 = heapFloat[(r2+10)];
+ f10 = heapFloat[(r2+11)];
+ f11 = heapFloat[(r2+7)];
+ f4 = f4*f0;
+ f5 = f5*f2;
+ f1 = f1+f3;
+ f3 = f7*f6;
+ f0 = f8*f0;
+ f2 = f9*f2;
+ f4 = f4+f5;
+ f5 = f11*f6;
+ f1 = f1+f3;
+ f0 = f0+f2;
+ f2 = f10*f6;
+ f3 = f4+f5;
+ heapFloat[(r1+11)] = f1;
+ f0 = f0+f2;
+ heapFloat[(r1+12)] = f3;
+ heapFloat[(r1+13)] = f0;
+ heap32[(r1+14)] = 0;
+}
+else{
+ heap32[(r1+11)] = heap32[(r0+2)];
+ heap32[(r1+12)] = heap32[(r0+3)];
+ heap32[(r1+13)] = heap32[(r0+4)];
+ heap32[(r1+14)] = heap32[(r0+5)];
+}
+ heap32[(r1+15)] = heap32[(r0+6)];
+ heap32[(r1+16)] = heap32[(r0+7)];
+ heap32[(r1+17)] = heap32[(r0+8)];
+ heap32[(r1+18)] = heap32[(r0+9)];
+ f0 = heapFloat[(r0+10)];
+ f_g0 = f0;
+ return;
+}
+else{
+ r0 = _2E_str36;
+ r1 = _2E_str4;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 384;
+ _assert(i7);
+}
+}
+
+function _ZNK21btConeTwistConstraint28calculateSerializeBufferSizeEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = 204;
+ r_g0 = r0;
+ return;
+}
+
+function _ZNK21btConeTwistConstraint9serializeEPvP12btSerializer(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = heap32[(fp+1)];
+ r2 = heap32[(fp+2)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = r2;
+ r1 = r1 >> 2;
+ r0 = r0 >> 2;
+ _ZNK17btTypedConstraint9serializeEPvP12btSerializer(i7);
+ heap32[(r1+11)] = heap32[(r0+72)];
+ heap32[(r1+12)] = heap32[(r0+73)];
+ heap32[(r1+13)] = heap32[(r0+74)];
+ heap32[(r1+14)] = heap32[(r0+75)];
+ heap32[(r1+15)] = heap32[(r0+76)];
+ heap32[(r1+16)] = heap32[(r0+77)];
+ heap32[(r1+17)] = heap32[(r0+78)];
+ heap32[(r1+18)] = heap32[(r0+79)];
+ heap32[(r1+19)] = heap32[(r0+80)];
+ heap32[(r1+20)] = heap32[(r0+81)];
+ heap32[(r1+21)] = heap32[(r0+82)];
+ heap32[(r1+22)] = heap32[(r0+83)];
+ heap32[(r1+23)] = heap32[(r0+84)];
+ heap32[(r1+24)] = heap32[(r0+85)];
+ heap32[(r1+25)] = heap32[(r0+86)];
+ heap32[(r1+26)] = heap32[(r0+87)];
+ heap32[(r1+27)] = heap32[(r0+88)];
+ heap32[(r1+28)] = heap32[(r0+89)];
+ heap32[(r1+29)] = heap32[(r0+90)];
+ heap32[(r1+30)] = heap32[(r0+91)];
+ heap32[(r1+31)] = heap32[(r0+92)];
+ heap32[(r1+32)] = heap32[(r0+93)];
+ heap32[(r1+33)] = heap32[(r0+94)];
+ heap32[(r1+34)] = heap32[(r0+95)];
+ heap32[(r1+35)] = heap32[(r0+96)];
+ heap32[(r1+36)] = heap32[(r0+97)];
+ heap32[(r1+37)] = heap32[(r0+98)];
+ heap32[(r1+38)] = heap32[(r0+99)];
+ heap32[(r1+39)] = heap32[(r0+100)];
+ heap32[(r1+40)] = heap32[(r0+101)];
+ heap32[(r1+41)] = heap32[(r0+102)];
+ heap32[(r1+42)] = heap32[(r0+103)];
+ heap32[(r1+43)] = heap32[(r0+108)];
+ heap32[(r1+44)] = heap32[(r0+109)];
+ heap32[(r1+45)] = heap32[(r0+110)];
+ heap32[(r1+46)] = heap32[(r0+104)];
+ heap32[(r1+47)] = heap32[(r0+105)];
+ heap32[(r1+48)] = heap32[(r0+106)];
+ heap32[(r1+49)] = heap32[(r0+107)];
+ r0 = _2E_str239;
+ r_g0 = r0;
+ return;
+}
+
+function _ZN21btConeTwistConstraintD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV21btConeTwistConstraint;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZN21btConeTwistConstraintD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV21btConeTwistConstraint;
+ r0 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r0)] = r1;
+ return;
+}
+
+function _ZN21btConeTwistConstraint13buildJacobianEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+ var f10;
+ var f11;
+ var f12;
+ var f13;
+ var f14;
+ var f15;
+ var f16;
+ var f17;
+ var f18;
+ var f19;
+ var f20;
+ var f21;
+ var f22;
+ var f23;
+var __label__ = 0;
+ i7 = sp + -216;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = heapU8[r0+515];
+if(!(r1 ==0)) //_LBB579_14
+{
+ r1 = r0 >> 2;
+ heap32[(r1+7)] = 0;
+ heap32[(r1+127)] = 0;
+ heap32[(r1+126)] = 0;
+ heap32[(r1+141)] = 0;
+ heap32[(r1+142)] = 0;
+ heap32[(r1+143)] = 0;
+ heap32[(r1+144)] = 0;
+ r2 = heapU8[r0+512];
+if(!(r2 !=0)) //_LBB579_13
+{
+ r2 = heap32[(r1+6)];
+ r3 = heap32[(r1+5)];
+ r2 = r2 >> 2;
+ r3 = r3 >> 2;
+ f0 = heapFloat[(r2+5)];
+ f1 = heapFloat[(r1+100)];
+ f2 = heapFloat[(r2+1)];
+ f3 = heapFloat[(r2+6)];
+ f4 = heapFloat[(r1+101)];
+ f5 = heapFloat[(r2+2)];
+ f6 = heapFloat[(r3+5)];
+ f7 = heapFloat[(r1+84)];
+ f8 = heapFloat[(r3+1)];
+ f9 = heapFloat[(r3+6)];
+ f10 = heapFloat[(r1+85)];
+ f11 = heapFloat[(r3+2)];
+ f12 = heapFloat[(r2+9)];
+ f13 = heapFloat[(r2+10)];
+ f14 = heapFloat[(r3+9)];
+ f15 = heapFloat[(r3+10)];
+ f0 = f0*f1;
+ f3 = f3*f4;
+ f16 = heapFloat[(r2+7)];
+ f17 = heapFloat[(r1+102)];
+ f18 = heapFloat[(r2+3)];
+ f6 = f6*f7;
+ f9 = f9*f10;
+ f19 = heapFloat[(r3+7)];
+ f20 = heapFloat[(r1+86)];
+ f21 = heapFloat[(r3+3)];
+ f2 = f2*f1;
+ f5 = f5*f4;
+ f8 = f8*f7;
+ f11 = f11*f10;
+ f22 = heapFloat[(r2+11)];
+ f23 = heapFloat[(r3+11)];
+ f1 = f12*f1;
+ f4 = f13*f4;
+ f7 = f14*f7;
+ f10 = f15*f10;
+ f0 = f0+f3;
+ f3 = f16*f17;
+ f6 = f6+f9;
+ f9 = f19*f20;
+ f2 = f2+f5;
+ f5 = f18*f17;
+ f8 = f8+f11;
+ f11 = f21*f20;
+ f1 = f1+f4;
+ f4 = f22*f17;
+ f7 = f7+f10;
+ f10 = f23*f20;
+ f0 = f0+f3;
+ f3 = heapFloat[(r2+14)];
+ f6 = f6+f9;
+ f9 = heapFloat[(r3+14)];
+ f2 = f2+f5;
+ f5 = heapFloat[(r2+13)];
+ f8 = f8+f11;
+ f11 = heapFloat[(r3+13)];
+ f0 = f0+f3;
+ f3 = f6+f9;
+ f2 = f2+f5;
+ f5 = f8+f11;
+ f1 = f1+f4;
+ f4 = heapFloat[(r2+15)];
+ f6 = f7+f10;
+ f7 = heapFloat[(r3+15)];
+ f8 = f0-f3;
+ f9 = f2-f5;
+ f1 = f1+f4;
+ f4 = f6+f7;
+ f6 = f1-f4;
+ f7 = f9*f9;
+ f10 = f8*f8;
+ f7 = f7+f10;
+ f10 = f6*f6;
+ f7 = f7+f10;
+ f10 = 1.1920928955078125e-007;
+ if(f7 >f10) //_LBB579_4
+{
+ heapFloat[(g0)] = f7;
+ f10 = 1;
+ sqrtf(i7);
+ f11 = f10/f_g0;
+ r2 = sp + -176;
+ f7 = f9*f11;
+ f8 = f8*f11;
+ r3 = r2 >> 2;
+ heapFloat[(fp+-44)] = f7;
+ f6 = f6*f11;
+ heapFloat[(r3+1)] = f8;
+ r2 = (r2 + 8)|0;
+ heapFloat[(r3+2)] = f6;
+ heap32[(r3+3)] = 0;
+ f9 = 0;
+ if(f6 <f9) //_LBB579_6
+{
+ f9 = -f6;
+}
+else{
+ f9 = f6;
+}
+ f11 = 0.70710676908493042;
+ if(f9 >f11) //_LBB579_9
+{
+ f7 = f8*f8;
+ f8 = f6*f6;
+ f7 = f7+f8;
+ heapFloat[(g0)] = f7;
+ sqrtf(i7);
+ heap32[(r3+4)] = 0;
+ f6 = heapFloat[(r3+2)];
+ f8 = f10/f_g0;
+ f6 = -f6;
+ f6 = f8*f6;
+ heapFloat[(r3+5)] = f6;
+ f9 = heapFloat[(r3+1)];
+ f9 = f9*f8;
+ f7 = f7*f8;
+ heapFloat[(r3+6)] = f9;
+ heapFloat[(r3+8)] = f7;
+ f7 = heapFloat[(fp+-44)];
+ f8 = -f7;
+ f8 = f9*f8;
+ f7 = f7*f6;
+ heapFloat[(r3+9)] = f8;
+ heapFloat[(r3+10)] = f7;
+__label__ = 10;
+}
+else{
+__label__ = 9;
+}
+}
+else{
+ r2 = sp + -176;
+ r3 = r2 >> 2;
+ heap32[(fp+-44)] = 1065353216;
+ heap32[(r3+1)] = 0;
+ r2 = (r2 + 8)|0;
+ f7 = 1;
+ f8 = 0;
+ heap32[(r3+2)] = 0;
+ heap32[(r3+3)] = 0;
+__label__ = 9;
+}
+if (__label__ == 9){
+ f6 = f7*f7;
+ f7 = f8*f8;
+ f6 = f6+f7;
+ r3 = sp + -176;
+ heapFloat[(g0)] = f6;
+ r3 = r3 >> 2;
+ sqrtf(i7);
+ f8 = 1;
+ f9 = heapFloat[(r3+1)];
+ f7 = f8/f_g0;
+ f8 = -f9;
+ f8 = f7*f8;
+ heapFloat[(r3+4)] = f8;
+ f9 = heapFloat[(fp+-44)];
+ f9 = f9*f7;
+ heapFloat[(r3+5)] = f9;
+ r2 = r2 >> 2;
+ heap32[(r3+6)] = 0;
+ f10 = heapFloat[(r2)];
+ f11 = -f10;
+ f9 = f9*f11;
+ f8 = f10*f8;
+ heapFloat[(r3+8)] = f9;
+ f6 = f6*f7;
+ heapFloat[(r3+9)] = f8;
+ heapFloat[(r3+10)] = f6;
+}
+ r2 = (r0 + 36)|0;
+ r3 = 0;
+_16: while(true){
+ r4 = heap32[(r1+5)];
+ r5 = r4 >> 2;
+ r6 = sp + -128;
+ r7 = r6 >> 2;
+ heap32[(fp+-32)] = heap32[(r5+1)];
+ heap32[(r7+1)] = heap32[(r5+5)];
+ heap32[(r7+2)] = heap32[(r5+9)];
+ heap32[(r7+3)] = 0;
+ heap32[(r7+4)] = heap32[(r5+2)];
+ heap32[(r7+5)] = heap32[(r5+6)];
+ heap32[(r7+6)] = heap32[(r5+10)];
+ heap32[(r7+7)] = 0;
+ heap32[(r7+8)] = heap32[(r5+3)];
+ heap32[(r7+9)] = heap32[(r5+7)];
+ heap32[(r7+10)] = heap32[(r5+11)];
+ heap32[(r7+11)] = 0;
+ r7 = heap32[(r1+6)];
+ r8 = sp + -80;
+ r9 = r7 >> 2;
+ r10 = r8 >> 2;
+ heap32[(fp+-20)] = heap32[(r9+1)];
+ heap32[(r10+1)] = heap32[(r9+5)];
+ heap32[(r10+2)] = heap32[(r9+9)];
+ heap32[(r10+3)] = 0;
+ heap32[(r10+4)] = heap32[(r9+2)];
+ heap32[(r10+5)] = heap32[(r9+6)];
+ heap32[(r10+6)] = heap32[(r9+10)];
+ heap32[(r10+7)] = 0;
+ heap32[(r10+8)] = heap32[(r9+3)];
+ heap32[(r10+9)] = heap32[(r9+7)];
+ heap32[(r10+10)] = heap32[(r9+11)];
+ heap32[(r10+11)] = 0;
+ f6 = heapFloat[(r5+13)];
+ f7 = heapFloat[(r5+15)];
+ f8 = heapFloat[(r5+14)];
+ r10 = sp + -32;
+ f6 = f5-f6;
+ r11 = r10 >> 2;
+ f8 = f3-f8;
+ heapFloat[(fp+-8)] = f6;
+ f6 = f4-f7;
+ heapFloat[(r11+1)] = f8;
+ heapFloat[(r11+2)] = f6;
+ heap32[(r11+3)] = 0;
+ f6 = heapFloat[(r9+13)];
+ f7 = heapFloat[(r9+15)];
+ f8 = heapFloat[(r9+14)];
+ r11 = sp + -16;
+ f6 = f2-f6;
+ r12 = r11 >> 2;
+ f8 = f0-f8;
+ heapFloat[(fp+-4)] = f6;
+ f6 = f1-f7;
+ heapFloat[(r12+1)] = f8;
+ heapFloat[(r12+2)] = f6;
+ heap32[(r12+3)] = 0;
+ f6 = heapFloat[(r9+84)];
+ f7 = heapFloat[(r5+84)];
+ r5 = sp + -176;
+ r5 = (r5 + r3)|0;
+ r4 = (r4 + 388)|0;
+ r7 = (r7 + 388)|0;
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = r6;
+ heap32[(g0+2)] = r8;
+ heap32[(g0+3)] = r10;
+ heap32[(g0+4)] = r11;
+ heap32[(g0+5)] = r5;
+ heap32[(g0+6)] = r4;
+ heapFloat[(g0+7)] = f7;
+ heap32[(g0+8)] = r7;
+ heapFloat[(g0+9)] = f6;
+ r3 = (r3 + 16)|0;
+ r2 = (r2 + 84)|0;
+ _ZN15btJacobianEntryC2ERK11btMatrix3x3S2_RK9btVector3S5_S5_S5_fS5_f(i7);
+if(!(r3 !=48)) //_LBB579_12
+{
+break _16;
+}
+}
+}
+ r2 = heap32[(r1+6)];
+ r1 = heap32[(r1+5)];
+ r3 = (r1 + 4)|0;
+ r4 = (r2 + 4)|0;
+ r1 = (r1 + 256)|0;
+ r2 = (r2 + 256)|0;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r3;
+ heap32[(g0+2)] = r4;
+ heap32[(g0+3)] = r1;
+ heap32[(g0+4)] = r2;
+ _ZN21btConeTwistConstraint14calcAngleInfo2ERK11btTransformS2_RK11btMatrix3x3S5_(i7);
+}
+ return;
+}
+
+function _ZN21btConeTwistConstraint8getInfo1EPN17btTypedConstraint17btConstraintInfo1E(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var f0;
+ var f1;
+var __label__ = 0;
+ i7 = sp + -24;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = heap32[(fp+1)];
+ r2 = heapU8[r0+515];
+ if(r2 ==0) //_LBB580_2
+{
+ r1 = r1 >> 2;
+ heap32[(r1)] = 3;
+ r2 = r0 >> 2;
+ heap32[(r1+1)] = 3;
+ r3 = heap32[(r2+6)];
+ r4 = heap32[(r2+5)];
+ r5 = (r4 + 4)|0;
+ r6 = (r3 + 4)|0;
+ r4 = (r4 + 256)|0;
+ r3 = (r3 + 256)|0;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r5;
+ heap32[(g0+2)] = r6;
+ heap32[(g0+3)] = r4;
+ heap32[(g0+4)] = r3;
+ _ZN21btConeTwistConstraint14calcAngleInfo2ERK11btTransformS2_RK11btMatrix3x3S5_(i7);
+ r3 = heapU8[r0+514];
+if(!(r3 ==0)) //_LBB580_6
+{
+ r3 = heap32[(r1)];
+ r4 = (r3 + 1)|0;
+ heap32[(r1)] = r4;
+ r4 = heap32[(r1+1)];
+ r5 = (r4 + -1)|0;
+ heap32[(r1+1)] = r5;
+ f0 = heapFloat[(r2+111)];
+ f1 = heapFloat[(r2+108)];
+if(!(f1 >=f0)) //_LBB580_6
+{
+ f1 = heapFloat[(r2+109)];
+if(!(f1 >=f0)) //_LBB580_6
+{
+ r2 = (r3 + 2)|0;
+ r3 = (r4 + -2)|0;
+ heap32[(r1)] = r2;
+ heap32[(r1+1)] = r3;
+}
+}
+}
+ r0 = heapU8[r0+513];
+if(!(r0 ==0)) //_LBB580_8
+{
+ r0 = heap32[(r1)];
+ r0 = (r0 + 1)|0;
+ heap32[(r1)] = r0;
+ r0 = heap32[(r1+1)];
+ r0 = (r0 + -1)|0;
+ heap32[(r1+1)] = r0;
+}
+ return;
+}
+else{
+ r0 = r1 >> 2;
+ heap32[(r0)] = 0;
+ heap32[(r0+1)] = 0;
+ return;
+}
+}
+
+function _ZN21btConeTwistConstraint8getInfo2EPN17btTypedConstraint17btConstraintInfo2E(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+ var r13;
+ var r14;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+ var f10;
+ var f11;
+ var f12;
+ var f13;
+ var f14;
+ var f15;
+ var f16;
+ var f17;
+ var f18;
+var __label__ = 0;
+ i7 = sp + -24;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ r2 = heap32[(r1+6)];
+ r3 = heap32[(r1+5)];
+ r4 = (r3 + 4)|0;
+ r5 = (r2 + 4)|0;
+ r6 = (r3 + 256)|0;
+ r7 = (r2 + 256)|0;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r4;
+ heap32[(g0+2)] = r5;
+ heap32[(g0+3)] = r6;
+ heap32[(g0+4)] = r7;
+ _ZN21btConeTwistConstraint14calcAngleInfo2ERK11btTransformS2_RK11btMatrix3x3S5_(i7);
+ r4 = heapU8[r0+515];
+ if(r4 ==0) //_LBB581_2
+{
+ r4 = heap32[(fp+1)];
+ r5 = r4 >> 2;
+ r6 = heap32[(r5+2)];
+ r6 = r6 >> 2;
+ heap32[(r6)] = 1065353216;
+ r6 = heap32[(r5+6)];
+ r7 = heap32[(r5+2)];
+ r6 = r6 << 2;
+ r6 = (r6 + r7)|0;
+ r6 = r6 >> 2;
+ heap32[(r6+1)] = 1065353216;
+ r6 = heap32[(r5+6)];
+ r7 = heap32[(r5+2)];
+ r6 = r6 << 3;
+ r6 = (r6 + r7)|0;
+ r6 = r6 >> 2;
+ heap32[(r6+2)] = 1065353216;
+ r3 = r3 >> 2;
+ f0 = heapFloat[(r3+9)];
+ f1 = heapFloat[(r1+84)];
+ f2 = heapFloat[(r3+5)];
+ f3 = heapFloat[(r3+10)];
+ f4 = heapFloat[(r1+85)];
+ f5 = heapFloat[(r3+6)];
+ r6 = heap32[(r5+6)];
+ f6 = heapFloat[(r3+1)];
+ f7 = heapFloat[(r3+2)];
+ r7 = heap32[(r5+3)];
+ f2 = f2*f1;
+ f5 = f5*f4;
+ f0 = f0*f1;
+ f3 = f3*f4;
+ f8 = heapFloat[(r3+11)];
+ f9 = heapFloat[(r1+86)];
+ f10 = heapFloat[(r3+7)];
+ f11 = heapFloat[(r3+3)];
+ f2 = f2+f5;
+ f5 = f10*f9;
+ r8 = r7 >> 2;
+ f0 = f0+f3;
+ f3 = f8*f9;
+ f2 = f2+f5;
+ f0 = f0+f3;
+ heap32[(r8)] = 0;
+ r9 = r6 << 2;
+ f3 = -f2;
+ heapFloat[(r8+1)] = f0;
+ r9 = (r7 + r9)|0;
+ heapFloat[(r8+2)] = f3;
+ r9 = r9 >> 2;
+ f1 = f6*f1;
+ f3 = f7*f4;
+ f4 = -f0;
+ heap32[(r8+3)] = 0;
+ heapFloat[(r9)] = f4;
+ f1 = f1+f3;
+ f3 = f11*f9;
+ r6 = r6 << 3;
+ f1 = f1+f3;
+ heap32[(r9+1)] = 0;
+ r8 = (r6 + r7)|0;
+ r6 = r6 | 4;
+ heapFloat[(r9+2)] = f1;
+ r6 = (r7 + r6)|0;
+ r7 = r8 >> 2;
+ heap32[(r9+3)] = 0;
+ r6 = r6 >> 2;
+ f3 = -f1;
+ heapFloat[(r7)] = f2;
+ heapFloat[(r6)] = f3;
+ heap32[(r7+2)] = 0;
+ heap32[(r7+3)] = 0;
+ r2 = r2 >> 2;
+ f3 = heapFloat[(r2+9)];
+ f4 = heapFloat[(r1+100)];
+ f5 = heapFloat[(r2+10)];
+ f6 = heapFloat[(r1+101)];
+ f3 = f3*f4;
+ f5 = f5*f6;
+ f7 = heapFloat[(r2+11)];
+ f8 = heapFloat[(r1+102)];
+ r6 = heap32[(r5+6)];
+ f9 = heapFloat[(r2+5)];
+ f10 = heapFloat[(r2+6)];
+ f11 = heapFloat[(r2+7)];
+ f12 = heapFloat[(r2+1)];
+ f13 = heapFloat[(r2+2)];
+ f14 = heapFloat[(r2+3)];
+ r7 = heap32[(r5+5)];
+ f3 = f3+f5;
+ f5 = f7*f8;
+ f3 = f3+f5;
+ r8 = r7 >> 2;
+ f5 = f9*f4;
+ f7 = f10*f6;
+ f5 = f5+f7;
+ f7 = f11*f8;
+ f9 = -f3;
+ heap32[(r8)] = 0;
+ f5 = f5+f7;
+ r9 = r6 << 2;
+ heapFloat[(r8+1)] = f9;
+ r9 = (r7 + r9)|0;
+ heapFloat[(r8+2)] = f5;
+ f4 = f12*f4;
+ f6 = f13*f6;
+ f4 = f4+f6;
+ f6 = f14*f8;
+ r9 = r9 >> 2;
+ heap32[(r8+3)] = 0;
+ f4 = f4+f6;
+ heapFloat[(r9)] = f3;
+ r6 = r6 << 3;
+ f6 = -f4;
+ heap32[(r9+1)] = 0;
+ r8 = (r6 + r7)|0;
+ r6 = r6 | 4;
+ heapFloat[(r9+2)] = f6;
+ r6 = (r7 + r6)|0;
+ r7 = r8 >> 2;
+ f6 = -f5;
+ heap32[(r9+3)] = 0;
+ r6 = r6 >> 2;
+ heapFloat[(r7)] = f6;
+ heapFloat[(r6)] = f4;
+ heap32[(r7+2)] = 0;
+ heap32[(r7+3)] = 0;
+ r6 = heapU8[r0+580];
+ r6 = r6 & 2;
+ if(r6 ==0) //_LBB581_4
+{
+ r4 = (r4 + 4)|0;
+}
+else{
+ r4 = (r0 + 588)|0;
+}
+ f6 = heapFloat[(r2+13)];
+ r4 = r4 >> 2;
+ f4 = f4+f6;
+ f1 = f4-f1;
+ f4 = heapFloat[(r3+13)];
+ f6 = heapFloat[(r4)];
+ f7 = heapFloat[(r5)];
+ r4 = heap32[(r5+7)];
+ f6 = f7*f6;
+ f1 = f1-f4;
+ r4 = r4 >> 2;
+ f1 = f1*f6;
+ heapFloat[(r4)] = f1;
+ r4 = heap32[(r5+9)];
+ r4 = r4 >> 2;
+ heap32[(r4)] = -8388609;
+ r4 = heap32[(r5+10)];
+ r4 = r4 >> 2;
+ heap32[(r4)] = 2139095039;
+ r4 = heapU8[r0+580];
+ r4 = r4 & 1;
+if(!(r4 ==0)) //_LBB581_7
+{
+ r4 = heap32[(r5+8)];
+ r4 = r4 >> 2;
+ heap32[(r4)] = heap32[(r1+146)];
+}
+ f1 = heapFloat[(r2+14)];
+ r4 = heap32[(r5+6)];
+ f1 = f5+f1;
+ r4 = r4 << 2;
+ r6 = heap32[(r5+7)];
+ f4 = heapFloat[(r3+14)];
+ f1 = f1-f2;
+ r4 = (r6 + r4)|0;
+ f1 = f1-f4;
+ r4 = r4 >> 2;
+ f1 = f1*f6;
+ heapFloat[(r4)] = f1;
+ r4 = heap32[(r5+6)];
+ r6 = heap32[(r5+9)];
+ r4 = r4 << 2;
+ r4 = (r6 + r4)|0;
+ r4 = r4 >> 2;
+ heap32[(r4)] = -8388609;
+ r4 = heap32[(r5+6)];
+ r6 = heap32[(r5+10)];
+ r4 = r4 << 2;
+ r4 = (r6 + r4)|0;
+ r4 = r4 >> 2;
+ heap32[(r4)] = 2139095039;
+ r4 = heapU8[r0+580];
+ r4 = r4 & 1;
+if(!(r4 ==0)) //_LBB581_25
+{
+ r4 = heap32[(r5+6)];
+ r6 = heap32[(r5+8)];
+ r4 = r4 << 2;
+ r4 = (r6 + r4)|0;
+ r4 = r4 >> 2;
+ heap32[(r4)] = heap32[(r1+146)];
+}
+ f1 = heapFloat[(r2+15)];
+ r2 = heap32[(r5+6)];
+ f3 = f3+f1;
+ r2 = r2 << 3;
+ r4 = heap32[(r5+7)];
+ f1 = heapFloat[(r3+15)];
+ f0 = f3-f0;
+ r2 = (r4 + r2)|0;
+ f0 = f0-f1;
+ r2 = r2 >> 2;
+ f0 = f0*f6;
+ heapFloat[(r2)] = f0;
+ r2 = heap32[(r5+6)];
+ r4 = heap32[(r5+9)];
+ r2 = r2 << 3;
+ r2 = (r4 + r2)|0;
+ r2 = r2 >> 2;
+ heap32[(r2)] = -8388609;
+ r2 = heap32[(r5+6)];
+ r4 = heap32[(r5+10)];
+ r2 = r2 << 3;
+ r2 = (r4 + r2)|0;
+ r2 = r2 >> 2;
+ heap32[(r2)] = 2139095039;
+ r2 = heapU8[r0+580];
+ r2 = r2 & 1;
+if(!(r2 ==0)) //_LBB581_8
+{
+ r2 = heap32[(r5+6)];
+ r4 = heap32[(r5+8)];
+ r2 = r2 << 3;
+ r2 = (r4 + r2)|0;
+ r2 = r2 >> 2;
+ heap32[(r2)] = heap32[(r1+146)];
+}
+ r2 = heap32[(r5+6)];
+ r4 = (r2 * 3)|0;
+ r6 = heapU8[r0+514];
+_16: do {
+ if(r6 !=0) //_LBB581_10
+{
+ f0 = heapFloat[(r1+111)];
+ r6 = heap32[(r5+3)];
+ r7 = heap32[(r5+5)];
+ f3 = heapFloat[(r1+108)];
+if(!(f3 >=f0)) //_LBB581_13
+{
+ f3 = heapFloat[(r1+109)];
+if(!(f3 >=f0)) //_LBB581_13
+{
+ f0 = heapFloat[(r3+1)];
+ f3 = heapFloat[(r1+73)];
+ f6 = heapFloat[(r3+2)];
+ f1 = heapFloat[(r1+77)];
+ r8 = (r4 + 1)|0;
+ f2 = heapFloat[(r3+5)];
+ f4 = heapFloat[(r3+6)];
+ r9 = r4 << 2;
+ f5 = f3*f0;
+ f7 = f1*f6;
+ f8 = heapFloat[(r3+3)];
+ f9 = heapFloat[(r1+81)];
+ f10 = heapFloat[(r1+74)];
+ f11 = heapFloat[(r3+9)];
+ f12 = heapFloat[(r1+78)];
+ f13 = heapFloat[(r3+10)];
+ r10 = (r4 + 2)|0;
+ r8 = r8 << 2;
+ r11 = (r6 + r9)|0;
+ f14 = heapFloat[(r3+11)];
+ f15 = heapFloat[(r1+82)];
+ f16 = heapFloat[(r3+7)];
+ f17 = f3*f2;
+ f18 = f1*f4;
+ f5 = f5+f7;
+ f7 = f9*f8;
+ r2 = (r2 + r4)|0;
+ r3 = r10 << 2;
+ r4 = (r6 + r8)|0;
+ f5 = f5+f7;
+ f3 = f3*f11;
+ f1 = f1*f13;
+ f7 = f17+f18;
+ f17 = f9*f16;
+ r10 = r11 >> 2;
+ r11 = (r2 + 1)|0;
+ r12 = r2 << 2;
+ r13 = (r6 + r3)|0;
+ f7 = f7+f17;
+ f0 = f10*f0;
+ f6 = f12*f6;
+ f3 = f3+f1;
+ f1 = f9*f14;
+ r4 = r4 >> 2;
+ heapFloat[(r10)] = f5;
+ r10 = (r2 + 2)|0;
+ r11 = r11 << 2;
+ r14 = (r6 + r12)|0;
+ f3 = f3+f1;
+ f1 = f10*f2;
+ f2 = f12*f4;
+ f0 = f0+f6;
+ f6 = f15*f8;
+ r13 = r13 >> 2;
+ heapFloat[(r4)] = f7;
+ r4 = r10 << 2;
+ r10 = (r6 + r11)|0;
+ f0 = f0+f6;
+ f6 = f10*f11;
+ f4 = f12*f13;
+ f1 = f1+f2;
+ f2 = f15*f16;
+ r14 = r14 >> 2;
+ heapFloat[(r13)] = f3;
+ r6 = (r6 + r4)|0;
+ f1 = f1+f2;
+ f6 = f6+f4;
+ f2 = f15*f14;
+ r10 = r10 >> 2;
+ heapFloat[(r14)] = f0;
+ r13 = (r7 + r9)|0;
+ f6 = f6+f2;
+ r6 = r6 >> 2;
+ heapFloat[(r10)] = f1;
+ r8 = (r7 + r8)|0;
+ r10 = r13 >> 2;
+ f2 = -f5;
+ heapFloat[(r6)] = f6;
+ r3 = (r7 + r3)|0;
+ r6 = r8 >> 2;
+ f4 = -f7;
+ heapFloat[(r10)] = f2;
+ r8 = (r7 + r12)|0;
+ r3 = r3 >> 2;
+ f2 = -f3;
+ heapFloat[(r6)] = f4;
+ r6 = (r7 + r11)|0;
+ r8 = r8 >> 2;
+ f4 = -f0;
+ heapFloat[(r3)] = f2;
+ r3 = (r7 + r4)|0;
+ r4 = r6 >> 2;
+ f2 = -f1;
+ heapFloat[(r8)] = f4;
+ r3 = r3 >> 2;
+ f4 = -f6;
+ heapFloat[(r4)] = f2;
+ heapFloat[(r3)] = f4;
+ f2 = heapFloat[(r1+112)];
+ f4 = heapFloat[(r1+113)];
+ f8 = heapFloat[(r1+114)];
+ f2 = f2*f5;
+ f4 = f4*f7;
+ r3 = heap32[(r5+7)];
+ f2 = f2+f4;
+ f3 = f8*f3;
+ f4 = heapFloat[(r5)];
+ f5 = heapFloat[(r1+106)];
+ r3 = (r3 + r9)|0;
+ f3 = f2+f3;
+ f2 = f4*f5;
+ r3 = r3 >> 2;
+ f3 = f3*f2;
+ heapFloat[(r3)] = f3;
+ f3 = heapFloat[(r1+112)];
+ f4 = heapFloat[(r1+113)];
+ f5 = heapFloat[(r1+114)];
+ f0 = f3*f0;
+ f3 = f4*f1;
+ r3 = heap32[(r5+7)];
+ f0 = f0+f3;
+ f3 = f5*f6;
+ r3 = (r3 + r12)|0;
+ f0 = f0+f3;
+ r3 = r3 >> 2;
+ f0 = f0*f2;
+ heapFloat[(r3)] = f0;
+ r3 = heap32[(r5+9)];
+ r3 = (r3 + r9)|0;
+ r3 = r3 >> 2;
+ heap32[(r3)] = -8388609;
+ r3 = heap32[(r5+10)];
+ r3 = (r3 + r9)|0;
+ r3 = r3 >> 2;
+ heap32[(r3)] = 2139095039;
+ r3 = heap32[(r5+9)];
+ r3 = (r3 + r12)|0;
+ r3 = r3 >> 2;
+ heap32[(r3)] = -8388609;
+ r3 = heap32[(r5+10)];
+ r3 = (r3 + r12)|0;
+ r3 = r3 >> 2;
+ heap32[(r3)] = 2139095039;
+ r3 = heap32[(r5+6)];
+ r4 = (r3 + r2)|0;
+break _16;
+}
+}
+ r2 = (r4 + 1)|0;
+ r3 = r4 << 2;
+ f0 = heapFloat[(r1+106)];
+ f3 = heapFloat[(r1+112)];
+ r8 = (r4 + 2)|0;
+ r2 = r2 << 2;
+ r9 = (r6 + r3)|0;
+ f3 = f3*f0;
+ f6 = heapFloat[(r1+114)];
+ f1 = heapFloat[(r1+113)];
+ r8 = r8 << 2;
+ r10 = (r6 + r2)|0;
+ f1 = f1*f0;
+ f3 = f3*f0;
+ r9 = r9 >> 2;
+ r6 = (r6 + r8)|0;
+ f6 = f6*f0;
+ f1 = f1*f0;
+ r10 = r10 >> 2;
+ heapFloat[(r9)] = f3;
+ r9 = (r7 + r3)|0;
+ f0 = f6*f0;
+ r6 = r6 >> 2;
+ heapFloat[(r10)] = f1;
+ r2 = (r7 + r2)|0;
+ r9 = r9 >> 2;
+ f3 = -f3;
+ heapFloat[(r6)] = f0;
+ r6 = (r7 + r8)|0;
+ r2 = r2 >> 2;
+ f6 = -f1;
+ heapFloat[(r9)] = f3;
+ r6 = r6 >> 2;
+ f0 = -f0;
+ heapFloat[(r2)] = f6;
+ heapFloat[(r6)] = f0;
+ r2 = heap32[(r5+7)];
+ f0 = heapFloat[(r5)];
+ f3 = heapFloat[(r1+105)];
+ r2 = (r2 + r3)|0;
+ f6 = heapFloat[(r1+123)];
+ f0 = f0*f3;
+ r2 = r2 >> 2;
+ f0 = f6*f0;
+ heapFloat[(r2)] = f0;
+ r2 = heapU8[r0+580];
+ r2 = r2 & 4;
+if(!(r2 ==0)) //_LBB581_15
+{
+ r2 = heap32[(r5+8)];
+ r2 = (r2 + r3)|0;
+ r2 = r2 >> 2;
+ heap32[(r2)] = heap32[(r1+148)];
+}
+ r2 = heap32[(r5+9)];
+ r2 = (r2 + r3)|0;
+ r2 = r2 >> 2;
+ heap32[(r2)] = 0;
+ r2 = heap32[(r5+10)];
+ r2 = (r2 + r3)|0;
+ r2 = r2 >> 2;
+ heap32[(r2)] = 2139095039;
+ r2 = heap32[(r5+6)];
+ r4 = (r2 + r4)|0;
+}
+} while(0);
+ r2 = heapU8[r0+513];
+ if(r2 ==0) //_LBB581_28
+{
+ return;
+}
+else{
+ r2 = (r4 + 1)|0;
+ r3 = r4 << 2;
+ r6 = heap32[(r5+3)];
+ f0 = heapFloat[(r1+106)];
+ f3 = heapFloat[(r1+116)];
+ r4 = (r4 + 2)|0;
+ r2 = r2 << 2;
+ r7 = heap32[(r5+5)];
+ r8 = (r6 + r3)|0;
+ f3 = f3*f0;
+ f6 = heapFloat[(r1+118)];
+ f1 = heapFloat[(r1+117)];
+ r4 = r4 << 2;
+ r9 = (r6 + r2)|0;
+ f1 = f1*f0;
+ f3 = f3*f0;
+ r8 = r8 >> 2;
+ r6 = (r6 + r4)|0;
+ f6 = f6*f0;
+ f1 = f1*f0;
+ r9 = r9 >> 2;
+ heapFloat[(r8)] = f3;
+ r8 = (r7 + r3)|0;
+ f0 = f6*f0;
+ r6 = r6 >> 2;
+ heapFloat[(r9)] = f1;
+ r2 = (r7 + r2)|0;
+ r8 = r8 >> 2;
+ f3 = -f3;
+ heapFloat[(r6)] = f0;
+ r4 = (r7 + r4)|0;
+ r2 = r2 >> 2;
+ f6 = -f1;
+ heapFloat[(r8)] = f3;
+ r4 = r4 >> 2;
+ f0 = -f0;
+ heapFloat[(r2)] = f6;
+ heapFloat[(r4)] = f0;
+ r2 = heap32[(r5+7)];
+ f0 = heapFloat[(r5)];
+ f3 = heapFloat[(r1+105)];
+ r2 = (r2 + r3)|0;
+ f6 = heapFloat[(r1+124)];
+ f0 = f0*f3;
+ r2 = r2 >> 2;
+ f0 = f6*f0;
+ heapFloat[(r2)] = f0;
+ r0 = heapU8[r0+580];
+ r0 = r0 & 4;
+if(!(r0 ==0)) //_LBB581_19
+{
+ r0 = heap32[(r5+8)];
+ r0 = (r0 + r3)|0;
+ r0 = r0 >> 2;
+ heap32[(r0)] = heap32[(r1+148)];
+}
+ f0 = heapFloat[(r1+110)];
+ f3 = 0;
+ if(f0 <=f3) //_LBB581_24
+{
+ r0 = heap32[(r5+9)];
+ r0 = (r0 + r3)|0;
+ r0 = r0 >> 2;
+ heap32[(r0)] = -8388609;
+}
+else{
+ r0 = heap32[(r5+9)];
+ f0 = heapFloat[(r1+124)];
+ if(f0 <=f3) //_LBB581_23
+{
+ r0 = (r0 + r3)|0;
+ r0 = r0 >> 2;
+ heap32[(r0)] = -8388609;
+ r0 = heap32[(r5+10)];
+ r3 = (r0 + r3)|0;
+ r3 = r3 >> 2;
+ heap32[(r3)] = 0;
+ return;
+}
+else{
+ r0 = (r0 + r3)|0;
+ r0 = r0 >> 2;
+ heap32[(r0)] = 0;
+}
+}
+ r0 = heap32[(r5+10)];
+ r0 = (r0 + r3)|0;
+ r0 = r0 >> 2;
+ heap32[(r0)] = 2139095039;
+ return;
+}
+}
+else{
+ r0 = _2E_str1149;
+ r1 = _2E_str24;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 126;
+ _assert(i7);
+}
+}
+
+function _ZN21btConeTwistConstraint23solveConstraintObsoleteER11btRigidBodyS1_f(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+ var r13;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+ var f10;
+ var f11;
+ var f12;
+ var f13;
+ var f14;
+ var f15;
+ var f16;
+ var f17;
+ var f18;
+ var f19;
+ var f20;
+ var f21;
+ var f22;
+ var f23;
+ var f24;
+ var f25;
+ var f26;
+ var f27;
+ var f28;
+ var f29;
+ var f30;
+var __label__ = 0;
+ i7 = sp + -624;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = heapU8[r0+515];
+if(!(r1 ==0)) //_LBB582_52
+{
+ r1 = heap32[(fp+1)];
+ r2 = heap32[(fp+2)];
+ f0 = heapFloat[(fp+3)];
+ heapFloat[(fp+-117)] = f0;
+ r3 = r0 >> 2;
+ r4 = heapU8[r0+512];
+if(!(r4 !=0)) //_LBB582_8
+{
+ r4 = heap32[(r3+5)];
+ r5 = heap32[(r3+6)];
+ r4 = r4 >> 2;
+ r5 = r5 >> 2;
+ f0 = heapFloat[(r4+9)];
+ f1 = heapFloat[(r3+84)];
+ f2 = heapFloat[(r4+5)];
+ f3 = heapFloat[(r4+1)];
+ f4 = heapFloat[(r4+10)];
+ f5 = heapFloat[(r3+85)];
+ f6 = heapFloat[(r4+6)];
+ f7 = heapFloat[(r4+2)];
+ f8 = heapFloat[(r5+9)];
+ f9 = heapFloat[(r3+100)];
+ f10 = heapFloat[(r5+5)];
+ f11 = heapFloat[(r5+1)];
+ f12 = heapFloat[(r5+10)];
+ f13 = heapFloat[(r3+101)];
+ f14 = heapFloat[(r5+6)];
+ f15 = heapFloat[(r5+2)];
+ f0 = f0*f1;
+ f4 = f4*f5;
+ f16 = heapFloat[(r4+11)];
+ f17 = heapFloat[(r3+86)];
+ f18 = heapFloat[(r4+7)];
+ f19 = heapFloat[(r4+3)];
+ f2 = f2*f1;
+ f6 = f6*f5;
+ f1 = f3*f1;
+ f3 = f7*f5;
+ f5 = f8*f9;
+ f7 = f12*f13;
+ f8 = heapFloat[(r5+11)];
+ f12 = heapFloat[(r3+102)];
+ f20 = heapFloat[(r5+7)];
+ f21 = heapFloat[(r5+3)];
+ f10 = f10*f9;
+ f14 = f14*f13;
+ f9 = f11*f9;
+ f11 = f15*f13;
+ f0 = f0+f4;
+ f4 = f16*f17;
+ f2 = f2+f6;
+ f6 = f18*f17;
+ f1 = f1+f3;
+ f3 = f19*f17;
+ f5 = f5+f7;
+ f7 = f8*f12;
+ f8 = f10+f14;
+ f10 = f20*f12;
+ f9 = f9+f11;
+ f11 = f21*f12;
+ f12 = heapFloat[(r4+15)];
+ f0 = f0+f4;
+ f4 = heapFloat[(r4+14)];
+ f2 = f2+f6;
+ f6 = heapFloat[(r4+13)];
+ f1 = f1+f3;
+ f3 = heapFloat[(r5+15)];
+ f5 = f5+f7;
+ f7 = heapFloat[(r5+14)];
+ f8 = f8+f10;
+ f10 = heapFloat[(r5+13)];
+ f9 = f9+f11;
+ f0 = f0+f12;
+ heapFloat[(fp+-119)] = f0;
+ f0 = f2+f4;
+ heapFloat[(fp+-121)] = f0;
+ f1 = f1+f6;
+ heapFloat[(fp+-120)] = f1;
+ f0 = f5+f3;
+ heapFloat[(fp+-122)] = f0;
+ f0 = f8+f7;
+ heapFloat[(fp+-123)] = f0;
+ f1 = f9+f10;
+ r4 = r1 >> 2;
+ r5 = r2 >> 2;
+ f2 = heapFloat[(r4+80)];
+ f5 = heapFloat[(r4+130)];
+ f8 = heapFloat[(r5+80)];
+ f9 = heapFloat[(r5+130)];
+ f11 = heapFloat[(r4+81)];
+ f13 = heapFloat[(r4+131)];
+ f14 = heapFloat[(r4+82)];
+ f15 = heapFloat[(r4+132)];
+ f16 = heapFloat[(r5+81)];
+ f17 = heapFloat[(r5+131)];
+ f18 = heapFloat[(r5+82)];
+ f19 = heapFloat[(r5+132)];
+ f20 = heapFloat[(fp+-120)];
+ f6 = f20-f6;
+ f10 = f1-f10;
+ f11 = f11+f13;
+ f0 = heapFloat[(fp+-119)];
+ f12 = f0-f12;
+ f2 = f2+f5;
+ f0 = heapFloat[(fp+-121)];
+ f4 = f0-f4;
+ f5 = f14+f15;
+ f13 = f16+f17;
+ f0 = heapFloat[(fp+-122)];
+ f3 = f0-f3;
+ f8 = f8+f9;
+ f0 = heapFloat[(fp+-123)];
+ f7 = f0-f7;
+ f9 = f18+f19;
+ f14 = heapFloat[(r4+78)];
+ f15 = heapFloat[(r4+128)];
+ f16 = f2*f4;
+ f17 = f11*f6;
+ f18 = heapFloat[(r5+78)];
+ f19 = heapFloat[(r5+128)];
+ f21 = f8*f7;
+ f22 = f13*f10;
+ f23 = heapFloat[(r4+77)];
+ f24 = heapFloat[(r4+127)];
+ f25 = f5*f6;
+ f2 = f2*f12;
+ f26 = heapFloat[(r5+77)];
+ f27 = heapFloat[(r5+127)];
+ f28 = f9*f10;
+ f8 = f8*f3;
+ f29 = heapFloat[(r4+76)];
+ f30 = heapFloat[(r4+126)];
+ f11 = f11*f12;
+ f5 = f5*f4;
+ f0 = heapFloat[(r5+76)];
+ f20 = heapFloat[(r5+126)];
+ f13 = f13*f3;
+ f9 = f9*f7;
+ f14 = f14+f15;
+ f15 = f16-f17;
+ f16 = f18+f19;
+ f17 = f21-f22;
+ f18 = f23+f24;
+ f2 = f25-f2;
+ f19 = f26+f27;
+ f8 = f28-f8;
+ f21 = f29+f30;
+ f5 = f11-f5;
+ f0 = f0+f20;
+ f9 = f13-f9;
+ f11 = f14+f15;
+ f13 = f16+f17;
+ f2 = f18+f2;
+ f8 = f19+f8;
+ f5 = f21+f5;
+ f0 = f0+f9;
+ f9 = f11-f13;
+ f2 = f2-f8;
+ heapFloat[(fp+-118)] = f2;
+ f0 = f5-f0;
+ f2 = heapFloat[(fp+-119)];
+ f5 = heapFloat[(fp+-122)];
+ f2 = f2-f5;
+ f5 = heapFloat[(fp+-121)];
+ f8 = heapFloat[(fp+-123)];
+ f5 = f5-f8;
+ f8 = heapFloat[(fp+-120)];
+ f1 = f8-f1;
+ r6 = 0;
+_5: while(true){
+ r7 = (r6 * -21)|0;
+ r8 = r7 << 2;
+ r8 = (r0 + r8)|0;
+ r8 = r8 >> 2;
+ f8 = heapFloat[(r8+9)];
+ f11 = heapFloat[(r8+10)];
+ f13 = heapFloat[(r8+11)];
+ f14 = f1*f8;
+ f15 = f5*f11;
+ f14 = f14+f15;
+ f15 = f2*f13;
+ f14 = f14+f15;
+ f15 = -0.30000001192092896;
+ f16 = f8*f0;
+ f17 = heapFloat[(fp+-118)];
+ f17 = f11*f17;
+ f14 = f14*f15;
+ f15 = f16+f17;
+ f16 = f13*f9;
+ f17 = 1;
+ f18 = heapFloat[(r8+29)];
+ f19 = heapFloat[(fp+-117)];
+ f14 = f14/f19;
+ f17 = f17/f18;
+ f15 = f15+f16;
+ f14 = f14*f17;
+ f15 = f15*f17;
+ f14 = f14-f15;
+ f15 = heapFloat[(r3+7)];
+ f15 = f15+f14;
+ heapFloat[(r3+7)] = f15;
+ f15 = heapFloat[(r4+84)];
+ f16 = 0;
+if(!(f15 ==f16)) //_LBB582_5
+{
+ r9 = heap32[(r3+5)];
+ r9 = r9 >> 2;
+ f15 = f6*f11;
+ f17 = f4*f8;
+ f18 = f12*f8;
+ f19 = f6*f13;
+ f20 = f4*f13;
+ f21 = f12*f11;
+ f15 = f15-f17;
+ f17 = f18-f19;
+ f18 = f20-f21;
+ f19 = heapFloat[(r9+84)];
+ f20 = f8*f19;
+ f20 = f20*f14;
+ f21 = heapFloat[(r4+126)];
+ f22 = heapFloat[(r9+65)];
+ f23 = heapFloat[(r9+64)];
+ f24 = heapFloat[(r9+69)];
+ f25 = heapFloat[(r9+68)];
+ f26 = heapFloat[(r9+73)];
+ f27 = heapFloat[(r9+72)];
+ f28 = heapFloat[(r9+66)];
+ f29 = heapFloat[(r9+70)];
+ f30 = heapFloat[(r9+74)];
+ f20 = f21+f20;
+ f21 = f11*f19;
+ heapFloat[(r4+126)] = f20;
+ f20 = f21*f14;
+ f21 = heapFloat[(r4+127)];
+ f20 = f21+f20;
+ f19 = f13*f19;
+ heapFloat[(r4+127)] = f20;
+ f19 = f19*f14;
+ f20 = heapFloat[(r4+128)];
+ f19 = f20+f19;
+ heapFloat[(r4+128)] = f19;
+ f19 = f23*f18;
+ f20 = f22*f17;
+ f21 = heapFloat[(r4+134)];
+ f19 = f19+f20;
+ f20 = f28*f15;
+ f19 = f19+f20;
+ f20 = f21*f14;
+ f21 = heapFloat[(r4+136)];
+ f22 = heapFloat[(r4+135)];
+ f23 = heapFloat[(r4+130)];
+ f19 = f19*f20;
+ f20 = f25*f18;
+ f24 = f24*f17;
+ f20 = f20+f24;
+ f24 = f29*f15;
+ f19 = f23+f19;
+ heapFloat[(r4+130)] = f19;
+ f19 = f20+f24;
+ f20 = f22*f14;
+ f18 = f27*f18;
+ f17 = f26*f17;
+ f19 = f19*f20;
+ f20 = heapFloat[(r4+131)];
+ f19 = f20+f19;
+ f17 = f18+f17;
+ f15 = f30*f15;
+ heapFloat[(r4+131)] = f19;
+ f15 = f17+f15;
+ f17 = f21*f14;
+ f15 = f15*f17;
+ f17 = heapFloat[(r4+132)];
+ f15 = f17+f15;
+ heapFloat[(r4+132)] = f15;
+}
+ f15 = heapFloat[(r5+84)];
+if(!(f15 ==f16)) //_LBB582_7
+{
+ f15 = f10*f11;
+ f16 = f7*f8;
+ f8 = f3*f8;
+ f17 = f10*f13;
+ f13 = f7*f13;
+ f11 = f3*f11;
+ f15 = f15-f16;
+ f8 = f8-f17;
+ f11 = f13-f11;
+ r9 = heap32[(r3+6)];
+ r9 = r9 >> 2;
+ f13 = -f14;
+ f14 = heapFloat[(r9+84)];
+ r10 = r7 << 2;
+ r10 = (r0 + r10)|0;
+ r10 = r10 >> 2;
+ r7 = r7 << 2;
+ r7 = (r0 + r7)|0;
+ f16 = heapFloat[(r10+9)];
+ r7 = r7 >> 2;
+ f16 = f16*f14;
+ f17 = heapFloat[(r7+10)];
+ f18 = heapFloat[(r8+11)];
+ f16 = f16*f13;
+ f19 = heapFloat[(r5+126)];
+ f20 = heapFloat[(r9+65)];
+ f21 = heapFloat[(r9+64)];
+ f22 = heapFloat[(r9+69)];
+ f23 = heapFloat[(r9+68)];
+ f24 = heapFloat[(r9+73)];
+ f25 = heapFloat[(r9+72)];
+ f26 = heapFloat[(r9+66)];
+ f27 = heapFloat[(r9+70)];
+ f28 = heapFloat[(r9+74)];
+ f16 = f19+f16;
+ f17 = f17*f14;
+ heapFloat[(r5+126)] = f16;
+ f16 = f17*f13;
+ f17 = heapFloat[(r5+127)];
+ f16 = f17+f16;
+ f14 = f18*f14;
+ heapFloat[(r5+127)] = f16;
+ f14 = f14*f13;
+ f16 = heapFloat[(r5+128)];
+ f14 = f16+f14;
+ heapFloat[(r5+128)] = f14;
+ f14 = f21*f11;
+ f16 = f20*f8;
+ f17 = heapFloat[(r5+134)];
+ f14 = f14+f16;
+ f16 = f26*f15;
+ f14 = f14+f16;
+ f16 = f17*f13;
+ f17 = heapFloat[(r5+136)];
+ f18 = heapFloat[(r5+135)];
+ f19 = heapFloat[(r5+130)];
+ f14 = f14*f16;
+ f16 = f23*f11;
+ f20 = f22*f8;
+ f16 = f16+f20;
+ f20 = f27*f15;
+ f14 = f19+f14;
+ heapFloat[(r5+130)] = f14;
+ f14 = f16+f20;
+ f16 = f18*f13;
+ f11 = f25*f11;
+ f8 = f24*f8;
+ f14 = f14*f16;
+ f16 = heapFloat[(r5+131)];
+ f14 = f16+f14;
+ f8 = f11+f8;
+ f11 = f28*f15;
+ heapFloat[(r5+131)] = f14;
+ f8 = f8+f11;
+ f11 = f17*f13;
+ f8 = f8*f11;
+ f11 = heapFloat[(r5+132)];
+ f8 = f11+f8;
+ heapFloat[(r5+132)] = f8;
+}
+ r6 = (r6 + -1)|0;
+if(!(r6 !=-3)) //_LBB582_3
+{
+break _5;
+}
+}
+}
+ r4 = heapU8[r0+540];
+_14: do {
+ if(r4 ==0) //_LBB582_29
+{
+ f0 = heapFloat[(r3+107)];
+ f1 = 1.1920928955078125e-007;
+ if(f0 <=f1) //_LBB582_35
+{
+break _14;
+}
+else{
+ r4 = r2 >> 2;
+ r5 = r1 >> 2;
+ f0 = heapFloat[(r4+81)];
+ f2 = heapFloat[(r4+131)];
+ f3 = heapFloat[(r5+81)];
+ f4 = heapFloat[(r5+131)];
+ f5 = heapFloat[(r4+80)];
+ f6 = heapFloat[(r4+130)];
+ f7 = heapFloat[(r5+80)];
+ f8 = heapFloat[(r5+130)];
+ f9 = heapFloat[(r4+82)];
+ f10 = heapFloat[(r4+132)];
+ f11 = heapFloat[(r5+82)];
+ f12 = heapFloat[(r5+132)];
+ f0 = f0+f2;
+ f2 = f3+f4;
+ f3 = f5+f6;
+ f4 = f7+f8;
+ f0 = f0-f2;
+ f2 = f3-f4;
+ f3 = f9+f10;
+ f4 = f11+f12;
+ f3 = f3-f4;
+ f4 = f2*f2;
+ f5 = f0*f0;
+ f4 = f4+f5;
+ f5 = f3*f3;
+ f4 = f4+f5;
+ if(f4 <=f1) //_LBB582_35
+{
+break _14;
+}
+else{
+ heapFloat[(g0)] = f4;
+ sqrtf(i7);
+ r6 = heap32[(r3+5)];
+ r7 = heap32[(r3+6)];
+ f4 = 1;
+ r6 = r6 >> 2;
+ r7 = r7 >> 2;
+ f1 = f4/f_g0;
+ f5 = heapFloat[(r6+64)];
+ f6 = f2*f1;
+ f7 = heapFloat[(r6+65)];
+ f8 = heapFloat[(r7+64)];
+ f9 = heapFloat[(r7+65)];
+ f10 = heapFloat[(r6+68)];
+ f11 = f0*f1;
+ f12 = heapFloat[(r6+69)];
+ f13 = heapFloat[(r7+68)];
+ f14 = heapFloat[(r7+69)];
+ f15 = heapFloat[(r6+66)];
+ f16 = heapFloat[(r6+70)];
+ f17 = heapFloat[(r7+66)];
+ f18 = heapFloat[(r7+70)];
+ f5 = f5*f6;
+ f10 = f10*f11;
+ f19 = heapFloat[(r6+72)];
+ f1 = f3*f1;
+ f20 = heapFloat[(r6+73)];
+ f21 = heapFloat[(r7+72)];
+ f22 = heapFloat[(r7+73)];
+ f7 = f7*f6;
+ f12 = f12*f11;
+ f8 = f8*f6;
+ f13 = f13*f11;
+ f9 = f9*f6;
+ f14 = f14*f11;
+ f23 = heapFloat[(r6+74)];
+ f24 = heapFloat[(r7+74)];
+ f5 = f5+f10;
+ f10 = f19*f1;
+ f7 = f7+f12;
+ f12 = f20*f1;
+ f15 = f15*f6;
+ f16 = f16*f11;
+ f8 = f8+f13;
+ f13 = f21*f1;
+ f9 = f9+f14;
+ f14 = f22*f1;
+ f17 = f17*f6;
+ f18 = f18*f11;
+ f5 = f5+f10;
+ f7 = f7+f12;
+ f8 = f8+f13;
+ f9 = f9+f14;
+ f10 = f15+f16;
+ f12 = f23*f1;
+ f13 = f17+f18;
+ f14 = f24*f1;
+ f10 = f10+f12;
+ f12 = f13+f14;
+ f5 = f6*f5;
+ f7 = f11*f7;
+ f6 = f6*f8;
+ f8 = f11*f9;
+ f5 = f5+f7;
+ f7 = f1*f10;
+ f6 = f6+f8;
+ f1 = f1*f12;
+ f5 = f5+f7;
+ f1 = f6+f1;
+ f1 = f5+f1;
+ f5 = heapFloat[(r3+107)];
+ f1 = f4/f1;
+ f1 = f5*f1;
+ f0 = f0*f1;
+ f2 = f2*f1;
+ f1 = f3*f1;
+ f3 = f2*f2;
+ f5 = f0*f0;
+ f3 = f3+f5;
+ f5 = f1*f1;
+ f3 = f3+f5;
+ heapFloat[(g0)] = f3;
+ sqrtf(i7);
+ f3 = f_g0;
+ f4 = f4/f3;
+ f1 = f1*f4;
+ f0 = f0*f4;
+ f2 = f2*f4;
+ f4 = heapFloat[(r5+84)];
+ f5 = 0;
+if(!(f4 ==f5)) //_LBB582_33
+{
+ r6 = heap32[(r3+5)];
+ r6 = r6 >> 2;
+ f4 = f3*f5;
+ f6 = heapFloat[(r5+126)];
+ f7 = heapFloat[(r6+65)];
+ f8 = heapFloat[(r6+64)];
+ f9 = heapFloat[(r6+69)];
+ f10 = heapFloat[(r6+68)];
+ f11 = heapFloat[(r6+73)];
+ f12 = heapFloat[(r6+72)];
+ f13 = heapFloat[(r6+66)];
+ f14 = heapFloat[(r6+70)];
+ f15 = heapFloat[(r6+74)];
+ f6 = f6+f4;
+ heapFloat[(r5+126)] = f6;
+ f6 = heapFloat[(r5+127)];
+ f6 = f6+f4;
+ heapFloat[(r5+127)] = f6;
+ f6 = heapFloat[(r5+128)];
+ f4 = f6+f4;
+ heapFloat[(r5+128)] = f4;
+ f4 = f8*f2;
+ f6 = f7*f0;
+ f7 = heapFloat[(r5+134)];
+ f4 = f4+f6;
+ f6 = f13*f1;
+ f4 = f4+f6;
+ f6 = f7*f3;
+ f7 = heapFloat[(r5+136)];
+ f8 = heapFloat[(r5+135)];
+ f13 = heapFloat[(r5+130)];
+ f4 = f4*f6;
+ f6 = f10*f2;
+ f9 = f9*f0;
+ f6 = f6+f9;
+ f9 = f14*f1;
+ f4 = f13+f4;
+ heapFloat[(r5+130)] = f4;
+ f4 = f6+f9;
+ f6 = f8*f3;
+ f8 = f12*f2;
+ f9 = f11*f0;
+ f4 = f4*f6;
+ f6 = heapFloat[(r5+131)];
+ f4 = f6+f4;
+ f6 = f8+f9;
+ f8 = f15*f1;
+ heapFloat[(r5+131)] = f4;
+ f4 = f6+f8;
+ f6 = f7*f3;
+ f4 = f4*f6;
+ f6 = heapFloat[(r5+132)];
+ f4 = f6+f4;
+ heapFloat[(r5+132)] = f4;
+}
+ f4 = heapFloat[(r4+84)];
+ if(f4 ==f5) //_LBB582_35
+{
+break _14;
+}
+else{
+ f4 = -f3;
+ r5 = heap32[(r3+6)];
+ r5 = r5 >> 2;
+ f5 = -0;
+ f3 = f3*f5;
+ f5 = heapFloat[(r4+126)];
+ f6 = heapFloat[(r5+65)];
+ f7 = heapFloat[(r5+64)];
+ f8 = heapFloat[(r5+69)];
+ f9 = heapFloat[(r5+68)];
+ f10 = heapFloat[(r5+73)];
+ f11 = heapFloat[(r5+72)];
+ f12 = heapFloat[(r5+66)];
+ f13 = heapFloat[(r5+70)];
+ f14 = heapFloat[(r5+74)];
+ f5 = f5+f3;
+ heapFloat[(r4+126)] = f5;
+ f5 = heapFloat[(r4+127)];
+ f5 = f5+f3;
+ heapFloat[(r4+127)] = f5;
+ f5 = heapFloat[(r4+128)];
+ f3 = f5+f3;
+ heapFloat[(r4+128)] = f3;
+ f3 = f7*f2;
+ f5 = f6*f0;
+ f3 = f3+f5;
+ f5 = f12*f1;
+ f6 = heapFloat[(r4+134)];
+ f3 = f3+f5;
+ f5 = f6*f4;
+ f6 = heapFloat[(r4+136)];
+ f7 = heapFloat[(r4+135)];
+ f12 = heapFloat[(r4+130)];
+ f3 = f3*f5;
+ f5 = f9*f2;
+ f8 = f8*f0;
+ f5 = f5+f8;
+ f8 = f13*f1;
+ f3 = f12+f3;
+ heapFloat[(r4+130)] = f3;
+ f3 = f5+f8;
+ f5 = f7*f4;
+ f2 = f11*f2;
+ f0 = f10*f0;
+ f3 = f3*f5;
+ f5 = heapFloat[(r4+131)];
+ f3 = f5+f3;
+ f0 = f2+f0;
+ f1 = f14*f1;
+ heapFloat[(r4+131)] = f3;
+ f0 = f0+f1;
+ f1 = f6*f4;
+ f0 = f0*f1;
+ f1 = heapFloat[(r4+132)];
+ f0 = f1+f0;
+ heapFloat[(r4+132)] = f0;
+}
+}
+}
+}
+else{
+ r4 = heap32[(r3+5)];
+ r5 = sp + -112;
+ r4 = r4 >> 2;
+ r6 = r5 >> 2;
+ heap32[(fp+-28)] = heap32[(r4+1)];
+ heap32[(r6+1)] = heap32[(r4+2)];
+ heap32[(r6+2)] = heap32[(r4+3)];
+ heap32[(r6+3)] = heap32[(r4+4)];
+ heap32[(r6+4)] = heap32[(r4+5)];
+ heap32[(r6+5)] = heap32[(r4+6)];
+ heap32[(r6+6)] = heap32[(r4+7)];
+ heap32[(r6+7)] = heap32[(r4+8)];
+ heap32[(r6+8)] = heap32[(r4+9)];
+ heap32[(r6+9)] = heap32[(r4+10)];
+ heap32[(r6+10)] = heap32[(r4+11)];
+ heap32[(r6+11)] = heap32[(r4+12)];
+ heap32[(r6+12)] = heap32[(r4+13)];
+ heap32[(r6+13)] = heap32[(r4+14)];
+ heap32[(r6+14)] = heap32[(r4+15)];
+ heap32[(r6+15)] = heap32[(r4+16)];
+ r4 = heap32[(r3+6)];
+ r6 = sp + -176;
+ r4 = r4 >> 2;
+ r7 = r6 >> 2;
+ heap32[(fp+-44)] = heap32[(r4+1)];
+ heap32[(r7+1)] = heap32[(r4+2)];
+ heap32[(r7+2)] = heap32[(r4+3)];
+ heap32[(r7+3)] = heap32[(r4+4)];
+ heap32[(r7+4)] = heap32[(r4+5)];
+ heap32[(r7+5)] = heap32[(r4+6)];
+ heap32[(r7+6)] = heap32[(r4+7)];
+ heap32[(r7+7)] = heap32[(r4+8)];
+ heap32[(r7+8)] = heap32[(r4+9)];
+ heap32[(r7+9)] = heap32[(r4+10)];
+ heap32[(r7+10)] = heap32[(r4+11)];
+ heap32[(r7+11)] = heap32[(r4+12)];
+ heap32[(r7+12)] = heap32[(r4+13)];
+ heap32[(r7+13)] = heap32[(r4+14)];
+ heap32[(r7+14)] = heap32[(r4+15)];
+ r8 = r1 >> 2;
+ heap32[(r7+15)] = heap32[(r4+16)];
+ f0 = heapFloat[(r8+82)];
+ f1 = heapFloat[(r8+132)];
+ f2 = heapFloat[(r8+81)];
+ f3 = heapFloat[(r8+131)];
+ f4 = heapFloat[(r8+80)];
+ f5 = heapFloat[(r8+130)];
+ r4 = sp + -192;
+ f4 = f4+f5;
+ r7 = r4 >> 2;
+ f2 = f2+f3;
+ heapFloat[(fp+-48)] = f4;
+ f0 = f0+f1;
+ heapFloat[(r7+1)] = f2;
+ heapFloat[(r7+2)] = f0;
+ r9 = r2 >> 2;
+ heap32[(r7+3)] = 0;
+ f0 = heapFloat[(r9+82)];
+ f1 = heapFloat[(r9+132)];
+ f2 = heapFloat[(r9+81)];
+ f3 = heapFloat[(r9+131)];
+ f4 = heapFloat[(r9+80)];
+ f5 = heapFloat[(r9+130)];
+ r10 = sp + -208;
+ f4 = f4+f5;
+ f2 = f2+f3;
+ heapFloat[(fp+-52)] = f4;
+ r11 = r10 >> 2;
+ f0 = f0+f1;
+ heapFloat[(r11+1)] = f2;
+ heapFloat[(r11+2)] = f0;
+ r12 = sp + -272;
+ heap32[(r11+3)] = 0;
+ r13 = r12 >> 2;
+ heap32[(fp+-68)] = 1065353216;
+ heap32[(r13+1)] = 0;
+ heap32[(r13+2)] = 0;
+ heap32[(r13+3)] = 0;
+ heap32[(r13+4)] = 0;
+ heap32[(r13+5)] = 1065353216;
+ heap32[(r13+6)] = 0;
+ heap32[(r13+7)] = 0;
+ heap32[(r13+8)] = 0;
+ heap32[(r13+9)] = 0;
+ heap32[(r13+10)] = 1065353216;
+ heap32[(r13+11)] = 0;
+ heap32[(r13+12)] = 0;
+ heap32[(r13+13)] = 0;
+ heap32[(r13+14)] = 0;
+ heap32[(r13+15)] = 0;
+ heap32[(g0)] = r5;
+ heap32[(g0+1)] = 0;
+ heap32[(g0+2)] = 0;
+ heap32[(g0+3)] = 0;
+ heap32[(g0+4)] = r4;
+ f0 = heapFloat[(fp+-117)];
+ heapFloat[(g0+5)] = f0;
+ heap32[(g0+6)] = r12;
+ r4 = sp + -336;
+ _ZN15btTransformUtil18integrateTransformERK11btTransformRK9btVector3S5_fRS0_(i7);
+ r12 = r4 >> 2;
+ heap32[(fp+-84)] = 1065353216;
+ heap32[(r12+1)] = 0;
+ heap32[(r12+2)] = 0;
+ heap32[(r12+3)] = 0;
+ heap32[(r12+4)] = 0;
+ heap32[(r12+5)] = 1065353216;
+ heap32[(r12+6)] = 0;
+ heap32[(r12+7)] = 0;
+ heap32[(r12+8)] = 0;
+ heap32[(r12+9)] = 0;
+ heap32[(r12+10)] = 1065353216;
+ heap32[(r12+11)] = 0;
+ heap32[(r12+12)] = 0;
+ heap32[(r12+13)] = 0;
+ heap32[(r12+14)] = 0;
+ heap32[(r12+15)] = 0;
+ heap32[(g0)] = r6;
+ heap32[(g0+1)] = 0;
+ heap32[(g0+2)] = 0;
+ heap32[(g0+3)] = 0;
+ heap32[(g0+4)] = r10;
+ heapFloat[(g0+5)] = f0;
+ heap32[(g0+6)] = r4;
+ _ZN15btTransformUtil18integrateTransformERK11btTransformRK9btVector3S5_fRS0_(i7);
+ f1 = heapFloat[(r3+136)];
+ f2 = heapFloat[(r3+137)];
+ f3 = heapFloat[(r3+138)];
+ f4 = f1*f1;
+ f5 = f2*f2;
+ f6 = heapFloat[(r3+139)];
+ f4 = f4+f5;
+ f5 = f3*f3;
+ f4 = f4+f5;
+ f5 = f6*f6;
+ f7 = 2;
+ f4 = f4+f5;
+ f4 = f7/f4;
+ f5 = f3*f4;
+ f7 = f2*f4;
+ f4 = f1*f4;
+ f3 = f3*f5;
+ f8 = f1*f4;
+ f9 = f2*f7;
+ f0 = 1;
+ heapFloat[(fp+-118)] = f0;
+ f10 = f9+f3;
+ f3 = f8+f3;
+ f11 = f1*f7;
+ f12 = f6*f5;
+ f10 = f0-f10;
+ f0 = heapFloat[(r3+92)];
+ heapFloat[(fp+-131)] = f0;
+ f13 = f11-f12;
+ f0 = heapFloat[(r3+88)];
+ heapFloat[(fp+-120)] = f0;
+ f11 = f11+f12;
+ f12 = heapFloat[(r3+93)];
+ heapFloat[(fp+-132)] = f12;
+ f0 = heapFloat[(fp+-118)];
+ f3 = f0-f3;
+ f0 = heapFloat[(r3+89)];
+ heapFloat[(fp+-121)] = f0;
+ f1 = f1*f5;
+ f7 = f6*f7;
+ f2 = f2*f5;
+ f4 = f6*f4;
+ f5 = f1+f7;
+ f6 = heapFloat[(r3+96)];
+ heapFloat[(fp+-129)] = f6;
+ f12 = f2-f4;
+ f14 = heapFloat[(r3+97)];
+ heapFloat[(fp+-136)] = f14;
+ f8 = f8+f9;
+ f0 = heapFloat[(fp+-120)];
+ f9 = f10*f0;
+ f0 = heapFloat[(fp+-121)];
+ f15 = f11*f0;
+ f0 = heapFloat[(fp+-120)];
+ f16 = f13*f0;
+ f0 = heapFloat[(fp+-121)];
+ f17 = f3*f0;
+ f0 = heapFloat[(fp+-131)];
+ f18 = f10*f0;
+ f19 = heapFloat[(fp+-132)];
+ f20 = f11*f19;
+ f21 = f13*f0;
+ f22 = f3*f19;
+ f1 = f1-f7;
+ f7 = heapFloat[(r3+94)];
+ heapFloat[(fp+-137)] = f7;
+ f2 = f2+f4;
+ f0 = heapFloat[(r3+90)];
+ heapFloat[(fp+-133)] = f0;
+ f0 = heapFloat[(fp+-118)];
+ f4 = f0-f8;
+ f6 = heapFloat[(r3+98)];
+ heapFloat[(fp+-130)] = f6;
+ f7 = f9+f15;
+ f0 = heapFloat[(fp+-133)];
+ f8 = f1*f0;
+ f9 = f16+f17;
+ f14 = f2*f0;
+ f0 = heapFloat[(fp+-120)];
+ f15 = f5*f0;
+ f0 = heapFloat[(fp+-121)];
+ f16 = f12*f0;
+ f17 = f18+f20;
+ f18 = heapFloat[(fp+-137)];
+ f19 = f1*f18;
+ f20 = f21+f22;
+ f21 = f2*f18;
+ f0 = heapFloat[(fp+-131)];
+ f22 = f5*f0;
+ f23 = heapFloat[(fp+-132)];
+ f24 = f12*f23;
+ f6 = heapFloat[(fp+-129)];
+ f10 = f10*f6;
+ f25 = heapFloat[(fp+-136)];
+ f11 = f11*f25;
+ f13 = f13*f6;
+ f3 = f3*f25;
+ f0 = f7+f8;
+ heapFloat[(fp+-124)] = f0;
+ f6 = heapFloat[(r3+72)];
+ f7 = f17+f19;
+ heapFloat[(fp+-134)] = f7;
+ f0 = f9+f14;
+ heapFloat[(fp+-125)] = f0;
+ f7 = heapFloat[(r3+73)];
+ f8 = f20+f21;
+ heapFloat[(fp+-139)] = f8;
+ f9 = f15+f16;
+ f0 = heapFloat[(fp+-133)];
+ f14 = f4*f0;
+ f15 = f22+f24;
+ f16 = f4*f18;
+ f10 = f10+f11;
+ f11 = heapFloat[(fp+-130)];
+ f1 = f1*f11;
+ f3 = f13+f3;
+ f2 = f2*f11;
+ f13 = heapFloat[(fp+-129)];
+ f5 = f5*f13;
+ f12 = f12*f25;
+ f17 = heapFloat[(r3+76)];
+ f1 = f10+f1;
+ heapFloat[(fp+-138)] = f1;
+ f10 = heapFloat[(r3+77)];
+ f2 = f3+f2;
+ heapFloat[(fp+-123)] = f2;
+ f0 = heapFloat[(fp+-124)];
+ f3 = f6*f0;
+ f0 = heapFloat[(fp+-125)];
+ f19 = f7*f0;
+ f0 = f9+f14;
+ heapFloat[(fp+-126)] = f0;
+ f1 = heapFloat[(r3+74)];
+ f0 = f15+f16;
+ heapFloat[(fp+-127)] = f0;
+ f2 = heapFloat[(fp+-134)];
+ f8 = f6*f2;
+ f9 = heapFloat[(fp+-139)];
+ f11 = f7*f9;
+ f5 = f5+f12;
+ f12 = heapFloat[(fp+-130)];
+ f4 = f4*f12;
+ f13 = heapFloat[(r3+80)];
+ f14 = heapFloat[(r3+81)];
+ f15 = heapFloat[(r3+78)];
+ f4 = f5+f4;
+ heapFloat[(fp+-122)] = f4;
+ f0 = heapFloat[(fp+-124)];
+ f5 = f17*f0;
+ f0 = heapFloat[(fp+-125)];
+ f16 = f10*f0;
+ f18 = f17*f2;
+ f20 = f10*f9;
+ f3 = f3+f19;
+ f0 = heapFloat[(fp+-126)];
+ f19 = f1*f0;
+ f8 = f8+f11;
+ f0 = heapFloat[(fp+-127)];
+ f11 = f1*f0;
+ f21 = heapFloat[(fp+-138)];
+ f22 = f6*f21;
+ f2 = heapFloat[(fp+-123)];
+ f23 = f7*f2;
+ f24 = heapFloat[(r3+82)];
+ f0 = heapFloat[(fp+-124)];
+ f25 = f13*f0;
+ f0 = heapFloat[(fp+-125)];
+ f26 = f14*f0;
+ f2 = heapFloat[(fp+-134)];
+ f27 = f13*f2;
+ f28 = f14*f9;
+ f5 = f5+f16;
+ f0 = heapFloat[(fp+-126)];
+ f16 = f15*f0;
+ f18 = f18+f20;
+ f0 = heapFloat[(fp+-127)];
+ f20 = f15*f0;
+ f29 = f17*f21;
+ f2 = heapFloat[(fp+-123)];
+ f30 = f10*f2;
+ f3 = f3+f19;
+ f19 = heapFloat[(fp+-84)];
+ heapFloat[(fp+-140)] = f19;
+ f0 = f8+f11;
+ heapFloat[(fp+-135)] = f0;
+ f2 = heapFloat[(r12+1)];
+ heapFloat[(fp+-128)] = f2;
+ f4 = f22+f23;
+ f8 = heapFloat[(fp+-122)];
+ f9 = f1*f8;
+ f5 = f5+f16;
+ f0 = f18+f20;
+ heapFloat[(fp+-119)] = f0;
+ f2 = f25+f26;
+ f0 = heapFloat[(fp+-126)];
+ f8 = f24*f0;
+ f11 = f27+f28;
+ f0 = heapFloat[(fp+-127)];
+ f12 = f24*f0;
+ f16 = f13*f21;
+ f18 = heapFloat[(fp+-123)];
+ f19 = f14*f18;
+ f20 = f29+f30;
+ f22 = heapFloat[(fp+-122)];
+ f23 = f15*f22;
+ f25 = heapFloat[(fp+-140)];
+ f26 = f3*f25;
+ f0 = heapFloat[(fp+-135)];
+ f27 = heapFloat[(fp+-128)];
+ f28 = f0*f27;
+ f4 = f4+f9;
+ f9 = heapFloat[(r12+2)];
+ f29 = heapFloat[(r3+86)];
+ f30 = heapFloat[(r3+85)];
+ f0 = heapFloat[(r12+8)];
+ heapFloat[(fp+-141)] = f0;
+ f2 = f2+f8;
+ f8 = heapFloat[(r12+4)];
+ f0 = heapFloat[(r12+9)];
+ f11 = f11+f12;
+ f12 = heapFloat[(r12+5)];
+ f20 = f20+f23;
+ f18 = heapFloat[(r12+10)];
+ heapFloat[(fp+-148)] = f18;
+ f21 = heapFloat[(r12+6)];
+ f22 = heapFloat[(r3+84)];
+ f16 = f16+f19;
+ f19 = heapFloat[(fp+-122)];
+ f23 = f24*f19;
+ f27 = f5*f25;
+ f19 = heapFloat[(fp+-119)];
+ f18 = heapFloat[(fp+-128)];
+ f18 = f19*f18;
+ f26 = f26+f28;
+ f28 = f4*f9;
+ f19 = heapFloat[(r3+102)];
+ heapFloat[(fp+-142)] = f19;
+ f19 = heapFloat[(r3+101)];
+ heapFloat[(fp+-143)] = f19;
+ f19 = heapFloat[(r3+100)];
+ heapFloat[(fp+-145)] = f19;
+ f19 = heapFloat[(r12+14)];
+ heapFloat[(fp+-144)] = f19;
+ f19 = heapFloat[(r12+13)];
+ heapFloat[(fp+-146)] = f19;
+ f19 = heapFloat[(r12+12)];
+ heapFloat[(fp+-147)] = f19;
+ f16 = f16+f23;
+ r4 = sp + -400;
+ f23 = f2*f25;
+ f19 = heapFloat[(fp+-128)];
+ f19 = f11*f19;
+ f18 = f27+f18;
+ f27 = f20*f9;
+ f26 = f26+f28;
+ f22 = -f22;
+ r10 = r4 >> 2;
+ f19 = f23+f19;
+ f23 = f16*f9;
+ f18 = f18+f27;
+ heapFloat[(fp+-100)] = f26;
+ f6 = f6*f22;
+ f17 = f17*f30;
+ f7 = f7*f22;
+ f10 = f10*f30;
+ f26 = f3*f8;
+ f27 = heapFloat[(fp+-135)];
+ f28 = f27*f12;
+ f19 = f19+f23;
+ heapFloat[(r10+1)] = f18;
+ f18 = 0;
+ heapFloat[(r10+2)] = f19;
+ f6 = f6-f17;
+ f13 = f13*f29;
+ f7 = f7-f10;
+ f10 = f14*f29;
+ f1 = f1*f22;
+ f14 = f15*f30;
+ f15 = f5*f8;
+ f19 = heapFloat[(fp+-119)];
+ f17 = f19*f12;
+ f22 = f26+f28;
+ f23 = f4*f21;
+ f6 = f6-f13;
+ f7 = f7-f10;
+ f10 = heapFloat[(fp+-120)];
+ f10 = f10*f18;
+ f13 = heapFloat[(fp+-121)];
+ f13 = f13*f18;
+ f26 = heapFloat[(fp+-131)];
+ f26 = f26*f18;
+ f28 = heapFloat[(fp+-132)];
+ f28 = f28*f18;
+ f1 = f1-f14;
+ f14 = f24*f29;
+ f24 = f2*f8;
+ f29 = f11*f12;
+ f15 = f15+f17;
+ f17 = f20*f21;
+ f22 = f22+f23;
+ heap32[(r10+3)] = 0;
+ f1 = f1-f14;
+ f14 = heapFloat[(fp+-124)];
+ f14 = f14*f6;
+ f23 = heapFloat[(fp+-125)];
+ f23 = f23*f7;
+ f10 = f10+f13;
+ f13 = heapFloat[(fp+-133)];
+ f13 = f13*f18;
+ f30 = heapFloat[(fp+-134)];
+ f30 = f30*f6;
+ f19 = heapFloat[(fp+-139)];
+ f19 = f19*f7;
+ f26 = f26+f28;
+ f28 = heapFloat[(fp+-137)];
+ f28 = f28*f18;
+ f25 = heapFloat[(fp+-129)];
+ f25 = f25*f18;
+ f27 = heapFloat[(fp+-136)];
+ f27 = f27*f18;
+ f24 = f24+f29;
+ f29 = f16*f21;
+ f15 = f15+f17;
+ heapFloat[(r10+4)] = f22;
+ f10 = f10+f13;
+ f13 = f26+f28;
+ f14 = f14+f23;
+ f17 = heapFloat[(fp+-126)];
+ f17 = f17*f1;
+ f19 = f30+f19;
+ f22 = heapFloat[(fp+-127)];
+ f22 = f22*f1;
+ f23 = heapFloat[(fp+-138)];
+ f6 = f23*f6;
+ f23 = heapFloat[(fp+-123)];
+ f7 = f23*f7;
+ f23 = f25+f27;
+ f25 = heapFloat[(fp+-130)];
+ f25 = f25*f18;
+ f26 = heapFloat[(fp+-141)];
+ f27 = f3*f26;
+ f28 = heapFloat[(fp+-135)];
+ f30 = f28*f0;
+ f24 = f24+f29;
+ heapFloat[(r10+5)] = f15;
+ f15 = f23+f25;
+ heapFloat[(r10+6)] = f24;
+ f14 = f14+f17;
+ f17 = heapFloat[(fp+-145)];
+ f10 = f10+f17;
+ f17 = f19+f22;
+ f19 = heapFloat[(fp+-143)];
+ f13 = f13+f19;
+ f6 = f6+f7;
+ f19 = heapFloat[(fp+-122)];
+ f1 = f19*f1;
+ f7 = f5*f26;
+ f19 = heapFloat[(fp+-119)];
+ f22 = f19*f0;
+ f23 = f27+f30;
+ f24 = heapFloat[(fp+-148)];
+ f25 = f4*f24;
+ f13 = f17+f13;
+ f10 = f14+f10;
+ f1 = f6+f1;
+ f19 = heapFloat[(fp+-142)];
+ f6 = f15+f19;
+ f14 = f2*f26;
+ f15 = f11*f0;
+ f7 = f7+f22;
+ f17 = f20*f24;
+ f19 = f23+f25;
+ heap32[(r10+7)] = 0;
+ f1 = f1+f6;
+ f25 = heapFloat[(fp+-140)];
+ f6 = f25*f10;
+ f22 = heapFloat[(fp+-128)];
+ f22 = f22*f13;
+ f14 = f14+f15;
+ f15 = f16*f24;
+ f7 = f7+f17;
+ heapFloat[(r10+8)] = f19;
+ f8 = f8*f10;
+ f12 = f12*f13;
+ f6 = f6+f22;
+ f9 = f9*f1;
+ f14 = f14+f15;
+ heapFloat[(r10+9)] = f7;
+ f6 = f6+f9;
+ heapFloat[(r10+10)] = f14;
+ f7 = f26*f10;
+ f0 = f0*f13;
+ f8 = f8+f12;
+ f9 = f21*f1;
+ f8 = f8+f9;
+ f0 = f7+f0;
+ f7 = f24*f1;
+ f19 = heapFloat[(fp+-147)];
+ f6 = f6+f19;
+ heap32[(r10+11)] = 0;
+ f0 = f0+f7;
+ f19 = heapFloat[(fp+-146)];
+ f7 = f8+f19;
+ heapFloat[(r10+12)] = f6;
+ f19 = heapFloat[(fp+-144)];
+ f0 = f0+f19;
+ heapFloat[(r10+13)] = f7;
+ heapFloat[(r10+14)] = f0;
+ heap32[(r10+15)] = 0;
+ f0 = heapFloat[(fp+-68)];
+ f6 = heapFloat[(r13+1)];
+ f7 = heapFloat[(r13+2)];
+ f8 = f3*f0;
+ f9 = f5*f6;
+ f12 = heapFloat[(r13+8)];
+ f14 = heapFloat[(r13+9)];
+ f15 = heapFloat[(r13+10)];
+ f17 = heapFloat[(r13+4)];
+ f19 = heapFloat[(r13+5)];
+ f21 = heapFloat[(r13+6)];
+ f22 = f28*f0;
+ f23 = heapFloat[(fp+-119)];
+ f24 = f23*f6;
+ f8 = f8+f9;
+ f9 = f2*f7;
+ f25 = heapFloat[(r13+14)];
+ f26 = heapFloat[(r13+13)];
+ f27 = heapFloat[(r13+12)];
+ r10 = sp + -464;
+ f29 = f4*f0;
+ f30 = f20*f6;
+ f22 = f22+f24;
+ f24 = f11*f7;
+ f8 = f8+f9;
+ r12 = r10 >> 2;
+ f9 = f29+f30;
+ f29 = f16*f7;
+ f22 = f22+f24;
+ heapFloat[(fp+-116)] = f8;
+ f8 = f3*f17;
+ f24 = f5*f19;
+ f9 = f9+f29;
+ heapFloat[(r12+1)] = f22;
+ heapFloat[(r12+2)] = f9;
+ f9 = f28*f17;
+ f22 = f23*f19;
+ f8 = f8+f24;
+ f24 = f2*f21;
+ f29 = f4*f17;
+ f30 = f20*f19;
+ f9 = f9+f22;
+ f22 = f11*f21;
+ f8 = f8+f24;
+ heap32[(r12+3)] = 0;
+ f10 = -f10;
+ f24 = f29+f30;
+ f29 = f16*f21;
+ f9 = f9+f22;
+ heapFloat[(r12+4)] = f8;
+ f8 = f3*f10;
+ f22 = f28*f13;
+ f30 = f5*f10;
+ f23 = f23*f13;
+ f3 = f3*f12;
+ f5 = f5*f14;
+ f24 = f24+f29;
+ heapFloat[(r12+5)] = f9;
+ heapFloat[(r12+6)] = f24;
+ f8 = f8-f22;
+ f9 = f4*f1;
+ f22 = f30-f23;
+ f23 = f20*f1;
+ f10 = f2*f10;
+ f13 = f11*f13;
+ f24 = f28*f12;
+ f28 = heapFloat[(fp+-119)];
+ f28 = f28*f14;
+ f3 = f3+f5;
+ f2 = f2*f15;
+ f5 = f8-f9;
+ f8 = f22-f23;
+ f9 = f10-f13;
+ f1 = f16*f1;
+ f4 = f4*f12;
+ f10 = f20*f14;
+ f13 = f24+f28;
+ f11 = f11*f15;
+ f2 = f3+f2;
+ heap32[(r12+7)] = 0;
+ f1 = f9-f1;
+ f0 = f0*f5;
+ f3 = f6*f8;
+ f4 = f4+f10;
+ f6 = f16*f15;
+ f9 = f13+f11;
+ heapFloat[(r12+8)] = f2;
+ f2 = f17*f5;
+ f10 = f19*f8;
+ f0 = f0+f3;
+ f3 = f7*f1;
+ f4 = f4+f6;
+ heapFloat[(r12+9)] = f9;
+ f0 = f0+f3;
+ heapFloat[(r12+10)] = f4;
+ f3 = f12*f5;
+ f4 = f14*f8;
+ f2 = f2+f10;
+ f5 = f21*f1;
+ f2 = f2+f5;
+ f3 = f3+f4;
+ f1 = f15*f1;
+ f0 = f0+f27;
+ heap32[(r12+11)] = 0;
+ f1 = f3+f1;
+ f2 = f2+f26;
+ heapFloat[(r12+12)] = f0;
+ f0 = f1+f25;
+ heapFloat[(r12+13)] = f2;
+ heapFloat[(r12+14)] = f0;
+ heap32[(r12+15)] = 0;
+ r12 = sp + -16;
+ r13 = sp + -20;
+ heap32[(g0)] = r5;
+ heap32[(g0+1)] = r4;
+ heap32[(g0+2)] = r12;
+ heap32[(g0+3)] = r13;
+ _ZN15btTransformUtil22calculateDiffAxisAngleERK11btTransformS2_R9btVector3Rf(i7);
+ r4 = r12 >> 2;
+ f0 = heapFloat[(r4+2)];
+ f1 = heapFloat[(fp+-5)];
+ f2 = heapFloat[(r4+1)];
+ f3 = heapFloat[(fp+-4)];
+ r4 = sp + -40;
+ r5 = sp + -44;
+ heap32[(g0)] = r6;
+ heap32[(g0+1)] = r10;
+ heap32[(g0+2)] = r4;
+ heap32[(g0+3)] = r5;
+ _ZN15btTransformUtil22calculateDiffAxisAngleERK11btTransformS2_R9btVector3Rf(i7);
+ f2 = f2*f1;
+ f5 = heapFloat[(fp+-118)];
+ f4 = heapFloat[(fp+-117)];
+ f4 = f5/f4;
+ f3 = f3*f1;
+ r4 = r4 >> 2;
+ f0 = f0*f1;
+ f1 = f2*f4;
+ f2 = heapFloat[(r7+1)];
+ f3 = f3*f4;
+ f5 = heapFloat[(fp+-48)];
+ f1 = f1-f2;
+ f2 = f3-f5;
+ f0 = f0*f4;
+ f3 = heapFloat[(r7+2)];
+ f5 = heapFloat[(r4+2)];
+ f6 = heapFloat[(fp+-11)];
+ f7 = heapFloat[(r4+1)];
+ f8 = heapFloat[(fp+-10)];
+ f0 = f0-f3;
+ f3 = f5*f6;
+ f5 = f7*f6;
+ f6 = f8*f6;
+ f7 = f2*f2;
+ f8 = f1*f1;
+ f7 = f7+f8;
+ f8 = f0*f0;
+ f3 = f3*f4;
+ f9 = heapFloat[(r11+2)];
+ f5 = f5*f4;
+ f10 = heapFloat[(r11+1)];
+ f4 = f6*f4;
+ f6 = heapFloat[(fp+-52)];
+ f7 = f7+f8;
+ f3 = f3-f9;
+ f5 = f5-f10;
+ f4 = f4-f6;
+ f6 = 1.1920928955078125e-007;
+ if(f7 >f6) //_LBB582_11
+{
+ heapFloat[(g0)] = f7;
+ sqrtf(i7);
+ r4 = heap32[(r3+5)];
+ r4 = r4 >> 2;
+ f7 = heapFloat[(fp+-118)];
+ f18 = f7/f_g0;
+ f7 = f2*f18;
+ f8 = heapFloat[(r4+64)];
+ f9 = heapFloat[(r4+65)];
+ f10 = f1*f18;
+ f11 = heapFloat[(r4+68)];
+ f12 = heapFloat[(r4+69)];
+ f13 = f0*f18;
+ f18 = heapFloat[(r4+72)];
+ f14 = heapFloat[(r4+73)];
+ f15 = heapFloat[(r4+66)];
+ f16 = heapFloat[(r4+70)];
+ f8 = f8*f7;
+ f11 = f11*f10;
+ f9 = f9*f7;
+ f12 = f12*f10;
+ f17 = heapFloat[(r4+74)];
+ f8 = f8+f11;
+ f18 = f18*f13;
+ f9 = f9+f12;
+ f11 = f14*f13;
+ f12 = f15*f7;
+ f14 = f16*f10;
+ f18 = f8+f18;
+ f8 = f9+f11;
+ f9 = f12+f14;
+ f11 = f17*f13;
+ f9 = f9+f11;
+ f18 = f7*f18;
+ f8 = f10*f8;
+ f18 = f18+f8;
+ f8 = f13*f9;
+ f18 = f18+f8;
+}
+ f8 = f4*f4;
+ f9 = f5*f5;
+ f8 = f8+f9;
+ f9 = f3*f3;
+ f8 = f8+f9;
+ if(f8 >f6) //_LBB582_14
+{
+ heapFloat[(g0)] = f8;
+ sqrtf(i7);
+ r4 = heap32[(r3+6)];
+ r4 = r4 >> 2;
+ f9 = heapFloat[(fp+-118)];
+ f8 = f9/f_g0;
+ f9 = f4*f8;
+ f11 = heapFloat[(r4+64)];
+ f12 = heapFloat[(r4+65)];
+ f14 = f5*f8;
+ f15 = heapFloat[(r4+68)];
+ f16 = heapFloat[(r4+69)];
+ f17 = f3*f8;
+ f8 = heapFloat[(r4+72)];
+ f19 = heapFloat[(r4+73)];
+ f20 = heapFloat[(r4+66)];
+ f21 = heapFloat[(r4+70)];
+ f11 = f11*f9;
+ f15 = f15*f14;
+ f12 = f12*f9;
+ f16 = f16*f14;
+ f22 = heapFloat[(r4+74)];
+ f11 = f11+f15;
+ f8 = f8*f17;
+ f12 = f12+f16;
+ f15 = f19*f17;
+ f16 = f20*f9;
+ f19 = f21*f14;
+ f8 = f11+f8;
+ f11 = f12+f15;
+ f12 = f16+f19;
+ f15 = f22*f17;
+ f12 = f12+f15;
+ f8 = f9*f8;
+ f11 = f14*f11;
+ f8 = f8+f11;
+ f11 = f17*f12;
+ f8 = f8+f11;
+}
+else{
+ f8 = 0;
+}
+ f10 = f10*f18;
+ f11 = f14*f8;
+ f7 = f7*f18;
+ f9 = f9*f8;
+ f10 = f10+f11;
+ f7 = f7+f9;
+ f9 = f13*f18;
+ f8 = f17*f8;
+ f8 = f9+f8;
+ f9 = f7*f7;
+ f11 = f10*f10;
+ f9 = f9+f11;
+ f11 = f8*f8;
+ f9 = f9+f11;
+if(!(f9 <=f6)) //_LBB582_35
+{
+ heapFloat[(g0)] = f9;
+ sqrtf(i7);
+ r4 = heap32[(r3+5)];
+ r5 = heap32[(r3+6)];
+ r4 = r4 >> 2;
+ r5 = r5 >> 2;
+ f9 = heapFloat[(fp+-118)];
+ f6 = f9/f_g0;
+ f11 = heapFloat[(r4+64)];
+ f7 = f7*f6;
+ f12 = heapFloat[(r4+65)];
+ f13 = heapFloat[(r5+64)];
+ f14 = heapFloat[(r5+65)];
+ f15 = heapFloat[(r4+68)];
+ f10 = f10*f6;
+ f16 = heapFloat[(r4+69)];
+ f17 = heapFloat[(r5+68)];
+ f18 = heapFloat[(r5+69)];
+ f19 = heapFloat[(r4+66)];
+ f20 = heapFloat[(r4+70)];
+ f21 = heapFloat[(r5+66)];
+ f22 = heapFloat[(r5+70)];
+ f11 = f11*f7;
+ f15 = f15*f10;
+ f23 = heapFloat[(r4+72)];
+ f6 = f8*f6;
+ f8 = heapFloat[(r4+73)];
+ f24 = heapFloat[(r5+72)];
+ f25 = heapFloat[(r5+73)];
+ f12 = f12*f7;
+ f16 = f16*f10;
+ f13 = f13*f7;
+ f17 = f17*f10;
+ f14 = f14*f7;
+ f18 = f18*f10;
+ f26 = heapFloat[(r4+74)];
+ f27 = heapFloat[(r5+74)];
+ f11 = f11+f15;
+ f15 = f23*f6;
+ f12 = f12+f16;
+ f8 = f8*f6;
+ f16 = f19*f7;
+ f19 = f20*f10;
+ f13 = f13+f17;
+ f17 = f24*f6;
+ f14 = f14+f18;
+ f18 = f25*f6;
+ f20 = f21*f7;
+ f21 = f22*f10;
+ f11 = f11+f15;
+ f8 = f12+f8;
+ f12 = f13+f17;
+ f13 = f14+f18;
+ f14 = f16+f19;
+ f15 = f26*f6;
+ f16 = f20+f21;
+ f17 = f27*f6;
+ f14 = f14+f15;
+ f15 = f16+f17;
+ f11 = f7*f11;
+ f8 = f10*f8;
+ f7 = f7*f12;
+ f10 = f10*f13;
+ f8 = f11+f8;
+ f11 = f6*f14;
+ f7 = f7+f10;
+ f6 = f6*f15;
+ f8 = f8+f11;
+ f6 = f7+f6;
+ f7 = f8+f6;
+ f7 = f7*f7;
+ f0 = f0*f8;
+ f3 = f3*f6;
+ f1 = f1*f8;
+ f5 = f5*f6;
+ f2 = f2*f8;
+ f4 = f4*f6;
+ f0 = f0-f3;
+ f3 = f9/f7;
+ f1 = f1-f5;
+ f2 = f2-f4;
+ f4 = heapFloat[(r3+140)];
+ f0 = f0*f3;
+ f1 = f1*f3;
+ f2 = f2*f3;
+ f3 = 0;
+ if(f4 >=f3) //_LBB582_18
+{
+ r4 = heapU8[r0+541];
+ if(r4 !=0) //_LBB582_20
+{
+ f4 = f4/f8;
+}
+ f5 = heapFloat[(r3+141)];
+ f6 = heapFloat[(r3+142)];
+ f5 = f5+f2;
+ f6 = f6+f1;
+ f7 = heapFloat[(r3+143)];
+ f7 = f7+f0;
+ f8 = f5*f5;
+ f9 = f6*f6;
+ f8 = f8+f9;
+ f9 = f7*f7;
+ f8 = f8+f9;
+ heapFloat[(g0)] = f8;
+ sqrtf(i7);
+ f9 = f_g0;
+ if(f9 >f4) //_LBB582_23
+{
+ heapFloat[(g0)] = f8;
+ sqrtf(i7);
+ f1 = heapFloat[(fp+-118)];
+ f0 = f1/f_g0;
+ f1 = f7*f0;
+ f2 = f6*f0;
+ f0 = f5*f0;
+ f7 = heapFloat[(r3+143)];
+ f1 = f1*f4;
+ f6 = heapFloat[(r3+142)];
+ f2 = f2*f4;
+ f5 = heapFloat[(r3+141)];
+ f4 = f0*f4;
+ f0 = f1-f7;
+ f1 = f2-f6;
+ f2 = f4-f5;
+}
+else{
+ f5 = heapFloat[(r3+141)];
+ f6 = heapFloat[(r3+142)];
+ f7 = heapFloat[(r3+143)];
+}
+ f4 = f5+f2;
+ f5 = f6+f1;
+ heapFloat[(r3+141)] = f4;
+ f4 = f7+f0;
+ heapFloat[(r3+142)] = f5;
+ heapFloat[(r3+143)] = f4;
+}
+ f4 = f2*f2;
+ f5 = f1*f1;
+ f4 = f4+f5;
+ f5 = f0*f0;
+ f4 = f4+f5;
+ heapFloat[(g0)] = f4;
+ sqrtf(i7);
+ f4 = f_g0;
+ f5 = heapFloat[(fp+-118)];
+ f5 = f5/f4;
+ f0 = f0*f5;
+ f1 = f1*f5;
+ f2 = f2*f5;
+ f5 = heapFloat[(r8+84)];
+if(!(f5 ==f3)) //_LBB582_27
+{
+ r4 = heap32[(r3+5)];
+ r4 = r4 >> 2;
+ f5 = f4*f3;
+ f6 = heapFloat[(r8+126)];
+ f7 = heapFloat[(r4+65)];
+ f8 = heapFloat[(r4+64)];
+ f9 = heapFloat[(r4+69)];
+ f10 = heapFloat[(r4+68)];
+ f11 = heapFloat[(r4+73)];
+ f12 = heapFloat[(r4+72)];
+ f13 = heapFloat[(r4+66)];
+ f14 = heapFloat[(r4+70)];
+ f15 = heapFloat[(r4+74)];
+ f6 = f6+f5;
+ heapFloat[(r8+126)] = f6;
+ f6 = heapFloat[(r8+127)];
+ f6 = f6+f5;
+ heapFloat[(r8+127)] = f6;
+ f6 = heapFloat[(r8+128)];
+ f5 = f6+f5;
+ heapFloat[(r8+128)] = f5;
+ f5 = f8*f2;
+ f6 = f7*f1;
+ f7 = heapFloat[(r8+134)];
+ f5 = f5+f6;
+ f6 = f13*f0;
+ f5 = f5+f6;
+ f6 = f7*f4;
+ f7 = heapFloat[(r8+136)];
+ f8 = heapFloat[(r8+135)];
+ f13 = heapFloat[(r8+130)];
+ f5 = f5*f6;
+ f6 = f10*f2;
+ f9 = f9*f1;
+ f6 = f6+f9;
+ f9 = f14*f0;
+ f5 = f13+f5;
+ heapFloat[(r8+130)] = f5;
+ f5 = f6+f9;
+ f6 = f8*f4;
+ f8 = f12*f2;
+ f9 = f11*f1;
+ f5 = f5*f6;
+ f6 = heapFloat[(r8+131)];
+ f5 = f6+f5;
+ f6 = f8+f9;
+ f8 = f15*f0;
+ heapFloat[(r8+131)] = f5;
+ f5 = f6+f8;
+ f6 = f7*f4;
+ f5 = f5*f6;
+ f6 = heapFloat[(r8+132)];
+ f5 = f6+f5;
+ heapFloat[(r8+132)] = f5;
+}
+ f5 = heapFloat[(r9+84)];
+if(!(f5 ==f3)) //_LBB582_35
+{
+ f3 = -f4;
+ r4 = heap32[(r3+6)];
+ r4 = r4 >> 2;
+ f5 = -0;
+ f4 = f4*f5;
+ f5 = heapFloat[(r9+126)];
+ f6 = heapFloat[(r4+65)];
+ f7 = heapFloat[(r4+64)];
+ f8 = heapFloat[(r4+69)];
+ f9 = heapFloat[(r4+68)];
+ f10 = heapFloat[(r4+73)];
+ f11 = heapFloat[(r4+72)];
+ f12 = heapFloat[(r4+66)];
+ f13 = heapFloat[(r4+70)];
+ f14 = heapFloat[(r4+74)];
+ f5 = f5+f4;
+ heapFloat[(r9+126)] = f5;
+ f5 = heapFloat[(r9+127)];
+ f5 = f5+f4;
+ heapFloat[(r9+127)] = f5;
+ f5 = heapFloat[(r9+128)];
+ f4 = f5+f4;
+ heapFloat[(r9+128)] = f4;
+ f4 = f7*f2;
+ f5 = f6*f1;
+ f4 = f4+f5;
+ f5 = f12*f0;
+ f6 = heapFloat[(r9+134)];
+ f4 = f4+f5;
+ f5 = f6*f3;
+ f6 = heapFloat[(r9+136)];
+ f7 = heapFloat[(r9+135)];
+ f12 = heapFloat[(r9+130)];
+ f4 = f4*f5;
+ f5 = f9*f2;
+ f8 = f8*f1;
+ f5 = f5+f8;
+ f8 = f13*f0;
+ f4 = f12+f4;
+ heapFloat[(r9+130)] = f4;
+ f4 = f5+f8;
+ f5 = f7*f3;
+ f2 = f11*f2;
+ f1 = f10*f1;
+ f4 = f4*f5;
+ f5 = heapFloat[(r9+131)];
+ f4 = f5+f4;
+ f1 = f2+f1;
+ f0 = f14*f0;
+ heapFloat[(r9+131)] = f4;
+ f0 = f1+f0;
+ f1 = f6*f3;
+ f0 = f0*f1;
+ f1 = heapFloat[(r9+132)];
+ f0 = f1+f0;
+ heapFloat[(r9+132)] = f0;
+}
+}
+}
+} while(0);
+ r1 = r1 >> 2;
+ r2 = r2 >> 2;
+ f0 = heapFloat[(r1+82)];
+ f1 = heapFloat[(r1+132)];
+ f2 = heapFloat[(r1+81)];
+ f3 = heapFloat[(r1+131)];
+ f4 = heapFloat[(r1+80)];
+ f5 = heapFloat[(r1+130)];
+ f6 = heapFloat[(r2+82)];
+ f7 = heapFloat[(r2+132)];
+ f8 = heapFloat[(r2+81)];
+ f9 = heapFloat[(r2+131)];
+ f10 = heapFloat[(r2+80)];
+ f11 = heapFloat[(r2+130)];
+ f0 = f0+f1;
+ f1 = f2+f3;
+ f2 = f4+f5;
+ f3 = f6+f7;
+ f4 = f8+f9;
+ f5 = f10+f11;
+ r4 = heapU8[r0+514];
+if(!(r4 ==0)) //_LBB582_43
+{
+ f6 = heapFloat[(r3+129)];
+ f7 = heapFloat[(r3+123)];
+ f8 = heapFloat[(r3+112)];
+ f9 = f5-f2;
+ f10 = heapFloat[(r3+113)];
+ f11 = f4-f1;
+ f12 = heapFloat[(r3+114)];
+ f13 = f3-f0;
+ f9 = f9*f8;
+ f11 = f11*f10;
+ f7 = f6*f7;
+ f14 = heapFloat[(r3+105)];
+ f9 = f9+f11;
+ f11 = f13*f12;
+ f7 = f7*f14;
+ f9 = f9+f11;
+ f11 = heapFloat[(fp+-117)];
+ f7 = f7/f11;
+ f11 = 0;
+ if(f9 >f11) //_LBB582_38
+{
+ f6 = f6*f9;
+ f9 = heapFloat[(r3+106)];
+ f6 = f6*f9;
+ f7 = f6+f7;
+}
+ f6 = heapFloat[(r3+120)];
+ f9 = heapFloat[(r3+126)];
+ f6 = f6*f7;
+ f6 = f9+f6;
+ f6 = f6 > f11 ? f6 : f11;
+ heapFloat[(r3+126)] = f6;
+ f6 = f6-f9;
+ f7 = f8*f6;
+ f8 = heapFloat[(r3+131)];
+ f9 = f10*f6;
+ f10 = heapFloat[(r3+132)];
+ f13 = heapFloat[(r3+133)];
+ f6 = f12*f6;
+ f12 = f7*f8;
+ f14 = f9*f10;
+ f12 = f12+f14;
+ f14 = f6*f13;
+ f12 = f12+f14;
+ f10 = f10*f12;
+ f8 = f8*f12;
+ f12 = f13*f12;
+ f9 = f9-f10;
+ f7 = f7-f8;
+ f6 = f6-f12;
+ f8 = f7*f7;
+ f10 = f9*f9;
+ f8 = f8+f10;
+ f10 = f6*f6;
+ f8 = f8+f10;
+ heapFloat[(g0)] = f8;
+ sqrtf(i7);
+ f8 = f_g0;
+ f10 = 1;
+ f10 = f10/f8;
+ f6 = f6*f10;
+ f9 = f9*f10;
+ f7 = f7*f10;
+ f10 = heapFloat[(r1+84)];
+if(!(f10 ==f11)) //_LBB582_41
+{
+ r4 = heap32[(r3+5)];
+ r4 = r4 >> 2;
+ f10 = f8*f11;
+ f12 = heapFloat[(r1+126)];
+ f13 = heapFloat[(r4+65)];
+ f14 = heapFloat[(r4+64)];
+ f15 = heapFloat[(r4+69)];
+ f16 = heapFloat[(r4+68)];
+ f17 = heapFloat[(r4+73)];
+ f18 = heapFloat[(r4+72)];
+ f19 = heapFloat[(r4+66)];
+ f20 = heapFloat[(r4+70)];
+ f21 = heapFloat[(r4+74)];
+ f12 = f12+f10;
+ heapFloat[(r1+126)] = f12;
+ f12 = heapFloat[(r1+127)];
+ f12 = f12+f10;
+ heapFloat[(r1+127)] = f12;
+ f12 = heapFloat[(r1+128)];
+ f10 = f12+f10;
+ heapFloat[(r1+128)] = f10;
+ f10 = f14*f7;
+ f12 = f13*f9;
+ f13 = heapFloat[(r1+134)];
+ f10 = f10+f12;
+ f12 = f19*f6;
+ f10 = f10+f12;
+ f12 = f13*f8;
+ f13 = heapFloat[(r1+136)];
+ f14 = heapFloat[(r1+135)];
+ f19 = heapFloat[(r1+130)];
+ f10 = f10*f12;
+ f12 = f16*f7;
+ f15 = f15*f9;
+ f12 = f12+f15;
+ f15 = f20*f6;
+ f10 = f19+f10;
+ heapFloat[(r1+130)] = f10;
+ f10 = f12+f15;
+ f12 = f14*f8;
+ f14 = f18*f7;
+ f15 = f17*f9;
+ f10 = f10*f12;
+ f12 = heapFloat[(r1+131)];
+ f10 = f12+f10;
+ f12 = f14+f15;
+ f14 = f21*f6;
+ heapFloat[(r1+131)] = f10;
+ f10 = f12+f14;
+ f12 = f13*f8;
+ f10 = f10*f12;
+ f12 = heapFloat[(r1+132)];
+ f10 = f12+f10;
+ heapFloat[(r1+132)] = f10;
+}
+ f10 = heapFloat[(r2+84)];
+if(!(f10 ==f11)) //_LBB582_43
+{
+ f10 = -f8;
+ r4 = heap32[(r3+6)];
+ r4 = r4 >> 2;
+ f11 = -0;
+ f8 = f8*f11;
+ f11 = heapFloat[(r2+126)];
+ f12 = heapFloat[(r4+65)];
+ f13 = heapFloat[(r4+64)];
+ f14 = heapFloat[(r4+69)];
+ f15 = heapFloat[(r4+68)];
+ f16 = heapFloat[(r4+73)];
+ f17 = heapFloat[(r4+72)];
+ f18 = heapFloat[(r4+66)];
+ f19 = heapFloat[(r4+70)];
+ f20 = heapFloat[(r4+74)];
+ f11 = f11+f8;
+ heapFloat[(r2+126)] = f11;
+ f11 = heapFloat[(r2+127)];
+ f11 = f11+f8;
+ heapFloat[(r2+127)] = f11;
+ f11 = heapFloat[(r2+128)];
+ f8 = f11+f8;
+ heapFloat[(r2+128)] = f8;
+ f8 = f13*f7;
+ f11 = f12*f9;
+ f8 = f8+f11;
+ f11 = f18*f6;
+ f12 = heapFloat[(r2+134)];
+ f8 = f8+f11;
+ f11 = f12*f10;
+ f12 = heapFloat[(r2+136)];
+ f13 = heapFloat[(r2+135)];
+ f18 = heapFloat[(r2+130)];
+ f8 = f8*f11;
+ f11 = f15*f7;
+ f14 = f14*f9;
+ f11 = f11+f14;
+ f14 = f19*f6;
+ f8 = f18+f8;
+ heapFloat[(r2+130)] = f8;
+ f8 = f11+f14;
+ f11 = f13*f10;
+ f7 = f17*f7;
+ f9 = f16*f9;
+ f8 = f8*f11;
+ f11 = heapFloat[(r2+131)];
+ f8 = f11+f8;
+ f7 = f7+f9;
+ f6 = f20*f6;
+ heapFloat[(r2+131)] = f8;
+ f6 = f7+f6;
+ f7 = f12*f10;
+ f6 = f6*f7;
+ f7 = heapFloat[(r2+132)];
+ f6 = f7+f6;
+ heapFloat[(r2+132)] = f6;
+}
+}
+ r0 = heapU8[r0+513];
+if(!(r0 ==0)) //_LBB582_52
+{
+ f6 = heapFloat[(r3+130)];
+ f7 = heapFloat[(r3+124)];
+ f8 = heapFloat[(r3+116)];
+ f2 = f5-f2;
+ f5 = heapFloat[(r3+117)];
+ f1 = f4-f1;
+ f4 = heapFloat[(r3+118)];
+ f0 = f3-f0;
+ f2 = f2*f8;
+ f1 = f1*f5;
+ f3 = f6*f7;
+ f7 = heapFloat[(r3+105)];
+ f1 = f2+f1;
+ f0 = f0*f4;
+ f2 = f3*f7;
+ f0 = f1+f0;
+ f1 = heapFloat[(fp+-117)];
+ f1 = f2/f1;
+ f2 = 0;
+ if(f0 >f2) //_LBB582_46
+{
+ f0 = f6*f0;
+ f3 = heapFloat[(r3+106)];
+ f0 = f0*f3;
+ f1 = f0+f1;
+}
+ f0 = heapFloat[(r3+121)];
+ f3 = heapFloat[(r3+127)];
+ f0 = f0*f1;
+ f0 = f3+f0;
+ f0 = f0 > f2 ? f0 : f2;
+ heapFloat[(r3+127)] = f0;
+ f0 = f0-f3;
+ f1 = heapFloat[(r1+84)];
+ if(f1 !=f2) //_LBB582_49
+{
+ r0 = heap32[(r3+5)];
+ r0 = r0 >> 2;
+ f1 = f0*f2;
+ f3 = heapFloat[(r1+126)];
+ f6 = heapFloat[(r0+65)];
+ f7 = heapFloat[(r0+64)];
+ f9 = heapFloat[(r0+69)];
+ f10 = heapFloat[(r0+68)];
+ f11 = heapFloat[(r0+73)];
+ f12 = heapFloat[(r0+72)];
+ f13 = heapFloat[(r0+66)];
+ f14 = heapFloat[(r0+70)];
+ f15 = heapFloat[(r0+74)];
+ f3 = f3+f1;
+ heapFloat[(r1+126)] = f3;
+ f3 = heapFloat[(r1+127)];
+ f3 = f3+f1;
+ heapFloat[(r1+127)] = f3;
+ f3 = heapFloat[(r1+128)];
+ f1 = f3+f1;
+ heapFloat[(r1+128)] = f1;
+ f1 = f7*f8;
+ f3 = f6*f5;
+ f6 = heapFloat[(r1+134)];
+ f1 = f1+f3;
+ f3 = f13*f4;
+ f1 = f1+f3;
+ f3 = f6*f0;
+ f6 = heapFloat[(r1+136)];
+ f7 = heapFloat[(r1+135)];
+ f13 = heapFloat[(r1+130)];
+ f1 = f1*f3;
+ f3 = f10*f8;
+ f9 = f9*f5;
+ f3 = f3+f9;
+ f9 = f14*f4;
+ f1 = f13+f1;
+ heapFloat[(r1+130)] = f1;
+ f1 = f3+f9;
+ f3 = f7*f0;
+ f8 = f12*f8;
+ f5 = f11*f5;
+ f1 = f1*f3;
+ f3 = heapFloat[(r1+131)];
+ f1 = f3+f1;
+ f5 = f8+f5;
+ f4 = f15*f4;
+ heapFloat[(r1+131)] = f1;
+ f4 = f5+f4;
+ f5 = f6*f0;
+ f4 = f4*f5;
+ f5 = heapFloat[(r1+132)];
+ f4 = f5+f4;
+ heapFloat[(r1+132)] = f4;
+ f8 = heapFloat[(r3+116)];
+ f5 = heapFloat[(r3+117)];
+ f4 = heapFloat[(r3+118)];
+}
+ f1 = heapFloat[(r2+84)];
+if(!(f1 ==f2)) //_LBB582_52
+{
+ f1 = -f0;
+ r0 = heap32[(r3+6)];
+ r0 = r0 >> 2;
+ f2 = -0;
+ f0 = f0*f2;
+ f2 = heapFloat[(r2+126)];
+ f3 = heapFloat[(r0+65)];
+ f6 = heapFloat[(r0+64)];
+ f7 = heapFloat[(r0+69)];
+ f9 = heapFloat[(r0+68)];
+ f10 = heapFloat[(r0+73)];
+ f11 = heapFloat[(r0+72)];
+ f12 = heapFloat[(r0+66)];
+ f13 = heapFloat[(r0+70)];
+ f14 = heapFloat[(r0+74)];
+ f2 = f2+f0;
+ heapFloat[(r2+126)] = f2;
+ f2 = heapFloat[(r2+127)];
+ f2 = f2+f0;
+ heapFloat[(r2+127)] = f2;
+ f2 = heapFloat[(r2+128)];
+ f0 = f2+f0;
+ heapFloat[(r2+128)] = f0;
+ f0 = f6*f8;
+ f2 = f3*f5;
+ f0 = f0+f2;
+ f2 = f12*f4;
+ f3 = heapFloat[(r2+134)];
+ f0 = f0+f2;
+ f2 = f3*f1;
+ f3 = heapFloat[(r2+136)];
+ f6 = heapFloat[(r2+135)];
+ f12 = heapFloat[(r2+130)];
+ f0 = f0*f2;
+ f2 = f9*f8;
+ f7 = f7*f5;
+ f2 = f2+f7;
+ f7 = f13*f4;
+ f0 = f12+f0;
+ heapFloat[(r2+130)] = f0;
+ f0 = f2+f7;
+ f2 = f6*f1;
+ f6 = f11*f8;
+ f5 = f10*f5;
+ f0 = f0*f2;
+ f2 = heapFloat[(r2+131)];
+ f0 = f2+f0;
+ f2 = f6+f5;
+ f4 = f14*f4;
+ heapFloat[(r2+131)] = f0;
+ f0 = f2+f4;
+ f1 = f3*f1;
+ f0 = f0*f1;
+ f1 = heapFloat[(r2+132)];
+ f0 = f1+f0;
+ heapFloat[(r2+132)] = f0;
+}
+}
+}
+ return;
+}
+
+function _ZN21btConeTwistConstraint8setParamEifi(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var f0;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ r1 = heap32[(fp)];
+ f0 = heapFloat[(fp+2)];
+ r2 = heap32[(fp+3)];
+ r3 = (r0 + -3)|0;
+ if(uint(r3) <uint(2)) //_LBB583_5
+{
+ if(uint(r2) >uint(2)) //_LBB583_7
+{
+ r0 = r1 >> 2;
+ heapFloat[(r0+148)] = f0;
+ r1 = heap32[(r0+145)];
+ r1 = r1 | 4;
+ heap32[(r0+145)] = r1;
+ return;
+}
+else{
+ r1 = r1 >> 2;
+ heapFloat[(r1+146)] = f0;
+ r0 = heap32[(r1+145)];
+ r0 = r0 | 1;
+ heap32[(r1+145)] = r0;
+ return;
+}
+}
+else{
+ r0 = (r0 + -1)|0;
+ if(uint(r0) >uint(1)) //_LBB583_8
+{
+ r0 = _2E_str10;
+ r1 = _2E_str24;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 1066;
+ _assert(i7);
+}
+else{
+ if(uint(r2) >uint(2)) //_LBB583_4
+{
+ r1 = r1 >> 2;
+ heapFloat[(r1+105)] = f0;
+ return;
+}
+else{
+ r1 = r1 >> 2;
+ heapFloat[(r1+147)] = f0;
+ r2 = heap32[(r1+145)];
+ r2 = r2 | 2;
+ heap32[(r1+145)] = r2;
+ return;
+}
+}
+}
+}
+
+function _ZNK21btConeTwistConstraint8getParamEii(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var f0;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ r1 = heap32[(fp)];
+ r2 = heap32[(fp+2)];
+ r3 = (r0 + -3)|0;
+ if(uint(r3) <uint(2)) //_LBB584_9
+{
+ if(uint(r2) >uint(2)) //_LBB584_13
+{
+ r0 = (r2 + -3)|0;
+ if(uint(r0) >uint(2)) //_LBB584_17
+{
+ r1 = _2E_str10;
+ r0 = _2E_str24;
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r0;
+ heap32[(g0+2)] = 1107;
+ _assert(i7);
+}
+else{
+ r0 = heapU8[r1+580];
+ r0 = r0 & 4;
+ if(r0 !=0) //_LBB584_16
+{
+ r1 = (r1 + 592)|0;
+}
+else{
+ r1 = _2E_str543;
+ r0 = _2E_str24;
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r0;
+ heap32[(g0+2)] = 1102;
+ _assert(i7);
+}
+}
+}
+else{
+ r2 = heapU8[r1+580];
+ r2 = r2 & 1;
+ if(r2 != 0) //_LBB584_12
+{
+ r1 = (r1 + 584)|0;
+}
+else{
+ r1 = _2E_str442;
+ r2 = _2E_str24;
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r2;
+ heap32[(g0+2)] = 1097;
+ _assert(i7);
+}
+}
+}
+else{
+ r0 = (r0 + -1)|0;
+ if(uint(r0) >uint(1)) //_LBB584_18
+{
+ r1 = _2E_str10;
+ r0 = _2E_str24;
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r0;
+ heap32[(g0+2)] = 1111;
+ _assert(i7);
+}
+else{
+ if(uint(r2) >uint(2)) //_LBB584_6
+{
+ r2 = (r2 + -3)|0;
+ if(uint(r2) >uint(2)) //_LBB584_8
+{
+ r1 = _2E_str10;
+ r2 = _2E_str24;
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r2;
+ heap32[(g0+2)] = 1090;
+ _assert(i7);
+}
+else{
+ r1 = (r1 + 420)|0;
+}
+}
+else{
+ r2 = heapU8[r1+580];
+ r2 = r2 & 2;
+ if(r2 !=0) //_LBB584_5
+{
+ r1 = (r1 + 588)|0;
+}
+else{
+ r1 = _2E_str1340;
+ r2 = _2E_str24;
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r2;
+ heap32[(g0+2)] = 1081;
+ _assert(i7);
+}
+}
+}
+}
+ r0 = r1 >> 2;
+ f0 = heapFloat[(r0)];
+ f_g0 = f0;
+ return;
+}
+
+function _ZN15btJacobianEntryC2ERK11btMatrix3x3S2_RK9btVector3S5_S5_S5_fS5_f(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+ var f10;
+ var f11;
+ var f12;
+ var f13;
+ var f14;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+5)];
+ r1 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r1 = r1 >> 2;
+ f0 = heapFloat[(r0)];
+ heapFloat[(r1)] = f0;
+ f1 = heapFloat[(r0+1)];
+ heapFloat[(r1+1)] = f1;
+ f2 = heapFloat[(r0+2)];
+ r2 = heap32[(fp+3)];
+ heapFloat[(r1+2)] = f2;
+ r2 = r2 >> 2;
+ heap32[(r1+3)] = heap32[(r0+3)];
+ f3 = heapFloat[(r2)];
+ f4 = heapFloat[(r2+1)];
+ f5 = heapFloat[(r2+2)];
+ r0 = heap32[(fp+1)];
+ r0 = r0 >> 2;
+ f6 = f4*f2;
+ f7 = f5*f1;
+ f5 = f5*f0;
+ f8 = f3*f2;
+ f6 = f6-f7;
+ f7 = heapFloat[(r0)];
+ f5 = f5-f8;
+ f8 = heapFloat[(r0+1)];
+ f3 = f3*f1;
+ f4 = f4*f0;
+ f9 = heapFloat[(r0+4)];
+ f10 = heapFloat[(r0+5)];
+ f7 = f7*f6;
+ f8 = f8*f5;
+ f3 = f3-f4;
+ f4 = heapFloat[(r0+2)];
+ f11 = heapFloat[(r0+8)];
+ f12 = heapFloat[(r0+9)];
+ f13 = heapFloat[(r0+10)];
+ f14 = heapFloat[(r0+6)];
+ f9 = f9*f6;
+ f10 = f10*f5;
+ f7 = f7+f8;
+ f4 = f4*f3;
+ f6 = f11*f6;
+ f5 = f12*f5;
+ f8 = f9+f10;
+ f9 = f14*f3;
+ f4 = f7+f4;
+ f5 = f6+f5;
+ f3 = f13*f3;
+ f6 = f8+f9;
+ heapFloat[(r1+4)] = f4;
+ f3 = f5+f3;
+ heapFloat[(r1+5)] = f6;
+ r0 = heap32[(fp+4)];
+ heapFloat[(r1+6)] = f3;
+ r0 = r0 >> 2;
+ heap32[(r1+7)] = 0;
+ f5 = heapFloat[(r0)];
+ f7 = heapFloat[(r0+1)];
+ f8 = heapFloat[(r0+2)];
+ r0 = heap32[(fp+2)];
+ r0 = r0 >> 2;
+ f9 = f8*f1;
+ f10 = f7*f2;
+ f2 = f5*f2;
+ f8 = f8*f0;
+ f9 = f9-f10;
+ f10 = heapFloat[(r0)];
+ f2 = f2-f8;
+ f8 = heapFloat[(r0+1)];
+ f0 = f7*f0;
+ f1 = f5*f1;
+ f5 = heapFloat[(r0+4)];
+ f7 = heapFloat[(r0+5)];
+ f10 = f10*f9;
+ f8 = f8*f2;
+ f0 = f0-f1;
+ f1 = heapFloat[(r0+2)];
+ f11 = heapFloat[(r0+8)];
+ f12 = heapFloat[(r0+9)];
+ f13 = heapFloat[(r0+10)];
+ f14 = heapFloat[(r0+6)];
+ f5 = f5*f9;
+ f7 = f7*f2;
+ f8 = f10+f8;
+ f1 = f1*f0;
+ f9 = f11*f9;
+ f2 = f12*f2;
+ f5 = f5+f7;
+ f7 = f14*f0;
+ f1 = f8+f1;
+ f2 = f9+f2;
+ f0 = f13*f0;
+ f5 = f5+f7;
+ heapFloat[(r1+8)] = f1;
+ f0 = f2+f0;
+ heapFloat[(r1+9)] = f5;
+ r0 = heap32[(fp+6)];
+ heapFloat[(r1+10)] = f0;
+ r0 = r0 >> 2;
+ heap32[(r1+11)] = 0;
+ f2 = heapFloat[(r0+2)];
+ f7 = heapFloat[(r0+1)];
+ f8 = heapFloat[(r0)];
+ f8 = f8*f4;
+ f7 = f7*f6;
+ heapFloat[(r1+12)] = f8;
+ f2 = f2*f3;
+ heapFloat[(r1+13)] = f7;
+ r0 = heap32[(fp+8)];
+ heapFloat[(r1+14)] = f2;
+ r0 = r0 >> 2;
+ heap32[(r1+15)] = 0;
+ f9 = heapFloat[(r0+2)];
+ f10 = heapFloat[(r0+1)];
+ f11 = heapFloat[(r0)];
+ f4 = f8*f4;
+ f6 = f7*f6;
+ f7 = f10*f5;
+ f8 = f11*f1;
+ f4 = f4+f6;
+ f2 = f2*f3;
+ f3 = f9*f0;
+ heapFloat[(r1+16)] = f8;
+ f2 = f4+f2;
+ f4 = heapFloat[(fp+7)];
+ f1 = f8*f1;
+ f5 = f7*f5;
+ heapFloat[(r1+17)] = f7;
+ f2 = f2+f4;
+ f4 = heapFloat[(fp+9)];
+ f1 = f1+f5;
+ f0 = f3*f0;
+ heapFloat[(r1+18)] = f3;
+ f2 = f2+f4;
+ f0 = f1+f0;
+ f0 = f2+f0;
+ heap32[(r1+19)] = 0;
+ f1 = 0;
+ heapFloat[(r1+20)] = f0;
+ if(f0 >f1) //_LBB585_2
+{
+ return;
+}
+else{
+ r0 = _2E_str846;
+ r1 = _2E_str947;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 53;
+ _assert(i7);
+}
+}
+
+function _ZNK21btConeTwistConstraint16GetPointForAngleEff(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+ var f10;
+ var f11;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ f0 = heapFloat[(fp+2)];
+ heapFloat[(g0)] = f0;
+ cosf(i7);
+ f1 = f_g0;
+ r0 = heap32[(fp+1)];
+ heapFloat[(g0)] = f0;
+ sinf(i7);
+ f0 = f_g0;
+ r0 = r0 >> 2;
+ r1 = heap32[(fp)];
+ f2 = heapFloat[(fp+3)];
+ f3 = f1; //fstod f1, f3
+ f3 = Math.abs(f3);
+ f4 = 1.1920928955078125e-007;
+ if(f3 >f4) //_LBB586_2
+{
+ f3 = heapFloat[(r0+109)];
+ f4 = heapFloat[(r0+108)];
+ f5 = f0*f0;
+ f6 = f1*f1;
+ f5 = f5/f6;
+ f4 = f4*f4;
+ f6 = 1;
+ f3 = f3*f3;
+ f4 = f5/f4;
+ f3 = f6/f3;
+ f5 = f5+f6;
+ f3 = f4+f3;
+ f3 = f5/f3;
+ heapFloat[(g0)] = f3;
+ sqrtf(i7);
+ f3 = f_g0;
+}
+else{
+ f3 = heapFloat[(r0+108)];
+}
+ f4 = 0;
+ f5 = f1*f1;
+ f5 = f5+f4;
+ f6 = f0*f0;
+ f5 = f5+f6;
+ heapFloat[(g0)] = f5;
+ sqrtf(i7);
+ f5 = f_g0;
+ if(f5 !=f4) //_LBB586_5
+{
+ f6 = 0.5;
+ f3 = f3*f6;
+ heapFloat[(g0)] = f3;
+ sinf(i7);
+ f5 = f_g0/f5;
+ f6 = f5*f4;
+ heapFloat[(g0)] = f3;
+ f0 = -f0;
+ f1 = f1*f5;
+ cosf(i7);
+ f7 = -f6;
+ f0 = f5*f0;
+ f5 = f_g0*f2;
+ f8 = f1*f4;
+ f7 = f2*f7;
+ f5 = f5+f8;
+ f9 = f0*f4;
+ f7 = f7-f8;
+ f8 = f0*f2;
+ f10 = f_g0*f4;
+ f5 = f5-f9;
+ f7 = f7-f9;
+ f4 = f6*f4;
+ f8 = f10+f8;
+ f8 = f8-f4;
+ f9 = f5*f_g0;
+ f11 = f7*f6;
+ f4 = f10+f4;
+ f2 = f1*f2;
+ f2 = f4-f2;
+ f4 = f8*f_g0;
+ f10 = f7*f1;
+ f9 = f9-f11;
+ f11 = f8*f0;
+ f3 = f2*f_g0;
+ f7 = f7*f0;
+ f4 = f4-f10;
+ f10 = f2*f6;
+ f9 = f9-f11;
+ f2 = f2*f1;
+ r0 = r1 >> 2;
+ f2 = f9+f2;
+ f3 = f3-f7;
+ f1 = f5*f1;
+ f4 = f4-f10;
+ f0 = f5*f0;
+ f1 = f3-f1;
+ f3 = f8*f6;
+ f0 = f4+f0;
+ heapFloat[(r0)] = f2;
+ f1 = f1+f3;
+ heapFloat[(r0+1)] = f0;
+ heapFloat[(r0+2)] = f1;
+ heap32[(r0+3)] = 0;
+ return;
+}
+else{
+ r1 = _2E_str115;
+ r0 = _2E_str685;
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r0;
+ heap32[(g0+2)] = 61;
+ _assert(i7);
+}
+}
+
+function _ZN21btConeTwistConstraint14calcAngleInfo2ERK11btTransformS2_RK11btMatrix3x3S5_(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+ var f10;
+ var f11;
+ var f12;
+ var f13;
+ var f14;
+ var f15;
+ var f16;
+ var f17;
+ var f18;
+ var f19;
+ var f20;
+ var f21;
+ var f22;
+ var f23;
+ var f24;
+ var f25;
+ var f26;
+ var f27;
+ var f28;
+ var f29;
+ var f30;
+var __label__ = 0;
+ i7 = sp + -384;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ heap32[(r1+123)] = 0;
+ r2 = 0;
+ heap32[(r1+122)] = 0;
+ r3 = heap32[(fp+1)];
+ r4 = heap32[(fp+2)];
+ heap8[r0+513] = r2;
+ heap8[r0+514] = r2;
+ r2 = heapU8[r0+540];
+ if(r2 ==0) //_LBB587_7
+{
+__label__ = 6;
+}
+else{
+ r2 = heapU8[r0+515];
+ if(r2 !=0) //_LBB587_7
+{
+__label__ = 6;
+}
+else{
+ f0 = heapFloat[(r1+136)];
+ f1 = heapFloat[(r1+137)];
+ f2 = heapFloat[(r1+138)];
+ f3 = f0*f0;
+ f4 = f1*f1;
+ f5 = heapFloat[(r1+139)];
+ f3 = f3+f4;
+ f4 = f2*f2;
+ f3 = f3+f4;
+ f4 = f5*f5;
+ f6 = 2;
+ f3 = f3+f4;
+ r4 = r4 >> 2;
+ f3 = f6/f3;
+ f4 = f2*f3;
+ f6 = f1*f3;
+ f3 = f0*f3;
+ f7 = heapFloat[(r4)];
+ heapFloat[(fp+-48)] = f7;
+ f7 = heapFloat[(r1+89)];
+ heapFloat[(fp+-64)] = f7;
+ f7 = heapFloat[(r1+88)];
+ heapFloat[(fp+-66)] = f7;
+ f8 = heapFloat[(r4+1)];
+ heapFloat[(fp+-49)] = f8;
+ f9 = heapFloat[(r1+93)];
+ heapFloat[(fp+-65)] = f9;
+ f7 = heapFloat[(r1+92)];
+ heapFloat[(fp+-67)] = f7;
+ f8 = heapFloat[(r1+90)];
+ heapFloat[(fp+-54)] = f8;
+ f9 = heapFloat[(r1+94)];
+ heapFloat[(fp+-55)] = f9;
+ f2 = f2*f4;
+ f10 = f0*f3;
+ f11 = f1*f6;
+ f12 = heapFloat[(fp+-66)];
+ f7 = heapFloat[(fp+-48)];
+ f13 = f12*f7;
+ f7 = heapFloat[(fp+-67)];
+ f8 = heapFloat[(fp+-49)];
+ f14 = f7*f8;
+ f15 = heapFloat[(fp+-64)];
+ f7 = heapFloat[(fp+-48)];
+ f16 = f15*f7;
+ f9 = heapFloat[(fp+-65)];
+ f17 = f9*f8;
+ f18 = heapFloat[(r4+2)];
+ heapFloat[(fp+-83)] = f18;
+ f19 = heapFloat[(r1+97)];
+ heapFloat[(fp+-80)] = f19;
+ f20 = heapFloat[(r1+96)];
+ heapFloat[(fp+-81)] = f20;
+ r3 = r3 >> 2;
+ f21 = heapFloat[(r1+98)];
+ heapFloat[(fp+-77)] = f21;
+ f22 = f11+f2;
+ f23 = 1;
+ heapFloat[(fp+-76)] = f23;
+ f2 = f10+f2;
+ f24 = f0*f6;
+ f25 = f5*f4;
+ f13 = f13+f14;
+ f14 = f20*f18;
+ f16 = f16+f17;
+ f17 = f19*f18;
+ f8 = heapFloat[(fp+-54)];
+ f26 = f8*f7;
+ f9 = heapFloat[(fp+-55)];
+ f8 = heapFloat[(fp+-49)];
+ f27 = f9*f8;
+ f22 = f23-f22;
+ heapFloat[(fp+-78)] = f22;
+ f13 = f13+f14;
+ heapFloat[(fp+-50)] = f13;
+ f14 = f24-f25;
+ heapFloat[(fp+-52)] = f14;
+ f24 = f24+f25;
+ heapFloat[(fp+-79)] = f24;
+ f16 = f16+f17;
+ heapFloat[(fp+-51)] = f16;
+ f2 = f23-f2;
+ heapFloat[(fp+-53)] = f2;
+ f0 = f0*f4;
+ f6 = f5*f6;
+ f1 = f1*f4;
+ f3 = f5*f3;
+ f4 = f26+f27;
+ f5 = f21*f18;
+ f2 = heapFloat[(r3)];
+ heapFloat[(fp+-40)] = f2;
+ f7 = heapFloat[(r1+73)];
+ f8 = heapFloat[(r1+72)];
+ f2 = heapFloat[(r3+1)];
+ heapFloat[(fp+-41)] = f2;
+ f9 = heapFloat[(r1+77)];
+ f12 = heapFloat[(r1+76)];
+ f13 = heapFloat[(r4+4)];
+ heapFloat[(fp+-59)] = f13;
+ f14 = heapFloat[(r4+5)];
+ heapFloat[(fp+-60)] = f14;
+ f15 = heapFloat[(r3+4)];
+ heapFloat[(fp+-68)] = f15;
+ f16 = heapFloat[(r3+5)];
+ heapFloat[(fp+-69)] = f16;
+ f17 = heapFloat[(r1+74)];
+ f18 = heapFloat[(r1+78)];
+ f19 = f0+f6;
+ heapFloat[(fp+-56)] = f19;
+ f20 = f1-f3;
+ heapFloat[(fp+-58)] = f20;
+ f10 = f10+f11;
+ f2 = heapFloat[(fp+-40)];
+ f11 = f8*f2;
+ f2 = heapFloat[(fp+-41)];
+ f21 = f12*f2;
+ f13 = heapFloat[(fp+-50)];
+ f23 = f22*f13;
+ f16 = heapFloat[(fp+-51)];
+ f25 = f24*f16;
+ f0 = f0-f6;
+ heapFloat[(fp+-61)] = f0;
+ f4 = f4+f5;
+ heapFloat[(fp+-57)] = f4;
+ f1 = f1+f3;
+ heapFloat[(fp+-62)] = f1;
+ f2 = heapFloat[(fp+-40)];
+ f3 = f7*f2;
+ f2 = heapFloat[(fp+-41)];
+ f5 = f9*f2;
+ f14 = heapFloat[(fp+-52)];
+ f6 = f14*f13;
+ f2 = heapFloat[(fp+-53)];
+ f26 = f2*f16;
+ f0 = heapFloat[(r3+2)];
+ heapFloat[(fp+-71)] = f0;
+ f1 = heapFloat[(r1+81)];
+ f2 = heapFloat[(r1+80)];
+ f4 = heapFloat[(r3+8)];
+ heapFloat[(fp+-38)] = f4;
+ f13 = heapFloat[(r3+9)];
+ heapFloat[(fp+-39)] = f13;
+ f14 = heapFloat[(r4+6)];
+ heapFloat[(fp+-37)] = f14;
+ f15 = heapFloat[(r3+6)];
+ heapFloat[(fp+-70)] = f15;
+ f0 = heapFloat[(r1+82)];
+ heapFloat[(fp+-82)] = f0;
+ f4 = heapFloat[(fp+-76)];
+ f10 = f4-f10;
+ heapFloat[(fp+-63)] = f10;
+ f14 = heapFloat[(fp+-66)];
+ f13 = heapFloat[(fp+-59)];
+ f15 = f14*f13;
+ f16 = heapFloat[(fp+-67)];
+ f14 = heapFloat[(fp+-60)];
+ f19 = f16*f14;
+ f20 = heapFloat[(fp+-64)];
+ f22 = f20*f13;
+ f24 = heapFloat[(fp+-65)];
+ f27 = f24*f14;
+ f28 = heapFloat[(fp+-68)];
+ f29 = f8*f28;
+ f16 = heapFloat[(fp+-69)];
+ f30 = f12*f16;
+ f0 = f7*f28;
+ f4 = f9*f16;
+ f11 = f11+f21;
+ heapFloat[(fp+-42)] = f11;
+ f21 = heapFloat[(fp+-71)];
+ f10 = f2*f21;
+ heapFloat[(fp+-43)] = f10;
+ f10 = f23+f25;
+ heapFloat[(fp+-44)] = f10;
+ f13 = heapFloat[(fp+-61)];
+ f11 = heapFloat[(fp+-57)];
+ f14 = f13*f11;
+ f3 = f3+f5;
+ f5 = f1*f21;
+ f6 = f6+f26;
+ f16 = heapFloat[(fp+-62)];
+ f20 = f16*f11;
+ f23 = heapFloat[(fp+-40)];
+ f24 = f17*f23;
+ f25 = heapFloat[(fp+-41)];
+ f26 = f18*f25;
+ f28 = heapFloat[(fp+-56)];
+ f13 = heapFloat[(fp+-50)];
+ f10 = f28*f13;
+ f11 = heapFloat[(fp+-58)];
+ f16 = heapFloat[(fp+-51)];
+ f11 = f11*f16;
+ f13 = heapFloat[(r3+10)];
+ heapFloat[(fp+-72)] = f13;
+ f15 = f15+f19;
+ f13 = heapFloat[(fp+-81)];
+ f19 = heapFloat[(fp+-37)];
+ f13 = f13*f19;
+ f22 = f22+f27;
+ f19 = heapFloat[(fp+-80)];
+ f27 = heapFloat[(fp+-37)];
+ f16 = f19*f27;
+ f19 = heapFloat[(fp+-54)];
+ f21 = heapFloat[(fp+-59)];
+ f19 = f19*f21;
+ f21 = heapFloat[(fp+-55)];
+ f23 = heapFloat[(fp+-60)];
+ f21 = f21*f23;
+ f23 = heapFloat[(fp+-38)];
+ f8 = f8*f23;
+ f23 = heapFloat[(fp+-39)];
+ f12 = f12*f23;
+ f23 = heapFloat[(fp+-38)];
+ f7 = f7*f23;
+ f23 = heapFloat[(fp+-39)];
+ f9 = f9*f23;
+ f29 = f29+f30;
+ f30 = heapFloat[(fp+-70)];
+ f23 = f2*f30;
+ f0 = f0+f4;
+ f4 = f1*f30;
+ f28 = heapFloat[(fp+-68)];
+ f25 = f17*f28;
+ f27 = heapFloat[(fp+-69)];
+ f27 = f18*f27;
+ f28 = heapFloat[(fp+-42)];
+ f30 = heapFloat[(fp+-43)];
+ f28 = f28+f30;
+ f30 = heapFloat[(fp+-44)];
+ f14 = f30+f14;
+ heapFloat[(fp+-73)] = f14;
+ f3 = f3+f5;
+ f5 = f6+f20;
+ heapFloat[(fp+-42)] = f5;
+ f6 = f24+f26;
+ f20 = heapFloat[(fp+-82)];
+ f14 = heapFloat[(fp+-71)];
+ f24 = f20*f14;
+ f10 = f10+f11;
+ f26 = heapFloat[(fp+-63)];
+ f11 = heapFloat[(fp+-57)];
+ f30 = f26*f11;
+ f5 = f15+f13;
+ heapFloat[(fp+-44)] = f5;
+ f5 = f22+f16;
+ heapFloat[(fp+-45)] = f5;
+ f11 = f29+f23;
+ f0 = f0+f4;
+ f4 = f19+f21;
+ f21 = heapFloat[(fp+-77)];
+ f13 = heapFloat[(fp+-37)];
+ f14 = f21*f13;
+ f8 = f8+f12;
+ f13 = heapFloat[(fp+-72)];
+ f2 = f2*f13;
+ f7 = f7+f9;
+ f1 = f1*f13;
+ f23 = heapFloat[(fp+-38)];
+ f9 = f17*f23;
+ f23 = heapFloat[(fp+-39)];
+ f12 = f18*f23;
+ f15 = f25+f27;
+ f16 = heapFloat[(fp+-70)];
+ f17 = f20*f16;
+ f18 = heapFloat[(fp+-73)];
+ f19 = f28*f18;
+ f5 = heapFloat[(fp+-42)];
+ f22 = f3*f5;
+ f6 = f6+f24;
+ f10 = f10+f30;
+ heapFloat[(fp+-43)] = f10;
+ f4 = f4+f14;
+ heapFloat[(fp+-74)] = f4;
+ f14 = heapFloat[(r1+84)];
+ f24 = heapFloat[(r1+85)];
+ f25 = heapFloat[(r1+86)];
+ f4 = heapFloat[(r4+8)];
+ heapFloat[(fp+-46)] = f4;
+ f5 = heapFloat[(r1+100)];
+ heapFloat[(fp+-85)] = f5;
+ f4 = heapFloat[(r4+9)];
+ heapFloat[(fp+-47)] = f4;
+ f5 = heapFloat[(r1+101)];
+ heapFloat[(fp+-86)] = f5;
+ f10 = heapFloat[(r4+10)];
+ heapFloat[(fp+-75)] = f10;
+ f13 = heapFloat[(r1+102)];
+ heapFloat[(fp+-84)] = f13;
+ f2 = f8+f2;
+ f1 = f7+f1;
+ f7 = f15+f17;
+ f8 = heapFloat[(fp+-78)];
+ f5 = heapFloat[(fp+-44)];
+ f15 = f8*f5;
+ f16 = heapFloat[(fp+-79)];
+ f5 = heapFloat[(fp+-45)];
+ f17 = f16*f5;
+ f18 = heapFloat[(fp+-52)];
+ f5 = heapFloat[(fp+-44)];
+ f20 = f18*f5;
+ f21 = heapFloat[(fp+-53)];
+ f5 = heapFloat[(fp+-45)];
+ f23 = f21*f5;
+ f9 = f9+f12;
+ f12 = heapFloat[(fp+-82)];
+ f13 = heapFloat[(fp+-72)];
+ f12 = f12*f13;
+ f18 = heapFloat[(fp+-73)];
+ f26 = f11*f18;
+ f5 = heapFloat[(fp+-42)];
+ f27 = f0*f5;
+ f19 = f19+f22;
+ f10 = heapFloat[(fp+-43)];
+ f22 = f6*f10;
+ f29 = heapFloat[(r3+14)];
+ heapFloat[(fp+-82)] = f29;
+ f30 = heapFloat[(r3+13)];
+ heapFloat[(fp+-87)] = f30;
+ f4 = heapFloat[(r3+12)];
+ heapFloat[(fp+-89)] = f4;
+ f4 = heapFloat[(r4+14)];
+ heapFloat[(fp+-88)] = f4;
+ f4 = heapFloat[(r4+13)];
+ heapFloat[(fp+-90)] = f4;
+ f4 = heapFloat[(r4+12)];
+ heapFloat[(fp+-91)] = f4;
+ r3 = sp + -128;
+ f9 = f9+f12;
+ f12 = heapFloat[(fp+-66)];
+ f4 = heapFloat[(fp+-46)];
+ f12 = f12*f4;
+ f4 = heapFloat[(fp+-67)];
+ f5 = heapFloat[(fp+-47)];
+ f4 = f4*f5;
+ f5 = heapFloat[(fp+-64)];
+ f8 = heapFloat[(fp+-46)];
+ f5 = f5*f8;
+ f8 = heapFloat[(fp+-65)];
+ f10 = heapFloat[(fp+-47)];
+ f8 = f8*f10;
+ f15 = f15+f17;
+ f13 = heapFloat[(fp+-61)];
+ f17 = heapFloat[(fp+-74)];
+ f10 = f13*f17;
+ f20 = f20+f23;
+ f16 = heapFloat[(fp+-62)];
+ f23 = f16*f17;
+ f13 = heapFloat[(fp+-56)];
+ f16 = heapFloat[(fp+-44)];
+ f13 = f13*f16;
+ f16 = heapFloat[(fp+-58)];
+ f17 = heapFloat[(fp+-45)];
+ f16 = f16*f17;
+ f17 = f2*f18;
+ f18 = heapFloat[(fp+-42)];
+ f18 = f1*f18;
+ f26 = f26+f27;
+ f27 = heapFloat[(fp+-43)];
+ f21 = f7*f27;
+ f19 = f19+f22;
+ f10 = f15+f10;
+ f15 = f20+f23;
+ r4 = r3 >> 2;
+ f20 = heapFloat[(fp+-40)];
+ f20 = f20*f14;
+ f22 = heapFloat[(fp+-41)];
+ f22 = f22*f24;
+ f4 = f12+f4;
+ f12 = heapFloat[(fp+-81)];
+ f23 = heapFloat[(fp+-75)];
+ f12 = f12*f23;
+ f5 = f5+f8;
+ f8 = heapFloat[(fp+-80)];
+ f8 = f8*f23;
+ f23 = heapFloat[(fp+-54)];
+ f27 = heapFloat[(fp+-46)];
+ f23 = f23*f27;
+ f27 = heapFloat[(fp+-55)];
+ f29 = heapFloat[(fp+-47)];
+ f27 = f27*f29;
+ f13 = f13+f16;
+ f16 = heapFloat[(fp+-63)];
+ f29 = heapFloat[(fp+-74)];
+ f16 = f16*f29;
+ f17 = f17+f18;
+ f18 = heapFloat[(fp+-43)];
+ f18 = f9*f18;
+ f21 = f26+f21;
+ heapFloat[(fp+-32)] = f19;
+ f4 = f4+f12;
+ f5 = f5+f8;
+ f8 = f13+f16;
+ f12 = f20+f22;
+ f13 = heapFloat[(fp+-71)];
+ f13 = f13*f25;
+ f16 = heapFloat[(fp+-68)];
+ f16 = f16*f14;
+ f19 = heapFloat[(fp+-69)];
+ f19 = f19*f24;
+ f20 = f23+f27;
+ f22 = heapFloat[(fp+-77)];
+ f23 = heapFloat[(fp+-75)];
+ f22 = f22*f23;
+ f26 = f28*f10;
+ f27 = f3*f15;
+ f17 = f17+f18;
+ heapFloat[(r4+1)] = f21;
+ f18 = f20+f22;
+ f12 = f12+f13;
+ heapFloat[(r4+2)] = f17;
+ f13 = f16+f19;
+ f16 = heapFloat[(fp+-70)];
+ f16 = f16*f25;
+ f17 = heapFloat[(fp+-38)];
+ f14 = f17*f14;
+ f17 = heapFloat[(fp+-39)];
+ f17 = f17*f24;
+ f19 = heapFloat[(fp+-78)];
+ f19 = f19*f4;
+ f20 = heapFloat[(fp+-79)];
+ f20 = f20*f5;
+ f21 = heapFloat[(fp+-52)];
+ f21 = f21*f4;
+ f22 = heapFloat[(fp+-53)];
+ f22 = f22*f5;
+ f24 = f11*f10;
+ f23 = f0*f15;
+ f26 = f26+f27;
+ f27 = f6*f8;
+ f29 = heapFloat[(fp+-89)];
+ f12 = f12+f29;
+ f13 = f13+f16;
+ f14 = f14+f17;
+ f16 = heapFloat[(fp+-72)];
+ f16 = f16*f25;
+ f17 = f19+f20;
+ f19 = heapFloat[(fp+-61)];
+ f19 = f19*f18;
+ f20 = f21+f22;
+ f21 = heapFloat[(fp+-62)];
+ f21 = f21*f18;
+ f22 = heapFloat[(fp+-56)];
+ f22 = f22*f4;
+ f25 = heapFloat[(fp+-58)];
+ f25 = f25*f5;
+ f29 = f2*f10;
+ f30 = f1*f15;
+ f23 = f24+f23;
+ f24 = f7*f8;
+ f26 = f26+f27;
+ heap32[(r4+3)] = 0;
+ f12 = -f12;
+ f27 = heapFloat[(fp+-87)];
+ f13 = f13+f27;
+ f17 = f17+f19;
+ f19 = f20+f21;
+ f14 = f14+f16;
+ f16 = f22+f25;
+ f20 = heapFloat[(fp+-63)];
+ f20 = f20*f18;
+ f21 = f29+f30;
+ f22 = f9*f8;
+ f23 = f23+f24;
+ heapFloat[(r4+4)] = f26;
+ f29 = heapFloat[(fp+-82)];
+ f14 = f14+f29;
+ f16 = f16+f20;
+ f20 = f28*f12;
+ f24 = f11*f13;
+ f25 = f3*f12;
+ f26 = f0*f13;
+ f27 = f28*f17;
+ f3 = f3*f19;
+ f21 = f21+f22;
+ heapFloat[(r4+5)] = f23;
+ f22 = 0;
+ heapFloat[(r4+6)] = f21;
+ f20 = f20-f24;
+ f21 = f2*f14;
+ f23 = f25-f26;
+ f24 = f1*f14;
+ f12 = f6*f12;
+ f13 = f7*f13;
+ f25 = heapFloat[(fp+-48)];
+ f26 = heapFloat[(fp+-85)];
+ f25 = f25*f26;
+ f28 = heapFloat[(fp+-49)];
+ f29 = heapFloat[(fp+-86)];
+ f28 = f28*f29;
+ f11 = f11*f17;
+ f0 = f0*f19;
+ f3 = f27+f3;
+ f6 = f6*f16;
+ f20 = f20-f21;
+ f21 = f23-f24;
+ f23 = heapFloat[(fp+-59)];
+ f23 = f23*f26;
+ f24 = heapFloat[(fp+-60)];
+ f24 = f24*f29;
+ f12 = f12-f13;
+ f13 = f9*f14;
+ f14 = heapFloat[(fp+-50)];
+ f14 = f14*f22;
+ f27 = heapFloat[(fp+-51)];
+ f27 = f27*f22;
+ f25 = f25+f28;
+ f28 = heapFloat[(fp+-83)];
+ f30 = heapFloat[(fp+-84)];
+ f28 = f28*f30;
+ f2 = f2*f17;
+ f1 = f1*f19;
+ f0 = f11+f0;
+ f7 = f7*f16;
+ f3 = f3+f6;
+ heap32[(r4+7)] = 0;
+ f6 = f12-f13;
+ f11 = f25+f28;
+ f12 = heapFloat[(fp+-46)];
+ f12 = f12*f26;
+ f13 = heapFloat[(fp+-47)];
+ f13 = f13*f29;
+ f25 = heapFloat[(fp+-44)];
+ f25 = f25*f22;
+ f26 = heapFloat[(fp+-45)];
+ f26 = f26*f22;
+ f23 = f23+f24;
+ f24 = heapFloat[(fp+-37)];
+ f24 = f24*f30;
+ f28 = heapFloat[(fp+-73)];
+ f28 = f28*f20;
+ f29 = heapFloat[(fp+-42)];
+ f29 = f29*f21;
+ f14 = f14+f27;
+ f27 = heapFloat[(fp+-57)];
+ f27 = f27*f22;
+ f1 = f2+f1;
+ f2 = f9*f16;
+ f0 = f0+f7;
+ heapFloat[(r4+8)] = f3;
+ f3 = f23+f24;
+ f4 = f4*f22;
+ f5 = f5*f22;
+ f7 = f12+f13;
+ f23 = heapFloat[(fp+-75)];
+ f9 = f23*f30;
+ f10 = f10*f20;
+ f12 = f15*f21;
+ f13 = f25+f26;
+ f15 = heapFloat[(fp+-74)];
+ f15 = f15*f22;
+ f23 = f28+f29;
+ f24 = heapFloat[(fp+-43)];
+ f24 = f24*f6;
+ f14 = f14+f27;
+ f25 = heapFloat[(fp+-91)];
+ f11 = f11+f25;
+ f1 = f1+f2;
+ heapFloat[(r4+9)] = f0;
+ f0 = f7+f9;
+ heapFloat[(r4+10)] = f1;
+ f1 = f17*f20;
+ f2 = f19*f21;
+ f4 = f4+f5;
+ f5 = f18*f22;
+ f7 = f10+f12;
+ f8 = f8*f6;
+ f9 = f13+f15;
+ f10 = heapFloat[(fp+-90)];
+ f3 = f3+f10;
+ f10 = f23+f24;
+ f11 = f14+f11;
+ f1 = f1+f2;
+ f2 = f16*f6;
+ f4 = f4+f5;
+ f5 = heapFloat[(fp+-88)];
+ f0 = f0+f5;
+ f5 = f7+f8;
+ f3 = f9+f3;
+ f6 = f10+f11;
+ heap32[(r4+11)] = 0;
+ f1 = f1+f2;
+ f0 = f4+f0;
+ f2 = f5+f3;
+ heapFloat[(r4+12)] = f6;
+ f0 = f1+f0;
+ heapFloat[(r4+13)] = f2;
+ heapFloat[(r4+14)] = f0;
+ heap32[(r4+15)] = 0;
+ r4 = sp + -144;
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r4;
+ _ZNK11btMatrix3x311getRotationER12btQuaternion(i7);
+ r3 = r4 >> 2;
+ f0 = heapFloat[(r3+2)];
+ f1 = heapFloat[(r3+1)];
+ f2 = heapFloat[(fp+-36)];
+ heapFloat[(r1+112)] = f2;
+ heapFloat[(r1+113)] = f1;
+ heapFloat[(r1+114)] = f0;
+ heap32[(r1+115)] = 0;
+ f2 = f2*f2;
+ f1 = f1*f1;
+ f1 = f2+f1;
+ f0 = f0*f0;
+ f0 = f1+f0;
+ heapFloat[(g0)] = f0;
+ sqrtf(i7);
+ f4 = heapFloat[(fp+-76)];
+ f0 = f4/f_g0;
+ f1 = heapFloat[(r1+112)];
+ f1 = f1*f0;
+ heapFloat[(r1+112)] = f1;
+ f1 = heapFloat[(r1+113)];
+ f1 = f1*f0;
+ heapFloat[(r1+113)] = f1;
+ f1 = heapFloat[(r1+114)];
+ f0 = f1*f0;
+ heapFloat[(r1+114)] = f0;
+ f0 = heapFloat[(r3+3)];
+ f1 = -1;
+ f0 = f0 < f1 ? f1 : f0;
+ f0 = f0 > f4 ? f4 : f0;
+ heapFloat[(g0)] = f0;
+ acosf(i7);
+ f0 = f_g0+f_g0;
+ heapFloat[(r1+123)] = f0;
+ if(f0 <f22) //_LBB587_4
+{
+ f0 = -f0;
+}
+ f1 = 1.1920928955078125e-007;
+ if(f0 <f1) //_LBB587_83
+{
+__label__ = 72;
+}
+else{
+ r1 = 1;
+ heap8[r0+514] = r1;
+ return;
+}
+}
+}
+_8: do {
+if (__label__ == 6){
+ r2 = heap32[(fp+3)];
+ r5 = heap32[(fp+4)];
+ r6 = sp + -64;
+ r7 = (r0 + 288)|0;
+ heap32[(g0)] = r7;
+ heap32[(g0+1)] = r6;
+ _ZNK11btMatrix3x311getRotationER12btQuaternion(i7);
+ r7 = sp + -48;
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r7;
+ _ZNK11btMatrix3x311getRotationER12btQuaternion(i7);
+ r7 = r7 >> 2;
+ r6 = r6 >> 2;
+ f0 = heapFloat[(r7+3)];
+ f1 = heapFloat[(r6+3)];
+ f2 = heapFloat[(fp+-12)];
+ f3 = heapFloat[(fp+-16)];
+ f4 = heapFloat[(r7+1)];
+ f5 = heapFloat[(r6+1)];
+ f6 = heapFloat[(r7+2)];
+ f7 = heapFloat[(r6+2)];
+ r6 = sp + -32;
+ r7 = (r0 + 352)|0;
+ heap32[(g0)] = r7;
+ heap32[(g0+1)] = r6;
+ _ZNK11btMatrix3x311getRotationER12btQuaternion(i7);
+ r7 = sp + -16;
+ heap32[(g0)] = r4;
+ heap32[(g0+1)] = r7;
+ _ZNK11btMatrix3x311getRotationER12btQuaternion(i7);
+ r6 = r6 >> 2;
+ r7 = r7 >> 2;
+ f8 = heapFloat[(r7+3)];
+ f9 = heapFloat[(r6+3)];
+ f10 = heapFloat[(fp+-4)];
+ f11 = heapFloat[(r6+1)];
+ f12 = heapFloat[(r7+1)];
+ f13 = heapFloat[(fp+-8)];
+ f14 = heapFloat[(r6+2)];
+ f15 = heapFloat[(r7+2)];
+ f16 = f8*f9;
+ f17 = f10*f13;
+ f18 = f0*f3;
+ f19 = f2*f1;
+ f20 = f0*f1;
+ f21 = f2*f3;
+ f22 = f8*f13;
+ f23 = f10*f9;
+ f24 = f8*f11;
+ f25 = f12*f9;
+ f26 = f0*f5;
+ f27 = f4*f1;
+ f16 = f16-f17;
+ f17 = f12*f11;
+ f18 = f18+f19;
+ f19 = f4*f7;
+ f20 = f20-f21;
+ f21 = f4*f5;
+ f22 = f22+f23;
+ f23 = f12*f14;
+ f0 = f0*f7;
+ f1 = f6*f1;
+ f24 = f24+f25;
+ f25 = f15*f13;
+ f26 = f26+f27;
+ f27 = f6*f3;
+ f8 = f8*f14;
+ f9 = f15*f9;
+ f16 = f16-f17;
+ f17 = f15*f14;
+ f18 = f18+f19;
+ f19 = f6*f5;
+ f20 = f20-f21;
+ f6 = f6*f7;
+ f21 = f22+f23;
+ f15 = f15*f11;
+ f0 = f0+f1;
+ f1 = f2*f5;
+ f5 = f24+f25;
+ f14 = f10*f14;
+ f22 = f26+f27;
+ f2 = f2*f7;
+ f7 = f8+f9;
+ f8 = f10*f11;
+ f9 = f21-f15;
+ heapFloat[(fp+-46)] = f9;
+ f10 = f18-f19;
+ heapFloat[(fp+-49)] = f10;
+ f5 = f5-f14;
+ heapFloat[(fp+-45)] = f5;
+ f6 = f20-f6;
+ heapFloat[(fp+-52)] = f6;
+ f11 = f16-f17;
+ heapFloat[(fp+-48)] = f11;
+ f2 = f22-f2;
+ heapFloat[(fp+-50)] = f2;
+ f0 = f0+f1;
+ f1 = f4*f3;
+ f3 = f7+f8;
+ f4 = f12*f13;
+ f3 = f3-f4;
+ heapFloat[(fp+-47)] = f3;
+ f0 = f0-f1;
+ heapFloat[(fp+-51)] = f0;
+ f1 = f11*f2;
+ f4 = f6*f5;
+ f7 = f11*f6;
+ f8 = f10*f9;
+ f12 = f11*f10;
+ f13 = f6*f9;
+ f1 = f1-f4;
+ f4 = f10*f3;
+ f7 = f7+f8;
+ f8 = f2*f5;
+ f11 = f11*f0;
+ f6 = f6*f3;
+ f12 = f12-f13;
+ f13 = f0*f5;
+ f1 = f1-f4;
+ f4 = f0*f9;
+ f7 = f7+f8;
+ f0 = f0*f3;
+ f6 = f11-f6;
+ f8 = f2*f9;
+ f11 = f12-f13;
+ f2 = f2*f3;
+ f2 = f11+f2;
+ f1 = f1+f4;
+ f4 = 0;
+ f0 = f7+f0;
+ f6 = f6-f8;
+ f7 = f10*f5;
+ f6 = f6+f7;
+ f7 = f1*f4;
+ f8 = -f2;
+ f10 = f0*f4;
+ f11 = f2*f4;
+ f12 = f10+f6;
+ f8 = f8-f7;
+ f13 = f6*f4;
+ f7 = f0+f7;
+ f8 = f8-f13;
+ f7 = f7-f13;
+ f12 = f12-f11;
+ f10 = f10+f11;
+ f10 = f10-f1;
+ f11 = f7*f0;
+ f13 = f8*f2;
+ f14 = f12*f0;
+ f15 = f8*f1;
+ f11 = f11-f13;
+ f13 = f12*f6;
+ f14 = f14-f15;
+ f15 = f10*f2;
+ f16 = f10*f0;
+ f8 = f8*f6;
+ f11 = f11-f13;
+ f10 = f10*f1;
+ f13 = f14-f15;
+ f14 = f7*f6;
+ f8 = f16-f8;
+ f7 = f7*f1;
+ f10 = f11+f10;
+ f11 = f13+f14;
+ f7 = f8-f7;
+ f8 = f12*f2;
+ f7 = f7+f8;
+ f8 = f10*f10;
+ f12 = f11*f11;
+ f8 = f8+f12;
+ f12 = f7*f7;
+ f8 = f8+f12;
+ heapFloat[(g0)] = f8;
+ f8 = 1;
+ sqrtf(i7);
+ f12 = f8/f_g0;
+ f11 = f11*f12;
+ f7 = f7*f12;
+ f10 = f10*f12;
+ f12 = f11*f4;
+ f13 = f7*f4;
+ f14 = f10+f12;
+ f14 = f14+f13;
+ f3 = -f3;
+ heapFloat[(fp+-43)] = f3;
+ f3 = -f5;
+ heapFloat[(fp+-44)] = f3;
+ f3 = -f9;
+ heapFloat[(fp+-42)] = f3;
+ f3 = -0.99999988079071045;
+ if(f14 >=f3) //_LBB587_9
+{
+ f3 = f14+f8;
+ f3 = f3+f3;
+ heapFloat[(g0)] = f3;
+ sqrtf(i7);
+ f10 = f10*f4;
+ f5 = 0.5;
+ f11 = f11-f10;
+ f9 = f8/f_g0;
+ f7 = f10-f7;
+ f13 = f13-f12;
+ f12 = f_g0*f5;
+ f11 = f11*f9;
+ f10 = f7*f9;
+ f7 = f13*f9;
+}
+else{
+ f7 = -0;
+ f10 = 1;
+ f11 = 0;
+ f12 = f11;
+}
+ f3 = f7*f7;
+ f5 = f10*f10;
+ f3 = f3+f5;
+ f5 = f11*f11;
+ f3 = f3+f5;
+ f5 = f12*f12;
+ f3 = f3+f5;
+ heapFloat[(g0)] = f3;
+ sqrtf(i7);
+ f3 = f_g0;
+ if(f3 !=f4) //_LBB587_12
+{
+ f3 = f8/f3;
+ f5 = f12*f3;
+ f7 = f7*f3;
+ f9 = f10*f3;
+ f3 = f11*f3;
+ f10 = f5*f1;
+ f11 = f0*f9;
+ f12 = f5*f2;
+ f13 = f0*f7;
+ f14 = f5*f6;
+ f15 = f0*f3;
+ f10 = f10-f11;
+ f11 = f2*f3;
+ f12 = f12-f13;
+ f13 = f6*f9;
+ f0 = f5*f0;
+ f16 = f2*f7;
+ f14 = f14-f15;
+ f15 = f1*f7;
+ f10 = f10-f11;
+ f11 = f6*f7;
+ f12 = f12-f13;
+ f13 = f1*f3;
+ f10 = f10+f11;
+ f11 = f12+f13;
+ f0 = f0+f16;
+ f1 = f1*f9;
+ f12 = f14-f15;
+ f2 = f2*f9;
+ f2 = f12+f2;
+ f12 = f11*f11;
+ f13 = f10*f10;
+ f0 = f0+f1;
+ f1 = f6*f3;
+ f0 = f0+f1;
+ f1 = f12+f13;
+ f6 = f2*f2;
+ f1 = f1+f6;
+ f6 = f0*f0;
+ f1 = f1+f6;
+ heapFloat[(g0)] = f1;
+ sqrtf(i7);
+ f1 = f_g0;
+ if(f1 !=f4) //_LBB587_14
+{
+ f1 = f8/f1;
+ f6 = heapFloat[(r1+108)];
+ heapFloat[(fp+-40)] = f6;
+ f12 = heapFloat[(r1+111)];
+ f11 = f11*f1;
+ heapFloat[(fp+-37)] = f11;
+ f10 = f10*f1;
+ heapFloat[(fp+-38)] = f10;
+ f2 = f2*f1;
+ heapFloat[(fp+-39)] = f2;
+ f0 = f0*f1;
+ heapFloat[(fp+-41)] = f0;
+ if(f6 <f12) //_LBB587_33
+{
+__label__ = 27;
+}
+else{
+ f0 = heapFloat[(r1+109)];
+ if(f0 <f12) //_LBB587_33
+{
+__label__ = 27;
+}
+else{
+ f12 = -1;
+ f12 = f5 < f12 ? f12 : f5;
+ f12 = f12 > f8 ? f8 : f12;
+ heapFloat[(g0)] = f12;
+ acosf(i7);
+ f12 = f_g0+f_g0;
+ f0 = 1.1920928955078125e-007;
+ if(f12 >f0) //_LBB587_18
+{
+ f4 = f7*f7;
+ f0 = f9*f9;
+ f4 = f4+f0;
+ f0 = f3*f3;
+ f4 = f4+f0;
+ heapFloat[(g0)] = f4;
+ f4 = 1;
+ sqrtf(i7);
+ f0 = f4/f_g0;
+ f1 = f9*f0;
+ f2 = f7*f0;
+ f0 = f3*f0;
+ f3 = f1; //fstod f1, f3
+ f3 = Math.abs(f3);
+ f5 = 1.1920928955078125e-007;
+ if(f3 >f5) //_LBB587_20
+{
+ f3 = heapFloat[(r1+109)];
+ f5 = heapFloat[(r1+108)];
+ f6 = f0*f0;
+ f7 = f1*f1;
+ f6 = f6/f7;
+ f5 = f5*f5;
+ f3 = f3*f3;
+ f5 = f6/f5;
+ f3 = f4/f3;
+ f4 = f6+f4;
+ f3 = f5+f3;
+ f4 = f4/f3;
+ heapFloat[(g0)] = f4;
+ sqrtf(i7);
+ f4 = f_g0;
+}
+else{
+ f4 = heapFloat[(r1+108)];
+}
+}
+ f3 = heapFloat[(r1+104)];
+ f5 = f3*f4;
+ if(f5 >=f12) //_LBB587_67
+{
+__label__ = 58;
+}
+else{
+ r3 = 1;
+ heap8[r0+514] = r3;
+if(!(f12 >=f4)) //_LBB587_24
+{
+ f6 = 0.99999988079071045;
+ if(f3 <f6) //_LBB587_25
+{
+ f8 = f12-f5;
+ f3 = f4-f5;
+ f8 = f8/f3;
+}
+}
+ f12 = f12-f5;
+ heapFloat[(r1+129)] = f8;
+ f3 = f1; //fstod f1, f3
+ heapFloat[(r1+123)] = f12;
+ f12 = Math.abs(f3);
+ f3 = 1.1920928955078125e-007;
+ if(f12 >f3) //_LBB587_28
+{
+ f0 = -f0;
+ f12 = heapFloat[(r1+109)];
+ f3 = heapFloat[(r1+108)];
+ f12 = f12/f3;
+ f3 = f0/f1;
+ f12 = f12*f3;
+ f12 = f12*f1;
+ f12 = f12; //fstod f12, f12
+ f12 = Math.abs(f12);
+ f12 = f12; //fdtos f12, f12
+ f3 = 0;
+ if(f0 <=f3) //_LBB587_30
+{
+ f12 = -f12;
+}
+ f0 = f2*f2;
+ f3 = f1*f1;
+ f0 = f0+f3;
+ f3 = f12*f12;
+ f0 = f0+f3;
+ heapFloat[(g0)] = f0;
+ f0 = 1;
+ sqrtf(i7);
+ f0 = f0/f_g0;
+ f12 = -f12;
+ f2 = f2*f0;
+ f1 = f1*f0;
+ f0 = f0*f12;
+}
+ f12 = -f2;
+ f3 = -f1;
+ f4 = heapFloat[(fp+-46)];
+ f5 = f2*f4;
+ f6 = heapFloat[(fp+-45)];
+ f7 = f6*f1;
+ f8 = heapFloat[(fp+-48)];
+ f12 = f8*f12;
+ f9 = f6*f0;
+ f10 = -f0;
+ f5 = f5+f7;
+ f7 = heapFloat[(fp+-47)];
+ f11 = f7*f0;
+ f12 = f12-f9;
+ f9 = f7*f1;
+ f3 = f8*f3;
+ f7 = f7*f2;
+ f12 = f12+f9;
+ f5 = f5+f11;
+ f3 = f3-f7;
+ f0 = f4*f0;
+ f7 = f8*f10;
+ f1 = f4*f1;
+ f0 = f3+f0;
+ f3 = heapFloat[(fp+-42)];
+ f4 = f5*f3;
+ f9 = f12*f8;
+ f1 = f7-f1;
+ f2 = f6*f2;
+ f1 = f1+f2;
+ f2 = heapFloat[(fp+-44)];
+ f6 = f5*f2;
+ f7 = f0*f8;
+ f4 = f4+f9;
+ f9 = heapFloat[(fp+-43)];
+ f10 = f0*f9;
+ f5 = f5*f9;
+ f8 = f1*f8;
+ f6 = f6+f7;
+ f7 = f1*f3;
+ f4 = f4+f10;
+ f1 = f1*f2;
+ f1 = f4-f1;
+ f4 = f5+f8;
+ f2 = f12*f2;
+ f5 = f6+f7;
+ f12 = f12*f9;
+ f2 = f4+f2;
+ f0 = f0*f3;
+ f12 = f5-f12;
+ heapFloat[(r1+112)] = f1;
+ f0 = f2-f0;
+ heapFloat[(r1+113)] = f12;
+ heapFloat[(r1+114)] = f0;
+ heap32[(r1+115)] = 0;
+ heap32[(r1+131)] = 0;
+ heap32[(r1+132)] = 0;
+ heap32[(r1+133)] = 0;
+ r3 = r2 >> 2;
+ heap32[(r1+134)] = 0;
+ r4 = r5 >> 2;
+ f2 = heapFloat[(r3+1)];
+ f3 = heapFloat[(r3+5)];
+ f4 = heapFloat[(r3)];
+ f5 = heapFloat[(r3+4)];
+ f6 = heapFloat[(r4+1)];
+ f7 = heapFloat[(r4+5)];
+ f8 = heapFloat[(r4)];
+ f9 = heapFloat[(r4+4)];
+ f10 = heapFloat[(r3+2)];
+ f11 = heapFloat[(r3+6)];
+ f13 = heapFloat[(r3+9)];
+ f14 = heapFloat[(r3+8)];
+ f15 = heapFloat[(r4+2)];
+ f16 = heapFloat[(r4+6)];
+ f17 = heapFloat[(r4+9)];
+ f18 = heapFloat[(r4+8)];
+ f4 = f4*f1;
+ f5 = f5*f12;
+ f2 = f2*f1;
+ f3 = f3*f12;
+ f8 = f8*f1;
+ f9 = f9*f12;
+ f6 = f6*f1;
+ f7 = f7*f12;
+ f19 = heapFloat[(r3+10)];
+ f20 = heapFloat[(r4+10)];
+ f4 = f4+f5;
+ f5 = f14*f0;
+ f2 = f2+f3;
+ f3 = f13*f0;
+ f10 = f10*f1;
+ f11 = f11*f12;
+ f8 = f8+f9;
+ f9 = f18*f0;
+ f6 = f6+f7;
+ f7 = f17*f0;
+ f13 = f15*f1;
+ f14 = f16*f12;
+ f4 = f4+f5;
+ f2 = f2+f3;
+ f3 = f8+f9;
+ f5 = f6+f7;
+ f6 = f10+f11;
+ f7 = f19*f0;
+ f8 = f13+f14;
+ f9 = f20*f0;
+ f6 = f6+f7;
+ f7 = f8+f9;
+ f4 = f1*f4;
+ f2 = f12*f2;
+ f1 = f1*f3;
+ f12 = f12*f5;
+ f2 = f4+f2;
+ f3 = f0*f6;
+ f12 = f1+f12;
+ f0 = f0*f7;
+ f1 = f2+f3;
+ f12 = f12+f0;
+ f0 = 1;
+ f12 = f1+f12;
+ f12 = f0/f12;
+ heapFloat[(r1+120)] = f12;
+__label__ = 58;
+}
+}
+}
+_37: do {
+if (__label__ == 27){
+ r4 = r4 >> 2;
+ r3 = r3 >> 2;
+ f0 = heapFloat[(r1+72)];
+ f1 = heapFloat[(r3)];
+ f2 = heapFloat[(r1+73)];
+ f3 = heapFloat[(r3+4)];
+ f4 = heapFloat[(r1+74)];
+ f5 = heapFloat[(r1+76)];
+ f6 = heapFloat[(r3+1)];
+ f7 = heapFloat[(r1+77)];
+ f8 = heapFloat[(r3+5)];
+ f9 = heapFloat[(r1+78)];
+ f10 = heapFloat[(r4)];
+ f11 = heapFloat[(r1+88)];
+ f13 = heapFloat[(r4+4)];
+ heapFloat[(fp+-55)] = f13;
+ f14 = heapFloat[(r4+1)];
+ f15 = heapFloat[(r1+92)];
+ f13 = heapFloat[(r4+5)];
+ heapFloat[(fp+-56)] = f13;
+ f16 = heapFloat[(r3+8)];
+ f17 = heapFloat[(r3+9)];
+ f18 = heapFloat[(r4+8)];
+ heapFloat[(fp+-53)] = f18;
+ f19 = heapFloat[(r4+9)];
+ heapFloat[(fp+-54)] = f19;
+ f13 = f1*f0;
+ heapFloat[(fp+-57)] = f13;
+ f13 = f6*f5;
+ heapFloat[(fp+-61)] = f13;
+ f18 = f3*f0;
+ heapFloat[(fp+-59)] = f18;
+ f13 = f8*f5;
+ heapFloat[(fp+-62)] = f13;
+ f18 = heapFloat[(r1+80)];
+ f19 = heapFloat[(r3+2)];
+ f20 = heapFloat[(r1+81)];
+ f21 = heapFloat[(r3+6)];
+ f22 = heapFloat[(r1+82)];
+ f23 = f1*f2;
+ f24 = f6*f7;
+ f25 = f3*f2;
+ f26 = f8*f7;
+ f10 = f10*f11;
+ heapFloat[(fp+-60)] = f10;
+ f10 = f14*f15;
+ heapFloat[(fp+-63)] = f10;
+ f10 = heapFloat[(r4+2)];
+ heapFloat[(fp+-64)] = f10;
+ f13 = heapFloat[(r1+96)];
+ f14 = heapFloat[(r4+6)];
+ heapFloat[(fp+-58)] = f14;
+ f1 = f1*f4;
+ f6 = f6*f9;
+ f27 = heapFloat[(fp+-55)];
+ f27 = f27*f11;
+ f28 = heapFloat[(fp+-56)];
+ f28 = f28*f15;
+ f3 = f3*f4;
+ f8 = f8*f9;
+ f29 = heapFloat[(r3+10)];
+ f30 = heapFloat[(r4+10)];
+ heapFloat[(fp+-55)] = f30;
+ f10 = heapFloat[(fp+-57)];
+ f14 = heapFloat[(fp+-61)];
+ f10 = f10+f14;
+ heapFloat[(fp+-56)] = f10;
+ f14 = f19*f18;
+ f10 = heapFloat[(fp+-59)];
+ f30 = heapFloat[(fp+-62)];
+ f10 = f10+f30;
+ f30 = f21*f18;
+ f0 = f16*f0;
+ heapFloat[(fp+-57)] = f0;
+ f0 = f17*f5;
+ heapFloat[(fp+-59)] = f0;
+ f5 = f23+f24;
+ f23 = f19*f20;
+ f24 = f25+f26;
+ f25 = f21*f20;
+ f2 = f16*f2;
+ f7 = f17*f7;
+ f26 = heapFloat[(fp+-60)];
+ f0 = heapFloat[(fp+-63)];
+ f0 = f26+f0;
+ f26 = heapFloat[(fp+-64)];
+ f26 = f26*f13;
+ f1 = f1+f6;
+ f6 = f19*f22;
+ f19 = f27+f28;
+ f27 = heapFloat[(fp+-58)];
+ f27 = f27*f13;
+ f3 = f3+f8;
+ f8 = f21*f22;
+ f21 = heapFloat[(fp+-53)];
+ f11 = f21*f11;
+ f21 = heapFloat[(fp+-54)];
+ f15 = f21*f15;
+ f4 = f16*f4;
+ f9 = f17*f9;
+ f16 = heapFloat[(fp+-56)];
+ f14 = f16+f14;
+ f0 = f0+f26;
+ f5 = f5+f23;
+ f1 = f1+f6;
+ f6 = f10+f30;
+ f10 = f19+f27;
+ f16 = f24+f25;
+ f3 = f3+f8;
+ f8 = heapFloat[(fp+-57)];
+ f17 = heapFloat[(fp+-59)];
+ f8 = f8+f17;
+ f17 = f29*f18;
+ f2 = f2+f7;
+ f7 = f29*f20;
+ f11 = f11+f15;
+ f30 = heapFloat[(fp+-55)];
+ f13 = f30*f13;
+ f4 = f4+f9;
+ f9 = f29*f22;
+ f8 = f8+f17;
+ f11 = f11+f13;
+ f2 = f2+f7;
+ f4 = f4+f9;
+ f7 = f0*f5;
+ f9 = f10*f16;
+ f13 = f0*f1;
+ f15 = f10*f3;
+ f7 = f7+f9;
+ f9 = f11*f2;
+ f13 = f13+f15;
+ f15 = f11*f4;
+ f7 = f7+f9;
+ f9 = f13+f15;
+ f13 = heapFloat[(fp+-40)];
+if(!(f13 >=f12)) //_LBB587_44
+{
+ f13 = heapFloat[(r1+109)];
+if(!(f13 >=f12)) //_LBB587_44
+{
+ f1 = 0;
+ if(f7 <f1) //_LBB587_37
+{
+ f7 = -f7;
+}
+ f2 = 1.1920928955078125e-007;
+if(!(f7 >=f2)) //_LBB587_43
+{
+ if(f9 <f1) //_LBB587_41
+{
+ f9 = -f9;
+}
+ if(f9 <f2) //_LBB587_67
+{
+break _37;
+}
+}
+ f1 = f10*f8;
+ f2 = f11*f6;
+ f1 = f1-f2;
+ r3 = 1;
+ f2 = f11*f14;
+ f3 = f0*f8;
+ f2 = f2-f3;
+ f0 = f0*f6;
+ f3 = f10*f14;
+ f1 = -f1;
+ heap8[r0+514] = r3;
+ f0 = f0-f3;
+ f2 = -f2;
+ heapFloat[(r1+112)] = f1;
+ f0 = -f0;
+ heapFloat[(r1+113)] = f2;
+ heapFloat[(r1+114)] = f0;
+ heap32[(r1+115)] = 0;
+break _37;
+}
+}
+ f13 = f0*f14;
+ f15 = f10*f6;
+ f13 = f13+f15;
+ f15 = f11*f8;
+ f13 = f13+f15;
+ f15 = heapFloat[(fp+-40)];
+_52: do {
+ if(f15 >=f12) //_LBB587_56
+{
+ f15 = 0;
+ if(f9 <f15) //_LBB587_58
+{
+ f17 = -f9;
+}
+else{
+ f17 = f9;
+}
+ f18 = 1.1920928955078125e-007;
+ if(f17 <f18) //_LBB587_49
+{
+break _52;
+}
+else{
+ r3 = 1;
+ heap8[r0+514] = r3;
+ f17 = heapFloat[(fp+-40)];
+ if(f17 <f12) //_LBB587_49
+{
+break _52;
+}
+else{
+ heapFloat[(g0)] = f7;
+ heapFloat[(g0+1)] = f13;
+ atan2f(i7);
+ f9 = f_g0;
+ f12 = heapFloat[(r1+108)];
+ if(f12 >=f9) //_LBB587_63
+{
+ f17 = -f12;
+ if(f9 <f17) //_LBB587_65
+{
+ heapFloat[(g0)] = f12;
+ cosf(i7);
+ f13 = f_g0;
+ f7 = heapFloat[(r1+108)];
+ heapFloat[(g0)] = f7;
+ sinf(i7);
+ f7 = -f_g0;
+ f9 = 0;
+}
+else{
+ f9 = f15;
+}
+}
+else{
+ heapFloat[(g0)] = f12;
+ cosf(i7);
+ f13 = f_g0;
+ f9 = heapFloat[(r1+108)];
+ heapFloat[(g0)] = f9;
+ f9 = 0;
+ sinf(i7);
+ f7 = f_g0;
+}
+}
+}
+}
+else{
+ f15 = 0;
+ if(f7 <f15) //_LBB587_47
+{
+ f17 = -f7;
+}
+else{
+ f17 = f7;
+}
+ f18 = 1.1920928955078125e-007;
+ if(f17 >=f18) //_LBB587_50
+{
+ r3 = 1;
+ heap8[r0+514] = r3;
+ f17 = heapFloat[(r1+109)];
+if(!(f17 <f12)) //_LBB587_49
+{
+ heapFloat[(g0)] = f9;
+ heapFloat[(g0+1)] = f13;
+ atan2f(i7);
+ f7 = f_g0;
+ f12 = heapFloat[(r1+109)];
+ if(f12 >=f7) //_LBB587_53
+{
+ f17 = -f12;
+ if(f7 <f17) //_LBB587_55
+{
+ heapFloat[(g0)] = f12;
+ cosf(i7);
+ f13 = f_g0;
+ f7 = heapFloat[(r1+109)];
+ heapFloat[(g0)] = f7;
+ sinf(i7);
+ f9 = -f_g0;
+ f7 = 0;
+}
+else{
+ f7 = f15;
+}
+}
+else{
+ heapFloat[(g0)] = f12;
+ cosf(i7);
+ f13 = f_g0;
+ f7 = heapFloat[(r1+109)];
+ heapFloat[(g0)] = f7;
+ f7 = 0;
+ sinf(i7);
+ f9 = f_g0;
+}
+}
+}
+}
+} while(0);
+ f12 = f14*f13;
+ f5 = f5*f7;
+ f6 = f6*f13;
+ f14 = f16*f7;
+ f5 = f12+f5;
+ f1 = f1*f9;
+ f6 = f6+f14;
+ f3 = f3*f9;
+ f8 = f8*f13;
+ f2 = f2*f7;
+ f1 = f5+f1;
+ f3 = f6+f3;
+ f2 = f8+f2;
+ f4 = f4*f9;
+ f2 = f2+f4;
+ f4 = f1*f1;
+ f5 = f3*f3;
+ f4 = f4+f5;
+ f5 = f2*f2;
+ f4 = f4+f5;
+ heapFloat[(g0)] = f4;
+ f4 = 1;
+ sqrtf(i7);
+ f5 = f4/f_g0;
+ f2 = f2*f5;
+ f3 = f3*f5;
+ f1 = f1*f5;
+ f5 = f10*f2;
+ f6 = f11*f3;
+ f5 = f5-f6;
+ f6 = f11*f1;
+ f2 = f0*f2;
+ f2 = f6-f2;
+ f6 = -f5;
+ f0 = f0*f3;
+ f1 = f10*f1;
+ f0 = f0-f1;
+ f1 = -f2;
+ heapFloat[(r1+112)] = f6;
+ f3 = -f0;
+ heapFloat[(r1+113)] = f1;
+ heapFloat[(r1+114)] = f3;
+ heap32[(r1+115)] = 0;
+ f1 = f5*f5;
+ f2 = f2*f2;
+ f1 = f1+f2;
+ f0 = f0*f0;
+ f0 = f1+f0;
+ heapFloat[(g0)] = f0;
+ sqrtf(i7);
+ heapFloat[(r1+123)] = f_g0;
+ f0 = heapFloat[(r1+112)];
+ f1 = heapFloat[(r1+113)];
+ f2 = heapFloat[(r1+114)];
+ f0 = f0*f0;
+ f1 = f1*f1;
+ f0 = f0+f1;
+ f1 = f2*f2;
+ f0 = f0+f1;
+ heapFloat[(g0)] = f0;
+ sqrtf(i7);
+ f0 = f4/f_g0;
+ f1 = heapFloat[(r1+112)];
+ f1 = f1*f0;
+ heapFloat[(r1+112)] = f1;
+ f1 = heapFloat[(r1+113)];
+ f1 = f1*f0;
+ heapFloat[(r1+113)] = f1;
+ f1 = heapFloat[(r1+114)];
+ f0 = f1*f0;
+ heapFloat[(r1+114)] = f0;
+}
+} while(0);
+ f0 = heapFloat[(r1+110)];
+ f1 = 0;
+ if(f0 <f1) //_LBB587_82
+{
+ heap32[(r1+125)] = 0;
+break _8;
+}
+else{
+ f0 = -1;
+ f1 = heapFloat[(fp+-41)];
+ f1 = f1 < f0 ? f0 : f1;
+ f2 = 1;
+ f1 = f1 > f2 ? f2 : f1;
+ heapFloat[(g0)] = f1;
+ acosf(i7);
+ f1 = f_g0+f_g0;
+ heapFloat[(r1+125)] = f1;
+ f3 = 3.1415927410125732;
+ if(f1 >f3) //_LBB587_70
+{
+ f1 = heapFloat[(fp+-41)];
+ f1 = -f1;
+ f1 = f1 < f0 ? f0 : f1;
+ f0 = 1;
+ f1 = f1 > f0 ? f0 : f1;
+ heapFloat[(g0)] = f1;
+ acosf(i7);
+ f0 = heapFloat[(fp+-39)];
+ f0 = -f0;
+ heapFloat[(fp+-39)] = f0;
+ f0 = heapFloat[(fp+-38)];
+ f0 = -f0;
+ heapFloat[(fp+-38)] = f0;
+ f0 = heapFloat[(fp+-37)];
+ f0 = -f0;
+ heapFloat[(fp+-37)] = f0;
+ f1 = f_g0+f_g0;
+ heapFloat[(r1+125)] = f1;
+}
+ f0 = 1.1920928955078125e-007;
+ if(f1 >f0) //_LBB587_73
+{
+ f1 = heapFloat[(fp+-37)];
+ f0 = f1*f1;
+ f3 = heapFloat[(fp+-38)];
+ f4 = f3*f3;
+ f0 = f0+f4;
+ f4 = heapFloat[(fp+-39)];
+ f5 = f4*f4;
+ f0 = f0+f5;
+ heapFloat[(g0)] = f0;
+ f0 = 1;
+ sqrtf(i7);
+ f0 = f0/f_g0;
+ f1 = f1*f0;
+ heapFloat[(fp+-37)] = f1;
+ f3 = f3*f0;
+ heapFloat[(fp+-38)] = f3;
+ f4 = f4*f0;
+ heapFloat[(fp+-39)] = f4;
+ f1 = heapFloat[(r1+125)];
+}
+ f0 = heapFloat[(r1+110)];
+ f3 = heapFloat[(r1+104)];
+ f4 = f0*f3;
+if(!(f1 <=f4)) //_LBB587_80
+{
+ r3 = 1;
+ heap8[r0+513] = r3;
+ if(f1 >=f0) //_LBB587_77
+{
+__label__ = 66;
+}
+else{
+ f5 = 0.99999988079071045;
+ if(f3 <f5) //_LBB587_78
+{
+ f3 = f1-f4;
+ f0 = f0-f4;
+ f0 = f3/f0;
+__label__ = 68;
+}
+else{
+__label__ = 66;
+}
+}
+if (__label__ == 66){
+ f0 = f2;
+}
+ f3 = heapFloat[(fp+-37)];
+ f5 = -f3;
+ f6 = heapFloat[(fp+-38)];
+ f7 = -f6;
+ f8 = heapFloat[(fp+-46)];
+ f9 = f3*f8;
+ f10 = heapFloat[(fp+-45)];
+ f11 = f10*f6;
+ f12 = heapFloat[(fp+-48)];
+ f5 = f12*f5;
+ f13 = heapFloat[(fp+-39)];
+ f14 = f10*f13;
+ f15 = -f13;
+ f9 = f9+f11;
+ f11 = heapFloat[(fp+-47)];
+ f16 = f11*f13;
+ f5 = f5-f14;
+ f14 = f11*f6;
+ f7 = f12*f7;
+ f11 = f11*f3;
+ f5 = f5+f14;
+ f9 = f9+f16;
+ f7 = f7-f11;
+ f11 = f8*f13;
+ f13 = f12*f15;
+ f6 = f8*f6;
+ f7 = f7+f11;
+ f8 = heapFloat[(fp+-42)];
+ f11 = f9*f8;
+ f14 = f5*f12;
+ f6 = f13-f6;
+ f3 = f10*f3;
+ f3 = f6+f3;
+ f6 = heapFloat[(fp+-44)];
+ f10 = f9*f6;
+ f13 = f7*f12;
+ f11 = f11+f14;
+ f14 = heapFloat[(fp+-43)];
+ f15 = f7*f14;
+ f9 = f9*f14;
+ f12 = f3*f12;
+ f10 = f10+f13;
+ f13 = f3*f8;
+ f11 = f11+f15;
+ f3 = f3*f6;
+ f1 = f1-f4;
+ heapFloat[(r1+130)] = f0;
+ f0 = f9+f12;
+ f4 = f5*f6;
+ f6 = f10+f13;
+ f5 = f5*f14;
+ f3 = f11-f3;
+ heapFloat[(r1+124)] = f1;
+ f0 = f0+f4;
+ f1 = f7*f8;
+ f4 = f6-f5;
+ heapFloat[(r1+116)] = f3;
+ f0 = f0-f1;
+ heapFloat[(r1+117)] = f4;
+ heapFloat[(r1+118)] = f0;
+ r2 = r2 >> 2;
+ heap32[(r1+119)] = 0;
+ r3 = r5 >> 2;
+ f1 = heapFloat[(r2+1)];
+ f5 = heapFloat[(r2+5)];
+ f6 = heapFloat[(r2)];
+ f7 = heapFloat[(r2+4)];
+ f8 = heapFloat[(r3+1)];
+ f9 = heapFloat[(r3+5)];
+ f10 = heapFloat[(r3)];
+ f11 = heapFloat[(r3+4)];
+ f12 = heapFloat[(r2+2)];
+ f13 = heapFloat[(r2+6)];
+ f14 = heapFloat[(r2+9)];
+ f15 = heapFloat[(r2+8)];
+ f16 = heapFloat[(r3+2)];
+ f17 = heapFloat[(r3+6)];
+ f18 = heapFloat[(r3+9)];
+ f19 = heapFloat[(r3+8)];
+ f6 = f6*f3;
+ f7 = f7*f4;
+ f1 = f1*f3;
+ f5 = f5*f4;
+ f10 = f10*f3;
+ f11 = f11*f4;
+ f8 = f8*f3;
+ f9 = f9*f4;
+ f20 = heapFloat[(r2+10)];
+ f21 = heapFloat[(r3+10)];
+ f6 = f6+f7;
+ f7 = f15*f0;
+ f1 = f1+f5;
+ f5 = f14*f0;
+ f12 = f12*f3;
+ f13 = f13*f4;
+ f10 = f10+f11;
+ f11 = f19*f0;
+ f8 = f8+f9;
+ f9 = f18*f0;
+ f14 = f16*f3;
+ f15 = f17*f4;
+ f6 = f6+f7;
+ f1 = f1+f5;
+ f5 = f10+f11;
+ f7 = f8+f9;
+ f8 = f12+f13;
+ f9 = f20*f0;
+ f10 = f14+f15;
+ f11 = f21*f0;
+ f8 = f8+f9;
+ f9 = f10+f11;
+ f6 = f3*f6;
+ f1 = f4*f1;
+ f3 = f3*f5;
+ f4 = f4*f7;
+ f1 = f6+f1;
+ f5 = f0*f8;
+ f3 = f3+f4;
+ f0 = f0*f9;
+ f1 = f1+f5;
+ f0 = f3+f0;
+ f0 = f1+f0;
+ f0 = f2/f0;
+ heapFloat[(r1+121)] = f0;
+}
+ r0 = heapU8[r0+514];
+ if(r0 ==0) //_LBB587_83
+{
+break _8;
+}
+else{
+ f0 = heapFloat[(fp+-37)];
+ f1 = -f0;
+ f2 = heapFloat[(fp+-38)];
+ f3 = -f2;
+ f4 = heapFloat[(fp+-52)];
+ f1 = f4*f1;
+ f6 = heapFloat[(fp+-39)];
+ f5 = heapFloat[(fp+-50)];
+ f7 = f5*f6;
+ f8 = heapFloat[(fp+-49)];
+ f9 = f0*f8;
+ f10 = f5*f2;
+ f11 = -f6;
+ f1 = f1-f7;
+ f7 = heapFloat[(fp+-51)];
+ f12 = f7*f2;
+ f9 = f9+f10;
+ f10 = f7*f6;
+ f3 = f4*f3;
+ f13 = f7*f0;
+ f1 = f1+f12;
+ f9 = f9+f10;
+ f3 = f3-f13;
+ f6 = f8*f6;
+ f10 = f4*f11;
+ f2 = f8*f2;
+ f3 = f3+f6;
+ f6 = f1*f4;
+ f11 = f9*f8;
+ f2 = f10-f2;
+ f0 = f5*f0;
+ f0 = f2+f0;
+ f2 = f3*f4;
+ f10 = f9*f5;
+ f6 = f6-f11;
+ f11 = f3*f7;
+ f4 = f0*f4;
+ f9 = f9*f7;
+ f2 = f2-f10;
+ f10 = f0*f8;
+ f6 = f6-f11;
+ f0 = f0*f5;
+ f0 = f6+f0;
+ f4 = f4-f9;
+ f5 = f1*f5;
+ f2 = f2-f10;
+ f1 = f1*f7;
+ f4 = f4-f5;
+ f3 = f3*f8;
+ f1 = f2+f1;
+ heapFloat[(r1+131)] = f0;
+ f0 = f4+f3;
+ heapFloat[(r1+132)] = f1;
+ heapFloat[(r1+133)] = f0;
+ heap32[(r1+134)] = 0;
+ return;
+}
+}
+}
+}
+ r0 = _2E_str584;
+ r1 = _2E_str685;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 188;
+ _assert(i7);
+}
+} while(0);
+ return;
+}
+
+function _ZN15btJacobianEntryC2ERK9btVector3RK11btMatrix3x3S5_S2_S2_(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+ var f10;
+ var f11;
+ var f12;
+ var f13;
+ var f14;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ heap32[(r0)] = 0;
+ heap32[(r0+1)] = 0;
+ r1 = heap32[(fp+1)];
+ r2 = heap32[(fp+2)];
+ heap32[(r0+2)] = 0;
+ r1 = r1 >> 2;
+ heap32[(r0+3)] = 0;
+ r2 = r2 >> 2;
+ f0 = heapFloat[(r1)];
+ f1 = heapFloat[(r2)];
+ f2 = heapFloat[(r1+1)];
+ f3 = heapFloat[(r2+1)];
+ f4 = heapFloat[(r2+4)];
+ f5 = heapFloat[(r2+5)];
+ f1 = f1*f0;
+ f3 = f3*f2;
+ f6 = heapFloat[(r1+2)];
+ f7 = heapFloat[(r2+2)];
+ f8 = heapFloat[(r2+8)];
+ f9 = heapFloat[(r2+9)];
+ f10 = heapFloat[(r2+10)];
+ f11 = heapFloat[(r2+6)];
+ f4 = f4*f0;
+ f5 = f5*f2;
+ f1 = f1+f3;
+ f3 = f7*f6;
+ f0 = f8*f0;
+ f2 = f9*f2;
+ f4 = f4+f5;
+ f5 = f11*f6;
+ f1 = f1+f3;
+ f0 = f0+f2;
+ f2 = f10*f6;
+ f3 = f4+f5;
+ heapFloat[(r0+4)] = f1;
+ f0 = f0+f2;
+ heapFloat[(r0+5)] = f3;
+ heapFloat[(r0+6)] = f0;
+ heap32[(r0+7)] = 0;
+ r2 = heap32[(fp+3)];
+ r2 = r2 >> 2;
+ f2 = heapFloat[(r1)];
+ f2 = -f2;
+ f4 = heapFloat[(r2)];
+ f5 = heapFloat[(r1+1)];
+ f6 = heapFloat[(r2+1)];
+ f7 = heapFloat[(r2+4)];
+ f8 = heapFloat[(r2+5)];
+ f4 = f4*f2;
+ f6 = f6*f5;
+ f9 = heapFloat[(r1+2)];
+ f10 = heapFloat[(r2+2)];
+ f11 = heapFloat[(r2+8)];
+ f12 = heapFloat[(r2+9)];
+ f13 = heapFloat[(r2+10)];
+ f14 = heapFloat[(r2+6)];
+ f7 = f7*f2;
+ f8 = f8*f5;
+ f4 = f4-f6;
+ f6 = f10*f9;
+ f2 = f11*f2;
+ f5 = f12*f5;
+ f7 = f7-f8;
+ f8 = f14*f9;
+ f4 = f4-f6;
+ f2 = f2-f5;
+ f5 = f13*f9;
+ f6 = f7-f8;
+ heapFloat[(r0+8)] = f4;
+ f2 = f2-f5;
+ heapFloat[(r0+9)] = f6;
+ r1 = heap32[(fp+4)];
+ heapFloat[(r0+10)] = f2;
+ r1 = r1 >> 2;
+ heap32[(r0+11)] = 0;
+ f5 = heapFloat[(r1+2)];
+ f7 = heapFloat[(r1+1)];
+ f8 = heapFloat[(r1)];
+ f8 = f8*f1;
+ f7 = f7*f3;
+ heapFloat[(r0+12)] = f8;
+ f5 = f5*f0;
+ heapFloat[(r0+13)] = f7;
+ r1 = heap32[(fp+5)];
+ heapFloat[(r0+14)] = f5;
+ r1 = r1 >> 2;
+ heap32[(r0+15)] = 0;
+ f9 = heapFloat[(r1+2)];
+ f10 = heapFloat[(r1+1)];
+ f11 = heapFloat[(r1)];
+ f10 = f10*f6;
+ f11 = f11*f4;
+ f9 = f9*f2;
+ heapFloat[(r0+16)] = f11;
+ f1 = f8*f1;
+ f3 = f7*f3;
+ f4 = f11*f4;
+ f6 = f10*f6;
+ heapFloat[(r0+17)] = f10;
+ f1 = f1+f3;
+ f0 = f5*f0;
+ f3 = f4+f6;
+ f2 = f9*f2;
+ heapFloat[(r0+18)] = f9;
+ f0 = f1+f0;
+ f1 = f3+f2;
+ f0 = f0+f1;
+ heap32[(r0+19)] = 0;
+ f1 = 0;
+ heapFloat[(r0+20)] = f0;
+ if(f0 >f1) //_LBB588_2
+{
+ return;
+}
+else{
+ r0 = _2E_str846;
+ r1 = _2E_str947;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 70;
+ _assert(i7);
+}
+}
+
+function _Z21btAdjustAngleToLimitsfff(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ f0 = heapFloat[(fp+1)];
+ f1 = heapFloat[(fp+2)];
+ f2 = heapFloat[(fp)];
+_1: do {
+if(!(f0 >=f1)) //_LBB589_39
+{
+ if(f2 >=f0) //_LBB589_20
+{
+ if(f2 <=f1) //_LBB589_39
+{
+break _1;
+}
+else{
+ f1 = f2-f1;
+ heapFloat[(g0)] = f1;
+ heap32[(g0+1)] = 1086918619;
+ fmodf(i7);
+ f1 = f_g0;
+ f3 = -3.1415927410125732;
+ if(f1 >=f3) //_LBB589_23
+{
+ f4 = 3.1415927410125732;
+ if(f1 >f4) //_LBB589_25
+{
+ f4 = -6.2831854820251465;
+ f1 = f1+f4;
+}
+}
+else{
+ f4 = 6.2831854820251465;
+ f1 = f1+f4;
+}
+ f4 = 0;
+ if(f1 <f4) //_LBB589_28
+{
+ f1 = -f1;
+}
+ f0 = f2-f0;
+ heapFloat[(g0)] = f0;
+ heap32[(g0+1)] = 1086918619;
+ fmodf(i7);
+ f0 = f_g0;
+ if(f0 >=f3) //_LBB589_31
+{
+ f3 = 3.1415927410125732;
+ if(f0 >f3) //_LBB589_33
+{
+ f3 = -6.2831854820251465;
+ f0 = f0+f3;
+}
+}
+else{
+ f3 = 6.2831854820251465;
+ f0 = f0+f3;
+}
+ if(f0 <f4) //_LBB589_36
+{
+ f0 = -f0;
+}
+ if(f0 >=f1) //_LBB589_39
+{
+break _1;
+}
+else{
+ f0 = -6.2831854820251465;
+ f2 = f2+f0;
+}
+}
+}
+else{
+ f0 = f0-f2;
+ heapFloat[(g0)] = f0;
+ heap32[(g0+1)] = 1086918619;
+ fmodf(i7);
+ f0 = f_g0;
+ f3 = -3.1415927410125732;
+ if(f0 >=f3) //_LBB589_4
+{
+ f4 = 3.1415927410125732;
+ if(f0 >f4) //_LBB589_6
+{
+ f4 = -6.2831854820251465;
+ f0 = f0+f4;
+}
+}
+else{
+ f4 = 6.2831854820251465;
+ f0 = f0+f4;
+}
+ f4 = 0;
+ if(f0 <f4) //_LBB589_9
+{
+ f0 = -f0;
+}
+ f1 = f1-f2;
+ heapFloat[(g0)] = f1;
+ heap32[(g0+1)] = 1086918619;
+ fmodf(i7);
+ f1 = f_g0;
+ if(f1 >=f3) //_LBB589_12
+{
+ f3 = 3.1415927410125732;
+ if(f1 >f3) //_LBB589_14
+{
+ f3 = -6.2831854820251465;
+ f1 = f1+f3;
+}
+}
+else{
+ f3 = 6.2831854820251465;
+ f1 = f1+f3;
+}
+ if(f1 <f4) //_LBB589_17
+{
+ f1 = -f1;
+}
+if(!(f0 <f1)) //_LBB589_39
+{
+ f0 = 6.2831854820251465;
+ f0 = f2+f0;
+ f_g0 = f0;
+ return;
+}
+}
+}
+} while(0);
+ f_g0 = f2;
+ return;
+}
+
+function _ZNK17btHingeConstraint28calculateSerializeBufferSizeEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = 212;
+ r_g0 = r0;
+ return;
+}
+
+function _ZNK17btHingeConstraint9serializeEPvP12btSerializer(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = heap32[(fp+1)];
+ r2 = heap32[(fp+2)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = r2;
+ r1 = r1 >> 2;
+ r2 = r0 >> 2;
+ _ZNK17btTypedConstraint9serializeEPvP12btSerializer(i7);
+ heap32[(r1+11)] = heap32[(r2+135)];
+ heap32[(r1+12)] = heap32[(r2+136)];
+ heap32[(r1+13)] = heap32[(r2+137)];
+ heap32[(r1+14)] = heap32[(r2+138)];
+ heap32[(r1+15)] = heap32[(r2+139)];
+ heap32[(r1+16)] = heap32[(r2+140)];
+ heap32[(r1+17)] = heap32[(r2+141)];
+ heap32[(r1+18)] = heap32[(r2+142)];
+ heap32[(r1+19)] = heap32[(r2+143)];
+ heap32[(r1+20)] = heap32[(r2+144)];
+ heap32[(r1+21)] = heap32[(r2+145)];
+ heap32[(r1+22)] = heap32[(r2+146)];
+ heap32[(r1+23)] = heap32[(r2+147)];
+ heap32[(r1+24)] = heap32[(r2+148)];
+ heap32[(r1+25)] = heap32[(r2+149)];
+ heap32[(r1+26)] = heap32[(r2+150)];
+ heap32[(r1+27)] = heap32[(r2+151)];
+ heap32[(r1+28)] = heap32[(r2+152)];
+ heap32[(r1+29)] = heap32[(r2+153)];
+ heap32[(r1+30)] = heap32[(r2+154)];
+ heap32[(r1+31)] = heap32[(r2+155)];
+ heap32[(r1+32)] = heap32[(r2+156)];
+ heap32[(r1+33)] = heap32[(r2+157)];
+ heap32[(r1+34)] = heap32[(r2+158)];
+ heap32[(r1+35)] = heap32[(r2+159)];
+ heap32[(r1+36)] = heap32[(r2+160)];
+ heap32[(r1+37)] = heap32[(r2+161)];
+ heap32[(r1+38)] = heap32[(r2+162)];
+ heap32[(r1+39)] = heap32[(r2+163)];
+ heap32[(r1+40)] = heap32[(r2+164)];
+ heap32[(r1+41)] = heap32[(r2+165)];
+ heap32[(r1+42)] = heap32[(r2+166)];
+ r3 = heapU8[r0+720];
+ heap32[(r1+44)] = r3;
+ r3 = heapU8[r0+721];
+ heap32[(r1+45)] = r3;
+ heap32[(r1+47)] = heap32[(r2+168)];
+ heap32[(r1+46)] = heap32[(r2+167)];
+ r0 = heapU8[r0+725];
+ heap32[(r1+43)] = r0;
+ heap32[(r1+48)] = heap32[(r2+172)];
+ heap32[(r1+49)] = heap32[(r2+173)];
+ heap32[(r1+50)] = heap32[(r2+169)];
+ heap32[(r1+51)] = heap32[(r2+170)];
+ heap32[(r1+52)] = heap32[(r2+171)];
+ r0 = _2E_str29;
+ r_g0 = r0;
+ return;
+}
+
+function _ZN17btHingeConstraintD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV17btHingeConstraint;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZN17btHingeConstraintD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV17btHingeConstraint;
+ r0 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r0)] = r1;
+ return;
+}
+
+function _ZN17btHingeConstraint13buildJacobianEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+ var f10;
+ var f11;
+ var f12;
+ var f13;
+ var f14;
+ var f15;
+ var f16;
+ var f17;
+ var f18;
+ var f19;
+ var f20;
+ var f21;
+ var f22;
+ var f23;
+var __label__ = 0;
+ i7 = sp + -552;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = heapU8[r0+723];
+if(!(r1 ==0)) //_LBB594_25
+{
+ r1 = r0 >> 2;
+ heap32[(r1+7)] = 0;
+ heap32[(r1+182)] = 0;
+ r2 = heapU8[r0+720];
+if(!(r2 !=0)) //_LBB594_13
+{
+ r2 = heap32[(r1+6)];
+ r3 = heap32[(r1+5)];
+ r2 = r2 >> 2;
+ r3 = r3 >> 2;
+ f0 = heapFloat[(r2+5)];
+ f1 = heapFloat[(r1+163)];
+ f2 = heapFloat[(r2+1)];
+ f3 = heapFloat[(r2+6)];
+ f4 = heapFloat[(r1+164)];
+ f5 = heapFloat[(r2+2)];
+ f6 = heapFloat[(r3+5)];
+ f7 = heapFloat[(r1+147)];
+ f8 = heapFloat[(r3+1)];
+ f9 = heapFloat[(r3+6)];
+ f10 = heapFloat[(r1+148)];
+ f11 = heapFloat[(r3+2)];
+ f12 = heapFloat[(r2+9)];
+ f13 = heapFloat[(r2+10)];
+ f14 = heapFloat[(r3+9)];
+ f15 = heapFloat[(r3+10)];
+ f0 = f0*f1;
+ f3 = f3*f4;
+ f16 = heapFloat[(r2+7)];
+ f17 = heapFloat[(r1+165)];
+ f18 = heapFloat[(r2+3)];
+ f6 = f6*f7;
+ f9 = f9*f10;
+ f19 = heapFloat[(r3+7)];
+ f20 = heapFloat[(r1+149)];
+ f21 = heapFloat[(r3+3)];
+ f2 = f2*f1;
+ f5 = f5*f4;
+ f8 = f8*f7;
+ f11 = f11*f10;
+ f22 = heapFloat[(r2+11)];
+ f23 = heapFloat[(r3+11)];
+ f1 = f12*f1;
+ f4 = f13*f4;
+ f7 = f14*f7;
+ f10 = f15*f10;
+ f0 = f0+f3;
+ f3 = f16*f17;
+ f6 = f6+f9;
+ f9 = f19*f20;
+ f2 = f2+f5;
+ f5 = f18*f17;
+ f8 = f8+f11;
+ f11 = f21*f20;
+ f1 = f1+f4;
+ f4 = f22*f17;
+ f7 = f7+f10;
+ f10 = f23*f20;
+ f0 = f0+f3;
+ f3 = heapFloat[(r2+14)];
+ f6 = f6+f9;
+ f9 = heapFloat[(r3+14)];
+ f2 = f2+f5;
+ f5 = heapFloat[(r2+13)];
+ f8 = f8+f11;
+ f11 = heapFloat[(r3+13)];
+ f0 = f0+f3;
+ f3 = f6+f9;
+ f2 = f2+f5;
+ f5 = f8+f11;
+ f1 = f1+f4;
+ f4 = heapFloat[(r2+15)];
+ f6 = f7+f10;
+ f7 = heapFloat[(r3+15)];
+ f8 = f0-f3;
+ f9 = f2-f5;
+ f1 = f1+f4;
+ f4 = f6+f7;
+ f6 = f1-f4;
+ f7 = f9*f9;
+ f10 = f8*f8;
+ f7 = f7+f10;
+ f10 = f6*f6;
+ f7 = f7+f10;
+ f10 = 1.1920928955078125e-007;
+ if(f7 >f10) //_LBB594_4
+{
+ heapFloat[(g0)] = f7;
+ f10 = 1;
+ sqrtf(i7);
+ f11 = f10/f_g0;
+ r2 = sp + -512;
+ f7 = f9*f11;
+ f8 = f8*f11;
+ r3 = r2 >> 2;
+ heapFloat[(fp+-128)] = f7;
+ f6 = f6*f11;
+ heapFloat[(r3+1)] = f8;
+ r2 = (r2 + 8)|0;
+ heapFloat[(r3+2)] = f6;
+ heap32[(r3+3)] = 0;
+ f9 = 0;
+ if(f6 <f9) //_LBB594_6
+{
+ f9 = -f6;
+}
+else{
+ f9 = f6;
+}
+ f11 = 0.70710676908493042;
+ if(f9 >f11) //_LBB594_9
+{
+ f7 = f8*f8;
+ f8 = f6*f6;
+ f7 = f7+f8;
+ heapFloat[(g0)] = f7;
+ sqrtf(i7);
+ heap32[(r3+4)] = 0;
+ f6 = heapFloat[(r3+2)];
+ f8 = f10/f_g0;
+ f6 = -f6;
+ f6 = f8*f6;
+ heapFloat[(r3+5)] = f6;
+ f9 = heapFloat[(r3+1)];
+ f9 = f9*f8;
+ f7 = f7*f8;
+ heapFloat[(r3+6)] = f9;
+ heapFloat[(r3+8)] = f7;
+ f7 = heapFloat[(fp+-128)];
+ f8 = -f7;
+ f8 = f9*f8;
+ f7 = f7*f6;
+ heapFloat[(r3+9)] = f8;
+ heapFloat[(r3+10)] = f7;
+__label__ = 10;
+}
+else{
+__label__ = 9;
+}
+}
+else{
+ r2 = sp + -512;
+ r3 = r2 >> 2;
+ heap32[(fp+-128)] = 1065353216;
+ heap32[(r3+1)] = 0;
+ r2 = (r2 + 8)|0;
+ f7 = 1;
+ f8 = 0;
+ heap32[(r3+2)] = 0;
+ heap32[(r3+3)] = 0;
+__label__ = 9;
+}
+if (__label__ == 9){
+ f6 = f7*f7;
+ f7 = f8*f8;
+ f6 = f6+f7;
+ r3 = sp + -512;
+ heapFloat[(g0)] = f6;
+ r3 = r3 >> 2;
+ sqrtf(i7);
+ f8 = 1;
+ f9 = heapFloat[(r3+1)];
+ f7 = f8/f_g0;
+ f8 = -f9;
+ f8 = f7*f8;
+ heapFloat[(r3+4)] = f8;
+ f9 = heapFloat[(fp+-128)];
+ f9 = f9*f7;
+ heapFloat[(r3+5)] = f9;
+ r2 = r2 >> 2;
+ heap32[(r3+6)] = 0;
+ f10 = heapFloat[(r2)];
+ f11 = -f10;
+ f9 = f9*f11;
+ f8 = f10*f8;
+ heapFloat[(r3+8)] = f9;
+ f6 = f6*f7;
+ heapFloat[(r3+9)] = f8;
+ heapFloat[(r3+10)] = f6;
+}
+ r2 = (r0 + 36)|0;
+ r3 = 0;
+_16: while(true){
+ r4 = heap32[(r1+5)];
+ r5 = r4 >> 2;
+ r6 = sp + -416;
+ r7 = r6 >> 2;
+ heap32[(fp+-104)] = heap32[(r5+1)];
+ heap32[(r7+1)] = heap32[(r5+5)];
+ heap32[(r7+2)] = heap32[(r5+9)];
+ heap32[(r7+3)] = 0;
+ heap32[(r7+4)] = heap32[(r5+2)];
+ heap32[(r7+5)] = heap32[(r5+6)];
+ heap32[(r7+6)] = heap32[(r5+10)];
+ heap32[(r7+7)] = 0;
+ heap32[(r7+8)] = heap32[(r5+3)];
+ heap32[(r7+9)] = heap32[(r5+7)];
+ heap32[(r7+10)] = heap32[(r5+11)];
+ heap32[(r7+11)] = 0;
+ r7 = heap32[(r1+6)];
+ r8 = sp + -368;
+ r9 = r7 >> 2;
+ r10 = r8 >> 2;
+ heap32[(fp+-92)] = heap32[(r9+1)];
+ heap32[(r10+1)] = heap32[(r9+5)];
+ heap32[(r10+2)] = heap32[(r9+9)];
+ heap32[(r10+3)] = 0;
+ heap32[(r10+4)] = heap32[(r9+2)];
+ heap32[(r10+5)] = heap32[(r9+6)];
+ heap32[(r10+6)] = heap32[(r9+10)];
+ heap32[(r10+7)] = 0;
+ heap32[(r10+8)] = heap32[(r9+3)];
+ heap32[(r10+9)] = heap32[(r9+7)];
+ heap32[(r10+10)] = heap32[(r9+11)];
+ heap32[(r10+11)] = 0;
+ f6 = heapFloat[(r5+13)];
+ f7 = heapFloat[(r5+15)];
+ f8 = heapFloat[(r5+14)];
+ r10 = sp + -320;
+ f6 = f5-f6;
+ r11 = r10 >> 2;
+ f8 = f3-f8;
+ heapFloat[(fp+-80)] = f6;
+ f6 = f4-f7;
+ heapFloat[(r11+1)] = f8;
+ heapFloat[(r11+2)] = f6;
+ heap32[(r11+3)] = 0;
+ f6 = heapFloat[(r9+13)];
+ f7 = heapFloat[(r9+15)];
+ f8 = heapFloat[(r9+14)];
+ r11 = sp + -304;
+ f6 = f2-f6;
+ r12 = r11 >> 2;
+ f8 = f0-f8;
+ heapFloat[(fp+-76)] = f6;
+ f6 = f1-f7;
+ heapFloat[(r12+1)] = f8;
+ heapFloat[(r12+2)] = f6;
+ heap32[(r12+3)] = 0;
+ f6 = heapFloat[(r9+84)];
+ f7 = heapFloat[(r5+84)];
+ r5 = sp + -512;
+ r5 = (r5 + r3)|0;
+ r4 = (r4 + 388)|0;
+ r7 = (r7 + 388)|0;
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = r6;
+ heap32[(g0+2)] = r8;
+ heap32[(g0+3)] = r10;
+ heap32[(g0+4)] = r11;
+ heap32[(g0+5)] = r5;
+ heap32[(g0+6)] = r4;
+ heapFloat[(g0+7)] = f7;
+ heap32[(g0+8)] = r7;
+ heapFloat[(g0+9)] = f6;
+ r3 = (r3 + 16)|0;
+ r2 = (r2 + 84)|0;
+ _ZN15btJacobianEntryC2ERK11btMatrix3x3S2_RK9btVector3S5_S5_S5_fS5_f(i7);
+if(!(r3 !=48)) //_LBB594_12
+{
+break _16;
+}
+}
+}
+ f0 = heapFloat[(r1+145)];
+ f1 = heapFloat[(r1+137)];
+ f2 = heapFloat[(r1+141)];
+ f3 = 0;
+ if(f0 <f3) //_LBB594_15
+{
+ f4 = -f0;
+}
+else{
+ f4 = f0;
+}
+ f5 = 0.70710676908493042;
+ if(f4 <=f5) //_LBB594_18
+{
+ f4 = f1*f1;
+ f6 = f2*f2;
+ f5 = f4+f6;
+ heapFloat[(g0)] = f5;
+ f4 = 1;
+ sqrtf(i7);
+ f7 = f4/f_g0;
+ f2 = -f2;
+ f4 = f7*f2;
+ f6 = f1*f7;
+ f1 = -f0;
+ f2 = f6*f1;
+ f0 = f0*f4;
+ f1 = f5*f7;
+}
+else{
+ f3 = f2*f2;
+ f4 = f0*f0;
+ f4 = f3+f4;
+ heapFloat[(g0)] = f4;
+ f3 = 1;
+ sqrtf(i7);
+ f5 = f3/f_g0;
+ f0 = -f0;
+ f6 = f5*f0;
+ f3 = f2*f5;
+ f0 = -f1;
+ f2 = f4*f5;
+ f0 = f3*f0;
+ f1 = f1*f6;
+ f4 = 0;
+}
+ r2 = heap32[(r1+5)];
+ r3 = r2 >> 2;
+ f5 = heapFloat[(r3+2)];
+ f7 = heapFloat[(r3+1)];
+ f8 = heapFloat[(r3+6)];
+ f9 = heapFloat[(r3+5)];
+ f10 = heapFloat[(r3+3)];
+ f11 = f7*f4;
+ f12 = f5*f6;
+ f13 = heapFloat[(r3+11)];
+ f14 = heapFloat[(r3+7)];
+ f15 = heapFloat[(r3+10)];
+ f16 = heapFloat[(r3+9)];
+ f17 = f9*f4;
+ f18 = f8*f6;
+ f11 = f11+f12;
+ f12 = f10*f3;
+ r3 = sp + -432;
+ f4 = f16*f4;
+ f6 = f15*f6;
+ f17 = f17+f18;
+ f18 = f14*f3;
+ f11 = f11+f12;
+ r4 = r3 >> 2;
+ f4 = f4+f6;
+ f3 = f13*f3;
+ f6 = f17+f18;
+ heapFloat[(fp+-108)] = f11;
+ f11 = f7*f2;
+ f12 = f5*f0;
+ f3 = f4+f3;
+ heapFloat[(r4+1)] = f6;
+ heapFloat[(r4+2)] = f3;
+ f3 = f9*f2;
+ f4 = f8*f0;
+ f6 = f11+f12;
+ f11 = f10*f1;
+ r5 = sp + -448;
+ f2 = f16*f2;
+ f0 = f15*f0;
+ f3 = f3+f4;
+ f4 = f14*f1;
+ f6 = f6+f11;
+ heap32[(r4+3)] = 0;
+ r4 = r5 >> 2;
+ f0 = f2+f0;
+ f1 = f13*f1;
+ f2 = f3+f4;
+ heapFloat[(fp+-112)] = f6;
+ f0 = f0+f1;
+ heapFloat[(r4+1)] = f2;
+ heapFloat[(r4+2)] = f0;
+ heap32[(r4+3)] = 0;
+ f0 = heapFloat[(r1+137)];
+ f1 = heapFloat[(r1+141)];
+ f2 = heapFloat[(r1+145)];
+ f3 = f7*f0;
+ f4 = f5*f1;
+ f6 = f9*f0;
+ f11 = f8*f1;
+ f3 = f3+f4;
+ f4 = f10*f2;
+ r4 = sp + -464;
+ f0 = f16*f0;
+ f1 = f15*f1;
+ f6 = f6+f11;
+ f11 = f14*f2;
+ f3 = f3+f4;
+ r6 = r4 >> 2;
+ f0 = f0+f1;
+ f1 = f13*f2;
+ f2 = f6+f11;
+ heapFloat[(fp+-116)] = f3;
+ f0 = f0+f1;
+ heapFloat[(r6+1)] = f2;
+ heapFloat[(r6+2)] = f0;
+ r7 = sp + -288;
+ heap32[(r6+3)] = 0;
+ r6 = r7 >> 2;
+ heapFloat[(fp+-72)] = f7;
+ heapFloat[(r6+1)] = f9;
+ heapFloat[(r6+2)] = f16;
+ heap32[(r6+3)] = 0;
+ heapFloat[(r6+4)] = f5;
+ heapFloat[(r6+5)] = f8;
+ heapFloat[(r6+6)] = f15;
+ heap32[(r6+7)] = 0;
+ heapFloat[(r6+8)] = f10;
+ heapFloat[(r6+9)] = f14;
+ heapFloat[(r6+10)] = f13;
+ heap32[(r6+11)] = 0;
+ r6 = heap32[(r1+6)];
+ r8 = sp + -240;
+ r9 = r6 >> 2;
+ r10 = r8 >> 2;
+ heap32[(fp+-60)] = heap32[(r9+1)];
+ heap32[(r10+1)] = heap32[(r9+5)];
+ heap32[(r10+2)] = heap32[(r9+9)];
+ heap32[(r10+3)] = 0;
+ heap32[(r10+4)] = heap32[(r9+2)];
+ heap32[(r10+5)] = heap32[(r9+6)];
+ heap32[(r10+6)] = heap32[(r9+10)];
+ heap32[(r10+7)] = 0;
+ heap32[(r10+8)] = heap32[(r9+3)];
+ heap32[(r10+9)] = heap32[(r9+7)];
+ heap32[(r10+10)] = heap32[(r9+11)];
+ heap32[(r10+11)] = 0;
+ r9 = (r0 + 288)|0;
+ r2 = (r2 + 388)|0;
+ r6 = (r6 + 388)|0;
+ heap32[(g0)] = r9;
+ heap32[(g0+1)] = r3;
+ heap32[(g0+2)] = r7;
+ heap32[(g0+3)] = r8;
+ heap32[(g0+4)] = r2;
+ heap32[(g0+5)] = r6;
+ _ZN15btJacobianEntryC2ERK9btVector3RK11btMatrix3x3S5_S2_S2_(i7);
+ r2 = heap32[(r1+5)];
+ r3 = sp + -192;
+ r6 = r2 >> 2;
+ r7 = r3 >> 2;
+ heap32[(fp+-48)] = heap32[(r6+1)];
+ heap32[(r7+1)] = heap32[(r6+5)];
+ heap32[(r7+2)] = heap32[(r6+9)];
+ heap32[(r7+3)] = 0;
+ heap32[(r7+4)] = heap32[(r6+2)];
+ heap32[(r7+5)] = heap32[(r6+6)];
+ heap32[(r7+6)] = heap32[(r6+10)];
+ heap32[(r7+7)] = 0;
+ heap32[(r7+8)] = heap32[(r6+3)];
+ heap32[(r7+9)] = heap32[(r6+7)];
+ heap32[(r7+10)] = heap32[(r6+11)];
+ heap32[(r7+11)] = 0;
+ r6 = heap32[(r1+6)];
+ r7 = sp + -144;
+ r8 = r6 >> 2;
+ r9 = r7 >> 2;
+ heap32[(fp+-36)] = heap32[(r8+1)];
+ heap32[(r9+1)] = heap32[(r8+5)];
+ heap32[(r9+2)] = heap32[(r8+9)];
+ heap32[(r9+3)] = 0;
+ heap32[(r9+4)] = heap32[(r8+2)];
+ heap32[(r9+5)] = heap32[(r8+6)];
+ heap32[(r9+6)] = heap32[(r8+10)];
+ heap32[(r9+7)] = 0;
+ heap32[(r9+8)] = heap32[(r8+3)];
+ heap32[(r9+9)] = heap32[(r8+7)];
+ heap32[(r9+10)] = heap32[(r8+11)];
+ heap32[(r9+11)] = 0;
+ r8 = (r0 + 372)|0;
+ r2 = (r2 + 388)|0;
+ r6 = (r6 + 388)|0;
+ heap32[(g0)] = r8;
+ heap32[(g0+1)] = r5;
+ heap32[(g0+2)] = r3;
+ heap32[(g0+3)] = r7;
+ heap32[(g0+4)] = r2;
+ heap32[(g0+5)] = r6;
+ _ZN15btJacobianEntryC2ERK9btVector3RK11btMatrix3x3S5_S2_S2_(i7);
+ r2 = heap32[(r1+5)];
+ r3 = sp + -96;
+ r5 = r2 >> 2;
+ r6 = r3 >> 2;
+ heap32[(fp+-24)] = heap32[(r5+1)];
+ heap32[(r6+1)] = heap32[(r5+5)];
+ heap32[(r6+2)] = heap32[(r5+9)];
+ heap32[(r6+3)] = 0;
+ heap32[(r6+4)] = heap32[(r5+2)];
+ heap32[(r6+5)] = heap32[(r5+6)];
+ heap32[(r6+6)] = heap32[(r5+10)];
+ heap32[(r6+7)] = 0;
+ heap32[(r6+8)] = heap32[(r5+3)];
+ heap32[(r6+9)] = heap32[(r5+7)];
+ heap32[(r6+10)] = heap32[(r5+11)];
+ heap32[(r6+11)] = 0;
+ r5 = heap32[(r1+6)];
+ r6 = sp + -48;
+ r7 = r5 >> 2;
+ r8 = r6 >> 2;
+ heap32[(fp+-12)] = heap32[(r7+1)];
+ heap32[(r8+1)] = heap32[(r7+5)];
+ heap32[(r8+2)] = heap32[(r7+9)];
+ heap32[(r8+3)] = 0;
+ heap32[(r8+4)] = heap32[(r7+2)];
+ heap32[(r8+5)] = heap32[(r7+6)];
+ heap32[(r8+6)] = heap32[(r7+10)];
+ heap32[(r8+7)] = 0;
+ heap32[(r8+8)] = heap32[(r7+3)];
+ heap32[(r8+9)] = heap32[(r7+7)];
+ heap32[(r8+10)] = heap32[(r7+11)];
+ heap32[(r8+11)] = 0;
+ r7 = (r0 + 456)|0;
+ r2 = (r2 + 388)|0;
+ r5 = (r5 + 388)|0;
+ heap32[(g0)] = r7;
+ heap32[(g0+1)] = r4;
+ heap32[(g0+2)] = r3;
+ heap32[(g0+3)] = r6;
+ heap32[(g0+4)] = r2;
+ heap32[(g0+5)] = r5;
+ _ZN15btJacobianEntryC2ERK9btVector3RK11btMatrix3x3S5_S2_S2_(i7);
+ heap32[(r1+177)] = 0;
+ r2 = heap32[(r1+6)];
+ r3 = heap32[(r1+5)];
+ r3 = (r3 + 4)|0;
+ r2 = (r2 + 4)|0;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r3;
+ heap32[(g0+2)] = r2;
+ _ZN17btHingeConstraint13getHingeAngleERK11btTransformS2_(i7);
+ f0 = f_g0;
+ heapFloat[(r1+178)] = f0;
+ heap32[(r1+176)] = 0;
+ r2 = 0;
+ heap32[(r1+175)] = 0;
+ heap8[r0+722] = r2;
+ f1 = heapFloat[(r1+172)];
+ f2 = heapFloat[(r1+173)];
+if(!(f1 >f2)) //_LBB594_24
+{
+ heapFloat[(g0)] = f0;
+ heapFloat[(g0+1)] = f1;
+ heapFloat[(g0+2)] = f2;
+ _Z21btAdjustAngleToLimitsfff(i7);
+ f0 = f_g0;
+ heapFloat[(r1+178)] = f0;
+ f1 = heapFloat[(r1+172)];
+ if(f0 >f1) //_LBB594_22
+{
+ f1 = heapFloat[(r1+173)];
+if(!(f0 <f1)) //_LBB594_24
+{
+ f0 = f1-f0;
+ heapFloat[(r1+176)] = f0;
+ r2 = 1;
+ heap32[(r1+175)] = -1082130432;
+ heap8[r0+722] = r2;
+}
+}
+else{
+ f0 = f1-f0;
+ heapFloat[(r1+176)] = f0;
+ r2 = 1;
+ heap32[(r1+175)] = 1065353216;
+ heap8[r0+722] = r2;
+}
+}
+ r0 = heap32[(r1+5)];
+ r0 = r0 >> 2;
+ f0 = heapFloat[(r1+137)];
+ f1 = heapFloat[(r0+5)];
+ f2 = heapFloat[(r0+1)];
+ f3 = heapFloat[(r1+141)];
+ f4 = heapFloat[(r0+6)];
+ f5 = heapFloat[(r0+2)];
+ f6 = heapFloat[(r0+9)];
+ f7 = heapFloat[(r0+10)];
+ r2 = heap32[(r1+6)];
+ f2 = f2*f0;
+ f5 = f5*f3;
+ f1 = f1*f0;
+ f4 = f4*f3;
+ f8 = heapFloat[(r1+145)];
+ f9 = heapFloat[(r0+7)];
+ f10 = heapFloat[(r0+3)];
+ r2 = r2 >> 2;
+ f11 = heapFloat[(r0+11)];
+ f0 = f6*f0;
+ f3 = f7*f3;
+ f2 = f2+f5;
+ f5 = f10*f8;
+ f1 = f1+f4;
+ f4 = f9*f8;
+ f0 = f0+f3;
+ f3 = f11*f8;
+ f2 = f2+f5;
+ f5 = heapFloat[(r0+65)];
+ f6 = heapFloat[(r0+64)];
+ f7 = heapFloat[(r2+65)];
+ f8 = heapFloat[(r2+64)];
+ f1 = f1+f4;
+ f4 = heapFloat[(r0+69)];
+ f9 = heapFloat[(r0+68)];
+ f10 = heapFloat[(r2+69)];
+ f11 = heapFloat[(r2+68)];
+ f12 = heapFloat[(r0+66)];
+ f13 = heapFloat[(r0+70)];
+ f14 = heapFloat[(r2+66)];
+ f15 = heapFloat[(r2+70)];
+ f6 = f6*f2;
+ f9 = f9*f1;
+ f5 = f5*f2;
+ f4 = f4*f1;
+ f8 = f8*f2;
+ f11 = f11*f1;
+ f7 = f7*f2;
+ f10 = f10*f1;
+ f0 = f0+f3;
+ f3 = heapFloat[(r0+73)];
+ f16 = heapFloat[(r0+72)];
+ f17 = heapFloat[(r2+73)];
+ f18 = heapFloat[(r2+72)];
+ f19 = heapFloat[(r0+74)];
+ f20 = heapFloat[(r2+74)];
+ f6 = f6+f9;
+ f9 = f16*f0;
+ f4 = f5+f4;
+ f3 = f3*f0;
+ f5 = f12*f2;
+ f12 = f13*f1;
+ f8 = f8+f11;
+ f11 = f18*f0;
+ f7 = f7+f10;
+ f10 = f17*f0;
+ f13 = f14*f2;
+ f14 = f15*f1;
+ f6 = f6+f9;
+ f3 = f4+f3;
+ f4 = f8+f11;
+ f7 = f7+f10;
+ f5 = f5+f12;
+ f8 = f19*f0;
+ f9 = f13+f14;
+ f10 = f20*f0;
+ f5 = f5+f8;
+ f8 = f9+f10;
+ f6 = f2*f6;
+ f3 = f1*f3;
+ f2 = f2*f4;
+ f1 = f1*f7;
+ f3 = f6+f3;
+ f4 = f0*f5;
+ f1 = f2+f1;
+ f0 = f0*f8;
+ f2 = f3+f4;
+ f0 = f1+f0;
+ f1 = 1;
+ f0 = f2+f0;
+ f0 = f1/f0;
+ heapFloat[(r1+174)] = f0;
+}
+ return;
+}
+
+function _ZN17btHingeConstraint8getInfo1EPN17btTypedConstraint17btConstraintInfo1E(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var f0;
+ var f1;
+ var f2;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = heap32[(fp+1)];
+ r2 = heapU8[r0+723];
+ if(r2 ==0) //_LBB595_2
+{
+ r1 = r1 >> 2;
+ heap32[(r1)] = 5;
+ heap32[(r1+1)] = 1;
+ r2 = r0 >> 2;
+ r3 = heap32[(r2+6)];
+ r4 = heap32[(r2+5)];
+ r4 = (r4 + 4)|0;
+ r3 = (r3 + 4)|0;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r4;
+ heap32[(g0+2)] = r3;
+ _ZN17btHingeConstraint13getHingeAngleERK11btTransformS2_(i7);
+ f0 = f_g0;
+ heapFloat[(r2+178)] = f0;
+ heap32[(r2+176)] = 0;
+ r3 = 0;
+ heap32[(r2+175)] = 0;
+ heap8[r0+722] = r3;
+ f1 = heapFloat[(r2+172)];
+ f2 = heapFloat[(r2+173)];
+ if(f1 >f2) //_LBB595_8
+{
+__label__ = 8;
+}
+else{
+ heapFloat[(g0)] = f0;
+ heapFloat[(g0+1)] = f1;
+ heapFloat[(g0+2)] = f2;
+ _Z21btAdjustAngleToLimitsfff(i7);
+ f0 = f_g0;
+ heapFloat[(r2+178)] = f0;
+ f1 = heapFloat[(r2+172)];
+ if(f0 >f1) //_LBB595_5
+{
+ f1 = heapFloat[(r2+173)];
+ if(f0 <f1) //_LBB595_7
+{
+ r2 = heapU8[r0+722];
+ if(r2 !=0) //_LBB595_10
+{
+__label__ = 10;
+}
+else{
+__label__ = 8;
+}
+}
+else{
+ f0 = f1-f0;
+ heapFloat[(r2+176)] = f0;
+ r3 = 1;
+ heap32[(r2+175)] = -1082130432;
+ heap8[r0+722] = r3;
+__label__ = 10;
+}
+}
+else{
+ f0 = f1-f0;
+ heapFloat[(r2+176)] = f0;
+ r3 = 1;
+ heap32[(r2+175)] = 1065353216;
+ heap8[r0+722] = r3;
+__label__ = 10;
+}
+}
+if (__label__ == 8){
+ r0 = heapU8[r0+721];
+if(!(r0 !=0)) //_LBB595_10
+{
+ return;
+}
+}
+ r0 = heap32[(r1)];
+ r0 = (r0 + 1)|0;
+ heap32[(r1)] = r0;
+ r0 = heap32[(r1+1)];
+ r0 = (r0 + -1)|0;
+ heap32[(r1+1)] = r0;
+ return;
+}
+else{
+ r0 = r1 >> 2;
+ heap32[(r0)] = 0;
+ heap32[(r0+1)] = 0;
+ return;
+}
+}
+
+function _ZN17btHingeConstraint8getInfo2EPN17btTypedConstraint17btConstraintInfo2E(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+ var r13;
+ var r14;
+ var r15;
+ var r16;
+ var r17;
+ var r18;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+ var f10;
+ var f11;
+ var f12;
+ var f13;
+ var f14;
+ var f15;
+ var f16;
+ var f17;
+ var f18;
+ var f19;
+ var f20;
+ var f21;
+ var f22;
+ var f23;
+ var f24;
+ var f25;
+ var f26;
+ var f27;
+ var f28;
+ var f29;
+ var f30;
+var __label__ = 0;
+ i7 = sp + -136;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ r2 = heap32[(fp+1)];
+ r3 = heap32[(r1+6)];
+ r4 = heap32[(r1+5)];
+ r5 = heapU8[r0+723];
+ r6 = heapU8[r0+724];
+_1: do {
+ if(r6 ==0) //_LBB596_60
+{
+ r5 = r5 & 255;
+ if(r5 ==0) //_LBB596_62
+{
+ r4 = r4 >> 2;
+ r3 = r3 >> 2;
+ f0 = heapFloat[(r1+147)];
+ f1 = heapFloat[(r4+9)];
+ f2 = heapFloat[(r4+5)];
+ f3 = heapFloat[(r4+1)];
+ f4 = heapFloat[(r1+148)];
+ f5 = heapFloat[(r4+10)];
+ f6 = heapFloat[(r4+6)];
+ f7 = heapFloat[(r4+2)];
+ f8 = heapFloat[(r1+163)];
+ f9 = heapFloat[(r3+9)];
+ heapFloat[(fp+-3)] = f9;
+ f10 = heapFloat[(r3+5)];
+ heapFloat[(fp+-2)] = f10;
+ f11 = heapFloat[(r3+1)];
+ heapFloat[(fp+-1)] = f11;
+ f12 = heapFloat[(r1+164)];
+ f13 = heapFloat[(r3+10)];
+ f14 = heapFloat[(r3+6)];
+ f9 = heapFloat[(r3+2)];
+ heapFloat[(fp+-7)] = f9;
+ f10 = heapFloat[(r1+137)];
+ f11 = heapFloat[(r1+141)];
+ f15 = heapFloat[(r1+136)];
+ f16 = heapFloat[(r1+140)];
+ f17 = heapFloat[(r1+135)];
+ f18 = heapFloat[(r1+139)];
+ f19 = heapFloat[(r1+153)];
+ f20 = heapFloat[(r1+157)];
+ f21 = f1*f0;
+ f22 = f5*f4;
+ f23 = f2*f0;
+ f24 = f6*f4;
+ f0 = f3*f0;
+ f4 = f7*f4;
+ f25 = heapFloat[(r1+149)];
+ f26 = heapFloat[(r4+11)];
+ f27 = heapFloat[(r4+7)];
+ f28 = heapFloat[(r4+3)];
+ f9 = heapFloat[(fp+-3)];
+ f29 = f9*f8;
+ heapFloat[(fp+-8)] = f29;
+ f30 = f13*f12;
+ heapFloat[(fp+-10)] = f30;
+ f9 = heapFloat[(fp+-2)];
+ f9 = f9*f8;
+ heapFloat[(fp+-9)] = f9;
+ f9 = f14*f12;
+ heapFloat[(fp+-12)] = f9;
+ f9 = heapFloat[(fp+-1)];
+ f8 = f9*f8;
+ heapFloat[(fp+-11)] = f8;
+ f9 = heapFloat[(fp+-7)];
+ f12 = f9*f12;
+ heapFloat[(fp+-13)] = f12;
+ f8 = heapFloat[(r1+165)];
+ f9 = heapFloat[(r3+11)];
+ heapFloat[(fp+-4)] = f9;
+ f9 = heapFloat[(r3+7)];
+ heapFloat[(fp+-6)] = f9;
+ f9 = heapFloat[(r3+3)];
+ heapFloat[(fp+-5)] = f9;
+ f9 = heapFloat[(r1+145)];
+ f12 = heapFloat[(r1+144)];
+ f29 = heapFloat[(r1+143)];
+ f30 = heapFloat[(r1+161)];
+ f21 = f21+f22;
+ heapFloat[(fp+-15)] = f21;
+ f22 = f26*f25;
+ f21 = f23+f24;
+ heapFloat[(fp+-16)] = f21;
+ f23 = f27*f25;
+ f0 = f0+f4;
+ heapFloat[(fp+-14)] = f0;
+ f0 = f28*f25;
+ heapFloat[(fp+-23)] = f0;
+ f0 = f10*f1;
+ heapFloat[(fp+-24)] = f0;
+ f4 = f11*f5;
+ f21 = f15*f1;
+ heapFloat[(fp+-18)] = f21;
+ f24 = f16*f5;
+ f1 = f17*f1;
+ heapFloat[(fp+-20)] = f1;
+ f5 = f18*f5;
+ f25 = f10*f2;
+ heapFloat[(fp+-17)] = f25;
+ f0 = f11*f6;
+ f1 = f15*f2;
+ heapFloat[(fp+-19)] = f1;
+ f1 = f16*f6;
+ heapFloat[(fp+-28)] = f1;
+ f2 = f17*f2;
+ heapFloat[(fp+-21)] = f2;
+ f1 = f18*f6;
+ heapFloat[(fp+-29)] = f1;
+ f2 = f10*f3;
+ heapFloat[(fp+-25)] = f2;
+ f6 = f11*f7;
+ f10 = f15*f3;
+ heapFloat[(fp+-26)] = f10;
+ f11 = f16*f7;
+ f3 = f17*f3;
+ heapFloat[(fp+-22)] = f3;
+ f7 = f18*f7;
+ f15 = heapFloat[(fp+-8)];
+ f16 = heapFloat[(fp+-10)];
+ f15 = f15+f16;
+ heapFloat[(fp+-27)] = f15;
+ f16 = heapFloat[(fp+-4)];
+ f17 = f16*f8;
+ f18 = heapFloat[(fp+-9)];
+ f21 = heapFloat[(fp+-12)];
+ f18 = f18+f21;
+ heapFloat[(fp+-8)] = f18;
+ f21 = heapFloat[(fp+-6)];
+ f25 = f21*f8;
+ f1 = heapFloat[(fp+-11)];
+ f2 = heapFloat[(fp+-13)];
+ f1 = f1+f2;
+ heapFloat[(fp+-9)] = f1;
+ f2 = heapFloat[(fp+-5)];
+ f1 = f2*f8;
+ heapFloat[(fp+-11)] = f1;
+ f2 = heapFloat[(fp+-3)];
+ f2 = f19*f2;
+ heapFloat[(fp+-3)] = f2;
+ f1 = f20*f13;
+ heapFloat[(fp+-12)] = f1;
+ f2 = heapFloat[(fp+-2)];
+ f2 = f19*f2;
+ heapFloat[(fp+-10)] = f2;
+ f1 = f20*f14;
+ heapFloat[(fp+-13)] = f1;
+ f2 = heapFloat[(fp+-1)];
+ f2 = f19*f2;
+ heapFloat[(fp+-2)] = f2;
+ f3 = heapFloat[(fp+-7)];
+ f1 = f20*f3;
+ heapFloat[(fp+-30)] = f1;
+ r5 = r2 >> 2;
+ f2 = heapFloat[(r4+15)];
+ f3 = heapFloat[(fp+-15)];
+ f3 = f3+f22;
+ heapFloat[(fp+-7)] = f3;
+ f8 = heapFloat[(r4+14)];
+ f10 = heapFloat[(fp+-16)];
+ f1 = f10+f23;
+ heapFloat[(fp+-15)] = f1;
+ f1 = heapFloat[(r4+13)];
+ heapFloat[(fp+-1)] = f1;
+ f3 = heapFloat[(fp+-14)];
+ f10 = heapFloat[(fp+-23)];
+ f3 = f3+f10;
+ heapFloat[(fp+-16)] = f3;
+ f10 = heapFloat[(fp+-24)];
+ f4 = f10+f4;
+ heapFloat[(fp+-14)] = f4;
+ f1 = f9*f26;
+ heapFloat[(fp+-23)] = f1;
+ f3 = heapFloat[(fp+-18)];
+ f1 = f3+f24;
+ heapFloat[(fp+-18)] = f1;
+ f3 = f12*f26;
+ f4 = heapFloat[(fp+-20)];
+ f4 = f4+f5;
+ f5 = f29*f26;
+ f10 = heapFloat[(fp+-17)];
+ f0 = f10+f0;
+ f10 = f9*f27;
+ f13 = heapFloat[(fp+-19)];
+ f14 = heapFloat[(fp+-28)];
+ f13 = f13+f14;
+ f14 = f12*f27;
+ f15 = heapFloat[(fp+-21)];
+ f16 = heapFloat[(fp+-29)];
+ f15 = f15+f16;
+ f16 = f29*f27;
+ f18 = heapFloat[(fp+-25)];
+ f6 = f18+f6;
+ f9 = f9*f28;
+ f18 = heapFloat[(fp+-26)];
+ f11 = f18+f11;
+ f12 = f12*f28;
+ f18 = heapFloat[(fp+-22)];
+ f7 = f18+f7;
+ f18 = f29*f28;
+ f19 = heapFloat[(fp+-27)];
+ f17 = f19+f17;
+ f19 = heapFloat[(r3+15)];
+ f20 = heapFloat[(fp+-8)];
+ f20 = f20+f25;
+ f21 = heapFloat[(r3+14)];
+ f22 = heapFloat[(fp+-9)];
+ f23 = heapFloat[(fp+-11)];
+ f22 = f22+f23;
+ f23 = heapFloat[(r3+13)];
+ f24 = heapFloat[(fp+-3)];
+ f25 = heapFloat[(fp+-12)];
+ f24 = f24+f25;
+ f25 = heapFloat[(fp+-4)];
+ f25 = f30*f25;
+ f26 = heapFloat[(fp+-10)];
+ f27 = heapFloat[(fp+-13)];
+ f26 = f26+f27;
+ f27 = heapFloat[(fp+-6)];
+ f27 = f30*f27;
+ f28 = heapFloat[(fp+-2)];
+ f29 = heapFloat[(fp+-30)];
+ f28 = f28+f29;
+ f29 = heapFloat[(fp+-5)];
+ f29 = f30*f29;
+ r6 = heap32[(r5+6)];
+ f30 = heapFloat[(fp+-7)];
+ f30 = f30+f2;
+ heapFloat[(fp+-2)] = f30;
+ f30 = heapFloat[(fp+-15)];
+ f30 = f30+f8;
+ heapFloat[(fp+-3)] = f30;
+ f30 = heapFloat[(fp+-16)];
+ f1 = heapFloat[(fp+-1)];
+ f1 = f30+f1;
+ heapFloat[(fp+-4)] = f1;
+ f1 = heapFloat[(fp+-14)];
+ f30 = heapFloat[(fp+-23)];
+ f1 = f1+f30;
+ f30 = heapFloat[(fp+-18)];
+ f3 = f30+f3;
+ f4 = f4+f5;
+ f0 = f0+f10;
+ f5 = f13+f14;
+ f10 = f15+f16;
+ f6 = f6+f9;
+ f9 = f11+f12;
+ f7 = f7+f18;
+ f11 = f17+f19;
+ f12 = f20+f21;
+ f13 = f22+f23;
+ f14 = f24+f25;
+ f15 = f26+f27;
+ f16 = f28+f29;
+ r7 = heapU8[r0+720];
+ if(r7 ==0) //_LBB596_64
+{
+ r7 = heap32[(r5+2)];
+ r7 = r7 >> 2;
+ heap32[(r7)] = 1065353216;
+ r7 = r6 << 2;
+ r8 = heap32[(r5+2)];
+ r7 = (r7 + r8)|0;
+ r7 = r7 >> 2;
+ heap32[(r7+1)] = 1065353216;
+ r7 = r6 << 3;
+ r8 = heap32[(r5+2)];
+ r7 = (r7 + r8)|0;
+ r7 = r7 >> 2;
+ heap32[(r7+2)] = 1065353216;
+ f2 = heapFloat[(r4+15)];
+ f8 = heapFloat[(r4+14)];
+ f17 = heapFloat[(r4+13)];
+ heapFloat[(fp+-1)] = f17;
+}
+ r7 = heap32[(r5+3)];
+ r8 = r7 >> 2;
+ f17 = heapFloat[(fp+-3)];
+ f8 = f17-f8;
+ f17 = heapFloat[(fp+-2)];
+ f2 = f17-f2;
+ heap32[(r8)] = 0;
+ r9 = (r6 + 1)|0;
+ r10 = r6 << 2;
+ f17 = -f8;
+ heapFloat[(r8+1)] = f2;
+ r11 = (r6 + 2)|0;
+ r9 = r9 << 2;
+ r12 = (r7 + r10)|0;
+ heapFloat[(r8+2)] = f17;
+ r13 = (r6 + 3)|0;
+ r11 = r11 << 2;
+ r14 = (r7 + r9)|0;
+ r12 = r12 >> 2;
+ f2 = -f2;
+ heap32[(r8+3)] = 0;
+ r8 = r13 << 2;
+ r13 = (r7 + r11)|0;
+ r14 = r14 >> 2;
+ heapFloat[(r12)] = f2;
+ r12 = r6 << 3;
+ r15 = (r7 + r8)|0;
+ f17 = heapFloat[(fp+-4)];
+ f2 = heapFloat[(fp+-1)];
+ f2 = f17-f2;
+ r13 = r13 >> 2;
+ heap32[(r14)] = 0;
+ r14 = r12 | 4;
+ r16 = (r7 + r12)|0;
+ r15 = r15 >> 2;
+ heapFloat[(r13)] = f2;
+ r13 = (r12 + 8)|0;
+ r17 = (r7 + r14)|0;
+ r16 = r16 >> 2;
+ heap32[(r15)] = 0;
+ r15 = (r12 + 12)|0;
+ r18 = (r7 + r13)|0;
+ r17 = r17 >> 2;
+ f2 = -f2;
+ heapFloat[(r16)] = f8;
+ r7 = (r7 + r15)|0;
+ r16 = r18 >> 2;
+ heapFloat[(r17)] = f2;
+ r7 = r7 >> 2;
+ heap32[(r16)] = 0;
+ heap32[(r7)] = 0;
+ r7 = heap32[(r5+5)];
+ f2 = heapFloat[(r3+15)];
+ f8 = heapFloat[(r3+14)];
+ f17 = heapFloat[(r3+13)];
+ f2 = f11-f2;
+ r16 = r7 >> 2;
+ f18 = -f2;
+ heap32[(r16)] = 0;
+ f8 = f12-f8;
+ heapFloat[(r16+1)] = f18;
+ r17 = (r7 + r10)|0;
+ heapFloat[(r16+2)] = f8;
+ r9 = (r7 + r9)|0;
+ r17 = r17 >> 2;
+ heap32[(r16+3)] = 0;
+ f17 = f13-f17;
+ r11 = (r7 + r11)|0;
+ r9 = r9 >> 2;
+ heapFloat[(r17)] = f2;
+ r8 = (r7 + r8)|0;
+ r11 = r11 >> 2;
+ f2 = -f17;
+ heap32[(r9)] = 0;
+ r9 = (r7 + r12)|0;
+ r8 = r8 >> 2;
+ heapFloat[(r11)] = f2;
+ r11 = (r7 + r14)|0;
+ r9 = r9 >> 2;
+ f2 = -f8;
+ heap32[(r8)] = 0;
+ r8 = (r7 + r13)|0;
+ r11 = r11 >> 2;
+ heapFloat[(r9)] = f2;
+ r7 = (r7 + r15)|0;
+ r8 = r8 >> 2;
+ heapFloat[(r11)] = f17;
+ r7 = r7 >> 2;
+ heap32[(r8)] = 0;
+ heap32[(r7)] = 0;
+ f2 = heapFloat[(r5)];
+ f8 = heapFloat[(r5+1)];
+ f2 = f2*f8;
+ r7 = heapU8[r0+720];
+if(!(r7 !=0)) //_LBB596_67
+{
+ r6 = r6 << 1;
+ r7 = heap32[(r5+7)];
+ f8 = heapFloat[(fp+-4)];
+ f8 = f13-f8;
+ r7 = r7 >> 2;
+ f8 = f8*f2;
+ heapFloat[(r7)] = f8;
+ r7 = heap32[(r5+7)];
+ r7 = (r7 + r10)|0;
+ f8 = heapFloat[(fp+-3)];
+ f8 = f12-f8;
+ r7 = r7 >> 2;
+ f8 = f8*f2;
+ heapFloat[(r7)] = f8;
+ r6 = r6 << 2;
+ r7 = heap32[(r5+7)];
+ r6 = (r7 + r6)|0;
+ f8 = heapFloat[(fp+-2)];
+ f8 = f11-f8;
+ r6 = r6 >> 2;
+ f8 = f8*f2;
+ heapFloat[(r6)] = f8;
+}
+ r2 = (r2 + 4)|0;
+ r6 = heap32[(r5+6)];
+ r7 = (r6 * 3)|0;
+ r8 = heap32[(r5+3)];
+ r9 = r7 << 2;
+ r8 = (r8 + r9)|0;
+ r8 = r8 >> 2;
+ r10 = (r7 + 1)|0;
+ heapFloat[(r8)] = f7;
+ r8 = r10 << 2;
+ r10 = heap32[(r5+3)];
+ r10 = (r10 + r8)|0;
+ r10 = r10 >> 2;
+ r7 = (r7 + 2)|0;
+ heapFloat[(r10)] = f10;
+ r7 = r7 << 2;
+ r10 = heap32[(r5+3)];
+ r10 = (r10 + r7)|0;
+ r10 = r10 >> 2;
+ heapFloat[(r10)] = f4;
+ r6 = r6 << 4;
+ r10 = heap32[(r5+3)];
+ r10 = (r10 + r6)|0;
+ r10 = r10 >> 2;
+ heapFloat[(r10)] = f9;
+ r10 = r6 | 4;
+ r11 = heap32[(r5+3)];
+ r11 = (r11 + r10)|0;
+ r11 = r11 >> 2;
+ heapFloat[(r11)] = f5;
+ r11 = r6 | 8;
+ r12 = heap32[(r5+3)];
+ r12 = (r12 + r11)|0;
+ r12 = r12 >> 2;
+ heapFloat[(r12)] = f3;
+ r12 = heap32[(r5+5)];
+ r12 = (r12 + r9)|0;
+ r12 = r12 >> 2;
+ f8 = -f7;
+ heapFloat[(r12)] = f8;
+ r12 = heap32[(r5+5)];
+ r8 = (r12 + r8)|0;
+ r8 = r8 >> 2;
+ f8 = -f10;
+ heapFloat[(r8)] = f8;
+ r8 = heap32[(r5+5)];
+ r7 = (r8 + r7)|0;
+ r7 = r7 >> 2;
+ f8 = -f4;
+ heapFloat[(r7)] = f8;
+ r7 = heap32[(r5+5)];
+ r7 = (r7 + r6)|0;
+ r7 = r7 >> 2;
+ f8 = -f9;
+ heapFloat[(r7)] = f8;
+ r7 = heap32[(r5+5)];
+ r7 = (r7 + r10)|0;
+ r7 = r7 >> 2;
+ f8 = -f5;
+ heapFloat[(r7)] = f8;
+ r7 = heap32[(r5+5)];
+ r7 = (r7 + r11)|0;
+ f8 = f0*f14;
+ f11 = f1*f15;
+ f12 = f1*f16;
+ f13 = f6*f14;
+ f8 = f8-f11;
+ f11 = f12-f13;
+ f12 = f6*f15;
+ f13 = f0*f16;
+ r7 = r7 >> 2;
+ f14 = -f3;
+ f12 = f12-f13;
+ heapFloat[(r7)] = f14;
+ f7 = f8*f7;
+ f10 = f11*f10;
+ r7 = heap32[(r5+7)];
+ f7 = f7+f10;
+ f4 = f12*f4;
+ r7 = (r7 + r9)|0;
+ f4 = f7+f4;
+ r7 = r7 >> 2;
+ f4 = f4*f2;
+ heapFloat[(r7)] = f4;
+ f4 = f8*f9;
+ f5 = f11*f5;
+ r7 = heap32[(r5+7)];
+ f4 = f4+f5;
+ f3 = f12*f3;
+ r6 = (r7 + r6)|0;
+ f3 = f4+f3;
+ r6 = r6 >> 2;
+ f2 = f3*f2;
+ heapFloat[(r6)] = f2;
+ r6 = heapU8[r0+722];
+ if(r6 !=0) //_LBB596_69
+{
+ f2 = heapFloat[(r1+176)];
+ f3 = heapFloat[(r1+179)];
+ f2 = f2*f3;
+ f3 = 0;
+ r6 = 1;
+ r7 = 2;
+ r6 = f2 > f3 ? r6 : r7;
+}
+else{
+ f2 = 0;
+ r6 = 0;
+}
+ r7 = heapU8[r0+721];
+ r8 = 0;
+ r9 = r7 != r8;
+ r9 = r9 & 1;
+ r9 = r9 | r6;
+ if(r9 ==0) //_LBB596_59
+{
+__label__ = 54;
+break _1;
+}
+else{
+ r9 = heap32[(r5+6)];
+ r9 = (r9 * 5)|0;
+ r10 = heap32[(r5+3)];
+ r11 = r9 << 2;
+ r10 = (r10 + r11)|0;
+ r10 = r10 >> 2;
+ r12 = (r9 + 1)|0;
+ heapFloat[(r10)] = f6;
+ r10 = r12 << 2;
+ r12 = heap32[(r5+3)];
+ r12 = (r12 + r10)|0;
+ r12 = r12 >> 2;
+ r9 = (r9 + 2)|0;
+ heapFloat[(r12)] = f0;
+ r9 = r9 << 2;
+ r12 = heap32[(r5+3)];
+ r12 = (r12 + r9)|0;
+ r12 = r12 >> 2;
+ heapFloat[(r12)] = f1;
+ r12 = heap32[(r5+5)];
+ r12 = (r12 + r11)|0;
+ r12 = r12 >> 2;
+ f3 = -f6;
+ heapFloat[(r12)] = f3;
+ r12 = heap32[(r5+5)];
+ r10 = (r12 + r10)|0;
+ r10 = r10 >> 2;
+ f3 = -f0;
+ heapFloat[(r10)] = f3;
+ r10 = heap32[(r5+5)];
+ r9 = (r10 + r9)|0;
+ r9 = r9 >> 2;
+ f3 = -f1;
+ heapFloat[(r9)] = f3;
+ r9 = heap32[(r5+7)];
+ r9 = (r9 + r11)|0;
+ f3 = heapFloat[(r1+172)];
+ f4 = heapFloat[(r1+173)];
+ r9 = r9 >> 2;
+ heap32[(r9)] = 0;
+ r9 = r6 != r8;
+ r10 = f3 == f4;
+ r12 = heap32[(r1+183)];
+ r9 = r9 & r10;
+ r10 = r12 & 2;
+ if(r10 !=0) //_LBB596_73
+{
+ r2 = (r0 + 744)|0;
+}
+ r2 = r2 >> 2;
+ f5 = heapFloat[(r2)];
+ r2 = r7 == r8;
+ r2 = r9 | r2;
+if(!(r2 != 0)) //_LBB596_91
+{
+ r2 = r12 & 4;
+if(!(r2 ==0)) //_LBB596_77
+{
+ r2 = heap32[(r5+8)];
+ r2 = (r2 + r11)|0;
+ r2 = r2 >> 2;
+ heap32[(r2)] = heap32[(r1+184)];
+}
+ f7 = 1;
+ f8 = 0;
+ f9 = heapFloat[(r1+167)];
+_24: do {
+ if(f3 <f4) //_LBB596_79
+{
+ f10 = heapFloat[(r1+178)];
+ f11 = heapFloat[(r5)];
+ f11 = f11*f5;
+ f11 = f9/f11;
+ if(f11 >=f8) //_LBB596_84
+{
+ if(f11 >f8) //_LBB596_86
+{
+if(!(f10 >f4)) //_LBB596_89
+{
+ f8 = f4-f11;
+if(!(f8 >=f10)) //_LBB596_89
+{
+ f7 = f4-f10;
+ f8 = f7/f11;
+break _24;
+}
+}
+ f8 = 0;
+ f8 = f10 > f4 ? f8 : f7;
+}
+else{
+break _24;
+}
+}
+else{
+if(!(f10 <f3)) //_LBB596_83
+{
+ f8 = f3-f11;
+if(!(f8 <=f10)) //_LBB596_83
+{
+ f7 = f3-f10;
+ f8 = f7/f11;
+break _24;
+}
+}
+ f8 = 0;
+ f8 = f10 < f3 ? f8 : f7;
+}
+}
+else{
+ f8 = f3 > f4 ? f7 : f8;
+}
+} while(0);
+ r2 = heap32[(r5+7)];
+ r2 = (r2 + r11)|0;
+ r2 = r2 >> 2;
+ f7 = f9*f8;
+ f8 = heapFloat[(r1+179)];
+ f9 = heapFloat[(r2)];
+ f7 = f7*f8;
+ f7 = f9+f7;
+ heapFloat[(r2)] = f7;
+ r2 = heap32[(r5+9)];
+ f7 = heapFloat[(r1+168)];
+ r2 = (r2 + r11)|0;
+ r2 = r2 >> 2;
+ f7 = -f7;
+ heapFloat[(r2)] = f7;
+ r2 = heap32[(r5+10)];
+ r2 = (r2 + r11)|0;
+ r2 = r2 >> 2;
+ heap32[(r2)] = heap32[(r1+168)];
+}
+ if(r6 ==0) //_LBB596_59
+{
+__label__ = 54;
+break _1;
+}
+else{
+ r2 = heap32[(r5+7)];
+ r2 = (r2 + r11)|0;
+ f7 = heapFloat[(r5)];
+ r2 = r2 >> 2;
+ f5 = f7*f5;
+ f7 = heapFloat[(r2)];
+ f2 = f5*f2;
+ f2 = f7+f2;
+ heapFloat[(r2)] = f2;
+ r0 = heapU8[r0+732];
+ r0 = r0 & 1;
+if(!(r0 ==0)) //_LBB596_94
+{
+ r0 = heap32[(r5+8)];
+ r0 = (r0 + r11)|0;
+ r0 = r0 >> 2;
+ heap32[(r0)] = heap32[(r1+185)];
+}
+ if(f3 !=f4) //_LBB596_96
+{
+ r0 = heap32[(r5+9)];
+ if(r6 !=1) //_LBB596_98
+{
+ r0 = (r0 + r11)|0;
+ r0 = r0 >> 2;
+ heap32[(r0)] = -8388609;
+ r0 = heap32[(r5+10)];
+ r0 = (r0 + r11)|0;
+ r0 = r0 >> 2;
+ heap32[(r0)] = 0;
+}
+else{
+ r0 = (r0 + r11)|0;
+ r0 = r0 >> 2;
+ heap32[(r0)] = 0;
+ r0 = heap32[(r5+10)];
+ r0 = (r0 + r11)|0;
+ r0 = r0 >> 2;
+ heap32[(r0)] = 2139095039;
+}
+}
+else{
+ r0 = heap32[(r5+9)];
+ r0 = (r0 + r11)|0;
+ r0 = r0 >> 2;
+ heap32[(r0)] = -8388609;
+ r0 = heap32[(r5+10)];
+ r0 = (r0 + r11)|0;
+ r0 = r0 >> 2;
+ heap32[(r0)] = 2139095039;
+}
+ f2 = heapFloat[(r1+171)];
+ f3 = 0;
+ if(f2 <=f3) //_LBB596_107
+{
+__label__ = 53;
+break _1;
+}
+else{
+ f4 = heapFloat[(r4+80)];
+ f5 = heapFloat[(r3+80)];
+ f7 = heapFloat[(r4+81)];
+ f8 = heapFloat[(r3+81)];
+ f4 = f4*f6;
+ f7 = f7*f0;
+ f9 = heapFloat[(r4+82)];
+ f10 = heapFloat[(r3+82)];
+ f5 = f5*f6;
+ f0 = f8*f0;
+ f4 = f4+f7;
+ f6 = f9*f1;
+ f0 = f5+f0;
+ f1 = f10*f1;
+ f4 = f4+f6;
+ f0 = f0+f1;
+ f0 = f4-f0;
+ if(r6 !=1) //_LBB596_104
+{
+ if(f0 <=f3) //_LBB596_107
+{
+__label__ = 53;
+break _1;
+}
+else{
+ r0 = heap32[(r5+7)];
+ f1 = -f2;
+ r0 = (r0 + r11)|0;
+ f0 = f0*f1;
+ r0 = r0 >> 2;
+ f1 = heapFloat[(r0)];
+ if(f1 <=f0) //_LBB596_107
+{
+__label__ = 53;
+break _1;
+}
+else{
+ heapFloat[(r0)] = f0;
+__label__ = 53;
+break _1;
+}
+}
+}
+else{
+ if(f0 >=f3) //_LBB596_107
+{
+__label__ = 53;
+break _1;
+}
+else{
+ r0 = heap32[(r5+7)];
+ f2 = -f2;
+ r0 = (r0 + r11)|0;
+ f0 = f0*f2;
+ r0 = r0 >> 2;
+ f2 = heapFloat[(r0)];
+ if(f2 >=f0) //_LBB596_107
+{
+__label__ = 53;
+break _1;
+}
+else{
+ heapFloat[(r0)] = f0;
+__label__ = 53;
+break _1;
+}
+}
+}
+}
+}
+}
+}
+else{
+ r0 = _2E_str1149;
+ r1 = _2E_str231;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 331;
+ _assert(i7);
+}
+}
+else{
+ r5 = r5 & 255;
+ if(r5 ==0) //_LBB596_3
+{
+ r4 = r4 >> 2;
+ r3 = r3 >> 2;
+ f0 = heapFloat[(r3+9)];
+ heapFloat[(fp+-5)] = f0;
+ f1 = heapFloat[(r1+163)];
+ f0 = heapFloat[(r3+5)];
+ heapFloat[(fp+-6)] = f0;
+ f2 = heapFloat[(r3+1)];
+ heapFloat[(fp+-4)] = f2;
+ f0 = heapFloat[(r3+10)];
+ heapFloat[(fp+-7)] = f0;
+ f2 = heapFloat[(r1+164)];
+ f0 = heapFloat[(r3+6)];
+ heapFloat[(fp+-8)] = f0;
+ f3 = heapFloat[(r3+2)];
+ heapFloat[(fp+-9)] = f3;
+ f4 = heapFloat[(r4+9)];
+ f5 = heapFloat[(r1+147)];
+ f6 = heapFloat[(r4+5)];
+ f7 = heapFloat[(r4+1)];
+ f8 = heapFloat[(r4+10)];
+ f9 = heapFloat[(r1+148)];
+ f10 = heapFloat[(r4+6)];
+ f11 = heapFloat[(r4+2)];
+ f0 = heapFloat[(fp+-5)];
+ f12 = f0*f1;
+ f0 = heapFloat[(fp+-7)];
+ f13 = f0*f2;
+ f14 = heapFloat[(r3+11)];
+ heapFloat[(fp+-2)] = f14;
+ f15 = heapFloat[(r1+165)];
+ f16 = heapFloat[(r3+7)];
+ heapFloat[(fp+-3)] = f16;
+ f17 = heapFloat[(r3+3)];
+ heapFloat[(fp+-1)] = f17;
+ f18 = f4*f5;
+ f19 = f8*f9;
+ f20 = heapFloat[(r4+11)];
+ f21 = heapFloat[(r1+149)];
+ f22 = heapFloat[(r4+7)];
+ f23 = heapFloat[(r4+3)];
+ f0 = heapFloat[(fp+-6)];
+ f24 = f0*f1;
+ f0 = heapFloat[(fp+-8)];
+ f25 = f0*f2;
+ f26 = f6*f5;
+ f27 = f10*f9;
+ f28 = heapFloat[(fp+-4)];
+ f1 = f28*f1;
+ f2 = f3*f2;
+ f5 = f7*f5;
+ f9 = f11*f9;
+ f29 = heapFloat[(r1+137)];
+ f30 = heapFloat[(r1+141)];
+ f0 = heapFloat[(r1+136)];
+ f3 = heapFloat[(r1+140)];
+ f14 = heapFloat[(r1+153)];
+ f16 = heapFloat[(r1+157)];
+ f12 = f12+f13;
+ heapFloat[(fp+-14)] = f12;
+ f13 = heapFloat[(fp+-2)];
+ f17 = f13*f15;
+ f18 = f18+f19;
+ f19 = f20*f21;
+ f24 = f24+f25;
+ f25 = heapFloat[(fp+-3)];
+ f28 = f25*f15;
+ f26 = f26+f27;
+ f27 = f22*f21;
+ f1 = f1+f2;
+ heapFloat[(fp+-10)] = f1;
+ f2 = heapFloat[(fp+-1)];
+ f15 = f2*f15;
+ f5 = f5+f9;
+ heapFloat[(fp+-12)] = f5;
+ f9 = f23*f21;
+ f21 = heapFloat[(r1+145)];
+ f1 = heapFloat[(r1+144)];
+ f2 = heapFloat[(r1+161)];
+ f5 = heapFloat[(r3+84)];
+ f12 = heapFloat[(r4+84)];
+ f13 = 1.1920928955078125e-007;
+ heapFloat[(fp+-11)] = f13;
+ f25 = f29*f4;
+ heapFloat[(fp+-13)] = f25;
+ f25 = f30*f8;
+ f4 = f0*f4;
+ heapFloat[(fp+-16)] = f4;
+ f8 = f3*f8;
+ f4 = f29*f6;
+ heapFloat[(fp+-15)] = f4;
+ f4 = f30*f10;
+ f6 = f0*f6;
+ heapFloat[(fp+-18)] = f6;
+ f10 = f3*f10;
+ f29 = f29*f7;
+ f30 = f30*f11;
+ f0 = f0*f7;
+ heapFloat[(fp+-17)] = f0;
+ f3 = f3*f11;
+ f7 = heapFloat[(fp+-5)];
+ f0 = f14*f7;
+ heapFloat[(fp+-19)] = f0;
+ f6 = heapFloat[(fp+-7)];
+ f6 = f16*f6;
+ f7 = heapFloat[(fp+-6)];
+ f7 = f14*f7;
+ heapFloat[(fp+-5)] = f7;
+ f11 = heapFloat[(fp+-8)];
+ f11 = f16*f11;
+ f0 = heapFloat[(fp+-4)];
+ f0 = f14*f0;
+ heapFloat[(fp+-4)] = f0;
+ f14 = heapFloat[(fp+-9)];
+ f14 = f16*f14;
+ f16 = heapFloat[(fp+-14)];
+ f16 = f16+f17;
+ f17 = heapFloat[(r3+15)];
+ f18 = f18+f19;
+ f19 = heapFloat[(r4+15)];
+ f24 = f24+f28;
+ f28 = heapFloat[(r3+14)];
+ f26 = f26+f27;
+ f27 = heapFloat[(r4+14)];
+ f0 = heapFloat[(fp+-10)];
+ f0 = f0+f15;
+ f15 = heapFloat[(r3+13)];
+ f7 = heapFloat[(fp+-12)];
+ f7 = f7+f9;
+ f9 = heapFloat[(r4+13)];
+ r5 = r2 >> 2;
+ f16 = f16+f17;
+ f17 = f18+f19;
+ f18 = f24+f28;
+ f19 = f26+f27;
+ f0 = f0+f15;
+ f7 = f7+f9;
+ f9 = heapFloat[(fp+-13)];
+ f9 = f9+f25;
+ f15 = f21*f20;
+ f24 = heapFloat[(fp+-16)];
+ f8 = f24+f8;
+ f20 = f1*f20;
+ f24 = heapFloat[(fp+-15)];
+ f4 = f24+f4;
+ f24 = f21*f22;
+ f25 = heapFloat[(fp+-18)];
+ f10 = f25+f10;
+ f22 = f1*f22;
+ f25 = f29+f30;
+ f21 = f21*f23;
+ f26 = heapFloat[(fp+-17)];
+ f3 = f26+f3;
+ f1 = f1*f23;
+ f23 = heapFloat[(fp+-19)];
+ f6 = f23+f6;
+ f23 = heapFloat[(fp+-2)];
+ f23 = f2*f23;
+ f26 = heapFloat[(fp+-5)];
+ f11 = f26+f11;
+ f26 = heapFloat[(fp+-3)];
+ f26 = f2*f26;
+ f27 = heapFloat[(fp+-4)];
+ f14 = f27+f14;
+ f27 = heapFloat[(fp+-1)];
+ f2 = f2*f27;
+ r6 = f12 < f13;
+ r7 = f5 < f13;
+ f12 = f12+f5;
+ r8 = heap32[(r5+6)];
+ f9 = f9+f15;
+ heapFloat[(fp+-3)] = f9;
+ f8 = f8+f20;
+ f4 = f4+f24;
+ heapFloat[(fp+-2)] = f4;
+ f4 = f10+f22;
+ f9 = f25+f21;
+ heapFloat[(fp+-4)] = f9;
+ f1 = f3+f1;
+ f3 = f6+f23;
+ heapFloat[(fp+-7)] = f3;
+ f3 = f11+f26;
+ heapFloat[(fp+-6)] = f3;
+ f2 = f14+f2;
+ heapFloat[(fp+-5)] = f2;
+ f2 = f16-f17;
+ heapFloat[(fp+-8)] = f2;
+ f2 = f18-f19;
+ heapFloat[(fp+-9)] = f2;
+ f2 = f0-f7;
+ heapFloat[(fp+-10)] = f2;
+ r6 = r6 | r7;
+ f2 = 0;
+ if(f12 >f2) //_LBB596_5
+{
+ f5 = f5/f12;
+}
+else{
+ f5 = 0.5;
+}
+ f3 = 1;
+ heapFloat[(fp+-1)] = f3;
+ f6 = f3-f5;
+ f9 = heapFloat[(fp+-4)];
+ f9 = f9*f5;
+ f10 = heapFloat[(fp+-5)];
+ f10 = f10*f6;
+ f11 = heapFloat[(fp+-2)];
+ f11 = f11*f5;
+ f12 = heapFloat[(fp+-6)];
+ f12 = f12*f6;
+ f9 = f9+f10;
+ f10 = f11+f12;
+ f11 = heapFloat[(fp+-3)];
+ f11 = f11*f5;
+ f12 = heapFloat[(fp+-7)];
+ f12 = f12*f6;
+ f11 = f11+f12;
+ f12 = f9*f9;
+ f13 = f10*f10;
+ f12 = f12+f13;
+ f13 = f11*f11;
+ f12 = f12+f13;
+ heapFloat[(g0)] = f12;
+ sqrtf(i7);
+ f3 = f3/f_g0;
+ f12 = heapFloat[(r3+13)];
+ f13 = heapFloat[(r3+14)];
+ f14 = heapFloat[(r4+13)];
+ f15 = heapFloat[(r4+14)];
+ f9 = f9*f3;
+ f0 = f0-f12;
+ f7 = f7-f14;
+ f10 = f10*f3;
+ f12 = f18-f13;
+ f13 = f19-f15;
+ f14 = heapFloat[(r3+15)];
+ f15 = heapFloat[(r4+15)];
+ f3 = f11*f3;
+ f11 = f16-f14;
+ f14 = f17-f15;
+ f15 = f0*f9;
+ f16 = f12*f10;
+ f17 = f7*f9;
+ f18 = f13*f10;
+ f15 = f15+f16;
+ f16 = f11*f3;
+ f17 = f17+f18;
+ f18 = f14*f3;
+ f15 = f15+f16;
+ f16 = f17+f18;
+ f17 = f10*f15;
+ f18 = f10*f16;
+ f19 = f9*f15;
+ f20 = f9*f16;
+ f15 = f3*f15;
+ f16 = f3*f16;
+ f12 = f12-f17;
+ f13 = f13-f18;
+ f0 = f0-f19;
+ f7 = f7-f20;
+ f11 = f11-f15;
+ f14 = f14-f16;
+ f21 = f12*f5;
+ f22 = f13*f6;
+ f23 = f0*f5;
+ f24 = f7*f6;
+ f21 = f21+f22;
+ f22 = f23+f24;
+ f23 = f11*f5;
+ f24 = f14*f6;
+ f15 = f16-f15;
+ f16 = f18-f17;
+ f17 = f20-f19;
+ f18 = f23+f24;
+ f19 = f22*f22;
+ f20 = f21*f21;
+ f23 = f15*f5;
+ f24 = f16*f5;
+ f25 = f17*f5;
+ f15 = f15*f6;
+ f16 = f16*f6;
+ f17 = f17*f6;
+ f19 = f19+f20;
+ f20 = f18*f18;
+ f19 = f19+f20;
+ r7 = r8 << 1;
+ f14 = f14+f23;
+ f13 = f13+f24;
+ f7 = f7+f25;
+ f11 = f11-f15;
+ f12 = f12-f16;
+ f0 = f0-f17;
+ f15 = heapFloat[(fp+-11)];
+ if(f19 >f15) //_LBB596_8
+{
+ heapFloat[(g0)] = f19;
+ sqrtf(i7);
+ f4 = heapFloat[(fp+-1)];
+ f8 = f4/f_g0;
+ f1 = f22*f8;
+ f4 = f21*f8;
+ f8 = f18*f8;
+}
+ r9 = heap32[(r5+3)];
+ f15 = f13*f8;
+ f16 = f14*f4;
+ r9 = r9 >> 2;
+ f15 = f15-f16;
+ heapFloat[(r9)] = f15;
+ r9 = heap32[(r5+3)];
+ f15 = f14*f1;
+ f16 = f7*f8;
+ r9 = r9 >> 2;
+ f15 = f15-f16;
+ heapFloat[(r9+1)] = f15;
+ r9 = heap32[(r5+3)];
+ f15 = f7*f4;
+ f16 = f13*f1;
+ r9 = r9 >> 2;
+ f15 = f15-f16;
+ heapFloat[(r9+2)] = f15;
+ f15 = f12*f8;
+ f16 = f11*f4;
+ f15 = f15-f16;
+ r9 = heap32[(r5+5)];
+ r9 = r9 >> 2;
+ f15 = -f15;
+ heapFloat[(r9)] = f15;
+ f15 = f11*f1;
+ f16 = f0*f8;
+ f15 = f15-f16;
+ r9 = heap32[(r5+5)];
+ f16 = f10*f8;
+ f17 = f3*f4;
+ f18 = f9*f4;
+ f19 = f10*f1;
+ f20 = f3*f1;
+ f21 = f9*f8;
+ r9 = r9 >> 2;
+ f15 = -f15;
+ f16 = f16-f17;
+ f17 = f18-f19;
+ f18 = f20-f21;
+ heapFloat[(r9+1)] = f15;
+ f15 = f0*f4;
+ f19 = f12*f1;
+ f15 = f15-f19;
+ r9 = heap32[(r5+5)];
+ f19 = f7*f18;
+ f20 = f13*f16;
+ f21 = f14*f16;
+ f22 = f7*f17;
+ f23 = f13*f17;
+ f24 = f14*f18;
+ f25 = f0*f18;
+ f26 = f12*f16;
+ f27 = f11*f16;
+ f28 = f0*f17;
+ f29 = f12*f17;
+ f30 = f11*f18;
+ f19 = f19-f20;
+ f20 = f21-f22;
+ f21 = f23-f24;
+ f22 = f25-f26;
+ f23 = f27-f28;
+ f24 = f29-f30;
+ r9 = r9 >> 2;
+ f15 = -f15;
+ heapFloat[(r9+2)] = f15;
+ if(r6 != 0) //_LBB596_11
+{
+ r9 = heapU8[r0+722];
+if(!(r9 ==0)) //_LBB596_10
+{
+ f24 = f24*f6;
+ f23 = f23*f6;
+ f22 = f22*f6;
+ f21 = f21*f5;
+ f20 = f20*f5;
+ f19 = f19*f5;
+}
+}
+ r9 = r8 << 2;
+ r10 = heap32[(r5+3)];
+ r10 = (r10 + r9)|0;
+ r10 = r10 >> 2;
+ r11 = (r8 + 1)|0;
+ heapFloat[(r10)] = f21;
+ r10 = r11 << 2;
+ r11 = heap32[(r5+3)];
+ r11 = (r11 + r10)|0;
+ r11 = r11 >> 2;
+ r12 = (r8 + 2)|0;
+ heapFloat[(r11)] = f20;
+ r11 = r12 << 2;
+ r12 = heap32[(r5+3)];
+ r12 = (r12 + r11)|0;
+ r12 = r12 >> 2;
+ heapFloat[(r12)] = f19;
+ r12 = heap32[(r5+5)];
+ r12 = (r12 + r9)|0;
+ r12 = r12 >> 2;
+ f15 = -f24;
+ heapFloat[(r12)] = f15;
+ r12 = heap32[(r5+5)];
+ r10 = (r12 + r10)|0;
+ r10 = r10 >> 2;
+ f15 = -f23;
+ heapFloat[(r10)] = f15;
+ r10 = heap32[(r5+5)];
+ r10 = (r10 + r11)|0;
+ f15 = f7*f10;
+ f19 = f13*f9;
+ f20 = f14*f9;
+ f7 = f7*f3;
+ f13 = f13*f3;
+ f14 = f14*f10;
+ f21 = f0*f10;
+ f23 = f12*f9;
+ f24 = f11*f9;
+ f0 = f0*f3;
+ f12 = f12*f3;
+ f11 = f11*f10;
+ f15 = f15-f19;
+ f7 = f20-f7;
+ f13 = f13-f14;
+ f14 = f21-f23;
+ f0 = f24-f0;
+ f11 = f12-f11;
+ r10 = r10 >> 2;
+ f12 = -f22;
+ heapFloat[(r10)] = f12;
+ if(r6 != 0) //_LBB596_15
+{
+ f11 = f11*f6;
+ f0 = f0*f6;
+ f14 = f14*f6;
+ f13 = f13*f5;
+ f7 = f7*f5;
+ f15 = f15*f5;
+}
+ r6 = r7 << 2;
+ r10 = heap32[(r5+3)];
+ r10 = (r10 + r6)|0;
+ r10 = r10 >> 2;
+ r11 = r7 | 1;
+ heapFloat[(r10)] = f13;
+ r10 = r11 << 2;
+ r11 = heap32[(r5+3)];
+ r11 = (r11 + r10)|0;
+ r11 = r11 >> 2;
+ r7 = (r7 + 2)|0;
+ heapFloat[(r11)] = f7;
+ r7 = r7 << 2;
+ r11 = heap32[(r5+3)];
+ r11 = (r11 + r7)|0;
+ r11 = r11 >> 2;
+ heapFloat[(r11)] = f15;
+ r11 = heap32[(r5+5)];
+ r11 = (r11 + r6)|0;
+ r11 = r11 >> 2;
+ f5 = -f11;
+ heapFloat[(r11)] = f5;
+ r11 = heap32[(r5+5)];
+ r11 = (r11 + r10)|0;
+ r11 = r11 >> 2;
+ f0 = -f0;
+ heapFloat[(r11)] = f0;
+ r11 = heap32[(r5+5)];
+ r7 = (r11 + r7)|0;
+ r7 = r7 >> 2;
+ f0 = -f14;
+ heapFloat[(r7)] = f0;
+ r7 = heapU8[r0+720];
+if(!(r7 !=0)) //_LBB596_18
+{
+ f0 = heapFloat[(r5)];
+ f5 = heapFloat[(r5+1)];
+ f0 = f0*f5;
+ r7 = heap32[(r5+2)];
+ r7 = r7 >> 2;
+ heapFloat[(r7)] = f1;
+ r7 = heap32[(r5+2)];
+ r7 = r7 >> 2;
+ heapFloat[(r7+1)] = f4;
+ r7 = heap32[(r5+2)];
+ r7 = r7 >> 2;
+ heapFloat[(r7+2)] = f8;
+ r7 = heap32[(r5+2)];
+ r7 = (r7 + r9)|0;
+ r7 = r7 >> 2;
+ heapFloat[(r7)] = f16;
+ r7 = heap32[(r5+2)];
+ r7 = (r7 + r9)|0;
+ r7 = r7 >> 2;
+ heapFloat[(r7+1)] = f18;
+ r7 = heap32[(r5+2)];
+ r7 = (r7 + r9)|0;
+ r7 = r7 >> 2;
+ heapFloat[(r7+2)] = f17;
+ r7 = heap32[(r5+2)];
+ r7 = (r7 + r6)|0;
+ r7 = r7 >> 2;
+ heapFloat[(r7)] = f9;
+ r7 = heap32[(r5+2)];
+ r7 = (r7 + r10)|0;
+ r7 = r7 >> 2;
+ heapFloat[(r7)] = f10;
+ r7 = heap32[(r5+2)];
+ r7 = (r7 + r6)|0;
+ r7 = r7 >> 2;
+ f5 = heapFloat[(fp+-10)];
+ f6 = f1*f5;
+ f7 = heapFloat[(fp+-9)];
+ f11 = f4*f7;
+ heapFloat[(r7+2)] = f3;
+ f6 = f6+f11;
+ f11 = heapFloat[(fp+-8)];
+ f12 = f8*f11;
+ r7 = heap32[(r5+7)];
+ f6 = f6+f12;
+ r7 = r7 >> 2;
+ f6 = f6*f0;
+ heapFloat[(r7)] = f6;
+ f6 = f16*f5;
+ f12 = f18*f7;
+ r7 = heap32[(r5+7)];
+ f6 = f6+f12;
+ f12 = f17*f11;
+ r7 = (r7 + r9)|0;
+ f6 = f6+f12;
+ r7 = r7 >> 2;
+ f6 = f6*f0;
+ heapFloat[(r7)] = f6;
+ f5 = f9*f5;
+ f6 = f10*f7;
+ r7 = heap32[(r5+7)];
+ f5 = f5+f6;
+ f6 = f3*f11;
+ r6 = (r7 + r6)|0;
+ f5 = f5+f6;
+ r6 = r6 >> 2;
+ f0 = f5*f0;
+ heapFloat[(r6)] = f0;
+}
+ r2 = (r2 + 4)|0;
+ r6 = (r8 * 3)|0;
+ r7 = r6 << 2;
+ r9 = heap32[(r5+3)];
+ r9 = (r9 + r7)|0;
+ r9 = r9 >> 2;
+ r10 = (r6 + 1)|0;
+ heapFloat[(r9)] = f1;
+ r9 = r10 << 2;
+ r10 = heap32[(r5+3)];
+ r10 = (r10 + r9)|0;
+ r10 = r10 >> 2;
+ r6 = (r6 + 2)|0;
+ heapFloat[(r10)] = f4;
+ r6 = r6 << 2;
+ r10 = heap32[(r5+3)];
+ r10 = (r10 + r6)|0;
+ r10 = r10 >> 2;
+ heapFloat[(r10)] = f8;
+ r8 = r8 << 4;
+ r10 = heap32[(r5+3)];
+ r10 = (r10 + r8)|0;
+ r10 = r10 >> 2;
+ heapFloat[(r10)] = f16;
+ r10 = r8 | 4;
+ r11 = heap32[(r5+3)];
+ r11 = (r11 + r10)|0;
+ r11 = r11 >> 2;
+ heapFloat[(r11)] = f18;
+ r11 = r8 | 8;
+ r12 = heap32[(r5+3)];
+ r12 = (r12 + r11)|0;
+ r12 = r12 >> 2;
+ heapFloat[(r12)] = f17;
+ r12 = heap32[(r5+5)];
+ r12 = (r12 + r7)|0;
+ r12 = r12 >> 2;
+ f0 = -f1;
+ heapFloat[(r12)] = f0;
+ r12 = heap32[(r5+5)];
+ r9 = (r12 + r9)|0;
+ r9 = r9 >> 2;
+ f0 = -f4;
+ heapFloat[(r9)] = f0;
+ r9 = heap32[(r5+5)];
+ r6 = (r9 + r6)|0;
+ r6 = r6 >> 2;
+ f0 = -f8;
+ heapFloat[(r6)] = f0;
+ r6 = heap32[(r5+5)];
+ r6 = (r6 + r8)|0;
+ r6 = r6 >> 2;
+ f0 = -f16;
+ heapFloat[(r6)] = f0;
+ r6 = heap32[(r5+5)];
+ r6 = (r6 + r10)|0;
+ r6 = r6 >> 2;
+ f0 = -f18;
+ heapFloat[(r6)] = f0;
+ r6 = heap32[(r5+5)];
+ r6 = (r6 + r11)|0;
+ f5 = heapFloat[(fp+-7)];
+ f0 = heapFloat[(fp+-2)];
+ f6 = f0*f5;
+ f11 = heapFloat[(fp+-6)];
+ f7 = heapFloat[(fp+-3)];
+ f12 = f7*f11;
+ f13 = heapFloat[(fp+-5)];
+ f7 = f7*f13;
+ f14 = heapFloat[(fp+-4)];
+ f5 = f14*f5;
+ f6 = f6-f12;
+ f5 = f7-f5;
+ f7 = f14*f11;
+ f0 = f0*f13;
+ r6 = r6 >> 2;
+ f11 = -f17;
+ heapFloat[(r6)] = f11;
+ f0 = f7-f0;
+ f1 = f6*f1;
+ f4 = f5*f4;
+ r6 = heap32[(r5+7)];
+ f1 = f1+f4;
+ f4 = f0*f8;
+ f7 = heapFloat[(r5)];
+ f8 = heapFloat[(r5+1)];
+ r6 = (r6 + r7)|0;
+ f1 = f1+f4;
+ f4 = f7*f8;
+ r6 = r6 >> 2;
+ f1 = f1*f4;
+ heapFloat[(r6)] = f1;
+ f1 = f6*f16;
+ f5 = f5*f18;
+ r6 = heap32[(r5+7)];
+ f1 = f1+f5;
+ f0 = f0*f17;
+ r6 = (r6 + r8)|0;
+ f0 = f1+f0;
+ r6 = r6 >> 2;
+ f0 = f0*f4;
+ heapFloat[(r6)] = f0;
+ r6 = heapU8[r0+722];
+ if(r6 !=0) //_LBB596_20
+{
+ f0 = heapFloat[(r1+176)];
+ f1 = heapFloat[(r1+179)];
+ f0 = f0*f1;
+ r6 = 1;
+ r7 = 2;
+ r6 = f0 > f2 ? r6 : r7;
+}
+else{
+ f0 = 0;
+ r6 = 0;
+}
+ r7 = heapU8[r0+721];
+ r8 = 0;
+ r9 = r7 != r8;
+ r9 = r9 & 1;
+ r9 = r9 | r6;
+ if(r9 ==0) //_LBB596_59
+{
+__label__ = 54;
+}
+else{
+ r9 = heap32[(r5+6)];
+ r9 = (r9 * 5)|0;
+ r10 = heap32[(r5+3)];
+ r11 = r9 << 2;
+ r10 = (r10 + r11)|0;
+ r10 = r10 >> 2;
+ r12 = (r9 + 1)|0;
+ heapFloat[(r10)] = f9;
+ r10 = r12 << 2;
+ r12 = heap32[(r5+3)];
+ r12 = (r12 + r10)|0;
+ r12 = r12 >> 2;
+ r9 = (r9 + 2)|0;
+ heapFloat[(r12)] = f10;
+ r9 = r9 << 2;
+ r12 = heap32[(r5+3)];
+ r12 = (r12 + r9)|0;
+ r12 = r12 >> 2;
+ heapFloat[(r12)] = f3;
+ r12 = heap32[(r5+5)];
+ r12 = (r12 + r11)|0;
+ r12 = r12 >> 2;
+ f1 = -f9;
+ heapFloat[(r12)] = f1;
+ r12 = heap32[(r5+5)];
+ r10 = (r12 + r10)|0;
+ r10 = r10 >> 2;
+ f1 = -f10;
+ heapFloat[(r10)] = f1;
+ r10 = heap32[(r5+5)];
+ r9 = (r10 + r9)|0;
+ r9 = r9 >> 2;
+ f1 = -f3;
+ heapFloat[(r9)] = f1;
+ r9 = heap32[(r5+7)];
+ r9 = (r9 + r11)|0;
+ f1 = heapFloat[(r1+172)];
+ f4 = heapFloat[(r1+173)];
+ r9 = r9 >> 2;
+ heap32[(r9)] = 0;
+ r9 = r6 != r8;
+ r10 = f1 == f4;
+ r12 = heap32[(r1+183)];
+ r9 = r9 & r10;
+ r10 = r12 & 2;
+ if(r10 !=0) //_LBB596_24
+{
+ r2 = (r0 + 744)|0;
+}
+ r2 = r2 >> 2;
+ f5 = heapFloat[(r2)];
+ r2 = r7 == r8;
+ r2 = r9 | r2;
+if(!(r2 != 0)) //_LBB596_42
+{
+ r2 = r12 & 4;
+if(!(r2 ==0)) //_LBB596_28
+{
+ r2 = heap32[(r5+8)];
+ r2 = (r2 + r11)|0;
+ r2 = r2 >> 2;
+ heap32[(r2)] = heap32[(r1+184)];
+}
+ f6 = heapFloat[(r1+167)];
+_94: do {
+ if(f1 <f4) //_LBB596_30
+{
+ f7 = heapFloat[(r1+178)];
+ f8 = heapFloat[(r5)];
+ f8 = f8*f5;
+ f8 = f6/f8;
+ if(f8 >=f2) //_LBB596_35
+{
+ if(f8 >f2) //_LBB596_37
+{
+if(!(f7 >f4)) //_LBB596_40
+{
+ f2 = f4-f8;
+if(!(f2 >=f7)) //_LBB596_40
+{
+ f2 = f4-f7;
+ f2 = f2/f8;
+break _94;
+}
+}
+ f2 = 0;
+ f8 = heapFloat[(fp+-1)];
+ f2 = f7 > f4 ? f2 : f8;
+}
+else{
+break _94;
+}
+}
+else{
+if(!(f7 <f1)) //_LBB596_34
+{
+ f2 = f1-f8;
+if(!(f2 <=f7)) //_LBB596_34
+{
+ f2 = f1-f7;
+ f2 = f2/f8;
+break _94;
+}
+}
+ f2 = 0;
+ f8 = heapFloat[(fp+-1)];
+ f2 = f7 < f1 ? f2 : f8;
+}
+}
+else{
+ f7 = heapFloat[(fp+-1)];
+ f2 = f1 > f4 ? f7 : f2;
+}
+} while(0);
+ r2 = heap32[(r5+7)];
+ r2 = (r2 + r11)|0;
+ r2 = r2 >> 2;
+ f2 = f6*f2;
+ f6 = heapFloat[(r1+179)];
+ f7 = heapFloat[(r2)];
+ f2 = f2*f6;
+ f2 = f7+f2;
+ heapFloat[(r2)] = f2;
+ r2 = heap32[(r5+9)];
+ f2 = heapFloat[(r1+168)];
+ r2 = (r2 + r11)|0;
+ r2 = r2 >> 2;
+ f2 = -f2;
+ heapFloat[(r2)] = f2;
+ r2 = heap32[(r5+10)];
+ r2 = (r2 + r11)|0;
+ r2 = r2 >> 2;
+ heap32[(r2)] = heap32[(r1+168)];
+}
+ if(r6 ==0) //_LBB596_59
+{
+__label__ = 54;
+}
+else{
+ r2 = heap32[(r5+7)];
+ r2 = (r2 + r11)|0;
+ f2 = heapFloat[(r5)];
+ r2 = r2 >> 2;
+ f2 = f2*f5;
+ f5 = heapFloat[(r2)];
+ f0 = f2*f0;
+ f0 = f5+f0;
+ heapFloat[(r2)] = f0;
+ r0 = heapU8[r0+732];
+ r0 = r0 & 1;
+if(!(r0 ==0)) //_LBB596_45
+{
+ r0 = heap32[(r5+8)];
+ r0 = (r0 + r11)|0;
+ r0 = r0 >> 2;
+ heap32[(r0)] = heap32[(r1+185)];
+}
+ if(f1 !=f4) //_LBB596_47
+{
+ r0 = heap32[(r5+9)];
+ if(r6 !=1) //_LBB596_49
+{
+ r0 = (r0 + r11)|0;
+ r0 = r0 >> 2;
+ heap32[(r0)] = -8388609;
+ r0 = heap32[(r5+10)];
+ r0 = (r0 + r11)|0;
+ r0 = r0 >> 2;
+ heap32[(r0)] = 0;
+}
+else{
+ r0 = (r0 + r11)|0;
+ r0 = r0 >> 2;
+ heap32[(r0)] = 0;
+ r0 = heap32[(r5+10)];
+ r0 = (r0 + r11)|0;
+ r0 = r0 >> 2;
+ heap32[(r0)] = 2139095039;
+}
+}
+else{
+ r0 = heap32[(r5+9)];
+ r0 = (r0 + r11)|0;
+ r0 = r0 >> 2;
+ heap32[(r0)] = -8388609;
+ r0 = heap32[(r5+10)];
+ r0 = (r0 + r11)|0;
+ r0 = r0 >> 2;
+ heap32[(r0)] = 2139095039;
+}
+ f0 = heapFloat[(r1+171)];
+ f1 = 0;
+ if(f0 <=f1) //_LBB596_58
+{
+__label__ = 53;
+}
+else{
+ f2 = heapFloat[(r4+80)];
+ f4 = heapFloat[(r3+80)];
+ f5 = heapFloat[(r4+81)];
+ f6 = heapFloat[(r3+81)];
+ f2 = f2*f9;
+ f5 = f5*f10;
+ f7 = heapFloat[(r4+82)];
+ f8 = heapFloat[(r3+82)];
+ f4 = f4*f9;
+ f6 = f6*f10;
+ f2 = f2+f5;
+ f5 = f7*f3;
+ f4 = f4+f6;
+ f3 = f8*f3;
+ f2 = f2+f5;
+ f3 = f4+f3;
+ f2 = f2-f3;
+ if(r6 !=1) //_LBB596_55
+{
+ if(f2 <=f1) //_LBB596_58
+{
+__label__ = 53;
+}
+else{
+ r0 = heap32[(r5+7)];
+ f0 = -f0;
+ r0 = (r0 + r11)|0;
+ f0 = f2*f0;
+ r0 = r0 >> 2;
+ f1 = heapFloat[(r0)];
+ if(f1 <=f0) //_LBB596_58
+{
+__label__ = 53;
+}
+else{
+ heapFloat[(r0)] = f0;
+__label__ = 53;
+}
+}
+}
+else{
+ if(f2 >=f1) //_LBB596_58
+{
+__label__ = 53;
+}
+else{
+ r0 = heap32[(r5+7)];
+ f0 = -f0;
+ r0 = (r0 + r11)|0;
+ f0 = f2*f0;
+ r0 = r0 >> 2;
+ f1 = heapFloat[(r0)];
+ if(f1 >=f0) //_LBB596_58
+{
+__label__ = 53;
+}
+else{
+ heapFloat[(r0)] = f0;
+__label__ = 53;
+}
+}
+}
+}
+}
+}
+}
+else{
+ r0 = _2E_str1149;
+ r1 = _2E_str231;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 682;
+ _assert(i7);
+}
+}
+} while(0);
+if (__label__ == 53){
+ r0 = heap32[(r5+7)];
+ r0 = (r0 + r11)|0;
+ r0 = r0 >> 2;
+ f0 = heapFloat[(r0)];
+ f1 = heapFloat[(r1+170)];
+ f0 = f0*f1;
+ heapFloat[(r0)] = f0;
+}
+ return;
+}
+
+function _ZN17btHingeConstraint8setParamEifi(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var f0;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+3)];
+if(!(r0 ==-1)) //_LBB597_2
+{
+ if(r0 !=5) //_LBB597_9
+{
+ r0 = _2E_str10;
+ r1 = _2E_str231;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 969;
+ _assert(i7);
+}
+}
+ r0 = heap32[(fp)];
+ r1 = heap32[(fp+1)];
+ f0 = heapFloat[(fp+2)];
+ if(r1 ==4) //_LBB597_6
+{
+ r0 = r0 >> 2;
+ heapFloat[(r0+185)] = f0;
+ r1 = heap32[(r0+183)];
+ r1 = r1 | 1;
+ heap32[(r0+183)] = r1;
+ return;
+}
+else{
+ if(r1 ==3) //_LBB597_7
+{
+ r0 = r0 >> 2;
+ heapFloat[(r0+184)] = f0;
+ r1 = heap32[(r0+183)];
+ r1 = r1 | 4;
+ heap32[(r0+183)] = r1;
+ return;
+}
+else{
+ if(r1 !=2) //_LBB597_8
+{
+ r0 = _2E_str10;
+ r1 = _2E_str231;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 964;
+ _assert(i7);
+}
+else{
+ r0 = r0 >> 2;
+ heapFloat[(r0+186)] = f0;
+ r1 = heap32[(r0+183)];
+ r1 = r1 | 2;
+ heap32[(r0+183)] = r1;
+ return;
+}
+}
+}
+}
+
+function _ZNK17btHingeConstraint8getParamEii(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var f0;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+2)];
+if(!(r0 ==-1)) //_LBB598_2
+{
+ if(r0 !=5) //_LBB598_15
+{
+ r0 = _2E_str10;
+ r1 = _2E_str231;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 999;
+ _assert(i7);
+}
+}
+ r0 = heap32[(fp)];
+ r1 = heap32[(fp+1)];
+ if(r1 ==4) //_LBB598_8
+{
+ r1 = heapU8[r0+732];
+ r1 = r1 & 1;
+ if(r1 != 0) //_LBB598_10
+{
+ r0 = (r0 + 740)|0;
+}
+else{
+ r0 = _2E_str332;
+ r1 = _2E_str231;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 986;
+ _assert(i7);
+}
+}
+else{
+ if(r1 ==3) //_LBB598_11
+{
+ r1 = heapU8[r0+732];
+ r1 = r1 & 4;
+ if(r1 !=0) //_LBB598_13
+{
+ r0 = (r0 + 736)|0;
+}
+else{
+ r0 = _2E_str433;
+ r1 = _2E_str231;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 990;
+ _assert(i7);
+}
+}
+else{
+ if(r1 !=2) //_LBB598_14
+{
+ r0 = _2E_str10;
+ r1 = _2E_str231;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 994;
+ _assert(i7);
+}
+else{
+ r1 = heapU8[r0+732];
+ r1 = r1 & 2;
+ if(r1 !=0) //_LBB598_7
+{
+ r0 = (r0 + 744)|0;
+}
+else{
+ r0 = _2E_str130;
+ r1 = _2E_str231;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 982;
+ _assert(i7);
+}
+}
+}
+}
+ r0 = r0 >> 2;
+ f0 = heapFloat[(r0)];
+ f_g0 = f0;
+ return;
+}
+
+function _ZN17btHingeConstraint13getHingeAngleERK11btTransformS2_(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+ var f10;
+ var f11;
+ var f12;
+ var f13;
+ var f14;
+ var f15;
+ var f16;
+ var f17;
+ var f18;
+ var f19;
+ var f20;
+ var f21;
+ var f22;
+ var f23;
+ var f24;
+ var f25;
+ var f26;
+ var f27;
+ var f28;
+ var f29;
+ var f30;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ r1 = heap32[(fp+2)];
+ r2 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r1 = r1 >> 2;
+ r2 = r2 >> 2;
+ f0 = heapFloat[(r2+135)];
+ f1 = heapFloat[(r0+4)];
+ f2 = heapFloat[(r0)];
+ f3 = heapFloat[(r2+136)];
+ f4 = heapFloat[(r2+139)];
+ f5 = heapFloat[(r0+5)];
+ f6 = heapFloat[(r0+1)];
+ f7 = heapFloat[(r2+140)];
+ f8 = heapFloat[(r2+152)];
+ f9 = heapFloat[(r1+4)];
+ f10 = heapFloat[(r1)];
+ f11 = heapFloat[(r2+156)];
+ f12 = heapFloat[(r1+5)];
+ f13 = heapFloat[(r1+1)];
+ f14 = heapFloat[(r0+8)];
+ f15 = heapFloat[(r0+9)];
+ f16 = heapFloat[(r1+8)];
+ f17 = heapFloat[(r1+9)];
+ f18 = f2*f0;
+ f19 = f6*f4;
+ f20 = f1*f0;
+ f21 = f5*f4;
+ f10 = f10*f8;
+ f13 = f13*f11;
+ f2 = f2*f3;
+ f6 = f6*f7;
+ f9 = f9*f8;
+ f12 = f12*f11;
+ f1 = f1*f3;
+ f5 = f5*f7;
+ f22 = heapFloat[(r2+143)];
+ f23 = heapFloat[(r0+6)];
+ f24 = heapFloat[(r0+2)];
+ f25 = heapFloat[(r2+144)];
+ f26 = heapFloat[(r2+160)];
+ f27 = heapFloat[(r1+6)];
+ f28 = heapFloat[(r1+2)];
+ f29 = heapFloat[(r0+10)];
+ f30 = heapFloat[(r1+10)];
+ f18 = f18+f19;
+ f19 = f24*f22;
+ f20 = f20+f21;
+ f21 = f23*f22;
+ f0 = f14*f0;
+ f4 = f15*f4;
+ f10 = f10+f13;
+ f13 = f28*f26;
+ f2 = f2+f6;
+ f6 = f24*f25;
+ f9 = f9+f12;
+ f12 = f27*f26;
+ f1 = f1+f5;
+ f5 = f23*f25;
+ f8 = f16*f8;
+ f11 = f17*f11;
+ f3 = f14*f3;
+ f7 = f15*f7;
+ f14 = f18+f19;
+ f10 = f10+f13;
+ f2 = f2+f6;
+ f6 = f20+f21;
+ f9 = f9+f12;
+ f1 = f1+f5;
+ f0 = f0+f4;
+ f4 = f29*f22;
+ f5 = f8+f11;
+ f8 = f30*f26;
+ f3 = f3+f7;
+ f7 = f29*f25;
+ f11 = f10*f14;
+ f6 = f9*f6;
+ f0 = f0+f4;
+ f4 = f5+f8;
+ f3 = f3+f7;
+ f2 = f10*f2;
+ f1 = f9*f1;
+ f5 = f11+f6;
+ f0 = f4*f0;
+ f1 = f2+f1;
+ f2 = f4*f3;
+ f0 = f5+f0;
+ f1 = f1+f2;
+ heapFloat[(g0)] = f0;
+ heapFloat[(g0+1)] = f1;
+ atan2f(i7);
+ f1 = heapFloat[(r2+179)];
+ f0 = f1*f_g0;
+ f_g0 = f0;
+ return;
+}
+
+function _ZN18btConstraintSolver12prepareSolveEii(sp)
+{
+ var i7;
+ var fp = sp>>2;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ return;
+}
+
+function _ZN18btConstraintSolver9allSolvedERK19btContactSolverInfoP12btIDebugDrawP12btStackAlloc(sp)
+{
+ var i7;
+ var fp = sp>>2;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ return;
+}
+
+function _ZN35btSequentialImpulseConstraintSolver33resolveSingleConstraintRowGenericER11btRigidBodyS1_RK18btSolverConstraint(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+ var f10;
+ var f11;
+ var f12;
+ var f13;
+ var f14;
+ var f15;
+ var f16;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = heap32[(fp+2)];
+ r1 = r1 >> 2;
+ r0 = r0 >> 2;
+ r2 = heap32[(fp+1)];
+ r2 = r2 >> 2;
+ f0 = heapFloat[(r1+4)];
+ f1 = heapFloat[(r0+126)];
+ f2 = heapFloat[(r1+5)];
+ f3 = heapFloat[(r0+127)];
+ f4 = heapFloat[(r1)];
+ f5 = heapFloat[(r0+130)];
+ f6 = heapFloat[(r1+1)];
+ f7 = heapFloat[(r0+131)];
+ f8 = heapFloat[(r2+126)];
+ f9 = heapFloat[(r2+127)];
+ f10 = heapFloat[(r1+6)];
+ f11 = heapFloat[(r0+128)];
+ f1 = f0*f1;
+ f3 = f2*f3;
+ f4 = f4*f5;
+ f5 = f6*f7;
+ f6 = heapFloat[(r1+2)];
+ f7 = heapFloat[(r0+132)];
+ f12 = heapFloat[(r1+8)];
+ f13 = heapFloat[(r2+130)];
+ f14 = heapFloat[(r1+9)];
+ f15 = heapFloat[(r2+131)];
+ f16 = heapFloat[(r2+128)];
+ f1 = f1+f3;
+ f3 = f10*f11;
+ f4 = f4+f5;
+ f5 = f6*f7;
+ f6 = f12*f13;
+ f7 = f14*f15;
+ f11 = heapFloat[(r1+10)];
+ f12 = heapFloat[(r2+132)];
+ f8 = f0*f8;
+ f9 = f2*f9;
+ f13 = heapFloat[(r1+21)];
+ f14 = heapFloat[(r1+30)];
+ f1 = f1+f3;
+ f3 = f4+f5;
+ f4 = f6+f7;
+ f5 = f11*f12;
+ f6 = f8+f9;
+ f7 = f10*f16;
+ f8 = heapFloat[(r1+29)];
+ f9 = f13*f14;
+ f1 = f1+f3;
+ f3 = heapFloat[(r1+23)];
+ f4 = f4+f5;
+ f5 = f6+f7;
+ f4 = f4-f5;
+ f5 = f8-f9;
+ f1 = f3*f1;
+ f1 = f5-f1;
+ f3 = f3*f4;
+ f1 = f1-f3;
+ f3 = heapFloat[(r1+31)];
+ f4 = f13+f1;
+ if(f3 <=f4) //_LBB602_2
+{
+ f3 = heapFloat[(r1+32)];
+ if(f3 >=f4) //_LBB602_4
+{
+ heapFloat[(r1+21)] = f4;
+}
+else{
+ f1 = f3-f13;
+ heapFloat[(r1+21)] = f3;
+}
+}
+else{
+ f1 = f3-f13;
+ heapFloat[(r1+21)] = f3;
+}
+ f3 = heapFloat[(r0+84)];
+ f4 = 0;
+if(!(f3 ==f4)) //_LBB602_7
+{
+ f3 = heapFloat[(r0+138)];
+ f0 = f0*f3;
+ f0 = f0*f1;
+ f3 = heapFloat[(r0+126)];
+ f5 = heapFloat[(r0+139)];
+ f6 = heapFloat[(r0+140)];
+ f0 = f3+f0;
+ f2 = f2*f5;
+ heapFloat[(r0+126)] = f0;
+ f0 = f2*f1;
+ f2 = heapFloat[(r0+127)];
+ f0 = f2+f0;
+ f2 = f10*f6;
+ heapFloat[(r0+127)] = f0;
+ f0 = f2*f1;
+ f2 = heapFloat[(r0+128)];
+ f0 = f2+f0;
+ heapFloat[(r0+128)] = f0;
+ f0 = heapFloat[(r0+134)];
+ f0 = f0*f1;
+ f2 = heapFloat[(r1+12)];
+ f3 = heapFloat[(r0+136)];
+ f5 = heapFloat[(r0+135)];
+ f0 = f2*f0;
+ f2 = heapFloat[(r0+130)];
+ f6 = heapFloat[(r1+14)];
+ f7 = heapFloat[(r1+13)];
+ f0 = f2+f0;
+ f2 = f5*f1;
+ heapFloat[(r0+130)] = f0;
+ f0 = f7*f2;
+ f2 = heapFloat[(r0+131)];
+ f0 = f2+f0;
+ f2 = f3*f1;
+ heapFloat[(r0+131)] = f0;
+ f0 = f6*f2;
+ f2 = heapFloat[(r0+132)];
+ f0 = f2+f0;
+ heapFloat[(r0+132)] = f0;
+}
+ f0 = heapFloat[(r2+84)];
+if(!(f0 ==f4)) //_LBB602_9
+{
+ f0 = heapFloat[(r1+4)];
+ f2 = heapFloat[(r2+138)];
+ f0 = f2*f0;
+ f0 = f0*f1;
+ f2 = heapFloat[(r2+126)];
+ f3 = heapFloat[(r1+5)];
+ f4 = heapFloat[(r2+139)];
+ f5 = heapFloat[(r1+6)];
+ f6 = heapFloat[(r2+140)];
+ f0 = f2-f0;
+ f2 = f4*f3;
+ heapFloat[(r2+126)] = f0;
+ f0 = f2*f1;
+ f2 = heapFloat[(r2+127)];
+ f0 = f2-f0;
+ f2 = f6*f5;
+ heapFloat[(r2+127)] = f0;
+ f0 = f2*f1;
+ f2 = heapFloat[(r2+128)];
+ f0 = f2-f0;
+ heapFloat[(r2+128)] = f0;
+ f0 = heapFloat[(r2+134)];
+ f0 = f0*f1;
+ f2 = heapFloat[(r1+16)];
+ f3 = heapFloat[(r2+136)];
+ f4 = heapFloat[(r2+135)];
+ f0 = f2*f0;
+ f2 = heapFloat[(r2+130)];
+ f5 = heapFloat[(r1+18)];
+ f6 = heapFloat[(r1+17)];
+ f0 = f2+f0;
+ f2 = f4*f1;
+ heapFloat[(r2+130)] = f0;
+ f0 = f6*f2;
+ f2 = heapFloat[(r2+131)];
+ f0 = f2+f0;
+ f1 = f3*f1;
+ heapFloat[(r2+131)] = f0;
+ f0 = f5*f1;
+ f1 = heapFloat[(r2+132)];
+ f0 = f1+f0;
+ heapFloat[(r2+132)] = f0;
+}
+ return;
+}
+
+function _ZN35btSequentialImpulseConstraintSolver36resolveSingleConstraintRowLowerLimitER11btRigidBodyS1_RK18btSolverConstraint(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+ var f10;
+ var f11;
+ var f12;
+ var f13;
+ var f14;
+ var f15;
+ var f16;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = heap32[(fp+2)];
+ r1 = r1 >> 2;
+ r0 = r0 >> 2;
+ r2 = heap32[(fp+1)];
+ r2 = r2 >> 2;
+ f0 = heapFloat[(r1+4)];
+ f1 = heapFloat[(r0+126)];
+ f2 = heapFloat[(r1+5)];
+ f3 = heapFloat[(r0+127)];
+ f4 = heapFloat[(r1)];
+ f5 = heapFloat[(r0+130)];
+ f6 = heapFloat[(r1+1)];
+ f7 = heapFloat[(r0+131)];
+ f8 = heapFloat[(r2+126)];
+ f9 = heapFloat[(r2+127)];
+ f10 = heapFloat[(r1+6)];
+ f11 = heapFloat[(r0+128)];
+ f1 = f0*f1;
+ f3 = f2*f3;
+ f4 = f4*f5;
+ f5 = f6*f7;
+ f6 = heapFloat[(r1+2)];
+ f7 = heapFloat[(r0+132)];
+ f12 = heapFloat[(r1+8)];
+ f13 = heapFloat[(r2+130)];
+ f14 = heapFloat[(r1+9)];
+ f15 = heapFloat[(r2+131)];
+ f16 = heapFloat[(r2+128)];
+ f1 = f1+f3;
+ f3 = f10*f11;
+ f4 = f4+f5;
+ f5 = f6*f7;
+ f6 = f12*f13;
+ f7 = f14*f15;
+ f11 = heapFloat[(r1+10)];
+ f12 = heapFloat[(r2+132)];
+ f8 = f0*f8;
+ f9 = f2*f9;
+ f13 = heapFloat[(r1+21)];
+ f14 = heapFloat[(r1+30)];
+ f1 = f1+f3;
+ f3 = f4+f5;
+ f4 = f6+f7;
+ f5 = f11*f12;
+ f6 = f8+f9;
+ f7 = f10*f16;
+ f8 = heapFloat[(r1+29)];
+ f9 = f13*f14;
+ f1 = f1+f3;
+ f3 = heapFloat[(r1+23)];
+ f4 = f4+f5;
+ f5 = f6+f7;
+ f4 = f4-f5;
+ f5 = f8-f9;
+ f1 = f3*f1;
+ f1 = f5-f1;
+ f3 = f3*f4;
+ f1 = f1-f3;
+ f3 = heapFloat[(r1+31)];
+ f4 = f13+f1;
+ if(f3 >f4) //_LBB603_2
+{
+ f1 = f3-f13;
+ f4 = f3;
+}
+ heapFloat[(r1+21)] = f4;
+ f3 = heapFloat[(r0+84)];
+ f4 = 0;
+if(!(f3 ==f4)) //_LBB603_5
+{
+ f3 = heapFloat[(r0+138)];
+ f0 = f0*f3;
+ f0 = f0*f1;
+ f3 = heapFloat[(r0+126)];
+ f5 = heapFloat[(r0+139)];
+ f6 = heapFloat[(r0+140)];
+ f0 = f3+f0;
+ f2 = f2*f5;
+ heapFloat[(r0+126)] = f0;
+ f0 = f2*f1;
+ f2 = heapFloat[(r0+127)];
+ f0 = f2+f0;
+ f2 = f10*f6;
+ heapFloat[(r0+127)] = f0;
+ f0 = f2*f1;
+ f2 = heapFloat[(r0+128)];
+ f0 = f2+f0;
+ heapFloat[(r0+128)] = f0;
+ f0 = heapFloat[(r0+134)];
+ f0 = f0*f1;
+ f2 = heapFloat[(r1+12)];
+ f3 = heapFloat[(r0+136)];
+ f5 = heapFloat[(r0+135)];
+ f0 = f2*f0;
+ f2 = heapFloat[(r0+130)];
+ f6 = heapFloat[(r1+14)];
+ f7 = heapFloat[(r1+13)];
+ f0 = f2+f0;
+ f2 = f5*f1;
+ heapFloat[(r0+130)] = f0;
+ f0 = f7*f2;
+ f2 = heapFloat[(r0+131)];
+ f0 = f2+f0;
+ f2 = f3*f1;
+ heapFloat[(r0+131)] = f0;
+ f0 = f6*f2;
+ f2 = heapFloat[(r0+132)];
+ f0 = f2+f0;
+ heapFloat[(r0+132)] = f0;
+}
+ f0 = heapFloat[(r2+84)];
+if(!(f0 ==f4)) //_LBB603_7
+{
+ f0 = heapFloat[(r1+4)];
+ f2 = heapFloat[(r2+138)];
+ f0 = f2*f0;
+ f0 = f0*f1;
+ f2 = heapFloat[(r2+126)];
+ f3 = heapFloat[(r1+5)];
+ f4 = heapFloat[(r2+139)];
+ f5 = heapFloat[(r1+6)];
+ f6 = heapFloat[(r2+140)];
+ f0 = f2-f0;
+ f2 = f4*f3;
+ heapFloat[(r2+126)] = f0;
+ f0 = f2*f1;
+ f2 = heapFloat[(r2+127)];
+ f0 = f2-f0;
+ f2 = f6*f5;
+ heapFloat[(r2+127)] = f0;
+ f0 = f2*f1;
+ f2 = heapFloat[(r2+128)];
+ f0 = f2-f0;
+ heapFloat[(r2+128)] = f0;
+ f0 = heapFloat[(r2+134)];
+ f0 = f0*f1;
+ f2 = heapFloat[(r1+16)];
+ f3 = heapFloat[(r2+136)];
+ f4 = heapFloat[(r2+135)];
+ f0 = f2*f0;
+ f2 = heapFloat[(r2+130)];
+ f5 = heapFloat[(r1+18)];
+ f6 = heapFloat[(r1+17)];
+ f0 = f2+f0;
+ f2 = f4*f1;
+ heapFloat[(r2+130)] = f0;
+ f0 = f6*f2;
+ f2 = heapFloat[(r2+131)];
+ f0 = f2+f0;
+ f1 = f3*f1;
+ heapFloat[(r2+131)] = f0;
+ f0 = f5*f1;
+ f1 = heapFloat[(r2+132)];
+ f0 = f1+f0;
+ heapFloat[(r2+132)] = f0;
+}
+ return;
+}
+
+function _ZN35btSequentialImpulseConstraintSolver43resolveSplitPenetrationImpulseCacheFriendlyER11btRigidBodyS1_RK18btSolverConstraint(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+ var f10;
+ var f11;
+ var f12;
+ var f13;
+ var f14;
+ var f15;
+ var f16;
+ var f17;
+ var f18;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+2)];
+ r0 = r0 >> 2;
+ f0 = heapFloat[(r0+33)];
+ f1 = 0;
+if(!(f0 ==f1)) //_LBB604_8
+{
+ r1 = heap32[(fp)];
+ r2 = heap32[(fp+1)];
+ r3 = gNumSplitImpulseRecoveries;
+ r3 = r3 >> 2;
+ r4 = heap32[(r3)];
+ r4 = (r4 + 1)|0;
+ r1 = r1 >> 2;
+ heap32[(r3)] = r4;
+ r2 = r2 >> 2;
+ f2 = heapFloat[(r0+4)];
+ f3 = heapFloat[(r1+142)];
+ f4 = heapFloat[(r0+5)];
+ f5 = heapFloat[(r1+143)];
+ f6 = heapFloat[(r0)];
+ f7 = heapFloat[(r1+146)];
+ f8 = heapFloat[(r0+1)];
+ f9 = heapFloat[(r1+147)];
+ f10 = heapFloat[(r2+142)];
+ f11 = heapFloat[(r2+143)];
+ f12 = heapFloat[(r0+6)];
+ f13 = heapFloat[(r1+144)];
+ f3 = f2*f3;
+ f5 = f4*f5;
+ f6 = f6*f7;
+ f7 = f8*f9;
+ f8 = heapFloat[(r0+2)];
+ f9 = heapFloat[(r1+148)];
+ f14 = heapFloat[(r0+8)];
+ f15 = heapFloat[(r2+146)];
+ f16 = heapFloat[(r0+9)];
+ f17 = heapFloat[(r2+147)];
+ f18 = heapFloat[(r2+144)];
+ f3 = f3+f5;
+ f5 = f12*f13;
+ f6 = f6+f7;
+ f7 = f8*f9;
+ f8 = f14*f15;
+ f9 = f16*f17;
+ f13 = heapFloat[(r0+10)];
+ f14 = heapFloat[(r2+148)];
+ f10 = f2*f10;
+ f11 = f4*f11;
+ f15 = heapFloat[(r0+20)];
+ f16 = heapFloat[(r0+30)];
+ f3 = f3+f5;
+ f5 = f6+f7;
+ f6 = f8+f9;
+ f7 = f13*f14;
+ f8 = f10+f11;
+ f9 = f12*f18;
+ f10 = f15*f16;
+ f3 = f3+f5;
+ f5 = heapFloat[(r0+23)];
+ f6 = f6+f7;
+ f7 = f8+f9;
+ f6 = f6-f7;
+ f0 = f0-f10;
+ f3 = f5*f3;
+ f0 = f0-f3;
+ f3 = f5*f6;
+ f0 = f0-f3;
+ f3 = heapFloat[(r0+31)];
+ f5 = f15+f0;
+ if(f3 >f5) //_LBB604_3
+{
+ f0 = f3-f15;
+ f5 = f3;
+}
+ heapFloat[(r0+20)] = f5;
+ f3 = heapFloat[(r1+84)];
+if(!(f3 ==f1)) //_LBB604_6
+{
+ f3 = heapFloat[(r1+138)];
+ f2 = f2*f3;
+ f2 = f2*f0;
+ f3 = heapFloat[(r1+142)];
+ f5 = heapFloat[(r1+139)];
+ f6 = heapFloat[(r1+140)];
+ f2 = f3+f2;
+ f3 = f4*f5;
+ heapFloat[(r1+142)] = f2;
+ f2 = f3*f0;
+ f3 = heapFloat[(r1+143)];
+ f2 = f3+f2;
+ f3 = f12*f6;
+ heapFloat[(r1+143)] = f2;
+ f2 = f3*f0;
+ f3 = heapFloat[(r1+144)];
+ f2 = f3+f2;
+ heapFloat[(r1+144)] = f2;
+ f2 = heapFloat[(r1+134)];
+ f2 = f2*f0;
+ f3 = heapFloat[(r0+12)];
+ f4 = heapFloat[(r1+136)];
+ f5 = heapFloat[(r1+135)];
+ f2 = f3*f2;
+ f3 = heapFloat[(r1+146)];
+ f6 = heapFloat[(r0+14)];
+ f7 = heapFloat[(r0+13)];
+ f2 = f3+f2;
+ f3 = f5*f0;
+ heapFloat[(r1+146)] = f2;
+ f2 = f7*f3;
+ f3 = heapFloat[(r1+147)];
+ f2 = f3+f2;
+ f3 = f4*f0;
+ heapFloat[(r1+147)] = f2;
+ f2 = f6*f3;
+ f3 = heapFloat[(r1+148)];
+ f2 = f3+f2;
+ heapFloat[(r1+148)] = f2;
+}
+ f2 = heapFloat[(r2+84)];
+if(!(f2 ==f1)) //_LBB604_8
+{
+ f1 = heapFloat[(r0+4)];
+ f2 = heapFloat[(r2+138)];
+ f1 = f2*f1;
+ f1 = f1*f0;
+ f2 = heapFloat[(r2+142)];
+ f3 = heapFloat[(r0+5)];
+ f4 = heapFloat[(r2+139)];
+ f5 = heapFloat[(r0+6)];
+ f6 = heapFloat[(r2+140)];
+ f1 = f2-f1;
+ f2 = f4*f3;
+ heapFloat[(r2+142)] = f1;
+ f1 = f2*f0;
+ f2 = heapFloat[(r2+143)];
+ f1 = f2-f1;
+ f2 = f6*f5;
+ heapFloat[(r2+143)] = f1;
+ f1 = f2*f0;
+ f2 = heapFloat[(r2+144)];
+ f1 = f2-f1;
+ heapFloat[(r2+144)] = f1;
+ f1 = heapFloat[(r2+134)];
+ f1 = f1*f0;
+ f2 = heapFloat[(r0+16)];
+ f3 = heapFloat[(r2+136)];
+ f4 = heapFloat[(r2+135)];
+ f1 = f2*f1;
+ f2 = heapFloat[(r2+146)];
+ f5 = heapFloat[(r0+18)];
+ f6 = heapFloat[(r0+17)];
+ f1 = f2+f1;
+ f2 = f4*f0;
+ heapFloat[(r2+146)] = f1;
+ f1 = f6*f2;
+ f2 = heapFloat[(r2+147)];
+ f1 = f2+f1;
+ f0 = f3*f0;
+ heapFloat[(r2+147)] = f1;
+ f0 = f5*f0;
+ f1 = heapFloat[(r2+148)];
+ f0 = f1+f0;
+ heapFloat[(r2+148)] = f0;
+}
+}
+ return;
+}
+
+function _Z24applyAnisotropicFrictionP17btCollisionObjectR9btVector3(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+ var f10;
+ var f11;
+ var f12;
+ var f13;
+ var f14;
+ var f15;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+if(!(r0 ==0)) //_LBB605_2
+{
+ r0 = r0 >> 2;
+ r1 = heap32[(r0+45)];
+ if(r1 !=0) //_LBB605_3
+{
+ r1 = heap32[(fp+1)];
+ r1 = r1 >> 2;
+ f0 = heapFloat[(r1)];
+ f1 = heapFloat[(r0+2)];
+ f2 = heapFloat[(r0+1)];
+ f3 = heapFloat[(r1+1)];
+ f4 = heapFloat[(r0+6)];
+ f5 = heapFloat[(r0+5)];
+ f6 = heapFloat[(r0+3)];
+ f7 = heapFloat[(r0+7)];
+ f8 = f2*f0;
+ f9 = f5*f3;
+ f10 = f1*f0;
+ f11 = f4*f3;
+ f12 = heapFloat[(r1+2)];
+ f13 = heapFloat[(r0+10)];
+ f14 = heapFloat[(r0+9)];
+ f15 = heapFloat[(r0+11)];
+ f8 = f8+f9;
+ f9 = f14*f12;
+ f10 = f10+f11;
+ f11 = f13*f12;
+ f0 = f6*f0;
+ f3 = f7*f3;
+ f8 = f8+f9;
+ f9 = heapFloat[(r0+41)];
+ f10 = f10+f11;
+ f11 = heapFloat[(r0+42)];
+ f0 = f0+f3;
+ f3 = f15*f12;
+ f8 = f8*f9;
+ f9 = f10*f11;
+ f10 = heapFloat[(r0+43)];
+ f0 = f0+f3;
+ f0 = f0*f10;
+ f2 = f2*f8;
+ f1 = f1*f9;
+ f3 = f5*f8;
+ f4 = f4*f9;
+ f1 = f2+f1;
+ f2 = f6*f0;
+ f5 = f14*f8;
+ f6 = f13*f9;
+ f3 = f3+f4;
+ f4 = f7*f0;
+ f1 = f1+f2;
+ f2 = f5+f6;
+ f0 = f15*f0;
+ f3 = f3+f4;
+ heapFloat[(r1)] = f1;
+ f0 = f2+f0;
+ heapFloat[(r1+1)] = f3;
+ heapFloat[(r1+2)] = f0;
+ heap32[(r1+3)] = 0;
+ return;
+}
+}
+ return;
+}
+
+function _ZN35btSequentialImpulseConstraintSolver5resetEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ heap32[(r0+31)] = 0;
+ return;
+}
+
+function _ZN35btSequentialImpulseConstraintSolver45solveGroupCacheFriendlySplitImpulseIterationsEPP17btCollisionObjectiPP20btPersistentManifoldiPP17btTypedConstraintiRK19btContactSolverInfoP12btIDebugDrawP12btStackAlloc(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+7)];
+ r1 = r0 >> 2;
+ r2 = heap32[(r1+11)];
+_1: do {
+if(!(r2 ==0)) //_LBB607_14
+{
+ r2 = heap32[(fp)];
+ r0 = heapU8[r0+61];
+ r3 = heap32[(r1+5)];
+ r0 = r0 & 1;
+ if(r0 != 0) //_LBB607_3
+{
+if(!(r3 <1)) //_LBB607_14
+{
+ r0 = 0;
+_6: while(true){
+ r3 = r2 >> 2;
+ r4 = heap32[(r3+2)];
+if(!(r4 <1)) //_LBB607_8
+{
+ r5 = 0;
+_10: while(true){
+ r6 = heap32[(r3+19)];
+ r7 = r5 << 2;
+ r6 = (r6 + r7)|0;
+ r6 = r6 >> 2;
+ r6 = heap32[(r6)];
+ r6 = (r6 * 136)|0;
+ r7 = heap32[(r3+4)];
+ r6 = (r7 + r6)|0;
+ r7 = r6 >> 2;
+ r8 = heap32[(r7+27)];
+ r7 = heap32[(r7+26)];
+ heap32[(g0)] = r7;
+ heap32[(g0+1)] = r8;
+ heap32[(g0+2)] = r6;
+ r5 = (r5 + 1)|0;
+ _ZN35btSequentialImpulseConstraintSolver43resolveSplitPenetrationImpulseCacheFriendlyER11btRigidBodyS1_RK18btSolverConstraint(i7);
+if(!(r4 !=r5)) //_LBB607_7
+{
+break _10;
+}
+}
+}
+ r0 = (r0 + 1)|0;
+ r3 = heap32[(r1+5)];
+ if(r3 >r0) //_LBB607_5
+{
+continue _6;
+}
+else{
+break _1;
+}
+}
+}
+}
+else{
+ if(r3 >0) //_LBB607_9
+{
+ r0 = 0;
+_15: while(true){
+ r3 = r2 >> 2;
+ r4 = heap32[(r3+2)];
+if(!(r4 <1)) //_LBB607_13
+{
+ r5 = 0;
+_19: while(true){
+ r6 = heap32[(r3+19)];
+ r7 = r5 << 2;
+ r6 = (r6 + r7)|0;
+ r6 = r6 >> 2;
+ r6 = heap32[(r6)];
+ r6 = (r6 * 136)|0;
+ r7 = heap32[(r3+4)];
+ r6 = (r7 + r6)|0;
+ r7 = r6 >> 2;
+ r8 = heap32[(r7+27)];
+ r7 = heap32[(r7+26)];
+ heap32[(g0)] = r7;
+ heap32[(g0+1)] = r8;
+ heap32[(g0+2)] = r6;
+ r5 = (r5 + 1)|0;
+ _ZN35btSequentialImpulseConstraintSolver43resolveSplitPenetrationImpulseCacheFriendlyER11btRigidBodyS1_RK18btSolverConstraint(i7);
+if(!(r4 !=r5)) //_LBB607_12
+{
+break _19;
+}
+}
+}
+ r0 = (r0 + 1)|0;
+ r3 = heap32[(r1+5)];
+ if(r3 >r0) //_LBB607_10
+{
+continue _15;
+}
+else{
+break _1;
+}
+}
+}
+}
+}
+} while(0);
+ return;
+}
+
+function _ZN35btSequentialImpulseConstraintSolverD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV35btSequentialImpulseConstraintSolver;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ r1 = heap32[(r2+29)];
+if(!(r1 ==0)) //_LBB608_4
+{
+ r3 = heapU8[r0+120];
+if(!(r3 ==0)) //_LBB608_3
+{
+ r3 = gNumAlignedFree;
+ r3 = r3 >> 2;
+ r4 = heap32[(r3)];
+ r4 = (r4 + 1)|0;
+ r1 = r1 >> 2;
+ heap32[(r3)] = r4;
+ r1 = heap32[(r1+-1)];
+ heap32[(g0)] = r1;
+ free(i7);
+}
+ heap32[(r2+29)] = 0;
+}
+ r1 = 1;
+ heap8[r0+120] = r1;
+ heap32[(r2+29)] = 0;
+ heap32[(r2+27)] = 0;
+ heap32[(r2+28)] = 0;
+ r3 = heap32[(r2+24)];
+if(!(r3 ==0)) //_LBB608_8
+{
+ r4 = heapU8[r0+100];
+if(!(r4 ==0)) //_LBB608_7
+{
+ r4 = gNumAlignedFree;
+ r4 = r4 >> 2;
+ r5 = heap32[(r4)];
+ r5 = (r5 + 1)|0;
+ r3 = r3 >> 2;
+ heap32[(r4)] = r5;
+ r3 = heap32[(r3+-1)];
+ heap32[(g0)] = r3;
+ free(i7);
+}
+ heap32[(r2+24)] = 0;
+}
+ heap8[r0+100] = r1;
+ heap32[(r2+24)] = 0;
+ heap32[(r2+22)] = 0;
+ heap32[(r2+23)] = 0;
+ r3 = heap32[(r2+19)];
+if(!(r3 ==0)) //_LBB608_12
+{
+ r4 = heapU8[r0+80];
+if(!(r4 ==0)) //_LBB608_11
+{
+ r4 = gNumAlignedFree;
+ r4 = r4 >> 2;
+ r5 = heap32[(r4)];
+ r5 = (r5 + 1)|0;
+ r3 = r3 >> 2;
+ heap32[(r4)] = r5;
+ r3 = heap32[(r3+-1)];
+ heap32[(g0)] = r3;
+ free(i7);
+}
+ heap32[(r2+19)] = 0;
+}
+ heap8[r0+80] = r1;
+ heap32[(r2+19)] = 0;
+ heap32[(r2+17)] = 0;
+ heap32[(r2+18)] = 0;
+ r3 = heap32[(r2+14)];
+if(!(r3 ==0)) //_LBB608_16
+{
+ r4 = heapU8[r0+60];
+if(!(r4 ==0)) //_LBB608_15
+{
+ r4 = gNumAlignedFree;
+ r4 = r4 >> 2;
+ r5 = heap32[(r4)];
+ r5 = (r5 + 1)|0;
+ r3 = r3 >> 2;
+ heap32[(r4)] = r5;
+ r3 = heap32[(r3+-1)];
+ heap32[(g0)] = r3;
+ free(i7);
+}
+ heap32[(r2+14)] = 0;
+}
+ heap8[r0+60] = r1;
+ heap32[(r2+14)] = 0;
+ heap32[(r2+12)] = 0;
+ heap32[(r2+13)] = 0;
+ r3 = heap32[(r2+9)];
+if(!(r3 ==0)) //_LBB608_20
+{
+ r4 = heapU8[r0+40];
+if(!(r4 ==0)) //_LBB608_19
+{
+ r4 = gNumAlignedFree;
+ r4 = r4 >> 2;
+ r5 = heap32[(r4)];
+ r5 = (r5 + 1)|0;
+ r3 = r3 >> 2;
+ heap32[(r4)] = r5;
+ r3 = heap32[(r3+-1)];
+ heap32[(g0)] = r3;
+ free(i7);
+}
+ heap32[(r2+9)] = 0;
+}
+ heap8[r0+40] = r1;
+ heap32[(r2+9)] = 0;
+ heap32[(r2+7)] = 0;
+ heap32[(r2+8)] = 0;
+ r3 = heap32[(r2+4)];
+if(!(r3 ==0)) //_LBB608_24
+{
+ r4 = heapU8[r0+20];
+if(!(r4 ==0)) //_LBB608_23
+{
+ r4 = gNumAlignedFree;
+ r4 = r4 >> 2;
+ r5 = heap32[(r4)];
+ r5 = (r5 + 1)|0;
+ r3 = r3 >> 2;
+ heap32[(r4)] = r5;
+ r3 = heap32[(r3+-1)];
+ heap32[(g0)] = r3;
+ free(i7);
+}
+ heap32[(r2+4)] = 0;
+}
+ heap8[r0+20] = r1;
+ heap32[(r2+4)] = 0;
+ heap32[(r2+2)] = 0;
+ heap32[(r2+3)] = 0;
+ return;
+}
+
+function _ZN35btSequentialImpulseConstraintSolverD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV35btSequentialImpulseConstraintSolver;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ r1 = heap32[(r2+29)];
+if(!(r1 ==0)) //_LBB609_4
+{
+ r3 = heapU8[r0+120];
+if(!(r3 ==0)) //_LBB609_3
+{
+ r3 = gNumAlignedFree;
+ r3 = r3 >> 2;
+ r4 = heap32[(r3)];
+ r4 = (r4 + 1)|0;
+ r1 = r1 >> 2;
+ heap32[(r3)] = r4;
+ r1 = heap32[(r1+-1)];
+ heap32[(g0)] = r1;
+ free(i7);
+}
+ heap32[(r2+29)] = 0;
+}
+ r1 = 1;
+ heap8[r0+120] = r1;
+ heap32[(r2+29)] = 0;
+ heap32[(r2+27)] = 0;
+ heap32[(r2+28)] = 0;
+ r3 = heap32[(r2+24)];
+if(!(r3 ==0)) //_LBB609_8
+{
+ r4 = heapU8[r0+100];
+if(!(r4 ==0)) //_LBB609_7
+{
+ r4 = gNumAlignedFree;
+ r4 = r4 >> 2;
+ r5 = heap32[(r4)];
+ r5 = (r5 + 1)|0;
+ r3 = r3 >> 2;
+ heap32[(r4)] = r5;
+ r3 = heap32[(r3+-1)];
+ heap32[(g0)] = r3;
+ free(i7);
+}
+ heap32[(r2+24)] = 0;
+}
+ heap8[r0+100] = r1;
+ heap32[(r2+24)] = 0;
+ heap32[(r2+22)] = 0;
+ heap32[(r2+23)] = 0;
+ r3 = heap32[(r2+19)];
+if(!(r3 ==0)) //_LBB609_12
+{
+ r4 = heapU8[r0+80];
+if(!(r4 ==0)) //_LBB609_11
+{
+ r4 = gNumAlignedFree;
+ r4 = r4 >> 2;
+ r5 = heap32[(r4)];
+ r5 = (r5 + 1)|0;
+ r3 = r3 >> 2;
+ heap32[(r4)] = r5;
+ r3 = heap32[(r3+-1)];
+ heap32[(g0)] = r3;
+ free(i7);
+}
+ heap32[(r2+19)] = 0;
+}
+ heap8[r0+80] = r1;
+ heap32[(r2+19)] = 0;
+ heap32[(r2+17)] = 0;
+ heap32[(r2+18)] = 0;
+ r3 = heap32[(r2+14)];
+if(!(r3 ==0)) //_LBB609_16
+{
+ r4 = heapU8[r0+60];
+if(!(r4 ==0)) //_LBB609_15
+{
+ r4 = gNumAlignedFree;
+ r4 = r4 >> 2;
+ r5 = heap32[(r4)];
+ r5 = (r5 + 1)|0;
+ r3 = r3 >> 2;
+ heap32[(r4)] = r5;
+ r3 = heap32[(r3+-1)];
+ heap32[(g0)] = r3;
+ free(i7);
+}
+ heap32[(r2+14)] = 0;
+}
+ heap8[r0+60] = r1;
+ heap32[(r2+14)] = 0;
+ heap32[(r2+12)] = 0;
+ heap32[(r2+13)] = 0;
+ r3 = heap32[(r2+9)];
+if(!(r3 ==0)) //_LBB609_20
+{
+ r4 = heapU8[r0+40];
+if(!(r4 ==0)) //_LBB609_19
+{
+ r4 = gNumAlignedFree;
+ r4 = r4 >> 2;
+ r5 = heap32[(r4)];
+ r5 = (r5 + 1)|0;
+ r3 = r3 >> 2;
+ heap32[(r4)] = r5;
+ r3 = heap32[(r3+-1)];
+ heap32[(g0)] = r3;
+ free(i7);
+}
+ heap32[(r2+9)] = 0;
+}
+ heap8[r0+40] = r1;
+ heap32[(r2+9)] = 0;
+ heap32[(r2+7)] = 0;
+ heap32[(r2+8)] = 0;
+ r3 = heap32[(r2+4)];
+if(!(r3 ==0)) //_LBB609_24
+{
+ r4 = heapU8[r0+20];
+if(!(r4 ==0)) //_LBB609_23
+{
+ r4 = gNumAlignedFree;
+ r4 = r4 >> 2;
+ r5 = heap32[(r4)];
+ r5 = (r5 + 1)|0;
+ r3 = r3 >> 2;
+ heap32[(r4)] = r5;
+ r3 = heap32[(r3+-1)];
+ heap32[(g0)] = r3;
+ free(i7);
+}
+ heap32[(r2+4)] = 0;
+}
+ heap8[r0+20] = r1;
+ heap32[(r2+4)] = 0;
+ heap32[(r2+2)] = 0;
+ heap32[(r2+3)] = 0;
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZN35btSequentialImpulseConstraintSolver10solveGroupEPP17btCollisionObjectiPP20btPersistentManifoldiPP17btTypedConstraintiRK19btContactSolverInfoP12btIDebugDrawP12btStackAllocP12btDispatcher(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var f0;
+ var f1;
+ var f2;
+var __label__ = 0;
+ i7 = sp + -48;var g0 = i7>>2; // save stack
+ r0 = _2E_str450;
+ r1 = heap32[(fp+1)];
+ heap32[(g0)] = r0;
+ _ZN15CProfileManager13Start_ProfileEPKc(i7);
+ if(r1 !=0) //_LBB610_2
+{
+ r0 = heap32[(fp+2)];
+ if(r0 !=0) //_LBB610_4
+{
+ r2 = heap32[(fp)];
+ r3 = heap32[(fp+3)];
+ r4 = heap32[(fp+4)];
+ r5 = heap32[(fp+5)];
+ r6 = heap32[(fp+6)];
+ r7 = heap32[(fp+7)];
+ r8 = heap32[(fp+8)];
+ r9 = heap32[(fp+9)];
+ r10 = r2 >> 2;
+ r11 = heap32[(r10)];
+ r11 = r11 >> 2;
+ r11 = heap32[(r11+8)];
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = r0;
+ heap32[(g0+3)] = r3;
+ heap32[(g0+4)] = r4;
+ heap32[(g0+5)] = r5;
+ heap32[(g0+6)] = r6;
+ heap32[(g0+7)] = r7;
+ heap32[(g0+8)] = r8;
+ heap32[(g0+9)] = r9;
+ __FUNCTION_TABLE__[(r11)>>2](i7);
+ r11 = heap32[(r10)];
+ r11 = r11 >> 2;
+ r11 = heap32[(r11+9)];
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = r0;
+ heap32[(g0+3)] = r3;
+ heap32[(g0+4)] = r4;
+ heap32[(g0+5)] = r5;
+ heap32[(g0+6)] = r6;
+ heap32[(g0+7)] = r7;
+ heap32[(g0+8)] = r8;
+ heap32[(g0+9)] = r9;
+ __FUNCTION_TABLE__[(r11)>>2](i7);
+ r10 = heap32[(r10)];
+ r10 = r10 >> 2;
+ r10 = heap32[(r10+7)];
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = r0;
+ heap32[(g0+3)] = r3;
+ heap32[(g0+4)] = r4;
+ heap32[(g0+5)] = r5;
+ heap32[(g0+6)] = r6;
+ heap32[(g0+7)] = r7;
+ heap32[(g0+8)] = r8;
+ heap32[(g0+9)] = r9;
+ r0 = _ZN15CProfileManager11CurrentNodeE;
+ r0 = r0 >> 2;
+ __FUNCTION_TABLE__[(r10)>>2](i7);
+ r1 = heap32[(r0)];
+ r2 = r1 >> 2;
+ r3 = heap32[(r2+4)];
+ r3 = (r3 + -1)|0;
+ heap32[(r2+4)] = r3;
+_5: do {
+if(!(r3 !=0)) //_LBB610_10
+{
+ r3 = heap32[(r2+1)];
+ if(r3 !=0) //_LBB610_7
+{
+ r1 = sp + -8;
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = 0;
+ r3 = _ZL13gProfileClock_2E_0;
+ gettimeofday(i7);
+ r3 = r3 >> 2;
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r1 = r1 >> 2;
+ r4 = heap32[(fp+-2)];
+ r5 = heap32[(r3)];
+ r4 = (r4 - r5)|0;
+ r1 = heap32[(r1+1)];
+ r3 = heap32[(r3+1)];
+ r1 = (r1 - r3)|0;
+ r3 = (r4 * 1000000)|0;
+ r1 = (r1 + r3)|0;
+ r3 = heap32[(r2+3)];
+ r1 = (r1 - r3)|0;
+ f0 = uint(r1); //fuitos r1, f0
+ f1 = 1000;
+ f2 = heapFloat[(r2+2)];
+ f0 = f0/f1;
+ f0 = f2+f0;
+ heapFloat[(r2+2)] = f0;
+ r1 = heap32[(r2+4)];
+ if(r1 !=0) //_LBB610_10
+{
+break _5;
+}
+else{
+ r1 = heap32[(r0)];
+}
+}
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+5)];
+ heap32[(r0)] = r1;
+}
+} while(0);
+ f0 = 0;
+ f_g0 = f0;
+ return;
+}
+else{
+ r0 = _2E_str753;
+ r1 = _2E_str652;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 1186;
+ _assert(i7);
+}
+}
+else{
+ r1 = _2E_str551;
+ r0 = _2E_str652;
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r0;
+ heap32[(g0+2)] = 1185;
+ _assert(i7);
+}
+}
+
+function _ZN35btSequentialImpulseConstraintSolver29solveGroupCacheFriendlyFinishEPP17btCollisionObjectiPP20btPersistentManifoldiPP17btTypedConstraintiRK19btContactSolverInfoP12btIDebugDrawP12btStackAlloc(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+var __label__ = 0;
+ i7 = sp + -504;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ r2 = heap32[(fp+1)];
+ r3 = heap32[(fp+2)];
+ r4 = heap32[(fp+7)];
+ r5 = heap32[(r1+2)];
+ r6 = 0;
+_1: while(true){
+ if(r6 <r5) //_LBB611_1
+{
+ r7 = (r6 * 34)|0;
+ r8 = heap32[(r1+4)];
+ r7 = r7 << 2;
+ r7 = (r8 + r7)|0;
+ r7 = r7 >> 2;
+ r8 = heap32[(r7+28)];
+ if(r8 !=0) //_LBB611_3
+{
+ r8 = r8 >> 2;
+ heap32[(r8+28)] = heap32[(r7+21)];
+ r9 = heapU8[r4+60];
+ r9 = r9 & 8;
+if(!(r9 ==0)) //_LBB611_5
+{
+ r9 = heap32[(r7+25)];
+ r10 = heap32[(r1+14)];
+ r9 = (r9 * 136)|0;
+ r9 = (r10 + r9)|0;
+ r9 = r9 >> 2;
+ heap32[(r8+30)] = heap32[(r9+21)];
+ r7 = heap32[(r7+25)];
+ r9 = heap32[(r1+14)];
+ r7 = (r7 * 136)|0;
+ r7 = (r7 + r9)|0;
+ r7 = r7 >> 2;
+ heap32[(r8+31)] = heap32[(r7+55)];
+}
+ r6 = (r6 + 1)|0;
+continue _1;
+}
+else{
+__label__ = 2;
+break _1;
+}
+}
+else{
+__label__ = 7;
+break _1;
+}
+}
+switch(__label__ ){//multiple entries
+case 7:
+ r5 = heap32[(r1+7)];
+_10: do {
+if(!(r5 <1)) //_LBB611_10
+{
+ r6 = 0;
+_12: while(true){
+ r7 = (r6 * 34)|0;
+ r8 = heap32[(r1+9)];
+ r7 = r7 << 2;
+ r7 = (r8 + r7)|0;
+ r7 = r7 >> 2;
+ r8 = heap32[(r7+28)];
+ r8 = r8 >> 2;
+ f0 = heapFloat[(r8+7)];
+ f1 = heapFloat[(r7+21)];
+ r6 = (r6 + 1)|0;
+ f0 = f1+f0;
+ heapFloat[(r8+7)] = f0;
+ if(r5 !=r6) //_LBB611_9
+{
+continue _12;
+}
+else{
+break _10;
+}
+}
+}
+} while(0);
+ r4 = r4 >> 2;
+ r5 = heap32[(r4+11)];
+_15: do {
+ if(r5 !=0) //_LBB611_13
+{
+if(!(r3 <1)) //_LBB611_24
+{
+__label__ = 13; //SET chanka
+_17: while(true){
+ r5 = r2 >> 2;
+ r5 = heap32[(r5)];
+ r6 = heapU8[r5+232];
+ r6 = r6 & 2;
+if(!(r6 ==0)) //_LBB611_18
+{
+if(!(r5 ==0)) //_LBB611_18
+{
+ r6 = r5 >> 2;
+ f0 = heapFloat[(r6+84)];
+ f1 = 0;
+if(!(f0 ==f1)) //_LBB611_18
+{
+ f0 = heapFloat[(r4+3)];
+ f1 = heapFloat[(r6+78)];
+ f2 = heapFloat[(r6+128)];
+ f3 = heapFloat[(r6+77)];
+ f4 = heapFloat[(r6+127)];
+ f5 = heapFloat[(r6+76)];
+ f6 = heapFloat[(r6+126)];
+ f5 = f5+f6;
+ f3 = f3+f4;
+ heapFloat[(r6+76)] = f5;
+ f1 = f1+f2;
+ heapFloat[(r6+77)] = f3;
+ heapFloat[(r6+78)] = f1;
+ heap32[(r6+79)] = 0;
+ f1 = heapFloat[(r6+82)];
+ f2 = heapFloat[(r6+132)];
+ f3 = heapFloat[(r6+81)];
+ f4 = heapFloat[(r6+131)];
+ f5 = heapFloat[(r6+80)];
+ f6 = heapFloat[(r6+130)];
+ f5 = f5+f6;
+ f3 = f3+f4;
+ heapFloat[(r6+80)] = f5;
+ f1 = f1+f2;
+ heapFloat[(r6+81)] = f3;
+ heapFloat[(r6+82)] = f1;
+ heap32[(r6+83)] = 0;
+ f1 = heapFloat[(r6+142)];
+ f2 = heapFloat[(r6+143)];
+ f3 = heapFloat[(r6+144)];
+ r7 = sp + -64;
+ r8 = (r5 + 4)|0;
+ r5 = (r5 + 584)|0;
+ heap32[(g0)] = r8;
+ heapFloat[(g0+1)] = f1;
+ heapFloat[(g0+2)] = f2;
+ heapFloat[(g0+3)] = f3;
+ heap32[(g0+4)] = r5;
+ heapFloat[(g0+5)] = f0;
+ heap32[(g0+6)] = r7;
+ _ZN15btTransformUtil18integrateTransformERK11btTransformRK9btVector3S5_fRS0_(i7);
+ r5 = r7 >> 2;
+ heap32[(r6+1)] = heap32[(fp+-16)];
+ heap32[(r6+2)] = heap32[(r5+1)];
+ heap32[(r6+3)] = heap32[(r5+2)];
+ heap32[(r6+4)] = heap32[(r5+3)];
+ heap32[(r6+5)] = heap32[(r5+4)];
+ heap32[(r6+6)] = heap32[(r5+5)];
+ heap32[(r6+7)] = heap32[(r5+6)];
+ heap32[(r6+8)] = heap32[(r5+7)];
+ heap32[(r6+9)] = heap32[(r5+8)];
+ heap32[(r6+10)] = heap32[(r5+9)];
+ heap32[(r6+11)] = heap32[(r5+10)];
+ heap32[(r6+12)] = heap32[(r5+11)];
+ heap32[(r6+13)] = heap32[(r5+12)];
+ heap32[(r6+14)] = heap32[(r5+13)];
+ heap32[(r6+15)] = heap32[(r5+14)];
+ heap32[(r6+16)] = heap32[(r5+15)];
+}
+}
+}
+ r3 = (r3 + -1)|0;
+ r2 = (r2 + 4)|0;
+ if(r3 ==0) //_LBB611_24
+{
+break _15;
+}
+else{
+continue _17;
+}
+}
+}
+}
+else{
+if(!(r3 <1)) //_LBB611_24
+{
+__label__ = 18; //SET chanka
+_25: while(true){
+ r4 = r2 >> 2;
+ r4 = heap32[(r4)];
+ r5 = heapU8[r4+232];
+ r5 = r5 & 2;
+if(!(r5 ==0)) //_LBB611_23
+{
+if(!(r4 ==0)) //_LBB611_23
+{
+ r4 = r4 >> 2;
+ f0 = heapFloat[(r4+84)];
+ f1 = 0;
+if(!(f0 ==f1)) //_LBB611_23
+{
+ f0 = heapFloat[(r4+78)];
+ f1 = heapFloat[(r4+128)];
+ f2 = heapFloat[(r4+77)];
+ f3 = heapFloat[(r4+127)];
+ f4 = heapFloat[(r4+76)];
+ f5 = heapFloat[(r4+126)];
+ f4 = f4+f5;
+ f2 = f2+f3;
+ heapFloat[(r4+76)] = f4;
+ f0 = f0+f1;
+ heapFloat[(r4+77)] = f2;
+ heapFloat[(r4+78)] = f0;
+ heap32[(r4+79)] = 0;
+ f0 = heapFloat[(r4+82)];
+ f1 = heapFloat[(r4+132)];
+ f2 = heapFloat[(r4+81)];
+ f3 = heapFloat[(r4+131)];
+ f4 = heapFloat[(r4+80)];
+ f5 = heapFloat[(r4+130)];
+ f4 = f4+f5;
+ f2 = f2+f3;
+ heapFloat[(r4+80)] = f4;
+ f0 = f0+f1;
+ heapFloat[(r4+81)] = f2;
+ heapFloat[(r4+82)] = f0;
+ heap32[(r4+83)] = 0;
+}
+}
+}
+ r3 = (r3 + -1)|0;
+ r2 = (r2 + 4)|0;
+ if(r3 !=0) //_LBB611_19
+{
+continue _25;
+}
+else{
+break _15;
+}
+}
+}
+}
+} while(0);
+ r2 = heap32[(r1+2)];
+_33: do {
+if(!(r2 >-1)) //_LBB611_33
+{
+ r3 = heap32[(r1+3)];
+if(!(r3 >-1)) //_LBB611_31
+{
+ r3 = heap32[(r1+4)];
+if(!(r3 ==0)) //_LBB611_30
+{
+ r4 = heapU8[r0+20];
+if(!(r4 ==0)) //_LBB611_29
+{
+ r4 = gNumAlignedFree;
+ r4 = r4 >> 2;
+ r5 = heap32[(r4)];
+ r5 = (r5 + 1)|0;
+ r3 = r3 >> 2;
+ heap32[(r4)] = r5;
+ r3 = heap32[(r3+-1)];
+ heap32[(g0)] = r3;
+ free(i7);
+}
+ heap32[(r1+4)] = 0;
+}
+ r3 = 1;
+ heap8[r0+20] = r3;
+ heap32[(r1+4)] = 0;
+ heap32[(r1+3)] = 0;
+}
+ r3 = (r2 * 136)|0;
+_44: while(true){
+ r4 = heap32[(r1+4)];
+ r4 = (r4 + r3)|0;
+ r5 = sp + -472;
+ heap32[(g0)] = r4;
+ heap32[(g0+1)] = r5;
+ heap32[(g0+2)] = 136;
+ r2 = (r2 + 1)|0;
+ r3 = (r3 + 136)|0;
+ memcpy(i7);
+ if(r2 !=0) //_LBB611_32
+{
+continue _44;
+}
+else{
+break _33;
+}
+}
+}
+} while(0);
+ heap32[(r1+2)] = 0;
+ r2 = heap32[(r1+7)];
+_47: do {
+if(!(r2 >-1)) //_LBB611_42
+{
+ r3 = heap32[(r1+8)];
+if(!(r3 >-1)) //_LBB611_40
+{
+ r3 = heap32[(r1+9)];
+if(!(r3 ==0)) //_LBB611_39
+{
+ r4 = heapU8[r0+40];
+if(!(r4 ==0)) //_LBB611_38
+{
+ r4 = gNumAlignedFree;
+ r4 = r4 >> 2;
+ r5 = heap32[(r4)];
+ r5 = (r5 + 1)|0;
+ r3 = r3 >> 2;
+ heap32[(r4)] = r5;
+ r3 = heap32[(r3+-1)];
+ heap32[(g0)] = r3;
+ free(i7);
+}
+ heap32[(r1+9)] = 0;
+}
+ r3 = 1;
+ heap8[r0+40] = r3;
+ heap32[(r1+9)] = 0;
+ heap32[(r1+8)] = 0;
+}
+ r3 = (r2 * 136)|0;
+_58: while(true){
+ r4 = heap32[(r1+9)];
+ r4 = (r4 + r3)|0;
+ r5 = sp + -336;
+ heap32[(g0)] = r4;
+ heap32[(g0+1)] = r5;
+ heap32[(g0+2)] = 136;
+ r2 = (r2 + 1)|0;
+ r3 = (r3 + 136)|0;
+ memcpy(i7);
+ if(r2 !=0) //_LBB611_41
+{
+continue _58;
+}
+else{
+break _47;
+}
+}
+}
+} while(0);
+ heap32[(r1+7)] = 0;
+ r2 = heap32[(r1+12)];
+_61: do {
+if(!(r2 >-1)) //_LBB611_51
+{
+ r3 = heap32[(r1+13)];
+if(!(r3 >-1)) //_LBB611_49
+{
+ r3 = heap32[(r1+14)];
+if(!(r3 ==0)) //_LBB611_48
+{
+ r4 = heapU8[r0+60];
+if(!(r4 ==0)) //_LBB611_47
+{
+ r4 = gNumAlignedFree;
+ r4 = r4 >> 2;
+ r5 = heap32[(r4)];
+ r5 = (r5 + 1)|0;
+ r3 = r3 >> 2;
+ heap32[(r4)] = r5;
+ r3 = heap32[(r3+-1)];
+ heap32[(g0)] = r3;
+ free(i7);
+}
+ heap32[(r1+14)] = 0;
+}
+ r3 = 1;
+ heap8[r0+60] = r3;
+ heap32[(r1+14)] = 0;
+ heap32[(r1+13)] = 0;
+}
+ r0 = (r2 * 136)|0;
+_72: while(true){
+ r3 = heap32[(r1+14)];
+ r3 = (r3 + r0)|0;
+ r4 = sp + -200;
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r4;
+ heap32[(g0+2)] = 136;
+ r2 = (r2 + 1)|0;
+ r0 = (r0 + 136)|0;
+ memcpy(i7);
+ if(r2 !=0) //_LBB611_50
+{
+continue _72;
+}
+else{
+break _61;
+}
+}
+}
+} while(0);
+ heap32[(r1+12)] = 0;
+ f0 = 0;
+ f_g0 = f0;
+ return;
+break;
+case 2:
+ r0 = _2E_str955;
+ r1 = _2E_str652;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 1129;
+ _assert(i7);
+break;
+}
+}
+
+function _ZN35btSequentialImpulseConstraintSolver28solveGroupCacheFriendlySetupEPP17btCollisionObjectiPP20btPersistentManifoldiPP17btTypedConstraintiRK19btContactSolverInfoP12btIDebugDrawP12btStackAlloc(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+ var r13;
+ var r14;
+ var r15;
+ var r16;
+ var r17;
+ var r18;
+ var r19;
+ var r20;
+ var r21;
+ var r22;
+ var r23;
+ var r24;
+ var r25;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+ var f10;
+ var f11;
+ var f12;
+ var f13;
+ var f14;
+ var f15;
+ var f16;
+ var f17;
+ var f18;
+ var f19;
+ var f20;
+ var f21;
+ var f22;
+ var f23;
+ var f24;
+ var f25;
+ var f26;
+ var f27;
+ var f28;
+var __label__ = 0;
+ i7 = sp + -584;var g0 = i7>>2; // save stack
+ r0 = _2E_str1056;
+ r1 = heap32[(fp+6)];
+ heap32[(g0)] = r0;
+ r0 = heap32[(fp+4)];
+ heap32[(fp+-133)] = r0;
+ r2 = 0;
+ _ZN15CProfileManager13Start_ProfileEPKc(i7);
+ r0 = (r2 - r0)|0;
+_1: do {
+if(!(r1 ==r0)) //_LBB612_269
+{
+ r0 = heap32[(fp)];
+ r3 = heap32[(fp+1)];
+ r4 = heap32[(fp+2)];
+ r5 = heap32[(fp+3)];
+ heap32[(fp+-132)] = r5;
+ r5 = heap32[(fp+5)];
+ heap32[(fp+-127)] = r5;
+ r5 = heap32[(fp+7)];
+ r6 = r5 >> 2;
+ r7 = heap32[(r6+11)];
+_3: do {
+ if(r7 !=0) //_LBB612_4
+{
+if(!(r4 <1)) //_LBB612_14
+{
+__label__ = 4; //SET chanka
+_5: while(true){
+ r7 = r3 >> 2;
+ r7 = heap32[(r7)];
+ r8 = heapU8[r7+232];
+ r8 = r8 & 2;
+if(!(r8 ==0)) //_LBB612_8
+{
+if(!(r7 ==0)) //_LBB612_8
+{
+ r7 = r7 >> 2;
+ heap32[(r7+126)] = 0;
+ heap32[(r7+127)] = 0;
+ heap32[(r7+128)] = 0;
+ heap32[(r7+129)] = 0;
+ heap32[(r7+130)] = 0;
+ heap32[(r7+131)] = 0;
+ heap32[(r7+132)] = 0;
+ heap32[(r7+133)] = 0;
+ heap32[(r7+142)] = 0;
+ heap32[(r7+143)] = 0;
+ heap32[(r7+144)] = 0;
+ heap32[(r7+145)] = 0;
+ heap32[(r7+146)] = 0;
+ heap32[(r7+147)] = 0;
+ heap32[(r7+148)] = 0;
+ heap32[(r7+149)] = 0;
+}
+}
+ r4 = (r4 + -1)|0;
+ r3 = (r3 + 4)|0;
+ if(r4 ==0) //_LBB612_14
+{
+break _3;
+}
+else{
+continue _5;
+}
+}
+}
+}
+else{
+if(!(r4 <1)) //_LBB612_14
+{
+__label__ = 8; //SET chanka
+_12: while(true){
+ r7 = r3 >> 2;
+ r7 = heap32[(r7)];
+ r8 = heapU8[r7+232];
+ r8 = r8 & 2;
+if(!(r8 ==0)) //_LBB612_12
+{
+if(!(r7 ==0)) //_LBB612_12
+{
+ r7 = r7 >> 2;
+ heap32[(r7+126)] = 0;
+ heap32[(r7+127)] = 0;
+ heap32[(r7+128)] = 0;
+ heap32[(r7+129)] = 0;
+ heap32[(r7+130)] = 0;
+ heap32[(r7+131)] = 0;
+ heap32[(r7+132)] = 0;
+ heap32[(r7+133)] = 0;
+}
+}
+ r4 = (r4 + -1)|0;
+ r3 = (r3 + 4)|0;
+ if(r4 ==0) //_LBB612_14
+{
+break _3;
+}
+}
+}
+}
+} while(0);
+_19: do {
+ if(r1 <1) //_LBB612_40
+{
+ r4 = r0 >> 2;
+ r3 = heap32[(r4+27)];
+_21: do {
+if(!(r3 >r1)) //_LBB612_59
+{
+if(!(r3 >=r1)) //_LBB612_59
+{
+ r7 = heap32[(r4+28)];
+if(!(r7 >=r1)) //_LBB612_58
+{
+ if(r1 !=0) //_LBB612_45
+{
+ r7 = gNumAlignedAllocs;
+ r7 = r7 >> 2;
+ r8 = heap32[(r7)];
+ r9 = r1 << 3;
+ r8 = (r8 + 1)|0;
+ r9 = r9 | 3;
+ heap32[(r7)] = r8;
+ r7 = (r9 + 16)|0;
+ heap32[(g0)] = r7;
+ malloc(i7);
+ r7 = r_g0;
+ if(r7 !=0) //_LBB612_47
+{
+ r8 = (r7 + 4)|0;
+ r8 = (r2 - r8)|0;
+ r8 = r8 & 15;
+ r8 = (r7 + r8)|0;
+ r9 = (r8 + 4)|0;
+ r8 = r8 >> 2;
+ heap32[(r8)] = r7;
+ r7 = r9;
+}
+}
+else{
+ r7 = 0;
+}
+ r8 = (r0 + 116)|0;
+ if(r3 <1) //_LBB612_50
+{
+ r2 = r8 >> 2;
+ r9 = heap32[(r2)];
+}
+else{
+_33: while(true){
+ r9 = r8 >> 2;
+ r9 = heap32[(r9)];
+ r10 = r2 << 3;
+ r11 = (r9 + r10)|0;
+ r11 = r11 >> 2;
+ r10 = (r7 + r10)|0;
+ r12 = heap32[(r11+1)];
+ r11 = heap32[(r11)];
+ r10 = r10 >> 2;
+ r2 = (r2 + 1)|0;
+ heap32[(r10)] = r11;
+ heap32[(r10+1)] = r12;
+if(!(r3 !=r2)) //_LBB612_51
+{
+break _33;
+}
+}
+ r8 = (r0 + 116)|0;
+}
+if(!(r9 ==0)) //_LBB612_57
+{
+ r2 = heapU8[r0+120];
+if(!(r2 ==0)) //_LBB612_56
+{
+ r2 = gNumAlignedFree;
+ r2 = r2 >> 2;
+ r10 = heap32[(r2)];
+ r10 = (r10 + 1)|0;
+ r9 = r9 >> 2;
+ heap32[(r2)] = r10;
+ r2 = heap32[(r9+-1)];
+ heap32[(g0)] = r2;
+ free(i7);
+}
+ r2 = r8 >> 2;
+ heap32[(r2)] = 0;
+}
+ r2 = 1;
+ r8 = r8 >> 2;
+ heap8[r0+120] = r2;
+ heap32[(r8)] = r7;
+ heap32[(r4+28)] = r1;
+ if(r3 >=r1) //_LBB612_59
+{
+break _21;
+}
+}
+_43: while(true){
+ r2 = r3 << 3;
+ r7 = heap32[(r4+29)];
+ r2 = (r7 + r2)|0;
+ r2 = r2 >> 2;
+ r3 = (r3 + 1)|0;
+ heap32[(r2)] = 0;
+ heap32[(r2+1)] = 0;
+if(!(r1 !=r3)) //_LBB612_58
+{
+break _21;
+}
+}
+}
+}
+} while(0);
+ r3 = 0;
+ heap32[(r4+27)] = r1;
+}
+else{
+ r2 = 0;
+_47: while(true){
+ r3 = r2 << 2;
+ r4 = heap32[(fp+-127)];
+ r3 = (r4 + r3)|0;
+ r3 = r3 >> 2;
+ r3 = heap32[(r3)];
+ r4 = r3 >> 2;
+ r4 = heap32[(r4)];
+ r4 = r4 >> 2;
+ r4 = heap32[(r4+2)];
+ r2 = (r2 + 1)|0;
+ heap32[(g0)] = r3;
+ __FUNCTION_TABLE__[(r4)>>2](i7);
+ if(r1 ==r2) //_LBB612_16
+{
+break _47;
+}
+}
+ r2 = r0 >> 2;
+ r3 = heap32[(r2+27)];
+_50: do {
+if(!(r3 >r1)) //_LBB612_35
+{
+if(!(r3 >=r1)) //_LBB612_35
+{
+ r4 = heap32[(r2+28)];
+if(!(r4 >=r1)) //_LBB612_34
+{
+ if(r1 !=0) //_LBB612_21
+{
+ r4 = gNumAlignedAllocs;
+ r4 = r4 >> 2;
+ r7 = heap32[(r4)];
+ r8 = r1 << 3;
+ r7 = (r7 + 1)|0;
+ r8 = r8 | 3;
+ heap32[(r4)] = r7;
+ r4 = (r8 + 16)|0;
+ heap32[(g0)] = r4;
+ malloc(i7);
+ r4 = r_g0;
+ if(r4 !=0) //_LBB612_23
+{
+ r7 = 0;
+ r8 = (r4 + 4)|0;
+ r7 = (r7 - r8)|0;
+ r7 = r7 & 15;
+ r7 = (r4 + r7)|0;
+ r8 = (r7 + 4)|0;
+ r7 = r7 >> 2;
+ heap32[(r7)] = r4;
+ r4 = r8;
+}
+}
+else{
+ r4 = 0;
+}
+ r7 = (r0 + 116)|0;
+ if(r3 <1) //_LBB612_26
+{
+ r8 = r7 >> 2;
+ r9 = heap32[(r8)];
+}
+else{
+ r8 = 0;
+_63: while(true){
+ r9 = r7 >> 2;
+ r9 = heap32[(r9)];
+ r10 = r8 << 3;
+ r11 = (r9 + r10)|0;
+ r11 = r11 >> 2;
+ r10 = (r4 + r10)|0;
+ r12 = heap32[(r11+1)];
+ r11 = heap32[(r11)];
+ r10 = r10 >> 2;
+ r8 = (r8 + 1)|0;
+ heap32[(r10)] = r11;
+ heap32[(r10+1)] = r12;
+if(!(r3 !=r8)) //_LBB612_27
+{
+break _63;
+}
+}
+ r7 = (r0 + 116)|0;
+}
+if(!(r9 ==0)) //_LBB612_33
+{
+ r8 = heapU8[r0+120];
+if(!(r8 ==0)) //_LBB612_32
+{
+ r8 = gNumAlignedFree;
+ r8 = r8 >> 2;
+ r10 = heap32[(r8)];
+ r10 = (r10 + 1)|0;
+ r9 = r9 >> 2;
+ heap32[(r8)] = r10;
+ r8 = heap32[(r9+-1)];
+ heap32[(g0)] = r8;
+ free(i7);
+}
+ r8 = r7 >> 2;
+ heap32[(r8)] = 0;
+}
+ r8 = 1;
+ r7 = r7 >> 2;
+ heap8[r0+120] = r8;
+ heap32[(r7)] = r4;
+ heap32[(r2+28)] = r1;
+ if(r3 >=r1) //_LBB612_35
+{
+break _50;
+}
+}
+_73: while(true){
+ r4 = r3 << 3;
+ r7 = heap32[(r2+29)];
+ r4 = (r7 + r4)|0;
+ r4 = r4 >> 2;
+ r3 = (r3 + 1)|0;
+ heap32[(r4)] = 0;
+ heap32[(r4+1)] = 0;
+if(!(r1 !=r3)) //_LBB612_34
+{
+break _50;
+}
+}
+}
+}
+} while(0);
+ heap32[(r2+27)] = r1;
+ if(r1 >0) //_LBB612_37
+{
+ r4 = 0;
+ r7 = heap32[(fp+-127)];
+ r8 = r1;
+ r3 = r4;
+_78: while(true){
+ r9 = r7 >> 2;
+ r9 = heap32[(r9)];
+ r10 = r9 >> 2;
+ r10 = heap32[(r10)];
+ r10 = r10 >> 2;
+ r10 = heap32[(r10+4)];
+ r11 = heap32[(r2+29)];
+ r11 = (r11 + r4)|0;
+ heap32[(g0)] = r9;
+ heap32[(g0+1)] = r11;
+ __FUNCTION_TABLE__[(r10)>>2](i7);
+ r9 = r11 >> 2;
+ r9 = heap32[(r9)];
+ r8 = (r8 + -1)|0;
+ r3 = (r9 + r3)|0;
+ r4 = (r4 + 8)|0;
+ r7 = (r7 + 4)|0;
+if(!(r8 !=0)) //_LBB612_38
+{
+break _19;
+}
+}
+}
+else{
+ r3 = 0;
+}
+}
+} while(0);
+ r2 = r0 >> 2;
+ r4 = heap32[(r2+7)];
+_82: do {
+if(!(r4 >r3)) //_LBB612_80
+{
+if(!(r4 >=r3)) //_LBB612_80
+{
+ r7 = heap32[(r2+8)];
+if(!(r7 >=r3)) //_LBB612_78
+{
+ if(r3 !=0) //_LBB612_65
+{
+ r7 = gNumAlignedAllocs;
+ r7 = r7 >> 2;
+ r8 = heap32[(r7)];
+ r9 = (r3 * 136)|0;
+ r8 = (r8 + 1)|0;
+ r9 = r9 | 3;
+ heap32[(r7)] = r8;
+ r7 = (r9 + 16)|0;
+ heap32[(g0)] = r7;
+ malloc(i7);
+ r7 = r_g0;
+ if(r7 !=0) //_LBB612_67
+{
+ r8 = 0;
+ r9 = (r7 + 4)|0;
+ r8 = (r8 - r9)|0;
+ r8 = r8 & 15;
+ r8 = (r7 + r8)|0;
+ r9 = (r8 + 4)|0;
+ r8 = r8 >> 2;
+ heap32[(r8)] = r7;
+ r7 = r9;
+}
+}
+else{
+ r7 = 0;
+}
+ r8 = (r0 + 36)|0;
+ if(r4 <1) //_LBB612_70
+{
+ r9 = r8 >> 2;
+ r11 = heap32[(r9)];
+}
+else{
+ r9 = 0;
+ r10 = r4;
+_95: while(true){
+ r11 = r8 >> 2;
+ r11 = heap32[(r11)];
+ r12 = (r7 + r9)|0;
+ r13 = (r11 + r9)|0;
+ heap32[(g0)] = r12;
+ heap32[(g0+1)] = r13;
+ heap32[(g0+2)] = 136;
+ r10 = (r10 + -1)|0;
+ r9 = (r9 + 136)|0;
+ memcpy(i7);
+if(!(r10 !=0)) //_LBB612_71
+{
+break _95;
+}
+}
+ r8 = (r0 + 36)|0;
+}
+if(!(r11 ==0)) //_LBB612_77
+{
+ r9 = heapU8[r0+40];
+if(!(r9 ==0)) //_LBB612_76
+{
+ r9 = gNumAlignedFree;
+ r9 = r9 >> 2;
+ r10 = heap32[(r9)];
+ r10 = (r10 + 1)|0;
+ r11 = r11 >> 2;
+ heap32[(r9)] = r10;
+ r9 = heap32[(r11+-1)];
+ heap32[(g0)] = r9;
+ free(i7);
+}
+ r9 = r8 >> 2;
+ heap32[(r9)] = 0;
+}
+ r9 = 1;
+ r8 = r8 >> 2;
+ heap8[r0+40] = r9;
+ heap32[(r8)] = r7;
+ heap32[(r2+8)] = r3;
+ if(r4 >=r3) //_LBB612_80
+{
+break _82;
+}
+}
+ r7 = (r3 - r4)|0;
+ r4 = (r4 * 136)|0;
+_106: while(true){
+ r8 = heap32[(r2+9)];
+ r8 = (r8 + r4)|0;
+ r9 = sp + -448;
+ heap32[(g0)] = r8;
+ heap32[(g0+1)] = r9;
+ heap32[(g0+2)] = 136;
+ r7 = (r7 + -1)|0;
+ r4 = (r4 + 136)|0;
+ memcpy(i7);
+if(!(r7 !=0)) //_LBB612_79
+{
+break _82;
+}
+}
+}
+}
+} while(0);
+ r4 = 0;
+ heap32[(r2+7)] = r3;
+ r7 = r4;
+_109: while(true){
+ if(r4 <r1) //_LBB612_81
+{
+ r8 = heap32[(r2+29)];
+ r9 = r4 << 3;
+ r10 = (r8 + r9)|0;
+ r10 = r10 >> 2;
+ r10 = heap32[(r10)];
+ if(r10 !=0) //_LBB612_83
+{
+ if(r7 <r3) //_LBB612_85
+{
+ r11 = r4 << 1;
+ r12 = r4 << 2;
+ r13 = heap32[(fp+-127)];
+ r12 = (r13 + r12)|0;
+ r12 = r12 >> 2;
+ r13 = heap32[(r12)];
+ r14 = r13 >> 2;
+ r15 = heap32[(r2+9)];
+ r16 = heap32[(r14+5)];
+ r17 = heap32[(r14+6)];
+if(!(r10 <1)) //_LBB612_90
+{
+ r10 = (r7 * 136)|0;
+ r10 = (r15 + r10)|0;
+ r18 = 0;
+ r19 = r18;
+_117: while(true){
+ r20 = (r19 * 34)|0;
+ r21 = 136;
+ r22 = r18;
+_119: while(true){
+ r21 = (r21 + -1)|0;
+ r23 = (r22 + 1)|0;
+ r22 = (r10 + r22)|0;
+ r24 = (r19 * 136)|0;
+ heap8[r22+r24] = r18;
+ r22 = r23;
+if(!(r21 !=0)) //_LBB612_88
+{
+break _119;
+}
+}
+ r21 = r20 << 2;
+ r22 = r20 << 2;
+ r21 = (r10 + r21)|0;
+ r23 = r20 << 2;
+ r22 = (r10 + r22)|0;
+ r21 = r21 >> 2;
+ r24 = r20 << 2;
+ r23 = (r10 + r23)|0;
+ r22 = r22 >> 2;
+ heap32[(r21+31)] = -8388609;
+ r21 = r20 << 2;
+ r24 = (r10 + r24)|0;
+ r23 = r23 >> 2;
+ heap32[(r22+32)] = 2139095039;
+ r20 = r20 << 2;
+ r21 = (r10 + r21)|0;
+ r22 = r24 >> 2;
+ heap32[(r23+21)] = 0;
+ r20 = (r10 + r20)|0;
+ r23 = r11 << 2;
+ r21 = r21 >> 2;
+ heap32[(r22+20)] = 0;
+ r22 = (r8 + r23)|0;
+ r19 = (r19 + 1)|0;
+ r20 = r20 >> 2;
+ heap32[(r21+26)] = r16;
+ r21 = r22 >> 2;
+ heap32[(r20+27)] = r17;
+ r20 = heap32[(r21)];
+if(!(r20 >r19)) //_LBB612_87
+{
+break _117;
+}
+}
+}
+ r10 = r16 >> 2;
+ heap32[(r10+126)] = 0;
+ heap32[(r10+127)] = 0;
+ heap32[(r10+128)] = 0;
+ heap32[(r10+129)] = 0;
+ heap32[(r10+130)] = 0;
+ heap32[(r10+131)] = 0;
+ heap32[(r10+132)] = 0;
+ heap32[(r10+133)] = 0;
+ r16 = r17 >> 2;
+ heap32[(r16+126)] = 0;
+ heap32[(r16+127)] = 0;
+ heap32[(r16+128)] = 0;
+ heap32[(r16+129)] = 0;
+ heap32[(r16+130)] = 0;
+ heap32[(r16+131)] = 0;
+ heap32[(r16+132)] = 0;
+ heap32[(r16+133)] = 0;
+ f0 = 1;
+ f1 = heapFloat[(r6+3)];
+ r17 = sp + -504;
+ f1 = f0/f1;
+ r18 = (r7 * 136)|0;
+ r15 = (r15 + r18)|0;
+ r18 = r17 >> 2;
+ heapFloat[(fp+-126)] = f1;
+ r19 = (r15 + 16)|0;
+ heap32[(r18+1)] = heap32[(r6+8)];
+ heap32[(r18+2)] = r19;
+ heap32[(r18+3)] = r15;
+ r19 = (r15 + 32)|0;
+ heap32[(r18+4)] = 0;
+ heap32[(r18+5)] = r19;
+ r19 = (r15 + 116)|0;
+ heap32[(r18+6)] = 34;
+ r20 = r15 >> 2;
+ heap32[(r18+7)] = r19;
+ heap32[(r20+30)] = heap32[(r6+10)];
+ r19 = (r15 + 120)|0;
+ heap32[(r18+13)] = heap32[(r6+1)];
+ r20 = (r15 + 124)|0;
+ heap32[(r18+8)] = r19;
+ r19 = (r15 + 128)|0;
+ heap32[(r18+9)] = r20;
+ heap32[(r18+10)] = r19;
+ r19 = heap32[(r6+5)];
+ heap32[(r18+12)] = r19;
+ r12 = heap32[(r12)];
+ r19 = r12 >> 2;
+ r19 = heap32[(r19)];
+ r19 = r19 >> 2;
+ r19 = heap32[(r19+5)];
+ r11 = r11 << 2;
+ heap32[(g0)] = r12;
+ heap32[(g0+1)] = r17;
+ r8 = (r8 + r11)|0;
+ r8 = r8 >> 2;
+ __FUNCTION_TABLE__[(r19)>>2](i7);
+ r11 = heap32[(r8)];
+_123: do {
+if(!(r11 <1)) //_LBB612_93
+{
+ r11 = 0;
+_125: while(true){
+ r12 = (r11 * 34)|0;
+ r12 = r12 << 2;
+ r12 = (r15 + r12)|0;
+ r12 = r12 >> 2;
+ heap32[(r12+28)] = r13;
+ r17 = heap32[(r14+5)];
+ r17 = r17 >> 2;
+ f1 = heapFloat[(r12)];
+ f2 = heapFloat[(r17+64)];
+ f3 = heapFloat[(r12+1)];
+ f4 = heapFloat[(r17+65)];
+ f5 = heapFloat[(r17+68)];
+ f6 = heapFloat[(r17+69)];
+ f2 = f2*f1;
+ f4 = f4*f3;
+ f7 = heapFloat[(r12+2)];
+ f8 = heapFloat[(r17+66)];
+ f9 = heapFloat[(r17+72)];
+ f10 = heapFloat[(r17+73)];
+ f11 = heapFloat[(r17+70)];
+ f5 = f5*f1;
+ f6 = f6*f3;
+ f2 = f2+f4;
+ f4 = f8*f7;
+ f8 = heapFloat[(r17+74)];
+ f9 = f9*f1;
+ f10 = f10*f3;
+ f5 = f5+f6;
+ f6 = f11*f7;
+ f2 = f2+f4;
+ f4 = heapFloat[(r17+134)];
+ f11 = heapFloat[(r17+136)];
+ f12 = heapFloat[(r17+135)];
+ f5 = f5+f6;
+ f6 = f9+f10;
+ f8 = f8*f7;
+ f2 = f2*f4;
+ f4 = f6+f8;
+ f5 = f5*f12;
+ heapFloat[(r12+12)] = f2;
+ f2 = f4*f11;
+ heapFloat[(r12+13)] = f5;
+ heapFloat[(r12+14)] = f2;
+ heap32[(r12+15)] = 0;
+ r17 = heap32[(r14+6)];
+ r17 = r17 >> 2;
+ f2 = heapFloat[(r12+8)];
+ f4 = heapFloat[(r17+64)];
+ f5 = heapFloat[(r12+9)];
+ f6 = heapFloat[(r17+65)];
+ f8 = heapFloat[(r17+68)];
+ f9 = heapFloat[(r17+69)];
+ f4 = f4*f2;
+ f6 = f6*f5;
+ f10 = heapFloat[(r12+10)];
+ f11 = heapFloat[(r17+66)];
+ f12 = heapFloat[(r17+72)];
+ f13 = heapFloat[(r17+73)];
+ f14 = heapFloat[(r17+70)];
+ f8 = f8*f2;
+ f9 = f9*f5;
+ f4 = f4+f6;
+ f6 = f11*f10;
+ f11 = heapFloat[(r17+74)];
+ f12 = f12*f2;
+ f13 = f13*f5;
+ f8 = f8+f9;
+ f9 = f14*f10;
+ f4 = f4+f6;
+ f6 = heapFloat[(r17+134)];
+ f14 = heapFloat[(r17+136)];
+ f15 = heapFloat[(r17+135)];
+ f8 = f8+f9;
+ f9 = f12+f13;
+ f11 = f11*f10;
+ f4 = f4*f6;
+ f6 = f9+f11;
+ f8 = f8*f15;
+ heapFloat[(r12+16)] = f4;
+ f4 = f6*f14;
+ heapFloat[(r12+17)] = f8;
+ heapFloat[(r12+18)] = f4;
+ heap32[(r12+19)] = 0;
+ f4 = heapFloat[(r10+68)];
+ f6 = heapFloat[(r10+69)];
+ f8 = heapFloat[(r10+64)];
+ f9 = heapFloat[(r10+65)];
+ f11 = heapFloat[(r10+72)];
+ f12 = heapFloat[(r10+73)];
+ f13 = heapFloat[(r10+70)];
+ f14 = heapFloat[(r10+66)];
+ f8 = f8*f1;
+ f9 = f9*f3;
+ f4 = f4*f1;
+ f6 = f6*f3;
+ f15 = heapFloat[(r10+74)];
+ f16 = heapFloat[(r16+68)];
+ f17 = heapFloat[(r16+69)];
+ f18 = heapFloat[(r16+64)];
+ f19 = heapFloat[(r16+65)];
+ f8 = f8+f9;
+ f9 = f14*f7;
+ f4 = f4+f6;
+ f6 = f13*f7;
+ f11 = f11*f1;
+ f12 = f12*f3;
+ f13 = heapFloat[(r10+84)];
+ f14 = heapFloat[(r12+5)];
+ f20 = heapFloat[(r12+4)];
+ f21 = heapFloat[(r16+84)];
+ f22 = heapFloat[(r12+6)];
+ f8 = f8+f9;
+ f4 = f4+f6;
+ f6 = f20*f13;
+ f9 = f14*f13;
+ f23 = heapFloat[(r16+72)];
+ f24 = heapFloat[(r16+73)];
+ f25 = heapFloat[(r16+70)];
+ f26 = heapFloat[(r16+66)];
+ f18 = f18*f2;
+ f19 = f19*f5;
+ f16 = f16*f2;
+ f17 = f17*f5;
+ f11 = f11+f12;
+ f12 = f15*f7;
+ f15 = heapFloat[(r16+74)];
+ f27 = f20*f21;
+ f28 = f14*f21;
+ f11 = f11+f12;
+ f12 = f22*f13;
+ f13 = f18+f19;
+ f18 = f26*f10;
+ f16 = f16+f17;
+ f17 = f25*f10;
+ f19 = f23*f2;
+ f23 = f24*f5;
+ f8 = f8*f1;
+ f4 = f4*f3;
+ f6 = f6*f20;
+ f9 = f9*f14;
+ f13 = f13+f18;
+ f16 = f16+f17;
+ f17 = f22*f21;
+ f18 = f19+f23;
+ f15 = f15*f10;
+ f19 = f27*f20;
+ f21 = f28*f14;
+ f4 = f8+f4;
+ f8 = f11*f7;
+ f6 = f6+f9;
+ f9 = f12*f22;
+ f11 = f18+f15;
+ f12 = f13*f2;
+ f13 = f16*f5;
+ f15 = f19+f21;
+ f16 = f17*f22;
+ f4 = f4+f8;
+ f6 = f6+f9;
+ f8 = f12+f13;
+ f9 = f11*f10;
+ f11 = f15+f16;
+ f4 = f4+f6;
+ f6 = f8+f9;
+ f4 = f11+f4;
+ f4 = f6+f4;
+ f4 = f0/f4;
+ heapFloat[(r12+23)] = f4;
+ f6 = heapFloat[(r10+76)];
+ f8 = heapFloat[(r10+77)];
+ f9 = heapFloat[(r10+80)];
+ f11 = heapFloat[(r10+81)];
+ f12 = heapFloat[(r16+80)];
+ f13 = heapFloat[(r16+81)];
+ f15 = heapFloat[(r16+76)];
+ f16 = heapFloat[(r16+77)];
+ f17 = heapFloat[(r10+78)];
+ f18 = heapFloat[(r10+82)];
+ f19 = heapFloat[(r16+82)];
+ f21 = heapFloat[(r16+78)];
+ f6 = f20*f6;
+ f8 = f14*f8;
+ f1 = f1*f9;
+ f3 = f3*f11;
+ f2 = f2*f12;
+ f5 = f5*f13;
+ f9 = f20*f15;
+ f11 = f14*f16;
+ f6 = f6+f8;
+ f8 = f22*f17;
+ f1 = f1+f3;
+ f3 = f7*f18;
+ f2 = f2+f5;
+ f5 = f10*f19;
+ f7 = f9+f11;
+ f9 = f22*f21;
+ f6 = f6+f8;
+ f1 = f1+f3;
+ f2 = f2+f5;
+ f3 = f7+f9;
+ f1 = f6+f1;
+ f2 = f2-f3;
+ f1 = f1+f2;
+ f2 = heapFloat[(r18+13)];
+ f3 = 0;
+ f1 = f2*f1;
+ f2 = heapFloat[(r12+29)];
+ f1 = f3-f1;
+ f2 = f4*f2;
+ f1 = f4*f1;
+ f1 = f2+f1;
+ r11 = (r11 + 1)|0;
+ heapFloat[(r12+29)] = f1;
+ heap32[(r12+21)] = 0;
+ r12 = heap32[(r8)];
+if(!(r12 >r11)) //_LBB612_92
+{
+break _123;
+}
+}
+}
+} while(0);
+ r8 = heap32[(r2+29)];
+ r8 = (r8 + r9)|0;
+ r8 = r8 >> 2;
+ r8 = heap32[(r8)];
+}
+else{
+__label__ = 78;
+break _109;
+}
+}
+else{
+ r8 = 0;
+}
+ r7 = (r8 + r7)|0;
+ r4 = (r4 + 1)|0;
+}
+else{
+__label__ = 90;
+break _109;
+}
+}
+switch(__label__ ){//multiple entries
+case 90:
+ r1 = heap32[(fp+-133)];
+_132: do {
+if(!(r1 <1)) //_LBB612_225
+{
+_133: while(true){
+ r1 = heap32[(fp+-132)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1)];
+ heap32[(fp+-128)] = r1;
+ r1 = r1 >> 2;
+ heap32[(fp+-127)] = r1;
+ r3 = heap32[(r1+277)];
+ r1 = heap32[(r1+278)];
+ r4 = heapU8[r3+232];
+ r4 = r4 & 2;
+ if(r4 !=0) //_LBB612_99
+{
+ r4 = r3;
+}
+else{
+ r4 = 0;
+}
+ r7 = heapU8[r1+232];
+ r7 = r7 & 2;
+ if(r7 !=0) //_LBB612_102
+{
+ r7 = r1;
+}
+else{
+ r7 = 0;
+}
+ if(r4 ==0) //_LBB612_105
+{
+__label__ = 99;
+}
+else{
+ r4 = r4 >> 2;
+ f0 = heapFloat[(r4+84)];
+ f1 = 0;
+ if(f0 !=f1) //_LBB612_107
+{
+__label__ = 101;
+}
+else{
+__label__ = 99;
+}
+}
+if (__label__ == 99){
+ if(r7 ==0) //_LBB612_224
+{
+__label__ = 216;
+}
+else{
+ r4 = r7 >> 2;
+ f0 = heapFloat[(r4+84)];
+ f1 = 0;
+ if(f0 ==f1) //_LBB612_224
+{
+__label__ = 216;
+}
+else{
+__label__ = 101;
+}
+}
+}
+if (__label__ == 101){
+ r4 = heap32[(fp+-128)];
+ r7 = (r4 + 4)|0;
+ heap32[(fp+-129)] = r7;
+ r7 = (r4 + 152)|0;
+ heap32[(fp+-130)] = r7;
+ r4 = (r4 + 168)|0;
+ heap32[(fp+-131)] = r4;
+ r4 = 0;
+ r7 = r4;
+_150: while(true){
+ r8 = heap32[(fp+-127)];
+ r8 = heap32[(r8+279)];
+ if(r8 >r7) //_LBB612_108
+{
+ r8 = heap32[(fp+-128)];
+ r8 = (r8 + r4)|0;
+ r9 = r8 >> 2;
+ f0 = heapFloat[(r9+21)];
+ r10 = heap32[(fp+-127)];
+ f1 = heapFloat[(r10+281)];
+_153: do {
+if(!(f0 >f1)) //_LBB612_222
+{
+ r10 = heap32[(fp+-129)];
+ r10 = (r10 + r4)|0;
+ r11 = heap32[(fp+-131)];
+ r11 = (r11 + r4)|0;
+ r12 = heap32[(fp+-130)];
+ r12 = (r12 + r4)|0;
+ r13 = heap32[(r2+3)];
+ r14 = heap32[(r2+2)];
+ if(r13 ==r14) //_LBB612_111
+{
+ r15 = 1;
+ r16 = r14 << 1;
+ r16 = r14 == 0 ? r15 : r16;
+ if(r13 >=r16) //_LBB612_110
+{
+__label__ = 104;
+}
+else{
+ if(r16 !=0) //_LBB612_114
+{
+ r13 = gNumAlignedAllocs;
+ r13 = r13 >> 2;
+ r17 = heap32[(r13)];
+ r18 = (r16 * 136)|0;
+ r17 = (r17 + 1)|0;
+ r18 = r18 | 3;
+ heap32[(r13)] = r17;
+ r13 = (r18 + 16)|0;
+ heap32[(g0)] = r13;
+ malloc(i7);
+ r17 = r_g0;
+ if(r17 !=0) //_LBB612_116
+{
+ r13 = 0;
+ r18 = (r17 + 4)|0;
+ r13 = (r13 - r18)|0;
+ r13 = r13 & 15;
+ r13 = (r17 + r13)|0;
+ r18 = (r13 + 4)|0;
+ r13 = r13 >> 2;
+ heap32[(r13)] = r17;
+ r17 = r18;
+}
+}
+else{
+ r17 = 0;
+}
+ if(r14 <1) //_LBB612_119
+{
+ r19 = heap32[(r2+4)];
+}
+else{
+ r13 = 0;
+ r18 = r14;
+_166: while(true){
+ r19 = heap32[(r2+4)];
+ r20 = (r17 + r13)|0;
+ r21 = (r19 + r13)|0;
+ heap32[(g0)] = r20;
+ heap32[(g0+1)] = r21;
+ heap32[(g0+2)] = 136;
+ r18 = (r18 + -1)|0;
+ r13 = (r13 + 136)|0;
+ memcpy(i7);
+if(!(r18 !=0)) //_LBB612_120
+{
+break _166;
+}
+}
+}
+ if(r19 !=0) //_LBB612_123
+{
+ r13 = heapU8[r0+20];
+ if(r13 !=0) //_LBB612_125
+{
+ r13 = gNumAlignedFree;
+ r13 = r13 >> 2;
+ r18 = heap32[(r13)];
+ r18 = (r18 + 1)|0;
+ r19 = r19 >> 2;
+ heap32[(r13)] = r18;
+ r13 = heap32[(r19+-1)];
+ heap32[(g0)] = r13;
+ free(i7);
+ r13 = heap32[(r2+2)];
+}
+else{
+ r13 = r14;
+}
+ heap32[(r2+4)] = 0;
+}
+else{
+ r13 = r14;
+}
+ heap8[r0+20] = r15;
+ heap32[(r2+4)] = r17;
+ heap32[(r2+3)] = r16;
+__label__ = 121;
+}
+}
+else{
+__label__ = 104;
+}
+if (__label__ == 104){
+ r13 = r14;
+}
+ r13 = (r13 + 1)|0;
+ heap32[(r2+2)] = r13;
+ r13 = heapU8[r3+232];
+ r15 = heapU8[r1+232];
+ r13 = r13 & 2;
+ r16 = 0;
+ r15 = r15 & 2;
+ r13 = r13 == 0 ? r16 : r3;
+ r17 = heap32[(r2+4)];
+ r15 = r15 == 0 ? r16 : r1;
+ if(r13 ==0) //_LBB612_130
+{
+ r18 = _ZGVZN35btSequentialImpulseConstraintSolver12getFixedBodyEvE7s_fixed;
+ r19 = heapU8[r18];
+if(!(r19 !=0)) //_LBB612_132
+{
+ r19 = _ZZN35btSequentialImpulseConstraintSolver12getFixedBodyEvE7s_fixed;
+ r20 = r19 >> 2;
+ heap32[(r20+41)] = 1065353216;
+ heap32[(r20+42)] = 1065353216;
+ heap32[(r20+43)] = 1065353216;
+ heap32[(r20+44)] = 0;
+ heap32[(r20+45)] = 0;
+ heap32[(r20+46)] = 1566444395;
+ heap32[(r20+47)] = 0;
+ heap32[(r20+48)] = 0;
+ heap32[(r20+49)] = 0;
+ heap32[(r20+50)] = 0;
+ heap32[(r20+51)] = 1;
+ heap32[(r20+52)] = -1;
+ heap32[(r20+53)] = -1;
+ heap32[(r20+54)] = 1;
+ heap32[(r20+55)] = 0;
+ heap32[(r20+56)] = 1056964608;
+ heap32[(r20+57)] = 0;
+ heap32[(r20+58)] = 1;
+ heap32[(r20+59)] = 0;
+ heap32[(r20+60)] = 1065353216;
+ heap32[(r20+61)] = 0;
+ heap32[(r20+62)] = 0;
+ heap32[(r20+63)] = 0;
+ heap32[(r20+1)] = 1065353216;
+ heap32[(r20+2)] = 0;
+ heap32[(r20+3)] = 0;
+ heap32[(r20+4)] = 0;
+ heap32[(r20+5)] = 0;
+ heap32[(r20+6)] = 1065353216;
+ heap32[(r20+7)] = 0;
+ heap32[(r20+8)] = 0;
+ heap32[(r20+9)] = 0;
+ heap32[(r20+10)] = 0;
+ heap32[(r20+11)] = 1065353216;
+ heap32[(r20+12)] = 0;
+ heap32[(r20+13)] = 0;
+ heap32[(r20+14)] = 0;
+ r21 = _ZTV11btRigidBody;
+ heap32[(r20+15)] = 0;
+ r21 = (r21 + 8)|0;
+ heap32[(r20+16)] = 0;
+ r22 = 1;
+ heap32[(r20)] = r21;
+ heap8[r19+492] = r22;
+ heap32[(r20+122)] = 0;
+ heap32[(r20+120)] = 0;
+ r21 = sp + -280;
+ heap32[(r20+121)] = 0;
+ r20 = r21 >> 2;
+ heap32[(fp+-70)] = 0;
+ heap32[(r20+1)] = 0;
+ heap32[(r20+18)] = 0;
+ heap32[(r20+19)] = 0;
+ heap32[(r20+20)] = 0;
+ heap32[(r20+21)] = 0;
+ heap32[(r20+22)] = 0;
+ heap32[(r20+23)] = 0;
+ heap32[(r20+24)] = 0;
+ heap32[(r20+25)] = 1056964608;
+ heap32[(r20+26)] = 0;
+ heap32[(r20+27)] = 1061997773;
+ heap32[(r20+28)] = 1065353216;
+ heap8[sp+-164] = r16;
+ heap32[(r20+30)] = 1000593162;
+ heap32[(r20+31)] = 1008981770;
+ heap32[(r20+32)] = 1008981770;
+ heap32[(r20+33)] = 1008981770;
+ heap32[(r20+2)] = 1065353216;
+ heap32[(r20+3)] = 0;
+ heap32[(r20+4)] = 0;
+ heap32[(r20+5)] = 0;
+ heap32[(r20+6)] = 0;
+ heap32[(r20+7)] = 1065353216;
+ heap32[(r20+8)] = 0;
+ heap32[(r20+9)] = 0;
+ heap32[(r20+10)] = 0;
+ heap32[(r20+11)] = 0;
+ heap32[(r20+12)] = 1065353216;
+ heap32[(r20+13)] = 0;
+ heap32[(r20+14)] = 0;
+ heap32[(r20+15)] = 0;
+ heap32[(r20+16)] = 0;
+ heap32[(r20+17)] = 0;
+ heap32[(g0)] = r19;
+ heap32[(g0+1)] = r21;
+ _ZN11btRigidBody14setupRigidBodyERKNS_27btRigidBodyConstructionInfoE(i7);
+ heap8[r18] = r22;
+}
+ r18 = _ZZN35btSequentialImpulseConstraintSolver12getFixedBodyEvE7s_fixed;
+ r19 = r18 >> 2;
+ r20 = heap32[(r19+51)];
+ r20 = r20 | 1;
+ heap32[(r19+51)] = r20;
+ heap32[(r19+84)] = 0;
+ f0 = 0;
+ f1 = heapFloat[(r19+95)];
+ f2 = heapFloat[(r19+94)];
+ f3 = heapFloat[(r19+93)];
+ f3 = f3*f0;
+ f2 = f2*f0;
+ heapFloat[(r19+89)] = f3;
+ f1 = f1*f0;
+ heapFloat[(r19+90)] = f2;
+ heapFloat[(r19+91)] = f1;
+ heap32[(r19+92)] = 0;
+ heap32[(r19+97)] = 0;
+ heap32[(r19+98)] = 0;
+ heap32[(r19+99)] = 0;
+ heap32[(r19+100)] = 0;
+ f1 = heapFloat[(r19+87)];
+ f2 = heapFloat[(r19+86)];
+ f3 = heapFloat[(r19+85)];
+ f3 = f3*f0;
+ f2 = f2*f0;
+ heapFloat[(r19+138)] = f3;
+ f0 = f1*f0;
+ heapFloat[(r19+139)] = f2;
+ heapFloat[(r19+140)] = f0;
+ heap32[(r19+141)] = 0;
+}
+else{
+ r18 = r13;
+}
+ r19 = (r14 * 136)|0;
+ r17 = (r17 + r19)|0;
+ r17 = r17 >> 2;
+ heap32[(r17+26)] = r18;
+ if(r15 ==0) //_LBB612_135
+{
+ r18 = _ZGVZN35btSequentialImpulseConstraintSolver12getFixedBodyEvE7s_fixed;
+ r19 = heapU8[r18];
+if(!(r19 !=0)) //_LBB612_137
+{
+ r19 = _ZZN35btSequentialImpulseConstraintSolver12getFixedBodyEvE7s_fixed;
+ r20 = r19 >> 2;
+ heap32[(r20+41)] = 1065353216;
+ heap32[(r20+42)] = 1065353216;
+ heap32[(r20+43)] = 1065353216;
+ heap32[(r20+44)] = 0;
+ heap32[(r20+45)] = 0;
+ heap32[(r20+46)] = 1566444395;
+ heap32[(r20+47)] = 0;
+ heap32[(r20+48)] = 0;
+ heap32[(r20+49)] = 0;
+ heap32[(r20+50)] = 0;
+ heap32[(r20+51)] = 1;
+ heap32[(r20+52)] = -1;
+ heap32[(r20+53)] = -1;
+ heap32[(r20+54)] = 1;
+ heap32[(r20+55)] = 0;
+ heap32[(r20+56)] = 1056964608;
+ heap32[(r20+57)] = 0;
+ heap32[(r20+58)] = 1;
+ heap32[(r20+59)] = 0;
+ heap32[(r20+60)] = 1065353216;
+ heap32[(r20+61)] = 0;
+ heap32[(r20+62)] = 0;
+ heap32[(r20+63)] = 0;
+ heap32[(r20+1)] = 1065353216;
+ heap32[(r20+2)] = 0;
+ heap32[(r20+3)] = 0;
+ heap32[(r20+4)] = 0;
+ heap32[(r20+5)] = 0;
+ heap32[(r20+6)] = 1065353216;
+ heap32[(r20+7)] = 0;
+ heap32[(r20+8)] = 0;
+ heap32[(r20+9)] = 0;
+ heap32[(r20+10)] = 0;
+ heap32[(r20+11)] = 1065353216;
+ heap32[(r20+12)] = 0;
+ heap32[(r20+13)] = 0;
+ heap32[(r20+14)] = 0;
+ r21 = _ZTV11btRigidBody;
+ heap32[(r20+15)] = 0;
+ r21 = (r21 + 8)|0;
+ heap32[(r20+16)] = 0;
+ r22 = 1;
+ heap32[(r20)] = r21;
+ heap8[r19+492] = r22;
+ heap32[(r20+122)] = 0;
+ heap32[(r20+120)] = 0;
+ r21 = sp + -144;
+ heap32[(r20+121)] = 0;
+ r20 = r21 >> 2;
+ heap32[(fp+-36)] = 0;
+ heap32[(r20+1)] = 0;
+ heap32[(r20+18)] = 0;
+ heap32[(r20+19)] = 0;
+ heap32[(r20+20)] = 0;
+ heap32[(r20+21)] = 0;
+ heap32[(r20+22)] = 0;
+ heap32[(r20+23)] = 0;
+ heap32[(r20+24)] = 0;
+ heap32[(r20+25)] = 1056964608;
+ heap32[(r20+26)] = 0;
+ heap32[(r20+27)] = 1061997773;
+ heap32[(r20+28)] = 1065353216;
+ heap8[sp+-28] = r16;
+ heap32[(r20+30)] = 1000593162;
+ heap32[(r20+31)] = 1008981770;
+ heap32[(r20+32)] = 1008981770;
+ heap32[(r20+33)] = 1008981770;
+ heap32[(r20+2)] = 1065353216;
+ heap32[(r20+3)] = 0;
+ heap32[(r20+4)] = 0;
+ heap32[(r20+5)] = 0;
+ heap32[(r20+6)] = 0;
+ heap32[(r20+7)] = 1065353216;
+ heap32[(r20+8)] = 0;
+ heap32[(r20+9)] = 0;
+ heap32[(r20+10)] = 0;
+ heap32[(r20+11)] = 0;
+ heap32[(r20+12)] = 1065353216;
+ heap32[(r20+13)] = 0;
+ heap32[(r20+14)] = 0;
+ heap32[(r20+15)] = 0;
+ heap32[(r20+16)] = 0;
+ heap32[(r20+17)] = 0;
+ heap32[(g0)] = r19;
+ heap32[(g0+1)] = r21;
+ _ZN11btRigidBody14setupRigidBodyERKNS_27btRigidBodyConstructionInfoE(i7);
+ heap8[r18] = r22;
+}
+ r18 = _ZZN35btSequentialImpulseConstraintSolver12getFixedBodyEvE7s_fixed;
+ r19 = r18 >> 2;
+ r20 = heap32[(r19+51)];
+ r20 = r20 | 1;
+ heap32[(r19+51)] = r20;
+ heap32[(r19+84)] = 0;
+ f0 = 0;
+ f1 = heapFloat[(r19+95)];
+ f2 = heapFloat[(r19+94)];
+ f3 = heapFloat[(r19+93)];
+ f3 = f3*f0;
+ f2 = f2*f0;
+ heapFloat[(r19+89)] = f3;
+ f1 = f1*f0;
+ heapFloat[(r19+90)] = f2;
+ heapFloat[(r19+91)] = f1;
+ heap32[(r19+92)] = 0;
+ heap32[(r19+97)] = 0;
+ heap32[(r19+98)] = 0;
+ heap32[(r19+99)] = 0;
+ heap32[(r19+100)] = 0;
+ f1 = heapFloat[(r19+87)];
+ f2 = heapFloat[(r19+86)];
+ f3 = heapFloat[(r19+85)];
+ f3 = f3*f0;
+ f2 = f2*f0;
+ heapFloat[(r19+138)] = f3;
+ f0 = f1*f0;
+ heapFloat[(r19+139)] = f2;
+ heapFloat[(r19+140)] = f0;
+ heap32[(r19+141)] = 0;
+}
+else{
+ r18 = r15;
+}
+ heap32[(r17+27)] = r18;
+ r18 = r1 >> 2;
+ heap32[(r17+28)] = r10;
+ r19 = r3 >> 2;
+ r20 = heap32[(r19+58)];
+ r21 = heap32[(r18+58)];
+ f0 = heapFloat[(r9+15)];
+ f1 = heapFloat[(r19+15)];
+ f2 = heapFloat[(r9+14)];
+ f3 = heapFloat[(r19+14)];
+ f4 = heapFloat[(r9+13)];
+ f5 = heapFloat[(r19+13)];
+ r19 = sp + -296;
+ f4 = f4-f5;
+ f2 = f2-f3;
+ r22 = r19 >> 2;
+ heapFloat[(fp+-74)] = f4;
+ f0 = f0-f1;
+ heapFloat[(r22+1)] = f2;
+ heapFloat[(r22+2)] = f0;
+ heap32[(r22+3)] = 0;
+ f1 = heapFloat[(r9+11)];
+ f3 = heapFloat[(r18+15)];
+ f5 = heapFloat[(r9+10)];
+ f6 = heapFloat[(r18+14)];
+ f7 = heapFloat[(r9+9)];
+ f8 = heapFloat[(r18+13)];
+ r18 = sp + -312;
+ f7 = f7-f8;
+ f5 = f5-f6;
+ r22 = r18 >> 2;
+ heapFloat[(fp+-78)] = f7;
+ f1 = f1-f3;
+ heapFloat[(r22+1)] = f5;
+ heapFloat[(r22+2)] = f1;
+ r23 = r8 >> 2;
+ heap32[(r22+3)] = 0;
+ r22 = r8 >> 2;
+ r24 = r8 >> 2;
+ r20 = r20 & 2;
+ r21 = r21 & 2;
+ r20 = r20 == 0 ? r16 : r3;
+ r16 = r21 == 0 ? r16 : r1;
+ if(r20 ==0) //_LBB612_140
+{
+ heap32[(r17+12)] = 0;
+ heap32[(r17+13)] = 0;
+ f3 = 0;
+ heap32[(r17+14)] = 0;
+ heap32[(r17+15)] = 0;
+ f6 = f3;
+ f8 = f3;
+}
+else{
+ f3 = heapFloat[(r23+17)];
+ f6 = heapFloat[(r22+19)];
+ f8 = heapFloat[(r24+18)];
+ f9 = f4*f8;
+ f10 = f2*f3;
+ f3 = f0*f3;
+ f11 = f4*f6;
+ f6 = f2*f6;
+ f8 = f0*f8;
+ f9 = f9-f10;
+ f3 = f3-f11;
+ f6 = f6-f8;
+ r21 = r20 >> 2;
+ f8 = heapFloat[(r21+64)];
+ f10 = heapFloat[(r21+65)];
+ f11 = heapFloat[(r21+68)];
+ f12 = heapFloat[(r21+69)];
+ f8 = f8*f6;
+ f10 = f10*f3;
+ f13 = heapFloat[(r21+66)];
+ f14 = heapFloat[(r21+72)];
+ f15 = heapFloat[(r21+73)];
+ f16 = heapFloat[(r21+70)];
+ f11 = f11*f6;
+ f12 = f12*f3;
+ f8 = f8+f10;
+ f10 = f13*f9;
+ f13 = heapFloat[(r21+74)];
+ f6 = f14*f6;
+ f3 = f15*f3;
+ f11 = f11+f12;
+ f12 = f16*f9;
+ f8 = f8+f10;
+ f10 = heapFloat[(r21+134)];
+ f14 = heapFloat[(r21+136)];
+ f15 = heapFloat[(r21+135)];
+ f11 = f11+f12;
+ f8 = f8*f10;
+ f3 = f6+f3;
+ f6 = f13*f9;
+ f3 = f3+f6;
+ f6 = f11*f15;
+ heapFloat[(r17+12)] = f8;
+ f3 = f3*f14;
+ heapFloat[(r17+13)] = f6;
+ heapFloat[(r17+14)] = f3;
+ heap32[(r17+15)] = 0;
+}
+ if(r16 ==0) //_LBB612_143
+{
+ heap32[(r17+16)] = 0;
+ heap32[(r17+17)] = 0;
+ f10 = 0;
+ heap32[(r17+18)] = 0;
+ heap32[(r17+19)] = 0;
+ f11 = f10;
+ f9 = f10;
+}
+else{
+ f9 = heapFloat[(r24+18)];
+ f10 = heapFloat[(r23+17)];
+ f11 = heapFloat[(r22+19)];
+ f12 = f5*f11;
+ f13 = f1*f9;
+ r21 = r16 >> 2;
+ f12 = f12-f13;
+ f13 = f1*f10;
+ f11 = f7*f11;
+ f12 = -f12;
+ f14 = heapFloat[(r21+64)];
+ f11 = f13-f11;
+ f13 = heapFloat[(r21+65)];
+ f9 = f7*f9;
+ f10 = f5*f10;
+ f15 = heapFloat[(r21+68)];
+ f16 = heapFloat[(r21+69)];
+ f14 = f14*f12;
+ f13 = f13*f11;
+ f9 = f9-f10;
+ f10 = heapFloat[(r21+66)];
+ f17 = heapFloat[(r21+72)];
+ f18 = heapFloat[(r21+73)];
+ f19 = heapFloat[(r21+70)];
+ f15 = f15*f12;
+ f16 = f16*f11;
+ f13 = f14-f13;
+ f10 = f10*f9;
+ f14 = heapFloat[(r21+74)];
+ f12 = f17*f12;
+ f11 = f18*f11;
+ f15 = f15-f16;
+ f16 = f19*f9;
+ f10 = f13-f10;
+ f13 = heapFloat[(r21+134)];
+ f17 = heapFloat[(r21+136)];
+ f18 = heapFloat[(r21+135)];
+ f15 = f15-f16;
+ f10 = f10*f13;
+ f11 = f12-f11;
+ f9 = f14*f9;
+ f9 = f11-f9;
+ f11 = f15*f18;
+ heapFloat[(r17+16)] = f10;
+ f9 = f9*f17;
+ heapFloat[(r17+17)] = f11;
+ heapFloat[(r17+18)] = f9;
+ heap32[(r17+19)] = 0;
+}
+ if(r20 !=0) //_LBB612_146
+{
+ f12 = f6*f0;
+ f13 = f3*f2;
+ f3 = f3*f4;
+ f14 = f8*f0;
+ f15 = heapFloat[(r23+17)];
+ f12 = f12-f13;
+ f13 = heapFloat[(r24+18)];
+ f3 = f3-f14;
+ f8 = f8*f2;
+ f6 = f6*f4;
+ f12 = f15*f12;
+ f3 = f13*f3;
+ f13 = heapFloat[(r22+19)];
+ f6 = f8-f6;
+ r21 = r20 >> 2;
+ f3 = f12+f3;
+ f6 = f13*f6;
+ f8 = heapFloat[(r21+84)];
+ f3 = f3+f6;
+ f3 = f8+f3;
+}
+else{
+ f3 = 0;
+}
+ if(r16 !=0) //_LBB612_149
+{
+ f6 = f5*f9;
+ f8 = f1*f11;
+ f12 = f1*f10;
+ f9 = f7*f9;
+ f13 = heapFloat[(r23+17)];
+ f6 = f6-f8;
+ f8 = heapFloat[(r24+18)];
+ f9 = f12-f9;
+ f11 = f7*f11;
+ f10 = f5*f10;
+ f6 = f13*f6;
+ f9 = f8*f9;
+ f8 = heapFloat[(r22+19)];
+ f10 = f11-f10;
+ r21 = r16 >> 2;
+ f9 = f6+f9;
+ f6 = f8*f10;
+ f8 = heapFloat[(r21+84)];
+ f9 = f9+f6;
+ f9 = f8+f9;
+}
+else{
+ f9 = 0;
+}
+ f6 = 1;
+ f3 = f3+f9;
+ f3 = f6/f3;
+ heapFloat[(r17+23)] = f3;
+ f3 = heapFloat[(r23+17)];
+ heapFloat[(r17+4)] = f3;
+ f8 = heapFloat[(r24+18)];
+ heapFloat[(r17+5)] = f8;
+ f9 = heapFloat[(r22+19)];
+ heapFloat[(r17+6)] = f9;
+ heap32[(r17+7)] = heap32[(r9+20)];
+ f10 = heapFloat[(r22+19)];
+ f11 = heapFloat[(r24+18)];
+ f12 = heapFloat[(r23+17)];
+ f13 = f2*f10;
+ f14 = f0*f11;
+ f15 = f0*f12;
+ f10 = f4*f10;
+ f13 = f13-f14;
+ f11 = f4*f11;
+ f12 = f2*f12;
+ f10 = f15-f10;
+ heapFloat[(r17)] = f13;
+ f11 = f11-f12;
+ heapFloat[(r17+1)] = f10;
+ heapFloat[(r17+2)] = f11;
+ heap32[(r17+3)] = 0;
+ f10 = heapFloat[(r24+18)];
+ f11 = heapFloat[(r22+19)];
+ f12 = heapFloat[(r23+17)];
+ f13 = f1*f10;
+ f14 = f5*f11;
+ f11 = f7*f11;
+ f15 = f1*f12;
+ f13 = f13-f14;
+ f12 = f5*f12;
+ f10 = f7*f10;
+ f11 = f11-f15;
+ heapFloat[(r17+8)] = f13;
+ f10 = f12-f10;
+ heapFloat[(r17+9)] = f11;
+ heapFloat[(r17+10)] = f10;
+ heap32[(r17+11)] = 0;
+ if(r20 !=0) //_LBB612_152
+{
+ r21 = r20 >> 2;
+ f10 = heapFloat[(r21+81)];
+ f11 = heapFloat[(r21+80)];
+ f12 = heapFloat[(r21+82)];
+ f13 = f11*f2;
+ f14 = f10*f4;
+ f4 = f12*f4;
+ f11 = f11*f0;
+ f0 = f10*f0;
+ f2 = f12*f2;
+ f10 = heapFloat[(r21+78)];
+ f12 = f13-f14;
+ f13 = heapFloat[(r21+77)];
+ f11 = f4-f11;
+ f14 = heapFloat[(r21+76)];
+ f0 = f0-f2;
+ f4 = f10+f12;
+ f2 = f13+f11;
+ f0 = f14+f0;
+}
+else{
+ f0 = 0;
+ f2 = f0;
+ f4 = f0;
+}
+ if(r16 !=0) //_LBB612_155
+{
+ r21 = r16 >> 2;
+ f10 = heapFloat[(r21+81)];
+ f11 = heapFloat[(r21+80)];
+ f12 = heapFloat[(r21+82)];
+ f13 = f11*f5;
+ f14 = f10*f7;
+ f7 = f12*f7;
+ f11 = f11*f1;
+ f1 = f10*f1;
+ f5 = f12*f5;
+ f10 = heapFloat[(r21+78)];
+ f12 = f13-f14;
+ f13 = heapFloat[(r21+77)];
+ f11 = f7-f11;
+ f14 = heapFloat[(r21+76)];
+ f1 = f1-f5;
+ f7 = f10+f12;
+ f5 = f13+f11;
+ f1 = f14+f1;
+}
+else{
+ f1 = 0;
+ f5 = f1;
+ f7 = f1;
+}
+ f0 = f0-f1;
+ f1 = f2-f5;
+ f2 = heapFloat[(r23+17)];
+ f5 = heapFloat[(r24+18)];
+ f4 = f4-f7;
+ f7 = heapFloat[(r22+19)];
+ f2 = f2*f0;
+ f5 = f5*f1;
+ f2 = f2+f5;
+ f5 = f7*f4;
+ f7 = heapFloat[(r9+21)];
+ f10 = heapFloat[(r6+13)];
+ f2 = f2+f5;
+ f5 = f7+f10;
+ heap32[(r17+22)] = heap32[(r9+22)];
+ r21 = heap32[(r9+37)];
+ r25 = heap32[(r6+16)];
+ if(r21 >r25) //_LBB612_159
+{
+__label__ = 151;
+}
+else{
+ f7 = heapFloat[(r9+23)];
+ f10 = -f2;
+ f7 = f7*f10;
+ f10 = 0;
+ if(f7 <=f10) //_LBB612_159
+{
+__label__ = 151;
+}
+else{
+__label__ = 152;
+}
+}
+if (__label__ == 151){
+ f7 = 0;
+}
+ r21 = heapU8[r5+60];
+ r21 = r21 & 4;
+ if(r21 ==0) //_LBB612_167
+{
+ heap32[(r17+21)] = 0;
+}
+else{
+ f10 = heapFloat[(r9+29)];
+ f11 = heapFloat[(r6+14)];
+ f10 = f10*f11;
+ heapFloat[(r17+21)] = f10;
+if(!(r20 ==0)) //_LBB612_164
+{
+ r21 = r20 >> 2;
+ f11 = heapFloat[(r21+84)];
+ f12 = 0;
+if(!(f11 ==f12)) //_LBB612_164
+{
+ f3 = f3*f11;
+ f12 = heapFloat[(r21+85)];
+ f3 = f3*f12;
+ f3 = f3*f10;
+ f12 = heapFloat[(r21+126)];
+ f13 = heapFloat[(r21+86)];
+ f14 = heapFloat[(r21+87)];
+ f8 = f8*f11;
+ f3 = f12+f3;
+ f8 = f8*f13;
+ heapFloat[(r21+126)] = f3;
+ f3 = f8*f10;
+ f8 = heapFloat[(r21+127)];
+ f9 = f9*f11;
+ f3 = f8+f3;
+ f8 = f9*f14;
+ heapFloat[(r21+127)] = f3;
+ f3 = f8*f10;
+ f8 = heapFloat[(r21+128)];
+ f3 = f8+f3;
+ heapFloat[(r21+128)] = f3;
+ f3 = heapFloat[(r21+134)];
+ f3 = f3*f10;
+ f8 = heapFloat[(r17+12)];
+ f9 = heapFloat[(r21+136)];
+ f11 = heapFloat[(r21+135)];
+ f3 = f8*f3;
+ f8 = heapFloat[(r21+130)];
+ f12 = heapFloat[(r17+14)];
+ f13 = heapFloat[(r17+13)];
+ f3 = f8+f3;
+ f8 = f11*f10;
+ heapFloat[(r21+130)] = f3;
+ f3 = f13*f8;
+ f8 = heapFloat[(r21+131)];
+ f3 = f8+f3;
+ f8 = f9*f10;
+ heapFloat[(r21+131)] = f3;
+ f3 = f12*f8;
+ f8 = heapFloat[(r21+132)];
+ f3 = f8+f3;
+ heapFloat[(r21+132)] = f3;
+}
+}
+if(!(r16 ==0)) //_LBB612_168
+{
+ r21 = r16 >> 2;
+ f3 = heapFloat[(r21+84)];
+ f8 = 0;
+if(!(f3 ==f8)) //_LBB612_168
+{
+ f8 = heapFloat[(r17+21)];
+ f8 = -f8;
+ f9 = heapFloat[(r17+4)];
+ f9 = f9*f3;
+ f10 = heapFloat[(r21+85)];
+ f9 = f9*f10;
+ f10 = heapFloat[(r17+5)];
+ f11 = heapFloat[(r17+6)];
+ f9 = f9*f8;
+ f12 = heapFloat[(r21+126)];
+ f13 = heapFloat[(r21+86)];
+ f14 = heapFloat[(r21+87)];
+ f15 = heapFloat[(r17+16)];
+ f16 = heapFloat[(r17+17)];
+ f17 = heapFloat[(r17+18)];
+ f10 = f10*f3;
+ f9 = f12+f9;
+ f10 = f10*f13;
+ heapFloat[(r21+126)] = f9;
+ f9 = f10*f8;
+ f10 = heapFloat[(r21+127)];
+ f3 = f11*f3;
+ f9 = f10+f9;
+ f3 = f3*f14;
+ heapFloat[(r21+127)] = f9;
+ f3 = f3*f8;
+ f9 = heapFloat[(r21+128)];
+ f3 = f9+f3;
+ heapFloat[(r21+128)] = f3;
+ f3 = heapFloat[(r21+134)];
+ f3 = f3*f8;
+ f9 = heapFloat[(r21+136)];
+ f10 = heapFloat[(r21+135)];
+ f11 = heapFloat[(r21+130)];
+ f3 = f3*f15;
+ f3 = f11-f3;
+ f10 = f10*f8;
+ heapFloat[(r21+130)] = f3;
+ f3 = f10*f16;
+ f10 = heapFloat[(r21+131)];
+ f3 = f10-f3;
+ f8 = f9*f8;
+ heapFloat[(r21+131)] = f3;
+ f3 = f8*f17;
+ f8 = heapFloat[(r21+132)];
+ f3 = f8-f3;
+ heapFloat[(r21+132)] = f3;
+}
+}
+}
+ heap32[(r17+20)] = 0;
+ if(r20 !=0) //_LBB612_170
+{
+ r21 = r20 >> 2;
+ f9 = heapFloat[(r21+76)];
+ f8 = heapFloat[(r21+77)];
+ f3 = heapFloat[(r21+78)];
+}
+else{
+ f3 = 0;
+ f8 = f3;
+ f9 = f3;
+}
+ f10 = heapFloat[(r17+4)];
+ f11 = heapFloat[(r17+5)];
+ f12 = heapFloat[(r17+6)];
+ f9 = f10*f9;
+ f8 = f11*f8;
+ f8 = f9+f8;
+ f3 = f12*f3;
+ f3 = f8+f3;
+ if(r20 !=0) //_LBB612_173
+{
+ r20 = r20 >> 2;
+ f13 = heapFloat[(r20+80)];
+ f9 = heapFloat[(r20+81)];
+ f8 = heapFloat[(r20+82)];
+}
+else{
+ f8 = 0;
+ f9 = f8;
+ f13 = f8;
+}
+ f14 = heapFloat[(r17)];
+ f15 = heapFloat[(r17+1)];
+ f13 = f14*f13;
+ f9 = f15*f9;
+ f14 = heapFloat[(r17+2)];
+ f9 = f13+f9;
+ f8 = f14*f8;
+ f8 = f9+f8;
+ f3 = f3+f8;
+ if(r16 !=0) //_LBB612_176
+{
+ r20 = r16 >> 2;
+ f13 = heapFloat[(r20+80)];
+ f9 = heapFloat[(r20+81)];
+ f8 = heapFloat[(r20+82)];
+}
+else{
+ f8 = 0;
+ f9 = f8;
+ f13 = f8;
+}
+ f14 = heapFloat[(r17+8)];
+ f15 = heapFloat[(r17+9)];
+ f13 = f14*f13;
+ f9 = f15*f9;
+ f14 = heapFloat[(r17+10)];
+ f9 = f13+f9;
+ f8 = f14*f8;
+ f8 = f9+f8;
+ if(r16 !=0) //_LBB612_179
+{
+ r16 = r16 >> 2;
+ f14 = heapFloat[(r16+76)];
+ f13 = heapFloat[(r16+77)];
+ f9 = heapFloat[(r16+78)];
+}
+else{
+ f9 = 0;
+ f13 = f9;
+ f14 = f9;
+}
+ f10 = f10*f14;
+ f11 = f11*f13;
+ f10 = f10+f11;
+ f9 = f12*f9;
+ f9 = f10+f9;
+ f10 = heapFloat[(r6+8)];
+ f11 = -f5;
+ f8 = f8-f9;
+ f9 = f10*f11;
+ f10 = heapFloat[(r6+3)];
+ f3 = f3+f8;
+ f8 = f9/f10;
+ f9 = heapFloat[(r17+23)];
+ f3 = f7-f3;
+ f7 = f9*f8;
+ f3 = f9*f3;
+ r16 = heap32[(r6+11)];
+ if(r16 ==0) //_LBB612_182
+{
+__label__ = 174;
+}
+else{
+ f8 = heapFloat[(r6+12)];
+ if(f8 >=f5) //_LBB612_183
+{
+ heapFloat[(r17+29)] = f3;
+ heapFloat[(r17+33)] = f7;
+__label__ = 176;
+}
+else{
+__label__ = 174;
+}
+}
+if (__label__ == 174){
+ f3 = f7+f3;
+ heapFloat[(r17+29)] = f3;
+ heap32[(r17+33)] = 0;
+}
+ heap32[(r17+30)] = 0;
+ heap32[(r17+31)] = 0;
+ heap32[(r17+32)] = 1343554297;
+ r16 = heap32[(r2+12)];
+ heap32[(r17+25)] = r16;
+ r16 = heapU8[r5+60];
+ r16 = r16 & 32;
+ if(r16 ==0) //_LBB612_186
+{
+__label__ = 178;
+}
+else{
+ r16 = heapU8[r8+120];
+ if(r16 !=0) //_LBB612_200
+{
+ r16 = r8 >> 2;
+ f0 = heapFloat[(r9+35)];
+ f1 = heapFloat[(r16+33)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r12;
+ heap32[(g0+2)] = r14;
+ heap32[(g0+3)] = r10;
+ heap32[(g0+4)] = r19;
+ heap32[(g0+5)] = r18;
+ heap32[(g0+6)] = r3;
+ heap32[(g0+7)] = r1;
+ heap32[(g0+8)] = 1065353216;
+ heapFloat[(g0+9)] = f1;
+ heapFloat[(g0+10)] = f0;
+ _ZN35btSequentialImpulseConstraintSolver21addFrictionConstraintERK9btVector3P11btRigidBodyS4_iR15btManifoldPointS2_S2_P17btCollisionObjectS8_fff(i7);
+ r12 = heapU8[r5+60];
+ r12 = r12 & 16;
+ if(r12 ==0) //_LBB612_202
+{
+__label__ = 194;
+}
+else{
+ r12 = r8 >> 2;
+ r8 = r8 >> 2;
+ f0 = heapFloat[(r12+36)];
+ f1 = heapFloat[(r8+34)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r11;
+ heap32[(g0+2)] = r14;
+ heap32[(g0+3)] = r10;
+ heap32[(g0+4)] = r19;
+ heap32[(g0+5)] = r18;
+ heap32[(g0+6)] = r3;
+ heap32[(g0+7)] = r1;
+ heap32[(g0+8)] = 1065353216;
+ heapFloat[(g0+9)] = f1;
+ heapFloat[(g0+10)] = f0;
+ _ZN35btSequentialImpulseConstraintSolver21addFrictionConstraintERK9btVector3P11btRigidBodyS4_iR15btManifoldPointS2_S2_P17btCollisionObjectS8_fff(i7);
+__label__ = 194;
+}
+}
+else{
+__label__ = 178;
+}
+}
+_259: do {
+if (__label__ == 178){
+ f3 = heapFloat[(r23+17)];
+ f5 = heapFloat[(r22+19)];
+ f7 = heapFloat[(r24+18)];
+ f8 = f3*f2;
+ f0 = f0-f8;
+ f8 = f7*f2;
+ r16 = r8 >> 2;
+ f1 = f1-f8;
+ f2 = f5*f2;
+ r20 = r8 >> 2;
+ heapFloat[(r16+38)] = f0;
+ f2 = f4-f2;
+ r21 = r8 >> 2;
+ heapFloat[(r20+39)] = f1;
+ r25 = r8 >> 2;
+ heapFloat[(r21+40)] = f2;
+ heap32[(r25+41)] = 0;
+ r25 = heapU8[r5+60];
+ r25 = r25 & 64;
+if(!(r25 !=0)) //_LBB612_191
+{
+ f0 = f0*f0;
+ f1 = f1*f1;
+ f0 = f0+f1;
+ f1 = f2*f2;
+ f0 = f0+f1;
+ f1 = 1.1920928955078125e-007;
+if(!(f0 <=f1)) //_LBB612_191
+{
+ heapFloat[(g0)] = f0;
+ sqrtf(i7);
+ f3 = f6/f_g0;
+ f5 = heapFloat[(r16+38)];
+ f5 = f5*f3;
+ heapFloat[(r16+38)] = f5;
+ f7 = heapFloat[(r20+39)];
+ f7 = f7*f3;
+ heapFloat[(r20+39)] = f7;
+ f0 = heapFloat[(r21+40)];
+ f3 = f0*f3;
+ heapFloat[(r21+40)] = f3;
+ r16 = heapU8[r5+60];
+ r16 = r16 & 16;
+if(!(r16 ==0)) //_LBB612_190
+{
+ f0 = heapFloat[(r22+19)];
+ f1 = heapFloat[(r24+18)];
+ f2 = heapFloat[(r23+17)];
+ f4 = f7*f0;
+ f8 = f3*f1;
+ f4 = f4-f8;
+ f3 = f3*f2;
+ f0 = f5*f0;
+ r16 = r8 >> 2;
+ f3 = f3-f0;
+ f5 = f5*f1;
+ f7 = f7*f2;
+ r20 = r8 >> 2;
+ heapFloat[(r16+42)] = f4;
+ f5 = f5-f7;
+ r21 = r8 >> 2;
+ heapFloat[(r20+43)] = f3;
+ f7 = f4*f4;
+ f3 = f3*f3;
+ r22 = r8 >> 2;
+ heapFloat[(r21+44)] = f5;
+ heap32[(r22+45)] = 0;
+ f3 = f7+f3;
+ f5 = f5*f5;
+ f3 = f3+f5;
+ heapFloat[(g0)] = f3;
+ sqrtf(i7);
+ f3 = f6/f_g0;
+ f5 = heapFloat[(r16+42)];
+ f5 = f5*f3;
+ heapFloat[(r16+42)] = f5;
+ f5 = heapFloat[(r20+43)];
+ f5 = f5*f3;
+ heapFloat[(r20+43)] = f5;
+ f5 = heapFloat[(r21+44)];
+ f3 = f5*f3;
+ heapFloat[(r21+44)] = f3;
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r11;
+ _Z24applyAnisotropicFrictionP17btCollisionObjectR9btVector3(i7);
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r11;
+ _Z24applyAnisotropicFrictionP17btCollisionObjectR9btVector3(i7);
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r11;
+ heap32[(g0+2)] = r14;
+ heap32[(g0+3)] = r10;
+ heap32[(g0+4)] = r19;
+ heap32[(g0+5)] = r18;
+ heap32[(g0+6)] = r3;
+ heap32[(g0+7)] = r1;
+ heap32[(g0+8)] = 1065353216;
+ heap32[(g0+9)] = 0;
+ heap32[(g0+10)] = 0;
+ _ZN35btSequentialImpulseConstraintSolver21addFrictionConstraintERK9btVector3P11btRigidBodyS4_iR15btManifoldPointS2_S2_P17btCollisionObjectS8_fff(i7);
+}
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r12;
+ _Z24applyAnisotropicFrictionP17btCollisionObjectR9btVector3(i7);
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r12;
+ _Z24applyAnisotropicFrictionP17btCollisionObjectR9btVector3(i7);
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r12;
+ heap32[(g0+2)] = r14;
+ heap32[(g0+3)] = r10;
+ heap32[(g0+4)] = r19;
+ heap32[(g0+5)] = r18;
+ heap32[(g0+6)] = r3;
+ heap32[(g0+7)] = r1;
+ heap32[(g0+8)] = 1065353216;
+ heap32[(g0+9)] = 0;
+ heap32[(g0+10)] = 0;
+ r10 = 1;
+ _ZN35btSequentialImpulseConstraintSolver21addFrictionConstraintERK9btVector3P11btRigidBodyS4_iR15btManifoldPointS2_S2_P17btCollisionObjectS8_fff(i7);
+ heap8[r8+120] = r10;
+break _259;
+}
+}
+ f0 = 0;
+ if(f5 <f0) //_LBB612_193
+{
+ f0 = -f5;
+}
+else{
+ f0 = f5;
+}
+ f1 = 0.70710676908493042;
+ if(f0 <=f1) //_LBB612_196
+{
+ f3 = f3*f3;
+ f0 = f7*f7;
+ f3 = f3+f0;
+ heapFloat[(g0)] = f3;
+ sqrtf(i7);
+ f1 = heapFloat[(r24+18)];
+ f0 = f6/f_g0;
+ f1 = -f1;
+ f1 = f0*f1;
+ heapFloat[(r16+38)] = f1;
+ f2 = heapFloat[(r23+17)];
+ f2 = f2*f0;
+ heapFloat[(r20+39)] = f2;
+ heap32[(r21+40)] = 0;
+ f4 = heapFloat[(r22+19)];
+ f5 = -f4;
+ r16 = r8 >> 2;
+ f2 = f2*f5;
+ f3 = f3*f0;
+ r20 = r8 >> 2;
+ f0 = f4*f1;
+ heapFloat[(r16+42)] = f2;
+ heapFloat[(r20+43)] = f0;
+}
+else{
+ f3 = f7*f7;
+ f7 = f5*f5;
+ f3 = f3+f7;
+ heapFloat[(g0)] = f3;
+ sqrtf(i7);
+ heap32[(r16+38)] = 0;
+ f0 = heapFloat[(r22+19)];
+ f6 = f6/f_g0;
+ f7 = -f0;
+ f7 = f6*f7;
+ heapFloat[(r20+39)] = f7;
+ f0 = heapFloat[(r24+18)];
+ f0 = f0*f6;
+ r16 = r8 >> 2;
+ f3 = f3*f6;
+ heapFloat[(r21+40)] = f0;
+ heapFloat[(r16+42)] = f3;
+ f3 = heapFloat[(r23+17)];
+ f6 = -f3;
+ f3 = f3*f7;
+ r16 = r8 >> 2;
+ f6 = f0*f6;
+ heapFloat[(r16+43)] = f6;
+}
+ r16 = r8 >> 2;
+ heapFloat[(r16+44)] = f3;
+ r16 = heapU8[r5+60];
+ r16 = r16 & 16;
+if(!(r16 ==0)) //_LBB612_199
+{
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r11;
+ _Z24applyAnisotropicFrictionP17btCollisionObjectR9btVector3(i7);
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r11;
+ _Z24applyAnisotropicFrictionP17btCollisionObjectR9btVector3(i7);
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r11;
+ heap32[(g0+2)] = r14;
+ heap32[(g0+3)] = r10;
+ heap32[(g0+4)] = r19;
+ heap32[(g0+5)] = r18;
+ heap32[(g0+6)] = r3;
+ heap32[(g0+7)] = r1;
+ heap32[(g0+8)] = 1065353216;
+ heap32[(g0+9)] = 0;
+ heap32[(g0+10)] = 0;
+ _ZN35btSequentialImpulseConstraintSolver21addFrictionConstraintERK9btVector3P11btRigidBodyS4_iR15btManifoldPointS2_S2_P17btCollisionObjectS8_fff(i7);
+}
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r12;
+ _Z24applyAnisotropicFrictionP17btCollisionObjectR9btVector3(i7);
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r12;
+ _Z24applyAnisotropicFrictionP17btCollisionObjectR9btVector3(i7);
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r12;
+ heap32[(g0+2)] = r14;
+ heap32[(g0+3)] = r10;
+ heap32[(g0+4)] = r19;
+ heap32[(g0+5)] = r18;
+ heap32[(g0+6)] = r3;
+ heap32[(g0+7)] = r1;
+ heap32[(g0+8)] = 1065353216;
+ heap32[(g0+9)] = 0;
+ heap32[(g0+10)] = 0;
+ r10 = 1;
+ _ZN35btSequentialImpulseConstraintSolver21addFrictionConstraintERK9btVector3P11btRigidBodyS4_iR15btManifoldPointS2_S2_P17btCollisionObjectS8_fff(i7);
+ heap8[r8+120] = r10;
+}
+} while(0);
+ r8 = heap32[(r6+15)];
+ r10 = heap32[(r17+25)];
+ r11 = heap32[(r2+14)];
+ r12 = r8 & 8;
+ if(r12 ==0) //_LBB612_220
+{
+ r8 = (r10 * 136)|0;
+ r8 = (r11 + r8)|0;
+ r8 = r8 >> 2;
+ heap32[(r8+21)] = 0;
+ r8 = heapU8[r5+60];
+ r8 = r8 & 16;
+ if(r8 ==0) //_LBB612_222
+{
+break _153;
+}
+else{
+ r8 = heap32[(r17+25)];
+ r9 = heap32[(r2+14)];
+ r8 = (r8 * 136)|0;
+ r8 = (r8 + r9)|0;
+ r8 = r8 >> 2;
+ heap32[(r8+55)] = 0;
+}
+}
+else{
+ r8 = r8 & 4;
+ if(r8 ==0) //_LBB612_210
+{
+ r10 = (r10 * 136)|0;
+ r10 = (r11 + r10)|0;
+ r10 = r10 >> 2;
+ heap32[(r10+21)] = 0;
+}
+else{
+ r10 = (r10 * 136)|0;
+ r10 = (r11 + r10)|0;
+ f0 = heapFloat[(r9+31)];
+ f1 = heapFloat[(r6+14)];
+ f0 = f0*f1;
+ r10 = r10 >> 2;
+ heapFloat[(r10+21)] = f0;
+if(!(r13 ==0)) //_LBB612_207
+{
+ r11 = r13 >> 2;
+ f1 = heapFloat[(r11+84)];
+ f2 = 0;
+if(!(f1 ==f2)) //_LBB612_207
+{
+ f2 = heapFloat[(r10+4)];
+ f2 = f2*f1;
+ f3 = heapFloat[(r11+85)];
+ f2 = f2*f3;
+ f3 = heapFloat[(r10+5)];
+ f4 = heapFloat[(r10+6)];
+ f2 = f2*f0;
+ f5 = heapFloat[(r11+126)];
+ f6 = heapFloat[(r11+86)];
+ f7 = heapFloat[(r11+87)];
+ f3 = f3*f1;
+ f2 = f5+f2;
+ f3 = f3*f6;
+ heapFloat[(r11+126)] = f2;
+ f2 = f3*f0;
+ f3 = heapFloat[(r11+127)];
+ f1 = f4*f1;
+ f2 = f3+f2;
+ f1 = f1*f7;
+ heapFloat[(r11+127)] = f2;
+ f1 = f1*f0;
+ f2 = heapFloat[(r11+128)];
+ f1 = f2+f1;
+ heapFloat[(r11+128)] = f1;
+ f1 = heapFloat[(r11+134)];
+ f1 = f1*f0;
+ f2 = heapFloat[(r10+12)];
+ f3 = heapFloat[(r11+136)];
+ f4 = heapFloat[(r11+135)];
+ f1 = f2*f1;
+ f2 = heapFloat[(r11+130)];
+ f5 = heapFloat[(r10+14)];
+ f6 = heapFloat[(r10+13)];
+ f1 = f2+f1;
+ f2 = f4*f0;
+ heapFloat[(r11+130)] = f1;
+ f1 = f6*f2;
+ f2 = heapFloat[(r11+131)];
+ f1 = f2+f1;
+ f0 = f3*f0;
+ heapFloat[(r11+131)] = f1;
+ f0 = f5*f0;
+ f1 = heapFloat[(r11+132)];
+ f0 = f1+f0;
+ heapFloat[(r11+132)] = f0;
+}
+}
+if(!(r15 ==0)) //_LBB612_211
+{
+ r11 = r15 >> 2;
+ f0 = heapFloat[(r11+84)];
+ f1 = 0;
+if(!(f0 ==f1)) //_LBB612_211
+{
+ f1 = heapFloat[(r10+21)];
+ f1 = -f1;
+ f2 = heapFloat[(r10+4)];
+ f2 = f2*f0;
+ f3 = heapFloat[(r11+85)];
+ f2 = f2*f3;
+ f3 = heapFloat[(r10+5)];
+ f4 = heapFloat[(r10+6)];
+ f2 = f2*f1;
+ f5 = heapFloat[(r11+126)];
+ f6 = heapFloat[(r11+86)];
+ f7 = heapFloat[(r11+87)];
+ f8 = heapFloat[(r10+16)];
+ f9 = heapFloat[(r10+17)];
+ f10 = heapFloat[(r10+18)];
+ f3 = f3*f0;
+ f2 = f5+f2;
+ f3 = f3*f6;
+ heapFloat[(r11+126)] = f2;
+ f2 = f3*f1;
+ f3 = heapFloat[(r11+127)];
+ f0 = f4*f0;
+ f2 = f3+f2;
+ f0 = f0*f7;
+ heapFloat[(r11+127)] = f2;
+ f0 = f0*f1;
+ f2 = heapFloat[(r11+128)];
+ f0 = f2+f0;
+ heapFloat[(r11+128)] = f0;
+ f0 = heapFloat[(r11+134)];
+ f0 = f0*f1;
+ f2 = heapFloat[(r11+136)];
+ f3 = heapFloat[(r11+135)];
+ f4 = heapFloat[(r11+130)];
+ f0 = f0*f8;
+ f0 = f4-f0;
+ f3 = f3*f1;
+ heapFloat[(r11+130)] = f0;
+ f0 = f3*f9;
+ f3 = heapFloat[(r11+131)];
+ f0 = f3-f0;
+ f1 = f2*f1;
+ heapFloat[(r11+131)] = f0;
+ f0 = f1*f10;
+ f1 = heapFloat[(r11+132)];
+ f0 = f1-f0;
+ heapFloat[(r11+132)] = f0;
+}
+}
+}
+ r10 = heap32[(r6+15)];
+ r11 = r10 & 16;
+if(!(r11 ==0)) //_LBB612_222
+{
+ r11 = heap32[(r17+25)];
+ r17 = heap32[(r2+14)];
+ r10 = r10 & 4;
+ if(r10 ==0) //_LBB612_219
+{
+ r10 = (r11 * 136)|0;
+ r10 = (r17 + r10)|0;
+ r10 = r10 >> 2;
+ heap32[(r10+55)] = 0;
+}
+else{
+ r11 = (r11 * 136)|0;
+ r11 = (r17 + r11)|0;
+ f0 = heapFloat[(r9+32)];
+ f1 = heapFloat[(r6+14)];
+ f0 = f0*f1;
+ r11 = r11 >> 2;
+ heapFloat[(r11+55)] = f0;
+if(!(r13 ==0)) //_LBB612_216
+{
+ r17 = r13 >> 2;
+ f1 = heapFloat[(r17+84)];
+ f2 = 0;
+if(!(f1 ==f2)) //_LBB612_216
+{
+ f2 = heapFloat[(r11+38)];
+ f2 = f2*f1;
+ f3 = heapFloat[(r11+39)];
+ f4 = heapFloat[(r11+40)];
+ f5 = heapFloat[(r17+126)];
+ f2 = f2*f0;
+ f2 = f5+f2;
+ f3 = f3*f1;
+ heapFloat[(r17+126)] = f2;
+ f2 = f3*f0;
+ f3 = heapFloat[(r17+127)];
+ f2 = f3+f2;
+ f1 = f4*f1;
+ heapFloat[(r17+127)] = f2;
+ f1 = f1*f0;
+ f2 = heapFloat[(r17+128)];
+ f1 = f2+f1;
+ heapFloat[(r17+128)] = f1;
+ f1 = heapFloat[(r17+134)];
+ f1 = f1*f0;
+ f2 = heapFloat[(r11+46)];
+ f3 = heapFloat[(r17+136)];
+ f4 = heapFloat[(r17+135)];
+ f1 = f2*f1;
+ f2 = heapFloat[(r17+130)];
+ f5 = heapFloat[(r11+48)];
+ f6 = heapFloat[(r11+47)];
+ f1 = f2+f1;
+ f2 = f4*f0;
+ heapFloat[(r17+130)] = f1;
+ f1 = f6*f2;
+ f2 = heapFloat[(r17+131)];
+ f1 = f2+f1;
+ f0 = f3*f0;
+ heapFloat[(r17+131)] = f1;
+ f0 = f5*f0;
+ f1 = heapFloat[(r17+132)];
+ f0 = f1+f0;
+ heapFloat[(r17+132)] = f0;
+}
+}
+if(!(r15 ==0)) //_LBB612_222
+{
+ r17 = r15 >> 2;
+ f0 = heapFloat[(r17+84)];
+ f1 = 0;
+if(!(f0 ==f1)) //_LBB612_222
+{
+ f1 = heapFloat[(r11+55)];
+ f1 = -f1;
+ f2 = heapFloat[(r11+38)];
+ f2 = f2*f0;
+ f3 = heapFloat[(r11+39)];
+ f4 = heapFloat[(r11+40)];
+ f2 = f2*f1;
+ f5 = heapFloat[(r17+126)];
+ f6 = heapFloat[(r11+50)];
+ f7 = heapFloat[(r11+51)];
+ f8 = heapFloat[(r11+52)];
+ f2 = f5+f2;
+ f3 = f3*f0;
+ heapFloat[(r17+126)] = f2;
+ f2 = f3*f1;
+ f3 = heapFloat[(r17+127)];
+ f2 = f3+f2;
+ f0 = f4*f0;
+ heapFloat[(r17+127)] = f2;
+ f0 = f0*f1;
+ f2 = heapFloat[(r17+128)];
+ f0 = f2+f0;
+ heapFloat[(r17+128)] = f0;
+ f0 = heapFloat[(r17+134)];
+ f0 = f0*f1;
+ f2 = heapFloat[(r17+136)];
+ f3 = heapFloat[(r17+135)];
+ f4 = heapFloat[(r17+130)];
+ f0 = f0*f6;
+ f0 = f4-f0;
+ f3 = f3*f1;
+ heapFloat[(r17+130)] = f0;
+ f0 = f3*f7;
+ f3 = heapFloat[(r17+131)];
+ f0 = f3-f0;
+ f1 = f2*f1;
+ heapFloat[(r17+131)] = f0;
+ f0 = f1*f8;
+ f1 = heapFloat[(r17+132)];
+ f0 = f1-f0;
+ heapFloat[(r17+132)] = f0;
+}
+}
+}
+}
+}
+}
+} while(0);
+ r7 = (r7 + 1)|0;
+ r4 = (r4 + 276)|0;
+}
+else{
+break _150;
+}
+}
+}
+ r1 = heap32[(fp+-133)];
+ r1 = (r1 + -1)|0;
+ heap32[(fp+-133)] = r1;
+ r3 = heap32[(fp+-132)];
+ r3 = (r3 + 4)|0;
+ heap32[(fp+-132)] = r3;
+if(!(r1 !=0)) //_LBB612_97
+{
+break _132;
+}
+}
+}
+} while(0);
+ r1 = heap32[(r2+17)];
+ r3 = heap32[(r2+2)];
+ r4 = heap32[(r2+12)];
+_307: do {
+if(!(r1 >r3)) //_LBB612_244
+{
+if(!(r1 >=r3)) //_LBB612_244
+{
+ r5 = heap32[(r2+18)];
+if(!(r5 >=r3)) //_LBB612_243
+{
+ if(r3 !=0) //_LBB612_230
+{
+ r5 = gNumAlignedAllocs;
+ r5 = r5 >> 2;
+ r6 = heap32[(r5)];
+ r7 = r3 << 2;
+ r6 = (r6 + 1)|0;
+ r7 = r7 | 3;
+ heap32[(r5)] = r6;
+ r5 = (r7 + 16)|0;
+ heap32[(g0)] = r5;
+ malloc(i7);
+ r5 = r_g0;
+ if(r5 !=0) //_LBB612_232
+{
+ r6 = 0;
+ r7 = (r5 + 4)|0;
+ r6 = (r6 - r7)|0;
+ r6 = r6 & 15;
+ r6 = (r5 + r6)|0;
+ r7 = (r6 + 4)|0;
+ r6 = r6 >> 2;
+ heap32[(r6)] = r5;
+ r5 = r7;
+}
+}
+else{
+ r5 = 0;
+}
+ r6 = (r0 + 76)|0;
+ if(r1 <1) //_LBB612_235
+{
+ r7 = r6 >> 2;
+ r8 = heap32[(r7)];
+}
+else{
+ r7 = 0;
+_320: while(true){
+ r8 = r6 >> 2;
+ r8 = heap32[(r8)];
+ r9 = r7 << 2;
+ r10 = (r8 + r9)|0;
+ r10 = r10 >> 2;
+ r9 = (r5 + r9)|0;
+ r10 = heap32[(r10)];
+ r7 = (r7 + 1)|0;
+ r9 = r9 >> 2;
+ heap32[(r9)] = r10;
+if(!(r1 !=r7)) //_LBB612_236
+{
+break _320;
+}
+}
+ r6 = (r0 + 76)|0;
+}
+if(!(r8 ==0)) //_LBB612_242
+{
+ r7 = heapU8[r0+80];
+if(!(r7 ==0)) //_LBB612_241
+{
+ r7 = gNumAlignedFree;
+ r7 = r7 >> 2;
+ r9 = heap32[(r7)];
+ r9 = (r9 + 1)|0;
+ r8 = r8 >> 2;
+ heap32[(r7)] = r9;
+ r7 = heap32[(r8+-1)];
+ heap32[(g0)] = r7;
+ free(i7);
+}
+ r7 = r6 >> 2;
+ heap32[(r7)] = 0;
+}
+ r7 = 1;
+ r6 = r6 >> 2;
+ heap8[r0+80] = r7;
+ heap32[(r6)] = r5;
+ heap32[(r2+18)] = r3;
+ if(r1 >=r3) //_LBB612_244
+{
+break _307;
+}
+}
+_330: while(true){
+ r5 = r1 << 2;
+ r6 = heap32[(r2+19)];
+ r5 = (r6 + r5)|0;
+ r1 = (r1 + 1)|0;
+ r5 = r5 >> 2;
+ heap32[(r5)] = 0;
+if(!(r3 !=r1)) //_LBB612_243
+{
+break _307;
+}
+}
+}
+}
+} while(0);
+ heap32[(r2+17)] = r3;
+ r1 = heap32[(r2+22)];
+_333: do {
+if(!(r1 >r4)) //_LBB612_263
+{
+if(!(r1 >=r4)) //_LBB612_263
+{
+ r5 = heap32[(r2+23)];
+if(!(r5 >=r4)) //_LBB612_262
+{
+ if(r4 !=0) //_LBB612_249
+{
+ r5 = gNumAlignedAllocs;
+ r5 = r5 >> 2;
+ r6 = heap32[(r5)];
+ r7 = r4 << 2;
+ r6 = (r6 + 1)|0;
+ r7 = r7 | 3;
+ heap32[(r5)] = r6;
+ r5 = (r7 + 16)|0;
+ heap32[(g0)] = r5;
+ malloc(i7);
+ r5 = r_g0;
+ if(r5 !=0) //_LBB612_251
+{
+ r6 = 0;
+ r7 = (r5 + 4)|0;
+ r6 = (r6 - r7)|0;
+ r6 = r6 & 15;
+ r6 = (r5 + r6)|0;
+ r7 = (r6 + 4)|0;
+ r6 = r6 >> 2;
+ heap32[(r6)] = r5;
+ r5 = r7;
+}
+}
+else{
+ r5 = 0;
+}
+ r6 = (r0 + 96)|0;
+ if(r1 <1) //_LBB612_254
+{
+ r7 = r6 >> 2;
+ r8 = heap32[(r7)];
+}
+else{
+ r7 = 0;
+_346: while(true){
+ r8 = r6 >> 2;
+ r8 = heap32[(r8)];
+ r9 = r7 << 2;
+ r10 = (r8 + r9)|0;
+ r10 = r10 >> 2;
+ r9 = (r5 + r9)|0;
+ r10 = heap32[(r10)];
+ r7 = (r7 + 1)|0;
+ r9 = r9 >> 2;
+ heap32[(r9)] = r10;
+if(!(r1 !=r7)) //_LBB612_255
+{
+break _346;
+}
+}
+ r6 = (r0 + 96)|0;
+}
+if(!(r8 ==0)) //_LBB612_261
+{
+ r7 = heapU8[r0+100];
+if(!(r7 ==0)) //_LBB612_260
+{
+ r7 = gNumAlignedFree;
+ r7 = r7 >> 2;
+ r9 = heap32[(r7)];
+ r9 = (r9 + 1)|0;
+ r8 = r8 >> 2;
+ heap32[(r7)] = r9;
+ r7 = heap32[(r8+-1)];
+ heap32[(g0)] = r7;
+ free(i7);
+}
+ r7 = r6 >> 2;
+ heap32[(r7)] = 0;
+}
+ r7 = 1;
+ r6 = r6 >> 2;
+ heap8[r0+100] = r7;
+ heap32[(r6)] = r5;
+ heap32[(r2+23)] = r4;
+ if(r1 >=r4) //_LBB612_263
+{
+break _333;
+}
+}
+_356: while(true){
+ r0 = r1 << 2;
+ r5 = heap32[(r2+24)];
+ r0 = (r5 + r0)|0;
+ r1 = (r1 + 1)|0;
+ r0 = r0 >> 2;
+ heap32[(r0)] = 0;
+if(!(r4 !=r1)) //_LBB612_262
+{
+break _333;
+}
+}
+}
+}
+} while(0);
+ heap32[(r2+22)] = r4;
+_359: do {
+if(!(r3 <1)) //_LBB612_266
+{
+ r0 = 0;
+_361: while(true){
+ r1 = r0 << 2;
+ r5 = heap32[(r2+19)];
+ r1 = (r5 + r1)|0;
+ r5 = (r0 + 1)|0;
+ r1 = r1 >> 2;
+ heap32[(r1)] = r0;
+ r0 = r5;
+if(!(r3 !=r5)) //_LBB612_265
+{
+break _359;
+}
+}
+}
+} while(0);
+ if(r4 <1) //_LBB612_269
+{
+break _1;
+}
+else{
+ r0 = 0;
+_365: while(true){
+ r1 = r0 << 2;
+ r3 = heap32[(r2+24)];
+ r1 = (r3 + r1)|0;
+ r3 = (r0 + 1)|0;
+ r1 = r1 >> 2;
+ heap32[(r1)] = r0;
+ r0 = r3;
+if(!(r4 !=r3)) //_LBB612_268
+{
+break _1;
+}
+}
+}
+break;
+case 78:
+ r8 = _2E_str1157;
+ r0 = _2E_str652;
+ heap32[(g0)] = r8;
+ heap32[(g0+1)] = r0;
+ heap32[(g0+2)] = 813;
+ _assert(i7);
+break;
+}
+}
+} while(0);
+ r0 = _ZN15CProfileManager11CurrentNodeE;
+ r0 = r0 >> 2;
+ r1 = heap32[(r0)];
+ r2 = r1 >> 2;
+ r3 = heap32[(r2+4)];
+ r3 = (r3 + -1)|0;
+ heap32[(r2+4)] = r3;
+_369: do {
+if(!(r3 !=0)) //_LBB612_275
+{
+ r3 = heap32[(r2+1)];
+ if(r3 !=0) //_LBB612_272
+{
+ r1 = sp + -8;
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = 0;
+ r3 = _ZL13gProfileClock_2E_0;
+ gettimeofday(i7);
+ r3 = r3 >> 2;
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r1 = r1 >> 2;
+ r4 = heap32[(fp+-2)];
+ r5 = heap32[(r3)];
+ r4 = (r4 - r5)|0;
+ r1 = heap32[(r1+1)];
+ r3 = heap32[(r3+1)];
+ r1 = (r1 - r3)|0;
+ r3 = (r4 * 1000000)|0;
+ r1 = (r1 + r3)|0;
+ r3 = heap32[(r2+3)];
+ r1 = (r1 - r3)|0;
+ f0 = uint(r1); //fuitos r1, f0
+ f1 = 1000;
+ f2 = heapFloat[(r2+2)];
+ f0 = f0/f1;
+ f0 = f2+f0;
+ heapFloat[(r2+2)] = f0;
+ r1 = heap32[(r2+4)];
+ if(r1 !=0) //_LBB612_275
+{
+break _369;
+}
+else{
+ r1 = heap32[(r0)];
+}
+}
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+5)];
+ heap32[(r0)] = r1;
+}
+} while(0);
+ f0 = 0;
+ f_g0 = f0;
+ return;
+}
+
+function _ZN35btSequentialImpulseConstraintSolver33solveGroupCacheFriendlyIterationsEPP17btCollisionObjectiPP20btPersistentManifoldiPP17btTypedConstraintiRK19btContactSolverInfoP12btIDebugDrawP12btStackAlloc(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+ var r13;
+ var r14;
+ var f0;
+ var f1;
+ var f2;
+var __label__ = 0;
+ i7 = sp + -48;var g0 = i7>>2; // save stack
+ r0 = _2E_str854;
+ r1 = heap32[(fp+7)];
+ heap32[(g0)] = r0;
+ r0 = heap32[(fp)];
+ r2 = heap32[(fp+5)];
+ r3 = heap32[(fp+6)];
+ r4 = r1 >> 2;
+ _ZN15CProfileManager13Start_ProfileEPKc(i7);
+ r5 = heap32[(r4+5)];
+if(!(r5 <1)) //_LBB613_64
+{
+ r5 = 0;
+_3: while(true){
+ r6 = r0 >> 2;
+ r7 = heap32[(r4+15)];
+ r8 = r7 & 1;
+ if(r8 != 0) //_LBB613_4
+{
+ r8 = r5 & 7;
+if(!(r8 !=0)) //_LBB613_3
+{
+ r7 = heap32[(r6+2)];
+ r8 = heap32[(r6+12)];
+if(!(r7 <1)) //_LBB613_19
+{
+ r9 = 0;
+ r7 = (r9 - r7)|0;
+ r9 = 1;
+_10: while(true){
+ r10 = heap32[(r6+19)];
+ r11 = r9 << 2;
+ r11 = (r10 + r11)|0;
+ r11 = r11 >> 2;
+ r12 = heap32[(r6+31)];
+ r13 = heap32[(r11+-1)];
+ r12 = (r12 * 1664525)|0;
+ r12 = (r12 + 1013904223)|0;
+ heap32[(r6+31)] = r12;
+ if(uint(r9) <uint(65537)) //_LBB613_9
+{
+ r14 = r12 >>> 16;
+ r12 = r14 ^ r12;
+ if(uint(r9) <uint(257)) //_LBB613_11
+{
+ r14 = r12 >>> 8;
+ r12 = r14 ^ r12;
+ if(uint(r9) <uint(17)) //_LBB613_13
+{
+ r14 = r12 >>> 4;
+ r12 = r14 ^ r12;
+ if(uint(r9) <uint(5)) //_LBB613_15
+{
+ r14 = r12 >>> 2;
+ r12 = r14 ^ r12;
+ if(uint(r9) <uint(3)) //_LBB613_17
+{
+ r14 = r12 >>> 1;
+ r12 = r14 ^ r12;
+}
+}
+}
+}
+}
+ r12 = Math.floor(uint(r12) % uint(r9));
+ r12 = r12 << 2;
+ r10 = (r10 + r12)|0;
+ r10 = r10 >> 2;
+ r10 = heap32[(r10)];
+ heap32[(r11+-1)] = r10;
+ r10 = heap32[(r6+19)];
+ r10 = (r10 + r12)|0;
+ r9 = (r9 + 1)|0;
+ r10 = r10 >> 2;
+ heap32[(r10)] = r13;
+ r10 = (r7 + r9)|0;
+if(!(r10 !=1)) //_LBB613_7
+{
+break _10;
+}
+}
+}
+_20: do {
+if(!(r8 <1)) //_LBB613_33
+{
+ r7 = 0;
+ r7 = (r7 - r8)|0;
+ r8 = 1;
+_22: while(true){
+ r9 = heap32[(r6+24)];
+ r10 = r8 << 2;
+ r10 = (r9 + r10)|0;
+ r10 = r10 >> 2;
+ r11 = heap32[(r6+31)];
+ r12 = heap32[(r10+-1)];
+ r11 = (r11 * 1664525)|0;
+ r11 = (r11 + 1013904223)|0;
+ heap32[(r6+31)] = r11;
+ if(uint(r8) <uint(65537)) //_LBB613_23
+{
+ r13 = r11 >>> 16;
+ r11 = r13 ^ r11;
+ if(uint(r8) <uint(257)) //_LBB613_25
+{
+ r13 = r11 >>> 8;
+ r11 = r13 ^ r11;
+ if(uint(r8) <uint(17)) //_LBB613_27
+{
+ r13 = r11 >>> 4;
+ r11 = r13 ^ r11;
+ if(uint(r8) <uint(5)) //_LBB613_29
+{
+ r13 = r11 >>> 2;
+ r11 = r13 ^ r11;
+ if(uint(r8) <uint(3)) //_LBB613_31
+{
+ r13 = r11 >>> 1;
+ r11 = r13 ^ r11;
+}
+}
+}
+}
+}
+ r11 = Math.floor(uint(r11) % uint(r8));
+ r11 = r11 << 2;
+ r9 = (r9 + r11)|0;
+ r9 = r9 >> 2;
+ r9 = heap32[(r9)];
+ heap32[(r10+-1)] = r9;
+ r9 = heap32[(r6+24)];
+ r9 = (r9 + r11)|0;
+ r8 = (r8 + 1)|0;
+ r9 = r9 >> 2;
+ heap32[(r9)] = r12;
+ r9 = (r7 + r8)|0;
+if(!(r9 !=1)) //_LBB613_21
+{
+break _20;
+}
+}
+}
+} while(0);
+ r7 = heap32[(r4+15)];
+}
+}
+ r8 = heap32[(r6+7)];
+ r7 = r7 & 256;
+_33: do {
+ if(r7 !=0) //_LBB613_37
+{
+_35: do {
+if(!(r8 <1)) //_LBB613_40
+{
+ r7 = 0;
+ r8 = r7;
+_37: while(true){
+ r9 = (r8 * 34)|0;
+ r10 = heap32[(r6+9)];
+ r9 = r9 << 2;
+ r9 = (r10 + r9)|0;
+ r9 = r9 >> 2;
+ r11 = heap32[(r9+27)];
+ r9 = heap32[(r9+26)];
+ r10 = (r10 + r7)|0;
+ heap32[(g0)] = r9;
+ heap32[(g0+1)] = r11;
+ heap32[(g0+2)] = r10;
+ r8 = (r8 + 1)|0;
+ r7 = (r7 + 136)|0;
+ _ZN35btSequentialImpulseConstraintSolver33resolveSingleConstraintRowGenericER11btRigidBodyS1_RK18btSolverConstraint(i7);
+ r9 = heap32[(r6+7)];
+if(!(r9 >r8)) //_LBB613_39
+{
+break _35;
+}
+}
+}
+} while(0);
+_40: do {
+if(!(r3 <1)) //_LBB613_43
+{
+ r7 = r2;
+ r8 = r3;
+_42: while(true){
+ r9 = r7 >> 2;
+ r9 = heap32[(r9)];
+ r10 = r9 >> 2;
+ r11 = heap32[(r10)];
+ r11 = r11 >> 2;
+ r11 = heap32[(r11+6)];
+ f0 = heapFloat[(r4+3)];
+ r12 = heap32[(r10+6)];
+ r10 = heap32[(r10+5)];
+ heap32[(g0)] = r9;
+ heap32[(g0+1)] = r10;
+ heap32[(g0+2)] = r12;
+ heapFloat[(g0+3)] = f0;
+ r8 = (r8 + -1)|0;
+ r7 = (r7 + 4)|0;
+ __FUNCTION_TABLE__[(r11)>>2](i7);
+if(!(r8 !=0)) //_LBB613_42
+{
+break _40;
+}
+}
+}
+} while(0);
+ r7 = heap32[(r6+2)];
+_45: do {
+if(!(r7 <1)) //_LBB613_46
+{
+ r8 = 0;
+_47: while(true){
+ r9 = heap32[(r6+19)];
+ r10 = r8 << 2;
+ r9 = (r9 + r10)|0;
+ r9 = r9 >> 2;
+ r9 = heap32[(r9)];
+ r9 = (r9 * 136)|0;
+ r10 = heap32[(r6+4)];
+ r9 = (r10 + r9)|0;
+ r10 = r9 >> 2;
+ r11 = heap32[(r10+27)];
+ r10 = heap32[(r10+26)];
+ heap32[(g0)] = r10;
+ heap32[(g0+1)] = r11;
+ heap32[(g0+2)] = r9;
+ r8 = (r8 + 1)|0;
+ _ZN35btSequentialImpulseConstraintSolver36resolveSingleConstraintRowLowerLimitER11btRigidBodyS1_RK18btSolverConstraint(i7);
+if(!(r7 !=r8)) //_LBB613_45
+{
+break _45;
+}
+}
+}
+} while(0);
+ r7 = heap32[(r6+12)];
+ if(r7 <1) //_LBB613_63
+{
+break _33;
+}
+else{
+ r8 = 0;
+_51: while(true){
+ r9 = heap32[(r6+24)];
+ r10 = r8 << 2;
+ r9 = (r9 + r10)|0;
+ r9 = r9 >> 2;
+ r9 = heap32[(r9)];
+ r10 = heap32[(r6+14)];
+ r9 = (r9 * 136)|0;
+ r9 = (r10 + r9)|0;
+ r10 = r9 >> 2;
+ r11 = heap32[(r10+25)];
+ r12 = heap32[(r6+4)];
+ r11 = (r11 * 136)|0;
+ r11 = (r12 + r11)|0;
+ r11 = r11 >> 2;
+ f0 = heapFloat[(r11+21)];
+ f1 = 0;
+if(!(f0 <=f1)) //_LBB613_50
+{
+ f1 = heapFloat[(r10+22)];
+ f0 = f1*f0;
+ f1 = -f0;
+ heapFloat[(r10+31)] = f1;
+ heapFloat[(r10+32)] = f0;
+ r11 = heap32[(r10+27)];
+ r10 = heap32[(r10+26)];
+ heap32[(g0)] = r10;
+ heap32[(g0+1)] = r11;
+ heap32[(g0+2)] = r9;
+ _ZN35btSequentialImpulseConstraintSolver33resolveSingleConstraintRowGenericER11btRigidBodyS1_RK18btSolverConstraint(i7);
+}
+ r8 = (r8 + 1)|0;
+ if(r7 ==r8) //_LBB613_63
+{
+break _33;
+}
+else{
+continue _51;
+}
+}
+}
+}
+else{
+_57: do {
+if(!(r8 <1)) //_LBB613_52
+{
+ r8 = 0;
+ r7 = r8;
+_59: while(true){
+ r9 = (r7 * 34)|0;
+ r10 = heap32[(r6+9)];
+ r9 = r9 << 2;
+ r9 = (r10 + r9)|0;
+ r9 = r9 >> 2;
+ r11 = heap32[(r9+27)];
+ r9 = heap32[(r9+26)];
+ r10 = (r10 + r8)|0;
+ heap32[(g0)] = r9;
+ heap32[(g0+1)] = r11;
+ heap32[(g0+2)] = r10;
+ r7 = (r7 + 1)|0;
+ r8 = (r8 + 136)|0;
+ _ZN35btSequentialImpulseConstraintSolver33resolveSingleConstraintRowGenericER11btRigidBodyS1_RK18btSolverConstraint(i7);
+ r9 = heap32[(r6+7)];
+if(!(r9 >r7)) //_LBB613_51
+{
+break _57;
+}
+}
+}
+} while(0);
+_62: do {
+if(!(r3 <1)) //_LBB613_55
+{
+ r7 = r2;
+ r8 = r3;
+_64: while(true){
+ r9 = r7 >> 2;
+ r9 = heap32[(r9)];
+ r10 = r9 >> 2;
+ r11 = heap32[(r10)];
+ r11 = r11 >> 2;
+ r11 = heap32[(r11+6)];
+ f0 = heapFloat[(r4+3)];
+ r12 = heap32[(r10+6)];
+ r10 = heap32[(r10+5)];
+ heap32[(g0)] = r9;
+ heap32[(g0+1)] = r10;
+ heap32[(g0+2)] = r12;
+ heapFloat[(g0+3)] = f0;
+ r8 = (r8 + -1)|0;
+ r7 = (r7 + 4)|0;
+ __FUNCTION_TABLE__[(r11)>>2](i7);
+if(!(r8 !=0)) //_LBB613_54
+{
+break _62;
+}
+}
+}
+} while(0);
+ r7 = heap32[(r6+2)];
+_67: do {
+if(!(r7 <1)) //_LBB613_58
+{
+ r8 = 0;
+_69: while(true){
+ r9 = heap32[(r6+19)];
+ r10 = r8 << 2;
+ r9 = (r9 + r10)|0;
+ r9 = r9 >> 2;
+ r9 = heap32[(r9)];
+ r9 = (r9 * 136)|0;
+ r10 = heap32[(r6+4)];
+ r9 = (r10 + r9)|0;
+ r10 = r9 >> 2;
+ r11 = heap32[(r10+27)];
+ r10 = heap32[(r10+26)];
+ heap32[(g0)] = r10;
+ heap32[(g0+1)] = r11;
+ heap32[(g0+2)] = r9;
+ r8 = (r8 + 1)|0;
+ _ZN35btSequentialImpulseConstraintSolver36resolveSingleConstraintRowLowerLimitER11btRigidBodyS1_RK18btSolverConstraint(i7);
+if(!(r7 !=r8)) //_LBB613_57
+{
+break _67;
+}
+}
+}
+} while(0);
+ r7 = heap32[(r6+12)];
+if(!(r7 <1)) //_LBB613_63
+{
+ r8 = 0;
+_73: while(true){
+ r9 = heap32[(r6+24)];
+ r10 = r8 << 2;
+ r9 = (r9 + r10)|0;
+ r9 = r9 >> 2;
+ r9 = heap32[(r9)];
+ r10 = heap32[(r6+14)];
+ r9 = (r9 * 136)|0;
+ r9 = (r10 + r9)|0;
+ r10 = r9 >> 2;
+ r11 = heap32[(r10+25)];
+ r12 = heap32[(r6+4)];
+ r11 = (r11 * 136)|0;
+ r11 = (r12 + r11)|0;
+ r11 = r11 >> 2;
+ f0 = heapFloat[(r11+21)];
+ f1 = 0;
+if(!(f0 <=f1)) //_LBB613_62
+{
+ f1 = heapFloat[(r10+22)];
+ f0 = f1*f0;
+ f1 = -f0;
+ heapFloat[(r10+31)] = f1;
+ heapFloat[(r10+32)] = f0;
+ r11 = heap32[(r10+27)];
+ r10 = heap32[(r10+26)];
+ heap32[(g0)] = r10;
+ heap32[(g0+1)] = r11;
+ heap32[(g0+2)] = r9;
+ _ZN35btSequentialImpulseConstraintSolver33resolveSingleConstraintRowGenericER11btRigidBodyS1_RK18btSolverConstraint(i7);
+}
+ r8 = (r8 + 1)|0;
+if(!(r7 !=r8)) //_LBB613_60
+{
+break _33;
+}
+}
+}
+}
+} while(0);
+ r5 = (r5 + 1)|0;
+ r6 = heap32[(r4+5)];
+ if(r6 >r5) //_LBB613_2
+{
+continue _3;
+}
+else{
+break _3;
+}
+}
+}
+ r4 = heap32[(fp+1)];
+ r5 = heap32[(fp+2)];
+ r6 = heap32[(fp+3)];
+ r7 = heap32[(fp+4)];
+ r8 = heap32[(fp+8)];
+ r9 = heap32[(fp+9)];
+ r10 = r0 >> 2;
+ r10 = heap32[(r10)];
+ r10 = r10 >> 2;
+ r10 = heap32[(r10+6)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r4;
+ heap32[(g0+2)] = r5;
+ heap32[(g0+3)] = r6;
+ heap32[(g0+4)] = r7;
+ heap32[(g0+5)] = r2;
+ heap32[(g0+6)] = r3;
+ heap32[(g0+7)] = r1;
+ heap32[(g0+8)] = r8;
+ heap32[(g0+9)] = r9;
+ r0 = _ZN15CProfileManager11CurrentNodeE;
+ __FUNCTION_TABLE__[(r10)>>2](i7);
+ r0 = r0 >> 2;
+ r1 = heap32[(r0)];
+ r2 = r1 >> 2;
+ r3 = heap32[(r2+4)];
+ r3 = (r3 + -1)|0;
+ heap32[(r2+4)] = r3;
+_80: do {
+if(!(r3 !=0)) //_LBB613_70
+{
+ r3 = heap32[(r2+1)];
+ if(r3 !=0) //_LBB613_67
+{
+ r1 = sp + -8;
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = 0;
+ r3 = _ZL13gProfileClock_2E_0;
+ gettimeofday(i7);
+ r3 = r3 >> 2;
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r1 = r1 >> 2;
+ r4 = heap32[(fp+-2)];
+ r5 = heap32[(r3)];
+ r4 = (r4 - r5)|0;
+ r1 = heap32[(r1+1)];
+ r3 = heap32[(r3+1)];
+ r1 = (r1 - r3)|0;
+ r3 = (r4 * 1000000)|0;
+ r1 = (r1 + r3)|0;
+ r3 = heap32[(r2+3)];
+ r1 = (r1 - r3)|0;
+ f0 = uint(r1); //fuitos r1, f0
+ f1 = 1000;
+ f2 = heapFloat[(r2+2)];
+ f0 = f0/f1;
+ f0 = f2+f0;
+ heapFloat[(r2+2)] = f0;
+ r1 = heap32[(r2+4)];
+ if(r1 !=0) //_LBB613_70
+{
+break _80;
+}
+else{
+ r1 = heap32[(r0)];
+}
+}
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+5)];
+ heap32[(r0)] = r1;
+}
+} while(0);
+ f0 = 0;
+ f_g0 = f0;
+ return;
+}
+
+function _ZN35btSequentialImpulseConstraintSolver21addFrictionConstraintERK9btVector3P11btRigidBodyS4_iR15btManifoldPointS2_S2_P17btCollisionObjectS8_fff(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+ var r13;
+ var r14;
+ var r15;
+ var r16;
+ var r17;
+ var r18;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+ var f10;
+ var f11;
+ var f12;
+ var f13;
+ var f14;
+ var f15;
+ var f16;
+ var f17;
+ var f18;
+ var f19;
+ var f20;
+ var f21;
+ var f22;
+ var f23;
+var __label__ = 0;
+ i7 = sp + -288;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ r2 = heap32[(r1+13)];
+ r3 = heap32[(r1+12)];
+ r4 = heap32[(fp+1)];
+ r5 = heap32[(fp+2)];
+ r6 = heap32[(fp+3)];
+ r7 = heap32[(fp+4)];
+ r8 = heap32[(fp+5)];
+ r9 = heap32[(fp+6)];
+ r10 = heap32[(fp+7)];
+ f0 = heapFloat[(fp+8)];
+ f1 = heapFloat[(fp+9)];
+ f2 = heapFloat[(fp+10)];
+ if(r2 ==r3) //_LBB614_2
+{
+ r11 = 1;
+ r12 = r3 << 1;
+ r12 = r3 == 0 ? r11 : r12;
+ if(r2 >=r12) //_LBB614_1
+{
+__label__ = 1;
+}
+else{
+ if(r12 !=0) //_LBB614_5
+{
+ r2 = gNumAlignedAllocs;
+ r2 = r2 >> 2;
+ r13 = heap32[(r2)];
+ r14 = (r12 * 136)|0;
+ r13 = (r13 + 1)|0;
+ r14 = r14 | 3;
+ heap32[(r2)] = r13;
+ r2 = (r14 + 16)|0;
+ heap32[(g0)] = r2;
+ malloc(i7);
+ r13 = r_g0;
+ if(r13 !=0) //_LBB614_7
+{
+ r2 = 0;
+ r14 = (r13 + 4)|0;
+ r2 = (r2 - r14)|0;
+ r2 = r2 & 15;
+ r2 = (r13 + r2)|0;
+ r14 = (r2 + 4)|0;
+ r2 = r2 >> 2;
+ heap32[(r2)] = r13;
+ r13 = r14;
+}
+}
+else{
+ r13 = 0;
+}
+ r14 = (r0 + 56)|0;
+ if(r3 <1) //_LBB614_10
+{
+ r2 = r14 >> 2;
+ r16 = heap32[(r2)];
+}
+else{
+ r2 = 0;
+ r15 = r3;
+_12: while(true){
+ r16 = r14 >> 2;
+ r16 = heap32[(r16)];
+ r17 = (r13 + r2)|0;
+ r18 = (r16 + r2)|0;
+ heap32[(g0)] = r17;
+ heap32[(g0+1)] = r18;
+ heap32[(g0+2)] = 136;
+ r15 = (r15 + -1)|0;
+ r2 = (r2 + 136)|0;
+ memcpy(i7);
+if(!(r15 !=0)) //_LBB614_11
+{
+break _12;
+}
+}
+ r14 = (r0 + 56)|0;
+}
+ if(r16 !=0) //_LBB614_15
+{
+ r2 = heapU8[r0+60];
+ if(r2 !=0) //_LBB614_17
+{
+ r2 = gNumAlignedFree;
+ r2 = r2 >> 2;
+ r15 = heap32[(r2)];
+ r15 = (r15 + 1)|0;
+ r16 = r16 >> 2;
+ heap32[(r2)] = r15;
+ r2 = heap32[(r16+-1)];
+ heap32[(g0)] = r2;
+ free(i7);
+ r2 = heap32[(r1+12)];
+}
+else{
+ r2 = r3;
+}
+ r15 = r14 >> 2;
+ heap32[(r15)] = 0;
+}
+else{
+ r2 = r3;
+}
+ r14 = r14 >> 2;
+ heap8[r0+60] = r11;
+ heap32[(r14)] = r13;
+ heap32[(r1+13)] = r12;
+__label__ = 19;
+}
+}
+else{
+__label__ = 1;
+}
+if (__label__ == 1){
+ r2 = r3;
+}
+ r0 = (r2 + 1)|0;
+ heap32[(r1+12)] = r0;
+ r0 = heap32[(r1+14)];
+ r1 = (r3 * 136)|0;
+ r0 = (r0 + r1)|0;
+ r0 = r0 >> 2;
+ heap32[(r0+25)] = r5;
+ r1 = heapU8[r9+232];
+ r1 = r1 & 2;
+if(!(r1 !=0)) //_LBB614_22
+{
+ r9 = 0;
+}
+ r1 = heapU8[r10+232];
+ r1 = r1 & 2;
+if(!(r1 !=0)) //_LBB614_24
+{
+ r10 = 0;
+}
+ r1 = r4 >> 2;
+ heap32[(r0+4)] = heap32[(r1)];
+ heap32[(r0+5)] = heap32[(r1+1)];
+ heap32[(r0+6)] = heap32[(r1+2)];
+ heap32[(r0+7)] = heap32[(r1+3)];
+ if(r9 ==0) //_LBB614_26
+{
+ r2 = _ZGVZN35btSequentialImpulseConstraintSolver12getFixedBodyEvE7s_fixed;
+ r3 = heapU8[r2];
+if(!(r3 !=0)) //_LBB614_28
+{
+ r3 = _ZZN35btSequentialImpulseConstraintSolver12getFixedBodyEvE7s_fixed;
+ r4 = r3 >> 2;
+ heap32[(r4+41)] = 1065353216;
+ heap32[(r4+42)] = 1065353216;
+ heap32[(r4+43)] = 1065353216;
+ heap32[(r4+44)] = 0;
+ heap32[(r4+45)] = 0;
+ heap32[(r4+46)] = 1566444395;
+ heap32[(r4+47)] = 0;
+ heap32[(r4+48)] = 0;
+ heap32[(r4+49)] = 0;
+ heap32[(r4+50)] = 0;
+ heap32[(r4+51)] = 1;
+ heap32[(r4+52)] = -1;
+ heap32[(r4+53)] = -1;
+ heap32[(r4+54)] = 1;
+ heap32[(r4+55)] = 0;
+ heap32[(r4+56)] = 1056964608;
+ heap32[(r4+57)] = 0;
+ heap32[(r4+58)] = 1;
+ heap32[(r4+59)] = 0;
+ heap32[(r4+60)] = 1065353216;
+ heap32[(r4+61)] = 0;
+ heap32[(r4+62)] = 0;
+ heap32[(r4+63)] = 0;
+ heap32[(r4+1)] = 1065353216;
+ heap32[(r4+2)] = 0;
+ heap32[(r4+3)] = 0;
+ heap32[(r4+4)] = 0;
+ heap32[(r4+5)] = 0;
+ heap32[(r4+6)] = 1065353216;
+ heap32[(r4+7)] = 0;
+ heap32[(r4+8)] = 0;
+ heap32[(r4+9)] = 0;
+ heap32[(r4+10)] = 0;
+ heap32[(r4+11)] = 1065353216;
+ heap32[(r4+12)] = 0;
+ heap32[(r4+13)] = 0;
+ heap32[(r4+14)] = 0;
+ r5 = _ZTV11btRigidBody;
+ heap32[(r4+15)] = 0;
+ r5 = (r5 + 8)|0;
+ heap32[(r4+16)] = 0;
+ r11 = 1;
+ heap32[(r4)] = r5;
+ heap8[r3+492] = r11;
+ heap32[(r4+122)] = 0;
+ heap32[(r4+120)] = 0;
+ r5 = sp + -272;
+ heap32[(r4+121)] = 0;
+ r4 = r5 >> 2;
+ heap32[(fp+-68)] = 0;
+ heap32[(r4+1)] = 0;
+ heap32[(r4+18)] = 0;
+ heap32[(r4+19)] = 0;
+ heap32[(r4+20)] = 0;
+ heap32[(r4+21)] = 0;
+ heap32[(r4+22)] = 0;
+ heap32[(r4+23)] = 0;
+ heap32[(r4+24)] = 0;
+ heap32[(r4+25)] = 1056964608;
+ heap32[(r4+26)] = 0;
+ heap32[(r4+27)] = 1061997773;
+ r12 = 0;
+ heap32[(r4+28)] = 1065353216;
+ heap8[sp+-156] = r12;
+ heap32[(r4+30)] = 1000593162;
+ heap32[(r4+31)] = 1008981770;
+ heap32[(r4+32)] = 1008981770;
+ heap32[(r4+33)] = 1008981770;
+ heap32[(r4+2)] = 1065353216;
+ heap32[(r4+3)] = 0;
+ heap32[(r4+4)] = 0;
+ heap32[(r4+5)] = 0;
+ heap32[(r4+6)] = 0;
+ heap32[(r4+7)] = 1065353216;
+ heap32[(r4+8)] = 0;
+ heap32[(r4+9)] = 0;
+ heap32[(r4+10)] = 0;
+ heap32[(r4+11)] = 0;
+ heap32[(r4+12)] = 1065353216;
+ heap32[(r4+13)] = 0;
+ heap32[(r4+14)] = 0;
+ heap32[(r4+15)] = 0;
+ heap32[(r4+16)] = 0;
+ heap32[(r4+17)] = 0;
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r5;
+ _ZN11btRigidBody14setupRigidBodyERKNS_27btRigidBodyConstructionInfoE(i7);
+ heap8[r2] = r11;
+}
+ r2 = _ZZN35btSequentialImpulseConstraintSolver12getFixedBodyEvE7s_fixed;
+ r3 = r2 >> 2;
+ r4 = heap32[(r3+51)];
+ r4 = r4 | 1;
+ heap32[(r3+51)] = r4;
+ heap32[(r3+84)] = 0;
+ f3 = 0;
+ f4 = heapFloat[(r3+95)];
+ f5 = heapFloat[(r3+94)];
+ f6 = heapFloat[(r3+93)];
+ f6 = f6*f3;
+ f5 = f5*f3;
+ heapFloat[(r3+89)] = f6;
+ f4 = f4*f3;
+ heapFloat[(r3+90)] = f5;
+ heapFloat[(r3+91)] = f4;
+ heap32[(r3+92)] = 0;
+ heap32[(r3+97)] = 0;
+ heap32[(r3+98)] = 0;
+ heap32[(r3+99)] = 0;
+ heap32[(r3+100)] = 0;
+ f4 = heapFloat[(r3+87)];
+ f5 = heapFloat[(r3+86)];
+ f6 = heapFloat[(r3+85)];
+ f6 = f6*f3;
+ f5 = f5*f3;
+ heapFloat[(r3+138)] = f6;
+ f3 = f4*f3;
+ heapFloat[(r3+139)] = f5;
+ heapFloat[(r3+140)] = f3;
+ heap32[(r3+141)] = 0;
+}
+else{
+ r2 = r9;
+}
+ heap32[(r0+26)] = r2;
+ if(r10 ==0) //_LBB614_31
+{
+ r2 = _ZGVZN35btSequentialImpulseConstraintSolver12getFixedBodyEvE7s_fixed;
+ r3 = heapU8[r2];
+if(!(r3 !=0)) //_LBB614_33
+{
+ r3 = _ZZN35btSequentialImpulseConstraintSolver12getFixedBodyEvE7s_fixed;
+ r4 = r3 >> 2;
+ heap32[(r4+41)] = 1065353216;
+ heap32[(r4+42)] = 1065353216;
+ heap32[(r4+43)] = 1065353216;
+ heap32[(r4+44)] = 0;
+ heap32[(r4+45)] = 0;
+ heap32[(r4+46)] = 1566444395;
+ heap32[(r4+47)] = 0;
+ heap32[(r4+48)] = 0;
+ heap32[(r4+49)] = 0;
+ heap32[(r4+50)] = 0;
+ heap32[(r4+51)] = 1;
+ heap32[(r4+52)] = -1;
+ heap32[(r4+53)] = -1;
+ heap32[(r4+54)] = 1;
+ heap32[(r4+55)] = 0;
+ heap32[(r4+56)] = 1056964608;
+ heap32[(r4+57)] = 0;
+ heap32[(r4+58)] = 1;
+ heap32[(r4+59)] = 0;
+ heap32[(r4+60)] = 1065353216;
+ heap32[(r4+61)] = 0;
+ heap32[(r4+62)] = 0;
+ heap32[(r4+63)] = 0;
+ heap32[(r4+1)] = 1065353216;
+ heap32[(r4+2)] = 0;
+ heap32[(r4+3)] = 0;
+ heap32[(r4+4)] = 0;
+ heap32[(r4+5)] = 0;
+ heap32[(r4+6)] = 1065353216;
+ heap32[(r4+7)] = 0;
+ heap32[(r4+8)] = 0;
+ heap32[(r4+9)] = 0;
+ heap32[(r4+10)] = 0;
+ heap32[(r4+11)] = 1065353216;
+ heap32[(r4+12)] = 0;
+ heap32[(r4+13)] = 0;
+ heap32[(r4+14)] = 0;
+ r5 = _ZTV11btRigidBody;
+ heap32[(r4+15)] = 0;
+ r5 = (r5 + 8)|0;
+ heap32[(r4+16)] = 0;
+ r11 = 1;
+ heap32[(r4)] = r5;
+ heap8[r3+492] = r11;
+ heap32[(r4+122)] = 0;
+ heap32[(r4+120)] = 0;
+ r5 = sp + -136;
+ heap32[(r4+121)] = 0;
+ r4 = r5 >> 2;
+ heap32[(fp+-34)] = 0;
+ heap32[(r4+1)] = 0;
+ heap32[(r4+18)] = 0;
+ heap32[(r4+19)] = 0;
+ heap32[(r4+20)] = 0;
+ heap32[(r4+21)] = 0;
+ heap32[(r4+22)] = 0;
+ heap32[(r4+23)] = 0;
+ heap32[(r4+24)] = 0;
+ heap32[(r4+25)] = 1056964608;
+ heap32[(r4+26)] = 0;
+ heap32[(r4+27)] = 1061997773;
+ r12 = 0;
+ heap32[(r4+28)] = 1065353216;
+ heap8[sp+-20] = r12;
+ heap32[(r4+30)] = 1000593162;
+ heap32[(r4+31)] = 1008981770;
+ heap32[(r4+32)] = 1008981770;
+ heap32[(r4+33)] = 1008981770;
+ heap32[(r4+2)] = 1065353216;
+ heap32[(r4+3)] = 0;
+ heap32[(r4+4)] = 0;
+ heap32[(r4+5)] = 0;
+ heap32[(r4+6)] = 0;
+ heap32[(r4+7)] = 1065353216;
+ heap32[(r4+8)] = 0;
+ heap32[(r4+9)] = 0;
+ heap32[(r4+10)] = 0;
+ heap32[(r4+11)] = 0;
+ heap32[(r4+12)] = 1065353216;
+ heap32[(r4+13)] = 0;
+ heap32[(r4+14)] = 0;
+ heap32[(r4+15)] = 0;
+ heap32[(r4+16)] = 0;
+ heap32[(r4+17)] = 0;
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r5;
+ _ZN11btRigidBody14setupRigidBodyERKNS_27btRigidBodyConstructionInfoE(i7);
+ heap8[r2] = r11;
+}
+ r2 = _ZZN35btSequentialImpulseConstraintSolver12getFixedBodyEvE7s_fixed;
+ r3 = r2 >> 2;
+ r4 = heap32[(r3+51)];
+ r4 = r4 | 1;
+ heap32[(r3+51)] = r4;
+ heap32[(r3+84)] = 0;
+ f3 = 0;
+ f4 = heapFloat[(r3+95)];
+ f5 = heapFloat[(r3+94)];
+ f6 = heapFloat[(r3+93)];
+ f6 = f6*f3;
+ f5 = f5*f3;
+ heapFloat[(r3+89)] = f6;
+ f4 = f4*f3;
+ heapFloat[(r3+90)] = f5;
+ heapFloat[(r3+91)] = f4;
+ heap32[(r3+92)] = 0;
+ heap32[(r3+97)] = 0;
+ heap32[(r3+98)] = 0;
+ heap32[(r3+99)] = 0;
+ heap32[(r3+100)] = 0;
+ f4 = heapFloat[(r3+87)];
+ f5 = heapFloat[(r3+86)];
+ f6 = heapFloat[(r3+85)];
+ f6 = f6*f3;
+ f5 = f5*f3;
+ heapFloat[(r3+138)] = f6;
+ f3 = f4*f3;
+ heapFloat[(r3+139)] = f5;
+ heapFloat[(r3+140)] = f3;
+ heap32[(r3+141)] = 0;
+}
+else{
+ r2 = r10;
+}
+ r3 = r6 >> 2;
+ heap32[(r0+27)] = r2;
+ heap32[(r0+22)] = heap32[(r3+21)];
+ heap32[(r0+28)] = 0;
+ heap32[(r0+21)] = 0;
+ heap32[(r0+20)] = 0;
+ r2 = r7 >> 2;
+ f3 = heapFloat[(r0+5)];
+ f4 = heapFloat[(r2+2)];
+ f5 = heapFloat[(r0+6)];
+ f6 = heapFloat[(r2+1)];
+ f7 = heapFloat[(r0+4)];
+ f8 = heapFloat[(r2)];
+ f9 = f6*f5;
+ f10 = f4*f3;
+ f9 = f9-f10;
+ f4 = f4*f7;
+ f10 = f8*f5;
+ f4 = f4-f10;
+ heapFloat[(r0)] = f9;
+ f8 = f8*f3;
+ f6 = f6*f7;
+ f6 = f8-f6;
+ heapFloat[(r0+1)] = f4;
+ heapFloat[(r0+2)] = f6;
+ heap32[(r0+3)] = 0;
+ if(r9 ==0) //_LBB614_36
+{
+ heap32[(r0+12)] = 0;
+ heap32[(r0+13)] = 0;
+ f10 = 0;
+ heap32[(r0+14)] = 0;
+ heap32[(r0+15)] = 0;
+ f11 = f10;
+ f8 = f10;
+}
+else{
+ r3 = r9 >> 2;
+ f8 = heapFloat[(r3+64)];
+ f10 = heapFloat[(r3+65)];
+ f11 = heapFloat[(r3+68)];
+ f12 = heapFloat[(r3+69)];
+ f8 = f8*f9;
+ f10 = f10*f4;
+ f13 = heapFloat[(r3+66)];
+ f14 = heapFloat[(r3+72)];
+ f15 = heapFloat[(r3+73)];
+ f16 = heapFloat[(r3+70)];
+ f11 = f11*f9;
+ f12 = f12*f4;
+ f8 = f8+f10;
+ f10 = f13*f6;
+ f13 = heapFloat[(r3+74)];
+ f14 = f14*f9;
+ f15 = f15*f4;
+ f11 = f11+f12;
+ f12 = f16*f6;
+ f8 = f8+f10;
+ f10 = heapFloat[(r3+134)];
+ f16 = heapFloat[(r3+136)];
+ f17 = heapFloat[(r3+135)];
+ f11 = f11+f12;
+ f8 = f8*f10;
+ f10 = f14+f15;
+ f12 = f13*f6;
+ f10 = f10+f12;
+ f11 = f11*f17;
+ heapFloat[(r0+12)] = f8;
+ f10 = f10*f16;
+ heapFloat[(r0+13)] = f11;
+ heapFloat[(r0+14)] = f10;
+ heap32[(r0+15)] = 0;
+}
+ r3 = r8 >> 2;
+ f12 = heapFloat[(r3+2)];
+ f13 = heapFloat[(r3+1)];
+ f14 = heapFloat[(r3)];
+ f15 = f12*f3;
+ f16 = f13*f5;
+ f15 = f15-f16;
+ f16 = f14*f5;
+ f12 = f12*f7;
+ f12 = f16-f12;
+ heapFloat[(r0+8)] = f15;
+ f13 = f13*f7;
+ f14 = f14*f3;
+ f13 = f13-f14;
+ heapFloat[(r0+9)] = f12;
+ heapFloat[(r0+10)] = f13;
+ heap32[(r0+11)] = 0;
+ if(r10 ==0) //_LBB614_39
+{
+ heap32[(r0+16)] = 0;
+ heap32[(r0+17)] = 0;
+ f14 = 0;
+ heap32[(r0+18)] = 0;
+ heap32[(r0+19)] = 0;
+ f17 = f14;
+ f16 = f14;
+}
+else{
+ r4 = r10 >> 2;
+ f14 = heapFloat[(r4+64)];
+ f16 = heapFloat[(r4+65)];
+ f17 = heapFloat[(r4+68)];
+ f18 = heapFloat[(r4+69)];
+ f14 = f14*f15;
+ f16 = f16*f12;
+ f19 = heapFloat[(r4+66)];
+ f20 = heapFloat[(r4+72)];
+ f21 = heapFloat[(r4+73)];
+ f22 = heapFloat[(r4+70)];
+ f17 = f17*f15;
+ f18 = f18*f12;
+ f14 = f14+f16;
+ f16 = f19*f13;
+ f19 = heapFloat[(r4+74)];
+ f20 = f20*f15;
+ f21 = f21*f12;
+ f17 = f17+f18;
+ f18 = f22*f13;
+ f14 = f14+f16;
+ f16 = heapFloat[(r4+134)];
+ f22 = heapFloat[(r4+136)];
+ f23 = heapFloat[(r4+135)];
+ f17 = f17+f18;
+ f14 = f14*f16;
+ f16 = f20+f21;
+ f18 = f19*f13;
+ f16 = f16+f18;
+ f17 = f17*f23;
+ heapFloat[(r0+16)] = f14;
+ f16 = f16*f22;
+ heapFloat[(r0+17)] = f17;
+ heapFloat[(r0+18)] = f16;
+ heap32[(r0+19)] = 0;
+}
+ if(r9 !=0) //_LBB614_42
+{
+ f18 = heapFloat[(r2+1)];
+ f19 = heapFloat[(r2+2)];
+ f20 = heapFloat[(r2)];
+ f21 = f11*f19;
+ f22 = f10*f18;
+ f10 = f10*f20;
+ f19 = f8*f19;
+ f23 = heapFloat[(r1)];
+ f21 = f21-f22;
+ f22 = heapFloat[(r1+1)];
+ f10 = f10-f19;
+ f8 = f8*f18;
+ f11 = f11*f20;
+ f18 = f23*f21;
+ f10 = f22*f10;
+ f19 = heapFloat[(r1+2)];
+ f8 = f8-f11;
+ r2 = r9 >> 2;
+ f10 = f18+f10;
+ f8 = f19*f8;
+ f11 = heapFloat[(r2+84)];
+ f8 = f10+f8;
+ f8 = f11+f8;
+}
+else{
+ f8 = 0;
+}
+ if(r10 !=0) //_LBB614_45
+{
+ f10 = heapFloat[(r3+2)];
+ f11 = heapFloat[(r3)];
+ f18 = heapFloat[(r3+1)];
+ f19 = f18*f16;
+ f20 = f10*f17;
+ f10 = f10*f14;
+ f16 = f11*f16;
+ f21 = heapFloat[(r1)];
+ f19 = f19-f20;
+ f20 = heapFloat[(r1+1)];
+ f10 = f10-f16;
+ f11 = f11*f17;
+ f14 = f18*f14;
+ f16 = f21*f19;
+ f10 = f20*f10;
+ f17 = heapFloat[(r1+2)];
+ f14 = f11-f14;
+ r1 = r10 >> 2;
+ f10 = f16+f10;
+ f14 = f17*f14;
+ f11 = heapFloat[(r1+84)];
+ f14 = f10+f14;
+ f14 = f11+f14;
+}
+else{
+ f14 = 0;
+}
+ f8 = f8+f14;
+ f0 = f0/f8;
+ heapFloat[(r0+23)] = f0;
+ if(r9 !=0) //_LBB614_48
+{
+ r1 = r9 >> 2;
+ f8 = heapFloat[(r1+76)];
+ f10 = heapFloat[(r1+77)];
+ f8 = f7*f8;
+ f10 = f3*f10;
+ f11 = heapFloat[(r1+78)];
+ f8 = f8+f10;
+ f10 = f5*f11;
+ f10 = f8+f10;
+ f14 = heapFloat[(r1+80)];
+ f11 = heapFloat[(r1+81)];
+ f8 = heapFloat[(r1+82)];
+}
+else{
+ f8 = 0;
+ f10 = f7*f8;
+ f11 = f3*f8;
+ f10 = f10+f11;
+ f11 = f5*f8;
+ f10 = f10+f11;
+ f11 = f8;
+ f14 = f8;
+}
+ f9 = f9*f14;
+ f4 = f4*f11;
+ f4 = f9+f4;
+ f6 = f6*f8;
+ f4 = f4+f6;
+ f4 = f10+f4;
+ if(r10 !=0) //_LBB614_51
+{
+ r1 = r10 >> 2;
+ f6 = heapFloat[(r1+80)];
+ f8 = heapFloat[(r1+81)];
+ f6 = f15*f6;
+ f12 = f12*f8;
+ f15 = heapFloat[(r1+82)];
+ f6 = f6+f12;
+ f12 = f13*f15;
+ f12 = f6+f12;
+ f15 = heapFloat[(r1+76)];
+ f13 = heapFloat[(r1+77)];
+ f6 = heapFloat[(r1+78)];
+}
+else{
+ f6 = 0;
+ f15 = f15*f6;
+ f12 = f12*f6;
+ f12 = f15+f12;
+ f13 = f13*f6;
+ f12 = f12+f13;
+ f13 = f6;
+ f15 = f6;
+}
+ f7 = f7*f15;
+ f3 = f3*f13;
+ f3 = f7+f3;
+ f5 = f5*f6;
+ f3 = f3+f5;
+ f3 = f12-f3;
+ f3 = f4+f3;
+ f1 = f1-f3;
+ f0 = f0*f1;
+ heapFloat[(r0+29)] = f0;
+ heapFloat[(r0+30)] = f2;
+ heap32[(r0+31)] = 0;
+ heap32[(r0+32)] = 1343554297;
+ return;
+}
+
+function _ZNK17btTypedConstraint9serializeEPvP12btSerializer(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+2)];
+ r1 = r0 >> 2;
+ r2 = heap32[(fp)];
+ r3 = heap32[(r1)];
+ r3 = r3 >> 2;
+ r4 = r2 >> 2;
+ r3 = heap32[(r3+7)];
+ r5 = heap32[(r4+5)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r5;
+ r5 = heap32[(fp+1)];
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ r5 = r5 >> 2;
+ heap32[(r5)] = r_g0;
+ r3 = heap32[(r1)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3+7)];
+ r6 = heap32[(r4+6)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r6;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ heap32[(r5+1)] = r_g0;
+ r3 = heap32[(r1)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3+10)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r2;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ r3 = r_g0;
+ r6 = heap32[(r1)];
+ r6 = r6 >> 2;
+ r6 = heap32[(r6+7)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r3;
+ __FUNCTION_TABLE__[(r6)>>2](i7);
+ r6 = r_g0;
+ heap32[(r5+2)] = r6;
+if(!(r6 ==0)) //_LBB615_2
+{
+ r1 = heap32[(r1)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+12)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r3;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+}
+ r0 = heap32[(r4+1)];
+ heap32[(r5+3)] = r0;
+ r0 = heapU8[r2+16];
+ heap32[(r5+6)] = r0;
+ r0 = heap32[(r4+3)];
+ heap32[(r5+5)] = r0;
+ r0 = heap32[(r4+2)];
+ heap32[(r5+4)] = r0;
+ heap32[(r5+7)] = heap32[(r4+7)];
+ heap32[(r5+8)] = heap32[(r4+8)];
+ heap32[(r5+9)] = 0;
+ r0 = heap32[(r4+5)];
+ r1 = r0 >> 2;
+ r1 = heap32[(r1+120)];
+if(!(r1 <1)) //_LBB615_7
+{
+ r1 = 0;
+_6: while(true){
+ r0 = r0 >> 2;
+ r0 = heap32[(r0+122)];
+ r3 = r1 << 2;
+ r0 = (r0 + r3)|0;
+ r0 = r0 >> 2;
+ r0 = heap32[(r0)];
+if(!(r0 !=r2)) //_LBB615_6
+{
+ heap32[(r5+9)] = 1;
+}
+ r1 = (r1 + 1)|0;
+ r0 = heap32[(r4+5)];
+ r3 = r0 >> 2;
+ r3 = heap32[(r3+120)];
+ if(r3 >r1) //_LBB615_4
+{
+continue _6;
+}
+else{
+break _6;
+}
+}
+}
+ r0 = heap32[(r4+6)];
+ r1 = r0 >> 2;
+ r1 = heap32[(r1+120)];
+_12: do {
+if(!(r1 <1)) //_LBB615_12
+{
+ r1 = 0;
+_14: while(true){
+ r0 = r0 >> 2;
+ r0 = heap32[(r0+122)];
+ r3 = r1 << 2;
+ r0 = (r0 + r3)|0;
+ r0 = r0 >> 2;
+ r0 = heap32[(r0)];
+if(!(r0 !=r2)) //_LBB615_11
+{
+ heap32[(r5+9)] = 1;
+}
+ r1 = (r1 + 1)|0;
+ r0 = heap32[(r4+6)];
+ r3 = r0 >> 2;
+ r3 = heap32[(r3+120)];
+ if(r3 >r1) //_LBB615_9
+{
+continue _14;
+}
+else{
+break _12;
+}
+}
+}
+} while(0);
+ r0 = _2E_str76;
+ r_g0 = r0;
+ return;
+}
+
+function _ZN23btDiscreteDynamicsWorld11setNumTasksEi(sp)
+{
+ var i7;
+ var fp = sp>>2;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ return;
+}
+
+function _ZN23btDiscreteDynamicsWorld14updateVehiclesEf(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var f0;
+ var f1;
+ var f2;
+var __label__ = 0;
+ i7 = sp + -24;var g0 = i7>>2; // save stack
+ r0 = _2E_str289;
+ r1 = heap32[(fp)];
+ heap32[(g0)] = r0;
+ r0 = r1 >> 2;
+ _ZN15CProfileManager13Start_ProfileEPKc(i7);
+ r2 = heap32[(r0+63)];
+if(!(r2 <1)) //_LBB617_3
+{
+ f0 = heapFloat[(fp+1)];
+ r2 = 0;
+_3: while(true){
+ r3 = heap32[(r0+65)];
+ r4 = r2 << 2;
+ r3 = (r3 + r4)|0;
+ r3 = r3 >> 2;
+ r3 = heap32[(r3)];
+ r4 = r3 >> 2;
+ r4 = heap32[(r4)];
+ r4 = r4 >> 2;
+ r4 = heap32[(r4+2)];
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r1;
+ heapFloat[(g0+2)] = f0;
+ r2 = (r2 + 1)|0;
+ __FUNCTION_TABLE__[(r4)>>2](i7);
+ r3 = heap32[(r0+63)];
+ if(r3 >r2) //_LBB617_2
+{
+continue _3;
+}
+else{
+break _3;
+}
+}
+}
+ r0 = _ZN15CProfileManager11CurrentNodeE;
+ r0 = r0 >> 2;
+ r1 = heap32[(r0)];
+ r2 = r1 >> 2;
+ r3 = heap32[(r2+4)];
+ r3 = (r3 + -1)|0;
+ heap32[(r2+4)] = r3;
+_6: do {
+if(!(r3 !=0)) //_LBB617_9
+{
+ r3 = heap32[(r2+1)];
+ if(r3 !=0) //_LBB617_6
+{
+ r1 = sp + -8;
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = 0;
+ r3 = _ZL13gProfileClock_2E_0;
+ gettimeofday(i7);
+ r3 = r3 >> 2;
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r1 = r1 >> 2;
+ r4 = heap32[(fp+-2)];
+ r5 = heap32[(r3)];
+ r4 = (r4 - r5)|0;
+ r1 = heap32[(r1+1)];
+ r3 = heap32[(r3+1)];
+ r1 = (r1 - r3)|0;
+ r3 = (r4 * 1000000)|0;
+ r1 = (r1 + r3)|0;
+ r3 = heap32[(r2+3)];
+ r1 = (r1 - r3)|0;
+ f0 = uint(r1); //fuitos r1, f0
+ f1 = 1000;
+ f2 = heapFloat[(r2+2)];
+ f0 = f0/f1;
+ f0 = f2+f0;
+ heapFloat[(r2+2)] = f0;
+ r1 = heap32[(r2+4)];
+ if(r1 !=0) //_LBB617_9
+{
+break _6;
+}
+else{
+ r1 = heap32[(r0)];
+}
+}
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+5)];
+ heap32[(r0)] = r1;
+}
+} while(0);
+ return;
+}
+
+function _ZN15btDynamicsWorld13addConstraintEP17btTypedConstraintb(sp)
+{
+ var i7;
+ var fp = sp>>2;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ return;
+}
+
+function _ZN15btDynamicsWorld16removeConstraintEP17btTypedConstraint(sp)
+{
+ var i7;
+ var fp = sp>>2;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ return;
+}
+
+function _ZNK15btDynamicsWorld17getNumConstraintsEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = 0;
+ r_g0 = r0;
+ return;
+}
+
+function _ZN15btDynamicsWorld13getConstraintEi(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = 0;
+ r_g0 = r0;
+ return;
+}
+
+function _ZNK15btDynamicsWorld13getConstraintEi(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = 0;
+ r_g0 = r0;
+ return;
+}
+
+function _ZN15btDynamicsWorld10addVehicleEP17btActionInterface(sp)
+{
+ var i7;
+ var fp = sp>>2;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ return;
+}
+
+function _ZN15btDynamicsWorld13removeVehicleEP17btActionInterface(sp)
+{
+ var i7;
+ var fp = sp>>2;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ return;
+}
+
+function _ZN15btDynamicsWorld12addCharacterEP17btActionInterface(sp)
+{
+ var i7;
+ var fp = sp>>2;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ return;
+}
+
+function _ZN15btDynamicsWorld15removeCharacterEP17btActionInterface(sp)
+{
+ var i7;
+ var fp = sp>>2;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ return;
+}
+
+function _ZNK23btDiscreteDynamicsWorld12getWorldTypeEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = 2;
+ r_g0 = r0;
+ return;
+}
+
+function _ZNK23btDiscreteDynamicsWorld10getGravityEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = heap32[(fp+1)];
+ r0 = r0 >> 2;
+ r1 = r1 >> 2;
+ heap32[(r0)] = heap32[(r1+56)];
+ heap32[(r0+1)] = heap32[(r1+57)];
+ heap32[(r0+2)] = heap32[(r1+58)];
+ heap32[(r0+3)] = heap32[(r1+59)];
+ return;
+}
+
+function _ZN23btDiscreteDynamicsWorld10addVehicleEP17btActionInterface(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ r1 = heap32[(r1)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+15)];
+ r2 = heap32[(fp+1)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r2;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+ return;
+}
+
+function _ZN23btDiscreteDynamicsWorld13removeVehicleEP17btActionInterface(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ r1 = heap32[(r1)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+16)];
+ r2 = heap32[(fp+1)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r2;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+ return;
+}
+
+function _ZN23btDiscreteDynamicsWorld12addCharacterEP17btActionInterface(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ r1 = heap32[(r1)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+15)];
+ r2 = heap32[(fp+1)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r2;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+ return;
+}
+
+function _ZN23btDiscreteDynamicsWorld15removeCharacterEP17btActionInterface(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ r1 = heap32[(r1)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+16)];
+ r2 = heap32[(fp+1)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r2;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+ return;
+}
+
+function _ZN34btClosestNotMeConvexResultCallbackD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTVN16btCollisionWorld27ClosestConvexResultCallbackE;
+ r0 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r0)] = r1;
+ return;
+}
+
+function _ZN34btClosestNotMeConvexResultCallbackD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTVN16btCollisionWorld27ClosestConvexResultCallbackE;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZNK34btClosestNotMeConvexResultCallback14needsCollisionEP17btBroadphaseProxy(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+var __label__ = 0;
+ i7 = sp + -40;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = heap32[(fp+1)];
+ r2 = r1 >> 2;
+ r3 = r0 >> 2;
+ r2 = heap32[(r2)];
+ r4 = heap32[(r3+20)];
+ if(r2 !=r4) //_LBB635_2
+{
+ r5 = heapU16[(r0+10)>>1];
+ r6 = heapU16[(r1+4)>>1];
+ r5 = r5 & r6;
+ r5 = r5 & 65535;
+ if(r5 ==0) //_LBB635_1
+{
+__label__ = 1;
+}
+else{
+ r5 = heapU16[(r1+6)>>1];
+ r0 = heapU16[(r0+8)>>1];
+ r0 = r5 & r0;
+ r0 = r0 & 65535;
+ if(r0 ==0) //_LBB635_1
+{
+__label__ = 1;
+}
+else{
+ r0 = heap32[(r3+23)];
+ r5 = r0 >> 2;
+ r5 = heap32[(r5)];
+ r5 = r5 >> 2;
+ r5 = heap32[(r5+7)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r4;
+ heap32[(g0+2)] = r2;
+ __FUNCTION_TABLE__[(r5)>>2](i7);
+ r0 = r_g0;
+ if(r0 !=0) //_LBB635_6
+{
+ r0 = sp + -24;
+ r2 = 1;
+ r4 = r0 >> 2;
+ heap8[sp+-8] = r2;
+ heap32[(r4+3)] = 0;
+ heap32[(r4+1)] = 0;
+ heap32[(r4+2)] = 0;
+ r5 = heap32[(r3+22)];
+ r6 = r5 >> 2;
+ r6 = heap32[(r6)];
+ r3 = heap32[(r3+20)];
+ r6 = r6 >> 2;
+ r3 = r3 >> 2;
+ r6 = heap32[(r6+13)];
+ r3 = heap32[(r3+47)];
+ heap32[(g0)] = r5;
+ heap32[(g0+1)] = r3;
+ heap32[(g0+2)] = r1;
+ __FUNCTION_TABLE__[(r6)>>2](i7);
+ r1 = r_g0;
+_7: do {
+if(!(r1 ==0)) //_LBB635_21
+{
+ r1 = r1 >> 2;
+ r3 = heap32[(r1+2)];
+if(!(r3 ==0)) //_LBB635_21
+{
+ r3 = heap32[(r4+1)];
+if(!(r3 >-1)) //_LBB635_17
+{
+ r5 = heap32[(r4+2)];
+ if(r5 <0) //_LBB635_11
+{
+ r5 = heap32[(r4+3)];
+if(!(r5 ==0)) //_LBB635_15
+{
+ r6 = heapU8[sp+-8];
+if(!(r6 ==0)) //_LBB635_14
+{
+ r6 = gNumAlignedFree;
+ r6 = r6 >> 2;
+ r7 = heap32[(r6)];
+ r7 = (r7 + 1)|0;
+ r5 = r5 >> 2;
+ heap32[(r6)] = r7;
+ r5 = heap32[(r5+-1)];
+ heap32[(g0)] = r5;
+ free(i7);
+}
+ heap32[(r4+3)] = 0;
+}
+ heap8[sp+-8] = r2;
+ heap32[(r4+3)] = 0;
+ heap32[(r4+2)] = 0;
+}
+_20: while(true){
+ r2 = r3 << 2;
+ r5 = heap32[(r4+3)];
+ r2 = (r5 + r2)|0;
+ r3 = (r3 + 1)|0;
+ r2 = r2 >> 2;
+ heap32[(r2)] = 0;
+if(!(r3 !=0)) //_LBB635_16
+{
+break _20;
+}
+}
+}
+ heap32[(r4+1)] = 0;
+ r1 = heap32[(r1+2)];
+ r2 = r1 >> 2;
+ r2 = heap32[(r2)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+4)];
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r0;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ r0 = heap32[(r4+1)];
+ r1 = 0;
+_23: while(true){
+ if(r0 >r1) //_LBB635_18
+{
+ r2 = heap32[(r4+3)];
+ r3 = r1 << 2;
+ r3 = (r2 + r3)|0;
+ r3 = r3 >> 2;
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3+279)];
+ if(r3 >0) //_LBB635_25
+{
+break _23;
+}
+else{
+ r1 = (r1 + 1)|0;
+}
+}
+else{
+break _7;
+}
+}
+if(!(r2 ==0)) //_LBB635_29
+{
+ r0 = heapU8[sp+-8];
+if(!(r0 ==0)) //_LBB635_28
+{
+ r0 = gNumAlignedFree;
+ r0 = r0 >> 2;
+ r1 = heap32[(r0)];
+ r1 = (r1 + 1)|0;
+ r2 = r2 >> 2;
+ heap32[(r0)] = r1;
+ r0 = heap32[(r2+-1)];
+ heap32[(g0)] = r0;
+ free(i7);
+}
+}
+ r0 = 0;
+ r_g0 = r0;
+ return;
+}
+}
+} while(0);
+ r0 = heap32[(r4+3)];
+if(!(r0 ==0)) //_LBB635_24
+{
+ r2 = heapU8[sp+-8];
+if(!(r2 ==0)) //_LBB635_24
+{
+ r2 = gNumAlignedFree;
+ r2 = r2 >> 2;
+ r1 = heap32[(r2)];
+ r1 = (r1 + 1)|0;
+ r0 = r0 >> 2;
+ heap32[(r2)] = r1;
+ r0 = heap32[(r0+-1)];
+ heap32[(g0)] = r0;
+ free(i7);
+}
+}
+ r0 = 1;
+ r_g0 = r0;
+ return;
+}
+else{
+ r0 = 1;
+__label__ = 28;
+}
+}
+}
+}
+else{
+__label__ = 1;
+}
+if (__label__ == 1){
+ r0 = 0;
+}
+ r0 = r0 & 255;
+ r_g0 = r0;
+ return;
+}
+
+function _ZN34btClosestNotMeConvexResultCallback15addSingleResultERN16btCollisionWorld17LocalConvexResultEb(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ r1 = r0 >> 2;
+ r2 = heap32[(fp)];
+ r3 = heap32[(r1)];
+ r4 = r2 >> 2;
+ r5 = heap32[(r4+20)];
+if(!(r3 ==r5)) //_LBB636_4
+{
+ r3 = heapU8[r3+204];
+ r3 = r3 & 4;
+if(!(r3 !=0)) //_LBB636_4
+{
+ f0 = heapFloat[(r4+7)];
+ f1 = heapFloat[(r4+3)];
+ f2 = heapFloat[(r4+8)];
+ f3 = heapFloat[(r4+4)];
+ f4 = heapFloat[(r1+2)];
+ f0 = f0-f1;
+ f1 = heapFloat[(r1+3)];
+ f2 = f2-f3;
+ f3 = heapFloat[(r4+9)];
+ f5 = heapFloat[(r4+5)];
+ f0 = f4*f0;
+ f1 = f1*f2;
+ f2 = heapFloat[(r1+4)];
+ f3 = f3-f5;
+ f4 = heapFloat[(r4+21)];
+ f0 = f0+f1;
+ f1 = f2*f3;
+ f0 = f0+f1;
+ f1 = -f4;
+if(!(f0 >=f1)) //_LBB636_4
+{
+ r1 = heap32[(fp+2)];
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = r0;
+ heap32[(g0+2)] = r1;
+ _ZN16btCollisionWorld27ClosestConvexResultCallback15addSingleResultERNS_17LocalConvexResultEb(i7);
+ return;
+}
+}
+}
+ f0 = 1;
+ f_g0 = f0;
+ return;
+}
+
+function _ZN23btDiscreteDynamicsWorld19getConstraintSolverEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r0 = heap32[(r0+44)];
+ r_g0 = r0;
+ return;
+}
+
+function _ZNK23btDiscreteDynamicsWorld17getNumConstraintsEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r0 = heap32[(r0+47)];
+ r_g0 = r0;
+ return;
+}
+
+function _ZN23btDiscreteDynamicsWorld13getConstraintEi(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r1 = heap32[(fp+1)];
+ r0 = heap32[(r0+49)];
+ r1 = r1 << 2;
+ r0 = (r0 + r1)|0;
+ r0 = r0 >> 2;
+ r0 = heap32[(r0)];
+ r_g0 = r0;
+ return;
+}
+
+function _ZN23btDiscreteDynamicsWorld11clearForcesEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r1 = heap32[(r0+52)];
+if(!(r1 <1)) //_LBB640_3
+{
+ r1 = 0;
+_3: while(true){
+ r2 = heap32[(r0+54)];
+ r3 = r1 << 2;
+ r2 = (r2 + r3)|0;
+ r2 = r2 >> 2;
+ r2 = heap32[(r2)];
+ r2 = r2 >> 2;
+ r1 = (r1 + 1)|0;
+ heap32[(r2+101)] = 0;
+ heap32[(r2+102)] = 0;
+ heap32[(r2+103)] = 0;
+ heap32[(r2+104)] = 0;
+ heap32[(r2+105)] = 0;
+ heap32[(r2+106)] = 0;
+ heap32[(r2+107)] = 0;
+ heap32[(r2+108)] = 0;
+ r2 = heap32[(r0+52)];
+ if(r2 >r1) //_LBB640_2
+{
+continue _3;
+}
+else{
+break _3;
+}
+}
+}
+ return;
+}
+
+function _ZNK23btDiscreteDynamicsWorld13getConstraintEi(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r1 = heap32[(fp+1)];
+ r0 = heap32[(r0+49)];
+ r1 = r1 << 2;
+ r0 = (r0 + r1)|0;
+ r0 = r0 >> 2;
+ r0 = heap32[(r0)];
+ r_g0 = r0;
+ return;
+}
+
+function _ZN23btDiscreteDynamicsWorld12removeActionEP17btActionInterface(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r1 = heap32[(fp+1)];
+ r2 = heap32[(r0+63)];
+ r3 = 0;
+_1: while(true){
+ if(r2 >r3) //_LBB642_1
+{
+ r4 = heap32[(r0+65)];
+ r5 = r3 << 2;
+ r4 = (r4 + r5)|0;
+ r4 = r4 >> 2;
+ r4 = heap32[(r4)];
+ if(r4 !=r1) //_LBB642_3
+{
+ r3 = (r3 + 1)|0;
+continue _1;
+}
+else{
+__label__ = 5;
+break _1;
+}
+}
+else{
+__label__ = 4;
+break _1;
+}
+}
+if (__label__ == 4){
+ r3 = r2;
+}
+if(!(r2 <=r3)) //_LBB642_8
+{
+ r1 = (r2 + -1)|0;
+ r2 = r3 << 2;
+ r3 = heap32[(r0+65)];
+ r1 = r1 << 2;
+ r2 = (r3 + r2)|0;
+ r3 = (r3 + r1)|0;
+ r2 = r2 >> 2;
+ r3 = r3 >> 2;
+ r4 = heap32[(r2)];
+ r3 = heap32[(r3)];
+ heap32[(r2)] = r3;
+ r2 = heap32[(r0+65)];
+ r1 = (r2 + r1)|0;
+ r1 = r1 >> 2;
+ heap32[(r1)] = r4;
+ r1 = heap32[(r0+63)];
+ r1 = (r1 + -1)|0;
+ heap32[(r0+63)] = r1;
+}
+ return;
+}
+
+function _ZZN23btDiscreteDynamicsWorld16solveConstraintsER19btContactSolverInfoEN27InplaceSolverIslandCallbackD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTVZN23btDiscreteDynamicsWorld16solveConstraintsER19btContactSolverInfoE27InplaceSolverIslandCallback;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ r1 = heap32[(r2+21)];
+if(!(r1 ==0)) //_LBB643_4
+{
+ r3 = heapU8[r0+88];
+if(!(r3 ==0)) //_LBB643_3
+{
+ r3 = gNumAlignedFree;
+ r3 = r3 >> 2;
+ r4 = heap32[(r3)];
+ r4 = (r4 + 1)|0;
+ r1 = r1 >> 2;
+ heap32[(r3)] = r4;
+ r1 = heap32[(r1+-1)];
+ heap32[(g0)] = r1;
+ free(i7);
+}
+ heap32[(r2+21)] = 0;
+}
+ r1 = 1;
+ heap8[r0+88] = r1;
+ heap32[(r2+21)] = 0;
+ heap32[(r2+19)] = 0;
+ heap32[(r2+20)] = 0;
+ r3 = heap32[(r2+16)];
+if(!(r3 ==0)) //_LBB643_8
+{
+ r4 = heapU8[r0+68];
+if(!(r4 ==0)) //_LBB643_7
+{
+ r4 = gNumAlignedFree;
+ r4 = r4 >> 2;
+ r5 = heap32[(r4)];
+ r5 = (r5 + 1)|0;
+ r3 = r3 >> 2;
+ heap32[(r4)] = r5;
+ r3 = heap32[(r3+-1)];
+ heap32[(g0)] = r3;
+ free(i7);
+}
+ heap32[(r2+16)] = 0;
+}
+ heap8[r0+68] = r1;
+ heap32[(r2+16)] = 0;
+ heap32[(r2+14)] = 0;
+ heap32[(r2+15)] = 0;
+ r3 = heap32[(r2+11)];
+if(!(r3 ==0)) //_LBB643_12
+{
+ r4 = heapU8[r0+48];
+if(!(r4 ==0)) //_LBB643_11
+{
+ r4 = gNumAlignedFree;
+ r4 = r4 >> 2;
+ r5 = heap32[(r4)];
+ r5 = (r5 + 1)|0;
+ r3 = r3 >> 2;
+ heap32[(r4)] = r5;
+ r3 = heap32[(r3+-1)];
+ heap32[(g0)] = r3;
+ free(i7);
+}
+ heap32[(r2+11)] = 0;
+}
+ heap8[r0+48] = r1;
+ heap32[(r2+11)] = 0;
+ heap32[(r2+9)] = 0;
+ heap32[(r2+10)] = 0;
+ return;
+}
+
+function _ZZN23btDiscreteDynamicsWorld16solveConstraintsER19btContactSolverInfoEN27InplaceSolverIslandCallbackD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTVZN23btDiscreteDynamicsWorld16solveConstraintsER19btContactSolverInfoE27InplaceSolverIslandCallback;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ r1 = heap32[(r2+21)];
+if(!(r1 ==0)) //_LBB644_4
+{
+ r3 = heapU8[r0+88];
+if(!(r3 ==0)) //_LBB644_3
+{
+ r3 = gNumAlignedFree;
+ r3 = r3 >> 2;
+ r4 = heap32[(r3)];
+ r4 = (r4 + 1)|0;
+ r1 = r1 >> 2;
+ heap32[(r3)] = r4;
+ r1 = heap32[(r1+-1)];
+ heap32[(g0)] = r1;
+ free(i7);
+}
+ heap32[(r2+21)] = 0;
+}
+ r1 = 1;
+ heap8[r0+88] = r1;
+ heap32[(r2+21)] = 0;
+ heap32[(r2+19)] = 0;
+ heap32[(r2+20)] = 0;
+ r3 = heap32[(r2+16)];
+if(!(r3 ==0)) //_LBB644_8
+{
+ r4 = heapU8[r0+68];
+if(!(r4 ==0)) //_LBB644_7
+{
+ r4 = gNumAlignedFree;
+ r4 = r4 >> 2;
+ r5 = heap32[(r4)];
+ r5 = (r5 + 1)|0;
+ r3 = r3 >> 2;
+ heap32[(r4)] = r5;
+ r3 = heap32[(r3+-1)];
+ heap32[(g0)] = r3;
+ free(i7);
+}
+ heap32[(r2+16)] = 0;
+}
+ heap8[r0+68] = r1;
+ heap32[(r2+16)] = 0;
+ heap32[(r2+14)] = 0;
+ heap32[(r2+15)] = 0;
+ r3 = heap32[(r2+11)];
+if(!(r3 ==0)) //_LBB644_12
+{
+ r4 = heapU8[r0+48];
+if(!(r4 ==0)) //_LBB644_11
+{
+ r4 = gNumAlignedFree;
+ r4 = r4 >> 2;
+ r5 = heap32[(r4)];
+ r5 = (r5 + 1)|0;
+ r3 = r3 >> 2;
+ heap32[(r4)] = r5;
+ r3 = heap32[(r3+-1)];
+ heap32[(g0)] = r3;
+ free(i7);
+}
+ heap32[(r2+11)] = 0;
+}
+ heap8[r0+48] = r1;
+ heap32[(r2+11)] = 0;
+ heap32[(r2+9)] = 0;
+ heap32[(r2+10)] = 0;
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZZN23btDiscreteDynamicsWorld16solveConstraintsER19btContactSolverInfoEN27InplaceSolverIslandCallback13ProcessIslandEPP17btCollisionObjectiPP20btPersistentManifoldii(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+ var r13;
+ var r14;
+ var r15;
+var __label__ = 0;
+ i7 = sp + -48;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ r2 = heap32[(fp+5)];
+ r3 = heap32[(fp+1)];
+ r4 = heap32[(fp+2)];
+ r5 = heap32[(fp+3)];
+ r6 = heap32[(fp+4)];
+ r7 = heap32[(r1+4)];
+_1: do {
+ if(r2 <0) //_LBB645_2
+{
+ r0 = 0;
+ r0 = (r0 - r6)|0;
+ if(r7 ==r0) //_LBB645_87
+{
+break _1;
+}
+else{
+ r0 = heap32[(r1+2)];
+ r2 = r0 >> 2;
+ r2 = heap32[(r2)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+3)];
+ r8 = heap32[(r1+7)];
+ r9 = heap32[(r1+6)];
+ r10 = heap32[(r1+5)];
+ r11 = heap32[(r1+1)];
+ r1 = heap32[(r1+3)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r3;
+ heap32[(g0+2)] = r4;
+ heap32[(g0+3)] = r5;
+ heap32[(g0+4)] = r6;
+ heap32[(g0+5)] = r1;
+ heap32[(g0+6)] = r7;
+ heap32[(g0+7)] = r11;
+ heap32[(g0+8)] = r10;
+ heap32[(g0+9)] = r9;
+ heap32[(g0+10)] = r8;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ return;
+}
+}
+else{
+ r8 = 1;
+ r9 = 4;
+ r10 = 0;
+_5: while(true){
+ if(r7 >r10) //_LBB645_4
+{
+ r11 = heap32[(r1+3)];
+ r12 = r10 << 2;
+ r12 = (r11 + r12)|0;
+ r12 = r12 >> 2;
+ r12 = heap32[(r12)];
+ r12 = r12 >> 2;
+ r13 = heap32[(r12+5)];
+ r13 = r13 >> 2;
+ r13 = heap32[(r13+52)];
+ if(r13 <0) //_LBB645_6
+{
+ r13 = heap32[(r12+6)];
+ r13 = r13 >> 2;
+ r13 = heap32[(r13+52)];
+}
+ r10 = (r10 + 1)|0;
+ r9 = (r9 + -4)|0;
+ r8 = (r8 + -1)|0;
+ if(r13 ==r2) //_LBB645_10
+{
+__label__ = 9;
+break _5;
+}
+else{
+__label__ = 7;
+}
+}
+else{
+__label__ = 8;
+break _5;
+}
+}
+_11: do {
+switch(__label__ ){//multiple entries
+case 9:
+ r10 = r7 > r10 ? r7 : r10;
+ r7 = (r11 - r9)|0;
+ r9 = (r10 + r8)|0;
+ r8 = 0;
+ r10 = r7;
+_13: while(true){
+ r11 = r10 >> 2;
+ r11 = heap32[(r11)];
+ r11 = r11 >> 2;
+ r12 = heap32[(r11+5)];
+ r12 = r12 >> 2;
+ r12 = heap32[(r12+52)];
+ if(r12 <0) //_LBB645_13
+{
+ r12 = heap32[(r11+6)];
+ r12 = r12 >> 2;
+ r12 = heap32[(r12+52)];
+}
+ r11 = r12 == r2;
+ r11 = r11 & 1;
+ r9 = (r9 + -1)|0;
+ r8 = (r11 + r8)|0;
+ r10 = (r10 + 4)|0;
+if(!(r9 !=0)) //_LBB645_11
+{
+break _11;
+}
+}
+break;
+case 8:
+ r7 = 0;
+ r8 = r7;
+break;
+}
+} while(0);
+ r2 = heap32[(r1+1)];
+ r9 = r2 >> 2;
+ r9 = heap32[(r9+17)];
+ if(r9 <2) //_LBB645_17
+{
+ r0 = 0;
+ r0 = (r0 - r6)|0;
+ if(r8 ==r0) //_LBB645_87
+{
+break _1;
+}
+else{
+ r0 = heap32[(r1+2)];
+ r9 = r0 >> 2;
+ r9 = heap32[(r9)];
+ r9 = r9 >> 2;
+ r9 = heap32[(r9+3)];
+ r10 = heap32[(r1+7)];
+ r11 = heap32[(r1+6)];
+ r1 = heap32[(r1+5)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r3;
+ heap32[(g0+2)] = r4;
+ heap32[(g0+3)] = r5;
+ heap32[(g0+4)] = r6;
+ heap32[(g0+5)] = r7;
+ heap32[(g0+6)] = r8;
+ heap32[(g0+7)] = r2;
+ heap32[(g0+8)] = r1;
+ heap32[(g0+9)] = r11;
+ heap32[(g0+10)] = r10;
+ __FUNCTION_TABLE__[(r9)>>2](i7);
+ return;
+}
+}
+else{
+_24: do {
+ if(r4 >0) //_LBB645_19
+{
+ r2 = heap32[(r1+9)];
+_26: while(true){
+ r9 = heap32[(r1+10)];
+ if(r9 ==r2) //_LBB645_22
+{
+ r10 = 1;
+ r11 = r2 << 1;
+ r11 = r2 == 0 ? r10 : r11;
+if(!(r9 >=r11)) //_LBB645_21
+{
+ if(r11 !=0) //_LBB645_25
+{
+ r9 = gNumAlignedAllocs;
+ r9 = r9 >> 2;
+ r12 = heap32[(r9)];
+ r13 = r11 << 2;
+ r12 = (r12 + 1)|0;
+ r13 = r13 | 3;
+ heap32[(r9)] = r12;
+ r9 = (r13 + 16)|0;
+ heap32[(g0)] = r9;
+ malloc(i7);
+ r9 = r_g0;
+ if(r9 !=0) //_LBB645_27
+{
+ r12 = 0;
+ r13 = (r9 + 4)|0;
+ r12 = (r12 - r13)|0;
+ r12 = r12 & 15;
+ r12 = (r9 + r12)|0;
+ r13 = (r12 + 4)|0;
+ r12 = r12 >> 2;
+ heap32[(r12)] = r9;
+ r9 = r13;
+}
+}
+else{
+ r9 = 0;
+}
+ if(r2 <1) //_LBB645_30
+{
+ r13 = heap32[(r1+11)];
+}
+else{
+ r12 = 0;
+_39: while(true){
+ r13 = heap32[(r1+11)];
+ r14 = r12 << 2;
+ r15 = (r13 + r14)|0;
+ r15 = r15 >> 2;
+ r14 = (r9 + r14)|0;
+ r15 = heap32[(r15)];
+ r12 = (r12 + 1)|0;
+ r14 = r14 >> 2;
+ heap32[(r14)] = r15;
+if(!(r2 !=r12)) //_LBB645_31
+{
+break _39;
+}
+}
+}
+ if(r13 !=0) //_LBB645_34
+{
+ r12 = heapU8[r0+48];
+ if(r12 !=0) //_LBB645_36
+{
+ r2 = gNumAlignedFree;
+ r2 = r2 >> 2;
+ r12 = heap32[(r2)];
+ r12 = (r12 + 1)|0;
+ r13 = r13 >> 2;
+ heap32[(r2)] = r12;
+ r2 = heap32[(r13+-1)];
+ heap32[(g0)] = r2;
+ free(i7);
+ r2 = heap32[(r1+9)];
+}
+ heap32[(r1+11)] = 0;
+}
+ heap8[r0+48] = r10;
+ heap32[(r1+11)] = r9;
+ heap32[(r1+10)] = r11;
+}
+}
+ r9 = r3 >> 2;
+ r2 = r2 << 2;
+ r10 = heap32[(r1+11)];
+ r2 = (r10 + r2)|0;
+ r9 = heap32[(r9)];
+ r2 = r2 >> 2;
+ heap32[(r2)] = r9;
+ r2 = heap32[(r1+9)];
+ r2 = (r2 + 1)|0;
+ r4 = (r4 + -1)|0;
+ r3 = (r3 + 4)|0;
+ heap32[(r1+9)] = r2;
+if(!(r4 !=0)) //_LBB645_20
+{
+break _24;
+}
+}
+}
+} while(0);
+_50: do {
+if(!(r6 <1)) //_LBB645_62
+{
+ r2 = heap32[(r1+14)];
+_52: while(true){
+ r3 = heap32[(r1+15)];
+ if(r3 ==r2) //_LBB645_44
+{
+ r4 = 1;
+ r9 = r2 << 1;
+ r9 = r2 == 0 ? r4 : r9;
+if(!(r3 >=r9)) //_LBB645_43
+{
+ if(r9 !=0) //_LBB645_47
+{
+ r3 = gNumAlignedAllocs;
+ r3 = r3 >> 2;
+ r10 = heap32[(r3)];
+ r11 = r9 << 2;
+ r10 = (r10 + 1)|0;
+ r11 = r11 | 3;
+ heap32[(r3)] = r10;
+ r3 = (r11 + 16)|0;
+ heap32[(g0)] = r3;
+ malloc(i7);
+ r3 = r_g0;
+ if(r3 !=0) //_LBB645_49
+{
+ r10 = 0;
+ r11 = (r3 + 4)|0;
+ r10 = (r10 - r11)|0;
+ r10 = r10 & 15;
+ r10 = (r3 + r10)|0;
+ r11 = (r10 + 4)|0;
+ r10 = r10 >> 2;
+ heap32[(r10)] = r3;
+ r3 = r11;
+}
+}
+else{
+ r3 = 0;
+}
+ if(r2 <1) //_LBB645_52
+{
+ r11 = heap32[(r1+16)];
+}
+else{
+ r10 = 0;
+_65: while(true){
+ r11 = heap32[(r1+16)];
+ r12 = r10 << 2;
+ r13 = (r11 + r12)|0;
+ r13 = r13 >> 2;
+ r12 = (r3 + r12)|0;
+ r13 = heap32[(r13)];
+ r10 = (r10 + 1)|0;
+ r12 = r12 >> 2;
+ heap32[(r12)] = r13;
+if(!(r2 !=r10)) //_LBB645_53
+{
+break _65;
+}
+}
+}
+ if(r11 !=0) //_LBB645_56
+{
+ r10 = heapU8[r0+68];
+ if(r10 !=0) //_LBB645_58
+{
+ r2 = gNumAlignedFree;
+ r2 = r2 >> 2;
+ r10 = heap32[(r2)];
+ r10 = (r10 + 1)|0;
+ r11 = r11 >> 2;
+ heap32[(r2)] = r10;
+ r2 = heap32[(r11+-1)];
+ heap32[(g0)] = r2;
+ free(i7);
+ r2 = heap32[(r1+14)];
+}
+ heap32[(r1+16)] = 0;
+}
+ heap8[r0+68] = r4;
+ heap32[(r1+16)] = r3;
+ heap32[(r1+15)] = r9;
+}
+}
+ r3 = r5 >> 2;
+ r2 = r2 << 2;
+ r4 = heap32[(r1+16)];
+ r2 = (r4 + r2)|0;
+ r3 = heap32[(r3)];
+ r2 = r2 >> 2;
+ heap32[(r2)] = r3;
+ r2 = heap32[(r1+14)];
+ r2 = (r2 + 1)|0;
+ r6 = (r6 + -1)|0;
+ r5 = (r5 + 4)|0;
+ heap32[(r1+14)] = r2;
+if(!(r6 !=0)) //_LBB645_42
+{
+break _50;
+}
+}
+}
+} while(0);
+_76: do {
+ if(r8 >0) //_LBB645_64
+{
+ r2 = heap32[(r1+19)];
+_78: while(true){
+ r3 = heap32[(r1+20)];
+ if(r3 ==r2) //_LBB645_67
+{
+ r4 = 1;
+ r5 = r2 << 1;
+ r5 = r2 == 0 ? r4 : r5;
+if(!(r3 >=r5)) //_LBB645_66
+{
+ if(r5 !=0) //_LBB645_70
+{
+ r3 = gNumAlignedAllocs;
+ r3 = r3 >> 2;
+ r6 = heap32[(r3)];
+ r9 = r5 << 2;
+ r6 = (r6 + 1)|0;
+ r9 = r9 | 3;
+ heap32[(r3)] = r6;
+ r3 = (r9 + 16)|0;
+ heap32[(g0)] = r3;
+ malloc(i7);
+ r3 = r_g0;
+ if(r3 !=0) //_LBB645_72
+{
+ r6 = 0;
+ r9 = (r3 + 4)|0;
+ r6 = (r6 - r9)|0;
+ r6 = r6 & 15;
+ r6 = (r3 + r6)|0;
+ r9 = (r6 + 4)|0;
+ r6 = r6 >> 2;
+ heap32[(r6)] = r3;
+ r3 = r9;
+}
+}
+else{
+ r3 = 0;
+}
+ if(r2 <1) //_LBB645_75
+{
+ r9 = heap32[(r1+21)];
+}
+else{
+ r6 = 0;
+_91: while(true){
+ r9 = heap32[(r1+21)];
+ r10 = r6 << 2;
+ r11 = (r9 + r10)|0;
+ r11 = r11 >> 2;
+ r10 = (r3 + r10)|0;
+ r11 = heap32[(r11)];
+ r6 = (r6 + 1)|0;
+ r10 = r10 >> 2;
+ heap32[(r10)] = r11;
+if(!(r2 !=r6)) //_LBB645_76
+{
+break _91;
+}
+}
+}
+ if(r9 !=0) //_LBB645_79
+{
+ r6 = heapU8[r0+88];
+ if(r6 !=0) //_LBB645_81
+{
+ r2 = gNumAlignedFree;
+ r2 = r2 >> 2;
+ r6 = heap32[(r2)];
+ r6 = (r6 + 1)|0;
+ r9 = r9 >> 2;
+ heap32[(r2)] = r6;
+ r2 = heap32[(r9+-1)];
+ heap32[(g0)] = r2;
+ free(i7);
+ r2 = heap32[(r1+19)];
+}
+ heap32[(r1+21)] = 0;
+}
+ heap8[r0+88] = r4;
+ heap32[(r1+21)] = r3;
+ heap32[(r1+20)] = r5;
+}
+}
+ r3 = r7 >> 2;
+ r2 = r2 << 2;
+ r4 = heap32[(r1+21)];
+ r2 = (r4 + r2)|0;
+ r3 = heap32[(r3)];
+ r2 = r2 >> 2;
+ heap32[(r2)] = r3;
+ r2 = heap32[(r1+19)];
+ r2 = (r2 + 1)|0;
+ r8 = (r8 + -1)|0;
+ r7 = (r7 + 4)|0;
+ heap32[(r1+19)] = r2;
+if(!(r8 !=0)) //_LBB645_65
+{
+break _76;
+}
+}
+}
+else{
+ r2 = heap32[(r1+19)];
+}
+} while(0);
+ r3 = heap32[(r1+1)];
+ r3 = r3 >> 2;
+ r1 = heap32[(r1+14)];
+ r1 = (r1 + r2)|0;
+ r2 = heap32[(r3+17)];
+if(!(r1 <=r2)) //_LBB645_87
+{
+ heap32[(g0)] = r0;
+ _ZZN23btDiscreteDynamicsWorld16solveConstraintsER19btContactSolverInfoEN27InplaceSolverIslandCallback18processConstraintsEv(i7);
+}
+}
+}
+} while(0);
+ return;
+}
+
+function _ZN20btAlignedObjectArrayIP17btTypedConstraintE17quickSortInternalI33btSortConstraintOnIslandPredicateEEvT_ii(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+ var r13;
+ var r14;
+ var r15;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+2)];
+ r1 = heap32[(fp+1)];
+ r2 = (r0 + r1)|0;
+ r3 = r2 >>> 31;
+ r4 = heap32[(fp)];
+ r2 = (r2 + r3)|0;
+ r3 = r4 >> 2;
+ r2 = r2 & 2147483646;
+ r5 = heap32[(r3+3)];
+ r2 = r2 << 1;
+ r2 = (r5 + r2)|0;
+ r2 = r2 >> 2;
+ r2 = heap32[(r2)];
+ r5 = r1;
+ r6 = r0;
+_1: while(true){
+ r7 = r2 >> 2;
+ r8 = heap32[(r7+5)];
+ r8 = r8 >> 2;
+ r9 = heap32[(r3+3)];
+ r8 = heap32[(r8+52)];
+_3: while(true){
+ r10 = r5 << 2;
+ r10 = (r9 + r10)|0;
+ r10 = r10 >> 2;
+ r11 = heap32[(r10)];
+ if(r8 <0) //_LBB646_5
+{
+ r12 = heap32[(r7+6)];
+ r12 = r12 >> 2;
+ r12 = heap32[(r12+52)];
+}
+else{
+ r12 = r8;
+}
+ r13 = r11 >> 2;
+ r14 = heap32[(r13+5)];
+ r14 = r14 >> 2;
+ r14 = heap32[(r14+52)];
+ if(r14 <0) //_LBB646_8
+{
+ r14 = heap32[(r13+6)];
+ r14 = r14 >> 2;
+ r14 = heap32[(r14+52)];
+}
+ if(r14 <r12) //_LBB646_2
+{
+ r5 = (r5 + 1)|0;
+continue _3;
+}
+else{
+break _3;
+}
+}
+_13: while(true){
+ r12 = r6 << 2;
+ r13 = (r9 + r12)|0;
+ r13 = r13 >> 2;
+ r13 = heap32[(r13)];
+ r14 = r13 >> 2;
+ r15 = heap32[(r14+5)];
+ r15 = r15 >> 2;
+ r15 = heap32[(r15+52)];
+ if(r15 <0) //_LBB646_13
+{
+ r15 = heap32[(r14+6)];
+ r15 = r15 >> 2;
+ r15 = heap32[(r15+52)];
+}
+ if(r8 <0) //_LBB646_16
+{
+ r14 = heap32[(r7+6)];
+ r14 = r14 >> 2;
+ r14 = heap32[(r14+52)];
+}
+else{
+ r14 = r8;
+}
+ if(r14 <r15) //_LBB646_10
+{
+ r6 = (r6 + -1)|0;
+continue _13;
+}
+else{
+break _13;
+}
+}
+ if(r5 <=r6) //_LBB646_20
+{
+ heap32[(r10)] = r13;
+ r7 = heap32[(r3+3)];
+ r7 = (r7 + r12)|0;
+ r5 = (r5 + 1)|0;
+ r6 = (r6 + -1)|0;
+ r7 = r7 >> 2;
+ heap32[(r7)] = r11;
+}
+ if(r5 <=r6) //_LBB646_1
+{
+continue _1;
+}
+else{
+break _1;
+}
+}
+if(!(r6 <=r1)) //_LBB646_24
+{
+ heap32[(g0)] = r4;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = r6;
+ _ZN20btAlignedObjectArrayIP17btTypedConstraintE17quickSortInternalI33btSortConstraintOnIslandPredicateEEvT_ii(i7);
+}
+if(!(r5 >=r0)) //_LBB646_26
+{
+ heap32[(g0)] = r4;
+ heap32[(g0+1)] = r5;
+ heap32[(g0+2)] = r0;
+ _ZN20btAlignedObjectArrayIP17btTypedConstraintE17quickSortInternalI33btSortConstraintOnIslandPredicateEEvT_ii(i7);
+}
+ return;
+}
+
+function _ZN23btDiscreteDynamicsWorld9serializeEP12btSerializer(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+var __label__ = 0;
+ i7 = sp + -24;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ r1 = r0 >> 2;
+ r2 = heap32[(r1)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+8)];
+ r3 = heap32[(fp)];
+ heap32[(g0)] = r0;
+ r4 = r3 >> 2;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ r2 = heap32[(r4+2)];
+if(!(r2 <1)) //_LBB647_5
+{
+ r2 = 0;
+_3: while(true){
+ r5 = heap32[(r4+4)];
+ r6 = r2 << 2;
+ r5 = (r5 + r6)|0;
+ r5 = r5 >> 2;
+ r5 = heap32[(r5)];
+ r6 = heapU8[r5+232];
+ r6 = r6 & 2;
+if(!(r6 ==0)) //_LBB647_4
+{
+ r6 = r5 >> 2;
+ r7 = heap32[(r6)];
+ r7 = r7 >> 2;
+ r7 = heap32[(r7+4)];
+ heap32[(g0)] = r5;
+ __FUNCTION_TABLE__[(r7)>>2](i7);
+ r8 = heap32[(r1)];
+ r8 = r8 >> 2;
+ r8 = heap32[(r8+4)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r_g0;
+ heap32[(g0+2)] = 1;
+ __FUNCTION_TABLE__[(r8)>>2](i7);
+ r7 = r_g0;
+ r6 = heap32[(r6)];
+ r6 = r6 >> 2;
+ r8 = r7 >> 2;
+ r6 = heap32[(r6+5)];
+ r8 = heap32[(r8+2)];
+ heap32[(g0)] = r5;
+ heap32[(g0+1)] = r8;
+ heap32[(g0+2)] = r0;
+ __FUNCTION_TABLE__[(r6)>>2](i7);
+ r8 = heap32[(r1)];
+ r8 = r8 >> 2;
+ r8 = heap32[(r8+5)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r7;
+ heap32[(g0+2)] = r_g0;
+ heap32[(g0+3)] = 1497645650;
+ heap32[(g0+4)] = r5;
+ __FUNCTION_TABLE__[(r8)>>2](i7);
+}
+ r2 = (r2 + 1)|0;
+ r5 = heap32[(r4+2)];
+ if(r5 >r2) //_LBB647_2
+{
+continue _3;
+}
+else{
+break _3;
+}
+}
+}
+ r2 = heap32[(r4+47)];
+_9: do {
+if(!(r2 <1)) //_LBB647_8
+{
+ r2 = 0;
+_11: while(true){
+ r5 = r2 << 2;
+ r6 = heap32[(r4+49)];
+ r5 = (r6 + r5)|0;
+ r5 = r5 >> 2;
+ r5 = heap32[(r5)];
+ r6 = r5 >> 2;
+ r7 = heap32[(r6)];
+ r7 = r7 >> 2;
+ r7 = heap32[(r7+9)];
+ heap32[(g0)] = r5;
+ __FUNCTION_TABLE__[(r7)>>2](i7);
+ r8 = heap32[(r1)];
+ r8 = r8 >> 2;
+ r8 = heap32[(r8+4)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r_g0;
+ heap32[(g0+2)] = 1;
+ __FUNCTION_TABLE__[(r8)>>2](i7);
+ r7 = r_g0;
+ r6 = heap32[(r6)];
+ r6 = r6 >> 2;
+ r8 = r7 >> 2;
+ r6 = heap32[(r6+10)];
+ r8 = heap32[(r8+2)];
+ heap32[(g0)] = r5;
+ heap32[(g0+1)] = r8;
+ heap32[(g0+2)] = r0;
+ __FUNCTION_TABLE__[(r6)>>2](i7);
+ r8 = heap32[(r1)];
+ r8 = r8 >> 2;
+ r8 = heap32[(r8+5)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r7;
+ heap32[(g0+2)] = r_g0;
+ heap32[(g0+3)] = 1397641027;
+ heap32[(g0+4)] = r5;
+ r2 = (r2 + 1)|0;
+ __FUNCTION_TABLE__[(r8)>>2](i7);
+ r5 = heap32[(r4+47)];
+ if(r5 >r2) //_LBB647_7
+{
+continue _11;
+}
+else{
+break _9;
+}
+}
+}
+} while(0);
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r0;
+ _ZN16btCollisionWorld25serializeCollisionObjectsEP12btSerializer(i7);
+ r1 = heap32[(r1)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+9)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+ return;
+}
+
+function _ZN23btDiscreteDynamicsWorld19setConstraintSolverEP18btConstraintSolver(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = heapU8[r0+245];
+if(!(r1 ==0)) //_LBB648_3
+{
+ r1 = r0 >> 2;
+ r1 = heap32[(r1+44)];
+if(!(r1 ==0)) //_LBB648_3
+{
+ r2 = gNumAlignedFree;
+ r2 = r2 >> 2;
+ r3 = heap32[(r2)];
+ r3 = (r3 + 1)|0;
+ r1 = r1 >> 2;
+ heap32[(r2)] = r3;
+ r1 = heap32[(r1+-1)];
+ heap32[(g0)] = r1;
+ free(i7);
+}
+}
+ r1 = heap32[(fp+1)];
+ r2 = 0;
+ r3 = r0 >> 2;
+ heap8[r0+245] = r2;
+ heap32[(r3+44)] = r1;
+ return;
+}
+
+function _ZN23btDiscreteDynamicsWorld25predictUnconstraintMotionEf(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+var __label__ = 0;
+ i7 = sp + -40;var g0 = i7>>2; // save stack
+ r0 = _2E_str87;
+ r1 = heap32[(fp)];
+ heap32[(g0)] = r0;
+ r0 = r1 >> 2;
+ _ZN15CProfileManager13Start_ProfileEPKc(i7);
+ r1 = heap32[(r0+52)];
+if(!(r1 <1)) //_LBB649_5
+{
+ f0 = heapFloat[(fp+1)];
+ r1 = 0;
+_3: while(true){
+ r2 = heap32[(r0+54)];
+ r3 = r1 << 2;
+ r2 = (r2 + r3)|0;
+ r2 = r2 >> 2;
+ r2 = heap32[(r2)];
+ r3 = heapU8[r2+204];
+ r3 = r3 & 3;
+if(!(r3 !=0)) //_LBB649_4
+{
+ heap32[(g0)] = r2;
+ heapFloat[(g0+1)] = f0;
+ _ZN11btRigidBody19integrateVelocitiesEf(i7);
+ heap32[(g0)] = r2;
+ heapFloat[(g0+1)] = f0;
+ _ZN11btRigidBody12applyDampingEf(i7);
+ r3 = r2 >> 2;
+ f1 = heapFloat[(r3+76)];
+ f2 = heapFloat[(r3+77)];
+ f3 = heapFloat[(r3+78)];
+ r3 = (r2 + 4)|0;
+ r4 = (r2 + 320)|0;
+ r2 = (r2 + 68)|0;
+ heap32[(g0)] = r3;
+ heapFloat[(g0+1)] = f1;
+ heapFloat[(g0+2)] = f2;
+ heapFloat[(g0+3)] = f3;
+ heap32[(g0+4)] = r4;
+ heapFloat[(g0+5)] = f0;
+ heap32[(g0+6)] = r2;
+ _ZN15btTransformUtil18integrateTransformERK11btTransformRK9btVector3S5_fRS0_(i7);
+}
+ r1 = (r1 + 1)|0;
+ r2 = heap32[(r0+52)];
+ if(r2 >r1) //_LBB649_2
+{
+continue _3;
+}
+else{
+break _3;
+}
+}
+}
+ r0 = _ZN15CProfileManager11CurrentNodeE;
+ r0 = r0 >> 2;
+ r1 = heap32[(r0)];
+ r2 = r1 >> 2;
+ r3 = heap32[(r2+4)];
+ r3 = (r3 + -1)|0;
+ heap32[(r2+4)] = r3;
+_9: do {
+if(!(r3 !=0)) //_LBB649_11
+{
+ r3 = heap32[(r2+1)];
+ if(r3 !=0) //_LBB649_8
+{
+ r1 = sp + -8;
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = 0;
+ r3 = _ZL13gProfileClock_2E_0;
+ gettimeofday(i7);
+ r3 = r3 >> 2;
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r1 = r1 >> 2;
+ r4 = heap32[(fp+-2)];
+ r5 = heap32[(r3)];
+ r4 = (r4 - r5)|0;
+ r1 = heap32[(r1+1)];
+ r3 = heap32[(r3+1)];
+ r1 = (r1 - r3)|0;
+ r3 = (r4 * 1000000)|0;
+ r1 = (r1 + r3)|0;
+ r3 = heap32[(r2+3)];
+ r1 = (r1 - r3)|0;
+ f0 = uint(r1); //fuitos r1, f0
+ f1 = 1000;
+ f2 = heapFloat[(r2+2)];
+ f0 = f0/f1;
+ f0 = f2+f0;
+ heapFloat[(r2+2)] = f0;
+ r1 = heap32[(r2+4)];
+ if(r1 !=0) //_LBB649_11
+{
+break _9;
+}
+else{
+ r1 = heap32[(r0)];
+}
+}
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+5)];
+ heap32[(r0)] = r1;
+}
+} while(0);
+ return;
+}
+
+function _ZN23btDiscreteDynamicsWorld26calculateSimulationIslandsEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var f0;
+ var f1;
+ var f2;
+var __label__ = 0;
+ i7 = sp + -24;var g0 = i7>>2; // save stack
+ r0 = _2E_str188;
+ r1 = heap32[(fp)];
+ heap32[(g0)] = r0;
+ _ZN15CProfileManager13Start_ProfileEPKc(i7);
+ r0 = r1 >> 2;
+ r2 = heap32[(r0+45)];
+ r3 = r2 >> 2;
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3+2)];
+ r4 = heap32[(r0+6)];
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = r4;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ r2 = heap32[(r0+47)];
+if(!(r2 <1)) //_LBB650_21
+{
+ r3 = 0;
+_3: while(true){
+ r4 = heap32[(r0+49)];
+ r5 = r3 << 2;
+ r4 = (r4 + r5)|0;
+ r4 = r4 >> 2;
+ r4 = heap32[(r4)];
+ r4 = r4 >> 2;
+ r5 = heap32[(r4+5)];
+_5: do {
+if(!(r5 ==0)) //_LBB650_20
+{
+ r6 = heapU8[r5+204];
+ r6 = r6 & 3;
+if(!(r6 !=0)) //_LBB650_20
+{
+ r4 = heap32[(r4+6)];
+if(!(r4 ==0)) //_LBB650_20
+{
+ r6 = heapU8[r4+204];
+ r6 = r6 & 3;
+if(!(r6 !=0)) //_LBB650_20
+{
+ r5 = r5 >> 2;
+ r6 = heap32[(r5+54)];
+ if(r6 ==2) //_LBB650_8
+{
+__label__ = 8;
+}
+else{
+ if(r6 !=5) //_LBB650_10
+{
+__label__ = 10;
+}
+else{
+__label__ = 8;
+}
+}
+if (__label__ == 8){
+ r6 = r4 >> 2;
+ r6 = heap32[(r6+54)];
+ if(r6 ==2) //_LBB650_20
+{
+break _5;
+}
+else{
+ if(r6 ==5) //_LBB650_20
+{
+break _5;
+}
+}
+}
+ r6 = heap32[(r0+45)];
+ r5 = heap32[(r5+52)];
+ r6 = r6 >> 2;
+ r7 = heap32[(r6+4)];
+ r8 = r5 << 3;
+ r8 = (r7 + r8)|0;
+ r8 = r8 >> 2;
+ r4 = r4 >> 2;
+ r8 = heap32[(r8)];
+ r4 = heap32[(r4+52)];
+if(!(r8 ==r5)) //_LBB650_12
+{
+_17: while(true){
+ r8 = r8 << 3;
+ r5 = r5 << 3;
+ r8 = (r7 + r8)|0;
+ r5 = (r7 + r5)|0;
+ r7 = r8 >> 2;
+ r5 = r5 >> 2;
+ r8 = heap32[(r7)];
+ heap32[(r5)] = r8;
+ r5 = heap32[(r7)];
+ r7 = heap32[(r6+4)];
+ r8 = r5 << 3;
+ r8 = (r7 + r8)|0;
+ r8 = r8 >> 2;
+ r8 = heap32[(r8)];
+if(!(r8 !=r5)) //_LBB650_13
+{
+break _17;
+}
+}
+}
+ r8 = r4 << 3;
+ r8 = (r7 + r8)|0;
+ r8 = r8 >> 2;
+ r8 = heap32[(r8)];
+_20: do {
+if(!(r8 ==r4)) //_LBB650_16
+{
+_21: while(true){
+ r8 = r8 << 3;
+ r4 = r4 << 3;
+ r8 = (r7 + r8)|0;
+ r4 = (r7 + r4)|0;
+ r7 = r8 >> 2;
+ r4 = r4 >> 2;
+ r8 = heap32[(r7)];
+ heap32[(r4)] = r8;
+ r4 = heap32[(r7)];
+ r7 = heap32[(r6+4)];
+ r8 = r4 << 3;
+ r8 = (r7 + r8)|0;
+ r8 = r8 >> 2;
+ r8 = heap32[(r8)];
+if(!(r8 !=r4)) //_LBB650_17
+{
+break _20;
+}
+}
+}
+} while(0);
+if(!(r5 ==r4)) //_LBB650_20
+{
+ r5 = r5 << 3;
+ r7 = (r7 + r5)|0;
+ r7 = r7 >> 2;
+ heap32[(r7)] = r4;
+ r6 = heap32[(r6+4)];
+ r4 = r4 << 3;
+ r4 = (r6 + r4)|0;
+ r5 = (r6 + r5)|0;
+ r4 = r4 >> 2;
+ r5 = r5 >> 2;
+ r6 = heap32[(r4+1)];
+ r5 = heap32[(r5+1)];
+ r5 = (r5 + r6)|0;
+ heap32[(r4+1)] = r5;
+}
+}
+}
+}
+}
+} while(0);
+ r3 = (r3 + 1)|0;
+ if(r2 !=r3) //_LBB650_2
+{
+continue _3;
+}
+else{
+break _3;
+}
+}
+}
+ r0 = heap32[(r0+45)];
+ r2 = r0 >> 2;
+ r2 = heap32[(r2)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+3)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ r0 = _ZN15CProfileManager11CurrentNodeE;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ r0 = r0 >> 2;
+ r1 = heap32[(r0)];
+ r2 = r1 >> 2;
+ r3 = heap32[(r2+4)];
+ r3 = (r3 + -1)|0;
+ heap32[(r2+4)] = r3;
+_27: do {
+if(!(r3 !=0)) //_LBB650_27
+{
+ r3 = heap32[(r2+1)];
+ if(r3 !=0) //_LBB650_24
+{
+ r1 = sp + -8;
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = 0;
+ r3 = _ZL13gProfileClock_2E_0;
+ gettimeofday(i7);
+ r3 = r3 >> 2;
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r1 = r1 >> 2;
+ r4 = heap32[(fp+-2)];
+ r5 = heap32[(r3)];
+ r4 = (r4 - r5)|0;
+ r1 = heap32[(r1+1)];
+ r3 = heap32[(r3+1)];
+ r1 = (r1 - r3)|0;
+ r3 = (r4 * 1000000)|0;
+ r1 = (r1 + r3)|0;
+ r3 = heap32[(r2+3)];
+ r1 = (r1 - r3)|0;
+ f0 = uint(r1); //fuitos r1, f0
+ f1 = 1000;
+ f2 = heapFloat[(r2+2)];
+ f0 = f0/f1;
+ f0 = f2+f0;
+ heapFloat[(r2+2)] = f0;
+ r1 = heap32[(r2+4)];
+ if(r1 !=0) //_LBB650_27
+{
+break _27;
+}
+else{
+ r1 = heap32[(r0)];
+}
+}
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+5)];
+ heap32[(r0)] = r1;
+}
+} while(0);
+ return;
+}
+
+function _ZZN23btDiscreteDynamicsWorld16solveConstraintsER19btContactSolverInfoEN27InplaceSolverIslandCallback18processConstraintsEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+ var r13;
+var __label__ = 0;
+ i7 = sp + -48;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ r2 = heap32[(r1+14)];
+ r3 = heap32[(r1+19)];
+ r4 = (r3 + r2)|0;
+if(!(r4 <1)) //_LBB651_2
+{
+ r4 = heap32[(r1+2)];
+ r5 = r4 >> 2;
+ r5 = heap32[(r5)];
+ r5 = r5 >> 2;
+ r5 = heap32[(r5+3)];
+ r6 = heap32[(r1+7)];
+ r7 = heap32[(r1+6)];
+ r8 = heap32[(r1+5)];
+ r9 = heap32[(r1+1)];
+ r10 = heap32[(r1+21)];
+ r11 = heap32[(r1+16)];
+ r12 = heap32[(r1+9)];
+ r13 = heap32[(r1+11)];
+ heap32[(g0)] = r4;
+ heap32[(g0+1)] = r13;
+ heap32[(g0+2)] = r12;
+ heap32[(g0+3)] = r11;
+ heap32[(g0+4)] = r2;
+ heap32[(g0+5)] = r10;
+ heap32[(g0+6)] = r3;
+ heap32[(g0+7)] = r9;
+ heap32[(g0+8)] = r8;
+ heap32[(g0+9)] = r7;
+ heap32[(g0+10)] = r6;
+ __FUNCTION_TABLE__[(r5)>>2](i7);
+}
+ r2 = heap32[(r1+9)];
+if(!(r2 >-1)) //_LBB651_10
+{
+ r3 = heap32[(r1+10)];
+if(!(r3 >-1)) //_LBB651_9
+{
+ r3 = heap32[(r1+11)];
+if(!(r3 ==0)) //_LBB651_8
+{
+ r4 = heapU8[r0+48];
+if(!(r4 ==0)) //_LBB651_7
+{
+ r4 = gNumAlignedFree;
+ r4 = r4 >> 2;
+ r5 = heap32[(r4)];
+ r5 = (r5 + 1)|0;
+ r3 = r3 >> 2;
+ heap32[(r4)] = r5;
+ r3 = heap32[(r3+-1)];
+ heap32[(g0)] = r3;
+ free(i7);
+}
+ heap32[(r1+11)] = 0;
+}
+ r3 = 1;
+ heap8[r0+48] = r3;
+ heap32[(r1+11)] = 0;
+ heap32[(r1+10)] = 0;
+}
+_14: while(true){
+ r3 = r2 << 2;
+ r4 = heap32[(r1+11)];
+ r3 = (r4 + r3)|0;
+ r2 = (r2 + 1)|0;
+ r3 = r3 >> 2;
+ heap32[(r3)] = 0;
+ if(r2 !=0) //_LBB651_9
+{
+continue _14;
+}
+else{
+break _14;
+}
+}
+}
+ heap32[(r1+9)] = 0;
+ r2 = heap32[(r1+14)];
+_17: do {
+if(!(r2 >-1)) //_LBB651_18
+{
+ r3 = heap32[(r1+15)];
+if(!(r3 >-1)) //_LBB651_17
+{
+ r3 = heap32[(r1+16)];
+if(!(r3 ==0)) //_LBB651_16
+{
+ r4 = heapU8[r0+68];
+if(!(r4 ==0)) //_LBB651_15
+{
+ r4 = gNumAlignedFree;
+ r4 = r4 >> 2;
+ r5 = heap32[(r4)];
+ r5 = (r5 + 1)|0;
+ r3 = r3 >> 2;
+ heap32[(r4)] = r5;
+ r3 = heap32[(r3+-1)];
+ heap32[(g0)] = r3;
+ free(i7);
+}
+ heap32[(r1+16)] = 0;
+}
+ r3 = 1;
+ heap8[r0+68] = r3;
+ heap32[(r1+16)] = 0;
+ heap32[(r1+15)] = 0;
+}
+_27: while(true){
+ r3 = r2 << 2;
+ r4 = heap32[(r1+16)];
+ r3 = (r4 + r3)|0;
+ r2 = (r2 + 1)|0;
+ r3 = r3 >> 2;
+ heap32[(r3)] = 0;
+ if(r2 !=0) //_LBB651_17
+{
+continue _27;
+}
+else{
+break _17;
+}
+}
+}
+} while(0);
+ heap32[(r1+14)] = 0;
+ r2 = heap32[(r1+19)];
+_30: do {
+if(!(r2 >-1)) //_LBB651_26
+{
+ r3 = heap32[(r1+20)];
+if(!(r3 >-1)) //_LBB651_25
+{
+ r3 = heap32[(r1+21)];
+if(!(r3 ==0)) //_LBB651_24
+{
+ r4 = heapU8[r0+88];
+if(!(r4 ==0)) //_LBB651_23
+{
+ r4 = gNumAlignedFree;
+ r4 = r4 >> 2;
+ r5 = heap32[(r4)];
+ r5 = (r5 + 1)|0;
+ r3 = r3 >> 2;
+ heap32[(r4)] = r5;
+ r3 = heap32[(r3+-1)];
+ heap32[(g0)] = r3;
+ free(i7);
+}
+ heap32[(r1+21)] = 0;
+}
+ r3 = 1;
+ heap8[r0+88] = r3;
+ heap32[(r1+21)] = 0;
+ heap32[(r1+20)] = 0;
+}
+_40: while(true){
+ r0 = r2 << 2;
+ r3 = heap32[(r1+21)];
+ r0 = (r3 + r0)|0;
+ r2 = (r2 + 1)|0;
+ r0 = r0 >> 2;
+ heap32[(r0)] = 0;
+ if(r2 !=0) //_LBB651_25
+{
+continue _40;
+}
+else{
+break _30;
+}
+}
+}
+} while(0);
+ heap32[(r1+19)] = 0;
+ return;
+}
+
+function _ZN23btDiscreteDynamicsWorld9addActionEP17btActionInterface(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ r2 = heap32[(r1+64)];
+ r3 = heap32[(r1+63)];
+ r4 = heap32[(fp+1)];
+ if(r2 ==r3) //_LBB652_2
+{
+ r5 = 1;
+ r6 = r3 << 1;
+ r6 = r3 == 0 ? r5 : r6;
+if(!(r2 >=r6)) //_LBB652_1
+{
+ if(r6 !=0) //_LBB652_5
+{
+ r2 = gNumAlignedAllocs;
+ r2 = r2 >> 2;
+ r7 = heap32[(r2)];
+ r8 = r6 << 2;
+ r7 = (r7 + 1)|0;
+ r8 = r8 | 3;
+ heap32[(r2)] = r7;
+ r2 = (r8 + 16)|0;
+ heap32[(g0)] = r2;
+ malloc(i7);
+ r2 = r_g0;
+ if(r2 !=0) //_LBB652_7
+{
+ r7 = 0;
+ r8 = (r2 + 4)|0;
+ r7 = (r7 - r8)|0;
+ r7 = r7 & 15;
+ r7 = (r2 + r7)|0;
+ r8 = (r7 + 4)|0;
+ r7 = r7 >> 2;
+ heap32[(r7)] = r2;
+ r2 = r8;
+}
+}
+else{
+ r2 = 0;
+}
+ r7 = (r0 + 260)|0;
+ if(r3 <1) //_LBB652_10
+{
+ r8 = r7 >> 2;
+ r9 = heap32[(r8)];
+}
+else{
+ r8 = 0;
+_12: while(true){
+ r9 = r7 >> 2;
+ r9 = heap32[(r9)];
+ r10 = r8 << 2;
+ r11 = (r9 + r10)|0;
+ r11 = r11 >> 2;
+ r10 = (r2 + r10)|0;
+ r11 = heap32[(r11)];
+ r8 = (r8 + 1)|0;
+ r10 = r10 >> 2;
+ heap32[(r10)] = r11;
+if(!(r3 !=r8)) //_LBB652_11
+{
+break _12;
+}
+}
+ r7 = (r0 + 260)|0;
+}
+ if(r9 !=0) //_LBB652_15
+{
+ r8 = heapU8[r0+264];
+ if(r8 !=0) //_LBB652_17
+{
+ r3 = gNumAlignedFree;
+ r3 = r3 >> 2;
+ r8 = heap32[(r3)];
+ r8 = (r8 + 1)|0;
+ r9 = r9 >> 2;
+ heap32[(r3)] = r8;
+ r3 = heap32[(r9+-1)];
+ heap32[(g0)] = r3;
+ free(i7);
+ r3 = heap32[(r1+63)];
+}
+ r8 = r7 >> 2;
+ heap32[(r8)] = 0;
+}
+ r7 = r7 >> 2;
+ heap8[r0+264] = r5;
+ heap32[(r7)] = r2;
+ heap32[(r1+64)] = r6;
+}
+}
+ r0 = r3 << 2;
+ r2 = heap32[(r1+65)];
+ r0 = (r2 + r0)|0;
+ r0 = r0 >> 2;
+ heap32[(r0)] = r4;
+ r0 = heap32[(r1+63)];
+ r0 = (r0 + 1)|0;
+ heap32[(r1+63)] = r0;
+ return;
+}
+
+function _ZN23btDiscreteDynamicsWorld19integrateTransformsEf(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+ var r13;
+ var r14;
+ var r15;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+var __label__ = 0;
+ i7 = sp + -264;var g0 = i7>>2; // save stack
+ r0 = _2E_str794;
+ r1 = heap32[(fp)];
+ heap32[(g0)] = r0;
+ r0 = r1 >> 2;
+ _ZN15CProfileManager13Start_ProfileEPKc(i7);
+ r2 = heap32[(r0+52)];
+if(!(r2 <1)) //_LBB653_19
+{
+ f0 = heapFloat[(fp+1)];
+ r2 = 0;
+ r15 = -1;
+_3: while(true){
+ r3 = heap32[(r0+54)];
+ r4 = r2 << 2;
+ r3 = (r3 + r4)|0;
+ r3 = r3 >> 2;
+ r3 = heap32[(r3)];
+ r4 = r3 >> 2;
+ heap32[(r4+60)] = 1065353216;
+ r5 = heap32[(r4+54)];
+if(!(r5 ==2)) //_LBB653_18
+{
+if(!(r5 ==5)) //_LBB653_18
+{
+ r5 = heapU8[r3+204];
+ r5 = r5 & 3;
+if(!(r5 !=0)) //_LBB653_18
+{
+ f1 = heapFloat[(r4+76)];
+ f2 = heapFloat[(r4+77)];
+ f3 = heapFloat[(r4+78)];
+ r5 = (r3 + 320)|0;
+ r6 = (r3 + 4)|0;
+ r7 = sp + -80;
+ heap32[(g0)] = r6;
+ heapFloat[(g0+1)] = f1;
+ heapFloat[(g0+2)] = f2;
+ heapFloat[(g0+3)] = f3;
+ heap32[(g0+4)] = r5;
+ heapFloat[(g0+5)] = f0;
+ heap32[(g0+6)] = r7;
+ _ZN15btTransformUtil18integrateTransformERK11btTransformRK9btVector3S5_fRS0_(i7);
+ f1 = heapFloat[(r4+62)];
+ f1 = f1*f1;
+ f2 = 0;
+_9: do {
+if(!(f1 ==f2)) //_LBB653_17
+{
+ r8 = r7 >> 2;
+ f2 = heapFloat[(r8+14)];
+ f3 = heapFloat[(r4+15)];
+ f4 = heapFloat[(r8+13)];
+ f5 = heapFloat[(r4+14)];
+ f6 = heapFloat[(r8+12)];
+ f7 = heapFloat[(r4+13)];
+ f2 = f2-f3;
+ f3 = f4-f5;
+ f4 = f6-f7;
+ f4 = f4*f4;
+ f3 = f3*f3;
+ f3 = f4+f3;
+ f2 = f2*f2;
+ f2 = f3+f2;
+if(!(f1 >=f2)) //_LBB653_17
+{
+ r9 = _2E_str895;
+ heap32[(g0)] = r9;
+ _ZN15CProfileManager13Start_ProfileEPKc(i7);
+ r9 = heap32[(r4+48)];
+ r9 = r9 >> 2;
+ r9 = heap32[(r9+1)];
+if(!(r9 >19)) //_LBB653_11
+{
+ r9 = gNumClampedCcdMotions;
+ r9 = r9 >> 2;
+ r10 = heap32[(r9)];
+ r10 = (r10 + 1)|0;
+ heap32[(r9)] = r10;
+ r9 = heap32[(r0+20)];
+ r10 = r9 >> 2;
+ r10 = heap32[(r10)];
+ r10 = r10 >> 2;
+ r10 = heap32[(r10+9)];
+ r11 = heap32[(r0+6)];
+ r12 = sp + -176;
+ heap32[(g0)] = r9;
+ r9 = r12 >> 2;
+ __FUNCTION_TABLE__[(r10)>>2](i7);
+ r13 = 1;
+ heap32[(r9+1)] = 1065353216;
+ r14 = _ZTVN16btCollisionWorld27ClosestConvexResultCallbackE;
+ heap16[(sp+-168)>>1] = r13;
+ r13 = (r14 + 8)|0;
+ heap16[(sp+-166)>>1] = r15;
+ heap32[(fp+-44)] = r13;
+ heap32[(r9+3)] = heap32[(r4+13)];
+ heap32[(r9+4)] = heap32[(r4+14)];
+ heap32[(r9+5)] = heap32[(r4+15)];
+ heap32[(r9+6)] = heap32[(r4+16)];
+ heap32[(r9+7)] = heap32[(r8+12)];
+ heap32[(r9+8)] = heap32[(r8+13)];
+ heap32[(r9+9)] = heap32[(r8+14)];
+ r14 = _ZTV34btClosestNotMeConvexResultCallback;
+ heap32[(r9+10)] = heap32[(r8+15)];
+ r8 = (r14 + 8)|0;
+ heap32[(r9+19)] = 0;
+ heap32[(fp+-44)] = r8;
+ heap32[(r9+20)] = r3;
+ heap32[(r9+21)] = 0;
+ heap32[(r9+22)] = r_g0;
+ r8 = sp + -232;
+ heap32[(r9+23)] = r11;
+ r10 = r8 >> 2;
+ f1 = heapFloat[(r4+61)];
+ heap32[(r10+2)] = 0;
+ heap32[(r10+3)] = 1065353216;
+ heap32[(r10+4)] = 1065353216;
+ r11 = _ZTV13btSphereShape;
+ heap32[(r10+5)] = 1065353216;
+ r11 = (r11 + 8)|0;
+ heap32[(r10+6)] = 0;
+ heap32[(fp+-58)] = r11;
+ heap32[(r10+1)] = 8;
+ heapFloat[(r10+7)] = f1;
+ heapFloat[(r10+11)] = f1;
+ r10 = heap32[(r4+47)];
+ r10 = heapU16[(r10+4)>>1];
+ heap16[(sp+-168)>>1] = r10;
+ r10 = heap32[(r4+47)];
+ r10 = heapU16[(r10+6)>>1];
+ heap16[(sp+-166)>>1] = r10;
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r8;
+ heap32[(g0+2)] = r6;
+ heap32[(g0+3)] = r7;
+ heap32[(g0+4)] = r12;
+ heap32[(g0+5)] = 0;
+ _ZNK16btCollisionWorld15convexSweepTestEPK13btConvexShapeRK11btTransformS5_RNS_20ConvexResultCallbackEf(i7);
+ f1 = heapFloat[(r9+1)];
+ f2 = 1;
+if(!(f1 >=f2)) //_LBB653_10
+{
+ heapFloat[(r4+60)] = f1;
+ f2 = heapFloat[(r4+76)];
+ f3 = heapFloat[(r4+77)];
+ f4 = heapFloat[(r4+78)];
+ f1 = f1*f0;
+ heap32[(g0)] = r6;
+ heapFloat[(g0+1)] = f2;
+ heapFloat[(g0+2)] = f3;
+ heapFloat[(g0+3)] = f4;
+ heap32[(g0+4)] = r5;
+ heapFloat[(g0+5)] = f1;
+ heap32[(g0+6)] = r7;
+ _ZN15btTransformUtil18integrateTransformERK11btTransformRK9btVector3S5_fRS0_(i7);
+ heap32[(r4+60)] = 0;
+}
+ r4 = _ZTV13btConvexShape;
+ r4 = (r4 + 8)|0;
+ heap32[(fp+-58)] = r4;
+ heap32[(fp+-44)] = r13;
+}
+ r4 = _ZN15CProfileManager11CurrentNodeE;
+ r4 = r4 >> 2;
+ r5 = heap32[(r4)];
+ r6 = r5 >> 2;
+ r8 = heap32[(r6+4)];
+ r8 = (r8 + -1)|0;
+ heap32[(r6+4)] = r8;
+if(!(r8 !=0)) //_LBB653_17
+{
+ r8 = heap32[(r6+1)];
+ if(r8 !=0) //_LBB653_14
+{
+ r5 = sp + -8;
+ heap32[(g0)] = r5;
+ heap32[(g0+1)] = 0;
+ r8 = _ZL13gProfileClock_2E_0;
+ gettimeofday(i7);
+ r8 = r8 >> 2;
+ r8 = heap32[(r8)];
+ r8 = r8 >> 2;
+ r5 = r5 >> 2;
+ r9 = heap32[(fp+-2)];
+ r10 = heap32[(r8)];
+ r9 = (r9 - r10)|0;
+ r5 = heap32[(r5+1)];
+ r8 = heap32[(r8+1)];
+ r5 = (r5 - r8)|0;
+ r8 = (r9 * 1000000)|0;
+ r5 = (r5 + r8)|0;
+ r8 = heap32[(r6+3)];
+ r5 = (r5 - r8)|0;
+ f1 = uint(r5); //fuitos r5, f1
+ f2 = 1000;
+ f3 = heapFloat[(r6+2)];
+ f1 = f1/f2;
+ f1 = f3+f1;
+ heapFloat[(r6+2)] = f1;
+ r5 = heap32[(r6+4)];
+ if(r5 !=0) //_LBB653_17
+{
+break _9;
+}
+else{
+ r5 = heap32[(r4)];
+}
+}
+ r5 = r5 >> 2;
+ r5 = heap32[(r5+5)];
+ heap32[(r4)] = r5;
+}
+}
+}
+} while(0);
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r7;
+ _ZN11btRigidBody18proceedToTransformERK11btTransform(i7);
+}
+}
+}
+ r2 = (r2 + 1)|0;
+ r3 = heap32[(r0+52)];
+ if(r3 >r2) //_LBB653_2
+{
+continue _3;
+}
+else{
+break _3;
+}
+}
+}
+ r0 = _ZN15CProfileManager11CurrentNodeE;
+ r0 = r0 >> 2;
+ r1 = heap32[(r0)];
+ r2 = r1 >> 2;
+ r3 = heap32[(r2+4)];
+ r3 = (r3 + -1)|0;
+ heap32[(r2+4)] = r3;
+_26: do {
+if(!(r3 !=0)) //_LBB653_25
+{
+ r3 = heap32[(r2+1)];
+ if(r3 !=0) //_LBB653_22
+{
+ r1 = sp + -16;
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = 0;
+ r3 = _ZL13gProfileClock_2E_0;
+ gettimeofday(i7);
+ r3 = r3 >> 2;
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r1 = r1 >> 2;
+ r4 = heap32[(fp+-4)];
+ r5 = heap32[(r3)];
+ r4 = (r4 - r5)|0;
+ r1 = heap32[(r1+1)];
+ r3 = heap32[(r3+1)];
+ r1 = (r1 - r3)|0;
+ r3 = (r4 * 1000000)|0;
+ r1 = (r1 + r3)|0;
+ r3 = heap32[(r2+3)];
+ r1 = (r1 - r3)|0;
+ f0 = uint(r1); //fuitos r1, f0
+ f1 = 1000;
+ f2 = heapFloat[(r2+2)];
+ f0 = f0/f1;
+ f0 = f2+f0;
+ heapFloat[(r2+2)] = f0;
+ r1 = heap32[(r2+4)];
+ if(r1 !=0) //_LBB653_25
+{
+break _26;
+}
+else{
+ r1 = heap32[(r0)];
+}
+}
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+5)];
+ heap32[(r0)] = r1;
+}
+} while(0);
+ return;
+}
+
+function _ZN23btDiscreteDynamicsWorld16solveConstraintsER19btContactSolverInfo(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+ var r13;
+ var r14;
+ var r15;
+ var r16;
+ var r17;
+ var r18;
+ var r19;
+ var r20;
+ var r21;
+ var r22;
+ var r23;
+ var r24;
+ var f0;
+ var f1;
+ var f2;
+var __label__ = 0;
+ i7 = sp + -168;var g0 = i7>>2; // save stack
+ r0 = _2E_str996;
+ heap32[(g0)] = r0;
+ r0 = sp + -48;
+ _ZN15CProfileManager13Start_ProfileEPKc(i7);
+ r1 = 1;
+ r2 = r0 >> 2;
+ heap8[sp+-32] = r1;
+ heap32[(r2+3)] = 0;
+ r3 = heap32[(fp)];
+ heap32[(r2+1)] = 0;
+ r4 = r3 >> 2;
+ heap32[(r2+2)] = 0;
+ r5 = heap32[(r4+47)];
+if(!(r5 <1)) //_LBB654_7
+{
+ r6 = gNumAlignedAllocs;
+ r6 = r6 >> 2;
+ r7 = heap32[(r6)];
+ r8 = r5 << 2;
+ r7 = (r7 + 1)|0;
+ r8 = r8 | 3;
+ heap32[(r6)] = r7;
+ r6 = (r8 + 16)|0;
+ heap32[(g0)] = r6;
+ malloc(i7);
+ r6 = r_g0;
+ if(r6 !=0) //_LBB654_3
+{
+ r7 = 0;
+ r8 = (r6 + 4)|0;
+ r7 = (r7 - r8)|0;
+ r7 = r7 & 15;
+ r7 = (r6 + r7)|0;
+ r8 = (r7 + 4)|0;
+ r7 = r7 >> 2;
+ heap32[(r7)] = r6;
+ r6 = r8;
+}
+ r7 = 1;
+ heap8[sp+-32] = r7;
+ r7 = (r7 - r5)|0;
+ r8 = 0;
+ heap32[(r2+3)] = r6;
+ heap32[(r2+2)] = r5;
+_6: while(true){
+ r9 = r8 << 2;
+ r6 = (r6 - r9)|0;
+ r6 = r6 >> 2;
+ heap32[(r6)] = 0;
+ if(r7 ==r8) //_LBB654_7
+{
+break _6;
+}
+else{
+ r6 = heap32[(r2+3)];
+ r8 = (r8 + -1)|0;
+continue _6;
+}
+}
+}
+ heap32[(r2+1)] = r5;
+ r5 = heap32[(r4)];
+ r5 = r5 >> 2;
+ r5 = heap32[(r5+24)];
+ heap32[(g0)] = r3;
+ __FUNCTION_TABLE__[(r5)>>2](i7);
+ r5 = r_g0;
+_10: do {
+if(!(r5 <1)) //_LBB654_10
+{
+ r5 = 0;
+_12: while(true){
+ r6 = r5 << 2;
+ r7 = heap32[(r4+49)];
+ r7 = (r7 + r6)|0;
+ r7 = r7 >> 2;
+ r8 = heap32[(r2+3)];
+ r6 = (r8 + r6)|0;
+ r7 = heap32[(r7)];
+ r6 = r6 >> 2;
+ heap32[(r6)] = r7;
+ r6 = heap32[(r4)];
+ r6 = r6 >> 2;
+ r6 = heap32[(r6+24)];
+ r5 = (r5 + 1)|0;
+ heap32[(g0)] = r3;
+ __FUNCTION_TABLE__[(r6)>>2](i7);
+ r6 = r_g0;
+ if(r6 >r5) //_LBB654_9
+{
+continue _12;
+}
+else{
+break _10;
+}
+}
+}
+} while(0);
+ r5 = heap32[(r2+1)];
+if(!(r5 <2)) //_LBB654_12
+{
+ r5 = (r5 + -1)|0;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = 0;
+ heap32[(g0+2)] = r5;
+ _ZN20btAlignedObjectArrayIP17btTypedConstraintE17quickSortInternalI33btSortConstraintOnIslandPredicateEEvT_ii(i7);
+}
+ r0 = heap32[(fp+1)];
+ r5 = heap32[(r4)];
+ r5 = r5 >> 2;
+ r5 = heap32[(r5+24)];
+ heap32[(g0)] = r3;
+ __FUNCTION_TABLE__[(r5)>>2](i7);
+ r3 = r_g0;
+ if(r3 !=0) //_LBB654_14
+{
+ r3 = heap32[(r2+3)];
+}
+else{
+ r3 = 0;
+}
+ r5 = heap32[(r4+6)];
+ r6 = heap32[(r4+44)];
+ r7 = _ZTVZN23btDiscreteDynamicsWorld16solveConstraintsER19btContactSolverInfoE27InplaceSolverIslandCallback;
+ r8 = heap32[(r4+19)];
+ r9 = heap32[(r4+21)];
+ r10 = heap32[(r2+1)];
+ r11 = sp + -144;
+ r7 = (r7 + 8)|0;
+ r12 = r11 >> 2;
+ heap32[(fp+-36)] = r7;
+ heap32[(r12+1)] = r0;
+ heap32[(r12+2)] = r6;
+ heap32[(r12+3)] = r3;
+ heap32[(r12+4)] = r10;
+ heap32[(r12+5)] = r9;
+ heap32[(r12+6)] = r8;
+ heap32[(r12+7)] = r5;
+ heap8[sp+-96] = r1;
+ heap32[(r12+11)] = 0;
+ heap32[(r12+9)] = 0;
+ heap32[(r12+10)] = 0;
+ heap8[sp+-76] = r1;
+ heap32[(r12+16)] = 0;
+ heap32[(r12+14)] = 0;
+ heap32[(r12+15)] = 0;
+ heap8[sp+-56] = r1;
+ heap32[(r12+21)] = 0;
+ heap32[(r12+19)] = 0;
+ r3 = r6 >> 2;
+ heap32[(r12+20)] = 0;
+ r6 = r5 >> 2;
+ r3 = heap32[(r3)];
+ r6 = heap32[(r6)];
+ r3 = r3 >> 2;
+ r6 = r6 >> 2;
+ r3 = heap32[(r3+2)];
+ r6 = heap32[(r6+9)];
+ heap32[(g0)] = r5;
+ __FUNCTION_TABLE__[(r6)>>2](i7);
+ r6 = heap32[(r4+2)];
+ r8 = heap32[(r4+44)];
+ heap32[(g0)] = r8;
+ heap32[(g0+1)] = r6;
+ heap32[(g0+2)] = r_g0;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ r3 = heap32[(r4+45)];
+ r5 = heap32[(r4+6)];
+ r6 = _2E_str155;
+ heap32[(g0)] = r6;
+ r6 = r3 >> 2;
+ _ZN15CProfileManager13Start_ProfileEPKc(i7);
+ r8 = heap32[(r6+7)];
+_22: do {
+if(!(r8 >-1)) //_LBB654_23
+{
+ r9 = heap32[(r6+8)];
+if(!(r9 >-1)) //_LBB654_22
+{
+ r9 = heap32[(r6+9)];
+if(!(r9 ==0)) //_LBB654_21
+{
+ r10 = heapU8[r3+40];
+if(!(r10 ==0)) //_LBB654_20
+{
+ r10 = gNumAlignedFree;
+ r10 = r10 >> 2;
+ r13 = heap32[(r10)];
+ r13 = (r13 + 1)|0;
+ r9 = r9 >> 2;
+ heap32[(r10)] = r13;
+ r9 = heap32[(r9+-1)];
+ heap32[(g0)] = r9;
+ free(i7);
+}
+ heap32[(r6+9)] = 0;
+}
+ r9 = 1;
+ heap8[r3+40] = r9;
+ heap32[(r6+9)] = 0;
+ heap32[(r6+8)] = 0;
+}
+_32: while(true){
+ r9 = r8 << 2;
+ r10 = heap32[(r6+9)];
+ r9 = (r10 + r9)|0;
+ r8 = (r8 + 1)|0;
+ r9 = r9 >> 2;
+ heap32[(r9)] = 0;
+ if(r8 !=0) //_LBB654_22
+{
+continue _32;
+}
+else{
+break _22;
+}
+}
+}
+} while(0);
+ heap32[(r6+7)] = 0;
+ r8 = heap32[(r6+2)];
+ if(r8 >0) //_LBB654_25
+{
+ r9 = 0;
+_37: while(true){
+ r10 = heap32[(r6+4)];
+ r13 = r9 << 3;
+ r13 = (r10 + r13)|0;
+ r13 = r13 >> 2;
+ r13 = heap32[(r13)];
+ r14 = r9 << 1;
+ if(r9 ==r13) //_LBB654_28
+{
+ r16 = r9;
+}
+else{
+ r15 = r10;
+ r16 = r9;
+_42: while(true){
+ r13 = r13 << 3;
+ r16 = r16 << 3;
+ r13 = (r15 + r13)|0;
+ r15 = (r15 + r16)|0;
+ r13 = r13 >> 2;
+ r15 = r15 >> 2;
+ r16 = heap32[(r13)];
+ heap32[(r15)] = r16;
+ r16 = heap32[(r13)];
+ r15 = heap32[(r6+4)];
+ r13 = r16 << 3;
+ r13 = (r15 + r13)|0;
+ r13 = r13 >> 2;
+ r13 = heap32[(r13)];
+if(!(r13 !=r16)) //_LBB654_29
+{
+break _42;
+}
+}
+}
+ r13 = r14 << 2;
+ r10 = (r10 + r13)|0;
+ r9 = (r9 + 1)|0;
+ r10 = r10 >> 2;
+ heap32[(r10)] = r16;
+if(!(r8 !=r9)) //_LBB654_26
+{
+break _37;
+}
+}
+ r8 = heap32[(r6+2)];
+ if(r8 >1) //_LBB654_33
+{
+ r9 = (r3 + 4)|0;
+ r8 = (r8 + -1)|0;
+ heap32[(g0)] = r9;
+ heap32[(g0+1)] = 0;
+ heap32[(g0+2)] = r8;
+ _ZN20btAlignedObjectArrayI9btElementE17quickSortInternalI31btUnionFindElementSortPredicateEEvT_ii(i7);
+ r8 = heap32[(r6+2)];
+}
+}
+ r9 = 0;
+_48: while(true){
+ r10 = r9;
+ if(r10 <r8) //_LBB654_35
+{
+ r13 = heap32[(r6+4)];
+ r9 = r10 << 3;
+ r9 = (r13 + r9)|0;
+ r9 = r9 >> 2;
+ r14 = heap32[(r9)];
+ r15 = (r10 + 1)|0;
+_51: while(true){
+ r9 = r15;
+ if(r9 >=r8) //_LBB654_46
+{
+break _51;
+}
+else{
+ r15 = r9 << 3;
+ r15 = (r13 + r15)|0;
+ r16 = r15 >> 2;
+ r15 = (r9 + 1)|0;
+ r16 = heap32[(r16)];
+if(!(r16 ==r14)) //_LBB654_36
+{
+break _51;
+}
+}
+}
+ r16 = 1;
+ r15 = r10;
+_55: while(true){
+ if(r15 <r9) //_LBB654_38
+{
+ r17 = r15 << 3;
+ r17 = (r13 + r17)|0;
+ r17 = r17 >> 2;
+ r17 = heap32[(r17+1)];
+ r18 = heap32[(r4+4)];
+ r17 = r17 << 2;
+ r17 = (r18 + r17)|0;
+ r17 = r17 >> 2;
+ r17 = heap32[(r17)];
+ r17 = r17 >> 2;
+ r18 = heap32[(r17+52)];
+ if(r18 ==r14) //_LBB654_42
+{
+ r17 = heap32[(r17+54)];
+ r18 = 0;
+ if(r17 ==4) //_LBB654_44
+{
+ r16 = r18;
+}
+else{
+ r16 = r17 == 1 ? r18 : r16;
+}
+}
+else{
+ if(r18 !=-1) //_LBB654_41
+{
+__label__ = 37;
+break _48;
+}
+}
+ r15 = (r15 + 1)|0;
+}
+else{
+break _55;
+}
+}
+ r13 = r16 & 255;
+ if(r13 ==0) //_LBB654_50
+{
+_67: while(true){
+ if(r10 <r9) //_LBB654_58
+{
+ r13 = heap32[(r6+4)];
+ r15 = r10 << 3;
+ r13 = (r13 + r15)|0;
+ r13 = r13 >> 2;
+ r13 = heap32[(r13+1)];
+ r15 = heap32[(r4+4)];
+ r13 = r13 << 2;
+ r13 = (r15 + r13)|0;
+ r13 = r13 >> 2;
+ r13 = heap32[(r13)];
+ r13 = r13 >> 2;
+ r15 = heap32[(r13+52)];
+ if(r15 ==r14) //_LBB654_61
+{
+ r15 = heap32[(r13+54)];
+if(!(r15 !=2)) //_LBB654_63
+{
+ heap32[(r13+54)] = 3;
+ heap32[(r13+55)] = 0;
+}
+}
+else{
+if(!(r15 ==-1)) //_LBB654_63
+{
+__label__ = 54;
+break _48;
+}
+}
+ r10 = (r10 + 1)|0;
+continue _67;
+}
+else{
+continue _48;
+}
+}
+}
+else{
+_75: while(true){
+ if(r10 <r9) //_LBB654_51
+{
+ r13 = heap32[(r6+4)];
+ r15 = r10 << 3;
+ r13 = (r13 + r15)|0;
+ r13 = r13 >> 2;
+ r13 = heap32[(r13+1)];
+ r15 = heap32[(r4+4)];
+ r13 = r13 << 2;
+ r13 = (r15 + r13)|0;
+ r13 = r13 >> 2;
+ r13 = heap32[(r13)];
+ r13 = r13 >> 2;
+ r15 = heap32[(r13+52)];
+ if(r15 ==r14) //_LBB654_54
+{
+ r15 = heap32[(r13+54)];
+ r15 = (r15 + -4)|0;
+if(!(uint(r15) <uint(2))) //_LBB654_56
+{
+ heap32[(r13+54)] = 2;
+}
+}
+else{
+if(!(r15 ==-1)) //_LBB654_56
+{
+__label__ = 47;
+break _48;
+}
+}
+ r10 = (r10 + 1)|0;
+continue _75;
+}
+else{
+continue _48;
+}
+}
+}
+}
+else{
+__label__ = 60;
+break _48;
+}
+}
+switch(__label__ ){//multiple entries
+case 37:
+ r0 = _2E_str1156;
+ r1 = _2E_str2157;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 242;
+ _assert(i7);
+break;
+case 54:
+ r0 = _2E_str1156;
+ r1 = _2E_str2157;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 290;
+ _assert(i7);
+break;
+case 60:
+ r8 = r5 >> 2;
+ r9 = heap32[(r8)];
+ r9 = r9 >> 2;
+ r9 = heap32[(r9+9)];
+ heap32[(g0)] = r5;
+ __FUNCTION_TABLE__[(r9)>>2](i7);
+ r9 = r_g0;
+_87: do {
+if(!(r9 <1)) //_LBB654_104
+{
+ r10 = 0;
+_89: while(true){
+ r13 = heap32[(r8)];
+ r13 = r13 >> 2;
+ r13 = heap32[(r13+10)];
+ heap32[(g0)] = r5;
+ heap32[(g0+1)] = r10;
+ __FUNCTION_TABLE__[(r13)>>2](i7);
+ r13 = r_g0;
+ r14 = r13 >> 2;
+ r15 = heap32[(r14+277)];
+ r14 = heap32[(r14+278)];
+ if(r15 ==0) //_LBB654_70
+{
+__label__ = 64;
+}
+else{
+ r16 = r15 >> 2;
+ r16 = heap32[(r16+54)];
+ if(r16 !=2) //_LBB654_72
+{
+__label__ = 66;
+}
+else{
+__label__ = 64;
+}
+}
+if (__label__ == 64){
+ if(r14 ==0) //_LBB654_103
+{
+__label__ = 95;
+}
+else{
+ r16 = r14 >> 2;
+ r16 = heap32[(r16+54)];
+ if(r16 ==2) //_LBB654_103
+{
+__label__ = 95;
+}
+else{
+__label__ = 66;
+}
+}
+}
+if (__label__ == 66){
+ r16 = heapU8[r15+204];
+ r16 = r16 & 2;
+if(!(r16 ==0)) //_LBB654_78
+{
+ r16 = r15 >> 2;
+ r16 = heap32[(r16+54)];
+if(!(r16 ==2)) //_LBB654_78
+{
+ r16 = heapU8[r14+204];
+ r16 = r16 & 3;
+if(!(r16 !=0)) //_LBB654_78
+{
+ r16 = r14 >> 2;
+ r17 = heap32[(r16+54)];
+ r17 = (r17 + -4)|0;
+if(!(uint(r17) <uint(2))) //_LBB654_77
+{
+ heap32[(r16+54)] = 1;
+}
+ heap32[(r16+55)] = 0;
+}
+}
+}
+ r16 = heapU8[r14+204];
+ r16 = r16 & 2;
+if(!(r16 ==0)) //_LBB654_84
+{
+ r16 = r14 >> 2;
+ r16 = heap32[(r16+54)];
+if(!(r16 ==2)) //_LBB654_84
+{
+ r16 = heapU8[r15+204];
+ r16 = r16 & 3;
+if(!(r16 !=0)) //_LBB654_84
+{
+ r16 = r15 >> 2;
+ r17 = heap32[(r16+54)];
+ r17 = (r17 + -4)|0;
+if(!(uint(r17) <uint(2))) //_LBB654_83
+{
+ heap32[(r16+54)] = 1;
+}
+ heap32[(r16+55)] = 0;
+}
+}
+}
+ r16 = heapU8[r3+64];
+if(!(r16 ==0)) //_LBB654_103
+{
+ r16 = heap32[(r8)];
+ r16 = r16 >> 2;
+ r16 = heap32[(r16+7)];
+ heap32[(g0)] = r5;
+ heap32[(g0+1)] = r15;
+ heap32[(g0+2)] = r14;
+ __FUNCTION_TABLE__[(r16)>>2](i7);
+ r14 = r_g0;
+if(!(r14 ==0)) //_LBB654_103
+{
+ r14 = heap32[(r6+8)];
+ r15 = heap32[(r6+7)];
+ if(r14 ==r15) //_LBB654_88
+{
+ r16 = 1;
+ r17 = r15 << 1;
+ r17 = r15 == 0 ? r16 : r17;
+if(!(r14 >=r17)) //_LBB654_87
+{
+ if(r17 !=0) //_LBB654_91
+{
+ r14 = gNumAlignedAllocs;
+ r14 = r14 >> 2;
+ r18 = heap32[(r14)];
+ r19 = r17 << 2;
+ r18 = (r18 + 1)|0;
+ r19 = r19 | 3;
+ heap32[(r14)] = r18;
+ r14 = (r19 + 16)|0;
+ heap32[(g0)] = r14;
+ malloc(i7);
+ r14 = r_g0;
+ if(r14 !=0) //_LBB654_93
+{
+ r15 = 0;
+ r18 = (r14 + 4)|0;
+ r15 = (r15 - r18)|0;
+ r15 = r15 & 15;
+ r15 = (r14 + r15)|0;
+ r18 = r15 >> 2;
+ heap32[(r18)] = r14;
+ r14 = (r15 + 4)|0;
+ r15 = heap32[(r6+7)];
+}
+}
+else{
+ r14 = 0;
+}
+if(!(r15 <1)) //_LBB654_97
+{
+ r18 = 0;
+_126: while(true){
+ r19 = r18 << 2;
+ r20 = heap32[(r6+9)];
+ r20 = (r20 + r19)|0;
+ r20 = r20 >> 2;
+ r19 = (r14 + r19)|0;
+ r20 = heap32[(r20)];
+ r18 = (r18 + 1)|0;
+ r19 = r19 >> 2;
+ heap32[(r19)] = r20;
+if(!(r15 !=r18)) //_LBB654_96
+{
+break _126;
+}
+}
+}
+ r15 = heap32[(r6+9)];
+if(!(r15 ==0)) //_LBB654_101
+{
+ r18 = heapU8[r3+40];
+if(!(r18 ==0)) //_LBB654_100
+{
+ r18 = gNumAlignedFree;
+ r18 = r18 >> 2;
+ r19 = heap32[(r18)];
+ r19 = (r19 + 1)|0;
+ r15 = r15 >> 2;
+ heap32[(r18)] = r19;
+ r15 = heap32[(r15+-1)];
+ heap32[(g0)] = r15;
+ free(i7);
+}
+ heap32[(r6+9)] = 0;
+}
+ heap8[r3+40] = r16;
+ heap32[(r6+9)] = r14;
+ heap32[(r6+8)] = r17;
+ r15 = heap32[(r6+7)];
+}
+}
+ r14 = r15 << 2;
+ r15 = heap32[(r6+9)];
+ r14 = (r15 + r14)|0;
+ r14 = r14 >> 2;
+ heap32[(r14)] = r13;
+ r13 = heap32[(r6+7)];
+ r13 = (r13 + 1)|0;
+ heap32[(r6+7)] = r13;
+}
+}
+}
+ r10 = (r10 + 1)|0;
+ if(r9 !=r10) //_LBB654_68
+{
+continue _89;
+}
+else{
+break _87;
+}
+}
+}
+} while(0);
+ r9 = _ZN15CProfileManager11CurrentNodeE;
+ r9 = r9 >> 2;
+ r10 = heap32[(r9)];
+ r13 = r10 >> 2;
+ r14 = heap32[(r13+4)];
+ r14 = (r14 + -1)|0;
+ heap32[(r13+4)] = r14;
+_138: do {
+if(!(r14 !=0)) //_LBB654_110
+{
+ r14 = heap32[(r13+1)];
+ if(r14 !=0) //_LBB654_107
+{
+ r10 = sp + -24;
+ heap32[(g0)] = r10;
+ heap32[(g0+1)] = 0;
+ r14 = _ZL13gProfileClock_2E_0;
+ gettimeofday(i7);
+ r14 = r14 >> 2;
+ r14 = heap32[(r14)];
+ r14 = r14 >> 2;
+ r10 = r10 >> 2;
+ r15 = heap32[(fp+-6)];
+ r16 = heap32[(r14)];
+ r15 = (r15 - r16)|0;
+ r10 = heap32[(r10+1)];
+ r14 = heap32[(r14+1)];
+ r10 = (r10 - r14)|0;
+ r14 = (r15 * 1000000)|0;
+ r10 = (r10 + r14)|0;
+ r14 = heap32[(r13+3)];
+ r10 = (r10 - r14)|0;
+ f0 = uint(r10); //fuitos r10, f0
+ f1 = 1000;
+ f2 = heapFloat[(r13+2)];
+ f0 = f0/f1;
+ f0 = f2+f0;
+ heapFloat[(r13+2)] = f0;
+ r10 = heap32[(r13+4)];
+ if(r10 !=0) //_LBB654_110
+{
+break _138;
+}
+else{
+ r10 = heap32[(r9)];
+}
+}
+ r10 = r10 >> 2;
+ r10 = heap32[(r10+5)];
+ heap32[(r9)] = r10;
+}
+} while(0);
+ r10 = heap32[(r6+2)];
+ r13 = _2E_str3158;
+ heap32[(g0)] = r13;
+ _ZN15CProfileManager13Start_ProfileEPKc(i7);
+ r13 = heapU8[r3+64];
+_145: do {
+ if(r13 !=0) //_LBB654_112
+{
+ r5 = heap32[(r6+7)];
+if(!(r5 <2)) //_LBB654_114
+{
+ r8 = (r3 + 24)|0;
+ r13 = (r5 + -1)|0;
+ heap32[(g0)] = r8;
+ heap32[(g0+1)] = 0;
+ heap32[(g0+2)] = r13;
+ _ZN20btAlignedObjectArrayIP20btPersistentManifoldE17quickSortInternalI33btPersistentManifoldSortPredicateEEvT_ii(i7);
+}
+if(!(r10 <1)) //_LBB654_163
+{
+ r8 = 0;
+ r13 = r8;
+ r14 = r8;
+_151: while(true){
+ r15 = heap32[(r6+4)];
+ r16 = r14 << 3;
+ r15 = (r15 + r16)|0;
+ r15 = r15 >> 2;
+ r15 = heap32[(r15)];
+ r16 = r8;
+_153: while(true){
+ if(r14 >=r10) //_LBB654_139
+{
+break _153;
+}
+else{
+ r17 = heap32[(r6+4)];
+ r18 = r14 << 3;
+ r17 = (r17 + r18)|0;
+ r17 = r17 >> 2;
+ r18 = heap32[(r17)];
+ if(r18 ==r15) //_LBB654_117
+{
+ r17 = heap32[(r17+1)];
+ r18 = heap32[(r4+4)];
+ r17 = r17 << 2;
+ r17 = (r18 + r17)|0;
+ r17 = r17 >> 2;
+ r18 = heap32[(r6+13)];
+ r19 = heap32[(r6+12)];
+ r17 = heap32[(r17)];
+ if(r18 ==r19) //_LBB654_119
+{
+ r20 = 1;
+ r21 = r19 << 1;
+ r21 = r19 == 0 ? r20 : r21;
+if(!(r18 >=r21)) //_LBB654_118
+{
+ if(r21 !=0) //_LBB654_122
+{
+ r18 = gNumAlignedAllocs;
+ r18 = r18 >> 2;
+ r22 = heap32[(r18)];
+ r23 = r21 << 2;
+ r22 = (r22 + 1)|0;
+ r23 = r23 | 3;
+ heap32[(r18)] = r22;
+ r18 = (r23 + 16)|0;
+ heap32[(g0)] = r18;
+ malloc(i7);
+ r18 = r_g0;
+ if(r18 !=0) //_LBB654_124
+{
+ r19 = 0;
+ r22 = (r18 + 4)|0;
+ r19 = (r19 - r22)|0;
+ r19 = r19 & 15;
+ r19 = (r18 + r19)|0;
+ r22 = r19 >> 2;
+ heap32[(r22)] = r18;
+ r18 = (r19 + 4)|0;
+ r19 = heap32[(r6+12)];
+}
+}
+else{
+ r18 = 0;
+}
+if(!(r19 <1)) //_LBB654_128
+{
+ r22 = 0;
+_167: while(true){
+ r23 = r22 << 2;
+ r24 = heap32[(r6+14)];
+ r24 = (r24 + r23)|0;
+ r24 = r24 >> 2;
+ r23 = (r18 + r23)|0;
+ r24 = heap32[(r24)];
+ r22 = (r22 + 1)|0;
+ r23 = r23 >> 2;
+ heap32[(r23)] = r24;
+if(!(r19 !=r22)) //_LBB654_127
+{
+break _167;
+}
+}
+}
+ r19 = heap32[(r6+14)];
+if(!(r19 ==0)) //_LBB654_132
+{
+ r22 = heapU8[r3+60];
+if(!(r22 ==0)) //_LBB654_131
+{
+ r22 = gNumAlignedFree;
+ r22 = r22 >> 2;
+ r23 = heap32[(r22)];
+ r23 = (r23 + 1)|0;
+ r19 = r19 >> 2;
+ heap32[(r22)] = r23;
+ r19 = heap32[(r19+-1)];
+ heap32[(g0)] = r19;
+ free(i7);
+}
+ heap32[(r6+14)] = 0;
+}
+ heap8[r3+60] = r20;
+ heap32[(r6+14)] = r18;
+ heap32[(r6+13)] = r21;
+ r19 = heap32[(r6+12)];
+}
+}
+ r18 = r19 << 2;
+ r19 = heap32[(r6+14)];
+ r18 = (r19 + r18)|0;
+ r18 = r18 >> 2;
+ heap32[(r18)] = r17;
+ r18 = heap32[(r6+12)];
+ r18 = (r18 + 1)|0;
+ r17 = r17 >> 2;
+ heap32[(r6+12)] = r18;
+ r17 = heap32[(r17+54)];
+ if(r17 !=2) //_LBB654_135
+{
+ r18 = 1;
+ r16 = r17 == 5 ? r18 : r16;
+}
+else{
+ r16 = 1;
+}
+ r14 = (r14 + 1)|0;
+}
+else{
+break _153;
+}
+}
+}
+_182: do {
+ if(r13 <r5) //_LBB654_141
+{
+ r17 = heap32[(r6+9)];
+ r19 = r13 << 2;
+ r18 = (r17 + r19)|0;
+ r20 = r18 >> 2;
+ r20 = heap32[(r20)];
+ r20 = r20 >> 2;
+ r21 = heap32[(r20+277)];
+ r21 = r21 >> 2;
+ r21 = heap32[(r21+52)];
+ if(r21 <0) //_LBB654_143
+{
+ r21 = heap32[(r20+278)];
+ r21 = r21 >> 2;
+ r21 = heap32[(r21+52)];
+}
+ if(r21 !=r15) //_LBB654_140
+{
+__label__ = 129;
+}
+else{
+ r19 = (r17 + r19)|0;
+ r20 = 1;
+_188: while(true){
+ r17 = r20;
+ r1 = (r13 + r17)|0;
+ if(r1 >=r5) //_LBB654_151
+{
+__label__ = 138;
+break _182;
+}
+else{
+ r20 = r17 << 2;
+ r20 = (r19 + r20)|0;
+ r20 = r20 >> 2;
+ r20 = heap32[(r20)];
+ r20 = r20 >> 2;
+ r21 = heap32[(r20+277)];
+ r21 = r21 >> 2;
+ r21 = heap32[(r21+52)];
+ if(r21 <0) //_LBB654_149
+{
+ r20 = heap32[(r20+278)];
+ r20 = r20 >> 2;
+ r21 = heap32[(r20+52)];
+}
+ r20 = (r17 + 1)|0;
+if(!(r21 ==r15)) //_LBB654_146
+{
+__label__ = 138;
+break _182;
+}
+}
+}
+}
+}
+else{
+__label__ = 129;
+}
+} while(0);
+if (__label__ == 129){
+ r17 = 0;
+ r18 = r17;
+}
+ r16 = r16 & 255;
+if(!(r16 !=0)) //_LBB654_153
+{
+ r16 = heap32[(fp+-36)];
+ r16 = r16 >> 2;
+ r16 = heap32[(r16+2)];
+ r19 = heap32[(r6+12)];
+ r20 = heap32[(r6+14)];
+ heap32[(g0)] = r11;
+ heap32[(g0+1)] = r20;
+ heap32[(g0+2)] = r19;
+ heap32[(g0+3)] = r18;
+ heap32[(g0+4)] = r17;
+ heap32[(g0+5)] = r15;
+ __FUNCTION_TABLE__[(r16)>>2](i7);
+}
+ r15 = heap32[(r6+12)];
+_200: do {
+if(!(r15 >-1)) //_LBB654_162
+{
+ r16 = heap32[(r6+13)];
+ if(r16 <0) //_LBB654_156
+{
+ r16 = heap32[(r6+14)];
+if(!(r16 ==0)) //_LBB654_160
+{
+ r18 = heapU8[r3+60];
+if(!(r18 ==0)) //_LBB654_159
+{
+ r18 = gNumAlignedFree;
+ r18 = r18 >> 2;
+ r19 = heap32[(r18)];
+ r19 = (r19 + 1)|0;
+ r16 = r16 >> 2;
+ heap32[(r18)] = r19;
+ r16 = heap32[(r16+-1)];
+ heap32[(g0)] = r16;
+ free(i7);
+}
+ heap32[(r6+14)] = 0;
+}
+ r16 = 1;
+ heap8[r3+60] = r16;
+ heap32[(r6+14)] = 0;
+ heap32[(r6+13)] = 0;
+}
+_210: while(true){
+ r16 = r15 << 2;
+ r18 = heap32[(r6+14)];
+ r16 = (r18 + r16)|0;
+ r15 = (r15 + 1)|0;
+ r16 = r16 >> 2;
+ heap32[(r16)] = 0;
+if(!(r15 !=0)) //_LBB654_161
+{
+break _200;
+}
+}
+}
+} while(0);
+ r13 = r17 == 0 ? r13 : r1;
+ heap32[(r6+12)] = 0;
+ if(r14 <r10) //_LBB654_116
+{
+continue _151;
+}
+else{
+break _145;
+}
+}
+}
+}
+else{
+ r1 = heap32[(r8)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+11)];
+ heap32[(g0)] = r5;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+ r1 = r_g0;
+ r3 = heap32[(r8)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3+9)];
+ heap32[(g0)] = r5;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ r6 = heap32[(fp+-36)];
+ r6 = r6 >> 2;
+ r6 = heap32[(r6+2)];
+ r10 = heap32[(r4+2)];
+ r5 = heap32[(r4+4)];
+ heap32[(g0)] = r11;
+ heap32[(g0+1)] = r5;
+ heap32[(g0+2)] = r10;
+ heap32[(g0+3)] = r1;
+ heap32[(g0+4)] = r_g0;
+ heap32[(g0+5)] = -1;
+ __FUNCTION_TABLE__[(r6)>>2](i7);
+}
+} while(0);
+ r1 = heap32[(r9)];
+ r3 = r1 >> 2;
+ r5 = heap32[(r3+4)];
+ r5 = (r5 + -1)|0;
+ heap32[(r3+4)] = r5;
+_215: do {
+if(!(r5 !=0)) //_LBB654_169
+{
+ r5 = heap32[(r3+1)];
+ if(r5 !=0) //_LBB654_166
+{
+ r1 = sp + -16;
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = 0;
+ r5 = _ZL13gProfileClock_2E_0;
+ gettimeofday(i7);
+ r5 = r5 >> 2;
+ r5 = heap32[(r5)];
+ r5 = r5 >> 2;
+ r1 = r1 >> 2;
+ r6 = heap32[(fp+-4)];
+ r8 = heap32[(r5)];
+ r6 = (r6 - r8)|0;
+ r1 = heap32[(r1+1)];
+ r5 = heap32[(r5+1)];
+ r1 = (r1 - r5)|0;
+ r5 = (r6 * 1000000)|0;
+ r1 = (r1 + r5)|0;
+ r5 = heap32[(r3+3)];
+ r1 = (r1 - r5)|0;
+ f0 = uint(r1); //fuitos r1, f0
+ f1 = 1000;
+ f2 = heapFloat[(r3+2)];
+ f0 = f0/f1;
+ f0 = f2+f0;
+ heapFloat[(r3+2)] = f0;
+ r1 = heap32[(r3+4)];
+ if(r1 !=0) //_LBB654_169
+{
+break _215;
+}
+else{
+ r1 = heap32[(r9)];
+}
+}
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+5)];
+ heap32[(r9)] = r1;
+}
+} while(0);
+ heap32[(g0)] = r11;
+ _ZZN23btDiscreteDynamicsWorld16solveConstraintsER19btContactSolverInfoEN27InplaceSolverIslandCallback18processConstraintsEv(i7);
+ r1 = heap32[(r4+44)];
+ r3 = r1 >> 2;
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3+4)];
+ r5 = heap32[(r4+19)];
+ r4 = heap32[(r4+21)];
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r0;
+ heap32[(g0+2)] = r4;
+ heap32[(g0+3)] = r5;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ heap32[(fp+-36)] = r7;
+ r0 = heap32[(r12+21)];
+if(!(r0 ==0)) //_LBB654_173
+{
+ r1 = heapU8[sp+-56];
+if(!(r1 ==0)) //_LBB654_172
+{
+ r1 = gNumAlignedFree;
+ r1 = r1 >> 2;
+ r3 = heap32[(r1)];
+ r3 = (r3 + 1)|0;
+ r0 = r0 >> 2;
+ heap32[(r1)] = r3;
+ r0 = heap32[(r0+-1)];
+ heap32[(g0)] = r0;
+ free(i7);
+}
+ heap32[(r12+21)] = 0;
+}
+ r0 = 1;
+ heap8[sp+-56] = r0;
+ heap32[(r12+21)] = 0;
+ heap32[(r12+19)] = 0;
+ heap32[(r12+20)] = 0;
+ r1 = heap32[(r12+16)];
+if(!(r1 ==0)) //_LBB654_177
+{
+ r3 = heapU8[sp+-76];
+if(!(r3 ==0)) //_LBB654_176
+{
+ r3 = gNumAlignedFree;
+ r3 = r3 >> 2;
+ r4 = heap32[(r3)];
+ r4 = (r4 + 1)|0;
+ r1 = r1 >> 2;
+ heap32[(r3)] = r4;
+ r1 = heap32[(r1+-1)];
+ heap32[(g0)] = r1;
+ free(i7);
+}
+ heap32[(r12+16)] = 0;
+}
+ heap8[sp+-76] = r0;
+ heap32[(r12+16)] = 0;
+ heap32[(r12+14)] = 0;
+ heap32[(r12+15)] = 0;
+ r1 = heap32[(r12+11)];
+if(!(r1 ==0)) //_LBB654_181
+{
+ r3 = heapU8[sp+-96];
+if(!(r3 ==0)) //_LBB654_180
+{
+ r3 = gNumAlignedFree;
+ r3 = r3 >> 2;
+ r4 = heap32[(r3)];
+ r4 = (r4 + 1)|0;
+ r1 = r1 >> 2;
+ heap32[(r3)] = r4;
+ r1 = heap32[(r1+-1)];
+ heap32[(g0)] = r1;
+ free(i7);
+}
+ heap32[(r12+11)] = 0;
+}
+ heap8[sp+-96] = r0;
+ heap32[(r12+11)] = 0;
+ heap32[(r12+9)] = 0;
+ heap32[(r12+10)] = 0;
+ r1 = heap32[(r2+3)];
+if(!(r1 ==0)) //_LBB654_185
+{
+ r3 = heapU8[sp+-32];
+if(!(r3 ==0)) //_LBB654_184
+{
+ r3 = gNumAlignedFree;
+ r3 = r3 >> 2;
+ r4 = heap32[(r3)];
+ r4 = (r4 + 1)|0;
+ r1 = r1 >> 2;
+ heap32[(r3)] = r4;
+ r1 = heap32[(r1+-1)];
+ heap32[(g0)] = r1;
+ free(i7);
+}
+ heap32[(r2+3)] = 0;
+}
+ heap8[sp+-32] = r0;
+ heap32[(r2+3)] = 0;
+ heap32[(r2+1)] = 0;
+ heap32[(r2+2)] = 0;
+ r0 = heap32[(r9)];
+ r1 = r0 >> 2;
+ r2 = heap32[(r1+4)];
+ r2 = (r2 + -1)|0;
+ heap32[(r1+4)] = r2;
+_246: do {
+if(!(r2 !=0)) //_LBB654_191
+{
+ r2 = heap32[(r1+1)];
+ if(r2 !=0) //_LBB654_188
+{
+ r0 = sp + -8;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = 0;
+ r2 = _ZL13gProfileClock_2E_0;
+ gettimeofday(i7);
+ r2 = r2 >> 2;
+ r2 = heap32[(r2)];
+ r2 = r2 >> 2;
+ r0 = r0 >> 2;
+ r3 = heap32[(fp+-2)];
+ r4 = heap32[(r2)];
+ r3 = (r3 - r4)|0;
+ r0 = heap32[(r0+1)];
+ r2 = heap32[(r2+1)];
+ r0 = (r0 - r2)|0;
+ r2 = (r3 * 1000000)|0;
+ r0 = (r0 + r2)|0;
+ r2 = heap32[(r1+3)];
+ r0 = (r0 - r2)|0;
+ f0 = uint(r0); //fuitos r0, f0
+ f1 = 1000;
+ f2 = heapFloat[(r1+2)];
+ f0 = f0/f1;
+ f0 = f2+f0;
+ heapFloat[(r1+2)] = f0;
+ r0 = heap32[(r1+4)];
+ if(r0 !=0) //_LBB654_191
+{
+break _246;
+}
+else{
+ r0 = heap32[(r9)];
+}
+}
+ r0 = r0 >> 2;
+ r0 = heap32[(r0+5)];
+ heap32[(r9)] = r0;
+}
+} while(0);
+ return;
+break;
+case 47:
+ r0 = _2E_str1156;
+ r1 = _2E_str2157;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 269;
+ _assert(i7);
+break;
+}
+}
+
+function _ZN23btDiscreteDynamicsWorld16removeConstraintEP17btTypedConstraint(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r1 = heap32[(fp+1)];
+ r2 = heap32[(r0+47)];
+ r3 = 0;
+_1: while(true){
+ if(r2 >r3) //_LBB655_1
+{
+ r4 = heap32[(r0+49)];
+ r5 = r3 << 2;
+ r4 = (r4 + r5)|0;
+ r4 = r4 >> 2;
+ r4 = heap32[(r4)];
+ if(r4 !=r1) //_LBB655_3
+{
+ r3 = (r3 + 1)|0;
+continue _1;
+}
+else{
+__label__ = 5;
+break _1;
+}
+}
+else{
+__label__ = 4;
+break _1;
+}
+}
+if (__label__ == 4){
+ r3 = r2;
+}
+if(!(r2 <=r3)) //_LBB655_8
+{
+ r2 = (r2 + -1)|0;
+ r3 = r3 << 2;
+ r4 = heap32[(r0+49)];
+ r2 = r2 << 2;
+ r3 = (r4 + r3)|0;
+ r4 = (r4 + r2)|0;
+ r3 = r3 >> 2;
+ r4 = r4 >> 2;
+ r5 = heap32[(r3)];
+ r4 = heap32[(r4)];
+ heap32[(r3)] = r4;
+ r3 = heap32[(r0+49)];
+ r2 = (r3 + r2)|0;
+ r2 = r2 >> 2;
+ heap32[(r2)] = r5;
+ r2 = heap32[(r0+47)];
+ r2 = (r2 + -1)|0;
+ heap32[(r0+47)] = r2;
+}
+ r0 = r1 >> 2;
+ r2 = heap32[(r0+5)];
+ r2 = r2 >> 2;
+ r3 = heap32[(r2+120)];
+ r4 = 0;
+_11: while(true){
+ if(r3 >r4) //_LBB655_9
+{
+ r5 = heap32[(r2+122)];
+ r6 = r4 << 2;
+ r5 = (r5 + r6)|0;
+ r5 = r5 >> 2;
+ r5 = heap32[(r5)];
+ if(r5 !=r1) //_LBB655_11
+{
+ r4 = (r4 + 1)|0;
+continue _11;
+}
+else{
+__label__ = 12;
+break _11;
+}
+}
+else{
+__label__ = 11;
+break _11;
+}
+}
+if (__label__ == 11){
+ r4 = r3;
+}
+ if(r3 >r4) //_LBB655_16
+{
+ r3 = (r3 + -1)|0;
+ r4 = r4 << 2;
+ r5 = heap32[(r2+122)];
+ r3 = r3 << 2;
+ r4 = (r5 + r4)|0;
+ r5 = (r5 + r3)|0;
+ r4 = r4 >> 2;
+ r5 = r5 >> 2;
+ r6 = heap32[(r4)];
+ r5 = heap32[(r5)];
+ heap32[(r4)] = r5;
+ r4 = heap32[(r2+122)];
+ r3 = (r4 + r3)|0;
+ r3 = r3 >> 2;
+ heap32[(r3)] = r6;
+ r3 = heap32[(r2+120)];
+ r3 = (r3 + -1)|0;
+ heap32[(r2+120)] = r3;
+}
+ r4 = 0;
+ r3 = r3 > r4;
+ r3 = r3 & 1;
+ heap32[(r2+63)] = r3;
+ r0 = heap32[(r0+6)];
+ r0 = r0 >> 2;
+ r2 = heap32[(r0+120)];
+_21: while(true){
+ if(r2 >r4) //_LBB655_18
+{
+ r3 = heap32[(r0+122)];
+ r5 = r4 << 2;
+ r3 = (r3 + r5)|0;
+ r3 = r3 >> 2;
+ r3 = heap32[(r3)];
+ if(r3 !=r1) //_LBB655_20
+{
+ r4 = (r4 + 1)|0;
+continue _21;
+}
+else{
+__label__ = 19;
+break _21;
+}
+}
+else{
+__label__ = 18;
+break _21;
+}
+}
+if (__label__ == 18){
+ r4 = r2;
+}
+ if(r2 >r4) //_LBB655_25
+{
+ r2 = (r2 + -1)|0;
+ r1 = r4 << 2;
+ r3 = heap32[(r0+122)];
+ r2 = r2 << 2;
+ r1 = (r3 + r1)|0;
+ r3 = (r3 + r2)|0;
+ r1 = r1 >> 2;
+ r3 = r3 >> 2;
+ r4 = heap32[(r1)];
+ r3 = heap32[(r3)];
+ heap32[(r1)] = r3;
+ r1 = heap32[(r0+122)];
+ r2 = (r1 + r2)|0;
+ r2 = r2 >> 2;
+ heap32[(r2)] = r4;
+ r2 = heap32[(r0+120)];
+ r2 = (r2 + -1)|0;
+ heap32[(r0+120)] = r2;
+}
+ r1 = 0;
+ r1 = r2 > r1;
+ r1 = r1 & 1;
+ heap32[(r0+63)] = r1;
+ return;
+}
+
+function _ZN23btDiscreteDynamicsWorld13addConstraintEP17btTypedConstraintb(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ r2 = heap32[(r1+48)];
+ r3 = heap32[(r1+47)];
+ r4 = heap32[(fp+1)];
+ r5 = heap32[(fp+2)];
+ if(r2 ==r3) //_LBB656_2
+{
+ r6 = 1;
+ r7 = r3 << 1;
+ r7 = r3 == 0 ? r6 : r7;
+if(!(r2 >=r7)) //_LBB656_1
+{
+ if(r7 !=0) //_LBB656_5
+{
+ r2 = gNumAlignedAllocs;
+ r2 = r2 >> 2;
+ r8 = heap32[(r2)];
+ r9 = r7 << 2;
+ r8 = (r8 + 1)|0;
+ r9 = r9 | 3;
+ heap32[(r2)] = r8;
+ r2 = (r9 + 16)|0;
+ heap32[(g0)] = r2;
+ malloc(i7);
+ r2 = r_g0;
+ if(r2 !=0) //_LBB656_7
+{
+ r8 = 0;
+ r9 = (r2 + 4)|0;
+ r8 = (r8 - r9)|0;
+ r8 = r8 & 15;
+ r8 = (r2 + r8)|0;
+ r9 = (r8 + 4)|0;
+ r8 = r8 >> 2;
+ heap32[(r8)] = r2;
+ r2 = r9;
+}
+}
+else{
+ r2 = 0;
+}
+ r8 = (r0 + 196)|0;
+ if(r3 <1) //_LBB656_10
+{
+ r9 = r8 >> 2;
+ r10 = heap32[(r9)];
+}
+else{
+ r9 = 0;
+_12: while(true){
+ r10 = r8 >> 2;
+ r10 = heap32[(r10)];
+ r11 = r9 << 2;
+ r12 = (r10 + r11)|0;
+ r12 = r12 >> 2;
+ r11 = (r2 + r11)|0;
+ r12 = heap32[(r12)];
+ r9 = (r9 + 1)|0;
+ r11 = r11 >> 2;
+ heap32[(r11)] = r12;
+if(!(r3 !=r9)) //_LBB656_11
+{
+break _12;
+}
+}
+ r8 = (r0 + 196)|0;
+}
+ if(r10 !=0) //_LBB656_15
+{
+ r9 = heapU8[r0+200];
+ if(r9 !=0) //_LBB656_17
+{
+ r3 = gNumAlignedFree;
+ r3 = r3 >> 2;
+ r9 = heap32[(r3)];
+ r9 = (r9 + 1)|0;
+ r10 = r10 >> 2;
+ heap32[(r3)] = r9;
+ r3 = heap32[(r10+-1)];
+ heap32[(g0)] = r3;
+ free(i7);
+ r3 = heap32[(r1+47)];
+}
+ r9 = r8 >> 2;
+ heap32[(r9)] = 0;
+}
+ r8 = r8 >> 2;
+ heap8[r0+200] = r6;
+ heap32[(r8)] = r2;
+ heap32[(r1+48)] = r7;
+}
+}
+ r0 = r3 << 2;
+ r2 = heap32[(r1+49)];
+ r0 = (r2 + r0)|0;
+ r0 = r0 >> 2;
+ heap32[(r0)] = r4;
+ r0 = heap32[(r1+47)];
+ r0 = (r0 + 1)|0;
+ heap32[(r1+47)] = r0;
+if(!(r5 ==0)) //_LBB656_22
+{
+ r0 = r4 >> 2;
+ r1 = heap32[(r0+5)];
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r4;
+ _ZN11btRigidBody16addConstraintRefEP17btTypedConstraint(i7);
+ r0 = heap32[(r0+6)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r4;
+ _ZN11btRigidBody16addConstraintRefEP17btTypedConstraint(i7);
+}
+ return;
+}
+
+function _ZN23btDiscreteDynamicsWorld21updateActivationStateEf(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = _2E_str1097;
+ r1 = heap32[(fp)];
+ heap32[(g0)] = r0;
+ r0 = r1 >> 2;
+ _ZN15CProfileManager13Start_ProfileEPKc(i7);
+ r1 = heap32[(r0+52)];
+if(!(r1 <1)) //_LBB657_25
+{
+ f0 = heapFloat[(fp+1)];
+ r1 = gDisableDeactivation;
+ r1 = heapU8[r1];
+ r2 = 0;
+_3: while(true){
+ r3 = heap32[(r0+54)];
+ r4 = r2 << 2;
+ r3 = (r3 + r4)|0;
+ r3 = r3 >> 2;
+ r3 = heap32[(r3)];
+_5: do {
+if(!(r3 ==0)) //_LBB657_24
+{
+ r4 = r3 >> 2;
+ r5 = heap32[(r4+54)];
+if(!(r5 ==4)) //_LBB657_24
+{
+_8: do {
+ if(r5 !=2) //_LBB657_6
+{
+ f1 = heapFloat[(r4+76)];
+ f2 = heapFloat[(r4+77)];
+ f3 = heapFloat[(r4+78)];
+ f1 = f1*f1;
+ f2 = f2*f2;
+ f4 = heapFloat[(r4+116)];
+ f1 = f1+f2;
+ f2 = f3*f3;
+ f1 = f1+f2;
+ f2 = f4*f4;
+ if(f1 >=f2) //_LBB657_9
+{
+__label__ = 8;
+}
+else{
+ f1 = heapFloat[(r4+80)];
+ f2 = heapFloat[(r4+81)];
+ f3 = heapFloat[(r4+82)];
+ f1 = f1*f1;
+ f2 = f2*f2;
+ f4 = heapFloat[(r4+117)];
+ f1 = f1+f2;
+ f2 = f3*f3;
+ f1 = f1+f2;
+ f2 = f4*f4;
+ if(f1 >=f2) //_LBB657_9
+{
+__label__ = 8;
+}
+else{
+ f1 = heapFloat[(r4+55)];
+ f1 = f1+f0;
+ heapFloat[(r4+55)] = f1;
+__label__ = 10;
+}
+}
+if (__label__ == 8){
+ r6 = (r5 + -4)|0;
+ heap32[(r4+55)] = 0;
+if(!(uint(r6) <uint(2))) //_LBB657_11
+{
+ r5 = 0;
+ heap32[(r4+54)] = 0;
+break _8;
+}
+}
+ if(r5 ==4) //_LBB657_24
+{
+break _5;
+}
+}
+} while(0);
+ r6 = r1 & 255;
+_18: do {
+if(!(r6 !=0)) //_LBB657_22
+{
+ r6 = (r5 + -2)|0;
+if(!(uint(r6) <uint(2))) //_LBB657_15
+{
+ f1 = heapFloat[(r4+55)];
+ f2 = 2;
+ if(f1 <=f2) //_LBB657_22
+{
+break _18;
+}
+}
+ r3 = heapU8[r3+204];
+ r3 = r3 & 3;
+ if(r3 ==0) //_LBB657_18
+{
+ if(r5 ==2) //_LBB657_21
+{
+ heap32[(r4+76)] = 0;
+ heap32[(r4+77)] = 0;
+ heap32[(r4+78)] = 0;
+ heap32[(r4+79)] = 0;
+ heap32[(r4+80)] = 0;
+ heap32[(r4+81)] = 0;
+ heap32[(r4+82)] = 0;
+ heap32[(r4+83)] = 0;
+break _5;
+}
+else{
+ if(r5 !=1) //_LBB657_24
+{
+break _5;
+}
+else{
+ heap32[(r4+54)] = 3;
+break _5;
+}
+}
+}
+else{
+ r5 = (r5 + -4)|0;
+ if(uint(r5) <uint(2)) //_LBB657_24
+{
+break _5;
+}
+else{
+ heap32[(r4+54)] = 2;
+break _5;
+}
+}
+}
+} while(0);
+ r3 = (r5 + -4)|0;
+if(!(uint(r3) <uint(2))) //_LBB657_24
+{
+ heap32[(r4+54)] = 1;
+}
+}
+}
+} while(0);
+ r2 = (r2 + 1)|0;
+ r3 = heap32[(r0+52)];
+ if(r3 >r2) //_LBB657_2
+{
+continue _3;
+}
+else{
+break _3;
+}
+}
+}
+ r0 = _ZN15CProfileManager11CurrentNodeE;
+ r0 = r0 >> 2;
+ r1 = heap32[(r0)];
+ r2 = r1 >> 2;
+ r3 = heap32[(r2+4)];
+ r3 = (r3 + -1)|0;
+ heap32[(r2+4)] = r3;
+_35: do {
+if(!(r3 !=0)) //_LBB657_31
+{
+ r3 = heap32[(r2+1)];
+ if(r3 !=0) //_LBB657_28
+{
+ r1 = sp + -8;
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = 0;
+ r3 = _ZL13gProfileClock_2E_0;
+ gettimeofday(i7);
+ r3 = r3 >> 2;
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r1 = r1 >> 2;
+ r4 = heap32[(fp+-2)];
+ r5 = heap32[(r3)];
+ r4 = (r4 - r5)|0;
+ r1 = heap32[(r1+1)];
+ r3 = heap32[(r3+1)];
+ r1 = (r1 - r3)|0;
+ r3 = (r4 * 1000000)|0;
+ r1 = (r1 + r3)|0;
+ r3 = heap32[(r2+3)];
+ r1 = (r1 - r3)|0;
+ f0 = uint(r1); //fuitos r1, f0
+ f1 = 1000;
+ f2 = heapFloat[(r2+2)];
+ f0 = f0/f1;
+ f0 = f2+f0;
+ heapFloat[(r2+2)] = f0;
+ r1 = heap32[(r2+4)];
+ if(r1 !=0) //_LBB657_31
+{
+break _35;
+}
+else{
+ r1 = heap32[(r0)];
+}
+}
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+5)];
+ heap32[(r0)] = r1;
+}
+} while(0);
+ return;
+}
+
+function _ZN23btDiscreteDynamicsWorld28internalSingleStepSimulationEf(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+var __label__ = 0;
+ i7 = sp + -32;var g0 = i7>>2; // save stack
+ r0 = _2E_str1198;
+ r1 = heap32[(fp)];
+ heap32[(g0)] = r0;
+ r0 = r1 >> 2;
+ _ZN15CProfileManager13Start_ProfileEPKc(i7);
+ r2 = heap32[(r0+24)];
+ f0 = heapFloat[(fp+1)];
+if(!(r2 ==0)) //_LBB658_2
+{
+ heap32[(g0)] = r1;
+ heapFloat[(g0+1)] = f0;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+}
+ r2 = heap32[(r0)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+33)];
+ heap32[(g0)] = r1;
+ heapFloat[(g0+1)] = f0;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ heapFloat[(r0+7)] = f0;
+ heap32[(r0+8)] = 0;
+ r2 = heap32[(r0)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+4)];
+ heap32[(g0)] = r1;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ heap32[(r0+12)] = r_g0;
+ r2 = heap32[(r0)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+10)];
+ heap32[(g0)] = r1;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ r2 = heap32[(r0)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+35)];
+ heap32[(g0)] = r1;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ heapFloat[(r0+29)] = f0;
+ r2 = heap32[(r0)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+36)];
+ r3 = (r1 + 104)|0;
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r3;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ r2 = heap32[(r0)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+34)];
+ heap32[(g0)] = r1;
+ heapFloat[(g0+1)] = f0;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ r2 = _2E_str289;
+ heap32[(g0)] = r2;
+ _ZN15CProfileManager13Start_ProfileEPKc(i7);
+ r2 = heap32[(r0+63)];
+if(!(r2 <1)) //_LBB658_5
+{
+ r2 = 0;
+_6: while(true){
+ r3 = heap32[(r0+65)];
+ r4 = r2 << 2;
+ r3 = (r3 + r4)|0;
+ r3 = r3 >> 2;
+ r3 = heap32[(r3)];
+ r4 = r3 >> 2;
+ r4 = heap32[(r4)];
+ r4 = r4 >> 2;
+ r4 = heap32[(r4+2)];
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r1;
+ heapFloat[(g0+2)] = f0;
+ r2 = (r2 + 1)|0;
+ __FUNCTION_TABLE__[(r4)>>2](i7);
+ r3 = heap32[(r0+63)];
+ if(r3 >r2) //_LBB658_4
+{
+continue _6;
+}
+else{
+break _6;
+}
+}
+}
+ r2 = _ZN15CProfileManager11CurrentNodeE;
+ r2 = r2 >> 2;
+ r3 = heap32[(r2)];
+ r4 = r3 >> 2;
+ r5 = heap32[(r4+4)];
+ r5 = (r5 + -1)|0;
+ heap32[(r4+4)] = r5;
+_9: do {
+if(!(r5 !=0)) //_LBB658_11
+{
+ r5 = heap32[(r4+1)];
+ if(r5 !=0) //_LBB658_8
+{
+ r3 = sp + -16;
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = 0;
+ r5 = _ZL13gProfileClock_2E_0;
+ gettimeofday(i7);
+ r5 = r5 >> 2;
+ r5 = heap32[(r5)];
+ r5 = r5 >> 2;
+ r3 = r3 >> 2;
+ r6 = heap32[(fp+-4)];
+ r7 = heap32[(r5)];
+ r6 = (r6 - r7)|0;
+ r3 = heap32[(r3+1)];
+ r5 = heap32[(r5+1)];
+ r3 = (r3 - r5)|0;
+ r5 = (r6 * 1000000)|0;
+ r3 = (r3 + r5)|0;
+ r5 = heap32[(r4+3)];
+ r3 = (r3 - r5)|0;
+ f1 = uint(r3); //fuitos r3, f1
+ f2 = 1000;
+ f3 = heapFloat[(r4+2)];
+ f1 = f1/f2;
+ f1 = f3+f1;
+ heapFloat[(r4+2)] = f1;
+ r3 = heap32[(r4+4)];
+ if(r3 !=0) //_LBB658_11
+{
+break _9;
+}
+else{
+ r3 = heap32[(r2)];
+}
+}
+ r3 = r3 >> 2;
+ r3 = heap32[(r3+5)];
+ heap32[(r2)] = r3;
+}
+} while(0);
+ heap32[(g0)] = r1;
+ heapFloat[(g0+1)] = f0;
+ _ZN23btDiscreteDynamicsWorld21updateActivationStateEf(i7);
+ r0 = heap32[(r0+23)];
+if(!(r0 ==0)) //_LBB658_13
+{
+ heap32[(g0)] = r1;
+ heapFloat[(g0+1)] = f0;
+ __FUNCTION_TABLE__[(r0)>>2](i7);
+}
+ r0 = heap32[(r2)];
+ r1 = r0 >> 2;
+ r3 = heap32[(r1+4)];
+ r3 = (r3 + -1)|0;
+ heap32[(r1+4)] = r3;
+_19: do {
+if(!(r3 !=0)) //_LBB658_19
+{
+ r3 = heap32[(r1+1)];
+ if(r3 !=0) //_LBB658_16
+{
+ r0 = sp + -8;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = 0;
+ r3 = _ZL13gProfileClock_2E_0;
+ gettimeofday(i7);
+ r3 = r3 >> 2;
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r0 = r0 >> 2;
+ r4 = heap32[(fp+-2)];
+ r5 = heap32[(r3)];
+ r4 = (r4 - r5)|0;
+ r0 = heap32[(r0+1)];
+ r3 = heap32[(r3+1)];
+ r0 = (r0 - r3)|0;
+ r3 = (r4 * 1000000)|0;
+ r0 = (r0 + r3)|0;
+ r3 = heap32[(r1+3)];
+ r0 = (r0 - r3)|0;
+ f0 = uint(r0); //fuitos r0, f0
+ f1 = 1000;
+ f2 = heapFloat[(r1+2)];
+ f0 = f0/f1;
+ f0 = f2+f0;
+ heapFloat[(r1+2)] = f0;
+ r0 = heap32[(r1+4)];
+ if(r0 !=0) //_LBB658_19
+{
+break _19;
+}
+else{
+ r0 = heap32[(r2)];
+}
+}
+ r0 = r0 >> 2;
+ r0 = heap32[(r0+5)];
+ heap32[(r2)] = r0;
+}
+} while(0);
+ return;
+}
+
+function _ZN23btDiscreteDynamicsWorld12addRigidBodyEP11btRigidBodyss(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+ var r13;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ r1 = r0 >> 2;
+ r2 = heap32[(r1+51)];
+ r3 = heap32[(fp)];
+ r4 = r2 & 3;
+if(!(r4 !=0)) //_LBB659_5
+{
+ r4 = heapU8[r0+496];
+ r4 = r4 & 1;
+if(!(r4 != 0)) //_LBB659_5
+{
+ f0 = heapFloat[(r1+84)];
+ f1 = 0;
+if(!(f0 ==f1)) //_LBB659_4
+{
+ r4 = r3 >> 2;
+ f1 = 1;
+ f0 = f1/f0;
+ f1 = heapFloat[(r4+58)];
+ f2 = heapFloat[(r4+57)];
+ f3 = heapFloat[(r4+56)];
+ f3 = f3*f0;
+ f2 = f2*f0;
+ heapFloat[(r1+89)] = f3;
+ f0 = f1*f0;
+ heapFloat[(r1+90)] = f2;
+ heapFloat[(r1+91)] = f0;
+ heap32[(r1+92)] = 0;
+}
+ r4 = r3 >> 2;
+ heap32[(r1+93)] = heap32[(r4+56)];
+ heap32[(r1+94)] = heap32[(r4+57)];
+ heap32[(r1+95)] = heap32[(r4+58)];
+ heap32[(r1+96)] = heap32[(r4+59)];
+}
+}
+ r4 = heap32[(r1+48)];
+if(!(r4 ==0)) //_LBB659_31
+{
+ r4 = heap32[(fp+2)];
+ r5 = heap32[(fp+3)];
+ r2 = r2 & 1;
+_10: do {
+ if(r2 != 0) //_LBB659_28
+{
+ r2 = heap32[(r1+54)];
+ r2 = (r2 + -4)|0;
+ if(uint(r2) <uint(2)) //_LBB659_30
+{
+break _10;
+}
+else{
+ heap32[(r1+54)] = 2;
+}
+}
+else{
+ r1 = r3 >> 2;
+ r2 = heap32[(r1+53)];
+ r6 = heap32[(r1+52)];
+ if(r2 ==r6) //_LBB659_9
+{
+ r7 = 1;
+ r8 = r6 << 1;
+ r8 = r6 == 0 ? r7 : r8;
+if(!(r2 >=r8)) //_LBB659_8
+{
+ if(r8 !=0) //_LBB659_12
+{
+ r2 = gNumAlignedAllocs;
+ r2 = r2 >> 2;
+ r9 = heap32[(r2)];
+ r10 = r8 << 2;
+ r9 = (r9 + 1)|0;
+ r10 = r10 | 3;
+ heap32[(r2)] = r9;
+ r2 = (r10 + 16)|0;
+ heap32[(g0)] = r2;
+ malloc(i7);
+ r2 = r_g0;
+ if(r2 !=0) //_LBB659_14
+{
+ r9 = 0;
+ r10 = (r2 + 4)|0;
+ r9 = (r9 - r10)|0;
+ r9 = r9 & 15;
+ r9 = (r2 + r9)|0;
+ r10 = (r9 + 4)|0;
+ r9 = r9 >> 2;
+ heap32[(r9)] = r2;
+ r2 = r10;
+}
+}
+else{
+ r2 = 0;
+}
+ r9 = (r3 + 216)|0;
+ if(r6 <1) //_LBB659_17
+{
+ r10 = r9 >> 2;
+ r11 = heap32[(r10)];
+}
+else{
+ r10 = 0;
+_25: while(true){
+ r11 = r9 >> 2;
+ r11 = heap32[(r11)];
+ r12 = r10 << 2;
+ r13 = (r11 + r12)|0;
+ r13 = r13 >> 2;
+ r12 = (r2 + r12)|0;
+ r13 = heap32[(r13)];
+ r10 = (r10 + 1)|0;
+ r12 = r12 >> 2;
+ heap32[(r12)] = r13;
+if(!(r6 !=r10)) //_LBB659_18
+{
+break _25;
+}
+}
+ r9 = (r3 + 216)|0;
+}
+ if(r11 !=0) //_LBB659_22
+{
+ r10 = heapU8[r3+220];
+ if(r10 !=0) //_LBB659_24
+{
+ r6 = gNumAlignedFree;
+ r6 = r6 >> 2;
+ r10 = heap32[(r6)];
+ r10 = (r10 + 1)|0;
+ r11 = r11 >> 2;
+ heap32[(r6)] = r10;
+ r6 = heap32[(r11+-1)];
+ heap32[(g0)] = r6;
+ free(i7);
+ r6 = heap32[(r1+52)];
+}
+ r10 = r9 >> 2;
+ heap32[(r10)] = 0;
+}
+ r9 = r9 >> 2;
+ heap8[r3+220] = r7;
+ heap32[(r9)] = r2;
+ heap32[(r1+53)] = r8;
+}
+}
+ r2 = r6 << 2;
+ r6 = heap32[(r1+54)];
+ r2 = (r6 + r2)|0;
+ r2 = r2 >> 2;
+ heap32[(r2)] = r0;
+ r2 = heap32[(r1+52)];
+ r2 = (r2 + 1)|0;
+ heap32[(r1+52)] = r2;
+}
+} while(0);
+ r1 = r3 >> 2;
+ r1 = heap32[(r1)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+8)];
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r0;
+ heap32[(g0+2)] = r4;
+ heap32[(g0+3)] = r5;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+}
+ return;
+}
+
+function _ZN23btDiscreteDynamicsWorld12addRigidBodyEP11btRigidBody(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ r1 = r0 >> 2;
+ r2 = heap32[(r1+51)];
+ r3 = heap32[(fp)];
+ r4 = r2 & 3;
+if(!(r4 !=0)) //_LBB660_5
+{
+ r4 = heapU8[r0+496];
+ r4 = r4 & 1;
+if(!(r4 != 0)) //_LBB660_5
+{
+ f0 = heapFloat[(r1+84)];
+ f1 = 0;
+if(!(f0 ==f1)) //_LBB660_4
+{
+ r4 = r3 >> 2;
+ f1 = 1;
+ f0 = f1/f0;
+ f1 = heapFloat[(r4+58)];
+ f2 = heapFloat[(r4+57)];
+ f3 = heapFloat[(r4+56)];
+ f3 = f3*f0;
+ f2 = f2*f0;
+ heapFloat[(r1+89)] = f3;
+ f0 = f1*f0;
+ heapFloat[(r1+90)] = f2;
+ heapFloat[(r1+91)] = f0;
+ heap32[(r1+92)] = 0;
+}
+ r4 = r3 >> 2;
+ heap32[(r1+93)] = heap32[(r4+56)];
+ heap32[(r1+94)] = heap32[(r4+57)];
+ heap32[(r1+95)] = heap32[(r4+58)];
+ heap32[(r1+96)] = heap32[(r4+59)];
+}
+}
+ r4 = heap32[(r1+48)];
+if(!(r4 ==0)) //_LBB660_32
+{
+ r4 = r2 & 1;
+_10: do {
+ if(r4 != 0) //_LBB660_28
+{
+ r4 = heap32[(r1+54)];
+ r4 = (r4 + -4)|0;
+ if(uint(r4) >uint(1)) //_LBB660_30
+{
+ heap32[(r1+54)] = 2;
+}
+else{
+break _10;
+}
+}
+else{
+ r2 = r3 >> 2;
+ r4 = heap32[(r2+53)];
+ r5 = heap32[(r2+52)];
+ if(r4 ==r5) //_LBB660_9
+{
+ r6 = 1;
+ r7 = r5 << 1;
+ r7 = r5 == 0 ? r6 : r7;
+if(!(r4 >=r7)) //_LBB660_8
+{
+ if(r7 !=0) //_LBB660_12
+{
+ r4 = gNumAlignedAllocs;
+ r4 = r4 >> 2;
+ r8 = heap32[(r4)];
+ r9 = r7 << 2;
+ r8 = (r8 + 1)|0;
+ r9 = r9 | 3;
+ heap32[(r4)] = r8;
+ r4 = (r9 + 16)|0;
+ heap32[(g0)] = r4;
+ malloc(i7);
+ r4 = r_g0;
+ if(r4 !=0) //_LBB660_14
+{
+ r8 = 0;
+ r9 = (r4 + 4)|0;
+ r8 = (r8 - r9)|0;
+ r8 = r8 & 15;
+ r8 = (r4 + r8)|0;
+ r9 = (r8 + 4)|0;
+ r8 = r8 >> 2;
+ heap32[(r8)] = r4;
+ r4 = r9;
+}
+}
+else{
+ r4 = 0;
+}
+ r8 = (r3 + 216)|0;
+ if(r5 <1) //_LBB660_17
+{
+ r9 = r8 >> 2;
+ r10 = heap32[(r9)];
+}
+else{
+ r9 = 0;
+_25: while(true){
+ r10 = r8 >> 2;
+ r10 = heap32[(r10)];
+ r11 = r9 << 2;
+ r12 = (r10 + r11)|0;
+ r12 = r12 >> 2;
+ r11 = (r4 + r11)|0;
+ r12 = heap32[(r12)];
+ r9 = (r9 + 1)|0;
+ r11 = r11 >> 2;
+ heap32[(r11)] = r12;
+if(!(r5 !=r9)) //_LBB660_18
+{
+break _25;
+}
+}
+ r8 = (r3 + 216)|0;
+}
+ if(r10 !=0) //_LBB660_22
+{
+ r9 = heapU8[r3+220];
+ if(r9 !=0) //_LBB660_24
+{
+ r5 = gNumAlignedFree;
+ r5 = r5 >> 2;
+ r9 = heap32[(r5)];
+ r9 = (r9 + 1)|0;
+ r10 = r10 >> 2;
+ heap32[(r5)] = r9;
+ r5 = heap32[(r10+-1)];
+ heap32[(g0)] = r5;
+ free(i7);
+ r5 = heap32[(r2+52)];
+}
+ r9 = r8 >> 2;
+ heap32[(r9)] = 0;
+}
+ r8 = r8 >> 2;
+ heap8[r3+220] = r6;
+ heap32[(r8)] = r4;
+ heap32[(r2+53)] = r7;
+}
+}
+ r4 = r5 << 2;
+ r5 = heap32[(r2+54)];
+ r4 = (r5 + r4)|0;
+ r4 = r4 >> 2;
+ heap32[(r4)] = r0;
+ r4 = heap32[(r2+52)];
+ r4 = (r4 + 1)|0;
+ heap32[(r2+52)] = r4;
+ r2 = heap32[(r1+51)];
+}
+} while(0);
+ r1 = r3 >> 2;
+ r1 = heap32[(r1)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+8)];
+ r4 = 2;
+ r5 = 1;
+ r2 = r2 & 3;
+ r6 = -3;
+ r7 = -1;
+ r4 = r2 != 0 ? r4 : r5;
+ r2 = r2 != 0 ? r6 : r7;
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r0;
+ heap32[(g0+2)] = r4;
+ heap32[(g0+3)] = r2;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+}
+ return;
+}
+
+function _ZN23btDiscreteDynamicsWorld10setGravityERK9btVector3(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = heap32[(fp+1)];
+ r0 = r0 >> 2;
+ r1 = r1 >> 2;
+ heap32[(r0+56)] = heap32[(r1)];
+ heap32[(r0+57)] = heap32[(r1+1)];
+ heap32[(r0+58)] = heap32[(r1+2)];
+ heap32[(r0+59)] = heap32[(r1+3)];
+ r2 = heap32[(r0+52)];
+if(!(r2 <1)) //_LBB661_9
+{
+ r2 = 0;
+_3: while(true){
+ r3 = heap32[(r0+54)];
+ r4 = r2 << 2;
+ r3 = (r3 + r4)|0;
+ r3 = r3 >> 2;
+ r3 = heap32[(r3)];
+ r4 = r3 >> 2;
+ r5 = heap32[(r4+54)];
+if(!(r5 ==2)) //_LBB661_8
+{
+if(!(r5 ==5)) //_LBB661_8
+{
+ r3 = heapU8[r3+496];
+ r3 = r3 & 1;
+if(!(r3 != 0)) //_LBB661_8
+{
+ f0 = heapFloat[(r4+84)];
+ f1 = 0;
+if(!(f0 ==f1)) //_LBB661_7
+{
+ f1 = 1;
+ f0 = f1/f0;
+ f1 = heapFloat[(r1+2)];
+ f2 = heapFloat[(r1+1)];
+ f3 = heapFloat[(r1)];
+ f3 = f3*f0;
+ f2 = f2*f0;
+ heapFloat[(r4+89)] = f3;
+ f0 = f1*f0;
+ heapFloat[(r4+90)] = f2;
+ heapFloat[(r4+91)] = f0;
+ heap32[(r4+92)] = 0;
+}
+ heap32[(r4+93)] = heap32[(r1)];
+ heap32[(r4+94)] = heap32[(r1+1)];
+ heap32[(r4+95)] = heap32[(r1+2)];
+ heap32[(r4+96)] = heap32[(r1+3)];
+}
+}
+}
+ r2 = (r2 + 1)|0;
+ r3 = heap32[(r0+52)];
+ if(r3 >r2) //_LBB661_2
+{
+continue _3;
+}
+else{
+break _3;
+}
+}
+}
+ return;
+}
+
+function _ZN23btDiscreteDynamicsWorld15removeRigidBodyEP11btRigidBody(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ r2 = heap32[(fp+1)];
+ r3 = heap32[(r1+52)];
+ r4 = 0;
+_1: while(true){
+ if(r3 >r4) //_LBB662_1
+{
+ r5 = heap32[(r1+54)];
+ r6 = r4 << 2;
+ r5 = (r5 + r6)|0;
+ r5 = r5 >> 2;
+ r5 = heap32[(r5)];
+ if(r5 !=r2) //_LBB662_3
+{
+ r4 = (r4 + 1)|0;
+continue _1;
+}
+else{
+__label__ = 5;
+break _1;
+}
+}
+else{
+__label__ = 4;
+break _1;
+}
+}
+if (__label__ == 4){
+ r4 = r3;
+}
+if(!(r3 <=r4)) //_LBB662_8
+{
+ r3 = (r3 + -1)|0;
+ r4 = r4 << 2;
+ r5 = heap32[(r1+54)];
+ r3 = r3 << 2;
+ r4 = (r5 + r4)|0;
+ r5 = (r5 + r3)|0;
+ r4 = r4 >> 2;
+ r5 = r5 >> 2;
+ r6 = heap32[(r4)];
+ r5 = heap32[(r5)];
+ heap32[(r4)] = r5;
+ r4 = heap32[(r1+54)];
+ r3 = (r4 + r3)|0;
+ r3 = r3 >> 2;
+ heap32[(r3)] = r6;
+ r3 = heap32[(r1+52)];
+ r3 = (r3 + -1)|0;
+ heap32[(r1+52)] = r3;
+}
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r2;
+ _ZN16btCollisionWorld21removeCollisionObjectEP17btCollisionObject(i7);
+ return;
+}
+
+function _ZN23btDiscreteDynamicsWorld21removeCollisionObjectEP17btCollisionObject(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ r1 = heap32[(fp)];
+ r2 = heapU8[r0+232];
+ r2 = r2 & 2;
+if(!(r2 ==0)) //_LBB663_3
+{
+if(!(r0 ==0)) //_LBB663_3
+{
+ r2 = r1 >> 2;
+ r2 = heap32[(r2)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+21)];
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r0;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ return;
+}
+}
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r0;
+ _ZN16btCollisionWorld21removeCollisionObjectEP17btCollisionObject(i7);
+ return;
+}
+
+function _ZN23btDiscreteDynamicsWorld18addCollisionObjectEP17btCollisionObjectss(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = heap32[(fp+1)];
+ r2 = heap32[(fp+2)];
+ r3 = heap32[(fp+3)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = r2;
+ heap32[(g0+3)] = r3;
+ _ZN16btCollisionWorld18addCollisionObjectEP17btCollisionObjectss(i7);
+ return;
+}
+
+function _ZN23btDiscreteDynamicsWorld14stepSimulationEfif(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var f0;
+ var f1;
+ var f2;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ _ZN15CProfileManager5ResetEv(i7);
+ r0 = _2E_str1299;
+ r1 = heap32[(fp+2)];
+ heap32[(g0)] = r0;
+ r0 = heap32[(fp)];
+ f0 = heapFloat[(fp+1)];
+ _ZN15CProfileManager13Start_ProfileEPKc(i7);
+ if(r1 ==0) //_LBB665_4
+{
+ r1 = r0 >> 2;
+ f1 = 0;
+ heapFloat[(r1+60)] = f0;
+ if(f0 <f1) //_LBB665_6
+{
+ f1 = -f0;
+}
+else{
+ f1 = f0;
+}
+ f2 = 1.1920928955078125e-007;
+ if(f1 >=f2) //_LBB665_9
+{
+ r1 = 1;
+ f1 = f0;
+ r3 = r1;
+}
+else{
+ r1 = 0;
+ f1 = f0;
+ r3 = r1;
+}
+}
+else{
+ f1 = heapFloat[(fp+3)];
+ r2 = r0 >> 2;
+ f2 = heapFloat[(r2+60)];
+ f0 = f2+f0;
+ heapFloat[(r2+60)] = f0;
+ if(f0 >=f1) //_LBB665_3
+{
+ f2 = f0/f1;
+ r3 = f2|0;
+ f2 = r3; //fitos r3, f2
+ f2 = f2*f1;
+ f0 = f0-f2;
+ heapFloat[(r2+60)] = f0;
+}
+else{
+ r3 = 0;
+}
+}
+ r2 = r0 >> 2;
+ r4 = heap32[(r2)];
+ r4 = r4 >> 2;
+ r4 = heap32[(r4+4)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r4)>>2](i7);
+ r4 = r_g0;
+if(!(r4 ==0)) //_LBB665_12
+{
+ r4 = heap32[(r2)];
+ r4 = r4 >> 2;
+ r4 = heap32[(r4+4)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r4)>>2](i7);
+ r5 = r_g0 >> 2;
+ r5 = heap32[(r5)];
+ r5 = r5 >> 2;
+ r5 = heap32[(r5+12)];
+ heap32[(g0)] = r_g0;
+ __FUNCTION_TABLE__[(r5)>>2](i7);
+ r4 = r_g0 >>> 4;
+ r5 = gDisableDeactivation;
+ r4 = r4 & 1;
+ heap8[r5] = r4;
+}
+ if(r3 ==0) //_LBB665_16
+{
+ r1 = heap32[(r2)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+19)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+}
+else{
+ r4 = heap32[(r2)];
+ r4 = r4 >> 2;
+ r5 = r3 > r1 ? r1 : r3;
+ r4 = heap32[(r4+38)];
+ f0 = r5; //fitos r5, f0
+ f0 = f0*f1;
+ heap32[(g0)] = r0;
+ heapFloat[(g0+1)] = f0;
+ __FUNCTION_TABLE__[(r4)>>2](i7);
+ r4 = heap32[(r2)];
+ r4 = r4 >> 2;
+ r4 = heap32[(r4+40)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r4)>>2](i7);
+if(!(r5 <1)) //_LBB665_17
+{
+ r4 = r3 ^ -1;
+ r1 = r1 ^ -1;
+ r1 = r4 > r1 ? r4 : r1;
+ r1 = r1 ^ -1;
+_22: while(true){
+ r4 = heap32[(r2)];
+ r4 = r4 >> 2;
+ r4 = heap32[(r4+37)];
+ heap32[(g0)] = r0;
+ heapFloat[(g0+1)] = f1;
+ __FUNCTION_TABLE__[(r4)>>2](i7);
+ r4 = heap32[(r2)];
+ r4 = r4 >> 2;
+ r4 = heap32[(r4+19)];
+ r1 = (r1 + -1)|0;
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r4)>>2](i7);
+ if(r1 ==0) //_LBB665_17
+{
+break _22;
+}
+else{
+continue _22;
+}
+}
+}
+}
+ r1 = heap32[(r2)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+28)];
+ heap32[(g0)] = r0;
+ r0 = _ZN15CProfileManager12FrameCounterE;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+ r0 = r0 >> 2;
+ r1 = heap32[(r0)];
+ r2 = _ZN15CProfileManager11CurrentNodeE;
+ r1 = (r1 + 1)|0;
+ r2 = r2 >> 2;
+ heap32[(r0)] = r1;
+ r0 = heap32[(r2)];
+ r1 = r0 >> 2;
+ r4 = heap32[(r1+4)];
+ r4 = (r4 + -1)|0;
+ heap32[(r1+4)] = r4;
+_25: do {
+if(!(r4 !=0)) //_LBB665_23
+{
+ r4 = heap32[(r1+1)];
+ if(r4 !=0) //_LBB665_20
+{
+ r0 = sp + -8;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = 0;
+ r4 = _ZL13gProfileClock_2E_0;
+ gettimeofday(i7);
+ r4 = r4 >> 2;
+ r4 = heap32[(r4)];
+ r4 = r4 >> 2;
+ r0 = r0 >> 2;
+ r5 = heap32[(fp+-2)];
+ r6 = heap32[(r4)];
+ r5 = (r5 - r6)|0;
+ r0 = heap32[(r0+1)];
+ r4 = heap32[(r4+1)];
+ r0 = (r0 - r4)|0;
+ r4 = (r5 * 1000000)|0;
+ r0 = (r0 + r4)|0;
+ r4 = heap32[(r1+3)];
+ r0 = (r0 - r4)|0;
+ f0 = uint(r0); //fuitos r0, f0
+ f1 = 1000;
+ f2 = heapFloat[(r1+2)];
+ f0 = f0/f1;
+ f0 = f2+f0;
+ heapFloat[(r1+2)] = f0;
+ r0 = heap32[(r1+4)];
+ if(r0 !=0) //_LBB665_23
+{
+break _25;
+}
+else{
+ r0 = heap32[(r2)];
+}
+}
+ r0 = r0 >> 2;
+ r0 = heap32[(r0+5)];
+ heap32[(r2)] = r0;
+}
+} while(0);
+ r_g0 = r3;
+ return;
+}
+
+function _ZN23btDiscreteDynamicsWorld28synchronizeSingleMotionStateEP11btRigidBody(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+var __label__ = 0;
+ i7 = sp + -96;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ if(r0 !=0) //_LBB666_2
+{
+ r1 = r0 >> 2;
+ r2 = heap32[(r1+118)];
+if(!(r2 ==0)) //_LBB666_4
+{
+ r2 = heapU8[r0+204];
+ r2 = r2 & 3;
+ if(r2 ==0) //_LBB666_5
+{
+ r2 = heap32[(fp)];
+ r2 = r2 >> 2;
+ f0 = heapFloat[(r2+60)];
+ f1 = heapFloat[(r1+60)];
+ f2 = heapFloat[(r1+33)];
+ f3 = heapFloat[(r1+34)];
+ f4 = heapFloat[(r1+35)];
+ r2 = sp + -64;
+ r3 = (r0 + 68)|0;
+ r0 = (r0 + 148)|0;
+ f0 = f0*f1;
+ heap32[(g0)] = r3;
+ heapFloat[(g0+1)] = f2;
+ heapFloat[(g0+2)] = f3;
+ heapFloat[(g0+3)] = f4;
+ heap32[(g0+4)] = r0;
+ heapFloat[(g0+5)] = f0;
+ heap32[(g0+6)] = r2;
+ _ZN15btTransformUtil18integrateTransformERK11btTransformRK9btVector3S5_fRS0_(i7);
+ r0 = heap32[(r1+118)];
+ r1 = r0 >> 2;
+ r1 = heap32[(r1)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+3)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r2;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+ return;
+}
+}
+ return;
+}
+else{
+ r0 = _2E_str13100;
+ r1 = _2E_str1461;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 184;
+ _assert(i7);
+}
+}
+
+function _ZN23btDiscreteDynamicsWorld23synchronizeMotionStatesEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var f0;
+ var f1;
+ var f2;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = _2E_str1562;
+ heap32[(g0)] = r0;
+ r0 = heap32[(fp)];
+ _ZN15CProfileManager13Start_ProfileEPKc(i7);
+ r1 = heapU8[r0+246];
+_1: do {
+ if(r1 !=0) //_LBB667_2
+{
+ r1 = r0 >> 2;
+ r2 = heap32[(r1+2)];
+if(!(r2 <1)) //_LBB667_13
+{
+ r2 = 0;
+_4: while(true){
+ r3 = heap32[(r1+4)];
+ r4 = r2 << 2;
+ r3 = (r3 + r4)|0;
+ r3 = r3 >> 2;
+ r3 = heap32[(r3)];
+ r4 = heapU8[r3+232];
+ r4 = r4 & 2;
+if(!(r4 ==0)) //_LBB667_7
+{
+if(!(r3 ==0)) //_LBB667_7
+{
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r3;
+ _ZN23btDiscreteDynamicsWorld28synchronizeSingleMotionStateEP11btRigidBody(i7);
+}
+}
+ r2 = (r2 + 1)|0;
+ r3 = heap32[(r1+2)];
+ if(r3 >r2) //_LBB667_4
+{
+continue _4;
+}
+else{
+break _1;
+}
+}
+}
+}
+else{
+ r1 = r0 >> 2;
+ r2 = heap32[(r1+52)];
+ if(r2 >0) //_LBB667_8
+{
+ r2 = 0;
+_12: while(true){
+ r3 = heap32[(r1+54)];
+ r4 = r2 << 2;
+ r3 = (r3 + r4)|0;
+ r3 = r3 >> 2;
+ r3 = heap32[(r3)];
+ r4 = r3 >> 2;
+ r4 = heap32[(r4+54)];
+if(!(r4 ==2)) //_LBB667_12
+{
+if(!(r4 ==5)) //_LBB667_12
+{
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r3;
+ _ZN23btDiscreteDynamicsWorld28synchronizeSingleMotionStateEP11btRigidBody(i7);
+}
+}
+ r2 = (r2 + 1)|0;
+ r3 = heap32[(r1+52)];
+ if(r3 >r2) //_LBB667_9
+{
+continue _12;
+}
+else{
+break _1;
+}
+}
+}
+}
+} while(0);
+ r0 = _ZN15CProfileManager11CurrentNodeE;
+ r0 = r0 >> 2;
+ r1 = heap32[(r0)];
+ r2 = r1 >> 2;
+ r3 = heap32[(r2+4)];
+ r3 = (r3 + -1)|0;
+ heap32[(r2+4)] = r3;
+_19: do {
+if(!(r3 !=0)) //_LBB667_19
+{
+ r3 = heap32[(r2+1)];
+ if(r3 !=0) //_LBB667_16
+{
+ r1 = sp + -8;
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = 0;
+ r3 = _ZL13gProfileClock_2E_0;
+ gettimeofday(i7);
+ r3 = r3 >> 2;
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r1 = r1 >> 2;
+ r4 = heap32[(fp+-2)];
+ r5 = heap32[(r3)];
+ r4 = (r4 - r5)|0;
+ r1 = heap32[(r1+1)];
+ r3 = heap32[(r3+1)];
+ r1 = (r1 - r3)|0;
+ r3 = (r4 * 1000000)|0;
+ r1 = (r1 + r3)|0;
+ r3 = heap32[(r2+3)];
+ r1 = (r1 - r3)|0;
+ f0 = uint(r1); //fuitos r1, f0
+ f1 = 1000;
+ f2 = heapFloat[(r2+2)];
+ f0 = f0/f1;
+ f0 = f2+f0;
+ heapFloat[(r2+2)] = f0;
+ r1 = heap32[(r2+4)];
+ if(r1 !=0) //_LBB667_19
+{
+break _19;
+}
+else{
+ r1 = heap32[(r0)];
+}
+}
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+5)];
+ heap32[(r0)] = r1;
+}
+} while(0);
+ return;
+}
+
+function _ZN23btDiscreteDynamicsWorld12applyGravityEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r1 = heap32[(r0+52)];
+if(!(r1 <1)) //_LBB668_7
+{
+ r1 = 0;
+_3: while(true){
+ r2 = heap32[(r0+54)];
+ r3 = r1 << 2;
+ r2 = (r2 + r3)|0;
+ r2 = r2 >> 2;
+ r2 = heap32[(r2)];
+ r3 = r2 >> 2;
+ r4 = heap32[(r3+54)];
+if(!(r4 ==2)) //_LBB668_6
+{
+if(!(r4 ==5)) //_LBB668_6
+{
+ r2 = heapU8[r2+204];
+ r2 = r2 & 3;
+if(!(r2 !=0)) //_LBB668_6
+{
+ f0 = heapFloat[(r3+89)];
+ f1 = heapFloat[(r3+85)];
+ f0 = f0*f1;
+ f1 = heapFloat[(r3+101)];
+ f2 = heapFloat[(r3+91)];
+ f3 = heapFloat[(r3+87)];
+ f4 = heapFloat[(r3+90)];
+ f5 = heapFloat[(r3+86)];
+ f0 = f1+f0;
+ heapFloat[(r3+101)] = f0;
+ f0 = f4*f5;
+ f1 = heapFloat[(r3+102)];
+ f0 = f1+f0;
+ heapFloat[(r3+102)] = f0;
+ f0 = f2*f3;
+ f1 = heapFloat[(r3+103)];
+ f0 = f1+f0;
+ heapFloat[(r3+103)] = f0;
+}
+}
+}
+ r1 = (r1 + 1)|0;
+ r2 = heap32[(r0+52)];
+ if(r2 >r1) //_LBB668_2
+{
+continue _3;
+}
+else{
+break _3;
+}
+}
+}
+ return;
+}
+
+function _ZN23btDiscreteDynamicsWorld14debugDrawWorldEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+ var r13;
+ var r14;
+ var r15;
+ var r16;
+ var r17;
+ var r18;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+ var f10;
+ var f11;
+ var f12;
+ var f13;
+ var f14;
+ var f15;
+ var f16;
+ var f17;
+ var f18;
+ var f19;
+ var f20;
+ var f21;
+ var f22;
+ var f23;
+ var f24;
+ var f25;
+ var f26;
+ var f27;
+ var f28;
+ var f29;
+ var f30;
+var __label__ = 0;
+ i7 = sp + -824;var g0 = i7>>2; // save stack
+ r0 = _2E_str16101;
+ heap32[(g0)] = r0;
+ _ZN15CProfileManager13Start_ProfileEPKc(i7);
+ r0 = heap32[(fp)];
+ heap32[(g0)] = r0;
+ _ZN16btCollisionWorld14debugDrawWorldEv(i7);
+ r1 = r0 >> 2;
+ r2 = heap32[(r1)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+4)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ r2 = r_g0;
+if(!(r2 ==0)) //_LBB669_53
+{
+ r2 = heap32[(r1)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+4)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ r3 = r_g0 >> 2;
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3+12)];
+ heap32[(g0)] = r_g0;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ r2 = r_g0 & 6144;
+if(!(r2 ==0)) //_LBB669_53
+{
+ r2 = heap32[(r1)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+24)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ r2 = r_g0;
+ r3 = (r2 + -1)|0;
+if(!(r3 <0)) //_LBB669_53
+{
+ r3 = sp + -296;
+ r4 = sp + -392;
+ r5 = (r3 + 48)|0;
+ r6 = (r4 + 48)|0;
+ r2 = (r2 + -1)|0;
+_5: while(true){
+ r7 = r2;
+ r2 = heap32[(r1)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+25)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r7;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ r2 = r_g0;
+ r8 = heap32[(r1)];
+ r8 = r8 >> 2;
+ r8 = heap32[(r8+4)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r8)>>2](i7);
+ r9 = r_g0 >> 2;
+ r9 = heap32[(r9)];
+ r9 = r9 >> 2;
+ r9 = heap32[(r9+12)];
+ heap32[(g0)] = r_g0;
+ __FUNCTION_TABLE__[(r9)>>2](i7);
+ r8 = r_g0;
+ r9 = heap32[(r1)];
+ r9 = r9 >> 2;
+ r9 = heap32[(r9+4)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r9)>>2](i7);
+ r10 = r_g0 >> 2;
+ r10 = heap32[(r10)];
+ r10 = r10 >> 2;
+ r10 = heap32[(r10+12)];
+ heap32[(g0)] = r_g0;
+ __FUNCTION_TABLE__[(r10)>>2](i7);
+ r9 = r_g0;
+ r10 = r2 >> 2;
+ f0 = heapFloat[(r10+8)];
+ heapFloat[(fp+-191)] = f0;
+ f1 = 0;
+ heapFloat[(fp+-192)] = f1;
+_7: do {
+if(!(f0 <=f1)) //_LBB669_52
+{
+ r8 = r8 >>> 11;
+ r9 = r9 >>> 12;
+ r8 = r8 & 1;
+ r9 = r9 & 1;
+ r10 = r2 >> 2;
+ r11 = heap32[(r10+1)];
+ if(r11 >4) //_LBB669_8
+{
+ if(r11 ==5) //_LBB669_20
+{
+ r11 = heap32[(r10+5)];
+ r11 = r11 >> 2;
+ f0 = heapFloat[(r11+1)];
+ f1 = heapFloat[(r10+72)];
+ f2 = heapFloat[(r11+2)];
+ f3 = heapFloat[(r10+76)];
+ f4 = heapFloat[(r10+73)];
+ f5 = heapFloat[(r10+77)];
+ f6 = f1*f0;
+ f7 = f3*f2;
+ f8 = heapFloat[(r11+3)];
+ f9 = heapFloat[(r10+80)];
+ f10 = heapFloat[(r11+9)];
+ f11 = heapFloat[(r10+84)];
+ f12 = heapFloat[(r11+5)];
+ f13 = heapFloat[(r10+74)];
+ f14 = heapFloat[(r11+10)];
+ f15 = heapFloat[(r10+85)];
+ f16 = heapFloat[(r11+6)];
+ f17 = heapFloat[(r10+78)];
+ f18 = heapFloat[(r11+11)];
+ f19 = heapFloat[(r10+86)];
+ f20 = heapFloat[(r11+7)];
+ f21 = heapFloat[(r10+82)];
+ f22 = heapFloat[(r10+81)];
+ f23 = f4*f0;
+ f24 = f5*f2;
+ f6 = f6+f7;
+ f7 = f9*f8;
+ f25 = heapFloat[(r11+15)];
+ f26 = heapFloat[(r11+14)];
+ f27 = heapFloat[(r11+13)];
+ f28 = f13*f0;
+ f29 = f17*f2;
+ f23 = f23+f24;
+ f24 = f22*f8;
+ f6 = f6+f7;
+ r11 = r4 >> 2;
+ f7 = f28+f29;
+ f28 = f21*f8;
+ f23 = f23+f24;
+ heapFloat[(fp+-98)] = f6;
+ f6 = f1*f12;
+ f24 = f3*f16;
+ f7 = f7+f28;
+ heapFloat[(r11+1)] = f23;
+ heapFloat[(r11+2)] = f7;
+ f7 = f4*f12;
+ f23 = f5*f16;
+ f6 = f6+f24;
+ f24 = f9*f20;
+ f28 = f13*f12;
+ f29 = f17*f16;
+ f7 = f7+f23;
+ f23 = f22*f20;
+ f6 = f6+f24;
+ heap32[(r11+3)] = 0;
+ f24 = f28+f29;
+ f28 = f21*f20;
+ f7 = f7+f23;
+ heapFloat[(r11+4)] = f6;
+ f1 = f1*f10;
+ f3 = f3*f14;
+ f6 = f24+f28;
+ heapFloat[(r11+5)] = f7;
+ heapFloat[(r11+6)] = f6;
+ f4 = f4*f10;
+ f5 = f5*f14;
+ f1 = f1+f3;
+ f3 = f9*f18;
+ f6 = f13*f10;
+ f7 = f17*f14;
+ f4 = f4+f5;
+ f5 = f22*f18;
+ f1 = f1+f3;
+ heap32[(r11+7)] = 0;
+ f0 = f0*f11;
+ f2 = f2*f15;
+ f3 = f6+f7;
+ f6 = f21*f18;
+ f4 = f4+f5;
+ heapFloat[(r11+8)] = f1;
+ f1 = f12*f11;
+ f5 = f16*f15;
+ f0 = f0+f2;
+ f2 = f8*f19;
+ f3 = f3+f6;
+ heapFloat[(r11+9)] = f4;
+ f0 = f0+f2;
+ heapFloat[(r11+10)] = f3;
+ f2 = f10*f11;
+ f3 = f14*f15;
+ f1 = f1+f5;
+ f4 = f20*f19;
+ f1 = f1+f4;
+ f2 = f2+f3;
+ f3 = f18*f19;
+ f0 = f0+f27;
+ heap32[(r11+11)] = 0;
+ f2 = f2+f3;
+ f1 = f1+f26;
+ heapFloat[(r11+12)] = f0;
+ f0 = f2+f25;
+ heapFloat[(r11+13)] = f1;
+ heapFloat[(r11+14)] = f0;
+ heap32[(r11+15)] = 0;
+if(!(r8 ==0)) //_LBB669_22
+{
+ r12 = heap32[(r1)];
+ r12 = r12 >> 2;
+ r12 = heap32[(r12+4)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r12)>>2](i7);
+ r13 = r_g0 >> 2;
+ r13 = heap32[(r13)];
+ r13 = r13 >> 2;
+ r13 = heap32[(r13+14)];
+ heap32[(g0)] = r_g0;
+ heap32[(g0+1)] = r4;
+ f0 = heapFloat[(fp+-191)];
+ heapFloat[(g0+2)] = f0;
+ __FUNCTION_TABLE__[(r13)>>2](i7);
+}
+ r12 = heap32[(r10+6)];
+ r12 = r12 >> 2;
+ f0 = heapFloat[(r12+1)];
+ f1 = heapFloat[(r10+88)];
+ f2 = heapFloat[(r12+2)];
+ f3 = heapFloat[(r10+92)];
+ f4 = heapFloat[(r10+89)];
+ f5 = heapFloat[(r10+93)];
+ f6 = f1*f0;
+ f7 = f3*f2;
+ f8 = heapFloat[(r12+3)];
+ f9 = heapFloat[(r10+96)];
+ f10 = heapFloat[(r12+9)];
+ f11 = heapFloat[(r10+100)];
+ f12 = heapFloat[(r12+5)];
+ f13 = heapFloat[(r10+90)];
+ f14 = heapFloat[(r12+10)];
+ f15 = heapFloat[(r10+101)];
+ f16 = heapFloat[(r12+6)];
+ f17 = heapFloat[(r10+94)];
+ f18 = heapFloat[(r12+11)];
+ f19 = heapFloat[(r10+102)];
+ f20 = heapFloat[(r12+7)];
+ f21 = heapFloat[(r10+98)];
+ f22 = heapFloat[(r10+97)];
+ f23 = f4*f0;
+ f24 = f5*f2;
+ f6 = f6+f7;
+ f7 = f9*f8;
+ f25 = heapFloat[(r12+15)];
+ f26 = heapFloat[(r12+14)];
+ f27 = heapFloat[(r12+13)];
+ f28 = f13*f0;
+ f29 = f17*f2;
+ f23 = f23+f24;
+ f24 = f22*f8;
+ f6 = f6+f7;
+ f7 = f28+f29;
+ f28 = f21*f8;
+ f23 = f23+f24;
+ heapFloat[(fp+-98)] = f6;
+ f6 = f1*f12;
+ f24 = f3*f16;
+ f7 = f7+f28;
+ heapFloat[(r11+1)] = f23;
+ heapFloat[(r11+2)] = f7;
+ f7 = f4*f12;
+ f23 = f5*f16;
+ f6 = f6+f24;
+ f24 = f9*f20;
+ f28 = f13*f12;
+ f29 = f17*f16;
+ f7 = f7+f23;
+ f23 = f22*f20;
+ f6 = f6+f24;
+ heap32[(r11+3)] = 0;
+ f24 = f28+f29;
+ f28 = f21*f20;
+ f7 = f7+f23;
+ heapFloat[(r11+4)] = f6;
+ f1 = f1*f10;
+ f3 = f3*f14;
+ f6 = f24+f28;
+ heapFloat[(r11+5)] = f7;
+ heapFloat[(r11+6)] = f6;
+ f4 = f4*f10;
+ f5 = f5*f14;
+ f1 = f1+f3;
+ f3 = f9*f18;
+ f6 = f13*f10;
+ f7 = f17*f14;
+ f4 = f4+f5;
+ f5 = f22*f18;
+ f1 = f1+f3;
+ heap32[(r11+7)] = 0;
+ f0 = f0*f11;
+ f2 = f2*f15;
+ f3 = f6+f7;
+ f6 = f21*f18;
+ f4 = f4+f5;
+ heapFloat[(r11+8)] = f1;
+ f1 = f12*f11;
+ f5 = f16*f15;
+ f0 = f0+f2;
+ f2 = f8*f19;
+ f3 = f3+f6;
+ heapFloat[(r11+9)] = f4;
+ f0 = f0+f2;
+ heapFloat[(r11+10)] = f3;
+ f2 = f10*f11;
+ f3 = f14*f15;
+ f1 = f1+f5;
+ f4 = f20*f19;
+ f1 = f1+f4;
+ f2 = f2+f3;
+ f3 = f18*f19;
+ f0 = f0+f27;
+ heap32[(r11+11)] = 0;
+ f2 = f2+f3;
+ f1 = f1+f26;
+ heapFloat[(r11+12)] = f0;
+ f0 = f2+f25;
+ heapFloat[(r11+13)] = f1;
+ heapFloat[(r11+14)] = f0;
+ heap32[(r11+15)] = 0;
+if(!(r8 ==0)) //_LBB669_24
+{
+ r8 = heap32[(r1)];
+ r8 = r8 >> 2;
+ r8 = heap32[(r8+4)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r8)>>2](i7);
+ r12 = r_g0 >> 2;
+ r12 = heap32[(r12)];
+ r12 = r12 >> 2;
+ r12 = heap32[(r12+14)];
+ heap32[(g0)] = r_g0;
+ heap32[(g0+1)] = r4;
+ f0 = heapFloat[(fp+-191)];
+ heapFloat[(g0+2)] = f0;
+ __FUNCTION_TABLE__[(r12)>>2](i7);
+}
+ if(r9 ==0) //_LBB669_52
+{
+break _7;
+}
+else{
+ r8 = sp + -408;
+ heap32[(g0)] = r8;
+ heap32[(g0+1)] = r2;
+ heap32[(g0+2)] = 1086506843;
+ f0 = heapFloat[(fp+-191)];
+ heapFloat[(g0+3)] = f0;
+ _ZNK21btConeTwistConstraint16GetPointForAngleEff(i7);
+ r9 = r8 >> 2;
+ f0 = heapFloat[(fp+-102)];
+ f1 = heapFloat[(fp+-98)];
+ f2 = heapFloat[(r9+1)];
+ f3 = heapFloat[(r11+1)];
+ f4 = heapFloat[(r11+4)];
+ f5 = heapFloat[(r11+5)];
+ f1 = f1*f0;
+ f3 = f3*f2;
+ f6 = heapFloat[(r9+2)];
+ f7 = heapFloat[(r11+2)];
+ f8 = heapFloat[(r11+8)];
+ f9 = heapFloat[(r11+9)];
+ f10 = heapFloat[(r11+6)];
+ f4 = f4*f0;
+ f5 = f5*f2;
+ f1 = f1+f3;
+ f3 = f7*f6;
+ f7 = heapFloat[(r11+10)];
+ f0 = f8*f0;
+ f2 = f9*f2;
+ f4 = f4+f5;
+ f5 = f10*f6;
+ f1 = f1+f3;
+ f3 = heapFloat[(r11+12)];
+ f8 = heapFloat[(r11+14)];
+ f9 = heapFloat[(r11+13)];
+ f4 = f4+f5;
+ f0 = f0+f2;
+ f2 = f7*f6;
+ f1 = f1+f3;
+ f0 = f0+f2;
+ f2 = f4+f9;
+ heapFloat[(fp+-102)] = f1;
+ f0 = f0+f8;
+ heapFloat[(r9+1)] = f2;
+ r12 = 0;
+ heapFloat[(r9+2)] = f0;
+ heap32[(r9+3)] = 0;
+_20: while(true){
+ f0 = r12; //fitos r12, f0
+ f1 = 6.2831850051879883;
+ f0 = f0*f1;
+ f1 = 32;
+ r13 = sp + -472;
+ f0 = f0/f1;
+ heap32[(g0)] = r13;
+ heap32[(g0+1)] = r2;
+ heapFloat[(g0+2)] = f0;
+ f0 = heapFloat[(fp+-191)];
+ heapFloat[(g0+3)] = f0;
+ _ZNK21btConeTwistConstraint16GetPointForAngleEff(i7);
+ r14 = r13 >> 2;
+ f0 = heapFloat[(fp+-118)];
+ f1 = heapFloat[(fp+-98)];
+ f2 = heapFloat[(r14+1)];
+ f3 = heapFloat[(r11+1)];
+ f4 = heapFloat[(r11+4)];
+ f5 = heapFloat[(r11+5)];
+ f1 = f1*f0;
+ f3 = f3*f2;
+ f6 = heapFloat[(r14+2)];
+ f7 = heapFloat[(r11+2)];
+ f8 = heapFloat[(r11+8)];
+ f9 = heapFloat[(r11+9)];
+ f10 = heapFloat[(r11+6)];
+ f4 = f4*f0;
+ f5 = f5*f2;
+ f1 = f1+f3;
+ f3 = f7*f6;
+ f7 = heapFloat[(r11+10)];
+ f0 = f8*f0;
+ f2 = f9*f2;
+ f4 = f4+f5;
+ f5 = f10*f6;
+ f1 = f1+f3;
+ f3 = heapFloat[(r11+12)];
+ f8 = heapFloat[(r11+14)];
+ f9 = heapFloat[(r11+13)];
+ f4 = f4+f5;
+ f0 = f0+f2;
+ f2 = f7*f6;
+ f1 = f1+f3;
+ f0 = f0+f2;
+ f2 = f4+f9;
+ heapFloat[(fp+-118)] = f1;
+ f0 = f0+f8;
+ heapFloat[(r14+1)] = f2;
+ heapFloat[(r14+2)] = f0;
+ heap32[(r14+3)] = 0;
+ r15 = heap32[(r1)];
+ r15 = r15 >> 2;
+ r15 = heap32[(r15+4)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r15)>>2](i7);
+ r16 = r_g0 >> 2;
+ r16 = heap32[(r16)];
+ r16 = r16 >> 2;
+ r16 = heap32[(r16+2)];
+ r17 = sp + -152;
+ r18 = r17 >> 2;
+ heap32[(fp+-38)] = 0;
+ heap32[(r18+1)] = 0;
+ heap32[(r18+2)] = 0;
+ heap32[(r18+3)] = 0;
+ heap32[(g0)] = r_g0;
+ heap32[(g0+1)] = r8;
+ heap32[(g0+2)] = r13;
+ heap32[(g0+3)] = r17;
+ r15 = r12 & 3;
+ __FUNCTION_TABLE__[(r16)>>2](i7);
+if(!(r15 !=0)) //_LBB669_28
+{
+ r15 = heap32[(r1)];
+ r15 = r15 >> 2;
+ r15 = heap32[(r15+4)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r15)>>2](i7);
+ r16 = r_g0 >> 2;
+ r16 = heap32[(r16)];
+ r16 = r16 >> 2;
+ r16 = heap32[(r16+2)];
+ r17 = sp + -136;
+ r18 = r17 >> 2;
+ heap32[(fp+-34)] = 0;
+ heap32[(r18+1)] = 0;
+ heap32[(r18+2)] = 0;
+ heap32[(r18+3)] = 0;
+ heap32[(g0)] = r_g0;
+ heap32[(g0+1)] = r6;
+ heap32[(g0+2)] = r13;
+ heap32[(g0+3)] = r17;
+ __FUNCTION_TABLE__[(r16)>>2](i7);
+}
+ heap32[(fp+-102)] = heap32[(fp+-118)];
+ heap32[(r9+1)] = heap32[(r14+1)];
+ r12 = (r12 + 1)|0;
+ heap32[(r9+2)] = heap32[(r14+2)];
+ heap32[(r9+3)] = heap32[(r14+3)];
+if(!(r12 !=32)) //_LBB669_26
+{
+break _20;
+}
+}
+ r2 = heap32[(r10+6)];
+ f0 = heapFloat[(r10+110)];
+ heapFloat[(fp+-193)] = f0;
+ f0 = heapFloat[(r10+125)];
+ heapFloat[(fp+-194)] = f0;
+ r2 = r2 >> 2;
+ f0 = heapFloat[(r2+84)];
+ f1 = heapFloat[(fp+-192)];
+ if(f0 <=f1) //_LBB669_31
+{
+ r2 = heap32[(r10+5)];
+ r2 = r2 >> 2;
+ f0 = heapFloat[(r10+84)];
+ f1 = heapFloat[(r2+9)];
+ f2 = heapFloat[(r2+5)];
+ f3 = heapFloat[(r2+1)];
+ f4 = heapFloat[(r10+85)];
+ f5 = heapFloat[(r2+10)];
+ f6 = heapFloat[(r2+6)];
+ f8 = heapFloat[(r2+2)];
+ f12 = heapFloat[(r10+74)];
+ f13 = heapFloat[(r10+78)];
+ f14 = heapFloat[(r10+73)];
+ f15 = heapFloat[(r10+77)];
+ f7 = heapFloat[(r10+72)];
+ f9 = heapFloat[(r10+76)];
+ f10 = f1*f0;
+ f11 = f5*f4;
+ f16 = f2*f0;
+ f17 = f6*f4;
+ f0 = f3*f0;
+ f4 = f8*f4;
+ f18 = heapFloat[(r10+86)];
+ f19 = heapFloat[(r2+11)];
+ f20 = heapFloat[(r2+7)];
+ f21 = heapFloat[(r2+3)];
+ f22 = heapFloat[(r10+82)];
+ f23 = heapFloat[(r10+81)];
+ f24 = heapFloat[(r10+80)];
+ f10 = f10+f11;
+ f11 = f19*f18;
+ f16 = f16+f17;
+ f17 = f20*f18;
+ f0 = f0+f4;
+ heapFloat[(fp+-192)] = f0;
+ f4 = f21*f18;
+ f18 = f12*f1;
+ f25 = f13*f5;
+ f26 = f14*f1;
+ f27 = f15*f5;
+ f1 = f7*f1;
+ f5 = f9*f5;
+ f28 = f12*f2;
+ f29 = f13*f6;
+ f30 = f14*f2;
+ f0 = f15*f6;
+ f2 = f7*f2;
+ f6 = f9*f6;
+ f12 = f12*f3;
+ f13 = f13*f8;
+ f14 = f14*f3;
+ f15 = f15*f8;
+ f3 = f7*f3;
+ f8 = f9*f8;
+ f7 = f10+f11;
+ f9 = heapFloat[(r2+15)];
+ f10 = f16+f17;
+ f11 = heapFloat[(r2+14)];
+ f16 = heapFloat[(fp+-192)];
+ f4 = f16+f4;
+ f16 = heapFloat[(r2+13)];
+ f17 = f18+f25;
+ f18 = f22*f19;
+ f25 = f26+f27;
+ f26 = f23*f19;
+ f1 = f1+f5;
+ f5 = f24*f19;
+ f19 = f28+f29;
+ f27 = f22*f20;
+ f0 = f30+f0;
+ f28 = f23*f20;
+ f2 = f2+f6;
+ f6 = f24*f20;
+ f20 = f12+f13;
+ f22 = f22*f21;
+ f29 = f14+f15;
+ f23 = f23*f21;
+ f3 = f3+f8;
+ f21 = f24*f21;
+ f12 = f7+f9;
+ f13 = f10+f11;
+ f4 = f4+f16;
+ f14 = f17+f18;
+ f15 = f25+f26;
+ f1 = f1+f5;
+ f5 = f19+f27;
+ f0 = f0+f28;
+ f2 = f2+f6;
+ f6 = f20+f22;
+ f8 = f29+f23;
+ f3 = f3+f21;
+}
+else{
+ f0 = heapFloat[(r10+100)];
+ f1 = heapFloat[(r2+9)];
+ f2 = heapFloat[(r2+5)];
+ f3 = heapFloat[(r2+1)];
+ f4 = heapFloat[(r10+101)];
+ f5 = heapFloat[(r2+10)];
+ f6 = heapFloat[(r2+6)];
+ f7 = heapFloat[(r2+2)];
+ f8 = heapFloat[(r10+90)];
+ f9 = heapFloat[(r10+94)];
+ f10 = heapFloat[(r10+89)];
+ f11 = heapFloat[(r10+93)];
+ f12 = heapFloat[(r10+88)];
+ f13 = heapFloat[(r10+92)];
+ f14 = f1*f0;
+ f15 = f5*f4;
+ f16 = f2*f0;
+ f17 = f6*f4;
+ f0 = f3*f0;
+ f4 = f7*f4;
+ f18 = heapFloat[(r10+102)];
+ f19 = heapFloat[(r2+11)];
+ f20 = heapFloat[(r2+7)];
+ f21 = heapFloat[(r2+3)];
+ f22 = heapFloat[(r10+98)];
+ f23 = heapFloat[(r10+97)];
+ f24 = heapFloat[(r10+96)];
+ f14 = f14+f15;
+ f15 = f19*f18;
+ f16 = f16+f17;
+ f17 = f20*f18;
+ f0 = f0+f4;
+ heapFloat[(fp+-192)] = f0;
+ f4 = f21*f18;
+ f18 = f8*f1;
+ f25 = f9*f5;
+ f26 = f10*f1;
+ f27 = f11*f5;
+ f1 = f12*f1;
+ f5 = f13*f5;
+ f28 = f8*f2;
+ f29 = f9*f6;
+ f30 = f10*f2;
+ f0 = f11*f6;
+ f2 = f12*f2;
+ f6 = f13*f6;
+ f8 = f8*f3;
+ f9 = f9*f7;
+ f10 = f10*f3;
+ f11 = f11*f7;
+ f3 = f12*f3;
+ f7 = f13*f7;
+ f12 = f14+f15;
+ f13 = heapFloat[(r2+15)];
+ f14 = f16+f17;
+ f15 = heapFloat[(r2+14)];
+ f16 = heapFloat[(fp+-192)];
+ f4 = f16+f4;
+ f16 = heapFloat[(r2+13)];
+ f17 = f18+f25;
+ f18 = f22*f19;
+ f25 = f26+f27;
+ f26 = f23*f19;
+ f1 = f1+f5;
+ f5 = f24*f19;
+ f19 = f28+f29;
+ f27 = f22*f20;
+ f0 = f30+f0;
+ f28 = f23*f20;
+ f2 = f2+f6;
+ f6 = f24*f20;
+ f8 = f8+f9;
+ f9 = f22*f21;
+ f10 = f10+f11;
+ f11 = f23*f21;
+ f3 = f3+f7;
+ f7 = f24*f21;
+ f12 = f12+f13;
+ f13 = f14+f15;
+ f4 = f4+f16;
+ f14 = f17+f18;
+ f15 = f25+f26;
+ f1 = f1+f5;
+ f5 = f19+f27;
+ f0 = f0+f28;
+ f2 = f2+f6;
+ f6 = f8+f9;
+ f8 = f10+f11;
+ f3 = f3+f7;
+}
+ heapFloat[(fp+-98)] = f3;
+ heapFloat[(r11+1)] = f8;
+ heapFloat[(r11+2)] = f6;
+ heap32[(r11+3)] = 0;
+ heapFloat[(r11+4)] = f2;
+ heapFloat[(r11+5)] = f0;
+ heapFloat[(r11+6)] = f5;
+ heap32[(r11+7)] = 0;
+ heapFloat[(r11+8)] = f1;
+ heapFloat[(r11+9)] = f15;
+ heapFloat[(r11+10)] = f14;
+ heap32[(r11+11)] = 0;
+ heapFloat[(r11+12)] = f4;
+ heapFloat[(r11+13)] = f13;
+ heapFloat[(r11+14)] = f12;
+ r2 = sp + -424;
+ heap32[(r11+15)] = 0;
+ r8 = r2 >> 2;
+ heapFloat[(fp+-106)] = f4;
+ heapFloat[(r8+1)] = f13;
+ heapFloat[(r8+2)] = f12;
+ r9 = sp + -440;
+ heap32[(r8+3)] = 0;
+ r8 = r9 >> 2;
+ heapFloat[(fp+-110)] = f3;
+ heapFloat[(r8+1)] = f2;
+ heapFloat[(r8+2)] = f1;
+ r10 = sp + -456;
+ heap32[(r8+3)] = 0;
+ r8 = r10 >> 2;
+ heapFloat[(fp+-114)] = f8;
+ heapFloat[(r8+1)] = f0;
+ heapFloat[(r8+2)] = f15;
+ heap32[(r8+3)] = 0;
+ r8 = heap32[(r1)];
+ r8 = r8 >> 2;
+ r8 = heap32[(r8+4)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r8)>>2](i7);
+ r11 = r_g0 >> 2;
+ r11 = heap32[(r11)];
+ r11 = r11 >> 2;
+ r11 = heap32[(r11+15)];
+ r12 = sp + -120;
+ r13 = r12 >> 2;
+ heap32[(fp+-30)] = 0;
+ heap32[(r13+1)] = 0;
+ heap32[(r13+2)] = 0;
+ heap32[(r13+3)] = 0;
+ f0 = heapFloat[(fp+-194)];
+ f1 = -f0;
+ f2 = heapFloat[(fp+-193)];
+ f1 = f1-f2;
+ f0 = f2-f0;
+ heap32[(g0)] = r_g0;
+ heap32[(g0+1)] = r2;
+ heap32[(g0+2)] = r9;
+ heap32[(g0+3)] = r10;
+ f2 = heapFloat[(fp+-191)];
+ heapFloat[(g0+4)] = f2;
+ heapFloat[(g0+5)] = f2;
+ heapFloat[(g0+6)] = f1;
+ heapFloat[(g0+7)] = f0;
+ heap32[(g0+8)] = r12;
+ heap32[(g0+9)] = 1;
+ heap32[(g0+10)] = 1092616192;
+ __FUNCTION_TABLE__[(r11)>>2](i7);
+}
+}
+else{
+ if(r11 ==6) //_LBB669_33
+{
+ r11 = sp + -536;
+ r12 = r11 >> 2;
+ heap32[(fp+-134)] = heap32[(r10+263)];
+ heap32[(r12+1)] = heap32[(r10+264)];
+ heap32[(r12+2)] = heap32[(r10+265)];
+ heap32[(r12+3)] = heap32[(r10+266)];
+ heap32[(r12+4)] = heap32[(r10+267)];
+ heap32[(r12+5)] = heap32[(r10+268)];
+ heap32[(r12+6)] = heap32[(r10+269)];
+ heap32[(r12+7)] = heap32[(r10+270)];
+ heap32[(r12+8)] = heap32[(r10+271)];
+ heap32[(r12+9)] = heap32[(r10+272)];
+ heap32[(r12+10)] = heap32[(r10+273)];
+ heap32[(r12+11)] = heap32[(r10+274)];
+ heap32[(r12+12)] = heap32[(r10+275)];
+ heap32[(r12+13)] = heap32[(r10+276)];
+ heap32[(r12+14)] = heap32[(r10+277)];
+ heap32[(r12+15)] = heap32[(r10+278)];
+if(!(r8 ==0)) //_LBB669_35
+{
+ r13 = heap32[(r1)];
+ r13 = r13 >> 2;
+ r13 = heap32[(r13+4)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r13)>>2](i7);
+ r14 = r_g0 >> 2;
+ r14 = heap32[(r14)];
+ r14 = r14 >> 2;
+ r14 = heap32[(r14+14)];
+ heap32[(g0)] = r_g0;
+ heap32[(g0+1)] = r11;
+ f0 = heapFloat[(fp+-191)];
+ heapFloat[(g0+2)] = f0;
+ __FUNCTION_TABLE__[(r14)>>2](i7);
+}
+ heap32[(fp+-134)] = heap32[(r10+279)];
+ heap32[(r12+1)] = heap32[(r10+280)];
+ heap32[(r12+2)] = heap32[(r10+281)];
+ heap32[(r12+3)] = heap32[(r10+282)];
+ heap32[(r12+4)] = heap32[(r10+283)];
+ heap32[(r12+5)] = heap32[(r10+284)];
+ heap32[(r12+6)] = heap32[(r10+285)];
+ heap32[(r12+7)] = heap32[(r10+286)];
+ heap32[(r12+8)] = heap32[(r10+287)];
+ heap32[(r12+9)] = heap32[(r10+288)];
+ heap32[(r12+10)] = heap32[(r10+289)];
+ heap32[(r12+11)] = heap32[(r10+290)];
+ heap32[(r12+12)] = heap32[(r10+291)];
+ heap32[(r12+13)] = heap32[(r10+292)];
+ heap32[(r12+14)] = heap32[(r10+293)];
+ heap32[(r12+15)] = heap32[(r10+294)];
+if(!(r8 ==0)) //_LBB669_37
+{
+ r8 = heap32[(r1)];
+ r8 = r8 >> 2;
+ r8 = heap32[(r8+4)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r8)>>2](i7);
+ r13 = r_g0 >> 2;
+ r13 = heap32[(r13)];
+ r13 = r13 >> 2;
+ r13 = heap32[(r13+14)];
+ heap32[(g0)] = r_g0;
+ heap32[(g0+1)] = r11;
+ f0 = heapFloat[(fp+-191)];
+ heapFloat[(g0+2)] = f0;
+ __FUNCTION_TABLE__[(r13)>>2](i7);
+}
+ if(r9 ==0) //_LBB669_52
+{
+break _7;
+}
+else{
+ r2 = (r2 + 1164)|0;
+ f0 = heapFloat[(r10+263)];
+ heapFloat[(fp+-134)] = f0;
+ heap32[(r12+1)] = heap32[(r10+264)];
+ f1 = heapFloat[(r10+265)];
+ heapFloat[(r12+2)] = f1;
+ heap32[(r12+3)] = heap32[(r10+266)];
+ f2 = heapFloat[(r10+267)];
+ heapFloat[(r12+4)] = f2;
+ heap32[(r12+5)] = heap32[(r10+268)];
+ f3 = heapFloat[(r10+269)];
+ heapFloat[(r12+6)] = f3;
+ heap32[(r12+7)] = heap32[(r10+270)];
+ f4 = heapFloat[(r10+271)];
+ heapFloat[(r12+8)] = f4;
+ heap32[(r12+9)] = heap32[(r10+272)];
+ f5 = heapFloat[(r10+273)];
+ heapFloat[(r12+10)] = f5;
+ heap32[(r12+11)] = heap32[(r10+274)];
+ heap32[(r12+12)] = heap32[(r10+275)];
+ heap32[(r12+13)] = heap32[(r10+276)];
+ heap32[(r12+14)] = heap32[(r10+277)];
+ r8 = sp + -552;
+ heap32[(r12+15)] = heap32[(r10+278)];
+ r9 = r8 >> 2;
+ heapFloat[(fp+-138)] = f1;
+ heapFloat[(r9+1)] = f3;
+ heapFloat[(r9+2)] = f5;
+ heap32[(r9+3)] = 0;
+ r9 = sp + -568;
+ heapFloat[(fp+-142)] = f0;
+ r13 = r9 >> 2;
+ heapFloat[(r13+1)] = f2;
+ heapFloat[(r13+2)] = f4;
+ heap32[(r13+3)] = 0;
+ r14 = heap32[(r1)];
+ r14 = r14 >> 2;
+ r14 = heap32[(r14+4)];
+ f0 = heapFloat[(r10+230)];
+ f1 = heapFloat[(r10+231)];
+ f2 = heapFloat[(r10+246)];
+ f3 = heapFloat[(r10+247)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r14)>>2](i7);
+ r15 = r_g0 >> 2;
+ r15 = heap32[(r15)];
+ r15 = r15 >> 2;
+ r15 = heap32[(r15+16)];
+ r16 = sp + -104;
+ r17 = r16 >> 2;
+ heap32[(fp+-26)] = 0;
+ heap32[(r17+1)] = 0;
+ heap32[(r17+2)] = 0;
+ heap32[(r17+3)] = 0;
+ f4 = 0.89999997615814209;
+ f5 = heapFloat[(fp+-191)];
+ f4 = f5*f4;
+ heap32[(g0)] = r_g0;
+ heap32[(g0+1)] = r2;
+ heap32[(g0+2)] = r8;
+ heap32[(g0+3)] = r9;
+ heapFloat[(g0+4)] = f4;
+ heapFloat[(g0+5)] = f0;
+ heapFloat[(g0+6)] = f1;
+ heapFloat[(g0+7)] = f2;
+ heapFloat[(g0+8)] = f3;
+ heap32[(g0+9)] = r16;
+ heap32[(g0+10)] = 1092616192;
+ __FUNCTION_TABLE__[(r15)>>2](i7);
+ f0 = heapFloat[(r12+9)];
+ f1 = heapFloat[(r12+5)];
+ heap32[(fp+-142)] = heap32[(r12+1)];
+ heapFloat[(r13+1)] = f1;
+ heapFloat[(r13+2)] = f0;
+ heap32[(r13+3)] = 0;
+ f0 = heapFloat[(r10+296)];
+ f1 = heapFloat[(r10+297)];
+ heapFloat[(g0)] = f0;
+ cosf(i7);
+ f2 = f_g0;
+ heapFloat[(g0)] = f0;
+ sinf(i7);
+ f0 = f_g0;
+ heapFloat[(g0)] = f1;
+ cosf(i7);
+ f3 = f_g0;
+ heapFloat[(g0)] = f1;
+ sinf(i7);
+ f4 = heapFloat[(fp+-142)];
+ f5 = f2*f3;
+ f6 = heapFloat[(r13+1)];
+ f7 = f2*f_g0;
+ f8 = heapFloat[(r13+2)];
+ f5 = f5*f4;
+ f7 = f7*f6;
+ f9 = f3*f0;
+ f10 = f_g0*f0;
+ f5 = f5+f7;
+ f0 = f8*f0;
+ r8 = sp + -584;
+ f7 = f9*f4;
+ f9 = f10*f6;
+ f3 = f6*f3;
+ f1 = f4*f_g0;
+ f0 = f5-f0;
+ r9 = r8 >> 2;
+ f4 = f7+f9;
+ f2 = f8*f2;
+ f1 = f3-f1;
+ heapFloat[(fp+-146)] = f0;
+ f0 = f4+f2;
+ heapFloat[(r9+1)] = f1;
+ heapFloat[(r9+2)] = f0;
+ f0 = heapFloat[(r10+279)];
+ heapFloat[(fp+-134)] = f0;
+ heap32[(r12+1)] = heap32[(r10+280)];
+ heap32[(r12+2)] = heap32[(r10+281)];
+ heap32[(r12+3)] = heap32[(r10+282)];
+ f1 = heapFloat[(r10+283)];
+ heapFloat[(r12+4)] = f1;
+ heap32[(r12+5)] = heap32[(r10+284)];
+ heap32[(r12+6)] = heap32[(r10+285)];
+ heap32[(r12+7)] = heap32[(r10+286)];
+ f2 = heapFloat[(r10+287)];
+ heapFloat[(r12+8)] = f2;
+ heap32[(r12+9)] = heap32[(r10+288)];
+ heap32[(r12+10)] = heap32[(r10+289)];
+ heap32[(r12+11)] = heap32[(r10+290)];
+ heap32[(r12+12)] = heap32[(r10+291)];
+ heap32[(r12+13)] = heap32[(r10+292)];
+ heap32[(r12+14)] = heap32[(r10+293)];
+ r9 = sp + -600;
+ f0 = -f0;
+ heap32[(r12+15)] = heap32[(r10+294)];
+ r13 = r9 >> 2;
+ f1 = -f1;
+ heapFloat[(fp+-150)] = f0;
+ f0 = -f2;
+ heapFloat[(r13+1)] = f1;
+ heapFloat[(r13+2)] = f0;
+ heap32[(r13+3)] = 0;
+ f0 = heapFloat[(r10+214)];
+ f1 = heapFloat[(r10+215)];
+ if(f0 <=f1) //_LBB669_40
+{
+if(!(f0 >=f1)) //_LBB669_42
+{
+ r13 = heap32[(r1)];
+ r13 = r13 >> 2;
+ r13 = heap32[(r13+4)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r13)>>2](i7);
+ r14 = r_g0 >> 2;
+ r14 = heap32[(r14)];
+ r14 = r14 >> 2;
+ r14 = heap32[(r14+15)];
+ r15 = sp + -72;
+ r16 = r15 >> 2;
+ heap32[(fp+-18)] = 0;
+ heap32[(r16+1)] = 0;
+ heap32[(r16+2)] = 0;
+ heap32[(r16+3)] = 0;
+ heap32[(g0)] = r_g0;
+ heap32[(g0+1)] = r2;
+ heap32[(g0+2)] = r9;
+ heap32[(g0+3)] = r8;
+ f2 = heapFloat[(fp+-191)];
+ heapFloat[(g0+4)] = f2;
+ heapFloat[(g0+5)] = f2;
+ heapFloat[(g0+6)] = f0;
+ heapFloat[(g0+7)] = f1;
+ heap32[(g0+8)] = r15;
+ heap32[(g0+9)] = 1;
+ heap32[(g0+10)] = 1092616192;
+ __FUNCTION_TABLE__[(r14)>>2](i7);
+}
+}
+else{
+ r13 = heap32[(r1)];
+ r13 = r13 >> 2;
+ r13 = heap32[(r13+4)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r13)>>2](i7);
+ r14 = r_g0 >> 2;
+ r14 = heap32[(r14)];
+ r14 = r14 >> 2;
+ r14 = heap32[(r14+15)];
+ r15 = sp + -88;
+ r16 = r15 >> 2;
+ heap32[(fp+-22)] = 0;
+ heap32[(r16+1)] = 0;
+ heap32[(r16+2)] = 0;
+ heap32[(r16+3)] = 0;
+ heap32[(g0)] = r_g0;
+ heap32[(g0+1)] = r2;
+ heap32[(g0+2)] = r9;
+ heap32[(g0+3)] = r8;
+ f0 = heapFloat[(fp+-191)];
+ heapFloat[(g0+4)] = f0;
+ heapFloat[(g0+5)] = f0;
+ heap32[(g0+6)] = -1068953637;
+ heap32[(g0+7)] = 1078530011;
+ heap32[(g0+8)] = r15;
+ heap32[(g0+9)] = 0;
+ heap32[(g0+10)] = 1092616192;
+ __FUNCTION_TABLE__[(r14)>>2](i7);
+}
+ heap32[(fp+-134)] = heap32[(r10+263)];
+ heap32[(r12+1)] = heap32[(r10+264)];
+ heap32[(r12+2)] = heap32[(r10+265)];
+ heap32[(r12+3)] = heap32[(r10+266)];
+ heap32[(r12+4)] = heap32[(r10+267)];
+ heap32[(r12+5)] = heap32[(r10+268)];
+ heap32[(r12+6)] = heap32[(r10+269)];
+ heap32[(r12+7)] = heap32[(r10+270)];
+ heap32[(r12+8)] = heap32[(r10+271)];
+ heap32[(r12+9)] = heap32[(r10+272)];
+ heap32[(r12+10)] = heap32[(r10+273)];
+ heap32[(r12+11)] = heap32[(r10+274)];
+ heap32[(r12+12)] = heap32[(r10+275)];
+ heap32[(r12+13)] = heap32[(r10+276)];
+ heap32[(r12+14)] = heap32[(r10+277)];
+ r2 = sp + -616;
+ heap32[(r12+15)] = heap32[(r10+278)];
+ r8 = r2 >> 2;
+ heap32[(fp+-154)] = heap32[(r10+167)];
+ heap32[(r8+1)] = heap32[(r10+168)];
+ heap32[(r8+2)] = heap32[(r10+169)];
+ r9 = sp + -632;
+ heap32[(r8+3)] = heap32[(r10+170)];
+ r8 = r9 >> 2;
+ heap32[(fp+-158)] = heap32[(r10+171)];
+ heap32[(r8+1)] = heap32[(r10+172)];
+ heap32[(r8+2)] = heap32[(r10+173)];
+ heap32[(r8+3)] = heap32[(r10+174)];
+ r8 = heap32[(r1)];
+ r8 = r8 >> 2;
+ r8 = heap32[(r8+4)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r8)>>2](i7);
+ r10 = r_g0 >> 2;
+ r10 = heap32[(r10)];
+ r10 = r10 >> 2;
+ r10 = heap32[(r10+18)];
+ r12 = sp + -56;
+ r13 = r12 >> 2;
+ heap32[(fp+-14)] = 0;
+ heap32[(r13+1)] = 0;
+ heap32[(r13+2)] = 0;
+ heap32[(r13+3)] = 0;
+ heap32[(g0)] = r_g0;
+ heap32[(g0+1)] = r2;
+ heap32[(g0+2)] = r9;
+ heap32[(g0+3)] = r11;
+ heap32[(g0+4)] = r12;
+ __FUNCTION_TABLE__[(r10)>>2](i7);
+}
+}
+else{
+ if(r11 ==7) //_LBB669_43
+{
+ r11 = sp + -696;
+ r12 = r11 >> 2;
+ heap32[(fp+-174)] = heap32[(r10+203)];
+ heap32[(r12+1)] = heap32[(r10+204)];
+ heap32[(r12+2)] = heap32[(r10+205)];
+ heap32[(r12+3)] = heap32[(r10+206)];
+ heap32[(r12+4)] = heap32[(r10+207)];
+ heap32[(r12+5)] = heap32[(r10+208)];
+ heap32[(r12+6)] = heap32[(r10+209)];
+ heap32[(r12+7)] = heap32[(r10+210)];
+ heap32[(r12+8)] = heap32[(r10+211)];
+ heap32[(r12+9)] = heap32[(r10+212)];
+ heap32[(r12+10)] = heap32[(r10+213)];
+ heap32[(r12+11)] = heap32[(r10+214)];
+ heap32[(r12+12)] = heap32[(r10+215)];
+ heap32[(r12+13)] = heap32[(r10+216)];
+ heap32[(r12+14)] = heap32[(r10+217)];
+ heap32[(r12+15)] = heap32[(r10+218)];
+if(!(r8 ==0)) //_LBB669_45
+{
+ r13 = heap32[(r1)];
+ r13 = r13 >> 2;
+ r13 = heap32[(r13+4)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r13)>>2](i7);
+ r14 = r_g0 >> 2;
+ r14 = heap32[(r14)];
+ r14 = r14 >> 2;
+ r14 = heap32[(r14+14)];
+ heap32[(g0)] = r_g0;
+ heap32[(g0+1)] = r11;
+ f0 = heapFloat[(fp+-191)];
+ heapFloat[(g0+2)] = f0;
+ __FUNCTION_TABLE__[(r14)>>2](i7);
+}
+ heap32[(fp+-174)] = heap32[(r10+219)];
+ heap32[(r12+1)] = heap32[(r10+220)];
+ heap32[(r12+2)] = heap32[(r10+221)];
+ heap32[(r12+3)] = heap32[(r10+222)];
+ heap32[(r12+4)] = heap32[(r10+223)];
+ heap32[(r12+5)] = heap32[(r10+224)];
+ heap32[(r12+6)] = heap32[(r10+225)];
+ heap32[(r12+7)] = heap32[(r10+226)];
+ heap32[(r12+8)] = heap32[(r10+227)];
+ heap32[(r12+9)] = heap32[(r10+228)];
+ heap32[(r12+10)] = heap32[(r10+229)];
+ heap32[(r12+11)] = heap32[(r10+230)];
+ heap32[(r12+12)] = heap32[(r10+231)];
+ heap32[(r12+13)] = heap32[(r10+232)];
+ heap32[(r12+14)] = heap32[(r10+233)];
+ heap32[(r12+15)] = heap32[(r10+234)];
+if(!(r8 ==0)) //_LBB669_47
+{
+ r8 = heap32[(r1)];
+ r8 = r8 >> 2;
+ r8 = heap32[(r8+4)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r8)>>2](i7);
+ r12 = r_g0 >> 2;
+ r12 = heap32[(r12)];
+ r12 = r12 >> 2;
+ r12 = heap32[(r12+14)];
+ heap32[(g0)] = r_g0;
+ heap32[(g0+1)] = r11;
+ f0 = heapFloat[(fp+-191)];
+ heapFloat[(g0+2)] = f0;
+ __FUNCTION_TABLE__[(r12)>>2](i7);
+}
+ if(r9 ==0) //_LBB669_52
+{
+break _7;
+}
+else{
+ r8 = (r2 + 924)|0;
+ r9 = heapU8[r2+168];
+ if(r9 ==0) //_LBB669_50
+{
+ r2 = (r2 + 876)|0;
+}
+else{
+ r2 = (r2 + 812)|0;
+}
+ r2 = r2 >> 2;
+ f0 = heapFloat[(r2+1)];
+ f1 = heapFloat[(r10+43)];
+ f2 = heapFloat[(r2)];
+ f3 = heapFloat[(r2+2)];
+ f4 = heapFloat[(r2+5)];
+ f5 = heapFloat[(r2+4)];
+ f6 = f2*f1;
+ f7 = heapFloat[(fp+-192)];
+ f8 = f0*f7;
+ f9 = heapFloat[(r2+6)];
+ f10 = heapFloat[(r2+9)];
+ f11 = heapFloat[(r2+8)];
+ f12 = f5*f1;
+ f13 = f4*f7;
+ f6 = f6+f8;
+ f3 = f3*f7;
+ f14 = heapFloat[(r2+10)];
+ f1 = f11*f1;
+ f15 = f10*f7;
+ f12 = f12+f13;
+ f9 = f9*f7;
+ f6 = f6+f3;
+ f16 = heapFloat[(r2+12)];
+ f17 = heapFloat[(r2+13)];
+ f18 = heapFloat[(r2+14)];
+ r2 = sp + -712;
+ f12 = f12+f9;
+ f1 = f1+f15;
+ f7 = f14*f7;
+ f6 = f6+f16;
+ f1 = f1+f7;
+ r9 = r2 >> 2;
+ f12 = f12+f17;
+ heapFloat[(fp+-178)] = f6;
+ f1 = f1+f18;
+ heapFloat[(r9+1)] = f12;
+ heapFloat[(r9+2)] = f1;
+ heap32[(r9+3)] = 0;
+ f1 = heapFloat[(r10+44)];
+ f6 = f2*f1;
+ f12 = f5*f1;
+ f6 = f6+f8;
+ f1 = f11*f1;
+ f8 = f12+f13;
+ f3 = f6+f3;
+ r9 = sp + -728;
+ f1 = f1+f15;
+ f6 = f8+f9;
+ f3 = f3+f16;
+ f1 = f1+f7;
+ r11 = r9 >> 2;
+ f6 = f6+f17;
+ heapFloat[(fp+-182)] = f3;
+ f1 = f1+f18;
+ heapFloat[(r11+1)] = f6;
+ heapFloat[(r11+2)] = f1;
+ heap32[(r11+3)] = 0;
+ r11 = heap32[(r1)];
+ r11 = r11 >> 2;
+ r11 = heap32[(r11+4)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r11)>>2](i7);
+ r12 = r_g0 >> 2;
+ r12 = heap32[(r12)];
+ r12 = r12 >> 2;
+ r12 = heap32[(r12+2)];
+ r13 = sp + -40;
+ r14 = r13 >> 2;
+ heap32[(fp+-10)] = 0;
+ heap32[(r14+1)] = 0;
+ heap32[(r14+2)] = 0;
+ heap32[(r14+3)] = 0;
+ heap32[(g0)] = r_g0;
+ heap32[(g0+1)] = r2;
+ heap32[(g0+2)] = r9;
+ heap32[(g0+3)] = r13;
+ __FUNCTION_TABLE__[(r12)>>2](i7);
+ r2 = sp + -744;
+ r9 = r2 >> 2;
+ heapFloat[(fp+-186)] = f2;
+ heapFloat[(r9+1)] = f5;
+ heapFloat[(r9+2)] = f11;
+ r11 = sp + -760;
+ heap32[(r9+3)] = 0;
+ r9 = r11 >> 2;
+ heapFloat[(fp+-190)] = f0;
+ heapFloat[(r9+1)] = f4;
+ heapFloat[(r9+2)] = f10;
+ heap32[(r9+3)] = 0;
+ r9 = heap32[(r1)];
+ r9 = r9 >> 2;
+ r9 = heap32[(r9+4)];
+ f0 = heapFloat[(r10+45)];
+ f1 = heapFloat[(r10+46)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r9)>>2](i7);
+ r10 = r_g0 >> 2;
+ r10 = heap32[(r10)];
+ r10 = r10 >> 2;
+ r10 = heap32[(r10+15)];
+ r12 = sp + -24;
+ r13 = r12 >> 2;
+ heap32[(fp+-6)] = 0;
+ heap32[(r13+1)] = 0;
+ heap32[(r13+2)] = 0;
+ heap32[(r13+3)] = 0;
+ heap32[(g0)] = r_g0;
+ heap32[(g0+1)] = r8;
+ heap32[(g0+2)] = r2;
+ heap32[(g0+3)] = r11;
+ f2 = heapFloat[(fp+-191)];
+ heapFloat[(g0+4)] = f2;
+ heapFloat[(g0+5)] = f2;
+ heapFloat[(g0+6)] = f0;
+ heapFloat[(g0+7)] = f1;
+ heap32[(g0+8)] = r12;
+ heap32[(g0+9)] = 1;
+ heap32[(g0+10)] = 1092616192;
+ __FUNCTION_TABLE__[(r10)>>2](i7);
+}
+}
+else{
+break _7;
+}
+}
+}
+}
+else{
+ if(r11 ==3) //_LBB669_11
+{
+ r2 = sp + -232;
+ r9 = r2 >> 2;
+ heap32[(fp+-58)] = 1065353216;
+ heap32[(r9+1)] = 0;
+ heap32[(r9+2)] = 0;
+ heap32[(r9+3)] = 0;
+ heap32[(r9+4)] = 0;
+ heap32[(r9+5)] = 1065353216;
+ heap32[(r9+6)] = 0;
+ heap32[(r9+7)] = 0;
+ heap32[(r9+8)] = 0;
+ heap32[(r9+9)] = 0;
+ heap32[(r9+10)] = 1065353216;
+ heap32[(r9+11)] = 0;
+ heap32[(r9+12)] = 0;
+ heap32[(r9+13)] = 0;
+ heap32[(r9+14)] = 0;
+ heap32[(r9+15)] = 0;
+ r11 = heap32[(r10+5)];
+ r11 = r11 >> 2;
+ f0 = heapFloat[(r10+72)];
+ f1 = heapFloat[(r11+1)];
+ f2 = heapFloat[(r10+73)];
+ f3 = heapFloat[(r11+2)];
+ f4 = heapFloat[(r11+5)];
+ f5 = heapFloat[(r11+6)];
+ f1 = f1*f0;
+ f3 = f3*f2;
+ f6 = heapFloat[(r10+74)];
+ f7 = heapFloat[(r11+3)];
+ f8 = heapFloat[(r11+9)];
+ f9 = heapFloat[(r11+10)];
+ f10 = heapFloat[(r11+7)];
+ f4 = f4*f0;
+ f5 = f5*f2;
+ f1 = f1+f3;
+ f3 = f7*f6;
+ f7 = heapFloat[(r11+11)];
+ f0 = f8*f0;
+ f2 = f9*f2;
+ f4 = f4+f5;
+ f5 = f10*f6;
+ f1 = f1+f3;
+ f3 = heapFloat[(r11+13)];
+ f8 = heapFloat[(r11+15)];
+ f9 = heapFloat[(r11+14)];
+ f4 = f4+f5;
+ f0 = f0+f2;
+ f2 = f7*f6;
+ f1 = f1+f3;
+ f0 = f0+f2;
+ f2 = f4+f9;
+ heapFloat[(r9+12)] = f1;
+ f0 = f0+f8;
+ heapFloat[(r9+13)] = f2;
+ heapFloat[(r9+14)] = f0;
+ heap32[(r9+15)] = 0;
+ r11 = heap32[(r1)];
+ r11 = r11 >> 2;
+ r11 = heap32[(r11+4)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r11)>>2](i7);
+ r12 = r_g0 >> 2;
+ r12 = heap32[(r12)];
+ r12 = r12 >> 2;
+ r12 = heap32[(r12+14)];
+ heap32[(g0)] = r_g0;
+ heap32[(g0+1)] = r2;
+ f0 = heapFloat[(fp+-191)];
+ heapFloat[(g0+2)] = f0;
+ __FUNCTION_TABLE__[(r12)>>2](i7);
+ r11 = heap32[(r10+6)];
+ r11 = r11 >> 2;
+ f0 = heapFloat[(r10+76)];
+ f1 = heapFloat[(r11+1)];
+ f2 = heapFloat[(r10+77)];
+ f3 = heapFloat[(r11+2)];
+ f4 = heapFloat[(r11+5)];
+ f5 = heapFloat[(r11+6)];
+ f1 = f1*f0;
+ f3 = f3*f2;
+ f6 = heapFloat[(r10+78)];
+ f7 = heapFloat[(r11+3)];
+ f8 = heapFloat[(r11+9)];
+ f9 = heapFloat[(r11+10)];
+ f10 = heapFloat[(r11+7)];
+ f4 = f4*f0;
+ f5 = f5*f2;
+ f1 = f1+f3;
+ f3 = f7*f6;
+ f7 = heapFloat[(r11+11)];
+ f0 = f8*f0;
+ f2 = f9*f2;
+ f4 = f4+f5;
+ f5 = f10*f6;
+ f1 = f1+f3;
+ f3 = heapFloat[(r11+13)];
+ f8 = heapFloat[(r11+15)];
+ f9 = heapFloat[(r11+14)];
+ f4 = f4+f5;
+ f0 = f0+f2;
+ f2 = f7*f6;
+ f1 = f1+f3;
+ f0 = f0+f2;
+ f2 = f4+f9;
+ heapFloat[(r9+12)] = f1;
+ f0 = f0+f8;
+ heapFloat[(r9+13)] = f2;
+ heapFloat[(r9+14)] = f0;
+ heap32[(r9+15)] = 0;
+if(!(r8 ==0)) //_LBB669_52
+{
+ r8 = heap32[(r1)];
+ r8 = r8 >> 2;
+ r8 = heap32[(r8+4)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r8)>>2](i7);
+ r9 = r_g0 >> 2;
+ r9 = heap32[(r9)];
+ r9 = r9 >> 2;
+ r9 = heap32[(r9+14)];
+ heap32[(g0)] = r_g0;
+ heap32[(g0+1)] = r2;
+ f0 = heapFloat[(fp+-191)];
+ heapFloat[(g0+2)] = f0;
+ __FUNCTION_TABLE__[(r9)>>2](i7);
+}
+}
+else{
+ if(r11 ==4) //_LBB669_13
+{
+ r2 = heap32[(r10+5)];
+ r2 = r2 >> 2;
+ f0 = heapFloat[(r2+1)];
+ f1 = heapFloat[(r10+135)];
+ f2 = heapFloat[(r2+2)];
+ f3 = heapFloat[(r10+139)];
+ f4 = heapFloat[(r10+136)];
+ f5 = heapFloat[(r10+140)];
+ f6 = f1*f0;
+ f7 = f3*f2;
+ f8 = heapFloat[(r2+3)];
+ f9 = heapFloat[(r10+143)];
+ f10 = heapFloat[(r2+9)];
+ f11 = heapFloat[(r10+147)];
+ f12 = heapFloat[(r2+5)];
+ f13 = heapFloat[(r10+137)];
+ f14 = heapFloat[(r2+10)];
+ f15 = heapFloat[(r10+148)];
+ f16 = heapFloat[(r2+6)];
+ f17 = heapFloat[(r10+141)];
+ f18 = heapFloat[(r2+11)];
+ f19 = heapFloat[(r10+149)];
+ f20 = heapFloat[(r2+7)];
+ f21 = heapFloat[(r10+145)];
+ f22 = heapFloat[(r10+144)];
+ f23 = f4*f0;
+ f24 = f5*f2;
+ f6 = f6+f7;
+ f7 = f9*f8;
+ f25 = heapFloat[(r2+15)];
+ f26 = heapFloat[(r2+14)];
+ f27 = heapFloat[(r2+13)];
+ f28 = f13*f0;
+ f29 = f17*f2;
+ f23 = f23+f24;
+ f24 = f22*f8;
+ f6 = f6+f7;
+ r2 = r3 >> 2;
+ f7 = f28+f29;
+ f28 = f21*f8;
+ f23 = f23+f24;
+ heapFloat[(fp+-74)] = f6;
+ f6 = f1*f12;
+ f24 = f3*f16;
+ f7 = f7+f28;
+ heapFloat[(r2+1)] = f23;
+ heapFloat[(r2+2)] = f7;
+ f7 = f4*f12;
+ f23 = f5*f16;
+ f6 = f6+f24;
+ f24 = f9*f20;
+ f28 = f13*f12;
+ f29 = f17*f16;
+ f7 = f7+f23;
+ f23 = f22*f20;
+ f6 = f6+f24;
+ heap32[(r2+3)] = 0;
+ f24 = f28+f29;
+ f28 = f21*f20;
+ f7 = f7+f23;
+ heapFloat[(r2+4)] = f6;
+ f1 = f1*f10;
+ f3 = f3*f14;
+ f6 = f24+f28;
+ heapFloat[(r2+5)] = f7;
+ heapFloat[(r2+6)] = f6;
+ f4 = f4*f10;
+ f5 = f5*f14;
+ f1 = f1+f3;
+ f3 = f9*f18;
+ f6 = f13*f10;
+ f7 = f17*f14;
+ f4 = f4+f5;
+ f5 = f22*f18;
+ f1 = f1+f3;
+ heap32[(r2+7)] = 0;
+ f0 = f0*f11;
+ f2 = f2*f15;
+ f3 = f6+f7;
+ f6 = f21*f18;
+ f4 = f4+f5;
+ heapFloat[(r2+8)] = f1;
+ f1 = f12*f11;
+ f5 = f16*f15;
+ f0 = f0+f2;
+ f2 = f8*f19;
+ f3 = f3+f6;
+ heapFloat[(r2+9)] = f4;
+ f0 = f0+f2;
+ heapFloat[(r2+10)] = f3;
+ f2 = f10*f11;
+ f3 = f14*f15;
+ f1 = f1+f5;
+ f4 = f20*f19;
+ f1 = f1+f4;
+ f2 = f2+f3;
+ f3 = f18*f19;
+ f0 = f0+f27;
+ heap32[(r2+11)] = 0;
+ f2 = f2+f3;
+ f1 = f1+f26;
+ heapFloat[(r2+12)] = f0;
+ f0 = f2+f25;
+ heapFloat[(r2+13)] = f1;
+ heapFloat[(r2+14)] = f0;
+ heap32[(r2+15)] = 0;
+if(!(r8 ==0)) //_LBB669_15
+{
+ r11 = heap32[(r1)];
+ r11 = r11 >> 2;
+ r11 = heap32[(r11+4)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r11)>>2](i7);
+ r12 = r_g0 >> 2;
+ r12 = heap32[(r12)];
+ r12 = r12 >> 2;
+ r12 = heap32[(r12+14)];
+ heap32[(g0)] = r_g0;
+ heap32[(g0+1)] = r3;
+ f0 = heapFloat[(fp+-191)];
+ heapFloat[(g0+2)] = f0;
+ __FUNCTION_TABLE__[(r12)>>2](i7);
+}
+ r11 = heap32[(r10+6)];
+ r11 = r11 >> 2;
+ f0 = heapFloat[(r11+1)];
+ f1 = heapFloat[(r10+151)];
+ f2 = heapFloat[(r11+2)];
+ f3 = heapFloat[(r10+155)];
+ f4 = heapFloat[(r10+152)];
+ f5 = heapFloat[(r10+156)];
+ f6 = f1*f0;
+ f7 = f3*f2;
+ f8 = heapFloat[(r11+3)];
+ f9 = heapFloat[(r10+159)];
+ f10 = heapFloat[(r11+9)];
+ f11 = heapFloat[(r10+163)];
+ f12 = heapFloat[(r11+5)];
+ f13 = heapFloat[(r10+153)];
+ f14 = heapFloat[(r11+10)];
+ f15 = heapFloat[(r10+164)];
+ f16 = heapFloat[(r11+6)];
+ f17 = heapFloat[(r10+157)];
+ f18 = heapFloat[(r11+11)];
+ f19 = heapFloat[(r10+165)];
+ f20 = heapFloat[(r11+7)];
+ f21 = heapFloat[(r10+161)];
+ f22 = heapFloat[(r10+160)];
+ f23 = f4*f0;
+ f24 = f5*f2;
+ f6 = f6+f7;
+ f7 = f9*f8;
+ f25 = heapFloat[(r11+15)];
+ f26 = heapFloat[(r11+14)];
+ f27 = heapFloat[(r11+13)];
+ f28 = f13*f0;
+ f29 = f17*f2;
+ f23 = f23+f24;
+ f24 = f22*f8;
+ f6 = f6+f7;
+ f7 = f28+f29;
+ f28 = f21*f8;
+ f23 = f23+f24;
+ heapFloat[(fp+-74)] = f6;
+ f6 = f1*f12;
+ f24 = f3*f16;
+ f7 = f7+f28;
+ heapFloat[(r2+1)] = f23;
+ heapFloat[(r2+2)] = f7;
+ f7 = f4*f12;
+ f23 = f5*f16;
+ f6 = f6+f24;
+ f24 = f9*f20;
+ f28 = f13*f12;
+ f29 = f17*f16;
+ f7 = f7+f23;
+ f23 = f22*f20;
+ f6 = f6+f24;
+ heap32[(r2+3)] = 0;
+ f24 = f28+f29;
+ f28 = f21*f20;
+ f7 = f7+f23;
+ heapFloat[(r2+4)] = f6;
+ f1 = f1*f10;
+ f3 = f3*f14;
+ f6 = f24+f28;
+ heapFloat[(r2+5)] = f7;
+ heapFloat[(r2+6)] = f6;
+ f4 = f4*f10;
+ f5 = f5*f14;
+ f1 = f1+f3;
+ f3 = f9*f18;
+ f6 = f13*f10;
+ f7 = f17*f14;
+ f4 = f4+f5;
+ f5 = f22*f18;
+ f1 = f1+f3;
+ heap32[(r2+7)] = 0;
+ f0 = f0*f11;
+ f2 = f2*f15;
+ f3 = f6+f7;
+ f6 = f21*f18;
+ f4 = f4+f5;
+ heapFloat[(r2+8)] = f1;
+ f1 = f12*f11;
+ f5 = f16*f15;
+ f0 = f0+f2;
+ f2 = f8*f19;
+ f3 = f3+f6;
+ heapFloat[(r2+9)] = f4;
+ f0 = f0+f2;
+ heapFloat[(r2+10)] = f3;
+ f2 = f10*f11;
+ f3 = f14*f15;
+ f1 = f1+f5;
+ f4 = f20*f19;
+ f1 = f1+f4;
+ f2 = f2+f3;
+ f3 = f18*f19;
+ f0 = f0+f27;
+ heap32[(r2+11)] = 0;
+ f2 = f2+f3;
+ f1 = f1+f26;
+ heapFloat[(r2+12)] = f0;
+ f0 = f2+f25;
+ heapFloat[(r2+13)] = f1;
+ heapFloat[(r2+14)] = f0;
+ heap32[(r2+15)] = 0;
+if(!(r8 ==0)) //_LBB669_17
+{
+ r8 = heap32[(r1)];
+ r8 = r8 >> 2;
+ r8 = heap32[(r8+4)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r8)>>2](i7);
+ r11 = r_g0 >> 2;
+ r11 = heap32[(r11)];
+ r11 = r11 >> 2;
+ r11 = heap32[(r11+14)];
+ heap32[(g0)] = r_g0;
+ heap32[(g0+1)] = r3;
+ f0 = heapFloat[(fp+-191)];
+ heapFloat[(g0+2)] = f0;
+ __FUNCTION_TABLE__[(r11)>>2](i7);
+}
+ f0 = heapFloat[(r10+172)];
+ f1 = heapFloat[(r10+173)];
+if(!(f0 ==f1)) //_LBB669_52
+{
+if(!(r9 ==0)) //_LBB669_52
+{
+ r8 = sp + -312;
+ r9 = r8 >> 2;
+ heap32[(fp+-78)] = heap32[(r2+2)];
+ heap32[(r9+1)] = heap32[(r2+6)];
+ heap32[(r9+2)] = heap32[(r2+10)];
+ r10 = sp + -328;
+ heap32[(r9+3)] = 0;
+ r9 = r10 >> 2;
+ heap32[(fp+-82)] = heap32[(fp+-74)];
+ heap32[(r9+1)] = heap32[(r2+4)];
+ heap32[(r9+2)] = heap32[(r2+8)];
+ heap32[(r9+3)] = 0;
+ r2 = heap32[(r1)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+4)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ r9 = r_g0 >> 2;
+ r9 = heap32[(r9)];
+ r9 = r9 >> 2;
+ r9 = heap32[(r9+15)];
+ r11 = sp + -168;
+ r12 = r11 >> 2;
+ heap32[(fp+-42)] = 0;
+ heap32[(r12+1)] = 0;
+ heap32[(r12+2)] = 0;
+ heap32[(r12+3)] = 0;
+ f2 = 6.2831854820251465;
+ r12 = f0 <= f1;
+ f3 = heapFloat[(fp+-192)];
+ f3 = f0 > f1 ? f3 : f0;
+ f0 = f0 > f1 ? f2 : f1;
+ r12 = r12 & 1;
+ heap32[(g0)] = r_g0;
+ heap32[(g0+1)] = r5;
+ heap32[(g0+2)] = r8;
+ heap32[(g0+3)] = r10;
+ f1 = heapFloat[(fp+-191)];
+ heapFloat[(g0+4)] = f1;
+ heapFloat[(g0+5)] = f1;
+ heapFloat[(g0+6)] = f3;
+ heapFloat[(g0+7)] = f0;
+ heap32[(g0+8)] = r11;
+ heap32[(g0+9)] = r12;
+ heap32[(g0+10)] = 1092616192;
+ __FUNCTION_TABLE__[(r9)>>2](i7);
+}
+}
+}
+}
+}
+}
+} while(0);
+ r2 = (r7 + -1)|0;
+ if(r7 !=0) //_LBB669_4
+{
+continue _5;
+}
+else{
+break _5;
+}
+}
+}
+}
+}
+ r2 = heap32[(r1)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+4)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ r2 = r_g0;
+_74: do {
+if(!(r2 ==0)) //_LBB669_60
+{
+ r2 = heap32[(r1)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+4)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ r3 = r_g0 >> 2;
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3+12)];
+ heap32[(g0)] = r_g0;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ r2 = r_g0 & 3;
+if(!(r2 ==0)) //_LBB669_60
+{
+ r2 = heap32[(r1)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+4)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ r2 = r_g0;
+if(!(r2 ==0)) //_LBB669_60
+{
+ r2 = heap32[(r1)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+4)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ r2 = r_g0 >> 2;
+ r2 = heap32[(r2)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+12)];
+ heap32[(g0)] = r_g0;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ r0 = r_g0;
+if(!(r0 ==0)) //_LBB669_60
+{
+ r0 = heap32[(r1+63)];
+if(!(r0 <1)) //_LBB669_60
+{
+ r0 = 0;
+_80: while(true){
+ r2 = heap32[(r1+65)];
+ r3 = r0 << 2;
+ r2 = (r2 + r3)|0;
+ r2 = r2 >> 2;
+ r2 = heap32[(r2)];
+ r3 = r2 >> 2;
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3+3)];
+ r4 = heap32[(r1+21)];
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = r4;
+ r0 = (r0 + 1)|0;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ r2 = heap32[(r1+63)];
+ if(r2 >r0) //_LBB669_59
+{
+continue _80;
+}
+else{
+break _74;
+}
+}
+}
+}
+}
+}
+}
+} while(0);
+ r0 = _ZN15CProfileManager11CurrentNodeE;
+ r0 = r0 >> 2;
+ r1 = heap32[(r0)];
+ r2 = r1 >> 2;
+ r3 = heap32[(r2+4)];
+ r3 = (r3 + -1)|0;
+ heap32[(r2+4)] = r3;
+_83: do {
+if(!(r3 !=0)) //_LBB669_66
+{
+ r3 = heap32[(r2+1)];
+ if(r3 !=0) //_LBB669_63
+{
+ r1 = sp + -8;
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = 0;
+ r3 = _ZL13gProfileClock_2E_0;
+ gettimeofday(i7);
+ r3 = r3 >> 2;
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r1 = r1 >> 2;
+ r4 = heap32[(fp+-2)];
+ r5 = heap32[(r3)];
+ r4 = (r4 - r5)|0;
+ r1 = heap32[(r1+1)];
+ r3 = heap32[(r3+1)];
+ r1 = (r1 - r3)|0;
+ r3 = (r4 * 1000000)|0;
+ r1 = (r1 + r3)|0;
+ r3 = heap32[(r2+3)];
+ r1 = (r1 - r3)|0;
+ f0 = uint(r1); //fuitos r1, f0
+ f1 = 1000;
+ f2 = heapFloat[(r2+2)];
+ f0 = f0/f1;
+ f0 = f2+f0;
+ heapFloat[(r2+2)] = f0;
+ r1 = heap32[(r2+4)];
+ if(r1 !=0) //_LBB669_66
+{
+break _83;
+}
+else{
+ r1 = heap32[(r0)];
+}
+}
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+5)];
+ heap32[(r0)] = r1;
+}
+} while(0);
+ return;
+}
+
+function _ZN23btDiscreteDynamicsWorld18saveKinematicStateEf(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+var __label__ = 0;
+ i7 = sp + -40;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r1 = heap32[(r0+2)];
+if(!(r1 <1)) //_LBB670_11
+{
+ f0 = heapFloat[(fp+1)];
+ f1 = 1;
+ f1 = f1/f0;
+ r1 = 0;
+_3: while(true){
+ r2 = heap32[(r0+4)];
+ r3 = r1 << 2;
+ r2 = (r2 + r3)|0;
+ r2 = r2 >> 2;
+ r2 = heap32[(r2)];
+ r3 = heapU8[r2+232];
+ r3 = r3 & 2;
+if(!(r3 ==0)) //_LBB670_10
+{
+if(!(r2 ==0)) //_LBB670_10
+{
+ r3 = r2 >> 2;
+ r4 = heap32[(r3+54)];
+if(!(r4 ==2)) //_LBB670_10
+{
+ r4 = heapU8[r2+204];
+ r4 = r4 & 2;
+if(!(r4 ==0)) //_LBB670_10
+{
+ f2 = 0;
+if(!(f0 ==f2)) //_LBB670_10
+{
+ r4 = heap32[(r3+118)];
+if(!(r4 ==0)) //_LBB670_9
+{
+ r5 = r4 >> 2;
+ r5 = heap32[(r5)];
+ r5 = r5 >> 2;
+ r5 = heap32[(r5+2)];
+ r6 = (r2 + 4)|0;
+ heap32[(g0)] = r4;
+ heap32[(g0+1)] = r6;
+ __FUNCTION_TABLE__[(r5)>>2](i7);
+}
+ f2 = heapFloat[(r3+13)];
+ f3 = heapFloat[(r3+29)];
+ f2 = f2-f3;
+ f3 = heapFloat[(r3+15)];
+ f4 = heapFloat[(r3+31)];
+ f5 = heapFloat[(r3+14)];
+ f6 = heapFloat[(r3+30)];
+ f5 = f5-f6;
+ f2 = f2*f1;
+ f3 = f3-f4;
+ f4 = f5*f1;
+ heapFloat[(r3+76)] = f2;
+ f2 = f3*f1;
+ heapFloat[(r3+77)] = f4;
+ heapFloat[(r3+78)] = f2;
+ heap32[(r3+79)] = 0;
+ r4 = sp + -16;
+ r5 = (r2 + 68)|0;
+ r2 = (r2 + 4)|0;
+ r6 = sp + -20;
+ heap32[(g0)] = r5;
+ heap32[(g0+1)] = r2;
+ heap32[(g0+2)] = r4;
+ heap32[(g0+3)] = r6;
+ _ZN15btTransformUtil22calculateDiffAxisAngleERK11btTransformS2_R9btVector3Rf(i7);
+ r2 = r4 >> 2;
+ f2 = heapFloat[(fp+-5)];
+ f3 = heapFloat[(fp+-4)];
+ f3 = f3*f2;
+ f4 = heapFloat[(r2+2)];
+ f5 = heapFloat[(r2+1)];
+ f5 = f5*f2;
+ f3 = f3*f1;
+ f2 = f4*f2;
+ f4 = f5*f1;
+ heapFloat[(r3+80)] = f3;
+ f2 = f2*f1;
+ heapFloat[(r3+81)] = f4;
+ heapFloat[(r3+82)] = f2;
+ heap32[(r3+83)] = 0;
+ heap32[(r3+33)] = heap32[(r3+76)];
+ heap32[(r3+34)] = heap32[(r3+77)];
+ heap32[(r3+35)] = heap32[(r3+78)];
+ heap32[(r3+36)] = heap32[(r3+79)];
+ heapFloat[(r3+37)] = f3;
+ heapFloat[(r3+38)] = f4;
+ heapFloat[(r3+39)] = f2;
+ heap32[(r3+40)] = 0;
+ heap32[(r3+17)] = heap32[(r3+1)];
+ heap32[(r3+18)] = heap32[(r3+2)];
+ heap32[(r3+19)] = heap32[(r3+3)];
+ heap32[(r3+20)] = heap32[(r3+4)];
+ heap32[(r3+21)] = heap32[(r3+5)];
+ heap32[(r3+22)] = heap32[(r3+6)];
+ heap32[(r3+23)] = heap32[(r3+7)];
+ heap32[(r3+24)] = heap32[(r3+8)];
+ heap32[(r3+25)] = heap32[(r3+9)];
+ heap32[(r3+26)] = heap32[(r3+10)];
+ heap32[(r3+27)] = heap32[(r3+11)];
+ heap32[(r3+28)] = heap32[(r3+12)];
+ heap32[(r3+29)] = heap32[(r3+13)];
+ heap32[(r3+30)] = heap32[(r3+14)];
+ heap32[(r3+31)] = heap32[(r3+15)];
+ heap32[(r3+32)] = heap32[(r3+16)];
+}
+}
+}
+}
+}
+ r1 = (r1 + 1)|0;
+ r2 = heap32[(r0+2)];
+ if(r2 >r1) //_LBB670_2
+{
+continue _3;
+}
+else{
+break _3;
+}
+}
+}
+ return;
+}
+
+function _ZN15btDynamicsWorldD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV15btDynamicsWorld;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ heap32[(g0)] = r0;
+ _ZN16btCollisionWorldD2Ev(i7);
+ return;
+}
+
+function _ZN15btDynamicsWorldD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV15btDynamicsWorld;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ heap32[(g0)] = r0;
+ _ZN16btCollisionWorldD2Ev(i7);
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZN23btDiscreteDynamicsWorldD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV23btDiscreteDynamicsWorld;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ r1 = heapU8[r0+244];
+if(!(r1 ==0)) //_LBB673_3
+{
+ r1 = heap32[(r2+45)];
+ r3 = r1 >> 2;
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3)];
+ heap32[(g0)] = r1;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ r1 = heap32[(r2+45)];
+if(!(r1 ==0)) //_LBB673_3
+{
+ r3 = gNumAlignedFree;
+ r3 = r3 >> 2;
+ r4 = heap32[(r3)];
+ r4 = (r4 + 1)|0;
+ r1 = r1 >> 2;
+ heap32[(r3)] = r4;
+ r1 = heap32[(r1+-1)];
+ heap32[(g0)] = r1;
+ free(i7);
+}
+}
+ r1 = heapU8[r0+245];
+if(!(r1 ==0)) //_LBB673_6
+{
+ r1 = heap32[(r2+44)];
+ r3 = r1 >> 2;
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3)];
+ heap32[(g0)] = r1;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ r1 = heap32[(r2+44)];
+if(!(r1 ==0)) //_LBB673_6
+{
+ r3 = gNumAlignedFree;
+ r3 = r3 >> 2;
+ r4 = heap32[(r3)];
+ r4 = (r4 + 1)|0;
+ r1 = r1 >> 2;
+ heap32[(r3)] = r4;
+ r1 = heap32[(r1+-1)];
+ heap32[(g0)] = r1;
+ free(i7);
+}
+}
+ r1 = heap32[(r2+65)];
+if(!(r1 ==0)) //_LBB673_10
+{
+ r3 = heapU8[r0+264];
+if(!(r3 ==0)) //_LBB673_9
+{
+ r3 = gNumAlignedFree;
+ r3 = r3 >> 2;
+ r4 = heap32[(r3)];
+ r4 = (r4 + 1)|0;
+ r1 = r1 >> 2;
+ heap32[(r3)] = r4;
+ r1 = heap32[(r1+-1)];
+ heap32[(g0)] = r1;
+ free(i7);
+}
+ heap32[(r2+65)] = 0;
+}
+ r1 = 1;
+ heap8[r0+264] = r1;
+ heap32[(r2+65)] = 0;
+ heap32[(r2+63)] = 0;
+ heap32[(r2+64)] = 0;
+ r3 = heap32[(r2+54)];
+if(!(r3 ==0)) //_LBB673_14
+{
+ r4 = heapU8[r0+220];
+if(!(r4 ==0)) //_LBB673_13
+{
+ r4 = gNumAlignedFree;
+ r4 = r4 >> 2;
+ r5 = heap32[(r4)];
+ r5 = (r5 + 1)|0;
+ r3 = r3 >> 2;
+ heap32[(r4)] = r5;
+ r3 = heap32[(r3+-1)];
+ heap32[(g0)] = r3;
+ free(i7);
+}
+ heap32[(r2+54)] = 0;
+}
+ heap8[r0+220] = r1;
+ heap32[(r2+54)] = 0;
+ heap32[(r2+52)] = 0;
+ heap32[(r2+53)] = 0;
+ r3 = heap32[(r2+49)];
+if(!(r3 ==0)) //_LBB673_18
+{
+ r4 = heapU8[r0+200];
+if(!(r4 ==0)) //_LBB673_17
+{
+ r4 = gNumAlignedFree;
+ r4 = r4 >> 2;
+ r5 = heap32[(r4)];
+ r5 = (r5 + 1)|0;
+ r3 = r3 >> 2;
+ heap32[(r4)] = r5;
+ r3 = heap32[(r3+-1)];
+ heap32[(g0)] = r3;
+ free(i7);
+}
+ heap32[(r2+49)] = 0;
+}
+ heap8[r0+200] = r1;
+ heap32[(r2+49)] = 0;
+ r1 = _ZTV15btDynamicsWorld;
+ heap32[(r2+47)] = 0;
+ r1 = (r1 + 8)|0;
+ heap32[(r2+48)] = 0;
+ heap32[(r2)] = r1;
+ heap32[(g0)] = r0;
+ _ZN16btCollisionWorldD2Ev(i7);
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZN23btDiscreteDynamicsWorldD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ heap32[(g0)] = r0;
+ _ZN23btDiscreteDynamicsWorldD2Ev(i7);
+ return;
+}
+
+function _ZN23btDiscreteDynamicsWorldD2Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV23btDiscreteDynamicsWorld;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ r1 = heapU8[r0+244];
+if(!(r1 ==0)) //_LBB675_3
+{
+ r1 = heap32[(r2+45)];
+ r3 = r1 >> 2;
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3)];
+ heap32[(g0)] = r1;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ r1 = heap32[(r2+45)];
+if(!(r1 ==0)) //_LBB675_3
+{
+ r3 = gNumAlignedFree;
+ r3 = r3 >> 2;
+ r4 = heap32[(r3)];
+ r4 = (r4 + 1)|0;
+ r1 = r1 >> 2;
+ heap32[(r3)] = r4;
+ r1 = heap32[(r1+-1)];
+ heap32[(g0)] = r1;
+ free(i7);
+}
+}
+ r1 = heapU8[r0+245];
+if(!(r1 ==0)) //_LBB675_6
+{
+ r1 = heap32[(r2+44)];
+ r3 = r1 >> 2;
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3)];
+ heap32[(g0)] = r1;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ r1 = heap32[(r2+44)];
+if(!(r1 ==0)) //_LBB675_6
+{
+ r3 = gNumAlignedFree;
+ r3 = r3 >> 2;
+ r4 = heap32[(r3)];
+ r4 = (r4 + 1)|0;
+ r1 = r1 >> 2;
+ heap32[(r3)] = r4;
+ r1 = heap32[(r1+-1)];
+ heap32[(g0)] = r1;
+ free(i7);
+}
+}
+ r1 = heap32[(r2+65)];
+if(!(r1 ==0)) //_LBB675_10
+{
+ r3 = heapU8[r0+264];
+if(!(r3 ==0)) //_LBB675_9
+{
+ r3 = gNumAlignedFree;
+ r3 = r3 >> 2;
+ r4 = heap32[(r3)];
+ r4 = (r4 + 1)|0;
+ r1 = r1 >> 2;
+ heap32[(r3)] = r4;
+ r1 = heap32[(r1+-1)];
+ heap32[(g0)] = r1;
+ free(i7);
+}
+ heap32[(r2+65)] = 0;
+}
+ r1 = 1;
+ heap8[r0+264] = r1;
+ heap32[(r2+65)] = 0;
+ heap32[(r2+63)] = 0;
+ heap32[(r2+64)] = 0;
+ r3 = heap32[(r2+54)];
+if(!(r3 ==0)) //_LBB675_14
+{
+ r4 = heapU8[r0+220];
+if(!(r4 ==0)) //_LBB675_13
+{
+ r4 = gNumAlignedFree;
+ r4 = r4 >> 2;
+ r5 = heap32[(r4)];
+ r5 = (r5 + 1)|0;
+ r3 = r3 >> 2;
+ heap32[(r4)] = r5;
+ r3 = heap32[(r3+-1)];
+ heap32[(g0)] = r3;
+ free(i7);
+}
+ heap32[(r2+54)] = 0;
+}
+ heap8[r0+220] = r1;
+ heap32[(r2+54)] = 0;
+ heap32[(r2+52)] = 0;
+ heap32[(r2+53)] = 0;
+ r3 = heap32[(r2+49)];
+if(!(r3 ==0)) //_LBB675_18
+{
+ r4 = heapU8[r0+200];
+if(!(r4 ==0)) //_LBB675_17
+{
+ r4 = gNumAlignedFree;
+ r4 = r4 >> 2;
+ r5 = heap32[(r4)];
+ r5 = (r5 + 1)|0;
+ r3 = r3 >> 2;
+ heap32[(r4)] = r5;
+ r3 = heap32[(r3+-1)];
+ heap32[(g0)] = r3;
+ free(i7);
+}
+ heap32[(r2+49)] = 0;
+}
+ heap8[r0+200] = r1;
+ heap32[(r2+49)] = 0;
+ r1 = _ZTV15btDynamicsWorld;
+ heap32[(r2+47)] = 0;
+ r1 = (r1 + 8)|0;
+ heap32[(r2+48)] = 0;
+ heap32[(r2)] = r1;
+ heap32[(g0)] = r0;
+ _ZN16btCollisionWorldD2Ev(i7);
+ return;
+}
+
+function _ZN11btRigidBody12setMassPropsEfRK9btVector3(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ f0 = heapFloat[(fp+1)];
+ r1 = heap32[(fp+2)];
+ r2 = heap32[(r0+51)];
+ f1 = 0;
+ if(f0 !=f1) //_LBB676_2
+{
+ r2 = r2 & -2;
+ f2 = 1;
+ f2 = f2/f0;
+ heap32[(r0+51)] = r2;
+ heapFloat[(r0+84)] = f2;
+}
+else{
+ r2 = r2 | 1;
+ f2 = 0;
+ heap32[(r0+51)] = r2;
+ heap32[(r0+84)] = 0;
+}
+ f3 = heapFloat[(r0+95)];
+ f4 = heapFloat[(r0+94)];
+ f5 = heapFloat[(r0+93)];
+ f5 = f5*f0;
+ f4 = f4*f0;
+ heapFloat[(r0+89)] = f5;
+ f0 = f3*f0;
+ heapFloat[(r0+90)] = f4;
+ heapFloat[(r0+91)] = f0;
+ r1 = r1 >> 2;
+ heap32[(r0+92)] = 0;
+ f0 = heapFloat[(r1+2)];
+ if(f0 !=f1) //_LBB676_5
+{
+ f3 = 1;
+ f0 = f3/f0;
+}
+else{
+ f0 = f1;
+}
+ f3 = heapFloat[(r1+1)];
+ if(f3 !=f1) //_LBB676_8
+{
+ f1 = 1;
+ f3 = f1/f3;
+}
+else{
+ f3 = 0;
+}
+ f1 = heapFloat[(r1)];
+ f4 = 0;
+ if(f1 !=f4) //_LBB676_11
+{
+ f4 = 1;
+ f4 = f4/f1;
+}
+ heapFloat[(r0+97)] = f4;
+ heapFloat[(r0+98)] = f3;
+ heapFloat[(r0+99)] = f0;
+ heap32[(r0+100)] = 0;
+ f0 = heapFloat[(r0+87)];
+ f1 = heapFloat[(r0+86)];
+ f3 = heapFloat[(r0+85)];
+ f3 = f3*f2;
+ f1 = f1*f2;
+ heapFloat[(r0+138)] = f3;
+ f0 = f0*f2;
+ heapFloat[(r0+139)] = f1;
+ heapFloat[(r0+140)] = f0;
+ heap32[(r0+141)] = 0;
+ return;
+}
+
+function _ZN11btRigidBody19updateInertiaTensorEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+ var f10;
+ var f11;
+ var f12;
+ var f13;
+ var f14;
+ var f15;
+ var f16;
+ var f17;
+ var f18;
+ var f19;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ f0 = heapFloat[(r0+1)];
+ f1 = heapFloat[(r0+97)];
+ f2 = heapFloat[(r0+2)];
+ f3 = heapFloat[(r0+98)];
+ f4 = f0*f1;
+ f5 = f2*f3;
+ f6 = heapFloat[(r0+3)];
+ f7 = heapFloat[(r0+99)];
+ f8 = heapFloat[(r0+5)];
+ f9 = heapFloat[(r0+6)];
+ f10 = f6*f7;
+ f11 = f0*f4;
+ f12 = f2*f5;
+ f13 = heapFloat[(r0+9)];
+ f14 = heapFloat[(r0+10)];
+ f15 = heapFloat[(r0+7)];
+ f16 = heapFloat[(r0+11)];
+ f17 = f8*f4;
+ f18 = f9*f5;
+ f11 = f11+f12;
+ f12 = f6*f10;
+ f4 = f13*f4;
+ f5 = f14*f5;
+ f17 = f17+f18;
+ f18 = f15*f10;
+ f11 = f11+f12;
+ f12 = f8*f1;
+ f19 = f9*f3;
+ f4 = f4+f5;
+ f5 = f16*f10;
+ f10 = f17+f18;
+ heapFloat[(r0+64)] = f11;
+ f11 = f15*f7;
+ f17 = f0*f12;
+ f18 = f2*f19;
+ f4 = f4+f5;
+ heapFloat[(r0+65)] = f10;
+ heapFloat[(r0+66)] = f4;
+ f4 = f8*f12;
+ f5 = f9*f19;
+ f10 = f17+f18;
+ f17 = f6*f11;
+ f12 = f13*f12;
+ f18 = f14*f19;
+ f4 = f4+f5;
+ f5 = f15*f11;
+ f10 = f10+f17;
+ heap32[(r0+67)] = 0;
+ f1 = f13*f1;
+ f3 = f14*f3;
+ f12 = f12+f18;
+ f11 = f16*f11;
+ f4 = f4+f5;
+ heapFloat[(r0+68)] = f10;
+ f5 = f16*f7;
+ f0 = f0*f1;
+ f2 = f2*f3;
+ f7 = f12+f11;
+ heapFloat[(r0+69)] = f4;
+ heapFloat[(r0+70)] = f7;
+ f4 = f8*f1;
+ f7 = f9*f3;
+ f0 = f0+f2;
+ f2 = f6*f5;
+ f1 = f13*f1;
+ f3 = f14*f3;
+ f4 = f4+f7;
+ f6 = f15*f5;
+ f0 = f0+f2;
+ heap32[(r0+71)] = 0;
+ f1 = f1+f3;
+ f2 = f16*f5;
+ f3 = f4+f6;
+ heapFloat[(r0+72)] = f0;
+ f0 = f1+f2;
+ heapFloat[(r0+73)] = f3;
+ heapFloat[(r0+74)] = f0;
+ heap32[(r0+75)] = 0;
+ return;
+}
+
+function _ZN11btRigidBody18proceedToTransformERK11btTransform(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+ var r13;
+ var r14;
+ var r15;
+ var r16;
+ var r17;
+ var r18;
+ var r19;
+ var r20;
+ var r21;
+ var r22;
+ var r23;
+ var r24;
+ var r25;
+var __label__ = 0;
+ i7 = sp + -48;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = heap32[(fp+1)];
+ r2 = heapU8[r0+204];
+ r2 = r2 & 3;
+ if(r2 ==0) //_LBB678_2
+{
+ r2 = r0 >> 2;
+ r24 = r1 >> 2;
+ heap32[(r2+17)] = heap32[(r24)];
+ heap32[(r2+18)] = heap32[(r24+1)];
+ heap32[(r2+19)] = heap32[(r24+2)];
+ heap32[(r2+20)] = heap32[(r24+3)];
+ heap32[(r2+21)] = heap32[(r24+4)];
+ heap32[(r2+22)] = heap32[(r24+5)];
+ heap32[(r2+23)] = heap32[(r24+6)];
+ heap32[(r2+24)] = heap32[(r24+7)];
+ heap32[(r2+25)] = heap32[(r24+8)];
+ heap32[(r2+26)] = heap32[(r24+9)];
+ heap32[(r2+27)] = heap32[(r24+10)];
+ heap32[(r2+28)] = heap32[(r24+11)];
+ heap32[(r2+29)] = heap32[(r24+12)];
+ heap32[(r2+30)] = heap32[(r24+13)];
+ r15 = (r1 + 4)|0;
+ r16 = (r1 + 8)|0;
+ r17 = (r1 + 12)|0;
+ r18 = (r1 + 16)|0;
+ r19 = (r1 + 20)|0;
+ r20 = (r1 + 24)|0;
+ r21 = (r1 + 28)|0;
+ r22 = (r1 + 32)|0;
+ r23 = (r1 + 36)|0;
+ r3 = (r1 + 40)|0;
+ heap32[(fp+-10)] = r3;
+ r3 = (r1 + 44)|0;
+ heap32[(fp+-4)] = r3;
+ r3 = (r1 + 48)|0;
+ heap32[(fp+-7)] = r3;
+ r3 = (r1 + 52)|0;
+ heap32[(fp+-6)] = r3;
+ r3 = (r1 + 56)|0;
+ heap32[(fp+-9)] = r3;
+ r3 = (r1 + 60)|0;
+ heap32[(fp+-8)] = r3;
+ r3 = (r0 + 4)|0;
+ r4 = (r0 + 8)|0;
+ r5 = (r0 + 12)|0;
+ r6 = (r0 + 16)|0;
+ r7 = (r0 + 20)|0;
+ r8 = (r0 + 24)|0;
+ r9 = (r0 + 28)|0;
+ r10 = (r0 + 32)|0;
+ r11 = (r0 + 36)|0;
+ r12 = (r0 + 40)|0;
+ r13 = (r0 + 44)|0;
+ r14 = (r0 + 48)|0;
+ r25 = (r0 + 52)|0;
+ heap32[(fp+-5)] = r25;
+ r25 = (r0 + 56)|0;
+ heap32[(fp+-3)] = r25;
+ r25 = (r0 + 60)|0;
+ heap32[(fp+-2)] = r25;
+ r25 = (r0 + 64)|0;
+ heap32[(fp+-1)] = r25;
+ heap32[(r2+31)] = heap32[(r24+14)];
+ heap32[(r2+32)] = heap32[(r24+15)];
+}
+else{
+ r2 = r0 >> 2;
+ heap32[(r2+17)] = heap32[(r2+1)];
+ heap32[(r2+18)] = heap32[(r2+2)];
+ heap32[(r2+19)] = heap32[(r2+3)];
+ heap32[(r2+20)] = heap32[(r2+4)];
+ heap32[(r2+21)] = heap32[(r2+5)];
+ heap32[(r2+22)] = heap32[(r2+6)];
+ heap32[(r2+23)] = heap32[(r2+7)];
+ heap32[(r2+24)] = heap32[(r2+8)];
+ heap32[(r2+25)] = heap32[(r2+9)];
+ heap32[(r2+26)] = heap32[(r2+10)];
+ heap32[(r2+27)] = heap32[(r2+11)];
+ heap32[(r2+28)] = heap32[(r2+12)];
+ heap32[(r2+29)] = heap32[(r2+13)];
+ heap32[(r2+30)] = heap32[(r2+14)];
+ r3 = (r0 + 4)|0;
+ r4 = (r0 + 8)|0;
+ r5 = (r0 + 12)|0;
+ r6 = (r0 + 16)|0;
+ r7 = (r0 + 20)|0;
+ r8 = (r0 + 24)|0;
+ r9 = (r0 + 28)|0;
+ r10 = (r0 + 32)|0;
+ r11 = (r0 + 36)|0;
+ r12 = (r0 + 40)|0;
+ r13 = (r0 + 44)|0;
+ r14 = (r0 + 48)|0;
+ r15 = (r0 + 52)|0;
+ heap32[(fp+-5)] = r15;
+ r15 = (r0 + 56)|0;
+ heap32[(fp+-3)] = r15;
+ r15 = (r0 + 60)|0;
+ heap32[(fp+-2)] = r15;
+ r15 = (r0 + 64)|0;
+ heap32[(fp+-1)] = r15;
+ r15 = (r1 + 4)|0;
+ r16 = (r1 + 8)|0;
+ r17 = (r1 + 12)|0;
+ r18 = (r1 + 16)|0;
+ r19 = (r1 + 20)|0;
+ r20 = (r1 + 24)|0;
+ r21 = (r1 + 28)|0;
+ r22 = (r1 + 32)|0;
+ r23 = (r1 + 36)|0;
+ r24 = (r1 + 40)|0;
+ heap32[(fp+-10)] = r24;
+ r24 = (r1 + 44)|0;
+ heap32[(fp+-4)] = r24;
+ r24 = (r1 + 48)|0;
+ heap32[(fp+-7)] = r24;
+ r24 = (r1 + 52)|0;
+ heap32[(fp+-6)] = r24;
+ r24 = (r1 + 56)|0;
+ heap32[(fp+-9)] = r24;
+ r24 = (r1 + 60)|0;
+ heap32[(fp+-8)] = r24;
+ heap32[(r2+31)] = heap32[(r2+15)];
+ heap32[(r2+32)] = heap32[(r2+16)];
+}
+ r2 = r0 >> 2;
+ heap32[(r2+33)] = heap32[(r2+76)];
+ heap32[(r2+34)] = heap32[(r2+77)];
+ heap32[(r2+35)] = heap32[(r2+78)];
+ heap32[(r2+36)] = heap32[(r2+79)];
+ heap32[(r2+37)] = heap32[(r2+80)];
+ heap32[(r2+38)] = heap32[(r2+81)];
+ heap32[(r2+39)] = heap32[(r2+82)];
+ r3 = r3 >> 2;
+ r1 = r1 >> 2;
+ heap32[(r2+40)] = heap32[(r2+83)];
+ r2 = r4 >> 2;
+ r4 = r15 >> 2;
+ heap32[(r3)] = heap32[(r1)];
+ r1 = r5 >> 2;
+ r3 = r16 >> 2;
+ heap32[(r2)] = heap32[(r4)];
+ r2 = r6 >> 2;
+ r4 = r17 >> 2;
+ heap32[(r1)] = heap32[(r3)];
+ r1 = r7 >> 2;
+ r3 = r18 >> 2;
+ heap32[(r2)] = heap32[(r4)];
+ r2 = r8 >> 2;
+ r4 = r19 >> 2;
+ heap32[(r1)] = heap32[(r3)];
+ r1 = r9 >> 2;
+ r3 = r20 >> 2;
+ heap32[(r2)] = heap32[(r4)];
+ r2 = r10 >> 2;
+ r4 = r21 >> 2;
+ heap32[(r1)] = heap32[(r3)];
+ r1 = r11 >> 2;
+ r3 = r22 >> 2;
+ heap32[(r2)] = heap32[(r4)];
+ r2 = r12 >> 2;
+ r4 = r23 >> 2;
+ heap32[(r1)] = heap32[(r3)];
+ r1 = r13 >> 2;
+ r3 = heap32[(fp+-10)];
+ r3 = r3 >> 2;
+ heap32[(r2)] = heap32[(r4)];
+ r2 = r14 >> 2;
+ r4 = heap32[(fp+-4)];
+ r4 = r4 >> 2;
+ heap32[(r1)] = heap32[(r3)];
+ r1 = heap32[(fp+-5)];
+ r1 = r1 >> 2;
+ r3 = heap32[(fp+-7)];
+ r3 = r3 >> 2;
+ heap32[(r2)] = heap32[(r4)];
+ r2 = heap32[(fp+-3)];
+ r2 = r2 >> 2;
+ r4 = heap32[(fp+-6)];
+ r4 = r4 >> 2;
+ heap32[(r1)] = heap32[(r3)];
+ r1 = heap32[(fp+-2)];
+ r1 = r1 >> 2;
+ r3 = heap32[(fp+-9)];
+ r3 = r3 >> 2;
+ heap32[(r2)] = heap32[(r4)];
+ r2 = heap32[(fp+-1)];
+ r2 = r2 >> 2;
+ r4 = heap32[(fp+-8)];
+ r4 = r4 >> 2;
+ heap32[(r1)] = heap32[(r3)];
+ heap32[(r2)] = heap32[(r4)];
+ heap32[(g0)] = r0;
+ _ZN11btRigidBody19updateInertiaTensorEv(i7);
+ return;
+}
+
+function _ZNK11btRigidBody28calculateSerializeBufferSizeEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = 480;
+ r_g0 = r0;
+ return;
+}
+
+function _ZNK11btRigidBody21serializeSingleObjectEP12btSerializer(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+var __label__ = 0;
+ i7 = sp + -24;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = heap32[(fp+1)];
+ r2 = r0 >> 2;
+ r3 = r1 >> 2;
+ r4 = heap32[(r3)];
+ r5 = heap32[(r2)];
+ r4 = r4 >> 2;
+ r5 = r5 >> 2;
+ r4 = heap32[(r4+4)];
+ r5 = heap32[(r5+4)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r5)>>2](i7);
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r_g0;
+ heap32[(g0+2)] = 1;
+ __FUNCTION_TABLE__[(r4)>>2](i7);
+ r4 = r_g0;
+ r2 = heap32[(r2)];
+ r2 = r2 >> 2;
+ r5 = r4 >> 2;
+ r2 = heap32[(r2+5)];
+ r5 = heap32[(r5+2)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r5;
+ heap32[(g0+2)] = r1;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3+5)];
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r4;
+ heap32[(g0+2)] = r_g0;
+ heap32[(g0+3)] = 1497645650;
+ heap32[(g0+4)] = r0;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ return;
+}
+
+function _ZN11btRigidBody24checkCollideWithOverrideEP17btCollisionObject(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ r1 = heapU8[r0+232];
+ r1 = r1 & 2;
+_1: do {
+ if(r1 !=0) //_LBB681_2
+{
+ if(r0 ==0) //_LBB681_1
+{
+__label__ = 1;
+}
+else{
+ r1 = heap32[(fp)];
+ r1 = r1 >> 2;
+ r2 = heap32[(r1+120)];
+ r3 = 0;
+_4: while(true){
+ if(r2 >r3) //_LBB681_4
+{
+ r4 = heap32[(r1+122)];
+ r5 = r3 << 2;
+ r4 = (r4 + r5)|0;
+ r4 = r4 >> 2;
+ r4 = heap32[(r4)];
+ r4 = r4 >> 2;
+ r5 = heap32[(r4+5)];
+ if(r5 !=r0) //_LBB681_6
+{
+ r4 = heap32[(r4+6)];
+ if(r4 ==r0) //_LBB681_5
+{
+break _4;
+}
+else{
+ r3 = (r3 + 1)|0;
+}
+}
+else{
+break _4;
+}
+}
+else{
+__label__ = 1;
+break _1;
+}
+}
+ r0 = 0;
+__label__ = 9;
+}
+}
+else{
+__label__ = 1;
+}
+} while(0);
+if (__label__ == 1){
+ r0 = 1;
+}
+ r0 = r0 & 255;
+ r_g0 = r0;
+ return;
+}
+
+function _ZN11btRigidBody14setupRigidBodyERKNS_27btRigidBodyConstructionInfoE(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+ var f10;
+ var f11;
+ var f12;
+ var f13;
+ var f14;
+ var f15;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ heap32[(r1+58)] = 2;
+ heap32[(r1+76)] = 0;
+ heap32[(r1+77)] = 0;
+ heap32[(r1+78)] = 0;
+ heap32[(r1+79)] = 0;
+ heap32[(r1+80)] = 0;
+ heap32[(r1+81)] = 0;
+ heap32[(r1+82)] = 0;
+ heap32[(r1+83)] = 0;
+ heap32[(r1+134)] = 1065353216;
+ heap32[(r1+135)] = 1065353216;
+ heap32[(r1+136)] = 1065353216;
+ heap32[(r1+137)] = 0;
+ heap32[(r1+85)] = 1065353216;
+ heap32[(r1+86)] = 1065353216;
+ heap32[(r1+87)] = 1065353216;
+ heap32[(r1+88)] = 0;
+ heap32[(r1+89)] = 0;
+ heap32[(r1+90)] = 0;
+ heap32[(r1+91)] = 0;
+ heap32[(r1+92)] = 0;
+ heap32[(r1+93)] = 0;
+ heap32[(r1+94)] = 0;
+ heap32[(r1+95)] = 0;
+ heap32[(r1+96)] = 0;
+ heap32[(r1+101)] = 0;
+ heap32[(r1+102)] = 0;
+ heap32[(r1+103)] = 0;
+ heap32[(r1+104)] = 0;
+ heap32[(r1+105)] = 0;
+ heap32[(r1+106)] = 0;
+ heap32[(r1+107)] = 0;
+ heap32[(r1+108)] = 0;
+ heap32[(r1+109)] = 0;
+ r2 = heap32[(fp+1)];
+ heap32[(r1+110)] = 1056964608;
+ r3 = r2 >> 2;
+ heap32[(r1+116)] = heap32[(r3+27)];
+ heap32[(r1+117)] = heap32[(r3+28)];
+ r4 = heap32[(r3+1)];
+ heap32[(r1+118)] = r4;
+ heap32[(r1+150)] = 0;
+ heap32[(r1+151)] = 0;
+ r5 = heapU8[r2+116];
+ heap8[r0+444] = r5;
+ heap32[(r1+112)] = heap32[(r3+30)];
+ heap32[(r1+113)] = heap32[(r3+31)];
+ heap32[(r1+114)] = heap32[(r3+32)];
+ heap32[(r1+115)] = heap32[(r3+33)];
+ if(r4 ==0) //_LBB682_2
+{
+ f0 = heapFloat[(r3+2)];
+ heapFloat[(r1+1)] = f0;
+ f1 = heapFloat[(r3+3)];
+ heapFloat[(r1+2)] = f1;
+ f2 = heapFloat[(r3+4)];
+ heapFloat[(r1+3)] = f2;
+ f3 = heapFloat[(r3+5)];
+ heapFloat[(r1+4)] = f3;
+ f4 = heapFloat[(r3+6)];
+ heapFloat[(r1+5)] = f4;
+ f5 = heapFloat[(r3+7)];
+ heapFloat[(r1+6)] = f5;
+ f6 = heapFloat[(r3+8)];
+ heapFloat[(r1+7)] = f6;
+ f7 = heapFloat[(r3+9)];
+ heapFloat[(r1+8)] = f7;
+ f8 = heapFloat[(r3+10)];
+ heapFloat[(r1+9)] = f8;
+ f9 = heapFloat[(r3+11)];
+ heapFloat[(r1+10)] = f9;
+ f10 = heapFloat[(r3+12)];
+ heapFloat[(r1+11)] = f10;
+ f11 = heapFloat[(r3+13)];
+ heapFloat[(r1+12)] = f11;
+ f12 = heapFloat[(r3+14)];
+ heapFloat[(r1+13)] = f12;
+ f13 = heapFloat[(r3+15)];
+ heapFloat[(r1+14)] = f13;
+ f14 = heapFloat[(r3+16)];
+ heapFloat[(r1+15)] = f14;
+ f15 = heapFloat[(r3+17)];
+ heapFloat[(r1+16)] = f15;
+}
+else{
+ r5 = r4 >> 2;
+ r5 = heap32[(r5)];
+ r5 = r5 >> 2;
+ r5 = heap32[(r5+2)];
+ r6 = (r0 + 4)|0;
+ heap32[(g0)] = r4;
+ heap32[(g0+1)] = r6;
+ __FUNCTION_TABLE__[(r5)>>2](i7);
+ f0 = heapFloat[(r1+1)];
+ f1 = heapFloat[(r1+2)];
+ f2 = heapFloat[(r1+3)];
+ f3 = heapFloat[(r1+4)];
+ f4 = heapFloat[(r1+5)];
+ f5 = heapFloat[(r1+6)];
+ f6 = heapFloat[(r1+7)];
+ f7 = heapFloat[(r1+8)];
+ f8 = heapFloat[(r1+9)];
+ f9 = heapFloat[(r1+10)];
+ f10 = heapFloat[(r1+11)];
+ f11 = heapFloat[(r1+12)];
+ f12 = heapFloat[(r1+13)];
+ f13 = heapFloat[(r1+14)];
+ f14 = heapFloat[(r1+15)];
+ f15 = heapFloat[(r1+16)];
+}
+ heapFloat[(r1+17)] = f0;
+ heapFloat[(r1+18)] = f1;
+ heapFloat[(r1+19)] = f2;
+ heapFloat[(r1+20)] = f3;
+ heapFloat[(r1+21)] = f4;
+ heapFloat[(r1+22)] = f5;
+ heapFloat[(r1+23)] = f6;
+ heapFloat[(r1+24)] = f7;
+ heapFloat[(r1+25)] = f8;
+ heapFloat[(r1+26)] = f9;
+ heapFloat[(r1+27)] = f10;
+ heapFloat[(r1+28)] = f11;
+ heapFloat[(r1+29)] = f12;
+ heapFloat[(r1+30)] = f13;
+ heapFloat[(r1+31)] = f14;
+ heapFloat[(r1+32)] = f15;
+ heap32[(r1+33)] = 0;
+ heap32[(r1+34)] = 0;
+ heap32[(r1+35)] = 0;
+ heap32[(r1+36)] = 0;
+ heap32[(r1+37)] = 0;
+ heap32[(r1+38)] = 0;
+ heap32[(r1+39)] = 0;
+ heap32[(r1+40)] = 0;
+ heap32[(r1+56)] = heap32[(r3+25)];
+ heap32[(r1+57)] = heap32[(r3+26)];
+ r4 = heap32[(r1)];
+ r4 = r4 >> 2;
+ r4 = heap32[(r4+3)];
+ r5 = heap32[(r3+18)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r5;
+ r5 = _ZL8uniqueId;
+ r5 = r5 >> 2;
+ __FUNCTION_TABLE__[(r4)>>2](i7);
+ r4 = heap32[(r5)];
+ r6 = (r4 + 1)|0;
+ heap32[(r1+125)] = r4;
+ heap32[(r5)] = r6;
+ f0 = heapFloat[(r3)];
+ r2 = (r2 + 76)|0;
+ heap32[(g0)] = r0;
+ heapFloat[(g0+1)] = f0;
+ heap32[(g0+2)] = r2;
+ _ZN11btRigidBody12setMassPropsEfRK9btVector3(i7);
+ f0 = heapFloat[(r3+23)];
+ f1 = heapFloat[(r3+24)];
+ f2 = 0;
+ if(f0 >=f2) //_LBB682_5
+{
+ f3 = 1;
+ f0 = f0 > f3 ? f3 : f0;
+}
+else{
+ f0 = f2;
+}
+ heapFloat[(r1+109)] = f0;
+ if(f1 >=f2) //_LBB682_8
+{
+ f0 = 1;
+ f1 = f1 > f0 ? f0 : f1;
+}
+else{
+ f1 = 0;
+}
+ heapFloat[(r1+110)] = f1;
+ heap32[(g0)] = r0;
+ _ZN11btRigidBody19updateInertiaTensorEv(i7);
+ heap32[(r1+124)] = 0;
+ heap32[(r1+126)] = 0;
+ heap32[(r1+127)] = 0;
+ heap32[(r1+128)] = 0;
+ heap32[(r1+129)] = 0;
+ heap32[(r1+130)] = 0;
+ heap32[(r1+131)] = 0;
+ heap32[(r1+132)] = 0;
+ heap32[(r1+133)] = 0;
+ f0 = heapFloat[(r1+87)];
+ f1 = heapFloat[(r1+84)];
+ f2 = heapFloat[(r1+86)];
+ f3 = heapFloat[(r1+85)];
+ f3 = f3*f1;
+ f2 = f2*f1;
+ heapFloat[(r1+138)] = f3;
+ f0 = f0*f1;
+ heapFloat[(r1+139)] = f2;
+ heapFloat[(r1+140)] = f0;
+ heap32[(r1+141)] = 0;
+ heap32[(r1+142)] = 0;
+ heap32[(r1+143)] = 0;
+ heap32[(r1+144)] = 0;
+ heap32[(r1+145)] = 0;
+ heap32[(r1+146)] = 0;
+ heap32[(r1+147)] = 0;
+ heap32[(r1+148)] = 0;
+ heap32[(r1+149)] = 0;
+ return;
+}
+
+function _ZN11btRigidBodyD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV11btRigidBody;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ r1 = heap32[(r2+120)];
+ if(r1 ==0) //_LBB683_2
+{
+ r1 = heap32[(r2+122)];
+if(!(r1 ==0)) //_LBB683_6
+{
+ r3 = heapU8[r0+492];
+if(!(r3 ==0)) //_LBB683_5
+{
+ r3 = gNumAlignedFree;
+ r3 = r3 >> 2;
+ r4 = heap32[(r3)];
+ r4 = (r4 + 1)|0;
+ r1 = r1 >> 2;
+ heap32[(r3)] = r4;
+ r1 = heap32[(r1+-1)];
+ heap32[(g0)] = r1;
+ free(i7);
+}
+ heap32[(r2+122)] = 0;
+}
+ r1 = 1;
+ heap8[r0+492] = r1;
+ heap32[(r2+122)] = 0;
+ r1 = _ZTV17btCollisionObject;
+ heap32[(r2+120)] = 0;
+ r1 = (r1 + 8)|0;
+ heap32[(r2+121)] = 0;
+ heap32[(r2)] = r1;
+if(!(r0 ==0)) //_LBB683_8
+{
+ r0 = gNumAlignedFree;
+ r0 = r0 >> 2;
+ r1 = heap32[(r0)];
+ r1 = (r1 + 1)|0;
+ heap32[(r0)] = r1;
+ r0 = heap32[(r2+-1)];
+ heap32[(g0)] = r0;
+ free(i7);
+}
+ return;
+}
+else{
+ r0 = _2E_str248;
+ r2 = _2E_str34955;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r2;
+ heap32[(g0+2)] = 175;
+ _assert(i7);
+}
+}
+
+function _ZN11btRigidBodyD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTV11btRigidBody;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ r1 = heap32[(r2+120)];
+ if(r1 ==0) //_LBB684_2
+{
+ r1 = heap32[(r2+122)];
+if(!(r1 ==0)) //_LBB684_6
+{
+ r3 = heapU8[r0+492];
+if(!(r3 ==0)) //_LBB684_5
+{
+ r3 = gNumAlignedFree;
+ r3 = r3 >> 2;
+ r4 = heap32[(r3)];
+ r4 = (r4 + 1)|0;
+ r1 = r1 >> 2;
+ heap32[(r3)] = r4;
+ r1 = heap32[(r1+-1)];
+ heap32[(g0)] = r1;
+ free(i7);
+}
+ heap32[(r2+122)] = 0;
+}
+ r1 = 1;
+ heap8[r0+492] = r1;
+ heap32[(r2+122)] = 0;
+ r0 = _ZTV17btCollisionObject;
+ heap32[(r2+120)] = 0;
+ r0 = (r0 + 8)|0;
+ heap32[(r2+121)] = 0;
+ heap32[(r2)] = r0;
+ return;
+}
+else{
+ r0 = _2E_str248;
+ r2 = _2E_str34955;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r2;
+ heap32[(g0+2)] = 175;
+ _assert(i7);
+}
+}
+
+function _ZNK11btRigidBody9serializeEPvP12btSerializer(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = heap32[(fp+1)];
+ r2 = heap32[(fp+2)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = r2;
+ r1 = r1 >> 2;
+ r2 = r0 >> 2;
+ _ZNK17btCollisionObject9serializeEPvP12btSerializer(i7);
+ heap32[(r1+62)] = heap32[(r2+64)];
+ heap32[(r1+63)] = heap32[(r2+65)];
+ heap32[(r1+64)] = heap32[(r2+66)];
+ heap32[(r1+65)] = heap32[(r2+67)];
+ heap32[(r1+66)] = heap32[(r2+68)];
+ heap32[(r1+67)] = heap32[(r2+69)];
+ heap32[(r1+68)] = heap32[(r2+70)];
+ heap32[(r1+69)] = heap32[(r2+71)];
+ heap32[(r1+70)] = heap32[(r2+72)];
+ heap32[(r1+71)] = heap32[(r2+73)];
+ heap32[(r1+72)] = heap32[(r2+74)];
+ heap32[(r1+73)] = heap32[(r2+75)];
+ heap32[(r1+74)] = heap32[(r2+76)];
+ heap32[(r1+75)] = heap32[(r2+77)];
+ heap32[(r1+76)] = heap32[(r2+78)];
+ heap32[(r1+77)] = heap32[(r2+79)];
+ heap32[(r1+78)] = heap32[(r2+80)];
+ heap32[(r1+79)] = heap32[(r2+81)];
+ heap32[(r1+80)] = heap32[(r2+82)];
+ heap32[(r1+81)] = heap32[(r2+83)];
+ heap32[(r1+110)] = heap32[(r2+84)];
+ heap32[(r1+82)] = heap32[(r2+134)];
+ heap32[(r1+83)] = heap32[(r2+135)];
+ heap32[(r1+84)] = heap32[(r2+136)];
+ heap32[(r1+85)] = heap32[(r2+137)];
+ heap32[(r1+86)] = heap32[(r2+85)];
+ heap32[(r1+87)] = heap32[(r2+86)];
+ heap32[(r1+88)] = heap32[(r2+87)];
+ heap32[(r1+89)] = heap32[(r2+88)];
+ heap32[(r1+90)] = heap32[(r2+89)];
+ heap32[(r1+91)] = heap32[(r2+90)];
+ heap32[(r1+92)] = heap32[(r2+91)];
+ heap32[(r1+93)] = heap32[(r2+92)];
+ heap32[(r1+94)] = heap32[(r2+93)];
+ heap32[(r1+95)] = heap32[(r2+94)];
+ heap32[(r1+96)] = heap32[(r2+95)];
+ heap32[(r1+97)] = heap32[(r2+96)];
+ heap32[(r1+98)] = heap32[(r2+97)];
+ heap32[(r1+99)] = heap32[(r2+98)];
+ heap32[(r1+100)] = heap32[(r2+99)];
+ heap32[(r1+101)] = heap32[(r2+100)];
+ heap32[(r1+102)] = heap32[(r2+101)];
+ heap32[(r1+103)] = heap32[(r2+102)];
+ heap32[(r1+104)] = heap32[(r2+103)];
+ heap32[(r1+105)] = heap32[(r2+104)];
+ heap32[(r1+106)] = heap32[(r2+105)];
+ heap32[(r1+107)] = heap32[(r2+106)];
+ heap32[(r1+108)] = heap32[(r2+107)];
+ heap32[(r1+109)] = heap32[(r2+108)];
+ heap32[(r1+111)] = heap32[(r2+109)];
+ heap32[(r1+112)] = heap32[(r2+110)];
+ r0 = heapU8[r0+444];
+ heap32[(r1+119)] = r0;
+ heap32[(r1+113)] = heap32[(r2+112)];
+ heap32[(r1+114)] = heap32[(r2+113)];
+ heap32[(r1+115)] = heap32[(r2+114)];
+ heap32[(r1+116)] = heap32[(r2+115)];
+ heap32[(r1+117)] = heap32[(r2+116)];
+ heap32[(r1+118)] = heap32[(r2+117)];
+ r0 = _2E_str4144;
+ r_g0 = r0;
+ return;
+}
+
+function _ZN11btRigidBody16addConstraintRefEP17btTypedConstraint(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ r2 = heap32[(fp+1)];
+ r3 = heap32[(r1+120)];
+ r4 = 0;
+_1: while(true){
+ if(r3 >r4) //_LBB686_1
+{
+ r5 = heap32[(r1+122)];
+ r6 = r4 << 2;
+ r5 = (r5 + r6)|0;
+ r5 = r5 >> 2;
+ r5 = heap32[(r5)];
+ if(r5 !=r2) //_LBB686_3
+{
+ r4 = (r4 + 1)|0;
+continue _1;
+}
+else{
+__label__ = 5;
+break _1;
+}
+}
+else{
+__label__ = 4;
+break _1;
+}
+}
+if (__label__ == 4){
+ r4 = r3;
+}
+if(!(r3 !=r4)) //_LBB686_27
+{
+ r4 = heap32[(r1+121)];
+ if(r4 ==r3) //_LBB686_9
+{
+ r5 = 1;
+ r6 = r3 << 1;
+ r6 = r3 == 0 ? r5 : r6;
+if(!(r4 >=r6)) //_LBB686_8
+{
+ if(r6 !=0) //_LBB686_12
+{
+ r4 = gNumAlignedAllocs;
+ r4 = r4 >> 2;
+ r7 = heap32[(r4)];
+ r8 = r6 << 2;
+ r7 = (r7 + 1)|0;
+ r8 = r8 | 3;
+ heap32[(r4)] = r7;
+ r4 = (r8 + 16)|0;
+ heap32[(g0)] = r4;
+ malloc(i7);
+ r4 = r_g0;
+ if(r4 !=0) //_LBB686_14
+{
+ r7 = 0;
+ r8 = (r4 + 4)|0;
+ r7 = (r7 - r8)|0;
+ r7 = r7 & 15;
+ r7 = (r4 + r7)|0;
+ r8 = (r7 + 4)|0;
+ r7 = r7 >> 2;
+ heap32[(r7)] = r4;
+ r4 = r8;
+}
+}
+else{
+ r4 = 0;
+}
+_18: do {
+ if(r3 <1) //_LBB686_17
+{
+ r8 = heap32[(r1+122)];
+}
+else{
+ r7 = 0;
+_21: while(true){
+ r8 = heap32[(r1+122)];
+ r9 = r7 << 2;
+ r10 = (r8 + r9)|0;
+ r10 = r10 >> 2;
+ r9 = (r4 + r9)|0;
+ r10 = heap32[(r10)];
+ r7 = (r7 + 1)|0;
+ r9 = r9 >> 2;
+ heap32[(r9)] = r10;
+if(!(r3 !=r7)) //_LBB686_18
+{
+break _18;
+}
+}
+}
+} while(0);
+ if(r8 !=0) //_LBB686_21
+{
+ r7 = heapU8[r0+492];
+ if(r7 !=0) //_LBB686_23
+{
+ r3 = gNumAlignedFree;
+ r3 = r3 >> 2;
+ r7 = heap32[(r3)];
+ r7 = (r7 + 1)|0;
+ r8 = r8 >> 2;
+ heap32[(r3)] = r7;
+ r3 = heap32[(r8+-1)];
+ heap32[(g0)] = r3;
+ free(i7);
+ r3 = heap32[(r1+120)];
+}
+ heap32[(r1+122)] = 0;
+}
+ heap8[r0+492] = r5;
+ heap32[(r1+122)] = r4;
+ heap32[(r1+121)] = r6;
+}
+}
+ r0 = r3 << 2;
+ r3 = heap32[(r1+122)];
+ r0 = (r3 + r0)|0;
+ r0 = r0 >> 2;
+ heap32[(r0)] = r2;
+ r0 = heap32[(r1+120)];
+ r0 = (r0 + 1)|0;
+ heap32[(r1+120)] = r0;
+}
+ heap32[(r1+63)] = 1;
+ return;
+}
+
+function _ZN11btRigidBody19integrateVelocitiesEf(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+ var f9;
+ var f10;
+ var f11;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = heapU8[r0+204];
+ r1 = r1 & 3;
+if(!(r1 !=0)) //_LBB687_3
+{
+ f0 = heapFloat[(fp+1)];
+ r0 = r0 >> 2;
+ f1 = heapFloat[(r0+84)];
+ f1 = f1*f0;
+ f2 = heapFloat[(r0+101)];
+ f3 = heapFloat[(r0+103)];
+ f4 = heapFloat[(r0+102)];
+ f5 = heapFloat[(r0+76)];
+ f2 = f2*f1;
+ f2 = f5+f2;
+ heapFloat[(r0+76)] = f2;
+ f2 = f4*f1;
+ f4 = heapFloat[(r0+77)];
+ f2 = f4+f2;
+ heapFloat[(r0+77)] = f2;
+ f1 = f3*f1;
+ f2 = heapFloat[(r0+78)];
+ f1 = f2+f1;
+ heapFloat[(r0+78)] = f1;
+ f1 = heapFloat[(r0+105)];
+ f2 = heapFloat[(r0+64)];
+ f3 = heapFloat[(r0+106)];
+ f4 = heapFloat[(r0+65)];
+ f2 = f2*f1;
+ f4 = f4*f3;
+ f5 = heapFloat[(r0+107)];
+ f6 = heapFloat[(r0+66)];
+ f2 = f2+f4;
+ f4 = f6*f5;
+ f2 = f2+f4;
+ f4 = heapFloat[(r0+68)];
+ f6 = heapFloat[(r0+69)];
+ f7 = heapFloat[(r0+72)];
+ f8 = heapFloat[(r0+73)];
+ f9 = heapFloat[(r0+74)];
+ f10 = heapFloat[(r0+70)];
+ f11 = heapFloat[(r0+80)];
+ f2 = f2*f0;
+ f4 = f4*f1;
+ f6 = f6*f3;
+ f2 = f11+f2;
+ f4 = f4+f6;
+ f6 = f10*f5;
+ f4 = f4+f6;
+ heapFloat[(r0+80)] = f2;
+ f1 = f7*f1;
+ f3 = f8*f3;
+ f4 = f4*f0;
+ f6 = heapFloat[(r0+81)];
+ f4 = f6+f4;
+ f1 = f1+f3;
+ f3 = f9*f5;
+ f1 = f1+f3;
+ heapFloat[(r0+81)] = f4;
+ f1 = f1*f0;
+ f3 = heapFloat[(r0+82)];
+ f1 = f3+f1;
+ f2 = f2*f2;
+ f3 = f4*f4;
+ heapFloat[(r0+82)] = f1;
+ f2 = f2+f3;
+ f1 = f1*f1;
+ f1 = f2+f1;
+ heapFloat[(g0)] = f1;
+ sqrtf(i7);
+ f1 = f_g0;
+ f2 = f1*f0;
+ f3 = 1.5707963705062866;
+if(!(f2 <=f3)) //_LBB687_3
+{
+ f0 = f3/f0;
+ f0 = f0/f1;
+ f1 = heapFloat[(r0+80)];
+ f1 = f1*f0;
+ heapFloat[(r0+80)] = f1;
+ f1 = heapFloat[(r0+81)];
+ f1 = f1*f0;
+ heapFloat[(r0+81)] = f1;
+ f1 = heapFloat[(r0+82)];
+ f0 = f1*f0;
+ heapFloat[(r0+82)] = f0;
+}
+}
+ return;
+}
+
+function _ZN11btRigidBody12applyDampingEf(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+ var f4;
+ var f5;
+ var f6;
+ var f7;
+ var f8;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ f0 = heapFloat[(r1+109)];
+ f1 = 1;
+ f2 = heapFloat[(fp+1)];
+ f0 = f1-f0;
+ heapFloat[(g0)] = f0;
+ heapFloat[(g0+1)] = f2;
+ powf(i7);
+ f3 = heapFloat[(r1+76)];
+ f3 = f3*f_g0;
+ heapFloat[(r1+76)] = f3;
+ f3 = heapFloat[(r1+77)];
+ f3 = f3*f_g0;
+ heapFloat[(r1+77)] = f3;
+ f3 = heapFloat[(r1+78)];
+ f0 = f3*f_g0;
+ heapFloat[(r1+78)] = f0;
+ f0 = heapFloat[(r1+110)];
+ f0 = f1-f0;
+ heapFloat[(g0)] = f0;
+ heapFloat[(g0+1)] = f2;
+ powf(i7);
+ f2 = heapFloat[(r1+80)];
+ f2 = f2*f_g0;
+ heapFloat[(r1+80)] = f2;
+ f3 = heapFloat[(r1+81)];
+ f3 = f3*f_g0;
+ heapFloat[(r1+81)] = f3;
+ f4 = heapFloat[(r1+82)];
+ f0 = f4*f_g0;
+ heapFloat[(r1+82)] = f0;
+ r0 = heapU8[r0+444];
+if(!(r0 ==0)) //_LBB688_14
+{
+ f4 = f2*f2;
+ f5 = f3*f3;
+ f6 = heapFloat[(r1+76)];
+ f4 = f4+f5;
+ f5 = f0*f0;
+ f4 = f4+f5;
+ f5 = heapFloat[(r1+114)];
+ if(f4 <f5) //_LBB688_3
+{
+ f4 = heapFloat[(r1+77)];
+ f5 = heapFloat[(r1+78)];
+ f7 = f6*f6;
+ f8 = f4*f4;
+ f7 = f7+f8;
+ f8 = f5*f5;
+ f7 = f7+f8;
+ f8 = heapFloat[(r1+113)];
+ if(f7 <f8) //_LBB688_5
+{
+ f7 = heapFloat[(r1+112)];
+ f2 = f2*f7;
+ f3 = f3*f7;
+ heapFloat[(r1+80)] = f2;
+ f0 = f0*f7;
+ heapFloat[(r1+81)] = f3;
+ f6 = f6*f7;
+ heapFloat[(r1+82)] = f0;
+ f4 = f4*f7;
+ heapFloat[(r1+76)] = f6;
+ f5 = f5*f7;
+ heapFloat[(r1+77)] = f4;
+ heapFloat[(r1+78)] = f5;
+}
+}
+else{
+ f4 = heapFloat[(r1+77)];
+ f5 = heapFloat[(r1+78)];
+}
+ f0 = f6*f6;
+ f2 = f4*f4;
+ f0 = f0+f2;
+ f2 = f5*f5;
+ f0 = f0+f2;
+ heapFloat[(g0)] = f0;
+ sqrtf(i7);
+ f0 = f_g0;
+ f2 = heapFloat[(r1+109)];
+if(!(f2 <=f0)) //_LBB688_10
+{
+ f2 = 0.004999999888241291;
+ if(f0 <=f2) //_LBB688_9
+{
+ heap32[(r1+76)] = 0;
+ heap32[(r1+77)] = 0;
+ heap32[(r1+78)] = 0;
+ heap32[(r1+79)] = 0;
+}
+else{
+ f0 = heapFloat[(r1+76)];
+ f3 = heapFloat[(r1+77)];
+ f4 = heapFloat[(r1+78)];
+ f0 = f0*f0;
+ f3 = f3*f3;
+ f0 = f0+f3;
+ f3 = f4*f4;
+ f0 = f0+f3;
+ heapFloat[(g0)] = f0;
+ sqrtf(i7);
+ f0 = f1/f_g0;
+ f3 = heapFloat[(r1+76)];
+ f4 = heapFloat[(r1+77)];
+ f5 = f3*f0;
+ f6 = heapFloat[(r1+78)];
+ f7 = f4*f0;
+ f5 = f5*f2;
+ f0 = f6*f0;
+ f7 = f7*f2;
+ f3 = f3-f5;
+ f0 = f0*f2;
+ f2 = f4-f7;
+ heapFloat[(r1+76)] = f3;
+ f0 = f6-f0;
+ heapFloat[(r1+77)] = f2;
+ heapFloat[(r1+78)] = f0;
+}
+}
+ f0 = heapFloat[(r1+80)];
+ f2 = heapFloat[(r1+81)];
+ f3 = heapFloat[(r1+82)];
+ f0 = f0*f0;
+ f2 = f2*f2;
+ f0 = f0+f2;
+ f2 = f3*f3;
+ f0 = f0+f2;
+ heapFloat[(g0)] = f0;
+ sqrtf(i7);
+ f0 = f_g0;
+ f2 = heapFloat[(r1+110)];
+if(!(f2 <=f0)) //_LBB688_14
+{
+ f2 = 0.004999999888241291;
+ if(f0 <=f2) //_LBB688_13
+{
+ heap32[(r1+80)] = 0;
+ heap32[(r1+81)] = 0;
+ heap32[(r1+82)] = 0;
+ heap32[(r1+83)] = 0;
+}
+else{
+ f0 = heapFloat[(r1+80)];
+ f3 = heapFloat[(r1+81)];
+ f4 = heapFloat[(r1+82)];
+ f0 = f0*f0;
+ f3 = f3*f3;
+ f0 = f0+f3;
+ f3 = f4*f4;
+ f0 = f0+f3;
+ heapFloat[(g0)] = f0;
+ sqrtf(i7);
+ f0 = f1/f_g0;
+ f1 = heapFloat[(r1+80)];
+ f3 = heapFloat[(r1+81)];
+ f4 = f1*f0;
+ f5 = heapFloat[(r1+82)];
+ f6 = f3*f0;
+ f4 = f4*f2;
+ f0 = f5*f0;
+ f6 = f6*f2;
+ f1 = f1-f4;
+ f0 = f0*f2;
+ f2 = f3-f6;
+ heapFloat[(r1+80)] = f1;
+ f0 = f5-f0;
+ heapFloat[(r1+81)] = f2;
+ heapFloat[(r1+82)] = f0;
+ return;
+}
+}
+}
+ return;
+}
+
+function _GLOBAL__I__ZN7btClockC2Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = _ZL13gProfileClock_2E_0;
+ heap32[(g0)] = 8;
+ r0 = r0 >> 2;
+ _Znwj(i7);
+ heap32[(r0)] = r_g0;
+ heap32[(g0)] = r_g0;
+ heap32[(g0+1)] = 0;
+ r0 = _ZN15CProfileManager4RootE;
+ r1 = r0 >> 2;
+ r2 = _2E_str729;
+ gettimeofday(i7);
+ heap32[(r1)] = r2;
+ heap32[(r1+1)] = 0;
+ heap32[(r1+2)] = 0;
+ heap32[(r1+3)] = 0;
+ heap32[(r1+4)] = 0;
+ heap32[(r1+5)] = 0;
+ heap32[(r1+6)] = 0;
+ heap32[(r1+7)] = 0;
+ heap32[(g0)] = r0;
+ _ZN12CProfileNode5ResetEv(i7);
+ return;
+}
+
+function _GLOBAL__D__ZN7btClockC2Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = _ZN15CProfileManager4RootE;
+ r1 = _ZL13gProfileClock_2E_0;
+ heap32[(g0)] = r0;
+ r0 = r1 >> 2;
+ _ZN12CProfileNodeD1Ev(i7);
+ r0 = heap32[(r0)];
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZN12CProfileNode5ResetEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+_1: while(true){
+ r0 = r0 >> 2;
+ heap32[(r0+1)] = 0;
+ heap32[(r0+2)] = 0;
+ r1 = heap32[(r0+6)];
+if(!(r1 ==0)) //_LBB691_3
+{
+ heap32[(g0)] = r1;
+ _ZN12CProfileNode5ResetEv(i7);
+}
+ r0 = heap32[(r0+7)];
+ if(r0 !=0) //_LBB691_1
+{
+continue _1;
+}
+else{
+break _1;
+}
+}
+ return;
+}
+
+function _ZN12CProfileNodeD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r1 = heap32[(r0+6)];
+if(!(r1 ==0)) //_LBB692_2
+{
+ heap32[(g0)] = r1;
+ _ZN12CProfileNodeD1Ev(i7);
+ heap32[(g0)] = r1;
+ _ZdlPv(i7);
+}
+ r0 = heap32[(r0+7)];
+if(!(r0 ==0)) //_LBB692_4
+{
+ heap32[(g0)] = r0;
+ _ZN12CProfileNodeD1Ev(i7);
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+}
+ return;
+}
+
+function _ZN15CProfileManager13Start_ProfileEPKc(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = _ZN15CProfileManager11CurrentNodeE;
+ r0 = r0 >> 2;
+ r1 = heap32[(r0)];
+ r2 = heap32[(fp)];
+ r3 = r1 >> 2;
+ r4 = heap32[(r3)];
+ if(r4 !=r2) //_LBB693_2
+{
+ r4 = (r1 + 24)|0;
+_3: while(true){
+ r4 = r4 >> 2;
+ r4 = heap32[(r4)];
+ if(r4 !=0) //_LBB693_3
+{
+ r5 = r4 >> 2;
+ r5 = heap32[(r5)];
+ if(r5 !=r2) //_LBB693_5
+{
+ r4 = (r4 + 28)|0;
+}
+else{
+__label__ = 3;
+break _3;
+}
+}
+else{
+__label__ = 6;
+break _3;
+}
+}
+switch(__label__ ){//multiple entries
+case 6:
+ heap32[(g0)] = 32;
+ _Znwj(i7);
+ r4 = r_g0;
+ r5 = r4 >> 2;
+ heap32[(r5)] = r2;
+ heap32[(r5+1)] = 0;
+ heap32[(r5+2)] = 0;
+ heap32[(r5+3)] = 0;
+ heap32[(r5+4)] = 0;
+ heap32[(r5+5)] = r1;
+ heap32[(r5+6)] = 0;
+ heap32[(r5+7)] = 0;
+ heap32[(g0)] = r4;
+ _ZN12CProfileNode5ResetEv(i7);
+ r1 = heap32[(r3+6)];
+ heap32[(r5+7)] = r1;
+ heap32[(r3+6)] = r4;
+ r1 = r4;
+break;
+case 3:
+ r1 = r4;
+break;
+}
+ heap32[(r0)] = r1;
+}
+ r0 = r1 >> 2;
+ r1 = heap32[(r0+1)];
+ r1 = (r1 + 1)|0;
+ heap32[(r0+1)] = r1;
+ r1 = heap32[(r0+4)];
+ r2 = (r1 + 1)|0;
+ heap32[(r0+4)] = r2;
+if(!(r1 !=0)) //_LBB693_11
+{
+ r1 = sp + -8;
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = 0;
+ r2 = _ZL13gProfileClock_2E_0;
+ gettimeofday(i7);
+ r2 = r2 >> 2;
+ r2 = heap32[(r2)];
+ r2 = r2 >> 2;
+ r1 = r1 >> 2;
+ r3 = heap32[(fp+-2)];
+ r4 = heap32[(r2)];
+ r3 = (r3 - r4)|0;
+ r1 = heap32[(r1+1)];
+ r2 = heap32[(r2+1)];
+ r1 = (r1 - r2)|0;
+ r2 = (r3 * 1000000)|0;
+ r1 = (r1 + r2)|0;
+ heap32[(r0+3)] = r1;
+}
+ return;
+}
+
+function _ZN15CProfileManager5ResetEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+var __label__ = 0;
+ i7 = sp + -24;var g0 = i7>>2; // save stack
+ r0 = _ZL13gProfileClock_2E_0;
+ r0 = r0 >> 2;
+ r1 = heap32[(r0)];
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = 0;
+ gettimeofday(i7);
+ r1 = _ZN15CProfileManager4RootE;
+ heap32[(g0)] = r1;
+ r1 = r1 >> 2;
+ _ZN12CProfileNode5ResetEv(i7);
+ r2 = heap32[(r1+1)];
+ r2 = (r2 + 1)|0;
+ heap32[(r1+1)] = r2;
+ r2 = heap32[(r1+4)];
+ r3 = (r2 + 1)|0;
+ heap32[(r1+4)] = r3;
+if(!(r2 !=0)) //_LBB694_2
+{
+ r2 = sp + -16;
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = 0;
+ gettimeofday(i7);
+ r0 = heap32[(r0)];
+ r0 = r0 >> 2;
+ r2 = r2 >> 2;
+ r3 = heap32[(fp+-4)];
+ r4 = heap32[(r0)];
+ r3 = (r3 - r4)|0;
+ r2 = heap32[(r2+1)];
+ r0 = heap32[(r0+1)];
+ r0 = (r2 - r0)|0;
+ r2 = (r3 * 1000000)|0;
+ r0 = (r0 + r2)|0;
+ heap32[(r1+3)] = r0;
+}
+ r0 = _ZN15CProfileManager12FrameCounterE;
+ r0 = r0 >> 2;
+ heap32[(r0)] = 0;
+ r0 = sp + -8;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = 0;
+ gettimeofday(i7);
+ return;
+}
+
+function _GLOBAL__I__ZN4__rw9__catfindEPNS_8__rw_catE(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = _ZN4__rwL12__rw_catlistE_2E_0;
+ r1 = _ZN4__rwL12__rw_catlistE_2E_1;
+ r0 = r0 >> 2;
+ r2 = _ZN4__rwL12__rw_catlistE_2E_2;
+ r1 = r1 >> 2;
+ heap32[(r0)] = 0;
+ r2 = r2 >> 2;
+ heap32[(r1)] = 0;
+ heap32[(r2)] = 0;
+ heap32[(g0)] = 136;
+ _Znwj(i7);
+ r3 = r_g0;
+if(!(r3 !=0)) //_LBB695_3
+{
+ heap32[(g0)] = 3;
+ _ZN4__rw10__rw_throwEiz(i7);
+}
+ r4 = (r3 + 136)|0;
+ heap32[(g0)] = 0;
+ _ZdlPv(i7);
+ r5 = heap32[(r0)];
+ if(r5 ==0) //_LBB695_6
+{
+ r8 = r3;
+}
+else{
+ r6 = r5;
+ r7 = r3;
+_9: while(true){
+ r9 = r6 >> 2;
+ r6 = (r6 + 4)|0;
+ r8 = (r7 + 4)|0;
+ r7 = r7 >> 2;
+ r9 = heap32[(r9)];
+ heap32[(r7)] = r9;
+ r7 = r8;
+ if(r6 !=0) //_LBB695_7
+{
+continue _9;
+}
+else{
+break _9;
+}
+}
+}
+ r6 = 0;
+_12: while(true){
+ r7 = r6 << 2;
+ r7 = (r8 + r7)|0;
+ r6 = (r6 + 1)|0;
+ r7 = r7 >> 2;
+ heap32[(r7)] = 0;
+ if(r6 !=2) //_LBB695_9
+{
+continue _12;
+}
+else{
+break _12;
+}
+}
+ r6 = heap32[(r1)];
+ if(r6 ==0) //_LBB695_12
+{
+ r6 = (r8 + 8)|0;
+ heap32[(r0)] = r3;
+ heap32[(r1)] = r6;
+ heap32[(r2)] = r4;
+ heap32[(g0)] = r5;
+ _ZdlPv(i7);
+ return;
+}
+else{
+ abort(i7);
+}
+}
+
+function _GLOBAL__D__ZN4__rw9__catfindEPNS_8__rw_catE(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = _ZN4__rwL12__rw_catlistE_2E_0;
+ r1 = _ZN4__rwL12__rw_catlistE_2E_1;
+ r0 = r0 >> 2;
+ r1 = r1 >> 2;
+ r0 = heap32[(r0)];
+ r2 = heap32[(r1)];
+ r3 = (r2 - r0)|0;
+ r3 = r3 >> 2;
+if(!(r3 ==0)) //_LBB696_2
+{
+ r3 = r3 << 2;
+ r2 = (r2 - r3)|0;
+ heap32[(r1)] = r2;
+}
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZN4__rwL13__rw_vfmtwhatEPcjPKcS0_(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+var __label__ = 0;
+ i7 = sp + -48;var g0 = i7>>2; // save stack
+ r0 = _ZN4__rwL16__rw_what_refcntE;
+ r0 = r0 >> 2;
+ r1 = heap32[(r0)];
+ r2 = heap32[(fp)];
+ r3 = heap32[(fp+1)];
+ r4 = (r1 + 1)|0;
+ heap32[(r0)] = r4;
+ if(r1 !=0) //_LBB697_2
+{
+ heap32[(g0)] = 256;
+ _Znaj(i7);
+ r1 = r_g0;
+ r4 = heap32[(r0)];
+ r4 = (r4 + -1)|0;
+ heap32[(r0)] = r4;
+}
+else{
+ r1 = _ZN4__rwL13__rw_what_bufE;
+}
+ r4 = 256;
+ r12 = swrite__index__;
+_5: while(true){
+ r5 = sp + -16;
+ heap32[(fp+-8)] = r3;
+ r6 = r5 >> 2;
+ heap32[(fp+-7)] = r3;
+ r7 = (r4 + -1)|0;
+ r8 = 0;
+ heap32[(r6+1)] = 0;
+ r9 = sp + -24;
+ r10 = r4 == 0 ? r8 : r7;
+ heap32[(fp+-4)] = r1;
+ r11 = r9 >> 2;
+ heap32[(r6+2)] = r10;
+ heap32[(r11+1)] = r12;
+ heap32[(fp+-6)] = r5;
+ heap32[(g0)] = r9;
+ heap32[(g0+1)] = r2;
+ heap32[(g0+2)] = r3;
+ __v_printf(i7);
+ r5 = r_g0;
+_7: do {
+if(!(r1 ==0)) //_LBB697_11
+{
+if(!(r4 ==0)) //_LBB697_11
+{
+if(!(r5 <0)) //_LBB697_11
+{
+if(!(r4 ==-1)) //_LBB697_10
+{
+if(!(uint(r5) <uint(r4))) //_LBB697_10
+{
+ heap8[r1+r7] = r8;
+break _7;
+}
+}
+ heap8[r1+r5] = r8;
+}
+}
+}
+} while(0);
+ r5 = r5 < 0 ? r8 : r5;
+ r5 = r7 > r5 ? r5 : r8;
+ if(r5 !=0) //_LBB697_13
+{
+ if(r4 >r5) //_LBB697_20
+{
+break _5;
+}
+else{
+ r4 = (r5 + 1)|0;
+}
+}
+else{
+ r4 = r4 << 1;
+}
+ r5 = _ZN4__rwL13__rw_what_bufE;
+ if(r1 !=r5) //_LBB697_17
+{
+if(!(r1 ==0)) //_LBB697_19
+{
+ heap32[(g0)] = r1;
+ _ZdaPv(i7);
+}
+}
+else{
+ r1 = heap32[(r0)];
+ r1 = (r1 + -1)|0;
+ heap32[(r0)] = r1;
+}
+ heap32[(g0)] = r4;
+ _Znaj(i7);
+ r1 = r_g0;
+continue _5;
+}
+ r_g0 = r1;
+ return;
+}
+
+function _ZN4__rw10__rw_throwEiz(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+var __label__ = 0;
+ i7 = sp + -64;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ if(r0 >4) //_LBB698_9
+{
+ r1 = (sp + 4)|0;
+ heap32[(fp+-7)] = r1;
+ r2 = _ZZN4__rwL13__rw_vfmtwhatEPcjiS0_E7__fname;
+ heap32[(fp+-9)] = r1;
+ r2 = r2 >> 2;
+ heap32[(fp+-8)] = r1;
+ r3 = heap32[(r2)];
+if(!(r3 !=0)) //_LBB698_41
+{
+ r3 = _ZZN4__rwL13__rw_vfmtwhatEPcjiS0_E6buffer;
+ r4 = 0;
+_5: while(true){
+ r5 = heapU8[r3];
+ r4 = r5 == 58 ? r3 : r4;
+ if(r5 !=0) //_LBB698_13
+{
+ r5 = (r3 + 1)|0;
+ r6 = heapU8[r3+1];
+ r4 = r6 == 58 ? r5 : r4;
+ if(r6 !=0) //_LBB698_15
+{
+ r5 = (r3 + 2)|0;
+ r6 = heapU8[r3+2];
+ r4 = r6 == 58 ? r5 : r4;
+ if(r6 !=0) //_LBB698_17
+{
+ r5 = (r3 + 3)|0;
+ r6 = heapU8[r3+3];
+ r4 = r6 == 58 ? r5 : r4;
+ if(r6 !=0) //_LBB698_19
+{
+ r3 = (r3 + 4)|0;
+}
+else{
+break _5;
+}
+}
+else{
+break _5;
+}
+}
+else{
+break _5;
+}
+}
+else{
+break _5;
+}
+}
+_12: do {
+if(!(r4 ==0)) //_LBB698_24
+{
+ r3 = 0;
+ heap8[r4] = r3;
+ r3 = _ZZN4__rwL13__rw_vfmtwhatEPcjiS0_E8__catset;
+ r4 = (r4 + 1)|0;
+ heap32[(g0)] = r4;
+ heap32[(g0+1)] = r3;
+ sscanf(i7);
+ r4 = r_g0;
+ r3 = r3 >> 2;
+if(!(r4 !=1)) //_LBB698_23
+{
+ r4 = heap32[(r3)];
+ if(r4 >0) //_LBB698_24
+{
+break _12;
+}
+}
+ heap32[(r3)] = 1;
+}
+} while(0);
+ r3 = _ZZN4__rwL13__rw_vfmtwhatEPcjiS0_E4msgs;
+ r4 = r3 >> 2;
+ heap32[(r4+1)] = 0;
+ heap32[(r4+2)] = 0;
+ heap32[(r4+3)] = 0;
+ heap32[(r4+4)] = 0;
+ heap32[(r4+5)] = 0;
+ r5 = _ZTVSt8messagesIcE;
+ heap32[(r4+6)] = 0;
+ r5 = (r5 + 8)|0;
+ heap32[(r4+7)] = 0;
+ r6 = _ZN4__rwL22__rw_classic_once_initE_2E_0_2E_b;
+ heap32[(r4)] = r5;
+ r5 = heapU8[r6];
+if(!(r5 != 0)) //_LBB698_29
+{
+ _ZN4__rw11__rw_locale11_C_get_bodyEPS0_S1_PKciPKNS_10__rw_facetE(i7);
+ r5 = r_g0;
+ r7 = _ZN4__rwL12__rw_classicE;
+ r7 = r7 >> 2;
+ heap32[(r7)] = r5;
+if(!(r5 !=0)) //_LBB698_28
+{
+ r5 = _2E_str12102177;
+ r7 = _2E_str10100175;
+ r8 = _2E_str538;
+ heap32[(g0)] = 19;
+ heap32[(g0+1)] = r5;
+ heap32[(g0+2)] = r7;
+ heap32[(g0+3)] = r8;
+ _ZN4__rw10__rw_throwEiz(i7);
+}
+ r5 = 1;
+ heap8[r6] = r5;
+}
+ r5 = _ZZN4__rwL13__rw_vfmtwhatEPcjiS0_E6buffer;
+ r6 = heapU8[r5];
+ if(r6 ==0) //_LBB698_31
+{
+ r6 = _ZNSs11_C_null_refE;
+ r7 = 0;
+ r6 = (r6 + 12)|0;
+}
+else{
+ r6 = 0;
+_28: while(true){
+ r7 = (r5 - r6)|0;
+ r6 = (r6 + -1)|0;
+ r7 = heapU8[r7+1];
+if(!(r7 !=0)) //_LBB698_32
+{
+break _28;
+}
+}
+ r7 = 0;
+ r7 = (r7 - r6)|0;
+ if(r6 !=0) //_LBB698_35
+{
+ r6 = 32;
+ r6 = uint(r7) > uint(r6) ? r7 : r6;
+ heap32[(g0)] = r6;
+ heap32[(g0+1)] = r7;
+ _ZNSs10_C_get_repEjj(i7);
+ r6 = (r_g0 + 12)|0;
+}
+else{
+ r6 = _ZNSs11_C_null_refE;
+ r6 = (r6 + 12)|0;
+}
+}
+ heap32[(fp+-4)] = r6;
+ heap32[(g0)] = r6;
+ heap32[(g0+1)] = r5;
+ heap32[(g0+2)] = r7;
+ memcpy(i7);
+ r4 = heap32[(r4)];
+ r4 = r4 >> 2;
+ r4 = heap32[(r4+2)];
+ r6 = sp + -16;
+ r7 = _ZN4__rwL12__rw_classicE;
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r6;
+ heap32[(g0+2)] = r7;
+ __FUNCTION_TABLE__[(r4)>>2](i7);
+ r3 = r_g0;
+ r4 = _ZZN4__rwL13__rw_vfmtwhatEPcjiS0_E5__cat;
+ r4 = r4 >> 2;
+ heap32[(r4)] = r3;
+ r3 = heap32[(fp+-4)];
+ r3 = (r3 + -12)|0;
+ r4 = _ZNSs11_C_null_refE;
+if(!(r3 ==r4)) //_LBB698_40
+{
+ r3 = r3 >> 2;
+ r4 = heap32[(r3)];
+ r6 = (r4 + -1)|0;
+ heap32[(r3)] = r6;
+if(!(r4 >0)) //_LBB698_40
+{
+ r3 = heap32[(fp+-4)];
+ r3 = (r3 + -12)|0;
+ heap32[(g0)] = r3;
+ _ZdlPv(i7);
+}
+}
+ heap32[(fp+-4)] = 0;
+ heap32[(r2)] = r5;
+}
+ r2 = _ZZN4__rwL13__rw_vfmtwhatEPcjiS0_E5__cat;
+ r2 = r2 >> 2;
+ r2 = heap32[(r2)];
+ if(r2 !=-1) //_LBB698_43
+{
+ r3 = _ZNSs11_C_null_refE;
+ r4 = _ZZN4__rwL13__rw_vfmtwhatEPcjiS0_E4msgs;
+ r5 = (r3 + 12)|0;
+ r6 = r4 >> 2;
+ heap32[(fp+-2)] = r5;
+ r5 = _ZZN4__rwL13__rw_vfmtwhatEPcjiS0_E8__catset;
+ r6 = heap32[(r6)];
+ r6 = r6 >> 2;
+ r5 = r5 >> 2;
+ r6 = heap32[(r6+3)];
+ r5 = heap32[(r5)];
+ r7 = sp + -24;
+ r8 = sp + -8;
+ heap32[(g0)] = r7;
+ heap32[(g0+1)] = r4;
+ heap32[(g0+2)] = r2;
+ heap32[(g0+3)] = r5;
+ heap32[(g0+4)] = r0;
+ heap32[(g0+5)] = r8;
+ __FUNCTION_TABLE__[(r6)>>2](i7);
+ r2 = heap32[(fp+-2)];
+ r2 = (r2 + -12)|0;
+if(!(r2 ==r3)) //_LBB698_47
+{
+ r2 = r2 >> 2;
+ r4 = heap32[(r2)];
+ r5 = (r4 + -1)|0;
+ heap32[(r2)] = r5;
+if(!(r4 >0)) //_LBB698_47
+{
+ r2 = heap32[(fp+-2)];
+ r2 = (r2 + -12)|0;
+ heap32[(g0)] = r2;
+ _ZdlPv(i7);
+}
+}
+ heap32[(fp+-2)] = 0;
+ r2 = heap32[(fp+-6)];
+ r4 = r2 >> 2;
+ r4 = heap32[(r4+-1)];
+ if(r4 !=0) //_LBB698_49
+{
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = r1;
+ _ZN4__rwL13__rw_vfmtwhatEPcjPKcS0_(i7);
+ r1 = r_g0;
+ r2 = heap32[(fp+-6)];
+}
+else{
+ r1 = 0;
+}
+ r2 = (r2 + -12)|0;
+if(!(r2 ==r3)) //_LBB698_54
+{
+ r2 = r2 >> 2;
+ r3 = heap32[(r2)];
+ r4 = (r3 + -1)|0;
+ heap32[(r2)] = r4;
+if(!(r3 >0)) //_LBB698_54
+{
+ r2 = heap32[(fp+-6)];
+ r2 = (r2 + -12)|0;
+ heap32[(g0)] = r2;
+ _ZdlPv(i7);
+}
+}
+ heap32[(fp+-6)] = 0;
+ if(r1 ==0) //_LBB698_56
+{
+__label__ = 50;
+}
+else{
+__label__ = 51;
+}
+}
+else{
+__label__ = 50;
+}
+if (__label__ == 50){
+ r1 = 24;
+ r2 = 0;
+ r0 = uint(r0) > uint(r1) ? r2 : r0;
+ r1 = _ZZN4__rw10__rw_throwEizE6errors;
+ r2 = r0 << 2;
+ r1 = (r1 + r2)|0;
+ r1 = r1 >> 2;
+ r2 = heap32[(fp+-7)];
+ r1 = heap32[(r1)];
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r2;
+ _ZN4__rwL13__rw_vfmtwhatEPcjPKcS0_(i7);
+ r1 = r_g0;
+ if(r1 ==0) //_LBB698_60
+{
+ if(r0 ==2) //_LBB698_65
+{
+ r0 = _2E_str47;
+}
+else{
+ if(r0 ==1) //_LBB698_64
+{
+ r0 = _2E_str15132;
+}
+else{
+ if(r0 !=0) //_LBB698_66
+{
+ r0 = _2E_str5134;
+}
+else{
+ r0 = _2E_str4131;
+}
+}
+}
+ heap32[(g0)] = r0;
+ fprintf(i7);
+__label__ = 62;
+}
+else{
+__label__ = 51;
+}
+}
+if (__label__ == 51){
+ heap32[(g0)] = r1;
+ r0 = _ZN4__rwL13__rw_what_bufE;
+ fprintf(i7);
+ if(r1 !=r0) //_LBB698_59
+{
+ heap32[(g0)] = r1;
+ _ZdaPv(i7);
+}
+else{
+ r0 = _ZN4__rwL16__rw_what_refcntE;
+ r0 = r0 >> 2;
+ r1 = heap32[(r0)];
+ r1 = (r1 + -1)|0;
+ heap32[(r0)] = r1;
+}
+}
+ abort(i7);
+}
+else{
+ if(r0 ==2) //_LBB698_6
+{
+ r0 = _2E_str47;
+}
+else{
+ if(r0 ==1) //_LBB698_5
+{
+ r0 = _2E_str15132;
+}
+else{
+ if(r0 !=0) //_LBB698_7
+{
+ r0 = _2E_str5134;
+}
+else{
+ r0 = _2E_str4131;
+}
+}
+}
+ heap32[(g0)] = r0;
+ fprintf(i7);
+ abort(i7);
+}
+}
+
+function _ZN4__rw10__rw_facetD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTVN4__rw10__rw_facetE;
+ r0 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r0)] = r1;
+ heap32[(r0+5)] = -1;
+ r1 = heap32[(r0+1)];
+ r2 = heap32[(r0+2)];
+if(!(r1 ==r2)) //_LBB699_3
+{
+if(!(r1 ==0)) //_LBB699_3
+{
+ heap32[(g0)] = r1;
+ _ZdaPv(i7);
+}
+}
+ r1 = _ZZN4__rw10__rw_facetD4EvE9destroyed;
+ heap32[(r0+1)] = r1;
+ r1 = heap32[(r0+4)];
+if(!(r1 !=-1)) //_LBB699_5
+{
+ r0 = heap32[(r0+3)];
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+}
+ return;
+}
+
+function _ZN4__rw10__rw_facetD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTVN4__rw10__rw_facetE;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ heap32[(r2+5)] = -1;
+ r1 = heap32[(r2+1)];
+ r3 = heap32[(r2+2)];
+if(!(r1 ==r3)) //_LBB700_3
+{
+if(!(r1 ==0)) //_LBB700_3
+{
+ heap32[(g0)] = r1;
+ _ZdaPv(i7);
+}
+}
+ r1 = _ZZN4__rw10__rw_facetD4EvE9destroyed;
+ heap32[(r2+1)] = r1;
+ r1 = heap32[(r2+4)];
+if(!(r1 !=-1)) //_LBB700_5
+{
+ r1 = heap32[(r2+3)];
+ heap32[(g0)] = r1;
+ _ZdlPv(i7);
+}
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZN4__rw10__rw_facet9_C_manageEPS0_NS0_13_C_facet_typeEPKcPFS1_jS4_E(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+ var r13;
+ var r14;
+ var r15;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = _ZZN4__rw10__rw_facet9_C_manageEPS0_NS0_13_C_facet_typeEPKcPFS1_jS4_EE12n_std_facets;
+ r1 = _ZZN4__rw10__rw_facet9_C_manageEPS0_NS0_13_C_facet_typeEPKcPFS1_jS4_EE10std_facets;
+ r0 = r0 >> 2;
+ r1 = r1 >> 2;
+ r2 = heap32[(fp)];
+ r3 = heap32[(r0)];
+ r4 = heap32[(r1)];
+_1: do {
+ if(r2 ==0) //_LBB701_24
+{
+ r5 = heap32[(fp+1)];
+ r2 = heap32[(fp+2)];
+ r6 = heap32[(fp+3)];
+ r7 = _2E_str538;
+ r8 = r2 == 0 ? r7 : r2;
+ r9 = r3;
+_3: while(true){
+ r10 = r9;
+ if(r10 ==0) //_LBB701_34
+{
+__label__ = 34;
+break _3;
+}
+else{
+ r9 = r10 << 1;
+ r11 = r9 & -4;
+ r12 = (r4 + r11)|0;
+ r9 = r12 >> 2;
+ r13 = heap32[(r9)];
+ r14 = r13 >> 2;
+ r15 = heap32[(r14+5)];
+ r9 = r10 >>> 1;
+ if(r15 !=r5) //_LBB701_27
+{
+ r15 = (r15 - r5)|0;
+}
+else{
+ r15 = heap32[(r14+1)];
+ r15 = r15 == 0 ? r7 : r15;
+ heap32[(g0)] = r8;
+ heap32[(g0+1)] = r15;
+ strcmp(i7);
+ r15 = r_g0;
+}
+ if(r15 <0) //_LBB701_31
+{
+__label__ = 31;
+}
+else{
+ if(r15 <1) //_LBB701_32
+{
+__label__ = 32;
+break _3;
+}
+else{
+ r4 = (r11 + r4)|0;
+ r10 = (r10 + -1)|0;
+ r4 = (r4 + 4)|0;
+ r9 = (r10 - r9)|0;
+}
+}
+}
+}
+if (__label__ == 32){
+if(!(r12 ==0)) //_LBB701_34
+{
+ r2 = heap32[(r14+6)];
+ r2 = (r2 + 1)|0;
+ heap32[(r14+6)] = r2;
+ r_g0 = r13;
+ return;
+}
+}
+ r4 = _ZZN4__rw10__rw_facet9_C_manageEPS0_NS0_13_C_facet_typeEPKcPFS1_jS4_EE17std_facet_bufsize;
+ r4 = r4 >> 2;
+ r7 = heap32[(r4)];
+if(!(r3 !=r7)) //_LBB701_39
+{
+ r3 = r3 << 3;
+ heap32[(g0)] = r3;
+ _Znaj(i7);
+ r3 = r_g0;
+ r7 = heap32[(r1)];
+ r8 = heap32[(r0)];
+ r8 = r8 << 2;
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r7;
+ heap32[(g0+2)] = r8;
+ memcpy(i7);
+ r8 = _ZZN4__rw10__rw_facet9_C_manageEPS0_NS0_13_C_facet_typeEPKcPFS1_jS4_EE13std_facet_buf;
+if(!(r7 ==r8)) //_LBB701_38
+{
+if(!(r7 ==0)) //_LBB701_38
+{
+ heap32[(g0)] = r7;
+ _ZdaPv(i7);
+}
+}
+ heap32[(r1)] = r3;
+ r3 = heap32[(r4)];
+ r3 = r3 << 1;
+ heap32[(r4)] = r3;
+}
+ r3 = r5 & 1;
+ r4 = 0;
+ r2 = r3 == 0 ? r2 : r4;
+ heap32[(g0)] = 1;
+ heap32[(g0+1)] = r2;
+ __FUNCTION_TABLE__[(r6)>>2](i7);
+ r2 = r_g0;
+ r3 = (r5 + 1)|0;
+ r4 = r3 >>> 31;
+ r6 = r2 >> 2;
+ r3 = (r3 + r4)|0;
+ r4 = heap32[(r6+7)];
+ r4 = r4 >> 2;
+ r3 = r3 >> 1;
+ heap32[(r4)] = r3;
+ r3 = heap32[(r6+5)];
+if(!(r3 ==r5)) //_LBB701_41
+{
+ r3 = r2 >> 2;
+ heap32[(r3+5)] = r5;
+}
+ r3 = r2 >> 2;
+ r4 = heap32[(r3+6)];
+if(!(r4 ==1)) //_LBB701_43
+{
+ heap32[(r3+6)] = 1;
+}
+ r3 = heap32[(r0)];
+ r1 = heap32[(r1)];
+ r4 = r3 << 2;
+ r4 = (r1 + r4)|0;
+ r4 = r4 >> 2;
+ r5 = (r3 + 1)|0;
+ heap32[(r4)] = r2;
+ heap32[(r0)] = r5;
+ r0 = (r3 + -1)|0;
+ if(uint(r0) <uint(2147483645)) //_LBB701_45
+{
+ r0 = cmpfacets__index__;
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = 0;
+ heap32[(g0+2)] = r3;
+ heap32[(g0+3)] = r0;
+ quicksort(i7);
+}
+}
+else{
+ r5 = r3;
+ r6 = r4;
+_31: while(true){
+ r7 = r5;
+ if(r7 ==0) //_LBB701_23
+{
+__label__ = 23;
+break _31;
+}
+else{
+ r5 = r7 << 1;
+ r8 = r5 & -4;
+ r9 = (r6 + r8)|0;
+ r5 = r9 >> 2;
+ r5 = heap32[(r5)];
+ r10 = r2 >> 2;
+ r11 = r5 >> 2;
+ r12 = heap32[(r10+5)];
+ r13 = heap32[(r11+5)];
+ r5 = r7 >>> 1;
+ if(r12 !=r13) //_LBB701_4
+{
+ r12 = (r13 - r12)|0;
+}
+else{
+ r12 = heap32[(r11+1)];
+ r13 = heap32[(r10+1)];
+ r10 = _2E_str538;
+ r13 = r13 == 0 ? r10 : r13;
+ r12 = r12 == 0 ? r10 : r12;
+ heap32[(g0)] = r13;
+ heap32[(g0+1)] = r12;
+ strcmp(i7);
+ r12 = r_g0;
+}
+ if(r12 <0) //_LBB701_8
+{
+__label__ = 8;
+}
+else{
+ if(r12 <1) //_LBB701_9
+{
+__label__ = 9;
+break _31;
+}
+else{
+ r6 = (r8 + r6)|0;
+ r7 = (r7 + -1)|0;
+ r6 = (r6 + 4)|0;
+ r5 = (r7 - r5)|0;
+}
+}
+}
+}
+if (__label__ == 9){
+if(!(r9 ==0)) //_LBB701_23
+{
+ r2 = (r9 - r4)|0;
+ r5 = r2 & -4;
+ r6 = (r4 + r5)|0;
+ r6 = r6 >> 2;
+ r6 = heap32[(r6)];
+ r7 = r6 >> 2;
+ r8 = heap32[(r7+6)];
+ r8 = (r8 + -1)|0;
+ heap32[(r7+6)] = r8;
+ if(r8 ==0) //_LBB701_12
+{
+ r2 = r2 >> 2;
+ r8 = (r3 + -1)|0;
+ heap32[(r0)] = r8;
+ if(uint(r8) >uint(207)) //_LBB701_17
+{
+__label__ = 17;
+}
+else{
+ r0 = _ZZN4__rw10__rw_facet9_C_manageEPS0_NS0_13_C_facet_typeEPKcPFS1_jS4_EE13std_facet_buf;
+ if(r4 ==r0) //_LBB701_17
+{
+__label__ = 17;
+}
+else{
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r4;
+ heap32[(g0+2)] = r5;
+ r3 = r2 << 2;
+ r5 = (r3 + r4)|0;
+ r2 = (r8 - r2)|0;
+ memcpy(i7);
+ r3 = (r0 + r3)|0;
+ r8 = (r5 + 4)|0;
+ r2 = r2 << 2;
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r8;
+ heap32[(g0+2)] = r2;
+ memcpy(i7);
+if(!(r4 ==0)) //_LBB701_16
+{
+ heap32[(g0)] = r4;
+ _ZdaPv(i7);
+}
+ heap32[(r1)] = r0;
+__label__ = 20;
+}
+}
+_51: do {
+if (__label__ == 17){
+ r0 = (r8 - r2)|0;
+ r0 = r0 << 2;
+if(!(r0 ==0)) //_LBB701_20
+{
+ r0 = r3 << 2;
+ r2 = r2 << 2;
+ r0 = (r0 + -4)|0;
+ r1 = (r2 + r4)|0;
+ r2 = (r0 - r2)|0;
+ r0 = (r1 + 4)|0;
+_54: while(true){
+ r1 = heapU8[r0];
+ r2 = (r2 + -1)|0;
+ r3 = (r0 + 1)|0;
+ heap8[r0+-4] = r1;
+ r0 = r3;
+if(!(r2 !=0)) //_LBB701_19
+{
+break _51;
+}
+}
+}
+}
+} while(0);
+ r2 = heap32[(r7+1)];
+if(!(r2 ==0)) //_LBB701_11
+{
+if(!(r6 ==0)) //_LBB701_11
+{
+ r2 = heap32[(r7)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+1)];
+ heap32[(g0)] = r6;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ r2 = 0;
+ r_g0 = r2;
+ return;
+}
+}
+}
+ r2 = 0;
+break _1;
+}
+}
+ r0 = r2 >> 2;
+ r1 = heap32[(r0+6)];
+ r1 = (r1 + -1)|0;
+ heap32[(r0+6)] = r1;
+ r0 = 0;
+ r_g0 = r0;
+ return;
+}
+} while(0);
+ r_g0 = r2;
+ return;
+}
+
+function cmpfacets(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = heap32[(fp+1)];
+ r0 = r0 >> 2;
+ r1 = r1 >> 2;
+ r0 = heap32[(r0)];
+ r1 = heap32[(r1)];
+ r0 = r0 >> 2;
+ r1 = r1 >> 2;
+ r2 = heap32[(r0+5)];
+ r3 = heap32[(r1+5)];
+ if(r2 !=r3) //_LBB702_2
+{
+ r0 = (r3 - r2)|0;
+ r_g0 = r0;
+ return;
+}
+else{
+ r2 = heap32[(r1+1)];
+ r3 = heap32[(r0+1)];
+ r0 = _2E_str538;
+ r3 = r3 == 0 ? r0 : r3;
+ r2 = r2 == 0 ? r0 : r2;
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r2;
+ strcmp(i7);
+ return;
+}
+}
+
+function _ZN4__rwL16__rw_expand_nameERNS_14__rw_pod_arrayIcLj256EEEPKc(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+ var r13;
+ var r14;
+ var r15;
+ var r16;
+ var r17;
+ var r18;
+ var r19;
+var __label__ = 0;
+ i7 = sp + -640;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = heap32[(fp+1)];
+ r2 = 0;
+ r3 = r1;
+_1: while(true){
+ r4 = r2 << 2;
+ r5 = heapU8[r3];
+ if(r5 !=59) //_LBB703_3
+{
+ if(r5 !=0) //_LBB703_5
+{
+ r5 = heapU8[r3+1];
+ if(r5 ==59) //_LBB703_14
+{
+__label__ = 14;
+break _1;
+}
+else{
+ if(r5 ==0) //_LBB703_4
+{
+__label__ = 4;
+break _1;
+}
+else{
+ r5 = heapU8[r3+2];
+ if(r5 !=59) //_LBB703_9
+{
+ if(r5 ==0) //_LBB703_4
+{
+__label__ = 4;
+break _1;
+}
+else{
+ r5 = heapU8[r3+3];
+ if(r5 !=59) //_LBB703_12
+{
+ if(r5 ==0) //_LBB703_4
+{
+__label__ = 4;
+break _1;
+}
+else{
+ r2 = (r2 + 1)|0;
+ r3 = (r3 + 4)|0;
+continue _1;
+}
+}
+else{
+__label__ = 11;
+break _1;
+}
+}
+}
+else{
+__label__ = 8;
+break _1;
+}
+}
+}
+}
+else{
+__label__ = 4;
+break _1;
+}
+}
+else{
+__label__ = 2;
+break _1;
+}
+}
+switch(__label__ ){//multiple entries
+case 14:
+ r2 = (r3 + 1)|0;
+break;
+case 4:
+ r2 = 0;
+break;
+case 2:
+ r2 = (r1 + r4)|0;
+break;
+case 11:
+ r2 = r4 | 3;
+ r2 = (r1 + r2)|0;
+break;
+case 8:
+ r2 = r4 | 2;
+ r2 = (r1 + r2)|0;
+break;
+}
+_18: do {
+ if(r2 ==r1) //_LBB703_17
+{
+ r3 = (r1 + 1)|0;
+ r4 = (r1 + 3)|0;
+ r5 = 0;
+ r2 = r3;
+_20: while(true){
+ r6 = heapU8[r4+-2];
+ if(r6 ==59) //_LBB703_21
+{
+__label__ = 19;
+break _20;
+}
+else{
+ if(r6 !=0) //_LBB703_22
+{
+ r6 = heapU8[r4+-1];
+ if(r6 ==0) //_LBB703_20
+{
+__label__ = 90;
+break _18;
+}
+else{
+ r7 = r5 << 2;
+ if(r6 !=59) //_LBB703_25
+{
+ r6 = heapU8[r4];
+ if(r6 ==0) //_LBB703_20
+{
+__label__ = 90;
+break _18;
+}
+else{
+ if(r6 !=59) //_LBB703_28
+{
+ r6 = heapU8[r4+1];
+ if(r6 ==0) //_LBB703_20
+{
+__label__ = 90;
+break _18;
+}
+else{
+ if(r6 !=59) //_LBB703_31
+{
+ r5 = (r5 + 1)|0;
+ r4 = (r4 + 4)|0;
+ r2 = (r2 + 4)|0;
+}
+else{
+__label__ = 27;
+break _20;
+}
+}
+}
+else{
+__label__ = 32;
+break _18;
+}
+}
+}
+else{
+__label__ = 22;
+break _20;
+}
+}
+}
+else{
+__label__ = 90;
+break _18;
+}
+}
+}
+switch(__label__ ){//multiple entries
+case 19:
+ r1 = r3;
+__label__ = 29;
+break _18;
+break;
+case 27:
+ r2 = r7 | 3;
+ r1 = (r2 + r1)|0;
+ r4 = (r1 + 1)|0;
+__label__ = 32;
+break _18;
+break;
+case 22:
+ r2 = r7 | 1;
+ r1 = (r2 + r1)|0;
+ r4 = (r1 + 1)|0;
+__label__ = 32;
+break;
+}
+}
+else{
+__label__ = 29;
+}
+} while(0);
+if (__label__ == 29){
+ if(r2 ==0) //_LBB703_34
+{
+ r3 = r1;
+__label__ = 90;
+}
+else{
+ r4 = r2;
+ r3 = r1;
+__label__ = 32;
+}
+}
+_39: do {
+switch(__label__ ){//multiple entries
+case 90:
+ r7 = heapU8[r3];
+ if(r7 ==0) //_LBB703_98
+{
+ r0 = sp + -624;
+ r0 = r0 >> 2;
+ heap32[(r0+20)] = 0;
+ heap32[(r0+22)] = 0;
+ heap32[(r0+21)] = 0;
+__label__ = 73;
+break _39;
+}
+else{
+ r7 = 1;
+__label__ = 93;
+break _39;
+}
+break;
+case 32:
+ r1 = sp + -264;
+ r2 = sp + -528;
+ r5 = (r1 + 8)|0;
+ r6 = (r2 + 8)|0;
+ r7 = 1;
+ r8 = 0;
+_45: while(true){
+ if(r4 ==0) //_LBB703_39
+{
+ r4 = heapU8[r3];
+_49: do {
+ if(r4 !=0) //_LBB703_41
+{
+ r9 = (r3 + 1)|0;
+ r10 = 0;
+_51: while(true){
+ r4 = (r10 + 1)|0;
+ r11 = heapU8[r9+r10];
+ r10 = r4;
+if(!(r11 !=0)) //_LBB703_42
+{
+break _49;
+}
+}
+}
+else{
+ r4 = 0;
+}
+} while(0);
+ r4 = (r3 + r4)|0;
+}
+ r9 = (r4 - r3)|0;
+ heap32[(fp+-66)] = r9;
+ if(uint(r9) >uint(255)) //_LBB703_46
+{
+ r10 = (r9 + 1)|0;
+ heap32[(g0)] = r10;
+ _Znaj(i7);
+ r10 = r_g0;
+}
+else{
+ r10 = r5;
+}
+ r11 = r1 >> 2;
+ heap32[(r11+1)] = r10;
+ heap32[(g0)] = r10;
+ heap32[(g0+1)] = r3;
+ heap32[(g0+2)] = r9;
+ memcpy(i7);
+ r9 = heap32[(r11+1)];
+ r10 = heap32[(fp+-66)];
+ r12 = 0;
+ heap8[r9+r10] = r12;
+ r9 = r2 >> 2;
+ heap32[(fp+-132)] = 0;
+ heap32[(r9+1)] = r6;
+ heap8[sp+-520] = r12;
+ r10 = _ZN4__rw9__rw_catsE;
+ r13 = (r8 * 12)|0;
+ r10 = (r10 + r13)|0;
+ r13 = heap32[(r11+1)];
+ r10 = r10 >> 2;
+ r10 = heap32[(r10)];
+ heap32[(g0)] = r10;
+ heap32[(g0+1)] = r13;
+ heap32[(g0+2)] = r2;
+ _ZN4__rw16__rw_locale_nameEiPKcRNS_14__rw_pod_arrayIcLj256EEE(i7);
+ r10 = r_g0;
+ if(r10 !=0) //_LBB703_50
+{
+ r13 = heapU8[r10];
+_63: do {
+ if(r13 !=0) //_LBB703_52
+{
+ r14 = (r10 + 1)|0;
+_65: while(true){
+ r13 = (r12 + 1)|0;
+ r15 = heapU8[r14+r12];
+ r12 = r13;
+if(!(r15 !=0)) //_LBB703_53
+{
+break _63;
+}
+}
+}
+else{
+ r13 = 0;
+}
+} while(0);
+ r12 = r7 & 255;
+_69: do {
+if(!(r12 ==0)) //_LBB703_56
+{
+ if(r8 !=0) //_LBB703_57
+{
+ r7 = r0 >> 2;
+ r7 = heap32[(r7+1)];
+ r12 = r7;
+ r14 = r10;
+ r15 = r13;
+_72: while(true){
+ if(r15 !=0) //_LBB703_58
+{
+ r15 = (r15 + -1)|0;
+ r16 = (r14 + 1)|0;
+ r17 = (r12 + 1)|0;
+ r18 = heapU8[r12];
+ r19 = heapU8[r14];
+ r12 = r17;
+ r14 = r16;
+ if(r18 !=r19) //_LBB703_62
+{
+__label__ = 57;
+break _72;
+}
+else{
+__label__ = 54;
+}
+}
+else{
+__label__ = 55;
+break _72;
+}
+}
+if (__label__ == 55){
+ r7 = heapU8[r7+r13];
+if(!(r7 !=59)) //_LBB703_62
+{
+ r7 = 1;
+break _69;
+}
+}
+ r7 = 0;
+}
+}
+} while(0);
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r10;
+ heap32[(g0+2)] = r13;
+ _ZN4__rw14__rw_pod_arrayIcLj256EE6appendEPKcj(i7);
+ r8 = (r8 + 1)|0;
+ if(r8 !=6) //_LBB703_66
+{
+ r10 = heapU8[r4];
+ if(r10 !=0) //_LBB703_68
+{
+ r3 = _2E_str785;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r3;
+ heap32[(g0+2)] = 1;
+ _ZN4__rw14__rw_pod_arrayIcLj256EE6appendEPKcj(i7);
+ r3 = (r4 + 1)|0;
+ r4 = 2;
+}
+else{
+ r4 = 1;
+}
+}
+else{
+ r4 = 1;
+ r8 = 6;
+}
+}
+else{
+ r4 = 0;
+}
+ r9 = heap32[(r9+1)];
+if(!(r9 ==r6)) //_LBB703_73
+{
+if(!(r9 ==0)) //_LBB703_73
+{
+ heap32[(g0)] = r9;
+ _ZdaPv(i7);
+}
+}
+ if(r4 ==1) //_LBB703_79
+{
+__label__ = 74;
+break _45;
+}
+else{
+ if(r4 !=0) //_LBB703_83
+{
+ r4 = heap32[(r11+1)];
+ if(r4 ==r5) //_LBB703_85
+{
+__label__ = 79;
+}
+else{
+ if(r4 !=0) //_LBB703_86
+{
+ r10 = 0;
+ heap32[(g0)] = r4;
+ _ZdaPv(i7);
+ r9 = r3;
+__label__ = 81;
+}
+else{
+__label__ = 79;
+}
+}
+if (__label__ == 79){
+ r10 = 0;
+ r9 = r3;
+}
+_101: while(true){
+ r4 = r10 << 2;
+ r11 = r4 | 3;
+ r12 = r4 | 2;
+ r13 = heapU8[r9];
+ r4 = (r3 + r4)|0;
+ r11 = (r3 + r11)|0;
+ r12 = (r3 + r12)|0;
+ if(r13 ==59) //_LBB703_37
+{
+continue _45;
+}
+else{
+ r4 = 0;
+ if(r13 ==0) //_LBB703_37
+{
+continue _45;
+}
+else{
+ r13 = heapU8[r9+1];
+ if(r13 ==59) //_LBB703_36
+{
+break _101;
+}
+else{
+ r4 = 0;
+ if(r13 ==0) //_LBB703_37
+{
+continue _45;
+}
+else{
+ r13 = heapU8[r9+2];
+ r4 = r12;
+ if(r13 ==59) //_LBB703_37
+{
+continue _45;
+}
+else{
+ r4 = 0;
+ if(r13 ==0) //_LBB703_37
+{
+continue _45;
+}
+else{
+ r12 = heapU8[r9+3];
+ r4 = r11;
+ if(r12 ==59) //_LBB703_37
+{
+continue _45;
+}
+else{
+ r4 = 0;
+ if(r12 ==0) //_LBB703_37
+{
+continue _45;
+}
+else{
+ r10 = (r10 + 1)|0;
+ r9 = (r9 + 4)|0;
+}
+}
+}
+}
+}
+}
+}
+}
+}
+ r4 = (r9 + 1)|0;
+continue _45;
+}
+else{
+__label__ = 70;
+break _45;
+}
+}
+}
+switch(__label__ ){//multiple entries
+case 74:
+ r1 = heap32[(r11+1)];
+ if(r1 ==r5) //_LBB703_81
+{
+__label__ = 93;
+break _39;
+}
+else{
+ if(r1 !=0) //_LBB703_82
+{
+ heap32[(g0)] = r1;
+ _ZdaPv(i7);
+__label__ = 93;
+break _39;
+}
+else{
+__label__ = 93;
+break _39;
+}
+}
+break;
+case 70:
+ r0 = heap32[(r11+1)];
+ if(r0 ==r5) //_LBB703_78
+{
+__label__ = 73;
+}
+else{
+ if(r0 ==0) //_LBB703_78
+{
+__label__ = 73;
+}
+else{
+ heap32[(g0)] = r0;
+ _ZdaPv(i7);
+__label__ = 73;
+}
+}
+break;
+}
+break;
+}
+} while(0);
+_119: do {
+if (__label__ == 93){
+ r1 = r0 >> 2;
+ r2 = heap32[(r1+1)];
+ r4 = heapU8[r2];
+ if(r4 ==0) //_LBB703_117
+{
+ heap32[(g0)] = 0;
+ heap32[(g0+1)] = r3;
+ heap32[(g0+2)] = r0;
+ _ZN4__rw16__rw_locale_nameEiPKcRNS_14__rw_pod_arrayIcLj256EEE(i7);
+ r0 = r_g0;
+ if(r0 ==0) //_LBB703_78
+{
+break _119;
+}
+}
+else{
+ r3 = r7 & 255;
+if(!(r3 ==0)) //_LBB703_118
+{
+ r3 = 0;
+ r4 = r2;
+_125: while(true){
+ r5 = r3 << 2;
+ r6 = heapU8[r4];
+ if(r6 !=59) //_LBB703_104
+{
+ if(r6 !=0) //_LBB703_106
+{
+ r6 = heapU8[r4+1];
+ if(r6 ==59) //_LBB703_115
+{
+__label__ = 109;
+break _125;
+}
+else{
+ if(r6 ==0) //_LBB703_105
+{
+__label__ = 99;
+break _125;
+}
+else{
+ r6 = heapU8[r4+2];
+ if(r6 !=59) //_LBB703_110
+{
+ if(r6 ==0) //_LBB703_105
+{
+__label__ = 99;
+break _125;
+}
+else{
+ r6 = heapU8[r4+3];
+ if(r6 !=59) //_LBB703_113
+{
+ if(r6 ==0) //_LBB703_105
+{
+__label__ = 99;
+break _125;
+}
+else{
+ r3 = (r3 + 1)|0;
+ r4 = (r4 + 4)|0;
+}
+}
+else{
+__label__ = 106;
+break _125;
+}
+}
+}
+else{
+__label__ = 103;
+break _125;
+}
+}
+}
+}
+else{
+__label__ = 99;
+break _125;
+}
+}
+else{
+__label__ = 97;
+break _125;
+}
+}
+switch(__label__ ){//multiple entries
+case 109:
+ r3 = (r4 + 1)|0;
+break;
+case 99:
+ r3 = 0;
+break;
+case 97:
+ r3 = (r2 + r5)|0;
+break;
+case 106:
+ r3 = r5 | 3;
+ r3 = (r2 + r3)|0;
+break;
+case 103:
+ r3 = r5 | 2;
+ r3 = (r2 + r3)|0;
+break;
+}
+ r3 = (r3 - r2)|0;
+ heap32[(r1+1)] = r2;
+ heap32[(r1)] = r3;
+ r3 = _2E_str26;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r3;
+ heap32[(g0+2)] = 1;
+ _ZN4__rw14__rw_pod_arrayIcLj256EE6appendEPKcj(i7);
+}
+}
+ r0 = heap32[(r1+1)];
+ r_g0 = r0;
+ return;
+}
+} while(0);
+ r0 = 0;
+ r_g0 = r0;
+ return;
+}
+
+function cmplocales(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = heap32[(fp+1)];
+ r0 = r0 >> 2;
+ r1 = r1 >> 2;
+ r0 = heap32[(r0)];
+ r1 = heap32[(r1)];
+ r1 = r1 >> 2;
+ r0 = r0 >> 2;
+ r1 = heap32[(r1+38)];
+ r0 = heap32[(r0+38)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ strcmp(i7);
+ return;
+}
+
+function _ZN4__rw11__rw_localeD2Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ r2 = heap32[(r1+38)];
+ r3 = (r0 + 112)|0;
+ if(r2 ==r3) //_LBB705_2
+{
+__label__ = 2;
+}
+else{
+ if(r2 !=0) //_LBB705_3
+{
+ r3 = 0;
+ heap32[(g0)] = r2;
+ _ZdaPv(i7);
+__label__ = 4;
+}
+else{
+__label__ = 2;
+}
+}
+if (__label__ == 2){
+ r3 = 0;
+}
+_6: while(true){
+ r2 = r3 << 2;
+ r2 = (r0 - r2)|0;
+ r2 = r2 >> 2;
+ r4 = 0;
+ r2 = heap32[(r2)];
+if(!(r2 ==0)) //_LBB705_10
+{
+ r5 = r2 >> 2;
+ r6 = heap32[(r5+5)];
+ if(r6 ==0) //_LBB705_7
+{
+ r2 = heap32[(r5+6)];
+ r2 = (r2 + -1)|0;
+ heap32[(r5+6)] = r2;
+if(!(r2 !=0)) //_LBB705_10
+{
+ r2 = (r4 - r3)|0;
+ r2 = r2 << 2;
+ r2 = (r0 + r2)|0;
+ r2 = r2 >> 2;
+ r2 = heap32[(r2)];
+if(!(r2 ==0)) //_LBB705_10
+{
+ r5 = r2 >> 2;
+ r5 = heap32[(r5)];
+ r5 = r5 >> 2;
+ r5 = heap32[(r5+1)];
+ heap32[(g0)] = r2;
+ __FUNCTION_TABLE__[(r5)>>2](i7);
+}
+}
+}
+else{
+ r5 = heap32[(r5+1)];
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = r6;
+ heap32[(g0+2)] = r5;
+ heap32[(g0+3)] = 0;
+ _ZN4__rw10__rw_facet9_C_manageEPS0_NS0_13_C_facet_typeEPKcPFS1_jS4_E(i7);
+}
+}
+ r3 = (r3 + -1)|0;
+ if(r3 !=-26) //_LBB705_4
+{
+continue _6;
+}
+else{
+break _6;
+}
+}
+ r0 = heap32[(r1+26)];
+ r2 = heap32[(r1+27)];
+_17: do {
+if(!(r2 ==0)) //_LBB705_13
+{
+_18: while(true){
+ r2 = r4 << 2;
+ r0 = (r0 + r2)|0;
+ r0 = r0 >> 2;
+ r0 = heap32[(r0)];
+ r0 = r0 >> 2;
+ r3 = heap32[(r0+6)];
+ r3 = (r3 + -1)|0;
+ heap32[(r0+6)] = r3;
+if(!(r3 !=0)) //_LBB705_17
+{
+ r0 = heap32[(r1+26)];
+ r0 = (r0 + r2)|0;
+ r0 = r0 >> 2;
+ r0 = heap32[(r0)];
+if(!(r0 ==0)) //_LBB705_17
+{
+ r2 = r0 >> 2;
+ r2 = heap32[(r2)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+1)];
+ heap32[(g0)] = r0;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+}
+}
+ r4 = (r4 + 1)|0;
+ r0 = heap32[(r1+26)];
+ r2 = heap32[(r1+27)];
+ if(r4 !=r2) //_LBB705_14
+{
+continue _18;
+}
+else{
+break _17;
+}
+}
+}
+} while(0);
+if(!(r0 ==0)) //_LBB705_20
+{
+ heap32[(g0)] = r0;
+ _ZdaPv(i7);
+}
+ return;
+}
+
+function _ZN4__rw11__rw_localeC2EPKc(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+var __label__ = 0;
+ i7 = sp + -280;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ heap32[(r1+26)] = 0;
+ heap32[(r1+27)] = 0;
+ heap32[(r1+39)] = 1;
+ r2 = heap32[(fp+1)];
+ heap32[(r1+40)] = 0;
+ heap32[(r1+41)] = 0;
+ r3 = heapU8[r2];
+ if(r3 ==0) //_LBB706_2
+{
+ r3 = sp + -264;
+ r4 = 0;
+ r5 = r3 >> 2;
+ r6 = (r0 + 112)|0;
+ heap8[sp+-256] = r4;
+ heap32[(r5+1)] = r6;
+ heap32[(fp+-66)] = 0;
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r2;
+ r2 = (r3 + 8)|0;
+ _ZN4__rwL16__rw_expand_nameERNS_14__rw_pod_arrayIcLj256EEEPKc(i7);
+ r3 = r_g0;
+ heap32[(r1+38)] = r3;
+ heap32[(r5+1)] = r2;
+}
+else{
+ r3 = 1;
+_5: while(true){
+ r4 = (r3 + 1)|0;
+ r5 = heapU8[r2+r3];
+ r3 = r4;
+if(!(r5 !=0)) //_LBB706_4
+{
+break _5;
+}
+}
+ if(uint(r4) >uint(39)) //_LBB706_7
+{
+ heap32[(g0)] = r4;
+ _Znaj(i7);
+ r3 = r_g0;
+}
+else{
+ r3 = (r0 + 112)|0;
+}
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r2;
+ heap32[(g0+2)] = r4;
+ memcpy(i7);
+ heap32[(r1+38)] = r3;
+}
+ r2 = 0;
+ heap32[(r1+40)] = 67108863;
+ heap32[(r1+41)] = 0;
+_13: while(true){
+ r4 = (r3 - r2)|0;
+ r5 = heapU8[r4];
+ if(r5 ==0) //_LBB706_43
+{
+__label__ = 41;
+break _13;
+}
+else{
+ if(r5 ==59) //_LBB706_20
+{
+__label__ = 20;
+break _13;
+}
+else{
+ r5 = heapU8[r4+1];
+ if(r5 ==0) //_LBB706_43
+{
+__label__ = 41;
+break _13;
+}
+else{
+ if(r5 !=59) //_LBB706_15
+{
+ r5 = heapU8[r4+2];
+ if(r5 ==0) //_LBB706_43
+{
+__label__ = 41;
+break _13;
+}
+else{
+ if(r5 ==59) //_LBB706_14
+{
+__label__ = 14;
+break _13;
+}
+else{
+ r4 = heapU8[r4+3];
+ if(r4 ==0) //_LBB706_43
+{
+__label__ = 41;
+break _13;
+}
+else{
+ if(r4 ==59) //_LBB706_14
+{
+__label__ = 14;
+break _13;
+}
+else{
+ r2 = (r2 + -4)|0;
+continue _13;
+}
+}
+}
+}
+}
+else{
+__label__ = 14;
+break _13;
+}
+}
+}
+}
+}
+if (__label__ == 20){
+ if(r3 ==r2) //_LBB706_43
+{
+__label__ = 41;
+}
+else{
+__label__ = 14;
+}
+}
+_25: do {
+switch(__label__ ){//multiple entries
+case 41:
+ r2 = heapU8[r3];
+if(!(r2 !=67)) //_LBB706_45
+{
+ r2 = heapU8[r3+1];
+ if(r2 ==0) //_LBB706_46
+{
+break _25;
+}
+}
+ heap32[(r1+41)] = 67108863;
+break;
+case 14:
+ r2 = 0;
+ r4 = r2;
+_31: while(true){
+ r5 = heapU8[r3];
+ if(r5 ==0) //_LBB706_46
+{
+break _25;
+}
+else{
+ if(r2 !=-6) //_LBB706_21
+{
+ r5 = r5 & 255;
+ if(r5 !=67) //_LBB706_24
+{
+__label__ = 23;
+}
+else{
+ r5 = heapU8[r3+1];
+ if(r5 !=59) //_LBB706_24
+{
+__label__ = 23;
+}
+else{
+__label__ = 24;
+}
+}
+if (__label__ == 23){
+ r5 = (r2 * -3)|0;
+ r6 = _ZN4__rw9__rw_catsE;
+ r5 = r5 << 2;
+ r5 = (r6 + r5)|0;
+ r5 = r5 >> 2;
+ r5 = heap32[(r5+2)];
+ r4 = r5 | r4;
+ heap32[(r1+41)] = r4;
+}
+ r5 = 0;
+ r6 = r3;
+_40: while(true){
+ r7 = heapU8[r6];
+ if(r7 ==0) //_LBB706_46
+{
+break _25;
+}
+else{
+ if(r7 ==59) //_LBB706_37
+{
+__label__ = 36;
+break _40;
+}
+else{
+ r7 = heapU8[r6+1];
+ if(r7 ==0) //_LBB706_46
+{
+break _25;
+}
+else{
+ if(r7 ==59) //_LBB706_39
+{
+__label__ = 37;
+break _40;
+}
+else{
+ r7 = heapU8[r6+2];
+ if(r7 ==0) //_LBB706_46
+{
+break _25;
+}
+else{
+ r8 = r5 << 2;
+ if(r7 !=59) //_LBB706_33
+{
+ r7 = heapU8[r6+3];
+ if(r7 ==0) //_LBB706_46
+{
+break _25;
+}
+else{
+ if(r7 !=59) //_LBB706_36
+{
+ r5 = (r5 + 1)|0;
+ r6 = (r6 + 4)|0;
+}
+else{
+__label__ = 34;
+break _40;
+}
+}
+}
+else{
+__label__ = 31;
+break _40;
+}
+}
+}
+}
+}
+}
+}
+switch(__label__ ){//multiple entries
+case 36:
+ if(r6 ==0) //_LBB706_46
+{
+break _25;
+}
+break;
+case 37:
+ r6 = (r6 + 1)|0;
+break;
+case 34:
+ r5 = r8 | 3;
+ r6 = (r3 + r5)|0;
+break;
+case 31:
+ r5 = r8 | 2;
+ r6 = (r3 + r5)|0;
+break;
+}
+ r3 = (r6 + 1)|0;
+ r2 = (r2 + -1)|0;
+continue _31;
+}
+else{
+break _25;
+}
+}
+}
+break;
+}
+} while(0);
+ r1 = 104;
+ r3 = 0;
+_57: while(true){
+ r2 = (r1 + -1)|0;
+ r1 = (r0 - r1)|0;
+ heap8[r1+104] = r3;
+ r1 = r2;
+ if(r2 !=0) //_LBB706_47
+{
+continue _57;
+}
+else{
+break _57;
+}
+}
+ return;
+}
+
+function _ZN4__rw11__rw_locale9_C_manageEPS0_PKc(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+ var r13;
+ var r14;
+var __label__ = 0;
+ i7 = sp + -280;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ r1 = heap32[(fp)];
+ if(r0 !=0) //_LBB707_9
+{
+ r2 = heapU8[r0];
+ if(r2 ==67) //_LBB707_11
+{
+ r2 = heapU8[r0+1];
+ r3 = 0;
+ r2 = r2 != r3;
+}
+else{
+ r2 = 1;
+}
+ r3 = sp + -264;
+ r4 = (r3 + 8)|0;
+ r5 = _2E_str538;
+ r6 = r3 >> 2;
+ heap32[(fp+-66)] = 0;
+ r0 = r2 != 0 ? r0 : r5;
+ r7 = 0;
+ heap32[(r6+1)] = r4;
+ heap8[sp+-256] = r7;
+ if(r1 !=0) //_LBB707_14
+{
+__label__ = 19;
+}
+else{
+ if(r2 != 0) //_LBB707_15
+{
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r0;
+ _ZN4__rwL16__rw_expand_nameERNS_14__rw_pod_arrayIcLj256EEEPKc(i7);
+ r0 = r_g0;
+ if(r0 !=0) //_LBB707_18
+{
+ r2 = heapU8[r0];
+ if(r2 ==67) //_LBB707_20
+{
+ r2 = heapU8[r0+1];
+ if(r2 !=0) //_LBB707_19
+{
+__label__ = 19;
+}
+else{
+ r0 = r5;
+__label__ = 19;
+}
+}
+else{
+__label__ = 19;
+}
+}
+else{
+__label__ = 15;
+}
+}
+else{
+__label__ = 19;
+}
+}
+_14: do {
+if (__label__ == 19){
+ r2 = _ZZN4__rw11__rw_locale9_C_manageEPS0_PKcE9n_locales;
+ r3 = _ZZN4__rw11__rw_locale9_C_manageEPS0_PKcE7locales;
+ r2 = r2 >> 2;
+ r3 = r3 >> 2;
+ r5 = heap32[(r2)];
+ r8 = heap32[(r3)];
+ if(r1 ==0) //_LBB707_24
+{
+ r7 = r5;
+_18: while(true){
+ r9 = r7;
+ if(r9 ==0) //_LBB707_53
+{
+__label__ = 49;
+break _18;
+}
+else{
+ r1 = r9 << 1;
+ r10 = r1 & -4;
+ r11 = (r8 + r10)|0;
+ r1 = r11 >> 2;
+ r1 = heap32[(r1)];
+ r12 = r1 >> 2;
+ r7 = heap32[(r12+38)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r7;
+ strcmp(i7);
+ r13 = r_g0;
+ r7 = r9 >>> 1;
+ if(r13 <0) //_LBB707_50
+{
+__label__ = 46;
+}
+else{
+ if(r13 <1) //_LBB707_51
+{
+__label__ = 47;
+break _18;
+}
+else{
+ r1 = (r10 + r8)|0;
+ r9 = (r9 + -1)|0;
+ r8 = (r1 + 4)|0;
+ r7 = (r9 - r7)|0;
+}
+}
+}
+}
+if (__label__ == 47){
+if(!(r11 ==0)) //_LBB707_53
+{
+ r0 = heap32[(r12+39)];
+ r0 = (r0 + 1)|0;
+ heap32[(r12+39)] = r0;
+__label__ = 65;
+break _14;
+}
+}
+ r1 = _ZZN4__rw11__rw_locale9_C_manageEPS0_PKcE14locale_bufsize;
+ r1 = r1 >> 2;
+ r7 = heap32[(r1)];
+if(!(r5 !=r7)) //_LBB707_59
+{
+ r5 = r5 << 3;
+ heap32[(g0)] = r5;
+ _Znaj(i7);
+ r5 = r_g0;
+ r7 = heap32[(r3)];
+ r8 = heap32[(r2)];
+ r8 = r8 << 2;
+ heap32[(g0)] = r5;
+ heap32[(g0+1)] = r7;
+ heap32[(g0+2)] = r8;
+ memcpy(i7);
+ r8 = _ZZN4__rw11__rw_locale9_C_manageEPS0_PKcE10locale_buf;
+if(!(r7 ==r8)) //_LBB707_58
+{
+if(!(r7 ==0)) //_LBB707_58
+{
+ heap32[(g0)] = r7;
+ _ZdaPv(i7);
+}
+}
+ heap32[(r3)] = r5;
+ r5 = heap32[(r1)];
+ r5 = r5 << 1;
+ heap32[(r1)] = r5;
+}
+ r1 = heapU8[r0];
+ if(r1 !=67) //_LBB707_65
+{
+__label__ = 61;
+}
+else{
+ r1 = heapU8[r0+1];
+ if(r1 !=0) //_LBB707_65
+{
+__label__ = 61;
+}
+else{
+ r1 = _ZZN4__rw11__rw_locale9_C_manageEPS0_PKcE7classic;
+ r5 = r1 >> 2;
+ r1 = heap32[(r5)];
+ if(r1 !=0) //_LBB707_64
+{
+ r0 = _ZZN4__rw11__rw_locale9_C_manageEPS0_PKcE12classic_body;
+ r0 = r0 >> 2;
+ r5 = heap32[(r0+39)];
+ r5 = (r5 + 1)|0;
+ heap32[(r0+39)] = r5;
+__label__ = 63;
+}
+else{
+ r1 = _ZZN4__rw11__rw_locale9_C_manageEPS0_PKcE12classic_body;
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r0;
+ _ZN4__rw11__rw_localeC2EPKc(i7);
+ heap32[(r5)] = r1;
+__label__ = 63;
+}
+}
+}
+if (__label__ == 61){
+ heap32[(g0)] = 172;
+ _Znwj(i7);
+ r1 = r_g0;
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r0;
+ _ZN4__rw11__rw_localeC2EPKc(i7);
+}
+ r0 = heap32[(r2)];
+ r3 = heap32[(r3)];
+ r5 = r0 << 2;
+ r5 = (r3 + r5)|0;
+ r5 = r5 >> 2;
+ r7 = (r0 + 1)|0;
+ heap32[(r5)] = r1;
+ heap32[(r2)] = r7;
+ r2 = (r0 + -1)|0;
+ if(uint(r2) <uint(2147483645)) //_LBB707_69
+{
+ r2 = cmplocales__index__;
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = 0;
+ heap32[(g0+2)] = r0;
+ heap32[(g0+3)] = r2;
+ quicksort(i7);
+__label__ = 65;
+}
+else{
+__label__ = 65;
+}
+}
+else{
+ r9 = r5;
+ r10 = r8;
+_48: while(true){
+ r11 = r9;
+ if(r11 ==0) //_LBB707_46
+{
+__label__ = 42;
+break _48;
+}
+else{
+ r9 = r11 << 1;
+ r12 = r9 & -4;
+ r13 = (r10 + r12)|0;
+ r9 = r13 >> 2;
+ r9 = heap32[(r9)];
+ r9 = r9 >> 2;
+ r9 = heap32[(r9+38)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r9;
+ strcmp(i7);
+ r14 = r_g0;
+ r9 = r11 >>> 1;
+ if(r14 <0) //_LBB707_28
+{
+__label__ = 25;
+}
+else{
+ if(r14 <1) //_LBB707_29
+{
+__label__ = 26;
+break _48;
+}
+else{
+ r10 = (r12 + r10)|0;
+ r11 = (r11 + -1)|0;
+ r10 = (r10 + 4)|0;
+ r9 = (r11 - r9)|0;
+}
+}
+}
+}
+if (__label__ == 26){
+if(!(r13 ==0)) //_LBB707_46
+{
+ r1 = (r13 - r8)|0;
+ r0 = r1 & -4;
+ r9 = (r8 + r0)|0;
+ r9 = r9 >> 2;
+ r9 = heap32[(r9)];
+ r10 = r9 >> 2;
+ r11 = heap32[(r10+39)];
+ r11 = (r11 + -1)|0;
+ heap32[(r10+39)] = r11;
+ if(r11 !=0) //_LBB707_17
+{
+__label__ = 15;
+break _14;
+}
+else{
+ r1 = r1 >> 2;
+ r11 = (r5 + -1)|0;
+ heap32[(r2)] = r11;
+ if(uint(r11) >uint(3)) //_LBB707_36
+{
+__label__ = 33;
+}
+else{
+ r2 = _ZZN4__rw11__rw_locale9_C_manageEPS0_PKcE10locale_buf;
+ if(r8 ==r2) //_LBB707_36
+{
+__label__ = 33;
+}
+else{
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = r8;
+ heap32[(g0+2)] = r0;
+ r0 = r1 << 2;
+ r5 = (r0 + r8)|0;
+ r1 = (r11 - r1)|0;
+ memcpy(i7);
+ r0 = (r2 + r0)|0;
+ r5 = (r5 + 4)|0;
+ r1 = r1 << 2;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r5;
+ heap32[(g0+2)] = r1;
+ memcpy(i7);
+if(!(r8 ==0)) //_LBB707_35
+{
+ heap32[(g0)] = r8;
+ _ZdaPv(i7);
+}
+ r1 = _ZZN4__rw11__rw_locale9_C_manageEPS0_PKcE14locale_bufsize;
+ r1 = r1 >> 2;
+ heap32[(r3)] = r2;
+ heap32[(r1)] = 8;
+__label__ = 36;
+}
+}
+_63: do {
+if (__label__ == 33){
+ r0 = (r11 - r1)|0;
+ r0 = r0 << 2;
+if(!(r0 ==0)) //_LBB707_39
+{
+ r0 = r5 << 2;
+ r1 = r1 << 2;
+ r0 = (r0 + -4)|0;
+ r2 = (r1 + r8)|0;
+ r1 = (r0 - r1)|0;
+ r0 = (r2 + 4)|0;
+_66: while(true){
+ r2 = heapU8[r0];
+ r1 = (r1 + -1)|0;
+ r3 = (r0 + 1)|0;
+ heap8[r0+-4] = r2;
+ r0 = r3;
+if(!(r1 !=0)) //_LBB707_38
+{
+break _63;
+}
+}
+}
+}
+} while(0);
+ r1 = heap32[(r10+38)];
+ r0 = heapU8[r1];
+ if(r0 ==67) //_LBB707_41
+{
+ r1 = heapU8[r1+1];
+ r7 = 0;
+ r7 = r1 == r7;
+}
+ if(r7 != 0) //_LBB707_17
+{
+__label__ = 15;
+break _14;
+}
+else{
+ if(r9 ==0) //_LBB707_17
+{
+__label__ = 15;
+break _14;
+}
+else{
+ heap32[(g0)] = r9;
+ _ZN4__rw11__rw_localeD2Ev(i7);
+ heap32[(g0)] = r9;
+ r1 = 0;
+ _ZdlPv(i7);
+__label__ = 65;
+break _14;
+}
+}
+}
+}
+}
+ r0 = r1 >> 2;
+ r2 = heap32[(r0+39)];
+ r1 = 0;
+ r2 = (r2 + -1)|0;
+ heap32[(r0+39)] = r2;
+__label__ = 65;
+}
+}
+} while(0);
+if (__label__ == 15){
+ r1 = 0;
+}
+ r0 = heap32[(r6+1)];
+if(!(r0 ==r4)) //_LBB707_73
+{
+if(!(r0 ==0)) //_LBB707_73
+{
+ heap32[(g0)] = r0;
+ _ZdaPv(i7);
+}
+}
+ r_g0 = r1;
+ return;
+}
+else{
+ r0 = _ZZN4__rw11__rw_locale9_C_manageEPS0_PKcE6global;
+ r0 = r0 >> 2;
+ r2 = heap32[(r0)];
+_84: do {
+ if(r2 ==0) //_LBB707_3
+{
+ r3 = _ZZN4__rw11__rw_locale9_C_manageEPS0_PKcE5ginit;
+ r3 = r3 >> 2;
+ r4 = heap32[(r3)];
+ if(r4 !=0) //_LBB707_5
+{
+_87: while(true){
+ r4 = heap32[(r3)];
+if(!(r4 <1000)) //_LBB707_5
+{
+break _84;
+}
+}
+}
+else{
+ r2 = (r4 + 1)|0;
+ heap32[(r3)] = r2;
+ r2 = _2E_str538;
+ heap32[(g0)] = 0;
+ heap32[(g0+1)] = r2;
+ _ZN4__rw11__rw_locale9_C_manageEPS0_PKc(i7);
+ r2 = r_g0;
+ heap32[(r0)] = r2;
+ r4 = heap32[(r3)];
+ r4 = (r4 + 1000)|0;
+ heap32[(r3)] = r4;
+}
+}
+} while(0);
+ if(r1 ==0) //_LBB707_8
+{
+ r0 = r2 >> 2;
+ r1 = heap32[(r0+39)];
+ r1 = (r1 + 1)|0;
+ heap32[(r0+39)] = r1;
+ r_g0 = r2;
+ return;
+}
+else{
+ r3 = r1 >> 2;
+ r4 = heap32[(r3+39)];
+ r4 = (r4 + 1)|0;
+ heap32[(r3+39)] = r4;
+ heap32[(r0)] = r1;
+ r_g0 = r2;
+ return;
+}
+}
+}
+
+function _ZN4__rw11__rw_locale11_C_get_bodyEPS0_S1_PKciPKNS_10__rw_facetE(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+var __label__ = 0;
+ i7 = sp + -304;var g0 = i7>>2; // save stack
+ r0 = sp + -264;
+ r1 = (r0 + 8)|0;
+ r2 = r0 >> 2;
+ heap32[(fp+-66)] = 0;
+ r3 = 0;
+ heap32[(r2+1)] = r1;
+ heap8[sp+-256] = r3;
+ r4 = _2E_str538;
+ r5 = _2E_str292167;
+ heap32[(g0)] = r4;
+ heap32[(g0+1)] = r5;
+ heap32[(g0+2)] = 3;
+ strncmp(i7);
+ r5 = r_g0;
+_1: do {
+ if(r5 ==0) //_LBB708_2
+{
+ r4 = sp + -288;
+ r5 = r4 >> 2;
+ heap32[(fp+-72)] = 0;
+ heap32[(r5+1)] = 0;
+ heap32[(r5+2)] = 0;
+ heap32[(r5+3)] = 0;
+ r6 = 4;
+ heap32[(r5+4)] = 0;
+ heap32[(r5+5)] = 0;
+_3: while(true){
+ r6 = (r6 + -4)|0;
+if(!(r6 !=0)) //_LBB708_3
+{
+break _3;
+}
+}
+ r5 = _2E_str538;
+_6: while(true){
+ r6 = heapU8[r5];
+ if(r6 ==0) //_LBB708_48
+{
+__label__ = 44;
+break _6;
+}
+else{
+ r6 = r3;
+ r7 = r3;
+_9: while(true){
+ r8 = (r5 + r6)|0;
+ r9 = heapU8[r5+r6];
+ if(r9 ==59) //_LBB708_17
+{
+__label__ = 16;
+break _9;
+}
+else{
+ if(r9 !=0) //_LBB708_8
+{
+ r9 = heapU8[r8+1];
+ if(r9 ==0) //_LBB708_7
+{
+__label__ = 6;
+break _9;
+}
+else{
+ if(r9 ==59) //_LBB708_21
+{
+__label__ = 18;
+break _9;
+}
+else{
+ r9 = heapU8[r8+2];
+ if(r9 ==0) //_LBB708_7
+{
+__label__ = 6;
+break _9;
+}
+else{
+ r10 = r7 << 2;
+ if(r9 !=59) //_LBB708_13
+{
+ r8 = heapU8[r8+3];
+ if(r8 ==0) //_LBB708_7
+{
+__label__ = 6;
+break _9;
+}
+else{
+ if(r8 !=59) //_LBB708_16
+{
+ r7 = (r7 + 1)|0;
+ r6 = (r6 + 4)|0;
+}
+else{
+__label__ = 14;
+break _9;
+}
+}
+}
+else{
+__label__ = 11;
+break _9;
+}
+}
+}
+}
+}
+else{
+__label__ = 6;
+break _9;
+}
+}
+}
+_19: do {
+switch(__label__ ){//multiple entries
+case 16:
+ if(r8 ==0) //_LBB708_7
+{
+__label__ = 6;
+break _19;
+}
+else{
+__label__ = 19;
+break _19;
+}
+break;
+case 18:
+ r8 = (r8 + 1)|0;
+__label__ = 19;
+break _19;
+break;
+case 14:
+ r6 = r10 | 3;
+ r8 = (r5 + r6)|0;
+__label__ = 19;
+break _19;
+break;
+case 11:
+ r6 = r10 | 2;
+ r8 = (r5 + r6)|0;
+__label__ = 19;
+break;
+}
+} while(0);
+_24: do {
+if (__label__ == 6){
+ r6 = r5;
+_26: while(true){
+ r8 = (r6 + 1)|0;
+ r7 = heapU8[r6+1];
+ r6 = r8;
+if(!(r7 !=0)) //_LBB708_19
+{
+break _24;
+}
+}
+}
+} while(0);
+ r6 = 0;
+ r7 = r6;
+_29: while(true){
+ r9 = (r5 + r6)|0;
+ r10 = heapU8[r5+r6];
+ if(r10 ==61) //_LBB708_35
+{
+__label__ = 32;
+break _29;
+}
+else{
+ if(r10 !=0) //_LBB708_26
+{
+ r10 = heapU8[r9+1];
+ if(r10 ==0) //_LBB708_25
+{
+__label__ = 22;
+break _6;
+}
+else{
+ if(r10 ==61) //_LBB708_37
+{
+__label__ = 33;
+break _29;
+}
+else{
+ r10 = heapU8[r9+2];
+ if(r10 ==0) //_LBB708_25
+{
+__label__ = 22;
+break _6;
+}
+else{
+ r11 = r7 << 2;
+ if(r10 !=61) //_LBB708_31
+{
+ r9 = heapU8[r9+3];
+ if(r9 ==0) //_LBB708_25
+{
+__label__ = 22;
+break _6;
+}
+else{
+ if(r9 !=61) //_LBB708_34
+{
+ r7 = (r7 + 1)|0;
+ r6 = (r6 + 4)|0;
+}
+else{
+__label__ = 30;
+break _29;
+}
+}
+}
+else{
+__label__ = 27;
+break _29;
+}
+}
+}
+}
+}
+else{
+__label__ = 22;
+break _6;
+}
+}
+}
+switch(__label__ ){//multiple entries
+case 32:
+ if(r9 ==0) //_LBB708_25
+{
+__label__ = 22;
+break _6;
+}
+break;
+case 33:
+ r9 = (r9 + 1)|0;
+break;
+case 30:
+ r6 = r11 | 3;
+ r9 = (r5 + r6)|0;
+break;
+case 27:
+ r6 = r11 | 2;
+ r9 = (r5 + r6)|0;
+break;
+}
+ r6 = (r9 - r5)|0;
+ r7 = 0;
+_45: while(true){
+ if(r7 !=-6) //_LBB708_39
+{
+ r10 = (r7 * -3)|0;
+ r11 = _ZN4__rw9__rw_catsE;
+ r10 = r10 << 2;
+ r10 = (r11 + r10)|0;
+ r10 = r10 >> 2;
+ r10 = heap32[(r10+1)];
+ heap32[(g0)] = r10;
+ heap32[(g0+1)] = r5;
+ heap32[(g0+2)] = r6;
+ strncmp(i7);
+ r10 = r_g0;
+ if(r10 !=0) //_LBB708_42
+{
+ r7 = (r7 + -1)|0;
+}
+else{
+__label__ = 36;
+break _45;
+}
+}
+else{
+__label__ = 40;
+break _45;
+}
+}
+if (__label__ == 36){
+ r6 = r7 << 2;
+ r6 = (r4 - r6)|0;
+ r6 = r6 >> 2;
+ r6 = heap32[(r6)];
+ if(r6 !=0) //_LBB708_25
+{
+__label__ = 22;
+break _6;
+}
+else{
+ r6 = 0;
+ r6 = (r6 - r7)|0;
+ r6 = r6 << 2;
+ r6 = (r4 + r6)|0;
+ r6 = r6 >> 2;
+ r7 = (r9 + 1)|0;
+ heap32[(r6)] = r7;
+}
+}
+ r6 = heapU8[r8];
+ r5 = r8;
+ if(r6 ==0) //_LBB708_46
+{
+__label__ = 42;
+}
+else{
+ r5 = (r8 + 1)|0;
+}
+}
+}
+switch(__label__ ){//multiple entries
+case 44:
+ r3 = 0;
+ r5 = r3;
+_56: while(true){
+ if(r5 !=-6) //_LBB708_49
+{
+ r6 = (r3 - r5)|0;
+ r6 = r6 << 2;
+ r6 = (r4 + r6)|0;
+ r6 = r6 >> 2;
+ r7 = heap32[(r6)];
+ if(r7 ==0) //_LBB708_51
+{
+ r7 = _2E_str538;
+ heap32[(r6)] = r7;
+}
+ r6 = 0;
+ r8 = r6;
+_62: while(true){
+ r9 = heapU8[r7+r6];
+ if(r9 ==0) //_LBB708_66
+{
+__label__ = 60;
+break _62;
+}
+else{
+ r10 = (r7 + r6)|0;
+ if(r9 ==59) //_LBB708_64
+{
+__label__ = 59;
+break _62;
+}
+else{
+ r9 = heapU8[r10+1];
+ if(r9 ==0) //_LBB708_66
+{
+__label__ = 60;
+break _62;
+}
+else{
+ if(r9 ==59) //_LBB708_71
+{
+__label__ = 65;
+break _62;
+}
+else{
+ r9 = heapU8[r10+2];
+ if(r9 ==0) //_LBB708_66
+{
+__label__ = 60;
+break _62;
+}
+else{
+ r11 = r8 << 2;
+ if(r9 !=59) //_LBB708_60
+{
+ r10 = heapU8[r10+3];
+ if(r10 ==0) //_LBB708_66
+{
+__label__ = 60;
+break _62;
+}
+else{
+ if(r10 !=59) //_LBB708_63
+{
+ r8 = (r8 + 1)|0;
+ r6 = (r6 + 4)|0;
+}
+else{
+__label__ = 57;
+break _62;
+}
+}
+}
+else{
+__label__ = 54;
+break _62;
+}
+}
+}
+}
+}
+}
+}
+_72: do {
+switch(__label__ ){//multiple entries
+case 59:
+ if(r10 ==0) //_LBB708_66
+{
+__label__ = 60;
+break _72;
+}
+else{
+__label__ = 66;
+break _72;
+}
+break;
+case 65:
+ r10 = (r10 + 1)|0;
+__label__ = 66;
+break _72;
+break;
+case 57:
+ r6 = r11 | 3;
+ r10 = (r7 + r6)|0;
+__label__ = 66;
+break _72;
+break;
+case 54:
+ r6 = r11 | 2;
+ r10 = (r7 + r6)|0;
+__label__ = 66;
+break;
+}
+} while(0);
+if (__label__ == 60){
+ r10 = heapU8[r7];
+_79: do {
+ if(r10 !=0) //_LBB708_68
+{
+ r6 = (r7 + 1)|0;
+ r8 = 0;
+_81: while(true){
+ r10 = (r8 + 1)|0;
+ r9 = heapU8[r6+r8];
+ r8 = r10;
+if(!(r9 !=0)) //_LBB708_69
+{
+break _79;
+}
+}
+}
+else{
+ r10 = 0;
+}
+} while(0);
+ r10 = (r7 + r10)|0;
+}
+ r6 = (r10 - r7)|0;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r7;
+ heap32[(g0+2)] = r6;
+ _ZN4__rw14__rw_pod_arrayIcLj256EE6appendEPKcj(i7);
+ r6 = _2E_str785;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r6;
+ heap32[(g0+2)] = 1;
+ _ZN4__rw14__rw_pod_arrayIcLj256EE6appendEPKcj(i7);
+ r5 = (r5 + -1)|0;
+}
+else{
+break _56;
+}
+}
+ r4 = heap32[(r2+1)];
+ if(r4 ==0) //_LBB708_78
+{
+ heap32[(g0)] = 0;
+ heap32[(g0+1)] = 0;
+ _ZN4__rw11__rw_locale9_C_manageEPS0_PKc(i7);
+ r4 = r_g0;
+__label__ = 73;
+break _1;
+}
+else{
+__label__ = 72;
+break _1;
+}
+break;
+case 22:
+ r4 = 0;
+__label__ = 73;
+break;
+}
+}
+else{
+__label__ = 72;
+}
+} while(0);
+if (__label__ == 72){
+ heap32[(g0)] = 0;
+ heap32[(g0+1)] = r4;
+ _ZN4__rw11__rw_locale9_C_manageEPS0_PKc(i7);
+ r4 = r_g0;
+}
+ r0 = heap32[(r2+1)];
+if(!(r0 ==r1)) //_LBB708_83
+{
+if(!(r0 ==0)) //_LBB708_83
+{
+ heap32[(g0)] = r0;
+ _ZdaPv(i7);
+}
+}
+ r_g0 = r4;
+ return;
+}
+
+function _ZNSt6localeD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+ var r13;
+ var r14;
+ var r15;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r1 = heap32[(r0)];
+ r2 = r1 >> 2;
+ r3 = heap32[(r2+27)];
+_1: do {
+if(!(r3 !=0)) //_LBB709_86
+{
+ r3 = heap32[(r2+40)];
+ r3 = r3 & 67108863;
+if(!(r3 !=67108863)) //_LBB709_86
+{
+ r3 = heap32[(r2+41)];
+ r4 = r3 & 8193;
+if(!(r4 ==0)) //_LBB709_4
+{
+ if(r4 !=8193) //_LBB709_86
+{
+break _1;
+}
+}
+ r4 = r3 & 49158;
+if(!(r4 ==0)) //_LBB709_6
+{
+ if(r4 !=49158) //_LBB709_86
+{
+break _1;
+}
+}
+ r4 = r3 & 983160;
+if(!(r4 ==0)) //_LBB709_8
+{
+ if(r4 !=983160) //_LBB709_86
+{
+break _1;
+}
+}
+ r4 = r3 & 7340928;
+if(!(r4 ==0)) //_LBB709_10
+{
+ if(r4 !=7340928) //_LBB709_86
+{
+break _1;
+}
+}
+ r4 = r3 & 25168896;
+if(!(r4 ==0)) //_LBB709_12
+{
+ if(r4 !=25168896) //_LBB709_86
+{
+break _1;
+}
+}
+ r3 = r3 & 33558528;
+if(!(r3 ==0)) //_LBB709_14
+{
+ if(r3 !=33558528) //_LBB709_86
+{
+break _1;
+}
+}
+ r3 = heap32[(r2+38)];
+ r4 = _2E_str538;
+ r5 = r3 == 0 ? r4 : r3;
+ r6 = heapU8[r5];
+ if(r6 ==59) //_LBB709_16
+{
+ r5 = (r5 + 1)|0;
+}
+ r6 = 0;
+ r7 = r6;
+_25: while(true){
+ r8 = heapU8[r5+r6];
+ if(r8 ==0) //_LBB709_33
+{
+__label__ = 31;
+break _25;
+}
+else{
+ r9 = (r5 + r6)|0;
+ if(r8 ==59) //_LBB709_29
+{
+__label__ = 28;
+break _25;
+}
+else{
+ r8 = heapU8[r9+1];
+ if(r8 ==0) //_LBB709_33
+{
+__label__ = 31;
+break _25;
+}
+else{
+ if(r8 ==59) //_LBB709_31
+{
+__label__ = 29;
+break _25;
+}
+else{
+ r8 = heapU8[r9+2];
+ if(r8 ==0) //_LBB709_33
+{
+__label__ = 31;
+break _25;
+}
+else{
+ r10 = r7 << 2;
+ if(r8 !=59) //_LBB709_25
+{
+ r9 = heapU8[r9+3];
+ if(r9 ==0) //_LBB709_33
+{
+__label__ = 31;
+break _25;
+}
+else{
+ if(r9 !=59) //_LBB709_28
+{
+ r7 = (r7 + 1)|0;
+ r6 = (r6 + 4)|0;
+}
+else{
+__label__ = 26;
+break _25;
+}
+}
+}
+else{
+__label__ = 23;
+break _25;
+}
+}
+}
+}
+}
+}
+}
+_35: do {
+switch(__label__ ){//multiple entries
+case 28:
+ if(r9 ==0) //_LBB709_33
+{
+__label__ = 31;
+break _35;
+}
+else{
+__label__ = 30;
+break _35;
+}
+break;
+case 29:
+ r9 = (r9 + 1)|0;
+__label__ = 30;
+break _35;
+break;
+case 26:
+ r6 = r10 | 3;
+ r9 = (r5 + r6)|0;
+__label__ = 30;
+break _35;
+break;
+case 23:
+ r6 = r10 | 2;
+ r9 = (r5 + r6)|0;
+__label__ = 30;
+break;
+}
+} while(0);
+switch(__label__ ){//multiple entries
+case 31:
+ r6 = heapU8[r5];
+ if(r6 !=0) //_LBB709_35
+{
+ r7 = (r5 + 1)|0;
+ r8 = 0;
+_44: while(true){
+ r6 = (r8 + 1)|0;
+ r9 = heapU8[r7+r8];
+ r8 = r6;
+if(!(r9 !=0)) //_LBB709_36
+{
+break _44;
+}
+}
+ r9 = 0;
+ r7 = r9;
+ r8 = r9;
+}
+else{
+ r9 = 0;
+ r6 = r9;
+ r7 = r9;
+ r8 = r9;
+}
+break;
+case 30:
+ r6 = (r9 - r5)|0;
+ r7 = 0;
+ r8 = r7;
+break;
+}
+_49: while(true){
+ if(r7 !=26) //_LBB709_38
+{
+ r10 = r7 << 2;
+ r10 = (r1 + r10)|0;
+ r10 = r10 >> 2;
+ r10 = heap32[(r10)];
+_52: do {
+ if(r10 !=0) //_LBB709_40
+{
+ r10 = r10 >> 2;
+ r11 = heap32[(r10+7)];
+ r11 = r11 >> 2;
+ r10 = heap32[(r10+1)];
+ r12 = 0;
+ r13 = r10 != r12;
+ r11 = heap32[(r11)];
+ r13 = r13 & 1;
+ r11 = r11 << 1;
+ r11 = r13 | r11;
+ r11 = (r11 + -1)|0;
+ r13 = 53;
+ r11 = uint(r11) < uint(r13) ? r11 : r12;
+ if(r11 >36) //_LBB709_43
+{
+ r11 = (r11 + -37)|0;
+if(!(uint(r11) >uint(8))) //_LBB709_45
+{
+ r13 = 1;
+ r11 = r13 << r11;
+ r11 = r11 & 325;
+ if(r11 !=0) //_LBB709_39
+{
+break _52;
+}
+}
+}
+else{
+if(!(uint(r11) >uint(19))) //_LBB709_45
+{
+ r13 = 1;
+ r11 = r13 << r11;
+ r11 = r11 & 665600;
+ if(r11 !=0) //_LBB709_39
+{
+break _52;
+}
+}
+}
+ r11 = 1;
+ r11 = r11 << r7;
+_60: while(true){
+ if(r9 ==0) //_LBB709_75
+{
+break _60;
+}
+else{
+ r13 = _ZN4__rw9__rw_catsE;
+ r14 = (r8 * 12)|0;
+ r13 = (r13 + r14)|0;
+ r13 = r13 >> 2;
+ r13 = heap32[(r13+2)];
+ r13 = r13 & r11;
+ if(r13 ==0) //_LBB709_46
+{
+ r5 = heapU8[r9];
+ if(r5 ==0) //_LBB709_48
+{
+ if(r3 !=0) //_LBB709_50
+{
+ r8 = 0;
+ r5 = r3;
+}
+else{
+ r8 = 0;
+ r5 = r4;
+}
+}
+else{
+ r5 = (r9 + 1)|0;
+ r8 = (r8 + 1)|0;
+}
+ r6 = heapU8[r5];
+ if(r6 ==59) //_LBB709_53
+{
+ r5 = (r5 + 1)|0;
+}
+ r6 = r12;
+ r13 = r12;
+_74: while(true){
+ r14 = heapU8[r5+r6];
+ if(r14 ==0) //_LBB709_70
+{
+__label__ = 65;
+break _74;
+}
+else{
+ r9 = (r5 + r6)|0;
+ if(r14 ==59) //_LBB709_66
+{
+__label__ = 62;
+break _74;
+}
+else{
+ r14 = heapU8[r9+1];
+ if(r14 ==0) //_LBB709_70
+{
+__label__ = 65;
+break _74;
+}
+else{
+ if(r14 ==59) //_LBB709_68
+{
+__label__ = 63;
+break _74;
+}
+else{
+ r14 = heapU8[r9+2];
+ if(r14 ==0) //_LBB709_70
+{
+__label__ = 65;
+break _74;
+}
+else{
+ r15 = r13 << 2;
+ if(r14 !=59) //_LBB709_62
+{
+ r9 = heapU8[r9+3];
+ if(r9 ==0) //_LBB709_70
+{
+__label__ = 65;
+break _74;
+}
+else{
+ if(r9 !=59) //_LBB709_65
+{
+ r13 = (r13 + 1)|0;
+ r6 = (r6 + 4)|0;
+}
+else{
+__label__ = 60;
+break _74;
+}
+}
+}
+else{
+__label__ = 57;
+break _74;
+}
+}
+}
+}
+}
+}
+}
+_84: do {
+switch(__label__ ){//multiple entries
+case 62:
+ if(r9 ==0) //_LBB709_70
+{
+__label__ = 65;
+break _84;
+}
+else{
+__label__ = 64;
+break _84;
+}
+break;
+case 63:
+ r9 = (r9 + 1)|0;
+__label__ = 64;
+break _84;
+break;
+case 60:
+ r6 = r15 | 3;
+ r9 = (r5 + r6)|0;
+__label__ = 64;
+break _84;
+break;
+case 57:
+ r6 = r15 | 2;
+ r9 = (r5 + r6)|0;
+__label__ = 64;
+break;
+}
+} while(0);
+switch(__label__ ){//multiple entries
+case 65:
+ r9 = _2E_str26;
+ r6 = 0;
+ r13 = heapU8[r5];
+ if(r13 ==0) //_LBB709_73
+{
+continue _60;
+}
+else{
+ r13 = (r5 + 1)|0;
+ r14 = 0;
+_92: while(true){
+ r6 = (r14 + 1)|0;
+ r9 = _2E_str26;
+ r15 = heapU8[r13+r14];
+ r14 = r6;
+if(!(r15 !=0)) //_LBB709_72
+{
+continue _60;
+}
+}
+}
+break;
+case 64:
+ r6 = (r9 - r5)|0;
+break;
+}
+}
+else{
+break _60;
+}
+}
+}
+ r11 = _2E_str538;
+ r10 = r10 == 0 ? r11 : r10;
+ r11 = heapU8[r10];
+_96: do {
+ if(r11 !=0) //_LBB709_77
+{
+ r12 = (r10 + 1)|0;
+ r13 = 0;
+_98: while(true){
+ r11 = (r13 + 1)|0;
+ r14 = heapU8[r12+r13];
+ r13 = r11;
+if(!(r14 !=0)) //_LBB709_78
+{
+break _96;
+}
+}
+}
+else{
+ r11 = 0;
+}
+} while(0);
+ if(r11 !=r6) //_LBB709_86
+{
+break _1;
+}
+else{
+ r11 = 0;
+_103: while(true){
+ r12 = (r6 + r11)|0;
+ if(r12 !=0) //_LBB709_81
+{
+ r12 = (r5 - r11)|0;
+ r13 = (r10 - r11)|0;
+ r11 = (r11 + -1)|0;
+ r12 = heapU8[r12];
+ r13 = heapU8[r13];
+ if(r12 !=r13) //_LBB709_86
+{
+break _1;
+}
+}
+else{
+break _52;
+}
+}
+}
+}
+} while(0);
+ r7 = (r7 + 1)|0;
+}
+else{
+break _49;
+}
+}
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r3;
+ _ZN4__rw11__rw_locale9_C_manageEPS0_PKc(i7);
+ return;
+}
+}
+} while(0);
+ r1 = heap32[(r2+39)];
+ r1 = (r1 + -1)|0;
+ heap32[(r2+39)] = r1;
+if(!(r1 !=0)) //_LBB709_89
+{
+ r0 = heap32[(r0)];
+if(!(r0 ==0)) //_LBB709_89
+{
+ heap32[(g0)] = r0;
+ _ZN4__rw11__rw_localeD2Ev(i7);
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+}
+}
+ return;
+}
+
+function _ZN4__rwL20__rw_manage_cat_dataERiPNS_18__rw_open_cat_dataE(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = _ZZN4__rwL20__rw_manage_cat_dataERiPNS_18__rw_open_cat_dataEE4init_2E_b;
+ r1 = heapU8[r0];
+if(!(r1 != 0)) //_LBB710_5
+{
+ r1 = _ZZN4__rwL20__rw_manage_cat_dataERiPNS_18__rw_open_cat_dataEE15catalog_bufsize;
+ r1 = r1 >> 2;
+ r1 = heap32[(r1)];
+if(!(r1 ==0)) //_LBB710_4
+{
+ r2 = 0;
+_5: while(true){
+ r3 = _ZZN4__rwL20__rw_manage_cat_dataERiPNS_18__rw_open_cat_dataEE8catalogs;
+ r3 = r3 >> 2;
+ r4 = r2 << 3;
+ r3 = heap32[(r3)];
+ r3 = (r3 + r4)|0;
+ r2 = (r2 + 1)|0;
+ r3 = r3 >> 2;
+ heap32[(r3)] = -1;
+if(!(uint(r2) <uint(r1))) //_LBB710_3
+{
+break _5;
+}
+}
+}
+ r1 = 1;
+ heap8[r0] = r1;
+}
+ r0 = heap32[(fp)];
+ r1 = heap32[(fp+1)];
+ r0 = r0 >> 2;
+ r2 = heap32[(r0)];
+_9: do {
+ if(r2 !=-1) //_LBB710_27
+{
+ if(r1 !=0) //_LBB710_30
+{
+ r3 = _ZZN4__rwL20__rw_manage_cat_dataERiPNS_18__rw_open_cat_dataEE10n_catalogs;
+ r3 = r3 >> 2;
+ r4 = heap32[(r3)];
+ r5 = _ZZN4__rwL20__rw_manage_cat_dataERiPNS_18__rw_open_cat_dataEE8catalogs;
+ r4 = (r4 + -1)|0;
+ r5 = r5 >> 2;
+ heap32[(r3)] = r4;
+ r3 = heap32[(r5)];
+ r2 = r2 << 3;
+ r2 = (r3 + r2)|0;
+ r4 = _ZZN4__rwL20__rw_manage_cat_dataERiPNS_18__rw_open_cat_dataEE11largest_cat;
+ r2 = r2 >> 2;
+ heap32[(r2)] = -1;
+ r2 = r4 >> 2;
+ r0 = heap32[(r0)];
+ r4 = heap32[(r2)];
+ if(r0 ==r4) //_LBB710_32
+{
+__label__ = 33; //SET chanka
+_13: while(true){
+ if(r0 >-1) //_LBB710_33
+{
+ r6 = r0 << 3;
+ r6 = (r3 + r6)|0;
+ r6 = r6 >> 2;
+ r6 = heap32[(r6)];
+ if(r6 ==-1) //_LBB710_35
+{
+ r0 = (r0 + -1)|0;
+}
+else{
+__label__ = 31;
+break _13;
+}
+}
+else{
+__label__ = 34;
+break _13;
+}
+}
+switch(__label__ ){//multiple entries
+case 34:
+ r0 = r4;
+break;
+case 31:
+ heap32[(r2)] = r0;
+break;
+}
+ if(uint(r0) >uint(3)) //_LBB710_31
+{
+__label__ = 40;
+break _9;
+}
+else{
+ r0 = _ZZN4__rwL20__rw_manage_cat_dataERiPNS_18__rw_open_cat_dataEE11catalog_buf;
+ if(r3 ==r0) //_LBB710_31
+{
+__label__ = 40;
+break _9;
+}
+else{
+ r2 = _ZZN4__rwL20__rw_manage_cat_dataERiPNS_18__rw_open_cat_dataEE15catalog_bufsize;
+ r2 = r2 >> 2;
+ heap32[(r2)] = 8;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r3;
+ heap32[(g0+2)] = 64;
+ memcpy(i7);
+if(!(r3 ==0)) //_LBB710_42
+{
+ heap32[(g0)] = r3;
+ _ZdaPv(i7);
+}
+ heap32[(r5)] = r0;
+__label__ = 40;
+break _9;
+}
+}
+}
+else{
+__label__ = 40;
+break _9;
+}
+}
+else{
+ r0 = _ZZN4__rwL20__rw_manage_cat_dataERiPNS_18__rw_open_cat_dataEE15catalog_bufsize;
+ r0 = r0 >> 2;
+ r0 = heap32[(r0)];
+ if(uint(r2) >=uint(r0)) //_LBB710_7
+{
+__label__ = 7;
+break _9;
+}
+else{
+ r0 = _ZZN4__rwL20__rw_manage_cat_dataERiPNS_18__rw_open_cat_dataEE8catalogs;
+ r0 = r0 >> 2;
+ r0 = heap32[(r0)];
+ r1 = r2 << 3;
+ r0 = (r0 + r1)|0;
+ r_g0 = r0;
+ return;
+}
+}
+}
+else{
+ if(r1 !=0) //_LBB710_8
+{
+ r2 = _ZZN4__rwL20__rw_manage_cat_dataERiPNS_18__rw_open_cat_dataEE10n_catalogs;
+ r2 = r2 >> 2;
+ r3 = _ZZN4__rwL20__rw_manage_cat_dataERiPNS_18__rw_open_cat_dataEE15catalog_bufsize;
+ r4 = heap32[(r2)];
+ r3 = r3 >> 2;
+ r5 = heap32[(r3)];
+ if(r4 ==r5) //_LBB710_12
+{
+ r4 = r4 << 4;
+ r5 = _ZZN4__rwL20__rw_manage_cat_dataERiPNS_18__rw_open_cat_dataEE8catalogs;
+ heap32[(g0)] = r4;
+ _Znaj(i7);
+ r4 = r_g0;
+ r5 = r5 >> 2;
+ r6 = heap32[(r2)];
+ r7 = heap32[(r5)];
+ r8 = r6 << 3;
+ heap32[(g0)] = r4;
+ heap32[(g0+1)] = r7;
+ heap32[(g0+2)] = r8;
+ memcpy(i7);
+ r8 = _ZZN4__rwL20__rw_manage_cat_dataERiPNS_18__rw_open_cat_dataEE11catalog_buf;
+if(!(r7 ==r8)) //_LBB710_14
+{
+ if(r7 !=0) //_LBB710_15
+{
+ heap32[(g0)] = r7;
+ _ZdaPv(i7);
+ r6 = heap32[(r2)];
+}
+}
+ heap32[(r5)] = r4;
+ r5 = heap32[(r3)];
+ r5 = r5 << 1;
+ heap32[(r3)] = r5;
+_36: do {
+if(!(uint(r6) >=uint(r5))) //_LBB710_20
+{
+ r3 = (r6 + 1)|0;
+_38: while(true){
+ r7 = r3 << 3;
+ r7 = (r4 + r7)|0;
+ r7 = r7 >> 2;
+ heap32[(r7+-2)] = -1;
+ if(uint(r3) >=uint(r5)) //_LBB710_20
+{
+break _36;
+}
+else{
+ r3 = (r3 + 1)|0;
+}
+}
+}
+} while(0);
+ r3 = r6 << 3;
+ r3 = (r4 + r3)|0;
+ heap32[(r0)] = r6;
+ r3 = (r3 + 4)|0;
+ r5 = (r1 + 4)|0;
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r5;
+ heap32[(g0+2)] = 4;
+ memcpy(i7);
+ r3 = heap32[(r0)];
+ r3 = r3 << 3;
+ r5 = r1 >> 2;
+ r3 = (r4 + r3)|0;
+ r4 = heap32[(r5)];
+ r3 = r3 >> 2;
+ heap32[(r3)] = r4;
+ r0 = heap32[(r0)];
+ r3 = _ZZN4__rwL20__rw_manage_cat_dataERiPNS_18__rw_open_cat_dataEE11largest_cat;
+ r3 = r3 >> 2;
+ r4 = heap32[(r3)];
+if(!(uint(r0) <=uint(r4))) //_LBB710_22
+{
+ heap32[(r3)] = r0;
+}
+ r0 = (r6 + 1)|0;
+ heap32[(r2)] = r0;
+ r_g0 = r1;
+ return;
+}
+else{
+ r3 = _ZZN4__rwL20__rw_manage_cat_dataERiPNS_18__rw_open_cat_dataEE8catalogs;
+ r3 = r3 >> 2;
+ heap32[(r0)] = 0;
+ r3 = heap32[(r3)];
+ r5 = r3 >> 2;
+ r5 = heap32[(r5)];
+_46: do {
+ if(r5 !=-1) //_LBB710_11
+{
+ r5 = 0;
+_48: while(true){
+ r6 = r5 << 3;
+ r6 = (r3 + r6)|0;
+ r5 = (r5 + 1)|0;
+ r6 = r6 >> 2;
+ heap32[(r0)] = r5;
+ r6 = heap32[(r6+2)];
+if(!(r6 !=-1)) //_LBB710_23
+{
+break _46;
+}
+}
+}
+else{
+ r5 = 0;
+}
+} while(0);
+ r6 = _ZZN4__rwL20__rw_manage_cat_dataERiPNS_18__rw_open_cat_dataEE11largest_cat;
+ r6 = r6 >> 2;
+ r7 = heap32[(r6)];
+if(!(uint(r5) <=uint(r7))) //_LBB710_26
+{
+ heap32[(r6)] = r5;
+}
+ r5 = r5 << 3;
+ r5 = (r3 + r5)|0;
+ r5 = (r5 + 4)|0;
+ r6 = (r1 + 4)|0;
+ heap32[(g0)] = r5;
+ heap32[(g0+1)] = r6;
+ heap32[(g0+2)] = 4;
+ memcpy(i7);
+ r0 = heap32[(r0)];
+ r0 = r0 << 3;
+ r5 = r1 >> 2;
+ r0 = (r3 + r0)|0;
+ r3 = heap32[(r5)];
+ r0 = r0 >> 2;
+ r4 = (r4 + 1)|0;
+ heap32[(r0)] = r3;
+ heap32[(r2)] = r4;
+ r_g0 = r1;
+ return;
+}
+}
+else{
+__label__ = 7;
+}
+}
+} while(0);
+if (__label__ == 7){
+ r1 = 0;
+}
+ r_g0 = r1;
+ return;
+}
+
+function _ZN4__rw14__rw_cat_closeEi(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+var __label__ = 0;
+ i7 = sp + -24;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ heap32[(fp+-1)] = r0;
+if(!(r0 <0)) //_LBB711_20
+{
+ r0 = sp + -4;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = 0;
+ _ZN4__rwL20__rw_manage_cat_dataERiPNS_18__rw_open_cat_dataE(i7);
+ r1 = r_g0;
+if(!(r1 ==0)) //_LBB711_20
+{
+ r2 = r1 >> 2;
+ r2 = heap32[(r2)];
+if(!(r2 ==-1)) //_LBB711_20
+{
+ r3 = _ZN4__rwL12__rw_catlistE_2E_1;
+ r4 = _ZN4__rwL12__rw_catlistE_2E_0;
+ r3 = r3 >> 2;
+ r4 = r4 >> 2;
+ r5 = heap32[(r4)];
+ r6 = heap32[(r3)];
+ r6 = (r6 - r5)|0;
+ r6 = r6 >> 2;
+ r7 = 0;
+_5: while(true){
+ if(uint(r6) >uint(r7)) //_LBB711_9
+{
+ r8 = r7 << 2;
+ r8 = (r5 + r8)|0;
+ r8 = r8 >> 2;
+ r8 = heap32[(r8)];
+ if(r8 ==0) //_LBB711_8
+{
+__label__ = 7;
+break _5;
+}
+else{
+ if(r8 !=r2) //_LBB711_6
+{
+ r7 = (r7 + 1)|0;
+}
+else{
+__label__ = 9;
+break _5;
+}
+}
+}
+else{
+__label__ = 7;
+break _5;
+}
+}
+if (__label__ == 7){
+ r7 = r6;
+}
+_13: do {
+if(!(uint(r6) <=uint(r7))) //_LBB711_19
+{
+ r2 = r7 << 2;
+ r6 = (r5 + r2)|0;
+ r6 = r6 >> 2;
+ r6 = heap32[(r6)];
+ if(r6 !=0) //_LBB711_13
+{
+ heap32[(g0)] = r6;
+ _ZdlPv(i7);
+ r5 = heap32[(r4)];
+}
+ r2 = (r5 + r2)|0;
+ r4 = (r7 + 1)|0;
+ r2 = r2 >> 2;
+ heap32[(r2)] = 0;
+_18: while(true){
+ r2 = heap32[(r3)];
+ r2 = (r2 - r5)|0;
+ r2 = r2 >> 2;
+ if(uint(r2) <=uint(r4)) //_LBB711_19
+{
+break _13;
+}
+else{
+ r2 = r4 << 2;
+ r2 = (r5 + r2)|0;
+ r6 = r2 >> 2;
+ r2 = heap32[(r6)];
+ if(r2 !=0) //_LBB711_15
+{
+ r4 = (r4 + 1)|0;
+ heap32[(r6+-1)] = r2;
+}
+else{
+break _18;
+}
+}
+}
+ heap32[(r6)] = 0;
+}
+} while(0);
+ r2 = (r1 + 4)|0;
+ heap32[(g0)] = r2;
+ _ZNSt6localeD1Ev(i7);
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ _ZN4__rwL20__rw_manage_cat_dataERiPNS_18__rw_open_cat_dataE(i7);
+ return;
+}
+}
+}
+ r0 = _2E_str115180;
+ r1 = _2E_str1116181;
+ heap32[(g0)] = 7;
+ heap32[(g0+1)] = r0;
+ heap32[(g0+2)] = r1;
+ _ZN4__rw10__rw_throwEiz(i7);
+ return;
+}
+
+function _ZN4__rw16__rw_locale_nameEiPKcRNS_14__rw_pod_arrayIcLj256EEE(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+var __label__ = 0;
+ i7 = sp + -368;var g0 = i7>>2; // save stack
+ r0 = _ZZN4__rw16__rw_locale_nameEiPKcRNS_14__rw_pod_arrayIcLj256EEEE11locale_root;
+ r1 = heap32[(fp)];
+ r2 = heap32[(fp+1)];
+ r3 = heap32[(fp+2)];
+ r4 = heapU8[r0];
+ r5 = 0;
+ heap8[sp+-259] = r5;
+ r6 = heapU8[r2];
+_1: do {
+ if(r6 !=0) //_LBB712_2
+{
+ r7 = (r2 + 1)|0;
+_3: while(true){
+ r6 = (r5 + 1)|0;
+ r8 = heapU8[r7+r5];
+ r5 = r6;
+ if(r8 !=0) //_LBB712_3
+{
+continue _3;
+}
+else{
+break _1;
+}
+}
+}
+else{
+ r6 = 0;
+}
+} while(0);
+ r4 = r4 & 255;
+_7: do {
+ if(r4 !=0) //_LBB712_6
+{
+ r4 = (r6 + 1)|0;
+ r5 = (r0 + 1)|0;
+_9: while(true){
+ r4 = (r4 + 1)|0;
+ r7 = (r5 + 1)|0;
+ r8 = heapU8[r5];
+ r5 = r7;
+if(!(r8 !=0)) //_LBB712_7
+{
+break _9;
+}
+}
+ if(uint(r4) >uint(258)) //_LBB712_5
+{
+__label__ = 5;
+}
+else{
+ r4 = sp + -259;
+ heap32[(g0)] = r4;
+ heap32[(g0+1)] = r0;
+ strcpy(i7);
+ r0 = heapU8[sp+-259];
+_13: do {
+ if(r0 !=0) //_LBB712_11
+{
+ r0 = (r4 + 1)|0;
+ r7 = 0;
+_15: while(true){
+ r5 = (r7 + 1)|0;
+ r8 = heapU8[r0+r7];
+ r7 = r5;
+if(!(r8 !=0)) //_LBB712_12
+{
+break _13;
+}
+}
+}
+else{
+ r5 = 0;
+}
+} while(0);
+ r7 = 47;
+ r0 = (r5 + 1)|0;
+ r8 = 0;
+ heap8[r4+r5] = r7;
+ heap8[r4+r0] = r8;
+ r5 = heapU8[sp+-259];
+ if(r5 !=0) //_LBB712_15
+{
+ r5 = (r4 + 1)|0;
+_21: while(true){
+ r4 = (r8 + 1)|0;
+ r7 = heapU8[r5+r8];
+ r8 = r4;
+ if(r7 !=0) //_LBB712_16
+{
+continue _21;
+}
+else{
+__label__ = 17;
+break _7;
+}
+}
+}
+else{
+ r4 = 0;
+__label__ = 17;
+}
+}
+}
+else{
+__label__ = 5;
+}
+} while(0);
+if (__label__ == 5){
+ r0 = 0;
+ r4 = r0;
+}
+ r4 = (r4 + r6)|0;
+if(!(uint(r4) >uint(258))) //_LBB712_33
+{
+ r4 = sp + -259;
+ r0 = (r4 + r0)|0;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r2;
+ strcpy(i7);
+ r0 = _2E_str37683;
+ heap32[(g0)] = r4;
+ heap32[(g0+1)] = r0;
+ strcmp(i7);
+ r0 = r_g0;
+ if(r0 ==0) //_LBB712_28
+{
+ r1 = heapU8[r2];
+_31: do {
+ if(r1 !=0) //_LBB712_30
+{
+ r0 = (r2 + 1)|0;
+ r4 = 0;
+_33: while(true){
+ r1 = (r4 + 1)|0;
+ r5 = heapU8[r0+r4];
+ r4 = r1;
+if(!(r5 !=0)) //_LBB712_31
+{
+break _31;
+}
+}
+}
+else{
+ r1 = 0;
+}
+} while(0);
+ r0 = r3 >> 2;
+ heap32[(r0)] = 0;
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r2;
+ heap32[(g0+2)] = r1;
+ _ZN4__rw14__rw_pod_arrayIcLj256EE6appendEPKcj(i7);
+ r1 = heap32[(r0+1)];
+ r_g0 = r1;
+ return;
+}
+else{
+ r2 = _2E_str1648;
+ heap32[(g0)] = r4;
+ heap32[(g0+1)] = r2;
+ fopen(i7);
+ r2 = r_g0;
+if(!(r2 ==0)) //_LBB712_33
+{
+ if(uint(r2) <uint(10)) //_LBB712_22
+{
+ r3 = _ZL13s_file_stdout;
+ r0 = r3 >> 2;
+ r0 = heap32[(r0)];
+ r0 = r0 >> 2;
+ r0 = heap32[(r0+7)];
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = 0;
+ heap32[(g0+2)] = 2;
+ __FUNCTION_TABLE__[(r0)>>2](i7);
+}
+else{
+ r3 = r2 >> 2;
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3+7)];
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = 0;
+ heap32[(g0+2)] = 2;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ r3 = r2;
+}
+ r0 = r3 >> 2;
+ r0 = heap32[(r0)];
+ r0 = r0 >> 2;
+ r0 = heap32[(r0+5)];
+ heap32[(g0)] = r3;
+ __FUNCTION_TABLE__[(r0)>>2](i7);
+ if(uint(r2) >uint(9)) //_LBB712_25
+{
+ r3 = r2;
+}
+else{
+ r3 = _ZL13s_file_stdout;
+}
+ r0 = r3 >> 2;
+ r0 = heap32[(r0)];
+ r0 = r0 >> 2;
+ r0 = heap32[(r0+4)];
+ heap32[(g0)] = r3;
+ __FUNCTION_TABLE__[(r0)>>2](i7);
+if(!(uint(r2) <uint(10))) //_LBB712_33
+{
+ heap32[(g0)] = r3;
+ _ZdlPv(i7);
+}
+}
+}
+}
+ r0 = sp + -352;
+ r0 = r0 >> 2;
+ heap32[(r0+20)] = 0;
+ heap32[(r0+22)] = r1;
+ heap32[(r0+21)] = 0;
+ r0 = 0;
+ r_g0 = r0;
+ return;
+}
+
+function _ZNKSt8messagesIcE8do_closeEi(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ heap32[(g0)] = r0;
+ _ZN4__rw14__rw_cat_closeEi(i7);
+ return;
+}
+
+function _ZNKSt8messagesIcE6do_getEiiiRKSs(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+var __label__ = 0;
+ i7 = sp + -24;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+2)];
+ heap32[(fp+-1)] = r0;
+if(!(r0 <0)) //_LBB714_8
+{
+ r0 = sp + -4;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = 0;
+ _ZN4__rwL20__rw_manage_cat_dataERiPNS_18__rw_open_cat_dataE(i7);
+ r0 = r_g0;
+if(!(r0 ==0)) //_LBB714_8
+{
+ r0 = r0 >> 2;
+ r0 = heap32[(r0)];
+if(!(r0 ==-1)) //_LBB714_8
+{
+ r1 = _ZN4__rwL12__rw_catlistE_2E_1;
+ r2 = _ZN4__rwL12__rw_catlistE_2E_0;
+ r1 = r1 >> 2;
+ r2 = r2 >> 2;
+ r2 = heap32[(r2)];
+ r1 = heap32[(r1)];
+ r1 = (r1 - r2)|0;
+ r1 = r1 >> 2;
+ r3 = 0;
+_5: while(true){
+ if(uint(r1) <=uint(r3)) //_LBB714_8
+{
+break _5;
+}
+else{
+ r4 = r3 << 2;
+ r4 = (r2 + r4)|0;
+ r4 = r4 >> 2;
+ r4 = heap32[(r4)];
+ if(r4 ==0) //_LBB714_8
+{
+break _5;
+}
+else{
+ if(r4 !=r0) //_LBB714_4
+{
+ r3 = (r3 + 1)|0;
+continue _5;
+}
+else{
+break _5;
+}
+}
+}
+}
+}
+}
+}
+ r0 = heap32[(fp)];
+ r1 = heap32[(fp+5)];
+ r1 = r1 >> 2;
+ r2 = heap32[(r1)];
+ r3 = r2 >> 2;
+ r4 = heap32[(r3+-3)];
+ if(r4 ==-1) //_LBB714_11
+{
+ r2 = heap32[(r3+-1)];
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = r2;
+ _ZNSs10_C_get_repEjj(i7);
+ r0 = r0 >> 2;
+ r3 = (r_g0 + 12)|0;
+ heap32[(r0)] = r3;
+ r0 = heap32[(r1)];
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r0;
+ heap32[(g0+2)] = r2;
+ memcpy(i7);
+}
+else{
+ r1 = (r2 + -12)|0;
+ r0 = r0 >> 2;
+ r3 = _ZNSs11_C_null_refE;
+ heap32[(r0)] = r2;
+if(!(r1 ==r3)) //_LBB714_12
+{
+ r0 = r1 >> 2;
+ r1 = (r4 + 1)|0;
+ heap32[(r0)] = r1;
+ return;
+}
+}
+ return;
+}
+
+function _ZNKSt8messagesIcE7do_openERKSsRKSt6locale(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ heap32[(g0)] = 1;
+ _Znwj(i7);
+ r0 = r_g0;
+if(!(r0 ==0)) //_LBB715_2
+{
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+}
+ r0 = -1;
+ r_g0 = r0;
+ return;
+}
+
+function _ZNSt8messagesIcED0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTVN4__rw10__rw_facetE;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ heap32[(r2+5)] = -1;
+ r1 = heap32[(r2+1)];
+ r3 = heap32[(r2+2)];
+if(!(r1 ==r3)) //_LBB716_3
+{
+if(!(r1 ==0)) //_LBB716_3
+{
+ heap32[(g0)] = r1;
+ _ZdaPv(i7);
+}
+}
+ r1 = _ZZN4__rw10__rw_facetD4EvE9destroyed;
+ heap32[(r2+1)] = r1;
+ r1 = heap32[(r2+4)];
+if(!(r1 !=-1)) //_LBB716_5
+{
+ r1 = heap32[(r2+3)];
+ heap32[(g0)] = r1;
+ _ZdlPv(i7);
+}
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZNSt8messagesIcED1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTVN4__rw10__rw_facetE;
+ r0 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r0)] = r1;
+ heap32[(r0+5)] = -1;
+ r1 = heap32[(r0+1)];
+ r2 = heap32[(r0+2)];
+if(!(r1 ==r2)) //_LBB717_3
+{
+if(!(r1 ==0)) //_LBB717_3
+{
+ heap32[(g0)] = r1;
+ _ZdaPv(i7);
+}
+}
+ r1 = _ZZN4__rw10__rw_facetD4EvE9destroyed;
+ heap32[(r0+1)] = r1;
+ r1 = heap32[(r0+4)];
+if(!(r1 !=-1)) //_LBB717_5
+{
+ r0 = heap32[(r0+3)];
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+}
+ return;
+}
+
+function _ZN4__rw14__rw_pod_arrayIcLj256EE6appendEPKcj(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ r2 = heap32[(fp+2)];
+ r3 = heap32[(r1)];
+ r4 = (r3 + r2)|0;
+ r5 = heap32[(fp+1)];
+ if(uint(r4) >uint(255)) //_LBB718_2
+{
+ r3 = (r4 + 1)|0;
+ heap32[(g0)] = r3;
+ _Znaj(i7);
+ r7 = r_g0;
+ r3 = heap32[(r1)];
+ r6 = heap32[(r1+1)];
+ heap32[(g0)] = r7;
+ heap32[(g0+1)] = r6;
+ heap32[(g0+2)] = r3;
+ memcpy(i7);
+ r3 = heap32[(r1+1)];
+ r6 = (r0 + 8)|0;
+if(!(r3 ==r6)) //_LBB718_5
+{
+if(!(r3 ==0)) //_LBB718_5
+{
+ heap32[(g0)] = r3;
+ _ZdaPv(i7);
+}
+}
+ r6 = (r0 + 4)|0;
+ heap32[(r1+1)] = r7;
+ r3 = heap32[(r1)];
+}
+else{
+ r6 = (r0 + 4)|0;
+ r7 = heap32[(r1+1)];
+}
+ r3 = (r7 + r3)|0;
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r5;
+ heap32[(g0+2)] = r2;
+ memcpy(i7);
+ r2 = r6 >> 2;
+ heap32[(r1)] = r4;
+ r1 = heap32[(r2)];
+ r2 = 0;
+ heap8[r1+r4] = r2;
+ r_g0 = r0;
+ return;
+}
+
+function _ZNSs10_C_get_repEjj(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+var __label__ = 0;
+ i7 = sp + -24;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = heap32[(fp+1)];
+_1: do {
+ if(uint(r0) <uint(-13)) //_LBB719_4
+{
+ if(uint(r0) <uint(r1)) //_LBB719_6
+{
+ r2 = _2E_str4362;
+ r3 = _2E_str3361;
+ heap32[(g0)] = 8;
+ heap32[(g0+1)] = r2;
+ heap32[(g0+2)] = r3;
+ heap32[(g0+3)] = r1;
+ heap32[(g0+4)] = r0;
+ _ZN4__rw10__rw_throwEiz(i7);
+__label__ = 6;
+break _1;
+}
+else{
+__label__ = 6;
+break _1;
+}
+}
+else{
+ if(uint(r1) >uint(-14)) //_LBB719_3
+{
+ r0 = _2E_str2360;
+ r2 = _2E_str3361;
+ heap32[(g0)] = 8;
+ heap32[(g0+1)] = r0;
+ heap32[(g0+2)] = r2;
+ heap32[(g0+3)] = r1;
+ heap32[(g0+4)] = -14;
+ _ZN4__rw10__rw_throwEiz(i7);
+ r0 = r1;
+__label__ = 8;
+}
+else{
+ r0 = r1;
+__label__ = 6;
+}
+}
+} while(0);
+if (__label__ == 6){
+ if(r0 ==0) //_LBB719_9
+{
+ r0 = _ZNSs11_C_null_refE;
+ r_g0 = r0;
+ return;
+}
+}
+ r2 = (r0 + 14)|0;
+ heap32[(g0)] = r2;
+ _Znwj(i7);
+ r2 = r_g0;
+if(!(r2 !=0)) //_LBB719_12
+{
+ heap32[(g0)] = 3;
+ _ZN4__rw10__rw_throwEiz(i7);
+}
+ r3 = r2 >> 2;
+ heap32[(r3)] = 0;
+ heap32[(r3+1)] = r0;
+ r0 = (r1 + r2)|0;
+ r4 = 0;
+ heap32[(r3+2)] = r1;
+ heap8[r0+12] = r4;
+ r_g0 = r2;
+ return;
+}
+
+function _ZNKSt9type_info15__is_function_pEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = 0;
+ r_g0 = r0;
+ return;
+}
+
+function _ZNSt9type_infoD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTVSt9type_info;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZNSt9type_infoD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTVSt9type_info;
+ r0 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r0)] = r1;
+ return;
+}
+
+function block_merge_next(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ r1 = r0 >> 2;
+ r2 = heap32[(r1+1)];
+ r2 = (r2 + -4)|0;
+ r2 = r2 & -4;
+ r3 = (r0 + 8)|0;
+ r4 = (r2 + 4)|0;
+ r4 = (r3 + r4)|0;
+ r4 = r4 >> 2;
+ r5 = heap32[(r4)];
+ r6 = r5 & 1;
+if(!(r6 ==0)) //_LBB723_9
+{
+ r6 = heap32[(fp)];
+ r7 = (r3 + r2)|0;
+ r8 = r5 & -4;
+ if(uint(r8) >uint(255)) //_LBB723_3
+{
+ r5 = r8 >>> 1;
+ r5 = r8 | r5;
+ r9 = r5 >>> 2;
+ r5 = r5 | r9;
+ r9 = r5 >>> 4;
+ r5 = r5 | r9;
+ r9 = r5 >>> 8;
+ r5 = r5 | r9;
+ r9 = r5 >>> 16;
+ r5 = r5 | r9;
+ r9 = r5 ^ -1;
+ r10 = 1431655765;
+ r9 = r9 >>> 1;
+ r5 = r10 & (~r5);
+ r9 = r9 & 1431655765;
+ r5 = (r5 + r9)|0;
+ r9 = r5 >>> 2;
+ r5 = r5 & 858993459;
+ r9 = r9 & 858993459;
+ r5 = (r5 + r9)|0;
+ r9 = r5 >>> 4;
+ r5 = r5 & 252645135;
+ r9 = r9 & 252645135;
+ r5 = (r5 + r9)|0;
+ r9 = r5 >>> 8;
+ r5 = r5 & 16711935;
+ r9 = r9 & 16711935;
+ r5 = (r5 + r9)|0;
+ r9 = r5 & 65535;
+ r5 = r5 >>> 16;
+ r10 = 26;
+ r5 = (r9 + r5)|0;
+ r9 = (r10 - r5)|0;
+ r8 = r8 >>> r9;
+ r9 = 24;
+ r8 = r8 ^ 32;
+ r5 = (r9 - r5)|0;
+}
+else{
+ r8 = r5 >>> 3;
+ r5 = 0;
+}
+ r2 = (r2 + r3)|0;
+ r2 = r2 >> 2;
+ r9 = r5 << 7;
+ r10 = heap32[(r2+2)];
+ r2 = heap32[(r2+3)];
+ r9 = (r6 + r9)|0;
+ r11 = r8 << 2;
+ r9 = (r9 + r11)|0;
+ r11 = r10 >> 2;
+ r12 = r2 >> 2;
+ heap32[(r11+3)] = r2;
+ r2 = r9 >> 2;
+ heap32[(r12+2)] = r10;
+ r2 = heap32[(r2+24)];
+if(!(r2 !=r7)) //_LBB723_8
+{
+ r2 = (r9 + 96)|0;
+ r2 = r2 >> 2;
+ r7 = block_null;
+ heap32[(r2)] = r10;
+if(!(r10 !=r7)) //_LBB723_8
+{
+ r2 = r5 << 2;
+ r2 = (r6 + r2)|0;
+ r2 = r2 >> 2;
+ r7 = 1;
+ r8 = r7 << r8;
+ r9 = heap32[(r2+1)];
+ r8 = r9 & (~r8);
+ heap32[(r2+1)] = r8;
+if(!(r8 !=0)) //_LBB723_8
+{
+ r2 = r6 >> 2;
+ r5 = r7 << r5;
+ r6 = heap32[(r2)];
+ r5 = r6 & (~r5);
+ heap32[(r2)] = r5;
+}
+}
+}
+ r2 = heap32[(r4)];
+ r4 = heap32[(r1+1)];
+ r2 = r2 & -4;
+ r2 = (r2 + r4)|0;
+ r4 = r2 & -4;
+ r3 = (r3 + r4)|0;
+ r2 = (r2 + 4)|0;
+ r3 = r3 >> 2;
+ heap32[(r1+1)] = r2;
+ heap32[(r3)] = r0;
+}
+ r_g0 = r0;
+ return;
+}
+
+function tlsf_free(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+if(!(r0 ==0)) //_LBB724_15
+{
+ r1 = heap32[(fp)];
+ r2 = r0 >> 2;
+ r3 = heap32[(r2+-1)];
+ r4 = s_current_memory;
+ r5 = (r3 + -4)|0;
+ r4 = r4 >> 2;
+ r5 = r5 & -4;
+ r6 = heap32[(r4)];
+ r3 = r3 & -4;
+ r5 = (r0 + r5)|0;
+ r3 = (r6 - r3)|0;
+ r0 = (r0 + -8)|0;
+ r5 = r5 >> 2;
+ heap32[(r4)] = r3;
+ heap32[(r5)] = r0;
+ r3 = heap32[(r5+1)];
+ r3 = r3 | 2;
+ heap32[(r5+1)] = r3;
+ r3 = heap32[(r2+-1)];
+ r4 = r3 | 1;
+ heap32[(r2+-1)] = r4;
+ r3 = r3 & 2;
+ if(r3 !=0) //_LBB724_3
+{
+ r0 = r0 >> 2;
+ r0 = heap32[(r0)];
+ r3 = r0 >> 2;
+ r4 = heap32[(r3+1)];
+ r5 = r4 & -4;
+ if(uint(r5) >uint(255)) //_LBB724_5
+{
+ r4 = r5 >>> 1;
+ r4 = r5 | r4;
+ r6 = r4 >>> 2;
+ r4 = r4 | r6;
+ r6 = r4 >>> 4;
+ r4 = r4 | r6;
+ r6 = r4 >>> 8;
+ r4 = r4 | r6;
+ r6 = r4 >>> 16;
+ r4 = r4 | r6;
+ r6 = r4 ^ -1;
+ r7 = 1431655765;
+ r6 = r6 >>> 1;
+ r4 = r7 & (~r4);
+ r6 = r6 & 1431655765;
+ r4 = (r4 + r6)|0;
+ r6 = r4 >>> 2;
+ r4 = r4 & 858993459;
+ r6 = r6 & 858993459;
+ r4 = (r4 + r6)|0;
+ r6 = r4 >>> 4;
+ r4 = r4 & 252645135;
+ r6 = r6 & 252645135;
+ r4 = (r4 + r6)|0;
+ r6 = r4 >>> 8;
+ r4 = r4 & 16711935;
+ r6 = r6 & 16711935;
+ r4 = (r4 + r6)|0;
+ r6 = r4 & 65535;
+ r4 = r4 >>> 16;
+ r7 = 26;
+ r4 = (r6 + r4)|0;
+ r6 = (r7 - r4)|0;
+ r5 = r5 >>> r6;
+ r6 = 24;
+ r5 = r5 ^ 32;
+ r4 = (r6 - r4)|0;
+}
+else{
+ r5 = r4 >>> 3;
+ r4 = 0;
+}
+ r6 = r4 << 7;
+ r7 = heap32[(r3+2)];
+ r8 = heap32[(r3+3)];
+ r6 = (r1 + r6)|0;
+ r9 = r5 << 2;
+ r6 = (r6 + r9)|0;
+ r9 = r7 >> 2;
+ r10 = r8 >> 2;
+ heap32[(r9+3)] = r8;
+ r8 = r6 >> 2;
+ heap32[(r10+2)] = r7;
+ r8 = heap32[(r8+24)];
+if(!(r8 !=r0)) //_LBB724_10
+{
+ r6 = (r6 + 96)|0;
+ r6 = r6 >> 2;
+ r8 = block_null;
+ heap32[(r6)] = r7;
+if(!(r7 !=r8)) //_LBB724_10
+{
+ r6 = r4 << 2;
+ r6 = (r1 + r6)|0;
+ r6 = r6 >> 2;
+ r7 = 1;
+ r5 = r7 << r5;
+ r8 = heap32[(r6+1)];
+ r5 = r8 & (~r5);
+ heap32[(r6+1)] = r5;
+if(!(r5 !=0)) //_LBB724_10
+{
+ r5 = r1 >> 2;
+ r4 = r7 << r4;
+ r6 = heap32[(r5)];
+ r4 = r6 & (~r4);
+ heap32[(r5)] = r4;
+}
+}
+}
+ r4 = (r0 + 8)|0;
+ r2 = heap32[(r2+-1)];
+ r5 = heap32[(r3+1)];
+ r2 = r2 & -4;
+ r2 = (r2 + r5)|0;
+ r5 = r2 & -4;
+ r4 = (r4 + r5)|0;
+ r2 = (r2 + 4)|0;
+ r4 = r4 >> 2;
+ heap32[(r3+1)] = r2;
+ heap32[(r4)] = r0;
+}
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r0;
+ block_merge_next(i7);
+ r0 = r_g0;
+ r2 = r0 >> 2;
+ r2 = heap32[(r2+1)];
+ r3 = r2 & -4;
+ if(uint(r3) >uint(255)) //_LBB724_13
+{
+ r2 = r3 >>> 1;
+ r2 = r3 | r2;
+ r4 = r2 >>> 2;
+ r2 = r2 | r4;
+ r4 = r2 >>> 4;
+ r2 = r2 | r4;
+ r4 = r2 >>> 8;
+ r2 = r2 | r4;
+ r4 = r2 >>> 16;
+ r2 = r2 | r4;
+ r4 = r2 ^ -1;
+ r5 = 1431655765;
+ r4 = r4 >>> 1;
+ r2 = r5 & (~r2);
+ r4 = r4 & 1431655765;
+ r2 = (r2 + r4)|0;
+ r4 = r2 >>> 2;
+ r2 = r2 & 858993459;
+ r4 = r4 & 858993459;
+ r2 = (r2 + r4)|0;
+ r4 = r2 >>> 4;
+ r2 = r2 & 252645135;
+ r4 = r4 & 252645135;
+ r2 = (r2 + r4)|0;
+ r4 = r2 >>> 8;
+ r2 = r2 & 16711935;
+ r4 = r4 & 16711935;
+ r2 = (r2 + r4)|0;
+ r4 = r2 & 65535;
+ r2 = r2 >>> 16;
+ r5 = 26;
+ r2 = (r4 + r2)|0;
+ r4 = (r5 - r2)|0;
+ r3 = r3 >>> r4;
+ r4 = 24;
+ r3 = r3 ^ 32;
+ r2 = (r4 - r2)|0;
+}
+else{
+ r3 = r2 >>> 3;
+ r2 = 0;
+}
+ r4 = r2 << 7;
+ r4 = (r1 + r4)|0;
+ r5 = r3 << 2;
+ r4 = (r4 + r5)|0;
+ r4 = r4 >> 2;
+ r5 = heap32[(r4+24)];
+ r6 = r0 >> 2;
+ r7 = block_null;
+ heap32[(r6+2)] = r5;
+ r5 = r5 >> 2;
+ heap32[(r6+3)] = r7;
+ heap32[(r5+3)] = r0;
+ r5 = 1;
+ r6 = r1 >> 2;
+ heap32[(r4+24)] = r0;
+ r0 = r2 << 2;
+ r2 = r5 << r2;
+ r4 = heap32[(r6)];
+ r0 = (r1 + r0)|0;
+ r1 = r4 | r2;
+ r0 = r0 >> 2;
+ heap32[(r6)] = r1;
+ r1 = r5 << r3;
+ r2 = heap32[(r0+1)];
+ r1 = r2 | r1;
+ heap32[(r0+1)] = r1;
+}
+ return;
+}
+
+function block_prepare_used(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ if(r0 ==0) //_LBB725_8
+{
+ r0 = 0;
+ r_g0 = r0;
+ return;
+}
+else{
+ r1 = heap32[(fp+2)];
+ r2 = r0 >> 2;
+ r3 = heap32[(r2+1)];
+ r4 = r3 & -4;
+ r5 = (r1 + 16)|0;
+ if(uint(r4) >=uint(r5)) //_LBB725_3
+{
+ r3 = heap32[(fp)];
+ r5 = (r0 + 8)|0;
+ r6 = (r5 + r1)|0;
+ r7 = r6 >> 2;
+ r8 = -4;
+ r9 = heap32[(r7)];
+ r8 = (r8 - r1)|0;
+ r9 = r9 & 3;
+ r4 = (r8 + r4)|0;
+ r4 = r9 | r4;
+ heap32[(r7)] = r4;
+ r4 = heap32[(r2+1)];
+ r4 = r4 & 3;
+ r4 = r4 | r1;
+ heap32[(r2+1)] = r4;
+ r4 = heap32[(r7)];
+ r4 = (r4 + -4)|0;
+ r8 = (r1 + 4)|0;
+ r4 = r4 & -4;
+ r1 = (r1 + 8)|0;
+ r9 = (r4 + r8)|0;
+ r4 = (r4 + r1)|0;
+ r9 = (r5 + r9)|0;
+ r4 = (r5 + r4)|0;
+ r6 = (r6 + -4)|0;
+ r9 = r9 >> 2;
+ r4 = r4 >> 2;
+ heap32[(r9)] = r6;
+ r9 = heap32[(r4)];
+ r9 = r9 | 2;
+ heap32[(r4)] = r9;
+ r4 = heap32[(r7)];
+ r4 = r4 | 1;
+ heap32[(r7)] = r4;
+ r4 = heap32[(r2+1)];
+ r4 = (r4 + -4)|0;
+ r4 = r4 & -4;
+ r4 = (r5 + r4)|0;
+ r4 = r4 >> 2;
+ heap32[(r4)] = r0;
+ r4 = heap32[(r7)];
+ r9 = r4 & -4;
+ r10 = r4 | 2;
+ heap32[(r7)] = r10;
+ if(uint(r9) >uint(255)) //_LBB725_5
+{
+ r4 = r9 >>> 1;
+ r4 = r9 | r4;
+ r7 = r4 >>> 2;
+ r4 = r4 | r7;
+ r7 = r4 >>> 4;
+ r4 = r4 | r7;
+ r7 = r4 >>> 8;
+ r4 = r4 | r7;
+ r7 = r4 >>> 16;
+ r4 = r4 | r7;
+ r7 = r4 ^ -1;
+ r10 = 1431655765;
+ r7 = r7 >>> 1;
+ r4 = r10 & (~r4);
+ r7 = r7 & 1431655765;
+ r4 = (r4 + r7)|0;
+ r7 = r4 >>> 2;
+ r4 = r4 & 858993459;
+ r7 = r7 & 858993459;
+ r4 = (r4 + r7)|0;
+ r7 = r4 >>> 4;
+ r4 = r4 & 252645135;
+ r7 = r7 & 252645135;
+ r4 = (r4 + r7)|0;
+ r7 = r4 >>> 8;
+ r4 = r4 & 16711935;
+ r7 = r7 & 16711935;
+ r4 = (r4 + r7)|0;
+ r7 = r4 & 65535;
+ r4 = r4 >>> 16;
+ r10 = 26;
+ r4 = (r7 + r4)|0;
+ r7 = (r10 - r4)|0;
+ r9 = r9 >>> r7;
+ r7 = 24;
+ r9 = r9 ^ 32;
+ r4 = (r7 - r4)|0;
+}
+else{
+ r9 = r4 >>> 3;
+ r4 = 0;
+}
+ r7 = r4 << 7;
+ r7 = (r3 + r7)|0;
+ r10 = r9 << 2;
+ r7 = (r7 + r10)|0;
+ r7 = r7 >> 2;
+ r8 = (r5 + r8)|0;
+ r1 = (r5 + r1)|0;
+ r5 = heap32[(r7+24)];
+ r8 = r8 >> 2;
+ r1 = r1 >> 2;
+ r10 = block_null;
+ heap32[(r8)] = r5;
+ r5 = r5 >> 2;
+ heap32[(r1)] = r10;
+ heap32[(r5+3)] = r6;
+ r1 = 1;
+ r5 = r3 >> 2;
+ heap32[(r7+24)] = r6;
+ r6 = r4 << 2;
+ r4 = r1 << r4;
+ r7 = heap32[(r5)];
+ r3 = (r3 + r6)|0;
+ r4 = r7 | r4;
+ r3 = r3 >> 2;
+ heap32[(r5)] = r4;
+ r1 = r1 << r9;
+ r4 = heap32[(r3+1)];
+ r1 = r4 | r1;
+ heap32[(r3+1)] = r1;
+ r3 = heap32[(r2+1)];
+}
+ r1 = r3 & -4;
+ r0 = (r0 + 8)|0;
+ r1 = (r0 + r1)|0;
+ r1 = r1 >> 2;
+ r3 = heap32[(r1)];
+ r3 = r3 & -3;
+ heap32[(r1)] = r3;
+ r1 = heap32[(r2+1)];
+ r1 = r1 & -2;
+ heap32[(r2+1)] = r1;
+ r_g0 = r0;
+ return;
+}
+}
+
+function block_locate_free(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+_1: do {
+if(!(r0 ==0)) //_LBB726_16
+{
+ r1 = heap32[(fp)];
+ if(uint(r0) >uint(31)) //_LBB726_3
+{
+ r2 = r0 >>> 1;
+ r2 = r0 | r2;
+ r3 = r2 >>> 2;
+ r2 = r2 | r3;
+ r3 = r2 >>> 4;
+ r2 = r2 | r3;
+ r3 = r2 >>> 8;
+ r2 = r2 | r3;
+ r3 = r2 >>> 16;
+ r2 = r2 | r3;
+ r3 = r2 ^ -1;
+ r4 = 1431655765;
+ r3 = r3 >>> 1;
+ r2 = r4 & (~r2);
+ r3 = r3 & 1431655765;
+ r2 = (r2 + r3)|0;
+ r3 = r2 >>> 2;
+ r2 = r2 & 858993459;
+ r3 = r3 & 858993459;
+ r2 = (r2 + r3)|0;
+ r3 = r2 >>> 4;
+ r2 = r2 & 252645135;
+ r3 = r3 & 252645135;
+ r2 = (r2 + r3)|0;
+ r3 = r2 >>> 8;
+ r2 = r2 & 16711935;
+ r3 = r3 & 16711935;
+ r2 = (r2 + r3)|0;
+ r3 = r2 & 65535;
+ r2 = r2 >>> 16;
+ r5 = 26;
+ r2 = (r3 + r2)|0;
+ r3 = 1;
+ r2 = (r5 - r2)|0;
+ r2 = r3 << r2;
+ r0 = (r0 + r2)|0;
+ r0 = (r0 + -1)|0;
+ if(uint(r0) >uint(255)) //_LBB726_5
+{
+ r2 = r0 >>> 1;
+ r2 = r0 | r2;
+ r3 = r2 >>> 2;
+ r2 = r2 | r3;
+ r3 = r2 >>> 4;
+ r2 = r2 | r3;
+ r3 = r2 >>> 8;
+ r2 = r2 | r3;
+ r3 = r2 >>> 16;
+ r2 = r2 | r3;
+ r3 = r2 ^ -1;
+ r3 = r3 >>> 1;
+ r4 = r4 & (~r2);
+ r2 = r3 & 1431655765;
+ r4 = (r4 + r2)|0;
+ r2 = r4 >>> 2;
+ r4 = r4 & 858993459;
+ r2 = r2 & 858993459;
+ r4 = (r4 + r2)|0;
+ r2 = r4 >>> 4;
+ r4 = r4 & 252645135;
+ r2 = r2 & 252645135;
+ r4 = (r4 + r2)|0;
+ r2 = r4 >>> 8;
+ r4 = r4 & 16711935;
+ r2 = r2 & 16711935;
+ r4 = (r4 + r2)|0;
+ r2 = r4 & 65535;
+ r4 = r4 >>> 16;
+ r4 = (r2 + r4)|0;
+ r2 = (r5 - r4)|0;
+ r0 = r0 >>> r2;
+ r2 = 24;
+ r0 = r0 ^ 32;
+ r4 = (r2 - r4)|0;
+__label__ = 5;
+}
+else{
+__label__ = 3;
+}
+}
+else{
+__label__ = 3;
+}
+if (__label__ == 3){
+ r0 = r0 >>> 3;
+ r4 = 0;
+}
+ r2 = r4 << 2;
+ r2 = (r1 + r2)|0;
+ r2 = r2 >> 2;
+ r3 = -1;
+ r2 = heap32[(r2+1)];
+ r0 = r3 << r0;
+ r0 = r2 & r0;
+ if(r0 ==0) //_LBB726_8
+{
+ r0 = r1 >> 2;
+ r4 = (r4 + 1)|0;
+ r0 = heap32[(r0)];
+ r4 = r3 << r4;
+ r0 = r0 & r4;
+ if(r0 ==0) //_LBB726_16
+{
+break _1;
+}
+else{
+ r4 = (r0 + -1)|0;
+ r0 = r4 & (~r0);
+ r4 = r0 >>> 1;
+ r0 = r0 & 1431655765;
+ r4 = r4 & 1431655765;
+ r0 = (r0 + r4)|0;
+ r4 = r0 >>> 2;
+ r0 = r0 & 858993459;
+ r4 = r4 & 858993459;
+ r0 = (r0 + r4)|0;
+ r4 = r0 >>> 4;
+ r0 = r0 & 252645135;
+ r4 = r4 & 252645135;
+ r0 = (r0 + r4)|0;
+ r4 = r0 >>> 8;
+ r0 = r0 & 16711935;
+ r4 = r4 & 16711935;
+ r0 = (r0 + r4)|0;
+ r4 = r0 & 65535;
+ r0 = r0 >>> 16;
+ r4 = (r4 + r0)|0;
+ r0 = r4 << 2;
+ r0 = (r1 + r0)|0;
+ r0 = r0 >> 2;
+ r0 = heap32[(r0+1)];
+}
+}
+ r2 = (r0 + -1)|0;
+ r2 = r2 & (~r0);
+ r5 = r2 >>> 1;
+ r2 = r2 & 1431655765;
+ r5 = r5 & 1431655765;
+ r2 = (r2 + r5)|0;
+ r5 = r2 >>> 2;
+ r2 = r2 & 858993459;
+ r5 = r5 & 858993459;
+ r2 = (r2 + r5)|0;
+ r5 = r2 >>> 4;
+ r2 = r2 & 252645135;
+ r5 = r5 & 252645135;
+ r2 = (r2 + r5)|0;
+ r5 = r2 >>> 8;
+ r2 = r2 & 16711935;
+ r5 = r5 & 16711935;
+ r2 = (r2 + r5)|0;
+ r5 = r2 & 65535;
+ r2 = r2 >>> 16;
+ r2 = (r5 + r2)|0;
+ r0 = r0 == 0 ? r3 : r2;
+ r2 = r4 << 7;
+ r2 = (r1 + r2)|0;
+ r3 = r0 << 2;
+ r2 = (r2 + r3)|0;
+ r3 = r2 >> 2;
+ r3 = heap32[(r3+24)];
+if(!(r3 ==0)) //_LBB726_16
+{
+ r2 = (r2 + 96)|0;
+ r5 = r3 >> 2;
+ r6 = heap32[(r5+2)];
+ r5 = heap32[(r5+3)];
+ r7 = r6 >> 2;
+ r8 = r5 >> 2;
+ heap32[(r7+3)] = r5;
+ r2 = r2 >> 2;
+ heap32[(r8+2)] = r6;
+ r5 = heap32[(r2)];
+if(!(r5 !=r3)) //_LBB726_15
+{
+ r5 = block_null;
+ heap32[(r2)] = r6;
+if(!(r6 !=r5)) //_LBB726_15
+{
+ r2 = r4 << 2;
+ r2 = (r1 + r2)|0;
+ r2 = r2 >> 2;
+ r5 = 1;
+ r0 = r5 << r0;
+ r6 = heap32[(r2+1)];
+ r0 = r6 & (~r0);
+ heap32[(r2+1)] = r0;
+if(!(r0 !=0)) //_LBB726_15
+{
+ r0 = r1 >> 2;
+ r1 = r5 << r4;
+ r2 = heap32[(r0)];
+ r1 = r2 & (~r1);
+ heap32[(r0)] = r1;
+}
+}
+}
+ r_g0 = r3;
+ return;
+}
+}
+} while(0);
+ r0 = 0;
+ r_g0 = r0;
+ return;
+}
+
+function tlsf_malloc(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ r1 = heap32[(fp)];
+ r2 = (r0 + -1)|0;
+ if(uint(r2) <uint(1073741823)) //_LBB727_2
+{
+ r0 = (r0 + 7)|0;
+ r0 = r0 & -8;
+ r2 = 12;
+ r0 = uint(r0) < uint(r2) ? r2 : r0;
+}
+else{
+ r0 = 0;
+}
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r0;
+ block_locate_free(i7);
+ r2 = r_g0;
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r2;
+ heap32[(g0+2)] = r0;
+ r0 = s_current_memory;
+ block_prepare_used(i7);
+ r1 = r_g0;
+ r2 = r2 >> 2;
+ r0 = r0 >> 2;
+ r2 = heap32[(r2+1)];
+ r3 = heap32[(r0)];
+ r2 = r2 & -4;
+ r2 = (r3 + r2)|0;
+ r3 = s_max_memory;
+ r3 = r3 >> 2;
+ heap32[(r0)] = r2;
+ r0 = heap32[(r3)];
+if(!(uint(r2) <=uint(r0))) //_LBB727_5
+{
+ heap32[(r3)] = r2;
+}
+ r_g0 = r1;
+ return;
+}
+
+function tlsf_realloc(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ r1 = heap32[(fp)];
+ r2 = heap32[(fp+2)];
+if(!(r0 ==0)) //_LBB728_3
+{
+if(!(r2 !=0)) //_LBB728_3
+{
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r0;
+ tlsf_free(i7);
+ r0 = 0;
+ r_g0 = r0;
+ return;
+}
+}
+ if(r0 !=0) //_LBB728_10
+{
+ r3 = r0 >> 2;
+ r4 = heap32[(r3+-1)];
+ r5 = r4 & -4;
+ r6 = (r0 + r5)|0;
+ r6 = r6 >> 2;
+ r6 = heap32[(r6)];
+ r7 = r6 & -4;
+ r7 = (r5 + r7)|0;
+ r8 = (r2 + -1)|0;
+ r9 = (r0 + -8)|0;
+ r7 = (r7 + 4)|0;
+ if(uint(r8) <uint(1073741823)) //_LBB728_12
+{
+ r10 = (r2 + 7)|0;
+ r10 = r10 & -8;
+ r11 = 12;
+ r10 = uint(r10) < uint(r11) ? r11 : r10;
+}
+else{
+ r10 = 0;
+}
+_11: do {
+ if(uint(r10) >uint(r5)) //_LBB728_15
+{
+ r4 = r6 & 1;
+if(!(r4 ==0)) //_LBB728_17
+{
+ if(uint(r10) <=uint(r7)) //_LBB728_24
+{
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r9;
+ block_merge_next(i7);
+ r4 = heap32[(r3+-1)];
+ r4 = r4 & -4;
+ r4 = (r0 + r4)|0;
+ r4 = r4 >> 2;
+ r9 = heap32[(r4)];
+ r9 = r9 & -3;
+ heap32[(r4)] = r9;
+ r4 = heap32[(r3+-1)];
+ r4 = r4 & -2;
+ heap32[(r3+-1)] = r4;
+break _11;
+}
+}
+ if(uint(r8) <uint(1073741823)) //_LBB728_19
+{
+ r3 = (r2 + 7)|0;
+ r3 = r3 & -8;
+ r4 = 12;
+ r3 = uint(r3) < uint(r4) ? r4 : r3;
+}
+else{
+ r3 = 0;
+}
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r3;
+ block_locate_free(i7);
+ r4 = r_g0;
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r4;
+ heap32[(g0+2)] = r3;
+ r3 = s_current_memory;
+ block_prepare_used(i7);
+ r9 = r_g0;
+ r4 = r4 >> 2;
+ r3 = r3 >> 2;
+ r4 = heap32[(r4+1)];
+ r10 = heap32[(r3)];
+ r4 = r4 & -4;
+ r4 = (r10 + r4)|0;
+ r10 = s_max_memory;
+ r10 = r10 >> 2;
+ heap32[(r3)] = r4;
+ r3 = heap32[(r10)];
+if(!(uint(r4) <=uint(r3))) //_LBB728_22
+{
+ heap32[(r10)] = r4;
+}
+ if(r9 ==0) //_LBB728_34
+{
+ r_g0 = r9;
+ return;
+}
+else{
+ r3 = uint(r5) >= uint(r2) ? r2 : r5;
+ heap32[(g0)] = r9;
+ heap32[(g0+1)] = r0;
+ heap32[(g0+2)] = r3;
+ memcpy(i7);
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r0;
+ tlsf_free(i7);
+ r_g0 = r9;
+ return;
+}
+}
+} while(0);
+ r9 = s_current_memory;
+ r9 = r9 >> 2;
+ r2 = heap32[(r9)];
+ r2 = (r2 - r5)|0;
+ r5 = r4 & -4;
+ heap32[(r9)] = r2;
+ r6 = (r10 + 16)|0;
+ if(uint(r5) >=uint(r6)) //_LBB728_27
+{
+ r4 = (r0 + r10)|0;
+ r6 = r4 >> 2;
+ r7 = -4;
+ r8 = heap32[(r6)];
+ r7 = (r7 - r10)|0;
+ r8 = r8 & 3;
+ r5 = (r7 + r5)|0;
+ r5 = r8 | r5;
+ heap32[(r6)] = r5;
+ r5 = heap32[(r3+-1)];
+ r5 = r5 & 3;
+ r5 = r5 | r10;
+ heap32[(r3+-1)] = r5;
+ r5 = heap32[(r6)];
+ r5 = (r5 + -4)|0;
+ r5 = r5 & -4;
+ r5 = (r10 + r5)|0;
+ r5 = (r5 + r0)|0;
+ r4 = (r4 + -4)|0;
+ r5 = r5 >> 2;
+ heap32[(r5+1)] = r4;
+ r7 = heap32[(r5+2)];
+ r7 = r7 | 2;
+ heap32[(r5+2)] = r7;
+ r5 = heap32[(r6)];
+ r5 = r5 | 1;
+ r5 = r5 & -3;
+ heap32[(r6)] = r5;
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r4;
+ block_merge_next(i7);
+ r4 = r_g0;
+ r5 = r4 >> 2;
+ r5 = heap32[(r5+1)];
+ r6 = r5 & -4;
+ if(uint(r6) >uint(255)) //_LBB728_29
+{
+ r5 = r6 >>> 1;
+ r5 = r6 | r5;
+ r7 = r5 >>> 2;
+ r5 = r5 | r7;
+ r7 = r5 >>> 4;
+ r5 = r5 | r7;
+ r7 = r5 >>> 8;
+ r5 = r5 | r7;
+ r7 = r5 >>> 16;
+ r5 = r5 | r7;
+ r7 = r5 ^ -1;
+ r8 = 1431655765;
+ r7 = r7 >>> 1;
+ r5 = r8 & (~r5);
+ r7 = r7 & 1431655765;
+ r5 = (r5 + r7)|0;
+ r7 = r5 >>> 2;
+ r5 = r5 & 858993459;
+ r7 = r7 & 858993459;
+ r5 = (r5 + r7)|0;
+ r7 = r5 >>> 4;
+ r5 = r5 & 252645135;
+ r7 = r7 & 252645135;
+ r5 = (r5 + r7)|0;
+ r7 = r5 >>> 8;
+ r5 = r5 & 16711935;
+ r7 = r7 & 16711935;
+ r5 = (r5 + r7)|0;
+ r7 = r5 & 65535;
+ r5 = r5 >>> 16;
+ r8 = 26;
+ r5 = (r7 + r5)|0;
+ r7 = (r8 - r5)|0;
+ r6 = r6 >>> r7;
+ r7 = 24;
+ r6 = r6 ^ 32;
+ r5 = (r7 - r5)|0;
+}
+else{
+ r6 = r5 >>> 3;
+ r5 = 0;
+}
+ r7 = r5 << 7;
+ r7 = (r1 + r7)|0;
+ r8 = r6 << 2;
+ r7 = (r7 + r8)|0;
+ r7 = r7 >> 2;
+ r8 = heap32[(r7+24)];
+ r10 = r4 >> 2;
+ r11 = block_null;
+ heap32[(r10+2)] = r8;
+ r8 = r8 >> 2;
+ heap32[(r10+3)] = r11;
+ heap32[(r8+3)] = r4;
+ r8 = 1;
+ r10 = r1 >> 2;
+ heap32[(r7+24)] = r4;
+ r4 = r5 << 2;
+ r5 = r8 << r5;
+ r7 = heap32[(r10)];
+ r4 = (r1 + r4)|0;
+ r1 = r7 | r5;
+ r4 = r4 >> 2;
+ heap32[(r10)] = r1;
+ r1 = r8 << r6;
+ r5 = heap32[(r4+1)];
+ r1 = r5 | r1;
+ heap32[(r4+1)] = r1;
+ r4 = heap32[(r3+-1)];
+}
+ r1 = r4 & -4;
+ r1 = (r2 + r1)|0;
+ r2 = s_max_memory;
+ r2 = r2 >> 2;
+ heap32[(r9)] = r1;
+ r9 = heap32[(r2)];
+if(!(uint(r1) <=uint(r9))) //_LBB728_33
+{
+ heap32[(r2)] = r1;
+}
+ r_g0 = r0;
+ return;
+}
+else{
+ r0 = (r2 + -1)|0;
+ if(uint(r0) <uint(1073741823)) //_LBB728_6
+{
+ r0 = (r2 + 7)|0;
+ r0 = r0 & -8;
+ r2 = 12;
+ r0 = uint(r0) < uint(r2) ? r2 : r0;
+}
+else{
+ r0 = 0;
+}
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r0;
+ block_locate_free(i7);
+ r2 = r_g0;
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r2;
+ heap32[(g0+2)] = r0;
+ r0 = s_current_memory;
+ block_prepare_used(i7);
+ r1 = r_g0;
+ r2 = r2 >> 2;
+ r0 = r0 >> 2;
+ r2 = heap32[(r2+1)];
+ r3 = heap32[(r0)];
+ r2 = r2 & -4;
+ r2 = (r3 + r2)|0;
+ r3 = s_max_memory;
+ r3 = r3 >> 2;
+ heap32[(r0)] = r2;
+ r0 = heap32[(r3)];
+if(!(uint(r2) <=uint(r0))) //_LBB728_9
+{
+ heap32[(r3)] = r2;
+}
+ r_g0 = r1;
+ return;
+}
+}
+
+function tlsf_create(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ r0 = (r0 + -3048)|0;
+ r1 = r0 & -8;
+ r2 = (r1 + -12)|0;
+ if(uint(r2) <uint(1073741813)) //_LBB729_2
+{
+ r2 = heap32[(fp)];
+ r3 = block_null;
+ r4 = r3 >> 2;
+ heap32[(r4+2)] = r3;
+ r5 = -1;
+ r6 = r2 >> 2;
+ heap32[(r4+3)] = r3;
+ heap32[(r6)] = 0;
+_3: while(true){
+ r4 = r5 << 2;
+ r7 = r5 << 7;
+ r4 = (r2 - r4)|0;
+ r7 = (r2 - r7)|0;
+ r4 = r4 >> 2;
+ r7 = r7 >> 2;
+ heap32[(r4)] = 0;
+ heap32[(r7+-8)] = r3;
+ heap32[(r7+-7)] = r3;
+ heap32[(r7+-6)] = r3;
+ heap32[(r7+-5)] = r3;
+ heap32[(r7+-4)] = r3;
+ heap32[(r7+-3)] = r3;
+ heap32[(r7+-2)] = r3;
+ heap32[(r7+-1)] = r3;
+ heap32[(r7)] = r3;
+ heap32[(r7+1)] = r3;
+ heap32[(r7+2)] = r3;
+ heap32[(r7+3)] = r3;
+ heap32[(r7+4)] = r3;
+ heap32[(r7+5)] = r3;
+ heap32[(r7+6)] = r3;
+ heap32[(r7+7)] = r3;
+ heap32[(r7+8)] = r3;
+ heap32[(r7+9)] = r3;
+ heap32[(r7+10)] = r3;
+ heap32[(r7+11)] = r3;
+ heap32[(r7+12)] = r3;
+ heap32[(r7+13)] = r3;
+ heap32[(r7+14)] = r3;
+ heap32[(r7+15)] = r3;
+ heap32[(r7+16)] = r3;
+ heap32[(r7+17)] = r3;
+ heap32[(r7+18)] = r3;
+ heap32[(r7+19)] = r3;
+ heap32[(r7+20)] = r3;
+ heap32[(r7+21)] = r3;
+ r5 = (r5 + -1)|0;
+ heap32[(r7+22)] = r3;
+ heap32[(r7+23)] = r3;
+if(!(r5 !=-24)) //_LBB729_3
+{
+break _3;
+}
+}
+ r4 = r0 | 1;
+ r5 = (r2 + 3036)|0;
+ r4 = r4 & -7;
+ heap32[(r6+760)] = r4;
+ if(uint(r1) >uint(255)) //_LBB729_6
+{
+ r0 = r1 >>> 1;
+ r0 = r1 | r0;
+ r4 = r0 >>> 2;
+ r0 = r0 | r4;
+ r4 = r0 >>> 4;
+ r0 = r0 | r4;
+ r4 = r0 >>> 8;
+ r0 = r0 | r4;
+ r4 = r0 >>> 16;
+ r0 = r0 | r4;
+ r4 = r0 ^ -1;
+ r7 = 1431655765;
+ r4 = r4 >>> 1;
+ r0 = r7 & (~r0);
+ r4 = r4 & 1431655765;
+ r0 = (r0 + r4)|0;
+ r4 = r0 >>> 2;
+ r0 = r0 & 858993459;
+ r4 = r4 & 858993459;
+ r0 = (r0 + r4)|0;
+ r4 = r0 >>> 4;
+ r0 = r0 & 252645135;
+ r4 = r4 & 252645135;
+ r0 = (r0 + r4)|0;
+ r4 = r0 >>> 8;
+ r0 = r0 & 16711935;
+ r4 = r4 & 16711935;
+ r0 = (r0 + r4)|0;
+ r4 = r0 & 65535;
+ r0 = r0 >>> 16;
+ r7 = 26;
+ r0 = (r4 + r0)|0;
+ r4 = (r7 - r0)|0;
+ r1 = r1 >>> r4;
+ r4 = 24;
+ r1 = r1 ^ 32;
+ r0 = (r4 - r0)|0;
+}
+else{
+ r1 = r0 >>> 3;
+ r0 = 0;
+}
+ r4 = r0 << 7;
+ r4 = (r2 + r4)|0;
+ r7 = r1 << 2;
+ r4 = (r4 + r7)|0;
+ r4 = r4 >> 2;
+ r7 = heap32[(r4+24)];
+ heap32[(r6+761)] = r7;
+ r7 = r7 >> 2;
+ heap32[(r6+762)] = r3;
+ heap32[(r7+3)] = r5;
+ r3 = 1;
+ heap32[(r4+24)] = r5;
+ r4 = r0 << 2;
+ r0 = r3 << r0;
+ r7 = heap32[(r6)];
+ r4 = (r2 + r4)|0;
+ r0 = r7 | r0;
+ r4 = r4 >> 2;
+ heap32[(r6)] = r0;
+ r0 = r3 << r1;
+ r1 = heap32[(r4+1)];
+ r0 = r1 | r0;
+ heap32[(r4+1)] = r0;
+ r0 = heap32[(r6+760)];
+ r0 = (r0 + 3040)|0;
+ r0 = r0 & -4;
+ r0 = (r2 + r0)|0;
+ r0 = r0 >> 2;
+ heap32[(r0)] = r5;
+ heap32[(r0+1)] = 2;
+ r_g0 = r2;
+ return;
+}
+else{
+ r0 = _2E_str643;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = 3060;
+ heap32[(g0+2)] = 1073744872;
+ printf(i7);
+ r0 = 0;
+ r_g0 = r0;
+ return;
+}
+}
+
+function _stricmp(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = heap32[(fp+1)];
+ r5 = 26;
+_1: while(true){
+ r2 = heap8[r1];
+ r3 = heap8[r0];
+ r4 = (r2 + -65)|0;
+ r2 = (r2 + -33)|0;
+ r6 = (r3 + -65)|0;
+ r3 = (r3 + -33)|0;
+ r2 = uint(r4) < uint(r5) ? r2 : r4;
+ r3 = uint(r6) < uint(r5) ? r3 : r6;
+ if(r2 !=r3) //_LBB730_3
+{
+break _1;
+}
+else{
+ r0 = (r0 + 1)|0;
+ r1 = (r1 + 1)|0;
+ if(r3 !=-65) //_LBB730_1
+{
+continue _1;
+}
+else{
+break _1;
+}
+}
+}
+ r0 = (r3 - r2)|0;
+ r_g0 = r0;
+ return;
+}
+
+function strcasecmp(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = heap32[(fp+1)];
+ r5 = 26;
+_1: while(true){
+ r2 = heap8[r1];
+ r3 = heap8[r0];
+ r4 = (r2 + -65)|0;
+ r2 = (r2 + -33)|0;
+ r6 = (r3 + -65)|0;
+ r3 = (r3 + -33)|0;
+ r2 = uint(r4) < uint(r5) ? r2 : r4;
+ r3 = uint(r6) < uint(r5) ? r3 : r6;
+ if(r2 !=r3) //_LBB731_3
+{
+break _1;
+}
+else{
+ r1 = (r1 + 1)|0;
+ r0 = (r0 + 1)|0;
+ if(r3 !=-65) //_LBB731_1
+{
+continue _1;
+}
+else{
+break _1;
+}
+}
+}
+ r0 = (r3 - r2)|0;
+ r_g0 = r0;
+ return;
+}
+
+function strcpy(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = heap32[(fp+1)];
+ r2 = r1 ^ r0;
+ r2 = r2 & 3;
+_1: do {
+ if(r2 ==0) //_LBB732_2
+{
+ r2 = r0 & 3;
+ if(r2 !=0) //_LBB732_4
+{
+ r2 = r0 | -4;
+_5: while(true){
+ if(r2 !=0) //_LBB732_7
+{
+ r3 = heapU8[r1];
+ r4 = (r0 + 1)|0;
+ r1 = (r1 + 1)|0;
+ r2 = (r2 + 1)|0;
+ heap8[r0] = r3;
+ r0 = r4;
+if(!(r3 !=0)) //_LBB732_5
+{
+break _1;
+}
+}
+else{
+break _5;
+}
+}
+}
+ r2 = r1 >> 2;
+ r2 = heap32[(r2)];
+ r3 = r2 & -2139062144;
+ r3 = r3 ^ -2139062144;
+ r4 = (r2 + -16843009)|0;
+ r3 = r3 & r4;
+_9: do {
+ if(r3 ==0) //_LBB732_11
+{
+ r1 = (r1 + 4)|0;
+_11: while(true){
+ r3 = r0 >> 2;
+ r4 = r1 >> 2;
+ heap32[(r3)] = r2;
+ r2 = heap32[(r4)];
+ r3 = r2 & -2139062144;
+ r0 = (r0 + 4)|0;
+ r1 = (r1 + 4)|0;
+ r3 = r3 ^ -2139062144;
+ r4 = (r2 + -16843009)|0;
+ r3 = r3 & r4;
+if(!(r3 ==0)) //_LBB732_15
+{
+break _9;
+}
+}
+}
+} while(0);
+ r1 = r2 & 255;
+ heap8[r0] = r2;
+if(!(r1 ==0)) //_LBB732_8
+{
+ r0 = (r0 + 1)|0;
+_15: while(true){
+ r2 = r2 >>> 8;
+ r1 = (r0 + 1)|0;
+ heap8[r0] = r2;
+ r3 = r2 & 255;
+ r0 = r1;
+ if(r3 ==0) //_LBB732_8
+{
+break _1;
+}
+else{
+continue _15;
+}
+}
+}
+}
+else{
+_17: while(true){
+ r2 = heapU8[r1];
+ r3 = (r0 + 1)|0;
+ r1 = (r1 + 1)|0;
+ heap8[r0] = r2;
+ r0 = r3;
+ if(r2 ==0) //_LBB732_8
+{
+break _1;
+}
+else{
+continue _17;
+}
+}
+}
+} while(0);
+ return;
+}
+
+function strcmp(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = heap32[(fp+1)];
+ r2 = r1 ^ r0;
+ r2 = r2 & 3;
+_1: do {
+ if(r2 ==0) //_LBB733_7
+{
+ r2 = r0 & 3;
+_3: do {
+ if(r2 !=0) //_LBB733_9
+{
+ r2 = r0 | -4;
+_5: while(true){
+ if(r2 !=0) //_LBB733_10
+{
+ r3 = heapU8[r0];
+ r4 = heapU8[r1];
+ if(r3 ==0) //_LBB733_12
+{
+break _5;
+}
+else{
+ r5 = r4 & 255;
+ if(r3 ==r5) //_LBB733_13
+{
+ r0 = (r0 + 1)|0;
+ r1 = (r1 + 1)|0;
+ r2 = (r2 + 1)|0;
+}
+else{
+break _5;
+}
+}
+}
+else{
+break _3;
+}
+}
+ r0 = r3 << 24;
+ r1 = r4 << 24;
+break _1;
+}
+} while(0);
+_11: while(true){
+ r2 = r0 >> 2;
+ r2 = heap32[(r2)];
+ r3 = r1 >> 2;
+ r4 = r2 & -2139062144;
+ r3 = heap32[(r3)];
+ r4 = r4 ^ -2139062144;
+ r5 = (r2 + -16843009)|0;
+ r4 = r4 & r5;
+ if(r4 !=0) //_LBB733_18
+{
+break _11;
+}
+else{
+ r4 = r3 & -2139062144;
+ r4 = r4 ^ -2139062144;
+ r5 = (r3 + -16843009)|0;
+ r4 = r4 & r5;
+ if(r4 !=0) //_LBB733_18
+{
+break _11;
+}
+else{
+ r0 = (r0 + 4)|0;
+ r1 = (r1 + 4)|0;
+if(!(r2 ==r3)) //_LBB733_15
+{
+break _11;
+}
+}
+}
+}
+ r0 = r2 & 255;
+_16: do {
+if(!(r0 ==0)) //_LBB733_21
+{
+ r0 = r2 & 255;
+ r1 = r3 & 255;
+if(!(r0 !=r1)) //_LBB733_21
+{
+__label__ = 19; //SET chanka
+_18: while(true){
+ r2 = r2 >>> 8;
+ r3 = r3 >>> 8;
+ r0 = r2 & 255;
+ if(r0 ==0) //_LBB733_24
+{
+break _16;
+}
+else{
+ r1 = r3 & 255;
+if(!(r0 ==r1)) //_LBB733_22
+{
+break _16;
+}
+}
+}
+}
+}
+} while(0);
+ r2 = r2 & 255;
+ r3 = r3 & 255;
+ r2 = (r2 - r3)|0;
+ r_g0 = r2;
+ return;
+}
+else{
+_22: while(true){
+ r2 = heapU8[r0];
+ r3 = heapU8[r1];
+ if(r2 ==0) //_LBB733_5
+{
+break _22;
+}
+else{
+ r4 = r3 & 255;
+ if(r2 ==r4) //_LBB733_2
+{
+ r0 = (r0 + 1)|0;
+ r1 = (r1 + 1)|0;
+}
+else{
+break _22;
+}
+}
+}
+ r0 = r2 << 24;
+ r1 = r3 << 24;
+}
+} while(0);
+ r0 = r0 >> 24;
+ r1 = r1 >> 24;
+ r0 = (r0 - r1)|0;
+ r_g0 = r0;
+ return;
+}
+
+function memmove(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ r1 = heap32[(fp)];
+_1: do {
+if(!(r0 ==r1)) //_LBB734_8
+{
+ r2 = heap32[(fp+2)];
+ if(uint(r0) <=uint(r1)) //_LBB734_5
+{
+if(!(r2 ==0)) //_LBB734_8
+{
+ r3 = 0;
+ r2 = (r3 - r2)|0;
+_6: while(true){
+ r3 = (r0 - r2)|0;
+ r4 = (r2 + 1)|0;
+ r2 = (r1 - r2)|0;
+ r3 = heapU8[r3+-1];
+ heap8[r2+-1] = r3;
+ r2 = r4;
+ if(r4 !=0) //_LBB734_7
+{
+continue _6;
+}
+else{
+break _1;
+}
+}
+}
+}
+else{
+if(!(r2 ==0)) //_LBB734_8
+{
+ r3 = r1;
+_10: while(true){
+ r4 = heapU8[r0];
+ r2 = (r2 + -1)|0;
+ r5 = (r3 + 1)|0;
+ r0 = (r0 + 1)|0;
+ heap8[r3] = r4;
+ r3 = r5;
+ if(r2 ==0) //_LBB734_8
+{
+break _1;
+}
+else{
+continue _10;
+}
+}
+}
+}
+}
+} while(0);
+ r_g0 = r1;
+ return;
+}
+
+function strncasecmp(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = heap32[(fp+1)];
+ r2 = heap32[(fp+2)];
+ r3 = 0;
+ r7 = 26;
+_1: while(true){
+ if(r3 >=r2) //_LBB735_5
+{
+__label__ = 5;
+break _1;
+}
+else{
+ r4 = heap8[r1+r3];
+ r5 = heap8[r0+r3];
+ r6 = (r4 + -65)|0;
+ r4 = (r4 + -33)|0;
+ r8 = (r5 + -65)|0;
+ r5 = (r5 + -33)|0;
+ r4 = uint(r6) < uint(r7) ? r4 : r6;
+ r5 = uint(r8) < uint(r7) ? r5 : r8;
+ if(r4 !=r5) //_LBB735_4
+{
+__label__ = 4;
+break _1;
+}
+else{
+ r3 = (r3 + 1)|0;
+ if(r5 !=-65) //_LBB735_1
+{
+continue _1;
+}
+else{
+__label__ = 4;
+break _1;
+}
+}
+}
+}
+switch(__label__ ){//multiple entries
+case 5:
+ r0 = 0;
+ r_g0 = r0;
+ return;
+break;
+case 4:
+ r0 = (r5 - r4)|0;
+ r_g0 = r0;
+ return;
+break;
+}
+}
+
+function strncmp(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+2)];
+ r1 = heap32[(fp)];
+ r2 = heap32[(fp+1)];
+ if(uint(r0) >uint(3)) //_LBB736_2
+{
+ r5 = r0 >>> 2;
+ r1 = (r1 + 2)|0;
+_3: while(true){
+ r3 = heapU8[r1+-2];
+ r4 = heapU8[r2];
+ if(r3 ==0) //_LBB736_5
+{
+__label__ = 5;
+break _3;
+}
+else{
+ r6 = r4 & 255;
+ if(r3 ==r6) //_LBB736_6
+{
+ r3 = heapU8[r1+-1];
+ r4 = heapU8[r2+1];
+ if(r3 ==0) //_LBB736_8
+{
+__label__ = 5;
+break _3;
+}
+else{
+ r6 = r4 & 255;
+ if(r3 ==r6) //_LBB736_9
+{
+ r3 = heapU8[r1];
+ r4 = heapU8[r2+2];
+ if(r3 ==0) //_LBB736_11
+{
+__label__ = 5;
+break _3;
+}
+else{
+ r6 = r4 & 255;
+ if(r3 ==r6) //_LBB736_12
+{
+ r3 = heapU8[r1+1];
+ r4 = heapU8[r2+3];
+ if(r3 ==0) //_LBB736_14
+{
+__label__ = 5;
+break _3;
+}
+else{
+ r6 = r4 & 255;
+ if(r3 ==r6) //_LBB736_15
+{
+ r5 = (r5 + -1)|0;
+ r1 = (r1 + 4)|0;
+ r2 = (r2 + 4)|0;
+ if(r5 !=0) //_LBB736_3
+{
+__label__ = 3;
+}
+else{
+__label__ = 13;
+break _3;
+}
+}
+else{
+__label__ = 5;
+break _3;
+}
+}
+}
+else{
+__label__ = 5;
+break _3;
+}
+}
+}
+else{
+__label__ = 5;
+break _3;
+}
+}
+}
+else{
+__label__ = 5;
+break _3;
+}
+}
+}
+switch(__label__ ){//multiple entries
+case 5:
+ r1 = r4 & 255;
+ r1 = (r3 - r1)|0;
+ r_g0 = r1;
+ return;
+break;
+case 13:
+ r0 = r0 & 3;
+ r1 = (r1 + -2)|0;
+break;
+}
+}
+else{
+ r3 = 0;
+ r4 = r3;
+}
+_17: while(true){
+ if(r0 !=0) //_LBB736_17
+{
+ r3 = heapU8[r1];
+ r4 = heapU8[r2];
+ if(r3 ==0) //_LBB736_19
+{
+__label__ = 16;
+break _17;
+}
+else{
+ r5 = r4 & 255;
+ if(r3 ==r5) //_LBB736_20
+{
+ r0 = (r0 + -1)|0;
+ r1 = (r1 + 1)|0;
+ r2 = (r2 + 1)|0;
+continue _17;
+}
+else{
+__label__ = 16;
+break _17;
+}
+}
+}
+else{
+__label__ = 19;
+break _17;
+}
+}
+switch(__label__ ){//multiple entries
+case 16:
+ r0 = r4 & 255;
+ r0 = (r3 - r0)|0;
+ r_g0 = r0;
+ return;
+break;
+case 19:
+ r0 = r3 & 255;
+ r1 = r4 & 255;
+ r0 = (r0 - r1)|0;
+ r_g0 = r0;
+ return;
+break;
+}
+}
+
+function quicksort(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+ var r13;
+ var r14;
+ var r15;
+ var r16;
+ var r17;
+ var r18;
+ var r19;
+ var r20;
+ var r21;
+ var r22;
+ var r23;
+ var r24;
+ var r25;
+var __label__ = 0;
+ i7 = sp + -40;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+2)];
+ heap32[(fp+-4)] = r0;
+ r1 = heap32[(fp+1)];
+ heap32[(fp+-3)] = r1;
+if(!(r0 <=r1)) //_LBB737_37
+{
+ r0 = heap32[(fp)];
+ r1 = heap32[(fp+3)];
+ r2 = 4;
+ r3 = heap32[(fp+-4)];
+ r4 = r3 << 2;
+ r5 = (r0 + r4)|0;
+ r6 = -4;
+ r7 = -8;
+ r2 = (r2 - r0)|0;
+ r3 = (r3 + -1)|0;
+ r8 = (r0 + 4)|0;
+ r6 = (r6 - r0)|0;
+ heap32[(fp+-1)] = r6;
+ r6 = (r5 + -4)|0;
+ heap32[(fp+-2)] = r6;
+ r6 = (r7 - r0)|0;
+ r2 = (r2 - r4)|0;
+ heap32[(fp+-6)] = r2;
+_3: while(true){
+ r2 = heap32[(fp+-3)];
+ r4 = (r2 + -1)|0;
+ r7 = (r2 + 1)|0;
+ r9 = -1;
+ r10 = -2;
+ heap32[(fp+-5)] = r2;
+ r2 = heap32[(fp+-4)];
+ r11 = r4;
+_5: while(true){
+ r12 = r4 << 2;
+ r13 = (r0 + r12)|0;
+ r14 = (r12 + 4)|0;
+ r15 = heap32[(fp+-1)];
+ r15 = (r15 - r12)|0;
+ r16 = (r8 + r12)|0;
+ r12 = (r6 - r12)|0;
+_7: while(true){
+ r17 = r12;
+ r18 = r16;
+ r19 = r15;
+ r20 = r14;
+ r21 = r4;
+ r22 = r13;
+ if(r3 ==r21) //_LBB737_6
+{
+break _7;
+}
+else{
+ r4 = (r0 + r20)|0;
+ heap32[(g0)] = r4;
+ heap32[(g0+1)] = r5;
+ r13 = (r22 + 4)|0;
+ r4 = (r21 + 1)|0;
+ r14 = (r20 + 4)|0;
+ r15 = (r19 + -4)|0;
+ r16 = (r18 + 4)|0;
+ r12 = (r17 + -4)|0;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+ r23 = r_g0;
+if(!(r23 <0)) //_LBB737_4
+{
+break _7;
+}
+}
+}
+ r4 = r2 << 2;
+ r12 = (r0 + r4)|0;
+ r13 = 0;
+ r14 = (r13 - r12)|0;
+ r4 = (r21 + 1)|0;
+ r15 = (r12 + -4)|0;
+ r16 = r14;
+_11: while(true){
+ r23 = r14;
+ r24 = r16;
+ r25 = r2;
+ r2 = (r15 + r13)|0;
+ heap32[(g0)] = r5;
+ heap32[(g0+1)] = r2;
+ r13 = (r13 + -4)|0;
+ r2 = (r25 + -1)|0;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+ r14 = r_g0;
+ if(r14 >-1) //_LBB737_9
+{
+break _11;
+}
+else{
+ r16 = (r24 + 4)|0;
+ r14 = (r23 + 4)|0;
+if(!(r7 !=r25)) //_LBB737_7
+{
+break _11;
+}
+}
+}
+ if(r4 >=r2) //_LBB737_20
+{
+break _5;
+}
+else{
+ r17 = 0;
+_16: while(true){
+ r22 = (r17 - r19)|0;
+ r14 = (r17 - r24)|0;
+ r15 = heapU8[r22];
+ r14 = heapU8[r14+-4];
+ r16 = (r17 + 1)|0;
+ r17 = (r17 - r23)|0;
+ heap8[r22] = r14;
+ heap8[r17+-4] = r15;
+ r17 = r16;
+if(!(r16 !=4)) //_LBB737_11
+{
+break _16;
+}
+}
+ r17 = (r0 + r20)|0;
+ heap32[(g0)] = r17;
+ heap32[(g0+1)] = r5;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+ r17 = r_g0;
+_19: do {
+ if(r17 ==0) //_LBB737_14
+{
+ r17 = r11 << 2;
+ r11 = (r11 + 1)|0;
+ r17 = (r8 + r17)|0;
+ r22 = 0;
+_21: while(true){
+ r14 = (r18 - r22)|0;
+ r15 = (r17 - r22)|0;
+ r16 = heapU8[r15];
+ r19 = heapU8[r14];
+ r22 = (r22 + -1)|0;
+ heap8[r15] = r19;
+ heap8[r14] = r16;
+if(!(r22 !=-4)) //_LBB737_15
+{
+break _19;
+}
+}
+}
+} while(0);
+ r17 = (r12 + r13)|0;
+ heap32[(g0)] = r5;
+ heap32[(g0+1)] = r17;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+ r17 = r_g0;
+if(!(r17 !=0)) //_LBB737_3
+{
+ r4 = (r21 + 1)|0;
+ r17 = 0;
+_25: while(true){
+ r18 = heap32[(fp+-2)];
+ r18 = (r17 + r18)|0;
+ r21 = r10 << 2;
+ r18 = (r18 - r21)|0;
+ r21 = (r17 + r12)|0;
+ r21 = heapU8[r21+r13];
+ r22 = heapU8[r18+-8];
+ r14 = (r17 + r12)|0;
+ r17 = (r17 + 1)|0;
+ heap8[r14+r13] = r22;
+ heap8[r18+-8] = r21;
+ if(r17 ==4) //_LBB737_18
+{
+break _25;
+}
+}
+ r10 = (r10 + 1)|0;
+ r9 = (r9 + 1)|0;
+}
+}
+}
+ r2 = heap32[(fp+-4)];
+ r2 = (r2 - r10)|0;
+ r4 = 0;
+ r2 = (r2 + -2)|0;
+ r7 = (r4 - r22)|0;
+_29: while(true){
+ r12 = (r5 - r4)|0;
+ r13 = (r18 - r4)|0;
+ r14 = heapU8[r13];
+ r15 = heapU8[r12];
+ r4 = (r4 + -1)|0;
+ heap8[r13] = r15;
+ heap8[r12] = r14;
+if(!(r4 !=-4)) //_LBB737_21
+{
+break _29;
+}
+}
+ r4 = (r21 + 2)|0;
+ r12 = heap32[(fp+-3)];
+ if(r12 <r11) //_LBB737_24
+{
+ r13 = r12 << 2;
+ r14 = 0;
+ r13 = (r0 + r13)|0;
+ r13 = (r14 - r13)|0;
+ r12 = (r11 - r12)|0;
+_34: while(true){
+ r15 = r14;
+_36: while(true){
+ r16 = (r15 - r7)|0;
+ r18 = (r15 - r13)|0;
+ r19 = heapU8[r18];
+ r20 = heapU8[r16];
+ r15 = (r15 + 1)|0;
+ heap8[r18] = r20;
+ heap8[r16] = r19;
+if(!(r15 !=4)) //_LBB737_26
+{
+break _36;
+}
+}
+ r12 = (r12 + -1)|0;
+ r13 = (r13 + -4)|0;
+ r7 = (r7 + 4)|0;
+if(!(r12 !=0)) //_LBB737_25
+{
+break _34;
+}
+}
+ r7 = heap32[(fp+-3)];
+ r7 = (r7 - r11)|0;
+ r7 = (r7 + r21)|0;
+}
+else{
+ r7 = r21;
+}
+ if(r3 >r2) //_LBB737_35
+{
+ r2 = heap32[(fp+-6)];
+_44: while(true){
+ r4 = 0;
+_46: while(true){
+ r11 = (r4 - r2)|0;
+ r12 = (r4 - r17)|0;
+ r13 = heapU8[r12];
+ r14 = heapU8[r11];
+ r4 = (r4 + 1)|0;
+ heap8[r12] = r14;
+ heap8[r11] = r13;
+if(!(r4 !=4)) //_LBB737_30
+{
+break _46;
+}
+}
+ r9 = (r9 + -1)|0;
+ r17 = (r17 + -4)|0;
+ r2 = (r2 + 4)|0;
+if(!(r9 !=0)) //_LBB737_29
+{
+break _44;
+}
+}
+ r2 = (r10 + r21)|0;
+ r2 = (r2 + 3)|0;
+ heap32[(fp+-3)] = r2;
+}
+else{
+ heap32[(fp+-3)] = r4;
+}
+ heap32[(g0)] = r0;
+ r2 = heap32[(fp+-5)];
+ heap32[(g0+1)] = r2;
+ heap32[(g0+2)] = r7;
+ heap32[(g0+3)] = r1;
+ quicksort(i7);
+ r4 = heap32[(fp+-3)];
+ r2 = heap32[(fp+-4)];
+ if(r4 <r2) //_LBB737_2
+{
+continue _3;
+}
+else{
+break _3;
+}
+}
+}
+ return;
+}
+
+function __dtostr(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+var __label__ = 0;
+ i7 = sp + -40;var g0 = i7>>2; // save stack
+ f0 = llvm_readDouble((sp));
+ r0 = sp + -8;
+ llvm_writeDouble((sp+-8),f0);
+ r0 = r0 >> 2;
+ r0 = heap32[(r0+1)];
+ r1 = heap32[(fp+2)];
+ r2 = heap32[(fp+3)];
+ r3 = heap32[(fp+4)];
+ r4 = heap32[(fp+5)];
+ r5 = heap32[(fp+6)];
+ r6 = heap32[(fp+-2)];
+ if(r0 >2146435071) //_LBB738_3
+{
+ r7 = r0 ^ 2146959360;
+ r7 = r6 | r7;
+ if(r7 ==0) //_LBB738_13
+{
+__label__ = 13;
+}
+else{
+ r7 = r0 ^ 2146435072;
+ r6 = r6 | r7;
+ if(r6 !=0) //_LBB738_21
+{
+__label__ = 20;
+}
+else{
+__label__ = 5;
+}
+}
+}
+else{
+ r7 = r0 ^ -1048576;
+ r7 = r6 | r7;
+ if(r7 ==0) //_LBB738_5
+{
+__label__ = 5;
+}
+else{
+ r7 = r0 ^ -524288;
+ r6 = r6 | r7;
+ if(r6 ==0) //_LBB738_13
+{
+__label__ = 13;
+}
+else{
+__label__ = 20;
+}
+}
+}
+_6: do {
+switch(__label__ ){//multiple entries
+case 13:
+ if(r2 >0) //_LBB738_15
+{
+ r0 = (r2 + -1)|0;
+ r3 = 2;
+ r4 = 0;
+ r5 = (r2 + 2)|0;
+ r0 = uint(r0) > uint(r3) ? r0 : r3;
+ r3 = (r4 - r2)|0;
+ r0 = (r5 - r0)|0;
+ r4 = _2E_str9655;
+ r5 = r1;
+_10: while(true){
+ r6 = heapU8[r4];
+ r0 = (r0 + -1)|0;
+ r7 = (r5 + 1)|0;
+ r4 = (r4 + 1)|0;
+ heap8[r5] = r6;
+ r5 = r7;
+if(!(r0 !=0)) //_LBB738_16
+{
+break _10;
+}
+}
+ r0 = -3;
+ r4 = 3;
+ r0 = uint(r3) > uint(r0) ? r2 : r4;
+}
+else{
+ r0 = 0;
+}
+ if(r0 >=r2) //_LBB738_20
+{
+ r_g0 = r0;
+ return;
+}
+else{
+__label__ = 11;
+break _6;
+}
+break;
+case 20:
+ f1 = 0;
+ if(f0 !=f1) //_LBB738_32
+{
+ r0 = r0 >>> 20;
+ r0 = r0 & 2047;
+ r0 = (r0 + -1023)|0;
+ f2 = r0; //fitod r0, f2
+ f3 = 0.3010299956639812;
+ f2 = f2*f3;
+ r0 = f2|0;
+ r6 = (r0 + 1)|0;
+ if(f0 <f1) //_LBB738_34
+{
+ f1 = -f0;
+ r2 = (r2 + -1)|0;
+ r7 = (r1 + 1)|0;
+ r8 = 45;
+ heap8[r1] = r8;
+}
+else{
+ r7 = r1;
+ f1 = f0;
+}
+_23: do {
+ if(r4 ==0) //_LBB738_37
+{
+ f2 = 0.5;
+}
+else{
+ f2 = 0.5;
+ r8 = r4;
+ f3 = 0.10000000000000001;
+_26: while(true){
+ r8 = (r8 + -1)|0;
+ f2 = f2*f3;
+if(!(r8 !=0)) //_LBB738_38
+{
+break _23;
+}
+}
+}
+} while(0);
+ f1 = f1+f2;
+ f2 = 1;
+ if(f1 <f2) //_LBB738_41
+{
+ r2 = (r2 + -1)|0;
+ r8 = (r7 + 1)|0;
+ r9 = 48;
+ heap8[r7] = r9;
+ r7 = r8;
+}
+_32: do {
+ if(r6 >0) //_LBB738_44
+{
+_34: do {
+ if(uint(r6) >uint(10)) //_LBB738_46
+{
+ r0 = (r0 + 1)|0;
+ f2 = 10;
+ f3 = 10000000000;
+_36: while(true){
+ r0 = (r0 + -10)|0;
+ f2 = f2*f3;
+if(!(uint(r0) >uint(10))) //_LBB738_47
+{
+break _34;
+}
+}
+}
+else{
+ f2 = 10;
+ r0 = r6;
+}
+} while(0);
+ if(uint(r0) >uint(1)) //_LBB738_50
+{
+ r0 = (r0 + -1)|0;
+ f3 = 10;
+_42: while(true){
+ r0 = (r0 + -1)|0;
+ f2 = f2*f3;
+if(!(r0 !=0)) //_LBB738_51
+{
+break _42;
+}
+}
+ r0 = 1;
+}
+else{
+ r0 = 1;
+}
+_46: while(true){
+ f3 = 0.90000000000000002;
+ if(f2 >f3) //_LBB738_53
+{
+ f3 = f1/f2;
+ r8 = f3|0;
+ if(r0 ==0) //_LBB738_56
+{
+__label__ = 52;
+}
+else{
+ r9 = r8 & 255;
+ if(r9 !=0) //_LBB738_56
+{
+__label__ = 52;
+}
+else{
+__label__ = 64;
+}
+}
+if (__label__ == 52){
+ r0 = (r8 + 48)|0;
+ heap8[r7] = r0;
+ if(r2 !=0) //_LBB738_70
+{
+ r0 = r8 << 24;
+ r0 = r0 >> 24;
+ f3 = r0; //fitod r0, f3
+ f3 = f3*f2;
+ r7 = (r7 + 1)|0;
+ f1 = f1-f3;
+ r2 = (r2 + -1)|0;
+ r0 = 0;
+}
+else{
+break _46;
+}
+}
+ f3 = 10;
+ f2 = f2/f3;
+}
+else{
+__label__ = 66;
+break _32;
+}
+}
+ f0 = f0/f2;
+ llvm_writeDouble((i7),f0);
+ heap32[(g0+2)] = r1;
+ heap32[(g0+3)] = r2;
+ heap32[(g0+4)] = r3;
+ heap32[(g0+5)] = r4;
+ heap32[(g0+6)] = 0;
+ __dtostr(i7);
+ r0 = r_g0;
+ if(r0 ==0) //_LBB738_92
+{
+__label__ = 83;
+}
+else{
+ r3 = (r0 + r7)|0;
+ r7 = (r3 + 1)|0;
+ if(r2 !=r0) //_LBB738_60
+{
+ r3 = (r3 + 2)|0;
+ r4 = 101;
+ heap8[r7] = r4;
+ r7 = r3;
+}
+ r2 = (r2 + -1)|0;
+ r3 = (r2 - r0)|0;
+_60: do {
+ if(r6 <1000) //_LBB738_66
+{
+ if(r6 <100) //_LBB738_93
+{
+ if(r6 >9) //_LBB738_95
+{
+__label__ = 90;
+break _60;
+}
+else{
+__label__ = 91;
+break _60;
+}
+}
+else{
+__label__ = 87;
+break _60;
+}
+}
+else{
+ if(r2 !=r0) //_LBB738_64
+{
+ r0 = (r6 / 1000)|0;
+ r2 = (r7 + 1)|0;
+ r0 = (r0 + 48)|0;
+ heap8[r7] = r0;
+ r7 = r2;
+}
+ r3 = (r3 + -1)|0;
+ r6 = (r6 % 1000)|0;
+__label__ = 87;
+}
+} while(0);
+if (__label__ == 87){
+ if(r3 !=0) //_LBB738_97
+{
+ r0 = (r6 / 100)|0;
+ r2 = (r7 + 1)|0;
+ r0 = (r0 + 48)|0;
+ heap8[r7] = r0;
+ r7 = r2;
+}
+ r3 = (r3 + -1)|0;
+ r6 = (r6 % 100)|0;
+__label__ = 90;
+}
+if (__label__ == 90){
+ if(r3 !=0) //_LBB738_101
+{
+ r0 = (r6 / 10)|0;
+ r2 = (r7 + 1)|0;
+ r0 = (r0 + 48)|0;
+ heap8[r7] = r0;
+ r7 = r2;
+}
+ r3 = (r3 + -1)|0;
+ r6 = (r6 % 10)|0;
+}
+ if(r3 !=0) //_LBB738_68
+{
+ r0 = (r6 + 48)|0;
+ heap8[r7] = r0;
+ if(r3 ==1) //_LBB738_92
+{
+__label__ = 83;
+}
+else{
+ r7 = (r7 + 1)|0;
+__label__ = 82;
+}
+}
+else{
+__label__ = 82;
+}
+}
+}
+else{
+ f2 = 0.10000000000000001;
+__label__ = 66;
+}
+} while(0);
+_81: do {
+if (__label__ == 66){
+ if(r7 ==r1) //_LBB738_75
+{
+ if(r2 ==0) //_LBB738_92
+{
+__label__ = 83;
+break _81;
+}
+else{
+ r2 = (r2 + -1)|0;
+ r6 = (r7 + 1)|0;
+ r0 = 48;
+ heap8[r7] = r0;
+ r7 = r6;
+}
+}
+if(!(r4 !=0)) //_LBB738_80
+{
+ r6 = 1;
+ r6 = (r6 - r1)|0;
+ r6 = (r6 + r7)|0;
+if(!(uint(r6) <uint(r3))) //_LBB738_80
+{
+__label__ = 82;
+break _81;
+}
+}
+ if(r2 ==0) //_LBB738_92
+{
+__label__ = 83;
+}
+else{
+ r6 = (r2 + -1)|0;
+ r0 = (r7 + 1)|0;
+ r2 = 46;
+ heap8[r7] = r2;
+ if(r5 ==0) //_LBB738_83
+{
+if(!(r4 !=0)) //_LBB738_85
+{
+ r3 = (r1 + r3)|0;
+ r3 = (r3 + 1)|0;
+ r4 = (r3 - r0)|0;
+}
+}
+else{
+ r3 = r4 == 0 ? r3 : r4;
+ r3 = (r1 + r3)|0;
+ r3 = (r3 + 1)|0;
+ r4 = (r3 - r0)|0;
+}
+ if(uint(r4) >uint(r6)) //_LBB738_92
+{
+__label__ = 83;
+}
+else{
+ if(r4 !=0) //_LBB738_88
+{
+ r3 = (r4 + 1)|0;
+ r6 = (r7 + 1)|0;
+ f3 = 10;
+_99: while(true){
+ f0 = f1/f2;
+ r0 = f0|0;
+ r2 = r0 << 24;
+ r2 = r2 >> 24;
+ f0 = r2; //fitod r2, f0
+ f0 = f0*f2;
+ r4 = (r4 + -1)|0;
+ f2 = f2/f3;
+ f1 = f1-f0;
+ r2 = (r6 + 1)|0;
+ r0 = (r0 + 48)|0;
+ heap8[r6] = r0;
+ r6 = r2;
+if(!(r4 !=0)) //_LBB738_89
+{
+break _99;
+}
+}
+ r7 = (r7 + r3)|0;
+__label__ = 82;
+}
+else{
+ r7 = r0;
+__label__ = 82;
+}
+}
+}
+}
+} while(0);
+switch(__label__ ){//multiple entries
+case 83:
+ r1 = 0;
+ r_g0 = r1;
+ return;
+break;
+case 82:
+ r3 = 0;
+ heap8[r7] = r3;
+ r1 = (r7 - r1)|0;
+ r_g0 = r1;
+ return;
+break;
+}
+}
+else{
+ r3 = 1;
+ r5 = (r4 + 2)|0;
+ r4 = r4 == 0 ? r3 : r5;
+ r5 = 8;
+ r2 = uint(r4) > uint(r2) ? r5 : r4;
+ if(r2 ==0) //_LBB738_24
+{
+__label__ = 23;
+}
+else{
+ if(r0 <0) //_LBB738_25
+{
+ r0 = 45;
+ heap8[r1] = r0;
+ r0 = r3;
+__label__ = 25;
+}
+else{
+__label__ = 23;
+}
+}
+if (__label__ == 23){
+ r0 = 0;
+}
+ if(uint(r0) <uint(r2)) //_LBB738_28
+{
+ r5 = 48;
+_115: while(true){
+ r4 = (r0 + 1)|0;
+ heap8[r1+r0] = r5;
+ r0 = r4;
+if(!(r2 !=r4)) //_LBB738_29
+{
+break _115;
+}
+}
+ r0 = r2;
+}
+ r2 = 2;
+ r4 = heapU8[r1];
+ r2 = r4 == 48 ? r3 : r2;
+ r3 = 46;
+ r4 = 0;
+ heap8[r1+r2] = r3;
+ heap8[r1+r0] = r4;
+ r_g0 = r0;
+ return;
+}
+break;
+case 5:
+ if(r2 >0) //_LBB738_7
+{
+ r0 = (r2 + -1)|0;
+ r3 = 2;
+ r4 = 0;
+ r5 = (r2 + 2)|0;
+ r0 = uint(r0) > uint(r3) ? r0 : r3;
+ r3 = (r4 - r2)|0;
+ r0 = (r5 - r0)|0;
+ r4 = _2E_str7654;
+ r5 = r1;
+_122: while(true){
+ r6 = heapU8[r4];
+ r0 = (r0 + -1)|0;
+ r7 = (r5 + 1)|0;
+ r4 = (r4 + 1)|0;
+ heap8[r5] = r6;
+ r5 = r7;
+if(!(r0 !=0)) //_LBB738_8
+{
+break _122;
+}
+}
+ r0 = -3;
+ r4 = 3;
+ r0 = uint(r3) > uint(r0) ? r2 : r4;
+}
+else{
+ r0 = 0;
+}
+ if(r0 >=r2) //_LBB738_12
+{
+__label__ = 12;
+}
+else{
+__label__ = 11;
+}
+break;
+}
+} while(0);
+if (__label__ == 11){
+ r2 = 0;
+ heap8[r1+r0] = r2;
+ r0 = (r0 + 1)|0;
+}
+ r_g0 = r0;
+ return;
+}
+
+function write_pad(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+2)];
+ if(r0 >0) //_LBB739_2
+{
+ r1 = heap32[(fp)];
+ r1 = r1 >> 2;
+ r2 = heap32[(r1)];
+ r2 = (r2 + r0)|0;
+ if(uint(r2) >=uint(r0)) //_LBB739_4
+{
+ r2 = heap32[(fp+1)];
+ r3 = heap32[(fp+3)];
+ if(uint(r0) >uint(15)) //_LBB739_6
+{
+ r4 = 48;
+ r4 = r3 == r4;
+ r4 = r4 & 1;
+ r5 = _ZL8pad_line;
+ r4 = r4 << 5;
+ r4 = (r5 + r4)|0;
+ r5 = 0;
+_7: while(true){
+ r6 = r2 >> 2;
+ r7 = heap32[(r6+1)];
+ r6 = heap32[(r6)];
+ heap32[(g0)] = r4;
+ heap32[(g0+1)] = 16;
+ heap32[(g0+2)] = r6;
+ r5 = (r5 + -16)|0;
+ __FUNCTION_TABLE__[(r7)>>2](i7);
+ r6 = (r0 + r5)|0;
+if(!(uint(r6) >uint(15))) //_LBB739_7
+{
+break _7;
+}
+}
+ r0 = 0;
+ r4 = (r0 - r5)|0;
+ if(r6 ==0) //_LBB739_10
+{
+__label__ = 11;
+}
+else{
+ r0 = r6;
+__label__ = 10;
+}
+}
+else{
+ r4 = 0;
+__label__ = 10;
+}
+if (__label__ == 10){
+ r5 = 48;
+ r2 = r2 >> 2;
+ r3 = r3 == r5;
+ r3 = r3 & 1;
+ r5 = heap32[(r2+1)];
+ r2 = heap32[(r2)];
+ r6 = _ZL8pad_line;
+ r3 = r3 << 5;
+ r3 = (r6 + r3)|0;
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r0;
+ heap32[(g0+2)] = r2;
+ r4 = (r4 + r0)|0;
+ __FUNCTION_TABLE__[(r5)>>2](i7);
+}
+ r0 = heap32[(r1)];
+ r0 = (r0 + r4)|0;
+ heap32[(r1)] = r0;
+ r0 = 0;
+}
+else{
+ r0 = -1;
+}
+}
+else{
+ r0 = 0;
+}
+ r_g0 = r0;
+ return;
+}
+
+function sgetc(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r1 = heap32[(r0)];
+ r2 = heapU8[r1];
+ r1 = (r1 + 1)|0;
+ heap32[(r0)] = r1;
+ if(r2 ==0) //_LBB740_2
+{
+ r0 = -1;
+ r_g0 = r0;
+ return;
+}
+else{
+ r_g0 = r2;
+ return;
+}
+}
+
+function sputc(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ r0 = r0 >> 2;
+ r1 = heap32[(r0)];
+ r2 = (r1 + -1)|0;
+ heap32[(r0)] = r2;
+ r0 = heapU8[r1+-1];
+ r1 = heap32[(fp)];
+ r2 = -1;
+ r0 = r0 == r1 ? r1 : r2;
+ r_g0 = r0;
+ return;
+}
+
+function memset(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+2)];
+ r1 = heap32[(fp)];
+if(!(r0 ==0)) //_LBB742_3
+{
+ r2 = heap32[(fp+1)];
+ r3 = r1;
+_3: while(true){
+ r0 = (r0 + -1)|0;
+ r4 = (r3 + 1)|0;
+ heap8[r3] = r2;
+ r3 = r4;
+ if(r0 !=0) //_LBB742_2
+{
+continue _3;
+}
+else{
+break _3;
+}
+}
+}
+ r_g0 = r1;
+ return;
+}
+
+function memcpy(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = heap32[(fp+1)];
+ r2 = heap32[(fp+2)];
+ r3 = r1 ^ r0;
+ r3 = r3 & 3;
+_1: do {
+ if(r3 !=0) //_LBB743_2
+{
+__label__ = 2;
+}
+else{
+ if(uint(r2) >uint(4)) //_LBB743_3
+{
+ r3 = r0 & 3;
+ if(r3 !=0) //_LBB743_5
+{
+ r3 = (r3 + -5)|0;
+ r4 = r2 ^ -1;
+ r3 = uint(r3) < uint(r4) ? r4 : r3;
+ r4 = (r3 + r2)|0;
+ r3 = r3 ^ -1;
+ r4 = (r4 + 1)|0;
+ r6 = (r1 + r3)|0;
+ r5 = (r0 + r3)|0;
+ r3 = r0 | -4;
+ r7 = r0;
+_6: while(true){
+ if(r3 ==0) //_LBB743_9
+{
+break _6;
+}
+else{
+ if(r2 ==0) //_LBB743_20
+{
+__label__ = 19;
+break _1;
+}
+else{
+ r8 = heapU8[r1];
+ r2 = (r2 + -1)|0;
+ r3 = (r3 + 1)|0;
+ r1 = (r1 + 1)|0;
+ r9 = (r7 + 1)|0;
+ heap8[r7] = r8;
+ r7 = r9;
+}
+}
+}
+ if(r4 ==-1) //_LBB743_20
+{
+__label__ = 19;
+break _1;
+}
+else{
+ r2 = r4;
+ r1 = r6;
+}
+}
+else{
+ r5 = r0;
+}
+ if(uint(r2) >uint(3)) //_LBB743_13
+{
+ r6 = r5;
+ r4 = r1;
+_16: while(true){
+ r7 = r4 >> 2;
+ r2 = (r2 + -4)|0;
+ r4 = (r4 + 4)|0;
+ r3 = (r6 + 4)|0;
+ r6 = r6 >> 2;
+ r7 = heap32[(r7)];
+ heap32[(r6)] = r7;
+ r6 = r3;
+ if(uint(r2) >uint(3)) //_LBB743_14
+{
+continue _16;
+}
+else{
+__label__ = 15;
+break _1;
+}
+}
+}
+else{
+ r4 = r1;
+ r3 = r5;
+__label__ = 15;
+}
+}
+else{
+__label__ = 2;
+}
+}
+} while(0);
+if (__label__ == 2){
+ r3 = 0;
+ r4 = r3;
+ r5 = r0;
+__label__ = 15;
+}
+_21: do {
+if (__label__ == 15){
+if(!(r2 ==0)) //_LBB743_20
+{
+ if(r3 !=0) //_LBB743_18
+{
+ r1 = r4;
+ r5 = r3;
+}
+_26: while(true){
+ r3 = heapU8[r1];
+ r2 = (r2 + -1)|0;
+ r4 = (r5 + 1)|0;
+ r1 = (r1 + 1)|0;
+ heap8[r5] = r3;
+ r5 = r4;
+ if(r2 !=0) //_LBB743_19
+{
+continue _26;
+}
+else{
+break _21;
+}
+}
+}
+}
+} while(0);
+ r_g0 = r0;
+ return;
+}
+
+function swrite(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+2)];
+ r0 = r0 >> 2;
+ r1 = heap32[(r0+1)];
+ r2 = heap32[(r0+2)];
+ r3 = heap32[(fp+1)];
+if(!(r2 ==r1)) //_LBB744_5
+{
+ r2 = (r2 - r1)|0;
+ r4 = heap32[(r0)];
+ r2 = uint(r2) < uint(r3) ? r2 : r3;
+ if(r4 !=0) //_LBB744_3
+{
+ r5 = heap32[(fp)];
+ r1 = (r4 + r1)|0;
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r5;
+ heap32[(g0+2)] = r2;
+ memcpy(i7);
+ r1 = heap32[(r0+1)];
+ r4 = heap32[(r0)];
+ r1 = (r1 + r2)|0;
+ r5 = 0;
+ heap8[r4+r1] = r5;
+ r1 = heap32[(r0+1)];
+}
+ r1 = (r1 + r2)|0;
+ heap32[(r0+1)] = r1;
+}
+ r_g0 = r3;
+ return;
+}
+
+function __sync_fetch_and_add_4(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r1 = heap32[(fp+1)];
+ r2 = heap32[(r0)];
+ r1 = (r2 + r1)|0;
+ heap32[(r0)] = r1;
+ r_g0 = r2;
+ return;
+}
+
+function __muldi3(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+ var r13;
+ var r14;
+ var r15;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ r1 = heap32[(fp)];
+ r2 = heap32[(fp+2)];
+ r3 = heap32[(fp+3)];
+ if(r0 <0) //_LBB746_2
+{
+ r5 = 0;
+ r4 = 1;
+ r0 = (r5 - r0)|0;
+ r6 = r1 != 0 ? r4 : r5;
+ r1 = (r5 - r1)|0;
+ r0 = (r0 - r6)|0;
+}
+else{
+ r4 = 0;
+}
+ if(r3 <0) //_LBB746_5
+{
+ r5 = 0;
+ r6 = 1;
+ r3 = (r5 - r3)|0;
+ r6 = r2 != 0 ? r6 : r5;
+ r4 = r4 ^ 1;
+ r2 = (r5 - r2)|0;
+ r3 = (r3 - r6)|0;
+}
+ r5 = r2 & 65535;
+ r6 = r1 & 65535;
+ r7 = r3 | r0;
+ r8 = (r5 * r6)|0;
+ r9 = r2 | r1;
+ r9 = r9 >>> 16;
+ if(r9 !=0) //_LBB746_8
+{
+ r9 = r1 >>> 16;
+ r10 = r2 >>> 16;
+ r11 = (r10 - r5)|0;
+ r12 = (r5 - r10)|0;
+ r13 = (r6 - r9)|0;
+ r14 = (r9 - r6)|0;
+ r15 = (r10 * r9)|0;
+ r11 = uint(r5) < uint(r10) ? r11 : r12;
+ r12 = uint(r9) < uint(r6) ? r13 : r14;
+ r11 = (r11 * r12)|0;
+ r12 = r15 >>> 16;
+ r12 = (r12 + r15)|0;
+ r13 = r15 << 16;
+ r14 = r11 << 16;
+ r6 = uint(r9) < uint(r6);
+ r5 = uint(r5) < uint(r10);
+ r5 = r6 ^ r5;
+ r5 = r5 & 1;
+ if(r5 ==0) //_LBB746_10
+{
+ r5 = (r14 + r13)|0;
+ r6 = uint(r5) < uint(r13);
+ r11 = r11 >>> 16;
+ r11 = (r11 + r12)|0;
+ r6 = r6 & 1;
+ r11 = (r11 + r6)|0;
+}
+else{
+ r5 = (r13 - r14)|0;
+ r11 = r11 >>> 16;
+ r14 = -1;
+ r6 = 0;
+ r11 = (r12 - r11)|0;
+ r12 = uint(r5) > uint(r13) ? r14 : r6;
+ r11 = (r11 + r12)|0;
+}
+ r6 = r8 << 16;
+ r6 = (r5 + r6)|0;
+ r9 = (r6 + r8)|0;
+ r5 = uint(r6) < uint(r5);
+ r6 = r8 >>> 16;
+ r8 = uint(r9) < uint(r8);
+ r6 = (r11 + r6)|0;
+ r5 = r5 & 1;
+ r5 = (r6 + r5)|0;
+ r8 = r8 & 1;
+ r5 = (r5 + r8)|0;
+ r8 = r9;
+}
+else{
+ r5 = 0;
+}
+ if(r7 !=0) //_LBB746_14
+{
+ r6 = (r3 - r2)|0;
+ r7 = (r2 - r3)|0;
+ r9 = (r1 - r0)|0;
+ r10 = (r0 - r1)|0;
+ r6 = uint(r2) < uint(r3) ? r6 : r7;
+ r7 = uint(r0) < uint(r1) ? r9 : r10;
+ r1 = uint(r0) < uint(r1);
+ r2 = uint(r2) < uint(r3);
+ r9 = 0;
+ r6 = (r6 * r7)|0;
+ r1 = r1 ^ r2;
+ r2 = (r9 - r6)|0;
+ r1 = r1 != 0 ? r2 : r6;
+ r0 = (r3 * r0)|0;
+ r0 = (r1 + r0)|0;
+ r0 = (r0 + r8)|0;
+ r5 = (r0 + r5)|0;
+}
+ r0 = 0;
+ r1 = 1;
+ r2 = (r0 - r5)|0;
+ r1 = r8 != 0 ? r1 : r0;
+ r0 = (r0 - r8)|0;
+ r1 = (r2 - r1)|0;
+ r0 = r4 == 0 ? r8 : r0;
+ r1 = r4 == 0 ? r5 : r1;
+ r_g0 = r0;
+ r_g1 = r1;
+ return;
+}
+
+function __fixdfdi(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = sp + 0;
+ r0 = r0 >> 2;
+ r0 = heap32[(r0+1)];
+ r1 = r0 >>> 20;
+ r1 = r1 & 2047;
+ r2 = (r1 + -1023)|0;
+ if(r2 <0) //_LBB747_5
+{
+ r0 = 0;
+ r_g0 = r0;
+ r_g1 = r0;
+ return;
+}
+else{
+ r3 = heap32[(fp)];
+ r4 = r0 & 1048575;
+ r0 = r0 >> 31;
+ r4 = r4 | 1048576;
+ if(r2 <53) //_LBB747_3
+{
+ r2 = 1075;
+ r1 = (r2 - r1)|0;
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r4;
+ heap32[(g0+2)] = r1;
+ __lshrdi3(i7);
+ r1 = r_g0;
+ r3 = r_g1;
+}
+else{
+ r1 = (r1 + -1075)|0;
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r4;
+ heap32[(g0+2)] = r1;
+ __ashldi3(i7);
+ r1 = r_g0;
+ r3 = r_g1;
+}
+ r2 = r3 ^ r0;
+ r1 = r1 ^ r0;
+ r3 = 1;
+ r4 = 0;
+ r2 = (r2 - r0)|0;
+ r3 = uint(r1) < uint(r0) ? r3 : r4;
+ r0 = (r1 - r0)|0;
+ r1 = (r2 - r3)|0;
+ r_g0 = r0;
+ r_g1 = r1;
+ return;
+}
+}
+
+function __floatdidf(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var f0;
+ var f1;
+ var f2;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ r1 = heap32[(fp)];
+ f0 = r0; //fitod r0, f0
+ f1 = 4294967296;
+ f2 = uint(r1); //fuitod r1, f2
+ f0 = f0*f1;
+ f0 = f2+f0;
+ f_g0 = f0;
+ return;
+}
+
+function __lshrdi3(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+2)];
+ r1 = heap32[(fp+1)];
+ r2 = r0 & 32;
+ if(r2 ==0) //_LBB749_2
+{
+ r2 = heap32[(fp)];
+if(!(r0 ==0)) //_LBB749_4
+{
+ r3 = 32;
+ r3 = (r3 - r0)|0;
+ r3 = r1 << r3;
+ r2 = r2 >>> r0;
+ r2 = r3 | r2;
+ r1 = r1 >>> r0;
+}
+ r_g0 = r2;
+ r_g1 = r1;
+ return;
+}
+else{
+ r0 = (r0 + -32)|0;
+ r0 = r1 >>> r0;
+ r1 = 0;
+ r_g0 = r0;
+ r_g1 = r1;
+ return;
+}
+}
+
+function __fixsfdi(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >>> 23;
+ r1 = r1 & 255;
+ r2 = (r1 + -127)|0;
+ if(r2 <0) //_LBB750_5
+{
+ r0 = 0;
+ r_g0 = r0;
+ r_g1 = r0;
+ return;
+}
+else{
+ r3 = r0 & 8388607;
+ r0 = r0 >> 31;
+ r3 = r3 | 8388608;
+ r4 = 0;
+ if(r2 <24) //_LBB750_3
+{
+ r2 = 150;
+ r1 = (r2 - r1)|0;
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r4;
+ heap32[(g0+2)] = r1;
+ __lshrdi3(i7);
+ r1 = r_g0;
+ r3 = r_g1;
+}
+else{
+ r1 = (r1 + -150)|0;
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r4;
+ heap32[(g0+2)] = r1;
+ __ashldi3(i7);
+ r1 = r_g0;
+ r3 = r_g1;
+}
+ r2 = r3 ^ r0;
+ r1 = r1 ^ r0;
+ r3 = 1;
+ r2 = (r2 - r0)|0;
+ r3 = uint(r1) < uint(r0) ? r3 : r4;
+ r0 = (r1 - r0)|0;
+ r1 = (r2 - r3)|0;
+ r_g0 = r0;
+ r_g1 = r1;
+ return;
+}
+}
+
+function __ashldi3(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+2)];
+ r1 = heap32[(fp)];
+ r2 = r0 & 32;
+ if(r2 ==0) //_LBB751_2
+{
+ r2 = heap32[(fp+1)];
+if(!(r0 ==0)) //_LBB751_4
+{
+ r3 = 32;
+ r3 = (r3 - r0)|0;
+ r2 = r2 << r0;
+ r3 = r1 >>> r3;
+ r1 = r1 << r0;
+ r2 = r2 | r3;
+}
+ r_g0 = r1;
+ r_g1 = r2;
+ return;
+}
+else{
+ r0 = (r0 + -32)|0;
+ r2 = 0;
+ r0 = r1 << r0;
+ r_g0 = r2;
+ r_g1 = r0;
+ return;
+}
+}
+
+function __ashrdi3(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+2)];
+ r1 = heap32[(fp+1)];
+ r2 = r0 & 32;
+ if(r2 ==0) //_LBB752_2
+{
+ r2 = heap32[(fp)];
+if(!(r0 ==0)) //_LBB752_4
+{
+ r3 = 32;
+ r3 = (r3 - r0)|0;
+ r3 = r1 << r3;
+ r2 = r2 >>> r0;
+ r2 = r3 | r2;
+ r1 = r1 >> r0;
+}
+ r_g0 = r2;
+ r_g1 = r1;
+ return;
+}
+else{
+ r0 = (r0 + -32)|0;
+ r0 = r1 >> r0;
+ r1 = r1 >> 31;
+ r_g0 = r0;
+ r_g1 = r1;
+ return;
+}
+}
+
+function __fixunsdfdi(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = sp + 0;
+ r0 = r0 >> 2;
+ r0 = heap32[(r0+1)];
+ r1 = r0 >>> 20;
+ r1 = r1 & 2047;
+ r2 = (r1 + -1023)|0;
+if(!(r2 <0)) //_LBB753_5
+{
+if(!(r0 <0)) //_LBB753_5
+{
+ r3 = heap32[(fp)];
+ r0 = r0 & 1048575;
+ r0 = r0 | 1048576;
+ if(r2 <53) //_LBB753_4
+{
+ r2 = 1075;
+ r1 = (r2 - r1)|0;
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r0;
+ heap32[(g0+2)] = r1;
+ __lshrdi3(i7);
+ return;
+}
+else{
+ r1 = (r1 + -1075)|0;
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r0;
+ heap32[(g0+2)] = r1;
+ __ashldi3(i7);
+ return;
+}
+}
+}
+ r0 = 0;
+ r_g0 = r0;
+ r_g1 = r0;
+ return;
+}
+
+function __fixunssfdi(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >>> 23;
+ r1 = r1 & 255;
+ r2 = (r1 + -127)|0;
+if(!(r2 <0)) //_LBB754_5
+{
+if(!(r0 <0)) //_LBB754_5
+{
+ r0 = r0 & 8388607;
+ r0 = r0 | 8388608;
+ r3 = 0;
+ if(r2 <24) //_LBB754_4
+{
+ r2 = 150;
+ r1 = (r2 - r1)|0;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r3;
+ heap32[(g0+2)] = r1;
+ __lshrdi3(i7);
+ return;
+}
+else{
+ r1 = (r1 + -150)|0;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r3;
+ heap32[(g0+2)] = r1;
+ __ashldi3(i7);
+ return;
+}
+}
+}
+ r0 = 0;
+ r_g0 = r0;
+ r_g1 = r0;
+ return;
+}
+
+function _ZNK14CFileInterface12IsFileSystemEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = 0;
+ r_g0 = r0;
+ return;
+}
+
+function _ZN11CFileStdout5freadEPvjj(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = -1;
+ r_g0 = r0;
+ return;
+}
+
+function _ZN11CFileStdout5ftellEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = 0;
+ r_g0 = r0;
+ return;
+}
+
+function _ZN11CFileStdout4feofEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = 0;
+ r_g0 = r0;
+ return;
+}
+
+function _ZN11CFileStdout5fseekEli(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = 0;
+ r_g0 = r0;
+ return;
+}
+
+function _ZN11CFileStdout6ungetcEi(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = 0;
+ r_g0 = r0;
+ return;
+}
+
+function _ZN11CFileStdout6fflushEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = 0;
+ r_g0 = r0;
+ return;
+}
+
+function _ZN11CFileStdout6fcloseEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = 0;
+ r_g0 = r0;
+ return;
+}
+
+function _ZNK11CFileSystem12IsFileSystemEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = 1;
+ r_g0 = r0;
+ return;
+}
+
+function _ZN11CFileSystem5freadEPvjj(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r0 = heap32[(r0+1)];
+ r1 = heap32[(fp+1)];
+ r2 = heap32[(fp+2)];
+ r3 = heap32[(fp+3)];
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r2;
+ heap32[(g0+2)] = r3;
+ heap32[(g0+3)] = r0;
+ mandreel_fread(i7);
+ return;
+}
+
+function _ZN11CFileSystem6fwriteEPKvjj(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = -1;
+ r_g0 = r0;
+ return;
+}
+
+function _ZN11CFileSystem6fflushEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = 0;
+ r_g0 = r0;
+ return;
+}
+
+function _ZN11CFileSystem6fcloseEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r0 = heap32[(r0+1)];
+ heap32[(g0)] = r0;
+ mandreel_fclose(i7);
+ return;
+}
+
+function _ZN11CFileSystem5ftellEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r0 = heap32[(r0+1)];
+ heap32[(g0)] = r0;
+ mandreel_ftell(i7);
+ return;
+}
+
+function _ZN11CFileSystem4feofEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r0 = heap32[(r0+1)];
+ heap32[(g0)] = r0;
+ mandreel_feof(i7);
+ return;
+}
+
+function _ZN11CFileSystem5fseekEli(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r0 = heap32[(r0+1)];
+ r1 = heap32[(fp+1)];
+ r2 = heap32[(fp+2)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = r2;
+ mandreel_fseek(i7);
+ return;
+}
+
+function _ZN11CFileSystem6ungetcEi(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r0 = heap32[(r0+1)];
+ r1 = heap32[(fp+1)];
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r0;
+ mandreel_ungetc(i7);
+ return;
+}
+
+function _ZN7CFileLS5freadEPvjj(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r1 = heap32[(fp+2)];
+ r2 = heap32[(fp+3)];
+ r3 = heap32[(r0+4)];
+ r4 = heap32[(r0+2)];
+ r2 = (r2 * r1)|0;
+ r5 = (r3 + r2)|0;
+ r6 = (r4 - r3)|0;
+ r2 = r5 > r4 ? r6 : r2;
+ if(r2 <0) //_LBB772_2
+{
+ r0 = -1;
+ r_g0 = r0;
+ return;
+}
+else{
+ r4 = heap32[(fp+1)];
+ r5 = heap32[(r0+6)];
+ r3 = (r5 + r3)|0;
+ heap32[(g0)] = r4;
+ heap32[(g0+1)] = r3;
+ heap32[(g0+2)] = r2;
+ memcpy(i7);
+ r3 = heap32[(r0+4)];
+ r3 = (r3 + r2)|0;
+ heap32[(r0+4)] = r3;
+ r0 = Math.floor(uint(r2) /uint(r1));
+ r_g0 = r0;
+ return;
+}
+}
+
+function _ZN7CFileLS5ftellEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r0 = heap32[(r0+4)];
+ r_g0 = r0;
+ return;
+}
+
+function _ZN7CFileLS4feofEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r1 = heap32[(r0+4)];
+ r0 = heap32[(r0+2)];
+ r0 = r1 >= r0;
+ r0 = r0 & 1;
+ r_g0 = r0;
+ return;
+}
+
+function _ZN7CFileLS5fseekEli(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+2)];
+ r1 = heap32[(fp)];
+ r2 = heap32[(fp+1)];
+_1: do {
+ if(r0 ==0) //_LBB775_4
+{
+ r1 = r1 >> 2;
+}
+else{
+ if(r0 ==1) //_LBB775_6
+{
+ r0 = r1 >> 2;
+ r1 = heap32[(r0+4)];
+ r1 = (r1 + r2)|0;
+ heap32[(r0+4)] = r1;
+}
+else{
+if(!(r0 !=2)) //_LBB775_7
+{
+ r1 = r1 >> 2;
+ r0 = heap32[(r1+2)];
+ r2 = (r0 + r2)|0;
+break _1;
+}
+}
+ r0 = 0;
+ r_g0 = r0;
+ return;
+}
+} while(0);
+ heap32[(r1+4)] = r2;
+ r1 = 0;
+ r_g0 = r1;
+ return;
+}
+
+function _ZN7CFileLS6ungetcEi(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = -1;
+ r_g0 = r0;
+ return;
+}
+
+function _ZN10CFileCloud5freadEPvjj(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r1 = heap32[(fp+2)];
+ r2 = heap32[(fp+3)];
+ r3 = heap32[(r0+4)];
+ r4 = heap32[(r0+2)];
+ r2 = (r2 * r1)|0;
+ r5 = (r3 + r2)|0;
+ r6 = (r4 - r3)|0;
+ r2 = r5 > r4 ? r6 : r2;
+ if(r2 <0) //_LBB777_2
+{
+ r0 = -1;
+ r_g0 = r0;
+ return;
+}
+else{
+ r4 = heap32[(fp+1)];
+ r5 = heap32[(r0+6)];
+ r3 = (r5 + r3)|0;
+ heap32[(g0)] = r4;
+ heap32[(g0+1)] = r3;
+ heap32[(g0+2)] = r2;
+ memcpy(i7);
+ r3 = heap32[(r0+4)];
+ r3 = (r3 + r2)|0;
+ heap32[(r0+4)] = r3;
+ r0 = Math.floor(uint(r2) /uint(r1));
+ r_g0 = r0;
+ return;
+}
+}
+
+function _ZN10CFileCloud5ftellEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r0 = heap32[(r0+4)];
+ r_g0 = r0;
+ return;
+}
+
+function _ZN10CFileCloud4feofEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r1 = heap32[(r0+4)];
+ r0 = heap32[(r0+2)];
+ r0 = r1 >= r0;
+ r0 = r0 & 1;
+ r_g0 = r0;
+ return;
+}
+
+function _ZN10CFileCloud5fseekEli(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+2)];
+ r1 = heap32[(fp)];
+ r2 = heap32[(fp+1)];
+_1: do {
+ if(r0 ==0) //_LBB780_4
+{
+ r1 = r1 >> 2;
+}
+else{
+ if(r0 ==1) //_LBB780_6
+{
+ r0 = r1 >> 2;
+ r1 = heap32[(r0+4)];
+ r1 = (r1 + r2)|0;
+ heap32[(r0+4)] = r1;
+}
+else{
+if(!(r0 !=2)) //_LBB780_7
+{
+ r1 = r1 >> 2;
+ r0 = heap32[(r1+2)];
+ r2 = (r0 + r2)|0;
+break _1;
+}
+}
+ r0 = 0;
+ r_g0 = r0;
+ return;
+}
+} while(0);
+ heap32[(r1+4)] = r2;
+ r1 = 0;
+ r_g0 = r1;
+ return;
+}
+
+function _ZN10CFileCloud6ungetcEi(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = -1;
+ r_g0 = r0;
+ return;
+}
+
+function __fwrite(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+2)];
+ r1 = heap32[(fp)];
+ r2 = heap32[(fp+1)];
+if(!(uint(r0) >uint(9))) //_LBB782_2
+{
+ r0 = _ZL13s_file_stdout;
+}
+ r3 = r0 >> 2;
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3+2)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 1;
+ heap32[(g0+3)] = r2;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ return;
+}
+
+function _ZN7CFileLS6fwriteEPKvjj(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r1 = heap32[(fp+3)];
+ r2 = heap32[(fp+2)];
+ r3 = heap32[(fp+1)];
+ r2 = (r1 * r2)|0;
+ r4 = heap32[(r0+4)];
+ r5 = (r4 + r2)|0;
+ r6 = heap32[(r0+3)];
+ if(r5 >r6) //_LBB783_2
+{
+ r4 = (r2 + r4)|0;
+ r4 = (r4 + 131072)|0;
+ heap32[(r0+3)] = r4;
+ r5 = heap32[(r0+6)];
+ heap32[(g0)] = r5;
+ heap32[(g0+1)] = r4;
+ realloc(i7);
+ r5 = r_g0;
+ heap32[(r0+6)] = r5;
+ r4 = heap32[(r0+4)];
+}
+else{
+ r5 = heap32[(r0+6)];
+}
+ r4 = (r5 + r4)|0;
+ heap32[(g0)] = r4;
+ heap32[(g0+1)] = r3;
+ heap32[(g0+2)] = r2;
+ memcpy(i7);
+ r3 = heap32[(r0+4)];
+ r2 = (r3 + r2)|0;
+ heap32[(r0+4)] = r2;
+ r3 = heap32[(r0+5)];
+if(!(r2 <=r3)) //_LBB783_5
+{
+ heap32[(r0+5)] = r2;
+}
+ r_g0 = r1;
+ return;
+}
+
+function _ZN7CFileLS6fflushEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = heapU8[r0+5];
+if(!(r1 ==0)) //_LBB784_2
+{
+ r1 = r0 >> 2;
+ r2 = heap32[(r1+5)];
+ r1 = heap32[(r1+6)];
+ r0 = (r0 + 28)|0;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = r2;
+ mandreel_writels(i7);
+}
+ r0 = 0;
+ r_g0 = r0;
+ return;
+}
+
+function _ZN7CFileLS6fcloseEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = heapU8[r0+5];
+if(!(r1 ==0)) //_LBB785_2
+{
+ r1 = r0 >> 2;
+ r2 = heap32[(r1+5)];
+ r1 = heap32[(r1+6)];
+ r3 = (r0 + 28)|0;
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = r2;
+ mandreel_writels(i7);
+}
+ r1 = 0;
+ r2 = r0 >> 2;
+ heap8[r0+4] = r1;
+ r0 = heap32[(r2+6)];
+ heap32[(g0)] = r0;
+ free(i7);
+ r_g0 = r1;
+ return;
+}
+
+function _ZN10CFileCloud6fwriteEPKvjj(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r1 = heap32[(fp+3)];
+ r2 = heap32[(fp+2)];
+ r3 = heap32[(fp+1)];
+ r2 = (r1 * r2)|0;
+ r4 = heap32[(r0+4)];
+ r5 = (r4 + r2)|0;
+ r6 = heap32[(r0+3)];
+ if(r5 >r6) //_LBB786_2
+{
+ r4 = (r2 + r4)|0;
+ r4 = (r4 + 131072)|0;
+ heap32[(r0+3)] = r4;
+ r5 = heap32[(r0+6)];
+ heap32[(g0)] = r5;
+ heap32[(g0+1)] = r4;
+ realloc(i7);
+ r5 = r_g0;
+ heap32[(r0+6)] = r5;
+ r4 = heap32[(r0+4)];
+}
+else{
+ r5 = heap32[(r0+6)];
+}
+ r4 = (r5 + r4)|0;
+ heap32[(g0)] = r4;
+ heap32[(g0+1)] = r3;
+ heap32[(g0+2)] = r2;
+ memcpy(i7);
+ r3 = heap32[(r0+4)];
+ r2 = (r3 + r2)|0;
+ heap32[(r0+4)] = r2;
+ r3 = heap32[(r0+5)];
+if(!(r2 <=r3)) //_LBB786_5
+{
+ heap32[(r0+5)] = r2;
+}
+ r_g0 = r1;
+ return;
+}
+
+function _ZN10CFileCloud6fflushEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+var __label__ = 0;
+ i7 = sp + -32;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = heapU8[r0+5];
+if(!(r1 ==0)) //_LBB787_2
+{
+ r1 = r0 >> 2;
+ r2 = heap32[(r1+5)];
+ r3 = r2 << 1;
+ heap32[(g0)] = r3;
+ malloc(i7);
+ r4 = r_g0;
+ r1 = heap32[(r1+6)];
+ r5 = sp + -4;
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r2;
+ heap32[(g0+2)] = r4;
+ heap32[(g0+3)] = r3;
+ heap32[(g0+4)] = r5;
+ _ZN12mandreel_b64L11b64_encode_EPKhjPcjjPNS_6B64_RCE(i7);
+ r0 = (r0 + 28)|0;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r4;
+ heap32[(g0+2)] = r_g0;
+ mandreel_writecloud(i7);
+ heap32[(g0)] = r4;
+ free(i7);
+}
+ r0 = 0;
+ r_g0 = r0;
+ return;
+}
+
+function _ZN10CFileCloud6fcloseEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+var __label__ = 0;
+ i7 = sp + -32;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = heapU8[r0+5];
+if(!(r1 ==0)) //_LBB788_2
+{
+ r1 = r0 >> 2;
+ r2 = heap32[(r1+5)];
+ r3 = r2 << 1;
+ heap32[(g0)] = r3;
+ malloc(i7);
+ r4 = r_g0;
+ r1 = heap32[(r1+6)];
+ r5 = sp + -4;
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r2;
+ heap32[(g0+2)] = r4;
+ heap32[(g0+3)] = r3;
+ heap32[(g0+4)] = r5;
+ _ZN12mandreel_b64L11b64_encode_EPKhjPcjjPNS_6B64_RCE(i7);
+ r2 = (r0 + 28)|0;
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = r4;
+ heap32[(g0+2)] = r_g0;
+ mandreel_writecloud(i7);
+ heap32[(g0)] = r4;
+ free(i7);
+}
+ r1 = 0;
+ r2 = r0 >> 2;
+ heap8[r0+4] = r1;
+ r0 = heap32[(r2+6)];
+ heap32[(g0)] = r0;
+ free(i7);
+ r_g0 = r1;
+ return;
+}
+
+function __sync_val_compare_and_swap_4(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r1 = heap32[(r0)];
+ r2 = heap32[(fp+1)];
+if(!(r1 !=r2)) //_LBB789_2
+{
+ r2 = heap32[(fp+2)];
+ heap32[(r0)] = r2;
+}
+ r_g0 = r1;
+ return;
+}
+
+function _ZN11CFileStdout6fwriteEPKvjj(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+var __label__ = 0;
+ i7 = sp + -16392;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+2)];
+ r1 = heap32[(fp+3)];
+ r0 = (r1 * r0)|0;
+ if(r0 !=0) //_LBB790_2
+{
+ r2 = heap32[(fp+1)];
+ r3 = sp + -16384;
+ r4 = r0;
+_3: while(true){
+ r5 = heapU8[r2];
+ r4 = (r4 + -1)|0;
+ r2 = (r2 + 1)|0;
+ r6 = (r3 + 1)|0;
+ heap8[r3] = r5;
+ r3 = r6;
+if(!(r4 !=0)) //_LBB790_3
+{
+break _3;
+}
+}
+ r2 = sp + -16384;
+ r0 = (r2 + r0)|0;
+}
+else{
+ r0 = sp + -16384;
+}
+ r2 = 0;
+ heap8[r0] = r2;
+ r0 = sp + -16384;
+ heap32[(g0)] = r0;
+ puts(i7);
+ r_g0 = r1;
+ return;
+}
+
+function fopen(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+var __label__ = 0;
+ i7 = sp + -2064;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = heapU8[r0];
+ r2 = 46;
+ r3 = 92;
+ r4 = heapU8[r0+1];
+ r5 = 47;
+ r1 = r1 == r2;
+ r2 = r4 == r3;
+ r1 = r1 & r2;
+ r2 = r4 == r5;
+ r1 = r1 | r2;
+ r2 = (r0 + 1)|0;
+ r1 = r1 != 0 ? r2 : r0;
+ r2 = heapU8[r1];
+ r3 = heap32[(fp+1)];
+_1: do {
+ if(r2 !=0) //_LBB791_2
+{
+ r4 = sp + -2048;
+ r1 = (r1 + 1)|0;
+ r6 = 0;
+ r8 = 26;
+_3: while(true){
+ r7 = r2 & 255;
+ if(r7 ==47) //_LBB791_5
+{
+__label__ = 5;
+}
+else{
+ if(r7 !=92) //_LBB791_8
+{
+ r6 = r2 << 24;
+ r6 = r6 >> 24;
+ r7 = (r6 + -65)|0;
+ r9 = (r2 + 32)|0;
+ r10 = (r4 + 1)|0;
+ r6 = 0;
+ r2 = uint(r7) < uint(r8) ? r9 : r2;
+ heap8[r4] = r2;
+ r4 = r10;
+__label__ = 9;
+}
+else{
+__label__ = 5;
+}
+}
+if (__label__ == 5){
+ r2 = r6 & 255;
+ heap8[r4] = r5;
+ if(r2 ==0) //_LBB791_7
+{
+ r4 = (r4 + 1)|0;
+ r6 = 1;
+}
+else{
+ r6 = 1;
+}
+}
+ r2 = heapU8[r1];
+ if(r2 !=0) //_LBB791_11
+{
+ r1 = (r1 + 1)|0;
+continue _3;
+}
+else{
+break _1;
+}
+}
+}
+else{
+ r4 = sp + -2048;
+}
+} while(0);
+ r1 = 0;
+ heap8[r4] = r1;
+ r2 = sp + -2048;
+ r4 = _2E_str33679;
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = r4;
+ heap32[(g0+2)] = 4;
+ strncmp(i7);
+ r4 = r_g0;
+_17: do {
+ if(r4 !=0) //_LBB791_29
+{
+ r4 = _2E_str34680;
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = r4;
+ heap32[(g0+2)] = 4;
+ strncmp(i7);
+ r4 = r_g0;
+ if(r4 ==0) //_LBB791_31
+{
+ heap32[(g0)] = 0;
+ _Z30mandreel_fopen_enable_checkfatb(i7);
+ r0 = _2E_str31677;
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r0;
+ strcmp(i7);
+ r0 = r_g0;
+_21: do {
+ if(r0 !=0) //_LBB791_33
+{
+ r0 = _2E_str4651;
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r0;
+ strcmp(i7);
+ r0 = r_g0;
+ if(r0 ==0) //_LBB791_32
+{
+__label__ = 30;
+}
+else{
+ r0 = _2E_str5652;
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r0;
+ strcmp(i7);
+ r0 = r_g0;
+ if(r0 !=0) //_LBB791_36
+{
+ r0 = _2E_str32678;
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r0;
+ strcmp(i7);
+ r0 = r_g0;
+if(!(r0 ==0)) //_LBB791_35
+{
+ r4 = heapU8[r3];
+ r0 = 119;
+ r3 = 114;
+ r0 = r4 == r0;
+ r5 = r4 == r3;
+ r3 = r0 & 1;
+ r0 = r5 & 1;
+ if(r4 ==114) //_LBB791_39
+{
+__label__ = 36;
+break _21;
+}
+else{
+__label__ = 38;
+break _21;
+}
+}
+}
+ r0 = 1;
+ r1 = 0;
+ r3 = r0;
+__label__ = 38;
+}
+}
+else{
+__label__ = 30;
+}
+} while(0);
+if (__label__ == 30){
+ r0 = 1;
+ r3 = r0;
+__label__ = 36;
+}
+if (__label__ == 36){
+ heap32[(g0)] = r2;
+ mandreel_opencloud(i7);
+ r1 = r_g0;
+ if(r1 ==-1) //_LBB791_41
+{
+ r4 = 0;
+break _17;
+}
+}
+ heap32[(g0)] = 284;
+ _Znwj(i7);
+ r4 = r_g0;
+ r5 = _ZTV10CFileCloud;
+ r6 = r4 >> 2;
+ r5 = (r5 + 8)|0;
+ r7 = 1;
+ heap32[(r6)] = r5;
+ heap8[r4+4] = r7;
+ heap32[(r6+4)] = 0;
+ heap32[(r6+6)] = 0;
+ heap32[(r6+2)] = r1;
+ heap8[r4+5] = r3;
+ heap8[r4+6] = r0;
+ heap32[(r6+5)] = 0;
+ r0 = (r4 + 28)|0;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r2;
+ strcpy(i7);
+ if(r1 ==0) //_LBB791_44
+{
+ r0 = r3 & 255;
+ if(r0 ==0) //_LBB791_46
+{
+break _17;
+}
+else{
+ r0 = r4 >> 2;
+ heap32[(r0+3)] = 131072;
+ heap32[(g0)] = 131072;
+ malloc(i7);
+ heap32[(r0+6)] = r_g0;
+}
+}
+else{
+ r3 = (r1 + 131072)|0;
+ r2 = r4 >> 2;
+ heap32[(r2+3)] = r3;
+ heap32[(g0)] = r3;
+ malloc(i7);
+ heap32[(r2+6)] = r_g0;
+ r3 = (r1 + 4)|0;
+ heap32[(g0)] = r3;
+ malloc(i7);
+ r3 = r_g0;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r3;
+ heap32[(g0+2)] = r1;
+ mandreel_readcloud(i7);
+ r0 = heap32[(r2+3)];
+ r5 = heap32[(r2+6)];
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = r5;
+ heap32[(g0+3)] = r0;
+ _ZN12mandreel_b6410b64_decodeEPKcjPvj(i7);
+ r0 = r_g0;
+ heap32[(g0)] = r3;
+ free(i7);
+ heap32[(r2+2)] = r0;
+ heap32[(r2+5)] = r0;
+}
+}
+else{
+ r1 = r3;
+_39: while(true){
+ r4 = heapU8[r1];
+ if(r4 ==0) //_LBB791_51
+{
+__label__ = 46;
+break _39;
+}
+else{
+ if(r4 ==87) //_LBB791_50
+{
+__label__ = 45;
+break _39;
+}
+else{
+ r1 = (r1 + 1)|0;
+ if(r4 !=119) //_LBB791_47
+{
+__label__ = 42;
+}
+else{
+__label__ = 45;
+break _39;
+}
+}
+}
+}
+switch(__label__ ){//multiple entries
+case 46:
+ r0 = heapU8[sp+-2048];
+ if(r0 !=47) //_LBB791_53
+{
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = r3;
+ mandreel_fopen(i7);
+ r2 = r_g0;
+}
+else{
+ r2 = (r2 + 1)|0;
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = r3;
+ mandreel_fopen(i7);
+ r2 = r_g0;
+}
+ if(r2 ==0) //_LBB791_56
+{
+ r0 = 0;
+ r_g0 = r0;
+ return;
+}
+else{
+ heap32[(g0)] = 8;
+ r0 = _ZTV11CFileSystem;
+ _Znwj(i7);
+ r3 = r_g0 >> 2;
+ r0 = (r0 + 8)|0;
+ heap32[(r3)] = r0;
+ heap32[(r3+1)] = r2;
+ return;
+}
+break;
+case 45:
+ r2 = _2E_str35681;
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = r0;
+ heap32[(g0+2)] = r3;
+ printf(i7);
+ r2 = 0;
+ r_g0 = r2;
+ return;
+break;
+}
+}
+}
+else{
+ heap32[(g0)] = 0;
+ _Z30mandreel_fopen_enable_checkfatb(i7);
+ r0 = _2E_str31677;
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r0;
+ strcmp(i7);
+ r0 = r_g0;
+_54: do {
+ if(r0 !=0) //_LBB791_15
+{
+ r0 = _2E_str4651;
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r0;
+ strcmp(i7);
+ r0 = r_g0;
+ if(r0 ==0) //_LBB791_14
+{
+__label__ = 13;
+}
+else{
+ r0 = _2E_str5652;
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r0;
+ strcmp(i7);
+ r0 = r_g0;
+ if(r0 !=0) //_LBB791_18
+{
+ r0 = _2E_str32678;
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r0;
+ strcmp(i7);
+ r0 = r_g0;
+if(!(r0 ==0)) //_LBB791_17
+{
+ r3 = heapU8[r3];
+ r0 = 119;
+ r1 = 114;
+ r0 = r3 == r0;
+ r4 = r3 == r1;
+ r1 = r0 & 1;
+ r0 = r4 & 1;
+ if(r3 ==114) //_LBB791_21
+{
+__label__ = 20;
+break _54;
+}
+else{
+ r3 = 0;
+__label__ = 22;
+break _54;
+}
+}
+}
+ r0 = 1;
+ r3 = 0;
+ r1 = r0;
+__label__ = 22;
+}
+}
+else{
+__label__ = 13;
+}
+} while(0);
+if (__label__ == 13){
+ r0 = 1;
+ r1 = r0;
+__label__ = 20;
+}
+if (__label__ == 20){
+ heap32[(g0)] = r2;
+ mandreel_openls(i7);
+ r3 = r_g0;
+ if(r3 ==-1) //_LBB791_23
+{
+ r4 = 0;
+break _17;
+}
+}
+ heap32[(g0)] = 284;
+ _Znwj(i7);
+ r4 = r_g0;
+ r5 = _ZTV7CFileLS;
+ r6 = r4 >> 2;
+ r5 = (r5 + 8)|0;
+ r7 = 1;
+ heap32[(r6)] = r5;
+ heap8[r4+4] = r7;
+ heap32[(r6+4)] = 0;
+ heap32[(r6+6)] = 0;
+ heap32[(r6+2)] = r3;
+ heap8[r4+5] = r1;
+ heap8[r4+6] = r0;
+ heap32[(r6+5)] = 0;
+ r0 = (r4 + 28)|0;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r2;
+ strcpy(i7);
+ if(r3 ==0) //_LBB791_26
+{
+ r0 = r1 & 255;
+if(!(r0 ==0)) //_LBB791_28
+{
+ r0 = r4 >> 2;
+ heap32[(r0+3)] = 131072;
+ heap32[(g0)] = 131072;
+ malloc(i7);
+ heap32[(r0+6)] = r_g0;
+}
+}
+else{
+ r1 = (r3 + 131072)|0;
+ r2 = r4 >> 2;
+ heap32[(r2+3)] = r1;
+ heap32[(g0)] = r1;
+ malloc(i7);
+ heap32[(r2+6)] = r_g0;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r_g0;
+ heap32[(g0+2)] = r3;
+ mandreel_readls(i7);
+ heap32[(r2+5)] = r3;
+}
+}
+} while(0);
+ heap32[(g0)] = 1;
+ _Z30mandreel_fopen_enable_checkfatb(i7);
+ r_g0 = r4;
+ return;
+}
+
+function strtoul(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = heap8[r0];
+ r2 = r1 << 2;
+ r3 = my_ctype;
+ r2 = (r2 + r3)|0;
+ r4 = heap32[(fp+1)];
+ r2 = heapU8[r2+4];
+ r2 = r2 & 8;
+ if(r2 ==0) //_LBB792_2
+{
+ r2 = r0;
+}
+else{
+ r2 = r0;
+_4: while(true){
+ r1 = heap8[r2+1];
+ r5 = r1 << 2;
+ r5 = (r5 + r3)|0;
+ r2 = (r2 + 1)|0;
+ r5 = heapU8[r5+4];
+ r5 = r5 & 8;
+ if(r5 !=0) //_LBB792_3
+{
+continue _4;
+}
+else{
+break _4;
+}
+}
+}
+ r1 = r1 & 255;
+ if(r1 ==43) //_LBB792_8
+{
+ r2 = (r2 + 1)|0;
+ r1 = 0;
+}
+else{
+ if(r1 ==45) //_LBB792_7
+{
+ r2 = (r2 + 1)|0;
+ r1 = 1;
+}
+else{
+ r1 = 0;
+}
+}
+ r3 = 0;
+ r5 = r3;
+ r6 = r3;
+ r11 = -1;
+_14: while(true){
+ r8 = (r2 - r3)|0;
+ r7 = heapU8[r8];
+ if(r7 ==0) //_LBB792_14
+{
+break _14;
+}
+else{
+ if(uint(r7) <uint(65)) //_LBB792_10
+{
+ r9 = r7 & 255;
+ r10 = 58;
+ r7 = (r7 + -48)|0;
+ r7 = uint(r9) < uint(r10) ? r7 : r11;
+ r7 = r7 & 255;
+ if(uint(r7) >uint(9)) //_LBB792_14
+{
+break _14;
+}
+else{
+ r8 = r6 & 255;
+ r8 = (r8 * 10)|0;
+ r7 = (r7 + r8)|0;
+ r6 = r6 >>> 8;
+ r8 = r7 >>> 8;
+ r6 = (r6 * 10)|0;
+ r6 = (r8 + r6)|0;
+ r8 = 16777215;
+ r9 = 1;
+ r10 = r6 << 8;
+ r7 = r7 & 255;
+ r5 = uint(r6) > uint(r8) ? r9 : r5;
+ r6 = r10 | r7;
+ r3 = (r3 + -1)|0;
+continue _14;
+}
+}
+else{
+break _14;
+}
+}
+}
+ if(r3 ==0) //_LBB792_16
+{
+ _errno(i7);
+ r6 = 0;
+ r8 = r_g0 >> 2;
+ heap32[(r8)] = 22;
+ r8 = r0;
+}
+if(!(r4 ==0)) //_LBB792_19
+{
+ r0 = r4 >> 2;
+ heap32[(r0)] = r8;
+}
+ if(r5 ==0) //_LBB792_21
+{
+ r0 = 0;
+ r0 = (r0 - r6)|0;
+ r0 = r1 == 0 ? r6 : r0;
+ r_g0 = r0;
+ return;
+}
+else{
+ _errno(i7);
+ r1 = r_g0 >> 2;
+ heap32[(r1)] = 34;
+ r1 = -1;
+ r_g0 = r1;
+ return;
+}
+}
+
+function strtol(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = heap8[r0];
+ r2 = r1 << 2;
+ r3 = my_ctype;
+ r2 = (r2 + r3)|0;
+ r4 = heap32[(fp+1)];
+ r2 = heapU8[r2+4];
+ r2 = r2 & 8;
+ if(r2 ==0) //_LBB793_2
+{
+ r2 = r0;
+}
+else{
+ r2 = r0;
+_4: while(true){
+ r1 = heap8[r2+1];
+ r5 = r1 << 2;
+ r5 = (r5 + r3)|0;
+ r2 = (r2 + 1)|0;
+ r5 = heapU8[r5+4];
+ r5 = r5 & 8;
+ if(r5 !=0) //_LBB793_3
+{
+continue _4;
+}
+else{
+break _4;
+}
+}
+}
+ r1 = r1 & 255;
+ if(r1 ==45) //_LBB793_6
+{
+ r1 = heap8[r2+1];
+ r1 = r1 << 2;
+ r3 = (r1 + r3)|0;
+ r3 = heapU16[(r3+4)>>1];
+ r3 = r3 & 263;
+ if(r3 ==0) //_LBB793_5
+{
+__label__ = 5;
+}
+else{
+ r2 = (r2 + 1)|0;
+ r3 = -1;
+__label__ = 8;
+}
+}
+else{
+__label__ = 5;
+}
+if (__label__ == 5){
+ r3 = 0;
+}
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = r4;
+ strtoul(i7);
+ r1 = r_g0;
+if(!(r4 ==0)) //_LBB793_11
+{
+ r4 = r4 >> 2;
+ r5 = heap32[(r4)];
+if(!(r5 !=r2)) //_LBB793_11
+{
+ heap32[(r4)] = r0;
+}
+}
+ if(r1 >-1) //_LBB793_16
+{
+ r0 = 0;
+ r0 = (r0 - r1)|0;
+ r0 = r3 == 0 ? r1 : r0;
+ r_g0 = r0;
+ return;
+}
+else{
+ _errno(i7);
+ r0 = r_g0;
+if(!(r1 !=-2147483648)) //_LBB793_15
+{
+if(!(r3 ==0)) //_LBB793_15
+{
+ r0 = r0 >> 2;
+ heap32[(r0)] = 0;
+ r_g0 = r1;
+ return;
+}
+}
+ r1 = r0 >> 2;
+ r0 = 2147483647;
+ r2 = -2147483648;
+ heap32[(r1)] = 34;
+ r1 = r3 == 0 ? r0 : r2;
+ r_g0 = r1;
+ return;
+}
+}
+
+function __floatundidf(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var f0;
+var __label__ = 0;
+ i7 = sp + -24;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = heap32[(fp+1)];
+ r2 = r0 | r1;
+ if(r2 ==0) //_LBB794_12
+{
+ f0 = 0;
+ f_g0 = f0;
+ return;
+}
+else{
+ r2 = r0 >>> 1;
+ r3 = r1 >>> 1;
+ r2 = r0 | r2;
+ r3 = r1 | r3;
+ r4 = r2 >>> 2;
+ r5 = r3 >>> 2;
+ r2 = r2 | r4;
+ r3 = r3 | r5;
+ r4 = r2 >>> 4;
+ r5 = r3 >>> 4;
+ r2 = r2 | r4;
+ r3 = r3 | r5;
+ r4 = r2 >>> 8;
+ r5 = r3 >>> 8;
+ r2 = r2 | r4;
+ r3 = r3 | r5;
+ r4 = r2 >>> 16;
+ r5 = r3 >>> 16;
+ r2 = r2 | r4;
+ r3 = r3 | r5;
+ r4 = r2 ^ -1;
+ r5 = 1431655765;
+ r6 = r3 ^ -1;
+ r4 = r4 >>> 1;
+ r6 = r6 >>> 1;
+ r2 = r5 & (~r2);
+ r4 = r4 & 1431655765;
+ r2 = (r2 + r4)|0;
+ r3 = r5 & (~r3);
+ r4 = r6 & 1431655765;
+ r3 = (r3 + r4)|0;
+ r4 = r2 >>> 2;
+ r5 = r3 >>> 2;
+ r2 = r2 & 858993459;
+ r4 = r4 & 858993459;
+ r2 = (r2 + r4)|0;
+ r3 = r3 & 858993459;
+ r4 = r5 & 858993459;
+ r3 = (r3 + r4)|0;
+ r4 = r2 >>> 4;
+ r5 = r3 >>> 4;
+ r2 = r2 & 252645135;
+ r4 = r4 & 252645135;
+ r2 = (r2 + r4)|0;
+ r3 = r3 & 252645135;
+ r4 = r5 & 252645135;
+ r3 = (r3 + r4)|0;
+ r4 = r2 >>> 8;
+ r5 = r3 >>> 8;
+ r2 = r2 & 16711935;
+ r4 = r4 & 16711935;
+ r2 = (r2 + r4)|0;
+ r3 = r3 & 16711935;
+ r4 = r5 & 16711935;
+ r3 = (r3 + r4)|0;
+ r4 = r2 & 65535;
+ r2 = r2 >>> 16;
+ r2 = (r4 + r2)|0;
+ r4 = r3 & 65535;
+ r3 = r3 >>> 16;
+ r3 = (r4 + r3)|0;
+ r2 = (r2 + 32)|0;
+ r4 = 64;
+ r2 = r1 != 0 ? r3 : r2;
+ r3 = 63;
+ r4 = (r4 - r2)|0;
+ r2 = (r3 - r2)|0;
+ if(r4 <54) //_LBB794_10
+{
+ r3 = 53;
+ r3 = (r3 - r4)|0;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = r3;
+ __ashldi3(i7);
+ r3 = r_g0;
+ r1 = r_g1;
+}
+else{
+ if(r4 ==54) //_LBB794_5
+{
+ r1 = r1 << 1;
+ r3 = r0 >>> 31;
+ r0 = r0 << 1;
+ r1 = r1 | r3;
+}
+else{
+ if(r4 !=55) //_LBB794_6
+{
+ r3 = (r4 + -55)|0;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = r3;
+ __lshrdi3(i7);
+ r3 = r_g0;
+ r5 = r_g1;
+ r6 = 119;
+ r6 = (r6 - r4)|0;
+ heap32[(g0)] = -1;
+ heap32[(g0+1)] = -1;
+ heap32[(g0+2)] = r6;
+ __lshrdi3(i7);
+ r0 = r_g0 & r0;
+ r1 = r_g1 & r1;
+ r0 = r0 | r1;
+ r1 = 0;
+ r0 = r0 != r1;
+ r0 = r0 & 1;
+ r0 = r0 | r3;
+ r1 = r5;
+}
+}
+ r3 = r0 >>> 2;
+ r3 = r3 & 1;
+ r0 = r3 | r0;
+ r3 = (r0 + 1)|0;
+ r5 = 1;
+ r6 = 0;
+ r0 = uint(r3) < uint(r0) ? r5 : r6;
+ r0 = r3 == 0 ? r5 : r0;
+ r0 = (r1 + r0)|0;
+ r1 = r0 >>> 2;
+ r5 = r1 & 2097152;
+ if(r5 !=0) //_LBB794_9
+{
+ r1 = r3 >>> 3;
+ r2 = r0 << 29;
+ r3 = r1 | r2;
+ r1 = r0 >>> 3;
+ r2 = r4;
+}
+else{
+ r3 = r3 >>> 2;
+ r0 = r0 << 30;
+ r3 = r3 | r0;
+}
+}
+ r0 = r2 << 20;
+ r2 = sp + -8;
+ r1 = r1 & 1048575;
+ r0 = (r0 + 1072693248)|0;
+ r2 = r2 >> 2;
+ r0 = r1 | r0;
+ heap32[(fp+-2)] = r3;
+ heap32[(r2+1)] = r0;
+ f0 = llvm_readDouble((sp+-8));
+ f_g0 = f0;
+ return;
+}
+}
+
+function __udivmoddi4(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+ var r13;
+ var r14;
+ var r15;
+ var r16;
+ var r17;
+ var r18;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ r1 = heap32[(fp+4)];
+ r2 = heap32[(fp)];
+ r3 = heap32[(fp+2)];
+ r4 = heap32[(fp+3)];
+_1: do {
+ if(r0 !=0) //_LBB795_10
+{
+_3: do {
+ if(r3 !=0) //_LBB795_27
+{
+ if(r4 !=0) //_LBB795_34
+{
+ r5 = r4 >>> 1;
+ r6 = r0 >>> 1;
+ r5 = r4 | r5;
+ r6 = r0 | r6;
+ r7 = r5 >>> 2;
+ r9 = r6 >>> 2;
+ r5 = r5 | r7;
+ r6 = r6 | r9;
+ r7 = r5 >>> 4;
+ r9 = r6 >>> 4;
+ r5 = r5 | r7;
+ r6 = r6 | r9;
+ r7 = r5 >>> 8;
+ r9 = r6 >>> 8;
+ r5 = r5 | r7;
+ r6 = r6 | r9;
+ r7 = r5 >>> 16;
+ r9 = r6 >>> 16;
+ r5 = r5 | r7;
+ r6 = r6 | r9;
+ r7 = r5 ^ -1;
+ r9 = r6 ^ -1;
+ r8 = 1431655765;
+ r7 = r7 >>> 1;
+ r9 = r9 >>> 1;
+ r5 = r8 & (~r5);
+ r7 = r7 & 1431655765;
+ r6 = r8 & (~r6);
+ r9 = r9 & 1431655765;
+ r5 = (r5 + r7)|0;
+ r6 = (r6 + r9)|0;
+ r7 = r5 >>> 2;
+ r9 = r6 >>> 2;
+ r5 = r5 & 858993459;
+ r7 = r7 & 858993459;
+ r6 = r6 & 858993459;
+ r9 = r9 & 858993459;
+ r5 = (r5 + r7)|0;
+ r6 = (r6 + r9)|0;
+ r7 = r5 >>> 4;
+ r9 = r6 >>> 4;
+ r5 = r5 & 252645135;
+ r7 = r7 & 252645135;
+ r6 = r6 & 252645135;
+ r9 = r9 & 252645135;
+ r5 = (r5 + r7)|0;
+ r6 = (r6 + r9)|0;
+ r7 = r5 >>> 8;
+ r9 = r6 >>> 8;
+ r5 = r5 & 16711935;
+ r7 = r7 & 16711935;
+ r6 = r6 & 16711935;
+ r9 = r9 & 16711935;
+ r5 = (r5 + r7)|0;
+ r6 = (r6 + r9)|0;
+ r7 = r5 & 65535;
+ r5 = r5 >>> 16;
+ r9 = r6 & 65535;
+ r6 = r6 >>> 16;
+ r5 = (r7 + r5)|0;
+ r6 = (r9 + r6)|0;
+ r5 = (r5 - r6)|0;
+ if(uint(r5) <uint(32)) //_LBB795_37
+{
+ r6 = 31;
+ r7 = (r5 + 1)|0;
+ r9 = (r5 + -31)|0;
+ r5 = (r6 - r5)|0;
+ r6 = r2 >>> r7;
+ r8 = r9 >> 31;
+ r10 = r0 >>> r7;
+ r6 = r6 & r8;
+ r0 = r0 << r5;
+ r9 = 0;
+ r2 = r2 << r5;
+ r5 = r6 | r0;
+ r6 = r10 & r8;
+__label__ = 39;
+break _3;
+}
+else{
+ if(r1 ==0) //_LBB795_7
+{
+__label__ = 7;
+break _1;
+}
+else{
+ r5 = r1 >> 2;
+ heap32[(r5)] = r2;
+ heap32[(r5+1)] = r0;
+ r2 = 0;
+ r_g0 = r2;
+ r_g1 = r2;
+ return;
+}
+}
+}
+else{
+ r5 = (r3 + -1)|0;
+ r6 = r5 & r3;
+ if(r6 !=0) //_LBB795_38
+{
+ r5 = r3 >>> 1;
+ r6 = r0 >>> 1;
+ r5 = r3 | r5;
+ r6 = r0 | r6;
+ r7 = r5 >>> 2;
+ r9 = r6 >>> 2;
+ r5 = r5 | r7;
+ r6 = r6 | r9;
+ r7 = r5 >>> 4;
+ r9 = r6 >>> 4;
+ r5 = r5 | r7;
+ r6 = r6 | r9;
+ r7 = r5 >>> 8;
+ r9 = r6 >>> 8;
+ r5 = r5 | r7;
+ r6 = r6 | r9;
+ r7 = r5 >>> 16;
+ r9 = r6 >>> 16;
+ r5 = r5 | r7;
+ r6 = r6 | r9;
+ r7 = r5 ^ -1;
+ r9 = r6 ^ -1;
+ r8 = 1431655765;
+ r7 = r7 >>> 1;
+ r9 = r9 >>> 1;
+ r5 = r8 & (~r5);
+ r7 = r7 & 1431655765;
+ r6 = r8 & (~r6);
+ r9 = r9 & 1431655765;
+ r5 = (r5 + r7)|0;
+ r6 = (r6 + r9)|0;
+ r7 = r5 >>> 2;
+ r9 = r6 >>> 2;
+ r5 = r5 & 858993459;
+ r7 = r7 & 858993459;
+ r6 = r6 & 858993459;
+ r9 = r9 & 858993459;
+ r5 = (r5 + r7)|0;
+ r6 = (r6 + r9)|0;
+ r7 = r5 >>> 4;
+ r9 = r6 >>> 4;
+ r5 = r5 & 252645135;
+ r7 = r7 & 252645135;
+ r6 = r6 & 252645135;
+ r9 = r9 & 252645135;
+ r5 = (r5 + r7)|0;
+ r6 = (r6 + r9)|0;
+ r7 = r5 >>> 8;
+ r9 = r6 >>> 8;
+ r5 = r5 & 16711935;
+ r7 = r7 & 16711935;
+ r6 = r6 & 16711935;
+ r9 = r9 & 16711935;
+ r5 = (r5 + r7)|0;
+ r6 = (r6 + r9)|0;
+ r7 = r5 & 65535;
+ r5 = r5 >>> 16;
+ r9 = r6 & 65535;
+ r6 = r6 >>> 16;
+ r5 = (r7 + r5)|0;
+ r6 = (r9 + r6)|0;
+ r5 = (r5 - r6)|0;
+ r6 = 31;
+ r7 = (r5 + 33)|0;
+ r9 = r5 ^ -1;
+ r8 = (r5 + 1)|0;
+ r6 = (r6 - r5)|0;
+ r10 = -2;
+ r10 = (r10 - r5)|0;
+ r11 = r0 << r6;
+ r12 = r2 >>> r8;
+ r13 = r2 >>> r7;
+ r14 = r0 << r9;
+ r11 = r11 | r12;
+ r12 = r9 >> 31;
+ r9 = r2 << r9;
+ r5 = r5 >> 31;
+ r13 = r13 | r14;
+ r14 = r8 >> 31;
+ r8 = r0 >>> r8;
+ r10 = r10 >> 31;
+ r2 = r2 << r6;
+ r0 = r0 >>> r7;
+ r6 = r11 & r12;
+ r5 = r9 & r5;
+ r11 = r13 & r14;
+ r8 = r8 & r10;
+ r9 = r2 & r12;
+ r2 = r6 | r5;
+ r5 = r11 | r8;
+ r6 = r0 & r14;
+ if(r7 ==0) //_LBB795_40
+{
+ r0 = 0;
+ r3 = r0;
+__label__ = 42;
+break _3;
+}
+else{
+__label__ = 39;
+break _3;
+}
+}
+else{
+if(!(r1 ==0)) //_LBB795_31
+{
+ r1 = r1 >> 2;
+ r4 = r5 & r2;
+ heap32[(r1)] = r4;
+ heap32[(r1+1)] = 0;
+}
+ if(r3 !=1) //_LBB795_33
+{
+ r1 = r5 & (~r3);
+ r3 = r1 >>> 1;
+ r1 = r1 & 1431655765;
+ r3 = r3 & 1431655765;
+ r1 = (r1 + r3)|0;
+ r3 = r1 >>> 2;
+ r1 = r1 & 858993459;
+ r3 = r3 & 858993459;
+ r1 = (r1 + r3)|0;
+ r3 = r1 >>> 4;
+ r1 = r1 & 252645135;
+ r3 = r3 & 252645135;
+ r1 = (r1 + r3)|0;
+ r3 = r1 >>> 8;
+ r1 = r1 & 16711935;
+ r3 = r3 & 16711935;
+ r1 = (r1 + r3)|0;
+ r3 = r1 & 65535;
+ r1 = r1 >>> 16;
+ r1 = (r3 + r1)|0;
+ r3 = 32;
+ r3 = (r3 - r1)|0;
+ r3 = r0 << r3;
+ r2 = r2 >>> r1;
+ r2 = r3 | r2;
+ r0 = r0 >>> r1;
+__label__ = 44;
+break _1;
+}
+else{
+__label__ = 44;
+break _1;
+}
+}
+}
+}
+else{
+ if(r4 !=0) //_LBB795_15
+{
+ if(r2 !=0) //_LBB795_19
+{
+ r5 = (r4 + -1)|0;
+ r6 = r5 & r4;
+ if(r6 !=0) //_LBB795_23
+{
+ r5 = r4 >>> 1;
+ r6 = r0 >>> 1;
+ r5 = r4 | r5;
+ r6 = r0 | r6;
+ r7 = r5 >>> 2;
+ r8 = r6 >>> 2;
+ r5 = r5 | r7;
+ r6 = r6 | r8;
+ r7 = r5 >>> 4;
+ r8 = r6 >>> 4;
+ r5 = r5 | r7;
+ r6 = r6 | r8;
+ r7 = r5 >>> 8;
+ r8 = r6 >>> 8;
+ r5 = r5 | r7;
+ r6 = r6 | r8;
+ r7 = r5 >>> 16;
+ r8 = r6 >>> 16;
+ r5 = r5 | r7;
+ r6 = r6 | r8;
+ r7 = r5 ^ -1;
+ r8 = r6 ^ -1;
+ r9 = 1431655765;
+ r7 = r7 >>> 1;
+ r8 = r8 >>> 1;
+ r5 = r9 & (~r5);
+ r7 = r7 & 1431655765;
+ r6 = r9 & (~r6);
+ r8 = r8 & 1431655765;
+ r5 = (r5 + r7)|0;
+ r6 = (r6 + r8)|0;
+ r7 = r5 >>> 2;
+ r8 = r6 >>> 2;
+ r5 = r5 & 858993459;
+ r7 = r7 & 858993459;
+ r6 = r6 & 858993459;
+ r8 = r8 & 858993459;
+ r5 = (r5 + r7)|0;
+ r6 = (r6 + r8)|0;
+ r7 = r5 >>> 4;
+ r8 = r6 >>> 4;
+ r5 = r5 & 252645135;
+ r7 = r7 & 252645135;
+ r6 = r6 & 252645135;
+ r8 = r8 & 252645135;
+ r5 = (r5 + r7)|0;
+ r6 = (r6 + r8)|0;
+ r7 = r5 >>> 8;
+ r8 = r6 >>> 8;
+ r5 = r5 & 16711935;
+ r7 = r7 & 16711935;
+ r6 = r6 & 16711935;
+ r8 = r8 & 16711935;
+ r5 = (r5 + r7)|0;
+ r6 = (r6 + r8)|0;
+ r7 = r5 & 65535;
+ r5 = r5 >>> 16;
+ r8 = r6 & 65535;
+ r6 = r6 >>> 16;
+ r5 = (r7 + r5)|0;
+ r6 = (r8 + r6)|0;
+ r5 = (r5 - r6)|0;
+ if(uint(r5) <uint(31)) //_LBB795_26
+{
+ r6 = 31;
+ r7 = (r5 + 1)|0;
+ r5 = (r6 - r5)|0;
+ r6 = r0 << r5;
+ r8 = r2 >>> r7;
+ r9 = 0;
+ r2 = r2 << r5;
+ r5 = r6 | r8;
+ r6 = r0 >>> r7;
+__label__ = 39;
+break _3;
+}
+else{
+ if(r1 ==0) //_LBB795_7
+{
+__label__ = 7;
+break _1;
+}
+else{
+ r1 = r1 >> 2;
+ heap32[(r1)] = r2;
+ heap32[(r1+1)] = r0;
+__label__ = 9;
+break _1;
+}
+}
+}
+else{
+if(!(r1 ==0)) //_LBB795_22
+{
+ r1 = r1 >> 2;
+ r3 = r5 & r0;
+ heap32[(r1)] = r2;
+ heap32[(r1+1)] = r3;
+}
+ r1 = (r4 + -1)|0;
+ r1 = r1 & (~r4);
+ r2 = r1 >>> 1;
+ r1 = r1 & 1431655765;
+ r2 = r2 & 1431655765;
+ r1 = (r1 + r2)|0;
+ r2 = r1 >>> 2;
+ r1 = r1 & 858993459;
+ r2 = r2 & 858993459;
+ r1 = (r1 + r2)|0;
+ r2 = r1 >>> 4;
+ r1 = r1 & 252645135;
+ r2 = r2 & 252645135;
+ r1 = (r1 + r2)|0;
+ r2 = r1 >>> 8;
+ r1 = r1 & 16711935;
+ r2 = r2 & 16711935;
+ r1 = (r1 + r2)|0;
+ r2 = r1 & 65535;
+ r1 = r1 >>> 16;
+ r1 = (r2 + r1)|0;
+ r0 = r0 >>> r1;
+__label__ = 5;
+break _1;
+}
+}
+else{
+if(!(r1 ==0)) //_LBB795_18
+{
+ r1 = r1 >> 2;
+ r2 = Math.floor(uint(r0) % uint(r4));
+ heap32[(r1)] = 0;
+ heap32[(r1+1)] = r2;
+}
+ r0 = Math.floor(uint(r0) /uint(r4));
+__label__ = 5;
+break _1;
+}
+}
+else{
+if(!(r1 ==0)) //_LBB795_14
+{
+ r1 = r1 >> 2;
+ r2 = Math.floor(uint(r0) % uint(r3));
+ heap32[(r1)] = r2;
+ heap32[(r1+1)] = 0;
+}
+ r0 = Math.floor(uint(r0) /uint(r3));
+__label__ = 5;
+break _1;
+}
+}
+} while(0);
+if (__label__ == 39){
+ r8 = (r3 + -1)|0;
+ r10 = 0;
+ r11 = 1;
+ r0 = uint(r8) < uint(r3) ? r11 : r10;
+ r0 = r3 != 0 ? r11 : r0;
+ r0 = (r4 + r0)|0;
+ r12 = (r0 + -1)|0;
+ r13 = r10;
+_45: while(true){
+ r0 = r5 << 1;
+ r14 = r2 >>> 31;
+ r6 = r6 << 1;
+ r5 = r5 >>> 31;
+ r14 = r0 | r14;
+ r0 = r6 | r5;
+ r5 = (r12 - r0)|0;
+ r6 = uint(r8) < uint(r14) ? r11 : r10;
+ r5 = (r5 - r6)|0;
+ r5 = r5 >> 31;
+ r6 = r5 & r3;
+ r15 = r5 & r4;
+ r16 = r9 << 1;
+ r2 = r2 << 1;
+ r17 = r9 >>> 31;
+ r15 = (r0 - r15)|0;
+ r18 = uint(r14) < uint(r6) ? r11 : r10;
+ r7 = (r7 + -1)|0;
+ r0 = r5 & 1;
+ r9 = r13 | r16;
+ r2 = r2 | r17;
+ r5 = (r14 - r6)|0;
+ r6 = (r15 - r18)|0;
+ r13 = r0;
+if(!(r7 !=0)) //_LBB795_42
+{
+break _45;
+}
+}
+ r3 = 0;
+}
+ r2 = r2 << 1;
+ r4 = r9 >>> 31;
+ r7 = r9 << 1;
+ r4 = r2 | r4;
+ r2 = r0 | r7;
+ r0 = r3 | r4;
+ if(r1 !=0) //_LBB795_46
+{
+ r1 = r1 >> 2;
+ heap32[(r1)] = r5;
+ heap32[(r1+1)] = r6;
+__label__ = 44;
+break _1;
+}
+else{
+__label__ = 44;
+break _1;
+}
+}
+else{
+ if(r4 !=0) //_LBB795_6
+{
+ if(r1 !=0) //_LBB795_8
+{
+ r0 = r1 >> 2;
+ heap32[(r0)] = r2;
+ heap32[(r0+1)] = 0;
+__label__ = 9;
+break _1;
+}
+else{
+__label__ = 7;
+break _1;
+}
+}
+else{
+if(!(r1 ==0)) //_LBB795_4
+{
+ r0 = r1 >> 2;
+ r1 = Math.floor(uint(r2) % uint(r3));
+ heap32[(r0)] = r1;
+ heap32[(r0+1)] = 0;
+}
+ r0 = Math.floor(uint(r2) /uint(r3));
+__label__ = 5;
+}
+}
+} while(0);
+switch(__label__ ){//multiple entries
+case 7:
+ r2 = 0;
+ r0 = r2;
+break;
+case 9:
+ r0 = 0;
+ r_g0 = r0;
+ r_g1 = r0;
+ return;
+break;
+case 5:
+ r1 = 0;
+ r_g0 = r0;
+ r_g1 = r1;
+ return;
+break;
+}
+ r_g0 = r2;
+ r_g1 = r0;
+ return;
+}
+
+function __umoddi3(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+var __label__ = 0;
+ i7 = sp + -32;var g0 = i7>>2; // save stack
+ r0 = sp + -8;
+ r1 = heap32[(fp)];
+ r2 = heap32[(fp+1)];
+ r3 = heap32[(fp+2)];
+ r4 = heap32[(fp+3)];
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r2;
+ heap32[(g0+2)] = r3;
+ heap32[(g0+3)] = r4;
+ heap32[(g0+4)] = r0;
+ __udivmoddi4(i7);
+ r0 = r0 >> 2;
+ r1 = heap32[(fp+-2)];
+ r0 = heap32[(r0+1)];
+ r_g0 = r1;
+ r_g1 = r0;
+ return;
+}
+
+function __moddi3(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+var __label__ = 0;
+ i7 = sp + -32;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+3)];
+ r1 = heap32[(fp+1)];
+ r2 = r0 >> 31;
+ r3 = heap32[(fp+2)];
+ r4 = r1 >> 31;
+ r5 = heap32[(fp)];
+ r1 = r4 ^ r1;
+ r5 = r4 ^ r5;
+ r0 = r2 ^ r0;
+ r3 = r2 ^ r3;
+ r6 = 1;
+ r7 = 0;
+ r1 = (r1 - r4)|0;
+ r8 = uint(r5) < uint(r4) ? r6 : r7;
+ r0 = (r0 - r2)|0;
+ r9 = uint(r3) < uint(r2) ? r6 : r7;
+ r10 = sp + -8;
+ r5 = (r5 - r4)|0;
+ r1 = (r1 - r8)|0;
+ r2 = (r3 - r2)|0;
+ r0 = (r0 - r9)|0;
+ heap32[(g0)] = r5;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = r2;
+ heap32[(g0+3)] = r0;
+ heap32[(g0+4)] = r10;
+ __udivmoddi4(i7);
+ r0 = r10 >> 2;
+ r0 = heap32[(r0+1)];
+ r1 = heap32[(fp+-2)];
+ r1 = r1 ^ r4;
+ r0 = r0 ^ r4;
+ r0 = (r0 - r4)|0;
+ r2 = uint(r1) < uint(r4) ? r6 : r7;
+ r1 = (r1 - r4)|0;
+ r0 = (r0 - r2)|0;
+ r_g0 = r1;
+ r_g1 = r0;
+ return;
+}
+
+function __divdi3(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+var __label__ = 0;
+ i7 = sp + -24;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+3)];
+ r1 = heap32[(fp+1)];
+ r2 = r1 >> 31;
+ r3 = heap32[(fp)];
+ r4 = r0 >> 31;
+ r5 = heap32[(fp+2)];
+ r6 = r2 ^ r1;
+ r3 = r2 ^ r3;
+ r7 = r4 ^ r0;
+ r5 = r4 ^ r5;
+ r8 = 1;
+ r9 = 0;
+ r6 = (r6 - r2)|0;
+ r10 = uint(r3) < uint(r2) ? r8 : r9;
+ r7 = (r7 - r4)|0;
+ r11 = uint(r5) < uint(r4) ? r8 : r9;
+ r2 = (r3 - r2)|0;
+ r3 = (r6 - r10)|0;
+ r4 = (r5 - r4)|0;
+ r5 = (r7 - r11)|0;
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = r3;
+ heap32[(g0+2)] = r4;
+ heap32[(g0+3)] = r5;
+ heap32[(g0+4)] = 0;
+ r0 = r0 ^ r1;
+ __udivmoddi4(i7);
+ r0 = r0 >> 31;
+ r1 = r_g0 ^ r0;
+ r2 = r_g1 ^ r0;
+ r2 = (r2 - r0)|0;
+ r3 = uint(r1) < uint(r0) ? r8 : r9;
+ r0 = (r1 - r0)|0;
+ r1 = (r2 - r3)|0;
+ r_g0 = r0;
+ r_g1 = r1;
+ return;
+}
+
+function __udivdi3(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+var __label__ = 0;
+ i7 = sp + -24;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = heap32[(fp+1)];
+ r2 = heap32[(fp+2)];
+ r3 = heap32[(fp+3)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = r2;
+ heap32[(g0+3)] = r3;
+ heap32[(g0+4)] = 0;
+ __udivmoddi4(i7);
+ return;
+}
+
+function sscanf(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+ var r13;
+ var r14;
+ var r15;
+ var r16;
+ var r17;
+ var r18;
+ var r19;
+ var r20;
+ var f0;
+ var f1;
+ var f2;
+ var f3;
+var __label__ = 0;
+ i7 = sp + -40;var g0 = i7>>2; // save stack
+ r0 = (sp + 4)|0;
+ r1 = heap32[(fp)];
+ heap32[(fp+-5)] = r0;
+ heap32[(fp+-4)] = r1;
+ heap32[(fp+-1)] = r0;
+ r0 = sp + -16;
+ heap32[(g0)] = r0;
+ r1 = 1;
+ r2 = 0;
+ r3 = _2E_str7136;
+ sgetc(i7);
+ r4 = r_g0;
+ f3 = 10;
+ r20 = 255;
+_1: while(true){
+ r5 = heapU8[r3];
+ if(r5 !=0) //_LBB800_1
+{
+ r5 = r5 << 24;
+ r5 = r5 >> 24;
+ r6 = (r3 + 1)|0;
+ if(r5 >31) //_LBB800_4
+{
+ if(r5 ==32) //_LBB800_7
+{
+__label__ = 7;
+}
+else{
+ if(r5 ==37) //_LBB800_8
+{
+ r5 = -1;
+ r7 = 0;
+ r8 = r7;
+ r9 = r7;
+ r10 = r7;
+ r11 = r7;
+_8: while(true){
+ r12 = heap8[r6];
+if(!(r12 ==110)) //_LBB800_17
+{
+ if(r4 ==-1) //_LBB800_187
+{
+__label__ = 168;
+break _1;
+}
+}
+ if(r12 >103) //_LBB800_31
+{
+ if(r12 >111) //_LBB800_38
+{
+ if(r12 >114) //_LBB800_41
+{
+__label__ = 40;
+break _8;
+}
+else{
+ if(r12 ==112) //_LBB800_59
+{
+__label__ = 52;
+break _8;
+}
+else{
+if(!(r12 ==113)) //_LBB800_45
+{
+__label__ = 168;
+break _1;
+}
+}
+}
+}
+else{
+ if(r12 >107) //_LBB800_35
+{
+ if(r12 ==108) //_LBB800_55
+{
+ r3 = 1;
+ r10 = r10 & 255;
+ r11 = r10 == 0 ? r11 : r3;
+ r6 = (r6 + 1)|0;
+ r10 = r3;
+continue _8;
+}
+else{
+__label__ = 35;
+break _8;
+}
+}
+else{
+ if(r12 ==104) //_LBB800_53
+{
+ r6 = (r6 + 1)|0;
+ r9 = 1;
+continue _8;
+}
+else{
+__label__ = 33;
+break _8;
+}
+}
+}
+}
+else{
+ if(r12 >75) //_LBB800_25
+{
+ if(r12 >98) //_LBB800_28
+{
+__label__ = 27;
+break _8;
+}
+else{
+if(!(r12 ==76)) //_LBB800_45
+{
+__label__ = 26;
+break _8;
+}
+}
+}
+else{
+ if(r12 >41) //_LBB800_22
+{
+ if(r12 ==42) //_LBB800_46
+{
+ r6 = (r6 + 1)|0;
+ r8 = 1;
+continue _8;
+}
+else{
+ r5 = (r12 + -48)|0;
+ if(uint(r5) <uint(10)) //_LBB800_57
+{
+ r5 = sp + -8;
+ heap32[(g0)] = r6;
+ heap32[(g0+1)] = r5;
+ strtol(i7);
+ r5 = r_g0;
+ r6 = heap32[(fp+-2)];
+ r7 = 1;
+continue _8;
+}
+else{
+__label__ = 23;
+break _8;
+}
+}
+}
+else{
+__label__ = 19;
+break _8;
+}
+}
+}
+ r6 = (r6 + 1)|0;
+ r11 = 1;
+}
+_36: do {
+switch(__label__ ){//multiple entries
+case 40:
+ if(r12 ==115) //_LBB800_165
+{
+ r8 = r8 & 255;
+if(!(r8 !=0)) //_LBB800_167
+{
+ r3 = sp + -4;
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = 4;
+ my_arg_test(i7);
+ r3 = r_g0 >> 2;
+ r3 = heap32[(r3)];
+ heap32[(fp+-2)] = r3;
+}
+ r3 = (r6 + 1)|0;
+ r6 = r4 << 2;
+ r7 = my_ctype;
+ r6 = (r6 + r7)|0;
+ r6 = heapU8[r6+4];
+ r6 = r6 & 8;
+_43: do {
+ if(r6 ==0) //_LBB800_169
+{
+ r6 = r4;
+}
+else{
+_45: while(true){
+ heap32[(g0)] = r0;
+ sgetc(i7);
+ r6 = r_g0;
+ r4 = r6 << 2;
+ r4 = (r4 + r7)|0;
+ r1 = (r1 + 1)|0;
+ r4 = heapU8[r4+4];
+ r4 = r4 & 8;
+if(!(r4 !=0)) //_LBB800_170
+{
+break _43;
+}
+}
+}
+} while(0);
+ r4 = -1;
+ if(r6 ==-1) //_LBB800_186
+{
+continue _1;
+}
+else{
+ r4 = r6;
+_49: while(true){
+ if(r4 ==-1) //_LBB800_180
+{
+break _49;
+}
+else{
+ if(r5 ==0) //_LBB800_180
+{
+break _49;
+}
+else{
+ r6 = r4 << 2;
+ r6 = (r6 + r7)|0;
+ r6 = heapU8[r6+4];
+ r6 = r6 & 8;
+ if(r6 ==0) //_LBB800_173
+{
+if(!(r8 !=0)) //_LBB800_175
+{
+ r6 = heap32[(fp+-2)];
+ heap8[r6] = r4;
+}
+ if(r4 ==0) //_LBB800_180
+{
+break _49;
+}
+else{
+ r4 = heap32[(fp+-2)];
+ r4 = (r4 + 1)|0;
+ heap32[(fp+-2)] = r4;
+ heap32[(g0)] = r0;
+ r1 = (r1 + 1)|0;
+ r5 = (r5 + -1)|0;
+ sgetc(i7);
+ r4 = r_g0;
+}
+}
+else{
+break _49;
+}
+}
+}
+}
+ if(r8 !=0) //_LBB800_186
+{
+continue _1;
+}
+else{
+ r2 = (r2 + 1)|0;
+ r5 = heap32[(fp+-2)];
+ r6 = 0;
+ heap8[r5] = r6;
+continue _1;
+}
+}
+}
+else{
+ if(r12 ==117) //_LBB800_60
+{
+__label__ = 53;
+break _36;
+}
+else{
+ if(r12 ==120) //_LBB800_59
+{
+__label__ = 52;
+break _36;
+}
+else{
+__label__ = 168;
+break _1;
+}
+}
+}
+break;
+case 35:
+ if(r12 ==110) //_LBB800_182
+{
+ r3 = (r6 + 1)|0;
+ r5 = r8 & 255;
+ if(r5 !=0) //_LBB800_186
+{
+continue _1;
+}
+else{
+ r5 = sp + -4;
+ heap32[(g0)] = r5;
+ heap32[(g0+1)] = 4;
+ my_arg_test(i7);
+ r5 = r_g0 >> 2;
+ r5 = heap32[(r5)];
+ r5 = r5 >> 2;
+ r6 = (r1 + -1)|0;
+ heap32[(r5)] = r6;
+continue _1;
+}
+}
+else{
+ if(r12 ==111) //_LBB800_44
+{
+ r13 = 8;
+__label__ = 55;
+break _36;
+}
+else{
+__label__ = 168;
+break _1;
+}
+}
+break;
+case 33:
+ if(r12 ==105) //_LBB800_60
+{
+__label__ = 53;
+break _36;
+}
+else{
+__label__ = 168;
+break _1;
+}
+break;
+case 27:
+ if(r12 ==99) //_LBB800_155
+{
+ r3 = (r6 + 1)|0;
+ r6 = r8 & 255;
+ if(r6 ==0) //_LBB800_157
+{
+ r8 = sp + -4;
+ heap32[(g0)] = r8;
+ heap32[(g0+1)] = 4;
+ my_arg_test(i7);
+ r8 = r_g0 >> 2;
+ r8 = heap32[(r8)];
+ r2 = (r2 + 1)|0;
+ heap32[(fp+-2)] = r8;
+}
+ r8 = r7 & 255;
+ r7 = 1;
+ r5 = r8 == 0 ? r7 : r5;
+ if(r5 ==0) //_LBB800_186
+{
+continue _1;
+}
+else{
+ if(r4 ==-1) //_LBB800_186
+{
+continue _1;
+}
+else{
+ r5 = (r5 + -1)|0;
+_77: while(true){
+if(!(r6 !=0)) //_LBB800_163
+{
+ r8 = heap32[(fp+-2)];
+ r7 = (r8 + 1)|0;
+ heap8[r8] = r4;
+ heap32[(fp+-2)] = r7;
+}
+ heap32[(g0)] = r0;
+ r1 = (r1 + 1)|0;
+ sgetc(i7);
+ r4 = r_g0;
+ if(r5 ==0) //_LBB800_186
+{
+continue _1;
+}
+else{
+ r5 = (r5 + -1)|0;
+ if(r4 !=-1) //_LBB800_161
+{
+continue _77;
+}
+else{
+continue _1;
+}
+}
+}
+}
+}
+}
+else{
+ if(r12 ==100) //_LBB800_61
+{
+ r13 = 10;
+__label__ = 55;
+break _36;
+}
+else{
+ r5 = (r12 + -101)|0;
+ if(uint(r5) <uint(3)) //_LBB800_48
+{
+__label__ = 46;
+break _36;
+}
+else{
+__label__ = 168;
+break _1;
+}
+}
+}
+break;
+case 26:
+ if(r12 ==88) //_LBB800_59
+{
+__label__ = 52;
+break _36;
+}
+else{
+__label__ = 168;
+break _1;
+}
+break;
+case 23:
+ if(r12 ==69) //_LBB800_48
+{
+__label__ = 46;
+break _36;
+}
+else{
+__label__ = 168;
+break _1;
+}
+break;
+case 19:
+ if(r12 ==0) //_LBB800_6
+{
+__label__ = 6;
+break _1;
+}
+else{
+ if(r12 ==37) //_LBB800_51
+{
+ r5 = r4 & 255;
+ if(r5 !=r12) //_LBB800_187
+{
+__label__ = 168;
+break _1;
+}
+else{
+ heap32[(g0)] = r0;
+ r1 = (r1 + 1)|0;
+ r3 = (r6 + 1)|0;
+ sgetc(i7);
+ r4 = r_g0;
+continue _1;
+}
+}
+else{
+__label__ = 168;
+break _1;
+}
+}
+break;
+}
+} while(0);
+switch(__label__ ){//multiple entries
+case 53:
+ r13 = 0;
+break;
+case 52:
+ r13 = 16;
+break;
+case 46:
+ r5 = r4 << 2;
+ r7 = my_ctype;
+ r5 = (r5 + r7)|0;
+ r5 = heapU8[r5+4];
+ r3 = (r6 + 1)|0;
+ r5 = r5 & 8;
+_97: do {
+if(!(r5 ==0)) //_LBB800_50
+{
+_98: while(true){
+ heap32[(g0)] = r0;
+ sgetc(i7);
+ r4 = r_g0;
+ r5 = r4 << 2;
+ r5 = (r5 + r7)|0;
+ r1 = (r1 + 1)|0;
+ r5 = heapU8[r5+4];
+ r5 = r5 & 8;
+if(!(r5 !=0)) //_LBB800_111
+{
+break _97;
+}
+}
+}
+} while(0);
+ if(r4 ==45) //_LBB800_114
+{
+ heap32[(g0)] = r0;
+ r1 = (r1 + 1)|0;
+ r5 = 1;
+ sgetc(i7);
+ r4 = r_g0;
+}
+else{
+ r5 = 0;
+}
+ if(r4 ==43) //_LBB800_117
+{
+ heap32[(g0)] = r0;
+ r1 = (r1 + 1)|0;
+ sgetc(i7);
+ r4 = r_g0;
+}
+ r6 = (r4 + -48)|0;
+_108: do {
+ if(uint(r6) >uint(9)) //_LBB800_120
+{
+ f0 = 0;
+ r6 = r1;
+}
+else{
+ f0 = 0;
+ r6 = r1;
+_111: while(true){
+ r4 = (r4 + -48)|0;
+ f1 = 10;
+ heap32[(g0)] = r0;
+ f0 = f0*f1;
+ f1 = r4; //fitod r4, f1
+ sgetc(i7);
+ r4 = r_g0;
+ f0 = f0+f1;
+ r6 = (r6 + 1)|0;
+ r7 = (r4 + -48)|0;
+if(!(uint(r7) <uint(10))) //_LBB800_121
+{
+break _108;
+}
+}
+}
+} while(0);
+_114: do {
+ if(r4 ==46) //_LBB800_124
+{
+ heap32[(g0)] = r0;
+ sgetc(i7);
+ r4 = r_g0;
+ r1 = (r1 + 1)|0;
+ r7 = (r4 + -48)|0;
+ if(uint(r7) <uint(10)) //_LBB800_126
+{
+ r6 = (r6 + 1)|0;
+ f1 = 0.10000000000000001;
+_118: while(true){
+ r4 = (r4 + -48)|0;
+ f2 = r4; //fitod r4, f2
+ heap32[(g0)] = r0;
+ f2 = f2*f1;
+ sgetc(i7);
+ r4 = r_g0;
+ f0 = f2+f0;
+ f1 = f1/f3;
+ r6 = (r6 + 1)|0;
+ r7 = (r4 + -48)|0;
+if(!(uint(r7) <uint(10))) //_LBB800_127
+{
+break _114;
+}
+}
+}
+else{
+ r6 = (r6 + 1)|0;
+}
+}
+} while(0);
+ if(r1 ==r6) //_LBB800_73
+{
+__label__ = 172;
+break _1;
+}
+else{
+ r1 = r4 | 32;
+_123: do {
+ if(r1 ==101) //_LBB800_131
+{
+ heap32[(g0)] = r0;
+ sgetc(i7);
+ r1 = r_g0;
+ if(r1 ==45) //_LBB800_135
+{
+ heap32[(g0)] = r0;
+ f1 = 0.10000000000000001;
+ sgetc(i7);
+ r4 = r_g0;
+}
+else{
+ if(r1 ==43) //_LBB800_136
+{
+ heap32[(g0)] = r0;
+ f1 = 10;
+ sgetc(i7);
+ r4 = r_g0;
+}
+else{
+ if(r1 !=-1) //_LBB800_137
+{
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r0;
+ f0 = 0;
+ sputc(i7);
+ r1 = r6;
+break _123;
+}
+else{
+ r1 = (r6 + 1)|0;
+ f0 = 0;
+break _123;
+}
+}
+}
+ r7 = (r6 + 2)|0;
+ r1 = (r4 + -48)|0;
+_135: do {
+ if(uint(r1) <uint(10)) //_LBB800_140
+{
+ r1 = (r6 + 2)|0;
+ r6 = 0;
+_137: while(true){
+ r6 = (r6 * 10)|0;
+ heap32[(g0)] = r0;
+ r6 = (r4 + r6)|0;
+ sgetc(i7);
+ r4 = r_g0;
+ r6 = (r6 + -48)|0;
+ r1 = (r1 + 1)|0;
+ r9 = (r4 + -48)|0;
+if(!(uint(r9) <uint(10))) //_LBB800_141
+{
+break _135;
+}
+}
+}
+else{
+ r6 = 0;
+ r1 = r7;
+}
+} while(0);
+ if(r7 ==r1) //_LBB800_73
+{
+__label__ = 172;
+break _1;
+}
+else{
+if(!(r6 ==0)) //_LBB800_145
+{
+__label__ = 130; //SET chanka
+_142: while(true){
+ r6 = (r6 + -1)|0;
+ f0 = f0*f1;
+if(!(r6 !=0)) //_LBB800_146
+{
+break _123;
+}
+}
+}
+}
+}
+else{
+ r1 = r6;
+}
+} while(0);
+ if(r5 !=0) //_LBB800_149
+{
+ f0 = -f0;
+}
+ r5 = r8 & 255;
+ if(r5 !=0) //_LBB800_186
+{
+continue _1;
+}
+else{
+ r5 = sp + -4;
+ heap32[(g0)] = r5;
+ heap32[(g0+1)] = 4;
+ my_arg_test(i7);
+ r5 = r_g0;
+ r6 = r10 & 255;
+ if(r6 ==0) //_LBB800_153
+{
+ r5 = r5 >> 2;
+ r5 = heap32[(r5)];
+ r5 = r5 >> 2;
+ f0 = f0; //fdtos f0, f0
+ heapFloat[(r5)] = f0;
+}
+else{
+ r5 = r5 >> 2;
+ r5 = heap32[(r5)];
+ llvm_writeDouble((r5),f0);
+}
+ r2 = (r2 + 1)|0;
+continue _1;
+}
+}
+break;
+}
+ r3 = r4 << 2;
+ r14 = my_ctype;
+ r3 = (r3 + r14)|0;
+ r15 = heapU8[r3+4];
+ r3 = (r6 + 1)|0;
+ r6 = r15 & 8;
+_155: do {
+if(!(r6 ==0)) //_LBB800_64
+{
+_156: while(true){
+ heap32[(g0)] = r0;
+ sgetc(i7);
+ r4 = r_g0;
+ r6 = r4 << 2;
+ r6 = (r6 + r14)|0;
+ r1 = (r1 + 1)|0;
+ r6 = heapU8[r6+4];
+ r6 = r6 & 8;
+if(!(r6 !=0)) //_LBB800_65
+{
+break _155;
+}
+}
+}
+} while(0);
+ if(r4 ==45) //_LBB800_68
+{
+ heap32[(g0)] = r0;
+ r1 = (r1 + 1)|0;
+ r6 = 1;
+ sgetc(i7);
+ r4 = r_g0;
+}
+else{
+ r6 = 0;
+}
+ if(r4 ==43) //_LBB800_71
+{
+ heap32[(g0)] = r0;
+ r14 = (r1 + 1)|0;
+ sgetc(i7);
+ r4 = r_g0;
+}
+else{
+ r14 = r1;
+}
+ if(r4 !=-1) //_LBB800_74
+{
+ r7 = r7 & 255;
+_168: do {
+ if(r7 ==0) //_LBB800_76
+{
+ if(r13 !=16) //_LBB800_79
+{
+__label__ = 68;
+}
+else{
+ if(r4 !=48) //_LBB800_79
+{
+__label__ = 68;
+}
+else{
+__label__ = 72;
+}
+}
+_172: do {
+if (__label__ == 68){
+if(!(r13 !=0)) //_LBB800_82
+{
+ r7 = 48;
+ r7 = r4 != r7;
+if(!(r7 != 0)) //_LBB800_82
+{
+ r13 = 8;
+break _172;
+}
+}
+ r7 = 10;
+ r13 = r13 != 0 ? r13 : r7;
+ r1 = r14;
+break _168;
+}
+} while(0);
+ heap32[(g0)] = r0;
+ sgetc(i7);
+ r4 = r_g0;
+ r7 = r4 | 32;
+ if(r7 ==120) //_LBB800_85
+{
+ heap32[(g0)] = r0;
+ r1 = (r14 + 2)|0;
+ r13 = 16;
+ sgetc(i7);
+ r4 = r_g0;
+}
+else{
+ r1 = (r14 + 1)|0;
+}
+}
+else{
+ r1 = r14;
+}
+} while(0);
+ r7 = 0;
+ r15 = r7;
+ r16 = r7;
+_184: while(true){
+ if(r5 ==0) //_LBB800_97
+{
+break _184;
+}
+else{
+ if(r4 !=-1) //_LBB800_87
+{
+ r17 = r4 & 255;
+ r18 = r17 | 32;
+ if(uint(r18) <uint(97)) //_LBB800_89
+{
+ r18 = 58;
+ r19 = (r17 + -48)|0;
+ r17 = uint(r17) < uint(r18) ? r19 : r20;
+}
+else{
+ r17 = (r18 + -87)|0;
+}
+ if(uint(r17) >=uint(r13)) //_LBB800_97
+{
+break _184;
+}
+else{
+ heap32[(g0)] = r15;
+ heap32[(g0+1)] = r16;
+ heap32[(g0+2)] = r13;
+ heap32[(g0+3)] = r7;
+ __muldi3(i7);
+ r4 = r_g0;
+ r18 = r_g1;
+ r15 = uint(r4) >= uint(r15);
+ r19 = uint(r18) >= uint(r16);
+ r15 = r18 == r16 ? r15 : r19;
+ if(r15 != 0) //_LBB800_93
+{
+ r15 = (r17 + r4)|0;
+ r16 = 1;
+ r17 = uint(r15) < uint(r17) ? r16 : r7;
+ r4 = uint(r15) < uint(r4) ? r16 : r17;
+ r16 = (r18 + r4)|0;
+}
+else{
+ r15 = -1;
+ r16 = r15;
+}
+ heap32[(g0)] = r0;
+ r1 = (r1 + 1)|0;
+ r5 = (r5 + -1)|0;
+ sgetc(i7);
+ r4 = r_g0;
+}
+}
+else{
+break _184;
+}
+}
+}
+ if(r14 ==r1) //_LBB800_73
+{
+__label__ = 172;
+break _1;
+}
+else{
+ r5 = r12 | 32;
+if(!(uint(r5) >uint(111))) //_LBB800_100
+{
+ if(r16 >-1) //_LBB800_101
+{
+ r5 = 1;
+ r12 = (r7 - r16)|0;
+ r5 = r15 != 0 ? r5 : r7;
+ r7 = (r7 - r15)|0;
+ r5 = (r12 - r5)|0;
+ r15 = r6 != 0 ? r7 : r15;
+ r16 = r6 != 0 ? r5 : r16;
+}
+}
+ r5 = r8 & 255;
+ if(r5 !=0) //_LBB800_186
+{
+continue _1;
+}
+else{
+ r5 = r11 & 255;
+ if(r5 ==0) //_LBB800_105
+{
+ r5 = r10 & 255;
+ if(r5 ==0) //_LBB800_107
+{
+ r5 = sp + -4;
+ heap32[(g0)] = r5;
+ heap32[(g0+1)] = 4;
+ my_arg_test(i7);
+ r5 = r_g0;
+ r7 = r9 & 255;
+ if(r7 ==0) //_LBB800_109
+{
+ r5 = r5 >> 2;
+ r5 = heap32[(r5)];
+ r5 = r5 >> 2;
+ heap32[(r5)] = r15;
+}
+else{
+ r5 = r5 >> 2;
+ r5 = heap32[(r5)];
+ heap16[(r5)>>1] = r15;
+}
+}
+else{
+ r5 = sp + -4;
+ heap32[(g0)] = r5;
+ heap32[(g0+1)] = 4;
+ my_arg_test(i7);
+ r5 = r_g0 >> 2;
+ r5 = heap32[(r5)];
+ r5 = r5 >> 2;
+ heap32[(r5)] = r15;
+}
+}
+else{
+ r5 = sp + -4;
+ heap32[(g0)] = r5;
+ heap32[(g0+1)] = 4;
+ my_arg_test(i7);
+ r5 = r_g0 >> 2;
+ r5 = heap32[(r5)];
+ r5 = r5 >> 2;
+ heap32[(r5)] = r15;
+ heap32[(r5+1)] = r16;
+}
+ r5 = uint(r14) < uint(r1);
+ r5 = r5 & 1;
+ r2 = (r5 + r2)|0;
+continue _1;
+}
+}
+}
+else{
+__label__ = 172;
+break _1;
+}
+}
+else{
+__label__ = 165;
+}
+}
+}
+else{
+ if(r5 ==0) //_LBB800_6
+{
+__label__ = 6;
+break _1;
+}
+else{
+ r7 = (r5 + -9)|0;
+ if(uint(r7) <uint(5)) //_LBB800_7
+{
+__label__ = 7;
+}
+else{
+__label__ = 165;
+}
+}
+}
+switch(__label__ ){//multiple entries
+case 7:
+ r3 = (r3 + 1)|0;
+_218: while(true){
+ r5 = heapU8[r3];
+ if(r5 ==0) //_LBB800_13
+{
+break _218;
+}
+else{
+ r5 = r5 << 24;
+ r5 = r5 >> 24;
+ r5 = r5 << 2;
+ r6 = my_ctype;
+ r5 = (r5 + r6)|0;
+ r5 = heapU8[r5+4];
+ r5 = r5 & 8;
+ if(r5 ==0) //_LBB800_13
+{
+break _218;
+}
+else{
+ r3 = (r3 + 1)|0;
+}
+}
+}
+ r6 = r4 << 2;
+ r5 = my_ctype;
+ r6 = (r6 + r5)|0;
+ r6 = heapU8[r6+4];
+ r6 = r6 & 8;
+ if(r6 ==0) //_LBB800_186
+{
+continue _1;
+}
+else{
+__label__ = 12; //SET chanka
+_223: while(true){
+ heap32[(g0)] = r0;
+ sgetc(i7);
+ r4 = r_g0;
+ r6 = r4 << 2;
+ r6 = (r6 + r5)|0;
+ r1 = (r1 + 1)|0;
+ r6 = heapU8[r6+4];
+ r6 = r6 & 8;
+ if(r6 ==0) //_LBB800_186
+{
+continue _1;
+}
+}
+}
+break;
+case 165:
+ r3 = r4 & 255;
+ if(r3 !=r5) //_LBB800_187
+{
+__label__ = 168;
+break _1;
+}
+else{
+ heap32[(g0)] = r0;
+ r1 = (r1 + 1)|0;
+ sgetc(i7);
+ r4 = r_g0;
+ r3 = r6;
+continue _1;
+}
+break;
+}
+}
+else{
+__label__ = 168;
+break _1;
+}
+}
+_227: do {
+switch(__label__ ){//multiple entries
+case 168:
+if(!(r4 >-1)) //_LBB800_190
+{
+if(!(r2 !=0)) //_LBB800_190
+{
+ r2 = -1;
+break _227;
+}
+}
+ heap32[(g0)] = r4;
+ heap32[(g0+1)] = r0;
+ sputc(i7);
+break;
+case 6:
+ r2 = 0;
+break;
+}
+} while(0);
+ r_g0 = r2;
+ return;
+}
+
+function __v_printf(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+ var r13;
+ var r14;
+ var r15;
+ var r16;
+ var r17;
+ var r18;
+ var r19;
+ var r20;
+ var r21;
+ var r22;
+ var r23;
+ var f0;
+ var f1;
+var __label__ = 0;
+ i7 = sp + -184;var g0 = i7>>2; // save stack
+ r0 = sp + -136;
+ r1 = heap32[(fp+2)];
+ r2 = heap32[(fp)];
+ r3 = heap32[(fp+1)];
+ r0 = (r0 + 1)|0;
+ heap32[(fp+-1)] = r1;
+ heap32[(fp+-2)] = 0;
+_1: while(true){
+ r4 = heapU8[r3];
+ if(r4 ==0) //_LBB801_209
+{
+__label__ = 197;
+break _1;
+}
+else{
+ r1 = 0;
+ r5 = r4;
+_4: while(true){
+ r5 = r5 & 255;
+ if(r5 ==0) //_LBB801_4
+{
+break _4;
+}
+else{
+ if(r5 !=37) //_LBB801_1
+{
+ r5 = (r3 - r1)|0;
+ r5 = heapU8[r5+1];
+ r1 = (r1 + -1)|0;
+}
+else{
+break _4;
+}
+}
+}
+ r5 = 0;
+ if(r1 !=0) //_LBB801_6
+{
+ r4 = (r5 - r1)|0;
+ if(r4 <0) //_LBB801_210
+{
+__label__ = 198;
+break _1;
+}
+else{
+ r6 = heap32[(fp+-2)];
+ r7 = (r6 - r1)|0;
+ if(uint(r7) <uint(r6)) //_LBB801_210
+{
+__label__ = 198;
+break _1;
+}
+else{
+ r6 = (r3 - r1)|0;
+ r7 = r2 >> 2;
+ r8 = heap32[(r7+1)];
+ r7 = heap32[(r7)];
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r4;
+ heap32[(g0+2)] = r7;
+ __FUNCTION_TABLE__[(r8)>>2](i7);
+ r4 = heap32[(fp+-2)];
+ r4 = (r4 - r1)|0;
+ r1 = (r3 - r1)|0;
+ heap32[(fp+-2)] = r4;
+ r4 = heapU8[r1];
+ r3 = r6;
+}
+}
+}
+ r1 = r4 & 255;
+ if(r1 !=37) //_LBB801_207
+{
+continue _1;
+}
+else{
+ r3 = (r3 + 1)|0;
+ r1 = 32;
+ r4 = r5;
+ r6 = r5;
+ r7 = r5;
+ r8 = r5;
+ r9 = r5;
+ r10 = r5;
+ r11 = r5;
+_15: while(true){
+ r12 = r4;
+ r13 = r3;
+ r14 = heapU8[r13];
+ r3 = (r13 + 1)|0;
+ heap8[sp+-145] = r14;
+_17: do {
+ if(r14 >99) //_LBB801_29
+{
+ if(r14 >110) //_LBB801_37
+{
+ if(r14 >114) //_LBB801_41
+{
+ if(r14 >119) //_LBB801_44
+{
+ if(r14 ==122) //_LBB801_47
+{
+__label__ = 50;
+break _17;
+}
+else{
+__label__ = 44;
+break _15;
+}
+}
+else{
+__label__ = 41;
+break _15;
+}
+}
+else{
+ if(r14 ==111) //_LBB801_105
+{
+__label__ = 99;
+break _15;
+}
+else{
+ if(r14 ==112) //_LBB801_97
+{
+__label__ = 91;
+break _15;
+}
+else{
+ if(r14 ==113) //_LBB801_53
+{
+__label__ = 49;
+break _17;
+}
+else{
+continue _1;
+}
+}
+}
+}
+}
+else{
+ if(r14 >104) //_LBB801_34
+{
+ if(r14 ==105) //_LBB801_108
+{
+__label__ = 102;
+break _15;
+}
+else{
+ if(r14 ==106) //_LBB801_53
+{
+__label__ = 49;
+break _17;
+}
+else{
+ if(r14 ==108) //_LBB801_47
+{
+__label__ = 50;
+break _17;
+}
+else{
+continue _1;
+}
+}
+}
+}
+else{
+ if(r14 ==100) //_LBB801_108
+{
+__label__ = 102;
+break _15;
+}
+else{
+ r4 = (r14 + -102)|0;
+ if(uint(r4) <uint(2)) //_LBB801_135
+{
+__label__ = 129;
+break _15;
+}
+else{
+ if(r14 ==104) //_LBB801_48
+{
+__label__ = 48;
+break _17;
+}
+else{
+continue _1;
+}
+}
+}
+}
+}
+}
+else{
+ if(r14 >44) //_LBB801_20
+{
+ if(r14 >75) //_LBB801_24
+{
+ if(r14 >97) //_LBB801_27
+{
+__label__ = 26;
+break _15;
+}
+else{
+ if(r14 ==76) //_LBB801_53
+{
+__label__ = 49;
+break _17;
+}
+else{
+__label__ = 25;
+break _15;
+}
+}
+}
+else{
+ r4 = 1;
+ if(r14 ==45) //_LBB801_11
+{
+continue _15;
+}
+else{
+ if(r14 ==46) //_LBB801_61
+{
+ r4 = heapU8[r3];
+ if(r4 !=42) //_LBB801_63
+{
+ r4 = sp + -144;
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r4;
+ strtol(i7);
+ r14 = 0;
+ r11 = r_g0 < 0 ? r14 : r_g0;
+ r3 = heap32[(fp+-36)];
+}
+else{
+ r4 = sp + -4;
+ heap32[(g0)] = r4;
+ heap32[(g0+1)] = 4;
+ my_arg_test(i7);
+ r4 = r_g0 >> 2;
+ r4 = heap32[(r4)];
+ r14 = 0;
+ r11 = r4 < 0 ? r14 : r4;
+ r3 = (r13 + 2)|0;
+}
+ r8 = 1;
+ r4 = r12;
+ if(uint(r11) >uint(10240)) //_LBB801_210
+{
+__label__ = 198;
+break _1;
+}
+else{
+continue _15;
+}
+}
+else{
+ r4 = (r14 + -48)|0;
+ if(uint(r4) <uint(10)) //_LBB801_57
+{
+ r4 = r8 & 255;
+ if(r4 !=0) //_LBB801_210
+{
+__label__ = 198;
+break _1;
+}
+else{
+ r4 = sp + -144;
+ heap32[(g0)] = r13;
+ heap32[(g0+1)] = r4;
+ strtoul(i7);
+ r10 = r_g0;
+ if(uint(r10) >uint(10240)) //_LBB801_210
+{
+__label__ = 198;
+break _1;
+}
+else{
+ r8 = 0;
+ r4 = r12 & 255;
+ r13 = heapU8[sp+-145];
+ r14 = 48;
+ r13 = r13 == r14;
+ r4 = r4 == r8;
+ r4 = r13 & r4;
+ r1 = r4 != 0 ? r14 : r1;
+ r3 = heap32[(fp+-36)];
+ r4 = r12;
+continue _15;
+}
+}
+}
+else{
+continue _1;
+}
+}
+}
+}
+}
+else{
+ if(r14 >36) //_LBB801_17
+{
+ if(r14 ==37) //_LBB801_66
+{
+__label__ = 62;
+break _15;
+}
+else{
+ if(r14 ==42) //_LBB801_60
+{
+ r4 = sp + -4;
+ heap32[(g0)] = r4;
+ heap32[(g0+1)] = 4;
+ my_arg_test(i7);
+ r4 = r_g0 >> 2;
+ r4 = heap32[(r4)];
+ r13 = r4 >> 31;
+ r14 = (r4 + r13)|0;
+ r15 = 1;
+ r10 = r14 ^ r13;
+ r4 = r4 < 0 ? r15 : r12;
+ if(uint(r10) >uint(10240)) //_LBB801_210
+{
+__label__ = 198;
+break _1;
+}
+else{
+continue _15;
+}
+}
+else{
+ if(r14 ==43) //_LBB801_56
+{
+ r7 = 1;
+ r4 = r12;
+continue _15;
+}
+else{
+continue _1;
+}
+}
+}
+}
+else{
+ if(r14 ==0) //_LBB801_210
+{
+__label__ = 198;
+break _1;
+}
+else{
+ if(r14 ==32) //_LBB801_55
+{
+ r6 = 1;
+ r4 = r12;
+continue _15;
+}
+else{
+ if(r14 ==35) //_LBB801_51
+{
+ r5 = 255;
+__label__ = 48;
+}
+else{
+continue _1;
+}
+}
+}
+}
+}
+}
+} while(0);
+switch(__label__ ){//multiple entries
+case 49:
+ r9 = (r9 + 1)|0;
+break;
+case 48:
+ r9 = (r9 + -1)|0;
+ r4 = r12;
+continue _15;
+break;
+}
+ r9 = (r9 + 1)|0;
+ r4 = r12;
+}
+_71: do {
+switch(__label__ ){//multiple entries
+case 26:
+ if(r14 ==98) //_LBB801_49
+{
+ r4 = 0;
+ r13 = 2;
+ r14 = r4;
+ r15 = r4;
+__label__ = 104;
+break _71;
+}
+else{
+ if(r14 ==99) //_LBB801_65
+{
+ r1 = sp + -4;
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = 4;
+ my_arg_test(i7);
+ r1 = r_g0 >> 2;
+ r1 = heap32[(r1)];
+ heap8[sp+-145] = r1;
+__label__ = 62;
+break _71;
+}
+else{
+continue _1;
+}
+}
+break;
+case 25:
+ if(r14 ==88) //_LBB801_50
+{
+__label__ = 92;
+break _71;
+}
+else{
+continue _1;
+}
+break;
+case 44:
+ if(r14 !=120) //_LBB801_207
+{
+continue _1;
+}
+else{
+ r4 = 0;
+__label__ = 93;
+break _71;
+}
+break;
+case 41:
+ if(r14 ==115) //_LBB801_68
+{
+ r1 = sp + -4;
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = 4;
+ my_arg_test(i7);
+ r1 = r_g0 >> 2;
+ r4 = _2E_str38684;
+ r1 = heap32[(r1)];
+ r1 = r1 == 0 ? r4 : r1;
+ heap32[(fp+-36)] = r1;
+ r4 = heapU8[r1];
+_83: do {
+ if(r4 !=0) //_LBB801_70
+{
+ r4 = (r1 + 1)|0;
+ r14 = 0;
+_85: while(true){
+ r1 = (r14 + 1)|0;
+ r6 = heapU8[r4+r14];
+ r14 = r1;
+if(!(r6 !=0)) //_LBB801_71
+{
+break _83;
+}
+}
+}
+else{
+ r1 = 0;
+}
+} while(0);
+ r16 = 0;
+ r4 = r8 & 255;
+ r4 = r4 != r16;
+ r14 = uint(r1) > uint(r11);
+ r4 = r4 & r14;
+ r14 = 32;
+ r4 = r4 != 0 ? r11 : r1;
+ r1 = r14;
+ r8 = r16;
+ r11 = r16;
+__label__ = 69;
+break _71;
+}
+else{
+ if(r14 ==117) //_LBB801_109
+{
+ r4 = 0;
+ r13 = 10;
+ r14 = r4;
+ r15 = r4;
+__label__ = 104;
+break _71;
+}
+else{
+continue _1;
+}
+}
+break;
+case 99:
+ r4 = r5 & 255;
+ if(r4 !=0) //_LBB801_107
+{
+ r5 = 1;
+ r4 = 0;
+ r13 = 8;
+ r14 = 48;
+ heap8[sp+-135] = r14;
+ r14 = r4;
+ r15 = r5;
+__label__ = 104;
+break _71;
+}
+else{
+ r4 = 0;
+ r13 = 8;
+ r14 = r4;
+ r5 = r4;
+ r15 = r4;
+__label__ = 104;
+break _71;
+}
+break;
+case 91:
+ r14 = 120;
+ r5 = 2;
+ r9 = 1;
+ heap8[sp+-145] = r14;
+__label__ = 92;
+break _71;
+break;
+case 102:
+ r4 = 0;
+ r14 = 1;
+ r13 = 10;
+ r15 = r4;
+__label__ = 104;
+break _71;
+break;
+case 129:
+ r4 = sp + -4;
+ heap32[(g0)] = r4;
+ heap32[(g0+1)] = 8;
+ my_arg_test(i7);
+ f0 = llvm_readDouble((r_g0));
+ heap32[(fp+-36)] = r0;
+ r4 = 103;
+ r4 = r14 == r4;
+ r8 = r8 & 255;
+ r16 = 1;
+ r9 = 6;
+ r10 = r10 == 0 ? r16 : r10;
+ r11 = r8 == 0 ? r9 : r11;
+ r4 = r4 & 1;
+ f1 = 0;
+ r9 = r7 & 255;
+ r13 = 0;
+ llvm_writeDouble((i7),f0);
+ heap32[(g0+2)] = r0;
+ heap32[(g0+3)] = 127;
+ heap32[(g0+4)] = r10;
+ heap32[(g0+5)] = r11;
+ heap32[(g0+6)] = r4;
+ r4 = r9 != r13;
+ r16 = f0 < f1;
+ r4 = r4 | r16;
+ r16 = r4 & 1;
+ __dtostr(i7);
+ r4 = r_g0;
+_98: do {
+ if(r8 !=0) //_LBB801_137
+{
+ r8 = heap32[(fp+-36)];
+ r15 = r13;
+_100: while(true){
+ r17 = heapU8[r8+r13];
+ if(r17 ==0) //_LBB801_161
+{
+__label__ = 151;
+break _100;
+}
+else{
+ r18 = (r8 + r13)|0;
+ if(r17 ==46) //_LBB801_149
+{
+__label__ = 142;
+break _100;
+}
+else{
+ r17 = heapU8[r18+1];
+ if(r17 ==0) //_LBB801_161
+{
+__label__ = 151;
+break _100;
+}
+else{
+ r19 = r15 << 2;
+ if(r17 !=46) //_LBB801_143
+{
+ r17 = heapU8[r18+2];
+ if(r17 ==0) //_LBB801_161
+{
+__label__ = 151;
+break _100;
+}
+else{
+ if(r17 !=46) //_LBB801_146
+{
+ r17 = heapU8[r18+3];
+ if(r17 ==0) //_LBB801_161
+{
+__label__ = 151;
+break _100;
+}
+else{
+ if(r17 ==46) //_LBB801_151
+{
+__label__ = 143;
+break _100;
+}
+else{
+ r15 = (r15 + 1)|0;
+ r13 = (r13 + 4)|0;
+}
+}
+}
+else{
+__label__ = 138;
+break _100;
+}
+}
+}
+else{
+__label__ = 135;
+break _100;
+}
+}
+}
+}
+}
+_110: do {
+switch(__label__ ){//multiple entries
+case 142:
+ if(r18 ==0) //_LBB801_161
+{
+__label__ = 151;
+break _110;
+}
+else{
+__label__ = 144;
+break _110;
+}
+break;
+case 143:
+ r18 = (r18 + 3)|0;
+__label__ = 144;
+break _110;
+break;
+case 138:
+ r4 = r19 | 2;
+ r18 = (r8 + r4)|0;
+__label__ = 144;
+break _110;
+break;
+case 135:
+ r4 = r19 | 1;
+ r18 = (r8 + r4)|0;
+__label__ = 144;
+break;
+}
+} while(0);
+switch(__label__ ){//multiple entries
+case 151:
+ r5 = r5 & 255;
+ if(r5 ==0) //_LBB801_136
+{
+break _98;
+}
+else{
+ r5 = 46;
+ heap8[r8+r4] = r5;
+ r5 = heap32[(fp+-36)];
+ r4 = (r4 + r5)|0;
+ r5 = 0;
+ heap8[r4+1] = r5;
+}
+break;
+case 144:
+ if(r11 !=0) //_LBB801_155
+{
+__label__ = 146;
+}
+else{
+ r4 = r5 & 255;
+ if(r4 !=0) //_LBB801_155
+{
+__label__ = 146;
+}
+else{
+__label__ = 147;
+}
+}
+if (__label__ == 146){
+ r18 = (r18 + 1)|0;
+}
+_123: while(true){
+ r4 = r11;
+ if(r4 !=0) //_LBB801_158
+{
+ r11 = (r4 + -1)|0;
+ r5 = (r18 + 1)|0;
+ r8 = heapU8[r18+1];
+ r18 = r5;
+ if(r8 !=0) //_LBB801_156
+{
+__label__ = 147;
+}
+else{
+__label__ = 149;
+break _123;
+}
+}
+else{
+__label__ = 150;
+break _123;
+}
+}
+if (__label__ == 149){
+ r18 = r5;
+}
+ r5 = 0;
+ heap8[r18] = r5;
+ r11 = r4;
+break;
+}
+}
+} while(0);
+_130: do {
+if(!(r14 !=103)) //_LBB801_199
+{
+ r4 = heap32[(fp+-36)];
+ r5 = 0;
+ r8 = r5;
+_132: while(true){
+ r14 = heapU8[r4+r5];
+ if(r14 ==0) //_LBB801_199
+{
+break _130;
+}
+else{
+ r13 = (r4 + r5)|0;
+ if(r14 ==46) //_LBB801_176
+{
+__label__ = 166;
+break _132;
+}
+else{
+ r14 = heapU8[r13+1];
+ if(r14 ==0) //_LBB801_199
+{
+break _130;
+}
+else{
+ r15 = r8 << 2;
+ if(r14 !=46) //_LBB801_170
+{
+ r14 = heapU8[r13+2];
+ if(r14 ==0) //_LBB801_199
+{
+break _130;
+}
+else{
+ if(r14 !=46) //_LBB801_173
+{
+ r14 = heapU8[r13+3];
+ if(r14 ==0) //_LBB801_199
+{
+break _130;
+}
+else{
+ if(r14 ==46) //_LBB801_178
+{
+__label__ = 167;
+break _132;
+}
+else{
+ r8 = (r8 + 1)|0;
+ r5 = (r5 + 4)|0;
+}
+}
+}
+else{
+__label__ = 162;
+break _132;
+}
+}
+}
+else{
+__label__ = 159;
+break _132;
+}
+}
+}
+}
+}
+switch(__label__ ){//multiple entries
+case 166:
+ if(r13 ==0) //_LBB801_199
+{
+break _130;
+}
+break;
+case 167:
+ r13 = (r13 + 3)|0;
+break;
+case 162:
+ r5 = r15 | 2;
+ r13 = (r4 + r5)|0;
+break;
+case 159:
+ r5 = r15 | 1;
+ r13 = (r4 + r5)|0;
+break;
+}
+ r4 = 0;
+ r5 = r13;
+_148: while(true){
+ r8 = heapU8[r5];
+ if(r8 !=101) //_LBB801_182
+{
+ if(r8 !=0) //_LBB801_184
+{
+ r8 = r4 << 2;
+ r14 = heapU8[r5+1];
+ if(r14 !=101) //_LBB801_186
+{
+ if(r14 ==0) //_LBB801_183
+{
+__label__ = 171;
+break _148;
+}
+else{
+ r14 = heapU8[r5+2];
+ if(r14 !=101) //_LBB801_189
+{
+ if(r14 ==0) //_LBB801_183
+{
+__label__ = 171;
+break _148;
+}
+else{
+ r14 = heapU8[r5+3];
+ if(r14 !=101) //_LBB801_192
+{
+ if(r14 ==0) //_LBB801_183
+{
+__label__ = 171;
+break _148;
+}
+else{
+ r4 = (r4 + 1)|0;
+ r5 = (r5 + 4)|0;
+}
+}
+else{
+__label__ = 179;
+break _148;
+}
+}
+}
+else{
+__label__ = 176;
+break _148;
+}
+}
+}
+else{
+__label__ = 173;
+break _148;
+}
+}
+else{
+__label__ = 171;
+break _148;
+}
+}
+else{
+__label__ = 182;
+break _148;
+}
+}
+switch(__label__ ){//multiple entries
+case 171:
+ r5 = 0;
+break;
+case 179:
+ r4 = r8 | 3;
+ r5 = (r13 + r4)|0;
+break;
+case 176:
+ r4 = r8 | 2;
+ r5 = (r13 + r4)|0;
+break;
+case 173:
+ r4 = r8 | 1;
+ r5 = (r13 + r4)|0;
+break;
+}
+_163: while(true){
+ r4 = (r13 + 1)|0;
+ r8 = heapU8[r13+1];
+ r13 = r4;
+if(!(r8 !=0)) //_LBB801_194
+{
+break _163;
+}
+}
+ r4 = r5 == 0 ? r4 : r5;
+_166: while(true){
+ r8 = heapU8[r4+-1];
+ r4 = (r4 + -1)|0;
+if(!(r8 ==48)) //_LBB801_196
+{
+break _166;
+}
+}
+ r14 = (r4 + 1)|0;
+ r4 = r8 == 46 ? r4 : r14;
+ r8 = 0;
+ heap8[r4] = r8;
+if(!(r5 ==0)) //_LBB801_199
+{
+ heap32[(g0)] = r4;
+ heap32[(g0+1)] = r5;
+ strcpy(i7);
+}
+}
+} while(0);
+ r4 = r7 | r6;
+ r4 = r4 & 255;
+if(!(r4 ==0)) //_LBB801_202
+{
+if(!(f0 <f1)) //_LBB801_202
+{
+ r4 = heap32[(fp+-36)];
+ r5 = (r4 + -1)|0;
+ r8 = 32;
+ r14 = 43;
+ r8 = r9 == 0 ? r8 : r14;
+ heap32[(fp+-36)] = r5;
+ heap8[r4+-1] = r8;
+}
+}
+ r4 = heap32[(fp+-36)];
+ r5 = heapU8[r4];
+_175: do {
+ if(r5 !=0) //_LBB801_204
+{
+ r5 = (r4 + 1)|0;
+ r8 = 0;
+_177: while(true){
+ r4 = (r8 + 1)|0;
+ r14 = heapU8[r5+r8];
+ r8 = r4;
+if(!(r14 !=0)) //_LBB801_205
+{
+break _175;
+}
+}
+}
+else{
+ r4 = 0;
+}
+} while(0);
+ r10 = uint(r10) < uint(r4) ? r4 : r10;
+ r14 = 48;
+ r5 = 0;
+ r8 = r5;
+__label__ = 69;
+break;
+}
+} while(0);
+switch(__label__ ){//multiple entries
+case 62:
+ r1 = heap32[(fp+-2)];
+ if(r1 ==-1) //_LBB801_210
+{
+__label__ = 198;
+break _1;
+}
+else{
+ r1 = r2 >> 2;
+ r4 = heap32[(r1+1)];
+ r1 = heap32[(r1)];
+ r5 = sp + -145;
+ heap32[(g0)] = r5;
+ heap32[(g0+1)] = 1;
+ heap32[(g0+2)] = r1;
+ __FUNCTION_TABLE__[(r4)>>2](i7);
+ r1 = heap32[(fp+-2)];
+ r1 = (r1 + 1)|0;
+ heap32[(fp+-2)] = r1;
+continue _1;
+}
+break;
+case 92:
+ r4 = r14 & 255;
+ r13 = 88;
+ r4 = r4 == r13;
+ r4 = r4 & 1;
+__label__ = 93;
+break;
+}
+if (__label__ == 93){
+ r5 = r5 & 255;
+ if(r5 !=0) //_LBB801_101
+{
+ r13 = 48;
+ r5 = 2;
+ heap8[sp+-135] = r13;
+ heap8[sp+-134] = r14;
+ r15 = r5;
+}
+else{
+ r5 = 0;
+ r15 = r5;
+}
+ if(uint(r11) >uint(r10)) //_LBB801_104
+{
+ r14 = 0;
+ r13 = 16;
+ r10 = r11;
+__label__ = 104;
+}
+else{
+ r14 = 0;
+ r13 = 16;
+__label__ = 104;
+}
+}
+_194: do {
+if (__label__ == 104){
+ heap32[(fp+-36)] = r0;
+ r16 = sp + -4;
+ heap32[(g0)] = r16;
+ heap32[(g0+1)] = 4;
+ my_arg_test(i7);
+ r17 = r_g0 >> 2;
+ r18 = r14 & 255;
+ r16 = 0;
+ r17 = heap32[(r17)];
+ r18 = r18 != r16;
+ r19 = r17 < r16;
+ r20 = (r16 - r17)|0;
+ r18 = r18 & r19;
+ r9 = r9 << 24;
+ r17 = r18 != 0 ? r20 : r17;
+ r9 = r9 >> 24;
+ r19 = r17 & 65535;
+ r17 = r9 < 0 ? r19 : r17;
+ r19 = heap32[(fp+-36)];
+ r20 = r17 & 255;
+ r21 = 2;
+ r9 = r9 < -1 ? r20 : r17;
+ r17 = r18 != 0 ? r21 : r14;
+ r14 = (r19 + r15)|0;
+ heap8[r14+122] = r16;
+ if(r9 !=0) //_LBB801_112
+{
+ r18 = (r13 + -1)|0;
+ r19 = 35;
+ r20 = 10;
+ r18 = uint(r18) > uint(r19) ? r20 : r13;
+ r4 = r4 & 255;
+ r13 = 39;
+ r19 = 7;
+ r4 = r4 == 0 ? r13 : r19;
+ r19 = (r15 + 121)|0;
+ r20 = -122;
+_198: while(true){
+ r13 = Math.floor(uint(r9) % uint(r18));
+ r13 = (r13 + 48)|0;
+ r22 = r13 & 255;
+ r23 = 57;
+ r22 = uint(r22) > uint(r23) ? r4 : r16;
+ r23 = (r20 + 1)|0;
+ r13 = (r13 + r22)|0;
+ r20 = (r14 - r20)|0;
+ heap8[r20+-1] = r13;
+ if(r19 <=r15) //_LBB801_115
+{
+break _198;
+}
+else{
+ r9 = Math.floor(uint(r9) /uint(r18));
+ r19 = (r19 + -1)|0;
+ r20 = r23;
+if(!(r9 !=0)) //_LBB801_113
+{
+break _198;
+}
+}
+}
+ r18 = (r23 + 122)|0;
+ r9 = (r14 - r23)|0;
+}
+else{
+ r4 = (r15 + r19)|0;
+ r13 = 48;
+ r9 = (r4 + 121)|0;
+ r18 = 1;
+ heap8[r4+121] = r13;
+}
+_204: do {
+if(!(r9 ==r14)) //_LBB801_125
+{
+ if(uint(r9) <=uint(r14)) //_LBB801_122
+{
+if(!(r18 ==-1)) //_LBB801_125
+{
+ r4 = (r16 - r18)|0;
+_209: while(true){
+ r13 = r4;
+ r19 = (r9 - r13)|0;
+ r4 = (r13 + 1)|0;
+ r20 = (r14 - r13)|0;
+ r19 = heapU8[r19];
+ heap8[r20] = r19;
+if(!(r13 !=0)) //_LBB801_124
+{
+break _204;
+}
+}
+}
+}
+else{
+if(!(r18 ==-1)) //_LBB801_125
+{
+ r4 = (r9 + 1)|0;
+ r9 = r18;
+_213: while(true){
+ heap8[r14] = r13;
+ if(r9 ==0) //_LBB801_125
+{
+break _204;
+}
+else{
+ r13 = heapU8[r4];
+ r4 = (r4 + 1)|0;
+ r9 = (r9 + -1)|0;
+ r14 = (r14 + 1)|0;
+}
+}
+}
+}
+}
+} while(0);
+ r4 = 1;
+ r4 = r18 != r4;
+ r4 = r4 & 1;
+ r14 = r8 ^ 1;
+ r4 = r4 | r14;
+ r4 = r4 & 255;
+ if(r4 !=0) //_LBB801_128
+{
+__label__ = 122;
+}
+else{
+ r4 = heap32[(fp+-36)];
+ r4 = heapU8[r4+r15];
+ if(r4 !=48) //_LBB801_128
+{
+__label__ = 122;
+}
+else{
+ r4 = r5 << 24;
+ r5 = 0;
+ r4 = r4 >> 24;
+ r14 = r11 == r5;
+ r4 = r4 > r5;
+ r4 = r14 | r4;
+ r4 = r4 != 0 ? r5 : r15;
+__label__ = 123;
+}
+}
+if (__label__ == 122){
+ r4 = (r18 + r15)|0;
+}
+ r14 = r17 & 255;
+ if(r14 ==2) //_LBB801_132
+{
+ r6 = heap32[(fp+-36)];
+ r7 = (r6 + -1)|0;
+ r4 = (r4 + 1)|0;
+ r14 = 48;
+ r16 = 45;
+ heap32[(fp+-36)] = r7;
+ heap8[r6+-1] = r16;
+ r16 = r21;
+}
+else{
+ if(r14 !=0) //_LBB801_133
+{
+ r14 = r7 | r6;
+ r14 = r14 & 255;
+if(!(r14 ==0)) //_LBB801_131
+{
+ r6 = heap32[(fp+-36)];
+ r16 = (r6 + -1)|0;
+ r7 = r7 & 255;
+ r9 = 32;
+ r13 = 43;
+ r4 = (r4 + 1)|0;
+ r14 = 48;
+ r7 = r7 == 0 ? r9 : r13;
+ heap32[(fp+-36)] = r16;
+ heap8[r6+-1] = r7;
+ r16 = r17;
+break _194;
+}
+}
+ r14 = 48;
+}
+}
+} while(0);
+ r6 = heap32[(fp+-36)];
+ r7 = r11 | r10;
+ if(r7 !=0) //_LBB801_77
+{
+ r7 = 0;
+ r5 = r5 << 24;
+ r5 = r5 >> 24;
+ if(r5 <1) //_LBB801_79
+{
+ r9 = r16 & 255;
+ r5 = r9 != r7;
+ r5 = r5 & 1;
+ if(r9 !=0) //_LBB801_81
+{
+__label__ = 75;
+}
+else{
+__label__ = 76;
+}
+}
+else{
+__label__ = 75;
+}
+if (__label__ == 75){
+ r4 = (r4 - r5)|0;
+ r10 = (r10 - r5)|0;
+ r9 = (r6 + r5)|0;
+ heap32[(fp+-36)] = r9;
+}
+ r8 = r8 & 255;
+ r9 = r8 != r7;
+ r7 = r10 == r7;
+ r7 = r9 & r7;
+ r7 = r7 != 0 ? r11 : r10;
+ r8 = r8 == 0 ? r4 : r11;
+ r9 = r12 & 255;
+if(!(r9 !=0)) //_LBB801_85
+{
+ r10 = r1 & 255;
+if(!(r10 !=32)) //_LBB801_85
+{
+ r11 = sp + -8;
+ r12 = (r7 - r8)|0;
+ heap32[(g0)] = r11;
+ heap32[(g0+1)] = r2;
+ heap32[(g0+2)] = r12;
+ heap32[(g0+3)] = r10;
+ write_pad(i7);
+ r10 = r_g0;
+ if(r10 !=0) //_LBB801_210
+{
+__label__ = 198;
+break _1;
+}
+}
+}
+if(!(r5 ==0)) //_LBB801_89
+{
+ if(r5 <0) //_LBB801_210
+{
+__label__ = 198;
+break _1;
+}
+else{
+ r10 = heap32[(fp+-2)];
+ r11 = (r10 + r5)|0;
+ if(uint(r11) <uint(r10)) //_LBB801_210
+{
+__label__ = 198;
+break _1;
+}
+else{
+ r10 = r2 >> 2;
+ r11 = heap32[(r10+1)];
+ r10 = heap32[(r10)];
+ heap32[(g0)] = r6;
+ heap32[(g0+1)] = r5;
+ heap32[(g0+2)] = r10;
+ __FUNCTION_TABLE__[(r11)>>2](i7);
+ r6 = heap32[(fp+-2)];
+ r5 = (r6 + r5)|0;
+ heap32[(fp+-2)] = r5;
+}
+}
+}
+if(!(r9 !=0)) //_LBB801_92
+{
+ r5 = r1 & 255;
+if(!(r5 ==32)) //_LBB801_92
+{
+ r6 = sp + -8;
+ r10 = (r7 - r8)|0;
+ heap32[(g0)] = r6;
+ heap32[(g0+1)] = r2;
+ heap32[(g0+2)] = r10;
+ heap32[(g0+3)] = r5;
+ write_pad(i7);
+ r5 = r_g0;
+ if(r5 !=0) //_LBB801_210
+{
+__label__ = 198;
+break _1;
+}
+}
+}
+ r5 = sp + -8;
+ r6 = (r8 - r4)|0;
+ heap32[(g0)] = r5;
+ heap32[(g0+1)] = r2;
+ heap32[(g0+2)] = r6;
+ heap32[(g0+3)] = r14;
+ write_pad(i7);
+ r14 = r_g0;
+ if(r14 !=0) //_LBB801_210
+{
+__label__ = 198;
+break _1;
+}
+else{
+ if(r4 <0) //_LBB801_210
+{
+__label__ = 198;
+break _1;
+}
+else{
+ r14 = heap32[(fp+-2)];
+ r6 = (r14 + r4)|0;
+ if(uint(r6) <uint(r14)) //_LBB801_210
+{
+__label__ = 198;
+break _1;
+}
+else{
+ r14 = r2 >> 2;
+ r6 = heap32[(r14+1)];
+ r14 = heap32[(r14)];
+ r10 = heap32[(fp+-36)];
+ heap32[(g0)] = r10;
+ heap32[(g0+1)] = r4;
+ heap32[(g0+2)] = r14;
+ __FUNCTION_TABLE__[(r6)>>2](i7);
+ r14 = heap32[(fp+-2)];
+ r4 = (r14 + r4)|0;
+ heap32[(fp+-2)] = r4;
+ if(r9 ==0) //_LBB801_207
+{
+continue _1;
+}
+else{
+ r4 = (r7 - r8)|0;
+ r14 = r1 & 255;
+ heap32[(g0)] = r5;
+ heap32[(g0+1)] = r2;
+ heap32[(g0+2)] = r4;
+ heap32[(g0+3)] = r14;
+ write_pad(i7);
+ r4 = r_g0;
+ if(r4 ==0) //_LBB801_207
+{
+continue _1;
+}
+else{
+__label__ = 198;
+break _1;
+}
+}
+}
+}
+}
+}
+else{
+ if(r4 <0) //_LBB801_210
+{
+__label__ = 198;
+break _1;
+}
+else{
+ r14 = heap32[(fp+-2)];
+ r1 = (r14 + r4)|0;
+ if(uint(r1) <uint(r14)) //_LBB801_210
+{
+__label__ = 198;
+break _1;
+}
+else{
+ r14 = r2 >> 2;
+ r1 = heap32[(r14+1)];
+ r14 = heap32[(r14)];
+ heap32[(g0)] = r6;
+ heap32[(g0+1)] = r4;
+ heap32[(g0+2)] = r14;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+ r14 = heap32[(fp+-2)];
+ r4 = (r14 + r4)|0;
+ heap32[(fp+-2)] = r4;
+continue _1;
+}
+}
+}
+}
+}
+}
+switch(__label__ ){//multiple entries
+case 197:
+ r0 = heap32[(fp+-2)];
+ r_g0 = r0;
+ return;
+break;
+case 198:
+ r0 = -1;
+ r_g0 = r0;
+ return;
+break;
+}
+}
+
+function fprintf(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -32;var g0 = i7>>2; // save stack
+ r0 = sp + -8;
+ r1 = r0 >> 2;
+ r2 = __fwrite__index__;
+ heap32[(fp+-3)] = sp;
+ heap32[(r1+1)] = r2;
+ heap32[(fp+-2)] = 3;
+ r1 = _2E_str3133;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = sp;
+ __v_printf(i7);
+ return;
+}
+
+function vsnprintf(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+var __label__ = 0;
+ i7 = sp + -40;var g0 = i7>>2; // save stack
+ r0 = sp + -16;
+ r1 = heap32[(fp+1)];
+ r2 = r0 >> 2;
+ r3 = heap32[(fp)];
+ heap32[(r2+1)] = 0;
+ r4 = (r1 + -1)|0;
+ r5 = 0;
+ r6 = sp + -24;
+ r7 = r1 == 0 ? r5 : r4;
+ heap32[(fp+-4)] = r3;
+ r8 = r6 >> 2;
+ r9 = swrite__index__;
+ heap32[(r2+2)] = r7;
+ heap32[(r8+1)] = r9;
+ heap32[(fp+-6)] = r0;
+ r0 = heap32[(fp+2)];
+ r2 = heap32[(fp+3)];
+ heap32[(g0)] = r6;
+ heap32[(g0+1)] = r0;
+ heap32[(g0+2)] = r2;
+ __v_printf(i7);
+ r0 = r_g0;
+if(!(r3 ==0)) //_LBB803_7
+{
+if(!(r1 ==0)) //_LBB803_7
+{
+if(!(r0 <0)) //_LBB803_7
+{
+if(!(r1 ==-1)) //_LBB803_6
+{
+if(!(uint(r0) <uint(r1))) //_LBB803_6
+{
+ heap8[r3+r4] = r5;
+ r_g0 = r0;
+ return;
+}
+}
+ heap8[r3+r0] = r5;
+}
+}
+}
+ r_g0 = r0;
+ return;
+}
+
+function sprintf(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+var __label__ = 0;
+ i7 = sp + -48;var g0 = i7>>2; // save stack
+ r0 = (sp + 8)|0;
+ r1 = sp + -16;
+ r2 = r1 >> 2;
+ heap32[(fp+-7)] = r0;
+ r3 = heap32[(fp)];
+ heap32[(r2+1)] = 0;
+ r4 = sp + -24;
+ heap32[(fp+-4)] = r3;
+ r5 = r4 >> 2;
+ r6 = swrite__index__;
+ heap32[(r2+2)] = -2;
+ heap32[(r5+1)] = r6;
+ heap32[(fp+-6)] = r1;
+ r1 = heap32[(fp+1)];
+ heap32[(g0)] = r4;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = r0;
+ __v_printf(i7);
+ r0 = r_g0;
+if(!(r3 ==0)) //_LBB804_3
+{
+if(!(r0 <0)) //_LBB804_3
+{
+ r1 = 0;
+ heap8[r3+r0] = r1;
+}
+}
+ r_g0 = r0;
+ return;
+}
+
+function _ZN12mandreel_b64L11b64_encode_EPKhjPcjjPNS_6B64_RCE(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+var __label__ = 0;
+ i7 = sp + -32;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ r1 = (r0 + 2)|0;
+ r2 = heap32[(fp+4)];
+ r1 = Math.floor(uint(r1) / uint(3));
+ r3 = heap32[(fp+2)];
+ r1 = r1 << 2;
+ r4 = r2 >> 2;
+ heap32[(r4)] = 0;
+_1: do {
+if(!(r3 ==0)) //_LBB805_20
+{
+ r5 = heap32[(fp+3)];
+ if(uint(r1) <=uint(r5)) //_LBB805_3
+{
+ r4 = heap32[(fp)];
+ if(uint(r0) >uint(2)) //_LBB805_5
+{
+ r5 = (r3 + r5)|0;
+ r6 = 0;
+ r12 = _ZN12mandreel_b64L9b64_charsE;
+_7: while(true){
+ r7 = heapU8[r4];
+ r8 = heapU8[r4+1];
+ r9 = r7 << 4;
+ r10 = heapU8[r4+2];
+ r11 = r8 << 2;
+ r9 = r9 & 48;
+ r8 = r8 >>> 4;
+ r7 = r7 >>> 2;
+ r8 = r9 | r8;
+ r9 = r11 & 60;
+ r11 = r10 >>> 6;
+ r7 = heapU8[r12+r7];
+ r9 = r9 | r11;
+ r8 = heapU8[r12+r8];
+ heap8[r3] = r7;
+ r7 = r10 & 63;
+ r9 = heapU8[r12+r9];
+ heap8[r3+1] = r8;
+ r8 = (r3 + 4)|0;
+ r6 = (r6 + 4)|0;
+ r7 = heapU8[r12+r7];
+ heap8[r3+2] = r9;
+ heap8[r3+3] = r7;
+ if(r8 ==r5) //_LBB805_8
+{
+__label__ = 7;
+}
+else{
+ if(r6 ==0) //_LBB805_9
+{
+ r7 = 13;
+ r8 = (r3 + 6)|0;
+ r6 = 0;
+ r9 = 10;
+ heap8[r3+4] = r7;
+ heap8[r3+5] = r9;
+ r3 = r8;
+__label__ = 9;
+}
+else{
+__label__ = 7;
+}
+}
+if (__label__ == 7){
+ r3 = r8;
+}
+ r0 = (r0 + -3)|0;
+ r4 = (r4 + 3)|0;
+if(!(uint(r0) >uint(2))) //_LBB805_6
+{
+break _7;
+}
+}
+}
+if(!(r0 ==0)) //_LBB805_20
+{
+ r5 = 0;
+_17: while(true){
+ r6 = sp + -3;
+ r7 = (r4 - r5)|0;
+ r8 = (r5 + -1)|0;
+ r5 = (r6 - r5)|0;
+ r7 = heapU8[r7];
+ heap8[r5] = r7;
+ r7 = (r0 + r8)|0;
+ r5 = r8;
+if(!(r7 !=0)) //_LBB805_13
+{
+break _17;
+}
+}
+ if(r0 !=3) //_LBB805_16
+{
+ r4 = 3;
+ r5 = (r4 - r0)|0;
+ r8 = 0;
+_22: while(true){
+ r7 = (r5 + -1)|0;
+ r5 = (r6 - r5)|0;
+ heap8[r5+3] = r8;
+ r5 = r7;
+if(!(r7 !=0)) //_LBB805_17
+{
+break _22;
+}
+}
+ heap32[(g0)] = r6;
+ heap32[(g0+1)] = 3;
+ heap32[(g0+2)] = r3;
+ heap32[(g0+3)] = 12;
+ heap32[(g0+4)] = r2;
+ r0 = (r4 - r0)|0;
+ _ZN12mandreel_b64L11b64_encode_EPKhjPcjjPNS_6B64_RCE(i7);
+ r4 = 61;
+_25: while(true){
+ r2 = (r0 + -1)|0;
+ r0 = (r3 - r0)|0;
+ heap8[r0+4] = r4;
+ r0 = r2;
+ if(r2 !=0) //_LBB805_19
+{
+continue _25;
+}
+else{
+break _1;
+}
+}
+}
+else{
+ heap32[(g0)] = r6;
+ heap32[(g0+1)] = 3;
+ heap32[(g0+2)] = r3;
+ heap32[(g0+3)] = 12;
+ heap32[(g0+4)] = r2;
+ _ZN12mandreel_b64L11b64_encode_EPKhjPcjjPNS_6B64_RCE(i7);
+ r_g0 = r1;
+ return;
+}
+}
+}
+else{
+ heap32[(r4)] = 1;
+ r0 = 0;
+ r_g0 = r0;
+ return;
+}
+}
+} while(0);
+ r_g0 = r1;
+ return;
+}
+
+function _ZN12mandreel_b6410b64_decodeEPKcjPvj(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ r1 = r0 & 3;
+ r2 = 0;
+ r1 = r1 != r2;
+ r1 = r1 & 1;
+ r3 = r0 >>> 2;
+ r1 = (r1 + r3)|0;
+ r3 = heap32[(fp+2)];
+ r1 = (r1 * 3)|0;
+ if(r3 !=0) //_LBB806_2
+{
+ r4 = heap32[(fp+3)];
+ if(uint(r1) <=uint(r4)) //_LBB806_4
+{
+ r1 = heap32[(fp)];
+ r4 = r3;
+ r5 = r2;
+_5: while(true){
+ if(r0 !=0) //_LBB806_5
+{
+ r6 = heapU8[r1];
+ if(r6 !=61) //_LBB806_7
+{
+ r7 = _ZN12mandreel_b64L11b64_indexesE;
+ r6 = heapU8[r7+r6];
+ if(r6 !=255) //_LBB806_9
+{
+ r5 = 0;
+ r7 = sp + -4;
+ heap8[r7+r2] = r6;
+__label__ = 8;
+}
+else{
+__label__ = 15;
+}
+}
+else{
+ r5 = (r5 + 1)|0;
+ r6 = sp + -4;
+ r7 = 0;
+ heap8[r6+r2] = r7;
+__label__ = 8;
+}
+if (__label__ == 8){
+ r2 = (r2 + 1)|0;
+ if(r2 ==4) //_LBB806_12
+{
+ r2 = heapU8[sp+-3];
+ r6 = heapU8[sp+-4];
+ r2 = r2 >>> 4;
+ r2 = r2 & 3;
+ r6 = r6 << 2;
+ r2 = r2 | r6;
+ heap8[r4] = r2;
+ if(r5 !=2) //_LBB806_14
+{
+ r2 = heapU8[sp+-2];
+ r6 = heapU8[sp+-3];
+ r2 = r2 >>> 2;
+ r2 = r2 & 15;
+ r6 = r6 << 4;
+ r2 = r2 | r6;
+ heap8[r4+1] = r2;
+ if(r5 !=1) //_LBB806_16
+{
+ r2 = heapU8[sp+-2];
+ r7 = heapU8[sp+-1];
+ r2 = r2 << 6;
+ r6 = (r4 + 3)|0;
+ r2 = (r2 + r7)|0;
+ heap8[r4+2] = r2;
+ if(r5 ==0) //_LBB806_18
+{
+ r2 = 0;
+ r4 = r6;
+ r5 = r2;
+}
+else{
+__label__ = 18;
+break _5;
+}
+}
+else{
+__label__ = 12;
+break _5;
+}
+}
+else{
+__label__ = 10;
+break _5;
+}
+}
+}
+ r0 = (r0 + -1)|0;
+ r1 = (r1 + 1)|0;
+}
+else{
+__label__ = 17;
+break _5;
+}
+}
+switch(__label__ ){//multiple entries
+case 17:
+ r6 = r4;
+break;
+case 12:
+ r6 = (r4 + 2)|0;
+break;
+case 10:
+ r6 = (r4 + 1)|0;
+break;
+}
+ r1 = (r6 - r3)|0;
+}
+else{
+ r1 = 0;
+}
+}
+ r_g0 = r1;
+ return;
+}
+
+function __mandreel_internal_SetResolution(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = _ZL25s_mandreel_internal_width;
+ r1 = _ZL26s_mandreel_internal_height;
+ r0 = r0 >> 2;
+ r2 = heap32[(fp)];
+ r1 = r1 >> 2;
+ r3 = heap32[(fp+1)];
+ heap32[(r0)] = r2;
+ heap32[(r1)] = r3;
+ return;
+}
+
+function __keyEvent(sp)
+{
+ var i7;
+ var fp = sp>>2;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ return;
+}
+
+function __mouseDoubleClick(sp)
+{
+ var i7;
+ var fp = sp>>2;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ return;
+}
+
+function __mouseMove(sp)
+{
+ var i7;
+ var fp = sp>>2;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ return;
+}
+
+function __resize(sp)
+{
+ var i7;
+ var fp = sp>>2;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ return;
+}
+
+function __mouseButton(sp)
+{
+ var i7;
+ var fp = sp>>2;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ return;
+}
+
+function __mouseWheelDelta(sp)
+{
+ var i7;
+ var fp = sp>>2;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ return;
+}
+
+function iMandreel_TextureAsync_IsCompressed(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+var __label__ = 0;
+ i7 = sp + -1032;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = heap32[(fp+1)];
+ r2 = heap32[(fp+2)];
+ r3 = sp + -1024;
+ r4 = 0;
+_1: while(true){
+ r5 = heapU8[r0];
+ if(r5 ==0) //_LBB814_5
+{
+break _1;
+}
+else{
+ r6 = r5 << 24;
+ r6 = r6 >> 24;
+ r6 = (r6 + -65)|0;
+ r7 = 26;
+ r8 = (r5 + 32)|0;
+ r5 = uint(r6) < uint(r7) ? r8 : r5;
+ r6 = r5 & 255;
+ r7 = 47;
+ r5 = r6 == 92 ? r7 : r5;
+ r0 = (r0 + 1)|0;
+ r6 = r5 & 255;
+if(!(r6 !=47)) //_LBB814_4
+{
+ r6 = r4 & 255;
+ r4 = r5;
+ if(r6 ==47) //_LBB814_1
+{
+continue _1;
+}
+}
+ r4 = (r3 + 1)|0;
+ heap8[r3] = r5;
+ r3 = r4;
+ r4 = r5;
+continue _1;
+}
+}
+ r0 = _ZL24g_pFirstTextureAsyncInfo;
+ r4 = 0;
+ heap8[r3] = r4;
+_8: while(true){
+ r0 = r0 >> 2;
+ r0 = heap32[(r0)];
+ if(r0 !=0) //_LBB814_6
+{
+ r3 = sp + -1024;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r3;
+ strcmp(i7);
+ r3 = r_g0;
+ if(r3 !=0) //_LBB814_8
+{
+ r0 = (r0 + 280)|0;
+continue _8;
+}
+else{
+__label__ = 7;
+break _8;
+}
+}
+else{
+__label__ = 10;
+break _8;
+}
+}
+switch(__label__ ){//multiple entries
+case 10:
+ r0 = -1;
+ r_g0 = r0;
+ return;
+break;
+case 7:
+ r0 = r0 >> 2;
+ r1 = r1 >> 2;
+ r3 = heap32[(r0+65)];
+ heap32[(r1)] = r3;
+ r1 = r2 >> 2;
+ r2 = heap32[(r0+66)];
+ heap32[(r1)] = r2;
+ r0 = heap32[(r0+67)];
+ r_g0 = r0;
+ return;
+break;
+}
+}
+
+function iMandreel_TextureAsync_GetPackOffset(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+var __label__ = 0;
+ i7 = sp + -1032;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = heap32[(fp+1)];
+ r2 = heap32[(fp+2)];
+ r3 = heap32[(fp+3)];
+ r4 = sp + -1024;
+ r5 = 0;
+_1: while(true){
+ r6 = heapU8[r0];
+ if(r6 ==0) //_LBB815_5
+{
+break _1;
+}
+else{
+ r7 = r6 << 24;
+ r7 = r7 >> 24;
+ r7 = (r7 + -65)|0;
+ r8 = 26;
+ r9 = (r6 + 32)|0;
+ r6 = uint(r7) < uint(r8) ? r9 : r6;
+ r7 = r6 & 255;
+ r8 = 47;
+ r6 = r7 == 92 ? r8 : r6;
+ r0 = (r0 + 1)|0;
+ r7 = r6 & 255;
+if(!(r7 !=47)) //_LBB815_4
+{
+ r7 = r5 & 255;
+ r5 = r6;
+ if(r7 ==47) //_LBB815_1
+{
+continue _1;
+}
+}
+ r5 = (r4 + 1)|0;
+ heap8[r4] = r6;
+ r4 = r5;
+ r5 = r6;
+continue _1;
+}
+}
+ r0 = _ZL24g_pFirstTextureAsyncInfo;
+ r5 = 0;
+ heap8[r4] = r5;
+_8: while(true){
+ r0 = r0 >> 2;
+ r0 = heap32[(r0)];
+ if(r0 !=0) //_LBB815_6
+{
+ r4 = sp + -1024;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r4;
+ strcmp(i7);
+ r4 = r_g0;
+if(!(r4 !=0)) //_LBB815_9
+{
+ r4 = r0 >> 2;
+ r5 = heap32[(r4+64)];
+if(!(r5 ==-1)) //_LBB815_9
+{
+__label__ = 8;
+break _8;
+}
+}
+ r0 = (r0 + 280)|0;
+continue _8;
+}
+else{
+__label__ = 11;
+break _8;
+}
+}
+switch(__label__ ){//multiple entries
+case 11:
+ r0 = 0;
+ r_g0 = r0;
+ return;
+break;
+case 8:
+ r0 = r1 >> 2;
+ r1 = heap32[(r4+68)];
+ heap32[(r0)] = r1;
+ r0 = r2 >> 2;
+ r1 = heap32[(r4+69)];
+ heap32[(r0)] = r1;
+ r0 = heap32[(r4+64)];
+ r1 = _ZL17g_apPackFileNames;
+ r0 = r0 << 2;
+ r0 = (r1 + r0)|0;
+ r0 = r0 >> 2;
+ r0 = heap32[(r0)];
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r0;
+ strcpy(i7);
+ r0 = 1;
+ r_g0 = r0;
+ return;
+break;
+}
+}
+
+function _Z31MandreelDefaultDebugMsgCallbackiPKc(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ heap32[(g0)] = r0;
+ __sandbox_OutputDebugString(i7);
+ return;
+}
+
+function printf(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -16408;var g0 = i7>>2; // save stack
+ r0 = (sp + 4)|0;
+ heap32[(fp+-4097)] = r0;
+ r1 = sp + -16384;
+ r2 = heap32[(fp)];
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = 16384;
+ heap32[(g0+2)] = r2;
+ heap32[(g0+3)] = r0;
+ r0 = g_msgcallback;
+ r0 = r0 >> 2;
+ vsnprintf(i7);
+ r0 = heap32[(r0)];
+if(!(r0 ==0)) //_LBB817_2
+{
+ heap32[(g0)] = r1;
+ __sandbox_OutputDebugString(i7);
+}
+ return;
+}
+
+function _printf_error(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -16408;var g0 = i7>>2; // save stack
+ r0 = (sp + 4)|0;
+ heap32[(fp+-4097)] = r0;
+ r1 = sp + -16384;
+ r2 = heap32[(fp)];
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = 16384;
+ heap32[(g0+2)] = r2;
+ heap32[(g0+3)] = r0;
+ r0 = g_msgcallback;
+ r0 = r0 >> 2;
+ vsnprintf(i7);
+ r0 = heap32[(r0)];
+if(!(r0 ==0)) //_LBB818_2
+{
+ heap32[(g0)] = r1;
+ __sandbox_OutputDebugString(i7);
+}
+ return;
+}
+
+function _printf_warning(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -16408;var g0 = i7>>2; // save stack
+ r0 = (sp + 4)|0;
+ heap32[(fp+-4097)] = r0;
+ r1 = sp + -16384;
+ r2 = heap32[(fp)];
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = 16384;
+ heap32[(g0+2)] = r2;
+ heap32[(g0+3)] = r0;
+ r0 = g_msgcallback;
+ r0 = r0 >> 2;
+ vsnprintf(i7);
+ r0 = heap32[(r0)];
+if(!(r0 ==0)) //_LBB819_2
+{
+ heap32[(g0)] = r1;
+ __sandbox_OutputDebugString(i7);
+}
+ return;
+}
+
+function __mandreel_internal_preupdate(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+var __label__ = 0;
+ i7 = sp + -24;var g0 = i7>>2; // save stack
+ r0 = sp + -8;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = 0;
+ r1 = _ZGVZ21Mandreel_GetTickCountE7s_first;
+ gettimeofday(i7);
+ r2 = heapU8[r1];
+if(!(r2 !=0)) //_LBB820_2
+{
+ r2 = heap32[(fp+-2)];
+ r3 = r2 >> 31;
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = r3;
+ heap32[(g0+2)] = 1000000;
+ heap32[(g0+3)] = 0;
+ r0 = r0 >> 2;
+ r0 = heap32[(r0+1)];
+ __muldi3(i7);
+ r4 = 1;
+ r5 = (r_g0 + r0)|0;
+ r6 = 0;
+ r7 = r0 >> 31;
+ r2 = uint(r5) < uint(r_g0) ? r4 : r6;
+ r6 = _ZZ21Mandreel_GetTickCountE7s_first;
+ r3 = (r_g1 + r7)|0;
+ r0 = uint(r5) < uint(r0) ? r4 : r2;
+ r2 = r6 >> 2;
+ r0 = (r3 + r0)|0;
+ heap32[(r2)] = r5;
+ heap32[(r2+1)] = r0;
+ heap8[r1] = r4;
+}
+ r0 = _ZZ29__mandreel_internal_preupdateE8s_bfirst_2E_b;
+ r1 = heapU8[r0];
+if(!(r1 != 0)) //_LBB820_4
+{
+ r1 = 1;
+ heap8[r0] = r1;
+}
+ return;
+}
+
+function __mandreel_internal_update(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+var __label__ = 0;
+ i7 = sp + -24;var g0 = i7>>2; // save stack
+ r0 = -32788;
+_1: while(true){
+ r1 = _ZL10s_aSockets;
+ r1 = (r1 - r0)|0;
+ r2 = heapU8[r1];
+if(!(r2 ==0)) //_LBB821_3
+{
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+-1)];
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = 2048;
+ js_mandreel_flash_tcp_update(i7);
+}
+ r0 = (r0 + -32792)|0;
+ if(r0 !=-295124) //_LBB821_1
+{
+continue _1;
+}
+else{
+break _1;
+}
+}
+ r0 = _ZL7g_bInit_2E_b;
+ r1 = heapU8[r0];
+ if(r1 != 0) //_LBB821_6
+{
+ mandreel_audio_update(i7);
+ r1 = sp + -8;
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = 0;
+ gettimeofday(i7);
+ r2 = heap32[(fp+-2)];
+ r3 = r2 >> 31;
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = r3;
+ heap32[(g0+2)] = 1000000;
+ heap32[(g0+3)] = 0;
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+1)];
+ __muldi3(i7);
+ r4 = (r_g0 + r1)|0;
+ r5 = 1;
+ r6 = 0;
+ r7 = r1 >> 31;
+ r2 = uint(r4) < uint(r_g0) ? r5 : r6;
+ r3 = (r_g1 + r7)|0;
+ r1 = uint(r4) < uint(r1) ? r5 : r2;
+ r1 = (r3 + r1)|0;
+ r2 = _ZGVZ21Mandreel_GetTickCountE7s_first;
+ r3 = heapU8[r2];
+if(!(r3 !=0)) //_LBB821_8
+{
+ r3 = _ZZ21Mandreel_GetTickCountE7s_first;
+ r3 = r3 >> 2;
+ heap32[(r3)] = r4;
+ heap32[(r3+1)] = r1;
+ heap8[r2] = r5;
+}
+ r2 = _ZZ21Mandreel_GetTickCountE7s_first;
+ r2 = r2 >> 2;
+ r3 = heap32[(r2)];
+ r2 = heap32[(r2+1)];
+ r1 = (r1 - r2)|0;
+ r2 = uint(r4) < uint(r3) ? r5 : r6;
+ r3 = (r4 - r3)|0;
+ r1 = (r1 - r2)|0;
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 1000;
+ heap32[(g0+3)] = 0;
+ __udivdi3(i7);
+ r1 = r_g0;
+ r2 = _ZL11g_aChannels;
+_12: while(true){
+ if(r6 <32) //_LBB821_9
+{
+ r3 = r2 >> 2;
+ r4 = heap32[(r3+72)];
+if(!(r4 !=1)) //_LBB821_33
+{
+ r4 = _ZL11g_aChannels;
+ r7 = (r6 * 292)|0;
+ r4 = (r4 + r7)|0;
+ r7 = heapU8[r4+268];
+if(!(r7 !=0)) //_LBB821_33
+{
+ r7 = heap32[(r3+71)];
+ if(r7 ==-1) //_LBB821_13
+{
+ r7 = heapU8[r0];
+ if(r7 !=1) //_LBB821_15
+{
+__label__ = 14;
+break _12;
+}
+else{
+ r7 = _ZL21g_pFirstSoundDuration;
+_21: while(true){
+ r7 = r7 >> 2;
+ r7 = heap32[(r7)];
+ if(r7 !=0) //_LBB821_16
+{
+ heap32[(g0)] = r7;
+ heap32[(g0+1)] = r2;
+ strcmp(i7);
+ r8 = r_g0;
+ if(r8 !=0) //_LBB821_18
+{
+ r7 = (r7 + 260)|0;
+}
+else{
+__label__ = 16;
+break _21;
+}
+}
+else{
+__label__ = 19;
+break _21;
+}
+}
+switch(__label__ ){//multiple entries
+case 19:
+ r7 = _2E_str3224;
+ heap32[(g0)] = r7;
+ heap32[(g0+1)] = r2;
+ r7 = 0;
+ _printf_warning(i7);
+break;
+case 16:
+ r7 = r7 >> 2;
+ r7 = heap32[(r7+64)];
+break;
+}
+ heap32[(r3+71)] = r7;
+}
+}
+ r8 = heap32[(r3+70)];
+ r7 = (r8 + r7)|0;
+if(!(uint(r7) >uint(r1))) //_LBB821_33
+{
+ r7 = heapU8[r0];
+ if(r7 != 0) //_LBB821_25
+{
+ r7 = (r6 + -1)|0;
+if(!(uint(r7) >uint(30))) //_LBB821_33
+{
+ r7 = heapU8[r4+269];
+if(!(r7 !=0)) //_LBB821_33
+{
+if(!(uint(r6) >uint(31))) //_LBB821_29
+{
+ r7 = heap32[(r3+68)];
+ r8 = heap32[(r3+69)];
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = r8;
+ heap32[(g0+2)] = r7;
+ mandreel_audio_stopChannel(i7);
+ heap32[(r3+72)] = 0;
+ heap32[(r3+68)] = -1;
+}
+ r3 = _ZL15g_iFreeChannels;
+ r3 = r3 >> 2;
+ heap8[r4+269] = r5;
+ r4 = heap32[(r3)];
+ r7 = (r4 + -1)|0;
+_37: do {
+if(!(r7 <0)) //_LBB821_32
+{
+ r7 = r4;
+_39: while(true){
+ r8 = _ZL15g_aFreeChannels;
+ r9 = r7 << 2;
+ r8 = (r8 + r9)|0;
+ r8 = r8 >> 2;
+ r9 = heap32[(r8+-1)];
+ r7 = (r7 + -1)|0;
+ heap32[(r8)] = r9;
+if(!(r7 !=0)) //_LBB821_31
+{
+break _37;
+}
+}
+}
+} while(0);
+ r7 = _ZL15g_aFreeChannels;
+ r7 = r7 >> 2;
+ r4 = (r4 + 1)|0;
+ heap32[(r7)] = r6;
+ heap32[(r3)] = r4;
+}
+}
+}
+else{
+__label__ = 23;
+break _12;
+}
+}
+}
+}
+ r6 = (r6 + 1)|0;
+ r2 = (r2 + 292)|0;
+}
+else{
+__label__ = 34;
+break _12;
+}
+}
+switch(__label__ ){//multiple entries
+case 34:
+ return;
+break;
+case 14:
+ r7 = _2E_str221;
+ r0 = _2E_str1222;
+ heap32[(g0)] = r7;
+ heap32[(g0+1)] = r0;
+ heap32[(g0+2)] = 341;
+ _assert(i7);
+break;
+case 23:
+ r0 = _2E_str221;
+ r1 = _2E_str1222;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 621;
+ _assert(i7);
+break;
+}
+}
+else{
+ r0 = _2E_str221;
+ r1 = _2E_str1222;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = 361;
+ _assert(i7);
+}
+}
+
+function __mandreel_internal_init(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+ var r13;
+ var r14;
+ var r15;
+ var r16;
+ var r17;
+ var r18;
+ var r19;
+ var r20;
+ var r21;
+var __label__ = 0;
+ i7 = sp + -2456;var g0 = i7>>2; // save stack
+ r0 = __mandreel_internal_SetResolution__index__;
+ r1 = _ZZ24__mandreel_internal_initE54s_723478567_mandreel___mandreel_internal_SetResolution;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ iMandreelRegisterExternalCallback(i7);
+ r0 = iMandreel_TextureAsync_IsCompressed__index__;
+ r1 = _ZZ24__mandreel_internal_initE56s_723478567_mandreel_iMandreel_TextureAsync_IsCompressed;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ iMandreelRegisterExternalCallback(i7);
+ r0 = iMandreel_TextureAsync_GetPackOffset__index__;
+ r1 = _ZZ24__mandreel_internal_initE57s_723478567_mandreel_iMandreel_TextureAsync_GetPackOffset;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ iMandreelRegisterExternalCallback(i7);
+ r0 = __resize__index__;
+ r1 = _ZZ24__mandreel_internal_initE29s_723478567_mandreel___resize;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ iMandreelRegisterExternalCallback(i7);
+ r0 = imandreel_restore_glcontext__index__;
+ r1 = _ZZ24__mandreel_internal_initE48s_723478567_mandreel_imandreel_restore_glcontext;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ iMandreelRegisterExternalCallback(i7);
+ r0 = imandreel_viewport_resize__index__;
+ r1 = _ZZ24__mandreel_internal_initE46s_723478567_mandreel_imandreel_viewport_resize;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ r0 = g_msgcallback;
+ r0 = r0 >> 2;
+ r1 = _Z31MandreelDefaultDebugMsgCallbackiPKc__index__;
+ iMandreelRegisterExternalCallback(i7);
+ r2 = _ZL7g_bInit_2E_b;
+ heap32[(r0)] = r1;
+ r0 = heapU8[r2];
+ if(r0 !=1) //_LBB822_2
+{
+ r0 = 1;
+ heap8[r2] = r0;
+ r1 = 0;
+ mandreel_audio_isLogEnabled(i7);
+ r2 = r_g0 != r1;
+ r3 = _ZL6g_bLog;
+ r2 = r2 & 1;
+ heap8[r3] = r2;
+ mandreel_audio_useMusicFunctions(i7);
+ r2 = heapU8[r3];
+ if(r2 !=0) //_LBB822_4
+{
+ r2 = _2E_str35256;
+ heap32[(g0)] = r2;
+ printf(i7);
+}
+else{
+ r1 = 0;
+}
+_6: while(true){
+ r2 = (r1 * 73)|0;
+ r3 = _ZL11g_aChannels;
+ r2 = r2 << 2;
+ r2 = (r3 + r2)|0;
+ r4 = (r1 * 292)|0;
+ r2 = r2 >> 2;
+ r5 = _ZL15g_aFreeChannels;
+ r6 = r1 << 2;
+ r5 = (r5 + r6)|0;
+ r3 = (r3 + r4)|0;
+ heap32[(r2+69)] = r1;
+ r2 = (r1 + 1)|0;
+ r4 = r5 >> 2;
+ heap8[r3+269] = r0;
+ heap32[(r4)] = r1;
+ r1 = r2;
+if(!(r2 !=32)) //_LBB822_5
+{
+break _6;
+}
+}
+ r1 = _ZL15g_iFreeChannels;
+ r1 = r1 >> 2;
+ heap32[(r1)] = 32;
+ mandreel_audio_init(i7);
+ r1 = _2E_str22243;
+ heap32[(g0)] = r1;
+ printf(i7);
+ heap32[(g0)] = 0;
+ _Z30mandreel_fopen_enable_checkfatb(i7);
+ r1 = _2E_str779;
+ r2 = _2E_str1648;
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r2;
+ fopen(i7);
+ r3 = r_g0;
+ heap32[(g0)] = 1;
+ _Z30mandreel_fopen_enable_checkfatb(i7);
+ if(r3 ==0) //_LBB822_19
+{
+ r4 = _2E_str24245;
+ r5 = 0;
+ heap32[(g0)] = r4;
+ _printf_error(i7);
+ r4 = r5;
+}
+else{
+ if(uint(r3) <uint(10)) //_LBB822_9
+{
+ r4 = _ZL13s_file_stdout;
+ r5 = r4 >> 2;
+ r5 = heap32[(r5)];
+ r5 = r5 >> 2;
+ r5 = heap32[(r5+7)];
+ heap32[(g0)] = r4;
+ heap32[(g0+1)] = 0;
+ heap32[(g0+2)] = 2;
+ __FUNCTION_TABLE__[(r5)>>2](i7);
+}
+else{
+ r4 = r3 >> 2;
+ r4 = heap32[(r4)];
+ r4 = r4 >> 2;
+ r4 = heap32[(r4+7)];
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = 0;
+ heap32[(g0+2)] = 2;
+ __FUNCTION_TABLE__[(r4)>>2](i7);
+ r4 = r3;
+}
+ r5 = r4 >> 2;
+ r5 = heap32[(r5)];
+ r5 = r5 >> 2;
+ r5 = heap32[(r5+5)];
+ heap32[(g0)] = r4;
+ __FUNCTION_TABLE__[(r5)>>2](i7);
+ r4 = r_g0;
+ if(uint(r3) >uint(9)) //_LBB822_12
+{
+ r5 = r3;
+}
+else{
+ r5 = _ZL13s_file_stdout;
+}
+ r6 = r5 >> 2;
+ r6 = heap32[(r6)];
+ r6 = r6 >> 2;
+ r6 = heap32[(r6+7)];
+ heap32[(g0)] = r5;
+ heap32[(g0+1)] = 0;
+ heap32[(g0+2)] = 0;
+ __FUNCTION_TABLE__[(r6)>>2](i7);
+ r5 = (r4 + 1)|0;
+ heap32[(g0)] = r5;
+ malloc(i7);
+ r5 = r_g0;
+ if(uint(r3) <uint(10)) //_LBB822_15
+{
+ r6 = _ZL13s_file_stdout;
+ r7 = r6 >> 2;
+ r7 = heap32[(r7)];
+ r7 = r7 >> 2;
+ r7 = heap32[(r7+1)];
+ heap32[(g0)] = r6;
+ heap32[(g0+1)] = r5;
+ heap32[(g0+2)] = 1;
+ heap32[(g0+3)] = r4;
+ r8 = 0;
+ __FUNCTION_TABLE__[(r7)>>2](i7);
+ heap8[r5+r4] = r8;
+}
+else{
+ r6 = r3 >> 2;
+ r6 = heap32[(r6)];
+ r6 = r6 >> 2;
+ r6 = heap32[(r6+1)];
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r5;
+ heap32[(g0+2)] = 1;
+ heap32[(g0+3)] = r4;
+ r7 = 0;
+ __FUNCTION_TABLE__[(r6)>>2](i7);
+ heap8[r5+r4] = r7;
+ r6 = r3;
+}
+ r7 = r6 >> 2;
+ r7 = heap32[(r7)];
+ r7 = r7 >> 2;
+ r7 = heap32[(r7+4)];
+ heap32[(g0)] = r6;
+ __FUNCTION_TABLE__[(r7)>>2](i7);
+ if(uint(r3) >uint(9)) //_LBB822_18
+{
+ heap32[(g0)] = r6;
+ _ZdlPv(i7);
+}
+}
+ r3 = sp + -128;
+ heap32[(g0)] = r3;
+ mandreel_audio_getAudioDriverName(i7);
+ r6 = _2E_str4225;
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r6;
+ strcmp(i7);
+ r3 = r_g0;
+if(!(r5 ==0)) //_LBB822_198
+{
+_28: do {
+if(!(r4 <1)) //_LBB822_197
+{
+ r6 = sp + -1408;
+ r7 = (r6 + 1)|0;
+ r8 = (r5 + 1)|0;
+ r9 = 0;
+_30: while(true){
+ r10 = (r5 + r9)|0;
+ r11 = heapU8[r5+r9];
+if(!(r11 ==13)) //_LBB822_25
+{
+ if(r9 <r4) //_LBB822_26
+{
+ r11 = r9;
+_35: while(true){
+ r9 = (r11 + 1)|0;
+ r11 = heapU8[r8+r11];
+ if(r11 ==13) //_LBB822_29
+{
+break _35;
+}
+else{
+ r11 = r9;
+if(!(r9 <r4)) //_LBB822_27
+{
+break _35;
+}
+}
+}
+}
+}
+ r11 = _ZL10strtok_pos;
+ r12 = 0;
+ r11 = r11 >> 2;
+ heap8[r5+r9] = r12;
+ r13 = heap32[(r11)];
+ r9 = (r9 + 2)|0;
+ r10 = r10 == 0 ? r13 : r10;
+_39: while(true){
+ r13 = heapU8[r10];
+ if(r13 ==0) //_LBB822_47
+{
+__label__ = 44;
+break _39;
+}
+else{
+ r14 = r12;
+_42: while(true){
+ if(r14 ==-1) //_LBB822_36
+{
+__label__ = 34;
+break _39;
+}
+else{
+ r15 = _2E_str4133;
+ r15 = (r15 - r14)|0;
+ r16 = r13 & 255;
+ r15 = heapU8[r15];
+ if(r16 !=r15) //_LBB822_30
+{
+ r14 = (r14 + -1)|0;
+}
+else{
+break _42;
+}
+}
+}
+ r10 = (r10 + 1)|0;
+}
+}
+_47: do {
+if (__label__ == 34){
+ if(r13 ==0) //_LBB822_47
+{
+__label__ = 44;
+}
+else{
+ r12 = r10;
+_50: while(true){
+ r13 = heapU8[r12];
+ if(r13 ==0) //_LBB822_44
+{
+break _50;
+}
+else{
+ r14 = r0;
+_53: while(true){
+ if(r14 !=0) //_LBB822_38
+{
+ r15 = _2E_str4133;
+ r15 = (r15 - r14)|0;
+ r16 = r13 & 255;
+ r15 = heapU8[r15+1];
+ if(r16 ==r15) //_LBB822_44
+{
+break _50;
+}
+else{
+ r14 = (r14 + -1)|0;
+}
+}
+else{
+break _53;
+}
+}
+ r12 = (r12 + 1)|0;
+}
+}
+ r13 = heapU8[r12];
+ if(r13 !=0) //_LBB822_46
+{
+ r13 = (r12 + 1)|0;
+ r14 = 0;
+ heap8[r12] = r14;
+ r12 = r13;
+}
+ heap32[(r11)] = r12;
+ r13 = _2E_str26247;
+ heap32[(g0)] = r13;
+ heap32[(g0+1)] = r10;
+ strcmp(i7);
+ r13 = r_g0;
+ if(r13 !=0) //_LBB822_71
+{
+ r13 = _2E_str29250;
+ heap32[(g0)] = r13;
+ heap32[(g0+1)] = r10;
+ strcmp(i7);
+ r13 = r_g0;
+ if(r13 !=0) //_LBB822_154
+{
+ if(r3 !=0) //_LBB822_70
+{
+__label__ = 66;
+break _47;
+}
+else{
+ r13 = _2E_str32253;
+ heap32[(g0)] = r13;
+ heap32[(g0+1)] = r10;
+ strcmp(i7);
+ r13 = r_g0;
+ if(r13 !=0) //_LBB822_176
+{
+ r13 = _2E_str33254;
+ heap32[(g0)] = r13;
+ heap32[(g0+1)] = r10;
+ strcmp(i7);
+ r10 = r_g0;
+ if(r10 !=0) //_LBB822_70
+{
+__label__ = 66;
+break _47;
+}
+else{
+__label__ = 173; //SET chanka
+_69: while(true){
+ r10 = heapU8[r12];
+ if(r10 ==0) //_LBB822_184
+{
+__label__ = 175;
+break _69;
+}
+else{
+ r13 = 0;
+_72: while(true){
+ if(r13 ==-1) //_LBB822_185
+{
+__label__ = 176;
+break _69;
+}
+else{
+ r14 = _2E_str4133;
+ r14 = (r14 - r13)|0;
+ r15 = r10 & 255;
+ r14 = heapU8[r14];
+ if(r15 !=r14) //_LBB822_178
+{
+ r13 = (r13 + -1)|0;
+}
+else{
+break _72;
+}
+}
+}
+ r12 = (r12 + 1)|0;
+}
+}
+if (__label__ == 176){
+ if(r10 ==0) //_LBB822_184
+{
+__label__ = 175;
+}
+else{
+ r13 = r12;
+_80: while(true){
+ r10 = heapU8[r13];
+ if(r10 ==0) //_LBB822_193
+{
+break _80;
+}
+else{
+ r14 = 1;
+_83: while(true){
+ if(r14 !=0) //_LBB822_187
+{
+ r15 = _2E_str4133;
+ r15 = (r15 - r14)|0;
+ r16 = r10 & 255;
+ r15 = heapU8[r15+1];
+ if(r16 ==r15) //_LBB822_193
+{
+break _80;
+}
+else{
+ r14 = (r14 + -1)|0;
+}
+}
+else{
+break _83;
+}
+}
+ r13 = (r13 + 1)|0;
+}
+}
+ r10 = heapU8[r13];
+ if(r10 !=0) //_LBB822_195
+{
+ r14 = (r13 + 1)|0;
+ r10 = 0;
+ heap8[r13] = r10;
+ r10 = r12;
+ r12 = r14;
+__label__ = 187;
+}
+else{
+ r10 = r12;
+ r12 = r13;
+__label__ = 187;
+}
+}
+}
+if (__label__ == 175){
+ r10 = 0;
+}
+ heap32[(r11)] = r12;
+ r11 = sp + -384;
+ heap32[(g0)] = r11;
+ heap32[(g0+1)] = r10;
+ strcpy(i7);
+__label__ = 66;
+break _47;
+}
+}
+else{
+_95: while(true){
+ r10 = heapU8[r12];
+ if(r10 ==0) //_LBB822_163
+{
+__label__ = 155;
+break _95;
+}
+else{
+ r13 = 0;
+_98: while(true){
+ if(r13 ==-1) //_LBB822_164
+{
+__label__ = 156;
+break _95;
+}
+else{
+ r14 = _2E_str4133;
+ r14 = (r14 - r13)|0;
+ r15 = r10 & 255;
+ r14 = heapU8[r14];
+ if(r15 !=r14) //_LBB822_157
+{
+ r13 = (r13 + -1)|0;
+}
+else{
+break _98;
+}
+}
+}
+ r12 = (r12 + 1)|0;
+}
+}
+if (__label__ == 156){
+ if(r10 ==0) //_LBB822_163
+{
+__label__ = 155;
+}
+else{
+ r13 = r12;
+_106: while(true){
+ r10 = heapU8[r13];
+ if(r10 ==0) //_LBB822_172
+{
+break _106;
+}
+else{
+ r14 = 1;
+_109: while(true){
+ if(r14 !=0) //_LBB822_166
+{
+ r15 = _2E_str4133;
+ r15 = (r15 - r14)|0;
+ r16 = r10 & 255;
+ r15 = heapU8[r15+1];
+ if(r16 ==r15) //_LBB822_172
+{
+break _106;
+}
+else{
+ r14 = (r14 + -1)|0;
+}
+}
+else{
+break _109;
+}
+}
+ r13 = (r13 + 1)|0;
+}
+}
+ r10 = heapU8[r13];
+ if(r10 !=0) //_LBB822_174
+{
+ r14 = (r13 + 1)|0;
+ r10 = 0;
+ heap8[r13] = r10;
+ r10 = r12;
+ r12 = r14;
+__label__ = 167;
+}
+else{
+ r10 = r12;
+ r12 = r13;
+__label__ = 167;
+}
+}
+}
+if (__label__ == 155){
+ r10 = 0;
+}
+ heap32[(r11)] = r12;
+ r11 = sp + -2432;
+ r12 = _2E_str12233;
+ r13 = sp + -384;
+ heap32[(g0)] = r11;
+ heap32[(g0+1)] = r12;
+ heap32[(g0+2)] = r13;
+ heap32[(g0+3)] = r10;
+ sprintf(i7);
+ heap32[(g0)] = r11;
+ mandreel_add_valid_fopenfile(i7);
+__label__ = 66;
+break _47;
+}
+}
+}
+else{
+ r10 = (r12 + 1)|0;
+ r13 = 0;
+ r14 = r12;
+_122: while(true){
+ r15 = heapU8[r12+r13];
+ if(r15 ==0) //_LBB822_90
+{
+__label__ = 85;
+break _122;
+}
+else{
+ r16 = 0;
+_125: while(true){
+ if(r16 ==-1) //_LBB822_79
+{
+__label__ = 75;
+break _122;
+}
+else{
+ r17 = _2E_str4133;
+ r17 = (r17 - r16)|0;
+ r18 = r15 & 255;
+ r17 = heapU8[r17];
+ if(r18 !=r17) //_LBB822_73
+{
+ r16 = (r16 + -1)|0;
+}
+else{
+break _125;
+}
+}
+}
+ r13 = (r13 + 1)|0;
+ r14 = (r14 + 1)|0;
+ r10 = (r10 + 1)|0;
+}
+}
+_130: do {
+if (__label__ == 75){
+ if(r15 ==0) //_LBB822_90
+{
+__label__ = 85;
+}
+else{
+ r15 = (r12 + r13)|0;
+_133: while(true){
+ r16 = heapU8[r14];
+ if(r16 ==0) //_LBB822_87
+{
+break _133;
+}
+else{
+ r17 = 1;
+_136: while(true){
+ if(r17 !=0) //_LBB822_81
+{
+ r18 = _2E_str4133;
+ r18 = (r18 - r17)|0;
+ r19 = r16 & 255;
+ r18 = heapU8[r18+1];
+ if(r19 ==r18) //_LBB822_87
+{
+break _133;
+}
+else{
+ r17 = (r17 + -1)|0;
+}
+}
+else{
+break _136;
+}
+}
+ r14 = (r14 + 1)|0;
+}
+}
+ r16 = heapU8[r14];
+ if(r16 !=0) //_LBB822_89
+{
+ r16 = (r14 + 1)|0;
+ r17 = 0;
+ heap8[r14] = r17;
+ r14 = r16;
+}
+ r17 = 0;
+ r16 = r15 == r17;
+ heap32[(r11)] = r14;
+_145: while(true){
+ r18 = heapU8[r14];
+ if(r18 ==0) //_LBB822_109
+{
+__label__ = 103;
+break _145;
+}
+else{
+ r19 = r17;
+_148: while(true){
+ if(r19 ==-1) //_LBB822_98
+{
+__label__ = 93;
+break _145;
+}
+else{
+ r20 = _2E_str4133;
+ r20 = (r20 - r19)|0;
+ r21 = r18 & 255;
+ r20 = heapU8[r20];
+ if(r21 !=r20) //_LBB822_92
+{
+ r19 = (r19 + -1)|0;
+}
+else{
+break _148;
+}
+}
+}
+ r14 = (r14 + 1)|0;
+}
+}
+if (__label__ == 93){
+if(!(r18 ==0)) //_LBB822_109
+{
+ r17 = r14;
+_156: while(true){
+ r18 = heapU8[r17];
+ if(r18 ==0) //_LBB822_106
+{
+break _156;
+}
+else{
+ r19 = 1;
+_159: while(true){
+ if(r19 !=0) //_LBB822_100
+{
+ r20 = _2E_str4133;
+ r20 = (r20 - r19)|0;
+ r21 = r18 & 255;
+ r20 = heapU8[r20+1];
+ if(r21 ==r20) //_LBB822_106
+{
+break _156;
+}
+else{
+ r19 = (r19 + -1)|0;
+}
+}
+else{
+break _159;
+}
+}
+ r17 = (r17 + 1)|0;
+}
+}
+ r18 = heapU8[r17];
+ if(r18 !=0) //_LBB822_108
+{
+ r18 = (r17 + 1)|0;
+ r19 = 0;
+ heap8[r17] = r19;
+ r17 = r18;
+}
+ heap32[(r11)] = r17;
+_168: while(true){
+ r18 = heapU8[r17];
+ if(r18 ==0) //_LBB822_128
+{
+__label__ = 121;
+break _168;
+}
+else{
+ r19 = 0;
+_171: while(true){
+ if(r19 ==-1) //_LBB822_117
+{
+__label__ = 111;
+break _168;
+}
+else{
+ r20 = _2E_str4133;
+ r20 = (r20 - r19)|0;
+ r21 = r18 & 255;
+ r20 = heapU8[r20];
+ if(r21 !=r20) //_LBB822_111
+{
+ r19 = (r19 + -1)|0;
+}
+else{
+break _171;
+}
+}
+}
+ r17 = (r17 + 1)|0;
+}
+}
+if (__label__ == 111){
+if(!(r18 ==0)) //_LBB822_128
+{
+ r15 = r17;
+_179: while(true){
+ r16 = heapU8[r15];
+ if(r16 ==0) //_LBB822_125
+{
+break _179;
+}
+else{
+ r18 = 1;
+_182: while(true){
+ if(r18 !=0) //_LBB822_119
+{
+ r19 = _2E_str4133;
+ r19 = (r19 - r18)|0;
+ r20 = r16 & 255;
+ r19 = heapU8[r19+1];
+ if(r20 ==r19) //_LBB822_125
+{
+break _179;
+}
+else{
+ r18 = (r18 + -1)|0;
+}
+}
+else{
+break _182;
+}
+}
+ r15 = (r15 + 1)|0;
+}
+}
+ r16 = heapU8[r15];
+ if(r16 !=0) //_LBB822_127
+{
+ r16 = (r15 + 1)|0;
+ r18 = 0;
+ heap8[r15] = r18;
+ r15 = r16;
+}
+ heap32[(r11)] = r15;
+ heap32[(g0)] = 264;
+ _Znwj(i7);
+ r11 = r_g0;
+ heap32[(g0)] = r17;
+ heap32[(g0+1)] = 0;
+ r15 = 0;
+ r16 = -1;
+ r17 = r11 >> 2;
+ strtol(i7);
+ heap32[(r17+64)] = r_g0;
+_191: while(true){
+ r17 = r15;
+ r18 = heapU8[r10+r17];
+ if(r18 !=46) //_LBB822_133
+{
+ if(r18 ==0) //_LBB822_137
+{
+break _191;
+}
+else{
+if(!(r18 ==47)) //_LBB822_136
+{
+ r15 = (r17 + 1)|0;
+ if(r18 !=92) //_LBB822_131
+{
+continue _191;
+}
+}
+ r16 = -1;
+}
+}
+else{
+ r16 = r17;
+}
+ r15 = (r17 + 1)|0;
+}
+ if(r16 ==-1) //_LBB822_143
+{
+ r10 = (r12 + r13)|0;
+ r12 = _2E_str12233;
+ r10 = (r10 + 1)|0;
+ r15 = _2E_str2131;
+ heap32[(g0)] = r6;
+ heap32[(g0+1)] = r12;
+ heap32[(g0+2)] = r10;
+ heap32[(g0+3)] = r15;
+ sprintf(i7);
+}
+else{
+_205: do {
+ if(r16 >0) //_LBB822_140
+{
+ r10 = (r12 + 1)|0;
+ r12 = 0;
+_207: while(true){
+ r15 = (r12 + r10)|0;
+ r17 = (r12 + 1)|0;
+ r15 = heapU8[r15+r13];
+ heap8[r6+r12] = r15;
+ r12 = r17;
+if(!(r16 !=r17)) //_LBB822_141
+{
+break _205;
+}
+}
+}
+else{
+ r16 = 0;
+}
+} while(0);
+ r10 = (r6 + r16)|0;
+ r12 = _2E_str2131;
+ heap32[(g0)] = r10;
+ heap32[(g0+1)] = r12;
+ strcpy(i7);
+}
+ r10 = heapU8[sp+-1408];
+_212: do {
+ if(r10 ==0) //_LBB822_146
+{
+ r15 = r11;
+}
+else{
+ r12 = r7;
+ r15 = r11;
+_215: while(true){
+ r16 = r10 & 255;
+ if(r16 !=92) //_LBB822_149
+{
+ r16 = r10 << 24;
+ r16 = r16 >> 24;
+ r16 = (r16 + -65)|0;
+ r13 = 26;
+ r17 = (r10 + 32)|0;
+ r10 = uint(r16) < uint(r13) ? r17 : r10;
+}
+else{
+ r10 = 47;
+}
+ heap8[r15] = r10;
+ r10 = heapU8[r12];
+ r15 = (r15 + 1)|0;
+ r12 = (r12 + 1)|0;
+if(!(r10 !=0)) //_LBB822_147
+{
+break _212;
+}
+}
+}
+} while(0);
+ r10 = _ZL21g_pFirstSoundDuration;
+ r12 = 0;
+ r10 = r10 >> 2;
+ heap8[r15] = r12;
+ r12 = r11 >> 2;
+ r15 = heap32[(r10)];
+ heap32[(r12+65)] = r15;
+ heap32[(r10)] = r11;
+ r10 = heapU8[r14];
+ if(r10 ==48) //_LBB822_70
+{
+__label__ = 66;
+break _47;
+}
+else{
+ heap32[(g0)] = r11;
+ heap32[(g0+1)] = 0;
+ mandreel_audio_createBuffer(i7);
+__label__ = 66;
+break _47;
+}
+}
+}
+ heap32[(r11)] = r17;
+__label__ = 146;
+break _130;
+}
+}
+ heap32[(r11)] = r14;
+__label__ = 146;
+}
+}
+} while(0);
+if (__label__ == 85){
+ r16 = 1;
+ r15 = 0;
+ r10 = (r12 + r13)|0;
+ heap32[(r11)] = r10;
+}
+ r10 = _2E_str30251;
+ r11 = _2E_str31252;
+ r10 = r16 != 0 ? r10 : r15;
+ heap32[(g0)] = r11;
+ heap32[(g0+1)] = r10;
+ _printf_warning(i7);
+__label__ = 66;
+break _47;
+}
+}
+else{
+_228: while(true){
+ r10 = heapU8[r12];
+ if(r10 ==0) //_LBB822_56
+{
+__label__ = 52;
+break _228;
+}
+else{
+ r13 = 0;
+_231: while(true){
+ if(r13 ==-1) //_LBB822_57
+{
+__label__ = 53;
+break _228;
+}
+else{
+ r14 = _2E_str4133;
+ r14 = (r14 - r13)|0;
+ r15 = r10 & 255;
+ r14 = heapU8[r14];
+ if(r15 !=r14) //_LBB822_50
+{
+ r13 = (r13 + -1)|0;
+}
+else{
+break _231;
+}
+}
+}
+ r12 = (r12 + 1)|0;
+}
+}
+if (__label__ == 53){
+ if(r10 ==0) //_LBB822_56
+{
+__label__ = 52;
+}
+else{
+ r13 = r12;
+_239: while(true){
+ r10 = heapU8[r13];
+ if(r10 ==0) //_LBB822_65
+{
+break _239;
+}
+else{
+ r14 = 1;
+_242: while(true){
+ if(r14 !=0) //_LBB822_59
+{
+ r15 = _2E_str4133;
+ r15 = (r15 - r14)|0;
+ r16 = r10 & 255;
+ r15 = heapU8[r15+1];
+ if(r16 ==r15) //_LBB822_65
+{
+break _239;
+}
+else{
+ r14 = (r14 + -1)|0;
+}
+}
+else{
+break _242;
+}
+}
+ r13 = (r13 + 1)|0;
+}
+}
+ r10 = heapU8[r13];
+ if(r10 !=0) //_LBB822_67
+{
+ r14 = (r13 + 1)|0;
+ r10 = 0;
+ heap8[r13] = r10;
+ r10 = r12;
+ r12 = r14;
+__label__ = 64;
+}
+else{
+ r10 = r12;
+ r12 = r13;
+__label__ = 64;
+}
+}
+}
+if (__label__ == 52){
+ r10 = 0;
+}
+ heap32[(r11)] = r12;
+ r11 = _2E_str27248;
+ heap32[(g0)] = r10;
+ heap32[(g0+1)] = r11;
+ strcmp(i7);
+ r12 = r_g0;
+ if(r12 ==0) //_LBB822_70
+{
+__label__ = 66;
+}
+else{
+ r12 = _2E_str28249;
+ heap32[(g0)] = r12;
+ heap32[(g0+1)] = r10;
+ heap32[(g0+2)] = r11;
+ _printf_error(i7);
+__label__ = 66;
+}
+}
+}
+}
+} while(0);
+if (__label__ == 44){
+ heap32[(r11)] = r10;
+}
+if(!(r9 <r4)) //_LBB822_23
+{
+break _28;
+}
+}
+}
+} while(0);
+ heap32[(g0)] = r5;
+ free(i7);
+}
+ __mandreel_internal_CreateWindow(i7);
+ heap32[(g0)] = 0;
+ _Z30mandreel_fopen_enable_checkfatb(i7);
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r2;
+ fopen(i7);
+ r0 = r_g0;
+ heap32[(g0)] = 1;
+ _Z30mandreel_fopen_enable_checkfatb(i7);
+if(!(r0 ==0)) //_LBB822_389
+{
+ if(uint(r0) <uint(10)) //_LBB822_201
+{
+ r1 = _ZL13s_file_stdout;
+ r2 = r1 >> 2;
+ r2 = heap32[(r2)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+7)];
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = 0;
+ heap32[(g0+2)] = 2;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+}
+else{
+ r1 = r0 >> 2;
+ r1 = heap32[(r1)];
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+7)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = 0;
+ heap32[(g0+2)] = 2;
+ __FUNCTION_TABLE__[(r1)>>2](i7);
+ r1 = r0;
+}
+ r2 = r1 >> 2;
+ r2 = heap32[(r2)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+5)];
+ heap32[(g0)] = r1;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ r1 = r_g0;
+ if(uint(r0) >uint(9)) //_LBB822_204
+{
+ r2 = r0;
+}
+else{
+ r2 = _ZL13s_file_stdout;
+}
+ r3 = r2 >> 2;
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3+7)];
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = 0;
+ heap32[(g0+2)] = 0;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ r2 = (r1 + 1)|0;
+ heap32[(g0)] = r2;
+ malloc(i7);
+ r2 = r_g0;
+ if(uint(r0) <uint(10)) //_LBB822_207
+{
+ r3 = _ZL13s_file_stdout;
+ r4 = r3 >> 2;
+ r4 = heap32[(r4)];
+ r4 = r4 >> 2;
+ r4 = heap32[(r4+1)];
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r2;
+ heap32[(g0+2)] = 1;
+ heap32[(g0+3)] = r1;
+ r5 = 0;
+ __FUNCTION_TABLE__[(r4)>>2](i7);
+ heap8[r2+r1] = r5;
+}
+else{
+ r3 = r0 >> 2;
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3+1)];
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r2;
+ heap32[(g0+2)] = 1;
+ heap32[(g0+3)] = r1;
+ r4 = 0;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ heap8[r2+r1] = r4;
+ r3 = r0;
+}
+ r4 = r3 >> 2;
+ r4 = heap32[(r4)];
+ r4 = r4 >> 2;
+ r4 = heap32[(r4+4)];
+ heap32[(g0)] = r3;
+ __FUNCTION_TABLE__[(r4)>>2](i7);
+if(!(uint(r0) <uint(10))) //_LBB822_210
+{
+ heap32[(g0)] = r3;
+ _ZdlPv(i7);
+}
+if(!(r2 ==0)) //_LBB822_389
+{
+ r0 = (r2 + 1)|0;
+ r3 = -1;
+ r4 = 0;
+ r5 = r4;
+_278: while(true){
+ r6 = r3;
+_280: while(true){
+ if(r5 <r1) //_LBB822_212
+{
+ r3 = (r2 + r5)|0;
+ r7 = heapU8[r2+r5];
+ if(r7 ==13) //_LBB822_214
+{
+ r7 = r5;
+}
+else{
+_285: while(true){
+ r7 = (r5 + 1)|0;
+ r5 = heapU8[r0+r5];
+ if(r5 ==13) //_LBB822_217
+{
+break _285;
+}
+else{
+ r5 = r7;
+if(!(r7 <r1)) //_LBB822_215
+{
+break _285;
+}
+}
+}
+}
+ r5 = _ZL10strtok_pos;
+ r8 = 0;
+ r9 = r5 >> 2;
+ heap8[r2+r7] = r8;
+ r10 = heap32[(r9)];
+ r5 = (r7 + 2)|0;
+ r3 = r3 == 0 ? r10 : r3;
+_289: while(true){
+ r7 = heapU8[r3];
+ if(r7 ==0) //_LBB822_235
+{
+__label__ = 224;
+break _289;
+}
+else{
+ r10 = r8;
+_292: while(true){
+ if(r10 ==-1) //_LBB822_224
+{
+__label__ = 214;
+break _289;
+}
+else{
+ r11 = _2E_str4133;
+ r11 = (r11 - r10)|0;
+ r12 = r7 & 255;
+ r11 = heapU8[r11];
+ if(r12 !=r11) //_LBB822_218
+{
+ r10 = (r10 + -1)|0;
+}
+else{
+break _292;
+}
+}
+}
+ r3 = (r3 + 1)|0;
+}
+}
+if (__label__ == 214){
+if(!(r7 ==0)) //_LBB822_235
+{
+ r7 = r3;
+_300: while(true){
+ r8 = heapU8[r7];
+ if(r8 ==0) //_LBB822_232
+{
+break _300;
+}
+else{
+ r10 = 1;
+_303: while(true){
+ if(r10 !=0) //_LBB822_226
+{
+ r11 = _2E_str4133;
+ r11 = (r11 - r10)|0;
+ r12 = r8 & 255;
+ r11 = heapU8[r11+1];
+ if(r12 ==r11) //_LBB822_232
+{
+break _300;
+}
+else{
+ r10 = (r10 + -1)|0;
+}
+}
+else{
+break _303;
+}
+}
+ r7 = (r7 + 1)|0;
+}
+}
+ r8 = heapU8[r7];
+ if(r8 !=0) //_LBB822_234
+{
+ r8 = (r7 + 1)|0;
+ r10 = 0;
+ heap8[r7] = r10;
+ r7 = r8;
+}
+ heap32[(r9)] = r7;
+ r8 = _2E_str3782;
+ heap32[(g0)] = r8;
+ heap32[(g0+1)] = r3;
+ strcmp(i7);
+ r8 = r_g0;
+ if(r8 !=0) //_LBB822_341
+{
+ r8 = _2E_str5784;
+ heap32[(g0)] = r8;
+ heap32[(g0+1)] = r3;
+ strcmp(i7);
+ r8 = r_g0;
+ if(r8 !=0) //_LBB822_385
+{
+ r7 = _2E_str6785;
+ heap32[(g0)] = r7;
+ heap32[(g0+1)] = r3;
+ r3 = -1;
+ strcmp(i7);
+ r7 = r_g0;
+ if(r7 !=0) //_LBB822_387
+{
+continue _280;
+}
+else{
+continue _278;
+}
+}
+else{
+break _280;
+}
+}
+else{
+_315: while(true){
+ r3 = heapU8[r7];
+ if(r3 ==0) //_LBB822_255
+{
+__label__ = 242;
+break _315;
+}
+else{
+ r8 = 0;
+_318: while(true){
+ if(r8 ==-1) //_LBB822_244
+{
+__label__ = 232;
+break _315;
+}
+else{
+ r10 = _2E_str4133;
+ r10 = (r10 - r8)|0;
+ r11 = r3 & 255;
+ r10 = heapU8[r10];
+ if(r11 !=r10) //_LBB822_238
+{
+ r8 = (r8 + -1)|0;
+}
+else{
+break _318;
+}
+}
+}
+ r7 = (r7 + 1)|0;
+}
+}
+_323: do {
+if (__label__ == 232){
+ if(r3 ==0) //_LBB822_255
+{
+__label__ = 242;
+}
+else{
+ r3 = r7;
+_326: while(true){
+ r8 = heapU8[r3];
+ if(r8 ==0) //_LBB822_252
+{
+break _326;
+}
+else{
+ r10 = 1;
+_329: while(true){
+ if(r10 !=0) //_LBB822_246
+{
+ r11 = _2E_str4133;
+ r11 = (r11 - r10)|0;
+ r12 = r8 & 255;
+ r11 = heapU8[r11+1];
+ if(r12 ==r11) //_LBB822_252
+{
+break _326;
+}
+else{
+ r10 = (r10 + -1)|0;
+}
+}
+else{
+break _329;
+}
+}
+ r3 = (r3 + 1)|0;
+}
+}
+ r8 = heapU8[r3];
+ if(r8 !=0) //_LBB822_254
+{
+ r8 = (r3 + 1)|0;
+ r10 = 0;
+ heap8[r3] = r10;
+ r3 = r8;
+}
+ heap32[(r9)] = r3;
+_338: while(true){
+ r8 = heapU8[r3];
+ if(r8 ==0) //_LBB822_274
+{
+__label__ = 260;
+break _338;
+}
+else{
+ r10 = 0;
+_341: while(true){
+ if(r10 ==-1) //_LBB822_263
+{
+__label__ = 250;
+break _338;
+}
+else{
+ r11 = _2E_str4133;
+ r11 = (r11 - r10)|0;
+ r12 = r8 & 255;
+ r11 = heapU8[r11];
+ if(r12 !=r11) //_LBB822_257
+{
+ r10 = (r10 + -1)|0;
+}
+else{
+break _341;
+}
+}
+}
+ r3 = (r3 + 1)|0;
+}
+}
+if (__label__ == 250){
+if(!(r8 ==0)) //_LBB822_274
+{
+ r8 = r3;
+_349: while(true){
+ r10 = heapU8[r8];
+ if(r10 ==0) //_LBB822_271
+{
+break _349;
+}
+else{
+ r11 = 1;
+_352: while(true){
+ if(r11 !=0) //_LBB822_265
+{
+ r12 = _2E_str4133;
+ r12 = (r12 - r11)|0;
+ r13 = r10 & 255;
+ r12 = heapU8[r12+1];
+ if(r13 ==r12) //_LBB822_271
+{
+break _349;
+}
+else{
+ r11 = (r11 + -1)|0;
+}
+}
+else{
+break _352;
+}
+}
+ r8 = (r8 + 1)|0;
+}
+}
+ r10 = heapU8[r8];
+ if(r10 !=0) //_LBB822_273
+{
+ r10 = (r8 + 1)|0;
+ r11 = 0;
+ heap8[r8] = r11;
+ r8 = r10;
+}
+ heap32[(r9)] = r8;
+_361: while(true){
+ r10 = heapU8[r8];
+ if(r10 ==0) //_LBB822_293
+{
+__label__ = 278;
+break _361;
+}
+else{
+ r11 = 0;
+_364: while(true){
+ if(r11 ==-1) //_LBB822_282
+{
+__label__ = 268;
+break _361;
+}
+else{
+ r12 = _2E_str4133;
+ r12 = (r12 - r11)|0;
+ r13 = r10 & 255;
+ r12 = heapU8[r12];
+ if(r13 !=r12) //_LBB822_276
+{
+ r11 = (r11 + -1)|0;
+}
+else{
+break _364;
+}
+}
+}
+ r8 = (r8 + 1)|0;
+}
+}
+if (__label__ == 268){
+if(!(r10 ==0)) //_LBB822_293
+{
+ r10 = r8;
+_372: while(true){
+ r11 = heapU8[r10];
+ if(r11 ==0) //_LBB822_290
+{
+break _372;
+}
+else{
+ r12 = 1;
+_375: while(true){
+ if(r12 !=0) //_LBB822_284
+{
+ r13 = _2E_str4133;
+ r13 = (r13 - r12)|0;
+ r14 = r11 & 255;
+ r13 = heapU8[r13+1];
+ if(r14 ==r13) //_LBB822_290
+{
+break _372;
+}
+else{
+ r12 = (r12 + -1)|0;
+}
+}
+else{
+break _375;
+}
+}
+ r10 = (r10 + 1)|0;
+}
+}
+ r11 = heapU8[r10];
+ if(r11 !=0) //_LBB822_292
+{
+ r11 = (r10 + 1)|0;
+ r12 = 0;
+ heap8[r10] = r12;
+ r10 = r11;
+}
+ heap32[(r9)] = r10;
+_384: while(true){
+ r11 = heapU8[r10];
+ if(r11 ==0) //_LBB822_312
+{
+__label__ = 296;
+break _384;
+}
+else{
+ r12 = 0;
+_387: while(true){
+ if(r12 ==-1) //_LBB822_301
+{
+__label__ = 286;
+break _384;
+}
+else{
+ r13 = _2E_str4133;
+ r13 = (r13 - r12)|0;
+ r14 = r11 & 255;
+ r13 = heapU8[r13];
+ if(r14 !=r13) //_LBB822_295
+{
+ r12 = (r12 + -1)|0;
+}
+else{
+break _387;
+}
+}
+}
+ r10 = (r10 + 1)|0;
+}
+}
+if (__label__ == 286){
+if(!(r11 ==0)) //_LBB822_312
+{
+ r11 = r10;
+_395: while(true){
+ r12 = heapU8[r11];
+ if(r12 ==0) //_LBB822_309
+{
+break _395;
+}
+else{
+ r13 = 1;
+_398: while(true){
+ if(r13 !=0) //_LBB822_303
+{
+ r14 = _2E_str4133;
+ r14 = (r14 - r13)|0;
+ r15 = r12 & 255;
+ r14 = heapU8[r14+1];
+ if(r15 ==r14) //_LBB822_309
+{
+break _395;
+}
+else{
+ r13 = (r13 + -1)|0;
+}
+}
+else{
+break _398;
+}
+}
+ r11 = (r11 + 1)|0;
+}
+}
+ r12 = heapU8[r11];
+ if(r12 !=0) //_LBB822_311
+{
+ r12 = (r11 + 1)|0;
+ r13 = 0;
+ heap8[r11] = r13;
+ r11 = r12;
+}
+ heap32[(r9)] = r11;
+_407: while(true){
+ r12 = heapU8[r11];
+ if(r12 ==0) //_LBB822_331
+{
+__label__ = 314;
+break _407;
+}
+else{
+ r13 = 0;
+_410: while(true){
+ if(r13 ==-1) //_LBB822_320
+{
+__label__ = 304;
+break _407;
+}
+else{
+ r14 = _2E_str4133;
+ r14 = (r14 - r13)|0;
+ r15 = r12 & 255;
+ r14 = heapU8[r14];
+ if(r15 !=r14) //_LBB822_314
+{
+ r13 = (r13 + -1)|0;
+}
+else{
+break _410;
+}
+}
+}
+ r11 = (r11 + 1)|0;
+}
+}
+if (__label__ == 304){
+if(!(r12 ==0)) //_LBB822_331
+{
+ r12 = r11;
+_418: while(true){
+ r13 = heapU8[r12];
+ if(r13 ==0) //_LBB822_328
+{
+break _418;
+}
+else{
+ r14 = 1;
+_421: while(true){
+ if(r14 !=0) //_LBB822_322
+{
+ r15 = _2E_str4133;
+ r15 = (r15 - r14)|0;
+ r16 = r13 & 255;
+ r15 = heapU8[r15+1];
+ if(r16 ==r15) //_LBB822_328
+{
+break _418;
+}
+else{
+ r14 = (r14 + -1)|0;
+}
+}
+else{
+break _421;
+}
+}
+ r12 = (r12 + 1)|0;
+}
+}
+ r13 = heapU8[r12];
+ if(r13 !=0) //_LBB822_330
+{
+ r13 = (r12 + 1)|0;
+ r14 = 0;
+ heap8[r12] = r14;
+ r12 = r13;
+}
+ heap32[(r9)] = r12;
+ if(r8 ==0) //_LBB822_340
+{
+__label__ = 323;
+break _323;
+}
+else{
+ if(r11 ==0) //_LBB822_340
+{
+__label__ = 323;
+break _323;
+}
+else{
+ heap32[(g0)] = 284;
+ _Znwj(i7);
+ r9 = r_g0;
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = 0;
+ r3 = r9 >> 2;
+ strtol(i7);
+ heap32[(r3+65)] = r_g0;
+ heap32[(g0)] = r8;
+ heap32[(g0+1)] = 0;
+ strtol(i7);
+ heap32[(r3+66)] = r_g0;
+ heap32[(g0)] = r10;
+ heap32[(g0+1)] = 0;
+ strtol(i7);
+ heap32[(r3+67)] = r_g0;
+ heap32[(g0)] = r11;
+ heap32[(g0+1)] = 0;
+ strtol(i7);
+ heap32[(r3+69)] = r_g0;
+ r7 = (r7 + 1)|0;
+ r8 = 0;
+ heap32[(r3+68)] = r4;
+ heap32[(r3+64)] = r6;
+ r3 = r9;
+_432: while(true){
+ r10 = heapU8[r7];
+ if(r10 ==0) //_LBB822_339
+{
+break _432;
+}
+else{
+ r11 = r10 << 24;
+ r11 = r11 >> 24;
+ r11 = (r11 + -65)|0;
+ r12 = 26;
+ r13 = (r10 + 32)|0;
+ r10 = uint(r11) < uint(r12) ? r13 : r10;
+ r11 = r10 & 255;
+ r12 = 47;
+ r10 = r11 == 92 ? r12 : r10;
+ r7 = (r7 + 1)|0;
+ r11 = r10 & 255;
+if(!(r11 !=47)) //_LBB822_338
+{
+ r11 = r8 & 255;
+ r8 = r10;
+ if(r11 ==47) //_LBB822_335
+{
+continue _432;
+}
+}
+ r8 = (r3 + 1)|0;
+ heap8[r3] = r10;
+ r3 = r8;
+ r8 = r10;
+}
+}
+ r7 = _ZL24g_pFirstTextureAsyncInfo;
+ r8 = 0;
+ r7 = r7 >> 2;
+ heap8[r3] = r8;
+ r3 = r9 >> 2;
+ r8 = heap32[(r7)];
+ heap32[(r3+70)] = r8;
+ heap32[(r7)] = r9;
+ r3 = heap32[(r3+69)];
+ r4 = (r3 + r4)|0;
+continue _280;
+}
+}
+}
+}
+ heap32[(r9)] = r11;
+__label__ = 323;
+break _323;
+}
+}
+ heap32[(r9)] = r10;
+__label__ = 323;
+break _323;
+}
+}
+ heap32[(r9)] = r8;
+__label__ = 323;
+break _323;
+}
+}
+ heap32[(r9)] = r3;
+__label__ = 323;
+}
+}
+} while(0);
+if (__label__ == 242){
+ heap32[(r9)] = r7;
+}
+ r3 = _2E_str4783;
+ heap32[(g0)] = r3;
+ _printf_warning(i7);
+continue _280;
+}
+}
+}
+ heap32[(r9)] = r3;
+}
+else{
+break _278;
+}
+}
+_447: while(true){
+ r3 = heapU8[r7];
+ if(r3 ==0) //_LBB822_349
+{
+__label__ = 331;
+break _447;
+}
+else{
+ r4 = 0;
+_450: while(true){
+ if(r4 ==-1) //_LBB822_350
+{
+__label__ = 332;
+break _447;
+}
+else{
+ r8 = _2E_str4133;
+ r8 = (r8 - r4)|0;
+ r10 = r3 & 255;
+ r8 = heapU8[r8];
+ if(r10 !=r8) //_LBB822_343
+{
+ r4 = (r4 + -1)|0;
+}
+else{
+break _450;
+}
+}
+}
+ r7 = (r7 + 1)|0;
+}
+}
+if (__label__ == 332){
+ if(r3 ==0) //_LBB822_349
+{
+__label__ = 331;
+}
+else{
+ r3 = r7;
+_458: while(true){
+ r4 = heapU8[r3];
+ if(r4 ==0) //_LBB822_358
+{
+break _458;
+}
+else{
+ r8 = 1;
+_461: while(true){
+ if(r8 !=0) //_LBB822_352
+{
+ r10 = _2E_str4133;
+ r10 = (r10 - r8)|0;
+ r11 = r4 & 255;
+ r10 = heapU8[r10+1];
+ if(r11 ==r10) //_LBB822_358
+{
+break _458;
+}
+else{
+ r8 = (r8 + -1)|0;
+}
+}
+else{
+break _461;
+}
+}
+ r3 = (r3 + 1)|0;
+}
+}
+ r4 = heapU8[r3];
+ if(r4 !=0) //_LBB822_360
+{
+ r8 = (r3 + 1)|0;
+ r4 = 0;
+ heap8[r3] = r4;
+ r4 = r7;
+ r7 = r8;
+__label__ = 343;
+}
+else{
+ r4 = r7;
+ r7 = r3;
+__label__ = 343;
+}
+}
+}
+if (__label__ == 331){
+ r4 = 0;
+}
+ heap32[(r9)] = r7;
+_473: while(true){
+ r3 = heapU8[r7];
+ if(r3 ==0) //_LBB822_368
+{
+__label__ = 359;
+break _473;
+}
+else{
+ r8 = 0;
+_476: while(true){
+ if(r8 ==-1) //_LBB822_369
+{
+__label__ = 350;
+break _473;
+}
+else{
+ r10 = _2E_str4133;
+ r10 = (r10 - r8)|0;
+ r11 = r3 & 255;
+ r10 = heapU8[r10];
+ if(r11 !=r10) //_LBB822_362
+{
+ r8 = (r8 + -1)|0;
+}
+else{
+break _476;
+}
+}
+}
+ r7 = (r7 + 1)|0;
+}
+}
+if (__label__ == 350){
+if(!(r3 ==0)) //_LBB822_368
+{
+_483: while(true){
+ r3 = heapU8[r7];
+ if(r3 ==0) //_LBB822_377
+{
+break _483;
+}
+else{
+ r8 = 1;
+_486: while(true){
+ if(r8 !=0) //_LBB822_371
+{
+ r10 = _2E_str4133;
+ r10 = (r10 - r8)|0;
+ r11 = r3 & 255;
+ r10 = heapU8[r10+1];
+ if(r11 ==r10) //_LBB822_377
+{
+break _483;
+}
+else{
+ r8 = (r8 + -1)|0;
+}
+}
+else{
+break _486;
+}
+}
+ r7 = (r7 + 1)|0;
+}
+}
+ r3 = heapU8[r7];
+ if(r3 !=0) //_LBB822_379
+{
+ r3 = (r7 + 1)|0;
+ r8 = 0;
+ heap8[r7] = r8;
+ r7 = r3;
+}
+}
+}
+ r3 = (r6 + 1)|0;
+ heap32[(r9)] = r7;
+ r7 = heapU8[r4];
+_494: do {
+ if(r7 ==0) //_LBB822_382
+{
+ r8 = 1;
+}
+else{
+ r7 = 1;
+_497: while(true){
+ r8 = (r7 + 1)|0;
+ r9 = heapU8[r4+r7];
+ r7 = r8;
+if(!(r9 !=0)) //_LBB822_383
+{
+break _494;
+}
+}
+}
+} while(0);
+ r7 = _ZL17g_apPackFileNames;
+ r6 = r6 << 2;
+ r6 = (r7 + r6)|0;
+ heap32[(g0)] = r8;
+ r6 = r6 >> 2;
+ _Znaj(i7);
+ heap32[(r6+1)] = r_g0;
+ heap32[(g0)] = r_g0;
+ heap32[(g0+1)] = r4;
+ r4 = 0;
+ strcpy(i7);
+}
+ heap32[(g0)] = r2;
+ free(i7);
+}
+}
+ r0 = sp + -2440;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = 0;
+ r1 = _ZGVZ21Mandreel_GetTickCountE7s_first;
+ gettimeofday(i7);
+ r2 = heapU8[r1];
+if(!(r2 !=0)) //_LBB822_391
+{
+ r2 = heap32[(fp+-610)];
+ r3 = r2 >> 31;
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = r3;
+ heap32[(g0+2)] = 1000000;
+ heap32[(g0+3)] = 0;
+ r0 = r0 >> 2;
+ r0 = heap32[(r0+1)];
+ __muldi3(i7);
+ r4 = 1;
+ r5 = (r_g0 + r0)|0;
+ r6 = 0;
+ r7 = r0 >> 31;
+ r2 = uint(r5) < uint(r_g0) ? r4 : r6;
+ r6 = _ZZ21Mandreel_GetTickCountE7s_first;
+ r3 = (r_g1 + r7)|0;
+ r0 = uint(r5) < uint(r0) ? r4 : r2;
+ r2 = r6 >> 2;
+ r0 = (r3 + r0)|0;
+ heap32[(r2)] = r5;
+ heap32[(r2+1)] = r0;
+ heap8[r1] = r4;
+}
+ return;
+}
+else{
+ r2 = _2E_str34255;
+ r0 = _2E_str1222;
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = r0;
+ heap32[(g0+2)] = 307;
+ _assert(i7);
+}
+}
+
+function __forceSuperLink(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+var __label__ = 0;
+ i7 = sp + -24;var g0 = i7>>2; // save stack
+ __mandreel_internal_init(i7);
+ r0 = sp + -8;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = 0;
+ r1 = _ZGVZ21Mandreel_GetTickCountE7s_first;
+ gettimeofday(i7);
+ r2 = heapU8[r1];
+if(!(r2 !=0)) //_LBB823_2
+{
+ r2 = heap32[(fp+-2)];
+ r3 = r2 >> 31;
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = r3;
+ heap32[(g0+2)] = 1000000;
+ heap32[(g0+3)] = 0;
+ r0 = r0 >> 2;
+ r0 = heap32[(r0+1)];
+ __muldi3(i7);
+ r4 = 1;
+ r5 = (r_g0 + r0)|0;
+ r6 = 0;
+ r7 = r0 >> 31;
+ r2 = uint(r5) < uint(r_g0) ? r4 : r6;
+ r6 = _ZZ21Mandreel_GetTickCountE7s_first;
+ r3 = (r_g1 + r7)|0;
+ r0 = uint(r5) < uint(r0) ? r4 : r2;
+ r2 = r6 >> 2;
+ r0 = (r3 + r0)|0;
+ heap32[(r2)] = r5;
+ heap32[(r2+1)] = r0;
+ heap8[r1] = r4;
+}
+ r0 = _ZZ29__mandreel_internal_preupdateE8s_bfirst_2E_b;
+ r1 = heapU8[r0];
+if(!(r1 != 0)) //_LBB823_4
+{
+ r1 = 1;
+ heap8[r0] = r1;
+}
+ return;
+}
+
+function _ZNK10__cxxabiv117__class_type_info11__do_upcastEPKS0_PPv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+var __label__ = 0;
+ i7 = sp + -32;var g0 = i7>>2; // save stack
+ r0 = sp + -16;
+ r1 = r0 >> 2;
+ heap32[(fp+-4)] = 0;
+ heap32[(r1+1)] = 0;
+ r2 = heap32[(fp)];
+ heap32[(r1+2)] = 16;
+ r3 = r2 >> 2;
+ heap32[(r1+3)] = 0;
+ r4 = heap32[(fp+2)];
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r4 = r4 >> 2;
+ r3 = heap32[(r3+5)];
+ r5 = heap32[(r4)];
+ r6 = heap32[(fp+1)];
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = r6;
+ heap32[(g0+2)] = r5;
+ heap32[(g0+3)] = r0;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ r0 = heap32[(r1+1)];
+ r0 = r0 & 6;
+ if(r0 !=6) //_LBB824_2
+{
+ r0 = 0;
+ r_g0 = r0;
+ return;
+}
+else{
+ r0 = heap32[(fp+-4)];
+ heap32[(r4)] = r0;
+ r0 = 1;
+ r_g0 = r0;
+ return;
+}
+}
+
+function _ZNK10__cxxabiv117__class_type_info20__do_find_public_srcEiPKvPKS0_S2_(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+4)];
+ r1 = heap32[(fp+2)];
+ r2 = 6;
+ r3 = 1;
+ r0 = r0 == r1 ? r2 : r3;
+ r_g0 = r0;
+ return;
+}
+
+function _ZNKSt9type_info10__do_catchEPKS_PPvj(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ r1 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r1 = r1 >> 2;
+ r0 = heap32[(r0+1)];
+ r1 = heap32[(r1+1)];
+ r2 = _2E_str26;
+ r0 = r0 == 0 ? r2 : r0;
+ r1 = r1 == 0 ? r2 : r1;
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r0;
+ strcmp(i7);
+ r2 = r_g0;
+ if(r2 <0) //_LBB826_2
+{
+ r0 = 0;
+ r_g0 = r0;
+ return;
+}
+else{
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ strcmp(i7);
+ r0 = r_g0 >>> 31;
+ r0 = r0 ^ 1;
+ r_g0 = r0;
+ return;
+}
+}
+
+function _ZN10__cxxabiv117__class_type_infoD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTVSt9type_info;
+ r0 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r0)] = r1;
+ return;
+}
+
+function _ZN10__cxxabiv117__class_type_infoD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTVSt9type_info;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZNK10__cxxabiv117__class_type_info10__do_catchEPKSt9type_infoPPvj(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ r1 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r1 = r1 >> 2;
+ r0 = heap32[(r0+1)];
+ r1 = heap32[(r1+1)];
+ r2 = _2E_str26;
+ r0 = r0 == 0 ? r2 : r0;
+ r1 = r1 == 0 ? r2 : r1;
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r0;
+ strcmp(i7);
+ r2 = r_g0;
+ if(r2 >-1) //_LBB829_2
+{
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ r0 = -1;
+ strcmp(i7);
+ r0 = r_g0 > r0;
+}
+else{
+ r0 = 0;
+}
+ r0 = r0 & 1;
+ r_g0 = r0;
+ return;
+}
+
+function _ZNK10__cxxabiv117__class_type_info11__do_upcastEPKS0_PKvRNS0_15__upcast_resultE(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ r1 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r1 = r1 >> 2;
+ r0 = heap32[(r0+1)];
+ r1 = heap32[(r1+1)];
+ r2 = _2E_str26;
+ r0 = r0 == 0 ? r2 : r0;
+ r1 = r1 == 0 ? r2 : r1;
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r0;
+ strcmp(i7);
+ r2 = r_g0;
+if(!(r2 <0)) //_LBB830_3
+{
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ strcmp(i7);
+ r0 = r_g0;
+if(!(r0 <0)) //_LBB830_3
+{
+ r0 = heap32[(fp+2)];
+ r1 = heap32[(fp+3)];
+ r1 = r1 >> 2;
+ heap32[(r1)] = r0;
+ heap32[(r1+3)] = 8;
+ heap32[(r1+1)] = 6;
+ r0 = 1;
+ r_g0 = r0;
+ return;
+}
+}
+ r0 = 0;
+ r_g0 = r0;
+ return;
+}
+
+function _ZNK10__cxxabiv117__class_type_info12__do_dyncastEiNS0_10__sub_kindEPKS0_PKvS3_S5_RNS0_16__dyncast_resultE(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r0 = r0 >> 2;
+ r1 = heap32[(fp+4)];
+ r2 = heap32[(fp+2)];
+ r3 = heap32[(fp+7)];
+ r0 = heap32[(r0+1)];
+ r4 = heap32[(fp+6)];
+if(!(r1 !=r4)) //_LBB831_3
+{
+ r4 = heap32[(fp+5)];
+ r4 = r4 >> 2;
+ r4 = heap32[(r4+1)];
+ r5 = _2E_str26;
+ r4 = r4 == 0 ? r5 : r4;
+ r5 = r0 == 0 ? r5 : r0;
+ heap32[(g0)] = r5;
+ heap32[(g0+1)] = r4;
+ strcmp(i7);
+ r6 = r_g0;
+if(!(r6 <0)) //_LBB831_3
+{
+ heap32[(g0)] = r4;
+ heap32[(g0+1)] = r5;
+ strcmp(i7);
+ r4 = r_g0;
+ if(r4 >-1) //_LBB831_5
+{
+ r1 = r3 >> 2;
+ heap32[(r1+2)] = r2;
+ r1 = 0;
+ r_g0 = r1;
+ return;
+}
+}
+}
+ r4 = heap32[(fp+3)];
+ r4 = r4 >> 2;
+ r4 = heap32[(r4+1)];
+ r5 = _2E_str26;
+ r4 = r4 == 0 ? r5 : r4;
+ r0 = r0 == 0 ? r5 : r0;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r4;
+ strcmp(i7);
+ r5 = r_g0;
+if(!(r5 <0)) //_LBB831_7
+{
+ heap32[(g0)] = r4;
+ heap32[(g0+1)] = r0;
+ strcmp(i7);
+ r0 = r_g0;
+if(!(r0 <0)) //_LBB831_7
+{
+ r0 = r3 >> 2;
+ heap32[(r0)] = r1;
+ heap32[(r0+1)] = r2;
+ heap32[(r0+3)] = 1;
+}
+}
+ r0 = 0;
+ r_g0 = r0;
+ return;
+}
+
+function _ZN10__cxxabiv120__si_class_type_infoD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTVSt9type_info;
+ r0 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r0)] = r1;
+ return;
+}
+
+function _ZN10__cxxabiv120__si_class_type_infoD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTVSt9type_info;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZNK10__cxxabiv120__si_class_type_info11__do_upcastEPKNS_17__class_type_infoEPKvRNS1_15__upcast_resultE(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ r1 = heap32[(fp)];
+ r2 = r0 >> 2;
+ r1 = r1 >> 2;
+ r2 = heap32[(r2+1)];
+ r3 = heap32[(r1+1)];
+ r4 = _2E_str26;
+ r2 = r2 == 0 ? r4 : r2;
+ r3 = r3 == 0 ? r4 : r3;
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r2;
+ r4 = heap32[(fp+2)];
+ r5 = heap32[(fp+3)];
+ strcmp(i7);
+ r6 = r_g0;
+if(!(r6 <0)) //_LBB834_2
+{
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = r3;
+ strcmp(i7);
+ r2 = r_g0;
+ if(r2 >-1) //_LBB834_3
+{
+ r0 = r5 >> 2;
+ heap32[(r0)] = r4;
+ heap32[(r0+3)] = 8;
+ heap32[(r0+1)] = 6;
+ r0 = 1;
+ r_g0 = r0;
+ return;
+}
+}
+ r1 = heap32[(r1+2)];
+ r2 = r1 >> 2;
+ r2 = heap32[(r2)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+5)];
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r0;
+ heap32[(g0+2)] = r4;
+ heap32[(g0+3)] = r5;
+ __FUNCTION_TABLE__[(r2)>>2](i7);
+ return;
+}
+
+function _ZNK10__cxxabiv120__si_class_type_info12__do_dyncastEiNS_17__class_type_info10__sub_kindEPKS1_PKvS4_S6_RNS1_16__dyncast_resultE(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+var __label__ = 0;
+ i7 = sp + -32;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+3)];
+ r1 = heap32[(fp)];
+ r2 = r0 >> 2;
+ r1 = r1 >> 2;
+ r2 = heap32[(r2+1)];
+ r3 = heap32[(r1+1)];
+ r4 = _2E_str26;
+ r2 = r2 == 0 ? r4 : r2;
+ r3 = r3 == 0 ? r4 : r3;
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r2;
+ r5 = heap32[(fp+1)];
+ r6 = heap32[(fp+2)];
+ r7 = heap32[(fp+4)];
+ r8 = heap32[(fp+6)];
+ r9 = heap32[(fp+7)];
+ strcmp(i7);
+ r10 = r_g0;
+ if(r10 <0) //_LBB835_6
+{
+__label__ = 6;
+}
+else{
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = r3;
+ strcmp(i7);
+ r2 = r_g0;
+ if(r2 <0) //_LBB835_6
+{
+__label__ = 6;
+}
+else{
+ r0 = r9 >> 2;
+ heap32[(r0)] = r7;
+ heap32[(r0+1)] = r6;
+ if(r5 <0) //_LBB835_4
+{
+ if(r5 !=-2) //_LBB835_11
+{
+__label__ = 11;
+}
+else{
+ heap32[(r0+3)] = 1;
+__label__ = 11;
+}
+}
+else{
+ r1 = (r7 + r5)|0;
+ r3 = 6;
+ r4 = 1;
+ r1 = r1 == r8 ? r3 : r4;
+ heap32[(r0+3)] = r1;
+__label__ = 11;
+}
+}
+}
+_8: do {
+if (__label__ == 6){
+ r2 = heap32[(fp+5)];
+if(!(r7 !=r8)) //_LBB835_9
+{
+ r10 = r2 >> 2;
+ r10 = heap32[(r10+1)];
+ r4 = r10 == 0 ? r4 : r10;
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r4;
+ strcmp(i7);
+ r10 = r_g0;
+if(!(r10 <0)) //_LBB835_9
+{
+ heap32[(g0)] = r4;
+ heap32[(g0+1)] = r3;
+ strcmp(i7);
+ r3 = r_g0;
+ if(r3 >-1) //_LBB835_10
+{
+ r0 = r9 >> 2;
+ heap32[(r0+2)] = r6;
+break _8;
+}
+}
+}
+ r1 = heap32[(r1+2)];
+ r3 = r1 >> 2;
+ r3 = heap32[(r3)];
+ r3 = r3 >> 2;
+ r3 = heap32[(r3+6)];
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r5;
+ heap32[(g0+2)] = r6;
+ heap32[(g0+3)] = r0;
+ heap32[(g0+4)] = r7;
+ heap32[(g0+5)] = r2;
+ heap32[(g0+6)] = r8;
+ heap32[(g0+7)] = r9;
+ __FUNCTION_TABLE__[(r3)>>2](i7);
+ return;
+}
+} while(0);
+ r0 = 0;
+ r_g0 = r0;
+ return;
+}
+
+function _ZNK10__cxxabiv120__si_class_type_info20__do_find_public_srcEiPKvPKNS_17__class_type_infoES2_(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+var __label__ = 0;
+ i7 = sp + -24;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+4)];
+ r1 = heap32[(fp+2)];
+ r2 = heap32[(fp)];
+ r3 = heap32[(fp+3)];
+if(!(r0 !=r1)) //_LBB836_3
+{
+ r4 = r3 >> 2;
+ r5 = r2 >> 2;
+ r4 = heap32[(r4+1)];
+ r5 = heap32[(r5+1)];
+ r6 = _2E_str26;
+ r4 = r4 == 0 ? r6 : r4;
+ r5 = r5 == 0 ? r6 : r5;
+ heap32[(g0)] = r5;
+ heap32[(g0+1)] = r4;
+ strcmp(i7);
+ r6 = r_g0;
+if(!(r6 <0)) //_LBB836_3
+{
+ heap32[(g0)] = r4;
+ heap32[(g0+1)] = r5;
+ strcmp(i7);
+ r4 = r_g0;
+ if(r4 >-1) //_LBB836_4
+{
+ r0 = 6;
+ r_g0 = r0;
+ return;
+}
+}
+}
+ r4 = heap32[(fp+1)];
+ r2 = r2 >> 2;
+ r2 = heap32[(r2+2)];
+ r5 = r2 >> 2;
+ r5 = heap32[(r5)];
+ r5 = r5 >> 2;
+ r5 = heap32[(r5+7)];
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = r4;
+ heap32[(g0+2)] = r1;
+ heap32[(g0+3)] = r3;
+ heap32[(g0+4)] = r0;
+ __FUNCTION_TABLE__[(r5)>>2](i7);
+ return;
+}
+
+function _ZNK10__cxxabiv121__vmi_class_type_info11__do_upcastEPKNS_17__class_type_infoEPKvRNS1_15__upcast_resultE(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+ var r13;
+ var r14;
+ var r15;
+var __label__ = 0;
+ i7 = sp + -32;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ r1 = heap32[(fp)];
+ r2 = r0 >> 2;
+ r3 = r1 >> 2;
+ r2 = heap32[(r2+1)];
+ r4 = heap32[(r3+1)];
+ r5 = _2E_str26;
+ r2 = r2 == 0 ? r5 : r2;
+ r4 = r4 == 0 ? r5 : r4;
+ heap32[(g0)] = r4;
+ heap32[(g0+1)] = r2;
+ r6 = heap32[(fp+2)];
+ r7 = heap32[(fp+3)];
+ strcmp(i7);
+ r8 = r_g0;
+ if(r8 <0) //_LBB837_3
+{
+__label__ = 3;
+}
+else{
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = r4;
+ strcmp(i7);
+ r2 = r_g0;
+ if(r2 <0) //_LBB837_3
+{
+__label__ = 3;
+}
+else{
+ r0 = r7 >> 2;
+ heap32[(r0)] = r6;
+ heap32[(r0+3)] = 8;
+ heap32[(r0+1)] = 6;
+__label__ = 39;
+}
+}
+_4: do {
+if (__label__ == 3){
+ r2 = r7 >> 2;
+ r4 = heap32[(r2+2)];
+ r7 = r4 & 16;
+ if(r7 !=0) //_LBB837_5
+{
+ r4 = heap32[(r3+2)];
+}
+ r3 = heap32[(r3+3)];
+ r7 = r4 & 1;
+ r3 = (r3 + 1)|0;
+_9: while(true){
+ if(r3 !=1) //_LBB837_7
+{
+ r8 = sp + -16;
+ r9 = r8 >> 2;
+ heap32[(fp+-4)] = 0;
+ r10 = r3 << 3;
+ heap32[(r9+1)] = 0;
+ r10 = (r1 + r10)|0;
+ heap32[(r9+2)] = r4;
+ r10 = r10 >> 2;
+ heap32[(r9+3)] = 0;
+ r10 = heap32[(r10+1)];
+ r11 = r10 & 2;
+ if(r7 !=0) //_LBB837_10
+{
+__label__ = 9;
+}
+else{
+ r12 = r11 >>> 1;
+ if(r12 != 0) //_LBB837_10
+{
+__label__ = 9;
+}
+else{
+__label__ = 8;
+}
+}
+if (__label__ == 9){
+ r12 = r3 << 1;
+ r13 = r10 & 1;
+ if(r6 !=0) //_LBB837_12
+{
+ r10 = r10 >> 8;
+ if(r13 != 0) //_LBB837_14
+{
+ r14 = r6 >> 2;
+ r14 = heap32[(r14)];
+ r10 = (r14 + r10)|0;
+ r10 = r10 >> 2;
+ r10 = heap32[(r10)];
+}
+ r10 = (r6 + r10)|0;
+}
+else{
+ r10 = 0;
+}
+ r12 = r12 << 2;
+ r12 = (r1 + r12)|0;
+ r12 = r12 >> 2;
+ r14 = heap32[(r12)];
+ r15 = r14 >> 2;
+ r15 = heap32[(r15)];
+ r15 = r15 >> 2;
+ r15 = heap32[(r15+5)];
+ heap32[(g0)] = r14;
+ heap32[(g0+1)] = r0;
+ heap32[(g0+2)] = r10;
+ heap32[(g0+3)] = r8;
+ __FUNCTION_TABLE__[(r15)>>2](i7);
+ r8 = r_g0;
+if(!(r8 ==0)) //_LBB837_9
+{
+ r8 = heap32[(r9+3)];
+if(!(r8 !=8)) //_LBB837_19
+{
+ if(r13 != 0) //_LBB837_20
+{
+ r8 = heap32[(r12)];
+ heap32[(r9+3)] = r8;
+}
+}
+ r10 = heap32[(r9+1)];
+if(!(r10 <4)) //_LBB837_23
+{
+ if(r11 ==0) //_LBB837_24
+{
+ r10 = r10 & -3;
+ heap32[(r9+1)] = r10;
+}
+}
+ r11 = heap32[(r2+3)];
+ if(r11 !=0) //_LBB837_31
+{
+ r9 = heap32[(r2)];
+ r12 = heap32[(fp+-4)];
+ if(r9 ==r12) //_LBB837_33
+{
+ if(r9 ==0) //_LBB837_35
+{
+ if(r8 ==8) //_LBB837_39
+{
+__label__ = 35;
+break _9;
+}
+else{
+ if(r11 ==8) //_LBB837_39
+{
+__label__ = 35;
+break _9;
+}
+else{
+ r9 = r11 >> 2;
+ r8 = r8 >> 2;
+ r9 = heap32[(r9+1)];
+ r8 = heap32[(r8+1)];
+ r9 = r9 == 0 ? r5 : r9;
+ r8 = r8 == 0 ? r5 : r8;
+ heap32[(g0)] = r8;
+ heap32[(g0+1)] = r9;
+ strcmp(i7);
+ r11 = r_g0;
+ if(r11 <0) //_LBB837_39
+{
+__label__ = 35;
+break _9;
+}
+else{
+ heap32[(g0)] = r9;
+ heap32[(g0+1)] = r8;
+ strcmp(i7);
+ r8 = r_g0;
+ if(r8 >-1) //_LBB837_40
+{
+ r8 = heap32[(r2+1)];
+ r8 = r10 | r8;
+ heap32[(r2+1)] = r8;
+}
+else{
+__label__ = 35;
+break _9;
+}
+}
+}
+}
+}
+else{
+ r8 = heap32[(r2+1)];
+ r8 = r10 | r8;
+ heap32[(r2+1)] = r8;
+}
+}
+else{
+__label__ = 28;
+break _9;
+}
+}
+else{
+ r11 = heap32[(fp+-4)];
+ heap32[(r2)] = r11;
+ heap32[(r2+1)] = r10;
+ r11 = heap32[(r9+2)];
+ heap32[(r2+2)] = r11;
+ heap32[(r2+3)] = r8;
+ if(r10 <4) //_LBB837_43
+{
+break _4;
+}
+else{
+ r8 = r10 & 2;
+ if(r8 ==0) //_LBB837_29
+{
+ r8 = r10 & 1;
+ if(r8 ==0) //_LBB837_43
+{
+break _4;
+}
+else{
+ r8 = heapU8[r1+8];
+ r8 = r8 & 2;
+ if(r8 ==0) //_LBB837_43
+{
+break _4;
+}
+}
+}
+else{
+ r8 = heapU8[r1+8];
+ r8 = r8 & 1;
+ if(r8 ==0) //_LBB837_43
+{
+break _4;
+}
+}
+}
+}
+}
+}
+ r3 = (r3 + -1)|0;
+continue _9;
+}
+else{
+__label__ = 38;
+break _9;
+}
+}
+switch(__label__ ){//multiple entries
+case 38:
+ r0 = heap32[(r2+1)];
+ r1 = 0;
+ r0 = r0 != r1;
+ r0 = r0 & 1;
+ r_g0 = r0;
+ return;
+break;
+case 28:
+ heap32[(r2)] = 0;
+break;
+}
+ heap32[(r2+1)] = 2;
+}
+} while(0);
+ r0 = 1;
+ r_g0 = r0;
+ return;
+}
+
+function _ZNK10__cxxabiv121__vmi_class_type_info12__do_dyncastEiNS_17__class_type_info10__sub_kindEPKS1_PKvS4_S6_RNS1_16__dyncast_resultE(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+ var r13;
+ var r14;
+ var r15;
+ var r16;
+ var r17;
+ var r18;
+ var r19;
+ var r20;
+ var r21;
+ var r22;
+ var r23;
+var __label__ = 0;
+ i7 = sp + -56;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+7)];
+ r0 = r0 >> 2;
+ r1 = heap32[(r0+4)];
+ r2 = heap32[(fp)];
+ r3 = heap32[(fp+1)];
+ r4 = heap32[(fp+2)];
+ r5 = heap32[(fp+3)];
+ r6 = heap32[(fp+4)];
+ r7 = heap32[(fp+5)];
+ r8 = heap32[(fp+6)];
+ r9 = r1 & 16;
+ if(r9 !=0) //_LBB838_2
+{
+ r1 = r2 >> 2;
+ r1 = heap32[(r1+2)];
+ heap32[(r0+4)] = r1;
+}
+ r9 = r2 >> 2;
+ r10 = heap32[(r9+1)];
+ if(r6 !=r8) //_LBB838_6
+{
+__label__ = 5;
+}
+else{
+ r11 = r7 >> 2;
+ r11 = heap32[(r11+1)];
+ r12 = _2E_str26;
+ r11 = r11 == 0 ? r12 : r11;
+ r12 = r10 == 0 ? r12 : r10;
+ heap32[(g0)] = r12;
+ heap32[(g0+1)] = r11;
+ strcmp(i7);
+ r13 = r_g0;
+ if(r13 <0) //_LBB838_6
+{
+__label__ = 5;
+}
+else{
+ heap32[(g0)] = r11;
+ heap32[(g0+1)] = r12;
+ strcmp(i7);
+ r11 = r_g0;
+ if(r11 >-1) //_LBB838_8
+{
+ heap32[(r0+2)] = r4;
+__label__ = 8;
+}
+else{
+__label__ = 5;
+}
+}
+}
+_8: do {
+if (__label__ == 5){
+ r11 = r5 >> 2;
+ r12 = heap32[(r11+1)];
+ r13 = _2E_str26;
+ r12 = r12 == 0 ? r13 : r12;
+ r10 = r10 == 0 ? r13 : r10;
+ heap32[(g0)] = r10;
+ heap32[(g0+1)] = r12;
+ strcmp(i7);
+ r13 = r_g0;
+ if(r13 <0) //_LBB838_15
+{
+__label__ = 14;
+}
+else{
+ heap32[(g0)] = r12;
+ heap32[(g0+1)] = r10;
+ strcmp(i7);
+ r10 = r_g0;
+ if(r10 <0) //_LBB838_15
+{
+__label__ = 14;
+}
+else{
+ heap32[(r0)] = r6;
+ heap32[(r0+1)] = r4;
+ if(r3 <0) //_LBB838_12
+{
+ if(r3 ==-2) //_LBB838_14
+{
+ heap32[(r0+3)] = 1;
+ r9 = 0;
+ r_g0 = r9;
+ return;
+}
+else{
+__label__ = 12;
+}
+}
+else{
+ r1 = (r6 + r3)|0;
+ r2 = 6;
+ r3 = 1;
+ r1 = r1 == r8 ? r2 : r3;
+ heap32[(r0+3)] = r1;
+break _8;
+}
+}
+}
+_17: do {
+if (__label__ == 14){
+ r10 = heap32[(r9+3)];
+ r12 = r1 & 2;
+ r9 = 0;
+ r13 = r1;
+_19: while(true){
+ r14 = r13 & 3;
+_21: while(true){
+ r15 = r9;
+ r9 = r10 << 3;
+ r9 = (r2 + r9)|0;
+ r20 = 0;
+_23: while(true){
+ r16 = r20;
+ if(r10 !=r16) //_LBB838_16
+{
+ r17 = sp + -24;
+ r18 = r17 >> 2;
+ heap32[(fp+-6)] = 0;
+ heap32[(r18+1)] = 0;
+ heap32[(r18+2)] = 0;
+ r19 = r16 << 3;
+ r19 = (r9 - r19)|0;
+ heap32[(r18+3)] = 0;
+ r19 = r19 >> 2;
+ heap32[(r18+4)] = r13;
+ r20 = heap32[(r19+3)];
+ r21 = r20 & 1;
+ r22 = r20 >> 8;
+ if(r21 != 0) //_LBB838_18
+{
+ r23 = r6 >> 2;
+ r23 = heap32[(r23)];
+ r22 = (r23 + r22)|0;
+ r22 = r22 >> 2;
+ r22 = heap32[(r22)];
+}
+ r20 = r20 & 2;
+ if(r20 ==0) //_LBB838_21
+{
+ if(r3 !=-2) //_LBB838_23
+{
+__label__ = 21;
+break _23;
+}
+else{
+ r20 = (r16 + 1)|0;
+ if(r14 ==0) //_LBB838_88
+{
+continue _23;
+}
+else{
+__label__ = 21;
+break _23;
+}
+}
+}
+else{
+__label__ = 18;
+break _23;
+}
+}
+else{
+__label__ = 77;
+break _19;
+}
+}
+switch(__label__ ){//multiple entries
+case 21:
+ r9 = r4 & -3;
+break;
+case 18:
+ r9 = r4;
+break;
+}
+ r20 = heap32[(r19+2)];
+ r19 = r20 >> 2;
+ r19 = heap32[(r19)];
+ r19 = r19 >> 2;
+ r19 = heap32[(r19+6)];
+ r9 = r21 | r9;
+ r21 = (r6 + r22)|0;
+ heap32[(g0)] = r20;
+ heap32[(g0+1)] = r3;
+ heap32[(g0+2)] = r9;
+ heap32[(g0+3)] = r5;
+ heap32[(g0+4)] = r21;
+ heap32[(g0+5)] = r7;
+ heap32[(g0+6)] = r8;
+ heap32[(g0+7)] = r17;
+ __FUNCTION_TABLE__[(r19)>>2](i7);
+ r9 = r_g0;
+ r20 = heap32[(r0+2)];
+ r17 = heap32[(r18+2)];
+ r20 = r17 | r20;
+ heap32[(r0+2)] = r20;
+ r17 = heap32[(r18+3)];
+ if(r17 ==2) //_LBB838_26
+{
+__label__ = 24;
+break _19;
+}
+else{
+ if(r17 !=6) //_LBB838_27
+{
+ r19 = (r10 + -1)|0;
+ r10 = heap32[(r0)];
+ r21 = r15 & 255;
+ if(r21 !=0) //_LBB838_34
+{
+__label__ = 30;
+break _21;
+}
+else{
+ if(r10 !=0) //_LBB838_35
+{
+__label__ = 31;
+break _21;
+}
+else{
+ r10 = heap32[(fp+-6)];
+ heap32[(r0)] = r10;
+ r15 = heap32[(r18+1)];
+ heap32[(r0+1)] = r15;
+ if(r10 !=0) //_LBB838_31
+{
+ r10 = (r19 - r16)|0;
+ if(r20 ==0) //_LBB838_87
+{
+continue _21;
+}
+else{
+__label__ = 29;
+break _21;
+}
+}
+else{
+__label__ = 73;
+break _21;
+}
+}
+}
+}
+else{
+__label__ = 24;
+break _19;
+}
+}
+}
+_40: do {
+switch(__label__ ){//multiple entries
+case 30:
+ if(r10 ==0) //_LBB838_37
+{
+ r14 = heap32[(fp+-6)];
+ r10 = 0;
+__label__ = 36;
+break _40;
+}
+else{
+__label__ = 31;
+break _40;
+}
+break;
+case 29:
+ r10 = heapU8[r2+8];
+ r10 = r10 & 1;
+ if(r10 != 0) //_LBB838_30
+{
+__label__ = 73;
+}
+else{
+__label__ = 78;
+break _17;
+}
+break;
+}
+} while(0);
+if (__label__ == 31){
+ r14 = heap32[(fp+-6)];
+ if(r10 !=r14) //_LBB838_38
+{
+ if(r14 !=0) //_LBB838_40
+{
+__label__ = 39;
+}
+else{
+ if(r9 ==0) //_LBB838_41
+{
+__label__ = 36;
+}
+else{
+__label__ = 39;
+}
+}
+}
+else{
+ r9 = heap32[(r0+1)];
+ r10 = heap32[(r18+1)];
+ r9 = r10 | r9;
+ heap32[(r0+1)] = r9;
+ r9 = r15;
+__label__ = 73;
+}
+}
+_50: do {
+if (__label__ == 36){
+if(!(r14 ==0)) //_LBB838_44
+{
+if(!(r21 ==0)) //_LBB838_44
+{
+__label__ = 39;
+break _50;
+}
+}
+ r9 = r15;
+__label__ = 73;
+}
+} while(0);
+if (__label__ == 39){
+ r9 = heap32[(r0+3)];
+_57: do {
+ if(r20 >3) //_LBB838_47
+{
+ r14 = r20 & 1;
+if(!(r14 ==0)) //_LBB838_52
+{
+if(!(r12 ==0)) //_LBB838_52
+{
+ r13 = r1;
+__label__ = 43;
+break _57;
+}
+}
+ r13 = r14 == 0 ? r13 : r1;
+ r10 = 1;
+ r9 = r9 == 0 ? r10 : r9;
+ if(r17 ==0) //_LBB838_54
+{
+ r17 = r10;
+__label__ = 64;
+}
+else{
+__label__ = 64;
+}
+}
+else{
+__label__ = 43;
+}
+} while(0);
+_64: do {
+if (__label__ == 43){
+ if(r9 <1) //_LBB838_55
+{
+_68: do {
+if(!(r17 <4)) //_LBB838_59
+{
+ r9 = r17 & 1;
+ if(r9 != 0) //_LBB838_58
+{
+ r9 = heapU8[r2+8];
+ r9 = r9 & 2;
+if(!(r9 ==0)) //_LBB838_57
+{
+break _68;
+}
+}
+ r9 = 1;
+break _64;
+}
+} while(0);
+ if(r3 <0) //_LBB838_61
+{
+ if(r3 !=-2) //_LBB838_63
+{
+ r9 = heap32[(r11)];
+ r9 = r9 >> 2;
+ r9 = heap32[(r9+7)];
+ heap32[(g0)] = r5;
+ heap32[(g0+1)] = r3;
+ heap32[(g0+2)] = r10;
+ heap32[(g0+3)] = r7;
+ heap32[(g0+4)] = r8;
+ __FUNCTION_TABLE__[(r9)>>2](i7);
+ r9 = r_g0;
+}
+else{
+ r9 = 1;
+}
+}
+else{
+ r9 = (r10 + r3)|0;
+ r10 = 6;
+ r14 = 1;
+ r9 = r9 == r8 ? r10 : r14;
+}
+}
+ if(r17 <1) //_LBB838_66
+{
+ if(r9 <4) //_LBB838_70
+{
+__label__ = 60;
+}
+else{
+ r10 = r9 & 1;
+ if(r10 != 0) //_LBB838_69
+{
+ r10 = heapU8[r2+8];
+ r10 = r10 & 2;
+ if(r10 ==0) //_LBB838_68
+{
+__label__ = 58;
+}
+else{
+__label__ = 60;
+}
+}
+else{
+__label__ = 58;
+}
+}
+if (__label__ == 60){
+ r10 = heap32[(fp+-6)];
+ if(r3 <0) //_LBB838_72
+{
+if(!(r3 ==-2)) //_LBB838_68
+{
+ r14 = heap32[(r11)];
+ r14 = r14 >> 2;
+ r14 = heap32[(r14+7)];
+ heap32[(g0)] = r5;
+ heap32[(g0+1)] = r3;
+ heap32[(g0+2)] = r10;
+ heap32[(g0+3)] = r7;
+ heap32[(g0+4)] = r8;
+ __FUNCTION_TABLE__[(r14)>>2](i7);
+ r17 = r_g0;
+break _64;
+}
+}
+else{
+ r10 = (r10 + r3)|0;
+ r14 = 6;
+ r17 = 1;
+ r17 = r10 == r8 ? r14 : r17;
+break _64;
+}
+}
+ r17 = 1;
+}
+}
+} while(0);
+ r10 = r9 ^ r17;
+ if(r10 <4) //_LBB838_81
+{
+ r9 = r9 & r17;
+ heap32[(r0)] = 0;
+ if(r9 <4) //_LBB838_83
+{
+ r9 = 1;
+ heap32[(r0+3)] = 1;
+}
+else{
+__label__ = 71;
+break _19;
+}
+}
+else{
+ if(r17 >3) //_LBB838_77
+{
+ r9 = heap32[(fp+-6)];
+ heap32[(r0)] = r9;
+ r9 = heap32[(r18+1)];
+ r15 = 0;
+ heap32[(r0+1)] = r9;
+ r9 = r17;
+}
+ heap32[(r0+3)] = r9;
+ r10 = r9 & 2;
+ if(r10 !=0) //_LBB838_13
+{
+__label__ = 12;
+break _17;
+}
+else{
+ r9 = r9 & 1;
+ if(r9 ==0) //_LBB838_13
+{
+__label__ = 12;
+break _17;
+}
+else{
+ r9 = r15;
+}
+}
+}
+}
+ r10 = (r19 - r16)|0;
+ if(r20 !=4) //_LBB838_86
+{
+continue _19;
+}
+else{
+__label__ = 78;
+break _17;
+}
+}
+switch(__label__ ){//multiple entries
+case 24:
+ r20 = heap32[(fp+-6)];
+ heap32[(r0)] = r20;
+ r20 = heap32[(r18+1)];
+ heap32[(r0+1)] = r20;
+ heap32[(r0+3)] = r17;
+ r_g0 = r9;
+ return;
+break;
+case 71:
+ heap32[(r0+3)] = 2;
+ r9 = 1;
+ r_g0 = r9;
+ return;
+break;
+case 77:
+ r9 = r15;
+__label__ = 78;
+break;
+}
+}
+} while(0);
+if (__label__ == 12){
+ r9 = 0;
+}
+ r0 = r9 & 255;
+ r_g0 = r0;
+ return;
+}
+} while(0);
+ r0 = 0;
+ r_g0 = r0;
+ return;
+}
+
+function _ZNK10__cxxabiv121__vmi_class_type_info20__do_find_public_srcEiPKvPKNS_17__class_type_infoES2_(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+var __label__ = 0;
+ i7 = sp + -24;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+2)];
+ r1 = heap32[(fp+4)];
+ r2 = heap32[(fp)];
+ r3 = heap32[(fp+3)];
+ if(r0 !=r1) //_LBB839_4
+{
+__label__ = 4;
+}
+else{
+ r4 = r3 >> 2;
+ r5 = r2 >> 2;
+ r4 = heap32[(r4+1)];
+ r5 = heap32[(r5+1)];
+ r6 = _2E_str26;
+ r4 = r4 == 0 ? r6 : r4;
+ r5 = r5 == 0 ? r6 : r5;
+ heap32[(g0)] = r5;
+ heap32[(g0+1)] = r4;
+ strcmp(i7);
+ r6 = r_g0;
+ if(r6 <0) //_LBB839_4
+{
+__label__ = 4;
+}
+else{
+ heap32[(g0)] = r4;
+ heap32[(g0+1)] = r5;
+ strcmp(i7);
+ r4 = r_g0;
+ if(r4 <0) //_LBB839_4
+{
+__label__ = 4;
+}
+else{
+ r0 = 6;
+__label__ = 15;
+}
+}
+}
+if (__label__ == 4){
+ r4 = heap32[(fp+1)];
+ r5 = r2 >> 2;
+ r5 = heap32[(r5+3)];
+ r5 = (r5 + 1)|0;
+_7: while(true){
+ if(r5 !=1) //_LBB839_5
+{
+ r6 = r5 << 3;
+ r6 = (r2 + r6)|0;
+ r6 = r6 >> 2;
+ r6 = heap32[(r6+1)];
+ r7 = r6 & 2;
+_10: do {
+ if(r7 !=0) //_LBB839_7
+{
+ r7 = r6 & 1;
+if(!(r7 ==0)) //_LBB839_9
+{
+ if(r4 ==-3) //_LBB839_6
+{
+break _10;
+}
+}
+ r8 = r5 << 1;
+ r6 = r6 >> 8;
+ if(r7 != 0) //_LBB839_11
+{
+ r9 = r0 >> 2;
+ r9 = heap32[(r9)];
+ r6 = (r9 + r6)|0;
+ r6 = r6 >> 2;
+ r6 = heap32[(r6)];
+}
+ r8 = r8 << 2;
+ r8 = (r2 + r8)|0;
+ r8 = r8 >> 2;
+ r8 = heap32[(r8)];
+ r9 = r8 >> 2;
+ r9 = heap32[(r9)];
+ r9 = r9 >> 2;
+ r9 = heap32[(r9+7)];
+ r6 = (r0 + r6)|0;
+ heap32[(g0)] = r8;
+ heap32[(g0+1)] = r4;
+ heap32[(g0+2)] = r6;
+ heap32[(g0+3)] = r3;
+ heap32[(g0+4)] = r1;
+ __FUNCTION_TABLE__[(r9)>>2](i7);
+ r6 = r_g0;
+if(!(r6 <4)) //_LBB839_6
+{
+__label__ = 12;
+break _7;
+}
+}
+} while(0);
+ r5 = (r5 + -1)|0;
+continue _7;
+}
+else{
+__label__ = 14;
+break _7;
+}
+}
+switch(__label__ ){//multiple entries
+case 14:
+ r0 = 1;
+break;
+case 12:
+ r0 = r6 | r7;
+ r_g0 = r0;
+ return;
+break;
+}
+}
+ r_g0 = r0;
+ return;
+}
+
+function _ZN10__cxxabiv121__vmi_class_type_infoD0Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTVSt9type_info;
+ r2 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r2)] = r1;
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ return;
+}
+
+function _ZN10__cxxabiv121__vmi_class_type_infoD1Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = _ZTVSt9type_info;
+ r0 = r0 >> 2;
+ r1 = (r1 + 8)|0;
+ heap32[(r0)] = r1;
+ return;
+}
+
+function __extendsfdf2(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var f0;
+var __label__ = 0;
+ i7 = sp + -24;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 & 2147483647;
+ r2 = r0 & -2147483648;
+ r3 = (r1 + -8388608)|0;
+ if(uint(r3) >uint(2130706431)) //_LBB842_2
+{
+ if(uint(r1) <uint(2139095040)) //_LBB842_4
+{
+ if(r1 !=0) //_LBB842_6
+{
+ r0 = r1 >>> 1;
+ r0 = r1 | r0;
+ r3 = r0 >>> 2;
+ r0 = r0 | r3;
+ r3 = r0 >>> 4;
+ r0 = r0 | r3;
+ r3 = r0 >>> 8;
+ r0 = r0 | r3;
+ r3 = r0 >>> 16;
+ r0 = r0 | r3;
+ r3 = r0 ^ -1;
+ r4 = 1431655765;
+ r3 = r3 >>> 1;
+ r0 = r4 & (~r0);
+ r3 = r3 & 1431655765;
+ r0 = (r0 + r3)|0;
+ r3 = r0 >>> 2;
+ r0 = r0 & 858993459;
+ r3 = r3 & 858993459;
+ r0 = (r0 + r3)|0;
+ r3 = r0 >>> 4;
+ r0 = r0 & 252645135;
+ r3 = r3 & 252645135;
+ r0 = (r0 + r3)|0;
+ r3 = r0 >>> 8;
+ r0 = r0 & 16711935;
+ r3 = r3 & 16711935;
+ r0 = (r0 + r3)|0;
+ r3 = r0 & 65535;
+ r0 = r0 >>> 16;
+ r0 = (r3 + r0)|0;
+ r3 = (r0 + 21)|0;
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = 0;
+ heap32[(g0+2)] = r3;
+ r3 = 905;
+ __ashldi3(i7);
+ r1 = r_g0;
+ r0 = (r3 - r0)|0;
+ r3 = r_g1 ^ 1048576;
+ r0 = r0 << 20;
+ r0 = r3 | r0;
+}
+else{
+ r1 = 0;
+ r0 = r1;
+}
+}
+else{
+ r1 = r0 >>> 3;
+ r3 = r1 & 524288;
+ r1 = r0 & 4194303;
+ r0 = r3 | 2146435072;
+}
+}
+else{
+ r0 = r1 >>> 3;
+ r1 = r1 << 29;
+ r0 = (r0 + 939524096)|0;
+}
+ r3 = sp + -8;
+ r3 = r3 >> 2;
+ r0 = r0 | r2;
+ heap32[(fp+-2)] = r1;
+ heap32[(r3+1)] = r0;
+ f0 = llvm_readDouble((sp+-8));
+ f_g0 = f0;
+ return;
+}
+
+function __fixdfsi(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = sp + 0;
+ r0 = r0 >> 2;
+ r0 = heap32[(r0+1)];
+ r1 = r0 >>> 20;
+ r1 = r1 & 2047;
+ r2 = r0 & 1048575;
+ r3 = -1;
+ r4 = 1;
+ r5 = (r1 + -1023)|0;
+ r0 = r0 < 0 ? r3 : r4;
+ r3 = heap32[(fp)];
+ r2 = r2 | 1048576;
+ if(uint(r5) >uint(51)) //_LBB843_2
+{
+ if(r5 <0) //_LBB843_5
+{
+ r0 = 0;
+ r_g0 = r0;
+ return;
+}
+else{
+ r1 = (r1 + -1075)|0;
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r2;
+ heap32[(g0+2)] = r1;
+ __ashldi3(i7);
+}
+}
+else{
+ r5 = 1075;
+ r1 = (r5 - r1)|0;
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r2;
+ heap32[(g0+2)] = r1;
+ __lshrdi3(i7);
+}
+ heap32[(g0)] = r_g0;
+ heap32[(g0+1)] = r_g1;
+ heap32[(g0+2)] = r0;
+ heap32[(g0+3)] = r0;
+ __muldi3(i7);
+ return;
+}
+
+function __floatsidf(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var f0;
+var __label__ = 0;
+ i7 = sp + -24;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ if(r0 !=0) //_LBB844_2
+{
+ r1 = r0 >> 31;
+ r2 = (r0 + r1)|0;
+ r1 = r2 ^ r1;
+ r2 = r1 >>> 1;
+ r2 = r1 | r2;
+ r3 = r2 >>> 2;
+ r2 = r2 | r3;
+ r3 = r2 >>> 4;
+ r2 = r2 | r3;
+ r3 = r2 >>> 8;
+ r2 = r2 | r3;
+ r3 = r2 >>> 16;
+ r2 = r2 | r3;
+ r3 = r2 ^ -1;
+ r4 = 1431655765;
+ r3 = r3 >>> 1;
+ r2 = r4 & (~r2);
+ r3 = r3 & 1431655765;
+ r2 = (r2 + r3)|0;
+ r3 = r2 >>> 2;
+ r2 = r2 & 858993459;
+ r3 = r3 & 858993459;
+ r2 = (r2 + r3)|0;
+ r3 = r2 >>> 4;
+ r2 = r2 & 252645135;
+ r3 = r3 & 252645135;
+ r2 = (r2 + r3)|0;
+ r3 = r2 >>> 8;
+ r2 = r2 & 16711935;
+ r3 = r3 & 16711935;
+ r2 = (r2 + r3)|0;
+ r3 = r2 & 65535;
+ r2 = r2 >>> 16;
+ r4 = 31;
+ r2 = (r3 + r2)|0;
+ r3 = 52;
+ r4 = (r4 - r2)|0;
+ r3 = (r3 - r4)|0;
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = 0;
+ heap32[(g0+2)] = r3;
+ r1 = 1054;
+ __ashldi3(i7);
+ r1 = (r1 - r2)|0;
+ r2 = r_g1 ^ 1048576;
+ r1 = r1 << 20;
+ r4 = sp + -8;
+ r1 = (r2 + r1)|0;
+ r0 = r0 & -2147483648;
+ r2 = r4 >> 2;
+ r0 = r1 | r0;
+ heap32[(fp+-2)] = r_g0;
+ heap32[(r2+1)] = r0;
+ f0 = llvm_readDouble((sp+-8));
+ f_g0 = f0;
+ return;
+}
+else{
+ f0 = 0;
+ f_g0 = f0;
+ return;
+}
+}
+
+function __floatunsidf(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var f0;
+var __label__ = 0;
+ i7 = sp + -24;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ if(r0 !=0) //_LBB845_2
+{
+ r1 = r0 >>> 1;
+ r1 = r0 | r1;
+ r2 = r1 >>> 2;
+ r1 = r1 | r2;
+ r2 = r1 >>> 4;
+ r1 = r1 | r2;
+ r2 = r1 >>> 8;
+ r1 = r1 | r2;
+ r2 = r1 >>> 16;
+ r1 = r1 | r2;
+ r2 = r1 ^ -1;
+ r3 = 1431655765;
+ r2 = r2 >>> 1;
+ r1 = r3 & (~r1);
+ r2 = r2 & 1431655765;
+ r1 = (r1 + r2)|0;
+ r2 = r1 >>> 2;
+ r1 = r1 & 858993459;
+ r2 = r2 & 858993459;
+ r1 = (r1 + r2)|0;
+ r2 = r1 >>> 4;
+ r1 = r1 & 252645135;
+ r2 = r2 & 252645135;
+ r1 = (r1 + r2)|0;
+ r2 = r1 >>> 8;
+ r1 = r1 & 16711935;
+ r2 = r2 & 16711935;
+ r1 = (r1 + r2)|0;
+ r2 = r1 & 65535;
+ r1 = r1 >>> 16;
+ r3 = 31;
+ r1 = (r2 + r1)|0;
+ r2 = 52;
+ r3 = (r3 - r1)|0;
+ r2 = (r2 - r3)|0;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = 0;
+ heap32[(g0+2)] = r2;
+ r0 = 1054;
+ __ashldi3(i7);
+ r0 = (r0 - r1)|0;
+ r1 = sp + -8;
+ r3 = r_g1 ^ 1048576;
+ r0 = r0 << 20;
+ r1 = r1 >> 2;
+ r0 = (r3 + r0)|0;
+ heap32[(fp+-2)] = r_g0;
+ heap32[(r1+1)] = r0;
+ f0 = llvm_readDouble((sp+-8));
+ f_g0 = f0;
+ return;
+}
+else{
+ f0 = 0;
+ f_g0 = f0;
+ return;
+}
+}
+
+function __truncdfsf2(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var f0;
+var __label__ = 0;
+ i7 = sp + -24;var g0 = i7>>2; // save stack
+ r0 = sp + 0;
+ r0 = r0 >> 2;
+ r0 = heap32[(r0+1)];
+ r1 = r0 & 2147483647;
+ r2 = heap32[(fp)];
+ r3 = (r1 + -940572672)|0;
+ r4 = (r1 + -1206910976)|0;
+_1: do {
+ if(uint(r3) >=uint(r4)) //_LBB846_6
+{
+ r3 = 0;
+ r4 = 2146435072;
+ r5 = r2 == r3;
+ r4 = uint(r1) < uint(r4);
+ r4 = r1 == 2146435072 ? r5 : r4;
+ if(r4 != 0) //_LBB846_8
+{
+ r4 = 1206910976;
+ r4 = uint(r1) < uint(r4);
+ r4 = r1 == 1206910976 ? r5 : r4;
+ if(r4 != 0) //_LBB846_10
+{
+ r4 = 897;
+ r1 = r1 >>> 20;
+ r1 = (r4 - r1)|0;
+ if(r1 <53) //_LBB846_12
+{
+ r4 = r0 & 1048575;
+ r4 = r4 | 1048576;
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = r4;
+ heap32[(g0+2)] = r1;
+ __lshrdi3(i7);
+ r5 = r_g0;
+ r6 = r_g1;
+ r7 = 64;
+ r1 = (r7 - r1)|0;
+ heap32[(g0)] = r2;
+ heap32[(g0+1)] = r4;
+ heap32[(g0+2)] = r1;
+ __ashldi3(i7);
+ r1 = r_g0 | r_g1;
+ r1 = r1 != r3;
+ r1 = r1 & 1;
+ r2 = r5 & 536870911;
+ r4 = r5 >>> 29;
+ r5 = r6 << 3;
+ r1 = r1 | r2;
+ r2 = r4 | r5;
+ if(uint(r1) <uint(268435457)) //_LBB846_14
+{
+ r1 = r1 ^ 268435456;
+ r3 = r1 | r3;
+ if(r3 ==0) //_LBB846_16
+{
+ r3 = r2 & 1;
+ r3 = (r3 + r2)|0;
+}
+else{
+ r3 = r2;
+}
+}
+else{
+ r3 = (r2 + 1)|0;
+}
+}
+else{
+break _1;
+}
+}
+else{
+ r3 = 2139095040;
+}
+}
+else{
+ r1 = r2 & 4194303;
+ r3 = r1 | 2143289344;
+}
+}
+else{
+ r1 = r2 >>> 29;
+ r3 = r0 << 3;
+ r1 = r1 | r3;
+ r2 = r2 & 536870911;
+ if(uint(r2) <uint(268435457)) //_LBB846_3
+{
+ r3 = (r1 + 1073741824)|0;
+ r1 = 0;
+ r2 = r2 ^ 268435456;
+ r1 = r2 | r1;
+ if(r1 ==0) //_LBB846_5
+{
+ r1 = r3 & 1;
+ r3 = (r1 + r3)|0;
+}
+}
+else{
+ r3 = (r1 + 1073741825)|0;
+}
+}
+} while(0);
+ r0 = r0 & -2147483648;
+ r0 = r3 | r0;
+ heap32[(fp+-1)] = r0;
+ f0 = heapFloat[(fp+-1)];
+ f_g0 = f0;
+ return;
+}
+
+function __fixunsdfsi(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = sp + 0;
+ r0 = r0 >> 2;
+ r0 = heap32[(r0+1)];
+ r1 = r0 >>> 20;
+ r1 = r1 & 2047;
+ r2 = (r1 + -1023)|0;
+if(!(r2 <0)) //_LBB847_3
+{
+if(!(r0 <0)) //_LBB847_3
+{
+ r2 = heap32[(fp)];
+ r2 = r2 >>> 21;
+ r0 = r0 << 11;
+ r0 = r2 | r0;
+ r2 = 1054;
+ r0 = r0 | -2147483648;
+ r1 = (r2 - r1)|0;
+ r0 = r0 >>> r1;
+ r_g0 = r0;
+ return;
+}
+}
+ r0 = 0;
+ r_g0 = r0;
+ return;
+}
+
+function __floatundisf(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var f0;
+var __label__ = 0;
+ i7 = sp + -24;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = heap32[(fp+1)];
+ r2 = r0 | r1;
+ if(r2 ==0) //_LBB848_12
+{
+ f0 = 0;
+ f_g0 = f0;
+ return;
+}
+else{
+ r2 = r0 >>> 1;
+ r3 = r1 >>> 1;
+ r2 = r0 | r2;
+ r3 = r1 | r3;
+ r4 = r2 >>> 2;
+ r5 = r3 >>> 2;
+ r2 = r2 | r4;
+ r3 = r3 | r5;
+ r4 = r2 >>> 4;
+ r5 = r3 >>> 4;
+ r2 = r2 | r4;
+ r3 = r3 | r5;
+ r4 = r2 >>> 8;
+ r5 = r3 >>> 8;
+ r2 = r2 | r4;
+ r3 = r3 | r5;
+ r4 = r2 >>> 16;
+ r5 = r3 >>> 16;
+ r2 = r2 | r4;
+ r3 = r3 | r5;
+ r4 = r2 ^ -1;
+ r5 = 1431655765;
+ r6 = r3 ^ -1;
+ r4 = r4 >>> 1;
+ r6 = r6 >>> 1;
+ r2 = r5 & (~r2);
+ r4 = r4 & 1431655765;
+ r2 = (r2 + r4)|0;
+ r3 = r5 & (~r3);
+ r4 = r6 & 1431655765;
+ r3 = (r3 + r4)|0;
+ r4 = r2 >>> 2;
+ r5 = r3 >>> 2;
+ r2 = r2 & 858993459;
+ r4 = r4 & 858993459;
+ r2 = (r2 + r4)|0;
+ r3 = r3 & 858993459;
+ r4 = r5 & 858993459;
+ r3 = (r3 + r4)|0;
+ r4 = r2 >>> 4;
+ r5 = r3 >>> 4;
+ r2 = r2 & 252645135;
+ r4 = r4 & 252645135;
+ r2 = (r2 + r4)|0;
+ r3 = r3 & 252645135;
+ r4 = r5 & 252645135;
+ r3 = (r3 + r4)|0;
+ r4 = r2 >>> 8;
+ r5 = r3 >>> 8;
+ r2 = r2 & 16711935;
+ r4 = r4 & 16711935;
+ r2 = (r2 + r4)|0;
+ r3 = r3 & 16711935;
+ r4 = r5 & 16711935;
+ r3 = (r3 + r4)|0;
+ r4 = r2 & 65535;
+ r2 = r2 >>> 16;
+ r2 = (r4 + r2)|0;
+ r4 = r3 & 65535;
+ r3 = r3 >>> 16;
+ r3 = (r4 + r3)|0;
+ r2 = (r2 + 32)|0;
+ r4 = 64;
+ r2 = r1 != 0 ? r3 : r2;
+ r3 = 63;
+ r4 = (r4 - r2)|0;
+ r2 = (r3 - r2)|0;
+ if(r4 <25) //_LBB848_10
+{
+ r3 = 24;
+ r3 = (r3 - r4)|0;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = r3;
+ __ashldi3(i7);
+ r1 = r_g0;
+}
+else{
+ if(r4 ==25) //_LBB848_5
+{
+ r1 = r1 << 1;
+ r3 = r0 >>> 31;
+ r0 = r0 << 1;
+ r1 = r1 | r3;
+}
+else{
+ if(r4 !=26) //_LBB848_6
+{
+ r3 = (r4 + -26)|0;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ heap32[(g0+2)] = r3;
+ __lshrdi3(i7);
+ r3 = r_g0;
+ r5 = r_g1;
+ r6 = 90;
+ r6 = (r6 - r4)|0;
+ heap32[(g0)] = -1;
+ heap32[(g0+1)] = -1;
+ heap32[(g0+2)] = r6;
+ __lshrdi3(i7);
+ r0 = r_g0 & r0;
+ r1 = r_g1 & r1;
+ r0 = r0 | r1;
+ r1 = 0;
+ r0 = r0 != r1;
+ r0 = r0 & 1;
+ r0 = r0 | r3;
+ r1 = r5;
+}
+}
+ r3 = r0 >>> 2;
+ r3 = r3 & 1;
+ r0 = r3 | r0;
+ r3 = (r0 + 1)|0;
+ r5 = 1;
+ r6 = 0;
+ r0 = uint(r3) < uint(r0) ? r5 : r6;
+ r0 = r3 == 0 ? r5 : r0;
+ r0 = (r1 + r0)|0;
+ r1 = r3 >>> 2;
+ r5 = r0 << 30;
+ r1 = r1 | r5;
+ r5 = r1 & 16777216;
+ if(r5 !=0) //_LBB848_9
+{
+ r1 = r3 >>> 3;
+ r0 = r0 << 29;
+ r1 = r1 | r0;
+ r2 = r4;
+}
+}
+ r0 = r2 << 23;
+ r0 = (r0 + 1065353216)|0;
+ r1 = r1 & 8388607;
+ r0 = r0 | r1;
+ heap32[(fp+-1)] = r0;
+ f0 = heapFloat[(fp+-1)];
+ f_g0 = f0;
+ return;
+}
+}
+
+function __floatdisf(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var f0;
+var __label__ = 0;
+ i7 = sp + -24;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = heap32[(fp+1)];
+ r2 = r0 | r1;
+ if(r2 ==0) //_LBB849_12
+{
+ f0 = 0;
+ f_g0 = f0;
+ return;
+}
+else{
+ r2 = r1 >> 31;
+ r1 = r2 ^ r1;
+ r0 = r2 ^ r0;
+ r3 = 1;
+ r4 = 0;
+ r5 = (r0 - r2)|0;
+ r1 = (r1 - r2)|0;
+ r0 = uint(r0) < uint(r2) ? r3 : r4;
+ r0 = (r1 - r0)|0;
+ r1 = r5 >>> 1;
+ r6 = r0 >>> 1;
+ r1 = r5 | r1;
+ r6 = r0 | r6;
+ r7 = r1 >>> 2;
+ r8 = r6 >>> 2;
+ r1 = r1 | r7;
+ r6 = r6 | r8;
+ r7 = r1 >>> 4;
+ r8 = r6 >>> 4;
+ r1 = r1 | r7;
+ r6 = r6 | r8;
+ r7 = r1 >>> 8;
+ r8 = r6 >>> 8;
+ r1 = r1 | r7;
+ r6 = r6 | r8;
+ r7 = r1 >>> 16;
+ r8 = r6 >>> 16;
+ r1 = r1 | r7;
+ r6 = r6 | r8;
+ r7 = r1 ^ -1;
+ r8 = 1431655765;
+ r9 = r6 ^ -1;
+ r7 = r7 >>> 1;
+ r9 = r9 >>> 1;
+ r1 = r8 & (~r1);
+ r7 = r7 & 1431655765;
+ r1 = (r1 + r7)|0;
+ r6 = r8 & (~r6);
+ r7 = r9 & 1431655765;
+ r6 = (r6 + r7)|0;
+ r7 = r1 >>> 2;
+ r8 = r6 >>> 2;
+ r1 = r1 & 858993459;
+ r7 = r7 & 858993459;
+ r1 = (r1 + r7)|0;
+ r6 = r6 & 858993459;
+ r7 = r8 & 858993459;
+ r6 = (r6 + r7)|0;
+ r7 = r1 >>> 4;
+ r8 = r6 >>> 4;
+ r1 = r1 & 252645135;
+ r7 = r7 & 252645135;
+ r1 = (r1 + r7)|0;
+ r6 = r6 & 252645135;
+ r7 = r8 & 252645135;
+ r6 = (r6 + r7)|0;
+ r7 = r1 >>> 8;
+ r8 = r6 >>> 8;
+ r1 = r1 & 16711935;
+ r7 = r7 & 16711935;
+ r1 = (r1 + r7)|0;
+ r6 = r6 & 16711935;
+ r7 = r8 & 16711935;
+ r6 = (r6 + r7)|0;
+ r7 = r1 & 65535;
+ r1 = r1 >>> 16;
+ r1 = (r7 + r1)|0;
+ r7 = r6 & 65535;
+ r6 = r6 >>> 16;
+ r6 = (r7 + r6)|0;
+ r1 = (r1 + 32)|0;
+ r7 = 64;
+ r1 = r0 != 0 ? r6 : r1;
+ r6 = 63;
+ r7 = (r7 - r1)|0;
+ r1 = (r6 - r1)|0;
+ if(r7 <25) //_LBB849_10
+{
+ r3 = 24;
+ r3 = (r3 - r7)|0;
+ heap32[(g0)] = r5;
+ heap32[(g0+1)] = r0;
+ heap32[(g0+2)] = r3;
+ __ashldi3(i7);
+ r5 = r_g0;
+}
+else{
+ if(r7 ==25) //_LBB849_5
+{
+ r0 = r0 << 1;
+ r6 = r5 >>> 31;
+ r5 = r5 << 1;
+ r0 = r0 | r6;
+}
+else{
+ if(r7 !=26) //_LBB849_6
+{
+ r6 = (r7 + -26)|0;
+ heap32[(g0)] = r5;
+ heap32[(g0+1)] = r0;
+ heap32[(g0+2)] = r6;
+ __lshrdi3(i7);
+ r6 = r_g0;
+ r8 = r_g1;
+ r9 = 90;
+ r9 = (r9 - r7)|0;
+ heap32[(g0)] = -1;
+ heap32[(g0+1)] = -1;
+ heap32[(g0+2)] = r9;
+ __lshrdi3(i7);
+ r5 = r_g0 & r5;
+ r0 = r_g1 & r0;
+ r0 = r5 | r0;
+ r0 = r0 != r4;
+ r0 = r0 & 1;
+ r5 = r0 | r6;
+ r0 = r8;
+}
+}
+ r6 = r5 >>> 2;
+ r6 = r6 & 1;
+ r5 = r6 | r5;
+ r6 = (r5 + 1)|0;
+ r5 = uint(r6) < uint(r5) ? r3 : r4;
+ r5 = r6 == 0 ? r3 : r5;
+ r0 = (r0 + r5)|0;
+ r5 = r6 >>> 2;
+ r3 = r0 << 30;
+ r5 = r5 | r3;
+ r3 = r5 & 16777216;
+ if(r3 !=0) //_LBB849_9
+{
+ r0 = r0 >> 2;
+ r5 = r5 >>> 1;
+ r0 = r0 << 31;
+ r5 = r5 | r0;
+ r1 = r7;
+}
+}
+ r0 = r1 << 23;
+ r1 = r5 & 8388607;
+ r2 = r2 & -2147483648;
+ r1 = r1 | r2;
+ r0 = (r0 + 1065353216)|0;
+ r0 = r1 | r0;
+ heap32[(fp+-1)] = r0;
+ f0 = heapFloat[(fp+-1)];
+ f_g0 = f0;
+ return;
+}
+}
+
+function _GLOBAL__I__mandreel_create_tcp_socket(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = mandreel_flash_tcp_onError__index__;
+ r1 = _ZZL32_mandreel_init_tcp_socket_librayvE47s_723478567_mandreel_mandreel_flash_tcp_onError;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r1;
+ iMandreelRegisterExternalCallback(i7);
+ return;
+}
+
+function mandreel_flash_tcp_onConnect(sp)
+{
+ var i7;
+ var fp = sp>>2;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ return;
+}
+
+function mandreel_flash_tcp_onError(sp)
+{
+ var i7;
+ var fp = sp>>2;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ return;
+}
+
+function mandreel_flash_tcp_receive_callbak(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+var __label__ = 0;
+ i7 = sp + -32784;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+ r1 = heap32[(fp)];
+ r2 = heapU8[r0];
+_1: do {
+ if(r2 !=0) //_LBB853_2
+{
+ r3 = (r0 + 1)|0;
+ r4 = 0;
+_3: while(true){
+ r2 = (r4 + 1)|0;
+ r5 = heapU8[r3+r4];
+ r4 = r2;
+ if(r5 !=0) //_LBB853_3
+{
+continue _3;
+}
+else{
+break _1;
+}
+}
+}
+else{
+ r2 = 0;
+}
+} while(0);
+ r3 = sp + -32768;
+ heap32[(g0)] = r0;
+ heap32[(g0+1)] = r2;
+ heap32[(g0+2)] = r3;
+ heap32[(g0+3)] = 32768;
+ r0 = _ZL10s_aSockets;
+ r2 = 0;
+ _ZN12mandreel_b6410b64_decodeEPKcjPvj(i7);
+ r4 = r_g0;
+ r6 = _ZL10s_aSockets;
+_7: while(true){
+ if(uint(r2) <uint(8)) //_LBB853_5
+{
+ r5 = (r2 * 8198)|0;
+ r5 = r5 << 2;
+ r5 = (r6 + r5)|0;
+ r5 = r5 >> 2;
+ r5 = heap32[(r5+8196)];
+ if(r5 !=r1) //_LBB853_7
+{
+ r2 = (r2 + 1)|0;
+ r0 = (r0 + 32792)|0;
+continue _7;
+}
+else{
+__label__ = 9;
+break _7;
+}
+}
+else{
+__label__ = 8;
+break _7;
+}
+}
+if (__label__ == 8){
+ r0 = 0;
+}
+ r1 = r0 >> 2;
+ r2 = heap32[(r1+8194)];
+ if(r4 >0) //_LBB853_12
+{
+ r5 = r4;
+_16: while(true){
+ r6 = (r2 + 1)|0;
+ r5 = (r5 + -1)|0;
+ r6 = r6 & 32767;
+ r7 = (r3 + 1)|0;
+ r3 = heapU8[r3];
+ heap8[r0+r2] = r3;
+ r3 = r7;
+ r2 = r6;
+if(!(r5 !=0)) //_LBB853_13
+{
+break _16;
+}
+}
+ r2 = r6;
+}
+ heap32[(r1+8194)] = r2;
+ r0 = heap32[(r1+8192)];
+ r0 = (r0 + r4)|0;
+ heap32[(r1+8192)] = r0;
+ return;
+}
+
+function _GLOBAL__D__ZN8OpenGLES12OpenGLESUtil15getCurrentErrorEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ heap32[(g0)] = 0;
+ _Z41__static_initialization_and_destruction_0ii(i7);
+ return;
+}
+
+function _ZNSt5dequeIjSaIjEE5eraseESt15__rw_deque_iterIjiPjRjS0_ES5_(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+ var r13;
+ var r14;
+ var r15;
+ var r16;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+4)];
+ r0 = r0 >> 2;
+ r1 = heap32[(fp)];
+ r2 = heap32[(fp+1)];
+ r3 = heap32[(fp+2)];
+ r4 = heap32[(r0)];
+ r5 = heap32[(fp+3)];
+ r6 = heap32[(r0+1)];
+ r7 = r4 | r3;
+ if(r7 !=0) //_LBB855_2
+{
+ r7 = r6 >> 2;
+ r8 = (r6 - r5)|0;
+ r9 = r5 >> 2;
+ r8 = r8 << 3;
+ r9 = heap32[(r9)];
+ r7 = heap32[(r7)];
+ r7 = (r4 - r7)|0;
+ r8 = (r8 + -32)|0;
+ r9 = (r9 + 128)|0;
+ r9 = (r9 - r3)|0;
+ r7 = r7 >> 2;
+ r8 = r8 & -32;
+ r7 = (r7 + r8)|0;
+ r8 = r9 >> 2;
+ r7 = (r7 + r8)|0;
+}
+else{
+ r7 = (r4 - r3)|0;
+ r7 = r7 >> 2;
+}
+ r8 = r2 >> 2;
+ r9 = heap32[(r8)];
+ r10 = heap32[(r8+1)];
+ r11 = r3 | r9;
+ if(r11 !=0) //_LBB855_5
+{
+ r11 = (r5 - r10)|0;
+ r12 = r5 >> 2;
+ r13 = r10 >> 2;
+ r11 = r11 << 3;
+ r13 = heap32[(r13)];
+ r12 = heap32[(r12)];
+ r11 = (r11 + -32)|0;
+ r12 = (r3 - r12)|0;
+ r13 = (r13 + 128)|0;
+ r13 = (r13 - r9)|0;
+ r11 = r11 & -32;
+ r12 = r12 >> 2;
+ r11 = (r11 + r12)|0;
+ r12 = r13 >> 2;
+ r11 = (r11 + r12)|0;
+}
+else{
+ r11 = (r3 - r9)|0;
+ r11 = r11 >> 2;
+}
+ r2 = (r2 + 8)|0;
+ r12 = heap32[(r8+2)];
+ r13 = heap32[(r8+3)];
+ r14 = r12 | r4;
+ if(r14 !=0) //_LBB855_8
+{
+ r14 = (r13 - r6)|0;
+ r15 = r13 >> 2;
+ r16 = r6 >> 2;
+ r14 = r14 << 3;
+ r16 = heap32[(r16)];
+ r15 = heap32[(r15)];
+ r14 = (r14 + -32)|0;
+ r15 = (r12 - r15)|0;
+ r16 = (r16 + 128)|0;
+ r16 = (r16 - r4)|0;
+ r14 = r14 & -32;
+ r15 = r15 >> 2;
+ r14 = (r14 + r15)|0;
+ r15 = r16 >> 2;
+ r14 = (r14 + r15)|0;
+}
+else{
+ r14 = (r12 - r4)|0;
+ r14 = r14 >> 2;
+}
+ if(r11 >=r14) //_LBB855_36
+{
+ r0 = (r5 + 4)|0;
+ r9 = r3;
+_15: while(true){
+ r10 = r4 | r12;
+ if(r10 !=0) //_LBB855_44
+{
+ r10 = r6 >> 2;
+ r11 = (r6 - r13)|0;
+ r14 = r13 >> 2;
+ r11 = r11 << 3;
+ r14 = heap32[(r14)];
+ r10 = heap32[(r10)];
+ r10 = (r4 - r10)|0;
+ r11 = (r11 + -32)|0;
+ r14 = (r14 + 128)|0;
+ r14 = (r14 - r12)|0;
+ r10 = r10 >> 2;
+ r11 = r11 & -32;
+ r10 = (r10 + r11)|0;
+ r11 = r14 >> 2;
+ r10 = (r10 + r11)|0;
+}
+else{
+ r10 = (r4 - r12)|0;
+ r10 = r10 >> 2;
+}
+ if(r10 !=0) //_LBB855_37
+{
+ r10 = r4 >> 2;
+ r11 = r9 >> 2;
+ r10 = heap32[(r10)];
+ r4 = (r4 + 4)|0;
+ r14 = r6 >> 2;
+ heap32[(r11)] = r10;
+ r10 = heap32[(r14)];
+ r10 = (r10 + 128)|0;
+ if(r4 ==r10) //_LBB855_39
+{
+ r6 = (r6 + 4)|0;
+ r4 = heap32[(r14+1)];
+}
+ r10 = r0 >> 2;
+ r9 = (r9 + 4)|0;
+ r11 = heap32[(r10+-1)];
+ r11 = (r11 + 128)|0;
+if(!(r9 !=r11)) //_LBB855_42
+{
+ r9 = heap32[(r10)];
+ r0 = (r0 + 4)|0;
+}
+}
+else{
+break _15;
+}
+}
+_27: do {
+if(!(r7 ==0)) //_LBB855_59
+{
+ r0 = heap32[(r8+2)];
+_29: while(true){
+ r0 = (r0 + -4)|0;
+ heap32[(r8+2)] = r0;
+ r4 = heap32[(r8+3)];
+ r6 = heap32[(r8+1)];
+ if(r6 !=r4) //_LBB855_51
+{
+__label__ = 45;
+}
+else{
+ r6 = heap32[(r8)];
+ if(r6 !=r0) //_LBB855_51
+{
+__label__ = 45;
+}
+else{
+ r0 = r4 >> 2;
+ r4 = heap32[(r0)];
+__label__ = 47;
+}
+}
+if (__label__ == 45){
+ r4 = r4 >> 2;
+ r4 = heap32[(r4)];
+ if(r0 ==r4) //_LBB855_53
+{
+__label__ = 47;
+}
+else{
+__label__ = 46;
+}
+}
+_36: do {
+if (__label__ == 47){
+ heap32[(g0)] = r4;
+ _ZdlPv(i7);
+ r0 = heap32[(r8+3)];
+ r4 = heap32[(r8+1)];
+if(!(r4 !=r0)) //_LBB855_58
+{
+ r4 = heap32[(r8)];
+ r6 = heap32[(r8+2)];
+if(!(r4 !=r6)) //_LBB855_58
+{
+ r0 = heap32[(r8+4)];
+ r0 = (r0 + -4)|0;
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ heap32[(r8+2)] = 0;
+ heap32[(r8+3)] = r2;
+ heap32[(r8)] = 0;
+ heap32[(r8+1)] = r2;
+ r0 = 0;
+ heap32[(r8+4)] = 0;
+ heap32[(r8+5)] = 0;
+break _36;
+}
+}
+ r4 = r0 >> 2;
+ r6 = (r0 + -4)|0;
+ heap32[(r4)] = 0;
+ heap32[(r8+3)] = r6;
+ r0 = heap32[(r4+-1)];
+ r0 = (r0 + 128)|0;
+ heap32[(r8+2)] = r0;
+ heap32[(r8+3)] = r6;
+}
+} while(0);
+ r7 = (r7 + -1)|0;
+ if(r7 ==0) //_LBB855_59
+{
+break _27;
+}
+}
+}
+} while(0);
+ r0 = r1 >> 2;
+ heap32[(r0)] = r3;
+ heap32[(r0+1)] = r5;
+ return;
+}
+else{
+_44: while(true){
+ r12 = r9 | r3;
+ if(r12 !=0) //_LBB855_20
+{
+ r12 = r10 >> 2;
+ r13 = (r10 - r5)|0;
+ r11 = r5 >> 2;
+ r13 = r13 << 3;
+ r11 = heap32[(r11)];
+ r12 = heap32[(r12)];
+ r12 = (r9 - r12)|0;
+ r13 = (r13 + -32)|0;
+ r11 = (r11 + 128)|0;
+ r11 = (r11 - r3)|0;
+ r12 = r12 >> 2;
+ r13 = r13 & -32;
+ r12 = (r12 + r13)|0;
+ r13 = r11 >> 2;
+ r12 = (r12 + r13)|0;
+}
+else{
+ r12 = (r9 - r3)|0;
+ r12 = r12 >> 2;
+}
+ if(r12 !=0) //_LBB855_11
+{
+ r12 = r6 >> 2;
+ r13 = heap32[(r12)];
+ if(r4 ==r13) //_LBB855_13
+{
+ r4 = heap32[(r12+-1)];
+ r6 = (r6 + -4)|0;
+ r4 = (r4 + 128)|0;
+}
+ r12 = r5 >> 2;
+ r4 = (r4 + -4)|0;
+ r13 = heap32[(r12)];
+ if(r3 ==r13) //_LBB855_16
+{
+ r3 = heap32[(r12+-1)];
+ r5 = (r5 + -4)|0;
+ r3 = (r3 + 128)|0;
+}
+ r12 = r3 >> 2;
+ r3 = (r3 + -4)|0;
+ r13 = r4 >> 2;
+ r12 = heap32[(r12+-1)];
+ heap32[(r13)] = r12;
+}
+else{
+break _44;
+}
+}
+_58: do {
+if(!(r7 ==0)) //_LBB855_35
+{
+ r3 = heap32[(r8)];
+_60: while(true){
+ r3 = (r3 + 4)|0;
+ heap32[(r8)] = r3;
+ r4 = heap32[(r8+1)];
+ r5 = heap32[(r8+3)];
+ if(r4 !=r5) //_LBB855_27
+{
+__label__ = 24;
+}
+else{
+ r5 = r2 >> 2;
+ r5 = heap32[(r5)];
+ if(r3 !=r5) //_LBB855_27
+{
+__label__ = 24;
+}
+else{
+ r3 = r4 >> 2;
+ r4 = heap32[(r3)];
+__label__ = 26;
+}
+}
+if (__label__ == 24){
+ r4 = r4 >> 2;
+ r4 = heap32[(r4)];
+ r5 = (r4 + 128)|0;
+ if(r3 ==r5) //_LBB855_29
+{
+__label__ = 26;
+}
+else{
+__label__ = 25;
+}
+}
+_67: do {
+if (__label__ == 26){
+ heap32[(g0)] = r4;
+ _ZdlPv(i7);
+ r3 = heap32[(r8+1)];
+ r4 = heap32[(r8+3)];
+if(!(r3 !=r4)) //_LBB855_34
+{
+ r4 = heap32[(r8)];
+ r5 = heap32[(r8+2)];
+if(!(r4 !=r5)) //_LBB855_34
+{
+ r3 = heap32[(r8+4)];
+ r3 = (r3 + -4)|0;
+ heap32[(g0)] = r3;
+ _ZdlPv(i7);
+ heap32[(r8+2)] = 0;
+ heap32[(r8+3)] = r2;
+ heap32[(r8)] = 0;
+ heap32[(r8+1)] = r2;
+ r3 = 0;
+ heap32[(r8+4)] = 0;
+ heap32[(r8+5)] = 0;
+break _67;
+}
+}
+ r4 = r3 >> 2;
+ r5 = (r3 + 4)|0;
+ heap32[(r4)] = 0;
+ heap32[(r8+1)] = r5;
+ r3 = heap32[(r4+1)];
+ heap32[(r8)] = r3;
+ heap32[(r8+1)] = r5;
+}
+} while(0);
+ r7 = (r7 + -1)|0;
+ if(r7 ==0) //_LBB855_35
+{
+break _58;
+}
+}
+}
+} while(0);
+ r1 = r1 >> 2;
+ r2 = heap32[(r0)];
+ heap32[(r1)] = r2;
+ r2 = heap32[(r0+1)];
+ heap32[(r1+1)] = r2;
+ return;
+}
+}
+
+function _Z41__static_initialization_and_destruction_0ii(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+var __label__ = 0;
+ i7 = sp + -80;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ if(r0 ==0) //_LBB856_16
+{
+ r0 = _ZL13s_fifo_errors;
+ r1 = r0 >> 2;
+ r2 = heap32[(r1+2)];
+ r3 = sp + -24;
+ heap32[(fp+-6)] = r2;
+ r2 = r3 >> 2;
+ r4 = heap32[(r1+3)];
+ heap32[(r2+1)] = r4;
+ r2 = heap32[(r1)];
+ r1 = heap32[(r1+1)];
+ r4 = sp + -32;
+}
+else{
+ if(r0 !=1) //_LBB856_17
+{
+ return;
+}
+else{
+ r0 = sp + -56;
+ r1 = r0 >> 2;
+ r2 = (r0 + 8)|0;
+ heap32[(r1+2)] = 0;
+ heap32[(r1+3)] = r2;
+ heap32[(fp+-14)] = 0;
+ heap32[(r1+1)] = r2;
+ r2 = _ZL13s_fifo_errors;
+ heap32[(r1+4)] = 0;
+ r3 = r2 >> 2;
+ heap32[(r1+5)] = 0;
+ r4 = (r2 + 8)|0;
+ heap32[(r3+2)] = 0;
+ heap32[(r3+3)] = r4;
+ heap32[(r3)] = 0;
+ heap32[(r3+1)] = r4;
+ r5 = 0;
+ heap32[(r3+4)] = 0;
+ heap32[(r3+5)] = 0;
+ r6 = r4;
+ r7 = r5;
+_7: while(true){
+ if(r7 !=0) //_LBB856_12
+{
+ r8 = (r2 + 8)|0;
+ r8 = (r8 - r6)|0;
+ r9 = r6 >> 2;
+ r8 = r8 << 3;
+ r9 = heap32[(r9)];
+ r10 = 0;
+ r11 = heap32[(r3+2)];
+ r10 = (r10 - r11)|0;
+ r8 = (r8 + -32)|0;
+ r9 = (r9 + 128)|0;
+ r9 = (r9 - r7)|0;
+ r10 = r10 >> 2;
+ r8 = r8 & -32;
+ r8 = (r10 + r8)|0;
+ r9 = r9 >> 2;
+ r8 = (r8 + r9)|0;
+}
+else{
+ r8 = 0;
+ r8 = (r8 - r7)|0;
+ r8 = r8 >> 2;
+}
+ if(r8 !=0) //_LBB856_3
+{
+ r8 = r4 >> 2;
+ r9 = heap32[(r8)];
+ if(r5 ==r9) //_LBB856_5
+{
+ r5 = heap32[(r8+-1)];
+ r4 = (r4 + -4)|0;
+ r5 = (r5 + 128)|0;
+}
+ r8 = r6 >> 2;
+ r5 = (r5 + -4)|0;
+ r9 = heap32[(r8)];
+ if(r7 ==r9) //_LBB856_8
+{
+ r7 = heap32[(r8+-1)];
+ r6 = (r6 + -4)|0;
+ r7 = (r7 + 128)|0;
+}
+ r8 = r7 >> 2;
+ r7 = (r7 + -4)|0;
+ r9 = r5 >> 2;
+ r8 = heap32[(r8+-1)];
+ heap32[(r9)] = r8;
+}
+else{
+break _7;
+}
+}
+ r2 = heap32[(r1+2)];
+ r3 = sp + -8;
+ heap32[(fp+-2)] = r2;
+ r2 = r3 >> 2;
+ r4 = heap32[(r1+3)];
+ heap32[(r2+1)] = r4;
+ r2 = heap32[(fp+-14)];
+ r1 = heap32[(r1+1)];
+ r4 = sp + -16;
+}
+}
+ heap32[(g0)] = r4;
+ heap32[(g0+1)] = r0;
+ heap32[(g0+2)] = r2;
+ heap32[(g0+3)] = r1;
+ heap32[(g0+4)] = r3;
+ _ZNSt5dequeIjSaIjEE5eraseESt15__rw_deque_iterIjiPjRjS0_ES5_(i7);
+ return;
+}
+
+function _GLOBAL__I__ZN5my_gl14glAttachShaderEjj(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = _ZN5my_glL9m_contextE;
+ r1 = r0 >> 2;
+ heap32[(r1+62)] = 0;
+ heap32[(r1+63)] = 0;
+ heap32[(r1+64)] = 0;
+ heap32[(r1+65)] = 0;
+ heap32[(r1+66)] = 0;
+ heap32[(r1+67)] = 0;
+ heap32[(r1+78)] = 0;
+ heap32[(r1+79)] = 0;
+ heap32[(r1+74)] = 0;
+ heap32[(r1+77)] = 0;
+ heap32[(r1+76)] = 0;
+ heap32[(r1+75)] = 0;
+ _ZN4__rw9__rb_treeIjSt4pairIKjPN5my_gl12TIndexBufferEENS_11__select1stIS6_jEESt4lessIjESaIS6_EE11_C_get_linkEv(i7);
+ r2 = r_g0;
+ r3 = r2 >> 2;
+ heap32[(r1+78)] = r2;
+ heap32[(r3+1)] = 0;
+ heap32[(r3+3)] = r2;
+ heap32[(r3+2)] = r2;
+ heap32[(r1)] = 0;
+ heap32[(r1+3)] = 0;
+ heap32[(r1+61)] = 0;
+ heap32[(r1+4)] = 0;
+ heap32[(r1+68)] = 0;
+ heap32[(r1+69)] = 0;
+ r2 = _ZL26s_mandreel_internal_height;
+ r3 = _ZL25s_mandreel_internal_width;
+ heap32[(r1+1)] = 0;
+ r2 = r2 >> 2;
+ heap32[(r1+2)] = 1;
+ r3 = r3 >> 2;
+ r2 = heap32[(r2)];
+ r3 = heap32[(r3)];
+ heap32[(r1+70)] = 0;
+ heap32[(r1+71)] = 0;
+ r4 = 224;
+ heap32[(r1+72)] = r3;
+ heap32[(r1+73)] = r2;
+ r2 = 0;
+_2: while(true){
+ r1 = (r4 + -1)|0;
+ r4 = (r0 - r4)|0;
+ heap8[r4+244] = r2;
+ r4 = r1;
+ if(r1 !=0) //_LBB857_2
+{
+continue _2;
+}
+else{
+break _2;
+}
+}
+ return;
+}
+
+function _GLOBAL__D__ZN5my_gl14glAttachShaderEjj(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+var __label__ = 0;
+ i7 = sp + -16;var g0 = i7>>2; // save stack
+ r0 = _ZN5my_glL9m_contextE;
+ r0 = r0 >> 2;
+ r1 = heap32[(r0+78)];
+_1: do {
+if(!(r1 ==0)) //_LBB858_26
+{
+ r2 = r1 >> 2;
+ r3 = heap32[(r0+79)];
+ if(r3 !=0) //_LBB858_5
+{
+ r1 = heap32[(r2+1)];
+ heap32[(g0)] = r1;
+ _ZN4__rw9__rb_treeIjSt4pairIKjPN5my_gl12TIndexBufferEENS_11__select1stIS6_jEESt4lessIjESaIS6_EE8_C_eraseEPNS_17__rw_rb_tree_nodeISB_S6_jS8_EE(i7);
+ r1 = heap32[(r0+78)];
+ r2 = r1 >> 2;
+ heap32[(r2+1)] = 0;
+ heap32[(r2+3)] = r1;
+ heap32[(r2+2)] = r1;
+ heap32[(r0+79)] = 0;
+}
+else{
+ r2 = heap32[(r2+2)];
+if(!(r2 ==r1)) //_LBB858_4
+{
+_6: while(true){
+ r3 = r2;
+ r4 = r3 >> 2;
+ r2 = heap32[(r4+3)];
+_8: do {
+ if(r2 !=0) //_LBB858_10
+{
+ r4 = r2 >> 2;
+ r4 = heap32[(r4+2)];
+ if(r4 ==0) //_LBB858_12
+{
+break _8;
+}
+else{
+__label__ = 8; //SET chanka
+_10: while(true){
+ r2 = r4;
+ r4 = r2 >> 2;
+ r4 = heap32[(r4+2)];
+ if(r4 !=0) //_LBB858_13
+{
+continue _10;
+}
+else{
+break _8;
+}
+}
+}
+}
+else{
+ r4 = heap32[(r4+1)];
+ r2 = r4 >> 2;
+ r2 = heap32[(r2+3)];
+ if(r3 ==r2) //_LBB858_9
+{
+_14: while(true){
+ r2 = r4;
+ r5 = r2 >> 2;
+ r4 = heap32[(r5+1)];
+ r6 = r4 >> 2;
+ r6 = heap32[(r6+3)];
+if(!(r2 ==r6)) //_LBB858_15
+{
+break _14;
+}
+}
+ r5 = heap32[(r5+3)];
+}
+else{
+ r5 = 0;
+ r2 = r3;
+}
+ if(r5 !=r4) //_LBB858_19
+{
+ r2 = r4;
+}
+}
+} while(0);
+ r4 = sp + -8;
+ heap32[(g0)] = r4;
+ heap32[(g0+1)] = r3;
+ _ZN4__rw9__rb_treeIjSt4pairIKjPN5my_gl12TIndexBufferEENS_11__select1stIS6_jEESt4lessIjESaIS6_EE5eraseENS_14__rw_tree_iterIS6_iPS6_RS6_NS_17__rw_rb_tree_nodeISB_S6_jS8_EEEE(i7);
+if(!(r2 !=r1)) //_LBB858_6
+{
+break _6;
+}
+}
+ r1 = heap32[(r0+78)];
+}
+}
+ r2 = r1 >> 2;
+ r3 = heap32[(r0+75)];
+ heap32[(r2+3)] = r3;
+ heap32[(r0+75)] = r1;
+ r1 = heap32[(r0+74)];
+if(!(r1 ==0)) //_LBB858_26
+{
+__label__ = 16; //SET chanka
+_23: while(true){
+ r2 = r1 >> 2;
+ r3 = heap32[(r2)];
+ heap32[(r0+74)] = r3;
+ r2 = heap32[(r2+2)];
+ heap32[(g0)] = r2;
+ _ZdlPv(i7);
+ heap32[(g0)] = r1;
+ _ZdlPv(i7);
+ r1 = heap32[(r0+74)];
+ if(r1 !=0) //_LBB858_23
+{
+continue _23;
+}
+else{
+break _1;
+}
+}
+}
+}
+} while(0);
+ r1 = heap32[(r0+65)];
+ r2 = heap32[(r0+66)];
+ r3 = (r2 - r1)|0;
+ r3 = r3 >> 5;
+ if(r3 !=0) //_LBB858_28
+{
+ r1 = (r2 + -32)|0;
+ heap32[(r0+66)] = r1;
+ r1 = (r2 + -28)|0;
+ heap32[(g0)] = r1;
+ _ZN4__rw9__rb_treeISsSt4pairIKSsiENS_11__select1stIS3_SsEESt4lessISsESaIS3_EED2Ev(i7);
+_31: do {
+if(!(r3 ==1)) //_LBB858_33
+{
+ r1 = (r3 + -1)|0;
+_33: while(true){
+ r2 = heap32[(r0+66)];
+ r3 = (r2 + -32)|0;
+ heap32[(r0+66)] = r3;
+ r2 = (r2 + -28)|0;
+ heap32[(g0)] = r2;
+ _ZN4__rw9__rb_treeISsSt4pairIKSsiENS_11__select1stIS3_SsEESt4lessISsESaIS3_EED2Ev(i7);
+ r1 = (r1 + -1)|0;
+if(!(r1 !=0)) //_LBB858_31
+{
+break _31;
+}
+}
+}
+} while(0);
+ r1 = heap32[(r0+65)];
+}
+ heap32[(g0)] = r1;
+ _ZdlPv(i7);
+ r1 = heap32[(r0+63)];
+ r2 = heap32[(r0+62)];
+ r3 = (r1 - r2)|0;
+ r4 = (r3 + 11)|0;
+if(!(uint(r4) <uint(23))) //_LBB858_37
+{
+ r3 = (r3 / -12)|0;
+ r3 = (r3 * 12)|0;
+ r1 = (r1 + r3)|0;
+ heap32[(r0+63)] = r1;
+}
+ heap32[(g0)] = r2;
+ _ZdlPv(i7);
+ return;
+}
+
+function imandreel_restore_glcontext(sp)
+{
+ var i7;
+ var fp = sp>>2;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ return;
+}
+
+function imandreel_viewport_resize(sp)
+{
+ var i7;
+ var fp = sp>>2;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ return;
+}
+
+function _ZN4__rw9__rb_treeIjSt4pairIKjPN5my_gl12TIndexBufferEENS_11__select1stIS6_jEESt4lessIjESaIS6_EE8_C_eraseEPNS_17__rw_rb_tree_nodeISB_S6_jS8_EE(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+if(!(r0 ==0)) //_LBB861_2
+{
+_2: while(true){
+ r1 = r0 >> 2;
+ r2 = heap32[(r1+3)];
+ heap32[(g0)] = r2;
+ r2 = _ZN5my_glL9m_contextE;
+ _ZN4__rw9__rb_treeIjSt4pairIKjPN5my_gl12TIndexBufferEENS_11__select1stIS6_jEESt4lessIjESaIS6_EE8_C_eraseEPNS_17__rw_rb_tree_nodeISB_S6_jS8_EE(i7);
+ r2 = r2 >> 2;
+ r3 = heap32[(r1+2)];
+ r4 = heap32[(r2+75)];
+ heap32[(r1+3)] = r4;
+ heap32[(r2+75)] = r0;
+ r0 = r3;
+ if(r3 !=0) //_LBB861_1
+{
+continue _2;
+}
+else{
+break _2;
+}
+}
+}
+ return;
+}
+
+function _ZN4__rw9__rb_treeISsSt4pairIKSsiENS_11__select1stIS3_SsEESt4lessISsESaIS3_EE8_C_eraseEPNS_17__rw_rb_tree_nodeIS8_S3_SsS5_EE(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+1)];
+if(!(r0 ==0)) //_LBB862_6
+{
+ r1 = heap32[(fp)];
+_3: while(true){
+ r2 = r0;
+ r3 = r2 >> 2;
+ r0 = heap32[(r3+3)];
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r0;
+ _ZN4__rw9__rb_treeISsSt4pairIKSsiENS_11__select1stIS3_SsEESt4lessISsESaIS3_EE8_C_eraseEPNS_17__rw_rb_tree_nodeIS8_S3_SsS5_EE(i7);
+ r4 = r1 >> 2;
+ r0 = heap32[(r3+2)];
+ r5 = heap32[(r4+1)];
+ heap32[(r3+3)] = r5;
+ r5 = heap32[(r3+4)];
+ r5 = (r5 + -12)|0;
+ r6 = _ZNSs11_C_null_refE;
+if(!(r5 ==r6)) //_LBB862_5
+{
+ r5 = r5 >> 2;
+ r6 = heap32[(r5)];
+ r7 = (r6 + -1)|0;
+ heap32[(r5)] = r7;
+if(!(r6 >0)) //_LBB862_5
+{
+ r5 = heap32[(r3+4)];
+ r5 = (r5 + -12)|0;
+ heap32[(g0)] = r5;
+ _ZdlPv(i7);
+}
+}
+ heap32[(r3+4)] = 0;
+ heap32[(r4+1)] = r2;
+ if(r0 !=0) //_LBB862_2
+{
+continue _3;
+}
+else{
+break _3;
+}
+}
+}
+ return;
+}
+
+function _ZN4__rw9__rb_treeISsSt4pairIKSsiENS_11__select1stIS3_SsEESt4lessISsESaIS3_EE5eraseENS_14__rw_tree_iterIS3_iPS3_RS3_NS_17__rw_rb_tree_nodeIS8_S3_SsS5_EEEESF_(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+ var r13;
+ var r14;
+ var r15;
+ var r16;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp+2)];
+ r1 = heap32[(fp+1)];
+ r0 = r0 >> 2;
+ r2 = r1 >> 2;
+ r3 = heap32[(r2+4)];
+ r4 = heap32[(r0)];
+ r5 = heap32[(fp)];
+ r6 = heap32[(fp+3)];
+ r7 = r3 >> 2;
+ r8 = heap32[(r7+2)];
+if(!(r4 !=r8)) //_LBB863_3
+{
+if(!(r3 !=r6)) //_LBB863_3
+{
+ r8 = heap32[(r2+5)];
+ if(r8 !=0) //_LBB863_4
+{
+ r0 = heap32[(r7+1)];
+ heap32[(g0)] = r1;
+ heap32[(g0+1)] = r0;
+ _ZN4__rw9__rb_treeISsSt4pairIKSsiENS_11__select1stIS3_SsEESt4lessISsESaIS3_EE8_C_eraseEPNS_17__rw_rb_tree_nodeIS8_S3_SsS5_EE(i7);
+ r0 = heap32[(r2+4)];
+ r0 = r0 >> 2;
+ heap32[(r0+1)] = 0;
+ r0 = heap32[(r2+4)];
+ r1 = r0 >> 2;
+ heap32[(r1+3)] = r0;
+ heap32[(r1+2)] = r0;
+ heap32[(r2+5)] = 0;
+ r0 = r5 >> 2;
+ r1 = heap32[(r2+4)];
+ heap32[(r0)] = r1;
+ return;
+}
+}
+}
+ r1 = r5 >> 2;
+ heap32[(r1)] = r3;
+if(!(r4 ==r6)) //_LBB863_165
+{
+_7: while(true){
+ r3 = r4 >> 2;
+ r5 = heap32[(r3+3)];
+ if(r5 !=0) //_LBB863_9
+{
+ r7 = r5 >> 2;
+ r7 = heap32[(r7+2)];
+if(!(r7 ==0)) //_LBB863_11
+{
+_12: while(true){
+ r5 = r7;
+ r7 = r5 >> 2;
+ r7 = heap32[(r7+2)];
+if(!(r7 !=0)) //_LBB863_12
+{
+break _12;
+}
+}
+}
+ heap32[(r0)] = r5;
+}
+else{
+ r7 = heap32[(r3+1)];
+ r5 = r7 >> 2;
+ r5 = heap32[(r5+3)];
+ if(r4 ==r5) //_LBB863_8
+{
+_17: while(true){
+ r5 = r7;
+ r8 = r5 >> 2;
+ r7 = heap32[(r8+1)];
+ r9 = r7 >> 2;
+ r9 = heap32[(r9+3)];
+if(!(r5 ==r9)) //_LBB863_14
+{
+break _17;
+}
+}
+ heap32[(r0)] = r5;
+ r8 = heap32[(r8+3)];
+}
+else{
+ r8 = 0;
+ r5 = r4;
+}
+ if(r8 !=r7) //_LBB863_18
+{
+ heap32[(r0)] = r7;
+ r5 = r7;
+}
+}
+ r7 = heap32[(r2+4)];
+ if(r4 !=r7) //_LBB863_21
+{
+ r9 = heap32[(r3+3)];
+_26: do {
+ if(r9 !=0) //_LBB863_25
+{
+ r8 = r9 >> 2;
+ r10 = heap32[(r8+2)];
+ if(r10 ==0) //_LBB863_27
+{
+ r8 = r9;
+}
+else{
+_30: while(true){
+ r8 = r10;
+ r10 = r8 >> 2;
+ r10 = heap32[(r10+2)];
+ if(r10 !=0) //_LBB863_28
+{
+continue _30;
+}
+else{
+break _26;
+}
+}
+}
+}
+else{
+ r8 = heap32[(r3+1)];
+ r10 = r8 >> 2;
+ r10 = heap32[(r10+3)];
+ if(r4 ==r10) //_LBB863_24
+{
+_34: while(true){
+ r11 = r8;
+ r10 = r11 >> 2;
+ r8 = heap32[(r10+1)];
+ r12 = r8 >> 2;
+ r12 = heap32[(r12+3)];
+if(!(r11 ==r12)) //_LBB863_30
+{
+break _34;
+}
+}
+ r10 = heap32[(r10+3)];
+}
+else{
+ r10 = 0;
+ r11 = r4;
+}
+ if(r10 ==r8) //_LBB863_34
+{
+ r8 = r11;
+}
+}
+} while(0);
+ r10 = heap32[(r3+2)];
+ if(r10 !=0) //_LBB863_37
+{
+ if(r9 !=0) //_LBB863_39
+{
+ r11 = r9 >> 2;
+ r12 = heap32[(r11+2)];
+_45: do {
+ if(r12 ==0) //_LBB863_41
+{
+ r11 = r9;
+}
+else{
+_47: while(true){
+ r11 = r12;
+ r12 = r11 >> 2;
+ r12 = heap32[(r12+2)];
+if(!(r12 !=0)) //_LBB863_42
+{
+break _45;
+}
+}
+}
+} while(0);
+ r13 = r11 >> 2;
+ r9 = heap32[(r13+3)];
+ if(r11 !=r4) //_LBB863_45
+{
+ r7 = r10 >> 2;
+ heap32[(r7+1)] = r11;
+ r7 = heap32[(r3+2)];
+ heap32[(r13+2)] = r7;
+ r7 = heap32[(r3+3)];
+ if(r7 !=r11) //_LBB863_47
+{
+ r12 = heap32[(r13+1)];
+ if(r9 !=0) //_LBB863_49
+{
+ r7 = r9 >> 2;
+ heap32[(r7+1)] = r12;
+ r7 = heap32[(r13+1)];
+}
+else{
+ r7 = r12;
+}
+ r7 = r7 >> 2;
+ heap32[(r7+2)] = r9;
+ r7 = heap32[(r3+3)];
+ heap32[(r13+3)] = r7;
+ r7 = heap32[(r3+3)];
+ r7 = r7 >> 2;
+ heap32[(r7+1)] = r11;
+}
+else{
+ r12 = r11;
+}
+ r7 = heap32[(r2+4)];
+ r7 = r7 >> 2;
+ r10 = heap32[(r7+1)];
+ if(r10 !=r4) //_LBB863_53
+{
+ r7 = heap32[(r3+1)];
+ r10 = r7 >> 2;
+ r10 = heap32[(r10+2)];
+ r10 = r10 != r4;
+ r10 = r10 & 1;
+ r10 = r10 << 2;
+ r7 = (r7 + r10)|0;
+ r7 = (r7 + 8)|0;
+ r10 = (r4 + 4)|0;
+ r7 = r7 >> 2;
+ heap32[(r7)] = r11;
+}
+else{
+ r10 = (r4 + 4)|0;
+ heap32[(r7+1)] = r11;
+}
+ r7 = r10 >> 2;
+ r7 = heap32[(r7)];
+ heap32[(r13+1)] = r7;
+ r7 = heap32[(r13)];
+ r11 = heap32[(r3)];
+ heap32[(r13)] = r11;
+ heap32[(r3)] = r7;
+__label__ = 66;
+}
+else{
+__label__ = 45;
+}
+}
+else{
+ r12 = heap32[(r3+1)];
+ r11 = r4;
+ r9 = r10;
+__label__ = 47;
+}
+}
+else{
+ r11 = r4;
+__label__ = 45;
+}
+if (__label__ == 45){
+ r12 = r11 >> 2;
+ r12 = heap32[(r12+1)];
+ if(r9 ==0) //_LBB863_57
+{
+ r9 = 0;
+__label__ = 48;
+}
+else{
+__label__ = 47;
+}
+}
+if (__label__ == 47){
+ r7 = r9 >> 2;
+ heap32[(r7+1)] = r12;
+ r7 = heap32[(r2+4)];
+__label__ = 48;
+}
+if (__label__ == 48){
+ r7 = r7 >> 2;
+ r10 = heap32[(r7+1)];
+ if(r10 !=r4) //_LBB863_61
+{
+ r7 = heap32[(r3+1)];
+ r10 = r7 >> 2;
+ r10 = heap32[(r10+2)];
+ r10 = r10 != r4;
+ r10 = r10 & 1;
+ r10 = r10 << 2;
+ r7 = (r7 + r10)|0;
+ r7 = (r7 + 8)|0;
+ r7 = r7 >> 2;
+ heap32[(r7)] = r9;
+}
+else{
+ heap32[(r7+1)] = r9;
+}
+ r7 = heap32[(r2+4)];
+ r7 = r7 >> 2;
+ r10 = heap32[(r7+2)];
+if(!(r10 !=r4)) //_LBB863_70
+{
+ r10 = heap32[(r3+3)];
+ if(r10 !=0) //_LBB863_65
+{
+ r10 = r9 >> 2;
+ r10 = heap32[(r10+2)];
+_80: do {
+ if(r10 ==0) //_LBB863_67
+{
+ r13 = r9;
+}
+else{
+_82: while(true){
+ r13 = r10;
+ r10 = r13 >> 2;
+ r10 = heap32[(r10+2)];
+if(!(r10 !=0)) //_LBB863_68
+{
+break _80;
+}
+}
+}
+} while(0);
+ heap32[(r7+2)] = r13;
+}
+else{
+ r10 = heap32[(r3+1)];
+ heap32[(r7+2)] = r10;
+}
+}
+ r7 = heap32[(r2+4)];
+ r7 = r7 >> 2;
+ r10 = heap32[(r7+3)];
+ if(r10 ==r4) //_LBB863_72
+{
+ r4 = heap32[(r3+2)];
+ if(r4 !=0) //_LBB863_74
+{
+ r4 = r9 >> 2;
+ r4 = heap32[(r4+3)];
+_91: do {
+ if(r4 ==0) //_LBB863_76
+{
+ r3 = r9;
+}
+else{
+_93: while(true){
+ r3 = r4;
+ r4 = r3 >> 2;
+ r4 = heap32[(r4+3)];
+if(!(r4 !=0)) //_LBB863_77
+{
+break _91;
+}
+}
+}
+} while(0);
+ heap32[(r7+3)] = r3;
+ r4 = r11;
+}
+else{
+ r4 = heap32[(r3+1)];
+ heap32[(r7+3)] = r4;
+ r4 = r11;
+}
+}
+else{
+ r4 = r11;
+}
+}
+ r3 = r4 >> 2;
+ r7 = heap32[(r3)];
+_99: do {
+if(!(r7 ==0)) //_LBB863_160
+{
+_100: while(true){
+ r7 = heap32[(r2+4)];
+ r7 = r7 >> 2;
+ r7 = heap32[(r7+1)];
+ if(r7 ==r9) //_LBB863_158
+{
+__label__ = 140;
+break _100;
+}
+else{
+if(!(r9 ==0)) //_LBB863_81
+{
+ r7 = r9 >> 2;
+ r7 = heap32[(r7)];
+if(!(r7 ==1)) //_LBB863_81
+{
+__label__ = 141;
+break _100;
+}
+}
+ r7 = r12 >> 2;
+ r10 = heap32[(r7+2)];
+ if(r10 !=r9) //_LBB863_119
+{
+ r11 = r10 >> 2;
+ r13 = heap32[(r11)];
+ if(r13 ==0) //_LBB863_121
+{
+ heap32[(r11)] = 1;
+ heap32[(r7)] = 0;
+ r10 = heap32[(r7+2)];
+ r11 = r10 >> 2;
+ r13 = heap32[(r11+3)];
+ heap32[(r7+2)] = r13;
+ r13 = heap32[(r11+3)];
+if(!(r13 ==0)) //_LBB863_123
+{
+ r13 = r13 >> 2;
+ heap32[(r13+1)] = r12;
+}
+ r13 = heap32[(r7+1)];
+ heap32[(r11+1)] = r13;
+ r13 = heap32[(r2+4)];
+ r13 = r13 >> 2;
+ r14 = heap32[(r13+1)];
+ if(r14 !=r12) //_LBB863_125
+{
+ r13 = heap32[(r7+1)];
+ r13 = r13 >> 2;
+ r14 = heap32[(r13+3)];
+ if(r14 !=r12) //_LBB863_127
+{
+ heap32[(r13+2)] = r10;
+}
+else{
+ heap32[(r13+3)] = r10;
+}
+}
+else{
+ heap32[(r13+1)] = r10;
+}
+ heap32[(r11+3)] = r12;
+ heap32[(r7+1)] = r10;
+ r10 = heap32[(r7+2)];
+}
+ r11 = r10 >> 2;
+ r13 = heap32[(r11+3)];
+if(!(r13 ==0)) //_LBB863_131
+{
+ r13 = r13 >> 2;
+ r14 = heap32[(r13)];
+ if(r14 !=1) //_LBB863_135
+{
+__label__ = 117;
+break _100;
+}
+}
+ r13 = heap32[(r11+2)];
+if(!(r13 ==0)) //_LBB863_134
+{
+ r13 = r13 >> 2;
+ r13 = heap32[(r13)];
+if(!(r13 ==1)) //_LBB863_134
+{
+__label__ = 127;
+break _100;
+}
+}
+ heap32[(r11)] = 0;
+}
+else{
+ r10 = heap32[(r7+3)];
+ r11 = r10 >> 2;
+ r13 = heap32[(r11)];
+ if(r13 ==0) //_LBB863_84
+{
+ heap32[(r11)] = 1;
+ heap32[(r7)] = 0;
+ r10 = heap32[(r7+3)];
+ r11 = r10 >> 2;
+ r13 = heap32[(r11+2)];
+ heap32[(r7+3)] = r13;
+ r13 = heap32[(r11+2)];
+if(!(r13 ==0)) //_LBB863_86
+{
+ r13 = r13 >> 2;
+ heap32[(r13+1)] = r12;
+}
+ r13 = heap32[(r7+1)];
+ heap32[(r11+1)] = r13;
+ r13 = heap32[(r2+4)];
+ r13 = r13 >> 2;
+ r14 = heap32[(r13+1)];
+ if(r14 !=r12) //_LBB863_88
+{
+ r13 = heap32[(r7+1)];
+ r13 = r13 >> 2;
+ r14 = heap32[(r13+2)];
+ if(r14 !=r12) //_LBB863_90
+{
+ heap32[(r13+3)] = r10;
+}
+else{
+ heap32[(r13+2)] = r10;
+}
+}
+else{
+ heap32[(r13+1)] = r10;
+}
+ heap32[(r11+2)] = r12;
+ heap32[(r7+1)] = r10;
+ r10 = heap32[(r7+3)];
+}
+ r11 = r10 >> 2;
+ r13 = heap32[(r11+2)];
+if(!(r13 ==0)) //_LBB863_94
+{
+ r13 = r13 >> 2;
+ r14 = heap32[(r13)];
+ if(r14 !=1) //_LBB863_99
+{
+__label__ = 83;
+break _100;
+}
+}
+ r13 = heap32[(r11+3)];
+if(!(r13 ==0)) //_LBB863_97
+{
+ r13 = r13 >> 2;
+ r13 = heap32[(r13)];
+if(!(r13 ==1)) //_LBB863_97
+{
+__label__ = 93;
+break _100;
+}
+}
+ heap32[(r11)] = 0;
+}
+ r10 = heap32[(r7+1)];
+ r9 = r12;
+ r12 = r10;
+}
+}
+_148: do {
+switch(__label__ ){//multiple entries
+case 117:
+ r14 = heap32[(r11+2)];
+if(!(r14 ==0)) //_LBB863_137
+{
+ r14 = r14 >> 2;
+ r14 = heap32[(r14)];
+ if(r14 !=1) //_LBB863_133
+{
+__label__ = 127;
+break _148;
+}
+}
+ heap32[(r13)] = 1;
+ r13 = heap32[(r11+3)];
+ r14 = r13 >> 2;
+ heap32[(r11)] = 0;
+ r15 = heap32[(r14+2)];
+ heap32[(r11+3)] = r15;
+ r15 = heap32[(r14+2)];
+if(!(r15 ==0)) //_LBB863_139
+{
+ r15 = r15 >> 2;
+ heap32[(r15+1)] = r10;
+}
+ r15 = heap32[(r11+1)];
+ heap32[(r14+1)] = r15;
+ r15 = heap32[(r2+4)];
+ r15 = r15 >> 2;
+ r16 = heap32[(r15+1)];
+ if(r16 !=r10) //_LBB863_141
+{
+ r15 = heap32[(r11+1)];
+ r15 = r15 >> 2;
+ r16 = heap32[(r15+2)];
+ if(r16 !=r10) //_LBB863_143
+{
+ heap32[(r15+3)] = r13;
+}
+else{
+ heap32[(r15+2)] = r13;
+}
+}
+else{
+ heap32[(r15+1)] = r13;
+}
+ heap32[(r14+2)] = r10;
+ heap32[(r11+1)] = r13;
+ r10 = heap32[(r7+2)];
+__label__ = 127;
+break _148;
+break;
+case 83:
+ r14 = heap32[(r11+3)];
+if(!(r14 ==0)) //_LBB863_101
+{
+ r14 = r14 >> 2;
+ r14 = heap32[(r14)];
+ if(r14 !=1) //_LBB863_96
+{
+__label__ = 93;
+break _148;
+}
+}
+ heap32[(r13)] = 1;
+ r13 = heap32[(r11+2)];
+ r14 = r13 >> 2;
+ heap32[(r11)] = 0;
+ r15 = heap32[(r14+3)];
+ heap32[(r11+2)] = r15;
+ r15 = heap32[(r14+3)];
+if(!(r15 ==0)) //_LBB863_103
+{
+ r15 = r15 >> 2;
+ heap32[(r15+1)] = r10;
+}
+ r15 = heap32[(r11+1)];
+ heap32[(r14+1)] = r15;
+ r15 = heap32[(r2+4)];
+ r15 = r15 >> 2;
+ r16 = heap32[(r15+1)];
+ if(r16 !=r10) //_LBB863_105
+{
+ r15 = heap32[(r11+1)];
+ r15 = r15 >> 2;
+ r16 = heap32[(r15+3)];
+ if(r16 !=r10) //_LBB863_107
+{
+ heap32[(r15+2)] = r13;
+}
+else{
+ heap32[(r15+3)] = r13;
+}
+}
+else{
+ heap32[(r15+1)] = r13;
+}
+ heap32[(r14+3)] = r10;
+ heap32[(r11+1)] = r13;
+ r10 = heap32[(r7+3)];
+__label__ = 93;
+break;
+}
+} while(0);
+_177: do {
+switch(__label__ ){//multiple entries
+case 127:
+ r10 = r10 >> 2;
+ r11 = heap32[(r7)];
+ heap32[(r10)] = r11;
+ heap32[(r7)] = 1;
+ r10 = heap32[(r10+2)];
+if(!(r10 ==0)) //_LBB863_147
+{
+ r10 = r10 >> 2;
+ heap32[(r10)] = 1;
+}
+ r10 = heap32[(r7+2)];
+ r11 = r10 >> 2;
+ r13 = heap32[(r11+3)];
+ heap32[(r7+2)] = r13;
+ r13 = heap32[(r11+3)];
+if(!(r13 ==0)) //_LBB863_149
+{
+ r13 = r13 >> 2;
+ heap32[(r13+1)] = r12;
+}
+ r13 = heap32[(r7+1)];
+ heap32[(r11+1)] = r13;
+ r13 = heap32[(r2+4)];
+ r13 = r13 >> 2;
+ r14 = heap32[(r13+1)];
+ if(r14 !=r12) //_LBB863_151
+{
+ r13 = heap32[(r7+1)];
+ r13 = r13 >> 2;
+ r14 = heap32[(r13+3)];
+ if(r14 !=r12) //_LBB863_153
+{
+ heap32[(r13+2)] = r10;
+}
+else{
+ heap32[(r13+3)] = r10;
+}
+}
+else{
+ heap32[(r13+1)] = r10;
+}
+ heap32[(r11+3)] = r12;
+ heap32[(r7+1)] = r10;
+__label__ = 140;
+break _177;
+break;
+case 93:
+ r10 = r10 >> 2;
+ r11 = heap32[(r7)];
+ heap32[(r10)] = r11;
+ heap32[(r7)] = 1;
+ r10 = heap32[(r10+3)];
+if(!(r10 ==0)) //_LBB863_111
+{
+ r10 = r10 >> 2;
+ heap32[(r10)] = 1;
+}
+ r10 = heap32[(r7+3)];
+ r11 = r10 >> 2;
+ r13 = heap32[(r11+2)];
+ heap32[(r7+3)] = r13;
+ r13 = heap32[(r11+2)];
+if(!(r13 ==0)) //_LBB863_113
+{
+ r13 = r13 >> 2;
+ heap32[(r13+1)] = r12;
+}
+ r13 = heap32[(r7+1)];
+ heap32[(r11+1)] = r13;
+ r13 = heap32[(r2+4)];
+ r13 = r13 >> 2;
+ r14 = heap32[(r13+1)];
+ if(r14 !=r12) //_LBB863_115
+{
+ r13 = heap32[(r7+1)];
+ r13 = r13 >> 2;
+ r14 = heap32[(r13+2)];
+ if(r14 !=r12) //_LBB863_117
+{
+ heap32[(r13+3)] = r10;
+}
+else{
+ heap32[(r13+2)] = r10;
+}
+}
+else{
+ heap32[(r13+1)] = r10;
+}
+ heap32[(r11+2)] = r12;
+ heap32[(r7+1)] = r10;
+__label__ = 140;
+break;
+}
+} while(0);
+if (__label__ == 140){
+ if(r9 ==0) //_LBB863_160
+{
+break _99;
+}
+}
+ r7 = r9 >> 2;
+ heap32[(r7)] = 1;
+}
+} while(0);
+ r7 = heap32[(r2+1)];
+ heap32[(r3+3)] = r7;
+ r7 = heap32[(r3+4)];
+ r7 = (r7 + -12)|0;
+ r9 = _ZNSs11_C_null_refE;
+if(!(r7 ==r9)) //_LBB863_163
+{
+ r7 = r7 >> 2;
+ r9 = heap32[(r7)];
+ r10 = (r9 + -1)|0;
+ heap32[(r7)] = r10;
+if(!(r9 >0)) //_LBB863_163
+{
+ r7 = heap32[(r3+4)];
+ r7 = (r7 + -12)|0;
+ heap32[(g0)] = r7;
+ _ZdlPv(i7);
+}
+}
+ heap32[(r3+4)] = 0;
+ heap32[(r2+1)] = r4;
+ r4 = heap32[(r2+5)];
+ r4 = (r4 + -1)|0;
+ heap32[(r2+5)] = r4;
+}
+else{
+ r8 = r7;
+}
+ heap32[(r1)] = r8;
+ r4 = r5;
+ if(r5 !=r6) //_LBB863_5
+{
+continue _7;
+}
+else{
+break _7;
+}
+}
+}
+ return;
+}
+
+function _ZN4__rw9__rb_treeIjSt4pairIKjPN5my_gl12TIndexBufferEENS_11__select1stIS6_jEESt4lessIjESaIS6_EE5eraseENS_14__rw_tree_iterIS6_iPS6_RS6_NS_17__rw_rb_tree_nodeISB_S6_jS8_EEEE(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+ var r7;
+ var r8;
+ var r9;
+ var r10;
+ var r11;
+ var r12;
+ var r13;
+ var r14;
+var __label__ = 0;
+ i7 = sp + 0;var g0 = i7>>2; // save stack
+ r0 = _ZN5my_glL9m_contextE;
+ r0 = r0 >> 2;
+ r1 = heap32[(r0+78)];
+ r2 = heap32[(fp+1)];
+ r3 = heap32[(fp)];
+ if(r1 !=r2) //_LBB864_2
+{
+ r4 = r2 >> 2;
+ r5 = heap32[(r4+3)];
+_3: do {
+ if(r5 !=0) //_LBB864_6
+{
+ r6 = r5 >> 2;
+ r7 = heap32[(r6+2)];
+ if(r7 ==0) //_LBB864_8
+{
+ r6 = r5;
+}
+else{
+_7: while(true){
+ r6 = r7;
+ r7 = r6 >> 2;
+ r7 = heap32[(r7+2)];
+ if(r7 !=0) //_LBB864_9
+{
+continue _7;
+}
+else{
+break _3;
+}
+}
+}
+}
+else{
+ r6 = heap32[(r4+1)];
+ r7 = r6 >> 2;
+ r7 = heap32[(r7+3)];
+ if(r7 ==r2) //_LBB864_5
+{
+_11: while(true){
+ r8 = r6;
+ r7 = r8 >> 2;
+ r6 = heap32[(r7+1)];
+ r9 = r6 >> 2;
+ r9 = heap32[(r9+3)];
+if(!(r8 ==r9)) //_LBB864_11
+{
+break _11;
+}
+}
+ r7 = heap32[(r7+3)];
+}
+else{
+ r7 = 0;
+ r8 = r2;
+}
+ if(r7 ==r6) //_LBB864_15
+{
+ r6 = r8;
+}
+}
+} while(0);
+ r7 = heap32[(r4+2)];
+ if(r7 !=0) //_LBB864_18
+{
+ if(r5 !=0) //_LBB864_20
+{
+ r8 = r5 >> 2;
+ r9 = heap32[(r8+2)];
+_22: do {
+ if(r9 ==0) //_LBB864_22
+{
+ r8 = r5;
+}
+else{
+_24: while(true){
+ r8 = r9;
+ r9 = r8 >> 2;
+ r9 = heap32[(r9+2)];
+if(!(r9 !=0)) //_LBB864_23
+{
+break _22;
+}
+}
+}
+} while(0);
+ r10 = r8 >> 2;
+ r5 = heap32[(r10+3)];
+ if(r8 !=r2) //_LBB864_26
+{
+ r9 = r7 >> 2;
+ heap32[(r9+1)] = r8;
+ r9 = heap32[(r4+2)];
+ heap32[(r10+2)] = r9;
+ r9 = heap32[(r4+3)];
+ if(r9 !=r8) //_LBB864_28
+{
+ r9 = heap32[(r10+1)];
+ if(r5 !=0) //_LBB864_30
+{
+ r7 = r5 >> 2;
+ heap32[(r7+1)] = r9;
+ r7 = heap32[(r10+1)];
+}
+else{
+ r7 = r9;
+}
+ r7 = r7 >> 2;
+ heap32[(r7+2)] = r5;
+ r7 = heap32[(r4+3)];
+ heap32[(r10+3)] = r7;
+ r7 = heap32[(r4+3)];
+ r7 = r7 >> 2;
+ heap32[(r7+1)] = r8;
+}
+else{
+ r9 = r8;
+}
+ r7 = r1 >> 2;
+ r11 = heap32[(r7+1)];
+ if(r11 !=r2) //_LBB864_34
+{
+ r11 = heap32[(r4+1)];
+ r7 = r11 >> 2;
+ r7 = heap32[(r7+2)];
+ r7 = r7 != r2;
+ r7 = r7 & 1;
+ r7 = r7 << 2;
+ r11 = (r11 + r7)|0;
+ r7 = (r11 + 8)|0;
+ r11 = (r2 + 4)|0;
+ r7 = r7 >> 2;
+ heap32[(r7)] = r8;
+}
+else{
+ r11 = (r2 + 4)|0;
+ heap32[(r7+1)] = r8;
+}
+ r8 = r11 >> 2;
+ r8 = heap32[(r8)];
+ heap32[(r10+1)] = r8;
+ r8 = heap32[(r10)];
+ r7 = heap32[(r4)];
+ heap32[(r10)] = r7;
+ heap32[(r4)] = r8;
+__label__ = 51;
+}
+else{
+__label__ = 30;
+}
+}
+else{
+ r9 = heap32[(r4+1)];
+ r8 = r2;
+ r5 = r7;
+__label__ = 32;
+}
+}
+else{
+ r8 = r2;
+__label__ = 30;
+}
+if (__label__ == 30){
+ r9 = r8 >> 2;
+ r9 = heap32[(r9+1)];
+ if(r5 ==0) //_LBB864_38
+{
+ r5 = 0;
+__label__ = 33;
+}
+else{
+__label__ = 32;
+}
+}
+if (__label__ == 32){
+ r7 = r5 >> 2;
+ heap32[(r7+1)] = r9;
+__label__ = 33;
+}
+if (__label__ == 33){
+ r7 = r1 >> 2;
+ r10 = heap32[(r7+1)];
+ if(r10 !=r2) //_LBB864_42
+{
+ r10 = heap32[(r4+1)];
+ r11 = r10 >> 2;
+ r11 = heap32[(r11+2)];
+ r11 = r11 != r2;
+ r11 = r11 & 1;
+ r11 = r11 << 2;
+ r10 = (r10 + r11)|0;
+ r10 = (r10 + 8)|0;
+ r10 = r10 >> 2;
+ heap32[(r10)] = r5;
+}
+else{
+ heap32[(r7+1)] = r5;
+}
+ r10 = heap32[(r7+2)];
+if(!(r10 !=r2)) //_LBB864_51
+{
+ r10 = heap32[(r4+3)];
+ if(r10 !=0) //_LBB864_46
+{
+ r10 = r5 >> 2;
+ r10 = heap32[(r10+2)];
+_57: do {
+ if(r10 ==0) //_LBB864_48
+{
+ r11 = r5;
+}
+else{
+_59: while(true){
+ r11 = r10;
+ r10 = r11 >> 2;
+ r10 = heap32[(r10+2)];
+if(!(r10 !=0)) //_LBB864_49
+{
+break _57;
+}
+}
+}
+} while(0);
+ heap32[(r7+2)] = r11;
+}
+else{
+ r10 = heap32[(r4+1)];
+ heap32[(r7+2)] = r10;
+}
+}
+ r10 = heap32[(r7+3)];
+ if(r10 ==r2) //_LBB864_53
+{
+ r2 = heap32[(r4+2)];
+ if(r2 !=0) //_LBB864_55
+{
+ r2 = r5 >> 2;
+ r2 = heap32[(r2+3)];
+_68: do {
+ if(r2 ==0) //_LBB864_57
+{
+ r4 = r5;
+}
+else{
+_70: while(true){
+ r4 = r2;
+ r2 = r4 >> 2;
+ r2 = heap32[(r2+3)];
+if(!(r2 !=0)) //_LBB864_58
+{
+break _68;
+}
+}
+}
+} while(0);
+ heap32[(r7+3)] = r4;
+ r2 = r8;
+}
+else{
+ r2 = heap32[(r4+1)];
+ heap32[(r7+3)] = r2;
+ r2 = r8;
+}
+}
+else{
+ r2 = r8;
+}
+}
+ r4 = r2 >> 2;
+ r7 = heap32[(r4)];
+_76: do {
+if(!(r7 ==0)) //_LBB864_141
+{
+_77: while(true){
+ r7 = r1 >> 2;
+ r8 = heap32[(r7+1)];
+ if(r8 ==r5) //_LBB864_139
+{
+__label__ = 125;
+break _77;
+}
+else{
+if(!(r5 ==0)) //_LBB864_62
+{
+ r8 = r5 >> 2;
+ r8 = heap32[(r8)];
+if(!(r8 ==1)) //_LBB864_62
+{
+__label__ = 126;
+break _77;
+}
+}
+ r8 = r9 >> 2;
+ r10 = heap32[(r8+2)];
+ if(r10 !=r5) //_LBB864_100
+{
+ r11 = r10 >> 2;
+ r12 = heap32[(r11)];
+ if(r12 ==0) //_LBB864_102
+{
+ heap32[(r11)] = 1;
+ heap32[(r8)] = 0;
+ r10 = heap32[(r8+2)];
+ r11 = r10 >> 2;
+ r12 = heap32[(r11+3)];
+ heap32[(r8+2)] = r12;
+ r12 = heap32[(r11+3)];
+if(!(r12 ==0)) //_LBB864_104
+{
+ r12 = r12 >> 2;
+ heap32[(r12+1)] = r9;
+}
+ r12 = heap32[(r8+1)];
+ heap32[(r11+1)] = r12;
+ r12 = heap32[(r7+1)];
+ if(r12 !=r9) //_LBB864_106
+{
+ r12 = heap32[(r8+1)];
+ r12 = r12 >> 2;
+ r13 = heap32[(r12+3)];
+ if(r13 !=r9) //_LBB864_108
+{
+ heap32[(r12+2)] = r10;
+}
+else{
+ heap32[(r12+3)] = r10;
+}
+}
+else{
+ heap32[(r7+1)] = r10;
+}
+ heap32[(r11+3)] = r9;
+ heap32[(r8+1)] = r10;
+ r10 = heap32[(r8+2)];
+}
+ r11 = r10 >> 2;
+ r12 = heap32[(r11+3)];
+if(!(r12 ==0)) //_LBB864_112
+{
+ r12 = r12 >> 2;
+ r13 = heap32[(r12)];
+ if(r13 !=1) //_LBB864_116
+{
+__label__ = 102;
+break _77;
+}
+}
+ r12 = heap32[(r11+2)];
+if(!(r12 ==0)) //_LBB864_115
+{
+ r12 = r12 >> 2;
+ r12 = heap32[(r12)];
+if(!(r12 ==1)) //_LBB864_115
+{
+__label__ = 112;
+break _77;
+}
+}
+ heap32[(r11)] = 0;
+}
+else{
+ r10 = heap32[(r8+3)];
+ r11 = r10 >> 2;
+ r12 = heap32[(r11)];
+ if(r12 ==0) //_LBB864_65
+{
+ heap32[(r11)] = 1;
+ heap32[(r8)] = 0;
+ r10 = heap32[(r8+3)];
+ r11 = r10 >> 2;
+ r12 = heap32[(r11+2)];
+ heap32[(r8+3)] = r12;
+ r12 = heap32[(r11+2)];
+if(!(r12 ==0)) //_LBB864_67
+{
+ r12 = r12 >> 2;
+ heap32[(r12+1)] = r9;
+}
+ r12 = heap32[(r8+1)];
+ heap32[(r11+1)] = r12;
+ r12 = heap32[(r7+1)];
+ if(r12 !=r9) //_LBB864_69
+{
+ r12 = heap32[(r8+1)];
+ r12 = r12 >> 2;
+ r13 = heap32[(r12+2)];
+ if(r13 !=r9) //_LBB864_71
+{
+ heap32[(r12+3)] = r10;
+}
+else{
+ heap32[(r12+2)] = r10;
+}
+}
+else{
+ heap32[(r7+1)] = r10;
+}
+ heap32[(r11+2)] = r9;
+ heap32[(r8+1)] = r10;
+ r10 = heap32[(r8+3)];
+}
+ r11 = r10 >> 2;
+ r12 = heap32[(r11+2)];
+if(!(r12 ==0)) //_LBB864_75
+{
+ r12 = r12 >> 2;
+ r13 = heap32[(r12)];
+ if(r13 !=1) //_LBB864_80
+{
+__label__ = 68;
+break _77;
+}
+}
+ r12 = heap32[(r11+3)];
+if(!(r12 ==0)) //_LBB864_78
+{
+ r12 = r12 >> 2;
+ r12 = heap32[(r12)];
+if(!(r12 ==1)) //_LBB864_78
+{
+__label__ = 78;
+break _77;
+}
+}
+ heap32[(r11)] = 0;
+}
+ r10 = heap32[(r8+1)];
+ r5 = r9;
+ r9 = r10;
+}
+}
+_125: do {
+switch(__label__ ){//multiple entries
+case 102:
+ r1 = heap32[(r11+2)];
+if(!(r1 ==0)) //_LBB864_118
+{
+ r1 = r1 >> 2;
+ r1 = heap32[(r1)];
+ if(r1 !=1) //_LBB864_114
+{
+__label__ = 112;
+break _125;
+}
+}
+ heap32[(r12)] = 1;
+ r1 = heap32[(r11+3)];
+ r12 = r1 >> 2;
+ heap32[(r11)] = 0;
+ r13 = heap32[(r12+2)];
+ heap32[(r11+3)] = r13;
+ r13 = heap32[(r12+2)];
+if(!(r13 ==0)) //_LBB864_120
+{
+ r13 = r13 >> 2;
+ heap32[(r13+1)] = r10;
+}
+ r13 = heap32[(r11+1)];
+ heap32[(r12+1)] = r13;
+ r13 = heap32[(r7+1)];
+ if(r13 !=r10) //_LBB864_122
+{
+ r13 = heap32[(r11+1)];
+ r13 = r13 >> 2;
+ r14 = heap32[(r13+2)];
+ if(r14 !=r10) //_LBB864_124
+{
+ heap32[(r13+3)] = r1;
+}
+else{
+ heap32[(r13+2)] = r1;
+}
+}
+else{
+ heap32[(r7+1)] = r1;
+}
+ heap32[(r12+2)] = r10;
+ heap32[(r11+1)] = r1;
+ r10 = heap32[(r8+2)];
+__label__ = 112;
+break _125;
+break;
+case 68:
+ r1 = heap32[(r11+3)];
+if(!(r1 ==0)) //_LBB864_82
+{
+ r1 = r1 >> 2;
+ r1 = heap32[(r1)];
+ if(r1 !=1) //_LBB864_77
+{
+__label__ = 78;
+break _125;
+}
+}
+ heap32[(r12)] = 1;
+ r1 = heap32[(r11+2)];
+ r12 = r1 >> 2;
+ heap32[(r11)] = 0;
+ r13 = heap32[(r12+3)];
+ heap32[(r11+2)] = r13;
+ r13 = heap32[(r12+3)];
+if(!(r13 ==0)) //_LBB864_84
+{
+ r13 = r13 >> 2;
+ heap32[(r13+1)] = r10;
+}
+ r13 = heap32[(r11+1)];
+ heap32[(r12+1)] = r13;
+ r13 = heap32[(r7+1)];
+ if(r13 !=r10) //_LBB864_86
+{
+ r13 = heap32[(r11+1)];
+ r13 = r13 >> 2;
+ r14 = heap32[(r13+3)];
+ if(r14 !=r10) //_LBB864_88
+{
+ heap32[(r13+2)] = r1;
+}
+else{
+ heap32[(r13+3)] = r1;
+}
+}
+else{
+ heap32[(r7+1)] = r1;
+}
+ heap32[(r12+3)] = r10;
+ heap32[(r11+1)] = r1;
+ r10 = heap32[(r8+3)];
+__label__ = 78;
+break;
+}
+} while(0);
+_154: do {
+switch(__label__ ){//multiple entries
+case 112:
+ r1 = r10 >> 2;
+ r10 = heap32[(r8)];
+ heap32[(r1)] = r10;
+ heap32[(r8)] = 1;
+ r1 = heap32[(r1+2)];
+if(!(r1 ==0)) //_LBB864_128
+{
+ r1 = r1 >> 2;
+ heap32[(r1)] = 1;
+}
+ r1 = heap32[(r8+2)];
+ r10 = r1 >> 2;
+ r11 = heap32[(r10+3)];
+ heap32[(r8+2)] = r11;
+ r11 = heap32[(r10+3)];
+if(!(r11 ==0)) //_LBB864_130
+{
+ r11 = r11 >> 2;
+ heap32[(r11+1)] = r9;
+}
+ r11 = heap32[(r8+1)];
+ heap32[(r10+1)] = r11;
+ r11 = heap32[(r7+1)];
+ if(r11 !=r9) //_LBB864_132
+{
+ r7 = heap32[(r8+1)];
+ r7 = r7 >> 2;
+ r11 = heap32[(r7+3)];
+ if(r11 !=r9) //_LBB864_134
+{
+ heap32[(r7+2)] = r1;
+}
+else{
+ heap32[(r7+3)] = r1;
+}
+}
+else{
+ heap32[(r7+1)] = r1;
+}
+ heap32[(r10+3)] = r9;
+ heap32[(r8+1)] = r1;
+__label__ = 125;
+break _154;
+break;
+case 78:
+ r1 = r10 >> 2;
+ r10 = heap32[(r8)];
+ heap32[(r1)] = r10;
+ heap32[(r8)] = 1;
+ r1 = heap32[(r1+3)];
+if(!(r1 ==0)) //_LBB864_92
+{
+ r1 = r1 >> 2;
+ heap32[(r1)] = 1;
+}
+ r1 = heap32[(r8+3)];
+ r10 = r1 >> 2;
+ r11 = heap32[(r10+2)];
+ heap32[(r8+3)] = r11;
+ r11 = heap32[(r10+2)];
+if(!(r11 ==0)) //_LBB864_94
+{
+ r11 = r11 >> 2;
+ heap32[(r11+1)] = r9;
+}
+ r11 = heap32[(r8+1)];
+ heap32[(r10+1)] = r11;
+ r11 = heap32[(r7+1)];
+ if(r11 !=r9) //_LBB864_96
+{
+ r7 = heap32[(r8+1)];
+ r7 = r7 >> 2;
+ r11 = heap32[(r7+2)];
+ if(r11 !=r9) //_LBB864_98
+{
+ heap32[(r7+3)] = r1;
+}
+else{
+ heap32[(r7+2)] = r1;
+}
+}
+else{
+ heap32[(r7+1)] = r1;
+}
+ heap32[(r10+2)] = r9;
+ heap32[(r8+1)] = r1;
+__label__ = 125;
+break;
+}
+} while(0);
+if (__label__ == 125){
+ if(r5 ==0) //_LBB864_141
+{
+break _76;
+}
+}
+ r1 = r5 >> 2;
+ heap32[(r1)] = 1;
+}
+} while(0);
+ r1 = heap32[(r0+75)];
+ heap32[(r4+3)] = r1;
+ heap32[(r0+75)] = r2;
+ r1 = heap32[(r0+79)];
+ r1 = (r1 + -1)|0;
+ r2 = r3 >> 2;
+ heap32[(r0+79)] = r1;
+ heap32[(r2)] = r6;
+ return;
+}
+else{
+ r0 = r3 >> 2;
+ heap32[(r0)] = r1;
+ return;
+}
+}
+
+function _ZN4__rw9__rb_treeIjSt4pairIKjPN5my_gl12TIndexBufferEENS_11__select1stIS6_jEESt4lessIjESaIS6_EE11_C_get_linkEv(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+ var r5;
+ var r6;
+var __label__ = 0;
+ i7 = sp + -8;var g0 = i7>>2; // save stack
+ r0 = _ZN5my_glL9m_contextE;
+ r0 = r0 >> 2;
+ r1 = heap32[(r0+75)];
+ if(r1 ==0) //_LBB865_2
+{
+ r1 = heap32[(r0+76)];
+ r2 = heap32[(r0+77)];
+ if(r1 !=r2) //_LBB865_11
+{
+ r2 = (r1 + 24)|0;
+ heap32[(r0+76)] = r2;
+}
+else{
+ r1 = heap32[(r0+74)];
+ if(r1 !=0) //_LBB865_5
+{
+ r1 = r1 >> 2;
+ r1 = heap32[(r1+1)];
+}
+else{
+ r1 = 0;
+}
+ heap32[(g0)] = 12;
+ _Znwj(i7);
+ r2 = r_g0;
+if(!(r2 !=0)) //_LBB865_8
+{
+ heap32[(g0)] = 3;
+ _ZN4__rw10__rw_throwEiz(i7);
+}
+ r3 = r1 & 1023;
+ r3 = (r3 * 1656)|0;
+ r4 = r1 >>> 10;
+ r3 = r3 >>> 10;
+ r4 = (r4 * 1656)|0;
+ r5 = (r1 + 32)|0;
+ r3 = (r3 + r4)|0;
+ r3 = uint(r5) > uint(r3) ? r5 : r3;
+ r4 = (r1 + 1)|0;
+ r3 = uint(r3) > uint(r1) ? r3 : r4;
+ r4 = (r3 * 24)|0;
+ heap32[(g0)] = r4;
+ _Znwj(i7);
+ r1 = r_g0;
+if(!(r1 !=0)) //_LBB865_10
+{
+ heap32[(g0)] = 3;
+ _ZN4__rw10__rw_throwEiz(i7);
+}
+ r5 = r2 >> 2;
+ heap32[(r5+2)] = r1;
+ r6 = heap32[(r0+74)];
+ heap32[(r5)] = r6;
+ heap32[(r5+1)] = r3;
+ r3 = (r1 + r4)|0;
+ heap32[(r0+74)] = r2;
+ r2 = (r1 + 24)|0;
+ heap32[(r0+77)] = r3;
+ heap32[(r0+76)] = r2;
+}
+}
+else{
+ r2 = r1 >> 2;
+ r2 = heap32[(r2+3)];
+ heap32[(r0+75)] = r2;
+}
+ r0 = r1 >> 2;
+ heap32[(r0+1)] = 0;
+ heap32[(r0+2)] = 0;
+ heap32[(r0+3)] = 0;
+ heap32[(r0)] = 0;
+ r_g0 = r1;
+ return;
+}
+
+function _ZN4__rw9__rb_treeISsSt4pairIKSsiENS_11__select1stIS3_SsEESt4lessISsESaIS3_EED2Ev(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+ var r4;
+var __label__ = 0;
+ i7 = sp + -32;var g0 = i7>>2; // save stack
+ r0 = heap32[(fp)];
+ r1 = r0 >> 2;
+ r2 = heap32[(r1+4)];
+if(!(r2 ==0)) //_LBB866_3
+{
+ r3 = r2 >> 2;
+ r3 = heap32[(r3+2)];
+ heap32[(fp+-2)] = r3;
+ r3 = sp + -16;
+ r4 = sp + -8;
+ heap32[(g0)] = r3;
+ heap32[(g0+1)] = r0;
+ heap32[(g0+2)] = r4;
+ heap32[(g0+3)] = r2;
+ _ZN4__rw9__rb_treeISsSt4pairIKSsiENS_11__select1stIS3_SsEESt4lessISsESaIS3_EE5eraseENS_14__rw_tree_iterIS3_iPS3_RS3_NS_17__rw_rb_tree_nodeIS8_S3_SsS5_EEEESF_(i7);
+ r0 = heap32[(r1+4)];
+ r2 = heap32[(r1+1)];
+ r3 = r0 >> 2;
+ heap32[(r3+3)] = r2;
+ heap32[(r1+1)] = r0;
+ r0 = heap32[(r1)];
+if(!(r0 ==0)) //_LBB866_3
+{
+__label__ = 2; //SET chanka
+_3: while(true){
+ r2 = r0 >> 2;
+ r3 = heap32[(r2)];
+ heap32[(r1)] = r3;
+ r2 = heap32[(r2+2)];
+ heap32[(g0)] = r2;
+ _ZdlPv(i7);
+ heap32[(g0)] = r0;
+ _ZdlPv(i7);
+ r0 = heap32[(r1)];
+ if(r0 !=0) //_LBB866_2
+{
+continue _3;
+}
+else{
+break _3;
+}
+}
+}
+}
+ return;
+}
+
+function Mandreel_TextureAsync_Loaded(sp)
+{
+ var i7;
+ var fp = sp>>2;
+ var r0;
+ var r1;
+ var r2;
+ var r3;
+var __label__ = 0;
+ i7 = sp + -40;var g0 = i7>>2; // save stack
+ r0 = 5;
+ r0 = heap32[(r0)];
+ r1 = heap32[(fp)];
+ heap32[(g0)] = 0;
+ heap32[(g0+1)] = 3553;
+ heap32[(g0+2)] = r1;
+ r2 = 100;
+ __FUNCTION_TABLE__[(r0)>>2](i7);
+ r0 = heap32[(r2)];
+ r2 = heap32[(fp+1)];
+ r3 = heap32[(fp+2)];
+ heap32[(g0)] = 0;
+ heap32[(g0+1)] = 3553;
+ heap32[(g0+2)] = 0;
+ heap32[(g0+3)] = 6408;
+ heap32[(g0+4)] = r2;
+ heap32[(g0+5)] = r3;
+ heap32[(g0+6)] = 0;
+ heap32[(g0+7)] = 6408;
+ heap32[(g0+8)] = 5121;
+ heap32[(g0+9)] = 0;
+ __FUNCTION_TABLE__[(r0)>>2](i7);
+ heap32[(g0)] = r1;
+ Mandreel_TextureAsync_SetData(i7);
+ return;
+}
+
+var _ZGVZN11btMatrix3x311getIdentityEvE14identityMatrix = Malloc(8);
+var _ZGVZN11btTransform11getIdentityEvE17identityTransform = Malloc(8);
+var Landscape02Vtx = Malloc(23760);
+var _ZTIN16btCollisionWorld17RayResultCallbackE = Malloc(8);
+var _ZTSN16btCollisionWorld17RayResultCallbackE = Malloc(40);
+var _ZTVN16btCollisionWorld24ClosestRayResultCallbackE = Malloc(24);
+var _ZTIN16btCollisionWorld24ClosestRayResultCallbackE = Malloc(12);
+var _ZTSN16btCollisionWorld24ClosestRayResultCallbackE = Malloc(47);
+var _ZTI13btMotionState = Malloc(8);
+var _ZTS13btMotionState = Malloc(16);
+var _ZTV20btDefaultMotionState = Malloc(24);
+var _ZTI20btDefaultMotionState = Malloc(12);
+var _ZTS20btDefaultMotionState = Malloc(23);
+var _ZTI17btTypedConstraint = Malloc(24);
+var _ZTS17btTypedConstraint = Malloc(20);
+var _ZTI13btTypedObject = Malloc(8);
+var _ZTS13btTypedObject = Malloc(16);
+var _ZTV7RagDoll = Malloc(16);
+var _ZTI7RagDoll = Malloc(8);
+var _ZTS7RagDoll = Malloc(9);
+var _ZTV13BenchmarkDemo = Malloc(36);
+var _ZTI13BenchmarkDemo = Malloc(12);
+var _ZTS13BenchmarkDemo = Malloc(16);
+var _ZTI15DemoApplication = Malloc(8);
+var _ZTS15DemoApplication = Malloc(18);
+var _ZL10raycastBar = Malloc(40048);
+var _2E_str3 = Malloc(48);
+var _2E_str4 = Malloc(69);
+var _2E_str5 = Malloc(61);
+var _2E_str6 = Malloc(50);
+var _2E_str7 = Malloc(27);
+var _ZL7TaruVtx = Malloc(516);
+var LandscapeVtx = Malloc(32);
+var Landscape01Vtx = Malloc(24576);
+var Landscape03Vtx = Malloc(24576);
+var Landscape04Vtx = Malloc(25344);
+var Landscape05Vtx = Malloc(26928);
+var Landscape06Vtx = Malloc(27720);
+var Landscape07Vtx = Malloc(26880);
+var Landscape08Vtx = Malloc(26136);
+var LandscapeVtxCount = Malloc(32);
+var LandscapeIdx = Malloc(32);
+var Landscape01Idx = Malloc(23436);
+var Landscape02Idx = Malloc(22620);
+var Landscape03Idx = Malloc(23436);
+var Landscape04Idx = Malloc(24192);
+var Landscape05Idx = Malloc(25740);
+var Landscape06Idx = Malloc(26520);
+var Landscape07Idx = Malloc(25704);
+var Landscape08Idx = Malloc(24960);
+var LandscapeIdxCount = Malloc(32);
+var _ZZN11btMatrix3x311getIdentityEvE14identityMatrix_2E_0_2E_0_2E_0_2E_0 = Malloc(4);
+var _ZZN11btMatrix3x311getIdentityEvE14identityMatrix_2E_0_2E_1_2E_0_2E_1 = Malloc(4);
+var _ZZN11btMatrix3x311getIdentityEvE14identityMatrix_2E_0_2E_2_2E_0_2E_2 = Malloc(4);
+var _ZZN11btTransform11getIdentityEvE17identityTransform = Malloc(64);
+var _ZTV14BenchmarkDemo4 = Malloc(36);
+var _ZTI14BenchmarkDemo4 = Malloc(12);
+var _ZTS14BenchmarkDemo4 = Malloc(17);
+var _ZL14benchmarkDemo4 = Malloc(80);
+var _ZTI21btBroadphaseInterface = Malloc(8);
+var _ZTS21btBroadphaseInterface = Malloc(24);
+var _ZTI25btOverlappingPairCallback = Malloc(8);
+var _ZTS25btOverlappingPairCallback = Malloc(28);
+var _ZTI22btOverlappingPairCache = Malloc(12);
+var _ZTS22btOverlappingPairCache = Malloc(25);
+var _ZTV15btNullPairCache = Malloc(76);
+var _ZTI15btNullPairCache = Malloc(12);
+var _ZTS15btNullPairCache = Malloc(18);
+var _2E_str11 = Malloc(36);
+var _2E_str112 = Malloc(67);
+var _2E_str213 = Malloc(18);
+var _2E_str314 = Malloc(18);
+var _ZTV20btAxisSweep3InternalItE = Malloc(64);
+var _ZTI20btAxisSweep3InternalItE = Malloc(12);
+var _ZTS20btAxisSweep3InternalItE = Malloc(26);
+var _ZTV12btAxisSweep3 = Malloc(64);
+var _ZTI12btAxisSweep3 = Malloc(12);
+var _ZTS12btAxisSweep3 = Malloc(15);
+var _ZTV20btCollisionAlgorithm = Malloc(28);
+var _ZTI20btCollisionAlgorithm = Malloc(8);
+var _ZTS20btCollisionAlgorithm = Malloc(23);
+var _ZTIN6btDbvt8ICollideE = Malloc(8);
+var _ZTSN6btDbvt8ICollideE = Malloc(19);
+var _2E_str1118 = Malloc(63);
+var _2E_str22 = Malloc(16);
+var _ZTV18btDbvtTreeCollider = Malloc(36);
+var _ZTI18btDbvtTreeCollider = Malloc(12);
+var _ZTS18btDbvtTreeCollider = Malloc(21);
+var _ZTV19BroadphaseRayTester = Malloc(36);
+var _ZTI19BroadphaseRayTester = Malloc(12);
+var _ZTS19BroadphaseRayTester = Malloc(22);
+var _ZTV20BroadphaseAabbTester = Malloc(36);
+var _ZTI20BroadphaseAabbTester = Malloc(12);
+var _ZTS20BroadphaseAabbTester = Malloc(23);
+var _2E_str18 = Malloc(73);
+var _ZTV16btDbvtBroadphase = Malloc(64);
+var _ZTI16btDbvtBroadphase = Malloc(12);
+var _ZTS16btDbvtBroadphase = Malloc(19);
+var _ZTV12btDispatcher = Malloc(64);
+var _ZTI12btDispatcher = Malloc(8);
+var _ZTS12btDispatcher = Malloc(15);
+var _ZTI21btNodeOverlapCallback = Malloc(8);
+var _ZTS21btNodeOverlapCallback = Malloc(24);
+var _2E_str10 = Malloc(2);
+var _2E_str212 = Malloc(18);
+var _2E_str313 = Malloc(69);
+var _2E_str414 = Malloc(36);
+var _2E_str515 = Malloc(36);
+var _2E_str616 = Malloc(36);
+var _2E_str717 = Malloc(36);
+var _2E_str820 = Malloc(36);
+var _2E_str9 = Malloc(36);
+var gOverlappingPairs = Malloc(4);
+var _ZTI17btOverlapCallback = Malloc(8);
+var _ZTS17btOverlapCallback = Malloc(20);
+var _ZTVZN28btHashedOverlappingPairCache19cleanProxyFromPairsEP17btBroadphaseProxyP12btDispatcherE17CleanPairCallback = Malloc(20);
+var _ZTIZN28btHashedOverlappingPairCache19cleanProxyFromPairsEP17btBroadphaseProxyP12btDispatcherE17CleanPairCallback = Malloc(12);
+var _ZTSZN28btHashedOverlappingPairCache19cleanProxyFromPairsEP17btBroadphaseProxyP12btDispatcherE17CleanPairCallback = Malloc(110);
+var _ZTVZN28btHashedOverlappingPairCache37removeOverlappingPairsContainingProxyEP17btBroadphaseProxyP12btDispatcherE18RemovePairCallback = Malloc(20);
+var _ZTIZN28btHashedOverlappingPairCache37removeOverlappingPairsContainingProxyEP17btBroadphaseProxyP12btDispatcherE18RemovePairCallback = Malloc(12);
+var _ZTSZN28btHashedOverlappingPairCache37removeOverlappingPairsContainingProxyEP17btBroadphaseProxyP12btDispatcherE18RemovePairCallback = Malloc(129);
+var gRemovePairs = Malloc(4);
+var _ZTV28btHashedOverlappingPairCache = Malloc(76);
+var _ZTI28btHashedOverlappingPairCache = Malloc(12);
+var _ZTS28btHashedOverlappingPairCache = Malloc(31);
+var _2E_str121 = Malloc(79);
+var gAddedPairs = Malloc(4);
+var _2E_str222 = Malloc(38);
+var _2E_str323 = Malloc(77);
+var _2E_str424 = Malloc(38);
+var _2E_str525 = Malloc(38);
+var _2E_str626 = Malloc(42);
+var _2E_str727 = Malloc(22);
+var gFindPairs = Malloc(4);
+var _2E_str32 = Malloc(23);
+var _2E_str133 = Malloc(23);
+var _2E_str234 = Malloc(21);
+var _2E_str335 = Malloc(24);
+var _ZTV14btQuantizedBvh = Malloc(36);
+var _ZTI14btQuantizedBvh = Malloc(8);
+var _ZTS14btQuantizedBvh = Malloc(17);
+var _2E_str537 = Malloc(71);
+var _2E_str638 = Malloc(48);
+var _2E_str739 = Malloc(13);
+var _2E_str941 = Malloc(14);
+var _2E_str1143 = Malloc(29);
+var maxIterations = Malloc(4);
+var _2E_str1844 = Malloc(19);
+var _2E_str1921 = Malloc(32);
+var _2E_str21 = Malloc(7);
+var _2E_str2246 = Malloc(13);
+var _ZTV30btActivatingCollisionAlgorithm = Malloc(28);
+var _ZTI30btActivatingCollisionAlgorithm = Malloc(12);
+var _ZTS30btActivatingCollisionAlgorithm = Malloc(33);
+var _2E_str59 = Malloc(14);
+var _2E_str160 = Malloc(69);
+var _ZTV26btBoxBoxCollisionAlgorithm = Malloc(28);
+var _ZTI26btBoxBoxCollisionAlgorithm = Malloc(12);
+var _ZTS26btBoxBoxCollisionAlgorithm = Malloc(29);
+var _ZTI36btDiscreteCollisionDetectorInterface = Malloc(8);
+var _ZTS36btDiscreteCollisionDetectorInterface = Malloc(39);
+var _ZTV16btBoxBoxDetector = Malloc(20);
+var _ZTI16btBoxBoxDetector = Malloc(12);
+var _ZTS16btBoxBoxDetector = Malloc(19);
+var _2E_str65 = Malloc(12);
+var _2E_str166 = Malloc(71);
+var gNumManifold = Malloc(4);
+var _ZTIN36btDiscreteCollisionDetectorInterface6ResultE = Malloc(8);
+var _ZTSN36btDiscreteCollisionDetectorInterface6ResultE = Malloc(48);
+var _ZTV23btCollisionPairCallback = Malloc(20);
+var _ZTI23btCollisionPairCallback = Malloc(12);
+var _ZTS23btCollisionPairCallback = Malloc(26);
+var _2E_str169 = Malloc(45);
+var _2E_str270 = Malloc(26);
+var _2E_str371 = Malloc(14);
+var _2E_str472 = Malloc(34);
+var _2E_str573 = Malloc(76);
+var _ZTV21btCollisionDispatcher = Malloc(64);
+var _ZTI21btCollisionDispatcher = Malloc(12);
+var _ZTS21btCollisionDispatcher = Malloc(24);
+var _2E_str674 = Malloc(23);
+var _2E_str775 = Malloc(6);
+var _2E_str876 = Malloc(6);
+var _2E_str977 = Malloc(73);
+var _ZTV17btCollisionObject = Malloc(36);
+var _ZTI17btCollisionObject = Malloc(8);
+var _ZTS17btCollisionObject = Malloc(20);
+var _2E_str78 = Malloc(27);
+var _ZTIN16btCollisionWorld20ConvexResultCallbackE = Malloc(8);
+var _ZTSN16btCollisionWorld20ConvexResultCallbackE = Malloc(43);
+var _ZTI30btConvexPenetrationDepthSolver = Malloc(8);
+var _ZTS30btConvexPenetrationDepthSolver = Malloc(33);
+var _ZTVN12btConvexCast10CastResultE = Malloc(24);
+var _ZTIN12btConvexCast10CastResultE = Malloc(8);
+var _ZTSN12btConvexCast10CastResultE = Malloc(29);
+var _ZTVZN16btCollisionWorld13rayTestSingleERK11btTransformS2_P17btCollisionObjectPK16btCollisionShapeS2_RNS_17RayResultCallbackEE15LocalInfoAdder2 = Malloc(24);
+var _ZTIZN16btCollisionWorld13rayTestSingleERK11btTransformS2_P17btCollisionObjectPK16btCollisionShapeS2_RNS_17RayResultCallbackEE15LocalInfoAdder2 = Malloc(12);
+var _ZTSZN16btCollisionWorld13rayTestSingleERK11btTransformS2_P17btCollisionObjectPK16btCollisionShapeS2_RNS_17RayResultCallbackEE15LocalInfoAdder2 = Malloc(140);
+var _ZTVZN16btCollisionWorld17objectQuerySingleEPK13btConvexShapeRK11btTransformS5_P17btCollisionObjectPK16btCollisionShapeS5_RNS_20ConvexResultCallbackEfE14LocalInfoAdder = Malloc(24);
+var _ZTIZN16btCollisionWorld17objectQuerySingleEPK13btConvexShapeRK11btTransformS5_P17btCollisionObjectPK16btCollisionShapeS5_RNS_20ConvexResultCallbackEfE14LocalInfoAdder = Malloc(12);
+var _ZTSZN16btCollisionWorld17objectQuerySingleEPK13btConvexShapeRK11btTransformS5_P17btCollisionObjectPK16btCollisionShapeS5_RNS_20ConvexResultCallbackEfE14LocalInfoAdder = Malloc(164);
+var _ZTI24btBroadphaseAabbCallback = Malloc(8);
+var _ZTS24btBroadphaseAabbCallback = Malloc(27);
+var _ZTI23btBroadphaseRayCallback = Malloc(12);
+var _ZTS23btBroadphaseRayCallback = Malloc(26);
+var _ZTV17DebugDrawcallback = Malloc(44);
+var _ZTI17DebugDrawcallback = Malloc(32);
+var _ZTS17DebugDrawcallback = Malloc(20);
+var _ZTI18btTriangleCallback = Malloc(8);
+var _ZTS18btTriangleCallback = Malloc(21);
+var _ZTI31btInternalTriangleIndexCallback = Malloc(8);
+var _ZTS31btInternalTriangleIndexCallback = Malloc(34);
+var _ZTV16btCollisionWorld = Malloc(56);
+var _ZTI16btCollisionWorld = Malloc(8);
+var _ZTS16btCollisionWorld = Malloc(19);
+var _ZTI16btManifoldResult = Malloc(12);
+var _ZTS16btManifoldResult = Malloc(19);
+var _ZTV21btSingleSweepCallback = Malloc(20);
+var _ZTI21btSingleSweepCallback = Malloc(12);
+var _ZTS21btSingleSweepCallback = Malloc(24);
+var _ZTV19btSingleRayCallback = Malloc(20);
+var _ZTI19btSingleRayCallback = Malloc(12);
+var _ZTS19btSingleRayCallback = Malloc(22);
+var _2E_str382 = Malloc(23);
+var _2E_str483 = Malloc(76);
+var _2E_str584 = Malloc(19);
+var _2E_str685 = Malloc(42);
+var _2E_str786 = Malloc(16);
+var _2E_str887 = Malloc(71);
+var _2E_str988 = Malloc(82);
+var _ZTVZN16btCollisionWorld17objectQuerySingleEPK13btConvexShapeRK11btTransformS5_P17btCollisionObjectPK16btCollisionShapeS5_RNS_20ConvexResultCallbackEfE32BridgeTriangleConvexcastCallback_0 = Malloc(24);
+var _ZTIZN16btCollisionWorld17objectQuerySingleEPK13btConvexShapeRK11btTransformS5_P17btCollisionObjectPK16btCollisionShapeS5_RNS_20ConvexResultCallbackEfE32BridgeTriangleConvexcastCallback_0 = Malloc(12);
+var _ZTSZN16btCollisionWorld17objectQuerySingleEPK13btConvexShapeRK11btTransformS5_P17btCollisionObjectPK16btCollisionShapeS5_RNS_20ConvexResultCallbackEfE32BridgeTriangleConvexcastCallback_0 = Malloc(184);
+var _ZTI28btTriangleConvexcastCallback = Malloc(12);
+var _ZTS28btTriangleConvexcastCallback = Malloc(31);
+var _ZTVZN16btCollisionWorld17objectQuerySingleEPK13btConvexShapeRK11btTransformS5_P17btCollisionObjectPK16btCollisionShapeS5_RNS_20ConvexResultCallbackEfE32BridgeTriangleConvexcastCallback = Malloc(24);
+var _ZTIZN16btCollisionWorld17objectQuerySingleEPK13btConvexShapeRK11btTransformS5_P17btCollisionObjectPK16btCollisionShapeS5_RNS_20ConvexResultCallbackEfE32BridgeTriangleConvexcastCallback = Malloc(12);
+var _ZTSZN16btCollisionWorld17objectQuerySingleEPK13btConvexShapeRK11btTransformS5_P17btCollisionObjectPK16btCollisionShapeS5_RNS_20ConvexResultCallbackEfE32BridgeTriangleConvexcastCallback = Malloc(182);
+var _ZTVZN16btCollisionWorld13rayTestSingleERK11btTransformS2_P17btCollisionObjectPK16btCollisionShapeS2_RNS_17RayResultCallbackEE29BridgeTriangleRaycastCallback_0 = Malloc(24);
+var _ZTIZN16btCollisionWorld13rayTestSingleERK11btTransformS2_P17btCollisionObjectPK16btCollisionShapeS2_RNS_17RayResultCallbackEE29BridgeTriangleRaycastCallback_0 = Malloc(12);
+var _ZTSZN16btCollisionWorld13rayTestSingleERK11btTransformS2_P17btCollisionObjectPK16btCollisionShapeS2_RNS_17RayResultCallbackEE29BridgeTriangleRaycastCallback_0 = Malloc(156);
+var _ZTI25btTriangleRaycastCallback = Malloc(12);
+var _ZTS25btTriangleRaycastCallback = Malloc(28);
+var _ZTVZN16btCollisionWorld13rayTestSingleERK11btTransformS2_P17btCollisionObjectPK16btCollisionShapeS2_RNS_17RayResultCallbackEE29BridgeTriangleRaycastCallback = Malloc(24);
+var _ZTIZN16btCollisionWorld13rayTestSingleERK11btTransformS2_P17btCollisionObjectPK16btCollisionShapeS2_RNS_17RayResultCallbackEE29BridgeTriangleRaycastCallback = Malloc(12);
+var _ZTSZN16btCollisionWorld13rayTestSingleERK11btTransformS2_P17btCollisionObjectPK16btCollisionShapeS2_RNS_17RayResultCallbackEE29BridgeTriangleRaycastCallback = Malloc(154);
+var _2E_str1089 = Malloc(16);
+var _2E_str1190 = Malloc(34);
+var _2E_str1291 = Malloc(26);
+var _2E_str1392 = Malloc(26);
+var _2E_str1493 = Malloc(20);
+var _ZZN16btCollisionWorld16updateSingleAabbEP17btCollisionObjectE8reportMe_2E_b = Malloc(1);
+var _2E_str1594 = Malloc(49);
+var _2E_str1695 = Malloc(68);
+var _2E_str1796 = Malloc(65);
+var _2E_str1897 = Malloc(9);
+var _2E_str1998 = Malloc(12);
+var _ZTV22btCompoundLeafCallback = Malloc(36);
+var _ZTI22btCompoundLeafCallback = Malloc(12);
+var _ZTS22btCompoundLeafCallback = Malloc(25);
+var _2E_str99 = Malloc(42);
+var _2E_str1100 = Malloc(83);
+var _2E_str2101 = Malloc(43);
+var _2E_str3102 = Malloc(41);
+var _2E_str4103 = Malloc(43);
+var _2E_str5104 = Malloc(43);
+var _2E_str6105 = Malloc(9);
+var _2E_str7106 = Malloc(41);
+var _ZTV28btCompoundCollisionAlgorithm = Malloc(28);
+var _ZTI28btCompoundCollisionAlgorithm = Malloc(12);
+var _ZTS28btCompoundCollisionAlgorithm = Malloc(31);
+var _2E_str109 = Malloc(9);
+var _ZTV24btConvexTriangleCallback = Malloc(20);
+var _ZTI24btConvexTriangleCallback = Malloc(12);
+var _ZTS24btConvexTriangleCallback = Malloc(27);
+var _ZTVZN33btConvexConcaveCollisionAlgorithm21calculateTimeOfImpactEP17btCollisionObjectS1_RK16btDispatcherInfoP16btManifoldResultE31LocalTriangleSphereCastCallback = Malloc(20);
+var _ZTIZN33btConvexConcaveCollisionAlgorithm21calculateTimeOfImpactEP17btCollisionObjectS1_RK16btDispatcherInfoP16btManifoldResultE31LocalTriangleSphereCastCallback = Malloc(12);
+var _ZTSZN33btConvexConcaveCollisionAlgorithm21calculateTimeOfImpactEP17btCollisionObjectS1_RK16btDispatcherInfoP16btManifoldResultE31LocalTriangleSphereCastCallback = Malloc(158);
+var _ZTV15btTriangleShape = Malloc(124);
+var _ZTI15btTriangleShape = Malloc(12);
+var _ZTS15btTriangleShape = Malloc(18);
+var _ZTI23btPolyhedralConvexShape = Malloc(12);
+var _ZTS23btPolyhedralConvexShape = Malloc(26);
+var _ZTI21btConvexInternalShape = Malloc(12);
+var _ZTS21btConvexInternalShape = Malloc(24);
+var _ZTI13btConvexShape = Malloc(12);
+var _ZTS13btConvexShape = Malloc(16);
+var _ZTI16btCollisionShape = Malloc(8);
+var _ZTS16btCollisionShape = Malloc(19);
+var _2E_str1110 = Malloc(26);
+var _2E_str3112 = Malloc(66);
+var _ZTV33btConvexConcaveCollisionAlgorithm = Malloc(28);
+var _ZTI33btConvexConcaveCollisionAlgorithm = Malloc(12);
+var _ZTS33btConvexConcaveCollisionAlgorithm = Malloc(36);
+var _ZTI30btCollisionAlgorithmCreateFunc = Malloc(8);
+var _ZTS30btCollisionAlgorithmCreateFunc = Malloc(33);
+var _ZTVN23btConvexConvexAlgorithm10CreateFuncE = Malloc(20);
+var _ZTIN23btConvexConvexAlgorithm10CreateFuncE = Malloc(12);
+var _ZTSN23btConvexConvexAlgorithm10CreateFuncE = Malloc(40);
+var _ZTV24btPerturbedContactResult = Malloc(28);
+var _ZTI24btPerturbedContactResult = Malloc(12);
+var _ZTS24btPerturbedContactResult = Malloc(27);
+var _2E_str115 = Malloc(19);
+var _2E_str4119 = Malloc(49);
+var _2E_str5120 = Malloc(78);
+var _ZTV23btConvexConvexAlgorithm = Malloc(28);
+var _ZTI23btConvexConvexAlgorithm = Malloc(12);
+var _ZTS23btConvexConvexAlgorithm = Malloc(26);
+var _ZTV31btConvexPlaneCollisionAlgorithm = Malloc(28);
+var _ZTI31btConvexPlaneCollisionAlgorithm = Malloc(12);
+var _ZTS31btConvexPlaneCollisionAlgorithm = Malloc(34);
+var _ZTVN31btConvexPlaneCollisionAlgorithm10CreateFuncE = Malloc(20);
+var _ZTIN31btConvexPlaneCollisionAlgorithm10CreateFuncE = Malloc(12);
+var _ZTSN31btConvexPlaneCollisionAlgorithm10CreateFuncE = Malloc(48);
+var _ZTI24btCollisionConfiguration = Malloc(8);
+var _ZTS24btCollisionConfiguration = Malloc(27);
+var _ZTVN33btConvexConcaveCollisionAlgorithm10CreateFuncE = Malloc(20);
+var _ZTIN33btConvexConcaveCollisionAlgorithm10CreateFuncE = Malloc(12);
+var _ZTSN33btConvexConcaveCollisionAlgorithm10CreateFuncE = Malloc(50);
+var _ZTVN33btConvexConcaveCollisionAlgorithm17SwappedCreateFuncE = Malloc(20);
+var _ZTIN33btConvexConcaveCollisionAlgorithm17SwappedCreateFuncE = Malloc(12);
+var _ZTSN33btConvexConcaveCollisionAlgorithm17SwappedCreateFuncE = Malloc(57);
+var _ZTVN28btCompoundCollisionAlgorithm10CreateFuncE = Malloc(20);
+var _ZTIN28btCompoundCollisionAlgorithm10CreateFuncE = Malloc(12);
+var _ZTSN28btCompoundCollisionAlgorithm10CreateFuncE = Malloc(45);
+var _ZTVN28btCompoundCollisionAlgorithm17SwappedCreateFuncE = Malloc(20);
+var _ZTIN28btCompoundCollisionAlgorithm17SwappedCreateFuncE = Malloc(12);
+var _ZTSN28btCompoundCollisionAlgorithm17SwappedCreateFuncE = Malloc(52);
+var _ZTVN16btEmptyAlgorithm10CreateFuncE = Malloc(20);
+var _ZTIN16btEmptyAlgorithm10CreateFuncE = Malloc(12);
+var _ZTSN16btEmptyAlgorithm10CreateFuncE = Malloc(33);
+var _ZTVN32btSphereSphereCollisionAlgorithm10CreateFuncE = Malloc(20);
+var _ZTIN32btSphereSphereCollisionAlgorithm10CreateFuncE = Malloc(12);
+var _ZTSN32btSphereSphereCollisionAlgorithm10CreateFuncE = Malloc(49);
+var _ZTVN34btSphereTriangleCollisionAlgorithm10CreateFuncE = Malloc(20);
+var _ZTIN34btSphereTriangleCollisionAlgorithm10CreateFuncE = Malloc(12);
+var _ZTSN34btSphereTriangleCollisionAlgorithm10CreateFuncE = Malloc(51);
+var _ZTVN26btBoxBoxCollisionAlgorithm10CreateFuncE = Malloc(20);
+var _ZTIN26btBoxBoxCollisionAlgorithm10CreateFuncE = Malloc(12);
+var _ZTSN26btBoxBoxCollisionAlgorithm10CreateFuncE = Malloc(43);
+var _2E_str128 = Malloc(12);
+var _2E_str1129 = Malloc(42);
+var _ZTV31btDefaultCollisionConfiguration = Malloc(36);
+var _ZTI31btDefaultCollisionConfiguration = Malloc(12);
+var _ZTS31btDefaultCollisionConfiguration = Malloc(34);
+var _ZTV16btEmptyAlgorithm = Malloc(28);
+var _ZTI16btEmptyAlgorithm = Malloc(12);
+var _ZTS16btEmptyAlgorithm = Malloc(19);
+var _ZTV16btManifoldResult = Malloc(28);
+var _2E_str2149 = Malloc(31);
+var _2E_str3150 = Malloc(12);
+var _2E_str5152 = Malloc(71);
+var _2E_str155 = Malloc(28);
+var _2E_str1156 = Malloc(73);
+var _2E_str2157 = Malloc(80);
+var _2E_str3158 = Malloc(15);
+var _ZTV25btSimulationIslandManager = Malloc(24);
+var _ZTI25btSimulationIslandManager = Malloc(8);
+var _ZTS25btSimulationIslandManager = Malloc(28);
+var _ZTV32btSphereSphereCollisionAlgorithm = Malloc(28);
+var _ZTI32btSphereSphereCollisionAlgorithm = Malloc(12);
+var _ZTS32btSphereSphereCollisionAlgorithm = Malloc(35);
+var _ZTV34btSphereTriangleCollisionAlgorithm = Malloc(28);
+var _ZTI34btSphereTriangleCollisionAlgorithm = Malloc(12);
+var _ZTS34btSphereTriangleCollisionAlgorithm = Malloc(37);
+var _ZTV22SphereTriangleDetector = Malloc(20);
+var _ZTI22SphereTriangleDetector = Malloc(12);
+var _ZTS22SphereTriangleDetector = Malloc(25);
+var _2E_str173 = Malloc(4);
+var _2E_str2175 = Malloc(61);
+var _ZTV10btBoxShape = Malloc(124);
+var _ZTI10btBoxShape = Malloc(12);
+var _ZTS10btBoxShape = Malloc(13);
+var _2E_str181 = Malloc(16);
+var _ZTVZN22btBvhTriangleMeshShape14performRaycastEP18btTriangleCallbackRK9btVector3S4_E21MyNodeOverlapCallback = Malloc(20);
+var _ZTIZN22btBvhTriangleMeshShape14performRaycastEP18btTriangleCallbackRK9btVector3S4_E21MyNodeOverlapCallback = Malloc(12);
+var _ZTSZN22btBvhTriangleMeshShape14performRaycastEP18btTriangleCallbackRK9btVector3S4_E21MyNodeOverlapCallback = Malloc(104);
+var _ZTVZN22btBvhTriangleMeshShape17performConvexcastEP18btTriangleCallbackRK9btVector3S4_S4_S4_E21MyNodeOverlapCallback = Malloc(20);
+var _ZTIZN22btBvhTriangleMeshShape17performConvexcastEP18btTriangleCallbackRK9btVector3S4_S4_S4_E21MyNodeOverlapCallback = Malloc(12);
+var _ZTSZN22btBvhTriangleMeshShape17performConvexcastEP18btTriangleCallbackRK9btVector3S4_S4_S4_E21MyNodeOverlapCallback = Malloc(113);
+var _ZTVZNK22btBvhTriangleMeshShape19processAllTrianglesEP18btTriangleCallbackRK9btVector3S4_E21MyNodeOverlapCallback = Malloc(20);
+var _ZTIZNK22btBvhTriangleMeshShape19processAllTrianglesEP18btTriangleCallbackRK9btVector3S4_E21MyNodeOverlapCallback = Malloc(12);
+var _ZTSZNK22btBvhTriangleMeshShape19processAllTrianglesEP18btTriangleCallbackRK9btVector3S4_E21MyNodeOverlapCallback = Malloc(110);
+var _2E_str5186 = Malloc(70);
+var _2E_str6187 = Malloc(49);
+var _2E_str7188 = Malloc(75);
+var _2E_str8189 = Malloc(24);
+var _ZTV22btBvhTriangleMeshShape = Malloc(88);
+var _ZTI22btBvhTriangleMeshShape = Malloc(12);
+var _ZTS22btBvhTriangleMeshShape = Malloc(25);
+var _ZTI19btTriangleMeshShape = Malloc(12);
+var _ZTS19btTriangleMeshShape = Malloc(22);
+var _ZTI14btConcaveShape = Malloc(12);
+var _ZTS14btConcaveShape = Malloc(17);
+var _2E_str194 = Malloc(13);
+var _2E_str4198 = Malloc(72);
+var _2E_str6199 = Malloc(19);
+var _ZTV14btCapsuleShape = Malloc(92);
+var _ZTI14btCapsuleShape = Malloc(12);
+var _ZTS14btCapsuleShape = Malloc(17);
+var _2E_str200 = Malloc(21);
+var _ZTV14btConcaveShape = Malloc(72);
+var _2E_str219 = Malloc(7);
+var _2E_str3222 = Malloc(70);
+var _ZTV17btConvexHullShape = Malloc(120);
+var _ZTI17btConvexHullShape = Malloc(12);
+var _ZTS17btConvexHullShape = Malloc(20);
+var _ZTI34btPolyhedralConvexAabbCachingShape = Malloc(12);
+var _ZTS34btPolyhedralConvexAabbCachingShape = Malloc(37);
+var _2E_str5223 = Malloc(19);
+var _2E_str6224 = Malloc(22);
+var _2E_str6232 = Malloc(19);
+var _ZTV13btConvexShape = Malloc(92);
+var _2E_str6249 = Malloc(13);
+var _2E_str7250 = Malloc(66);
+var _ZTVZN14btOptimizedBvh5buildEP23btStridingMeshInterfacebRK9btVector3S4_E20NodeTriangleCallback = Malloc(20);
+var _ZTIZN14btOptimizedBvh5buildEP23btStridingMeshInterfacebRK9btVector3S4_E20NodeTriangleCallback = Malloc(12);
+var _ZTSZN14btOptimizedBvh5buildEP23btStridingMeshInterfacebRK9btVector3S4_E20NodeTriangleCallback = Malloc(91);
+var _ZTVZN14btOptimizedBvh5buildEP23btStridingMeshInterfacebRK9btVector3S4_E29QuantizedNodeTriangleCallback = Malloc(20);
+var _ZTIZN14btOptimizedBvh5buildEP23btStridingMeshInterfacebRK9btVector3S4_E29QuantizedNodeTriangleCallback = Malloc(12);
+var _ZTSZN14btOptimizedBvh5buildEP23btStridingMeshInterfacebRK9btVector3S4_E29QuantizedNodeTriangleCallback = Malloc(100);
+var _2E_str10306 = Malloc(67);
+var _2E_str18314 = Malloc(36);
+var _2E_str19315 = Malloc(48);
+var _2E_str20316 = Malloc(17);
+var _ZTV14btOptimizedBvh = Malloc(40);
+var _ZTI14btOptimizedBvh = Malloc(12);
+var _ZTS14btOptimizedBvh = Malloc(17);
+var _2E_str7331 = Malloc(74);
+var _ZGVZN34btPolyhedralConvexAabbCachingShape15recalcLocalAabbEvE11_directions = Malloc(8);
+var _ZZN34btPolyhedralConvexAabbCachingShape15recalcLocalAabbEvE11_directions = Malloc(96);
+var _2E_str342 = Malloc(7);
+var _ZTV13btSphereShape = Malloc(92);
+var _ZTI13btSphereShape = Malloc(12);
+var _ZTS13btSphereShape = Malloc(16);
+var _2E_str349 = Malloc(15);
+var _2E_str1350 = Malloc(27);
+var _2E_str3352 = Malloc(76);
+var _2E_str5354 = Malloc(20);
+var _2E_str6355 = Malloc(44);
+var _2E_str7356 = Malloc(15);
+var _2E_str8357 = Malloc(28);
+var _2E_str9358 = Malloc(61);
+var _ZTV23btStridingMeshInterface = Malloc(68);
+var _ZTI23btStridingMeshInterface = Malloc(8);
+var _ZTS23btStridingMeshInterface = Malloc(26);
+var _ZTV31btInternalTriangleIndexCallback = Malloc(20);
+var _ZTV18btTriangleCallback = Malloc(20);
+var _2E_str367 = Malloc(26);
+var _2E_str1368 = Malloc(79);
+var _ZTV26btTriangleIndexVertexArray = Malloc(68);
+var _ZTI26btTriangleIndexVertexArray = Malloc(12);
+var _ZTS26btTriangleIndexVertexArray = Malloc(29);
+var _2E_str372 = Malloc(13);
+var _ZTV21SupportVertexCallback = Malloc(20);
+var _ZTI21SupportVertexCallback = Malloc(12);
+var _ZTS21SupportVertexCallback = Malloc(24);
+var _ZTVZNK19btTriangleMeshShape19processAllTrianglesEP18btTriangleCallbackRK9btVector3S4_E16FilteredCallback = Malloc(20);
+var _ZTIZNK19btTriangleMeshShape19processAllTrianglesEP18btTriangleCallbackRK9btVector3S4_E16FilteredCallback = Malloc(12);
+var _ZTSZNK19btTriangleMeshShape19processAllTrianglesEP18btTriangleCallbackRK9btVector3S4_E16FilteredCallback = Malloc(102);
+var _2E_str3375 = Malloc(72);
+var _ZTV19btTriangleMeshShape = Malloc(80);
+var _ZTV16btPointCollector = Malloc(28);
+var _ZTI16btPointCollector = Malloc(12);
+var _ZTS16btPointCollector = Malloc(19);
+var _ZTV27btContinuousConvexCollision = Malloc(20);
+var _ZTI27btContinuousConvexCollision = Malloc(12);
+var _ZTS27btContinuousConvexCollision = Malloc(30);
+var _ZTI12btConvexCast = Malloc(8);
+var _ZTS12btConvexCast = Malloc(15);
+var _ZTV12btConvexCast = Malloc(20);
+var _ZTV15btGjkConvexCast = Malloc(20);
+var _ZTI15btGjkConvexCast = Malloc(12);
+var _ZTS15btGjkConvexCast = Malloc(18);
+var _ZZN12gjkepa2_impl3GJK13projectoriginERK9btVector3S3_S3_PfRjE4imd3 = Malloc(12);
+var _ZZN12gjkepa2_impl3EPA6expandEjPNS_3GJK3sSVEPNS0_5sFaceEjRNS0_8sHorizonEE4i2m3 = Malloc(12);
+var _ZTV30btGjkEpaPenetrationDepthSolver = Malloc(20);
+var _ZTI30btGjkEpaPenetrationDepthSolver = Malloc(12);
+var _ZTS30btGjkEpaPenetrationDepthSolver = Malloc(33);
+var gNumDeepPenetrationChecks = Malloc(4);
+var _ZTV17btGjkPairDetector = Malloc(20);
+var _ZTI17btGjkPairDetector = Malloc(12);
+var _ZTS17btGjkPairDetector = Malloc(20);
+var gNumGjkChecks = Malloc(4);
+var _2E_str425 = Malloc(39);
+var _2E_str1426 = Malloc(71);
+var _2E_str2427 = Malloc(18);
+var _2E_str3428 = Malloc(75);
+var gContactBreakingThreshold = Malloc(4);
+var _2E_str434 = Malloc(52);
+var _2E_str3437 = Malloc(78);
+var _2E_str4438 = Malloc(50);
+var _ZTV28btTriangleConvexcastCallback = Malloc(24);
+var _ZTV22btSubsimplexConvexCast = Malloc(20);
+var _ZTI22btSubsimplexConvexCast = Malloc(12);
+var _ZTS22btSubsimplexConvexCast = Malloc(25);
+var _2E_str457 = Malloc(16);
+var _2E_str1458 = Malloc(80);
+var _ZTVN16btCollisionWorld27ClosestConvexResultCallbackE = Malloc(24);
+var _ZTIN16btCollisionWorld27ClosestConvexResultCallbackE = Malloc(12);
+var _ZTSN16btCollisionWorld27ClosestConvexResultCallbackE = Malloc(50);
+var _2E_str36 = Malloc(51);
+var _2E_str239 = Malloc(26);
+var _ZTV21btConeTwistConstraint = Malloc(52);
+var _ZTI21btConeTwistConstraint = Malloc(12);
+var _ZTS21btConeTwistConstraint = Malloc(24);
+var _2E_str1340 = Malloc(37);
+var _2E_str24 = Malloc(74);
+var _2E_str442 = Malloc(37);
+var _2E_str543 = Malloc(37);
+var _2E_str846 = Malloc(24);
+var _2E_str947 = Malloc(66);
+var _2E_str1149 = Malloc(30);
+var _2E_str29 = Malloc(27);
+var _ZTV17btHingeConstraint = Malloc(52);
+var _ZTI17btHingeConstraint = Malloc(12);
+var _ZTS17btHingeConstraint = Malloc(20);
+var _2E_str130 = Malloc(34);
+var _2E_str231 = Malloc(70);
+var _2E_str332 = Malloc(34);
+var _2E_str433 = Malloc(34);
+var gNumSplitImpulseRecoveries = Malloc(4);
+var _ZTI18btConstraintSolver = Malloc(8);
+var _ZTS18btConstraintSolver = Malloc(21);
+var _ZTV35btSequentialImpulseConstraintSolver = Malloc(48);
+var _ZTI35btSequentialImpulseConstraintSolver = Malloc(12);
+var _ZTS35btSequentialImpulseConstraintSolver = Malloc(38);
+var _ZGVZN35btSequentialImpulseConstraintSolver12getFixedBodyEvE7s_fixed = Malloc(8);
+var _ZZN35btSequentialImpulseConstraintSolver12getFixedBodyEvE7s_fixed = Malloc(608);
+var _2E_str248 = Malloc(27);
+var _2E_str34955 = Malloc(54);
+var _2E_str450 = Malloc(11);
+var _2E_str551 = Malloc(7);
+var _2E_str652 = Malloc(88);
+var _2E_str753 = Malloc(10);
+var _2E_str854 = Malloc(34);
+var _2E_str955 = Malloc(3);
+var _2E_str1056 = Malloc(29);
+var _2E_str1157 = Malloc(24);
+var _2E_str76 = Malloc(22);
+var _ZTI23btDiscreteDynamicsWorld = Malloc(12);
+var _ZTS23btDiscreteDynamicsWorld = Malloc(26);
+var _ZTI15btDynamicsWorld = Malloc(12);
+var _ZTS15btDynamicsWorld = Malloc(18);
+var _ZTIN25btSimulationIslandManager14IslandCallbackE = Malloc(8);
+var _ZTSN25btSimulationIslandManager14IslandCallbackE = Malloc(46);
+var _ZTV34btClosestNotMeConvexResultCallback = Malloc(24);
+var _ZTI34btClosestNotMeConvexResultCallback = Malloc(12);
+var _ZTS34btClosestNotMeConvexResultCallback = Malloc(37);
+var _ZTVZN23btDiscreteDynamicsWorld16solveConstraintsER19btContactSolverInfoE27InplaceSolverIslandCallback = Malloc(20);
+var _ZTIZN23btDiscreteDynamicsWorld16solveConstraintsER19btContactSolverInfoE27InplaceSolverIslandCallback = Malloc(12);
+var _ZTSZN23btDiscreteDynamicsWorld16solveConstraintsER19btContactSolverInfoE27InplaceSolverIslandCallback = Malloc(99);
+var _2E_str87 = Malloc(26);
+var _2E_str188 = Malloc(27);
+var _2E_str289 = Malloc(14);
+var _2E_str794 = Malloc(20);
+var _2E_str895 = Malloc(20);
+var gNumClampedCcdMotions = Malloc(4);
+var _2E_str996 = Malloc(17);
+var _2E_str1097 = Malloc(22);
+var _2E_str1198 = Malloc(29);
+var _2E_str1299 = Malloc(15);
+var _2E_str13100 = Malloc(5);
+var _2E_str1461 = Malloc(68);
+var _2E_str1562 = Malloc(24);
+var _2E_str16101 = Malloc(15);
+var _ZTV15btDynamicsWorld = Malloc(140);
+var _ZTV23btDiscreteDynamicsWorld = Malloc(180);
+var _ZL8uniqueId = Malloc(4);
+var _ZTV11btRigidBody = Malloc(36);
+var _ZTI11btRigidBody = Malloc(12);
+var _ZTS11btRigidBody = Malloc(14);
+var _2E_str4144 = Malloc(21);
+var gDisableDeactivation = Malloc(1);
+var gNumAlignedAllocs = Malloc(4);
+var gNumAlignedFree = Malloc(4);
+var _ZN15CProfileManager12FrameCounterE = Malloc(4);
+var _ZN15CProfileManager4RootE = Malloc(32);
+var _ZL13gProfileClock_2E_0 = Malloc(4);
+var _ZN15CProfileManager11CurrentNodeE = Malloc(4);
+var _2E_str729 = Malloc(5);
+var _ZN4__rwL12__rw_catlistE_2E_0 = Malloc(4);
+var _ZN4__rwL12__rw_catlistE_2E_1 = Malloc(4);
+var _ZN4__rwL12__rw_catlistE_2E_2 = Malloc(4);
+var llvm_2E_eh_2E_catch_2E_all_2E_value = Malloc(4);
+var _ZTIN4__rw10__rw_facetE = Malloc(12);
+var _ZTSN4__rw10__rw_facetE = Malloc(20);
+var _ZTIN4__rw17__rw_synchronizedE = Malloc(8);
+var _ZTSN4__rw17__rw_synchronizedE = Malloc(27);
+var _2E_str4131 = Malloc(10);
+var _2E_str15132 = Malloc(21);
+var _2E_str26 = Malloc(1);
+var _ZN4__rwL13__rw_what_bufE = Malloc(256);
+var _ZN4__rwL16__rw_what_refcntE = Malloc(4);
+var _2E_str3133 = Malloc(16);
+var _2E_str47 = Malloc(25);
+var _2E_str5134 = Malloc(18);
+var _ZZN4__rwL13__rw_vfmtwhatEPcjiS0_E7__fname = Malloc(4);
+var _ZZN4__rwL13__rw_vfmtwhatEPcjiS0_E6buffer = Malloc(11);
+var _2E_str7136 = Malloc(3);
+var _ZZN4__rwL13__rw_vfmtwhatEPcjiS0_E8__catset = Malloc(4);
+var _ZZN4__rwL13__rw_vfmtwhatEPcjiS0_E4msgs = Malloc(32);
+var _ZZN4__rwL13__rw_vfmtwhatEPcjiS0_E5__cat = Malloc(4);
+var _ZZN4__rw10__rw_throwEizE6errors = Malloc(100);
+var _2E_str8137 = Malloc(26);
+var _2E_str9138 = Malloc(18);
+var _2E_str10139 = Malloc(29);
+var _2E_str11140 = Malloc(33);
+var _2E_str12141 = Malloc(17);
+var _2E_str138142 = Malloc(20);
+var _2E_str14143 = Malloc(21);
+var _2E_str159144 = Malloc(25);
+var _2E_str16145 = Malloc(51);
+var _2E_str17146 = Malloc(47);
+var _2E_str18147 = Malloc(22);
+var _2E_str19148 = Malloc(44);
+var _2E_str20149 = Malloc(23);
+var _2E_str21150 = Malloc(24);
+var _2E_str22151 = Malloc(39);
+var _2E_str23152 = Malloc(38);
+var _2E_str24153 = Malloc(38);
+var _2E_str25154 = Malloc(29);
+var _2E_str2610 = Malloc(44);
+var _2E_str27 = Malloc(30);
+var _2E_str28155 = Malloc(40);
+var _2E_str29156 = Malloc(26);
+var _2E_str30 = Malloc(27);
+var _2E_str31 = Malloc(30);
+var _2E_str32157 = Malloc(32);
+var _2E_str33 = Malloc(11);
+var _2E_str134 = Malloc(9);
+var _2E_str235 = Malloc(12);
+var _2E_str336 = Malloc(11);
+var _2E_str437 = Malloc(8);
+var _ZTVN4__rw10__rw_facetE = Malloc(16);
+var _2E_str538 = Malloc(2);
+var _ZZN4__rw10__rw_facet9_C_manageEPS0_NS0_13_C_facet_typeEPKcPFS1_jS4_EE12n_std_facets = Malloc(4);
+var _ZZN4__rw10__rw_facet9_C_manageEPS0_NS0_13_C_facet_typeEPKcPFS1_jS4_EE10std_facets = Malloc(4);
+var _ZZN4__rw10__rw_facet9_C_manageEPS0_NS0_13_C_facet_typeEPKcPFS1_jS4_EE13std_facet_buf = Malloc(1664);
+var _ZZN4__rw10__rw_facet9_C_manageEPS0_NS0_13_C_facet_typeEPKcPFS1_jS4_EE17std_facet_bufsize = Malloc(4);
+var _ZZN4__rw10__rw_facetD4EvE9destroyed = Malloc(24);
+var _ZN4__rw9__rw_catsE = Malloc(72);
+var _2E_str785 = Malloc(2);
+var _ZZN4__rw11__rw_locale9_C_manageEPS0_PKcE6global = Malloc(4);
+var _ZZN4__rw11__rw_locale9_C_manageEPS0_PKcE5ginit = Malloc(4);
+var _ZZN4__rw11__rw_locale9_C_manageEPS0_PKcE9n_locales = Malloc(4);
+var _ZZN4__rw11__rw_locale9_C_manageEPS0_PKcE7locales = Malloc(4);
+var _ZZN4__rw11__rw_locale9_C_manageEPS0_PKcE10locale_buf = Malloc(32);
+var _ZZN4__rw11__rw_locale9_C_manageEPS0_PKcE14locale_bufsize = Malloc(4);
+var _ZZN4__rw11__rw_locale9_C_manageEPS0_PKcE7classic = Malloc(4);
+var _ZZN4__rw11__rw_locale9_C_manageEPS0_PKcE12classic_body = Malloc(172);
+var _ZN4__rwL22__rw_classic_once_initE_2E_0_2E_b = Malloc(1);
+var _ZN4__rwL12__rw_classicE = Malloc(4);
+var _2E_str292167 = Malloc(4);
+var _2E_str10100175 = Malloc(29);
+var _2E_str12102177 = Malloc(33);
+var _ZZN4__rwL20__rw_manage_cat_dataERiPNS_18__rw_open_cat_dataEE4init_2E_b = Malloc(1);
+var _ZZN4__rwL20__rw_manage_cat_dataERiPNS_18__rw_open_cat_dataEE8catalogs = Malloc(4);
+var _ZZN4__rwL20__rw_manage_cat_dataERiPNS_18__rw_open_cat_dataEE11catalog_buf = Malloc(64);
+var _ZZN4__rwL20__rw_manage_cat_dataERiPNS_18__rw_open_cat_dataEE15catalog_bufsize = Malloc(4);
+var _ZZN4__rwL20__rw_manage_cat_dataERiPNS_18__rw_open_cat_dataEE10n_catalogs = Malloc(4);
+var _ZZN4__rwL20__rw_manage_cat_dataERiPNS_18__rw_open_cat_dataEE11largest_cat = Malloc(4);
+var _2E_str115180 = Malloc(27);
+var _2E_str1116181 = Malloc(25);
+var _2E_str2131 = Malloc(2);
+var _2E_str4133 = Malloc(2);
+var _ZZN4__rw16__rw_locale_nameEiPKcRNS_14__rw_pod_arrayIcLj256EEEE11locale_root = Malloc(259);
+var _ZNSs11_C_null_refE = Malloc(16);
+var _ZTVSt8messagesIcE = Malloc(28);
+var _ZTISt8messagesIcE = Malloc(32);
+var _ZTSSt8messagesIcE = Malloc(15);
+var _ZTISt13messages_base = Malloc(8);
+var _ZTSSt13messages_base = Malloc(18);
+var _2E_str2360 = Malloc(31);
+var _2E_str3361 = Malloc(48);
+var _2E_str4362 = Malloc(31);
+var _ZTVSt9type_info = Malloc(24);
+var _ZTISt9type_info = Malloc(8);
+var _ZTSSt9type_info = Malloc(13);
+var s_max_memory = Malloc(4);
+var s_current_memory = Malloc(4);
+var block_null = Malloc(16);
+var _2E_str643 = Malloc(57);
+var _2E_str1648 = Malloc(3);
+var _2E_str4651 = Malloc(4);
+var _2E_str5652 = Malloc(4);
+var my_ctype = Malloc(1028);
+var _ZL8nextRand = Malloc(4);
+var _2E_str7654 = Malloc(4);
+var _2E_str9655 = Malloc(4);
+var _ZL8pad_line = Malloc(64);
+var _ZL10strtok_pos = Malloc(4);
+var _ZTI14CFileInterface = Malloc(8);
+var _ZTS14CFileInterface = Malloc(17);
+var _ZTV11CFileSystem = Malloc(44);
+var _ZTI11CFileSystem = Malloc(12);
+var _ZTS11CFileSystem = Malloc(14);
+var _ZL13s_file_stdout = Malloc(4);
+var _ZTV7CFileLS = Malloc(44);
+var _ZTI7CFileLS = Malloc(12);
+var _ZTS7CFileLS = Malloc(9);
+var _ZTV10CFileCloud = Malloc(44);
+var _ZTI10CFileCloud = Malloc(12);
+var _ZTS10CFileCloud = Malloc(13);
+var _ZL10s_aSockets = Malloc(262336);
+var _ZTV11CFileStdout = Malloc(44);
+var _ZTI11CFileStdout = Malloc(12);
+var _ZTS11CFileStdout = Malloc(14);
+var _2E_str31677 = Malloc(4);
+var _2E_str32678 = Malloc(4);
+var _2E_str33679 = Malloc(5);
+var _2E_str34680 = Malloc(8);
+var _2E_str35681 = Malloc(53);
+var _2E_str37683 = Malloc(4);
+var _2E_str38684 = Malloc(7);
+var _ZN12mandreel_b64L9b64_charsE = Malloc(65);
+var _ZN12mandreel_b64L11b64_indexesE = Malloc(256);
+var _ZL25s_mandreel_internal_width = Malloc(4);
+var _ZL26s_mandreel_internal_height = Malloc(4);
+var g_msgcallback = Malloc(4);
+var _ZL24g_pFirstTextureAsyncInfo = Malloc(4);
+var _ZL17g_apPackFileNames = Malloc(1024);
+var _ZGVZ21Mandreel_GetTickCountE7s_first = Malloc(8);
+var _ZZ21Mandreel_GetTickCountE7s_first = Malloc(8);
+var _ZZ29__mandreel_internal_preupdateE8s_bfirst_2E_b = Malloc(1);
+var _2E_str779 = Malloc(13);
+var _2E_str3782 = Malloc(13);
+var _2E_str4783 = Malloc(37);
+var _2E_str5784 = Malloc(12);
+var _2E_str6785 = Malloc(17);
+var _ZZ24__mandreel_internal_initE54s_723478567_mandreel___mandreel_internal_SetResolution = Malloc(4);
+var _ZZ24__mandreel_internal_initE56s_723478567_mandreel_iMandreel_TextureAsync_IsCompressed = Malloc(4);
+var _ZZ24__mandreel_internal_initE57s_723478567_mandreel_iMandreel_TextureAsync_GetPackOffset = Malloc(4);
+var _ZZ24__mandreel_internal_initE29s_723478567_mandreel___resize = Malloc(4);
+var _ZZ24__mandreel_internal_initE48s_723478567_mandreel_imandreel_restore_glcontext = Malloc(4);
+var _ZZ24__mandreel_internal_initE46s_723478567_mandreel_imandreel_viewport_resize = Malloc(4);
+var _ZTVN10__cxxabiv120__si_class_type_infoE = Malloc(40);
+var _ZTIN10__cxxabiv120__si_class_type_infoE = Malloc(12);
+var _ZTSN10__cxxabiv120__si_class_type_infoE = Malloc(37);
+var _ZTIN10__cxxabiv117__class_type_infoE = Malloc(12);
+var _ZTSN10__cxxabiv117__class_type_infoE = Malloc(34);
+var _ZTVN10__cxxabiv117__class_type_infoE = Malloc(40);
+var _ZTVN10__cxxabiv121__vmi_class_type_infoE = Malloc(40);
+var _ZTIN10__cxxabiv121__vmi_class_type_infoE = Malloc(12);
+var _ZTSN10__cxxabiv121__vmi_class_type_infoE = Malloc(38);
+var _ZL11g_aChannels = Malloc(9344);
+var _ZL7g_bInit_2E_b = Malloc(1);
+var _2E_str221 = Malloc(8);
+var _2E_str1222 = Malloc(21);
+var _ZL21g_pFirstSoundDuration = Malloc(4);
+var _2E_str3224 = Malloc(71);
+var _2E_str4225 = Malloc(8);
+var _ZL15g_iFreeChannels = Malloc(4);
+var _ZL15g_aFreeChannels = Malloc(128);
+var _ZL6g_bLog = Malloc(1);
+var _2E_str12233 = Malloc(5);
+var _2E_str22243 = Malloc(21);
+var _2E_str24245 = Malloc(86);
+var _2E_str26247 = Malloc(8);
+var _2E_str27248 = Malloc(4);
+var _2E_str28249 = Malloc(60);
+var _2E_str29250 = Malloc(10);
+var _2E_str30251 = Malloc(3);
+var _2E_str31252 = Malloc(75);
+var _2E_str32253 = Malloc(5);
+var _2E_str33254 = Malloc(4);
+var _2E_str34255 = Malloc(9);
+var _2E_str35256 = Malloc(22);
+var _ZZL32_mandreel_init_tcp_socket_librayvE47s_723478567_mandreel_mandreel_flash_tcp_onError = Malloc(4);
+var _ZL13s_fifo_errors = Malloc(24);
+var _ZN5my_glL9m_contextE = Malloc(324);
+var llvm_2E_global_ctors = Malloc(40);
+var llvm_2E_global_dtors = Malloc(56);
+var llvm_2E_used = Malloc(300);
+function global_init(stackPos)
+{
+initHeap();
+emit_start(Landscape02Vtx)
+emit_32(3279552512);
+emit_32(1077902238);
+emit_32(1122144223);
+emit_32(3279552512);
+emit_32(1074513450);
+emit_32(1122656322);
+emit_32(3279296528);
+emit_32(1070576131);
+emit_32(1122144223);
+emit_32(3279296528);
+emit_32(1069684087);
+emit_32(1122656322);
+emit_32(3279040545);
+emit_32(1062793197);
+emit_32(1122144223);
+emit_32(3279040545);
+emit_32(1059117578);
+emit_32(1122656322);
+emit_32(3278784496);
+emit_32(3207760682);
+emit_32(1122144223);
+emit_32(3278784496);
+emit_32(3205587983);
+emit_32(1122656322);
+emit_32(3278528512);
+emit_32(3223956593);
+emit_32(1122144223);
+emit_32(3278528512);
+emit_32(3221291239);
+emit_32(1122656322);
+emit_32(3278272528);
+emit_32(3228867536);
+emit_32(1122144223);
+emit_32(3278272528);
+emit_32(3227143174);
+emit_32(1122656322);
+emit_32(3278016545);
+emit_32(3229577925);
+emit_32(1122144223);
+emit_32(3278016545);
+emit_32(3228890898);
+emit_32(1122656322);
+emit_32(3277760496);
+emit_32(3232782164);
+emit_32(1122144223);
+emit_32(3277760496);
+emit_32(3231744493);
+emit_32(1122656322);
+emit_32(3277504512);
+emit_32(3233030424);
+emit_32(1122144223);
+emit_32(3277504512);
+emit_32(3231183211);
+emit_32(1122656322);
+emit_32(3277248528);
+emit_32(3231512296);
+emit_32(1122144223);
+emit_32(3277248528);
+emit_32(3226713845);
+emit_32(1122656322);
+emit_32(3276992545);
+emit_32(3225240260);
+emit_32(1122144223);
+emit_32(3276992545);
+emit_32(3222588579);
+emit_32(1122656322);
+emit_32(3276736496);
+emit_32(3223081116);
+emit_32(1122144223);
+emit_32(3276736496);
+emit_32(3218835474);
+emit_32(1122656322);
+emit_32(3276480512);
+emit_32(3217103310);
+emit_32(1122144223);
+emit_32(3276480512);
+emit_32(3214447728);
+emit_32(1122656322);
+emit_32(3276224528);
+emit_32(3188062822);
+emit_32(1122144223);
+emit_32(3276224528);
+emit_32(1046529045);
+emit_32(1122656322);
+emit_32(3275968545);
+emit_32(1065108554);
+emit_32(1122144223);
+emit_32(3275968545);
+emit_32(1070915199);
+emit_32(1122656322);
+emit_32(3275712496);
+emit_32(1078777673);
+emit_32(1122144223);
+emit_32(3275712496);
+emit_32(1082866637);
+emit_32(1122656322);
+emit_32(3275456512);
+emit_32(1083552091);
+emit_32(1122144223);
+emit_32(3275456512);
+emit_32(1087021578);
+emit_32(1122656322);
+emit_32(3275200528);
+emit_32(1086679197);
+emit_32(1122144223);
+emit_32(3275200528);
+emit_32(1090529232);
+emit_32(1122656322);
+emit_32(3274944545);
+emit_32(1090716539);
+emit_32(1122144223);
+emit_32(3274944545);
+emit_32(1092317201);
+emit_32(1122656322);
+emit_32(3274688496);
+emit_32(1091935477);
+emit_32(1122144223);
+emit_32(3274688496);
+emit_32(1093426427);
+emit_32(1122656322);
+emit_32(3274432512);
+emit_32(1092098877);
+emit_32(1122144223);
+emit_32(3274432512);
+emit_32(1094040158);
+emit_32(1122656322);
+emit_32(3274176528);
+emit_32(1094849764);
+emit_32(1122144223);
+emit_32(3274176528);
+emit_32(1095262693);
+emit_32(1122656322);
+emit_32(3273920545);
+emit_32(1097725693);
+emit_32(1122144223);
+emit_32(3273920545);
+emit_32(1097468792);
+emit_32(1122656322);
+emit_32(3273664496);
+emit_32(1099104833);
+emit_32(1122144223);
+emit_32(3273664496);
+emit_32(1099540411);
+emit_32(1122656322);
+emit_32(3273408512);
+emit_32(1100237609);
+emit_32(1122144223);
+emit_32(3273408512);
+emit_32(1100993213);
+emit_32(1122656322);
+emit_32(3273152528);
+emit_32(1102296436);
+emit_32(1122144223);
+emit_32(3273152528);
+emit_32(1102819203);
+emit_32(1122656322);
+emit_32(3272896545);
+emit_32(1104227022);
+emit_32(1122144223);
+emit_32(3272896545);
+emit_32(1104470763);
+emit_32(1122656322);
+emit_32(3272640496);
+emit_32(1105517399);
+emit_32(1122144223);
+emit_32(3272640496);
+emit_32(1105442111);
+emit_32(1122656322);
+emit_32(3272384512);
+emit_32(1106394218);
+emit_32(1122144223);
+emit_32(3272384512);
+emit_32(1106127356);
+emit_32(1122656322);
+emit_32(3272128528);
+emit_32(1107354688);
+emit_32(1122144223);
+emit_32(3272128528);
+emit_32(1106807829);
+emit_32(1122656322);
+emit_32(3271872545);
+emit_32(1107530062);
+emit_32(1122144223);
+emit_32(3271872545);
+emit_32(1107212108);
+emit_32(1122656322);
+emit_32(3271616496);
+emit_32(1107693221);
+emit_32(1122144223);
+emit_32(3271616496);
+emit_32(1107339719);
+emit_32(1122656322);
+emit_32(3271163904);
+emit_32(1108003075);
+emit_32(1122144223);
+emit_32(3271163904);
+emit_32(1108016575);
+emit_32(1122656322);
+emit_32(3270651937);
+emit_32(1108711703);
+emit_32(1122144223);
+emit_32(3270651937);
+emit_32(1108361190);
+emit_32(1122656322);
+emit_32(3270139970);
+emit_32(1108881283);
+emit_32(1122144223);
+emit_32(3270139970);
+emit_32(1108677807);
+emit_32(1122656322);
+emit_32(3269627871);
+emit_32(1108829956);
+emit_32(1122144223);
+emit_32(3269627871);
+emit_32(1108698045);
+emit_32(1122656322);
+emit_32(3269115904);
+emit_32(1108842486);
+emit_32(1122144223);
+emit_32(3269115904);
+emit_32(1108670415);
+emit_32(1122656322);
+emit_32(3268603937);
+emit_32(1108356995);
+emit_32(1122144223);
+emit_32(3268603937);
+emit_32(1108385307);
+emit_32(1122656322);
+emit_32(3268091970);
+emit_32(1107850324);
+emit_32(1122144223);
+emit_32(3268091970);
+emit_32(1107664044);
+emit_32(1122656322);
+emit_32(3267579911);
+emit_32(1107320504);
+emit_32(1122144223);
+emit_32(3267579911);
+emit_32(1106926109);
+emit_32(1122656322);
+emit_32(3267067904);
+emit_32(1106158866);
+emit_32(1122144223);
+emit_32(3267067904);
+emit_32(1105983491);
+emit_32(1122656322);
+emit_32(3266555911);
+emit_32(1106326271);
+emit_32(1122144223);
+emit_32(3266555911);
+emit_32(1105752542);
+emit_32(1122656322);
+emit_32(3266043904);
+emit_32(1105638300);
+emit_32(1122144223);
+emit_32(3266043904);
+emit_32(1105343650);
+emit_32(1122656322);
+emit_32(3265531911);
+emit_32(1104660451);
+emit_32(1122144223);
+emit_32(3265531911);
+emit_32(1104481983);
+emit_32(1122656322);
+emit_32(3265019904);
+emit_32(1103867255);
+emit_32(1122144223);
+emit_32(3265019904);
+emit_32(1103536377);
+emit_32(1122656322);
+emit_32(3264507911);
+emit_32(1102764940);
+emit_32(1122144223);
+emit_32(3264507911);
+emit_32(1102421374);
+emit_32(1122656322);
+emit_32(3263995904);
+emit_32(1101613761);
+emit_32(1122144223);
+emit_32(3263995904);
+emit_32(1101252526);
+emit_32(1122656322);
+emit_32(3263483911);
+emit_32(1100019768);
+emit_32(1122144223);
+emit_32(3263483911);
+emit_32(1099947835);
+emit_32(1122656322);
+emit_32(3262775296);
+emit_32(1099086483);
+emit_32(1122144223);
+emit_32(3262775296);
+emit_32(1099066665);
+emit_32(1122656322);
+emit_32(3261751309);
+emit_32(1097937715);
+emit_32(1122144223);
+emit_32(3261751309);
+emit_32(1097029334);
+emit_32(1122656322);
+emit_32(3260727296);
+emit_32(1097070753);
+emit_32(1122144223);
+emit_32(3260727296);
+emit_32(1095561223);
+emit_32(1122656322);
+emit_32(3259703309);
+emit_32(1096595014);
+emit_32(1122144223);
+emit_32(3259703309);
+emit_32(1095286181);
+emit_32(1122656322);
+emit_32(3258679296);
+emit_32(1095456365);
+emit_32(1122144223);
+emit_32(3258679296);
+emit_32(1094900095);
+emit_32(1122656322);
+emit_32(3257655309);
+emit_32(1093219752);
+emit_32(1122144223);
+emit_32(3257655309);
+emit_32(1093810625);
+emit_32(1122656322);
+emit_32(3256631296);
+emit_32(1092609303);
+emit_32(1122144223);
+emit_32(3256631296);
+emit_32(1093100949);
+emit_32(1122656322);
+emit_32(3255607309);
+emit_32(1093762915);
+emit_32(1122144223);
+emit_32(3255607309);
+emit_32(1093720133);
+emit_32(1122656322);
+emit_32(3254386688);
+emit_32(1094666473);
+emit_32(1122144223);
+emit_32(3254386688);
+emit_32(1094140822);
+emit_32(1122656322);
+emit_32(3252338714);
+emit_32(1094266021);
+emit_32(1122144223);
+emit_32(3252338714);
+emit_32(1093200983);
+emit_32(1122656322);
+emit_32(3250290688);
+emit_32(1093706396);
+emit_32(1122144223);
+emit_32(3250290688);
+emit_32(1093279731);
+emit_32(1122656322);
+emit_32(3248242714);
+emit_32(1095255038);
+emit_32(1122144223);
+emit_32(3248242714);
+emit_32(1095297296);
+emit_32(1122656322);
+emit_32(3245998080);
+emit_32(1096659501);
+emit_32(1122144223);
+emit_32(3245998080);
+emit_32(1096326998);
+emit_32(1122656322);
+emit_32(3241902132);
+emit_32(1097360998);
+emit_32(1122144223);
+emit_32(3241902132);
+emit_32(1097208116);
+emit_32(1122656322);
+emit_32(3237609472);
+emit_32(1097602590);
+emit_32(1122144223);
+emit_32(3237609472);
+emit_32(1098363332);
+emit_32(1122656322);
+emit_32(3229220864);
+emit_32(1098820406);
+emit_32(1122144223);
+emit_32(3229220864);
+emit_32(1098960496);
+emit_32(1122656322);
+emit_32(0);
+emit_32(1099470104);
+emit_32(1122144223);
+emit_32(0);
+emit_32(1099624612);
+emit_32(1122656322);
+emit_32(1081737216);
+emit_32(1100139620);
+emit_32(1122144223);
+emit_32(1081737216);
+emit_32(1100438045);
+emit_32(1122656322);
+emit_32(3279552512);
+emit_32(1083519019);
+emit_32(1121632256);
+emit_32(3279296528);
+emit_32(1074813133);
+emit_32(1121632256);
+emit_32(3279040545);
+emit_32(1064894426);
+emit_32(1121632256);
+emit_32(3278784496);
+emit_32(3220842029);
+emit_32(1121632256);
+emit_32(3278528512);
+emit_32(3224334626);
+emit_32(1121632256);
+emit_32(3278272528);
+emit_32(3228042265);
+emit_32(1121632256);
+emit_32(3278016545);
+emit_32(3230773910);
+emit_32(1121632256);
+emit_32(3277760496);
+emit_32(3234673249);
+emit_32(1121632256);
+emit_32(3277504512);
+emit_32(3235346205);
+emit_32(1121632256);
+emit_32(3277248528);
+emit_32(3233634383);
+emit_32(1121632256);
+emit_32(3276992545);
+emit_32(3231165889);
+emit_32(1121632256);
+emit_32(3276736496);
+emit_32(3226724414);
+emit_32(1121632256);
+emit_32(3276480512);
+emit_32(3221509175);
+emit_32(1121632256);
+emit_32(3276224528);
+emit_32(3212320830);
+emit_32(1121632256);
+emit_32(3275968545);
+emit_32(1049206085);
+emit_32(1121632256);
+emit_32(3275712496);
+emit_32(1073305532);
+emit_32(1121632256);
+emit_32(3275456512);
+emit_32(1077128892);
+emit_32(1121632256);
+emit_32(3275200528);
+emit_32(1082594553);
+emit_32(1121632256);
+emit_32(3274944545);
+emit_32(1084662177);
+emit_32(1121632256);
+emit_32(3274688496);
+emit_32(1089411681);
+emit_32(1121632256);
+emit_32(3274432512);
+emit_32(1092042275);
+emit_32(1121632256);
+emit_32(3274176528);
+emit_32(1095387054);
+emit_32(1121632256);
+emit_32(3273920545);
+emit_32(1097794270);
+emit_32(1121632256);
+emit_32(3273664496);
+emit_32(1099325348);
+emit_32(1121632256);
+emit_32(3273408512);
+emit_32(1100750678);
+emit_32(1121632256);
+emit_32(3273152528);
+emit_32(1101739065);
+emit_32(1121632256);
+emit_32(3272896545);
+emit_32(1103692248);
+emit_32(1121632256);
+emit_32(3272640496);
+emit_32(1105414167);
+emit_32(1121632256);
+emit_32(3272384512);
+emit_32(1106644671);
+emit_32(1121632256);
+emit_32(3272128528);
+emit_32(1107563486);
+emit_32(1121632256);
+emit_32(3271872545);
+emit_32(1107577274);
+emit_32(1121632256);
+emit_32(3271616496);
+emit_32(1107593999);
+emit_32(1121632256);
+emit_32(3271163904);
+emit_32(1108097080);
+emit_32(1121632256);
+emit_32(3270651937);
+emit_32(1108460883);
+emit_32(1121632256);
+emit_32(3270139970);
+emit_32(1108954710);
+emit_32(1121632256);
+emit_32(3269627871);
+emit_32(1109009079);
+emit_32(1121632256);
+emit_32(3269115904);
+emit_32(1108610279);
+emit_32(1121632256);
+emit_32(3268603937);
+emit_32(1108058125);
+emit_32(1121632256);
+emit_32(3268091970);
+emit_32(1107555412);
+emit_32(1121632256);
+emit_32(3267579911);
+emit_32(1106717652);
+emit_32(1121632256);
+emit_32(3267067904);
+emit_32(1106512341);
+emit_32(1121632256);
+emit_32(3266555911);
+emit_32(1106506836);
+emit_32(1121632256);
+emit_32(3266043904);
+emit_32(1105659534);
+emit_32(1121632256);
+emit_32(3265531911);
+emit_32(1105302179);
+emit_32(1121632256);
+emit_32(3265019904);
+emit_32(1104106698);
+emit_32(1121632256);
+emit_32(3264507911);
+emit_32(1102757390);
+emit_32(1121632256);
+emit_32(3263995904);
+emit_32(1101520647);
+emit_32(1121632256);
+emit_32(3263483911);
+emit_32(1100159910);
+emit_32(1121632256);
+emit_32(3262775296);
+emit_32(1099381290);
+emit_32(1121632256);
+emit_32(3261751309);
+emit_32(1098131911);
+emit_32(1121632256);
+emit_32(3260727296);
+emit_32(1097148452);
+emit_32(1121632256);
+emit_32(3259703309);
+emit_32(1096156919);
+emit_32(1121632256);
+emit_32(3258679296);
+emit_32(1095321308);
+emit_32(1121632256);
+emit_32(3257655309);
+emit_32(1094008281);
+emit_32(1121632256);
+emit_32(3256631296);
+emit_32(1093682489);
+emit_32(1121632256);
+emit_32(3255607309);
+emit_32(1094449313);
+emit_32(1121632256);
+emit_32(3254386688);
+emit_32(1095241512);
+emit_32(1121632256);
+emit_32(3252338714);
+emit_32(1095115158);
+emit_32(1121632256);
+emit_32(3250290688);
+emit_32(1095038088);
+emit_32(1121632256);
+emit_32(3248242714);
+emit_32(1095359791);
+emit_32(1121632256);
+emit_32(3245998080);
+emit_32(1096573937);
+emit_32(1121632256);
+emit_32(3241902132);
+emit_32(1097191129);
+emit_32(1121632256);
+emit_32(3237609472);
+emit_32(1097678717);
+emit_32(1121632256);
+emit_32(3229220864);
+emit_32(1098487169);
+emit_32(1121632256);
+emit_32(0);
+emit_32(1099111334);
+emit_32(1121632256);
+emit_32(1081737216);
+emit_32(1099957115);
+emit_32(1121632256);
+emit_32(3279552512);
+emit_32(1084728636);
+emit_32(1121120289);
+emit_32(3279296528);
+emit_32(1077536872);
+emit_32(1121120289);
+emit_32(3279040545);
+emit_32(1049067472);
+emit_32(1121120289);
+emit_32(3278784496);
+emit_32(3197365821);
+emit_32(1121120289);
+emit_32(3278528512);
+emit_32(3211331864);
+emit_32(1121120289);
+emit_32(3278272528);
+emit_32(3222095455);
+emit_32(1121120289);
+emit_32(3278016545);
+emit_32(3228342367);
+emit_32(1121120289);
+emit_32(3277760496);
+emit_32(3232161071);
+emit_32(1121120289);
+emit_32(3277504512);
+emit_32(3233959337);
+emit_32(1121120289);
+emit_32(3277248528);
+emit_32(3232603256);
+emit_32(1121120289);
+emit_32(3276992545);
+emit_32(3231337561);
+emit_32(1121120289);
+emit_32(3276736496);
+emit_32(3226343236);
+emit_32(1121120289);
+emit_32(3276480512);
+emit_32(3222401429);
+emit_32(1121120289);
+emit_32(3276224528);
+emit_32(3217196088);
+emit_32(1121120289);
+emit_32(3275968545);
+emit_32(3174963708);
+emit_32(1121120289);
+emit_32(3275712496);
+emit_32(1071520772);
+emit_32(1121120289);
+emit_32(3275456512);
+emit_32(1076782233);
+emit_32(1121120289);
+emit_32(3275200528);
+emit_32(1082969209);
+emit_32(1121120289);
+emit_32(3274944545);
+emit_32(1085234364);
+emit_32(1121120289);
+emit_32(3274688496);
+emit_32(1089004246);
+emit_32(1121120289);
+emit_32(3274432512);
+emit_32(1092733108);
+emit_32(1121120289);
+emit_32(3274176528);
+emit_32(1095820326);
+emit_32(1121120289);
+emit_32(3273920545);
+emit_32(1098604085);
+emit_32(1121120289);
+emit_32(3273664496);
+emit_32(1099874855);
+emit_32(1121120289);
+emit_32(3273408512);
+emit_32(1100920809);
+emit_32(1121120289);
+emit_32(3273152528);
+emit_32(1101878893);
+emit_32(1121120289);
+emit_32(3272896545);
+emit_32(1103179284);
+emit_32(1121120289);
+emit_32(3272640496);
+emit_32(1105420196);
+emit_32(1121120289);
+emit_32(3272384512);
+emit_32(1107134828);
+emit_32(1121120289);
+emit_32(3272128528);
+emit_32(1107920526);
+emit_32(1121120289);
+emit_32(3271872545);
+emit_32(1108056762);
+emit_32(1121120289);
+emit_32(3271616496);
+emit_32(1107769583);
+emit_32(1121120289);
+emit_32(3271163904);
+emit_32(1107905112);
+emit_32(1121120289);
+emit_32(3270651937);
+emit_32(1108241573);
+emit_32(1121120289);
+emit_32(3270139970);
+emit_32(1108859578);
+emit_32(1121120289);
+emit_32(3269627871);
+emit_32(1109044049);
+emit_32(1121120289);
+emit_32(3269115904);
+emit_32(1108576331);
+emit_32(1121120289);
+emit_32(3268603937);
+emit_32(1107973793);
+emit_32(1121120289);
+emit_32(3268091970);
+emit_32(1107354478);
+emit_32(1121120289);
+emit_32(3267579911);
+emit_32(1106448273);
+emit_32(1121120289);
+emit_32(3267067904);
+emit_32(1106470135);
+emit_32(1121120289);
+emit_32(3266555911);
+emit_32(1106654580);
+emit_32(1121120289);
+emit_32(3266043904);
+emit_32(1106160386);
+emit_32(1121120289);
+emit_32(3265531911);
+emit_32(1105210009);
+emit_32(1121120289);
+emit_32(3265019904);
+emit_32(1104004514);
+emit_32(1121120289);
+emit_32(3264507911);
+emit_32(1102526231);
+emit_32(1121120289);
+emit_32(3263995904);
+emit_32(1101481692);
+emit_32(1121120289);
+emit_32(3263483911);
+emit_32(1100090337);
+emit_32(1121120289);
+emit_32(3262775296);
+emit_32(1099268882);
+emit_32(1121120289);
+emit_32(3261751309);
+emit_32(1098701288);
+emit_32(1121120289);
+emit_32(3260727296);
+emit_32(1097681968);
+emit_32(1121120289);
+emit_32(3259703309);
+emit_32(1096561774);
+emit_32(1121120289);
+emit_32(3258679296);
+emit_32(1095766953);
+emit_32(1121120289);
+emit_32(3257655309);
+emit_32(1094631765);
+emit_32(1121120289);
+emit_32(3256631296);
+emit_32(1094735364);
+emit_32(1121120289);
+emit_32(3255607309);
+emit_32(1094999291);
+emit_32(1121120289);
+emit_32(3254386688);
+emit_32(1095377722);
+emit_32(1121120289);
+emit_32(3252338714);
+emit_32(1095433191);
+emit_32(1121120289);
+emit_32(3250290688);
+emit_32(1095107399);
+emit_32(1121120289);
+emit_32(3248242714);
+emit_32(1095777544);
+emit_32(1121120289);
+emit_32(3245998080);
+emit_32(1096857472);
+emit_32(1121120289);
+emit_32(3241902132);
+emit_32(1097446352);
+emit_32(1121120289);
+emit_32(3237609472);
+emit_32(1097974940);
+emit_32(1121120289);
+emit_32(3229220864);
+emit_32(1098736416);
+emit_32(1121120289);
+emit_32(0);
+emit_32(1099338613);
+emit_32(1121120289);
+emit_32(1081737216);
+emit_32(1099935672);
+emit_32(1121120289);
+emit_32(3279552512);
+emit_32(1082712497);
+emit_32(1120608322);
+emit_32(3279296528);
+emit_32(1077291841);
+emit_32(1120608322);
+emit_32(3279040545);
+emit_32(1073741866);
+emit_32(1120608322);
+emit_32(3278784496);
+emit_32(1070338230);
+emit_32(1120608322);
+emit_32(3278528512);
+emit_32(1056781669);
+emit_32(1120608322);
+emit_32(3278272528);
+emit_32(3219431904);
+emit_32(1120608322);
+emit_32(3278016545);
+emit_32(3224861095);
+emit_32(1120608322);
+emit_32(3277760496);
+emit_32(3231719746);
+emit_32(1120608322);
+emit_32(3277504512);
+emit_32(3233844476);
+emit_32(1120608322);
+emit_32(3277248528);
+emit_32(3232334736);
+emit_32(1120608322);
+emit_32(3276992545);
+emit_32(3229801544);
+emit_32(1120608322);
+emit_32(3276736496);
+emit_32(3228638233);
+emit_32(1120608322);
+emit_32(3276480512);
+emit_32(3223489306);
+emit_32(1120608322);
+emit_32(3276224528);
+emit_32(3213418446);
+emit_32(1120608322);
+emit_32(3275968545);
+emit_32(3202678964);
+emit_32(1120608322);
+emit_32(3275712496);
+emit_32(1069745659);
+emit_32(1120608322);
+emit_32(3275456512);
+emit_32(1079646691);
+emit_32(1120608322);
+emit_32(3275200528);
+emit_32(1083145831);
+emit_32(1120608322);
+emit_32(3274944545);
+emit_32(1087983583);
+emit_32(1120608322);
+emit_32(3274688496);
+emit_32(1091238804);
+emit_32(1120608322);
+emit_32(3274432512);
+emit_32(1093823208);
+emit_32(1120608322);
+emit_32(3274176528);
+emit_32(1097286130);
+emit_32(1120608322);
+emit_32(3273920545);
+emit_32(1099742472);
+emit_32(1120608322);
+emit_32(3273664496);
+emit_32(1100695890);
+emit_32(1120608322);
+emit_32(3273408512);
+emit_32(1101406876);
+emit_32(1120608322);
+emit_32(3273152528);
+emit_32(1102194042);
+emit_32(1120608322);
+emit_32(3272896545);
+emit_32(1103115112);
+emit_32(1120608322);
+emit_32(3272640496);
+emit_32(1105064414);
+emit_32(1120608322);
+emit_32(3272384512);
+emit_32(1107025042);
+emit_32(1120608322);
+emit_32(3272128528);
+emit_32(1107923960);
+emit_32(1120608322);
+emit_32(3271872545);
+emit_32(1108173154);
+emit_32(1120608322);
+emit_32(3271616496);
+emit_32(1108080381);
+emit_32(1120608322);
+emit_32(3271163904);
+emit_32(1107879605);
+emit_32(1120608322);
+emit_32(3270651937);
+emit_32(1108128956);
+emit_32(1120608322);
+emit_32(3270139970);
+emit_32(1108688110);
+emit_32(1120608322);
+emit_32(3269627871);
+emit_32(1108797188);
+emit_32(1120608322);
+emit_32(3269115904);
+emit_32(1108405938);
+emit_32(1120608322);
+emit_32(3268603937);
+emit_32(1107934577);
+emit_32(1120608322);
+emit_32(3268091970);
+emit_32(1107323021);
+emit_32(1120608322);
+emit_32(3267579911);
+emit_32(1106810136);
+emit_32(1120608322);
+emit_32(3267067904);
+emit_32(1106638904);
+emit_32(1120608322);
+emit_32(3266555911);
+emit_32(1106673664);
+emit_32(1120608322);
+emit_32(3266043904);
+emit_32(1106080013);
+emit_32(1120608322);
+emit_32(3265531911);
+emit_32(1104833308);
+emit_32(1120608322);
+emit_32(3265019904);
+emit_32(1103684593);
+emit_32(1120608322);
+emit_32(3264507911);
+emit_32(1102392852);
+emit_32(1120608322);
+emit_32(3263995904);
+emit_32(1101073744);
+emit_32(1120608322);
+emit_32(3263483911);
+emit_32(1099963145);
+emit_32(1120608322);
+emit_32(3262775296);
+emit_32(1099506070);
+emit_32(1120608322);
+emit_32(3261751309);
+emit_32(1099320997);
+emit_32(1120608322);
+emit_32(3260727296);
+emit_32(1098604295);
+emit_32(1120608322);
+emit_32(3259703309);
+emit_32(1097529295);
+emit_32(1120608322);
+emit_32(3258679296);
+emit_32(1096142134);
+emit_32(1120608322);
+emit_32(3257655309);
+emit_32(1094301568);
+emit_32(1120608322);
+emit_32(3256631296);
+emit_32(1094016985);
+emit_32(1120608322);
+emit_32(3255607309);
+emit_32(1095156577);
+emit_32(1120608322);
+emit_32(3254386688);
+emit_32(1095833223);
+emit_32(1120608322);
+emit_32(3252338714);
+emit_32(1095183630);
+emit_32(1120608322);
+emit_32(3250290688);
+emit_32(1094555114);
+emit_32(1120608322);
+emit_32(3248242714);
+emit_32(1096488059);
+emit_32(1120608322);
+emit_32(3245998080);
+emit_32(1097556453);
+emit_32(1120608322);
+emit_32(3241902132);
+emit_32(1097820275);
+emit_32(1120608322);
+emit_32(3237609472);
+emit_32(1097925237);
+emit_32(1120608322);
+emit_32(3229220864);
+emit_32(1098971297);
+emit_32(1120608322);
+emit_32(0);
+emit_32(1099474823);
+emit_32(1120608322);
+emit_32(1081737216);
+emit_32(1099802817);
+emit_32(1120608322);
+emit_32(3279552512);
+emit_32(1082649645);
+emit_32(1120096263);
+emit_32(3279296528);
+emit_32(1081824919);
+emit_32(1120096263);
+emit_32(3279040545);
+emit_32(1078459284);
+emit_32(1120096263);
+emit_32(3278784496);
+emit_32(1074050399);
+emit_32(1120096263);
+emit_32(3278528512);
+emit_32(1053874077);
+emit_32(1120096263);
+emit_32(3278272528);
+emit_32(3211237089);
+emit_32(1120096263);
+emit_32(3278016545);
+emit_32(3223833574);
+emit_32(1120096263);
+emit_32(3277760496);
+emit_32(3229161263);
+emit_32(1120096263);
+emit_32(3277504512);
+emit_32(3233010292);
+emit_32(1120096263);
+emit_32(3277248528);
+emit_32(3229615695);
+emit_32(1120096263);
+emit_32(3276992545);
+emit_32(3222904913);
+emit_32(1120096263);
+emit_32(3276736496);
+emit_32(3222905752);
+emit_32(1120096263);
+emit_32(3276480512);
+emit_32(3220913919);
+emit_32(1120096263);
+emit_32(3276224528);
+emit_32(3216868597);
+emit_32(1120096263);
+emit_32(3275968545);
+emit_32(3184537459);
+emit_32(1120096263);
+emit_32(3275712496);
+emit_32(1071525805);
+emit_32(1120096263);
+emit_32(3275456512);
+emit_32(1080770303);
+emit_32(1120096263);
+emit_32(3275200528);
+emit_32(1084483709);
+emit_32(1120096263);
+emit_32(3274944545);
+emit_32(1089756453);
+emit_32(1120096263);
+emit_32(3274688496);
+emit_32(1092796967);
+emit_32(1120096263);
+emit_32(3274432512);
+emit_32(1095008204);
+emit_32(1120096263);
+emit_32(3274176528);
+emit_32(1098158021);
+emit_32(1120096263);
+emit_32(3273920545);
+emit_32(1100073298);
+emit_32(1120096263);
+emit_32(3273664496);
+emit_32(1101265424);
+emit_32(1120096263);
+emit_32(3273408512);
+emit_32(1101989413);
+emit_32(1120096263);
+emit_32(3273152528);
+emit_32(1102698565);
+emit_32(1120096263);
+emit_32(3272896545);
+emit_32(1103242776);
+emit_32(1120096263);
+emit_32(3272640496);
+emit_32(1105297356);
+emit_32(1120096263);
+emit_32(3272384512);
+emit_32(1106908126);
+emit_32(1120096263);
+emit_32(3272128528);
+emit_32(1107640530);
+emit_32(1120096263);
+emit_32(3271872545);
+emit_32(1108166312);
+emit_32(1120096263);
+emit_32(3271616496);
+emit_32(1108109138);
+emit_32(1120096263);
+emit_32(3271163904);
+emit_32(1108037206);
+emit_32(1120096263);
+emit_32(3270651937);
+emit_32(1107897483);
+emit_32(1120096263);
+emit_32(3270139970);
+emit_32(1108473492);
+emit_32(1120096263);
+emit_32(3269627871);
+emit_32(1108658461);
+emit_32(1120096263);
+emit_32(3269115904);
+emit_32(1108380326);
+emit_32(1120096263);
+emit_32(3268603937);
+emit_32(1107921522);
+emit_32(1120096263);
+emit_32(3268091970);
+emit_32(1106710574);
+emit_32(1120096263);
+emit_32(3267579911);
+emit_32(1106304880);
+emit_32(1120096263);
+emit_32(3267067904);
+emit_32(1106736788);
+emit_32(1120096263);
+emit_32(3266555911);
+emit_32(1106706484);
+emit_32(1120096263);
+emit_32(3266043904);
+emit_32(1105732829);
+emit_32(1120096263);
+emit_32(3265531911);
+emit_32(1104837607);
+emit_32(1120096263);
+emit_32(3265019904);
+emit_32(1103630801);
+emit_32(1120096263);
+emit_32(3264507911);
+emit_32(1101868093);
+emit_32(1120096263);
+emit_32(3263995904);
+emit_32(1100220622);
+emit_32(1120096263);
+emit_32(3263483911);
+emit_32(1100302254);
+emit_32(1120096263);
+emit_32(3262775296);
+emit_32(1100039691);
+emit_32(1120096263);
+emit_32(3261751309);
+emit_32(1099705090);
+emit_32(1120096263);
+emit_32(3260727296);
+emit_32(1099085329);
+emit_32(1120096263);
+emit_32(3259703309);
+emit_32(1097718982);
+emit_32(1120096263);
+emit_32(3258679296);
+emit_32(1096390122);
+emit_32(1120096263);
+emit_32(3257655309);
+emit_32(1094580175);
+emit_32(1120096263);
+emit_32(3256631296);
+emit_32(1094186959);
+emit_32(1120096263);
+emit_32(3255607309);
+emit_32(1094206987);
+emit_32(1120096263);
+emit_32(3254386688);
+emit_32(1095299288);
+emit_32(1120096263);
+emit_32(3252338714);
+emit_32(1094941095);
+emit_32(1120096263);
+emit_32(3250290688);
+emit_32(1093925968);
+emit_32(1120096263);
+emit_32(3248242714);
+emit_32(1096010747);
+emit_32(1120096263);
+emit_32(3245998080);
+emit_32(1096357826);
+emit_32(1120096263);
+emit_32(3241902132);
+emit_32(1096902246);
+emit_32(1120096263);
+emit_32(3237609472);
+emit_32(1097501612);
+emit_32(1120096263);
+emit_32(3229220864);
+emit_32(1097992765);
+emit_32(1120096263);
+emit_32(0);
+emit_32(1098723413);
+emit_32(1120096263);
+emit_32(1081737216);
+emit_32(1099965451);
+emit_32(1120096263);
+emit_32(3279552512);
+emit_32(1084093765);
+emit_32(1119584256);
+emit_32(3279296528);
+emit_32(1080036510);
+emit_32(1119584256);
+emit_32(3279040545);
+emit_32(1077455125);
+emit_32(1119584256);
+emit_32(3278784496);
+emit_32(1074567724);
+emit_32(1119584256);
+emit_32(3278528512);
+emit_32(1069156863);
+emit_32(1119584256);
+emit_32(3278272528);
+emit_32(3189431842);
+emit_32(1119584256);
+emit_32(3278016545);
+emit_32(3213554929);
+emit_32(1119584256);
+emit_32(3277760496);
+emit_32(3222450418);
+emit_32(1119584256);
+emit_32(3277504512);
+emit_32(3228929486);
+emit_32(1119584256);
+emit_32(3277248528);
+emit_32(3224323217);
+emit_32(1119584256);
+emit_32(3276992545);
+emit_32(3222046465);
+emit_32(1119584256);
+emit_32(3276736496);
+emit_32(3194181137);
+emit_32(1119584256);
+emit_32(3276480512);
+emit_32(3186726281);
+emit_32(1119584256);
+emit_32(3276224528);
+emit_32(3191098290);
+emit_32(1119584256);
+emit_32(3275968545);
+emit_32(1068055354);
+emit_32(1119584256);
+emit_32(3275712496);
+emit_32(1076438426);
+emit_32(1119584256);
+emit_32(3275456512);
+emit_32(1080984464);
+emit_32(1119584256);
+emit_32(3275200528);
+emit_32(1085878651);
+emit_32(1119584256);
+emit_32(3274944545);
+emit_32(1091668447);
+emit_32(1119584256);
+emit_32(3274688496);
+emit_32(1094171545);
+emit_32(1119584256);
+emit_32(3274432512);
+emit_32(1095963561);
+emit_32(1119584256);
+emit_32(3274176528);
+emit_32(1098572104);
+emit_32(1119584256);
+emit_32(3273920545);
+emit_32(1099948045);
+emit_32(1119584256);
+emit_32(3273664496);
+emit_32(1101407873);
+emit_32(1119584256);
+emit_32(3273408512);
+emit_32(1102835876);
+emit_32(1119584256);
+emit_32(3273152528);
+emit_32(1103744310);
+emit_32(1119584256);
+emit_32(3272896545);
+emit_32(1104117655);
+emit_32(1119584256);
+emit_32(3272640496);
+emit_32(1105300868);
+emit_32(1119584256);
+emit_32(3272384512);
+emit_32(1107290803);
+emit_32(1119584256);
+emit_32(3272128528);
+emit_32(1107707508);
+emit_32(1119584256);
+emit_32(3271872545);
+emit_32(1108008685);
+emit_32(1119584256);
+emit_32(3271616496);
+emit_32(1108120935);
+emit_32(1119584256);
+emit_32(3271163904);
+emit_32(1108077052);
+emit_32(1119584256);
+emit_32(3270651937);
+emit_32(1107924641);
+emit_32(1119584256);
+emit_32(3270139970);
+emit_32(1108147044);
+emit_32(1119584256);
+emit_32(3269627871);
+emit_32(1108350311);
+emit_32(1119584256);
+emit_32(3269115904);
+emit_32(1108146651);
+emit_32(1119584256);
+emit_32(3268603937);
+emit_32(1107677466);
+emit_32(1119584256);
+emit_32(3268091970);
+emit_32(1106442034);
+emit_32(1119584256);
+emit_32(3267579911);
+emit_32(1106619400);
+emit_32(1119584256);
+emit_32(3267067904);
+emit_32(1106902463);
+emit_32(1119584256);
+emit_32(3266555911);
+emit_32(1106534780);
+emit_32(1119584256);
+emit_32(3266043904);
+emit_32(1105512733);
+emit_32(1119584256);
+emit_32(3265531911);
+emit_32(1104509036);
+emit_32(1119584256);
+emit_32(3265019904);
+emit_32(1103188250);
+emit_32(1119584256);
+emit_32(3264507911);
+emit_32(1101665927);
+emit_32(1119584256);
+emit_32(3263995904);
+emit_32(1100910743);
+emit_32(1119584256);
+emit_32(3263483911);
+emit_32(1100740139);
+emit_32(1119584256);
+emit_32(3262775296);
+emit_32(1100127981);
+emit_32(1119584256);
+emit_32(3261751309);
+emit_32(1100010121);
+emit_32(1119584256);
+emit_32(3260727296);
+emit_32(1099477968);
+emit_32(1119584256);
+emit_32(3259703309);
+emit_32(1097874171);
+emit_32(1119584256);
+emit_32(3258679296);
+emit_32(1096345453);
+emit_32(1119584256);
+emit_32(3257655309);
+emit_32(1093686893);
+emit_32(1119584256);
+emit_32(3256631296);
+emit_32(1093873015);
+emit_32(1119584256);
+emit_32(3255607309);
+emit_32(1093045794);
+emit_32(1119584256);
+emit_32(3254386688);
+emit_32(1093896189);
+emit_32(1119584256);
+emit_32(3252338714);
+emit_32(1094140717);
+emit_32(1119584256);
+emit_32(3250290688);
+emit_32(1094085666);
+emit_32(1119584256);
+emit_32(3248242714);
+emit_32(1094959130);
+emit_32(1119584256);
+emit_32(3245998080);
+emit_32(1096322698);
+emit_32(1119584256);
+emit_32(3241902132);
+emit_32(1097101161);
+emit_32(1119584256);
+emit_32(3237609472);
+emit_32(1096857367);
+emit_32(1119584256);
+emit_32(3229220864);
+emit_32(1096976905);
+emit_32(1119584256);
+emit_32(0);
+emit_32(1098201537);
+emit_32(1119584256);
+emit_32(1081737216);
+emit_32(1099519545);
+emit_32(1119584256);
+emit_32(3279552512);
+emit_32(1085076910);
+emit_32(1119072263);
+emit_32(3279296528);
+emit_32(1081809987);
+emit_32(1119072263);
+emit_32(3279040545);
+emit_32(1077014597);
+emit_32(1119072263);
+emit_32(3278784496);
+emit_32(1075155304);
+emit_32(1119072263);
+emit_32(3278528512);
+emit_32(1069179596);
+emit_32(1119072263);
+emit_32(3278272528);
+emit_32(1056541889);
+emit_32(1119072263);
+emit_32(3278016545);
+emit_32(1062243693);
+emit_32(1119072263);
+emit_32(3277760496);
+emit_32(3195663773);
+emit_32(1119072263);
+emit_32(3277504512);
+emit_32(3221620659);
+emit_32(1119072263);
+emit_32(3277248528);
+emit_32(3216900390);
+emit_32(1119072263);
+emit_32(3276992545);
+emit_32(3207733134);
+emit_32(1119072263);
+emit_32(3276736496);
+emit_32(1061029962);
+emit_32(1119072263);
+emit_32(3276480512);
+emit_32(1067919627);
+emit_32(1119072263);
+emit_32(3276224528);
+emit_32(1069464557);
+emit_32(1119072263);
+emit_32(3275968545);
+emit_32(1076127125);
+emit_32(1119072263);
+emit_32(3275712496);
+emit_32(1080969365);
+emit_32(1119072263);
+emit_32(3275456512);
+emit_32(1083510358);
+emit_32(1119072263);
+emit_32(3275200528);
+emit_32(1088854216);
+emit_32(1119072263);
+emit_32(3274944545);
+emit_32(1092461118);
+emit_32(1119072263);
+emit_32(3274688496);
+emit_32(1095602746);
+emit_32(1119072263);
+emit_32(3274432512);
+emit_32(1097477495);
+emit_32(1119072263);
+emit_32(3274176528);
+emit_32(1099224108);
+emit_32(1119072263);
+emit_32(3273920545);
+emit_32(1100863662);
+emit_32(1119072263);
+emit_32(3273664496);
+emit_32(1102423943);
+emit_32(1119072263);
+emit_32(3273408512);
+emit_32(1103322677);
+emit_32(1119072263);
+emit_32(3273152528);
+emit_32(1104096054);
+emit_32(1119072263);
+emit_32(3272896545);
+emit_32(1104740300);
+emit_32(1119072263);
+emit_32(3272640496);
+emit_32(1105730627);
+emit_32(1119072263);
+emit_32(3272384512);
+emit_32(1107106673);
+emit_32(1119072263);
+emit_32(3272128528);
+emit_32(1107798052);
+emit_32(1119072263);
+emit_32(3271872545);
+emit_32(1107907497);
+emit_32(1119072263);
+emit_32(3271616496);
+emit_32(1108367272);
+emit_32(1119072263);
+emit_32(3271163904);
+emit_32(1108217273);
+emit_32(1119072263);
+emit_32(3270651937);
+emit_32(1108004962);
+emit_32(1119072263);
+emit_32(3270139970);
+emit_32(1107737890);
+emit_32(1119072263);
+emit_32(3269627871);
+emit_32(1107889331);
+emit_32(1119072263);
+emit_32(3269115904);
+emit_32(1107876826);
+emit_32(1119072263);
+emit_32(3268603937);
+emit_32(1107372933);
+emit_32(1119072263);
+emit_32(3268091970);
+emit_32(1106504004);
+emit_32(1119072263);
+emit_32(3267579911);
+emit_32(1106696575);
+emit_32(1119072263);
+emit_32(3267067904);
+emit_32(1107019275);
+emit_32(1119072263);
+emit_32(3266555911);
+emit_32(1106385201);
+emit_32(1119072263);
+emit_32(3266043904);
+emit_32(1105441482);
+emit_32(1119072263);
+emit_32(3265531911);
+emit_32(1104471235);
+emit_32(1119072263);
+emit_32(3265019904);
+emit_32(1103193965);
+emit_32(1119072263);
+emit_32(3264507911);
+emit_32(1102302518);
+emit_32(1119072263);
+emit_32(3263995904);
+emit_32(1101174984);
+emit_32(1119072263);
+emit_32(3263483911);
+emit_32(1100736365);
+emit_32(1119072263);
+emit_32(3262775296);
+emit_32(1100294232);
+emit_32(1119072263);
+emit_32(3261751309);
+emit_32(1099900282);
+emit_32(1119072263);
+emit_32(3260727296);
+emit_32(1099000447);
+emit_32(1119072263);
+emit_32(3259703309);
+emit_32(1098125096);
+emit_32(1119072263);
+emit_32(3258679296);
+emit_32(1096310535);
+emit_32(1119072263);
+emit_32(3257655309);
+emit_32(1094547669);
+emit_32(1119072263);
+emit_32(3256631296);
+emit_32(1092850024);
+emit_32(1119072263);
+emit_32(3255607309);
+emit_32(1092138471);
+emit_32(1119072263);
+emit_32(3254386688);
+emit_32(1092338194);
+emit_32(1119072263);
+emit_32(3252338714);
+emit_32(1093356172);
+emit_32(1119072263);
+emit_32(3250290688);
+emit_32(1094627885);
+emit_32(1119072263);
+emit_32(3248242714);
+emit_32(1095982750);
+emit_32(1119072263);
+emit_32(3245998080);
+emit_32(1095846540);
+emit_32(1119072263);
+emit_32(3241902132);
+emit_32(1095563949);
+emit_32(1119072263);
+emit_32(3237609472);
+emit_32(1095549269);
+emit_32(1119072263);
+emit_32(3229220864);
+emit_32(1096920492);
+emit_32(1119072263);
+emit_32(0);
+emit_32(1097824888);
+emit_32(1119072263);
+emit_32(1081737216);
+emit_32(1098532992);
+emit_32(1119072263);
+emit_32(3279552512);
+emit_32(1086774827);
+emit_32(1118560256);
+emit_32(3279296528);
+emit_32(1083515077);
+emit_32(1118560256);
+emit_32(3279040545);
+emit_32(1079457780);
+emit_32(1118560256);
+emit_32(3278784496);
+emit_32(1073525901);
+emit_32(1118560256);
+emit_32(3278528512);
+emit_32(1058489607);
+emit_32(1118560256);
+emit_32(3278272528);
+emit_32(1073793078);
+emit_32(1118560256);
+emit_32(3278016545);
+emit_32(1074379023);
+emit_32(1118560256);
+emit_32(3277760496);
+emit_32(1061663235);
+emit_32(1118560256);
+emit_32(3277504512);
+emit_32(3201930600);
+emit_32(1118560256);
+emit_32(3277248528);
+emit_32(3204664162);
+emit_32(1118560256);
+emit_32(3276992545);
+emit_32(995186421);
+emit_32(1118560256);
+emit_32(3276736496);
+emit_32(1065832625);
+emit_32(1118560256);
+emit_32(3276480512);
+emit_32(1074242037);
+emit_32(1118560256);
+emit_32(3276224528);
+emit_32(1075791245);
+emit_32(1118560256);
+emit_32(3275968545);
+emit_32(1081708653);
+emit_32(1118560256);
+emit_32(3275712496);
+emit_32(1085735415);
+emit_32(1118560256);
+emit_32(3275456512);
+emit_32(1087198703);
+emit_32(1118560256);
+emit_32(3275200528);
+emit_32(1090399397);
+emit_32(1118560256);
+emit_32(3274944545);
+emit_32(1093618840);
+emit_32(1118560256);
+emit_32(3274688496);
+emit_32(1095966497);
+emit_32(1118560256);
+emit_32(3274432512);
+emit_32(1098679792);
+emit_32(1118560256);
+emit_32(3274176528);
+emit_32(1099796369);
+emit_32(1118560256);
+emit_32(3273920545);
+emit_32(1101123342);
+emit_32(1118560256);
+emit_32(3273664496);
+emit_32(1102326582);
+emit_32(1118560256);
+emit_32(3273408512);
+emit_32(1103526783);
+emit_32(1118560256);
+emit_32(3273152528);
+emit_32(1104500018);
+emit_32(1118560256);
+emit_32(3272896545);
+emit_32(1105044544);
+emit_32(1118560256);
+emit_32(3272640496);
+emit_32(1105840518);
+emit_32(1118560256);
+emit_32(3272384512);
+emit_32(1107014661);
+emit_32(1118560256);
+emit_32(3272128528);
+emit_32(1107845579);
+emit_32(1118560256);
+emit_32(3271872545);
+emit_32(1108007295);
+emit_32(1118560256);
+emit_32(3271616496);
+emit_32(1108389711);
+emit_32(1118560256);
+emit_32(3271163904);
+emit_32(1108469167);
+emit_32(1118560256);
+emit_32(3270651937);
+emit_32(1108186681);
+emit_32(1118560256);
+emit_32(3270139970);
+emit_32(1107912425);
+emit_32(1118560256);
+emit_32(3269627871);
+emit_32(1107694060);
+emit_32(1118560256);
+emit_32(3269115904);
+emit_32(1107557771);
+emit_32(1118560256);
+emit_32(3268603937);
+emit_32(1107185212);
+emit_32(1118560256);
+emit_32(3268091970);
+emit_32(1106863509);
+emit_32(1118560256);
+emit_32(3267579911);
+emit_32(1106786176);
+emit_32(1118560256);
+emit_32(3267067904);
+emit_32(1107049998);
+emit_32(1118560256);
+emit_32(3266555911);
+emit_32(1106706117);
+emit_32(1118560256);
+emit_32(3266043904);
+emit_32(1105274287);
+emit_32(1118560256);
+emit_32(3265531911);
+emit_32(1104108375);
+emit_32(1118560256);
+emit_32(3265019904);
+emit_32(1103313974);
+emit_32(1118560256);
+emit_32(3264507911);
+emit_32(1102052537);
+emit_32(1118560256);
+emit_32(3263995904);
+emit_32(1101026348);
+emit_32(1118560256);
+emit_32(3263483911);
+emit_32(1100975912);
+emit_32(1118560256);
+emit_32(3262775296);
+emit_32(1100160329);
+emit_32(1118560256);
+emit_32(3261751309);
+emit_32(1099423862);
+emit_32(1118560256);
+emit_32(3260727296);
+emit_32(1098504471);
+emit_32(1118560256);
+emit_32(3259703309);
+emit_32(1097455580);
+emit_32(1118560256);
+emit_32(3258679296);
+emit_32(1095484886);
+emit_32(1118560256);
+emit_32(3257655309);
+emit_32(1094881011);
+emit_32(1118560256);
+emit_32(3256631296);
+emit_32(1092725768);
+emit_32(1118560256);
+emit_32(3255607309);
+emit_32(1092211609);
+emit_32(1118560256);
+emit_32(3254386688);
+emit_32(1092698400);
+emit_32(1118560256);
+emit_32(3252338714);
+emit_32(1092845620);
+emit_32(1118560256);
+emit_32(3250290688);
+emit_32(1094266651);
+emit_32(1118560256);
+emit_32(3248242714);
+emit_32(1094578287);
+emit_32(1118560256);
+emit_32(3245998080);
+emit_32(1094619916);
+emit_32(1118560256);
+emit_32(3241902132);
+emit_32(1094198493);
+emit_32(1118560256);
+emit_32(3237609472);
+emit_32(1096808294);
+emit_32(1118560256);
+emit_32(3229220864);
+emit_32(1097696857);
+emit_32(1118560256);
+emit_32(0);
+emit_32(1097643170);
+emit_32(1118560256);
+emit_32(1081737216);
+emit_32(1098479410);
+emit_32(1118560256);
+emit_32(3279552512);
+emit_32(1088302854);
+emit_32(1118048263);
+emit_32(3279296528);
+emit_32(1083747986);
+emit_32(1118048263);
+emit_32(3279040545);
+emit_32(1080542594);
+emit_32(1118048263);
+emit_32(3278784496);
+emit_32(1075852566);
+emit_32(1118048263);
+emit_32(3278528512);
+emit_32(1068737600);
+emit_32(1118048263);
+emit_32(3278272528);
+emit_32(1073988491);
+emit_32(1118048263);
+emit_32(3278016545);
+emit_32(1075493743);
+emit_32(1118048263);
+emit_32(3277760496);
+emit_32(1067344336);
+emit_32(1118048263);
+emit_32(3277504512);
+emit_32(1070348213);
+emit_32(1118048263);
+emit_32(3277248528);
+emit_32(1067476624);
+emit_32(1118048263);
+emit_32(3276992545);
+emit_32(1069849007);
+emit_32(1118048263);
+emit_32(3276736496);
+emit_32(1075129006);
+emit_32(1118048263);
+emit_32(3276480512);
+emit_32(1076245656);
+emit_32(1118048263);
+emit_32(3276224528);
+emit_32(1082664933);
+emit_32(1118048263);
+emit_32(3275968545);
+emit_32(1086033987);
+emit_32(1118048263);
+emit_32(3275712496);
+emit_32(1089567583);
+emit_32(1118048263);
+emit_32(3275456512);
+emit_32(1091286073);
+emit_32(1118048263);
+emit_32(3275200528);
+emit_32(1092256918);
+emit_32(1118048263);
+emit_32(3274944545);
+emit_32(1094223449);
+emit_32(1118048263);
+emit_32(3274688496);
+emit_32(1097132304);
+emit_32(1118048263);
+emit_32(3274432512);
+emit_32(1099059115);
+emit_32(1118048263);
+emit_32(3274176528);
+emit_32(1099766379);
+emit_32(1118048263);
+emit_32(3273920545);
+emit_32(1101236640);
+emit_32(1118048263);
+emit_32(3273664496);
+emit_32(1102554438);
+emit_32(1118048263);
+emit_32(3273408512);
+emit_32(1103664565);
+emit_32(1118048263);
+emit_32(3273152528);
+emit_32(1104878292);
+emit_32(1118048263);
+emit_32(3272896545);
+emit_32(1105616175);
+emit_32(1118048263);
+emit_32(3272640496);
+emit_32(1106382684);
+emit_32(1118048263);
+emit_32(3272384512);
+emit_32(1107450606);
+emit_32(1118048263);
+emit_32(3272128528);
+emit_32(1107817503);
+emit_32(1118048263);
+emit_32(3271872545);
+emit_32(1107947369);
+emit_32(1118048263);
+emit_32(3271616496);
+emit_32(1108283805);
+emit_32(1118048263);
+emit_32(3271163904);
+emit_32(1108371099);
+emit_32(1118048263);
+emit_32(3270651937);
+emit_32(1108326954);
+emit_32(1118048263);
+emit_32(3270139970);
+emit_32(1108075217);
+emit_32(1118048263);
+emit_32(3269627871);
+emit_32(1107641945);
+emit_32(1118048263);
+emit_32(3269115904);
+emit_32(1107268836);
+emit_32(1118048263);
+emit_32(3268603937);
+emit_32(1107004595);
+emit_32(1118048263);
+emit_32(3268091970);
+emit_32(1106919660);
+emit_32(1118048263);
+emit_32(3267579911);
+emit_32(1107317228);
+emit_32(1118048263);
+emit_32(3267067904);
+emit_32(1106983623);
+emit_32(1118048263);
+emit_32(3266555911);
+emit_32(1106392855);
+emit_32(1118048263);
+emit_32(3266043904);
+emit_32(1105271141);
+emit_32(1118048263);
+emit_32(3265531911);
+emit_32(1103878632);
+emit_32(1118048263);
+emit_32(3265019904);
+emit_32(1103197949);
+emit_32(1118048263);
+emit_32(3264507911);
+emit_32(1102375708);
+emit_32(1118048263);
+emit_32(3263995904);
+emit_32(1100616040);
+emit_32(1118048263);
+emit_32(3263483911);
+emit_32(1100311953);
+emit_32(1118048263);
+emit_32(3262775296);
+emit_32(1099845547);
+emit_32(1118048263);
+emit_32(3261751309);
+emit_32(1099214619);
+emit_32(1118048263);
+emit_32(3260727296);
+emit_32(1097535901);
+emit_32(1118048263);
+emit_32(3259703309);
+emit_32(1095712847);
+emit_32(1118048263);
+emit_32(3258679296);
+emit_32(1094870840);
+emit_32(1118048263);
+emit_32(3257655309);
+emit_32(1094035230);
+emit_32(1118048263);
+emit_32(3256631296);
+emit_32(1092438144);
+emit_32(1118048263);
+emit_32(3255607309);
+emit_32(1092567024);
+emit_32(1118048263);
+emit_32(3254386688);
+emit_32(1093416360);
+emit_32(1118048263);
+emit_32(3252338714);
+emit_32(1092845516);
+emit_32(1118048263);
+emit_32(3250290688);
+emit_32(1092728599);
+emit_32(1118048263);
+emit_32(3248242714);
+emit_32(1093978292);
+emit_32(1118048263);
+emit_32(3245998080);
+emit_32(1094248091);
+emit_32(1118048263);
+emit_32(3241902132);
+emit_32(1096725352);
+emit_32(1118048263);
+emit_32(3237609472);
+emit_32(1098118070);
+emit_32(1118048263);
+emit_32(3229220864);
+emit_32(1098579024);
+emit_32(1118048263);
+emit_32(0);
+emit_32(1098875562);
+emit_32(1118048263);
+emit_32(1081737216);
+emit_32(1099413271);
+emit_32(1118048263);
+emit_32(3279552512);
+emit_32(1087158039);
+emit_32(1117536256);
+emit_32(3279296528);
+emit_32(1084423731);
+emit_32(1117536256);
+emit_32(3279040545);
+emit_32(1083252471);
+emit_32(1117536256);
+emit_32(3278784496);
+emit_32(1080977921);
+emit_32(1117536256);
+emit_32(3278528512);
+emit_32(1078047193);
+emit_32(1117536256);
+emit_32(3278272528);
+emit_32(1078022405);
+emit_32(1117536256);
+emit_32(3278016545);
+emit_32(1081630052);
+emit_32(1117536256);
+emit_32(3277760496);
+emit_32(1083124105);
+emit_32(1117536256);
+emit_32(3277504512);
+emit_32(1081459553);
+emit_32(1117536256);
+emit_32(3277248528);
+emit_32(1076823379);
+emit_32(1117536256);
+emit_32(3276992545);
+emit_32(1083284243);
+emit_32(1117536256);
+emit_32(3276736496);
+emit_32(1084323613);
+emit_32(1117536256);
+emit_32(3276480512);
+emit_32(1083093801);
+emit_32(1117536256);
+emit_32(3276224528);
+emit_32(1084912430);
+emit_32(1117536256);
+emit_32(3275968545);
+emit_32(1088711106);
+emit_32(1117536256);
+emit_32(3275712496);
+emit_32(1091460892);
+emit_32(1117536256);
+emit_32(3275456512);
+emit_32(1093026290);
+emit_32(1117536256);
+emit_32(3275200528);
+emit_32(1094050539);
+emit_32(1117536256);
+emit_32(3274944545);
+emit_32(1096188481);
+emit_32(1117536256);
+emit_32(3274688496);
+emit_32(1099085539);
+emit_32(1117536256);
+emit_32(3274432512);
+emit_32(1099851891);
+emit_32(1117536256);
+emit_32(3274176528);
+emit_32(1100504367);
+emit_32(1117536256);
+emit_32(3273920545);
+emit_32(1101748136);
+emit_32(1117536256);
+emit_32(3273664496);
+emit_32(1102868644);
+emit_32(1117536256);
+emit_32(3273408512);
+emit_32(1103833491);
+emit_32(1117536256);
+emit_32(3273152528);
+emit_32(1104656833);
+emit_32(1117536256);
+emit_32(3272896545);
+emit_32(1105628706);
+emit_32(1117536256);
+emit_32(3272640496);
+emit_32(1107011043);
+emit_32(1117536256);
+emit_32(3272384512);
+emit_32(1107650124);
+emit_32(1117536256);
+emit_32(3272128528);
+emit_32(1107880732);
+emit_32(1117536256);
+emit_32(3271872545);
+emit_32(1107976887);
+emit_32(1117536256);
+emit_32(3271616496);
+emit_32(1108276648);
+emit_32(1117536256);
+emit_32(3271163904);
+emit_32(1108202645);
+emit_32(1117536256);
+emit_32(3270651937);
+emit_32(1108292036);
+emit_32(1117536256);
+emit_32(3270139970);
+emit_32(1107942205);
+emit_32(1117536256);
+emit_32(3269627871);
+emit_32(1107800883);
+emit_32(1117536256);
+emit_32(3269115904);
+emit_32(1107311303);
+emit_32(1117536256);
+emit_32(3268603937);
+emit_32(1107125495);
+emit_32(1117536256);
+emit_32(3268091970);
+emit_32(1107112755);
+emit_32(1117536256);
+emit_32(3267579911);
+emit_32(1107267997);
+emit_32(1117536256);
+emit_32(3267067904);
+emit_32(1106890510);
+emit_32(1117536256);
+emit_32(3266555911);
+emit_32(1106494148);
+emit_32(1117536256);
+emit_32(3266043904);
+emit_32(1105071650);
+emit_32(1117536256);
+emit_32(3265531911);
+emit_32(1103864948);
+emit_32(1117536256);
+emit_32(3265019904);
+emit_32(1102783028);
+emit_32(1117536256);
+emit_32(3264507911);
+emit_32(1101893154);
+emit_32(1117536256);
+emit_32(3263995904);
+emit_32(1100313684);
+emit_32(1117536256);
+emit_32(3263483911);
+emit_32(1099645112);
+emit_32(1117536256);
+emit_32(3262775296);
+emit_32(1099500985);
+emit_32(1117536256);
+emit_32(3261751309);
+emit_32(1099174668);
+emit_32(1117536256);
+emit_32(3260727296);
+emit_32(1097807901);
+emit_32(1117536256);
+emit_32(3259703309);
+emit_32(1096000995);
+emit_32(1117536256);
+emit_32(3258679296);
+emit_32(1094151098);
+emit_32(1117536256);
+emit_32(3257655309);
+emit_32(1093022725);
+emit_32(1117536256);
+emit_32(3256631296);
+emit_32(1092315356);
+emit_32(1117536256);
+emit_32(3255607309);
+emit_32(1092666209);
+emit_32(1117536256);
+emit_32(3254386688);
+emit_32(1092956979);
+emit_32(1117536256);
+emit_32(3252338714);
+emit_32(1092948591);
+emit_32(1117536256);
+emit_32(3250290688);
+emit_32(1093567880);
+emit_32(1117536256);
+emit_32(3248242714);
+emit_32(1094483496);
+emit_32(1117536256);
+emit_32(3245998080);
+emit_32(1097010250);
+emit_32(1117536256);
+emit_32(3241902132);
+emit_32(1098491888);
+emit_32(1117536256);
+emit_32(3237609472);
+emit_32(1098958976);
+emit_32(1117536256);
+emit_32(3229220864);
+emit_32(1099244503);
+emit_32(1117536256);
+emit_32(0);
+emit_32(1099580677);
+emit_32(1117536256);
+emit_32(1081737216);
+emit_32(1100388447);
+emit_32(1117536256);
+emit_32(3279552512);
+emit_32(1086400066);
+emit_32(1117024263);
+emit_32(3279296528);
+emit_32(1084596809);
+emit_32(1117024263);
+emit_32(3279040545);
+emit_32(1080887240);
+emit_32(1117024263);
+emit_32(3278784496);
+emit_32(1080830198);
+emit_32(1117024263);
+emit_32(3278528512);
+emit_32(1083401537);
+emit_32(1117024263);
+emit_32(3278272528);
+emit_32(1083235254);
+emit_32(1117024263);
+emit_32(3278016545);
+emit_32(1085484554);
+emit_32(1117024263);
+emit_32(3277760496);
+emit_32(1086866577);
+emit_32(1117024263);
+emit_32(3277504512);
+emit_32(1084469113);
+emit_32(1117024263);
+emit_32(3277248528);
+emit_32(1083540599);
+emit_32(1117024263);
+emit_32(3276992545);
+emit_32(1085825048);
+emit_32(1117024263);
+emit_32(3276736496);
+emit_32(1088012125);
+emit_32(1117024263);
+emit_32(3276480512);
+emit_32(1088318771);
+emit_32(1117024263);
+emit_32(3276224528);
+emit_32(1089174619);
+emit_32(1117024263);
+emit_32(3275968545);
+emit_32(1091189594);
+emit_32(1117024263);
+emit_32(3275712496);
+emit_32(1093050722);
+emit_32(1117024263);
+emit_32(3275456512);
+emit_32(1094514639);
+emit_32(1117024263);
+emit_32(3275200528);
+emit_32(1096242482);
+emit_32(1117024263);
+emit_32(3274944545);
+emit_32(1098453090);
+emit_32(1117024263);
+emit_32(3274688496);
+emit_32(1100090861);
+emit_32(1117024263);
+emit_32(3274432512);
+emit_32(1100571319);
+emit_32(1117024263);
+emit_32(3274176528);
+emit_32(1101691512);
+emit_32(1117024263);
+emit_32(3273920545);
+emit_32(1102911059);
+emit_32(1117024263);
+emit_32(3273664496);
+emit_32(1103791600);
+emit_32(1117024263);
+emit_32(3273408512);
+emit_32(1105004541);
+emit_32(1117024263);
+emit_32(3273152528);
+emit_32(1105668499);
+emit_32(1117024263);
+emit_32(3272896545);
+emit_32(1106514962);
+emit_32(1117024263);
+emit_32(3272640496);
+emit_32(1107399593);
+emit_32(1117024263);
+emit_32(3272384512);
+emit_32(1107645563);
+emit_32(1117024263);
+emit_32(3272128528);
+emit_32(1107768351);
+emit_32(1117024263);
+emit_32(3271872545);
+emit_32(1108103738);
+emit_32(1117024263);
+emit_32(3271616496);
+emit_32(1108013744);
+emit_32(1117024263);
+emit_32(3271163904);
+emit_32(1107916384);
+emit_32(1117024263);
+emit_32(3270651937);
+emit_32(1107875778);
+emit_32(1117024263);
+emit_32(3270139970);
+emit_32(1107601523);
+emit_32(1117024263);
+emit_32(3269627871);
+emit_32(1107312378);
+emit_32(1117024263);
+emit_32(3269115904);
+emit_32(1107317935);
+emit_32(1117024263);
+emit_32(3268603937);
+emit_32(1107418363);
+emit_32(1117024263);
+emit_32(3268091970);
+emit_32(1107103056);
+emit_32(1117024263);
+emit_32(3267579911);
+emit_32(1106756135);
+emit_32(1117024263);
+emit_32(3267067904);
+emit_32(1106586580);
+emit_32(1117024263);
+emit_32(3266555911);
+emit_32(1106229068);
+emit_32(1117024263);
+emit_32(3266043904);
+emit_32(1104905136);
+emit_32(1117024263);
+emit_32(3265531911);
+emit_32(1103773408);
+emit_32(1117024263);
+emit_32(3265019904);
+emit_32(1102876508);
+emit_32(1117024263);
+emit_32(3264507911);
+emit_32(1101347160);
+emit_32(1117024263);
+emit_32(3263995904);
+emit_32(1100029362);
+emit_32(1117024263);
+emit_32(3263483911);
+emit_32(1099777180);
+emit_32(1117024263);
+emit_32(3262775296);
+emit_32(1099578632);
+emit_32(1117024263);
+emit_32(3261751309);
+emit_32(1099224370);
+emit_32(1117024263);
+emit_32(3260727296);
+emit_32(1097535377);
+emit_32(1117024263);
+emit_32(3259703309);
+emit_32(1095910398);
+emit_32(1117024263);
+emit_32(3258679296);
+emit_32(1093599127);
+emit_32(1117024263);
+emit_32(3257655309);
+emit_32(1091981646);
+emit_32(1117024263);
+emit_32(3256631296);
+emit_32(1091797841);
+emit_32(1117024263);
+emit_32(3255607309);
+emit_32(1092352737);
+emit_32(1117024263);
+emit_32(3254386688);
+emit_32(1093028492);
+emit_32(1117024263);
+emit_32(3252338714);
+emit_32(1093454633);
+emit_32(1117024263);
+emit_32(3250290688);
+emit_32(1094245469);
+emit_32(1117024263);
+emit_32(3248242714);
+emit_32(1096330038);
+emit_32(1117024263);
+emit_32(3245998080);
+emit_32(1098523450);
+emit_32(1117024263);
+emit_32(3241902132);
+emit_32(1099109289);
+emit_32(1117024263);
+emit_32(3237609472);
+emit_32(1099818861);
+emit_32(1117024263);
+emit_32(3229220864);
+emit_32(1099945738);
+emit_32(1117024263);
+emit_32(0);
+emit_32(1100568016);
+emit_32(1117024263);
+emit_32(1081737216);
+emit_32(1101362836);
+emit_32(1117024263);
+emit_32(3279552512);
+emit_32(1085174427);
+emit_32(1116512256);
+emit_32(3279296528);
+emit_32(1083887405);
+emit_32(1116512256);
+emit_32(3279040545);
+emit_32(1080456611);
+emit_32(1116512256);
+emit_32(3278784496);
+emit_32(1079046318);
+emit_32(1116512256);
+emit_32(3278528512);
+emit_32(1082259302);
+emit_32(1116512256);
+emit_32(3278272528);
+emit_32(1084889550);
+emit_32(1116512256);
+emit_32(3278016545);
+emit_32(1087704851);
+emit_32(1116512256);
+emit_32(3277760496);
+emit_32(1087804025);
+emit_32(1116512256);
+emit_32(3277504512);
+emit_32(1088280498);
+emit_32(1116512256);
+emit_32(3277248528);
+emit_32(1088103981);
+emit_32(1116512256);
+emit_32(3276992545);
+emit_32(1088351004);
+emit_32(1116512256);
+emit_32(3276736496);
+emit_32(1089973843);
+emit_32(1116512256);
+emit_32(3276480512);
+emit_32(1091239926);
+emit_32(1116512256);
+emit_32(3276224528);
+emit_32(1091632890);
+emit_32(1116512256);
+emit_32(3275968545);
+emit_32(1092700393);
+emit_32(1116512256);
+emit_32(3275712496);
+emit_32(1094925156);
+emit_32(1116512256);
+emit_32(3275456512);
+emit_32(1096876556);
+emit_32(1116512256);
+emit_32(3275200528);
+emit_32(1098626630);
+emit_32(1116512256);
+emit_32(3274944545);
+emit_32(1100164471);
+emit_32(1116512256);
+emit_32(3274688496);
+emit_32(1100745487);
+emit_32(1116512256);
+emit_32(3274432512);
+emit_32(1101472832);
+emit_32(1116512256);
+emit_32(3274176528);
+emit_32(1102779148);
+emit_32(1116512256);
+emit_32(3273920545);
+emit_32(1103935255);
+emit_32(1116512256);
+emit_32(3273664496);
+emit_32(1104701345);
+emit_32(1116512256);
+emit_32(3273408512);
+emit_32(1105539000);
+emit_32(1116512256);
+emit_32(3273152528);
+emit_32(1106980949);
+emit_32(1116512256);
+emit_32(3272896545);
+emit_32(1107434013);
+emit_32(1116512256);
+emit_32(3272640496);
+emit_32(1107566658);
+emit_32(1116512256);
+emit_32(3272384512);
+emit_32(1107582701);
+emit_32(1116512256);
+emit_32(3272128528);
+emit_32(1107757498);
+emit_32(1116512256);
+emit_32(3271872545);
+emit_32(1107869617);
+emit_32(1116512256);
+emit_32(3271616496);
+emit_32(1107687480);
+emit_32(1116512256);
+emit_32(3271163904);
+emit_32(1107868176);
+emit_32(1116512256);
+emit_32(3270651937);
+emit_32(1107680087);
+emit_32(1116512256);
+emit_32(3270139970);
+emit_32(1107380955);
+emit_32(1116512256);
+emit_32(3269627871);
+emit_32(1107328631);
+emit_32(1116512256);
+emit_32(3269115904);
+emit_32(1107472941);
+emit_32(1116512256);
+emit_32(3268603937);
+emit_32(1107494384);
+emit_32(1116512256);
+emit_32(3268091970);
+emit_32(1107424602);
+emit_32(1116512256);
+emit_32(3267579911);
+emit_32(1106664227);
+emit_32(1116512256);
+emit_32(3267067904);
+emit_32(1106309651);
+emit_32(1116512256);
+emit_32(3266555911);
+emit_32(1105564480);
+emit_32(1116512256);
+emit_32(3266043904);
+emit_32(1104468247);
+emit_32(1116512256);
+emit_32(3265531911);
+emit_32(1103524161);
+emit_32(1116512256);
+emit_32(3265019904);
+emit_32(1102766355);
+emit_32(1116512256);
+emit_32(3264507911);
+emit_32(1101285976);
+emit_32(1116512256);
+emit_32(3263995904);
+emit_32(1100106066);
+emit_32(1116512256);
+emit_32(3263483911);
+emit_32(1099771150);
+emit_32(1116512256);
+emit_32(3262775296);
+emit_32(1099629121);
+emit_32(1116512256);
+emit_32(3261751309);
+emit_32(1099071436);
+emit_32(1116512256);
+emit_32(3260727296);
+emit_32(1096827273);
+emit_32(1116512256);
+emit_32(3259703309);
+emit_32(1094327153);
+emit_32(1116512256);
+emit_32(3258679296);
+emit_32(1092289372);
+emit_32(1116512256);
+emit_32(3257655309);
+emit_32(1091186899);
+emit_32(1116512256);
+emit_32(3256631296);
+emit_32(1091068620);
+emit_32(1116512256);
+emit_32(3255607309);
+emit_32(1092988332);
+emit_32(1116512256);
+emit_32(3254386688);
+emit_32(1093789024);
+emit_32(1116512256);
+emit_32(3252338714);
+emit_32(1095575588);
+emit_32(1116512256);
+emit_32(3250290688);
+emit_32(1097077673);
+emit_32(1116512256);
+emit_32(3248242714);
+emit_32(1098285423);
+emit_32(1116512256);
+emit_32(3245998080);
+emit_32(1099366400);
+emit_32(1116512256);
+emit_32(3241902132);
+emit_32(1099809528);
+emit_32(1116512256);
+emit_32(3237609472);
+emit_32(1100308336);
+emit_32(1116512256);
+emit_32(3229220864);
+emit_32(1100857999);
+emit_32(1116512256);
+emit_32(0);
+emit_32(1101690883);
+emit_32(1116512256);
+emit_32(1081737216);
+emit_32(1102550401);
+emit_32(1116512256);
+emit_32(3279552512);
+emit_32(1083244397);
+emit_32(1116000263);
+emit_32(3279296528);
+emit_32(1081021794);
+emit_32(1116000263);
+emit_32(3279040545);
+emit_32(1081320051);
+emit_32(1116000263);
+emit_32(3278784496);
+emit_32(1083021910);
+emit_32(1116000263);
+emit_32(3278528512);
+emit_32(1084294064);
+emit_32(1116000263);
+emit_32(3278272528);
+emit_32(1087656092);
+emit_32(1116000263);
+emit_32(3278016545);
+emit_32(1089797599);
+emit_32(1116000263);
+emit_32(3277760496);
+emit_32(1091098955);
+emit_32(1116000263);
+emit_32(3277504512);
+emit_32(1091272610);
+emit_32(1116000263);
+emit_32(3277248528);
+emit_32(1089866763);
+emit_32(1116000263);
+emit_32(3276992545);
+emit_32(1091139178);
+emit_32(1116000263);
+emit_32(3276736496);
+emit_32(1092341580);
+emit_32(1116000263);
+emit_32(3276480512);
+emit_32(1092757540);
+emit_32(1116000263);
+emit_32(3276224528);
+emit_32(1092728914);
+emit_32(1116000263);
+emit_32(3275968545);
+emit_32(1093810939);
+emit_32(1116000263);
+emit_32(3275712496);
+emit_32(1096373135);
+emit_32(1116000263);
+emit_32(3275456512);
+emit_32(1098378222);
+emit_32(1116000263);
+emit_32(3275200528);
+emit_32(1099724174);
+emit_32(1116000263);
+emit_32(3274944545);
+emit_32(1100967628);
+emit_32(1116000263);
+emit_32(3274688496);
+emit_32(1101558815);
+emit_32(1116000263);
+emit_32(3274432512);
+emit_32(1102315677);
+emit_32(1116000263);
+emit_32(3274176528);
+emit_32(1103940446);
+emit_32(1116000263);
+emit_32(3273920545);
+emit_32(1104679902);
+emit_32(1116000263);
+emit_32(3273664496);
+emit_32(1105155378);
+emit_32(1116000263);
+emit_32(3273408512);
+emit_32(1106194674);
+emit_32(1116000263);
+emit_32(3273152528);
+emit_32(1107343049);
+emit_32(1116000263);
+emit_32(3272896545);
+emit_32(1107838081);
+emit_32(1116000263);
+emit_32(3272640496);
+emit_32(1107954998);
+emit_32(1116000263);
+emit_32(3272384512);
+emit_32(1107867599);
+emit_32(1116000263);
+emit_32(3272128528);
+emit_32(1107645196);
+emit_32(1116000263);
+emit_32(3271872545);
+emit_32(1107550274);
+emit_32(1116000263);
+emit_32(3271616496);
+emit_32(1107544690);
+emit_32(1116000263);
+emit_32(3271163904);
+emit_32(1107694348);
+emit_32(1116000263);
+emit_32(3270651937);
+emit_32(1107550929);
+emit_32(1116000263);
+emit_32(3270139970);
+emit_32(1107424654);
+emit_32(1116000263);
+emit_32(3269627871);
+emit_32(1107580892);
+emit_32(1116000263);
+emit_32(3269115904);
+emit_32(1107466676);
+emit_32(1116000263);
+emit_32(3268603937);
+emit_32(1107518292);
+emit_32(1116000263);
+emit_32(3268091970);
+emit_32(1107507911);
+emit_32(1116000263);
+emit_32(3267579911);
+emit_32(1107068767);
+emit_32(1116000263);
+emit_32(3267067904);
+emit_32(1105975417);
+emit_32(1116000263);
+emit_32(3266555911);
+emit_32(1105550692);
+emit_32(1116000263);
+emit_32(3266043904);
+emit_32(1104364438);
+emit_32(1116000263);
+emit_32(3265531911);
+emit_32(1103311090);
+emit_32(1116000263);
+emit_32(3265019904);
+emit_32(1102266709);
+emit_32(1116000263);
+emit_32(3264507911);
+emit_32(1101111021);
+emit_32(1116000263);
+emit_32(3263995904);
+emit_32(1100245264);
+emit_32(1116000263);
+emit_32(3263483911);
+emit_32(1099460667);
+emit_32(1116000263);
+emit_32(3262775296);
+emit_32(1099464599);
+emit_32(1116000263);
+emit_32(3261751309);
+emit_32(1098898106);
+emit_32(1116000263);
+emit_32(3260727296);
+emit_32(1096169292);
+emit_32(1116000263);
+emit_32(3259703309);
+emit_32(1094572520);
+emit_32(1116000263);
+emit_32(3258679296);
+emit_32(1091595424);
+emit_32(1116000263);
+emit_32(3257655309);
+emit_32(1091557613);
+emit_32(1116000263);
+emit_32(3256631296);
+emit_32(1092673130);
+emit_32(1116000263);
+emit_32(3255607309);
+emit_32(1094406950);
+emit_32(1116000263);
+emit_32(3254386688);
+emit_32(1095233018);
+emit_32(1116000263);
+emit_32(3252338714);
+emit_32(1096870789);
+emit_32(1116000263);
+emit_32(3250290688);
+emit_32(1098084201);
+emit_32(1116000263);
+emit_32(3248242714);
+emit_32(1099279316);
+emit_32(1116000263);
+emit_32(3245998080);
+emit_32(1099851838);
+emit_32(1116000263);
+emit_32(3241902132);
+emit_32(1100485021);
+emit_32(1116000263);
+emit_32(3237609472);
+emit_32(1101521958);
+emit_32(1116000263);
+emit_32(3229220864);
+emit_32(1102417389);
+emit_32(1116000263);
+emit_32(0);
+emit_32(1103083130);
+emit_32(1116000263);
+emit_32(1081737216);
+emit_32(1103917954);
+emit_32(1116000263);
+emit_32(3279552512);
+emit_32(1083552091);
+emit_32(1115291648);
+emit_32(3279296528);
+emit_32(1083005678);
+emit_32(1115291648);
+emit_32(3279040545);
+emit_32(1081863968);
+emit_32(1115291648);
+emit_32(3278784496);
+emit_32(1083192598);
+emit_32(1115291648);
+emit_32(3278528512);
+emit_32(1085321521);
+emit_32(1115291648);
+emit_32(3278272528);
+emit_32(1088639887);
+emit_32(1115291648);
+emit_32(3278016545);
+emit_32(1090626592);
+emit_32(1115291648);
+emit_32(3277760496);
+emit_32(1090904140);
+emit_32(1115291648);
+emit_32(3277504512);
+emit_32(1091130580);
+emit_32(1115291648);
+emit_32(3277248528);
+emit_32(1091114726);
+emit_32(1115291648);
+emit_32(3276992545);
+emit_32(1092567129);
+emit_32(1115291648);
+emit_32(3276736496);
+emit_32(1093130414);
+emit_32(1115291648);
+emit_32(3276480512);
+emit_32(1093467636);
+emit_32(1115291648);
+emit_32(3276224528);
+emit_32(1094287832);
+emit_32(1115291648);
+emit_32(3275968545);
+emit_32(1095800822);
+emit_32(1115291648);
+emit_32(3275712496);
+emit_32(1097484940);
+emit_32(1115291648);
+emit_32(3275456512);
+emit_32(1099294310);
+emit_32(1115291648);
+emit_32(3275200528);
+emit_32(1100172703);
+emit_32(1115291648);
+emit_32(3274944545);
+emit_32(1101504656);
+emit_32(1115291648);
+emit_32(3274688496);
+emit_32(1102638534);
+emit_32(1115291648);
+emit_32(3274432512);
+emit_32(1103640238);
+emit_32(1115291648);
+emit_32(3274176528);
+emit_32(1104536142);
+emit_32(1115291648);
+emit_32(3273920545);
+emit_32(1105040926);
+emit_32(1115291648);
+emit_32(3273664496);
+emit_32(1105781640);
+emit_32(1115291648);
+emit_32(3273408512);
+emit_32(1106871845);
+emit_32(1115291648);
+emit_32(3273152528);
+emit_32(1107552266);
+emit_32(1115291648);
+emit_32(3272896545);
+emit_32(1107681686);
+emit_32(1115291648);
+emit_32(3272640496);
+emit_32(1107745571);
+emit_32(1115291648);
+emit_32(3272384512);
+emit_32(1107728531);
+emit_32(1115291648);
+emit_32(3272128528);
+emit_32(1107564849);
+emit_32(1115291648);
+emit_32(3271872545);
+emit_32(1107489876);
+emit_32(1115291648);
+emit_32(3271616496);
+emit_32(1107455351);
+emit_32(1115291648);
+emit_32(3271163904);
+emit_32(1107468721);
+emit_32(1115291648);
+emit_32(3270651937);
+emit_32(1107084182);
+emit_32(1115291648);
+emit_32(3270139970);
+emit_32(1107222279);
+emit_32(1115291648);
+emit_32(3269627871);
+emit_32(1107484685);
+emit_32(1115291648);
+emit_32(3269115904);
+emit_32(1107529302);
+emit_32(1115291648);
+emit_32(3268603937);
+emit_32(1107488067);
+emit_32(1115291648);
+emit_32(3268091970);
+emit_32(1107407117);
+emit_32(1115291648);
+emit_32(3267579911);
+emit_32(1106883012);
+emit_32(1115291648);
+emit_32(3267067904);
+emit_32(1106605454);
+emit_32(1115291648);
+emit_32(3266555911);
+emit_32(1105505288);
+emit_32(1115291648);
+emit_32(3266043904);
+emit_32(1104212551);
+emit_32(1115291648);
+emit_32(3265531911);
+emit_32(1103004854);
+emit_32(1115291648);
+emit_32(3265019904);
+emit_32(1102070835);
+emit_32(1115291648);
+emit_32(3264507911);
+emit_32(1101098123);
+emit_32(1115291648);
+emit_32(3263995904);
+emit_32(1100325323);
+emit_32(1115291648);
+emit_32(3263483911);
+emit_32(1099328966);
+emit_32(1115291648);
+emit_32(3262775296);
+emit_32(1098611216);
+emit_32(1115291648);
+emit_32(3261751309);
+emit_32(1096735418);
+emit_32(1115291648);
+emit_32(3260727296);
+emit_32(1095838571);
+emit_32(1115291648);
+emit_32(3259703309);
+emit_32(1094605760);
+emit_32(1115291648);
+emit_32(3258679296);
+emit_32(1092525459);
+emit_32(1115291648);
+emit_32(3257655309);
+emit_32(1092767082);
+emit_32(1115291648);
+emit_32(3256631296);
+emit_32(1093983535);
+emit_32(1115291648);
+emit_32(3255607309);
+emit_32(1095249271);
+emit_32(1115291648);
+emit_32(3254386688);
+emit_32(1096927937);
+emit_32(1115291648);
+emit_32(3252338714);
+emit_32(1098207724);
+emit_32(1115291648);
+emit_32(3250290688);
+emit_32(1099233441);
+emit_32(1115291648);
+emit_32(3248242714);
+emit_32(1099875956);
+emit_32(1115291648);
+emit_32(3245998080);
+emit_32(1100637117);
+emit_32(1115291648);
+emit_32(3241902132);
+emit_32(1101503817);
+emit_32(1115291648);
+emit_32(3237609472);
+emit_32(1102802531);
+emit_32(1115291648);
+emit_32(3229220864);
+emit_32(1103593682);
+emit_32(1115291648);
+emit_32(0);
+emit_32(1104232317);
+emit_32(1115291648);
+emit_32(1081737216);
+emit_32(1104775951);
+emit_32(1115291648);
+emit_32(3279552512);
+emit_32(1082632448);
+emit_32(1114267661);
+emit_32(3279296528);
+emit_32(1083847999);
+emit_32(1114267661);
+emit_32(3279040545);
+emit_32(1083453043);
+emit_32(1114267661);
+emit_32(3278784496);
+emit_32(1084836240);
+emit_32(1114267661);
+emit_32(3278528512);
+emit_32(1087335416);
+emit_32(1114267661);
+emit_32(3278272528);
+emit_32(1088125267);
+emit_32(1114267661);
+emit_32(3278016545);
+emit_32(1091016904);
+emit_32(1114267661);
+emit_32(3277760496);
+emit_32(1091320320);
+emit_32(1114267661);
+emit_32(3277504512);
+emit_32(1091823731);
+emit_32(1114267661);
+emit_32(3277248528);
+emit_32(1092277020);
+emit_32(1114267661);
+emit_32(3276992545);
+emit_32(1093461659);
+emit_32(1114267661);
+emit_32(3276736496);
+emit_32(1095052768);
+emit_32(1114267661);
+emit_32(3276480512);
+emit_32(1095490234);
+emit_32(1114267661);
+emit_32(3276224528);
+emit_32(1095508899);
+emit_32(1114267661);
+emit_32(3275968545);
+emit_32(1097193541);
+emit_32(1114267661);
+emit_32(3275712496);
+emit_32(1098984561);
+emit_32(1114267661);
+emit_32(3275456512);
+emit_32(1099457574);
+emit_32(1114267661);
+emit_32(3275200528);
+emit_32(1100590141);
+emit_32(1114267661);
+emit_32(3274944545);
+emit_32(1101940969);
+emit_32(1114267661);
+emit_32(3274688496);
+emit_32(1103512417);
+emit_32(1114267661);
+emit_32(3274432512);
+emit_32(1104276147);
+emit_32(1114267661);
+emit_32(3274176528);
+emit_32(1104819310);
+emit_32(1114267661);
+emit_32(3273920545);
+emit_32(1105352144);
+emit_32(1114267661);
+emit_32(3273664496);
+emit_32(1106559369);
+emit_32(1114267661);
+emit_32(3273408512);
+emit_32(1107364859);
+emit_32(1114267661);
+emit_32(3273152528);
+emit_32(1107533470);
+emit_32(1114267661);
+emit_32(3272896545);
+emit_32(1107506024);
+emit_32(1114267661);
+emit_32(3272640496);
+emit_32(1107420801);
+emit_32(1114267661);
+emit_32(3272384512);
+emit_32(1107402398);
+emit_32(1114267661);
+emit_32(3272128528);
+emit_32(1107706013);
+emit_32(1114267661);
+emit_32(3271872545);
+emit_32(1107658749);
+emit_32(1114267661);
+emit_32(3271616496);
+emit_32(1107586292);
+emit_32(1114267661);
+emit_32(3271163904);
+emit_32(1107376315);
+emit_32(1114267661);
+emit_32(3270651937);
+emit_32(1107428560);
+emit_32(1114267661);
+emit_32(3270139970);
+emit_32(1107381348);
+emit_32(1114267661);
+emit_32(3269627871);
+emit_32(1107411416);
+emit_32(1114267661);
+emit_32(3269115904);
+emit_32(1107441222);
+emit_32(1114267661);
+emit_32(3268603937);
+emit_32(1107539552);
+emit_32(1114267661);
+emit_32(3268091970);
+emit_32(1107219658);
+emit_32(1114267661);
+emit_32(3267579911);
+emit_32(1106732804);
+emit_32(1114267661);
+emit_32(3267067904);
+emit_32(1106474592);
+emit_32(1114267661);
+emit_32(3266555911);
+emit_32(1105371857);
+emit_32(1114267661);
+emit_32(3266043904);
+emit_32(1103908989);
+emit_32(1114267661);
+emit_32(3265531911);
+emit_32(1102613892);
+emit_32(1114267661);
+emit_32(3265019904);
+emit_32(1101793853);
+emit_32(1114267661);
+emit_32(3264507911);
+emit_32(1101568305);
+emit_32(1114267661);
+emit_32(3263995904);
+emit_32(1100542693);
+emit_32(1114267661);
+emit_32(3263483911);
+emit_32(1099317327);
+emit_32(1114267661);
+emit_32(3262775296);
+emit_32(1098087557);
+emit_32(1114267661);
+emit_32(3261751309);
+emit_32(1096945867);
+emit_32(1114267661);
+emit_32(3260727296);
+emit_32(1096008440);
+emit_32(1114267661);
+emit_32(3259703309);
+emit_32(1094604292);
+emit_32(1114267661);
+emit_32(3258679296);
+emit_32(1093760293);
+emit_32(1114267661);
+emit_32(3257655309);
+emit_32(1095498203);
+emit_32(1114267661);
+emit_32(3256631296);
+emit_32(1096500642);
+emit_32(1114267661);
+emit_32(3255607309);
+emit_32(1097453063);
+emit_32(1114267661);
+emit_32(3254386688);
+emit_32(1098431594);
+emit_32(1114267661);
+emit_32(3252338714);
+emit_32(1099318061);
+emit_32(1114267661);
+emit_32(3250290688);
+emit_32(1100353529);
+emit_32(1114267661);
+emit_32(3248242714);
+emit_32(1100897373);
+emit_32(1114267661);
+emit_32(3245998080);
+emit_32(1101979661);
+emit_32(1114267661);
+emit_32(3241902132);
+emit_32(1102434481);
+emit_32(1114267661);
+emit_32(3237609472);
+emit_32(1103617327);
+emit_32(1114267661);
+emit_32(3229220864);
+emit_32(1104375972);
+emit_32(1114267661);
+emit_32(0);
+emit_32(1104908963);
+emit_32(1114267661);
+emit_32(1081737216);
+emit_32(1105382343);
+emit_32(1114267661);
+emit_32(3279552512);
+emit_32(1080567970);
+emit_32(1113243648);
+emit_32(3279296528);
+emit_32(1081431200);
+emit_32(1113243648);
+emit_32(3279040545);
+emit_32(1083053640);
+emit_32(1113243648);
+emit_32(3278784496);
+emit_32(1084804594);
+emit_32(1113243648);
+emit_32(3278528512);
+emit_32(1089344530);
+emit_32(1113243648);
+emit_32(3278272528);
+emit_32(1089662899);
+emit_32(1113243648);
+emit_32(3278016545);
+emit_32(1090822970);
+emit_32(1113243648);
+emit_32(3277760496);
+emit_32(1092219662);
+emit_32(1113243648);
+emit_32(3277504512);
+emit_32(1093309615);
+emit_32(1113243648);
+emit_32(3277248528);
+emit_32(1093760608);
+emit_32(1113243648);
+emit_32(3276992545);
+emit_32(1094942563);
+emit_32(1113243648);
+emit_32(3276736496);
+emit_32(1095970062);
+emit_32(1113243648);
+emit_32(3276480512);
+emit_32(1096808609);
+emit_32(1113243648);
+emit_32(3276224528);
+emit_32(1097144677);
+emit_32(1113243648);
+emit_32(3275968545);
+emit_32(1097732299);
+emit_32(1113243648);
+emit_32(3275712496);
+emit_32(1099213255);
+emit_32(1113243648);
+emit_32(3275456512);
+emit_32(1100077335);
+emit_32(1113243648);
+emit_32(3275200528);
+emit_32(1101037358);
+emit_32(1113243648);
+emit_32(3274944545);
+emit_32(1102522142);
+emit_32(1113243648);
+emit_32(3274688496);
+emit_32(1103670333);
+emit_32(1113243648);
+emit_32(3274432512);
+emit_32(1104447013);
+emit_32(1113243648);
+emit_32(3274176528);
+emit_32(1104860519);
+emit_32(1113243648);
+emit_32(3273920545);
+emit_32(1105841200);
+emit_32(1113243648);
+emit_32(3273664496);
+emit_32(1106724782);
+emit_32(1113243648);
+emit_32(3273408512);
+emit_32(1107646900);
+emit_32(1113243648);
+emit_32(3273152528);
+emit_32(1107527152);
+emit_32(1113243648);
+emit_32(3272896545);
+emit_32(1107447854);
+emit_32(1113243648);
+emit_32(3272640496);
+emit_32(1107457160);
+emit_32(1113243648);
+emit_32(3272384512);
+emit_32(1107532238);
+emit_32(1113243648);
+emit_32(3272128528);
+emit_32(1107881152);
+emit_32(1113243648);
+emit_32(3271872545);
+emit_32(1107776897);
+emit_32(1113243648);
+emit_32(3271616496);
+emit_32(1107520258);
+emit_32(1113243648);
+emit_32(3271163904);
+emit_32(1107733591);
+emit_32(1113243648);
+emit_32(3270651937);
+emit_32(1107557168);
+emit_32(1113243648);
+emit_32(3270139970);
+emit_32(1107429845);
+emit_32(1113243648);
+emit_32(3269627871);
+emit_32(1107409161);
+emit_32(1113243648);
+emit_32(3269115904);
+emit_32(1107202618);
+emit_32(1113243648);
+emit_32(3268603937);
+emit_32(1107218137);
+emit_32(1113243648);
+emit_32(3268091970);
+emit_32(1107106621);
+emit_32(1113243648);
+emit_32(3267579911);
+emit_32(1106476217);
+emit_32(1113243648);
+emit_32(3267067904);
+emit_32(1105687006);
+emit_32(1113243648);
+emit_32(3266555911);
+emit_32(1104462742);
+emit_32(1113243648);
+emit_32(3266043904);
+emit_32(1103481222);
+emit_32(1113243648);
+emit_32(3265531911);
+emit_32(1102608859);
+emit_32(1113243648);
+emit_32(3265019904);
+emit_32(1101715630);
+emit_32(1113243648);
+emit_32(3264507911);
+emit_32(1101203400);
+emit_32(1113243648);
+emit_32(3263995904);
+emit_32(1100648337);
+emit_32(1113243648);
+emit_32(3263483911);
+emit_32(1099410807);
+emit_32(1113243648);
+emit_32(3262775296);
+emit_32(1097508009);
+emit_32(1113243648);
+emit_32(3261751309);
+emit_32(1097324193);
+emit_32(1113243648);
+emit_32(3260727296);
+emit_32(1096121791);
+emit_32(1113243648);
+emit_32(3259703309);
+emit_32(1095057906);
+emit_32(1113243648);
+emit_32(3258679296);
+emit_32(1095394709);
+emit_32(1113243648);
+emit_32(3257655309);
+emit_32(1097088473);
+emit_32(1113243648);
+emit_32(3256631296);
+emit_32(1098581226);
+emit_32(1113243648);
+emit_32(3255607309);
+emit_32(1099014498);
+emit_32(1113243648);
+emit_32(3254386688);
+emit_32(1099554462);
+emit_32(1113243648);
+emit_32(3252338714);
+emit_32(1100356151);
+emit_32(1113243648);
+emit_32(3250290688);
+emit_32(1101134404);
+emit_32(1113243648);
+emit_32(3248242714);
+emit_32(1101886076);
+emit_32(1113243648);
+emit_32(3245998080);
+emit_32(1103145992);
+emit_32(1113243648);
+emit_32(3241902132);
+emit_32(1103709182);
+emit_32(1113243648);
+emit_32(3237609472);
+emit_32(1104517530);
+emit_32(1113243648);
+emit_32(3229220864);
+emit_32(1104959033);
+emit_32(1113243648);
+emit_32(0);
+emit_32(1105369183);
+emit_32(1113243648);
+emit_32(1081737216);
+emit_32(1105831238);
+emit_32(1113243648);
+emit_32(3279552512);
+emit_32(1081067470);
+emit_32(1112219661);
+emit_32(3279296528);
+emit_32(1081676273);
+emit_32(1112219661);
+emit_32(3279040545);
+emit_32(1082388277);
+emit_32(1112219661);
+emit_32(3278784496);
+emit_32(1084582317);
+emit_32(1112219661);
+emit_32(3278528512);
+emit_32(1086962144);
+emit_32(1112219661);
+emit_32(3278272528);
+emit_32(1088882737);
+emit_32(1112219661);
+emit_32(3278016545);
+emit_32(1091161282);
+emit_32(1112219661);
+emit_32(3277760496);
+emit_32(1092751983);
+emit_32(1112219661);
+emit_32(3277504512);
+emit_32(1095008308);
+emit_32(1112219661);
+emit_32(3277248528);
+emit_32(1095060318);
+emit_32(1112219661);
+emit_32(3276992545);
+emit_32(1096171599);
+emit_32(1112219661);
+emit_32(3276736496);
+emit_32(1096970718);
+emit_32(1112219661);
+emit_32(3276480512);
+emit_32(1096845518);
+emit_32(1112219661);
+emit_32(3276224528);
+emit_32(1097664037);
+emit_32(1112219661);
+emit_32(3275968545);
+emit_32(1099269407);
+emit_32(1112219661);
+emit_32(3275712496);
+emit_32(1099766956);
+emit_32(1112219661);
+emit_32(3275456512);
+emit_32(1100617351);
+emit_32(1112219661);
+emit_32(3275200528);
+emit_32(1101396967);
+emit_32(1112219661);
+emit_32(3274944545);
+emit_32(1102752933);
+emit_32(1112219661);
+emit_32(3274688496);
+emit_32(1103879838);
+emit_32(1112219661);
+emit_32(3274432512);
+emit_32(1104593866);
+emit_32(1112219661);
+emit_32(3274176528);
+emit_32(1105083131);
+emit_32(1112219661);
+emit_32(3273920545);
+emit_32(1106256803);
+emit_32(1112219661);
+emit_32(3273664496);
+emit_32(1106808091);
+emit_32(1112219661);
+emit_32(3273408512);
+emit_32(1107450869);
+emit_32(1112219661);
+emit_32(3273152528);
+emit_32(1107444944);
+emit_32(1112219661);
+emit_32(3272896545);
+emit_32(1107418258);
+emit_32(1112219661);
+emit_32(3272640496);
+emit_32(1107742425);
+emit_32(1112219661);
+emit_32(3272384512);
+emit_32(1108019590);
+emit_32(1112219661);
+emit_32(3272128528);
+emit_32(1107796584);
+emit_32(1112219661);
+emit_32(3271872545);
+emit_32(1107736920);
+emit_32(1112219661);
+emit_32(3271616496);
+emit_32(1107725360);
+emit_32(1112219661);
+emit_32(3271163904);
+emit_32(1107830270);
+emit_32(1112219661);
+emit_32(3270651937);
+emit_32(1107833101);
+emit_32(1112219661);
+emit_32(3270139970);
+emit_32(1107955024);
+emit_32(1112219661);
+emit_32(3269627871);
+emit_32(1107743788);
+emit_32(1112219661);
+emit_32(3269115904);
+emit_32(1107368686);
+emit_32(1112219661);
+emit_32(3268603937);
+emit_32(1107312194);
+emit_32(1112219661);
+emit_32(3268091970);
+emit_32(1106815641);
+emit_32(1112219661);
+emit_32(3267579911);
+emit_32(1106204059);
+emit_32(1112219661);
+emit_32(3267067904);
+emit_32(1105597773);
+emit_32(1112219661);
+emit_32(3266555911);
+emit_32(1104651905);
+emit_32(1112219661);
+emit_32(3266043904);
+emit_32(1103516559);
+emit_32(1112219661);
+emit_32(3265531911);
+emit_32(1102993162);
+emit_32(1112219661);
+emit_32(3265019904);
+emit_32(1101898029);
+emit_32(1112219661);
+emit_32(3264507911);
+emit_32(1100758804);
+emit_32(1112219661);
+emit_32(3263995904);
+emit_32(1100657040);
+emit_32(1112219661);
+emit_32(3263483911);
+emit_32(1099876637);
+emit_32(1112219661);
+emit_32(3262775296);
+emit_32(1097071696);
+emit_32(1112219661);
+emit_32(3261751309);
+emit_32(1097587910);
+emit_32(1112219661);
+emit_32(3260727296);
+emit_32(1096851915);
+emit_32(1112219661);
+emit_32(3259703309);
+emit_32(1095734447);
+emit_32(1112219661);
+emit_32(3258679296);
+emit_32(1096755026);
+emit_32(1112219661);
+emit_32(3257655309);
+emit_32(1098731382);
+emit_32(1112219661);
+emit_32(3256631296);
+emit_32(1099251896);
+emit_32(1112219661);
+emit_32(3255607309);
+emit_32(1099497577);
+emit_32(1112219661);
+emit_32(3254386688);
+emit_32(1100323121);
+emit_32(1112219661);
+emit_32(3252338714);
+emit_32(1101464601);
+emit_32(1112219661);
+emit_32(3250290688);
+emit_32(1102066431);
+emit_32(1112219661);
+emit_32(3248242714);
+emit_32(1102544581);
+emit_32(1112219661);
+emit_32(3245998080);
+emit_32(1103985902);
+emit_32(1112219661);
+emit_32(3241902132);
+emit_32(1104242698);
+emit_32(1112219661);
+emit_32(3237609472);
+emit_32(1105399801);
+emit_32(1112219661);
+emit_32(3229220864);
+emit_32(1105617119);
+emit_32(1112219661);
+emit_32(0);
+emit_32(1106104864);
+emit_32(1112219661);
+emit_32(1081737216);
+emit_32(1106473438);
+emit_32(1112219661);
+emit_32(3279552512);
+emit_32(1080840432);
+emit_32(1111195648);
+emit_32(3279296528);
+emit_32(1081651568);
+emit_32(1111195648);
+emit_32(3279040545);
+emit_32(1082066175);
+emit_32(1111195648);
+emit_32(3278784496);
+emit_32(1084264746);
+emit_32(1111195648);
+emit_32(3278528512);
+emit_32(1088920821);
+emit_32(1111195648);
+emit_32(3278272528);
+emit_32(1090060120);
+emit_32(1111195648);
+emit_32(3278016545);
+emit_32(1091098882);
+emit_32(1111195648);
+emit_32(3277760496);
+emit_32(1092897630);
+emit_32(1111195648);
+emit_32(3277504512);
+emit_32(1093865780);
+emit_32(1111195648);
+emit_32(3277248528);
+emit_32(1095144309);
+emit_32(1111195648);
+emit_32(3276992545);
+emit_32(1096518363);
+emit_32(1111195648);
+emit_32(3276736496);
+emit_32(1097299342);
+emit_32(1111195648);
+emit_32(3276480512);
+emit_32(1098421109);
+emit_32(1111195648);
+emit_32(3276224528);
+emit_32(1098491888);
+emit_32(1111195648);
+emit_32(3275968545);
+emit_32(1099350986);
+emit_32(1111195648);
+emit_32(3275712496);
+emit_32(1100200332);
+emit_32(1111195648);
+emit_32(3275456512);
+emit_32(1100698092);
+emit_32(1111195648);
+emit_32(3275200528);
+emit_32(1101450655);
+emit_32(1111195648);
+emit_32(3274944545);
+emit_32(1103069866);
+emit_32(1111195648);
+emit_32(3274688496);
+emit_32(1104305508);
+emit_32(1111195648);
+emit_32(3274432512);
+emit_32(1105027557);
+emit_32(1111195648);
+emit_32(3274176528);
+emit_32(1105330019);
+emit_32(1111195648);
+emit_32(3273920545);
+emit_32(1106064336);
+emit_32(1111195648);
+emit_32(3273664496);
+emit_32(1107261863);
+emit_32(1111195648);
+emit_32(3273408512);
+emit_32(1107667531);
+emit_32(1111195648);
+emit_32(3273152528);
+emit_32(1107670598);
+emit_32(1111195648);
+emit_32(3272896545);
+emit_32(1107641159);
+emit_32(1111195648);
+emit_32(3272640496);
+emit_32(1107722528);
+emit_32(1111195648);
+emit_32(3272384512);
+emit_32(1108132181);
+emit_32(1111195648);
+emit_32(3272128528);
+emit_32(1108041636);
+emit_32(1111195648);
+emit_32(3271872545);
+emit_32(1107852499);
+emit_32(1111195648);
+emit_32(3271616496);
+emit_32(1107940187);
+emit_32(1111195648);
+emit_32(3271163904);
+emit_32(1108075584);
+emit_32(1111195648);
+emit_32(3270651937);
+emit_32(1108051519);
+emit_32(1111195648);
+emit_32(3270139970);
+emit_32(1108131185);
+emit_32(1111195648);
+emit_32(3269627871);
+emit_32(1107856720);
+emit_32(1111195648);
+emit_32(3269115904);
+emit_32(1107481775);
+emit_32(1111195648);
+emit_32(3268603937);
+emit_32(1107354426);
+emit_32(1111195648);
+emit_32(3268091970);
+emit_32(1106901729);
+emit_32(1111195648);
+emit_32(3267579911);
+emit_32(1106228648);
+emit_32(1111195648);
+emit_32(3267067904);
+emit_32(1105262753);
+emit_32(1111195648);
+emit_32(3266555911);
+emit_32(1104721425);
+emit_32(1111195648);
+emit_32(3266043904);
+emit_32(1103674474);
+emit_32(1111195648);
+emit_32(3265531911);
+emit_32(1102786488);
+emit_32(1111195648);
+emit_32(3265019904);
+emit_32(1102197555);
+emit_32(1111195648);
+emit_32(3264507911);
+emit_32(1100931295);
+emit_32(1111195648);
+emit_32(3263995904);
+emit_32(1100417440);
+emit_32(1111195648);
+emit_32(3263483911);
+emit_32(1099561330);
+emit_32(1111195648);
+emit_32(3262775296);
+emit_32(1098381787);
+emit_32(1111195648);
+emit_32(3261751309);
+emit_32(1097372218);
+emit_32(1111195648);
+emit_32(3260727296);
+emit_32(1097540724);
+emit_32(1111195648);
+emit_32(3259703309);
+emit_32(1096128502);
+emit_32(1111195648);
+emit_32(3258679296);
+emit_32(1098525337);
+emit_32(1111195648);
+emit_32(3257655309);
+emit_32(1099283929);
+emit_32(1111195648);
+emit_32(3256631296);
+emit_32(1099669281);
+emit_32(1111195648);
+emit_32(3255607309);
+emit_32(1100104388);
+emit_32(1111195648);
+emit_32(3254386688);
+emit_32(1101177448);
+emit_32(1111195648);
+emit_32(3252338714);
+emit_32(1102411989);
+emit_32(1111195648);
+emit_32(3250290688);
+emit_32(1102859731);
+emit_32(1111195648);
+emit_32(3248242714);
+emit_32(1103261650);
+emit_32(1111195648);
+emit_32(3245998080);
+emit_32(1104208881);
+emit_32(1111195648);
+emit_32(3241902132);
+emit_32(1104930721);
+emit_32(1111195648);
+emit_32(3237609472);
+emit_32(1105910668);
+emit_32(1111195648);
+emit_32(3229220864);
+emit_32(1106135482);
+emit_32(1111195648);
+emit_32(0);
+emit_32(1106438364);
+emit_32(1111195648);
+emit_32(1081737216);
+emit_32(1106707585);
+emit_32(1111195648);
+emit_32(3279552512);
+emit_32(1082299945);
+emit_32(1110171661);
+emit_32(3279296528);
+emit_32(1082335492);
+emit_32(1110171661);
+emit_32(3279040545);
+emit_32(1081611639);
+emit_32(1110171661);
+emit_32(3278784496);
+emit_32(1084483730);
+emit_32(1110171661);
+emit_32(3278528512);
+emit_32(1087813567);
+emit_32(1110171661);
+emit_32(3278272528);
+emit_32(1090011655);
+emit_32(1110171661);
+emit_32(3278016545);
+emit_32(1090662443);
+emit_32(1110171661);
+emit_32(3277760496);
+emit_32(1091411913);
+emit_32(1110171661);
+emit_32(3277504512);
+emit_32(1093599547);
+emit_32(1110171661);
+emit_32(3277248528);
+emit_32(1095137283);
+emit_32(1110171661);
+emit_32(3276992545);
+emit_32(1096248040);
+emit_32(1110171661);
+emit_32(3276736496);
+emit_32(1097581409);
+emit_32(1110171661);
+emit_32(3276480512);
+emit_32(1098493460);
+emit_32(1110171661);
+emit_32(3276224528);
+emit_32(1098645189);
+emit_32(1110171661);
+emit_32(3275968545);
+emit_32(1099528405);
+emit_32(1110171661);
+emit_32(3275712496);
+emit_32(1100673398);
+emit_32(1110171661);
+emit_32(3275456512);
+emit_32(1101618269);
+emit_32(1110171661);
+emit_32(3275200528);
+emit_32(1102431073);
+emit_32(1110171661);
+emit_32(3274944545);
+emit_32(1103528093);
+emit_32(1110171661);
+emit_32(3274688496);
+emit_32(1104554597);
+emit_32(1110171661);
+emit_32(3274432512);
+emit_32(1105069133);
+emit_32(1110171661);
+emit_32(3274176528);
+emit_32(1105654658);
+emit_32(1110171661);
+emit_32(3273920545);
+emit_32(1106835145);
+emit_32(1110171661);
+emit_32(3273664496);
+emit_32(1107634160);
+emit_32(1110171661);
+emit_32(3273408512);
+emit_32(1107894338);
+emit_32(1110171661);
+emit_32(3273152528);
+emit_32(1107815222);
+emit_32(1110171661);
+emit_32(3272896545);
+emit_32(1107886788);
+emit_32(1110171661);
+emit_32(3272640496);
+emit_32(1107869984);
+emit_32(1110171661);
+emit_32(3272384512);
+emit_32(1108048085);
+emit_32(1110171661);
+emit_32(3272128528);
+emit_32(1108254890);
+emit_32(1110171661);
+emit_32(3271872545);
+emit_32(1108213734);
+emit_32(1110171661);
+emit_32(3271616496);
+emit_32(1108197324);
+emit_32(1110171661);
+emit_32(3271163904);
+emit_32(1108442612);
+emit_32(1110171661);
+emit_32(3270651937);
+emit_32(1108195515);
+emit_32(1110171661);
+emit_32(3270139970);
+emit_32(1107913422);
+emit_32(1110171661);
+emit_32(3269627871);
+emit_32(1108099754);
+emit_32(1110171661);
+emit_32(3269115904);
+emit_32(1107690809);
+emit_32(1110171661);
+emit_32(3268603937);
+emit_32(1107419726);
+emit_32(1110171661);
+emit_32(3268091970);
+emit_32(1106916881);
+emit_32(1110171661);
+emit_32(3267579911);
+emit_32(1106123581);
+emit_32(1110171661);
+emit_32(3267067904);
+emit_32(1105152285);
+emit_32(1110171661);
+emit_32(3266555911);
+emit_32(1104426985);
+emit_32(1110171661);
+emit_32(3266043904);
+emit_32(1103754376);
+emit_32(1110171661);
+emit_32(3265531911);
+emit_32(1102897113);
+emit_32(1110171661);
+emit_32(3265019904);
+emit_32(1102036808);
+emit_32(1110171661);
+emit_32(3264507911);
+emit_32(1100742237);
+emit_32(1110171661);
+emit_32(3263995904);
+emit_32(1099863477);
+emit_32(1110171661);
+emit_32(3263483911);
+emit_32(1099645950);
+emit_32(1110171661);
+emit_32(3262775296);
+emit_32(1099481114);
+emit_32(1110171661);
+emit_32(3261751309);
+emit_32(1098210135);
+emit_32(1110171661);
+emit_32(3260727296);
+emit_32(1097645582);
+emit_32(1110171661);
+emit_32(3259703309);
+emit_32(1097853619);
+emit_32(1110171661);
+emit_32(3258679296);
+emit_32(1099526675);
+emit_32(1110171661);
+emit_32(3257655309);
+emit_32(1100018090);
+emit_32(1110171661);
+emit_32(3256631296);
+emit_32(1100522927);
+emit_32(1110171661);
+emit_32(3255607309);
+emit_32(1100845993);
+emit_32(1110171661);
+emit_32(3254386688);
+emit_32(1101870924);
+emit_32(1110171661);
+emit_32(3252338714);
+emit_32(1102805362);
+emit_32(1110171661);
+emit_32(3250290688);
+emit_32(1103401216);
+emit_32(1110171661);
+emit_32(3248242714);
+emit_32(1103731255);
+emit_32(1110171661);
+emit_32(3245998080);
+emit_32(1104590458);
+emit_32(1110171661);
+emit_32(3241902132);
+emit_32(1105688946);
+emit_32(1110171661);
+emit_32(3237609472);
+emit_32(1106199393);
+emit_32(1110171661);
+emit_32(3229220864);
+emit_32(1106912477);
+emit_32(1110171661);
+emit_32(0);
+emit_32(1106977279);
+emit_32(1110171661);
+emit_32(1081737216);
+emit_32(1107240944);
+emit_32(1110171661);
+emit_32(3279552512);
+emit_32(1082717131);
+emit_32(1109147648);
+emit_32(3279296528);
+emit_32(1082557014);
+emit_32(1109147648);
+emit_32(3279040545);
+emit_32(1081304070);
+emit_32(1109147648);
+emit_32(3278784496);
+emit_32(1083792278);
+emit_32(1109147648);
+emit_32(3278528512);
+emit_32(1085314873);
+emit_32(1109147648);
+emit_32(3278272528);
+emit_32(1088245664);
+emit_32(1109147648);
+emit_32(3278016545);
+emit_32(1090788797);
+emit_32(1109147648);
+emit_32(3277760496);
+emit_32(1091410718);
+emit_32(1109147648);
+emit_32(3277504512);
+emit_32(1092169803);
+emit_32(1109147648);
+emit_32(3277248528);
+emit_32(1094073608);
+emit_32(1109147648);
+emit_32(3276992545);
+emit_32(1095322147);
+emit_32(1109147648);
+emit_32(3276736496);
+emit_32(1097073584);
+emit_32(1109147648);
+emit_32(3276480512);
+emit_32(1097631321);
+emit_32(1109147648);
+emit_32(3276224528);
+emit_32(1098886781);
+emit_32(1109147648);
+emit_32(3275968545);
+emit_32(1099653448);
+emit_32(1109147648);
+emit_32(3275712496);
+emit_32(1100796029);
+emit_32(1109147648);
+emit_32(3275456512);
+emit_32(1102110786);
+emit_32(1109147648);
+emit_32(3275200528);
+emit_32(1103014553);
+emit_32(1109147648);
+emit_32(3274944545);
+emit_32(1103661420);
+emit_32(1109147648);
+emit_32(3274688496);
+emit_32(1104730758);
+emit_32(1109147648);
+emit_32(3274432512);
+emit_32(1105461248);
+emit_32(1109147648);
+emit_32(3274176528);
+emit_32(1106228019);
+emit_32(1109147648);
+emit_32(3273920545);
+emit_32(1107398361);
+emit_32(1109147648);
+emit_32(3273664496);
+emit_32(1107773987);
+emit_32(1109147648);
+emit_32(3273408512);
+emit_32(1107908336);
+emit_32(1109147648);
+emit_32(3273152528);
+emit_32(1107942729);
+emit_32(1109147648);
+emit_32(3272896545);
+emit_32(1108010231);
+emit_32(1109147648);
+emit_32(3272640496);
+emit_32(1107850140);
+emit_32(1109147648);
+emit_32(3272384512);
+emit_32(1108057339);
+emit_32(1109147648);
+emit_32(3272128528);
+emit_32(1108245977);
+emit_32(1109147648);
+emit_32(3271872545);
+emit_32(1108269937);
+emit_32(1109147648);
+emit_32(3271616496);
+emit_32(1108532291);
+emit_32(1109147648);
+emit_32(3271163904);
+emit_32(1108595809);
+emit_32(1109147648);
+emit_32(3270651937);
+emit_32(1108363942);
+emit_32(1109147648);
+emit_32(3270139970);
+emit_32(1108139599);
+emit_32(1109147648);
+emit_32(3269627871);
+emit_32(1108065465);
+emit_32(1109147648);
+emit_32(3269115904);
+emit_32(1107970150);
+emit_32(1109147648);
+emit_32(3268603937);
+emit_32(1107690678);
+emit_32(1109147648);
+emit_32(3268091970);
+emit_32(1106957042);
+emit_32(1109147648);
+emit_32(3267579911);
+emit_32(1106262517);
+emit_32(1109147648);
+emit_32(3267067904);
+emit_32(1105527937);
+emit_32(1109147648);
+emit_32(3266555911);
+emit_32(1104380638);
+emit_32(1109147648);
+emit_32(3266043904);
+emit_32(1103529719);
+emit_32(1109147648);
+emit_32(3265531911);
+emit_32(1102593130);
+emit_32(1109147648);
+emit_32(3265019904);
+emit_32(1101585816);
+emit_32(1109147648);
+emit_32(3264507911);
+emit_32(1100545471);
+emit_32(1109147648);
+emit_32(3263995904);
+emit_32(1100004144);
+emit_32(1109147648);
+emit_32(3263483911);
+emit_32(1099601124);
+emit_32(1109147648);
+emit_32(3262775296);
+emit_32(1099485518);
+emit_32(1109147648);
+emit_32(3261751309);
+emit_32(1099132987);
+emit_32(1109147648);
+emit_32(3260727296);
+emit_32(1098562037);
+emit_32(1109147648);
+emit_32(3259703309);
+emit_32(1099204605);
+emit_32(1109147648);
+emit_32(3258679296);
+emit_32(1100206834);
+emit_32(1109147648);
+emit_32(3257655309);
+emit_32(1100697777);
+emit_32(1109147648);
+emit_32(3256631296);
+emit_32(1100970774);
+emit_32(1109147648);
+emit_32(3255607309);
+emit_32(1101185522);
+emit_32(1109147648);
+emit_32(3254386688);
+emit_32(1102281336);
+emit_32(1109147648);
+emit_32(3252338714);
+emit_32(1103401478);
+emit_32(1109147648);
+emit_32(3250290688);
+emit_32(1103912763);
+emit_32(1109147648);
+emit_32(3248242714);
+emit_32(1104404808);
+emit_32(1109147648);
+emit_32(3245998080);
+emit_32(1105352196);
+emit_32(1109147648);
+emit_32(3241902132);
+emit_32(1106248519);
+emit_32(1109147648);
+emit_32(3237609472);
+emit_32(1107362631);
+emit_32(1109147648);
+emit_32(3229220864);
+emit_32(1107724259);
+emit_32(1109147648);
+emit_32(0);
+emit_32(1107777290);
+emit_32(1109147648);
+emit_32(1081737216);
+emit_32(1108060956);
+emit_32(1109147648);
+emit_32(3279552512);
+emit_32(1081790232);
+emit_32(1108123661);
+emit_32(3279296528);
+emit_32(1079535290);
+emit_32(1108123661);
+emit_32(3279040545);
+emit_32(1079065864);
+emit_32(1108123661);
+emit_32(3278784496);
+emit_32(1082272577);
+emit_32(1108123661);
+emit_32(3278528512);
+emit_32(1083963574);
+emit_32(1108123661);
+emit_32(3278272528);
+emit_32(1087349677);
+emit_32(1108123661);
+emit_32(3278016545);
+emit_32(1088785241);
+emit_32(1108123661);
+emit_32(3277760496);
+emit_32(1090741705);
+emit_32(1108123661);
+emit_32(3277504512);
+emit_32(1090749360);
+emit_32(1108123661);
+emit_32(3277248528);
+emit_32(1093053448);
+emit_32(1108123661);
+emit_32(3276992545);
+emit_32(1094660601);
+emit_32(1108123661);
+emit_32(3276736496);
+emit_32(1096196555);
+emit_32(1108123661);
+emit_32(3276480512);
+emit_32(1096902351);
+emit_32(1108123661);
+emit_32(3276224528);
+emit_32(1098391434);
+emit_32(1108123661);
+emit_32(3275968545);
+emit_32(1099380084);
+emit_32(1108123661);
+emit_32(3275712496);
+emit_32(1101235225);
+emit_32(1108123661);
+emit_32(3275456512);
+emit_32(1102578188);
+emit_32(1108123661);
+emit_32(3275200528);
+emit_32(1103112385);
+emit_32(1108123661);
+emit_32(3274944545);
+emit_32(1103997541);
+emit_32(1108123661);
+emit_32(3274688496);
+emit_32(1104833046);
+emit_32(1108123661);
+emit_32(3274432512);
+emit_32(1105701582);
+emit_32(1108123661);
+emit_32(3274176528);
+emit_32(1106849458);
+emit_32(1108123661);
+emit_32(3273920545);
+emit_32(1107522617);
+emit_32(1108123661);
+emit_32(3273664496);
+emit_32(1107703025);
+emit_32(1108123661);
+emit_32(3273408512);
+emit_32(1107971565);
+emit_32(1108123661);
+emit_32(3273152528);
+emit_32(1107971565);
+emit_32(1108123661);
+emit_32(3272896545);
+emit_32(1107873025);
+emit_32(1108123661);
+emit_32(3272640496);
+emit_32(1108008685);
+emit_32(1108123661);
+emit_32(3272384512);
+emit_32(1108230878);
+emit_32(1108123661);
+emit_32(3272128528);
+emit_32(1108292220);
+emit_32(1108123661);
+emit_32(3271872545);
+emit_32(1108636520);
+emit_32(1108123661);
+emit_32(3271616496);
+emit_32(1108671909);
+emit_32(1108123661);
+emit_32(3271163904);
+emit_32(1108573789);
+emit_32(1108123661);
+emit_32(3270651937);
+emit_32(1108191583);
+emit_32(1108123661);
+emit_32(3270139970);
+emit_32(1108044546);
+emit_32(1108123661);
+emit_32(3269627871);
+emit_32(1108195856);
+emit_32(1108123661);
+emit_32(3269115904);
+emit_32(1108061848);
+emit_32(1108123661);
+emit_32(3268603937);
+emit_32(1107692487);
+emit_32(1108123661);
+emit_32(3268091970);
+emit_32(1107358332);
+emit_32(1108123661);
+emit_32(3267579911);
+emit_32(1106436476);
+emit_32(1108123661);
+emit_32(3267067904);
+emit_32(1105876117);
+emit_32(1108123661);
+emit_32(3266555911);
+emit_32(1104926002);
+emit_32(1108123661);
+emit_32(3266043904);
+emit_32(1103527150);
+emit_32(1108123661);
+emit_32(3265531911);
+emit_32(1102838969);
+emit_32(1108123661);
+emit_32(3265019904);
+emit_32(1101768163);
+emit_32(1108123661);
+emit_32(3264507911);
+emit_32(1100951952);
+emit_32(1108123661);
+emit_32(3263995904);
+emit_32(1099817497);
+emit_32(1108123661);
+emit_32(3263483911);
+emit_32(1099592683);
+emit_32(1108123661);
+emit_32(3262775296);
+emit_32(1099523424);
+emit_32(1108123661);
+emit_32(3261751309);
+emit_32(1099184734);
+emit_32(1108123661);
+emit_32(3260727296);
+emit_32(1099580100);
+emit_32(1108123661);
+emit_32(3259703309);
+emit_32(1100319870);
+emit_32(1108123661);
+emit_32(3258679296);
+emit_32(1100702181);
+emit_32(1108123661);
+emit_32(3257655309);
+emit_32(1101110811);
+emit_32(1108123661);
+emit_32(3256631296);
+emit_32(1101752487);
+emit_32(1108123661);
+emit_32(3255607309);
+emit_32(1101832074);
+emit_32(1108123661);
+emit_32(3254386688);
+emit_32(1103107038);
+emit_32(1108123661);
+emit_32(3252338714);
+emit_32(1103861173);
+emit_32(1108123661);
+emit_32(3250290688);
+emit_32(1104152415);
+emit_32(1108123661);
+emit_32(3248242714);
+emit_32(1104902672);
+emit_32(1108123661);
+emit_32(3245998080);
+emit_32(1106376602);
+emit_32(1108123661);
+emit_32(3241902132);
+emit_32(1107508593);
+emit_32(1108123661);
+emit_32(3237609472);
+emit_32(1108028267);
+emit_32(1108123661);
+emit_32(3229220864);
+emit_32(1108316180);
+emit_32(1108123661);
+emit_32(0);
+emit_32(1108600553);
+emit_32(1108123661);
+emit_32(1081737216);
+emit_32(1109011386);
+emit_32(1108123661);
+emit_32(3279552512);
+emit_32(1074938711);
+emit_32(1106903040);
+emit_32(3279296528);
+emit_32(1070708671);
+emit_32(1106903040);
+emit_32(3279040545);
+emit_32(1075430996);
+emit_32(1106903040);
+emit_32(3278784496);
+emit_32(1078754772);
+emit_32(1106903040);
+emit_32(3278528512);
+emit_32(1082105015);
+emit_32(1106903040);
+emit_32(3278272528);
+emit_32(1084220747);
+emit_32(1106903040);
+emit_32(3278016545);
+emit_32(1085553718);
+emit_32(1106903040);
+emit_32(3277760496);
+emit_32(1088135228);
+emit_32(1106903040);
+emit_32(3277504512);
+emit_32(1089208635);
+emit_32(1106903040);
+emit_32(3277248528);
+emit_32(1091931860);
+emit_32(1106903040);
+emit_32(3276992545);
+emit_32(1094402336);
+emit_32(1106903040);
+emit_32(3276736496);
+emit_32(1096213751);
+emit_32(1106903040);
+emit_32(3276480512);
+emit_32(1097279629);
+emit_32(1106903040);
+emit_32(3276224528);
+emit_32(1098783601);
+emit_32(1106903040);
+emit_32(3275968545);
+emit_32(1099888067);
+emit_32(1106903040);
+emit_32(3275712496);
+emit_32(1101525837);
+emit_32(1106903040);
+emit_32(3275456512);
+emit_32(1102857267);
+emit_32(1106903040);
+emit_32(3275200528);
+emit_32(1103317277);
+emit_32(1106903040);
+emit_32(3274944545);
+emit_32(1104193048);
+emit_32(1106903040);
+emit_32(3274688496);
+emit_32(1105188461);
+emit_32(1106903040);
+emit_32(3274432512);
+emit_32(1105975732);
+emit_32(1106903040);
+emit_32(3274176528);
+emit_32(1107142692);
+emit_32(1106903040);
+emit_32(3273920545);
+emit_32(1107580315);
+emit_32(1106903040);
+emit_32(3273664496);
+emit_32(1107715634);
+emit_32(1106903040);
+emit_32(3273408512);
+emit_32(1107697441);
+emit_32(1106903040);
+emit_32(3273152528);
+emit_32(1107818683);
+emit_32(1106903040);
+emit_32(3272896545);
+emit_32(1108195331);
+emit_32(1106903040);
+emit_32(3272640496);
+emit_32(1108463609);
+emit_32(1106903040);
+emit_32(3272384512);
+emit_32(1108323782);
+emit_32(1106903040);
+emit_32(3272128528);
+emit_32(1108524374);
+emit_32(1106903040);
+emit_32(3271872545);
+emit_32(1108820912);
+emit_32(1106903040);
+emit_32(3271616496);
+emit_32(1108768614);
+emit_32(1106903040);
+emit_32(3271163904);
+emit_32(1108591929);
+emit_32(1106903040);
+emit_32(3270651937);
+emit_32(1108250146);
+emit_32(1106903040);
+emit_32(3270139970);
+emit_32(1108083370);
+emit_32(1106903040);
+emit_32(3269627871);
+emit_32(1108183876);
+emit_32(1106903040);
+emit_32(3269115904);
+emit_32(1107985354);
+emit_32(1106903040);
+emit_32(3268603937);
+emit_32(1107793333);
+emit_32(1106903040);
+emit_32(3268091970);
+emit_32(1107344595);
+emit_32(1106903040);
+emit_32(3267579911);
+emit_32(1106660190);
+emit_32(1106903040);
+emit_32(3267067904);
+emit_32(1105863377);
+emit_32(1106903040);
+emit_32(3266555911);
+emit_32(1104810344);
+emit_32(1106903040);
+emit_32(3266043904);
+emit_32(1103848328);
+emit_32(1106903040);
+emit_32(3265531911);
+emit_32(1102592396);
+emit_32(1106903040);
+emit_32(3265019904);
+emit_32(1101769893);
+emit_32(1106903040);
+emit_32(3264507911);
+emit_32(1100719378);
+emit_32(1106903040);
+emit_32(3263995904);
+emit_32(1100007709);
+emit_32(1106903040);
+emit_32(3263483911);
+emit_32(1099495585);
+emit_32(1106903040);
+emit_32(3262775296);
+emit_32(1099523739);
+emit_32(1106903040);
+emit_32(3261751309);
+emit_32(1099506857);
+emit_32(1106903040);
+emit_32(3260727296);
+emit_32(1100188693);
+emit_32(1106903040);
+emit_32(3259703309);
+emit_32(1100974496);
+emit_32(1106903040);
+emit_32(3258679296);
+emit_32(1101640447);
+emit_32(1106903040);
+emit_32(3257655309);
+emit_32(1101639503);
+emit_32(1106903040);
+emit_32(3256631296);
+emit_32(1102123945);
+emit_32(1106903040);
+emit_32(3255607309);
+emit_32(1102739250);
+emit_32(1106903040);
+emit_32(3254386688);
+emit_32(1103471260);
+emit_32(1106903040);
+emit_32(3252338714);
+emit_32(1104291457);
+emit_32(1106903040);
+emit_32(3250290688);
+emit_32(1104973241);
+emit_32(1106903040);
+emit_32(3248242714);
+emit_32(1106462586);
+emit_32(1106903040);
+emit_32(3245998080);
+emit_32(1107570275);
+emit_32(1106903040);
+emit_32(3241902132);
+emit_32(1108078939);
+emit_32(1106903040);
+emit_32(3237609472);
+emit_32(1108626034);
+emit_32(1106903040);
+emit_32(3229220864);
+emit_32(1109189434);
+emit_32(1106903040);
+emit_32(0);
+emit_32(1109489300);
+emit_32(1106903040);
+emit_32(1081737216);
+emit_32(1109770397);
+emit_32(1106903040);
+emit_32(3279552512);
+emit_32(1056202922);
+emit_32(1104855066);
+emit_32(3279296528);
+emit_32(1059176634);
+emit_32(1104855066);
+emit_32(3279040545);
+emit_32(1067152489);
+emit_32(1104855066);
+emit_32(3278784496);
+emit_32(1069776361);
+emit_32(1104855066);
+emit_32(3278528512);
+emit_32(1076809790);
+emit_32(1104855066);
+emit_32(3278272528);
+emit_32(1080678154);
+emit_32(1104855066);
+emit_32(3278016545);
+emit_32(1084300292);
+emit_32(1104855066);
+emit_32(3277760496);
+emit_32(1086892330);
+emit_32(1104855066);
+emit_32(3277504512);
+emit_32(1089616510);
+emit_32(1104855066);
+emit_32(3277248528);
+emit_32(1092235758);
+emit_32(1104855066);
+emit_32(3276992545);
+emit_32(1094086505);
+emit_32(1104855066);
+emit_32(3276736496);
+emit_32(1095456260);
+emit_32(1104855066);
+emit_32(3276480512);
+emit_32(1097209794);
+emit_32(1104855066);
+emit_32(3276224528);
+emit_32(1098815478);
+emit_32(1104855066);
+emit_32(3275968545);
+emit_32(1099901331);
+emit_32(1104855066);
+emit_32(3275712496);
+emit_32(1101448138);
+emit_32(1104855066);
+emit_32(3275456512);
+emit_32(1102457340);
+emit_32(1104855066);
+emit_32(3275200528);
+emit_32(1103405724);
+emit_32(1104855014);
+emit_32(3274944545);
+emit_32(1104703652);
+emit_32(1104855066);
+emit_32(3274688496);
+emit_32(1105909409);
+emit_32(1104855014);
+emit_32(3274432512);
+emit_32(1106485392);
+emit_32(1104855066);
+emit_32(3274176528);
+emit_32(1107410708);
+emit_32(1104855014);
+emit_32(3273920545);
+emit_32(1107950751);
+emit_32(1104855066);
+emit_32(3273664496);
+emit_32(1108072569);
+emit_32(1104855014);
+emit_32(3273408512);
+emit_32(1108067090);
+emit_32(1104855066);
+emit_32(3273152528);
+emit_32(1108270514);
+emit_32(1104855014);
+emit_32(3272896545);
+emit_32(1108617121);
+emit_32(1104855066);
+emit_32(3272640496);
+emit_32(1108893604);
+emit_32(1104855014);
+emit_32(3272384512);
+emit_32(1108708478);
+emit_32(1104855066);
+emit_32(3272128528);
+emit_32(1108458498);
+emit_32(1104855014);
+emit_32(3271872545);
+emit_32(1108616544);
+emit_32(1104855066);
+emit_32(3271616496);
+emit_32(1108674898);
+emit_32(1104855014);
+emit_32(3271163904);
+emit_32(1108489064);
+emit_32(1104855066);
+emit_32(3270651937);
+emit_32(1108208884);
+emit_32(1104855014);
+emit_32(3270139970);
+emit_32(1108168330);
+emit_32(1104855066);
+emit_32(3269627871);
+emit_32(1107919032);
+emit_32(1104855014);
+emit_32(3269115904);
+emit_32(1107884900);
+emit_32(1104855066);
+emit_32(3268603937);
+emit_32(1107737995);
+emit_32(1104855014);
+emit_32(3268091970);
+emit_32(1107388714);
+emit_32(1104855066);
+emit_32(3267579911);
+emit_32(1106305876);
+emit_32(1104855014);
+emit_32(3267067904);
+emit_32(1105456634);
+emit_32(1104855066);
+emit_32(3266555911);
+emit_32(1104695683);
+emit_32(1104855014);
+emit_32(3266043904);
+emit_32(1103610459);
+emit_32(1104855066);
+emit_32(3265531911);
+emit_32(1102562093);
+emit_32(1104855014);
+emit_32(3265019904);
+emit_32(1101922409);
+emit_32(1104855066);
+emit_32(3264507911);
+emit_32(1100403809);
+emit_32(1104855066);
+emit_32(3263995904);
+emit_32(1100079589);
+emit_32(1104855066);
+emit_32(3263483911);
+emit_32(1100150630);
+emit_32(1104855066);
+emit_32(3262775296);
+emit_32(1100309489);
+emit_32(1104855066);
+emit_32(3261751309);
+emit_32(1100247676);
+emit_32(1104855066);
+emit_32(3260727296);
+emit_32(1100564555);
+emit_32(1104855066);
+emit_32(3259703309);
+emit_32(1101442528);
+emit_32(1104855066);
+emit_32(3258679296);
+emit_32(1101848484);
+emit_32(1104855066);
+emit_32(3257655309);
+emit_32(1102017567);
+emit_32(1104855014);
+emit_32(3256631296);
+emit_32(1102603144);
+emit_32(1104855066);
+emit_32(3255607309);
+emit_32(1103556772);
+emit_32(1104855014);
+emit_32(3254386688);
+emit_32(1103988313);
+emit_32(1104855066);
+emit_32(3252338714);
+emit_32(1105183113);
+emit_32(1104855014);
+emit_32(3250290688);
+emit_32(1106410471);
+emit_32(1104855066);
+emit_32(3248242714);
+emit_32(1107817844);
+emit_32(1104855014);
+emit_32(3245998080);
+emit_32(1108265874);
+emit_32(1104855066);
+emit_32(3241902132);
+emit_32(1108848489);
+emit_32(1104855014);
+emit_32(3237609472);
+emit_32(1109428929);
+emit_32(1104855066);
+emit_32(3229220864);
+emit_32(1109814464);
+emit_32(1104855014);
+emit_32(0);
+emit_32(1109989261);
+emit_32(1104855066);
+emit_32(1081737216);
+emit_32(1110109952);
+emit_32(1104855014);
+emit_32(3279552512);
+emit_32(1043753825);
+emit_32(1102807040);
+emit_32(3279296528);
+emit_32(1066019523);
+emit_32(1102807040);
+emit_32(3279040545);
+emit_32(1069754970);
+emit_32(1102807040);
+emit_32(3278784496);
+emit_32(1076201867);
+emit_32(1102807040);
+emit_32(3278528512);
+emit_32(1080094139);
+emit_32(1102807040);
+emit_32(3278272528);
+emit_32(1082614937);
+emit_32(1102807040);
+emit_32(3278016545);
+emit_32(1085915917);
+emit_32(1102807040);
+emit_32(3277760496);
+emit_32(1088968951);
+emit_32(1102807040);
+emit_32(3277504512);
+emit_32(1091412437);
+emit_32(1102807040);
+emit_32(3277248528);
+emit_32(1093562951);
+emit_32(1102807040);
+emit_32(3276992545);
+emit_32(1095461818);
+emit_32(1102807040);
+emit_32(3276736496);
+emit_32(1097780324);
+emit_32(1102807040);
+emit_32(3276480512);
+emit_32(1098541276);
+emit_32(1102807040);
+emit_32(3276224528);
+emit_32(1099184996);
+emit_32(1102807040);
+emit_32(3275968545);
+emit_32(1099512414);
+emit_32(1102807040);
+emit_32(3275712496);
+emit_32(1101300079);
+emit_32(1102807040);
+emit_32(3275456512);
+emit_32(1102630565);
+emit_32(1102807040);
+emit_32(3275200528);
+emit_32(1103513990);
+emit_32(1102807040);
+emit_32(3274944545);
+emit_32(1104603251);
+emit_32(1102807040);
+emit_32(3274688496);
+emit_32(1105499154);
+emit_32(1102807040);
+emit_32(3274432512);
+emit_32(1106400667);
+emit_32(1102807040);
+emit_32(3274176528);
+emit_32(1107499889);
+emit_32(1102807040);
+emit_32(3273920545);
+emit_32(1107983047);
+emit_32(1102807040);
+emit_32(3273664496);
+emit_32(1108263620);
+emit_32(1102807040);
+emit_32(3273408512);
+emit_32(1108637542);
+emit_32(1102807040);
+emit_32(3273152528);
+emit_32(1108628367);
+emit_32(1102807040);
+emit_32(3272896545);
+emit_32(1108868989);
+emit_32(1102807040);
+emit_32(3272640496);
+emit_32(1109049213);
+emit_32(1102807040);
+emit_32(3272384512);
+emit_32(1108849748);
+emit_32(1102807040);
+emit_32(3272128528);
+emit_32(1108540811);
+emit_32(1102807040);
+emit_32(3271872545);
+emit_32(1108655184);
+emit_32(1102807040);
+emit_32(3271616496);
+emit_32(1108572425);
+emit_32(1102807040);
+emit_32(3271163904);
+emit_32(1108411810);
+emit_32(1102807040);
+emit_32(3270651937);
+emit_32(1108042344);
+emit_32(1102807040);
+emit_32(3270139970);
+emit_32(1107971460);
+emit_32(1102807040);
+emit_32(3269627871);
+emit_32(1107793412);
+emit_32(1102807040);
+emit_32(3269115904);
+emit_32(1107689131);
+emit_32(1102807040);
+emit_32(3268603937);
+emit_32(1107563643);
+emit_32(1102807040);
+emit_32(3268091970);
+emit_32(1107010152);
+emit_32(1102807040);
+emit_32(3267579911);
+emit_32(1106032669);
+emit_32(1102807040);
+emit_32(3267067904);
+emit_32(1105136609);
+emit_32(1102807040);
+emit_32(3266555911);
+emit_32(1104406695);
+emit_32(1102807040);
+emit_32(3266043904);
+emit_32(1103385749);
+emit_32(1102807040);
+emit_32(3265531911);
+emit_32(1102373034);
+emit_32(1102807040);
+emit_32(3265019904);
+emit_32(1101728317);
+emit_32(1102807040);
+emit_32(3264507911);
+emit_32(1100615464);
+emit_32(1102807040);
+emit_32(3263995904);
+emit_32(1100840278);
+emit_32(1102807040);
+emit_32(3263483911);
+emit_32(1100652636);
+emit_32(1102807040);
+emit_32(3262775296);
+emit_32(1101193963);
+emit_32(1102807040);
+emit_32(3261751309);
+emit_32(1101527463);
+emit_32(1102807040);
+emit_32(3260727296);
+emit_32(1101300761);
+emit_32(1102807040);
+emit_32(3259703309);
+emit_32(1101861382);
+emit_32(1102807040);
+emit_32(3258679296);
+emit_32(1102090338);
+emit_32(1102807040);
+emit_32(3257655309);
+emit_32(1102730966);
+emit_32(1102807040);
+emit_32(3256631296);
+emit_32(1103554255);
+emit_32(1102807040);
+emit_32(3255607309);
+emit_32(1104113408);
+emit_32(1102807040);
+emit_32(3254386688);
+emit_32(1104786647);
+emit_32(1102807040);
+emit_32(3252338714);
+emit_32(1106105913);
+emit_32(1102807040);
+emit_32(3250290688);
+emit_32(1107509877);
+emit_32(1102807040);
+emit_32(3248242714);
+emit_32(1108222175);
+emit_32(1102807040);
+emit_32(3245998080);
+emit_32(1108925324);
+emit_32(1102807040);
+emit_32(3241902132);
+emit_32(1109456873);
+emit_32(1102807040);
+emit_32(3237609472);
+emit_32(1109851609);
+emit_32(1102807040);
+emit_32(3229220864);
+emit_32(1110277358);
+emit_32(1102807040);
+emit_32(0);
+emit_32(1110377130);
+emit_32(1102807040);
+emit_32(1081737216);
+emit_32(1110619796);
+emit_32(1102807040);
+emit_32(3279552512);
+emit_32(1041074638);
+emit_32(1100759066);
+emit_32(3279296528);
+emit_32(1068712015);
+emit_32(1100759066);
+emit_32(3279040545);
+emit_32(1079048248);
+emit_32(1100759066);
+emit_32(3278784496);
+emit_32(1080674002);
+emit_32(1100759066);
+emit_32(3278528512);
+emit_32(1084030494);
+emit_32(1100759066);
+emit_32(3278272528);
+emit_32(1086394970);
+emit_32(1100759066);
+emit_32(3278016545);
+emit_32(1090514279);
+emit_32(1100759066);
+emit_32(3277760496);
+emit_32(1092005166);
+emit_32(1100759066);
+emit_32(3277504512);
+emit_32(1092661805);
+emit_32(1100759066);
+emit_32(3277248528);
+emit_32(1094882479);
+emit_32(1100759066);
+emit_32(3276992545);
+emit_32(1096495818);
+emit_32(1100759066);
+emit_32(3276736496);
+emit_32(1098656304);
+emit_32(1100759066);
+emit_32(3276480512);
+emit_32(1098988860);
+emit_32(1100759066);
+emit_32(3276224528);
+emit_32(1099485466);
+emit_32(1100759066);
+emit_32(3275968545);
+emit_32(1100054109);
+emit_32(1100759066);
+emit_32(3275712496);
+emit_32(1101363203);
+emit_32(1100759066);
+emit_32(3275456512);
+emit_32(1102623015);
+emit_32(1100759014);
+emit_32(3275200528);
+emit_32(1103260025);
+emit_32(1100759066);
+emit_32(3274944545);
+emit_32(1104497764);
+emit_32(1100759014);
+emit_32(3274688496);
+emit_32(1105320739);
+emit_32(1100759066);
+emit_32(3274432512);
+emit_32(1106586055);
+emit_32(1100759014);
+emit_32(3274176528);
+emit_32(1107523640);
+emit_32(1100759066);
+emit_32(3273920545);
+emit_32(1108105783);
+emit_32(1100759014);
+emit_32(3273664496);
+emit_32(1108678148);
+emit_32(1100759066);
+emit_32(3273408512);
+emit_32(1109027062);
+emit_32(1100759014);
+emit_32(3273152528);
+emit_32(1108942022);
+emit_32(1100759066);
+emit_32(3272896545);
+emit_32(1108995290);
+emit_32(1100759014);
+emit_32(3272640496);
+emit_32(1108955129);
+emit_32(1100759066);
+emit_32(3272384512);
+emit_32(1108906895);
+emit_32(1100759014);
+emit_32(3272128528);
+emit_32(1108765993);
+emit_32(1100759014);
+emit_32(3271872545);
+emit_32(1108661948);
+emit_32(1100759014);
+emit_32(3271616496);
+emit_32(1108494097);
+emit_32(1100759014);
+emit_32(3271163904);
+emit_32(1108408166);
+emit_32(1100759014);
+emit_32(3270651937);
+emit_32(1107959611);
+emit_32(1100759014);
+emit_32(3270139970);
+emit_32(1107654974);
+emit_32(1100759014);
+emit_32(3269627871);
+emit_32(1107500859);
+emit_32(1100759014);
+emit_32(3269115904);
+emit_32(1107220916);
+emit_32(1100759014);
+emit_32(3268603937);
+emit_32(1106950121);
+emit_32(1100759014);
+emit_32(3268091970);
+emit_32(1106110684);
+emit_32(1100759014);
+emit_32(3267579911);
+emit_32(1105572449);
+emit_32(1100759014);
+emit_32(3267067904);
+emit_32(1105141642);
+emit_32(1100759014);
+emit_32(3266555911);
+emit_32(1104163950);
+emit_32(1100759014);
+emit_32(3266043904);
+emit_32(1103388685);
+emit_32(1100759014);
+emit_32(3265531911);
+emit_32(1102762790);
+emit_32(1100759014);
+emit_32(3265019904);
+emit_32(1101771361);
+emit_32(1100759066);
+emit_32(3264507911);
+emit_32(1101188668);
+emit_32(1100759066);
+emit_32(3263995904);
+emit_32(1101103314);
+emit_32(1100759066);
+emit_32(3263483911);
+emit_32(1101520595);
+emit_32(1100759066);
+emit_32(3262775296);
+emit_32(1102173438);
+emit_32(1100759014);
+emit_32(3261751309);
+emit_32(1102239498);
+emit_32(1100759014);
+emit_32(3260727296);
+emit_32(1102454928);
+emit_32(1100759014);
+emit_32(3259703309);
+emit_32(1102538762);
+emit_32(1100759014);
+emit_32(3258679296);
+emit_32(1102868120);
+emit_32(1100759014);
+emit_32(3257655309);
+emit_32(1103304380);
+emit_32(1100759014);
+emit_32(3256631296);
+emit_32(1103894256);
+emit_32(1100759014);
+emit_32(3255607309);
+emit_32(1104606187);
+emit_32(1100759014);
+emit_32(3254386688);
+emit_32(1105706615);
+emit_32(1100759014);
+emit_32(3252338714);
+emit_32(1106778469);
+emit_32(1100759014);
+emit_32(3250290688);
+emit_32(1108039618);
+emit_32(1100759014);
+emit_32(3248242714);
+emit_32(1108668894);
+emit_32(1100759014);
+emit_32(3245998080);
+emit_32(1109286558);
+emit_32(1100759014);
+emit_32(3241902132);
+emit_32(1109804738);
+emit_32(1100759014);
+emit_32(3237609472);
+emit_32(1110243829);
+emit_32(1100759014);
+emit_32(3229220864);
+emit_32(1110734746);
+emit_32(1100759014);
+emit_32(0);
+emit_32(1110902178);
+emit_32(1100759014);
+emit_32(1081737216);
+emit_32(1111203643);
+emit_32(1100759014);
+emit_32(3279552512);
+emit_32(1055720947);
+emit_32(1098514432);
+emit_32(3279296528);
+emit_32(1074391480);
+emit_32(1098514432);
+emit_32(3279040545);
+emit_32(1080839929);
+emit_32(1098514432);
+emit_32(3278784496);
+emit_32(1084004468);
+emit_32(1098514432);
+emit_32(3278528512);
+emit_32(1088331836);
+emit_32(1098514432);
+emit_32(3278272528);
+emit_32(1090916618);
+emit_32(1098514432);
+emit_32(3278016545);
+emit_32(1091793217);
+emit_32(1098514432);
+emit_32(3277760496);
+emit_32(1092681623);
+emit_32(1098514432);
+emit_32(3277504512);
+emit_32(1094343931);
+emit_32(1098514432);
+emit_32(3277248528);
+emit_32(1096031404);
+emit_32(1098514432);
+emit_32(3276992545);
+emit_32(1097722652);
+emit_32(1098514432);
+emit_32(3276736496);
+emit_32(1098892129);
+emit_32(1098514432);
+emit_32(3276480512);
+emit_32(1099445043);
+emit_32(1098514432);
+emit_32(3276224528);
+emit_32(1099878158);
+emit_32(1098514432);
+emit_32(3275968545);
+emit_32(1101192548);
+emit_32(1098514432);
+emit_32(3275712496);
+emit_32(1102096839);
+emit_32(1098514432);
+emit_32(3275456512);
+emit_32(1103322992);
+emit_32(1098514432);
+emit_32(3275200528);
+emit_32(1103921152);
+emit_32(1098514432);
+emit_32(3274944545);
+emit_32(1104725200);
+emit_32(1098514432);
+emit_32(3274688496);
+emit_32(1106297907);
+emit_32(1098514432);
+emit_32(3274432512);
+emit_32(1107190193);
+emit_32(1098514432);
+emit_32(3274176528);
+emit_32(1108005172);
+emit_32(1098514432);
+emit_32(3273920545);
+emit_32(1108650361);
+emit_32(1098514432);
+emit_32(3273664496);
+emit_32(1108785837);
+emit_32(1098514432);
+emit_32(3273408512);
+emit_32(1108769610);
+emit_32(1098514432);
+emit_32(3273152528);
+emit_32(1108817661);
+emit_32(1098514432);
+emit_32(3272896545);
+emit_32(1108831240);
+emit_32(1098514432);
+emit_32(3272640496);
+emit_32(1108859630);
+emit_32(1098514432);
+emit_32(3272384512);
+emit_32(1108733356);
+emit_32(1098514432);
+emit_32(3272128528);
+emit_32(1108612271);
+emit_32(1098514432);
+emit_32(3271872545);
+emit_32(1108465523);
+emit_32(1098514432);
+emit_32(3271616496);
+emit_32(1108386120);
+emit_32(1098514432);
+emit_32(3271163904);
+emit_32(1108193260);
+emit_32(1098514432);
+emit_32(3270651937);
+emit_32(1107694767);
+emit_32(1098514432);
+emit_32(3270139970);
+emit_32(1107326665);
+emit_32(1098514432);
+emit_32(3269627871);
+emit_32(1106737994);
+emit_32(1098514432);
+emit_32(3269115904);
+emit_32(1106158394);
+emit_32(1098514432);
+emit_32(3268603937);
+emit_32(1106202906);
+emit_32(1098514432);
+emit_32(3268091970);
+emit_32(1105578951);
+emit_32(1098514432);
+emit_32(3267579911);
+emit_32(1105052566);
+emit_32(1098514432);
+emit_32(3267067904);
+emit_32(1104895908);
+emit_32(1098514432);
+emit_32(3266555911);
+emit_32(1104074873);
+emit_32(1098514432);
+emit_32(3266043904);
+emit_32(1103133881);
+emit_32(1098514432);
+emit_32(3265531911);
+emit_32(1102465938);
+emit_32(1098514432);
+emit_32(3265019904);
+emit_32(1101262907);
+emit_32(1098514432);
+emit_32(3264507911);
+emit_32(1101530399);
+emit_32(1098514432);
+emit_32(3263995904);
+emit_32(1101685588);
+emit_32(1098514432);
+emit_32(3263483911);
+emit_32(1102353111);
+emit_32(1098514432);
+emit_32(3262775296);
+emit_32(1102607496);
+emit_32(1098514432);
+emit_32(3261751309);
+emit_32(1102688970);
+emit_32(1098514432);
+emit_32(3260727296);
+emit_32(1103199522);
+emit_32(1098514432);
+emit_32(3259703309);
+emit_32(1103396916);
+emit_32(1098514432);
+emit_32(3258679296);
+emit_32(1103692248);
+emit_32(1098514432);
+emit_32(3257655309);
+emit_32(1104150266);
+emit_32(1098514432);
+emit_32(3256631296);
+emit_32(1104605715);
+emit_32(1098514432);
+emit_32(3255607309);
+emit_32(1105125337);
+emit_32(1098514432);
+emit_32(3254386688);
+emit_32(1106191267);
+emit_32(1098514432);
+emit_32(3252338714);
+emit_32(1107529407);
+emit_32(1098514432);
+emit_32(3250290688);
+emit_32(1108420880);
+emit_32(1098514432);
+emit_32(3248242714);
+emit_32(1108934001);
+emit_32(1098514432);
+emit_32(3245998080);
+emit_32(1109548859);
+emit_32(1098514432);
+emit_32(3241902132);
+emit_32(1109995631);
+emit_32(1098514432);
+emit_32(3237609472);
+emit_32(1110790845);
+emit_32(1098514432);
+emit_32(3229220864);
+emit_32(1111318856);
+emit_32(1098514432);
+emit_32(0);
+emit_32(1111747671);
+emit_32(1098514432);
+emit_32(1081737216);
+emit_32(1111812866);
+emit_32(1098514432);
+emit_32(3279552512);
+emit_32(1066749584);
+emit_32(1094418484);
+emit_32(3279296528);
+emit_32(1077908068);
+emit_32(1094418484);
+emit_32(3279040545);
+emit_32(1082923764);
+emit_32(1094418484);
+emit_32(3278784496);
+emit_32(1084680422);
+emit_32(1094418484);
+emit_32(3278528512);
+emit_32(1088094187);
+emit_32(1094418484);
+emit_32(3278272528);
+emit_32(1090882015);
+emit_32(1094418484);
+emit_32(3278016545);
+emit_32(1091863944);
+emit_32(1094418484);
+emit_32(3277760496);
+emit_32(1092512425);
+emit_32(1094418484);
+emit_32(3277504512);
+emit_32(1093582035);
+emit_32(1094418380);
+emit_32(3277248528);
+emit_32(1096483445);
+emit_32(1094418380);
+emit_32(3276992545);
+emit_32(1098671194);
+emit_32(1094418380);
+emit_32(3276736496);
+emit_32(1099029545);
+emit_32(1094418380);
+emit_32(3276480512);
+emit_32(1099564319);
+emit_32(1094418380);
+emit_32(3276224528);
+emit_32(1100538603);
+emit_32(1094418380);
+emit_32(3275968545);
+emit_32(1101777758);
+emit_32(1094418380);
+emit_32(3275712496);
+emit_32(1103112962);
+emit_32(1094418380);
+emit_32(3275456512);
+emit_32(1104081112);
+emit_32(1094418380);
+emit_32(3275200528);
+emit_32(1104685826);
+emit_32(1094418380);
+emit_32(3274944545);
+emit_32(1105332273);
+emit_32(1094418380);
+emit_32(3274688496);
+emit_32(1107088428);
+emit_32(1094418380);
+emit_32(3274432512);
+emit_32(1107461145);
+emit_32(1094418380);
+emit_32(3274176528);
+emit_32(1108070262);
+emit_32(1094418380);
+emit_32(3273920545);
+emit_32(1108560734);
+emit_32(1094418380);
+emit_32(3273664496);
+emit_32(1108646822);
+emit_32(1094418380);
+emit_32(3273408512);
+emit_32(1108781538);
+emit_32(1094418380);
+emit_32(3273152528);
+emit_32(1108714507);
+emit_32(1094418380);
+emit_32(3272896545);
+emit_32(1108628105);
+emit_32(1094418380);
+emit_32(3272640496);
+emit_32(1108772101);
+emit_32(1094418380);
+emit_32(3272384512);
+emit_32(1108535384);
+emit_32(1094418380);
+emit_32(3272128528);
+emit_32(1108471736);
+emit_32(1094418380);
+emit_32(3271872545);
+emit_32(1108149718);
+emit_32(1094418380);
+emit_32(3271616496);
+emit_32(1108005775);
+emit_32(1094418380);
+emit_32(3271163904);
+emit_32(1107845369);
+emit_32(1094418380);
+emit_32(3270651937);
+emit_32(1107488748);
+emit_32(1094418380);
+emit_32(3270139970);
+emit_32(1107065831);
+emit_32(1094418380);
+emit_32(3269627871);
+emit_32(1106640477);
+emit_32(1094418380);
+emit_32(3269115904);
+emit_32(1106331986);
+emit_32(1094418380);
+emit_32(3268603937);
+emit_32(1106202801);
+emit_32(1094418380);
+emit_32(3268091970);
+emit_32(1105489140);
+emit_32(1094418380);
+emit_32(3267579911);
+emit_32(1104258059);
+emit_32(1094418380);
+emit_32(3267067904);
+emit_32(1104173177);
+emit_32(1094418380);
+emit_32(3266555911);
+emit_32(1103722237);
+emit_32(1094418380);
+emit_32(3266043904);
+emit_32(1102993687);
+emit_32(1094418380);
+emit_32(3265531911);
+emit_32(1102417861);
+emit_32(1094418380);
+emit_32(3265019904);
+emit_32(1102043519);
+emit_32(1094418380);
+emit_32(3264507911);
+emit_32(1102232840);
+emit_32(1094418380);
+emit_32(3263995904);
+emit_32(1102313370);
+emit_32(1094418380);
+emit_32(3263483911);
+emit_32(1102548199);
+emit_32(1094418380);
+emit_32(3262775296);
+emit_32(1102923222);
+emit_32(1094418380);
+emit_32(3261751309);
+emit_32(1103187621);
+emit_32(1094418380);
+emit_32(3260727296);
+emit_32(1103562329);
+emit_32(1094418380);
+emit_32(3259703309);
+emit_32(1103808220);
+emit_32(1094418380);
+emit_32(3258679296);
+emit_32(1104024646);
+emit_32(1094418380);
+emit_32(3257655309);
+emit_32(1104470344);
+emit_32(1094418380);
+emit_32(3256631296);
+emit_32(1104938690);
+emit_32(1094418380);
+emit_32(3255607309);
+emit_32(1105867624);
+emit_32(1094418380);
+emit_32(3254386688);
+emit_32(1107251534);
+emit_32(1094418380);
+emit_32(3252338714);
+emit_32(1107872029);
+emit_32(1094418380);
+emit_32(3250290688);
+emit_32(1108547574);
+emit_32(1094418380);
+emit_32(3248242714);
+emit_32(1109195253);
+emit_32(1094418380);
+emit_32(3245998080);
+emit_32(1109741247);
+emit_32(1094418380);
+emit_32(3241902132);
+emit_32(1110512291);
+emit_32(1094418380);
+emit_32(3237609472);
+emit_32(1111292851);
+emit_32(1094418380);
+emit_32(3229220864);
+emit_32(1111810349);
+emit_32(1094418380);
+emit_32(0);
+emit_32(1112081590);
+emit_32(1094418380);
+emit_32(1081737216);
+emit_32(1112309314);
+emit_32(1094418380);
+emit_32(3279552512);
+emit_32(1069773845);
+emit_32(1090125824);
+emit_32(3279296528);
+emit_32(1077819820);
+emit_32(1090125824);
+emit_32(3279040545);
+emit_32(1081179122);
+emit_32(1090125824);
+emit_32(3278784496);
+emit_32(1083831117);
+emit_32(1090125824);
+emit_32(3278528512);
+emit_32(1086208512);
+emit_32(1090125824);
+emit_32(3278272528);
+emit_32(1089372988);
+emit_32(1090125824);
+emit_32(3278016545);
+emit_32(1091534376);
+emit_32(1090125824);
+emit_32(3277760496);
+emit_32(1091959238);
+emit_32(1090125824);
+emit_32(3277504512);
+emit_32(1093016538);
+emit_32(1090125824);
+emit_32(3277248528);
+emit_32(1095828190);
+emit_32(1090125824);
+emit_32(3276992545);
+emit_32(1098471021);
+emit_32(1090125824);
+emit_32(3276736496);
+emit_32(1099512257);
+emit_32(1090125824);
+emit_32(3276480512);
+emit_32(1100641206);
+emit_32(1090125824);
+emit_32(3276224528);
+emit_32(1101920207);
+emit_32(1090125824);
+emit_32(3275968545);
+emit_32(1102579027);
+emit_32(1090125824);
+emit_32(3275712496);
+emit_32(1103724596);
+emit_32(1090125824);
+emit_32(3275456512);
+emit_32(1104932294);
+emit_32(1090125824);
+emit_32(3275200528);
+emit_32(1105540415);
+emit_32(1090125824);
+emit_32(3274944545);
+emit_32(1105706877);
+emit_32(1090125824);
+emit_32(3274688496);
+emit_32(1106838815);
+emit_32(1090125824);
+emit_32(3274432512);
+emit_32(1107416056);
+emit_32(1090125824);
+emit_32(3274176528);
+emit_32(1107934210);
+emit_32(1090125824);
+emit_32(3273920545);
+emit_32(1108321868);
+emit_32(1090125824);
+emit_32(3273664496);
+emit_32(1108477949);
+emit_32(1090125824);
+emit_32(3273408512);
+emit_32(1108606950);
+emit_32(1090125824);
+emit_32(3273152528);
+emit_32(1108594314);
+emit_32(1090125824);
+emit_32(3272896545);
+emit_32(1108861596);
+emit_32(1090125824);
+emit_32(3272640496);
+emit_32(1108850508);
+emit_32(1090125824);
+emit_32(3272384512);
+emit_32(1108746804);
+emit_32(1090125824);
+emit_32(3272128528);
+emit_32(1108418180);
+emit_32(1090125824);
+emit_32(3271872545);
+emit_32(1108132600);
+emit_32(1090125824);
+emit_32(3271616496);
+emit_32(1107751233);
+emit_32(1090125824);
+emit_32(3271163904);
+emit_32(1107845920);
+emit_32(1090125824);
+emit_32(3270651937);
+emit_32(1107711440);
+emit_32(1090125824);
+emit_32(3270139970);
+emit_32(1107541911);
+emit_32(1090125824);
+emit_32(3269627871);
+emit_32(1107305510);
+emit_32(1090125824);
+emit_32(3269115904);
+emit_32(1107014346);
+emit_32(1090125824);
+emit_32(3268603937);
+emit_32(1106519471);
+emit_32(1090125824);
+emit_32(3268091970);
+emit_32(1105586867);
+emit_32(1090125824);
+emit_32(3267579911);
+emit_32(1104817160);
+emit_32(1090125824);
+emit_32(3267067904);
+emit_32(1104215645);
+emit_32(1090125824);
+emit_32(3266555911);
+emit_32(1103400324);
+emit_32(1090125824);
+emit_32(3266043904);
+emit_32(1103065776);
+emit_32(1090125824);
+emit_32(3265531911);
+emit_32(1102978377);
+emit_32(1090125824);
+emit_32(3265019904);
+emit_32(1102293919);
+emit_32(1090125824);
+emit_32(3264507911);
+emit_32(1102336229);
+emit_32(1090125824);
+emit_32(3263995904);
+emit_32(1102542117);
+emit_32(1090125824);
+emit_32(3263483911);
+emit_32(1102806306);
+emit_32(1090125824);
+emit_32(3262775296);
+emit_32(1103245240);
+emit_32(1090125824);
+emit_32(3261751309);
+emit_32(1103200151);
+emit_32(1090125824);
+emit_32(3260727296);
+emit_32(1103241727);
+emit_32(1090125824);
+emit_32(3259703309);
+emit_32(1103758465);
+emit_32(1090125824);
+emit_32(3258679296);
+emit_32(1104333714);
+emit_32(1090125824);
+emit_32(3257655309);
+emit_32(1104589095);
+emit_32(1090125824);
+emit_32(3256631296);
+emit_32(1104963961);
+emit_32(1090125824);
+emit_32(3255607309);
+emit_32(1106480516);
+emit_32(1090125824);
+emit_32(3254386688);
+emit_32(1107703811);
+emit_32(1090125824);
+emit_32(3252338714);
+emit_32(1108381768);
+emit_32(1090125824);
+emit_32(3250290688);
+emit_32(1108898034);
+emit_32(1090125824);
+emit_32(3248242714);
+emit_32(1109345462);
+emit_32(1090125824);
+emit_32(3245998080);
+emit_32(1109947738);
+emit_32(1090125824);
+emit_32(3241902132);
+emit_32(1110798578);
+emit_32(1090125824);
+emit_32(3237609472);
+emit_32(1111401483);
+emit_32(1090125824);
+emit_32(3229220864);
+emit_32(1112005149);
+emit_32(1090125824);
+emit_32(0);
+emit_32(1112489827);
+emit_32(1090125824);
+emit_32(1081737216);
+emit_32(1112605380);
+emit_32(1090125824);
+emit_32(3279552512);
+emit_32(1041185636);
+emit_32(1081737216);
+emit_32(3279296528);
+emit_32(1071476480);
+emit_32(1081737216);
+emit_32(3279040545);
+emit_32(1076263523);
+emit_32(1081737216);
+emit_32(3278784496);
+emit_32(1082158660);
+emit_32(1081737216);
+emit_32(3278528512);
+emit_32(1084513929);
+emit_32(1081737216);
+emit_32(3278272528);
+emit_32(1087785717);
+emit_32(1081737216);
+emit_32(3278016545);
+emit_32(1090972056);
+emit_32(1081737216);
+emit_32(3277760496);
+emit_32(1092442569);
+emit_32(1081737216);
+emit_32(3277504512);
+emit_32(1094046974);
+emit_32(1081737216);
+emit_32(3277248528);
+emit_32(1097043280);
+emit_32(1081737216);
+emit_32(3276992545);
+emit_32(1098999818);
+emit_32(1081737216);
+emit_32(3276736496);
+emit_32(1100434742);
+emit_32(1081737216);
+emit_32(3276480512);
+emit_32(1101659007);
+emit_32(1081737216);
+emit_32(3276224528);
+emit_32(1102608545);
+emit_32(1081737216);
+emit_32(3275968545);
+emit_32(1103417836);
+emit_32(1081737216);
+emit_32(3275712496);
+emit_32(1104053168);
+emit_32(1081737216);
+emit_32(3275456512);
+emit_32(1104973450);
+emit_32(1081737216);
+emit_32(3275200528);
+emit_32(1105837477);
+emit_32(1081737216);
+emit_32(3274944545);
+emit_32(1106081743);
+emit_32(1081737216);
+emit_32(3274688496);
+emit_32(1106636492);
+emit_32(1081737216);
+emit_32(3274432512);
+emit_32(1107002917);
+emit_32(1081737216);
+emit_32(3274176528);
+emit_32(1107580184);
+emit_32(1081737216);
+emit_32(3273920545);
+emit_32(1107983729);
+emit_32(1081737216);
+emit_32(3273664496);
+emit_32(1108213550);
+emit_32(1081737216);
+emit_32(3273408512);
+emit_32(1108715137);
+emit_32(1081737216);
+emit_32(3273152528);
+emit_32(1108987871);
+emit_32(1081737216);
+emit_32(3272896545);
+emit_32(1109130582);
+emit_32(1081737216);
+emit_32(3272640496);
+emit_32(1109075454);
+emit_32(1081737216);
+emit_32(3272384512);
+emit_32(1108764813);
+emit_32(1081737216);
+emit_32(3272128528);
+emit_32(1108391939);
+emit_32(1081737216);
+emit_32(3271872545);
+emit_32(1108080224);
+emit_32(1081737216);
+emit_32(3271616496);
+emit_32(1107854728);
+emit_32(1081737216);
+emit_32(3271163904);
+emit_32(1107912740);
+emit_32(1081737216);
+emit_32(3270651937);
+emit_32(1107731730);
+emit_32(1081737216);
+emit_32(3270139970);
+emit_32(1107480989);
+emit_32(1081737216);
+emit_32(3269627871);
+emit_32(1107400013);
+emit_32(1081737216);
+emit_32(3269115904);
+emit_32(1106814855);
+emit_32(1081737216);
+emit_32(3268603937);
+emit_32(1106747641);
+emit_32(1081737216);
+emit_32(3268091970);
+emit_32(1106153570);
+emit_32(1081737216);
+emit_32(3267579911);
+emit_32(1105450553);
+emit_32(1081737216);
+emit_32(3267067904);
+emit_32(1105015289);
+emit_32(1081737216);
+emit_32(3266555911);
+emit_32(1103926185);
+emit_32(1081737216);
+emit_32(3266043904);
+emit_32(1103220965);
+emit_32(1081737216);
+emit_32(3265531911);
+emit_32(1102714556);
+emit_32(1081737216);
+emit_32(3265019904);
+emit_32(1102293972);
+emit_32(1081737216);
+emit_32(3264507911);
+emit_32(1102696206);
+emit_32(1081737216);
+emit_32(3263995904);
+emit_32(1102841119);
+emit_32(1081737216);
+emit_32(3263483911);
+emit_32(1102940104);
+emit_32(1081737216);
+emit_32(3262775296);
+emit_32(1103457681);
+emit_32(1081737216);
+emit_32(3261751309);
+emit_32(1103885553);
+emit_32(1081737216);
+emit_32(3260727296);
+emit_32(1104135953);
+emit_32(1081737216);
+emit_32(3259703309);
+emit_32(1104254180);
+emit_32(1081737216);
+emit_32(3258679296);
+emit_32(1104598218);
+emit_32(1081737216);
+emit_32(3257655309);
+emit_32(1105055869);
+emit_32(1081737216);
+emit_32(3256631296);
+emit_32(1105830661);
+emit_32(1081737216);
+emit_32(3255607309);
+emit_32(1107186156);
+emit_32(1081737216);
+emit_32(3254386688);
+emit_32(1107890222);
+emit_32(1081737216);
+emit_32(3252338714);
+emit_32(1108342578);
+emit_32(1081737216);
+emit_32(3250290688);
+emit_32(1108968106);
+emit_32(1081737216);
+emit_32(3248242714);
+emit_32(1109363314);
+emit_32(1081737216);
+emit_32(3245998080);
+emit_32(1110217982);
+emit_32(1081737216);
+emit_32(3241902132);
+emit_32(1110836747);
+emit_32(1081737216);
+emit_32(3237609472);
+emit_32(1111340011);
+emit_32(1081737216);
+emit_32(3229220864);
+emit_32(1111989472);
+emit_32(1081737216);
+emit_32(0);
+emit_32(1112547577);
+emit_32(1081737216);
+emit_32(1081737216);
+emit_32(1112701298);
+emit_32(1081737216);
+emit_start(_ZTIN16btCollisionWorld17RayResultCallbackE)
+emit_32(_ZTVN10__cxxabiv117__class_type_infoE+8);
+emit_32(_ZTSN16btCollisionWorld17RayResultCallbackE);
+emit_start(_ZTSN16btCollisionWorld17RayResultCallbackE)
+emit_string('N16btCollisionWorld17RayResultCallbackE\x00');
+emit_start(_ZTVN16btCollisionWorld24ClosestRayResultCallbackE)
+emit_32(0);
+emit_32(_ZTIN16btCollisionWorld24ClosestRayResultCallbackE);
+emit_32(_ZN16btCollisionWorld24ClosestRayResultCallbackD1Ev__index__);
+emit_32(_ZN16btCollisionWorld24ClosestRayResultCallbackD0Ev__index__);
+emit_32(_ZNK16btCollisionWorld17RayResultCallback14needsCollisionEP17btBroadphaseProxy__index__);
+emit_32(_ZN16btCollisionWorld24ClosestRayResultCallback15addSingleResultERNS_14LocalRayResultEb__index__);
+emit_start(_ZTIN16btCollisionWorld24ClosestRayResultCallbackE)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTSN16btCollisionWorld24ClosestRayResultCallbackE);
+emit_32(_ZTIN16btCollisionWorld17RayResultCallbackE);
+emit_start(_ZTSN16btCollisionWorld24ClosestRayResultCallbackE)
+emit_string('N16btCollisionWorld24ClosestRayResultCallbackE\x00');
+emit_start(_ZTI13btMotionState)
+emit_32(_ZTVN10__cxxabiv117__class_type_infoE+8);
+emit_32(_ZTS13btMotionState);
+emit_start(_ZTS13btMotionState)
+emit_string('13btMotionState\x00');
+emit_start(_ZTV20btDefaultMotionState)
+emit_32(0);
+emit_32(_ZTI20btDefaultMotionState);
+emit_32(_ZN20btDefaultMotionStateD1Ev__index__);
+emit_32(_ZN20btDefaultMotionStateD0Ev__index__);
+emit_32(_ZNK20btDefaultMotionState17getWorldTransformER11btTransform__index__);
+emit_32(_ZN20btDefaultMotionState17setWorldTransformERK11btTransform__index__);
+emit_start(_ZTI20btDefaultMotionState)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTS20btDefaultMotionState);
+emit_32(_ZTI13btMotionState);
+emit_start(_ZTS20btDefaultMotionState)
+emit_string('20btDefaultMotionState\x00');
+emit_start(_ZTI17btTypedConstraint)
+emit_32(_ZTVN10__cxxabiv121__vmi_class_type_infoE+8);
+emit_32(_ZTS17btTypedConstraint);
+emit_32(0);
+emit_32(1);
+emit_32(_ZTI13btTypedObject);
+emit_32(1026);
+emit_start(_ZTS17btTypedConstraint)
+emit_string('17btTypedConstraint\x00');
+emit_start(_ZTI13btTypedObject)
+emit_32(_ZTVN10__cxxabiv117__class_type_infoE+8);
+emit_32(_ZTS13btTypedObject);
+emit_start(_ZTS13btTypedObject)
+emit_string('13btTypedObject\x00');
+emit_start(_ZTV7RagDoll)
+emit_32(0);
+emit_32(_ZTI7RagDoll);
+emit_32(_ZN7RagDollD1Ev__index__);
+emit_32(_ZN7RagDollD0Ev__index__);
+emit_start(_ZTI7RagDoll)
+emit_32(_ZTVN10__cxxabiv117__class_type_infoE+8);
+emit_32(_ZTS7RagDoll);
+emit_start(_ZTS7RagDoll)
+emit_string('7RagDoll\x00');
+emit_start(_ZTV13BenchmarkDemo)
+emit_32(0);
+emit_32(_ZTI13BenchmarkDemo);
+emit_32(_ZN15DemoApplication6myinitEv__index__);
+emit_32(_ZN15DemoApplication16getDynamicsWorldEv__index__);
+emit_32(_ZN15DemoApplication20localCreateRigidBodyEfRK11btTransformP16btCollisionShape__index__);
+emit_32(_ZN13BenchmarkDemoD1Ev__index__);
+emit_32(_ZN13BenchmarkDemoD0Ev__index__);
+emit_32(_ZN13BenchmarkDemo20clientMoveAndDisplayEv__index__);
+emit_32(_ZN13BenchmarkDemo15displayCallbackEv__index__);
+emit_start(_ZTI13BenchmarkDemo)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTS13BenchmarkDemo);
+emit_32(_ZTI15DemoApplication);
+emit_start(_ZTS13BenchmarkDemo)
+emit_string('13BenchmarkDemo\x00');
+emit_start(_ZTI15DemoApplication)
+emit_32(_ZTVN10__cxxabiv117__class_type_infoE+8);
+emit_32(_ZTS15DemoApplication);
+emit_start(_ZTS15DemoApplication)
+emit_string('15DemoApplication\x00');
+emit_start(_2E_str3)
+emit_string('rayResult.m_hitFraction <= m_closestHitFraction\x00');
+emit_start(_2E_str4)
+emit_string('../../../../src/BulletCollision/CollisionDispatch/btCollisionWorld.h\x00');
+emit_start(_2E_str5)
+emit_string('(!shape || shape->getShapeType() != INVALID_SHAPE_PROXYTYPE)\x00');
+emit_start(_2E_str6)
+emit_string('../../../../Demos/BenchmarkDemo/BenchmarkDemo.cpp\x00');
+emit_start(_2E_str7)
+emit_string('%d rays in %d ms %d %d %f\x0a\x00');
+emit_start(_ZL7TaruVtx)
+emit_32(1066080005);
+emit_32(3221161467);
+emit_32(0);
+emit_32(1061467093);
+emit_32(3221161467);
+emit_32(3208950741);
+emit_32(1067773497);
+emit_32(873485028);
+emit_32(3215257145);
+emit_32(1072250665);
+emit_32(877448406);
+emit_32(0);
+emit_32(0);
+emit_32(3221161467);
+emit_32(3213563653);
+emit_32(0);
+emit_32(0);
+emit_32(3219734313);
+emit_32(0);
+emit_32(3221161467);
+emit_32(3213563653);
+emit_32(3208950741);
+emit_32(3221161467);
+emit_32(3208950741);
+emit_32(3215257145);
+emit_32(873485028);
+emit_32(3215257145);
+emit_32(0);
+emit_32(0);
+emit_32(3219734313);
+emit_32(3213563653);
+emit_32(3221161467);
+emit_32(876839787);
+emit_32(3219734313);
+emit_32(877448406);
+emit_32(875236717);
+emit_32(3208950741);
+emit_32(3221161467);
+emit_32(1061467109);
+emit_32(3215257145);
+emit_32(881107813);
+emit_32(1067773497);
+emit_32(874053818);
+emit_32(3221161467);
+emit_32(1066080005);
+emit_32(880822819);
+emit_32(881928664);
+emit_32(1072250665);
+emit_32(1061467093);
+emit_32(3221161467);
+emit_32(1061467093);
+emit_32(1067773497);
+emit_32(881107813);
+emit_32(1067773497);
+emit_32(1061467093);
+emit_32(1073677819);
+emit_32(3208950741);
+emit_32(1066080005);
+emit_32(1073677819);
+emit_32(0);
+emit_32(0);
+emit_32(1073677819);
+emit_32(3213563653);
+emit_32(3208950741);
+emit_32(1073677819);
+emit_32(3208950741);
+emit_32(0);
+emit_32(1073677819);
+emit_32(3213563653);
+emit_32(3213563653);
+emit_32(1073677819);
+emit_32(0);
+emit_32(3208950741);
+emit_32(1073677819);
+emit_32(1061467093);
+emit_32(874053818);
+emit_32(1073677819);
+emit_32(1066080005);
+emit_32(1061467093);
+emit_32(1073677819);
+emit_32(1061467093);
+emit_32(874053818);
+emit_32(3221161467);
+emit_32(1066080005);
+emit_32(3208950741);
+emit_32(3221161467);
+emit_32(1061467109);
+emit_32(3213563653);
+emit_32(3221161467);
+emit_32(876839787);
+emit_32(3208950741);
+emit_32(3221161467);
+emit_32(3208950741);
+emit_32(0);
+emit_32(3221161467);
+emit_32(3213563653);
+emit_32(1061467093);
+emit_32(3221161467);
+emit_32(3208950741);
+emit_32(1066080005);
+emit_32(3221161467);
+emit_32(0);
+emit_32(1061467093);
+emit_32(3221161467);
+emit_32(1061467093);
+emit_32(1061467093);
+emit_32(1073677819);
+emit_32(3208950741);
+emit_32(0);
+emit_32(1073677819);
+emit_32(3213563653);
+emit_32(3208950741);
+emit_32(1073677819);
+emit_32(3208950741);
+emit_32(3213563653);
+emit_32(1073677819);
+emit_32(0);
+emit_32(3208950741);
+emit_32(1073677819);
+emit_32(1061467093);
+emit_32(874053818);
+emit_32(1073677819);
+emit_32(1066080005);
+emit_32(1061467093);
+emit_32(1073677819);
+emit_32(1061467093);
+emit_32(1066080005);
+emit_32(1073677819);
+emit_32(0);
+emit_start(LandscapeVtx)
+emit_32(Landscape01Vtx);
+emit_32(Landscape02Vtx);
+emit_32(Landscape03Vtx);
+emit_32(Landscape04Vtx);
+emit_32(Landscape05Vtx);
+emit_32(Landscape06Vtx);
+emit_32(Landscape07Vtx);
+emit_32(Landscape08Vtx);
+emit_start(Landscape01Vtx)
+emit_32(1081737258);
+emit_32(1055384563);
+emit_32(1131812880);
+emit_32(1081737258);
+emit_32(1069740626);
+emit_32(1132068864);
+emit_32(1090125824);
+emit_32(1066883130);
+emit_32(1131812880);
+emit_32(1090125845);
+emit_32(1071685776);
+emit_32(1132068864);
+emit_32(1094418484);
+emit_32(1074283351);
+emit_32(1131812880);
+emit_32(1094418484);
+emit_32(1076361335);
+emit_32(1132068864);
+emit_32(1098514432);
+emit_32(1077997197);
+emit_32(1131812880);
+emit_32(1098514432);
+emit_32(1078893017);
+emit_32(1132068864);
+emit_32(1100759066);
+emit_32(1082022680);
+emit_32(1131812880);
+emit_32(1100759066);
+emit_32(1080588228);
+emit_32(1132068864);
+emit_32(1102807040);
+emit_32(1082313744);
+emit_32(1131812880);
+emit_32(1102807040);
+emit_32(1082635783);
+emit_32(1132068864);
+emit_32(1104855066);
+emit_32(1085939489);
+emit_32(1131812880);
+emit_32(1104855066);
+emit_32(1086186513);
+emit_32(1132068864);
+emit_32(1106903040);
+emit_32(1088145253);
+emit_32(1131812880);
+emit_32(1106903040);
+emit_32(1089137122);
+emit_32(1132068864);
+emit_32(1108123661);
+emit_32(1090785431);
+emit_32(1131812880);
+emit_32(1108123661);
+emit_32(1091174473);
+emit_32(1132068864);
+emit_32(1109147648);
+emit_32(1090923801);
+emit_32(1131812880);
+emit_32(1109147648);
+emit_32(1091237136);
+emit_32(1132068864);
+emit_32(1110171661);
+emit_32(1088312773);
+emit_32(1131812880);
+emit_32(1110171661);
+emit_32(1089928629);
+emit_32(1132068864);
+emit_32(1111195648);
+emit_32(1083403361);
+emit_32(1131812880);
+emit_32(1111195648);
+emit_32(1086579729);
+emit_32(1132068864);
+emit_32(1112219661);
+emit_32(1080632646);
+emit_32(1131812880);
+emit_32(1112219661);
+emit_32(1084500256);
+emit_32(1132068864);
+emit_32(1113243648);
+emit_32(1082171222);
+emit_32(1131812880);
+emit_32(1113243648);
+emit_32(1085286142);
+emit_32(1132068864);
+emit_32(1114267661);
+emit_32(1082256177);
+emit_32(1131812880);
+emit_32(1114267661);
+emit_32(1084896932);
+emit_32(1132068864);
+emit_32(1115291648);
+emit_32(1082088279);
+emit_32(1131812880);
+emit_32(1115291648);
+emit_32(1085314391);
+emit_32(1132068864);
+emit_32(1116000263);
+emit_32(1085158761);
+emit_32(1131812880);
+emit_32(1116000263);
+emit_32(1088003066);
+emit_32(1132068864);
+emit_32(1116512256);
+emit_32(1086405959);
+emit_32(1131812880);
+emit_32(1116512256);
+emit_32(1089298141);
+emit_32(1132068864);
+emit_32(1117024263);
+emit_32(1087104604);
+emit_32(1131812880);
+emit_32(1117024263);
+emit_32(1090687347);
+emit_32(1132068864);
+emit_32(1117536256);
+emit_32(1087885311);
+emit_32(1131812880);
+emit_32(1117536256);
+emit_32(1091275053);
+emit_32(1132068864);
+emit_32(1118048263);
+emit_32(1089217925);
+emit_32(1131812880);
+emit_32(1118048263);
+emit_32(1092734157);
+emit_32(1132068864);
+emit_32(1118560256);
+emit_32(1091544359);
+emit_32(1131812880);
+emit_32(1118560256);
+emit_32(1093101054);
+emit_32(1132068864);
+emit_32(1119072263);
+emit_32(1093751695);
+emit_32(1131812880);
+emit_32(1119072263);
+emit_32(1094336171);
+emit_32(1132068864);
+emit_32(1119584256);
+emit_32(1095057906);
+emit_32(1131812880);
+emit_32(1119584256);
+emit_32(1095906414);
+emit_32(1132068864);
+emit_32(1120096263);
+emit_32(1096387500);
+emit_32(1131812880);
+emit_32(1120096263);
+emit_32(1097119721);
+emit_32(1132068864);
+emit_32(1120608322);
+emit_32(1098446484);
+emit_32(1131812880);
+emit_32(1120608322);
+emit_32(1099405040);
+emit_32(1132068864);
+emit_32(1121120289);
+emit_32(1099429000);
+emit_32(1131812880);
+emit_32(1121120289);
+emit_32(1100058250);
+emit_32(1132068864);
+emit_32(1121632256);
+emit_32(1099896455);
+emit_32(1131812880);
+emit_32(1121632256);
+emit_32(1100747951);
+emit_32(1132068864);
+emit_32(1122144223);
+emit_32(1100443235);
+emit_32(1131812880);
+emit_32(1122144223);
+emit_32(1101491654);
+emit_32(1132068864);
+emit_32(1122656322);
+emit_32(1100473854);
+emit_32(1131812880);
+emit_32(1122656322);
+emit_32(1101038145);
+emit_32(1132068864);
+emit_32(1123168289);
+emit_32(1100215956);
+emit_32(1131812880);
+emit_32(1123168289);
+emit_32(1101301390);
+emit_32(1132068864);
+emit_32(1123680256);
+emit_32(1101082604);
+emit_32(1131812880);
+emit_32(1123680256);
+emit_32(1101605949);
+emit_32(1132068864);
+emit_32(1124132848);
+emit_32(1101268622);
+emit_32(1131812880);
+emit_32(1124132848);
+emit_32(1102212026);
+emit_32(1132068864);
+emit_32(1124388897);
+emit_32(1101640237);
+emit_32(1131812880);
+emit_32(1124388897);
+emit_32(1102532523);
+emit_32(1132068864);
+emit_32(1124644880);
+emit_32(1102204895);
+emit_32(1131812880);
+emit_32(1124644880);
+emit_32(1103346847);
+emit_32(1132068864);
+emit_32(1124900864);
+emit_32(1102705643);
+emit_32(1131812880);
+emit_32(1124900864);
+emit_32(1103273709);
+emit_32(1132068864);
+emit_32(1125156848);
+emit_32(1102314000);
+emit_32(1131812880);
+emit_32(1125156848);
+emit_32(1103265949);
+emit_32(1132068864);
+emit_32(1125412897);
+emit_32(1102386142);
+emit_32(1131812880);
+emit_32(1125412897);
+emit_32(1103012351);
+emit_32(1132068864);
+emit_32(1125668880);
+emit_32(1102880021);
+emit_32(1131812880);
+emit_32(1125668880);
+emit_32(1103173727);
+emit_32(1132068864);
+emit_32(1125924864);
+emit_32(1103727428);
+emit_32(1131812880);
+emit_32(1125924864);
+emit_32(1103580732);
+emit_32(1132068864);
+emit_32(1126180848);
+emit_32(1103758413);
+emit_32(1131812880);
+emit_32(1126180848);
+emit_32(1103482113);
+emit_32(1132068864);
+emit_32(1126436897);
+emit_32(1104015471);
+emit_32(1131812880);
+emit_32(1126436897);
+emit_32(1103163241);
+emit_32(1132068864);
+emit_32(1126692880);
+emit_32(1103273342);
+emit_32(1131812880);
+emit_32(1126692880);
+emit_32(1103421348);
+emit_32(1132068864);
+emit_32(1126948864);
+emit_32(1103651353);
+emit_32(1131812880);
+emit_32(1126948864);
+emit_32(1103608938);
+emit_32(1132068864);
+emit_32(1127204848);
+emit_32(1103631850);
+emit_32(1131812880);
+emit_32(1127204848);
+emit_32(1103515039);
+emit_32(1132068864);
+emit_32(1127460897);
+emit_32(1102883324);
+emit_32(1131812880);
+emit_32(1127460897);
+emit_32(1102412041);
+emit_32(1132068864);
+emit_32(1127716880);
+emit_32(1101507068);
+emit_32(1131812880);
+emit_32(1127716880);
+emit_32(1101349991);
+emit_32(1132068864);
+emit_32(1127972864);
+emit_32(1100875563);
+emit_32(1131812880);
+emit_32(1127972864);
+emit_32(1101021210);
+emit_32(1132068864);
+emit_32(1128228848);
+emit_32(1101251582);
+emit_32(1131812880);
+emit_32(1128228848);
+emit_32(1101209063);
+emit_32(1132068864);
+emit_32(1128484897);
+emit_32(1100876402);
+emit_32(1131812880);
+emit_32(1128484897);
+emit_32(1101824944);
+emit_32(1132068864);
+emit_32(1128740880);
+emit_32(1100846465);
+emit_32(1131812880);
+emit_32(1128740880);
+emit_32(1101829662);
+emit_32(1132068864);
+emit_32(1128996864);
+emit_32(1101043178);
+emit_32(1131812880);
+emit_32(1128996864);
+emit_32(1101204029);
+emit_32(1132068864);
+emit_32(1129252848);
+emit_32(1100934912);
+emit_32(1131812880);
+emit_32(1129252848);
+emit_32(1100678640);
+emit_32(1132068864);
+emit_32(1129508897);
+emit_32(1100716494);
+emit_32(1131812880);
+emit_32(1129508897);
+emit_32(1100794770);
+emit_32(1132068864);
+emit_32(1129764880);
+emit_32(1100633499);
+emit_32(1131812880);
+emit_32(1129764880);
+emit_32(1100531158);
+emit_32(1132068864);
+emit_32(1130020864);
+emit_32(1100357409);
+emit_32(1131812880);
+emit_32(1130020864);
+emit_32(1100965793);
+emit_32(1132068864);
+emit_32(1130276848);
+emit_32(1100382418);
+emit_32(1131812880);
+emit_32(1130276848);
+emit_32(1100936852);
+emit_32(1132068864);
+emit_32(1130532897);
+emit_32(1100142189);
+emit_32(1131812880);
+emit_32(1130532897);
+emit_32(1100410834);
+emit_32(1132068864);
+emit_32(1130788880);
+emit_32(1099421503);
+emit_32(1131812880);
+emit_32(1130788880);
+emit_32(1099690462);
+emit_32(1132068864);
+emit_32(1131044864);
+emit_32(1098506358);
+emit_32(1131812880);
+emit_32(1131044864);
+emit_32(1098996725);
+emit_32(1132068864);
+emit_32(1131300848);
+emit_32(1098434740);
+emit_32(1131812880);
+emit_32(1131300848);
+emit_32(1098247465);
+emit_32(1132068864);
+emit_32(1131556897);
+emit_32(1098117861);
+emit_32(1131812880);
+emit_32(1131556897);
+emit_32(1097891158);
+emit_32(1132068864);
+emit_32(1131812880);
+emit_32(1096949432);
+emit_32(1131812880);
+emit_32(1131812880);
+emit_32(1097085433);
+emit_32(1132068864);
+emit_32(1132068864);
+emit_32(1097236532);
+emit_32(1131812880);
+emit_32(1132068864);
+emit_32(1097193960);
+emit_32(1132068864);
+emit_32(1081737258);
+emit_32(1074643096);
+emit_32(1131556897);
+emit_32(1090125866);
+emit_32(1074941647);
+emit_32(1131556897);
+emit_32(1094418484);
+emit_32(1081645067);
+emit_32(1131556897);
+emit_32(1098514432);
+emit_32(1079576814);
+emit_32(1131556897);
+emit_32(1100759066);
+emit_32(1080655044);
+emit_32(1131556897);
+emit_32(1102807040);
+emit_32(1082425543);
+emit_32(1131556897);
+emit_32(1104855066);
+emit_32(1085781658);
+emit_32(1131556897);
+emit_32(1106903040);
+emit_32(1087711834);
+emit_32(1131556897);
+emit_32(1108123661);
+emit_32(1089079786);
+emit_32(1131556897);
+emit_32(1109147648);
+emit_32(1089855732);
+emit_32(1131556897);
+emit_32(1110171661);
+emit_32(1088401776);
+emit_32(1131556897);
+emit_32(1111195648);
+emit_32(1084013213);
+emit_32(1131556897);
+emit_32(1112219661);
+emit_32(1076464473);
+emit_32(1131556897);
+emit_32(1113243648);
+emit_32(1076936835);
+emit_32(1131556897);
+emit_32(1114267661);
+emit_32(1078376488);
+emit_32(1131556897);
+emit_32(1115291648);
+emit_32(1083428884);
+emit_32(1131556897);
+emit_32(1116000263);
+emit_32(1084998686);
+emit_32(1131556897);
+emit_32(1116512256);
+emit_32(1085103334);
+emit_32(1131556897);
+emit_32(1117024263);
+emit_32(1085114239);
+emit_32(1131556897);
+emit_32(1117536256);
+emit_32(1085358662);
+emit_32(1131556897);
+emit_32(1118048263);
+emit_32(1085033331);
+emit_32(1131556897);
+emit_32(1118560256);
+emit_32(1090041456);
+emit_32(1131556897);
+emit_32(1119072263);
+emit_32(1091993569);
+emit_32(1131556897);
+emit_32(1119584256);
+emit_32(1093969274);
+emit_32(1131556897);
+emit_32(1120096263);
+emit_32(1094791777);
+emit_32(1131556897);
+emit_32(1120608322);
+emit_32(1096921435);
+emit_32(1131556897);
+emit_32(1121120289);
+emit_32(1098017722);
+emit_32(1131556897);
+emit_32(1121632256);
+emit_32(1098852807);
+emit_32(1131556897);
+emit_32(1122144223);
+emit_32(1099349623);
+emit_32(1131556897);
+emit_32(1122656322);
+emit_32(1099542928);
+emit_32(1131556897);
+emit_32(1123168289);
+emit_32(1100094688);
+emit_32(1131556897);
+emit_32(1123680256);
+emit_32(1100410887);
+emit_32(1131556897);
+emit_32(1124132848);
+emit_32(1100650329);
+emit_32(1131556897);
+emit_32(1124388897);
+emit_32(1101060742);
+emit_32(1131556897);
+emit_32(1124644880);
+emit_32(1101440326);
+emit_32(1131556897);
+emit_32(1124900864);
+emit_32(1101720243);
+emit_32(1131556897);
+emit_32(1125156848);
+emit_32(1101846125);
+emit_32(1131556897);
+emit_32(1125412897);
+emit_32(1102182141);
+emit_32(1131556897);
+emit_32(1125668880);
+emit_32(1102845208);
+emit_32(1131556897);
+emit_32(1125924864);
+emit_32(1103549327);
+emit_32(1131556897);
+emit_32(1126180848);
+emit_32(1103862379);
+emit_32(1131556897);
+emit_32(1126436897);
+emit_32(1104116816);
+emit_32(1131556897);
+emit_32(1126692880);
+emit_32(1103549432);
+emit_32(1131556897);
+emit_32(1126948864);
+emit_32(1103788717);
+emit_32(1131556897);
+emit_32(1127204848);
+emit_32(1103809426);
+emit_32(1131556897);
+emit_32(1127460897);
+emit_32(1103218816);
+emit_32(1131556897);
+emit_32(1127716880);
+emit_32(1101572551);
+emit_32(1131556897);
+emit_32(1127972864);
+emit_32(1100781453);
+emit_32(1131556897);
+emit_32(1128228848);
+emit_32(1100996149);
+emit_32(1131556897);
+emit_32(1128484897);
+emit_32(1100798283);
+emit_32(1131556897);
+emit_32(1128740880);
+emit_32(1100454769);
+emit_32(1131556897);
+emit_32(1128996864);
+emit_32(1101100116);
+emit_32(1131556897);
+emit_32(1129252848);
+emit_32(1100635806);
+emit_32(1131556897);
+emit_32(1129508897);
+emit_32(1100423260);
+emit_32(1131556897);
+emit_32(1129764880);
+emit_32(1100375445);
+emit_32(1131556897);
+emit_32(1130020864);
+emit_32(1100374711);
+emit_32(1131556897);
+emit_32(1130276848);
+emit_32(1100128348);
+emit_32(1131556897);
+emit_32(1130532897);
+emit_32(1099813985);
+emit_32(1131556897);
+emit_32(1130788880);
+emit_32(1098580702);
+emit_32(1131556897);
+emit_32(1131044864);
+emit_32(1098117861);
+emit_32(1131556897);
+emit_32(1131300848);
+emit_32(1098142502);
+emit_32(1131556897);
+emit_32(1131556897);
+emit_32(1097315071);
+emit_32(1131556897);
+emit_32(1131812880);
+emit_32(1097397384);
+emit_32(1131556897);
+emit_32(1132068864);
+emit_32(1096997143);
+emit_32(1131556897);
+emit_32(1081737258);
+emit_32(1078120510);
+emit_32(1131300848);
+emit_32(1090125866);
+emit_32(1081645067);
+emit_32(1131300848);
+emit_32(1094418484);
+emit_32(1083207676);
+emit_32(1131300848);
+emit_32(1098514432);
+emit_32(1082548394);
+emit_32(1131300848);
+emit_32(1100759066);
+emit_32(1083149333);
+emit_32(1131300848);
+emit_32(1102807040);
+emit_32(1084467750);
+emit_32(1131300848);
+emit_32(1104855066);
+emit_32(1084194889);
+emit_32(1131300848);
+emit_32(1106903040);
+emit_32(1085853632);
+emit_32(1131300848);
+emit_32(1108123661);
+emit_32(1085123970);
+emit_32(1131300848);
+emit_32(1109147648);
+emit_32(1087285441);
+emit_32(1131300848);
+emit_32(1110171661);
+emit_32(1085386722);
+emit_32(1131300848);
+emit_32(1111195648);
+emit_32(1080853476);
+emit_32(1131300848);
+emit_32(1112219661);
+emit_32(1078285136);
+emit_32(1131300848);
+emit_32(1113243648);
+emit_32(1077796206);
+emit_32(1131300848);
+emit_32(1114267661);
+emit_32(1081903730);
+emit_32(1131300848);
+emit_32(1115291648);
+emit_32(1083632098);
+emit_32(1131300848);
+emit_32(1116000263);
+emit_32(1084393385);
+emit_32(1131300848);
+emit_32(1116512256);
+emit_32(1085051576);
+emit_32(1131300848);
+emit_32(1117024263);
+emit_32(1082744667);
+emit_32(1131300848);
+emit_32(1117536256);
+emit_32(1082567793);
+emit_32(1131300848);
+emit_32(1118048263);
+emit_32(1084454685);
+emit_32(1131300848);
+emit_32(1118560256);
+emit_32(1085247932);
+emit_32(1131300848);
+emit_32(1119072263);
+emit_32(1088549437);
+emit_32(1131300848);
+emit_32(1119584256);
+emit_32(1091234903);
+emit_32(1131300848);
+emit_32(1120096263);
+emit_32(1092613875);
+emit_32(1131300848);
+emit_32(1120608322);
+emit_32(1094687864);
+emit_32(1131300848);
+emit_32(1121120289);
+emit_32(1095660313);
+emit_32(1131300848);
+emit_32(1121632256);
+emit_32(1096595223);
+emit_32(1131300848);
+emit_32(1122144223);
+emit_32(1096407214);
+emit_32(1131300848);
+emit_32(1122656322);
+emit_32(1098896848);
+emit_32(1131300848);
+emit_32(1123168289);
+emit_32(1100002571);
+emit_32(1131300848);
+emit_32(1123680256);
+emit_32(1100330566);
+emit_32(1131300848);
+emit_32(1124132848);
+emit_32(1100556901);
+emit_32(1131300848);
+emit_32(1124388897);
+emit_32(1101046271);
+emit_32(1131300848);
+emit_32(1124644880);
+emit_32(1101210793);
+emit_32(1131300848);
+emit_32(1124900864);
+emit_32(1101438753);
+emit_32(1131300848);
+emit_32(1125156848);
+emit_32(1101639765);
+emit_32(1131300848);
+emit_32(1125412897);
+emit_32(1102320291);
+emit_32(1131300848);
+emit_32(1125668880);
+emit_32(1103059380);
+emit_32(1131300848);
+emit_32(1125924864);
+emit_32(1103640815);
+emit_32(1131300848);
+emit_32(1126180848);
+emit_32(1104063234);
+emit_32(1131300848);
+emit_32(1126436897);
+emit_32(1103970068);
+emit_32(1131300848);
+emit_32(1126692880);
+emit_32(1103293999);
+emit_32(1131300848);
+emit_32(1126948864);
+emit_32(1106602885);
+emit_32(1131300848);
+emit_32(1127204848);
+emit_32(1106714296);
+emit_32(1131300848);
+emit_32(1127460897);
+emit_32(1105856718);
+emit_32(1131300848);
+emit_32(1127716880);
+emit_32(1104477736);
+emit_32(1131300848);
+emit_32(1127972864);
+emit_32(1103475455);
+emit_32(1131300848);
+emit_32(1128228848);
+emit_32(1102947182);
+emit_32(1131300848);
+emit_32(1128484897);
+emit_32(1102778938);
+emit_32(1131300848);
+emit_32(1128740880);
+emit_32(1102741242);
+emit_32(1131300848);
+emit_32(1128996864);
+emit_32(1099705667);
+emit_32(1131300848);
+emit_32(1129252848);
+emit_32(1099651088);
+emit_32(1131300848);
+emit_32(1129508897);
+emit_32(1099707659);
+emit_32(1131300848);
+emit_32(1129764880);
+emit_32(1100081634);
+emit_32(1131300848);
+emit_32(1130020864);
+emit_32(1100312373);
+emit_32(1131300848);
+emit_32(1130276848);
+emit_32(1100150263);
+emit_32(1131300848);
+emit_32(1130532897);
+emit_32(1099562326);
+emit_32(1131300848);
+emit_32(1130788880);
+emit_32(1099117363);
+emit_32(1131300848);
+emit_32(1131044864);
+emit_32(1098383150);
+emit_32(1131300848);
+emit_32(1131300848);
+emit_32(1097461347);
+emit_32(1131300848);
+emit_32(1131556897);
+emit_32(1097130836);
+emit_32(1131300848);
+emit_32(1131812880);
+emit_32(1097046950);
+emit_32(1131300848);
+emit_32(1132068864);
+emit_32(1096949537);
+emit_32(1131300848);
+emit_32(1081737258);
+emit_32(1084629524);
+emit_32(1131044864);
+emit_32(1090125866);
+emit_32(1084086907);
+emit_32(1131044864);
+emit_32(1094418484);
+emit_32(1082202008);
+emit_32(1131044864);
+emit_32(1098514432);
+emit_32(1080912280);
+emit_32(1131044864);
+emit_32(1100759066);
+emit_32(1083063329);
+emit_32(1131044864);
+emit_32(1102807040);
+emit_32(1084485051);
+emit_32(1131044864);
+emit_32(1104855066);
+emit_32(1083389331);
+emit_32(1131044864);
+emit_32(1106903040);
+emit_32(1083284872);
+emit_32(1131044864);
+emit_32(1108123661);
+emit_32(1083776948);
+emit_32(1131044864);
+emit_32(1109147648);
+emit_32(1084114904);
+emit_32(1131044864);
+emit_32(1110171661);
+emit_32(1084297860);
+emit_32(1131044864);
+emit_32(1111195648);
+emit_32(1078278635);
+emit_32(1131044864);
+emit_32(1112219661);
+emit_32(1076164118);
+emit_32(1131044864);
+emit_32(1113243648);
+emit_32(1078294028);
+emit_32(1131044864);
+emit_32(1114267661);
+emit_32(1082183700);
+emit_32(1131044864);
+emit_32(1115291648);
+emit_32(1083337867);
+emit_32(1131044864);
+emit_32(1116000263);
+emit_32(1083538145);
+emit_32(1131044864);
+emit_32(1116512256);
+emit_32(1083307354);
+emit_32(1131044864);
+emit_32(1117024263);
+emit_32(1082616971);
+emit_32(1131044864);
+emit_32(1117536256);
+emit_32(1082459895);
+emit_32(1131044864);
+emit_32(1118048263);
+emit_32(1082553155);
+emit_32(1131044864);
+emit_32(1118560256);
+emit_32(1082740745);
+emit_32(1131044864);
+emit_32(1119072263);
+emit_32(1085377369);
+emit_32(1131044864);
+emit_32(1119584256);
+emit_32(1088549688);
+emit_32(1131044864);
+emit_32(1120096263);
+emit_32(1090805993);
+emit_32(1131044864);
+emit_32(1120608322);
+emit_32(1092446868);
+emit_32(1131044864);
+emit_32(1121120289);
+emit_32(1093587383);
+emit_32(1131044864);
+emit_32(1121632256);
+emit_32(1094483916);
+emit_32(1131044864);
+emit_32(1122144223);
+emit_32(1096648281);
+emit_32(1131044864);
+emit_32(1122656322);
+emit_32(1098439773);
+emit_32(1131044864);
+emit_32(1123168289);
+emit_32(1099378301);
+emit_32(1131044864);
+emit_32(1123680256);
+emit_32(1100113301);
+emit_32(1131044864);
+emit_32(1124132848);
+emit_32(1100821928);
+emit_32(1131044864);
+emit_32(1124388897);
+emit_32(1100695994);
+emit_32(1131044864);
+emit_32(1124644880);
+emit_32(1100654418);
+emit_32(1131044864);
+emit_32(1124900864);
+emit_32(1101348733);
+emit_32(1131044864);
+emit_32(1125156848);
+emit_32(1101846177);
+emit_32(1131044864);
+emit_32(1125412897);
+emit_32(1102171131);
+emit_32(1131044864);
+emit_32(1125668880);
+emit_32(1102926263);
+emit_32(1131044864);
+emit_32(1125924864);
+emit_32(1103561857);
+emit_32(1131044864);
+emit_32(1126180848);
+emit_32(1105011566);
+emit_32(1131044864);
+emit_32(1126436897);
+emit_32(1105956281);
+emit_32(1131044864);
+emit_32(1126692880);
+emit_32(1106074193);
+emit_32(1131044864);
+emit_32(1126948864);
+emit_32(1106288155);
+emit_32(1131044864);
+emit_32(1127204848);
+emit_32(1106414875);
+emit_32(1131044864);
+emit_32(1127460897);
+emit_32(1105582830);
+emit_32(1131044864);
+emit_32(1127716880);
+emit_32(1104515013);
+emit_32(1131044864);
+emit_32(1127972864);
+emit_32(1103803187);
+emit_32(1131044864);
+emit_32(1128228848);
+emit_32(1103189298);
+emit_32(1131044864);
+emit_32(1128484897);
+emit_32(1102339532);
+emit_32(1131044864);
+emit_32(1128740880);
+emit_32(1102167776);
+emit_32(1131044864);
+emit_32(1128996864);
+emit_32(1102179887);
+emit_32(1131044864);
+emit_32(1129252848);
+emit_32(1101976463);
+emit_32(1131044864);
+emit_32(1129508897);
+emit_32(1099672899);
+emit_32(1131044864);
+emit_32(1129764880);
+emit_32(1099572288);
+emit_32(1131044864);
+emit_32(1130020864);
+emit_32(1099410126);
+emit_32(1131044864);
+emit_32(1130276848);
+emit_32(1099232077);
+emit_32(1131044864);
+emit_32(1130532897);
+emit_32(1099661994);
+emit_32(1131044864);
+emit_32(1130788880);
+emit_32(1099398382);
+emit_32(1131044864);
+emit_32(1131044864);
+emit_32(1098507197);
+emit_32(1131044864);
+emit_32(1131300848);
+emit_32(1098737045);
+emit_32(1131044864);
+emit_32(1131556897);
+emit_32(1097951452);
+emit_32(1131044864);
+emit_32(1131812880);
+emit_32(1097046111);
+emit_32(1131044864);
+emit_32(1132068864);
+emit_32(1096926888);
+emit_32(1131044864);
+emit_32(1081737258);
+emit_32(1086083564);
+emit_32(1130788880);
+emit_32(1090125845);
+emit_32(1085231281);
+emit_32(1130788880);
+emit_32(1094418484);
+emit_32(1084350058);
+emit_32(1130788880);
+emit_32(1098514432);
+emit_32(1082346082);
+emit_32(1130788880);
+emit_32(1100759066);
+emit_32(1082352080);
+emit_32(1130788880);
+emit_32(1102807040);
+emit_32(1083015472);
+emit_32(1130788880);
+emit_32(1104855066);
+emit_32(1082714468);
+emit_32(1130788880);
+emit_32(1106903040);
+emit_32(1082667555);
+emit_32(1130788880);
+emit_32(1108123661);
+emit_32(1081440133);
+emit_32(1130788880);
+emit_32(1109147648);
+emit_32(1079509621);
+emit_32(1130788880);
+emit_32(1110171661);
+emit_32(1082472016);
+emit_32(1130788880);
+emit_32(1111195648);
+emit_32(1077273302);
+emit_32(1130788880);
+emit_32(1112219661);
+emit_32(1077242684);
+emit_32(1130788880);
+emit_32(1113243648);
+emit_32(1078266387);
+emit_32(1130788880);
+emit_32(1114267661);
+emit_32(1079519268);
+emit_32(1130788880);
+emit_32(1115291648);
+emit_32(1082332010);
+emit_32(1130788880);
+emit_32(1116000263);
+emit_32(1083509876);
+emit_32(1130788880);
+emit_32(1116512256);
+emit_32(1083089082);
+emit_32(1130788880);
+emit_32(1117024263);
+emit_32(1081681474);
+emit_32(1130788880);
+emit_32(1117536256);
+emit_32(1081604928);
+emit_32(1130788880);
+emit_32(1118048263);
+emit_32(1083484521);
+emit_32(1130788880);
+emit_32(1118560256);
+emit_32(1085967948);
+emit_32(1130788880);
+emit_32(1119072263);
+emit_32(1087165358);
+emit_32(1130788880);
+emit_32(1119584256);
+emit_32(1089804205);
+emit_32(1130788880);
+emit_32(1120096263);
+emit_32(1090592986);
+emit_32(1130788880);
+emit_32(1120608322);
+emit_32(1092476018);
+emit_32(1130788880);
+emit_32(1121120289);
+emit_32(1094570318);
+emit_32(1130788880);
+emit_32(1121632256);
+emit_32(1095714420);
+emit_32(1130788880);
+emit_32(1122144223);
+emit_32(1097098330);
+emit_32(1130788880);
+emit_32(1122656322);
+emit_32(1098580073);
+emit_32(1130788880);
+emit_32(1123168289);
+emit_32(1099541460);
+emit_32(1130788880);
+emit_32(1123680256);
+emit_32(1100022651);
+emit_32(1130788880);
+emit_32(1124132848);
+emit_32(1100679217);
+emit_32(1130788880);
+emit_32(1124388897);
+emit_32(1100590455);
+emit_32(1130788880);
+emit_32(1124644880);
+emit_32(1100445647);
+emit_32(1130788880);
+emit_32(1124900864);
+emit_32(1100992374);
+emit_32(1130788880);
+emit_32(1125156848);
+emit_32(1101812256);
+emit_32(1130788880);
+emit_32(1125412897);
+emit_32(1101911923);
+emit_32(1130788880);
+emit_32(1125668880);
+emit_32(1102583326);
+emit_32(1130788880);
+emit_32(1125924864);
+emit_32(1105586396);
+emit_32(1130788880);
+emit_32(1126180848);
+emit_32(1105418204);
+emit_32(1130788880);
+emit_32(1126436897);
+emit_32(1105539000);
+emit_32(1130788880);
+emit_32(1126692880);
+emit_32(1106015263);
+emit_32(1130788880);
+emit_32(1126948864);
+emit_32(1106032198);
+emit_32(1130788880);
+emit_32(1127204848);
+emit_32(1106139834);
+emit_32(1130788880);
+emit_32(1127460897);
+emit_32(1105229880);
+emit_32(1130788880);
+emit_32(1127716880);
+emit_32(1105009679);
+emit_32(1130788880);
+emit_32(1127972864);
+emit_32(1104632873);
+emit_32(1130788880);
+emit_32(1128228848);
+emit_32(1104045408);
+emit_32(1130788880);
+emit_32(1128484897);
+emit_32(1103027136);
+emit_32(1130788880);
+emit_32(1128740880);
+emit_32(1102134274);
+emit_32(1130788880);
+emit_32(1128996864);
+emit_32(1101980290);
+emit_32(1130788880);
+emit_32(1129252848);
+emit_32(1101929854);
+emit_32(1130788880);
+emit_32(1129508897);
+emit_32(1102202274);
+emit_32(1130788880);
+emit_32(1129764880);
+emit_32(1102297170);
+emit_32(1130788880);
+emit_32(1130020864);
+emit_32(1099118307);
+emit_32(1130788880);
+emit_32(1130276848);
+emit_32(1098962856);
+emit_32(1130788880);
+emit_32(1130532897);
+emit_32(1099408500);
+emit_32(1130788880);
+emit_32(1130788880);
+emit_32(1099424124);
+emit_32(1130788880);
+emit_32(1131044864);
+emit_32(1098958347);
+emit_32(1130788880);
+emit_32(1131300848);
+emit_32(1098882272);
+emit_32(1130788880);
+emit_32(1131556897);
+emit_32(1098200698);
+emit_32(1130788880);
+emit_32(1131812880);
+emit_32(1098164103);
+emit_32(1130788880);
+emit_32(1132068864);
+emit_32(1097566310);
+emit_32(1130788880);
+emit_32(1081737258);
+emit_32(1088205504);
+emit_32(1130532897);
+emit_32(1090125845);
+emit_32(1087556645);
+emit_32(1130532897);
+emit_32(1094418484);
+emit_32(1086398472);
+emit_32(1130532897);
+emit_32(1098514432);
+emit_32(1083645478);
+emit_32(1130532897);
+emit_32(1100759066);
+emit_32(1080639357);
+emit_32(1130532897);
+emit_32(1102807040);
+emit_32(1082880395);
+emit_32(1130532897);
+emit_32(1104855066);
+emit_32(1082376092);
+emit_32(1130532897);
+emit_32(1106903040);
+emit_32(1082783171);
+emit_32(1130532897);
+emit_32(1108123661);
+emit_32(1079715142);
+emit_32(1130532897);
+emit_32(1109147648);
+emit_32(1074967232);
+emit_32(1130532897);
+emit_32(1110171661);
+emit_32(1075751525);
+emit_32(1130532897);
+emit_32(1111195648);
+emit_32(1074864513);
+emit_32(1130532897);
+emit_32(1112219661);
+emit_32(1066352635);
+emit_32(1130532897);
+emit_32(1113243648);
+emit_32(1075556532);
+emit_32(1130532897);
+emit_32(1114267661);
+emit_32(1081657231);
+emit_32(1130532897);
+emit_32(1115291648);
+emit_32(1082114913);
+emit_32(1130532897);
+emit_32(1116000263);
+emit_32(1082771049);
+emit_32(1130532897);
+emit_32(1116512256);
+emit_32(1083047705);
+emit_32(1130532897);
+emit_32(1117024263);
+emit_32(1081671953);
+emit_32(1130532897);
+emit_32(1117536256);
+emit_32(1082383810);
+emit_32(1130532897);
+emit_32(1118048263);
+emit_32(1085344359);
+emit_32(1130532897);
+emit_32(1118560256);
+emit_32(1087131993);
+emit_32(1130532897);
+emit_32(1119072263);
+emit_32(1088001598);
+emit_32(1130532897);
+emit_32(1119584256);
+emit_32(1090829398);
+emit_32(1130532897);
+emit_32(1120096263);
+emit_32(1091029938);
+emit_32(1130532897);
+emit_32(1120608322);
+emit_32(1092548601);
+emit_32(1130532897);
+emit_32(1121120289);
+emit_32(1094257947);
+emit_32(1130532897);
+emit_32(1121632256);
+emit_32(1095812881);
+emit_32(1130532897);
+emit_32(1122144223);
+emit_32(1096665897);
+emit_32(1130532897);
+emit_32(1122656322);
+emit_32(1097826356);
+emit_32(1130532897);
+emit_32(1123168289);
+emit_32(1099106825);
+emit_32(1130532897);
+emit_32(1123680256);
+emit_32(1099535378);
+emit_32(1130532897);
+emit_32(1124132848);
+emit_32(1099629068);
+emit_32(1130532897);
+emit_32(1124388897);
+emit_32(1100012480);
+emit_32(1130532897);
+emit_32(1124644880);
+emit_32(1100315047);
+emit_32(1130532897);
+emit_32(1124900864);
+emit_32(1100226809);
+emit_32(1130532897);
+emit_32(1125156848);
+emit_32(1101404150);
+emit_32(1130532897);
+emit_32(1125412897);
+emit_32(1101559392);
+emit_32(1130532897);
+emit_32(1125668880);
+emit_32(1104381215);
+emit_32(1130532897);
+emit_32(1125924864);
+emit_32(1104769555);
+emit_32(1130532897);
+emit_32(1126180848);
+emit_32(1104830110);
+emit_32(1130532897);
+emit_32(1126436897);
+emit_32(1105225685);
+emit_32(1130532897);
+emit_32(1126692880);
+emit_32(1105543666);
+emit_32(1130532897);
+emit_32(1126948864);
+emit_32(1105381923);
+emit_32(1130532897);
+emit_32(1127204848);
+emit_32(1102960080);
+emit_32(1130532897);
+emit_32(1127460897);
+emit_32(1102636017);
+emit_32(1130532897);
+emit_32(1127716880);
+emit_32(1102352640);
+emit_32(1130532897);
+emit_32(1127972864);
+emit_32(1102376600);
+emit_32(1130532897);
+emit_32(1128228848);
+emit_32(1101985061);
+emit_32(1130532897);
+emit_32(1128484897);
+emit_32(1100996464);
+emit_32(1130532897);
+emit_32(1128740880);
+emit_32(1102569013);
+emit_32(1130532897);
+emit_32(1128996864);
+emit_32(1102092331);
+emit_32(1130532897);
+emit_32(1129252848);
+emit_32(1102309543);
+emit_32(1130532897);
+emit_32(1129508897);
+emit_32(1102185287);
+emit_32(1130532897);
+emit_32(1129764880);
+emit_32(1102249407);
+emit_32(1130532897);
+emit_32(1130020864);
+emit_32(1102463107);
+emit_32(1130532897);
+emit_32(1130276848);
+emit_32(1099451125);
+emit_32(1130532897);
+emit_32(1130532897);
+emit_32(1098977588);
+emit_32(1130532897);
+emit_32(1130788880);
+emit_32(1099393401);
+emit_32(1130532897);
+emit_32(1131044864);
+emit_32(1099525941);
+emit_32(1130532897);
+emit_32(1131300848);
+emit_32(1099608359);
+emit_32(1130532897);
+emit_32(1131556897);
+emit_32(1099010985);
+emit_32(1130532897);
+emit_32(1131812880);
+emit_32(1098150052);
+emit_32(1130532897);
+emit_32(1132068864);
+emit_32(1097996750);
+emit_32(1130532897);
+emit_32(1081737258);
+emit_32(1088030748);
+emit_32(1130276848);
+emit_32(1090125845);
+emit_32(1088922017);
+emit_32(1130276848);
+emit_32(1094418484);
+emit_32(1086531599);
+emit_32(1130276848);
+emit_32(1098514432);
+emit_32(1084132164);
+emit_32(1130276848);
+emit_32(1100759066);
+emit_32(1081632694);
+emit_32(1130276848);
+emit_32(1102807040);
+emit_32(1082276478);
+emit_32(1130276848);
+emit_32(1104855066);
+emit_32(1081735706);
+emit_32(1130276848);
+emit_32(1106903040);
+emit_32(1082304580);
+emit_32(1130276848);
+emit_32(1108123661);
+emit_32(1079035203);
+emit_32(1130276848);
+emit_32(1109147648);
+emit_32(1069837514);
+emit_32(1130276848);
+emit_32(1110171661);
+emit_32(1072973008);
+emit_32(1130276848);
+emit_32(1111195648);
+emit_32(1073616750);
+emit_32(1130276848);
+emit_32(1112219661);
+emit_32(1074356373);
+emit_32(1130276848);
+emit_32(1113243648);
+emit_32(1076853159);
+emit_32(1130276848);
+emit_32(1114267661);
+emit_32(1081069063);
+emit_32(1130276848);
+emit_32(1115291648);
+emit_32(1082137856);
+emit_32(1130276848);
+emit_32(1116000263);
+emit_32(1082943959);
+emit_32(1130276848);
+emit_32(1116512256);
+emit_32(1081841906);
+emit_32(1130276848);
+emit_32(1117024263);
+emit_32(1079724873);
+emit_32(1130276848);
+emit_32(1117536256);
+emit_32(1084345444);
+emit_32(1130276848);
+emit_32(1118048263);
+emit_32(1086294789);
+emit_32(1130276848);
+emit_32(1118560256);
+emit_32(1087434528);
+emit_32(1130276848);
+emit_32(1119072263);
+emit_32(1088073635);
+emit_32(1130276848);
+emit_32(1119584256);
+emit_32(1089448947);
+emit_32(1130276848);
+emit_32(1120096263);
+emit_32(1090721069);
+emit_32(1130276848);
+emit_32(1120608322);
+emit_32(1091918239);
+emit_32(1130276848);
+emit_32(1121120289);
+emit_32(1094547984);
+emit_32(1130276848);
+emit_32(1121632256);
+emit_32(1095883345);
+emit_32(1130276848);
+emit_32(1122144223);
+emit_32(1096699766);
+emit_32(1130276848);
+emit_32(1122656322);
+emit_32(1097650825);
+emit_32(1130276848);
+emit_32(1123168289);
+emit_32(1098292029);
+emit_32(1130276848);
+emit_32(1123680256);
+emit_32(1098586993);
+emit_32(1130276848);
+emit_32(1124132848);
+emit_32(1099015075);
+emit_32(1130276848);
+emit_32(1124388897);
+emit_32(1099448608);
+emit_32(1130276848);
+emit_32(1124644880);
+emit_32(1100240545);
+emit_32(1130276848);
+emit_32(1124900864);
+emit_32(1100411568);
+emit_32(1130276848);
+emit_32(1125156848);
+emit_32(1100717962);
+emit_32(1130276848);
+emit_32(1125412897);
+emit_32(1104106121);
+emit_32(1130276848);
+emit_32(1125668880);
+emit_32(1103981340);
+emit_32(1130276848);
+emit_32(1125924864);
+emit_32(1104173177);
+emit_32(1130276848);
+emit_32(1126180848);
+emit_32(1104308653);
+emit_32(1130276848);
+emit_32(1126436897);
+emit_32(1104718856);
+emit_32(1130276848);
+emit_32(1126692880);
+emit_32(1104731072);
+emit_32(1130276848);
+emit_32(1126948864);
+emit_32(1102448479);
+emit_32(1130276848);
+emit_32(1127204848);
+emit_32(1102776107);
+emit_32(1130276848);
+emit_32(1127460897);
+emit_32(1102622858);
+emit_32(1130276848);
+emit_32(1127716880);
+emit_32(1102367582);
+emit_32(1130276848);
+emit_32(1127972864);
+emit_32(1102063704);
+emit_32(1130276848);
+emit_32(1128228848);
+emit_32(1101966973);
+emit_32(1130276848);
+emit_32(1128484897);
+emit_32(1101031067);
+emit_32(1130276848);
+emit_32(1128740880);
+emit_32(1100260154);
+emit_32(1130276848);
+emit_32(1128996864);
+emit_32(1100108530);
+emit_32(1130276848);
+emit_32(1129252848);
+emit_32(1102466305);
+emit_32(1130276848);
+emit_32(1129508897);
+emit_32(1102042209);
+emit_32(1130276848);
+emit_32(1129764880);
+emit_32(1101779803);
+emit_32(1130276848);
+emit_32(1130020864);
+emit_32(1101832441);
+emit_32(1130276848);
+emit_32(1130276848);
+emit_32(1101855772);
+emit_32(1130276848);
+emit_32(1130532897);
+emit_32(1099854407);
+emit_32(1130276848);
+emit_32(1130788880);
+emit_32(1099755369);
+emit_32(1130276848);
+emit_32(1131044864);
+emit_32(1100126198);
+emit_32(1130276848);
+emit_32(1131300848);
+emit_32(1100210346);
+emit_32(1130276848);
+emit_32(1131556897);
+emit_32(1099599131);
+emit_32(1130276848);
+emit_32(1131812880);
+emit_32(1099312713);
+emit_32(1130276848);
+emit_32(1132068864);
+emit_32(1099215405);
+emit_32(1130276848);
+emit_32(1081737300);
+emit_32(1090545737);
+emit_32(1130020864);
+emit_32(1090125845);
+emit_32(1090779118);
+emit_32(1130020864);
+emit_32(1094418484);
+emit_32(1088257765);
+emit_32(1130020864);
+emit_32(1098514432);
+emit_32(1086032917);
+emit_32(1130020864);
+emit_32(1100759066);
+emit_32(1083317483);
+emit_32(1130020864);
+emit_32(1102807040);
+emit_32(1080833973);
+emit_32(1130020864);
+emit_32(1104855066);
+emit_32(1082686639);
+emit_32(1130020864);
+emit_32(1106903040);
+emit_32(1079520862);
+emit_32(1130020864);
+emit_32(1108123661);
+emit_32(1071421451);
+emit_32(1130020864);
+emit_32(1109147648);
+emit_32(1074673169);
+emit_32(1130020864);
+emit_32(1110171661);
+emit_32(1076755348);
+emit_32(1130020864);
+emit_32(1111195648);
+emit_32(1078551432);
+emit_32(1130020864);
+emit_32(1112219661);
+emit_32(1078159559);
+emit_32(1130020864);
+emit_32(1113243648);
+emit_32(1078755569);
+emit_32(1130020864);
+emit_32(1114267661);
+emit_32(1080798447);
+emit_32(1130020864);
+emit_32(1115291648);
+emit_32(1079415837);
+emit_32(1130020864);
+emit_32(1116000263);
+emit_32(1082138863);
+emit_32(1130020864);
+emit_32(1116512256);
+emit_32(1077619039);
+emit_32(1130020864);
+emit_32(1117024263);
+emit_32(1082948888);
+emit_32(1130020864);
+emit_32(1117536256);
+emit_32(1085399431);
+emit_32(1130020864);
+emit_32(1118048263);
+emit_32(1087137844);
+emit_32(1130020864);
+emit_32(1118560256);
+emit_32(1087057984);
+emit_32(1130020864);
+emit_32(1119072263);
+emit_32(1088011706);
+emit_32(1130020864);
+emit_32(1119584256);
+emit_32(1087547166);
+emit_32(1130020864);
+emit_32(1120096263);
+emit_32(1089001897);
+emit_32(1130020864);
+emit_32(1120608322);
+emit_32(1092274230);
+emit_32(1130020864);
+emit_32(1121120289);
+emit_32(1093489656);
+emit_32(1130020864);
+emit_32(1121632256);
+emit_32(1094888037);
+emit_32(1130020864);
+emit_32(1122144223);
+emit_32(1095981597);
+emit_32(1130020864);
+emit_32(1122656322);
+emit_32(1097071696);
+emit_32(1130020864);
+emit_32(1123168289);
+emit_32(1097539571);
+emit_32(1130020864);
+emit_32(1123680256);
+emit_32(1097094346);
+emit_32(1130020864);
+emit_32(1124132848);
+emit_32(1098861091);
+emit_32(1130020864);
+emit_32(1124388897);
+emit_32(1099278215);
+emit_32(1130020864);
+emit_32(1124644880);
+emit_32(1099782108);
+emit_32(1130020864);
+emit_32(1124900864);
+emit_32(1100389129);
+emit_32(1130020864);
+emit_32(1125156848);
+emit_32(1103220179);
+emit_32(1130020864);
+emit_32(1125412897);
+emit_32(1103665509);
+emit_32(1130020864);
+emit_32(1125668880);
+emit_32(1104112307);
+emit_32(1130020864);
+emit_32(1125924864);
+emit_32(1104257063);
+emit_32(1130020864);
+emit_32(1126180848);
+emit_32(1103372904);
+emit_32(1130020864);
+emit_32(1126436897);
+emit_32(1104276514);
+emit_32(1130020864);
+emit_32(1126692880);
+emit_32(1104476792);
+emit_32(1130020864);
+emit_32(1126948864);
+emit_32(1102277299);
+emit_32(1130020864);
+emit_32(1127204848);
+emit_32(1102993162);
+emit_32(1130020864);
+emit_32(1127460897);
+emit_32(1102760011);
+emit_32(1130020864);
+emit_32(1127716880);
+emit_32(1102172861);
+emit_32(1130020864);
+emit_32(1127972864);
+emit_32(1102165993);
+emit_32(1130020864);
+emit_32(1128228848);
+emit_32(1101400008);
+emit_32(1130020864);
+emit_32(1128484897);
+emit_32(1100749524);
+emit_32(1130020864);
+emit_32(1128740880);
+emit_32(1100733953);
+emit_32(1130020864);
+emit_32(1128996864);
+emit_32(1100153147);
+emit_32(1130020864);
+emit_32(1129252848);
+emit_32(1100010435);
+emit_32(1130020864);
+emit_32(1129508897);
+emit_32(1101004957);
+emit_32(1130020864);
+emit_32(1129764880);
+emit_32(1102164053);
+emit_32(1130020864);
+emit_32(1130020864);
+emit_32(1101850110);
+emit_32(1130020864);
+emit_32(1130276848);
+emit_32(1102364960);
+emit_32(1130020864);
+emit_32(1130532897);
+emit_32(1103265268);
+emit_32(1130020864);
+emit_32(1130788880);
+emit_32(1100508614);
+emit_32(1130020864);
+emit_32(1131044864);
+emit_32(1100302936);
+emit_32(1130020864);
+emit_32(1131300848);
+emit_32(1100358615);
+emit_32(1130020864);
+emit_32(1131556897);
+emit_32(1100122056);
+emit_32(1130020864);
+emit_32(1131812880);
+emit_32(1099275331);
+emit_32(1130020864);
+emit_32(1132068864);
+emit_32(1099473145);
+emit_32(1130020864);
+emit_32(1081737300);
+emit_32(1091835139);
+emit_32(1129764880);
+emit_32(1090125845);
+emit_32(1092274629);
+emit_32(1129764880);
+emit_32(1094418484);
+emit_32(1091485187);
+emit_32(1129764880);
+emit_32(1098514432);
+emit_32(1088227650);
+emit_32(1129764880);
+emit_32(1100759066);
+emit_32(1086589313);
+emit_32(1129764880);
+emit_32(1102807040);
+emit_32(1084191974);
+emit_32(1129764880);
+emit_32(1104855066);
+emit_32(1080611507);
+emit_32(1129764880);
+emit_32(1106903040);
+emit_32(1075926931);
+emit_32(1129764880);
+emit_32(1108123661);
+emit_32(1079228645);
+emit_32(1129764880);
+emit_32(1109147648);
+emit_32(1082222833);
+emit_32(1129764880);
+emit_32(1110171661);
+emit_32(1083146418);
+emit_32(1129764880);
+emit_32(1111195648);
+emit_32(1082983868);
+emit_32(1129764880);
+emit_32(1112219661);
+emit_32(1081162806);
+emit_32(1129764880);
+emit_32(1113243648);
+emit_32(1077328919);
+emit_32(1129764880);
+emit_32(1114267661);
+emit_32(1076126244);
+emit_32(1129764880);
+emit_32(1115291648);
+emit_32(1076114164);
+emit_32(1129764880);
+emit_32(1116000263);
+emit_32(1077220454);
+emit_32(1129764880);
+emit_32(1116512256);
+emit_32(1076896821);
+emit_32(1129764880);
+emit_32(1117024263);
+emit_32(1084289953);
+emit_32(1129764880);
+emit_32(1117536256);
+emit_32(1085902789);
+emit_32(1129764880);
+emit_32(1118048263);
+emit_32(1086392243);
+emit_32(1129764880);
+emit_32(1118560256);
+emit_32(1086899838);
+emit_32(1129764880);
+emit_32(1119072263);
+emit_32(1086675170);
+emit_32(1129764880);
+emit_32(1119584256);
+emit_32(1088147014);
+emit_32(1129764880);
+emit_32(1120096263);
+emit_32(1090408877);
+emit_32(1129764880);
+emit_32(1120608322);
+emit_32(1091709677);
+emit_32(1129764880);
+emit_32(1121120289);
+emit_32(1092234888);
+emit_32(1129764880);
+emit_32(1121632256);
+emit_32(1092967570);
+emit_32(1129764880);
+emit_32(1122144223);
+emit_32(1095135710);
+emit_32(1129764880);
+emit_32(1122656322);
+emit_32(1095795579);
+emit_32(1129764880);
+emit_32(1123168289);
+emit_32(1096420845);
+emit_32(1129764880);
+emit_32(1123680256);
+emit_32(1097142580);
+emit_32(1129764880);
+emit_32(1124132848);
+emit_32(1097919155);
+emit_32(1129764880);
+emit_32(1124388897);
+emit_32(1099013659);
+emit_32(1129764880);
+emit_32(1124644880);
+emit_32(1099826515);
+emit_32(1129764880);
+emit_32(1124900864);
+emit_32(1102949541);
+emit_32(1129764880);
+emit_32(1125156848);
+emit_32(1103290853);
+emit_32(1129764880);
+emit_32(1125412897);
+emit_32(1103584035);
+emit_32(1129764880);
+emit_32(1125668880);
+emit_32(1103730049);
+emit_32(1129764880);
+emit_32(1125924864);
+emit_32(1101436027);
+emit_32(1129764880);
+emit_32(1126180848);
+emit_32(1103412226);
+emit_32(1129764880);
+emit_32(1126436897);
+emit_32(1103699850);
+emit_32(1129764880);
+emit_32(1126692880);
+emit_32(1104185079);
+emit_32(1129764880);
+emit_32(1126948864);
+emit_32(1102131233);
+emit_32(1129764880);
+emit_32(1127204848);
+emit_32(1105054191);
+emit_32(1129764880);
+emit_32(1127460897);
+emit_32(1104932451);
+emit_32(1129764880);
+emit_32(1127716880);
+emit_32(1104496873);
+emit_32(1129764880);
+emit_32(1127972864);
+emit_32(1104477159);
+emit_32(1129764880);
+emit_32(1128228848);
+emit_32(1104320607);
+emit_32(1129764880);
+emit_32(1128484897);
+emit_32(1103549432);
+emit_32(1129764880);
+emit_32(1128740880);
+emit_32(1102911793);
+emit_32(1129764880);
+emit_32(1128996864);
+emit_32(1101627707);
+emit_32(1129764880);
+emit_32(1129252848);
+emit_32(1100874200);
+emit_32(1129764880);
+emit_32(1129508897);
+emit_32(1102213074);
+emit_32(1129764880);
+emit_32(1129764880);
+emit_32(1102331091);
+emit_32(1129764880);
+emit_32(1130020864);
+emit_32(1102551345);
+emit_32(1129764880);
+emit_32(1130276848);
+emit_32(1102696730);
+emit_32(1129764880);
+emit_32(1130532897);
+emit_32(1103568568);
+emit_32(1129764880);
+emit_32(1130788880);
+emit_32(1102851657);
+emit_32(1129764880);
+emit_32(1131044864);
+emit_32(1100504787);
+emit_32(1129764880);
+emit_32(1131300848);
+emit_32(1099935252);
+emit_32(1129764880);
+emit_32(1131556897);
+emit_32(1100381212);
+emit_32(1129764880);
+emit_32(1131812880);
+emit_32(1099598030);
+emit_32(1129764880);
+emit_32(1132068864);
+emit_32(1099324719);
+emit_32(1129764880);
+emit_32(1081737300);
+emit_32(1093216816);
+emit_32(1129508897);
+emit_32(1090125845);
+emit_32(1092417151);
+emit_32(1129508897);
+emit_32(1094418484);
+emit_32(1092298631);
+emit_32(1129508897);
+emit_32(1098514432);
+emit_32(1090960878);
+emit_32(1129508897);
+emit_32(1100759066);
+emit_32(1088614281);
+emit_32(1129508897);
+emit_32(1102807040);
+emit_32(1087275941);
+emit_32(1129508897);
+emit_32(1104855066);
+emit_32(1083352170);
+emit_32(1129508897);
+emit_32(1106903040);
+emit_32(1082781472);
+emit_32(1129508897);
+emit_32(1108123661);
+emit_32(1082625024);
+emit_32(1129508897);
+emit_32(1109147648);
+emit_32(1083756291);
+emit_32(1129508897);
+emit_32(1110171661);
+emit_32(1085301682);
+emit_32(1129508897);
+emit_32(1111195648);
+emit_32(1085254392);
+emit_32(1129508897);
+emit_32(1112219661);
+emit_32(1083183433);
+emit_32(1129508897);
+emit_32(1113243648);
+emit_32(1082262280);
+emit_32(1129508897);
+emit_32(1114267661);
+emit_32(1079746432);
+emit_32(1129508897);
+emit_32(1115291648);
+emit_32(1079747858);
+emit_32(1129508897);
+emit_32(1116000263);
+emit_32(1080629039);
+emit_32(1129508897);
+emit_32(1116512256);
+emit_32(1084566295);
+emit_32(1129508897);
+emit_32(1117024263);
+emit_32(1087852574);
+emit_32(1129508897);
+emit_32(1117536256);
+emit_32(1089342076);
+emit_32(1129508897);
+emit_32(1118048263);
+emit_32(1089066049);
+emit_32(1129508897);
+emit_32(1118560256);
+emit_32(1087464056);
+emit_32(1129508897);
+emit_32(1119072263);
+emit_32(1086240913);
+emit_32(1129508897);
+emit_32(1119584256);
+emit_32(1087270531);
+emit_32(1129508897);
+emit_32(1120096263);
+emit_32(1090862428);
+emit_32(1129508897);
+emit_32(1120608322);
+emit_32(1091412280);
+emit_32(1129508897);
+emit_32(1121120289);
+emit_32(1092239313);
+emit_32(1129508897);
+emit_32(1121632256);
+emit_32(1093054602);
+emit_32(1129508897);
+emit_32(1122144223);
+emit_32(1094389439);
+emit_32(1129508897);
+emit_32(1122656322);
+emit_32(1094766612);
+emit_32(1129508897);
+emit_32(1123168289);
+emit_32(1095867197);
+emit_32(1129508897);
+emit_32(1123680256);
+emit_32(1097324193);
+emit_32(1129508897);
+emit_32(1124132848);
+emit_32(1097994863);
+emit_32(1129508897);
+emit_32(1124388897);
+emit_32(1098508665);
+emit_32(1129508897);
+emit_32(1124644880);
+emit_32(1099390989);
+emit_32(1129508897);
+emit_32(1124900864);
+emit_32(1102819570);
+emit_32(1129508897);
+emit_32(1125156848);
+emit_32(1103456528);
+emit_32(1129508897);
+emit_32(1125412897);
+emit_32(1104213443);
+emit_32(1129508897);
+emit_32(1125668880);
+emit_32(1101924034);
+emit_32(1129508897);
+emit_32(1125924864);
+emit_32(1101395290);
+emit_32(1129508897);
+emit_32(1126180848);
+emit_32(1103179599);
+emit_32(1129508897);
+emit_32(1126436897);
+emit_32(1104174855);
+emit_32(1129508897);
+emit_32(1126692880);
+emit_32(1103711856);
+emit_32(1129508897);
+emit_32(1126948864);
+emit_32(1101427166);
+emit_32(1129508897);
+emit_32(1127204848);
+emit_32(1104341946);
+emit_32(1129508897);
+emit_32(1127460897);
+emit_32(1103905266);
+emit_32(1129508897);
+emit_32(1127716880);
+emit_32(1104351225);
+emit_32(1129508897);
+emit_32(1127972864);
+emit_32(1104338538);
+emit_32(1129508897);
+emit_32(1128228848);
+emit_32(1104240391);
+emit_32(1129508897);
+emit_32(1128484897);
+emit_32(1104134537);
+emit_32(1129508897);
+emit_32(1128740880);
+emit_32(1103285715);
+emit_32(1129508897);
+emit_32(1128996864);
+emit_32(1103034843);
+emit_32(1129508897);
+emit_32(1129252848);
+emit_32(1102598688);
+emit_32(1129508897);
+emit_32(1129508897);
+emit_32(1102258058);
+emit_32(1129508897);
+emit_32(1129764880);
+emit_32(1102454299);
+emit_32(1129508897);
+emit_32(1130020864);
+emit_32(1102717125);
+emit_32(1129508897);
+emit_32(1130276848);
+emit_32(1103026612);
+emit_32(1129508897);
+emit_32(1130532897);
+emit_32(1103449817);
+emit_32(1129508897);
+emit_32(1130788880);
+emit_32(1103303593);
+emit_32(1129508897);
+emit_32(1131044864);
+emit_32(1100124678);
+emit_32(1129508897);
+emit_32(1131300848);
+emit_32(1099774348);
+emit_32(1129508897);
+emit_32(1131556897);
+emit_32(1099896141);
+emit_32(1129508897);
+emit_32(1131812880);
+emit_32(1099520646);
+emit_32(1129508897);
+emit_32(1132068864);
+emit_32(1098974233);
+emit_32(1129508897);
+emit_32(1081737258);
+emit_32(1093092141);
+emit_32(1129252848);
+emit_32(1090125845);
+emit_32(1092641463);
+emit_32(1129252848);
+emit_32(1094418484);
+emit_32(1093021047);
+emit_32(1129252848);
+emit_32(1098514432);
+emit_32(1091404216);
+emit_32(1129252848);
+emit_32(1100759066);
+emit_32(1090891043);
+emit_32(1129252848);
+emit_32(1102807040);
+emit_32(1087333718);
+emit_32(1129252848);
+emit_32(1104855066);
+emit_32(1086550243);
+emit_32(1129252848);
+emit_32(1106903040);
+emit_32(1086614059);
+emit_32(1129252848);
+emit_32(1108123661);
+emit_32(1087395227);
+emit_32(1129252848);
+emit_32(1109147648);
+emit_32(1087693715);
+emit_32(1129252848);
+emit_32(1110171661);
+emit_32(1086905605);
+emit_32(1129252848);
+emit_32(1111195648);
+emit_32(1085917406);
+emit_32(1129252848);
+emit_32(1112219661);
+emit_32(1086122445);
+emit_32(1129252848);
+emit_32(1113243648);
+emit_32(1085614577);
+emit_32(1129252848);
+emit_32(1114267661);
+emit_32(1083545422);
+emit_32(1129252848);
+emit_32(1115291648);
+emit_32(1083831285);
+emit_32(1129252848);
+emit_32(1116000263);
+emit_32(1086466587);
+emit_32(1129252848);
+emit_32(1116512256);
+emit_32(1089709267);
+emit_32(1129252848);
+emit_32(1117024263);
+emit_32(1091281166);
+emit_32(1129252848);
+emit_32(1117536256);
+emit_32(1091916068);
+emit_32(1129252848);
+emit_32(1118048263);
+emit_32(1091040717);
+emit_32(1129252848);
+emit_32(1118560256);
+emit_32(1090210612);
+emit_32(1129252848);
+emit_32(1119072263);
+emit_32(1089209851);
+emit_32(1129252848);
+emit_32(1119584256);
+emit_32(1089378399);
+emit_32(1129252848);
+emit_32(1120096263);
+emit_32(1090028789);
+emit_32(1129252848);
+emit_32(1120608322);
+emit_32(1091234840);
+emit_32(1129252848);
+emit_32(1121120289);
+emit_32(1093074734);
+emit_32(1129252848);
+emit_32(1121632256);
+emit_32(1093111330);
+emit_32(1129252848);
+emit_32(1122144223);
+emit_32(1094128029);
+emit_32(1129252848);
+emit_32(1122656322);
+emit_32(1095036410);
+emit_32(1129252848);
+emit_32(1123168289);
+emit_32(1095680551);
+emit_32(1129252848);
+emit_32(1123680256);
+emit_32(1097146460);
+emit_32(1129252848);
+emit_32(1124132848);
+emit_32(1098042153);
+emit_32(1129252848);
+emit_32(1124388897);
+emit_32(1097318741);
+emit_32(1129252848);
+emit_32(1124644880);
+emit_32(1101515457);
+emit_32(1129252848);
+emit_32(1124900864);
+emit_32(1102822454);
+emit_32(1129252848);
+emit_32(1125156848);
+emit_32(1103621941);
+emit_32(1129252848);
+emit_32(1125412897);
+emit_32(1104011330);
+emit_32(1129252848);
+emit_32(1125668880);
+emit_32(1101788244);
+emit_32(1129252848);
+emit_32(1125924864);
+emit_32(1102141981);
+emit_32(1129252848);
+emit_32(1126180848);
+emit_32(1103612556);
+emit_32(1129252848);
+emit_32(1126436897);
+emit_32(1104382421);
+emit_32(1129252848);
+emit_32(1126692880);
+emit_32(1104094324);
+emit_32(1129252848);
+emit_32(1126948864);
+emit_32(1101288335);
+emit_32(1129252848);
+emit_32(1127204848);
+emit_32(1103222224);
+emit_32(1129252848);
+emit_32(1127460897);
+emit_32(1103312087);
+emit_32(1129252848);
+emit_32(1127716880);
+emit_32(1103773512);
+emit_32(1129252848);
+emit_32(1127972864);
+emit_32(1104076551);
+emit_32(1129252848);
+emit_32(1128228848);
+emit_32(1104345353);
+emit_32(1129252848);
+emit_32(1128484897);
+emit_32(1104178053);
+emit_32(1129252848);
+emit_32(1128740880);
+emit_32(1103422240);
+emit_32(1129252848);
+emit_32(1128996864);
+emit_32(1103161092);
+emit_32(1129252848);
+emit_32(1129252848);
+emit_32(1102825705);
+emit_32(1129252848);
+emit_32(1129508897);
+emit_32(1102393482);
+emit_32(1129252848);
+emit_32(1129764880);
+emit_32(1102471601);
+emit_32(1129252848);
+emit_32(1130020864);
+emit_32(1100205471);
+emit_32(1129252848);
+emit_32(1130276848);
+emit_32(1102674552);
+emit_32(1129252848);
+emit_32(1130532897);
+emit_32(1102672980);
+emit_32(1129252848);
+emit_32(1130788880);
+emit_32(1102535406);
+emit_32(1129252848);
+emit_32(1131044864);
+emit_32(1100902669);
+emit_32(1129252848);
+emit_32(1131300848);
+emit_32(1099358641);
+emit_32(1129252848);
+emit_32(1131556897);
+emit_32(1099486829);
+emit_32(1129252848);
+emit_32(1131812880);
+emit_32(1098967679);
+emit_32(1129252848);
+emit_32(1132068864);
+emit_32(1097864210);
+emit_32(1129252848);
+emit_32(1081737258);
+emit_32(1094158228);
+emit_32(1128996864);
+emit_32(1090125845);
+emit_32(1093761447);
+emit_32(1128996864);
+emit_32(1094418484);
+emit_32(1094140822);
+emit_32(1128996864);
+emit_32(1098514432);
+emit_32(1093034574);
+emit_32(1128996864);
+emit_32(1100759066);
+emit_32(1091456100);
+emit_32(1128996864);
+emit_32(1102807040);
+emit_32(1089525095);
+emit_32(1128996864);
+emit_32(1104855066);
+emit_32(1088585025);
+emit_32(1128996864);
+emit_32(1106903040);
+emit_32(1090478817);
+emit_32(1128996864);
+emit_32(1108123661);
+emit_32(1091340515);
+emit_32(1128996864);
+emit_32(1109147648);
+emit_32(1091433031);
+emit_32(1128996864);
+emit_32(1110171661);
+emit_32(1090929264);
+emit_32(1128996864);
+emit_32(1111195648);
+emit_32(1089429192);
+emit_32(1128996864);
+emit_32(1112219661);
+emit_32(1087959340);
+emit_32(1128996864);
+emit_32(1113243648);
+emit_32(1088733567);
+emit_32(1128996864);
+emit_32(1114267661);
+emit_32(1087293054);
+emit_32(1128996864);
+emit_32(1115291648);
+emit_32(1087872937);
+emit_32(1128996864);
+emit_32(1116000263);
+emit_32(1089774656);
+emit_32(1128996864);
+emit_32(1116512256);
+emit_32(1091806303);
+emit_32(1128996864);
+emit_32(1117024263);
+emit_32(1092488066);
+emit_32(1128996864);
+emit_32(1117536256);
+emit_32(1092781238);
+emit_32(1128996864);
+emit_32(1118048263);
+emit_32(1092423317);
+emit_32(1128996864);
+emit_32(1118560256);
+emit_32(1092476627);
+emit_32(1128996864);
+emit_32(1119072263);
+emit_32(1092619547);
+emit_32(1128996864);
+emit_32(1119584256);
+emit_32(1092370794);
+emit_32(1128996864);
+emit_32(1120096263);
+emit_32(1091790858);
+emit_32(1128996864);
+emit_32(1120608322);
+emit_32(1091461888);
+emit_32(1128996864);
+emit_32(1121120289);
+emit_32(1092460080);
+emit_32(1128996864);
+emit_32(1121632256);
+emit_32(1094170916);
+emit_32(1128996864);
+emit_32(1122144223);
+emit_32(1094599154);
+emit_32(1128996864);
+emit_32(1122656322);
+emit_32(1095059898);
+emit_32(1128996864);
+emit_32(1123168289);
+emit_32(1096401342);
+emit_32(1128996864);
+emit_32(1123680256);
+emit_32(1096965371);
+emit_32(1128996864);
+emit_32(1124132848);
+emit_32(1097641807);
+emit_32(1128996864);
+emit_32(1124388897);
+emit_32(1099087059);
+emit_32(1128996864);
+emit_32(1124644880);
+emit_32(1102450944);
+emit_32(1128996864);
+emit_32(1124900864);
+emit_32(1103410286);
+emit_32(1128996864);
+emit_32(1125156848);
+emit_32(1103813149);
+emit_32(1128996864);
+emit_32(1125412897);
+emit_32(1101937980);
+emit_32(1128996864);
+emit_32(1125668880);
+emit_32(1103166020);
+emit_32(1128996864);
+emit_32(1125924864);
+emit_32(1104505681);
+emit_32(1128996864);
+emit_32(1126180848);
+emit_32(1103994867);
+emit_32(1128996864);
+emit_32(1126436897);
+emit_32(1104662548);
+emit_32(1128996864);
+emit_32(1126692880);
+emit_32(1104116974);
+emit_32(1128996864);
+emit_32(1126948864);
+emit_32(1100885629);
+emit_32(1128996864);
+emit_32(1127204848);
+emit_32(1100638585);
+emit_32(1128996864);
+emit_32(1127460897);
+emit_32(1100607442);
+emit_32(1128996864);
+emit_32(1127716880);
+emit_32(1103522116);
+emit_32(1128996864);
+emit_32(1127972864);
+emit_32(1103785676);
+emit_32(1128996864);
+emit_32(1128228848);
+emit_32(1103795375);
+emit_32(1128996864);
+emit_32(1128484897);
+emit_32(1101024146);
+emit_32(1128996864);
+emit_32(1128740880);
+emit_32(1100738829);
+emit_32(1128996864);
+emit_32(1128996864);
+emit_32(1102805677);
+emit_32(1128996864);
+emit_32(1129252848);
+emit_32(1102445543);
+emit_32(1128996864);
+emit_32(1129508897);
+emit_32(1102293657);
+emit_32(1128996864);
+emit_32(1129764880);
+emit_32(1100424728);
+emit_32(1128996864);
+emit_32(1130020864);
+emit_32(1099671273);
+emit_32(1128996864);
+emit_32(1130276848);
+emit_32(1100387975);
+emit_32(1128996864);
+emit_32(1130532897);
+emit_32(1101778072);
+emit_32(1128996864);
+emit_32(1130788880);
+emit_32(1101932318);
+emit_32(1128996864);
+emit_32(1131044864);
+emit_32(1101602383);
+emit_32(1128996864);
+emit_32(1131300848);
+emit_32(1098804049);
+emit_32(1128996864);
+emit_32(1131556897);
+emit_32(1098879861);
+emit_32(1128996864);
+emit_32(1131812880);
+emit_32(1098098881);
+emit_32(1128996864);
+emit_32(1132068864);
+emit_32(1096354890);
+emit_32(1128996864);
+emit_32(1081737258);
+emit_32(1094837495);
+emit_32(1128740880);
+emit_32(1090125845);
+emit_32(1095096284);
+emit_32(1128740880);
+emit_32(1094418484);
+emit_32(1094836761);
+emit_32(1128740880);
+emit_32(1098514432);
+emit_32(1093776966);
+emit_32(1128740880);
+emit_32(1100759066);
+emit_32(1092523739);
+emit_32(1128740880);
+emit_32(1102807040);
+emit_32(1091209108);
+emit_32(1128740880);
+emit_32(1104855066);
+emit_32(1090481543);
+emit_32(1128740880);
+emit_32(1106903040);
+emit_32(1091724850);
+emit_32(1128740880);
+emit_32(1108123661);
+emit_32(1092918077);
+emit_32(1128740880);
+emit_32(1109147648);
+emit_32(1092885571);
+emit_32(1128740880);
+emit_32(1110171661);
+emit_32(1092185311);
+emit_32(1128740880);
+emit_32(1111195648);
+emit_32(1090654935);
+emit_32(1128740880);
+emit_32(1112219661);
+emit_32(1090140378);
+emit_32(1128740880);
+emit_32(1113243648);
+emit_32(1091090734);
+emit_32(1128740880);
+emit_32(1114267661);
+emit_32(1090672415);
+emit_32(1128740880);
+emit_32(1115291648);
+emit_32(1091158399);
+emit_32(1128740880);
+emit_32(1116000263);
+emit_32(1092233651);
+emit_32(1128740880);
+emit_32(1116512256);
+emit_32(1093174139);
+emit_32(1128740880);
+emit_32(1117024263);
+emit_32(1092967255);
+emit_32(1128740880);
+emit_32(1117536256);
+emit_32(1093958998);
+emit_32(1128740880);
+emit_32(1118048263);
+emit_32(1094070986);
+emit_32(1128740880);
+emit_32(1118560256);
+emit_32(1094393423);
+emit_32(1128740880);
+emit_32(1119072263);
+emit_32(1095115263);
+emit_32(1128740880);
+emit_32(1119584256);
+emit_32(1095201351);
+emit_32(1128740880);
+emit_32(1120096263);
+emit_32(1094051693);
+emit_32(1128740880);
+emit_32(1120608322);
+emit_32(1092903187);
+emit_32(1128740880);
+emit_32(1121120289);
+emit_32(1093066136);
+emit_32(1128740880);
+emit_32(1121632256);
+emit_32(1093765641);
+emit_32(1128740880);
+emit_32(1122144223);
+emit_32(1094858886);
+emit_32(1128740880);
+emit_32(1122656322);
+emit_32(1095293731);
+emit_32(1128740880);
+emit_32(1123168289);
+emit_32(1096058248);
+emit_32(1128740880);
+emit_32(1123680256);
+emit_32(1098058197);
+emit_32(1128740880);
+emit_32(1124132848);
+emit_32(1099090415);
+emit_32(1128740880);
+emit_32(1124388897);
+emit_32(1099754216);
+emit_32(1128740880);
+emit_32(1124644880);
+emit_32(1103037989);
+emit_32(1128740880);
+emit_32(1124900864);
+emit_32(1103411334);
+emit_32(1128740880);
+emit_32(1125156848);
+emit_32(1104264875);
+emit_32(1128740880);
+emit_32(1125412897);
+emit_32(1101973160);
+emit_32(1128740880);
+emit_32(1125668880);
+emit_32(1104413616);
+emit_32(1128740880);
+emit_32(1125924864);
+emit_32(1104295861);
+emit_32(1128740880);
+emit_32(1126180848);
+emit_32(1104392801);
+emit_32(1128740880);
+emit_32(1126436897);
+emit_32(1104250248);
+emit_32(1128740880);
+emit_32(1126692880);
+emit_32(1104207466);
+emit_32(1128740880);
+emit_32(1126948864);
+emit_32(1101393507);
+emit_32(1128740880);
+emit_32(1127204848);
+emit_32(1101210845);
+emit_32(1128740880);
+emit_32(1127460897);
+emit_32(1100893913);
+emit_32(1128740880);
+emit_32(1127716880);
+emit_32(1101512678);
+emit_32(1128740880);
+emit_32(1127972864);
+emit_32(1103029862);
+emit_32(1128740880);
+emit_32(1128228848);
+emit_32(1103145206);
+emit_32(1128740880);
+emit_32(1128484897);
+emit_32(1100738514);
+emit_32(1128740880);
+emit_32(1128740880);
+emit_32(1101464234);
+emit_32(1128740880);
+emit_32(1128996864);
+emit_32(1102046560);
+emit_32(1128740880);
+emit_32(1129252848);
+emit_32(1102012062);
+emit_32(1128740880);
+emit_32(1129508897);
+emit_32(1101022678);
+emit_32(1128740880);
+emit_32(1129764880);
+emit_32(1098697723);
+emit_32(1128740880);
+emit_32(1130020864);
+emit_32(1098672662);
+emit_32(1128740880);
+emit_32(1130276848);
+emit_32(1098798911);
+emit_32(1128740880);
+emit_32(1130532897);
+emit_32(1100908750);
+emit_32(1128740880);
+emit_32(1130788880);
+emit_32(1100999243);
+emit_32(1128740880);
+emit_32(1131044864);
+emit_32(1100710255);
+emit_32(1128740880);
+emit_32(1131300848);
+emit_32(1097055338);
+emit_32(1128740880);
+emit_32(1131556897);
+emit_32(1097777807);
+emit_32(1128740880);
+emit_32(1131812880);
+emit_32(1096376071);
+emit_32(1128740880);
+emit_32(1132068864);
+emit_32(1094422364);
+emit_32(1128740880);
+emit_32(1081737258);
+emit_32(1096602144);
+emit_32(1128484897);
+emit_32(1090125845);
+emit_32(1096605604);
+emit_32(1128484897);
+emit_32(1094418484);
+emit_32(1095915222);
+emit_32(1128484897);
+emit_32(1098514432);
+emit_32(1094988700);
+emit_32(1128484897);
+emit_32(1100759066);
+emit_32(1093318738);
+emit_32(1128484897);
+emit_32(1102807040);
+emit_32(1092655199);
+emit_32(1128484897);
+emit_32(1104855066);
+emit_32(1091908927);
+emit_32(1128484897);
+emit_32(1106903040);
+emit_32(1093146457);
+emit_32(1128484897);
+emit_32(1108123661);
+emit_32(1093729255);
+emit_32(1128484897);
+emit_32(1109147648);
+emit_32(1093918628);
+emit_32(1128484897);
+emit_32(1110171661);
+emit_32(1093116048);
+emit_32(1128484897);
+emit_32(1111195648);
+emit_32(1091599514);
+emit_32(1128484897);
+emit_32(1112219661);
+emit_32(1092064610);
+emit_32(1128484897);
+emit_32(1113243648);
+emit_32(1092256562);
+emit_32(1128484897);
+emit_32(1114267661);
+emit_32(1092232937);
+emit_32(1128484897);
+emit_32(1115291648);
+emit_32(1092569216);
+emit_32(1128484897);
+emit_32(1116000263);
+emit_32(1093499827);
+emit_32(1128484897);
+emit_32(1116512256);
+emit_32(1094494401);
+emit_32(1128484897);
+emit_32(1117024263);
+emit_32(1094275249);
+emit_32(1128484897);
+emit_32(1117536256);
+emit_32(1095835320);
+emit_32(1128484897);
+emit_32(1118048263);
+emit_32(1096603927);
+emit_32(1128484897);
+emit_32(1118560256);
+emit_32(1095737174);
+emit_32(1128484897);
+emit_32(1119072263);
+emit_32(1097480536);
+emit_32(1128484897);
+emit_32(1119584256);
+emit_32(1097454217);
+emit_32(1128484897);
+emit_32(1120096263);
+emit_32(1096093480);
+emit_32(1128484897);
+emit_32(1120608322);
+emit_32(1095489500);
+emit_32(1128484897);
+emit_32(1121120289);
+emit_32(1095558601);
+emit_32(1128484897);
+emit_32(1121632256);
+emit_32(1094835713);
+emit_32(1128484897);
+emit_32(1122144223);
+emit_32(1095452590);
+emit_32(1128484897);
+emit_32(1122656322);
+emit_32(1095192334);
+emit_32(1128484897);
+emit_32(1123168289);
+emit_32(1096359399);
+emit_32(1128484897);
+emit_32(1123680256);
+emit_32(1098052325);
+emit_32(1128484897);
+emit_32(1124132848);
+emit_32(1099302384);
+emit_32(1128484897);
+emit_32(1124388897);
+emit_32(1100571948);
+emit_32(1128484897);
+emit_32(1124644880);
+emit_32(1103063207);
+emit_32(1128484897);
+emit_32(1124900864);
+emit_32(1104141301);
+emit_32(1128484897);
+emit_32(1125156848);
+emit_32(1104236039);
+emit_32(1128484897);
+emit_32(1125412897);
+emit_32(1101777338);
+emit_32(1128484897);
+emit_32(1125668880);
+emit_32(1103904794);
+emit_32(1128484897);
+emit_32(1125924864);
+emit_32(1104679954);
+emit_32(1128484897);
+emit_32(1126180848);
+emit_32(1104977645);
+emit_32(1128484897);
+emit_32(1126436897);
+emit_32(1104719800);
+emit_32(1128484897);
+emit_32(1126692880);
+emit_32(1104308181);
+emit_32(1128484897);
+emit_32(1126948864);
+emit_32(1102818784);
+emit_32(1128484897);
+emit_32(1127204848);
+emit_32(1104373455);
+emit_32(1128484897);
+emit_32(1127460897);
+emit_32(1101605267);
+emit_32(1128484897);
+emit_32(1127716880);
+emit_32(1101582618);
+emit_32(1128484897);
+emit_32(1127972864);
+emit_32(1103712433);
+emit_32(1128484897);
+emit_32(1128228848);
+emit_32(1103557086);
+emit_32(1128484897);
+emit_32(1128484897);
+emit_32(1103194069);
+emit_32(1128484897);
+emit_32(1128740880);
+emit_32(1101005482);
+emit_32(1128484897);
+emit_32(1128996864);
+emit_32(1102896693);
+emit_32(1128484897);
+emit_32(1129252848);
+emit_32(1102422632);
+emit_32(1128484897);
+emit_32(1129508897);
+emit_32(1099646737);
+emit_32(1128484897);
+emit_32(1129764880);
+emit_32(1099338403);
+emit_32(1128484897);
+emit_32(1130020864);
+emit_32(1099043701);
+emit_32(1128484897);
+emit_32(1130276848);
+emit_32(1098432643);
+emit_32(1128484897);
+emit_32(1130532897);
+emit_32(1101270824);
+emit_32(1128484897);
+emit_32(1130788880);
+emit_32(1101020319);
+emit_32(1128484897);
+emit_32(1131044864);
+emit_32(1100721370);
+emit_32(1128484897);
+emit_32(1131300848);
+emit_32(1097164495);
+emit_32(1128484897);
+emit_32(1131556897);
+emit_32(1096670721);
+emit_32(1128484897);
+emit_32(1131812880);
+emit_32(1095529765);
+emit_32(1128484897);
+emit_32(1132068864);
+emit_32(1095414841);
+emit_32(1128484897);
+emit_32(1081737258);
+emit_32(1097223216);
+emit_32(1128228848);
+emit_32(1090125845);
+emit_32(1097159043);
+emit_32(1128228848);
+emit_32(1094418484);
+emit_32(1096303510);
+emit_32(1128228848);
+emit_32(1098514432);
+emit_32(1095078878);
+emit_32(1128228848);
+emit_32(1100759066);
+emit_32(1093559491);
+emit_32(1128228848);
+emit_32(1102807040);
+emit_32(1093420450);
+emit_32(1128228848);
+emit_32(1104855066);
+emit_32(1094782865);
+emit_32(1128228848);
+emit_32(1106903040);
+emit_32(1094716699);
+emit_32(1128228848);
+emit_32(1108123661);
+emit_32(1095422496);
+emit_32(1128228848);
+emit_32(1109147648);
+emit_32(1095210998);
+emit_32(1128228848);
+emit_32(1110171661);
+emit_32(1093591892);
+emit_32(1128228848);
+emit_32(1111195648);
+emit_32(1093748025);
+emit_32(1128228848);
+emit_32(1112219661);
+emit_32(1093936139);
+emit_32(1128228848);
+emit_32(1113243648);
+emit_32(1093754421);
+emit_32(1128228848);
+emit_32(1114267661);
+emit_32(1092768026);
+emit_32(1128228848);
+emit_32(1115291648);
+emit_32(1093788919);
+emit_32(1128228848);
+emit_32(1116000263);
+emit_32(1094950951);
+emit_32(1128228848);
+emit_32(1116512256);
+emit_32(1095041758);
+emit_32(1128228848);
+emit_32(1117024263);
+emit_32(1096487325);
+emit_32(1128228848);
+emit_32(1117536256);
+emit_32(1097262852);
+emit_32(1128228848);
+emit_32(1118048263);
+emit_32(1097536530);
+emit_32(1128228848);
+emit_32(1118560256);
+emit_32(1098558367);
+emit_32(1128228848);
+emit_32(1119072263);
+emit_32(1098952212);
+emit_32(1128228848);
+emit_32(1119584256);
+emit_32(1099049048);
+emit_32(1128228848);
+emit_32(1120096263);
+emit_32(1099095553);
+emit_32(1128228848);
+emit_32(1120608322);
+emit_32(1098511915);
+emit_32(1128228848);
+emit_32(1121120289);
+emit_32(1097554566);
+emit_32(1128228848);
+emit_32(1121632256);
+emit_32(1096990851);
+emit_32(1128228848);
+emit_32(1122144223);
+emit_32(1096447479);
+emit_32(1128228848);
+emit_32(1122656322);
+emit_32(1097522584);
+emit_32(1128228848);
+emit_32(1123168289);
+emit_32(1098051486);
+emit_32(1128228848);
+emit_32(1123680256);
+emit_32(1099167013);
+emit_32(1128228848);
+emit_32(1124132848);
+emit_32(1099703150);
+emit_32(1128228848);
+emit_32(1124388897);
+emit_32(1102297537);
+emit_32(1128228848);
+emit_32(1124644880);
+emit_32(1103741898);
+emit_32(1128228848);
+emit_32(1124900864);
+emit_32(1104507778);
+emit_32(1128228848);
+emit_32(1125156848);
+emit_32(1104918977);
+emit_32(1128228848);
+emit_32(1125412897);
+emit_32(1102477630);
+emit_32(1128228848);
+emit_32(1125668880);
+emit_32(1102229537);
+emit_32(1128228848);
+emit_32(1125924864);
+emit_32(1105767065);
+emit_32(1128228848);
+emit_32(1126180848);
+emit_32(1105996231);
+emit_32(1128228848);
+emit_32(1126436897);
+emit_32(1105933527);
+emit_32(1128228848);
+emit_32(1126692880);
+emit_32(1105463240);
+emit_32(1128228848);
+emit_32(1126948864);
+emit_32(1105052985);
+emit_32(1128228848);
+emit_32(1127204848);
+emit_32(1105035736);
+emit_32(1128228848);
+emit_32(1127460897);
+emit_32(1104068424);
+emit_32(1128228848);
+emit_32(1127716880);
+emit_32(1102737467);
+emit_32(1128228848);
+emit_32(1127972864);
+emit_32(1105007739);
+emit_32(1128228848);
+emit_32(1128228848);
+emit_32(1104220835);
+emit_32(1128228848);
+emit_32(1128484897);
+emit_32(1104506624);
+emit_32(1128228848);
+emit_32(1128740880);
+emit_32(1102445019);
+emit_32(1128228848);
+emit_32(1128996864);
+emit_32(1102497553);
+emit_32(1128228848);
+emit_32(1129252848);
+emit_32(1101981444);
+emit_32(1128228848);
+emit_32(1129508897);
+emit_32(1101313920);
+emit_32(1128228848);
+emit_32(1129764880);
+emit_32(1101362889);
+emit_32(1128228848);
+emit_32(1130020864);
+emit_32(1098897582);
+emit_32(1128228848);
+emit_32(1130276848);
+emit_32(1099105095);
+emit_32(1128228848);
+emit_32(1130532897);
+emit_32(1101849428);
+emit_32(1128228848);
+emit_32(1130788880);
+emit_32(1101462346);
+emit_32(1128228848);
+emit_32(1131044864);
+emit_32(1101111964);
+emit_32(1128228848);
+emit_32(1131300848);
+emit_32(1098211184);
+emit_32(1128228848);
+emit_32(1131556897);
+emit_32(1097551315);
+emit_32(1128228848);
+emit_32(1131812880);
+emit_32(1097268933);
+emit_32(1128228848);
+emit_32(1132068864);
+emit_32(1096928356);
+emit_32(1128228848);
+emit_32(1081737258);
+emit_32(1096992739);
+emit_32(1127972864);
+emit_32(1090125866);
+emit_32(1097387423);
+emit_32(1127972864);
+emit_32(1094418484);
+emit_32(1096399769);
+emit_32(1127972864);
+emit_32(1098514432);
+emit_32(1094991636);
+emit_32(1127972864);
+emit_32(1100759066);
+emit_32(1094441239);
+emit_32(1127972864);
+emit_32(1102807040);
+emit_32(1095107189);
+emit_32(1127972864);
+emit_32(1104855066);
+emit_32(1096891761);
+emit_32(1127972864);
+emit_32(1106903040);
+emit_32(1096776417);
+emit_32(1127972864);
+emit_32(1108123661);
+emit_32(1097155058);
+emit_32(1127972864);
+emit_32(1109147648);
+emit_32(1095872545);
+emit_32(1127972864);
+emit_32(1110171661);
+emit_32(1095805226);
+emit_32(1127972864);
+emit_32(1111195648);
+emit_32(1096095367);
+emit_32(1127972864);
+emit_32(1112219661);
+emit_32(1095697223);
+emit_32(1127972864);
+emit_32(1113243648);
+emit_32(1095695440);
+emit_32(1127972864);
+emit_32(1114267661);
+emit_32(1094850498);
+emit_32(1127972864);
+emit_32(1115291648);
+emit_32(1095604738);
+emit_32(1127972864);
+emit_32(1116000263);
+emit_32(1095794636);
+emit_32(1127972864);
+emit_32(1116512256);
+emit_32(1095935669);
+emit_32(1127972864);
+emit_32(1117024263);
+emit_32(1097458201);
+emit_32(1127972864);
+emit_32(1117536256);
+emit_32(1099005428);
+emit_32(1127972864);
+emit_32(1118048263);
+emit_32(1099075106);
+emit_32(1127972864);
+emit_32(1118560256);
+emit_32(1099380713);
+emit_32(1127972864);
+emit_32(1119072263);
+emit_32(1099718669);
+emit_32(1127972864);
+emit_32(1119584256);
+emit_32(1100017356);
+emit_32(1127972864);
+emit_32(1120096263);
+emit_32(1100344092);
+emit_32(1127972864);
+emit_32(1120608322);
+emit_32(1100094793);
+emit_32(1127972864);
+emit_32(1121120289);
+emit_32(1099700109);
+emit_32(1127972864);
+emit_32(1121632256);
+emit_32(1099356386);
+emit_32(1127972864);
+emit_32(1122144223);
+emit_32(1098732746);
+emit_32(1127972864);
+emit_32(1122656322);
+emit_32(1099139855);
+emit_32(1127972864);
+emit_32(1123168289);
+emit_32(1099468531);
+emit_32(1127972864);
+emit_32(1123680256);
+emit_32(1099976619);
+emit_32(1127972864);
+emit_32(1124132848);
+emit_32(1100936485);
+emit_32(1127972864);
+emit_32(1124388897);
+emit_32(1103548174);
+emit_32(1127972864);
+emit_32(1124644880);
+emit_32(1104509036);
+emit_32(1127972864);
+emit_32(1124900864);
+emit_32(1105478183);
+emit_32(1127972864);
+emit_32(1125156848);
+emit_32(1105595466);
+emit_32(1127972864);
+emit_32(1125412897);
+emit_32(1103928335);
+emit_32(1127972864);
+emit_32(1125668880);
+emit_32(1104097732);
+emit_32(1127972864);
+emit_32(1125924864);
+emit_32(1105747981);
+emit_32(1127972864);
+emit_32(1126180848);
+emit_32(1107329129);
+emit_32(1127972864);
+emit_32(1126436897);
+emit_32(1107330807);
+emit_32(1127972864);
+emit_32(1126692880);
+emit_32(1107185474);
+emit_32(1127972864);
+emit_32(1126948864);
+emit_32(1106443082);
+emit_32(1127972864);
+emit_32(1127204848);
+emit_32(1106311748);
+emit_32(1127972864);
+emit_32(1127460897);
+emit_32(1106434117);
+emit_32(1127972864);
+emit_32(1127716880);
+emit_32(1106504581);
+emit_32(1127972864);
+emit_32(1127972864);
+emit_32(1105930800);
+emit_32(1127972864);
+emit_32(1128228848);
+emit_32(1106592085);
+emit_32(1127972864);
+emit_32(1128484897);
+emit_32(1106700245);
+emit_32(1127972864);
+emit_32(1128740880);
+emit_32(1104209143);
+emit_32(1127972864);
+emit_32(1128996864);
+emit_32(1103888803);
+emit_32(1127972864);
+emit_32(1129252848);
+emit_32(1103514986);
+emit_32(1127972864);
+emit_32(1129508897);
+emit_32(1104960710);
+emit_32(1127972864);
+emit_32(1129764880);
+emit_32(1103902592);
+emit_32(1127972864);
+emit_32(1130020864);
+emit_32(1101125124);
+emit_32(1127972864);
+emit_32(1130276848);
+emit_32(1099577950);
+emit_32(1127972864);
+emit_32(1130532897);
+emit_32(1102071045);
+emit_32(1127972864);
+emit_32(1130788880);
+emit_32(1102154983);
+emit_32(1127972864);
+emit_32(1131044864);
+emit_32(1101877530);
+emit_32(1127972864);
+emit_32(1131300848);
+emit_32(1099361367);
+emit_32(1127972864);
+emit_32(1131556897);
+emit_32(1098597270);
+emit_32(1127972864);
+emit_32(1131812880);
+emit_32(1098904817);
+emit_32(1127972864);
+emit_32(1132068864);
+emit_32(1098078224);
+emit_32(1127972864);
+emit_32(1081737258);
+emit_32(1096797703);
+emit_32(1127716880);
+emit_32(1090125866);
+emit_32(1097168375);
+emit_32(1127716880);
+emit_32(1094418484);
+emit_32(1095948462);
+emit_32(1127716880);
+emit_32(1098514432);
+emit_32(1095608618);
+emit_32(1127716880);
+emit_32(1100759066);
+emit_32(1096751356);
+emit_32(1127716880);
+emit_32(1102807040);
+emit_32(1097561276);
+emit_32(1127716880);
+emit_32(1104855066);
+emit_32(1097849635);
+emit_32(1127716880);
+emit_32(1106903040);
+emit_32(1098303144);
+emit_32(1127716880);
+emit_32(1108123661);
+emit_32(1098264347);
+emit_32(1127716880);
+emit_32(1109147648);
+emit_32(1097068341);
+emit_32(1127716880);
+emit_32(1110171661);
+emit_32(1098172806);
+emit_32(1127716880);
+emit_32(1111195648);
+emit_32(1098939053);
+emit_32(1127716880);
+emit_32(1112219661);
+emit_32(1097712586);
+emit_32(1127716880);
+emit_32(1113243648);
+emit_32(1097830341);
+emit_32(1127716880);
+emit_32(1114267661);
+emit_32(1096396623);
+emit_32(1127716880);
+emit_32(1115291648);
+emit_32(1095821689);
+emit_32(1127716880);
+emit_32(1116000263);
+emit_32(1096202427);
+emit_32(1127716880);
+emit_32(1116512256);
+emit_32(1096892495);
+emit_32(1127716880);
+emit_32(1117024263);
+emit_32(1098192309);
+emit_32(1127716880);
+emit_32(1117536256);
+emit_32(1099117101);
+emit_32(1127716880);
+emit_32(1118048263);
+emit_32(1099661522);
+emit_32(1127716880);
+emit_32(1118560256);
+emit_32(1099930114);
+emit_32(1127716880);
+emit_32(1119072263);
+emit_32(1100208459);
+emit_32(1127716880);
+emit_32(1119584256);
+emit_32(1100702129);
+emit_32(1127716880);
+emit_32(1120096263);
+emit_32(1101093614);
+emit_32(1127716880);
+emit_32(1120608322);
+emit_32(1101089158);
+emit_32(1127716880);
+emit_32(1121120289);
+emit_32(1100770810);
+emit_32(1127716880);
+emit_32(1121632256);
+emit_32(1100500959);
+emit_32(1127716880);
+emit_32(1122144223);
+emit_32(1100074032);
+emit_32(1127716880);
+emit_32(1122656322);
+emit_32(1100304509);
+emit_32(1127716880);
+emit_32(1123168289);
+emit_32(1100602881);
+emit_32(1127716880);
+emit_32(1123680256);
+emit_32(1101222799);
+emit_32(1127716880);
+emit_32(1124132848);
+emit_32(1101588647);
+emit_32(1127716880);
+emit_32(1124388897);
+emit_32(1103974262);
+emit_32(1127716880);
+emit_32(1124644880);
+emit_32(1104918190);
+emit_32(1127716880);
+emit_32(1124900864);
+emit_32(1105762661);
+emit_32(1127716880);
+emit_32(1125156848);
+emit_32(1106612899);
+emit_32(1127716880);
+emit_32(1125412897);
+emit_32(1104639689);
+emit_32(1127716880);
+emit_32(1125668880);
+emit_32(1105198265);
+emit_32(1127716880);
+emit_32(1125924864);
+emit_32(1105413748);
+emit_32(1127716880);
+emit_32(1126180848);
+emit_32(1107783057);
+emit_32(1127716880);
+emit_32(1126436897);
+emit_32(1107991672);
+emit_32(1127716880);
+emit_32(1126692880);
+emit_32(1107664568);
+emit_32(1127716880);
+emit_32(1126948864);
+emit_32(1107212999);
+emit_32(1127716880);
+emit_32(1127204848);
+emit_32(1107232712);
+emit_32(1127716880);
+emit_32(1127460897);
+emit_32(1107399803);
+emit_32(1127716880);
+emit_32(1127716880);
+emit_32(1107519026);
+emit_32(1127716880);
+emit_32(1127972864);
+emit_32(1105586291);
+emit_32(1127716880);
+emit_32(1128228848);
+emit_32(1107722319);
+emit_32(1127716880);
+emit_32(1128484897);
+emit_32(1107549828);
+emit_32(1127716880);
+emit_32(1128740880);
+emit_32(1107213051);
+emit_32(1127716880);
+emit_32(1128996864);
+emit_32(1104407953);
+emit_32(1127716880);
+emit_32(1129252848);
+emit_32(1105963988);
+emit_32(1127716880);
+emit_32(1129508897);
+emit_32(1105610303);
+emit_32(1127716880);
+emit_32(1129764880);
+emit_32(1104453042);
+emit_32(1127716880);
+emit_32(1130020864);
+emit_32(1103642178);
+emit_32(1127716880);
+emit_32(1130276848);
+emit_32(1100372928);
+emit_32(1127716880);
+emit_32(1130532897);
+emit_32(1102654577);
+emit_32(1127716880);
+emit_32(1130788880);
+emit_32(1102227911);
+emit_32(1127716880);
+emit_32(1131044864);
+emit_32(1101889641);
+emit_32(1127716880);
+emit_32(1131300848);
+emit_32(1099123340);
+emit_32(1127716880);
+emit_32(1131556897);
+emit_32(1099152595);
+emit_32(1127716880);
+emit_32(1131812880);
+emit_32(1099081921);
+emit_32(1127716880);
+emit_32(1132068864);
+emit_32(1098933705);
+emit_32(1127716880);
+emit_32(1081737258);
+emit_32(1097521955);
+emit_32(1127460897);
+emit_32(1090125866);
+emit_32(1097290954);
+emit_32(1127460897);
+emit_32(1094418484);
+emit_32(1096535664);
+emit_32(1127460897);
+emit_32(1098514432);
+emit_32(1096791202);
+emit_32(1127460897);
+emit_32(1100759066);
+emit_32(1097822057);
+emit_32(1127460897);
+emit_32(1102807040);
+emit_32(1098240020);
+emit_32(1127460897);
+emit_32(1104855066);
+emit_32(1098978217);
+emit_32(1127460897);
+emit_32(1106903040);
+emit_32(1099121977);
+emit_32(1127460897);
+emit_32(1108123661);
+emit_32(1099009884);
+emit_32(1127460897);
+emit_32(1109147648);
+emit_32(1099001233);
+emit_32(1127460897);
+emit_32(1110171661);
+emit_32(1099564791);
+emit_32(1127460897);
+emit_32(1111195648);
+emit_32(1099604427);
+emit_32(1127460897);
+emit_32(1112219661);
+emit_32(1098912681);
+emit_32(1127460897);
+emit_32(1113243648);
+emit_32(1098358823);
+emit_32(1127460897);
+emit_32(1114267661);
+emit_32(1096897318);
+emit_32(1127460897);
+emit_32(1115291648);
+emit_32(1095649408);
+emit_32(1127460897);
+emit_32(1116000263);
+emit_32(1096935801);
+emit_32(1127460897);
+emit_32(1116512256);
+emit_32(1097798359);
+emit_32(1127460897);
+emit_32(1117024263);
+emit_32(1098804363);
+emit_32(1127460897);
+emit_32(1117536256);
+emit_32(1099628859);
+emit_32(1127460897);
+emit_32(1118048263);
+emit_32(1100288570);
+emit_32(1127460897);
+emit_32(1118560256);
+emit_32(1100879076);
+emit_32(1127460897);
+emit_32(1119072263);
+emit_32(1100927310);
+emit_32(1127460897);
+emit_32(1119584256);
+emit_32(1101310879);
+emit_32(1127460897);
+emit_32(1120096263);
+emit_32(1101683124);
+emit_32(1127460897);
+emit_32(1120608322);
+emit_32(1101623879);
+emit_32(1127460897);
+emit_32(1121120289);
+emit_32(1101768950);
+emit_32(1127460897);
+emit_32(1121632256);
+emit_32(1101614495);
+emit_32(1127460897);
+emit_32(1122144223);
+emit_32(1101255882);
+emit_32(1127460897);
+emit_32(1122656322);
+emit_32(1101305165);
+emit_32(1127460897);
+emit_32(1123168289);
+emit_32(1101210164);
+emit_32(1127460897);
+emit_32(1123680256);
+emit_32(1101974785);
+emit_32(1127460897);
+emit_32(1124132848);
+emit_32(1102412304);
+emit_32(1127460897);
+emit_32(1124388897);
+emit_32(1102794981);
+emit_32(1127460897);
+emit_32(1124644880);
+emit_32(1105358121);
+emit_32(1127460897);
+emit_32(1124900864);
+emit_32(1106543274);
+emit_32(1127460897);
+emit_32(1125156848);
+emit_32(1107495748);
+emit_32(1127460897);
+emit_32(1125412897);
+emit_32(1105955861);
+emit_32(1127460897);
+emit_32(1125668880);
+emit_32(1106429084);
+emit_32(1127460897);
+emit_32(1125924864);
+emit_32(1107140909);
+emit_32(1127460897);
+emit_32(1126180848);
+emit_32(1108420067);
+emit_32(1127460897);
+emit_32(1126436897);
+emit_32(1108539421);
+emit_32(1127460897);
+emit_32(1126692880);
+emit_32(1108278824);
+emit_32(1127460897);
+emit_32(1126948864);
+emit_32(1106248099);
+emit_32(1127460897);
+emit_32(1127204848);
+emit_32(1106077182);
+emit_32(1127460897);
+emit_32(1127460897);
+emit_32(1107959900);
+emit_32(1127460897);
+emit_32(1127716880);
+emit_32(1107937880);
+emit_32(1127460897);
+emit_32(1127972864);
+emit_32(1107912006);
+emit_32(1127460897);
+emit_32(1128228848);
+emit_32(1107668710);
+emit_32(1127460897);
+emit_32(1128484897);
+emit_32(1106012327);
+emit_32(1127460897);
+emit_32(1128740880);
+emit_32(1105705199);
+emit_32(1127460897);
+emit_32(1128996864);
+emit_32(1105290802);
+emit_32(1127460897);
+emit_32(1129252848);
+emit_32(1106539918);
+emit_32(1127460897);
+emit_32(1129508897);
+emit_32(1105540573);
+emit_32(1127460897);
+emit_32(1129764880);
+emit_32(1104772701);
+emit_32(1127460897);
+emit_32(1130020864);
+emit_32(1101448086);
+emit_32(1127460897);
+emit_32(1130276848);
+emit_32(1101175508);
+emit_32(1127460897);
+emit_32(1130532897);
+emit_32(1103296830);
+emit_32(1127460897);
+emit_32(1130788880);
+emit_32(1102692850);
+emit_32(1127460897);
+emit_32(1131044864);
+emit_32(1101873336);
+emit_32(1127460897);
+emit_32(1131300848);
+emit_32(1099038038);
+emit_32(1127460897);
+emit_32(1131556897);
+emit_32(1099314443);
+emit_32(1127460897);
+emit_32(1131812880);
+emit_32(1099183371);
+emit_32(1127460897);
+emit_32(1132068864);
+emit_32(1098779931);
+emit_32(1127460897);
+emit_32(1081737258);
+emit_32(1098169765);
+emit_32(1127204848);
+emit_32(1090125866);
+emit_32(1097937715);
+emit_32(1127204848);
+emit_32(1094418484);
+emit_32(1097656592);
+emit_32(1127204848);
+emit_32(1098514432);
+emit_32(1097279105);
+emit_32(1127204848);
+emit_32(1100759066);
+emit_32(1098705587);
+emit_32(1127204848);
+emit_32(1102807040);
+emit_32(1099191760);
+emit_32(1127204848);
+emit_32(1104855066);
+emit_32(1099316121);
+emit_32(1127204848);
+emit_32(1106903040);
+emit_32(1099533910);
+emit_32(1127204848);
+emit_32(1108123661);
+emit_32(1099430573);
+emit_32(1127204848);
+emit_32(1109147648);
+emit_32(1099413848);
+emit_32(1127204848);
+emit_32(1110171661);
+emit_32(1099829504);
+emit_32(1127204848);
+emit_32(1111195648);
+emit_32(1100016517);
+emit_32(1127204848);
+emit_32(1112219661);
+emit_32(1099249693);
+emit_32(1127204848);
+emit_32(1113243648);
+emit_32(1098799645);
+emit_32(1127204848);
+emit_32(1114267661);
+emit_32(1098342780);
+emit_32(1127204848);
+emit_32(1115291648);
+emit_32(1097196791);
+emit_32(1127204848);
+emit_32(1116000263);
+emit_32(1097901330);
+emit_32(1127204848);
+emit_32(1116512256);
+emit_32(1098866124);
+emit_32(1127204848);
+emit_32(1117024263);
+emit_32(1099404516);
+emit_32(1127204848);
+emit_32(1117536256);
+emit_32(1099985741);
+emit_32(1127204848);
+emit_32(1118048263);
+emit_32(1100426563);
+emit_32(1127204848);
+emit_32(1118560256);
+emit_32(1101059169);
+emit_32(1127204848);
+emit_32(1119072263);
+emit_32(1101194959);
+emit_32(1127204848);
+emit_32(1119584256);
+emit_32(1101016072);
+emit_32(1127204848);
+emit_32(1120096263);
+emit_32(1101472308);
+emit_32(1127204848);
+emit_32(1120608322);
+emit_32(1101985323);
+emit_32(1127204848);
+emit_32(1121120289);
+emit_32(1102436316);
+emit_32(1127204848);
+emit_32(1121632256);
+emit_32(1102413719);
+emit_32(1127204848);
+emit_32(1122144223);
+emit_32(1101785779);
+emit_32(1127204848);
+emit_32(1122656322);
+emit_32(1101731673);
+emit_32(1127204848);
+emit_32(1123168289);
+emit_32(1102273262);
+emit_32(1127204848);
+emit_32(1123680256);
+emit_32(1102879182);
+emit_32(1127204848);
+emit_32(1124132848);
+emit_32(1103081819);
+emit_32(1127204848);
+emit_32(1124388897);
+emit_32(1103419985);
+emit_32(1127204848);
+emit_32(1124644880);
+emit_32(1106708634);
+emit_32(1127204848);
+emit_32(1124900864);
+emit_32(1107116530);
+emit_32(1127204848);
+emit_32(1125156848);
+emit_32(1107879893);
+emit_32(1127204848);
+emit_32(1125412897);
+emit_32(1106751573);
+emit_32(1127204848);
+emit_32(1125668880);
+emit_32(1108314712);
+emit_32(1127204848);
+emit_32(1125924864);
+emit_32(1109036342);
+emit_32(1127204848);
+emit_32(1126180848);
+emit_32(1109160047);
+emit_32(1127204848);
+emit_32(1126436897);
+emit_32(1109143323);
+emit_32(1127204848);
+emit_32(1126692880);
+emit_32(1108877692);
+emit_32(1127204848);
+emit_32(1126948864);
+emit_32(1108518135);
+emit_32(1127204848);
+emit_32(1127204848);
+emit_32(1108362238);
+emit_32(1127204848);
+emit_32(1127460897);
+emit_32(1108376997);
+emit_32(1127204848);
+emit_32(1127716880);
+emit_32(1108363313);
+emit_32(1127204848);
+emit_32(1127972864);
+emit_32(1108321213);
+emit_32(1127204848);
+emit_32(1128228848);
+emit_32(1106462953);
+emit_32(1127204848);
+emit_32(1128484897);
+emit_32(1106272584);
+emit_32(1127204848);
+emit_32(1128740880);
+emit_32(1105682131);
+emit_32(1127204848);
+emit_32(1128996864);
+emit_32(1107532055);
+emit_32(1127204848);
+emit_32(1129252848);
+emit_32(1106896539);
+emit_32(1127204848);
+emit_32(1129508897);
+emit_32(1106257851);
+emit_32(1127204848);
+emit_32(1129764880);
+emit_32(1102788428);
+emit_32(1127204848);
+emit_32(1130020864);
+emit_32(1101910298);
+emit_32(1127204848);
+emit_32(1130276848);
+emit_32(1101035943);
+emit_32(1127204848);
+emit_32(1130532897);
+emit_32(1103745044);
+emit_32(1127204848);
+emit_32(1130788880);
+emit_32(1103183164);
+emit_32(1127204848);
+emit_32(1131044864);
+emit_32(1102075291);
+emit_32(1127204848);
+emit_32(1131300848);
+emit_32(1098519780);
+emit_32(1127204848);
+emit_32(1131556897);
+emit_32(1098358928);
+emit_32(1127204848);
+emit_32(1131812880);
+emit_32(1098789788);
+emit_32(1127204848);
+emit_32(1132068864);
+emit_32(1097999476);
+emit_32(1127204848);
+emit_32(1081737258);
+emit_32(1098949119);
+emit_32(1126948864);
+emit_32(1090125845);
+emit_32(1098913939);
+emit_32(1126948864);
+emit_32(1094418484);
+emit_32(1097887384);
+emit_32(1126948864);
+emit_32(1098514432);
+emit_32(1098001888);
+emit_32(1126948864);
+emit_32(1100759066);
+emit_32(1099097545);
+emit_32(1126948864);
+emit_32(1102807040);
+emit_32(1099290588);
+emit_32(1126948864);
+emit_32(1104855066);
+emit_32(1099551474);
+emit_32(1126948864);
+emit_32(1106903040);
+emit_32(1099163605);
+emit_32(1126948864);
+emit_32(1108123661);
+emit_32(1099190711);
+emit_32(1126948864);
+emit_32(1109147648);
+emit_32(1099720557);
+emit_32(1126948864);
+emit_32(1110171661);
+emit_32(1099796002);
+emit_32(1126948864);
+emit_32(1111195648);
+emit_32(1099824156);
+emit_32(1126948864);
+emit_32(1112219661);
+emit_32(1099671431);
+emit_32(1126948864);
+emit_32(1113243648);
+emit_32(1099204133);
+emit_32(1126948864);
+emit_32(1114267661);
+emit_32(1098311323);
+emit_32(1126948864);
+emit_32(1115291648);
+emit_32(1097819226);
+emit_32(1126948864);
+emit_32(1116000263);
+emit_32(1098122894);
+emit_32(1126948864);
+emit_32(1116512256);
+emit_32(1099069548);
+emit_32(1126948864);
+emit_32(1117024263);
+emit_32(1099712640);
+emit_32(1126948864);
+emit_32(1117536256);
+emit_32(1100258161);
+emit_32(1126948864);
+emit_32(1118048263);
+emit_32(1100567858);
+emit_32(1126948864);
+emit_32(1118560256);
+emit_32(1100912735);
+emit_32(1126948864);
+emit_32(1119072263);
+emit_32(1101335259);
+emit_32(1126948864);
+emit_32(1119584256);
+emit_32(1101300236);
+emit_32(1126948864);
+emit_32(1120096263);
+emit_32(1101307209);
+emit_32(1126948864);
+emit_32(1120608322);
+emit_32(1101813252);
+emit_32(1126948864);
+emit_32(1121120289);
+emit_32(1102347239);
+emit_32(1126948864);
+emit_32(1121632256);
+emit_32(1102583851);
+emit_32(1126948864);
+emit_32(1122144223);
+emit_32(1102372458);
+emit_32(1126948864);
+emit_32(1122656322);
+emit_32(1102499126);
+emit_32(1126948864);
+emit_32(1123168289);
+emit_32(1102697097);
+emit_32(1126948864);
+emit_32(1123680256);
+emit_32(1103294890);
+emit_32(1126948864);
+emit_32(1124132848);
+emit_32(1103928177);
+emit_32(1126948864);
+emit_32(1124388897);
+emit_32(1105053195);
+emit_32(1126948864);
+emit_32(1124644880);
+emit_32(1107678488);
+emit_32(1126948864);
+emit_32(1124900864);
+emit_32(1107666613);
+emit_32(1126948864);
+emit_32(1125156848);
+emit_32(1108068663);
+emit_32(1126948864);
+emit_32(1125412897);
+emit_32(1107030075);
+emit_32(1126948864);
+emit_32(1125668880);
+emit_32(1109044940);
+emit_32(1126948864);
+emit_32(1125924864);
+emit_32(1109464528);
+emit_32(1126948864);
+emit_32(1126180848);
+emit_32(1109502329);
+emit_32(1126948864);
+emit_32(1126436897);
+emit_32(1109661634);
+emit_32(1126948864);
+emit_32(1126692880);
+emit_32(1109335998);
+emit_32(1126948864);
+emit_32(1126948864);
+emit_32(1108826548);
+emit_32(1126948864);
+emit_32(1127204848);
+emit_32(1108883774);
+emit_32(1126948864);
+emit_32(1127460897);
+emit_32(1107300110);
+emit_32(1126948864);
+emit_32(1127716880);
+emit_32(1108142929);
+emit_32(1126948864);
+emit_32(1127972864);
+emit_32(1108009838);
+emit_32(1126948864);
+emit_32(1128228848);
+emit_32(1107061165);
+emit_32(1126948864);
+emit_32(1128484897);
+emit_32(1105722553);
+emit_32(1126948864);
+emit_32(1128740880);
+emit_32(1106183035);
+emit_32(1126948864);
+emit_32(1128996864);
+emit_32(1107464133);
+emit_32(1126948864);
+emit_32(1129252848);
+emit_32(1106950907);
+emit_32(1126948864);
+emit_32(1129508897);
+emit_32(1105415740);
+emit_32(1126948864);
+emit_32(1129764880);
+emit_32(1102572893);
+emit_32(1126948864);
+emit_32(1130020864);
+emit_32(1101736444);
+emit_32(1126948864);
+emit_32(1130276848);
+emit_32(1103790604);
+emit_32(1126948864);
+emit_32(1130532897);
+emit_32(1103702943);
+emit_32(1126948864);
+emit_32(1130788880);
+emit_32(1102824918);
+emit_32(1126948864);
+emit_32(1131044864);
+emit_32(1102312374);
+emit_32(1126948864);
+emit_32(1131300848);
+emit_32(1098839595);
+emit_32(1126948864);
+emit_32(1131556897);
+emit_32(1098161272);
+emit_32(1126948864);
+emit_32(1131812880);
+emit_32(1097697906);
+emit_32(1126948864);
+emit_32(1132068864);
+emit_32(1097362991);
+emit_32(1126948864);
+emit_32(1081737258);
+emit_32(1099508220);
+emit_32(1126692880);
+emit_32(1090125845);
+emit_32(1099273653);
+emit_32(1126692880);
+emit_32(1094418484);
+emit_32(1099205496);
+emit_32(1126692880);
+emit_32(1098514432);
+emit_32(1098995047);
+emit_32(1126692880);
+emit_32(1100759066);
+emit_32(1099092355);
+emit_32(1126692880);
+emit_32(1102807040);
+emit_32(1099190187);
+emit_32(1126692880);
+emit_32(1104855066);
+emit_32(1099331011);
+emit_32(1126692880);
+emit_32(1106903040);
+emit_32(1099536112);
+emit_32(1126692880);
+emit_32(1108123661);
+emit_32(1099882824);
+emit_32(1126692880);
+emit_32(1109147648);
+emit_32(1100241332);
+emit_32(1126692880);
+emit_32(1110171661);
+emit_32(1100308441);
+emit_32(1126692880);
+emit_32(1111195648);
+emit_32(1099924085);
+emit_32(1126692880);
+emit_32(1112219661);
+emit_32(1099715209);
+emit_32(1126692880);
+emit_32(1113243648);
+emit_32(1099688575);
+emit_32(1126692880);
+emit_32(1114267661);
+emit_32(1099415106);
+emit_32(1126692880);
+emit_32(1115291648);
+emit_32(1099022572);
+emit_32(1126692880);
+emit_32(1116000263);
+emit_32(1098456655);
+emit_32(1126692880);
+emit_32(1116512256);
+emit_32(1099432827);
+emit_32(1126692880);
+emit_32(1117024263);
+emit_32(1099963931);
+emit_32(1126692880);
+emit_32(1117536256);
+emit_32(1100471914);
+emit_32(1126692880);
+emit_32(1118048263);
+emit_32(1100910271);
+emit_32(1126692880);
+emit_32(1118560256);
+emit_32(1100950746);
+emit_32(1126692880);
+emit_32(1119072263);
+emit_32(1101340921);
+emit_32(1126692880);
+emit_32(1119584256);
+emit_32(1101516925);
+emit_32(1126692880);
+emit_32(1120096263);
+emit_32(1101607626);
+emit_32(1126692880);
+emit_32(1120608322);
+emit_32(1101700478);
+emit_32(1126692880);
+emit_32(1121120289);
+emit_32(1102113826);
+emit_32(1126692880);
+emit_32(1121632256);
+emit_32(1102162428);
+emit_32(1126692880);
+emit_32(1122144223);
+emit_32(1102697097);
+emit_32(1126692880);
+emit_32(1122656322);
+emit_32(1103401950);
+emit_32(1126692880);
+emit_32(1123168289);
+emit_32(1103831813);
+emit_32(1126692880);
+emit_32(1123680256);
+emit_32(1104291194);
+emit_32(1126692880);
+emit_32(1124132848);
+emit_32(1105271456);
+emit_32(1126692880);
+emit_32(1124388897);
+emit_32(1106220574);
+emit_32(1126692880);
+emit_32(1124644880);
+emit_32(1108019957);
+emit_32(1126692880);
+emit_32(1124900864);
+emit_32(1108180861);
+emit_32(1126692880);
+emit_32(1125156848);
+emit_32(1108381558);
+emit_32(1126692880);
+emit_32(1125412897);
+emit_32(1108884508);
+emit_32(1126692880);
+emit_32(1125668880);
+emit_32(1109395820);
+emit_32(1126692880);
+emit_32(1125924864);
+emit_32(1109634712);
+emit_32(1126692880);
+emit_32(1126180848);
+emit_32(1109777816);
+emit_32(1126692880);
+emit_32(1126436897);
+emit_32(1109887130);
+emit_32(1126692880);
+emit_32(1126692880);
+emit_32(1109468460);
+emit_32(1126692880);
+emit_32(1126948864);
+emit_32(1108976887);
+emit_32(1126692880);
+emit_32(1127204848);
+emit_32(1108737288);
+emit_32(1126692880);
+emit_32(1127460897);
+emit_32(1107322339);
+emit_32(1126692880);
+emit_32(1127716880);
+emit_32(1108472024);
+emit_32(1126692880);
+emit_32(1127972864);
+emit_32(1107965326);
+emit_32(1126692880);
+emit_32(1128228848);
+emit_32(1107928049);
+emit_32(1126692880);
+emit_32(1128484897);
+emit_32(1106025906);
+emit_32(1126692880);
+emit_32(1128740880);
+emit_32(1107754012);
+emit_32(1126692880);
+emit_32(1128996864);
+emit_32(1107563407);
+emit_32(1126692880);
+emit_32(1129252848);
+emit_32(1107120672);
+emit_32(1126692880);
+emit_32(1129508897);
+emit_32(1103449188);
+emit_32(1126692880);
+emit_32(1129764880);
+emit_32(1102395841);
+emit_32(1126692880);
+emit_32(1130020864);
+emit_32(1101999899);
+emit_32(1126692880);
+emit_32(1130276848);
+emit_32(1104243012);
+emit_32(1126692880);
+emit_32(1130532897);
+emit_32(1103501407);
+emit_32(1126692880);
+emit_32(1130788880);
+emit_32(1102408424);
+emit_32(1126692880);
+emit_32(1131044864);
+emit_32(1099757099);
+emit_32(1126692880);
+emit_32(1131300848);
+emit_32(1098990538);
+emit_32(1126692880);
+emit_32(1131556897);
+emit_32(1097576795);
+emit_32(1126692880);
+emit_32(1131812880);
+emit_32(1097118777);
+emit_32(1126692880);
+emit_32(1132068864);
+emit_32(1095884499);
+emit_32(1126692880);
+emit_32(1081737300);
+emit_32(1099149921);
+emit_32(1126436897);
+emit_32(1090125845);
+emit_32(1099736547);
+emit_32(1126436897);
+emit_32(1094418484);
+emit_32(1099814457);
+emit_32(1126436897);
+emit_32(1098514432);
+emit_32(1099497996);
+emit_32(1126436897);
+emit_32(1100759066);
+emit_32(1099614598);
+emit_32(1126436897);
+emit_32(1102807040);
+emit_32(1099949041);
+emit_32(1126436897);
+emit_32(1104855066);
+emit_32(1100303460);
+emit_32(1126436897);
+emit_32(1106903040);
+emit_32(1100372194);
+emit_32(1126436897);
+emit_32(1108123661);
+emit_32(1100388499);
+emit_32(1126436897);
+emit_32(1109147648);
+emit_32(1100457129);
+emit_32(1126436897);
+emit_32(1110171661);
+emit_32(1100645768);
+emit_32(1126436897);
+emit_32(1111195648);
+emit_32(1100270587);
+emit_32(1126436897);
+emit_32(1112219661);
+emit_32(1099961152);
+emit_32(1126436897);
+emit_32(1113243648);
+emit_32(1099730885);
+emit_32(1126436897);
+emit_32(1114267661);
+emit_32(1099738435);
+emit_32(1126436897);
+emit_32(1115291648);
+emit_32(1099626866);
+emit_32(1126436897);
+emit_32(1116000263);
+emit_32(1099808847);
+emit_32(1126436897);
+emit_32(1116512256);
+emit_32(1099946000);
+emit_32(1126436897);
+emit_32(1117024263);
+emit_32(1100112776);
+emit_32(1126436897);
+emit_32(1117536256);
+emit_32(1100457758);
+emit_32(1126436897);
+emit_32(1118048263);
+emit_32(1101221960);
+emit_32(1126436897);
+emit_32(1118560256);
+emit_32(1101270404);
+emit_32(1126436897);
+emit_32(1119072263);
+emit_32(1101406090);
+emit_32(1126436897);
+emit_32(1119584256);
+emit_32(1101500619);
+emit_32(1126436897);
+emit_32(1120096263);
+emit_32(1101585606);
+emit_32(1126436897);
+emit_32(1120608322);
+emit_32(1101398278);
+emit_32(1126436897);
+emit_32(1121120289);
+emit_32(1101771047);
+emit_32(1126436897);
+emit_32(1121632256);
+emit_32(1102476005);
+emit_32(1126436897);
+emit_32(1122144223);
+emit_32(1103241150);
+emit_32(1126436897);
+emit_32(1122656322);
+emit_32(1103529247);
+emit_32(1126436897);
+emit_32(1123168289);
+emit_32(1104315207);
+emit_32(1126436897);
+emit_32(1123680256);
+emit_32(1105405149);
+emit_32(1126436897);
+emit_32(1124132848);
+emit_32(1106277302);
+emit_32(1126436897);
+emit_32(1124388897);
+emit_32(1107026667);
+emit_32(1126436897);
+emit_32(1124644880);
+emit_32(1107115324);
+emit_32(1126436897);
+emit_32(1124900864);
+emit_32(1108622626);
+emit_32(1126436897);
+emit_32(1125156848);
+emit_32(1108806546);
+emit_32(1126436897);
+emit_32(1125412897);
+emit_32(1109128328);
+emit_32(1126436897);
+emit_32(1125668880);
+emit_32(1109170114);
+emit_32(1126436897);
+emit_32(1125924864);
+emit_32(1108511739);
+emit_32(1126436897);
+emit_32(1126180848);
+emit_32(1109723867);
+emit_32(1126436897);
+emit_32(1126436897);
+emit_32(1109979719);
+emit_32(1126436897);
+emit_32(1126692880);
+emit_32(1109649182);
+emit_32(1126436897);
+emit_32(1126948864);
+emit_32(1107794749);
+emit_32(1126436897);
+emit_32(1127204848);
+emit_32(1107867677);
+emit_32(1126436897);
+emit_32(1127460897);
+emit_32(1107576278);
+emit_32(1126436897);
+emit_32(1127716880);
+emit_32(1108142168);
+emit_32(1126436897);
+emit_32(1127972864);
+emit_32(1108112284);
+emit_32(1126436897);
+emit_32(1128228848);
+emit_32(1108004202);
+emit_32(1126436897);
+emit_32(1128484897);
+emit_32(1106311696);
+emit_32(1126436897);
+emit_32(1128740880);
+emit_32(1107993349);
+emit_32(1126436897);
+emit_32(1128996864);
+emit_32(1107720798);
+emit_32(1126436897);
+emit_32(1129252848);
+emit_32(1106276306);
+emit_32(1126436897);
+emit_32(1129508897);
+emit_32(1103536849);
+emit_32(1126436897);
+emit_32(1129764880);
+emit_32(1102593288);
+emit_32(1126436897);
+emit_32(1130020864);
+emit_32(1104446017);
+emit_32(1126436897);
+emit_32(1130276848);
+emit_32(1104044255);
+emit_32(1126436897);
+emit_32(1130532897);
+emit_32(1102976752);
+emit_32(1126436897);
+emit_32(1130788880);
+emit_32(1102244531);
+emit_32(1126436897);
+emit_32(1131044864);
+emit_32(1099010199);
+emit_32(1126436897);
+emit_32(1131300848);
+emit_32(1097715417);
+emit_32(1126436897);
+emit_32(1131556897);
+emit_32(1096758067);
+emit_32(1126436897);
+emit_32(1131812880);
+emit_32(1097016856);
+emit_32(1126436897);
+emit_32(1132068864);
+emit_32(1096071355);
+emit_32(1126436897);
+emit_32(1081737300);
+emit_32(1099236901);
+emit_32(1126180848);
+emit_32(1090125845);
+emit_32(1099655702);
+emit_32(1126180848);
+emit_32(1094418484);
+emit_32(1099975256);
+emit_32(1126180848);
+emit_32(1098514432);
+emit_32(1100023700);
+emit_32(1126180848);
+emit_32(1100759066);
+emit_32(1100282436);
+emit_32(1126180848);
+emit_32(1102807040);
+emit_32(1100103077);
+emit_32(1126180848);
+emit_32(1104855066);
+emit_32(1100266183);
+emit_32(1126180848);
+emit_32(1106903040);
+emit_32(1100408947);
+emit_32(1126180848);
+emit_32(1108123661);
+emit_32(1100595488);
+emit_32(1126180848);
+emit_32(1109147648);
+emit_32(1100418698);
+emit_32(1126180848);
+emit_32(1110171661);
+emit_32(1100484601);
+emit_32(1126180848);
+emit_32(1111195648);
+emit_32(1100664327);
+emit_32(1126180848);
+emit_32(1112219661);
+emit_32(1099877791);
+emit_32(1126180848);
+emit_32(1113243648);
+emit_32(1100235250);
+emit_32(1126180848);
+emit_32(1114267661);
+emit_32(1100072773);
+emit_32(1126180848);
+emit_32(1115291648);
+emit_32(1099973001);
+emit_32(1126180848);
+emit_32(1116000263);
+emit_32(1100257165);
+emit_32(1126180848);
+emit_32(1116512256);
+emit_32(1100157288);
+emit_32(1126180848);
+emit_32(1117024263);
+emit_32(1100000369);
+emit_32(1126180848);
+emit_32(1117536256);
+emit_32(1100933077);
+emit_32(1126180848);
+emit_32(1118048263);
+emit_32(1101502192);
+emit_32(1126180848);
+emit_32(1118560256);
+emit_32(1101329701);
+emit_32(1126180848);
+emit_32(1119072263);
+emit_32(1101273078);
+emit_32(1126180848);
+emit_32(1119584256);
+emit_32(1101224057);
+emit_32(1126180848);
+emit_32(1120096263);
+emit_32(1100934231);
+emit_32(1126180848);
+emit_32(1120608322);
+emit_32(1101108137);
+emit_32(1126180848);
+emit_32(1121120289);
+emit_32(1102075344);
+emit_32(1126180848);
+emit_32(1121632256);
+emit_32(1102823975);
+emit_32(1126180848);
+emit_32(1122144223);
+emit_32(1103440694);
+emit_32(1126180848);
+emit_32(1122656322);
+emit_32(1104266238);
+emit_32(1126180848);
+emit_32(1123168289);
+emit_32(1105264588);
+emit_32(1126180848);
+emit_32(1123680256);
+emit_32(1106148170);
+emit_32(1126180848);
+emit_32(1124132848);
+emit_32(1107157267);
+emit_32(1126180848);
+emit_32(1124388897);
+emit_32(1107410970);
+emit_32(1126180848);
+emit_32(1124644880);
+emit_32(1107631669);
+emit_32(1126180848);
+emit_32(1124900864);
+emit_32(1108727248);
+emit_32(1126180848);
+emit_32(1125156848);
+emit_32(1109083947);
+emit_32(1126180848);
+emit_32(1125412897);
+emit_32(1109383499);
+emit_32(1126180848);
+emit_32(1125668880);
+emit_32(1109832552);
+emit_32(1126180848);
+emit_32(1125924864);
+emit_32(1108779362);
+emit_32(1126180848);
+emit_32(1126180848);
+emit_32(1109779336);
+emit_32(1126180848);
+emit_32(1126436897);
+emit_32(1109875019);
+emit_32(1126180848);
+emit_32(1126692880);
+emit_32(1109584485);
+emit_32(1126180848);
+emit_32(1126948864);
+emit_32(1108220130);
+emit_32(1126180848);
+emit_32(1127204848);
+emit_32(1107865790);
+emit_32(1126180848);
+emit_32(1127460897);
+emit_32(1107810792);
+emit_32(1126180848);
+emit_32(1127716880);
+emit_32(1107637358);
+emit_32(1126180848);
+emit_32(1127972864);
+emit_32(1108765940);
+emit_32(1126180848);
+emit_32(1128228848);
+emit_32(1108423134);
+emit_32(1126180848);
+emit_32(1128484897);
+emit_32(1107554101);
+emit_32(1126180848);
+emit_32(1128740880);
+emit_32(1107893184);
+emit_32(1126180848);
+emit_32(1128996864);
+emit_32(1107705384);
+emit_32(1126180848);
+emit_32(1129252848);
+emit_32(1104640790);
+emit_32(1126180848);
+emit_32(1129508897);
+emit_32(1103289857);
+emit_32(1126180848);
+emit_32(1129764880);
+emit_32(1103910824);
+emit_32(1126180848);
+emit_32(1130020864);
+emit_32(1104153359);
+emit_32(1126180848);
+emit_32(1130276848);
+emit_32(1103150186);
+emit_32(1126180848);
+emit_32(1130532897);
+emit_32(1102522509);
+emit_32(1126180848);
+emit_32(1130788880);
+emit_32(1099531498);
+emit_32(1126180848);
+emit_32(1131044864);
+emit_32(1097916953);
+emit_32(1126180848);
+emit_32(1131300848);
+emit_32(1097069285);
+emit_32(1126180848);
+emit_32(1131556897);
+emit_32(1096586310);
+emit_32(1126180848);
+emit_32(1131812880);
+emit_32(1097348625);
+emit_32(1126180848);
+emit_32(1132068864);
+emit_32(1097196791);
+emit_32(1126180848);
+emit_32(1081737300);
+emit_32(1099397648);
+emit_32(1125924864);
+emit_32(1090125845);
+emit_32(1100083993);
+emit_32(1125924864);
+emit_32(1094418484);
+emit_32(1100159071);
+emit_32(1125924864);
+emit_32(1098514432);
+emit_32(1100011536);
+emit_32(1125924864);
+emit_32(1100759066);
+emit_32(1100346556);
+emit_32(1125924864);
+emit_32(1102807040);
+emit_32(1100440404);
+emit_32(1125924864);
+emit_32(1104855066);
+emit_32(1100194775);
+emit_32(1125924864);
+emit_32(1106903040);
+emit_32(1100304561);
+emit_32(1125924864);
+emit_32(1108123661);
+emit_32(1100451571);
+emit_32(1125924864);
+emit_32(1109147648);
+emit_32(1100478992);
+emit_32(1125924864);
+emit_32(1110171661);
+emit_32(1100408580);
+emit_32(1125924864);
+emit_32(1111195648);
+emit_32(1100317249);
+emit_32(1125924864);
+emit_32(1112219661);
+emit_32(1100401554);
+emit_32(1125924864);
+emit_32(1113243648);
+emit_32(1100711618);
+emit_32(1125924864);
+emit_32(1114267661);
+emit_32(1100343358);
+emit_32(1125924864);
+emit_32(1115291648);
+emit_32(1099679924);
+emit_32(1125924864);
+emit_32(1116000263);
+emit_32(1100265868);
+emit_32(1125924864);
+emit_32(1116512256);
+emit_32(1100336438);
+emit_32(1125924864);
+emit_32(1117024263);
+emit_32(1100743338);
+emit_32(1125924864);
+emit_32(1117536256);
+emit_32(1100911529);
+emit_32(1125924864);
+emit_32(1118048263);
+emit_32(1100933916);
+emit_32(1125924864);
+emit_32(1118560256);
+emit_32(1100950012);
+emit_32(1125924864);
+emit_32(1119072263);
+emit_32(1100711251);
+emit_32(1125924864);
+emit_32(1119584256);
+emit_32(1100374239);
+emit_32(1125924864);
+emit_32(1120096263);
+emit_32(1100424046);
+emit_32(1125924864);
+emit_32(1120608322);
+emit_32(1101327290);
+emit_32(1125924864);
+emit_32(1121120289);
+emit_32(1102568437);
+emit_32(1125924864);
+emit_32(1121632256);
+emit_32(1103744257);
+emit_32(1125924864);
+emit_32(1122144223);
+emit_32(1104560993);
+emit_32(1125924864);
+emit_32(1122656322);
+emit_32(1105101115);
+emit_32(1125924864);
+emit_32(1123168289);
+emit_32(1106075032);
+emit_32(1125924864);
+emit_32(1123680256);
+emit_32(1107013874);
+emit_32(1125924864);
+emit_32(1124132848);
+emit_32(1107516116);
+emit_32(1125924864);
+emit_32(1124388897);
+emit_32(1107763764);
+emit_32(1125924864);
+emit_32(1124644880);
+emit_32(1107925035);
+emit_32(1125924864);
+emit_32(1124900864);
+emit_32(1108124867);
+emit_32(1125924864);
+emit_32(1125156848);
+emit_32(1109418652);
+emit_32(1125924864);
+emit_32(1125412897);
+emit_32(1109666352);
+emit_32(1125924864);
+emit_32(1125668880);
+emit_32(1109926216);
+emit_32(1125924864);
+emit_32(1125924864);
+emit_32(1109962156);
+emit_32(1125924864);
+emit_32(1126180848);
+emit_32(1109898428);
+emit_32(1125924864);
+emit_32(1126436897);
+emit_32(1110252978);
+emit_32(1125924864);
+emit_32(1126692880);
+emit_32(1110074851);
+emit_32(1125924864);
+emit_32(1126948864);
+emit_32(1108526681);
+emit_32(1125924864);
+emit_32(1127204848);
+emit_32(1108040561);
+emit_32(1125924864);
+emit_32(1127460897);
+emit_32(1108008160);
+emit_32(1125924864);
+emit_32(1127716880);
+emit_32(1107835722);
+emit_32(1125924864);
+emit_32(1127972864);
+emit_32(1107758862);
+emit_32(1125924864);
+emit_32(1128228848);
+emit_32(1107617173);
+emit_32(1125924864);
+emit_32(1128484897);
+emit_32(1107323860);
+emit_32(1125924864);
+emit_32(1128740880);
+emit_32(1106591770);
+emit_32(1125924864);
+emit_32(1128996864);
+emit_32(1107721716);
+emit_32(1125924864);
+emit_32(1129252848);
+emit_32(1105209537);
+emit_32(1125924864);
+emit_32(1129508897);
+emit_32(1106514647);
+emit_32(1125924864);
+emit_32(1129764880);
+emit_32(1105924089);
+emit_32(1125924864);
+emit_32(1130020864);
+emit_32(1104857583);
+emit_32(1125924864);
+emit_32(1130276848);
+emit_32(1104080850);
+emit_32(1125924864);
+emit_32(1130532897);
+emit_32(1103165338);
+emit_32(1125924864);
+emit_32(1130788880);
+emit_32(1099955123);
+emit_32(1125924864);
+emit_32(1131044864);
+emit_32(1098976015);
+emit_32(1125924864);
+emit_32(1131300848);
+emit_32(1097678822);
+emit_32(1125924864);
+emit_32(1131556897);
+emit_32(1095863632);
+emit_32(1125924864);
+emit_32(1131812880);
+emit_32(1096143811);
+emit_32(1125924864);
+emit_32(1132068864);
+emit_32(1096399978);
+emit_32(1125924864);
+emit_32(1081737300);
+emit_32(1099796421);
+emit_32(1125668880);
+emit_32(1090125845);
+emit_32(1100536244);
+emit_32(1125668880);
+emit_32(1094418484);
+emit_32(1100815951);
+emit_32(1125668880);
+emit_32(1098514432);
+emit_32(1100932763);
+emit_32(1125668880);
+emit_32(1100759066);
+emit_32(1100556691);
+emit_32(1125668880);
+emit_32(1102807040);
+emit_32(1100739091);
+emit_32(1125668880);
+emit_32(1104855066);
+emit_32(1100685404);
+emit_32(1125668880);
+emit_32(1106903040);
+emit_32(1100296592);
+emit_32(1125668880);
+emit_32(1108123661);
+emit_32(1100158652);
+emit_32(1125668880);
+emit_32(1109147648);
+emit_32(1100060033);
+emit_32(1125668880);
+emit_32(1110171661);
+emit_32(1100191996);
+emit_32(1125668880);
+emit_32(1111195648);
+emit_32(1099855718);
+emit_32(1125668880);
+emit_32(1112219661);
+emit_32(1100233887);
+emit_32(1125668880);
+emit_32(1113243648);
+emit_32(1100904976);
+emit_32(1125668880);
+emit_32(1114267661);
+emit_32(1100654785);
+emit_32(1125668880);
+emit_32(1115291648);
+emit_32(1100035234);
+emit_32(1125668880);
+emit_32(1116000263);
+emit_32(1099851262);
+emit_32(1125668880);
+emit_32(1116512256);
+emit_32(1099917741);
+emit_32(1125668880);
+emit_32(1117024263);
+emit_32(1100254544);
+emit_32(1125668880);
+emit_32(1117536256);
+emit_32(1100744910);
+emit_32(1125668880);
+emit_32(1118048263);
+emit_32(1101045065);
+emit_32(1125668880);
+emit_32(1118560256);
+emit_32(1100752460);
+emit_32(1125668880);
+emit_32(1119072263);
+emit_32(1101140695);
+emit_32(1125668880);
+emit_32(1119584256);
+emit_32(1100593706);
+emit_32(1125668880);
+emit_32(1120096263);
+emit_32(1101066351);
+emit_32(1125668880);
+emit_32(1120608322);
+emit_32(1102014421);
+emit_32(1125668880);
+emit_32(1121120289);
+emit_32(1103061005);
+emit_32(1125668880);
+emit_32(1121632256);
+emit_32(1104070627);
+emit_32(1125668880);
+emit_32(1122144223);
+emit_32(1105156270);
+emit_32(1125668880);
+emit_32(1122656322);
+emit_32(1105870088);
+emit_32(1125668880);
+emit_32(1123168289);
+emit_32(1106367690);
+emit_32(1125668880);
+emit_32(1123680256);
+emit_32(1107164922);
+emit_32(1125668880);
+emit_32(1124132848);
+emit_32(1107602545);
+emit_32(1125668880);
+emit_32(1124388897);
+emit_32(1107941812);
+emit_32(1125668880);
+emit_32(1124644880);
+emit_32(1108344334);
+emit_32(1125668880);
+emit_32(1124900864);
+emit_32(1108480308);
+emit_32(1125668880);
+emit_32(1125156848);
+emit_32(1108327137);
+emit_32(1125668880);
+emit_32(1125412897);
+emit_32(1109716107);
+emit_32(1125668880);
+emit_32(1125668880);
+emit_32(1110107934);
+emit_32(1125668880);
+emit_32(1125924864);
+emit_32(1110315159);
+emit_32(1125668880);
+emit_32(1126180848);
+emit_32(1110535569);
+emit_32(1125668880);
+emit_32(1126436897);
+emit_32(1110503509);
+emit_32(1125668880);
+emit_32(1126692880);
+emit_32(1109463636);
+emit_32(1125668880);
+emit_32(1126948864);
+emit_32(1108400118);
+emit_32(1125668880);
+emit_32(1127204848);
+emit_32(1108447225);
+emit_32(1125668880);
+emit_32(1127460897);
+emit_32(1108142195);
+emit_32(1125668880);
+emit_32(1127716880);
+emit_32(1108004202);
+emit_32(1125668880);
+emit_32(1127972864);
+emit_32(1108024046);
+emit_32(1125668880);
+emit_32(1128228848);
+emit_32(1107844452);
+emit_32(1125668880);
+emit_32(1128484897);
+emit_32(1107348947);
+emit_32(1125668880);
+emit_32(1128740880);
+emit_32(1106593763);
+emit_32(1125668880);
+emit_32(1128996864);
+emit_32(1105593683);
+emit_32(1125668880);
+emit_32(1129252848);
+emit_32(1107573788);
+emit_32(1125668880);
+emit_32(1129508897);
+emit_32(1107189039);
+emit_32(1125668880);
+emit_32(1129764880);
+emit_32(1106191581);
+emit_32(1125668880);
+emit_32(1130020864);
+emit_32(1104988812);
+emit_32(1125668880);
+emit_32(1130276848);
+emit_32(1104221150);
+emit_32(1125668880);
+emit_32(1130532897);
+emit_32(1100814903);
+emit_32(1125668880);
+emit_32(1130788880);
+emit_32(1100302044);
+emit_32(1125668880);
+emit_32(1131044864);
+emit_32(1099639816);
+emit_32(1125668880);
+emit_32(1131300848);
+emit_32(1098467980);
+emit_32(1125668880);
+emit_32(1131556897);
+emit_32(1096188795);
+emit_32(1125668880);
+emit_32(1131812880);
+emit_32(1095551051);
+emit_32(1125668880);
+emit_32(1132068864);
+emit_32(1095331689);
+emit_32(1125668880);
+emit_32(1081737258);
+emit_32(1100171654);
+emit_32(1125412897);
+emit_32(1090125845);
+emit_32(1100384200);
+emit_32(1125412897);
+emit_32(1094418484);
+emit_32(1101392563);
+emit_32(1125412897);
+emit_32(1098514432);
+emit_32(1101939763);
+emit_32(1125412897);
+emit_32(1100759066);
+emit_32(1101350096);
+emit_32(1125412897);
+emit_32(1102807040);
+emit_32(1100931242);
+emit_32(1125412897);
+emit_32(1104855066);
+emit_32(1101054660);
+emit_32(1125412897);
+emit_32(1106903040);
+emit_32(1100365745);
+emit_32(1125412897);
+emit_32(1108123661);
+emit_32(1100020711);
+emit_32(1125412897);
+emit_32(1109147648);
+emit_32(1099837211);
+emit_32(1125412897);
+emit_32(1110171661);
+emit_32(1099961205);
+emit_32(1125412897);
+emit_32(1111195648);
+emit_32(1099795792);
+emit_32(1125412897);
+emit_32(1112219661);
+emit_32(1099519282);
+emit_32(1125412897);
+emit_32(1113243648);
+emit_32(1100138886);
+emit_32(1125412897);
+emit_32(1114267661);
+emit_32(1100250454);
+emit_32(1125412897);
+emit_32(1115291648);
+emit_32(1100025640);
+emit_32(1125412897);
+emit_32(1116000263);
+emit_32(1099647890);
+emit_32(1125412897);
+emit_32(1116512256);
+emit_32(1099582564);
+emit_32(1125412897);
+emit_32(1117024263);
+emit_32(1099791335);
+emit_32(1125412897);
+emit_32(1117536256);
+emit_32(1100303198);
+emit_32(1125412897);
+emit_32(1118048263);
+emit_32(1100818520);
+emit_32(1125412897);
+emit_32(1118560256);
+emit_32(1100729182);
+emit_32(1125412897);
+emit_32(1119072263);
+emit_32(1101156162);
+emit_32(1125412897);
+emit_32(1119584256);
+emit_32(1101134247);
+emit_32(1125412897);
+emit_32(1120096263);
+emit_32(1101623565);
+emit_32(1125412897);
+emit_32(1120608322);
+emit_32(1102682626);
+emit_32(1125412897);
+emit_32(1121120289);
+emit_32(1103567205);
+emit_32(1125412897);
+emit_32(1121632256);
+emit_32(1104435374);
+emit_32(1125412897);
+emit_32(1122144223);
+emit_32(1105541464);
+emit_32(1125412897);
+emit_32(1122656322);
+emit_32(1106370730);
+emit_32(1125412897);
+emit_32(1123168289);
+emit_32(1107136296);
+emit_32(1125412897);
+emit_32(1123680256);
+emit_32(1107622678);
+emit_32(1125412897);
+emit_32(1124132848);
+emit_32(1107924458);
+emit_32(1125412897);
+emit_32(1124388897);
+emit_32(1108157006);
+emit_32(1125412897);
+emit_32(1124644880);
+emit_32(1108530928);
+emit_32(1125412897);
+emit_32(1124900864);
+emit_32(1108656600);
+emit_32(1125412897);
+emit_32(1125156848);
+emit_32(1108481461);
+emit_32(1125412897);
+emit_32(1125412897);
+emit_32(1108539159);
+emit_32(1125412897);
+emit_32(1125668880);
+emit_32(1110441066);
+emit_32(1125412897);
+emit_32(1125924864);
+emit_32(1110692148);
+emit_32(1125412897);
+emit_32(1126180848);
+emit_32(1110653744);
+emit_32(1125412897);
+emit_32(1126436897);
+emit_32(1110727721);
+emit_32(1125412897);
+emit_32(1126692880);
+emit_32(1110202673);
+emit_32(1125412897);
+emit_32(1126948864);
+emit_32(1109971881);
+emit_32(1125412897);
+emit_32(1127204848);
+emit_32(1109534940);
+emit_32(1125412897);
+emit_32(1127460897);
+emit_32(1108342263);
+emit_32(1125412897);
+emit_32(1127716880);
+emit_32(1107927840);
+emit_32(1125412897);
+emit_32(1127972864);
+emit_32(1108111183);
+emit_32(1125412897);
+emit_32(1128228848);
+emit_32(1107908939);
+emit_32(1125412897);
+emit_32(1128484897);
+emit_32(1108258954);
+emit_32(1125412897);
+emit_32(1128740880);
+emit_32(1108072464);
+emit_32(1125412897);
+emit_32(1128996864);
+emit_32(1107928180);
+emit_32(1125412897);
+emit_32(1129252848);
+emit_32(1107296990);
+emit_32(1125412897);
+emit_32(1129508897);
+emit_32(1106977751);
+emit_32(1125412897);
+emit_32(1129764880);
+emit_32(1105908938);
+emit_32(1125412897);
+emit_32(1130020864);
+emit_32(1105000556);
+emit_32(1125412897);
+emit_32(1130276848);
+emit_32(1101880046);
+emit_32(1125412897);
+emit_32(1130532897);
+emit_32(1101191447);
+emit_32(1125412897);
+emit_32(1130788880);
+emit_32(1100805675);
+emit_32(1125412897);
+emit_32(1131044864);
+emit_32(1099759459);
+emit_32(1125412897);
+emit_32(1131300848);
+emit_32(1099177761);
+emit_32(1125412897);
+emit_32(1131556897);
+emit_32(1097755263);
+emit_32(1125412897);
+emit_32(1131812880);
+emit_32(1095551576);
+emit_32(1125412897);
+emit_32(1132068864);
+emit_32(1095000968);
+emit_32(1125412897);
+emit_32(1081737258);
+emit_32(1099891107);
+emit_32(1125156848);
+emit_32(1090125845);
+emit_32(1100647078);
+emit_32(1125156848);
+emit_32(1094418484);
+emit_32(1101487879);
+emit_32(1125156848);
+emit_32(1098514432);
+emit_32(1101979399);
+emit_32(1125156848);
+emit_32(1100759066);
+emit_32(1101681341);
+emit_32(1125156848);
+emit_32(1102807040);
+emit_32(1100993475);
+emit_32(1125156848);
+emit_32(1104855066);
+emit_32(1100813907);
+emit_32(1125156848);
+emit_32(1106903040);
+emit_32(1100711094);
+emit_32(1125156848);
+emit_32(1108123661);
+emit_32(1100302044);
+emit_32(1125156848);
+emit_32(1109147648);
+emit_32(1099535063);
+emit_32(1125156848);
+emit_32(1110171661);
+emit_32(1099325506);
+emit_32(1125156848);
+emit_32(1111195648);
+emit_32(1099122554);
+emit_32(1125156848);
+emit_32(1112219661);
+emit_32(1099190764);
+emit_32(1125156848);
+emit_32(1113243648);
+emit_32(1099332846);
+emit_32(1125156848);
+emit_32(1114267661);
+emit_32(1099594465);
+emit_32(1125156848);
+emit_32(1115291648);
+emit_32(1099712850);
+emit_32(1125156848);
+emit_32(1116000263);
+emit_32(1099353031);
+emit_32(1125156848);
+emit_32(1116512256);
+emit_32(1099544553);
+emit_32(1125156848);
+emit_32(1117024263);
+emit_32(1099237163);
+emit_32(1125156848);
+emit_32(1117536256);
+emit_32(1099846700);
+emit_32(1125156848);
+emit_32(1118048263);
+emit_32(1100273628);
+emit_32(1125156848);
+emit_32(1118560256);
+emit_32(1100368839);
+emit_32(1125156848);
+emit_32(1119072263);
+emit_32(1101256668);
+emit_32(1125156848);
+emit_32(1119584256);
+emit_32(1101557609);
+emit_32(1125156848);
+emit_32(1120096263);
+emit_32(1101502192);
+emit_32(1125156848);
+emit_32(1120608322);
+emit_32(1102635231);
+emit_32(1125156848);
+emit_32(1121120289);
+emit_32(1103741374);
+emit_32(1125156848);
+emit_32(1121632256);
+emit_32(1104695211);
+emit_32(1125156848);
+emit_32(1122144223);
+emit_32(1105984016);
+emit_32(1125156848);
+emit_32(1122656322);
+emit_32(1106774537);
+emit_32(1125156848);
+emit_32(1123168289);
+emit_32(1107580944);
+emit_32(1125156848);
+emit_32(1123680256);
+emit_32(1107993847);
+emit_32(1125156848);
+emit_32(1124132848);
+emit_32(1108308813);
+emit_32(1125156848);
+emit_32(1124388897);
+emit_32(1108572163);
+emit_32(1125156848);
+emit_32(1124644880);
+emit_32(1108751548);
+emit_32(1125156848);
+emit_32(1124900864);
+emit_32(1108775613);
+emit_32(1125156848);
+emit_32(1125156848);
+emit_32(1108840887);
+emit_32(1125156848);
+emit_32(1125412897);
+emit_32(1108640452);
+emit_32(1125156848);
+emit_32(1125668880);
+emit_32(1109400932);
+emit_32(1125156848);
+emit_32(1125924864);
+emit_32(1110700537);
+emit_32(1125156848);
+emit_32(1126180848);
+emit_32(1110726279);
+emit_32(1125156848);
+emit_32(1126436897);
+emit_32(1110647059);
+emit_32(1125156848);
+emit_32(1126692880);
+emit_32(1110057628);
+emit_32(1125156848);
+emit_32(1126948864);
+emit_32(1109862960);
+emit_32(1125156848);
+emit_32(1127204848);
+emit_32(1109806599);
+emit_32(1125156848);
+emit_32(1127460897);
+emit_32(1109740539);
+emit_32(1125156848);
+emit_32(1127716880);
+emit_32(1109309417);
+emit_32(1125156848);
+emit_32(1127972864);
+emit_32(1109254577);
+emit_32(1125156848);
+emit_32(1128228848);
+emit_32(1109010704);
+emit_32(1125156848);
+emit_32(1128484897);
+emit_32(1108707980);
+emit_32(1125156848);
+emit_32(1128740880);
+emit_32(1108196590);
+emit_32(1125156848);
+emit_32(1128996864);
+emit_32(1107884428);
+emit_32(1125156848);
+emit_32(1129252848);
+emit_32(1107202828);
+emit_32(1125156848);
+emit_32(1129508897);
+emit_32(1106564402);
+emit_32(1125156848);
+emit_32(1129764880);
+emit_32(1104622440);
+emit_32(1125156848);
+emit_32(1130020864);
+emit_32(1102215591);
+emit_32(1125156848);
+emit_32(1130276848);
+emit_32(1101762186);
+emit_32(1125156848);
+emit_32(1130532897);
+emit_32(1101353085);
+emit_32(1125156848);
+emit_32(1130788880);
+emit_32(1101174984);
+emit_32(1125156848);
+emit_32(1131044864);
+emit_32(1099976252);
+emit_32(1125156848);
+emit_32(1131300848);
+emit_32(1098682624);
+emit_32(1125156848);
+emit_32(1131556897);
+emit_32(1097157994);
+emit_32(1125156848);
+emit_32(1131812880);
+emit_32(1095208586);
+emit_32(1125156848);
+emit_32(1132068864);
+emit_32(1095289117);
+emit_32(1125156848);
+emit_32(1081737258);
+emit_32(1100260206);
+emit_32(1124900864);
+emit_32(1090125845);
+emit_32(1100861722);
+emit_32(1124900864);
+emit_32(1094418484);
+emit_32(1101453905);
+emit_32(1124900864);
+emit_32(1098514432);
+emit_32(1101891581);
+emit_32(1124900864);
+emit_32(1100759066);
+emit_32(1101491759);
+emit_32(1124900864);
+emit_32(1102807040);
+emit_32(1101032640);
+emit_32(1124900864);
+emit_32(1104855066);
+emit_32(1100567282);
+emit_32(1124900864);
+emit_32(1106903040);
+emit_32(1100372876);
+emit_32(1124900864);
+emit_32(1108123661);
+emit_32(1100112672);
+emit_32(1124900864);
+emit_32(1109147648);
+emit_32(1099604689);
+emit_32(1124900864);
+emit_32(1110171661);
+emit_32(1099198995);
+emit_32(1124900864);
+emit_32(1111195648);
+emit_32(1098995676);
+emit_32(1124900864);
+emit_32(1112219661);
+emit_32(1098921384);
+emit_32(1124900864);
+emit_32(1113243648);
+emit_32(1098994627);
+emit_32(1124900864);
+emit_32(1114267661);
+emit_32(1099148296);
+emit_32(1124900864);
+emit_32(1115291648);
+emit_32(1099448032);
+emit_32(1124900864);
+emit_32(1116000263);
+emit_32(1099762395);
+emit_32(1124900864);
+emit_32(1116512256);
+emit_32(1099304849);
+emit_32(1124900864);
+emit_32(1117024263);
+emit_32(1099411698);
+emit_32(1124900864);
+emit_32(1117536256);
+emit_32(1099612239);
+emit_32(1124900864);
+emit_32(1118048263);
+emit_32(1099837840);
+emit_32(1124900864);
+emit_32(1118560256);
+emit_32(1100521092);
+emit_32(1124900864);
+emit_32(1119072263);
+emit_32(1101042758);
+emit_32(1124900864);
+emit_32(1119584256);
+emit_32(1101829715);
+emit_32(1124900864);
+emit_32(1120096263);
+emit_32(1101787195);
+emit_32(1124900864);
+emit_32(1120608322);
+emit_32(1103231661);
+emit_32(1124900864);
+emit_32(1121120289);
+emit_32(1104133017);
+emit_32(1124900864);
+emit_32(1121632256);
+emit_32(1105136347);
+emit_32(1124900864);
+emit_32(1122144223);
+emit_32(1106058779);
+emit_32(1124900864);
+emit_32(1122656322);
+emit_32(1107306060);
+emit_32(1124900864);
+emit_32(1123168289);
+emit_32(1107824214);
+emit_32(1124900864);
+emit_32(1123680256);
+emit_32(1108124343);
+emit_32(1124900864);
+emit_32(1124132848);
+emit_32(1108411050);
+emit_32(1124900864);
+emit_32(1124388897);
+emit_32(1108748167);
+emit_32(1124900864);
+emit_32(1124644880);
+emit_32(1108912295);
+emit_32(1124900864);
+emit_32(1124900864);
+emit_32(1108843273);
+emit_32(1124900864);
+emit_32(1125156848);
+emit_32(1109145892);
+emit_32(1124900864);
+emit_32(1125412897);
+emit_32(1108908258);
+emit_32(1124900864);
+emit_32(1125668880);
+emit_32(1109287685);
+emit_32(1124900864);
+emit_32(1125924864);
+emit_32(1109482773);
+emit_32(1124900864);
+emit_32(1126180848);
+emit_32(1109256516);
+emit_32(1124900864);
+emit_32(1126436897);
+emit_32(1110387222);
+emit_32(1124900864);
+emit_32(1126692880);
+emit_32(1110113439);
+emit_32(1124900864);
+emit_32(1126948864);
+emit_32(1109770738);
+emit_32(1124900864);
+emit_32(1127204848);
+emit_32(1109713748);
+emit_32(1124900864);
+emit_32(1127460897);
+emit_32(1109642471);
+emit_32(1124900864);
+emit_32(1127716880);
+emit_32(1109465262);
+emit_32(1124900864);
+emit_32(1127972864);
+emit_32(1109524768);
+emit_32(1124900864);
+emit_32(1128228848);
+emit_32(1109357599);
+emit_32(1124900864);
+emit_32(1128484897);
+emit_32(1108841438);
+emit_32(1124900864);
+emit_32(1128740880);
+emit_32(1108264013);
+emit_32(1124900864);
+emit_32(1128996864);
+emit_32(1107582543);
+emit_32(1124900864);
+emit_32(1129252848);
+emit_32(1106640739);
+emit_32(1124900864);
+emit_32(1129508897);
+emit_32(1103288074);
+emit_32(1124900864);
+emit_32(1129764880);
+emit_32(1102897585);
+emit_32(1124900864);
+emit_32(1130020864);
+emit_32(1102698145);
+emit_32(1124900864);
+emit_32(1130276848);
+emit_32(1101950353);
+emit_32(1124900864);
+emit_32(1130532897);
+emit_32(1101571713);
+emit_32(1124900864);
+emit_32(1130788880);
+emit_32(1101236693);
+emit_32(1124900864);
+emit_32(1131044864);
+emit_32(1100675547);
+emit_32(1124900864);
+emit_32(1131300848);
+emit_32(1099383387);
+emit_32(1124900864);
+emit_32(1131556897);
+emit_32(1098585840);
+emit_32(1124900864);
+emit_32(1131812880);
+emit_32(1096815319);
+emit_32(1124900864);
+emit_32(1132068864);
+emit_32(1095522740);
+emit_32(1124900864);
+emit_32(1081737258);
+emit_32(1100859258);
+emit_32(1124644880);
+emit_32(1090125845);
+emit_32(1101195903);
+emit_32(1124644880);
+emit_32(1094418484);
+emit_32(1101106407);
+emit_32(1124644880);
+emit_32(1098514432);
+emit_32(1101011196);
+emit_32(1124644880);
+emit_32(1100759066);
+emit_32(1101487355);
+emit_32(1124644880);
+emit_32(1102807040);
+emit_32(1101120563);
+emit_32(1124644880);
+emit_32(1104855066);
+emit_32(1100659766);
+emit_32(1124644880);
+emit_32(1106903040);
+emit_32(1100064175);
+emit_32(1124644880);
+emit_32(1108123661);
+emit_32(1099751175);
+emit_32(1124644880);
+emit_32(1109147648);
+emit_32(1099500618);
+emit_32(1124644880);
+emit_32(1110171661);
+emit_32(1099345376);
+emit_32(1124644880);
+emit_32(1111195648);
+emit_32(1099089157);
+emit_32(1124644880);
+emit_32(1112219661);
+emit_32(1098329673);
+emit_32(1124644880);
+emit_32(1113243648);
+emit_32(1098686084);
+emit_32(1124644880);
+emit_32(1114267661);
+emit_32(1099133616);
+emit_32(1124644880);
+emit_32(1115291648);
+emit_32(1099084752);
+emit_32(1124644880);
+emit_32(1116000263);
+emit_32(1099672322);
+emit_32(1124644880);
+emit_32(1116512256);
+emit_32(1099700004);
+emit_32(1124644880);
+emit_32(1117024263);
+emit_32(1099767847);
+emit_32(1124644880);
+emit_32(1117536256);
+emit_32(1099478440);
+emit_32(1124644880);
+emit_32(1118048263);
+emit_32(1099565892);
+emit_32(1124644880);
+emit_32(1118560256);
+emit_32(1100285634);
+emit_32(1124644880);
+emit_32(1119072263);
+emit_32(1100840908);
+emit_32(1124644880);
+emit_32(1119584256);
+emit_32(1101579577);
+emit_32(1124644880);
+emit_32(1120096263);
+emit_32(1101821746);
+emit_32(1124644880);
+emit_32(1120608322);
+emit_32(1103580575);
+emit_32(1124644880);
+emit_32(1121120289);
+emit_32(1104976858);
+emit_32(1124644880);
+emit_32(1121632256);
+emit_32(1105588440);
+emit_32(1124644880);
+emit_32(1122144223);
+emit_32(1106822195);
+emit_32(1124644880);
+emit_32(1122656322);
+emit_32(1107756686);
+emit_32(1124644880);
+emit_32(1123168289);
+emit_32(1108002131);
+emit_32(1124644880);
+emit_32(1123680256);
+emit_32(1108095874);
+emit_32(1124644880);
+emit_32(1124132848);
+emit_32(1108362055);
+emit_32(1124644880);
+emit_32(1124388897);
+emit_32(1108659431);
+emit_32(1124644880);
+emit_32(1124644880);
+emit_32(1109016576);
+emit_32(1124644880);
+emit_32(1124900864);
+emit_32(1109100043);
+emit_32(1124644880);
+emit_32(1125156848);
+emit_32(1109226842);
+emit_32(1124644880);
+emit_32(1125412897);
+emit_32(1109110030);
+emit_32(1124644880);
+emit_32(1125668880);
+emit_32(1109268916);
+emit_32(1124644880);
+emit_32(1125924864);
+emit_32(1109272612);
+emit_32(1124644880);
+emit_32(1126180848);
+emit_32(1109315053);
+emit_32(1124644880);
+emit_32(1126436897);
+emit_32(1108975105);
+emit_32(1124644880);
+emit_32(1126692880);
+emit_32(1108796559);
+emit_32(1124644880);
+emit_32(1126948864);
+emit_32(1108827649);
+emit_32(1124644880);
+emit_32(1127204848);
+emit_32(1109670651);
+emit_32(1124644880);
+emit_32(1127460897);
+emit_32(1109571771);
+emit_32(1124644880);
+emit_32(1127716880);
+emit_32(1109561993);
+emit_32(1124644880);
+emit_32(1127972864);
+emit_32(1109715478);
+emit_32(1124644880);
+emit_32(1128228848);
+emit_32(1109451342);
+emit_32(1124644880);
+emit_32(1128484897);
+emit_32(1108848070);
+emit_32(1124644880);
+emit_32(1128740880);
+emit_32(1106750525);
+emit_32(1124644880);
+emit_32(1128996864);
+emit_32(1105305377);
+emit_32(1124644880);
+emit_32(1129252848);
+emit_32(1103748819);
+emit_32(1124644880);
+emit_32(1129508897);
+emit_32(1103181906);
+emit_32(1124644880);
+emit_32(1129764880);
+emit_32(1102910272);
+emit_32(1124644880);
+emit_32(1130020864);
+emit_32(1102380846);
+emit_32(1124644880);
+emit_32(1130276848);
+emit_32(1101721764);
+emit_32(1124644880);
+emit_32(1130532897);
+emit_32(1101539941);
+emit_32(1124644880);
+emit_32(1130788880);
+emit_32(1101138913);
+emit_32(1124644880);
+emit_32(1131044864);
+emit_32(1100148166);
+emit_32(1124644880);
+emit_32(1131300848);
+emit_32(1099305268);
+emit_32(1124644880);
+emit_32(1131556897);
+emit_32(1099050412);
+emit_32(1124644880);
+emit_32(1131812880);
+emit_32(1097572601);
+emit_32(1124644880);
+emit_32(1132068864);
+emit_32(1096388234);
+emit_32(1124644880);
+emit_32(1081737258);
+emit_32(1100982465);
+emit_32(1124388897);
+emit_32(1090125824);
+emit_32(1101595148);
+emit_32(1124388897);
+emit_32(1094418484);
+emit_32(1101527882);
+emit_32(1124388897);
+emit_32(1098514432);
+emit_32(1101659007);
+emit_32(1124388897);
+emit_32(1100759066);
+emit_32(1101842665);
+emit_32(1124388897);
+emit_32(1102807040);
+emit_32(1101032902);
+emit_32(1124388897);
+emit_32(1104855066);
+emit_32(1100272108);
+emit_32(1124388897);
+emit_32(1106903040);
+emit_32(1100043256);
+emit_32(1124388897);
+emit_32(1108123661);
+emit_32(1099540464);
+emit_32(1124388897);
+emit_32(1109147648);
+emit_32(1099626080);
+emit_32(1124388897);
+emit_32(1110171661);
+emit_32(1099081554);
+emit_32(1124388897);
+emit_32(1111195648);
+emit_32(1098359138);
+emit_32(1124388897);
+emit_32(1112219661);
+emit_32(1097625344);
+emit_32(1124388897);
+emit_32(1113243648);
+emit_32(1097653341);
+emit_32(1124388897);
+emit_32(1114267661);
+emit_32(1098623589);
+emit_32(1124388897);
+emit_32(1115291648);
+emit_32(1099027815);
+emit_32(1124388897);
+emit_32(1116000263);
+emit_32(1099509950);
+emit_32(1124388897);
+emit_32(1116512256);
+emit_32(1099695496);
+emit_32(1124388897);
+emit_32(1117024263);
+emit_32(1099418095);
+emit_32(1124388897);
+emit_32(1117536256);
+emit_32(1099118097);
+emit_32(1124388897);
+emit_32(1118048263);
+emit_32(1099305111);
+emit_32(1124388897);
+emit_32(1118560256);
+emit_32(1100055524);
+emit_32(1124388897);
+emit_32(1119072263);
+emit_32(1101014132);
+emit_32(1124388897);
+emit_32(1119584256);
+emit_32(1101309569);
+emit_32(1124388897);
+emit_32(1120096263);
+emit_32(1102362339);
+emit_32(1124388897);
+emit_32(1120608322);
+emit_32(1103979663);
+emit_32(1124388897);
+emit_32(1121120289);
+emit_32(1105246709);
+emit_32(1124388897);
+emit_32(1121632256);
+emit_32(1105782322);
+emit_32(1124388897);
+emit_32(1122144223);
+emit_32(1107021110);
+emit_32(1124388897);
+emit_32(1122656322);
+emit_32(1107619427);
+emit_32(1124388897);
+emit_32(1123168289);
+emit_32(1107918769);
+emit_32(1124388897);
+emit_32(1123680256);
+emit_32(1108052515);
+emit_32(1124388897);
+emit_32(1124132848);
+emit_32(1108443687);
+emit_32(1124388897);
+emit_32(1124388897);
+emit_32(1108689656);
+emit_32(1124388897);
+emit_32(1124644880);
+emit_32(1109031544);
+emit_32(1124388897);
+emit_32(1124900864);
+emit_32(1109169904);
+emit_32(1124388897);
+emit_32(1125156848);
+emit_32(1109272691);
+emit_32(1124388897);
+emit_32(1125412897);
+emit_32(1109111367);
+emit_32(1124388897);
+emit_32(1125668880);
+emit_32(1109309548);
+emit_32(1124388897);
+emit_32(1125924864);
+emit_32(1109332460);
+emit_32(1124388897);
+emit_32(1126180848);
+emit_32(1109248285);
+emit_32(1124388897);
+emit_32(1126436897);
+emit_32(1108946898);
+emit_32(1124388897);
+emit_32(1126692880);
+emit_32(1108703419);
+emit_32(1124388897);
+emit_32(1126948864);
+emit_32(1108479758);
+emit_32(1124388897);
+emit_32(1127204848);
+emit_32(1108324306);
+emit_32(1124388897);
+emit_32(1127460897);
+emit_32(1108262886);
+emit_32(1124388897);
+emit_32(1127716880);
+emit_32(1108353955);
+emit_32(1124388897);
+emit_32(1127972864);
+emit_32(1108388610);
+emit_32(1124388897);
+emit_32(1128228848);
+emit_32(1108016156);
+emit_32(1124388897);
+emit_32(1128484897);
+emit_32(1107451209);
+emit_32(1124388897);
+emit_32(1128740880);
+emit_32(1106693797);
+emit_32(1124388897);
+emit_32(1128996864);
+emit_32(1105140908);
+emit_32(1124388897);
+emit_32(1129252848);
+emit_32(1103671801);
+emit_32(1124388897);
+emit_32(1129508897);
+emit_32(1102951481);
+emit_32(1124388897);
+emit_32(1129764880);
+emit_32(1102824813);
+emit_32(1124388897);
+emit_32(1130020864);
+emit_32(1102191421);
+emit_32(1124388897);
+emit_32(1130276848);
+emit_32(1101602960);
+emit_32(1124388897);
+emit_32(1130532897);
+emit_32(1101147668);
+emit_32(1124388897);
+emit_32(1130788880);
+emit_32(1100725774);
+emit_32(1124388897);
+emit_32(1131044864);
+emit_32(1100192730);
+emit_32(1124388897);
+emit_32(1131300848);
+emit_32(1099972267);
+emit_32(1124388897);
+emit_32(1131556897);
+emit_32(1099729574);
+emit_32(1124388897);
+emit_32(1131812880);
+emit_32(1099118936);
+emit_32(1124388897);
+emit_32(1132068864);
+emit_32(1097577634);
+emit_32(1124388897);
+emit_32(1081737258);
+emit_32(1101050728);
+emit_32(1124132848);
+emit_32(1090125866);
+emit_32(1101569144);
+emit_32(1124132848);
+emit_32(1094418484);
+emit_32(1101742788);
+emit_32(1124132848);
+emit_32(1098514432);
+emit_32(1102383625);
+emit_32(1124132848);
+emit_32(1100759066);
+emit_32(1102114927);
+emit_32(1124132848);
+emit_32(1102807040);
+emit_32(1101213309);
+emit_32(1124132848);
+emit_32(1104855066);
+emit_32(1100341209);
+emit_32(1124132848);
+emit_32(1106903040);
+emit_32(1099911345);
+emit_32(1124132848);
+emit_32(1108123661);
+emit_32(1099586129);
+emit_32(1124132848);
+emit_32(1109147648);
+emit_32(1099190030);
+emit_32(1124132848);
+emit_32(1110171661);
+emit_32(1098581751);
+emit_32(1124132848);
+emit_32(1111195648);
+emit_32(1097483053);
+emit_32(1124132848);
+emit_32(1112219661);
+emit_32(1097178022);
+emit_32(1124132848);
+emit_32(1113243648);
+emit_32(1096978688);
+emit_32(1124132848);
+emit_32(1114267661);
+emit_32(1097352610);
+emit_32(1124132848);
+emit_32(1115291648);
+emit_32(1097969906);
+emit_32(1124132848);
+emit_32(1116000263);
+emit_32(1098943509);
+emit_32(1124132848);
+emit_32(1116512256);
+emit_32(1099235380);
+emit_32(1124132848);
+emit_32(1117024263);
+emit_32(1098875037);
+emit_32(1124132848);
+emit_32(1117536256);
+emit_32(1098919916);
+emit_32(1124132848);
+emit_32(1118048263);
+emit_32(1099015127);
+emit_32(1124132848);
+emit_32(1118560256);
+emit_32(1100384410);
+emit_32(1124132848);
+emit_32(1119072263);
+emit_32(1100817786);
+emit_32(1124132848);
+emit_32(1119584256);
+emit_32(1101157682);
+emit_32(1124132848);
+emit_32(1120096263);
+emit_32(1102698670);
+emit_32(1124132848);
+emit_32(1120608322);
+emit_32(1104088662);
+emit_32(1124132848);
+emit_32(1121120289);
+emit_32(1104975548);
+emit_32(1124132848);
+emit_32(1121632256);
+emit_32(1105705671);
+emit_32(1124132848);
+emit_32(1122144223);
+emit_32(1106546629);
+emit_32(1124132848);
+emit_32(1122656322);
+emit_32(1107224271);
+emit_32(1124132848);
+emit_32(1123168289);
+emit_32(1107432990);
+emit_32(1124132848);
+emit_32(1123680256);
+emit_32(1107870823);
+emit_32(1124132848);
+emit_32(1124132848);
+emit_32(1108611197);
+emit_32(1124132848);
+emit_32(1124388897);
+emit_32(1109002394);
+emit_32(1124132848);
+emit_32(1124644880);
+emit_32(1109174020);
+emit_32(1124132848);
+emit_32(1124900864);
+emit_32(1109145131);
+emit_32(1124132848);
+emit_32(1125156848);
+emit_32(1109111053);
+emit_32(1124132848);
+emit_32(1125412897);
+emit_32(1108982156);
+emit_32(1124132848);
+emit_32(1125668880);
+emit_32(1109159733);
+emit_32(1124132848);
+emit_32(1125924864);
+emit_32(1109315342);
+emit_32(1124132848);
+emit_32(1126180848);
+emit_32(1109210091);
+emit_32(1124132848);
+emit_32(1126436897);
+emit_32(1108929885);
+emit_32(1124132848);
+emit_32(1126692880);
+emit_32(1108541256);
+emit_32(1124132848);
+emit_32(1126948864);
+emit_32(1108339091);
+emit_32(1124132848);
+emit_32(1127204848);
+emit_32(1108284853);
+emit_32(1124132848);
+emit_32(1127460897);
+emit_32(1108246449);
+emit_32(1124132848);
+emit_32(1127716880);
+emit_32(1108208727);
+emit_32(1124132848);
+emit_32(1127972864);
+emit_32(1108242648);
+emit_32(1124132848);
+emit_32(1128228848);
+emit_32(1107828539);
+emit_32(1124132848);
+emit_32(1128484897);
+emit_32(1107302207);
+emit_32(1124132848);
+emit_32(1128740880);
+emit_32(1106125311);
+emit_32(1124132848);
+emit_32(1128996864);
+emit_32(1104882853);
+emit_32(1124132848);
+emit_32(1129252848);
+emit_32(1103712328);
+emit_32(1124132848);
+emit_32(1129508897);
+emit_32(1103248228);
+emit_32(1124132848);
+emit_32(1129764880);
+emit_32(1102281808);
+emit_32(1124132848);
+emit_32(1130020864);
+emit_32(1101935621);
+emit_32(1124132848);
+emit_32(1130276848);
+emit_32(1100815060);
+emit_32(1124132848);
+emit_32(1130532897);
+emit_32(1100889457);
+emit_32(1124132848);
+emit_32(1130788880);
+emit_32(1101023098);
+emit_32(1124132848);
+emit_32(1131044864);
+emit_32(1100560938);
+emit_32(1124132848);
+emit_32(1131300848);
+emit_32(1099884397);
+emit_32(1124132848);
+emit_32(1131556897);
+emit_32(1099776918);
+emit_32(1124132848);
+emit_32(1131812880);
+emit_32(1099406246);
+emit_32(1124132848);
+emit_32(1132068864);
+emit_32(1099062890);
+emit_32(1124132848);
+emit_start(Landscape03Vtx)
+emit_32(1081737216);
+emit_32(1112116167);
+emit_32(3054751226);
+emit_32(1081737216);
+emit_32(1112701298);
+emit_32(1081737216);
+emit_32(1090125824);
+emit_32(1112117215);
+emit_32(3054752017);
+emit_32(1090125824);
+emit_32(1112503694);
+emit_32(1081737216);
+emit_32(1094418484);
+emit_32(1111966902);
+emit_32(3054641802);
+emit_32(1094418484);
+emit_32(1112328084);
+emit_32(1081737216);
+emit_32(1098514432);
+emit_32(1112170824);
+emit_32(3054791336);
+emit_32(1098514432);
+emit_32(1112069951);
+emit_32(1081737216);
+emit_32(1100759066);
+emit_32(1112121016);
+emit_32(3054754788);
+emit_32(1100759066);
+emit_32(1112173655);
+emit_32(1081737216);
+emit_32(1102807040);
+emit_32(1112268577);
+emit_32(3054863024);
+emit_32(1102807040);
+emit_32(1112198559);
+emit_32(1081737216);
+emit_32(1104855066);
+emit_32(1112660640);
+emit_32(3055150524);
+emit_32(1104855066);
+emit_32(1112333694);
+emit_32(1081737216);
+emit_32(1106903040);
+emit_32(1112840733);
+emit_32(3055282597);
+emit_32(1106903040);
+emit_32(1112388744);
+emit_32(1081737216);
+emit_32(1108123661);
+emit_32(1112817271);
+emit_32(3055265401);
+emit_32(1108123661);
+emit_32(1112590726);
+emit_32(1081737216);
+emit_32(1109147648);
+emit_32(1112978804);
+emit_32(3055383885);
+emit_32(1109147648);
+emit_32(1113057735);
+emit_32(1081737216);
+emit_32(1110171661);
+emit_32(1113143692);
+emit_32(3055504787);
+emit_32(1110171661);
+emit_32(1113035296);
+emit_32(1081737216);
+emit_32(1111195648);
+emit_32(1113241551);
+emit_32(3055576563);
+emit_32(1111195648);
+emit_32(1112886896);
+emit_32(1081737216);
+emit_32(1112219661);
+emit_32(1113409140);
+emit_32(3055699444);
+emit_32(1112219661);
+emit_32(1112955971);
+emit_32(1081737216);
+emit_32(1113243648);
+emit_32(1113827049);
+emit_32(3056005944);
+emit_32(1113243648);
+emit_32(1113474440);
+emit_32(1081737216);
+emit_32(1114267661);
+emit_32(1113969787);
+emit_32(3056110618);
+emit_32(1114267661);
+emit_32(1113373252);
+emit_32(1081737216);
+emit_32(1115291648);
+emit_32(1113729217);
+emit_32(3055934168);
+emit_32(1115291648);
+emit_32(1112981923);
+emit_32(1081737216);
+emit_32(1116000263);
+emit_32(1113555888);
+emit_32(3055807065);
+emit_32(1116000263);
+emit_32(1112815462);
+emit_32(1081737216);
+emit_32(1116512256);
+emit_32(1112971595);
+emit_32(3055378563);
+emit_32(1116512256);
+emit_32(1112451711);
+emit_32(1081737216);
+emit_32(1117024263);
+emit_32(1112445996);
+emit_32(3054993118);
+emit_32(1117024263);
+emit_32(1112394144);
+emit_32(1081737216);
+emit_32(1117536256);
+emit_32(1112490508);
+emit_32(3055025752);
+emit_32(1117536256);
+emit_32(1112528414);
+emit_32(1081737216);
+emit_32(1118048263);
+emit_32(1112364810);
+emit_32(3054933569);
+emit_32(1118048263);
+emit_32(1112287950);
+emit_32(1081737216);
+emit_32(1118560256);
+emit_32(1112062978);
+emit_32(3054712259);
+emit_32(1118560256);
+emit_32(1111949653);
+emit_32(1081737216);
+emit_32(1119072263);
+emit_32(1111766755);
+emit_32(3054494995);
+emit_32(1119072263);
+emit_32(1111682685);
+emit_32(1081737216);
+emit_32(1119584256);
+emit_32(1111332435);
+emit_32(3054176489);
+emit_32(1119584256);
+emit_32(1111194678);
+emit_32(1081737216);
+emit_32(1120096263);
+emit_32(1110914210);
+emit_32(3053869769);
+emit_32(1120096263);
+emit_32(1111068639);
+emit_32(1081737216);
+emit_32(1120608322);
+emit_32(1110765653);
+emit_32(3053760829);
+emit_32(1120608322);
+emit_32(1110815303);
+emit_32(1081737216);
+emit_32(1121120289);
+emit_32(1110612404);
+emit_32(3053648459);
+emit_32(1121120289);
+emit_32(1110882674);
+emit_32(1081737216);
+emit_32(1121632256);
+emit_32(1110535543);
+emit_32(3053592076);
+emit_32(1121632256);
+emit_32(1110789010);
+emit_32(1081737216);
+emit_32(1122144223);
+emit_32(1110472052);
+emit_32(3053545501);
+emit_32(1122144223);
+emit_32(1110340062);
+emit_32(1081737216);
+emit_32(1122656322);
+emit_32(1110285668);
+emit_32(3053364308);
+emit_32(1122656322);
+emit_32(1109951539);
+emit_32(1081737216);
+emit_32(1123168289);
+emit_32(1109697652);
+emit_32(3052501939);
+emit_32(1123168289);
+emit_32(1109517848);
+emit_32(1081737216);
+emit_32(1123680256);
+emit_32(1109444526);
+emit_32(3052130656);
+emit_32(1123680256);
+emit_32(1109219108);
+emit_32(1081737216);
+emit_32(1124132848);
+emit_32(1109279611);
+emit_32(3051888763);
+emit_32(1124132848);
+emit_32(1108888571);
+emit_32(1081737216);
+emit_32(1124388897);
+emit_32(1108937068);
+emit_32(3051386330);
+emit_32(1124388897);
+emit_32(1108548203);
+emit_32(1081737216);
+emit_32(1124644880);
+emit_32(1108458524);
+emit_32(3050684490);
+emit_32(1124644880);
+emit_32(1108062057);
+emit_32(1081737216);
+emit_32(1124900864);
+emit_32(1107860049);
+emit_32(3049806640);
+emit_32(1124900864);
+emit_32(1107391755);
+emit_32(1081737216);
+emit_32(1125156848);
+emit_32(1107061952);
+emit_32(3048807931);
+emit_32(1125156848);
+emit_32(1107147201);
+emit_32(1081737216);
+emit_32(1125412897);
+emit_32(1106198187);
+emit_32(3048174525);
+emit_32(1125412897);
+emit_32(1106562515);
+emit_32(1081737216);
+emit_32(1125668880);
+emit_32(1106521306);
+emit_32(3048411491);
+emit_32(1125668880);
+emit_32(1107088323);
+emit_32(1081737216);
+emit_32(1125924864);
+emit_32(1106837714);
+emit_32(3048643444);
+emit_32(1125924864);
+emit_32(1107466728);
+emit_32(1081737216);
+emit_32(1126180848);
+emit_32(1107242569);
+emit_32(3048940401);
+emit_32(1126180848);
+emit_32(1107640477);
+emit_32(1081737216);
+emit_32(1126436897);
+emit_32(1107053196);
+emit_32(3048801510);
+emit_32(1126436897);
+emit_32(1107446858);
+emit_32(1081737216);
+emit_32(1126692880);
+emit_32(1106540495);
+emit_32(3048425477);
+emit_32(1126692880);
+emit_32(1107035003);
+emit_32(1081737216);
+emit_32(1126948864);
+emit_32(1106275362);
+emit_32(3048231084);
+emit_32(1126948864);
+emit_32(1106606398);
+emit_32(1081737216);
+emit_32(1127204848);
+emit_32(1105871923);
+emit_32(3047935271);
+emit_32(1127204848);
+emit_32(1106181305);
+emit_32(1081737216);
+emit_32(1127460897);
+emit_32(1105372958);
+emit_32(3047569266);
+emit_32(1127460897);
+emit_32(1105541831);
+emit_32(1081737216);
+emit_32(1127716880);
+emit_32(1104684096);
+emit_32(3047064106);
+emit_32(1127716880);
+emit_32(1104783501);
+emit_32(1081737216);
+emit_32(1127972864);
+emit_32(1103501774);
+emit_32(3046197075);
+emit_32(1127972864);
+emit_32(1103855197);
+emit_32(1081737216);
+emit_32(1128228848);
+emit_32(1102439829);
+emit_32(3045418269);
+emit_32(1128228848);
+emit_32(1103186310);
+emit_32(1081737216);
+emit_32(1128484897);
+emit_32(1101869718);
+emit_32(3044935642);
+emit_32(1128484897);
+emit_32(1103087482);
+emit_32(1081737216);
+emit_32(1128740880);
+emit_32(1101702785);
+emit_32(3044690829);
+emit_32(1128740880);
+emit_32(1102981471);
+emit_32(1081737216);
+emit_32(1128996864);
+emit_32(1101484419);
+emit_32(3044370528);
+emit_32(1128996864);
+emit_32(1102264716);
+emit_32(1081737216);
+emit_32(1129252848);
+emit_32(1100736102);
+emit_32(3043272969);
+emit_32(1129252848);
+emit_32(1102136581);
+emit_32(1081737216);
+emit_32(1129508897);
+emit_32(1100482452);
+emit_32(3042900948);
+emit_32(1129508897);
+emit_32(1101851735);
+emit_32(1081737216);
+emit_32(1129764880);
+emit_32(1100170134);
+emit_32(3042442865);
+emit_32(1129764880);
+emit_32(1101959109);
+emit_32(1081737216);
+emit_32(1130020864);
+emit_32(1100368052);
+emit_32(3042733136);
+emit_32(1130020864);
+emit_32(1101538001);
+emit_32(1081737216);
+emit_32(1130276848);
+emit_32(1100034710);
+emit_32(3042244249);
+emit_32(1130276848);
+emit_32(1100676386);
+emit_32(1081737216);
+emit_32(1130532897);
+emit_32(1099793118);
+emit_32(3041889854);
+emit_32(1130532897);
+emit_32(1100067740);
+emit_32(1081737216);
+emit_32(1130788880);
+emit_32(1099349570);
+emit_32(3041239348);
+emit_32(1130788880);
+emit_32(1099550582);
+emit_32(1081737216);
+emit_32(1131044864);
+emit_32(1099102264);
+emit_32(3040876615);
+emit_32(1131044864);
+emit_32(1099061684);
+emit_32(1081737216);
+emit_32(1131300848);
+emit_32(1097152227);
+emit_32(3039303785);
+emit_32(1131300848);
+emit_32(1097284243);
+emit_32(1081737216);
+emit_32(1131556897);
+emit_32(1095174088);
+emit_32(3037853098);
+emit_32(1131556897);
+emit_32(1096432799);
+emit_32(1081737216);
+emit_32(1131812880);
+emit_32(1095119772);
+emit_32(3037813287);
+emit_32(1131812880);
+emit_32(1096013998);
+emit_32(1081737216);
+emit_32(1132068864);
+emit_32(1094633233);
+emit_32(3037456465);
+emit_32(1132068864);
+emit_32(1095458043);
+emit_32(1081737216);
+emit_32(1081737216);
+emit_32(1111714929);
+emit_32(3229220864);
+emit_32(1090125824);
+emit_32(1111846420);
+emit_32(3229220864);
+emit_32(1094418484);
+emit_32(1112005149);
+emit_32(3229220864);
+emit_32(1098514432);
+emit_32(1112044365);
+emit_32(3229220864);
+emit_32(1100759066);
+emit_32(1112440753);
+emit_32(3229220864);
+emit_32(1102807040);
+emit_32(1112584120);
+emit_32(3229220864);
+emit_32(1104855066);
+emit_32(1112766651);
+emit_32(3229220864);
+emit_32(1106903040);
+emit_32(1113057657);
+emit_32(3229220864);
+emit_32(1108123661);
+emit_32(1113035846);
+emit_32(3229220864);
+emit_32(1109147648);
+emit_32(1113286037);
+emit_32(3229220864);
+emit_32(1110171661);
+emit_32(1113632643);
+emit_32(3229220864);
+emit_32(1111195648);
+emit_32(1113716556);
+emit_32(3229220864);
+emit_32(1112219661);
+emit_32(1113737894);
+emit_32(3229220864);
+emit_32(1113243648);
+emit_32(1114105892);
+emit_32(3229220864);
+emit_32(1114267661);
+emit_32(1114272563);
+emit_32(3229220864);
+emit_32(1115291648);
+emit_32(1114112603);
+emit_32(3229220864);
+emit_32(1116000263);
+emit_32(1114000379);
+emit_32(3229220864);
+emit_32(1116512256);
+emit_32(1113455303);
+emit_32(3229220864);
+emit_32(1117024263);
+emit_32(1112990522);
+emit_32(3229220864);
+emit_32(1117536256);
+emit_32(1112862360);
+emit_32(3229220864);
+emit_32(1118048263);
+emit_32(1112683289);
+emit_32(3229220864);
+emit_32(1118560256);
+emit_32(1112325279);
+emit_32(3229220864);
+emit_32(1119072263);
+emit_32(1111923989);
+emit_32(3229220864);
+emit_32(1119584256);
+emit_32(1111407434);
+emit_32(3229220864);
+emit_32(1120096263);
+emit_32(1110917251);
+emit_32(3229220864);
+emit_32(1120608322);
+emit_32(1110628080);
+emit_32(3229220864);
+emit_32(1121120289);
+emit_32(1110728560);
+emit_32(3229220864);
+emit_32(1121632256);
+emit_32(1110660245);
+emit_32(3229220864);
+emit_32(1122144223);
+emit_32(1110578220);
+emit_32(3229220864);
+emit_32(1122656322);
+emit_32(1110373800);
+emit_32(3229220864);
+emit_32(1123168289);
+emit_32(1109998646);
+emit_32(3229220864);
+emit_32(1123680256);
+emit_32(1109504138);
+emit_32(3229220864);
+emit_32(1124132848);
+emit_32(1109245821);
+emit_32(3229220864);
+emit_32(1124388897);
+emit_32(1109347533);
+emit_32(3229220864);
+emit_32(1124644880);
+emit_32(1108947213);
+emit_32(3229220864);
+emit_32(1124900864);
+emit_32(1108137607);
+emit_32(3229220864);
+emit_32(1125156848);
+emit_32(1107314396);
+emit_32(3229220864);
+emit_32(1125412897);
+emit_32(1106864505);
+emit_32(3229220864);
+emit_32(1125668880);
+emit_32(1107350389);
+emit_32(3229220864);
+emit_32(1125924864);
+emit_32(1107022263);
+emit_32(3229220864);
+emit_32(1126180848);
+emit_32(1107147673);
+emit_32(3229220864);
+emit_32(1126436897);
+emit_32(1107173940);
+emit_32(3229220864);
+emit_32(1126692880);
+emit_32(1106863299);
+emit_32(3229220864);
+emit_32(1126948864);
+emit_32(1106064966);
+emit_32(3229220864);
+emit_32(1127204848);
+emit_32(1105610408);
+emit_32(3229220864);
+emit_32(1127460897);
+emit_32(1105364464);
+emit_32(3229220864);
+emit_32(1127716880);
+emit_32(1104474905);
+emit_32(3229220864);
+emit_32(1127972864);
+emit_32(1103487985);
+emit_32(3229220864);
+emit_32(1128228848);
+emit_32(1102533729);
+emit_32(3229220864);
+emit_32(1128484897);
+emit_32(1101802294);
+emit_32(3229220864);
+emit_32(1128740880);
+emit_32(1100883847);
+emit_32(3229220864);
+emit_32(1128996864);
+emit_32(1100469607);
+emit_32(3229220864);
+emit_32(1129252848);
+emit_32(1100396573);
+emit_32(3229220864);
+emit_32(1129508897);
+emit_32(1100417440);
+emit_32(3229220864);
+emit_32(1129764880);
+emit_32(1100382103);
+emit_32(3229220864);
+emit_32(1130020864);
+emit_32(1100225498);
+emit_32(3229220864);
+emit_32(1130276848);
+emit_32(1100250192);
+emit_32(3229220864);
+emit_32(1130532897);
+emit_32(1099696859);
+emit_32(3229220864);
+emit_32(1130788880);
+emit_32(1099685587);
+emit_32(3229220864);
+emit_32(1131044864);
+emit_32(1099260389);
+emit_32(3229220864);
+emit_32(1131300848);
+emit_32(1097711642);
+emit_32(3229220864);
+emit_32(1131556897);
+emit_32(1095721340);
+emit_32(3229220864);
+emit_32(1131812880);
+emit_32(1095617636);
+emit_32(3229220864);
+emit_32(1132068864);
+emit_32(1094282799);
+emit_32(3229220864);
+emit_32(1081737216);
+emit_32(1111679959);
+emit_32(3237609472);
+emit_32(1090125824);
+emit_32(1111786285);
+emit_32(3237609472);
+emit_32(1094418484);
+emit_32(1112014979);
+emit_32(3237609472);
+emit_32(1098514432);
+emit_32(1112169408);
+emit_32(3237609472);
+emit_32(1100759066);
+emit_32(1112421145);
+emit_32(3237609472);
+emit_32(1102807040);
+emit_32(1112788461);
+emit_32(3237609472);
+emit_32(1104855066);
+emit_32(1112831951);
+emit_32(3237609472);
+emit_32(1106903040);
+emit_32(1113081302);
+emit_32(3237609472);
+emit_32(1108123661);
+emit_32(1113387250);
+emit_32(3237609472);
+emit_32(1109147648);
+emit_32(1113921710);
+emit_32(3237609472);
+emit_32(1110171661);
+emit_32(1113963574);
+emit_32(3237609472);
+emit_32(1111195648);
+emit_32(1114050658);
+emit_32(3237609472);
+emit_32(1112219661);
+emit_32(1113921264);
+emit_32(3237609472);
+emit_32(1113243648);
+emit_32(1114115854);
+emit_32(3237609472);
+emit_32(1114267661);
+emit_32(1114312278);
+emit_32(3237609472);
+emit_32(1115291648);
+emit_32(1114279117);
+emit_32(3237609472);
+emit_32(1116000263);
+emit_32(1113920609);
+emit_32(3237609472);
+emit_32(1116512256);
+emit_32(1113584645);
+emit_32(3237609472);
+emit_32(1117024263);
+emit_32(1113293246);
+emit_32(3237609472);
+emit_32(1117536256);
+emit_32(1113201469);
+emit_32(3237609472);
+emit_32(1118048263);
+emit_32(1112988661);
+emit_32(3237609472);
+emit_32(1118560256);
+emit_32(1112637047);
+emit_32(3237609472);
+emit_32(1119072263);
+emit_32(1112267476);
+emit_32(3237609472);
+emit_32(1119584256);
+emit_32(1111621186);
+emit_32(3237609472);
+emit_32(1120096263);
+emit_32(1110940949);
+emit_32(3237609472);
+emit_32(1120608322);
+emit_32(1110726751);
+emit_32(3237609472);
+emit_32(1121120289);
+emit_32(1110505737);
+emit_32(3237609472);
+emit_32(1121632256);
+emit_32(1110430476);
+emit_32(3237609472);
+emit_32(1122144223);
+emit_32(1110258876);
+emit_32(3237609472);
+emit_32(1122656322);
+emit_32(1110246425);
+emit_32(3237609472);
+emit_32(1123168289);
+emit_32(1110111368);
+emit_32(3237609472);
+emit_32(1123680256);
+emit_32(1109704075);
+emit_32(3237609472);
+emit_32(1124132848);
+emit_32(1109328449);
+emit_32(3237609472);
+emit_32(1124388897);
+emit_32(1109344020);
+emit_32(3237609472);
+emit_32(1124644880);
+emit_32(1109056501);
+emit_32(3237609472);
+emit_32(1124900864);
+emit_32(1108366983);
+emit_32(3237609472);
+emit_32(1125156848);
+emit_32(1107828618);
+emit_32(3237609472);
+emit_32(1125412897);
+emit_32(1107568047);
+emit_32(3237609472);
+emit_32(1125668880);
+emit_32(1107450056);
+emit_32(3237609472);
+emit_32(1125924864);
+emit_32(1107525842);
+emit_32(3237609472);
+emit_32(1126180848);
+emit_32(1107466650);
+emit_32(3237609472);
+emit_32(1126436897);
+emit_32(1107475195);
+emit_32(3237609472);
+emit_32(1126692880);
+emit_32(1107046852);
+emit_32(3237609472);
+emit_32(1126948864);
+emit_32(1106460593);
+emit_32(3237609472);
+emit_32(1127204848);
+emit_32(1105866051);
+emit_32(3237609472);
+emit_32(1127460897);
+emit_32(1105220967);
+emit_32(3237609472);
+emit_32(1127716880);
+emit_32(1104257535);
+emit_32(3237609472);
+emit_32(1127972864);
+emit_32(1103215618);
+emit_32(3237609472);
+emit_32(1128228848);
+emit_32(1102464785);
+emit_32(3237609472);
+emit_32(1128484897);
+emit_32(1101270562);
+emit_32(3237609472);
+emit_32(1128740880);
+emit_32(1100280706);
+emit_32(3237609472);
+emit_32(1128996864);
+emit_32(1099709599);
+emit_32(3237609472);
+emit_32(1129252848);
+emit_32(1100000579);
+emit_32(3237609472);
+emit_32(1129508897);
+emit_32(1100207987);
+emit_32(3237609472);
+emit_32(1129764880);
+emit_32(1100241227);
+emit_32(3237609472);
+emit_32(1130020864);
+emit_32(1100129029);
+emit_32(3237609472);
+emit_32(1130276848);
+emit_32(1099912079);
+emit_32(3237609472);
+emit_32(1130532897);
+emit_32(1099448608);
+emit_32(3237609472);
+emit_32(1130788880);
+emit_32(1099055392);
+emit_32(3237609472);
+emit_32(1131044864);
+emit_32(1098378012);
+emit_32(3237609472);
+emit_32(1131300848);
+emit_32(1096274779);
+emit_32(3237609472);
+emit_32(1131556897);
+emit_32(1096113088);
+emit_32(3237609472);
+emit_32(1131812880);
+emit_32(1094998137);
+emit_32(3237609472);
+emit_32(1132068864);
+emit_32(1093654387);
+emit_32(3237609472);
+emit_32(1081737216);
+emit_32(1111917802);
+emit_32(3241902132);
+emit_32(1090125824);
+emit_32(1112032752);
+emit_32(3241902132);
+emit_32(1094418484);
+emit_32(1112179868);
+emit_32(3241902132);
+emit_32(1098514432);
+emit_32(1112289968);
+emit_32(3241902132);
+emit_32(1100759066);
+emit_32(1112667167);
+emit_32(3241902132);
+emit_32(1102807040);
+emit_32(1112883777);
+emit_32(3241902132);
+emit_32(1104855066);
+emit_32(1113176434);
+emit_32(3241902132);
+emit_32(1106903040);
+emit_32(1113400908);
+emit_32(3241902132);
+emit_32(1108123661);
+emit_32(1113733176);
+emit_32(3241902132);
+emit_32(1109147648);
+emit_32(1114095642);
+emit_32(3241902132);
+emit_32(1110171661);
+emit_32(1114172346);
+emit_32(3241902132);
+emit_32(1111195648);
+emit_32(1114411342);
+emit_32(3241902132);
+emit_32(1112219661);
+emit_32(1114340694);
+emit_32(3241902132);
+emit_32(1113243648);
+emit_32(1114253374);
+emit_32(3241902132);
+emit_32(1114267661);
+emit_32(1114280192);
+emit_32(3241902132);
+emit_32(1115291648);
+emit_32(1114163721);
+emit_32(3241902132);
+emit_32(1116000263);
+emit_32(1114090190);
+emit_32(3241902132);
+emit_32(1116512256);
+emit_32(1113701666);
+emit_32(3241902132);
+emit_32(1117024263);
+emit_32(1113532950);
+emit_32(3241902132);
+emit_32(1117536256);
+emit_32(1113573556);
+emit_32(3241902132);
+emit_32(1118048263);
+emit_32(1113300219);
+emit_32(3241902132);
+emit_32(1118560256);
+emit_32(1112826289);
+emit_32(3241902132);
+emit_32(1119072263);
+emit_32(1112471713);
+emit_32(3241902132);
+emit_32(1119584256);
+emit_32(1111810323);
+emit_32(3241902132);
+emit_32(1120096263);
+emit_32(1110995816);
+emit_32(3241902132);
+emit_32(1120608322);
+emit_32(1110440752);
+emit_32(3241902132);
+emit_32(1121120289);
+emit_32(1110331281);
+emit_32(3241902132);
+emit_32(1121632256);
+emit_32(1110265928);
+emit_32(3241902132);
+emit_32(1122144223);
+emit_32(1110314897);
+emit_32(3241902132);
+emit_32(1122656322);
+emit_32(1110355136);
+emit_32(3241902132);
+emit_32(1123168289);
+emit_32(1110061272);
+emit_32(3241902132);
+emit_32(1123680256);
+emit_32(1109762481);
+emit_32(3241902132);
+emit_32(1124132848);
+emit_32(1109249543);
+emit_32(3241902132);
+emit_32(1124388897);
+emit_32(1109267133);
+emit_32(3241902132);
+emit_32(1124644880);
+emit_32(1108818474);
+emit_32(3241902132);
+emit_32(1124900864);
+emit_32(1108492996);
+emit_32(3241902132);
+emit_32(1125156848);
+emit_32(1108035555);
+emit_32(3241902132);
+emit_32(1125412897);
+emit_32(1107824896);
+emit_32(3241902132);
+emit_32(1125668880);
+emit_32(1107697625);
+emit_32(3241902132);
+emit_32(1125924864);
+emit_32(1107864374);
+emit_32(3241902132);
+emit_32(1126180848);
+emit_32(1107783896);
+emit_32(3241902132);
+emit_32(1126436897);
+emit_32(1107786911);
+emit_32(3241902132);
+emit_32(1126692880);
+emit_32(1107603043);
+emit_32(3241902132);
+emit_32(1126948864);
+emit_32(1106784603);
+emit_32(3241902132);
+emit_32(1127204848);
+emit_32(1106394376);
+emit_32(3241902132);
+emit_32(1127460897);
+emit_32(1105369026);
+emit_32(3241902132);
+emit_32(1127716880);
+emit_32(1104382892);
+emit_32(3241902132);
+emit_32(1127972864);
+emit_32(1103613552);
+emit_32(3241902132);
+emit_32(1128228848);
+emit_32(1102201959);
+emit_32(3241902132);
+emit_32(1128484897);
+emit_32(1100683674);
+emit_32(3241902132);
+emit_32(1128740880);
+emit_32(1100170081);
+emit_32(3241902132);
+emit_32(1128996864);
+emit_32(1099248330);
+emit_32(3241902132);
+emit_32(1129252848);
+emit_32(1098972398);
+emit_32(3241902132);
+emit_32(1129508897);
+emit_32(1099403729);
+emit_32(3241902132);
+emit_32(1129764880);
+emit_32(1099570243);
+emit_32(3241902132);
+emit_32(1130020864);
+emit_32(1099452174);
+emit_32(3241902132);
+emit_32(1130276848);
+emit_32(1099309567);
+emit_32(3241902132);
+emit_32(1130532897);
+emit_32(1098235616);
+emit_32(3241902132);
+emit_32(1130788880);
+emit_32(1097234960);
+emit_32(3241902132);
+emit_32(1131044864);
+emit_32(1096084777);
+emit_32(3241902132);
+emit_32(1131300848);
+emit_32(1095855768);
+emit_32(3241902132);
+emit_32(1131556897);
+emit_32(1095600649);
+emit_32(3241902132);
+emit_32(1131812880);
+emit_32(1095372584);
+emit_32(3241902132);
+emit_32(1132068864);
+emit_32(1094155711);
+emit_32(3241902132);
+emit_32(1081737216);
+emit_32(1112196121);
+emit_32(3245998080);
+emit_32(1090125824);
+emit_32(1112339435);
+emit_32(3245998080);
+emit_32(1094418484);
+emit_32(1112635054);
+emit_32(3245998080);
+emit_32(1098514432);
+emit_32(1112640664);
+emit_32(3245998080);
+emit_32(1100759066);
+emit_32(1112829670);
+emit_32(3245998080);
+emit_32(1102807040);
+emit_32(1113234342);
+emit_32(3245998080);
+emit_32(1104855066);
+emit_32(1113597123);
+emit_32(3245998080);
+emit_32(1106903040);
+emit_32(1113703003);
+emit_32(3245998080);
+emit_32(1108123661);
+emit_32(1113932589);
+emit_32(3245998080);
+emit_32(1109147648);
+emit_32(1114173735);
+emit_32(3245998080);
+emit_32(1110171661);
+emit_32(1114493341);
+emit_32(3245998080);
+emit_32(1111195648);
+emit_32(1114614687);
+emit_32(3245998080);
+emit_32(1112219661);
+emit_32(1114656971);
+emit_32(3245998080);
+emit_32(1113243648);
+emit_32(1114375193);
+emit_32(3245998080);
+emit_32(1114267661);
+emit_32(1114462251);
+emit_32(3245998080);
+emit_32(1115291648);
+emit_32(1114444425);
+emit_32(3245998080);
+emit_32(1116000263);
+emit_32(1114258040);
+emit_32(3245998080);
+emit_32(1116512256);
+emit_32(1113897068);
+emit_32(3245998080);
+emit_32(1117024263);
+emit_32(1113641399);
+emit_32(3245998080);
+emit_32(1117536256);
+emit_32(1113834835);
+emit_32(3245998080);
+emit_32(1118048263);
+emit_32(1113430688);
+emit_32(3245998080);
+emit_32(1118560256);
+emit_32(1112813260);
+emit_32(3245998080);
+emit_32(1119072263);
+emit_32(1112444187);
+emit_32(3245998080);
+emit_32(1119584256);
+emit_32(1111786704);
+emit_32(3245998080);
+emit_32(1120096263);
+emit_32(1111130558);
+emit_32(3245998080);
+emit_32(1120608322);
+emit_32(1110632169);
+emit_32(3245998080);
+emit_32(1121120289);
+emit_32(1110279953);
+emit_32(3245998080);
+emit_32(1121632256);
+emit_32(1110145840);
+emit_32(3245998080);
+emit_32(1122144223);
+emit_32(1110117869);
+emit_32(3245998080);
+emit_32(1122656322);
+emit_32(1109967425);
+emit_32(3245998080);
+emit_32(1123168289);
+emit_32(1109898533);
+emit_32(3245998080);
+emit_32(1123680256);
+emit_32(1109796192);
+emit_32(3245998080);
+emit_32(1124132848);
+emit_32(1109273031);
+emit_32(3245998080);
+emit_32(1124388897);
+emit_32(1109109716);
+emit_32(3245998080);
+emit_32(1124644880);
+emit_32(1108907052);
+emit_32(3245998080);
+emit_32(1124900864);
+emit_32(1108479705);
+emit_32(3245998080);
+emit_32(1125156848);
+emit_32(1108048504);
+emit_32(3245998080);
+emit_32(1125412897);
+emit_32(1108035581);
+emit_32(3245998080);
+emit_32(1125668880);
+emit_32(1107927761);
+emit_32(3245998080);
+emit_32(1125924864);
+emit_32(1108119231);
+emit_32(3245998080);
+emit_32(1126180848);
+emit_32(1108244955);
+emit_32(3245998080);
+emit_32(1126436897);
+emit_32(1108024597);
+emit_32(3245998080);
+emit_32(1126692880);
+emit_32(1107730052);
+emit_32(3245998080);
+emit_32(1126948864);
+emit_32(1107344019);
+emit_32(3245998080);
+emit_32(1127204848);
+emit_32(1106859314);
+emit_32(3245998080);
+emit_32(1127460897);
+emit_32(1105701057);
+emit_32(3245998080);
+emit_32(1127716880);
+emit_32(1104883954);
+emit_32(3245998080);
+emit_32(1127972864);
+emit_32(1103479492);
+emit_32(3245998080);
+emit_32(1128228848);
+emit_32(1101941126);
+emit_32(3245998080);
+emit_32(1128484897);
+emit_32(1100612003);
+emit_32(3245998080);
+emit_32(1128740880);
+emit_32(1099967182);
+emit_32(3245998080);
+emit_32(1128996864);
+emit_32(1099350200);
+emit_32(3245998080);
+emit_32(1129252848);
+emit_32(1098786642);
+emit_32(3245998080);
+emit_32(1129508897);
+emit_32(1098582799);
+emit_32(3245998080);
+emit_32(1129764880);
+emit_32(1098188639);
+emit_32(3245998080);
+emit_32(1130020864);
+emit_32(1098264032);
+emit_32(3245998080);
+emit_32(1130276848);
+emit_32(1097098120);
+emit_32(3245998080);
+emit_32(1130532897);
+emit_32(1096369150);
+emit_32(3245998080);
+emit_32(1130788880);
+emit_32(1096281280);
+emit_32(3245998080);
+emit_32(1131044864);
+emit_32(1096127244);
+emit_32(3245998080);
+emit_32(1131300848);
+emit_32(1096047342);
+emit_32(3245998080);
+emit_32(1131556897);
+emit_32(1096229061);
+emit_32(3245998080);
+emit_32(1131812880);
+emit_32(1095837942);
+emit_32(3245998080);
+emit_32(1132068864);
+emit_32(1094247567);
+emit_32(3245998080);
+emit_32(1081737216);
+emit_32(1112566084);
+emit_32(3248242714);
+emit_32(1090125824);
+emit_32(1112769036);
+emit_32(3248242714);
+emit_32(1094418484);
+emit_32(1113204903);
+emit_32(3248242714);
+emit_32(1098514432);
+emit_32(1113297807);
+emit_32(3248242714);
+emit_32(1100759066);
+emit_32(1113299590);
+emit_32(3248242714);
+emit_32(1102807040);
+emit_32(1113631778);
+emit_32(3248242714);
+emit_32(1104855066);
+emit_32(1113733962);
+emit_32(3248242714);
+emit_32(1106903040);
+emit_32(1114058575);
+emit_32(3248242714);
+emit_32(1108123661);
+emit_32(1114302841);
+emit_32(3248242714);
+emit_32(1109147648);
+emit_32(1114499816);
+emit_32(3248242714);
+emit_32(1110171661);
+emit_32(1114705389);
+emit_32(3248242714);
+emit_32(1111195648);
+emit_32(1114954505);
+emit_32(3248242714);
+emit_32(1112219661);
+emit_32(1114757818);
+emit_32(3248242714);
+emit_32(1113243648);
+emit_32(1114552664);
+emit_32(3248242714);
+emit_32(1114267661);
+emit_32(1114690499);
+emit_32(3248242714);
+emit_32(1115291648);
+emit_32(1114401800);
+emit_32(3248242714);
+emit_32(1116000263);
+emit_32(1114010445);
+emit_32(3248242714);
+emit_32(1116512256);
+emit_32(1113755904);
+emit_32(3248242714);
+emit_32(1117024263);
+emit_32(1113715219);
+emit_32(3248242714);
+emit_32(1117536256);
+emit_32(1113634478);
+emit_32(3248242714);
+emit_32(1118048263);
+emit_32(1113284962);
+emit_32(3248242714);
+emit_32(1118560256);
+emit_32(1112908602);
+emit_32(3248242714);
+emit_32(1119072263);
+emit_32(1112464713);
+emit_32(3248242714);
+emit_32(1119584256);
+emit_32(1111750948);
+emit_32(3248242714);
+emit_32(1120096263);
+emit_32(1111362529);
+emit_32(3248242714);
+emit_32(1120608322);
+emit_32(1110906005);
+emit_32(3248242714);
+emit_32(1121120289);
+emit_32(1110451867);
+emit_32(3248242714);
+emit_32(1121632256);
+emit_32(1110203905);
+emit_32(3248242714);
+emit_32(1122144223);
+emit_32(1110022344);
+emit_32(3248242714);
+emit_32(1122656322);
+emit_32(1109942023);
+emit_32(3248242714);
+emit_32(1123168289);
+emit_32(1109931930);
+emit_32(3248242714);
+emit_32(1123680256);
+emit_32(1109863432);
+emit_32(3248242714);
+emit_32(1124132848);
+emit_32(1109215989);
+emit_32(3248242714);
+emit_32(1124388897);
+emit_32(1109161384);
+emit_32(3248242714);
+emit_32(1124644880);
+emit_32(1108931536);
+emit_32(3248242714);
+emit_32(1124900864);
+emit_32(1108371544);
+emit_32(3248242714);
+emit_32(1125156848);
+emit_32(1108462875);
+emit_32(3248242714);
+emit_32(1125412897);
+emit_32(1108261182);
+emit_32(3248242714);
+emit_32(1125668880);
+emit_32(1108292980);
+emit_32(3248242714);
+emit_32(1125924864);
+emit_32(1108474724);
+emit_32(3248242714);
+emit_32(1126180848);
+emit_32(1108428377);
+emit_32(3248242714);
+emit_32(1126436897);
+emit_32(1108089713);
+emit_32(3248242714);
+emit_32(1126692880);
+emit_32(1107824057);
+emit_32(3248242714);
+emit_32(1126948864);
+emit_32(1107727614);
+emit_32(3248242714);
+emit_32(1127204848);
+emit_32(1107082976);
+emit_32(3248242714);
+emit_32(1127460897);
+emit_32(1106264772);
+emit_32(3248242714);
+emit_32(1127716880);
+emit_32(1105380141);
+emit_32(3248242714);
+emit_32(1127972864);
+emit_32(1103821223);
+emit_32(3248242714);
+emit_32(1128228848);
+emit_32(1102097049);
+emit_32(3248242714);
+emit_32(1128484897);
+emit_32(1100348129);
+emit_32(3248242714);
+emit_32(1128740880);
+emit_32(1099721186);
+emit_32(3248242714);
+emit_32(1128996864);
+emit_32(1098987759);
+emit_32(3248242714);
+emit_32(1129252848);
+emit_32(1098503317);
+emit_32(3248242714);
+emit_32(1129508897);
+emit_32(1097783679);
+emit_32(3248242714);
+emit_32(1129764880);
+emit_32(1097409338);
+emit_32(3248242714);
+emit_32(1130020864);
+emit_32(1096647547);
+emit_32(3248242714);
+emit_32(1130276848);
+emit_32(1096484599);
+emit_32(3248242714);
+emit_32(1130532897);
+emit_32(1095929168);
+emit_32(3248242714);
+emit_32(1130788880);
+emit_32(1096063071);
+emit_32(3248242714);
+emit_32(1131044864);
+emit_32(1096407109);
+emit_32(3248242714);
+emit_32(1131300848);
+emit_32(1095628227);
+emit_32(3248242714);
+emit_32(1131556897);
+emit_32(1095460769);
+emit_32(3248242714);
+emit_32(1131812880);
+emit_32(1095830916);
+emit_32(3248242714);
+emit_32(1132068864);
+emit_32(1094232467);
+emit_32(3248242714);
+emit_32(1081737216);
+emit_32(1113150456);
+emit_32(3250290688);
+emit_32(1090125824);
+emit_32(1113492292);
+emit_32(3250290688);
+emit_32(1094418484);
+emit_32(1113689922);
+emit_32(3250290688);
+emit_32(1098514432);
+emit_32(1113686357);
+emit_32(3250290688);
+emit_32(1100759066);
+emit_32(1113837352);
+emit_32(3250290688);
+emit_32(1102807040);
+emit_32(1113996473);
+emit_32(3250290688);
+emit_32(1104855066);
+emit_32(1114061039);
+emit_32(3250290688);
+emit_32(1106903040);
+emit_32(1114255891);
+emit_32(3250290688);
+emit_32(1108123661);
+emit_32(1114434988);
+emit_32(3250290688);
+emit_32(1109147648);
+emit_32(1114792814);
+emit_32(3250290688);
+emit_32(1110171661);
+emit_32(1114681586);
+emit_32(3250290688);
+emit_32(1111195648);
+emit_32(1114881157);
+emit_32(3250290688);
+emit_32(1112219661);
+emit_32(1114508309);
+emit_32(3250290688);
+emit_32(1113243648);
+emit_32(1114572115);
+emit_32(3250290688);
+emit_32(1114267661);
+emit_32(1114613377);
+emit_32(3250290688);
+emit_32(1115291648);
+emit_32(1114243334);
+emit_32(3250290688);
+emit_32(1116000263);
+emit_32(1114073701);
+emit_32(3250290688);
+emit_32(1116512256);
+emit_32(1113815594);
+emit_32(3250290688);
+emit_32(1117024263);
+emit_32(1113605721);
+emit_32(3250290688);
+emit_32(1117536256);
+emit_32(1113440702);
+emit_32(3250290688);
+emit_32(1118048263);
+emit_32(1112989159);
+emit_32(3250290688);
+emit_32(1118560256);
+emit_32(1112567395);
+emit_32(3250290688);
+emit_32(1119072263);
+emit_32(1112247344);
+emit_32(3250290688);
+emit_32(1119584256);
+emit_32(1112009920);
+emit_32(3250290688);
+emit_32(1120096263);
+emit_32(1111470454);
+emit_32(3250290688);
+emit_32(1120608322);
+emit_32(1110996838);
+emit_32(3250290688);
+emit_32(1121120289);
+emit_32(1110568495);
+emit_32(3250290688);
+emit_32(1121632256);
+emit_32(1110151633);
+emit_32(3250290688);
+emit_32(1122144223);
+emit_32(1109917460);
+emit_32(3250290688);
+emit_32(1122656322);
+emit_32(1109701663);
+emit_32(3250290688);
+emit_32(1123168289);
+emit_32(1109686721);
+emit_32(3250290688);
+emit_32(1123680256);
+emit_32(1109370549);
+emit_32(3250290688);
+emit_32(1124132848);
+emit_32(1109357783);
+emit_32(3250290688);
+emit_32(1124388897);
+emit_32(1109361348);
+emit_32(3250290688);
+emit_32(1124644880);
+emit_32(1108962627);
+emit_32(3250290688);
+emit_32(1124900864);
+emit_32(1108736108);
+emit_32(3250290688);
+emit_32(1125156848);
+emit_32(1108614185);
+emit_32(3250290688);
+emit_32(1125412897);
+emit_32(1108533864);
+emit_32(3250290688);
+emit_32(1125668880);
+emit_32(1108590068);
+emit_32(3250290688);
+emit_32(1125924864);
+emit_32(1108802404);
+emit_32(3250290688);
+emit_32(1126180848);
+emit_32(1108700955);
+emit_32(3250290688);
+emit_32(1126436897);
+emit_32(1108392988);
+emit_32(3250290688);
+emit_32(1126692880);
+emit_32(1108021871);
+emit_32(3250290688);
+emit_32(1126948864);
+emit_32(1107615521);
+emit_32(3250290688);
+emit_32(1127204848);
+emit_32(1107132835);
+emit_32(3250290688);
+emit_32(1127460897);
+emit_32(1106307239);
+emit_32(3250290688);
+emit_32(1127716880);
+emit_32(1105259659);
+emit_32(3250290688);
+emit_32(1127972864);
+emit_32(1103882145);
+emit_32(3250290688);
+emit_32(1128228848);
+emit_32(1102498916);
+emit_32(3250290688);
+emit_32(1128484897);
+emit_32(1100712509);
+emit_32(3250290688);
+emit_32(1128740880);
+emit_32(1099497629);
+emit_32(3250290688);
+emit_32(1128996864);
+emit_32(1097686476);
+emit_32(3250290688);
+emit_32(1129252848);
+emit_32(1096996199);
+emit_32(3250290688);
+emit_32(1129508897);
+emit_32(1096729441);
+emit_32(3250290688);
+emit_32(1129764880);
+emit_32(1096118855);
+emit_32(3250290688);
+emit_32(1130020864);
+emit_32(1095816970);
+emit_32(3250290688);
+emit_32(1130276848);
+emit_32(1095839934);
+emit_32(3250290688);
+emit_32(1130532897);
+emit_32(1095807218);
+emit_32(3250290688);
+emit_32(1130788880);
+emit_32(1096112249);
+emit_32(3250290688);
+emit_32(1131044864);
+emit_32(1096393372);
+emit_32(3250290688);
+emit_32(1131300848);
+emit_32(1096168558);
+emit_32(3250290688);
+emit_32(1131556897);
+emit_32(1095322776);
+emit_32(3250290688);
+emit_32(1131812880);
+emit_32(1094576924);
+emit_32(3250290688);
+emit_32(1132068864);
+emit_32(1094020760);
+emit_32(3250290688);
+emit_32(1081737216);
+emit_32(1113988085);
+emit_32(3252338714);
+emit_32(1090125824);
+emit_32(1114065260);
+emit_32(3252338714);
+emit_32(1094418484);
+emit_32(1113997338);
+emit_32(3252338714);
+emit_32(1098514432);
+emit_32(1114054171);
+emit_32(3252338714);
+emit_32(1100759066);
+emit_32(1114320378);
+emit_32(3252338714);
+emit_32(1102807040);
+emit_32(1114467126);
+emit_32(3252338714);
+emit_32(1104855066);
+emit_32(1114435984);
+emit_32(3252338714);
+emit_32(1106903040);
+emit_32(1114341953);
+emit_32(3252338714);
+emit_32(1108123661);
+emit_32(1114299407);
+emit_32(3252338714);
+emit_32(1109147648);
+emit_32(1114563438);
+emit_32(3252338714);
+emit_32(1110171661);
+emit_32(1114648268);
+emit_32(3252338714);
+emit_32(1111195648);
+emit_32(1114546084);
+emit_32(3252338714);
+emit_32(1112219661);
+emit_32(1114619144);
+emit_32(3252338714);
+emit_32(1113243648);
+emit_32(1114743636);
+emit_32(3252338714);
+emit_32(1114267661);
+emit_32(1114455592);
+emit_32(3252338714);
+emit_32(1115291648);
+emit_32(1114088040);
+emit_32(3252338714);
+emit_32(1116000263);
+emit_32(1113929390);
+emit_32(3252338714);
+emit_32(1116512256);
+emit_32(1113476511);
+emit_32(3252338714);
+emit_32(1117024263);
+emit_32(1113251303);
+emit_32(3252338714);
+emit_32(1117536256);
+emit_32(1113169592);
+emit_32(3252338714);
+emit_32(1118048263);
+emit_32(1112818162);
+emit_32(3252338714);
+emit_32(1118560256);
+emit_32(1112268839);
+emit_32(3252338714);
+emit_32(1119072263);
+emit_32(1111908916);
+emit_32(3252338714);
+emit_32(1119584256);
+emit_32(1111826550);
+emit_32(3252338714);
+emit_32(1120096263);
+emit_32(1111731418);
+emit_32(3252338714);
+emit_32(1120608322);
+emit_32(1111230146);
+emit_32(3252338714);
+emit_32(1121120289);
+emit_32(1110553815);
+emit_32(3252338714);
+emit_32(1121632256);
+emit_32(1110036683);
+emit_32(3252338714);
+emit_32(1122144223);
+emit_32(1109799364);
+emit_32(3252338714);
+emit_32(1122656322);
+emit_32(1109771393);
+emit_32(3252338714);
+emit_32(1123168289);
+emit_32(1109709003);
+emit_32(3252338714);
+emit_32(1123680256);
+emit_32(1109442691);
+emit_32(3252338714);
+emit_32(1124132848);
+emit_32(1109517769);
+emit_32(3252338714);
+emit_32(1124388897);
+emit_32(1109424524);
+emit_32(3252338714);
+emit_32(1124644880);
+emit_32(1109080277);
+emit_32(3252338714);
+emit_32(1124900864);
+emit_32(1108875411);
+emit_32(3252338714);
+emit_32(1125156848);
+emit_32(1108744733);
+emit_32(3252338714);
+emit_32(1125412897);
+emit_32(1108572268);
+emit_32(3252338714);
+emit_32(1125668880);
+emit_32(1108842041);
+emit_32(3252338714);
+emit_32(1125924864);
+emit_32(1108992537);
+emit_32(3252338714);
+emit_32(1126180848);
+emit_32(1108824136);
+emit_32(3252338714);
+emit_32(1126436897);
+emit_32(1108504583);
+emit_32(3252338714);
+emit_32(1126692880);
+emit_32(1107939112);
+emit_32(3252338714);
+emit_32(1126948864);
+emit_32(1107373221);
+emit_32(3252338714);
+emit_32(1127204848);
+emit_32(1107163454);
+emit_32(3252338714);
+emit_32(1127460897);
+emit_32(1106219106);
+emit_32(3252338714);
+emit_32(1127716880);
+emit_32(1105070444);
+emit_32(3252338714);
+emit_32(1127972864);
+emit_32(1103725960);
+emit_32(3252338714);
+emit_32(1128228848);
+emit_32(1102334919);
+emit_32(3252338714);
+emit_32(1128484897);
+emit_32(1100777102);
+emit_32(3252338714);
+emit_32(1128740880);
+emit_32(1099662937);
+emit_32(3252338714);
+emit_32(1128996864);
+emit_32(1098431490);
+emit_32(3252338714);
+emit_32(1129252848);
+emit_32(1097775186);
+emit_32(3252338714);
+emit_32(1129508897);
+emit_32(1096256848);
+emit_32(3252338714);
+emit_32(1129764880);
+emit_32(1095754895);
+emit_32(3252338714);
+emit_32(1130020864);
+emit_32(1096060659);
+emit_32(3252338714);
+emit_32(1130276848);
+emit_32(1095067238);
+emit_32(3252338714);
+emit_32(1130532897);
+emit_32(1094771330);
+emit_32(3252338714);
+emit_32(1130788880);
+emit_32(1095212047);
+emit_32(3252338714);
+emit_32(1131044864);
+emit_32(1094803207);
+emit_32(3252338714);
+emit_32(1131300848);
+emit_32(1094921801);
+emit_32(3252338714);
+emit_32(1131556897);
+emit_32(1094618028);
+emit_32(3252338714);
+emit_32(1131812880);
+emit_32(1093381757);
+emit_32(3252338714);
+emit_32(1132068864);
+emit_32(1092728180);
+emit_32(3252338714);
+emit_32(1081737216);
+emit_32(1114484349);
+emit_32(3254386688);
+emit_32(1090125824);
+emit_32(1114516331);
+emit_32(3254386688);
+emit_32(1094418484);
+emit_32(1114316079);
+emit_32(3254386688);
+emit_32(1098514432);
+emit_32(1114579953);
+emit_32(3254386688);
+emit_32(1100759066);
+emit_32(1114764660);
+emit_32(3254386688);
+emit_32(1102807040);
+emit_32(1114796065);
+emit_32(3254386688);
+emit_32(1104855066);
+emit_32(1114724998);
+emit_32(3254386688);
+emit_32(1106903040);
+emit_32(1114516881);
+emit_32(3254386688);
+emit_32(1108123661);
+emit_32(1114291254);
+emit_32(3254386688);
+emit_32(1109147648);
+emit_32(1114334036);
+emit_32(3254386688);
+emit_32(1110171661);
+emit_32(1114475987);
+emit_32(3254386688);
+emit_32(1111195648);
+emit_32(1114491322);
+emit_32(3254386688);
+emit_32(1112219661);
+emit_32(1114531378);
+emit_32(3254386688);
+emit_32(1113243648);
+emit_32(1114372755);
+emit_32(3254386688);
+emit_32(1114267661);
+emit_32(1114308136);
+emit_32(3254386688);
+emit_32(1115291648);
+emit_32(1113743609);
+emit_32(3254386688);
+emit_32(1116000263);
+emit_32(1113664809);
+emit_32(3254386688);
+emit_32(1116512256);
+emit_32(1113231799);
+emit_32(3254386688);
+emit_32(1117024263);
+emit_32(1112995057);
+emit_32(3254386688);
+emit_32(1117536256);
+emit_32(1112878744);
+emit_32(3254386688);
+emit_32(1118048263);
+emit_32(1112754959);
+emit_32(3254386688);
+emit_32(1118560256);
+emit_32(1112570436);
+emit_32(3254386688);
+emit_32(1119072263);
+emit_32(1112364417);
+emit_32(3254386688);
+emit_32(1119584256);
+emit_32(1111993903);
+emit_32(3254386688);
+emit_32(1120096263);
+emit_32(1111795748);
+emit_32(3254386688);
+emit_32(1120608322);
+emit_32(1111345490);
+emit_32(3254386688);
+emit_32(1121120289);
+emit_32(1110601525);
+emit_32(3254386688);
+emit_32(1121632256);
+emit_32(1110149693);
+emit_32(3254386688);
+emit_32(1122144223);
+emit_32(1110165946);
+emit_32(3254386688);
+emit_32(1122656322);
+emit_32(1109981554);
+emit_32(3254386688);
+emit_32(1123168289);
+emit_32(1109825395);
+emit_32(3254386688);
+emit_32(1123680256);
+emit_32(1109816797);
+emit_32(3254386688);
+emit_32(1124132848);
+emit_32(1109710052);
+emit_32(3254386688);
+emit_32(1124388897);
+emit_32(1109602468);
+emit_32(3254386688);
+emit_32(1124644880);
+emit_32(1109349918);
+emit_32(3254386688);
+emit_32(1124900864);
+emit_32(1109069634);
+emit_32(3254386688);
+emit_32(1125156848);
+emit_32(1108800622);
+emit_32(3254386688);
+emit_32(1125412897);
+emit_32(1108662341);
+emit_32(3254386688);
+emit_32(1125668880);
+emit_32(1108955051);
+emit_32(3254386688);
+emit_32(1125924864);
+emit_32(1109069896);
+emit_32(3254386688);
+emit_32(1126180848);
+emit_32(1108753986);
+emit_32(3254386688);
+emit_32(1126436897);
+emit_32(1108343941);
+emit_32(3254386688);
+emit_32(1126692880);
+emit_32(1107751600);
+emit_32(3254386688);
+emit_32(1126948864);
+emit_32(1107299113);
+emit_32(3254386688);
+emit_32(1127204848);
+emit_32(1106833257);
+emit_32(3254386688);
+emit_32(1127460897);
+emit_32(1106258742);
+emit_32(3254386688);
+emit_32(1127716880);
+emit_32(1104970147);
+emit_32(3254386688);
+emit_32(1127972864);
+emit_32(1103641549);
+emit_32(3254386688);
+emit_32(1128228848);
+emit_32(1102486700);
+emit_32(3254386688);
+emit_32(1128484897);
+emit_32(1100950903);
+emit_32(3254386688);
+emit_32(1128740880);
+emit_32(1099783943);
+emit_32(3254386688);
+emit_32(1128996864);
+emit_32(1099048105);
+emit_32(3254386688);
+emit_32(1129252848);
+emit_32(1097916324);
+emit_32(3254386688);
+emit_32(1129508897);
+emit_32(1096849293);
+emit_32(3254386688);
+emit_32(1129764880);
+emit_32(1095290166);
+emit_32(3254386688);
+emit_32(1130020864);
+emit_32(1094873566);
+emit_32(3254386688);
+emit_32(1130276848);
+emit_32(1094773742);
+emit_32(3254386688);
+emit_32(1130532897);
+emit_32(1093963298);
+emit_32(3254386688);
+emit_32(1130788880);
+emit_32(1094288251);
+emit_32(3254386688);
+emit_32(1131044864);
+emit_32(1093582560);
+emit_32(3254386688);
+emit_32(1131300848);
+emit_32(1093578994);
+emit_32(3254386688);
+emit_32(1131556897);
+emit_32(1093961096);
+emit_32(3254386688);
+emit_32(1131812880);
+emit_32(1094270950);
+emit_32(3254386688);
+emit_32(1132068864);
+emit_32(1094226805);
+emit_32(3254386688);
+emit_32(1081737216);
+emit_32(1114694274);
+emit_32(3255607309);
+emit_32(1090125824);
+emit_32(1114471950);
+emit_32(3255607309);
+emit_32(1094418484);
+emit_32(1114251644);
+emit_32(3255607309);
+emit_32(1098514432);
+emit_32(1114525794);
+emit_32(3255607309);
+emit_32(1100759066);
+emit_32(1114675374);
+emit_32(3255607309);
+emit_32(1102807040);
+emit_32(1114775146);
+emit_32(3255607309);
+emit_32(1104855066);
+emit_32(1114776168);
+emit_32(3255607309);
+emit_32(1106903040);
+emit_32(1114678755);
+emit_32(3255607309);
+emit_32(1108123661);
+emit_32(1114267373);
+emit_32(3255607309);
+emit_32(1109147648);
+emit_32(1114095459);
+emit_32(3255607309);
+emit_32(1110171661);
+emit_32(1114227474);
+emit_32(3255607309);
+emit_32(1111195648);
+emit_32(1114305305);
+emit_32(3255607309);
+emit_32(1112219661);
+emit_32(1114012333);
+emit_32(3255607309);
+emit_32(1113243648);
+emit_32(1113935761);
+emit_32(3255607309);
+emit_32(1114267661);
+emit_32(1113756087);
+emit_32(3255607309);
+emit_32(1115291648);
+emit_32(1113651780);
+emit_32(3255607309);
+emit_32(1116000263);
+emit_32(1113622315);
+emit_32(3255607309);
+emit_32(1116512256);
+emit_32(1113238353);
+emit_32(3255607309);
+emit_32(1117024263);
+emit_32(1112877931);
+emit_32(3255607309);
+emit_32(1117536256);
+emit_32(1112868625);
+emit_32(3255607309);
+emit_32(1118048263);
+emit_32(1112560842);
+emit_32(3255607309);
+emit_32(1118560256);
+emit_32(1112530249);
+emit_32(3255607309);
+emit_32(1119072263);
+emit_32(1112251957);
+emit_32(3255607309);
+emit_32(1119584256);
+emit_32(1111883697);
+emit_32(3255607309);
+emit_32(1120096263);
+emit_32(1111510168);
+emit_32(3255607309);
+emit_32(1120608322);
+emit_32(1111049686);
+emit_32(3255607309);
+emit_32(1121120289);
+emit_32(1110465000);
+emit_32(3255607309);
+emit_32(1121632256);
+emit_32(1110143926);
+emit_32(3255607309);
+emit_32(1122144223);
+emit_32(1110128565);
+emit_32(3255607309);
+emit_32(1122656322);
+emit_32(1110170613);
+emit_32(3255607309);
+emit_32(1123168289);
+emit_32(1110002133);
+emit_32(3255607309);
+emit_32(1123680256);
+emit_32(1109827938);
+emit_32(3255607309);
+emit_32(1124132848);
+emit_32(1109697652);
+emit_32(3255607309);
+emit_32(1124388897);
+emit_32(1109285929);
+emit_32(3255607309);
+emit_32(1124644880);
+emit_32(1109015973);
+emit_32(3255607309);
+emit_32(1124900864);
+emit_32(1108853103);
+emit_32(3255607309);
+emit_32(1125156848);
+emit_32(1108675186);
+emit_32(3255607309);
+emit_32(1125412897);
+emit_32(1108706171);
+emit_32(3255607309);
+emit_32(1125668880);
+emit_32(1108840441);
+emit_32(3255607309);
+emit_32(1125924864);
+emit_32(1108822485);
+emit_32(3255607309);
+emit_32(1126180848);
+emit_32(1108425782);
+emit_32(3255607309);
+emit_32(1126436897);
+emit_32(1108131997);
+emit_32(3255607309);
+emit_32(1126692880);
+emit_32(1107626584);
+emit_32(3255607309);
+emit_32(1126948864);
+emit_32(1107199630);
+emit_32(3255607309);
+emit_32(1127204848);
+emit_32(1106951065);
+emit_32(3255607309);
+emit_32(1127460897);
+emit_32(1106261574);
+emit_32(3255607309);
+emit_32(1127716880);
+emit_32(1104881543);
+emit_32(3255607309);
+emit_32(1127972864);
+emit_32(1103438021);
+emit_32(3255607309);
+emit_32(1128228848);
+emit_32(1102185759);
+emit_32(3255607309);
+emit_32(1128484897);
+emit_32(1101110234);
+emit_32(3255607309);
+emit_32(1128740880);
+emit_32(1100328678);
+emit_32(3255607309);
+emit_32(1128996864);
+emit_32(1099613287);
+emit_32(3255607309);
+emit_32(1129252848);
+emit_32(1098156658);
+emit_32(3255607309);
+emit_32(1129508897);
+emit_32(1096407528);
+emit_32(3255607309);
+emit_32(1129764880);
+emit_32(1096170131);
+emit_32(3255607309);
+emit_32(1130020864);
+emit_32(1095690512);
+emit_32(3255607309);
+emit_32(1130276848);
+emit_32(1094209084);
+emit_32(3255607309);
+emit_32(1130532897);
+emit_32(1093127687);
+emit_32(3255607309);
+emit_32(1130788880);
+emit_32(1092438259);
+emit_32(3255607309);
+emit_32(1131044864);
+emit_32(1092531729);
+emit_32(3255607309);
+emit_32(1131300848);
+emit_32(1093627753);
+emit_32(3255607309);
+emit_32(1131556897);
+emit_32(1094279863);
+emit_32(3255607309);
+emit_32(1131812880);
+emit_32(1094536449);
+emit_32(3255607309);
+emit_32(1132068864);
+emit_32(1094652422);
+emit_32(3255607309);
+emit_32(1081737216);
+emit_32(1114612538);
+emit_32(3256631296);
+emit_32(1090125824);
+emit_32(1114274713);
+emit_32(3256631296);
+emit_32(1094418484);
+emit_32(1114042532);
+emit_32(3256631296);
+emit_32(1098514432);
+emit_32(1114371758);
+emit_32(3256631296);
+emit_32(1100759066);
+emit_32(1114654061);
+emit_32(3256631296);
+emit_32(1102807040);
+emit_32(1114778344);
+emit_32(3256631296);
+emit_32(1104855066);
+emit_32(1114758762);
+emit_32(3256631296);
+emit_32(1106903040);
+emit_32(1114526817);
+emit_32(3256631296);
+emit_32(1108123661);
+emit_32(1114218640);
+emit_32(3256631296);
+emit_32(1109147648);
+emit_32(1113983497);
+emit_32(3256631296);
+emit_32(1110171661);
+emit_32(1114023684);
+emit_32(3256631296);
+emit_32(1111195648);
+emit_32(1114065102);
+emit_32(3256631296);
+emit_32(1112219661);
+emit_32(1113899585);
+emit_32(3256631296);
+emit_32(1113243648);
+emit_32(1113503538);
+emit_32(3256631296);
+emit_32(1114267661);
+emit_32(1113409769);
+emit_32(3256631296);
+emit_32(1115291648);
+emit_32(1113402665);
+emit_32(3256631296);
+emit_32(1116000263);
+emit_32(1113537931);
+emit_32(3256631296);
+emit_32(1116512256);
+emit_32(1113144426);
+emit_32(3256631296);
+emit_32(1117024263);
+emit_32(1112966772);
+emit_32(3256631296);
+emit_32(1117536256);
+emit_32(1112729086);
+emit_32(3256631296);
+emit_32(1118048263);
+emit_32(1112420463);
+emit_32(3256631296);
+emit_32(1118560256);
+emit_32(1112416322);
+emit_32(3256631296);
+emit_32(1119072263);
+emit_32(1112175306);
+emit_32(3256631296);
+emit_32(1119584256);
+emit_32(1112112733);
+emit_32(3256631296);
+emit_32(1120096263);
+emit_32(1111723265);
+emit_32(3256631296);
+emit_32(1120608322);
+emit_32(1111230539);
+emit_32(3256631296);
+emit_32(1121120289);
+emit_32(1110568521);
+emit_32(3256631296);
+emit_32(1121632256);
+emit_32(1110333220);
+emit_32(3256631296);
+emit_32(1122144223);
+emit_32(1110249780);
+emit_32(3256631296);
+emit_32(1122656322);
+emit_32(1110285117);
+emit_32(3256631296);
+emit_32(1123168289);
+emit_32(1109907735);
+emit_32(3256631296);
+emit_32(1123680256);
+emit_32(1109777213);
+emit_32(3256631296);
+emit_32(1124132848);
+emit_32(1109451630);
+emit_32(3256631296);
+emit_32(1124388897);
+emit_32(1109111184);
+emit_32(3256631296);
+emit_32(1124644880);
+emit_32(1108792102);
+emit_32(3256631296);
+emit_32(1124900864);
+emit_32(1108776190);
+emit_32(3256631296);
+emit_32(1125156848);
+emit_32(1108834805);
+emit_32(3256631296);
+emit_32(1125412897);
+emit_32(1108715477);
+emit_32(3256631296);
+emit_32(1125668880);
+emit_32(1108660453);
+emit_32(3256631296);
+emit_32(1125924864);
+emit_32(1108548623);
+emit_32(3256631296);
+emit_32(1126180848);
+emit_32(1108317621);
+emit_32(3256631296);
+emit_32(1126436897);
+emit_32(1107958091);
+emit_32(3256631296);
+emit_32(1126692880);
+emit_32(1107488198);
+emit_32(3256631296);
+emit_32(1126948864);
+emit_32(1107323624);
+emit_32(3256631296);
+emit_32(1127204848);
+emit_32(1106940264);
+emit_32(3256631296);
+emit_32(1127460897);
+emit_32(1106131026);
+emit_32(3256631296);
+emit_32(1127716880);
+emit_32(1104537505);
+emit_32(3256631296);
+emit_32(1127972864);
+emit_32(1103113277);
+emit_32(3256631296);
+emit_32(1128228848);
+emit_32(1102198604);
+emit_32(3256631296);
+emit_32(1128484897);
+emit_32(1101660003);
+emit_32(3256631296);
+emit_32(1128740880);
+emit_32(1100980106);
+emit_32(3256631296);
+emit_32(1128996864);
+emit_32(1100131808);
+emit_32(3256631296);
+emit_32(1129252848);
+emit_32(1099325034);
+emit_32(3256631296);
+emit_32(1129508897);
+emit_32(1097933521);
+emit_32(3256631296);
+emit_32(1129764880);
+emit_32(1096350800);
+emit_32(3256631296);
+emit_32(1130020864);
+emit_32(1095937976);
+emit_32(3256631296);
+emit_32(1130276848);
+emit_32(1093950924);
+emit_32(3256631296);
+emit_32(1130532897);
+emit_32(1093143101);
+emit_32(3256631296);
+emit_32(1130788880);
+emit_32(1092323492);
+emit_32(3256631296);
+emit_32(1131044864);
+emit_32(1092516462);
+emit_32(3256631296);
+emit_32(1131300848);
+emit_32(1093374417);
+emit_32(3256631296);
+emit_32(1131556897);
+emit_32(1093934567);
+emit_32(3256631296);
+emit_32(1131812880);
+emit_32(1094793141);
+emit_32(3256631296);
+emit_32(1132068864);
+emit_32(1094610584);
+emit_32(3256631296);
+emit_32(1081737216);
+emit_32(1114510642);
+emit_32(3257655309);
+emit_32(1090125824);
+emit_32(1114177090);
+emit_32(3257655309);
+emit_32(1094418484);
+emit_32(1114130088);
+emit_32(3257655309);
+emit_32(1098514432);
+emit_32(1114485503);
+emit_32(3257655309);
+emit_32(1100759066);
+emit_32(1114774202);
+emit_32(3257655309);
+emit_32(1102807040);
+emit_32(1114811400);
+emit_32(3257655309);
+emit_32(1104855066);
+emit_32(1114642894);
+emit_32(3257655309);
+emit_32(1106903040);
+emit_32(1114125710);
+emit_32(3257655309);
+emit_32(1108123661);
+emit_32(1113782380);
+emit_32(3257655309);
+emit_32(1109147648);
+emit_32(1113903464);
+emit_32(3257655309);
+emit_32(1110171661);
+emit_32(1113893372);
+emit_32(3257655309);
+emit_32(1111195648);
+emit_32(1113835831);
+emit_32(3257655309);
+emit_32(1112219661);
+emit_32(1113519056);
+emit_32(3257655309);
+emit_32(1113243648);
+emit_32(1113402219);
+emit_32(3257655309);
+emit_32(1114267661);
+emit_32(1113222650);
+emit_32(3257655309);
+emit_32(1115291648);
+emit_32(1113112760);
+emit_32(3257655309);
+emit_32(1116000263);
+emit_32(1112977441);
+emit_32(3257655309);
+emit_32(1116512256);
+emit_32(1112883121);
+emit_32(3257655309);
+emit_32(1117024263);
+emit_32(1112823615);
+emit_32(3257655309);
+emit_32(1117536256);
+emit_32(1112700957);
+emit_32(3257655309);
+emit_32(1118048263);
+emit_32(1112438473);
+emit_32(3257655309);
+emit_32(1118560256);
+emit_32(1112053645);
+emit_32(3257655309);
+emit_32(1119072263);
+emit_32(1111879136);
+emit_32(3257655309);
+emit_32(1119584256);
+emit_32(1112020641);
+emit_32(3257655309);
+emit_32(1120096263);
+emit_32(1111750895);
+emit_32(3257655309);
+emit_32(1120608322);
+emit_32(1111255810);
+emit_32(3257655309);
+emit_32(1121120289);
+emit_32(1110557852);
+emit_32(3257655309);
+emit_32(1121632256);
+emit_32(1110574917);
+emit_32(3257655309);
+emit_32(1122144223);
+emit_32(1110468329);
+emit_32(3257655309);
+emit_32(1122656322);
+emit_32(1110138264);
+emit_32(3257655309);
+emit_32(1123168289);
+emit_32(1110059752);
+emit_32(3257655309);
+emit_32(1123680256);
+emit_32(1109798447);
+emit_32(3257655309);
+emit_32(1124132848);
+emit_32(1109243252);
+emit_32(3257655309);
+emit_32(1124388897);
+emit_32(1109362344);
+emit_32(3257655309);
+emit_32(1124644880);
+emit_32(1109167073);
+emit_32(3257655309);
+emit_32(1124900864);
+emit_32(1109064601);
+emit_32(3257655309);
+emit_32(1125156848);
+emit_32(1108980715);
+emit_32(3257655309);
+emit_32(1125412897);
+emit_32(1108866472);
+emit_32(3257655309);
+emit_32(1125668880);
+emit_32(1108651960);
+emit_32(3257655309);
+emit_32(1125924864);
+emit_32(1108356130);
+emit_32(3257655309);
+emit_32(1126180848);
+emit_32(1108103240);
+emit_32(3257655309);
+emit_32(1126436897);
+emit_32(1107651828);
+emit_32(3257655309);
+emit_32(1126692880);
+emit_32(1107336154);
+emit_32(3257655309);
+emit_32(1126948864);
+emit_32(1106756135);
+emit_32(3257655309);
+emit_32(1127204848);
+emit_32(1106100145);
+emit_32(3257655309);
+emit_32(1127460897);
+emit_32(1105225790);
+emit_32(3257655309);
+emit_32(1127716880);
+emit_32(1104058987);
+emit_32(3257655309);
+emit_32(1127972864);
+emit_32(1103547702);
+emit_32(3257655309);
+emit_32(1128228848);
+emit_32(1102526860);
+emit_32(3257655309);
+emit_32(1128484897);
+emit_32(1101431308);
+emit_32(3257655309);
+emit_32(1128740880);
+emit_32(1100829216);
+emit_32(3257655309);
+emit_32(1128996864);
+emit_32(1100205418);
+emit_32(3257655309);
+emit_32(1129252848);
+emit_32(1099550373);
+emit_32(3257655309);
+emit_32(1129508897);
+emit_32(1098506148);
+emit_32(3257655309);
+emit_32(1129764880);
+emit_32(1096071564);
+emit_32(3257655309);
+emit_32(1130020864);
+emit_32(1095937976);
+emit_32(3257655309);
+emit_32(1130276848);
+emit_32(1093431145);
+emit_32(3257655309);
+emit_32(1130532897);
+emit_32(1092220816);
+emit_32(3257655309);
+emit_32(1130788880);
+emit_32(1091857117);
+emit_32(3257655309);
+emit_32(1131044864);
+emit_32(1092062974);
+emit_32(3257655309);
+emit_32(1131300848);
+emit_32(1092869004);
+emit_32(3257655309);
+emit_32(1131556897);
+emit_32(1094057460);
+emit_32(3257655309);
+emit_32(1131812880);
+emit_32(1093644845);
+emit_32(3257655309);
+emit_32(1132068864);
+emit_32(1092544669);
+emit_32(3257655309);
+emit_32(1081737216);
+emit_32(1114350184);
+emit_32(3258679296);
+emit_32(1090125824);
+emit_32(1114346619);
+emit_32(3258679296);
+emit_32(1094418484);
+emit_32(1114421513);
+emit_32(3258679296);
+emit_32(1098514432);
+emit_32(1114700304);
+emit_32(3258679296);
+emit_32(1100759066);
+emit_32(1114796563);
+emit_32(3258679296);
+emit_32(1102807040);
+emit_32(1114621582);
+emit_32(3258679296);
+emit_32(1104855066);
+emit_32(1114296549);
+emit_32(3258679296);
+emit_32(1106903040);
+emit_32(1114209753);
+emit_32(3258679296);
+emit_32(1108123661);
+emit_32(1113856567);
+emit_32(3258679296);
+emit_32(1109147648);
+emit_32(1113867944);
+emit_32(3258679296);
+emit_32(1110171661);
+emit_32(1113863907);
+emit_32(3258679296);
+emit_32(1111195648);
+emit_32(1113532976);
+emit_32(3258679296);
+emit_32(1112219661);
+emit_32(1113290808);
+emit_32(3258679296);
+emit_32(1113243648);
+emit_32(1113017942);
+emit_32(3258679296);
+emit_32(1114267661);
+emit_32(1112948867);
+emit_32(3258679296);
+emit_32(1115291648);
+emit_32(1112695872);
+emit_32(3258679296);
+emit_32(1116000263);
+emit_32(1112643627);
+emit_32(3258679296);
+emit_32(1116512256);
+emit_32(1112588707);
+emit_32(3258679296);
+emit_32(1117024263);
+emit_32(1112603833);
+emit_32(3258679296);
+emit_32(1117536256);
+emit_32(1112628213);
+emit_32(3258679296);
+emit_32(1118048263);
+emit_32(1112273715);
+emit_32(3258679296);
+emit_32(1118560256);
+emit_32(1111859449);
+emit_32(3258679296);
+emit_32(1119072263);
+emit_32(1111576936);
+emit_32(3258679296);
+emit_32(1119584256);
+emit_32(1111726726);
+emit_32(3258679296);
+emit_32(1120096263);
+emit_32(1111402296);
+emit_32(3258679296);
+emit_32(1120608322);
+emit_32(1110549489);
+emit_32(3258679296);
+emit_32(1121120289);
+emit_32(1110448511);
+emit_32(3258679296);
+emit_32(1121632256);
+emit_32(1110373695);
+emit_32(3258679296);
+emit_32(1122144223);
+emit_32(1110467333);
+emit_32(3258679296);
+emit_32(1122656322);
+emit_32(1110274028);
+emit_32(3258679296);
+emit_32(1123168289);
+emit_32(1109946532);
+emit_32(3258679296);
+emit_32(1123680256);
+emit_32(1109626795);
+emit_32(3258679296);
+emit_32(1124132848);
+emit_32(1109494622);
+emit_32(3258679296);
+emit_32(1124388897);
+emit_32(1109413069);
+emit_32(3258679296);
+emit_32(1124644880);
+emit_32(1109297647);
+emit_32(3258679296);
+emit_32(1124900864);
+emit_32(1109062294);
+emit_32(3258679296);
+emit_32(1125156848);
+emit_32(1108844007);
+emit_32(3258679296);
+emit_32(1125412897);
+emit_32(1108568860);
+emit_32(3258679296);
+emit_32(1125668880);
+emit_32(1108450004);
+emit_32(3258679296);
+emit_32(1125924864);
+emit_32(1108186943);
+emit_32(3258679296);
+emit_32(1126180848);
+emit_32(1107845369);
+emit_32(3258679296);
+emit_32(1126436897);
+emit_32(1107362972);
+emit_32(3258679296);
+emit_32(1126692880);
+emit_32(1106252189);
+emit_32(3258679296);
+emit_32(1126948864);
+emit_32(1105829298);
+emit_32(3258679296);
+emit_32(1127204848);
+emit_32(1105218083);
+emit_32(3258679296);
+emit_32(1127460897);
+emit_32(1104523506);
+emit_32(3258679296);
+emit_32(1127716880);
+emit_32(1104128351);
+emit_32(3258679296);
+emit_32(1127972864);
+emit_32(1103796214);
+emit_32(3258679296);
+emit_32(1128228848);
+emit_32(1103027818);
+emit_32(3258679296);
+emit_32(1128484897);
+emit_32(1101322309);
+emit_32(3258679296);
+emit_32(1128740880);
+emit_32(1100681576);
+emit_32(3258679296);
+emit_32(1128996864);
+emit_32(1099668023);
+emit_32(3258679296);
+emit_32(1129252848);
+emit_32(1099208380);
+emit_32(3258679296);
+emit_32(1129508897);
+emit_32(1097801400);
+emit_32(3258679296);
+emit_32(1129764880);
+emit_32(1095333472);
+emit_32(3258679296);
+emit_32(1130020864);
+emit_32(1094540329);
+emit_32(3258679296);
+emit_32(1130276848);
+emit_32(1092787739);
+emit_32(3258679296);
+emit_32(1130532897);
+emit_32(1092315051);
+emit_32(3258679296);
+emit_32(1130788880);
+emit_32(1091861091);
+emit_32(3258679296);
+emit_32(1131044864);
+emit_32(1091047459);
+emit_32(3258679296);
+emit_32(1131300848);
+emit_32(1091787586);
+emit_32(3258679296);
+emit_32(1131556897);
+emit_32(1091795230);
+emit_32(3258679296);
+emit_32(1131812880);
+emit_32(1091987980);
+emit_32(3258679296);
+emit_32(1132068864);
+emit_32(1091100066);
+emit_32(3258679296);
+emit_32(1081737216);
+emit_32(1114597202);
+emit_32(3259703309);
+emit_32(1090125824);
+emit_32(1114535127);
+emit_32(3259703309);
+emit_32(1094418484);
+emit_32(1114569520);
+emit_32(3259703309);
+emit_32(1098514432);
+emit_32(1114747935);
+emit_32(3259703309);
+emit_32(1100759066);
+emit_32(1114487233);
+emit_32(3259703309);
+emit_32(1102807040);
+emit_32(1114382795);
+emit_32(3259703309);
+emit_32(1104855066);
+emit_32(1113996919);
+emit_32(3259703309);
+emit_32(1106903040);
+emit_32(1114099181);
+emit_32(3259703309);
+emit_32(1108123661);
+emit_32(1113852163);
+emit_32(3259703309);
+emit_32(1109147648);
+emit_32(1113652435);
+emit_32(3259703309);
+emit_32(1110171661);
+emit_32(1113551117);
+emit_32(3259703309);
+emit_32(1111195648);
+emit_32(1113386543);
+emit_32(3259703309);
+emit_32(1112219661);
+emit_32(1113298436);
+emit_32(3259703309);
+emit_32(1113243648);
+emit_32(1112846185);
+emit_32(3259703309);
+emit_32(1114267661);
+emit_32(1112699621);
+emit_32(3259703309);
+emit_32(1115291648);
+emit_32(1112253320);
+emit_32(3259703309);
+emit_32(1116000263);
+emit_32(1112228338);
+emit_32(3259703309);
+emit_32(1116512256);
+emit_32(1112085679);
+emit_32(3259703309);
+emit_32(1117024263);
+emit_32(1112407068);
+emit_32(3259703309);
+emit_32(1117536256);
+emit_32(1112221391);
+emit_32(3259703309);
+emit_32(1118048263);
+emit_32(1111896936);
+emit_32(3259703309);
+emit_32(1118560256);
+emit_32(1111579322);
+emit_32(3259703309);
+emit_32(1119072263);
+emit_32(1111494309);
+emit_32(3259703309);
+emit_32(1119584256);
+emit_32(1111163588);
+emit_32(3259703309);
+emit_32(1120096263);
+emit_32(1110845004);
+emit_32(3259703309);
+emit_32(1120608322);
+emit_32(1110534835);
+emit_32(3259703309);
+emit_32(1121120289);
+emit_32(1110661294);
+emit_32(3259703309);
+emit_32(1121632256);
+emit_32(1110709161);
+emit_32(3259703309);
+emit_32(1122144223);
+emit_32(1110566843);
+emit_32(3259703309);
+emit_32(1122656322);
+emit_32(1110304385);
+emit_32(3259703309);
+emit_32(1123168289);
+emit_32(1109925298);
+emit_32(3259703309);
+emit_32(1123680256);
+emit_32(1109647897);
+emit_32(3259703309);
+emit_32(1124132848);
+emit_32(1109489300);
+emit_32(3259703309);
+emit_32(1124388897);
+emit_32(1109413541);
+emit_32(3259703309);
+emit_32(1124644880);
+emit_32(1109402137);
+emit_32(3259703309);
+emit_32(1124900864);
+emit_32(1108939034);
+emit_32(3259703309);
+emit_32(1125156848);
+emit_32(1108484450);
+emit_32(3259703309);
+emit_32(1125412897);
+emit_32(1108297200);
+emit_32(3259703309);
+emit_32(1125668880);
+emit_32(1108185815);
+emit_32(3259703309);
+emit_32(1125924864);
+emit_32(1108077104);
+emit_32(3259703309);
+emit_32(1126180848);
+emit_32(1107688659);
+emit_32(3259703309);
+emit_32(1126436897);
+emit_32(1107166075);
+emit_32(3259703309);
+emit_32(1126692880);
+emit_32(1105985012);
+emit_32(3259703309);
+emit_32(1126948864);
+emit_32(1104765465);
+emit_32(3259703309);
+emit_32(1127204848);
+emit_32(1103884766);
+emit_32(3259703309);
+emit_32(1127460897);
+emit_32(1103770157);
+emit_32(3259703309);
+emit_32(1127716880);
+emit_32(1103747613);
+emit_32(3259703309);
+emit_32(1127972864);
+emit_32(1103380349);
+emit_32(3259703309);
+emit_32(1128228848);
+emit_32(1102807669);
+emit_32(3259703309);
+emit_32(1128484897);
+emit_32(1101721240);
+emit_32(3259703309);
+emit_32(1128740880);
+emit_32(1100629095);
+emit_32(3259703309);
+emit_32(1128996864);
+emit_32(1099835323);
+emit_32(3259703309);
+emit_32(1129252848);
+emit_32(1098920598);
+emit_32(3259703309);
+emit_32(1129508897);
+emit_32(1096752929);
+emit_32(3259703309);
+emit_32(1129764880);
+emit_32(1095066609);
+emit_32(3259703309);
+emit_32(1130020864);
+emit_32(1093563371);
+emit_32(3259703309);
+emit_32(1130276848);
+emit_32(1092693157);
+emit_32(3259703309);
+emit_32(1130532897);
+emit_32(1091653725);
+emit_32(3259703309);
+emit_32(1130788880);
+emit_32(1091615085);
+emit_32(3259703309);
+emit_32(1131044864);
+emit_32(1091394161);
+emit_32(3259703309);
+emit_32(1131300848);
+emit_32(1091605134);
+emit_32(3259703309);
+emit_32(1131556897);
+emit_32(1091638730);
+emit_32(3259703309);
+emit_32(1131812880);
+emit_32(1091599786);
+emit_32(3259703309);
+emit_32(1132068864);
+emit_32(1092266859);
+emit_32(3259703309);
+emit_32(1081737216);
+emit_32(1114739258);
+emit_32(3260727296);
+emit_32(1090125824);
+emit_32(1114878378);
+emit_32(3260727296);
+emit_32(1094418484);
+emit_32(1114870802);
+emit_32(3260727296);
+emit_32(1098514432);
+emit_32(1114770794);
+emit_32(3260727296);
+emit_32(1100759066);
+emit_32(1114231276);
+emit_32(3260727296);
+emit_32(1102807040);
+emit_32(1114104450);
+emit_32(3260727296);
+emit_32(1104855066);
+emit_32(1113868626);
+emit_32(3260727296);
+emit_32(1106903040);
+emit_32(1113833393);
+emit_32(3260727296);
+emit_32(1108123661);
+emit_32(1113996840);
+emit_32(3260727296);
+emit_32(1109147648);
+emit_32(1113765393);
+emit_32(3260727296);
+emit_32(1110171661);
+emit_32(1113650627);
+emit_32(3260727296);
+emit_32(1111195648);
+emit_32(1113342896);
+emit_32(3260727296);
+emit_32(1112219661);
+emit_32(1113156380);
+emit_32(3260727296);
+emit_32(1113243648);
+emit_32(1112582154);
+emit_32(3260727296);
+emit_32(1114267661);
+emit_32(1112346277);
+emit_32(3260727296);
+emit_32(1115291648);
+emit_32(1111870249);
+emit_32(3260727296);
+emit_32(1116000263);
+emit_32(1111605930);
+emit_32(3260727296);
+emit_32(1116512256);
+emit_32(1111495305);
+emit_32(3260727296);
+emit_32(1117024263);
+emit_32(1111701219);
+emit_32(3260727296);
+emit_32(1117536256);
+emit_32(1111545768);
+emit_32(3260727296);
+emit_32(1118048263);
+emit_32(1111442876);
+emit_32(3260727296);
+emit_32(1118560256);
+emit_32(1111332802);
+emit_32(3260727296);
+emit_32(1119072263);
+emit_32(1111091472);
+emit_32(3260727296);
+emit_32(1119584256);
+emit_32(1110805001);
+emit_32(3260727296);
+emit_32(1120096263);
+emit_32(1110581864);
+emit_32(3260727296);
+emit_32(1120608322);
+emit_32(1110742008);
+emit_32(3260727296);
+emit_32(1121120289);
+emit_32(1110855516);
+emit_32(3260727296);
+emit_32(1121632256);
+emit_32(1110816168);
+emit_32(3260727296);
+emit_32(1122144223);
+emit_32(1110551665);
+emit_32(3260727296);
+emit_32(1122656322);
+emit_32(1110342579);
+emit_32(3260727296);
+emit_32(1123168289);
+emit_32(1110183327);
+emit_32(3260727296);
+emit_32(1123680256);
+emit_32(1109713040);
+emit_32(3260727296);
+emit_32(1124132848);
+emit_32(1109405598);
+emit_32(3260727296);
+emit_32(1124388897);
+emit_32(1109483874);
+emit_32(3260727296);
+emit_32(1124644880);
+emit_32(1109243252);
+emit_32(3260727296);
+emit_32(1124900864);
+emit_32(1108683915);
+emit_32(3260727296);
+emit_32(1125156848);
+emit_32(1108334268);
+emit_32(3260727296);
+emit_32(1125412897);
+emit_32(1108021346);
+emit_32(3260727296);
+emit_32(1125668880);
+emit_32(1107650229);
+emit_32(3260727296);
+emit_32(1125924864);
+emit_32(1107734875);
+emit_32(3260727296);
+emit_32(1126180848);
+emit_32(1107447356);
+emit_32(3260727296);
+emit_32(1126436897);
+emit_32(1106611641);
+emit_32(3260727296);
+emit_32(1126692880);
+emit_32(1105656650);
+emit_32(3260727296);
+emit_32(1126948864);
+emit_32(1104580601);
+emit_32(3260727296);
+emit_32(1127204848);
+emit_32(1103477447);
+emit_32(3260727296);
+emit_32(1127460897);
+emit_32(1102867753);
+emit_32(3260727296);
+emit_32(1127716880);
+emit_32(1102847882);
+emit_32(3260727296);
+emit_32(1127972864);
+emit_32(1102763996);
+emit_32(3260727296);
+emit_32(1128228848);
+emit_32(1102458913);
+emit_32(3260727296);
+emit_32(1128484897);
+emit_32(1102197083);
+emit_32(3260727296);
+emit_32(1128740880);
+emit_32(1101514251);
+emit_32(3260727296);
+emit_32(1128996864);
+emit_32(1100242957);
+emit_32(3260727296);
+emit_32(1129252848);
+emit_32(1098935488);
+emit_32(3260727296);
+emit_32(1129508897);
+emit_32(1096397147);
+emit_32(3260727296);
+emit_32(1129764880);
+emit_32(1093735442);
+emit_32(3260727296);
+emit_32(1130020864);
+emit_32(1092509887);
+emit_32(3260727296);
+emit_32(1130276848);
+emit_32(1092214797);
+emit_32(3260727296);
+emit_32(1130532897);
+emit_32(1091179916);
+emit_32(3260727296);
+emit_32(1130788880);
+emit_32(1091523565);
+emit_32(3260727296);
+emit_32(1131044864);
+emit_32(1091405317);
+emit_32(3260727296);
+emit_32(1131300848);
+emit_32(1091481213);
+emit_32(3260727296);
+emit_32(1131556897);
+emit_32(1091769446);
+emit_32(3260727296);
+emit_32(1131812880);
+emit_32(1091742634);
+emit_32(3260727296);
+emit_32(1132068864);
+emit_32(1092008249);
+emit_32(3260727296);
+emit_32(1081737216);
+emit_32(1115049086);
+emit_32(3261751309);
+emit_32(1090125824);
+emit_32(1114962395);
+emit_32(3261751309);
+emit_32(1094418484);
+emit_32(1114740674);
+emit_32(3261751309);
+emit_32(1098514432);
+emit_32(1114486001);
+emit_32(3261751309);
+emit_32(1100759066);
+emit_32(1114250779);
+emit_32(3261751309);
+emit_32(1102807040);
+emit_32(1113755799);
+emit_32(3261751309);
+emit_32(1104855066);
+emit_32(1113604699);
+emit_32(3261751309);
+emit_32(1106903040);
+emit_32(1113715717);
+emit_32(3261751309);
+emit_32(1108123661);
+emit_32(1113733516);
+emit_32(3261751309);
+emit_32(1109147648);
+emit_32(1113783009);
+emit_32(3261751309);
+emit_32(1110171661);
+emit_32(1113496093);
+emit_32(3261751309);
+emit_32(1111195648);
+emit_32(1113237016);
+emit_32(3261751309);
+emit_32(1112219661);
+emit_32(1112990181);
+emit_32(3261751309);
+emit_32(1113243648);
+emit_32(1112521022);
+emit_32(3261751309);
+emit_32(1114267661);
+emit_32(1112125315);
+emit_32(3261751309);
+emit_32(1115291648);
+emit_32(1111604671);
+emit_32(3261751309);
+emit_32(1116000263);
+emit_32(1111264408);
+emit_32(3261751309);
+emit_32(1116512256);
+emit_32(1110967242);
+emit_32(3261751309);
+emit_32(1117024263);
+emit_32(1110960898);
+emit_32(3261751309);
+emit_32(1117536256);
+emit_32(1110766938);
+emit_32(3261751309);
+emit_32(1118048263);
+emit_32(1110773334);
+emit_32(3261751309);
+emit_32(1118560256);
+emit_32(1110772364);
+emit_32(3261751309);
+emit_32(1119072263);
+emit_32(1110784763);
+emit_32(3261751309);
+emit_32(1119584256);
+emit_32(1110671203);
+emit_32(3261751309);
+emit_32(1120096263);
+emit_32(1110537562);
+emit_32(3261751309);
+emit_32(1120608322);
+emit_32(1110731470);
+emit_32(3261751309);
+emit_32(1121120289);
+emit_32(1110870222);
+emit_32(3261751309);
+emit_32(1121632256);
+emit_32(1110602652);
+emit_32(3261751309);
+emit_32(1122144223);
+emit_32(1110529357);
+emit_32(3261751309);
+emit_32(1122656322);
+emit_32(1110527626);
+emit_32(3261751309);
+emit_32(1123168289);
+emit_32(1110155303);
+emit_32(3261751309);
+emit_32(1123680256);
+emit_32(1109558559);
+emit_32(3261751309);
+emit_32(1124132848);
+emit_32(1109729686);
+emit_32(3261751309);
+emit_32(1124388897);
+emit_32(1109466835);
+emit_32(3261751309);
+emit_32(1124644880);
+emit_32(1109238455);
+emit_32(3261751309);
+emit_32(1124900864);
+emit_32(1108631067);
+emit_32(3261751309);
+emit_32(1125156848);
+emit_32(1108053590);
+emit_32(3261751309);
+emit_32(1125412897);
+emit_32(1107431549);
+emit_32(3261751309);
+emit_32(1125668880);
+emit_32(1107275127);
+emit_32(3261751309);
+emit_32(1125924864);
+emit_32(1107085807);
+emit_32(3261751309);
+emit_32(1126180848);
+emit_32(1106875043);
+emit_32(3261751309);
+emit_32(1126436897);
+emit_32(1106465207);
+emit_32(3261751309);
+emit_32(1126692880);
+emit_32(1105739330);
+emit_32(3261751309);
+emit_32(1126948864);
+emit_32(1104828380);
+emit_32(3261751309);
+emit_32(1127204848);
+emit_32(1104194306);
+emit_32(3261751309);
+emit_32(1127460897);
+emit_32(1103488510);
+emit_32(3261751309);
+emit_32(1127716880);
+emit_32(1102913680);
+emit_32(3261751309);
+emit_32(1127972864);
+emit_32(1102738044);
+emit_32(3261751309);
+emit_32(1128228848);
+emit_32(1102513753);
+emit_32(3261751309);
+emit_32(1128484897);
+emit_32(1102220624);
+emit_32(3261751309);
+emit_32(1128740880);
+emit_32(1101685640);
+emit_32(3261751309);
+emit_32(1128996864);
+emit_32(1100932081);
+emit_32(3261751309);
+emit_32(1129252848);
+emit_32(1099376414);
+emit_32(3261751309);
+emit_32(1129508897);
+emit_32(1096550344);
+emit_32(3261751309);
+emit_32(1129764880);
+emit_32(1094603244);
+emit_32(3261751309);
+emit_32(1130020864);
+emit_32(1092245762);
+emit_32(3261751309);
+emit_32(1130276848);
+emit_32(1091851801);
+emit_32(3261751309);
+emit_32(1130532897);
+emit_32(1091990360);
+emit_32(3261751309);
+emit_32(1130788880);
+emit_32(1091469343);
+emit_32(3261751309);
+emit_32(1131044864);
+emit_32(1091186889);
+emit_32(3261751309);
+emit_32(1131300848);
+emit_32(1091680191);
+emit_32(3261751309);
+emit_32(1131556897);
+emit_32(1092249820);
+emit_32(3261751309);
+emit_32(1131812880);
+emit_32(1091787240);
+emit_32(3261751309);
+emit_32(1132068864);
+emit_32(1092823076);
+emit_32(3261751309);
+emit_32(1081737216);
+emit_32(1115189700);
+emit_32(3262775296);
+emit_32(1090125824);
+emit_32(1114804086);
+emit_32(3262775296);
+emit_32(1094418484);
+emit_32(1114524457);
+emit_32(3262775296);
+emit_32(1098514432);
+emit_32(1114431554);
+emit_32(3262775296);
+emit_32(1100759066);
+emit_32(1113978044);
+emit_32(3262775296);
+emit_32(1102807040);
+emit_32(1113530381);
+emit_32(3262775296);
+emit_32(1104855066);
+emit_32(1113581814);
+emit_32(3262775296);
+emit_32(1106903040);
+emit_32(1113583963);
+emit_32(3262775296);
+emit_32(1108123661);
+emit_32(1113510458);
+emit_32(3262775296);
+emit_32(1109147648);
+emit_32(1113580162);
+emit_32(3262775296);
+emit_32(1110171661);
+emit_32(1113244408);
+emit_32(3262775296);
+emit_32(1111195648);
+emit_32(1113012699);
+emit_32(3262775296);
+emit_32(1112219661);
+emit_32(1112648765);
+emit_32(3262775296);
+emit_32(1113243648);
+emit_32(1112238483);
+emit_32(3262775296);
+emit_32(1114267661);
+emit_32(1111804976);
+emit_32(3262775296);
+emit_32(1115291648);
+emit_32(1111412362);
+emit_32(3262775296);
+emit_32(1116000263);
+emit_32(1110827074);
+emit_32(3262775296);
+emit_32(1116512256);
+emit_32(1110530694);
+emit_32(3262775296);
+emit_32(1117024263);
+emit_32(1110239399);
+emit_32(3262775296);
+emit_32(1117536256);
+emit_32(1110405048);
+emit_32(3262775296);
+emit_32(1118048263);
+emit_32(1110532476);
+emit_32(3262775296);
+emit_32(1118560256);
+emit_32(1110521885);
+emit_32(3262775296);
+emit_32(1119072263);
+emit_32(1110500757);
+emit_32(3262775296);
+emit_32(1119584256);
+emit_32(1110457372);
+emit_32(3262775296);
+emit_32(1120096263);
+emit_32(1110371651);
+emit_32(3262775296);
+emit_32(1120608322);
+emit_32(1110583332);
+emit_32(3262775296);
+emit_32(1121120289);
+emit_32(1110579793);
+emit_32(3262775296);
+emit_32(1121632256);
+emit_32(1110326510);
+emit_32(3262775296);
+emit_32(1122144223);
+emit_32(1110576044);
+emit_32(3262775296);
+emit_32(1122656322);
+emit_32(1110255731);
+emit_32(3262775296);
+emit_32(1123168289);
+emit_32(1109817767);
+emit_32(3262775296);
+emit_32(1123680256);
+emit_32(1109393120);
+emit_32(3262775296);
+emit_32(1124132848);
+emit_32(1109645407);
+emit_32(3262775296);
+emit_32(1124388897);
+emit_32(1109352881);
+emit_32(3262775296);
+emit_32(1124644880);
+emit_32(1109118131);
+emit_32(3262775296);
+emit_32(1124900864);
+emit_32(1108538950);
+emit_32(3262775296);
+emit_32(1125156848);
+emit_32(1108056028);
+emit_32(3262775296);
+emit_32(1125412897);
+emit_32(1107693981);
+emit_32(3262775296);
+emit_32(1125668880);
+emit_32(1107060169);
+emit_32(3262775296);
+emit_32(1125924864);
+emit_32(1106929307);
+emit_32(3262775296);
+emit_32(1126180848);
+emit_32(1106668945);
+emit_32(3262775296);
+emit_32(1126436897);
+emit_32(1106423893);
+emit_32(3262775296);
+emit_32(1126692880);
+emit_32(1106097157);
+emit_32(3262775296);
+emit_32(1126948864);
+emit_32(1105689628);
+emit_32(3262775296);
+emit_32(1127204848);
+emit_32(1104863822);
+emit_32(3262775296);
+emit_32(1127460897);
+emit_32(1104431232);
+emit_32(3262775296);
+emit_32(1127716880);
+emit_32(1103727061);
+emit_32(3262775296);
+emit_32(1127972864);
+emit_32(1103036154);
+emit_32(3262775296);
+emit_32(1128228848);
+emit_32(1102391227);
+emit_32(3262775296);
+emit_32(1128484897);
+emit_32(1102074977);
+emit_32(3262775296);
+emit_32(1128740880);
+emit_32(1101512049);
+emit_32(3262775296);
+emit_32(1128996864);
+emit_32(1100231108);
+emit_32(3262775296);
+emit_32(1129252848);
+emit_32(1098399508);
+emit_32(3262775296);
+emit_32(1129508897);
+emit_32(1096015571);
+emit_32(3262775296);
+emit_32(1129764880);
+emit_32(1093673366);
+emit_32(3262775296);
+emit_32(1130020864);
+emit_32(1092539069);
+emit_32(3262775296);
+emit_32(1130276848);
+emit_32(1092267928);
+emit_32(3262775296);
+emit_32(1130532897);
+emit_32(1092764041);
+emit_32(3262775296);
+emit_32(1130788880);
+emit_32(1092150519);
+emit_32(3262775296);
+emit_32(1131044864);
+emit_32(1091502594);
+emit_32(3262775296);
+emit_32(1131300848);
+emit_32(1091946980);
+emit_32(3262775296);
+emit_32(1131556897);
+emit_32(1091906568);
+emit_32(3262775296);
+emit_32(1131812880);
+emit_32(1092505546);
+emit_32(3262775296);
+emit_32(1132068864);
+emit_32(1093985842);
+emit_32(3262775296);
+emit_32(1081737216);
+emit_32(1114860919);
+emit_32(3263483911);
+emit_32(1090125824);
+emit_32(1114455068);
+emit_32(3263483911);
+emit_32(1094418484);
+emit_32(1114274320);
+emit_32(3263483911);
+emit_32(1098514432);
+emit_32(1113998492);
+emit_32(3263483911);
+emit_32(1100759066);
+emit_32(1113229912);
+emit_32(3263483911);
+emit_32(1102807040);
+emit_32(1112963364);
+emit_32(3263483911);
+emit_32(1104855066);
+emit_32(1113085549);
+emit_32(3263483911);
+emit_32(1106903040);
+emit_32(1113193500);
+emit_32(3263483911);
+emit_32(1108123661);
+emit_32(1113051339);
+emit_32(3263483911);
+emit_32(1109147648);
+emit_32(1112914631);
+emit_32(3263483911);
+emit_32(1110171661);
+emit_32(1112713593);
+emit_32(3263483911);
+emit_32(1111195648);
+emit_32(1112530774);
+emit_32(3263483911);
+emit_32(1112219661);
+emit_32(1112319538);
+emit_32(3263483911);
+emit_32(1113243648);
+emit_32(1112017836);
+emit_32(3263483911);
+emit_32(1114267661);
+emit_32(1111480022);
+emit_32(3263483911);
+emit_32(1115291648);
+emit_32(1111044889);
+emit_32(3263483911);
+emit_32(1116000263);
+emit_32(1110559058);
+emit_32(3263483911);
+emit_32(1116512256);
+emit_32(1109970151);
+emit_32(3263483911);
+emit_32(1117024263);
+emit_32(1109713014);
+emit_32(3263483911);
+emit_32(1117536256);
+emit_32(1109844532);
+emit_32(3263483911);
+emit_32(1118048263);
+emit_32(1110110713);
+emit_32(3263483911);
+emit_32(1118560256);
+emit_32(1110168096);
+emit_32(3263483911);
+emit_32(1119072263);
+emit_32(1110188910);
+emit_32(3263483911);
+emit_32(1119584256);
+emit_32(1110300531);
+emit_32(3263483911);
+emit_32(1120096263);
+emit_32(1110086438);
+emit_32(3263483911);
+emit_32(1120608322);
+emit_32(1110098418);
+emit_32(3263483911);
+emit_32(1121120289);
+emit_32(1110207470);
+emit_32(3263483911);
+emit_32(1121632256);
+emit_32(1110104814);
+emit_32(3263483911);
+emit_32(1122144223);
+emit_32(1110042057);
+emit_32(3263483911);
+emit_32(1122656322);
+emit_32(1109977963);
+emit_32(3263483911);
+emit_32(1123168289);
+emit_32(1109719017);
+emit_32(3263483911);
+emit_32(1123680256);
+emit_32(1109491371);
+emit_32(3263483911);
+emit_32(1124132848);
+emit_32(1109439493);
+emit_32(3263483911);
+emit_32(1124388897);
+emit_32(1109273372);
+emit_32(3263483911);
+emit_32(1124644880);
+emit_32(1109142720);
+emit_32(3263483911);
+emit_32(1124900864);
+emit_32(1108647110);
+emit_32(3263483911);
+emit_32(1125156848);
+emit_32(1108078520);
+emit_32(3263483911);
+emit_32(1125412897);
+emit_32(1107629520);
+emit_32(3263483911);
+emit_32(1125668880);
+emit_32(1107405963);
+emit_32(3263483911);
+emit_32(1125924864);
+emit_32(1107180388);
+emit_32(3263483911);
+emit_32(1126180848);
+emit_32(1106634447);
+emit_32(3263483911);
+emit_32(1126436897);
+emit_32(1106537297);
+emit_32(3263483911);
+emit_32(1126692880);
+emit_32(1106021869);
+emit_32(3263483911);
+emit_32(1126948864);
+emit_32(1105710599);
+emit_32(3263483911);
+emit_32(1127204848);
+emit_32(1104910693);
+emit_32(3263483911);
+emit_32(1127460897);
+emit_32(1104565083);
+emit_32(3263483911);
+emit_32(1127716880);
+emit_32(1103934836);
+emit_32(3263483911);
+emit_32(1127972864);
+emit_32(1103249120);
+emit_32(3263483911);
+emit_32(1128228848);
+emit_32(1102145336);
+emit_32(3263483911);
+emit_32(1128484897);
+emit_32(1101411962);
+emit_32(3263483911);
+emit_32(1128740880);
+emit_32(1100959711);
+emit_32(3263483911);
+emit_32(1128996864);
+emit_32(1099510055);
+emit_32(3263483911);
+emit_32(1129252848);
+emit_32(1096815005);
+emit_32(3263483911);
+emit_32(1129508897);
+emit_32(1094088393);
+emit_32(3263483911);
+emit_32(1129764880);
+emit_32(1092617450);
+emit_32(3263483911);
+emit_32(1130020864);
+emit_32(1091201757);
+emit_32(3263483911);
+emit_32(1130276848);
+emit_32(1091975481);
+emit_32(3263483911);
+emit_32(1130532897);
+emit_32(1092051219);
+emit_32(3263483911);
+emit_32(1130788880);
+emit_32(1091427243);
+emit_32(3263483911);
+emit_32(1131044864);
+emit_32(1091236570);
+emit_32(3263483911);
+emit_32(1131300848);
+emit_32(1092364376);
+emit_32(3263483911);
+emit_32(1131556897);
+emit_32(1093015385);
+emit_32(3263483911);
+emit_32(1131812880);
+emit_32(1093629116);
+emit_32(3263483911);
+emit_32(1132068864);
+emit_32(1094121318);
+emit_32(3263483911);
+emit_32(1081737216);
+emit_32(1114412994);
+emit_32(3263995904);
+emit_32(1090125824);
+emit_32(1114056740);
+emit_32(3263995904);
+emit_32(1094418484);
+emit_32(1113478634);
+emit_32(3263995904);
+emit_32(1098514432);
+emit_32(1113153890);
+emit_32(3263995904);
+emit_32(1100759066);
+emit_32(1112554235);
+emit_32(3263995904);
+emit_32(1102807040);
+emit_32(1112170430);
+emit_32(3263995904);
+emit_32(1104855066);
+emit_32(1112241550);
+emit_32(3263995904);
+emit_32(1106903040);
+emit_32(1112360406);
+emit_32(3263995904);
+emit_32(1108123661);
+emit_32(1112453310);
+emit_32(3263995904);
+emit_32(1109147648);
+emit_32(1112310127);
+emit_32(3263995904);
+emit_32(1110171661);
+emit_32(1112440544);
+emit_32(3263995904);
+emit_32(1111195648);
+emit_32(1111943545);
+emit_32(3263995904);
+emit_32(1112219661);
+emit_32(1111698283);
+emit_32(3263995904);
+emit_32(1113243648);
+emit_32(1111330233);
+emit_32(3263995904);
+emit_32(1114267661);
+emit_32(1111083634);
+emit_32(3263995904);
+emit_32(1115291648);
+emit_32(1110768275);
+emit_32(3263995904);
+emit_32(1116000263);
+emit_32(1110145158);
+emit_32(3263995904);
+emit_32(1116512256);
+emit_32(1109629941);
+emit_32(3263995904);
+emit_32(1117024263);
+emit_32(1109269781);
+emit_32(3263995904);
+emit_32(1117536256);
+emit_32(1109302287);
+emit_32(3263995904);
+emit_32(1118048263);
+emit_32(1109529015);
+emit_32(3263995904);
+emit_32(1118560256);
+emit_32(1109660900);
+emit_32(3263995904);
+emit_32(1119072263);
+emit_32(1109901076);
+emit_32(3263995904);
+emit_32(1119584256);
+emit_32(1109952850);
+emit_32(3263995904);
+emit_32(1120096263);
+emit_32(1109778733);
+emit_32(3263995904);
+emit_32(1120608322);
+emit_32(1109570460);
+emit_32(3263995904);
+emit_32(1121120289);
+emit_32(1109713381);
+emit_32(3263995904);
+emit_32(1121632256);
+emit_32(1109646849);
+emit_32(3263995904);
+emit_32(1122144223);
+emit_32(1109683837);
+emit_32(3263995904);
+emit_32(1122656322);
+emit_32(1109578377);
+emit_32(3263995904);
+emit_32(1123168289);
+emit_32(1109348975);
+emit_32(3263995904);
+emit_32(1123680256);
+emit_32(1109644804);
+emit_32(3263995904);
+emit_32(1124132848);
+emit_32(1109851662);
+emit_32(3263995904);
+emit_32(1124388897);
+emit_32(1109688451);
+emit_32(3263995904);
+emit_32(1124644880);
+emit_32(1109357599);
+emit_32(3263995904);
+emit_32(1124900864);
+emit_32(1108828593);
+emit_32(3263995904);
+emit_32(1125156848);
+emit_32(1108185291);
+emit_32(3263995904);
+emit_32(1125412897);
+emit_32(1107780226);
+emit_32(3263995904);
+emit_32(1125668880);
+emit_32(1107584457);
+emit_32(3263995904);
+emit_32(1125924864);
+emit_32(1107420958);
+emit_32(3263995904);
+emit_32(1126180848);
+emit_32(1107022525);
+emit_32(3263995904);
+emit_32(1126436897);
+emit_32(1105944170);
+emit_32(3263995904);
+emit_32(1126692880);
+emit_32(1105239946);
+emit_32(3263995904);
+emit_32(1126948864);
+emit_32(1105095295);
+emit_32(3263995904);
+emit_32(1127204848);
+emit_32(1104538816);
+emit_32(3263995904);
+emit_32(1127460897);
+emit_32(1103876692);
+emit_32(3263995904);
+emit_32(1127716880);
+emit_32(1103498786);
+emit_32(3263995904);
+emit_32(1127972864);
+emit_32(1102542589);
+emit_32(3263995904);
+emit_32(1128228848);
+emit_32(1101655913);
+emit_32(3263995904);
+emit_32(1128484897);
+emit_32(1100746955);
+emit_32(3263995904);
+emit_32(1128740880);
+emit_32(1099747662);
+emit_32(3263995904);
+emit_32(1128996864);
+emit_32(1098190422);
+emit_32(3263995904);
+emit_32(1129252848);
+emit_32(1095504599);
+emit_32(3263995904);
+emit_32(1129508897);
+emit_32(1092998503);
+emit_32(3263995904);
+emit_32(1129764880);
+emit_32(1090781394);
+emit_32(3263995904);
+emit_32(1130020864);
+emit_32(1090669165);
+emit_32(3263995904);
+emit_32(1130276848);
+emit_32(1091201548);
+emit_32(3263995904);
+emit_32(1130532897);
+emit_32(1091148238);
+emit_32(3263995904);
+emit_32(1130788880);
+emit_32(1091128944);
+emit_32(3263995904);
+emit_32(1131044864);
+emit_32(1091988745);
+emit_32(3263995904);
+emit_32(1131300848);
+emit_32(1092577195);
+emit_32(3263995904);
+emit_32(1131556897);
+emit_32(1092426756);
+emit_32(3263995904);
+emit_32(1131812880);
+emit_32(1092938944);
+emit_32(3263995904);
+emit_32(1132068864);
+emit_32(1093077985);
+emit_32(3263995904);
+emit_32(1081737216);
+emit_32(1113723162);
+emit_32(3264507911);
+emit_32(1090125824);
+emit_32(1113515282);
+emit_32(3264507911);
+emit_32(1094418484);
+emit_32(1112907160);
+emit_32(3264507911);
+emit_32(1098514432);
+emit_32(1112285197);
+emit_32(3264507911);
+emit_32(1100759066);
+emit_32(1111782615);
+emit_32(3264507911);
+emit_32(1102807040);
+emit_32(1111448565);
+emit_32(3264507911);
+emit_32(1104855066);
+emit_32(1111432364);
+emit_32(3264507911);
+emit_32(1106903040);
+emit_32(1111593242);
+emit_32(3264507911);
+emit_32(1108123661);
+emit_32(1111556175);
+emit_32(3264507911);
+emit_32(1109147648);
+emit_32(1111791947);
+emit_32(3264507911);
+emit_32(1110171661);
+emit_32(1111706147);
+emit_32(3264507911);
+emit_32(1111195648);
+emit_32(1111342658);
+emit_32(3264507911);
+emit_32(1112219661);
+emit_32(1111241785);
+emit_32(3264507911);
+emit_32(1113243648);
+emit_32(1110814700);
+emit_32(3264507911);
+emit_32(1114267661);
+emit_32(1110530720);
+emit_32(3264507911);
+emit_32(1115291648);
+emit_32(1110173496);
+emit_32(3264507911);
+emit_32(1116000263);
+emit_32(1109779887);
+emit_32(3264507911);
+emit_32(1116512256);
+emit_32(1109242701);
+emit_32(3264507911);
+emit_32(1117024263);
+emit_32(1108763528);
+emit_32(3264507911);
+emit_32(1117536256);
+emit_32(1108823140);
+emit_32(3264507911);
+emit_32(1118048263);
+emit_32(1109120202);
+emit_32(3264507911);
+emit_32(1118560256);
+emit_32(1109432205);
+emit_32(3264507911);
+emit_32(1119072263);
+emit_32(1109682684);
+emit_32(3264507911);
+emit_32(1119584256);
+emit_32(1109558821);
+emit_32(3264507911);
+emit_32(1120096263);
+emit_32(1109416031);
+emit_32(3264507911);
+emit_32(1120608322);
+emit_32(1109479208);
+emit_32(3264507911);
+emit_32(1121120289);
+emit_32(1109404235);
+emit_32(3264507911);
+emit_32(1121632256);
+emit_32(1109406882);
+emit_32(3264507911);
+emit_32(1122144223);
+emit_32(1109258378);
+emit_32(3264507911);
+emit_32(1122656322);
+emit_32(1109286008);
+emit_32(3264507911);
+emit_32(1123168289);
+emit_32(1109433857);
+emit_32(3264507911);
+emit_32(1123680256);
+emit_32(1109483166);
+emit_32(3264507911);
+emit_32(1124132848);
+emit_32(1109859762);
+emit_32(3264507911);
+emit_32(1124388897);
+emit_32(1109785995);
+emit_32(3264507911);
+emit_32(1124644880);
+emit_32(1109694218);
+emit_32(3264507911);
+emit_32(1124900864);
+emit_32(1109081588);
+emit_32(3264507911);
+emit_32(1125156848);
+emit_32(1108301316);
+emit_32(3264507911);
+emit_32(1125412897);
+emit_32(1107987923);
+emit_32(3264507911);
+emit_32(1125668880);
+emit_32(1107744208);
+emit_32(3264507911);
+emit_32(1125924864);
+emit_32(1107483348);
+emit_32(3264507911);
+emit_32(1126180848);
+emit_32(1106653741);
+emit_32(3264507911);
+emit_32(1126436897);
+emit_32(1105289282);
+emit_32(3264507911);
+emit_32(1126692880);
+emit_32(1104749946);
+emit_32(3264507911);
+emit_32(1126948864);
+emit_32(1104530532);
+emit_32(3264507911);
+emit_32(1127204848);
+emit_32(1104035552);
+emit_32(3264507911);
+emit_32(1127460897);
+emit_32(1103561123);
+emit_32(3264507911);
+emit_32(1127716880);
+emit_32(1102839493);
+emit_32(3264507911);
+emit_32(1127972864);
+emit_32(1102745908);
+emit_32(3264507911);
+emit_32(1128228848);
+emit_32(1102238083);
+emit_32(3264507911);
+emit_32(1128484897);
+emit_32(1101176504);
+emit_32(3264507911);
+emit_32(1128740880);
+emit_32(1099585395);
+emit_32(3264507911);
+emit_32(1128996864);
+emit_32(1097910033);
+emit_32(3264507911);
+emit_32(1129252848);
+emit_32(1094998662);
+emit_32(3264507911);
+emit_32(1129508897);
+emit_32(1092197905);
+emit_32(3264507911);
+emit_32(1129764880);
+emit_32(1089185482);
+emit_32(3264507911);
+emit_32(1130020864);
+emit_32(1088998898);
+emit_32(3264507911);
+emit_32(1130276848);
+emit_32(1090896014);
+emit_32(3264507911);
+emit_32(1130532897);
+emit_32(1090711286);
+emit_32(3264507911);
+emit_32(1130788880);
+emit_32(1091554068);
+emit_32(3264507911);
+emit_32(1131044864);
+emit_32(1091546760);
+emit_32(3264507911);
+emit_32(1131300848);
+emit_32(1091602523);
+emit_32(3264507911);
+emit_32(1131556897);
+emit_32(1091448749);
+emit_32(3264507911);
+emit_32(1131812880);
+emit_32(1091178993);
+emit_32(3264507911);
+emit_32(1132068864);
+emit_32(1092283059);
+emit_32(3264507911);
+emit_32(1081737216);
+emit_32(1113178820);
+emit_32(3265019904);
+emit_32(1090125824);
+emit_32(1112815043);
+emit_32(3265019904);
+emit_32(1094418484);
+emit_32(1112334769);
+emit_32(3265019904);
+emit_32(1098514432);
+emit_32(1111680641);
+emit_32(3265019904);
+emit_32(1100759066);
+emit_32(1110962104);
+emit_32(3265019904);
+emit_32(1102807040);
+emit_32(1110710079);
+emit_32(3265019904);
+emit_32(1104855066);
+emit_32(1110785366);
+emit_32(3265019904);
+emit_32(1106903040);
+emit_32(1110945956);
+emit_32(3265019904);
+emit_32(1108123661);
+emit_32(1111176643);
+emit_32(3265019904);
+emit_32(1109147648);
+emit_32(1111187364);
+emit_32(3265019904);
+emit_32(1110171661);
+emit_32(1110966901);
+emit_32(3265019904);
+emit_32(1111195648);
+emit_32(1110878952);
+emit_32(3265019904);
+emit_32(1112219661);
+emit_32(1110825343);
+emit_32(3265019904);
+emit_32(1113243648);
+emit_32(1110299718);
+emit_32(3265019904);
+emit_32(1114267661);
+emit_32(1109951067);
+emit_32(3265019904);
+emit_32(1115291648);
+emit_32(1109657859);
+emit_32(3265019904);
+emit_32(1116000263);
+emit_32(1109104185);
+emit_32(3265019904);
+emit_32(1116512256);
+emit_32(1108869644);
+emit_32(3265019904);
+emit_32(1117024263);
+emit_32(1108483296);
+emit_32(3265019904);
+emit_32(1117536256);
+emit_32(1108620057);
+emit_32(3265019904);
+emit_32(1118048263);
+emit_32(1108696603);
+emit_32(3265019904);
+emit_32(1118560256);
+emit_32(1109027874);
+emit_32(3265019904);
+emit_32(1119072263);
+emit_32(1109328580);
+emit_32(3265019904);
+emit_32(1119584256);
+emit_32(1109485499);
+emit_32(3265019904);
+emit_32(1120096263);
+emit_32(1109574785);
+emit_32(3265019904);
+emit_32(1120608322);
+emit_32(1109596203);
+emit_32(3265019904);
+emit_32(1121120289);
+emit_32(1109472235);
+emit_32(3265019904);
+emit_32(1121632256);
+emit_32(1109210510);
+emit_32(3265019904);
+emit_32(1122144223);
+emit_32(1109167152);
+emit_32(3265019904);
+emit_32(1122656322);
+emit_32(1109362999);
+emit_32(3265019904);
+emit_32(1123168289);
+emit_32(1109542149);
+emit_32(3265019904);
+emit_32(1123680256);
+emit_32(1109608156);
+emit_32(3265019904);
+emit_32(1124132848);
+emit_32(1109889647);
+emit_32(3265019904);
+emit_32(1124388897);
+emit_32(1110013300);
+emit_32(3265019904);
+emit_32(1124644880);
+emit_32(1109719908);
+emit_32(3265019904);
+emit_32(1124900864);
+emit_32(1109054299);
+emit_32(3265019904);
+emit_32(1125156848);
+emit_32(1108598561);
+emit_32(3265019904);
+emit_32(1125412897);
+emit_32(1108352696);
+emit_32(3265019904);
+emit_32(1125668880);
+emit_32(1107819128);
+emit_32(3265019904);
+emit_32(1125924864);
+emit_32(1107355868);
+emit_32(3265019904);
+emit_32(1126180848);
+emit_32(1106496193);
+emit_32(3265019904);
+emit_32(1126436897);
+emit_32(1105447564);
+emit_32(3265019904);
+emit_32(1126692880);
+emit_32(1104791208);
+emit_32(3265019904);
+emit_32(1126948864);
+emit_32(1104514122);
+emit_32(3265019904);
+emit_32(1127204848);
+emit_32(1103658956);
+emit_32(3265019904);
+emit_32(1127460897);
+emit_32(1103186887);
+emit_32(3265019904);
+emit_32(1127716880);
+emit_32(1103111179);
+emit_32(3265019904);
+emit_32(1127972864);
+emit_32(1103121823);
+emit_32(3265019904);
+emit_32(1128228848);
+emit_32(1102278872);
+emit_32(3265019904);
+emit_32(1128484897);
+emit_32(1100851603);
+emit_32(3265019904);
+emit_32(1128740880);
+emit_32(1099479699);
+emit_32(3265019904);
+emit_32(1128996864);
+emit_32(1097632580);
+emit_32(3265019904);
+emit_32(1129252848);
+emit_32(1094591185);
+emit_32(3265019904);
+emit_32(1129508897);
+emit_32(1091931629);
+emit_32(3265019904);
+emit_32(1129764880);
+emit_32(1088905806);
+emit_32(3265019904);
+emit_32(1130020864);
+emit_32(1090343655);
+emit_32(3265019904);
+emit_32(1130276848);
+emit_32(1091249918);
+emit_32(3265019904);
+emit_32(1130532897);
+emit_32(1091107417);
+emit_32(3265019904);
+emit_32(1130788880);
+emit_32(1092474068);
+emit_32(3265019904);
+emit_32(1131044864);
+emit_32(1091844765);
+emit_32(3265019904);
+emit_32(1131300848);
+emit_32(1091016830);
+emit_32(3265019904);
+emit_32(1131556897);
+emit_32(1090180560);
+emit_32(3265019904);
+emit_32(1131812880);
+emit_32(1090146502);
+emit_32(3265019904);
+emit_32(1132068864);
+emit_32(1091238625);
+emit_32(3265019904);
+emit_32(1081737216);
+emit_32(1112525767);
+emit_32(3265531911);
+emit_32(1090125824);
+emit_32(1112045230);
+emit_32(3265531911);
+emit_32(1094418484);
+emit_32(1111728246);
+emit_32(3265531911);
+emit_32(1098514432);
+emit_32(1111134490);
+emit_32(3265531911);
+emit_32(1100759066);
+emit_32(1110592061);
+emit_32(3265531911);
+emit_32(1102807040);
+emit_32(1110293873);
+emit_32(3265531911);
+emit_32(1104855066);
+emit_32(1110356761);
+emit_32(3265531911);
+emit_32(1106903040);
+emit_32(1110662159);
+emit_32(3265531911);
+emit_32(1108123661);
+emit_32(1110710760);
+emit_32(3265531911);
+emit_32(1109147648);
+emit_32(1110634267);
+emit_32(3265531911);
+emit_32(1110171661);
+emit_32(1110559556);
+emit_32(3265531911);
+emit_32(1111195648);
+emit_32(1110659144);
+emit_32(3265531911);
+emit_32(1112219661);
+emit_32(1110325251);
+emit_32(3265531911);
+emit_32(1113243648);
+emit_32(1109714954);
+emit_32(3265531911);
+emit_32(1114267661);
+emit_32(1109517035);
+emit_32(3265531911);
+emit_32(1115291648);
+emit_32(1108983441);
+emit_32(3265531911);
+emit_32(1116000263);
+emit_32(1108437998);
+emit_32(3265531911);
+emit_32(1116512256);
+emit_32(1108232687);
+emit_32(3265531911);
+emit_32(1117024263);
+emit_32(1108084497);
+emit_32(3265531911);
+emit_32(1117536256);
+emit_32(1108299979);
+emit_32(3265531911);
+emit_32(1118048263);
+emit_32(1108631434);
+emit_32(3265531911);
+emit_32(1118560256);
+emit_32(1108895544);
+emit_32(3265531911);
+emit_32(1119072263);
+emit_32(1109120306);
+emit_32(3265531911);
+emit_32(1119584256);
+emit_32(1109413095);
+emit_32(3265531911);
+emit_32(1120096263);
+emit_32(1109497977);
+emit_32(3265531911);
+emit_32(1120608322);
+emit_32(1109458603);
+emit_32(3265531911);
+emit_32(1121120289);
+emit_32(1109373328);
+emit_32(3265531911);
+emit_32(1121632256);
+emit_32(1109400669);
+emit_32(3265531911);
+emit_32(1122144223);
+emit_32(1109567655);
+emit_32(3265531911);
+emit_32(1122656322);
+emit_32(1109574287);
+emit_32(3265531911);
+emit_32(1123168289);
+emit_32(1109599375);
+emit_32(3265531911);
+emit_32(1123680256);
+emit_32(1109804660);
+emit_32(3265531911);
+emit_32(1124132848);
+emit_32(1109874704);
+emit_32(3265531911);
+emit_32(1124388897);
+emit_32(1109814254);
+emit_32(3265531911);
+emit_32(1124644880);
+emit_32(1109294763);
+emit_32(3265531911);
+emit_32(1124900864);
+emit_32(1109046460);
+emit_32(3265531911);
+emit_32(1125156848);
+emit_32(1108605901);
+emit_32(3265531911);
+emit_32(1125412897);
+emit_32(1108298039);
+emit_32(3265531911);
+emit_32(1125668880);
+emit_32(1108029997);
+emit_32(3265531911);
+emit_32(1125924864);
+emit_32(1107621262);
+emit_32(3265531911);
+emit_32(1126180848);
+emit_32(1106659980);
+emit_32(3265531911);
+emit_32(1126436897);
+emit_32(1105554362);
+emit_32(3265531911);
+emit_32(1126692880);
+emit_32(1104494356);
+emit_32(3265531911);
+emit_32(1126948864);
+emit_32(1104060455);
+emit_32(3265531911);
+emit_32(1127204848);
+emit_32(1103517817);
+emit_32(3265531911);
+emit_32(1127460897);
+emit_32(1102225500);
+emit_32(3265531911);
+emit_32(1127716880);
+emit_32(1102665010);
+emit_32(3265531911);
+emit_32(1127972864);
+emit_32(1102667894);
+emit_32(3265531911);
+emit_32(1128228848);
+emit_32(1101705144);
+emit_32(3265531911);
+emit_32(1128484897);
+emit_32(1100387503);
+emit_32(3265531911);
+emit_32(1128740880);
+emit_32(1099194486);
+emit_32(3265531911);
+emit_32(1128996864);
+emit_32(1097299866);
+emit_32(3265531911);
+emit_32(1129252848);
+emit_32(1093825515);
+emit_32(3265531911);
+emit_32(1129508897);
+emit_32(1090816720);
+emit_32(3265531911);
+emit_32(1129764880);
+emit_32(1090544321);
+emit_32(3265531911);
+emit_32(1130020864);
+emit_32(1090558718);
+emit_32(3265531911);
+emit_32(1130276848);
+emit_32(1090808845);
+emit_32(3265531911);
+emit_32(1130532897);
+emit_32(1090674481);
+emit_32(3265531911);
+emit_32(1130788880);
+emit_32(1090993898);
+emit_32(3265531911);
+emit_32(1131044864);
+emit_32(1090749297);
+emit_32(3265531911);
+emit_32(1131300848);
+emit_32(1090783533);
+emit_32(3265531911);
+emit_32(1131556897);
+emit_32(1089829685);
+emit_32(3265531911);
+emit_32(1131812880);
+emit_32(1090562483);
+emit_32(3265531911);
+emit_32(1132068864);
+emit_32(1091169052);
+emit_32(3265531911);
+emit_32(1081737216);
+emit_32(1112016683);
+emit_32(3266043904);
+emit_32(1090125824);
+emit_32(1111610963);
+emit_32(3266043904);
+emit_32(1094418484);
+emit_32(1110972380);
+emit_32(3266043904);
+emit_32(1098514432);
+emit_32(1110456559);
+emit_32(3266043904);
+emit_32(1100759066);
+emit_32(1110004833);
+emit_32(3266043904);
+emit_32(1102807040);
+emit_32(1109891010);
+emit_32(3266043904);
+emit_32(1104855066);
+emit_32(1110020745);
+emit_32(3266043904);
+emit_32(1106903040);
+emit_32(1110210065);
+emit_32(3266043904);
+emit_32(1108123661);
+emit_32(1110213526);
+emit_32(3266043904);
+emit_32(1109147648);
+emit_32(1110290465);
+emit_32(3266043904);
+emit_32(1110171661);
+emit_32(1110321843);
+emit_32(3266043904);
+emit_32(1111195648);
+emit_32(1109977832);
+emit_32(3266043904);
+emit_32(1112219661);
+emit_32(1109631120);
+emit_32(3266043904);
+emit_32(1113243648);
+emit_32(1109240762);
+emit_32(3266043904);
+emit_32(1114267661);
+emit_32(1108674478);
+emit_32(3266043904);
+emit_32(1115291648);
+emit_32(1108141775);
+emit_32(3266043904);
+emit_32(1116000263);
+emit_32(1107789637);
+emit_32(3266043904);
+emit_32(1116512256);
+emit_32(1107598534);
+emit_32(3266043904);
+emit_32(1117024263);
+emit_32(1107892555);
+emit_32(3266043904);
+emit_32(1117536256);
+emit_32(1108239712);
+emit_32(3266043904);
+emit_32(1118048263);
+emit_32(1108608811);
+emit_32(3266043904);
+emit_32(1118560256);
+emit_32(1108738520);
+emit_32(3266043904);
+emit_32(1119072263);
+emit_32(1108905191);
+emit_32(3266043904);
+emit_32(1119584256);
+emit_32(1109116820);
+emit_32(3266043904);
+emit_32(1120096263);
+emit_32(1109110843);
+emit_32(3266043904);
+emit_32(1120608322);
+emit_32(1109093384);
+emit_32(3266043904);
+emit_32(1121120289);
+emit_32(1109277331);
+emit_32(3266043904);
+emit_32(1121632256);
+emit_32(1109425678);
+emit_32(3266043904);
+emit_32(1122144223);
+emit_32(1109587814);
+emit_32(3266043904);
+emit_32(1122656322);
+emit_32(1109495330);
+emit_32(3266043904);
+emit_32(1123168289);
+emit_32(1109569438);
+emit_32(3266043904);
+emit_32(1123680256);
+emit_32(1109583358);
+emit_32(3266043904);
+emit_32(1124132848);
+emit_32(1109553945);
+emit_32(3266043904);
+emit_32(1124388897);
+emit_32(1109310833);
+emit_32(3266043904);
+emit_32(1124644880);
+emit_32(1109184820);
+emit_32(3266043904);
+emit_32(1124900864);
+emit_32(1108916725);
+emit_32(3266043904);
+emit_32(1125156848);
+emit_32(1108501594);
+emit_32(3266043904);
+emit_32(1125412897);
+emit_32(1108421037);
+emit_32(3266043904);
+emit_32(1125668880);
+emit_32(1108052070);
+emit_32(3266043904);
+emit_32(1125924864);
+emit_32(1107663887);
+emit_32(3266043904);
+emit_32(1126180848);
+emit_32(1106901100);
+emit_32(3266043904);
+emit_32(1126436897);
+emit_32(1105810896);
+emit_32(3266043904);
+emit_32(1126692880);
+emit_32(1104533153);
+emit_32(3266043904);
+emit_32(1126948864);
+emit_32(1103280577);
+emit_32(3266043904);
+emit_32(1127204848);
+emit_32(1102832153);
+emit_32(3266043904);
+emit_32(1127460897);
+emit_32(1101711226);
+emit_32(3266043904);
+emit_32(1127716880);
+emit_32(1101683910);
+emit_32(3266043904);
+emit_32(1127972864);
+emit_32(1101916956);
+emit_32(3266043904);
+emit_32(1128228848);
+emit_32(1101225945);
+emit_32(3266043904);
+emit_32(1128484897);
+emit_32(1099926497);
+emit_32(3266043904);
+emit_32(1128740880);
+emit_32(1098187591);
+emit_32(3266043904);
+emit_32(1128996864);
+emit_32(1095823367);
+emit_32(3266043904);
+emit_32(1129252848);
+emit_32(1091829718);
+emit_32(3266043904);
+emit_32(1129508897);
+emit_32(1088807932);
+emit_32(3266043904);
+emit_32(1129764880);
+emit_32(1089675104);
+emit_32(3266043904);
+emit_32(1130020864);
+emit_32(1090567704);
+emit_32(3266043904);
+emit_32(1130276848);
+emit_32(1090536174);
+emit_32(3266043904);
+emit_32(1130532897);
+emit_32(1090414497);
+emit_32(3266043904);
+emit_32(1130788880);
+emit_32(1090232632);
+emit_32(3266043904);
+emit_32(1131044864);
+emit_32(1086780888);
+emit_32(3266043904);
+emit_32(1131300848);
+emit_32(1089263098);
+emit_32(3266043904);
+emit_32(1131556897);
+emit_32(1089690267);
+emit_32(3266043904);
+emit_32(1131812880);
+emit_32(1087942248);
+emit_32(3266043904);
+emit_32(1132068864);
+emit_32(1090262202);
+emit_32(3266043904);
+emit_32(1081737216);
+emit_32(1111401326);
+emit_32(3266555911);
+emit_32(1090125824);
+emit_32(1110943623);
+emit_32(3266555911);
+emit_32(1094418484);
+emit_32(1110454960);
+emit_32(3266555911);
+emit_32(1098514432);
+emit_32(1110052097);
+emit_32(3266555911);
+emit_32(1100759066);
+emit_32(1109812734);
+emit_32(3266555911);
+emit_32(1102807040);
+emit_32(1109724706);
+emit_32(3266555911);
+emit_32(1104855066);
+emit_32(1109725597);
+emit_32(3266555911);
+emit_32(1106903040);
+emit_32(1109797162);
+emit_32(3266555911);
+emit_32(1108123661);
+emit_32(1110063972);
+emit_32(3266555911);
+emit_32(1109147648);
+emit_32(1110046147);
+emit_32(3266555911);
+emit_32(1110171661);
+emit_32(1109992119);
+emit_32(3266555911);
+emit_32(1111195648);
+emit_32(1109639850);
+emit_32(3266555911);
+emit_32(1112219661);
+emit_32(1109061691);
+emit_32(3266555911);
+emit_32(1113243648);
+emit_32(1108508410);
+emit_32(3266555911);
+emit_32(1114267661);
+emit_32(1108134540);
+emit_32(3266555911);
+emit_32(1115291648);
+emit_32(1108063604);
+emit_32(3266555911);
+emit_32(1116000263);
+emit_32(1107530351);
+emit_32(3266555911);
+emit_32(1116512256);
+emit_32(1107403761);
+emit_32(3266555911);
+emit_32(1117024263);
+emit_32(1107815668);
+emit_32(3266555911);
+emit_32(1117536256);
+emit_32(1108314030);
+emit_32(3266555911);
+emit_32(1118048263);
+emit_32(1108639613);
+emit_32(3266555911);
+emit_32(1118560256);
+emit_32(1108710628);
+emit_32(3266555911);
+emit_32(1119072263);
+emit_32(1108872213);
+emit_32(3266555911);
+emit_32(1119584256);
+emit_32(1108749215);
+emit_32(3266555911);
+emit_32(1120096263);
+emit_32(1108889462);
+emit_32(3266555911);
+emit_32(1120608322);
+emit_32(1108863484);
+emit_32(3266555911);
+emit_32(1121120289);
+emit_32(1109036604);
+emit_32(3266555911);
+emit_32(1121632256);
+emit_32(1109205713);
+emit_32(3266555911);
+emit_32(1122144223);
+emit_32(1109394116);
+emit_32(3266555911);
+emit_32(1122656322);
+emit_32(1109718781);
+emit_32(3266555911);
+emit_32(1123168289);
+emit_32(1109715871);
+emit_32(3266555911);
+emit_32(1123680256);
+emit_32(1109592926);
+emit_32(3266555911);
+emit_32(1124132848);
+emit_32(1109325932);
+emit_32(3266555911);
+emit_32(1124388897);
+emit_32(1109167623);
+emit_32(3266555911);
+emit_32(1124644880);
+emit_32(1108999930);
+emit_32(3266555911);
+emit_32(1124900864);
+emit_32(1108794147);
+emit_32(3266555911);
+emit_32(1125156848);
+emit_32(1108512054);
+emit_32(3266555911);
+emit_32(1125412897);
+emit_32(1108376184);
+emit_32(3266555911);
+emit_32(1125668880);
+emit_32(1108266215);
+emit_32(3266555911);
+emit_32(1125924864);
+emit_32(1107795326);
+emit_32(3266555911);
+emit_32(1126180848);
+emit_32(1107314763);
+emit_32(3266555911);
+emit_32(1126436897);
+emit_32(1106114511);
+emit_32(3266555911);
+emit_32(1126692880);
+emit_32(1104385514);
+emit_32(3266555911);
+emit_32(1126948864);
+emit_32(1102999506);
+emit_32(3266555911);
+emit_32(1127204848);
+emit_32(1102036337);
+emit_32(3266555911);
+emit_32(1127460897);
+emit_32(1101372378);
+emit_32(3266555911);
+emit_32(1127716880);
+emit_32(1101356021);
+emit_32(3266555911);
+emit_32(1127972864);
+emit_32(1101083863);
+emit_32(3266555911);
+emit_32(1128228848);
+emit_32(1099864211);
+emit_32(3266555911);
+emit_32(1128484897);
+emit_32(1099053662);
+emit_32(3266555911);
+emit_32(1128740880);
+emit_32(1096243846);
+emit_32(3266555911);
+emit_32(1128996864);
+emit_32(1092140631);
+emit_32(3266555911);
+emit_32(1129252848);
+emit_32(1086381925);
+emit_32(3266555911);
+emit_32(1129508897);
+emit_32(1086092015);
+emit_32(3266555911);
+emit_32(1129764880);
+emit_32(1087322309);
+emit_32(3266555911);
+emit_32(1130020864);
+emit_32(1086744250);
+emit_32(3266555911);
+emit_32(1130276848);
+emit_32(1086502784);
+emit_32(3266555911);
+emit_32(1130532897);
+emit_32(1088099933);
+emit_32(3266555911);
+emit_32(1130788880);
+emit_32(1087042801);
+emit_32(3266555911);
+emit_32(1131044864);
+emit_32(1085944166);
+emit_32(3266555911);
+emit_32(1131300848);
+emit_32(1086098348);
+emit_32(3266555911);
+emit_32(1131556897);
+emit_32(1088087979);
+emit_32(3266555911);
+emit_32(1131812880);
+emit_32(1087004759);
+emit_32(3266555911);
+emit_32(1132068864);
+emit_32(1086940628);
+emit_32(3266555911);
+emit_32(1081737216);
+emit_32(1110813757);
+emit_32(3267067904);
+emit_32(1090125824);
+emit_32(1110590462);
+emit_32(3267067904);
+emit_32(1094418484);
+emit_32(1110447410);
+emit_32(3267067904);
+emit_32(1098514432);
+emit_32(1109984621);
+emit_32(3267067904);
+emit_32(1100759066);
+emit_32(1109628053);
+emit_32(3267067904);
+emit_32(1102807040);
+emit_32(1109594341);
+emit_32(3267067904);
+emit_32(1104855066);
+emit_32(1109544298);
+emit_32(3267067904);
+emit_32(1106903040);
+emit_32(1109733881);
+emit_32(3267067904);
+emit_32(1108123661);
+emit_32(1109573291);
+emit_32(3267067904);
+emit_32(1109147648);
+emit_32(1109550878);
+emit_32(3267067904);
+emit_32(1110171661);
+emit_32(1109270961);
+emit_32(3267067904);
+emit_32(1111195648);
+emit_32(1108931091);
+emit_32(3267067904);
+emit_32(1112219661);
+emit_32(1108382633);
+emit_32(3267067904);
+emit_32(1113243648);
+emit_32(1108013298);
+emit_32(3267067904);
+emit_32(1114267661);
+emit_32(1107931011);
+emit_32(3267067904);
+emit_32(1115291648);
+emit_32(1107808171);
+emit_32(3267067904);
+emit_32(1116000263);
+emit_32(1107425519);
+emit_32(3267067904);
+emit_32(1116512256);
+emit_32(1107431129);
+emit_32(3267067904);
+emit_32(1117024263);
+emit_32(1107661423);
+emit_32(3267067904);
+emit_32(1117536256);
+emit_32(1108073723);
+emit_32(3267067904);
+emit_32(1118048263);
+emit_32(1108439492);
+emit_32(3267067904);
+emit_32(1118560256);
+emit_32(1108755874);
+emit_32(3267067904);
+emit_32(1119072263);
+emit_32(1108610122);
+emit_32(3267067904);
+emit_32(1119584256);
+emit_32(1108774538);
+emit_32(3267067904);
+emit_32(1120096263);
+emit_32(1108983703);
+emit_32(3267067904);
+emit_32(1120608322);
+emit_32(1108966611);
+emit_32(3267067904);
+emit_32(1121120289);
+emit_32(1109162171);
+emit_32(3267067904);
+emit_32(1121632256);
+emit_32(1109004596);
+emit_32(3267067904);
+emit_32(1122144223);
+emit_32(1109403972);
+emit_32(3267067904);
+emit_32(1122656322);
+emit_32(1109453098);
+emit_32(3267067904);
+emit_32(1123168289);
+emit_32(1109628944);
+emit_32(3267067904);
+emit_32(1123680256);
+emit_32(1109442953);
+emit_32(3267067904);
+emit_32(1124132848);
+emit_32(1109378597);
+emit_32(3267067904);
+emit_32(1124388897);
+emit_32(1109310151);
+emit_32(3267067904);
+emit_32(1124644880);
+emit_32(1109090370);
+emit_32(3267067904);
+emit_32(1124900864);
+emit_32(1108727012);
+emit_32(3267067904);
+emit_32(1125156848);
+emit_32(1108564378);
+emit_32(3267067904);
+emit_32(1125412897);
+emit_32(1108413016);
+emit_32(3267067904);
+emit_32(1125668880);
+emit_32(1108252662);
+emit_32(3267067904);
+emit_32(1125924864);
+emit_32(1107867468);
+emit_32(3267067904);
+emit_32(1126180848);
+emit_32(1107313322);
+emit_32(3267067904);
+emit_32(1126436897);
+emit_32(1105536274);
+emit_32(3267067904);
+emit_32(1126692880);
+emit_32(1103691199);
+emit_32(3267067904);
+emit_32(1126948864);
+emit_32(1102287156);
+emit_32(3267067904);
+emit_32(1127204848);
+emit_32(1100758437);
+emit_32(3267067904);
+emit_32(1127460897);
+emit_32(1100185390);
+emit_32(3267067904);
+emit_32(1127716880);
+emit_32(1100274781);
+emit_32(3267067904);
+emit_32(1127972864);
+emit_32(1099687789);
+emit_32(3267067904);
+emit_32(1128228848);
+emit_32(1098027264);
+emit_32(3267067904);
+emit_32(1128484897);
+emit_32(1095782577);
+emit_32(3267067904);
+emit_32(1128740880);
+emit_32(1092060656);
+emit_32(3267067904);
+emit_32(1128996864);
+emit_32(1085479584);
+emit_32(3267067904);
+emit_32(1129252848);
+emit_32(1080427922);
+emit_32(3267067904);
+emit_32(1129508897);
+emit_32(1082737893);
+emit_32(3267067904);
+emit_32(1129764880);
+emit_32(1082587842);
+emit_32(3267067904);
+emit_32(1130020864);
+emit_32(1082372569);
+emit_32(3267067904);
+emit_32(1130276848);
+emit_32(1085083537);
+emit_32(3267067904);
+emit_32(1130532897);
+emit_32(1085407211);
+emit_32(3267067904);
+emit_32(1130788880);
+emit_32(1084963160);
+emit_32(3267067904);
+emit_32(1131044864);
+emit_32(1084737318);
+emit_32(3267067904);
+emit_32(1131300848);
+emit_32(1083924504);
+emit_32(3267067904);
+emit_32(1131556897);
+emit_32(1084286829);
+emit_32(3267067904);
+emit_32(1131812880);
+emit_32(1084905342);
+emit_32(3267067904);
+emit_32(1132068864);
+emit_32(1085475641);
+emit_32(3267067904);
+emit_32(1081737216);
+emit_32(1110694612);
+emit_32(3267579911);
+emit_32(1090125824);
+emit_32(1110646797);
+emit_32(3267579911);
+emit_32(1094418484);
+emit_32(1110299640);
+emit_32(3267579911);
+emit_32(1098514432);
+emit_32(1110057393);
+emit_32(3267579911);
+emit_32(1100759066);
+emit_32(1109526053);
+emit_32(3267579911);
+emit_32(1102807040);
+emit_32(1109344807);
+emit_32(3267579911);
+emit_32(1104855066);
+emit_32(1109452259);
+emit_32(3267579911);
+emit_32(1106903040);
+emit_32(1109261550);
+emit_32(3267579911);
+emit_32(1108123661);
+emit_32(1109082820);
+emit_32(3267579911);
+emit_32(1109147648);
+emit_32(1108958406);
+emit_32(3267579911);
+emit_32(1110171661);
+emit_32(1108756398);
+emit_32(3267579911);
+emit_32(1111195648);
+emit_32(1108426831);
+emit_32(3267579911);
+emit_32(1112219661);
+emit_32(1107880234);
+emit_32(3267579911);
+emit_32(1113243648);
+emit_32(1107647398);
+emit_32(3267579911);
+emit_32(1114267661);
+emit_32(1107551060);
+emit_32(3267579911);
+emit_32(1115291648);
+emit_32(1107461800);
+emit_32(3267579911);
+emit_32(1116000263);
+emit_32(1107421980);
+emit_32(3267579911);
+emit_32(1116512256);
+emit_32(1107111287);
+emit_32(3267579911);
+emit_32(1117024263);
+emit_32(1107355396);
+emit_32(3267579911);
+emit_32(1117536256);
+emit_32(1107770029);
+emit_32(3267579911);
+emit_32(1118048263);
+emit_32(1108281682);
+emit_32(3267579911);
+emit_32(1118560256);
+emit_32(1108475930);
+emit_32(3267579911);
+emit_32(1119072263);
+emit_32(1108583724);
+emit_32(3267579911);
+emit_32(1119584256);
+emit_32(1108787908);
+emit_32(3267579911);
+emit_32(1120096263);
+emit_32(1108859761);
+emit_32(3267579911);
+emit_32(1120608322);
+emit_32(1109119625);
+emit_32(3267579911);
+emit_32(1121120289);
+emit_32(1109310125);
+emit_32(3267579911);
+emit_32(1121632256);
+emit_32(1109129088);
+emit_32(3267579911);
+emit_32(1122144223);
+emit_32(1109416267);
+emit_32(3267579911);
+emit_32(1122656322);
+emit_32(1109508751);
+emit_32(3267579911);
+emit_32(1123168289);
+emit_32(1109311540);
+emit_32(3267579911);
+emit_32(1123680256);
+emit_32(1109131552);
+emit_32(3267579911);
+emit_32(1124132848);
+emit_32(1109360247);
+emit_32(3267579911);
+emit_32(1124388897);
+emit_32(1109275522);
+emit_32(3267579911);
+emit_32(1124644880);
+emit_32(1108801749);
+emit_32(3267579911);
+emit_32(1124900864);
+emit_32(1108467804);
+emit_32(3267579911);
+emit_32(1125156848);
+emit_32(1108391100);
+emit_32(3267579911);
+emit_32(1125412897);
+emit_32(1108331096);
+emit_32(3267579911);
+emit_32(1125668880);
+emit_32(1108112599);
+emit_32(3267579911);
+emit_32(1125924864);
+emit_32(1107624355);
+emit_32(3267579911);
+emit_32(1126180848);
+emit_32(1106590564);
+emit_32(3267579911);
+emit_32(1126436897);
+emit_32(1104796346);
+emit_32(3267579911);
+emit_32(1126692880);
+emit_32(1102786068);
+emit_32(3267579911);
+emit_32(1126948864);
+emit_32(1101357226);
+emit_32(3267579911);
+emit_32(1127204848);
+emit_32(1100162793);
+emit_32(3267579911);
+emit_32(1127460897);
+emit_32(1099771412);
+emit_32(3267579911);
+emit_32(1127716880);
+emit_32(1098962017);
+emit_32(3267579911);
+emit_32(1127972864);
+emit_32(1097608462);
+emit_32(3267579911);
+emit_32(1128228848);
+emit_32(1094970874);
+emit_32(3267579911);
+emit_32(1128484897);
+emit_32(1092021933);
+emit_32(3267579911);
+emit_32(1128740880);
+emit_32(1088236919);
+emit_32(3267579911);
+emit_32(1128996864);
+emit_32(1082682696);
+emit_32(3267579911);
+emit_32(1129252848);
+emit_32(1079924773);
+emit_32(3267579911);
+emit_32(1129508897);
+emit_32(1081076487);
+emit_32(3267579911);
+emit_32(1129764880);
+emit_32(1081136801);
+emit_32(3267579911);
+emit_32(1130020864);
+emit_32(1081313088);
+emit_32(3267579911);
+emit_32(1130276848);
+emit_32(1082622067);
+emit_32(3267579911);
+emit_32(1130532897);
+emit_32(1080914755);
+emit_32(3267579911);
+emit_32(1130788880);
+emit_32(1081174131);
+emit_32(3267579911);
+emit_32(1131044864);
+emit_32(1081307258);
+emit_32(3267579911);
+emit_32(1131300848);
+emit_32(1080904101);
+emit_32(3267579911);
+emit_32(1131556897);
+emit_32(1082632301);
+emit_32(3267579911);
+emit_32(1131812880);
+emit_32(1082980177);
+emit_32(3267579911);
+emit_32(1132068864);
+emit_32(1083203964);
+emit_32(3267579911);
+emit_32(1081737216);
+emit_32(1110581209);
+emit_32(3268091970);
+emit_32(1090125824);
+emit_32(1110551586);
+emit_32(3268091970);
+emit_32(1094418484);
+emit_32(1110307347);
+emit_32(3268091970);
+emit_32(1098514432);
+emit_32(1109985591);
+emit_32(3268091970);
+emit_32(1100759066);
+emit_32(1109670180);
+emit_32(3268091970);
+emit_32(1102807040);
+emit_32(1109393303);
+emit_32(3268091970);
+emit_32(1104855066);
+emit_32(1109233946);
+emit_32(3268091970);
+emit_32(1106903040);
+emit_32(1109280450);
+emit_32(3268091970);
+emit_32(1108123661);
+emit_32(1108630281);
+emit_32(3268091970);
+emit_32(1109147648);
+emit_32(1108457449);
+emit_32(3268091970);
+emit_32(1110171661);
+emit_32(1108487176);
+emit_32(3268091970);
+emit_32(1111195648);
+emit_32(1108197114);
+emit_32(3268091970);
+emit_32(1112219661);
+emit_32(1107653847);
+emit_32(3268091970);
+emit_32(1113243648);
+emit_32(1107312745);
+emit_32(3268091970);
+emit_32(1114267661);
+emit_32(1107342131);
+emit_32(3268091970);
+emit_32(1115291648);
+emit_32(1107499418);
+emit_32(3268091970);
+emit_32(1116000263);
+emit_32(1107104104);
+emit_32(3268091970);
+emit_32(1116512256);
+emit_32(1107322497);
+emit_32(3268091970);
+emit_32(1117024263);
+emit_32(1107451078);
+emit_32(3268091970);
+emit_32(1117536256);
+emit_32(1107597774);
+emit_32(3268091970);
+emit_32(1118048263);
+emit_32(1108134383);
+emit_32(3268091970);
+emit_32(1118560256);
+emit_32(1108348292);
+emit_32(3268091970);
+emit_32(1119072263);
+emit_32(1108697206);
+emit_32(3268091970);
+emit_32(1119584256);
+emit_32(1108767120);
+emit_32(3268091970);
+emit_32(1120096263);
+emit_32(1108911089);
+emit_32(3268091970);
+emit_32(1120608322);
+emit_32(1109333115);
+emit_32(3268091970);
+emit_32(1121120289);
+emit_32(1109311147);
+emit_32(3268091970);
+emit_32(1121632256);
+emit_32(1109257853);
+emit_32(3268091970);
+emit_32(1122144223);
+emit_32(1109429663);
+emit_32(3268091970);
+emit_32(1122656322);
+emit_32(1109626926);
+emit_32(3268091970);
+emit_32(1123168289);
+emit_32(1109223460);
+emit_32(3268091970);
+emit_32(1123680256);
+emit_32(1109113464);
+emit_32(3268091970);
+emit_32(1124132848);
+emit_32(1109197770);
+emit_32(3268091970);
+emit_32(1124388897);
+emit_32(1108996941);
+emit_32(3268091970);
+emit_32(1124644880);
+emit_32(1108521910);
+emit_32(3268091970);
+emit_32(1124900864);
+emit_32(1108156167);
+emit_32(3268091970);
+emit_32(1125156848);
+emit_32(1108312169);
+emit_32(3268091970);
+emit_32(1125412897);
+emit_32(1108417210);
+emit_32(3268091970);
+emit_32(1125668880);
+emit_32(1108025410);
+emit_32(3268091970);
+emit_32(1125924864);
+emit_32(1107366039);
+emit_32(3268091970);
+emit_32(1126180848);
+emit_32(1106152836);
+emit_32(3268091970);
+emit_32(1126436897);
+emit_32(1104094377);
+emit_32(3268091970);
+emit_32(1126692880);
+emit_32(1102342783);
+emit_32(3268091970);
+emit_32(1126948864);
+emit_32(1101171838);
+emit_32(3268091970);
+emit_32(1127204848);
+emit_32(1099584871);
+emit_32(3268091970);
+emit_32(1127460897);
+emit_32(1099343069);
+emit_32(3268091970);
+emit_32(1127716880);
+emit_32(1097562115);
+emit_32(3268091970);
+emit_32(1127972864);
+emit_32(1094777202);
+emit_32(3268091970);
+emit_32(1128228848);
+emit_32(1092522051);
+emit_32(3268091970);
+emit_32(1128484897);
+emit_32(1088883870);
+emit_32(3268091970);
+emit_32(1128740880);
+emit_32(1085242165);
+emit_32(3268091970);
+emit_32(1128996864);
+emit_32(1078093792);
+emit_32(3268091970);
+emit_32(1129252848);
+emit_32(1078026222);
+emit_32(3268091970);
+emit_32(1129508897);
+emit_32(1077460788);
+emit_32(3268091970);
+emit_32(1129764880);
+emit_32(1078305017);
+emit_32(3268091970);
+emit_32(1130020864);
+emit_32(1079773820);
+emit_32(3268091970);
+emit_32(1130276848);
+emit_32(1080393613);
+emit_32(3268091970);
+emit_32(1130532897);
+emit_32(1078685021);
+emit_32(3268091970);
+emit_32(1130788880);
+emit_32(1075784911);
+emit_32(3268091970);
+emit_32(1131044864);
+emit_32(1076529820);
+emit_32(3268091970);
+emit_32(1131300848);
+emit_32(1074011602);
+emit_32(3268091970);
+emit_32(1131556897);
+emit_32(1075826561);
+emit_32(3268091970);
+emit_32(1131812880);
+emit_32(1078155029);
+emit_32(3268091970);
+emit_32(1132068864);
+emit_32(1080836699);
+emit_32(3268091970);
+emit_32(1081737216);
+emit_32(1110663915);
+emit_32(3268603937);
+emit_32(1090125824);
+emit_32(1110523301);
+emit_32(3268603937);
+emit_32(1094418484);
+emit_32(1110414092);
+emit_32(3268603937);
+emit_32(1098514432);
+emit_32(1110239740);
+emit_32(3268603937);
+emit_32(1100759066);
+emit_32(1110111263);
+emit_32(3268603937);
+emit_32(1102807040);
+emit_32(1109732989);
+emit_32(3268603937);
+emit_32(1104855066);
+emit_32(1109257434);
+emit_32(3268603937);
+emit_32(1106903040);
+emit_32(1108986639);
+emit_32(3268603937);
+emit_32(1108123661);
+emit_32(1108299324);
+emit_32(3268603937);
+emit_32(1109147648);
+emit_32(1108108666);
+emit_32(3268603937);
+emit_32(1110171661);
+emit_32(1108133256);
+emit_32(3268603937);
+emit_32(1111195648);
+emit_32(1107900341);
+emit_32(3268603937);
+emit_32(1112219661);
+emit_32(1106990544);
+emit_32(3268603937);
+emit_32(1113243648);
+emit_32(1106677911);
+emit_32(3268603937);
+emit_32(1114267661);
+emit_32(1106924116);
+emit_32(3268603937);
+emit_32(1115291648);
+emit_32(1107371465);
+emit_32(3268603937);
+emit_32(1116000263);
+emit_32(1107430500);
+emit_32(3268603937);
+emit_32(1116512256);
+emit_32(1107498631);
+emit_32(3268603937);
+emit_32(1117024263);
+emit_32(1107438390);
+emit_32(3268603937);
+emit_32(1117536256);
+emit_32(1107833808);
+emit_32(3268603937);
+emit_32(1118048263);
+emit_32(1108210981);
+emit_32(3268603937);
+emit_32(1118560256);
+emit_32(1108542226);
+emit_32(3268603937);
+emit_32(1119072263);
+emit_32(1108787882);
+emit_32(3268603937);
+emit_32(1119584256);
+emit_32(1108829274);
+emit_32(3268603937);
+emit_32(1120096263);
+emit_32(1109124029);
+emit_32(3268603937);
+emit_32(1120608322);
+emit_32(1109412387);
+emit_32(3268603937);
+emit_32(1121120289);
+emit_32(1109324752);
+emit_32(3268603937);
+emit_32(1121632256);
+emit_32(1109233631);
+emit_32(3268603937);
+emit_32(1122144223);
+emit_32(1109356105);
+emit_32(3268603937);
+emit_32(1122656322);
+emit_32(1109523353);
+emit_32(3268603937);
+emit_32(1123168289);
+emit_32(1109276492);
+emit_32(3268603937);
+emit_32(1123680256);
+emit_32(1109141330);
+emit_32(3268603937);
+emit_32(1124132848);
+emit_32(1108924485);
+emit_32(3268603937);
+emit_32(1124388897);
+emit_32(1108532029);
+emit_32(3268603937);
+emit_32(1124644880);
+emit_32(1108013482);
+emit_32(3268603937);
+emit_32(1124900864);
+emit_32(1107879159);
+emit_32(3268603937);
+emit_32(1125156848);
+emit_32(1108192290);
+emit_32(3268603937);
+emit_32(1125412897);
+emit_32(1108199499);
+emit_32(3268603937);
+emit_32(1125668880);
+emit_32(1107673455);
+emit_32(3268603937);
+emit_32(1125924864);
+emit_32(1106232371);
+emit_32(3268603937);
+emit_32(1126180848);
+emit_32(1104800226);
+emit_32(3268603937);
+emit_32(1126436897);
+emit_32(1103280682);
+emit_32(3268603937);
+emit_32(1126692880);
+emit_32(1102286055);
+emit_32(3268603937);
+emit_32(1126948864);
+emit_32(1100759748);
+emit_32(3268603937);
+emit_32(1127204848);
+emit_32(1099429367);
+emit_32(3268603937);
+emit_32(1127460897);
+emit_32(1097617900);
+emit_32(3268603937);
+emit_32(1127716880);
+emit_32(1095952341);
+emit_32(3268603937);
+emit_32(1127972864);
+emit_32(1093005319);
+emit_32(3268603937);
+emit_32(1128228848);
+emit_32(1088642320);
+emit_32(3268603937);
+emit_32(1128484897);
+emit_32(1085144270);
+emit_32(3268603937);
+emit_32(1128740880);
+emit_32(1079423554);
+emit_32(3268603937);
+emit_32(1128996864);
+emit_32(1075473065);
+emit_32(3268603937);
+emit_32(1129252848);
+emit_32(1075224804);
+emit_32(3268603937);
+emit_32(1129508897);
+emit_32(1074942527);
+emit_32(3268603937);
+emit_32(1129764880);
+emit_32(1070517327);
+emit_32(3268603937);
+emit_32(1130020864);
+emit_32(1076303998);
+emit_32(3268603937);
+emit_32(1130276848);
+emit_32(1075194647);
+emit_32(3268603937);
+emit_32(1130532897);
+emit_32(1069302069);
+emit_32(3268603937);
+emit_32(1130788880);
+emit_32(1059149840);
+emit_32(3268603937);
+emit_32(1131044864);
+emit_32(1062802928);
+emit_32(3268603937);
+emit_32(1131300848);
+emit_32(1068305922);
+emit_32(3268603937);
+emit_32(1131556897);
+emit_32(1074623970);
+emit_32(3268603937);
+emit_32(1131812880);
+emit_32(1077991619);
+emit_32(3268603937);
+emit_32(1132068864);
+emit_32(1078469350);
+emit_32(3268603937);
+emit_32(1081737216);
+emit_32(1110808645);
+emit_32(3269115904);
+emit_32(1090125824);
+emit_32(1110606427);
+emit_32(3269115904);
+emit_32(1094418484);
+emit_32(1110590725);
+emit_32(3269115904);
+emit_32(1098514432);
+emit_32(1110520575);
+emit_32(3269115904);
+emit_32(1100759066);
+emit_32(1110320952);
+emit_32(3269115904);
+emit_32(1102807040);
+emit_32(1109925718);
+emit_32(3269115904);
+emit_32(1104855066);
+emit_32(1109578691);
+emit_32(3269115904);
+emit_32(1106903040);
+emit_32(1109301579);
+emit_32(3269115904);
+emit_32(1108123661);
+emit_32(1108401481);
+emit_32(3269115904);
+emit_32(1109147648);
+emit_32(1108050418);
+emit_32(3269115904);
+emit_32(1110171661);
+emit_32(1108134828);
+emit_32(3269115904);
+emit_32(1111195648);
+emit_32(1107813047);
+emit_32(3269115904);
+emit_32(1112219661);
+emit_32(1106770867);
+emit_32(3269115904);
+emit_32(1113243648);
+emit_32(1107263016);
+emit_32(3269115904);
+emit_32(1114267661);
+emit_32(1107073696);
+emit_32(3269115904);
+emit_32(1115291648);
+emit_32(1107071861);
+emit_32(3269115904);
+emit_32(1116000263);
+emit_32(1107575911);
+emit_32(3269115904);
+emit_32(1116512256);
+emit_32(1107727326);
+emit_32(3269115904);
+emit_32(1117024263);
+emit_32(1107439570);
+emit_32(3269115904);
+emit_32(1117536256);
+emit_32(1107890956);
+emit_32(3269115904);
+emit_32(1118048263);
+emit_32(1108361426);
+emit_32(3269115904);
+emit_32(1118560256);
+emit_32(1108752964);
+emit_32(3269115904);
+emit_32(1119072263);
+emit_32(1109015894);
+emit_32(3269115904);
+emit_32(1119584256);
+emit_32(1109044966);
+emit_32(3269115904);
+emit_32(1120096263);
+emit_32(1109198320);
+emit_32(3269115904);
+emit_32(1120608322);
+emit_32(1109370103);
+emit_32(3269115904);
+emit_32(1121120289);
+emit_32(1109373380);
+emit_32(3269115904);
+emit_32(1121632256);
+emit_32(1109279795);
+emit_32(3269115904);
+emit_32(1122144223);
+emit_32(1109433568);
+emit_32(3269115904);
+emit_32(1122656322);
+emit_32(1109623387);
+emit_32(3269115904);
+emit_32(1123168289);
+emit_32(1109428273);
+emit_32(3269115904);
+emit_32(1123680256);
+emit_32(1108960346);
+emit_32(3269115904);
+emit_32(1124132848);
+emit_32(1108585323);
+emit_32(3269115904);
+emit_32(1124388897);
+emit_32(1108055818);
+emit_32(3269115904);
+emit_32(1124644880);
+emit_32(1107534728);
+emit_32(3269115904);
+emit_32(1124900864);
+emit_32(1107471001);
+emit_32(3269115904);
+emit_32(1125156848);
+emit_32(1107590041);
+emit_32(3269115904);
+emit_32(1125412897);
+emit_32(1107454172);
+emit_32(3269115904);
+emit_32(1125668880);
+emit_32(1106832209);
+emit_32(3269115904);
+emit_32(1125924864);
+emit_32(1105088217);
+emit_32(3269115904);
+emit_32(1126180848);
+emit_32(1103608676);
+emit_32(3269115904);
+emit_32(1126436897);
+emit_32(1102467039);
+emit_32(3269115904);
+emit_32(1126692880);
+emit_32(1101262068);
+emit_32(3269115904);
+emit_32(1126948864);
+emit_32(1100082158);
+emit_32(3269115904);
+emit_32(1127204848);
+emit_32(1098845677);
+emit_32(3269115904);
+emit_32(1127460897);
+emit_32(1095460140);
+emit_32(3269115904);
+emit_32(1127716880);
+emit_32(1093620938);
+emit_32(3269115904);
+emit_32(1127972864);
+emit_32(1089412289);
+emit_32(3269115904);
+emit_32(1128228848);
+emit_32(1083970620);
+emit_32(3269115904);
+emit_32(1128484897);
+emit_32(1077038086);
+emit_32(3269115904);
+emit_32(1128740880);
+emit_32(1069835165);
+emit_32(3269115904);
+emit_32(1128996864);
+emit_32(1070535279);
+emit_32(3269115904);
+emit_32(1129252848);
+emit_32(1071829221);
+emit_32(3269115904);
+emit_32(1129508897);
+emit_32(1066648753);
+emit_32(3269115904);
+emit_32(1129764880);
+emit_32(1051679953);
+emit_32(3269115904);
+emit_32(1130020864);
+emit_32(1057135450);
+emit_32(3269115904);
+emit_32(1130276848);
+emit_32(1048743000);
+emit_32(3269115904);
+emit_32(1130532897);
+emit_32(3194534264);
+emit_32(3269115904);
+emit_32(1130788880);
+emit_32(3210162995);
+emit_32(3269115904);
+emit_32(1131044864);
+emit_32(3197138557);
+emit_32(3269115904);
+emit_32(1131300848);
+emit_32(1054446180);
+emit_32(3269115904);
+emit_32(1131556897);
+emit_32(1071525302);
+emit_32(3269115904);
+emit_32(1131812880);
+emit_32(1072082306);
+emit_32(3269115904);
+emit_32(1132068864);
+emit_32(1070395189);
+emit_32(3269115904);
+emit_32(1081737216);
+emit_32(1111356054);
+emit_32(3269627871);
+emit_32(1090125824);
+emit_32(1111049765);
+emit_32(3269627871);
+emit_32(1094418484);
+emit_32(1111095011);
+emit_32(3269627871);
+emit_32(1098514432);
+emit_32(1110769821);
+emit_32(3269627871);
+emit_32(1100759066);
+emit_32(1110387956);
+emit_32(3269627871);
+emit_32(1102807040);
+emit_32(1110076608);
+emit_32(3269627871);
+emit_32(1104855066);
+emit_32(1109830507);
+emit_32(3269627871);
+emit_32(1106903040);
+emit_32(1109267474);
+emit_32(3269627871);
+emit_32(1108123661);
+emit_32(1108522670);
+emit_32(3269627871);
+emit_32(1109147648);
+emit_32(1108306716);
+emit_32(3269627871);
+emit_32(1110171661);
+emit_32(1108152078);
+emit_32(3269627871);
+emit_32(1111195648);
+emit_32(1107581521);
+emit_32(3269627871);
+emit_32(1112219661);
+emit_32(1106841751);
+emit_32(3269627871);
+emit_32(1113243648);
+emit_32(1107248808);
+emit_32(3269627871);
+emit_32(1114267661);
+emit_32(1107071599);
+emit_32(3269627871);
+emit_32(1115291648);
+emit_32(1107391729);
+emit_32(3269627871);
+emit_32(1116000263);
+emit_32(1107625981);
+emit_32(3269627871);
+emit_32(1116512256);
+emit_32(1107606818);
+emit_32(3269627871);
+emit_32(1117024263);
+emit_32(1107732044);
+emit_32(3269627871);
+emit_32(1117536256);
+emit_32(1108255231);
+emit_32(3269627871);
+emit_32(1118048263);
+emit_32(1108554259);
+emit_32(3269627871);
+emit_32(1118560256);
+emit_32(1108867835);
+emit_32(3269627871);
+emit_32(1119072263);
+emit_32(1109054272);
+emit_32(3269627871);
+emit_32(1119584256);
+emit_32(1109386251);
+emit_32(3269627871);
+emit_32(1120096263);
+emit_32(1109299298);
+emit_32(3269627871);
+emit_32(1120608322);
+emit_32(1109427959);
+emit_32(3269627871);
+emit_32(1121120289);
+emit_32(1109424079);
+emit_32(3269627871);
+emit_32(1121632256);
+emit_32(1109411181);
+emit_32(3269627871);
+emit_32(1122144223);
+emit_32(1109433621);
+emit_32(3269627871);
+emit_32(1122656322);
+emit_32(1109598955);
+emit_32(3269627871);
+emit_32(1123168289);
+emit_32(1109218086);
+emit_32(3269627871);
+emit_32(1123680256);
+emit_32(1108916909);
+emit_32(3269627871);
+emit_32(1124132848);
+emit_32(1108631119);
+emit_32(3269627871);
+emit_32(1124388897);
+emit_32(1108074483);
+emit_32(3269627871);
+emit_32(1124644880);
+emit_32(1107470084);
+emit_32(3269627871);
+emit_32(1124900864);
+emit_32(1106751049);
+emit_32(3269627871);
+emit_32(1125156848);
+emit_32(1106805732);
+emit_32(3269627871);
+emit_32(1125412897);
+emit_32(1106063917);
+emit_32(3269627871);
+emit_32(1125668880);
+emit_32(1104941941);
+emit_32(3269627871);
+emit_32(1125924864);
+emit_32(1103592738);
+emit_32(3269627871);
+emit_32(1126180848);
+emit_32(1102378749);
+emit_32(3269627871);
+emit_32(1126436897);
+emit_32(1101064359);
+emit_32(3269627871);
+emit_32(1126692880);
+emit_32(1099948989);
+emit_32(3269627871);
+emit_32(1126948864);
+emit_32(1098973289);
+emit_32(3269627871);
+emit_32(1127204848);
+emit_32(1097124125);
+emit_32(3269627871);
+emit_32(1127460897);
+emit_32(1094111671);
+emit_32(3269627871);
+emit_32(1127716880);
+emit_32(1091103611);
+emit_32(3269627871);
+emit_32(1127972864);
+emit_32(1086368084);
+emit_32(3269627871);
+emit_32(1128228848);
+emit_32(1078725915);
+emit_32(3269627871);
+emit_32(1128484897);
+emit_32(1069950844);
+emit_32(3269627871);
+emit_32(1128740880);
+emit_32(1018630897);
+emit_32(3269627871);
+emit_32(1128996864);
+emit_32(3181731986);
+emit_32(3269627871);
+emit_32(1129252848);
+emit_32(3201792590);
+emit_32(3269627871);
+emit_32(1129508897);
+emit_32(3204973752);
+emit_32(3269627871);
+emit_32(1129764880);
+emit_32(3215721958);
+emit_32(3269627871);
+emit_32(1130020864);
+emit_32(3222414389);
+emit_32(3269627871);
+emit_32(1130276848);
+emit_32(3222253076);
+emit_32(3269627871);
+emit_32(1130532897);
+emit_32(3222187310);
+emit_32(3269627871);
+emit_32(1130788880);
+emit_32(3216801991);
+emit_32(3269627871);
+emit_32(1131044864);
+emit_32(3205181336);
+emit_32(3269627871);
+emit_32(1131300848);
+emit_32(3200822633);
+emit_32(3269627871);
+emit_32(1131556897);
+emit_32(3196733320);
+emit_32(3269627871);
+emit_32(1131812880);
+emit_32(3206975391);
+emit_32(3269627871);
+emit_32(1132068864);
+emit_32(1038377734);
+emit_32(3269627871);
+emit_32(1081737216);
+emit_32(1111592455);
+emit_32(3270139970);
+emit_32(1090125824);
+emit_32(1111491609);
+emit_32(3270139970);
+emit_32(1094418484);
+emit_32(1111194940);
+emit_32(3270139970);
+emit_32(1098514432);
+emit_32(1110835331);
+emit_32(3270139970);
+emit_32(1100759066);
+emit_32(1110275365);
+emit_32(3270139970);
+emit_32(1102807040);
+emit_32(1110005567);
+emit_32(3270139970);
+emit_32(1104855066);
+emit_32(1109696499);
+emit_32(3270139970);
+emit_32(1106903040);
+emit_32(1109176772);
+emit_32(3270139970);
+emit_32(1108123661);
+emit_32(1108885556);
+emit_32(3270139970);
+emit_32(1109147648);
+emit_32(1108468774);
+emit_32(3270139970);
+emit_32(1110171661);
+emit_32(1108030285);
+emit_32(3270139970);
+emit_32(1111195648);
+emit_32(1107430028);
+emit_32(3270139970);
+emit_32(1112219661);
+emit_32(1107103737);
+emit_32(3270139970);
+emit_32(1113243648);
+emit_32(1107092098);
+emit_32(3270139970);
+emit_32(1114267661);
+emit_32(1107375004);
+emit_32(3270139970);
+emit_32(1115291648);
+emit_32(1107478708);
+emit_32(3270139970);
+emit_32(1116000263);
+emit_32(1107657884);
+emit_32(3270139970);
+emit_32(1116512256);
+emit_32(1107812575);
+emit_32(3270139970);
+emit_32(1117024263);
+emit_32(1108062005);
+emit_32(3270139970);
+emit_32(1117536256);
+emit_32(1108546316);
+emit_32(3270139970);
+emit_32(1118048263);
+emit_32(1108808198);
+emit_32(3270139970);
+emit_32(1118560256);
+emit_32(1108821253);
+emit_32(3270139970);
+emit_32(1119072263);
+emit_32(1108944565);
+emit_32(3270139970);
+emit_32(1119584256);
+emit_32(1109292509);
+emit_32(3270139970);
+emit_32(1120096263);
+emit_32(1109325827);
+emit_32(3270139970);
+emit_32(1120608322);
+emit_32(1109645355);
+emit_32(3270139970);
+emit_32(1121120289);
+emit_32(1109627555);
+emit_32(3270139970);
+emit_32(1121632256);
+emit_32(1109566502);
+emit_32(3270139970);
+emit_32(1122144223);
+emit_32(1109470347);
+emit_32(3270139970);
+emit_32(1122656322);
+emit_32(1109358831);
+emit_32(3270139970);
+emit_32(1123168289);
+emit_32(1109156561);
+emit_32(3270139970);
+emit_32(1123680256);
+emit_32(1108641920);
+emit_32(3270139970);
+emit_32(1124132848);
+emit_32(1108219580);
+emit_32(3270139970);
+emit_32(1124388897);
+emit_32(1107796112);
+emit_32(3270139970);
+emit_32(1124644880);
+emit_32(1107364885);
+emit_32(3270139970);
+emit_32(1124900864);
+emit_32(1106177268);
+emit_32(3270139970);
+emit_32(1125156848);
+emit_32(1105288443);
+emit_32(3270139970);
+emit_32(1125412897);
+emit_32(1104753197);
+emit_32(3270139970);
+emit_32(1125668880);
+emit_32(1103375473);
+emit_32(3270139970);
+emit_32(1125924864);
+emit_32(1102075344);
+emit_32(3270139970);
+emit_32(1126180848);
+emit_32(1100964849);
+emit_32(3270139970);
+emit_32(1126436897);
+emit_32(1099792384);
+emit_32(3270139970);
+emit_32(1126692880);
+emit_32(1098450049);
+emit_32(3270139970);
+emit_32(1126948864);
+emit_32(1096338322);
+emit_32(3270139970);
+emit_32(1127204848);
+emit_32(1093954280);
+emit_32(3270139970);
+emit_32(1127460897);
+emit_32(1091524247);
+emit_32(3270139970);
+emit_32(1127716880);
+emit_32(1088518839);
+emit_32(3270139970);
+emit_32(1127972864);
+emit_32(1083884385);
+emit_32(3270139970);
+emit_32(1128228848);
+emit_32(1076931424);
+emit_32(3270139970);
+emit_32(1128484897);
+emit_32(1044557454);
+emit_32(3270139970);
+emit_32(1128740880);
+emit_32(3205427693);
+emit_32(3270139970);
+emit_32(1128996864);
+emit_32(3213113940);
+emit_32(3270139970);
+emit_32(1129252848);
+emit_32(3221962118);
+emit_32(3270139970);
+emit_32(1129508897);
+emit_32(3220483500);
+emit_32(3270139970);
+emit_32(1129764880);
+emit_32(3225420531);
+emit_32(3270139970);
+emit_32(1130020864);
+emit_32(3230173831);
+emit_32(3270139970);
+emit_32(1130276848);
+emit_32(3232043735);
+emit_32(3270139970);
+emit_32(1130532897);
+emit_32(3227363752);
+emit_32(3270139970);
+emit_32(1130788880);
+emit_32(3221899790);
+emit_32(3270139970);
+emit_32(1131044864);
+emit_32(3216845360);
+emit_32(3270139970);
+emit_32(1131300848);
+emit_32(3219415546);
+emit_32(3270139970);
+emit_32(1131556897);
+emit_32(3212863456);
+emit_32(3270139970);
+emit_32(1131812880);
+emit_32(3221056106);
+emit_32(3270139970);
+emit_32(1132068864);
+emit_32(3222457423);
+emit_32(3270139970);
+emit_start(Landscape04Vtx)
+emit_32(1081737216);
+emit_32(1100462372);
+emit_32(1123680256);
+emit_32(1081737216);
+emit_32(1101050728);
+emit_32(1124132848);
+emit_32(1090125824);
+emit_32(1101307000);
+emit_32(1123680256);
+emit_32(1090125824);
+emit_32(1101569144);
+emit_32(1124132848);
+emit_32(1094418484);
+emit_32(1101816870);
+emit_32(1123680256);
+emit_32(1094418484);
+emit_32(1101742788);
+emit_32(1124132848);
+emit_32(1098514432);
+emit_32(1102313580);
+emit_32(1123680256);
+emit_32(1098514432);
+emit_32(1102383625);
+emit_32(1124132848);
+emit_32(1100759066);
+emit_32(1102224504);
+emit_32(1123680256);
+emit_32(1100759066);
+emit_32(1102114927);
+emit_32(1124132848);
+emit_32(1102807040);
+emit_32(1101213834);
+emit_32(1123680256);
+emit_32(1102807040);
+emit_32(1101213309);
+emit_32(1124132848);
+emit_32(1104855066);
+emit_32(1100303408);
+emit_32(1123680256);
+emit_32(1104855066);
+emit_32(1100341209);
+emit_32(1124132848);
+emit_32(1106903040);
+emit_32(1099679610);
+emit_32(1123680256);
+emit_32(1106903040);
+emit_32(1099911345);
+emit_32(1124132848);
+emit_32(1108123661);
+emit_32(1099160984);
+emit_32(1123680256);
+emit_32(1108123661);
+emit_32(1099586129);
+emit_32(1124132848);
+emit_32(1109147648);
+emit_32(1098137259);
+emit_32(1123680256);
+emit_32(1109147648);
+emit_32(1099190030);
+emit_32(1124132848);
+emit_32(1110171661);
+emit_32(1097207906);
+emit_32(1123680256);
+emit_32(1110171661);
+emit_32(1098581751);
+emit_32(1124132848);
+emit_32(1111195648);
+emit_32(1096797074);
+emit_32(1123680256);
+emit_32(1111195648);
+emit_32(1097483053);
+emit_32(1124132848);
+emit_32(1112219661);
+emit_32(1097544709);
+emit_32(1123680256);
+emit_32(1112219661);
+emit_32(1097178022);
+emit_32(1124132848);
+emit_32(1113243648);
+emit_32(1097976408);
+emit_32(1123680256);
+emit_32(1113243648);
+emit_32(1096978688);
+emit_32(1124132848);
+emit_32(1114267661);
+emit_32(1097506541);
+emit_32(1123680256);
+emit_32(1114267661);
+emit_32(1097352610);
+emit_32(1124132848);
+emit_32(1115291648);
+emit_32(1097510945);
+emit_32(1123680256);
+emit_32(1115291648);
+emit_32(1097969906);
+emit_32(1124132848);
+emit_32(1116000263);
+emit_32(1097837262);
+emit_32(1123680256);
+emit_32(1116000263);
+emit_32(1098943509);
+emit_32(1124132848);
+emit_32(1116512256);
+emit_32(1098359872);
+emit_32(1123680256);
+emit_32(1116512256);
+emit_32(1099235380);
+emit_32(1124132848);
+emit_32(1117024263);
+emit_32(1097957533);
+emit_32(1123680256);
+emit_32(1117024263);
+emit_32(1098875037);
+emit_32(1124132848);
+emit_32(1117536256);
+emit_32(1098416705);
+emit_32(1123680256);
+emit_32(1117536256);
+emit_32(1098919916);
+emit_32(1124132848);
+emit_32(1118048263);
+emit_32(1098948385);
+emit_32(1123680256);
+emit_32(1118048263);
+emit_32(1099015127);
+emit_32(1124132848);
+emit_32(1118560256);
+emit_32(1099890845);
+emit_32(1123680256);
+emit_32(1118560256);
+emit_32(1100384410);
+emit_32(1124132848);
+emit_32(1119072263);
+emit_32(1100416863);
+emit_32(1123680256);
+emit_32(1119072263);
+emit_32(1100817786);
+emit_32(1124132848);
+emit_32(1119584256);
+emit_32(1100910848);
+emit_32(1123680256);
+emit_32(1119584256);
+emit_32(1101157682);
+emit_32(1124132848);
+emit_32(1120096263);
+emit_32(1102712825);
+emit_32(1123680256);
+emit_32(1120096263);
+emit_32(1102698670);
+emit_32(1124132848);
+emit_32(1120608322);
+emit_32(1103789661);
+emit_32(1123680256);
+emit_32(1120608322);
+emit_32(1104088662);
+emit_32(1124132848);
+emit_32(1121120289);
+emit_32(1104607602);
+emit_32(1123680256);
+emit_32(1121120289);
+emit_32(1104975548);
+emit_32(1124132848);
+emit_32(1121632256);
+emit_32(1105587811);
+emit_32(1123680256);
+emit_32(1121632256);
+emit_32(1105705671);
+emit_32(1124132848);
+emit_32(1122144223);
+emit_32(1106213025);
+emit_32(1123680256);
+emit_32(1122144223);
+emit_32(1106546629);
+emit_32(1124132848);
+emit_32(1122656322);
+emit_32(1106606765);
+emit_32(1123680256);
+emit_32(1122656322);
+emit_32(1107224271);
+emit_32(1124132848);
+emit_32(1123168289);
+emit_32(1107406409);
+emit_32(1123680256);
+emit_32(1123168289);
+emit_32(1107432990);
+emit_32(1124132848);
+emit_32(1123680256);
+emit_32(1108017021);
+emit_32(1123680256);
+emit_32(1123680256);
+emit_32(1107870823);
+emit_32(1124132848);
+emit_32(1124132848);
+emit_32(1108642890);
+emit_32(1123680256);
+emit_32(1124132848);
+emit_32(1108611197);
+emit_32(1124132848);
+emit_32(1124388897);
+emit_32(1108976940);
+emit_32(1123680256);
+emit_32(1124388897);
+emit_32(1109002394);
+emit_32(1124132848);
+emit_32(1124644880);
+emit_32(1108915991);
+emit_32(1123680256);
+emit_32(1124644880);
+emit_32(1109174020);
+emit_32(1124132848);
+emit_32(1124900864);
+emit_32(1109069713);
+emit_32(1123680256);
+emit_32(1124900864);
+emit_32(1109145131);
+emit_32(1124132848);
+emit_32(1125156848);
+emit_32(1108852159);
+emit_32(1123680256);
+emit_32(1125156848);
+emit_32(1109111053);
+emit_32(1124132848);
+emit_32(1125412897);
+emit_32(1109018044);
+emit_32(1123680256);
+emit_32(1125412897);
+emit_32(1108982156);
+emit_32(1124132848);
+emit_32(1125668880);
+emit_32(1109032776);
+emit_32(1123680256);
+emit_32(1125668880);
+emit_32(1109159733);
+emit_32(1124132848);
+emit_32(1125924864);
+emit_32(1109297490);
+emit_32(1123680256);
+emit_32(1125924864);
+emit_32(1109315342);
+emit_32(1124132848);
+emit_32(1126180848);
+emit_32(1109331018);
+emit_32(1123680256);
+emit_32(1126180848);
+emit_32(1109210091);
+emit_32(1124132848);
+emit_32(1126436897);
+emit_32(1109010285);
+emit_32(1123680256);
+emit_32(1126436897);
+emit_32(1108929885);
+emit_32(1124132848);
+emit_32(1126692880);
+emit_32(1108437919);
+emit_32(1123680256);
+emit_32(1126692880);
+emit_32(1108541256);
+emit_32(1124132848);
+emit_32(1126948864);
+emit_32(1108395583);
+emit_32(1123680256);
+emit_32(1126948864);
+emit_32(1108339091);
+emit_32(1124132848);
+emit_32(1127204848);
+emit_32(1108230432);
+emit_32(1123680256);
+emit_32(1127204848);
+emit_32(1108284853);
+emit_32(1124132848);
+emit_32(1127460897);
+emit_32(1107992091);
+emit_32(1123680256);
+emit_32(1127460897);
+emit_32(1108246449);
+emit_32(1124132848);
+emit_32(1127716880);
+emit_32(1107862408);
+emit_32(1123680256);
+emit_32(1127716880);
+emit_32(1108208727);
+emit_32(1124132848);
+emit_32(1127972864);
+emit_32(1107704336);
+emit_32(1123680256);
+emit_32(1127972864);
+emit_32(1108242648);
+emit_32(1124132848);
+emit_32(1128228848);
+emit_32(1107562018);
+emit_32(1123680256);
+emit_32(1128228848);
+emit_32(1107828539);
+emit_32(1124132848);
+emit_32(1128484897);
+emit_32(1106914679);
+emit_32(1123680256);
+emit_32(1128484897);
+emit_32(1107302207);
+emit_32(1124132848);
+emit_32(1128740880);
+emit_32(1105855984);
+emit_32(1123680256);
+emit_32(1128740880);
+emit_32(1106125311);
+emit_32(1124132848);
+emit_32(1128996864);
+emit_32(1104645194);
+emit_32(1123680256);
+emit_32(1128996864);
+emit_32(1104882853);
+emit_32(1124132848);
+emit_32(1129252848);
+emit_32(1103670490);
+emit_32(1123680256);
+emit_32(1129252848);
+emit_32(1103712328);
+emit_32(1124132848);
+emit_32(1129508897);
+emit_32(1102923956);
+emit_32(1123680256);
+emit_32(1129508897);
+emit_32(1103248228);
+emit_32(1124132848);
+emit_32(1129764880);
+emit_32(1102092435);
+emit_32(1123680256);
+emit_32(1129764880);
+emit_32(1102281808);
+emit_32(1124132848);
+emit_32(1130020864);
+emit_32(1101172887);
+emit_32(1123680256);
+emit_32(1130020864);
+emit_32(1101935621);
+emit_32(1124132848);
+emit_32(1130276848);
+emit_32(1101025876);
+emit_32(1123680256);
+emit_32(1130276848);
+emit_32(1100815060);
+emit_32(1124132848);
+emit_32(1130532897);
+emit_32(1101065722);
+emit_32(1123680256);
+emit_32(1130532897);
+emit_32(1100889457);
+emit_32(1124132848);
+emit_32(1130788880);
+emit_32(1101130577);
+emit_32(1123680256);
+emit_32(1130788880);
+emit_32(1101023098);
+emit_32(1124132848);
+emit_32(1131044864);
+emit_32(1100802530);
+emit_32(1123680256);
+emit_32(1131044864);
+emit_32(1100560938);
+emit_32(1124132848);
+emit_32(1131300848);
+emit_32(1100276983);
+emit_32(1123680256);
+emit_32(1131300848);
+emit_32(1099884397);
+emit_32(1124132848);
+emit_32(1131556897);
+emit_32(1099626499);
+emit_32(1123680256);
+emit_32(1131556897);
+emit_32(1099776918);
+emit_32(1124132848);
+emit_32(1131812880);
+emit_32(1099785830);
+emit_32(1123680256);
+emit_32(1131812880);
+emit_32(1099406246);
+emit_32(1124132848);
+emit_32(1132068864);
+emit_32(1099641599);
+emit_32(1123680256);
+emit_32(1132068864);
+emit_32(1099062890);
+emit_32(1124132848);
+emit_32(1081737216);
+emit_32(1100235512);
+emit_32(1123168289);
+emit_32(1090125824);
+emit_32(1100861512);
+emit_32(1123168289);
+emit_32(1094418484);
+emit_32(1101523373);
+emit_32(1123168289);
+emit_32(1098514432);
+emit_32(1102177632);
+emit_32(1123168289);
+emit_32(1100759066);
+emit_32(1102223140);
+emit_32(1123168289);
+emit_32(1102807040);
+emit_32(1101084754);
+emit_32(1123168289);
+emit_32(1104855066);
+emit_32(1099931897);
+emit_32(1123168289);
+emit_32(1106903040);
+emit_32(1099771150);
+emit_32(1123168289);
+emit_32(1108123661);
+emit_32(1099034001);
+emit_32(1123168289);
+emit_32(1109147648);
+emit_32(1097525730);
+emit_32(1123168289);
+emit_32(1110171661);
+emit_32(1097329331);
+emit_32(1123168289);
+emit_32(1111195648);
+emit_32(1097895877);
+emit_32(1123168289);
+emit_32(1112219661);
+emit_32(1098267283);
+emit_32(1123168289);
+emit_32(1113243648);
+emit_32(1098019609);
+emit_32(1123168289);
+emit_32(1114267661);
+emit_32(1097783994);
+emit_32(1123168289);
+emit_32(1115291648);
+emit_32(1097984587);
+emit_32(1123168289);
+emit_32(1116000263);
+emit_32(1098022755);
+emit_32(1123168289);
+emit_32(1116512256);
+emit_32(1098026110);
+emit_32(1123168289);
+emit_32(1117024263);
+emit_32(1097933206);
+emit_32(1123168289);
+emit_32(1117536256);
+emit_32(1098931503);
+emit_32(1123168289);
+emit_32(1118048263);
+emit_32(1099231973);
+emit_32(1123168289);
+emit_32(1118560256);
+emit_32(1099649463);
+emit_32(1123168289);
+emit_32(1119072263);
+emit_32(1100347343);
+emit_32(1123168289);
+emit_32(1119584256);
+emit_32(1100400558);
+emit_32(1123168289);
+emit_32(1120096263);
+emit_32(1101890794);
+emit_32(1123168289);
+emit_32(1120608322);
+emit_32(1103399223);
+emit_32(1123168289);
+emit_32(1121120289);
+emit_32(1104023703);
+emit_32(1123168289);
+emit_32(1121632256);
+emit_32(1104903930);
+emit_32(1123168289);
+emit_32(1122144223);
+emit_32(1105787670);
+emit_32(1123168289);
+emit_32(1122656322);
+emit_32(1106319507);
+emit_32(1123168289);
+emit_32(1123168289);
+emit_32(1107324096);
+emit_32(1123168289);
+emit_32(1123680256);
+emit_32(1107997229);
+emit_32(1123168289);
+emit_32(1124132848);
+emit_32(1108634344);
+emit_32(1123168289);
+emit_32(1124388897);
+emit_32(1108819601);
+emit_32(1123168289);
+emit_32(1124644880);
+emit_32(1108814096);
+emit_32(1123168289);
+emit_32(1124900864);
+emit_32(1108757106);
+emit_32(1123168289);
+emit_32(1125156848);
+emit_32(1108647897);
+emit_32(1123168289);
+emit_32(1125412897);
+emit_32(1108920920);
+emit_32(1123168289);
+emit_32(1125668880);
+emit_32(1109111000);
+emit_32(1123168289);
+emit_32(1125924864);
+emit_32(1109475302);
+emit_32(1123168289);
+emit_32(1126180848);
+emit_32(1109573422);
+emit_32(1123168289);
+emit_32(1126436897);
+emit_32(1109272140);
+emit_32(1123168289);
+emit_32(1126692880);
+emit_32(1108874101);
+emit_32(1123168289);
+emit_32(1126948864);
+emit_32(1108464710);
+emit_32(1123168289);
+emit_32(1127204848);
+emit_32(1108148460);
+emit_32(1123168289);
+emit_32(1127460897);
+emit_32(1107996416);
+emit_32(1123168289);
+emit_32(1127716880);
+emit_32(1107704781);
+emit_32(1123168289);
+emit_32(1127972864);
+emit_32(1107621603);
+emit_32(1123168289);
+emit_32(1128228848);
+emit_32(1107169798);
+emit_32(1123168289);
+emit_32(1128484897);
+emit_32(1106434222);
+emit_32(1123168289);
+emit_32(1128740880);
+emit_32(1105659953);
+emit_32(1123168289);
+emit_32(1128996864);
+emit_32(1104548410);
+emit_32(1123168289);
+emit_32(1129252848);
+emit_32(1103654289);
+emit_32(1123168289);
+emit_32(1129508897);
+emit_32(1102602673);
+emit_32(1123168289);
+emit_32(1129764880);
+emit_32(1101366401);
+emit_32(1123168289);
+emit_32(1130020864);
+emit_32(1100673240);
+emit_32(1123168289);
+emit_32(1130276848);
+emit_32(1100637012);
+emit_32(1123168289);
+emit_32(1130532897);
+emit_32(1101126015);
+emit_32(1123168289);
+emit_32(1130788880);
+emit_32(1101170999);
+emit_32(1123168289);
+emit_32(1131044864);
+emit_32(1101134194);
+emit_32(1123168289);
+emit_32(1131300848);
+emit_32(1101200569);
+emit_32(1123168289);
+emit_32(1131556897);
+emit_32(1100148952);
+emit_32(1123168289);
+emit_32(1131812880);
+emit_32(1099244241);
+emit_32(1123168289);
+emit_32(1132068864);
+emit_32(1099746247);
+emit_32(1123168289);
+emit_32(1081737216);
+emit_32(1100438045);
+emit_32(1122656322);
+emit_32(1090125824);
+emit_32(1100591871);
+emit_32(1122656322);
+emit_32(1094418484);
+emit_32(1101406352);
+emit_32(1122656322);
+emit_32(1098514432);
+emit_32(1101309359);
+emit_32(1122656322);
+emit_32(1100759066);
+emit_32(1101169112);
+emit_32(1122656322);
+emit_32(1102807040);
+emit_32(1100305872);
+emit_32(1122656322);
+emit_32(1104855066);
+emit_32(1099701682);
+emit_32(1122656322);
+emit_32(1106903040);
+emit_32(1099474561);
+emit_32(1122656322);
+emit_32(1108123661);
+emit_32(1098570950);
+emit_32(1122656322);
+emit_32(1109147648);
+emit_32(1097605421);
+emit_32(1122656322);
+emit_32(1110171661);
+emit_32(1097274386);
+emit_32(1122656322);
+emit_32(1111195648);
+emit_32(1097648413);
+emit_32(1122656322);
+emit_32(1112219661);
+emit_32(1097935199);
+emit_32(1122656322);
+emit_32(1113243648);
+emit_32(1097655229);
+emit_32(1122656322);
+emit_32(1114267661);
+emit_32(1098651795);
+emit_32(1122656322);
+emit_32(1115291648);
+emit_32(1099066193);
+emit_32(1122656322);
+emit_32(1116000263);
+emit_32(1098931189);
+emit_32(1122656322);
+emit_32(1116512256);
+emit_32(1098814849);
+emit_32(1122656322);
+emit_32(1117024263);
+emit_32(1098993264);
+emit_32(1122656322);
+emit_32(1117536256);
+emit_32(1099606157);
+emit_32(1122656322);
+emit_32(1118048263);
+emit_32(1099571344);
+emit_32(1122656322);
+emit_32(1118560256);
+emit_32(1099949408);
+emit_32(1122656322);
+emit_32(1119072263);
+emit_32(1100115817);
+emit_32(1122656322);
+emit_32(1119584256);
+emit_32(1100095947);
+emit_32(1122656322);
+emit_32(1120096263);
+emit_32(1100761740);
+emit_32(1122656322);
+emit_32(1120608322);
+emit_32(1101924191);
+emit_32(1122656322);
+emit_32(1121120289);
+emit_32(1102920810);
+emit_32(1122656322);
+emit_32(1121632256);
+emit_32(1103899499);
+emit_32(1122656322);
+emit_32(1122144223);
+emit_32(1105260918);
+emit_32(1122656322);
+emit_32(1122656322);
+emit_32(1106034347);
+emit_32(1122656322);
+emit_32(1123168289);
+emit_32(1107198004);
+emit_32(1122656322);
+emit_32(1123680256);
+emit_32(1107826495);
+emit_32(1122656322);
+emit_32(1124132848);
+emit_32(1108446937);
+emit_32(1122656322);
+emit_32(1124388897);
+emit_32(1108618065);
+emit_32(1122656322);
+emit_32(1124644880);
+emit_32(1108561835);
+emit_32(1122656322);
+emit_32(1124900864);
+emit_32(1108406410);
+emit_32(1122656322);
+emit_32(1125156848);
+emit_32(1108576174);
+emit_32(1122656322);
+emit_32(1125412897);
+emit_32(1109301448);
+emit_32(1122656322);
+emit_32(1125668880);
+emit_32(1109829249);
+emit_32(1122656322);
+emit_32(1125924864);
+emit_32(1110051154);
+emit_32(1122656322);
+emit_32(1126180848);
+emit_32(1110198478);
+emit_32(1122656322);
+emit_32(1126436897);
+emit_32(1109858268);
+emit_32(1122656322);
+emit_32(1126692880);
+emit_32(1109550301);
+emit_32(1122656322);
+emit_32(1126948864);
+emit_32(1108917669);
+emit_32(1122656322);
+emit_32(1127204848);
+emit_32(1108613005);
+emit_32(1122656322);
+emit_32(1127460897);
+emit_32(1108306375);
+emit_32(1122656322);
+emit_32(1127716880);
+emit_32(1107971382);
+emit_32(1122656322);
+emit_32(1127972864);
+emit_32(1107731022);
+emit_32(1122656322);
+emit_32(1128228848);
+emit_32(1107436241);
+emit_32(1122656322);
+emit_32(1128484897);
+emit_32(1106805103);
+emit_32(1122656322);
+emit_32(1128740880);
+emit_32(1105736132);
+emit_32(1122656322);
+emit_32(1128996864);
+emit_32(1104687818);
+emit_32(1122656322);
+emit_32(1129252848);
+emit_32(1103709969);
+emit_32(1122656322);
+emit_32(1129508897);
+emit_32(1102382734);
+emit_32(1122656322);
+emit_32(1129764880);
+emit_32(1101330121);
+emit_32(1122656322);
+emit_32(1130020864);
+emit_32(1100614520);
+emit_32(1122656322);
+emit_32(1130276848);
+emit_32(1100389233);
+emit_32(1122656322);
+emit_32(1130532897);
+emit_32(1100597690);
+emit_32(1122656322);
+emit_32(1130788880);
+emit_32(1101237636);
+emit_32(1122656322);
+emit_32(1131044864);
+emit_32(1101286500);
+emit_32(1122656322);
+emit_32(1131300848);
+emit_32(1101166386);
+emit_32(1122656322);
+emit_32(1131556897);
+emit_32(1100711041);
+emit_32(1122656322);
+emit_32(1131812880);
+emit_32(1099946053);
+emit_32(1122656322);
+emit_32(1132068864);
+emit_32(1099609932);
+emit_32(1122656322);
+emit_32(1081737216);
+emit_32(1100139620);
+emit_32(1122144223);
+emit_32(1090125824);
+emit_32(1100323697);
+emit_32(1122144223);
+emit_32(1094418484);
+emit_32(1100674708);
+emit_32(1122144223);
+emit_32(1098514432);
+emit_32(1100753299);
+emit_32(1122144223);
+emit_32(1100759066);
+emit_32(1100255278);
+emit_32(1122144223);
+emit_32(1102807040);
+emit_32(1099783052);
+emit_32(1122144223);
+emit_32(1104855066);
+emit_32(1099327131);
+emit_32(1122144223);
+emit_32(1106903040);
+emit_32(1099190764);
+emit_32(1122144223);
+emit_32(1108123661);
+emit_32(1098756443);
+emit_32(1122144223);
+emit_32(1109147648);
+emit_32(1097994967);
+emit_32(1122144223);
+emit_32(1110171661);
+emit_32(1098760743);
+emit_32(1122144223);
+emit_32(1111195648);
+emit_32(1099136762);
+emit_32(1122144223);
+emit_32(1112219661);
+emit_32(1099063729);
+emit_32(1122144223);
+emit_32(1113243648);
+emit_32(1099278634);
+emit_32(1122144223);
+emit_32(1114267661);
+emit_32(1099336883);
+emit_32(1122144223);
+emit_32(1115291648);
+emit_32(1099511261);
+emit_32(1122144223);
+emit_32(1116000263);
+emit_32(1099185311);
+emit_32(1122144223);
+emit_32(1116512256);
+emit_32(1098779931);
+emit_32(1122144223);
+emit_32(1117024263);
+emit_32(1099229561);
+emit_32(1122144223);
+emit_32(1117536256);
+emit_32(1099456787);
+emit_32(1122144223);
+emit_32(1118048263);
+emit_32(1099608673);
+emit_32(1122144223);
+emit_32(1118560256);
+emit_32(1099933417);
+emit_32(1122144223);
+emit_32(1119072263);
+emit_32(1100161640);
+emit_32(1122144223);
+emit_32(1119584256);
+emit_32(1100494039);
+emit_32(1122144223);
+emit_32(1120096263);
+emit_32(1100626841);
+emit_32(1122144223);
+emit_32(1120608322);
+emit_32(1101085173);
+emit_32(1122144223);
+emit_32(1121120289);
+emit_32(1102206573);
+emit_32(1122144223);
+emit_32(1121632256);
+emit_32(1103460303);
+emit_32(1122144223);
+emit_32(1122144223);
+emit_32(1104032825);
+emit_32(1122144223);
+emit_32(1122656322);
+emit_32(1105660740);
+emit_32(1122144223);
+emit_32(1123168289);
+emit_32(1106883065);
+emit_32(1122144223);
+emit_32(1123680256);
+emit_32(1107680480);
+emit_32(1122144223);
+emit_32(1124132848);
+emit_32(1108110344);
+emit_32(1122144223);
+emit_32(1124388897);
+emit_32(1108454854);
+emit_32(1122144223);
+emit_32(1124644880);
+emit_32(1108686065);
+emit_32(1122144223);
+emit_32(1124900864);
+emit_32(1108654057);
+emit_32(1122144223);
+emit_32(1125156848);
+emit_32(1108922519);
+emit_32(1122144223);
+emit_32(1125412897);
+emit_32(1109770450);
+emit_32(1122144223);
+emit_32(1125668880);
+emit_32(1110434487);
+emit_32(1122144223);
+emit_32(1125924864);
+emit_32(1110705884);
+emit_32(1122144223);
+emit_32(1126180848);
+emit_32(1110743214);
+emit_32(1122144223);
+emit_32(1126436897);
+emit_32(1110390656);
+emit_32(1122144223);
+emit_32(1126692880);
+emit_32(1110053093);
+emit_32(1122144223);
+emit_32(1126948864);
+emit_32(1109488042);
+emit_32(1122144223);
+emit_32(1127204848);
+emit_32(1108960713);
+emit_32(1122144223);
+emit_32(1127460897);
+emit_32(1108725701);
+emit_32(1122144223);
+emit_32(1127716880);
+emit_32(1108233840);
+emit_32(1122144223);
+emit_32(1127972864);
+emit_32(1107884455);
+emit_32(1122144223);
+emit_32(1128228848);
+emit_32(1107301971);
+emit_32(1122144223);
+emit_32(1128484897);
+emit_32(1106353639);
+emit_32(1122144223);
+emit_32(1128740880);
+emit_32(1105631956);
+emit_32(1122144223);
+emit_32(1128996864);
+emit_32(1104783920);
+emit_32(1122144223);
+emit_32(1129252848);
+emit_32(1103622046);
+emit_32(1122144223);
+emit_32(1129508897);
+emit_32(1102332926);
+emit_32(1122144223);
+emit_32(1129764880);
+emit_32(1100887622);
+emit_32(1122144223);
+emit_32(1130020864);
+emit_32(1100248410);
+emit_32(1122144223);
+emit_32(1130276848);
+emit_32(1100033242);
+emit_32(1122144223);
+emit_32(1130532897);
+emit_32(1099938346);
+emit_32(1122144223);
+emit_32(1130788880);
+emit_32(1100585370);
+emit_32(1122144223);
+emit_32(1131044864);
+emit_32(1101043650);
+emit_32(1122144223);
+emit_32(1131300848);
+emit_32(1101065565);
+emit_32(1122144223);
+emit_32(1131556897);
+emit_32(1100500540);
+emit_32(1122144223);
+emit_32(1131812880);
+emit_32(1100135373);
+emit_32(1122144223);
+emit_32(1132068864);
+emit_32(1100354840);
+emit_32(1122144223);
+emit_32(1081737216);
+emit_32(1099957115);
+emit_32(1121632256);
+emit_32(1090125824);
+emit_32(1100037593);
+emit_32(1121632256);
+emit_32(1094418484);
+emit_32(1100062445);
+emit_32(1121632256);
+emit_32(1098514432);
+emit_32(1100063284);
+emit_32(1121632256);
+emit_32(1100759066);
+emit_32(1099841195);
+emit_32(1121632256);
+emit_32(1102807040);
+emit_32(1099713898);
+emit_32(1121632256);
+emit_32(1104855066);
+emit_32(1099359951);
+emit_32(1121632256);
+emit_32(1106903040);
+emit_32(1098837289);
+emit_32(1121632256);
+emit_32(1108123661);
+emit_32(1098060399);
+emit_32(1121632256);
+emit_32(1109147648);
+emit_32(1098949381);
+emit_32(1121632256);
+emit_32(1110171661);
+emit_32(1099007001);
+emit_32(1121632256);
+emit_32(1111195648);
+emit_32(1098883950);
+emit_32(1121632256);
+emit_32(1112219661);
+emit_32(1099407242);
+emit_32(1121632256);
+emit_32(1113243648);
+emit_32(1099479174);
+emit_32(1121632256);
+emit_32(1114267661);
+emit_32(1099627076);
+emit_32(1121632256);
+emit_32(1115291648);
+emit_32(1099212207);
+emit_32(1121632256);
+emit_32(1116000263);
+emit_32(1099332898);
+emit_32(1121632256);
+emit_32(1116512256);
+emit_32(1099391985);
+emit_32(1121632256);
+emit_32(1117024263);
+emit_32(1099349203);
+emit_32(1121632256);
+emit_32(1117536256);
+emit_32(1099452960);
+emit_32(1121632256);
+emit_32(1118048263);
+emit_32(1099360476);
+emit_32(1121632256);
+emit_32(1118560256);
+emit_32(1099645374);
+emit_32(1121632256);
+emit_32(1119072263);
+emit_32(1099926864);
+emit_32(1121632256);
+emit_32(1119584256);
+emit_32(1100231737);
+emit_32(1121632256);
+emit_32(1120096263);
+emit_32(1100104545);
+emit_32(1121632256);
+emit_32(1120608322);
+emit_32(1100531630);
+emit_32(1121632256);
+emit_32(1121120289);
+emit_32(1101229824);
+emit_32(1121632256);
+emit_32(1121632256);
+emit_32(1102138835);
+emit_32(1121632256);
+emit_32(1122144223);
+emit_32(1103981340);
+emit_32(1121632256);
+emit_32(1122656322);
+emit_32(1105126595);
+emit_32(1121632256);
+emit_32(1123168289);
+emit_32(1106590722);
+emit_32(1121632256);
+emit_32(1123680256);
+emit_32(1107669182);
+emit_32(1121632256);
+emit_32(1124132848);
+emit_32(1107932296);
+emit_32(1121632256);
+emit_32(1124388897);
+emit_32(1108574129);
+emit_32(1121632256);
+emit_32(1124644880);
+emit_32(1108726278);
+emit_32(1121632256);
+emit_32(1124900864);
+emit_32(1108737393);
+emit_32(1121632256);
+emit_32(1125156848);
+emit_32(1109413095);
+emit_32(1121632256);
+emit_32(1125412897);
+emit_32(1110114933);
+emit_32(1121632256);
+emit_32(1125668880);
+emit_32(1110645303);
+emit_32(1121632256);
+emit_32(1125924864);
+emit_32(1111013117);
+emit_32(1121632256);
+emit_32(1126180848);
+emit_32(1111064655);
+emit_32(1121632256);
+emit_32(1126436897);
+emit_32(1110758890);
+emit_32(1121632256);
+emit_32(1126692880);
+emit_32(1110376107);
+emit_32(1121632256);
+emit_32(1126948864);
+emit_32(1109822407);
+emit_32(1121632256);
+emit_32(1127204848);
+emit_32(1109326797);
+emit_32(1121632256);
+emit_32(1127460897);
+emit_32(1108601838);
+emit_32(1121632256);
+emit_32(1127716880);
+emit_32(1108258010);
+emit_32(1121632256);
+emit_32(1127972864);
+emit_32(1108088245);
+emit_32(1121632256);
+emit_32(1128228848);
+emit_32(1107411154);
+emit_32(1121632256);
+emit_32(1128484897);
+emit_32(1106040377);
+emit_32(1121632256);
+emit_32(1128740880);
+emit_32(1105294629);
+emit_32(1121632256);
+emit_32(1128996864);
+emit_32(1104278664);
+emit_32(1121632256);
+emit_32(1129252848);
+emit_32(1103177554);
+emit_32(1121632256);
+emit_32(1129508897);
+emit_32(1102109580);
+emit_32(1121632256);
+emit_32(1129764880);
+emit_32(1101025824);
+emit_32(1121632256);
+emit_32(1130020864);
+emit_32(1099990984);
+emit_32(1121632256);
+emit_32(1130276848);
+emit_32(1099361681);
+emit_32(1121632256);
+emit_32(1130532897);
+emit_32(1099399011);
+emit_32(1121632256);
+emit_32(1130788880);
+emit_32(1099424229);
+emit_32(1121632256);
+emit_32(1131044864);
+emit_32(1099786407);
+emit_32(1121632256);
+emit_32(1131300848);
+emit_32(1100148585);
+emit_32(1121632256);
+emit_32(1131556897);
+emit_32(1100174118);
+emit_32(1121632256);
+emit_32(1131812880);
+emit_32(1100070047);
+emit_32(1121632256);
+emit_32(1132068864);
+emit_32(1100267704);
+emit_32(1121632256);
+emit_32(1081737216);
+emit_32(1099935672);
+emit_32(1121120289);
+emit_32(1090125824);
+emit_32(1100185285);
+emit_32(1121120289);
+emit_32(1094418484);
+emit_32(1100187225);
+emit_32(1121120289);
+emit_32(1098514432);
+emit_32(1099887280);
+emit_32(1121120289);
+emit_32(1100759066);
+emit_32(1099826148);
+emit_32(1121120289);
+emit_32(1102807040);
+emit_32(1099732563);
+emit_32(1121120289);
+emit_32(1104855066);
+emit_32(1099085749);
+emit_32(1121120289);
+emit_32(1106903040);
+emit_32(1098762735);
+emit_32(1121120289);
+emit_32(1108123661);
+emit_32(1098970248);
+emit_32(1121120289);
+emit_32(1109147648);
+emit_32(1099373740);
+emit_32(1121120289);
+emit_32(1110171661);
+emit_32(1099054658);
+emit_32(1121120289);
+emit_32(1111195648);
+emit_32(1098747635);
+emit_32(1121120289);
+emit_32(1112219661);
+emit_32(1099059272);
+emit_32(1121120289);
+emit_32(1113243648);
+emit_32(1099057280);
+emit_32(1121120289);
+emit_32(1114267661);
+emit_32(1099293943);
+emit_32(1121120289);
+emit_32(1115291648);
+emit_32(1099644535);
+emit_32(1121120289);
+emit_32(1116000263);
+emit_32(1099369441);
+emit_32(1121120289);
+emit_32(1116512256);
+emit_32(1099598817);
+emit_32(1121120289);
+emit_32(1117024263);
+emit_32(1099807641);
+emit_32(1121120289);
+emit_32(1117536256);
+emit_32(1099466382);
+emit_32(1121120289);
+emit_32(1118048263);
+emit_32(1099290640);
+emit_32(1121120289);
+emit_32(1118560256);
+emit_32(1099113641);
+emit_32(1121120289);
+emit_32(1119072263);
+emit_32(1099247124);
+emit_32(1121120289);
+emit_32(1119584256);
+emit_32(1099832754);
+emit_32(1121120289);
+emit_32(1120096263);
+emit_32(1100177054);
+emit_32(1121120289);
+emit_32(1120608322);
+emit_32(1100171549);
+emit_32(1121120289);
+emit_32(1121120289);
+emit_32(1100677172);
+emit_32(1121120289);
+emit_32(1121632256);
+emit_32(1101971063);
+emit_32(1121120289);
+emit_32(1122144223);
+emit_32(1103633737);
+emit_32(1121120289);
+emit_32(1122656322);
+emit_32(1104631195);
+emit_32(1121120289);
+emit_32(1123168289);
+emit_32(1106163951);
+emit_32(1121120289);
+emit_32(1123680256);
+emit_32(1107425676);
+emit_32(1121120289);
+emit_32(1124132848);
+emit_32(1107927394);
+emit_32(1121120289);
+emit_32(1124388897);
+emit_32(1108148145);
+emit_32(1121120289);
+emit_32(1124644880);
+emit_32(1108470268);
+emit_32(1121120289);
+emit_32(1124900864);
+emit_32(1108816246);
+emit_32(1121120289);
+emit_32(1125156848);
+emit_32(1109543145);
+emit_32(1121120289);
+emit_32(1125412897);
+emit_32(1110276781);
+emit_32(1121120289);
+emit_32(1125668880);
+emit_32(1110909649);
+emit_32(1121120289);
+emit_32(1125924864);
+emit_32(1111224091);
+emit_32(1121120289);
+emit_32(1126180848);
+emit_32(1111301135);
+emit_32(1121120289);
+emit_32(1126436897);
+emit_32(1111167992);
+emit_32(1121120289);
+emit_32(1126692880);
+emit_32(1110709345);
+emit_32(1121120289);
+emit_32(1126948864);
+emit_32(1110071837);
+emit_32(1121120289);
+emit_32(1127204848);
+emit_32(1109390262);
+emit_32(1121120289);
+emit_32(1127460897);
+emit_32(1108886238);
+emit_32(1121120289);
+emit_32(1127716880);
+emit_32(1108757814);
+emit_32(1121120289);
+emit_32(1127972864);
+emit_32(1108248258);
+emit_32(1121120289);
+emit_32(1128228848);
+emit_32(1107404862);
+emit_32(1121120289);
+emit_32(1128484897);
+emit_32(1106003467);
+emit_32(1121120289);
+emit_32(1128740880);
+emit_32(1104821354);
+emit_32(1121120289);
+emit_32(1128996864);
+emit_32(1104184607);
+emit_32(1121120289);
+emit_32(1129252848);
+emit_32(1103554570);
+emit_32(1121120289);
+emit_32(1129508897);
+emit_32(1102588989);
+emit_32(1121120289);
+emit_32(1129764880);
+emit_32(1101617378);
+emit_32(1121120289);
+emit_32(1130020864);
+emit_32(1100444598);
+emit_32(1121120289);
+emit_32(1130276848);
+emit_32(1099799619);
+emit_32(1121120289);
+emit_32(1130532897);
+emit_32(1099403939);
+emit_32(1121120289);
+emit_32(1130788880);
+emit_32(1099507276);
+emit_32(1121120289);
+emit_32(1131044864);
+emit_32(1099782737);
+emit_32(1121120289);
+emit_32(1131300848);
+emit_32(1099916535);
+emit_32(1121120289);
+emit_32(1131556897);
+emit_32(1099956486);
+emit_32(1121120289);
+emit_32(1131812880);
+emit_32(1100280182);
+emit_32(1121120289);
+emit_32(1132068864);
+emit_32(1100594020);
+emit_32(1121120289);
+emit_32(1081737216);
+emit_32(1099802817);
+emit_32(1120608322);
+emit_32(1090125824);
+emit_32(1100171706);
+emit_32(1120608322);
+emit_32(1094418484);
+emit_32(1099951820);
+emit_32(1120608322);
+emit_32(1098514432);
+emit_32(1100236666);
+emit_32(1120608322);
+emit_32(1100759066);
+emit_32(1100302621);
+emit_32(1120608322);
+emit_32(1102807040);
+emit_32(1099644797);
+emit_32(1120608322);
+emit_32(1104855066);
+emit_32(1099555458);
+emit_32(1120608322);
+emit_32(1106903040);
+emit_32(1099452645);
+emit_32(1120608322);
+emit_32(1108123661);
+emit_32(1099951138);
+emit_32(1120608322);
+emit_32(1109147648);
+emit_32(1100092696);
+emit_32(1120608322);
+emit_32(1110171661);
+emit_32(1099905735);
+emit_32(1120608322);
+emit_32(1111195648);
+emit_32(1099555563);
+emit_32(1120608322);
+emit_32(1112219661);
+emit_32(1098964743);
+emit_32(1120608322);
+emit_32(1113243648);
+emit_32(1099224475);
+emit_32(1120608322);
+emit_32(1114267661);
+emit_32(1099204185);
+emit_32(1120608322);
+emit_32(1115291648);
+emit_32(1099361419);
+emit_32(1120608322);
+emit_32(1116000263);
+emit_32(1099438385);
+emit_32(1120608322);
+emit_32(1116512256);
+emit_32(1099693294);
+emit_32(1120608322);
+emit_32(1117024263);
+emit_32(1099966448);
+emit_32(1120608322);
+emit_32(1117536256);
+emit_32(1099611085);
+emit_32(1120608322);
+emit_32(1118048263);
+emit_32(1099352087);
+emit_32(1120608322);
+emit_32(1118560256);
+emit_32(1098341627);
+emit_32(1120608322);
+emit_32(1119072263);
+emit_32(1098488322);
+emit_32(1120608322);
+emit_32(1119584256);
+emit_32(1099373688);
+emit_32(1120608322);
+emit_32(1120096263);
+emit_32(1099586286);
+emit_32(1120608322);
+emit_32(1120608322);
+emit_32(1099611819);
+emit_32(1120608322);
+emit_32(1121120289);
+emit_32(1100077125);
+emit_32(1120608322);
+emit_32(1121632256);
+emit_32(1101296094);
+emit_32(1120608322);
+emit_32(1122144223);
+emit_32(1102346872);
+emit_32(1120608322);
+emit_32(1122656322);
+emit_32(1103678512);
+emit_32(1120608322);
+emit_32(1123168289);
+emit_32(1105306478);
+emit_32(1120608322);
+emit_32(1123680256);
+emit_32(1106488852);
+emit_32(1120608322);
+emit_32(1124132848);
+emit_32(1107446438);
+emit_32(1120608322);
+emit_32(1124388897);
+emit_32(1107966506);
+emit_32(1120608322);
+emit_32(1124644880);
+emit_32(1108466205);
+emit_32(1120608322);
+emit_32(1124900864);
+emit_32(1108823481);
+emit_32(1120608322);
+emit_32(1125156848);
+emit_32(1109507624);
+emit_32(1120608322);
+emit_32(1125412897);
+emit_32(1110351387);
+emit_32(1120608322);
+emit_32(1125668880);
+emit_32(1111019749);
+emit_32(1120608322);
+emit_32(1125924864);
+emit_32(1111329971);
+emit_32(1120608322);
+emit_32(1126180848);
+emit_32(1111365308);
+emit_32(1120608322);
+emit_32(1126436897);
+emit_32(1111184166);
+emit_32(1120608322);
+emit_32(1126692880);
+emit_32(1110574760);
+emit_32(1120608322);
+emit_32(1126948864);
+emit_32(1110380328);
+emit_32(1120608322);
+emit_32(1127204848);
+emit_32(1109912165);
+emit_32(1120608322);
+emit_32(1127460897);
+emit_32(1109599191);
+emit_32(1120608322);
+emit_32(1127716880);
+emit_32(1109069372);
+emit_32(1120608322);
+emit_32(1127972864);
+emit_32(1108386487);
+emit_32(1120608322);
+emit_32(1128228848);
+emit_32(1107668422);
+emit_32(1120608322);
+emit_32(1128484897);
+emit_32(1106120173);
+emit_32(1120608322);
+emit_32(1128740880);
+emit_32(1104797657);
+emit_32(1120608322);
+emit_32(1128996864);
+emit_32(1104352117);
+emit_32(1120608322);
+emit_32(1129252848);
+emit_32(1103791338);
+emit_32(1120608322);
+emit_32(1129508897);
+emit_32(1102834355);
+emit_32(1120608322);
+emit_32(1129764880);
+emit_32(1102173438);
+emit_32(1120608322);
+emit_32(1130020864);
+emit_32(1101005534);
+emit_32(1120608322);
+emit_32(1130276848);
+emit_32(1100530582);
+emit_32(1120608322);
+emit_32(1130532897);
+emit_32(1099941020);
+emit_32(1120608322);
+emit_32(1130788880);
+emit_32(1099395393);
+emit_32(1120608322);
+emit_32(1131044864);
+emit_32(1099621676);
+emit_32(1120608322);
+emit_32(1131300848);
+emit_32(1099449605);
+emit_32(1120608322);
+emit_32(1131556897);
+emit_32(1099506595);
+emit_32(1120608322);
+emit_32(1131812880);
+emit_32(1100131336);
+emit_32(1120608322);
+emit_32(1132068864);
+emit_32(1100624377);
+emit_32(1120608322);
+emit_32(1081737216);
+emit_32(1099965451);
+emit_32(1120096263);
+emit_32(1090125824);
+emit_32(1100056678);
+emit_32(1120096263);
+emit_32(1094418484);
+emit_32(1099809423);
+emit_32(1120096263);
+emit_32(1098514432);
+emit_32(1100136789);
+emit_32(1120096263);
+emit_32(1100759066);
+emit_32(1100328573);
+emit_32(1120096263);
+emit_32(1102807040);
+emit_32(1099649149);
+emit_32(1120096263);
+emit_32(1104855066);
+emit_32(1099960680);
+emit_32(1120096263);
+emit_32(1106903040);
+emit_32(1100214383);
+emit_32(1120096263);
+emit_32(1108123661);
+emit_32(1100707214);
+emit_32(1120096263);
+emit_32(1109147648);
+emit_32(1100899838);
+emit_32(1120096263);
+emit_32(1110171661);
+emit_32(1100765934);
+emit_32(1120096263);
+emit_32(1111195648);
+emit_32(1100769552);
+emit_32(1120096263);
+emit_32(1112219661);
+emit_32(1099924609);
+emit_32(1120096263);
+emit_32(1113243648);
+emit_32(1099242301);
+emit_32(1120096263);
+emit_32(1114267661);
+emit_32(1098940101);
+emit_32(1120096263);
+emit_32(1115291648);
+emit_32(1099295726);
+emit_32(1120096263);
+emit_32(1116000263);
+emit_32(1099408343);
+emit_32(1120096263);
+emit_32(1116512256);
+emit_32(1099741895);
+emit_32(1120096263);
+emit_32(1117024263);
+emit_32(1099493854);
+emit_32(1120096263);
+emit_32(1117536256);
+emit_32(1099382810);
+emit_32(1120096263);
+emit_32(1118048263);
+emit_32(1099116734);
+emit_32(1120096263);
+emit_32(1118560256);
+emit_32(1098839491);
+emit_32(1120096263);
+emit_32(1119072263);
+emit_32(1098942461);
+emit_32(1120096263);
+emit_32(1119584256);
+emit_32(1099008626);
+emit_32(1120096263);
+emit_32(1120096263);
+emit_32(1099170002);
+emit_32(1120096263);
+emit_32(1120608322);
+emit_32(1099494064);
+emit_32(1120096263);
+emit_32(1121120289);
+emit_32(1099581830);
+emit_32(1120096263);
+emit_32(1121632256);
+emit_32(1100481875);
+emit_32(1120096263);
+emit_32(1122144223);
+emit_32(1101530032);
+emit_32(1120096263);
+emit_32(1122656322);
+emit_32(1102909853);
+emit_32(1120096263);
+emit_32(1123168289);
+emit_32(1104403812);
+emit_32(1120096263);
+emit_32(1123680256);
+emit_32(1105884611);
+emit_32(1120096263);
+emit_32(1124132848);
+emit_32(1107445731);
+emit_32(1120096263);
+emit_32(1124388897);
+emit_32(1107970254);
+emit_32(1120096263);
+emit_32(1124644880);
+emit_32(1108388505);
+emit_32(1120096263);
+emit_32(1124900864);
+emit_32(1108761877);
+emit_32(1120096263);
+emit_32(1125156848);
+emit_32(1109478133);
+emit_32(1120096263);
+emit_32(1125412897);
+emit_32(1110090973);
+emit_32(1120096263);
+emit_32(1125668880);
+emit_32(1110851033);
+emit_32(1120096263);
+emit_32(1125924864);
+emit_32(1111411497);
+emit_32(1120096263);
+emit_32(1126180848);
+emit_32(1111336655);
+emit_32(1120096263);
+emit_32(1126436897);
+emit_32(1111269415);
+emit_32(1120096263);
+emit_32(1126692880);
+emit_32(1110784292);
+emit_32(1120096263);
+emit_32(1126948864);
+emit_32(1110653508);
+emit_32(1120096263);
+emit_32(1127204848);
+emit_32(1110359330);
+emit_32(1120096263);
+emit_32(1127460897);
+emit_32(1109834623);
+emit_32(1120096263);
+emit_32(1127716880);
+emit_32(1109238009);
+emit_32(1120096263);
+emit_32(1127972864);
+emit_32(1108505212);
+emit_32(1120096263);
+emit_32(1128228848);
+emit_32(1107662209);
+emit_32(1120096263);
+emit_32(1128484897);
+emit_32(1106214755);
+emit_32(1120096263);
+emit_32(1128740880);
+emit_32(1105231400);
+emit_32(1120096263);
+emit_32(1128996864);
+emit_32(1104882277);
+emit_32(1120096263);
+emit_32(1129252848);
+emit_32(1103989781);
+emit_32(1120096263);
+emit_32(1129508897);
+emit_32(1103333268);
+emit_32(1120096263);
+emit_32(1129764880);
+emit_32(1102701186);
+emit_32(1120096263);
+emit_32(1130020864);
+emit_32(1101762396);
+emit_32(1120096263);
+emit_32(1130276848);
+emit_32(1100764257);
+emit_32(1120096263);
+emit_32(1130532897);
+emit_32(1100213020);
+emit_32(1120096263);
+emit_32(1130788880);
+emit_32(1099813093);
+emit_32(1120096263);
+emit_32(1131044864);
+emit_32(1099177080);
+emit_32(1120096263);
+emit_32(1131300848);
+emit_32(1099042862);
+emit_32(1120096263);
+emit_32(1131556897);
+emit_32(1098988336);
+emit_32(1120096263);
+emit_32(1131812880);
+emit_32(1099476815);
+emit_32(1120096263);
+emit_32(1132068864);
+emit_32(1100226285);
+emit_32(1120096263);
+emit_32(1081737216);
+emit_32(1099519545);
+emit_32(1119584256);
+emit_32(1090125824);
+emit_32(1099335991);
+emit_32(1119584256);
+emit_32(1094418484);
+emit_32(1099709442);
+emit_32(1119584256);
+emit_32(1098514432);
+emit_32(1100359978);
+emit_32(1119584256);
+emit_32(1100759066);
+emit_32(1100132490);
+emit_32(1119584256);
+emit_32(1102807040);
+emit_32(1100526073);
+emit_32(1119584256);
+emit_32(1104855066);
+emit_32(1100876716);
+emit_32(1119584256);
+emit_32(1106903040);
+emit_32(1101010724);
+emit_32(1119584256);
+emit_32(1108123661);
+emit_32(1101185208);
+emit_32(1119584256);
+emit_32(1109147648);
+emit_32(1101761557);
+emit_32(1119584256);
+emit_32(1110171661);
+emit_32(1101844080);
+emit_32(1119584256);
+emit_32(1111195648);
+emit_32(1101813409);
+emit_32(1119584256);
+emit_32(1112219661);
+emit_32(1101402839);
+emit_32(1119584256);
+emit_32(1113243648);
+emit_32(1100438936);
+emit_32(1119584256);
+emit_32(1114267661);
+emit_32(1099786984);
+emit_32(1119584256);
+emit_32(1115291648);
+emit_32(1099715523);
+emit_32(1119584256);
+emit_32(1116000263);
+emit_32(1099745985);
+emit_32(1119584256);
+emit_32(1116512256);
+emit_32(1100093902);
+emit_32(1119584256);
+emit_32(1117024263);
+emit_32(1100168351);
+emit_32(1119584256);
+emit_32(1117536256);
+emit_32(1100068946);
+emit_32(1119584256);
+emit_32(1118048263);
+emit_32(1100204894);
+emit_32(1119584256);
+emit_32(1118560256);
+emit_32(1099776865);
+emit_32(1119584256);
+emit_32(1119072263);
+emit_32(1099815715);
+emit_32(1119584256);
+emit_32(1119584256);
+emit_32(1100174957);
+emit_32(1119584256);
+emit_32(1120096263);
+emit_32(1100503528);
+emit_32(1119584256);
+emit_32(1120608322);
+emit_32(1100870425);
+emit_32(1119584256);
+emit_32(1121120289);
+emit_32(1100930771);
+emit_32(1119584256);
+emit_32(1121632256);
+emit_32(1100869219);
+emit_32(1119584256);
+emit_32(1122144223);
+emit_32(1101778439);
+emit_32(1119584256);
+emit_32(1122656322);
+emit_32(1103199574);
+emit_32(1119584256);
+emit_32(1123168289);
+emit_32(1104588361);
+emit_32(1119584256);
+emit_32(1123680256);
+emit_32(1106227809);
+emit_32(1119584256);
+emit_32(1124132848);
+emit_32(1107512970);
+emit_32(1119584256);
+emit_32(1124388897);
+emit_32(1107998251);
+emit_32(1119584256);
+emit_32(1124644880);
+emit_32(1108347008);
+emit_32(1119584256);
+emit_32(1124900864);
+emit_32(1108602048);
+emit_32(1119584256);
+emit_32(1125156848);
+emit_32(1109290831);
+emit_32(1119584256);
+emit_32(1125412897);
+emit_32(1109977176);
+emit_32(1119584256);
+emit_32(1125668880);
+emit_32(1110570959);
+emit_32(1119584256);
+emit_32(1125924864);
+emit_32(1111274737);
+emit_32(1119584256);
+emit_32(1126180848);
+emit_32(1111376973);
+emit_32(1119584256);
+emit_32(1126436897);
+emit_32(1111218586);
+emit_32(1119584256);
+emit_32(1126692880);
+emit_32(1110884090);
+emit_32(1119584256);
+emit_32(1126948864);
+emit_32(1110905140);
+emit_32(1119584256);
+emit_32(1127204848);
+emit_32(1110659642);
+emit_32(1119584256);
+emit_32(1127460897);
+emit_32(1110072466);
+emit_32(1119584256);
+emit_32(1127716880);
+emit_32(1109486102);
+emit_32(1119584256);
+emit_32(1127972864);
+emit_32(1108855960);
+emit_32(1119584256);
+emit_32(1128228848);
+emit_32(1108119781);
+emit_32(1119584256);
+emit_32(1128484897);
+emit_32(1107034689);
+emit_32(1119584256);
+emit_32(1128740880);
+emit_32(1106087772);
+emit_32(1119584256);
+emit_32(1128996864);
+emit_32(1105093617);
+emit_32(1119584256);
+emit_32(1129252848);
+emit_32(1104335182);
+emit_32(1119584256);
+emit_32(1129508897);
+emit_32(1104074192);
+emit_32(1119584256);
+emit_32(1129764880);
+emit_32(1103483057);
+emit_32(1119584256);
+emit_32(1130020864);
+emit_32(1102981208);
+emit_32(1119584256);
+emit_32(1130276848);
+emit_32(1101489714);
+emit_32(1119584256);
+emit_32(1130532897);
+emit_32(1100552235);
+emit_32(1119584256);
+emit_32(1130788880);
+emit_32(1100255278);
+emit_32(1119584256);
+emit_32(1131044864);
+emit_32(1099722392);
+emit_32(1119584256);
+emit_32(1131300848);
+emit_32(1097754634);
+emit_32(1119584256);
+emit_32(1131556897);
+emit_32(1099078199);
+emit_32(1119584256);
+emit_32(1131812880);
+emit_32(1098909588);
+emit_32(1119584256);
+emit_32(1132068864);
+emit_32(1098899364);
+emit_32(1119584256);
+emit_32(1081737216);
+emit_32(1098532992);
+emit_32(1119072263);
+emit_32(1090125824);
+emit_32(1099050359);
+emit_32(1119072263);
+emit_32(1094418484);
+emit_32(1099771203);
+emit_32(1119072263);
+emit_32(1098514432);
+emit_32(1100405277);
+emit_32(1119072263);
+emit_32(1100759066);
+emit_32(1100821823);
+emit_32(1119072263);
+emit_32(1102807040);
+emit_32(1101489399);
+emit_32(1119072263);
+emit_32(1104855066);
+emit_32(1101426590);
+emit_32(1119072263);
+emit_32(1106903040);
+emit_32(1101124023);
+emit_32(1119072263);
+emit_32(1108123661);
+emit_32(1101831497);
+emit_32(1119072263);
+emit_32(1109147648);
+emit_32(1102350123);
+emit_32(1119072263);
+emit_32(1110171661);
+emit_32(1102793199);
+emit_32(1119072263);
+emit_32(1111195648);
+emit_32(1102843111);
+emit_32(1119072263);
+emit_32(1112219661);
+emit_32(1102558318);
+emit_32(1119072263);
+emit_32(1113243648);
+emit_32(1101824891);
+emit_32(1119072263);
+emit_32(1114267661);
+emit_32(1101196113);
+emit_32(1119072263);
+emit_32(1115291648);
+emit_32(1100804365);
+emit_32(1119072263);
+emit_32(1116000263);
+emit_32(1100310538);
+emit_32(1119072263);
+emit_32(1116512256);
+emit_32(1100314680);
+emit_32(1119072263);
+emit_32(1117024263);
+emit_32(1100878604);
+emit_32(1119072263);
+emit_32(1117536256);
+emit_32(1101233180);
+emit_32(1119072263);
+emit_32(1118048263);
+emit_32(1101099486);
+emit_32(1119072263);
+emit_32(1118560256);
+emit_32(1100717123);
+emit_32(1119072263);
+emit_32(1119072263);
+emit_32(1100634758);
+emit_32(1119072263);
+emit_32(1119584256);
+emit_32(1100997670);
+emit_32(1119072263);
+emit_32(1120096263);
+emit_32(1101349205);
+emit_32(1119072263);
+emit_32(1120608322);
+emit_32(1101475873);
+emit_32(1119072263);
+emit_32(1121120289);
+emit_32(1101425646);
+emit_32(1119072263);
+emit_32(1121632256);
+emit_32(1101796422);
+emit_32(1119072263);
+emit_32(1122144223);
+emit_32(1102446120);
+emit_32(1119072263);
+emit_32(1122656322);
+emit_32(1103203559);
+emit_32(1119072263);
+emit_32(1123168289);
+emit_32(1104856849);
+emit_32(1119072263);
+emit_32(1123680256);
+emit_32(1106223877);
+emit_32(1119072263);
+emit_32(1124132848);
+emit_32(1107396421);
+emit_32(1119072263);
+emit_32(1124388897);
+emit_32(1107875018);
+emit_32(1119072263);
+emit_32(1124644880);
+emit_32(1108277173);
+emit_32(1119072263);
+emit_32(1124900864);
+emit_32(1108512814);
+emit_32(1119072263);
+emit_32(1125156848);
+emit_32(1109177296);
+emit_32(1119072263);
+emit_32(1125412897);
+emit_32(1109962811);
+emit_32(1119072263);
+emit_32(1125668880);
+emit_32(1110386698);
+emit_32(1119072263);
+emit_32(1125924864);
+emit_32(1110954895);
+emit_32(1119072263);
+emit_32(1126180848);
+emit_32(1111373146);
+emit_32(1119072263);
+emit_32(1126436897);
+emit_32(1111232741);
+emit_32(1119072263);
+emit_32(1126692880);
+emit_32(1110968474);
+emit_32(1119072263);
+emit_32(1126948864);
+emit_32(1110976076);
+emit_32(1119072263);
+emit_32(1127204848);
+emit_32(1110947948);
+emit_32(1119072263);
+emit_32(1127460897);
+emit_32(1110319458);
+emit_32(1119072263);
+emit_32(1127716880);
+emit_32(1109529802);
+emit_32(1119072263);
+emit_32(1127972864);
+emit_32(1108903985);
+emit_32(1119072263);
+emit_32(1128228848);
+emit_32(1108310439);
+emit_32(1119072263);
+emit_32(1128484897);
+emit_32(1107575387);
+emit_32(1119072263);
+emit_32(1128740880);
+emit_32(1106795613);
+emit_32(1119072263);
+emit_32(1128996864);
+emit_32(1105037099);
+emit_32(1119072263);
+emit_32(1129252848);
+emit_32(1104566131);
+emit_32(1119072263);
+emit_32(1129508897);
+emit_32(1104325640);
+emit_32(1119072263);
+emit_32(1129764880);
+emit_32(1103661315);
+emit_32(1119072263);
+emit_32(1130020864);
+emit_32(1102795191);
+emit_32(1119072263);
+emit_32(1130276848);
+emit_32(1101517868);
+emit_32(1119072263);
+emit_32(1130532897);
+emit_32(1100461113);
+emit_32(1119072263);
+emit_32(1130788880);
+emit_32(1100370097);
+emit_32(1119072263);
+emit_32(1131044864);
+emit_32(1099572602);
+emit_32(1119072263);
+emit_32(1131300848);
+emit_32(1097838100);
+emit_32(1119072263);
+emit_32(1131556897);
+emit_32(1098295594);
+emit_32(1119072263);
+emit_32(1131812880);
+emit_32(1098303459);
+emit_32(1119072263);
+emit_32(1132068864);
+emit_32(1098824601);
+emit_32(1119072263);
+emit_32(1081737216);
+emit_32(1098479410);
+emit_32(1118560256);
+emit_32(1090125824);
+emit_32(1099112959);
+emit_32(1118560256);
+emit_32(1094418484);
+emit_32(1100063546);
+emit_32(1118560256);
+emit_32(1098514432);
+emit_32(1100578082);
+emit_32(1118560256);
+emit_32(1100759066);
+emit_32(1101399327);
+emit_32(1118560256);
+emit_32(1102807040);
+emit_32(1101862745);
+emit_32(1118560256);
+emit_32(1104855066);
+emit_32(1102014684);
+emit_32(1118560256);
+emit_32(1106903040);
+emit_32(1101855457);
+emit_32(1118560256);
+emit_32(1108123661);
+emit_32(1102305349);
+emit_32(1118560256);
+emit_32(1109147648);
+emit_32(1102995679);
+emit_32(1118560256);
+emit_32(1110171661);
+emit_32(1103423603);
+emit_32(1118560256);
+emit_32(1111195648);
+emit_32(1103543455);
+emit_32(1118560256);
+emit_32(1112219661);
+emit_32(1103387741);
+emit_32(1118560256);
+emit_32(1113243648);
+emit_32(1102938374);
+emit_32(1118560256);
+emit_32(1114267661);
+emit_32(1102169244);
+emit_32(1118560256);
+emit_32(1115291648);
+emit_32(1101791704);
+emit_32(1118560256);
+emit_32(1116000263);
+emit_32(1101646581);
+emit_32(1118560256);
+emit_32(1116512256);
+emit_32(1101112698);
+emit_32(1118560256);
+emit_32(1117024263);
+emit_32(1101184998);
+emit_32(1118560256);
+emit_32(1117536256);
+emit_32(1101989727);
+emit_32(1118560256);
+emit_32(1118048263);
+emit_32(1102023229);
+emit_32(1118560256);
+emit_32(1118560256);
+emit_32(1101345377);
+emit_32(1118560256);
+emit_32(1119072263);
+emit_32(1101364199);
+emit_32(1118560256);
+emit_32(1119584256);
+emit_32(1101345325);
+emit_32(1118560256);
+emit_32(1120096263);
+emit_32(1101567780);
+emit_32(1118560256);
+emit_32(1120608322);
+emit_32(1101948047);
+emit_32(1118560256);
+emit_32(1121120289);
+emit_32(1102252343);
+emit_32(1118560256);
+emit_32(1121632256);
+emit_32(1102278400);
+emit_32(1118560256);
+emit_32(1122144223);
+emit_32(1102915882);
+emit_32(1118560256);
+emit_32(1122656322);
+emit_32(1103545342);
+emit_32(1118560256);
+emit_32(1123168289);
+emit_32(1104523873);
+emit_32(1118560256);
+emit_32(1123680256);
+emit_32(1105840623);
+emit_32(1118560256);
+emit_32(1124132848);
+emit_32(1107083500);
+emit_32(1118560256);
+emit_32(1124388897);
+emit_32(1107781668);
+emit_32(1118560256);
+emit_32(1124644880);
+emit_32(1108269990);
+emit_32(1118560256);
+emit_32(1124900864);
+emit_32(1108523300);
+emit_32(1118560256);
+emit_32(1125156848);
+emit_32(1109103110);
+emit_32(1118560256);
+emit_32(1125412897);
+emit_32(1109825526);
+emit_32(1118560256);
+emit_32(1125668880);
+emit_32(1110495330);
+emit_32(1118560256);
+emit_32(1125924864);
+emit_32(1110756478);
+emit_32(1118560256);
+emit_32(1126180848);
+emit_32(1111016630);
+emit_32(1118560256);
+emit_32(1126436897);
+emit_32(1111283388);
+emit_32(1118560256);
+emit_32(1126692880);
+emit_32(1111246530);
+emit_32(1118560256);
+emit_32(1126948864);
+emit_32(1110841937);
+emit_32(1118560256);
+emit_32(1127204848);
+emit_32(1110618826);
+emit_32(1118560256);
+emit_32(1127460897);
+emit_32(1110342972);
+emit_32(1118560256);
+emit_32(1127716880);
+emit_32(1109456191);
+emit_32(1118560256);
+emit_32(1127972864);
+emit_32(1108985774);
+emit_32(1118560256);
+emit_32(1128228848);
+emit_32(1108475956);
+emit_32(1118560256);
+emit_32(1128484897);
+emit_32(1107767512);
+emit_32(1118560256);
+emit_32(1128740880);
+emit_32(1107083552);
+emit_32(1118560256);
+emit_32(1128996864);
+emit_32(1105634525);
+emit_32(1118560256);
+emit_32(1129252848);
+emit_32(1104932871);
+emit_32(1118560256);
+emit_32(1129508897);
+emit_32(1104170766);
+emit_32(1118560256);
+emit_32(1129764880);
+emit_32(1103195904);
+emit_32(1118560256);
+emit_32(1130020864);
+emit_32(1102135532);
+emit_32(1118560256);
+emit_32(1130276848);
+emit_32(1101066089);
+emit_32(1118560256);
+emit_32(1130532897);
+emit_32(1100669413);
+emit_32(1118560256);
+emit_32(1130788880);
+emit_32(1099835795);
+emit_32(1118560256);
+emit_32(1131044864);
+emit_32(1099072641);
+emit_32(1118560256);
+emit_32(1131300848);
+emit_32(1097951976);
+emit_32(1118560256);
+emit_32(1131556897);
+emit_32(1097998742);
+emit_32(1118560256);
+emit_32(1131812880);
+emit_32(1097628595);
+emit_32(1118560256);
+emit_32(1132068864);
+emit_32(1098095945);
+emit_32(1118560256);
+emit_32(1081737216);
+emit_32(1099413271);
+emit_32(1118048263);
+emit_32(1090125824);
+emit_32(1099851366);
+emit_32(1118048263);
+emit_32(1094418484);
+emit_32(1100634810);
+emit_32(1118048263);
+emit_32(1098514432);
+emit_32(1101543191);
+emit_32(1118048263);
+emit_32(1100759066);
+emit_32(1102227020);
+emit_32(1118048263);
+emit_32(1102807040);
+emit_32(1102623329);
+emit_32(1118048263);
+emit_32(1104855066);
+emit_32(1102636122);
+emit_32(1118048263);
+emit_32(1106903040);
+emit_32(1102855746);
+emit_32(1118048263);
+emit_32(1108123661);
+emit_32(1103180228);
+emit_32(1118048263);
+emit_32(1109147648);
+emit_32(1103670700);
+emit_32(1118048263);
+emit_32(1110171661);
+emit_32(1104191894);
+emit_32(1118048263);
+emit_32(1111195648);
+emit_32(1104328733);
+emit_32(1118048263);
+emit_32(1112219661);
+emit_32(1103856769);
+emit_32(1118048263);
+emit_32(1113243648);
+emit_32(1103570665);
+emit_32(1118048263);
+emit_32(1114267661);
+emit_32(1103155744);
+emit_32(1118048263);
+emit_32(1115291648);
+emit_32(1103141221);
+emit_32(1118048263);
+emit_32(1116000263);
+emit_32(1102853230);
+emit_32(1118048263);
+emit_32(1116512256);
+emit_32(1102033034);
+emit_32(1118048263);
+emit_32(1117024263);
+emit_32(1102017724);
+emit_32(1118048263);
+emit_32(1117536256);
+emit_32(1102380584);
+emit_32(1118048263);
+emit_32(1118048263);
+emit_32(1102405698);
+emit_32(1118048263);
+emit_32(1118560256);
+emit_32(1101754689);
+emit_32(1118048263);
+emit_32(1119072263);
+emit_32(1101894202);
+emit_32(1118048263);
+emit_32(1119584256);
+emit_32(1101906471);
+emit_32(1118048263);
+emit_32(1120096263);
+emit_32(1102313056);
+emit_32(1118048263);
+emit_32(1120608322);
+emit_32(1102601309);
+emit_32(1118048263);
+emit_32(1121120289);
+emit_32(1102592606);
+emit_32(1118048263);
+emit_32(1121632256);
+emit_32(1102703493);
+emit_32(1118048263);
+emit_32(1122144223);
+emit_32(1102937378);
+emit_32(1118048263);
+emit_32(1122656322);
+emit_32(1103504867);
+emit_32(1118048263);
+emit_32(1123168289);
+emit_32(1104384675);
+emit_32(1118048263);
+emit_32(1123680256);
+emit_32(1105635049);
+emit_32(1118048263);
+emit_32(1124132848);
+emit_32(1106752255);
+emit_32(1118048263);
+emit_32(1124388897);
+emit_32(1107767879);
+emit_32(1118048263);
+emit_32(1124644880);
+emit_32(1108294474);
+emit_32(1118048263);
+emit_32(1124900864);
+emit_32(1108613634);
+emit_32(1118048263);
+emit_32(1125156848);
+emit_32(1109065177);
+emit_32(1118048263);
+emit_32(1125412897);
+emit_32(1109930095);
+emit_32(1118048263);
+emit_32(1125668880);
+emit_32(1110386383);
+emit_32(1118048263);
+emit_32(1125924864);
+emit_32(1110751995);
+emit_32(1118048263);
+emit_32(1126180848);
+emit_32(1111030602);
+emit_32(1118048263);
+emit_32(1126436897);
+emit_32(1111233554);
+emit_32(1118048263);
+emit_32(1126692880);
+emit_32(1111303704);
+emit_32(1118048263);
+emit_32(1126948864);
+emit_32(1111031703);
+emit_32(1118048263);
+emit_32(1127204848);
+emit_32(1110529488);
+emit_32(1118048263);
+emit_32(1127460897);
+emit_32(1110208545);
+emit_32(1118048263);
+emit_32(1127716880);
+emit_32(1109599375);
+emit_32(1118048263);
+emit_32(1127972864);
+emit_32(1109300609);
+emit_32(1118048263);
+emit_32(1128228848);
+emit_32(1108749189);
+emit_32(1118048263);
+emit_32(1128484897);
+emit_32(1108160047);
+emit_32(1118048263);
+emit_32(1128740880);
+emit_32(1107724180);
+emit_32(1118048263);
+emit_32(1128996864);
+emit_32(1106714873);
+emit_32(1118048263);
+emit_32(1129252848);
+emit_32(1104821512);
+emit_32(1118048263);
+emit_32(1129508897);
+emit_32(1103852103);
+emit_32(1118048263);
+emit_32(1129764880);
+emit_32(1103039771);
+emit_32(1118048263);
+emit_32(1130020864);
+emit_32(1102286212);
+emit_32(1118048263);
+emit_32(1130276848);
+emit_32(1101202509);
+emit_32(1118048263);
+emit_32(1130532897);
+emit_32(1100589197);
+emit_32(1118048263);
+emit_32(1130788880);
+emit_32(1100484811);
+emit_32(1118048263);
+emit_32(1131044864);
+emit_32(1099835113);
+emit_32(1118048263);
+emit_32(1131300848);
+emit_32(1098729600);
+emit_32(1118048263);
+emit_32(1131556897);
+emit_32(1097121608);
+emit_32(1118048263);
+emit_32(1131812880);
+emit_32(1098002203);
+emit_32(1118048263);
+emit_32(1132068864);
+emit_32(1097770887);
+emit_32(1118048263);
+emit_32(1081737216);
+emit_32(1100388447);
+emit_32(1117536256);
+emit_32(1090125824);
+emit_32(1100757493);
+emit_32(1117536256);
+emit_32(1094418484);
+emit_32(1101501091);
+emit_32(1117536256);
+emit_32(1098514432);
+emit_32(1102103236);
+emit_32(1117536256);
+emit_32(1100759066);
+emit_32(1102707845);
+emit_32(1117536256);
+emit_32(1102807040);
+emit_32(1103009572);
+emit_32(1117536256);
+emit_32(1104855066);
+emit_32(1103428898);
+emit_32(1117536256);
+emit_32(1106903040);
+emit_32(1103146831);
+emit_32(1117536256);
+emit_32(1108123661);
+emit_32(1103947576);
+emit_32(1117536256);
+emit_32(1109147648);
+emit_32(1104597484);
+emit_32(1117536256);
+emit_32(1110171661);
+emit_32(1104667424);
+emit_32(1117536256);
+emit_32(1111195648);
+emit_32(1104486230);
+emit_32(1117536256);
+emit_32(1112219661);
+emit_32(1104487068);
+emit_32(1117536256);
+emit_32(1113243648);
+emit_32(1104896904);
+emit_32(1117536256);
+emit_32(1114267661);
+emit_32(1104464524);
+emit_32(1117536256);
+emit_32(1115291648);
+emit_32(1104222355);
+emit_32(1117536256);
+emit_32(1116000263);
+emit_32(1103558974);
+emit_32(1117536256);
+emit_32(1116512256);
+emit_32(1103033480);
+emit_32(1117536256);
+emit_32(1117024263);
+emit_32(1102717544);
+emit_32(1117536256);
+emit_32(1117536256);
+emit_32(1102634340);
+emit_32(1117536256);
+emit_32(1118048263);
+emit_32(1102741976);
+emit_32(1117536256);
+emit_32(1118560256);
+emit_32(1102625007);
+emit_32(1117536256);
+emit_32(1119072263);
+emit_32(1102725618);
+emit_32(1117536256);
+emit_32(1119584256);
+emit_32(1103254520);
+emit_32(1117536256);
+emit_32(1120096263);
+emit_32(1103392722);
+emit_32(1117536256);
+emit_32(1120608322);
+emit_32(1103322992);
+emit_32(1117536256);
+emit_32(1121120289);
+emit_32(1103436395);
+emit_32(1117536256);
+emit_32(1121632256);
+emit_32(1103376417);
+emit_32(1117536256);
+emit_32(1122144223);
+emit_32(1103563325);
+emit_32(1117536256);
+emit_32(1122656322);
+emit_32(1103992612);
+emit_32(1117536256);
+emit_32(1123168289);
+emit_32(1104630514);
+emit_32(1117536256);
+emit_32(1123680256);
+emit_32(1106116556);
+emit_32(1117536256);
+emit_32(1124132848);
+emit_32(1106961236);
+emit_32(1117536256);
+emit_32(1124388897);
+emit_32(1107803950);
+emit_32(1117536256);
+emit_32(1124644880);
+emit_32(1108189276);
+emit_32(1117536256);
+emit_32(1124900864);
+emit_32(1108506129);
+emit_32(1117536256);
+emit_32(1125156848);
+emit_32(1109028792);
+emit_32(1117536256);
+emit_32(1125412897);
+emit_32(1109715216);
+emit_32(1117536256);
+emit_32(1125668880);
+emit_32(1110237171);
+emit_32(1117536256);
+emit_32(1125924864);
+emit_32(1110769507);
+emit_32(1117536256);
+emit_32(1126180848);
+emit_32(1111106100);
+emit_32(1117536256);
+emit_32(1126436897);
+emit_32(1111271906);
+emit_32(1117536256);
+emit_32(1126692880);
+emit_32(1111370210);
+emit_32(1117536256);
+emit_32(1126948864);
+emit_32(1111065310);
+emit_32(1117536256);
+emit_32(1127204848);
+emit_32(1110676210);
+emit_32(1117536256);
+emit_32(1127460897);
+emit_32(1110374587);
+emit_32(1117536256);
+emit_32(1127716880);
+emit_32(1110042162);
+emit_32(1117536256);
+emit_32(1127972864);
+emit_32(1109530614);
+emit_32(1117536256);
+emit_32(1128228848);
+emit_32(1108942678);
+emit_32(1117536256);
+emit_32(1128484897);
+emit_32(1108422689);
+emit_32(1117536256);
+emit_32(1128740880);
+emit_32(1108099491);
+emit_32(1117536256);
+emit_32(1128996864);
+emit_32(1107404915);
+emit_32(1117536256);
+emit_32(1129252848);
+emit_32(1105961366);
+emit_32(1117536256);
+emit_32(1129508897);
+emit_32(1104014161);
+emit_32(1117536256);
+emit_32(1129764880);
+emit_32(1102659977);
+emit_32(1117536256);
+emit_32(1130020864);
+emit_32(1101498941);
+emit_32(1117536256);
+emit_32(1130276848);
+emit_32(1100603667);
+emit_32(1117536256);
+emit_32(1130532897);
+emit_32(1100248567);
+emit_32(1117536256);
+emit_32(1130788880);
+emit_32(1100396993);
+emit_32(1117536256);
+emit_32(1131044864);
+emit_32(1099775974);
+emit_32(1117536256);
+emit_32(1131300848);
+emit_32(1098614781);
+emit_32(1117536256);
+emit_32(1131556897);
+emit_32(1097165439);
+emit_32(1117536256);
+emit_32(1131812880);
+emit_32(1096806092);
+emit_32(1117536256);
+emit_32(1132068864);
+emit_32(1097532755);
+emit_32(1117536256);
+emit_32(1081737216);
+emit_32(1101362836);
+emit_32(1117024263);
+emit_32(1090125824);
+emit_32(1102440982);
+emit_32(1117024263);
+emit_32(1094418484);
+emit_32(1102525602);
+emit_32(1117024263);
+emit_32(1098514432);
+emit_32(1102772542);
+emit_32(1117024263);
+emit_32(1100759066);
+emit_32(1102996623);
+emit_32(1117024263);
+emit_32(1102807040);
+emit_32(1103394295);
+emit_32(1117024263);
+emit_32(1104855066);
+emit_32(1103807853);
+emit_32(1117024263);
+emit_32(1106903040);
+emit_32(1104063968);
+emit_32(1117024263);
+emit_32(1108123661);
+emit_32(1104272477);
+emit_32(1117024263);
+emit_32(1109147648);
+emit_32(1105094404);
+emit_32(1117024263);
+emit_32(1110171661);
+emit_32(1105462297);
+emit_32(1117024263);
+emit_32(1111195648);
+emit_32(1105615756);
+emit_32(1117024263);
+emit_32(1112219661);
+emit_32(1105780539);
+emit_32(1117024263);
+emit_32(1113243648);
+emit_32(1105949622);
+emit_32(1117024263);
+emit_32(1114267661);
+emit_32(1105825523);
+emit_32(1117024263);
+emit_32(1115291648);
+emit_32(1105325457);
+emit_32(1117024263);
+emit_32(1116000263);
+emit_32(1104503217);
+emit_32(1117024263);
+emit_32(1116512256);
+emit_32(1103914389);
+emit_32(1117024263);
+emit_32(1117024263);
+emit_32(1103220703);
+emit_32(1117024263);
+emit_32(1117536256);
+emit_32(1103554989);
+emit_32(1117024263);
+emit_32(1118048263);
+emit_32(1103557663);
+emit_32(1117024263);
+emit_32(1118560256);
+emit_32(1103000555);
+emit_32(1117024263);
+emit_32(1119072263);
+emit_32(1103407455);
+emit_32(1117024263);
+emit_32(1119584256);
+emit_32(1103934783);
+emit_32(1117024263);
+emit_32(1120096263);
+emit_32(1103628861);
+emit_32(1117024263);
+emit_32(1120608322);
+emit_32(1103876221);
+emit_32(1117024263);
+emit_32(1121120289);
+emit_32(1104062762);
+emit_32(1117024263);
+emit_32(1121632256);
+emit_32(1104076446);
+emit_32(1117024263);
+emit_32(1122144223);
+emit_32(1104571479);
+emit_32(1117024263);
+emit_32(1122656322);
+emit_32(1105134302);
+emit_32(1117024263);
+emit_32(1123168289);
+emit_32(1105662312);
+emit_32(1117024263);
+emit_32(1123680256);
+emit_32(1106251717);
+emit_32(1117024263);
+emit_32(1124132848);
+emit_32(1107284512);
+emit_32(1117024263);
+emit_32(1124388897);
+emit_32(1107873183);
+emit_32(1117024263);
+emit_32(1124644880);
+emit_32(1108188149);
+emit_32(1117024263);
+emit_32(1124900864);
+emit_32(1108443241);
+emit_32(1117024263);
+emit_32(1125156848);
+emit_32(1109131028);
+emit_32(1117024263);
+emit_32(1125412897);
+emit_32(1109732884);
+emit_32(1117024263);
+emit_32(1125668880);
+emit_32(1110471632);
+emit_32(1117024263);
+emit_32(1125924864);
+emit_32(1111024494);
+emit_32(1117024263);
+emit_32(1126180848);
+emit_32(1111170666);
+emit_32(1117024263);
+emit_32(1126436897);
+emit_32(1111345332);
+emit_32(1117024263);
+emit_32(1126692880);
+emit_32(1111265011);
+emit_32(1117024263);
+emit_32(1126948864);
+emit_32(1110964620);
+emit_32(1117024263);
+emit_32(1127204848);
+emit_32(1110816430);
+emit_32(1117024263);
+emit_32(1127460897);
+emit_32(1110708847);
+emit_32(1117024263);
+emit_32(1127716880);
+emit_32(1110212162);
+emit_32(1117024263);
+emit_32(1127972864);
+emit_32(1109715111);
+emit_32(1117024263);
+emit_32(1128228848);
+emit_32(1108818579);
+emit_32(1117024263);
+emit_32(1128484897);
+emit_32(1108483873);
+emit_32(1117024263);
+emit_32(1128740880);
+emit_32(1108125627);
+emit_32(1117024263);
+emit_32(1128996864);
+emit_32(1107598718);
+emit_32(1117024263);
+emit_32(1129252848);
+emit_32(1106363390);
+emit_32(1117024263);
+emit_32(1129508897);
+emit_32(1104237822);
+emit_32(1117024263);
+emit_32(1129764880);
+emit_32(1102138258);
+emit_32(1117024263);
+emit_32(1130020864);
+emit_32(1100193202);
+emit_32(1117024263);
+emit_32(1130276848);
+emit_32(1099480433);
+emit_32(1117024263);
+emit_32(1130532897);
+emit_32(1099613759);
+emit_32(1117024263);
+emit_32(1130788880);
+emit_32(1099142005);
+emit_32(1117024263);
+emit_32(1131044864);
+emit_32(1098613732);
+emit_32(1117024263);
+emit_32(1131300848);
+emit_32(1097637718);
+emit_32(1117024263);
+emit_32(1131556897);
+emit_32(1096434057);
+emit_32(1117024263);
+emit_32(1131812880);
+emit_32(1095523684);
+emit_32(1117024263);
+emit_32(1132068864);
+emit_32(1096168243);
+emit_32(1117024263);
+emit_32(1081737216);
+emit_32(1102550401);
+emit_32(1116512256);
+emit_32(1090125824);
+emit_32(1103281835);
+emit_32(1116512256);
+emit_32(1094418484);
+emit_32(1103432620);
+emit_32(1116512256);
+emit_32(1098514432);
+emit_32(1103624300);
+emit_32(1116512256);
+emit_32(1100759066);
+emit_32(1103732880);
+emit_32(1116512256);
+emit_32(1102807040);
+emit_32(1103772569);
+emit_32(1116512256);
+emit_32(1104855066);
+emit_32(1104059145);
+emit_32(1116512256);
+emit_32(1106903040);
+emit_32(1104733694);
+emit_32(1116512256);
+emit_32(1108123661);
+emit_32(1105135927);
+emit_32(1116512256);
+emit_32(1109147648);
+emit_32(1105641446);
+emit_32(1116512256);
+emit_32(1110171661);
+emit_32(1106189117);
+emit_32(1116512256);
+emit_32(1111195648);
+emit_32(1106590984);
+emit_32(1116512256);
+emit_32(1112219661);
+emit_32(1106792730);
+emit_32(1116512256);
+emit_32(1113243648);
+emit_32(1107103528);
+emit_32(1116512256);
+emit_32(1114267661);
+emit_32(1107045751);
+emit_32(1116512256);
+emit_32(1115291648);
+emit_32(1106493886);
+emit_32(1116512256);
+emit_32(1116000263);
+emit_32(1105577011);
+emit_32(1116512256);
+emit_32(1116512256);
+emit_32(1104601992);
+emit_32(1116512256);
+emit_32(1117024263);
+emit_32(1103981498);
+emit_32(1116512256);
+emit_32(1117536256);
+emit_32(1104213076);
+emit_32(1116512256);
+emit_32(1118048263);
+emit_32(1103729577);
+emit_32(1116512256);
+emit_32(1118560256);
+emit_32(1103354344);
+emit_32(1116512256);
+emit_32(1119072263);
+emit_32(1103689836);
+emit_32(1116512256);
+emit_32(1119584256);
+emit_32(1104224505);
+emit_32(1116512256);
+emit_32(1120096263);
+emit_32(1104374714);
+emit_32(1116512256);
+emit_32(1120608322);
+emit_32(1104188696);
+emit_32(1116512256);
+emit_32(1121120289);
+emit_32(1104209773);
+emit_32(1116512256);
+emit_32(1121632256);
+emit_32(1104973765);
+emit_32(1116512256);
+emit_32(1122144223);
+emit_32(1105524110);
+emit_32(1116512256);
+emit_32(1122656322);
+emit_32(1106275992);
+emit_32(1116512256);
+emit_32(1123168289);
+emit_32(1106381373);
+emit_32(1116512256);
+emit_32(1123680256);
+emit_32(1106763527);
+emit_32(1116512256);
+emit_32(1124132848);
+emit_32(1107402293);
+emit_32(1116512256);
+emit_32(1124388897);
+emit_32(1107816822);
+emit_32(1116512256);
+emit_32(1124644880);
+emit_32(1108307293);
+emit_32(1116512256);
+emit_32(1124900864);
+emit_32(1108759098);
+emit_32(1116512256);
+emit_32(1125156848);
+emit_32(1109471632);
+emit_32(1116512256);
+emit_32(1125412897);
+emit_32(1109900027);
+emit_32(1116512256);
+emit_32(1125668880);
+emit_32(1110484111);
+emit_32(1116512256);
+emit_32(1125924864);
+emit_32(1110873316);
+emit_32(1116512256);
+emit_32(1126180848);
+emit_32(1111321923);
+emit_32(1116512256);
+emit_32(1126436897);
+emit_32(1111520628);
+emit_32(1116512256);
+emit_32(1126692880);
+emit_32(1111429507);
+emit_32(1116512256);
+emit_32(1126948864);
+emit_32(1110992722);
+emit_32(1116512256);
+emit_32(1127204848);
+emit_32(1110804503);
+emit_32(1116512256);
+emit_32(1127460897);
+emit_32(1110532633);
+emit_32(1116512256);
+emit_32(1127716880);
+emit_32(1110132130);
+emit_32(1116512256);
+emit_32(1127972864);
+emit_32(1109531112);
+emit_32(1116512256);
+emit_32(1128228848);
+emit_32(1108783425);
+emit_32(1116512256);
+emit_32(1128484897);
+emit_32(1108534467);
+emit_32(1116512256);
+emit_32(1128740880);
+emit_32(1108104918);
+emit_32(1116512256);
+emit_32(1128996864);
+emit_32(1107580866);
+emit_32(1116512256);
+emit_32(1129252848);
+emit_32(1106274314);
+emit_32(1116512256);
+emit_32(1129508897);
+emit_32(1104539025);
+emit_32(1116512256);
+emit_32(1129764880);
+emit_32(1102452516);
+emit_32(1116512256);
+emit_32(1130020864);
+emit_32(1100238029);
+emit_32(1116512256);
+emit_32(1130276848);
+emit_32(1098493670);
+emit_32(1116512256);
+emit_32(1130532897);
+emit_32(1097538732);
+emit_32(1116512256);
+emit_32(1130788880);
+emit_32(1097860435);
+emit_32(1116512256);
+emit_32(1131044864);
+emit_32(1096806826);
+emit_32(1116512256);
+emit_32(1131300848);
+emit_32(1095175137);
+emit_32(1116512256);
+emit_32(1131556897);
+emit_32(1095179751);
+emit_32(1116512256);
+emit_32(1131812880);
+emit_32(1094445538);
+emit_32(1116512256);
+emit_32(1132068864);
+emit_32(1094491675);
+emit_32(1116512256);
+emit_32(1081737216);
+emit_32(1103917954);
+emit_32(1116000263);
+emit_32(1090125824);
+emit_32(1104214281);
+emit_32(1116000263);
+emit_32(1094418484);
+emit_32(1104273211);
+emit_32(1116000263);
+emit_32(1098514432);
+emit_32(1104389236);
+emit_32(1116000263);
+emit_32(1100759066);
+emit_32(1104665746);
+emit_32(1116000263);
+emit_32(1102807040);
+emit_32(1104683886);
+emit_32(1116000263);
+emit_32(1104855066);
+emit_32(1104862354);
+emit_32(1116000263);
+emit_32(1106903040);
+emit_32(1105668342);
+emit_32(1116000263);
+emit_32(1108123661);
+emit_32(1106303097);
+emit_32(1116000263);
+emit_32(1109147648);
+emit_32(1106378228);
+emit_32(1116000263);
+emit_32(1110171661);
+emit_32(1106845054);
+emit_32(1116000263);
+emit_32(1111195648);
+emit_32(1107149298);
+emit_32(1116000263);
+emit_32(1112219661);
+emit_32(1107634553);
+emit_32(1116000263);
+emit_32(1113243648);
+emit_32(1107721139);
+emit_32(1116000263);
+emit_32(1114267661);
+emit_32(1107693457);
+emit_32(1116000263);
+emit_32(1115291648);
+emit_32(1107040823);
+emit_32(1116000263);
+emit_32(1116000263);
+emit_32(1106302678);
+emit_32(1116000263);
+emit_32(1116512256);
+emit_32(1105678251);
+emit_32(1116000263);
+emit_32(1117024263);
+emit_32(1104723575);
+emit_32(1116000263);
+emit_32(1117536256);
+emit_32(1104584219);
+emit_32(1116000263);
+emit_32(1118048263);
+emit_32(1104086408);
+emit_32(1116000263);
+emit_32(1118560256);
+emit_32(1103762398);
+emit_32(1116000263);
+emit_32(1119072263);
+emit_32(1104084573);
+emit_32(1116000263);
+emit_32(1119584256);
+emit_32(1104925583);
+emit_32(1116000263);
+emit_32(1120096263);
+emit_32(1104774273);
+emit_32(1116000263);
+emit_32(1120608322);
+emit_32(1104591244);
+emit_32(1116000263);
+emit_32(1121120289);
+emit_32(1104826283);
+emit_32(1116000263);
+emit_32(1121632256);
+emit_32(1105545973);
+emit_32(1116000263);
+emit_32(1122144223);
+emit_32(1105872919);
+emit_32(1116000263);
+emit_32(1122656322);
+emit_32(1106423946);
+emit_32(1116000263);
+emit_32(1123168289);
+emit_32(1107313243);
+emit_32(1116000263);
+emit_32(1123680256);
+emit_32(1107471709);
+emit_32(1116000263);
+emit_32(1124132848);
+emit_32(1107748166);
+emit_32(1116000263);
+emit_32(1124388897);
+emit_32(1108035319);
+emit_32(1116000263);
+emit_32(1124644880);
+emit_32(1108525135);
+emit_32(1116000263);
+emit_32(1124900864);
+emit_32(1109011254);
+emit_32(1116000263);
+emit_32(1125156848);
+emit_32(1109529539);
+emit_32(1116000263);
+emit_32(1125412897);
+emit_32(1109929073);
+emit_32(1116000263);
+emit_32(1125668880);
+emit_32(1110361244);
+emit_32(1116000263);
+emit_32(1125924864);
+emit_32(1111018701);
+emit_32(1116000263);
+emit_32(1126180848);
+emit_32(1111418392);
+emit_32(1116000263);
+emit_32(1126436897);
+emit_32(1111581943);
+emit_32(1116000263);
+emit_32(1126692880);
+emit_32(1111596912);
+emit_32(1116000263);
+emit_32(1126948864);
+emit_32(1111336970);
+emit_32(1116000263);
+emit_32(1127204848);
+emit_32(1110946611);
+emit_32(1116000263);
+emit_32(1127460897);
+emit_32(1110462222);
+emit_32(1116000263);
+emit_32(1127716880);
+emit_32(1109940398);
+emit_32(1116000263);
+emit_32(1127972864);
+emit_32(1109463846);
+emit_32(1116000263);
+emit_32(1128228848);
+emit_32(1108875307);
+emit_32(1116000263);
+emit_32(1128484897);
+emit_32(1108586607);
+emit_32(1116000263);
+emit_32(1128740880);
+emit_32(1108248442);
+emit_32(1116000263);
+emit_32(1128996864);
+emit_32(1107558426);
+emit_32(1116000263);
+emit_32(1129252848);
+emit_32(1106322391);
+emit_32(1116000263);
+emit_32(1129508897);
+emit_32(1104389131);
+emit_32(1116000263);
+emit_32(1129764880);
+emit_32(1102274835);
+emit_32(1116000263);
+emit_32(1130020864);
+emit_32(1100247571);
+emit_32(1116000263);
+emit_32(1130276848);
+emit_32(1098982516);
+emit_32(1116000263);
+emit_32(1130532897);
+emit_32(1097852990);
+emit_32(1116000263);
+emit_32(1130788880);
+emit_32(1097777388);
+emit_32(1116000263);
+emit_32(1131044864);
+emit_32(1096162057);
+emit_32(1116000263);
+emit_32(1131300848);
+emit_32(1093655750);
+emit_32(1116000263);
+emit_32(1131556897);
+emit_32(1093255194);
+emit_32(1116000263);
+emit_32(1131812880);
+emit_32(1092384509);
+emit_32(1116000263);
+emit_32(1132068864);
+emit_32(1092614651);
+emit_32(1116000263);
+emit_32(1081737216);
+emit_32(1104775951);
+emit_32(1115291648);
+emit_32(1090125824);
+emit_32(1105273081);
+emit_32(1115291648);
+emit_32(1094418484);
+emit_32(1105163033);
+emit_32(1115291648);
+emit_32(1098514432);
+emit_32(1105037623);
+emit_32(1115291648);
+emit_32(1100759066);
+emit_32(1105121038);
+emit_32(1115291648);
+emit_32(1102807040);
+emit_32(1105312455);
+emit_32(1115291648);
+emit_32(1104855066);
+emit_32(1106012694);
+emit_32(1115291648);
+emit_32(1106903040);
+emit_32(1106371779);
+emit_32(1115291648);
+emit_32(1108123661);
+emit_32(1106828329);
+emit_32(1115291648);
+emit_32(1109147648);
+emit_32(1107099071);
+emit_32(1115291648);
+emit_32(1110171661);
+emit_32(1107519026);
+emit_32(1115291648);
+emit_32(1111195648);
+emit_32(1107598272);
+emit_32(1115291648);
+emit_32(1112219661);
+emit_32(1107988605);
+emit_32(1115291648);
+emit_32(1113243648);
+emit_32(1108084340);
+emit_32(1115291648);
+emit_32(1114267661);
+emit_32(1107768272);
+emit_32(1115291648);
+emit_32(1115291648);
+emit_32(1107585375);
+emit_32(1115291648);
+emit_32(1116000263);
+emit_32(1107334686);
+emit_32(1115291648);
+emit_32(1116512256);
+emit_32(1106384729);
+emit_32(1115291648);
+emit_32(1117024263);
+emit_32(1105355237);
+emit_32(1115291648);
+emit_32(1117536256);
+emit_32(1105239160);
+emit_32(1115291648);
+emit_32(1118048263);
+emit_32(1104804472);
+emit_32(1115291648);
+emit_32(1118560256);
+emit_32(1104295703);
+emit_32(1115291648);
+emit_32(1119072263);
+emit_32(1104303725);
+emit_32(1115291648);
+emit_32(1119584256);
+emit_32(1104739566);
+emit_32(1115291648);
+emit_32(1120096263);
+emit_32(1104935911);
+emit_32(1115291648);
+emit_32(1120608322);
+emit_32(1104793148);
+emit_32(1115291648);
+emit_32(1121120289);
+emit_32(1105350990);
+emit_32(1115291648);
+emit_32(1121632256);
+emit_32(1105666821);
+emit_32(1115291648);
+emit_32(1122144223);
+emit_32(1106542854);
+emit_32(1115291648);
+emit_32(1122656322);
+emit_32(1107330282);
+emit_32(1115291648);
+emit_32(1123168289);
+emit_32(1107522722);
+emit_32(1115291648);
+emit_32(1123680256);
+emit_32(1107991908);
+emit_32(1115291648);
+emit_32(1124132848);
+emit_32(1108210273);
+emit_32(1115291648);
+emit_32(1124388897);
+emit_32(1108506863);
+emit_32(1115291648);
+emit_32(1124644880);
+emit_32(1108775220);
+emit_32(1115291648);
+emit_32(1124900864);
+emit_32(1109189670);
+emit_32(1115291648);
+emit_32(1125156848);
+emit_32(1109527233);
+emit_32(1115291648);
+emit_32(1125412897);
+emit_32(1109974057);
+emit_32(1115291648);
+emit_32(1125668880);
+emit_32(1110321240);
+emit_32(1115291648);
+emit_32(1125924864);
+emit_32(1110734825);
+emit_32(1115291648);
+emit_32(1126180848);
+emit_32(1111142197);
+emit_32(1115291648);
+emit_32(1126436897);
+emit_32(1111340456);
+emit_32(1115291648);
+emit_32(1126692880);
+emit_32(1111407224);
+emit_32(1115291648);
+emit_32(1126948864);
+emit_32(1111510535);
+emit_32(1115291648);
+emit_32(1127204848);
+emit_32(1111087042);
+emit_32(1115291648);
+emit_32(1127460897);
+emit_32(1110641816);
+emit_32(1115291648);
+emit_32(1127716880);
+emit_32(1110084734);
+emit_32(1115291648);
+emit_32(1127972864);
+emit_32(1109478107);
+emit_32(1115291648);
+emit_32(1128228848);
+emit_32(1108983703);
+emit_32(1115291648);
+emit_32(1128484897);
+emit_32(1108396684);
+emit_32(1115291648);
+emit_32(1128740880);
+emit_32(1108182303);
+emit_32(1115291648);
+emit_32(1128996864);
+emit_32(1107304776);
+emit_32(1115291648);
+emit_32(1129252848);
+emit_32(1105830714);
+emit_32(1115291648);
+emit_32(1129508897);
+emit_32(1104926999);
+emit_32(1115291648);
+emit_32(1129764880);
+emit_32(1103134825);
+emit_32(1115291648);
+emit_32(1130020864);
+emit_32(1101331694);
+emit_32(1115291648);
+emit_32(1130276848);
+emit_32(1100242905);
+emit_32(1115291648);
+emit_32(1130532897);
+emit_32(1099575381);
+emit_32(1115291648);
+emit_32(1130788880);
+emit_32(1098291610);
+emit_32(1115291648);
+emit_32(1131044864);
+emit_32(1096472330);
+emit_32(1115291648);
+emit_32(1131300848);
+emit_32(1094126875);
+emit_32(1115291648);
+emit_32(1131556897);
+emit_32(1092334691);
+emit_32(1115291648);
+emit_32(1131812880);
+emit_32(1091097822);
+emit_32(1115291648);
+emit_32(1132068864);
+emit_32(1090977194);
+emit_32(1115291648);
+emit_32(1081737216);
+emit_32(1105382343);
+emit_32(1114267661);
+emit_32(1090125824);
+emit_32(1105662155);
+emit_32(1114267661);
+emit_32(1094418484);
+emit_32(1105488092);
+emit_32(1114267661);
+emit_32(1098514432);
+emit_32(1105646479);
+emit_32(1114267661);
+emit_32(1100759066);
+emit_32(1105753591);
+emit_32(1114267661);
+emit_32(1102807040);
+emit_32(1106409108);
+emit_32(1114267661);
+emit_32(1104855066);
+emit_32(1106974396);
+emit_32(1114267661);
+emit_32(1106903040);
+emit_32(1107565006);
+emit_32(1114267661);
+emit_32(1108123661);
+emit_32(1107665538);
+emit_32(1114267661);
+emit_32(1109147648);
+emit_32(1107918481);
+emit_32(1114267661);
+emit_32(1110171661);
+emit_32(1108002577);
+emit_32(1114267661);
+emit_32(1111195648);
+emit_32(1107850848);
+emit_32(1114267661);
+emit_32(1112219661);
+emit_32(1108010494);
+emit_32(1114267661);
+emit_32(1113243648);
+emit_32(1108185815);
+emit_32(1114267661);
+emit_32(1114267661);
+emit_32(1108069791);
+emit_32(1114267661);
+emit_32(1115291648);
+emit_32(1107943490);
+emit_32(1114267661);
+emit_32(1116000263);
+emit_32(1107599924);
+emit_32(1114267661);
+emit_32(1116512256);
+emit_32(1106557691);
+emit_32(1114267661);
+emit_32(1117024263);
+emit_32(1106465102);
+emit_32(1114267661);
+emit_32(1117536256);
+emit_32(1106678120);
+emit_32(1114267661);
+emit_32(1118048263);
+emit_32(1106208044);
+emit_32(1114267661);
+emit_32(1118560256);
+emit_32(1105390469);
+emit_32(1114267661);
+emit_32(1119072263);
+emit_32(1105130632);
+emit_32(1114267661);
+emit_32(1119584256);
+emit_32(1105068923);
+emit_32(1114267661);
+emit_32(1120096263);
+emit_32(1105156532);
+emit_32(1114267661);
+emit_32(1120608322);
+emit_32(1105073537);
+emit_32(1114267661);
+emit_32(1121120289);
+emit_32(1105331225);
+emit_32(1114267661);
+emit_32(1121632256);
+emit_32(1105964145);
+emit_32(1114267661);
+emit_32(1122144223);
+emit_32(1106908702);
+emit_32(1114267661);
+emit_32(1122656322);
+emit_32(1107699250);
+emit_32(1114267661);
+emit_32(1123168289);
+emit_32(1107951485);
+emit_32(1114267661);
+emit_32(1123680256);
+emit_32(1108124448);
+emit_32(1114267661);
+emit_32(1124132848);
+emit_32(1108505998);
+emit_32(1114267661);
+emit_32(1124388897);
+emit_32(1108644332);
+emit_32(1114267661);
+emit_32(1124644880);
+emit_32(1108925429);
+emit_32(1114267661);
+emit_32(1124900864);
+emit_32(1109130320);
+emit_32(1114267661);
+emit_32(1125156848);
+emit_32(1109477189);
+emit_32(1114267661);
+emit_32(1125412897);
+emit_32(1110047693);
+emit_32(1114267661);
+emit_32(1125668880);
+emit_32(1110276833);
+emit_32(1114267661);
+emit_32(1125924864);
+emit_32(1110533420);
+emit_32(1114267661);
+emit_32(1126180848);
+emit_32(1110872975);
+emit_32(1114267635);
+emit_32(1126436897);
+emit_32(1110877064);
+emit_32(1114267635);
+emit_32(1126692880);
+emit_32(1111218743);
+emit_32(1114267661);
+emit_32(1126948864);
+emit_32(1111252874);
+emit_32(1114267661);
+emit_32(1127204848);
+emit_32(1110924067);
+emit_32(1114267635);
+emit_32(1127460897);
+emit_32(1110454855);
+emit_32(1114267635);
+emit_32(1127716880);
+emit_32(1109824949);
+emit_32(1114267661);
+emit_32(1127972864);
+emit_32(1109367508);
+emit_32(1114267661);
+emit_32(1128228848);
+emit_32(1108826469);
+emit_32(1114267661);
+emit_32(1128484897);
+emit_32(1108105521);
+emit_32(1114267661);
+emit_32(1128740880);
+emit_32(1107979010);
+emit_32(1114267661);
+emit_32(1128996864);
+emit_32(1107413408);
+emit_32(1114267661);
+emit_32(1129252848);
+emit_32(1106515224);
+emit_32(1114267661);
+emit_32(1129508897);
+emit_32(1105576277);
+emit_32(1114267661);
+emit_32(1129764880);
+emit_32(1104326584);
+emit_32(1114267661);
+emit_32(1130020864);
+emit_32(1103294261);
+emit_32(1114267661);
+emit_32(1130276848);
+emit_32(1102143501);
+emit_32(1114267661);
+emit_32(1130532897);
+emit_32(1101094348);
+emit_32(1114267661);
+emit_32(1130788880);
+emit_32(1100028785);
+emit_32(1114267661);
+emit_32(1131044864);
+emit_32(1098592446);
+emit_32(1114267661);
+emit_32(1131300848);
+emit_32(1095355492);
+emit_32(1114267661);
+emit_32(1131556897);
+emit_32(1093903738);
+emit_32(1114267661);
+emit_32(1131812880);
+emit_32(1093133979);
+emit_32(1114267661);
+emit_32(1132068864);
+emit_32(1092040083);
+emit_32(1114267661);
+emit_32(1081737216);
+emit_32(1105831238);
+emit_32(1113243648);
+emit_32(1090125824);
+emit_32(1105941548);
+emit_32(1113243648);
+emit_32(1094418484);
+emit_32(1106052330);
+emit_32(1113243648);
+emit_32(1098514432);
+emit_32(1106181987);
+emit_32(1113243648);
+emit_32(1100759066);
+emit_32(1106947762);
+emit_32(1113243648);
+emit_32(1102807040);
+emit_32(1107434170);
+emit_32(1113243648);
+emit_32(1104855066);
+emit_32(1107922597);
+emit_32(1113243648);
+emit_32(1106903040);
+emit_32(1108070236);
+emit_32(1113243648);
+emit_32(1108123661);
+emit_32(1108318408);
+emit_32(1113243648);
+emit_32(1109147648);
+emit_32(1108398991);
+emit_32(1113243648);
+emit_32(1110171661);
+emit_32(1108455247);
+emit_32(1113243648);
+emit_32(1111195648);
+emit_32(1108380929);
+emit_32(1113243648);
+emit_32(1112219661);
+emit_32(1108193129);
+emit_32(1113243648);
+emit_32(1113243648);
+emit_32(1108214940);
+emit_32(1113243648);
+emit_32(1114267661);
+emit_32(1108368189);
+emit_32(1113243648);
+emit_32(1115291648);
+emit_32(1108351228);
+emit_32(1113243648);
+emit_32(1116000263);
+emit_32(1108058728);
+emit_32(1113243648);
+emit_32(1116512256);
+emit_32(1107523561);
+emit_32(1113243648);
+emit_32(1117024263);
+emit_32(1107704624);
+emit_32(1113243648);
+emit_32(1117536256);
+emit_32(1107780384);
+emit_32(1113243648);
+emit_32(1118048263);
+emit_32(1107523797);
+emit_32(1113243648);
+emit_32(1118560256);
+emit_32(1106889671);
+emit_32(1113243648);
+emit_32(1119072263);
+emit_32(1105955127);
+emit_32(1113243648);
+emit_32(1119584256);
+emit_32(1105678513);
+emit_32(1113243648);
+emit_32(1120096263);
+emit_32(1105031175);
+emit_32(1113243648);
+emit_32(1120608322);
+emit_32(1105177346);
+emit_32(1113243648);
+emit_32(1121120289);
+emit_32(1105487043);
+emit_32(1113243648);
+emit_32(1121632256);
+emit_32(1105785782);
+emit_32(1113243648);
+emit_32(1122144223);
+emit_32(1106626950);
+emit_32(1113243648);
+emit_32(1122656322);
+emit_32(1107401638);
+emit_32(1113243648);
+emit_32(1123168289);
+emit_32(1107915047);
+emit_32(1113243648);
+emit_32(1123680256);
+emit_32(1108256070);
+emit_32(1113243648);
+emit_32(1124132848);
+emit_32(1108654529);
+emit_32(1113243648);
+emit_32(1124388897);
+emit_32(1108830034);
+emit_32(1113243648);
+emit_32(1124644880);
+emit_32(1108955156);
+emit_32(1113243648);
+emit_32(1124900864);
+emit_32(1109136769);
+emit_32(1113243648);
+emit_32(1125156848);
+emit_32(1109352907);
+emit_32(1113243648);
+emit_32(1125412897);
+emit_32(1109748534);
+emit_32(1113243648);
+emit_32(1125668880);
+emit_32(1109939926);
+emit_32(1113243648);
+emit_32(1125924864);
+emit_32(1110036867);
+emit_32(1113243648);
+emit_32(1126180848);
+emit_32(1110259401);
+emit_32(1113243648);
+emit_32(1126436897);
+emit_32(1110514257);
+emit_32(1113243648);
+emit_32(1126692880);
+emit_32(1110728167);
+emit_32(1113243648);
+emit_32(1126948864);
+emit_32(1110690470);
+emit_32(1113243648);
+emit_32(1127204848);
+emit_32(1110543172);
+emit_32(1113243648);
+emit_32(1127460897);
+emit_32(1110206867);
+emit_32(1113243648);
+emit_32(1127716880);
+emit_32(1109792994);
+emit_32(1113243648);
+emit_32(1127972864);
+emit_32(1109392779);
+emit_32(1113243648);
+emit_32(1128228848);
+emit_32(1108657596);
+emit_32(1113243648);
+emit_32(1128484897);
+emit_32(1108142902);
+emit_32(1113243648);
+emit_32(1128740880);
+emit_32(1107935625);
+emit_32(1113243648);
+emit_32(1128996864);
+emit_32(1107490216);
+emit_32(1113243648);
+emit_32(1129252848);
+emit_32(1107021844);
+emit_32(1113243648);
+emit_32(1129508897);
+emit_32(1106216328);
+emit_32(1113243648);
+emit_32(1129764880);
+emit_32(1105553103);
+emit_32(1113243648);
+emit_32(1130020864);
+emit_32(1104695106);
+emit_32(1113243648);
+emit_32(1130276848);
+emit_32(1103352404);
+emit_32(1113243648);
+emit_32(1130532897);
+emit_32(1101904950);
+emit_32(1113243648);
+emit_32(1130788880);
+emit_32(1101020476);
+emit_32(1113243648);
+emit_32(1131044864);
+emit_32(1099594623);
+emit_32(1113243648);
+emit_32(1131300848);
+emit_32(1097008782);
+emit_32(1113243648);
+emit_32(1131556897);
+emit_32(1094881640);
+emit_32(1113243648);
+emit_32(1131812880);
+emit_32(1093566726);
+emit_32(1113243648);
+emit_32(1132068864);
+emit_32(1093310244);
+emit_32(1113243648);
+emit_32(1081737216);
+emit_32(1106473438);
+emit_32(1112219661);
+emit_32(1090125824);
+emit_32(1106755138);
+emit_32(1112219661);
+emit_32(1094418484);
+emit_32(1106932662);
+emit_32(1112219661);
+emit_32(1098514432);
+emit_32(1107310071);
+emit_32(1112219661);
+emit_32(1100759066);
+emit_32(1107799179);
+emit_32(1112219661);
+emit_32(1102807040);
+emit_32(1107999693);
+emit_32(1112219661);
+emit_32(1104855066);
+emit_32(1108293059);
+emit_32(1112219661);
+emit_32(1106903040);
+emit_32(1108560839);
+emit_32(1112219661);
+emit_32(1108123661);
+emit_32(1108867783);
+emit_32(1112219661);
+emit_32(1109147648);
+emit_32(1108932769);
+emit_32(1112219661);
+emit_32(1110171661);
+emit_32(1108709527);
+emit_32(1112219661);
+emit_32(1111195648);
+emit_32(1108681661);
+emit_32(1112219661);
+emit_32(1112219661);
+emit_32(1108461250);
+emit_32(1112219661);
+emit_32(1113243648);
+emit_32(1108501751);
+emit_32(1112219661);
+emit_32(1114267661);
+emit_32(1108538058);
+emit_32(1112219661);
+emit_32(1115291648);
+emit_32(1108506155);
+emit_32(1112219661);
+emit_32(1116000263);
+emit_32(1108331069);
+emit_32(1112219661);
+emit_32(1116512256);
+emit_32(1108130713);
+emit_32(1112219661);
+emit_32(1117024263);
+emit_32(1108289153);
+emit_32(1112219661);
+emit_32(1117536256);
+emit_32(1108320872);
+emit_32(1112219661);
+emit_32(1118048263);
+emit_32(1108083946);
+emit_32(1112219661);
+emit_32(1118560256);
+emit_32(1107747196);
+emit_32(1112219661);
+emit_32(1119072263);
+emit_32(1107465942);
+emit_32(1112219661);
+emit_32(1119584256);
+emit_32(1106748480);
+emit_32(1112219661);
+emit_32(1120096263);
+emit_32(1105589856);
+emit_32(1112219661);
+emit_32(1120608322);
+emit_32(1105803398);
+emit_32(1112219661);
+emit_32(1121120289);
+emit_32(1106245426);
+emit_32(1112219661);
+emit_32(1121632256);
+emit_32(1106538345);
+emit_32(1112219661);
+emit_32(1122144223);
+emit_32(1107136191);
+emit_32(1112219661);
+emit_32(1122656322);
+emit_32(1107495066);
+emit_32(1112219661);
+emit_32(1123168289);
+emit_32(1107886552);
+emit_32(1112219661);
+emit_32(1123680256);
+emit_32(1108441668);
+emit_32(1112219661);
+emit_32(1124132848);
+emit_32(1108593266);
+emit_32(1112219661);
+emit_32(1124388897);
+emit_32(1108683470);
+emit_32(1112219661);
+emit_32(1124644880);
+emit_32(1108825211);
+emit_32(1112219661);
+emit_32(1124900864);
+emit_32(1108891271);
+emit_32(1112219661);
+emit_32(1125156848);
+emit_32(1109395715);
+emit_32(1112219661);
+emit_32(1125412897);
+emit_32(1109608864);
+emit_32(1112219661);
+emit_32(1125668880);
+emit_32(1110023576);
+emit_32(1112219661);
+emit_32(1125924864);
+emit_32(1110077237);
+emit_32(1112219661);
+emit_32(1126180848);
+emit_32(1110323678);
+emit_32(1112219661);
+emit_32(1126436897);
+emit_32(1110319510);
+emit_32(1112219661);
+emit_32(1126692880);
+emit_32(1110497559);
+emit_32(1112219635);
+emit_32(1126948864);
+emit_32(1110356630);
+emit_32(1112219661);
+emit_32(1127204848);
+emit_32(1110231745);
+emit_32(1112219661);
+emit_32(1127460897);
+emit_32(1110168568);
+emit_32(1112219661);
+emit_32(1127716880);
+emit_32(1109786440);
+emit_32(1112219661);
+emit_32(1127972864);
+emit_32(1109264984);
+emit_32(1112219661);
+emit_32(1128228848);
+emit_32(1108914445);
+emit_32(1112219661);
+emit_32(1128484897);
+emit_32(1108210640);
+emit_32(1112219661);
+emit_32(1128740880);
+emit_32(1107987897);
+emit_32(1112219661);
+emit_32(1128996864);
+emit_32(1107869644);
+emit_32(1112219661);
+emit_32(1129252848);
+emit_32(1107326534);
+emit_32(1112219661);
+emit_32(1129508897);
+emit_32(1106725831);
+emit_32(1112219661);
+emit_32(1129764880);
+emit_32(1106425466);
+emit_32(1112219661);
+emit_32(1130020864);
+emit_32(1105264955);
+emit_32(1112219661);
+emit_32(1130276848);
+emit_32(1103574860);
+emit_32(1112219661);
+emit_32(1130532897);
+emit_32(1102181460);
+emit_32(1112219661);
+emit_32(1130788880);
+emit_32(1101485677);
+emit_32(1112219661);
+emit_32(1131044864);
+emit_32(1100402288);
+emit_32(1112219661);
+emit_32(1131300848);
+emit_32(1098898421);
+emit_32(1112219661);
+emit_32(1131556897);
+emit_32(1095522425);
+emit_32(1112219661);
+emit_32(1131812880);
+emit_32(1094313732);
+emit_32(1112219661);
+emit_32(1132068864);
+emit_32(1094995201);
+emit_32(1112219661);
+emit_32(1081737216);
+emit_32(1106707585);
+emit_32(1111195648);
+emit_32(1090125824);
+emit_32(1107420879);
+emit_32(1111195648);
+emit_32(1094418484);
+emit_32(1107741455);
+emit_32(1111195648);
+emit_32(1098514432);
+emit_32(1108119388);
+emit_32(1111195648);
+emit_32(1100759066);
+emit_32(1108616649);
+emit_32(1111195648);
+emit_32(1102807040);
+emit_32(1108965851);
+emit_32(1111195648);
+emit_32(1104855066);
+emit_32(1109029919);
+emit_32(1111195648);
+emit_32(1106903040);
+emit_32(1109125602);
+emit_32(1111195648);
+emit_32(1108123661);
+emit_32(1109390551);
+emit_32(1111195648);
+emit_32(1109147648);
+emit_32(1109477215);
+emit_32(1111195648);
+emit_32(1110171661);
+emit_32(1109385334);
+emit_32(1111195648);
+emit_32(1111195648);
+emit_32(1109314608);
+emit_32(1111195648);
+emit_32(1112219661);
+emit_32(1109240919);
+emit_32(1111195648);
+emit_32(1113243648);
+emit_32(1108946400);
+emit_32(1111195648);
+emit_32(1114267661);
+emit_32(1108953006);
+emit_32(1111195648);
+emit_32(1115291648);
+emit_32(1109031911);
+emit_32(1111195648);
+emit_32(1116000263);
+emit_32(1108925062);
+emit_32(1111195648);
+emit_32(1116512256);
+emit_32(1108595887);
+emit_32(1111195648);
+emit_32(1117024263);
+emit_32(1108683941);
+emit_32(1111195648);
+emit_32(1117536256);
+emit_32(1108833809);
+emit_32(1111195648);
+emit_32(1118048263);
+emit_32(1108582282);
+emit_32(1111195648);
+emit_32(1118560256);
+emit_32(1108393093);
+emit_32(1111195648);
+emit_32(1119072263);
+emit_32(1108034008);
+emit_32(1111195648);
+emit_32(1119584256);
+emit_32(1107578926);
+emit_32(1111195648);
+emit_32(1120096263);
+emit_32(1106764313);
+emit_32(1111195648);
+emit_32(1120608322);
+emit_32(1106737365);
+emit_32(1111195648);
+emit_32(1121120289);
+emit_32(1107324568);
+emit_32(1111195648);
+emit_32(1121632256);
+emit_32(1107570511);
+emit_32(1111195648);
+emit_32(1122144223);
+emit_32(1107538818);
+emit_32(1111195648);
+emit_32(1122656322);
+emit_32(1107646926);
+emit_32(1111195648);
+emit_32(1123168289);
+emit_32(1107876984);
+emit_32(1111195648);
+emit_32(1123680256);
+emit_32(1108102060);
+emit_32(1111195648);
+emit_32(1124132848);
+emit_32(1108560812);
+emit_32(1111195648);
+emit_32(1124388897);
+emit_32(1108645328);
+emit_32(1111195648);
+emit_32(1124644880);
+emit_32(1108748770);
+emit_32(1111195648);
+emit_32(1124900864);
+emit_32(1109085782);
+emit_32(1111195648);
+emit_32(1125156848);
+emit_32(1109583226);
+emit_32(1111195648);
+emit_32(1125412897);
+emit_32(1109638486);
+emit_32(1111195648);
+emit_32(1125668880);
+emit_32(1110035425);
+emit_32(1111195648);
+emit_32(1125924864);
+emit_32(1110433989);
+emit_32(1111195648);
+emit_32(1126180848);
+emit_32(1110499420);
+emit_32(1111195648);
+emit_32(1126436897);
+emit_32(1110684860);
+emit_32(1111195648);
+emit_32(1126692880);
+emit_32(1110426858);
+emit_32(1111195648);
+emit_32(1126948864);
+emit_32(1110251405);
+emit_32(1111195648);
+emit_32(1127204848);
+emit_32(1110246503);
+emit_32(1111195648);
+emit_32(1127460897);
+emit_32(1110057366);
+emit_32(1111195648);
+emit_32(1127716880);
+emit_32(1109702135);
+emit_32(1111195648);
+emit_32(1127972864);
+emit_32(1109224404);
+emit_32(1111195648);
+emit_32(1128228848);
+emit_32(1108823035);
+emit_32(1111195648);
+emit_32(1128484897);
+emit_32(1108466703);
+emit_32(1111195648);
+emit_32(1128740880);
+emit_32(1108265009);
+emit_32(1111195648);
+emit_32(1128996864);
+emit_32(1108131919);
+emit_32(1111195648);
+emit_32(1129252848);
+emit_32(1107543668);
+emit_32(1111195648);
+emit_32(1129508897);
+emit_32(1106964749);
+emit_32(1111195648);
+emit_32(1129764880);
+emit_32(1106629467);
+emit_32(1111195648);
+emit_32(1130020864);
+emit_32(1105373587);
+emit_32(1111195648);
+emit_32(1130276848);
+emit_32(1103657645);
+emit_32(1111195648);
+emit_32(1130532897);
+emit_32(1103203244);
+emit_32(1111195648);
+emit_32(1130788880);
+emit_32(1102255384);
+emit_32(1111195648);
+emit_32(1131044864);
+emit_32(1100737203);
+emit_32(1111195648);
+emit_32(1131300848);
+emit_32(1099366557);
+emit_32(1111195648);
+emit_32(1131556897);
+emit_32(1096754817);
+emit_32(1111195648);
+emit_32(1131812880);
+emit_32(1096073871);
+emit_32(1111195648);
+emit_32(1132068864);
+emit_32(1096026581);
+emit_32(1111195648);
+emit_32(1081737216);
+emit_32(1107240944);
+emit_32(1110171661);
+emit_32(1090125824);
+emit_32(1107823611);
+emit_32(1110171661);
+emit_32(1094418484);
+emit_32(1108408821);
+emit_32(1110171661);
+emit_32(1098514432);
+emit_32(1108701925);
+emit_32(1110171661);
+emit_32(1100759066);
+emit_32(1109285326);
+emit_32(1110171661);
+emit_32(1102807040);
+emit_32(1109681609);
+emit_32(1110171661);
+emit_32(1104855066);
+emit_32(1109940345);
+emit_32(1110171661);
+emit_32(1106903040);
+emit_32(1109939952);
+emit_32(1110171661);
+emit_32(1108123661);
+emit_32(1109971121);
+emit_32(1110171661);
+emit_32(1109147648);
+emit_32(1110303834);
+emit_32(1110171661);
+emit_32(1110171661);
+emit_32(1110120962);
+emit_32(1110171661);
+emit_32(1111195648);
+emit_32(1110000979);
+emit_32(1110171661);
+emit_32(1112219661);
+emit_32(1109972484);
+emit_32(1110171661);
+emit_32(1113243648);
+emit_32(1109736686);
+emit_32(1110171661);
+emit_32(1114267661);
+emit_32(1109619612);
+emit_32(1110171661);
+emit_32(1115291648);
+emit_32(1109518608);
+emit_32(1110171661);
+emit_32(1116000263);
+emit_32(1109430003);
+emit_32(1110171661);
+emit_32(1116512256);
+emit_32(1109161909);
+emit_32(1110171661);
+emit_32(1117024263);
+emit_32(1109167492);
+emit_32(1110171661);
+emit_32(1117536256);
+emit_32(1109168515);
+emit_32(1110171661);
+emit_32(1118048263);
+emit_32(1109105626);
+emit_32(1110171661);
+emit_32(1118560256);
+emit_32(1108756686);
+emit_32(1110171661);
+emit_32(1119072263);
+emit_32(1108552555);
+emit_32(1110171661);
+emit_32(1119584256);
+emit_32(1108023286);
+emit_32(1110171661);
+emit_32(1120096263);
+emit_32(1107602178);
+emit_32(1110171661);
+emit_32(1120608322);
+emit_32(1107405649);
+emit_32(1110171661);
+emit_32(1121120289);
+emit_32(1107570616);
+emit_32(1110171661);
+emit_32(1121632256);
+emit_32(1107660164);
+emit_32(1110171661);
+emit_32(1122144223);
+emit_32(1107756004);
+emit_32(1110171661);
+emit_32(1122656322);
+emit_32(1107706800);
+emit_32(1110171661);
+emit_32(1123168289);
+emit_32(1107795667);
+emit_32(1110171661);
+emit_32(1123680256);
+emit_32(1108061218);
+emit_32(1110171661);
+emit_32(1124132848);
+emit_32(1108159365);
+emit_32(1110171661);
+emit_32(1124388897);
+emit_32(1108652615);
+emit_32(1110171661);
+emit_32(1124644880);
+emit_32(1108895151);
+emit_32(1110171661);
+emit_32(1124900864);
+emit_32(1109068900);
+emit_32(1110171661);
+emit_32(1125156848);
+emit_32(1109317911);
+emit_32(1110171661);
+emit_32(1125412897);
+emit_32(1109583646);
+emit_32(1110171661);
+emit_32(1125668880);
+emit_32(1109982314);
+emit_32(1110171661);
+emit_32(1125924864);
+emit_32(1110319589);
+emit_32(1110171661);
+emit_32(1126180848);
+emit_32(1110618800);
+emit_32(1110171635);
+emit_32(1126436897);
+emit_32(1110589833);
+emit_32(1110171661);
+emit_32(1126692880);
+emit_32(1110601236);
+emit_32(1110171661);
+emit_32(1126948864);
+emit_32(1110238219);
+emit_32(1110171661);
+emit_32(1127204848);
+emit_32(1110066804);
+emit_32(1110171661);
+emit_32(1127460897);
+emit_32(1109910933);
+emit_32(1110171661);
+emit_32(1127716880);
+emit_32(1109484739);
+emit_32(1110171661);
+emit_32(1127972864);
+emit_32(1109107907);
+emit_32(1110171661);
+emit_32(1128228848);
+emit_32(1108797633);
+emit_32(1110171661);
+emit_32(1128484897);
+emit_32(1108483428);
+emit_32(1110171661);
+emit_32(1128740880);
+emit_32(1108328081);
+emit_32(1110171661);
+emit_32(1128996864);
+emit_32(1108125627);
+emit_32(1110171661);
+emit_32(1129252848);
+emit_32(1107731808);
+emit_32(1110171661);
+emit_32(1129508897);
+emit_32(1106917982);
+emit_32(1110171661);
+emit_32(1129764880);
+emit_32(1106313688);
+emit_32(1110171661);
+emit_32(1130020864);
+emit_32(1105521174);
+emit_32(1110171661);
+emit_32(1130276848);
+emit_32(1104211450);
+emit_32(1110171661);
+emit_32(1130532897);
+emit_32(1103253052);
+emit_32(1110171661);
+emit_32(1130788880);
+emit_32(1102325744);
+emit_32(1110171661);
+emit_32(1131044864);
+emit_32(1101081451);
+emit_32(1110171661);
+emit_32(1131300848);
+emit_32(1099684171);
+emit_32(1110171661);
+emit_32(1131556897);
+emit_32(1098145962);
+emit_32(1110171661);
+emit_32(1131812880);
+emit_32(1096588198);
+emit_32(1110171661);
+emit_32(1132068864);
+emit_32(1095942590);
+emit_32(1110171661);
+emit_32(1081737216);
+emit_32(1108060956);
+emit_32(1109147648);
+emit_32(1090125824);
+emit_32(1108546971);
+emit_32(1109147648);
+emit_32(1094418484);
+emit_32(1109017939);
+emit_32(1109147648);
+emit_32(1098514432);
+emit_32(1109407144);
+emit_32(1109147648);
+emit_32(1100759066);
+emit_32(1109980401);
+emit_32(1109147648);
+emit_32(1102807040);
+emit_32(1110240972);
+emit_32(1109147648);
+emit_32(1104855066);
+emit_32(1110658358);
+emit_32(1109147648);
+emit_32(1106903040);
+emit_32(1110751524);
+emit_32(1109147648);
+emit_32(1108123661);
+emit_32(1110695844);
+emit_32(1109147648);
+emit_32(1109147648);
+emit_32(1110721089);
+emit_32(1109147648);
+emit_32(1110171661);
+emit_32(1110727406);
+emit_32(1109147648);
+emit_32(1111195648);
+emit_32(1110842173);
+emit_32(1109147648);
+emit_32(1112219661);
+emit_32(1110770765);
+emit_32(1109147648);
+emit_32(1113243648);
+emit_32(1110489091);
+emit_32(1109147648);
+emit_32(1114267661);
+emit_32(1110249518);
+emit_32(1109147648);
+emit_32(1115291648);
+emit_32(1110116087);
+emit_32(1109147648);
+emit_32(1116000263);
+emit_32(1110026722);
+emit_32(1109147648);
+emit_32(1116512256);
+emit_32(1109757343);
+emit_32(1109147648);
+emit_32(1117024263);
+emit_32(1109707325);
+emit_32(1109147648);
+emit_32(1117536256);
+emit_32(1109736109);
+emit_32(1109147648);
+emit_32(1118048263);
+emit_32(1109670940);
+emit_32(1109147648);
+emit_32(1118560256);
+emit_32(1109409425);
+emit_32(1109147648);
+emit_32(1119072263);
+emit_32(1109060459);
+emit_32(1109147648);
+emit_32(1119584256);
+emit_32(1108683601);
+emit_32(1109147648);
+emit_32(1120096263);
+emit_32(1108291643);
+emit_32(1109147648);
+emit_32(1120608322);
+emit_32(1108134645);
+emit_32(1109147648);
+emit_32(1121120289);
+emit_32(1107726382);
+emit_32(1109147648);
+emit_32(1121632256);
+emit_32(1107627056);
+emit_32(1109147648);
+emit_32(1122144223);
+emit_32(1107778260);
+emit_32(1109147648);
+emit_32(1122656322);
+emit_32(1108018568);
+emit_32(1109147648);
+emit_32(1123168289);
+emit_32(1107783031);
+emit_32(1109147648);
+emit_32(1123680256);
+emit_32(1108023470);
+emit_32(1109147648);
+emit_32(1124132848);
+emit_32(1108274551);
+emit_32(1109147648);
+emit_32(1124388897);
+emit_32(1108502721);
+emit_32(1109147648);
+emit_32(1124644880);
+emit_32(1108792679);
+emit_32(1109147648);
+emit_32(1124900864);
+emit_32(1108934997);
+emit_32(1109147648);
+emit_32(1125156848);
+emit_32(1109183483);
+emit_32(1109147648);
+emit_32(1125412897);
+emit_32(1109454645);
+emit_32(1109147648);
+emit_32(1125668880);
+emit_32(1109678699);
+emit_32(1109147648);
+emit_32(1125924864);
+emit_32(1110022658);
+emit_32(1109147648);
+emit_32(1126180848);
+emit_32(1110147151);
+emit_32(1109147648);
+emit_32(1126436897);
+emit_32(1110222596);
+emit_32(1109147648);
+emit_32(1126692880);
+emit_32(1110347035);
+emit_32(1109147648);
+emit_32(1126948864);
+emit_32(1110235231);
+emit_32(1109147648);
+emit_32(1127204848);
+emit_32(1110061194);
+emit_32(1109147648);
+emit_32(1127460897);
+emit_32(1109745022);
+emit_32(1109147648);
+emit_32(1127716880);
+emit_32(1109246162);
+emit_32(1109147648);
+emit_32(1127972864);
+emit_32(1109124003);
+emit_32(1109147648);
+emit_32(1128228848);
+emit_32(1108700011);
+emit_32(1109147648);
+emit_32(1128484897);
+emit_32(1108308525);
+emit_32(1109147648);
+emit_32(1128740880);
+emit_32(1108062844);
+emit_32(1109147648);
+emit_32(1128996864);
+emit_32(1107977306);
+emit_32(1109147648);
+emit_32(1129252848);
+emit_32(1107731205);
+emit_32(1109147648);
+emit_32(1129508897);
+emit_32(1107357781);
+emit_32(1109147648);
+emit_32(1129764880);
+emit_32(1106463529);
+emit_32(1109147648);
+emit_32(1130020864);
+emit_32(1105450081);
+emit_32(1109147648);
+emit_32(1130276848);
+emit_32(1104493307);
+emit_32(1109147648);
+emit_32(1130532897);
+emit_32(1103358434);
+emit_32(1109147648);
+emit_32(1130788880);
+emit_32(1102558632);
+emit_32(1109147648);
+emit_32(1131044864);
+emit_32(1101338404);
+emit_32(1109147648);
+emit_32(1131300848);
+emit_32(1100196558);
+emit_32(1109147648);
+emit_32(1131556897);
+emit_32(1099061264);
+emit_32(1109147648);
+emit_32(1131812880);
+emit_32(1096545521);
+emit_32(1109147648);
+emit_32(1132068864);
+emit_32(1096018716);
+emit_32(1109147648);
+emit_32(1081737216);
+emit_32(1109011386);
+emit_32(1108123661);
+emit_32(1090125824);
+emit_32(1109203904);
+emit_32(1108123661);
+emit_32(1094418484);
+emit_32(1109519263);
+emit_32(1108123661);
+emit_32(1098514432);
+emit_32(1109988842);
+emit_32(1108123661);
+emit_32(1100759066);
+emit_32(1110461461);
+emit_32(1108123635);
+emit_32(1102807040);
+emit_32(1110941919);
+emit_32(1108123635);
+emit_32(1104855066);
+emit_32(1111344415);
+emit_32(1108123661);
+emit_32(1106903040);
+emit_32(1111428956);
+emit_32(1108123661);
+emit_32(1108123661);
+emit_32(1111187862);
+emit_32(1108123635);
+emit_32(1109147648);
+emit_32(1111258851);
+emit_32(1108123635);
+emit_32(1110171661);
+emit_32(1111121199);
+emit_32(1108123661);
+emit_32(1111195648);
+emit_32(1111334951);
+emit_32(1108123661);
+emit_32(1112219661);
+emit_32(1111280871);
+emit_32(1108123635);
+emit_32(1113243648);
+emit_32(1111290597);
+emit_32(1108123635);
+emit_32(1114267661);
+emit_32(1111219660);
+emit_32(1108123661);
+emit_32(1115291648);
+emit_32(1110791212);
+emit_32(1108123661);
+emit_32(1116000263);
+emit_32(1110556043);
+emit_32(1108123635);
+emit_32(1116512256);
+emit_32(1110407643);
+emit_32(1108123635);
+emit_32(1117024263);
+emit_32(1110379174);
+emit_32(1108123661);
+emit_32(1117536256);
+emit_32(1110347979);
+emit_32(1108123661);
+emit_32(1118048263);
+emit_32(1110338280);
+emit_32(1108123661);
+emit_32(1118560256);
+emit_32(1109911536);
+emit_32(1108123661);
+emit_32(1119072263);
+emit_32(1109549908);
+emit_32(1108123661);
+emit_32(1119584256);
+emit_32(1109081142);
+emit_32(1108123661);
+emit_32(1120096263);
+emit_32(1108718492);
+emit_32(1108123661);
+emit_32(1120608322);
+emit_32(1108472470);
+emit_32(1108123661);
+emit_32(1121120289);
+emit_32(1108029604);
+emit_32(1108123661);
+emit_32(1121632256);
+emit_32(1107454879);
+emit_32(1108123661);
+emit_32(1122144223);
+emit_32(1107399252);
+emit_32(1108123661);
+emit_32(1122656322);
+emit_32(1107660793);
+emit_32(1108123661);
+emit_32(1123168289);
+emit_32(1107749241);
+emit_32(1108123661);
+emit_32(1123680256);
+emit_32(1107770448);
+emit_32(1108123661);
+emit_32(1124132848);
+emit_32(1108146730);
+emit_32(1108123661);
+emit_32(1124388897);
+emit_32(1108341608);
+emit_32(1108123661);
+emit_32(1124644880);
+emit_32(1108443057);
+emit_32(1108123661);
+emit_32(1124900864);
+emit_32(1108765442);
+emit_32(1108123661);
+emit_32(1125156848);
+emit_32(1108966061);
+emit_32(1108123661);
+emit_32(1125412897);
+emit_32(1109234287);
+emit_32(1108123661);
+emit_32(1125668880);
+emit_32(1109396423);
+emit_32(1108123661);
+emit_32(1125924864);
+emit_32(1109622050);
+emit_32(1108123661);
+emit_32(1126180848);
+emit_32(1109584826);
+emit_32(1108123661);
+emit_32(1126436897);
+emit_32(1109832945);
+emit_32(1108123661);
+emit_32(1126692880);
+emit_32(1109962759);
+emit_32(1108123661);
+emit_32(1126948864);
+emit_32(1109897773);
+emit_32(1108123661);
+emit_32(1127204848);
+emit_32(1109645800);
+emit_32(1108123661);
+emit_32(1127460897);
+emit_32(1109215386);
+emit_32(1108123661);
+emit_32(1127716880);
+emit_32(1108859027);
+emit_32(1108123661);
+emit_32(1127972864);
+emit_32(1108683050);
+emit_32(1108123661);
+emit_32(1128228848);
+emit_32(1108384704);
+emit_32(1108123661);
+emit_32(1128484897);
+emit_32(1108232031);
+emit_32(1108123661);
+emit_32(1128740880);
+emit_32(1108097027);
+emit_32(1108123661);
+emit_32(1128996864);
+emit_32(1107779178);
+emit_32(1108123661);
+emit_32(1129252848);
+emit_32(1107602938);
+emit_32(1108123661);
+emit_32(1129508897);
+emit_32(1107406278);
+emit_32(1108123661);
+emit_32(1129764880);
+emit_32(1106809874);
+emit_32(1108123661);
+emit_32(1130020864);
+emit_32(1105779438);
+emit_32(1108123661);
+emit_32(1130276848);
+emit_32(1104361030);
+emit_32(1108123661);
+emit_32(1130532897);
+emit_32(1102937430);
+emit_32(1108123661);
+emit_32(1130788880);
+emit_32(1102218107);
+emit_32(1108123661);
+emit_32(1131044864);
+emit_32(1101488456);
+emit_32(1108123661);
+emit_32(1131300848);
+emit_32(1100298741);
+emit_32(1108123661);
+emit_32(1131556897);
+emit_32(1099192756);
+emit_32(1108123661);
+emit_32(1131812880);
+emit_32(1097382704);
+emit_32(1108123661);
+emit_32(1132068864);
+emit_32(1096297952);
+emit_32(1108123661);
+emit_32(1081737216);
+emit_32(1109770397);
+emit_32(1106903040);
+emit_32(1090125824);
+emit_32(1109777737);
+emit_32(1106903040);
+emit_32(1094418484);
+emit_32(1110054299);
+emit_32(1106903040);
+emit_32(1098514432);
+emit_32(1110481751);
+emit_32(1106903040);
+emit_32(1100759066);
+emit_32(1110921734);
+emit_32(1106903040);
+emit_32(1102807040);
+emit_32(1111312643);
+emit_32(1106903040);
+emit_32(1104855066);
+emit_32(1111792130);
+emit_32(1106903040);
+emit_32(1106903040);
+emit_32(1111787124);
+emit_32(1106903040);
+emit_32(1108123661);
+emit_32(1111611697);
+emit_32(1106903040);
+emit_32(1109147648);
+emit_32(1111513262);
+emit_32(1106903040);
+emit_32(1110171661);
+emit_32(1111366278);
+emit_32(1106903040);
+emit_32(1111195648);
+emit_32(1111544090);
+emit_32(1106903040);
+emit_32(1112219661);
+emit_32(1111560762);
+emit_32(1106903040);
+emit_32(1113243648);
+emit_32(1111668713);
+emit_32(1106903040);
+emit_32(1114267661);
+emit_32(1111792235);
+emit_32(1106903040);
+emit_32(1115291648);
+emit_32(1111628474);
+emit_32(1106903040);
+emit_32(1116000263);
+emit_32(1111299169);
+emit_32(1106903040);
+emit_32(1116512256);
+emit_32(1111051180);
+emit_32(1106903040);
+emit_32(1117024263);
+emit_32(1110941447);
+emit_32(1106903040);
+emit_32(1117536256);
+emit_32(1110781408);
+emit_32(1106903040);
+emit_32(1118048263);
+emit_32(1110736162);
+emit_32(1106903040);
+emit_32(1118560256);
+emit_32(1110488462);
+emit_32(1106903040);
+emit_32(1119072263);
+emit_32(1109937383);
+emit_32(1106903040);
+emit_32(1119584256);
+emit_32(1109345724);
+emit_32(1106903040);
+emit_32(1120096263);
+emit_32(1108919032);
+emit_32(1106903040);
+emit_32(1120608322);
+emit_32(1108581522);
+emit_32(1106903040);
+emit_32(1121120289);
+emit_32(1108342132);
+emit_32(1106903040);
+emit_32(1121632256);
+emit_32(1107848908);
+emit_32(1106903040);
+emit_32(1122144223);
+emit_32(1107817451);
+emit_32(1106903040);
+emit_32(1122656322);
+emit_32(1107677518);
+emit_32(1106903040);
+emit_32(1123168289);
+emit_32(1107491160);
+emit_32(1106903040);
+emit_32(1123680256);
+emit_32(1107374427);
+emit_32(1106903040);
+emit_32(1124132848);
+emit_32(1107634238);
+emit_32(1106903040);
+emit_32(1124388897);
+emit_32(1107933318);
+emit_32(1106903040);
+emit_32(1124644880);
+emit_32(1108214022);
+emit_32(1106903040);
+emit_32(1124900864);
+emit_32(1108453936);
+emit_32(1106903040);
+emit_32(1125156848);
+emit_32(1108889960);
+emit_32(1106903040);
+emit_32(1125412897);
+emit_32(1108978801);
+emit_32(1106903040);
+emit_32(1125668880);
+emit_32(1108913553);
+emit_32(1106903040);
+emit_32(1125924864);
+emit_32(1109166234);
+emit_32(1106903040);
+emit_32(1126180848);
+emit_32(1109341451);
+emit_32(1106903040);
+emit_32(1126436897);
+emit_32(1109498502);
+emit_32(1106903040);
+emit_32(1126692880);
+emit_32(1109568048);
+emit_32(1106903040);
+emit_32(1126948864);
+emit_32(1109560892);
+emit_32(1106903040);
+emit_32(1127204848);
+emit_32(1109393539);
+emit_32(1106903040);
+emit_32(1127460897);
+emit_32(1108906790);
+emit_32(1106903040);
+emit_32(1127716880);
+emit_32(1108388794);
+emit_32(1106903040);
+emit_32(1127972864);
+emit_32(1108280685);
+emit_32(1106903040);
+emit_32(1128228848);
+emit_32(1108149246);
+emit_32(1106903040);
+emit_32(1128484897);
+emit_32(1107958379);
+emit_32(1106903040);
+emit_32(1128740880);
+emit_32(1107807725);
+emit_32(1106903040);
+emit_32(1128996864);
+emit_32(1107773594);
+emit_32(1106903040);
+emit_32(1129252848);
+emit_32(1107432414);
+emit_32(1106903040);
+emit_32(1129508897);
+emit_32(1107128327);
+emit_32(1106903040);
+emit_32(1129764880);
+emit_32(1106506678);
+emit_32(1106903040);
+emit_32(1130020864);
+emit_32(1105675629);
+emit_32(1106903040);
+emit_32(1130276848);
+emit_32(1104725148);
+emit_32(1106903040);
+emit_32(1130532897);
+emit_32(1102879234);
+emit_32(1106903040);
+emit_32(1130788880);
+emit_32(1102337697);
+emit_32(1106903040);
+emit_32(1131044864);
+emit_32(1101447194);
+emit_32(1106903040);
+emit_32(1131300848);
+emit_32(1100372404);
+emit_32(1106903040);
+emit_32(1131556897);
+emit_32(1099275803);
+emit_32(1106903040);
+emit_32(1131812880);
+emit_32(1097451700);
+emit_32(1106903040);
+emit_32(1132068864);
+emit_32(1095526829);
+emit_32(1106903040);
+emit_32(1081737216);
+emit_32(1110109952);
+emit_32(1104855014);
+emit_32(1090125824);
+emit_32(1110275732);
+emit_32(1104855066);
+emit_32(1094418484);
+emit_32(1110685778);
+emit_32(1104855014);
+emit_32(1098514432);
+emit_32(1111152735);
+emit_32(1104855066);
+emit_32(1100759066);
+emit_32(1111517587);
+emit_32(1104855014);
+emit_32(1102807040);
+emit_32(1111678596);
+emit_32(1104855066);
+emit_32(1104855066);
+emit_32(1111775642);
+emit_32(1104855014);
+emit_32(1106903040);
+emit_32(1112048193);
+emit_32(1104855066);
+emit_32(1108123661);
+emit_32(1111799470);
+emit_32(1104855014);
+emit_32(1109147648);
+emit_32(1112134622);
+emit_32(1104855066);
+emit_32(1110171661);
+emit_32(1111941867);
+emit_32(1104855014);
+emit_32(1111195648);
+emit_32(1111767463);
+emit_32(1104855066);
+emit_32(1112219661);
+emit_32(1111687011);
+emit_32(1104855014);
+emit_32(1113243648);
+emit_32(1111766309);
+emit_32(1104855066);
+emit_32(1114267661);
+emit_32(1111969340);
+emit_32(1104855014);
+emit_32(1115291648);
+emit_32(1111967505);
+emit_32(1104855066);
+emit_32(1116000263);
+emit_32(1111727355);
+emit_32(1104855014);
+emit_32(1116512256);
+emit_32(1111359540);
+emit_32(1104855066);
+emit_32(1117024263);
+emit_32(1111157847);
+emit_32(1104855014);
+emit_32(1117536256);
+emit_32(1110917304);
+emit_32(1104855066);
+emit_32(1118048263);
+emit_32(1110816929);
+emit_32(1104855014);
+emit_32(1118560256);
+emit_32(1110568783);
+emit_32(1104855066);
+emit_32(1119072263);
+emit_32(1110093490);
+emit_32(1104855014);
+emit_32(1119584256);
+emit_32(1109527311);
+emit_32(1104855066);
+emit_32(1120096263);
+emit_32(1108993586);
+emit_32(1104855014);
+emit_32(1120608322);
+emit_32(1108933555);
+emit_32(1104855066);
+emit_32(1121120289);
+emit_32(1108821698);
+emit_32(1104855014);
+emit_32(1121632256);
+emit_32(1108751234);
+emit_32(1104855066);
+emit_32(1122144223);
+emit_32(1108472837);
+emit_32(1104855014);
+emit_32(1122656322);
+emit_32(1108266844);
+emit_32(1104855066);
+emit_32(1123168289);
+emit_32(1107914103);
+emit_32(1104855014);
+emit_32(1123680256);
+emit_32(1107834175);
+emit_32(1104855066);
+emit_32(1124132848);
+emit_32(1107903539);
+emit_32(1104855014);
+emit_32(1124388897);
+emit_32(1107817215);
+emit_32(1104855066);
+emit_32(1124644880);
+emit_32(1107776661);
+emit_32(1104855014);
+emit_32(1124900864);
+emit_32(1108217378);
+emit_32(1104855066);
+emit_32(1125156848);
+emit_32(1108340821);
+emit_32(1104855014);
+emit_32(1125412897);
+emit_32(1108427643);
+emit_32(1104855066);
+emit_32(1125668880);
+emit_32(1108896016);
+emit_32(1104855014);
+emit_32(1125924864);
+emit_32(1109136271);
+emit_32(1104855066);
+emit_32(1126180848);
+emit_32(1109149745);
+emit_32(1104855014);
+emit_32(1126436897);
+emit_32(1109121932);
+emit_32(1104855066);
+emit_32(1126692880);
+emit_32(1108894600);
+emit_32(1104855014);
+emit_32(1126948864);
+emit_32(1108941734);
+emit_32(1104855066);
+emit_32(1127204848);
+emit_32(1108756031);
+emit_32(1104855014);
+emit_32(1127460897);
+emit_32(1108342132);
+emit_32(1104855066);
+emit_32(1127716880);
+emit_32(1107861281);
+emit_32(1104855014);
+emit_32(1127972864);
+emit_32(1107811264);
+emit_32(1104855066);
+emit_32(1128228848);
+emit_32(1107808905);
+emit_32(1104855014);
+emit_32(1128484897);
+emit_32(1107751705);
+emit_32(1104855066);
+emit_32(1128740880);
+emit_32(1107656337);
+emit_32(1104855014);
+emit_32(1128996864);
+emit_32(1107347820);
+emit_32(1104855066);
+emit_32(1129252848);
+emit_32(1107352119);
+emit_32(1104855014);
+emit_32(1129508897);
+emit_32(1106497084);
+emit_32(1104855066);
+emit_32(1129764880);
+emit_32(1105749344);
+emit_32(1104855014);
+emit_32(1130020864);
+emit_32(1104957407);
+emit_32(1104855066);
+emit_32(1130276848);
+emit_32(1104016048);
+emit_32(1104855014);
+emit_32(1130532897);
+emit_32(1102858578);
+emit_32(1104855066);
+emit_32(1130788880);
+emit_32(1102331511);
+emit_32(1104855014);
+emit_32(1131044864);
+emit_32(1101186518);
+emit_32(1104855066);
+emit_32(1131300848);
+emit_32(1100268490);
+emit_32(1104855066);
+emit_32(1131556897);
+emit_32(1099251266);
+emit_32(1104855066);
+emit_32(1131812880);
+emit_32(1097610874);
+emit_32(1104855066);
+emit_32(1132068864);
+emit_32(1095739900);
+emit_32(1104855066);
+emit_32(1081737216);
+emit_32(1110619796);
+emit_32(1102807040);
+emit_32(1090125824);
+emit_32(1110999800);
+emit_32(1102807040);
+emit_32(1094418484);
+emit_32(1111488489);
+emit_32(1102807040);
+emit_32(1098514432);
+emit_32(1111646011);
+emit_32(1102807040);
+emit_32(1100759066);
+emit_32(1111969235);
+emit_32(1102807040);
+emit_32(1102807040);
+emit_32(1112017758);
+emit_32(1102807040);
+emit_32(1104855066);
+emit_32(1111955341);
+emit_32(1102807040);
+emit_32(1106903040);
+emit_32(1112183747);
+emit_32(1102807040);
+emit_32(1108123661);
+emit_32(1112078287);
+emit_32(1102807040);
+emit_32(1109147648);
+emit_32(1112415640);
+emit_32(1102807040);
+emit_32(1110171661);
+emit_32(1112379359);
+emit_32(1102807040);
+emit_32(1111195648);
+emit_32(1112160154);
+emit_32(1102807040);
+emit_32(1112219661);
+emit_32(1112004362);
+emit_32(1102807040);
+emit_32(1113243648);
+emit_32(1112284594);
+emit_32(1102807040);
+emit_32(1114267661);
+emit_32(1112145815);
+emit_32(1102807040);
+emit_32(1115291648);
+emit_32(1112028165);
+emit_32(1102807040);
+emit_32(1116000263);
+emit_32(1111869699);
+emit_32(1102807040);
+emit_32(1116512256);
+emit_32(1111690130);
+emit_32(1102807040);
+emit_32(1117024263);
+emit_32(1111495488);
+emit_32(1102807040);
+emit_32(1117536256);
+emit_32(1111516565);
+emit_32(1102807040);
+emit_32(1118048263);
+emit_32(1111279455);
+emit_32(1102807040);
+emit_32(1118560256);
+emit_32(1110753647);
+emit_32(1102807040);
+emit_32(1119072263);
+emit_32(1110422245);
+emit_32(1102807040);
+emit_32(1119584256);
+emit_32(1109864350);
+emit_32(1102807040);
+emit_32(1120096263);
+emit_32(1109488566);
+emit_32(1102807040);
+emit_32(1120608322);
+emit_32(1109477320);
+emit_32(1102807040);
+emit_32(1121120289);
+emit_32(1109194755);
+emit_32(1102807040);
+emit_32(1121632256);
+emit_32(1109034743);
+emit_32(1102807040);
+emit_32(1122144223);
+emit_32(1108849800);
+emit_32(1102807040);
+emit_32(1122656322);
+emit_32(1108636598);
+emit_32(1102807040);
+emit_32(1123168289);
+emit_32(1108210719);
+emit_32(1102807040);
+emit_32(1123680256);
+emit_32(1108302496);
+emit_32(1102807040);
+emit_32(1124132848);
+emit_32(1108212213);
+emit_32(1102807040);
+emit_32(1124388897);
+emit_32(1107870640);
+emit_32(1102807040);
+emit_32(1124644880);
+emit_32(1107736422);
+emit_32(1102807040);
+emit_32(1124900864);
+emit_32(1107676522);
+emit_32(1102807040);
+emit_32(1125156848);
+emit_32(1108209094);
+emit_32(1102807040);
+emit_32(1125412897);
+emit_32(1108349734);
+emit_32(1102807040);
+emit_32(1125668880);
+emit_32(1108929675);
+emit_32(1102807040);
+emit_32(1125924864);
+emit_32(1109162643);
+emit_32(1102807040);
+emit_32(1126180848);
+emit_32(1109107540);
+emit_32(1102807040);
+emit_32(1126436897);
+emit_32(1108914654);
+emit_32(1102807040);
+emit_32(1126692880);
+emit_32(1108541388);
+emit_32(1102807040);
+emit_32(1126948864);
+emit_32(1108505081);
+emit_32(1102807040);
+emit_32(1127204848);
+emit_32(1108237222);
+emit_32(1102807040);
+emit_32(1127460897);
+emit_32(1108014924);
+emit_32(1102807040);
+emit_32(1127716880);
+emit_32(1107468589);
+emit_32(1102807040);
+emit_32(1127972864);
+emit_32(1107449269);
+emit_32(1102807040);
+emit_32(1128228848);
+emit_32(1107434458);
+emit_32(1102807040);
+emit_32(1128484897);
+emit_32(1107390916);
+emit_32(1102807040);
+emit_32(1128740880);
+emit_32(1107022787);
+emit_32(1102807040);
+emit_32(1128996864);
+emit_32(1106671200);
+emit_32(1102807040);
+emit_32(1129252848);
+emit_32(1106222724);
+emit_32(1102807040);
+emit_32(1129508897);
+emit_32(1106247575);
+emit_32(1102807040);
+emit_32(1129764880);
+emit_32(1105452230);
+emit_32(1102807040);
+emit_32(1130020864);
+emit_32(1104502273);
+emit_32(1102807040);
+emit_32(1130276848);
+emit_32(1103619634);
+emit_32(1102807040);
+emit_32(1130532897);
+emit_32(1102588831);
+emit_32(1102807040);
+emit_32(1130788880);
+emit_32(1101717150);
+emit_32(1102807040);
+emit_32(1131044864);
+emit_32(1100508142);
+emit_32(1102807040);
+emit_32(1131300848);
+emit_32(1100011589);
+emit_32(1102807040);
+emit_32(1131556897);
+emit_32(1099322674);
+emit_32(1102807040);
+emit_32(1131812880);
+emit_32(1097813040);
+emit_32(1102807040);
+emit_32(1132068864);
+emit_32(1095768526);
+emit_32(1102807040);
+emit_32(1081737216);
+emit_32(1111203643);
+emit_32(1100759014);
+emit_32(1090125824);
+emit_32(1111589362);
+emit_32(1100759014);
+emit_32(1094418484);
+emit_32(1112030917);
+emit_32(1100759014);
+emit_32(1098514432);
+emit_32(1112275996);
+emit_32(1100759014);
+emit_32(1100759066);
+emit_32(1112319197);
+emit_32(1100759014);
+emit_32(1102807040);
+emit_32(1112479393);
+emit_32(1100759014);
+emit_32(1104855066);
+emit_32(1112429638);
+emit_32(1100759014);
+emit_32(1106903040);
+emit_32(1112415247);
+emit_32(1100759014);
+emit_32(1108123661);
+emit_32(1112431998);
+emit_32(1100759014);
+emit_32(1109147648);
+emit_32(1112654453);
+emit_32(1100759014);
+emit_32(1110171661);
+emit_32(1112696396);
+emit_32(1100759014);
+emit_32(1111195648);
+emit_32(1112521022);
+emit_32(1100759014);
+emit_32(1112219661);
+emit_32(1112435904);
+emit_32(1100759014);
+emit_32(1113243648);
+emit_32(1112240292);
+emit_32(1100759014);
+emit_32(1114267661);
+emit_32(1112316209);
+emit_32(1100759014);
+emit_32(1115291648);
+emit_32(1112066150);
+emit_32(1100759014);
+emit_32(1116000263);
+emit_32(1111963651);
+emit_32(1100759014);
+emit_32(1116512256);
+emit_32(1111800886);
+emit_32(1100759014);
+emit_32(1117024263);
+emit_32(1111681296);
+emit_32(1100759014);
+emit_32(1117536256);
+emit_32(1111620767);
+emit_32(1100759014);
+emit_32(1118048263);
+emit_32(1111346774);
+emit_32(1100759014);
+emit_32(1118560256);
+emit_32(1111034272);
+emit_32(1100759014);
+emit_32(1119072263);
+emit_32(1110619088);
+emit_32(1100759014);
+emit_32(1119584256);
+emit_32(1110189723);
+emit_32(1100759014);
+emit_32(1120096263);
+emit_32(1109747512);
+emit_32(1100759014);
+emit_32(1120608322);
+emit_32(1109609965);
+emit_32(1100759014);
+emit_32(1121120289);
+emit_32(1109538216);
+emit_32(1100759014);
+emit_32(1121632256);
+emit_32(1109322341);
+emit_32(1100759014);
+emit_32(1122144223);
+emit_32(1109116505);
+emit_32(1100759014);
+emit_32(1122656322);
+emit_32(1108968237);
+emit_32(1100759014);
+emit_32(1123168289);
+emit_32(1108596962);
+emit_32(1100759014);
+emit_32(1123680256);
+emit_32(1108337885);
+emit_32(1100759014);
+emit_32(1124132848);
+emit_32(1108184583);
+emit_32(1100759014);
+emit_32(1124388897);
+emit_32(1107955103);
+emit_32(1100759014);
+emit_32(1124644880);
+emit_32(1108010677);
+emit_32(1100759014);
+emit_32(1124900864);
+emit_32(1107800306);
+emit_32(1100759014);
+emit_32(1125156848);
+emit_32(1107894626);
+emit_32(1100759014);
+emit_32(1125412897);
+emit_32(1108230616);
+emit_32(1100759014);
+emit_32(1125668880);
+emit_32(1108803374);
+emit_32(1100759014);
+emit_32(1125924864);
+emit_32(1109075454);
+emit_32(1100759014);
+emit_32(1126180848);
+emit_32(1109027350);
+emit_32(1100759014);
+emit_32(1126436897);
+emit_32(1108939951);
+emit_32(1100759014);
+emit_32(1126692880);
+emit_32(1108326744);
+emit_32(1100759014);
+emit_32(1126948864);
+emit_32(1108036865);
+emit_32(1100759014);
+emit_32(1127204848);
+emit_32(1107817923);
+emit_32(1100759014);
+emit_32(1127460897);
+emit_32(1107732464);
+emit_32(1100759014);
+emit_32(1127716880);
+emit_32(1107137554);
+emit_32(1100759014);
+emit_32(1127972864);
+emit_32(1106958562);
+emit_32(1100759014);
+emit_32(1128228848);
+emit_32(1106960135);
+emit_32(1100759014);
+emit_32(1128484897);
+emit_32(1106646873);
+emit_32(1100759014);
+emit_32(1128740880);
+emit_32(1105859497);
+emit_32(1100759014);
+emit_32(1128996864);
+emit_32(1105603382);
+emit_32(1100759014);
+emit_32(1129252848);
+emit_32(1105170530);
+emit_32(1100759014);
+emit_32(1129508897);
+emit_32(1105374164);
+emit_32(1100759014);
+emit_32(1129764880);
+emit_32(1105401636);
+emit_32(1100759014);
+emit_32(1130020864);
+emit_32(1104911427);
+emit_32(1100759014);
+emit_32(1130276848);
+emit_32(1103660424);
+emit_32(1100759014);
+emit_32(1130532897);
+emit_32(1102697778);
+emit_32(1100759014);
+emit_32(1130788880);
+emit_32(1101449239);
+emit_32(1100759066);
+emit_32(1131044864);
+emit_32(1100702810);
+emit_32(1100759066);
+emit_32(1131300848);
+emit_32(1099801611);
+emit_32(1100759066);
+emit_32(1131556897);
+emit_32(1099221015);
+emit_32(1100759066);
+emit_32(1131812880);
+emit_32(1097633733);
+emit_32(1100759066);
+emit_32(1132068864);
+emit_32(1095588276);
+emit_32(1100759066);
+emit_32(1081737216);
+emit_32(1111812866);
+emit_32(1098514432);
+emit_32(1090125824);
+emit_32(1112034614);
+emit_32(1098514432);
+emit_32(1094418484);
+emit_32(1112430949);
+emit_32(1098514432);
+emit_32(1098514432);
+emit_32(1112552899);
+emit_32(1098514432);
+emit_32(1100759066);
+emit_32(1112388901);
+emit_32(1098514432);
+emit_32(1102807040);
+emit_32(1112497324);
+emit_32(1098514432);
+emit_32(1104855066);
+emit_32(1112626351);
+emit_32(1098514432);
+emit_32(1106903040);
+emit_32(1112804164);
+emit_32(1098514432);
+emit_32(1108123661);
+emit_32(1112732048);
+emit_32(1098514432);
+emit_32(1109147648);
+emit_32(1112876043);
+emit_32(1098514432);
+emit_32(1110171661);
+emit_32(1112974741);
+emit_32(1098514432);
+emit_32(1111195648);
+emit_32(1112667141);
+emit_32(1098514432);
+emit_32(1112219661);
+emit_32(1112522411);
+emit_32(1098514432);
+emit_32(1113243648);
+emit_32(1112234315);
+emit_32(1098514432);
+emit_32(1114267661);
+emit_32(1112061562);
+emit_32(1098514432);
+emit_32(1115291648);
+emit_32(1111763216);
+emit_32(1098514432);
+emit_32(1116000263);
+emit_32(1111779207);
+emit_32(1098514432);
+emit_32(1116512256);
+emit_32(1111697732);
+emit_32(1098514432);
+emit_32(1117024263);
+emit_32(1111651097);
+emit_32(1098514432);
+emit_32(1117536256);
+emit_32(1111523564);
+emit_32(1098514432);
+emit_32(1118048263);
+emit_32(1111418916);
+emit_32(1098514432);
+emit_32(1118560256);
+emit_32(1111207811);
+emit_32(1098514432);
+emit_32(1119072263);
+emit_32(1110728743);
+emit_32(1098514432);
+emit_32(1119584256);
+emit_32(1110351885);
+emit_32(1098514432);
+emit_32(1120096263);
+emit_32(1110067354);
+emit_32(1098514432);
+emit_32(1120608322);
+emit_32(1109906476);
+emit_32(1098514432);
+emit_32(1121120289);
+emit_32(1109648474);
+emit_32(1098514432);
+emit_32(1121632256);
+emit_32(1109594787);
+emit_32(1098514432);
+emit_32(1122144223);
+emit_32(1109226711);
+emit_32(1098514432);
+emit_32(1122656322);
+emit_32(1109203825);
+emit_32(1098514432);
+emit_32(1123168289);
+emit_32(1108763659);
+emit_32(1098514432);
+emit_32(1123680256);
+emit_32(1108360770);
+emit_32(1098514432);
+emit_32(1124132848);
+emit_32(1108356628);
+emit_32(1098514432);
+emit_32(1124388897);
+emit_32(1108118838);
+emit_32(1098514432);
+emit_32(1124644880);
+emit_32(1108079411);
+emit_32(1098514432);
+emit_32(1124900864);
+emit_32(1107833179);
+emit_32(1098514432);
+emit_32(1125156848);
+emit_32(1107770841);
+emit_32(1098514432);
+emit_32(1125412897);
+emit_32(1108082531);
+emit_32(1098514432);
+emit_32(1125668880);
+emit_32(1108414667);
+emit_32(1098514432);
+emit_32(1125924864);
+emit_32(1108808670);
+emit_32(1098514432);
+emit_32(1126180848);
+emit_32(1108779572);
+emit_32(1098514432);
+emit_32(1126436897);
+emit_32(1108586686);
+emit_32(1098514432);
+emit_32(1126692880);
+emit_32(1108017650);
+emit_32(1098514432);
+emit_32(1126948864);
+emit_32(1107632508);
+emit_32(1098514432);
+emit_32(1127204848);
+emit_32(1107530849);
+emit_32(1098514432);
+emit_32(1127460897);
+emit_32(1107331357);
+emit_32(1098514432);
+emit_32(1127716880);
+emit_32(1106461065);
+emit_32(1098514432);
+emit_32(1127972864);
+emit_32(1105721295);
+emit_32(1098514432);
+emit_32(1128228848);
+emit_32(1105899395);
+emit_32(1098514432);
+emit_32(1128484897);
+emit_32(1105780959);
+emit_32(1098514432);
+emit_32(1128740880);
+emit_32(1105112806);
+emit_32(1098514432);
+emit_32(1128996864);
+emit_32(1104398988);
+emit_32(1098514432);
+emit_32(1129252848);
+emit_32(1104246420);
+emit_32(1098514432);
+emit_32(1129508897);
+emit_32(1104877715);
+emit_32(1098514432);
+emit_32(1129764880);
+emit_32(1104934024);
+emit_32(1098514432);
+emit_32(1130020864);
+emit_32(1104407062);
+emit_32(1098514432);
+emit_32(1130276848);
+emit_32(1103509009);
+emit_32(1098514432);
+emit_32(1130532897);
+emit_32(1102561359);
+emit_32(1098514432);
+emit_32(1130788880);
+emit_32(1101226941);
+emit_32(1098514432);
+emit_32(1131044864);
+emit_32(1100378223);
+emit_32(1098514432);
+emit_32(1131300848);
+emit_32(1099670330);
+emit_32(1098514432);
+emit_32(1131556897);
+emit_32(1099052247);
+emit_32(1098514432);
+emit_32(1131812880);
+emit_32(1097040344);
+emit_32(1098514432);
+emit_32(1132068864);
+emit_32(1094514429);
+emit_32(1098514432);
+emit_32(1081737216);
+emit_32(1112309314);
+emit_32(1094418380);
+emit_32(1090125824);
+emit_32(1112490036);
+emit_32(1094418380);
+emit_32(1094418484);
+emit_32(1112564590);
+emit_32(1094418380);
+emit_32(1098514432);
+emit_32(1112495017);
+emit_32(1094418380);
+emit_32(1100759066);
+emit_32(1112570934);
+emit_32(1094418380);
+emit_32(1102807040);
+emit_32(1112483797);
+emit_32(1094418380);
+emit_32(1104855066);
+emit_32(1112593269);
+emit_32(1094418380);
+emit_32(1106903040);
+emit_32(1112653955);
+emit_32(1094418380);
+emit_32(1108123661);
+emit_32(1112696973);
+emit_32(1094418380);
+emit_32(1109147648);
+emit_32(1112876358);
+emit_32(1094418380);
+emit_32(1110171661);
+emit_32(1112771972);
+emit_32(1094418380);
+emit_32(1111195648);
+emit_32(1112696658);
+emit_32(1094418380);
+emit_32(1112219661);
+emit_32(1112760438);
+emit_32(1094418380);
+emit_32(1113243648);
+emit_32(1112709844);
+emit_32(1094418380);
+emit_32(1114267661);
+emit_32(1112445708);
+emit_32(1094418380);
+emit_32(1115291648);
+emit_32(1112126810);
+emit_32(1094418380);
+emit_32(1116000263);
+emit_32(1111838268);
+emit_32(1094418380);
+emit_32(1116512256);
+emit_32(1111661530);
+emit_32(1094418380);
+emit_32(1117024263);
+emit_32(1111906163);
+emit_32(1094418380);
+emit_32(1117536256);
+emit_32(1112106389);
+emit_32(1094418380);
+emit_32(1118048263);
+emit_32(1111761879);
+emit_32(1094418380);
+emit_32(1118560256);
+emit_32(1111398128);
+emit_32(1094418380);
+emit_32(1119072263);
+emit_32(1110978645);
+emit_32(1094418380);
+emit_32(1119584256);
+emit_32(1110634319);
+emit_32(1094418380);
+emit_32(1120096263);
+emit_32(1110529776);
+emit_32(1094418380);
+emit_32(1120608322);
+emit_32(1110304358);
+emit_32(1094418380);
+emit_32(1121120289);
+emit_32(1110165710);
+emit_32(1094418380);
+emit_32(1121632256);
+emit_32(1109858216);
+emit_32(1094418380);
+emit_32(1122144223);
+emit_32(1109581365);
+emit_32(1094418380);
+emit_32(1122656322);
+emit_32(1109235859);
+emit_32(1094418380);
+emit_32(1123168289);
+emit_32(1108903907);
+emit_32(1094418380);
+emit_32(1123680256);
+emit_32(1108430973);
+emit_32(1094418380);
+emit_32(1124132848);
+emit_32(1108410683);
+emit_32(1094418380);
+emit_32(1124388897);
+emit_32(1108135038);
+emit_32(1094418380);
+emit_32(1124644880);
+emit_32(1107804973);
+emit_32(1094418380);
+emit_32(1124900864);
+emit_32(1107639901);
+emit_32(1094418380);
+emit_32(1125156848);
+emit_32(1107772126);
+emit_32(1094418380);
+emit_32(1125412897);
+emit_32(1107737261);
+emit_32(1094418380);
+emit_32(1125668880);
+emit_32(1108006063);
+emit_32(1094418380);
+emit_32(1125924864);
+emit_32(1108199919);
+emit_32(1094418380);
+emit_32(1126180848);
+emit_32(1108248678);
+emit_32(1094418380);
+emit_32(1126436897);
+emit_32(1107916253);
+emit_32(1094418380);
+emit_32(1126692880);
+emit_32(1107555149);
+emit_32(1094418380);
+emit_32(1126948864);
+emit_32(1107371177);
+emit_32(1094418380);
+emit_32(1127204848);
+emit_32(1107332275);
+emit_32(1094418380);
+emit_32(1127460897);
+emit_32(1106749686);
+emit_32(1094418380);
+emit_32(1127716880);
+emit_32(1105781640);
+emit_32(1094418380);
+emit_32(1127972864);
+emit_32(1105277223);
+emit_32(1094418380);
+emit_32(1128228848);
+emit_32(1104907757);
+emit_32(1094418380);
+emit_32(1128484897);
+emit_32(1104873049);
+emit_32(1094418380);
+emit_32(1128740880);
+emit_32(1104381896);
+emit_32(1094418380);
+emit_32(1128996864);
+emit_32(1103612294);
+emit_32(1094418380);
+emit_32(1129252848);
+emit_32(1103676519);
+emit_32(1094418380);
+emit_32(1129508897);
+emit_32(1104280132);
+emit_32(1094418380);
+emit_32(1129764880);
+emit_32(1104232789);
+emit_32(1094418380);
+emit_32(1130020864);
+emit_32(1103550533);
+emit_32(1094418380);
+emit_32(1130276848);
+emit_32(1102514592);
+emit_32(1094418380);
+emit_32(1130532897);
+emit_32(1101953866);
+emit_32(1094418380);
+emit_32(1130788880);
+emit_32(1100634653);
+emit_32(1094418380);
+emit_32(1131044864);
+emit_32(1099709337);
+emit_32(1094418380);
+emit_32(1131300848);
+emit_32(1099034526);
+emit_32(1094418380);
+emit_32(1131556897);
+emit_32(1098146172);
+emit_32(1094418380);
+emit_32(1131812880);
+emit_32(1096675754);
+emit_32(1094418380);
+emit_32(1132068864);
+emit_32(1095032426);
+emit_32(1094418380);
+emit_32(1081737216);
+emit_32(1112605380);
+emit_32(1090125824);
+emit_32(1090125824);
+emit_32(1112742534);
+emit_32(1090125824);
+emit_32(1094418484);
+emit_32(1112581997);
+emit_32(1090125824);
+emit_32(1098514432);
+emit_32(1112591984);
+emit_32(1090125824);
+emit_32(1100759066);
+emit_32(1112534732);
+emit_32(1090125824);
+emit_32(1102807040);
+emit_32(1112399387);
+emit_32(1090125824);
+emit_32(1104855066);
+emit_32(1112277857);
+emit_32(1090125824);
+emit_32(1106903040);
+emit_32(1112201599);
+emit_32(1090125824);
+emit_32(1108123661);
+emit_32(1112445472);
+emit_32(1090125824);
+emit_32(1109147648);
+emit_32(1112670418);
+emit_32(1090125824);
+emit_32(1110171661);
+emit_32(1112875572);
+emit_32(1090125824);
+emit_32(1111195648);
+emit_32(1112679095);
+emit_32(1090125824);
+emit_32(1112219661);
+emit_32(1112703500);
+emit_32(1090125824);
+emit_32(1113243648);
+emit_32(1112775511);
+emit_32(1090125824);
+emit_32(1114267661);
+emit_32(1112764999);
+emit_32(1090125824);
+emit_32(1115291648);
+emit_32(1112475330);
+emit_32(1090125824);
+emit_32(1116000263);
+emit_32(1112362661);
+emit_32(1090125824);
+emit_32(1116512256);
+emit_32(1112174966);
+emit_32(1090125824);
+emit_32(1117024263);
+emit_32(1112258039);
+emit_32(1090125824);
+emit_32(1117536256);
+emit_32(1112460755);
+emit_32(1090125824);
+emit_32(1118048263);
+emit_32(1112160312);
+emit_32(1090125824);
+emit_32(1118560256);
+emit_32(1111604462);
+emit_32(1090125824);
+emit_32(1119072263);
+emit_32(1111322578);
+emit_32(1090125824);
+emit_32(1119584256);
+emit_32(1110893291);
+emit_32(1090125824);
+emit_32(1120096263);
+emit_32(1110900736);
+emit_32(1090125824);
+emit_32(1120608322);
+emit_32(1110553369);
+emit_32(1090125824);
+emit_32(1121120289);
+emit_32(1110630518);
+emit_32(1090125824);
+emit_32(1121632256);
+emit_32(1110571431);
+emit_32(1090125824);
+emit_32(1122144223);
+emit_32(1110245900);
+emit_32(1090125824);
+emit_32(1122656322);
+emit_32(1109753463);
+emit_32(1090125824);
+emit_32(1123168289);
+emit_32(1109358386);
+emit_32(1090125824);
+emit_32(1123680256);
+emit_32(1108613530);
+emit_32(1090125824);
+emit_32(1124132848);
+emit_32(1108478368);
+emit_32(1090125824);
+emit_32(1124388897);
+emit_32(1108175854);
+emit_32(1090125824);
+emit_32(1124644880);
+emit_32(1107804527);
+emit_32(1090125824);
+emit_32(1124900864);
+emit_32(1107498500);
+emit_32(1090125824);
+emit_32(1125156848);
+emit_32(1107513704);
+emit_32(1090125824);
+emit_32(1125412897);
+emit_32(1107414562);
+emit_32(1090125824);
+emit_32(1125668880);
+emit_32(1107678934);
+emit_32(1090125824);
+emit_32(1125924864);
+emit_32(1107910564);
+emit_32(1090125824);
+emit_32(1126180848);
+emit_32(1108046853);
+emit_32(1090125824);
+emit_32(1126436897);
+emit_32(1107743028);
+emit_32(1090125824);
+emit_32(1126692880);
+emit_32(1107443817);
+emit_32(1090125824);
+emit_32(1126948864);
+emit_32(1107040246);
+emit_32(1090125824);
+emit_32(1127204848);
+emit_32(1106762321);
+emit_32(1090125824);
+emit_32(1127460897);
+emit_32(1106354582);
+emit_32(1090125824);
+emit_32(1127716880);
+emit_32(1105464079);
+emit_32(1090125824);
+emit_32(1127972864);
+emit_32(1104597169);
+emit_32(1090125824);
+emit_32(1128228848);
+emit_32(1103944902);
+emit_32(1090125824);
+emit_32(1128484897);
+emit_32(1104198028);
+emit_32(1090125824);
+emit_32(1128740880);
+emit_32(1103790342);
+emit_32(1090125824);
+emit_32(1128996864);
+emit_32(1103102686);
+emit_32(1090125824);
+emit_32(1129252848);
+emit_32(1103136555);
+emit_32(1090125824);
+emit_32(1129508897);
+emit_32(1103360688);
+emit_32(1090125824);
+emit_32(1129764880);
+emit_32(1103301339);
+emit_32(1090125824);
+emit_32(1130020864);
+emit_32(1102581596);
+emit_32(1090125824);
+emit_32(1130276848);
+emit_32(1101582723);
+emit_32(1090125824);
+emit_32(1130532897);
+emit_32(1100502427);
+emit_32(1090125824);
+emit_32(1130788880);
+emit_32(1099934623);
+emit_32(1090125824);
+emit_32(1131044864);
+emit_32(1099180854);
+emit_32(1090125824);
+emit_32(1131300848);
+emit_32(1098378012);
+emit_32(1090125824);
+emit_32(1131556897);
+emit_32(1096908852);
+emit_32(1090125824);
+emit_32(1131812880);
+emit_32(1096091278);
+emit_32(1090125824);
+emit_32(1132068864);
+emit_32(1095719453);
+emit_32(1090125824);
+emit_32(1081737216);
+emit_32(1112701298);
+emit_32(1081737216);
+emit_32(1090125824);
+emit_32(1112503694);
+emit_32(1081737216);
+emit_32(1094418484);
+emit_32(1112328084);
+emit_32(1081737216);
+emit_32(1098514432);
+emit_32(1112069951);
+emit_32(1081737216);
+emit_32(1100759066);
+emit_32(1112173655);
+emit_32(1081737216);
+emit_32(1102807040);
+emit_32(1112198559);
+emit_32(1081737216);
+emit_32(1104855066);
+emit_32(1112333694);
+emit_32(1081737216);
+emit_32(1106903040);
+emit_32(1112388744);
+emit_32(1081737216);
+emit_32(1108123661);
+emit_32(1112590726);
+emit_32(1081737216);
+emit_32(1109147648);
+emit_32(1113057735);
+emit_32(1081737216);
+emit_32(1110171661);
+emit_32(1113035296);
+emit_32(1081737216);
+emit_32(1111195648);
+emit_32(1112886896);
+emit_32(1081737216);
+emit_32(1112219661);
+emit_32(1112955971);
+emit_32(1081737216);
+emit_32(1113243648);
+emit_32(1113474440);
+emit_32(1081737216);
+emit_32(1114267661);
+emit_32(1113373252);
+emit_32(1081737216);
+emit_32(1115291648);
+emit_32(1112981923);
+emit_32(1081737216);
+emit_32(1116000263);
+emit_32(1112815462);
+emit_32(1081737216);
+emit_32(1116512256);
+emit_32(1112451711);
+emit_32(1081737216);
+emit_32(1117024263);
+emit_32(1112394144);
+emit_32(1081737216);
+emit_32(1117536256);
+emit_32(1112528414);
+emit_32(1081737216);
+emit_32(1118048263);
+emit_32(1112287950);
+emit_32(1081737216);
+emit_32(1118560256);
+emit_32(1111949653);
+emit_32(1081737216);
+emit_32(1119072263);
+emit_32(1111682685);
+emit_32(1081737216);
+emit_32(1119584256);
+emit_32(1111194678);
+emit_32(1081737216);
+emit_32(1120096263);
+emit_32(1111068639);
+emit_32(1081737216);
+emit_32(1120608322);
+emit_32(1110815303);
+emit_32(1081737216);
+emit_32(1121120289);
+emit_32(1110882674);
+emit_32(1081737216);
+emit_32(1121632256);
+emit_32(1110789010);
+emit_32(1081737216);
+emit_32(1122144223);
+emit_32(1110340062);
+emit_32(1081737216);
+emit_32(1122656322);
+emit_32(1109951539);
+emit_32(1081737216);
+emit_32(1123168289);
+emit_32(1109517848);
+emit_32(1081737216);
+emit_32(1123680256);
+emit_32(1109219108);
+emit_32(1081737216);
+emit_32(1124132848);
+emit_32(1108888571);
+emit_32(1081737216);
+emit_32(1124388897);
+emit_32(1108548203);
+emit_32(1081737216);
+emit_32(1124644880);
+emit_32(1108062057);
+emit_32(1081737216);
+emit_32(1124900864);
+emit_32(1107391755);
+emit_32(1081737216);
+emit_32(1125156848);
+emit_32(1107147201);
+emit_32(1081737216);
+emit_32(1125412897);
+emit_32(1106562515);
+emit_32(1081737216);
+emit_32(1125668880);
+emit_32(1107088323);
+emit_32(1081737216);
+emit_32(1125924864);
+emit_32(1107466728);
+emit_32(1081737216);
+emit_32(1126180848);
+emit_32(1107640477);
+emit_32(1081737216);
+emit_32(1126436897);
+emit_32(1107446858);
+emit_32(1081737216);
+emit_32(1126692880);
+emit_32(1107035003);
+emit_32(1081737216);
+emit_32(1126948864);
+emit_32(1106606398);
+emit_32(1081737216);
+emit_32(1127204848);
+emit_32(1106181305);
+emit_32(1081737216);
+emit_32(1127460897);
+emit_32(1105541831);
+emit_32(1081737216);
+emit_32(1127716880);
+emit_32(1104783501);
+emit_32(1081737216);
+emit_32(1127972864);
+emit_32(1103855197);
+emit_32(1081737216);
+emit_32(1128228848);
+emit_32(1103186310);
+emit_32(1081737216);
+emit_32(1128484897);
+emit_32(1103087482);
+emit_32(1081737216);
+emit_32(1128740880);
+emit_32(1102981471);
+emit_32(1081737216);
+emit_32(1128996864);
+emit_32(1102264716);
+emit_32(1081737216);
+emit_32(1129252848);
+emit_32(1102136581);
+emit_32(1081737216);
+emit_32(1129508897);
+emit_32(1101851735);
+emit_32(1081737216);
+emit_32(1129764880);
+emit_32(1101959109);
+emit_32(1081737216);
+emit_32(1130020864);
+emit_32(1101538001);
+emit_32(1081737216);
+emit_32(1130276848);
+emit_32(1100676386);
+emit_32(1081737216);
+emit_32(1130532897);
+emit_32(1100067740);
+emit_32(1081737216);
+emit_32(1130788880);
+emit_32(1099550582);
+emit_32(1081737216);
+emit_32(1131044864);
+emit_32(1099061684);
+emit_32(1081737216);
+emit_32(1131300848);
+emit_32(1097284243);
+emit_32(1081737216);
+emit_32(1131556897);
+emit_32(1096432799);
+emit_32(1081737216);
+emit_32(1131812880);
+emit_32(1096013998);
+emit_32(1081737216);
+emit_32(1132068864);
+emit_32(1095458043);
+emit_32(1081737216);
+emit_start(Landscape05Vtx)
+emit_32(3279552512);
+emit_32(3212673672);
+emit_32(0);
+emit_32(3279552512);
+emit_32(1041185636);
+emit_32(1081737216);
+emit_32(3279296528);
+emit_32(1059833579);
+emit_32(0);
+emit_32(3279296528);
+emit_32(1071476480);
+emit_32(1081737216);
+emit_32(3279040545);
+emit_32(1072407784);
+emit_32(0);
+emit_32(3279040545);
+emit_32(1076263523);
+emit_32(1081737216);
+emit_32(3278784496);
+emit_32(1080759692);
+emit_32(3022808678);
+emit_32(3278784496);
+emit_32(1082158660);
+emit_32(1081737216);
+emit_32(3278528512);
+emit_32(1084161503);
+emit_32(3026792956);
+emit_32(3278528512);
+emit_32(1084513929);
+emit_32(1081737216);
+emit_32(3278272528);
+emit_32(1087503650);
+emit_32(3029991200);
+emit_32(3278272528);
+emit_32(1087785717);
+emit_32(1081737216);
+emit_32(3278016545);
+emit_32(1090834682);
+emit_32(3032665494);
+emit_32(3278016545);
+emit_32(1090972056);
+emit_32(1081737216);
+emit_32(3277760496);
+emit_32(1092557314);
+emit_32(3035192119);
+emit_32(3277760496);
+emit_32(1092442569);
+emit_32(1081737216);
+emit_32(3277504512);
+emit_32(1094292446);
+emit_32(3037206586);
+emit_32(3277504512);
+emit_32(1094046974);
+emit_32(1081737216);
+emit_32(3277248528);
+emit_32(1097139854);
+emit_32(3039294743);
+emit_32(3277248528);
+emit_32(1097043280);
+emit_32(1081737216);
+emit_32(3276992545);
+emit_32(1099197999);
+emit_32(3041017018);
+emit_32(3276992545);
+emit_32(1098999818);
+emit_32(1081737216);
+emit_32(3276736496);
+emit_32(1100402917);
+emit_32(3042784259);
+emit_32(3276736496);
+emit_32(1100434742);
+emit_32(1081737216);
+emit_32(3276480512);
+emit_32(1101809268);
+emit_32(3044847030);
+emit_32(3276480512);
+emit_32(1101659007);
+emit_32(1081737216);
+emit_32(3276224528);
+emit_32(1102438046);
+emit_32(3045416976);
+emit_32(3276224528);
+emit_32(1102608545);
+emit_32(1081737216);
+emit_32(3275968545);
+emit_32(1103348997);
+emit_32(3046085013);
+emit_32(3275968545);
+emit_32(1103417836);
+emit_32(1081737216);
+emit_32(3275712496);
+emit_32(1104211817);
+emit_32(3046717804);
+emit_32(3275712496);
+emit_32(1104053168);
+emit_32(1081737216);
+emit_32(3275456512);
+emit_32(1104674187);
+emit_32(3047056805);
+emit_32(3275456512);
+emit_32(1104973450);
+emit_32(1081737216);
+emit_32(3275200528);
+emit_32(1105401165);
+emit_32(3047590024);
+emit_32(3275200528);
+emit_32(1105837477);
+emit_32(1081737216);
+emit_32(3274944545);
+emit_32(1105747352);
+emit_32(3047843880);
+emit_32(3274944545);
+emit_32(1106081743);
+emit_32(1081737216);
+emit_32(3274688496);
+emit_32(1106143871);
+emit_32(3048134678);
+emit_32(3274688496);
+emit_32(1106636492);
+emit_32(1081737216);
+emit_32(3274432512);
+emit_32(1106329416);
+emit_32(3048270754);
+emit_32(3274432512);
+emit_32(1107002917);
+emit_32(1081737216);
+emit_32(3274176528);
+emit_32(1107393459);
+emit_32(3049122304);
+emit_32(3274176528);
+emit_32(1107580184);
+emit_32(1081737216);
+emit_32(3273920545);
+emit_32(1108074955);
+emit_32(3050121892);
+emit_32(3273920545);
+emit_32(1107983729);
+emit_32(1081737216);
+emit_32(3273664496);
+emit_32(1108448641);
+emit_32(3050669976);
+emit_32(3273664496);
+emit_32(1108213550);
+emit_32(1081737216);
+emit_32(3273408512);
+emit_32(1108684230);
+emit_32(3051015487);
+emit_32(3273408512);
+emit_32(1108715137);
+emit_32(1081737216);
+emit_32(3273152528);
+emit_32(1108934132);
+emit_32(3051382020);
+emit_32(3273152528);
+emit_32(1108987871);
+emit_32(1081737216);
+emit_32(3272896545);
+emit_32(1108952377);
+emit_32(3051408760);
+emit_32(3272896545);
+emit_32(1109130582);
+emit_32(1081737216);
+emit_32(3272640496);
+emit_32(1108910775);
+emit_32(3051347803);
+emit_32(3272640496);
+emit_32(1109075454);
+emit_32(1081737216);
+emit_32(3272384512);
+emit_32(1108499366);
+emit_32(3050744391);
+emit_32(3272384512);
+emit_32(1108764813);
+emit_32(1081737216);
+emit_32(3272128528);
+emit_32(1108270907);
+emit_32(3050409260);
+emit_32(3272128528);
+emit_32(1108391939);
+emit_32(1081737216);
+emit_32(3271872545);
+emit_32(1107755506);
+emit_32(3049653324);
+emit_32(3271872545);
+emit_32(1108080224);
+emit_32(1081737216);
+emit_32(3271616496);
+emit_32(1107633190);
+emit_32(3049473972);
+emit_32(3271616496);
+emit_32(1107854728);
+emit_32(1081737216);
+emit_32(3271163904);
+emit_32(1107663336);
+emit_32(3049518128);
+emit_32(3271163904);
+emit_32(1107912740);
+emit_32(1081737216);
+emit_32(3270651937);
+emit_32(1107588075);
+emit_32(3049407737);
+emit_32(3270651937);
+emit_32(1107731730);
+emit_32(1081737216);
+emit_32(3270139970);
+emit_32(1107502327);
+emit_32(3049282041);
+emit_32(3270139970);
+emit_32(1107480989);
+emit_32(1081737216);
+emit_32(3269627871);
+emit_32(1107559370);
+emit_32(3049365692);
+emit_32(3269627871);
+emit_32(1107400013);
+emit_32(1081737216);
+emit_32(3269115904);
+emit_32(1107429425);
+emit_32(3049175080);
+emit_32(3269115904);
+emit_32(1106814855);
+emit_32(1081737216);
+emit_32(3268603937);
+emit_32(1107211531);
+emit_32(3048917619);
+emit_32(3268603937);
+emit_32(1106747641);
+emit_32(1081737216);
+emit_32(3268091970);
+emit_32(1106869381);
+emit_32(3048666666);
+emit_32(3268091970);
+emit_32(1106153570);
+emit_32(1081737216);
+emit_32(3267579911);
+emit_32(1106076710);
+emit_32(3048085420);
+emit_32(3267579911);
+emit_32(1105450553);
+emit_32(1081737216);
+emit_32(3267067904);
+emit_32(1105107773);
+emit_32(3047374784);
+emit_32(3267067904);
+emit_32(1105015289);
+emit_32(1081737216);
+emit_32(3266555911);
+emit_32(1104100511);
+emit_32(3046636088);
+emit_32(3266555911);
+emit_32(1103926185);
+emit_32(1081737216);
+emit_32(3266043904);
+emit_32(1102799385);
+emit_32(3045681976);
+emit_32(3266043904);
+emit_32(1103220965);
+emit_32(1081737216);
+emit_32(3265531911);
+emit_32(1102770130);
+emit_32(3045660513);
+emit_32(3265531911);
+emit_32(1102714556);
+emit_32(1081737216);
+emit_32(3265019904);
+emit_32(1102608335);
+emit_32(3045541854);
+emit_32(3265019904);
+emit_32(1102293972);
+emit_32(1081737216);
+emit_32(3264507911);
+emit_32(1103061372);
+emit_32(3045874083);
+emit_32(3264507911);
+emit_32(1102696206);
+emit_32(1081737216);
+emit_32(3263995904);
+emit_32(1102915777);
+emit_32(3045767298);
+emit_32(3263995904);
+emit_32(1102841119);
+emit_32(1081737216);
+emit_32(3263483911);
+emit_32(1102723888);
+emit_32(3045626560);
+emit_32(3263483911);
+emit_32(1102940104);
+emit_32(1081737216);
+emit_32(3262775296);
+emit_32(1103408189);
+emit_32(3046128466);
+emit_32(3262775296);
+emit_32(1103457681);
+emit_32(1081737216);
+emit_32(3261751309);
+emit_32(1103998484);
+emit_32(3046561321);
+emit_32(3261751309);
+emit_32(1103885553);
+emit_32(1081737216);
+emit_32(3260727296);
+emit_32(1104668105);
+emit_32(3047052407);
+emit_32(3260727296);
+emit_32(1104135953);
+emit_32(1081737216);
+emit_32(3259703309);
+emit_32(1105127381);
+emit_32(3047389210);
+emit_32(3259703309);
+emit_32(1104254180);
+emit_32(1081737216);
+emit_32(3258679296);
+emit_32(1105216196);
+emit_32(3047454301);
+emit_32(3258679296);
+emit_32(1104598218);
+emit_32(1081737216);
+emit_32(3257655309);
+emit_32(1105244507);
+emit_32(3047475059);
+emit_32(3257655309);
+emit_32(1105055869);
+emit_32(1081737216);
+emit_32(3256631296);
+emit_32(1106325379);
+emit_32(3048267763);
+emit_32(3256631296);
+emit_32(1105830661);
+emit_32(1081737216);
+emit_32(3255607309);
+emit_32(1107402398);
+emit_32(3049135410);
+emit_32(3255607309);
+emit_32(1107186156);
+emit_32(1081737216);
+emit_32(3254386688);
+emit_32(1107944119);
+emit_32(3049929961);
+emit_32(3254386688);
+emit_32(1107890222);
+emit_32(1081737216);
+emit_32(3252338714);
+emit_32(1108676916);
+emit_32(3051004756);
+emit_32(3252338714);
+emit_32(1108342578);
+emit_32(1081737216);
+emit_32(3250290688);
+emit_32(1109077105);
+emit_32(3051591719);
+emit_32(3250290688);
+emit_32(1108968106);
+emit_32(1081737216);
+emit_32(3248242714);
+emit_32(1109498895);
+emit_32(3052210436);
+emit_32(3248242714);
+emit_32(1109363314);
+emit_32(1081737216);
+emit_32(3245998080);
+emit_32(1110132051);
+emit_32(3053139040);
+emit_32(3245998080);
+emit_32(1110217982);
+emit_32(1081737216);
+emit_32(3241902132);
+emit_32(1110709318);
+emit_32(3053719532);
+emit_32(3241902132);
+emit_32(1110836747);
+emit_32(1081737216);
+emit_32(3237609472);
+emit_32(1111158922);
+emit_32(3054049253);
+emit_32(3237609472);
+emit_32(1111340011);
+emit_32(1081737216);
+emit_32(3229220864);
+emit_32(1111589126);
+emit_32(3054364725);
+emit_32(3229220864);
+emit_32(1111989472);
+emit_32(1081737216);
+emit_32(0);
+emit_32(1111989053);
+emit_32(3054658031);
+emit_32(0);
+emit_32(1112547577);
+emit_32(1081737216);
+emit_32(1081737216);
+emit_32(1112116167);
+emit_32(3054751226);
+emit_32(1081737216);
+emit_32(1112701298);
+emit_32(1081737216);
+emit_32(3279552512);
+emit_32(3209799987);
+emit_32(3229220864);
+emit_32(3279296528);
+emit_32(1059840776);
+emit_32(3229220864);
+emit_32(3279040545);
+emit_32(1077240503);
+emit_32(3229220864);
+emit_32(3278784496);
+emit_32(1082549401);
+emit_32(3229220864);
+emit_32(3278528512);
+emit_32(1085468217);
+emit_32(3229220864);
+emit_32(3278272528);
+emit_32(1088296919);
+emit_32(3229220864);
+emit_32(3278016545);
+emit_32(1090881837);
+emit_32(3229220864);
+emit_32(3277760496);
+emit_32(1092463268);
+emit_32(3229220864);
+emit_32(3277504512);
+emit_32(1093558757);
+emit_32(3229220864);
+emit_32(3277248528);
+emit_32(1096426612);
+emit_32(3229220864);
+emit_32(3276992545);
+emit_32(1099175874);
+emit_32(3229220864);
+emit_32(3276736496);
+emit_32(1099804757);
+emit_32(3229220864);
+emit_32(3276480512);
+emit_32(1101394975);
+emit_32(3229220864);
+emit_32(3276224528);
+emit_32(1102334185);
+emit_32(3229220864);
+emit_32(3275968545);
+emit_32(1103311038);
+emit_32(3229220864);
+emit_32(3275712496);
+emit_32(1104048921);
+emit_32(3229220864);
+emit_32(3275456512);
+emit_32(1104659821);
+emit_32(3229220864);
+emit_32(3275200528);
+emit_32(1105062632);
+emit_32(3229220864);
+emit_32(3274944545);
+emit_32(1105651669);
+emit_32(3229220864);
+emit_32(3274688496);
+emit_32(1106231322);
+emit_32(3229220864);
+emit_32(3274432512);
+emit_32(1107336626);
+emit_32(3229220864);
+emit_32(3274176528);
+emit_32(1107657989);
+emit_32(3229220864);
+emit_32(3273920545);
+emit_32(1108184452);
+emit_32(3229220864);
+emit_32(3273664496);
+emit_32(1108338672);
+emit_32(3229220864);
+emit_32(3273408512);
+emit_32(1108483926);
+emit_32(3229220864);
+emit_32(3273152528);
+emit_32(1108691229);
+emit_32(3229220864);
+emit_32(3272896545);
+emit_32(1108557850);
+emit_32(3229220864);
+emit_32(3272640496);
+emit_32(1108486573);
+emit_32(3229220864);
+emit_32(3272384512);
+emit_32(1108265140);
+emit_32(3229220864);
+emit_32(3272128528);
+emit_32(1108112887);
+emit_32(3229220864);
+emit_32(3271872545);
+emit_32(1107872003);
+emit_32(3229220864);
+emit_32(3271616496);
+emit_32(1107841411);
+emit_32(3229220864);
+emit_32(3271163904);
+emit_32(1107883406);
+emit_32(3229220864);
+emit_32(3270651937);
+emit_32(1107859944);
+emit_32(3229220864);
+emit_32(3270139970);
+emit_32(1107767014);
+emit_32(3229220864);
+emit_32(3269627871);
+emit_32(1107782795);
+emit_32(3229220864);
+emit_32(3269115904);
+emit_32(1107629310);
+emit_32(3229220864);
+emit_32(3268603937);
+emit_32(1107448404);
+emit_32(3229220864);
+emit_32(3268091970);
+emit_32(1107249594);
+emit_32(3229220864);
+emit_32(3267579911);
+emit_32(1106441929);
+emit_32(3229220864);
+emit_32(3267067904);
+emit_32(1105756265);
+emit_32(3229220864);
+emit_32(3266555911);
+emit_32(1104508197);
+emit_32(3229220864);
+emit_32(3266043904);
+emit_32(1103537583);
+emit_32(3229220864);
+emit_32(3265531911);
+emit_32(1103027556);
+emit_32(3229220864);
+emit_32(3265019904);
+emit_32(1102775006);
+emit_32(3229220864);
+emit_32(3264507911);
+emit_32(1103080037);
+emit_32(3229220864);
+emit_32(3263995904);
+emit_32(1103170109);
+emit_32(3229220864);
+emit_32(3263483911);
+emit_32(1103334002);
+emit_32(3229220864);
+emit_32(3262775296);
+emit_32(1103932372);
+emit_32(3229220864);
+emit_32(3261751309);
+emit_32(1104512234);
+emit_32(3229220864);
+emit_32(3260727296);
+emit_32(1105151184);
+emit_32(3229220864);
+emit_32(3259703309);
+emit_32(1105468116);
+emit_32(3229220864);
+emit_32(3258679296);
+emit_32(1105860336);
+emit_32(3229220864);
+emit_32(3257655309);
+emit_32(1105963568);
+emit_32(3229220864);
+emit_32(3256631296);
+emit_32(1106718071);
+emit_32(3229220864);
+emit_32(3255607309);
+emit_32(1107534414);
+emit_32(3229220864);
+emit_32(3254386688);
+emit_32(1108061821);
+emit_32(3229220864);
+emit_32(3252338714);
+emit_32(1108796323);
+emit_32(3229220864);
+emit_32(3250290688);
+emit_32(1109110555);
+emit_32(3229220864);
+emit_32(3248242714);
+emit_32(1109471606);
+emit_32(3229220864);
+emit_32(3245998080);
+emit_32(1109857115);
+emit_32(3229220864);
+emit_32(3241902132);
+emit_32(1110399726);
+emit_32(3229220864);
+emit_32(3237609472);
+emit_32(1110641187);
+emit_32(3229220864);
+emit_32(3229220864);
+emit_32(1111105208);
+emit_32(3229220864);
+emit_32(0);
+emit_32(1111556044);
+emit_32(3229220864);
+emit_32(1081737216);
+emit_32(1111714929);
+emit_32(3229220864);
+emit_32(3279552512);
+emit_32(1054711998);
+emit_32(3237609472);
+emit_32(3279296528);
+emit_32(1073162675);
+emit_32(3237609472);
+emit_32(3279040545);
+emit_32(1079142997);
+emit_32(3237609472);
+emit_32(3278784496);
+emit_32(1083244271);
+emit_32(3237609472);
+emit_32(3278528512);
+emit_32(1085647335);
+emit_32(3237609472);
+emit_32(3278272528);
+emit_32(1089136346);
+emit_32(3237609472);
+emit_32(3278016545);
+emit_32(1091028155);
+emit_32(3237609472);
+emit_32(3277760496);
+emit_32(1092749361);
+emit_32(3237609472);
+emit_32(3277504512);
+emit_32(1094007338);
+emit_32(3237609472);
+emit_32(3277248528);
+emit_32(1096172333);
+emit_32(3237609472);
+emit_32(3276992545);
+emit_32(1098404017);
+emit_32(3237609472);
+emit_32(3276736496);
+emit_32(1099924924);
+emit_32(3237609472);
+emit_32(3276480512);
+emit_32(1101300708);
+emit_32(3237609472);
+emit_32(3276224528);
+emit_32(1102514540);
+emit_32(3237609472);
+emit_32(3275968545);
+emit_32(1102952530);
+emit_32(3237609472);
+emit_32(3275712496);
+emit_32(1104219315);
+emit_32(3237609472);
+emit_32(3275456512);
+emit_32(1105238635);
+emit_32(3237609472);
+emit_32(3275200528);
+emit_32(1105786254);
+emit_32(3237609472);
+emit_32(3274944545);
+emit_32(1106026116);
+emit_32(3237609472);
+emit_32(3274688496);
+emit_32(1106387979);
+emit_32(3237609472);
+emit_32(3274432512);
+emit_32(1107205816);
+emit_32(3237609472);
+emit_32(3274176528);
+emit_32(1107688659);
+emit_32(3237609472);
+emit_32(3273920545);
+emit_32(1107937067);
+emit_32(3237609472);
+emit_32(3273664496);
+emit_32(1108184426);
+emit_32(3237609472);
+emit_32(3273408512);
+emit_32(1108351831);
+emit_32(3237609472);
+emit_32(3273152528);
+emit_32(1108376840);
+emit_32(3237609472);
+emit_32(3272896545);
+emit_32(1108546866);
+emit_32(3237609472);
+emit_32(3272640496);
+emit_32(1108425232);
+emit_32(3237609472);
+emit_32(3272384512);
+emit_32(1108404994);
+emit_32(3237609472);
+emit_32(3272128528);
+emit_32(1108262466);
+emit_32(3237609472);
+emit_32(3271872545);
+emit_32(1107983912);
+emit_32(3237609472);
+emit_32(3271616496);
+emit_32(1107864453);
+emit_32(3237609472);
+emit_32(3271163904);
+emit_32(1107866576);
+emit_32(3237609472);
+emit_32(3270651937);
+emit_32(1107727562);
+emit_32(3237609472);
+emit_32(3270139970);
+emit_32(1107886499);
+emit_32(3237609472);
+emit_32(3269627871);
+emit_32(1107880313);
+emit_32(3237609472);
+emit_32(3269115904);
+emit_32(1107886866);
+emit_32(3237609472);
+emit_32(3268603937);
+emit_32(1107605533);
+emit_32(3237609472);
+emit_32(3268091970);
+emit_32(1107358646);
+emit_32(3237609472);
+emit_32(3267579911);
+emit_32(1106791734);
+emit_32(3237609472);
+emit_32(3267067904);
+emit_32(1106079646);
+emit_32(3237609472);
+emit_32(3266555911);
+emit_32(1104985928);
+emit_32(3237609472);
+emit_32(3266043904);
+emit_32(1104015576);
+emit_32(3237609472);
+emit_32(3265531911);
+emit_32(1103311720);
+emit_32(3237609472);
+emit_32(3265019904);
+emit_32(1103316648);
+emit_32(3237609472);
+emit_32(3264507911);
+emit_32(1103704569);
+emit_32(3237609472);
+emit_32(3263995904);
+emit_32(1103636359);
+emit_32(3237609472);
+emit_32(3263483911);
+emit_32(1103830817);
+emit_32(3237609472);
+emit_32(3262775296);
+emit_32(1104077757);
+emit_32(3237609472);
+emit_32(3261751309);
+emit_32(1104578819);
+emit_32(3237609472);
+emit_32(3260727296);
+emit_32(1105235699);
+emit_32(3237609472);
+emit_32(3259703309);
+emit_32(1105711858);
+emit_32(3237609472);
+emit_32(3258679296);
+emit_32(1105779124);
+emit_32(3237609472);
+emit_32(3257655309);
+emit_32(1106565975);
+emit_32(3237609472);
+emit_32(3256631296);
+emit_32(1107139756);
+emit_32(3237609472);
+emit_32(3255607309);
+emit_32(1107456478);
+emit_32(3237609472);
+emit_32(3254386688);
+emit_32(1107977988);
+emit_32(3237609472);
+emit_32(3252338714);
+emit_32(1108423606);
+emit_32(3237609472);
+emit_32(3250290688);
+emit_32(1108993822);
+emit_32(3237609472);
+emit_32(3248242714);
+emit_32(1109315132);
+emit_32(3237609472);
+emit_32(3245998080);
+emit_32(1109596884);
+emit_32(3237609472);
+emit_32(3241902132);
+emit_32(1110086989);
+emit_32(3237609472);
+emit_32(3237609472);
+emit_32(1110712176);
+emit_32(3237609472);
+emit_32(3229220864);
+emit_32(1111303415);
+emit_32(3237609472);
+emit_32(0);
+emit_32(1111637125);
+emit_32(3237609472);
+emit_32(1081737216);
+emit_32(1111679959);
+emit_32(3237609472);
+emit_32(3279552512);
+emit_32(1058110391);
+emit_32(3241902132);
+emit_32(3279296528);
+emit_32(1072323898);
+emit_32(3241902132);
+emit_32(3279040545);
+emit_32(1079279857);
+emit_32(3241902132);
+emit_32(3278784496);
+emit_32(1082742465);
+emit_32(3241902132);
+emit_32(3278528512);
+emit_32(1086410992);
+emit_32(3241902132);
+emit_32(3278272528);
+emit_32(1088461147);
+emit_32(3241902132);
+emit_32(3278016545);
+emit_32(1091533338);
+emit_32(3241902132);
+emit_32(3277760496);
+emit_32(1093009303);
+emit_32(3241902132);
+emit_32(3277504512);
+emit_32(1094260359);
+emit_32(3241902132);
+emit_32(3277248528);
+emit_32(1096715285);
+emit_32(3241902132);
+emit_32(3276992545);
+emit_32(1098545575);
+emit_32(3241902132);
+emit_32(3276736496);
+emit_32(1100069260);
+emit_32(3241902132);
+emit_32(3276480512);
+emit_32(1101010882);
+emit_32(3241902132);
+emit_32(3276224528);
+emit_32(1101814458);
+emit_32(3241902132);
+emit_32(3275968545);
+emit_32(1102816372);
+emit_32(3241902132);
+emit_32(3275712496);
+emit_32(1104296175);
+emit_32(3241902132);
+emit_32(3275456512);
+emit_32(1105227573);
+emit_32(3241902132);
+emit_32(3275200528);
+emit_32(1105862695);
+emit_32(3241902132);
+emit_32(3274944545);
+emit_32(1106061767);
+emit_32(3241902132);
+emit_32(3274688496);
+emit_32(1106614157);
+emit_32(3241902132);
+emit_32(3274432512);
+emit_32(1106679117);
+emit_32(3241902132);
+emit_32(3274176528);
+emit_32(1107555097);
+emit_32(3241902132);
+emit_32(3273920545);
+emit_32(1107710706);
+emit_32(3241902132);
+emit_32(3273664496);
+emit_32(1107987399);
+emit_32(3241902132);
+emit_32(3273408512);
+emit_32(1108243985);
+emit_32(3241902132);
+emit_32(3273152528);
+emit_32(1108410132);
+emit_32(3241902132);
+emit_32(3272896545);
+emit_32(1108423370);
+emit_32(3241902132);
+emit_32(3272640496);
+emit_32(1108487858);
+emit_32(3241902132);
+emit_32(3272384512);
+emit_32(1108444525);
+emit_32(3241902132);
+emit_32(3272128528);
+emit_32(1108145681);
+emit_32(3241902132);
+emit_32(3271872545);
+emit_32(1107836142);
+emit_32(3241902132);
+emit_32(3271616496);
+emit_32(1107856825);
+emit_32(3241902132);
+emit_32(3271163904);
+emit_32(1107713065);
+emit_32(3241902132);
+emit_32(3270651937);
+emit_32(1107761431);
+emit_32(3241902132);
+emit_32(3270139970);
+emit_32(1107749346);
+emit_32(3241902132);
+emit_32(3269627871);
+emit_32(1107742242);
+emit_32(3241902132);
+emit_32(3269115904);
+emit_32(1107724468);
+emit_32(3241902132);
+emit_32(3268603937);
+emit_32(1107622651);
+emit_32(3241902132);
+emit_32(3268091970);
+emit_32(1107524085);
+emit_32(3241902132);
+emit_32(3267579911);
+emit_32(1106842380);
+emit_32(3241902132);
+emit_32(3267067904);
+emit_32(1106029733);
+emit_32(3241902132);
+emit_32(3266555911);
+emit_32(1104983674);
+emit_32(3241902132);
+emit_32(3266043904);
+emit_32(1104019456);
+emit_32(3241902132);
+emit_32(3265531911);
+emit_32(1103853571);
+emit_32(3241902132);
+emit_32(3265019904);
+emit_32(1103951666);
+emit_32(3241902132);
+emit_32(3264507911);
+emit_32(1103711542);
+emit_32(3241902132);
+emit_32(3263995904);
+emit_32(1103910404);
+emit_32(3241902132);
+emit_32(3263483911);
+emit_32(1103908517);
+emit_32(3241902132);
+emit_32(3262775296);
+emit_32(1104110577);
+emit_32(3241902132);
+emit_32(3261751309);
+emit_32(1104188172);
+emit_32(3241902132);
+emit_32(3260727296);
+emit_32(1104905241);
+emit_32(3241902132);
+emit_32(3259703309);
+emit_32(1105620212);
+emit_32(3241902132);
+emit_32(3258679296);
+emit_32(1106230221);
+emit_32(3241902132);
+emit_32(3257655309);
+emit_32(1107170322);
+emit_32(3241902132);
+emit_32(3256631296);
+emit_32(1107365357);
+emit_32(3241902132);
+emit_32(3255607309);
+emit_32(1107446569);
+emit_32(3241902132);
+emit_32(3254386688);
+emit_32(1107700744);
+emit_32(3241902132);
+emit_32(3252338714);
+emit_32(1108112651);
+emit_32(3241902132);
+emit_32(3250290688);
+emit_32(1108689473);
+emit_32(3241902132);
+emit_32(3248242714);
+emit_32(1109194519);
+emit_32(3241902132);
+emit_32(3245998080);
+emit_32(1109874285);
+emit_32(3241902132);
+emit_32(3241902132);
+emit_32(1110441774);
+emit_32(3241902132);
+emit_32(3237609472);
+emit_32(1111191218);
+emit_32(3241902132);
+emit_32(3229220864);
+emit_32(1111647243);
+emit_32(3241902132);
+emit_32(0);
+emit_32(1111674821);
+emit_32(3241902132);
+emit_32(1081737216);
+emit_32(1111917802);
+emit_32(3241902132);
+emit_32(3279552512);
+emit_32(1069567233);
+emit_32(3245998080);
+emit_32(3279296528);
+emit_32(1071989863);
+emit_32(3245998080);
+emit_32(3279040545);
+emit_32(1075944798);
+emit_32(3245998080);
+emit_32(3278784496);
+emit_32(1082325006);
+emit_32(3245998080);
+emit_32(3278528512);
+emit_32(1086766564);
+emit_32(3245998080);
+emit_32(3278272528);
+emit_32(1089466668);
+emit_32(3245998080);
+emit_32(3278016545);
+emit_32(1091111989);
+emit_32(3245998080);
+emit_32(3277760496);
+emit_32(1092605224);
+emit_32(3245998080);
+emit_32(3277504512);
+emit_32(1095055494);
+emit_32(3245998080);
+emit_32(3277248528);
+emit_32(1097329541);
+emit_32(3245998080);
+emit_32(3276992545);
+emit_32(1098231421);
+emit_32(3245998080);
+emit_32(3276736496);
+emit_32(1099798361);
+emit_32(3245998080);
+emit_32(3276480512);
+emit_32(1100629777);
+emit_32(3245998080);
+emit_32(3276224528);
+emit_32(1101582932);
+emit_32(3245998080);
+emit_32(3275968545);
+emit_32(1102756341);
+emit_32(3245998080);
+emit_32(3275712496);
+emit_32(1103822271);
+emit_32(3245998080);
+emit_32(3275456512);
+emit_32(1104867754);
+emit_32(3245998080);
+emit_32(3275200528);
+emit_32(1105394716);
+emit_32(3245998080);
+emit_32(3274944545);
+emit_32(1106013428);
+emit_32(3245998080);
+emit_32(3274688496);
+emit_32(1106248257);
+emit_32(3245998080);
+emit_32(3274432512);
+emit_32(1106783293);
+emit_32(3245998080);
+emit_32(3274176528);
+emit_32(1107441641);
+emit_32(3245998080);
+emit_32(3273920545);
+emit_32(1107472338);
+emit_32(3245998080);
+emit_32(3273664496);
+emit_32(1107780305);
+emit_32(3245998080);
+emit_32(3273408512);
+emit_32(1108116033);
+emit_32(3245998080);
+emit_32(3273152528);
+emit_32(1108228755);
+emit_32(3245998080);
+emit_32(3272896545);
+emit_32(1108513391);
+emit_32(3245998080);
+emit_32(3272640496);
+emit_32(1108457108);
+emit_32(3245998080);
+emit_32(3272384512);
+emit_32(1108243173);
+emit_32(3245998080);
+emit_32(3272128528);
+emit_32(1108176536);
+emit_32(3245998080);
+emit_32(3271872545);
+emit_32(1107871348);
+emit_32(3245998080);
+emit_32(3271616496);
+emit_32(1107923121);
+emit_32(3245998080);
+emit_32(3271163904);
+emit_32(1107614682);
+emit_32(3245998080);
+emit_32(3270651937);
+emit_32(1107505709);
+emit_32(3245998080);
+emit_32(3270139970);
+emit_32(1107594707);
+emit_32(3245998080);
+emit_32(3269627871);
+emit_32(1107597381);
+emit_32(3245998080);
+emit_32(3269115904);
+emit_32(1107730471);
+emit_32(3245998080);
+emit_32(3268603937);
+emit_32(1107619086);
+emit_32(3245998080);
+emit_32(3268091970);
+emit_32(1107455273);
+emit_32(3245998080);
+emit_32(3267579911);
+emit_32(1106610802);
+emit_32(3245998080);
+emit_32(3267067904);
+emit_32(1105479074);
+emit_32(3245998080);
+emit_32(3266555911);
+emit_32(1105028081);
+emit_32(3245998080);
+emit_32(3266043904);
+emit_32(1104895856);
+emit_32(3245998080);
+emit_32(3265531911);
+emit_32(1104167515);
+emit_32(3245998080);
+emit_32(3265019904);
+emit_32(1104032563);
+emit_32(3245998080);
+emit_32(3264507911);
+emit_32(1104102818);
+emit_32(3245998080);
+emit_32(3263995904);
+emit_32(1103636621);
+emit_32(3245998080);
+emit_32(3263483911);
+emit_32(1104117812);
+emit_32(3245998080);
+emit_32(3262775296);
+emit_32(1104170556);
+emit_32(3245998080);
+emit_32(3261751309);
+emit_32(1104075031);
+emit_32(3245998080);
+emit_32(3260727296);
+emit_32(1104866076);
+emit_32(3245998080);
+emit_32(3259703309);
+emit_32(1105674056);
+emit_32(3245998080);
+emit_32(3258679296);
+emit_32(1106593763);
+emit_32(3245998080);
+emit_32(3257655309);
+emit_32(1107479652);
+emit_32(3245998080);
+emit_32(3256631296);
+emit_32(1107477371);
+emit_32(3245998080);
+emit_32(3255607309);
+emit_32(1107602886);
+emit_32(3245998080);
+emit_32(3254386688);
+emit_32(1108002655);
+emit_32(3245998080);
+emit_32(3252338714);
+emit_32(1108265717);
+emit_32(3245998080);
+emit_32(3250290688);
+emit_32(1108946348);
+emit_32(3245998080);
+emit_32(3248242714);
+emit_32(1109570748);
+emit_32(3245998080);
+emit_32(3245998080);
+emit_32(1110334348);
+emit_32(3245998080);
+emit_32(3241902132);
+emit_32(1111046776);
+emit_32(3245998080);
+emit_32(3237609472);
+emit_32(1111662998);
+emit_32(3245998080);
+emit_32(3229220864);
+emit_32(1111752783);
+emit_32(3245998080);
+emit_32(0);
+emit_32(1112149144);
+emit_32(3245998080);
+emit_32(1081737216);
+emit_32(1112196121);
+emit_32(3245998080);
+emit_32(3279552512);
+emit_32(1069069537);
+emit_32(3248242714);
+emit_32(3279296528);
+emit_32(1070813613);
+emit_32(3248242714);
+emit_32(3279040545);
+emit_32(1077694242);
+emit_32(3248242714);
+emit_32(3278784496);
+emit_32(1083641745);
+emit_32(3248242714);
+emit_32(3278528512);
+emit_32(1087538169);
+emit_32(3248242714);
+emit_32(3278272528);
+emit_32(1089089810);
+emit_32(3248242714);
+emit_32(3278016545);
+emit_32(1090321216);
+emit_32(3248242714);
+emit_32(3277760496);
+emit_32(1092452761);
+emit_32(3248242714);
+emit_32(3277504512);
+emit_32(1094878390);
+emit_32(3248242714);
+emit_32(3277248528);
+emit_32(1096058143);
+emit_32(3248242714);
+emit_32(3276992545);
+emit_32(1098098567);
+emit_32(3248242714);
+emit_32(3276736496);
+emit_32(1099576902);
+emit_32(3248242714);
+emit_32(3276480512);
+emit_32(1100562563);
+emit_32(3248242714);
+emit_32(3276224528);
+emit_32(1101167224);
+emit_32(3248242714);
+emit_32(3275968545);
+emit_32(1102019088);
+emit_32(3248242714);
+emit_32(3275712496);
+emit_32(1103025878);
+emit_32(3248242714);
+emit_32(3275456512);
+emit_32(1104220258);
+emit_32(3248242714);
+emit_32(3275200528);
+emit_32(1104981944);
+emit_32(3248242714);
+emit_32(3274944545);
+emit_32(1105491132);
+emit_32(3248242714);
+emit_32(3274688496);
+emit_32(1105710495);
+emit_32(3248242714);
+emit_32(3274432512);
+emit_32(1106232423);
+emit_32(3248242714);
+emit_32(3274176528);
+emit_32(1106909961);
+emit_32(3248242714);
+emit_32(3273920545);
+emit_32(1107031858);
+emit_32(3248242714);
+emit_32(3273664496);
+emit_32(1107735426);
+emit_32(3248242714);
+emit_32(3273408512);
+emit_32(1108117868);
+emit_32(3248242714);
+emit_32(3273152528);
+emit_32(1108098862);
+emit_32(3248242714);
+emit_32(3272896545);
+emit_32(1108068716);
+emit_32(3248242714);
+emit_32(3272640496);
+emit_32(1108110003);
+emit_32(3248242714);
+emit_32(3272384512);
+emit_32(1108104761);
+emit_32(3248242714);
+emit_32(3272128528);
+emit_32(1108024125);
+emit_32(3248242714);
+emit_32(3271872545);
+emit_32(1107776111);
+emit_32(3248242714);
+emit_32(3271616496);
+emit_32(1107637384);
+emit_32(3248242714);
+emit_32(3271163904);
+emit_32(1107446360);
+emit_32(3248242714);
+emit_32(3270651937);
+emit_32(1107041400);
+emit_32(3248242714);
+emit_32(3270139970);
+emit_32(1107011882);
+emit_32(3248242714);
+emit_32(3269627871);
+emit_32(1107115167);
+emit_32(3248242714);
+emit_32(3269115904);
+emit_32(1107418494);
+emit_32(3248242714);
+emit_32(3268603937);
+emit_32(1107457422);
+emit_32(3248242714);
+emit_32(3268091970);
+emit_32(1106904613);
+emit_32(3248242714);
+emit_32(3267579911);
+emit_32(1106031411);
+emit_32(3248242714);
+emit_32(3267067904);
+emit_32(1105454223);
+emit_32(3248242714);
+emit_32(3266555911);
+emit_32(1105778967);
+emit_32(3248242714);
+emit_32(3266043904);
+emit_32(1105570929);
+emit_32(3248242714);
+emit_32(3265531911);
+emit_32(1104914258);
+emit_32(3248242714);
+emit_32(3265019904);
+emit_32(1104424468);
+emit_32(3248242714);
+emit_32(3264507911);
+emit_32(1104545527);
+emit_32(3248242714);
+emit_32(3263995904);
+emit_32(1104296280);
+emit_32(3248242714);
+emit_32(3263483911);
+emit_32(1103990568);
+emit_32(3248242714);
+emit_32(3262775296);
+emit_32(1104013427);
+emit_32(3248242714);
+emit_32(3261751309);
+emit_32(1104087142);
+emit_32(3248242714);
+emit_32(3260727296);
+emit_32(1104895017);
+emit_32(3248242714);
+emit_32(3259703309);
+emit_32(1105764129);
+emit_32(3248242714);
+emit_32(3258679296);
+emit_32(1106780357);
+emit_32(3248242714);
+emit_32(3257655309);
+emit_32(1107436005);
+emit_32(3248242714);
+emit_32(3256631296);
+emit_32(1107614237);
+emit_32(3248242714);
+emit_32(3255607309);
+emit_32(1107805785);
+emit_32(3248242714);
+emit_32(3254386688);
+emit_32(1108259294);
+emit_32(3248242714);
+emit_32(3252338714);
+emit_32(1108838738);
+emit_32(3248242714);
+emit_32(3250290688);
+emit_32(1109532056);
+emit_32(3248242714);
+emit_32(3248242714);
+emit_32(1110357731);
+emit_32(3248242714);
+emit_32(3245998080);
+emit_32(1111305617);
+emit_32(3248242714);
+emit_32(3241902132);
+emit_32(1111938354);
+emit_32(3248242714);
+emit_32(3237609472);
+emit_32(1112310678);
+emit_32(3248242714);
+emit_32(3229220864);
+emit_32(1112422010);
+emit_32(3248242714);
+emit_32(0);
+emit_32(1112626745);
+emit_32(3248242714);
+emit_32(1081737216);
+emit_32(1112566084);
+emit_32(3248242714);
+emit_32(3279552512);
+emit_32(1065800916);
+emit_32(3250290688);
+emit_32(3279296528);
+emit_32(1067728450);
+emit_32(3250290688);
+emit_32(3279040545);
+emit_32(1079534242);
+emit_32(3250290688);
+emit_32(3278784496);
+emit_32(1083207466);
+emit_32(3250290688);
+emit_32(3278528512);
+emit_32(1085554830);
+emit_32(3250290688);
+emit_32(3278272528);
+emit_32(1087362784);
+emit_32(3250290688);
+emit_32(3278016545);
+emit_32(1089916067);
+emit_32(3250290688);
+emit_32(3277760496);
+emit_32(1091396866);
+emit_32(3250290688);
+emit_32(3277504512);
+emit_32(1093035832);
+emit_32(3250290688);
+emit_32(3277248528);
+emit_32(1094508767);
+emit_32(3250290688);
+emit_32(3276992545);
+emit_32(1096595328);
+emit_32(3250290688);
+emit_32(3276736496);
+emit_32(1099173252);
+emit_32(3250290688);
+emit_32(3276480512);
+emit_32(1100269748);
+emit_32(3250290688);
+emit_32(3276224528);
+emit_32(1101165704);
+emit_32(3250290688);
+emit_32(3275968545);
+emit_32(1101889169);
+emit_32(3250290688);
+emit_32(3275712496);
+emit_32(1102356467);
+emit_32(3250290688);
+emit_32(3275456512);
+emit_32(1103641549);
+emit_32(3250290688);
+emit_32(3275200528);
+emit_32(1104432910);
+emit_32(3250290688);
+emit_32(3274944545);
+emit_32(1104777157);
+emit_32(3250290688);
+emit_32(3274688496);
+emit_32(1105410025);
+emit_32(3250290688);
+emit_32(3274432512);
+emit_32(1105737233);
+emit_32(3250290688);
+emit_32(3274176528);
+emit_32(1106211085);
+emit_32(3250290688);
+emit_32(3273920545);
+emit_32(1107190979);
+emit_32(3250290688);
+emit_32(3273664496);
+emit_32(1107686903);
+emit_32(3250290688);
+emit_32(3273408512);
+emit_32(1107933449);
+emit_32(3250290688);
+emit_32(3273152528);
+emit_32(1107858896);
+emit_32(3250290688);
+emit_32(3272896545);
+emit_32(1107712567);
+emit_32(3250290688);
+emit_32(3272640496);
+emit_32(1107834044);
+emit_32(3250290688);
+emit_32(3272384512);
+emit_32(1107745256);
+emit_32(3250290688);
+emit_32(3272128528);
+emit_32(1107612821);
+emit_32(3250290688);
+emit_32(3271872545);
+emit_32(1107307240);
+emit_32(3250290688);
+emit_32(3271616496);
+emit_32(1106953581);
+emit_32(3250290688);
+emit_32(3271163904);
+emit_32(1106958195);
+emit_32(3250290688);
+emit_32(3270651937);
+emit_32(1106599635);
+emit_32(3250290688);
+emit_32(3270139970);
+emit_32(1106321238);
+emit_32(3250290688);
+emit_32(3269627871);
+emit_32(1106339588);
+emit_32(3250290688);
+emit_32(3269115904);
+emit_32(1106571795);
+emit_32(3250290688);
+emit_32(3268603937);
+emit_32(1106917982);
+emit_32(3250290688);
+emit_32(3268091970);
+emit_32(1106501383);
+emit_32(3250290688);
+emit_32(3267579911);
+emit_32(1105718516);
+emit_32(3250290688);
+emit_32(3267067904);
+emit_32(1105903065);
+emit_32(3250290688);
+emit_32(3266555911);
+emit_32(1106013795);
+emit_32(3250290688);
+emit_32(3266043904);
+emit_32(1105949517);
+emit_32(3250290688);
+emit_32(3265531911);
+emit_32(1105206863);
+emit_32(3250290688);
+emit_32(3265019904);
+emit_32(1104861934);
+emit_32(3250290688);
+emit_32(3264507911);
+emit_32(1104599790);
+emit_32(3250290688);
+emit_32(3263995904);
+emit_32(1103950932);
+emit_32(3250290688);
+emit_32(3263483911);
+emit_32(1104055527);
+emit_32(3250290688);
+emit_32(3262775296);
+emit_32(1103866364);
+emit_32(3250290688);
+emit_32(3261751309);
+emit_32(1104419383);
+emit_32(3250290688);
+emit_32(3260727296);
+emit_32(1104811026);
+emit_32(3250290688);
+emit_32(3259703309);
+emit_32(1105456634);
+emit_32(3250290688);
+emit_32(3258679296);
+emit_32(1106791681);
+emit_32(3250290688);
+emit_32(3257655309);
+emit_32(1107583068);
+emit_32(3250290688);
+emit_32(3256631296);
+emit_32(1107949860);
+emit_32(3250290688);
+emit_32(3255607309);
+emit_32(1108658278);
+emit_32(3250290688);
+emit_32(3254386688);
+emit_32(1109252165);
+emit_32(3250290688);
+emit_32(3252338714);
+emit_32(1109776086);
+emit_32(3250290688);
+emit_32(3250290688);
+emit_32(1110334321);
+emit_32(3250290688);
+emit_32(3248242714);
+emit_32(1111177403);
+emit_32(3250290688);
+emit_32(3245998080);
+emit_32(1111862202);
+emit_32(3250290688);
+emit_32(3241902132);
+emit_32(1112485580);
+emit_32(3250290688);
+emit_32(3237609472);
+emit_32(1112835516);
+emit_32(3250290688);
+emit_32(3229220864);
+emit_32(1112928997);
+emit_32(3250290688);
+emit_32(0);
+emit_32(1112967689);
+emit_32(3250290688);
+emit_32(1081737216);
+emit_32(1113150456);
+emit_32(3250290688);
+emit_32(3279552512);
+emit_32(1065811150);
+emit_32(3252338714);
+emit_32(3279296528);
+emit_32(1074401378);
+emit_32(3252338714);
+emit_32(3279040545);
+emit_32(1078638548);
+emit_32(3252338714);
+emit_32(3278784496);
+emit_32(1082498734);
+emit_32(3252338714);
+emit_32(3278528512);
+emit_32(1084586134);
+emit_32(3252338714);
+emit_32(3278272528);
+emit_32(1087624907);
+emit_32(3252338714);
+emit_32(3278016545);
+emit_32(1088961422);
+emit_32(3252338714);
+emit_32(3277760496);
+emit_32(1091843412);
+emit_32(3252338714);
+emit_32(3277504512);
+emit_32(1093413739);
+emit_32(3252338714);
+emit_32(3277248528);
+emit_32(1094395206);
+emit_32(3252338714);
+emit_32(3276992545);
+emit_32(1095806484);
+emit_32(3252338714);
+emit_32(3276736496);
+emit_32(1097929536);
+emit_32(3252338714);
+emit_32(3276480512);
+emit_32(1099744988);
+emit_32(3252338714);
+emit_32(3276224528);
+emit_32(1100647340);
+emit_32(3252338714);
+emit_32(3275968545);
+emit_32(1101240992);
+emit_32(3252338714);
+emit_32(3275712496);
+emit_32(1101372693);
+emit_32(3252338714);
+emit_32(3275456512);
+emit_32(1102475638);
+emit_32(3252338714);
+emit_32(3275200528);
+emit_32(1103490240);
+emit_32(3252338714);
+emit_32(3274944545);
+emit_32(1104043416);
+emit_32(3252338714);
+emit_32(3274688496);
+emit_32(1105440696);
+emit_32(3252338714);
+emit_32(3274432512);
+emit_32(1105987161);
+emit_32(3252338714);
+emit_32(3274176528);
+emit_32(1106185395);
+emit_32(3252338714);
+emit_32(3273920545);
+emit_32(1107031700);
+emit_32(3252338714);
+emit_32(3273664496);
+emit_32(1107454932);
+emit_32(3252338714);
+emit_32(3273408512);
+emit_32(1107539368);
+emit_32(3252338714);
+emit_32(3273152528);
+emit_32(1107466152);
+emit_32(3252338714);
+emit_32(3272896545);
+emit_32(1107413067);
+emit_32(3252338714);
+emit_32(3272640496);
+emit_32(1107297960);
+emit_32(3252338714);
+emit_32(3272384512);
+emit_32(1107173310);
+emit_32(3252338714);
+emit_32(3272128528);
+emit_32(1107130371);
+emit_32(3252338714);
+emit_32(3271872545);
+emit_32(1106771653);
+emit_32(3252338714);
+emit_32(3271616496);
+emit_32(1106460803);
+emit_32(3252338714);
+emit_32(3271163904);
+emit_32(1106115455);
+emit_32(3252338714);
+emit_32(3270651937);
+emit_32(1105926344);
+emit_32(3252338714);
+emit_32(3270139970);
+emit_32(1105546602);
+emit_32(3252338714);
+emit_32(3269627871);
+emit_32(1105660477);
+emit_32(3252338714);
+emit_32(3269115904);
+emit_32(1105920367);
+emit_32(3252338714);
+emit_32(3268603937);
+emit_32(1106109897);
+emit_32(3252338714);
+emit_32(3268091970);
+emit_32(1105672798);
+emit_32(3252338714);
+emit_32(3267579911);
+emit_32(1105767537);
+emit_32(3252338714);
+emit_32(3267067904);
+emit_32(1105707139);
+emit_32(3252338714);
+emit_32(3266555911);
+emit_32(1105871241);
+emit_32(3252338714);
+emit_32(3266043904);
+emit_32(1105955599);
+emit_32(3252338714);
+emit_32(3265531911);
+emit_32(1105848435);
+emit_32(3252338714);
+emit_32(3265019904);
+emit_32(1105348264);
+emit_32(3252338714);
+emit_32(3264507911);
+emit_32(1104644040);
+emit_32(3252338714);
+emit_32(3263995904);
+emit_32(1104354371);
+emit_32(3252338714);
+emit_32(3263483911);
+emit_32(1104366902);
+emit_32(3252338714);
+emit_32(3262775296);
+emit_32(1104900103);
+emit_32(3252338714);
+emit_32(3261751309);
+emit_32(1105214885);
+emit_32(3252338714);
+emit_32(3260727296);
+emit_32(1105392147);
+emit_32(3252338714);
+emit_32(3259703309);
+emit_32(1106490111);
+emit_32(3252338714);
+emit_32(3258679296);
+emit_32(1107465837);
+emit_32(3252338714);
+emit_32(3257655309);
+emit_32(1108021897);
+emit_32(3252338714);
+emit_32(3256631296);
+emit_32(1108703366);
+emit_32(3252338714);
+emit_32(3255607309);
+emit_32(1109418128);
+emit_32(3252338714);
+emit_32(3254386688);
+emit_32(1110033669);
+emit_32(3252338714);
+emit_32(3252338714);
+emit_32(1110598065);
+emit_32(3252338714);
+emit_32(3250290688);
+emit_32(1111530878);
+emit_32(3252338714);
+emit_32(3248242714);
+emit_32(1112167127);
+emit_32(3252338714);
+emit_32(3245998080);
+emit_32(1112747776);
+emit_32(3252338714);
+emit_32(3241902132);
+emit_32(1113057631);
+emit_32(3252338714);
+emit_32(3237609472);
+emit_32(1113395220);
+emit_32(3252338714);
+emit_32(3229220864);
+emit_32(1113520262);
+emit_32(3252338714);
+emit_32(0);
+emit_32(1113746230);
+emit_32(3252338714);
+emit_32(1081737216);
+emit_32(1113988085);
+emit_32(3252338714);
+emit_32(3279552512);
+emit_32(1073007234);
+emit_32(3254386688);
+emit_32(3279296528);
+emit_32(1071855058);
+emit_32(3254386688);
+emit_32(3279040545);
+emit_32(1077504995);
+emit_32(3254386688);
+emit_32(3278784496);
+emit_32(1083853809);
+emit_32(3254386688);
+emit_32(3278528512);
+emit_32(1085433090);
+emit_32(3254386688);
+emit_32(3278272528);
+emit_32(1086653926);
+emit_32(3254386688);
+emit_32(3278016545);
+emit_32(1089328256);
+emit_32(3254386688);
+emit_32(3277760496);
+emit_32(1091680359);
+emit_32(3254386688);
+emit_32(3277504512);
+emit_32(1093386371);
+emit_32(3254386688);
+emit_32(3277248528);
+emit_32(1094430019);
+emit_32(3254386688);
+emit_32(3276992545);
+emit_32(1095762759);
+emit_32(3254386688);
+emit_32(3276736496);
+emit_32(1097278685);
+emit_32(3254386688);
+emit_32(3276480512);
+emit_32(1099307942);
+emit_32(3254386688);
+emit_32(3276224528);
+emit_32(1100328206);
+emit_32(3254386688);
+emit_32(3275968545);
+emit_32(1100510396);
+emit_32(3254386688);
+emit_32(3275712496);
+emit_32(1100754190);
+emit_32(3254386688);
+emit_32(3275456512);
+emit_32(1101542300);
+emit_32(3254386688);
+emit_32(3275200528);
+emit_32(1102303461);
+emit_32(3254386688);
+emit_32(3274944545);
+emit_32(1103597719);
+emit_32(3254386688);
+emit_32(3274688496);
+emit_32(1104967316);
+emit_32(3254386688);
+emit_32(3274432512);
+emit_32(1105690205);
+emit_32(3254386688);
+emit_32(3274176528);
+emit_32(1106034714);
+emit_32(3254386688);
+emit_32(3273920545);
+emit_32(1106220994);
+emit_32(3254386688);
+emit_32(3273664496);
+emit_32(1106826651);
+emit_32(3254386688);
+emit_32(3273408512);
+emit_32(1107242779);
+emit_32(3254386688);
+emit_32(3273152528);
+emit_32(1107302810);
+emit_32(3254386688);
+emit_32(3272896545);
+emit_32(1107370915);
+emit_32(3254386688);
+emit_32(3272640496);
+emit_32(1107004385);
+emit_32(3254386688);
+emit_32(3272384512);
+emit_32(1106217429);
+emit_32(3254386688);
+emit_32(3272128528);
+emit_32(1106380587);
+emit_32(3254386688);
+emit_32(3271872545);
+emit_32(1106492418);
+emit_32(3254386688);
+emit_32(3271616496);
+emit_32(1106313793);
+emit_32(3254386688);
+emit_32(3271163904);
+emit_32(1105860336);
+emit_32(3254386688);
+emit_32(3270651937);
+emit_32(1104962965);
+emit_32(3254386688);
+emit_32(3270139970);
+emit_32(1104709367);
+emit_32(3254386688);
+emit_32(3269627871);
+emit_32(1104850924);
+emit_32(3254386688);
+emit_32(3269115904);
+emit_32(1105116162);
+emit_32(3254386688);
+emit_32(3268603937);
+emit_32(1105713640);
+emit_32(3254386688);
+emit_32(3268091970);
+emit_32(1105431311);
+emit_32(3254386688);
+emit_32(3267579911);
+emit_32(1105504921);
+emit_32(3254386688);
+emit_32(3267067904);
+emit_32(1105722658);
+emit_32(3254386688);
+emit_32(3266555911);
+emit_32(1106419279);
+emit_32(3254386688);
+emit_32(3266043904);
+emit_32(1106556905);
+emit_32(3254386688);
+emit_32(3265531911);
+emit_32(1106183088);
+emit_32(3254386688);
+emit_32(3265019904);
+emit_32(1105580681);
+emit_32(3254386688);
+emit_32(3264507911);
+emit_32(1105335366);
+emit_32(3254386688);
+emit_32(3263995904);
+emit_32(1104986348);
+emit_32(3254386688);
+emit_32(3263483911);
+emit_32(1105341763);
+emit_32(3254386688);
+emit_32(3262775296);
+emit_32(1105698541);
+emit_32(3254386688);
+emit_32(3261751309);
+emit_32(1105960737);
+emit_32(3254386688);
+emit_32(3260727296);
+emit_32(1106331828);
+emit_32(3254386688);
+emit_32(3259703309);
+emit_32(1107459886);
+emit_32(3254386688);
+emit_32(3258679296);
+emit_32(1108153677);
+emit_32(3254386688);
+emit_32(3257655309);
+emit_32(1108782508);
+emit_32(3254386688);
+emit_32(3256631296);
+emit_32(1109432127);
+emit_32(3254386688);
+emit_32(3255607309);
+emit_32(1110052097);
+emit_32(3254386688);
+emit_32(3254386688);
+emit_32(1110875832);
+emit_32(3254386688);
+emit_32(3252338714);
+emit_32(1111641214);
+emit_32(3254386688);
+emit_32(3250290688);
+emit_32(1112331230);
+emit_32(3254386688);
+emit_32(3248242714);
+emit_32(1112948054);
+emit_32(3254386688);
+emit_32(3245998080);
+emit_32(1113423243);
+emit_32(3254386688);
+emit_32(3241902132);
+emit_32(1113710579);
+emit_32(3254386688);
+emit_32(3237609472);
+emit_32(1113669763);
+emit_32(3254386688);
+emit_32(3229220864);
+emit_32(1114121516);
+emit_32(3254386688);
+emit_32(0);
+emit_32(1114484769);
+emit_32(3254386688);
+emit_32(1081737216);
+emit_32(1114484349);
+emit_32(3254386688);
+emit_32(3279552512);
+emit_32(1072117538);
+emit_32(3255607309);
+emit_32(3279296528);
+emit_32(1066548005);
+emit_32(3255607309);
+emit_32(3279040545);
+emit_32(1074090329);
+emit_32(3255607309);
+emit_32(3278784496);
+emit_32(1080727353);
+emit_32(3255607309);
+emit_32(3278528512);
+emit_32(1083163300);
+emit_32(3255607309);
+emit_32(3278272528);
+emit_32(1085569447);
+emit_32(3255607309);
+emit_32(3278016545);
+emit_32(1089130264);
+emit_32(3255607309);
+emit_32(3277760496);
+emit_32(1091726821);
+emit_32(3255607309);
+emit_32(3277504512);
+emit_32(1092664741);
+emit_32(3255607309);
+emit_32(3277248528);
+emit_32(1094453402);
+emit_32(3255607309);
+emit_32(3276992545);
+emit_32(1095438854);
+emit_32(3255607309);
+emit_32(3276736496);
+emit_32(1096833145);
+emit_32(3255607309);
+emit_32(3276480512);
+emit_32(1097840722);
+emit_32(3255607309);
+emit_32(3276224528);
+emit_32(1099027500);
+emit_32(3255607309);
+emit_32(3275968545);
+emit_32(1099544815);
+emit_32(3255607309);
+emit_32(3275712496);
+emit_32(1099992505);
+emit_32(3255607309);
+emit_32(3275456512);
+emit_32(1100930351);
+emit_32(3255607309);
+emit_32(3275200528);
+emit_32(1102195720);
+emit_32(3255607309);
+emit_32(3274944545);
+emit_32(1103964773);
+emit_32(3255607309);
+emit_32(3274688496);
+emit_32(1105022262);
+emit_32(3255607309);
+emit_32(3274432512);
+emit_32(1105539419);
+emit_32(3255607309);
+emit_32(3274176528);
+emit_32(1106031097);
+emit_32(3255607309);
+emit_32(3273920545);
+emit_32(1106016050);
+emit_32(3255607309);
+emit_32(3273664496);
+emit_32(1106647135);
+emit_32(3255607309);
+emit_32(3273408512);
+emit_32(1106967003);
+emit_32(3255607309);
+emit_32(3273152528);
+emit_32(1107003861);
+emit_32(3255607309);
+emit_32(3272896545);
+emit_32(1107169273);
+emit_32(3255607309);
+emit_32(3272640496);
+emit_32(1106842170);
+emit_32(3255607309);
+emit_32(3272384512);
+emit_32(1105904481);
+emit_32(3255607309);
+emit_32(3272128528);
+emit_32(1105234493);
+emit_32(3255607309);
+emit_32(3271872545);
+emit_32(1105294944);
+emit_32(3255607309);
+emit_32(3271616496);
+emit_32(1105337988);
+emit_32(3255607309);
+emit_32(3271163904);
+emit_32(1104796765);
+emit_32(3255607309);
+emit_32(3270651937);
+emit_32(1104285113);
+emit_32(3255607309);
+emit_32(3270139970);
+emit_32(1103883875);
+emit_32(3255607309);
+emit_32(3269627871);
+emit_32(1103911662);
+emit_32(3255607309);
+emit_32(3269115904);
+emit_32(1104082528);
+emit_32(3255607309);
+emit_32(3268603937);
+emit_32(1105166231);
+emit_32(3255607309);
+emit_32(3268091970);
+emit_32(1105162718);
+emit_32(3255607309);
+emit_32(3267579911);
+emit_32(1105161460);
+emit_32(3255607309);
+emit_32(3267067904);
+emit_32(1105681397);
+emit_32(3255607309);
+emit_32(3266555911);
+emit_32(1106322129);
+emit_32(3255607309);
+emit_32(3266043904);
+emit_32(1106430080);
+emit_32(3255607309);
+emit_32(3265531911);
+emit_32(1106116084);
+emit_32(3255607309);
+emit_32(3265019904);
+emit_32(1105862643);
+emit_32(3255607309);
+emit_32(3264507911);
+emit_32(1105647947);
+emit_32(3255607309);
+emit_32(3263995904);
+emit_32(1105573655);
+emit_32(3255607309);
+emit_32(3263483911);
+emit_32(1105891374);
+emit_32(3255607309);
+emit_32(3262775296);
+emit_32(1106077339);
+emit_32(3255607309);
+emit_32(3261751309);
+emit_32(1106805889);
+emit_32(3255607309);
+emit_32(3260727296);
+emit_32(1107381269);
+emit_32(3255607309);
+emit_32(3259703309);
+emit_32(1107945325);
+emit_32(3255607309);
+emit_32(3258679296);
+emit_32(1108632771);
+emit_32(3255607309);
+emit_32(3257655309);
+emit_32(1109426989);
+emit_32(3255607309);
+emit_32(3256631296);
+emit_32(1110034927);
+emit_32(3255607309);
+emit_32(3255607309);
+emit_32(1110881652);
+emit_32(3255607309);
+emit_32(3254386688);
+emit_32(1111900946);
+emit_32(3255607309);
+emit_32(3252338714);
+emit_32(1112428590);
+emit_32(3255607309);
+emit_32(3250290688);
+emit_32(1112879923);
+emit_32(3255607309);
+emit_32(3248242714);
+emit_32(1113433755);
+emit_32(3255607309);
+emit_32(3245998080);
+emit_32(1113801412);
+emit_32(3255607309);
+emit_32(3241902132);
+emit_32(1113823248);
+emit_32(3255607309);
+emit_32(3237609472);
+emit_32(1114004154);
+emit_32(3255607309);
+emit_32(3229220864);
+emit_32(1114356344);
+emit_32(3255607309);
+emit_32(0);
+emit_32(1114696502);
+emit_32(3255607309);
+emit_32(1081737216);
+emit_32(1114694274);
+emit_32(3255607309);
+emit_32(3279552512);
+emit_32(1076255680);
+emit_32(3256631296);
+emit_32(3279296528);
+emit_32(1069990271);
+emit_32(3256631296);
+emit_32(3279040545);
+emit_32(1068896816);
+emit_32(3256631296);
+emit_32(3278784496);
+emit_32(1077023364);
+emit_32(3256631296);
+emit_32(3278528512);
+emit_32(1081539790);
+emit_32(3256631296);
+emit_32(3278272528);
+emit_32(1084255287);
+emit_32(3256631296);
+emit_32(3278016545);
+emit_32(1087513968);
+emit_32(3256631296);
+emit_32(3277760496);
+emit_32(1090514049);
+emit_32(3256631296);
+emit_32(3277504512);
+emit_32(1092329323);
+emit_32(3256631296);
+emit_32(3277248528);
+emit_32(1094687130);
+emit_32(3256631296);
+emit_32(3276992545);
+emit_32(1095553044);
+emit_32(3256631296);
+emit_32(3276736496);
+emit_32(1096485647);
+emit_32(3256631296);
+emit_32(3276480512);
+emit_32(1097021994);
+emit_32(3256631296);
+emit_32(3276224528);
+emit_32(1097731565);
+emit_32(3256631296);
+emit_32(3275968545);
+emit_32(1099236114);
+emit_32(3256631296);
+emit_32(3275712496);
+emit_32(1099466539);
+emit_32(3256631296);
+emit_32(3275456512);
+emit_32(1100645820);
+emit_32(3256631296);
+emit_32(3275200528);
+emit_32(1102788270);
+emit_32(3256631296);
+emit_32(3274944545);
+emit_32(1104259213);
+emit_32(3256631296);
+emit_32(3274688496);
+emit_32(1105157161);
+emit_32(3256631296);
+emit_32(3274432512);
+emit_32(1105746199);
+emit_32(3256631296);
+emit_32(3274176528);
+emit_32(1105646689);
+emit_32(3256631296);
+emit_32(3273920545);
+emit_32(1106061296);
+emit_32(3256631296);
+emit_32(3273664496);
+emit_32(1106358777);
+emit_32(3256631296);
+emit_32(3273408512);
+emit_32(1106493728);
+emit_32(3256631296);
+emit_32(3273152528);
+emit_32(1106565556);
+emit_32(3256631296);
+emit_32(3272896545);
+emit_32(1106704649);
+emit_32(3256631296);
+emit_32(3272640496);
+emit_32(1106418231);
+emit_32(3256631296);
+emit_32(3272384512);
+emit_32(1105930014);
+emit_32(3256631296);
+emit_32(3272128528);
+emit_32(1105073589);
+emit_32(3256631296);
+emit_32(3271872545);
+emit_32(1104573104);
+emit_32(3256631296);
+emit_32(3271616496);
+emit_32(1104491368);
+emit_32(3256631296);
+emit_32(3271163904);
+emit_32(1103992822);
+emit_32(3256631296);
+emit_32(3270651937);
+emit_32(1103347004);
+emit_32(3256631296);
+emit_32(3270139970);
+emit_32(1103160882);
+emit_32(3256631296);
+emit_32(3269627871);
+emit_32(1103581256);
+emit_32(3256631296);
+emit_32(3269115904);
+emit_32(1103924874);
+emit_32(3256631296);
+emit_32(3268603937);
+emit_32(1103872184);
+emit_32(3256631296);
+emit_32(3268091970);
+emit_32(1104525237);
+emit_32(3256631296);
+emit_32(3267579911);
+emit_32(1104546785);
+emit_32(3256631296);
+emit_32(3267067904);
+emit_32(1105161250);
+emit_32(3256631296);
+emit_32(3266555911);
+emit_32(1105731204);
+emit_32(3256631296);
+emit_32(3266043904);
+emit_32(1105909881);
+emit_32(3256631296);
+emit_32(3265531911);
+emit_32(1106044990);
+emit_32(3256631296);
+emit_32(3265019904);
+emit_32(1105972009);
+emit_32(3256631296);
+emit_32(3264507911);
+emit_32(1105900444);
+emit_32(3256631296);
+emit_32(3263995904);
+emit_32(1106042264);
+emit_32(3256631296);
+emit_32(3263483911);
+emit_32(1105966347);
+emit_32(3256631296);
+emit_32(3262775296);
+emit_32(1106865029);
+emit_32(3256631296);
+emit_32(3261751309);
+emit_32(1107485707);
+emit_32(3256631296);
+emit_32(3260727296);
+emit_32(1107879081);
+emit_32(3256631296);
+emit_32(3259703309);
+emit_32(1108393643);
+emit_32(3256631296);
+emit_32(3258679296);
+emit_32(1109055845);
+emit_32(3256631296);
+emit_32(3257655309);
+emit_32(1109718362);
+emit_32(3256631296);
+emit_32(3256631296);
+emit_32(1110595522);
+emit_32(3256631296);
+emit_32(3255607309);
+emit_32(1111233213);
+emit_32(3256631296);
+emit_32(3254386688);
+emit_32(1112275236);
+emit_32(3256631296);
+emit_32(3252338714);
+emit_32(1112879058);
+emit_32(3256631296);
+emit_32(3250290688);
+emit_32(1113378678);
+emit_32(3256631296);
+emit_32(3248242714);
+emit_32(1113688847);
+emit_32(3256631296);
+emit_32(3245998080);
+emit_32(1114075693);
+emit_32(3256631296);
+emit_32(3241902132);
+emit_32(1114046857);
+emit_32(3256631296);
+emit_32(3237609472);
+emit_32(1114323576);
+emit_32(3256631296);
+emit_32(3229220864);
+emit_32(1114565509);
+emit_32(3256631296);
+emit_32(0);
+emit_32(1114610047);
+emit_32(3256631296);
+emit_32(1081737216);
+emit_32(1114612538);
+emit_32(3256631296);
+emit_32(3279552512);
+emit_32(1076804295);
+emit_32(3257655309);
+emit_32(3279296528);
+emit_32(1073151266);
+emit_32(3257655309);
+emit_32(3279040545);
+emit_32(1073776846);
+emit_32(3257655309);
+emit_32(3278784496);
+emit_32(1078617493);
+emit_32(3257655309);
+emit_32(3278528512);
+emit_32(1079412439);
+emit_32(3257655309);
+emit_32(3278272528);
+emit_32(1083194359);
+emit_32(3257655309);
+emit_32(3278016545);
+emit_32(1086932302);
+emit_32(3257655309);
+emit_32(3277760496);
+emit_32(1090303516);
+emit_32(3257655309);
+emit_32(3277504512);
+emit_32(1091865904);
+emit_32(3257655309);
+emit_32(3277248528);
+emit_32(1094115865);
+emit_32(3257655309);
+emit_32(3276992545);
+emit_32(1095463705);
+emit_32(3257655309);
+emit_32(3276736496);
+emit_32(1096420531);
+emit_32(3257655309);
+emit_32(3276480512);
+emit_32(1097432511);
+emit_32(3257655309);
+emit_32(3276224528);
+emit_32(1097662883);
+emit_32(3257655309);
+emit_32(3275968545);
+emit_32(1098694263);
+emit_32(3257655309);
+emit_32(3275712496);
+emit_32(1099094871);
+emit_32(3257655309);
+emit_32(3275456512);
+emit_32(1101139542);
+emit_32(3257655309);
+emit_32(3275200528);
+emit_32(1102734583);
+emit_32(3257655309);
+emit_32(3274944545);
+emit_32(1103866521);
+emit_32(3257655309);
+emit_32(3274688496);
+emit_32(1104826178);
+emit_32(3257655309);
+emit_32(3274432512);
+emit_32(1105191869);
+emit_32(3257655309);
+emit_32(3274176528);
+emit_32(1105342759);
+emit_32(3257655309);
+emit_32(3273920545);
+emit_32(1105684804);
+emit_32(3257655309);
+emit_32(3273664496);
+emit_32(1105820647);
+emit_32(3257655309);
+emit_32(3273408512);
+emit_32(1106189903);
+emit_32(3257655309);
+emit_32(3273152528);
+emit_32(1105981447);
+emit_32(3257655309);
+emit_32(3272896545);
+emit_32(1105858134);
+emit_32(3257655309);
+emit_32(3272640496);
+emit_32(1105678146);
+emit_32(3257655309);
+emit_32(3272384512);
+emit_32(1104998826);
+emit_32(3257655309);
+emit_32(3272128528);
+emit_32(1104598218);
+emit_32(3257655309);
+emit_32(3271872545);
+emit_32(1104297643);
+emit_32(3257655309);
+emit_32(3271616496);
+emit_32(1103698487);
+emit_32(3257655309);
+emit_32(3271163904);
+emit_32(1103368290);
+emit_32(3257655309);
+emit_32(3270651937);
+emit_32(1103021107);
+emit_32(3257655309);
+emit_32(3270139970);
+emit_32(1102840332);
+emit_32(3257655309);
+emit_32(3269627871);
+emit_32(1103133042);
+emit_32(3257655309);
+emit_32(3269115904);
+emit_32(1103173570);
+emit_32(3257655309);
+emit_32(3268603937);
+emit_32(1103141274);
+emit_32(3257655309);
+emit_32(3268091970);
+emit_32(1103365407);
+emit_32(3257655309);
+emit_32(3267579911);
+emit_32(1103545342);
+emit_32(3257655309);
+emit_32(3267067904);
+emit_32(1104414140);
+emit_32(3257655309);
+emit_32(3266555911);
+emit_32(1104666532);
+emit_32(3257655309);
+emit_32(3266043904);
+emit_32(1105496480);
+emit_32(3257655309);
+emit_32(3265531911);
+emit_32(1105715423);
+emit_32(3257655309);
+emit_32(3265019904);
+emit_32(1105801196);
+emit_32(3257655309);
+emit_32(3264507911);
+emit_32(1105657070);
+emit_32(3257655309);
+emit_32(3263995904);
+emit_32(1106199708);
+emit_32(3257655309);
+emit_32(3263483911);
+emit_32(1107111182);
+emit_32(3257655309);
+emit_32(3262775296);
+emit_32(1107520468);
+emit_32(3257655309);
+emit_32(3261751309);
+emit_32(1107938194);
+emit_32(3257655309);
+emit_32(3260727296);
+emit_32(1108285168);
+emit_32(3257655309);
+emit_32(3259703309);
+emit_32(1109004937);
+emit_32(3257655309);
+emit_32(3258679296);
+emit_32(1109555675);
+emit_32(3257655309);
+emit_32(3257655309);
+emit_32(1110079124);
+emit_32(3257655309);
+emit_32(3256631296);
+emit_32(1110954659);
+emit_32(3257655309);
+emit_32(3255607309);
+emit_32(1111702136);
+emit_32(3257655309);
+emit_32(3254386688);
+emit_32(1112419205);
+emit_32(3257655309);
+emit_32(3252338714);
+emit_32(1113101723);
+emit_32(3257655309);
+emit_32(3250290688);
+emit_32(1113769509);
+emit_32(3257655309);
+emit_32(3248242714);
+emit_32(1113942393);
+emit_32(3257655309);
+emit_32(3245998080);
+emit_32(1114187760);
+emit_32(3257655309);
+emit_32(3241902132);
+emit_32(1114233451);
+emit_32(3257655309);
+emit_32(3237609472);
+emit_32(1114375009);
+emit_32(3257655309);
+emit_32(3229220864);
+emit_32(1114534052);
+emit_32(3257655309);
+emit_32(0);
+emit_32(1114534445);
+emit_32(3257655309);
+emit_32(1081737216);
+emit_32(1114510642);
+emit_32(3257655309);
+emit_32(3279552512);
+emit_32(1073972469);
+emit_32(3258679296);
+emit_32(3279296528);
+emit_32(1069063330);
+emit_32(3258679296);
+emit_32(3279040545);
+emit_32(1073401750);
+emit_32(3258679296);
+emit_32(3278784496);
+emit_32(1075865903);
+emit_32(3258679296);
+emit_32(3278528512);
+emit_32(1078931520);
+emit_32(3258679296);
+emit_32(3278272528);
+emit_32(1083096191);
+emit_32(3258679296);
+emit_32(3278016545);
+emit_32(1086698344);
+emit_32(3258679296);
+emit_32(3277760496);
+emit_32(1089640354);
+emit_32(3258679296);
+emit_32(3277504512);
+emit_32(1091993652);
+emit_32(3258679296);
+emit_32(3277248528);
+emit_32(1094077907);
+emit_32(3258679296);
+emit_32(3276992545);
+emit_32(1095184469);
+emit_32(3258679296);
+emit_32(3276736496);
+emit_32(1095896243);
+emit_32(3258679296);
+emit_32(3276480512);
+emit_32(1096633916);
+emit_32(3258679296);
+emit_32(3276224528);
+emit_32(1096975542);
+emit_32(3258679296);
+emit_32(3275968545);
+emit_32(1097889376);
+emit_32(3258679296);
+emit_32(3275712496);
+emit_32(1099541774);
+emit_32(3258679296);
+emit_32(3275456512);
+emit_32(1101179178);
+emit_32(3258679296);
+emit_32(3275200528);
+emit_32(1102317932);
+emit_32(3258679296);
+emit_32(3274944545);
+emit_32(1103521278);
+emit_32(3258679296);
+emit_32(3274688496);
+emit_32(1104345983);
+emit_32(3258679296);
+emit_32(3274432512);
+emit_32(1104852759);
+emit_32(3258679296);
+emit_32(3274176528);
+emit_32(1104831526);
+emit_32(3258679296);
+emit_32(3273920545);
+emit_32(1104946974);
+emit_32(3258679296);
+emit_32(3273664496);
+emit_32(1105281994);
+emit_32(3258679296);
+emit_32(3273408512);
+emit_32(1105386275);
+emit_32(3258679296);
+emit_32(3273152528);
+emit_32(1104804053);
+emit_32(3258679296);
+emit_32(3272896545);
+emit_32(1105020374);
+emit_32(3258679296);
+emit_32(3272640496);
+emit_32(1104527806);
+emit_32(3258679296);
+emit_32(3272384512);
+emit_32(1103824211);
+emit_32(3258679296);
+emit_32(3272128528);
+emit_32(1103687791);
+emit_32(3258679296);
+emit_32(3271872545);
+emit_32(1103464392);
+emit_32(3258679296);
+emit_32(3271616496);
+emit_32(1103011774);
+emit_32(3258679296);
+emit_32(3271163904);
+emit_32(1102466777);
+emit_32(3258679296);
+emit_32(3270651937);
+emit_32(1102908804);
+emit_32(3258679296);
+emit_32(3270139970);
+emit_32(1102728659);
+emit_32(3258679296);
+emit_32(3269627871);
+emit_32(1102517318);
+emit_32(3258679296);
+emit_32(3269115904);
+emit_32(1102387190);
+emit_32(3258679296);
+emit_32(3268603937);
+emit_32(1102173019);
+emit_32(3258679296);
+emit_32(3268091970);
+emit_32(1102448637);
+emit_32(3258679296);
+emit_32(3267579911);
+emit_32(1102804104);
+emit_32(3258679296);
+emit_32(3267067904);
+emit_32(1103652140);
+emit_32(3258679296);
+emit_32(3266555911);
+emit_32(1104033035);
+emit_32(3258679296);
+emit_32(3266043904);
+emit_32(1104794721);
+emit_32(3258679296);
+emit_32(3265531911);
+emit_32(1105280578);
+emit_32(3258679296);
+emit_32(3265019904);
+emit_32(1105555305);
+emit_32(3258679296);
+emit_32(3264507911);
+emit_32(1106497398);
+emit_32(3258679296);
+emit_32(3263995904);
+emit_32(1107356549);
+emit_32(3258679296);
+emit_32(3263483911);
+emit_32(1107738440);
+emit_32(3258679296);
+emit_32(3262775296);
+emit_32(1108026091);
+emit_32(3258679296);
+emit_32(3261751309);
+emit_32(1108412596);
+emit_32(3258679296);
+emit_32(3260727296);
+emit_32(1108935547);
+emit_32(3258679296);
+emit_32(3259703309);
+emit_32(1109269178);
+emit_32(3258679296);
+emit_32(3258679296);
+emit_32(1109856774);
+emit_32(3258679296);
+emit_32(3257655309);
+emit_32(1110673955);
+emit_32(3258679296);
+emit_32(3256631296);
+emit_32(1111396031);
+emit_32(3258679296);
+emit_32(3255607309);
+emit_32(1111904302);
+emit_32(3258679296);
+emit_32(3254386688);
+emit_32(1112640612);
+emit_32(3258679296);
+emit_32(3252338714);
+emit_32(1113308083);
+emit_32(3258679296);
+emit_32(3250290688);
+emit_32(1113763480);
+emit_32(3258679296);
+emit_32(3248242714);
+emit_32(1113823117);
+emit_32(3258679296);
+emit_32(3245998080);
+emit_32(1114289734);
+emit_32(3258679296);
+emit_32(3241902132);
+emit_32(1114547028);
+emit_32(3258679296);
+emit_32(3237609472);
+emit_32(1114378417);
+emit_32(3258679296);
+emit_32(3229220864);
+emit_32(1114468175);
+emit_32(3258679296);
+emit_32(0);
+emit_32(1114253689);
+emit_32(3258679296);
+emit_32(1081737216);
+emit_32(1114350184);
+emit_32(3258679296);
+emit_32(3279552512);
+emit_32(1076163699);
+emit_32(3259703309);
+emit_32(3279296528);
+emit_32(1074005017);
+emit_32(3259703309);
+emit_32(3279040545);
+emit_32(1074851343);
+emit_32(3259703309);
+emit_32(3278784496);
+emit_32(1075567479);
+emit_32(3259703309);
+emit_32(3278528512);
+emit_32(1076420223);
+emit_32(3259703309);
+emit_32(3278272528);
+emit_32(1083073395);
+emit_32(3259703309);
+emit_32(3278016545);
+emit_32(1087377339);
+emit_32(3259703309);
+emit_32(3277760496);
+emit_32(1090634446);
+emit_32(3259703309);
+emit_32(3277504512);
+emit_32(1092723461);
+emit_32(3259703309);
+emit_32(3277248528);
+emit_32(1094053580);
+emit_32(3259703309);
+emit_32(3276992545);
+emit_32(1095488766);
+emit_32(3259703309);
+emit_32(3276736496);
+emit_32(1096447794);
+emit_32(3259703309);
+emit_32(3276480512);
+emit_32(1096424305);
+emit_32(3259703309);
+emit_32(3276224528);
+emit_32(1096267648);
+emit_32(3259703309);
+emit_32(3275968545);
+emit_32(1098177000);
+emit_32(3259703309);
+emit_32(3275712496);
+emit_32(1099698536);
+emit_32(3259703309);
+emit_32(3275456512);
+emit_32(1100780981);
+emit_32(3259703309);
+emit_32(3275200528);
+emit_32(1102100247);
+emit_32(3259703309);
+emit_32(3274944545);
+emit_32(1103045696);
+emit_32(3259703309);
+emit_32(3274688496);
+emit_32(1103591375);
+emit_32(3259703309);
+emit_32(3274432512);
+emit_32(1104209510);
+emit_32(3259703309);
+emit_32(3274176528);
+emit_32(1104099882);
+emit_32(3259703309);
+emit_32(3273920545);
+emit_32(1104651171);
+emit_32(3259703309);
+emit_32(3273664496);
+emit_32(1104566760);
+emit_32(3259703309);
+emit_32(3273408512);
+emit_32(1104331250);
+emit_32(3259703309);
+emit_32(3273152528);
+emit_32(1103945269);
+emit_32(3259703309);
+emit_32(3272896545);
+emit_32(1103774247);
+emit_32(3259703309);
+emit_32(3272640496);
+emit_32(1103880729);
+emit_32(3259703309);
+emit_32(3272384512);
+emit_32(1103052669);
+emit_32(3259703309);
+emit_32(3272128528);
+emit_32(1102949594);
+emit_32(3259703309);
+emit_32(3271872545);
+emit_32(1102556640);
+emit_32(3259703309);
+emit_32(3271616496);
+emit_32(1102215329);
+emit_32(3259703309);
+emit_32(3271163904);
+emit_32(1102211711);
+emit_32(3259703309);
+emit_32(3270651937);
+emit_32(1102750102);
+emit_32(3259703309);
+emit_32(3270139970);
+emit_32(1102672246);
+emit_32(3259703309);
+emit_32(3269627871);
+emit_32(1102404282);
+emit_32(3259703309);
+emit_32(3269115904);
+emit_32(1101664721);
+emit_32(3259703309);
+emit_32(3268603937);
+emit_32(1101247965);
+emit_32(3259703309);
+emit_32(3268091970);
+emit_32(1101781742);
+emit_32(3259703309);
+emit_32(3267579911);
+emit_32(1102060559);
+emit_32(3259703309);
+emit_32(3267067904);
+emit_32(1102827382);
+emit_32(3259703309);
+emit_32(3266555911);
+emit_32(1103737651);
+emit_32(3259703309);
+emit_32(3266043904);
+emit_32(1104384360);
+emit_32(3259703309);
+emit_32(3265531911);
+emit_32(1104969151);
+emit_32(3259703309);
+emit_32(3265019904);
+emit_32(1106019143);
+emit_32(3259703309);
+emit_32(3264507911);
+emit_32(1106853337);
+emit_32(3259703309);
+emit_32(3263995904);
+emit_32(1107698306);
+emit_32(3259703309);
+emit_32(3263483911);
+emit_32(1108253868);
+emit_32(3259703309);
+emit_32(3262775296);
+emit_32(1108408245);
+emit_32(3259703309);
+emit_32(3261751309);
+emit_32(1108719619);
+emit_32(3259703309);
+emit_32(3260727296);
+emit_32(1109327662);
+emit_32(3259703309);
+emit_32(3259703309);
+emit_32(1109785051);
+emit_32(3259703309);
+emit_32(3258679296);
+emit_32(1110584826);
+emit_32(3259703309);
+emit_32(3257655309);
+emit_32(1111298907);
+emit_32(3259703309);
+emit_32(3256631296);
+emit_32(1111928472);
+emit_32(3259703309);
+emit_32(3255607309);
+emit_32(1112511401);
+emit_32(3259703309);
+emit_32(3254386688);
+emit_32(1113049871);
+emit_32(3259703309);
+emit_32(3252338714);
+emit_32(1113389636);
+emit_32(3259703309);
+emit_32(3250290688);
+emit_32(1113731419);
+emit_32(3259703309);
+emit_32(3248242714);
+emit_32(1114257359);
+emit_32(3259703309);
+emit_32(3245998080);
+emit_32(1114519870);
+emit_32(3259703309);
+emit_32(3241902132);
+emit_32(1114340039);
+emit_32(3259703309);
+emit_32(3237609472);
+emit_32(1114383922);
+emit_32(3259703309);
+emit_32(3229220864);
+emit_32(1114528390);
+emit_32(3259703309);
+emit_32(0);
+emit_32(1114544302);
+emit_32(3259703309);
+emit_32(1081737216);
+emit_32(1114597202);
+emit_32(3259703309);
+emit_32(3279552512);
+emit_32(1073915300);
+emit_32(3260727296);
+emit_32(3279296528);
+emit_32(1076045336);
+emit_32(3260727296);
+emit_32(3279040545);
+emit_32(1076717767);
+emit_32(3260727296);
+emit_32(3278784496);
+emit_32(1077967921);
+emit_32(3260727296);
+emit_32(3278528512);
+emit_32(1080230706);
+emit_32(3260727296);
+emit_32(3278272528);
+emit_32(1084434174);
+emit_32(3260727296);
+emit_32(3278016545);
+emit_32(1088619209);
+emit_32(3260727296);
+emit_32(3277760496);
+emit_32(1090948694);
+emit_32(3260727296);
+emit_32(3277504512);
+emit_32(1092674388);
+emit_32(3260727296);
+emit_32(3277248528);
+emit_32(1094185071);
+emit_32(3260727296);
+emit_32(3276992545);
+emit_32(1094902717);
+emit_32(3260727296);
+emit_32(3276736496);
+emit_32(1095470101);
+emit_32(3260727296);
+emit_32(3276480512);
+emit_32(1095440531);
+emit_32(3260727296);
+emit_32(3276224528);
+emit_32(1096837654);
+emit_32(3260727296);
+emit_32(3275968545);
+emit_32(1098967784);
+emit_32(3260727296);
+emit_32(3275712496);
+emit_32(1100160067);
+emit_32(3260727296);
+emit_32(3275456512);
+emit_32(1100666582);
+emit_32(3260727296);
+emit_32(3275200528);
+emit_32(1101873178);
+emit_32(3260727296);
+emit_32(3274944545);
+emit_32(1102572736);
+emit_32(3260727296);
+emit_32(3274688496);
+emit_32(1102982834);
+emit_32(3260727296);
+emit_32(3274432512);
+emit_32(1103746092);
+emit_32(3260727296);
+emit_32(3274176528);
+emit_32(1104190584);
+emit_32(3260727296);
+emit_32(3273920545);
+emit_32(1104541647);
+emit_32(3260727296);
+emit_32(3273664496);
+emit_32(1104309335);
+emit_32(3260727296);
+emit_32(3273408512);
+emit_32(1103949831);
+emit_32(3260727296);
+emit_32(3273152528);
+emit_32(1103383495);
+emit_32(3260727296);
+emit_32(3272896545);
+emit_32(1103021107);
+emit_32(3260727296);
+emit_32(3272640496);
+emit_32(1102773014);
+emit_32(3260727296);
+emit_32(3272384512);
+emit_32(1102509192);
+emit_32(3260727296);
+emit_32(3272128528);
+emit_32(1102328470);
+emit_32(3260727296);
+emit_32(3271872545);
+emit_32(1101757678);
+emit_32(3260727296);
+emit_32(3271616496);
+emit_32(1101776133);
+emit_32(3260727296);
+emit_32(3271163904);
+emit_32(1102138363);
+emit_32(3260727296);
+emit_32(3270651937);
+emit_32(1102294496);
+emit_32(3260727296);
+emit_32(3270139970);
+emit_32(1101746563);
+emit_32(3260727296);
+emit_32(3269627871);
+emit_32(1101436656);
+emit_32(3260727296);
+emit_32(3269115904);
+emit_32(1100808559);
+emit_32(3260727296);
+emit_32(3268603937);
+emit_32(1101081451);
+emit_32(3260727296);
+emit_32(3268091970);
+emit_32(1101838156);
+emit_32(3260727296);
+emit_32(3267579911);
+emit_32(1102177947);
+emit_32(3260727296);
+emit_32(3267067904);
+emit_32(1102933656);
+emit_32(3260727296);
+emit_32(3266555911);
+emit_32(1103594940);
+emit_32(3260727296);
+emit_32(3266043904);
+emit_32(1104370991);
+emit_32(3260727296);
+emit_32(3265531911);
+emit_32(1105153229);
+emit_32(3260727296);
+emit_32(3265019904);
+emit_32(1106283803);
+emit_32(3260727296);
+emit_32(3264507911);
+emit_32(1107489928);
+emit_32(3260727296);
+emit_32(3263995904);
+emit_32(1107912347);
+emit_32(3260727296);
+emit_32(3263483911);
+emit_32(1108259976);
+emit_32(3260727296);
+emit_32(3262775296);
+emit_32(1108728218);
+emit_32(3260727296);
+emit_32(3261751309);
+emit_32(1108959507);
+emit_32(3260727296);
+emit_32(3260727296);
+emit_32(1109551402);
+emit_32(3260727296);
+emit_32(3259703309);
+emit_32(1110560788);
+emit_32(3260727296);
+emit_32(3258679296);
+emit_32(1111390473);
+emit_32(3260727296);
+emit_32(3257655309);
+emit_32(1111954109);
+emit_32(3260727296);
+emit_32(3256631296);
+emit_32(1112588288);
+emit_32(3260727296);
+emit_32(3255607309);
+emit_32(1113193211);
+emit_32(3260727296);
+emit_32(3254386688);
+emit_32(1113572953);
+emit_32(3260727296);
+emit_32(3252338714);
+emit_32(1113885324);
+emit_32(3260727296);
+emit_32(3250290688);
+emit_32(1114116194);
+emit_32(3260727296);
+emit_32(3248242714);
+emit_32(1114531771);
+emit_32(3260727296);
+emit_32(3245998080);
+emit_32(1114632933);
+emit_32(3260727296);
+emit_32(3241902132);
+emit_32(1114591697);
+emit_32(3260727296);
+emit_32(3237609472);
+emit_32(1114663420);
+emit_32(3260727296);
+emit_32(3229220864);
+emit_32(1114860631);
+emit_32(3260727296);
+emit_32(0);
+emit_32(1114783587);
+emit_32(3260727296);
+emit_32(1081737216);
+emit_32(1114739258);
+emit_32(3260727296);
+emit_32(3279552512);
+emit_32(1082154906);
+emit_32(3261751309);
+emit_32(3279296528);
+emit_32(1078227213);
+emit_32(3261751309);
+emit_32(3279040545);
+emit_32(1079515745);
+emit_32(3261751309);
+emit_32(3278784496);
+emit_32(1080953133);
+emit_32(3261751309);
+emit_32(3278528512);
+emit_32(1082315317);
+emit_32(3261751309);
+emit_32(3278272528);
+emit_32(1085410084);
+emit_32(3261751309);
+emit_32(3278016545);
+emit_32(1089116884);
+emit_32(3261751309);
+emit_32(3277760496);
+emit_32(1091162058);
+emit_32(3261751309);
+emit_32(3277504512);
+emit_32(1092383922);
+emit_32(3261751309);
+emit_32(3277248528);
+emit_32(1094686500);
+emit_32(3261751309);
+emit_32(3276992545);
+emit_32(1095695440);
+emit_32(3261751309);
+emit_32(3276736496);
+emit_32(1096304558);
+emit_32(3261751309);
+emit_32(3276480512);
+emit_32(1096755970);
+emit_32(3261751309);
+emit_32(3276224528);
+emit_32(1097235484);
+emit_32(3261751309);
+emit_32(3275968545);
+emit_32(1098986081);
+emit_32(3261751309);
+emit_32(3275712496);
+emit_32(1099885602);
+emit_32(3261751309);
+emit_32(3275456512);
+emit_32(1100472805);
+emit_32(3261751309);
+emit_32(3275200528);
+emit_32(1101685588);
+emit_32(3261751309);
+emit_32(3274944545);
+emit_32(1102836243);
+emit_32(3261751309);
+emit_32(3274688496);
+emit_32(1103812048);
+emit_32(3261751309);
+emit_32(3274432512);
+emit_32(1104207518);
+emit_32(3261751309);
+emit_32(3274176528);
+emit_32(1104457970);
+emit_32(3261751309);
+emit_32(3273920545);
+emit_32(1104083891);
+emit_32(3261751309);
+emit_32(3273664496);
+emit_32(1103629805);
+emit_32(3261751309);
+emit_32(3273408512);
+emit_32(1103776553);
+emit_32(3261751309);
+emit_32(3273152528);
+emit_32(1103074794);
+emit_32(3261751309);
+emit_32(3272896545);
+emit_32(1102698250);
+emit_32(3261751309);
+emit_32(3272640496);
+emit_32(1102376914);
+emit_32(3261751309);
+emit_32(3272384512);
+emit_32(1101790760);
+emit_32(3261751309);
+emit_32(3272128528);
+emit_32(1101572184);
+emit_32(3261751309);
+emit_32(3271872545);
+emit_32(1101531028);
+emit_32(3261751309);
+emit_32(3271616496);
+emit_32(1101967498);
+emit_32(3261751309);
+emit_32(3271163904);
+emit_32(1101842874);
+emit_32(3261751309);
+emit_32(3270651937);
+emit_32(1101503398);
+emit_32(3261751309);
+emit_32(3270139970);
+emit_32(1101637406);
+emit_32(3261751309);
+emit_32(3269627871);
+emit_32(1100872627);
+emit_32(3261751309);
+emit_32(3269115904);
+emit_32(1100259629);
+emit_32(3261751309);
+emit_32(3268603937);
+emit_32(1101213676);
+emit_32(3261751309);
+emit_32(3268091970);
+emit_32(1102188118);
+emit_32(3261751309);
+emit_32(3267579911);
+emit_32(1102756499);
+emit_32(3261751309);
+emit_32(3267067904);
+emit_32(1103291744);
+emit_32(3261751309);
+emit_32(3266555911);
+emit_32(1104021763);
+emit_32(3261751309);
+emit_32(3266043904);
+emit_32(1105069185);
+emit_32(3261751309);
+emit_32(3265531911);
+emit_32(1105681659);
+emit_32(3261751309);
+emit_32(3265019904);
+emit_32(1106673612);
+emit_32(3261751309);
+emit_32(3264507911);
+emit_32(1107534728);
+emit_32(3261751309);
+emit_32(3263995904);
+emit_32(1108049579);
+emit_32(3261751309);
+emit_32(3263483911);
+emit_32(1108358411);
+emit_32(3261751309);
+emit_32(3262775296);
+emit_32(1109001765);
+emit_32(3261751309);
+emit_32(3261751309);
+emit_32(1109732911);
+emit_32(3261751309);
+emit_32(3260727296);
+emit_32(1110268628);
+emit_32(3261751309);
+emit_32(3259703309);
+emit_32(1111109324);
+emit_32(3261751309);
+emit_32(3258679296);
+emit_32(1111815854);
+emit_32(3261751309);
+emit_32(3257655309);
+emit_32(1112380434);
+emit_32(3261751309);
+emit_32(3256631296);
+emit_32(1113088511);
+emit_32(3261751309);
+emit_32(3255607309);
+emit_32(1113540657);
+emit_32(3261751309);
+emit_32(3254386688);
+emit_32(1113874498);
+emit_32(3261751309);
+emit_32(3252338714);
+emit_32(1114128672);
+emit_32(3261751309);
+emit_32(3250290688);
+emit_32(1114325883);
+emit_32(3261751309);
+emit_32(3248242714);
+emit_32(1114630023);
+emit_32(3261751309);
+emit_32(3245998080);
+emit_32(1114691181);
+emit_32(3261751309);
+emit_32(3241902132);
+emit_32(1114643497);
+emit_32(3261751309);
+emit_32(3237609472);
+emit_32(1114924410);
+emit_32(3261751309);
+emit_32(3229220864);
+emit_32(1115023894);
+emit_32(3261751309);
+emit_32(0);
+emit_32(1115026751);
+emit_32(3261751309);
+emit_32(1081737216);
+emit_32(1115049086);
+emit_32(3261751309);
+emit_32(3279552512);
+emit_32(1085379717);
+emit_32(3262775296);
+emit_32(3279296528);
+emit_32(1082515763);
+emit_32(3262775296);
+emit_32(3279040545);
+emit_32(1081713392);
+emit_32(3262775296);
+emit_32(3278784496);
+emit_32(1082674664);
+emit_32(3262775296);
+emit_32(3278528512);
+emit_32(1083857751);
+emit_32(3262775296);
+emit_32(3278272528);
+emit_32(1086391782);
+emit_32(3262775296);
+emit_32(3278016545);
+emit_32(1089887986);
+emit_32(3262775296);
+emit_32(3277760496);
+emit_32(1091366562);
+emit_32(3262775296);
+emit_32(3277504512);
+emit_32(1093480323);
+emit_32(3262775296);
+emit_32(3277248528);
+emit_32(1096367053);
+emit_32(3262775296);
+emit_32(3276992545);
+emit_32(1097288647);
+emit_32(3262775296);
+emit_32(3276736496);
+emit_32(1097900491);
+emit_32(3262775296);
+emit_32(3276480512);
+emit_32(1097387737);
+emit_32(3262775296);
+emit_32(3276224528);
+emit_32(1098997092);
+emit_32(3262775296);
+emit_32(3275968545);
+emit_32(1099406141);
+emit_32(3262775296);
+emit_32(3275712496);
+emit_32(1100061920);
+emit_32(3262775296);
+emit_32(3275456512);
+emit_32(1100936328);
+emit_32(3262775296);
+emit_32(3275200528);
+emit_32(1102376704);
+emit_32(3262775296);
+emit_32(3274944545);
+emit_32(1103402212);
+emit_32(3262775296);
+emit_32(3274688496);
+emit_32(1104153831);
+emit_32(3262775296);
+emit_32(3274432512);
+emit_32(1104171447);
+emit_32(3262775296);
+emit_32(3274176528);
+emit_32(1104486911);
+emit_32(3262775296);
+emit_32(3273920545);
+emit_32(1103965769);
+emit_32(3262775296);
+emit_32(3273664496);
+emit_32(1103343911);
+emit_32(3262775296);
+emit_32(3273408512);
+emit_32(1102855274);
+emit_32(3262775296);
+emit_32(3273152528);
+emit_32(1102990751);
+emit_32(3262775296);
+emit_32(3272896545);
+emit_32(1102516113);
+emit_32(3262775296);
+emit_32(3272640496);
+emit_32(1101872916);
+emit_32(3262775296);
+emit_32(3272384512);
+emit_32(1101340606);
+emit_32(3262775296);
+emit_32(3272128528);
+emit_32(1101093667);
+emit_32(3262775296);
+emit_32(3271872545);
+emit_32(1101409288);
+emit_32(3262775296);
+emit_32(3271616496);
+emit_32(1101315074);
+emit_32(3262775296);
+emit_32(3271163904);
+emit_32(1101239471);
+emit_32(3262775296);
+emit_32(3270651937);
+emit_32(1100955936);
+emit_32(3262775296);
+emit_32(3270139970);
+emit_32(1100734163);
+emit_32(3262775296);
+emit_32(3269627871);
+emit_32(1099873911);
+emit_32(3262775296);
+emit_32(3269115904);
+emit_32(1100253023);
+emit_32(3262775296);
+emit_32(3268603937);
+emit_32(1101062786);
+emit_32(3262775296);
+emit_32(3268091970);
+emit_32(1101695916);
+emit_32(3262775296);
+emit_32(3267579911);
+emit_32(1102727139);
+emit_32(3262775296);
+emit_32(3267067904);
+emit_32(1103290748);
+emit_32(3262775296);
+emit_32(3266555911);
+emit_32(1104346717);
+emit_32(3262775296);
+emit_32(3266043904);
+emit_32(1105063261);
+emit_32(3262775296);
+emit_32(3265531911);
+emit_32(1106002838);
+emit_32(3262775296);
+emit_32(3265019904);
+emit_32(1107066723);
+emit_32(3262775296);
+emit_32(3264507911);
+emit_32(1107631093);
+emit_32(3262775296);
+emit_32(3263995904);
+emit_32(1108240630);
+emit_32(3262775296);
+emit_32(3263483911);
+emit_32(1108980662);
+emit_32(3262775296);
+emit_32(3262775296);
+emit_32(1109633532);
+emit_32(3262775296);
+emit_32(3261751309);
+emit_32(1110425679);
+emit_32(3262775296);
+emit_32(3260727296);
+emit_32(1110943098);
+emit_32(3262775296);
+emit_32(3259703309);
+emit_32(1111573843);
+emit_32(3262775296);
+emit_32(3258679296);
+emit_32(1112066674);
+emit_32(3262775296);
+emit_32(3257655309);
+emit_32(1112658464);
+emit_32(3262775296);
+emit_32(3256631296);
+emit_32(1113241131);
+emit_32(3262775296);
+emit_32(3255607309);
+emit_32(1113628711);
+emit_32(3262775296);
+emit_32(3254386688);
+emit_32(1113998361);
+emit_32(3262775296);
+emit_32(3252338714);
+emit_32(1114315476);
+emit_32(3262775296);
+emit_32(3250290688);
+emit_32(1114404291);
+emit_32(3262775296);
+emit_32(3248242714);
+emit_32(1114257097);
+emit_32(3262775296);
+emit_32(3245998080);
+emit_32(1114167496);
+emit_32(3262775296);
+emit_32(3241902132);
+emit_32(1114396767);
+emit_32(3262775296);
+emit_32(3237609472);
+emit_32(1114735247);
+emit_32(3262775296);
+emit_32(3229220864);
+emit_32(1114903465);
+emit_32(3262775296);
+emit_32(0);
+emit_32(1115124924);
+emit_32(3262775296);
+emit_32(1081737216);
+emit_32(1115189700);
+emit_32(3262775296);
+emit_32(3279552512);
+emit_32(1086492571);
+emit_32(3263483911);
+emit_32(3279296528);
+emit_32(1084509819);
+emit_32(3263483911);
+emit_32(3279040545);
+emit_32(1084430379);
+emit_32(3263483911);
+emit_32(3278784496);
+emit_32(1085001978);
+emit_32(3263483911);
+emit_32(3278528512);
+emit_32(1084687406);
+emit_32(3263483911);
+emit_32(3278272528);
+emit_32(1087121591);
+emit_32(3263483911);
+emit_32(3278016545);
+emit_32(1090205138);
+emit_32(3263483911);
+emit_32(3277760496);
+emit_32(1091946330);
+emit_32(3263483911);
+emit_32(3277504512);
+emit_32(1094604292);
+emit_32(3263483911);
+emit_32(3277248528);
+emit_32(1096763205);
+emit_32(3263483911);
+emit_32(3276992545);
+emit_32(1098349072);
+emit_32(3263483911);
+emit_32(3276736496);
+emit_32(1098895589);
+emit_32(3263483911);
+emit_32(3276480512);
+emit_32(1099139645);
+emit_32(3263483911);
+emit_32(3276224528);
+emit_32(1099654916);
+emit_32(3263483911);
+emit_32(3275968545);
+emit_32(1100028838);
+emit_32(3263483911);
+emit_32(3275712496);
+emit_32(1100411096);
+emit_32(3263483911);
+emit_32(3275456512);
+emit_32(1101073796);
+emit_32(3263483911);
+emit_32(3275200528);
+emit_32(1102500803);
+emit_32(3263483911);
+emit_32(3274944545);
+emit_32(1103383180);
+emit_32(3263483911);
+emit_32(3274688496);
+emit_32(1103953081);
+emit_32(3263483911);
+emit_32(3274432512);
+emit_32(1104117078);
+emit_32(3263483911);
+emit_32(3274176528);
+emit_32(1104031777);
+emit_32(3263483911);
+emit_32(3273920545);
+emit_32(1103706141);
+emit_32(3263483911);
+emit_32(3273664496);
+emit_32(1103324512);
+emit_32(3263483911);
+emit_32(3273408512);
+emit_32(1102513124);
+emit_32(3263483911);
+emit_32(3273152528);
+emit_32(1102512757);
+emit_32(3263483911);
+emit_32(3272896545);
+emit_32(1102001367);
+emit_32(3263483911);
+emit_32(3272640496);
+emit_32(1101489347);
+emit_32(3263483911);
+emit_32(3272384512);
+emit_32(1101058382);
+emit_32(3263483911);
+emit_32(3272128528);
+emit_32(1100785805);
+emit_32(3263483911);
+emit_32(3271872545);
+emit_32(1100711985);
+emit_32(3263483911);
+emit_32(3271616496);
+emit_32(1100454979);
+emit_32(3263483911);
+emit_32(3271163904);
+emit_32(1100441924);
+emit_32(3263483911);
+emit_32(3270651937);
+emit_32(1100316829);
+emit_32(3263483911);
+emit_32(3270139970);
+emit_32(1099903690);
+emit_32(3263483911);
+emit_32(3269627871);
+emit_32(1099946525);
+emit_32(3263483911);
+emit_32(3269115904);
+emit_32(1100095265);
+emit_32(3263483911);
+emit_32(3268603937);
+emit_32(1100759958);
+emit_32(3263483911);
+emit_32(3268091970);
+emit_32(1101531447);
+emit_32(3263483911);
+emit_32(3267579911);
+emit_32(1102182403);
+emit_32(3263483911);
+emit_32(3267067904);
+emit_32(1102954575);
+emit_32(3263483911);
+emit_32(3266555911);
+emit_32(1103927181);
+emit_32(3263483911);
+emit_32(3266043904);
+emit_32(1104963174);
+emit_32(3263483911);
+emit_32(3265531911);
+emit_32(1106107695);
+emit_32(3263483911);
+emit_32(3265019904);
+emit_32(1106811971);
+emit_32(3263483911);
+emit_32(3264507911);
+emit_32(1107810242);
+emit_32(3263483911);
+emit_32(3263995904);
+emit_32(1108701217);
+emit_32(3263483911);
+emit_32(3263483911);
+emit_32(1109660533);
+emit_32(3263483911);
+emit_32(3262775296);
+emit_32(1110370838);
+emit_32(3263483911);
+emit_32(3261751309);
+emit_32(1111099363);
+emit_32(3263483911);
+emit_32(3260727296);
+emit_32(1111486628);
+emit_32(3263483911);
+emit_32(3259703309);
+emit_32(1111821464);
+emit_32(3263483911);
+emit_32(3258679296);
+emit_32(1112262967);
+emit_32(3263483911);
+emit_32(3257655309);
+emit_32(1112778211);
+emit_32(3263483911);
+emit_32(3256631296);
+emit_32(1113334717);
+emit_32(3263483911);
+emit_32(3255607309);
+emit_32(1113699910);
+emit_32(3263483911);
+emit_32(3254386688);
+emit_32(1113953429);
+emit_32(3263483911);
+emit_32(3252338714);
+emit_32(1114251775);
+emit_32(3263483911);
+emit_32(3250290688);
+emit_32(1114199242);
+emit_32(3263483911);
+emit_32(3248242714);
+emit_32(1113838033);
+emit_32(3263483911);
+emit_32(3245998080);
+emit_32(1113833787);
+emit_32(3263483911);
+emit_32(3241902132);
+emit_32(1114207840);
+emit_32(3263483911);
+emit_32(3237609472);
+emit_32(1114546556);
+emit_32(3263483911);
+emit_32(3229220864);
+emit_32(1114598697);
+emit_32(3263483911);
+emit_32(0);
+emit_32(1114817954);
+emit_32(3263483911);
+emit_32(1081737216);
+emit_32(1114860919);
+emit_32(3263483911);
+emit_32(3279552512);
+emit_32(1087139710);
+emit_32(3263995904);
+emit_32(3279296528);
+emit_32(1087121150);
+emit_32(3263995904);
+emit_32(3279040545);
+emit_32(1087424797);
+emit_32(3263995904);
+emit_32(3278784496);
+emit_32(1088288866);
+emit_32(3263995904);
+emit_32(3278528512);
+emit_32(1087946275);
+emit_32(3263995904);
+emit_32(3278272528);
+emit_32(1088967861);
+emit_32(3263995904);
+emit_32(3278016545);
+emit_32(1091560444);
+emit_32(3263995904);
+emit_32(3277760496);
+emit_32(1093142053);
+emit_32(3263995904);
+emit_32(3277504512);
+emit_32(1094326419);
+emit_32(3263995904);
+emit_32(3277248528);
+emit_32(1096867958);
+emit_32(3263995904);
+emit_32(3276992545);
+emit_32(1098819882);
+emit_32(3263995904);
+emit_32(3276736496);
+emit_32(1099265422);
+emit_32(3263995904);
+emit_32(3276480512);
+emit_32(1099487668);
+emit_32(3263995904);
+emit_32(3276224528);
+emit_32(1099990827);
+emit_32(3263995904);
+emit_32(3275968545);
+emit_32(1100246627);
+emit_32(3263995904);
+emit_32(3275712496);
+emit_32(1100397937);
+emit_32(3263995904);
+emit_32(3275456512);
+emit_32(1101410127);
+emit_32(3263995904);
+emit_32(3275200528);
+emit_32(1102521513);
+emit_32(3263995904);
+emit_32(3274944545);
+emit_32(1103207386);
+emit_32(3263995904);
+emit_32(3274688496);
+emit_32(1103390940);
+emit_32(3263995904);
+emit_32(3274432512);
+emit_32(1103443263);
+emit_32(3263995904);
+emit_32(3274176528);
+emit_32(1103097024);
+emit_32(3263995904);
+emit_32(3273920545);
+emit_32(1102906864);
+emit_32(3263995904);
+emit_32(3273664496);
+emit_32(1102900730);
+emit_32(3263995904);
+emit_32(3273408512);
+emit_32(1102220938);
+emit_32(3263995904);
+emit_32(3273152528);
+emit_32(1102144078);
+emit_32(3263995904);
+emit_32(3272896545);
+emit_32(1101363046);
+emit_32(3263995904);
+emit_32(3272640496);
+emit_32(1100839544);
+emit_32(3263995904);
+emit_32(3272384512);
+emit_32(1100199127);
+emit_32(3263995904);
+emit_32(3272128528);
+emit_32(1100097362);
+emit_32(3263995904);
+emit_32(3271872545);
+emit_32(1099987419);
+emit_32(3263995904);
+emit_32(3271616496);
+emit_32(1099540044);
+emit_32(3263995904);
+emit_32(3271163904);
+emit_32(1099437336);
+emit_32(3263995904);
+emit_32(3270651937);
+emit_32(1099514983);
+emit_32(3263995904);
+emit_32(3270139970);
+emit_32(1099717201);
+emit_32(3263995904);
+emit_32(3269627871);
+emit_32(1099729155);
+emit_32(3263995904);
+emit_32(3269115904);
+emit_32(1099827039);
+emit_32(3263995904);
+emit_32(3268603937);
+emit_32(1100161378);
+emit_32(3263995904);
+emit_32(3268091970);
+emit_32(1100861355);
+emit_32(3263995904);
+emit_32(3267579911);
+emit_32(1101473671);
+emit_32(3263995904);
+emit_32(3267067904);
+emit_32(1102447483);
+emit_32(3263995904);
+emit_32(3266555911);
+emit_32(1103703782);
+emit_32(3263995904);
+emit_32(3266043904);
+emit_32(1104882067);
+emit_32(3263995904);
+emit_32(3265531911);
+emit_32(1105992194);
+emit_32(3263995904);
+emit_32(3265019904);
+emit_32(1106919608);
+emit_32(3263995904);
+emit_32(3264507911);
+emit_32(1107993271);
+emit_32(3263995904);
+emit_32(3263995904);
+emit_32(1108925769);
+emit_32(3263995904);
+emit_32(3263483911);
+emit_32(1110019198);
+emit_32(3263995904);
+emit_32(3262775296);
+emit_32(1110818501);
+emit_32(3263995904);
+emit_32(3261751309);
+emit_32(1111233161);
+emit_32(3263995904);
+emit_32(3260727296);
+emit_32(1111683183);
+emit_32(3263995904);
+emit_32(3259703309);
+emit_32(1111981792);
+emit_32(3263995904);
+emit_32(3258679296);
+emit_32(1112340798);
+emit_32(3263995904);
+emit_32(3257655309);
+emit_32(1112786705);
+emit_32(3263995904);
+emit_32(3256631296);
+emit_32(1113283966);
+emit_32(3263995904);
+emit_32(3255607309);
+emit_32(1113555626);
+emit_32(3263995904);
+emit_32(3254386688);
+emit_32(1113825948);
+emit_32(3263995904);
+emit_32(3252338714);
+emit_32(1113819107);
+emit_32(3263995904);
+emit_32(3250290688);
+emit_32(1113630940);
+emit_32(3263995904);
+emit_32(3248242714);
+emit_32(1113321059);
+emit_32(3263995904);
+emit_32(3245998080);
+emit_32(1113733018);
+emit_32(3263995904);
+emit_32(3241902132);
+emit_32(1114113861);
+emit_32(3263995904);
+emit_32(3237609472);
+emit_32(1114143562);
+emit_32(3263995904);
+emit_32(3229220864);
+emit_32(1114322213);
+emit_32(3263995904);
+emit_32(0);
+emit_32(1114472841);
+emit_32(3263995904);
+emit_32(1081737216);
+emit_32(1114412994);
+emit_32(3263995904);
+emit_32(3279552512);
+emit_32(1089045854);
+emit_32(3264507911);
+emit_32(3279296528);
+emit_32(1088278862);
+emit_32(3264507911);
+emit_32(3279040545);
+emit_32(1090412714);
+emit_32(3264507911);
+emit_32(3278784496);
+emit_32(1089711259);
+emit_32(3264507911);
+emit_32(3278528512);
+emit_32(1090927439);
+emit_32(3264507911);
+emit_32(3278272528);
+emit_32(1091410686);
+emit_32(3264507911);
+emit_32(3278016545);
+emit_32(1093437227);
+emit_32(3264507911);
+emit_32(3277760496);
+emit_32(1094926205);
+emit_32(3264507911);
+emit_32(3277504512);
+emit_32(1095460140);
+emit_32(3264507911);
+emit_32(3277248528);
+emit_32(1097105460);
+emit_32(3264507911);
+emit_32(3276992545);
+emit_32(1098968413);
+emit_32(3264507911);
+emit_32(3276736496);
+emit_32(1099353345);
+emit_32(3264507911);
+emit_32(3276480512);
+emit_32(1099813618);
+emit_32(3264507911);
+emit_32(3276224528);
+emit_32(1100320499);
+emit_32(3264507911);
+emit_32(3275968545);
+emit_32(1100493829);
+emit_32(3264507911);
+emit_32(3275712496);
+emit_32(1100473906);
+emit_32(3264507911);
+emit_32(3275456512);
+emit_32(1101401948);
+emit_32(3264507911);
+emit_32(3275200528);
+emit_32(1102298848);
+emit_32(3264507911);
+emit_32(3274944545);
+emit_32(1102989230);
+emit_32(3264507911);
+emit_32(3274688496);
+emit_32(1102648967);
+emit_32(3264507911);
+emit_32(3274432512);
+emit_32(1102203952);
+emit_32(3264507911);
+emit_32(3274176528);
+emit_32(1102020923);
+emit_32(3264507911);
+emit_32(3273920545);
+emit_32(1102482244);
+emit_32(3264507911);
+emit_32(3273664496);
+emit_32(1101949515);
+emit_32(3264507911);
+emit_32(3273408512);
+emit_32(1101712379);
+emit_32(3264507911);
+emit_32(3273152528);
+emit_32(1100957195);
+emit_32(3264507911);
+emit_32(3272896545);
+emit_32(1100760377);
+emit_32(3264507911);
+emit_32(3272640496);
+emit_32(1100597271);
+emit_32(3264507911);
+emit_32(3272384512);
+emit_32(1099567360);
+emit_32(3264507911);
+emit_32(3272128528);
+emit_32(1098669307);
+emit_32(3264507911);
+emit_32(3271872545);
+emit_32(1098076022);
+emit_32(3264507911);
+emit_32(3271616496);
+emit_32(1097956485);
+emit_32(3264507911);
+emit_32(3271163904);
+emit_32(1098180565);
+emit_32(3264507911);
+emit_32(3270651937);
+emit_32(1097980812);
+emit_32(3264507911);
+emit_32(3270139970);
+emit_32(1098969042);
+emit_32(3264507911);
+emit_32(3269627871);
+emit_32(1099581411);
+emit_32(3264507911);
+emit_32(3269115904);
+emit_32(1099345900);
+emit_32(3264507911);
+emit_32(3268603937);
+emit_32(1099778595);
+emit_32(3264507911);
+emit_32(3268091970);
+emit_32(1100042784);
+emit_32(3264507911);
+emit_32(3267579911);
+emit_32(1100446643);
+emit_32(3264507911);
+emit_32(3267067904);
+emit_32(1101589486);
+emit_32(3264507911);
+emit_32(3266555911);
+emit_32(1103063522);
+emit_32(3264507911);
+emit_32(3266043904);
+emit_32(1104431599);
+emit_32(3264507911);
+emit_32(3265531911);
+emit_32(1106038332);
+emit_32(3264507911);
+emit_32(3265019904);
+emit_32(1107210011);
+emit_32(3264507911);
+emit_32(3264507911);
+emit_32(1107970254);
+emit_32(3264507911);
+emit_32(3263995904);
+emit_32(1108769794);
+emit_32(3264507911);
+emit_32(3263483911);
+emit_32(1109911929);
+emit_32(3264507911);
+emit_32(3262775296);
+emit_32(1110640427);
+emit_32(3264507911);
+emit_32(3261751309);
+emit_32(1111295551);
+emit_32(3264507911);
+emit_32(3260727296);
+emit_32(1111699227);
+emit_32(3264507911);
+emit_32(3259703309);
+emit_32(1112037130);
+emit_32(3264507911);
+emit_32(3258679296);
+emit_32(1112388927);
+emit_32(3264507911);
+emit_32(3257655309);
+emit_32(1112777766);
+emit_32(3264507911);
+emit_32(3256631296);
+emit_32(1112967610);
+emit_32(3264507911);
+emit_32(3255607309);
+emit_32(1113472080);
+emit_32(3264507911);
+emit_32(3254386688);
+emit_32(1113707171);
+emit_32(3264507911);
+emit_32(3252338714);
+emit_32(1113542073);
+emit_32(3264507911);
+emit_32(3250290688);
+emit_32(1113390370);
+emit_32(3264507911);
+emit_32(3248242714);
+emit_32(1113303574);
+emit_32(3264507911);
+emit_32(3245998080);
+emit_32(1113650705);
+emit_32(3264507911);
+emit_32(3241902132);
+emit_32(1114040330);
+emit_32(3264507911);
+emit_32(3237609472);
+emit_32(1114029556);
+emit_32(3264507911);
+emit_32(3229220864);
+emit_32(1113975580);
+emit_32(3264507911);
+emit_32(0);
+emit_32(1113691390);
+emit_32(3264507911);
+emit_32(1081737216);
+emit_32(1113723162);
+emit_32(3264507911);
+emit_32(3279552512);
+emit_32(1091448267);
+emit_32(3265019904);
+emit_32(3279296528);
+emit_32(1090852236);
+emit_32(3265019904);
+emit_32(3279040545);
+emit_32(1091224616);
+emit_32(3265019904);
+emit_32(3278784496);
+emit_32(1092115172);
+emit_32(3265019904);
+emit_32(3278528512);
+emit_32(1092387560);
+emit_32(3265019904);
+emit_32(3278272528);
+emit_32(1093982696);
+emit_32(3265019904);
+emit_32(3278016545);
+emit_32(1095925288);
+emit_32(3265019904);
+emit_32(3277760496);
+emit_32(1097267780);
+emit_32(3265019904);
+emit_32(3277504512);
+emit_32(1098458962);
+emit_32(3265019904);
+emit_32(3277248528);
+emit_32(1097176554);
+emit_32(3265019904);
+emit_32(3276992545);
+emit_32(1098529427);
+emit_32(3265019904);
+emit_32(3276736496);
+emit_32(1099386480);
+emit_32(3265019904);
+emit_32(3276480512);
+emit_32(1100029729);
+emit_32(3265019904);
+emit_32(3276224528);
+emit_32(1100574360);
+emit_32(3265019904);
+emit_32(3275968545);
+emit_32(1100451571);
+emit_32(3265019904);
+emit_32(3275712496);
+emit_32(1100757808);
+emit_32(3265019904);
+emit_32(3275456512);
+emit_32(1101452909);
+emit_32(3265019904);
+emit_32(3275200528);
+emit_32(1102452412);
+emit_32(3265019904);
+emit_32(3274944545);
+emit_32(1102489269);
+emit_32(3265019904);
+emit_32(3274688496);
+emit_32(1101956383);
+emit_32(3265019904);
+emit_32(3274432512);
+emit_32(1102164106);
+emit_32(3265019904);
+emit_32(3274176528);
+emit_32(1102017829);
+emit_32(3265019904);
+emit_32(3273920545);
+emit_32(1101687633);
+emit_32(3265019904);
+emit_32(3273664496);
+emit_32(1101190398);
+emit_32(3265019904);
+emit_32(3273408512);
+emit_32(1100930771);
+emit_32(3265019904);
+emit_32(3273152528);
+emit_32(1099875379);
+emit_32(3265019904);
+emit_32(3272896545);
+emit_32(1099988363);
+emit_32(3265019904);
+emit_32(3272640496);
+emit_32(1099466749);
+emit_32(3265019904);
+emit_32(3272384512);
+emit_32(1099025927);
+emit_32(3265019904);
+emit_32(3272128528);
+emit_32(1097133667);
+emit_32(3265019904);
+emit_32(3271872545);
+emit_32(1096125042);
+emit_32(3265019904);
+emit_32(3271616496);
+emit_32(1097217448);
+emit_32(3265019904);
+emit_32(3271163904);
+emit_32(1097530343);
+emit_32(3265019904);
+emit_32(3270651937);
+emit_32(1097021365);
+emit_32(3265019904);
+emit_32(3270139970);
+emit_32(1098337432);
+emit_32(3265019904);
+emit_32(3269627871);
+emit_32(1099231186);
+emit_32(3265019904);
+emit_32(3269115904);
+emit_32(1099058066);
+emit_32(3265019904);
+emit_32(3268603937);
+emit_32(1098845363);
+emit_32(3265019904);
+emit_32(3268091970);
+emit_32(1099724436);
+emit_32(3265019904);
+emit_32(3267579911);
+emit_32(1100562825);
+emit_32(3265019904);
+emit_32(3267067904);
+emit_32(1101564635);
+emit_32(3265019904);
+emit_32(3266555911);
+emit_32(1102663280);
+emit_32(3265019904);
+emit_32(3266043904);
+emit_32(1103783055);
+emit_32(3265019904);
+emit_32(3265531911);
+emit_32(1105695185);
+emit_32(3265019904);
+emit_32(3265019904);
+emit_32(1107222541);
+emit_32(3265019904);
+emit_32(3264507911);
+emit_32(1108142824);
+emit_32(3265019904);
+emit_32(3263995904);
+emit_32(1108595363);
+emit_32(3265019904);
+emit_32(3263483911);
+emit_32(1109574812);
+emit_32(3265019904);
+emit_32(3262775296);
+emit_32(1110596754);
+emit_32(3265019904);
+emit_32(3261751309);
+emit_32(1111223304);
+emit_32(3265019904);
+emit_32(3260727296);
+emit_32(1111571117);
+emit_32(3265019904);
+emit_32(3259703309);
+emit_32(1111962445);
+emit_32(3265019904);
+emit_32(3258679296);
+emit_32(1112404944);
+emit_32(3265019904);
+emit_32(3257655309);
+emit_32(1112735429);
+emit_32(3265019904);
+emit_32(3256631296);
+emit_32(1112827337);
+emit_32(3265019904);
+emit_32(3255607309);
+emit_32(1113233949);
+emit_32(3265019904);
+emit_32(3254386688);
+emit_32(1113414513);
+emit_32(3265019904);
+emit_32(3252338714);
+emit_32(1113420150);
+emit_32(3265019904);
+emit_32(3250290688);
+emit_32(1113163904);
+emit_32(3265019904);
+emit_32(3248242714);
+emit_32(1113052807);
+emit_32(3265019904);
+emit_32(3245998080);
+emit_32(1113343787);
+emit_32(3265019904);
+emit_32(3241902132);
+emit_32(1113698599);
+emit_32(3265019904);
+emit_32(3237609472);
+emit_32(1113628816);
+emit_32(3265019904);
+emit_32(3229220864);
+emit_32(1113662187);
+emit_32(3265019904);
+emit_32(0);
+emit_32(1113260242);
+emit_32(3265019904);
+emit_32(1081737216);
+emit_32(1113178820);
+emit_32(3265019904);
+emit_32(3279552512);
+emit_32(1093438171);
+emit_32(3265531911);
+emit_32(3279296528);
+emit_32(1092747788);
+emit_32(3265531911);
+emit_32(3279040545);
+emit_32(1093310454);
+emit_32(3265531911);
+emit_32(3278784496);
+emit_32(1094102234);
+emit_32(3265531911);
+emit_32(3278528512);
+emit_32(1095034523);
+emit_32(3265531911);
+emit_32(3278272528);
+emit_32(1096277295);
+emit_32(3265531911);
+emit_32(3278016545);
+emit_32(1097766063);
+emit_32(3265531911);
+emit_32(3277760496);
+emit_32(1099194067);
+emit_32(3265531911);
+emit_32(3277504512);
+emit_32(1099628649);
+emit_32(3265531911);
+emit_32(3277248528);
+emit_32(1099258973);
+emit_32(3265531911);
+emit_32(3276992545);
+emit_32(1098472174);
+emit_32(3265531911);
+emit_32(3276736496);
+emit_32(1099274020);
+emit_32(3265531911);
+emit_32(3276480512);
+emit_32(1099770049);
+emit_32(3265531911);
+emit_32(3276224528);
+emit_32(1100217110);
+emit_32(3265531911);
+emit_32(3275968545);
+emit_32(1099973526);
+emit_32(3265531911);
+emit_32(3275712496);
+emit_32(1100572682);
+emit_32(3265531911);
+emit_32(3275456512);
+emit_32(1101377883);
+emit_32(3265531911);
+emit_32(3275200528);
+emit_32(1101817027);
+emit_32(3265531911);
+emit_32(3274944545);
+emit_32(1101419407);
+emit_32(3265531911);
+emit_32(3274688496);
+emit_32(1101366087);
+emit_32(3265531911);
+emit_32(3274432512);
+emit_32(1101862955);
+emit_32(3265531911);
+emit_32(3274176528);
+emit_32(1101888854);
+emit_32(3265531911);
+emit_32(3273920545);
+emit_32(1101226888);
+emit_32(3265531911);
+emit_32(3273664496);
+emit_32(1100713768);
+emit_32(3265531911);
+emit_32(3273408512);
+emit_32(1099889010);
+emit_32(3265531911);
+emit_32(3273152528);
+emit_32(1098959238);
+emit_32(3265531911);
+emit_32(3272896545);
+emit_32(1098971873);
+emit_32(3265531911);
+emit_32(3272640496);
+emit_32(1098173750);
+emit_32(3265531911);
+emit_32(3272384512);
+emit_32(1096822345);
+emit_32(3265531911);
+emit_32(3272128528);
+emit_32(1095460769);
+emit_32(3265531911);
+emit_32(3271872545);
+emit_32(1095939654);
+emit_32(3265531911);
+emit_32(3271616496);
+emit_32(1096979107);
+emit_32(3265531911);
+emit_32(3271163904);
+emit_32(1096816787);
+emit_32(3265531911);
+emit_32(3270651937);
+emit_32(1096356567);
+emit_32(3265531911);
+emit_32(3270139970);
+emit_32(1097648308);
+emit_32(3265531911);
+emit_32(3269627871);
+emit_32(1098574096);
+emit_32(3265531911);
+emit_32(3269115904);
+emit_32(1097968858);
+emit_32(3265531911);
+emit_32(3268603937);
+emit_32(1098365115);
+emit_32(3265531911);
+emit_32(3268091970);
+emit_32(1099546126);
+emit_32(3265531911);
+emit_32(3267579911);
+emit_32(1100574569);
+emit_32(3265531911);
+emit_32(3267067904);
+emit_32(1101687475);
+emit_32(3265531911);
+emit_32(3266555911);
+emit_32(1102052380);
+emit_32(3265531911);
+emit_32(3266043904);
+emit_32(1103313292);
+emit_32(3265531911);
+emit_32(3265531911);
+emit_32(1105621785);
+emit_32(3265531911);
+emit_32(3265019904);
+emit_32(1107169169);
+emit_32(3265531911);
+emit_32(3264507911);
+emit_32(1107983021);
+emit_32(3265531911);
+emit_32(3263995904);
+emit_32(1108610777);
+emit_32(3265531911);
+emit_32(3263483911);
+emit_32(1109287292);
+emit_32(3265531911);
+emit_32(3262775296);
+emit_32(1110292405);
+emit_32(3265531911);
+emit_32(3261751309);
+emit_32(1110956075);
+emit_32(3265531911);
+emit_32(3260727296);
+emit_32(1111332749);
+emit_32(3265531911);
+emit_32(3259703309);
+emit_32(1111901392);
+emit_32(3265531911);
+emit_32(3258679296);
+emit_32(1112404473);
+emit_32(3265531911);
+emit_32(3257655309);
+emit_32(1112625041);
+emit_32(3265531911);
+emit_32(3256631296);
+emit_32(1112715716);
+emit_32(3265531911);
+emit_32(3255607309);
+emit_32(1112946875);
+emit_32(3265531911);
+emit_32(3254386688);
+emit_32(1113184299);
+emit_32(3265531911);
+emit_32(3252338714);
+emit_32(1112883882);
+emit_32(3265531911);
+emit_32(3250290688);
+emit_32(1112791607);
+emit_32(3265531911);
+emit_32(3248242714);
+emit_32(1112621633);
+emit_32(3265531911);
+emit_32(3245998080);
+emit_32(1113008138);
+emit_32(3265531911);
+emit_32(3241902132);
+emit_32(1113167285);
+emit_32(3265531911);
+emit_32(3237609472);
+emit_32(1113124399);
+emit_32(3265531911);
+emit_32(3229220864);
+emit_32(1112977362);
+emit_32(3265531911);
+emit_32(0);
+emit_32(1112766703);
+emit_32(3265531911);
+emit_32(1081737216);
+emit_32(1112525767);
+emit_32(3265531911);
+emit_32(3279552512);
+emit_32(1095002332);
+emit_32(3266043904);
+emit_32(3279296528);
+emit_32(1094609640);
+emit_32(3266043904);
+emit_32(3279040545);
+emit_32(1096233255);
+emit_32(3266043904);
+emit_32(3278784496);
+emit_32(1097215037);
+emit_32(3266043904);
+emit_32(3278528512);
+emit_32(1097707028);
+emit_32(3266043904);
+emit_32(3278272528);
+emit_32(1098213910);
+emit_32(3266043904);
+emit_32(3278016545);
+emit_32(1099607939);
+emit_32(3266043904);
+emit_32(3277760496);
+emit_32(1100328888);
+emit_32(3266043904);
+emit_32(3277504512);
+emit_32(1099961205);
+emit_32(3266043904);
+emit_32(3277248528);
+emit_32(1099657799);
+emit_32(3266043904);
+emit_32(3276992545);
+emit_32(1099461558);
+emit_32(3266043904);
+emit_32(3276736496);
+emit_32(1099119408);
+emit_32(3266043904);
+emit_32(3276480512);
+emit_32(1099612763);
+emit_32(3266043904);
+emit_32(3276224528);
+emit_32(1099736862);
+emit_32(3266043904);
+emit_32(3275968545);
+emit_32(1099825729);
+emit_32(3266043904);
+emit_32(3275712496);
+emit_32(1100371460);
+emit_32(3266043904);
+emit_32(3275456512);
+emit_32(1100899051);
+emit_32(3266043904);
+emit_32(3275200528);
+emit_32(1100798702);
+emit_32(3266043904);
+emit_32(3274944545);
+emit_32(1100553703);
+emit_32(3266043904);
+emit_32(3274688496);
+emit_32(1100490159);
+emit_32(3266043904);
+emit_32(3274432512);
+emit_32(1100873309);
+emit_32(3266043904);
+emit_32(3274176528);
+emit_32(1100817524);
+emit_32(3266043904);
+emit_32(3273920545);
+emit_32(1100275568);
+emit_32(3266043904);
+emit_32(3273664496);
+emit_32(1100060977);
+emit_32(3266043904);
+emit_32(3273408512);
+emit_32(1099264636);
+emit_32(3266043904);
+emit_32(3273152528);
+emit_32(1097887279);
+emit_32(3266043904);
+emit_32(3272896545);
+emit_32(1096157548);
+emit_32(3266043904);
+emit_32(3272640496);
+emit_32(1095486249);
+emit_32(3266043904);
+emit_32(3272384512);
+emit_32(1094979368);
+emit_32(3266043904);
+emit_32(3272128528);
+emit_32(1095398693);
+emit_32(3266043904);
+emit_32(3271872545);
+emit_32(1095531024);
+emit_32(3266043904);
+emit_32(3271616496);
+emit_32(1095980968);
+emit_32(3266043904);
+emit_32(3271163904);
+emit_32(1095589534);
+emit_32(3266043904);
+emit_32(3270651937);
+emit_32(1095288383);
+emit_32(3266043904);
+emit_32(3270139970);
+emit_32(1096315044);
+emit_32(3266043904);
+emit_32(3269627871);
+emit_32(1096326788);
+emit_32(3266043904);
+emit_32(3269115904);
+emit_32(1096402705);
+emit_32(3266043904);
+emit_32(3268603937);
+emit_32(1097546911);
+emit_32(3266043904);
+emit_32(3268091970);
+emit_32(1099249798);
+emit_32(3266043904);
+emit_32(3267579911);
+emit_32(1099942016);
+emit_32(3266043904);
+emit_32(3267067904);
+emit_32(1100913469);
+emit_32(3266043904);
+emit_32(3266555911);
+emit_32(1101943433);
+emit_32(3266043904);
+emit_32(3266043904);
+emit_32(1102787536);
+emit_32(3266043904);
+emit_32(3265531911);
+emit_32(1104904507);
+emit_32(3266043904);
+emit_32(3265019904);
+emit_32(1106333873);
+emit_32(3266043904);
+emit_32(3264507911);
+emit_32(1107759779);
+emit_32(3266043904);
+emit_32(3263995904);
+emit_32(1108391467);
+emit_32(3266043904);
+emit_32(3263483911);
+emit_32(1108904981);
+emit_32(3266043904);
+emit_32(3262775296);
+emit_32(1109806757);
+emit_32(3266043904);
+emit_32(3261751309);
+emit_32(1110385151);
+emit_32(3266043904);
+emit_32(3260727296);
+emit_32(1110931145);
+emit_32(3266043904);
+emit_32(3259703309);
+emit_32(1111641319);
+emit_32(3266043904);
+emit_32(3258679296);
+emit_32(1112124634);
+emit_32(3266043904);
+emit_32(3257655309);
+emit_32(1112283257);
+emit_32(3266043904);
+emit_32(3256631296);
+emit_32(1112339618);
+emit_32(3266043904);
+emit_32(3255607309);
+emit_32(1112509383);
+emit_32(3266043904);
+emit_32(3254386688);
+emit_32(1112776009);
+emit_32(3266043904);
+emit_32(3252338714);
+emit_32(1112680825);
+emit_32(3266043904);
+emit_32(3250290688);
+emit_32(1112625539);
+emit_32(3266043904);
+emit_32(3248242714);
+emit_32(1112693513);
+emit_32(3266043904);
+emit_32(3245998080);
+emit_32(1112618644);
+emit_32(3266043904);
+emit_32(3241902132);
+emit_32(1112571616);
+emit_32(3266043904);
+emit_32(3237609472);
+emit_32(1112555074);
+emit_32(3266043904);
+emit_32(3229220864);
+emit_32(1112282576);
+emit_32(3266043904);
+emit_32(0);
+emit_32(1112161675);
+emit_32(3266043904);
+emit_32(1081737216);
+emit_32(1112016683);
+emit_32(3266043904);
+emit_32(3279552512);
+emit_32(1096435525);
+emit_32(3266555911);
+emit_32(3279296528);
+emit_32(1097116575);
+emit_32(3266555911);
+emit_32(3279040545);
+emit_32(1098870633);
+emit_32(3266555911);
+emit_32(3278784496);
+emit_32(1099498730);
+emit_32(3266555911);
+emit_32(3278528512);
+emit_32(1099914596);
+emit_32(3266555911);
+emit_32(3278272528);
+emit_32(1099951872);
+emit_32(3266555911);
+emit_32(3278016545);
+emit_32(1100659976);
+emit_32(3266555911);
+emit_32(3277760496);
+emit_32(1101078253);
+emit_32(3266555911);
+emit_32(3277504512);
+emit_32(1100635177);
+emit_32(3266555911);
+emit_32(3277248528);
+emit_32(1100013948);
+emit_32(3266555911);
+emit_32(3276992545);
+emit_32(1099614650);
+emit_32(3266555911);
+emit_32(3276736496);
+emit_32(1099488402);
+emit_32(3266555911);
+emit_32(3276480512);
+emit_32(1099820591);
+emit_32(3266555911);
+emit_32(3276224528);
+emit_32(1099553833);
+emit_32(3266555911);
+emit_32(3275968545);
+emit_32(1099782999);
+emit_32(3266555911);
+emit_32(3275712496);
+emit_32(1100398566);
+emit_32(3266555911);
+emit_32(3275456512);
+emit_32(1100575303);
+emit_32(3266555911);
+emit_32(3275200528);
+emit_32(1100289986);
+emit_32(3266555911);
+emit_32(3274944545);
+emit_32(1099602382);
+emit_32(3266555911);
+emit_32(3274688496);
+emit_32(1099733506);
+emit_32(3266555911);
+emit_32(3274432512);
+emit_32(1100008915);
+emit_32(3266555911);
+emit_32(3274176528);
+emit_32(1100003777);
+emit_32(3266555911);
+emit_32(3273920545);
+emit_32(1099179753);
+emit_32(3266555911);
+emit_32(3273664496);
+emit_32(1098406953);
+emit_32(3266555911);
+emit_32(3273408512);
+emit_32(1097223320);
+emit_32(3266555911);
+emit_32(3273152528);
+emit_32(1096202217);
+emit_32(3266555911);
+emit_32(3272896545);
+emit_32(1095613442);
+emit_32(3266555911);
+emit_32(3272640496);
+emit_32(1095615539);
+emit_32(3266555911);
+emit_32(3272384512);
+emit_32(1095008728);
+emit_32(3266555911);
+emit_32(3272128528);
+emit_32(1095144623);
+emit_32(3266555911);
+emit_32(3271872545);
+emit_32(1095756572);
+emit_32(3266555911);
+emit_32(3271616496);
+emit_32(1094683564);
+emit_32(3266555911);
+emit_32(3271163904);
+emit_32(1094540119);
+emit_32(3266555911);
+emit_32(3270651937);
+emit_32(1094978843);
+emit_32(3266555911);
+emit_32(3270139970);
+emit_32(1095340707);
+emit_32(3266555911);
+emit_32(3269627871);
+emit_32(1095981597);
+emit_32(3266555911);
+emit_32(3269115904);
+emit_32(1096517838);
+emit_32(3266555911);
+emit_32(3268603937);
+emit_32(1096669463);
+emit_32(3266555911);
+emit_32(3268091970);
+emit_32(1097720555);
+emit_32(3266555911);
+emit_32(3267579911);
+emit_32(1098962122);
+emit_32(3266555911);
+emit_32(3267067904);
+emit_32(1099956067);
+emit_32(3266555911);
+emit_32(3266555911);
+emit_32(1101017750);
+emit_32(3266555911);
+emit_32(3266043904);
+emit_32(1102473436);
+emit_32(3266555911);
+emit_32(3265531911);
+emit_32(1104059040);
+emit_32(3266555911);
+emit_32(3265019904);
+emit_32(1105738491);
+emit_32(3266555911);
+emit_32(3264507911);
+emit_32(1107208438);
+emit_32(3266555911);
+emit_32(3263995904);
+emit_32(1107891008);
+emit_32(3266555911);
+emit_32(3263483911);
+emit_32(1108674504);
+emit_32(3266555911);
+emit_32(3262775296);
+emit_32(1109604067);
+emit_32(3266555911);
+emit_32(3261751309);
+emit_32(1110189120);
+emit_32(3266555911);
+emit_32(3260727296);
+emit_32(1110577670);
+emit_32(3266555911);
+emit_32(3259703309);
+emit_32(1111354953);
+emit_32(3266555911);
+emit_32(3258679296);
+emit_32(1111734537);
+emit_32(3266555911);
+emit_32(3257655309);
+emit_32(1111705518);
+emit_32(3266555911);
+emit_32(3256631296);
+emit_32(1111723527);
+emit_32(3266555911);
+emit_32(3255607309);
+emit_32(1112027955);
+emit_32(3266555911);
+emit_32(3254386688);
+emit_32(1112257410);
+emit_32(3266555911);
+emit_32(3252338714);
+emit_32(1112640297);
+emit_32(3266555911);
+emit_32(3250290688);
+emit_32(1112609967);
+emit_32(3266555911);
+emit_32(3248242714);
+emit_32(1112557696);
+emit_32(3266555911);
+emit_32(3245998080);
+emit_32(1112351231);
+emit_32(3266555911);
+emit_32(3241902132);
+emit_32(1112040774);
+emit_32(3266555911);
+emit_32(3237609472);
+emit_32(1111912900);
+emit_32(3266555911);
+emit_32(3229220864);
+emit_32(1111694639);
+emit_32(3266555911);
+emit_32(0);
+emit_32(1111678858);
+emit_32(3266555911);
+emit_32(1081737216);
+emit_32(1111401326);
+emit_32(3266555911);
+emit_32(3279552512);
+emit_32(1098118070);
+emit_32(3267067904);
+emit_32(3279296528);
+emit_32(1099747453);
+emit_32(3267067904);
+emit_32(3279040545);
+emit_32(1100611269);
+emit_32(3267067904);
+emit_32(3278784496);
+emit_32(1101443210);
+emit_32(3267067904);
+emit_32(3278528512);
+emit_32(1101232603);
+emit_32(3267067904);
+emit_32(3278272528);
+emit_32(1101611506);
+emit_32(3267067904);
+emit_32(3278016545);
+emit_32(1101693243);
+emit_32(3267067904);
+emit_32(3277760496);
+emit_32(1101466016);
+emit_32(3267067904);
+emit_32(3277504512);
+emit_32(1101285137);
+emit_32(3267067904);
+emit_32(3277248528);
+emit_32(1100667106);
+emit_32(3267067904);
+emit_32(3276992545);
+emit_32(1100084308);
+emit_32(3267067904);
+emit_32(3276736496);
+emit_32(1099746194);
+emit_32(3267067904);
+emit_32(3276480512);
+emit_32(1099973840);
+emit_32(3267067904);
+emit_32(3276224528);
+emit_32(1099985637);
+emit_32(3267067904);
+emit_32(3275968545);
+emit_32(1099784782);
+emit_32(3267067904);
+emit_32(3275712496);
+emit_32(1100330146);
+emit_32(3267067904);
+emit_32(3275456512);
+emit_32(1100180200);
+emit_32(3267067904);
+emit_32(3275200528);
+emit_32(1099997118);
+emit_32(3267067904);
+emit_32(3274944545);
+emit_32(1099326240);
+emit_32(3267067904);
+emit_32(3274688496);
+emit_32(1099003435);
+emit_32(3267067904);
+emit_32(3274432512);
+emit_32(1099218918);
+emit_32(3267067904);
+emit_32(3274176528);
+emit_32(1098944243);
+emit_32(3267067904);
+emit_32(3273920545);
+emit_32(1097839464);
+emit_32(3267067904);
+emit_32(3273664496);
+emit_32(1095942065);
+emit_32(3267067904);
+emit_32(3273408512);
+emit_32(1094895587);
+emit_32(3267067904);
+emit_32(3273152528);
+emit_32(1094953468);
+emit_32(3267067904);
+emit_32(3272896545);
+emit_32(1095007260);
+emit_32(3267067904);
+emit_32(3272640496);
+emit_32(1095264895);
+emit_32(3267067904);
+emit_32(3272384512);
+emit_32(1094611422);
+emit_32(3267067904);
+emit_32(3272128528);
+emit_32(1095079402);
+emit_32(3267067904);
+emit_32(3271872545);
+emit_32(1094441973);
+emit_32(3267067904);
+emit_32(3271616496);
+emit_32(1094236766);
+emit_32(3267067904);
+emit_32(3271163904);
+emit_32(1094323798);
+emit_32(3267067904);
+emit_32(3270651937);
+emit_32(1094165987);
+emit_32(3267067904);
+emit_32(3270139970);
+emit_32(1094226805);
+emit_32(3267067904);
+emit_32(3269627871);
+emit_32(1094579336);
+emit_32(3267067904);
+emit_32(3269115904);
+emit_32(1095352975);
+emit_32(3267067904);
+emit_32(3268603937);
+emit_32(1095436757);
+emit_32(3267067904);
+emit_32(3268091970);
+emit_32(1095935879);
+emit_32(3267067904);
+emit_32(3267579911);
+emit_32(1097439012);
+emit_32(3267067904);
+emit_32(3267067904);
+emit_32(1099223007);
+emit_32(3267067904);
+emit_32(3266555911);
+emit_32(1100974863);
+emit_32(3267067904);
+emit_32(3266043904);
+emit_32(1102518734);
+emit_32(3267067904);
+emit_32(3265531911);
+emit_32(1104318772);
+emit_32(3267067904);
+emit_32(3265019904);
+emit_32(1105646112);
+emit_32(3267067904);
+emit_32(3264507911);
+emit_32(1106403341);
+emit_32(3267067904);
+emit_32(3263995904);
+emit_32(1107600264);
+emit_32(3267067904);
+emit_32(3263483911);
+emit_32(1108414248);
+emit_32(3267067904);
+emit_32(3262775296);
+emit_32(1109181543);
+emit_32(3267067904);
+emit_32(3261751309);
+emit_32(1109764892);
+emit_32(3267067904);
+emit_32(3260727296);
+emit_32(1110292536);
+emit_32(3267067904);
+emit_32(3259703309);
+emit_32(1110846682);
+emit_32(3267067904);
+emit_32(3258679296);
+emit_32(1111130925);
+emit_32(3267067904);
+emit_32(3257655309);
+emit_32(1111171793);
+emit_32(3267067904);
+emit_32(3256631296);
+emit_32(1111317938);
+emit_32(3267067904);
+emit_32(3255607309);
+emit_32(1111635762);
+emit_32(3267067904);
+emit_32(3254386688);
+emit_32(1112164637);
+emit_32(3267067904);
+emit_32(3252338714);
+emit_32(1112290938);
+emit_32(3267067904);
+emit_32(3250290688);
+emit_32(1112478450);
+emit_32(3267067904);
+emit_32(3248242714);
+emit_32(1112372360);
+emit_32(3267067904);
+emit_32(3245998080);
+emit_32(1111917566);
+emit_32(3267067904);
+emit_32(3241902132);
+emit_32(1112023289);
+emit_32(3267067904);
+emit_32(3237609472);
+emit_32(1111655422);
+emit_32(3267067904);
+emit_32(3229220864);
+emit_32(1111168988);
+emit_32(3267067904);
+emit_32(0);
+emit_32(1110861231);
+emit_32(3267067904);
+emit_32(1081737216);
+emit_32(1110813757);
+emit_32(3267067904);
+emit_32(3279552512);
+emit_32(1100220360);
+emit_32(3267579911);
+emit_32(3279296528);
+emit_32(1101067662);
+emit_32(3267579911);
+emit_32(3279040545);
+emit_32(1102439514);
+emit_32(3267579911);
+emit_32(3278784496);
+emit_32(1103265006);
+emit_32(3267579911);
+emit_32(3278528512);
+emit_32(1103236799);
+emit_32(3267579911);
+emit_32(3278272528);
+emit_32(1103276120);
+emit_32(3267579911);
+emit_32(3278016545);
+emit_32(1103285505);
+emit_32(3267579911);
+emit_32(3277760496);
+emit_32(1102760850);
+emit_32(3267579911);
+emit_32(3277504512);
+emit_32(1101931584);
+emit_32(3267579911);
+emit_32(3277248528);
+emit_32(1101349415);
+emit_32(3267579911);
+emit_32(3276992545);
+emit_32(1100402341);
+emit_32(3267579911);
+emit_32(3276736496);
+emit_32(1100027265);
+emit_32(3267579911);
+emit_32(3276480512);
+emit_32(1100259525);
+emit_32(3267579911);
+emit_32(3276224528);
+emit_32(1100063651);
+emit_32(3267579911);
+emit_32(3275968545);
+emit_32(1099648782);
+emit_32(3267579911);
+emit_32(3275712496);
+emit_32(1100276302);
+emit_32(3267579911);
+emit_32(3275456512);
+emit_32(1100001260);
+emit_32(3267579911);
+emit_32(3275200528);
+emit_32(1099604217);
+emit_32(3267579911);
+emit_32(3274944545);
+emit_32(1099253678);
+emit_32(3267579911);
+emit_32(3274688496);
+emit_32(1098028836);
+emit_32(3267579911);
+emit_32(3274432512);
+emit_32(1097094660);
+emit_32(3267579911);
+emit_32(3274176528);
+emit_32(1096265341);
+emit_32(3267579911);
+emit_32(3273920545);
+emit_32(1095381601);
+emit_32(3267579911);
+emit_32(3273664496);
+emit_32(1094132852);
+emit_32(3267579911);
+emit_32(3273408512);
+emit_32(1094233411);
+emit_32(3267579911);
+emit_32(3273152528);
+emit_32(1094498386);
+emit_32(3267579911);
+emit_32(3272896545);
+emit_32(1093571235);
+emit_32(3267579911);
+emit_32(3272640496);
+emit_32(1093897237);
+emit_32(3267579911);
+emit_32(3272384512);
+emit_32(1093720657);
+emit_32(3267579911);
+emit_32(3272128528);
+emit_32(1094242743);
+emit_32(3267579911);
+emit_32(3271872545);
+emit_32(1094359764);
+emit_32(3267579911);
+emit_32(3271616496);
+emit_32(1093621672);
+emit_32(3267579911);
+emit_32(3271163904);
+emit_32(1093012449);
+emit_32(3267579911);
+emit_32(3270651937);
+emit_32(1092577332);
+emit_32(3267579911);
+emit_32(3270139970);
+emit_32(1093321674);
+emit_32(3267579911);
+emit_32(3269627871);
+emit_32(1093936035);
+emit_32(3267579911);
+emit_32(3269115904);
+emit_32(1093928170);
+emit_32(3267579911);
+emit_32(3268603937);
+emit_32(1094840746);
+emit_32(3267579911);
+emit_32(3268091970);
+emit_32(1094808555);
+emit_32(3267579911);
+emit_32(3267579911);
+emit_32(1096373764);
+emit_32(3267579911);
+emit_32(3267067904);
+emit_32(1099250323);
+emit_32(3267579911);
+emit_32(3266555911);
+emit_32(1100852966);
+emit_32(3267579911);
+emit_32(3266043904);
+emit_32(1102489846);
+emit_32(3267579911);
+emit_32(3265531911);
+emit_32(1104539655);
+emit_32(3267579911);
+emit_32(3265019904);
+emit_32(1105973058);
+emit_32(3267579911);
+emit_32(3264507911);
+emit_32(1106325275);
+emit_32(3267579911);
+emit_32(3263995904);
+emit_32(1107714664);
+emit_32(3267579911);
+emit_32(3263483911);
+emit_32(1108389003);
+emit_32(3267579911);
+emit_32(3262775296);
+emit_32(1108702606);
+emit_32(3267579911);
+emit_32(3261751309);
+emit_32(1109247787);
+emit_32(3267579911);
+emit_32(3260727296);
+emit_32(1109490349);
+emit_32(3267579911);
+emit_32(3259703309);
+emit_32(1110247866);
+emit_32(3267579911);
+emit_32(3258679296);
+emit_32(1110389712);
+emit_32(3267579911);
+emit_32(3257655309);
+emit_32(1110661425);
+emit_32(3267579911);
+emit_32(3256631296);
+emit_32(1111202018);
+emit_32(3267579911);
+emit_32(3255607309);
+emit_32(1111704260);
+emit_32(3267579911);
+emit_32(3254386688);
+emit_32(1112088275);
+emit_32(3267579911);
+emit_32(3252338714);
+emit_32(1111942549);
+emit_32(3267579911);
+emit_32(3250290688);
+emit_32(1111975579);
+emit_32(3267579911);
+emit_32(3248242714);
+emit_32(1111977309);
+emit_32(3267579911);
+emit_32(3245998080);
+emit_32(1111576202);
+emit_32(3267579911);
+emit_32(3241902132);
+emit_32(1111451789);
+emit_32(3267579911);
+emit_32(3237609472);
+emit_32(1111316601);
+emit_32(3267579911);
+emit_32(3229220864);
+emit_32(1111007166);
+emit_32(3267579911);
+emit_32(0);
+emit_32(1110677022);
+emit_32(3267579911);
+emit_32(1081737216);
+emit_32(1110694612);
+emit_32(3267579911);
+emit_32(3279552512);
+emit_32(1101546599);
+emit_32(3268091970);
+emit_32(3279296528);
+emit_32(1102626423);
+emit_32(3268091970);
+emit_32(3279040545);
+emit_32(1103845864);
+emit_32(3268091970);
+emit_32(3278784496);
+emit_32(1104837345);
+emit_32(3268091970);
+emit_32(3278528512);
+emit_32(1104581650);
+emit_32(3268091970);
+emit_32(3278272528);
+emit_32(1104347136);
+emit_32(3268091970);
+emit_32(3278016545);
+emit_32(1104555173);
+emit_32(3268091970);
+emit_32(3277760496);
+emit_32(1103817186);
+emit_32(3268091970);
+emit_32(3277504512);
+emit_32(1102977119);
+emit_32(3268091970);
+emit_32(3277248528);
+emit_32(1101762816);
+emit_32(3268091970);
+emit_32(3276992545);
+emit_32(1100889928);
+emit_32(3268091970);
+emit_32(3276736496);
+emit_32(1100508824);
+emit_32(3268091970);
+emit_32(3276480512);
+emit_32(1100799646);
+emit_32(3268091970);
+emit_32(3276224528);
+emit_32(1100611741);
+emit_32(3268091970);
+emit_32(3275968545);
+emit_32(1099998639);
+emit_32(3268091970);
+emit_32(3275712496);
+emit_32(1099825152);
+emit_32(3268091970);
+emit_32(3275456512);
+emit_32(1099499674);
+emit_32(3268091970);
+emit_32(3275200528);
+emit_32(1099020422);
+emit_32(3268091970);
+emit_32(3274944545);
+emit_32(1098795241);
+emit_32(3268091970);
+emit_32(3274688496);
+emit_32(1097320733);
+emit_32(3268091970);
+emit_32(3274432512);
+emit_32(1096709728);
+emit_32(3268091970);
+emit_32(3274176528);
+emit_32(1095004848);
+emit_32(3268091970);
+emit_32(3273920545);
+emit_32(1094273362);
+emit_32(3268091970);
+emit_32(3273664496);
+emit_32(1094729282);
+emit_32(3268091970);
+emit_32(3273408512);
+emit_32(1094410620);
+emit_32(3268091970);
+emit_32(3273152528);
+emit_32(1093402205);
+emit_32(3268091970);
+emit_32(3272896545);
+emit_32(1092271431);
+emit_32(3268091970);
+emit_32(3272640496);
+emit_32(1092329176);
+emit_32(3268091970);
+emit_32(3272384512);
+emit_32(1092614609);
+emit_32(3268091970);
+emit_32(3272128528);
+emit_32(1093144674);
+emit_32(3268091970);
+emit_32(3271872545);
+emit_32(1093760922);
+emit_32(3268091970);
+emit_32(3271616496);
+emit_32(1093140165);
+emit_32(3268091970);
+emit_32(3271163904);
+emit_32(1091696654);
+emit_32(3268091970);
+emit_32(3270651937);
+emit_32(1090884374);
+emit_32(3268091970);
+emit_32(3270139970);
+emit_32(1091484506);
+emit_32(3268091970);
+emit_32(3269627871);
+emit_32(1092037976);
+emit_32(3268091970);
+emit_32(3269115904);
+emit_32(1093188295);
+emit_32(3268091970);
+emit_32(3268603937);
+emit_32(1093395808);
+emit_32(3268091970);
+emit_32(3268091970);
+emit_32(1094337220);
+emit_32(3268091970);
+emit_32(3267579911);
+emit_32(1097044643);
+emit_32(3268091970);
+emit_32(3267067904);
+emit_32(1099465543);
+emit_32(3268091970);
+emit_32(3266555911);
+emit_32(1101317433);
+emit_32(3268091970);
+emit_32(3266043904);
+emit_32(1102556745);
+emit_32(3268091970);
+emit_32(3265531911);
+emit_32(1104196718);
+emit_32(3268091970);
+emit_32(3265019904);
+emit_32(1105380036);
+emit_32(3268091970);
+emit_32(3264507911);
+emit_32(1106482194);
+emit_32(3268091970);
+emit_32(3263995904);
+emit_32(1107758783);
+emit_32(3268091970);
+emit_32(3263483911);
+emit_32(1108425415);
+emit_32(3268091970);
+emit_32(3262775296);
+emit_32(1108887024);
+emit_32(3268091970);
+emit_32(3261751309);
+emit_32(1109173128);
+emit_32(3268091970);
+emit_32(3260727296);
+emit_32(1109482432);
+emit_32(3268091970);
+emit_32(3259703309);
+emit_32(1109785208);
+emit_32(3268091970);
+emit_32(3258679296);
+emit_32(1110180600);
+emit_32(3268091970);
+emit_32(3257655309);
+emit_32(1110663076);
+emit_32(3268091970);
+emit_32(3256631296);
+emit_32(1111283309);
+emit_32(3268091970);
+emit_32(3255607309);
+emit_32(1111318829);
+emit_32(3268091970);
+emit_32(3254386688);
+emit_32(1111804844);
+emit_32(3268091970);
+emit_32(3252338714);
+emit_32(1111712072);
+emit_32(3268091970);
+emit_32(3250290688);
+emit_32(1111394877);
+emit_32(3268091970);
+emit_32(3248242714);
+emit_32(1111473652);
+emit_32(3268091970);
+emit_32(3245998080);
+emit_32(1111266139);
+emit_32(3268091970);
+emit_32(3241902132);
+emit_32(1110947660);
+emit_32(3268091970);
+emit_32(3237609472);
+emit_32(1111203722);
+emit_32(3268091970);
+emit_32(3229220864);
+emit_32(1110998647);
+emit_32(3268091970);
+emit_32(0);
+emit_32(1110773727);
+emit_32(3268091970);
+emit_32(1081737216);
+emit_32(1110581209);
+emit_32(3268091970);
+emit_32(3279552512);
+emit_32(1103102267);
+emit_32(3268603937);
+emit_32(3279296528);
+emit_32(1104534831);
+emit_32(3268603937);
+emit_32(3279040545);
+emit_32(1105424810);
+emit_32(3268603937);
+emit_32(3278784496);
+emit_32(1105745989);
+emit_32(3268603937);
+emit_32(3278528512);
+emit_32(1105282046);
+emit_32(3268603937);
+emit_32(3278272528);
+emit_32(1105208436);
+emit_32(3268603937);
+emit_32(3278016545);
+emit_32(1104906394);
+emit_32(3268603937);
+emit_32(3277760496);
+emit_32(1104679063);
+emit_32(3268603937);
+emit_32(3277504512);
+emit_32(1103607680);
+emit_32(3268603937);
+emit_32(3277248528);
+emit_32(1102510188);
+emit_32(3268603937);
+emit_32(3276992545);
+emit_32(1101765385);
+emit_32(3268603937);
+emit_32(3276736496);
+emit_32(1101636986);
+emit_32(3268603937);
+emit_32(3276480512);
+emit_32(1101430207);
+emit_32(3268603937);
+emit_32(3276224528);
+emit_32(1101386534);
+emit_32(3268603937);
+emit_32(3275968545);
+emit_32(1100866283);
+emit_32(3268603937);
+emit_32(3275712496);
+emit_32(1100204370);
+emit_32(3268603937);
+emit_32(3275456512);
+emit_32(1099530240);
+emit_32(3268603937);
+emit_32(3275200528);
+emit_32(1098318663);
+emit_32(3268603937);
+emit_32(3274944545);
+emit_32(1096968831);
+emit_32(3268603937);
+emit_32(3274688496);
+emit_32(1096686764);
+emit_32(3268603937);
+emit_32(3274432512);
+emit_32(1095657901);
+emit_32(3268603937);
+emit_32(3274176528);
+emit_32(1093922718);
+emit_32(3268603937);
+emit_32(3273920545);
+emit_32(1093799720);
+emit_32(3268603937);
+emit_32(3273664496);
+emit_32(1093400527);
+emit_32(3268603937);
+emit_32(3273408512);
+emit_32(1094189371);
+emit_32(3268603937);
+emit_32(3273152528);
+emit_32(1093002383);
+emit_32(3268603937);
+emit_32(3272896545);
+emit_32(1092483505);
+emit_32(3268603937);
+emit_32(3272640496);
+emit_32(1092251707);
+emit_32(3268603937);
+emit_32(3272384512);
+emit_32(1090906562);
+emit_32(3268603937);
+emit_32(3272128528);
+emit_32(1091695983);
+emit_32(3268603937);
+emit_32(3271872545);
+emit_32(1092003666);
+emit_32(3268603937);
+emit_32(3271616496);
+emit_32(1091543866);
+emit_32(3268603937);
+emit_32(3271163904);
+emit_32(1090300789);
+emit_32(3268603937);
+emit_32(3270651937);
+emit_32(1088844569);
+emit_32(3268603937);
+emit_32(3270139970);
+emit_32(1087660223);
+emit_32(3268603937);
+emit_32(3269627871);
+emit_32(1090808153);
+emit_32(3268603937);
+emit_32(3269115904);
+emit_32(1090929306);
+emit_32(3268603937);
+emit_32(3268603937);
+emit_32(1092294940);
+emit_32(3268603937);
+emit_32(3268091970);
+emit_32(1094951266);
+emit_32(3268603937);
+emit_32(3267579911);
+emit_32(1098255958);
+emit_32(3268603937);
+emit_32(3267067904);
+emit_32(1100042365);
+emit_32(3268603937);
+emit_32(3266555911);
+emit_32(1101461717);
+emit_32(3268603937);
+emit_32(3266043904);
+emit_32(1102844841);
+emit_32(3268603937);
+emit_32(3265531911);
+emit_32(1103734872);
+emit_32(3268603937);
+emit_32(3265019904);
+emit_32(1105122348);
+emit_32(3268603937);
+emit_32(3264507911);
+emit_32(1106689969);
+emit_32(3268603937);
+emit_32(3263995904);
+emit_32(1107793438);
+emit_32(3268603937);
+emit_32(3263483911);
+emit_32(1108426280);
+emit_32(3268603937);
+emit_32(3262775296);
+emit_32(1108850534);
+emit_32(3268603937);
+emit_32(3261751309);
+emit_32(1109340009);
+emit_32(3268603937);
+emit_32(3260727296);
+emit_32(1109539003);
+emit_32(3268603937);
+emit_32(3259703309);
+emit_32(1109953715);
+emit_32(3268603937);
+emit_32(3258679296);
+emit_32(1110117502);
+emit_32(3268603937);
+emit_32(3257655309);
+emit_32(1110591485);
+emit_32(3268603937);
+emit_32(3256631296);
+emit_32(1111088562);
+emit_32(3268603937);
+emit_32(3255607309);
+emit_32(1111126206);
+emit_32(3268603937);
+emit_32(3254386688);
+emit_32(1111259559);
+emit_32(3268603937);
+emit_32(3252338714);
+emit_32(1111504191);
+emit_32(3268603937);
+emit_32(3250290688);
+emit_32(1111434068);
+emit_32(3268603937);
+emit_32(3248242714);
+emit_32(1111442299);
+emit_32(3268603937);
+emit_32(3245998080);
+emit_32(1111170010);
+emit_32(3268603937);
+emit_32(3241902132);
+emit_32(1110967137);
+emit_32(3268603937);
+emit_32(3237609472);
+emit_32(1111303415);
+emit_32(3268603937);
+emit_32(3229220864);
+emit_32(1111224012);
+emit_32(3268603937);
+emit_32(0);
+emit_32(1110873788);
+emit_32(3268603937);
+emit_32(1081737216);
+emit_32(1110663915);
+emit_32(3268603937);
+emit_32(3279552512);
+emit_32(1104677595);
+emit_32(3269115904);
+emit_32(3279296528);
+emit_32(1105454590);
+emit_32(3269115904);
+emit_32(3279040545);
+emit_32(1106154304);
+emit_32(3269115904);
+emit_32(3278784496);
+emit_32(1106277093);
+emit_32(3269115904);
+emit_32(3278528512);
+emit_32(1105875016);
+emit_32(3269115904);
+emit_32(3278272528);
+emit_32(1106034452);
+emit_32(3269115904);
+emit_32(3278016545);
+emit_32(1105655077);
+emit_32(3269115904);
+emit_32(3277760496);
+emit_32(1104930721);
+emit_32(3269115904);
+emit_32(3277504512);
+emit_32(1104001892);
+emit_32(3269115904);
+emit_32(3277248528);
+emit_32(1103101166);
+emit_32(3269115904);
+emit_32(3276992545);
+emit_32(1102785177);
+emit_32(3269115904);
+emit_32(3276736496);
+emit_32(1102764678);
+emit_32(3269115904);
+emit_32(3276480512);
+emit_32(1102751256);
+emit_32(3269115904);
+emit_32(3276224528);
+emit_32(1102164210);
+emit_32(3269115904);
+emit_32(3275968545);
+emit_32(1101552786);
+emit_32(3269115904);
+emit_32(3275712496);
+emit_32(1101117679);
+emit_32(3269115904);
+emit_32(3275456512);
+emit_32(1100386245);
+emit_32(3269115904);
+emit_32(3275200528);
+emit_32(1099326974);
+emit_32(3269115904);
+emit_32(3274944545);
+emit_32(1098796709);
+emit_32(3269115904);
+emit_32(3274688496);
+emit_32(1097716256);
+emit_32(3269115904);
+emit_32(3274432512);
+emit_32(1095916585);
+emit_32(3269115904);
+emit_32(3274176528);
+emit_32(1095486669);
+emit_32(3269115904);
+emit_32(3273920545);
+emit_32(1093398010);
+emit_32(3269115904);
+emit_32(3273664496);
+emit_32(1092921118);
+emit_32(3269115904);
+emit_32(3273408512);
+emit_32(1092252829);
+emit_32(3269115904);
+emit_32(3273152528);
+emit_32(1092749676);
+emit_32(3269115904);
+emit_32(3272896545);
+emit_32(1092530481);
+emit_32(3269115904);
+emit_32(3272640496);
+emit_32(1091486131);
+emit_32(3269115904);
+emit_32(3272384512);
+emit_32(1090876730);
+emit_32(3269115904);
+emit_32(3272128528);
+emit_32(1090142454);
+emit_32(3269115904);
+emit_32(3271872545);
+emit_32(1088793147);
+emit_32(3269115904);
+emit_32(3271616496);
+emit_32(1089015130);
+emit_32(3269115904);
+emit_32(3271163904);
+emit_32(1088303693);
+emit_32(3269115904);
+emit_32(3270651937);
+emit_32(1087535674);
+emit_32(3269115904);
+emit_32(3270139970);
+emit_32(1085670299);
+emit_32(3269115904);
+emit_32(3269627871);
+emit_32(1085625420);
+emit_32(3269115904);
+emit_32(3269115904);
+emit_32(1088308013);
+emit_32(3269115904);
+emit_32(3268603937);
+emit_32(1092417340);
+emit_32(3269115904);
+emit_32(3268091970);
+emit_32(1095410752);
+emit_32(3269115904);
+emit_32(3267579911);
+emit_32(1098094582);
+emit_32(3269115904);
+emit_32(3267067904);
+emit_32(1100161430);
+emit_32(3269115904);
+emit_32(3266555911);
+emit_32(1101552891);
+emit_32(3269115904);
+emit_32(3266043904);
+emit_32(1102765307);
+emit_32(3269115904);
+emit_32(3265531911);
+emit_32(1103641549);
+emit_32(3269115904);
+emit_32(3265019904);
+emit_32(1105704360);
+emit_32(3269115904);
+emit_32(3264507911);
+emit_32(1107288811);
+emit_32(3269115904);
+emit_32(3263995904);
+emit_32(1107972981);
+emit_32(3269115904);
+emit_32(3263483911);
+emit_32(1108646167);
+emit_32(3269115904);
+emit_32(3262775296);
+emit_32(1109009918);
+emit_32(3269115904);
+emit_32(3261751309);
+emit_32(1109314581);
+emit_32(3269115904);
+emit_32(3260727296);
+emit_32(1109742427);
+emit_32(3269115904);
+emit_32(3259703309);
+emit_32(1110003653);
+emit_32(3269115904);
+emit_32(3258679296);
+emit_32(1110284435);
+emit_32(3269115904);
+emit_32(3257655309);
+emit_32(1110677153);
+emit_32(3269115904);
+emit_32(3256631296);
+emit_32(1111084630);
+emit_32(3269115904);
+emit_32(3255607309);
+emit_32(1111141489);
+emit_32(3269115904);
+emit_32(3254386688);
+emit_32(1111299090);
+emit_32(3269115904);
+emit_32(3252338714);
+emit_32(1111545138);
+emit_32(3269115904);
+emit_32(3250290688);
+emit_32(1111299378);
+emit_32(3269115904);
+emit_32(3248242714);
+emit_32(1111477977);
+emit_32(3269115904);
+emit_32(3245998080);
+emit_32(1111335580);
+emit_32(3269115904);
+emit_32(3241902132);
+emit_32(1111332776);
+emit_32(3269115904);
+emit_32(3237609472);
+emit_32(1111510640);
+emit_32(3269115904);
+emit_32(3229220864);
+emit_32(1111358806);
+emit_32(3269115904);
+emit_32(0);
+emit_32(1111013904);
+emit_32(3269115904);
+emit_32(1081737216);
+emit_32(1110808645);
+emit_32(3269115904);
+emit_32(3279552512);
+emit_32(1105473988);
+emit_32(3269627871);
+emit_32(3279296528);
+emit_32(1106406644);
+emit_32(3269627871);
+emit_32(3279040545);
+emit_32(1106900052);
+emit_32(3269627871);
+emit_32(3278784496);
+emit_32(1106631983);
+emit_32(3269627871);
+emit_32(3278528512);
+emit_32(1106899527);
+emit_32(3269627871);
+emit_32(3278272528);
+emit_32(1107077575);
+emit_32(3269627871);
+emit_32(3278016545);
+emit_32(1106405386);
+emit_32(3269627871);
+emit_32(3277760496);
+emit_32(1105322207);
+emit_32(3269627871);
+emit_32(3277504512);
+emit_32(1104051752);
+emit_32(3269627871);
+emit_32(3277248528);
+emit_32(1103820331);
+emit_32(3269627871);
+emit_32(3276992545);
+emit_32(1103544189);
+emit_32(3269627871);
+emit_32(3276736496);
+emit_32(1104020714);
+emit_32(3269627871);
+emit_32(3276480512);
+emit_32(1104151629);
+emit_32(3269627871);
+emit_32(3276224528);
+emit_32(1103575069);
+emit_32(3269627871);
+emit_32(3275968545);
+emit_32(1102962911);
+emit_32(3269627871);
+emit_32(3275712496);
+emit_32(1102032824);
+emit_32(3269627871);
+emit_32(3275456512);
+emit_32(1101115320);
+emit_32(3269627871);
+emit_32(3275200528);
+emit_32(1100461113);
+emit_32(3269627871);
+emit_32(3274944545);
+emit_32(1099847644);
+emit_32(3269627871);
+emit_32(3274688496);
+emit_32(1099097702);
+emit_32(3269627871);
+emit_32(3274432512);
+emit_32(1097494692);
+emit_32(3269627871);
+emit_32(3274176528);
+emit_32(1096228851);
+emit_32(3269627871);
+emit_32(3273920545);
+emit_32(1094225966);
+emit_32(3269627871);
+emit_32(3273664496);
+emit_32(1093095391);
+emit_32(3269627871);
+emit_32(3273408512);
+emit_32(1092478294);
+emit_32(3269627871);
+emit_32(3273152528);
+emit_32(1092368508);
+emit_32(3269627871);
+emit_32(3272896545);
+emit_32(1091995425);
+emit_32(3269627871);
+emit_32(3272640496);
+emit_32(1090918526);
+emit_32(3269627871);
+emit_32(3272384512);
+emit_32(1090551315);
+emit_32(3269627871);
+emit_32(3272128528);
+emit_32(1089373156);
+emit_32(3269627871);
+emit_32(3271872545);
+emit_32(1087003689);
+emit_32(3269627871);
+emit_32(3271616496);
+emit_32(1086132763);
+emit_32(3269627871);
+emit_32(3271163904);
+emit_32(1085152973);
+emit_32(3269627871);
+emit_32(3270651937);
+emit_32(1085347149);
+emit_32(3269627871);
+emit_32(3270139970);
+emit_32(1084963286);
+emit_32(3269627871);
+emit_32(3269627871);
+emit_32(1086623454);
+emit_32(3269627871);
+emit_32(3269115904);
+emit_32(1089942512);
+emit_32(3269627871);
+emit_32(3268603937);
+emit_32(1092605381);
+emit_32(3269627871);
+emit_32(3268091970);
+emit_32(1095649093);
+emit_32(3269627871);
+emit_32(3267579911);
+emit_32(1098551656);
+emit_32(3269627871);
+emit_32(3267067904);
+emit_32(1100188326);
+emit_32(3269627871);
+emit_32(3266555911);
+emit_32(1101247703);
+emit_32(3269627871);
+emit_32(3266043904);
+emit_32(1102236038);
+emit_32(3269627871);
+emit_32(3265531911);
+emit_32(1104015996);
+emit_32(3269627871);
+emit_32(3265019904);
+emit_32(1106019562);
+emit_32(3269627871);
+emit_32(3264507911);
+emit_32(1107489640);
+emit_32(3269627871);
+emit_32(3263995904);
+emit_32(1107939269);
+emit_32(3269627871);
+emit_32(3263483911);
+emit_32(1108609493);
+emit_32(3269627871);
+emit_32(3262775296);
+emit_32(1108936360);
+emit_32(3269627871);
+emit_32(3261751309);
+emit_32(1109365909);
+emit_32(3269627871);
+emit_32(3260727296);
+emit_32(1109731836);
+emit_32(3269627871);
+emit_32(3259703309);
+emit_32(1110075454);
+emit_32(3269627871);
+emit_32(3258679296);
+emit_32(1110274841);
+emit_32(3269627871);
+emit_32(3257655309);
+emit_32(1110532397);
+emit_32(3269627871);
+emit_32(3256631296);
+emit_32(1110820677);
+emit_32(3269627871);
+emit_32(3255607309);
+emit_32(1110970388);
+emit_32(3269627871);
+emit_32(3254386688);
+emit_32(1111402270);
+emit_32(3269627871);
+emit_32(3252338714);
+emit_32(1111410187);
+emit_32(3269627871);
+emit_32(3250290688);
+emit_32(1111092730);
+emit_32(3269627871);
+emit_32(3248242714);
+emit_32(1111561549);
+emit_32(3269627871);
+emit_32(3245998080);
+emit_32(1111622576);
+emit_32(3269627871);
+emit_32(3241902132);
+emit_32(1111406543);
+emit_32(3269627871);
+emit_32(3237609472);
+emit_32(1111614869);
+emit_32(3269627871);
+emit_32(3229220864);
+emit_32(1111623991);
+emit_32(3269627871);
+emit_32(0);
+emit_32(1111334244);
+emit_32(3269627871);
+emit_32(1081737216);
+emit_32(1111356054);
+emit_32(3269627871);
+emit_32(3279552512);
+emit_32(1106615049);
+emit_32(3270139970);
+emit_32(3279296528);
+emit_32(1107119309);
+emit_32(3270139970);
+emit_32(3279040545);
+emit_32(1107204296);
+emit_32(3270139970);
+emit_32(3278784496);
+emit_32(1107426043);
+emit_32(3270139970);
+emit_32(3278528512);
+emit_32(1107651514);
+emit_32(3270139970);
+emit_32(3278272528);
+emit_32(1107492104);
+emit_32(3270139970);
+emit_32(3278016545);
+emit_32(1106671934);
+emit_32(3270139970);
+emit_32(3277760496);
+emit_32(1105363468);
+emit_32(3270139970);
+emit_32(3277504512);
+emit_32(1104722631);
+emit_32(3270139970);
+emit_32(3277248528);
+emit_32(1104684463);
+emit_32(3270139970);
+emit_32(3276992545);
+emit_32(1104973765);
+emit_32(3270139970);
+emit_32(3276736496);
+emit_32(1105162981);
+emit_32(3270139970);
+emit_32(3276480512);
+emit_32(1105246762);
+emit_32(3270139970);
+emit_32(3276224528);
+emit_32(1104513126);
+emit_32(3270139970);
+emit_32(3275968545);
+emit_32(1103992350);
+emit_32(3270139970);
+emit_32(3275712496);
+emit_32(1103134301);
+emit_32(3270139970);
+emit_32(3275456512);
+emit_32(1102130761);
+emit_32(3270139970);
+emit_32(3275200528);
+emit_32(1101510214);
+emit_32(3270139970);
+emit_32(3274944545);
+emit_32(1100554804);
+emit_32(3270139970);
+emit_32(3274688496);
+emit_32(1100005560);
+emit_32(3270139970);
+emit_32(3274432512);
+emit_32(1099090258);
+emit_32(3270139970);
+emit_32(3274176528);
+emit_32(1096702388);
+emit_32(3270139970);
+emit_32(3273920545);
+emit_32(1094929875);
+emit_32(3270139970);
+emit_32(3273664496);
+emit_32(1093071903);
+emit_32(3270139970);
+emit_32(3273408512);
+emit_32(1091864185);
+emit_32(3270139970);
+emit_32(3273152528);
+emit_32(1090738538);
+emit_32(3270139970);
+emit_32(3272896545);
+emit_32(1089872215);
+emit_32(3270139970);
+emit_32(3272640496);
+emit_32(1088532009);
+emit_32(3270139970);
+emit_32(3272384512);
+emit_32(1087136019);
+emit_32(3270139970);
+emit_32(3272128528);
+emit_32(1086091155);
+emit_32(3270139970);
+emit_32(3271872545);
+emit_32(1083137212);
+emit_32(3270139970);
+emit_32(3271616496);
+emit_32(1082194374);
+emit_32(3270139970);
+emit_32(3271163904);
+emit_32(1084156344);
+emit_32(3270139970);
+emit_32(3270651937);
+emit_32(1086494710);
+emit_32(3270139970);
+emit_32(3270139970);
+emit_32(1087925178);
+emit_32(3270139970);
+emit_32(3269627871);
+emit_32(1089283545);
+emit_32(3270139970);
+emit_32(3269115904);
+emit_32(1089544493);
+emit_32(3270139970);
+emit_32(3268603937);
+emit_32(1092490552);
+emit_32(3270139970);
+emit_32(3268091970);
+emit_32(1094596637);
+emit_32(3270139970);
+emit_32(3267579911);
+emit_32(1097303536);
+emit_32(3270139970);
+emit_32(3267067904);
+emit_32(1099546598);
+emit_32(3270139970);
+emit_32(3266555911);
+emit_32(1101122293);
+emit_32(3270139970);
+emit_32(3266043904);
+emit_32(1102198394);
+emit_32(3270139970);
+emit_32(3265531911);
+emit_32(1104133751);
+emit_32(3270139970);
+emit_32(3265019904);
+emit_32(1105876641);
+emit_32(3270139970);
+emit_32(3264507911);
+emit_32(1107287081);
+emit_32(3270139970);
+emit_32(3263995904);
+emit_32(1107840362);
+emit_32(3270139970);
+emit_32(3263483911);
+emit_32(1108323913);
+emit_32(3270139970);
+emit_32(3262775296);
+emit_32(1108846340);
+emit_32(3270139970);
+emit_32(3261751309);
+emit_32(1109191243);
+emit_32(3270139970);
+emit_32(3260727296);
+emit_32(1109548335);
+emit_32(3270139970);
+emit_32(3259703309);
+emit_32(1110053775);
+emit_32(3270139970);
+emit_32(3258679296);
+emit_32(1110107410);
+emit_32(3270139970);
+emit_32(3257655309);
+emit_32(1110399726);
+emit_32(3270139970);
+emit_32(3256631296);
+emit_32(1110760515);
+emit_32(3270139970);
+emit_32(3255607309);
+emit_32(1110729294);
+emit_32(3270139970);
+emit_32(3254386688);
+emit_32(1110963755);
+emit_32(3270139970);
+emit_32(3252338714);
+emit_32(1110772128);
+emit_32(3270139970);
+emit_32(3250290688);
+emit_32(1110896358);
+emit_32(3270139970);
+emit_32(3248242714);
+emit_32(1111339775);
+emit_32(3270139970);
+emit_32(3245998080);
+emit_32(1111522542);
+emit_32(3270139970);
+emit_32(3241902132);
+emit_32(1111498739);
+emit_32(3270139970);
+emit_32(3237609472);
+emit_32(1111764002);
+emit_32(3270139970);
+emit_32(3229220864);
+emit_32(1111826209);
+emit_32(3270139970);
+emit_32(0);
+emit_32(1111701062);
+emit_32(3270139970);
+emit_32(1081737216);
+emit_32(1111592455);
+emit_32(3270139970);
+emit_32(3279552512);
+emit_32(1107165027);
+emit_32(3270651937);
+emit_32(3279296528);
+emit_32(1106980268);
+emit_32(3270651937);
+emit_32(3279040545);
+emit_32(1107315707);
+emit_32(3270651937);
+emit_32(3278784496);
+emit_32(1107598272);
+emit_32(3270651937);
+emit_32(3278528512);
+emit_32(1107717469);
+emit_32(3270651937);
+emit_32(3278272528);
+emit_32(1107286557);
+emit_32(3270651937);
+emit_32(3278016545);
+emit_32(1106402712);
+emit_32(3270651937);
+emit_32(3277760496);
+emit_32(1105497896);
+emit_32(3270651937);
+emit_32(3277504512);
+emit_32(1105374898);
+emit_32(3270651937);
+emit_32(3277248528);
+emit_32(1105640659);
+emit_32(3270651937);
+emit_32(3276992545);
+emit_32(1105948416);
+emit_32(3270651937);
+emit_32(3276736496);
+emit_32(1105871923);
+emit_32(3270651937);
+emit_32(3276480512);
+emit_32(1105415268);
+emit_32(3270651937);
+emit_32(3276224528);
+emit_32(1104908386);
+emit_32(3270651937);
+emit_32(3275968545);
+emit_32(1104625166);
+emit_32(3270651937);
+emit_32(3275712496);
+emit_32(1103529981);
+emit_32(3270651937);
+emit_32(3275456512);
+emit_32(1102284535);
+emit_32(3270651937);
+emit_32(3275200528);
+emit_32(1101814668);
+emit_32(3270651937);
+emit_32(3274944545);
+emit_32(1101354395);
+emit_32(3270651937);
+emit_32(3274688496);
+emit_32(1100467772);
+emit_32(3270651937);
+emit_32(3274432512);
+emit_32(1099331902);
+emit_32(3270651937);
+emit_32(3274176528);
+emit_32(1097334469);
+emit_32(3270651937);
+emit_32(3273920545);
+emit_32(1095774713);
+emit_32(3270651937);
+emit_32(3273664496);
+emit_32(1093969274);
+emit_32(3270651937);
+emit_32(3273408512);
+emit_32(1092236870);
+emit_32(3270651937);
+emit_32(3273152528);
+emit_32(1091177242);
+emit_32(3270651937);
+emit_32(3272896545);
+emit_32(1089194521);
+emit_32(3270651937);
+emit_32(3272640496);
+emit_32(1087253250);
+emit_32(3270651937);
+emit_32(3272384512);
+emit_32(1085293042);
+emit_32(3270651937);
+emit_32(3272128528);
+emit_32(1086332055);
+emit_32(3270651937);
+emit_32(3271872545);
+emit_32(1083552217);
+emit_32(3270651937);
+emit_32(3271616496);
+emit_32(1081840228);
+emit_32(3270651937);
+emit_32(3271163904);
+emit_32(1085052373);
+emit_32(3270651937);
+emit_32(3270651937);
+emit_32(1088324601);
+emit_32(3270651937);
+emit_32(3270139970);
+emit_32(1090526128);
+emit_32(3270651937);
+emit_32(3269627871);
+emit_32(1090035353);
+emit_32(3270651937);
+emit_32(3269115904);
+emit_32(1091146088);
+emit_32(3270651937);
+emit_32(3268603937);
+emit_32(1092321972);
+emit_32(3270651937);
+emit_32(3268091970);
+emit_32(1094166931);
+emit_32(3270651937);
+emit_32(3267579911);
+emit_32(1096361705);
+emit_32(3270651937);
+emit_32(3267067904);
+emit_32(1098923167);
+emit_32(3270651937);
+emit_32(3266555911);
+emit_32(1100222510);
+emit_32(3270651937);
+emit_32(3266043904);
+emit_32(1102327683);
+emit_32(3270651937);
+emit_32(3265531911);
+emit_32(1104008865);
+emit_32(3270651937);
+emit_32(3265019904);
+emit_32(1105745465);
+emit_32(3270651937);
+emit_32(3264507911);
+emit_32(1107240472);
+emit_32(3270651937);
+emit_32(3263995904);
+emit_32(1107738152);
+emit_32(3270651937);
+emit_32(3263483911);
+emit_32(1108317333);
+emit_32(3270651937);
+emit_32(3262775296);
+emit_32(1108718230);
+emit_32(3270651937);
+emit_32(3261751309);
+emit_32(1109166313);
+emit_32(3270651937);
+emit_32(3260727296);
+emit_32(1109572767);
+emit_32(3270651937);
+emit_32(3259703309);
+emit_32(1109886999);
+emit_32(3270651937);
+emit_32(3258679296);
+emit_32(1110175934);
+emit_32(3270651937);
+emit_32(3257655309);
+emit_32(1110012409);
+emit_32(3270651937);
+emit_32(3256631296);
+emit_32(1110458420);
+emit_32(3270651937);
+emit_32(3255607309);
+emit_32(1110277908);
+emit_32(3270651937);
+emit_32(3254386688);
+emit_32(1110242571);
+emit_32(3270651937);
+emit_32(3252338714);
+emit_32(1110493941);
+emit_32(3270651937);
+emit_32(3250290688);
+emit_32(1110776139);
+emit_32(3270651937);
+emit_32(3248242714);
+emit_32(1111135643);
+emit_32(3270651937);
+emit_32(3245998080);
+emit_32(1111317021);
+emit_32(3270651937);
+emit_32(3241902132);
+emit_32(1111525111);
+emit_32(3270651937);
+emit_32(3237609472);
+emit_32(1111847102);
+emit_32(3270651937);
+emit_32(3229220864);
+emit_32(1111929704);
+emit_32(3270651937);
+emit_32(0);
+emit_32(1111847364);
+emit_32(3270651937);
+emit_32(1081737216);
+emit_32(1111930149);
+emit_32(3270651937);
+emit_32(3279552512);
+emit_32(1106982994);
+emit_32(3271163904);
+emit_32(3279296528);
+emit_32(1106990334);
+emit_32(3271163904);
+emit_32(3279040545);
+emit_32(1107378569);
+emit_32(3271163904);
+emit_32(3278784496);
+emit_32(1107553734);
+emit_32(3271163904);
+emit_32(3278528512);
+emit_32(1107478761);
+emit_32(3271163904);
+emit_32(3278272528);
+emit_32(1106962389);
+emit_32(3271163904);
+emit_32(3278016545);
+emit_32(1105953607);
+emit_32(3271163904);
+emit_32(3277760496);
+emit_32(1105995497);
+emit_32(3271163904);
+emit_32(3277504512);
+emit_32(1105958325);
+emit_32(3271163904);
+emit_32(3277248528);
+emit_32(1106168041);
+emit_32(3271163904);
+emit_32(3276992545);
+emit_32(1106461590);
+emit_32(3271163904);
+emit_32(3276736496);
+emit_32(1106400248);
+emit_32(3271163904);
+emit_32(3276480512);
+emit_32(1105590904);
+emit_32(3271163904);
+emit_32(3276224528);
+emit_32(1105294315);
+emit_32(3271163904);
+emit_32(3275968545);
+emit_32(1104823661);
+emit_32(3271163904);
+emit_32(3275712496);
+emit_32(1103994185);
+emit_32(3271163904);
+emit_32(3275456512);
+emit_32(1102728764);
+emit_32(3271163904);
+emit_32(3275200528);
+emit_32(1102137996);
+emit_32(3271163904);
+emit_32(3274944545);
+emit_32(1101349782);
+emit_32(3271163904);
+emit_32(3274688496);
+emit_32(1100398356);
+emit_32(3271163904);
+emit_32(3274432512);
+emit_32(1099098489);
+emit_32(3271163904);
+emit_32(3274176528);
+emit_32(1097575747);
+emit_32(3271163904);
+emit_32(3273920545);
+emit_32(1095747135);
+emit_32(3271163904);
+emit_32(3273664496);
+emit_32(1094011427);
+emit_32(3271163904);
+emit_32(3273408512);
+emit_32(1092817099);
+emit_32(3271163904);
+emit_32(3273152528);
+emit_32(1090935010);
+emit_32(3271163904);
+emit_32(3272896545);
+emit_32(1086813205);
+emit_32(3271163904);
+emit_32(3272640496);
+emit_32(1085254874);
+emit_32(3271163904);
+emit_32(3272384512);
+emit_32(1084610859);
+emit_32(3271163904);
+emit_32(3272128528);
+emit_32(1085403226);
+emit_32(3271163904);
+emit_32(3271872545);
+emit_32(1085803741);
+emit_32(3271163904);
+emit_32(3271616496);
+emit_32(1084901902);
+emit_32(3271163904);
+emit_32(3271163904);
+emit_32(1086653402);
+emit_32(3271163904);
+emit_32(3270651937);
+emit_32(1089541201);
+emit_32(3271163904);
+emit_32(3270139970);
+emit_32(1090924587);
+emit_32(3271163904);
+emit_32(3269627871);
+emit_32(1091193002);
+emit_32(3271163904);
+emit_32(3269115904);
+emit_32(1091042709);
+emit_32(3271163904);
+emit_32(3268603937);
+emit_32(1091824318);
+emit_32(3271163904);
+emit_32(3268091970);
+emit_32(1094207721);
+emit_32(3271163904);
+emit_32(3267579911);
+emit_32(1096193199);
+emit_32(3271163904);
+emit_32(3267067904);
+emit_32(1098383045);
+emit_32(3271163904);
+emit_32(3266555911);
+emit_32(1099615542);
+emit_32(3271163904);
+emit_32(3266043904);
+emit_32(1101433038);
+emit_32(3271163904);
+emit_32(3265531911);
+emit_32(1103595045);
+emit_32(3271163904);
+emit_32(3265019904);
+emit_32(1105129950);
+emit_32(3271163904);
+emit_32(3264507911);
+emit_32(1106326061);
+emit_32(3271163904);
+emit_32(3263995904);
+emit_32(1107411652);
+emit_32(3271163904);
+emit_32(3263483911);
+emit_32(1107887050);
+emit_32(3271163904);
+emit_32(3262775296);
+emit_32(1108492236);
+emit_32(3271163904);
+emit_32(3261751309);
+emit_32(1109105757);
+emit_32(3271163904);
+emit_32(3260727296);
+emit_32(1109424656);
+emit_32(3271163904);
+emit_32(3259703309);
+emit_32(1109901784);
+emit_32(3271163904);
+emit_32(3258679296);
+emit_32(1109885321);
+emit_32(3271163904);
+emit_32(3257655309);
+emit_32(1109822564);
+emit_32(3271163904);
+emit_32(3256631296);
+emit_32(1109824163);
+emit_32(3271163904);
+emit_32(3255607309);
+emit_32(1109730315);
+emit_32(3271163904);
+emit_32(3254386688);
+emit_32(1109803113);
+emit_32(3271163904);
+emit_32(3252338714);
+emit_32(1109995186);
+emit_32(3271163904);
+emit_32(3250290688);
+emit_32(1110434618);
+emit_32(3271163904);
+emit_32(3248242714);
+emit_32(1111024783);
+emit_32(3271163904);
+emit_32(3245998080);
+emit_32(1111309785);
+emit_32(3271163904);
+emit_32(3241902132);
+emit_32(1111384208);
+emit_32(3271163904);
+emit_32(3237609472);
+emit_32(1111783952);
+emit_32(3271163904);
+emit_32(3229220864);
+emit_32(1111918930);
+emit_32(3271163904);
+emit_32(0);
+emit_32(1112106100);
+emit_32(3271163904);
+emit_32(1081737216);
+emit_32(1112094042);
+emit_32(3271163904);
+emit_start(Landscape06Vtx)
+emit_32(3279552512);
+emit_32(1085562023);
+emit_32(1131812880);
+emit_32(3279552512);
+emit_32(1090639836);
+emit_32(1132068864);
+emit_32(3279296528);
+emit_32(1088557385);
+emit_32(1131812880);
+emit_32(3279296528);
+emit_32(1092330749);
+emit_32(1132068864);
+emit_32(3279040545);
+emit_32(1092455865);
+emit_32(1131812880);
+emit_32(3279040545);
+emit_32(1094355780);
+emit_32(1132068864);
+emit_32(3278784496);
+emit_32(1095594567);
+emit_32(1131812880);
+emit_32(3278784496);
+emit_32(1095302539);
+emit_32(1132068864);
+emit_32(3278528512);
+emit_32(1096797808);
+emit_32(1131812880);
+emit_32(3278528512);
+emit_32(1095711379);
+emit_32(1132068864);
+emit_32(3278272528);
+emit_32(1098618136);
+emit_32(1131812880);
+emit_32(3278272528);
+emit_32(1098003041);
+emit_32(1132068864);
+emit_32(3278016545);
+emit_32(1099699061);
+emit_32(1131812880);
+emit_32(3278016545);
+emit_32(1099454009);
+emit_32(1132068864);
+emit_32(3277760496);
+emit_32(1100182821);
+emit_32(1131812880);
+emit_32(3277760496);
+emit_32(1099951977);
+emit_32(1132068864);
+emit_32(3277504512);
+emit_32(1100520096);
+emit_32(1131812880);
+emit_32(3277504512);
+emit_32(1100371355);
+emit_32(1132068864);
+emit_32(3277248528);
+emit_32(1100966579);
+emit_32(1131812880);
+emit_32(3277248528);
+emit_32(1100780352);
+emit_32(1132068864);
+emit_32(3276992545);
+emit_32(1100860306);
+emit_32(1131812880);
+emit_32(3276992545);
+emit_32(1101050203);
+emit_32(1132068864);
+emit_32(3276736496);
+emit_32(1100465622);
+emit_32(1131812880);
+emit_32(3276736496);
+emit_32(1100893074);
+emit_32(1132068864);
+emit_32(3276480512);
+emit_32(1100581280);
+emit_32(1131812880);
+emit_32(3276480512);
+emit_32(1101018641);
+emit_32(1132068864);
+emit_32(3276224528);
+emit_32(1099877895);
+emit_32(1131812880);
+emit_32(3276224528);
+emit_32(1100648651);
+emit_32(1132068864);
+emit_32(3275968545);
+emit_32(1098108633);
+emit_32(1131812880);
+emit_32(3275968545);
+emit_32(1099969017);
+emit_32(1132068864);
+emit_32(3275712496);
+emit_32(1097534433);
+emit_32(1131812880);
+emit_32(3275712496);
+emit_32(1099061736);
+emit_32(1132068864);
+emit_32(3275456512);
+emit_32(1095741263);
+emit_32(1131812880);
+emit_32(3275456512);
+emit_32(1097819121);
+emit_32(1132068864);
+emit_32(3275200528);
+emit_32(1094351061);
+emit_32(1131812880);
+emit_32(3275200528);
+emit_32(1095413373);
+emit_32(1132068864);
+emit_32(3274944545);
+emit_32(1095198940);
+emit_32(1131812880);
+emit_32(3274944545);
+emit_32(1096465724);
+emit_32(1132068864);
+emit_32(3274688496);
+emit_32(1095888378);
+emit_32(1131812880);
+emit_32(3274688496);
+emit_32(1097378510);
+emit_32(1132068864);
+emit_32(3274432512);
+emit_32(1096087503);
+emit_32(1131812880);
+emit_32(3274432512);
+emit_32(1098800064);
+emit_32(1132068864);
+emit_32(3274176528);
+emit_32(1096238288);
+emit_32(1131812880);
+emit_32(3274176528);
+emit_32(1098870004);
+emit_32(1132068864);
+emit_32(3273920545);
+emit_32(1096234303);
+emit_32(1131812880);
+emit_32(3273920545);
+emit_32(1098365115);
+emit_32(1132068864);
+emit_32(3273664496);
+emit_32(1097531182);
+emit_32(1131812880);
+emit_32(3273664496);
+emit_32(1097973681);
+emit_32(1132068864);
+emit_32(3273408512);
+emit_32(1096980680);
+emit_32(1131812880);
+emit_32(3273408512);
+emit_32(1097661835);
+emit_32(1132068864);
+emit_32(3273152528);
+emit_32(1096822135);
+emit_32(1131812880);
+emit_32(3273152528);
+emit_32(1097231709);
+emit_32(1132068864);
+emit_32(3272896545);
+emit_32(1095973103);
+emit_32(1131812880);
+emit_32(3272896545);
+emit_32(1097116261);
+emit_32(1132068864);
+emit_32(3272640496);
+emit_32(1095621621);
+emit_32(1131812880);
+emit_32(3272640496);
+emit_32(1096358035);
+emit_32(1132068864);
+emit_32(3272384512);
+emit_32(1095942380);
+emit_32(1131812880);
+emit_32(3272384512);
+emit_32(1097122133);
+emit_32(1132068864);
+emit_32(3272128528);
+emit_32(1095707289);
+emit_32(1131812880);
+emit_32(3272128528);
+emit_32(1097935303);
+emit_32(1132068864);
+emit_32(3271872545);
+emit_32(1096204524);
+emit_32(1131812880);
+emit_32(3271872545);
+emit_32(1097370855);
+emit_32(1132068864);
+emit_32(3271616496);
+emit_32(1096900883);
+emit_32(1131812880);
+emit_32(3271616496);
+emit_32(1098608280);
+emit_32(1132068864);
+emit_32(3271163904);
+emit_32(1096266285);
+emit_32(1131812880);
+emit_32(3271163904);
+emit_32(1098342256);
+emit_32(1132068864);
+emit_32(3270651937);
+emit_32(1095366397);
+emit_32(1131812880);
+emit_32(3270651937);
+emit_32(1098053793);
+emit_32(1132068864);
+emit_32(3270139970);
+emit_32(1094774581);
+emit_32(1131812880);
+emit_32(3270139970);
+emit_32(1098324640);
+emit_32(1132068864);
+emit_32(3269627871);
+emit_32(1095465488);
+emit_32(1131812880);
+emit_32(3269627871);
+emit_32(1098790417);
+emit_32(1132068864);
+emit_32(3269115904);
+emit_32(1095080136);
+emit_32(1131812880);
+emit_32(3269115904);
+emit_32(1098071199);
+emit_32(1132068864);
+emit_32(3268603937);
+emit_32(1095775027);
+emit_32(1131812880);
+emit_32(3268603937);
+emit_32(1098042258);
+emit_32(1132068864);
+emit_32(3268091970);
+emit_32(1096498335);
+emit_32(1131812880);
+emit_32(3268091970);
+emit_32(1097596823);
+emit_32(1132068864);
+emit_32(3267579911);
+emit_32(1096881170);
+emit_32(1131812880);
+emit_32(3267579911);
+emit_32(1097962986);
+emit_32(1132068864);
+emit_32(3267067904);
+emit_32(1096646604);
+emit_32(1131812880);
+emit_32(3267067904);
+emit_32(1097510525);
+emit_32(1132068864);
+emit_32(3266555911);
+emit_32(1097473930);
+emit_32(1131812880);
+emit_32(3266555911);
+emit_32(1096970614);
+emit_32(1132068864);
+emit_32(3266043904);
+emit_32(1096072928);
+emit_32(1131812880);
+emit_32(3266043904);
+emit_32(1096851181);
+emit_32(1132068864);
+emit_32(3265531911);
+emit_32(1095562061);
+emit_32(1131812880);
+emit_32(3265531911);
+emit_32(1096578341);
+emit_32(1132068864);
+emit_32(3265019904);
+emit_32(1094504258);
+emit_32(1131812880);
+emit_32(3265019904);
+emit_32(1095833747);
+emit_32(1132068864);
+emit_32(3264507911);
+emit_32(1094381679);
+emit_32(1131812880);
+emit_32(3264507911);
+emit_32(1095590058);
+emit_32(1132068864);
+emit_32(3263995904);
+emit_32(1093698952);
+emit_32(1131812880);
+emit_32(3263995904);
+emit_32(1095093872);
+emit_32(1132068864);
+emit_32(3263483911);
+emit_32(1094601146);
+emit_32(1131812880);
+emit_32(3263483911);
+emit_32(1093864941);
+emit_32(1132068864);
+emit_32(3262775296);
+emit_32(1093294516);
+emit_32(1131812880);
+emit_32(3262775296);
+emit_32(1092542435);
+emit_32(1132068864);
+emit_32(3261751309);
+emit_32(1091098766);
+emit_32(1131812880);
+emit_32(3261751309);
+emit_32(1091449232);
+emit_32(1132068864);
+emit_32(3260727296);
+emit_32(1088637685);
+emit_32(1131812880);
+emit_32(3260727296);
+emit_32(1089462705);
+emit_32(1132068864);
+emit_32(3259703309);
+emit_32(1088371137);
+emit_32(1131812880);
+emit_32(3259703309);
+emit_32(1086825892);
+emit_32(1132068864);
+emit_32(3258679296);
+emit_32(1090482591);
+emit_32(1131812880);
+emit_32(3258679296);
+emit_32(1088189482);
+emit_32(1132068864);
+emit_32(3257655309);
+emit_32(1091688768);
+emit_32(1131812880);
+emit_32(3257655309);
+emit_32(1089036752);
+emit_32(1132068864);
+emit_32(3256631296);
+emit_32(1091298897);
+emit_32(1131812880);
+emit_32(3256631296);
+emit_32(1088194704);
+emit_32(1132068864);
+emit_32(3255607309);
+emit_32(1089392345);
+emit_32(1131812880);
+emit_32(3255607309);
+emit_32(1087706759);
+emit_32(1132068864);
+emit_32(3254386688);
+emit_32(1089840108);
+emit_32(1131812880);
+emit_32(3254386688);
+emit_32(1087906072);
+emit_32(1132068864);
+emit_32(3252338714);
+emit_32(1088432604);
+emit_32(1131812880);
+emit_32(3252338714);
+emit_32(1086651325);
+emit_32(1132068864);
+emit_32(3250290688);
+emit_32(1085565840);
+emit_32(1131812880);
+emit_32(3250290688);
+emit_32(1085752989);
+emit_32(1132068864);
+emit_32(3248242714);
+emit_32(1084476831);
+emit_32(1131812880);
+emit_32(3248242714);
+emit_32(1082147671);
+emit_32(1132068864);
+emit_32(3245998080);
+emit_32(1080454304);
+emit_32(1131812880);
+emit_32(3245998080);
+emit_32(1080053035);
+emit_32(1132068864);
+emit_32(3241902132);
+emit_32(1078160817);
+emit_32(1131812880);
+emit_32(3241902132);
+emit_32(1078352203);
+emit_32(1132068864);
+emit_32(3237609472);
+emit_32(1075763269);
+emit_32(1131812880);
+emit_32(3237609472);
+emit_32(1075673385);
+emit_32(1132068864);
+emit_32(3229220864);
+emit_32(1071152764);
+emit_32(1131812880);
+emit_32(3229220864);
+emit_32(1076050788);
+emit_32(1132068864);
+emit_32(0);
+emit_32(1066573591);
+emit_32(1131812880);
+emit_32(0);
+emit_32(1074500112);
+emit_32(1132068864);
+emit_32(1081737216);
+emit_32(1055384530);
+emit_32(1131812880);
+emit_32(1081737216);
+emit_32(1069740626);
+emit_32(1132068864);
+emit_32(3279552512);
+emit_32(1084680359);
+emit_32(1131556897);
+emit_32(3279296528);
+emit_32(1089160463);
+emit_32(1131556897);
+emit_32(3279040545);
+emit_32(1092855687);
+emit_32(1131556897);
+emit_32(3278784496);
+emit_32(1095505229);
+emit_32(1131556897);
+emit_32(3278528512);
+emit_32(1097158309);
+emit_32(1131556897);
+emit_32(3278272528);
+emit_32(1099096077);
+emit_32(1131556897);
+emit_32(3278016545);
+emit_32(1099862691);
+emit_32(1131556897);
+emit_32(3277760496);
+emit_32(1100235198);
+emit_32(1131556897);
+emit_32(3277504512);
+emit_32(1100353529);
+emit_32(1131556897);
+emit_32(3277248528);
+emit_32(1100744753);
+emit_32(1131556897);
+emit_32(3276992545);
+emit_32(1100450208);
+emit_32(1131556897);
+emit_32(3276736496);
+emit_32(1099944218);
+emit_32(1131556897);
+emit_32(3276480512);
+emit_32(1099578632);
+emit_32(1131556897);
+emit_32(3276224528);
+emit_32(1098095211);
+emit_32(1131556897);
+emit_32(3275968545);
+emit_32(1096681416);
+emit_32(1131556897);
+emit_32(3275712496);
+emit_32(1095628436);
+emit_32(1131556897);
+emit_32(3275456512);
+emit_32(1094488739);
+emit_32(1131556897);
+emit_32(3275200528);
+emit_32(1095225678);
+emit_32(1131556897);
+emit_32(3274944545);
+emit_32(1095742416);
+emit_32(1131556897);
+emit_32(3274688496);
+emit_32(1096313995);
+emit_32(1131556897);
+emit_32(3274432512);
+emit_32(1096609379);
+emit_32(1131556897);
+emit_32(3274176528);
+emit_32(1096643458);
+emit_32(1131556897);
+emit_32(3273920545);
+emit_32(1096377644);
+emit_32(1131556897);
+emit_32(3273664496);
+emit_32(1096630875);
+emit_32(1131556897);
+emit_32(3273408512);
+emit_32(1096367787);
+emit_32(1131556897);
+emit_32(3273152528);
+emit_32(1095764646);
+emit_32(1131556897);
+emit_32(3272896545);
+emit_32(1095369648);
+emit_32(1131556897);
+emit_32(3272640496);
+emit_32(1095202610);
+emit_32(1131556897);
+emit_32(3272384512);
+emit_32(1095378141);
+emit_32(1131556897);
+emit_32(3272128528);
+emit_32(1094896425);
+emit_32(1131556897);
+emit_32(3271872545);
+emit_32(1094491570);
+emit_32(1131556897);
+emit_32(3271616496);
+emit_32(1094140717);
+emit_32(1131556897);
+emit_32(3271163904);
+emit_32(1093673576);
+emit_32(1131556897);
+emit_32(3270651937);
+emit_32(1092775680);
+emit_32(1131556897);
+emit_32(3270139970);
+emit_32(1093246176);
+emit_32(1131556897);
+emit_32(3269627871);
+emit_32(1092835135);
+emit_32(1131556897);
+emit_32(3269115904);
+emit_32(1093700839);
+emit_32(1131556897);
+emit_32(3268603937);
+emit_32(1093815868);
+emit_32(1131556897);
+emit_32(3268091970);
+emit_32(1095128475);
+emit_32(1131556897);
+emit_32(3267579911);
+emit_32(1096138044);
+emit_32(1131556897);
+emit_32(3267067904);
+emit_32(1097063727);
+emit_32(1131556897);
+emit_32(3266555911);
+emit_32(1096790468);
+emit_32(1131556897);
+emit_32(3266043904);
+emit_32(1096105433);
+emit_32(1131556897);
+emit_32(3265531911);
+emit_32(1094675490);
+emit_32(1131556897);
+emit_32(3265019904);
+emit_32(1094279548);
+emit_32(1131556897);
+emit_32(3264507911);
+emit_32(1094433060);
+emit_32(1131556897);
+emit_32(3263995904);
+emit_32(1094244316);
+emit_32(1131556897);
+emit_32(3263483911);
+emit_32(1095101212);
+emit_32(1131556897);
+emit_32(3262775296);
+emit_32(1093870184);
+emit_32(1131556897);
+emit_32(3261751309);
+emit_32(1092196416);
+emit_32(1131556897);
+emit_32(3260727296);
+emit_32(1090926800);
+emit_32(1131556897);
+emit_32(3259703309);
+emit_32(1089315547);
+emit_32(1131556897);
+emit_32(3258679296);
+emit_32(1090882864);
+emit_32(1131556897);
+emit_32(3257655309);
+emit_32(1092302982);
+emit_32(1131556897);
+emit_32(3256631296);
+emit_32(1091679478);
+emit_32(1131556897);
+emit_32(3255607309);
+emit_32(1090777587);
+emit_32(1131556897);
+emit_32(3254386688);
+emit_32(1090588833);
+emit_32(1131556897);
+emit_32(3252338714);
+emit_32(1088391584);
+emit_32(1131556897);
+emit_32(3250290688);
+emit_32(1088187762);
+emit_32(1131556897);
+emit_32(3248242714);
+emit_32(1086074735);
+emit_32(1131556897);
+emit_32(3245998080);
+emit_32(1083035311);
+emit_32(1131556897);
+emit_32(3241902132);
+emit_32(1080697784);
+emit_32(1131556897);
+emit_32(3237609472);
+emit_32(1077335797);
+emit_32(1131556897);
+emit_32(3229220864);
+emit_32(1072342604);
+emit_32(1131556897);
+emit_32(0);
+emit_32(1073908380);
+emit_32(1131556897);
+emit_32(1081737216);
+emit_32(1074643096);
+emit_32(1131556897);
+emit_32(3279552512);
+emit_32(1085160041);
+emit_32(1131300848);
+emit_32(3279296528);
+emit_32(1090327885);
+emit_32(1131300848);
+emit_32(3279040545);
+emit_32(1093025976);
+emit_32(1131300848);
+emit_32(3278784496);
+emit_32(1095630848);
+emit_32(1131300848);
+emit_32(3278528512);
+emit_32(1097676095);
+emit_32(1131300848);
+emit_32(3278272528);
+emit_32(1099190973);
+emit_32(1131300848);
+emit_32(3278016545);
+emit_32(1099857081);
+emit_32(1131300848);
+emit_32(3277760496);
+emit_32(1100491260);
+emit_32(1131300848);
+emit_32(3277504512);
+emit_32(1100352848);
+emit_32(1131300848);
+emit_32(3277248528);
+emit_32(1100472753);
+emit_32(1131300848);
+emit_32(3276992545);
+emit_32(1100152989);
+emit_32(1131300848);
+emit_32(3276736496);
+emit_32(1099265684);
+emit_32(1131300848);
+emit_32(3276480512);
+emit_32(1098708314);
+emit_32(1131300848);
+emit_32(3276224528);
+emit_32(1096067580);
+emit_32(1131300848);
+emit_32(3275968545);
+emit_32(1096230633);
+emit_32(1131300848);
+emit_32(3275712496);
+emit_32(1096388025);
+emit_32(1131300848);
+emit_32(3275456512);
+emit_32(1094867799);
+emit_32(1131300848);
+emit_32(3275200528);
+emit_32(1096132172);
+emit_32(1131300848);
+emit_32(3274944545);
+emit_32(1097306682);
+emit_32(1131300848);
+emit_32(3274688496);
+emit_32(1097887069);
+emit_32(1131300848);
+emit_32(3274432512);
+emit_32(1097633838);
+emit_32(1131300848);
+emit_32(3274176528);
+emit_32(1098457389);
+emit_32(1131300848);
+emit_32(3273920545);
+emit_32(1097090466);
+emit_32(1131300848);
+emit_32(3273664496);
+emit_32(1096891446);
+emit_32(1131300848);
+emit_32(3273408512);
+emit_32(1095233962);
+emit_32(1131300848);
+emit_32(3273152528);
+emit_32(1094867799);
+emit_32(1131300848);
+emit_32(3272896545);
+emit_32(1094576295);
+emit_32(1131300848);
+emit_32(3272640496);
+emit_32(1093957845);
+emit_32(1131300848);
+emit_32(3272384512);
+emit_32(1093473193);
+emit_32(1131300848);
+emit_32(3272128528);
+emit_32(1093446664);
+emit_32(1131300848);
+emit_32(3271872545);
+emit_32(1093505489);
+emit_32(1131300848);
+emit_32(3271616496);
+emit_32(1092573494);
+emit_32(1131300848);
+emit_32(3271163904);
+emit_32(1092718533);
+emit_32(1131300848);
+emit_32(3270651937);
+emit_32(1091299642);
+emit_32(1131300848);
+emit_32(3270139970);
+emit_32(1091752270);
+emit_32(1131300848);
+emit_32(3269627871);
+emit_32(1092863027);
+emit_32(1131300848);
+emit_32(3269115904);
+emit_32(1093352607);
+emit_32(1131300848);
+emit_32(3268603937);
+emit_32(1094334389);
+emit_32(1131300848);
+emit_32(3268091970);
+emit_32(1095530080);
+emit_32(1131300848);
+emit_32(3267579911);
+emit_32(1096764359);
+emit_32(1131300848);
+emit_32(3267067904);
+emit_32(1096925944);
+emit_32(1131300848);
+emit_32(3266555911);
+emit_32(1096040107);
+emit_32(1131300848);
+emit_32(3266043904);
+emit_32(1094881536);
+emit_32(1131300848);
+emit_32(3265531911);
+emit_32(1094389753);
+emit_32(1131300848);
+emit_32(3265019904);
+emit_32(1094053370);
+emit_32(1131300848);
+emit_32(3264507911);
+emit_32(1094865283);
+emit_32(1131300848);
+emit_32(3263995904);
+emit_32(1095186461);
+emit_32(1131300848);
+emit_32(3263483911);
+emit_32(1095388208);
+emit_32(1131300848);
+emit_32(3262775296);
+emit_32(1094366475);
+emit_32(1131300848);
+emit_32(3261751309);
+emit_32(1093486930);
+emit_32(1131300848);
+emit_32(3260727296);
+emit_32(1091443444);
+emit_32(1131300848);
+emit_32(3259703309);
+emit_32(1090412169);
+emit_32(1131300848);
+emit_32(3258679296);
+emit_32(1091017376);
+emit_32(1131300848);
+emit_32(3257655309);
+emit_32(1091659503);
+emit_32(1131300848);
+emit_32(3256631296);
+emit_32(1091788813);
+emit_32(1131300848);
+emit_32(3255607309);
+emit_32(1091703155);
+emit_32(1131300848);
+emit_32(3254386688);
+emit_32(1091097539);
+emit_32(1131300848);
+emit_32(3252338714);
+emit_32(1090228501);
+emit_32(1131300848);
+emit_32(3250290688);
+emit_32(1089127831);
+emit_32(1131300848);
+emit_32(3248242714);
+emit_32(1087112238);
+emit_32(1131300848);
+emit_32(3245998080);
+emit_32(1085471698);
+emit_32(1131300848);
+emit_32(3241902132);
+emit_32(1083846552);
+emit_32(1131300848);
+emit_32(3237609472);
+emit_32(1082879010);
+emit_32(1131300848);
+emit_32(3229220864);
+emit_32(1080627152);
+emit_32(1131300848);
+emit_32(0);
+emit_32(1080885311);
+emit_32(1131300848);
+emit_32(1081737216);
+emit_32(1078120510);
+emit_32(1131300848);
+emit_32(3279552512);
+emit_32(1086174748);
+emit_32(1131044864);
+emit_32(3279296528);
+emit_32(1090628574);
+emit_32(1131044864);
+emit_32(3279040545);
+emit_32(1092984871);
+emit_32(1131044864);
+emit_32(3278784496);
+emit_32(1095235954);
+emit_32(1131044864);
+emit_32(3278528512);
+emit_32(1097962986);
+emit_32(1131044864);
+emit_32(3278272528);
+emit_32(1098907753);
+emit_32(1131044864);
+emit_32(3278016545);
+emit_32(1099567464);
+emit_32(1131044864);
+emit_32(3277760496);
+emit_32(1100053322);
+emit_32(1131044864);
+emit_32(3277504512);
+emit_32(1100365745);
+emit_32(1131044864);
+emit_32(3277248528);
+emit_32(1100199389);
+emit_32(1131044864);
+emit_32(3276992545);
+emit_32(1100122476);
+emit_32(1131044864);
+emit_32(3276736496);
+emit_32(1098964533);
+emit_32(1131044864);
+emit_32(3276480512);
+emit_32(1098061028);
+emit_32(1131044864);
+emit_32(3276224528);
+emit_32(1096998401);
+emit_32(1131044864);
+emit_32(3275968545);
+emit_32(1096347969);
+emit_32(1131044864);
+emit_32(3275712496);
+emit_32(1096743597);
+emit_32(1131044864);
+emit_32(3275456512);
+emit_32(1096079639);
+emit_32(1131044864);
+emit_32(3275200528);
+emit_32(1096454190);
+emit_32(1131044864);
+emit_32(3274944545);
+emit_32(1097972947);
+emit_32(1131044864);
+emit_32(3274688496);
+emit_32(1098482241);
+emit_32(1131044864);
+emit_32(3274432512);
+emit_32(1098243165);
+emit_32(1131044864);
+emit_32(3274176528);
+emit_32(1097818073);
+emit_32(1131044864);
+emit_32(3273920545);
+emit_32(1097259811);
+emit_32(1131044864);
+emit_32(3273664496);
+emit_32(1096971138);
+emit_32(1131044864);
+emit_32(3273408512);
+emit_32(1095776495);
+emit_32(1131044864);
+emit_32(3273152528);
+emit_32(1094346657);
+emit_32(1131044864);
+emit_32(3272896545);
+emit_32(1094305658);
+emit_32(1131044864);
+emit_32(3272640496);
+emit_32(1093779797);
+emit_32(1131044864);
+emit_32(3272384512);
+emit_32(1093535059);
+emit_32(1131044864);
+emit_32(3272128528);
+emit_32(1092859566);
+emit_32(1131044864);
+emit_32(3271872545);
+emit_32(1092315471);
+emit_32(1131044864);
+emit_32(3271616496);
+emit_32(1091613628);
+emit_32(1131044864);
+emit_32(3271163904);
+emit_32(1092129045);
+emit_32(1131044864);
+emit_32(3270651937);
+emit_32(1090623961);
+emit_32(1131044864);
+emit_32(3270139970);
+emit_32(1091745329);
+emit_32(1131044864);
+emit_32(3269627871);
+emit_32(1092278802);
+emit_32(1131044864);
+emit_32(3269115904);
+emit_32(1092897106);
+emit_32(1131044864);
+emit_32(3268603937);
+emit_32(1093630060);
+emit_32(1131044864);
+emit_32(3268091970);
+emit_32(1095021835);
+emit_32(1131044864);
+emit_32(3267579911);
+emit_32(1096071460);
+emit_32(1131044864);
+emit_32(3267067904);
+emit_32(1095859647);
+emit_32(1131044864);
+emit_32(3266555911);
+emit_32(1095186671);
+emit_32(1131044864);
+emit_32(3266043904);
+emit_32(1094964478);
+emit_32(1131044864);
+emit_32(3265531911);
+emit_32(1094463993);
+emit_32(1131044864);
+emit_32(3265019904);
+emit_32(1094678322);
+emit_32(1131044864);
+emit_32(3264507911);
+emit_32(1094959340);
+emit_32(1131044864);
+emit_32(3263995904);
+emit_32(1095934725);
+emit_32(1131044864);
+emit_32(3263483911);
+emit_32(1096292499);
+emit_32(1131044864);
+emit_32(3262775296);
+emit_32(1095947833);
+emit_32(1131044864);
+emit_32(3261751309);
+emit_32(1094626102);
+emit_32(1131044864);
+emit_32(3260727296);
+emit_32(1092638002);
+emit_32(1131044864);
+emit_32(3259703309);
+emit_32(1091654302);
+emit_32(1131044864);
+emit_32(3258679296);
+emit_32(1090981043);
+emit_32(1131044864);
+emit_32(3257655309);
+emit_32(1091856132);
+emit_32(1131044864);
+emit_32(3256631296);
+emit_32(1092849815);
+emit_32(1131044864);
+emit_32(3255607309);
+emit_32(1092381563);
+emit_32(1131044864);
+emit_32(3254386688);
+emit_32(1091755762);
+emit_32(1131044864);
+emit_32(3252338714);
+emit_32(1091392210);
+emit_32(1131044864);
+emit_32(3250290688);
+emit_32(1090522762);
+emit_32(1131044864);
+emit_32(3248242714);
+emit_32(1089201336);
+emit_32(1131044864);
+emit_32(3245998080);
+emit_32(1088158150);
+emit_32(1131044864);
+emit_32(3241902132);
+emit_32(1086827927);
+emit_32(1131044864);
+emit_32(3237609472);
+emit_32(1085289603);
+emit_32(1131044864);
+emit_32(3229220864);
+emit_32(1084371008);
+emit_32(1131044864);
+emit_32(0);
+emit_32(1084371155);
+emit_32(1131044864);
+emit_32(1081737216);
+emit_32(1084629524);
+emit_32(1131044864);
+emit_32(3279552512);
+emit_32(1084191198);
+emit_32(1130788880);
+emit_32(3279296528);
+emit_32(1090263187);
+emit_32(1130788880);
+emit_32(3279040545);
+emit_32(1093579624);
+emit_32(1130788880);
+emit_32(3278784496);
+emit_32(1095609772);
+emit_32(1130788880);
+emit_32(3278528512);
+emit_32(1097395392);
+emit_32(1130788880);
+emit_32(3278272528);
+emit_32(1098942775);
+emit_32(1130788880);
+emit_32(3278016545);
+emit_32(1099952973);
+emit_32(1130788880);
+emit_32(3277760496);
+emit_32(1100137051);
+emit_32(1130788880);
+emit_32(3277504512);
+emit_32(1100188117);
+emit_32(1130788880);
+emit_32(3277248528);
+emit_32(1100449631);
+emit_32(1130788880);
+emit_32(3276992545);
+emit_32(1099596091);
+emit_32(1130788880);
+emit_32(3276736496);
+emit_32(1098204263);
+emit_32(1130788880);
+emit_32(3276480512);
+emit_32(1098412510);
+emit_32(1130788880);
+emit_32(3276224528);
+emit_32(1097801505);
+emit_32(1130788880);
+emit_32(3275968545);
+emit_32(1096603507);
+emit_32(1130788880);
+emit_32(3275712496);
+emit_32(1095928224);
+emit_32(1130788880);
+emit_32(3275456512);
+emit_32(1096222035);
+emit_32(1130788880);
+emit_32(3275200528);
+emit_32(1097042546);
+emit_32(1130788880);
+emit_32(3274944545);
+emit_32(1097761554);
+emit_32(1130788880);
+emit_32(3274688496);
+emit_32(1098099720);
+emit_32(1130788880);
+emit_32(3274432512);
+emit_32(1097722862);
+emit_32(1130788880);
+emit_32(3274176528);
+emit_32(1096956563);
+emit_32(1130788880);
+emit_32(3273920545);
+emit_32(1096582850);
+emit_32(1130788880);
+emit_32(3273664496);
+emit_32(1095826303);
+emit_32(1130788880);
+emit_32(3273408512);
+emit_32(1095071538);
+emit_32(1130788880);
+emit_32(3273152528);
+emit_32(1094227434);
+emit_32(1130788880);
+emit_32(3272896545);
+emit_32(1094210132);
+emit_32(1130788880);
+emit_32(3272640496);
+emit_32(1093761027);
+emit_32(1130788880);
+emit_32(3272384512);
+emit_32(1093810520);
+emit_32(1130788880);
+emit_32(3272128528);
+emit_32(1092656772);
+emit_32(1130788880);
+emit_32(3271872545);
+emit_32(1091138738);
+emit_32(1130788880);
+emit_32(3271616496);
+emit_32(1089927035);
+emit_32(1130788880);
+emit_32(3271163904);
+emit_32(1089350360);
+emit_32(1130788880);
+emit_32(3270651937);
+emit_32(1090698210);
+emit_32(1130788880);
+emit_32(3270139970);
+emit_32(1090875577);
+emit_32(1130788880);
+emit_32(3269627871);
+emit_32(1091800075);
+emit_32(1130788880);
+emit_32(3269115904);
+emit_32(1092846354);
+emit_32(1130788880);
+emit_32(3268603937);
+emit_32(1094213173);
+emit_32(1130788880);
+emit_32(3268091970);
+emit_32(1095490444);
+emit_32(1130788880);
+emit_32(3267579911);
+emit_32(1095492331);
+emit_32(1130788880);
+emit_32(3267067904);
+emit_32(1095128475);
+emit_32(1130788880);
+emit_32(3266555911);
+emit_32(1094457387);
+emit_32(1130788880);
+emit_32(3266043904);
+emit_32(1093000915);
+emit_32(1130788880);
+emit_32(3265531911);
+emit_32(1092702700);
+emit_32(1130788880);
+emit_32(3265019904);
+emit_32(1094131489);
+emit_32(1130788880);
+emit_32(3264507911);
+emit_32(1094959759);
+emit_32(1130788880);
+emit_32(3263995904);
+emit_32(1096392743);
+emit_32(1130788880);
+emit_32(3263483911);
+emit_32(1097205809);
+emit_32(1130788880);
+emit_32(3262775296);
+emit_32(1096775893);
+emit_32(1130788880);
+emit_32(3261751309);
+emit_32(1095617217);
+emit_32(1130788880);
+emit_32(3260727296);
+emit_32(1094159591);
+emit_32(1130788880);
+emit_32(3259703309);
+emit_32(1092609701);
+emit_32(1130788880);
+emit_32(3258679296);
+emit_32(1091241058);
+emit_32(1130788880);
+emit_32(3257655309);
+emit_32(1092023201);
+emit_32(1130788880);
+emit_32(3256631296);
+emit_32(1093109862);
+emit_32(1130788880);
+emit_32(3255607309);
+emit_32(1093719399);
+emit_32(1130788880);
+emit_32(3254386688);
+emit_32(1093231077);
+emit_32(1130788880);
+emit_32(3252338714);
+emit_32(1093489761);
+emit_32(1130788880);
+emit_32(3250290688);
+emit_32(1092575423);
+emit_32(1130788880);
+emit_32(3248242714);
+emit_32(1091158975);
+emit_32(1130788880);
+emit_32(3245998080);
+emit_32(1089311227);
+emit_32(1130788880);
+emit_32(3241902132);
+emit_32(1087230748);
+emit_32(1130788880);
+emit_32(3237609472);
+emit_32(1087094936);
+emit_32(1130788880);
+emit_32(3229220864);
+emit_32(1087427439);
+emit_32(1130788880);
+emit_32(0);
+emit_32(1086716610);
+emit_32(1130788880);
+emit_32(1081737216);
+emit_32(1086083564);
+emit_32(1130788880);
+emit_32(3279552512);
+emit_32(1084064572);
+emit_32(1130532897);
+emit_32(3279296528);
+emit_32(1091219604);
+emit_32(1130532897);
+emit_32(3279040545);
+emit_32(1094461581);
+emit_32(1130532897);
+emit_32(3278784496);
+emit_32(1096451988);
+emit_32(1130532897);
+emit_32(3278528512);
+emit_32(1098531104);
+emit_32(1130532897);
+emit_32(3278272528);
+emit_32(1099322203);
+emit_32(1130532897);
+emit_32(3278016545);
+emit_32(1099673423);
+emit_32(1130532897);
+emit_32(3277760496);
+emit_32(1100210032);
+emit_32(1130532897);
+emit_32(3277504512);
+emit_32(1100192468);
+emit_32(1130532897);
+emit_32(3277248528);
+emit_32(1099743153);
+emit_32(1130532897);
+emit_32(3276992545);
+emit_32(1099219128);
+emit_32(1130532897);
+emit_32(3276736496);
+emit_32(1097733767);
+emit_32(1130532897);
+emit_32(3276480512);
+emit_32(1098251554);
+emit_32(1130532897);
+emit_32(3276224528);
+emit_32(1098330197);
+emit_32(1130532897);
+emit_32(3275968545);
+emit_32(1097354078);
+emit_32(1130532897);
+emit_32(3275712496);
+emit_32(1095686947);
+emit_32(1130532897);
+emit_32(3275456512);
+emit_32(1096170655);
+emit_32(1130532897);
+emit_32(3275200528);
+emit_32(1096848035);
+emit_32(1130532897);
+emit_32(3274944545);
+emit_32(1098161481);
+emit_32(1130532897);
+emit_32(3274688496);
+emit_32(1097829712);
+emit_32(1130532897);
+emit_32(3274432512);
+emit_32(1097057436);
+emit_32(1130532897);
+emit_32(3274176528);
+emit_32(1096473484);
+emit_32(1130532897);
+emit_32(3273920545);
+emit_32(1095842765);
+emit_32(1130532897);
+emit_32(3273664496);
+emit_32(1095539517);
+emit_32(1130532897);
+emit_32(3273408512);
+emit_32(1095213200);
+emit_32(1130532897);
+emit_32(3273152528);
+emit_32(1094205414);
+emit_32(1130532897);
+emit_32(3272896545);
+emit_32(1093845647);
+emit_32(1130532897);
+emit_32(3272640496);
+emit_32(1093546174);
+emit_32(1130532897);
+emit_32(3272384512);
+emit_32(1092377452);
+emit_32(1130532897);
+emit_32(3272128528);
+emit_32(1091313106);
+emit_32(1130532897);
+emit_32(3271872545);
+emit_32(1087954328);
+emit_32(1130532897);
+emit_32(3271616496);
+emit_32(1087060480);
+emit_32(1130532897);
+emit_32(3271163904);
+emit_32(1087580678);
+emit_32(1130532897);
+emit_32(3270651937);
+emit_32(1090126768);
+emit_32(1130532897);
+emit_32(3270139970);
+emit_32(1090624715);
+emit_32(1130532897);
+emit_32(3269627871);
+emit_32(1091647664);
+emit_32(1130532897);
+emit_32(3269115904);
+emit_32(1092856211);
+emit_32(1130532897);
+emit_32(3268603937);
+emit_32(1094224917);
+emit_32(1130532897);
+emit_32(3268091970);
+emit_32(1095671952);
+emit_32(1130532897);
+emit_32(3267579911);
+emit_32(1095628646);
+emit_32(1130532897);
+emit_32(3267067904);
+emit_32(1095567829);
+emit_32(1130532897);
+emit_32(3266555911);
+emit_32(1093630270);
+emit_32(1130532897);
+emit_32(3266043904);
+emit_32(1092684245);
+emit_32(1130532897);
+emit_32(3265531911);
+emit_32(1091861343);
+emit_32(1130532897);
+emit_32(3265019904);
+emit_32(1092755023);
+emit_32(1130532897);
+emit_32(3264507911);
+emit_32(1094570528);
+emit_32(1130532897);
+emit_32(3263995904);
+emit_32(1095357275);
+emit_32(1130532897);
+emit_32(3263483911);
+emit_32(1096480299);
+emit_32(1130532897);
+emit_32(3262775296);
+emit_32(1096746428);
+emit_32(1130532897);
+emit_32(3261751309);
+emit_32(1096329514);
+emit_32(1130532897);
+emit_32(3260727296);
+emit_32(1095223896);
+emit_32(1130532897);
+emit_32(3259703309);
+emit_32(1093955643);
+emit_32(1130532897);
+emit_32(3258679296);
+emit_32(1093246281);
+emit_32(1130532897);
+emit_32(3257655309);
+emit_32(1094172174);
+emit_32(1130532897);
+emit_32(3256631296);
+emit_32(1095280414);
+emit_32(1130532897);
+emit_32(3255607309);
+emit_32(1095624976);
+emit_32(1130532897);
+emit_32(3254386688);
+emit_32(1095264161);
+emit_32(1130532897);
+emit_32(3252338714);
+emit_32(1094911210);
+emit_32(1130532897);
+emit_32(3250290688);
+emit_32(1094226385);
+emit_32(1130532897);
+emit_32(3248242714);
+emit_32(1092124945);
+emit_32(1130532897);
+emit_32(3245998080);
+emit_32(1090831631);
+emit_32(1130532897);
+emit_32(3241902132);
+emit_32(1089226670);
+emit_32(1130532897);
+emit_32(3237609472);
+emit_32(1089629994);
+emit_32(1130532897);
+emit_32(3229220864);
+emit_32(1089284992);
+emit_32(1130532897);
+emit_32(0);
+emit_32(1088387495);
+emit_32(1130532897);
+emit_32(1081737216);
+emit_32(1088205504);
+emit_32(1130532897);
+emit_32(3279552512);
+emit_32(1083530931);
+emit_32(1130276848);
+emit_32(3279296528);
+emit_32(1090306850);
+emit_32(1130276848);
+emit_32(3279040545);
+emit_32(1093521008);
+emit_32(1130276848);
+emit_32(3278784496);
+emit_32(1096939995);
+emit_32(1130276848);
+emit_32(3278528512);
+emit_32(1098488322);
+emit_32(1130276848);
+emit_32(3278272528);
+emit_32(1099450129);
+emit_32(1130276848);
+emit_32(3278016545);
+emit_32(1099687369);
+emit_32(1130276848);
+emit_32(3277760496);
+emit_32(1099754740);
+emit_32(1130276848);
+emit_32(3277504512);
+emit_32(1099338246);
+emit_32(1130276848);
+emit_32(3277248528);
+emit_32(1099121348);
+emit_32(1130276848);
+emit_32(3276992545);
+emit_32(1097937191);
+emit_32(1130276848);
+emit_32(3276736496);
+emit_32(1097116051);
+emit_32(1130276848);
+emit_32(3276480512);
+emit_32(1097449498);
+emit_32(1130276848);
+emit_32(3276224528);
+emit_32(1097296721);
+emit_32(1130276848);
+emit_32(3275968545);
+emit_32(1096895116);
+emit_32(1130276848);
+emit_32(3275712496);
+emit_32(1095191390);
+emit_32(1130276848);
+emit_32(3275456512);
+emit_32(1095800403);
+emit_32(1130276848);
+emit_32(3275200528);
+emit_32(1096784282);
+emit_32(1130276848);
+emit_32(3274944545);
+emit_32(1097651454);
+emit_32(1130276848);
+emit_32(3274688496);
+emit_32(1097454846);
+emit_32(1130276848);
+emit_32(3274432512);
+emit_32(1096258211);
+emit_32(1130276848);
+emit_32(3274176528);
+emit_32(1096116863);
+emit_32(1130276848);
+emit_32(3273920545);
+emit_32(1096517943);
+emit_32(1130276848);
+emit_32(3273664496);
+emit_32(1095318897);
+emit_32(1130276848);
+emit_32(3273408512);
+emit_32(1094673498);
+emit_32(1130276848);
+emit_32(3273152528);
+emit_32(1093918733);
+emit_32(1130276848);
+emit_32(3272896545);
+emit_32(1093483364);
+emit_32(1130276848);
+emit_32(3272640496);
+emit_32(1092914826);
+emit_32(1130276848);
+emit_32(3272384512);
+emit_32(1091000567);
+emit_32(1130276848);
+emit_32(3272128528);
+emit_32(1089935654);
+emit_32(1130276848);
+emit_32(3271872545);
+emit_32(1086818510);
+emit_32(1130276848);
+emit_32(3271616496);
+emit_32(1085690389);
+emit_32(1130276848);
+emit_32(3271163904);
+emit_32(1086952309);
+emit_32(1130276848);
+emit_32(3270651937);
+emit_32(1088839431);
+emit_32(1130276848);
+emit_32(3270139970);
+emit_32(1089612819);
+emit_32(1130276848);
+emit_32(3269627871);
+emit_32(1091440686);
+emit_32(1130276848);
+emit_32(3269115904);
+emit_32(1092535473);
+emit_32(1130276848);
+emit_32(3268603937);
+emit_32(1092891758);
+emit_32(1130276848);
+emit_32(3268091970);
+emit_32(1094112510);
+emit_32(1130276848);
+emit_32(3267579911);
+emit_32(1095020472);
+emit_32(1130276848);
+emit_32(3267067904);
+emit_32(1094302617);
+emit_32(1130276848);
+emit_32(3266555911);
+emit_32(1094287622);
+emit_32(1130276848);
+emit_32(3266043904);
+emit_32(1092792667);
+emit_32(1130276848);
+emit_32(3265531911);
+emit_32(1093051561);
+emit_32(1130276848);
+emit_32(3265019904);
+emit_32(1093418353);
+emit_32(1130276848);
+emit_32(3264507911);
+emit_32(1094221667);
+emit_32(1130276848);
+emit_32(3263995904);
+emit_32(1095632001);
+emit_32(1130276848);
+emit_32(3263483911);
+emit_32(1097732614);
+emit_32(1130276848);
+emit_32(3262775296);
+emit_32(1098628832);
+emit_32(1130276848);
+emit_32(3261751309);
+emit_32(1097948306);
+emit_32(1130276848);
+emit_32(3260727296);
+emit_32(1097305319);
+emit_32(1130276848);
+emit_32(3259703309);
+emit_32(1096485333);
+emit_32(1130276848);
+emit_32(3258679296);
+emit_32(1095850210);
+emit_32(1130276848);
+emit_32(3257655309);
+emit_32(1095872964);
+emit_32(1130276848);
+emit_32(3256631296);
+emit_32(1096804414);
+emit_32(1130276848);
+emit_32(3255607309);
+emit_32(1096692741);
+emit_32(1130276848);
+emit_32(3254386688);
+emit_32(1096946077);
+emit_32(1130276848);
+emit_32(3252338714);
+emit_32(1096420006);
+emit_32(1130276848);
+emit_32(3250290688);
+emit_32(1094944660);
+emit_32(1130276848);
+emit_32(3248242714);
+emit_32(1093505489);
+emit_32(1130276848);
+emit_32(3245998080);
+emit_32(1092313867);
+emit_32(1130276848);
+emit_32(3241902132);
+emit_32(1091062559);
+emit_32(1130276848);
+emit_32(3237609472);
+emit_32(1091612432);
+emit_32(1130276848);
+emit_32(3229220864);
+emit_32(1091011671);
+emit_32(1130276848);
+emit_32(0);
+emit_32(1090792142);
+emit_32(1130276848);
+emit_32(1081737216);
+emit_32(1088030748);
+emit_32(1130276848);
+emit_32(3279552512);
+emit_32(1084583764);
+emit_32(1130020864);
+emit_32(3279296528);
+emit_32(1087682243);
+emit_32(1130020864);
+emit_32(3279040545);
+emit_32(1092094075);
+emit_32(1130020864);
+emit_32(3278784496);
+emit_32(1095249691);
+emit_32(1130020864);
+emit_32(3278528512);
+emit_32(1098698877);
+emit_32(1130020864);
+emit_32(3278272528);
+emit_32(1099753796);
+emit_32(1130020864);
+emit_32(3278016545);
+emit_32(1100023333);
+emit_32(1130020864);
+emit_32(3277760496);
+emit_32(1099595042);
+emit_32(1130020864);
+emit_32(3277504512);
+emit_32(1099115371);
+emit_32(1130020864);
+emit_32(3277248528);
+emit_32(1098920493);
+emit_32(1130020864);
+emit_32(3276992545);
+emit_32(1097370855);
+emit_32(1130020864);
+emit_32(3276736496);
+emit_32(1096229480);
+emit_32(1130020864);
+emit_32(3276480512);
+emit_32(1096179987);
+emit_32(1130020864);
+emit_32(3276224528);
+emit_32(1096332765);
+emit_32(1130020864);
+emit_32(3275968545);
+emit_32(1094920228);
+emit_32(1130020864);
+emit_32(3275712496);
+emit_32(1094538966);
+emit_32(1130020864);
+emit_32(3275456512);
+emit_32(1096079324);
+emit_32(1130020864);
+emit_32(3275200528);
+emit_32(1096062022);
+emit_32(1130020864);
+emit_32(3274944545);
+emit_32(1097415524);
+emit_32(1130020864);
+emit_32(3274688496);
+emit_32(1097262642);
+emit_32(1130020864);
+emit_32(3274432512);
+emit_32(1096083309);
+emit_32(1130020864);
+emit_32(3274176528);
+emit_32(1097096338);
+emit_32(1130020864);
+emit_32(3273920545);
+emit_32(1097389520);
+emit_32(1130020864);
+emit_32(3273664496);
+emit_32(1096628987);
+emit_32(1130020864);
+emit_32(3273408512);
+emit_32(1095157311);
+emit_32(1130020864);
+emit_32(3273152528);
+emit_32(1093144150);
+emit_32(1130020864);
+emit_32(3272896545);
+emit_32(1092252305);
+emit_32(1130020864);
+emit_32(3272640496);
+emit_32(1090906174);
+emit_32(1130020864);
+emit_32(3272384512);
+emit_32(1089256785);
+emit_32(1130020864);
+emit_32(3272128528);
+emit_32(1086933413);
+emit_32(1130020864);
+emit_32(3271872545);
+emit_32(1085005690);
+emit_32(1130020864);
+emit_32(3271616496);
+emit_32(1084837205);
+emit_32(1130020864);
+emit_32(3271163904);
+emit_32(1085479500);
+emit_32(1130020864);
+emit_32(3270651937);
+emit_32(1086647781);
+emit_32(1130020864);
+emit_32(3270139970);
+emit_32(1088754391);
+emit_32(1130020864);
+emit_32(3269627871);
+emit_32(1090605474);
+emit_32(1130020864);
+emit_32(3269115904);
+emit_32(1091545984);
+emit_32(1130020864);
+emit_32(3268603937);
+emit_32(1092272018);
+emit_32(1130020864);
+emit_32(3268091970);
+emit_32(1093427580);
+emit_32(1130020864);
+emit_32(3267579911);
+emit_32(1094111042);
+emit_32(1130020864);
+emit_32(3267067904);
+emit_32(1094388915);
+emit_32(1130020864);
+emit_32(3266555911);
+emit_32(1094139458);
+emit_32(1130020864);
+emit_32(3266043904);
+emit_32(1094235718);
+emit_32(1130020864);
+emit_32(3265531911);
+emit_32(1094648752);
+emit_32(1130020864);
+emit_32(3265019904);
+emit_32(1095187300);
+emit_32(1130020864);
+emit_32(3264507911);
+emit_32(1096097674);
+emit_32(1130020864);
+emit_32(3263995904);
+emit_32(1097057016);
+emit_32(1130020864);
+emit_32(3263483911);
+emit_32(1097881092);
+emit_32(1130020864);
+emit_32(3262775296);
+emit_32(1098962856);
+emit_32(1130020864);
+emit_32(3261751309);
+emit_32(1098940835);
+emit_32(1130020864);
+emit_32(3260727296);
+emit_32(1098504366);
+emit_32(1130020864);
+emit_32(3259703309);
+emit_32(1098210030);
+emit_32(1130020864);
+emit_32(3258679296);
+emit_32(1097752537);
+emit_32(1130020864);
+emit_32(3257655309);
+emit_32(1096972082);
+emit_32(1130020864);
+emit_32(3256631296);
+emit_32(1097685323);
+emit_32(1130020864);
+emit_32(3255607309);
+emit_32(1097690566);
+emit_32(1130020864);
+emit_32(3254386688);
+emit_32(1097717514);
+emit_32(1130020864);
+emit_32(3252338714);
+emit_32(1096801373);
+emit_32(1130020864);
+emit_32(3250290688);
+emit_32(1096574462);
+emit_32(1130020864);
+emit_32(3248242714);
+emit_32(1095368389);
+emit_32(1130020864);
+emit_32(3245998080);
+emit_32(1094028204);
+emit_32(1130020864);
+emit_32(3241902132);
+emit_32(1093145513);
+emit_32(1130020864);
+emit_32(3237609472);
+emit_32(1092561058);
+emit_32(1130020864);
+emit_32(3229220864);
+emit_32(1091353465);
+emit_32(1130020864);
+emit_32(0);
+emit_32(1090850872);
+emit_32(1130020864);
+emit_32(1081737216);
+emit_32(1090545737);
+emit_32(1130020864);
+emit_32(3279552512);
+emit_32(1083020778);
+emit_32(1129764880);
+emit_32(3279296528);
+emit_32(1086653695);
+emit_32(1129764880);
+emit_32(3279040545);
+emit_32(1091034835);
+emit_32(1129764880);
+emit_32(3278784496);
+emit_32(1094988805);
+emit_32(1129764880);
+emit_32(3278528512);
+emit_32(1098825335);
+emit_32(1129764880);
+emit_32(3278272528);
+emit_32(1099793485);
+emit_32(1129764880);
+emit_32(3278016545);
+emit_32(1100052431);
+emit_32(1129764880);
+emit_32(3277760496);
+emit_32(1099921673);
+emit_32(1129764880);
+emit_32(3277504512);
+emit_32(1099421608);
+emit_32(1129764880);
+emit_32(3277248528);
+emit_32(1098552915);
+emit_32(1129764880);
+emit_32(3276992545);
+emit_32(1097228773);
+emit_32(1129764880);
+emit_32(3276736496);
+emit_32(1095528822);
+emit_32(1129764880);
+emit_32(3276480512);
+emit_32(1095513932);
+emit_32(1129764880);
+emit_32(3276224528);
+emit_32(1095608094);
+emit_32(1129764880);
+emit_32(3275968545);
+emit_32(1094888666);
+emit_32(1129764880);
+emit_32(3275712496);
+emit_32(1094960493);
+emit_32(1129764880);
+emit_32(3275456512);
+emit_32(1095322147);
+emit_32(1129764880);
+emit_32(3275200528);
+emit_32(1095300232);
+emit_32(1129764880);
+emit_32(3274944545);
+emit_32(1096422103);
+emit_32(1129764880);
+emit_32(3274688496);
+emit_32(1096640836);
+emit_32(1129764880);
+emit_32(3274432512);
+emit_32(1097230031);
+emit_32(1129764880);
+emit_32(3274176528);
+emit_32(1097125279);
+emit_32(1129764880);
+emit_32(3273920545);
+emit_32(1097162084);
+emit_32(1129764880);
+emit_32(3273664496);
+emit_32(1096846777);
+emit_32(1129764880);
+emit_32(3273408512);
+emit_32(1095743360);
+emit_32(1129764880);
+emit_32(3273152528);
+emit_32(1093469838);
+emit_32(1129764880);
+emit_32(3272896545);
+emit_32(1092165598);
+emit_32(1129764880);
+emit_32(3272640496);
+emit_32(1090712261);
+emit_32(1129764880);
+emit_32(3272384512);
+emit_32(1088210873);
+emit_32(1129764880);
+emit_32(3272128528);
+emit_32(1085889095);
+emit_32(1129764880);
+emit_32(3271872545);
+emit_32(1083392330);
+emit_32(1129764880);
+emit_32(3271616496);
+emit_32(1083388073);
+emit_32(1129764880);
+emit_32(3271163904);
+emit_32(1084653180);
+emit_32(1129764880);
+emit_32(3270651937);
+emit_32(1086692618);
+emit_32(1129764880);
+emit_32(3270139970);
+emit_32(1088701795);
+emit_32(1129764880);
+emit_32(3269627871);
+emit_32(1090628616);
+emit_32(1129764880);
+emit_32(3269115904);
+emit_32(1091284553);
+emit_32(1129764880);
+emit_32(3268603937);
+emit_32(1092579376);
+emit_32(1129764880);
+emit_32(3268091970);
+emit_32(1093773715);
+emit_32(1129764880);
+emit_32(3267579911);
+emit_32(1094376856);
+emit_32(1129764880);
+emit_32(3267067904);
+emit_32(1094634281);
+emit_32(1129764880);
+emit_32(3266555911);
+emit_32(1094720789);
+emit_32(1129764880);
+emit_32(3266043904);
+emit_32(1095562586);
+emit_32(1129764880);
+emit_32(3265531911);
+emit_32(1096146957);
+emit_32(1129764880);
+emit_32(3265019904);
+emit_32(1096371248);
+emit_32(1129764880);
+emit_32(3264507911);
+emit_32(1097603115);
+emit_32(1129764880);
+emit_32(3263995904);
+emit_32(1098307233);
+emit_32(1129764880);
+emit_32(3263483911);
+emit_32(1098369729);
+emit_32(1129764880);
+emit_32(3262775296);
+emit_32(1099083075);
+emit_32(1129764880);
+emit_32(3261751309);
+emit_32(1099129946);
+emit_32(1129764880);
+emit_32(3260727296);
+emit_32(1099485099);
+emit_32(1129764880);
+emit_32(3259703309);
+emit_32(1099764335);
+emit_32(1129764880);
+emit_32(3258679296);
+emit_32(1099176713);
+emit_32(1129764880);
+emit_32(3257655309);
+emit_32(1098040266);
+emit_32(1129764880);
+emit_32(3256631296);
+emit_32(1098351798);
+emit_32(1129764880);
+emit_32(3255607309);
+emit_32(1098988388);
+emit_32(1129764880);
+emit_32(3254386688);
+emit_32(1098753193);
+emit_32(1129764880);
+emit_32(3252338714);
+emit_32(1098284479);
+emit_32(1129764880);
+emit_32(3250290688);
+emit_32(1097489554);
+emit_32(1129764880);
+emit_32(3248242714);
+emit_32(1095940702);
+emit_32(1129764880);
+emit_32(3245998080);
+emit_32(1094687549);
+emit_32(1129764880);
+emit_32(3241902132);
+emit_32(1094446272);
+emit_32(1129764880);
+emit_32(3237609472);
+emit_32(1093495318);
+emit_32(1129764880);
+emit_32(3229220864);
+emit_32(1092748208);
+emit_32(1129764880);
+emit_32(0);
+emit_32(1092091118);
+emit_32(1129764880);
+emit_32(1081737216);
+emit_32(1091835139);
+emit_32(1129764880);
+emit_32(3279552512);
+emit_32(1080463993);
+emit_32(1129508897);
+emit_32(3279296528);
+emit_32(1085016910);
+emit_32(1129508897);
+emit_32(3279040545);
+emit_32(1089825176);
+emit_32(1129508897);
+emit_32(3278784496);
+emit_32(1094698979);
+emit_32(1129508897);
+emit_32(3278528512);
+emit_32(1097809265);
+emit_32(1129508897);
+emit_32(3278272528);
+emit_32(1099171575);
+emit_32(1129508897);
+emit_32(3278016545);
+emit_32(1099886127);
+emit_32(1129508897);
+emit_32(3277760496);
+emit_32(1099484470);
+emit_32(1129508897);
+emit_32(3277504512);
+emit_32(1098929301);
+emit_32(1129508897);
+emit_32(3277248528);
+emit_32(1097703463);
+emit_32(1129508897);
+emit_32(3276992545);
+emit_32(1096695572);
+emit_32(1129508897);
+emit_32(3276736496);
+emit_32(1094705899);
+emit_32(1129508897);
+emit_32(3276480512);
+emit_32(1094521559);
+emit_32(1129508897);
+emit_32(3276224528);
+emit_32(1094382938);
+emit_32(1129508897);
+emit_32(3275968545);
+emit_32(1093723488);
+emit_32(1129508897);
+emit_32(3275712496);
+emit_32(1094327258);
+emit_32(1129508897);
+emit_32(3275456512);
+emit_32(1094643404);
+emit_32(1129508897);
+emit_32(3275200528);
+emit_32(1095341441);
+emit_32(1129508897);
+emit_32(3274944545);
+emit_32(1096856319);
+emit_32(1129508897);
+emit_32(3274688496);
+emit_32(1097642751);
+emit_32(1129508897);
+emit_32(3274432512);
+emit_32(1097737857);
+emit_32(1129508897);
+emit_32(3274176528);
+emit_32(1097157784);
+emit_32(1129508897);
+emit_32(3273920545);
+emit_32(1096063805);
+emit_32(1129508897);
+emit_32(3273664496);
+emit_32(1095072272);
+emit_32(1129508897);
+emit_32(3273408512);
+emit_32(1094164729);
+emit_32(1129508897);
+emit_32(3273152528);
+emit_32(1092558321);
+emit_32(1129508897);
+emit_32(3272896545);
+emit_32(1090029460);
+emit_32(1129508897);
+emit_32(3272640496);
+emit_32(1087566627);
+emit_32(1129508897);
+emit_32(3272384512);
+emit_32(1087370124);
+emit_32(1129508897);
+emit_32(3272128528);
+emit_32(1084743064);
+emit_32(1129508897);
+emit_32(3271872545);
+emit_32(1082700102);
+emit_32(1129508897);
+emit_32(3271616496);
+emit_32(1083566646);
+emit_32(1129508897);
+emit_32(3271163904);
+emit_32(1084803462);
+emit_32(1129508897);
+emit_32(3270651937);
+emit_32(1086593633);
+emit_32(1129508897);
+emit_32(3270139970);
+emit_32(1090542266);
+emit_32(1129508897);
+emit_32(3269627871);
+emit_32(1091515565);
+emit_32(1129508897);
+emit_32(3269115904);
+emit_32(1092537947);
+emit_32(1129508897);
+emit_32(3268603937);
+emit_32(1093041704);
+emit_32(1129508897);
+emit_32(3268091970);
+emit_32(1093964870);
+emit_32(1129508897);
+emit_32(3267579911);
+emit_32(1094427502);
+emit_32(1129508897);
+emit_32(3267067904);
+emit_32(1095046267);
+emit_32(1129508897);
+emit_32(3266555911);
+emit_32(1095386844);
+emit_32(1129508897);
+emit_32(3266043904);
+emit_32(1095993865);
+emit_32(1129508897);
+emit_32(3265531911);
+emit_32(1096745379);
+emit_32(1129508897);
+emit_32(3265019904);
+emit_32(1098208458);
+emit_32(1129508897);
+emit_32(3264507911);
+emit_32(1099059325);
+emit_32(1129508897);
+emit_32(3263995904);
+emit_32(1098961755);
+emit_32(1129508897);
+emit_32(3263483911);
+emit_32(1099315859);
+emit_32(1129508897);
+emit_32(3262775296);
+emit_32(1099329071);
+emit_32(1129508897);
+emit_32(3261751309);
+emit_32(1098988231);
+emit_32(1129508897);
+emit_32(3260727296);
+emit_32(1099657694);
+emit_32(1129508897);
+emit_32(3259703309);
+emit_32(1099596038);
+emit_32(1129508897);
+emit_32(3258679296);
+emit_32(1099042285);
+emit_32(1129508897);
+emit_32(3257655309);
+emit_32(1098921594);
+emit_32(1129508897);
+emit_32(3256631296);
+emit_32(1099409339);
+emit_32(1129508897);
+emit_32(3255607309);
+emit_32(1099994654);
+emit_32(1129508897);
+emit_32(3254386688);
+emit_32(1099682493);
+emit_32(1129508897);
+emit_32(3252338714);
+emit_32(1099586024);
+emit_32(1129508897);
+emit_32(3250290688);
+emit_32(1098985085);
+emit_32(1129508897);
+emit_32(3248242714);
+emit_32(1098287940);
+emit_32(1129508897);
+emit_32(3245998080);
+emit_32(1096812488);
+emit_32(1129508897);
+emit_32(3241902132);
+emit_32(1096132172);
+emit_32(1129508897);
+emit_32(3237609472);
+emit_32(1095219072);
+emit_32(1129508897);
+emit_32(3229220864);
+emit_32(1094487061);
+emit_32(1129508897);
+emit_32(0);
+emit_32(1093746137);
+emit_32(1129508897);
+emit_32(1081737216);
+emit_32(1093216816);
+emit_32(1129508897);
+emit_32(3279552512);
+emit_32(1080029128);
+emit_32(1129252848);
+emit_32(3279296528);
+emit_32(1082132361);
+emit_32(1129252848);
+emit_32(3279040545);
+emit_32(1088551786);
+emit_32(1129252848);
+emit_32(3278784496);
+emit_32(1092773688);
+emit_32(1129252848);
+emit_32(3278528512);
+emit_32(1095789393);
+emit_32(1129252848);
+emit_32(3278272528);
+emit_32(1098426352);
+emit_32(1129252848);
+emit_32(3278016545);
+emit_32(1099118884);
+emit_32(1129252848);
+emit_32(3277760496);
+emit_32(1098946498);
+emit_32(1129252848);
+emit_32(3277504512);
+emit_32(1098247674);
+emit_32(1129252848);
+emit_32(3277248528);
+emit_32(1097180538);
+emit_32(1129252848);
+emit_32(3276992545);
+emit_32(1095903583);
+emit_32(1129252848);
+emit_32(3276736496);
+emit_32(1093972944);
+emit_32(1129252848);
+emit_32(3276480512);
+emit_32(1094119535);
+emit_32(1129252848);
+emit_32(3276224528);
+emit_32(1094115656);
+emit_32(1129252848);
+emit_32(3275968545);
+emit_32(1093250371);
+emit_32(1129252848);
+emit_32(3275712496);
+emit_32(1093516919);
+emit_32(1129252848);
+emit_32(3275456512);
+emit_32(1094550500);
+emit_32(1129252848);
+emit_32(3275200528);
+emit_32(1095584186);
+emit_32(1129252848);
+emit_32(3274944545);
+emit_32(1097766378);
+emit_32(1129252848);
+emit_32(3274688496);
+emit_32(1097882665);
+emit_32(1129252848);
+emit_32(3274432512);
+emit_32(1097698640);
+emit_32(1129252848);
+emit_32(3274176528);
+emit_32(1096544577);
+emit_32(1129252848);
+emit_32(3273920545);
+emit_32(1095417568);
+emit_32(1129252848);
+emit_32(3273664496);
+emit_32(1093038558);
+emit_32(1129252848);
+emit_32(3273408512);
+emit_32(1092208883);
+emit_32(1129252848);
+emit_32(3273152528);
+emit_32(1091657217);
+emit_32(1129252848);
+emit_32(3272896545);
+emit_32(1088339847);
+emit_32(1129252848);
+emit_32(3272640496);
+emit_32(1087749541);
+emit_32(1129252848);
+emit_32(3272384512);
+emit_32(1086492760);
+emit_32(1129252848);
+emit_32(3272128528);
+emit_32(1084289744);
+emit_32(1129252848);
+emit_32(3271872545);
+emit_32(1084101671);
+emit_32(1129252848);
+emit_32(3271616496);
+emit_32(1084133212);
+emit_32(1129252848);
+emit_32(3271163904);
+emit_32(1084719282);
+emit_32(1129252848);
+emit_32(3270651937);
+emit_32(1088718929);
+emit_32(1129252848);
+emit_32(3270139970);
+emit_32(1091794685);
+emit_32(1129252848);
+emit_32(3269627871);
+emit_32(1093539149);
+emit_32(1129252848);
+emit_32(3269115904);
+emit_32(1093719084);
+emit_32(1129252848);
+emit_32(3268603937);
+emit_32(1094263190);
+emit_32(1129252848);
+emit_32(3268091970);
+emit_32(1095010510);
+emit_32(1129252848);
+emit_32(3267579911);
+emit_32(1095499566);
+emit_32(1129252848);
+emit_32(3267067904);
+emit_32(1095406243);
+emit_32(1129252848);
+emit_32(3266555911);
+emit_32(1095095969);
+emit_32(1129252848);
+emit_32(3266043904);
+emit_32(1095937871);
+emit_32(1129252848);
+emit_32(3265531911);
+emit_32(1096329200);
+emit_32(1129252848);
+emit_32(3265019904);
+emit_32(1097172045);
+emit_32(1129252848);
+emit_32(3264507911);
+emit_32(1098488847);
+emit_32(1129252848);
+emit_32(3263995904);
+emit_32(1099439328);
+emit_32(1129252848);
+emit_32(3263483911);
+emit_32(1099647261);
+emit_32(1129252848);
+emit_32(3262775296);
+emit_32(1099958583);
+emit_32(1129252848);
+emit_32(3261751309);
+emit_32(1099777022);
+emit_32(1129252848);
+emit_32(3260727296);
+emit_32(1099447507);
+emit_32(1129252848);
+emit_32(3259703309);
+emit_32(1099254674);
+emit_32(1129252848);
+emit_32(3258679296);
+emit_32(1099498363);
+emit_32(1129252848);
+emit_32(3257655309);
+emit_32(1099988625);
+emit_32(1129252848);
+emit_32(3256631296);
+emit_32(1100359821);
+emit_32(1129252848);
+emit_32(3255607309);
+emit_32(1100639581);
+emit_32(1129252848);
+emit_32(3254386688);
+emit_32(1100562616);
+emit_32(1129252848);
+emit_32(3252338714);
+emit_32(1100538551);
+emit_32(1129252848);
+emit_32(3250290688);
+emit_32(1099604846);
+emit_32(1129252848);
+emit_32(3248242714);
+emit_32(1098614466);
+emit_32(1129252848);
+emit_32(3245998080);
+emit_32(1097631216);
+emit_32(1129252848);
+emit_32(3241902132);
+emit_32(1097023042);
+emit_32(1129252848);
+emit_32(3237609472);
+emit_32(1096365690);
+emit_32(1129252848);
+emit_32(3229220864);
+emit_32(1095964819);
+emit_32(1129252848);
+emit_32(0);
+emit_32(1094558784);
+emit_32(1129252848);
+emit_32(1081737216);
+emit_32(1093092141);
+emit_32(1129252848);
+emit_32(3279552512);
+emit_32(1081540755);
+emit_32(1128996864);
+emit_32(3279296528);
+emit_32(1081307971);
+emit_32(1128996864);
+emit_32(3279040545);
+emit_32(1088074180);
+emit_32(1128996864);
+emit_32(3278784496);
+emit_32(1092649012);
+emit_32(1128996864);
+emit_32(3278528512);
+emit_32(1095750805);
+emit_32(1128996864);
+emit_32(3278272528);
+emit_32(1098025586);
+emit_32(1128996864);
+emit_32(3278016545);
+emit_32(1098512754);
+emit_32(1128996864);
+emit_32(3277760496);
+emit_32(1097976513);
+emit_32(1128996864);
+emit_32(3277504512);
+emit_32(1097395287);
+emit_32(1128996864);
+emit_32(3277248528);
+emit_32(1096884211);
+emit_32(1128996864);
+emit_32(3276992545);
+emit_32(1096131333);
+emit_32(1128996864);
+emit_32(3276736496);
+emit_32(1094845884);
+emit_32(1128996864);
+emit_32(3276480512);
+emit_32(1093703565);
+emit_32(1128996864);
+emit_32(3276224528);
+emit_32(1092970506);
+emit_32(1128996864);
+emit_32(3275968545);
+emit_32(1093979341);
+emit_32(1128996864);
+emit_32(3275712496);
+emit_32(1093333942);
+emit_32(1128996864);
+emit_32(3275456512);
+emit_32(1094401183);
+emit_32(1128996864);
+emit_32(3275200528);
+emit_32(1095977612);
+emit_32(1128996864);
+emit_32(3274944545);
+emit_32(1096785330);
+emit_32(1128996864);
+emit_32(3274688496);
+emit_32(1097852781);
+emit_32(1128996864);
+emit_32(3274432512);
+emit_32(1097488400);
+emit_32(1128996864);
+emit_32(3274176528);
+emit_32(1096273520);
+emit_32(1128996864);
+emit_32(3273920545);
+emit_32(1094778041);
+emit_32(1128996864);
+emit_32(3273664496);
+emit_32(1093292943);
+emit_32(1128996864);
+emit_32(3273408512);
+emit_32(1092898574);
+emit_32(1128996864);
+emit_32(3273152528);
+emit_32(1090867996);
+emit_32(1128996864);
+emit_32(3272896545);
+emit_32(1089691860);
+emit_32(1128996864);
+emit_32(3272640496);
+emit_32(1086739427);
+emit_32(1128996864);
+emit_32(3272384512);
+emit_32(1085853087);
+emit_32(1128996864);
+emit_32(3272128528);
+emit_32(1084833724);
+emit_32(1128996864);
+emit_32(3271872545);
+emit_32(1084451895);
+emit_32(1128996864);
+emit_32(3271616496);
+emit_32(1085526644);
+emit_32(1128996864);
+emit_32(3271163904);
+emit_32(1089112459);
+emit_32(1128996864);
+emit_32(3270651937);
+emit_32(1091663645);
+emit_32(1128996864);
+emit_32(3270139970);
+emit_32(1093345162);
+emit_32(1128996864);
+emit_32(3269627871);
+emit_32(1094246728);
+emit_32(1128996864);
+emit_32(3269115904);
+emit_32(1095325398);
+emit_32(1128996864);
+emit_32(3268603937);
+emit_32(1096227907);
+emit_32(1128996864);
+emit_32(3268091970);
+emit_32(1097145097);
+emit_32(1128996864);
+emit_32(3267579911);
+emit_32(1097392036);
+emit_32(1128996864);
+emit_32(3267067904);
+emit_32(1096728288);
+emit_32(1128996864);
+emit_32(3266555911);
+emit_32(1095835320);
+emit_32(1128996864);
+emit_32(3266043904);
+emit_32(1095814034);
+emit_32(1128996864);
+emit_32(3265531911);
+emit_32(1096693475);
+emit_32(1128996864);
+emit_32(3265019904);
+emit_32(1097025244);
+emit_32(1128996864);
+emit_32(3264507911);
+emit_32(1099054920);
+emit_32(1128996864);
+emit_32(3263995904);
+emit_32(1099511523);
+emit_32(1128996864);
+emit_32(3263483911);
+emit_32(1100212234);
+emit_32(1128996864);
+emit_32(3262775296);
+emit_32(1100597481);
+emit_32(1128996864);
+emit_32(3261751309);
+emit_32(1100490945);
+emit_32(1128996864);
+emit_32(3260727296);
+emit_32(1100197711);
+emit_32(1128996864);
+emit_32(3259703309);
+emit_32(1099593207);
+emit_32(1128996864);
+emit_32(3258679296);
+emit_32(1099432565);
+emit_32(1128996864);
+emit_32(3257655309);
+emit_32(1100182245);
+emit_32(1128996864);
+emit_32(3256631296);
+emit_32(1100992112);
+emit_32(1128996864);
+emit_32(3255607309);
+emit_32(1101070441);
+emit_32(1128996864);
+emit_32(3254386688);
+emit_32(1101070860);
+emit_32(1128996864);
+emit_32(3252338714);
+emit_32(1100442554);
+emit_32(1128996864);
+emit_32(3250290688);
+emit_32(1100162689);
+emit_32(1128996864);
+emit_32(3248242714);
+emit_32(1099264741);
+emit_32(1128996864);
+emit_32(3245998080);
+emit_32(1098634809);
+emit_32(1128996864);
+emit_32(3241902132);
+emit_32(1097542192);
+emit_32(1128996864);
+emit_32(3237609472);
+emit_32(1097603953);
+emit_32(1128996864);
+emit_32(3229220864);
+emit_32(1097205809);
+emit_32(1128996864);
+emit_32(0);
+emit_32(1095764961);
+emit_32(1128996864);
+emit_32(1081737216);
+emit_32(1094158228);
+emit_32(1128996864);
+emit_32(3279552512);
+emit_32(1083563940);
+emit_32(1128740880);
+emit_32(3279296528);
+emit_32(1083505514);
+emit_32(1128740880);
+emit_32(3279040545);
+emit_32(1087057166);
+emit_32(1128740880);
+emit_32(3278784496);
+emit_32(1091606046);
+emit_32(1128740880);
+emit_32(3278528512);
+emit_32(1094145750);
+emit_32(1128740880);
+emit_32(3278272528);
+emit_32(1096803366);
+emit_32(1128740880);
+emit_32(3278016545);
+emit_32(1097677459);
+emit_32(1128740880);
+emit_32(3277760496);
+emit_32(1096868377);
+emit_32(1128740880);
+emit_32(3277504512);
+emit_32(1097277637);
+emit_32(1128740880);
+emit_32(3277248528);
+emit_32(1097130626);
+emit_32(1128740880);
+emit_32(3276992545);
+emit_32(1095319526);
+emit_32(1128740880);
+emit_32(3276736496);
+emit_32(1094270635);
+emit_32(1128740880);
+emit_32(3276480512);
+emit_32(1092528657);
+emit_32(1128740880);
+emit_32(3276224528);
+emit_32(1091786055);
+emit_32(1128740880);
+emit_32(3275968545);
+emit_32(1092729228);
+emit_32(1128740880);
+emit_32(3275712496);
+emit_32(1093207379);
+emit_32(1128740880);
+emit_32(3275456512);
+emit_32(1094361966);
+emit_32(1128740880);
+emit_32(3275200528);
+emit_32(1096155975);
+emit_32(1128740880);
+emit_32(3274944545);
+emit_32(1098072457);
+emit_32(1128740880);
+emit_32(3274688496);
+emit_32(1097534957);
+emit_32(1128740880);
+emit_32(3274432512);
+emit_32(1096843212);
+emit_32(1128740880);
+emit_32(3274176528);
+emit_32(1095427215);
+emit_32(1128740880);
+emit_32(3273920545);
+emit_32(1095393870);
+emit_32(1128740880);
+emit_32(3273664496);
+emit_32(1094328831);
+emit_32(1128740880);
+emit_32(3273408512);
+emit_32(1093549005);
+emit_32(1128740880);
+emit_32(3273152528);
+emit_32(1091282907);
+emit_32(1128740880);
+emit_32(3272896545);
+emit_32(1089591113);
+emit_32(1128740880);
+emit_32(3272640496);
+emit_32(1087793476);
+emit_32(1128740880);
+emit_32(3272384512);
+emit_32(1084819170);
+emit_32(1128740880);
+emit_32(3272128528);
+emit_32(1085220523);
+emit_32(1128740880);
+emit_32(3271872545);
+emit_32(1088960395);
+emit_32(1128740880);
+emit_32(3271616496);
+emit_32(1091632869);
+emit_32(1128740880);
+emit_32(3271163904);
+emit_32(1092528154);
+emit_32(1128740880);
+emit_32(3270651937);
+emit_32(1093541036);
+emit_32(1128740880);
+emit_32(3270139970);
+emit_32(1094536554);
+emit_32(1128740880);
+emit_32(3269627871);
+emit_32(1095733504);
+emit_32(1128740880);
+emit_32(3269115904);
+emit_32(1096930453);
+emit_32(1128740880);
+emit_32(3268603937);
+emit_32(1097898289);
+emit_32(1128740880);
+emit_32(3268091970);
+emit_32(1098312162);
+emit_32(1128740880);
+emit_32(3267579911);
+emit_32(1098889088);
+emit_32(1128740880);
+emit_32(3267067904);
+emit_32(1098348023);
+emit_32(1128740880);
+emit_32(3266555911);
+emit_32(1097239783);
+emit_32(1128740880);
+emit_32(3266043904);
+emit_32(1096978163);
+emit_32(1128740880);
+emit_32(3265531911);
+emit_32(1097254987);
+emit_32(1128740880);
+emit_32(3265019904);
+emit_32(1097619682);
+emit_32(1128740880);
+emit_32(3264507911);
+emit_32(1098276300);
+emit_32(1128740880);
+emit_32(3263995904);
+emit_32(1099118097);
+emit_32(1128740880);
+emit_32(3263483911);
+emit_32(1099929276);
+emit_32(1128740880);
+emit_32(3262775296);
+emit_32(1100678011);
+emit_32(1128740880);
+emit_32(3261751309);
+emit_32(1100864396);
+emit_32(1128740880);
+emit_32(3260727296);
+emit_32(1100514486);
+emit_32(1128740880);
+emit_32(3259703309);
+emit_32(1100086300);
+emit_32(1128740880);
+emit_32(3258679296);
+emit_32(1099510946);
+emit_32(1128740880);
+emit_32(3257655309);
+emit_32(1100286840);
+emit_32(1128740880);
+emit_32(3256631296);
+emit_32(1100610850);
+emit_32(1128740880);
+emit_32(3255607309);
+emit_32(1101170370);
+emit_32(1128740880);
+emit_32(3254386688);
+emit_32(1100818206);
+emit_32(1128740880);
+emit_32(3252338714);
+emit_32(1100338640);
+emit_32(1128740880);
+emit_32(3250290688);
+emit_32(1099906469);
+emit_32(1128740880);
+emit_32(3248242714);
+emit_32(1099577688);
+emit_32(1128740880);
+emit_32(3245998080);
+emit_32(1099007892);
+emit_32(1128740880);
+emit_32(3241902132);
+emit_32(1098245472);
+emit_32(1128740880);
+emit_32(3237609472);
+emit_32(1097688783);
+emit_32(1128740880);
+emit_32(3229220864);
+emit_32(1096704380);
+emit_32(1128740880);
+emit_32(0);
+emit_32(1095305265);
+emit_32(1128740880);
+emit_32(1081737216);
+emit_32(1094837495);
+emit_32(1128740880);
+emit_32(3279552512);
+emit_32(1085717569);
+emit_32(1128484897);
+emit_32(3279296528);
+emit_32(1083562745);
+emit_32(1128484897);
+emit_32(3279040545);
+emit_32(1084856981);
+emit_32(1128484897);
+emit_32(3278784496);
+emit_32(1089938108);
+emit_32(1128484897);
+emit_32(3278528512);
+emit_32(1093643482);
+emit_32(1128484897);
+emit_32(3278272528);
+emit_32(1095378456);
+emit_32(1128484897);
+emit_32(3278016545);
+emit_32(1096701654);
+emit_32(1128484897);
+emit_32(3277760496);
+emit_32(1095991453);
+emit_32(1128484897);
+emit_32(3277504512);
+emit_32(1096837130);
+emit_32(1128484897);
+emit_32(3277248528);
+emit_32(1097429470);
+emit_32(1128484897);
+emit_32(3276992545);
+emit_32(1095425747);
+emit_32(1128484897);
+emit_32(3276736496);
+emit_32(1092456704);
+emit_32(1128484897);
+emit_32(3276480512);
+emit_32(1090579469);
+emit_32(1128484897);
+emit_32(3276224528);
+emit_32(1089853278);
+emit_32(1128484897);
+emit_32(3275968545);
+emit_32(1091601590);
+emit_32(1128484897);
+emit_32(3275712496);
+emit_32(1093452222);
+emit_32(1128484897);
+emit_32(3275456512);
+emit_32(1094872308);
+emit_32(1128484897);
+emit_32(3275200528);
+emit_32(1095959891);
+emit_32(1128484897);
+emit_32(3274944545);
+emit_32(1097078827);
+emit_32(1128484897);
+emit_32(3274688496);
+emit_32(1096858206);
+emit_32(1128484897);
+emit_32(3274432512);
+emit_32(1096053948);
+emit_32(1128484897);
+emit_32(3274176528);
+emit_32(1095523264);
+emit_32(1128484897);
+emit_32(3273920545);
+emit_32(1095300547);
+emit_32(1128484897);
+emit_32(3273664496);
+emit_32(1094152041);
+emit_32(1128484897);
+emit_32(3273408512);
+emit_32(1093293887);
+emit_32(1128484897);
+emit_32(3273152528);
+emit_32(1091954824);
+emit_32(1128484897);
+emit_32(3272896545);
+emit_32(1090264488);
+emit_32(1128484897);
+emit_32(3272640496);
+emit_32(1087964038);
+emit_32(1128484897);
+emit_32(3272384512);
+emit_32(1084913101);
+emit_32(1128484897);
+emit_32(3272128528);
+emit_32(1087644432);
+emit_32(1128484897);
+emit_32(3271872545);
+emit_32(1091545292);
+emit_32(1128484897);
+emit_32(3271616496);
+emit_32(1092949010);
+emit_32(1128484897);
+emit_32(3271163904);
+emit_32(1093888744);
+emit_32(1128484897);
+emit_32(3270651937);
+emit_32(1095009252);
+emit_32(1128484897);
+emit_32(3270139970);
+emit_32(1096532728);
+emit_32(1128484897);
+emit_32(3269627871);
+emit_32(1096831048);
+emit_32(1128484897);
+emit_32(3269115904);
+emit_32(1098431280);
+emit_32(1128484897);
+emit_32(3268603937);
+emit_32(1098981153);
+emit_32(1128484897);
+emit_32(3268091970);
+emit_32(1099259917);
+emit_32(1128484897);
+emit_32(3267579911);
+emit_32(1099047004);
+emit_32(1128484897);
+emit_32(3267067904);
+emit_32(1099189663);
+emit_32(1128484897);
+emit_32(3266555911);
+emit_32(1097994233);
+emit_32(1128484897);
+emit_32(3266043904);
+emit_32(1097616536);
+emit_32(1128484897);
+emit_32(3265531911);
+emit_32(1098345402);
+emit_32(1128484897);
+emit_32(3265019904);
+emit_32(1098214644);
+emit_32(1128484897);
+emit_32(3264507911);
+emit_32(1097712481);
+emit_32(1128484897);
+emit_32(3263995904);
+emit_32(1099049258);
+emit_32(1128484897);
+emit_32(3263483911);
+emit_32(1099930586);
+emit_32(1128484897);
+emit_32(3262775296);
+emit_32(1100537135);
+emit_32(1128484897);
+emit_32(3261751309);
+emit_32(1100755920);
+emit_32(1128484897);
+emit_32(3260727296);
+emit_32(1100566915);
+emit_32(1128484897);
+emit_32(3259703309);
+emit_32(1099988940);
+emit_32(1128484897);
+emit_32(3258679296);
+emit_32(1099547332);
+emit_32(1128484897);
+emit_32(3257655309);
+emit_32(1100698878);
+emit_32(1128484897);
+emit_32(3256631296);
+emit_32(1101203033);
+emit_32(1128484897);
+emit_32(3255607309);
+emit_32(1100897845);
+emit_32(1128484897);
+emit_32(3254386688);
+emit_32(1100472176);
+emit_32(1128484897);
+emit_32(3252338714);
+emit_32(1100121008);
+emit_32(1128484897);
+emit_32(3250290688);
+emit_32(1100059666);
+emit_32(1128484897);
+emit_32(3248242714);
+emit_32(1099700424);
+emit_32(1128484897);
+emit_32(3245998080);
+emit_32(1099220596);
+emit_32(1128484897);
+emit_32(3241902132);
+emit_32(1098230163);
+emit_32(1128484897);
+emit_32(3237609472);
+emit_32(1097298503);
+emit_32(1128484897);
+emit_32(3229220864);
+emit_32(1096617663);
+emit_32(1128484897);
+emit_32(0);
+emit_32(1095209006);
+emit_32(1128484897);
+emit_32(1081737216);
+emit_32(1096602144);
+emit_32(1128484897);
+emit_32(3279552512);
+emit_32(1086488964);
+emit_32(1128228848);
+emit_32(3279296528);
+emit_32(1085207394);
+emit_32(1128228848);
+emit_32(3279040545);
+emit_32(1083144426);
+emit_32(1128228848);
+emit_32(3278784496);
+emit_32(1087877279);
+emit_32(1128228848);
+emit_32(3278528512);
+emit_32(1092360979);
+emit_32(1128228848);
+emit_32(3278272528);
+emit_32(1094229112);
+emit_32(1128228848);
+emit_32(3278016545);
+emit_32(1095715678);
+emit_32(1128228848);
+emit_32(3277760496);
+emit_32(1095363042);
+emit_32(1128228848);
+emit_32(3277504512);
+emit_32(1095186881);
+emit_32(1128228848);
+emit_32(3277248528);
+emit_32(1096363593);
+emit_32(1128228848);
+emit_32(3276992545);
+emit_32(1094958082);
+emit_32(1128228848);
+emit_32(3276736496);
+emit_32(1091948081);
+emit_32(1128228848);
+emit_32(3276480512);
+emit_32(1089598789);
+emit_32(1128228848);
+emit_32(3276224528);
+emit_32(1090830991);
+emit_32(1128228848);
+emit_32(3275968545);
+emit_32(1092661490);
+emit_32(1128228848);
+emit_32(3275712496);
+emit_32(1094218416);
+emit_32(1128228848);
+emit_32(3275456512);
+emit_32(1095692504);
+emit_32(1128228848);
+emit_32(3275200528);
+emit_32(1096747267);
+emit_32(1128228848);
+emit_32(3274944545);
+emit_32(1096959708);
+emit_32(1128228848);
+emit_32(3274688496);
+emit_32(1096562717);
+emit_32(1128228848);
+emit_32(3274432512);
+emit_32(1095550422);
+emit_32(1128228848);
+emit_32(3274176528);
+emit_32(1095356331);
+emit_32(1128228848);
+emit_32(3273920545);
+emit_32(1094786744);
+emit_32(1128228848);
+emit_32(3273664496);
+emit_32(1094402651);
+emit_32(1128228848);
+emit_32(3273408512);
+emit_32(1093003326);
+emit_32(1128228848);
+emit_32(3273152528);
+emit_32(1091879924);
+emit_32(1128228848);
+emit_32(3272896545);
+emit_32(1090340950);
+emit_32(1128228848);
+emit_32(3272640496);
+emit_32(1088120653);
+emit_32(1128228848);
+emit_32(3272384512);
+emit_32(1090582175);
+emit_32(1128228848);
+emit_32(3272128528);
+emit_32(1091421633);
+emit_32(1128228848);
+emit_32(3271872545);
+emit_32(1093724013);
+emit_32(1128228848);
+emit_32(3271616496);
+emit_32(1095136025);
+emit_32(1128228848);
+emit_32(3271163904);
+emit_32(1096213647);
+emit_32(1128228848);
+emit_32(3270651937);
+emit_32(1096677537);
+emit_32(1128228848);
+emit_32(3270139970);
+emit_32(1097917268);
+emit_32(1128228848);
+emit_32(3269627871);
+emit_32(1098919130);
+emit_32(1128228848);
+emit_32(3269115904);
+emit_32(1099360947);
+emit_32(1128228848);
+emit_32(3268603937);
+emit_32(1099387686);
+emit_32(1128228848);
+emit_32(3268091970);
+emit_32(1099422027);
+emit_32(1128228848);
+emit_32(3267579911);
+emit_32(1099524892);
+emit_32(1128228848);
+emit_32(3267067904);
+emit_32(1099391723);
+emit_32(1128228848);
+emit_32(3266555911);
+emit_32(1098232680);
+emit_32(1128228848);
+emit_32(3266043904);
+emit_32(1097328073);
+emit_32(1128228848);
+emit_32(3265531911);
+emit_32(1098499542);
+emit_32(1128228848);
+emit_32(3265019904);
+emit_32(1098867278);
+emit_32(1128228848);
+emit_32(3264507911);
+emit_32(1097477915);
+emit_32(1128228848);
+emit_32(3263995904);
+emit_32(1098419431);
+emit_32(1128228848);
+emit_32(3263483911);
+emit_32(1099657118);
+emit_32(1128228848);
+emit_32(3262775296);
+emit_32(1100094951);
+emit_32(1128228848);
+emit_32(3261751309);
+emit_32(1100491260);
+emit_32(1128228848);
+emit_32(3260727296);
+emit_32(1100506884);
+emit_32(1128228848);
+emit_32(3259703309);
+emit_32(1099794324);
+emit_32(1128228848);
+emit_32(3258679296);
+emit_32(1099789291);
+emit_32(1128228848);
+emit_32(3257655309);
+emit_32(1100379115);
+emit_32(1128228848);
+emit_32(3256631296);
+emit_32(1100923221);
+emit_32(1128228848);
+emit_32(3255607309);
+emit_32(1100371932);
+emit_32(1128228848);
+emit_32(3254386688);
+emit_32(1100316148);
+emit_32(1128228848);
+emit_32(3252338714);
+emit_32(1100515692);
+emit_32(1128228848);
+emit_32(3250290688);
+emit_32(1100307916);
+emit_32(1128228848);
+emit_32(3248242714);
+emit_32(1099810210);
+emit_32(1128228848);
+emit_32(3245998080);
+emit_32(1099154640);
+emit_32(1128228848);
+emit_32(3241902132);
+emit_32(1098355573);
+emit_32(1128228848);
+emit_32(3237609472);
+emit_32(1097472777);
+emit_32(1128228848);
+emit_32(3229220864);
+emit_32(1096682465);
+emit_32(1128228848);
+emit_32(0);
+emit_32(1096577398);
+emit_32(1128228848);
+emit_32(1081737216);
+emit_32(1097223216);
+emit_32(1128228848);
+emit_32(3279552512);
+emit_32(1086853617);
+emit_32(1127972864);
+emit_32(3279296528);
+emit_32(1086298564);
+emit_32(1127972864);
+emit_32(3279040545);
+emit_32(1085278425);
+emit_32(1127972864);
+emit_32(3278784496);
+emit_32(1085319131);
+emit_32(1127972864);
+emit_32(3278528512);
+emit_32(1090251360);
+emit_32(1127972864);
+emit_32(3278272528);
+emit_32(1092641777);
+emit_32(1127972864);
+emit_32(3278016545);
+emit_32(1093620623);
+emit_32(1127972864);
+emit_32(3277760496);
+emit_32(1094102653);
+emit_32(1127972864);
+emit_32(3277504512);
+emit_32(1093830758);
+emit_32(1127972864);
+emit_32(3277248528);
+emit_32(1094796916);
+emit_32(1127972864);
+emit_32(3276992545);
+emit_32(1093478751);
+emit_32(1127972864);
+emit_32(3276736496);
+emit_32(1091477050);
+emit_32(1127972864);
+emit_32(3276480512);
+emit_32(1089930831);
+emit_32(1127972864);
+emit_32(3276224528);
+emit_32(1091537375);
+emit_32(1127972864);
+emit_32(3275968545);
+emit_32(1093540302);
+emit_32(1127972864);
+emit_32(3275712496);
+emit_32(1095329278);
+emit_32(1127972864);
+emit_32(3275456512);
+emit_32(1096120323);
+emit_32(1127972864);
+emit_32(3275200528);
+emit_32(1096433743);
+emit_32(1127972864);
+emit_32(3274944545);
+emit_32(1096683304);
+emit_32(1127972864);
+emit_32(3274688496);
+emit_32(1096592182);
+emit_32(1127972864);
+emit_32(3274432512);
+emit_32(1095725220);
+emit_32(1127972864);
+emit_32(3274176528);
+emit_32(1094999815);
+emit_32(1127972864);
+emit_32(3273920545);
+emit_32(1094300520);
+emit_32(1127972864);
+emit_32(3273664496);
+emit_32(1093576583);
+emit_32(1127972864);
+emit_32(3273408512);
+emit_32(1092872779);
+emit_32(1127972864);
+emit_32(3273152528);
+emit_32(1091911098);
+emit_32(1127972864);
+emit_32(3272896545);
+emit_32(1091753434);
+emit_32(1127972864);
+emit_32(3272640496);
+emit_32(1092133438);
+emit_32(1127972864);
+emit_32(3272384512);
+emit_32(1093071169);
+emit_32(1127972864);
+emit_32(3272128528);
+emit_32(1094518728);
+emit_32(1127972864);
+emit_32(3271872545);
+emit_32(1096084986);
+emit_32(1127972864);
+emit_32(3271616496);
+emit_32(1096360657);
+emit_32(1127972864);
+emit_32(3271163904);
+emit_32(1096731014);
+emit_32(1127972864);
+emit_32(3270651937);
+emit_32(1098285738);
+emit_32(1127972864);
+emit_32(3270139970);
+emit_32(1099415631);
+emit_32(1127972864);
+emit_32(3269627871);
+emit_32(1099949408);
+emit_32(1127972864);
+emit_32(3269115904);
+emit_32(1100367161);
+emit_32(1127972864);
+emit_32(3268603937);
+emit_32(1100361866);
+emit_32(1127972864);
+emit_32(3268091970);
+emit_32(1100305714);
+emit_32(1127972864);
+emit_32(3267579911);
+emit_32(1100208354);
+emit_32(1127972864);
+emit_32(3267067904);
+emit_32(1100142975);
+emit_32(1127972864);
+emit_32(3266555911);
+emit_32(1099102421);
+emit_32(1127972864);
+emit_32(3266043904);
+emit_32(1097385430);
+emit_32(1127972864);
+emit_32(3265531911);
+emit_32(1097822162);
+emit_32(1127972864);
+emit_32(3265019904);
+emit_32(1098963275);
+emit_32(1127972864);
+emit_32(3264507911);
+emit_32(1097304900);
+emit_32(1127972864);
+emit_32(3263995904);
+emit_32(1097683121);
+emit_32(1127972864);
+emit_32(3263483911);
+emit_32(1099069810);
+emit_32(1127972864);
+emit_32(3262775296);
+emit_32(1099605213);
+emit_32(1127972864);
+emit_32(3261751309);
+emit_32(1100129868);
+emit_32(1127972864);
+emit_32(3260727296);
+emit_32(1100106433);
+emit_32(1127972864);
+emit_32(3259703309);
+emit_32(1099661207);
+emit_32(1127972864);
+emit_32(3258679296);
+emit_32(1099945896);
+emit_32(1127972864);
+emit_32(3257655309);
+emit_32(1100312216);
+emit_32(1127972864);
+emit_32(3256631296);
+emit_32(1100604401);
+emit_32(1127972864);
+emit_32(3255607309);
+emit_32(1101000920);
+emit_32(1127972864);
+emit_32(3254386688);
+emit_32(1100943301);
+emit_32(1127972864);
+emit_32(3252338714);
+emit_32(1100628886);
+emit_32(1127972864);
+emit_32(3250290688);
+emit_32(1100484759);
+emit_32(1127972864);
+emit_32(3248242714);
+emit_32(1099700843);
+emit_32(1127972864);
+emit_32(3245998080);
+emit_32(1099261752);
+emit_32(1127972864);
+emit_32(3241902132);
+emit_32(1098560045);
+emit_32(1127972864);
+emit_32(3237609472);
+emit_32(1097453588);
+emit_32(1127972864);
+emit_32(3229220864);
+emit_32(1096754712);
+emit_32(1127972864);
+emit_32(0);
+emit_32(1097041812);
+emit_32(1127972864);
+emit_32(1081737216);
+emit_32(1096992739);
+emit_32(1127972864);
+emit_32(3279552512);
+emit_32(1088632086);
+emit_32(1127716880);
+emit_32(3279296528);
+emit_32(1087150511);
+emit_32(1127716880);
+emit_32(3279040545);
+emit_32(1085863719);
+emit_32(1127716880);
+emit_32(3278784496);
+emit_32(1084379313);
+emit_32(1127716880);
+emit_32(3278528512);
+emit_32(1086294621);
+emit_32(1127716880);
+emit_32(3278272528);
+emit_32(1089793845);
+emit_32(1127716880);
+emit_32(3278016545);
+emit_32(1091311124);
+emit_32(1127716880);
+emit_32(3277760496);
+emit_32(1092520195);
+emit_32(1127716880);
+emit_32(3277504512);
+emit_32(1092832933);
+emit_32(1127716880);
+emit_32(3277248528);
+emit_32(1092827899);
+emit_32(1127716880);
+emit_32(3276992545);
+emit_32(1091811620);
+emit_32(1127716880);
+emit_32(3276736496);
+emit_32(1089828825);
+emit_32(1127716880);
+emit_32(3276480512);
+emit_32(1090682052);
+emit_32(1127716880);
+emit_32(3276224528);
+emit_32(1092010839);
+emit_32(1127716880);
+emit_32(3275968545);
+emit_32(1093459876);
+emit_32(1127716880);
+emit_32(3275712496);
+emit_32(1096080897);
+emit_32(1127716880);
+emit_32(3275456512);
+emit_32(1096807455);
+emit_32(1127716880);
+emit_32(3275200528);
+emit_32(1096413086);
+emit_32(1127716880);
+emit_32(3274944545);
+emit_32(1096350381);
+emit_32(1127716880);
+emit_32(3274688496);
+emit_32(1096323642);
+emit_32(1127716880);
+emit_32(3274432512);
+emit_32(1095633784);
+emit_32(1127716880);
+emit_32(3274176528);
+emit_32(1094753714);
+emit_32(1127716880);
+emit_32(3273920545);
+emit_32(1094125198);
+emit_32(1127716880);
+emit_32(3273664496);
+emit_32(1093062361);
+emit_32(1127716880);
+emit_32(3273408512);
+emit_32(1093213041);
+emit_32(1127716880);
+emit_32(3273152528);
+emit_32(1093187876);
+emit_32(1127716880);
+emit_32(3272896545);
+emit_32(1094195347);
+emit_32(1127716880);
+emit_32(3272640496);
+emit_32(1094880172);
+emit_32(1127716880);
+emit_32(3272384512);
+emit_32(1095364719);
+emit_32(1127716880);
+emit_32(3272128528);
+emit_32(1096288829);
+emit_32(1127716880);
+emit_32(3271872545);
+emit_32(1097163132);
+emit_32(1127716880);
+emit_32(3271616496);
+emit_32(1097356385);
+emit_32(1127716880);
+emit_32(3271163904);
+emit_32(1098373084);
+emit_32(1127716880);
+emit_32(3270651937);
+emit_32(1099643172);
+emit_32(1127716880);
+emit_32(3270139970);
+emit_32(1099931949);
+emit_32(1127716880);
+emit_32(3269627871);
+emit_32(1100246260);
+emit_32(1127716880);
+emit_32(3269115904);
+emit_32(1100634600);
+emit_32(1127716880);
+emit_32(3268603937);
+emit_32(1100611741);
+emit_32(1127716880);
+emit_32(3268091970);
+emit_32(1100940417);
+emit_32(1127716880);
+emit_32(3267579911);
+emit_32(1100834564);
+emit_32(1127716880);
+emit_32(3267067904);
+emit_32(1100309804);
+emit_32(1127716880);
+emit_32(3266555911);
+emit_32(1099846386);
+emit_32(1127716880);
+emit_32(3266043904);
+emit_32(1098992216);
+emit_32(1127716880);
+emit_32(3265531911);
+emit_32(1098681051);
+emit_32(1127716880);
+emit_32(3265019904);
+emit_32(1098547986);
+emit_32(1127716880);
+emit_32(3264507911);
+emit_32(1097247857);
+emit_32(1127716880);
+emit_32(3263995904);
+emit_32(1097448345);
+emit_32(1127716880);
+emit_32(3263483911);
+emit_32(1098445645);
+emit_32(1127716880);
+emit_32(3262775296);
+emit_32(1098977798);
+emit_32(1127716880);
+emit_32(3261751309);
+emit_32(1099491390);
+emit_32(1127716880);
+emit_32(3260727296);
+emit_32(1099337145);
+emit_32(1127716880);
+emit_32(3259703309);
+emit_32(1099792908);
+emit_32(1127716880);
+emit_32(3258679296);
+emit_32(1100235722);
+emit_32(1127716880);
+emit_32(3257655309);
+emit_32(1100866336);
+emit_32(1127716880);
+emit_32(3256631296);
+emit_32(1101422448);
+emit_32(1127716880);
+emit_32(3255607309);
+emit_32(1101221855);
+emit_32(1127716880);
+emit_32(3254386688);
+emit_32(1101088005);
+emit_32(1127716880);
+emit_32(3252338714);
+emit_32(1100972556);
+emit_32(1127716880);
+emit_32(3250290688);
+emit_32(1100202325);
+emit_32(1127716880);
+emit_32(3248242714);
+emit_32(1099418409);
+emit_32(1127716880);
+emit_32(3245998080);
+emit_32(1098944243);
+emit_32(1127716880);
+emit_32(3241902132);
+emit_32(1098327366);
+emit_32(1127716880);
+emit_32(3237609472);
+emit_32(1097923455);
+emit_32(1127716880);
+emit_32(3229220864);
+emit_32(1098086089);
+emit_32(1127716880);
+emit_32(0);
+emit_32(1097086481);
+emit_32(1127716880);
+emit_32(1081737216);
+emit_32(1096797703);
+emit_32(1127716880);
+emit_32(3279552512);
+emit_32(1090697067);
+emit_32(1127460897);
+emit_32(3279296528);
+emit_32(1088464754);
+emit_32(1127460897);
+emit_32(3279040545);
+emit_32(1087359387);
+emit_32(1127460897);
+emit_32(3278784496);
+emit_32(1086695387);
+emit_32(1127460897);
+emit_32(3278528512);
+emit_32(1083514070);
+emit_32(1127460897);
+emit_32(3278272528);
+emit_32(1084835276);
+emit_32(1127460897);
+emit_32(3278016545);
+emit_32(1088646514);
+emit_32(1127460897);
+emit_32(3277760496);
+emit_32(1090551147);
+emit_32(1127460897);
+emit_32(3277504512);
+emit_32(1091910700);
+emit_32(1127460897);
+emit_32(3277248528);
+emit_32(1091808013);
+emit_32(1127460897);
+emit_32(3276992545);
+emit_32(1091196294);
+emit_32(1127460897);
+emit_32(3276736496);
+emit_32(1090026922);
+emit_32(1127460897);
+emit_32(3276480512);
+emit_32(1090912801);
+emit_32(1127460897);
+emit_32(3276224528);
+emit_32(1091162887);
+emit_32(1127460897);
+emit_32(3275968545);
+emit_32(1093409649);
+emit_32(1127460897);
+emit_32(3275712496);
+emit_32(1094918970);
+emit_32(1127460897);
+emit_32(3275456512);
+emit_32(1096294177);
+emit_32(1127460897);
+emit_32(3275200528);
+emit_32(1096363698);
+emit_32(1127460897);
+emit_32(3274944545);
+emit_32(1096394421);
+emit_32(1127460897);
+emit_32(3274688496);
+emit_32(1096326893);
+emit_32(1127460897);
+emit_32(3274432512);
+emit_32(1095806484);
+emit_32(1127460897);
+emit_32(3274176528);
+emit_32(1096379007);
+emit_32(1127460897);
+emit_32(3273920545);
+emit_32(1096041470);
+emit_32(1127460897);
+emit_32(3273664496);
+emit_32(1094485488);
+emit_32(1127460897);
+emit_32(3273408512);
+emit_32(1095082128);
+emit_32(1127460897);
+emit_32(3273152528);
+emit_32(1095898969);
+emit_32(1127460897);
+emit_32(3272896545);
+emit_32(1096463208);
+emit_32(1127460897);
+emit_32(3272640496);
+emit_32(1096556741);
+emit_32(1127460897);
+emit_32(3272384512);
+emit_32(1096834613);
+emit_32(1127460897);
+emit_32(3272128528);
+emit_32(1098017826);
+emit_32(1127460897);
+emit_32(3271872545);
+emit_32(1098909745);
+emit_32(1127460897);
+emit_32(3271616496);
+emit_32(1099379035);
+emit_32(1127460897);
+emit_32(3271163904);
+emit_32(1099621519);
+emit_32(1127460897);
+emit_32(3270651937);
+emit_32(1100273890);
+emit_32(1127460897);
+emit_32(3270139970);
+emit_32(1100651587);
+emit_32(1127460897);
+emit_32(3269627871);
+emit_32(1100583063);
+emit_32(1127460897);
+emit_32(3269115904);
+emit_32(1100899471);
+emit_32(1127460897);
+emit_32(3268603937);
+emit_32(1101366926);
+emit_32(1127460897);
+emit_32(3268091970);
+emit_32(1101899183);
+emit_32(1127460897);
+emit_32(3267579911);
+emit_32(1101822427);
+emit_32(1127460897);
+emit_32(3267067904);
+emit_32(1101218290);
+emit_32(1127460897);
+emit_32(3266555911);
+emit_32(1100574150);
+emit_32(1127460897);
+emit_32(3266043904);
+emit_32(1100108005);
+emit_32(1127460897);
+emit_32(3265531911);
+emit_32(1099514144);
+emit_32(1127460897);
+emit_32(3265019904);
+emit_32(1098172701);
+emit_32(1127460897);
+emit_32(3264507911);
+emit_32(1096910216);
+emit_32(1127460897);
+emit_32(3263995904);
+emit_32(1097118253);
+emit_32(1127460897);
+emit_32(3263483911);
+emit_32(1097919785);
+emit_32(1127460897);
+emit_32(3262775296);
+emit_32(1098225759);
+emit_32(1127460897);
+emit_32(3261751309);
+emit_32(1098294021);
+emit_32(1127460897);
+emit_32(3260727296);
+emit_32(1099564476);
+emit_32(1127460897);
+emit_32(3259703309);
+emit_32(1100155453);
+emit_32(1127460897);
+emit_32(3258679296);
+emit_32(1100660343);
+emit_32(1127460897);
+emit_32(3257655309);
+emit_32(1101117574);
+emit_32(1127460897);
+emit_32(3256631296);
+emit_32(1101606787);
+emit_32(1127460897);
+emit_32(3255607309);
+emit_32(1101430155);
+emit_32(1127460897);
+emit_32(3254386688);
+emit_32(1100673712);
+emit_32(1127460897);
+emit_32(3252338714);
+emit_32(1100216585);
+emit_32(1127460897);
+emit_32(3250290688);
+emit_32(1099492858);
+emit_32(1127460897);
+emit_32(3248242714);
+emit_32(1098998822);
+emit_32(1127460897);
+emit_32(3245998080);
+emit_32(1097972423);
+emit_32(1127460897);
+emit_32(3241902132);
+emit_32(1098463681);
+emit_32(1127460897);
+emit_32(3237609472);
+emit_32(1099098961);
+emit_32(1127460897);
+emit_32(3229220864);
+emit_32(1099075315);
+emit_32(1127460897);
+emit_32(0);
+emit_32(1098576717);
+emit_32(1127460897);
+emit_32(1081737216);
+emit_32(1097521955);
+emit_32(1127460897);
+emit_32(3279552512);
+emit_32(1091907942);
+emit_32(1127204848);
+emit_32(3279296528);
+emit_32(1090913000);
+emit_32(1127204848);
+emit_32(3279040545);
+emit_32(1089627792);
+emit_32(1127204848);
+emit_32(3278784496);
+emit_32(1088453282);
+emit_32(1127204848);
+emit_32(3278528512);
+emit_32(1085638149);
+emit_32(1127204848);
+emit_32(3278272528);
+emit_32(1082820290);
+emit_32(1127204848);
+emit_32(3278016545);
+emit_32(1084647581);
+emit_32(1127204848);
+emit_32(3277760496);
+emit_32(1086976132);
+emit_32(1127204848);
+emit_32(3277504512);
+emit_32(1089606024);
+emit_32(1127204848);
+emit_32(3277248528);
+emit_32(1090895206);
+emit_32(1127204848);
+emit_32(3276992545);
+emit_32(1090776528);
+emit_32(1127204848);
+emit_32(3276736496);
+emit_32(1089657215);
+emit_32(1127204848);
+emit_32(3276480512);
+emit_32(1090767154);
+emit_32(1127204848);
+emit_32(3276224528);
+emit_32(1091192603);
+emit_32(1127204848);
+emit_32(3275968545);
+emit_32(1093123912);
+emit_32(1127204848);
+emit_32(3275712496);
+emit_32(1094534667);
+emit_32(1127204848);
+emit_32(3275456512);
+emit_32(1096318399);
+emit_32(1127204848);
+emit_32(3275200528);
+emit_32(1097169319);
+emit_32(1127204848);
+emit_32(3274944545);
+emit_32(1096886518);
+emit_32(1127204848);
+emit_32(3274688496);
+emit_32(1097439642);
+emit_32(1127204848);
+emit_32(3274432512);
+emit_32(1096797599);
+emit_32(1127204848);
+emit_32(3274176528);
+emit_32(1096554224);
+emit_32(1127204848);
+emit_32(3273920545);
+emit_32(1096240490);
+emit_32(1127204848);
+emit_32(3273664496);
+emit_32(1096477363);
+emit_32(1127204848);
+emit_32(3273408512);
+emit_32(1097087635);
+emit_32(1127204848);
+emit_32(3273152528);
+emit_32(1097338349);
+emit_32(1127204848);
+emit_32(3272896545);
+emit_32(1097759457);
+emit_32(1127204848);
+emit_32(3272640496);
+emit_32(1097880778);
+emit_32(1127204848);
+emit_32(3272384512);
+emit_32(1098146906);
+emit_32(1127204848);
+emit_32(3272128528);
+emit_32(1099303643);
+emit_32(1127204848);
+emit_32(3271872545);
+emit_32(1099944532);
+emit_32(1127204848);
+emit_32(3271616496);
+emit_32(1100242905);
+emit_32(1127204848);
+emit_32(3271163904);
+emit_32(1100588882);
+emit_32(1127204848);
+emit_32(3270651937);
+emit_32(1100605502);
+emit_32(1127204848);
+emit_32(3270139970);
+emit_32(1100742289);
+emit_32(1127204848);
+emit_32(3269627871);
+emit_32(1101124128);
+emit_32(1127204848);
+emit_32(3269115904);
+emit_32(1101735972);
+emit_32(1127204848);
+emit_32(3268603937);
+emit_32(1102084728);
+emit_32(1127204848);
+emit_32(3268091970);
+emit_32(1102719903);
+emit_32(1127204848);
+emit_32(3267579911);
+emit_32(1102404177);
+emit_32(1127204848);
+emit_32(3267067904);
+emit_32(1101692613);
+emit_32(1127204848);
+emit_32(3266555911);
+emit_32(1101323724);
+emit_32(1127204848);
+emit_32(3266043904);
+emit_32(1100739353);
+emit_32(1127204848);
+emit_32(3265531911);
+emit_32(1100060977);
+emit_32(1127204848);
+emit_32(3265019904);
+emit_32(1098668153);
+emit_32(1127204848);
+emit_32(3264507911);
+emit_32(1097066139);
+emit_32(1127204848);
+emit_32(3263995904);
+emit_32(1097240936);
+emit_32(1127204848);
+emit_32(3263483911);
+emit_32(1098056099);
+emit_32(1127204848);
+emit_32(3262775296);
+emit_32(1098692270);
+emit_32(1127204848);
+emit_32(3261751309);
+emit_32(1099028339);
+emit_32(1127204848);
+emit_32(3260727296);
+emit_32(1099487406);
+emit_32(1127204848);
+emit_32(3259703309);
+emit_32(1100464154);
+emit_32(1127204848);
+emit_32(3258679296);
+emit_32(1100643146);
+emit_32(1127204848);
+emit_32(3257655309);
+emit_32(1100685089);
+emit_32(1127204848);
+emit_32(3256631296);
+emit_32(1100823658);
+emit_32(1127204848);
+emit_32(3255607309);
+emit_32(1100633027);
+emit_32(1127204848);
+emit_32(3254386688);
+emit_32(1100238553);
+emit_32(1127204848);
+emit_32(3252338714);
+emit_32(1099137706);
+emit_32(1127204848);
+emit_32(3250290688);
+emit_32(1098443758);
+emit_32(1127204848);
+emit_32(3248242714);
+emit_32(1098669202);
+emit_32(1127204848);
+emit_32(3245998080);
+emit_32(1099104571);
+emit_32(1127204848);
+emit_32(3241902132);
+emit_32(1099412328);
+emit_32(1127204848);
+emit_32(3237609472);
+emit_32(1099546755);
+emit_32(1127204848);
+emit_32(3229220864);
+emit_32(1099464966);
+emit_32(1127204848);
+emit_32(0);
+emit_32(1099096864);
+emit_32(1127204848);
+emit_32(1081737216);
+emit_32(1098169765);
+emit_32(1127204848);
+emit_32(3279552512);
+emit_32(1092650690);
+emit_32(1126948864);
+emit_32(3279296528);
+emit_32(1091119434);
+emit_32(1126948864);
+emit_32(3279040545);
+emit_32(1090136415);
+emit_32(1126948864);
+emit_32(3278784496);
+emit_32(1088411612);
+emit_32(1126948864);
+emit_32(3278528512);
+emit_32(1085469077);
+emit_32(1126948864);
+emit_32(3278272528);
+emit_32(1083833424);
+emit_32(1126948864);
+emit_32(3278016545);
+emit_32(1083689035);
+emit_32(1126948864);
+emit_32(3277760496);
+emit_32(1085122711);
+emit_32(1126948864);
+emit_32(3277504512);
+emit_32(1086667243);
+emit_32(1126948864);
+emit_32(3277248528);
+emit_32(1087657958);
+emit_32(1126948864);
+emit_32(3276992545);
+emit_32(1088371095);
+emit_32(1126948864);
+emit_32(3276736496);
+emit_32(1089466354);
+emit_32(1126948864);
+emit_32(3276480512);
+emit_32(1091055439);
+emit_32(1126948864);
+emit_32(3276224528);
+emit_32(1090400677);
+emit_32(1126948864);
+emit_32(3275968545);
+emit_32(1092101142);
+emit_32(1126948864);
+emit_32(3275712496);
+emit_32(1093636037);
+emit_32(1126948864);
+emit_32(3275456512);
+emit_32(1095931999);
+emit_32(1126948864);
+emit_32(3275200528);
+emit_32(1096626890);
+emit_32(1126948864);
+emit_32(3274944545);
+emit_32(1098060923);
+emit_32(1126948864);
+emit_32(3274688496);
+emit_32(1097783994);
+emit_32(1126948864);
+emit_32(3274432512);
+emit_32(1096721367);
+emit_32(1126948864);
+emit_32(3274176528);
+emit_32(1097047264);
+emit_32(1126948864);
+emit_32(3273920545);
+emit_32(1096218051);
+emit_32(1126948864);
+emit_32(3273664496);
+emit_32(1096743282);
+emit_32(1126948864);
+emit_32(3273408512);
+emit_32(1097750335);
+emit_32(1126948864);
+emit_32(3273152528);
+emit_32(1098166619);
+emit_32(1126948864);
+emit_32(3272896545);
+emit_32(1097872074);
+emit_32(1126948864);
+emit_32(3272640496);
+emit_32(1097941595);
+emit_32(1126948864);
+emit_32(3272384512);
+emit_32(1098064383);
+emit_32(1126948864);
+emit_32(3272128528);
+emit_32(1099511103);
+emit_32(1126948864);
+emit_32(3271872545);
+emit_32(1100417545);
+emit_32(1126948864);
+emit_32(3271616496);
+emit_32(1100756969);
+emit_32(1126948864);
+emit_32(3271163904);
+emit_32(1100841956);
+emit_32(1126948864);
+emit_32(3270651937);
+emit_32(1100819517);
+emit_32(1126948864);
+emit_32(3270139970);
+emit_32(1101316280);
+emit_32(1126948864);
+emit_32(3269627871);
+emit_32(1101803658);
+emit_32(1126948864);
+emit_32(3269115904);
+emit_32(1102338327);
+emit_32(1126948864);
+emit_32(3268603937);
+emit_32(1102614679);
+emit_32(1126948864);
+emit_32(3268091970);
+emit_32(1102899577);
+emit_32(1126948864);
+emit_32(3267579911);
+emit_32(1102273472);
+emit_32(1126948864);
+emit_32(3267067904);
+emit_32(1102032300);
+emit_32(1126948864);
+emit_32(3266555911);
+emit_32(1102213336);
+emit_32(1126948864);
+emit_32(3266043904);
+emit_32(1101920154);
+emit_32(1126948864);
+emit_32(3265531911);
+emit_32(1101073377);
+emit_32(1126948864);
+emit_32(3265019904);
+emit_32(1099747453);
+emit_32(1126948864);
+emit_32(3264507911);
+emit_32(1097970221);
+emit_32(1126948864);
+emit_32(3263995904);
+emit_32(1098951583);
+emit_32(1126948864);
+emit_32(3263483911);
+emit_32(1099125385);
+emit_32(1126948864);
+emit_32(3262775296);
+emit_32(1099384383);
+emit_32(1126948864);
+emit_32(3261751309);
+emit_32(1099297666);
+emit_32(1126948864);
+emit_32(3260727296);
+emit_32(1099151914);
+emit_32(1126948864);
+emit_32(3259703309);
+emit_32(1100003043);
+emit_32(1126948864);
+emit_32(3258679296);
+emit_32(1100391278);
+emit_32(1126948864);
+emit_32(3257655309);
+emit_32(1100196872);
+emit_32(1126948864);
+emit_32(3256631296);
+emit_32(1100006189);
+emit_32(1126948864);
+emit_32(3255607309);
+emit_32(1100085251);
+emit_32(1126948864);
+emit_32(3254386688);
+emit_32(1099464704);
+emit_32(1126948864);
+emit_32(3252338714);
+emit_32(1098192624);
+emit_32(1126948864);
+emit_32(3250290688);
+emit_32(1098051695);
+emit_32(1126948864);
+emit_32(3248242714);
+emit_32(1099538104);
+emit_32(1126948864);
+emit_32(3245998080);
+emit_32(1100121060);
+emit_32(1126948864);
+emit_32(3241902132);
+emit_32(1100174380);
+emit_32(1126948864);
+emit_32(3237609472);
+emit_32(1100128138);
+emit_32(1126948864);
+emit_32(3229220864);
+emit_32(1099728526);
+emit_32(1126948864);
+emit_32(0);
+emit_32(1099015494);
+emit_32(1126948864);
+emit_32(1081737216);
+emit_32(1098949119);
+emit_32(1126948864);
+emit_32(3279552512);
+emit_32(1092053820);
+emit_32(1126692880);
+emit_32(3279296528);
+emit_32(1091482168);
+emit_32(1126692880);
+emit_32(3279040545);
+emit_32(1090170556);
+emit_32(1126692880);
+emit_32(3278784496);
+emit_32(1089291577);
+emit_32(1126692880);
+emit_32(3278528512);
+emit_32(1087031308);
+emit_32(1126692880);
+emit_32(3278272528);
+emit_32(1085157335);
+emit_32(1126692880);
+emit_32(3278016545);
+emit_32(1082956060);
+emit_32(1126692880);
+emit_32(3277760496);
+emit_32(1079787745);
+emit_32(1126692880);
+emit_32(3277504512);
+emit_32(1083066831);
+emit_32(1126692880);
+emit_32(3277248528);
+emit_32(1084997260);
+emit_32(1126692880);
+emit_32(3276992545);
+emit_32(1086936056);
+emit_32(1126692880);
+emit_32(3276736496);
+emit_32(1087077194);
+emit_32(1126692880);
+emit_32(3276480512);
+emit_32(1089181120);
+emit_32(1126692880);
+emit_32(3276224528);
+emit_32(1090090592);
+emit_32(1126692880);
+emit_32(3275968545);
+emit_32(1091979287);
+emit_32(1126692880);
+emit_32(3275712496);
+emit_32(1093947779);
+emit_32(1126692880);
+emit_32(3275456512);
+emit_32(1095104148);
+emit_32(1126692880);
+emit_32(3275200528);
+emit_32(1097546806);
+emit_32(1126692880);
+emit_32(3274944545);
+emit_32(1098312476);
+emit_32(1126692880);
+emit_32(3274688496);
+emit_32(1098096050);
+emit_32(1126692880);
+emit_32(3274432512);
+emit_32(1096460062);
+emit_32(1126692880);
+emit_32(3274176528);
+emit_32(1096848350);
+emit_32(1126692880);
+emit_32(3273920545);
+emit_32(1096377539);
+emit_32(1126692880);
+emit_32(3273664496);
+emit_32(1097570714);
+emit_32(1126692880);
+emit_32(3273408512);
+emit_32(1098430756);
+emit_32(1126692880);
+emit_32(3273152528);
+emit_32(1099100848);
+emit_32(1126692880);
+emit_32(3272896545);
+emit_32(1099443103);
+emit_32(1126692880);
+emit_32(3272640496);
+emit_32(1099024459);
+emit_32(1126692880);
+emit_32(3272384512);
+emit_32(1097976827);
+emit_32(1126692880);
+emit_32(3272128528);
+emit_32(1099397281);
+emit_32(1126692880);
+emit_32(3271872545);
+emit_32(1100167250);
+emit_32(1126692880);
+emit_32(3271616496);
+emit_32(1101001916);
+emit_32(1126692880);
+emit_32(3271163904);
+emit_32(1101218133);
+emit_32(1126692880);
+emit_32(3270651937);
+emit_32(1101763445);
+emit_32(1126692880);
+emit_32(3270139970);
+emit_32(1102254703);
+emit_32(1126692880);
+emit_32(3269627871);
+emit_32(1102306188);
+emit_32(1126692880);
+emit_32(3269115904);
+emit_32(1102526179);
+emit_32(1126692880);
+emit_32(3268603937);
+emit_32(1102836453);
+emit_32(1126692880);
+emit_32(3268091970);
+emit_32(1102582120);
+emit_32(1126692880);
+emit_32(3267579911);
+emit_32(1102493673);
+emit_32(1126692880);
+emit_32(3267067904);
+emit_32(1102731752);
+emit_32(1126692880);
+emit_32(3266555911);
+emit_32(1102752566);
+emit_32(1126692880);
+emit_32(3266043904);
+emit_32(1102414243);
+emit_32(1126692880);
+emit_32(3265531911);
+emit_32(1101987945);
+emit_32(1126692880);
+emit_32(3265019904);
+emit_32(1100347133);
+emit_32(1126692880);
+emit_32(3264507911);
+emit_32(1099205706);
+emit_32(1126692880);
+emit_32(3263995904);
+emit_32(1099525784);
+emit_32(1126692880);
+emit_32(3263483911);
+emit_32(1100012533);
+emit_32(1126692880);
+emit_32(3262775296);
+emit_32(1100473434);
+emit_32(1126692880);
+emit_32(3261751309);
+emit_32(1099686268);
+emit_32(1126692880);
+emit_32(3260727296);
+emit_32(1099578474);
+emit_32(1126692880);
+emit_32(3259703309);
+emit_32(1099386952);
+emit_32(1126692880);
+emit_32(3258679296);
+emit_32(1099512257);
+emit_32(1126692880);
+emit_32(3257655309);
+emit_32(1099849269);
+emit_32(1126692880);
+emit_32(3256631296);
+emit_32(1099792017);
+emit_32(1126692880);
+emit_32(3255607309);
+emit_32(1099326974);
+emit_32(1126692880);
+emit_32(3254386688);
+emit_32(1098936798);
+emit_32(1126692880);
+emit_32(3252338714);
+emit_32(1097635096);
+emit_32(1126692880);
+emit_32(3250290688);
+emit_32(1099347316);
+emit_32(1126692880);
+emit_32(3248242714);
+emit_32(1099939237);
+emit_32(1126692880);
+emit_32(3245998080);
+emit_32(1100173489);
+emit_32(1126692880);
+emit_32(3241902132);
+emit_32(1100441086);
+emit_32(1126692880);
+emit_32(3237609472);
+emit_32(1100198130);
+emit_32(1126692880);
+emit_32(3229220864);
+emit_32(1099547122);
+emit_32(1126692880);
+emit_32(0);
+emit_32(1099279735);
+emit_32(1126692880);
+emit_32(1081737216);
+emit_32(1099508220);
+emit_32(1126692880);
+emit_32(3279552512);
+emit_32(1091859760);
+emit_32(1126436897);
+emit_32(3279296528);
+emit_32(1091230761);
+emit_32(1126436897);
+emit_32(3279040545);
+emit_32(1090930805);
+emit_32(1126436897);
+emit_32(3278784496);
+emit_32(1089555210);
+emit_32(1126436897);
+emit_32(3278528512);
+emit_32(1087108253);
+emit_32(1126436897);
+emit_32(3278272528);
+emit_32(1084241425);
+emit_32(1126436897);
+emit_32(3278016545);
+emit_32(1080584495);
+emit_32(1126436897);
+emit_32(3277760496);
+emit_32(1077009103);
+emit_32(1126436897);
+emit_32(3277504512);
+emit_32(1077476097);
+emit_32(1126436897);
+emit_32(3277248528);
+emit_32(1082163798);
+emit_32(1126436897);
+emit_32(3276992545);
+emit_32(1083224118);
+emit_32(1126436897);
+emit_32(3276736496);
+emit_32(1083925510);
+emit_32(1126436897);
+emit_32(3276480512);
+emit_32(1086781055);
+emit_32(1126436897);
+emit_32(3276224528);
+emit_32(1090787203);
+emit_32(1126436897);
+emit_32(3275968545);
+emit_32(1093020523);
+emit_32(1126436897);
+emit_32(3275712496);
+emit_32(1094356094);
+emit_32(1126436897);
+emit_32(3275456512);
+emit_32(1095272654);
+emit_32(1126436897);
+emit_32(3275200528);
+emit_32(1096919967);
+emit_32(1126436897);
+emit_32(3274944545);
+emit_32(1097664981);
+emit_32(1126436897);
+emit_32(3274688496);
+emit_32(1097850264);
+emit_32(1126436897);
+emit_32(3274432512);
+emit_32(1097462501);
+emit_32(1126436897);
+emit_32(3274176528);
+emit_32(1097374001);
+emit_32(1126436897);
+emit_32(3273920545);
+emit_32(1096574357);
+emit_32(1126436897);
+emit_32(3273664496);
+emit_32(1097971165);
+emit_32(1126436897);
+emit_32(3273408512);
+emit_32(1099181588);
+emit_32(1126436897);
+emit_32(3273152528);
+emit_32(1099865208);
+emit_32(1126436897);
+emit_32(3272896545);
+emit_32(1100222353);
+emit_32(1126436897);
+emit_32(3272640496);
+emit_32(1099751699);
+emit_32(1126436897);
+emit_32(3272384512);
+emit_32(1099151756);
+emit_32(1126436897);
+emit_32(3272128528);
+emit_32(1099314548);
+emit_32(1126436897);
+emit_32(3271872545);
+emit_32(1100567124);
+emit_32(1126436897);
+emit_32(3271616496);
+emit_32(1101301023);
+emit_32(1126436897);
+emit_32(3271163904);
+emit_32(1101937036);
+emit_32(1126436897);
+emit_32(3270651937);
+emit_32(1102452516);
+emit_32(1126436897);
+emit_32(3270139970);
+emit_32(1102878763);
+emit_32(1126436897);
+emit_32(3269627871);
+emit_32(1102764678);
+emit_32(1126436897);
+emit_32(3269115904);
+emit_32(1103315599);
+emit_32(1126436897);
+emit_32(3268603937);
+emit_32(1103337986);
+emit_32(1126436897);
+emit_32(3268091970);
+emit_32(1103125021);
+emit_32(1126436897);
+emit_32(3267579911);
+emit_32(1103452701);
+emit_32(1126436897);
+emit_32(3267067904);
+emit_32(1103518551);
+emit_32(1126436897);
+emit_32(3266555911);
+emit_32(1103087377);
+emit_32(1126436897);
+emit_32(3266043904);
+emit_32(1102707740);
+emit_32(1126436897);
+emit_32(3265531911);
+emit_32(1102273682);
+emit_32(1126436897);
+emit_32(3265019904);
+emit_32(1100733009);
+emit_32(1126436897);
+emit_32(3264507911);
+emit_32(1100143447);
+emit_32(1126436897);
+emit_32(3263995904);
+emit_32(1100648022);
+emit_32(1126436897);
+emit_32(3263483911);
+emit_32(1100809555);
+emit_32(1126436897);
+emit_32(3262775296);
+emit_32(1100886835);
+emit_32(1126436897);
+emit_32(3261751309);
+emit_32(1100168508);
+emit_32(1126436897);
+emit_32(3260727296);
+emit_32(1099798833);
+emit_32(1126436897);
+emit_32(3259703309);
+emit_32(1099326502);
+emit_32(1126436897);
+emit_32(3258679296);
+emit_32(1099188195);
+emit_32(1126436897);
+emit_32(3257655309);
+emit_32(1098951478);
+emit_32(1126436897);
+emit_32(3256631296);
+emit_32(1099140746);
+emit_32(1126436897);
+emit_32(3255607309);
+emit_32(1097892836);
+emit_32(1126436897);
+emit_32(3254386688);
+emit_32(1096986552);
+emit_32(1126436897);
+emit_32(3252338714);
+emit_32(1098931818);
+emit_32(1126436897);
+emit_32(3250290688);
+emit_32(1099424072);
+emit_32(1126436897);
+emit_32(3248242714);
+emit_32(1099604217);
+emit_32(1126436897);
+emit_32(3245998080);
+emit_32(1100206309);
+emit_32(1126436897);
+emit_32(3241902132);
+emit_32(1099889954);
+emit_32(1126436897);
+emit_32(3237609472);
+emit_32(1099854460);
+emit_32(1126436897);
+emit_32(3229220864);
+emit_32(1099540935);
+emit_32(1126436897);
+emit_32(0);
+emit_32(1099312713);
+emit_32(1126436897);
+emit_32(1081737216);
+emit_32(1099149921);
+emit_32(1126436897);
+emit_32(3279552512);
+emit_32(1091110007);
+emit_32(1126180848);
+emit_32(3279296528);
+emit_32(1090566603);
+emit_32(1126180848);
+emit_32(3279040545);
+emit_32(1089927538);
+emit_32(1126180848);
+emit_32(3278784496);
+emit_32(1088849057);
+emit_32(1126180848);
+emit_32(3278528512);
+emit_32(1085306191);
+emit_32(1126180848);
+emit_32(3278272528);
+emit_32(1084238930);
+emit_32(1126180848);
+emit_32(3278016545);
+emit_32(1082904260);
+emit_32(1126180848);
+emit_32(3277760496);
+emit_32(1078098238);
+emit_32(1126180848);
+emit_32(3277504512);
+emit_32(1077638962);
+emit_32(1126180848);
+emit_32(3277248528);
+emit_32(1076413302);
+emit_32(1126180848);
+emit_32(3276992545);
+emit_32(1076646547);
+emit_32(1126180848);
+emit_32(3276736496);
+emit_32(1080275711);
+emit_32(1126180848);
+emit_32(3276480512);
+emit_32(1085520143);
+emit_32(1126180848);
+emit_32(3276224528);
+emit_32(1089702514);
+emit_32(1126180848);
+emit_32(3275968545);
+emit_32(1092246705);
+emit_32(1126180848);
+emit_32(3275712496);
+emit_32(1093963402);
+emit_32(1126180848);
+emit_32(3275456512);
+emit_32(1095512778);
+emit_32(1126180848);
+emit_32(3275200528);
+emit_32(1096063386);
+emit_32(1126180848);
+emit_32(3274944545);
+emit_32(1098150157);
+emit_32(1126180848);
+emit_32(3274688496);
+emit_32(1098201747);
+emit_32(1126180848);
+emit_32(3274432512);
+emit_32(1098080322);
+emit_32(1126180848);
+emit_32(3274176528);
+emit_32(1097170158);
+emit_32(1126180848);
+emit_32(3273920545);
+emit_32(1097720975);
+emit_32(1126180848);
+emit_32(3273664496);
+emit_32(1098994627);
+emit_32(1126180848);
+emit_32(3273408512);
+emit_32(1099145570);
+emit_32(1126180848);
+emit_32(3273152528);
+emit_32(1100249878);
+emit_32(1126180848);
+emit_32(3272896545);
+emit_32(1100617613);
+emit_32(1126180848);
+emit_32(3272640496);
+emit_32(1100383781);
+emit_32(1126180848);
+emit_32(3272384512);
+emit_32(1099661417);
+emit_32(1126180848);
+emit_32(3272128528);
+emit_32(1099771570);
+emit_32(1126180848);
+emit_32(3271872545);
+emit_32(1100856322);
+emit_32(1126180848);
+emit_32(3271616496);
+emit_32(1101777863);
+emit_32(1126180848);
+emit_32(3271163904);
+emit_32(1102608912);
+emit_32(1126180848);
+emit_32(3270651937);
+emit_32(1103420142);
+emit_32(1126180848);
+emit_32(3270139970);
+emit_32(1104133541);
+emit_32(1126180848);
+emit_32(3269627871);
+emit_32(1104300737);
+emit_32(1126180848);
+emit_32(3269115904);
+emit_32(1104750366);
+emit_32(1126180848);
+emit_32(3268603937);
+emit_32(1104692327);
+emit_32(1126180848);
+emit_32(3268091970);
+emit_32(1104180255);
+emit_32(1126180848);
+emit_32(3267579911);
+emit_32(1104286004);
+emit_32(1126180848);
+emit_32(3267067904);
+emit_32(1104294760);
+emit_32(1126180848);
+emit_32(3266555911);
+emit_32(1103989519);
+emit_32(1126180848);
+emit_32(3266043904);
+emit_32(1103116370);
+emit_32(1126180848);
+emit_32(3265531911);
+emit_32(1102176374);
+emit_32(1126180848);
+emit_32(3265019904);
+emit_32(1101252683);
+emit_32(1126180848);
+emit_32(3264507911);
+emit_32(1100807091);
+emit_32(1126180848);
+emit_32(3263995904);
+emit_32(1101057072);
+emit_32(1126180848);
+emit_32(3263483911);
+emit_32(1101590954);
+emit_32(1126180848);
+emit_32(3262775296);
+emit_32(1101241516);
+emit_32(1126180848);
+emit_32(3261751309);
+emit_32(1100721632);
+emit_32(1126180848);
+emit_32(3260727296);
+emit_32(1100065328);
+emit_32(1126180848);
+emit_32(3259703309);
+emit_32(1099340867);
+emit_32(1126180848);
+emit_32(3258679296);
+emit_32(1099102631);
+emit_32(1126180848);
+emit_32(3257655309);
+emit_32(1098007550);
+emit_32(1126180848);
+emit_32(3256631296);
+emit_32(1097436391);
+emit_32(1126180848);
+emit_32(3255607309);
+emit_32(1097548589);
+emit_32(1126180848);
+emit_32(3254386688);
+emit_32(1097682282);
+emit_32(1126180848);
+emit_32(3252338714);
+emit_32(1099124127);
+emit_32(1126180848);
+emit_32(3250290688);
+emit_32(1098983145);
+emit_32(1126180848);
+emit_32(3248242714);
+emit_32(1099734136);
+emit_32(1126180848);
+emit_32(3245998080);
+emit_32(1099916745);
+emit_32(1126180848);
+emit_32(3241902132);
+emit_32(1099462450);
+emit_32(1126180848);
+emit_32(3237609472);
+emit_32(1099513410);
+emit_32(1126180848);
+emit_32(3229220864);
+emit_32(1099346425);
+emit_32(1126180848);
+emit_32(0);
+emit_32(1099133931);
+emit_32(1126180848);
+emit_32(1081737216);
+emit_32(1099236901);
+emit_32(1126180848);
+emit_32(3279552512);
+emit_32(1089511002);
+emit_32(1125924864);
+emit_32(3279296528);
+emit_32(1089751084);
+emit_32(1125924864);
+emit_32(3279040545);
+emit_32(1089625192);
+emit_32(1125924864);
+emit_32(3278784496);
+emit_32(1088308768);
+emit_32(1125924864);
+emit_32(3278528512);
+emit_32(1083791334);
+emit_32(1125924864);
+emit_32(3278272528);
+emit_32(1083037702);
+emit_32(1125924864);
+emit_32(3278016545);
+emit_32(1082409647);
+emit_32(1125924864);
+emit_32(3277760496);
+emit_32(1076909237);
+emit_32(1125924864);
+emit_32(3277504512);
+emit_32(1076578474);
+emit_32(1125924864);
+emit_32(3277248528);
+emit_32(1079282500);
+emit_32(1125924864);
+emit_32(3276992545);
+emit_32(1079322891);
+emit_32(1125924864);
+emit_32(3276736496);
+emit_32(1080482867);
+emit_32(1125924864);
+emit_32(3276480512);
+emit_32(1083066517);
+emit_32(1125924864);
+emit_32(3276224528);
+emit_32(1086368944);
+emit_32(1125924864);
+emit_32(3275968545);
+emit_32(1090788545);
+emit_32(1125924864);
+emit_32(3275712496);
+emit_32(1093220381);
+emit_32(1125924864);
+emit_32(3275456512);
+emit_32(1094138095);
+emit_32(1125924864);
+emit_32(3275200528);
+emit_32(1095485201);
+emit_32(1125924864);
+emit_32(3274944545);
+emit_32(1098300103);
+emit_32(1125924864);
+emit_32(3274688496);
+emit_32(1099012348);
+emit_32(1125924864);
+emit_32(3274432512);
+emit_32(1097753795);
+emit_32(1125924864);
+emit_32(3274176528);
+emit_32(1096927727);
+emit_32(1125924864);
+emit_32(3273920545);
+emit_32(1098937847);
+emit_32(1125924864);
+emit_32(3273664496);
+emit_32(1099750598);
+emit_32(1125924864);
+emit_32(3273408512);
+emit_32(1099826096);
+emit_32(1125924864);
+emit_32(3273152528);
+emit_32(1100180514);
+emit_32(1125924864);
+emit_32(3272896545);
+emit_32(1100786015);
+emit_32(1125924864);
+emit_32(3272640496);
+emit_32(1100625006);
+emit_32(1125924864);
+emit_32(3272384512);
+emit_32(1100107638);
+emit_32(1125924864);
+emit_32(3272128528);
+emit_32(1100331457);
+emit_32(1125924864);
+emit_32(3271872545);
+emit_32(1101249590);
+emit_32(1125924864);
+emit_32(3271616496);
+emit_32(1102354737);
+emit_32(1125924864);
+emit_32(3271163904);
+emit_32(1103441691);
+emit_32(1125924864);
+emit_32(3270651937);
+emit_32(1104738936);
+emit_32(1125924864);
+emit_32(3270139970);
+emit_32(1105236276);
+emit_32(1125924864);
+emit_32(3269627871);
+emit_32(1105460304);
+emit_32(1125924864);
+emit_32(3269115904);
+emit_32(1105771993);
+emit_32(1125924864);
+emit_32(3268603937);
+emit_32(1105867833);
+emit_32(1125924864);
+emit_32(3268091970);
+emit_32(1105681868);
+emit_32(1125924864);
+emit_32(3267579911);
+emit_32(1105399854);
+emit_32(1125924864);
+emit_32(3267067904);
+emit_32(1104596592);
+emit_32(1125924864);
+emit_32(3266555911);
+emit_32(1104130657);
+emit_32(1125924864);
+emit_32(3266043904);
+emit_32(1103243877);
+emit_32(1125924864);
+emit_32(3265531911);
+emit_32(1102380270);
+emit_32(1125924864);
+emit_32(3265019904);
+emit_32(1102020241);
+emit_32(1125924864);
+emit_32(3264507911);
+emit_32(1101572656);
+emit_32(1125924864);
+emit_32(3263995904);
+emit_32(1101722026);
+emit_32(1125924864);
+emit_32(3263483911);
+emit_32(1101703833);
+emit_32(1125924864);
+emit_32(3262775296);
+emit_32(1101282463);
+emit_32(1125924864);
+emit_32(3261751309);
+emit_32(1100994314);
+emit_32(1125924864);
+emit_32(3260727296);
+emit_32(1100261255);
+emit_32(1125924864);
+emit_32(3259703309);
+emit_32(1099538104);
+emit_32(1125924864);
+emit_32(3258679296);
+emit_32(1099005113);
+emit_32(1125924864);
+emit_32(3257655309);
+emit_32(1097288542);
+emit_32(1125924864);
+emit_32(3256631296);
+emit_32(1096558523);
+emit_32(1125924864);
+emit_32(3255607309);
+emit_32(1097476761);
+emit_32(1125924864);
+emit_32(3254386688);
+emit_32(1098510552);
+emit_32(1125924864);
+emit_32(3252338714);
+emit_32(1098575249);
+emit_32(1125924864);
+emit_32(3250290688);
+emit_32(1099187146);
+emit_32(1125924864);
+emit_32(3248242714);
+emit_32(1099341339);
+emit_32(1125924864);
+emit_32(3245998080);
+emit_32(1099196531);
+emit_32(1125924864);
+emit_32(3241902132);
+emit_32(1099085906);
+emit_32(1125924864);
+emit_32(3237609472);
+emit_32(1099120876);
+emit_32(1125924864);
+emit_32(3229220864);
+emit_32(1098773955);
+emit_32(1125924864);
+emit_32(0);
+emit_32(1099088580);
+emit_32(1125924864);
+emit_32(1081737216);
+emit_32(1099397648);
+emit_32(1125924864);
+emit_32(3279552512);
+emit_32(1087350222);
+emit_32(1125668880);
+emit_32(3279296528);
+emit_32(1087173453);
+emit_32(1125668880);
+emit_32(3279040545);
+emit_32(1087524370);
+emit_32(1125668880);
+emit_32(3278784496);
+emit_32(1085198146);
+emit_32(1125668880);
+emit_32(3278528512);
+emit_32(1082565654);
+emit_32(1125668880);
+emit_32(3278272528);
+emit_32(1077145753);
+emit_32(1125668880);
+emit_32(3278016545);
+emit_32(1072746264);
+emit_32(1125668880);
+emit_32(3277760496);
+emit_32(1070147557);
+emit_32(1125668880);
+emit_32(3277504512);
+emit_32(1075759536);
+emit_32(1125668880);
+emit_32(3277248528);
+emit_32(1077469889);
+emit_32(1125668880);
+emit_32(3276992545);
+emit_32(1076408479);
+emit_32(1125668880);
+emit_32(3276736496);
+emit_32(1077817429);
+emit_32(1125668880);
+emit_32(3276480512);
+emit_32(1080487943);
+emit_32(1125668880);
+emit_32(3276224528);
+emit_32(1082089831);
+emit_32(1125668880);
+emit_32(3275968545);
+emit_32(1089194856);
+emit_32(1125668880);
+emit_32(3275712496);
+emit_32(1092143819);
+emit_32(1125668880);
+emit_32(3275456512);
+emit_32(1093271971);
+emit_32(1125668880);
+emit_32(3275200528);
+emit_32(1095061157);
+emit_32(1125668880);
+emit_32(3274944545);
+emit_32(1096826225);
+emit_32(1125668880);
+emit_32(3274688496);
+emit_32(1097739220);
+emit_32(1125668880);
+emit_32(3274432512);
+emit_32(1097853200);
+emit_32(1125668880);
+emit_32(3274176528);
+emit_32(1097601856);
+emit_32(1125668880);
+emit_32(3273920545);
+emit_32(1099313866);
+emit_32(1125668880);
+emit_32(3273664496);
+emit_32(1100242538);
+emit_32(1125668880);
+emit_32(3273408512);
+emit_32(1100791520);
+emit_32(1125668880);
+emit_32(3273152528);
+emit_32(1100534671);
+emit_32(1125668880);
+emit_32(3272896545);
+emit_32(1100486803);
+emit_32(1125668880);
+emit_32(3272640496);
+emit_32(1100712667);
+emit_32(1125668880);
+emit_32(3272384512);
+emit_32(1100661549);
+emit_32(1125668880);
+emit_32(3272128528);
+emit_32(1101351407);
+emit_32(1125668880);
+emit_32(3271872545);
+emit_32(1102206154);
+emit_32(1125668880);
+emit_32(3271616496);
+emit_32(1103301286);
+emit_32(1125668880);
+emit_32(3271163904);
+emit_32(1104362760);
+emit_32(1125668880);
+emit_32(3270651937);
+emit_32(1105383916);
+emit_32(1125668880);
+emit_32(3270139970);
+emit_32(1106277093);
+emit_32(1125668880);
+emit_32(3269627871);
+emit_32(1106308235);
+emit_32(1125668880);
+emit_32(3269115904);
+emit_32(1106719801);
+emit_32(1125668880);
+emit_32(3268603937);
+emit_32(1106707323);
+emit_32(1125668880);
+emit_32(3268091970);
+emit_32(1106722475);
+emit_32(1125668880);
+emit_32(3267579911);
+emit_32(1106438259);
+emit_32(1125668880);
+emit_32(3267067904);
+emit_32(1105408609);
+emit_32(1125668880);
+emit_32(3266555911);
+emit_32(1104049917);
+emit_32(1125668880);
+emit_32(3266043904);
+emit_32(1103297564);
+emit_32(1125668880);
+emit_32(3265531911);
+emit_32(1102461429);
+emit_32(1125668880);
+emit_32(3265019904);
+emit_32(1102366533);
+emit_32(1125668880);
+emit_32(3264507911);
+emit_32(1101967340);
+emit_32(1125668880);
+emit_32(3263995904);
+emit_32(1101786146);
+emit_32(1125668880);
+emit_32(3263483911);
+emit_32(1101553258);
+emit_32(1125668880);
+emit_32(3262775296);
+emit_32(1101001340);
+emit_32(1125668880);
+emit_32(3261751309);
+emit_32(1100728448);
+emit_32(1125668880);
+emit_32(3260727296);
+emit_32(1100022546);
+emit_32(1125668880);
+emit_32(3259703309);
+emit_32(1099153224);
+emit_32(1125668880);
+emit_32(3258679296);
+emit_32(1097869977);
+emit_32(1125668880);
+emit_32(3257655309);
+emit_32(1096668099);
+emit_32(1125668880);
+emit_32(3256631296);
+emit_32(1097741107);
+emit_32(1125668880);
+emit_32(3255607309);
+emit_32(1097981755);
+emit_32(1125668880);
+emit_32(3254386688);
+emit_32(1097933206);
+emit_32(1125668880);
+emit_32(3252338714);
+emit_32(1098260572);
+emit_32(1125668880);
+emit_32(3250290688);
+emit_32(1098406219);
+emit_32(1125668880);
+emit_32(3248242714);
+emit_32(1098084516);
+emit_32(1125668880);
+emit_32(3245998080);
+emit_32(1098079168);
+emit_32(1125668880);
+emit_32(3241902132);
+emit_32(1098423520);
+emit_32(1125668880);
+emit_32(3237609472);
+emit_32(1098536662);
+emit_32(1125668880);
+emit_32(3229220864);
+emit_32(1098183711);
+emit_32(1125668880);
+emit_32(0);
+emit_32(1099109709);
+emit_32(1125668880);
+emit_32(1081737216);
+emit_32(1099796421);
+emit_32(1125668880);
+emit_32(3279552512);
+emit_32(1084599032);
+emit_32(1125412897);
+emit_32(3279296528);
+emit_32(1083540012);
+emit_32(1125412897);
+emit_32(3279040545);
+emit_32(1082794369);
+emit_32(1125412897);
+emit_32(3278784496);
+emit_32(1078855100);
+emit_32(1125412897);
+emit_32(3278528512);
+emit_32(1074302393);
+emit_32(1125412897);
+emit_32(3278272528);
+emit_32(1066993608);
+emit_32(1125412897);
+emit_32(3278016545);
+emit_32(1038259757);
+emit_32(1125412897);
+emit_32(3277760496);
+emit_32(1064430889);
+emit_32(1125412897);
+emit_32(3277504512);
+emit_32(1068992026);
+emit_32(1125412897);
+emit_32(3277248528);
+emit_32(1074031860);
+emit_32(1125412897);
+emit_32(3276992545);
+emit_32(1074904275);
+emit_32(1125412897);
+emit_32(3276736496);
+emit_32(1074708653);
+emit_32(1125412897);
+emit_32(3276480512);
+emit_32(1076428066);
+emit_32(1125412897);
+emit_32(3276224528);
+emit_32(1077918302);
+emit_32(1125412897);
+emit_32(3275968545);
+emit_32(1085074875);
+emit_32(1125412897);
+emit_32(3275712496);
+emit_32(1090557240);
+emit_32(1125412897);
+emit_32(3275456512);
+emit_32(1092638422);
+emit_32(1125412897);
+emit_32(3275200528);
+emit_32(1094944555);
+emit_32(1125412897);
+emit_32(3274944545);
+emit_32(1097008048);
+emit_32(1125412897);
+emit_32(3274688496);
+emit_32(1097387737);
+emit_32(1125412897);
+emit_32(3274432512);
+emit_32(1098056204);
+emit_32(1125412897);
+emit_32(3274176528);
+emit_32(1098092066);
+emit_32(1125412897);
+emit_32(3273920545);
+emit_32(1099683122);
+emit_32(1125412897);
+emit_32(3273664496);
+emit_32(1100803369);
+emit_32(1125412897);
+emit_32(3273408512);
+emit_32(1101115267);
+emit_32(1125412897);
+emit_32(3273152528);
+emit_32(1101294207);
+emit_32(1125412897);
+emit_32(3272896545);
+emit_32(1101133932);
+emit_32(1125412897);
+emit_32(3272640496);
+emit_32(1101242093);
+emit_32(1125412897);
+emit_32(3272384512);
+emit_32(1101498994);
+emit_32(1125412897);
+emit_32(3272128528);
+emit_32(1102385303);
+emit_32(1125412897);
+emit_32(3271872545);
+emit_32(1103696757);
+emit_32(1125412897);
+emit_32(3271616496);
+emit_32(1104690492);
+emit_32(1125412897);
+emit_32(3271163904);
+emit_32(1105923146);
+emit_32(1125412897);
+emit_32(3270651937);
+emit_32(1106797868);
+emit_32(1125412897);
+emit_32(3270139970);
+emit_32(1107151867);
+emit_32(1125412897);
+emit_32(3269627871);
+emit_32(1107261181);
+emit_32(1125412897);
+emit_32(3269115904);
+emit_32(1107270933);
+emit_32(1125412897);
+emit_32(3268603937);
+emit_32(1107353141);
+emit_32(1125412897);
+emit_32(3268091970);
+emit_32(1107243880);
+emit_32(1125412897);
+emit_32(3267579911);
+emit_32(1106494620);
+emit_32(1125412897);
+emit_32(3267067904);
+emit_32(1105521174);
+emit_32(1125412897);
+emit_32(3266555911);
+emit_32(1104449162);
+emit_32(1125412897);
+emit_32(3266043904);
+emit_32(1103510110);
+emit_32(1125412897);
+emit_32(3265531911);
+emit_32(1102747953);
+emit_32(1125412897);
+emit_32(3265019904);
+emit_32(1102196874);
+emit_32(1125412897);
+emit_32(3264507911);
+emit_32(1102074085);
+emit_32(1125412897);
+emit_32(3263995904);
+emit_32(1101784888);
+emit_32(1125412897);
+emit_32(3263483911);
+emit_32(1101295203);
+emit_32(1125412897);
+emit_32(3262775296);
+emit_32(1100689231);
+emit_32(1125412897);
+emit_32(3261751309);
+emit_32(1100003515);
+emit_32(1125412897);
+emit_32(3260727296);
+emit_32(1099230295);
+emit_32(1125412897);
+emit_32(3259703309);
+emit_32(1098733375);
+emit_32(1125412897);
+emit_32(3258679296);
+emit_32(1096895326);
+emit_32(1125412897);
+emit_32(3257655309);
+emit_32(1095571918);
+emit_32(1125412897);
+emit_32(3256631296);
+emit_32(1096896374);
+emit_32(1125412897);
+emit_32(3255607309);
+emit_32(1097195638);
+emit_32(1125412897);
+emit_32(3254386688);
+emit_32(1097122238);
+emit_32(1125412897);
+emit_32(3252338714);
+emit_32(1098028522);
+emit_32(1125412897);
+emit_32(3250290688);
+emit_32(1096753663);
+emit_32(1125412897);
+emit_32(3248242714);
+emit_32(1097797416);
+emit_32(1125412897);
+emit_32(3245998080);
+emit_32(1098329673);
+emit_32(1125412897);
+emit_32(3241902132);
+emit_32(1098215273);
+emit_32(1125412897);
+emit_32(3237609472);
+emit_32(1097896401);
+emit_32(1125412897);
+emit_32(3229220864);
+emit_32(1098533411);
+emit_32(1125412897);
+emit_32(0);
+emit_32(1099233650);
+emit_32(1125412897);
+emit_32(1081737216);
+emit_32(1100171654);
+emit_32(1125412897);
+emit_32(3279552512);
+emit_32(1085043754);
+emit_32(1125156848);
+emit_32(3279296528);
+emit_32(1082745359);
+emit_32(1125156848);
+emit_32(3279040545);
+emit_32(1077929543);
+emit_32(1125156848);
+emit_32(3278784496);
+emit_32(1077120797);
+emit_32(1125156848);
+emit_32(3278528512);
+emit_32(1070829467);
+emit_32(1125156848);
+emit_32(3278272528);
+emit_32(3196693122);
+emit_32(1125156848);
+emit_32(3278016545);
+emit_32(3203591578);
+emit_32(1125156848);
+emit_32(3277760496);
+emit_32(3178809932);
+emit_32(1125156848);
+emit_32(3277504512);
+emit_32(1062996554);
+emit_32(1125156848);
+emit_32(3277248528);
+emit_32(1067740194);
+emit_32(1125156848);
+emit_32(3276992545);
+emit_32(1071204690);
+emit_32(1125156848);
+emit_32(3276736496);
+emit_32(1074277437);
+emit_32(1125156848);
+emit_32(3276480512);
+emit_32(1077601171);
+emit_32(1125156848);
+emit_32(3276224528);
+emit_32(1081521125);
+emit_32(1125156848);
+emit_32(3275968545);
+emit_32(1082948300);
+emit_32(1125156848);
+emit_32(3275712496);
+emit_32(1087836804);
+emit_32(1125156848);
+emit_32(3275456512);
+emit_32(1091823815);
+emit_32(1125156848);
+emit_32(3275200528);
+emit_32(1094296745);
+emit_32(1125156848);
+emit_32(3274944545);
+emit_32(1095976039);
+emit_32(1125156848);
+emit_32(3274688496);
+emit_32(1097507484);
+emit_32(1125156848);
+emit_32(3274432512);
+emit_32(1097570923);
+emit_32(1125156848);
+emit_32(3274176528);
+emit_32(1098982359);
+emit_32(1125156848);
+emit_32(3273920545);
+emit_32(1100051802);
+emit_32(1125156848);
+emit_32(3273664496);
+emit_32(1100994419);
+emit_32(1125156848);
+emit_32(3273408512);
+emit_32(1102158705);
+emit_32(1125156848);
+emit_32(3273152528);
+emit_32(1102017357);
+emit_32(1125156848);
+emit_32(3272896545);
+emit_32(1102232735);
+emit_32(1125156848);
+emit_32(3272640496);
+emit_32(1101864265);
+emit_32(1125156848);
+emit_32(3272384512);
+emit_32(1102610222);
+emit_32(1125156848);
+emit_32(3272128528);
+emit_32(1103466332);
+emit_32(1125156848);
+emit_32(3271872545);
+emit_32(1104473437);
+emit_32(1125156848);
+emit_32(3271616496);
+emit_32(1106243066);
+emit_32(1125156848);
+emit_32(3271163904);
+emit_32(1107111235);
+emit_32(1125156848);
+emit_32(3270651937);
+emit_32(1107425205);
+emit_32(1125156848);
+emit_32(3270139970);
+emit_32(1107552502);
+emit_32(1125156848);
+emit_32(3269627871);
+emit_32(1107600002);
+emit_32(1125156848);
+emit_32(3269115904);
+emit_32(1107564875);
+emit_32(1125156848);
+emit_32(3268603937);
+emit_32(1107418258);
+emit_32(1125156848);
+emit_32(3268091970);
+emit_32(1107034584);
+emit_32(1125156848);
+emit_32(3267579911);
+emit_32(1106363600);
+emit_32(1125156848);
+emit_32(3267067904);
+emit_32(1105390731);
+emit_32(1125156848);
+emit_32(3266555911);
+emit_32(1104501591);
+emit_32(1125156848);
+emit_32(3266043904);
+emit_32(1103946108);
+emit_32(1125156848);
+emit_32(3265531911);
+emit_32(1102869325);
+emit_32(1125156848);
+emit_32(3265019904);
+emit_32(1101989360);
+emit_32(1125156848);
+emit_32(3264507911);
+emit_32(1101780170);
+emit_32(1125156848);
+emit_32(3263995904);
+emit_32(1101640971);
+emit_32(1125156848);
+emit_32(3263483911);
+emit_32(1101030700);
+emit_32(1125156848);
+emit_32(3262775296);
+emit_32(1100725564);
+emit_32(1125156848);
+emit_32(3261751309);
+emit_32(1099604322);
+emit_32(1125156848);
+emit_32(3260727296);
+emit_32(1099292318);
+emit_32(1125156848);
+emit_32(3259703309);
+emit_32(1098829949);
+emit_32(1125156848);
+emit_32(3258679296);
+emit_32(1097125803);
+emit_32(1125156848);
+emit_32(3257655309);
+emit_32(1096142658);
+emit_32(1125156848);
+emit_32(3256631296);
+emit_32(1095542138);
+emit_32(1125156848);
+emit_32(3255607309);
+emit_32(1096456811);
+emit_32(1125156848);
+emit_32(3254386688);
+emit_32(1096482501);
+emit_32(1125156848);
+emit_32(3252338714);
+emit_32(1096896270);
+emit_32(1125156848);
+emit_32(3250290688);
+emit_32(1096761213);
+emit_32(1125156848);
+emit_32(3248242714);
+emit_32(1096850971);
+emit_32(1125156848);
+emit_32(3245998080);
+emit_32(1096941463);
+emit_32(1125156848);
+emit_32(3241902132);
+emit_32(1096922589);
+emit_32(1125156848);
+emit_32(3237609472);
+emit_32(1097331429);
+emit_32(1125156848);
+emit_32(3229220864);
+emit_32(1098308177);
+emit_32(1125156848);
+emit_32(0);
+emit_32(1099200882);
+emit_32(1125156848);
+emit_32(1081737216);
+emit_32(1099891107);
+emit_32(1125156848);
+emit_32(3279552512);
+emit_32(1084907963);
+emit_32(1124900864);
+emit_32(3279296528);
+emit_32(1083246159);
+emit_32(1124900864);
+emit_32(3279040545);
+emit_32(1077321704);
+emit_32(1124900864);
+emit_32(3278784496);
+emit_32(1069416909);
+emit_32(1124900864);
+emit_32(3278528512);
+emit_32(1044789651);
+emit_32(1124900864);
+emit_32(3278272528);
+emit_32(3167012033);
+emit_32(1124900864);
+emit_32(3278016545);
+emit_32(3192403624);
+emit_32(1124900864);
+emit_32(3277760496);
+emit_32(3204872485);
+emit_32(1124900864);
+emit_32(3277504512);
+emit_32(1048751859);
+emit_32(1124900864);
+emit_32(3277248528);
+emit_32(1057065154);
+emit_32(1124900864);
+emit_32(3276992545);
+emit_32(1067451207);
+emit_32(1124900864);
+emit_32(3276736496);
+emit_32(1076983266);
+emit_32(1124900864);
+emit_32(3276480512);
+emit_32(1078929255);
+emit_32(1124900864);
+emit_32(3276224528);
+emit_32(1081361406);
+emit_32(1124900864);
+emit_32(3275968545);
+emit_32(1083089858);
+emit_32(1124900864);
+emit_32(3275712496);
+emit_32(1087525083);
+emit_32(1124900864);
+emit_32(3275456512);
+emit_32(1091337443);
+emit_32(1124900864);
+emit_32(3275200528);
+emit_32(1093300912);
+emit_32(1124900864);
+emit_32(3274944545);
+emit_32(1094898103);
+emit_32(1124900864);
+emit_32(3274688496);
+emit_32(1096638530);
+emit_32(1124900864);
+emit_32(3274432512);
+emit_32(1097274071);
+emit_32(1124900864);
+emit_32(3274176528);
+emit_32(1099026766);
+emit_32(1124900864);
+emit_32(3273920545);
+emit_32(1099861538);
+emit_32(1124900864);
+emit_32(3273664496);
+emit_32(1101176137);
+emit_32(1124900864);
+emit_32(3273408512);
+emit_32(1101893049);
+emit_32(1124900864);
+emit_32(3273152528);
+emit_32(1101975047);
+emit_32(1124900864);
+emit_32(3272896545);
+emit_32(1102502691);
+emit_32(1124900864);
+emit_32(3272640496);
+emit_32(1102587573);
+emit_32(1124900864);
+emit_32(3272384512);
+emit_32(1103471103);
+emit_32(1124900864);
+emit_32(3272128528);
+emit_32(1104395895);
+emit_32(1124900864);
+emit_32(3271872545);
+emit_32(1105537742);
+emit_32(1124900864);
+emit_32(3271616496);
+emit_32(1106756659);
+emit_32(1124900864);
+emit_32(3271163904);
+emit_32(1107634867);
+emit_32(1124900864);
+emit_32(3270651937);
+emit_32(1108079516);
+emit_32(1124900864);
+emit_32(3270139970);
+emit_32(1107976153);
+emit_32(1124900864);
+emit_32(3269627871);
+emit_32(1107884271);
+emit_32(1124900864);
+emit_32(3269115904);
+emit_32(1107747642);
+emit_32(1124900864);
+emit_32(3268603937);
+emit_32(1107549985);
+emit_32(1124900864);
+emit_32(3268091970);
+emit_32(1106944773);
+emit_32(1124900864);
+emit_32(3267579911);
+emit_32(1106247732);
+emit_32(1124900864);
+emit_32(3267067904);
+emit_32(1105208646);
+emit_32(1124900864);
+emit_32(3266555911);
+emit_32(1104283802);
+emit_32(1124900864);
+emit_32(3266043904);
+emit_32(1103606946);
+emit_32(1124900864);
+emit_32(3265531911);
+emit_32(1102871160);
+emit_32(1124900864);
+emit_32(3265019904);
+emit_32(1101718513);
+emit_32(1124900864);
+emit_32(3264507911);
+emit_32(1101446513);
+emit_32(1124900864);
+emit_32(3263995904);
+emit_32(1101370543);
+emit_32(1124900864);
+emit_32(3263483911);
+emit_32(1100714292);
+emit_32(1124900864);
+emit_32(3262775296);
+emit_32(1099954599);
+emit_32(1124900864);
+emit_32(3261751309);
+emit_32(1099576325);
+emit_32(1124900864);
+emit_32(3260727296);
+emit_32(1099307680);
+emit_32(1124900864);
+emit_32(3259703309);
+emit_32(1098767978);
+emit_32(1124900864);
+emit_32(3258679296);
+emit_32(1098097938);
+emit_32(1124900864);
+emit_32(3257655309);
+emit_32(1096914095);
+emit_32(1124900864);
+emit_32(3256631296);
+emit_32(1096195192);
+emit_32(1124900864);
+emit_32(3255607309);
+emit_32(1095657482);
+emit_32(1124900864);
+emit_32(3254386688);
+emit_32(1095370487);
+emit_32(1124900864);
+emit_32(3252338714);
+emit_32(1095450703);
+emit_32(1124900864);
+emit_32(3250290688);
+emit_32(1094766612);
+emit_32(1124900864);
+emit_32(3248242714);
+emit_32(1095587018);
+emit_32(1124900864);
+emit_32(3245998080);
+emit_32(1094951266);
+emit_32(1124900864);
+emit_32(3241902132);
+emit_32(1094949903);
+emit_32(1124900864);
+emit_32(3237609472);
+emit_32(1096714656);
+emit_32(1124900864);
+emit_32(3229220864);
+emit_32(1098445226);
+emit_32(1124900864);
+emit_32(0);
+emit_32(1099331587);
+emit_32(1124900864);
+emit_32(1081737216);
+emit_32(1100260206);
+emit_32(1124900864);
+emit_32(3279552512);
+emit_32(1083591665);
+emit_32(1124644880);
+emit_32(3279296528);
+emit_32(1079852212);
+emit_32(1124644880);
+emit_32(3279040545);
+emit_32(1072228855);
+emit_32(1124644880);
+emit_32(3278784496);
+emit_32(1066448684);
+emit_32(1124644880);
+emit_32(3278528512);
+emit_32(1057555518);
+emit_32(1124644880);
+emit_32(3278272528);
+emit_32(1063153790);
+emit_32(1124644880);
+emit_32(3278016545);
+emit_32(1058210333);
+emit_32(1124644880);
+emit_32(3277760496);
+emit_32(1049561427);
+emit_32(1124644880);
+emit_32(3277504512);
+emit_32(3214410567);
+emit_32(1124644880);
+emit_32(3277248528);
+emit_32(3207614251);
+emit_32(1124644880);
+emit_32(3276992545);
+emit_32(1055980993);
+emit_32(1124644880);
+emit_32(3276736496);
+emit_32(1073762292);
+emit_32(1124644880);
+emit_32(3276480512);
+emit_32(1079724747);
+emit_32(1124644880);
+emit_32(3276224528);
+emit_32(1082560411);
+emit_32(1124644880);
+emit_32(3275968545);
+emit_32(1084722260);
+emit_32(1124644880);
+emit_32(3275712496);
+emit_32(1086375571);
+emit_32(1124644880);
+emit_32(3275456512);
+emit_32(1090446500);
+emit_32(1124644880);
+emit_32(3275200528);
+emit_32(1093171832);
+emit_32(1124644880);
+emit_32(3274944545);
+emit_32(1094812015);
+emit_32(1124644880);
+emit_32(3274688496);
+emit_32(1096292290);
+emit_32(1124644880);
+emit_32(3274432512);
+emit_32(1097734921);
+emit_32(1124644880);
+emit_32(3274176528);
+emit_32(1099196531);
+emit_32(1124644880);
+emit_32(3273920545);
+emit_32(1099805229);
+emit_32(1124644880);
+emit_32(3273664496);
+emit_32(1100823187);
+emit_32(1124644880);
+emit_32(3273408512);
+emit_32(1101755685);
+emit_32(1124644880);
+emit_32(3273152528);
+emit_32(1102405698);
+emit_32(1124644880);
+emit_32(3272896545);
+emit_32(1102759225);
+emit_32(1124644880);
+emit_32(3272640496);
+emit_32(1103381607);
+emit_32(1124644880);
+emit_32(3272384512);
+emit_32(1104182510);
+emit_32(1124644880);
+emit_32(3272128528);
+emit_32(1105063995);
+emit_32(1124644880);
+emit_32(3271872545);
+emit_32(1106336390);
+emit_32(1124644880);
+emit_32(3271616496);
+emit_32(1107656416);
+emit_32(1124644880);
+emit_32(3271163904);
+emit_32(1108075925);
+emit_32(1124644880);
+emit_32(3270651937);
+emit_32(1108328763);
+emit_32(1124644880);
+emit_32(3270139970);
+emit_32(1108369080);
+emit_32(1124644880);
+emit_32(3269627871);
+emit_32(1108254366);
+emit_32(1124644880);
+emit_32(3269115904);
+emit_32(1107968551);
+emit_32(1124644880);
+emit_32(3268603937);
+emit_32(1107979456);
+emit_32(1124644880);
+emit_32(3268091970);
+emit_32(1107515802);
+emit_32(1124644880);
+emit_32(3267579911);
+emit_32(1106388084);
+emit_32(1124644880);
+emit_32(3267067904);
+emit_32(1104790841);
+emit_32(1124644880);
+emit_32(3266555911);
+emit_32(1104209563);
+emit_32(1124644880);
+emit_32(3266043904);
+emit_32(1103624405);
+emit_32(1124644880);
+emit_32(3265531911);
+emit_32(1102359613);
+emit_32(1124644880);
+emit_32(3265019904);
+emit_32(1101907257);
+emit_32(1124644880);
+emit_32(3264507911);
+emit_32(1101809058);
+emit_32(1124644880);
+emit_32(3263995904);
+emit_32(1101301128);
+emit_32(1124644880);
+emit_32(3263483911);
+emit_32(1100497289);
+emit_32(1124644880);
+emit_32(3262775296);
+emit_32(1099654863);
+emit_32(1124644880);
+emit_32(3261751309);
+emit_32(1099315701);
+emit_32(1124644880);
+emit_32(3260727296);
+emit_32(1098867697);
+emit_32(1124644880);
+emit_32(3259703309);
+emit_32(1097723491);
+emit_32(1124644880);
+emit_32(3258679296);
+emit_32(1097140063);
+emit_32(1124644880);
+emit_32(3257655309);
+emit_32(1096683933);
+emit_32(1124644880);
+emit_32(3256631296);
+emit_32(1095379399);
+emit_32(1124644880);
+emit_32(3255607309);
+emit_32(1094758747);
+emit_32(1124644880);
+emit_32(3254386688);
+emit_32(1094561405);
+emit_32(1124644880);
+emit_32(3252338714);
+emit_32(1094733582);
+emit_32(1124644880);
+emit_32(3250290688);
+emit_32(1093957845);
+emit_32(1124644880);
+emit_32(3248242714);
+emit_32(1094294123);
+emit_32(1124644880);
+emit_32(3245998080);
+emit_32(1093574905);
+emit_32(1124644880);
+emit_32(3241902132);
+emit_32(1094867799);
+emit_32(1124644880);
+emit_32(3237609472);
+emit_32(1097134821);
+emit_32(1124644880);
+emit_32(3229220864);
+emit_32(1099036099);
+emit_32(1124644880);
+emit_32(0);
+emit_32(1099596615);
+emit_32(1124644880);
+emit_32(1081737216);
+emit_32(1100859258);
+emit_32(1124644880);
+emit_32(3279552512);
+emit_32(1081904485);
+emit_32(1124388897);
+emit_32(3279296528);
+emit_32(1075136304);
+emit_32(1124388897);
+emit_32(3279040545);
+emit_32(1073454011);
+emit_32(1124388897);
+emit_32(3278784496);
+emit_32(1066813673);
+emit_32(1124388897);
+emit_32(3278528512);
+emit_32(1058745375);
+emit_32(1124388897);
+emit_32(3278272528);
+emit_32(1007923565);
+emit_32(1124388897);
+emit_32(3278016545);
+emit_32(1041418101);
+emit_32(1124388897);
+emit_32(3277760496);
+emit_32(3199617458);
+emit_32(1124388897);
+emit_32(3277504512);
+emit_32(3217487424);
+emit_32(1124388897);
+emit_32(3277248528);
+emit_32(3214749551);
+emit_32(1124388897);
+emit_32(3276992545);
+emit_32(3200772133);
+emit_32(1124388897);
+emit_32(3276736496);
+emit_32(1066640783);
+emit_32(1124388897);
+emit_32(3276480512);
+emit_32(1076373750);
+emit_32(1124388897);
+emit_32(3276224528);
+emit_32(1080280534);
+emit_32(1124388897);
+emit_32(3275968545);
+emit_32(1084212505);
+emit_32(1124388897);
+emit_32(3275712496);
+emit_32(1084220726);
+emit_32(1124388897);
+emit_32(3275456512);
+emit_32(1088347817);
+emit_32(1124388897);
+emit_32(3275200528);
+emit_32(1092688649);
+emit_32(1124388897);
+emit_32(3274944545);
+emit_32(1095110020);
+emit_32(1124388897);
+emit_32(3274688496);
+emit_32(1096019765);
+emit_32(1124388897);
+emit_32(3274432512);
+emit_32(1097191863);
+emit_32(1124388897);
+emit_32(3274176528);
+emit_32(1099076574);
+emit_32(1124388897);
+emit_32(3273920545);
+emit_32(1099798099);
+emit_32(1124388897);
+emit_32(3273664496);
+emit_32(1100653265);
+emit_32(1124388897);
+emit_32(3273408512);
+emit_32(1101516925);
+emit_32(1124388897);
+emit_32(3273152528);
+emit_32(1102653791);
+emit_32(1124388897);
+emit_32(3272896545);
+emit_32(1103041659);
+emit_32(1124388897);
+emit_32(3272640496);
+emit_32(1103477814);
+emit_32(1124388897);
+emit_32(3272384512);
+emit_32(1104761586);
+emit_32(1124388897);
+emit_32(3272128528);
+emit_32(1105735555);
+emit_32(1124388897);
+emit_32(3271872545);
+emit_32(1106382579);
+emit_32(1124388897);
+emit_32(3271616496);
+emit_32(1107704231);
+emit_32(1124388897);
+emit_32(3271163904);
+emit_32(1108131394);
+emit_32(1124388897);
+emit_32(3270651937);
+emit_32(1108458393);
+emit_32(1124388897);
+emit_32(3270139970);
+emit_32(1108511529);
+emit_32(1124388897);
+emit_32(3269627871);
+emit_32(1108351464);
+emit_32(1124388897);
+emit_32(3269115904);
+emit_32(1108007374);
+emit_32(1124388897);
+emit_32(3268603937);
+emit_32(1107999667);
+emit_32(1124388897);
+emit_32(3268091970);
+emit_32(1107747353);
+emit_32(1124388897);
+emit_32(3267579911);
+emit_32(1106761954);
+emit_32(1124388897);
+emit_32(3267067904);
+emit_32(1105151446);
+emit_32(1124388897);
+emit_32(3266555911);
+emit_32(1103997960);
+emit_32(1124388897);
+emit_32(3266043904);
+emit_32(1103338930);
+emit_32(1124388897);
+emit_32(3265531911);
+emit_32(1102310120);
+emit_32(1124388897);
+emit_32(3265019904);
+emit_32(1102078804);
+emit_32(1124388897);
+emit_32(3264507911);
+emit_32(1102132910);
+emit_32(1124388897);
+emit_32(3263995904);
+emit_32(1101260338);
+emit_32(1124388897);
+emit_32(3263483911);
+emit_32(1100505783);
+emit_32(1124388897);
+emit_32(3262775296);
+emit_32(1099485361);
+emit_32(1124388897);
+emit_32(3261751309);
+emit_32(1099317379);
+emit_32(1124388897);
+emit_32(3260727296);
+emit_32(1097990459);
+emit_32(1124388897);
+emit_32(3259703309);
+emit_32(1097342543);
+emit_32(1124388897);
+emit_32(3258679296);
+emit_32(1095513512);
+emit_32(1124388897);
+emit_32(3257655309);
+emit_32(1095404880);
+emit_32(1124388897);
+emit_32(3256631296);
+emit_32(1094651059);
+emit_32(1124388897);
+emit_32(3255607309);
+emit_32(1094446901);
+emit_32(1124388897);
+emit_32(3254386688);
+emit_32(1093497625);
+emit_32(1124388897);
+emit_32(3252338714);
+emit_32(1093705977);
+emit_32(1124388897);
+emit_32(3250290688);
+emit_32(1093119299);
+emit_32(1124388897);
+emit_32(3248242714);
+emit_32(1093472354);
+emit_32(1124388897);
+emit_32(3245998080);
+emit_32(1095171362);
+emit_32(1124388897);
+emit_32(3241902132);
+emit_32(1096014103);
+emit_32(1124388897);
+emit_32(3237609472);
+emit_32(1097783784);
+emit_32(1124388897);
+emit_32(3229220864);
+emit_32(1099140904);
+emit_32(1124388897);
+emit_32(0);
+emit_32(1099863844);
+emit_32(1124388897);
+emit_32(1081737216);
+emit_32(1100982465);
+emit_32(1124388897);
+emit_32(3279552512);
+emit_32(1076151032);
+emit_32(1124132848);
+emit_32(3279296528);
+emit_32(1074265021);
+emit_32(1124132848);
+emit_32(3279040545);
+emit_32(1059897651);
+emit_32(1124132848);
+emit_32(3278784496);
+emit_32(3197909672);
+emit_32(1124132848);
+emit_32(3278528512);
+emit_32(3211975304);
+emit_32(1124132848);
+emit_32(3278272528);
+emit_32(3212548900);
+emit_32(1124132848);
+emit_32(3278016545);
+emit_32(3214293881);
+emit_32(1124132848);
+emit_32(3277760496);
+emit_32(3216921864);
+emit_32(1124132848);
+emit_32(3277504512);
+emit_32(3222195908);
+emit_32(1124132848);
+emit_32(3277248528);
+emit_32(3221805335);
+emit_32(1124132848);
+emit_32(3276992545);
+emit_32(3213409470);
+emit_32(1124132848);
+emit_32(3276736496);
+emit_32(1032354486);
+emit_32(1124132848);
+emit_32(3276480512);
+emit_32(1066671654);
+emit_32(1124132848);
+emit_32(3276224528);
+emit_32(1078555291);
+emit_32(1124132848);
+emit_32(3275968545);
+emit_32(1082316198);
+emit_32(1124132848);
+emit_32(3275712496);
+emit_32(1084389652);
+emit_32(1124132848);
+emit_32(3275456512);
+emit_32(1090589284);
+emit_32(1124132848);
+emit_32(3275200528);
+emit_32(1093399793);
+emit_32(1124132848);
+emit_32(3274944545);
+emit_32(1094797335);
+emit_32(1124132848);
+emit_32(3274688496);
+emit_32(1095931475);
+emit_32(1124132848);
+emit_32(3274432512);
+emit_32(1097364459);
+emit_32(1124132848);
+emit_32(3274176528);
+emit_32(1098713452);
+emit_32(1124132848);
+emit_32(3273920545);
+emit_32(1099383020);
+emit_32(1124132848);
+emit_32(3273664496);
+emit_32(1100286158);
+emit_32(1124132848);
+emit_32(3273408512);
+emit_32(1101469791);
+emit_32(1124132848);
+emit_32(3273152528);
+emit_32(1102376757);
+emit_32(1124132848);
+emit_32(3272896545);
+emit_32(1103068345);
+emit_32(1124132848);
+emit_32(3272640496);
+emit_32(1104423682);
+emit_32(1124132848);
+emit_32(3272384512);
+emit_32(1104904507);
+emit_32(1124132848);
+emit_32(3272128528);
+emit_32(1106022131);
+emit_32(1124132848);
+emit_32(3271872545);
+emit_32(1106604720);
+emit_32(1124132848);
+emit_32(3271616496);
+emit_32(1107631800);
+emit_32(1124132848);
+emit_32(3271163904);
+emit_32(1108172682);
+emit_32(1124132848);
+emit_32(3270651937);
+emit_32(1108436818);
+emit_32(1124132848);
+emit_32(3270139970);
+emit_32(1108399830);
+emit_32(1124132848);
+emit_32(3269627871);
+emit_32(1108123845);
+emit_32(1124132848);
+emit_32(3269115904);
+emit_32(1108184505);
+emit_32(1124132848);
+emit_32(3268603937);
+emit_32(1108270331);
+emit_32(1124132848);
+emit_32(3268091970);
+emit_32(1107910957);
+emit_32(1124132848);
+emit_32(3267579911);
+emit_32(1107432518);
+emit_32(1124132848);
+emit_32(3267067904);
+emit_32(1105755426);
+emit_32(1124132848);
+emit_32(3266555911);
+emit_32(1104147644);
+emit_32(1124132848);
+emit_32(3266043904);
+emit_32(1103239525);
+emit_32(1124132848);
+emit_32(3265531911);
+emit_32(1102590666);
+emit_32(1124132848);
+emit_32(3265019904);
+emit_32(1101844290);
+emit_32(1124132848);
+emit_32(3264507911);
+emit_32(1101550007);
+emit_32(1124132848);
+emit_32(3263995904);
+emit_32(1101094925);
+emit_32(1124132848);
+emit_32(3263483911);
+emit_32(1100315990);
+emit_32(1124132848);
+emit_32(3262775296);
+emit_32(1099604269);
+emit_32(1124132848);
+emit_32(3261751309);
+emit_32(1098955673);
+emit_32(1124132848);
+emit_32(3260727296);
+emit_32(1096931397);
+emit_32(1124132848);
+emit_32(3259703309);
+emit_32(1095373108);
+emit_32(1124132848);
+emit_32(3258679296);
+emit_32(1094758538);
+emit_32(1124132848);
+emit_32(3257655309);
+emit_32(1094166512);
+emit_32(1124132848);
+emit_32(3256631296);
+emit_32(1094620021);
+emit_32(1124132848);
+emit_32(3255607309);
+emit_32(1094357772);
+emit_32(1124132848);
+emit_32(3254386688);
+emit_32(1093070435);
+emit_32(1124132848);
+emit_32(3252338714);
+emit_32(1092280920);
+emit_32(1124132848);
+emit_32(3250290688);
+emit_32(1092453726);
+emit_32(1124132848);
+emit_32(3248242714);
+emit_32(1094304085);
+emit_32(1124132848);
+emit_32(3245998080);
+emit_32(1096070621);
+emit_32(1124132848);
+emit_32(3241902132);
+emit_32(1096864812);
+emit_32(1124132848);
+emit_32(3237609472);
+emit_32(1098173435);
+emit_32(1124132848);
+emit_32(3229220864);
+emit_32(1099365404);
+emit_32(1124132848);
+emit_32(0);
+emit_32(1099987367);
+emit_32(1124132848);
+emit_32(1081737216);
+emit_32(1101050728);
+emit_32(1124132848);
+emit_32(3279552512);
+emit_32(1075745946);
+emit_32(1123680256);
+emit_32(3279296528);
+emit_32(1067640202);
+emit_32(1123680256);
+emit_32(3279040545);
+emit_32(3205049803);
+emit_32(1123680256);
+emit_32(3278784496);
+emit_32(3215612571);
+emit_32(1123680256);
+emit_32(3278528512);
+emit_32(3218144588);
+emit_32(1123680256);
+emit_32(3278272528);
+emit_32(3222509223);
+emit_32(1123680256);
+emit_32(3278016545);
+emit_32(3221797869);
+emit_32(1123680256);
+emit_32(3277760496);
+emit_32(3225243909);
+emit_32(1123680256);
+emit_32(3277504512);
+emit_32(3225089810);
+emit_32(1123680256);
+emit_32(3277248528);
+emit_32(3226837912);
+emit_32(1123680256);
+emit_32(3276992545);
+emit_32(3222475668);
+emit_32(1123680256);
+emit_32(3276736496);
+emit_32(3210500905);
+emit_32(1123680256);
+emit_32(3276480512);
+emit_32(1057082501);
+emit_32(1123680256);
+emit_32(3276224528);
+emit_32(1069886755);
+emit_32(1123680256);
+emit_32(3275968545);
+emit_32(1079284135);
+emit_32(1123680256);
+emit_32(3275712496);
+emit_32(1085833856);
+emit_32(1123680256);
+emit_32(3275456512);
+emit_32(1090703044);
+emit_32(1123680256);
+emit_32(3275200528);
+emit_32(1093163863);
+emit_32(1123680256);
+emit_32(3274944545);
+emit_32(1094161898);
+emit_32(1123680256);
+emit_32(3274688496);
+emit_32(1095085064);
+emit_32(1123680256);
+emit_32(3274432512);
+emit_32(1096343041);
+emit_32(1123680256);
+emit_32(3274176528);
+emit_32(1097267465);
+emit_32(1123680256);
+emit_32(3273920545);
+emit_32(1099232549);
+emit_32(1123680256);
+emit_32(3273664496);
+emit_32(1100352638);
+emit_32(1123680256);
+emit_32(3273408512);
+emit_32(1101666347);
+emit_32(1123680256);
+emit_32(3273152528);
+emit_32(1102553599);
+emit_32(1123680256);
+emit_32(3272896545);
+emit_32(1103499048);
+emit_32(1123680256);
+emit_32(3272640496);
+emit_32(1104589619);
+emit_32(1123680256);
+emit_32(3272384512);
+emit_32(1105372486);
+emit_32(1123680256);
+emit_32(3272128528);
+emit_32(1105859602);
+emit_32(1123680256);
+emit_32(3271872545);
+emit_32(1106894337);
+emit_32(1123680256);
+emit_32(3271616496);
+emit_32(1107538372);
+emit_32(1123680256);
+emit_32(3271163904);
+emit_32(1107947762);
+emit_32(1123680256);
+emit_32(3270651937);
+emit_32(1108124343);
+emit_32(1123680256);
+emit_32(3270139970);
+emit_32(1107942572);
+emit_32(1123680256);
+emit_32(3269627871);
+emit_32(1108284329);
+emit_32(1123680256);
+emit_32(3269115904);
+emit_32(1108344439);
+emit_32(1123680256);
+emit_32(3268603937);
+emit_32(1108291722);
+emit_32(1123680256);
+emit_32(3268091970);
+emit_32(1107980426);
+emit_32(1123680256);
+emit_32(3267579911);
+emit_32(1107402844);
+emit_32(1123680256);
+emit_32(3267067904);
+emit_32(1105639401);
+emit_32(1123680256);
+emit_32(3266555911);
+emit_32(1104157868);
+emit_32(1123680256);
+emit_32(3266043904);
+emit_32(1103642965);
+emit_32(1123680256);
+emit_32(3265531911);
+emit_32(1102980579);
+emit_32(1123680256);
+emit_32(3265019904);
+emit_32(1102268282);
+emit_32(1123680256);
+emit_32(3264507911);
+emit_32(1101485362);
+emit_32(1123680256);
+emit_32(3263995904);
+emit_32(1100559260);
+emit_32(1123680256);
+emit_32(3263483911);
+emit_32(1099869979);
+emit_32(1123680256);
+emit_32(3262775296);
+emit_32(1099177447);
+emit_32(1123680256);
+emit_32(3261751309);
+emit_32(1097774032);
+emit_32(1123680256);
+emit_32(3260727296);
+emit_32(1096015990);
+emit_32(1123680256);
+emit_32(3259703309);
+emit_32(1094982618);
+emit_32(1123680256);
+emit_32(3258679296);
+emit_32(1094173642);
+emit_32(1123680256);
+emit_32(3257655309);
+emit_32(1093433557);
+emit_32(1123680256);
+emit_32(3256631296);
+emit_32(1092957084);
+emit_32(1123680256);
+emit_32(3255607309);
+emit_32(1093043696);
+emit_32(1123680256);
+emit_32(3254386688);
+emit_32(1092576367);
+emit_32(1123680256);
+emit_32(3252338714);
+emit_32(1092381919);
+emit_32(1123680256);
+emit_32(3250290688);
+emit_32(1093319052);
+emit_32(1123680256);
+emit_32(3248242714);
+emit_32(1094929141);
+emit_32(1123680256);
+emit_32(3245998080);
+emit_32(1096641151);
+emit_32(1123680256);
+emit_32(3241902132);
+emit_32(1098022230);
+emit_32(1123680256);
+emit_32(3237609472);
+emit_32(1098658716);
+emit_32(1123680256);
+emit_32(3229220864);
+emit_32(1099385274);
+emit_32(1123680256);
+emit_32(0);
+emit_32(1099998324);
+emit_32(1123680256);
+emit_32(1081737216);
+emit_32(1100462372);
+emit_32(1123680256);
+emit_32(3279552512);
+emit_32(1073527831);
+emit_32(1123168289);
+emit_32(3279296528);
+emit_32(1067716203);
+emit_32(1123168289);
+emit_32(3279040545);
+emit_32(1032802545);
+emit_32(1123168289);
+emit_32(3278784496);
+emit_32(3215483554);
+emit_32(1123168289);
+emit_32(3278528512);
+emit_32(3222614416);
+emit_32(1123168289);
+emit_32(3278272528);
+emit_32(3226235358);
+emit_32(1123168289);
+emit_32(3278016545);
+emit_32(3229265659);
+emit_32(1123168289);
+emit_32(3277760496);
+emit_32(3229676575);
+emit_32(1123168289);
+emit_32(3277504512);
+emit_32(3230314529);
+emit_32(1123168289);
+emit_32(3277248528);
+emit_32(3227686797);
+emit_32(1123168289);
+emit_32(3276992545);
+emit_32(3224163288);
+emit_32(1123168289);
+emit_32(3276736496);
+emit_32(3224837816);
+emit_32(1123168289);
+emit_32(3276480512);
+emit_32(3214911115);
+emit_32(1123168289);
+emit_32(3276224528);
+emit_32(1045755414);
+emit_32(1123168289);
+emit_32(3275968545);
+emit_32(1075946895);
+emit_32(1123168289);
+emit_32(3275712496);
+emit_32(1083922239);
+emit_32(1123168289);
+emit_32(3275456512);
+emit_32(1089208404);
+emit_32(1123168289);
+emit_32(3275200528);
+emit_32(1091995729);
+emit_32(1123168289);
+emit_32(3274944545);
+emit_32(1093743097);
+emit_32(1123168289);
+emit_32(3274688496);
+emit_32(1094702019);
+emit_32(1123168289);
+emit_32(3274432512);
+emit_32(1095065456);
+emit_32(1123168289);
+emit_32(3274176528);
+emit_32(1095980443);
+emit_32(1123168289);
+emit_32(3273920545);
+emit_32(1098763574);
+emit_32(1123168289);
+emit_32(3273664496);
+emit_32(1100013791);
+emit_32(1123168289);
+emit_32(3273408512);
+emit_32(1101157106);
+emit_32(1123168289);
+emit_32(3273152528);
+emit_32(1102482401);
+emit_32(1123168289);
+emit_32(3272896545);
+emit_32(1103806543);
+emit_32(1123168289);
+emit_32(3272640496);
+emit_32(1104565135);
+emit_32(1123168289);
+emit_32(3272384512);
+emit_32(1105773671);
+emit_32(1123168289);
+emit_32(3272128528);
+emit_32(1106220312);
+emit_32(1123168289);
+emit_32(3271872545);
+emit_32(1106669942);
+emit_32(1123168289);
+emit_32(3271616496);
+emit_32(1107272401);
+emit_32(1123168289);
+emit_32(3271163904);
+emit_32(1107768771);
+emit_32(1123168289);
+emit_32(3270651937);
+emit_32(1108156770);
+emit_32(1123168289);
+emit_32(3270139970);
+emit_32(1108407039);
+emit_32(1123168289);
+emit_32(3269627871);
+emit_32(1108550903);
+emit_32(1123168289);
+emit_32(3269115904);
+emit_32(1108478263);
+emit_32(1123168289);
+emit_32(3268603937);
+emit_32(1108278274);
+emit_32(1123168289);
+emit_32(3268091970);
+emit_32(1107762925);
+emit_32(1123168289);
+emit_32(3267579911);
+emit_32(1106660819);
+emit_32(1123168289);
+emit_32(3267067904);
+emit_32(1105273658);
+emit_32(1123168289);
+emit_32(3266555911);
+emit_32(1104481668);
+emit_32(1123168289);
+emit_32(3266043904);
+emit_32(1104168826);
+emit_32(1123168289);
+emit_32(3265531911);
+emit_32(1103522536);
+emit_32(1123168289);
+emit_32(3265019904);
+emit_32(1102851185);
+emit_32(1123168289);
+emit_32(3264507911);
+emit_32(1101917061);
+emit_32(1123168289);
+emit_32(3263995904);
+emit_32(1101010095);
+emit_32(1123168289);
+emit_32(3263483911);
+emit_32(1099888329);
+emit_32(1123168289);
+emit_32(3262775296);
+emit_32(1098570531);
+emit_32(1123168289);
+emit_32(3261751309);
+emit_32(1096537866);
+emit_32(1123168289);
+emit_32(3260727296);
+emit_32(1095068497);
+emit_32(1123168289);
+emit_32(3259703309);
+emit_32(1094656406);
+emit_32(1123168289);
+emit_32(3258679296);
+emit_32(1094724039);
+emit_32(1123168289);
+emit_32(3257655309);
+emit_32(1093671584);
+emit_32(1123168289);
+emit_32(3256631296);
+emit_32(1092454407);
+emit_32(1123168289);
+emit_32(3255607309);
+emit_32(1092709935);
+emit_32(1123168289);
+emit_32(3254386688);
+emit_32(1093178858);
+emit_32(1123168289);
+emit_32(3252338714);
+emit_32(1092563312);
+emit_32(1123168289);
+emit_32(3250290688);
+emit_32(1093668753);
+emit_32(1123168289);
+emit_32(3248242714);
+emit_32(1095561013);
+emit_32(1123168289);
+emit_32(3245998080);
+emit_32(1096702388);
+emit_32(1123168289);
+emit_32(3241902132);
+emit_32(1097769524);
+emit_32(1123168289);
+emit_32(3237609472);
+emit_32(1098298111);
+emit_32(1123168289);
+emit_32(3229220864);
+emit_32(1098956931);
+emit_32(1123168289);
+emit_32(0);
+emit_32(1099464022);
+emit_32(1123168289);
+emit_32(1081737216);
+emit_32(1100235512);
+emit_32(1123168289);
+emit_32(3279552512);
+emit_32(1074513450);
+emit_32(1122656322);
+emit_32(3279296528);
+emit_32(1069684087);
+emit_32(1122656322);
+emit_32(3279040545);
+emit_32(1059117578);
+emit_32(1122656322);
+emit_32(3278784496);
+emit_32(3205587983);
+emit_32(1122656322);
+emit_32(3278528512);
+emit_32(3221291239);
+emit_32(1122656322);
+emit_32(3278272528);
+emit_32(3227143174);
+emit_32(1122656322);
+emit_32(3278016545);
+emit_32(3228890898);
+emit_32(1122656322);
+emit_32(3277760496);
+emit_32(3231744493);
+emit_32(1122656322);
+emit_32(3277504512);
+emit_32(3231183211);
+emit_32(1122656322);
+emit_32(3277248528);
+emit_32(3226713845);
+emit_32(1122656322);
+emit_32(3276992545);
+emit_32(3222588579);
+emit_32(1122656322);
+emit_32(3276736496);
+emit_32(3218835474);
+emit_32(1122656322);
+emit_32(3276480512);
+emit_32(3214447728);
+emit_32(1122656322);
+emit_32(3276224528);
+emit_32(1046529045);
+emit_32(1122656322);
+emit_32(3275968545);
+emit_32(1070915199);
+emit_32(1122656322);
+emit_32(3275712496);
+emit_32(1082866637);
+emit_32(1122656322);
+emit_32(3275456512);
+emit_32(1087021578);
+emit_32(1122656322);
+emit_32(3275200528);
+emit_32(1090529232);
+emit_32(1122656322);
+emit_32(3274944545);
+emit_32(1092317201);
+emit_32(1122656322);
+emit_32(3274688496);
+emit_32(1093426427);
+emit_32(1122656322);
+emit_32(3274432512);
+emit_32(1094040158);
+emit_32(1122656322);
+emit_32(3274176528);
+emit_32(1095262693);
+emit_32(1122656322);
+emit_32(3273920545);
+emit_32(1097468792);
+emit_32(1122656322);
+emit_32(3273664496);
+emit_32(1099540411);
+emit_32(1122656322);
+emit_32(3273408512);
+emit_32(1100993213);
+emit_32(1122656322);
+emit_32(3273152528);
+emit_32(1102819203);
+emit_32(1122656322);
+emit_32(3272896545);
+emit_32(1104470763);
+emit_32(1122656322);
+emit_32(3272640496);
+emit_32(1105442111);
+emit_32(1122656322);
+emit_32(3272384512);
+emit_32(1106127356);
+emit_32(1122656322);
+emit_32(3272128528);
+emit_32(1106807829);
+emit_32(1122656322);
+emit_32(3271872545);
+emit_32(1107212108);
+emit_32(1122656322);
+emit_32(3271616496);
+emit_32(1107339719);
+emit_32(1122656322);
+emit_32(3271163904);
+emit_32(1108016575);
+emit_32(1122656322);
+emit_32(3270651937);
+emit_32(1108361190);
+emit_32(1122656322);
+emit_32(3270139970);
+emit_32(1108677807);
+emit_32(1122656322);
+emit_32(3269627871);
+emit_32(1108698045);
+emit_32(1122656322);
+emit_32(3269115904);
+emit_32(1108670415);
+emit_32(1122656322);
+emit_32(3268603937);
+emit_32(1108385307);
+emit_32(1122656322);
+emit_32(3268091970);
+emit_32(1107664044);
+emit_32(1122656322);
+emit_32(3267579911);
+emit_32(1106926109);
+emit_32(1122656322);
+emit_32(3267067904);
+emit_32(1105983491);
+emit_32(1122656322);
+emit_32(3266555911);
+emit_32(1105752542);
+emit_32(1122656322);
+emit_32(3266043904);
+emit_32(1105343650);
+emit_32(1122656322);
+emit_32(3265531911);
+emit_32(1104481983);
+emit_32(1122656322);
+emit_32(3265019904);
+emit_32(1103536377);
+emit_32(1122656322);
+emit_32(3264507911);
+emit_32(1102421374);
+emit_32(1122656322);
+emit_32(3263995904);
+emit_32(1101252526);
+emit_32(1122656322);
+emit_32(3263483911);
+emit_32(1099947835);
+emit_32(1122656322);
+emit_32(3262775296);
+emit_32(1099066665);
+emit_32(1122656322);
+emit_32(3261751309);
+emit_32(1097029334);
+emit_32(1122656322);
+emit_32(3260727296);
+emit_32(1095561223);
+emit_32(1122656322);
+emit_32(3259703309);
+emit_32(1095286181);
+emit_32(1122656322);
+emit_32(3258679296);
+emit_32(1094900095);
+emit_32(1122656322);
+emit_32(3257655309);
+emit_32(1093810625);
+emit_32(1122656322);
+emit_32(3256631296);
+emit_32(1093100949);
+emit_32(1122656322);
+emit_32(3255607309);
+emit_32(1093720133);
+emit_32(1122656322);
+emit_32(3254386688);
+emit_32(1094140822);
+emit_32(1122656322);
+emit_32(3252338714);
+emit_32(1093200983);
+emit_32(1122656322);
+emit_32(3250290688);
+emit_32(1093279731);
+emit_32(1122656322);
+emit_32(3248242714);
+emit_32(1095297296);
+emit_32(1122656322);
+emit_32(3245998080);
+emit_32(1096326998);
+emit_32(1122656322);
+emit_32(3241902132);
+emit_32(1097208116);
+emit_32(1122656322);
+emit_32(3237609472);
+emit_32(1098363332);
+emit_32(1122656322);
+emit_32(3229220864);
+emit_32(1098960496);
+emit_32(1122656322);
+emit_32(0);
+emit_32(1099624612);
+emit_32(1122656322);
+emit_32(1081737216);
+emit_32(1100438045);
+emit_32(1122656322);
+emit_start(Landscape07Vtx)
+emit_32(1081737216);
+emit_32(1111930149);
+emit_32(3270651937);
+emit_32(1081737216);
+emit_32(1111592455);
+emit_32(3270139970);
+emit_32(1090125824);
+emit_32(1111718284);
+emit_32(3270651937);
+emit_32(1090125824);
+emit_32(1111491609);
+emit_32(3270139970);
+emit_32(1094418484);
+emit_32(1111318934);
+emit_32(3270651937);
+emit_32(1094418484);
+emit_32(1111194940);
+emit_32(3270139970);
+emit_32(1098514432);
+emit_32(1110681374);
+emit_32(3270651937);
+emit_32(1098514432);
+emit_32(1110835331);
+emit_32(3270139970);
+emit_32(1100759066);
+emit_32(1110219843);
+emit_32(3270651937);
+emit_32(1100759066);
+emit_32(1110275365);
+emit_32(3270139970);
+emit_32(1102807040);
+emit_32(1109758994);
+emit_32(3270651937);
+emit_32(1102807040);
+emit_32(1110005567);
+emit_32(3270139970);
+emit_32(1104855066);
+emit_32(1109428771);
+emit_32(3270651937);
+emit_32(1104855066);
+emit_32(1109696499);
+emit_32(3270139970);
+emit_32(1106903040);
+emit_32(1109202908);
+emit_32(3270651937);
+emit_32(1106903040);
+emit_32(1109176772);
+emit_32(3270139970);
+emit_32(1108123661);
+emit_32(1108966585);
+emit_32(3270651937);
+emit_32(1108123661);
+emit_32(1108885556);
+emit_32(3270139970);
+emit_32(1109147648);
+emit_32(1108648919);
+emit_32(3270651937);
+emit_32(1109147648);
+emit_32(1108468774);
+emit_32(3270139970);
+emit_32(1110171661);
+emit_32(1108152890);
+emit_32(3270651937);
+emit_32(1110171661);
+emit_32(1108030285);
+emit_32(3270139970);
+emit_32(1111195648);
+emit_32(1107519839);
+emit_32(3270651937);
+emit_32(1111195648);
+emit_32(1107430028);
+emit_32(3270139970);
+emit_32(1112219661);
+emit_32(1107320478);
+emit_32(3270651937);
+emit_32(1112219661);
+emit_32(1107103737);
+emit_32(3270139970);
+emit_32(1113243648);
+emit_32(1107611170);
+emit_32(3270651937);
+emit_32(1113243648);
+emit_32(1107092098);
+emit_32(3270139970);
+emit_32(1114267661);
+emit_32(1107859839);
+emit_32(3270651937);
+emit_32(1114267661);
+emit_32(1107375004);
+emit_32(3270139970);
+emit_32(1115291648);
+emit_32(1107759596);
+emit_32(3270651937);
+emit_32(1115291648);
+emit_32(1107478708);
+emit_32(3270139970);
+emit_32(1116000263);
+emit_32(1107948785);
+emit_32(3270651937);
+emit_32(1116000263);
+emit_32(1107657884);
+emit_32(3270139970);
+emit_32(1116512256);
+emit_32(1108015605);
+emit_32(3270651937);
+emit_32(1116512256);
+emit_32(1107812575);
+emit_32(3270139970);
+emit_32(1117024263);
+emit_32(1108198949);
+emit_32(3270651937);
+emit_32(1117024263);
+emit_32(1108062005);
+emit_32(3270139970);
+emit_32(1117536256);
+emit_32(1108525082);
+emit_32(3270651937);
+emit_32(1117536256);
+emit_32(1108546316);
+emit_32(3270139970);
+emit_32(1118048263);
+emit_32(1108838475);
+emit_32(3270651937);
+emit_32(1118048263);
+emit_32(1108808198);
+emit_32(3270139970);
+emit_32(1118560256);
+emit_32(1108830663);
+emit_32(3270651937);
+emit_32(1118560256);
+emit_32(1108821253);
+emit_32(3270139970);
+emit_32(1119072263);
+emit_32(1108933791);
+emit_32(3270651937);
+emit_32(1119072263);
+emit_32(1108944565);
+emit_32(3270139970);
+emit_32(1119584256);
+emit_32(1109285510);
+emit_32(3270651937);
+emit_32(1119584256);
+emit_32(1109292509);
+emit_32(3270139970);
+emit_32(1120096263);
+emit_32(1109319064);
+emit_32(3270651937);
+emit_32(1120096263);
+emit_32(1109325827);
+emit_32(3270139970);
+emit_32(1120608322);
+emit_32(1109471003);
+emit_32(3270651937);
+emit_32(1120608322);
+emit_32(1109645355);
+emit_32(3270139970);
+emit_32(1121120289);
+emit_32(1109582728);
+emit_32(3270651937);
+emit_32(1121120289);
+emit_32(1109627555);
+emit_32(3270139970);
+emit_32(1121632256);
+emit_32(1109427592);
+emit_32(3270651937);
+emit_32(1121632256);
+emit_32(1109566502);
+emit_32(3270139970);
+emit_32(1122144223);
+emit_32(1109250959);
+emit_32(3270651937);
+emit_32(1122144223);
+emit_32(1109470347);
+emit_32(3270139970);
+emit_32(1122656322);
+emit_32(1109132050);
+emit_32(3270651937);
+emit_32(1122656322);
+emit_32(1109358831);
+emit_32(3270139970);
+emit_32(1123168289);
+emit_32(1108892975);
+emit_32(3270651937);
+emit_32(1123168289);
+emit_32(1109156561);
+emit_32(3270139970);
+emit_32(1123680256);
+emit_32(1108663599);
+emit_32(3270651937);
+emit_32(1123680256);
+emit_32(1108641920);
+emit_32(3270139970);
+emit_32(1124132848);
+emit_32(1108204087);
+emit_32(3270651937);
+emit_32(1124132848);
+emit_32(1108219580);
+emit_32(3270139970);
+emit_32(1124388897);
+emit_32(1107681555);
+emit_32(3270651937);
+emit_32(1124388897);
+emit_32(1107796112);
+emit_32(3270139970);
+emit_32(1124644880);
+emit_32(1107061165);
+emit_32(3270651937);
+emit_32(1124644880);
+emit_32(1107364885);
+emit_32(3270139970);
+emit_32(1124900864);
+emit_32(1105549119);
+emit_32(3270651937);
+emit_32(1124900864);
+emit_32(1106177268);
+emit_32(3270139970);
+emit_32(1125156848);
+emit_32(1104447065);
+emit_32(3270651937);
+emit_32(1125156848);
+emit_32(1105288443);
+emit_32(3270139970);
+emit_32(1125412897);
+emit_32(1103204817);
+emit_32(3270651937);
+emit_32(1125412897);
+emit_32(1104753197);
+emit_32(3270139970);
+emit_32(1125668880);
+emit_32(1102168352);
+emit_32(3270651937);
+emit_32(1125668880);
+emit_32(1103375473);
+emit_32(3270139970);
+emit_32(1125924864);
+emit_32(1101100116);
+emit_32(3270651937);
+emit_32(1125924864);
+emit_32(1102075344);
+emit_32(3270139970);
+emit_32(1126180848);
+emit_32(1099752591);
+emit_32(3270651937);
+emit_32(1126180848);
+emit_32(1100964849);
+emit_32(3270139970);
+emit_32(1126436897);
+emit_32(1098425093);
+emit_32(3270651937);
+emit_32(1126436897);
+emit_32(1099792384);
+emit_32(3270139970);
+emit_32(1126692880);
+emit_32(1096597845);
+emit_32(3270651937);
+emit_32(1126692880);
+emit_32(1098450049);
+emit_32(3270139970);
+emit_32(1126948864);
+emit_32(1094429285);
+emit_32(3270651937);
+emit_32(1126948864);
+emit_32(1096338322);
+emit_32(3270139970);
+emit_32(1127204848);
+emit_32(1091900413);
+emit_32(3270651937);
+emit_32(1127204848);
+emit_32(1093954280);
+emit_32(3270139970);
+emit_32(1127460897);
+emit_32(1087591940);
+emit_32(3270651937);
+emit_32(1127460897);
+emit_32(1091524247);
+emit_32(3270139970);
+emit_32(1127716880);
+emit_32(1083181671);
+emit_32(3270651937);
+emit_32(1127716880);
+emit_32(1088518839);
+emit_32(3270139970);
+emit_32(1127972864);
+emit_32(1076995723);
+emit_32(3270651937);
+emit_32(1127972864);
+emit_32(1083884385);
+emit_32(3270139970);
+emit_32(1128228848);
+emit_32(1068649268);
+emit_32(3270651937);
+emit_32(1128228848);
+emit_32(1076931424);
+emit_32(3270139970);
+emit_32(1128484897);
+emit_32(3216283995);
+emit_32(3270651937);
+emit_32(1128484897);
+emit_32(1044557454);
+emit_32(3270139970);
+emit_32(1128740880);
+emit_32(3221805544);
+emit_32(3270651937);
+emit_32(1128740880);
+emit_32(3205427693);
+emit_32(3270139970);
+emit_32(1128996864);
+emit_32(3223037537);
+emit_32(3270651937);
+emit_32(1128996864);
+emit_32(3213113940);
+emit_32(3270139970);
+emit_32(1129252848);
+emit_32(3228540254);
+emit_32(3270651937);
+emit_32(1129252848);
+emit_32(3221962118);
+emit_32(3270139970);
+emit_32(1129508897);
+emit_32(3230275333);
+emit_32(3270651937);
+emit_32(1129508897);
+emit_32(3220483500);
+emit_32(3270139970);
+emit_32(1129764880);
+emit_32(3232612273);
+emit_32(3270651937);
+emit_32(1129764880);
+emit_32(3225420531);
+emit_32(3270139970);
+emit_32(1130020864);
+emit_32(3235277565);
+emit_32(3270651937);
+emit_32(1130020864);
+emit_32(3230173831);
+emit_32(3270139970);
+emit_32(1130276848);
+emit_32(3234218671);
+emit_32(3270651937);
+emit_32(1130276848);
+emit_32(3232043735);
+emit_32(3270139970);
+emit_32(1130532897);
+emit_32(3231045470);
+emit_32(3270651937);
+emit_32(1130532897);
+emit_32(3227363752);
+emit_32(3270139970);
+emit_32(1130788880);
+emit_32(3226755997);
+emit_32(3270651937);
+emit_32(1130788880);
+emit_32(3221899790);
+emit_32(3270139970);
+emit_32(1131044864);
+emit_32(3229128715);
+emit_32(3270651937);
+emit_32(1131044864);
+emit_32(3216845360);
+emit_32(3270139970);
+emit_32(1131300848);
+emit_32(3228788683);
+emit_32(3270651937);
+emit_32(1131300848);
+emit_32(3219415546);
+emit_32(3270139970);
+emit_32(1131556897);
+emit_32(3227247276);
+emit_32(3270651937);
+emit_32(1131556897);
+emit_32(3212863456);
+emit_32(3270139970);
+emit_32(1131812880);
+emit_32(3228672710);
+emit_32(3270651937);
+emit_32(1131812880);
+emit_32(3221056106);
+emit_32(3270139970);
+emit_32(1132068864);
+emit_32(3228908137);
+emit_32(3270651937);
+emit_32(1132068864);
+emit_32(3222457423);
+emit_32(3270139970);
+emit_32(1081737216);
+emit_32(1112094042);
+emit_32(3271163904);
+emit_32(1090125824);
+emit_32(1112019724);
+emit_32(3271163904);
+emit_32(1094418484);
+emit_32(1111438813);
+emit_32(3271163904);
+emit_32(1098514432);
+emit_32(1110812184);
+emit_32(3271163904);
+emit_32(1100759066);
+emit_32(1110106545);
+emit_32(3271163904);
+emit_32(1102807040);
+emit_32(1109946348);
+emit_32(3271163904);
+emit_32(1104855066);
+emit_32(1109673168);
+emit_32(3271163904);
+emit_32(1106903040);
+emit_32(1109472471);
+emit_32(3271163904);
+emit_32(1108123661);
+emit_32(1108974240);
+emit_32(3271163904);
+emit_32(1109147648);
+emit_32(1108497164);
+emit_32(3271163904);
+emit_32(1110171661);
+emit_32(1108102899);
+emit_32(3271163904);
+emit_32(1111195648);
+emit_32(1107538870);
+emit_32(3271163904);
+emit_32(1112219661);
+emit_32(1106915413);
+emit_32(3271163904);
+emit_32(1113243648);
+emit_32(1107679563);
+emit_32(3271163904);
+emit_32(1114267661);
+emit_32(1107902857);
+emit_32(3271163904);
+emit_32(1115291648);
+emit_32(1107930251);
+emit_32(3271163904);
+emit_32(1116000263);
+emit_32(1107983335);
+emit_32(3271163904);
+emit_32(1116512256);
+emit_32(1108070420);
+emit_32(3271163904);
+emit_32(1117024263);
+emit_32(1108274184);
+emit_32(3271163904);
+emit_32(1117536256);
+emit_32(1108723525);
+emit_32(3271163904);
+emit_32(1118048263);
+emit_32(1108785863);
+emit_32(3271163904);
+emit_32(1118560256);
+emit_32(1108864795);
+emit_32(3271163904);
+emit_32(1119072263);
+emit_32(1109018883);
+emit_32(3271163904);
+emit_32(1119584256);
+emit_32(1109278065);
+emit_32(3271163904);
+emit_32(1120096263);
+emit_32(1109410316);
+emit_32(3271163904);
+emit_32(1120608322);
+emit_32(1109373406);
+emit_32(3271163904);
+emit_32(1121120289);
+emit_32(1109364887);
+emit_32(3271163904);
+emit_32(1121632256);
+emit_32(1109384967);
+emit_32(3271163904);
+emit_32(1122144223);
+emit_32(1109332197);
+emit_32(3271163904);
+emit_32(1122656322);
+emit_32(1109067825);
+emit_32(3271163904);
+emit_32(1123168289);
+emit_32(1108783609);
+emit_32(3271163904);
+emit_32(1123680256);
+emit_32(1108563460);
+emit_32(3271163904);
+emit_32(1124132848);
+emit_32(1108020743);
+emit_32(3271163904);
+emit_32(1124388897);
+emit_32(1107280056);
+emit_32(3271163904);
+emit_32(1124644880);
+emit_32(1106630987);
+emit_32(3271163904);
+emit_32(1124900864);
+emit_32(1105186941);
+emit_32(3271163904);
+emit_32(1125156848);
+emit_32(1103741583);
+emit_32(3271163904);
+emit_32(1125412897);
+emit_32(1102190530);
+emit_32(3271163904);
+emit_32(1125668880);
+emit_32(1101340292);
+emit_32(3271163904);
+emit_32(1125924864);
+emit_32(1100447115);
+emit_32(3271163904);
+emit_32(1126180848);
+emit_32(1099367868);
+emit_32(3271163904);
+emit_32(1126436897);
+emit_32(1097589064);
+emit_32(3271163904);
+emit_32(1126692880);
+emit_32(1095164127);
+emit_32(3271163904);
+emit_32(1126948864);
+emit_32(1092722832);
+emit_32(3271163904);
+emit_32(1127204848);
+emit_32(1090145097);
+emit_32(3271163904);
+emit_32(1127460897);
+emit_32(1085202802);
+emit_32(3271163904);
+emit_32(1127716880);
+emit_32(1076722968);
+emit_32(3271163904);
+emit_32(1127972864);
+emit_32(1066002159);
+emit_32(3271163904);
+emit_32(1128228848);
+emit_32(3206002464);
+emit_32(3271163904);
+emit_32(1128484897);
+emit_32(3225385089);
+emit_32(3271163904);
+emit_32(1128740880);
+emit_32(3230254068);
+emit_32(3271163904);
+emit_32(1128996864);
+emit_32(3231283224);
+emit_32(3271163904);
+emit_32(1129252848);
+emit_32(3234493545);
+emit_32(3271163904);
+emit_32(1129508897);
+emit_32(3235258355);
+emit_32(3271163904);
+emit_32(1129764880);
+emit_32(3238361175);
+emit_32(3271163904);
+emit_32(1130020864);
+emit_32(3238992240);
+emit_32(3271163904);
+emit_32(1130276848);
+emit_32(3236249825);
+emit_32(3271163904);
+emit_32(1130532897);
+emit_32(3232841681);
+emit_32(3271163904);
+emit_32(1130788880);
+emit_32(3231925288);
+emit_32(3271163904);
+emit_32(1131044864);
+emit_32(3233336672);
+emit_32(3271163904);
+emit_32(1131300848);
+emit_32(3232958618);
+emit_32(3271163904);
+emit_32(1131556897);
+emit_32(3233414623);
+emit_32(3271163904);
+emit_32(1131812880);
+emit_32(3232723968);
+emit_32(3271163904);
+emit_32(1132068864);
+emit_32(3232386725);
+emit_32(3271163904);
+emit_32(1081737216);
+emit_32(1112138475);
+emit_32(3271616496);
+emit_32(1090125824);
+emit_32(1112117661);
+emit_32(3271616496);
+emit_32(1094418484);
+emit_32(1111516696);
+emit_32(3271616496);
+emit_32(1098514432);
+emit_32(1110701375);
+emit_32(3271616496);
+emit_32(1100759066);
+emit_32(1110259479);
+emit_32(3271616496);
+emit_32(1102807040);
+emit_32(1110148252);
+emit_32(3271616496);
+emit_32(1104855066);
+emit_32(1109941420);
+emit_32(3271616496);
+emit_32(1106903040);
+emit_32(1109408245);
+emit_32(3271616496);
+emit_32(1108123661);
+emit_32(1108791106);
+emit_32(3271616496);
+emit_32(1109147648);
+emit_32(1108280161);
+emit_32(3271616496);
+emit_32(1110171661);
+emit_32(1107557063);
+emit_32(3271616496);
+emit_32(1111195648);
+emit_32(1107163926);
+emit_32(3271616496);
+emit_32(1112219661);
+emit_32(1106741192);
+emit_32(3271616496);
+emit_32(1113243648);
+emit_32(1107262911);
+emit_32(3271616496);
+emit_32(1114267661);
+emit_32(1107611563);
+emit_32(3271616496);
+emit_32(1115291648);
+emit_32(1107823244);
+emit_32(3271616496);
+emit_32(1116000263);
+emit_32(1107902490);
+emit_32(3271616496);
+emit_32(1116512256);
+emit_32(1107980347);
+emit_32(3271616496);
+emit_32(1117024263);
+emit_32(1108314974);
+emit_32(3271616496);
+emit_32(1117536256);
+emit_32(1108495670);
+emit_32(3271616496);
+emit_32(1118048263);
+emit_32(1108580998);
+emit_32(3271616496);
+emit_32(1118560256);
+emit_32(1108703707);
+emit_32(3271616496);
+emit_32(1119072263);
+emit_32(1108940790);
+emit_32(3271616496);
+emit_32(1119584256);
+emit_32(1109066200);
+emit_32(3271616496);
+emit_32(1120096263);
+emit_32(1109329864);
+emit_32(3271616496);
+emit_32(1120608322);
+emit_32(1109220734);
+emit_32(3271616496);
+emit_32(1121120289);
+emit_32(1109504138);
+emit_32(3271616496);
+emit_32(1121632256);
+emit_32(1109526053);
+emit_32(3271616496);
+emit_32(1122144223);
+emit_32(1109328108);
+emit_32(3271616496);
+emit_32(1122656322);
+emit_32(1109031859);
+emit_32(3271616496);
+emit_32(1123168289);
+emit_32(1108646638);
+emit_32(3271616496);
+emit_32(1123680256);
+emit_32(1108345618);
+emit_32(3271616496);
+emit_32(1124132848);
+emit_32(1107854806);
+emit_32(3271616496);
+emit_32(1124388897);
+emit_32(1107061532);
+emit_32(3271616496);
+emit_32(1124644880);
+emit_32(1105828407);
+emit_32(3271616496);
+emit_32(1124900864);
+emit_32(1104345458);
+emit_32(3271616496);
+emit_32(1125156848);
+emit_32(1103146569);
+emit_32(3271616496);
+emit_32(1125412897);
+emit_32(1101554883);
+emit_32(3271616496);
+emit_32(1125668880);
+emit_32(1100465255);
+emit_32(3271616496);
+emit_32(1125924864);
+emit_32(1099197894);
+emit_32(3271616496);
+emit_32(1126180848);
+emit_32(1097396440);
+emit_32(3271616496);
+emit_32(1126436897);
+emit_32(1095592680);
+emit_32(3271616496);
+emit_32(1126692880);
+emit_32(1093988988);
+emit_32(3271616496);
+emit_32(1126948864);
+emit_32(1091770998);
+emit_32(3271616496);
+emit_32(1127204848);
+emit_32(1088099283);
+emit_32(3271616496);
+emit_32(1127460897);
+emit_32(1081294172);
+emit_32(3271616496);
+emit_32(1127716880);
+emit_32(1060903076);
+emit_32(3271616496);
+emit_32(1127972864);
+emit_32(1039720717);
+emit_32(3271616496);
+emit_32(1128228848);
+emit_32(3220556900);
+emit_32(3271616496);
+emit_32(1128484897);
+emit_32(3232451338);
+emit_32(3271616496);
+emit_32(1128740880);
+emit_32(3236043424);
+emit_32(3271616496);
+emit_32(1128996864);
+emit_32(3238289211);
+emit_32(3271616496);
+emit_32(1129252848);
+emit_32(3238868193);
+emit_32(3271616496);
+emit_32(1129508897);
+emit_32(3239430691);
+emit_32(3271616496);
+emit_32(1129764880);
+emit_32(3241001301);
+emit_32(3271616496);
+emit_32(1130020864);
+emit_32(3240828600);
+emit_32(3271616496);
+emit_32(1130276848);
+emit_32(3238957018);
+emit_32(3271616496);
+emit_32(1130532897);
+emit_32(3238262997);
+emit_32(3271616496);
+emit_32(1130788880);
+emit_32(3237575372);
+emit_32(3271616496);
+emit_32(1131044864);
+emit_32(3235372398);
+emit_32(3271616496);
+emit_32(1131300848);
+emit_32(3236771345);
+emit_32(3271616496);
+emit_32(1131556897);
+emit_32(3235935337);
+emit_32(3271616496);
+emit_32(1131812880);
+emit_32(3235730822);
+emit_32(3271616496);
+emit_32(1132068864);
+emit_32(3234015499);
+emit_32(3271616496);
+emit_32(1081737216);
+emit_32(1111780334);
+emit_32(3271872545);
+emit_32(1090125824);
+emit_32(1111692673);
+emit_32(3271872545);
+emit_32(1094418484);
+emit_32(1111222256);
+emit_32(3271872545);
+emit_32(1098514432);
+emit_32(1110566135);
+emit_32(3271872545);
+emit_32(1100759066);
+emit_32(1110232950);
+emit_32(3271872545);
+emit_32(1102807040);
+emit_32(1109993665);
+emit_32(3271872545);
+emit_32(1104855066);
+emit_32(1109851950);
+emit_32(3271872545);
+emit_32(1106903040);
+emit_32(1109283098);
+emit_32(3271872545);
+emit_32(1108123661);
+emit_32(1108493022);
+emit_32(3271872545);
+emit_32(1109147648);
+emit_32(1107705515);
+emit_32(3271872545);
+emit_32(1110171661);
+emit_32(1107275494);
+emit_32(3271872545);
+emit_32(1111195648);
+emit_32(1106747326);
+emit_32(3271872545);
+emit_32(1112219661);
+emit_32(1106557639);
+emit_32(3271872545);
+emit_32(1113243648);
+emit_32(1107170427);
+emit_32(3271872545);
+emit_32(1114267661);
+emit_32(1107580499);
+emit_32(3271872545);
+emit_32(1115291648);
+emit_32(1107671725);
+emit_32(3271872545);
+emit_32(1116000263);
+emit_32(1107801250);
+emit_32(3271872545);
+emit_32(1116512256);
+emit_32(1107801355);
+emit_32(3271872545);
+emit_32(1117024263);
+emit_32(1107771313);
+emit_32(3271872545);
+emit_32(1117536256);
+emit_32(1108068427);
+emit_32(3271872545);
+emit_32(1118048263);
+emit_32(1108248048);
+emit_32(3271872545);
+emit_32(1118560256);
+emit_32(1108300713);
+emit_32(3271872545);
+emit_32(1119072263);
+emit_32(1108561232);
+emit_32(3271872545);
+emit_32(1119584256);
+emit_32(1108758521);
+emit_32(3271872545);
+emit_32(1120096263);
+emit_32(1109143559);
+emit_32(3271872545);
+emit_32(1120608322);
+emit_32(1109106360);
+emit_32(3271872545);
+emit_32(1121120289);
+emit_32(1109227104);
+emit_32(3271872545);
+emit_32(1121632256);
+emit_32(1109385701);
+emit_32(3271872545);
+emit_32(1122144223);
+emit_32(1109080854);
+emit_32(3271872545);
+emit_32(1122656322);
+emit_32(1108826600);
+emit_32(3271872545);
+emit_32(1123168289);
+emit_32(1108564194);
+emit_32(3271872545);
+emit_32(1123680256);
+emit_32(1108304829);
+emit_32(3271872545);
+emit_32(1124132848);
+emit_32(1107781275);
+emit_32(3271872545);
+emit_32(1124388897);
+emit_32(1107099700);
+emit_32(3271872545);
+emit_32(1124644880);
+emit_32(1105344908);
+emit_32(3271872545);
+emit_32(1124900864);
+emit_32(1103617904);
+emit_32(3271872545);
+emit_32(1125156848);
+emit_32(1102172966);
+emit_32(3271872545);
+emit_32(1125412897);
+emit_32(1100636435);
+emit_32(3271872545);
+emit_32(1125668880);
+emit_32(1099511418);
+emit_32(3271872545);
+emit_32(1125924864);
+emit_32(1097613076);
+emit_32(3271872545);
+emit_32(1126180848);
+emit_32(1095954124);
+emit_32(3271872545);
+emit_32(1126436897);
+emit_32(1093684062);
+emit_32(3271872545);
+emit_32(1126692880);
+emit_32(1091734235);
+emit_32(3271872545);
+emit_32(1126948864);
+emit_32(1088057634);
+emit_32(3271872545);
+emit_32(1127204848);
+emit_32(1082772853);
+emit_32(3271872545);
+emit_32(1127460897);
+emit_32(1073941095);
+emit_32(3271872545);
+emit_32(1127716880);
+emit_32(3208567734);
+emit_32(3271872545);
+emit_32(1127972864);
+emit_32(3214907844);
+emit_32(3271872545);
+emit_32(1128228848);
+emit_32(3228392866);
+emit_32(3271872545);
+emit_32(1128484897);
+emit_32(3236333837);
+emit_32(3271872545);
+emit_32(1128740880);
+emit_32(3239712465);
+emit_32(3271872545);
+emit_32(1128996864);
+emit_32(3240772082);
+emit_32(3271872545);
+emit_32(1129252848);
+emit_32(3241312099);
+emit_32(3271872545);
+emit_32(1129508897);
+emit_32(3242196782);
+emit_32(3271872545);
+emit_32(1129764880);
+emit_32(3243389118);
+emit_32(3271872545);
+emit_32(1130020864);
+emit_32(3242673360);
+emit_32(3271872545);
+emit_32(1130276848);
+emit_32(3241675955);
+emit_32(3271872545);
+emit_32(1130532897);
+emit_32(3241634116);
+emit_32(3271872545);
+emit_32(1130788880);
+emit_32(3240687986);
+emit_32(3271872545);
+emit_32(1131044864);
+emit_32(3240058075);
+emit_32(3271872545);
+emit_32(1131300848);
+emit_32(3239722845);
+emit_32(3271872545);
+emit_32(1131556897);
+emit_32(3238832237);
+emit_32(3271872545);
+emit_32(1131812880);
+emit_32(3238354108);
+emit_32(3271872545);
+emit_32(1132068864);
+emit_32(3234493083);
+emit_32(3271872545);
+emit_32(1081737216);
+emit_32(1111464346);
+emit_32(3272128528);
+emit_32(1090125824);
+emit_32(1111239505);
+emit_32(3272128528);
+emit_32(1094418484);
+emit_32(1110994767);
+emit_32(3272128528);
+emit_32(1098514432);
+emit_32(1110132890);
+emit_32(3272128528);
+emit_32(1100759066);
+emit_32(1109887445);
+emit_32(3272128528);
+emit_32(1102807040);
+emit_32(1109762271);
+emit_32(3272128528);
+emit_32(1104855066);
+emit_32(1109309469);
+emit_32(3272128528);
+emit_32(1106903040);
+emit_32(1108918429);
+emit_32(3272128528);
+emit_32(1108123661);
+emit_32(1108186287);
+emit_32(3272128528);
+emit_32(1109147648);
+emit_32(1107206970);
+emit_32(3272128528);
+emit_32(1110171661);
+emit_32(1106779308);
+emit_32(3272128528);
+emit_32(1111195648);
+emit_32(1105875436);
+emit_32(3272128528);
+emit_32(1112219661);
+emit_32(1105956962);
+emit_32(3272128528);
+emit_32(1113243648);
+emit_32(1106440618);
+emit_32(3272128528);
+emit_32(1114267661);
+emit_32(1107100225);
+emit_32(3272128528);
+emit_32(1115291648);
+emit_32(1107233499);
+emit_32(3272128528);
+emit_32(1116000263);
+emit_32(1107508645);
+emit_32(3272128528);
+emit_32(1116512256);
+emit_32(1107671935);
+emit_32(3272128528);
+emit_32(1117024263);
+emit_32(1107608207);
+emit_32(3272128528);
+emit_32(1117536256);
+emit_32(1107752387);
+emit_32(3272128528);
+emit_32(1118048263);
+emit_32(1108110134);
+emit_32(3272128528);
+emit_32(1118560256);
+emit_32(1108408690);
+emit_32(3272128528);
+emit_32(1119072263);
+emit_32(1108474017);
+emit_32(3272128528);
+emit_32(1119584256);
+emit_32(1108395164);
+emit_32(3272128528);
+emit_32(1120096263);
+emit_32(1108750369);
+emit_32(3272128528);
+emit_32(1120608322);
+emit_32(1108885688);
+emit_32(3272128528);
+emit_32(1121120289);
+emit_32(1109040851);
+emit_32(3272128528);
+emit_32(1121632256);
+emit_32(1108986665);
+emit_32(3272128528);
+emit_32(1122144223);
+emit_32(1108827727);
+emit_32(3272128528);
+emit_32(1122656322);
+emit_32(1108753462);
+emit_32(3272128528);
+emit_32(1123168289);
+emit_32(1108679852);
+emit_32(3272128528);
+emit_32(1123680256);
+emit_32(1108175513);
+emit_32(3272128528);
+emit_32(1124132848);
+emit_32(1107583015);
+emit_32(3272128528);
+emit_32(1124388897);
+emit_32(1106521358);
+emit_32(3272128528);
+emit_32(1124644880);
+emit_32(1104987134);
+emit_32(3272128528);
+emit_32(1124900864);
+emit_32(1103342862);
+emit_32(3272128528);
+emit_32(1125156848);
+emit_32(1101546652);
+emit_32(3272128528);
+emit_32(1125412897);
+emit_32(1099964770);
+emit_32(3272128528);
+emit_32(1125668880);
+emit_32(1098242746);
+emit_32(3272128528);
+emit_32(1125924864);
+emit_32(1096185125);
+emit_32(3272128528);
+emit_32(1126180848);
+emit_32(1094379792);
+emit_32(3272128528);
+emit_32(1126436897);
+emit_32(1092287841);
+emit_32(3272128528);
+emit_32(1126692880);
+emit_32(1089612693);
+emit_32(3272128528);
+emit_32(1126948864);
+emit_32(1083167159);
+emit_32(3272128528);
+emit_32(1127204848);
+emit_32(1069990774);
+emit_32(3272128528);
+emit_32(1127460897);
+emit_32(1049416773);
+emit_32(3272128528);
+emit_32(1127716880);
+emit_32(3222071379);
+emit_32(3272128528);
+emit_32(1127972864);
+emit_32(3226126181);
+emit_32(3272128528);
+emit_32(1128228848);
+emit_32(3233267570);
+emit_32(3272128528);
+emit_32(1128484897);
+emit_32(3238358344);
+emit_32(3272128528);
+emit_32(1128740880);
+emit_32(3242189233);
+emit_32(3272128528);
+emit_32(1128996864);
+emit_32(3244019627);
+emit_32(3272128528);
+emit_32(1129252848);
+emit_32(3244520951);
+emit_32(3272128528);
+emit_32(1129508897);
+emit_32(3245091062);
+emit_32(3272128528);
+emit_32(1129764880);
+emit_32(3245124302);
+emit_32(3272128528);
+emit_32(1130020864);
+emit_32(3245824436);
+emit_32(3272128528);
+emit_32(1130276848);
+emit_32(3245103854);
+emit_32(3272128528);
+emit_32(1130532897);
+emit_32(3245100184);
+emit_32(3272128528);
+emit_32(1130788880);
+emit_32(3243298207);
+emit_32(3272128528);
+emit_32(1131044864);
+emit_32(3242985731);
+emit_32(3272128528);
+emit_32(1131300848);
+emit_32(3242330895);
+emit_32(3272128528);
+emit_32(1131556897);
+emit_32(3242176545);
+emit_32(3272128528);
+emit_32(1131812880);
+emit_32(3239330856);
+emit_32(3272128528);
+emit_32(1132068864);
+emit_32(3234703260);
+emit_32(3272128528);
+emit_32(1081737216);
+emit_32(1111298697);
+emit_32(3272384512);
+emit_32(1090125824);
+emit_32(1111058363);
+emit_32(3272384512);
+emit_32(1094418484);
+emit_32(1110735087);
+emit_32(3272384512);
+emit_32(1098514432);
+emit_32(1110169171);
+emit_32(3272384512);
+emit_32(1100759066);
+emit_32(1109403894);
+emit_32(3272384512);
+emit_32(1102807040);
+emit_32(1108912557);
+emit_32(3272384512);
+emit_32(1104855066);
+emit_32(1108673482);
+emit_32(3272384512);
+emit_32(1106903040);
+emit_32(1108260081);
+emit_32(3272384512);
+emit_32(1108123661);
+emit_32(1107647870);
+emit_32(3272384512);
+emit_32(1109147648);
+emit_32(1106643832);
+emit_32(3272384512);
+emit_32(1110171661);
+emit_32(1105736919);
+emit_32(3272384512);
+emit_32(1111195648);
+emit_32(1105100643);
+emit_32(3272384512);
+emit_32(1112219661);
+emit_32(1104911375);
+emit_32(3272384512);
+emit_32(1113243648);
+emit_32(1105299348);
+emit_32(3272384512);
+emit_32(1114267661);
+emit_32(1106150267);
+emit_32(3272384512);
+emit_32(1115291648);
+emit_32(1106320766);
+emit_32(3272384512);
+emit_32(1116000263);
+emit_32(1106620187);
+emit_32(3272384512);
+emit_32(1116512256);
+emit_32(1107259294);
+emit_32(3272384512);
+emit_32(1117024263);
+emit_32(1107471604);
+emit_32(3272384512);
+emit_32(1117536256);
+emit_32(1107538267);
+emit_32(3272384512);
+emit_32(1118048263);
+emit_32(1108219553);
+emit_32(3272384512);
+emit_32(1118560256);
+emit_32(1108391625);
+emit_32(3272384512);
+emit_32(1119072263);
+emit_32(1108309180);
+emit_32(3272384512);
+emit_32(1119584256);
+emit_32(1108147516);
+emit_32(3272384512);
+emit_32(1120096263);
+emit_32(1108248730);
+emit_32(3272384512);
+emit_32(1120608322);
+emit_32(1108495801);
+emit_32(3272384512);
+emit_32(1121120289);
+emit_32(1108672669);
+emit_32(3272384512);
+emit_32(1121632256);
+emit_32(1108534860);
+emit_32(3272384512);
+emit_32(1122144223);
+emit_32(1108457213);
+emit_32(3272384512);
+emit_32(1122656322);
+emit_32(1108523588);
+emit_32(3272384512);
+emit_32(1123168289);
+emit_32(1108457397);
+emit_32(3272384512);
+emit_32(1123680256);
+emit_32(1108144502);
+emit_32(3272384512);
+emit_32(1124132848);
+emit_32(1107554966);
+emit_32(3272384512);
+emit_32(1124388897);
+emit_32(1106329469);
+emit_32(3272384512);
+emit_32(1124644880);
+emit_32(1104699510);
+emit_32(3272384512);
+emit_32(1124900864);
+emit_32(1103026140);
+emit_32(3272384512);
+emit_32(1125156848);
+emit_32(1101214148);
+emit_32(3272384512);
+emit_32(1125412897);
+emit_32(1099233965);
+emit_32(3272384512);
+emit_32(1125668880);
+emit_32(1095822737);
+emit_32(3272384512);
+emit_32(1125924864);
+emit_32(1093805801);
+emit_32(3272384512);
+emit_32(1126180848);
+emit_32(1091936012);
+emit_32(3272384512);
+emit_32(1126436897);
+emit_32(1089180931);
+emit_32(3272384512);
+emit_32(1126692880);
+emit_32(1084894877);
+emit_32(3272384512);
+emit_32(1126948864);
+emit_32(1077040728);
+emit_32(3272384512);
+emit_32(1127204848);
+emit_32(1063155099);
+emit_32(3272384512);
+emit_32(1127460897);
+emit_32(3215476340);
+emit_32(3272384512);
+emit_32(1127716880);
+emit_32(3228112477);
+emit_32(3272384512);
+emit_32(1127972864);
+emit_32(3232515133);
+emit_32(3272384512);
+emit_32(1128228848);
+emit_32(3238089206);
+emit_32(3272384512);
+emit_32(1128484897);
+emit_32(3241062852);
+emit_32(3272384512);
+emit_32(1128740880);
+emit_32(3244581139);
+emit_32(3272384512);
+emit_32(1128996864);
+emit_32(3246469677);
+emit_32(3272384512);
+emit_32(1129252848);
+emit_32(3246870181);
+emit_32(3272384512);
+emit_32(1129508897);
+emit_32(3246893302);
+emit_32(3272384512);
+emit_32(1129764880);
+emit_32(3247231363);
+emit_32(3272384512);
+emit_32(1130020864);
+emit_32(3247263344);
+emit_32(3272384512);
+emit_32(1130276848);
+emit_32(3246998946);
+emit_32(3272384512);
+emit_32(1130532897);
+emit_32(3246499404);
+emit_32(3272384512);
+emit_32(1130788880);
+emit_32(3246148551);
+emit_32(3272384512);
+emit_32(1131044864);
+emit_32(3245400077);
+emit_32(3272384512);
+emit_32(1131300848);
+emit_32(3245118115);
+emit_32(3272384512);
+emit_32(1131556897);
+emit_32(3243091847);
+emit_32(3272384512);
+emit_32(1131812880);
+emit_32(3239267260);
+emit_32(3272384512);
+emit_32(1132068864);
+emit_32(3232983029);
+emit_32(3272384512);
+emit_32(1081737216);
+emit_32(1110766990);
+emit_32(3272640496);
+emit_32(1090125824);
+emit_32(1110715348);
+emit_32(3272640496);
+emit_32(1094418484);
+emit_32(1110472891);
+emit_32(3272640496);
+emit_32(1098514432);
+emit_32(1110034088);
+emit_32(3272640496);
+emit_32(1100759066);
+emit_32(1109323153);
+emit_32(3272640496);
+emit_32(1102807040);
+emit_32(1108619533);
+emit_32(3272640496);
+emit_32(1104855066);
+emit_32(1107915545);
+emit_32(3272640496);
+emit_32(1106903040);
+emit_32(1107624277);
+emit_32(3272640496);
+emit_32(1108123661);
+emit_32(1106832051);
+emit_32(3272640496);
+emit_32(1109147648);
+emit_32(1105866313);
+emit_32(3272640496);
+emit_32(1110171661);
+emit_32(1104840439);
+emit_32(3272640496);
+emit_32(1111195648);
+emit_32(1104739880);
+emit_32(3272640496);
+emit_32(1112219661);
+emit_32(1104492573);
+emit_32(3272640496);
+emit_32(1113243648);
+emit_32(1104325483);
+emit_32(3272640496);
+emit_32(1114267661);
+emit_32(1105104785);
+emit_32(3272640496);
+emit_32(1115291648);
+emit_32(1105118154);
+emit_32(3272640496);
+emit_32(1116000263);
+emit_32(1105110290);
+emit_32(3272640496);
+emit_32(1116512256);
+emit_32(1106190585);
+emit_32(3272640496);
+emit_32(1117024263);
+emit_32(1106806938);
+emit_32(3272640496);
+emit_32(1117536256);
+emit_32(1107447723);
+emit_32(3272640496);
+emit_32(1118048263);
+emit_32(1107960450);
+emit_32(3272640496);
+emit_32(1118560256);
+emit_32(1108120882);
+emit_32(3272640496);
+emit_32(1119072263);
+emit_32(1108021058);
+emit_32(3272640496);
+emit_32(1119584256);
+emit_32(1107844897);
+emit_32(3272640496);
+emit_32(1120096263);
+emit_32(1107897457);
+emit_32(3272640496);
+emit_32(1120608322);
+emit_32(1108031465);
+emit_32(3272640496);
+emit_32(1121120289);
+emit_32(1108410263);
+emit_32(3272640496);
+emit_32(1121632256);
+emit_32(1108301604);
+emit_32(3272640496);
+emit_32(1122144223);
+emit_32(1108298380);
+emit_32(3272640496);
+emit_32(1122656322);
+emit_32(1108279165);
+emit_32(3272640496);
+emit_32(1123168289);
+emit_32(1108038648);
+emit_32(3272640496);
+emit_32(1123680256);
+emit_32(1107908388);
+emit_32(3272640496);
+emit_32(1124132848);
+emit_32(1107420617);
+emit_32(3272640496);
+emit_32(1124388897);
+emit_32(1106088663);
+emit_32(3272640496);
+emit_32(1124644880);
+emit_32(1104288416);
+emit_32(3272640496);
+emit_32(1124900864);
+emit_32(1102764101);
+emit_32(3272640496);
+emit_32(1125156848);
+emit_32(1100664904);
+emit_32(3272640496);
+emit_32(1125412897);
+emit_32(1097290744);
+emit_32(3272640496);
+emit_32(1125668880);
+emit_32(1093918838);
+emit_32(3272640496);
+emit_32(1125924864);
+emit_32(1092359438);
+emit_32(3272640496);
+emit_32(1126180848);
+emit_32(1090438216);
+emit_32(3272640496);
+emit_32(1126436897);
+emit_32(1085633179);
+emit_32(3272640496);
+emit_32(1126692880);
+emit_32(1082298330);
+emit_32(3272640496);
+emit_32(1126948864);
+emit_32(1071317684);
+emit_32(3272640496);
+emit_32(1127204848);
+emit_32(3211416991);
+emit_32(3272640496);
+emit_32(1127460897);
+emit_32(3224008099);
+emit_32(3272640496);
+emit_32(1127716880);
+emit_32(3232930936);
+emit_32(3272640496);
+emit_32(1127972864);
+emit_32(3237569689);
+emit_32(3272640496);
+emit_32(1128228848);
+emit_32(3240285648);
+emit_32(3272640496);
+emit_32(1128484897);
+emit_32(3243818405);
+emit_32(3272640496);
+emit_32(1128740880);
+emit_32(3246427577);
+emit_32(3272640496);
+emit_32(1128996864);
+emit_32(3247046918);
+emit_32(3272640496);
+emit_32(1129252848);
+emit_32(3247819509);
+emit_32(3272640496);
+emit_32(1129508897);
+emit_32(3247822340);
+emit_32(3272640496);
+emit_32(1129764880);
+emit_32(3248121446);
+emit_32(3272640496);
+emit_32(1130020864);
+emit_32(3248655224);
+emit_32(3272640496);
+emit_32(1130276848);
+emit_32(3248219541);
+emit_32(3272640496);
+emit_32(1130532897);
+emit_32(3247726395);
+emit_32(3272640496);
+emit_32(1130788880);
+emit_32(3247190835);
+emit_32(3272640496);
+emit_32(1131044864);
+emit_32(3246657425);
+emit_32(3272640496);
+emit_32(1131300848);
+emit_32(3245446844);
+emit_32(3272640496);
+emit_32(1131556897);
+emit_32(3243320646);
+emit_32(3272640496);
+emit_32(1131812880);
+emit_32(3240090015);
+emit_32(3272640496);
+emit_32(1132068864);
+emit_32(3233059449);
+emit_32(3272640496);
+emit_32(1081737216);
+emit_32(1110289075);
+emit_32(3272896545);
+emit_32(1090125824);
+emit_32(1110184899);
+emit_32(3272896545);
+emit_32(1094418484);
+emit_32(1110081326);
+emit_32(3272896545);
+emit_32(1098514432);
+emit_32(1109624907);
+emit_32(3272896545);
+emit_32(1100759066);
+emit_32(1109048007);
+emit_32(3272896545);
+emit_32(1102807040);
+emit_32(1108349472);
+emit_32(3272896545);
+emit_32(1104855066);
+emit_32(1107549330);
+emit_32(3272896545);
+emit_32(1106903040);
+emit_32(1106981421);
+emit_32(3272896545);
+emit_32(1108123661);
+emit_32(1105990831);
+emit_32(3272896545);
+emit_32(1109147648);
+emit_32(1104915359);
+emit_32(3272896545);
+emit_32(1110171661);
+emit_32(1103693873);
+emit_32(3272896545);
+emit_32(1111195648);
+emit_32(1103863900);
+emit_32(3272896545);
+emit_32(1112219661);
+emit_32(1103998799);
+emit_32(3272896545);
+emit_32(1113243648);
+emit_32(1104012640);
+emit_32(3272896545);
+emit_32(1114267661);
+emit_32(1104234834);
+emit_32(3272896545);
+emit_32(1115291648);
+emit_32(1104799230);
+emit_32(3272896545);
+emit_32(1116000263);
+emit_32(1104865395);
+emit_32(3272896545);
+emit_32(1116512256);
+emit_32(1105083079);
+emit_32(3272896545);
+emit_32(1117024263);
+emit_32(1105770892);
+emit_32(3272896545);
+emit_32(1117536256);
+emit_32(1106981264);
+emit_32(3272896545);
+emit_32(1118048263);
+emit_32(1107541964);
+emit_32(3272896545);
+emit_32(1118560256);
+emit_32(1107753173);
+emit_32(3272896545);
+emit_32(1119072263);
+emit_32(1107932348);
+emit_32(3272896545);
+emit_32(1119584256);
+emit_32(1107696026);
+emit_32(3272896545);
+emit_32(1120096263);
+emit_32(1107774171);
+emit_32(3272896545);
+emit_32(1120608322);
+emit_32(1107999483);
+emit_32(3272896545);
+emit_32(1121120289);
+emit_32(1108089897);
+emit_32(3272896545);
+emit_32(1121632256);
+emit_32(1107942887);
+emit_32(3272896545);
+emit_32(1122144223);
+emit_32(1108011018);
+emit_32(3272896545);
+emit_32(1122656322);
+emit_32(1107841201);
+emit_32(3272896545);
+emit_32(1123168289);
+emit_32(1107624487);
+emit_32(3272896545);
+emit_32(1123680256);
+emit_32(1107346430);
+emit_32(3272896545);
+emit_32(1124132848);
+emit_32(1106655681);
+emit_32(3272896545);
+emit_32(1124388897);
+emit_32(1105650778);
+emit_32(3272896545);
+emit_32(1124644880);
+emit_32(1103819755);
+emit_32(3272896545);
+emit_32(1124900864);
+emit_32(1101832441);
+emit_32(3272896545);
+emit_32(1125156848);
+emit_32(1099587597);
+emit_32(3272896545);
+emit_32(1125412897);
+emit_32(1095963771);
+emit_32(3272896545);
+emit_32(1125668880);
+emit_32(1092682462);
+emit_32(3272896545);
+emit_32(1125924864);
+emit_32(1090858999);
+emit_32(3272896545);
+emit_32(1126180848);
+emit_32(1087538064);
+emit_32(3272896545);
+emit_32(1126436897);
+emit_32(1082518866);
+emit_32(3272896545);
+emit_32(1126692880);
+emit_32(1074794217);
+emit_32(3272896545);
+emit_32(1126948864);
+emit_32(1055151058);
+emit_32(3272896545);
+emit_32(1127204848);
+emit_32(3219019520);
+emit_32(3272896545);
+emit_32(1127460897);
+emit_32(3227302431);
+emit_32(3272896545);
+emit_32(1127716880);
+emit_32(3235425456);
+emit_32(3272896545);
+emit_32(1127972864);
+emit_32(3239324219);
+emit_32(3272896545);
+emit_32(1128228848);
+emit_32(3242595451);
+emit_32(3272896545);
+emit_32(1128484897);
+emit_32(3244970790);
+emit_32(3272896545);
+emit_32(1128740880);
+emit_32(3246227194);
+emit_32(3272896545);
+emit_32(1128996864);
+emit_32(3247085558);
+emit_32(3272896545);
+emit_32(1129252848);
+emit_32(3248170310);
+emit_32(3272896545);
+emit_32(1129508897);
+emit_32(3248369697);
+emit_32(3272896545);
+emit_32(1129764880);
+emit_32(3248556238);
+emit_32(3272896545);
+emit_32(1130020864);
+emit_32(3248791329);
+emit_32(3272896545);
+emit_32(1130276848);
+emit_32(3248863052);
+emit_32(3272896545);
+emit_32(1130532897);
+emit_32(3248823992);
+emit_32(3272896545);
+emit_32(1130788880);
+emit_32(3248329641);
+emit_32(3272896545);
+emit_32(1131044864);
+emit_32(3247178567);
+emit_32(3272896545);
+emit_32(1131300848);
+emit_32(3244969427);
+emit_32(3272896545);
+emit_32(1131556897);
+emit_32(3242521421);
+emit_32(3272896545);
+emit_32(1131812880);
+emit_32(3240271177);
+emit_32(3272896545);
+emit_32(1132068864);
+emit_32(3235475683);
+emit_32(3272896545);
+emit_32(1081737216);
+emit_32(1110106754);
+emit_32(3273152528);
+emit_32(1090125824);
+emit_32(1109851190);
+emit_32(3273152528);
+emit_32(1094418484);
+emit_32(1109531007);
+emit_32(3273152528);
+emit_32(1098514432);
+emit_32(1109268234);
+emit_32(3273152528);
+emit_32(1100759066);
+emit_32(1108527468);
+emit_32(3273152528);
+emit_32(1102807040);
+emit_32(1107822510);
+emit_32(3273152528);
+emit_32(1104855066);
+emit_32(1106879657);
+emit_32(3273152528);
+emit_32(1106903040);
+emit_32(1105644854);
+emit_32(3273152528);
+emit_32(1108123661);
+emit_32(1104812442);
+emit_32(3273152528);
+emit_32(1109147648);
+emit_32(1103599816);
+emit_32(3273152528);
+emit_32(1110171661);
+emit_32(1102886837);
+emit_32(3273152528);
+emit_32(1111195648);
+emit_32(1102824551);
+emit_32(3273152528);
+emit_32(1112219661);
+emit_32(1103195800);
+emit_32(3273152528);
+emit_32(1113243648);
+emit_32(1103637250);
+emit_32(3273152528);
+emit_32(1114267661);
+emit_32(1103975626);
+emit_32(3273152528);
+emit_32(1115291648);
+emit_32(1103996545);
+emit_32(3273152528);
+emit_32(1116000263);
+emit_32(1104513755);
+emit_32(3273152528);
+emit_32(1116512256);
+emit_32(1104583642);
+emit_32(3273152528);
+emit_32(1117024263);
+emit_32(1105332745);
+emit_32(3273152528);
+emit_32(1117536256);
+emit_32(1106424522);
+emit_32(3273152528);
+emit_32(1118048263);
+emit_32(1107096712);
+emit_32(3273152528);
+emit_32(1118560256);
+emit_32(1107537140);
+emit_32(3273152528);
+emit_32(1119072263);
+emit_32(1107484004);
+emit_32(3273152528);
+emit_32(1119584256);
+emit_32(1107558426);
+emit_32(3273152528);
+emit_32(1120096263);
+emit_32(1107936071);
+emit_32(3273152528);
+emit_32(1120608322);
+emit_32(1108104000);
+emit_32(3273152528);
+emit_32(1121120289);
+emit_32(1107929150);
+emit_32(3273152528);
+emit_32(1121632256);
+emit_32(1107694584);
+emit_32(3273152528);
+emit_32(1122144223);
+emit_32(1107539263);
+emit_32(3273152528);
+emit_32(1122656322);
+emit_32(1107466886);
+emit_32(3273152528);
+emit_32(1123168289);
+emit_32(1107473859);
+emit_32(3273152528);
+emit_32(1123680256);
+emit_32(1106712723);
+emit_32(3273152528);
+emit_32(1124132848);
+emit_32(1105424338);
+emit_32(3273152528);
+emit_32(1124388897);
+emit_32(1104440931);
+emit_32(3273152528);
+emit_32(1124644880);
+emit_32(1103144052);
+emit_32(3273152528);
+emit_32(1124900864);
+emit_32(1101107560);
+emit_32(3273152528);
+emit_32(1125156848);
+emit_32(1099132725);
+emit_32(3273152528);
+emit_32(1125412897);
+emit_32(1095577685);
+emit_32(3273152528);
+emit_32(1125668880);
+emit_32(1092369556);
+emit_32(3273152528);
+emit_32(1125924864);
+emit_32(1088719809);
+emit_32(3273152528);
+emit_32(1126180848);
+emit_32(1083696669);
+emit_32(3273152528);
+emit_32(1126436897);
+emit_32(1075000451);
+emit_32(3273152528);
+emit_32(1126692880);
+emit_32(1069530827);
+emit_32(3273152528);
+emit_32(1126948864);
+emit_32(3206582150);
+emit_32(3273152528);
+emit_32(1127204848);
+emit_32(3221141921);
+emit_32(3273152528);
+emit_32(1127460897);
+emit_32(3231308055);
+emit_32(3273152528);
+emit_32(1127716880);
+emit_32(3238013027);
+emit_32(3273152528);
+emit_32(1127972864);
+emit_32(3241648692);
+emit_32(3273152528);
+emit_32(1128228848);
+emit_32(3243113762);
+emit_32(3273152528);
+emit_32(1128484897);
+emit_32(3244161289);
+emit_32(3273152528);
+emit_32(1128740880);
+emit_32(3245421258);
+emit_32(3273152528);
+emit_32(1128996864);
+emit_32(3246875424);
+emit_32(3273152528);
+emit_32(1129252848);
+emit_32(3247610685);
+emit_32(3273152528);
+emit_32(1129508897);
+emit_32(3248309299);
+emit_32(3273152528);
+emit_32(1129764880);
+emit_32(3248981069);
+emit_32(3273152528);
+emit_32(1130020864);
+emit_32(3249435889);
+emit_32(3273152528);
+emit_32(1130276848);
+emit_32(3249270057);
+emit_32(3273152528);
+emit_32(1130532897);
+emit_32(3249259047);
+emit_32(3273152528);
+emit_32(1130788880);
+emit_32(3248161974);
+emit_32(3273152528);
+emit_32(1131044864);
+emit_32(3246939072);
+emit_32(3273152528);
+emit_32(1131300848);
+emit_32(3244307041);
+emit_32(3273152528);
+emit_32(1131556897);
+emit_32(3241397138);
+emit_32(3273152528);
+emit_32(1131812880);
+emit_32(3239169606);
+emit_32(3273152528);
+emit_32(1132068864);
+emit_32(3235418829);
+emit_32(3273152528);
+emit_32(1081737216);
+emit_32(1109848700);
+emit_32(3273408512);
+emit_32(1090125824);
+emit_32(1109616073);
+emit_32(3273408512);
+emit_32(1094418484);
+emit_32(1109191190);
+emit_32(3273408512);
+emit_32(1098514432);
+emit_32(1108732386);
+emit_32(3273408512);
+emit_32(1100759066);
+emit_32(1108353876);
+emit_32(3273408512);
+emit_32(1102807040);
+emit_32(1107813099);
+emit_32(3273408512);
+emit_32(1104855066);
+emit_32(1106931404);
+emit_32(3273408512);
+emit_32(1106903040);
+emit_32(1105711700);
+emit_32(3273408512);
+emit_32(1108123661);
+emit_32(1104199496);
+emit_32(3273408512);
+emit_32(1109147648);
+emit_32(1102966738);
+emit_32(3273408512);
+emit_32(1110171661);
+emit_32(1102284115);
+emit_32(3273408512);
+emit_32(1111195648);
+emit_32(1102118283);
+emit_32(3273408512);
+emit_32(1112219661);
+emit_32(1102403024);
+emit_32(3273408512);
+emit_32(1113243648);
+emit_32(1102981471);
+emit_32(3273408512);
+emit_32(1114267661);
+emit_32(1103432253);
+emit_32(3273408512);
+emit_32(1115291648);
+emit_32(1103738700);
+emit_32(3273408512);
+emit_32(1116000263);
+emit_32(1104470396);
+emit_32(3273408512);
+emit_32(1116512256);
+emit_32(1104866915);
+emit_32(3273408512);
+emit_32(1117024263);
+emit_32(1105262543);
+emit_32(3273408512);
+emit_32(1117536256);
+emit_32(1106001527);
+emit_32(3273408512);
+emit_32(1118048263);
+emit_32(1106476637);
+emit_32(3273408512);
+emit_32(1118560256);
+emit_32(1106576409);
+emit_32(3273408512);
+emit_32(1119072263);
+emit_32(1106461537);
+emit_32(3273408512);
+emit_32(1119584256);
+emit_32(1107353561);
+emit_32(3273408512);
+emit_32(1120096263);
+emit_32(1107634841);
+emit_32(3273408512);
+emit_32(1120608322);
+emit_32(1107769845);
+emit_32(3273408512);
+emit_32(1121120289);
+emit_32(1107434380);
+emit_32(3273408512);
+emit_32(1121632256);
+emit_32(1107315943);
+emit_32(3273408512);
+emit_32(1122144223);
+emit_32(1106787592);
+emit_32(3273408512);
+emit_32(1122656322);
+emit_32(1106765100);
+emit_32(3273408512);
+emit_32(1123168289);
+emit_32(1106762845);
+emit_32(3273408512);
+emit_32(1123680256);
+emit_32(1105758834);
+emit_32(3273408512);
+emit_32(1124132848);
+emit_32(1104621758);
+emit_32(3273408512);
+emit_32(1124388897);
+emit_32(1103142375);
+emit_32(3273408512);
+emit_32(1124644880);
+emit_32(1101953080);
+emit_32(3273408512);
+emit_32(1124900864);
+emit_32(1100385039);
+emit_32(3273408512);
+emit_32(1125156848);
+emit_32(1097070857);
+emit_32(3273408512);
+emit_32(1125412897);
+emit_32(1093584657);
+emit_32(3273408512);
+emit_32(1125668880);
+emit_32(1091629985);
+emit_32(3273408512);
+emit_32(1125924864);
+emit_32(1088130111);
+emit_32(3273408512);
+emit_32(1126180848);
+emit_32(1080062598);
+emit_32(3273408512);
+emit_32(1126436897);
+emit_32(1066603370);
+emit_32(3273408512);
+emit_32(1126692880);
+emit_32(3206794499);
+emit_32(3273408512);
+emit_32(1126948864);
+emit_32(3224322043);
+emit_32(3273408512);
+emit_32(1127204848);
+emit_32(3229663824);
+emit_32(3273408512);
+emit_32(1127460897);
+emit_32(3234125914);
+emit_32(3273408512);
+emit_32(1127716880);
+emit_32(3238854457);
+emit_32(3273408512);
+emit_32(1127972864);
+emit_32(3240458138);
+emit_32(3273408512);
+emit_32(1128228848);
+emit_32(3241347121);
+emit_32(3273408512);
+emit_32(1128484897);
+emit_32(3243399080);
+emit_32(3273408512);
+emit_32(1128740880);
+emit_32(3244860480);
+emit_32(3273408512);
+emit_32(1128996864);
+emit_32(3246331213);
+emit_32(3273408512);
+emit_32(1129252848);
+emit_32(3247173534);
+emit_32(3273408512);
+emit_32(1129508897);
+emit_32(3247995565);
+emit_32(3273408512);
+emit_32(1129764880);
+emit_32(3249070460);
+emit_32(3273408512);
+emit_32(1130020864);
+emit_32(3249215740);
+emit_32(3273408512);
+emit_32(1130276848);
+emit_32(3249090383);
+emit_32(3273408512);
+emit_32(1130532897);
+emit_32(3248637136);
+emit_32(3273408512);
+emit_32(1130788880);
+emit_32(3247527900);
+emit_32(3273408512);
+emit_32(1131044864);
+emit_32(3246097695);
+emit_32(3273408512);
+emit_32(1131300848);
+emit_32(3243725711);
+emit_32(3273408512);
+emit_32(1131556897);
+emit_32(3240252198);
+emit_32(3273408512);
+emit_32(1131812880);
+emit_32(3238101369);
+emit_32(3273408512);
+emit_32(1132068864);
+emit_32(3232685716);
+emit_32(3273408512);
+emit_32(1081737216);
+emit_32(1109518057);
+emit_32(3273664496);
+emit_32(1090125824);
+emit_32(1109209645);
+emit_32(3273664496);
+emit_32(1094418484);
+emit_32(1108711100);
+emit_32(3273664496);
+emit_32(1098514432);
+emit_32(1108394482);
+emit_32(3273664496);
+emit_32(1100759066);
+emit_32(1107902805);
+emit_32(3273664496);
+emit_32(1102807040);
+emit_32(1107530351);
+emit_32(3273664496);
+emit_32(1104855066);
+emit_32(1106484396);
+emit_32(3273664496);
+emit_32(1106903040);
+emit_32(1105503610);
+emit_32(3273664496);
+emit_32(1108123661);
+emit_32(1104089658);
+emit_32(3273664496);
+emit_32(1109147648);
+emit_32(1103023571);
+emit_32(3273664496);
+emit_32(1110171661);
+emit_32(1102213651);
+emit_32(3273664496);
+emit_32(1111195648);
+emit_32(1101760718);
+emit_32(3273664496);
+emit_32(1112219661);
+emit_32(1102038119);
+emit_32(3273664496);
+emit_32(1113243648);
+emit_32(1102582016);
+emit_32(3273664496);
+emit_32(1114267661);
+emit_32(1103573287);
+emit_32(3273664496);
+emit_32(1115291648);
+emit_32(1103737913);
+emit_32(3273664496);
+emit_32(1116000263);
+emit_32(1104225396);
+emit_32(3273664496);
+emit_32(1116512256);
+emit_32(1104815063);
+emit_32(3273664496);
+emit_32(1117024263);
+emit_32(1105243301);
+emit_32(3273664496);
+emit_32(1117536256);
+emit_32(1105695814);
+emit_32(3273664496);
+emit_32(1118048263);
+emit_32(1105989625);
+emit_32(3273664496);
+emit_32(1118560256);
+emit_32(1106114930);
+emit_32(3273664496);
+emit_32(1119072263);
+emit_32(1106699669);
+emit_32(3273664496);
+emit_32(1119584256);
+emit_32(1107034164);
+emit_32(3273664496);
+emit_32(1120096263);
+emit_32(1107327294);
+emit_32(3273664496);
+emit_32(1120608322);
+emit_32(1106913106);
+emit_32(3273664496);
+emit_32(1121120289);
+emit_32(1106509038);
+emit_32(3273664496);
+emit_32(1121632256);
+emit_32(1105952401);
+emit_32(3273664496);
+emit_32(1122144223);
+emit_32(1106608862);
+emit_32(3273664496);
+emit_32(1122656322);
+emit_32(1106050443);
+emit_32(3273664496);
+emit_32(1123168289);
+emit_32(1105539210);
+emit_32(3273664496);
+emit_32(1123680256);
+emit_32(1104316937);
+emit_32(3273664496);
+emit_32(1124132848);
+emit_32(1103423078);
+emit_32(3273664496);
+emit_32(1124388897);
+emit_32(1102157867);
+emit_32(3273664496);
+emit_32(1124644880);
+emit_32(1100686767);
+emit_32(3273664496);
+emit_32(1124900864);
+emit_32(1099193752);
+emit_32(3273664496);
+emit_32(1125156848);
+emit_32(1096183867);
+emit_32(3273664496);
+emit_32(1125412897);
+emit_32(1092300434);
+emit_32(3273664496);
+emit_32(1125668880);
+emit_32(1090658553);
+emit_32(3273664496);
+emit_32(1125924864);
+emit_32(1087350684);
+emit_32(3273664496);
+emit_32(1126180848);
+emit_32(1076097052);
+emit_32(3273664496);
+emit_32(1126436897);
+emit_32(1033250201);
+emit_32(3273664496);
+emit_32(1126692880);
+emit_32(3213794340);
+emit_32(3273664496);
+emit_32(1126948864);
+emit_32(3225617244);
+emit_32(3273664496);
+emit_32(1127204848);
+emit_32(3234199587);
+emit_32(3273664496);
+emit_32(1127460897);
+emit_32(3236783823);
+emit_32(3273664496);
+emit_32(1127716880);
+emit_32(3239231409);
+emit_32(3273664496);
+emit_32(1127972864);
+emit_32(3239869436);
+emit_32(3273664496);
+emit_32(1128228848);
+emit_32(3240676137);
+emit_32(3273664496);
+emit_32(1128484897);
+emit_32(3242958153);
+emit_32(3273664496);
+emit_32(1128740880);
+emit_32(3244196417);
+emit_32(3273664496);
+emit_32(1128996864);
+emit_32(3245843100);
+emit_32(3273664496);
+emit_32(1129252848);
+emit_32(3247245204);
+emit_32(3273664496);
+emit_32(1129508897);
+emit_32(3248095337);
+emit_32(3273664496);
+emit_32(1129764880);
+emit_32(3248269505);
+emit_32(3273664496);
+emit_32(1130020864);
+emit_32(3248127423);
+emit_32(3273664496);
+emit_32(1130276848);
+emit_32(3248240250);
+emit_32(3273664496);
+emit_32(1130532897);
+emit_32(3247358398);
+emit_32(3273664496);
+emit_32(1130788880);
+emit_32(3246549998);
+emit_32(3273664496);
+emit_32(1131044864);
+emit_32(3244820005);
+emit_32(3273664496);
+emit_32(1131300848);
+emit_32(3242185563);
+emit_32(3273664496);
+emit_32(1131556897);
+emit_32(3239470873);
+emit_32(3273664496);
+emit_32(1131812880);
+emit_32(3235146241);
+emit_32(3273664496);
+emit_32(1132068864);
+emit_32(3228421765);
+emit_32(3273664496);
+emit_32(1081737216);
+emit_32(1109095429);
+emit_32(3273920545);
+emit_32(1090125824);
+emit_32(1108721848);
+emit_32(3273920545);
+emit_32(1094418484);
+emit_32(1108271799);
+emit_32(3273920545);
+emit_32(1098514432);
+emit_32(1107836640);
+emit_32(3273920545);
+emit_32(1100759066);
+emit_32(1107583487);
+emit_32(3273920545);
+emit_32(1102807040);
+emit_32(1107305929);
+emit_32(3273920545);
+emit_32(1104855066);
+emit_32(1106095427);
+emit_32(3273920545);
+emit_32(1106903040);
+emit_32(1104843427);
+emit_32(3273920545);
+emit_32(1108123661);
+emit_32(1103754481);
+emit_32(3273920545);
+emit_32(1109147648);
+emit_32(1102895959);
+emit_32(3273920545);
+emit_32(1110171661);
+emit_32(1102181460);
+emit_32(3273920545);
+emit_32(1111195648);
+emit_32(1101676256);
+emit_32(3273920545);
+emit_32(1112219661);
+emit_32(1101547858);
+emit_32(3273920545);
+emit_32(1113243648);
+emit_32(1102482086);
+emit_32(3273920545);
+emit_32(1114267661);
+emit_32(1103334421);
+emit_32(3273920545);
+emit_32(1115291648);
+emit_32(1103698330);
+emit_32(3273920545);
+emit_32(1116000263);
+emit_32(1103797472);
+emit_32(3273920545);
+emit_32(1116512256);
+emit_32(1104470449);
+emit_32(3273920545);
+emit_32(1117024263);
+emit_32(1105019221);
+emit_32(3273920545);
+emit_32(1117536256);
+emit_32(1105107249);
+emit_32(3273920545);
+emit_32(1118048263);
+emit_32(1105221177);
+emit_32(3273920545);
+emit_32(1118560256);
+emit_32(1105813517);
+emit_32(3273920545);
+emit_32(1119072263);
+emit_32(1106222986);
+emit_32(3273920545);
+emit_32(1119584256);
+emit_32(1106744181);
+emit_32(3273920545);
+emit_32(1120096263);
+emit_32(1106572162);
+emit_32(3273920545);
+emit_32(1120608322);
+emit_32(1106138261);
+emit_32(3273920545);
+emit_32(1121120289);
+emit_32(1105034373);
+emit_32(3273920545);
+emit_32(1121632256);
+emit_32(1104844371);
+emit_32(3273920545);
+emit_32(1122144223);
+emit_32(1105102006);
+emit_32(3273920545);
+emit_32(1122656322);
+emit_32(1104862039);
+emit_32(3273920545);
+emit_32(1123168289);
+emit_32(1104232946);
+emit_32(3273920545);
+emit_32(1123680256);
+emit_32(1103026297);
+emit_32(3273920545);
+emit_32(1124132848);
+emit_32(1101863741);
+emit_32(3273920545);
+emit_32(1124388897);
+emit_32(1100516216);
+emit_32(3273920545);
+emit_32(1124644880);
+emit_32(1099293105);
+emit_32(3273920545);
+emit_32(1124900864);
+emit_32(1097230346);
+emit_32(3273920545);
+emit_32(1125156848);
+emit_32(1093750751);
+emit_32(3273920545);
+emit_32(1125412897);
+emit_32(1090925405);
+emit_32(3273920545);
+emit_32(1125668880);
+emit_32(1088433213);
+emit_32(3273920545);
+emit_32(1125924864);
+emit_32(1084125285);
+emit_32(3273920545);
+emit_32(1126180848);
+emit_32(1075725646);
+emit_32(3273920545);
+emit_32(1126436897);
+emit_32(1061623490);
+emit_32(3273920545);
+emit_32(1126692880);
+emit_32(3216532465);
+emit_32(3273920545);
+emit_32(1126948864);
+emit_32(3227819673);
+emit_32(3273920545);
+emit_32(1127204848);
+emit_32(3234520577);
+emit_32(3273920545);
+emit_32(1127460897);
+emit_32(3236952791);
+emit_32(3273920545);
+emit_32(1127716880);
+emit_32(3239234608);
+emit_32(3273920545);
+emit_32(1127972864);
+emit_32(3240023346);
+emit_32(3273920545);
+emit_32(1128228848);
+emit_32(3241225696);
+emit_32(3273920545);
+emit_32(1128484897);
+emit_32(3243063535);
+emit_32(3273920545);
+emit_32(1128740880);
+emit_32(3245269949);
+emit_32(3273920545);
+emit_32(1128996864);
+emit_32(3246344425);
+emit_32(3273920545);
+emit_32(1129252848);
+emit_32(3246962665);
+emit_32(3273920545);
+emit_32(1129508897);
+emit_32(3247716853);
+emit_32(3273920545);
+emit_32(1129764880);
+emit_32(3247725609);
+emit_32(3273920545);
+emit_32(1130020864);
+emit_32(3247729803);
+emit_32(3273920545);
+emit_32(1130276848);
+emit_32(3247215739);
+emit_32(3273920545);
+emit_32(1130532897);
+emit_32(3246018422);
+emit_32(3273920545);
+emit_32(1130788880);
+emit_32(3244886589);
+emit_32(3273920545);
+emit_32(1131044864);
+emit_32(3242781888);
+emit_32(3273920545);
+emit_32(1131300848);
+emit_32(3240781205);
+emit_32(3273920545);
+emit_32(1131556897);
+emit_32(3238299267);
+emit_32(3273920545);
+emit_32(1131812880);
+emit_32(3233550057);
+emit_32(3273920545);
+emit_32(1132068864);
+emit_32(3223464811);
+emit_32(3273920545);
+emit_32(1081737216);
+emit_32(1108664621);
+emit_32(3274176528);
+emit_32(1090125824);
+emit_32(1108522618);
+emit_32(3274176528);
+emit_32(1094418484);
+emit_32(1108407563);
+emit_32(3274176528);
+emit_32(1098514432);
+emit_32(1107682787);
+emit_32(3274176528);
+emit_32(1100759066);
+emit_32(1107320583);
+emit_32(3274176528);
+emit_32(1102807040);
+emit_32(1106544532);
+emit_32(3274176528);
+emit_32(1104855066);
+emit_32(1105511999);
+emit_32(3274176528);
+emit_32(1106903040);
+emit_32(1104375867);
+emit_32(3274176528);
+emit_32(1108123661);
+emit_32(1103074112);
+emit_32(3274176528);
+emit_32(1109147648);
+emit_32(1102337278);
+emit_32(3274176528);
+emit_32(1110171661);
+emit_32(1101962517);
+emit_32(3274176528);
+emit_32(1111195648);
+emit_32(1101639031);
+emit_32(3274176528);
+emit_32(1112219661);
+emit_32(1101573181);
+emit_32(3274176528);
+emit_32(1113243648);
+emit_32(1101942070);
+emit_32(3274176528);
+emit_32(1114267661);
+emit_32(1102543638);
+emit_32(3274176528);
+emit_32(1115291648);
+emit_32(1103135559);
+emit_32(3274176528);
+emit_32(1116000263);
+emit_32(1103322153);
+emit_32(3274176528);
+emit_32(1116512256);
+emit_32(1103539995);
+emit_32(3274176528);
+emit_32(1117024263);
+emit_32(1103767850);
+emit_32(3274176528);
+emit_32(1117536256);
+emit_32(1104163740);
+emit_32(3274176528);
+emit_32(1118048263);
+emit_32(1104602045);
+emit_32(3274176528);
+emit_32(1118560256);
+emit_32(1104897953);
+emit_32(3274176528);
+emit_32(1119072263);
+emit_32(1105720246);
+emit_32(3274176528);
+emit_32(1119584256);
+emit_32(1105815981);
+emit_32(3274176528);
+emit_32(1120096263);
+emit_32(1105144788);
+emit_32(3274176528);
+emit_32(1120608322);
+emit_32(1104485233);
+emit_32(3274176528);
+emit_32(1121120289);
+emit_32(1103618061);
+emit_32(3274176528);
+emit_32(1121632256);
+emit_32(1103661315);
+emit_32(3274176528);
+emit_32(1122144223);
+emit_32(1103401845);
+emit_32(3274176528);
+emit_32(1122656322);
+emit_32(1102987500);
+emit_32(3274176528);
+emit_32(1123168289);
+emit_32(1102162900);
+emit_32(3274176528);
+emit_32(1123680256);
+emit_32(1100880701);
+emit_32(3274176528);
+emit_32(1124132848);
+emit_32(1099831339);
+emit_32(3274176528);
+emit_32(1124388897);
+emit_32(1098628622);
+emit_32(3274176528);
+emit_32(1124644880);
+emit_32(1096283587);
+emit_32(3274176528);
+emit_32(1124900864);
+emit_32(1094436939);
+emit_32(3274176528);
+emit_32(1125156848);
+emit_32(1092462586);
+emit_32(3274176528);
+emit_32(1125412897);
+emit_32(1090574426);
+emit_32(3274176528);
+emit_32(1125668880);
+emit_32(1088368683);
+emit_32(3274176528);
+emit_32(1125924864);
+emit_32(1084468987);
+emit_32(3274176528);
+emit_32(1126180848);
+emit_32(1078479458);
+emit_32(3274176528);
+emit_32(1126436897);
+emit_32(1070097393);
+emit_32(3274176528);
+emit_32(1126692880);
+emit_32(3219330905);
+emit_32(3274176528);
+emit_32(1126948864);
+emit_32(3229956377);
+emit_32(3274176528);
+emit_32(1127204848);
+emit_32(3233498299);
+emit_32(3274176528);
+emit_32(1127460897);
+emit_32(3237958480);
+emit_32(3274176528);
+emit_32(1127716880);
+emit_32(3239973518);
+emit_32(3274176528);
+emit_32(1127972864);
+emit_32(3240389457);
+emit_32(3274176528);
+emit_32(1128228848);
+emit_32(3241706154);
+emit_32(3274176528);
+emit_32(1128484897);
+emit_32(3243624314);
+emit_32(3274176528);
+emit_32(1128740880);
+emit_32(3245731637);
+emit_32(3274176528);
+emit_32(1128996864);
+emit_32(3246688777);
+emit_32(3274176528);
+emit_32(1129252848);
+emit_32(3247277500);
+emit_32(3274176528);
+emit_32(1129508897);
+emit_32(3247268744);
+emit_32(3274176528);
+emit_32(1129764880);
+emit_32(3246821579);
+emit_32(3274176528);
+emit_32(1130020864);
+emit_32(3246928901);
+emit_32(3274176528);
+emit_32(1130276848);
+emit_32(3246584024);
+emit_32(3274176528);
+emit_32(1130532897);
+emit_32(3244589423);
+emit_32(3274176528);
+emit_32(1130788880);
+emit_32(3243611311);
+emit_32(3274176528);
+emit_32(1131044864);
+emit_32(3242211253);
+emit_32(3274176528);
+emit_32(1131300848);
+emit_32(3239996199);
+emit_32(3274176528);
+emit_32(1131556897);
+emit_32(3237841102);
+emit_32(3274176528);
+emit_32(1131812880);
+emit_32(3232583521);
+emit_32(3274176528);
+emit_32(1132068864);
+emit_32(3220160035);
+emit_32(3274176528);
+emit_32(1081737216);
+emit_32(1108184872);
+emit_32(3274432512);
+emit_32(1090125824);
+emit_32(1108148932);
+emit_32(3274432512);
+emit_32(1094418484);
+emit_32(1107903853);
+emit_32(3274432512);
+emit_32(1098514432);
+emit_32(1107577694);
+emit_32(3274432512);
+emit_32(1100759066);
+emit_32(1106982365);
+emit_32(3274432512);
+emit_32(1102807040);
+emit_32(1105680086);
+emit_32(3274432512);
+emit_32(1104855066);
+emit_32(1104468771);
+emit_32(3274432512);
+emit_32(1106903040);
+emit_32(1103509114);
+emit_32(3274432512);
+emit_32(1108123661);
+emit_32(1102687764);
+emit_32(3274432512);
+emit_32(1109147648);
+emit_32(1102002520);
+emit_32(3274432512);
+emit_32(1110171661);
+emit_32(1101411123);
+emit_32(3274432512);
+emit_32(1111195648);
+emit_32(1101064569);
+emit_32(3274432512);
+emit_32(1112219661);
+emit_32(1100846150);
+emit_32(3274432512);
+emit_32(1113243648);
+emit_32(1101357436);
+emit_32(3274432512);
+emit_32(1114267661);
+emit_32(1102179729);
+emit_32(3274432512);
+emit_32(1115291648);
+emit_32(1102092698);
+emit_32(3274432512);
+emit_32(1116000263);
+emit_32(1102408371);
+emit_32(3274432512);
+emit_32(1116512256);
+emit_32(1102286999);
+emit_32(3274432512);
+emit_32(1117024263);
+emit_32(1102506518);
+emit_32(3274432512);
+emit_32(1117536256);
+emit_32(1103483005);
+emit_32(3274432512);
+emit_32(1118048263);
+emit_32(1103994238);
+emit_32(3274432512);
+emit_32(1118560256);
+emit_32(1104213233);
+emit_32(3274432512);
+emit_32(1119072263);
+emit_32(1103948992);
+emit_32(3274432512);
+emit_32(1119584256);
+emit_32(1103515143);
+emit_32(3274432512);
+emit_32(1120096263);
+emit_32(1103105832);
+emit_32(3274432512);
+emit_32(1120608322);
+emit_32(1102826124);
+emit_32(3274432512);
+emit_32(1121120289);
+emit_32(1102767456);
+emit_32(3274432512);
+emit_32(1121632256);
+emit_32(1102189901);
+emit_32(3274432512);
+emit_32(1122144223);
+emit_32(1101674421);
+emit_32(3274432512);
+emit_32(1122656322);
+emit_32(1100890243);
+emit_32(3274432512);
+emit_32(1123168289);
+emit_32(1099939761);
+emit_32(3274432512);
+emit_32(1123680256);
+emit_32(1099075997);
+emit_32(3274432512);
+emit_32(1124132848);
+emit_32(1097086376);
+emit_32(3274432512);
+emit_32(1124388897);
+emit_32(1095228614);
+emit_32(3274432512);
+emit_32(1124644880);
+emit_32(1093029436);
+emit_32(3274432512);
+emit_32(1124900864);
+emit_32(1091479672);
+emit_32(3274432512);
+emit_32(1125156848);
+emit_32(1091750163);
+emit_32(3274432512);
+emit_32(1125412897);
+emit_32(1089138149);
+emit_32(3274432512);
+emit_32(1125668880);
+emit_32(1086598540);
+emit_32(3274432512);
+emit_32(1125924864);
+emit_32(1083352484);
+emit_32(3274432512);
+emit_32(1126180848);
+emit_32(1076974919);
+emit_32(3274432512);
+emit_32(1126436897);
+emit_32(1066291146);
+emit_32(3274432512);
+emit_32(1126692880);
+emit_32(3221226898);
+emit_32(3274432512);
+emit_32(1126948864);
+emit_32(3228126151);
+emit_32(3274432512);
+emit_32(1127204848);
+emit_32(3231975515);
+emit_32(3274432512);
+emit_32(1127460897);
+emit_32(3238351340);
+emit_32(3274432512);
+emit_32(1127716880);
+emit_32(3240184460);
+emit_32(3274432512);
+emit_32(1127972864);
+emit_32(3241040832);
+emit_32(3274432512);
+emit_32(1128228848);
+emit_32(3242157461);
+emit_32(3274432512);
+emit_32(1128484897);
+emit_32(3244822731);
+emit_32(3274432512);
+emit_32(1128740880);
+emit_32(3246247536);
+emit_32(3274432512);
+emit_32(1128996864);
+emit_32(3247038372);
+emit_32(3274432512);
+emit_32(1129252848);
+emit_32(3247585939);
+emit_32(3274432512);
+emit_32(1129508897);
+emit_32(3246884389);
+emit_32(3274432512);
+emit_32(1129764880);
+emit_32(3246474763);
+emit_32(3274432512);
+emit_32(1130020864);
+emit_32(3246383746);
+emit_32(3274432512);
+emit_32(1130276848);
+emit_32(3245256632);
+emit_32(3274432512);
+emit_32(1130532897);
+emit_32(3243907010);
+emit_32(3274432512);
+emit_32(1130788880);
+emit_32(3243058921);
+emit_32(3274432512);
+emit_32(1131044864);
+emit_32(3241166032);
+emit_32(3274432512);
+emit_32(1131300848);
+emit_32(3238570922);
+emit_32(3274432512);
+emit_32(1131556897);
+emit_32(3234153659);
+emit_32(3274432512);
+emit_32(1131812880);
+emit_32(3230360226);
+emit_32(3274432512);
+emit_32(1132068864);
+emit_32(3219833634);
+emit_32(3274432512);
+emit_32(1081737216);
+emit_32(1108036289);
+emit_32(3274688496);
+emit_32(1090125824);
+emit_32(1107810609);
+emit_32(3274688496);
+emit_32(1094418484);
+emit_32(1107747825);
+emit_32(3274688496);
+emit_32(1098514432);
+emit_32(1107286871);
+emit_32(3274688496);
+emit_32(1100759066);
+emit_32(1106086881);
+emit_32(3274688496);
+emit_32(1102807040);
+emit_32(1104804315);
+emit_32(3274688496);
+emit_32(1104855066);
+emit_32(1103699326);
+emit_32(3274688496);
+emit_32(1106903040);
+emit_32(1102741504);
+emit_32(3274688496);
+emit_32(1108123661);
+emit_32(1101680083);
+emit_32(3274688496);
+emit_32(1109147648);
+emit_32(1101656595);
+emit_32(3274688496);
+emit_32(1110171661);
+emit_32(1100849663);
+emit_32(3274688496);
+emit_32(1111195648);
+emit_32(1100640053);
+emit_32(3274688496);
+emit_32(1112219661);
+emit_32(1100253443);
+emit_32(3274688496);
+emit_32(1113243648);
+emit_32(1100764047);
+emit_32(3274688496);
+emit_32(1114267661);
+emit_32(1101163554);
+emit_32(3274688496);
+emit_32(1115291648);
+emit_32(1101305217);
+emit_32(3274688496);
+emit_32(1116000263);
+emit_32(1101417624);
+emit_32(3274688496);
+emit_32(1116512256);
+emit_32(1101765385);
+emit_32(3274688496);
+emit_32(1117024263);
+emit_32(1102533938);
+emit_32(3274688496);
+emit_32(1117536256);
+emit_32(1102938689);
+emit_32(3274688496);
+emit_32(1118048263);
+emit_32(1103318955);
+emit_32(3274688496);
+emit_32(1118560256);
+emit_32(1103683754);
+emit_32(3274688496);
+emit_32(1119072263);
+emit_32(1103175090);
+emit_32(3274688496);
+emit_32(1119584256);
+emit_32(1102854593);
+emit_32(3274688496);
+emit_32(1120096263);
+emit_32(1102466567);
+emit_32(3274688496);
+emit_32(1120608322);
+emit_32(1101638507);
+emit_32(3274688496);
+emit_32(1121120289);
+emit_32(1101343542);
+emit_32(3274688496);
+emit_32(1121632256);
+emit_32(1100858629);
+emit_32(3274688496);
+emit_32(1122144223);
+emit_32(1099916326);
+emit_32(3274688496);
+emit_32(1122656322);
+emit_32(1099386952);
+emit_32(3274688496);
+emit_32(1123168289);
+emit_32(1098990538);
+emit_32(3274688496);
+emit_32(1123680256);
+emit_32(1097981860);
+emit_32(3274688496);
+emit_32(1124132848);
+emit_32(1095898759);
+emit_32(3274688496);
+emit_32(1124388897);
+emit_32(1092934435);
+emit_32(3274688496);
+emit_32(1124644880);
+emit_32(1090423368);
+emit_32(3274688496);
+emit_32(1124900864);
+emit_32(1089465599);
+emit_32(3274688496);
+emit_32(1125156848);
+emit_32(1090025916);
+emit_32(3274688496);
+emit_32(1125412897);
+emit_32(1088093013);
+emit_32(3274688496);
+emit_32(1125668880);
+emit_32(1086367518);
+emit_32(3274688496);
+emit_32(1125924864);
+emit_32(1083889418);
+emit_32(3274688496);
+emit_32(1126180848);
+emit_32(1076254464);
+emit_32(3274688496);
+emit_32(1126436897);
+emit_32(1068370850);
+emit_32(3274688496);
+emit_32(1126692880);
+emit_32(3216221248);
+emit_32(3274688496);
+emit_32(1126948864);
+emit_32(3228349497);
+emit_32(3274688496);
+emit_32(1127204848);
+emit_32(3232983910);
+emit_32(3274688496);
+emit_32(1127460897);
+emit_32(3238169558);
+emit_32(3274688496);
+emit_32(1127716880);
+emit_32(3239092054);
+emit_32(3274688496);
+emit_32(1127972864);
+emit_32(3241438976);
+emit_32(3274688496);
+emit_32(1128228848);
+emit_32(3243388489);
+emit_32(3274688496);
+emit_32(1128484897);
+emit_32(3245180191);
+emit_32(3274688496);
+emit_32(1128740880);
+emit_32(3246270710);
+emit_32(3274688496);
+emit_32(1128996864);
+emit_32(3247252229);
+emit_32(3274688496);
+emit_32(1129252848);
+emit_32(3247543262);
+emit_32(3274688496);
+emit_32(1129508897);
+emit_32(3246603737);
+emit_32(3274688496);
+emit_32(1129764880);
+emit_32(3246628379);
+emit_32(3274688496);
+emit_32(1130020864);
+emit_32(3246208949);
+emit_32(3274688496);
+emit_32(1130276848);
+emit_32(3243960277);
+emit_32(3274688496);
+emit_32(1130532897);
+emit_32(3243077167);
+emit_32(3274688496);
+emit_32(1130788880);
+emit_32(3241817407);
+emit_32(3274688496);
+emit_32(1131044864);
+emit_32(3238920664);
+emit_32(3274688496);
+emit_32(1131300848);
+emit_32(3235529538);
+emit_32(3274688496);
+emit_32(1131556897);
+emit_32(3228900545);
+emit_32(3274688496);
+emit_32(1131812880);
+emit_32(3222674310);
+emit_32(3274688496);
+emit_32(1132068864);
+emit_32(3208271280);
+emit_32(3274688496);
+emit_32(1081737216);
+emit_32(1107544270);
+emit_32(3274944545);
+emit_32(1090125824);
+emit_32(1107321186);
+emit_32(3274944545);
+emit_32(1094418484);
+emit_32(1106832838);
+emit_32(3274944545);
+emit_32(1098514432);
+emit_32(1105933107);
+emit_32(3274944545);
+emit_32(1100759066);
+emit_32(1104947236);
+emit_32(3274944545);
+emit_32(1102807040);
+emit_32(1104326217);
+emit_32(3274944545);
+emit_32(1104855066);
+emit_32(1103138967);
+emit_32(3274944545);
+emit_32(1106903040);
+emit_32(1102036441);
+emit_32(3274944545);
+emit_32(1108123661);
+emit_32(1101087742);
+emit_32(3274944545);
+emit_32(1109147648);
+emit_32(1100669465);
+emit_32(3274944545);
+emit_32(1110171661);
+emit_32(1100266183);
+emit_32(3274944545);
+emit_32(1111195648);
+emit_32(1100000526);
+emit_32(3274944545);
+emit_32(1112219661);
+emit_32(1099972529);
+emit_32(3274944545);
+emit_32(1113243648);
+emit_32(1099715681);
+emit_32(3274944545);
+emit_32(1114267661);
+emit_32(1099811521);
+emit_32(3274944545);
+emit_32(1115291648);
+emit_32(1100048079);
+emit_32(3274944545);
+emit_32(1116000263);
+emit_32(1100398461);
+emit_32(3274944545);
+emit_32(1116512256);
+emit_32(1101470735);
+emit_32(3274944545);
+emit_32(1117024263);
+emit_32(1102010332);
+emit_32(3274944545);
+emit_32(1117536256);
+emit_32(1102212969);
+emit_32(3274944545);
+emit_32(1118048263);
+emit_32(1102131547);
+emit_32(3274944545);
+emit_32(1118560256);
+emit_32(1102714503);
+emit_32(3274944545);
+emit_32(1119072263);
+emit_32(1102278033);
+emit_32(3274944545);
+emit_32(1119584256);
+emit_32(1101809792);
+emit_32(3274944545);
+emit_32(1120096263);
+emit_32(1100816004);
+emit_32(3274944545);
+emit_32(1120608322);
+emit_32(1100025011);
+emit_32(3274944545);
+emit_32(1121120289);
+emit_32(1099466277);
+emit_32(3274944545);
+emit_32(1121632256);
+emit_32(1098984771);
+emit_32(3274944545);
+emit_32(1122144223);
+emit_32(1098724776);
+emit_32(3274944545);
+emit_32(1122656322);
+emit_32(1097818073);
+emit_32(3274944545);
+emit_32(1123168289);
+emit_32(1098331770);
+emit_32(3274944545);
+emit_32(1123680256);
+emit_32(1097767007);
+emit_32(3274944545);
+emit_32(1124132848);
+emit_32(1095061891);
+emit_32(3274944545);
+emit_32(1124388897);
+emit_32(1092565693);
+emit_32(3274944545);
+emit_32(1124644880);
+emit_32(1089087839);
+emit_32(3274944545);
+emit_32(1124900864);
+emit_32(1088235430);
+emit_32(3274944545);
+emit_32(1125156848);
+emit_32(1089040317);
+emit_32(3274944545);
+emit_32(1125412897);
+emit_32(1087875957);
+emit_32(3274944545);
+emit_32(1125668880);
+emit_32(1086441128);
+emit_32(3274944545);
+emit_32(1125924864);
+emit_32(1085113966);
+emit_32(3274944545);
+emit_32(1126180848);
+emit_32(1081486648);
+emit_32(3274944545);
+emit_32(1126436897);
+emit_32(1075610470);
+emit_32(3274944545);
+emit_32(1126692880);
+emit_32(3191896348);
+emit_32(3274944545);
+emit_32(1126948864);
+emit_32(3225446032);
+emit_32(3274944545);
+emit_32(1127204848);
+emit_32(3232519202);
+emit_32(3274944545);
+emit_32(1127460897);
+emit_32(3234831920);
+emit_32(3274944545);
+emit_32(1127716880);
+emit_32(3239305806);
+emit_32(3274944545);
+emit_32(1127972864);
+emit_32(3241685497);
+emit_32(3274944545);
+emit_32(1128228848);
+emit_32(3242903208);
+emit_32(3274944545);
+emit_32(1128484897);
+emit_32(3244487397);
+emit_32(3274944545);
+emit_32(1128740880);
+emit_32(3245844673);
+emit_32(3274944545);
+emit_32(1128996864);
+emit_32(3246709067);
+emit_32(3274944545);
+emit_32(1129252848);
+emit_32(3246977188);
+emit_32(3274944545);
+emit_32(1129508897);
+emit_32(3246402830);
+emit_32(3274944545);
+emit_32(1129764880);
+emit_32(3246323034);
+emit_32(3274944545);
+emit_32(1130020864);
+emit_32(3244941011);
+emit_32(3274944545);
+emit_32(1130276848);
+emit_32(3243260877);
+emit_32(3274944545);
+emit_32(1130532897);
+emit_32(3242406707);
+emit_32(3274944545);
+emit_32(1130788880);
+emit_32(3239902383);
+emit_32(3274944545);
+emit_32(1131044864);
+emit_32(3235323031);
+emit_32(3274944545);
+emit_32(1131300848);
+emit_32(3229858692);
+emit_32(3274944545);
+emit_32(1131556897);
+emit_32(3221983215);
+emit_32(3274944545);
+emit_32(1131812880);
+emit_32(3204619249);
+emit_32(3274944545);
+emit_32(1132068864);
+emit_32(1069430331);
+emit_32(3274944545);
+emit_32(1081737216);
+emit_32(1106249096);
+emit_32(3275200528);
+emit_32(1090125824);
+emit_32(1106043942);
+emit_32(3275200528);
+emit_32(1094418484);
+emit_32(1105378410);
+emit_32(3275200528);
+emit_32(1098514432);
+emit_32(1104642467);
+emit_32(3275200528);
+emit_32(1100759066);
+emit_32(1104162010);
+emit_32(3275200528);
+emit_32(1102807040);
+emit_32(1103635153);
+emit_32(3275200528);
+emit_32(1104855066);
+emit_32(1102464995);
+emit_32(3275200528);
+emit_32(1106903040);
+emit_32(1101344958);
+emit_32(3275200528);
+emit_32(1108123661);
+emit_32(1100328835);
+emit_32(3275200528);
+emit_32(1109147648);
+emit_32(1099478755);
+emit_32(3275200528);
+emit_32(1110171661);
+emit_32(1099658219);
+emit_32(3275200528);
+emit_32(1111195648);
+emit_32(1099600285);
+emit_32(3275200528);
+emit_32(1112219661);
+emit_32(1099186464);
+emit_32(3275200528);
+emit_32(1113243648);
+emit_32(1099013135);
+emit_32(3275200528);
+emit_32(1114267661);
+emit_32(1099476763);
+emit_32(3275200528);
+emit_32(1115291648);
+emit_32(1099561540);
+emit_32(3275200528);
+emit_32(1116000263);
+emit_32(1099962673);
+emit_32(3275200528);
+emit_32(1116512256);
+emit_32(1100314837);
+emit_32(3275200528);
+emit_32(1117024263);
+emit_32(1100808192);
+emit_32(3275200528);
+emit_32(1117536256);
+emit_32(1100975545);
+emit_32(3275200528);
+emit_32(1118048263);
+emit_32(1100964744);
+emit_32(3275200528);
+emit_32(1118560256);
+emit_32(1100600364);
+emit_32(3275200528);
+emit_32(1119072263);
+emit_32(1100761426);
+emit_32(3275200528);
+emit_32(1119584256);
+emit_32(1100181144);
+emit_32(3275200528);
+emit_32(1120096263);
+emit_32(1098976749);
+emit_32(3275200528);
+emit_32(1120608322);
+emit_32(1097199518);
+emit_32(3275200528);
+emit_32(1121120289);
+emit_32(1096699347);
+emit_32(3275200528);
+emit_32(1121632256);
+emit_32(1096334128);
+emit_32(3275200528);
+emit_32(1122144223);
+emit_32(1096532414);
+emit_32(3275200528);
+emit_32(1122656322);
+emit_32(1096818675);
+emit_32(3275200528);
+emit_32(1123168289);
+emit_32(1097088578);
+emit_32(3275200528);
+emit_32(1123680256);
+emit_32(1096387291);
+emit_32(3275200528);
+emit_32(1124132848);
+emit_32(1094034810);
+emit_32(3275200528);
+emit_32(1124388897);
+emit_32(1090976691);
+emit_32(3275200528);
+emit_32(1124644880);
+emit_32(1088321497);
+emit_32(3275200528);
+emit_32(1124900864);
+emit_32(1088758712);
+emit_32(3275200528);
+emit_32(1125156848);
+emit_32(1087833868);
+emit_32(3275200528);
+emit_32(1125412897);
+emit_32(1084974107);
+emit_32(3275200528);
+emit_32(1125668880);
+emit_32(1084703805);
+emit_32(3275200528);
+emit_32(1125924864);
+emit_32(1084375328);
+emit_32(3275200528);
+emit_32(1126180848);
+emit_32(1079810898);
+emit_32(3275200528);
+emit_32(1126436897);
+emit_32(1075134836);
+emit_32(3275200528);
+emit_32(1126692880);
+emit_32(1055694338);
+emit_32(3275200528);
+emit_32(1126948864);
+emit_32(3222544916);
+emit_32(3275200528);
+emit_32(1127204848);
+emit_32(3231495477);
+emit_32(3275200528);
+emit_32(1127460897);
+emit_32(3235209219);
+emit_32(3275200528);
+emit_32(1127716880);
+emit_32(3239322940);
+emit_32(3275200528);
+emit_32(1127972864);
+emit_32(3240031389);
+emit_32(3275200528);
+emit_32(1128228848);
+emit_32(3242234426);
+emit_32(3275200528);
+emit_32(1128484897);
+emit_32(3243694988);
+emit_32(3275200528);
+emit_32(1128740880);
+emit_32(3244783934);
+emit_32(3275200528);
+emit_32(1128996864);
+emit_32(3245353415);
+emit_32(3275200528);
+emit_32(1129252848);
+emit_32(3245143910);
+emit_32(3275200528);
+emit_32(1129508897);
+emit_32(3243741859);
+emit_32(3275200528);
+emit_32(1129764880);
+emit_32(3244369117);
+emit_32(3275200528);
+emit_32(1130020864);
+emit_32(3244547480);
+emit_32(3275200528);
+emit_32(1130276848);
+emit_32(3242487867);
+emit_32(3275200528);
+emit_32(1130532897);
+emit_32(3241258307);
+emit_32(3275200528);
+emit_32(1130788880);
+emit_32(3238763409);
+emit_32(3275200528);
+emit_32(1131044864);
+emit_32(3232771615);
+emit_32(3275200528);
+emit_32(1131300848);
+emit_32(3224658636);
+emit_32(3275200528);
+emit_32(1131556897);
+emit_32(3205375013);
+emit_32(3275200528);
+emit_32(1131812880);
+emit_32(1065955266);
+emit_32(3275200528);
+emit_32(1132068864);
+emit_32(1078364786);
+emit_32(3275200528);
+emit_32(1081737216);
+emit_32(1105010622);
+emit_32(3275456512);
+emit_32(1090125824);
+emit_32(1104741191);
+emit_32(3275456512);
+emit_32(1094418484);
+emit_32(1104199864);
+emit_32(3275456512);
+emit_32(1098514432);
+emit_32(1103701895);
+emit_32(3275456512);
+emit_32(1100759066);
+emit_32(1103428898);
+emit_32(3275456512);
+emit_32(1102807040);
+emit_32(1102959031);
+emit_32(3275456512);
+emit_32(1104855066);
+emit_32(1102357044);
+emit_32(3275456512);
+emit_32(1106903040);
+emit_32(1100872784);
+emit_32(3275456512);
+emit_32(1108123661);
+emit_32(1099789972);
+emit_32(3275456512);
+emit_32(1109147648);
+emit_32(1099200043);
+emit_32(3275456512);
+emit_32(1110171661);
+emit_32(1098764622);
+emit_32(3275456512);
+emit_32(1111195648);
+emit_32(1098958399);
+emit_32(3275456512);
+emit_32(1112219661);
+emit_32(1098447743);
+emit_32(3275456512);
+emit_32(1113243648);
+emit_32(1098347184);
+emit_32(3275456512);
+emit_32(1114267661);
+emit_32(1099067032);
+emit_32(3275456512);
+emit_32(1115291648);
+emit_32(1099311664);
+emit_32(3275456512);
+emit_32(1116000263);
+emit_32(1099114584);
+emit_32(3275456512);
+emit_32(1116512256);
+emit_32(1099262119);
+emit_32(3275456512);
+emit_32(1117024263);
+emit_32(1099307522);
+emit_32(3275456512);
+emit_32(1117536256);
+emit_32(1099567150);
+emit_32(3275456512);
+emit_32(1118048263);
+emit_32(1099285555);
+emit_32(3275456512);
+emit_32(1118560256);
+emit_32(1099184367);
+emit_32(3275456512);
+emit_32(1119072263);
+emit_32(1099025665);
+emit_32(3275456512);
+emit_32(1119584256);
+emit_32(1097936771);
+emit_32(3275456512);
+emit_32(1120096263);
+emit_32(1097086062);
+emit_32(3275456512);
+emit_32(1120608322);
+emit_32(1095166329);
+emit_32(3275456512);
+emit_32(1121120289);
+emit_32(1093547013);
+emit_32(3275456512);
+emit_32(1121632256);
+emit_32(1094611632);
+emit_32(3275456512);
+emit_32(1122144223);
+emit_32(1095301176);
+emit_32(3275456512);
+emit_32(1122656322);
+emit_32(1096040002);
+emit_32(3275456512);
+emit_32(1123168289);
+emit_32(1096486905);
+emit_32(3275456512);
+emit_32(1123680256);
+emit_32(1095536371);
+emit_32(3275456512);
+emit_32(1124132848);
+emit_32(1093119718);
+emit_32(3275456512);
+emit_32(1124388897);
+emit_32(1091308366);
+emit_32(3275456512);
+emit_32(1124644880);
+emit_32(1088220394);
+emit_32(3275456512);
+emit_32(1124900864);
+emit_32(1088246482);
+emit_32(3275456512);
+emit_32(1125156848);
+emit_32(1087966198);
+emit_32(3275456512);
+emit_32(1125412897);
+emit_32(1084761016);
+emit_32(3275456512);
+emit_32(1125668880);
+emit_32(1082433638);
+emit_32(3275456512);
+emit_32(1125924864);
+emit_32(1080387489);
+emit_32(3275456512);
+emit_32(1126180848);
+emit_32(1080768877);
+emit_32(3275456512);
+emit_32(1126436897);
+emit_32(1072749536);
+emit_32(3275456512);
+emit_32(1126692880);
+emit_32(1066725424);
+emit_32(3275456512);
+emit_32(1126948864);
+emit_32(3211315758);
+emit_32(3275456512);
+emit_32(1127204848);
+emit_32(3229615254);
+emit_32(3275456512);
+emit_32(1127460897);
+emit_32(3234924069);
+emit_32(3275456512);
+emit_32(1127716880);
+emit_32(3238308600);
+emit_32(3275456512);
+emit_32(1127972864);
+emit_32(3239071816);
+emit_32(3275456512);
+emit_32(1128228848);
+emit_32(3240224516);
+emit_32(3275456512);
+emit_32(1128484897);
+emit_32(3241289869);
+emit_32(3275456512);
+emit_32(1128740880);
+emit_32(3242705866);
+emit_32(3275456512);
+emit_32(1128996864);
+emit_32(3242964969);
+emit_32(3275456512);
+emit_32(1129252848);
+emit_32(3243192091);
+emit_32(3275456512);
+emit_32(1129508897);
+emit_32(3242061516);
+emit_32(3275456512);
+emit_32(1129764880);
+emit_32(3242460709);
+emit_32(3275456512);
+emit_32(1130020864);
+emit_32(3243083563);
+emit_32(3275456512);
+emit_32(1130276848);
+emit_32(3240930627);
+emit_32(3275456512);
+emit_32(1130532897);
+emit_32(3238871108);
+emit_32(3275456512);
+emit_32(1130788880);
+emit_32(3236675631);
+emit_32(3275456512);
+emit_32(1131044864);
+emit_32(3232208551);
+emit_32(3275456512);
+emit_32(1131300848);
+emit_32(3223881892);
+emit_32(3275456512);
+emit_32(1131556897);
+emit_32(1056471794);
+emit_32(3275456512);
+emit_32(1131812880);
+emit_32(1077025041);
+emit_32(3275456512);
+emit_32(1132068864);
+emit_32(1081975788);
+emit_32(3275456512);
+emit_32(1081737216);
+emit_32(1103817710);
+emit_32(3275712496);
+emit_32(1090125824);
+emit_32(1103479177);
+emit_32(3275712496);
+emit_32(1094418484);
+emit_32(1103628337);
+emit_32(3275712496);
+emit_32(1098514432);
+emit_32(1103194908);
+emit_32(3275712496);
+emit_32(1100759066);
+emit_32(1102441087);
+emit_32(3275712496);
+emit_32(1102807040);
+emit_32(1101777548);
+emit_32(3275712496);
+emit_32(1104855066);
+emit_32(1101550322);
+emit_32(3275712496);
+emit_32(1106903040);
+emit_32(1100130340);
+emit_32(3275712496);
+emit_32(1108123661);
+emit_32(1099405250);
+emit_32(3275712496);
+emit_32(1109147648);
+emit_32(1098058092);
+emit_32(3275712496);
+emit_32(1110171661);
+emit_32(1097423074);
+emit_32(3275712496);
+emit_32(1111195648);
+emit_32(1097055863);
+emit_32(3275712496);
+emit_32(1112219661);
+emit_32(1096882743);
+emit_32(3275712496);
+emit_32(1113243648);
+emit_32(1098289303);
+emit_32(3275712496);
+emit_32(1114267661);
+emit_32(1097937610);
+emit_32(3275712496);
+emit_32(1115291648);
+emit_32(1097533279);
+emit_32(3275712496);
+emit_32(1116000263);
+emit_32(1097752851);
+emit_32(3275712496);
+emit_32(1116512256);
+emit_32(1097273547);
+emit_32(3275712496);
+emit_32(1117024263);
+emit_32(1097170787);
+emit_32(3275712496);
+emit_32(1117536256);
+emit_32(1096374708);
+emit_32(3275712496);
+emit_32(1118048263);
+emit_32(1096180197);
+emit_32(3275712496);
+emit_32(1118560256);
+emit_32(1097218602);
+emit_32(3275712496);
+emit_32(1119072263);
+emit_32(1096138883);
+emit_32(3275712496);
+emit_32(1119584256);
+emit_32(1096076912);
+emit_32(3275712496);
+emit_32(1120096263);
+emit_32(1094562034);
+emit_32(3275712496);
+emit_32(1120608322);
+emit_32(1092095962);
+emit_32(3275712496);
+emit_32(1121120289);
+emit_32(1091662502);
+emit_32(3275712496);
+emit_32(1121632256);
+emit_32(1092889556);
+emit_32(3275712496);
+emit_32(1122144223);
+emit_32(1094008177);
+emit_32(3275712496);
+emit_32(1122656322);
+emit_32(1094597791);
+emit_32(3275712496);
+emit_32(1123168289);
+emit_32(1094669828);
+emit_32(3275712496);
+emit_32(1123680256);
+emit_32(1093668333);
+emit_32(3275712496);
+emit_32(1124132848);
+emit_32(1092690012);
+emit_32(3275712496);
+emit_32(1124388897);
+emit_32(1091404793);
+emit_32(3275712496);
+emit_32(1124644880);
+emit_32(1089616677);
+emit_32(3275712496);
+emit_32(1124900864);
+emit_32(1087718650);
+emit_32(3275712496);
+emit_32(1125156848);
+emit_32(1085433635);
+emit_32(3275712496);
+emit_32(1125412897);
+emit_32(1083051984);
+emit_32(3275712496);
+emit_32(1125668880);
+emit_32(1080094894);
+emit_32(3275712496);
+emit_32(1125924864);
+emit_32(1077582632);
+emit_32(3275712496);
+emit_32(1126180848);
+emit_32(1079746432);
+emit_32(3275712496);
+emit_32(1126436897);
+emit_32(1073545866);
+emit_32(3275712496);
+emit_32(1126692880);
+emit_32(1068480405);
+emit_32(3275712496);
+emit_32(1126948864);
+emit_32(3205219354);
+emit_32(3275712496);
+emit_32(1127204848);
+emit_32(3228713018);
+emit_32(3275712496);
+emit_32(1127460897);
+emit_32(3234007257);
+emit_32(3275712496);
+emit_32(1127716880);
+emit_32(3234765252);
+emit_32(3275712496);
+emit_32(1127972864);
+emit_32(3236479652);
+emit_32(3275712496);
+emit_32(1128228848);
+emit_32(3239043033);
+emit_32(3275712496);
+emit_32(1128484897);
+emit_32(3239994091);
+emit_32(3275712496);
+emit_32(1128740880);
+emit_32(3241107312);
+emit_32(3275712496);
+emit_32(1128996864);
+emit_32(3240979281);
+emit_32(3275712496);
+emit_32(1129252848);
+emit_32(3240651496);
+emit_32(3275712496);
+emit_32(1129508897);
+emit_32(3240242971);
+emit_32(3275712496);
+emit_32(1129764880);
+emit_32(3240761491);
+emit_32(3275712496);
+emit_32(1130020864);
+emit_32(3240982007);
+emit_32(3275712496);
+emit_32(1130276848);
+emit_32(3239091351);
+emit_32(3275712496);
+emit_32(1130532897);
+emit_32(3236735400);
+emit_32(3275712496);
+emit_32(1130788880);
+emit_32(3231377575);
+emit_32(3275712496);
+emit_32(1131044864);
+emit_32(3227422808);
+emit_32(3275712496);
+emit_32(1131300848);
+emit_32(3218146098);
+emit_32(3275712496);
+emit_32(1131556897);
+emit_32(1069112487);
+emit_32(3275712496);
+emit_32(1131812880);
+emit_32(1077648441);
+emit_32(3275712496);
+emit_32(1132068864);
+emit_32(1082214129);
+emit_32(3275712496);
+emit_32(1081737216);
+emit_32(1102629726);
+emit_32(3275968545);
+emit_32(1090125824);
+emit_32(1102698722);
+emit_32(3275968545);
+emit_32(1094418484);
+emit_32(1102802741);
+emit_32(3275968545);
+emit_32(1098514432);
+emit_32(1102285373);
+emit_32(3275968545);
+emit_32(1100759066);
+emit_32(1101786251);
+emit_32(3275968545);
+emit_32(1102807040);
+emit_32(1100824812);
+emit_32(3275968545);
+emit_32(1104855066);
+emit_32(1100025640);
+emit_32(3275968545);
+emit_32(1106903040);
+emit_32(1099634940);
+emit_32(3275968545);
+emit_32(1108123661);
+emit_32(1099046584);
+emit_32(3275968545);
+emit_32(1109147648);
+emit_32(1096636223);
+emit_32(3275968545);
+emit_32(1110171661);
+emit_32(1095513303);
+emit_32(3275968545);
+emit_32(1111195648);
+emit_32(1095867407);
+emit_32(3275968545);
+emit_32(1112219661);
+emit_32(1096126929);
+emit_32(3275968545);
+emit_32(1113243648);
+emit_32(1096604870);
+emit_32(3275968545);
+emit_32(1114267661);
+emit_32(1095827037);
+emit_32(3275968545);
+emit_32(1115291648);
+emit_32(1095170838);
+emit_32(3275968545);
+emit_32(1116000263);
+emit_32(1095497679);
+emit_32(3275968545);
+emit_32(1116512256);
+emit_32(1095025715);
+emit_32(3275968545);
+emit_32(1117024263);
+emit_32(1094083884);
+emit_32(3275968545);
+emit_32(1117536256);
+emit_32(1094884996);
+emit_32(3275968545);
+emit_32(1118048263);
+emit_32(1094938054);
+emit_32(3275968545);
+emit_32(1118560256);
+emit_32(1094814322);
+emit_32(3275968545);
+emit_32(1119072263);
+emit_32(1094028414);
+emit_32(3275968545);
+emit_32(1119584256);
+emit_32(1093868087);
+emit_32(3275968545);
+emit_32(1120096263);
+emit_32(1091898725);
+emit_32(3275968545);
+emit_32(1120608322);
+emit_32(1091588902);
+emit_32(3275968545);
+emit_32(1121120289);
+emit_32(1090929599);
+emit_32(3275968545);
+emit_32(1121632256);
+emit_32(1091279268);
+emit_32(3275968545);
+emit_32(1122144223);
+emit_32(1091962195);
+emit_32(3275968545);
+emit_32(1122656322);
+emit_32(1092164916);
+emit_32(3275968545);
+emit_32(1123168289);
+emit_32(1092135976);
+emit_32(3275968545);
+emit_32(1123680256);
+emit_32(1091891196);
+emit_32(3275968545);
+emit_32(1124132848);
+emit_32(1091591995);
+emit_32(3275968545);
+emit_32(1124388897);
+emit_32(1091090063);
+emit_32(3275968545);
+emit_32(1124644880);
+emit_32(1090340509);
+emit_32(3275968545);
+emit_32(1124900864);
+emit_32(1086101389);
+emit_32(3275968545);
+emit_32(1125156848);
+emit_32(1083757927);
+emit_32(3275968545);
+emit_32(1125412897);
+emit_32(1078075547);
+emit_32(3275968545);
+emit_32(1125668880);
+emit_32(1076426137);
+emit_32(3275968545);
+emit_32(1125924864);
+emit_32(1072504840);
+emit_32(3275968545);
+emit_32(1126180848);
+emit_32(1076195660);
+emit_32(3275968545);
+emit_32(1126436897);
+emit_32(1072621609);
+emit_32(3275968545);
+emit_32(1126692880);
+emit_32(1056034915);
+emit_32(3275968545);
+emit_32(1126948864);
+emit_32(3209808342);
+emit_32(3275968545);
+emit_32(1127204848);
+emit_32(3226594391);
+emit_32(3275968545);
+emit_32(1127460897);
+emit_32(3229765557);
+emit_32(3275968545);
+emit_32(1127716880);
+emit_32(3232195653);
+emit_32(3275968545);
+emit_32(1127972864);
+emit_32(3233670937);
+emit_32(3275968545);
+emit_32(1128228848);
+emit_32(3236746137);
+emit_32(3275968545);
+emit_32(1128484897);
+emit_32(3239602763);
+emit_32(3275968545);
+emit_32(1128740880);
+emit_32(3239120397);
+emit_32(3275968545);
+emit_32(1128996864);
+emit_32(3238680404);
+emit_32(3275968545);
+emit_32(1129252848);
+emit_32(3238748498);
+emit_32(3275968545);
+emit_32(1129508897);
+emit_32(3237309495);
+emit_32(3275968545);
+emit_32(1129764880);
+emit_32(3238233637);
+emit_32(3275968545);
+emit_32(1130020864);
+emit_32(3238814642);
+emit_32(3275968545);
+emit_32(1130276848);
+emit_32(3237583887);
+emit_32(3275968545);
+emit_32(1130532897);
+emit_32(3232326054);
+emit_32(3275968545);
+emit_32(1130788880);
+emit_32(3225982694);
+emit_32(3275968545);
+emit_32(1131044864);
+emit_32(3216861550);
+emit_32(3275968545);
+emit_32(1131300848);
+emit_32(1026734803);
+emit_32(3275968545);
+emit_32(1131556897);
+emit_32(1070114842);
+emit_32(3275968545);
+emit_32(1131812880);
+emit_32(1079071526);
+emit_32(3275968545);
+emit_32(1132068864);
+emit_32(1085031464);
+emit_32(3275968545);
+emit_32(1081737216);
+emit_32(1101834591);
+emit_32(3276224528);
+emit_32(1090125824);
+emit_32(1101837579);
+emit_32(3276224528);
+emit_32(1094418484);
+emit_32(1102082264);
+emit_32(3276224528);
+emit_32(1098514432);
+emit_32(1101628441);
+emit_32(3276224528);
+emit_32(1100759066);
+emit_32(1100985349);
+emit_32(3276224528);
+emit_32(1102807040);
+emit_32(1100055367);
+emit_32(3276224528);
+emit_32(1104855066);
+emit_32(1099637142);
+emit_32(3276224528);
+emit_32(1106903040);
+emit_32(1098680317);
+emit_32(3276224528);
+emit_32(1108123661);
+emit_32(1096761947);
+emit_32(3276224528);
+emit_32(1109147648);
+emit_32(1094480980);
+emit_32(3276224528);
+emit_32(1110171661);
+emit_32(1095392087);
+emit_32(3276224528);
+emit_32(1111195648);
+emit_32(1094890029);
+emit_32(3276224528);
+emit_32(1112219661);
+emit_32(1094984506);
+emit_32(3276224528);
+emit_32(1113243648);
+emit_32(1094746898);
+emit_32(3276224528);
+emit_32(1114267661);
+emit_32(1095240253);
+emit_32(3276224528);
+emit_32(1115291648);
+emit_32(1094944765);
+emit_32(3276224528);
+emit_32(1116000263);
+emit_32(1093070435);
+emit_32(3276224528);
+emit_32(1116512256);
+emit_32(1092835659);
+emit_32(3276224528);
+emit_32(1117024263);
+emit_32(1092160439);
+emit_32(3276224528);
+emit_32(1117536256);
+emit_32(1093144779);
+emit_32(3276224528);
+emit_32(1118048263);
+emit_32(1093574171);
+emit_32(3276224528);
+emit_32(1118560256);
+emit_32(1093277109);
+emit_32(3276224528);
+emit_32(1119072263);
+emit_32(1093819957);
+emit_32(3276224528);
+emit_32(1119584256);
+emit_32(1092843628);
+emit_32(3276224528);
+emit_32(1120096263);
+emit_32(1091116372);
+emit_32(3276224528);
+emit_32(1120608322);
+emit_32(1091376859);
+emit_32(3276224528);
+emit_32(1121120289);
+emit_32(1090364648);
+emit_32(3276224528);
+emit_32(1121632256);
+emit_32(1090493874);
+emit_32(3276224528);
+emit_32(1122144223);
+emit_32(1090596026);
+emit_32(3276224528);
+emit_32(1122656322);
+emit_32(1090953811);
+emit_32(3276224528);
+emit_32(1123168289);
+emit_32(1090983737);
+emit_32(3276224528);
+emit_32(1123680256);
+emit_32(1091497519);
+emit_32(3276224528);
+emit_32(1124132848);
+emit_32(1090542549);
+emit_32(3276224528);
+emit_32(1124388897);
+emit_32(1090078156);
+emit_32(3276224528);
+emit_32(1124644880);
+emit_32(1088934054);
+emit_32(3276224528);
+emit_32(1124900864);
+emit_32(1087697720);
+emit_32(3276224528);
+emit_32(1125156848);
+emit_32(1085563428);
+emit_32(3276224528);
+emit_32(1125412897);
+emit_32(1080952084);
+emit_32(3276224528);
+emit_32(1125668880);
+emit_32(1073321471);
+emit_32(3276224528);
+emit_32(1125924864);
+emit_32(1070202670);
+emit_32(3276224528);
+emit_32(1126180848);
+emit_32(1076022141);
+emit_32(3276224528);
+emit_32(1126436897);
+emit_32(1074767541);
+emit_32(3276224528);
+emit_32(1126692880);
+emit_32(1043406403);
+emit_32(3276224528);
+emit_32(1126948864);
+emit_32(3214856505);
+emit_32(3276224528);
+emit_32(1127204848);
+emit_32(3221624644);
+emit_32(3276224528);
+emit_32(1127460897);
+emit_32(3223744907);
+emit_32(3276224528);
+emit_32(1127716880);
+emit_32(3226922931);
+emit_32(3276224528);
+emit_32(1127972864);
+emit_32(3231769868);
+emit_32(3276224528);
+emit_32(1128228848);
+emit_32(3235400940);
+emit_32(3276224528);
+emit_32(1128484897);
+emit_32(3237712778);
+emit_32(3276224528);
+emit_32(1128740880);
+emit_32(3237178570);
+emit_32(3276224528);
+emit_32(1128996864);
+emit_32(3236152161);
+emit_32(3276224528);
+emit_32(1129252848);
+emit_32(3236365358);
+emit_32(3276224528);
+emit_32(1129508897);
+emit_32(3234550776);
+emit_32(3276224528);
+emit_32(1129764880);
+emit_32(3234356705);
+emit_32(3276224528);
+emit_32(1130020864);
+emit_32(3236727662);
+emit_32(3276224528);
+emit_32(1130276848);
+emit_32(3234020867);
+emit_32(3276224528);
+emit_32(1130532897);
+emit_32(3229942851);
+emit_32(3276224528);
+emit_32(1130788880);
+emit_32(3218905099);
+emit_32(3276224528);
+emit_32(1131044864);
+emit_32(1046590114);
+emit_32(3276224528);
+emit_32(1131300848);
+emit_32(1071351155);
+emit_32(3276224528);
+emit_32(1131556897);
+emit_32(1075089706);
+emit_32(3276224528);
+emit_32(1131812880);
+emit_32(1081837670);
+emit_32(3276224528);
+emit_32(1132068864);
+emit_32(1088418344);
+emit_32(3276224528);
+emit_32(1081737216);
+emit_32(1101171471);
+emit_32(3276480512);
+emit_32(1090125824);
+emit_32(1100482504);
+emit_32(3276480512);
+emit_32(1094418484);
+emit_32(1100941623);
+emit_32(3276480512);
+emit_32(1098514432);
+emit_32(1100408685);
+emit_32(3276480512);
+emit_32(1100759066);
+emit_32(1099563690);
+emit_32(3276480512);
+emit_32(1102807040);
+emit_32(1099315859);
+emit_32(3276480512);
+emit_32(1104855066);
+emit_32(1099149083);
+emit_32(3276480512);
+emit_32(1106903040);
+emit_32(1096909482);
+emit_32(3276480512);
+emit_32(1108123661);
+emit_32(1095417463);
+emit_32(3276480512);
+emit_32(1109147648);
+emit_32(1095014180);
+emit_32(3276480512);
+emit_32(1110171661);
+emit_32(1094740188);
+emit_32(3276480512);
+emit_32(1111195648);
+emit_32(1094116495);
+emit_32(3276480512);
+emit_32(1112219661);
+emit_32(1094245994);
+emit_32(3276480512);
+emit_32(1113243648);
+emit_32(1093480953);
+emit_32(3276480512);
+emit_32(1114267661);
+emit_32(1095278002);
+emit_32(3276480512);
+emit_32(1115291648);
+emit_32(1094897264);
+emit_32(3276480512);
+emit_32(1116000263);
+emit_32(1092706055);
+emit_32(3276480512);
+emit_32(1116512256);
+emit_32(1091291358);
+emit_32(3276480512);
+emit_32(1117024263);
+emit_32(1090889429);
+emit_32(3276480512);
+emit_32(1117536256);
+emit_32(1091305986);
+emit_32(3276480512);
+emit_32(1118048263);
+emit_32(1092298620);
+emit_32(3276480512);
+emit_32(1118560256);
+emit_32(1092551684);
+emit_32(3276480512);
+emit_32(1119072263);
+emit_32(1092611295);
+emit_32(3276480512);
+emit_32(1119584256);
+emit_32(1091871042);
+emit_32(3276480512);
+emit_32(1120096263);
+emit_32(1090718773);
+emit_32(3276480512);
+emit_32(1120608322);
+emit_32(1090155373);
+emit_32(3276480512);
+emit_32(1121120289);
+emit_32(1087795930);
+emit_32(3276480512);
+emit_32(1121632256);
+emit_32(1087063877);
+emit_32(3276480512);
+emit_32(1122144223);
+emit_32(1088019466);
+emit_32(3276480512);
+emit_32(1122656322);
+emit_32(1090277322);
+emit_32(3276480512);
+emit_32(1123168289);
+emit_32(1091326066);
+emit_32(3276480512);
+emit_32(1123680256);
+emit_32(1091923220);
+emit_32(3276480512);
+emit_32(1124132848);
+emit_32(1091702285);
+emit_32(3276480512);
+emit_32(1124388897);
+emit_32(1089725142);
+emit_32(3276480512);
+emit_32(1124644880);
+emit_32(1087013462);
+emit_32(3276480512);
+emit_32(1124900864);
+emit_32(1086960152);
+emit_32(3276480512);
+emit_32(1125156848);
+emit_32(1085873156);
+emit_32(3276480512);
+emit_32(1125412897);
+emit_32(1082634587);
+emit_32(3276480512);
+emit_32(1125668880);
+emit_32(1076934109);
+emit_32(3276480512);
+emit_32(1125924864);
+emit_32(1073398227);
+emit_32(3276480512);
+emit_32(1126180848);
+emit_32(1074881249);
+emit_32(3276480512);
+emit_32(1126436897);
+emit_32(1074681558);
+emit_32(3276480512);
+emit_32(1126692880);
+emit_32(1066383253);
+emit_32(3276480512);
+emit_32(1126948864);
+emit_32(3190627924);
+emit_32(3276480512);
+emit_32(1127204848);
+emit_32(3210951893);
+emit_32(3276480512);
+emit_32(1127460897);
+emit_32(3211101009);
+emit_32(3276480512);
+emit_32(1127716880);
+emit_32(3222970470);
+emit_32(3276480512);
+emit_32(1127972864);
+emit_32(3228079929);
+emit_32(3276480512);
+emit_32(1128228848);
+emit_32(3233825706);
+emit_32(3276480512);
+emit_32(1128484897);
+emit_32(3233542381);
+emit_32(3276480512);
+emit_32(1128740880);
+emit_32(3232104805);
+emit_32(3276480512);
+emit_32(1128996864);
+emit_32(3230112405);
+emit_32(3276480512);
+emit_32(1129252848);
+emit_32(3231152970);
+emit_32(3276480512);
+emit_32(1129508897);
+emit_32(3231464292);
+emit_32(3276480512);
+emit_32(1129764880);
+emit_32(3231339491);
+emit_32(3276480512);
+emit_32(1130020864);
+emit_32(3231844149);
+emit_32(3276480512);
+emit_32(1130276848);
+emit_32(3231999318);
+emit_32(3276480512);
+emit_32(1130532897);
+emit_32(3224338359);
+emit_32(3276480512);
+emit_32(1130788880);
+emit_32(1034571239);
+emit_32(3276480512);
+emit_32(1131044864);
+emit_32(1073783180);
+emit_32(3276480512);
+emit_32(1131300848);
+emit_32(1077514055);
+emit_32(3276480512);
+emit_32(1131556897);
+emit_32(1081268167);
+emit_32(3276480512);
+emit_32(1131812880);
+emit_32(1085146577);
+emit_32(3276480512);
+emit_32(1132068864);
+emit_32(1091014199);
+emit_32(3276480512);
+emit_32(1081737216);
+emit_32(1100121322);
+emit_32(3276736496);
+emit_32(1090125824);
+emit_32(1099396180);
+emit_32(3276736496);
+emit_32(1094418484);
+emit_32(1099281098);
+emit_32(3276736496);
+emit_32(1098514432);
+emit_32(1098942251);
+emit_32(3276736496);
+emit_32(1100759066);
+emit_32(1098739981);
+emit_32(3276736496);
+emit_32(1102807040);
+emit_32(1097837366);
+emit_32(3276736496);
+emit_32(1104855066);
+emit_32(1096300469);
+emit_32(3276736496);
+emit_32(1106903040);
+emit_32(1095044694);
+emit_32(3276736496);
+emit_32(1108123661);
+emit_32(1095162764);
+emit_32(3276736496);
+emit_32(1109147648);
+emit_32(1095334730);
+emit_32(3276736496);
+emit_32(1110171661);
+emit_32(1095152697);
+emit_32(3276736496);
+emit_32(1111195648);
+emit_32(1094407894);
+emit_32(3276736496);
+emit_32(1112219661);
+emit_32(1093563371);
+emit_32(3276736496);
+emit_32(1113243648);
+emit_32(1092844257);
+emit_32(3276736496);
+emit_32(1114267661);
+emit_32(1093382386);
+emit_32(3276736496);
+emit_32(1115291648);
+emit_32(1092541009);
+emit_32(3276736496);
+emit_32(1116000263);
+emit_32(1091687762);
+emit_32(3276736496);
+emit_32(1116512256);
+emit_32(1088040290);
+emit_32(3276736496);
+emit_32(1117024263);
+emit_32(1088119038);
+emit_32(3276736496);
+emit_32(1117536256);
+emit_32(1088383007);
+emit_32(3276736496);
+emit_32(1118048263);
+emit_32(1090949575);
+emit_32(3276736496);
+emit_32(1118560256);
+emit_32(1091368575);
+emit_32(3276736496);
+emit_32(1119072263);
+emit_32(1091839008);
+emit_32(3276736496);
+emit_32(1119584256);
+emit_32(1091040497);
+emit_32(3276736496);
+emit_32(1120096263);
+emit_32(1088659118);
+emit_32(3276736496);
+emit_32(1120608322);
+emit_32(1086563119);
+emit_32(3276736496);
+emit_32(1121120289);
+emit_32(1083266480);
+emit_32(3276736496);
+emit_32(1121632256);
+emit_32(1082063323);
+emit_32(3276736496);
+emit_32(1122144223);
+emit_32(1086818322);
+emit_32(3276736496);
+emit_32(1122656322);
+emit_32(1089302105);
+emit_32(3276736496);
+emit_32(1123168289);
+emit_32(1090938523);
+emit_32(3276736496);
+emit_32(1123680256);
+emit_32(1091787911);
+emit_32(3276736496);
+emit_32(1124132848);
+emit_32(1091673658);
+emit_32(3276736496);
+emit_32(1124388897);
+emit_32(1091250789);
+emit_32(3276736496);
+emit_32(1124644880);
+emit_32(1088596245);
+emit_32(3276736496);
+emit_32(1124900864);
+emit_32(1086620707);
+emit_32(3276736496);
+emit_32(1125156848);
+emit_32(1083915591);
+emit_32(3276736496);
+emit_32(1125412897);
+emit_32(1083242195);
+emit_32(3276736496);
+emit_32(1125668880);
+emit_32(1083662443);
+emit_32(3276736496);
+emit_32(1125924864);
+emit_32(1080051525);
+emit_32(3276736496);
+emit_32(1126180848);
+emit_32(1078023915);
+emit_32(3276736496);
+emit_32(1126436897);
+emit_32(1076481418);
+emit_32(3276736496);
+emit_32(1126692880);
+emit_32(1073065367);
+emit_32(3276736496);
+emit_32(1126948864);
+emit_32(1068007204);
+emit_32(3276736496);
+emit_32(1127204848);
+emit_32(1059175291);
+emit_32(3276736496);
+emit_32(1127460897);
+emit_32(3191698780);
+emit_32(3276736496);
+emit_32(1127716880);
+emit_32(3213224166);
+emit_32(3276736496);
+emit_32(1127972864);
+emit_32(3223725026);
+emit_32(3276736496);
+emit_32(1128228848);
+emit_32(3228029430);
+emit_32(3276736496);
+emit_32(1128484897);
+emit_32(3226148159);
+emit_32(3276736496);
+emit_32(1128740880);
+emit_32(3225760353);
+emit_32(3276736496);
+emit_32(1128996864);
+emit_32(3222121585);
+emit_32(3276736496);
+emit_32(1129252848);
+emit_32(3225539356);
+emit_32(3276736496);
+emit_32(1129508897);
+emit_32(3229882998);
+emit_32(3276736496);
+emit_32(1129764880);
+emit_32(3227190108);
+emit_32(3276736496);
+emit_32(1130020864);
+emit_32(3228912960);
+emit_32(3276736496);
+emit_32(1130276848);
+emit_32(3228921307);
+emit_32(3276736496);
+emit_32(1130532897);
+emit_32(3219664184);
+emit_32(3276736496);
+emit_32(1130788880);
+emit_32(1065871800);
+emit_32(3276736496);
+emit_32(1131044864);
+emit_32(1077962552);
+emit_32(3276736496);
+emit_32(1131300848);
+emit_32(1082028972);
+emit_32(3276736496);
+emit_32(1131556897);
+emit_32(1084764119);
+emit_32(3276736496);
+emit_32(1131812880);
+emit_32(1086553745);
+emit_32(3276736496);
+emit_32(1132068864);
+emit_32(1092505651);
+emit_32(3276736496);
+emit_32(1081737216);
+emit_32(1099020213);
+emit_32(3276992545);
+emit_32(1090125824);
+emit_32(1098714186);
+emit_32(3276992545);
+emit_32(1094418484);
+emit_32(1097828034);
+emit_32(3276992545);
+emit_32(1098514432);
+emit_32(1097529085);
+emit_32(3276992545);
+emit_32(1100759066);
+emit_32(1097159252);
+emit_32(3276992545);
+emit_32(1102807040);
+emit_32(1096861667);
+emit_32(3276992545);
+emit_32(1104855066);
+emit_32(1094929036);
+emit_32(3276992545);
+emit_32(1106903040);
+emit_32(1095502502);
+emit_32(3276992545);
+emit_32(1108123661);
+emit_32(1095915851);
+emit_32(3276992545);
+emit_32(1109147648);
+emit_32(1095718928);
+emit_32(3276992545);
+emit_32(1110171661);
+emit_32(1095125539);
+emit_32(3276992545);
+emit_32(1111195648);
+emit_32(1094669094);
+emit_32(3276992545);
+emit_32(1112219661);
+emit_32(1093180431);
+emit_32(3276992545);
+emit_32(1113243648);
+emit_32(1091863545);
+emit_32(3276992545);
+emit_32(1114267661);
+emit_32(1091778558);
+emit_32(3276992545);
+emit_32(1115291648);
+emit_32(1091298751);
+emit_32(3276992545);
+emit_32(1116000263);
+emit_32(1089644695);
+emit_32(3276992545);
+emit_32(1116512256);
+emit_32(1086301730);
+emit_32(3276992545);
+emit_32(1117024263);
+emit_32(1086163570);
+emit_32(3276992545);
+emit_32(1117536256);
+emit_32(1086958244);
+emit_32(3276992545);
+emit_32(1118048263);
+emit_32(1089172396);
+emit_32(3276992545);
+emit_32(1118560256);
+emit_32(1089779354);
+emit_32(3276992545);
+emit_32(1119072263);
+emit_32(1090296616);
+emit_32(3276992545);
+emit_32(1119584256);
+emit_32(1089775033);
+emit_32(3276992545);
+emit_32(1120096263);
+emit_32(1085622735);
+emit_32(3276992545);
+emit_32(1120608322);
+emit_32(1082413128);
+emit_32(3276992545);
+emit_32(1121120289);
+emit_32(1076491106);
+emit_32(3276992545);
+emit_32(1121632256);
+emit_32(1082562760);
+emit_32(3276992545);
+emit_32(1122144223);
+emit_32(1085964047);
+emit_32(3276992545);
+emit_32(1122656322);
+emit_32(1088268397);
+emit_32(3276992545);
+emit_32(1123168289);
+emit_32(1091065421);
+emit_32(3276992545);
+emit_32(1123680256);
+emit_32(1091881444);
+emit_32(3276992545);
+emit_32(1124132848);
+emit_32(1092768655);
+emit_32(3276992545);
+emit_32(1124388897);
+emit_32(1091984761);
+emit_32(3276992545);
+emit_32(1124644880);
+emit_32(1091281397);
+emit_32(3276992545);
+emit_32(1124900864);
+emit_32(1090331513);
+emit_32(3276992545);
+emit_32(1125156848);
+emit_32(1084916184);
+emit_32(3276992545);
+emit_32(1125412897);
+emit_32(1084859729);
+emit_32(3276992545);
+emit_32(1125668880);
+emit_32(1084191807);
+emit_32(3276992545);
+emit_32(1125924864);
+emit_32(1084800757);
+emit_32(3276992545);
+emit_32(1126180848);
+emit_32(1082243678);
+emit_32(3276992545);
+emit_32(1126436897);
+emit_32(1082662102);
+emit_32(3276992545);
+emit_32(1126692880);
+emit_32(1080485887);
+emit_32(3276992545);
+emit_32(1126948864);
+emit_32(1077722135);
+emit_32(3276992545);
+emit_32(1127204848);
+emit_32(1073495534);
+emit_32(3276992545);
+emit_32(1127460897);
+emit_32(1067137892);
+emit_32(3276992545);
+emit_32(1127716880);
+emit_32(3201755546);
+emit_32(3276992545);
+emit_32(1127972864);
+emit_32(3219314631);
+emit_32(3276992545);
+emit_32(1128228848);
+emit_32(3220786161);
+emit_32(3276992545);
+emit_32(1128484897);
+emit_32(3215535647);
+emit_32(3276992545);
+emit_32(1128740880);
+emit_32(3219082434);
+emit_32(3276992545);
+emit_32(1128996864);
+emit_32(3207719209);
+emit_32(3276992545);
+emit_32(1129252848);
+emit_32(3219319329);
+emit_32(3276992545);
+emit_32(1129508897);
+emit_32(3222885200);
+emit_32(3276992545);
+emit_32(1129764880);
+emit_32(3223784878);
+emit_32(3276992545);
+emit_32(1130020864);
+emit_32(3226090865);
+emit_32(3276992545);
+emit_32(1130276848);
+emit_32(3223180269);
+emit_32(3276992545);
+emit_32(1130532897);
+emit_32(3210523051);
+emit_32(3276992545);
+emit_32(1130788880);
+emit_32(1069117184);
+emit_32(3276992545);
+emit_32(1131044864);
+emit_32(1079791646);
+emit_32(3276992545);
+emit_32(1131300848);
+emit_32(1085107318);
+emit_32(3276992545);
+emit_32(1131556897);
+emit_32(1086920663);
+emit_32(3276992545);
+emit_32(1131812880);
+emit_32(1088946029);
+emit_32(3276992545);
+emit_32(1132068864);
+emit_32(1093373998);
+emit_32(3276992545);
+emit_32(1081737216);
+emit_32(1097108292);
+emit_32(3277248528);
+emit_32(1090125824);
+emit_32(1096843002);
+emit_32(3277248528);
+emit_32(1094418484);
+emit_32(1095568248);
+emit_32(3277248528);
+emit_32(1098514432);
+emit_32(1095018899);
+emit_32(3277248528);
+emit_32(1100759066);
+emit_32(1094782235);
+emit_32(3277248528);
+emit_32(1102807040);
+emit_32(1095180170);
+emit_32(3277248528);
+emit_32(1104855066);
+emit_32(1095450493);
+emit_32(3277248528);
+emit_32(1106903040);
+emit_32(1095069965);
+emit_32(3277248528);
+emit_32(1108123661);
+emit_32(1095994599);
+emit_32(3277248528);
+emit_32(1109147648);
+emit_32(1095664822);
+emit_32(3277248528);
+emit_32(1110171661);
+emit_32(1095335569);
+emit_32(3277248528);
+emit_32(1111195648);
+emit_32(1094159381);
+emit_32(3277248528);
+emit_32(1112219661);
+emit_32(1093190812);
+emit_32(3277248528);
+emit_32(1113243648);
+emit_32(1092024942);
+emit_32(3277248528);
+emit_32(1114267661);
+emit_32(1092719162);
+emit_32(3277248528);
+emit_32(1115291648);
+emit_32(1091950724);
+emit_32(3277248528);
+emit_32(1116000263);
+emit_32(1090594496);
+emit_32(3277248528);
+emit_32(1116512256);
+emit_32(1087264889);
+emit_32(3277248528);
+emit_32(1117024263);
+emit_32(1085915770);
+emit_32(3277248528);
+emit_32(1117536256);
+emit_32(1085498563);
+emit_32(3277248528);
+emit_32(1118048263);
+emit_32(1087685913);
+emit_32(3277248528);
+emit_32(1118560256);
+emit_32(1089772496);
+emit_32(3277248528);
+emit_32(1119072263);
+emit_32(1090845682);
+emit_32(3277248528);
+emit_32(1119584256);
+emit_32(1090463340);
+emit_32(3277248528);
+emit_32(1120096263);
+emit_32(1085056987);
+emit_32(3277248528);
+emit_32(1120608322);
+emit_32(1080738301);
+emit_32(3277248528);
+emit_32(1121120289);
+emit_32(1078775408);
+emit_32(3277248528);
+emit_32(1121632256);
+emit_32(1086143815);
+emit_32(3277248528);
+emit_32(1122144223);
+emit_32(1089267858);
+emit_32(3277248528);
+emit_32(1122656322);
+emit_32(1090842075);
+emit_32(3277248528);
+emit_32(1123168289);
+emit_32(1092362164);
+emit_32(3277248528);
+emit_32(1123680256);
+emit_32(1092866068);
+emit_32(3277248528);
+emit_32(1124132848);
+emit_32(1092973547);
+emit_32(3277248528);
+emit_32(1124388897);
+emit_32(1093272810);
+emit_32(3277248528);
+emit_32(1124644880);
+emit_32(1093540826);
+emit_32(3277248528);
+emit_32(1124900864);
+emit_32(1091662900);
+emit_32(3277248528);
+emit_32(1125156848);
+emit_32(1087337472);
+emit_32(3277248528);
+emit_32(1125412897);
+emit_32(1084271960);
+emit_32(3277248528);
+emit_32(1125668880);
+emit_32(1086273209);
+emit_32(3277248528);
+emit_32(1125924864);
+emit_32(1087017908);
+emit_32(3277248528);
+emit_32(1126180848);
+emit_32(1086137020);
+emit_32(3277248528);
+emit_32(1126436897);
+emit_32(1084291023);
+emit_32(3277248528);
+emit_32(1126692880);
+emit_32(1084252771);
+emit_32(3277248528);
+emit_32(1126948864);
+emit_32(1082890062);
+emit_32(3277248528);
+emit_32(1127204848);
+emit_32(1080838922);
+emit_32(3277248528);
+emit_32(1127460897);
+emit_32(1077790963);
+emit_32(3277248528);
+emit_32(1127716880);
+emit_32(1069026504);
+emit_32(3277248528);
+emit_32(1127972864);
+emit_32(3200230497);
+emit_32(3277248528);
+emit_32(1128228848);
+emit_32(3212093549);
+emit_32(3277248528);
+emit_32(1128484897);
+emit_32(3187505818);
+emit_32(3277248528);
+emit_32(1128740880);
+emit_32(3186118946);
+emit_32(3277248528);
+emit_32(1128996864);
+emit_32(3163350412);
+emit_32(3277248528);
+emit_32(1129252848);
+emit_32(3213662303);
+emit_32(3277248528);
+emit_32(1129508897);
+emit_32(3213755333);
+emit_32(3277248528);
+emit_32(1129764880);
+emit_32(3220593894);
+emit_32(3277248528);
+emit_32(1130020864);
+emit_32(3222323667);
+emit_32(3277248528);
+emit_32(1130276848);
+emit_32(3215526587);
+emit_32(3277248528);
+emit_32(1130532897);
+emit_32(1045835140);
+emit_32(3277248528);
+emit_32(1130788880);
+emit_32(1075469835);
+emit_32(3277248528);
+emit_32(1131044864);
+emit_32(1083532819);
+emit_32(3277248528);
+emit_32(1131300848);
+emit_32(1086949121);
+emit_32(3277248528);
+emit_32(1131556897);
+emit_32(1088845177);
+emit_32(3277248528);
+emit_32(1131812880);
+emit_32(1090603115);
+emit_32(3277248528);
+emit_32(1132068864);
+emit_32(1092936742);
+emit_32(3277248528);
+emit_32(1081737216);
+emit_32(1096047133);
+emit_32(3277504512);
+emit_32(1090125824);
+emit_32(1095575064);
+emit_32(3277504512);
+emit_32(1094418484);
+emit_32(1094514324);
+emit_32(3277504512);
+emit_32(1098514432);
+emit_32(1094409781);
+emit_32(3277504512);
+emit_32(1100759066);
+emit_32(1094209084);
+emit_32(3277504512);
+emit_32(1102807040);
+emit_32(1094844731);
+emit_32(3277504512);
+emit_32(1104855066);
+emit_32(1094741236);
+emit_32(3277504512);
+emit_32(1106903040);
+emit_32(1095085484);
+emit_32(3277504512);
+emit_32(1108123661);
+emit_32(1095114110);
+emit_32(3277504512);
+emit_32(1109147648);
+emit_32(1094994362);
+emit_32(3277504512);
+emit_32(1110171661);
+emit_32(1095239939);
+emit_32(3277504512);
+emit_32(1111195648);
+emit_32(1093966548);
+emit_32(3277504512);
+emit_32(1112219661);
+emit_32(1092807347);
+emit_32(3277504512);
+emit_32(1113243648);
+emit_32(1093061208);
+emit_32(3277504512);
+emit_32(1114267661);
+emit_32(1092621120);
+emit_32(3277504512);
+emit_32(1115291648);
+emit_32(1092574889);
+emit_32(3277504512);
+emit_32(1116000263);
+emit_32(1091199283);
+emit_32(3277504512);
+emit_32(1116512256);
+emit_32(1087281792);
+emit_32(3277504512);
+emit_32(1117024263);
+emit_32(1084862056);
+emit_32(3277504512);
+emit_32(1117536256);
+emit_32(1084838904);
+emit_32(3277504512);
+emit_32(1118048263);
+emit_32(1088961905);
+emit_32(3277504512);
+emit_32(1118560256);
+emit_32(1090683457);
+emit_32(3277504512);
+emit_32(1119072263);
+emit_32(1091541548);
+emit_32(3277504512);
+emit_32(1119584256);
+emit_32(1089950880);
+emit_32(3277504512);
+emit_32(1120096263);
+emit_32(1085097923);
+emit_32(3277504512);
+emit_32(1120608322);
+emit_32(1082634273);
+emit_32(3277504512);
+emit_32(1121120289);
+emit_32(1085048283);
+emit_32(3277504512);
+emit_32(1121632256);
+emit_32(1089879786);
+emit_32(3277504512);
+emit_32(1122144223);
+emit_32(1091437760);
+emit_32(3277504512);
+emit_32(1122656322);
+emit_32(1092036938);
+emit_32(3277504512);
+emit_32(1123168289);
+emit_32(1091792777);
+emit_32(3277504512);
+emit_32(1123680256);
+emit_32(1092759427);
+emit_32(3277504512);
+emit_32(1124132848);
+emit_32(1094303141);
+emit_32(3277504512);
+emit_32(1124388897);
+emit_32(1094722047);
+emit_32(3277504512);
+emit_32(1124644880);
+emit_32(1095047211);
+emit_32(3277504512);
+emit_32(1124900864);
+emit_32(1093500980);
+emit_32(3277504512);
+emit_32(1125156848);
+emit_32(1089802590);
+emit_32(3277504512);
+emit_32(1125412897);
+emit_32(1086478164);
+emit_32(3277504512);
+emit_32(1125668880);
+emit_32(1087292152);
+emit_32(3277504512);
+emit_32(1125924864);
+emit_32(1088463244);
+emit_32(3277504512);
+emit_32(1126180848);
+emit_32(1088955697);
+emit_32(3277504512);
+emit_32(1126436897);
+emit_32(1086983577);
+emit_32(3277504512);
+emit_32(1126692880);
+emit_32(1087333382);
+emit_32(3277504512);
+emit_32(1126948864);
+emit_32(1086099795);
+emit_32(3277504512);
+emit_32(1127204848);
+emit_32(1085722623);
+emit_32(3277504512);
+emit_32(1127460897);
+emit_32(1082769224);
+emit_32(3277504512);
+emit_32(1127716880);
+emit_32(1075827190);
+emit_32(3277504512);
+emit_32(1127972864);
+emit_32(1066775588);
+emit_32(3277504512);
+emit_32(1128228848);
+emit_32(1067171279);
+emit_32(3277504512);
+emit_32(1128484897);
+emit_32(1067001745);
+emit_32(3277504512);
+emit_32(1128740880);
+emit_32(1067686843);
+emit_32(3277504512);
+emit_32(1128996864);
+emit_32(1065883795);
+emit_32(3277504512);
+emit_32(1129252848);
+emit_32(1040732182);
+emit_32(3277504512);
+emit_32(1129508897);
+emit_32(3197189593);
+emit_32(3277504512);
+emit_32(1129764880);
+emit_32(3203486016);
+emit_32(3277504512);
+emit_32(1130020864);
+emit_32(3211855951);
+emit_32(3277504512);
+emit_32(1130276848);
+emit_32(3212062612);
+emit_32(3277504512);
+emit_32(1130532897);
+emit_32(1061179313);
+emit_32(3277504512);
+emit_32(1130788880);
+emit_32(1076017024);
+emit_32(3277504512);
+emit_32(1131044864);
+emit_32(1084602198);
+emit_32(3277504512);
+emit_32(1131300848);
+emit_32(1088897291);
+emit_32(3277504512);
+emit_32(1131556897);
+emit_32(1090987995);
+emit_32(3277504512);
+emit_32(1131812880);
+emit_32(1091140101);
+emit_32(3277504512);
+emit_32(1132068864);
+emit_32(1093070540);
+emit_32(3277504512);
+emit_32(1081737216);
+emit_32(1095782787);
+emit_32(3277760496);
+emit_32(1090125824);
+emit_32(1095949510);
+emit_32(3277760496);
+emit_32(1094418484);
+emit_32(1095197157);
+emit_32(3277760496);
+emit_32(1098514432);
+emit_32(1093509684);
+emit_32(3277760496);
+emit_32(1100759066);
+emit_32(1093932365);
+emit_32(3277760496);
+emit_32(1102807040);
+emit_32(1094883004);
+emit_32(3277760496);
+emit_32(1104855066);
+emit_32(1095364195);
+emit_32(3277760496);
+emit_32(1106903040);
+emit_32(1095467794);
+emit_32(3277760496);
+emit_32(1108123661);
+emit_32(1095382231);
+emit_32(3277760496);
+emit_32(1109147648);
+emit_32(1095263532);
+emit_32(3277760496);
+emit_32(1110171661);
+emit_32(1094240751);
+emit_32(3277760496);
+emit_32(1111195648);
+emit_32(1093792485);
+emit_32(3277760496);
+emit_32(1112219661);
+emit_32(1093773400);
+emit_32(3277760496);
+emit_32(1113243648);
+emit_32(1093969799);
+emit_32(3277760496);
+emit_32(1114267661);
+emit_32(1092613235);
+emit_32(3277760496);
+emit_32(1115291648);
+emit_32(1091641803);
+emit_32(3277760496);
+emit_32(1116000263);
+emit_32(1090223425);
+emit_32(3277760496);
+emit_32(1116512256);
+emit_32(1086325449);
+emit_32(3277760496);
+emit_32(1117024263);
+emit_32(1086748822);
+emit_32(3277760496);
+emit_32(1117536256);
+emit_32(1088214081);
+emit_32(3277760496);
+emit_32(1118048263);
+emit_32(1090683918);
+emit_32(3277760496);
+emit_32(1118560256);
+emit_32(1091490273);
+emit_32(3277760496);
+emit_32(1119072263);
+emit_32(1092135263);
+emit_32(3277760496);
+emit_32(1119584256);
+emit_32(1090576429);
+emit_32(3277760496);
+emit_32(1120096263);
+emit_32(1085919021);
+emit_32(3277760496);
+emit_32(1120608322);
+emit_32(1084273260);
+emit_32(3277760496);
+emit_32(1121120289);
+emit_32(1088748708);
+emit_32(3277760496);
+emit_32(1121632256);
+emit_32(1091512618);
+emit_32(3277760496);
+emit_32(1122144223);
+emit_32(1092476008);
+emit_32(3277760496);
+emit_32(1122656322);
+emit_32(1093289483);
+emit_32(3277760496);
+emit_32(1123168289);
+emit_32(1093443623);
+emit_32(3277760496);
+emit_32(1123680256);
+emit_32(1093739846);
+emit_32(3277760496);
+emit_32(1124132848);
+emit_32(1095381916);
+emit_32(3277760496);
+emit_32(1124388897);
+emit_32(1095171886);
+emit_32(3277760496);
+emit_32(1124644880);
+emit_32(1094833196);
+emit_32(3277760496);
+emit_32(1124900864);
+emit_32(1094087134);
+emit_32(3277760496);
+emit_32(1125156848);
+emit_32(1091517725);
+emit_32(3277760496);
+emit_32(1125412897);
+emit_32(1088065624);
+emit_32(3277760496);
+emit_32(1125668880);
+emit_32(1089789588);
+emit_32(3277760496);
+emit_32(1125924864);
+emit_32(1090797741);
+emit_32(3277760496);
+emit_32(1126180848);
+emit_32(1090448785);
+emit_32(3277760496);
+emit_32(1126436897);
+emit_32(1089515972);
+emit_32(3277760496);
+emit_32(1126692880);
+emit_32(1088794300);
+emit_32(3277760496);
+emit_32(1126948864);
+emit_32(1086317606);
+emit_32(3277760496);
+emit_32(1127204848);
+emit_32(1085853170);
+emit_32(3277760496);
+emit_32(1127460897);
+emit_32(1083759395);
+emit_32(3277760496);
+emit_32(1127716880);
+emit_32(1079594766);
+emit_32(3277760496);
+emit_32(1127972864);
+emit_32(1077764623);
+emit_32(3277760496);
+emit_32(1128228848);
+emit_32(1072514403);
+emit_32(3277760496);
+emit_32(1128484897);
+emit_32(1067984303);
+emit_32(3277760496);
+emit_32(1128740880);
+emit_32(1066412026);
+emit_32(3277760496);
+emit_32(1128996864);
+emit_32(1069352569);
+emit_32(3277760496);
+emit_32(1129252848);
+emit_32(1072856490);
+emit_32(3277760496);
+emit_32(1129508897);
+emit_32(1059155041);
+emit_32(3277760496);
+emit_32(1129764880);
+emit_32(1050172017);
+emit_32(3277760496);
+emit_32(1130020864);
+emit_32(3157538945);
+emit_32(3277760496);
+emit_32(1130276848);
+emit_32(3194387429);
+emit_32(3277760496);
+emit_32(1130532897);
+emit_32(1059188931);
+emit_32(3277760496);
+emit_32(1130788880);
+emit_32(1077509609);
+emit_32(3277760496);
+emit_32(1131044864);
+emit_32(1085587356);
+emit_32(3277760496);
+emit_32(1131300848);
+emit_32(1088891944);
+emit_32(3277760496);
+emit_32(1131556897);
+emit_32(1090308297);
+emit_32(3277760496);
+emit_32(1131812880);
+emit_32(1091359484);
+emit_32(3277760496);
+emit_32(1132068864);
+emit_32(1093623035);
+emit_32(3277760496);
+emit_32(1081737216);
+emit_32(1094685347);
+emit_32(3278016545);
+emit_32(1090125824);
+emit_32(1095642592);
+emit_32(3278016545);
+emit_32(1094418484);
+emit_32(1094847876);
+emit_32(3278016545);
+emit_32(1098514432);
+emit_32(1093374732);
+emit_32(3278016545);
+emit_32(1100759066);
+emit_32(1094384720);
+emit_32(3278016545);
+emit_32(1102807040);
+emit_32(1095400371);
+emit_32(3278016545);
+emit_32(1104855066);
+emit_32(1095484362);
+emit_32(3278016545);
+emit_32(1106903040);
+emit_32(1094502790);
+emit_32(3278016545);
+emit_32(1108123661);
+emit_32(1093875112);
+emit_32(3278016545);
+emit_32(1109147648);
+emit_32(1093633206);
+emit_32(3278016545);
+emit_32(1110171661);
+emit_32(1093418667);
+emit_32(3278016545);
+emit_32(1111195648);
+emit_32(1093659211);
+emit_32(3278016545);
+emit_32(1112219661);
+emit_32(1093957426);
+emit_32(3278016545);
+emit_32(1113243648);
+emit_32(1093739846);
+emit_32(3278016545);
+emit_32(1114267661);
+emit_32(1093359842);
+emit_32(3278016545);
+emit_32(1115291648);
+emit_32(1091739111);
+emit_32(3278016545);
+emit_32(1116000263);
+emit_32(1089668246);
+emit_32(3278016545);
+emit_32(1116512256);
+emit_32(1087761327);
+emit_32(3278016545);
+emit_32(1117024263);
+emit_32(1088382734);
+emit_32(3278016545);
+emit_32(1117536256);
+emit_32(1089936850);
+emit_32(3278016545);
+emit_32(1118048263);
+emit_32(1091570688);
+emit_32(3278016545);
+emit_32(1118560256);
+emit_32(1092069527);
+emit_32(3278016545);
+emit_32(1119072263);
+emit_32(1091509504);
+emit_32(3278016545);
+emit_32(1119584256);
+emit_32(1090092228);
+emit_32(3278016545);
+emit_32(1120096263);
+emit_32(1086488041);
+emit_32(3278016545);
+emit_32(1120608322);
+emit_32(1087594478);
+emit_32(3278016545);
+emit_32(1121120289);
+emit_32(1091111695);
+emit_32(3278016545);
+emit_32(1121632256);
+emit_32(1092917028);
+emit_32(3278016545);
+emit_32(1122144223);
+emit_32(1094162946);
+emit_32(3278016545);
+emit_32(1122656322);
+emit_32(1094317402);
+emit_32(3278016545);
+emit_32(1123168289);
+emit_32(1094797545);
+emit_32(3278016545);
+emit_32(1123680256);
+emit_32(1095272759);
+emit_32(3278016545);
+emit_32(1124132848);
+emit_32(1096382467);
+emit_32(3278016545);
+emit_32(1124388897);
+emit_32(1095677824);
+emit_32(3278016545);
+emit_32(1124644880);
+emit_32(1094211076);
+emit_32(3278016545);
+emit_32(1124900864);
+emit_32(1093289168);
+emit_32(3278016545);
+emit_32(1125156848);
+emit_32(1091399110);
+emit_32(3278016545);
+emit_32(1125412897);
+emit_32(1091357282);
+emit_32(3278016545);
+emit_32(1125668880);
+emit_32(1092084459);
+emit_32(3278016545);
+emit_32(1125924864);
+emit_32(1092576409);
+emit_32(3278016545);
+emit_32(1126180848);
+emit_32(1091310967);
+emit_32(3278016545);
+emit_32(1126436897);
+emit_32(1089767358);
+emit_32(3278016545);
+emit_32(1126692880);
+emit_32(1088833559);
+emit_32(3278016545);
+emit_32(1126948864);
+emit_32(1088084855);
+emit_32(3278016545);
+emit_32(1127204848);
+emit_32(1086548397);
+emit_32(3278016545);
+emit_32(1127460897);
+emit_32(1083608358);
+emit_32(3278016545);
+emit_32(1127716880);
+emit_32(1083278790);
+emit_32(3278016545);
+emit_32(1127972864);
+emit_32(1080394661);
+emit_32(3278016545);
+emit_32(1128228848);
+emit_32(1077852158);
+emit_32(3278016545);
+emit_32(1128484897);
+emit_32(1069478650);
+emit_32(3278016545);
+emit_32(1128740880);
+emit_32(1072553494);
+emit_32(3278016545);
+emit_32(1128996864);
+emit_32(1069471100);
+emit_32(3278016545);
+emit_32(1129252848);
+emit_32(1068704381);
+emit_32(3278016545);
+emit_32(1129508897);
+emit_32(1063054771);
+emit_32(3278016545);
+emit_32(1129764880);
+emit_32(1066657309);
+emit_32(3278016545);
+emit_32(1130020864);
+emit_32(1058799582);
+emit_32(3278016545);
+emit_32(1130276848);
+emit_32(1065716610);
+emit_32(3278016545);
+emit_32(1130532897);
+emit_32(1070221796);
+emit_32(3278016545);
+emit_32(1130788880);
+emit_32(1082372632);
+emit_32(3278016545);
+emit_32(1131044864);
+emit_32(1085584357);
+emit_32(3278016545);
+emit_32(1131300848);
+emit_32(1087618406);
+emit_32(3278016545);
+emit_32(1131556897);
+emit_32(1089074731);
+emit_32(3278016545);
+emit_32(1131812880);
+emit_32(1091116256);
+emit_32(3278016545);
+emit_32(1132068864);
+emit_32(1093443623);
+emit_32(3278016545);
+emit_32(1081737216);
+emit_32(1093100529);
+emit_32(3278272528);
+emit_32(1090125824);
+emit_32(1094102968);
+emit_32(3278272528);
+emit_32(1094418484);
+emit_32(1093438380);
+emit_32(3278272528);
+emit_32(1098514432);
+emit_32(1093242192);
+emit_32(3278272528);
+emit_32(1100759066);
+emit_32(1093664663);
+emit_32(3278272528);
+emit_32(1102807040);
+emit_32(1094290978);
+emit_32(3278272528);
+emit_32(1104855066);
+emit_32(1094142185);
+emit_32(3278272528);
+emit_32(1106903040);
+emit_32(1092722622);
+emit_32(3278272528);
+emit_32(1108123661);
+emit_32(1093048205);
+emit_32(3278272528);
+emit_32(1109147648);
+emit_32(1092329868);
+emit_32(3278272528);
+emit_32(1110171661);
+emit_32(1092322308);
+emit_32(3278272528);
+emit_32(1111195648);
+emit_32(1093430621);
+emit_32(3278272528);
+emit_32(1112219661);
+emit_32(1093536317);
+emit_32(3278272528);
+emit_32(1113243648);
+emit_32(1092950268);
+emit_32(3278272528);
+emit_32(1114267661);
+emit_32(1093055336);
+emit_32(3278272528);
+emit_32(1115291648);
+emit_32(1091513918);
+emit_32(3278272528);
+emit_32(1116000263);
+emit_32(1090353428);
+emit_32(3278272528);
+emit_32(1116512256);
+emit_32(1091025450);
+emit_32(3278272528);
+emit_32(1117024263);
+emit_32(1091303186);
+emit_32(3278272528);
+emit_32(1117536256);
+emit_32(1091441535);
+emit_32(3278272528);
+emit_32(1118048263);
+emit_32(1092287275);
+emit_32(3278272528);
+emit_32(1118560256);
+emit_32(1092144259);
+emit_32(3278272528);
+emit_32(1119072263);
+emit_32(1091616102);
+emit_32(3278272528);
+emit_32(1119584256);
+emit_32(1091037110);
+emit_32(3278272528);
+emit_32(1120096263);
+emit_32(1090309493);
+emit_32(3278272528);
+emit_32(1120608322);
+emit_32(1091784220);
+emit_32(3278272528);
+emit_32(1121120289);
+emit_32(1093152434);
+emit_32(3278272528);
+emit_32(1121632256);
+emit_32(1094218836);
+emit_32(3278272528);
+emit_32(1122144223);
+emit_32(1094752980);
+emit_32(3278272528);
+emit_32(1122656322);
+emit_32(1095698796);
+emit_32(3278272528);
+emit_32(1123168289);
+emit_32(1095918053);
+emit_32(3278272528);
+emit_32(1123680256);
+emit_32(1096702912);
+emit_32(3278272528);
+emit_32(1124132848);
+emit_32(1097339817);
+emit_32(3278272528);
+emit_32(1124388897);
+emit_32(1095953075);
+emit_32(3278272528);
+emit_32(1124644880);
+emit_32(1094317611);
+emit_32(3278272528);
+emit_32(1124900864);
+emit_32(1093780950);
+emit_32(3278272528);
+emit_32(1125156848);
+emit_32(1092660022);
+emit_32(3278272528);
+emit_32(1125412897);
+emit_32(1092828633);
+emit_32(3278272528);
+emit_32(1125668880);
+emit_32(1093621252);
+emit_32(3278272528);
+emit_32(1125924864);
+emit_32(1093691821);
+emit_32(3278272528);
+emit_32(1126180848);
+emit_32(1092496151);
+emit_32(3278272528);
+emit_32(1126436897);
+emit_32(1091489371);
+emit_32(3278272528);
+emit_32(1126692880);
+emit_32(1090315742);
+emit_32(3278272528);
+emit_32(1126948864);
+emit_32(1088919605);
+emit_32(3278272528);
+emit_32(1127204848);
+emit_32(1086524028);
+emit_32(3278272528);
+emit_32(1127460897);
+emit_32(1084543520);
+emit_32(3278272528);
+emit_32(1127716880);
+emit_32(1083661479);
+emit_32(3278272528);
+emit_32(1127972864);
+emit_32(1082237198);
+emit_32(3278272528);
+emit_32(1128228848);
+emit_32(1078013052);
+emit_32(3278272528);
+emit_32(1128484897);
+emit_32(1072342353);
+emit_32(3278272528);
+emit_32(1128740880);
+emit_32(1077011074);
+emit_32(3278272528);
+emit_32(1128996864);
+emit_32(1078172393);
+emit_32(3278272528);
+emit_32(1129252848);
+emit_32(1074035719);
+emit_32(3278272528);
+emit_32(1129508897);
+emit_32(1073825416);
+emit_32(3278272528);
+emit_32(1129764880);
+emit_32(1074307678);
+emit_32(3278272528);
+emit_32(1130020864);
+emit_32(1070873927);
+emit_32(3278272528);
+emit_32(1130276848);
+emit_32(1072403002);
+emit_32(3278272528);
+emit_32(1130532897);
+emit_32(1077025838);
+emit_32(3278272528);
+emit_32(1130788880);
+emit_32(1081902304);
+emit_32(3278272528);
+emit_32(1131044864);
+emit_32(1085968619);
+emit_32(3278272528);
+emit_32(1131300848);
+emit_32(1088231676);
+emit_32(3278272528);
+emit_32(1131556897);
+emit_32(1090439956);
+emit_32(3278272528);
+emit_32(1131812880);
+emit_32(1089744184);
+emit_32(3278272528);
+emit_32(1132068864);
+emit_32(1092872988);
+emit_32(3278272528);
+emit_32(1081737216);
+emit_32(1091412678);
+emit_32(3278528512);
+emit_32(1090125824);
+emit_32(1091988504);
+emit_32(3278528512);
+emit_32(1094418484);
+emit_32(1092226269);
+emit_32(3278528512);
+emit_32(1098514432);
+emit_32(1092585521);
+emit_32(3278528512);
+emit_32(1100759066);
+emit_32(1092575014);
+emit_32(3278528512);
+emit_32(1102807040);
+emit_32(1092307292);
+emit_32(3278528512);
+emit_32(1104855066);
+emit_32(1092661805);
+emit_32(3278528512);
+emit_32(1106903040);
+emit_32(1092468123);
+emit_32(3278528512);
+emit_32(1108123661);
+emit_32(1092120016);
+emit_32(3278528512);
+emit_32(1109147648);
+emit_32(1091309048);
+emit_32(3278528512);
+emit_32(1110171661);
+emit_32(1091564323);
+emit_32(3278528512);
+emit_32(1111195648);
+emit_32(1092158059);
+emit_32(3278528512);
+emit_32(1112219661);
+emit_32(1092138943);
+emit_32(3278528512);
+emit_32(1113243648);
+emit_32(1092639785);
+emit_32(3278528512);
+emit_32(1114267661);
+emit_32(1092158950);
+emit_32(3278528512);
+emit_32(1115291648);
+emit_32(1091761330);
+emit_32(3278528512);
+emit_32(1116000263);
+emit_32(1091873884);
+emit_32(3278528512);
+emit_32(1116512256);
+emit_32(1093128002);
+emit_32(3278528512);
+emit_32(1117024263);
+emit_32(1093545755);
+emit_32(3278528512);
+emit_32(1117536256);
+emit_32(1093685844);
+emit_32(3278528512);
+emit_32(1118048263);
+emit_32(1094474478);
+emit_32(3278528512);
+emit_32(1118560256);
+emit_32(1093835057);
+emit_32(3278528512);
+emit_32(1119072263);
+emit_32(1093247435);
+emit_32(3278528512);
+emit_32(1119584256);
+emit_32(1092545770);
+emit_32(3278528512);
+emit_32(1120096263);
+emit_32(1092881691);
+emit_32(3278528512);
+emit_32(1120608322);
+emit_32(1093753687);
+emit_32(3278528512);
+emit_32(1121120289);
+emit_32(1095402888);
+emit_32(3278528512);
+emit_32(1121632256);
+emit_32(1096263454);
+emit_32(3278528512);
+emit_32(1122144223);
+emit_32(1097648518);
+emit_32(3278528512);
+emit_32(1122656322);
+emit_32(1098257845);
+emit_32(3278528512);
+emit_32(1123168289);
+emit_32(1098906075);
+emit_32(3278528512);
+emit_32(1123680256);
+emit_32(1097757884);
+emit_32(3278528512);
+emit_32(1124132848);
+emit_32(1097095184);
+emit_32(3278528512);
+emit_32(1124388897);
+emit_32(1096820772);
+emit_32(3278528512);
+emit_32(1124644880);
+emit_32(1095881563);
+emit_32(3278528512);
+emit_32(1124900864);
+emit_32(1095322462);
+emit_32(3278528512);
+emit_32(1125156848);
+emit_32(1094560881);
+emit_32(3278528512);
+emit_32(1125412897);
+emit_32(1094212020);
+emit_32(3278528512);
+emit_32(1125668880);
+emit_32(1094591919);
+emit_32(3278528512);
+emit_32(1125924864);
+emit_32(1094354836);
+emit_32(3278528512);
+emit_32(1126180848);
+emit_32(1093487244);
+emit_32(3278528512);
+emit_32(1126436897);
+emit_32(1092900566);
+emit_32(3278528512);
+emit_32(1126692880);
+emit_32(1091131859);
+emit_32(3278528512);
+emit_32(1126948864);
+emit_32(1088434303);
+emit_32(3278528512);
+emit_32(1127204848);
+emit_32(1085602330);
+emit_32(3278528512);
+emit_32(1127460897);
+emit_32(1084383381);
+emit_32(3278528512);
+emit_32(1127716880);
+emit_32(1082990348);
+emit_32(3278528512);
+emit_32(1127972864);
+emit_32(1081942359);
+emit_32(3278528512);
+emit_32(1128228848);
+emit_32(1079707928);
+emit_32(3278528512);
+emit_32(1128484897);
+emit_32(1076020757);
+emit_32(3278528512);
+emit_32(1128740880);
+emit_32(1081959766);
+emit_32(3278528512);
+emit_32(1128996864);
+emit_32(1081769302);
+emit_32(3278528512);
+emit_32(1129252848);
+emit_32(1077543709);
+emit_32(3278528512);
+emit_32(1129508897);
+emit_32(1078419522);
+emit_32(3278528512);
+emit_32(1129764880);
+emit_32(1079325911);
+emit_32(3278528512);
+emit_32(1130020864);
+emit_32(1076435784);
+emit_32(3278528512);
+emit_32(1130276848);
+emit_32(1076442830);
+emit_32(3278528512);
+emit_32(1130532897);
+emit_32(1078716269);
+emit_32(3278528512);
+emit_32(1130788880);
+emit_32(1083099337);
+emit_32(3278528512);
+emit_32(1131044864);
+emit_32(1086173385);
+emit_32(3278528512);
+emit_32(1131300848);
+emit_32(1088001787);
+emit_32(3278528512);
+emit_32(1131556897);
+emit_32(1091260069);
+emit_32(3278528512);
+emit_32(1131812880);
+emit_32(1091015247);
+emit_32(3278528512);
+emit_32(1132068864);
+emit_32(1093018740);
+emit_32(3278528512);
+emit_32(1081737216);
+emit_32(1090509120);
+emit_32(3278784496);
+emit_32(1090125824);
+emit_32(1091171244);
+emit_32(3278784496);
+emit_32(1094418484);
+emit_32(1091637818);
+emit_32(3278784496);
+emit_32(1098514432);
+emit_32(1091699621);
+emit_32(3278784496);
+emit_32(1100759066);
+emit_32(1091545869);
+emit_32(3278784496);
+emit_32(1102807040);
+emit_32(1092355642);
+emit_32(3278784496);
+emit_32(1104855066);
+emit_32(1092176189);
+emit_32(3278784496);
+emit_32(1106903040);
+emit_32(1091883961);
+emit_32(3278784496);
+emit_32(1108123661);
+emit_32(1091185924);
+emit_32(3278784496);
+emit_32(1109147648);
+emit_32(1091284217);
+emit_32(3278784496);
+emit_32(1110171661);
+emit_32(1091038221);
+emit_32(3278784496);
+emit_32(1111195648);
+emit_32(1091340725);
+emit_32(3278784496);
+emit_32(1112219661);
+emit_32(1091305944);
+emit_32(3278784496);
+emit_32(1113243648);
+emit_32(1091527623);
+emit_32(3278784496);
+emit_32(1114267661);
+emit_32(1092680260);
+emit_32(3278784496);
+emit_32(1115291648);
+emit_32(1093798461);
+emit_32(3278784496);
+emit_32(1116000263);
+emit_32(1093476968);
+emit_32(3278784496);
+emit_32(1116512256);
+emit_32(1094724669);
+emit_32(3278784496);
+emit_32(1117024263);
+emit_32(1095984847);
+emit_32(3278784496);
+emit_32(1117536256);
+emit_32(1096949223);
+emit_32(3278784496);
+emit_32(1118048263);
+emit_32(1097185362);
+emit_32(3278784496);
+emit_32(1118560256);
+emit_32(1096053529);
+emit_32(3278784496);
+emit_32(1119072263);
+emit_32(1095554721);
+emit_32(3278784496);
+emit_32(1119584256);
+emit_32(1094764095);
+emit_32(3278784496);
+emit_32(1120096263);
+emit_32(1095516239);
+emit_32(3278784496);
+emit_32(1120608322);
+emit_32(1096842687);
+emit_32(3278784496);
+emit_32(1121120289);
+emit_32(1098862245);
+emit_32(3278784496);
+emit_32(1121632256);
+emit_32(1099841038);
+emit_32(3278784496);
+emit_32(1122144223);
+emit_32(1100521249);
+emit_32(3278784496);
+emit_32(1122656322);
+emit_32(1100352324);
+emit_32(3278784496);
+emit_32(1123168289);
+emit_32(1100382418);
+emit_32(3278784496);
+emit_32(1123680256);
+emit_32(1099683961);
+emit_32(3278784496);
+emit_32(1124132848);
+emit_32(1099118517);
+emit_32(3278784496);
+emit_32(1124388897);
+emit_32(1098912891);
+emit_32(3278784496);
+emit_32(1124644880);
+emit_32(1098053268);
+emit_32(3278784496);
+emit_32(1124900864);
+emit_32(1096737201);
+emit_32(3278784496);
+emit_32(1125156848);
+emit_32(1095640390);
+emit_32(3278784496);
+emit_32(1125412897);
+emit_32(1094410096);
+emit_32(3278784496);
+emit_32(1125668880);
+emit_32(1094098878);
+emit_32(3278784496);
+emit_32(1125924864);
+emit_32(1093723488);
+emit_32(3278784496);
+emit_32(1126180848);
+emit_32(1093527195);
+emit_32(3278784496);
+emit_32(1126436897);
+emit_32(1093210944);
+emit_32(3278784496);
+emit_32(1126692880);
+emit_32(1092714548);
+emit_32(3278784496);
+emit_32(1126948864);
+emit_32(1089965455);
+emit_32(3278784496);
+emit_32(1127204848);
+emit_32(1086218431);
+emit_32(3278784496);
+emit_32(1127460897);
+emit_32(1085307869);
+emit_32(3278784496);
+emit_32(1127716880);
+emit_32(1084803231);
+emit_32(3278784496);
+emit_32(1127972864);
+emit_32(1084117756);
+emit_32(3278784496);
+emit_32(1128228848);
+emit_32(1082406438);
+emit_32(3278784496);
+emit_32(1128484897);
+emit_32(1080428635);
+emit_32(3278784496);
+emit_32(1128740880);
+emit_32(1082196765);
+emit_32(3278784496);
+emit_32(1128996864);
+emit_32(1082931292);
+emit_32(3278784496);
+emit_32(1129252848);
+emit_32(1078353839);
+emit_32(3278784496);
+emit_32(1129508897);
+emit_32(1078676842);
+emit_32(3278784496);
+emit_32(1129764880);
+emit_32(1078175832);
+emit_32(3278784496);
+emit_32(1130020864);
+emit_32(1078788788);
+emit_32(3278784496);
+emit_32(1130276848);
+emit_32(1075988503);
+emit_32(3278784496);
+emit_32(1130532897);
+emit_32(1078470902);
+emit_32(3278784496);
+emit_32(1130788880);
+emit_32(1083278329);
+emit_32(3278784496);
+emit_32(1131044864);
+emit_32(1086190728);
+emit_32(3278784496);
+emit_32(1131300848);
+emit_32(1088421406);
+emit_32(3278784496);
+emit_32(1131556897);
+emit_32(1090737280);
+emit_32(3278784496);
+emit_32(1131812880);
+emit_32(1092161257);
+emit_32(3278784496);
+emit_32(1132068864);
+emit_32(1094162946);
+emit_32(3278784496);
+emit_32(1081737216);
+emit_32(1087170664);
+emit_32(3279040545);
+emit_32(1090125824);
+emit_32(1090282922);
+emit_32(3279040545);
+emit_32(1094418484);
+emit_32(1091155117);
+emit_32(3279040545);
+emit_32(1098514432);
+emit_32(1091115921);
+emit_32(3279040545);
+emit_32(1100759066);
+emit_32(1091154351);
+emit_32(3279040545);
+emit_32(1102807040);
+emit_32(1091182076);
+emit_32(3279040545);
+emit_32(1104855066);
+emit_32(1090880379);
+emit_32(3279040545);
+emit_32(1106903040);
+emit_32(1089488437);
+emit_32(3279040545);
+emit_32(1108123661);
+emit_32(1089764611);
+emit_32(3279040545);
+emit_32(1109147648);
+emit_32(1090012599);
+emit_32(3279040545);
+emit_32(1110171661);
+emit_32(1089610386);
+emit_32(3279040545);
+emit_32(1111195648);
+emit_32(1090497943);
+emit_32(3279040545);
+emit_32(1112219661);
+emit_32(1092221833);
+emit_32(3279040545);
+emit_32(1113243648);
+emit_32(1091868673);
+emit_32(3279040545);
+emit_32(1114267661);
+emit_32(1093013812);
+emit_32(3279040545);
+emit_32(1115291648);
+emit_32(1093957635);
+emit_32(3279040545);
+emit_32(1116000263);
+emit_32(1095032950);
+emit_32(3279040545);
+emit_32(1116512256);
+emit_32(1096314729);
+emit_32(3279040545);
+emit_32(1117024263);
+emit_32(1097345375);
+emit_32(3279040545);
+emit_32(1117536256);
+emit_32(1098078329);
+emit_32(3279040545);
+emit_32(1118048263);
+emit_32(1098803524);
+emit_32(3279040545);
+emit_32(1118560256);
+emit_32(1098341522);
+emit_32(3279040545);
+emit_32(1119072263);
+emit_32(1097352715);
+emit_32(3279040545);
+emit_32(1119584256);
+emit_32(1097048103);
+emit_32(3279040545);
+emit_32(1120096263);
+emit_32(1096764149);
+emit_32(3279040545);
+emit_32(1120608322);
+emit_32(1098722469);
+emit_32(3279040545);
+emit_32(1121120289);
+emit_32(1100309647);
+emit_32(3279040545);
+emit_32(1121632256);
+emit_32(1101387321);
+emit_32(3279040545);
+emit_32(1122144223);
+emit_32(1101809739);
+emit_32(3279040545);
+emit_32(1122656322);
+emit_32(1101519703);
+emit_32(3279040545);
+emit_32(1123168289);
+emit_32(1101121821);
+emit_32(3279040545);
+emit_32(1123680256);
+emit_32(1100240545);
+emit_32(3279040545);
+emit_32(1124132848);
+emit_32(1099882352);
+emit_32(3279040545);
+emit_32(1124388897);
+emit_32(1099784048);
+emit_32(3279040545);
+emit_32(1124644880);
+emit_32(1099378563);
+emit_32(3279040545);
+emit_32(1124900864);
+emit_32(1097709545);
+emit_32(3279040545);
+emit_32(1125156848);
+emit_32(1095839095);
+emit_32(3279040545);
+emit_32(1125412897);
+emit_32(1095221589);
+emit_32(3279040545);
+emit_32(1125668880);
+emit_32(1094514219);
+emit_32(3279040545);
+emit_32(1125924864);
+emit_32(1094489263);
+emit_32(3279040545);
+emit_32(1126180848);
+emit_32(1094114397);
+emit_32(3279040545);
+emit_32(1126436897);
+emit_32(1093523525);
+emit_32(3279040545);
+emit_32(1126692880);
+emit_32(1092364020);
+emit_32(3279040545);
+emit_32(1126948864);
+emit_32(1090657578);
+emit_32(3279040545);
+emit_32(1127204848);
+emit_32(1088250991);
+emit_32(3279040545);
+emit_32(1127460897);
+emit_32(1086186701);
+emit_32(3279040545);
+emit_32(1127716880);
+emit_32(1085899685);
+emit_32(3279040545);
+emit_32(1127972864);
+emit_32(1085922502);
+emit_32(3279040545);
+emit_32(1128228848);
+emit_32(1083915444);
+emit_32(3279040545);
+emit_32(1128484897);
+emit_32(1082705891);
+emit_32(3279040545);
+emit_32(1128740880);
+emit_32(1082612966);
+emit_32(3279040545);
+emit_32(1128996864);
+emit_32(1082123763);
+emit_32(3279040545);
+emit_32(1129252848);
+emit_32(1079957992);
+emit_32(3279040545);
+emit_32(1129508897);
+emit_32(1080918362);
+emit_32(3279040545);
+emit_32(1129764880);
+emit_32(1080150846);
+emit_32(3279040545);
+emit_32(1130020864);
+emit_32(1079666824);
+emit_32(3279040545);
+emit_32(1130276848);
+emit_32(1075451758);
+emit_32(3279040545);
+emit_32(1130532897);
+emit_32(1079618505);
+emit_32(3279040545);
+emit_32(1130788880);
+emit_32(1083212437);
+emit_32(3279040545);
+emit_32(1131044864);
+emit_32(1086243597);
+emit_32(3279040545);
+emit_32(1131300848);
+emit_32(1089861499);
+emit_32(3279040545);
+emit_32(1131556897);
+emit_32(1091090891);
+emit_32(3279040545);
+emit_32(1131812880);
+emit_32(1092085392);
+emit_32(3279040545);
+emit_32(1132068864);
+emit_32(1094769128);
+emit_32(3279040545);
+emit_32(1081737216);
+emit_32(1086522393);
+emit_32(3279296528);
+emit_32(1090125824);
+emit_32(1089733279);
+emit_32(3279296528);
+emit_32(1094418484);
+emit_32(1090866549);
+emit_32(3279296528);
+emit_32(1098514432);
+emit_32(1091166221);
+emit_32(3279296528);
+emit_32(1100759066);
+emit_32(1091316692);
+emit_32(3279296528);
+emit_32(1102807040);
+emit_32(1090303012);
+emit_32(3279296528);
+emit_32(1104855066);
+emit_32(1090054898);
+emit_32(3279296528);
+emit_32(1106903040);
+emit_32(1089282496);
+emit_32(3279296528);
+emit_32(1108123661);
+emit_32(1087524370);
+emit_32(3279296528);
+emit_32(1109147648);
+emit_32(1086986471);
+emit_32(3279296528);
+emit_32(1110171661);
+emit_32(1089941925);
+emit_32(3279296528);
+emit_32(1111195648);
+emit_32(1091445195);
+emit_32(3279296528);
+emit_32(1112219661);
+emit_32(1092661595);
+emit_32(3279296528);
+emit_32(1113243648);
+emit_32(1093449286);
+emit_32(3279296528);
+emit_32(1114267661);
+emit_32(1094451829);
+emit_32(3279296528);
+emit_32(1115291648);
+emit_32(1095908406);
+emit_32(3279296528);
+emit_32(1116000263);
+emit_32(1095897606);
+emit_32(3279296528);
+emit_32(1116512256);
+emit_32(1097742156);
+emit_32(3279296528);
+emit_32(1117024263);
+emit_32(1098429917);
+emit_32(3279296528);
+emit_32(1117536256);
+emit_32(1099162819);
+emit_32(3279296528);
+emit_32(1118048263);
+emit_32(1099463446);
+emit_32(3279296528);
+emit_32(1118560256);
+emit_32(1099555196);
+emit_32(3279296528);
+emit_32(1119072263);
+emit_32(1099132672);
+emit_32(3279296528);
+emit_32(1119584256);
+emit_32(1099075420);
+emit_32(3279296528);
+emit_32(1120096263);
+emit_32(1099448871);
+emit_32(3279296528);
+emit_32(1120608322);
+emit_32(1099721553);
+emit_32(3279296528);
+emit_32(1121120289);
+emit_32(1101033321);
+emit_32(3279296528);
+emit_32(1121632256);
+emit_32(1101927337);
+emit_32(3279296528);
+emit_32(1122144223);
+emit_32(1102231686);
+emit_32(3279296528);
+emit_32(1122656322);
+emit_32(1102467092);
+emit_32(3279296528);
+emit_32(1123168289);
+emit_32(1101898711);
+emit_32(3279296528);
+emit_32(1123680256);
+emit_32(1101260390);
+emit_32(3279296528);
+emit_32(1124132848);
+emit_32(1100638480);
+emit_32(3279296528);
+emit_32(1124388897);
+emit_32(1100231685);
+emit_32(3279296528);
+emit_32(1124644880);
+emit_32(1099651036);
+emit_32(3279296528);
+emit_32(1124900864);
+emit_32(1097614020);
+emit_32(3279296528);
+emit_32(1125156848);
+emit_32(1096696726);
+emit_32(3279296528);
+emit_32(1125412897);
+emit_32(1094775629);
+emit_32(3279296528);
+emit_32(1125668880);
+emit_32(1094539595);
+emit_32(3279296528);
+emit_32(1125924864);
+emit_32(1095046372);
+emit_32(3279296528);
+emit_32(1126180848);
+emit_32(1095477441);
+emit_32(3279296528);
+emit_32(1126436897);
+emit_32(1093641594);
+emit_32(3279296528);
+emit_32(1126692880);
+emit_32(1092818357);
+emit_32(3279296528);
+emit_32(1126948864);
+emit_32(1090737490);
+emit_32(3279296528);
+emit_32(1127204848);
+emit_32(1089918898);
+emit_32(3279296528);
+emit_32(1127460897);
+emit_32(1089673426);
+emit_32(3279296528);
+emit_32(1127716880);
+emit_32(1088381686);
+emit_32(3279296528);
+emit_32(1127972864);
+emit_32(1088024583);
+emit_32(3279296528);
+emit_32(1128228848);
+emit_32(1086615842);
+emit_32(3279296528);
+emit_32(1128484897);
+emit_32(1083021134);
+emit_32(3279296528);
+emit_32(1128740880);
+emit_32(1082006448);
+emit_32(3279296528);
+emit_32(1128996864);
+emit_32(1082259554);
+emit_32(3279296528);
+emit_32(1129252848);
+emit_32(1081019948);
+emit_32(3279296528);
+emit_32(1129508897);
+emit_32(1083076688);
+emit_32(3279296528);
+emit_32(1129764880);
+emit_32(1079712290);
+emit_32(3279296528);
+emit_32(1130020864);
+emit_32(1076696460);
+emit_32(3279296528);
+emit_32(1130276848);
+emit_32(1081628248);
+emit_32(3279296528);
+emit_32(1130532897);
+emit_32(1083251486);
+emit_32(3279296528);
+emit_32(1130788880);
+emit_32(1085680051);
+emit_32(3279296528);
+emit_32(1131044864);
+emit_32(1086814757);
+emit_32(3279296528);
+emit_32(1131300848);
+emit_32(1089239043);
+emit_32(3279296528);
+emit_32(1131556897);
+emit_32(1091530717);
+emit_32(3279296528);
+emit_32(1131812880);
+emit_32(1093644321);
+emit_32(3279296528);
+emit_32(1132068864);
+emit_32(1095779536);
+emit_32(3279296528);
+emit_32(1081737216);
+emit_32(1086994839);
+emit_32(3279552512);
+emit_32(1090125824);
+emit_32(1088197052);
+emit_32(3279552512);
+emit_32(1094418484);
+emit_32(1091183439);
+emit_32(3279552512);
+emit_32(1098514432);
+emit_32(1091864132);
+emit_32(3279552512);
+emit_32(1100759066);
+emit_32(1091623966);
+emit_32(3279552512);
+emit_32(1102807040);
+emit_32(1091056907);
+emit_32(3279552512);
+emit_32(1104855066);
+emit_32(1090799639);
+emit_32(3279552512);
+emit_32(1106903040);
+emit_32(1090240475);
+emit_32(3279552512);
+emit_32(1108123661);
+emit_32(1087500672);
+emit_32(3279552512);
+emit_32(1109147648);
+emit_32(1087952231);
+emit_32(3279552512);
+emit_32(1110171661);
+emit_32(1091227636);
+emit_32(3279552512);
+emit_32(1111195648);
+emit_32(1092866173);
+emit_32(3279552512);
+emit_32(1112219661);
+emit_32(1094198074);
+emit_32(3279552512);
+emit_32(1113243648);
+emit_32(1095474505);
+emit_32(3279552512);
+emit_32(1114267661);
+emit_32(1097295462);
+emit_32(3279552512);
+emit_32(1115291648);
+emit_32(1098629985);
+emit_32(3279552512);
+emit_32(1116000263);
+emit_32(1098063859);
+emit_32(3279552512);
+emit_32(1116512256);
+emit_32(1098990748);
+emit_32(3279552512);
+emit_32(1117024263);
+emit_32(1099487406);
+emit_32(3279552512);
+emit_32(1117536256);
+emit_32(1099589956);
+emit_32(3279552512);
+emit_32(1118048263);
+emit_32(1100319660);
+emit_32(3279552512);
+emit_32(1118560256);
+emit_32(1100278032);
+emit_32(3279552512);
+emit_32(1119072263);
+emit_32(1099978821);
+emit_32(3279552512);
+emit_32(1119584256);
+emit_32(1100109840);
+emit_32(3279552512);
+emit_32(1120096263);
+emit_32(1100236089);
+emit_32(3279552512);
+emit_32(1120608322);
+emit_32(1100377385);
+emit_32(3279552512);
+emit_32(1121120289);
+emit_32(1102160173);
+emit_32(3279552512);
+emit_32(1121632256);
+emit_32(1103122924);
+emit_32(3279552512);
+emit_32(1122144223);
+emit_32(1103474721);
+emit_32(3279552512);
+emit_32(1122656322);
+emit_32(1103248805);
+emit_32(3279552512);
+emit_32(1123168289);
+emit_32(1102632819);
+emit_32(3279552512);
+emit_32(1123680256);
+emit_32(1102047399);
+emit_32(3279552512);
+emit_32(1124132848);
+emit_32(1101668391);
+emit_32(3279552512);
+emit_32(1124388897);
+emit_32(1100761740);
+emit_32(3279552512);
+emit_32(1124644880);
+emit_32(1100232943);
+emit_32(3279552512);
+emit_32(1124900864);
+emit_32(1098887306);
+emit_32(3279552512);
+emit_32(1125156848);
+emit_32(1097709860);
+emit_32(3279552512);
+emit_32(1125412897);
+emit_32(1096144126);
+emit_32(3279552512);
+emit_32(1125668880);
+emit_32(1095560803);
+emit_32(3279552512);
+emit_32(1125924864);
+emit_32(1096148740);
+emit_32(3279552512);
+emit_32(1126180848);
+emit_32(1095494428);
+emit_32(3279552512);
+emit_32(1126436897);
+emit_32(1093780950);
+emit_32(3279552512);
+emit_32(1126692880);
+emit_32(1092196667);
+emit_32(3279552512);
+emit_32(1126948864);
+emit_32(1091446736);
+emit_32(3279552512);
+emit_32(1127204848);
+emit_32(1090928352);
+emit_32(3279552512);
+emit_32(1127460897);
+emit_32(1090343508);
+emit_32(3279552512);
+emit_32(1127716880);
+emit_32(1089285495);
+emit_32(3279552512);
+emit_32(1127972864);
+emit_32(1088381665);
+emit_32(3279552512);
+emit_32(1128228848);
+emit_32(1088857949);
+emit_32(3279552512);
+emit_32(1128484897);
+emit_32(1086741545);
+emit_32(3279552512);
+emit_32(1128740880);
+emit_32(1082250913);
+emit_32(3279552512);
+emit_32(1128996864);
+emit_32(1083512120);
+emit_32(3279552512);
+emit_32(1129252848);
+emit_32(1081116417);
+emit_32(3279552512);
+emit_32(1129508897);
+emit_32(1082497517);
+emit_32(3279552512);
+emit_32(1129764880);
+emit_32(1082917200);
+emit_32(3279552512);
+emit_32(1130020864);
+emit_32(1083584702);
+emit_32(3279552512);
+emit_32(1130276848);
+emit_32(1086066325);
+emit_32(3279552512);
+emit_32(1130532897);
+emit_32(1086918125);
+emit_32(3279552512);
+emit_32(1130788880);
+emit_32(1088867533);
+emit_32(3279552512);
+emit_32(1131044864);
+emit_32(1089594720);
+emit_32(3279552512);
+emit_32(1131300848);
+emit_32(1090391575);
+emit_32(3279552512);
+emit_32(1131556897);
+emit_32(1092483358);
+emit_32(3279552512);
+emit_32(1131812880);
+emit_32(1094289405);
+emit_32(3279552512);
+emit_32(1132068864);
+emit_32(1096120323);
+emit_32(3279552512);
+emit_start(Landscape08Vtx)
+emit_32(3279552512);
+emit_32(1106761482);
+emit_32(3271616496);
+emit_32(3279552512);
+emit_32(1106982994);
+emit_32(3271163904);
+emit_32(3279296528);
+emit_32(1107171947);
+emit_32(3271616496);
+emit_32(3279296528);
+emit_32(1106990334);
+emit_32(3271163904);
+emit_32(3279040545);
+emit_32(1107445390);
+emit_32(3271616496);
+emit_32(3279040545);
+emit_32(1107378569);
+emit_32(3271163904);
+emit_32(3278784496);
+emit_32(1107535462);
+emit_32(3271616496);
+emit_32(3278784496);
+emit_32(1107553734);
+emit_32(3271163904);
+emit_32(3278528512);
+emit_32(1107451314);
+emit_32(3271616496);
+emit_32(3278528512);
+emit_32(1107478761);
+emit_32(3271163904);
+emit_32(3278272528);
+emit_32(1106913945);
+emit_32(3271616496);
+emit_32(3278272528);
+emit_32(1106962389);
+emit_32(3271163904);
+emit_32(3278016545);
+emit_32(1106520939);
+emit_32(3271616496);
+emit_32(3278016545);
+emit_32(1105953607);
+emit_32(3271163904);
+emit_32(3277760496);
+emit_32(1106354163);
+emit_32(3271616496);
+emit_32(3277760496);
+emit_32(1105995497);
+emit_32(3271163904);
+emit_32(3277504512);
+emit_32(1106487909);
+emit_32(3271616496);
+emit_32(3277504512);
+emit_32(1105958325);
+emit_32(3271163904);
+emit_32(3277248528);
+emit_32(1106611588);
+emit_32(3271616496);
+emit_32(3277248528);
+emit_32(1106168041);
+emit_32(3271163904);
+emit_32(3276992545);
+emit_32(1106511659);
+emit_32(3271616496);
+emit_32(3276992545);
+emit_32(1106461590);
+emit_32(3271163904);
+emit_32(3276736496);
+emit_32(1106390601);
+emit_32(3271616496);
+emit_32(3276736496);
+emit_32(1106400248);
+emit_32(3271163904);
+emit_32(3276480512);
+emit_32(1105922621);
+emit_32(3271616496);
+emit_32(3276480512);
+emit_32(1105590904);
+emit_32(3271163904);
+emit_32(3276224528);
+emit_32(1105564690);
+emit_32(3271616496);
+emit_32(3276224528);
+emit_32(1105294315);
+emit_32(3271163904);
+emit_32(3275968545);
+emit_32(1105186941);
+emit_32(3271616496);
+emit_32(3275968545);
+emit_32(1104823661);
+emit_32(3271163904);
+emit_32(3275712496);
+emit_32(1104211817);
+emit_32(3271616496);
+emit_32(3275712496);
+emit_32(1103994185);
+emit_32(3271163904);
+emit_32(3275456512);
+emit_32(1103031068);
+emit_32(3271616496);
+emit_32(3275456512);
+emit_32(1102728764);
+emit_32(3271163904);
+emit_32(3275200528);
+emit_32(1102027162);
+emit_32(3271616496);
+emit_32(3275200528);
+emit_32(1102137996);
+emit_32(3271163904);
+emit_32(3274944545);
+emit_32(1100836923);
+emit_32(3271616496);
+emit_32(3274944545);
+emit_32(1101349782);
+emit_32(3271163904);
+emit_32(3274688496);
+emit_32(1099615804);
+emit_32(3271616496);
+emit_32(3274688496);
+emit_32(1100398356);
+emit_32(3271163904);
+emit_32(3274432512);
+emit_32(1098688915);
+emit_32(3271616496);
+emit_32(3274432512);
+emit_32(1099098489);
+emit_32(3271163904);
+emit_32(3274176528);
+emit_32(1097203188);
+emit_32(3271616496);
+emit_32(3274176528);
+emit_32(1097575747);
+emit_32(3271163904);
+emit_32(3273920545);
+emit_32(1095228300);
+emit_32(3271616496);
+emit_32(3273920545);
+emit_32(1095747135);
+emit_32(3271163904);
+emit_32(3273664496);
+emit_32(1093720657);
+emit_32(3271616496);
+emit_32(3273664496);
+emit_32(1094011427);
+emit_32(3271163904);
+emit_32(3273408512);
+emit_32(1091725553);
+emit_32(3271616496);
+emit_32(3273408512);
+emit_32(1092817099);
+emit_32(3271163904);
+emit_32(3273152528);
+emit_32(1087752037);
+emit_32(3271616496);
+emit_32(3273152528);
+emit_32(1090935010);
+emit_32(3271163904);
+emit_32(3272896545);
+emit_32(1085425309);
+emit_32(3271616496);
+emit_32(3272896545);
+emit_32(1086813205);
+emit_32(3271163904);
+emit_32(3272640496);
+emit_32(1084703847);
+emit_32(3271616496);
+emit_32(3272640496);
+emit_32(1085254874);
+emit_32(3271163904);
+emit_32(3272384512);
+emit_32(1086064186);
+emit_32(3271616496);
+emit_32(3272384512);
+emit_32(1084610859);
+emit_32(3271163904);
+emit_32(3272128528);
+emit_32(1088120192);
+emit_32(3271616496);
+emit_32(3272128528);
+emit_32(1085403226);
+emit_32(3271163904);
+emit_32(3271872545);
+emit_32(1088130111);
+emit_32(3271616496);
+emit_32(3271872545);
+emit_32(1085803741);
+emit_32(3271163904);
+emit_32(3271616496);
+emit_32(1088638754);
+emit_32(3271616496);
+emit_32(3271616496);
+emit_32(1084901902);
+emit_32(3271163904);
+emit_32(3271163904);
+emit_32(1089569596);
+emit_32(3271616496);
+emit_32(3271163904);
+emit_32(1086653402);
+emit_32(3271163904);
+emit_32(3270651937);
+emit_32(1090542371);
+emit_32(3271616496);
+emit_32(3270651937);
+emit_32(1089541201);
+emit_32(3271163904);
+emit_32(3270139970);
+emit_32(1091253725);
+emit_32(3271616496);
+emit_32(3270139970);
+emit_32(1090924587);
+emit_32(3271163904);
+emit_32(3269627871);
+emit_32(1091983785);
+emit_32(3271616496);
+emit_32(3269627871);
+emit_32(1091193002);
+emit_32(3271163904);
+emit_32(3269115904);
+emit_32(1091362609);
+emit_32(3271616496);
+emit_32(3269115904);
+emit_32(1091042709);
+emit_32(3271163904);
+emit_32(3268603937);
+emit_32(1092022341);
+emit_32(3271616496);
+emit_32(3268603937);
+emit_32(1091824318);
+emit_32(3271163904);
+emit_32(3268091970);
+emit_32(1093526356);
+emit_32(3271616496);
+emit_32(3268091970);
+emit_32(1094207721);
+emit_32(3271163904);
+emit_32(3267579911);
+emit_32(1095594567);
+emit_32(3271616496);
+emit_32(3267579911);
+emit_32(1096193199);
+emit_32(3271163904);
+emit_32(3267067904);
+emit_32(1097671796);
+emit_32(3271616496);
+emit_32(3267067904);
+emit_32(1098383045);
+emit_32(3271163904);
+emit_32(3266555911);
+emit_32(1099231658);
+emit_32(3271616496);
+emit_32(3266555911);
+emit_32(1099615542);
+emit_32(3271163904);
+emit_32(3266043904);
+emit_32(1101135662);
+emit_32(3271616496);
+emit_32(3266043904);
+emit_32(1101433038);
+emit_32(3271163904);
+emit_32(3265531911);
+emit_32(1102943093);
+emit_32(3271616496);
+emit_32(3265531911);
+emit_32(1103595045);
+emit_32(3271163904);
+emit_32(3265019904);
+emit_32(1104383889);
+emit_32(3271616496);
+emit_32(3265019904);
+emit_32(1105129950);
+emit_32(3271163904);
+emit_32(3264507911);
+emit_32(1105613344);
+emit_32(3271616496);
+emit_32(3264507911);
+emit_32(1106326061);
+emit_32(3271163904);
+emit_32(3263995904);
+emit_32(1106984409);
+emit_32(3271616496);
+emit_32(3263995904);
+emit_32(1107411652);
+emit_32(3271163904);
+emit_32(3263483911);
+emit_32(1107639822);
+emit_32(3271616496);
+emit_32(3263483911);
+emit_32(1107887050);
+emit_32(3271163904);
+emit_32(3262775296);
+emit_32(1108306507);
+emit_32(3271616496);
+emit_32(3262775296);
+emit_32(1108492236);
+emit_32(3271163904);
+emit_32(3261751309);
+emit_32(1108863825);
+emit_32(3271616496);
+emit_32(3261751309);
+emit_32(1109105757);
+emit_32(3271163904);
+emit_32(3260727296);
+emit_32(1109236279);
+emit_32(3271616496);
+emit_32(3260727296);
+emit_32(1109424656);
+emit_32(3271163904);
+emit_32(3259703309);
+emit_32(1109566004);
+emit_32(3271616496);
+emit_32(3259703309);
+emit_32(1109901784);
+emit_32(3271163904);
+emit_32(3258679296);
+emit_32(1109626611);
+emit_32(3271616496);
+emit_32(3258679296);
+emit_32(1109885321);
+emit_32(3271163904);
+emit_32(3257655309);
+emit_32(1109381454);
+emit_32(3271616496);
+emit_32(3257655309);
+emit_32(1109822564);
+emit_32(3271163904);
+emit_32(3256631296);
+emit_32(1109416817);
+emit_32(3271616496);
+emit_32(3256631296);
+emit_32(1109824163);
+emit_32(3271163904);
+emit_32(3255607309);
+emit_32(1109214704);
+emit_32(3271616496);
+emit_32(3255607309);
+emit_32(1109730315);
+emit_32(3271163904);
+emit_32(3254386688);
+emit_32(1109356052);
+emit_32(3271616496);
+emit_32(3254386688);
+emit_32(1109803113);
+emit_32(3271163904);
+emit_32(3252338714);
+emit_32(1109796533);
+emit_32(3271616496);
+emit_32(3252338714);
+emit_32(1109995186);
+emit_32(3271163904);
+emit_32(3250290688);
+emit_32(1110456690);
+emit_32(3271616496);
+emit_32(3250290688);
+emit_32(1110434618);
+emit_32(3271163904);
+emit_32(3248242714);
+emit_32(1110816797);
+emit_32(3271616496);
+emit_32(3248242714);
+emit_32(1111024783);
+emit_32(3271163904);
+emit_32(3245998080);
+emit_32(1111345699);
+emit_32(3271616496);
+emit_32(3245998080);
+emit_32(1111309785);
+emit_32(3271163904);
+emit_32(3241902132);
+emit_32(1111491032);
+emit_32(3271616496);
+emit_32(3241902132);
+emit_32(1111384208);
+emit_32(3271163904);
+emit_32(3237609472);
+emit_32(1111509356);
+emit_32(3271616496);
+emit_32(3237609472);
+emit_32(1111783952);
+emit_32(3271163904);
+emit_32(3229220864);
+emit_32(1111680693);
+emit_32(3271616496);
+emit_32(3229220864);
+emit_32(1111918930);
+emit_32(3271163904);
+emit_32(0);
+emit_32(1111962419);
+emit_32(3271616496);
+emit_32(0);
+emit_32(1112106100);
+emit_32(3271163904);
+emit_32(1081737216);
+emit_32(1112138475);
+emit_32(3271616496);
+emit_32(1081737216);
+emit_32(1112094042);
+emit_32(3271163904);
+emit_32(3279552512);
+emit_32(1106831999);
+emit_32(3271872545);
+emit_32(3279296528);
+emit_32(1107221283);
+emit_32(3271872545);
+emit_32(3279040545);
+emit_32(1107491448);
+emit_32(3271872545);
+emit_32(3278784496);
+emit_32(1107603856);
+emit_32(3271872545);
+emit_32(3278528512);
+emit_32(1107347427);
+emit_32(3271872545);
+emit_32(3278272528);
+emit_32(1107241678);
+emit_32(3271872545);
+emit_32(3278016545);
+emit_32(1107331016);
+emit_32(3271872545);
+emit_32(3277760496);
+emit_32(1107339012);
+emit_32(3271872545);
+emit_32(3277504512);
+emit_32(1106970935);
+emit_32(3271872545);
+emit_32(3277248528);
+emit_32(1106766096);
+emit_32(3271872545);
+emit_32(3276992545);
+emit_32(1106540075);
+emit_32(3271872545);
+emit_32(3276736496);
+emit_32(1106320661);
+emit_32(3271872545);
+emit_32(3276480512);
+emit_32(1106168093);
+emit_32(3271872545);
+emit_32(3276224528);
+emit_32(1105508591);
+emit_32(3271872545);
+emit_32(3275968545);
+emit_32(1104919711);
+emit_32(3271872545);
+emit_32(3275712496);
+emit_32(1103890062);
+emit_32(3271872545);
+emit_32(3275456512);
+emit_32(1102724412);
+emit_32(3271872545);
+emit_32(3275200528);
+emit_32(1101678300);
+emit_32(3271872545);
+emit_32(3274944545);
+emit_32(1100687815);
+emit_32(3271872545);
+emit_32(3274688496);
+emit_32(1100014525);
+emit_32(3271872545);
+emit_32(3274432512);
+emit_32(1099108503);
+emit_32(3271872545);
+emit_32(3274176528);
+emit_32(1097338769);
+emit_32(3271872545);
+emit_32(3273920545);
+emit_32(1095563634);
+emit_32(3271872545);
+emit_32(3273664496);
+emit_32(1093020942);
+emit_32(3271872545);
+emit_32(3273408512);
+emit_32(1090382432);
+emit_32(3271872545);
+emit_32(3273152528);
+emit_32(1088955592);
+emit_32(3271872545);
+emit_32(3272896545);
+emit_32(1086743621);
+emit_32(3271872545);
+emit_32(3272640496);
+emit_32(1086106171);
+emit_32(3271872545);
+emit_32(3272384512);
+emit_32(1087622538);
+emit_32(3271872545);
+emit_32(3272128528);
+emit_32(1089541390);
+emit_32(3271872545);
+emit_32(3271872545);
+emit_32(1090739493);
+emit_32(3271872545);
+emit_32(3271616496);
+emit_32(1091296192);
+emit_32(3271872545);
+emit_32(3271163904);
+emit_32(1091536652);
+emit_32(3271872545);
+emit_32(3270651937);
+emit_32(1092000751);
+emit_32(3271872545);
+emit_32(3270139970);
+emit_32(1092665265);
+emit_32(3271872545);
+emit_32(3269627871);
+emit_32(1092064683);
+emit_32(3271872545);
+emit_32(3269115904);
+emit_32(1092005921);
+emit_32(3271872545);
+emit_32(3268603937);
+emit_32(1092949220);
+emit_32(3271872545);
+emit_32(3268091970);
+emit_32(1093979446);
+emit_32(3271872545);
+emit_32(3267579911);
+emit_32(1095270977);
+emit_32(3271872545);
+emit_32(3267067904);
+emit_32(1097543031);
+emit_32(3271872545);
+emit_32(3266555911);
+emit_32(1099248173);
+emit_32(3271872545);
+emit_32(3266043904);
+emit_32(1100580441);
+emit_32(3271872545);
+emit_32(3265531911);
+emit_32(1102805677);
+emit_32(3271872545);
+emit_32(3265019904);
+emit_32(1104235935);
+emit_32(3271872545);
+emit_32(3264507911);
+emit_32(1105586553);
+emit_32(3271872545);
+emit_32(3263995904);
+emit_32(1106838605);
+emit_32(3271872545);
+emit_32(3263483911);
+emit_32(1107360534);
+emit_32(3271872545);
+emit_32(3262775296);
+emit_32(1107828487);
+emit_32(3271872545);
+emit_32(3261751309);
+emit_32(1108377181);
+emit_32(3271872545);
+emit_32(3260727296);
+emit_32(1108949179);
+emit_32(3271872545);
+emit_32(3259703309);
+emit_32(1109077157);
+emit_32(3271872545);
+emit_32(3258679296);
+emit_32(1109165841);
+emit_32(3271872545);
+emit_32(3257655309);
+emit_32(1109169589);
+emit_32(3271872545);
+emit_32(3256631296);
+emit_32(1108993167);
+emit_32(3271872545);
+emit_32(3255607309);
+emit_32(1108949362);
+emit_32(3271872545);
+emit_32(3254386688);
+emit_32(1109262310);
+emit_32(3271872545);
+emit_32(3252338714);
+emit_32(1109890250);
+emit_32(3271872545);
+emit_32(3250290688);
+emit_32(1110249177);
+emit_32(3271872545);
+emit_32(3248242714);
+emit_32(1110644779);
+emit_32(3271872545);
+emit_32(3245998080);
+emit_32(1111031572);
+emit_32(3271872545);
+emit_32(3241902132);
+emit_32(1111347089);
+emit_32(3271872545);
+emit_32(3237609472);
+emit_32(1111265300);
+emit_32(3271872545);
+emit_32(3229220864);
+emit_32(1111507023);
+emit_32(3271872545);
+emit_32(0);
+emit_32(1111638698);
+emit_32(3271872545);
+emit_32(1081737216);
+emit_32(1111780334);
+emit_32(3271872545);
+emit_32(3279552512);
+emit_32(1106638851);
+emit_32(3272128528);
+emit_32(3279296528);
+emit_32(1106692434);
+emit_32(3272128528);
+emit_32(3279040545);
+emit_32(1107345539);
+emit_32(3272128528);
+emit_32(3278784496);
+emit_32(1107597459);
+emit_32(3272128528);
+emit_32(3278528512);
+emit_32(1107379225);
+emit_32(3272128528);
+emit_32(3278272528);
+emit_32(1107456950);
+emit_32(3272128528);
+emit_32(3278016545);
+emit_32(1107643492);
+emit_32(3272128528);
+emit_32(3277760496);
+emit_32(1107464788);
+emit_32(3272128528);
+emit_32(3277504512);
+emit_32(1107237641);
+emit_32(3272128528);
+emit_32(3277248528);
+emit_32(1107040666);
+emit_32(3272128528);
+emit_32(3276992545);
+emit_32(1106355945);
+emit_32(3272128528);
+emit_32(3276736496);
+emit_32(1106248938);
+emit_32(3272128528);
+emit_32(3276480512);
+emit_32(1106022184);
+emit_32(3272128528);
+emit_32(3276224528);
+emit_32(1105264378);
+emit_32(3272128528);
+emit_32(3275968545);
+emit_32(1104551084);
+emit_32(3272128528);
+emit_32(3275712496);
+emit_32(1103522693);
+emit_32(3272128528);
+emit_32(3275456512);
+emit_32(1102465624);
+emit_32(3272128528);
+emit_32(3275200528);
+emit_32(1101580416);
+emit_32(3272128528);
+emit_32(3274944545);
+emit_32(1100781558);
+emit_32(3272128528);
+emit_32(3274688496);
+emit_32(1099917584);
+emit_32(3272128528);
+emit_32(3274432512);
+emit_32(1098955253);
+emit_32(3272128528);
+emit_32(3274176528);
+emit_32(1097496474);
+emit_32(3272128528);
+emit_32(3273920545);
+emit_32(1095188768);
+emit_32(3272128528);
+emit_32(3273664496);
+emit_32(1092550792);
+emit_32(3272128528);
+emit_32(3273408512);
+emit_32(1090256602);
+emit_32(3272128528);
+emit_32(3273152528);
+emit_32(1088560866);
+emit_32(3272128528);
+emit_32(3272896545);
+emit_32(1086795610);
+emit_32(3272128528);
+emit_32(3272640496);
+emit_32(1087160745);
+emit_32(3272128528);
+emit_32(3272384512);
+emit_32(1088465991);
+emit_32(3272128528);
+emit_32(3272128528);
+emit_32(1090214701);
+emit_32(3272128528);
+emit_32(3271872545);
+emit_32(1091916110);
+emit_32(3272128528);
+emit_32(3271616496);
+emit_32(1093188714);
+emit_32(3272128528);
+emit_32(3271163904);
+emit_32(1092821503);
+emit_32(3272128528);
+emit_32(3270651937);
+emit_32(1092462943);
+emit_32(3272128528);
+emit_32(3270139970);
+emit_32(1092871730);
+emit_32(3272128528);
+emit_32(3269627871);
+emit_32(1092567339);
+emit_32(3272128528);
+emit_32(3269115904);
+emit_32(1091624103);
+emit_32(3272128528);
+emit_32(3268603937);
+emit_32(1092971030);
+emit_32(3272128528);
+emit_32(3268091970);
+emit_32(1093964556);
+emit_32(3272128528);
+emit_32(3267579911);
+emit_32(1095084959);
+emit_32(3272128528);
+emit_32(3267067904);
+emit_32(1096871523);
+emit_32(3272128528);
+emit_32(3266555911);
+emit_32(1098883740);
+emit_32(3272128528);
+emit_32(3266043904);
+emit_32(1100410939);
+emit_32(3272128528);
+emit_32(3265531911);
+emit_32(1102172809);
+emit_32(3272128528);
+emit_32(3265019904);
+emit_32(1103650777);
+emit_32(3272128528);
+emit_32(3264507911);
+emit_32(1105013087);
+emit_32(3272128528);
+emit_32(3263995904);
+emit_32(1105804657);
+emit_32(3272128528);
+emit_32(3263483911);
+emit_32(1106638642);
+emit_32(3272128528);
+emit_32(3262775296);
+emit_32(1107472469);
+emit_32(3272128528);
+emit_32(3261751309);
+emit_32(1107957436);
+emit_32(3272128528);
+emit_32(3260727296);
+emit_32(1108447173);
+emit_32(3272128528);
+emit_32(3259703309);
+emit_32(1108395845);
+emit_32(3272128528);
+emit_32(3258679296);
+emit_32(1108480990);
+emit_32(3272128528);
+emit_32(3257655309);
+emit_32(1108416004);
+emit_32(3272128528);
+emit_32(3256631296);
+emit_32(1108454539);
+emit_32(3272128528);
+emit_32(3255607309);
+emit_32(1108650702);
+emit_32(3272128528);
+emit_32(3254386688);
+emit_32(1108972221);
+emit_32(3272128528);
+emit_32(3252338714);
+emit_32(1109614028);
+emit_32(3272128528);
+emit_32(3250290688);
+emit_32(1110107567);
+emit_32(3272128528);
+emit_32(3248242714);
+emit_32(1110378204);
+emit_32(3272128528);
+emit_32(3245998080);
+emit_32(1110643966);
+emit_32(3272128528);
+emit_32(3241902132);
+emit_32(1110789770);
+emit_32(3272128528);
+emit_32(3237609472);
+emit_32(1111079780);
+emit_32(3272128528);
+emit_32(3229220864);
+emit_32(1111310572);
+emit_32(3272128528);
+emit_32(0);
+emit_32(1111599245);
+emit_32(3272128528);
+emit_32(1081737216);
+emit_32(1111464346);
+emit_32(3272128528);
+emit_32(3279552512);
+emit_32(1105805967);
+emit_32(3272384512);
+emit_32(3279296528);
+emit_32(1106518894);
+emit_32(3272384512);
+emit_32(3279040545);
+emit_32(1107073958);
+emit_32(3272384512);
+emit_32(3278784496);
+emit_32(1107138550);
+emit_32(3272384512);
+emit_32(3278528512);
+emit_32(1107533837);
+emit_32(3272384512);
+emit_32(3278272528);
+emit_32(1107630542);
+emit_32(3272384512);
+emit_32(3278016545);
+emit_32(1107506050);
+emit_32(3272384512);
+emit_32(3277760496);
+emit_32(1107593265);
+emit_32(3272384512);
+emit_32(3277504512);
+emit_32(1107310490);
+emit_32(3272384512);
+emit_32(3277248528);
+emit_32(1106912058);
+emit_32(3272384512);
+emit_32(3276992545);
+emit_32(1106372356);
+emit_32(3272384512);
+emit_32(3276736496);
+emit_32(1106038489);
+emit_32(3272384512);
+emit_32(3276480512);
+emit_32(1105442531);
+emit_32(3272384512);
+emit_32(3276224528);
+emit_32(1104607235);
+emit_32(3272384512);
+emit_32(3275968545);
+emit_32(1103592686);
+emit_32(3272384512);
+emit_32(3275712496);
+emit_32(1102531265);
+emit_32(3272384512);
+emit_32(3275456512);
+emit_32(1101975100);
+emit_32(3272384512);
+emit_32(3275200528);
+emit_32(1101237322);
+emit_32(3272384512);
+emit_32(3274944545);
+emit_32(1100189794);
+emit_32(3272384512);
+emit_32(3274688496);
+emit_32(1099519335);
+emit_32(3272384512);
+emit_32(3274432512);
+emit_32(1098076861);
+emit_32(3272384512);
+emit_32(3274176528);
+emit_32(1096265132);
+emit_32(3272384512);
+emit_32(3273920545);
+emit_32(1094474583);
+emit_32(3272384512);
+emit_32(3273664496);
+emit_32(1091850260);
+emit_32(3272384512);
+emit_32(3273408512);
+emit_32(1089607366);
+emit_32(3272384512);
+emit_32(3273152528);
+emit_32(1087214767);
+emit_32(3272384512);
+emit_32(3272896545);
+emit_32(1087594331);
+emit_32(3272384512);
+emit_32(3272640496);
+emit_32(1087250901);
+emit_32(3272384512);
+emit_32(3272384512);
+emit_32(1087478526);
+emit_32(3272384512);
+emit_32(3272128528);
+emit_32(1089739004);
+emit_32(3272384512);
+emit_32(3271872545);
+emit_32(1091784944);
+emit_32(3272384512);
+emit_32(3271616496);
+emit_32(1093147086);
+emit_32(3272384512);
+emit_32(3271163904);
+emit_32(1093336249);
+emit_32(3272384512);
+emit_32(3270651937);
+emit_32(1091955799);
+emit_32(3272384512);
+emit_32(3270139970);
+emit_32(1092128436);
+emit_32(3272384512);
+emit_32(3269627871);
+emit_32(1091415572);
+emit_32(3272384512);
+emit_32(3269115904);
+emit_32(1091890787);
+emit_32(3272384512);
+emit_32(3268603937);
+emit_32(1092277691);
+emit_32(3272384512);
+emit_32(3268091970);
+emit_32(1093164912);
+emit_32(3272384512);
+emit_32(3267579911);
+emit_32(1094506355);
+emit_32(3272384512);
+emit_32(3267067904);
+emit_32(1095937556);
+emit_32(3272384512);
+emit_32(3266555911);
+emit_32(1098124362);
+emit_32(3272384512);
+emit_32(3266043904);
+emit_32(1100012533);
+emit_32(3272384512);
+emit_32(3265531911);
+emit_32(1101424440);
+emit_32(3272384512);
+emit_32(3265019904);
+emit_32(1102978797);
+emit_32(3272384512);
+emit_32(3264507911);
+emit_32(1103996754);
+emit_32(3272384512);
+emit_32(3263995904);
+emit_32(1104943566);
+emit_32(3272384512);
+emit_32(3263483911);
+emit_32(1106152836);
+emit_32(3272384512);
+emit_32(3262775296);
+emit_32(1107158211);
+emit_32(3272384512);
+emit_32(3261751309);
+emit_32(1107529328);
+emit_32(3272384512);
+emit_32(3260727296);
+emit_32(1107846470);
+emit_32(3272384512);
+emit_32(3259703309);
+emit_32(1107994739);
+emit_32(3272384512);
+emit_32(3258679296);
+emit_32(1107829064);
+emit_32(3272384512);
+emit_32(3257655309);
+emit_32(1107762165);
+emit_32(3272384512);
+emit_32(3256631296);
+emit_32(1107865711);
+emit_32(3272384512);
+emit_32(3255607309);
+emit_32(1108367403);
+emit_32(3272384512);
+emit_32(3254386688);
+emit_32(1109093568);
+emit_32(3272384512);
+emit_32(3252338714);
+emit_32(1109542411);
+emit_32(3272384512);
+emit_32(3250290688);
+emit_32(1110096793);
+emit_32(3272384512);
+emit_32(3248242714);
+emit_32(1110312223);
+emit_32(3272384512);
+emit_32(3245998080);
+emit_32(1110368505);
+emit_32(3272384512);
+emit_32(3241902132);
+emit_32(1110406752);
+emit_32(3272384512);
+emit_32(3237609472);
+emit_32(1110868545);
+emit_32(3272384512);
+emit_32(3229220864);
+emit_32(1111168464);
+emit_32(3272384512);
+emit_32(0);
+emit_32(1111261315);
+emit_32(3272384512);
+emit_32(1081737216);
+emit_32(1111298697);
+emit_32(3272384512);
+emit_32(3279552512);
+emit_32(1105376733);
+emit_32(3272640496);
+emit_32(3279296528);
+emit_32(1106021659);
+emit_32(3272640496);
+emit_32(3279040545);
+emit_32(1106269805);
+emit_32(3272640496);
+emit_32(3278784496);
+emit_32(1106578978);
+emit_32(3272640496);
+emit_32(3278528512);
+emit_32(1107451288);
+emit_32(3272640496);
+emit_32(3278272528);
+emit_32(1107638616);
+emit_32(3272640496);
+emit_32(3278016545);
+emit_32(1107539132);
+emit_32(3272640496);
+emit_32(3277760496);
+emit_32(1107436844);
+emit_32(3272640496);
+emit_32(3277504512);
+emit_32(1107235701);
+emit_32(3272640496);
+emit_32(3277248528);
+emit_32(1107161462);
+emit_32(3272640496);
+emit_32(3276992545);
+emit_32(1106065280);
+emit_32(3272640496);
+emit_32(3276736496);
+emit_32(1105372171);
+emit_32(3272640496);
+emit_32(3276480512);
+emit_32(1104578662);
+emit_32(3272640496);
+emit_32(3276224528);
+emit_32(1103665876);
+emit_32(3272640496);
+emit_32(3275968545);
+emit_32(1102629464);
+emit_32(3272640496);
+emit_32(3275712496);
+emit_32(1101635885);
+emit_32(3272640496);
+emit_32(3275456512);
+emit_32(1101146882);
+emit_32(3272640496);
+emit_32(3275200528);
+emit_32(1100175848);
+emit_32(3272640496);
+emit_32(3274944545);
+emit_32(1099030961);
+emit_32(3272640496);
+emit_32(3274688496);
+emit_32(1097580151);
+emit_32(3272640496);
+emit_32(3274432512);
+emit_32(1096760374);
+emit_32(3272640496);
+emit_32(3274176528);
+emit_32(1095282721);
+emit_32(3272640496);
+emit_32(3273920545);
+emit_32(1093280465);
+emit_32(3272640496);
+emit_32(3273664496);
+emit_32(1091084065);
+emit_32(3272640496);
+emit_32(3273408512);
+emit_32(1089099247);
+emit_32(3272640496);
+emit_32(3273152528);
+emit_32(1087789576);
+emit_32(3272640496);
+emit_32(3272896545);
+emit_32(1085020140);
+emit_32(3272640496);
+emit_32(3272640496);
+emit_32(1085329784);
+emit_32(3272640496);
+emit_32(3272384512);
+emit_32(1086214027);
+emit_32(3272640496);
+emit_32(3272128528);
+emit_32(1088756363);
+emit_32(3272640496);
+emit_32(3271872545);
+emit_32(1091099217);
+emit_32(3272640496);
+emit_32(3271616496);
+emit_32(1092281151);
+emit_32(3272640496);
+emit_32(3271163904);
+emit_32(1092410891);
+emit_32(3272640496);
+emit_32(3270651937);
+emit_32(1092270707);
+emit_32(3272640496);
+emit_32(3270139970);
+emit_32(1092436770);
+emit_32(3272640496);
+emit_32(3269627871);
+emit_32(1091996431);
+emit_32(3272640496);
+emit_32(3269115904);
+emit_32(1092130995);
+emit_32(3272640496);
+emit_32(3268603937);
+emit_32(1092506794);
+emit_32(3272640496);
+emit_32(3268091970);
+emit_32(1093085115);
+emit_32(3272640496);
+emit_32(3267579911);
+emit_32(1094064590);
+emit_32(3272640496);
+emit_32(3267067904);
+emit_32(1096463103);
+emit_32(3272640496);
+emit_32(3266555911);
+emit_32(1098582275);
+emit_32(3272640496);
+emit_32(3266043904);
+emit_32(1099782894);
+emit_32(3272640496);
+emit_32(3265531911);
+emit_32(1101033216);
+emit_32(3272640496);
+emit_32(3265019904);
+emit_32(1102204423);
+emit_32(3272640496);
+emit_32(3264507911);
+emit_32(1103112962);
+emit_32(3272640496);
+emit_32(3263995904);
+emit_32(1104476688);
+emit_32(3272640496);
+emit_32(3263483911);
+emit_32(1105600027);
+emit_32(3272640496);
+emit_32(3262775296);
+emit_32(1106773279);
+emit_32(3272640496);
+emit_32(3261751309);
+emit_32(1107254942);
+emit_32(3272640496);
+emit_32(3260727296);
+emit_32(1107325721);
+emit_32(3272640496);
+emit_32(3259703309);
+emit_32(1107680454);
+emit_32(3272640496);
+emit_32(3258679296);
+emit_32(1107700272);
+emit_32(3272640496);
+emit_32(3257655309);
+emit_32(1107704204);
+emit_32(3272640496);
+emit_32(3256631296);
+emit_32(1107913946);
+emit_32(3272640496);
+emit_32(3255607309);
+emit_32(1108409896);
+emit_32(3272640496);
+emit_32(3254386688);
+emit_32(1108866499);
+emit_32(3272640496);
+emit_32(3252338714);
+emit_32(1109485866);
+emit_32(3272640496);
+emit_32(3250290688);
+emit_32(1110027901);
+emit_32(3272640496);
+emit_32(3248242714);
+emit_32(1110441984);
+emit_32(3272640496);
+emit_32(3245998080);
+emit_32(1110489956);
+emit_32(3272640496);
+emit_32(3241902132);
+emit_32(1110446834);
+emit_32(3272640496);
+emit_32(3237609472);
+emit_32(1110725100);
+emit_32(3272640496);
+emit_32(3229220864);
+emit_32(1110855752);
+emit_32(3272640496);
+emit_32(0);
+emit_32(1110654897);
+emit_32(3272640496);
+emit_32(1081737216);
+emit_32(1110766990);
+emit_32(3272640496);
+emit_32(3279552512);
+emit_32(1104945611);
+emit_32(3272896545);
+emit_32(3279296528);
+emit_32(1105445886);
+emit_32(3272896545);
+emit_32(3279040545);
+emit_32(1105654868);
+emit_32(3272896545);
+emit_32(3278784496);
+emit_32(1106191896);
+emit_32(3272896545);
+emit_32(3278528512);
+emit_32(1106771024);
+emit_32(3272896545);
+emit_32(3278272528);
+emit_32(1107252111);
+emit_32(3272896545);
+emit_32(3278016545);
+emit_32(1107581652);
+emit_32(3272896545);
+emit_32(3277760496);
+emit_32(1107333218);
+emit_32(3272896545);
+emit_32(3277504512);
+emit_32(1106792310);
+emit_32(3272896545);
+emit_32(3277248528);
+emit_32(1106541229);
+emit_32(3272896545);
+emit_32(3276992545);
+emit_32(1105789924);
+emit_32(3272896545);
+emit_32(3276736496);
+emit_32(1104474486);
+emit_32(3272896545);
+emit_32(3276480512);
+emit_32(1103776134);
+emit_32(3272896545);
+emit_32(3276224528);
+emit_32(1102639635);
+emit_32(3272896545);
+emit_32(3275968545);
+emit_32(1101601964);
+emit_32(3272896545);
+emit_32(3275712496);
+emit_32(1100849820);
+emit_32(3272896545);
+emit_32(3275456512);
+emit_32(1100186229);
+emit_32(3272896545);
+emit_32(3275200528);
+emit_32(1099765540);
+emit_32(3272896545);
+emit_32(3274944545);
+emit_32(1098773850);
+emit_32(3272896545);
+emit_32(3274688496);
+emit_32(1097286550);
+emit_32(3272896545);
+emit_32(3274432512);
+emit_32(1095977088);
+emit_32(3272896545);
+emit_32(3274176528);
+emit_32(1094472381);
+emit_32(3272896545);
+emit_32(3273920545);
+emit_32(1093136810);
+emit_32(3272896545);
+emit_32(3273664496);
+emit_32(1090824857);
+emit_32(3272896545);
+emit_32(3273408512);
+emit_32(1088942045);
+emit_32(3272896545);
+emit_32(3273152528);
+emit_32(1087994509);
+emit_32(3272896545);
+emit_32(3272896545);
+emit_32(1085242018);
+emit_32(3272896545);
+emit_32(3272640496);
+emit_32(1082368710);
+emit_32(3272896545);
+emit_32(3272384512);
+emit_32(1083511616);
+emit_32(3272896545);
+emit_32(3272128528);
+emit_32(1086745865);
+emit_32(3272896545);
+emit_32(3271872545);
+emit_32(1089841387);
+emit_32(3272896545);
+emit_32(3271616496);
+emit_32(1091645420);
+emit_32(3272896545);
+emit_32(3271163904);
+emit_32(1091360837);
+emit_32(3272896545);
+emit_32(3270651937);
+emit_32(1091891626);
+emit_32(3272896545);
+emit_32(3270139970);
+emit_32(1091846705);
+emit_32(3272896545);
+emit_32(3269627871);
+emit_32(1092497818);
+emit_32(3272896545);
+emit_32(3269115904);
+emit_32(1091767087);
+emit_32(3272896545);
+emit_32(3268603937);
+emit_32(1092058643);
+emit_32(3272896545);
+emit_32(3268091970);
+emit_32(1092782286);
+emit_32(3272896545);
+emit_32(3267579911);
+emit_32(1093942536);
+emit_32(3272896545);
+emit_32(3267067904);
+emit_32(1096261042);
+emit_32(3272896545);
+emit_32(3266555911);
+emit_32(1098731278);
+emit_32(3272896545);
+emit_32(3266043904);
+emit_32(1099753639);
+emit_32(3272896545);
+emit_32(3265531911);
+emit_32(1100349178);
+emit_32(3272896545);
+emit_32(3265019904);
+emit_32(1101287129);
+emit_32(3272896545);
+emit_32(3264507911);
+emit_32(1102874726);
+emit_32(3272896545);
+emit_32(3263995904);
+emit_32(1104299216);
+emit_32(3272896545);
+emit_32(3263483911);
+emit_32(1105581310);
+emit_32(3272896545);
+emit_32(3262775296);
+emit_32(1106449741);
+emit_32(3272896545);
+emit_32(3261751309);
+emit_32(1106767197);
+emit_32(3272896545);
+emit_32(3260727296);
+emit_32(1106996783);
+emit_32(3272896545);
+emit_32(3259703309);
+emit_32(1107252216);
+emit_32(3272896545);
+emit_32(3258679296);
+emit_32(1107420643);
+emit_32(3272896545);
+emit_32(3257655309);
+emit_32(1107319351);
+emit_32(3272896545);
+emit_32(3256631296);
+emit_32(1107826600);
+emit_32(3272896545);
+emit_32(3255607309);
+emit_32(1108251299);
+emit_32(3272896545);
+emit_32(3254386688);
+emit_32(1108771550);
+emit_32(3272896545);
+emit_32(3252338714);
+emit_32(1109302182);
+emit_32(3272896545);
+emit_32(3250290688);
+emit_32(1110005147);
+emit_32(3272896545);
+emit_32(3248242714);
+emit_32(1110267291);
+emit_32(3272896545);
+emit_32(3245998080);
+emit_32(1110424394);
+emit_32(3272896545);
+emit_32(3241902132);
+emit_32(1110409006);
+emit_32(3272896545);
+emit_32(3237609472);
+emit_32(1110530064);
+emit_32(3272896545);
+emit_32(3229220864);
+emit_32(1110513759);
+emit_32(3272896545);
+emit_32(0);
+emit_32(1110086228);
+emit_32(3272896545);
+emit_32(1081737216);
+emit_32(1110289075);
+emit_32(3272896545);
+emit_32(3279552512);
+emit_32(1105076106);
+emit_32(3273152528);
+emit_32(3279296528);
+emit_32(1105334790);
+emit_32(3273152528);
+emit_32(3279040545);
+emit_32(1105218241);
+emit_32(3273152528);
+emit_32(3278784496);
+emit_32(1105960947);
+emit_32(3273152528);
+emit_32(3278528512);
+emit_32(1107217980);
+emit_32(3273152528);
+emit_32(3278272528);
+emit_32(1107295574);
+emit_32(3273152528);
+emit_32(3278016545);
+emit_32(1107365331);
+emit_32(3273152528);
+emit_32(3277760496);
+emit_32(1107416134);
+emit_32(3273152528);
+emit_32(3277504512);
+emit_32(1106446438);
+emit_32(3273152528);
+emit_32(3277248528);
+emit_32(1105782794);
+emit_32(3273152528);
+emit_32(3276992545);
+emit_32(1105013821);
+emit_32(3273152528);
+emit_32(3276736496);
+emit_32(1103915857);
+emit_32(3273152528);
+emit_32(3276480512);
+emit_32(1103026979);
+emit_32(3273152528);
+emit_32(3276224528);
+emit_32(1101908673);
+emit_32(3273152528);
+emit_32(3275968545);
+emit_32(1100983409);
+emit_32(3273152528);
+emit_32(3275712496);
+emit_32(1100304771);
+emit_32(3273152528);
+emit_32(3275456512);
+emit_32(1099637090);
+emit_32(3273152528);
+emit_32(3275200528);
+emit_32(1099595147);
+emit_32(3273152528);
+emit_32(3274944545);
+emit_32(1098779302);
+emit_32(3273152528);
+emit_32(3274688496);
+emit_32(1096597425);
+emit_32(3273152528);
+emit_32(3274432512);
+emit_32(1094709255);
+emit_32(3273152528);
+emit_32(3274176528);
+emit_32(1093592941);
+emit_32(3273152528);
+emit_32(3273920545);
+emit_32(1091822808);
+emit_32(3273152528);
+emit_32(3273664496);
+emit_32(1090429890);
+emit_32(3273152528);
+emit_32(3273408512);
+emit_32(1088328040);
+emit_32(3273152528);
+emit_32(3273152528);
+emit_32(1087421546);
+emit_32(3273152528);
+emit_32(3272896545);
+emit_32(1085534382);
+emit_32(3273152528);
+emit_32(3272640496);
+emit_32(1082800241);
+emit_32(3273152528);
+emit_32(3272384512);
+emit_32(1078440703);
+emit_32(3273152528);
+emit_32(3272128528);
+emit_32(1084200594);
+emit_32(3273152528);
+emit_32(3271872545);
+emit_32(1087678322);
+emit_32(3273152528);
+emit_32(3271616496);
+emit_32(1089442320);
+emit_32(3273152528);
+emit_32(3271163904);
+emit_32(1090607372);
+emit_32(3273152528);
+emit_32(3270651937);
+emit_32(1091531566);
+emit_32(3273152528);
+emit_32(3270139970);
+emit_32(1091674141);
+emit_32(3273152528);
+emit_32(3269627871);
+emit_32(1091966117);
+emit_32(3273152528);
+emit_32(3269115904);
+emit_32(1091542251);
+emit_32(3273152528);
+emit_32(3268603937);
+emit_32(1091342288);
+emit_32(3273152528);
+emit_32(3268091970);
+emit_32(1092373405);
+emit_32(3273152528);
+emit_32(3267579911);
+emit_32(1093066975);
+emit_32(3273152528);
+emit_32(3267067904);
+emit_32(1096397252);
+emit_32(3273152528);
+emit_32(3266555911);
+emit_32(1099075053);
+emit_32(3273152528);
+emit_32(3266043904);
+emit_32(1099796788);
+emit_32(3273152528);
+emit_32(3265531911);
+emit_32(1100246942);
+emit_32(3273152528);
+emit_32(3265019904);
+emit_32(1101066614);
+emit_32(3273152528);
+emit_32(3264507911);
+emit_32(1102540440);
+emit_32(3273152528);
+emit_32(3263995904);
+emit_32(1104067323);
+emit_32(3273152528);
+emit_32(3263483911);
+emit_32(1105420039);
+emit_32(3273152528);
+emit_32(3262775296);
+emit_32(1106257484);
+emit_32(3273152528);
+emit_32(3261751309);
+emit_32(1106472337);
+emit_32(3273152528);
+emit_32(3260727296);
+emit_32(1106731912);
+emit_32(3273152528);
+emit_32(3259703309);
+emit_32(1106956465);
+emit_32(3273152528);
+emit_32(3258679296);
+emit_32(1106821199);
+emit_32(3273152528);
+emit_32(3257655309);
+emit_32(1106379643);
+emit_32(3273152528);
+emit_32(3256631296);
+emit_32(1107530954);
+emit_32(3273152528);
+emit_32(3255607309);
+emit_32(1108003992);
+emit_32(3273152528);
+emit_32(3254386688);
+emit_32(1108557352);
+emit_32(3273152528);
+emit_32(3252338714);
+emit_32(1109091706);
+emit_32(3273152528);
+emit_32(3250290688);
+emit_32(1109753830);
+emit_32(3273152528);
+emit_32(3248242714);
+emit_32(1109939664);
+emit_32(3273152528);
+emit_32(3245998080);
+emit_32(1109999118);
+emit_32(3273152528);
+emit_32(3241902132);
+emit_32(1110432914);
+emit_32(3273152528);
+emit_32(3237609472);
+emit_32(1110537457);
+emit_32(3273152528);
+emit_32(3229220864);
+emit_32(1110226685);
+emit_32(3273152528);
+emit_32(0);
+emit_32(1109884928);
+emit_32(3273152528);
+emit_32(1081737216);
+emit_32(1110106754);
+emit_32(3273152528);
+emit_32(3279552512);
+emit_32(1104836087);
+emit_32(3273408512);
+emit_32(3279296528);
+emit_32(1105132991);
+emit_32(3273408512);
+emit_32(3279040545);
+emit_32(1105059486);
+emit_32(3273408512);
+emit_32(3278784496);
+emit_32(1105434981);
+emit_32(3273408512);
+emit_32(3278528512);
+emit_32(1106513389);
+emit_32(3273408512);
+emit_32(3278272528);
+emit_32(1106841489);
+emit_32(3273408512);
+emit_32(3278016545);
+emit_32(1107378805);
+emit_32(3273408512);
+emit_32(3277760496);
+emit_32(1106914784);
+emit_32(3273408512);
+emit_32(3277504512);
+emit_32(1106011069);
+emit_32(3273408512);
+emit_32(3277248528);
+emit_32(1104591349);
+emit_32(3273408512);
+emit_32(3276992545);
+emit_32(1103757469);
+emit_32(3273408512);
+emit_32(3276736496);
+emit_32(1103249329);
+emit_32(3273408512);
+emit_32(3276480512);
+emit_32(1103030387);
+emit_32(3273408512);
+emit_32(3276224528);
+emit_32(1102188275);
+emit_32(3273408512);
+emit_32(3275968545);
+emit_32(1101338667);
+emit_32(3273408512);
+emit_32(3275712496);
+emit_32(1100738567);
+emit_32(3273408512);
+emit_32(3275456512);
+emit_32(1099970956);
+emit_32(3273408512);
+emit_32(3275200528);
+emit_32(1098288778);
+emit_32(3273408512);
+emit_32(3274944545);
+emit_32(1096724093);
+emit_32(3273408512);
+emit_32(3274688496);
+emit_32(1094523761);
+emit_32(3273408512);
+emit_32(3274432512);
+emit_32(1091893849);
+emit_32(3273408512);
+emit_32(3274176528);
+emit_32(1091370138);
+emit_32(3273408512);
+emit_32(3273920545);
+emit_32(1090570504);
+emit_32(3273408512);
+emit_32(3273664496);
+emit_32(1087323819);
+emit_32(3273408512);
+emit_32(3273408512);
+emit_32(1085981977);
+emit_32(3273408512);
+emit_32(3273152528);
+emit_32(1085699218);
+emit_32(3273408512);
+emit_32(3272896545);
+emit_32(1086443980);
+emit_32(3273408512);
+emit_32(3272640496);
+emit_32(1082061813);
+emit_32(3273408512);
+emit_32(3272384512);
+emit_32(1077123943);
+emit_32(3273408512);
+emit_32(3272128528);
+emit_32(1080172783);
+emit_32(3273408512);
+emit_32(3271872545);
+emit_32(1084168381);
+emit_32(3273408512);
+emit_32(3271616496);
+emit_32(1087820404);
+emit_32(3273408512);
+emit_32(3271163904);
+emit_32(1090796682);
+emit_32(3273408512);
+emit_32(3270651937);
+emit_32(1091577148);
+emit_32(3273408512);
+emit_32(3270139970);
+emit_32(1091446925);
+emit_32(3273408512);
+emit_32(3269627871);
+emit_32(1092098762);
+emit_32(3273408512);
+emit_32(3269115904);
+emit_32(1091744595);
+emit_32(3273408512);
+emit_32(3268603937);
+emit_32(1091408191);
+emit_32(3273408512);
+emit_32(3268091970);
+emit_32(1092385663);
+emit_32(3273408512);
+emit_32(3267579911);
+emit_32(1093825829);
+emit_32(3273408512);
+emit_32(3267067904);
+emit_32(1096198128);
+emit_32(3273408512);
+emit_32(3266555911);
+emit_32(1098768607);
+emit_32(3273408512);
+emit_32(3266043904);
+emit_32(1099579471);
+emit_32(3273408512);
+emit_32(3265531911);
+emit_32(1100058880);
+emit_32(3273408512);
+emit_32(3265019904);
+emit_32(1100744596);
+emit_32(3273408512);
+emit_32(3264507911);
+emit_32(1102061083);
+emit_32(3273408512);
+emit_32(3263995904);
+emit_32(1103274338);
+emit_32(3273408512);
+emit_32(3263483911);
+emit_32(1104422791);
+emit_32(3273408512);
+emit_32(3262775296);
+emit_32(1105176612);
+emit_32(3273408512);
+emit_32(3261751309);
+emit_32(1105646007);
+emit_32(3273408512);
+emit_32(3260727296);
+emit_32(1106575308);
+emit_32(3273408512);
+emit_32(3259703309);
+emit_32(1106762741);
+emit_32(3273408512);
+emit_32(3258679296);
+emit_32(1106791472);
+emit_32(3273408512);
+emit_32(3257655309);
+emit_32(1106362447);
+emit_32(3273408512);
+emit_32(3256631296);
+emit_32(1107312824);
+emit_32(3273408512);
+emit_32(3255607309);
+emit_32(1107822143);
+emit_32(3273408512);
+emit_32(3254386688);
+emit_32(1108186890);
+emit_32(3273408512);
+emit_32(3252338714);
+emit_32(1108816848);
+emit_32(3273408512);
+emit_32(3250290688);
+emit_32(1109429689);
+emit_32(3273408512);
+emit_32(3248242714);
+emit_32(1109536408);
+emit_32(3273408512);
+emit_32(3245998080);
+emit_32(1109813992);
+emit_32(3273408512);
+emit_32(3241902132);
+emit_32(1110208099);
+emit_32(3273408512);
+emit_32(3237609472);
+emit_32(1110335213);
+emit_32(3273408512);
+emit_32(3229220864);
+emit_32(1110186263);
+emit_32(3273408512);
+emit_32(0);
+emit_32(1109755796);
+emit_32(3273408512);
+emit_32(1081737216);
+emit_32(1109848700);
+emit_32(3273408512);
+emit_32(3279552512);
+emit_32(1104733956);
+emit_32(3273664496);
+emit_32(3279296528);
+emit_32(1104666690);
+emit_32(3273664496);
+emit_32(3279040545);
+emit_32(1104540231);
+emit_32(3273664496);
+emit_32(3278784496);
+emit_32(1104872840);
+emit_32(3273664496);
+emit_32(3278528512);
+emit_32(1105814775);
+emit_32(3273664496);
+emit_32(3278272528);
+emit_32(1106809297);
+emit_32(3273664496);
+emit_32(3278016545);
+emit_32(1106966322);
+emit_32(3273664496);
+emit_32(3277760496);
+emit_32(1106369682);
+emit_32(3273664496);
+emit_32(3277504512);
+emit_32(1105145102);
+emit_32(3273664496);
+emit_32(3277248528);
+emit_32(1104371673);
+emit_32(3273664496);
+emit_32(3276992545);
+emit_32(1103102319);
+emit_32(3273664496);
+emit_32(3276736496);
+emit_32(1102915568);
+emit_32(3273664496);
+emit_32(3276480512);
+emit_32(1102916721);
+emit_32(3273664496);
+emit_32(3276224528);
+emit_32(1102503005);
+emit_32(3273664496);
+emit_32(3275968545);
+emit_32(1101360162);
+emit_32(3273664496);
+emit_32(3275712496);
+emit_32(1100655152);
+emit_32(3273664496);
+emit_32(3275456512);
+emit_32(1099898185);
+emit_32(3273664496);
+emit_32(3275200528);
+emit_32(1097164495);
+emit_32(3273664496);
+emit_32(3274944545);
+emit_32(1094617294);
+emit_32(3273664496);
+emit_32(3274688496);
+emit_32(1092199750);
+emit_32(3273664496);
+emit_32(3274432512);
+emit_32(1090062511);
+emit_32(3273664496);
+emit_32(3274176528);
+emit_32(1090680196);
+emit_32(3273664496);
+emit_32(3273920545);
+emit_32(1089407214);
+emit_32(3273664496);
+emit_32(3273664496);
+emit_32(1087342316);
+emit_32(3273664496);
+emit_32(3273408512);
+emit_32(1084811578);
+emit_32(3273664496);
+emit_32(3273152528);
+emit_32(1083587386);
+emit_32(3273664496);
+emit_32(3272896545);
+emit_32(1084521563);
+emit_32(3273664496);
+emit_32(3272640496);
+emit_32(1079059237);
+emit_32(3273664496);
+emit_32(3272384512);
+emit_32(1079341513);
+emit_32(3273664496);
+emit_32(3272128528);
+emit_32(1075719690);
+emit_32(3273664496);
+emit_32(3271872545);
+emit_32(1082462285);
+emit_32(3273664496);
+emit_32(3271616496);
+emit_32(1087277514);
+emit_32(3273664496);
+emit_32(3271163904);
+emit_32(1090505891);
+emit_32(3273664496);
+emit_32(3270651937);
+emit_32(1090927198);
+emit_32(3273664496);
+emit_32(3270139970);
+emit_32(1091146109);
+emit_32(3273664496);
+emit_32(3269627871);
+emit_32(1092080475);
+emit_32(3273664496);
+emit_32(3269115904);
+emit_32(1091780718);
+emit_32(3273664496);
+emit_32(3268603937);
+emit_32(1090802554);
+emit_32(3273664496);
+emit_32(3268091970);
+emit_32(1092320997);
+emit_32(3273664496);
+emit_32(3267579911);
+emit_32(1094564132);
+emit_32(3273664496);
+emit_32(3267067904);
+emit_32(1097435447);
+emit_32(3273664496);
+emit_32(3266555911);
+emit_32(1098963118);
+emit_32(3273664496);
+emit_32(3266043904);
+emit_32(1099774348);
+emit_32(3273664496);
+emit_32(3265531911);
+emit_32(1100067530);
+emit_32(3273664496);
+emit_32(3265019904);
+emit_32(1100332401);
+emit_32(3273664496);
+emit_32(3264507911);
+emit_32(1101386639);
+emit_32(3273664496);
+emit_32(3263995904);
+emit_32(1102851185);
+emit_32(3273664496);
+emit_32(3263483911);
+emit_32(1104372774);
+emit_32(3273664496);
+emit_32(3262775296);
+emit_32(1105071702);
+emit_32(3273664496);
+emit_32(3261751309);
+emit_32(1105296726);
+emit_32(3273664496);
+emit_32(3260727296);
+emit_32(1105674895);
+emit_32(3273664496);
+emit_32(3259703309);
+emit_32(1106000583);
+emit_32(3273664496);
+emit_32(3258679296);
+emit_32(1105931639);
+emit_32(3273664496);
+emit_32(3257655309);
+emit_32(1106021188);
+emit_32(3273664496);
+emit_32(3256631296);
+emit_32(1106564874);
+emit_32(3273664496);
+emit_32(3255607309);
+emit_32(1107568073);
+emit_32(3273664496);
+emit_32(3254386688);
+emit_32(1108016890);
+emit_32(3273664496);
+emit_32(3252338714);
+emit_32(1108734483);
+emit_32(3273664496);
+emit_32(3250290688);
+emit_32(1109191321);
+emit_32(3273664496);
+emit_32(3248242714);
+emit_32(1109295759);
+emit_32(3273664496);
+emit_32(3245998080);
+emit_32(1109358019);
+emit_32(3273664496);
+emit_32(3241902132);
+emit_32(1109703603);
+emit_32(3273664496);
+emit_32(3237609472);
+emit_32(1109859736);
+emit_32(3273664496);
+emit_32(3229220864);
+emit_32(1109838319);
+emit_32(3273664496);
+emit_32(0);
+emit_32(1109492761);
+emit_32(3273664496);
+emit_32(1081737216);
+emit_32(1109518057);
+emit_32(3273664496);
+emit_32(3279552512);
+emit_32(1104359299);
+emit_32(3273920545);
+emit_32(3279296528);
+emit_32(1104339586);
+emit_32(3273920545);
+emit_32(3279040545);
+emit_32(1104491735);
+emit_32(3273920545);
+emit_32(3278784496);
+emit_32(1104791627);
+emit_32(3273920545);
+emit_32(3278528512);
+emit_32(1105811577);
+emit_32(3273920545);
+emit_32(3278272528);
+emit_32(1106308497);
+emit_32(3273920545);
+emit_32(3278016545);
+emit_32(1106435952);
+emit_32(3273920545);
+emit_32(3277760496);
+emit_32(1105655916);
+emit_32(3273920545);
+emit_32(3277504512);
+emit_32(1104594023);
+emit_32(3273920545);
+emit_32(3277248528);
+emit_32(1103614234);
+emit_32(3273920545);
+emit_32(3276992545);
+emit_32(1103342128);
+emit_32(3273920545);
+emit_32(3276736496);
+emit_32(1102922855);
+emit_32(3273920545);
+emit_32(3276480512);
+emit_32(1102436945);
+emit_32(3273920545);
+emit_32(3276224528);
+emit_32(1101625347);
+emit_32(3273920545);
+emit_32(3275968545);
+emit_32(1100801953);
+emit_32(3273920545);
+emit_32(3275712496);
+emit_32(1100227910);
+emit_32(3273920545);
+emit_32(3275456512);
+emit_32(1099339661);
+emit_32(3273920545);
+emit_32(3275200528);
+emit_32(1096681731);
+emit_32(3273920545);
+emit_32(3274944545);
+emit_32(1093027548);
+emit_32(3273920545);
+emit_32(3274688496);
+emit_32(1089483949);
+emit_32(3273920545);
+emit_32(3274432512);
+emit_32(1087550857);
+emit_32(3273920545);
+emit_32(3274176528);
+emit_32(1088032090);
+emit_32(3273920545);
+emit_32(3273920545);
+emit_32(1088175452);
+emit_32(3273920545);
+emit_32(3273664496);
+emit_32(1087974251);
+emit_32(3273920545);
+emit_32(3273408512);
+emit_32(1084612369);
+emit_32(3273920545);
+emit_32(3273152528);
+emit_32(1083056807);
+emit_32(3273920545);
+emit_32(3272896545);
+emit_32(1083313058);
+emit_32(3273920545);
+emit_32(3272640496);
+emit_32(1077966411);
+emit_32(3273920545);
+emit_32(3272384512);
+emit_32(1077466701);
+emit_32(3273920545);
+emit_32(3272128528);
+emit_32(1076194527);
+emit_32(3273920545);
+emit_32(3271872545);
+emit_32(1078813199);
+emit_32(3273920545);
+emit_32(3271616496);
+emit_32(1084920546);
+emit_32(3273920545);
+emit_32(3271163904);
+emit_32(1087870295);
+emit_32(3273920545);
+emit_32(3270651937);
+emit_32(1089931229);
+emit_32(3273920545);
+emit_32(3270139970);
+emit_32(1090987638);
+emit_32(3273920545);
+emit_32(3269627871);
+emit_32(1091623883);
+emit_32(3273920545);
+emit_32(3269115904);
+emit_32(1091369550);
+emit_32(3273920545);
+emit_32(3268603937);
+emit_32(1090009558);
+emit_32(3273920545);
+emit_32(3268091970);
+emit_32(1093783362);
+emit_32(3273920545);
+emit_32(3267579911);
+emit_32(1095581880);
+emit_32(3273920545);
+emit_32(3267067904);
+emit_32(1097625344);
+emit_32(3273920545);
+emit_32(3266555911);
+emit_32(1099002544);
+emit_32(3273920545);
+emit_32(3266043904);
+emit_32(1099653605);
+emit_32(3273920545);
+emit_32(3265531911);
+emit_32(1100228067);
+emit_32(3273920545);
+emit_32(3265019904);
+emit_32(1100644195);
+emit_32(3273920545);
+emit_32(3264507911);
+emit_32(1101087218);
+emit_32(3273920545);
+emit_32(3263995904);
+emit_32(1102441873);
+emit_32(3273920545);
+emit_32(3263483911);
+emit_32(1103411859);
+emit_32(3273920545);
+emit_32(3262775296);
+emit_32(1104352169);
+emit_32(3273920545);
+emit_32(3261751309);
+emit_32(1104534045);
+emit_32(3273920545);
+emit_32(3260727296);
+emit_32(1104718961);
+emit_32(3273920545);
+emit_32(3259703309);
+emit_32(1105600394);
+emit_32(3273920545);
+emit_32(3258679296);
+emit_32(1105578322);
+emit_32(3273920545);
+emit_32(3257655309);
+emit_32(1105873968);
+emit_32(3273920545);
+emit_32(3256631296);
+emit_32(1105977043);
+emit_32(3273920545);
+emit_32(3255607309);
+emit_32(1107501987);
+emit_32(3273920545);
+emit_32(3254386688);
+emit_32(1108022657);
+emit_32(3273920545);
+emit_32(3252338714);
+emit_32(1108493730);
+emit_32(3273920545);
+emit_32(3250290688);
+emit_32(1108751627);
+emit_32(3273920545);
+emit_32(3248242714);
+emit_32(1108976756);
+emit_32(3273920545);
+emit_32(3245998080);
+emit_32(1109209357);
+emit_32(3273920545);
+emit_32(3241902132);
+emit_32(1109224928);
+emit_32(3273920545);
+emit_32(3237609472);
+emit_32(1109394299);
+emit_32(3273920545);
+emit_32(3229220864);
+emit_32(1109287790);
+emit_32(3273920545);
+emit_32(0);
+emit_32(1109096556);
+emit_32(3273920545);
+emit_32(1081737216);
+emit_32(1109095429);
+emit_32(3273920545);
+emit_32(3279552512);
+emit_32(1103777917);
+emit_32(3274176528);
+emit_32(3279296528);
+emit_32(1103682863);
+emit_32(3274176528);
+emit_32(3279040545);
+emit_32(1103889852);
+emit_32(3274176528);
+emit_32(3278784496);
+emit_32(1104470082);
+emit_32(3274176528);
+emit_32(3278528512);
+emit_32(1105367977);
+emit_32(3274176528);
+emit_32(3278272528);
+emit_32(1105484998);
+emit_32(3274176528);
+emit_32(3278016545);
+emit_32(1105335157);
+emit_32(3274176528);
+emit_32(3277760496);
+emit_32(1104592136);
+emit_32(3274176528);
+emit_32(3277504512);
+emit_32(1103631063);
+emit_32(3274176528);
+emit_32(3277248528);
+emit_32(1103255306);
+emit_32(3274176528);
+emit_32(3276992545);
+emit_32(1103018276);
+emit_32(3274176528);
+emit_32(3276736496);
+emit_32(1102447378);
+emit_32(3274176528);
+emit_32(3276480512);
+emit_32(1102332926);
+emit_32(3274176528);
+emit_32(3276224528);
+emit_32(1101176976);
+emit_32(3274176528);
+emit_32(3275968545);
+emit_32(1100388132);
+emit_32(3274176528);
+emit_32(3275712496);
+emit_32(1099436969);
+emit_32(3274176528);
+emit_32(3275456512);
+emit_32(1097622199);
+emit_32(3274176528);
+emit_32(3275200528);
+emit_32(1095157206);
+emit_32(3274176528);
+emit_32(3274944545);
+emit_32(1091943761);
+emit_32(3274176528);
+emit_32(3274688496);
+emit_32(1087145897);
+emit_32(3274176528);
+emit_32(3274432512);
+emit_32(1084175847);
+emit_32(3274176528);
+emit_32(3274176528);
+emit_32(1083923161);
+emit_32(3274176528);
+emit_32(3273920545);
+emit_32(1085375292);
+emit_32(3274176528);
+emit_32(3273664496);
+emit_32(1084407834);
+emit_32(3274176528);
+emit_32(3273408512);
+emit_32(1081391354);
+emit_32(3274176528);
+emit_32(3273152528);
+emit_32(1081952216);
+emit_32(3274176528);
+emit_32(3272896545);
+emit_32(1083406885);
+emit_32(3274176528);
+emit_32(3272640496);
+emit_32(1079981732);
+emit_32(3274176528);
+emit_32(3272384512);
+emit_32(1079058020);
+emit_32(3274176528);
+emit_32(3272128528);
+emit_32(1072707676);
+emit_32(3274176528);
+emit_32(3271872545);
+emit_32(1076687568);
+emit_32(3274176528);
+emit_32(3271616496);
+emit_32(1083207089);
+emit_32(3274176528);
+emit_32(3271163904);
+emit_32(1086389538);
+emit_32(3274176528);
+emit_32(3270651937);
+emit_32(1089283314);
+emit_32(3274176528);
+emit_32(3270139970);
+emit_32(1089347172);
+emit_32(3274176528);
+emit_32(3269627871);
+emit_32(1089486696);
+emit_32(3274176528);
+emit_32(3269115904);
+emit_32(1088193739);
+emit_32(3274176528);
+emit_32(3268603937);
+emit_32(1090655722);
+emit_32(3274176528);
+emit_32(3268091970);
+emit_32(1094451515);
+emit_32(3274176528);
+emit_32(3267579911);
+emit_32(1096952893);
+emit_32(3274176528);
+emit_32(3267067904);
+emit_32(1098336489);
+emit_32(3274176528);
+emit_32(3266555911);
+emit_32(1099234437);
+emit_32(3274176528);
+emit_32(3266043904);
+emit_32(1099379612);
+emit_32(3274176528);
+emit_32(3265531911);
+emit_32(1100215799);
+emit_32(3274176528);
+emit_32(3265019904);
+emit_32(1100530162);
+emit_32(3274176528);
+emit_32(3264507911);
+emit_32(1101031329);
+emit_32(3274176528);
+emit_32(3263995904);
+emit_32(1101498994);
+emit_32(3274176528);
+emit_32(3263483911);
+emit_32(1102563928);
+emit_32(3274176528);
+emit_32(3262775296);
+emit_32(1103428531);
+emit_32(3274176528);
+emit_32(3261751309);
+emit_32(1104384360);
+emit_32(3274176528);
+emit_32(3260727296);
+emit_32(1104488589);
+emit_32(3274176528);
+emit_32(3259703309);
+emit_32(1104535827);
+emit_32(3274176528);
+emit_32(3258679296);
+emit_32(1105265479);
+emit_32(3274176528);
+emit_32(3257655309);
+emit_32(1106039747);
+emit_32(3274176528);
+emit_32(3256631296);
+emit_32(1106434956);
+emit_32(3274176528);
+emit_32(3255607309);
+emit_32(1107058596);
+emit_32(3274176528);
+emit_32(3254386688);
+emit_32(1107738703);
+emit_32(3274176528);
+emit_32(3252338714);
+emit_32(1108236567);
+emit_32(3274176528);
+emit_32(3250290688);
+emit_32(1108369447);
+emit_32(3274176528);
+emit_32(3248242714);
+emit_32(1108738258);
+emit_32(3274176528);
+emit_32(3245998080);
+emit_32(1108925140);
+emit_32(3274176528);
+emit_32(3241902132);
+emit_32(1108891219);
+emit_32(3274176528);
+emit_32(3237609472);
+emit_32(1109019224);
+emit_32(3274176528);
+emit_32(3229220864);
+emit_32(1108962574);
+emit_32(3274176528);
+emit_32(0);
+emit_32(1108838921);
+emit_32(3274176528);
+emit_32(1081737216);
+emit_32(1108664621);
+emit_32(3274176528);
+emit_32(3279552512);
+emit_32(1103175247);
+emit_32(3274432512);
+emit_32(3279296528);
+emit_32(1103008996);
+emit_32(3274432512);
+emit_32(3279040545);
+emit_32(1103511840);
+emit_32(3274432512);
+emit_32(3278784496);
+emit_32(1104205736);
+emit_32(3274432512);
+emit_32(3278528512);
+emit_32(1104650804);
+emit_32(3274432512);
+emit_32(3278272528);
+emit_32(1104410365);
+emit_32(3274432512);
+emit_32(3278016545);
+emit_32(1103881359);
+emit_32(3274432512);
+emit_32(3277760496);
+emit_32(1103489768);
+emit_32(3274432512);
+emit_32(3277504512);
+emit_32(1102805048);
+emit_32(3274432512);
+emit_32(3277248528);
+emit_32(1102700452);
+emit_32(3274432512);
+emit_32(3276992545);
+emit_32(1102108688);
+emit_32(3274432512);
+emit_32(3276736496);
+emit_32(1101386429);
+emit_32(3274432512);
+emit_32(3276480512);
+emit_32(1101386115);
+emit_32(3274432512);
+emit_32(3276224528);
+emit_32(1100548774);
+emit_32(3274432512);
+emit_32(3275968545);
+emit_32(1099100534);
+emit_32(3274432512);
+emit_32(3275712496);
+emit_32(1097287388);
+emit_32(3274432512);
+emit_32(3275456512);
+emit_32(1095246545);
+emit_32(3274432512);
+emit_32(3275200528);
+emit_32(1092624685);
+emit_32(3274432512);
+emit_32(3274944545);
+emit_32(1090219567);
+emit_32(3274432512);
+emit_32(3274688496);
+emit_32(1082930516);
+emit_32(3274432512);
+emit_32(3274432512);
+emit_32(1078918434);
+emit_32(3274432512);
+emit_32(3274176528);
+emit_32(1079511215);
+emit_32(3274432512);
+emit_32(3273920545);
+emit_32(1081732351);
+emit_32(3274432512);
+emit_32(3273664496);
+emit_32(1079040698);
+emit_32(3274432512);
+emit_32(3273408512);
+emit_32(1077451183);
+emit_32(3274432512);
+emit_32(3273152528);
+emit_32(1082592749);
+emit_32(3274432512);
+emit_32(3272896545);
+emit_32(1081429857);
+emit_32(3274432512);
+emit_32(3272640496);
+emit_32(1077879421);
+emit_32(3274432512);
+emit_32(3272384512);
+emit_32(1077261516);
+emit_32(3274432512);
+emit_32(3272128528);
+emit_32(1073521036);
+emit_32(3274432512);
+emit_32(3271872545);
+emit_32(1072559785);
+emit_32(3274432512);
+emit_32(3271616496);
+emit_32(1078796380);
+emit_32(3274432512);
+emit_32(3271163904);
+emit_32(1084493587);
+emit_32(3274432512);
+emit_32(3270651937);
+emit_32(1086050198);
+emit_32(3274432512);
+emit_32(3270139970);
+emit_32(1087277451);
+emit_32(3274432512);
+emit_32(3269627871);
+emit_32(1086930582);
+emit_32(3274432512);
+emit_32(3269115904);
+emit_32(1089544619);
+emit_32(3274432512);
+emit_32(3268603937);
+emit_32(1092037839);
+emit_32(3274432512);
+emit_32(3268091970);
+emit_32(1094101185);
+emit_32(3274432512);
+emit_32(3267579911);
+emit_32(1096539125);
+emit_32(3274432512);
+emit_32(3267067904);
+emit_32(1097682387);
+emit_32(3274432512);
+emit_32(3266555911);
+emit_32(1098380005);
+emit_32(3274432512);
+emit_32(3266043904);
+emit_32(1099089471);
+emit_32(3274432512);
+emit_32(3265531911);
+emit_32(1100092801);
+emit_32(3274432512);
+emit_32(3265019904);
+emit_32(1099999687);
+emit_32(3274432512);
+emit_32(3264507911);
+emit_32(1100034290);
+emit_32(3274432512);
+emit_32(3263995904);
+emit_32(1101354920);
+emit_32(3274432512);
+emit_32(3263483911);
+emit_32(1102642361);
+emit_32(3274432512);
+emit_32(3262775296);
+emit_32(1103324617);
+emit_32(3274432512);
+emit_32(3261751309);
+emit_32(1104424364);
+emit_32(3274432512);
+emit_32(3260727296);
+emit_32(1104375238);
+emit_32(3274432512);
+emit_32(3259703309);
+emit_32(1104526075);
+emit_32(3274432512);
+emit_32(3258679296);
+emit_32(1105221963);
+emit_32(3274432512);
+emit_32(3257655309);
+emit_32(1106081009);
+emit_32(3274432512);
+emit_32(3256631296);
+emit_32(1106625692);
+emit_32(3274432512);
+emit_32(3255607309);
+emit_32(1106869957);
+emit_32(3274432512);
+emit_32(3254386688);
+emit_32(1107361976);
+emit_32(3274432512);
+emit_32(3252338714);
+emit_32(1107660584);
+emit_32(3274432512);
+emit_32(3250290688);
+emit_32(1107794539);
+emit_32(3274432512);
+emit_32(3248242714);
+emit_32(1108030993);
+emit_32(3274432512);
+emit_32(3245998080);
+emit_32(1108270855);
+emit_32(3274432512);
+emit_32(3241902132);
+emit_32(1108287055);
+emit_32(3274432512);
+emit_32(3237609472);
+emit_32(1108250041);
+emit_32(3274432512);
+emit_32(3229220864);
+emit_32(1108216958);
+emit_32(3274432512);
+emit_32(0);
+emit_32(1108239267);
+emit_32(3274432512);
+emit_32(1081737216);
+emit_32(1108184872);
+emit_32(3274432512);
+emit_32(3279552512);
+emit_32(1102812126);
+emit_32(3274688496);
+emit_32(3279296528);
+emit_32(1103117418);
+emit_32(3274688496);
+emit_32(3279040545);
+emit_32(1103649885);
+emit_32(3274688496);
+emit_32(3278784496);
+emit_32(1104097313);
+emit_32(3274688496);
+emit_32(3278528512);
+emit_32(1104444654);
+emit_32(3274688496);
+emit_32(3278272528);
+emit_32(1104063601);
+emit_32(3274688496);
+emit_32(3278016545);
+emit_32(1103545814);
+emit_32(3274688496);
+emit_32(3277760496);
+emit_32(1103584507);
+emit_32(3274688496);
+emit_32(3277504512);
+emit_32(1102679009);
+emit_32(3274688496);
+emit_32(3277248528);
+emit_32(1102258687);
+emit_32(3274688496);
+emit_32(3276992545);
+emit_32(1101507854);
+emit_32(3274688496);
+emit_32(3276736496);
+emit_32(1100690909);
+emit_32(3274688496);
+emit_32(3276480512);
+emit_32(1100132332);
+emit_32(3274688496);
+emit_32(3276224528);
+emit_32(1099019583);
+emit_32(3274688496);
+emit_32(3275968545);
+emit_32(1097127376);
+emit_32(3274688496);
+emit_32(3275712496);
+emit_32(1095215822);
+emit_32(3274688496);
+emit_32(3275456512);
+emit_32(1092786166);
+emit_32(3274688496);
+emit_32(3275200528);
+emit_32(1090176785);
+emit_32(3274688496);
+emit_32(3274944545);
+emit_32(1085473439);
+emit_32(3274688496);
+emit_32(3274688496);
+emit_32(1079921376);
+emit_32(3274688496);
+emit_32(3274432512);
+emit_32(1075489590);
+emit_32(3274688496);
+emit_32(3274176528);
+emit_32(1074320386);
+emit_32(3274688496);
+emit_32(3273920545);
+emit_32(1075278281);
+emit_32(3274688496);
+emit_32(3273664496);
+emit_32(1075627373);
+emit_32(3274688496);
+emit_32(3273408512);
+emit_32(1075421307);
+emit_32(3274688496);
+emit_32(3273152528);
+emit_32(1077995687);
+emit_32(3274688496);
+emit_32(3272896545);
+emit_32(1076187271);
+emit_32(3274688496);
+emit_32(3272640496);
+emit_32(1078197056);
+emit_32(3274688496);
+emit_32(3272384512);
+emit_32(1077490273);
+emit_32(3274688496);
+emit_32(3272128528);
+emit_32(1076221287);
+emit_32(3274688496);
+emit_32(3271872545);
+emit_32(1074908092);
+emit_32(3274688496);
+emit_32(3271616496);
+emit_32(1080775462);
+emit_32(3274688496);
+emit_32(3271163904);
+emit_32(1084715256);
+emit_32(3274688496);
+emit_32(3270651937);
+emit_32(1086583504);
+emit_32(3274688496);
+emit_32(3270139970);
+emit_32(1086842502);
+emit_32(3274688496);
+emit_32(3269627871);
+emit_32(1087987400);
+emit_32(3274688496);
+emit_32(3269115904);
+emit_32(1090173891);
+emit_32(3274688496);
+emit_32(3268603937);
+emit_32(1091923838);
+emit_32(3274688496);
+emit_32(3268091970);
+emit_32(1093947988);
+emit_32(3274688496);
+emit_32(3267579911);
+emit_32(1095834167);
+emit_32(3274688496);
+emit_32(3267067904);
+emit_32(1096733950);
+emit_32(3274688496);
+emit_32(3266555911);
+emit_32(1097836842);
+emit_32(3274688496);
+emit_32(3266043904);
+emit_32(1098556060);
+emit_32(3274688496);
+emit_32(3265531911);
+emit_32(1099108608);
+emit_32(3274688496);
+emit_32(3265019904);
+emit_32(1098963275);
+emit_32(3274688496);
+emit_32(3264507911);
+emit_32(1099819542);
+emit_32(3274688496);
+emit_32(3263995904);
+emit_32(1100942305);
+emit_32(3274688496);
+emit_32(3263483911);
+emit_32(1102197608);
+emit_32(3274688496);
+emit_32(3262775296);
+emit_32(1103022837);
+emit_32(3274688496);
+emit_32(3261751309);
+emit_32(1103801562);
+emit_32(3274688496);
+emit_32(3260727296);
+emit_32(1104507988);
+emit_32(3274688496);
+emit_32(3259703309);
+emit_32(1105154592);
+emit_32(3274688496);
+emit_32(3258679296);
+emit_32(1105464079);
+emit_32(3274688496);
+emit_32(3257655309);
+emit_32(1106093382);
+emit_32(3274688496);
+emit_32(3256631296);
+emit_32(1106574311);
+emit_32(3274688496);
+emit_32(3255607309);
+emit_32(1107051990);
+emit_32(3274688496);
+emit_32(3254386688);
+emit_32(1107119571);
+emit_32(3274688496);
+emit_32(3252338714);
+emit_32(1106870849);
+emit_32(3274688496);
+emit_32(3250290688);
+emit_32(1107053878);
+emit_32(3274688496);
+emit_32(3248242714);
+emit_32(1107270461);
+emit_32(3274688496);
+emit_32(3245998080);
+emit_32(1107546577);
+emit_32(3274688496);
+emit_32(3241902132);
+emit_32(1107761064);
+emit_32(3274688496);
+emit_32(3237609472);
+emit_32(1107768718);
+emit_32(3274688496);
+emit_32(3229220864);
+emit_32(1107959035);
+emit_32(3274688496);
+emit_32(0);
+emit_32(1108028398);
+emit_32(3274688496);
+emit_32(1081737216);
+emit_32(1108036289);
+emit_32(3274688496);
+emit_32(3279552512);
+emit_32(1102194829);
+emit_32(3274944545);
+emit_32(3279296528);
+emit_32(1102979740);
+emit_32(3274944545);
+emit_32(3279040545);
+emit_32(1103411282);
+emit_32(3274944545);
+emit_32(3278784496);
+emit_32(1104236354);
+emit_32(3274944545);
+emit_32(3278528512);
+emit_32(1103902330);
+emit_32(3274944545);
+emit_32(3278272528);
+emit_32(1103359430);
+emit_32(3274944545);
+emit_32(3278016545);
+emit_32(1103570665);
+emit_32(3274944545);
+emit_32(3277760496);
+emit_32(1102969255);
+emit_32(3274944545);
+emit_32(3277504512);
+emit_32(1102559995);
+emit_32(3274944545);
+emit_32(3277248528);
+emit_32(1101349467);
+emit_32(3274944545);
+emit_32(3276992545);
+emit_32(1100611689);
+emit_32(3274944545);
+emit_32(3276736496);
+emit_32(1099639921);
+emit_32(3274944545);
+emit_32(3276480512);
+emit_32(1098874513);
+emit_32(3274944545);
+emit_32(3276224528);
+emit_32(1096071040);
+emit_32(3274944545);
+emit_32(3275968545);
+emit_32(1094641831);
+emit_32(3274944545);
+emit_32(3275712496);
+emit_32(1092240938);
+emit_32(3274944545);
+emit_32(3275456512);
+emit_32(1090400551);
+emit_32(3274944545);
+emit_32(3275200528);
+emit_32(1086726760);
+emit_32(3274944545);
+emit_32(3274944545);
+emit_32(1082213060);
+emit_32(3274944545);
+emit_32(3274688496);
+emit_32(1073126939);
+emit_32(3274944545);
+emit_32(3274432512);
+emit_32(1071516914);
+emit_32(3274944545);
+emit_32(3274176528);
+emit_32(1065259968);
+emit_32(3274944545);
+emit_32(3273920545);
+emit_32(1065288959);
+emit_32(3274944545);
+emit_32(3273664496);
+emit_32(1065357243);
+emit_32(3274944545);
+emit_32(3273408512);
+emit_32(1069920478);
+emit_32(3274944545);
+emit_32(3273152528);
+emit_32(1062828597);
+emit_32(3274944545);
+emit_32(3272896545);
+emit_32(1067908386);
+emit_32(3274944545);
+emit_32(3272640496);
+emit_32(1068584424);
+emit_32(3274944545);
+emit_32(3272384512);
+emit_32(1063954466);
+emit_32(3274944545);
+emit_32(3272128528);
+emit_32(1068682235);
+emit_32(3274944545);
+emit_32(3271872545);
+emit_32(1074494492);
+emit_32(3274944545);
+emit_32(3271616496);
+emit_32(1082171809);
+emit_32(3274944545);
+emit_32(3271163904);
+emit_32(1085758274);
+emit_32(3274944545);
+emit_32(3270651937);
+emit_32(1088930825);
+emit_32(3274944545);
+emit_32(3270139970);
+emit_32(1088551890);
+emit_32(3274944545);
+emit_32(3269627871);
+emit_32(1090336420);
+emit_32(3274944545);
+emit_32(3269115904);
+emit_32(1090128550);
+emit_32(3274944545);
+emit_32(3268603937);
+emit_32(1092723147);
+emit_32(3274944545);
+emit_32(3268091970);
+emit_32(1094514744);
+emit_32(3274944545);
+emit_32(3267579911);
+emit_32(1095724381);
+emit_32(3274944545);
+emit_32(3267067904);
+emit_32(1096378378);
+emit_32(3274944545);
+emit_32(3266555911);
+emit_32(1096239232);
+emit_32(3274944545);
+emit_32(3266043904);
+emit_32(1097003853);
+emit_32(3274944545);
+emit_32(3265531911);
+emit_32(1097209165);
+emit_32(3274944545);
+emit_32(3265019904);
+emit_32(1098262459);
+emit_32(3274944545);
+emit_32(3264507911);
+emit_32(1099551893);
+emit_32(3274944545);
+emit_32(3263995904);
+emit_32(1100443025);
+emit_32(3274944545);
+emit_32(3263483911);
+emit_32(1101006635);
+emit_32(3274944545);
+emit_32(3262775296);
+emit_32(1102193466);
+emit_32(3274944545);
+emit_32(3261751309);
+emit_32(1103692405);
+emit_32(3274944545);
+emit_32(3260727296);
+emit_32(1104818733);
+emit_32(3274944545);
+emit_32(3259703309);
+emit_32(1105337935);
+emit_32(3274944545);
+emit_32(3258679296);
+emit_32(1105923932);
+emit_32(3274944545);
+emit_32(3257655309);
+emit_32(1106359720);
+emit_32(3274944545);
+emit_32(3256631296);
+emit_32(1106972561);
+emit_32(3274944545);
+emit_32(3255607309);
+emit_32(1106903040);
+emit_32(3274944545);
+emit_32(3254386688);
+emit_32(1106792520);
+emit_32(3274944545);
+emit_32(3252338714);
+emit_32(1106424313);
+emit_32(3274944545);
+emit_32(3250290688);
+emit_32(1106536196);
+emit_32(3274944545);
+emit_32(3248242714);
+emit_32(1106757026);
+emit_32(3274944545);
+emit_32(3245998080);
+emit_32(1107206445);
+emit_32(3274944545);
+emit_32(3241902132);
+emit_32(1107332773);
+emit_32(3274944545);
+emit_32(3237609472);
+emit_32(1107315261);
+emit_32(3274944545);
+emit_32(3229220864);
+emit_32(1107468589);
+emit_32(3274944545);
+emit_32(0);
+emit_32(1107529276);
+emit_32(3274944545);
+emit_32(1081737216);
+emit_32(1107544270);
+emit_32(3274944545);
+emit_32(3279552512);
+emit_32(1102256485);
+emit_32(3275200528);
+emit_32(3279296528);
+emit_32(1102476581);
+emit_32(3275200528);
+emit_32(3279040545);
+emit_32(1102648600);
+emit_32(3275200528);
+emit_32(3278784496);
+emit_32(1103151707);
+emit_32(3275200528);
+emit_32(3278528512);
+emit_32(1103103315);
+emit_32(3275200528);
+emit_32(3278272528);
+emit_32(1102817788);
+emit_32(3275200528);
+emit_32(3278016545);
+emit_32(1103034843);
+emit_32(3275200528);
+emit_32(3277760496);
+emit_32(1102561411);
+emit_32(3275200528);
+emit_32(3277504512);
+emit_32(1101968179);
+emit_32(3275200528);
+emit_32(3277248528);
+emit_32(1100968939);
+emit_32(3275200528);
+emit_32(3276992545);
+emit_32(1099333370);
+emit_32(3275200528);
+emit_32(3276736496);
+emit_32(1098046662);
+emit_32(3275200528);
+emit_32(3276480512);
+emit_32(1096587778);
+emit_32(3275200528);
+emit_32(3276224528);
+emit_32(1094379687);
+emit_32(3275200528);
+emit_32(3275968545);
+emit_32(1092357099);
+emit_32(3275200528);
+emit_32(3275712496);
+emit_32(1088608073);
+emit_32(3275200528);
+emit_32(3275456512);
+emit_32(1087226532);
+emit_32(3275200528);
+emit_32(3275200528);
+emit_32(1084547148);
+emit_32(3275200528);
+emit_32(3274944545);
+emit_32(1081193131);
+emit_32(3275200528);
+emit_32(3274688496);
+emit_32(1078008983);
+emit_32(3275200528);
+emit_32(3274432512);
+emit_32(1069241755);
+emit_32(3275200528);
+emit_32(3274176528);
+emit_32(1061457513);
+emit_32(3275200528);
+emit_32(3273920545);
+emit_32(1073613814);
+emit_32(3275200528);
+emit_32(3273664496);
+emit_32(1066147869);
+emit_32(3275200528);
+emit_32(3273408512);
+emit_32(1067857803);
+emit_32(3275200528);
+emit_32(3273152528);
+emit_32(3192938482);
+emit_32(3275200528);
+emit_32(3272896545);
+emit_32(3204552258);
+emit_32(3275200528);
+emit_32(3272640496);
+emit_32(3207444717);
+emit_32(3275200528);
+emit_32(3272384512);
+emit_32(1042926373);
+emit_32(3275200528);
+emit_32(3272128528);
+emit_32(1069107873);
+emit_32(3275200528);
+emit_32(3271872545);
+emit_32(1068988587);
+emit_32(3275200528);
+emit_32(3271616496);
+emit_32(1078926571);
+emit_32(3275200528);
+emit_32(3271163904);
+emit_32(1083921610);
+emit_32(3275200528);
+emit_32(3270651937);
+emit_32(1087667710);
+emit_32(3275200528);
+emit_32(3270139970);
+emit_32(1090444214);
+emit_32(3275200528);
+emit_32(3269627871);
+emit_32(1091070528);
+emit_32(3275200528);
+emit_32(3269115904);
+emit_32(1090066034);
+emit_32(3275200528);
+emit_32(3268603937);
+emit_32(1092043900);
+emit_32(3275200528);
+emit_32(3268091970);
+emit_32(1094000103);
+emit_32(3275200528);
+emit_32(3267579911);
+emit_32(1094961752);
+emit_32(3275200528);
+emit_32(3267067904);
+emit_32(1095524208);
+emit_32(3275200528);
+emit_32(3266555911);
+emit_32(1095676356);
+emit_32(3275200528);
+emit_32(3266043904);
+emit_32(1095717880);
+emit_32(3275200528);
+emit_32(3265531911);
+emit_32(1096110676);
+emit_32(3275200528);
+emit_32(3265019904);
+emit_32(1097228249);
+emit_32(3275200528);
+emit_32(3264507911);
+emit_32(1099051146);
+emit_32(3275200528);
+emit_32(3263995904);
+emit_32(1099955228);
+emit_32(3275200528);
+emit_32(3263483911);
+emit_32(1100759119);
+emit_32(3275200528);
+emit_32(3262775296);
+emit_32(1101740848);
+emit_32(3275200528);
+emit_32(3261751309);
+emit_32(1103570928);
+emit_32(3275200528);
+emit_32(3260727296);
+emit_32(1104669783);
+emit_32(3275200528);
+emit_32(3259703309);
+emit_32(1105525316);
+emit_32(3275200528);
+emit_32(3258679296);
+emit_32(1106359248);
+emit_32(3275200528);
+emit_32(3257655309);
+emit_32(1106517269);
+emit_32(3275200528);
+emit_32(3256631296);
+emit_32(1106616045);
+emit_32(3275200528);
+emit_32(3255607309);
+emit_32(1106583906);
+emit_32(3275200528);
+emit_32(3254386688);
+emit_32(1106124944);
+emit_32(3275200528);
+emit_32(3252338714);
+emit_32(1106384676);
+emit_32(3275200528);
+emit_32(3250290688);
+emit_32(1106808354);
+emit_32(3275200528);
+emit_32(3248242714);
+emit_32(1106794879);
+emit_32(3275200528);
+emit_32(3245998080);
+emit_32(1106762741);
+emit_32(3275200528);
+emit_32(3241902132);
+emit_32(1106491369);
+emit_32(3275200528);
+emit_32(3237609472);
+emit_32(1106295705);
+emit_32(3275200528);
+emit_32(3229220864);
+emit_32(1106289675);
+emit_32(3275200528);
+emit_32(0);
+emit_32(1106247261);
+emit_32(3275200528);
+emit_32(1081737216);
+emit_32(1106249096);
+emit_32(3275200528);
+emit_32(3279552512);
+emit_32(1102201697);
+emit_32(3275456512);
+emit_32(3279296528);
+emit_32(1102659820);
+emit_32(3275456512);
+emit_32(3279040545);
+emit_32(1102694528);
+emit_32(3275456512);
+emit_32(3278784496);
+emit_32(1102926001);
+emit_32(3275456512);
+emit_32(3278528512);
+emit_32(1102847567);
+emit_32(3275456512);
+emit_32(3278272528);
+emit_32(1102512443);
+emit_32(3275456512);
+emit_32(3278016545);
+emit_32(1102182928);
+emit_32(3275456512);
+emit_32(3277760496);
+emit_32(1101754112);
+emit_32(3275456512);
+emit_32(3277504512);
+emit_32(1101220178);
+emit_32(3275456512);
+emit_32(3277248528);
+emit_32(1100092591);
+emit_32(3275456512);
+emit_32(3276992545);
+emit_32(1099095081);
+emit_32(3275456512);
+emit_32(3276736496);
+emit_32(1095841821);
+emit_32(3275456512);
+emit_32(3276480512);
+emit_32(1094285106);
+emit_32(3275456512);
+emit_32(3276224528);
+emit_32(1092426242);
+emit_32(3275456512);
+emit_32(3275968545);
+emit_32(1091118752);
+emit_32(3275456512);
+emit_32(3275712496);
+emit_32(1086196076);
+emit_32(3275456512);
+emit_32(3275456512);
+emit_32(1084558955);
+emit_32(3275456512);
+emit_32(3275200528);
+emit_32(1081694099);
+emit_32(3275456512);
+emit_32(3274944545);
+emit_32(1083225900);
+emit_32(3275456512);
+emit_32(3274688496);
+emit_32(1082574231);
+emit_32(3275456512);
+emit_32(3274432512);
+emit_32(1076364145);
+emit_32(3275456512);
+emit_32(3274176528);
+emit_32(1072545021);
+emit_32(3275456512);
+emit_32(3273920545);
+emit_32(1074334018);
+emit_32(3275456512);
+emit_32(3273664496);
+emit_32(1076300014);
+emit_32(3275456512);
+emit_32(3273408512);
+emit_32(1073720181);
+emit_32(3275456512);
+emit_32(3273152528);
+emit_32(1062607037);
+emit_32(3275456512);
+emit_32(3272896545);
+emit_32(3187287312);
+emit_32(3275456512);
+emit_32(3272640496);
+emit_32(3214601911);
+emit_32(3275456512);
+emit_32(3272384512);
+emit_32(1058984736);
+emit_32(3275456512);
+emit_32(3272128528);
+emit_32(1074596288);
+emit_32(3275456512);
+emit_32(3271872545);
+emit_32(1076067859);
+emit_32(3275456512);
+emit_32(3271616496);
+emit_32(1078353210);
+emit_32(3275456512);
+emit_32(3271163904);
+emit_32(1083728860);
+emit_32(3275456512);
+emit_32(3270651937);
+emit_32(1087570235);
+emit_32(3275456512);
+emit_32(3270139970);
+emit_32(1089274527);
+emit_32(3275456512);
+emit_32(3269627871);
+emit_32(1090698305);
+emit_32(3275456512);
+emit_32(3269115904);
+emit_32(1091459088);
+emit_32(3275456512);
+emit_32(3268603937);
+emit_32(1092135063);
+emit_32(3275456512);
+emit_32(3268091970);
+emit_32(1093474242);
+emit_32(3275456512);
+emit_32(3267579911);
+emit_32(1094959235);
+emit_32(3275456512);
+emit_32(3267067904);
+emit_32(1094655672);
+emit_32(3275456512);
+emit_32(3266555911);
+emit_32(1095034523);
+emit_32(3275456512);
+emit_32(3266043904);
+emit_32(1095524522);
+emit_32(3275456512);
+emit_32(3265531911);
+emit_32(1096032557);
+emit_32(3275456512);
+emit_32(3265019904);
+emit_32(1097045482);
+emit_32(3275456512);
+emit_32(3264507911);
+emit_32(1098064278);
+emit_32(3275456512);
+emit_32(3263995904);
+emit_32(1099811573);
+emit_32(3275456512);
+emit_32(3263483911);
+emit_32(1101577899);
+emit_32(3275456512);
+emit_32(3262775296);
+emit_32(1102983515);
+emit_32(3275456512);
+emit_32(3261751309);
+emit_32(1103562015);
+emit_32(3275456512);
+emit_32(3260727296);
+emit_32(1104461116);
+emit_32(3275456512);
+emit_32(3259703309);
+emit_32(1105235752);
+emit_32(3275456512);
+emit_32(3258679296);
+emit_32(1106329049);
+emit_32(3275456512);
+emit_32(3257655309);
+emit_32(1106693744);
+emit_32(3275456512);
+emit_32(3256631296);
+emit_32(1106663703);
+emit_32(3275456512);
+emit_32(3255607309);
+emit_32(1106416710);
+emit_32(3275456512);
+emit_32(3254386688);
+emit_32(1105642390);
+emit_32(3275456512);
+emit_32(3252338714);
+emit_32(1106355631);
+emit_32(3275456512);
+emit_32(3250290688);
+emit_32(1107058020);
+emit_32(3275456512);
+emit_32(3248242714);
+emit_32(1106806414);
+emit_32(3275456512);
+emit_32(3245998080);
+emit_32(1106545790);
+emit_32(3275456512);
+emit_32(3241902132);
+emit_32(1106234783);
+emit_32(3275456512);
+emit_32(3237609472);
+emit_32(1105605637);
+emit_32(3275456512);
+emit_32(3229220864);
+emit_32(1105327922);
+emit_32(3275456512);
+emit_32(0);
+emit_32(1104886890);
+emit_32(3275456512);
+emit_32(1081737216);
+emit_32(1105010622);
+emit_32(3275456512);
+emit_32(3279552512);
+emit_32(1101796265);
+emit_32(3275712496);
+emit_32(3279296528);
+emit_32(1102154616);
+emit_32(3275712496);
+emit_32(3279040545);
+emit_32(1102271480);
+emit_32(3275712496);
+emit_32(3278784496);
+emit_32(1102377910);
+emit_32(3275712496);
+emit_32(3278528512);
+emit_32(1102537923);
+emit_32(3275712496);
+emit_32(3278272528);
+emit_32(1102370151);
+emit_32(3275712496);
+emit_32(3278016545);
+emit_32(1101809268);
+emit_32(3275712496);
+emit_32(3277760496);
+emit_32(1101123289);
+emit_32(3275712496);
+emit_32(3277504512);
+emit_32(1100805466);
+emit_32(3275712496);
+emit_32(3277248528);
+emit_32(1100000736);
+emit_32(3275712496);
+emit_32(3276992545);
+emit_32(1098896743);
+emit_32(3275712496);
+emit_32(3276736496);
+emit_32(1095489500);
+emit_32(3275712496);
+emit_32(3276480512);
+emit_32(1092604647);
+emit_32(3275712496);
+emit_32(3276224528);
+emit_32(1089231431);
+emit_32(3275712496);
+emit_32(3275968545);
+emit_32(1086808717);
+emit_32(3275712496);
+emit_32(3275712496);
+emit_32(1083957890);
+emit_32(3275712496);
+emit_32(3275456512);
+emit_32(1083971564);
+emit_32(3275712496);
+emit_32(3275200528);
+emit_32(1083249913);
+emit_32(3275712496);
+emit_32(3274944545);
+emit_32(1084720771);
+emit_32(3275712496);
+emit_32(3274688496);
+emit_32(1082599125);
+emit_32(3275712496);
+emit_32(3274432512);
+emit_32(1079874484);
+emit_32(3275712496);
+emit_32(3274176528);
+emit_32(1080545069);
+emit_32(3275712496);
+emit_32(3273920545);
+emit_32(1078235685);
+emit_32(3275712496);
+emit_32(3273664496);
+emit_32(1080867653);
+emit_32(3275712496);
+emit_32(3273408512);
+emit_32(1082567206);
+emit_32(3275712496);
+emit_32(3273152528);
+emit_32(1074733945);
+emit_32(3275712496);
+emit_32(3272896545);
+emit_32(1058342370);
+emit_32(3275712496);
+emit_32(3272640496);
+emit_32(1055267089);
+emit_32(3275712496);
+emit_32(3272384512);
+emit_32(1075522138);
+emit_32(3275712496);
+emit_32(3272128528);
+emit_32(1080234900);
+emit_32(3275712496);
+emit_32(3271872545);
+emit_32(1080374822);
+emit_32(3275712496);
+emit_32(3271616496);
+emit_32(1083014633);
+emit_32(3275712496);
+emit_32(3271163904);
+emit_32(1084734109);
+emit_32(3275712496);
+emit_32(3270651937);
+emit_32(1087494779);
+emit_32(3275712496);
+emit_32(3270139970);
+emit_32(1088284965);
+emit_32(3275712496);
+emit_32(3269627871);
+emit_32(1089959289);
+emit_32(3275712496);
+emit_32(3269115904);
+emit_32(1090565890);
+emit_32(3275712496);
+emit_32(3268603937);
+emit_32(1091730439);
+emit_32(3275712496);
+emit_32(3268091970);
+emit_32(1093621042);
+emit_32(3275712496);
+emit_32(3267579911);
+emit_32(1094912259);
+emit_32(3275712496);
+emit_32(3267067904);
+emit_32(1094344350);
+emit_32(3275712496);
+emit_32(3266555911);
+emit_32(1094347810);
+emit_32(3275712496);
+emit_32(3266043904);
+emit_32(1095166958);
+emit_32(3275712496);
+emit_32(3265531911);
+emit_32(1096161218);
+emit_32(3275712496);
+emit_32(3265019904);
+emit_32(1097215246);
+emit_32(3275712496);
+emit_32(3264507911);
+emit_32(1099003068);
+emit_32(3275712496);
+emit_32(3263995904);
+emit_32(1100476894);
+emit_32(3275712496);
+emit_32(3263483911);
+emit_32(1102488954);
+emit_32(3275712496);
+emit_32(3262775296);
+emit_32(1103829035);
+emit_32(3275712496);
+emit_32(3261751309);
+emit_32(1104228332);
+emit_32(3275712496);
+emit_32(3260727296);
+emit_32(1103954339);
+emit_32(3275712496);
+emit_32(3259703309);
+emit_32(1104646714);
+emit_32(3275712496);
+emit_32(3258679296);
+emit_32(1105727324);
+emit_32(3275712496);
+emit_32(3257655309);
+emit_32(1106170243);
+emit_32(3275712496);
+emit_32(3256631296);
+emit_32(1106312482);
+emit_32(3275712496);
+emit_32(3255607309);
+emit_32(1106119596);
+emit_32(3275712496);
+emit_32(3254386688);
+emit_32(1105456687);
+emit_32(3275712496);
+emit_32(3252338714);
+emit_32(1106005931);
+emit_32(3275712496);
+emit_32(3250290688);
+emit_32(1106493309);
+emit_32(3275712496);
+emit_32(3248242714);
+emit_32(1106443921);
+emit_32(3275712496);
+emit_32(3245998080);
+emit_32(1106444917);
+emit_32(3275712496);
+emit_32(3241902132);
+emit_32(1105728582);
+emit_32(3275712496);
+emit_32(3237609472);
+emit_32(1105301445);
+emit_32(3275712496);
+emit_32(3229220864);
+emit_32(1104221307);
+emit_32(3275712496);
+emit_32(0);
+emit_32(1103753013);
+emit_32(3275712496);
+emit_32(1081737216);
+emit_32(1103817710);
+emit_32(3275712496);
+emit_32(3279552512);
+emit_32(1101413745);
+emit_32(3275968545);
+emit_32(3279296528);
+emit_32(1101438858);
+emit_32(3275968545);
+emit_32(3279040545);
+emit_32(1101644379);
+emit_32(3275968545);
+emit_32(3278784496);
+emit_32(1102087560);
+emit_32(3275968545);
+emit_32(3278528512);
+emit_32(1102163214);
+emit_32(3275968545);
+emit_32(3278272528);
+emit_32(1102125308);
+emit_32(3275968545);
+emit_32(3278016545);
+emit_32(1101537739);
+emit_32(3275968545);
+emit_32(3277760496);
+emit_32(1100699350);
+emit_32(3275968545);
+emit_32(3277504512);
+emit_32(1099847539);
+emit_32(3275968545);
+emit_32(3277248528);
+emit_32(1099231239);
+emit_32(3275968545);
+emit_32(3276992545);
+emit_32(1097551315);
+emit_32(3275968545);
+emit_32(3276736496);
+emit_32(1094513590);
+emit_32(3275968545);
+emit_32(3276480512);
+emit_32(1092236859);
+emit_32(3275968545);
+emit_32(3276224528);
+emit_32(1087371425);
+emit_32(3275968545);
+emit_32(3275968545);
+emit_32(1086821908);
+emit_32(3275968545);
+emit_32(3275712496);
+emit_32(1087590871);
+emit_32(3275968545);
+emit_32(3275456512);
+emit_32(1086797791);
+emit_32(3275968545);
+emit_32(3275200528);
+emit_32(1085233189);
+emit_32(3275968545);
+emit_32(3274944545);
+emit_32(1084580975);
+emit_32(3275968545);
+emit_32(3274688496);
+emit_32(1083882351);
+emit_32(3275968545);
+emit_32(3274432512);
+emit_32(1082486780);
+emit_32(3275968545);
+emit_32(3274176528);
+emit_32(1085077623);
+emit_32(3275968545);
+emit_32(3273920545);
+emit_32(1084260342);
+emit_32(3275968545);
+emit_32(3273664496);
+emit_32(1083367290);
+emit_32(3275968545);
+emit_32(3273408512);
+emit_32(1083666638);
+emit_32(3275968545);
+emit_32(3273152528);
+emit_32(1078547909);
+emit_32(3275968545);
+emit_32(3272896545);
+emit_32(1066770387);
+emit_32(3275968545);
+emit_32(3272640496);
+emit_32(1075803744);
+emit_32(3275968545);
+emit_32(3272384512);
+emit_32(1082085679);
+emit_32(3275968545);
+emit_32(3272128528);
+emit_32(1084581185);
+emit_32(3275968545);
+emit_32(3271872545);
+emit_32(1085673172);
+emit_32(3275968545);
+emit_32(3271616496);
+emit_32(1085188394);
+emit_32(3275968545);
+emit_32(3271163904);
+emit_32(1084552768);
+emit_32(3275968545);
+emit_32(3270651937);
+emit_32(1087292635);
+emit_32(3275968545);
+emit_32(3270139970);
+emit_32(1089188963);
+emit_32(3275968545);
+emit_32(3269627871);
+emit_32(1090660503);
+emit_32(3275968545);
+emit_32(3269115904);
+emit_32(1089489254);
+emit_32(3275968545);
+emit_32(3268603937);
+emit_32(1091501157);
+emit_32(3275968545);
+emit_32(3268091970);
+emit_32(1093299130);
+emit_32(3275968545);
+emit_32(3267579911);
+emit_32(1093272076);
+emit_32(3275968545);
+emit_32(3267067904);
+emit_32(1093175293);
+emit_32(3275968545);
+emit_32(3266555911);
+emit_32(1094268538);
+emit_32(3275968545);
+emit_32(3266043904);
+emit_32(1094260359);
+emit_32(3275968545);
+emit_32(3265531911);
+emit_32(1097064147);
+emit_32(3275968545);
+emit_32(3265019904);
+emit_32(1098974337);
+emit_32(3275968545);
+emit_32(3264507911);
+emit_32(1099484050);
+emit_32(3275968545);
+emit_32(3263995904);
+emit_32(1101248646);
+emit_32(3275968545);
+emit_32(3263483911);
+emit_32(1102857634);
+emit_32(3275968545);
+emit_32(3262775296);
+emit_32(1103688158);
+emit_32(3275968545);
+emit_32(3261751309);
+emit_32(1104120486);
+emit_32(3275968545);
+emit_32(3260727296);
+emit_32(1103897087);
+emit_32(3275968545);
+emit_32(3259703309);
+emit_32(1103680084);
+emit_32(3275968545);
+emit_32(3258679296);
+emit_32(1104794406);
+emit_32(3275968545);
+emit_32(3257655309);
+emit_32(1105582830);
+emit_32(3275968545);
+emit_32(3256631296);
+emit_32(1105670124);
+emit_32(3275968545);
+emit_32(3255607309);
+emit_32(1105372486);
+emit_32(3275968545);
+emit_32(3254386688);
+emit_32(1104924063);
+emit_32(3275968545);
+emit_32(3252338714);
+emit_32(1105134250);
+emit_32(3275968545);
+emit_32(3250290688);
+emit_32(1105252739);
+emit_32(3275968545);
+emit_32(3248242714);
+emit_32(1105713693);
+emit_32(3275968545);
+emit_32(3245998080);
+emit_32(1105505760);
+emit_32(3275968545);
+emit_32(3241902132);
+emit_32(1104815692);
+emit_32(3275968545);
+emit_32(3237609472);
+emit_32(1104575830);
+emit_32(3275968545);
+emit_32(3229220864);
+emit_32(1103816871);
+emit_32(3275968545);
+emit_32(0);
+emit_32(1102689547);
+emit_32(3275968545);
+emit_32(1081737216);
+emit_32(1102629726);
+emit_32(3275968545);
+emit_32(3279552512);
+emit_32(1101111021);
+emit_32(3276224528);
+emit_32(3279296528);
+emit_32(1100789580);
+emit_32(3276224528);
+emit_32(3279040545);
+emit_32(1101187724);
+emit_32(3276224528);
+emit_32(3278784496);
+emit_32(1101544450);
+emit_32(3276224528);
+emit_32(3278528512);
+emit_32(1101809215);
+emit_32(3276224528);
+emit_32(3278272528);
+emit_32(1101364409);
+emit_32(3276224528);
+emit_32(3278016545);
+emit_32(1100966999);
+emit_32(3276224528);
+emit_32(3277760496);
+emit_32(1100334603);
+emit_32(3276224528);
+emit_32(3277504512);
+emit_32(1099684538);
+emit_32(3276224528);
+emit_32(3277248528);
+emit_32(1097905000);
+emit_32(3276224528);
+emit_32(3276992545);
+emit_32(1096189949);
+emit_32(3276224528);
+emit_32(3276736496);
+emit_32(1093369908);
+emit_32(3276224528);
+emit_32(3276480512);
+emit_32(1090856430);
+emit_32(3276224528);
+emit_32(3276224528);
+emit_32(1089059569);
+emit_32(3276224528);
+emit_32(3275968545);
+emit_32(1088475764);
+emit_32(3276224528);
+emit_32(3275712496);
+emit_32(1089236128);
+emit_32(3276224528);
+emit_32(3275456512);
+emit_32(1088316066);
+emit_32(3276224528);
+emit_32(3275200528);
+emit_32(1087626375);
+emit_32(3276224528);
+emit_32(3274944545);
+emit_32(1087484629);
+emit_32(3276224528);
+emit_32(3274688496);
+emit_32(1087038397);
+emit_32(3276224528);
+emit_32(3274432512);
+emit_32(1084227794);
+emit_32(3276224528);
+emit_32(3274176528);
+emit_32(1087406111);
+emit_32(3276224528);
+emit_32(3273920545);
+emit_32(1087788003);
+emit_32(3276224528);
+emit_32(3273664496);
+emit_32(1085636639);
+emit_32(3276224528);
+emit_32(3273408512);
+emit_32(1084012206);
+emit_32(3276224528);
+emit_32(3273152528);
+emit_32(1079773149);
+emit_32(3276224528);
+emit_32(3272896545);
+emit_32(1074099640);
+emit_32(3276224528);
+emit_32(3272640496);
+emit_32(1081570199);
+emit_32(3276224528);
+emit_32(3272384512);
+emit_32(1086505511);
+emit_32(3276224528);
+emit_32(3272128528);
+emit_32(1088421783);
+emit_32(3276224528);
+emit_32(3271872545);
+emit_32(1090863057);
+emit_32(3276224528);
+emit_32(3271616496);
+emit_32(1091104240);
+emit_32(3276224528);
+emit_32(3271163904);
+emit_32(1090801149);
+emit_32(3276224528);
+emit_32(3270651937);
+emit_32(1091187329);
+emit_32(3276224528);
+emit_32(3270139970);
+emit_32(1091684071);
+emit_32(3276224528);
+emit_32(3269627871);
+emit_32(1092334691);
+emit_32(3276224528);
+emit_32(3269115904);
+emit_32(1091715549);
+emit_32(3276224528);
+emit_32(3268603937);
+emit_32(1091937239);
+emit_32(3276224528);
+emit_32(3268091970);
+emit_32(1092157765);
+emit_32(3276224528);
+emit_32(3267579911);
+emit_32(1092352643);
+emit_32(3276224528);
+emit_32(3267067904);
+emit_32(1093649249);
+emit_32(3276224528);
+emit_32(3266555911);
+emit_32(1095125015);
+emit_32(3276224528);
+emit_32(3266043904);
+emit_32(1096433743);
+emit_32(3276224528);
+emit_32(3265531911);
+emit_32(1098895694);
+emit_32(3276224528);
+emit_32(3265019904);
+emit_32(1099846805);
+emit_32(3276224528);
+emit_32(3264507911);
+emit_32(1100394109);
+emit_32(3276224528);
+emit_32(3263995904);
+emit_32(1101147301);
+emit_32(3276224528);
+emit_32(3263483911);
+emit_32(1102840332);
+emit_32(3276224528);
+emit_32(3262775296);
+emit_32(1103420352);
+emit_32(3276224528);
+emit_32(3261751309);
+emit_32(1103784994);
+emit_32(3276224528);
+emit_32(3260727296);
+emit_32(1103743890);
+emit_32(3276224528);
+emit_32(3259703309);
+emit_32(1103097863);
+emit_32(3276224528);
+emit_32(3258679296);
+emit_32(1103438807);
+emit_32(3276224528);
+emit_32(3257655309);
+emit_32(1104475534);
+emit_32(3276224528);
+emit_32(3256631296);
+emit_32(1104961811);
+emit_32(3276224528);
+emit_32(3255607309);
+emit_32(1104919763);
+emit_32(3276224528);
+emit_32(3254386688);
+emit_32(1104827174);
+emit_32(3276224528);
+emit_32(3252338714);
+emit_32(1104406905);
+emit_32(3276224528);
+emit_32(3250290688);
+emit_32(1104336860);
+emit_32(3276224528);
+emit_32(3248242714);
+emit_32(1104244218);
+emit_32(3276224528);
+emit_32(3245998080);
+emit_32(1104283592);
+emit_32(3276224528);
+emit_32(3241902132);
+emit_32(1104029627);
+emit_32(3276224528);
+emit_32(3237609472);
+emit_32(1103767326);
+emit_32(3276224528);
+emit_32(3229220864);
+emit_32(1102780406);
+emit_32(3276224528);
+emit_32(0);
+emit_32(1102353111);
+emit_32(3276224528);
+emit_32(1081737216);
+emit_32(1101834591);
+emit_32(3276224528);
+emit_32(3279552512);
+emit_32(1100665376);
+emit_32(3276480512);
+emit_32(3279296528);
+emit_32(1100635911);
+emit_32(3276480512);
+emit_32(3279040545);
+emit_32(1100599001);
+emit_32(3276480512);
+emit_32(3278784496);
+emit_32(1100704593);
+emit_32(3276480512);
+emit_32(3278528512);
+emit_32(1100706847);
+emit_32(3276480512);
+emit_32(3278272528);
+emit_32(1100641940);
+emit_32(3276480512);
+emit_32(3278016545);
+emit_32(1100067373);
+emit_32(3276480512);
+emit_32(3277760496);
+emit_32(1099870817);
+emit_32(3276480512);
+emit_32(3277504512);
+emit_32(1099360738);
+emit_32(3276480512);
+emit_32(3277248528);
+emit_32(1097705875);
+emit_32(3276480512);
+emit_32(3276992545);
+emit_32(1095158989);
+emit_32(3276480512);
+emit_32(3276736496);
+emit_32(1092654884);
+emit_32(3276480512);
+emit_32(3276480512);
+emit_32(1091569199);
+emit_32(3276480512);
+emit_32(3276224528);
+emit_32(1091162174);
+emit_32(3276480512);
+emit_32(3275968545);
+emit_32(1090619556);
+emit_32(3276480512);
+emit_32(3275712496);
+emit_32(1090709283);
+emit_32(3276480512);
+emit_32(3275456512);
+emit_32(1090001987);
+emit_32(3276480512);
+emit_32(3275200528);
+emit_32(1089948027);
+emit_32(3276480512);
+emit_32(3274944545);
+emit_32(1089924476);
+emit_32(3276480512);
+emit_32(3274688496);
+emit_32(1089951446);
+emit_32(3276480512);
+emit_32(3274432512);
+emit_32(1087795175);
+emit_32(3276480512);
+emit_32(3274176528);
+emit_32(1087558449);
+emit_32(3276480512);
+emit_32(3273920545);
+emit_32(1087330845);
+emit_32(3276480512);
+emit_32(3273664496);
+emit_32(1086250308);
+emit_32(3276480512);
+emit_32(3273408512);
+emit_32(1086015469);
+emit_32(3276480512);
+emit_32(3273152528);
+emit_32(1084541779);
+emit_32(3276480512);
+emit_32(3272896545);
+emit_32(1083402271);
+emit_32(3276480512);
+emit_32(3272640496);
+emit_32(1087092084);
+emit_32(3276480512);
+emit_32(3272384512);
+emit_32(1089818319);
+emit_32(3276480512);
+emit_32(3272128528);
+emit_32(1091233068);
+emit_32(3276480512);
+emit_32(3271872545);
+emit_32(1092479059);
+emit_32(3276480512);
+emit_32(3271616496);
+emit_32(1092547835);
+emit_32(3276480512);
+emit_32(3271163904);
+emit_32(1093621252);
+emit_32(3276480512);
+emit_32(3270651937);
+emit_32(1093588327);
+emit_32(3276480512);
+emit_32(3270139970);
+emit_32(1094120689);
+emit_32(3276480512);
+emit_32(3269627871);
+emit_32(1093722230);
+emit_32(3276480512);
+emit_32(3269115904);
+emit_32(1093927017);
+emit_32(3276480512);
+emit_32(3268603937);
+emit_32(1094469340);
+emit_32(3276480512);
+emit_32(3268091970);
+emit_32(1093549320);
+emit_32(3276480512);
+emit_32(3267579911);
+emit_32(1094062283);
+emit_32(3276480512);
+emit_32(3267067904);
+emit_32(1094889505);
+emit_32(3276480512);
+emit_32(3266555911);
+emit_32(1095517287);
+emit_32(3276480512);
+emit_32(3266043904);
+emit_32(1098112303);
+emit_32(3276480512);
+emit_32(3265531911);
+emit_32(1099944847);
+emit_32(3276480512);
+emit_32(3265019904);
+emit_32(1100805204);
+emit_32(3276480512);
+emit_32(3264507911);
+emit_32(1100813068);
+emit_32(3276480512);
+emit_32(3263995904);
+emit_32(1100890191);
+emit_32(3276480512);
+emit_32(3263483911);
+emit_32(1101765018);
+emit_32(3276480512);
+emit_32(3262775296);
+emit_32(1103166125);
+emit_32(3276480512);
+emit_32(3261751309);
+emit_32(1103581413);
+emit_32(3276480512);
+emit_32(3260727296);
+emit_32(1103239001);
+emit_32(3276480512);
+emit_32(3259703309);
+emit_32(1103115059);
+emit_32(3276480512);
+emit_32(3258679296);
+emit_32(1102634916);
+emit_32(3276480512);
+emit_32(3257655309);
+emit_32(1103117366);
+emit_32(3276480512);
+emit_32(3256631296);
+emit_32(1103874962);
+emit_32(3276480512);
+emit_32(3255607309);
+emit_32(1104123108);
+emit_32(3276480512);
+emit_32(3254386688);
+emit_32(1103935308);
+emit_32(3276480512);
+emit_32(3252338714);
+emit_32(1103665666);
+emit_32(3276480512);
+emit_32(3250290688);
+emit_32(1103444679);
+emit_32(3276480512);
+emit_32(3248242714);
+emit_32(1103627551);
+emit_32(3276480512);
+emit_32(3245998080);
+emit_32(1103736865);
+emit_32(3276480512);
+emit_32(3241902132);
+emit_32(1103212210);
+emit_32(3276480512);
+emit_32(3237609472);
+emit_32(1102649124);
+emit_32(3276480512);
+emit_32(3229220864);
+emit_32(1101755266);
+emit_32(3276480512);
+emit_32(0);
+emit_32(1101465335);
+emit_32(3276480512);
+emit_32(1081737216);
+emit_32(1101171471);
+emit_32(3276480512);
+emit_32(3279552512);
+emit_32(1100210871);
+emit_32(3276736496);
+emit_32(3279296528);
+emit_32(1100433483);
+emit_32(3276736496);
+emit_32(3279040545);
+emit_32(1099833855);
+emit_32(3276736496);
+emit_32(3278784496);
+emit_32(1100155611);
+emit_32(3276736496);
+emit_32(3278528512);
+emit_32(1099838049);
+emit_32(3276736496);
+emit_32(3278272528);
+emit_32(1100058775);
+emit_32(3276736496);
+emit_32(3278016545);
+emit_32(1099672899);
+emit_32(3276736496);
+emit_32(3277760496);
+emit_32(1099187932);
+emit_32(3276736496);
+emit_32(3277504512);
+emit_32(1098271477);
+emit_32(3276736496);
+emit_32(3277248528);
+emit_32(1096846357);
+emit_32(3276736496);
+emit_32(3276992545);
+emit_32(1094240646);
+emit_32(3276736496);
+emit_32(3276736496);
+emit_32(1093510208);
+emit_32(3276736496);
+emit_32(3276480512);
+emit_32(1093157677);
+emit_32(3276736496);
+emit_32(3276224528);
+emit_32(1093135971);
+emit_32(3276736496);
+emit_32(3275968545);
+emit_32(1092174626);
+emit_32(3276736496);
+emit_32(3275712496);
+emit_32(1092008343);
+emit_32(3276736496);
+emit_32(3275456512);
+emit_32(1091657206);
+emit_32(3276736496);
+emit_32(3275200528);
+emit_32(1090624757);
+emit_32(3276736496);
+emit_32(3274944545);
+emit_32(1091109598);
+emit_32(3276736496);
+emit_32(3274688496);
+emit_32(1091299097);
+emit_32(3276736496);
+emit_32(3274432512);
+emit_32(1091108078);
+emit_32(3276736496);
+emit_32(3274176528);
+emit_32(1088708464);
+emit_32(3276736496);
+emit_32(3273920545);
+emit_32(1088400979);
+emit_32(3276736496);
+emit_32(3273664496);
+emit_32(1088671869);
+emit_32(3276736496);
+emit_32(3273408512);
+emit_32(1086687543);
+emit_32(3276736496);
+emit_32(3273152528);
+emit_32(1087251530);
+emit_32(3276736496);
+emit_32(3272896545);
+emit_32(1088748687);
+emit_32(3276736496);
+emit_32(3272640496);
+emit_32(1089984811);
+emit_32(3276736496);
+emit_32(3272384512);
+emit_32(1091974946);
+emit_32(3276736496);
+emit_32(3272128528);
+emit_32(1092819930);
+emit_32(3276736496);
+emit_32(3271872545);
+emit_32(1093160927);
+emit_32(3276736496);
+emit_32(3271616496);
+emit_32(1094132118);
+emit_32(3276736496);
+emit_32(3271163904);
+emit_32(1095157206);
+emit_32(3276736496);
+emit_32(3270651937);
+emit_32(1095618580);
+emit_32(3276736496);
+emit_32(3270139970);
+emit_32(1096186069);
+emit_32(3276736496);
+emit_32(3269627871);
+emit_32(1095671113);
+emit_32(3276736496);
+emit_32(3269115904);
+emit_32(1095678348);
+emit_32(3276736496);
+emit_32(3268603937);
+emit_32(1095989776);
+emit_32(3276736496);
+emit_32(3268091970);
+emit_32(1095663878);
+emit_32(3276736496);
+emit_32(3267579911);
+emit_32(1095691351);
+emit_32(3276736496);
+emit_32(3267067904);
+emit_32(1096383306);
+emit_32(3276736496);
+emit_32(3266555911);
+emit_32(1097384277);
+emit_32(3276736496);
+emit_32(3266043904);
+emit_32(1099122606);
+emit_32(3276736496);
+emit_32(3265531911);
+emit_32(1100558316);
+emit_32(3276736496);
+emit_32(3265019904);
+emit_32(1101303015);
+emit_32(3276736496);
+emit_32(3264507911);
+emit_32(1101081556);
+emit_32(3276736496);
+emit_32(3263995904);
+emit_32(1100970826);
+emit_32(3276736496);
+emit_32(3263483911);
+emit_32(1101242984);
+emit_32(3276736496);
+emit_32(3262775296);
+emit_32(1102057728);
+emit_32(3276736496);
+emit_32(3261751309);
+emit_32(1102727925);
+emit_32(3276736496);
+emit_32(3260727296);
+emit_32(1102747638);
+emit_32(3276736496);
+emit_32(3259703309);
+emit_32(1102584322);
+emit_32(3276736496);
+emit_32(3258679296);
+emit_32(1102811234);
+emit_32(3276736496);
+emit_32(3257655309);
+emit_32(1102829742);
+emit_32(3276736496);
+emit_32(3256631296);
+emit_32(1103344278);
+emit_32(3276736496);
+emit_32(3255607309);
+emit_32(1103685065);
+emit_32(3276736496);
+emit_32(3254386688);
+emit_32(1103826413);
+emit_32(3276736496);
+emit_32(3252338714);
+emit_32(1103104626);
+emit_32(3276736496);
+emit_32(3250290688);
+emit_32(1102261571);
+emit_32(3276736496);
+emit_32(3248242714);
+emit_32(1102829899);
+emit_32(3276736496);
+emit_32(3245998080);
+emit_32(1103020530);
+emit_32(3276736496);
+emit_32(3241902132);
+emit_32(1102258477);
+emit_32(3276736496);
+emit_32(3237609472);
+emit_32(1101911084);
+emit_32(3276736496);
+emit_32(3229220864);
+emit_32(1101090364);
+emit_32(3276736496);
+emit_32(0);
+emit_32(1100301573);
+emit_32(3276736496);
+emit_32(1081737216);
+emit_32(1100121322);
+emit_32(3276736496);
+emit_32(3279552512);
+emit_32(1099773614);
+emit_32(3276992545);
+emit_32(3279296528);
+emit_32(1099858287);
+emit_32(3276992545);
+emit_32(3279040545);
+emit_32(1099688523);
+emit_32(3276992545);
+emit_32(3278784496);
+emit_32(1099279211);
+emit_32(3276992545);
+emit_32(3278528512);
+emit_32(1098814430);
+emit_32(3276992545);
+emit_32(3278272528);
+emit_32(1099260651);
+emit_32(3276992545);
+emit_32(3278016545);
+emit_32(1099269983);
+emit_32(3276992545);
+emit_32(3277760496);
+emit_32(1097458201);
+emit_32(3276992545);
+emit_32(3277504512);
+emit_32(1096491624);
+emit_32(3276992545);
+emit_32(3277248528);
+emit_32(1094951371);
+emit_32(3276992545);
+emit_32(3276992545);
+emit_32(1094228482);
+emit_32(3276992545);
+emit_32(3276736496);
+emit_32(1094425929);
+emit_32(3276992545);
+emit_32(3276480512);
+emit_32(1094168504);
+emit_32(3276992545);
+emit_32(3276224528);
+emit_32(1094579965);
+emit_32(3276992545);
+emit_32(3275968545);
+emit_32(1094436205);
+emit_32(3276992545);
+emit_32(3275712496);
+emit_32(1093278787);
+emit_32(3276992545);
+emit_32(3275456512);
+emit_32(1093351873);
+emit_32(3276992545);
+emit_32(3275200528);
+emit_32(1092131865);
+emit_32(3276992545);
+emit_32(3274944545);
+emit_32(1092250753);
+emit_32(3276992545);
+emit_32(3274688496);
+emit_32(1092049888);
+emit_32(3276992545);
+emit_32(3274432512);
+emit_32(1092031821);
+emit_32(3276992545);
+emit_32(3274176528);
+emit_32(1090545517);
+emit_32(3276992545);
+emit_32(3273920545);
+emit_32(1087815580);
+emit_32(3276992545);
+emit_32(3273664496);
+emit_32(1088895152);
+emit_32(3276992545);
+emit_32(3273408512);
+emit_32(1089520607);
+emit_32(3276992545);
+emit_32(3273152528);
+emit_32(1091009407);
+emit_32(3276992545);
+emit_32(3272896545);
+emit_32(1091156585);
+emit_32(3276992545);
+emit_32(3272640496);
+emit_32(1092501331);
+emit_32(3276992545);
+emit_32(3272384512);
+emit_32(1093577002);
+emit_32(3276992545);
+emit_32(3272128528);
+emit_32(1094131384);
+emit_32(3276992545);
+emit_32(3271872545);
+emit_32(1095441999);
+emit_32(3276992545);
+emit_32(3271616496);
+emit_32(1096144126);
+emit_32(3276992545);
+emit_32(3271163904);
+emit_32(1097375574);
+emit_32(3276992545);
+emit_32(3270651937);
+emit_32(1097616746);
+emit_32(3276992545);
+emit_32(3270139970);
+emit_32(1098727817);
+emit_32(3276992545);
+emit_32(3269627871);
+emit_32(1098389442);
+emit_32(3276992545);
+emit_32(3269115904);
+emit_32(1097181902);
+emit_32(3276992545);
+emit_32(3268603937);
+emit_32(1097851522);
+emit_32(3276992545);
+emit_32(3268091970);
+emit_32(1097817234);
+emit_32(3276992545);
+emit_32(3267579911);
+emit_32(1098027054);
+emit_32(3276992545);
+emit_32(3267067904);
+emit_32(1098025691);
+emit_32(3276992545);
+emit_32(3266555911);
+emit_32(1099190816);
+emit_32(3276992545);
+emit_32(3266043904);
+emit_32(1100082420);
+emit_32(3276992545);
+emit_32(3265531911);
+emit_32(1100900257);
+emit_32(3276992545);
+emit_32(3265019904);
+emit_32(1101488351);
+emit_32(3276992545);
+emit_32(3264507911);
+emit_32(1101299188);
+emit_32(3276992545);
+emit_32(3263995904);
+emit_32(1101555565);
+emit_32(3276992545);
+emit_32(3263483911);
+emit_32(1101541671);
+emit_32(3276992545);
+emit_32(3262775296);
+emit_32(1101907414);
+emit_32(3276992545);
+emit_32(3261751309);
+emit_32(1102511446);
+emit_32(3276992545);
+emit_32(3260727296);
+emit_32(1102908490);
+emit_32(3276992545);
+emit_32(3259703309);
+emit_32(1102906130);
+emit_32(3276992545);
+emit_32(3258679296);
+emit_32(1102873153);
+emit_32(3276992545);
+emit_32(3257655309);
+emit_32(1103170057);
+emit_32(3276992545);
+emit_32(3256631296);
+emit_32(1103437234);
+emit_32(3276992545);
+emit_32(3255607309);
+emit_32(1103795952);
+emit_32(3276992545);
+emit_32(3254386688);
+emit_32(1103493018);
+emit_32(3276992545);
+emit_32(3252338714);
+emit_32(1102175378);
+emit_32(3276992545);
+emit_32(3250290688);
+emit_32(1101859861);
+emit_32(3276992545);
+emit_32(3248242714);
+emit_32(1102213756);
+emit_32(3276992545);
+emit_32(3245998080);
+emit_32(1102152676);
+emit_32(3276992545);
+emit_32(3241902132);
+emit_32(1101638559);
+emit_32(3276992545);
+emit_32(3237609472);
+emit_32(1101182167);
+emit_32(3276992545);
+emit_32(3229220864);
+emit_32(1100207830);
+emit_32(3276992545);
+emit_32(0);
+emit_32(1099526308);
+emit_32(3276992545);
+emit_32(1081737216);
+emit_32(1099020213);
+emit_32(3276992545);
+emit_32(3279552512);
+emit_32(1099775187);
+emit_32(3277248528);
+emit_32(3279296528);
+emit_32(1099528667);
+emit_32(3277248528);
+emit_32(3279040545);
+emit_32(1099794376);
+emit_32(3277248528);
+emit_32(3278784496);
+emit_32(1099371223);
+emit_32(3277248528);
+emit_32(3278528512);
+emit_32(1097562220);
+emit_32(3277248528);
+emit_32(3278272528);
+emit_32(1098308597);
+emit_32(3277248528);
+emit_32(3278016545);
+emit_32(1097403885);
+emit_32(3277248528);
+emit_32(3277760496);
+emit_32(1095946050);
+emit_32(3277248528);
+emit_32(3277504512);
+emit_32(1094735364);
+emit_32(3277248528);
+emit_32(3277248528);
+emit_32(1094678007);
+emit_32(3277248528);
+emit_32(3276992545);
+emit_32(1095274332);
+emit_32(3277248528);
+emit_32(3276736496);
+emit_32(1095321728);
+emit_32(3277248528);
+emit_32(3276480512);
+emit_32(1095493170);
+emit_32(3277248528);
+emit_32(3276224528);
+emit_32(1095747135);
+emit_32(3277248528);
+emit_32(3275968545);
+emit_32(1095522216);
+emit_32(3277248528);
+emit_32(3275712496);
+emit_32(1094690590);
+emit_32(3277248528);
+emit_32(3275456512);
+emit_32(1094638056);
+emit_32(3277248528);
+emit_32(3275200528);
+emit_32(1093416570);
+emit_32(3277248528);
+emit_32(3274944545);
+emit_32(1092979314);
+emit_32(3277248528);
+emit_32(3274688496);
+emit_32(1092811961);
+emit_32(3277248528);
+emit_32(3274432512);
+emit_32(1093012554);
+emit_32(3277248528);
+emit_32(3274176528);
+emit_32(1091374384);
+emit_32(3277248528);
+emit_32(3273920545);
+emit_32(1089032851);
+emit_32(3277248528);
+emit_32(3273664496);
+emit_32(1090993437);
+emit_32(3277248528);
+emit_32(3273408512);
+emit_32(1092377368);
+emit_32(3277248528);
+emit_32(3273152528);
+emit_32(1093095077);
+emit_32(3277248528);
+emit_32(3272896545);
+emit_32(1093715519);
+emit_32(3277248528);
+emit_32(3272640496);
+emit_32(1094921486);
+emit_32(3277248528);
+emit_32(3272384512);
+emit_32(1096565129);
+emit_32(3277248528);
+emit_32(3272128528);
+emit_32(1097767112);
+emit_32(3277248528);
+emit_32(3271872545);
+emit_32(1098339005);
+emit_32(3277248528);
+emit_32(3271616496);
+emit_32(1099085958);
+emit_32(3277248528);
+emit_32(3271163904);
+emit_32(1099220281);
+emit_32(3277248528);
+emit_32(3270651937);
+emit_32(1099411227);
+emit_32(3277248528);
+emit_32(3270139970);
+emit_32(1099194958);
+emit_32(3277248528);
+emit_32(3269627871);
+emit_32(1099275174);
+emit_32(3277248528);
+emit_32(3269115904);
+emit_32(1099273968);
+emit_32(3277248528);
+emit_32(3268603937);
+emit_32(1098980681);
+emit_32(3277248528);
+emit_32(3268091970);
+emit_32(1098318243);
+emit_32(3277248528);
+emit_32(3267579911);
+emit_32(1098900413);
+emit_32(3277248528);
+emit_32(3267067904);
+emit_32(1099325086);
+emit_32(3277248528);
+emit_32(3266555911);
+emit_32(1100242695);
+emit_32(3277248528);
+emit_32(3266043904);
+emit_32(1101153383);
+emit_32(3277248528);
+emit_32(3265531911);
+emit_32(1101448505);
+emit_32(3277248528);
+emit_32(3265019904);
+emit_32(1101666976);
+emit_32(3277248528);
+emit_32(3264507911);
+emit_32(1102125203);
+emit_32(3277248528);
+emit_32(3263995904);
+emit_32(1102137996);
+emit_32(3277248528);
+emit_32(3263483911);
+emit_32(1101933104);
+emit_32(3277248528);
+emit_32(3262775296);
+emit_32(1102603669);
+emit_32(3277248528);
+emit_32(3261751309);
+emit_32(1102617615);
+emit_32(3277248528);
+emit_32(3260727296);
+emit_32(1103215355);
+emit_32(3277248528);
+emit_32(3259703309);
+emit_32(1103071281);
+emit_32(3277248528);
+emit_32(3258679296);
+emit_32(1102637957);
+emit_32(3277248528);
+emit_32(3257655309);
+emit_32(1103331118);
+emit_32(3277248528);
+emit_32(3256631296);
+emit_32(1104015943);
+emit_32(3277248528);
+emit_32(3255607309);
+emit_32(1103436710);
+emit_32(3277248528);
+emit_32(3254386688);
+emit_32(1102725618);
+emit_32(3277248528);
+emit_32(3252338714);
+emit_32(1101979084);
+emit_32(3277248528);
+emit_32(3250290688);
+emit_32(1101652401);
+emit_32(3277248528);
+emit_32(3248242714);
+emit_32(1101690778);
+emit_32(3277248528);
+emit_32(3245998080);
+emit_32(1101385643);
+emit_32(3277248528);
+emit_32(3241902132);
+emit_32(1100831785);
+emit_32(3277248528);
+emit_32(3237609472);
+emit_32(1100385721);
+emit_32(3277248528);
+emit_32(3229220864);
+emit_32(1099248645);
+emit_32(3277248528);
+emit_32(0);
+emit_32(1097731041);
+emit_32(3277248528);
+emit_32(1081737216);
+emit_32(1097108292);
+emit_32(3277248528);
+emit_32(3279552512);
+emit_32(1099513148);
+emit_32(3277504512);
+emit_32(3279296528);
+emit_32(1099237687);
+emit_32(3277504512);
+emit_32(3279040545);
+emit_32(1099823002);
+emit_32(3277504512);
+emit_32(3278784496);
+emit_32(1099636094);
+emit_32(3277504512);
+emit_32(3278528512);
+emit_32(1098146172);
+emit_32(3277504512);
+emit_32(3278272528);
+emit_32(1096179673);
+emit_32(3277504512);
+emit_32(3278016545);
+emit_32(1095619209);
+emit_32(3277504512);
+emit_32(3277760496);
+emit_32(1095051510);
+emit_32(3277504512);
+emit_32(3277504512);
+emit_32(1094914041);
+emit_32(3277504512);
+emit_32(3277248528);
+emit_32(1095143680);
+emit_32(3277504512);
+emit_32(3276992545);
+emit_32(1095686213);
+emit_32(3277504512);
+emit_32(3276736496);
+emit_32(1096167719);
+emit_32(3277504512);
+emit_32(3276480512);
+emit_32(1096217212);
+emit_32(3277504512);
+emit_32(3276224528);
+emit_32(1095494009);
+emit_32(3277504512);
+emit_32(3275968545);
+emit_32(1095282721);
+emit_32(3277504512);
+emit_32(3275712496);
+emit_32(1094864024);
+emit_32(3277504512);
+emit_32(3275456512);
+emit_32(1095079402);
+emit_32(3277504512);
+emit_32(3275200528);
+emit_32(1093909506);
+emit_32(3277504512);
+emit_32(3274944545);
+emit_32(1094085876);
+emit_32(3277504512);
+emit_32(3274688496);
+emit_32(1093922193);
+emit_32(3277504512);
+emit_32(3274432512);
+emit_32(1093002173);
+emit_32(3277504512);
+emit_32(3274176528);
+emit_32(1091809376);
+emit_32(3277504512);
+emit_32(3273920545);
+emit_32(1090895154);
+emit_32(3277504512);
+emit_32(3273664496);
+emit_32(1092994938);
+emit_32(3277504512);
+emit_32(3273408512);
+emit_32(1094548613);
+emit_32(3277504512);
+emit_32(3273152528);
+emit_32(1095987783);
+emit_32(3277504512);
+emit_32(3272896545);
+emit_32(1096416022);
+emit_32(3277504512);
+emit_32(3272640496);
+emit_32(1097685323);
+emit_32(3277504512);
+emit_32(3272384512);
+emit_32(1098440927);
+emit_32(3277504512);
+emit_32(3272128528);
+emit_32(1099405512);
+emit_32(3277504512);
+emit_32(3271872545);
+emit_32(1099913599);
+emit_32(3277504512);
+emit_32(3271616496);
+emit_32(1099823422);
+emit_32(3277504512);
+emit_32(3271163904);
+emit_32(1099863373);
+emit_32(3277504512);
+emit_32(3270651937);
+emit_32(1099663042);
+emit_32(3277504512);
+emit_32(3270139970);
+emit_32(1099637929);
+emit_32(3277504512);
+emit_32(3269627871);
+emit_32(1099948936);
+emit_32(3277504512);
+emit_32(3269115904);
+emit_32(1099967024);
+emit_32(3277504512);
+emit_32(3268603937);
+emit_32(1099787770);
+emit_32(3277504512);
+emit_32(3268091970);
+emit_32(1099629540);
+emit_32(3277504512);
+emit_32(3267579911);
+emit_32(1099729889);
+emit_32(3277504512);
+emit_32(3267067904);
+emit_32(1099959737);
+emit_32(3277504512);
+emit_32(3266555911);
+emit_32(1100461585);
+emit_32(3277504512);
+emit_32(3266043904);
+emit_32(1101443996);
+emit_32(3277504512);
+emit_32(3265531911);
+emit_32(1102161904);
+emit_32(3277504512);
+emit_32(3265019904);
+emit_32(1102642623);
+emit_32(3277504512);
+emit_32(3264507911);
+emit_32(1102254703);
+emit_32(3277504512);
+emit_32(3263995904);
+emit_32(1102207464);
+emit_32(3277504512);
+emit_32(3263483911);
+emit_32(1101959424);
+emit_32(3277504512);
+emit_32(3262775296);
+emit_32(1102549248);
+emit_32(3277504512);
+emit_32(3261751309);
+emit_32(1103235488);
+emit_32(3277504512);
+emit_32(3260727296);
+emit_32(1103408923);
+emit_32(3277504512);
+emit_32(3259703309);
+emit_32(1103077258);
+emit_32(3277504512);
+emit_32(3258679296);
+emit_32(1102537084);
+emit_32(3277504512);
+emit_32(3257655309);
+emit_32(1103679455);
+emit_32(3277504512);
+emit_32(3256631296);
+emit_32(1103709654);
+emit_32(3277504512);
+emit_32(3255607309);
+emit_32(1102899891);
+emit_32(3277504512);
+emit_32(3254386688);
+emit_32(1101944534);
+emit_32(3277504512);
+emit_32(3252338714);
+emit_32(1101169793);
+emit_32(3277504512);
+emit_32(3250290688);
+emit_32(1100964273);
+emit_32(3277504512);
+emit_32(3248242714);
+emit_32(1101176085);
+emit_32(3277504512);
+emit_32(3245998080);
+emit_32(1100580284);
+emit_32(3277504512);
+emit_32(3241902132);
+emit_32(1099596143);
+emit_32(3277504512);
+emit_32(3237609472);
+emit_32(1099177394);
+emit_32(3277504512);
+emit_32(3229220864);
+emit_32(1098487274);
+emit_32(3277504512);
+emit_32(0);
+emit_32(1096586625);
+emit_32(3277504512);
+emit_32(1081737216);
+emit_32(1096047133);
+emit_32(3277504512);
+emit_32(3279552512);
+emit_32(1099302751);
+emit_32(3277760496);
+emit_32(3279296528);
+emit_32(1099310930);
+emit_32(3277760496);
+emit_32(3279040545);
+emit_32(1099757833);
+emit_32(3277760496);
+emit_32(3278784496);
+emit_32(1099826410);
+emit_32(3277760496);
+emit_32(3278528512);
+emit_32(1098603771);
+emit_32(3277760496);
+emit_32(3278272528);
+emit_32(1096803575);
+emit_32(3277760496);
+emit_32(3278016545);
+emit_32(1095899388);
+emit_32(3277760496);
+emit_32(3277760496);
+emit_32(1096413925);
+emit_32(3277760496);
+emit_32(3277504512);
+emit_32(1096685925);
+emit_32(3277760496);
+emit_32(3277248528);
+emit_32(1096488373);
+emit_32(3277760496);
+emit_32(3276992545);
+emit_32(1096023854);
+emit_32(3277760496);
+emit_32(3276736496);
+emit_32(1096726505);
+emit_32(3277760496);
+emit_32(3276480512);
+emit_32(1097672845);
+emit_32(3277760496);
+emit_32(3276224528);
+emit_32(1097630587);
+emit_32(3277760496);
+emit_32(3275968545);
+emit_32(1097242300);
+emit_32(3277760496);
+emit_32(3275712496);
+emit_32(1096015780);
+emit_32(3277760496);
+emit_32(3275456512);
+emit_32(1095966707);
+emit_32(3277760496);
+emit_32(3275200528);
+emit_32(1094654729);
+emit_32(3277760496);
+emit_32(3274944545);
+emit_32(1094504258);
+emit_32(3277760496);
+emit_32(3274688496);
+emit_32(1093927856);
+emit_32(3277760496);
+emit_32(3274432512);
+emit_32(1092392111);
+emit_32(3277760496);
+emit_32(3274176528);
+emit_32(1091411231);
+emit_32(3277760496);
+emit_32(3273920545);
+emit_32(1093339290);
+emit_32(3277760496);
+emit_32(3273664496);
+emit_32(1095670904);
+emit_32(3277760496);
+emit_32(3273408512);
+emit_32(1096393163);
+emit_32(3277760496);
+emit_32(3273152528);
+emit_32(1098248199);
+emit_32(3277760496);
+emit_32(3272896545);
+emit_32(1099000342);
+emit_32(3277760496);
+emit_32(3272640496);
+emit_32(1099390150);
+emit_32(3277760496);
+emit_32(3272384512);
+emit_32(1099453117);
+emit_32(3277760496);
+emit_32(3272128528);
+emit_32(1100216690);
+emit_32(3277760496);
+emit_32(3271872545);
+emit_32(1100387294);
+emit_32(3277760496);
+emit_32(3271616496);
+emit_32(1100623957);
+emit_32(3277760496);
+emit_32(3271163904);
+emit_32(1100583063);
+emit_32(3277760496);
+emit_32(3270651937);
+emit_32(1100270692);
+emit_32(3277760496);
+emit_32(3270139970);
+emit_32(1100221199);
+emit_32(3277760496);
+emit_32(3269627871);
+emit_32(1100837028);
+emit_32(3277760496);
+emit_32(3269115904);
+emit_32(1100744648);
+emit_32(3277760496);
+emit_32(3268603937);
+emit_32(1100729496);
+emit_32(3277760496);
+emit_32(3268091970);
+emit_32(1100349650);
+emit_32(3277760496);
+emit_32(3267579911);
+emit_32(1100277141);
+emit_32(3277760496);
+emit_32(3267067904);
+emit_32(1100539180);
+emit_32(3277760496);
+emit_32(3266555911);
+emit_32(1101285137);
+emit_32(3277760496);
+emit_32(3266043904);
+emit_32(1101760404);
+emit_32(3277760496);
+emit_32(3265531911);
+emit_32(1102151418);
+emit_32(3277760496);
+emit_32(3265019904);
+emit_32(1102545368);
+emit_32(3277760496);
+emit_32(3264507911);
+emit_32(1102327369);
+emit_32(3277760496);
+emit_32(3263995904);
+emit_32(1102437312);
+emit_32(3277760496);
+emit_32(3263483911);
+emit_32(1102836190);
+emit_32(3277760496);
+emit_32(3262775296);
+emit_32(1103463449);
+emit_32(3277760496);
+emit_32(3261751309);
+emit_32(1103612871);
+emit_32(3277760496);
+emit_32(3260727296);
+emit_32(1103521907);
+emit_32(3277760496);
+emit_32(3259703309);
+emit_32(1102694842);
+emit_32(3277760496);
+emit_32(3258679296);
+emit_32(1102314104);
+emit_32(3277760496);
+emit_32(3257655309);
+emit_32(1103092829);
+emit_32(3277760496);
+emit_32(3256631296);
+emit_32(1102811392);
+emit_32(3277760496);
+emit_32(3255607309);
+emit_32(1102399406);
+emit_32(3277760496);
+emit_32(3254386688);
+emit_32(1101424807);
+emit_32(3277760496);
+emit_32(3252338714);
+emit_32(1100416025);
+emit_32(3277760496);
+emit_32(3250290688);
+emit_32(1099956172);
+emit_32(3277760496);
+emit_32(3248242714);
+emit_32(1100071882);
+emit_32(3277760496);
+emit_32(3245998080);
+emit_32(1099877633);
+emit_32(3277760496);
+emit_32(3241902132);
+emit_32(1099019059);
+emit_32(3277760496);
+emit_32(3237609472);
+emit_32(1098372560);
+emit_32(3277760496);
+emit_32(3229220864);
+emit_32(1097025244);
+emit_32(3277760496);
+emit_32(0);
+emit_32(1095913230);
+emit_32(3277760496);
+emit_32(1081737216);
+emit_32(1095782787);
+emit_32(3277760496);
+emit_32(3279552512);
+emit_32(1098903349);
+emit_32(3278016545);
+emit_32(3279296528);
+emit_32(1099112225);
+emit_32(3278016545);
+emit_32(3279040545);
+emit_32(1099559495);
+emit_32(3278016545);
+emit_32(3278784496);
+emit_32(1099374422);
+emit_32(3278016545);
+emit_32(3278528512);
+emit_32(1099044802);
+emit_32(3278016545);
+emit_32(3278272528);
+emit_32(1099082498);
+emit_32(3278016545);
+emit_32(3278016545);
+emit_32(1098243061);
+emit_32(3278016545);
+emit_32(3277760496);
+emit_32(1097484626);
+emit_32(3278016545);
+emit_32(3277504512);
+emit_32(1098172282);
+emit_32(3278016545);
+emit_32(3277248528);
+emit_32(1097990039);
+emit_32(3278016545);
+emit_32(3276992545);
+emit_32(1097473301);
+emit_32(3278016545);
+emit_32(3276736496);
+emit_32(1098280600);
+emit_32(3278016545);
+emit_32(3276480512);
+emit_32(1098467561);
+emit_32(3278016545);
+emit_32(3276224528);
+emit_32(1098700449);
+emit_32(3278016545);
+emit_32(3275968545);
+emit_32(1097813354);
+emit_32(3278016545);
+emit_32(3275712496);
+emit_32(1097573020);
+emit_32(3278016545);
+emit_32(3275456512);
+emit_32(1096889034);
+emit_32(3278016545);
+emit_32(3275200528);
+emit_32(1095010930);
+emit_32(3278016545);
+emit_32(3274944545);
+emit_32(1094741446);
+emit_32(3278016545);
+emit_32(3274688496);
+emit_32(1093564105);
+emit_32(3278016545);
+emit_32(3274432512);
+emit_32(1092621330);
+emit_32(3278016545);
+emit_32(3274176528);
+emit_32(1092464757);
+emit_32(3278016545);
+emit_32(3273920545);
+emit_32(1094580175);
+emit_32(3278016545);
+emit_32(3273664496);
+emit_32(1096882219);
+emit_32(3278016545);
+emit_32(3273408512);
+emit_32(1098358718);
+emit_32(3278016545);
+emit_32(3273152528);
+emit_32(1099298662);
+emit_32(3278016545);
+emit_32(3272896545);
+emit_32(1099922617);
+emit_32(3278016545);
+emit_32(3272640496);
+emit_32(1100192521);
+emit_32(3278016545);
+emit_32(3272384512);
+emit_32(1100137470);
+emit_32(3278016545);
+emit_32(3272128528);
+emit_32(1101007893);
+emit_32(3278016545);
+emit_32(3271872545);
+emit_32(1101168640);
+emit_32(3278016545);
+emit_32(3271616496);
+emit_32(1100874252);
+emit_32(3278016545);
+emit_32(3271163904);
+emit_32(1100904346);
+emit_32(3278016545);
+emit_32(3270651937);
+emit_32(1100957142);
+emit_32(3278016545);
+emit_32(3270139970);
+emit_32(1101183110);
+emit_32(3278016545);
+emit_32(3269627871);
+emit_32(1101430574);
+emit_32(3278016545);
+emit_32(3269115904);
+emit_32(1101303906);
+emit_32(3278016545);
+emit_32(3268603937);
+emit_32(1101524317);
+emit_32(3278016545);
+emit_32(3268091970);
+emit_32(1101223481);
+emit_32(3278016545);
+emit_32(3267579911);
+emit_32(1100917768);
+emit_32(3278016545);
+emit_32(3267067904);
+emit_32(1100967523);
+emit_32(3278016545);
+emit_32(3266555911);
+emit_32(1101230506);
+emit_32(3278016545);
+emit_32(3266043904);
+emit_32(1101743889);
+emit_32(3278016545);
+emit_32(3265531911);
+emit_32(1102035865);
+emit_32(3278016545);
+emit_32(3265019904);
+emit_32(1102327683);
+emit_32(3278016545);
+emit_32(3264507911);
+emit_32(1102160803);
+emit_32(3278016545);
+emit_32(3263995904);
+emit_32(1102422737);
+emit_32(3278016545);
+emit_32(3263483911);
+emit_32(1102993582);
+emit_32(3278016545);
+emit_32(3262775296);
+emit_32(1103413274);
+emit_32(3278016545);
+emit_32(3261751309);
+emit_32(1103424966);
+emit_32(3278016545);
+emit_32(3260727296);
+emit_32(1102892656);
+emit_32(3278016545);
+emit_32(3259703309);
+emit_32(1102022495);
+emit_32(3278016545);
+emit_32(3258679296);
+emit_32(1101852259);
+emit_32(3278016545);
+emit_32(3257655309);
+emit_32(1102344408);
+emit_32(3278016545);
+emit_32(3256631296);
+emit_32(1102317198);
+emit_32(3278016545);
+emit_32(3255607309);
+emit_32(1101799883);
+emit_32(3278016545);
+emit_32(3254386688);
+emit_32(1100918922);
+emit_32(3278016545);
+emit_32(3252338714);
+emit_32(1099744779);
+emit_32(3278016545);
+emit_32(3250290688);
+emit_32(1098585945);
+emit_32(3278016545);
+emit_32(3248242714);
+emit_32(1098674235);
+emit_32(3278016545);
+emit_32(3245998080);
+emit_32(1098530685);
+emit_32(3278016545);
+emit_32(3241902132);
+emit_32(1097602066);
+emit_32(3278016545);
+emit_32(3237609472);
+emit_32(1097146565);
+emit_32(3278016545);
+emit_32(3229220864);
+emit_32(1096070935);
+emit_32(3278016545);
+emit_32(0);
+emit_32(1094636379);
+emit_32(3278016545);
+emit_32(1081737216);
+emit_32(1094685347);
+emit_32(3278016545);
+emit_32(3279552512);
+emit_32(1098113142);
+emit_32(3278272528);
+emit_32(3279296528);
+emit_32(1099020003);
+emit_32(3278272528);
+emit_32(3279040545);
+emit_32(1099561016);
+emit_32(3278272528);
+emit_32(3278784496);
+emit_32(1099848273);
+emit_32(3278272528);
+emit_32(3278528512);
+emit_32(1100167460);
+emit_32(3278272528);
+emit_32(3278272528);
+emit_32(1100256431);
+emit_32(3278272528);
+emit_32(3278016545);
+emit_32(1099679872);
+emit_32(3278272528);
+emit_32(3277760496);
+emit_32(1098851759);
+emit_32(3278272528);
+emit_32(3277504512);
+emit_32(1098385562);
+emit_32(3278272528);
+emit_32(3277248528);
+emit_32(1098603142);
+emit_32(3278272528);
+emit_32(3276992545);
+emit_32(1098517158);
+emit_32(3278272528);
+emit_32(3276736496);
+emit_32(1098595697);
+emit_32(3278272528);
+emit_32(3276480512);
+emit_32(1097738591);
+emit_32(3278272528);
+emit_32(3276224528);
+emit_32(1097722757);
+emit_32(3278272528);
+emit_32(3275968545);
+emit_32(1097226886);
+emit_32(3278272528);
+emit_32(3275712496);
+emit_32(1097415629);
+emit_32(3278272528);
+emit_32(3275456512);
+emit_32(1096617873);
+emit_32(3278272528);
+emit_32(3275200528);
+emit_32(1095510786);
+emit_32(3278272528);
+emit_32(3274944545);
+emit_32(1095328858);
+emit_32(3278272528);
+emit_32(3274688496);
+emit_32(1093740999);
+emit_32(3278272528);
+emit_32(3274432512);
+emit_32(1092633598);
+emit_32(3278272528);
+emit_32(3274176528);
+emit_32(1095320155);
+emit_32(3278272528);
+emit_32(3273920545);
+emit_32(1096140771);
+emit_32(3278272528);
+emit_32(3273664496);
+emit_32(1097600808);
+emit_32(3278272528);
+emit_32(3273408512);
+emit_32(1098894960);
+emit_32(3278272528);
+emit_32(3273152528);
+emit_32(1099788032);
+emit_32(3278272528);
+emit_32(3272896545);
+emit_32(1100230112);
+emit_32(3278272528);
+emit_32(3272640496);
+emit_32(1100219731);
+emit_32(3278272528);
+emit_32(3272384512);
+emit_32(1100734897);
+emit_32(3278272528);
+emit_32(3272128528);
+emit_32(1101173726);
+emit_32(3278272528);
+emit_32(3271872545);
+emit_32(1101152072);
+emit_32(3278272528);
+emit_32(3271616496);
+emit_32(1101550479);
+emit_32(3278272528);
+emit_32(3271163904);
+emit_32(1101252736);
+emit_32(3278272528);
+emit_32(3270651937);
+emit_32(1101467694);
+emit_32(3278272528);
+emit_32(3270139970);
+emit_32(1101808009);
+emit_32(3278272528);
+emit_32(3269627871);
+emit_32(1101705930);
+emit_32(3278272528);
+emit_32(3269115904);
+emit_32(1102054110);
+emit_32(3278272528);
+emit_32(3268603937);
+emit_32(1102131180);
+emit_32(3278272528);
+emit_32(3268091970);
+emit_32(1101898868);
+emit_32(3278272528);
+emit_32(3267579911);
+emit_32(1101280313);
+emit_32(3278272528);
+emit_32(3267067904);
+emit_32(1100809188);
+emit_32(3278272528);
+emit_32(3266555911);
+emit_32(1101005429);
+emit_32(3278272528);
+emit_32(3266043904);
+emit_32(1101565631);
+emit_32(3278272528);
+emit_32(3265531911);
+emit_32(1101958585);
+emit_32(3278272528);
+emit_32(3265019904);
+emit_32(1102447903);
+emit_32(3278272528);
+emit_32(3264507911);
+emit_32(1102259526);
+emit_32(3278272528);
+emit_32(3263995904);
+emit_32(1102073456);
+emit_32(3278272528);
+emit_32(3263483911);
+emit_32(1102367372);
+emit_32(3278272528);
+emit_32(3262775296);
+emit_32(1102600104);
+emit_32(3278272528);
+emit_32(3261751309);
+emit_32(1102289935);
+emit_32(3278272528);
+emit_32(3260727296);
+emit_32(1101835692);
+emit_32(3278272528);
+emit_32(3259703309);
+emit_32(1101049364);
+emit_32(3278272528);
+emit_32(3258679296);
+emit_32(1100957929);
+emit_32(3278272528);
+emit_32(3257655309);
+emit_32(1101280366);
+emit_32(3278272528);
+emit_32(3256631296);
+emit_32(1101113432);
+emit_32(3278272528);
+emit_32(3255607309);
+emit_32(1100449789);
+emit_32(3278272528);
+emit_32(3254386688);
+emit_32(1099921726);
+emit_32(3278272528);
+emit_32(3252338714);
+emit_32(1098223138);
+emit_32(3278272528);
+emit_32(3250290688);
+emit_32(1095989776);
+emit_32(3278272528);
+emit_32(3248242714);
+emit_32(1095913754);
+emit_32(3278272528);
+emit_32(3245998080);
+emit_32(1096548981);
+emit_32(3278272528);
+emit_32(3241902132);
+emit_32(1095493380);
+emit_32(3278272528);
+emit_32(3237609472);
+emit_32(1095273074);
+emit_32(3278272528);
+emit_32(3229220864);
+emit_32(1094758957);
+emit_32(3278272528);
+emit_32(0);
+emit_32(1093715414);
+emit_32(3278272528);
+emit_32(1081737216);
+emit_32(1093100529);
+emit_32(3278272528);
+emit_32(3279552512);
+emit_32(1098580387);
+emit_32(3278528512);
+emit_32(3279296528);
+emit_32(1099781479);
+emit_32(3278528512);
+emit_32(3279040545);
+emit_32(1100398041);
+emit_32(3278528512);
+emit_32(3278784496);
+emit_32(1100822715);
+emit_32(3278528512);
+emit_32(3278528512);
+emit_32(1100898841);
+emit_32(3278528512);
+emit_32(3278272528);
+emit_32(1100936538);
+emit_32(3278528512);
+emit_32(3278016545);
+emit_32(1100571528);
+emit_32(3278528512);
+emit_32(3277760496);
+emit_32(1099431674);
+emit_32(3278528512);
+emit_32(3277504512);
+emit_32(1098338586);
+emit_32(3278528512);
+emit_32(3277248528);
+emit_32(1098519046);
+emit_32(3278528512);
+emit_32(3276992545);
+emit_32(1098311533);
+emit_32(3278528512);
+emit_32(3276736496);
+emit_32(1097988991);
+emit_32(3278528512);
+emit_32(3276480512);
+emit_32(1097511993);
+emit_32(3278528512);
+emit_32(3276224528);
+emit_32(1097291373);
+emit_32(3278528512);
+emit_32(3275968545);
+emit_32(1096949852);
+emit_32(3278528512);
+emit_32(3275712496);
+emit_32(1096869007);
+emit_32(3278528512);
+emit_32(3275456512);
+emit_32(1096154717);
+emit_32(3278528512);
+emit_32(3275200528);
+emit_32(1096008126);
+emit_32(3278528512);
+emit_32(3274944545);
+emit_32(1096113612);
+emit_32(3278528512);
+emit_32(3274688496);
+emit_32(1094873986);
+emit_32(3278528512);
+emit_32(3274432512);
+emit_32(1094166512);
+emit_32(3278528512);
+emit_32(3274176528);
+emit_32(1095465592);
+emit_32(3278528512);
+emit_32(3273920545);
+emit_32(1096875193);
+emit_32(3278528512);
+emit_32(3273664496);
+emit_32(1098212128);
+emit_32(3278528512);
+emit_32(3273408512);
+emit_32(1099232497);
+emit_32(3278528512);
+emit_32(3273152528);
+emit_32(1099782003);
+emit_32(3278528512);
+emit_32(3272896545);
+emit_32(1100205261);
+emit_32(3278528512);
+emit_32(3272640496);
+emit_32(1100910690);
+emit_32(3278528512);
+emit_32(3272384512);
+emit_32(1100846098);
+emit_32(3278528512);
+emit_32(3272128528);
+emit_32(1101316856);
+emit_32(3278528512);
+emit_32(3271872545);
+emit_32(1101188668);
+emit_32(3278528512);
+emit_32(3271616496);
+emit_32(1101462451);
+emit_32(3278528512);
+emit_32(3271163904);
+emit_32(1102020713);
+emit_32(3278528512);
+emit_32(3270651937);
+emit_32(1101996543);
+emit_32(3278528512);
+emit_32(3270139970);
+emit_32(1102033138);
+emit_32(3278528512);
+emit_32(3269627871);
+emit_32(1102145231);
+emit_32(3278528512);
+emit_32(3269115904);
+emit_32(1102204423);
+emit_32(3278528512);
+emit_32(3268603937);
+emit_32(1102633396);
+emit_32(3278528512);
+emit_32(3268091970);
+emit_32(1102830685);
+emit_32(3278528512);
+emit_32(3267579911);
+emit_32(1102366271);
+emit_32(3278528512);
+emit_32(3267067904);
+emit_32(1101693819);
+emit_32(3278528512);
+emit_32(3266555911);
+emit_32(1100984300);
+emit_32(3278528512);
+emit_32(3266043904);
+emit_32(1101757311);
+emit_32(3278528512);
+emit_32(3265531911);
+emit_32(1102038486);
+emit_32(3278528512);
+emit_32(3265019904);
+emit_32(1102416078);
+emit_32(3278528512);
+emit_32(3264507911);
+emit_32(1102030360);
+emit_32(3278528512);
+emit_32(3263995904);
+emit_32(1101690831);
+emit_32(3278528512);
+emit_32(3263483911);
+emit_32(1101744256);
+emit_32(3278528512);
+emit_32(3262775296);
+emit_32(1101786199);
+emit_32(3278528512);
+emit_32(3261751309);
+emit_32(1101134142);
+emit_32(3278528512);
+emit_32(3260727296);
+emit_32(1100560990);
+emit_32(3278528512);
+emit_32(3259703309);
+emit_32(1099935148);
+emit_32(3278528512);
+emit_32(3258679296);
+emit_32(1099979765);
+emit_32(3278528512);
+emit_32(3257655309);
+emit_32(1100145597);
+emit_32(3278528512);
+emit_32(3256631296);
+emit_32(1099694499);
+emit_32(3278528512);
+emit_32(3255607309);
+emit_32(1099317589);
+emit_32(3278528512);
+emit_32(3254386688);
+emit_32(1098312896);
+emit_32(3278528512);
+emit_32(3252338714);
+emit_32(1096783967);
+emit_32(3278528512);
+emit_32(3250290688);
+emit_32(1094909218);
+emit_32(3278528512);
+emit_32(3248242714);
+emit_32(1094802158);
+emit_32(3278528512);
+emit_32(3245998080);
+emit_32(1094635749);
+emit_32(3278528512);
+emit_32(3241902132);
+emit_32(1093985423);
+emit_32(3278528512);
+emit_32(3237609472);
+emit_32(1093684376);
+emit_32(3278528512);
+emit_32(3229220864);
+emit_32(1092749885);
+emit_32(3278528512);
+emit_32(0);
+emit_32(1092334471);
+emit_32(3278528512);
+emit_32(1081737216);
+emit_32(1091412678);
+emit_32(3278528512);
+emit_32(3279552512);
+emit_32(1099246495);
+emit_32(3278784496);
+emit_32(3279296528);
+emit_32(1100406168);
+emit_32(3278784496);
+emit_32(3279040545);
+emit_32(1100809188);
+emit_32(3278784496);
+emit_32(3278784496);
+emit_32(1101173726);
+emit_32(3278784496);
+emit_32(3278528512);
+emit_32(1101440798);
+emit_32(3278784496);
+emit_32(3278272528);
+emit_32(1101323148);
+emit_32(3278784496);
+emit_32(3278016545);
+emit_32(1100602724);
+emit_32(3278784496);
+emit_32(3277760496);
+emit_32(1099957325);
+emit_32(3278784496);
+emit_32(3277504512);
+emit_32(1099164077);
+emit_32(3278784496);
+emit_32(3277248528);
+emit_32(1098681680);
+emit_32(3278784496);
+emit_32(3276992545);
+emit_32(1098343724);
+emit_32(3278784496);
+emit_32(3276736496);
+emit_32(1097173198);
+emit_32(3278784496);
+emit_32(3276480512);
+emit_32(1097496684);
+emit_32(3278784496);
+emit_32(3276224528);
+emit_32(1096577607);
+emit_32(3278784496);
+emit_32(3275968545);
+emit_32(1096202217);
+emit_32(3278784496);
+emit_32(3275712496);
+emit_32(1095980968);
+emit_32(3278784496);
+emit_32(3275456512);
+emit_32(1095241407);
+emit_32(3278784496);
+emit_32(3275200528);
+emit_32(1095384223);
+emit_32(3278784496);
+emit_32(3274944545);
+emit_32(1095777649);
+emit_32(3278784496);
+emit_32(3274688496);
+emit_32(1095404356);
+emit_32(3278784496);
+emit_32(3274432512);
+emit_32(1096055626);
+emit_32(3278784496);
+emit_32(3274176528);
+emit_32(1096762996);
+emit_32(3278784496);
+emit_32(3273920545);
+emit_32(1097732404);
+emit_32(3278784496);
+emit_32(3273664496);
+emit_32(1099124913);
+emit_32(3278784496);
+emit_32(3273408512);
+emit_32(1099487615);
+emit_32(3278784496);
+emit_32(3273152528);
+emit_32(1099905263);
+emit_32(3278784496);
+emit_32(3272896545);
+emit_32(1100576090);
+emit_32(3278784496);
+emit_32(3272640496);
+emit_32(1101366716);
+emit_32(3278784496);
+emit_32(3272384512);
+emit_32(1100955150);
+emit_32(3278784496);
+emit_32(3272128528);
+emit_32(1101465911);
+emit_32(3278784496);
+emit_32(3271872545);
+emit_32(1101897872);
+emit_32(3278784496);
+emit_32(3271616496);
+emit_32(1101968074);
+emit_32(3278784496);
+emit_32(3271163904);
+emit_32(1102322545);
+emit_32(3278784496);
+emit_32(3270651937);
+emit_32(1102468507);
+emit_32(3278784496);
+emit_32(3270139970);
+emit_32(1102636699);
+emit_32(3278784496);
+emit_32(3269627871);
+emit_32(1102593812);
+emit_32(3278784496);
+emit_32(3269115904);
+emit_32(1102955781);
+emit_32(3278784496);
+emit_32(3268603937);
+emit_32(1103423183);
+emit_32(3278784496);
+emit_32(3268091970);
+emit_32(1103413484);
+emit_32(3278784496);
+emit_32(3267579911);
+emit_32(1103118467);
+emit_32(3278784496);
+emit_32(3267067904);
+emit_32(1102692536);
+emit_32(3278784496);
+emit_32(3266555911);
+emit_32(1101705878);
+emit_32(3278784496);
+emit_32(3266043904);
+emit_32(1101340082);
+emit_32(3278784496);
+emit_32(3265531911);
+emit_32(1102200596);
+emit_32(3278784496);
+emit_32(3265019904);
+emit_32(1102209457);
+emit_32(3278784496);
+emit_32(3264507911);
+emit_32(1101833280);
+emit_32(3278784496);
+emit_32(3263995904);
+emit_32(1101273812);
+emit_32(3278784496);
+emit_32(3263483911);
+emit_32(1101051042);
+emit_32(3278784496);
+emit_32(3262775296);
+emit_32(1100997722);
+emit_32(3278784496);
+emit_32(3261751309);
+emit_32(1100555118);
+emit_32(3278784496);
+emit_32(3260727296);
+emit_32(1099388420);
+emit_32(3278784496);
+emit_32(3259703309);
+emit_32(1098921070);
+emit_32(3278784496);
+emit_32(3258679296);
+emit_32(1098291295);
+emit_32(3278784496);
+emit_32(3257655309);
+emit_32(1097914751);
+emit_32(3278784496);
+emit_32(3256631296);
+emit_32(1098783811);
+emit_32(3278784496);
+emit_32(3255607309);
+emit_32(1097200986);
+emit_32(3278784496);
+emit_32(3254386688);
+emit_32(1095754580);
+emit_32(3278784496);
+emit_32(3252338714);
+emit_32(1094603034);
+emit_32(3278784496);
+emit_32(3250290688);
+emit_32(1092756596);
+emit_32(3278784496);
+emit_32(3248242714);
+emit_32(1093057118);
+emit_32(3278784496);
+emit_32(3245998080);
+emit_32(1093385742);
+emit_32(3278784496);
+emit_32(3241902132);
+emit_32(1092478325);
+emit_32(3278784496);
+emit_32(3237609472);
+emit_32(1091460850);
+emit_32(3278784496);
+emit_32(3229220864);
+emit_32(1090737647);
+emit_32(3278784496);
+emit_32(0);
+emit_32(1090290346);
+emit_32(3278784496);
+emit_32(1081737216);
+emit_32(1090509120);
+emit_32(3278784496);
+emit_32(3279552512);
+emit_32(1099149345);
+emit_32(3279040545);
+emit_32(3279296528);
+emit_32(1100408318);
+emit_32(3279040545);
+emit_32(3279040545);
+emit_32(1100800170);
+emit_32(3279040545);
+emit_32(3278784496);
+emit_32(1101432986);
+emit_32(3279040545);
+emit_32(3278528512);
+emit_32(1101564058);
+emit_32(3279040545);
+emit_32(3278272528);
+emit_32(1101179755);
+emit_32(3279040545);
+emit_32(3278016545);
+emit_32(1100480145);
+emit_32(3279040545);
+emit_32(3277760496);
+emit_32(1099858759);
+emit_32(3279040545);
+emit_32(3277504512);
+emit_32(1099623354);
+emit_32(3279040545);
+emit_32(3277248528);
+emit_32(1098996934);
+emit_32(3279040545);
+emit_32(3276992545);
+emit_32(1098237818);
+emit_32(3279040545);
+emit_32(3276736496);
+emit_32(1097341285);
+emit_32(3279040545);
+emit_32(3276480512);
+emit_32(1096845414);
+emit_32(3279040545);
+emit_32(3276224528);
+emit_32(1095838571);
+emit_32(3279040545);
+emit_32(3275968545);
+emit_32(1095836998);
+emit_32(3279040545);
+emit_32(3275712496);
+emit_32(1095004114);
+emit_32(3279040545);
+emit_32(3275456512);
+emit_32(1094881011);
+emit_32(3279040545);
+emit_32(3275200528);
+emit_32(1094801529);
+emit_32(3279040545);
+emit_32(3274944545);
+emit_32(1093872281);
+emit_32(3279040545);
+emit_32(3274688496);
+emit_32(1094479197);
+emit_32(3279040545);
+emit_32(3274432512);
+emit_32(1096306341);
+emit_32(3279040545);
+emit_32(3274176528);
+emit_32(1096403334);
+emit_32(3279040545);
+emit_32(3273920545);
+emit_32(1097374315);
+emit_32(3279040545);
+emit_32(3273664496);
+emit_32(1098966788);
+emit_32(3279040545);
+emit_32(3273408512);
+emit_32(1099462921);
+emit_32(3279040545);
+emit_32(3273152528);
+emit_32(1099984903);
+emit_32(3279040545);
+emit_32(3272896545);
+emit_32(1101000973);
+emit_32(3279040545);
+emit_32(3272640496);
+emit_32(1101297982);
+emit_32(3279040545);
+emit_32(3272384512);
+emit_32(1101298506);
+emit_32(3279040545);
+emit_32(3272128528);
+emit_32(1101350044);
+emit_32(3279040545);
+emit_32(3271872545);
+emit_32(1102416393);
+emit_32(3279040545);
+emit_32(3271616496);
+emit_32(1102828588);
+emit_32(3279040545);
+emit_32(3271163904);
+emit_32(1103097810);
+emit_32(3279040545);
+emit_32(3270651937);
+emit_32(1103270825);
+emit_32(3279040545);
+emit_32(3270139970);
+emit_32(1103513256);
+emit_32(3279040545);
+emit_32(3269627871);
+emit_32(1103154119);
+emit_32(3279040545);
+emit_32(3269115904);
+emit_32(1103932214);
+emit_32(3279040545);
+emit_32(3268603937);
+emit_32(1103727532);
+emit_32(3279040545);
+emit_32(3268091970);
+emit_32(1103627393);
+emit_32(3279040545);
+emit_32(3267579911);
+emit_32(1103400272);
+emit_32(3279040545);
+emit_32(3267067904);
+emit_32(1103403365);
+emit_32(3279040545);
+emit_32(3266555911);
+emit_32(1102403496);
+emit_32(3279040545);
+emit_32(3266043904);
+emit_32(1101353556);
+emit_32(3279040545);
+emit_32(3265531911);
+emit_32(1101619213);
+emit_32(3279040545);
+emit_32(3265019904);
+emit_32(1102006295);
+emit_32(3279040545);
+emit_32(3264507911);
+emit_32(1101503503);
+emit_32(3279040545);
+emit_32(3263995904);
+emit_32(1100538131);
+emit_32(3279040545);
+emit_32(3263483911);
+emit_32(1100080271);
+emit_32(3279040545);
+emit_32(3262775296);
+emit_32(1099418881);
+emit_32(3279040545);
+emit_32(3261751309);
+emit_32(1099399430);
+emit_32(3279040545);
+emit_32(3260727296);
+emit_32(1099101215);
+emit_32(3279040545);
+emit_32(3259703309);
+emit_32(1097408394);
+emit_32(3279040545);
+emit_32(3258679296);
+emit_32(1096341468);
+emit_32(3279040545);
+emit_32(3257655309);
+emit_32(1095779641);
+emit_32(3279040545);
+emit_32(3256631296);
+emit_32(1094671296);
+emit_32(3279040545);
+emit_32(3255607309);
+emit_32(1094154977);
+emit_32(3279040545);
+emit_32(3254386688);
+emit_32(1092748732);
+emit_32(3279040545);
+emit_32(3252338714);
+emit_32(1091621345);
+emit_32(3279040545);
+emit_32(3250290688);
+emit_32(1090704869);
+emit_32(3279040545);
+emit_32(3248242714);
+emit_32(1090960134);
+emit_32(3279040545);
+emit_32(3245998080);
+emit_32(1090657442);
+emit_32(3279040545);
+emit_32(3241902132);
+emit_32(1089905497);
+emit_32(3279040545);
+emit_32(3237609472);
+emit_32(1088557112);
+emit_32(3279040545);
+emit_32(3229220864);
+emit_32(1086833925);
+emit_32(3279040545);
+emit_32(0);
+emit_32(1087077467);
+emit_32(3279040545);
+emit_32(1081737216);
+emit_32(1087170664);
+emit_32(3279040545);
+emit_32(3279552512);
+emit_32(1099250847);
+emit_32(3279296528);
+emit_32(3279296528);
+emit_32(1099782632);
+emit_32(3279296528);
+emit_32(3279040545);
+emit_32(1100353372);
+emit_32(3279296528);
+emit_32(3278784496);
+emit_32(1101212785);
+emit_32(3279296528);
+emit_32(3278528512);
+emit_32(1101165494);
+emit_32(3279296528);
+emit_32(3278272528);
+emit_32(1101113957);
+emit_32(3279296528);
+emit_32(3278016545);
+emit_32(1100762736);
+emit_32(3279296528);
+emit_32(3277760496);
+emit_32(1099820381);
+emit_32(3279296528);
+emit_32(3277504512);
+emit_32(1099259340);
+emit_32(3279296528);
+emit_32(3277248528);
+emit_32(1098864027);
+emit_32(3279296528);
+emit_32(3276992545);
+emit_32(1097692558);
+emit_32(3279296528);
+emit_32(3276736496);
+emit_32(1097396755);
+emit_32(3279296528);
+emit_32(3276480512);
+emit_32(1096710776);
+emit_32(3279296528);
+emit_32(3276224528);
+emit_32(1095208586);
+emit_32(3279296528);
+emit_32(3275968545);
+emit_32(1094436625);
+emit_32(3279296528);
+emit_32(3275712496);
+emit_32(1094237605);
+emit_32(3279296528);
+emit_32(3275456512);
+emit_32(1093631948);
+emit_32(3279296528);
+emit_32(3275200528);
+emit_32(1093328699);
+emit_32(3279296528);
+emit_32(3274944545);
+emit_32(1093335096);
+emit_32(3279296528);
+emit_32(3274688496);
+emit_32(1093281199);
+emit_32(3279296528);
+emit_32(3274432512);
+emit_32(1094777307);
+emit_32(3279296528);
+emit_32(3274176528);
+emit_32(1095041653);
+emit_32(3279296528);
+emit_32(3273920545);
+emit_32(1096648281);
+emit_32(3279296528);
+emit_32(3273664496);
+emit_32(1098228380);
+emit_32(3279296528);
+emit_32(3273408512);
+emit_32(1099209114);
+emit_32(3279296528);
+emit_32(3273152528);
+emit_32(1099931582);
+emit_32(3279296528);
+emit_32(3272896545);
+emit_32(1100442291);
+emit_32(3279296528);
+emit_32(3272640496);
+emit_32(1100819359);
+emit_32(3279296528);
+emit_32(3272384512);
+emit_32(1101023045);
+emit_32(3279296528);
+emit_32(3272128528);
+emit_32(1101474877);
+emit_32(3279296528);
+emit_32(3271872545);
+emit_32(1102424624);
+emit_32(3279296528);
+emit_32(3271616496);
+emit_32(1103221962);
+emit_32(3279296528);
+emit_32(3271163904);
+emit_32(1103274757);
+emit_32(3279296528);
+emit_32(3270651937);
+emit_32(1103895200);
+emit_32(3279296528);
+emit_32(3270139970);
+emit_32(1104182824);
+emit_32(3279296528);
+emit_32(3269627871);
+emit_32(1104099462);
+emit_32(3279296528);
+emit_32(3269115904);
+emit_32(1103825102);
+emit_32(3279296528);
+emit_32(3268603937);
+emit_32(1104155037);
+emit_32(3279296528);
+emit_32(3268091970);
+emit_32(1104133122);
+emit_32(3279296528);
+emit_32(3267579911);
+emit_32(1103855721);
+emit_32(3279296528);
+emit_32(3267067904);
+emit_32(1103437391);
+emit_32(3279296528);
+emit_32(3266555911);
+emit_32(1102382472);
+emit_32(3279296528);
+emit_32(3266043904);
+emit_32(1101496425);
+emit_32(3279296528);
+emit_32(3265531911);
+emit_32(1101309673);
+emit_32(3279296528);
+emit_32(3265019904);
+emit_32(1101136973);
+emit_32(3279296528);
+emit_32(3264507911);
+emit_32(1100555957);
+emit_32(3279296528);
+emit_32(3263995904);
+emit_32(1099877161);
+emit_32(3279296528);
+emit_32(3263483911);
+emit_32(1099240414);
+emit_32(3279296528);
+emit_32(3262775296);
+emit_32(1098818938);
+emit_32(3279296528);
+emit_32(3261751309);
+emit_32(1097030487);
+emit_32(3279296528);
+emit_32(3260727296);
+emit_32(1096386557);
+emit_32(3279296528);
+emit_32(3259703309);
+emit_32(1095308516);
+emit_32(3279296528);
+emit_32(3258679296);
+emit_32(1093918733);
+emit_32(3279296528);
+emit_32(3257655309);
+emit_32(1093062885);
+emit_32(3279296528);
+emit_32(3256631296);
+emit_32(1092790780);
+emit_32(3279296528);
+emit_32(3255607309);
+emit_32(1091773189);
+emit_32(3279296528);
+emit_32(3254386688);
+emit_32(1089177744);
+emit_32(3279296528);
+emit_32(3252338714);
+emit_32(1085799588);
+emit_32(3279296528);
+emit_32(3250290688);
+emit_32(1085098154);
+emit_32(3279296528);
+emit_32(3248242714);
+emit_32(1086394194);
+emit_32(3279296528);
+emit_32(3245998080);
+emit_32(1086183912);
+emit_32(3279296528);
+emit_32(3241902132);
+emit_32(1084926145);
+emit_32(3279296528);
+emit_32(3237609472);
+emit_32(1085235454);
+emit_32(3279296528);
+emit_32(3229220864);
+emit_32(1084071682);
+emit_32(3279296528);
+emit_32(0);
+emit_32(1084345968);
+emit_32(3279296528);
+emit_32(1081737216);
+emit_32(1086522393);
+emit_32(3279296528);
+emit_32(3279552512);
+emit_32(1099558709);
+emit_32(3279552512);
+emit_32(3279296528);
+emit_32(1099939394);
+emit_32(3279552512);
+emit_32(3279040545);
+emit_32(1100668731);
+emit_32(3279552512);
+emit_32(3278784496);
+emit_32(1100652321);
+emit_32(3279552512);
+emit_32(3278528512);
+emit_32(1101087375);
+emit_32(3279552512);
+emit_32(3278272528);
+emit_32(1100952319);
+emit_32(3279552512);
+emit_32(3278016545);
+emit_32(1100463787);
+emit_32(3279552512);
+emit_32(3277760496);
+emit_32(1099835428);
+emit_32(3279552512);
+emit_32(3277504512);
+emit_32(1098509084);
+emit_32(3279552512);
+emit_32(3277248528);
+emit_32(1097497838);
+emit_32(3279552512);
+emit_32(3276992545);
+emit_32(1095815817);
+emit_32(3279552512);
+emit_32(3276736496);
+emit_32(1096394106);
+emit_32(3279552512);
+emit_32(3276480512);
+emit_32(1095914488);
+emit_32(3279552512);
+emit_32(3276224528);
+emit_32(1094719216);
+emit_32(3279552512);
+emit_32(3275968545);
+emit_32(1093850681);
+emit_32(3279552512);
+emit_32(3275712496);
+emit_32(1093377773);
+emit_32(3279552512);
+emit_32(3275456512);
+emit_32(1092882845);
+emit_32(3279552512);
+emit_32(3275200528);
+emit_32(1092368613);
+emit_32(3279552512);
+emit_32(3274944545);
+emit_32(1091574149);
+emit_32(3279552512);
+emit_32(3274688496);
+emit_32(1092064893);
+emit_32(3279552512);
+emit_32(3274432512);
+emit_32(1093456206);
+emit_32(3279552512);
+emit_32(3274176528);
+emit_32(1095174193);
+emit_32(3279552512);
+emit_32(3273920545);
+emit_32(1096573098);
+emit_32(3279552512);
+emit_32(3273664496);
+emit_32(1096908852);
+emit_32(3279552512);
+emit_32(3273408512);
+emit_32(1098744804);
+emit_32(3279552512);
+emit_32(3273152528);
+emit_32(1099535483);
+emit_32(3279552512);
+emit_32(3272896545);
+emit_32(1099936825);
+emit_32(3279552512);
+emit_32(3272640496);
+emit_32(1100672506);
+emit_32(3279552512);
+emit_32(3272384512);
+emit_32(1101166805);
+emit_32(3279552512);
+emit_32(3272128528);
+emit_32(1102004250);
+emit_32(3279552512);
+emit_32(3271872545);
+emit_32(1102491838);
+emit_32(3279552512);
+emit_32(3271616496);
+emit_32(1103105779);
+emit_32(3279552512);
+emit_32(3271163904);
+emit_32(1103782950);
+emit_32(3279552512);
+emit_32(3270651937);
+emit_32(1104304878);
+emit_32(3279552512);
+emit_32(3270139970);
+emit_32(1104909802);
+emit_32(3279552512);
+emit_32(3269627871);
+emit_32(1104927680);
+emit_32(3279552512);
+emit_32(3269115904);
+emit_32(1104823452);
+emit_32(3279552512);
+emit_32(3268603937);
+emit_32(1104924063);
+emit_32(3279552512);
+emit_32(3268091970);
+emit_32(1105080143);
+emit_32(3279552512);
+emit_32(3267579911);
+emit_32(1104516533);
+emit_32(3279552512);
+emit_32(3267067904);
+emit_32(1103348315);
+emit_32(3279552512);
+emit_32(3266555911);
+emit_32(1102478049);
+emit_32(3279552512);
+emit_32(3266043904);
+emit_32(1101882406);
+emit_32(3279552512);
+emit_32(3265531911);
+emit_32(1100937324);
+emit_32(3279552512);
+emit_32(3265019904);
+emit_32(1100262828);
+emit_32(3279552512);
+emit_32(3264507911);
+emit_32(1099805963);
+emit_32(3279552512);
+emit_32(3263995904);
+emit_32(1098412301);
+emit_32(3279552512);
+emit_32(3263483911);
+emit_32(1097524052);
+emit_32(3279552512);
+emit_32(3262775296);
+emit_32(1096845309);
+emit_32(3279552512);
+emit_32(3261751309);
+emit_32(1094863186);
+emit_32(3279552512);
+emit_32(3260727296);
+emit_32(1092933596);
+emit_32(3279552512);
+emit_32(3259703309);
+emit_32(1092280658);
+emit_32(3279552512);
+emit_32(3258679296);
+emit_32(1090650752);
+emit_32(3279552512);
+emit_32(3257655309);
+emit_32(1090797762);
+emit_32(3279552512);
+emit_32(3256631296);
+emit_32(1090478271);
+emit_32(3279552512);
+emit_32(3255607309);
+emit_32(1089328172);
+emit_32(3279552512);
+emit_32(3254386688);
+emit_32(1087017593);
+emit_32(3279552512);
+emit_32(3252338714);
+emit_32(1083442180);
+emit_32(3279552512);
+emit_32(3250290688);
+emit_32(1081443237);
+emit_32(3279552512);
+emit_32(3248242714);
+emit_32(1082646268);
+emit_32(3279552512);
+emit_32(3245998080);
+emit_32(1081291445);
+emit_32(3279552512);
+emit_32(3241902132);
+emit_32(1081059249);
+emit_32(3279552512);
+emit_32(3237609472);
+emit_32(1081285406);
+emit_32(3279552512);
+emit_32(3229220864);
+emit_32(1081938249);
+emit_32(3279552512);
+emit_32(0);
+emit_32(1085708656);
+emit_32(3279552512);
+emit_32(1081737216);
+emit_32(1086994839);
+emit_32(3279552512);
+emit_start(LandscapeVtxCount)
+emit_32(2048);
+emit_32(1980);
+emit_32(2048);
+emit_32(2112);
+emit_32(2244);
+emit_32(2310);
+emit_32(2240);
+emit_32(2178);
+emit_start(LandscapeIdx)
+emit_32(Landscape01Idx);
+emit_32(Landscape02Idx);
+emit_32(Landscape03Idx);
+emit_32(Landscape04Idx);
+emit_32(Landscape05Idx);
+emit_32(Landscape06Idx);
+emit_32(Landscape07Idx);
+emit_32(Landscape08Idx);
+emit_start(Landscape01Idx)
+emit_16(0);
+emit_16(1);
+emit_16(2);
+emit_16(3);
+emit_16(2);
+emit_16(1);
+emit_16(2);
+emit_16(3);
+emit_16(4);
+emit_16(5);
+emit_16(4);
+emit_16(3);
+emit_16(4);
+emit_16(5);
+emit_16(6);
+emit_16(7);
+emit_16(6);
+emit_16(5);
+emit_16(6);
+emit_16(7);
+emit_16(8);
+emit_16(9);
+emit_16(8);
+emit_16(7);
+emit_16(8);
+emit_16(9);
+emit_16(10);
+emit_16(11);
+emit_16(10);
+emit_16(9);
+emit_16(10);
+emit_16(11);
+emit_16(12);
+emit_16(13);
+emit_16(12);
+emit_16(11);
+emit_16(12);
+emit_16(13);
+emit_16(14);
+emit_16(15);
+emit_16(14);
+emit_16(13);
+emit_16(14);
+emit_16(15);
+emit_16(16);
+emit_16(17);
+emit_16(16);
+emit_16(15);
+emit_16(16);
+emit_16(17);
+emit_16(18);
+emit_16(19);
+emit_16(18);
+emit_16(17);
+emit_16(18);
+emit_16(19);
+emit_16(20);
+emit_16(21);
+emit_16(20);
+emit_16(19);
+emit_16(20);
+emit_16(21);
+emit_16(22);
+emit_16(23);
+emit_16(22);
+emit_16(21);
+emit_16(22);
+emit_16(23);
+emit_16(24);
+emit_16(25);
+emit_16(24);
+emit_16(23);
+emit_16(24);
+emit_16(25);
+emit_16(26);
+emit_16(27);
+emit_16(26);
+emit_16(25);
+emit_16(26);
+emit_16(27);
+emit_16(28);
+emit_16(29);
+emit_16(28);
+emit_16(27);
+emit_16(28);
+emit_16(29);
+emit_16(30);
+emit_16(31);
+emit_16(30);
+emit_16(29);
+emit_16(30);
+emit_16(31);
+emit_16(32);
+emit_16(33);
+emit_16(32);
+emit_16(31);
+emit_16(32);
+emit_16(33);
+emit_16(34);
+emit_16(35);
+emit_16(34);
+emit_16(33);
+emit_16(34);
+emit_16(35);
+emit_16(36);
+emit_16(37);
+emit_16(36);
+emit_16(35);
+emit_16(36);
+emit_16(37);
+emit_16(38);
+emit_16(39);
+emit_16(38);
+emit_16(37);
+emit_16(38);
+emit_16(39);
+emit_16(40);
+emit_16(41);
+emit_16(40);
+emit_16(39);
+emit_16(40);
+emit_16(41);
+emit_16(42);
+emit_16(43);
+emit_16(42);
+emit_16(41);
+emit_16(42);
+emit_16(43);
+emit_16(44);
+emit_16(45);
+emit_16(44);
+emit_16(43);
+emit_16(44);
+emit_16(45);
+emit_16(46);
+emit_16(47);
+emit_16(46);
+emit_16(45);
+emit_16(46);
+emit_16(47);
+emit_16(48);
+emit_16(49);
+emit_16(48);
+emit_16(47);
+emit_16(48);
+emit_16(49);
+emit_16(50);
+emit_16(51);
+emit_16(50);
+emit_16(49);
+emit_16(50);
+emit_16(51);
+emit_16(52);
+emit_16(53);
+emit_16(52);
+emit_16(51);
+emit_16(52);
+emit_16(53);
+emit_16(54);
+emit_16(55);
+emit_16(54);
+emit_16(53);
+emit_16(54);
+emit_16(55);
+emit_16(56);
+emit_16(57);
+emit_16(56);
+emit_16(55);
+emit_16(56);
+emit_16(57);
+emit_16(58);
+emit_16(59);
+emit_16(58);
+emit_16(57);
+emit_16(58);
+emit_16(59);
+emit_16(60);
+emit_16(61);
+emit_16(60);
+emit_16(59);
+emit_16(60);
+emit_16(61);
+emit_16(62);
+emit_16(63);
+emit_16(62);
+emit_16(61);
+emit_16(62);
+emit_16(63);
+emit_16(64);
+emit_16(65);
+emit_16(64);
+emit_16(63);
+emit_16(64);
+emit_16(65);
+emit_16(66);
+emit_16(67);
+emit_16(66);
+emit_16(65);
+emit_16(66);
+emit_16(67);
+emit_16(68);
+emit_16(69);
+emit_16(68);
+emit_16(67);
+emit_16(68);
+emit_16(69);
+emit_16(70);
+emit_16(71);
+emit_16(70);
+emit_16(69);
+emit_16(70);
+emit_16(71);
+emit_16(72);
+emit_16(73);
+emit_16(72);
+emit_16(71);
+emit_16(72);
+emit_16(73);
+emit_16(74);
+emit_16(75);
+emit_16(74);
+emit_16(73);
+emit_16(74);
+emit_16(75);
+emit_16(76);
+emit_16(77);
+emit_16(76);
+emit_16(75);
+emit_16(76);
+emit_16(77);
+emit_16(78);
+emit_16(79);
+emit_16(78);
+emit_16(77);
+emit_16(78);
+emit_16(79);
+emit_16(80);
+emit_16(81);
+emit_16(80);
+emit_16(79);
+emit_16(80);
+emit_16(81);
+emit_16(82);
+emit_16(83);
+emit_16(82);
+emit_16(81);
+emit_16(82);
+emit_16(83);
+emit_16(84);
+emit_16(85);
+emit_16(84);
+emit_16(83);
+emit_16(84);
+emit_16(85);
+emit_16(86);
+emit_16(87);
+emit_16(86);
+emit_16(85);
+emit_16(86);
+emit_16(87);
+emit_16(88);
+emit_16(89);
+emit_16(88);
+emit_16(87);
+emit_16(88);
+emit_16(89);
+emit_16(90);
+emit_16(91);
+emit_16(90);
+emit_16(89);
+emit_16(90);
+emit_16(91);
+emit_16(92);
+emit_16(93);
+emit_16(92);
+emit_16(91);
+emit_16(92);
+emit_16(93);
+emit_16(94);
+emit_16(95);
+emit_16(94);
+emit_16(93);
+emit_16(94);
+emit_16(95);
+emit_16(96);
+emit_16(97);
+emit_16(96);
+emit_16(95);
+emit_16(96);
+emit_16(97);
+emit_16(98);
+emit_16(99);
+emit_16(98);
+emit_16(97);
+emit_16(98);
+emit_16(99);
+emit_16(100);
+emit_16(101);
+emit_16(100);
+emit_16(99);
+emit_16(100);
+emit_16(101);
+emit_16(102);
+emit_16(103);
+emit_16(102);
+emit_16(101);
+emit_16(102);
+emit_16(103);
+emit_16(104);
+emit_16(105);
+emit_16(104);
+emit_16(103);
+emit_16(104);
+emit_16(105);
+emit_16(106);
+emit_16(107);
+emit_16(106);
+emit_16(105);
+emit_16(106);
+emit_16(107);
+emit_16(108);
+emit_16(109);
+emit_16(108);
+emit_16(107);
+emit_16(108);
+emit_16(109);
+emit_16(110);
+emit_16(111);
+emit_16(110);
+emit_16(109);
+emit_16(110);
+emit_16(111);
+emit_16(112);
+emit_16(113);
+emit_16(112);
+emit_16(111);
+emit_16(112);
+emit_16(113);
+emit_16(114);
+emit_16(115);
+emit_16(114);
+emit_16(113);
+emit_16(114);
+emit_16(115);
+emit_16(116);
+emit_16(117);
+emit_16(116);
+emit_16(115);
+emit_16(116);
+emit_16(117);
+emit_16(118);
+emit_16(119);
+emit_16(118);
+emit_16(117);
+emit_16(118);
+emit_16(119);
+emit_16(120);
+emit_16(121);
+emit_16(120);
+emit_16(119);
+emit_16(120);
+emit_16(121);
+emit_16(122);
+emit_16(123);
+emit_16(122);
+emit_16(121);
+emit_16(122);
+emit_16(123);
+emit_16(124);
+emit_16(125);
+emit_16(124);
+emit_16(123);
+emit_16(124);
+emit_16(125);
+emit_16(126);
+emit_16(127);
+emit_16(126);
+emit_16(125);
+emit_16(128);
+emit_16(0);
+emit_16(129);
+emit_16(2);
+emit_16(129);
+emit_16(0);
+emit_16(129);
+emit_16(2);
+emit_16(130);
+emit_16(4);
+emit_16(130);
+emit_16(2);
+emit_16(130);
+emit_16(4);
+emit_16(131);
+emit_16(6);
+emit_16(131);
+emit_16(4);
+emit_16(131);
+emit_16(6);
+emit_16(132);
+emit_16(8);
+emit_16(132);
+emit_16(6);
+emit_16(132);
+emit_16(8);
+emit_16(133);
+emit_16(10);
+emit_16(133);
+emit_16(8);
+emit_16(133);
+emit_16(10);
+emit_16(134);
+emit_16(12);
+emit_16(134);
+emit_16(10);
+emit_16(134);
+emit_16(12);
+emit_16(135);
+emit_16(14);
+emit_16(135);
+emit_16(12);
+emit_16(135);
+emit_16(14);
+emit_16(136);
+emit_16(16);
+emit_16(136);
+emit_16(14);
+emit_16(136);
+emit_16(16);
+emit_16(137);
+emit_16(18);
+emit_16(137);
+emit_16(16);
+emit_16(137);
+emit_16(18);
+emit_16(138);
+emit_16(20);
+emit_16(138);
+emit_16(18);
+emit_16(138);
+emit_16(20);
+emit_16(139);
+emit_16(22);
+emit_16(139);
+emit_16(20);
+emit_16(139);
+emit_16(22);
+emit_16(140);
+emit_16(24);
+emit_16(140);
+emit_16(22);
+emit_16(140);
+emit_16(24);
+emit_16(141);
+emit_16(26);
+emit_16(141);
+emit_16(24);
+emit_16(141);
+emit_16(26);
+emit_16(142);
+emit_16(28);
+emit_16(142);
+emit_16(26);
+emit_16(142);
+emit_16(28);
+emit_16(143);
+emit_16(30);
+emit_16(143);
+emit_16(28);
+emit_16(143);
+emit_16(30);
+emit_16(144);
+emit_16(32);
+emit_16(144);
+emit_16(30);
+emit_16(144);
+emit_16(32);
+emit_16(145);
+emit_16(34);
+emit_16(145);
+emit_16(32);
+emit_16(145);
+emit_16(34);
+emit_16(146);
+emit_16(36);
+emit_16(146);
+emit_16(34);
+emit_16(146);
+emit_16(36);
+emit_16(147);
+emit_16(38);
+emit_16(147);
+emit_16(36);
+emit_16(147);
+emit_16(38);
+emit_16(148);
+emit_16(40);
+emit_16(148);
+emit_16(38);
+emit_16(148);
+emit_16(40);
+emit_16(149);
+emit_16(42);
+emit_16(149);
+emit_16(40);
+emit_16(149);
+emit_16(42);
+emit_16(150);
+emit_16(44);
+emit_16(150);
+emit_16(42);
+emit_16(150);
+emit_16(44);
+emit_16(151);
+emit_16(46);
+emit_16(151);
+emit_16(44);
+emit_16(151);
+emit_16(46);
+emit_16(152);
+emit_16(48);
+emit_16(152);
+emit_16(46);
+emit_16(152);
+emit_16(48);
+emit_16(153);
+emit_16(50);
+emit_16(153);
+emit_16(48);
+emit_16(153);
+emit_16(50);
+emit_16(154);
+emit_16(52);
+emit_16(154);
+emit_16(50);
+emit_16(154);
+emit_16(52);
+emit_16(155);
+emit_16(54);
+emit_16(155);
+emit_16(52);
+emit_16(155);
+emit_16(54);
+emit_16(156);
+emit_16(56);
+emit_16(156);
+emit_16(54);
+emit_16(156);
+emit_16(56);
+emit_16(157);
+emit_16(58);
+emit_16(157);
+emit_16(56);
+emit_16(157);
+emit_16(58);
+emit_16(158);
+emit_16(60);
+emit_16(158);
+emit_16(58);
+emit_16(158);
+emit_16(60);
+emit_16(159);
+emit_16(62);
+emit_16(159);
+emit_16(60);
+emit_16(159);
+emit_16(62);
+emit_16(160);
+emit_16(64);
+emit_16(160);
+emit_16(62);
+emit_16(160);
+emit_16(64);
+emit_16(161);
+emit_16(66);
+emit_16(161);
+emit_16(64);
+emit_16(161);
+emit_16(66);
+emit_16(162);
+emit_16(68);
+emit_16(162);
+emit_16(66);
+emit_16(162);
+emit_16(68);
+emit_16(163);
+emit_16(70);
+emit_16(163);
+emit_16(68);
+emit_16(163);
+emit_16(70);
+emit_16(164);
+emit_16(72);
+emit_16(164);
+emit_16(70);
+emit_16(164);
+emit_16(72);
+emit_16(165);
+emit_16(74);
+emit_16(165);
+emit_16(72);
+emit_16(165);
+emit_16(74);
+emit_16(166);
+emit_16(76);
+emit_16(166);
+emit_16(74);
+emit_16(166);
+emit_16(76);
+emit_16(167);
+emit_16(78);
+emit_16(167);
+emit_16(76);
+emit_16(167);
+emit_16(78);
+emit_16(168);
+emit_16(80);
+emit_16(168);
+emit_16(78);
+emit_16(168);
+emit_16(80);
+emit_16(169);
+emit_16(82);
+emit_16(169);
+emit_16(80);
+emit_16(169);
+emit_16(82);
+emit_16(170);
+emit_16(84);
+emit_16(170);
+emit_16(82);
+emit_16(170);
+emit_16(84);
+emit_16(171);
+emit_16(86);
+emit_16(171);
+emit_16(84);
+emit_16(171);
+emit_16(86);
+emit_16(172);
+emit_16(88);
+emit_16(172);
+emit_16(86);
+emit_16(172);
+emit_16(88);
+emit_16(173);
+emit_16(90);
+emit_16(173);
+emit_16(88);
+emit_16(173);
+emit_16(90);
+emit_16(174);
+emit_16(92);
+emit_16(174);
+emit_16(90);
+emit_16(174);
+emit_16(92);
+emit_16(175);
+emit_16(94);
+emit_16(175);
+emit_16(92);
+emit_16(175);
+emit_16(94);
+emit_16(176);
+emit_16(96);
+emit_16(176);
+emit_16(94);
+emit_16(176);
+emit_16(96);
+emit_16(177);
+emit_16(98);
+emit_16(177);
+emit_16(96);
+emit_16(177);
+emit_16(98);
+emit_16(178);
+emit_16(100);
+emit_16(178);
+emit_16(98);
+emit_16(178);
+emit_16(100);
+emit_16(179);
+emit_16(102);
+emit_16(179);
+emit_16(100);
+emit_16(179);
+emit_16(102);
+emit_16(180);
+emit_16(104);
+emit_16(180);
+emit_16(102);
+emit_16(180);
+emit_16(104);
+emit_16(181);
+emit_16(106);
+emit_16(181);
+emit_16(104);
+emit_16(181);
+emit_16(106);
+emit_16(182);
+emit_16(108);
+emit_16(182);
+emit_16(106);
+emit_16(182);
+emit_16(108);
+emit_16(183);
+emit_16(110);
+emit_16(183);
+emit_16(108);
+emit_16(183);
+emit_16(110);
+emit_16(184);
+emit_16(112);
+emit_16(184);
+emit_16(110);
+emit_16(184);
+emit_16(112);
+emit_16(185);
+emit_16(114);
+emit_16(185);
+emit_16(112);
+emit_16(185);
+emit_16(114);
+emit_16(186);
+emit_16(116);
+emit_16(186);
+emit_16(114);
+emit_16(186);
+emit_16(116);
+emit_16(187);
+emit_16(118);
+emit_16(187);
+emit_16(116);
+emit_16(187);
+emit_16(118);
+emit_16(188);
+emit_16(120);
+emit_16(188);
+emit_16(118);
+emit_16(188);
+emit_16(120);
+emit_16(189);
+emit_16(122);
+emit_16(189);
+emit_16(120);
+emit_16(189);
+emit_16(122);
+emit_16(190);
+emit_16(124);
+emit_16(190);
+emit_16(122);
+emit_16(190);
+emit_16(124);
+emit_16(191);
+emit_16(126);
+emit_16(191);
+emit_16(124);
+emit_16(192);
+emit_16(128);
+emit_16(193);
+emit_16(129);
+emit_16(193);
+emit_16(128);
+emit_16(193);
+emit_16(129);
+emit_16(194);
+emit_16(130);
+emit_16(194);
+emit_16(129);
+emit_16(194);
+emit_16(130);
+emit_16(195);
+emit_16(131);
+emit_16(195);
+emit_16(130);
+emit_16(195);
+emit_16(131);
+emit_16(196);
+emit_16(132);
+emit_16(196);
+emit_16(131);
+emit_16(196);
+emit_16(132);
+emit_16(197);
+emit_16(133);
+emit_16(197);
+emit_16(132);
+emit_16(197);
+emit_16(133);
+emit_16(198);
+emit_16(134);
+emit_16(198);
+emit_16(133);
+emit_16(198);
+emit_16(134);
+emit_16(199);
+emit_16(135);
+emit_16(199);
+emit_16(134);
+emit_16(199);
+emit_16(135);
+emit_16(200);
+emit_16(136);
+emit_16(200);
+emit_16(135);
+emit_16(200);
+emit_16(136);
+emit_16(201);
+emit_16(137);
+emit_16(201);
+emit_16(136);
+emit_16(201);
+emit_16(137);
+emit_16(202);
+emit_16(138);
+emit_16(202);
+emit_16(137);
+emit_16(202);
+emit_16(138);
+emit_16(203);
+emit_16(139);
+emit_16(203);
+emit_16(138);
+emit_16(203);
+emit_16(139);
+emit_16(204);
+emit_16(140);
+emit_16(204);
+emit_16(139);
+emit_16(204);
+emit_16(140);
+emit_16(205);
+emit_16(141);
+emit_16(205);
+emit_16(140);
+emit_16(205);
+emit_16(141);
+emit_16(206);
+emit_16(142);
+emit_16(206);
+emit_16(141);
+emit_16(206);
+emit_16(142);
+emit_16(207);
+emit_16(143);
+emit_16(207);
+emit_16(142);
+emit_16(207);
+emit_16(143);
+emit_16(208);
+emit_16(144);
+emit_16(208);
+emit_16(143);
+emit_16(208);
+emit_16(144);
+emit_16(209);
+emit_16(145);
+emit_16(209);
+emit_16(144);
+emit_16(209);
+emit_16(145);
+emit_16(210);
+emit_16(146);
+emit_16(210);
+emit_16(145);
+emit_16(210);
+emit_16(146);
+emit_16(211);
+emit_16(147);
+emit_16(211);
+emit_16(146);
+emit_16(211);
+emit_16(147);
+emit_16(212);
+emit_16(148);
+emit_16(212);
+emit_16(147);
+emit_16(212);
+emit_16(148);
+emit_16(213);
+emit_16(149);
+emit_16(213);
+emit_16(148);
+emit_16(213);
+emit_16(149);
+emit_16(214);
+emit_16(150);
+emit_16(214);
+emit_16(149);
+emit_16(214);
+emit_16(150);
+emit_16(215);
+emit_16(151);
+emit_16(215);
+emit_16(150);
+emit_16(215);
+emit_16(151);
+emit_16(216);
+emit_16(152);
+emit_16(216);
+emit_16(151);
+emit_16(216);
+emit_16(152);
+emit_16(217);
+emit_16(153);
+emit_16(217);
+emit_16(152);
+emit_16(217);
+emit_16(153);
+emit_16(218);
+emit_16(154);
+emit_16(218);
+emit_16(153);
+emit_16(218);
+emit_16(154);
+emit_16(219);
+emit_16(155);
+emit_16(219);
+emit_16(154);
+emit_16(219);
+emit_16(155);
+emit_16(220);
+emit_16(156);
+emit_16(220);
+emit_16(155);
+emit_16(220);
+emit_16(156);
+emit_16(221);
+emit_16(157);
+emit_16(221);
+emit_16(156);
+emit_16(221);
+emit_16(157);
+emit_16(222);
+emit_16(158);
+emit_16(222);
+emit_16(157);
+emit_16(222);
+emit_16(158);
+emit_16(223);
+emit_16(159);
+emit_16(223);
+emit_16(158);
+emit_16(223);
+emit_16(159);
+emit_16(224);
+emit_16(160);
+emit_16(224);
+emit_16(159);
+emit_16(224);
+emit_16(160);
+emit_16(225);
+emit_16(161);
+emit_16(225);
+emit_16(160);
+emit_16(225);
+emit_16(161);
+emit_16(226);
+emit_16(162);
+emit_16(226);
+emit_16(161);
+emit_16(226);
+emit_16(162);
+emit_16(227);
+emit_16(163);
+emit_16(227);
+emit_16(162);
+emit_16(227);
+emit_16(163);
+emit_16(228);
+emit_16(164);
+emit_16(228);
+emit_16(163);
+emit_16(228);
+emit_16(164);
+emit_16(229);
+emit_16(165);
+emit_16(229);
+emit_16(164);
+emit_16(229);
+emit_16(165);
+emit_16(230);
+emit_16(166);
+emit_16(230);
+emit_16(165);
+emit_16(230);
+emit_16(166);
+emit_16(231);
+emit_16(167);
+emit_16(231);
+emit_16(166);
+emit_16(231);
+emit_16(167);
+emit_16(232);
+emit_16(168);
+emit_16(232);
+emit_16(167);
+emit_16(232);
+emit_16(168);
+emit_16(233);
+emit_16(169);
+emit_16(233);
+emit_16(168);
+emit_16(233);
+emit_16(169);
+emit_16(234);
+emit_16(170);
+emit_16(234);
+emit_16(169);
+emit_16(234);
+emit_16(170);
+emit_16(235);
+emit_16(171);
+emit_16(235);
+emit_16(170);
+emit_16(235);
+emit_16(171);
+emit_16(236);
+emit_16(172);
+emit_16(236);
+emit_16(171);
+emit_16(236);
+emit_16(172);
+emit_16(237);
+emit_16(173);
+emit_16(237);
+emit_16(172);
+emit_16(237);
+emit_16(173);
+emit_16(238);
+emit_16(174);
+emit_16(238);
+emit_16(173);
+emit_16(238);
+emit_16(174);
+emit_16(239);
+emit_16(175);
+emit_16(239);
+emit_16(174);
+emit_16(239);
+emit_16(175);
+emit_16(240);
+emit_16(176);
+emit_16(240);
+emit_16(175);
+emit_16(240);
+emit_16(176);
+emit_16(241);
+emit_16(177);
+emit_16(241);
+emit_16(176);
+emit_16(241);
+emit_16(177);
+emit_16(242);
+emit_16(178);
+emit_16(242);
+emit_16(177);
+emit_16(242);
+emit_16(178);
+emit_16(243);
+emit_16(179);
+emit_16(243);
+emit_16(178);
+emit_16(243);
+emit_16(179);
+emit_16(244);
+emit_16(180);
+emit_16(244);
+emit_16(179);
+emit_16(244);
+emit_16(180);
+emit_16(245);
+emit_16(181);
+emit_16(245);
+emit_16(180);
+emit_16(245);
+emit_16(181);
+emit_16(246);
+emit_16(182);
+emit_16(246);
+emit_16(181);
+emit_16(246);
+emit_16(182);
+emit_16(247);
+emit_16(183);
+emit_16(247);
+emit_16(182);
+emit_16(247);
+emit_16(183);
+emit_16(248);
+emit_16(184);
+emit_16(248);
+emit_16(183);
+emit_16(248);
+emit_16(184);
+emit_16(249);
+emit_16(185);
+emit_16(249);
+emit_16(184);
+emit_16(249);
+emit_16(185);
+emit_16(250);
+emit_16(186);
+emit_16(250);
+emit_16(185);
+emit_16(250);
+emit_16(186);
+emit_16(251);
+emit_16(187);
+emit_16(251);
+emit_16(186);
+emit_16(251);
+emit_16(187);
+emit_16(252);
+emit_16(188);
+emit_16(252);
+emit_16(187);
+emit_16(252);
+emit_16(188);
+emit_16(253);
+emit_16(189);
+emit_16(253);
+emit_16(188);
+emit_16(253);
+emit_16(189);
+emit_16(254);
+emit_16(190);
+emit_16(254);
+emit_16(189);
+emit_16(254);
+emit_16(190);
+emit_16(255);
+emit_16(191);
+emit_16(255);
+emit_16(190);
+emit_16(256);
+emit_16(192);
+emit_16(257);
+emit_16(193);
+emit_16(257);
+emit_16(192);
+emit_16(257);
+emit_16(193);
+emit_16(258);
+emit_16(194);
+emit_16(258);
+emit_16(193);
+emit_16(258);
+emit_16(194);
+emit_16(259);
+emit_16(195);
+emit_16(259);
+emit_16(194);
+emit_16(259);
+emit_16(195);
+emit_16(260);
+emit_16(196);
+emit_16(260);
+emit_16(195);
+emit_16(260);
+emit_16(196);
+emit_16(261);
+emit_16(197);
+emit_16(261);
+emit_16(196);
+emit_16(261);
+emit_16(197);
+emit_16(262);
+emit_16(198);
+emit_16(262);
+emit_16(197);
+emit_16(262);
+emit_16(198);
+emit_16(263);
+emit_16(199);
+emit_16(263);
+emit_16(198);
+emit_16(263);
+emit_16(199);
+emit_16(264);
+emit_16(200);
+emit_16(264);
+emit_16(199);
+emit_16(264);
+emit_16(200);
+emit_16(265);
+emit_16(201);
+emit_16(265);
+emit_16(200);
+emit_16(265);
+emit_16(201);
+emit_16(266);
+emit_16(202);
+emit_16(266);
+emit_16(201);
+emit_16(266);
+emit_16(202);
+emit_16(267);
+emit_16(203);
+emit_16(267);
+emit_16(202);
+emit_16(267);
+emit_16(203);
+emit_16(268);
+emit_16(204);
+emit_16(268);
+emit_16(203);
+emit_16(268);
+emit_16(204);
+emit_16(269);
+emit_16(205);
+emit_16(269);
+emit_16(204);
+emit_16(269);
+emit_16(205);
+emit_16(270);
+emit_16(206);
+emit_16(270);
+emit_16(205);
+emit_16(270);
+emit_16(206);
+emit_16(271);
+emit_16(207);
+emit_16(271);
+emit_16(206);
+emit_16(271);
+emit_16(207);
+emit_16(272);
+emit_16(208);
+emit_16(272);
+emit_16(207);
+emit_16(272);
+emit_16(208);
+emit_16(273);
+emit_16(209);
+emit_16(273);
+emit_16(208);
+emit_16(273);
+emit_16(209);
+emit_16(274);
+emit_16(210);
+emit_16(274);
+emit_16(209);
+emit_16(274);
+emit_16(210);
+emit_16(275);
+emit_16(211);
+emit_16(275);
+emit_16(210);
+emit_16(275);
+emit_16(211);
+emit_16(276);
+emit_16(212);
+emit_16(276);
+emit_16(211);
+emit_16(276);
+emit_16(212);
+emit_16(277);
+emit_16(213);
+emit_16(277);
+emit_16(212);
+emit_16(277);
+emit_16(213);
+emit_16(278);
+emit_16(214);
+emit_16(278);
+emit_16(213);
+emit_16(278);
+emit_16(214);
+emit_16(279);
+emit_16(215);
+emit_16(279);
+emit_16(214);
+emit_16(279);
+emit_16(215);
+emit_16(280);
+emit_16(216);
+emit_16(280);
+emit_16(215);
+emit_16(280);
+emit_16(216);
+emit_16(281);
+emit_16(217);
+emit_16(281);
+emit_16(216);
+emit_16(281);
+emit_16(217);
+emit_16(282);
+emit_16(218);
+emit_16(282);
+emit_16(217);
+emit_16(282);
+emit_16(218);
+emit_16(283);
+emit_16(219);
+emit_16(283);
+emit_16(218);
+emit_16(283);
+emit_16(219);
+emit_16(284);
+emit_16(220);
+emit_16(284);
+emit_16(219);
+emit_16(284);
+emit_16(220);
+emit_16(285);
+emit_16(221);
+emit_16(285);
+emit_16(220);
+emit_16(285);
+emit_16(221);
+emit_16(286);
+emit_16(222);
+emit_16(286);
+emit_16(221);
+emit_16(286);
+emit_16(222);
+emit_16(287);
+emit_16(223);
+emit_16(287);
+emit_16(222);
+emit_16(287);
+emit_16(223);
+emit_16(288);
+emit_16(224);
+emit_16(288);
+emit_16(223);
+emit_16(288);
+emit_16(224);
+emit_16(289);
+emit_16(225);
+emit_16(289);
+emit_16(224);
+emit_16(289);
+emit_16(225);
+emit_16(290);
+emit_16(226);
+emit_16(290);
+emit_16(225);
+emit_16(290);
+emit_16(226);
+emit_16(291);
+emit_16(227);
+emit_16(291);
+emit_16(226);
+emit_16(291);
+emit_16(227);
+emit_16(292);
+emit_16(228);
+emit_16(292);
+emit_16(227);
+emit_16(292);
+emit_16(228);
+emit_16(293);
+emit_16(229);
+emit_16(293);
+emit_16(228);
+emit_16(293);
+emit_16(229);
+emit_16(294);
+emit_16(230);
+emit_16(294);
+emit_16(229);
+emit_16(294);
+emit_16(230);
+emit_16(295);
+emit_16(231);
+emit_16(295);
+emit_16(230);
+emit_16(295);
+emit_16(231);
+emit_16(296);
+emit_16(232);
+emit_16(296);
+emit_16(231);
+emit_16(296);
+emit_16(232);
+emit_16(297);
+emit_16(233);
+emit_16(297);
+emit_16(232);
+emit_16(297);
+emit_16(233);
+emit_16(298);
+emit_16(234);
+emit_16(298);
+emit_16(233);
+emit_16(298);
+emit_16(234);
+emit_16(299);
+emit_16(235);
+emit_16(299);
+emit_16(234);
+emit_16(299);
+emit_16(235);
+emit_16(300);
+emit_16(236);
+emit_16(300);
+emit_16(235);
+emit_16(300);
+emit_16(236);
+emit_16(301);
+emit_16(237);
+emit_16(301);
+emit_16(236);
+emit_16(301);
+emit_16(237);
+emit_16(302);
+emit_16(238);
+emit_16(302);
+emit_16(237);
+emit_16(302);
+emit_16(238);
+emit_16(303);
+emit_16(239);
+emit_16(303);
+emit_16(238);
+emit_16(303);
+emit_16(239);
+emit_16(304);
+emit_16(240);
+emit_16(304);
+emit_16(239);
+emit_16(304);
+emit_16(240);
+emit_16(305);
+emit_16(241);
+emit_16(305);
+emit_16(240);
+emit_16(305);
+emit_16(241);
+emit_16(306);
+emit_16(242);
+emit_16(306);
+emit_16(241);
+emit_16(306);
+emit_16(242);
+emit_16(307);
+emit_16(243);
+emit_16(307);
+emit_16(242);
+emit_16(307);
+emit_16(243);
+emit_16(308);
+emit_16(244);
+emit_16(308);
+emit_16(243);
+emit_16(308);
+emit_16(244);
+emit_16(309);
+emit_16(245);
+emit_16(309);
+emit_16(244);
+emit_16(309);
+emit_16(245);
+emit_16(310);
+emit_16(246);
+emit_16(310);
+emit_16(245);
+emit_16(310);
+emit_16(246);
+emit_16(311);
+emit_16(247);
+emit_16(311);
+emit_16(246);
+emit_16(311);
+emit_16(247);
+emit_16(312);
+emit_16(248);
+emit_16(312);
+emit_16(247);
+emit_16(312);
+emit_16(248);
+emit_16(313);
+emit_16(249);
+emit_16(313);
+emit_16(248);
+emit_16(313);
+emit_16(249);
+emit_16(314);
+emit_16(250);
+emit_16(314);
+emit_16(249);
+emit_16(314);
+emit_16(250);
+emit_16(315);
+emit_16(251);
+emit_16(315);
+emit_16(250);
+emit_16(315);
+emit_16(251);
+emit_16(316);
+emit_16(252);
+emit_16(316);
+emit_16(251);
+emit_16(316);
+emit_16(252);
+emit_16(317);
+emit_16(253);
+emit_16(317);
+emit_16(252);
+emit_16(317);
+emit_16(253);
+emit_16(318);
+emit_16(254);
+emit_16(318);
+emit_16(253);
+emit_16(318);
+emit_16(254);
+emit_16(319);
+emit_16(255);
+emit_16(319);
+emit_16(254);
+emit_16(320);
+emit_16(256);
+emit_16(321);
+emit_16(257);
+emit_16(321);
+emit_16(256);
+emit_16(321);
+emit_16(257);
+emit_16(322);
+emit_16(258);
+emit_16(322);
+emit_16(257);
+emit_16(322);
+emit_16(258);
+emit_16(323);
+emit_16(259);
+emit_16(323);
+emit_16(258);
+emit_16(323);
+emit_16(259);
+emit_16(324);
+emit_16(260);
+emit_16(324);
+emit_16(259);
+emit_16(324);
+emit_16(260);
+emit_16(325);
+emit_16(261);
+emit_16(325);
+emit_16(260);
+emit_16(325);
+emit_16(261);
+emit_16(326);
+emit_16(262);
+emit_16(326);
+emit_16(261);
+emit_16(326);
+emit_16(262);
+emit_16(327);
+emit_16(263);
+emit_16(327);
+emit_16(262);
+emit_16(327);
+emit_16(263);
+emit_16(328);
+emit_16(264);
+emit_16(328);
+emit_16(263);
+emit_16(328);
+emit_16(264);
+emit_16(329);
+emit_16(265);
+emit_16(329);
+emit_16(264);
+emit_16(329);
+emit_16(265);
+emit_16(330);
+emit_16(266);
+emit_16(330);
+emit_16(265);
+emit_16(330);
+emit_16(266);
+emit_16(331);
+emit_16(267);
+emit_16(331);
+emit_16(266);
+emit_16(331);
+emit_16(267);
+emit_16(332);
+emit_16(268);
+emit_16(332);
+emit_16(267);
+emit_16(332);
+emit_16(268);
+emit_16(333);
+emit_16(269);
+emit_16(333);
+emit_16(268);
+emit_16(333);
+emit_16(269);
+emit_16(334);
+emit_16(270);
+emit_16(334);
+emit_16(269);
+emit_16(334);
+emit_16(270);
+emit_16(335);
+emit_16(271);
+emit_16(335);
+emit_16(270);
+emit_16(335);
+emit_16(271);
+emit_16(336);
+emit_16(272);
+emit_16(336);
+emit_16(271);
+emit_16(336);
+emit_16(272);
+emit_16(337);
+emit_16(273);
+emit_16(337);
+emit_16(272);
+emit_16(337);
+emit_16(273);
+emit_16(338);
+emit_16(274);
+emit_16(338);
+emit_16(273);
+emit_16(338);
+emit_16(274);
+emit_16(339);
+emit_16(275);
+emit_16(339);
+emit_16(274);
+emit_16(339);
+emit_16(275);
+emit_16(340);
+emit_16(276);
+emit_16(340);
+emit_16(275);
+emit_16(340);
+emit_16(276);
+emit_16(341);
+emit_16(277);
+emit_16(341);
+emit_16(276);
+emit_16(341);
+emit_16(277);
+emit_16(342);
+emit_16(278);
+emit_16(342);
+emit_16(277);
+emit_16(342);
+emit_16(278);
+emit_16(343);
+emit_16(279);
+emit_16(343);
+emit_16(278);
+emit_16(343);
+emit_16(279);
+emit_16(344);
+emit_16(280);
+emit_16(344);
+emit_16(279);
+emit_16(344);
+emit_16(280);
+emit_16(345);
+emit_16(281);
+emit_16(345);
+emit_16(280);
+emit_16(345);
+emit_16(281);
+emit_16(346);
+emit_16(282);
+emit_16(346);
+emit_16(281);
+emit_16(346);
+emit_16(282);
+emit_16(347);
+emit_16(283);
+emit_16(347);
+emit_16(282);
+emit_16(347);
+emit_16(283);
+emit_16(348);
+emit_16(284);
+emit_16(348);
+emit_16(283);
+emit_16(348);
+emit_16(284);
+emit_16(349);
+emit_16(285);
+emit_16(349);
+emit_16(284);
+emit_16(349);
+emit_16(285);
+emit_16(350);
+emit_16(286);
+emit_16(350);
+emit_16(285);
+emit_16(350);
+emit_16(286);
+emit_16(351);
+emit_16(287);
+emit_16(351);
+emit_16(286);
+emit_16(351);
+emit_16(287);
+emit_16(352);
+emit_16(288);
+emit_16(352);
+emit_16(287);
+emit_16(352);
+emit_16(288);
+emit_16(353);
+emit_16(289);
+emit_16(353);
+emit_16(288);
+emit_16(353);
+emit_16(289);
+emit_16(354);
+emit_16(290);
+emit_16(354);
+emit_16(289);
+emit_16(354);
+emit_16(290);
+emit_16(355);
+emit_16(291);
+emit_16(355);
+emit_16(290);
+emit_16(355);
+emit_16(291);
+emit_16(356);
+emit_16(292);
+emit_16(356);
+emit_16(291);
+emit_16(356);
+emit_16(292);
+emit_16(357);
+emit_16(293);
+emit_16(357);
+emit_16(292);
+emit_16(357);
+emit_16(293);
+emit_16(358);
+emit_16(294);
+emit_16(358);
+emit_16(293);
+emit_16(358);
+emit_16(294);
+emit_16(359);
+emit_16(295);
+emit_16(359);
+emit_16(294);
+emit_16(359);
+emit_16(295);
+emit_16(360);
+emit_16(296);
+emit_16(360);
+emit_16(295);
+emit_16(360);
+emit_16(296);
+emit_16(361);
+emit_16(297);
+emit_16(361);
+emit_16(296);
+emit_16(361);
+emit_16(297);
+emit_16(362);
+emit_16(298);
+emit_16(362);
+emit_16(297);
+emit_16(362);
+emit_16(298);
+emit_16(363);
+emit_16(299);
+emit_16(363);
+emit_16(298);
+emit_16(363);
+emit_16(299);
+emit_16(364);
+emit_16(300);
+emit_16(364);
+emit_16(299);
+emit_16(364);
+emit_16(300);
+emit_16(365);
+emit_16(301);
+emit_16(365);
+emit_16(300);
+emit_16(365);
+emit_16(301);
+emit_16(366);
+emit_16(302);
+emit_16(366);
+emit_16(301);
+emit_16(366);
+emit_16(302);
+emit_16(367);
+emit_16(303);
+emit_16(367);
+emit_16(302);
+emit_16(367);
+emit_16(303);
+emit_16(368);
+emit_16(304);
+emit_16(368);
+emit_16(303);
+emit_16(368);
+emit_16(304);
+emit_16(369);
+emit_16(305);
+emit_16(369);
+emit_16(304);
+emit_16(369);
+emit_16(305);
+emit_16(370);
+emit_16(306);
+emit_16(370);
+emit_16(305);
+emit_16(370);
+emit_16(306);
+emit_16(371);
+emit_16(307);
+emit_16(371);
+emit_16(306);
+emit_16(371);
+emit_16(307);
+emit_16(372);
+emit_16(308);
+emit_16(372);
+emit_16(307);
+emit_16(372);
+emit_16(308);
+emit_16(373);
+emit_16(309);
+emit_16(373);
+emit_16(308);
+emit_16(373);
+emit_16(309);
+emit_16(374);
+emit_16(310);
+emit_16(374);
+emit_16(309);
+emit_16(374);
+emit_16(310);
+emit_16(375);
+emit_16(311);
+emit_16(375);
+emit_16(310);
+emit_16(375);
+emit_16(311);
+emit_16(376);
+emit_16(312);
+emit_16(376);
+emit_16(311);
+emit_16(376);
+emit_16(312);
+emit_16(377);
+emit_16(313);
+emit_16(377);
+emit_16(312);
+emit_16(377);
+emit_16(313);
+emit_16(378);
+emit_16(314);
+emit_16(378);
+emit_16(313);
+emit_16(378);
+emit_16(314);
+emit_16(379);
+emit_16(315);
+emit_16(379);
+emit_16(314);
+emit_16(379);
+emit_16(315);
+emit_16(380);
+emit_16(316);
+emit_16(380);
+emit_16(315);
+emit_16(380);
+emit_16(316);
+emit_16(381);
+emit_16(317);
+emit_16(381);
+emit_16(316);
+emit_16(381);
+emit_16(317);
+emit_16(382);
+emit_16(318);
+emit_16(382);
+emit_16(317);
+emit_16(382);
+emit_16(318);
+emit_16(383);
+emit_16(319);
+emit_16(383);
+emit_16(318);
+emit_16(384);
+emit_16(320);
+emit_16(385);
+emit_16(321);
+emit_16(385);
+emit_16(320);
+emit_16(385);
+emit_16(321);
+emit_16(386);
+emit_16(322);
+emit_16(386);
+emit_16(321);
+emit_16(386);
+emit_16(322);
+emit_16(387);
+emit_16(323);
+emit_16(387);
+emit_16(322);
+emit_16(387);
+emit_16(323);
+emit_16(388);
+emit_16(324);
+emit_16(388);
+emit_16(323);
+emit_16(388);
+emit_16(324);
+emit_16(389);
+emit_16(325);
+emit_16(389);
+emit_16(324);
+emit_16(389);
+emit_16(325);
+emit_16(390);
+emit_16(326);
+emit_16(390);
+emit_16(325);
+emit_16(390);
+emit_16(326);
+emit_16(391);
+emit_16(327);
+emit_16(391);
+emit_16(326);
+emit_16(391);
+emit_16(327);
+emit_16(392);
+emit_16(328);
+emit_16(392);
+emit_16(327);
+emit_16(392);
+emit_16(328);
+emit_16(393);
+emit_16(329);
+emit_16(393);
+emit_16(328);
+emit_16(393);
+emit_16(329);
+emit_16(394);
+emit_16(330);
+emit_16(394);
+emit_16(329);
+emit_16(394);
+emit_16(330);
+emit_16(395);
+emit_16(331);
+emit_16(395);
+emit_16(330);
+emit_16(395);
+emit_16(331);
+emit_16(396);
+emit_16(332);
+emit_16(396);
+emit_16(331);
+emit_16(396);
+emit_16(332);
+emit_16(397);
+emit_16(333);
+emit_16(397);
+emit_16(332);
+emit_16(397);
+emit_16(333);
+emit_16(398);
+emit_16(334);
+emit_16(398);
+emit_16(333);
+emit_16(398);
+emit_16(334);
+emit_16(399);
+emit_16(335);
+emit_16(399);
+emit_16(334);
+emit_16(399);
+emit_16(335);
+emit_16(400);
+emit_16(336);
+emit_16(400);
+emit_16(335);
+emit_16(400);
+emit_16(336);
+emit_16(401);
+emit_16(337);
+emit_16(401);
+emit_16(336);
+emit_16(401);
+emit_16(337);
+emit_16(402);
+emit_16(338);
+emit_16(402);
+emit_16(337);
+emit_16(402);
+emit_16(338);
+emit_16(403);
+emit_16(339);
+emit_16(403);
+emit_16(338);
+emit_16(403);
+emit_16(339);
+emit_16(404);
+emit_16(340);
+emit_16(404);
+emit_16(339);
+emit_16(404);
+emit_16(340);
+emit_16(405);
+emit_16(341);
+emit_16(405);
+emit_16(340);
+emit_16(405);
+emit_16(341);
+emit_16(406);
+emit_16(342);
+emit_16(406);
+emit_16(341);
+emit_16(406);
+emit_16(342);
+emit_16(407);
+emit_16(343);
+emit_16(407);
+emit_16(342);
+emit_16(407);
+emit_16(343);
+emit_16(408);
+emit_16(344);
+emit_16(408);
+emit_16(343);
+emit_16(408);
+emit_16(344);
+emit_16(409);
+emit_16(345);
+emit_16(409);
+emit_16(344);
+emit_16(409);
+emit_16(345);
+emit_16(410);
+emit_16(346);
+emit_16(410);
+emit_16(345);
+emit_16(410);
+emit_16(346);
+emit_16(411);
+emit_16(347);
+emit_16(411);
+emit_16(346);
+emit_16(411);
+emit_16(347);
+emit_16(412);
+emit_16(348);
+emit_16(412);
+emit_16(347);
+emit_16(412);
+emit_16(348);
+emit_16(413);
+emit_16(349);
+emit_16(413);
+emit_16(348);
+emit_16(413);
+emit_16(349);
+emit_16(414);
+emit_16(350);
+emit_16(414);
+emit_16(349);
+emit_16(414);
+emit_16(350);
+emit_16(415);
+emit_16(351);
+emit_16(415);
+emit_16(350);
+emit_16(415);
+emit_16(351);
+emit_16(416);
+emit_16(352);
+emit_16(416);
+emit_16(351);
+emit_16(416);
+emit_16(352);
+emit_16(417);
+emit_16(353);
+emit_16(417);
+emit_16(352);
+emit_16(417);
+emit_16(353);
+emit_16(418);
+emit_16(354);
+emit_16(418);
+emit_16(353);
+emit_16(418);
+emit_16(354);
+emit_16(419);
+emit_16(355);
+emit_16(419);
+emit_16(354);
+emit_16(419);
+emit_16(355);
+emit_16(420);
+emit_16(356);
+emit_16(420);
+emit_16(355);
+emit_16(420);
+emit_16(356);
+emit_16(421);
+emit_16(357);
+emit_16(421);
+emit_16(356);
+emit_16(421);
+emit_16(357);
+emit_16(422);
+emit_16(358);
+emit_16(422);
+emit_16(357);
+emit_16(422);
+emit_16(358);
+emit_16(423);
+emit_16(359);
+emit_16(423);
+emit_16(358);
+emit_16(423);
+emit_16(359);
+emit_16(424);
+emit_16(360);
+emit_16(424);
+emit_16(359);
+emit_16(424);
+emit_16(360);
+emit_16(425);
+emit_16(361);
+emit_16(425);
+emit_16(360);
+emit_16(425);
+emit_16(361);
+emit_16(426);
+emit_16(362);
+emit_16(426);
+emit_16(361);
+emit_16(426);
+emit_16(362);
+emit_16(427);
+emit_16(363);
+emit_16(427);
+emit_16(362);
+emit_16(427);
+emit_16(363);
+emit_16(428);
+emit_16(364);
+emit_16(428);
+emit_16(363);
+emit_16(428);
+emit_16(364);
+emit_16(429);
+emit_16(365);
+emit_16(429);
+emit_16(364);
+emit_16(429);
+emit_16(365);
+emit_16(430);
+emit_16(366);
+emit_16(430);
+emit_16(365);
+emit_16(430);
+emit_16(366);
+emit_16(431);
+emit_16(367);
+emit_16(431);
+emit_16(366);
+emit_16(431);
+emit_16(367);
+emit_16(432);
+emit_16(368);
+emit_16(432);
+emit_16(367);
+emit_16(432);
+emit_16(368);
+emit_16(433);
+emit_16(369);
+emit_16(433);
+emit_16(368);
+emit_16(433);
+emit_16(369);
+emit_16(434);
+emit_16(370);
+emit_16(434);
+emit_16(369);
+emit_16(434);
+emit_16(370);
+emit_16(435);
+emit_16(371);
+emit_16(435);
+emit_16(370);
+emit_16(435);
+emit_16(371);
+emit_16(436);
+emit_16(372);
+emit_16(436);
+emit_16(371);
+emit_16(436);
+emit_16(372);
+emit_16(437);
+emit_16(373);
+emit_16(437);
+emit_16(372);
+emit_16(437);
+emit_16(373);
+emit_16(438);
+emit_16(374);
+emit_16(438);
+emit_16(373);
+emit_16(438);
+emit_16(374);
+emit_16(439);
+emit_16(375);
+emit_16(439);
+emit_16(374);
+emit_16(439);
+emit_16(375);
+emit_16(440);
+emit_16(376);
+emit_16(440);
+emit_16(375);
+emit_16(440);
+emit_16(376);
+emit_16(441);
+emit_16(377);
+emit_16(441);
+emit_16(376);
+emit_16(441);
+emit_16(377);
+emit_16(442);
+emit_16(378);
+emit_16(442);
+emit_16(377);
+emit_16(442);
+emit_16(378);
+emit_16(443);
+emit_16(379);
+emit_16(443);
+emit_16(378);
+emit_16(443);
+emit_16(379);
+emit_16(444);
+emit_16(380);
+emit_16(444);
+emit_16(379);
+emit_16(444);
+emit_16(380);
+emit_16(445);
+emit_16(381);
+emit_16(445);
+emit_16(380);
+emit_16(445);
+emit_16(381);
+emit_16(446);
+emit_16(382);
+emit_16(446);
+emit_16(381);
+emit_16(446);
+emit_16(382);
+emit_16(447);
+emit_16(383);
+emit_16(447);
+emit_16(382);
+emit_16(448);
+emit_16(384);
+emit_16(449);
+emit_16(385);
+emit_16(449);
+emit_16(384);
+emit_16(449);
+emit_16(385);
+emit_16(450);
+emit_16(386);
+emit_16(450);
+emit_16(385);
+emit_16(450);
+emit_16(386);
+emit_16(451);
+emit_16(387);
+emit_16(451);
+emit_16(386);
+emit_16(451);
+emit_16(387);
+emit_16(452);
+emit_16(388);
+emit_16(452);
+emit_16(387);
+emit_16(452);
+emit_16(388);
+emit_16(453);
+emit_16(389);
+emit_16(453);
+emit_16(388);
+emit_16(453);
+emit_16(389);
+emit_16(454);
+emit_16(390);
+emit_16(454);
+emit_16(389);
+emit_16(454);
+emit_16(390);
+emit_16(455);
+emit_16(391);
+emit_16(455);
+emit_16(390);
+emit_16(455);
+emit_16(391);
+emit_16(456);
+emit_16(392);
+emit_16(456);
+emit_16(391);
+emit_16(456);
+emit_16(392);
+emit_16(457);
+emit_16(393);
+emit_16(457);
+emit_16(392);
+emit_16(457);
+emit_16(393);
+emit_16(458);
+emit_16(394);
+emit_16(458);
+emit_16(393);
+emit_16(458);
+emit_16(394);
+emit_16(459);
+emit_16(395);
+emit_16(459);
+emit_16(394);
+emit_16(459);
+emit_16(395);
+emit_16(460);
+emit_16(396);
+emit_16(460);
+emit_16(395);
+emit_16(460);
+emit_16(396);
+emit_16(461);
+emit_16(397);
+emit_16(461);
+emit_16(396);
+emit_16(461);
+emit_16(397);
+emit_16(462);
+emit_16(398);
+emit_16(462);
+emit_16(397);
+emit_16(462);
+emit_16(398);
+emit_16(463);
+emit_16(399);
+emit_16(463);
+emit_16(398);
+emit_16(463);
+emit_16(399);
+emit_16(464);
+emit_16(400);
+emit_16(464);
+emit_16(399);
+emit_16(464);
+emit_16(400);
+emit_16(465);
+emit_16(401);
+emit_16(465);
+emit_16(400);
+emit_16(465);
+emit_16(401);
+emit_16(466);
+emit_16(402);
+emit_16(466);
+emit_16(401);
+emit_16(466);
+emit_16(402);
+emit_16(467);
+emit_16(403);
+emit_16(467);
+emit_16(402);
+emit_16(467);
+emit_16(403);
+emit_16(468);
+emit_16(404);
+emit_16(468);
+emit_16(403);
+emit_16(468);
+emit_16(404);
+emit_16(469);
+emit_16(405);
+emit_16(469);
+emit_16(404);
+emit_16(469);
+emit_16(405);
+emit_16(470);
+emit_16(406);
+emit_16(470);
+emit_16(405);
+emit_16(470);
+emit_16(406);
+emit_16(471);
+emit_16(407);
+emit_16(471);
+emit_16(406);
+emit_16(471);
+emit_16(407);
+emit_16(472);
+emit_16(408);
+emit_16(472);
+emit_16(407);
+emit_16(472);
+emit_16(408);
+emit_16(473);
+emit_16(409);
+emit_16(473);
+emit_16(408);
+emit_16(473);
+emit_16(409);
+emit_16(474);
+emit_16(410);
+emit_16(474);
+emit_16(409);
+emit_16(474);
+emit_16(410);
+emit_16(475);
+emit_16(411);
+emit_16(475);
+emit_16(410);
+emit_16(475);
+emit_16(411);
+emit_16(476);
+emit_16(412);
+emit_16(476);
+emit_16(411);
+emit_16(476);
+emit_16(412);
+emit_16(477);
+emit_16(413);
+emit_16(477);
+emit_16(412);
+emit_16(477);
+emit_16(413);
+emit_16(478);
+emit_16(414);
+emit_16(478);
+emit_16(413);
+emit_16(478);
+emit_16(414);
+emit_16(479);
+emit_16(415);
+emit_16(479);
+emit_16(414);
+emit_16(479);
+emit_16(415);
+emit_16(480);
+emit_16(416);
+emit_16(480);
+emit_16(415);
+emit_16(480);
+emit_16(416);
+emit_16(481);
+emit_16(417);
+emit_16(481);
+emit_16(416);
+emit_16(481);
+emit_16(417);
+emit_16(482);
+emit_16(418);
+emit_16(482);
+emit_16(417);
+emit_16(482);
+emit_16(418);
+emit_16(483);
+emit_16(419);
+emit_16(483);
+emit_16(418);
+emit_16(483);
+emit_16(419);
+emit_16(484);
+emit_16(420);
+emit_16(484);
+emit_16(419);
+emit_16(484);
+emit_16(420);
+emit_16(485);
+emit_16(421);
+emit_16(485);
+emit_16(420);
+emit_16(485);
+emit_16(421);
+emit_16(486);
+emit_16(422);
+emit_16(486);
+emit_16(421);
+emit_16(486);
+emit_16(422);
+emit_16(487);
+emit_16(423);
+emit_16(487);
+emit_16(422);
+emit_16(487);
+emit_16(423);
+emit_16(488);
+emit_16(424);
+emit_16(488);
+emit_16(423);
+emit_16(488);
+emit_16(424);
+emit_16(489);
+emit_16(425);
+emit_16(489);
+emit_16(424);
+emit_16(489);
+emit_16(425);
+emit_16(490);
+emit_16(426);
+emit_16(490);
+emit_16(425);
+emit_16(490);
+emit_16(426);
+emit_16(491);
+emit_16(427);
+emit_16(491);
+emit_16(426);
+emit_16(491);
+emit_16(427);
+emit_16(492);
+emit_16(428);
+emit_16(492);
+emit_16(427);
+emit_16(492);
+emit_16(428);
+emit_16(493);
+emit_16(429);
+emit_16(493);
+emit_16(428);
+emit_16(493);
+emit_16(429);
+emit_16(494);
+emit_16(430);
+emit_16(494);
+emit_16(429);
+emit_16(494);
+emit_16(430);
+emit_16(495);
+emit_16(431);
+emit_16(495);
+emit_16(430);
+emit_16(495);
+emit_16(431);
+emit_16(496);
+emit_16(432);
+emit_16(496);
+emit_16(431);
+emit_16(496);
+emit_16(432);
+emit_16(497);
+emit_16(433);
+emit_16(497);
+emit_16(432);
+emit_16(497);
+emit_16(433);
+emit_16(498);
+emit_16(434);
+emit_16(498);
+emit_16(433);
+emit_16(498);
+emit_16(434);
+emit_16(499);
+emit_16(435);
+emit_16(499);
+emit_16(434);
+emit_16(499);
+emit_16(435);
+emit_16(500);
+emit_16(436);
+emit_16(500);
+emit_16(435);
+emit_16(500);
+emit_16(436);
+emit_16(501);
+emit_16(437);
+emit_16(501);
+emit_16(436);
+emit_16(501);
+emit_16(437);
+emit_16(502);
+emit_16(438);
+emit_16(502);
+emit_16(437);
+emit_16(502);
+emit_16(438);
+emit_16(503);
+emit_16(439);
+emit_16(503);
+emit_16(438);
+emit_16(503);
+emit_16(439);
+emit_16(504);
+emit_16(440);
+emit_16(504);
+emit_16(439);
+emit_16(504);
+emit_16(440);
+emit_16(505);
+emit_16(441);
+emit_16(505);
+emit_16(440);
+emit_16(505);
+emit_16(441);
+emit_16(506);
+emit_16(442);
+emit_16(506);
+emit_16(441);
+emit_16(506);
+emit_16(442);
+emit_16(507);
+emit_16(443);
+emit_16(507);
+emit_16(442);
+emit_16(507);
+emit_16(443);
+emit_16(508);
+emit_16(444);
+emit_16(508);
+emit_16(443);
+emit_16(508);
+emit_16(444);
+emit_16(509);
+emit_16(445);
+emit_16(509);
+emit_16(444);
+emit_16(509);
+emit_16(445);
+emit_16(510);
+emit_16(446);
+emit_16(510);
+emit_16(445);
+emit_16(510);
+emit_16(446);
+emit_16(511);
+emit_16(447);
+emit_16(511);
+emit_16(446);
+emit_16(512);
+emit_16(448);
+emit_16(513);
+emit_16(449);
+emit_16(513);
+emit_16(448);
+emit_16(513);
+emit_16(449);
+emit_16(514);
+emit_16(450);
+emit_16(514);
+emit_16(449);
+emit_16(514);
+emit_16(450);
+emit_16(515);
+emit_16(451);
+emit_16(515);
+emit_16(450);
+emit_16(515);
+emit_16(451);
+emit_16(516);
+emit_16(452);
+emit_16(516);
+emit_16(451);
+emit_16(516);
+emit_16(452);
+emit_16(517);
+emit_16(453);
+emit_16(517);
+emit_16(452);
+emit_16(517);
+emit_16(453);
+emit_16(518);
+emit_16(454);
+emit_16(518);
+emit_16(453);
+emit_16(518);
+emit_16(454);
+emit_16(519);
+emit_16(455);
+emit_16(519);
+emit_16(454);
+emit_16(519);
+emit_16(455);
+emit_16(520);
+emit_16(456);
+emit_16(520);
+emit_16(455);
+emit_16(520);
+emit_16(456);
+emit_16(521);
+emit_16(457);
+emit_16(521);
+emit_16(456);
+emit_16(521);
+emit_16(457);
+emit_16(522);
+emit_16(458);
+emit_16(522);
+emit_16(457);
+emit_16(522);
+emit_16(458);
+emit_16(523);
+emit_16(459);
+emit_16(523);
+emit_16(458);
+emit_16(523);
+emit_16(459);
+emit_16(524);
+emit_16(460);
+emit_16(524);
+emit_16(459);
+emit_16(524);
+emit_16(460);
+emit_16(525);
+emit_16(461);
+emit_16(525);
+emit_16(460);
+emit_16(525);
+emit_16(461);
+emit_16(526);
+emit_16(462);
+emit_16(526);
+emit_16(461);
+emit_16(526);
+emit_16(462);
+emit_16(527);
+emit_16(463);
+emit_16(527);
+emit_16(462);
+emit_16(527);
+emit_16(463);
+emit_16(528);
+emit_16(464);
+emit_16(528);
+emit_16(463);
+emit_16(528);
+emit_16(464);
+emit_16(529);
+emit_16(465);
+emit_16(529);
+emit_16(464);
+emit_16(529);
+emit_16(465);
+emit_16(530);
+emit_16(466);
+emit_16(530);
+emit_16(465);
+emit_16(530);
+emit_16(466);
+emit_16(531);
+emit_16(467);
+emit_16(531);
+emit_16(466);
+emit_16(531);
+emit_16(467);
+emit_16(532);
+emit_16(468);
+emit_16(532);
+emit_16(467);
+emit_16(532);
+emit_16(468);
+emit_16(533);
+emit_16(469);
+emit_16(533);
+emit_16(468);
+emit_16(533);
+emit_16(469);
+emit_16(534);
+emit_16(470);
+emit_16(534);
+emit_16(469);
+emit_16(534);
+emit_16(470);
+emit_16(535);
+emit_16(471);
+emit_16(535);
+emit_16(470);
+emit_16(535);
+emit_16(471);
+emit_16(536);
+emit_16(472);
+emit_16(536);
+emit_16(471);
+emit_16(536);
+emit_16(472);
+emit_16(537);
+emit_16(473);
+emit_16(537);
+emit_16(472);
+emit_16(537);
+emit_16(473);
+emit_16(538);
+emit_16(474);
+emit_16(538);
+emit_16(473);
+emit_16(538);
+emit_16(474);
+emit_16(539);
+emit_16(475);
+emit_16(539);
+emit_16(474);
+emit_16(539);
+emit_16(475);
+emit_16(540);
+emit_16(476);
+emit_16(540);
+emit_16(475);
+emit_16(540);
+emit_16(476);
+emit_16(541);
+emit_16(477);
+emit_16(541);
+emit_16(476);
+emit_16(541);
+emit_16(477);
+emit_16(542);
+emit_16(478);
+emit_16(542);
+emit_16(477);
+emit_16(542);
+emit_16(478);
+emit_16(543);
+emit_16(479);
+emit_16(543);
+emit_16(478);
+emit_16(543);
+emit_16(479);
+emit_16(544);
+emit_16(480);
+emit_16(544);
+emit_16(479);
+emit_16(544);
+emit_16(480);
+emit_16(545);
+emit_16(481);
+emit_16(545);
+emit_16(480);
+emit_16(545);
+emit_16(481);
+emit_16(546);
+emit_16(482);
+emit_16(546);
+emit_16(481);
+emit_16(546);
+emit_16(482);
+emit_16(547);
+emit_16(483);
+emit_16(547);
+emit_16(482);
+emit_16(547);
+emit_16(483);
+emit_16(548);
+emit_16(484);
+emit_16(548);
+emit_16(483);
+emit_16(548);
+emit_16(484);
+emit_16(549);
+emit_16(485);
+emit_16(549);
+emit_16(484);
+emit_16(549);
+emit_16(485);
+emit_16(550);
+emit_16(486);
+emit_16(550);
+emit_16(485);
+emit_16(550);
+emit_16(486);
+emit_16(551);
+emit_16(487);
+emit_16(551);
+emit_16(486);
+emit_16(551);
+emit_16(487);
+emit_16(552);
+emit_16(488);
+emit_16(552);
+emit_16(487);
+emit_16(552);
+emit_16(488);
+emit_16(553);
+emit_16(489);
+emit_16(553);
+emit_16(488);
+emit_16(553);
+emit_16(489);
+emit_16(554);
+emit_16(490);
+emit_16(554);
+emit_16(489);
+emit_16(554);
+emit_16(490);
+emit_16(555);
+emit_16(491);
+emit_16(555);
+emit_16(490);
+emit_16(555);
+emit_16(491);
+emit_16(556);
+emit_16(492);
+emit_16(556);
+emit_16(491);
+emit_16(556);
+emit_16(492);
+emit_16(557);
+emit_16(493);
+emit_16(557);
+emit_16(492);
+emit_16(557);
+emit_16(493);
+emit_16(558);
+emit_16(494);
+emit_16(558);
+emit_16(493);
+emit_16(558);
+emit_16(494);
+emit_16(559);
+emit_16(495);
+emit_16(559);
+emit_16(494);
+emit_16(559);
+emit_16(495);
+emit_16(560);
+emit_16(496);
+emit_16(560);
+emit_16(495);
+emit_16(560);
+emit_16(496);
+emit_16(561);
+emit_16(497);
+emit_16(561);
+emit_16(496);
+emit_16(561);
+emit_16(497);
+emit_16(562);
+emit_16(498);
+emit_16(562);
+emit_16(497);
+emit_16(562);
+emit_16(498);
+emit_16(563);
+emit_16(499);
+emit_16(563);
+emit_16(498);
+emit_16(563);
+emit_16(499);
+emit_16(564);
+emit_16(500);
+emit_16(564);
+emit_16(499);
+emit_16(564);
+emit_16(500);
+emit_16(565);
+emit_16(501);
+emit_16(565);
+emit_16(500);
+emit_16(565);
+emit_16(501);
+emit_16(566);
+emit_16(502);
+emit_16(566);
+emit_16(501);
+emit_16(566);
+emit_16(502);
+emit_16(567);
+emit_16(503);
+emit_16(567);
+emit_16(502);
+emit_16(567);
+emit_16(503);
+emit_16(568);
+emit_16(504);
+emit_16(568);
+emit_16(503);
+emit_16(568);
+emit_16(504);
+emit_16(569);
+emit_16(505);
+emit_16(569);
+emit_16(504);
+emit_16(569);
+emit_16(505);
+emit_16(570);
+emit_16(506);
+emit_16(570);
+emit_16(505);
+emit_16(570);
+emit_16(506);
+emit_16(571);
+emit_16(507);
+emit_16(571);
+emit_16(506);
+emit_16(571);
+emit_16(507);
+emit_16(572);
+emit_16(508);
+emit_16(572);
+emit_16(507);
+emit_16(572);
+emit_16(508);
+emit_16(573);
+emit_16(509);
+emit_16(573);
+emit_16(508);
+emit_16(573);
+emit_16(509);
+emit_16(574);
+emit_16(510);
+emit_16(574);
+emit_16(509);
+emit_16(574);
+emit_16(510);
+emit_16(575);
+emit_16(511);
+emit_16(575);
+emit_16(510);
+emit_16(576);
+emit_16(512);
+emit_16(577);
+emit_16(513);
+emit_16(577);
+emit_16(512);
+emit_16(577);
+emit_16(513);
+emit_16(578);
+emit_16(514);
+emit_16(578);
+emit_16(513);
+emit_16(578);
+emit_16(514);
+emit_16(579);
+emit_16(515);
+emit_16(579);
+emit_16(514);
+emit_16(579);
+emit_16(515);
+emit_16(580);
+emit_16(516);
+emit_16(580);
+emit_16(515);
+emit_16(580);
+emit_16(516);
+emit_16(581);
+emit_16(517);
+emit_16(581);
+emit_16(516);
+emit_16(581);
+emit_16(517);
+emit_16(582);
+emit_16(518);
+emit_16(582);
+emit_16(517);
+emit_16(582);
+emit_16(518);
+emit_16(583);
+emit_16(519);
+emit_16(583);
+emit_16(518);
+emit_16(583);
+emit_16(519);
+emit_16(584);
+emit_16(520);
+emit_16(584);
+emit_16(519);
+emit_16(584);
+emit_16(520);
+emit_16(585);
+emit_16(521);
+emit_16(585);
+emit_16(520);
+emit_16(585);
+emit_16(521);
+emit_16(586);
+emit_16(522);
+emit_16(586);
+emit_16(521);
+emit_16(586);
+emit_16(522);
+emit_16(587);
+emit_16(523);
+emit_16(587);
+emit_16(522);
+emit_16(587);
+emit_16(523);
+emit_16(588);
+emit_16(524);
+emit_16(588);
+emit_16(523);
+emit_16(588);
+emit_16(524);
+emit_16(589);
+emit_16(525);
+emit_16(589);
+emit_16(524);
+emit_16(589);
+emit_16(525);
+emit_16(590);
+emit_16(526);
+emit_16(590);
+emit_16(525);
+emit_16(590);
+emit_16(526);
+emit_16(591);
+emit_16(527);
+emit_16(591);
+emit_16(526);
+emit_16(591);
+emit_16(527);
+emit_16(592);
+emit_16(528);
+emit_16(592);
+emit_16(527);
+emit_16(592);
+emit_16(528);
+emit_16(593);
+emit_16(529);
+emit_16(593);
+emit_16(528);
+emit_16(593);
+emit_16(529);
+emit_16(594);
+emit_16(530);
+emit_16(594);
+emit_16(529);
+emit_16(594);
+emit_16(530);
+emit_16(595);
+emit_16(531);
+emit_16(595);
+emit_16(530);
+emit_16(595);
+emit_16(531);
+emit_16(596);
+emit_16(532);
+emit_16(596);
+emit_16(531);
+emit_16(596);
+emit_16(532);
+emit_16(597);
+emit_16(533);
+emit_16(597);
+emit_16(532);
+emit_16(597);
+emit_16(533);
+emit_16(598);
+emit_16(534);
+emit_16(598);
+emit_16(533);
+emit_16(598);
+emit_16(534);
+emit_16(599);
+emit_16(535);
+emit_16(599);
+emit_16(534);
+emit_16(599);
+emit_16(535);
+emit_16(600);
+emit_16(536);
+emit_16(600);
+emit_16(535);
+emit_16(600);
+emit_16(536);
+emit_16(601);
+emit_16(537);
+emit_16(601);
+emit_16(536);
+emit_16(601);
+emit_16(537);
+emit_16(602);
+emit_16(538);
+emit_16(602);
+emit_16(537);
+emit_16(602);
+emit_16(538);
+emit_16(603);
+emit_16(539);
+emit_16(603);
+emit_16(538);
+emit_16(603);
+emit_16(539);
+emit_16(604);
+emit_16(540);
+emit_16(604);
+emit_16(539);
+emit_16(604);
+emit_16(540);
+emit_16(605);
+emit_16(541);
+emit_16(605);
+emit_16(540);
+emit_16(605);
+emit_16(541);
+emit_16(606);
+emit_16(542);
+emit_16(606);
+emit_16(541);
+emit_16(606);
+emit_16(542);
+emit_16(607);
+emit_16(543);
+emit_16(607);
+emit_16(542);
+emit_16(607);
+emit_16(543);
+emit_16(608);
+emit_16(544);
+emit_16(608);
+emit_16(543);
+emit_16(608);
+emit_16(544);
+emit_16(609);
+emit_16(545);
+emit_16(609);
+emit_16(544);
+emit_16(609);
+emit_16(545);
+emit_16(610);
+emit_16(546);
+emit_16(610);
+emit_16(545);
+emit_16(610);
+emit_16(546);
+emit_16(611);
+emit_16(547);
+emit_16(611);
+emit_16(546);
+emit_16(611);
+emit_16(547);
+emit_16(612);
+emit_16(548);
+emit_16(612);
+emit_16(547);
+emit_16(612);
+emit_16(548);
+emit_16(613);
+emit_16(549);
+emit_16(613);
+emit_16(548);
+emit_16(613);
+emit_16(549);
+emit_16(614);
+emit_16(550);
+emit_16(614);
+emit_16(549);
+emit_16(614);
+emit_16(550);
+emit_16(615);
+emit_16(551);
+emit_16(615);
+emit_16(550);
+emit_16(615);
+emit_16(551);
+emit_16(616);
+emit_16(552);
+emit_16(616);
+emit_16(551);
+emit_16(616);
+emit_16(552);
+emit_16(617);
+emit_16(553);
+emit_16(617);
+emit_16(552);
+emit_16(617);
+emit_16(553);
+emit_16(618);
+emit_16(554);
+emit_16(618);
+emit_16(553);
+emit_16(618);
+emit_16(554);
+emit_16(619);
+emit_16(555);
+emit_16(619);
+emit_16(554);
+emit_16(619);
+emit_16(555);
+emit_16(620);
+emit_16(556);
+emit_16(620);
+emit_16(555);
+emit_16(620);
+emit_16(556);
+emit_16(621);
+emit_16(557);
+emit_16(621);
+emit_16(556);
+emit_16(621);
+emit_16(557);
+emit_16(622);
+emit_16(558);
+emit_16(622);
+emit_16(557);
+emit_16(622);
+emit_16(558);
+emit_16(623);
+emit_16(559);
+emit_16(623);
+emit_16(558);
+emit_16(623);
+emit_16(559);
+emit_16(624);
+emit_16(560);
+emit_16(624);
+emit_16(559);
+emit_16(624);
+emit_16(560);
+emit_16(625);
+emit_16(561);
+emit_16(625);
+emit_16(560);
+emit_16(625);
+emit_16(561);
+emit_16(626);
+emit_16(562);
+emit_16(626);
+emit_16(561);
+emit_16(626);
+emit_16(562);
+emit_16(627);
+emit_16(563);
+emit_16(627);
+emit_16(562);
+emit_16(627);
+emit_16(563);
+emit_16(628);
+emit_16(564);
+emit_16(628);
+emit_16(563);
+emit_16(628);
+emit_16(564);
+emit_16(629);
+emit_16(565);
+emit_16(629);
+emit_16(564);
+emit_16(629);
+emit_16(565);
+emit_16(630);
+emit_16(566);
+emit_16(630);
+emit_16(565);
+emit_16(630);
+emit_16(566);
+emit_16(631);
+emit_16(567);
+emit_16(631);
+emit_16(566);
+emit_16(631);
+emit_16(567);
+emit_16(632);
+emit_16(568);
+emit_16(632);
+emit_16(567);
+emit_16(632);
+emit_16(568);
+emit_16(633);
+emit_16(569);
+emit_16(633);
+emit_16(568);
+emit_16(633);
+emit_16(569);
+emit_16(634);
+emit_16(570);
+emit_16(634);
+emit_16(569);
+emit_16(634);
+emit_16(570);
+emit_16(635);
+emit_16(571);
+emit_16(635);
+emit_16(570);
+emit_16(635);
+emit_16(571);
+emit_16(636);
+emit_16(572);
+emit_16(636);
+emit_16(571);
+emit_16(636);
+emit_16(572);
+emit_16(637);
+emit_16(573);
+emit_16(637);
+emit_16(572);
+emit_16(637);
+emit_16(573);
+emit_16(638);
+emit_16(574);
+emit_16(638);
+emit_16(573);
+emit_16(638);
+emit_16(574);
+emit_16(639);
+emit_16(575);
+emit_16(639);
+emit_16(574);
+emit_16(640);
+emit_16(576);
+emit_16(641);
+emit_16(577);
+emit_16(641);
+emit_16(576);
+emit_16(641);
+emit_16(577);
+emit_16(642);
+emit_16(578);
+emit_16(642);
+emit_16(577);
+emit_16(642);
+emit_16(578);
+emit_16(643);
+emit_16(579);
+emit_16(643);
+emit_16(578);
+emit_16(643);
+emit_16(579);
+emit_16(644);
+emit_16(580);
+emit_16(644);
+emit_16(579);
+emit_16(644);
+emit_16(580);
+emit_16(645);
+emit_16(581);
+emit_16(645);
+emit_16(580);
+emit_16(645);
+emit_16(581);
+emit_16(646);
+emit_16(582);
+emit_16(646);
+emit_16(581);
+emit_16(646);
+emit_16(582);
+emit_16(647);
+emit_16(583);
+emit_16(647);
+emit_16(582);
+emit_16(647);
+emit_16(583);
+emit_16(648);
+emit_16(584);
+emit_16(648);
+emit_16(583);
+emit_16(648);
+emit_16(584);
+emit_16(649);
+emit_16(585);
+emit_16(649);
+emit_16(584);
+emit_16(649);
+emit_16(585);
+emit_16(650);
+emit_16(586);
+emit_16(650);
+emit_16(585);
+emit_16(650);
+emit_16(586);
+emit_16(651);
+emit_16(587);
+emit_16(651);
+emit_16(586);
+emit_16(651);
+emit_16(587);
+emit_16(652);
+emit_16(588);
+emit_16(652);
+emit_16(587);
+emit_16(652);
+emit_16(588);
+emit_16(653);
+emit_16(589);
+emit_16(653);
+emit_16(588);
+emit_16(653);
+emit_16(589);
+emit_16(654);
+emit_16(590);
+emit_16(654);
+emit_16(589);
+emit_16(654);
+emit_16(590);
+emit_16(655);
+emit_16(591);
+emit_16(655);
+emit_16(590);
+emit_16(655);
+emit_16(591);
+emit_16(656);
+emit_16(592);
+emit_16(656);
+emit_16(591);
+emit_16(656);
+emit_16(592);
+emit_16(657);
+emit_16(593);
+emit_16(657);
+emit_16(592);
+emit_16(657);
+emit_16(593);
+emit_16(658);
+emit_16(594);
+emit_16(658);
+emit_16(593);
+emit_16(658);
+emit_16(594);
+emit_16(659);
+emit_16(595);
+emit_16(659);
+emit_16(594);
+emit_16(659);
+emit_16(595);
+emit_16(660);
+emit_16(596);
+emit_16(660);
+emit_16(595);
+emit_16(660);
+emit_16(596);
+emit_16(661);
+emit_16(597);
+emit_16(661);
+emit_16(596);
+emit_16(661);
+emit_16(597);
+emit_16(662);
+emit_16(598);
+emit_16(662);
+emit_16(597);
+emit_16(662);
+emit_16(598);
+emit_16(663);
+emit_16(599);
+emit_16(663);
+emit_16(598);
+emit_16(663);
+emit_16(599);
+emit_16(664);
+emit_16(600);
+emit_16(664);
+emit_16(599);
+emit_16(664);
+emit_16(600);
+emit_16(665);
+emit_16(601);
+emit_16(665);
+emit_16(600);
+emit_16(665);
+emit_16(601);
+emit_16(666);
+emit_16(602);
+emit_16(666);
+emit_16(601);
+emit_16(666);
+emit_16(602);
+emit_16(667);
+emit_16(603);
+emit_16(667);
+emit_16(602);
+emit_16(667);
+emit_16(603);
+emit_16(668);
+emit_16(604);
+emit_16(668);
+emit_16(603);
+emit_16(668);
+emit_16(604);
+emit_16(669);
+emit_16(605);
+emit_16(669);
+emit_16(604);
+emit_16(669);
+emit_16(605);
+emit_16(670);
+emit_16(606);
+emit_16(670);
+emit_16(605);
+emit_16(670);
+emit_16(606);
+emit_16(671);
+emit_16(607);
+emit_16(671);
+emit_16(606);
+emit_16(671);
+emit_16(607);
+emit_16(672);
+emit_16(608);
+emit_16(672);
+emit_16(607);
+emit_16(672);
+emit_16(608);
+emit_16(673);
+emit_16(609);
+emit_16(673);
+emit_16(608);
+emit_16(673);
+emit_16(609);
+emit_16(674);
+emit_16(610);
+emit_16(674);
+emit_16(609);
+emit_16(674);
+emit_16(610);
+emit_16(675);
+emit_16(611);
+emit_16(675);
+emit_16(610);
+emit_16(675);
+emit_16(611);
+emit_16(676);
+emit_16(612);
+emit_16(676);
+emit_16(611);
+emit_16(676);
+emit_16(612);
+emit_16(677);
+emit_16(613);
+emit_16(677);
+emit_16(612);
+emit_16(677);
+emit_16(613);
+emit_16(678);
+emit_16(614);
+emit_16(678);
+emit_16(613);
+emit_16(678);
+emit_16(614);
+emit_16(679);
+emit_16(615);
+emit_16(679);
+emit_16(614);
+emit_16(679);
+emit_16(615);
+emit_16(680);
+emit_16(616);
+emit_16(680);
+emit_16(615);
+emit_16(680);
+emit_16(616);
+emit_16(681);
+emit_16(617);
+emit_16(681);
+emit_16(616);
+emit_16(681);
+emit_16(617);
+emit_16(682);
+emit_16(618);
+emit_16(682);
+emit_16(617);
+emit_16(682);
+emit_16(618);
+emit_16(683);
+emit_16(619);
+emit_16(683);
+emit_16(618);
+emit_16(683);
+emit_16(619);
+emit_16(684);
+emit_16(620);
+emit_16(684);
+emit_16(619);
+emit_16(684);
+emit_16(620);
+emit_16(685);
+emit_16(621);
+emit_16(685);
+emit_16(620);
+emit_16(685);
+emit_16(621);
+emit_16(686);
+emit_16(622);
+emit_16(686);
+emit_16(621);
+emit_16(686);
+emit_16(622);
+emit_16(687);
+emit_16(623);
+emit_16(687);
+emit_16(622);
+emit_16(687);
+emit_16(623);
+emit_16(688);
+emit_16(624);
+emit_16(688);
+emit_16(623);
+emit_16(688);
+emit_16(624);
+emit_16(689);
+emit_16(625);
+emit_16(689);
+emit_16(624);
+emit_16(689);
+emit_16(625);
+emit_16(690);
+emit_16(626);
+emit_16(690);
+emit_16(625);
+emit_16(690);
+emit_16(626);
+emit_16(691);
+emit_16(627);
+emit_16(691);
+emit_16(626);
+emit_16(691);
+emit_16(627);
+emit_16(692);
+emit_16(628);
+emit_16(692);
+emit_16(627);
+emit_16(692);
+emit_16(628);
+emit_16(693);
+emit_16(629);
+emit_16(693);
+emit_16(628);
+emit_16(693);
+emit_16(629);
+emit_16(694);
+emit_16(630);
+emit_16(694);
+emit_16(629);
+emit_16(694);
+emit_16(630);
+emit_16(695);
+emit_16(631);
+emit_16(695);
+emit_16(630);
+emit_16(695);
+emit_16(631);
+emit_16(696);
+emit_16(632);
+emit_16(696);
+emit_16(631);
+emit_16(696);
+emit_16(632);
+emit_16(697);
+emit_16(633);
+emit_16(697);
+emit_16(632);
+emit_16(697);
+emit_16(633);
+emit_16(698);
+emit_16(634);
+emit_16(698);
+emit_16(633);
+emit_16(698);
+emit_16(634);
+emit_16(699);
+emit_16(635);
+emit_16(699);
+emit_16(634);
+emit_16(699);
+emit_16(635);
+emit_16(700);
+emit_16(636);
+emit_16(700);
+emit_16(635);
+emit_16(700);
+emit_16(636);
+emit_16(701);
+emit_16(637);
+emit_16(701);
+emit_16(636);
+emit_16(701);
+emit_16(637);
+emit_16(702);
+emit_16(638);
+emit_16(702);
+emit_16(637);
+emit_16(702);
+emit_16(638);
+emit_16(703);
+emit_16(639);
+emit_16(703);
+emit_16(638);
+emit_16(704);
+emit_16(640);
+emit_16(705);
+emit_16(641);
+emit_16(705);
+emit_16(640);
+emit_16(705);
+emit_16(641);
+emit_16(706);
+emit_16(642);
+emit_16(706);
+emit_16(641);
+emit_16(706);
+emit_16(642);
+emit_16(707);
+emit_16(643);
+emit_16(707);
+emit_16(642);
+emit_16(707);
+emit_16(643);
+emit_16(708);
+emit_16(644);
+emit_16(708);
+emit_16(643);
+emit_16(708);
+emit_16(644);
+emit_16(709);
+emit_16(645);
+emit_16(709);
+emit_16(644);
+emit_16(709);
+emit_16(645);
+emit_16(710);
+emit_16(646);
+emit_16(710);
+emit_16(645);
+emit_16(710);
+emit_16(646);
+emit_16(711);
+emit_16(647);
+emit_16(711);
+emit_16(646);
+emit_16(711);
+emit_16(647);
+emit_16(712);
+emit_16(648);
+emit_16(712);
+emit_16(647);
+emit_16(712);
+emit_16(648);
+emit_16(713);
+emit_16(649);
+emit_16(713);
+emit_16(648);
+emit_16(713);
+emit_16(649);
+emit_16(714);
+emit_16(650);
+emit_16(714);
+emit_16(649);
+emit_16(714);
+emit_16(650);
+emit_16(715);
+emit_16(651);
+emit_16(715);
+emit_16(650);
+emit_16(715);
+emit_16(651);
+emit_16(716);
+emit_16(652);
+emit_16(716);
+emit_16(651);
+emit_16(716);
+emit_16(652);
+emit_16(717);
+emit_16(653);
+emit_16(717);
+emit_16(652);
+emit_16(717);
+emit_16(653);
+emit_16(718);
+emit_16(654);
+emit_16(718);
+emit_16(653);
+emit_16(718);
+emit_16(654);
+emit_16(719);
+emit_16(655);
+emit_16(719);
+emit_16(654);
+emit_16(719);
+emit_16(655);
+emit_16(720);
+emit_16(656);
+emit_16(720);
+emit_16(655);
+emit_16(720);
+emit_16(656);
+emit_16(721);
+emit_16(657);
+emit_16(721);
+emit_16(656);
+emit_16(721);
+emit_16(657);
+emit_16(722);
+emit_16(658);
+emit_16(722);
+emit_16(657);
+emit_16(722);
+emit_16(658);
+emit_16(723);
+emit_16(659);
+emit_16(723);
+emit_16(658);
+emit_16(723);
+emit_16(659);
+emit_16(724);
+emit_16(660);
+emit_16(724);
+emit_16(659);
+emit_16(724);
+emit_16(660);
+emit_16(725);
+emit_16(661);
+emit_16(725);
+emit_16(660);
+emit_16(725);
+emit_16(661);
+emit_16(726);
+emit_16(662);
+emit_16(726);
+emit_16(661);
+emit_16(726);
+emit_16(662);
+emit_16(727);
+emit_16(663);
+emit_16(727);
+emit_16(662);
+emit_16(727);
+emit_16(663);
+emit_16(728);
+emit_16(664);
+emit_16(728);
+emit_16(663);
+emit_16(728);
+emit_16(664);
+emit_16(729);
+emit_16(665);
+emit_16(729);
+emit_16(664);
+emit_16(729);
+emit_16(665);
+emit_16(730);
+emit_16(666);
+emit_16(730);
+emit_16(665);
+emit_16(730);
+emit_16(666);
+emit_16(731);
+emit_16(667);
+emit_16(731);
+emit_16(666);
+emit_16(731);
+emit_16(667);
+emit_16(732);
+emit_16(668);
+emit_16(732);
+emit_16(667);
+emit_16(732);
+emit_16(668);
+emit_16(733);
+emit_16(669);
+emit_16(733);
+emit_16(668);
+emit_16(733);
+emit_16(669);
+emit_16(734);
+emit_16(670);
+emit_16(734);
+emit_16(669);
+emit_16(734);
+emit_16(670);
+emit_16(735);
+emit_16(671);
+emit_16(735);
+emit_16(670);
+emit_16(735);
+emit_16(671);
+emit_16(736);
+emit_16(672);
+emit_16(736);
+emit_16(671);
+emit_16(736);
+emit_16(672);
+emit_16(737);
+emit_16(673);
+emit_16(737);
+emit_16(672);
+emit_16(737);
+emit_16(673);
+emit_16(738);
+emit_16(674);
+emit_16(738);
+emit_16(673);
+emit_16(738);
+emit_16(674);
+emit_16(739);
+emit_16(675);
+emit_16(739);
+emit_16(674);
+emit_16(739);
+emit_16(675);
+emit_16(740);
+emit_16(676);
+emit_16(740);
+emit_16(675);
+emit_16(740);
+emit_16(676);
+emit_16(741);
+emit_16(677);
+emit_16(741);
+emit_16(676);
+emit_16(741);
+emit_16(677);
+emit_16(742);
+emit_16(678);
+emit_16(742);
+emit_16(677);
+emit_16(742);
+emit_16(678);
+emit_16(743);
+emit_16(679);
+emit_16(743);
+emit_16(678);
+emit_16(743);
+emit_16(679);
+emit_16(744);
+emit_16(680);
+emit_16(744);
+emit_16(679);
+emit_16(744);
+emit_16(680);
+emit_16(745);
+emit_16(681);
+emit_16(745);
+emit_16(680);
+emit_16(745);
+emit_16(681);
+emit_16(746);
+emit_16(682);
+emit_16(746);
+emit_16(681);
+emit_16(746);
+emit_16(682);
+emit_16(747);
+emit_16(683);
+emit_16(747);
+emit_16(682);
+emit_16(747);
+emit_16(683);
+emit_16(748);
+emit_16(684);
+emit_16(748);
+emit_16(683);
+emit_16(748);
+emit_16(684);
+emit_16(749);
+emit_16(685);
+emit_16(749);
+emit_16(684);
+emit_16(749);
+emit_16(685);
+emit_16(750);
+emit_16(686);
+emit_16(750);
+emit_16(685);
+emit_16(750);
+emit_16(686);
+emit_16(751);
+emit_16(687);
+emit_16(751);
+emit_16(686);
+emit_16(751);
+emit_16(687);
+emit_16(752);
+emit_16(688);
+emit_16(752);
+emit_16(687);
+emit_16(752);
+emit_16(688);
+emit_16(753);
+emit_16(689);
+emit_16(753);
+emit_16(688);
+emit_16(753);
+emit_16(689);
+emit_16(754);
+emit_16(690);
+emit_16(754);
+emit_16(689);
+emit_16(754);
+emit_16(690);
+emit_16(755);
+emit_16(691);
+emit_16(755);
+emit_16(690);
+emit_16(755);
+emit_16(691);
+emit_16(756);
+emit_16(692);
+emit_16(756);
+emit_16(691);
+emit_16(756);
+emit_16(692);
+emit_16(757);
+emit_16(693);
+emit_16(757);
+emit_16(692);
+emit_16(757);
+emit_16(693);
+emit_16(758);
+emit_16(694);
+emit_16(758);
+emit_16(693);
+emit_16(758);
+emit_16(694);
+emit_16(759);
+emit_16(695);
+emit_16(759);
+emit_16(694);
+emit_16(759);
+emit_16(695);
+emit_16(760);
+emit_16(696);
+emit_16(760);
+emit_16(695);
+emit_16(760);
+emit_16(696);
+emit_16(761);
+emit_16(697);
+emit_16(761);
+emit_16(696);
+emit_16(761);
+emit_16(697);
+emit_16(762);
+emit_16(698);
+emit_16(762);
+emit_16(697);
+emit_16(762);
+emit_16(698);
+emit_16(763);
+emit_16(699);
+emit_16(763);
+emit_16(698);
+emit_16(763);
+emit_16(699);
+emit_16(764);
+emit_16(700);
+emit_16(764);
+emit_16(699);
+emit_16(764);
+emit_16(700);
+emit_16(765);
+emit_16(701);
+emit_16(765);
+emit_16(700);
+emit_16(765);
+emit_16(701);
+emit_16(766);
+emit_16(702);
+emit_16(766);
+emit_16(701);
+emit_16(766);
+emit_16(702);
+emit_16(767);
+emit_16(703);
+emit_16(767);
+emit_16(702);
+emit_16(768);
+emit_16(704);
+emit_16(769);
+emit_16(705);
+emit_16(769);
+emit_16(704);
+emit_16(769);
+emit_16(705);
+emit_16(770);
+emit_16(706);
+emit_16(770);
+emit_16(705);
+emit_16(770);
+emit_16(706);
+emit_16(771);
+emit_16(707);
+emit_16(771);
+emit_16(706);
+emit_16(771);
+emit_16(707);
+emit_16(772);
+emit_16(708);
+emit_16(772);
+emit_16(707);
+emit_16(772);
+emit_16(708);
+emit_16(773);
+emit_16(709);
+emit_16(773);
+emit_16(708);
+emit_16(773);
+emit_16(709);
+emit_16(774);
+emit_16(710);
+emit_16(774);
+emit_16(709);
+emit_16(774);
+emit_16(710);
+emit_16(775);
+emit_16(711);
+emit_16(775);
+emit_16(710);
+emit_16(775);
+emit_16(711);
+emit_16(776);
+emit_16(712);
+emit_16(776);
+emit_16(711);
+emit_16(776);
+emit_16(712);
+emit_16(777);
+emit_16(713);
+emit_16(777);
+emit_16(712);
+emit_16(777);
+emit_16(713);
+emit_16(778);
+emit_16(714);
+emit_16(778);
+emit_16(713);
+emit_16(778);
+emit_16(714);
+emit_16(779);
+emit_16(715);
+emit_16(779);
+emit_16(714);
+emit_16(779);
+emit_16(715);
+emit_16(780);
+emit_16(716);
+emit_16(780);
+emit_16(715);
+emit_16(780);
+emit_16(716);
+emit_16(781);
+emit_16(717);
+emit_16(781);
+emit_16(716);
+emit_16(781);
+emit_16(717);
+emit_16(782);
+emit_16(718);
+emit_16(782);
+emit_16(717);
+emit_16(782);
+emit_16(718);
+emit_16(783);
+emit_16(719);
+emit_16(783);
+emit_16(718);
+emit_16(783);
+emit_16(719);
+emit_16(784);
+emit_16(720);
+emit_16(784);
+emit_16(719);
+emit_16(784);
+emit_16(720);
+emit_16(785);
+emit_16(721);
+emit_16(785);
+emit_16(720);
+emit_16(785);
+emit_16(721);
+emit_16(786);
+emit_16(722);
+emit_16(786);
+emit_16(721);
+emit_16(786);
+emit_16(722);
+emit_16(787);
+emit_16(723);
+emit_16(787);
+emit_16(722);
+emit_16(787);
+emit_16(723);
+emit_16(788);
+emit_16(724);
+emit_16(788);
+emit_16(723);
+emit_16(788);
+emit_16(724);
+emit_16(789);
+emit_16(725);
+emit_16(789);
+emit_16(724);
+emit_16(789);
+emit_16(725);
+emit_16(790);
+emit_16(726);
+emit_16(790);
+emit_16(725);
+emit_16(790);
+emit_16(726);
+emit_16(791);
+emit_16(727);
+emit_16(791);
+emit_16(726);
+emit_16(791);
+emit_16(727);
+emit_16(792);
+emit_16(728);
+emit_16(792);
+emit_16(727);
+emit_16(792);
+emit_16(728);
+emit_16(793);
+emit_16(729);
+emit_16(793);
+emit_16(728);
+emit_16(793);
+emit_16(729);
+emit_16(794);
+emit_16(730);
+emit_16(794);
+emit_16(729);
+emit_16(794);
+emit_16(730);
+emit_16(795);
+emit_16(731);
+emit_16(795);
+emit_16(730);
+emit_16(795);
+emit_16(731);
+emit_16(796);
+emit_16(732);
+emit_16(796);
+emit_16(731);
+emit_16(796);
+emit_16(732);
+emit_16(797);
+emit_16(733);
+emit_16(797);
+emit_16(732);
+emit_16(797);
+emit_16(733);
+emit_16(798);
+emit_16(734);
+emit_16(798);
+emit_16(733);
+emit_16(798);
+emit_16(734);
+emit_16(799);
+emit_16(735);
+emit_16(799);
+emit_16(734);
+emit_16(799);
+emit_16(735);
+emit_16(800);
+emit_16(736);
+emit_16(800);
+emit_16(735);
+emit_16(800);
+emit_16(736);
+emit_16(801);
+emit_16(737);
+emit_16(801);
+emit_16(736);
+emit_16(801);
+emit_16(737);
+emit_16(802);
+emit_16(738);
+emit_16(802);
+emit_16(737);
+emit_16(802);
+emit_16(738);
+emit_16(803);
+emit_16(739);
+emit_16(803);
+emit_16(738);
+emit_16(803);
+emit_16(739);
+emit_16(804);
+emit_16(740);
+emit_16(804);
+emit_16(739);
+emit_16(804);
+emit_16(740);
+emit_16(805);
+emit_16(741);
+emit_16(805);
+emit_16(740);
+emit_16(805);
+emit_16(741);
+emit_16(806);
+emit_16(742);
+emit_16(806);
+emit_16(741);
+emit_16(806);
+emit_16(742);
+emit_16(807);
+emit_16(743);
+emit_16(807);
+emit_16(742);
+emit_16(807);
+emit_16(743);
+emit_16(808);
+emit_16(744);
+emit_16(808);
+emit_16(743);
+emit_16(808);
+emit_16(744);
+emit_16(809);
+emit_16(745);
+emit_16(809);
+emit_16(744);
+emit_16(809);
+emit_16(745);
+emit_16(810);
+emit_16(746);
+emit_16(810);
+emit_16(745);
+emit_16(810);
+emit_16(746);
+emit_16(811);
+emit_16(747);
+emit_16(811);
+emit_16(746);
+emit_16(811);
+emit_16(747);
+emit_16(812);
+emit_16(748);
+emit_16(812);
+emit_16(747);
+emit_16(812);
+emit_16(748);
+emit_16(813);
+emit_16(749);
+emit_16(813);
+emit_16(748);
+emit_16(813);
+emit_16(749);
+emit_16(814);
+emit_16(750);
+emit_16(814);
+emit_16(749);
+emit_16(814);
+emit_16(750);
+emit_16(815);
+emit_16(751);
+emit_16(815);
+emit_16(750);
+emit_16(815);
+emit_16(751);
+emit_16(816);
+emit_16(752);
+emit_16(816);
+emit_16(751);
+emit_16(816);
+emit_16(752);
+emit_16(817);
+emit_16(753);
+emit_16(817);
+emit_16(752);
+emit_16(817);
+emit_16(753);
+emit_16(818);
+emit_16(754);
+emit_16(818);
+emit_16(753);
+emit_16(818);
+emit_16(754);
+emit_16(819);
+emit_16(755);
+emit_16(819);
+emit_16(754);
+emit_16(819);
+emit_16(755);
+emit_16(820);
+emit_16(756);
+emit_16(820);
+emit_16(755);
+emit_16(820);
+emit_16(756);
+emit_16(821);
+emit_16(757);
+emit_16(821);
+emit_16(756);
+emit_16(821);
+emit_16(757);
+emit_16(822);
+emit_16(758);
+emit_16(822);
+emit_16(757);
+emit_16(822);
+emit_16(758);
+emit_16(823);
+emit_16(759);
+emit_16(823);
+emit_16(758);
+emit_16(823);
+emit_16(759);
+emit_16(824);
+emit_16(760);
+emit_16(824);
+emit_16(759);
+emit_16(824);
+emit_16(760);
+emit_16(825);
+emit_16(761);
+emit_16(825);
+emit_16(760);
+emit_16(825);
+emit_16(761);
+emit_16(826);
+emit_16(762);
+emit_16(826);
+emit_16(761);
+emit_16(826);
+emit_16(762);
+emit_16(827);
+emit_16(763);
+emit_16(827);
+emit_16(762);
+emit_16(827);
+emit_16(763);
+emit_16(828);
+emit_16(764);
+emit_16(828);
+emit_16(763);
+emit_16(828);
+emit_16(764);
+emit_16(829);
+emit_16(765);
+emit_16(829);
+emit_16(764);
+emit_16(829);
+emit_16(765);
+emit_16(830);
+emit_16(766);
+emit_16(830);
+emit_16(765);
+emit_16(830);
+emit_16(766);
+emit_16(831);
+emit_16(767);
+emit_16(831);
+emit_16(766);
+emit_16(832);
+emit_16(768);
+emit_16(833);
+emit_16(769);
+emit_16(833);
+emit_16(768);
+emit_16(833);
+emit_16(769);
+emit_16(834);
+emit_16(770);
+emit_16(834);
+emit_16(769);
+emit_16(834);
+emit_16(770);
+emit_16(835);
+emit_16(771);
+emit_16(835);
+emit_16(770);
+emit_16(835);
+emit_16(771);
+emit_16(836);
+emit_16(772);
+emit_16(836);
+emit_16(771);
+emit_16(836);
+emit_16(772);
+emit_16(837);
+emit_16(773);
+emit_16(837);
+emit_16(772);
+emit_16(837);
+emit_16(773);
+emit_16(838);
+emit_16(774);
+emit_16(838);
+emit_16(773);
+emit_16(838);
+emit_16(774);
+emit_16(839);
+emit_16(775);
+emit_16(839);
+emit_16(774);
+emit_16(839);
+emit_16(775);
+emit_16(840);
+emit_16(776);
+emit_16(840);
+emit_16(775);
+emit_16(840);
+emit_16(776);
+emit_16(841);
+emit_16(777);
+emit_16(841);
+emit_16(776);
+emit_16(841);
+emit_16(777);
+emit_16(842);
+emit_16(778);
+emit_16(842);
+emit_16(777);
+emit_16(842);
+emit_16(778);
+emit_16(843);
+emit_16(779);
+emit_16(843);
+emit_16(778);
+emit_16(843);
+emit_16(779);
+emit_16(844);
+emit_16(780);
+emit_16(844);
+emit_16(779);
+emit_16(844);
+emit_16(780);
+emit_16(845);
+emit_16(781);
+emit_16(845);
+emit_16(780);
+emit_16(845);
+emit_16(781);
+emit_16(846);
+emit_16(782);
+emit_16(846);
+emit_16(781);
+emit_16(846);
+emit_16(782);
+emit_16(847);
+emit_16(783);
+emit_16(847);
+emit_16(782);
+emit_16(847);
+emit_16(783);
+emit_16(848);
+emit_16(784);
+emit_16(848);
+emit_16(783);
+emit_16(848);
+emit_16(784);
+emit_16(849);
+emit_16(785);
+emit_16(849);
+emit_16(784);
+emit_16(849);
+emit_16(785);
+emit_16(850);
+emit_16(786);
+emit_16(850);
+emit_16(785);
+emit_16(850);
+emit_16(786);
+emit_16(851);
+emit_16(787);
+emit_16(851);
+emit_16(786);
+emit_16(851);
+emit_16(787);
+emit_16(852);
+emit_16(788);
+emit_16(852);
+emit_16(787);
+emit_16(852);
+emit_16(788);
+emit_16(853);
+emit_16(789);
+emit_16(853);
+emit_16(788);
+emit_16(853);
+emit_16(789);
+emit_16(854);
+emit_16(790);
+emit_16(854);
+emit_16(789);
+emit_16(854);
+emit_16(790);
+emit_16(855);
+emit_16(791);
+emit_16(855);
+emit_16(790);
+emit_16(855);
+emit_16(791);
+emit_16(856);
+emit_16(792);
+emit_16(856);
+emit_16(791);
+emit_16(856);
+emit_16(792);
+emit_16(857);
+emit_16(793);
+emit_16(857);
+emit_16(792);
+emit_16(857);
+emit_16(793);
+emit_16(858);
+emit_16(794);
+emit_16(858);
+emit_16(793);
+emit_16(858);
+emit_16(794);
+emit_16(859);
+emit_16(795);
+emit_16(859);
+emit_16(794);
+emit_16(859);
+emit_16(795);
+emit_16(860);
+emit_16(796);
+emit_16(860);
+emit_16(795);
+emit_16(860);
+emit_16(796);
+emit_16(861);
+emit_16(797);
+emit_16(861);
+emit_16(796);
+emit_16(861);
+emit_16(797);
+emit_16(862);
+emit_16(798);
+emit_16(862);
+emit_16(797);
+emit_16(862);
+emit_16(798);
+emit_16(863);
+emit_16(799);
+emit_16(863);
+emit_16(798);
+emit_16(863);
+emit_16(799);
+emit_16(864);
+emit_16(800);
+emit_16(864);
+emit_16(799);
+emit_16(864);
+emit_16(800);
+emit_16(865);
+emit_16(801);
+emit_16(865);
+emit_16(800);
+emit_16(865);
+emit_16(801);
+emit_16(866);
+emit_16(802);
+emit_16(866);
+emit_16(801);
+emit_16(866);
+emit_16(802);
+emit_16(867);
+emit_16(803);
+emit_16(867);
+emit_16(802);
+emit_16(867);
+emit_16(803);
+emit_16(868);
+emit_16(804);
+emit_16(868);
+emit_16(803);
+emit_16(868);
+emit_16(804);
+emit_16(869);
+emit_16(805);
+emit_16(869);
+emit_16(804);
+emit_16(869);
+emit_16(805);
+emit_16(870);
+emit_16(806);
+emit_16(870);
+emit_16(805);
+emit_16(870);
+emit_16(806);
+emit_16(871);
+emit_16(807);
+emit_16(871);
+emit_16(806);
+emit_16(871);
+emit_16(807);
+emit_16(872);
+emit_16(808);
+emit_16(872);
+emit_16(807);
+emit_16(872);
+emit_16(808);
+emit_16(873);
+emit_16(809);
+emit_16(873);
+emit_16(808);
+emit_16(873);
+emit_16(809);
+emit_16(874);
+emit_16(810);
+emit_16(874);
+emit_16(809);
+emit_16(874);
+emit_16(810);
+emit_16(875);
+emit_16(811);
+emit_16(875);
+emit_16(810);
+emit_16(875);
+emit_16(811);
+emit_16(876);
+emit_16(812);
+emit_16(876);
+emit_16(811);
+emit_16(876);
+emit_16(812);
+emit_16(877);
+emit_16(813);
+emit_16(877);
+emit_16(812);
+emit_16(877);
+emit_16(813);
+emit_16(878);
+emit_16(814);
+emit_16(878);
+emit_16(813);
+emit_16(878);
+emit_16(814);
+emit_16(879);
+emit_16(815);
+emit_16(879);
+emit_16(814);
+emit_16(879);
+emit_16(815);
+emit_16(880);
+emit_16(816);
+emit_16(880);
+emit_16(815);
+emit_16(880);
+emit_16(816);
+emit_16(881);
+emit_16(817);
+emit_16(881);
+emit_16(816);
+emit_16(881);
+emit_16(817);
+emit_16(882);
+emit_16(818);
+emit_16(882);
+emit_16(817);
+emit_16(882);
+emit_16(818);
+emit_16(883);
+emit_16(819);
+emit_16(883);
+emit_16(818);
+emit_16(883);
+emit_16(819);
+emit_16(884);
+emit_16(820);
+emit_16(884);
+emit_16(819);
+emit_16(884);
+emit_16(820);
+emit_16(885);
+emit_16(821);
+emit_16(885);
+emit_16(820);
+emit_16(885);
+emit_16(821);
+emit_16(886);
+emit_16(822);
+emit_16(886);
+emit_16(821);
+emit_16(886);
+emit_16(822);
+emit_16(887);
+emit_16(823);
+emit_16(887);
+emit_16(822);
+emit_16(887);
+emit_16(823);
+emit_16(888);
+emit_16(824);
+emit_16(888);
+emit_16(823);
+emit_16(888);
+emit_16(824);
+emit_16(889);
+emit_16(825);
+emit_16(889);
+emit_16(824);
+emit_16(889);
+emit_16(825);
+emit_16(890);
+emit_16(826);
+emit_16(890);
+emit_16(825);
+emit_16(890);
+emit_16(826);
+emit_16(891);
+emit_16(827);
+emit_16(891);
+emit_16(826);
+emit_16(891);
+emit_16(827);
+emit_16(892);
+emit_16(828);
+emit_16(892);
+emit_16(827);
+emit_16(892);
+emit_16(828);
+emit_16(893);
+emit_16(829);
+emit_16(893);
+emit_16(828);
+emit_16(893);
+emit_16(829);
+emit_16(894);
+emit_16(830);
+emit_16(894);
+emit_16(829);
+emit_16(894);
+emit_16(830);
+emit_16(895);
+emit_16(831);
+emit_16(895);
+emit_16(830);
+emit_16(896);
+emit_16(832);
+emit_16(897);
+emit_16(833);
+emit_16(897);
+emit_16(832);
+emit_16(897);
+emit_16(833);
+emit_16(898);
+emit_16(834);
+emit_16(898);
+emit_16(833);
+emit_16(898);
+emit_16(834);
+emit_16(899);
+emit_16(835);
+emit_16(899);
+emit_16(834);
+emit_16(899);
+emit_16(835);
+emit_16(900);
+emit_16(836);
+emit_16(900);
+emit_16(835);
+emit_16(900);
+emit_16(836);
+emit_16(901);
+emit_16(837);
+emit_16(901);
+emit_16(836);
+emit_16(901);
+emit_16(837);
+emit_16(902);
+emit_16(838);
+emit_16(902);
+emit_16(837);
+emit_16(902);
+emit_16(838);
+emit_16(903);
+emit_16(839);
+emit_16(903);
+emit_16(838);
+emit_16(903);
+emit_16(839);
+emit_16(904);
+emit_16(840);
+emit_16(904);
+emit_16(839);
+emit_16(904);
+emit_16(840);
+emit_16(905);
+emit_16(841);
+emit_16(905);
+emit_16(840);
+emit_16(905);
+emit_16(841);
+emit_16(906);
+emit_16(842);
+emit_16(906);
+emit_16(841);
+emit_16(906);
+emit_16(842);
+emit_16(907);
+emit_16(843);
+emit_16(907);
+emit_16(842);
+emit_16(907);
+emit_16(843);
+emit_16(908);
+emit_16(844);
+emit_16(908);
+emit_16(843);
+emit_16(908);
+emit_16(844);
+emit_16(909);
+emit_16(845);
+emit_16(909);
+emit_16(844);
+emit_16(909);
+emit_16(845);
+emit_16(910);
+emit_16(846);
+emit_16(910);
+emit_16(845);
+emit_16(910);
+emit_16(846);
+emit_16(911);
+emit_16(847);
+emit_16(911);
+emit_16(846);
+emit_16(911);
+emit_16(847);
+emit_16(912);
+emit_16(848);
+emit_16(912);
+emit_16(847);
+emit_16(912);
+emit_16(848);
+emit_16(913);
+emit_16(849);
+emit_16(913);
+emit_16(848);
+emit_16(913);
+emit_16(849);
+emit_16(914);
+emit_16(850);
+emit_16(914);
+emit_16(849);
+emit_16(914);
+emit_16(850);
+emit_16(915);
+emit_16(851);
+emit_16(915);
+emit_16(850);
+emit_16(915);
+emit_16(851);
+emit_16(916);
+emit_16(852);
+emit_16(916);
+emit_16(851);
+emit_16(916);
+emit_16(852);
+emit_16(917);
+emit_16(853);
+emit_16(917);
+emit_16(852);
+emit_16(917);
+emit_16(853);
+emit_16(918);
+emit_16(854);
+emit_16(918);
+emit_16(853);
+emit_16(918);
+emit_16(854);
+emit_16(919);
+emit_16(855);
+emit_16(919);
+emit_16(854);
+emit_16(919);
+emit_16(855);
+emit_16(920);
+emit_16(856);
+emit_16(920);
+emit_16(855);
+emit_16(920);
+emit_16(856);
+emit_16(921);
+emit_16(857);
+emit_16(921);
+emit_16(856);
+emit_16(921);
+emit_16(857);
+emit_16(922);
+emit_16(858);
+emit_16(922);
+emit_16(857);
+emit_16(922);
+emit_16(858);
+emit_16(923);
+emit_16(859);
+emit_16(923);
+emit_16(858);
+emit_16(923);
+emit_16(859);
+emit_16(924);
+emit_16(860);
+emit_16(924);
+emit_16(859);
+emit_16(924);
+emit_16(860);
+emit_16(925);
+emit_16(861);
+emit_16(925);
+emit_16(860);
+emit_16(925);
+emit_16(861);
+emit_16(926);
+emit_16(862);
+emit_16(926);
+emit_16(861);
+emit_16(926);
+emit_16(862);
+emit_16(927);
+emit_16(863);
+emit_16(927);
+emit_16(862);
+emit_16(927);
+emit_16(863);
+emit_16(928);
+emit_16(864);
+emit_16(928);
+emit_16(863);
+emit_16(928);
+emit_16(864);
+emit_16(929);
+emit_16(865);
+emit_16(929);
+emit_16(864);
+emit_16(929);
+emit_16(865);
+emit_16(930);
+emit_16(866);
+emit_16(930);
+emit_16(865);
+emit_16(930);
+emit_16(866);
+emit_16(931);
+emit_16(867);
+emit_16(931);
+emit_16(866);
+emit_16(931);
+emit_16(867);
+emit_16(932);
+emit_16(868);
+emit_16(932);
+emit_16(867);
+emit_16(932);
+emit_16(868);
+emit_16(933);
+emit_16(869);
+emit_16(933);
+emit_16(868);
+emit_16(933);
+emit_16(869);
+emit_16(934);
+emit_16(870);
+emit_16(934);
+emit_16(869);
+emit_16(934);
+emit_16(870);
+emit_16(935);
+emit_16(871);
+emit_16(935);
+emit_16(870);
+emit_16(935);
+emit_16(871);
+emit_16(936);
+emit_16(872);
+emit_16(936);
+emit_16(871);
+emit_16(936);
+emit_16(872);
+emit_16(937);
+emit_16(873);
+emit_16(937);
+emit_16(872);
+emit_16(937);
+emit_16(873);
+emit_16(938);
+emit_16(874);
+emit_16(938);
+emit_16(873);
+emit_16(938);
+emit_16(874);
+emit_16(939);
+emit_16(875);
+emit_16(939);
+emit_16(874);
+emit_16(939);
+emit_16(875);
+emit_16(940);
+emit_16(876);
+emit_16(940);
+emit_16(875);
+emit_16(940);
+emit_16(876);
+emit_16(941);
+emit_16(877);
+emit_16(941);
+emit_16(876);
+emit_16(941);
+emit_16(877);
+emit_16(942);
+emit_16(878);
+emit_16(942);
+emit_16(877);
+emit_16(942);
+emit_16(878);
+emit_16(943);
+emit_16(879);
+emit_16(943);
+emit_16(878);
+emit_16(943);
+emit_16(879);
+emit_16(944);
+emit_16(880);
+emit_16(944);
+emit_16(879);
+emit_16(944);
+emit_16(880);
+emit_16(945);
+emit_16(881);
+emit_16(945);
+emit_16(880);
+emit_16(945);
+emit_16(881);
+emit_16(946);
+emit_16(882);
+emit_16(946);
+emit_16(881);
+emit_16(946);
+emit_16(882);
+emit_16(947);
+emit_16(883);
+emit_16(947);
+emit_16(882);
+emit_16(947);
+emit_16(883);
+emit_16(948);
+emit_16(884);
+emit_16(948);
+emit_16(883);
+emit_16(948);
+emit_16(884);
+emit_16(949);
+emit_16(885);
+emit_16(949);
+emit_16(884);
+emit_16(949);
+emit_16(885);
+emit_16(950);
+emit_16(886);
+emit_16(950);
+emit_16(885);
+emit_16(950);
+emit_16(886);
+emit_16(951);
+emit_16(887);
+emit_16(951);
+emit_16(886);
+emit_16(951);
+emit_16(887);
+emit_16(952);
+emit_16(888);
+emit_16(952);
+emit_16(887);
+emit_16(952);
+emit_16(888);
+emit_16(953);
+emit_16(889);
+emit_16(953);
+emit_16(888);
+emit_16(953);
+emit_16(889);
+emit_16(954);
+emit_16(890);
+emit_16(954);
+emit_16(889);
+emit_16(954);
+emit_16(890);
+emit_16(955);
+emit_16(891);
+emit_16(955);
+emit_16(890);
+emit_16(955);
+emit_16(891);
+emit_16(956);
+emit_16(892);
+emit_16(956);
+emit_16(891);
+emit_16(956);
+emit_16(892);
+emit_16(957);
+emit_16(893);
+emit_16(957);
+emit_16(892);
+emit_16(957);
+emit_16(893);
+emit_16(958);
+emit_16(894);
+emit_16(958);
+emit_16(893);
+emit_16(958);
+emit_16(894);
+emit_16(959);
+emit_16(895);
+emit_16(959);
+emit_16(894);
+emit_16(960);
+emit_16(896);
+emit_16(961);
+emit_16(897);
+emit_16(961);
+emit_16(896);
+emit_16(961);
+emit_16(897);
+emit_16(962);
+emit_16(898);
+emit_16(962);
+emit_16(897);
+emit_16(962);
+emit_16(898);
+emit_16(963);
+emit_16(899);
+emit_16(963);
+emit_16(898);
+emit_16(963);
+emit_16(899);
+emit_16(964);
+emit_16(900);
+emit_16(964);
+emit_16(899);
+emit_16(964);
+emit_16(900);
+emit_16(965);
+emit_16(901);
+emit_16(965);
+emit_16(900);
+emit_16(965);
+emit_16(901);
+emit_16(966);
+emit_16(902);
+emit_16(966);
+emit_16(901);
+emit_16(966);
+emit_16(902);
+emit_16(967);
+emit_16(903);
+emit_16(967);
+emit_16(902);
+emit_16(967);
+emit_16(903);
+emit_16(968);
+emit_16(904);
+emit_16(968);
+emit_16(903);
+emit_16(968);
+emit_16(904);
+emit_16(969);
+emit_16(905);
+emit_16(969);
+emit_16(904);
+emit_16(969);
+emit_16(905);
+emit_16(970);
+emit_16(906);
+emit_16(970);
+emit_16(905);
+emit_16(970);
+emit_16(906);
+emit_16(971);
+emit_16(907);
+emit_16(971);
+emit_16(906);
+emit_16(971);
+emit_16(907);
+emit_16(972);
+emit_16(908);
+emit_16(972);
+emit_16(907);
+emit_16(972);
+emit_16(908);
+emit_16(973);
+emit_16(909);
+emit_16(973);
+emit_16(908);
+emit_16(973);
+emit_16(909);
+emit_16(974);
+emit_16(910);
+emit_16(974);
+emit_16(909);
+emit_16(974);
+emit_16(910);
+emit_16(975);
+emit_16(911);
+emit_16(975);
+emit_16(910);
+emit_16(975);
+emit_16(911);
+emit_16(976);
+emit_16(912);
+emit_16(976);
+emit_16(911);
+emit_16(976);
+emit_16(912);
+emit_16(977);
+emit_16(913);
+emit_16(977);
+emit_16(912);
+emit_16(977);
+emit_16(913);
+emit_16(978);
+emit_16(914);
+emit_16(978);
+emit_16(913);
+emit_16(978);
+emit_16(914);
+emit_16(979);
+emit_16(915);
+emit_16(979);
+emit_16(914);
+emit_16(979);
+emit_16(915);
+emit_16(980);
+emit_16(916);
+emit_16(980);
+emit_16(915);
+emit_16(980);
+emit_16(916);
+emit_16(981);
+emit_16(917);
+emit_16(981);
+emit_16(916);
+emit_16(981);
+emit_16(917);
+emit_16(982);
+emit_16(918);
+emit_16(982);
+emit_16(917);
+emit_16(982);
+emit_16(918);
+emit_16(983);
+emit_16(919);
+emit_16(983);
+emit_16(918);
+emit_16(983);
+emit_16(919);
+emit_16(984);
+emit_16(920);
+emit_16(984);
+emit_16(919);
+emit_16(984);
+emit_16(920);
+emit_16(985);
+emit_16(921);
+emit_16(985);
+emit_16(920);
+emit_16(985);
+emit_16(921);
+emit_16(986);
+emit_16(922);
+emit_16(986);
+emit_16(921);
+emit_16(986);
+emit_16(922);
+emit_16(987);
+emit_16(923);
+emit_16(987);
+emit_16(922);
+emit_16(987);
+emit_16(923);
+emit_16(988);
+emit_16(924);
+emit_16(988);
+emit_16(923);
+emit_16(988);
+emit_16(924);
+emit_16(989);
+emit_16(925);
+emit_16(989);
+emit_16(924);
+emit_16(989);
+emit_16(925);
+emit_16(990);
+emit_16(926);
+emit_16(990);
+emit_16(925);
+emit_16(990);
+emit_16(926);
+emit_16(991);
+emit_16(927);
+emit_16(991);
+emit_16(926);
+emit_16(991);
+emit_16(927);
+emit_16(992);
+emit_16(928);
+emit_16(992);
+emit_16(927);
+emit_16(992);
+emit_16(928);
+emit_16(993);
+emit_16(929);
+emit_16(993);
+emit_16(928);
+emit_16(993);
+emit_16(929);
+emit_16(994);
+emit_16(930);
+emit_16(994);
+emit_16(929);
+emit_16(994);
+emit_16(930);
+emit_16(995);
+emit_16(931);
+emit_16(995);
+emit_16(930);
+emit_16(995);
+emit_16(931);
+emit_16(996);
+emit_16(932);
+emit_16(996);
+emit_16(931);
+emit_16(996);
+emit_16(932);
+emit_16(997);
+emit_16(933);
+emit_16(997);
+emit_16(932);
+emit_16(997);
+emit_16(933);
+emit_16(998);
+emit_16(934);
+emit_16(998);
+emit_16(933);
+emit_16(998);
+emit_16(934);
+emit_16(999);
+emit_16(935);
+emit_16(999);
+emit_16(934);
+emit_16(999);
+emit_16(935);
+emit_16(1000);
+emit_16(936);
+emit_16(1000);
+emit_16(935);
+emit_16(1000);
+emit_16(936);
+emit_16(1001);
+emit_16(937);
+emit_16(1001);
+emit_16(936);
+emit_16(1001);
+emit_16(937);
+emit_16(1002);
+emit_16(938);
+emit_16(1002);
+emit_16(937);
+emit_16(1002);
+emit_16(938);
+emit_16(1003);
+emit_16(939);
+emit_16(1003);
+emit_16(938);
+emit_16(1003);
+emit_16(939);
+emit_16(1004);
+emit_16(940);
+emit_16(1004);
+emit_16(939);
+emit_16(1004);
+emit_16(940);
+emit_16(1005);
+emit_16(941);
+emit_16(1005);
+emit_16(940);
+emit_16(1005);
+emit_16(941);
+emit_16(1006);
+emit_16(942);
+emit_16(1006);
+emit_16(941);
+emit_16(1006);
+emit_16(942);
+emit_16(1007);
+emit_16(943);
+emit_16(1007);
+emit_16(942);
+emit_16(1007);
+emit_16(943);
+emit_16(1008);
+emit_16(944);
+emit_16(1008);
+emit_16(943);
+emit_16(1008);
+emit_16(944);
+emit_16(1009);
+emit_16(945);
+emit_16(1009);
+emit_16(944);
+emit_16(1009);
+emit_16(945);
+emit_16(1010);
+emit_16(946);
+emit_16(1010);
+emit_16(945);
+emit_16(1010);
+emit_16(946);
+emit_16(1011);
+emit_16(947);
+emit_16(1011);
+emit_16(946);
+emit_16(1011);
+emit_16(947);
+emit_16(1012);
+emit_16(948);
+emit_16(1012);
+emit_16(947);
+emit_16(1012);
+emit_16(948);
+emit_16(1013);
+emit_16(949);
+emit_16(1013);
+emit_16(948);
+emit_16(1013);
+emit_16(949);
+emit_16(1014);
+emit_16(950);
+emit_16(1014);
+emit_16(949);
+emit_16(1014);
+emit_16(950);
+emit_16(1015);
+emit_16(951);
+emit_16(1015);
+emit_16(950);
+emit_16(1015);
+emit_16(951);
+emit_16(1016);
+emit_16(952);
+emit_16(1016);
+emit_16(951);
+emit_16(1016);
+emit_16(952);
+emit_16(1017);
+emit_16(953);
+emit_16(1017);
+emit_16(952);
+emit_16(1017);
+emit_16(953);
+emit_16(1018);
+emit_16(954);
+emit_16(1018);
+emit_16(953);
+emit_16(1018);
+emit_16(954);
+emit_16(1019);
+emit_16(955);
+emit_16(1019);
+emit_16(954);
+emit_16(1019);
+emit_16(955);
+emit_16(1020);
+emit_16(956);
+emit_16(1020);
+emit_16(955);
+emit_16(1020);
+emit_16(956);
+emit_16(1021);
+emit_16(957);
+emit_16(1021);
+emit_16(956);
+emit_16(1021);
+emit_16(957);
+emit_16(1022);
+emit_16(958);
+emit_16(1022);
+emit_16(957);
+emit_16(1022);
+emit_16(958);
+emit_16(1023);
+emit_16(959);
+emit_16(1023);
+emit_16(958);
+emit_16(1024);
+emit_16(960);
+emit_16(1025);
+emit_16(961);
+emit_16(1025);
+emit_16(960);
+emit_16(1025);
+emit_16(961);
+emit_16(1026);
+emit_16(962);
+emit_16(1026);
+emit_16(961);
+emit_16(1026);
+emit_16(962);
+emit_16(1027);
+emit_16(963);
+emit_16(1027);
+emit_16(962);
+emit_16(1027);
+emit_16(963);
+emit_16(1028);
+emit_16(964);
+emit_16(1028);
+emit_16(963);
+emit_16(1028);
+emit_16(964);
+emit_16(1029);
+emit_16(965);
+emit_16(1029);
+emit_16(964);
+emit_16(1029);
+emit_16(965);
+emit_16(1030);
+emit_16(966);
+emit_16(1030);
+emit_16(965);
+emit_16(1030);
+emit_16(966);
+emit_16(1031);
+emit_16(967);
+emit_16(1031);
+emit_16(966);
+emit_16(1031);
+emit_16(967);
+emit_16(1032);
+emit_16(968);
+emit_16(1032);
+emit_16(967);
+emit_16(1032);
+emit_16(968);
+emit_16(1033);
+emit_16(969);
+emit_16(1033);
+emit_16(968);
+emit_16(1033);
+emit_16(969);
+emit_16(1034);
+emit_16(970);
+emit_16(1034);
+emit_16(969);
+emit_16(1034);
+emit_16(970);
+emit_16(1035);
+emit_16(971);
+emit_16(1035);
+emit_16(970);
+emit_16(1035);
+emit_16(971);
+emit_16(1036);
+emit_16(972);
+emit_16(1036);
+emit_16(971);
+emit_16(1036);
+emit_16(972);
+emit_16(1037);
+emit_16(973);
+emit_16(1037);
+emit_16(972);
+emit_16(1037);
+emit_16(973);
+emit_16(1038);
+emit_16(974);
+emit_16(1038);
+emit_16(973);
+emit_16(1038);
+emit_16(974);
+emit_16(1039);
+emit_16(975);
+emit_16(1039);
+emit_16(974);
+emit_16(1039);
+emit_16(975);
+emit_16(1040);
+emit_16(976);
+emit_16(1040);
+emit_16(975);
+emit_16(1040);
+emit_16(976);
+emit_16(1041);
+emit_16(977);
+emit_16(1041);
+emit_16(976);
+emit_16(1041);
+emit_16(977);
+emit_16(1042);
+emit_16(978);
+emit_16(1042);
+emit_16(977);
+emit_16(1042);
+emit_16(978);
+emit_16(1043);
+emit_16(979);
+emit_16(1043);
+emit_16(978);
+emit_16(1043);
+emit_16(979);
+emit_16(1044);
+emit_16(980);
+emit_16(1044);
+emit_16(979);
+emit_16(1044);
+emit_16(980);
+emit_16(1045);
+emit_16(981);
+emit_16(1045);
+emit_16(980);
+emit_16(1045);
+emit_16(981);
+emit_16(1046);
+emit_16(982);
+emit_16(1046);
+emit_16(981);
+emit_16(1046);
+emit_16(982);
+emit_16(1047);
+emit_16(983);
+emit_16(1047);
+emit_16(982);
+emit_16(1047);
+emit_16(983);
+emit_16(1048);
+emit_16(984);
+emit_16(1048);
+emit_16(983);
+emit_16(1048);
+emit_16(984);
+emit_16(1049);
+emit_16(985);
+emit_16(1049);
+emit_16(984);
+emit_16(1049);
+emit_16(985);
+emit_16(1050);
+emit_16(986);
+emit_16(1050);
+emit_16(985);
+emit_16(1050);
+emit_16(986);
+emit_16(1051);
+emit_16(987);
+emit_16(1051);
+emit_16(986);
+emit_16(1051);
+emit_16(987);
+emit_16(1052);
+emit_16(988);
+emit_16(1052);
+emit_16(987);
+emit_16(1052);
+emit_16(988);
+emit_16(1053);
+emit_16(989);
+emit_16(1053);
+emit_16(988);
+emit_16(1053);
+emit_16(989);
+emit_16(1054);
+emit_16(990);
+emit_16(1054);
+emit_16(989);
+emit_16(1054);
+emit_16(990);
+emit_16(1055);
+emit_16(991);
+emit_16(1055);
+emit_16(990);
+emit_16(1055);
+emit_16(991);
+emit_16(1056);
+emit_16(992);
+emit_16(1056);
+emit_16(991);
+emit_16(1056);
+emit_16(992);
+emit_16(1057);
+emit_16(993);
+emit_16(1057);
+emit_16(992);
+emit_16(1057);
+emit_16(993);
+emit_16(1058);
+emit_16(994);
+emit_16(1058);
+emit_16(993);
+emit_16(1058);
+emit_16(994);
+emit_16(1059);
+emit_16(995);
+emit_16(1059);
+emit_16(994);
+emit_16(1059);
+emit_16(995);
+emit_16(1060);
+emit_16(996);
+emit_16(1060);
+emit_16(995);
+emit_16(1060);
+emit_16(996);
+emit_16(1061);
+emit_16(997);
+emit_16(1061);
+emit_16(996);
+emit_16(1061);
+emit_16(997);
+emit_16(1062);
+emit_16(998);
+emit_16(1062);
+emit_16(997);
+emit_16(1062);
+emit_16(998);
+emit_16(1063);
+emit_16(999);
+emit_16(1063);
+emit_16(998);
+emit_16(1063);
+emit_16(999);
+emit_16(1064);
+emit_16(1000);
+emit_16(1064);
+emit_16(999);
+emit_16(1064);
+emit_16(1000);
+emit_16(1065);
+emit_16(1001);
+emit_16(1065);
+emit_16(1000);
+emit_16(1065);
+emit_16(1001);
+emit_16(1066);
+emit_16(1002);
+emit_16(1066);
+emit_16(1001);
+emit_16(1066);
+emit_16(1002);
+emit_16(1067);
+emit_16(1003);
+emit_16(1067);
+emit_16(1002);
+emit_16(1067);
+emit_16(1003);
+emit_16(1068);
+emit_16(1004);
+emit_16(1068);
+emit_16(1003);
+emit_16(1068);
+emit_16(1004);
+emit_16(1069);
+emit_16(1005);
+emit_16(1069);
+emit_16(1004);
+emit_16(1069);
+emit_16(1005);
+emit_16(1070);
+emit_16(1006);
+emit_16(1070);
+emit_16(1005);
+emit_16(1070);
+emit_16(1006);
+emit_16(1071);
+emit_16(1007);
+emit_16(1071);
+emit_16(1006);
+emit_16(1071);
+emit_16(1007);
+emit_16(1072);
+emit_16(1008);
+emit_16(1072);
+emit_16(1007);
+emit_16(1072);
+emit_16(1008);
+emit_16(1073);
+emit_16(1009);
+emit_16(1073);
+emit_16(1008);
+emit_16(1073);
+emit_16(1009);
+emit_16(1074);
+emit_16(1010);
+emit_16(1074);
+emit_16(1009);
+emit_16(1074);
+emit_16(1010);
+emit_16(1075);
+emit_16(1011);
+emit_16(1075);
+emit_16(1010);
+emit_16(1075);
+emit_16(1011);
+emit_16(1076);
+emit_16(1012);
+emit_16(1076);
+emit_16(1011);
+emit_16(1076);
+emit_16(1012);
+emit_16(1077);
+emit_16(1013);
+emit_16(1077);
+emit_16(1012);
+emit_16(1077);
+emit_16(1013);
+emit_16(1078);
+emit_16(1014);
+emit_16(1078);
+emit_16(1013);
+emit_16(1078);
+emit_16(1014);
+emit_16(1079);
+emit_16(1015);
+emit_16(1079);
+emit_16(1014);
+emit_16(1079);
+emit_16(1015);
+emit_16(1080);
+emit_16(1016);
+emit_16(1080);
+emit_16(1015);
+emit_16(1080);
+emit_16(1016);
+emit_16(1081);
+emit_16(1017);
+emit_16(1081);
+emit_16(1016);
+emit_16(1081);
+emit_16(1017);
+emit_16(1082);
+emit_16(1018);
+emit_16(1082);
+emit_16(1017);
+emit_16(1082);
+emit_16(1018);
+emit_16(1083);
+emit_16(1019);
+emit_16(1083);
+emit_16(1018);
+emit_16(1083);
+emit_16(1019);
+emit_16(1084);
+emit_16(1020);
+emit_16(1084);
+emit_16(1019);
+emit_16(1084);
+emit_16(1020);
+emit_16(1085);
+emit_16(1021);
+emit_16(1085);
+emit_16(1020);
+emit_16(1085);
+emit_16(1021);
+emit_16(1086);
+emit_16(1022);
+emit_16(1086);
+emit_16(1021);
+emit_16(1086);
+emit_16(1022);
+emit_16(1087);
+emit_16(1023);
+emit_16(1087);
+emit_16(1022);
+emit_16(1088);
+emit_16(1024);
+emit_16(1089);
+emit_16(1025);
+emit_16(1089);
+emit_16(1024);
+emit_16(1089);
+emit_16(1025);
+emit_16(1090);
+emit_16(1026);
+emit_16(1090);
+emit_16(1025);
+emit_16(1090);
+emit_16(1026);
+emit_16(1091);
+emit_16(1027);
+emit_16(1091);
+emit_16(1026);
+emit_16(1091);
+emit_16(1027);
+emit_16(1092);
+emit_16(1028);
+emit_16(1092);
+emit_16(1027);
+emit_16(1092);
+emit_16(1028);
+emit_16(1093);
+emit_16(1029);
+emit_16(1093);
+emit_16(1028);
+emit_16(1093);
+emit_16(1029);
+emit_16(1094);
+emit_16(1030);
+emit_16(1094);
+emit_16(1029);
+emit_16(1094);
+emit_16(1030);
+emit_16(1095);
+emit_16(1031);
+emit_16(1095);
+emit_16(1030);
+emit_16(1095);
+emit_16(1031);
+emit_16(1096);
+emit_16(1032);
+emit_16(1096);
+emit_16(1031);
+emit_16(1096);
+emit_16(1032);
+emit_16(1097);
+emit_16(1033);
+emit_16(1097);
+emit_16(1032);
+emit_16(1097);
+emit_16(1033);
+emit_16(1098);
+emit_16(1034);
+emit_16(1098);
+emit_16(1033);
+emit_16(1098);
+emit_16(1034);
+emit_16(1099);
+emit_16(1035);
+emit_16(1099);
+emit_16(1034);
+emit_16(1099);
+emit_16(1035);
+emit_16(1100);
+emit_16(1036);
+emit_16(1100);
+emit_16(1035);
+emit_16(1100);
+emit_16(1036);
+emit_16(1101);
+emit_16(1037);
+emit_16(1101);
+emit_16(1036);
+emit_16(1101);
+emit_16(1037);
+emit_16(1102);
+emit_16(1038);
+emit_16(1102);
+emit_16(1037);
+emit_16(1102);
+emit_16(1038);
+emit_16(1103);
+emit_16(1039);
+emit_16(1103);
+emit_16(1038);
+emit_16(1103);
+emit_16(1039);
+emit_16(1104);
+emit_16(1040);
+emit_16(1104);
+emit_16(1039);
+emit_16(1104);
+emit_16(1040);
+emit_16(1105);
+emit_16(1041);
+emit_16(1105);
+emit_16(1040);
+emit_16(1105);
+emit_16(1041);
+emit_16(1106);
+emit_16(1042);
+emit_16(1106);
+emit_16(1041);
+emit_16(1106);
+emit_16(1042);
+emit_16(1107);
+emit_16(1043);
+emit_16(1107);
+emit_16(1042);
+emit_16(1107);
+emit_16(1043);
+emit_16(1108);
+emit_16(1044);
+emit_16(1108);
+emit_16(1043);
+emit_16(1108);
+emit_16(1044);
+emit_16(1109);
+emit_16(1045);
+emit_16(1109);
+emit_16(1044);
+emit_16(1109);
+emit_16(1045);
+emit_16(1110);
+emit_16(1046);
+emit_16(1110);
+emit_16(1045);
+emit_16(1110);
+emit_16(1046);
+emit_16(1111);
+emit_16(1047);
+emit_16(1111);
+emit_16(1046);
+emit_16(1111);
+emit_16(1047);
+emit_16(1112);
+emit_16(1048);
+emit_16(1112);
+emit_16(1047);
+emit_16(1112);
+emit_16(1048);
+emit_16(1113);
+emit_16(1049);
+emit_16(1113);
+emit_16(1048);
+emit_16(1113);
+emit_16(1049);
+emit_16(1114);
+emit_16(1050);
+emit_16(1114);
+emit_16(1049);
+emit_16(1114);
+emit_16(1050);
+emit_16(1115);
+emit_16(1051);
+emit_16(1115);
+emit_16(1050);
+emit_16(1115);
+emit_16(1051);
+emit_16(1116);
+emit_16(1052);
+emit_16(1116);
+emit_16(1051);
+emit_16(1116);
+emit_16(1052);
+emit_16(1117);
+emit_16(1053);
+emit_16(1117);
+emit_16(1052);
+emit_16(1117);
+emit_16(1053);
+emit_16(1118);
+emit_16(1054);
+emit_16(1118);
+emit_16(1053);
+emit_16(1118);
+emit_16(1054);
+emit_16(1119);
+emit_16(1055);
+emit_16(1119);
+emit_16(1054);
+emit_16(1119);
+emit_16(1055);
+emit_16(1120);
+emit_16(1056);
+emit_16(1120);
+emit_16(1055);
+emit_16(1120);
+emit_16(1056);
+emit_16(1121);
+emit_16(1057);
+emit_16(1121);
+emit_16(1056);
+emit_16(1121);
+emit_16(1057);
+emit_16(1122);
+emit_16(1058);
+emit_16(1122);
+emit_16(1057);
+emit_16(1122);
+emit_16(1058);
+emit_16(1123);
+emit_16(1059);
+emit_16(1123);
+emit_16(1058);
+emit_16(1123);
+emit_16(1059);
+emit_16(1124);
+emit_16(1060);
+emit_16(1124);
+emit_16(1059);
+emit_16(1124);
+emit_16(1060);
+emit_16(1125);
+emit_16(1061);
+emit_16(1125);
+emit_16(1060);
+emit_16(1125);
+emit_16(1061);
+emit_16(1126);
+emit_16(1062);
+emit_16(1126);
+emit_16(1061);
+emit_16(1126);
+emit_16(1062);
+emit_16(1127);
+emit_16(1063);
+emit_16(1127);
+emit_16(1062);
+emit_16(1127);
+emit_16(1063);
+emit_16(1128);
+emit_16(1064);
+emit_16(1128);
+emit_16(1063);
+emit_16(1128);
+emit_16(1064);
+emit_16(1129);
+emit_16(1065);
+emit_16(1129);
+emit_16(1064);
+emit_16(1129);
+emit_16(1065);
+emit_16(1130);
+emit_16(1066);
+emit_16(1130);
+emit_16(1065);
+emit_16(1130);
+emit_16(1066);
+emit_16(1131);
+emit_16(1067);
+emit_16(1131);
+emit_16(1066);
+emit_16(1131);
+emit_16(1067);
+emit_16(1132);
+emit_16(1068);
+emit_16(1132);
+emit_16(1067);
+emit_16(1132);
+emit_16(1068);
+emit_16(1133);
+emit_16(1069);
+emit_16(1133);
+emit_16(1068);
+emit_16(1133);
+emit_16(1069);
+emit_16(1134);
+emit_16(1070);
+emit_16(1134);
+emit_16(1069);
+emit_16(1134);
+emit_16(1070);
+emit_16(1135);
+emit_16(1071);
+emit_16(1135);
+emit_16(1070);
+emit_16(1135);
+emit_16(1071);
+emit_16(1136);
+emit_16(1072);
+emit_16(1136);
+emit_16(1071);
+emit_16(1136);
+emit_16(1072);
+emit_16(1137);
+emit_16(1073);
+emit_16(1137);
+emit_16(1072);
+emit_16(1137);
+emit_16(1073);
+emit_16(1138);
+emit_16(1074);
+emit_16(1138);
+emit_16(1073);
+emit_16(1138);
+emit_16(1074);
+emit_16(1139);
+emit_16(1075);
+emit_16(1139);
+emit_16(1074);
+emit_16(1139);
+emit_16(1075);
+emit_16(1140);
+emit_16(1076);
+emit_16(1140);
+emit_16(1075);
+emit_16(1140);
+emit_16(1076);
+emit_16(1141);
+emit_16(1077);
+emit_16(1141);
+emit_16(1076);
+emit_16(1141);
+emit_16(1077);
+emit_16(1142);
+emit_16(1078);
+emit_16(1142);
+emit_16(1077);
+emit_16(1142);
+emit_16(1078);
+emit_16(1143);
+emit_16(1079);
+emit_16(1143);
+emit_16(1078);
+emit_16(1143);
+emit_16(1079);
+emit_16(1144);
+emit_16(1080);
+emit_16(1144);
+emit_16(1079);
+emit_16(1144);
+emit_16(1080);
+emit_16(1145);
+emit_16(1081);
+emit_16(1145);
+emit_16(1080);
+emit_16(1145);
+emit_16(1081);
+emit_16(1146);
+emit_16(1082);
+emit_16(1146);
+emit_16(1081);
+emit_16(1146);
+emit_16(1082);
+emit_16(1147);
+emit_16(1083);
+emit_16(1147);
+emit_16(1082);
+emit_16(1147);
+emit_16(1083);
+emit_16(1148);
+emit_16(1084);
+emit_16(1148);
+emit_16(1083);
+emit_16(1148);
+emit_16(1084);
+emit_16(1149);
+emit_16(1085);
+emit_16(1149);
+emit_16(1084);
+emit_16(1149);
+emit_16(1085);
+emit_16(1150);
+emit_16(1086);
+emit_16(1150);
+emit_16(1085);
+emit_16(1150);
+emit_16(1086);
+emit_16(1151);
+emit_16(1087);
+emit_16(1151);
+emit_16(1086);
+emit_16(1152);
+emit_16(1088);
+emit_16(1153);
+emit_16(1089);
+emit_16(1153);
+emit_16(1088);
+emit_16(1153);
+emit_16(1089);
+emit_16(1154);
+emit_16(1090);
+emit_16(1154);
+emit_16(1089);
+emit_16(1154);
+emit_16(1090);
+emit_16(1155);
+emit_16(1091);
+emit_16(1155);
+emit_16(1090);
+emit_16(1155);
+emit_16(1091);
+emit_16(1156);
+emit_16(1092);
+emit_16(1156);
+emit_16(1091);
+emit_16(1156);
+emit_16(1092);
+emit_16(1157);
+emit_16(1093);
+emit_16(1157);
+emit_16(1092);
+emit_16(1157);
+emit_16(1093);
+emit_16(1158);
+emit_16(1094);
+emit_16(1158);
+emit_16(1093);
+emit_16(1158);
+emit_16(1094);
+emit_16(1159);
+emit_16(1095);
+emit_16(1159);
+emit_16(1094);
+emit_16(1159);
+emit_16(1095);
+emit_16(1160);
+emit_16(1096);
+emit_16(1160);
+emit_16(1095);
+emit_16(1160);
+emit_16(1096);
+emit_16(1161);
+emit_16(1097);
+emit_16(1161);
+emit_16(1096);
+emit_16(1161);
+emit_16(1097);
+emit_16(1162);
+emit_16(1098);
+emit_16(1162);
+emit_16(1097);
+emit_16(1162);
+emit_16(1098);
+emit_16(1163);
+emit_16(1099);
+emit_16(1163);
+emit_16(1098);
+emit_16(1163);
+emit_16(1099);
+emit_16(1164);
+emit_16(1100);
+emit_16(1164);
+emit_16(1099);
+emit_16(1164);
+emit_16(1100);
+emit_16(1165);
+emit_16(1101);
+emit_16(1165);
+emit_16(1100);
+emit_16(1165);
+emit_16(1101);
+emit_16(1166);
+emit_16(1102);
+emit_16(1166);
+emit_16(1101);
+emit_16(1166);
+emit_16(1102);
+emit_16(1167);
+emit_16(1103);
+emit_16(1167);
+emit_16(1102);
+emit_16(1167);
+emit_16(1103);
+emit_16(1168);
+emit_16(1104);
+emit_16(1168);
+emit_16(1103);
+emit_16(1168);
+emit_16(1104);
+emit_16(1169);
+emit_16(1105);
+emit_16(1169);
+emit_16(1104);
+emit_16(1169);
+emit_16(1105);
+emit_16(1170);
+emit_16(1106);
+emit_16(1170);
+emit_16(1105);
+emit_16(1170);
+emit_16(1106);
+emit_16(1171);
+emit_16(1107);
+emit_16(1171);
+emit_16(1106);
+emit_16(1171);
+emit_16(1107);
+emit_16(1172);
+emit_16(1108);
+emit_16(1172);
+emit_16(1107);
+emit_16(1172);
+emit_16(1108);
+emit_16(1173);
+emit_16(1109);
+emit_16(1173);
+emit_16(1108);
+emit_16(1173);
+emit_16(1109);
+emit_16(1174);
+emit_16(1110);
+emit_16(1174);
+emit_16(1109);
+emit_16(1174);
+emit_16(1110);
+emit_16(1175);
+emit_16(1111);
+emit_16(1175);
+emit_16(1110);
+emit_16(1175);
+emit_16(1111);
+emit_16(1176);
+emit_16(1112);
+emit_16(1176);
+emit_16(1111);
+emit_16(1176);
+emit_16(1112);
+emit_16(1177);
+emit_16(1113);
+emit_16(1177);
+emit_16(1112);
+emit_16(1177);
+emit_16(1113);
+emit_16(1178);
+emit_16(1114);
+emit_16(1178);
+emit_16(1113);
+emit_16(1178);
+emit_16(1114);
+emit_16(1179);
+emit_16(1115);
+emit_16(1179);
+emit_16(1114);
+emit_16(1179);
+emit_16(1115);
+emit_16(1180);
+emit_16(1116);
+emit_16(1180);
+emit_16(1115);
+emit_16(1180);
+emit_16(1116);
+emit_16(1181);
+emit_16(1117);
+emit_16(1181);
+emit_16(1116);
+emit_16(1181);
+emit_16(1117);
+emit_16(1182);
+emit_16(1118);
+emit_16(1182);
+emit_16(1117);
+emit_16(1182);
+emit_16(1118);
+emit_16(1183);
+emit_16(1119);
+emit_16(1183);
+emit_16(1118);
+emit_16(1183);
+emit_16(1119);
+emit_16(1184);
+emit_16(1120);
+emit_16(1184);
+emit_16(1119);
+emit_16(1184);
+emit_16(1120);
+emit_16(1185);
+emit_16(1121);
+emit_16(1185);
+emit_16(1120);
+emit_16(1185);
+emit_16(1121);
+emit_16(1186);
+emit_16(1122);
+emit_16(1186);
+emit_16(1121);
+emit_16(1186);
+emit_16(1122);
+emit_16(1187);
+emit_16(1123);
+emit_16(1187);
+emit_16(1122);
+emit_16(1187);
+emit_16(1123);
+emit_16(1188);
+emit_16(1124);
+emit_16(1188);
+emit_16(1123);
+emit_16(1188);
+emit_16(1124);
+emit_16(1189);
+emit_16(1125);
+emit_16(1189);
+emit_16(1124);
+emit_16(1189);
+emit_16(1125);
+emit_16(1190);
+emit_16(1126);
+emit_16(1190);
+emit_16(1125);
+emit_16(1190);
+emit_16(1126);
+emit_16(1191);
+emit_16(1127);
+emit_16(1191);
+emit_16(1126);
+emit_16(1191);
+emit_16(1127);
+emit_16(1192);
+emit_16(1128);
+emit_16(1192);
+emit_16(1127);
+emit_16(1192);
+emit_16(1128);
+emit_16(1193);
+emit_16(1129);
+emit_16(1193);
+emit_16(1128);
+emit_16(1193);
+emit_16(1129);
+emit_16(1194);
+emit_16(1130);
+emit_16(1194);
+emit_16(1129);
+emit_16(1194);
+emit_16(1130);
+emit_16(1195);
+emit_16(1131);
+emit_16(1195);
+emit_16(1130);
+emit_16(1195);
+emit_16(1131);
+emit_16(1196);
+emit_16(1132);
+emit_16(1196);
+emit_16(1131);
+emit_16(1196);
+emit_16(1132);
+emit_16(1197);
+emit_16(1133);
+emit_16(1197);
+emit_16(1132);
+emit_16(1197);
+emit_16(1133);
+emit_16(1198);
+emit_16(1134);
+emit_16(1198);
+emit_16(1133);
+emit_16(1198);
+emit_16(1134);
+emit_16(1199);
+emit_16(1135);
+emit_16(1199);
+emit_16(1134);
+emit_16(1199);
+emit_16(1135);
+emit_16(1200);
+emit_16(1136);
+emit_16(1200);
+emit_16(1135);
+emit_16(1200);
+emit_16(1136);
+emit_16(1201);
+emit_16(1137);
+emit_16(1201);
+emit_16(1136);
+emit_16(1201);
+emit_16(1137);
+emit_16(1202);
+emit_16(1138);
+emit_16(1202);
+emit_16(1137);
+emit_16(1202);
+emit_16(1138);
+emit_16(1203);
+emit_16(1139);
+emit_16(1203);
+emit_16(1138);
+emit_16(1203);
+emit_16(1139);
+emit_16(1204);
+emit_16(1140);
+emit_16(1204);
+emit_16(1139);
+emit_16(1204);
+emit_16(1140);
+emit_16(1205);
+emit_16(1141);
+emit_16(1205);
+emit_16(1140);
+emit_16(1205);
+emit_16(1141);
+emit_16(1206);
+emit_16(1142);
+emit_16(1206);
+emit_16(1141);
+emit_16(1206);
+emit_16(1142);
+emit_16(1207);
+emit_16(1143);
+emit_16(1207);
+emit_16(1142);
+emit_16(1207);
+emit_16(1143);
+emit_16(1208);
+emit_16(1144);
+emit_16(1208);
+emit_16(1143);
+emit_16(1208);
+emit_16(1144);
+emit_16(1209);
+emit_16(1145);
+emit_16(1209);
+emit_16(1144);
+emit_16(1209);
+emit_16(1145);
+emit_16(1210);
+emit_16(1146);
+emit_16(1210);
+emit_16(1145);
+emit_16(1210);
+emit_16(1146);
+emit_16(1211);
+emit_16(1147);
+emit_16(1211);
+emit_16(1146);
+emit_16(1211);
+emit_16(1147);
+emit_16(1212);
+emit_16(1148);
+emit_16(1212);
+emit_16(1147);
+emit_16(1212);
+emit_16(1148);
+emit_16(1213);
+emit_16(1149);
+emit_16(1213);
+emit_16(1148);
+emit_16(1213);
+emit_16(1149);
+emit_16(1214);
+emit_16(1150);
+emit_16(1214);
+emit_16(1149);
+emit_16(1214);
+emit_16(1150);
+emit_16(1215);
+emit_16(1151);
+emit_16(1215);
+emit_16(1150);
+emit_16(1216);
+emit_16(1152);
+emit_16(1217);
+emit_16(1153);
+emit_16(1217);
+emit_16(1152);
+emit_16(1217);
+emit_16(1153);
+emit_16(1218);
+emit_16(1154);
+emit_16(1218);
+emit_16(1153);
+emit_16(1218);
+emit_16(1154);
+emit_16(1219);
+emit_16(1155);
+emit_16(1219);
+emit_16(1154);
+emit_16(1219);
+emit_16(1155);
+emit_16(1220);
+emit_16(1156);
+emit_16(1220);
+emit_16(1155);
+emit_16(1220);
+emit_16(1156);
+emit_16(1221);
+emit_16(1157);
+emit_16(1221);
+emit_16(1156);
+emit_16(1221);
+emit_16(1157);
+emit_16(1222);
+emit_16(1158);
+emit_16(1222);
+emit_16(1157);
+emit_16(1222);
+emit_16(1158);
+emit_16(1223);
+emit_16(1159);
+emit_16(1223);
+emit_16(1158);
+emit_16(1223);
+emit_16(1159);
+emit_16(1224);
+emit_16(1160);
+emit_16(1224);
+emit_16(1159);
+emit_16(1224);
+emit_16(1160);
+emit_16(1225);
+emit_16(1161);
+emit_16(1225);
+emit_16(1160);
+emit_16(1225);
+emit_16(1161);
+emit_16(1226);
+emit_16(1162);
+emit_16(1226);
+emit_16(1161);
+emit_16(1226);
+emit_16(1162);
+emit_16(1227);
+emit_16(1163);
+emit_16(1227);
+emit_16(1162);
+emit_16(1227);
+emit_16(1163);
+emit_16(1228);
+emit_16(1164);
+emit_16(1228);
+emit_16(1163);
+emit_16(1228);
+emit_16(1164);
+emit_16(1229);
+emit_16(1165);
+emit_16(1229);
+emit_16(1164);
+emit_16(1229);
+emit_16(1165);
+emit_16(1230);
+emit_16(1166);
+emit_16(1230);
+emit_16(1165);
+emit_16(1230);
+emit_16(1166);
+emit_16(1231);
+emit_16(1167);
+emit_16(1231);
+emit_16(1166);
+emit_16(1231);
+emit_16(1167);
+emit_16(1232);
+emit_16(1168);
+emit_16(1232);
+emit_16(1167);
+emit_16(1232);
+emit_16(1168);
+emit_16(1233);
+emit_16(1169);
+emit_16(1233);
+emit_16(1168);
+emit_16(1233);
+emit_16(1169);
+emit_16(1234);
+emit_16(1170);
+emit_16(1234);
+emit_16(1169);
+emit_16(1234);
+emit_16(1170);
+emit_16(1235);
+emit_16(1171);
+emit_16(1235);
+emit_16(1170);
+emit_16(1235);
+emit_16(1171);
+emit_16(1236);
+emit_16(1172);
+emit_16(1236);
+emit_16(1171);
+emit_16(1236);
+emit_16(1172);
+emit_16(1237);
+emit_16(1173);
+emit_16(1237);
+emit_16(1172);
+emit_16(1237);
+emit_16(1173);
+emit_16(1238);
+emit_16(1174);
+emit_16(1238);
+emit_16(1173);
+emit_16(1238);
+emit_16(1174);
+emit_16(1239);
+emit_16(1175);
+emit_16(1239);
+emit_16(1174);
+emit_16(1239);
+emit_16(1175);
+emit_16(1240);
+emit_16(1176);
+emit_16(1240);
+emit_16(1175);
+emit_16(1240);
+emit_16(1176);
+emit_16(1241);
+emit_16(1177);
+emit_16(1241);
+emit_16(1176);
+emit_16(1241);
+emit_16(1177);
+emit_16(1242);
+emit_16(1178);
+emit_16(1242);
+emit_16(1177);
+emit_16(1242);
+emit_16(1178);
+emit_16(1243);
+emit_16(1179);
+emit_16(1243);
+emit_16(1178);
+emit_16(1243);
+emit_16(1179);
+emit_16(1244);
+emit_16(1180);
+emit_16(1244);
+emit_16(1179);
+emit_16(1244);
+emit_16(1180);
+emit_16(1245);
+emit_16(1181);
+emit_16(1245);
+emit_16(1180);
+emit_16(1245);
+emit_16(1181);
+emit_16(1246);
+emit_16(1182);
+emit_16(1246);
+emit_16(1181);
+emit_16(1246);
+emit_16(1182);
+emit_16(1247);
+emit_16(1183);
+emit_16(1247);
+emit_16(1182);
+emit_16(1247);
+emit_16(1183);
+emit_16(1248);
+emit_16(1184);
+emit_16(1248);
+emit_16(1183);
+emit_16(1248);
+emit_16(1184);
+emit_16(1249);
+emit_16(1185);
+emit_16(1249);
+emit_16(1184);
+emit_16(1249);
+emit_16(1185);
+emit_16(1250);
+emit_16(1186);
+emit_16(1250);
+emit_16(1185);
+emit_16(1250);
+emit_16(1186);
+emit_16(1251);
+emit_16(1187);
+emit_16(1251);
+emit_16(1186);
+emit_16(1251);
+emit_16(1187);
+emit_16(1252);
+emit_16(1188);
+emit_16(1252);
+emit_16(1187);
+emit_16(1252);
+emit_16(1188);
+emit_16(1253);
+emit_16(1189);
+emit_16(1253);
+emit_16(1188);
+emit_16(1253);
+emit_16(1189);
+emit_16(1254);
+emit_16(1190);
+emit_16(1254);
+emit_16(1189);
+emit_16(1254);
+emit_16(1190);
+emit_16(1255);
+emit_16(1191);
+emit_16(1255);
+emit_16(1190);
+emit_16(1255);
+emit_16(1191);
+emit_16(1256);
+emit_16(1192);
+emit_16(1256);
+emit_16(1191);
+emit_16(1256);
+emit_16(1192);
+emit_16(1257);
+emit_16(1193);
+emit_16(1257);
+emit_16(1192);
+emit_16(1257);
+emit_16(1193);
+emit_16(1258);
+emit_16(1194);
+emit_16(1258);
+emit_16(1193);
+emit_16(1258);
+emit_16(1194);
+emit_16(1259);
+emit_16(1195);
+emit_16(1259);
+emit_16(1194);
+emit_16(1259);
+emit_16(1195);
+emit_16(1260);
+emit_16(1196);
+emit_16(1260);
+emit_16(1195);
+emit_16(1260);
+emit_16(1196);
+emit_16(1261);
+emit_16(1197);
+emit_16(1261);
+emit_16(1196);
+emit_16(1261);
+emit_16(1197);
+emit_16(1262);
+emit_16(1198);
+emit_16(1262);
+emit_16(1197);
+emit_16(1262);
+emit_16(1198);
+emit_16(1263);
+emit_16(1199);
+emit_16(1263);
+emit_16(1198);
+emit_16(1263);
+emit_16(1199);
+emit_16(1264);
+emit_16(1200);
+emit_16(1264);
+emit_16(1199);
+emit_16(1264);
+emit_16(1200);
+emit_16(1265);
+emit_16(1201);
+emit_16(1265);
+emit_16(1200);
+emit_16(1265);
+emit_16(1201);
+emit_16(1266);
+emit_16(1202);
+emit_16(1266);
+emit_16(1201);
+emit_16(1266);
+emit_16(1202);
+emit_16(1267);
+emit_16(1203);
+emit_16(1267);
+emit_16(1202);
+emit_16(1267);
+emit_16(1203);
+emit_16(1268);
+emit_16(1204);
+emit_16(1268);
+emit_16(1203);
+emit_16(1268);
+emit_16(1204);
+emit_16(1269);
+emit_16(1205);
+emit_16(1269);
+emit_16(1204);
+emit_16(1269);
+emit_16(1205);
+emit_16(1270);
+emit_16(1206);
+emit_16(1270);
+emit_16(1205);
+emit_16(1270);
+emit_16(1206);
+emit_16(1271);
+emit_16(1207);
+emit_16(1271);
+emit_16(1206);
+emit_16(1271);
+emit_16(1207);
+emit_16(1272);
+emit_16(1208);
+emit_16(1272);
+emit_16(1207);
+emit_16(1272);
+emit_16(1208);
+emit_16(1273);
+emit_16(1209);
+emit_16(1273);
+emit_16(1208);
+emit_16(1273);
+emit_16(1209);
+emit_16(1274);
+emit_16(1210);
+emit_16(1274);
+emit_16(1209);
+emit_16(1274);
+emit_16(1210);
+emit_16(1275);
+emit_16(1211);
+emit_16(1275);
+emit_16(1210);
+emit_16(1275);
+emit_16(1211);
+emit_16(1276);
+emit_16(1212);
+emit_16(1276);
+emit_16(1211);
+emit_16(1276);
+emit_16(1212);
+emit_16(1277);
+emit_16(1213);
+emit_16(1277);
+emit_16(1212);
+emit_16(1277);
+emit_16(1213);
+emit_16(1278);
+emit_16(1214);
+emit_16(1278);
+emit_16(1213);
+emit_16(1278);
+emit_16(1214);
+emit_16(1279);
+emit_16(1215);
+emit_16(1279);
+emit_16(1214);
+emit_16(1280);
+emit_16(1216);
+emit_16(1281);
+emit_16(1217);
+emit_16(1281);
+emit_16(1216);
+emit_16(1281);
+emit_16(1217);
+emit_16(1282);
+emit_16(1218);
+emit_16(1282);
+emit_16(1217);
+emit_16(1282);
+emit_16(1218);
+emit_16(1283);
+emit_16(1219);
+emit_16(1283);
+emit_16(1218);
+emit_16(1283);
+emit_16(1219);
+emit_16(1284);
+emit_16(1220);
+emit_16(1284);
+emit_16(1219);
+emit_16(1284);
+emit_16(1220);
+emit_16(1285);
+emit_16(1221);
+emit_16(1285);
+emit_16(1220);
+emit_16(1285);
+emit_16(1221);
+emit_16(1286);
+emit_16(1222);
+emit_16(1286);
+emit_16(1221);
+emit_16(1286);
+emit_16(1222);
+emit_16(1287);
+emit_16(1223);
+emit_16(1287);
+emit_16(1222);
+emit_16(1287);
+emit_16(1223);
+emit_16(1288);
+emit_16(1224);
+emit_16(1288);
+emit_16(1223);
+emit_16(1288);
+emit_16(1224);
+emit_16(1289);
+emit_16(1225);
+emit_16(1289);
+emit_16(1224);
+emit_16(1289);
+emit_16(1225);
+emit_16(1290);
+emit_16(1226);
+emit_16(1290);
+emit_16(1225);
+emit_16(1290);
+emit_16(1226);
+emit_16(1291);
+emit_16(1227);
+emit_16(1291);
+emit_16(1226);
+emit_16(1291);
+emit_16(1227);
+emit_16(1292);
+emit_16(1228);
+emit_16(1292);
+emit_16(1227);
+emit_16(1292);
+emit_16(1228);
+emit_16(1293);
+emit_16(1229);
+emit_16(1293);
+emit_16(1228);
+emit_16(1293);
+emit_16(1229);
+emit_16(1294);
+emit_16(1230);
+emit_16(1294);
+emit_16(1229);
+emit_16(1294);
+emit_16(1230);
+emit_16(1295);
+emit_16(1231);
+emit_16(1295);
+emit_16(1230);
+emit_16(1295);
+emit_16(1231);
+emit_16(1296);
+emit_16(1232);
+emit_16(1296);
+emit_16(1231);
+emit_16(1296);
+emit_16(1232);
+emit_16(1297);
+emit_16(1233);
+emit_16(1297);
+emit_16(1232);
+emit_16(1297);
+emit_16(1233);
+emit_16(1298);
+emit_16(1234);
+emit_16(1298);
+emit_16(1233);
+emit_16(1298);
+emit_16(1234);
+emit_16(1299);
+emit_16(1235);
+emit_16(1299);
+emit_16(1234);
+emit_16(1299);
+emit_16(1235);
+emit_16(1300);
+emit_16(1236);
+emit_16(1300);
+emit_16(1235);
+emit_16(1300);
+emit_16(1236);
+emit_16(1301);
+emit_16(1237);
+emit_16(1301);
+emit_16(1236);
+emit_16(1301);
+emit_16(1237);
+emit_16(1302);
+emit_16(1238);
+emit_16(1302);
+emit_16(1237);
+emit_16(1302);
+emit_16(1238);
+emit_16(1303);
+emit_16(1239);
+emit_16(1303);
+emit_16(1238);
+emit_16(1303);
+emit_16(1239);
+emit_16(1304);
+emit_16(1240);
+emit_16(1304);
+emit_16(1239);
+emit_16(1304);
+emit_16(1240);
+emit_16(1305);
+emit_16(1241);
+emit_16(1305);
+emit_16(1240);
+emit_16(1305);
+emit_16(1241);
+emit_16(1306);
+emit_16(1242);
+emit_16(1306);
+emit_16(1241);
+emit_16(1306);
+emit_16(1242);
+emit_16(1307);
+emit_16(1243);
+emit_16(1307);
+emit_16(1242);
+emit_16(1307);
+emit_16(1243);
+emit_16(1308);
+emit_16(1244);
+emit_16(1308);
+emit_16(1243);
+emit_16(1308);
+emit_16(1244);
+emit_16(1309);
+emit_16(1245);
+emit_16(1309);
+emit_16(1244);
+emit_16(1309);
+emit_16(1245);
+emit_16(1310);
+emit_16(1246);
+emit_16(1310);
+emit_16(1245);
+emit_16(1310);
+emit_16(1246);
+emit_16(1311);
+emit_16(1247);
+emit_16(1311);
+emit_16(1246);
+emit_16(1311);
+emit_16(1247);
+emit_16(1312);
+emit_16(1248);
+emit_16(1312);
+emit_16(1247);
+emit_16(1312);
+emit_16(1248);
+emit_16(1313);
+emit_16(1249);
+emit_16(1313);
+emit_16(1248);
+emit_16(1313);
+emit_16(1249);
+emit_16(1314);
+emit_16(1250);
+emit_16(1314);
+emit_16(1249);
+emit_16(1314);
+emit_16(1250);
+emit_16(1315);
+emit_16(1251);
+emit_16(1315);
+emit_16(1250);
+emit_16(1315);
+emit_16(1251);
+emit_16(1316);
+emit_16(1252);
+emit_16(1316);
+emit_16(1251);
+emit_16(1316);
+emit_16(1252);
+emit_16(1317);
+emit_16(1253);
+emit_16(1317);
+emit_16(1252);
+emit_16(1317);
+emit_16(1253);
+emit_16(1318);
+emit_16(1254);
+emit_16(1318);
+emit_16(1253);
+emit_16(1318);
+emit_16(1254);
+emit_16(1319);
+emit_16(1255);
+emit_16(1319);
+emit_16(1254);
+emit_16(1319);
+emit_16(1255);
+emit_16(1320);
+emit_16(1256);
+emit_16(1320);
+emit_16(1255);
+emit_16(1320);
+emit_16(1256);
+emit_16(1321);
+emit_16(1257);
+emit_16(1321);
+emit_16(1256);
+emit_16(1321);
+emit_16(1257);
+emit_16(1322);
+emit_16(1258);
+emit_16(1322);
+emit_16(1257);
+emit_16(1322);
+emit_16(1258);
+emit_16(1323);
+emit_16(1259);
+emit_16(1323);
+emit_16(1258);
+emit_16(1323);
+emit_16(1259);
+emit_16(1324);
+emit_16(1260);
+emit_16(1324);
+emit_16(1259);
+emit_16(1324);
+emit_16(1260);
+emit_16(1325);
+emit_16(1261);
+emit_16(1325);
+emit_16(1260);
+emit_16(1325);
+emit_16(1261);
+emit_16(1326);
+emit_16(1262);
+emit_16(1326);
+emit_16(1261);
+emit_16(1326);
+emit_16(1262);
+emit_16(1327);
+emit_16(1263);
+emit_16(1327);
+emit_16(1262);
+emit_16(1327);
+emit_16(1263);
+emit_16(1328);
+emit_16(1264);
+emit_16(1328);
+emit_16(1263);
+emit_16(1328);
+emit_16(1264);
+emit_16(1329);
+emit_16(1265);
+emit_16(1329);
+emit_16(1264);
+emit_16(1329);
+emit_16(1265);
+emit_16(1330);
+emit_16(1266);
+emit_16(1330);
+emit_16(1265);
+emit_16(1330);
+emit_16(1266);
+emit_16(1331);
+emit_16(1267);
+emit_16(1331);
+emit_16(1266);
+emit_16(1331);
+emit_16(1267);
+emit_16(1332);
+emit_16(1268);
+emit_16(1332);
+emit_16(1267);
+emit_16(1332);
+emit_16(1268);
+emit_16(1333);
+emit_16(1269);
+emit_16(1333);
+emit_16(1268);
+emit_16(1333);
+emit_16(1269);
+emit_16(1334);
+emit_16(1270);
+emit_16(1334);
+emit_16(1269);
+emit_16(1334);
+emit_16(1270);
+emit_16(1335);
+emit_16(1271);
+emit_16(1335);
+emit_16(1270);
+emit_16(1335);
+emit_16(1271);
+emit_16(1336);
+emit_16(1272);
+emit_16(1336);
+emit_16(1271);
+emit_16(1336);
+emit_16(1272);
+emit_16(1337);
+emit_16(1273);
+emit_16(1337);
+emit_16(1272);
+emit_16(1337);
+emit_16(1273);
+emit_16(1338);
+emit_16(1274);
+emit_16(1338);
+emit_16(1273);
+emit_16(1338);
+emit_16(1274);
+emit_16(1339);
+emit_16(1275);
+emit_16(1339);
+emit_16(1274);
+emit_16(1339);
+emit_16(1275);
+emit_16(1340);
+emit_16(1276);
+emit_16(1340);
+emit_16(1275);
+emit_16(1340);
+emit_16(1276);
+emit_16(1341);
+emit_16(1277);
+emit_16(1341);
+emit_16(1276);
+emit_16(1341);
+emit_16(1277);
+emit_16(1342);
+emit_16(1278);
+emit_16(1342);
+emit_16(1277);
+emit_16(1342);
+emit_16(1278);
+emit_16(1343);
+emit_16(1279);
+emit_16(1343);
+emit_16(1278);
+emit_16(1344);
+emit_16(1280);
+emit_16(1345);
+emit_16(1281);
+emit_16(1345);
+emit_16(1280);
+emit_16(1345);
+emit_16(1281);
+emit_16(1346);
+emit_16(1282);
+emit_16(1346);
+emit_16(1281);
+emit_16(1346);
+emit_16(1282);
+emit_16(1347);
+emit_16(1283);
+emit_16(1347);
+emit_16(1282);
+emit_16(1347);
+emit_16(1283);
+emit_16(1348);
+emit_16(1284);
+emit_16(1348);
+emit_16(1283);
+emit_16(1348);
+emit_16(1284);
+emit_16(1349);
+emit_16(1285);
+emit_16(1349);
+emit_16(1284);
+emit_16(1349);
+emit_16(1285);
+emit_16(1350);
+emit_16(1286);
+emit_16(1350);
+emit_16(1285);
+emit_16(1350);
+emit_16(1286);
+emit_16(1351);
+emit_16(1287);
+emit_16(1351);
+emit_16(1286);
+emit_16(1351);
+emit_16(1287);
+emit_16(1352);
+emit_16(1288);
+emit_16(1352);
+emit_16(1287);
+emit_16(1352);
+emit_16(1288);
+emit_16(1353);
+emit_16(1289);
+emit_16(1353);
+emit_16(1288);
+emit_16(1353);
+emit_16(1289);
+emit_16(1354);
+emit_16(1290);
+emit_16(1354);
+emit_16(1289);
+emit_16(1354);
+emit_16(1290);
+emit_16(1355);
+emit_16(1291);
+emit_16(1355);
+emit_16(1290);
+emit_16(1355);
+emit_16(1291);
+emit_16(1356);
+emit_16(1292);
+emit_16(1356);
+emit_16(1291);
+emit_16(1356);
+emit_16(1292);
+emit_16(1357);
+emit_16(1293);
+emit_16(1357);
+emit_16(1292);
+emit_16(1357);
+emit_16(1293);
+emit_16(1358);
+emit_16(1294);
+emit_16(1358);
+emit_16(1293);
+emit_16(1358);
+emit_16(1294);
+emit_16(1359);
+emit_16(1295);
+emit_16(1359);
+emit_16(1294);
+emit_16(1359);
+emit_16(1295);
+emit_16(1360);
+emit_16(1296);
+emit_16(1360);
+emit_16(1295);
+emit_16(1360);
+emit_16(1296);
+emit_16(1361);
+emit_16(1297);
+emit_16(1361);
+emit_16(1296);
+emit_16(1361);
+emit_16(1297);
+emit_16(1362);
+emit_16(1298);
+emit_16(1362);
+emit_16(1297);
+emit_16(1362);
+emit_16(1298);
+emit_16(1363);
+emit_16(1299);
+emit_16(1363);
+emit_16(1298);
+emit_16(1363);
+emit_16(1299);
+emit_16(1364);
+emit_16(1300);
+emit_16(1364);
+emit_16(1299);
+emit_16(1364);
+emit_16(1300);
+emit_16(1365);
+emit_16(1301);
+emit_16(1365);
+emit_16(1300);
+emit_16(1365);
+emit_16(1301);
+emit_16(1366);
+emit_16(1302);
+emit_16(1366);
+emit_16(1301);
+emit_16(1366);
+emit_16(1302);
+emit_16(1367);
+emit_16(1303);
+emit_16(1367);
+emit_16(1302);
+emit_16(1367);
+emit_16(1303);
+emit_16(1368);
+emit_16(1304);
+emit_16(1368);
+emit_16(1303);
+emit_16(1368);
+emit_16(1304);
+emit_16(1369);
+emit_16(1305);
+emit_16(1369);
+emit_16(1304);
+emit_16(1369);
+emit_16(1305);
+emit_16(1370);
+emit_16(1306);
+emit_16(1370);
+emit_16(1305);
+emit_16(1370);
+emit_16(1306);
+emit_16(1371);
+emit_16(1307);
+emit_16(1371);
+emit_16(1306);
+emit_16(1371);
+emit_16(1307);
+emit_16(1372);
+emit_16(1308);
+emit_16(1372);
+emit_16(1307);
+emit_16(1372);
+emit_16(1308);
+emit_16(1373);
+emit_16(1309);
+emit_16(1373);
+emit_16(1308);
+emit_16(1373);
+emit_16(1309);
+emit_16(1374);
+emit_16(1310);
+emit_16(1374);
+emit_16(1309);
+emit_16(1374);
+emit_16(1310);
+emit_16(1375);
+emit_16(1311);
+emit_16(1375);
+emit_16(1310);
+emit_16(1375);
+emit_16(1311);
+emit_16(1376);
+emit_16(1312);
+emit_16(1376);
+emit_16(1311);
+emit_16(1376);
+emit_16(1312);
+emit_16(1377);
+emit_16(1313);
+emit_16(1377);
+emit_16(1312);
+emit_16(1377);
+emit_16(1313);
+emit_16(1378);
+emit_16(1314);
+emit_16(1378);
+emit_16(1313);
+emit_16(1378);
+emit_16(1314);
+emit_16(1379);
+emit_16(1315);
+emit_16(1379);
+emit_16(1314);
+emit_16(1379);
+emit_16(1315);
+emit_16(1380);
+emit_16(1316);
+emit_16(1380);
+emit_16(1315);
+emit_16(1380);
+emit_16(1316);
+emit_16(1381);
+emit_16(1317);
+emit_16(1381);
+emit_16(1316);
+emit_16(1381);
+emit_16(1317);
+emit_16(1382);
+emit_16(1318);
+emit_16(1382);
+emit_16(1317);
+emit_16(1382);
+emit_16(1318);
+emit_16(1383);
+emit_16(1319);
+emit_16(1383);
+emit_16(1318);
+emit_16(1383);
+emit_16(1319);
+emit_16(1384);
+emit_16(1320);
+emit_16(1384);
+emit_16(1319);
+emit_16(1384);
+emit_16(1320);
+emit_16(1385);
+emit_16(1321);
+emit_16(1385);
+emit_16(1320);
+emit_16(1385);
+emit_16(1321);
+emit_16(1386);
+emit_16(1322);
+emit_16(1386);
+emit_16(1321);
+emit_16(1386);
+emit_16(1322);
+emit_16(1387);
+emit_16(1323);
+emit_16(1387);
+emit_16(1322);
+emit_16(1387);
+emit_16(1323);
+emit_16(1388);
+emit_16(1324);
+emit_16(1388);
+emit_16(1323);
+emit_16(1388);
+emit_16(1324);
+emit_16(1389);
+emit_16(1325);
+emit_16(1389);
+emit_16(1324);
+emit_16(1389);
+emit_16(1325);
+emit_16(1390);
+emit_16(1326);
+emit_16(1390);
+emit_16(1325);
+emit_16(1390);
+emit_16(1326);
+emit_16(1391);
+emit_16(1327);
+emit_16(1391);
+emit_16(1326);
+emit_16(1391);
+emit_16(1327);
+emit_16(1392);
+emit_16(1328);
+emit_16(1392);
+emit_16(1327);
+emit_16(1392);
+emit_16(1328);
+emit_16(1393);
+emit_16(1329);
+emit_16(1393);
+emit_16(1328);
+emit_16(1393);
+emit_16(1329);
+emit_16(1394);
+emit_16(1330);
+emit_16(1394);
+emit_16(1329);
+emit_16(1394);
+emit_16(1330);
+emit_16(1395);
+emit_16(1331);
+emit_16(1395);
+emit_16(1330);
+emit_16(1395);
+emit_16(1331);
+emit_16(1396);
+emit_16(1332);
+emit_16(1396);
+emit_16(1331);
+emit_16(1396);
+emit_16(1332);
+emit_16(1397);
+emit_16(1333);
+emit_16(1397);
+emit_16(1332);
+emit_16(1397);
+emit_16(1333);
+emit_16(1398);
+emit_16(1334);
+emit_16(1398);
+emit_16(1333);
+emit_16(1398);
+emit_16(1334);
+emit_16(1399);
+emit_16(1335);
+emit_16(1399);
+emit_16(1334);
+emit_16(1399);
+emit_16(1335);
+emit_16(1400);
+emit_16(1336);
+emit_16(1400);
+emit_16(1335);
+emit_16(1400);
+emit_16(1336);
+emit_16(1401);
+emit_16(1337);
+emit_16(1401);
+emit_16(1336);
+emit_16(1401);
+emit_16(1337);
+emit_16(1402);
+emit_16(1338);
+emit_16(1402);
+emit_16(1337);
+emit_16(1402);
+emit_16(1338);
+emit_16(1403);
+emit_16(1339);
+emit_16(1403);
+emit_16(1338);
+emit_16(1403);
+emit_16(1339);
+emit_16(1404);
+emit_16(1340);
+emit_16(1404);
+emit_16(1339);
+emit_16(1404);
+emit_16(1340);
+emit_16(1405);
+emit_16(1341);
+emit_16(1405);
+emit_16(1340);
+emit_16(1405);
+emit_16(1341);
+emit_16(1406);
+emit_16(1342);
+emit_16(1406);
+emit_16(1341);
+emit_16(1406);
+emit_16(1342);
+emit_16(1407);
+emit_16(1343);
+emit_16(1407);
+emit_16(1342);
+emit_16(1408);
+emit_16(1344);
+emit_16(1409);
+emit_16(1345);
+emit_16(1409);
+emit_16(1344);
+emit_16(1409);
+emit_16(1345);
+emit_16(1410);
+emit_16(1346);
+emit_16(1410);
+emit_16(1345);
+emit_16(1410);
+emit_16(1346);
+emit_16(1411);
+emit_16(1347);
+emit_16(1411);
+emit_16(1346);
+emit_16(1411);
+emit_16(1347);
+emit_16(1412);
+emit_16(1348);
+emit_16(1412);
+emit_16(1347);
+emit_16(1412);
+emit_16(1348);
+emit_16(1413);
+emit_16(1349);
+emit_16(1413);
+emit_16(1348);
+emit_16(1413);
+emit_16(1349);
+emit_16(1414);
+emit_16(1350);
+emit_16(1414);
+emit_16(1349);
+emit_16(1414);
+emit_16(1350);
+emit_16(1415);
+emit_16(1351);
+emit_16(1415);
+emit_16(1350);
+emit_16(1415);
+emit_16(1351);
+emit_16(1416);
+emit_16(1352);
+emit_16(1416);
+emit_16(1351);
+emit_16(1416);
+emit_16(1352);
+emit_16(1417);
+emit_16(1353);
+emit_16(1417);
+emit_16(1352);
+emit_16(1417);
+emit_16(1353);
+emit_16(1418);
+emit_16(1354);
+emit_16(1418);
+emit_16(1353);
+emit_16(1418);
+emit_16(1354);
+emit_16(1419);
+emit_16(1355);
+emit_16(1419);
+emit_16(1354);
+emit_16(1419);
+emit_16(1355);
+emit_16(1420);
+emit_16(1356);
+emit_16(1420);
+emit_16(1355);
+emit_16(1420);
+emit_16(1356);
+emit_16(1421);
+emit_16(1357);
+emit_16(1421);
+emit_16(1356);
+emit_16(1421);
+emit_16(1357);
+emit_16(1422);
+emit_16(1358);
+emit_16(1422);
+emit_16(1357);
+emit_16(1422);
+emit_16(1358);
+emit_16(1423);
+emit_16(1359);
+emit_16(1423);
+emit_16(1358);
+emit_16(1423);
+emit_16(1359);
+emit_16(1424);
+emit_16(1360);
+emit_16(1424);
+emit_16(1359);
+emit_16(1424);
+emit_16(1360);
+emit_16(1425);
+emit_16(1361);
+emit_16(1425);
+emit_16(1360);
+emit_16(1425);
+emit_16(1361);
+emit_16(1426);
+emit_16(1362);
+emit_16(1426);
+emit_16(1361);
+emit_16(1426);
+emit_16(1362);
+emit_16(1427);
+emit_16(1363);
+emit_16(1427);
+emit_16(1362);
+emit_16(1427);
+emit_16(1363);
+emit_16(1428);
+emit_16(1364);
+emit_16(1428);
+emit_16(1363);
+emit_16(1428);
+emit_16(1364);
+emit_16(1429);
+emit_16(1365);
+emit_16(1429);
+emit_16(1364);
+emit_16(1429);
+emit_16(1365);
+emit_16(1430);
+emit_16(1366);
+emit_16(1430);
+emit_16(1365);
+emit_16(1430);
+emit_16(1366);
+emit_16(1431);
+emit_16(1367);
+emit_16(1431);
+emit_16(1366);
+emit_16(1431);
+emit_16(1367);
+emit_16(1432);
+emit_16(1368);
+emit_16(1432);
+emit_16(1367);
+emit_16(1432);
+emit_16(1368);
+emit_16(1433);
+emit_16(1369);
+emit_16(1433);
+emit_16(1368);
+emit_16(1433);
+emit_16(1369);
+emit_16(1434);
+emit_16(1370);
+emit_16(1434);
+emit_16(1369);
+emit_16(1434);
+emit_16(1370);
+emit_16(1435);
+emit_16(1371);
+emit_16(1435);
+emit_16(1370);
+emit_16(1435);
+emit_16(1371);
+emit_16(1436);
+emit_16(1372);
+emit_16(1436);
+emit_16(1371);
+emit_16(1436);
+emit_16(1372);
+emit_16(1437);
+emit_16(1373);
+emit_16(1437);
+emit_16(1372);
+emit_16(1437);
+emit_16(1373);
+emit_16(1438);
+emit_16(1374);
+emit_16(1438);
+emit_16(1373);
+emit_16(1438);
+emit_16(1374);
+emit_16(1439);
+emit_16(1375);
+emit_16(1439);
+emit_16(1374);
+emit_16(1439);
+emit_16(1375);
+emit_16(1440);
+emit_16(1376);
+emit_16(1440);
+emit_16(1375);
+emit_16(1440);
+emit_16(1376);
+emit_16(1441);
+emit_16(1377);
+emit_16(1441);
+emit_16(1376);
+emit_16(1441);
+emit_16(1377);
+emit_16(1442);
+emit_16(1378);
+emit_16(1442);
+emit_16(1377);
+emit_16(1442);
+emit_16(1378);
+emit_16(1443);
+emit_16(1379);
+emit_16(1443);
+emit_16(1378);
+emit_16(1443);
+emit_16(1379);
+emit_16(1444);
+emit_16(1380);
+emit_16(1444);
+emit_16(1379);
+emit_16(1444);
+emit_16(1380);
+emit_16(1445);
+emit_16(1381);
+emit_16(1445);
+emit_16(1380);
+emit_16(1445);
+emit_16(1381);
+emit_16(1446);
+emit_16(1382);
+emit_16(1446);
+emit_16(1381);
+emit_16(1446);
+emit_16(1382);
+emit_16(1447);
+emit_16(1383);
+emit_16(1447);
+emit_16(1382);
+emit_16(1447);
+emit_16(1383);
+emit_16(1448);
+emit_16(1384);
+emit_16(1448);
+emit_16(1383);
+emit_16(1448);
+emit_16(1384);
+emit_16(1449);
+emit_16(1385);
+emit_16(1449);
+emit_16(1384);
+emit_16(1449);
+emit_16(1385);
+emit_16(1450);
+emit_16(1386);
+emit_16(1450);
+emit_16(1385);
+emit_16(1450);
+emit_16(1386);
+emit_16(1451);
+emit_16(1387);
+emit_16(1451);
+emit_16(1386);
+emit_16(1451);
+emit_16(1387);
+emit_16(1452);
+emit_16(1388);
+emit_16(1452);
+emit_16(1387);
+emit_16(1452);
+emit_16(1388);
+emit_16(1453);
+emit_16(1389);
+emit_16(1453);
+emit_16(1388);
+emit_16(1453);
+emit_16(1389);
+emit_16(1454);
+emit_16(1390);
+emit_16(1454);
+emit_16(1389);
+emit_16(1454);
+emit_16(1390);
+emit_16(1455);
+emit_16(1391);
+emit_16(1455);
+emit_16(1390);
+emit_16(1455);
+emit_16(1391);
+emit_16(1456);
+emit_16(1392);
+emit_16(1456);
+emit_16(1391);
+emit_16(1456);
+emit_16(1392);
+emit_16(1457);
+emit_16(1393);
+emit_16(1457);
+emit_16(1392);
+emit_16(1457);
+emit_16(1393);
+emit_16(1458);
+emit_16(1394);
+emit_16(1458);
+emit_16(1393);
+emit_16(1458);
+emit_16(1394);
+emit_16(1459);
+emit_16(1395);
+emit_16(1459);
+emit_16(1394);
+emit_16(1459);
+emit_16(1395);
+emit_16(1460);
+emit_16(1396);
+emit_16(1460);
+emit_16(1395);
+emit_16(1460);
+emit_16(1396);
+emit_16(1461);
+emit_16(1397);
+emit_16(1461);
+emit_16(1396);
+emit_16(1461);
+emit_16(1397);
+emit_16(1462);
+emit_16(1398);
+emit_16(1462);
+emit_16(1397);
+emit_16(1462);
+emit_16(1398);
+emit_16(1463);
+emit_16(1399);
+emit_16(1463);
+emit_16(1398);
+emit_16(1463);
+emit_16(1399);
+emit_16(1464);
+emit_16(1400);
+emit_16(1464);
+emit_16(1399);
+emit_16(1464);
+emit_16(1400);
+emit_16(1465);
+emit_16(1401);
+emit_16(1465);
+emit_16(1400);
+emit_16(1465);
+emit_16(1401);
+emit_16(1466);
+emit_16(1402);
+emit_16(1466);
+emit_16(1401);
+emit_16(1466);
+emit_16(1402);
+emit_16(1467);
+emit_16(1403);
+emit_16(1467);
+emit_16(1402);
+emit_16(1467);
+emit_16(1403);
+emit_16(1468);
+emit_16(1404);
+emit_16(1468);
+emit_16(1403);
+emit_16(1468);
+emit_16(1404);
+emit_16(1469);
+emit_16(1405);
+emit_16(1469);
+emit_16(1404);
+emit_16(1469);
+emit_16(1405);
+emit_16(1470);
+emit_16(1406);
+emit_16(1470);
+emit_16(1405);
+emit_16(1470);
+emit_16(1406);
+emit_16(1471);
+emit_16(1407);
+emit_16(1471);
+emit_16(1406);
+emit_16(1472);
+emit_16(1408);
+emit_16(1473);
+emit_16(1409);
+emit_16(1473);
+emit_16(1408);
+emit_16(1473);
+emit_16(1409);
+emit_16(1474);
+emit_16(1410);
+emit_16(1474);
+emit_16(1409);
+emit_16(1474);
+emit_16(1410);
+emit_16(1475);
+emit_16(1411);
+emit_16(1475);
+emit_16(1410);
+emit_16(1475);
+emit_16(1411);
+emit_16(1476);
+emit_16(1412);
+emit_16(1476);
+emit_16(1411);
+emit_16(1476);
+emit_16(1412);
+emit_16(1477);
+emit_16(1413);
+emit_16(1477);
+emit_16(1412);
+emit_16(1477);
+emit_16(1413);
+emit_16(1478);
+emit_16(1414);
+emit_16(1478);
+emit_16(1413);
+emit_16(1478);
+emit_16(1414);
+emit_16(1479);
+emit_16(1415);
+emit_16(1479);
+emit_16(1414);
+emit_16(1479);
+emit_16(1415);
+emit_16(1480);
+emit_16(1416);
+emit_16(1480);
+emit_16(1415);
+emit_16(1480);
+emit_16(1416);
+emit_16(1481);
+emit_16(1417);
+emit_16(1481);
+emit_16(1416);
+emit_16(1481);
+emit_16(1417);
+emit_16(1482);
+emit_16(1418);
+emit_16(1482);
+emit_16(1417);
+emit_16(1482);
+emit_16(1418);
+emit_16(1483);
+emit_16(1419);
+emit_16(1483);
+emit_16(1418);
+emit_16(1483);
+emit_16(1419);
+emit_16(1484);
+emit_16(1420);
+emit_16(1484);
+emit_16(1419);
+emit_16(1484);
+emit_16(1420);
+emit_16(1485);
+emit_16(1421);
+emit_16(1485);
+emit_16(1420);
+emit_16(1485);
+emit_16(1421);
+emit_16(1486);
+emit_16(1422);
+emit_16(1486);
+emit_16(1421);
+emit_16(1486);
+emit_16(1422);
+emit_16(1487);
+emit_16(1423);
+emit_16(1487);
+emit_16(1422);
+emit_16(1487);
+emit_16(1423);
+emit_16(1488);
+emit_16(1424);
+emit_16(1488);
+emit_16(1423);
+emit_16(1488);
+emit_16(1424);
+emit_16(1489);
+emit_16(1425);
+emit_16(1489);
+emit_16(1424);
+emit_16(1489);
+emit_16(1425);
+emit_16(1490);
+emit_16(1426);
+emit_16(1490);
+emit_16(1425);
+emit_16(1490);
+emit_16(1426);
+emit_16(1491);
+emit_16(1427);
+emit_16(1491);
+emit_16(1426);
+emit_16(1491);
+emit_16(1427);
+emit_16(1492);
+emit_16(1428);
+emit_16(1492);
+emit_16(1427);
+emit_16(1492);
+emit_16(1428);
+emit_16(1493);
+emit_16(1429);
+emit_16(1493);
+emit_16(1428);
+emit_16(1493);
+emit_16(1429);
+emit_16(1494);
+emit_16(1430);
+emit_16(1494);
+emit_16(1429);
+emit_16(1494);
+emit_16(1430);
+emit_16(1495);
+emit_16(1431);
+emit_16(1495);
+emit_16(1430);
+emit_16(1495);
+emit_16(1431);
+emit_16(1496);
+emit_16(1432);
+emit_16(1496);
+emit_16(1431);
+emit_16(1496);
+emit_16(1432);
+emit_16(1497);
+emit_16(1433);
+emit_16(1497);
+emit_16(1432);
+emit_16(1497);
+emit_16(1433);
+emit_16(1498);
+emit_16(1434);
+emit_16(1498);
+emit_16(1433);
+emit_16(1498);
+emit_16(1434);
+emit_16(1499);
+emit_16(1435);
+emit_16(1499);
+emit_16(1434);
+emit_16(1499);
+emit_16(1435);
+emit_16(1500);
+emit_16(1436);
+emit_16(1500);
+emit_16(1435);
+emit_16(1500);
+emit_16(1436);
+emit_16(1501);
+emit_16(1437);
+emit_16(1501);
+emit_16(1436);
+emit_16(1501);
+emit_16(1437);
+emit_16(1502);
+emit_16(1438);
+emit_16(1502);
+emit_16(1437);
+emit_16(1502);
+emit_16(1438);
+emit_16(1503);
+emit_16(1439);
+emit_16(1503);
+emit_16(1438);
+emit_16(1503);
+emit_16(1439);
+emit_16(1504);
+emit_16(1440);
+emit_16(1504);
+emit_16(1439);
+emit_16(1504);
+emit_16(1440);
+emit_16(1505);
+emit_16(1441);
+emit_16(1505);
+emit_16(1440);
+emit_16(1505);
+emit_16(1441);
+emit_16(1506);
+emit_16(1442);
+emit_16(1506);
+emit_16(1441);
+emit_16(1506);
+emit_16(1442);
+emit_16(1507);
+emit_16(1443);
+emit_16(1507);
+emit_16(1442);
+emit_16(1507);
+emit_16(1443);
+emit_16(1508);
+emit_16(1444);
+emit_16(1508);
+emit_16(1443);
+emit_16(1508);
+emit_16(1444);
+emit_16(1509);
+emit_16(1445);
+emit_16(1509);
+emit_16(1444);
+emit_16(1509);
+emit_16(1445);
+emit_16(1510);
+emit_16(1446);
+emit_16(1510);
+emit_16(1445);
+emit_16(1510);
+emit_16(1446);
+emit_16(1511);
+emit_16(1447);
+emit_16(1511);
+emit_16(1446);
+emit_16(1511);
+emit_16(1447);
+emit_16(1512);
+emit_16(1448);
+emit_16(1512);
+emit_16(1447);
+emit_16(1512);
+emit_16(1448);
+emit_16(1513);
+emit_16(1449);
+emit_16(1513);
+emit_16(1448);
+emit_16(1513);
+emit_16(1449);
+emit_16(1514);
+emit_16(1450);
+emit_16(1514);
+emit_16(1449);
+emit_16(1514);
+emit_16(1450);
+emit_16(1515);
+emit_16(1451);
+emit_16(1515);
+emit_16(1450);
+emit_16(1515);
+emit_16(1451);
+emit_16(1516);
+emit_16(1452);
+emit_16(1516);
+emit_16(1451);
+emit_16(1516);
+emit_16(1452);
+emit_16(1517);
+emit_16(1453);
+emit_16(1517);
+emit_16(1452);
+emit_16(1517);
+emit_16(1453);
+emit_16(1518);
+emit_16(1454);
+emit_16(1518);
+emit_16(1453);
+emit_16(1518);
+emit_16(1454);
+emit_16(1519);
+emit_16(1455);
+emit_16(1519);
+emit_16(1454);
+emit_16(1519);
+emit_16(1455);
+emit_16(1520);
+emit_16(1456);
+emit_16(1520);
+emit_16(1455);
+emit_16(1520);
+emit_16(1456);
+emit_16(1521);
+emit_16(1457);
+emit_16(1521);
+emit_16(1456);
+emit_16(1521);
+emit_16(1457);
+emit_16(1522);
+emit_16(1458);
+emit_16(1522);
+emit_16(1457);
+emit_16(1522);
+emit_16(1458);
+emit_16(1523);
+emit_16(1459);
+emit_16(1523);
+emit_16(1458);
+emit_16(1523);
+emit_16(1459);
+emit_16(1524);
+emit_16(1460);
+emit_16(1524);
+emit_16(1459);
+emit_16(1524);
+emit_16(1460);
+emit_16(1525);
+emit_16(1461);
+emit_16(1525);
+emit_16(1460);
+emit_16(1525);
+emit_16(1461);
+emit_16(1526);
+emit_16(1462);
+emit_16(1526);
+emit_16(1461);
+emit_16(1526);
+emit_16(1462);
+emit_16(1527);
+emit_16(1463);
+emit_16(1527);
+emit_16(1462);
+emit_16(1527);
+emit_16(1463);
+emit_16(1528);
+emit_16(1464);
+emit_16(1528);
+emit_16(1463);
+emit_16(1528);
+emit_16(1464);
+emit_16(1529);
+emit_16(1465);
+emit_16(1529);
+emit_16(1464);
+emit_16(1529);
+emit_16(1465);
+emit_16(1530);
+emit_16(1466);
+emit_16(1530);
+emit_16(1465);
+emit_16(1530);
+emit_16(1466);
+emit_16(1531);
+emit_16(1467);
+emit_16(1531);
+emit_16(1466);
+emit_16(1531);
+emit_16(1467);
+emit_16(1532);
+emit_16(1468);
+emit_16(1532);
+emit_16(1467);
+emit_16(1532);
+emit_16(1468);
+emit_16(1533);
+emit_16(1469);
+emit_16(1533);
+emit_16(1468);
+emit_16(1533);
+emit_16(1469);
+emit_16(1534);
+emit_16(1470);
+emit_16(1534);
+emit_16(1469);
+emit_16(1534);
+emit_16(1470);
+emit_16(1535);
+emit_16(1471);
+emit_16(1535);
+emit_16(1470);
+emit_16(1536);
+emit_16(1472);
+emit_16(1537);
+emit_16(1473);
+emit_16(1537);
+emit_16(1472);
+emit_16(1537);
+emit_16(1473);
+emit_16(1538);
+emit_16(1474);
+emit_16(1538);
+emit_16(1473);
+emit_16(1538);
+emit_16(1474);
+emit_16(1539);
+emit_16(1475);
+emit_16(1539);
+emit_16(1474);
+emit_16(1539);
+emit_16(1475);
+emit_16(1540);
+emit_16(1476);
+emit_16(1540);
+emit_16(1475);
+emit_16(1540);
+emit_16(1476);
+emit_16(1541);
+emit_16(1477);
+emit_16(1541);
+emit_16(1476);
+emit_16(1541);
+emit_16(1477);
+emit_16(1542);
+emit_16(1478);
+emit_16(1542);
+emit_16(1477);
+emit_16(1542);
+emit_16(1478);
+emit_16(1543);
+emit_16(1479);
+emit_16(1543);
+emit_16(1478);
+emit_16(1543);
+emit_16(1479);
+emit_16(1544);
+emit_16(1480);
+emit_16(1544);
+emit_16(1479);
+emit_16(1544);
+emit_16(1480);
+emit_16(1545);
+emit_16(1481);
+emit_16(1545);
+emit_16(1480);
+emit_16(1545);
+emit_16(1481);
+emit_16(1546);
+emit_16(1482);
+emit_16(1546);
+emit_16(1481);
+emit_16(1546);
+emit_16(1482);
+emit_16(1547);
+emit_16(1483);
+emit_16(1547);
+emit_16(1482);
+emit_16(1547);
+emit_16(1483);
+emit_16(1548);
+emit_16(1484);
+emit_16(1548);
+emit_16(1483);
+emit_16(1548);
+emit_16(1484);
+emit_16(1549);
+emit_16(1485);
+emit_16(1549);
+emit_16(1484);
+emit_16(1549);
+emit_16(1485);
+emit_16(1550);
+emit_16(1486);
+emit_16(1550);
+emit_16(1485);
+emit_16(1550);
+emit_16(1486);
+emit_16(1551);
+emit_16(1487);
+emit_16(1551);
+emit_16(1486);
+emit_16(1551);
+emit_16(1487);
+emit_16(1552);
+emit_16(1488);
+emit_16(1552);
+emit_16(1487);
+emit_16(1552);
+emit_16(1488);
+emit_16(1553);
+emit_16(1489);
+emit_16(1553);
+emit_16(1488);
+emit_16(1553);
+emit_16(1489);
+emit_16(1554);
+emit_16(1490);
+emit_16(1554);
+emit_16(1489);
+emit_16(1554);
+emit_16(1490);
+emit_16(1555);
+emit_16(1491);
+emit_16(1555);
+emit_16(1490);
+emit_16(1555);
+emit_16(1491);
+emit_16(1556);
+emit_16(1492);
+emit_16(1556);
+emit_16(1491);
+emit_16(1556);
+emit_16(1492);
+emit_16(1557);
+emit_16(1493);
+emit_16(1557);
+emit_16(1492);
+emit_16(1557);
+emit_16(1493);
+emit_16(1558);
+emit_16(1494);
+emit_16(1558);
+emit_16(1493);
+emit_16(1558);
+emit_16(1494);
+emit_16(1559);
+emit_16(1495);
+emit_16(1559);
+emit_16(1494);
+emit_16(1559);
+emit_16(1495);
+emit_16(1560);
+emit_16(1496);
+emit_16(1560);
+emit_16(1495);
+emit_16(1560);
+emit_16(1496);
+emit_16(1561);
+emit_16(1497);
+emit_16(1561);
+emit_16(1496);
+emit_16(1561);
+emit_16(1497);
+emit_16(1562);
+emit_16(1498);
+emit_16(1562);
+emit_16(1497);
+emit_16(1562);
+emit_16(1498);
+emit_16(1563);
+emit_16(1499);
+emit_16(1563);
+emit_16(1498);
+emit_16(1563);
+emit_16(1499);
+emit_16(1564);
+emit_16(1500);
+emit_16(1564);
+emit_16(1499);
+emit_16(1564);
+emit_16(1500);
+emit_16(1565);
+emit_16(1501);
+emit_16(1565);
+emit_16(1500);
+emit_16(1565);
+emit_16(1501);
+emit_16(1566);
+emit_16(1502);
+emit_16(1566);
+emit_16(1501);
+emit_16(1566);
+emit_16(1502);
+emit_16(1567);
+emit_16(1503);
+emit_16(1567);
+emit_16(1502);
+emit_16(1567);
+emit_16(1503);
+emit_16(1568);
+emit_16(1504);
+emit_16(1568);
+emit_16(1503);
+emit_16(1568);
+emit_16(1504);
+emit_16(1569);
+emit_16(1505);
+emit_16(1569);
+emit_16(1504);
+emit_16(1569);
+emit_16(1505);
+emit_16(1570);
+emit_16(1506);
+emit_16(1570);
+emit_16(1505);
+emit_16(1570);
+emit_16(1506);
+emit_16(1571);
+emit_16(1507);
+emit_16(1571);
+emit_16(1506);
+emit_16(1571);
+emit_16(1507);
+emit_16(1572);
+emit_16(1508);
+emit_16(1572);
+emit_16(1507);
+emit_16(1572);
+emit_16(1508);
+emit_16(1573);
+emit_16(1509);
+emit_16(1573);
+emit_16(1508);
+emit_16(1573);
+emit_16(1509);
+emit_16(1574);
+emit_16(1510);
+emit_16(1574);
+emit_16(1509);
+emit_16(1574);
+emit_16(1510);
+emit_16(1575);
+emit_16(1511);
+emit_16(1575);
+emit_16(1510);
+emit_16(1575);
+emit_16(1511);
+emit_16(1576);
+emit_16(1512);
+emit_16(1576);
+emit_16(1511);
+emit_16(1576);
+emit_16(1512);
+emit_16(1577);
+emit_16(1513);
+emit_16(1577);
+emit_16(1512);
+emit_16(1577);
+emit_16(1513);
+emit_16(1578);
+emit_16(1514);
+emit_16(1578);
+emit_16(1513);
+emit_16(1578);
+emit_16(1514);
+emit_16(1579);
+emit_16(1515);
+emit_16(1579);
+emit_16(1514);
+emit_16(1579);
+emit_16(1515);
+emit_16(1580);
+emit_16(1516);
+emit_16(1580);
+emit_16(1515);
+emit_16(1580);
+emit_16(1516);
+emit_16(1581);
+emit_16(1517);
+emit_16(1581);
+emit_16(1516);
+emit_16(1581);
+emit_16(1517);
+emit_16(1582);
+emit_16(1518);
+emit_16(1582);
+emit_16(1517);
+emit_16(1582);
+emit_16(1518);
+emit_16(1583);
+emit_16(1519);
+emit_16(1583);
+emit_16(1518);
+emit_16(1583);
+emit_16(1519);
+emit_16(1584);
+emit_16(1520);
+emit_16(1584);
+emit_16(1519);
+emit_16(1584);
+emit_16(1520);
+emit_16(1585);
+emit_16(1521);
+emit_16(1585);
+emit_16(1520);
+emit_16(1585);
+emit_16(1521);
+emit_16(1586);
+emit_16(1522);
+emit_16(1586);
+emit_16(1521);
+emit_16(1586);
+emit_16(1522);
+emit_16(1587);
+emit_16(1523);
+emit_16(1587);
+emit_16(1522);
+emit_16(1587);
+emit_16(1523);
+emit_16(1588);
+emit_16(1524);
+emit_16(1588);
+emit_16(1523);
+emit_16(1588);
+emit_16(1524);
+emit_16(1589);
+emit_16(1525);
+emit_16(1589);
+emit_16(1524);
+emit_16(1589);
+emit_16(1525);
+emit_16(1590);
+emit_16(1526);
+emit_16(1590);
+emit_16(1525);
+emit_16(1590);
+emit_16(1526);
+emit_16(1591);
+emit_16(1527);
+emit_16(1591);
+emit_16(1526);
+emit_16(1591);
+emit_16(1527);
+emit_16(1592);
+emit_16(1528);
+emit_16(1592);
+emit_16(1527);
+emit_16(1592);
+emit_16(1528);
+emit_16(1593);
+emit_16(1529);
+emit_16(1593);
+emit_16(1528);
+emit_16(1593);
+emit_16(1529);
+emit_16(1594);
+emit_16(1530);
+emit_16(1594);
+emit_16(1529);
+emit_16(1594);
+emit_16(1530);
+emit_16(1595);
+emit_16(1531);
+emit_16(1595);
+emit_16(1530);
+emit_16(1595);
+emit_16(1531);
+emit_16(1596);
+emit_16(1532);
+emit_16(1596);
+emit_16(1531);
+emit_16(1596);
+emit_16(1532);
+emit_16(1597);
+emit_16(1533);
+emit_16(1597);
+emit_16(1532);
+emit_16(1597);
+emit_16(1533);
+emit_16(1598);
+emit_16(1534);
+emit_16(1598);
+emit_16(1533);
+emit_16(1598);
+emit_16(1534);
+emit_16(1599);
+emit_16(1535);
+emit_16(1599);
+emit_16(1534);
+emit_16(1600);
+emit_16(1536);
+emit_16(1601);
+emit_16(1537);
+emit_16(1601);
+emit_16(1536);
+emit_16(1601);
+emit_16(1537);
+emit_16(1602);
+emit_16(1538);
+emit_16(1602);
+emit_16(1537);
+emit_16(1602);
+emit_16(1538);
+emit_16(1603);
+emit_16(1539);
+emit_16(1603);
+emit_16(1538);
+emit_16(1603);
+emit_16(1539);
+emit_16(1604);
+emit_16(1540);
+emit_16(1604);
+emit_16(1539);
+emit_16(1604);
+emit_16(1540);
+emit_16(1605);
+emit_16(1541);
+emit_16(1605);
+emit_16(1540);
+emit_16(1605);
+emit_16(1541);
+emit_16(1606);
+emit_16(1542);
+emit_16(1606);
+emit_16(1541);
+emit_16(1606);
+emit_16(1542);
+emit_16(1607);
+emit_16(1543);
+emit_16(1607);
+emit_16(1542);
+emit_16(1607);
+emit_16(1543);
+emit_16(1608);
+emit_16(1544);
+emit_16(1608);
+emit_16(1543);
+emit_16(1608);
+emit_16(1544);
+emit_16(1609);
+emit_16(1545);
+emit_16(1609);
+emit_16(1544);
+emit_16(1609);
+emit_16(1545);
+emit_16(1610);
+emit_16(1546);
+emit_16(1610);
+emit_16(1545);
+emit_16(1610);
+emit_16(1546);
+emit_16(1611);
+emit_16(1547);
+emit_16(1611);
+emit_16(1546);
+emit_16(1611);
+emit_16(1547);
+emit_16(1612);
+emit_16(1548);
+emit_16(1612);
+emit_16(1547);
+emit_16(1612);
+emit_16(1548);
+emit_16(1613);
+emit_16(1549);
+emit_16(1613);
+emit_16(1548);
+emit_16(1613);
+emit_16(1549);
+emit_16(1614);
+emit_16(1550);
+emit_16(1614);
+emit_16(1549);
+emit_16(1614);
+emit_16(1550);
+emit_16(1615);
+emit_16(1551);
+emit_16(1615);
+emit_16(1550);
+emit_16(1615);
+emit_16(1551);
+emit_16(1616);
+emit_16(1552);
+emit_16(1616);
+emit_16(1551);
+emit_16(1616);
+emit_16(1552);
+emit_16(1617);
+emit_16(1553);
+emit_16(1617);
+emit_16(1552);
+emit_16(1617);
+emit_16(1553);
+emit_16(1618);
+emit_16(1554);
+emit_16(1618);
+emit_16(1553);
+emit_16(1618);
+emit_16(1554);
+emit_16(1619);
+emit_16(1555);
+emit_16(1619);
+emit_16(1554);
+emit_16(1619);
+emit_16(1555);
+emit_16(1620);
+emit_16(1556);
+emit_16(1620);
+emit_16(1555);
+emit_16(1620);
+emit_16(1556);
+emit_16(1621);
+emit_16(1557);
+emit_16(1621);
+emit_16(1556);
+emit_16(1621);
+emit_16(1557);
+emit_16(1622);
+emit_16(1558);
+emit_16(1622);
+emit_16(1557);
+emit_16(1622);
+emit_16(1558);
+emit_16(1623);
+emit_16(1559);
+emit_16(1623);
+emit_16(1558);
+emit_16(1623);
+emit_16(1559);
+emit_16(1624);
+emit_16(1560);
+emit_16(1624);
+emit_16(1559);
+emit_16(1624);
+emit_16(1560);
+emit_16(1625);
+emit_16(1561);
+emit_16(1625);
+emit_16(1560);
+emit_16(1625);
+emit_16(1561);
+emit_16(1626);
+emit_16(1562);
+emit_16(1626);
+emit_16(1561);
+emit_16(1626);
+emit_16(1562);
+emit_16(1627);
+emit_16(1563);
+emit_16(1627);
+emit_16(1562);
+emit_16(1627);
+emit_16(1563);
+emit_16(1628);
+emit_16(1564);
+emit_16(1628);
+emit_16(1563);
+emit_16(1628);
+emit_16(1564);
+emit_16(1629);
+emit_16(1565);
+emit_16(1629);
+emit_16(1564);
+emit_16(1629);
+emit_16(1565);
+emit_16(1630);
+emit_16(1566);
+emit_16(1630);
+emit_16(1565);
+emit_16(1630);
+emit_16(1566);
+emit_16(1631);
+emit_16(1567);
+emit_16(1631);
+emit_16(1566);
+emit_16(1631);
+emit_16(1567);
+emit_16(1632);
+emit_16(1568);
+emit_16(1632);
+emit_16(1567);
+emit_16(1632);
+emit_16(1568);
+emit_16(1633);
+emit_16(1569);
+emit_16(1633);
+emit_16(1568);
+emit_16(1633);
+emit_16(1569);
+emit_16(1634);
+emit_16(1570);
+emit_16(1634);
+emit_16(1569);
+emit_16(1634);
+emit_16(1570);
+emit_16(1635);
+emit_16(1571);
+emit_16(1635);
+emit_16(1570);
+emit_16(1635);
+emit_16(1571);
+emit_16(1636);
+emit_16(1572);
+emit_16(1636);
+emit_16(1571);
+emit_16(1636);
+emit_16(1572);
+emit_16(1637);
+emit_16(1573);
+emit_16(1637);
+emit_16(1572);
+emit_16(1637);
+emit_16(1573);
+emit_16(1638);
+emit_16(1574);
+emit_16(1638);
+emit_16(1573);
+emit_16(1638);
+emit_16(1574);
+emit_16(1639);
+emit_16(1575);
+emit_16(1639);
+emit_16(1574);
+emit_16(1639);
+emit_16(1575);
+emit_16(1640);
+emit_16(1576);
+emit_16(1640);
+emit_16(1575);
+emit_16(1640);
+emit_16(1576);
+emit_16(1641);
+emit_16(1577);
+emit_16(1641);
+emit_16(1576);
+emit_16(1641);
+emit_16(1577);
+emit_16(1642);
+emit_16(1578);
+emit_16(1642);
+emit_16(1577);
+emit_16(1642);
+emit_16(1578);
+emit_16(1643);
+emit_16(1579);
+emit_16(1643);
+emit_16(1578);
+emit_16(1643);
+emit_16(1579);
+emit_16(1644);
+emit_16(1580);
+emit_16(1644);
+emit_16(1579);
+emit_16(1644);
+emit_16(1580);
+emit_16(1645);
+emit_16(1581);
+emit_16(1645);
+emit_16(1580);
+emit_16(1645);
+emit_16(1581);
+emit_16(1646);
+emit_16(1582);
+emit_16(1646);
+emit_16(1581);
+emit_16(1646);
+emit_16(1582);
+emit_16(1647);
+emit_16(1583);
+emit_16(1647);
+emit_16(1582);
+emit_16(1647);
+emit_16(1583);
+emit_16(1648);
+emit_16(1584);
+emit_16(1648);
+emit_16(1583);
+emit_16(1648);
+emit_16(1584);
+emit_16(1649);
+emit_16(1585);
+emit_16(1649);
+emit_16(1584);
+emit_16(1649);
+emit_16(1585);
+emit_16(1650);
+emit_16(1586);
+emit_16(1650);
+emit_16(1585);
+emit_16(1650);
+emit_16(1586);
+emit_16(1651);
+emit_16(1587);
+emit_16(1651);
+emit_16(1586);
+emit_16(1651);
+emit_16(1587);
+emit_16(1652);
+emit_16(1588);
+emit_16(1652);
+emit_16(1587);
+emit_16(1652);
+emit_16(1588);
+emit_16(1653);
+emit_16(1589);
+emit_16(1653);
+emit_16(1588);
+emit_16(1653);
+emit_16(1589);
+emit_16(1654);
+emit_16(1590);
+emit_16(1654);
+emit_16(1589);
+emit_16(1654);
+emit_16(1590);
+emit_16(1655);
+emit_16(1591);
+emit_16(1655);
+emit_16(1590);
+emit_16(1655);
+emit_16(1591);
+emit_16(1656);
+emit_16(1592);
+emit_16(1656);
+emit_16(1591);
+emit_16(1656);
+emit_16(1592);
+emit_16(1657);
+emit_16(1593);
+emit_16(1657);
+emit_16(1592);
+emit_16(1657);
+emit_16(1593);
+emit_16(1658);
+emit_16(1594);
+emit_16(1658);
+emit_16(1593);
+emit_16(1658);
+emit_16(1594);
+emit_16(1659);
+emit_16(1595);
+emit_16(1659);
+emit_16(1594);
+emit_16(1659);
+emit_16(1595);
+emit_16(1660);
+emit_16(1596);
+emit_16(1660);
+emit_16(1595);
+emit_16(1660);
+emit_16(1596);
+emit_16(1661);
+emit_16(1597);
+emit_16(1661);
+emit_16(1596);
+emit_16(1661);
+emit_16(1597);
+emit_16(1662);
+emit_16(1598);
+emit_16(1662);
+emit_16(1597);
+emit_16(1662);
+emit_16(1598);
+emit_16(1663);
+emit_16(1599);
+emit_16(1663);
+emit_16(1598);
+emit_16(1664);
+emit_16(1600);
+emit_16(1665);
+emit_16(1601);
+emit_16(1665);
+emit_16(1600);
+emit_16(1665);
+emit_16(1601);
+emit_16(1666);
+emit_16(1602);
+emit_16(1666);
+emit_16(1601);
+emit_16(1666);
+emit_16(1602);
+emit_16(1667);
+emit_16(1603);
+emit_16(1667);
+emit_16(1602);
+emit_16(1667);
+emit_16(1603);
+emit_16(1668);
+emit_16(1604);
+emit_16(1668);
+emit_16(1603);
+emit_16(1668);
+emit_16(1604);
+emit_16(1669);
+emit_16(1605);
+emit_16(1669);
+emit_16(1604);
+emit_16(1669);
+emit_16(1605);
+emit_16(1670);
+emit_16(1606);
+emit_16(1670);
+emit_16(1605);
+emit_16(1670);
+emit_16(1606);
+emit_16(1671);
+emit_16(1607);
+emit_16(1671);
+emit_16(1606);
+emit_16(1671);
+emit_16(1607);
+emit_16(1672);
+emit_16(1608);
+emit_16(1672);
+emit_16(1607);
+emit_16(1672);
+emit_16(1608);
+emit_16(1673);
+emit_16(1609);
+emit_16(1673);
+emit_16(1608);
+emit_16(1673);
+emit_16(1609);
+emit_16(1674);
+emit_16(1610);
+emit_16(1674);
+emit_16(1609);
+emit_16(1674);
+emit_16(1610);
+emit_16(1675);
+emit_16(1611);
+emit_16(1675);
+emit_16(1610);
+emit_16(1675);
+emit_16(1611);
+emit_16(1676);
+emit_16(1612);
+emit_16(1676);
+emit_16(1611);
+emit_16(1676);
+emit_16(1612);
+emit_16(1677);
+emit_16(1613);
+emit_16(1677);
+emit_16(1612);
+emit_16(1677);
+emit_16(1613);
+emit_16(1678);
+emit_16(1614);
+emit_16(1678);
+emit_16(1613);
+emit_16(1678);
+emit_16(1614);
+emit_16(1679);
+emit_16(1615);
+emit_16(1679);
+emit_16(1614);
+emit_16(1679);
+emit_16(1615);
+emit_16(1680);
+emit_16(1616);
+emit_16(1680);
+emit_16(1615);
+emit_16(1680);
+emit_16(1616);
+emit_16(1681);
+emit_16(1617);
+emit_16(1681);
+emit_16(1616);
+emit_16(1681);
+emit_16(1617);
+emit_16(1682);
+emit_16(1618);
+emit_16(1682);
+emit_16(1617);
+emit_16(1682);
+emit_16(1618);
+emit_16(1683);
+emit_16(1619);
+emit_16(1683);
+emit_16(1618);
+emit_16(1683);
+emit_16(1619);
+emit_16(1684);
+emit_16(1620);
+emit_16(1684);
+emit_16(1619);
+emit_16(1684);
+emit_16(1620);
+emit_16(1685);
+emit_16(1621);
+emit_16(1685);
+emit_16(1620);
+emit_16(1685);
+emit_16(1621);
+emit_16(1686);
+emit_16(1622);
+emit_16(1686);
+emit_16(1621);
+emit_16(1686);
+emit_16(1622);
+emit_16(1687);
+emit_16(1623);
+emit_16(1687);
+emit_16(1622);
+emit_16(1687);
+emit_16(1623);
+emit_16(1688);
+emit_16(1624);
+emit_16(1688);
+emit_16(1623);
+emit_16(1688);
+emit_16(1624);
+emit_16(1689);
+emit_16(1625);
+emit_16(1689);
+emit_16(1624);
+emit_16(1689);
+emit_16(1625);
+emit_16(1690);
+emit_16(1626);
+emit_16(1690);
+emit_16(1625);
+emit_16(1690);
+emit_16(1626);
+emit_16(1691);
+emit_16(1627);
+emit_16(1691);
+emit_16(1626);
+emit_16(1691);
+emit_16(1627);
+emit_16(1692);
+emit_16(1628);
+emit_16(1692);
+emit_16(1627);
+emit_16(1692);
+emit_16(1628);
+emit_16(1693);
+emit_16(1629);
+emit_16(1693);
+emit_16(1628);
+emit_16(1693);
+emit_16(1629);
+emit_16(1694);
+emit_16(1630);
+emit_16(1694);
+emit_16(1629);
+emit_16(1694);
+emit_16(1630);
+emit_16(1695);
+emit_16(1631);
+emit_16(1695);
+emit_16(1630);
+emit_16(1695);
+emit_16(1631);
+emit_16(1696);
+emit_16(1632);
+emit_16(1696);
+emit_16(1631);
+emit_16(1696);
+emit_16(1632);
+emit_16(1697);
+emit_16(1633);
+emit_16(1697);
+emit_16(1632);
+emit_16(1697);
+emit_16(1633);
+emit_16(1698);
+emit_16(1634);
+emit_16(1698);
+emit_16(1633);
+emit_16(1698);
+emit_16(1634);
+emit_16(1699);
+emit_16(1635);
+emit_16(1699);
+emit_16(1634);
+emit_16(1699);
+emit_16(1635);
+emit_16(1700);
+emit_16(1636);
+emit_16(1700);
+emit_16(1635);
+emit_16(1700);
+emit_16(1636);
+emit_16(1701);
+emit_16(1637);
+emit_16(1701);
+emit_16(1636);
+emit_16(1701);
+emit_16(1637);
+emit_16(1702);
+emit_16(1638);
+emit_16(1702);
+emit_16(1637);
+emit_16(1702);
+emit_16(1638);
+emit_16(1703);
+emit_16(1639);
+emit_16(1703);
+emit_16(1638);
+emit_16(1703);
+emit_16(1639);
+emit_16(1704);
+emit_16(1640);
+emit_16(1704);
+emit_16(1639);
+emit_16(1704);
+emit_16(1640);
+emit_16(1705);
+emit_16(1641);
+emit_16(1705);
+emit_16(1640);
+emit_16(1705);
+emit_16(1641);
+emit_16(1706);
+emit_16(1642);
+emit_16(1706);
+emit_16(1641);
+emit_16(1706);
+emit_16(1642);
+emit_16(1707);
+emit_16(1643);
+emit_16(1707);
+emit_16(1642);
+emit_16(1707);
+emit_16(1643);
+emit_16(1708);
+emit_16(1644);
+emit_16(1708);
+emit_16(1643);
+emit_16(1708);
+emit_16(1644);
+emit_16(1709);
+emit_16(1645);
+emit_16(1709);
+emit_16(1644);
+emit_16(1709);
+emit_16(1645);
+emit_16(1710);
+emit_16(1646);
+emit_16(1710);
+emit_16(1645);
+emit_16(1710);
+emit_16(1646);
+emit_16(1711);
+emit_16(1647);
+emit_16(1711);
+emit_16(1646);
+emit_16(1711);
+emit_16(1647);
+emit_16(1712);
+emit_16(1648);
+emit_16(1712);
+emit_16(1647);
+emit_16(1712);
+emit_16(1648);
+emit_16(1713);
+emit_16(1649);
+emit_16(1713);
+emit_16(1648);
+emit_16(1713);
+emit_16(1649);
+emit_16(1714);
+emit_16(1650);
+emit_16(1714);
+emit_16(1649);
+emit_16(1714);
+emit_16(1650);
+emit_16(1715);
+emit_16(1651);
+emit_16(1715);
+emit_16(1650);
+emit_16(1715);
+emit_16(1651);
+emit_16(1716);
+emit_16(1652);
+emit_16(1716);
+emit_16(1651);
+emit_16(1716);
+emit_16(1652);
+emit_16(1717);
+emit_16(1653);
+emit_16(1717);
+emit_16(1652);
+emit_16(1717);
+emit_16(1653);
+emit_16(1718);
+emit_16(1654);
+emit_16(1718);
+emit_16(1653);
+emit_16(1718);
+emit_16(1654);
+emit_16(1719);
+emit_16(1655);
+emit_16(1719);
+emit_16(1654);
+emit_16(1719);
+emit_16(1655);
+emit_16(1720);
+emit_16(1656);
+emit_16(1720);
+emit_16(1655);
+emit_16(1720);
+emit_16(1656);
+emit_16(1721);
+emit_16(1657);
+emit_16(1721);
+emit_16(1656);
+emit_16(1721);
+emit_16(1657);
+emit_16(1722);
+emit_16(1658);
+emit_16(1722);
+emit_16(1657);
+emit_16(1722);
+emit_16(1658);
+emit_16(1723);
+emit_16(1659);
+emit_16(1723);
+emit_16(1658);
+emit_16(1723);
+emit_16(1659);
+emit_16(1724);
+emit_16(1660);
+emit_16(1724);
+emit_16(1659);
+emit_16(1724);
+emit_16(1660);
+emit_16(1725);
+emit_16(1661);
+emit_16(1725);
+emit_16(1660);
+emit_16(1725);
+emit_16(1661);
+emit_16(1726);
+emit_16(1662);
+emit_16(1726);
+emit_16(1661);
+emit_16(1726);
+emit_16(1662);
+emit_16(1727);
+emit_16(1663);
+emit_16(1727);
+emit_16(1662);
+emit_16(1728);
+emit_16(1664);
+emit_16(1729);
+emit_16(1665);
+emit_16(1729);
+emit_16(1664);
+emit_16(1729);
+emit_16(1665);
+emit_16(1730);
+emit_16(1666);
+emit_16(1730);
+emit_16(1665);
+emit_16(1730);
+emit_16(1666);
+emit_16(1731);
+emit_16(1667);
+emit_16(1731);
+emit_16(1666);
+emit_16(1731);
+emit_16(1667);
+emit_16(1732);
+emit_16(1668);
+emit_16(1732);
+emit_16(1667);
+emit_16(1732);
+emit_16(1668);
+emit_16(1733);
+emit_16(1669);
+emit_16(1733);
+emit_16(1668);
+emit_16(1733);
+emit_16(1669);
+emit_16(1734);
+emit_16(1670);
+emit_16(1734);
+emit_16(1669);
+emit_16(1734);
+emit_16(1670);
+emit_16(1735);
+emit_16(1671);
+emit_16(1735);
+emit_16(1670);
+emit_16(1735);
+emit_16(1671);
+emit_16(1736);
+emit_16(1672);
+emit_16(1736);
+emit_16(1671);
+emit_16(1736);
+emit_16(1672);
+emit_16(1737);
+emit_16(1673);
+emit_16(1737);
+emit_16(1672);
+emit_16(1737);
+emit_16(1673);
+emit_16(1738);
+emit_16(1674);
+emit_16(1738);
+emit_16(1673);
+emit_16(1738);
+emit_16(1674);
+emit_16(1739);
+emit_16(1675);
+emit_16(1739);
+emit_16(1674);
+emit_16(1739);
+emit_16(1675);
+emit_16(1740);
+emit_16(1676);
+emit_16(1740);
+emit_16(1675);
+emit_16(1740);
+emit_16(1676);
+emit_16(1741);
+emit_16(1677);
+emit_16(1741);
+emit_16(1676);
+emit_16(1741);
+emit_16(1677);
+emit_16(1742);
+emit_16(1678);
+emit_16(1742);
+emit_16(1677);
+emit_16(1742);
+emit_16(1678);
+emit_16(1743);
+emit_16(1679);
+emit_16(1743);
+emit_16(1678);
+emit_16(1743);
+emit_16(1679);
+emit_16(1744);
+emit_16(1680);
+emit_16(1744);
+emit_16(1679);
+emit_16(1744);
+emit_16(1680);
+emit_16(1745);
+emit_16(1681);
+emit_16(1745);
+emit_16(1680);
+emit_16(1745);
+emit_16(1681);
+emit_16(1746);
+emit_16(1682);
+emit_16(1746);
+emit_16(1681);
+emit_16(1746);
+emit_16(1682);
+emit_16(1747);
+emit_16(1683);
+emit_16(1747);
+emit_16(1682);
+emit_16(1747);
+emit_16(1683);
+emit_16(1748);
+emit_16(1684);
+emit_16(1748);
+emit_16(1683);
+emit_16(1748);
+emit_16(1684);
+emit_16(1749);
+emit_16(1685);
+emit_16(1749);
+emit_16(1684);
+emit_16(1749);
+emit_16(1685);
+emit_16(1750);
+emit_16(1686);
+emit_16(1750);
+emit_16(1685);
+emit_16(1750);
+emit_16(1686);
+emit_16(1751);
+emit_16(1687);
+emit_16(1751);
+emit_16(1686);
+emit_16(1751);
+emit_16(1687);
+emit_16(1752);
+emit_16(1688);
+emit_16(1752);
+emit_16(1687);
+emit_16(1752);
+emit_16(1688);
+emit_16(1753);
+emit_16(1689);
+emit_16(1753);
+emit_16(1688);
+emit_16(1753);
+emit_16(1689);
+emit_16(1754);
+emit_16(1690);
+emit_16(1754);
+emit_16(1689);
+emit_16(1754);
+emit_16(1690);
+emit_16(1755);
+emit_16(1691);
+emit_16(1755);
+emit_16(1690);
+emit_16(1755);
+emit_16(1691);
+emit_16(1756);
+emit_16(1692);
+emit_16(1756);
+emit_16(1691);
+emit_16(1756);
+emit_16(1692);
+emit_16(1757);
+emit_16(1693);
+emit_16(1757);
+emit_16(1692);
+emit_16(1757);
+emit_16(1693);
+emit_16(1758);
+emit_16(1694);
+emit_16(1758);
+emit_16(1693);
+emit_16(1758);
+emit_16(1694);
+emit_16(1759);
+emit_16(1695);
+emit_16(1759);
+emit_16(1694);
+emit_16(1759);
+emit_16(1695);
+emit_16(1760);
+emit_16(1696);
+emit_16(1760);
+emit_16(1695);
+emit_16(1760);
+emit_16(1696);
+emit_16(1761);
+emit_16(1697);
+emit_16(1761);
+emit_16(1696);
+emit_16(1761);
+emit_16(1697);
+emit_16(1762);
+emit_16(1698);
+emit_16(1762);
+emit_16(1697);
+emit_16(1762);
+emit_16(1698);
+emit_16(1763);
+emit_16(1699);
+emit_16(1763);
+emit_16(1698);
+emit_16(1763);
+emit_16(1699);
+emit_16(1764);
+emit_16(1700);
+emit_16(1764);
+emit_16(1699);
+emit_16(1764);
+emit_16(1700);
+emit_16(1765);
+emit_16(1701);
+emit_16(1765);
+emit_16(1700);
+emit_16(1765);
+emit_16(1701);
+emit_16(1766);
+emit_16(1702);
+emit_16(1766);
+emit_16(1701);
+emit_16(1766);
+emit_16(1702);
+emit_16(1767);
+emit_16(1703);
+emit_16(1767);
+emit_16(1702);
+emit_16(1767);
+emit_16(1703);
+emit_16(1768);
+emit_16(1704);
+emit_16(1768);
+emit_16(1703);
+emit_16(1768);
+emit_16(1704);
+emit_16(1769);
+emit_16(1705);
+emit_16(1769);
+emit_16(1704);
+emit_16(1769);
+emit_16(1705);
+emit_16(1770);
+emit_16(1706);
+emit_16(1770);
+emit_16(1705);
+emit_16(1770);
+emit_16(1706);
+emit_16(1771);
+emit_16(1707);
+emit_16(1771);
+emit_16(1706);
+emit_16(1771);
+emit_16(1707);
+emit_16(1772);
+emit_16(1708);
+emit_16(1772);
+emit_16(1707);
+emit_16(1772);
+emit_16(1708);
+emit_16(1773);
+emit_16(1709);
+emit_16(1773);
+emit_16(1708);
+emit_16(1773);
+emit_16(1709);
+emit_16(1774);
+emit_16(1710);
+emit_16(1774);
+emit_16(1709);
+emit_16(1774);
+emit_16(1710);
+emit_16(1775);
+emit_16(1711);
+emit_16(1775);
+emit_16(1710);
+emit_16(1775);
+emit_16(1711);
+emit_16(1776);
+emit_16(1712);
+emit_16(1776);
+emit_16(1711);
+emit_16(1776);
+emit_16(1712);
+emit_16(1777);
+emit_16(1713);
+emit_16(1777);
+emit_16(1712);
+emit_16(1777);
+emit_16(1713);
+emit_16(1778);
+emit_16(1714);
+emit_16(1778);
+emit_16(1713);
+emit_16(1778);
+emit_16(1714);
+emit_16(1779);
+emit_16(1715);
+emit_16(1779);
+emit_16(1714);
+emit_16(1779);
+emit_16(1715);
+emit_16(1780);
+emit_16(1716);
+emit_16(1780);
+emit_16(1715);
+emit_16(1780);
+emit_16(1716);
+emit_16(1781);
+emit_16(1717);
+emit_16(1781);
+emit_16(1716);
+emit_16(1781);
+emit_16(1717);
+emit_16(1782);
+emit_16(1718);
+emit_16(1782);
+emit_16(1717);
+emit_16(1782);
+emit_16(1718);
+emit_16(1783);
+emit_16(1719);
+emit_16(1783);
+emit_16(1718);
+emit_16(1783);
+emit_16(1719);
+emit_16(1784);
+emit_16(1720);
+emit_16(1784);
+emit_16(1719);
+emit_16(1784);
+emit_16(1720);
+emit_16(1785);
+emit_16(1721);
+emit_16(1785);
+emit_16(1720);
+emit_16(1785);
+emit_16(1721);
+emit_16(1786);
+emit_16(1722);
+emit_16(1786);
+emit_16(1721);
+emit_16(1786);
+emit_16(1722);
+emit_16(1787);
+emit_16(1723);
+emit_16(1787);
+emit_16(1722);
+emit_16(1787);
+emit_16(1723);
+emit_16(1788);
+emit_16(1724);
+emit_16(1788);
+emit_16(1723);
+emit_16(1788);
+emit_16(1724);
+emit_16(1789);
+emit_16(1725);
+emit_16(1789);
+emit_16(1724);
+emit_16(1789);
+emit_16(1725);
+emit_16(1790);
+emit_16(1726);
+emit_16(1790);
+emit_16(1725);
+emit_16(1790);
+emit_16(1726);
+emit_16(1791);
+emit_16(1727);
+emit_16(1791);
+emit_16(1726);
+emit_16(1792);
+emit_16(1728);
+emit_16(1793);
+emit_16(1729);
+emit_16(1793);
+emit_16(1728);
+emit_16(1793);
+emit_16(1729);
+emit_16(1794);
+emit_16(1730);
+emit_16(1794);
+emit_16(1729);
+emit_16(1794);
+emit_16(1730);
+emit_16(1795);
+emit_16(1731);
+emit_16(1795);
+emit_16(1730);
+emit_16(1795);
+emit_16(1731);
+emit_16(1796);
+emit_16(1732);
+emit_16(1796);
+emit_16(1731);
+emit_16(1796);
+emit_16(1732);
+emit_16(1797);
+emit_16(1733);
+emit_16(1797);
+emit_16(1732);
+emit_16(1797);
+emit_16(1733);
+emit_16(1798);
+emit_16(1734);
+emit_16(1798);
+emit_16(1733);
+emit_16(1798);
+emit_16(1734);
+emit_16(1799);
+emit_16(1735);
+emit_16(1799);
+emit_16(1734);
+emit_16(1799);
+emit_16(1735);
+emit_16(1800);
+emit_16(1736);
+emit_16(1800);
+emit_16(1735);
+emit_16(1800);
+emit_16(1736);
+emit_16(1801);
+emit_16(1737);
+emit_16(1801);
+emit_16(1736);
+emit_16(1801);
+emit_16(1737);
+emit_16(1802);
+emit_16(1738);
+emit_16(1802);
+emit_16(1737);
+emit_16(1802);
+emit_16(1738);
+emit_16(1803);
+emit_16(1739);
+emit_16(1803);
+emit_16(1738);
+emit_16(1803);
+emit_16(1739);
+emit_16(1804);
+emit_16(1740);
+emit_16(1804);
+emit_16(1739);
+emit_16(1804);
+emit_16(1740);
+emit_16(1805);
+emit_16(1741);
+emit_16(1805);
+emit_16(1740);
+emit_16(1805);
+emit_16(1741);
+emit_16(1806);
+emit_16(1742);
+emit_16(1806);
+emit_16(1741);
+emit_16(1806);
+emit_16(1742);
+emit_16(1807);
+emit_16(1743);
+emit_16(1807);
+emit_16(1742);
+emit_16(1807);
+emit_16(1743);
+emit_16(1808);
+emit_16(1744);
+emit_16(1808);
+emit_16(1743);
+emit_16(1808);
+emit_16(1744);
+emit_16(1809);
+emit_16(1745);
+emit_16(1809);
+emit_16(1744);
+emit_16(1809);
+emit_16(1745);
+emit_16(1810);
+emit_16(1746);
+emit_16(1810);
+emit_16(1745);
+emit_16(1810);
+emit_16(1746);
+emit_16(1811);
+emit_16(1747);
+emit_16(1811);
+emit_16(1746);
+emit_16(1811);
+emit_16(1747);
+emit_16(1812);
+emit_16(1748);
+emit_16(1812);
+emit_16(1747);
+emit_16(1812);
+emit_16(1748);
+emit_16(1813);
+emit_16(1749);
+emit_16(1813);
+emit_16(1748);
+emit_16(1813);
+emit_16(1749);
+emit_16(1814);
+emit_16(1750);
+emit_16(1814);
+emit_16(1749);
+emit_16(1814);
+emit_16(1750);
+emit_16(1815);
+emit_16(1751);
+emit_16(1815);
+emit_16(1750);
+emit_16(1815);
+emit_16(1751);
+emit_16(1816);
+emit_16(1752);
+emit_16(1816);
+emit_16(1751);
+emit_16(1816);
+emit_16(1752);
+emit_16(1817);
+emit_16(1753);
+emit_16(1817);
+emit_16(1752);
+emit_16(1817);
+emit_16(1753);
+emit_16(1818);
+emit_16(1754);
+emit_16(1818);
+emit_16(1753);
+emit_16(1818);
+emit_16(1754);
+emit_16(1819);
+emit_16(1755);
+emit_16(1819);
+emit_16(1754);
+emit_16(1819);
+emit_16(1755);
+emit_16(1820);
+emit_16(1756);
+emit_16(1820);
+emit_16(1755);
+emit_16(1820);
+emit_16(1756);
+emit_16(1821);
+emit_16(1757);
+emit_16(1821);
+emit_16(1756);
+emit_16(1821);
+emit_16(1757);
+emit_16(1822);
+emit_16(1758);
+emit_16(1822);
+emit_16(1757);
+emit_16(1822);
+emit_16(1758);
+emit_16(1823);
+emit_16(1759);
+emit_16(1823);
+emit_16(1758);
+emit_16(1823);
+emit_16(1759);
+emit_16(1824);
+emit_16(1760);
+emit_16(1824);
+emit_16(1759);
+emit_16(1824);
+emit_16(1760);
+emit_16(1825);
+emit_16(1761);
+emit_16(1825);
+emit_16(1760);
+emit_16(1825);
+emit_16(1761);
+emit_16(1826);
+emit_16(1762);
+emit_16(1826);
+emit_16(1761);
+emit_16(1826);
+emit_16(1762);
+emit_16(1827);
+emit_16(1763);
+emit_16(1827);
+emit_16(1762);
+emit_16(1827);
+emit_16(1763);
+emit_16(1828);
+emit_16(1764);
+emit_16(1828);
+emit_16(1763);
+emit_16(1828);
+emit_16(1764);
+emit_16(1829);
+emit_16(1765);
+emit_16(1829);
+emit_16(1764);
+emit_16(1829);
+emit_16(1765);
+emit_16(1830);
+emit_16(1766);
+emit_16(1830);
+emit_16(1765);
+emit_16(1830);
+emit_16(1766);
+emit_16(1831);
+emit_16(1767);
+emit_16(1831);
+emit_16(1766);
+emit_16(1831);
+emit_16(1767);
+emit_16(1832);
+emit_16(1768);
+emit_16(1832);
+emit_16(1767);
+emit_16(1832);
+emit_16(1768);
+emit_16(1833);
+emit_16(1769);
+emit_16(1833);
+emit_16(1768);
+emit_16(1833);
+emit_16(1769);
+emit_16(1834);
+emit_16(1770);
+emit_16(1834);
+emit_16(1769);
+emit_16(1834);
+emit_16(1770);
+emit_16(1835);
+emit_16(1771);
+emit_16(1835);
+emit_16(1770);
+emit_16(1835);
+emit_16(1771);
+emit_16(1836);
+emit_16(1772);
+emit_16(1836);
+emit_16(1771);
+emit_16(1836);
+emit_16(1772);
+emit_16(1837);
+emit_16(1773);
+emit_16(1837);
+emit_16(1772);
+emit_16(1837);
+emit_16(1773);
+emit_16(1838);
+emit_16(1774);
+emit_16(1838);
+emit_16(1773);
+emit_16(1838);
+emit_16(1774);
+emit_16(1839);
+emit_16(1775);
+emit_16(1839);
+emit_16(1774);
+emit_16(1839);
+emit_16(1775);
+emit_16(1840);
+emit_16(1776);
+emit_16(1840);
+emit_16(1775);
+emit_16(1840);
+emit_16(1776);
+emit_16(1841);
+emit_16(1777);
+emit_16(1841);
+emit_16(1776);
+emit_16(1841);
+emit_16(1777);
+emit_16(1842);
+emit_16(1778);
+emit_16(1842);
+emit_16(1777);
+emit_16(1842);
+emit_16(1778);
+emit_16(1843);
+emit_16(1779);
+emit_16(1843);
+emit_16(1778);
+emit_16(1843);
+emit_16(1779);
+emit_16(1844);
+emit_16(1780);
+emit_16(1844);
+emit_16(1779);
+emit_16(1844);
+emit_16(1780);
+emit_16(1845);
+emit_16(1781);
+emit_16(1845);
+emit_16(1780);
+emit_16(1845);
+emit_16(1781);
+emit_16(1846);
+emit_16(1782);
+emit_16(1846);
+emit_16(1781);
+emit_16(1846);
+emit_16(1782);
+emit_16(1847);
+emit_16(1783);
+emit_16(1847);
+emit_16(1782);
+emit_16(1847);
+emit_16(1783);
+emit_16(1848);
+emit_16(1784);
+emit_16(1848);
+emit_16(1783);
+emit_16(1848);
+emit_16(1784);
+emit_16(1849);
+emit_16(1785);
+emit_16(1849);
+emit_16(1784);
+emit_16(1849);
+emit_16(1785);
+emit_16(1850);
+emit_16(1786);
+emit_16(1850);
+emit_16(1785);
+emit_16(1850);
+emit_16(1786);
+emit_16(1851);
+emit_16(1787);
+emit_16(1851);
+emit_16(1786);
+emit_16(1851);
+emit_16(1787);
+emit_16(1852);
+emit_16(1788);
+emit_16(1852);
+emit_16(1787);
+emit_16(1852);
+emit_16(1788);
+emit_16(1853);
+emit_16(1789);
+emit_16(1853);
+emit_16(1788);
+emit_16(1853);
+emit_16(1789);
+emit_16(1854);
+emit_16(1790);
+emit_16(1854);
+emit_16(1789);
+emit_16(1854);
+emit_16(1790);
+emit_16(1855);
+emit_16(1791);
+emit_16(1855);
+emit_16(1790);
+emit_16(1856);
+emit_16(1792);
+emit_16(1857);
+emit_16(1793);
+emit_16(1857);
+emit_16(1792);
+emit_16(1857);
+emit_16(1793);
+emit_16(1858);
+emit_16(1794);
+emit_16(1858);
+emit_16(1793);
+emit_16(1858);
+emit_16(1794);
+emit_16(1859);
+emit_16(1795);
+emit_16(1859);
+emit_16(1794);
+emit_16(1859);
+emit_16(1795);
+emit_16(1860);
+emit_16(1796);
+emit_16(1860);
+emit_16(1795);
+emit_16(1860);
+emit_16(1796);
+emit_16(1861);
+emit_16(1797);
+emit_16(1861);
+emit_16(1796);
+emit_16(1861);
+emit_16(1797);
+emit_16(1862);
+emit_16(1798);
+emit_16(1862);
+emit_16(1797);
+emit_16(1862);
+emit_16(1798);
+emit_16(1863);
+emit_16(1799);
+emit_16(1863);
+emit_16(1798);
+emit_16(1863);
+emit_16(1799);
+emit_16(1864);
+emit_16(1800);
+emit_16(1864);
+emit_16(1799);
+emit_16(1864);
+emit_16(1800);
+emit_16(1865);
+emit_16(1801);
+emit_16(1865);
+emit_16(1800);
+emit_16(1865);
+emit_16(1801);
+emit_16(1866);
+emit_16(1802);
+emit_16(1866);
+emit_16(1801);
+emit_16(1866);
+emit_16(1802);
+emit_16(1867);
+emit_16(1803);
+emit_16(1867);
+emit_16(1802);
+emit_16(1867);
+emit_16(1803);
+emit_16(1868);
+emit_16(1804);
+emit_16(1868);
+emit_16(1803);
+emit_16(1868);
+emit_16(1804);
+emit_16(1869);
+emit_16(1805);
+emit_16(1869);
+emit_16(1804);
+emit_16(1869);
+emit_16(1805);
+emit_16(1870);
+emit_16(1806);
+emit_16(1870);
+emit_16(1805);
+emit_16(1870);
+emit_16(1806);
+emit_16(1871);
+emit_16(1807);
+emit_16(1871);
+emit_16(1806);
+emit_16(1871);
+emit_16(1807);
+emit_16(1872);
+emit_16(1808);
+emit_16(1872);
+emit_16(1807);
+emit_16(1872);
+emit_16(1808);
+emit_16(1873);
+emit_16(1809);
+emit_16(1873);
+emit_16(1808);
+emit_16(1873);
+emit_16(1809);
+emit_16(1874);
+emit_16(1810);
+emit_16(1874);
+emit_16(1809);
+emit_16(1874);
+emit_16(1810);
+emit_16(1875);
+emit_16(1811);
+emit_16(1875);
+emit_16(1810);
+emit_16(1875);
+emit_16(1811);
+emit_16(1876);
+emit_16(1812);
+emit_16(1876);
+emit_16(1811);
+emit_16(1876);
+emit_16(1812);
+emit_16(1877);
+emit_16(1813);
+emit_16(1877);
+emit_16(1812);
+emit_16(1877);
+emit_16(1813);
+emit_16(1878);
+emit_16(1814);
+emit_16(1878);
+emit_16(1813);
+emit_16(1878);
+emit_16(1814);
+emit_16(1879);
+emit_16(1815);
+emit_16(1879);
+emit_16(1814);
+emit_16(1879);
+emit_16(1815);
+emit_16(1880);
+emit_16(1816);
+emit_16(1880);
+emit_16(1815);
+emit_16(1880);
+emit_16(1816);
+emit_16(1881);
+emit_16(1817);
+emit_16(1881);
+emit_16(1816);
+emit_16(1881);
+emit_16(1817);
+emit_16(1882);
+emit_16(1818);
+emit_16(1882);
+emit_16(1817);
+emit_16(1882);
+emit_16(1818);
+emit_16(1883);
+emit_16(1819);
+emit_16(1883);
+emit_16(1818);
+emit_16(1883);
+emit_16(1819);
+emit_16(1884);
+emit_16(1820);
+emit_16(1884);
+emit_16(1819);
+emit_16(1884);
+emit_16(1820);
+emit_16(1885);
+emit_16(1821);
+emit_16(1885);
+emit_16(1820);
+emit_16(1885);
+emit_16(1821);
+emit_16(1886);
+emit_16(1822);
+emit_16(1886);
+emit_16(1821);
+emit_16(1886);
+emit_16(1822);
+emit_16(1887);
+emit_16(1823);
+emit_16(1887);
+emit_16(1822);
+emit_16(1887);
+emit_16(1823);
+emit_16(1888);
+emit_16(1824);
+emit_16(1888);
+emit_16(1823);
+emit_16(1888);
+emit_16(1824);
+emit_16(1889);
+emit_16(1825);
+emit_16(1889);
+emit_16(1824);
+emit_16(1889);
+emit_16(1825);
+emit_16(1890);
+emit_16(1826);
+emit_16(1890);
+emit_16(1825);
+emit_16(1890);
+emit_16(1826);
+emit_16(1891);
+emit_16(1827);
+emit_16(1891);
+emit_16(1826);
+emit_16(1891);
+emit_16(1827);
+emit_16(1892);
+emit_16(1828);
+emit_16(1892);
+emit_16(1827);
+emit_16(1892);
+emit_16(1828);
+emit_16(1893);
+emit_16(1829);
+emit_16(1893);
+emit_16(1828);
+emit_16(1893);
+emit_16(1829);
+emit_16(1894);
+emit_16(1830);
+emit_16(1894);
+emit_16(1829);
+emit_16(1894);
+emit_16(1830);
+emit_16(1895);
+emit_16(1831);
+emit_16(1895);
+emit_16(1830);
+emit_16(1895);
+emit_16(1831);
+emit_16(1896);
+emit_16(1832);
+emit_16(1896);
+emit_16(1831);
+emit_16(1896);
+emit_16(1832);
+emit_16(1897);
+emit_16(1833);
+emit_16(1897);
+emit_16(1832);
+emit_16(1897);
+emit_16(1833);
+emit_16(1898);
+emit_16(1834);
+emit_16(1898);
+emit_16(1833);
+emit_16(1898);
+emit_16(1834);
+emit_16(1899);
+emit_16(1835);
+emit_16(1899);
+emit_16(1834);
+emit_16(1899);
+emit_16(1835);
+emit_16(1900);
+emit_16(1836);
+emit_16(1900);
+emit_16(1835);
+emit_16(1900);
+emit_16(1836);
+emit_16(1901);
+emit_16(1837);
+emit_16(1901);
+emit_16(1836);
+emit_16(1901);
+emit_16(1837);
+emit_16(1902);
+emit_16(1838);
+emit_16(1902);
+emit_16(1837);
+emit_16(1902);
+emit_16(1838);
+emit_16(1903);
+emit_16(1839);
+emit_16(1903);
+emit_16(1838);
+emit_16(1903);
+emit_16(1839);
+emit_16(1904);
+emit_16(1840);
+emit_16(1904);
+emit_16(1839);
+emit_16(1904);
+emit_16(1840);
+emit_16(1905);
+emit_16(1841);
+emit_16(1905);
+emit_16(1840);
+emit_16(1905);
+emit_16(1841);
+emit_16(1906);
+emit_16(1842);
+emit_16(1906);
+emit_16(1841);
+emit_16(1906);
+emit_16(1842);
+emit_16(1907);
+emit_16(1843);
+emit_16(1907);
+emit_16(1842);
+emit_16(1907);
+emit_16(1843);
+emit_16(1908);
+emit_16(1844);
+emit_16(1908);
+emit_16(1843);
+emit_16(1908);
+emit_16(1844);
+emit_16(1909);
+emit_16(1845);
+emit_16(1909);
+emit_16(1844);
+emit_16(1909);
+emit_16(1845);
+emit_16(1910);
+emit_16(1846);
+emit_16(1910);
+emit_16(1845);
+emit_16(1910);
+emit_16(1846);
+emit_16(1911);
+emit_16(1847);
+emit_16(1911);
+emit_16(1846);
+emit_16(1911);
+emit_16(1847);
+emit_16(1912);
+emit_16(1848);
+emit_16(1912);
+emit_16(1847);
+emit_16(1912);
+emit_16(1848);
+emit_16(1913);
+emit_16(1849);
+emit_16(1913);
+emit_16(1848);
+emit_16(1913);
+emit_16(1849);
+emit_16(1914);
+emit_16(1850);
+emit_16(1914);
+emit_16(1849);
+emit_16(1914);
+emit_16(1850);
+emit_16(1915);
+emit_16(1851);
+emit_16(1915);
+emit_16(1850);
+emit_16(1915);
+emit_16(1851);
+emit_16(1916);
+emit_16(1852);
+emit_16(1916);
+emit_16(1851);
+emit_16(1916);
+emit_16(1852);
+emit_16(1917);
+emit_16(1853);
+emit_16(1917);
+emit_16(1852);
+emit_16(1917);
+emit_16(1853);
+emit_16(1918);
+emit_16(1854);
+emit_16(1918);
+emit_16(1853);
+emit_16(1918);
+emit_16(1854);
+emit_16(1919);
+emit_16(1855);
+emit_16(1919);
+emit_16(1854);
+emit_16(1920);
+emit_16(1856);
+emit_16(1921);
+emit_16(1857);
+emit_16(1921);
+emit_16(1856);
+emit_16(1921);
+emit_16(1857);
+emit_16(1922);
+emit_16(1858);
+emit_16(1922);
+emit_16(1857);
+emit_16(1922);
+emit_16(1858);
+emit_16(1923);
+emit_16(1859);
+emit_16(1923);
+emit_16(1858);
+emit_16(1923);
+emit_16(1859);
+emit_16(1924);
+emit_16(1860);
+emit_16(1924);
+emit_16(1859);
+emit_16(1924);
+emit_16(1860);
+emit_16(1925);
+emit_16(1861);
+emit_16(1925);
+emit_16(1860);
+emit_16(1925);
+emit_16(1861);
+emit_16(1926);
+emit_16(1862);
+emit_16(1926);
+emit_16(1861);
+emit_16(1926);
+emit_16(1862);
+emit_16(1927);
+emit_16(1863);
+emit_16(1927);
+emit_16(1862);
+emit_16(1927);
+emit_16(1863);
+emit_16(1928);
+emit_16(1864);
+emit_16(1928);
+emit_16(1863);
+emit_16(1928);
+emit_16(1864);
+emit_16(1929);
+emit_16(1865);
+emit_16(1929);
+emit_16(1864);
+emit_16(1929);
+emit_16(1865);
+emit_16(1930);
+emit_16(1866);
+emit_16(1930);
+emit_16(1865);
+emit_16(1930);
+emit_16(1866);
+emit_16(1931);
+emit_16(1867);
+emit_16(1931);
+emit_16(1866);
+emit_16(1931);
+emit_16(1867);
+emit_16(1932);
+emit_16(1868);
+emit_16(1932);
+emit_16(1867);
+emit_16(1932);
+emit_16(1868);
+emit_16(1933);
+emit_16(1869);
+emit_16(1933);
+emit_16(1868);
+emit_16(1933);
+emit_16(1869);
+emit_16(1934);
+emit_16(1870);
+emit_16(1934);
+emit_16(1869);
+emit_16(1934);
+emit_16(1870);
+emit_16(1935);
+emit_16(1871);
+emit_16(1935);
+emit_16(1870);
+emit_16(1935);
+emit_16(1871);
+emit_16(1936);
+emit_16(1872);
+emit_16(1936);
+emit_16(1871);
+emit_16(1936);
+emit_16(1872);
+emit_16(1937);
+emit_16(1873);
+emit_16(1937);
+emit_16(1872);
+emit_16(1937);
+emit_16(1873);
+emit_16(1938);
+emit_16(1874);
+emit_16(1938);
+emit_16(1873);
+emit_16(1938);
+emit_16(1874);
+emit_16(1939);
+emit_16(1875);
+emit_16(1939);
+emit_16(1874);
+emit_16(1939);
+emit_16(1875);
+emit_16(1940);
+emit_16(1876);
+emit_16(1940);
+emit_16(1875);
+emit_16(1940);
+emit_16(1876);
+emit_16(1941);
+emit_16(1877);
+emit_16(1941);
+emit_16(1876);
+emit_16(1941);
+emit_16(1877);
+emit_16(1942);
+emit_16(1878);
+emit_16(1942);
+emit_16(1877);
+emit_16(1942);
+emit_16(1878);
+emit_16(1943);
+emit_16(1879);
+emit_16(1943);
+emit_16(1878);
+emit_16(1943);
+emit_16(1879);
+emit_16(1944);
+emit_16(1880);
+emit_16(1944);
+emit_16(1879);
+emit_16(1944);
+emit_16(1880);
+emit_16(1945);
+emit_16(1881);
+emit_16(1945);
+emit_16(1880);
+emit_16(1945);
+emit_16(1881);
+emit_16(1946);
+emit_16(1882);
+emit_16(1946);
+emit_16(1881);
+emit_16(1946);
+emit_16(1882);
+emit_16(1947);
+emit_16(1883);
+emit_16(1947);
+emit_16(1882);
+emit_16(1947);
+emit_16(1883);
+emit_16(1948);
+emit_16(1884);
+emit_16(1948);
+emit_16(1883);
+emit_16(1948);
+emit_16(1884);
+emit_16(1949);
+emit_16(1885);
+emit_16(1949);
+emit_16(1884);
+emit_16(1949);
+emit_16(1885);
+emit_16(1950);
+emit_16(1886);
+emit_16(1950);
+emit_16(1885);
+emit_16(1950);
+emit_16(1886);
+emit_16(1951);
+emit_16(1887);
+emit_16(1951);
+emit_16(1886);
+emit_16(1951);
+emit_16(1887);
+emit_16(1952);
+emit_16(1888);
+emit_16(1952);
+emit_16(1887);
+emit_16(1952);
+emit_16(1888);
+emit_16(1953);
+emit_16(1889);
+emit_16(1953);
+emit_16(1888);
+emit_16(1953);
+emit_16(1889);
+emit_16(1954);
+emit_16(1890);
+emit_16(1954);
+emit_16(1889);
+emit_16(1954);
+emit_16(1890);
+emit_16(1955);
+emit_16(1891);
+emit_16(1955);
+emit_16(1890);
+emit_16(1955);
+emit_16(1891);
+emit_16(1956);
+emit_16(1892);
+emit_16(1956);
+emit_16(1891);
+emit_16(1956);
+emit_16(1892);
+emit_16(1957);
+emit_16(1893);
+emit_16(1957);
+emit_16(1892);
+emit_16(1957);
+emit_16(1893);
+emit_16(1958);
+emit_16(1894);
+emit_16(1958);
+emit_16(1893);
+emit_16(1958);
+emit_16(1894);
+emit_16(1959);
+emit_16(1895);
+emit_16(1959);
+emit_16(1894);
+emit_16(1959);
+emit_16(1895);
+emit_16(1960);
+emit_16(1896);
+emit_16(1960);
+emit_16(1895);
+emit_16(1960);
+emit_16(1896);
+emit_16(1961);
+emit_16(1897);
+emit_16(1961);
+emit_16(1896);
+emit_16(1961);
+emit_16(1897);
+emit_16(1962);
+emit_16(1898);
+emit_16(1962);
+emit_16(1897);
+emit_16(1962);
+emit_16(1898);
+emit_16(1963);
+emit_16(1899);
+emit_16(1963);
+emit_16(1898);
+emit_16(1963);
+emit_16(1899);
+emit_16(1964);
+emit_16(1900);
+emit_16(1964);
+emit_16(1899);
+emit_16(1964);
+emit_16(1900);
+emit_16(1965);
+emit_16(1901);
+emit_16(1965);
+emit_16(1900);
+emit_16(1965);
+emit_16(1901);
+emit_16(1966);
+emit_16(1902);
+emit_16(1966);
+emit_16(1901);
+emit_16(1966);
+emit_16(1902);
+emit_16(1967);
+emit_16(1903);
+emit_16(1967);
+emit_16(1902);
+emit_16(1967);
+emit_16(1903);
+emit_16(1968);
+emit_16(1904);
+emit_16(1968);
+emit_16(1903);
+emit_16(1968);
+emit_16(1904);
+emit_16(1969);
+emit_16(1905);
+emit_16(1969);
+emit_16(1904);
+emit_16(1969);
+emit_16(1905);
+emit_16(1970);
+emit_16(1906);
+emit_16(1970);
+emit_16(1905);
+emit_16(1970);
+emit_16(1906);
+emit_16(1971);
+emit_16(1907);
+emit_16(1971);
+emit_16(1906);
+emit_16(1971);
+emit_16(1907);
+emit_16(1972);
+emit_16(1908);
+emit_16(1972);
+emit_16(1907);
+emit_16(1972);
+emit_16(1908);
+emit_16(1973);
+emit_16(1909);
+emit_16(1973);
+emit_16(1908);
+emit_16(1973);
+emit_16(1909);
+emit_16(1974);
+emit_16(1910);
+emit_16(1974);
+emit_16(1909);
+emit_16(1974);
+emit_16(1910);
+emit_16(1975);
+emit_16(1911);
+emit_16(1975);
+emit_16(1910);
+emit_16(1975);
+emit_16(1911);
+emit_16(1976);
+emit_16(1912);
+emit_16(1976);
+emit_16(1911);
+emit_16(1976);
+emit_16(1912);
+emit_16(1977);
+emit_16(1913);
+emit_16(1977);
+emit_16(1912);
+emit_16(1977);
+emit_16(1913);
+emit_16(1978);
+emit_16(1914);
+emit_16(1978);
+emit_16(1913);
+emit_16(1978);
+emit_16(1914);
+emit_16(1979);
+emit_16(1915);
+emit_16(1979);
+emit_16(1914);
+emit_16(1979);
+emit_16(1915);
+emit_16(1980);
+emit_16(1916);
+emit_16(1980);
+emit_16(1915);
+emit_16(1980);
+emit_16(1916);
+emit_16(1981);
+emit_16(1917);
+emit_16(1981);
+emit_16(1916);
+emit_16(1981);
+emit_16(1917);
+emit_16(1982);
+emit_16(1918);
+emit_16(1982);
+emit_16(1917);
+emit_16(1982);
+emit_16(1918);
+emit_16(1983);
+emit_16(1919);
+emit_16(1983);
+emit_16(1918);
+emit_16(1984);
+emit_16(1920);
+emit_16(1985);
+emit_16(1921);
+emit_16(1985);
+emit_16(1920);
+emit_16(1985);
+emit_16(1921);
+emit_16(1986);
+emit_16(1922);
+emit_16(1986);
+emit_16(1921);
+emit_16(1986);
+emit_16(1922);
+emit_16(1987);
+emit_16(1923);
+emit_16(1987);
+emit_16(1922);
+emit_16(1987);
+emit_16(1923);
+emit_16(1988);
+emit_16(1924);
+emit_16(1988);
+emit_16(1923);
+emit_16(1988);
+emit_16(1924);
+emit_16(1989);
+emit_16(1925);
+emit_16(1989);
+emit_16(1924);
+emit_16(1989);
+emit_16(1925);
+emit_16(1990);
+emit_16(1926);
+emit_16(1990);
+emit_16(1925);
+emit_16(1990);
+emit_16(1926);
+emit_16(1991);
+emit_16(1927);
+emit_16(1991);
+emit_16(1926);
+emit_16(1991);
+emit_16(1927);
+emit_16(1992);
+emit_16(1928);
+emit_16(1992);
+emit_16(1927);
+emit_16(1992);
+emit_16(1928);
+emit_16(1993);
+emit_16(1929);
+emit_16(1993);
+emit_16(1928);
+emit_16(1993);
+emit_16(1929);
+emit_16(1994);
+emit_16(1930);
+emit_16(1994);
+emit_16(1929);
+emit_16(1994);
+emit_16(1930);
+emit_16(1995);
+emit_16(1931);
+emit_16(1995);
+emit_16(1930);
+emit_16(1995);
+emit_16(1931);
+emit_16(1996);
+emit_16(1932);
+emit_16(1996);
+emit_16(1931);
+emit_16(1996);
+emit_16(1932);
+emit_16(1997);
+emit_16(1933);
+emit_16(1997);
+emit_16(1932);
+emit_16(1997);
+emit_16(1933);
+emit_16(1998);
+emit_16(1934);
+emit_16(1998);
+emit_16(1933);
+emit_16(1998);
+emit_16(1934);
+emit_16(1999);
+emit_16(1935);
+emit_16(1999);
+emit_16(1934);
+emit_16(1999);
+emit_16(1935);
+emit_16(2000);
+emit_16(1936);
+emit_16(2000);
+emit_16(1935);
+emit_16(2000);
+emit_16(1936);
+emit_16(2001);
+emit_16(1937);
+emit_16(2001);
+emit_16(1936);
+emit_16(2001);
+emit_16(1937);
+emit_16(2002);
+emit_16(1938);
+emit_16(2002);
+emit_16(1937);
+emit_16(2002);
+emit_16(1938);
+emit_16(2003);
+emit_16(1939);
+emit_16(2003);
+emit_16(1938);
+emit_16(2003);
+emit_16(1939);
+emit_16(2004);
+emit_16(1940);
+emit_16(2004);
+emit_16(1939);
+emit_16(2004);
+emit_16(1940);
+emit_16(2005);
+emit_16(1941);
+emit_16(2005);
+emit_16(1940);
+emit_16(2005);
+emit_16(1941);
+emit_16(2006);
+emit_16(1942);
+emit_16(2006);
+emit_16(1941);
+emit_16(2006);
+emit_16(1942);
+emit_16(2007);
+emit_16(1943);
+emit_16(2007);
+emit_16(1942);
+emit_16(2007);
+emit_16(1943);
+emit_16(2008);
+emit_16(1944);
+emit_16(2008);
+emit_16(1943);
+emit_16(2008);
+emit_16(1944);
+emit_16(2009);
+emit_16(1945);
+emit_16(2009);
+emit_16(1944);
+emit_16(2009);
+emit_16(1945);
+emit_16(2010);
+emit_16(1946);
+emit_16(2010);
+emit_16(1945);
+emit_16(2010);
+emit_16(1946);
+emit_16(2011);
+emit_16(1947);
+emit_16(2011);
+emit_16(1946);
+emit_16(2011);
+emit_16(1947);
+emit_16(2012);
+emit_16(1948);
+emit_16(2012);
+emit_16(1947);
+emit_16(2012);
+emit_16(1948);
+emit_16(2013);
+emit_16(1949);
+emit_16(2013);
+emit_16(1948);
+emit_16(2013);
+emit_16(1949);
+emit_16(2014);
+emit_16(1950);
+emit_16(2014);
+emit_16(1949);
+emit_16(2014);
+emit_16(1950);
+emit_16(2015);
+emit_16(1951);
+emit_16(2015);
+emit_16(1950);
+emit_16(2015);
+emit_16(1951);
+emit_16(2016);
+emit_16(1952);
+emit_16(2016);
+emit_16(1951);
+emit_16(2016);
+emit_16(1952);
+emit_16(2017);
+emit_16(1953);
+emit_16(2017);
+emit_16(1952);
+emit_16(2017);
+emit_16(1953);
+emit_16(2018);
+emit_16(1954);
+emit_16(2018);
+emit_16(1953);
+emit_16(2018);
+emit_16(1954);
+emit_16(2019);
+emit_16(1955);
+emit_16(2019);
+emit_16(1954);
+emit_16(2019);
+emit_16(1955);
+emit_16(2020);
+emit_16(1956);
+emit_16(2020);
+emit_16(1955);
+emit_16(2020);
+emit_16(1956);
+emit_16(2021);
+emit_16(1957);
+emit_16(2021);
+emit_16(1956);
+emit_16(2021);
+emit_16(1957);
+emit_16(2022);
+emit_16(1958);
+emit_16(2022);
+emit_16(1957);
+emit_16(2022);
+emit_16(1958);
+emit_16(2023);
+emit_16(1959);
+emit_16(2023);
+emit_16(1958);
+emit_16(2023);
+emit_16(1959);
+emit_16(2024);
+emit_16(1960);
+emit_16(2024);
+emit_16(1959);
+emit_16(2024);
+emit_16(1960);
+emit_16(2025);
+emit_16(1961);
+emit_16(2025);
+emit_16(1960);
+emit_16(2025);
+emit_16(1961);
+emit_16(2026);
+emit_16(1962);
+emit_16(2026);
+emit_16(1961);
+emit_16(2026);
+emit_16(1962);
+emit_16(2027);
+emit_16(1963);
+emit_16(2027);
+emit_16(1962);
+emit_16(2027);
+emit_16(1963);
+emit_16(2028);
+emit_16(1964);
+emit_16(2028);
+emit_16(1963);
+emit_16(2028);
+emit_16(1964);
+emit_16(2029);
+emit_16(1965);
+emit_16(2029);
+emit_16(1964);
+emit_16(2029);
+emit_16(1965);
+emit_16(2030);
+emit_16(1966);
+emit_16(2030);
+emit_16(1965);
+emit_16(2030);
+emit_16(1966);
+emit_16(2031);
+emit_16(1967);
+emit_16(2031);
+emit_16(1966);
+emit_16(2031);
+emit_16(1967);
+emit_16(2032);
+emit_16(1968);
+emit_16(2032);
+emit_16(1967);
+emit_16(2032);
+emit_16(1968);
+emit_16(2033);
+emit_16(1969);
+emit_16(2033);
+emit_16(1968);
+emit_16(2033);
+emit_16(1969);
+emit_16(2034);
+emit_16(1970);
+emit_16(2034);
+emit_16(1969);
+emit_16(2034);
+emit_16(1970);
+emit_16(2035);
+emit_16(1971);
+emit_16(2035);
+emit_16(1970);
+emit_16(2035);
+emit_16(1971);
+emit_16(2036);
+emit_16(1972);
+emit_16(2036);
+emit_16(1971);
+emit_16(2036);
+emit_16(1972);
+emit_16(2037);
+emit_16(1973);
+emit_16(2037);
+emit_16(1972);
+emit_16(2037);
+emit_16(1973);
+emit_16(2038);
+emit_16(1974);
+emit_16(2038);
+emit_16(1973);
+emit_16(2038);
+emit_16(1974);
+emit_16(2039);
+emit_16(1975);
+emit_16(2039);
+emit_16(1974);
+emit_16(2039);
+emit_16(1975);
+emit_16(2040);
+emit_16(1976);
+emit_16(2040);
+emit_16(1975);
+emit_16(2040);
+emit_16(1976);
+emit_16(2041);
+emit_16(1977);
+emit_16(2041);
+emit_16(1976);
+emit_16(2041);
+emit_16(1977);
+emit_16(2042);
+emit_16(1978);
+emit_16(2042);
+emit_16(1977);
+emit_16(2042);
+emit_16(1978);
+emit_16(2043);
+emit_16(1979);
+emit_16(2043);
+emit_16(1978);
+emit_16(2043);
+emit_16(1979);
+emit_16(2044);
+emit_16(1980);
+emit_16(2044);
+emit_16(1979);
+emit_16(2044);
+emit_16(1980);
+emit_16(2045);
+emit_16(1981);
+emit_16(2045);
+emit_16(1980);
+emit_16(2045);
+emit_16(1981);
+emit_16(2046);
+emit_16(1982);
+emit_16(2046);
+emit_16(1981);
+emit_16(2046);
+emit_16(1982);
+emit_16(2047);
+emit_16(1983);
+emit_16(2047);
+emit_16(1982);
+emit_start(Landscape02Idx)
+emit_16(0);
+emit_16(1);
+emit_16(2);
+emit_16(3);
+emit_16(2);
+emit_16(1);
+emit_16(2);
+emit_16(3);
+emit_16(4);
+emit_16(5);
+emit_16(4);
+emit_16(3);
+emit_16(4);
+emit_16(5);
+emit_16(6);
+emit_16(7);
+emit_16(6);
+emit_16(5);
+emit_16(6);
+emit_16(7);
+emit_16(8);
+emit_16(9);
+emit_16(8);
+emit_16(7);
+emit_16(8);
+emit_16(9);
+emit_16(10);
+emit_16(11);
+emit_16(10);
+emit_16(9);
+emit_16(10);
+emit_16(11);
+emit_16(12);
+emit_16(13);
+emit_16(12);
+emit_16(11);
+emit_16(12);
+emit_16(13);
+emit_16(14);
+emit_16(15);
+emit_16(14);
+emit_16(13);
+emit_16(14);
+emit_16(15);
+emit_16(16);
+emit_16(17);
+emit_16(16);
+emit_16(15);
+emit_16(16);
+emit_16(17);
+emit_16(18);
+emit_16(19);
+emit_16(18);
+emit_16(17);
+emit_16(18);
+emit_16(19);
+emit_16(20);
+emit_16(21);
+emit_16(20);
+emit_16(19);
+emit_16(20);
+emit_16(21);
+emit_16(22);
+emit_16(23);
+emit_16(22);
+emit_16(21);
+emit_16(22);
+emit_16(23);
+emit_16(24);
+emit_16(25);
+emit_16(24);
+emit_16(23);
+emit_16(24);
+emit_16(25);
+emit_16(26);
+emit_16(27);
+emit_16(26);
+emit_16(25);
+emit_16(26);
+emit_16(27);
+emit_16(28);
+emit_16(29);
+emit_16(28);
+emit_16(27);
+emit_16(28);
+emit_16(29);
+emit_16(30);
+emit_16(31);
+emit_16(30);
+emit_16(29);
+emit_16(30);
+emit_16(31);
+emit_16(32);
+emit_16(33);
+emit_16(32);
+emit_16(31);
+emit_16(32);
+emit_16(33);
+emit_16(34);
+emit_16(35);
+emit_16(34);
+emit_16(33);
+emit_16(34);
+emit_16(35);
+emit_16(36);
+emit_16(37);
+emit_16(36);
+emit_16(35);
+emit_16(36);
+emit_16(37);
+emit_16(38);
+emit_16(39);
+emit_16(38);
+emit_16(37);
+emit_16(38);
+emit_16(39);
+emit_16(40);
+emit_16(41);
+emit_16(40);
+emit_16(39);
+emit_16(40);
+emit_16(41);
+emit_16(42);
+emit_16(43);
+emit_16(42);
+emit_16(41);
+emit_16(42);
+emit_16(43);
+emit_16(44);
+emit_16(45);
+emit_16(44);
+emit_16(43);
+emit_16(44);
+emit_16(45);
+emit_16(46);
+emit_16(47);
+emit_16(46);
+emit_16(45);
+emit_16(46);
+emit_16(47);
+emit_16(48);
+emit_16(49);
+emit_16(48);
+emit_16(47);
+emit_16(48);
+emit_16(49);
+emit_16(50);
+emit_16(51);
+emit_16(50);
+emit_16(49);
+emit_16(50);
+emit_16(51);
+emit_16(52);
+emit_16(53);
+emit_16(52);
+emit_16(51);
+emit_16(52);
+emit_16(53);
+emit_16(54);
+emit_16(55);
+emit_16(54);
+emit_16(53);
+emit_16(54);
+emit_16(55);
+emit_16(56);
+emit_16(57);
+emit_16(56);
+emit_16(55);
+emit_16(56);
+emit_16(57);
+emit_16(58);
+emit_16(59);
+emit_16(58);
+emit_16(57);
+emit_16(58);
+emit_16(59);
+emit_16(60);
+emit_16(61);
+emit_16(60);
+emit_16(59);
+emit_16(60);
+emit_16(61);
+emit_16(62);
+emit_16(63);
+emit_16(62);
+emit_16(61);
+emit_16(62);
+emit_16(63);
+emit_16(64);
+emit_16(65);
+emit_16(64);
+emit_16(63);
+emit_16(64);
+emit_16(65);
+emit_16(66);
+emit_16(67);
+emit_16(66);
+emit_16(65);
+emit_16(66);
+emit_16(67);
+emit_16(68);
+emit_16(69);
+emit_16(68);
+emit_16(67);
+emit_16(68);
+emit_16(69);
+emit_16(70);
+emit_16(71);
+emit_16(70);
+emit_16(69);
+emit_16(70);
+emit_16(71);
+emit_16(72);
+emit_16(73);
+emit_16(72);
+emit_16(71);
+emit_16(72);
+emit_16(73);
+emit_16(74);
+emit_16(75);
+emit_16(74);
+emit_16(73);
+emit_16(74);
+emit_16(75);
+emit_16(76);
+emit_16(77);
+emit_16(76);
+emit_16(75);
+emit_16(76);
+emit_16(77);
+emit_16(78);
+emit_16(79);
+emit_16(78);
+emit_16(77);
+emit_16(78);
+emit_16(79);
+emit_16(80);
+emit_16(81);
+emit_16(80);
+emit_16(79);
+emit_16(80);
+emit_16(81);
+emit_16(82);
+emit_16(83);
+emit_16(82);
+emit_16(81);
+emit_16(82);
+emit_16(83);
+emit_16(84);
+emit_16(85);
+emit_16(84);
+emit_16(83);
+emit_16(84);
+emit_16(85);
+emit_16(86);
+emit_16(87);
+emit_16(86);
+emit_16(85);
+emit_16(86);
+emit_16(87);
+emit_16(88);
+emit_16(89);
+emit_16(88);
+emit_16(87);
+emit_16(88);
+emit_16(89);
+emit_16(90);
+emit_16(91);
+emit_16(90);
+emit_16(89);
+emit_16(90);
+emit_16(91);
+emit_16(92);
+emit_16(93);
+emit_16(92);
+emit_16(91);
+emit_16(92);
+emit_16(93);
+emit_16(94);
+emit_16(95);
+emit_16(94);
+emit_16(93);
+emit_16(94);
+emit_16(95);
+emit_16(96);
+emit_16(97);
+emit_16(96);
+emit_16(95);
+emit_16(96);
+emit_16(97);
+emit_16(98);
+emit_16(99);
+emit_16(98);
+emit_16(97);
+emit_16(98);
+emit_16(99);
+emit_16(100);
+emit_16(101);
+emit_16(100);
+emit_16(99);
+emit_16(100);
+emit_16(101);
+emit_16(102);
+emit_16(103);
+emit_16(102);
+emit_16(101);
+emit_16(102);
+emit_16(103);
+emit_16(104);
+emit_16(105);
+emit_16(104);
+emit_16(103);
+emit_16(104);
+emit_16(105);
+emit_16(106);
+emit_16(107);
+emit_16(106);
+emit_16(105);
+emit_16(106);
+emit_16(107);
+emit_16(108);
+emit_16(109);
+emit_16(108);
+emit_16(107);
+emit_16(108);
+emit_16(109);
+emit_16(110);
+emit_16(111);
+emit_16(110);
+emit_16(109);
+emit_16(110);
+emit_16(111);
+emit_16(112);
+emit_16(113);
+emit_16(112);
+emit_16(111);
+emit_16(112);
+emit_16(113);
+emit_16(114);
+emit_16(115);
+emit_16(114);
+emit_16(113);
+emit_16(114);
+emit_16(115);
+emit_16(116);
+emit_16(117);
+emit_16(116);
+emit_16(115);
+emit_16(116);
+emit_16(117);
+emit_16(118);
+emit_16(119);
+emit_16(118);
+emit_16(117);
+emit_16(118);
+emit_16(119);
+emit_16(120);
+emit_16(121);
+emit_16(120);
+emit_16(119);
+emit_16(120);
+emit_16(121);
+emit_16(122);
+emit_16(123);
+emit_16(122);
+emit_16(121);
+emit_16(122);
+emit_16(123);
+emit_16(124);
+emit_16(125);
+emit_16(124);
+emit_16(123);
+emit_16(124);
+emit_16(125);
+emit_16(126);
+emit_16(127);
+emit_16(126);
+emit_16(125);
+emit_16(126);
+emit_16(127);
+emit_16(128);
+emit_16(129);
+emit_16(128);
+emit_16(127);
+emit_16(128);
+emit_16(129);
+emit_16(130);
+emit_16(131);
+emit_16(130);
+emit_16(129);
+emit_16(132);
+emit_16(0);
+emit_16(133);
+emit_16(2);
+emit_16(133);
+emit_16(0);
+emit_16(133);
+emit_16(2);
+emit_16(134);
+emit_16(4);
+emit_16(134);
+emit_16(2);
+emit_16(134);
+emit_16(4);
+emit_16(135);
+emit_16(6);
+emit_16(135);
+emit_16(4);
+emit_16(135);
+emit_16(6);
+emit_16(136);
+emit_16(8);
+emit_16(136);
+emit_16(6);
+emit_16(136);
+emit_16(8);
+emit_16(137);
+emit_16(10);
+emit_16(137);
+emit_16(8);
+emit_16(137);
+emit_16(10);
+emit_16(138);
+emit_16(12);
+emit_16(138);
+emit_16(10);
+emit_16(138);
+emit_16(12);
+emit_16(139);
+emit_16(14);
+emit_16(139);
+emit_16(12);
+emit_16(139);
+emit_16(14);
+emit_16(140);
+emit_16(16);
+emit_16(140);
+emit_16(14);
+emit_16(140);
+emit_16(16);
+emit_16(141);
+emit_16(18);
+emit_16(141);
+emit_16(16);
+emit_16(141);
+emit_16(18);
+emit_16(142);
+emit_16(20);
+emit_16(142);
+emit_16(18);
+emit_16(142);
+emit_16(20);
+emit_16(143);
+emit_16(22);
+emit_16(143);
+emit_16(20);
+emit_16(143);
+emit_16(22);
+emit_16(144);
+emit_16(24);
+emit_16(144);
+emit_16(22);
+emit_16(144);
+emit_16(24);
+emit_16(145);
+emit_16(26);
+emit_16(145);
+emit_16(24);
+emit_16(145);
+emit_16(26);
+emit_16(146);
+emit_16(28);
+emit_16(146);
+emit_16(26);
+emit_16(146);
+emit_16(28);
+emit_16(147);
+emit_16(30);
+emit_16(147);
+emit_16(28);
+emit_16(147);
+emit_16(30);
+emit_16(148);
+emit_16(32);
+emit_16(148);
+emit_16(30);
+emit_16(148);
+emit_16(32);
+emit_16(149);
+emit_16(34);
+emit_16(149);
+emit_16(32);
+emit_16(149);
+emit_16(34);
+emit_16(150);
+emit_16(36);
+emit_16(150);
+emit_16(34);
+emit_16(150);
+emit_16(36);
+emit_16(151);
+emit_16(38);
+emit_16(151);
+emit_16(36);
+emit_16(151);
+emit_16(38);
+emit_16(152);
+emit_16(40);
+emit_16(152);
+emit_16(38);
+emit_16(152);
+emit_16(40);
+emit_16(153);
+emit_16(42);
+emit_16(153);
+emit_16(40);
+emit_16(153);
+emit_16(42);
+emit_16(154);
+emit_16(44);
+emit_16(154);
+emit_16(42);
+emit_16(154);
+emit_16(44);
+emit_16(155);
+emit_16(46);
+emit_16(155);
+emit_16(44);
+emit_16(155);
+emit_16(46);
+emit_16(156);
+emit_16(48);
+emit_16(156);
+emit_16(46);
+emit_16(156);
+emit_16(48);
+emit_16(157);
+emit_16(50);
+emit_16(157);
+emit_16(48);
+emit_16(157);
+emit_16(50);
+emit_16(158);
+emit_16(52);
+emit_16(158);
+emit_16(50);
+emit_16(158);
+emit_16(52);
+emit_16(159);
+emit_16(54);
+emit_16(159);
+emit_16(52);
+emit_16(159);
+emit_16(54);
+emit_16(160);
+emit_16(56);
+emit_16(160);
+emit_16(54);
+emit_16(160);
+emit_16(56);
+emit_16(161);
+emit_16(58);
+emit_16(161);
+emit_16(56);
+emit_16(161);
+emit_16(58);
+emit_16(162);
+emit_16(60);
+emit_16(162);
+emit_16(58);
+emit_16(162);
+emit_16(60);
+emit_16(163);
+emit_16(62);
+emit_16(163);
+emit_16(60);
+emit_16(163);
+emit_16(62);
+emit_16(164);
+emit_16(64);
+emit_16(164);
+emit_16(62);
+emit_16(164);
+emit_16(64);
+emit_16(165);
+emit_16(66);
+emit_16(165);
+emit_16(64);
+emit_16(165);
+emit_16(66);
+emit_16(166);
+emit_16(68);
+emit_16(166);
+emit_16(66);
+emit_16(166);
+emit_16(68);
+emit_16(167);
+emit_16(70);
+emit_16(167);
+emit_16(68);
+emit_16(167);
+emit_16(70);
+emit_16(168);
+emit_16(72);
+emit_16(168);
+emit_16(70);
+emit_16(168);
+emit_16(72);
+emit_16(169);
+emit_16(74);
+emit_16(169);
+emit_16(72);
+emit_16(169);
+emit_16(74);
+emit_16(170);
+emit_16(76);
+emit_16(170);
+emit_16(74);
+emit_16(170);
+emit_16(76);
+emit_16(171);
+emit_16(78);
+emit_16(171);
+emit_16(76);
+emit_16(171);
+emit_16(78);
+emit_16(172);
+emit_16(80);
+emit_16(172);
+emit_16(78);
+emit_16(172);
+emit_16(80);
+emit_16(173);
+emit_16(82);
+emit_16(173);
+emit_16(80);
+emit_16(173);
+emit_16(82);
+emit_16(174);
+emit_16(84);
+emit_16(174);
+emit_16(82);
+emit_16(174);
+emit_16(84);
+emit_16(175);
+emit_16(86);
+emit_16(175);
+emit_16(84);
+emit_16(175);
+emit_16(86);
+emit_16(176);
+emit_16(88);
+emit_16(176);
+emit_16(86);
+emit_16(176);
+emit_16(88);
+emit_16(177);
+emit_16(90);
+emit_16(177);
+emit_16(88);
+emit_16(177);
+emit_16(90);
+emit_16(178);
+emit_16(92);
+emit_16(178);
+emit_16(90);
+emit_16(178);
+emit_16(92);
+emit_16(179);
+emit_16(94);
+emit_16(179);
+emit_16(92);
+emit_16(179);
+emit_16(94);
+emit_16(180);
+emit_16(96);
+emit_16(180);
+emit_16(94);
+emit_16(180);
+emit_16(96);
+emit_16(181);
+emit_16(98);
+emit_16(181);
+emit_16(96);
+emit_16(181);
+emit_16(98);
+emit_16(182);
+emit_16(100);
+emit_16(182);
+emit_16(98);
+emit_16(182);
+emit_16(100);
+emit_16(183);
+emit_16(102);
+emit_16(183);
+emit_16(100);
+emit_16(183);
+emit_16(102);
+emit_16(184);
+emit_16(104);
+emit_16(184);
+emit_16(102);
+emit_16(184);
+emit_16(104);
+emit_16(185);
+emit_16(106);
+emit_16(185);
+emit_16(104);
+emit_16(185);
+emit_16(106);
+emit_16(186);
+emit_16(108);
+emit_16(186);
+emit_16(106);
+emit_16(186);
+emit_16(108);
+emit_16(187);
+emit_16(110);
+emit_16(187);
+emit_16(108);
+emit_16(187);
+emit_16(110);
+emit_16(188);
+emit_16(112);
+emit_16(188);
+emit_16(110);
+emit_16(188);
+emit_16(112);
+emit_16(189);
+emit_16(114);
+emit_16(189);
+emit_16(112);
+emit_16(189);
+emit_16(114);
+emit_16(190);
+emit_16(116);
+emit_16(190);
+emit_16(114);
+emit_16(190);
+emit_16(116);
+emit_16(191);
+emit_16(118);
+emit_16(191);
+emit_16(116);
+emit_16(191);
+emit_16(118);
+emit_16(192);
+emit_16(120);
+emit_16(192);
+emit_16(118);
+emit_16(192);
+emit_16(120);
+emit_16(193);
+emit_16(122);
+emit_16(193);
+emit_16(120);
+emit_16(193);
+emit_16(122);
+emit_16(194);
+emit_16(124);
+emit_16(194);
+emit_16(122);
+emit_16(194);
+emit_16(124);
+emit_16(195);
+emit_16(126);
+emit_16(195);
+emit_16(124);
+emit_16(195);
+emit_16(126);
+emit_16(196);
+emit_16(128);
+emit_16(196);
+emit_16(126);
+emit_16(196);
+emit_16(128);
+emit_16(197);
+emit_16(130);
+emit_16(197);
+emit_16(128);
+emit_16(198);
+emit_16(132);
+emit_16(199);
+emit_16(133);
+emit_16(199);
+emit_16(132);
+emit_16(199);
+emit_16(133);
+emit_16(200);
+emit_16(134);
+emit_16(200);
+emit_16(133);
+emit_16(200);
+emit_16(134);
+emit_16(201);
+emit_16(135);
+emit_16(201);
+emit_16(134);
+emit_16(201);
+emit_16(135);
+emit_16(202);
+emit_16(136);
+emit_16(202);
+emit_16(135);
+emit_16(202);
+emit_16(136);
+emit_16(203);
+emit_16(137);
+emit_16(203);
+emit_16(136);
+emit_16(203);
+emit_16(137);
+emit_16(204);
+emit_16(138);
+emit_16(204);
+emit_16(137);
+emit_16(204);
+emit_16(138);
+emit_16(205);
+emit_16(139);
+emit_16(205);
+emit_16(138);
+emit_16(205);
+emit_16(139);
+emit_16(206);
+emit_16(140);
+emit_16(206);
+emit_16(139);
+emit_16(206);
+emit_16(140);
+emit_16(207);
+emit_16(141);
+emit_16(207);
+emit_16(140);
+emit_16(207);
+emit_16(141);
+emit_16(208);
+emit_16(142);
+emit_16(208);
+emit_16(141);
+emit_16(208);
+emit_16(142);
+emit_16(209);
+emit_16(143);
+emit_16(209);
+emit_16(142);
+emit_16(209);
+emit_16(143);
+emit_16(210);
+emit_16(144);
+emit_16(210);
+emit_16(143);
+emit_16(210);
+emit_16(144);
+emit_16(211);
+emit_16(145);
+emit_16(211);
+emit_16(144);
+emit_16(211);
+emit_16(145);
+emit_16(212);
+emit_16(146);
+emit_16(212);
+emit_16(145);
+emit_16(212);
+emit_16(146);
+emit_16(213);
+emit_16(147);
+emit_16(213);
+emit_16(146);
+emit_16(213);
+emit_16(147);
+emit_16(214);
+emit_16(148);
+emit_16(214);
+emit_16(147);
+emit_16(214);
+emit_16(148);
+emit_16(215);
+emit_16(149);
+emit_16(215);
+emit_16(148);
+emit_16(215);
+emit_16(149);
+emit_16(216);
+emit_16(150);
+emit_16(216);
+emit_16(149);
+emit_16(216);
+emit_16(150);
+emit_16(217);
+emit_16(151);
+emit_16(217);
+emit_16(150);
+emit_16(217);
+emit_16(151);
+emit_16(218);
+emit_16(152);
+emit_16(218);
+emit_16(151);
+emit_16(218);
+emit_16(152);
+emit_16(219);
+emit_16(153);
+emit_16(219);
+emit_16(152);
+emit_16(219);
+emit_16(153);
+emit_16(220);
+emit_16(154);
+emit_16(220);
+emit_16(153);
+emit_16(220);
+emit_16(154);
+emit_16(221);
+emit_16(155);
+emit_16(221);
+emit_16(154);
+emit_16(221);
+emit_16(155);
+emit_16(222);
+emit_16(156);
+emit_16(222);
+emit_16(155);
+emit_16(222);
+emit_16(156);
+emit_16(223);
+emit_16(157);
+emit_16(223);
+emit_16(156);
+emit_16(223);
+emit_16(157);
+emit_16(224);
+emit_16(158);
+emit_16(224);
+emit_16(157);
+emit_16(224);
+emit_16(158);
+emit_16(225);
+emit_16(159);
+emit_16(225);
+emit_16(158);
+emit_16(225);
+emit_16(159);
+emit_16(226);
+emit_16(160);
+emit_16(226);
+emit_16(159);
+emit_16(226);
+emit_16(160);
+emit_16(227);
+emit_16(161);
+emit_16(227);
+emit_16(160);
+emit_16(227);
+emit_16(161);
+emit_16(228);
+emit_16(162);
+emit_16(228);
+emit_16(161);
+emit_16(228);
+emit_16(162);
+emit_16(229);
+emit_16(163);
+emit_16(229);
+emit_16(162);
+emit_16(229);
+emit_16(163);
+emit_16(230);
+emit_16(164);
+emit_16(230);
+emit_16(163);
+emit_16(230);
+emit_16(164);
+emit_16(231);
+emit_16(165);
+emit_16(231);
+emit_16(164);
+emit_16(231);
+emit_16(165);
+emit_16(232);
+emit_16(166);
+emit_16(232);
+emit_16(165);
+emit_16(232);
+emit_16(166);
+emit_16(233);
+emit_16(167);
+emit_16(233);
+emit_16(166);
+emit_16(233);
+emit_16(167);
+emit_16(234);
+emit_16(168);
+emit_16(234);
+emit_16(167);
+emit_16(234);
+emit_16(168);
+emit_16(235);
+emit_16(169);
+emit_16(235);
+emit_16(168);
+emit_16(235);
+emit_16(169);
+emit_16(236);
+emit_16(170);
+emit_16(236);
+emit_16(169);
+emit_16(236);
+emit_16(170);
+emit_16(237);
+emit_16(171);
+emit_16(237);
+emit_16(170);
+emit_16(237);
+emit_16(171);
+emit_16(238);
+emit_16(172);
+emit_16(238);
+emit_16(171);
+emit_16(238);
+emit_16(172);
+emit_16(239);
+emit_16(173);
+emit_16(239);
+emit_16(172);
+emit_16(239);
+emit_16(173);
+emit_16(240);
+emit_16(174);
+emit_16(240);
+emit_16(173);
+emit_16(240);
+emit_16(174);
+emit_16(241);
+emit_16(175);
+emit_16(241);
+emit_16(174);
+emit_16(241);
+emit_16(175);
+emit_16(242);
+emit_16(176);
+emit_16(242);
+emit_16(175);
+emit_16(242);
+emit_16(176);
+emit_16(243);
+emit_16(177);
+emit_16(243);
+emit_16(176);
+emit_16(243);
+emit_16(177);
+emit_16(244);
+emit_16(178);
+emit_16(244);
+emit_16(177);
+emit_16(244);
+emit_16(178);
+emit_16(245);
+emit_16(179);
+emit_16(245);
+emit_16(178);
+emit_16(245);
+emit_16(179);
+emit_16(246);
+emit_16(180);
+emit_16(246);
+emit_16(179);
+emit_16(246);
+emit_16(180);
+emit_16(247);
+emit_16(181);
+emit_16(247);
+emit_16(180);
+emit_16(247);
+emit_16(181);
+emit_16(248);
+emit_16(182);
+emit_16(248);
+emit_16(181);
+emit_16(248);
+emit_16(182);
+emit_16(249);
+emit_16(183);
+emit_16(249);
+emit_16(182);
+emit_16(249);
+emit_16(183);
+emit_16(250);
+emit_16(184);
+emit_16(250);
+emit_16(183);
+emit_16(250);
+emit_16(184);
+emit_16(251);
+emit_16(185);
+emit_16(251);
+emit_16(184);
+emit_16(251);
+emit_16(185);
+emit_16(252);
+emit_16(186);
+emit_16(252);
+emit_16(185);
+emit_16(252);
+emit_16(186);
+emit_16(253);
+emit_16(187);
+emit_16(253);
+emit_16(186);
+emit_16(253);
+emit_16(187);
+emit_16(254);
+emit_16(188);
+emit_16(254);
+emit_16(187);
+emit_16(254);
+emit_16(188);
+emit_16(255);
+emit_16(189);
+emit_16(255);
+emit_16(188);
+emit_16(255);
+emit_16(189);
+emit_16(256);
+emit_16(190);
+emit_16(256);
+emit_16(189);
+emit_16(256);
+emit_16(190);
+emit_16(257);
+emit_16(191);
+emit_16(257);
+emit_16(190);
+emit_16(257);
+emit_16(191);
+emit_16(258);
+emit_16(192);
+emit_16(258);
+emit_16(191);
+emit_16(258);
+emit_16(192);
+emit_16(259);
+emit_16(193);
+emit_16(259);
+emit_16(192);
+emit_16(259);
+emit_16(193);
+emit_16(260);
+emit_16(194);
+emit_16(260);
+emit_16(193);
+emit_16(260);
+emit_16(194);
+emit_16(261);
+emit_16(195);
+emit_16(261);
+emit_16(194);
+emit_16(261);
+emit_16(195);
+emit_16(262);
+emit_16(196);
+emit_16(262);
+emit_16(195);
+emit_16(262);
+emit_16(196);
+emit_16(263);
+emit_16(197);
+emit_16(263);
+emit_16(196);
+emit_16(264);
+emit_16(198);
+emit_16(265);
+emit_16(199);
+emit_16(265);
+emit_16(198);
+emit_16(265);
+emit_16(199);
+emit_16(266);
+emit_16(200);
+emit_16(266);
+emit_16(199);
+emit_16(266);
+emit_16(200);
+emit_16(267);
+emit_16(201);
+emit_16(267);
+emit_16(200);
+emit_16(267);
+emit_16(201);
+emit_16(268);
+emit_16(202);
+emit_16(268);
+emit_16(201);
+emit_16(268);
+emit_16(202);
+emit_16(269);
+emit_16(203);
+emit_16(269);
+emit_16(202);
+emit_16(269);
+emit_16(203);
+emit_16(270);
+emit_16(204);
+emit_16(270);
+emit_16(203);
+emit_16(270);
+emit_16(204);
+emit_16(271);
+emit_16(205);
+emit_16(271);
+emit_16(204);
+emit_16(271);
+emit_16(205);
+emit_16(272);
+emit_16(206);
+emit_16(272);
+emit_16(205);
+emit_16(272);
+emit_16(206);
+emit_16(273);
+emit_16(207);
+emit_16(273);
+emit_16(206);
+emit_16(273);
+emit_16(207);
+emit_16(274);
+emit_16(208);
+emit_16(274);
+emit_16(207);
+emit_16(274);
+emit_16(208);
+emit_16(275);
+emit_16(209);
+emit_16(275);
+emit_16(208);
+emit_16(275);
+emit_16(209);
+emit_16(276);
+emit_16(210);
+emit_16(276);
+emit_16(209);
+emit_16(276);
+emit_16(210);
+emit_16(277);
+emit_16(211);
+emit_16(277);
+emit_16(210);
+emit_16(277);
+emit_16(211);
+emit_16(278);
+emit_16(212);
+emit_16(278);
+emit_16(211);
+emit_16(278);
+emit_16(212);
+emit_16(279);
+emit_16(213);
+emit_16(279);
+emit_16(212);
+emit_16(279);
+emit_16(213);
+emit_16(280);
+emit_16(214);
+emit_16(280);
+emit_16(213);
+emit_16(280);
+emit_16(214);
+emit_16(281);
+emit_16(215);
+emit_16(281);
+emit_16(214);
+emit_16(281);
+emit_16(215);
+emit_16(282);
+emit_16(216);
+emit_16(282);
+emit_16(215);
+emit_16(282);
+emit_16(216);
+emit_16(283);
+emit_16(217);
+emit_16(283);
+emit_16(216);
+emit_16(283);
+emit_16(217);
+emit_16(284);
+emit_16(218);
+emit_16(284);
+emit_16(217);
+emit_16(284);
+emit_16(218);
+emit_16(285);
+emit_16(219);
+emit_16(285);
+emit_16(218);
+emit_16(285);
+emit_16(219);
+emit_16(286);
+emit_16(220);
+emit_16(286);
+emit_16(219);
+emit_16(286);
+emit_16(220);
+emit_16(287);
+emit_16(221);
+emit_16(287);
+emit_16(220);
+emit_16(287);
+emit_16(221);
+emit_16(288);
+emit_16(222);
+emit_16(288);
+emit_16(221);
+emit_16(288);
+emit_16(222);
+emit_16(289);
+emit_16(223);
+emit_16(289);
+emit_16(222);
+emit_16(289);
+emit_16(223);
+emit_16(290);
+emit_16(224);
+emit_16(290);
+emit_16(223);
+emit_16(290);
+emit_16(224);
+emit_16(291);
+emit_16(225);
+emit_16(291);
+emit_16(224);
+emit_16(291);
+emit_16(225);
+emit_16(292);
+emit_16(226);
+emit_16(292);
+emit_16(225);
+emit_16(292);
+emit_16(226);
+emit_16(293);
+emit_16(227);
+emit_16(293);
+emit_16(226);
+emit_16(293);
+emit_16(227);
+emit_16(294);
+emit_16(228);
+emit_16(294);
+emit_16(227);
+emit_16(294);
+emit_16(228);
+emit_16(295);
+emit_16(229);
+emit_16(295);
+emit_16(228);
+emit_16(295);
+emit_16(229);
+emit_16(296);
+emit_16(230);
+emit_16(296);
+emit_16(229);
+emit_16(296);
+emit_16(230);
+emit_16(297);
+emit_16(231);
+emit_16(297);
+emit_16(230);
+emit_16(297);
+emit_16(231);
+emit_16(298);
+emit_16(232);
+emit_16(298);
+emit_16(231);
+emit_16(298);
+emit_16(232);
+emit_16(299);
+emit_16(233);
+emit_16(299);
+emit_16(232);
+emit_16(299);
+emit_16(233);
+emit_16(300);
+emit_16(234);
+emit_16(300);
+emit_16(233);
+emit_16(300);
+emit_16(234);
+emit_16(301);
+emit_16(235);
+emit_16(301);
+emit_16(234);
+emit_16(301);
+emit_16(235);
+emit_16(302);
+emit_16(236);
+emit_16(302);
+emit_16(235);
+emit_16(302);
+emit_16(236);
+emit_16(303);
+emit_16(237);
+emit_16(303);
+emit_16(236);
+emit_16(303);
+emit_16(237);
+emit_16(304);
+emit_16(238);
+emit_16(304);
+emit_16(237);
+emit_16(304);
+emit_16(238);
+emit_16(305);
+emit_16(239);
+emit_16(305);
+emit_16(238);
+emit_16(305);
+emit_16(239);
+emit_16(306);
+emit_16(240);
+emit_16(306);
+emit_16(239);
+emit_16(306);
+emit_16(240);
+emit_16(307);
+emit_16(241);
+emit_16(307);
+emit_16(240);
+emit_16(307);
+emit_16(241);
+emit_16(308);
+emit_16(242);
+emit_16(308);
+emit_16(241);
+emit_16(308);
+emit_16(242);
+emit_16(309);
+emit_16(243);
+emit_16(309);
+emit_16(242);
+emit_16(309);
+emit_16(243);
+emit_16(310);
+emit_16(244);
+emit_16(310);
+emit_16(243);
+emit_16(310);
+emit_16(244);
+emit_16(311);
+emit_16(245);
+emit_16(311);
+emit_16(244);
+emit_16(311);
+emit_16(245);
+emit_16(312);
+emit_16(246);
+emit_16(312);
+emit_16(245);
+emit_16(312);
+emit_16(246);
+emit_16(313);
+emit_16(247);
+emit_16(313);
+emit_16(246);
+emit_16(313);
+emit_16(247);
+emit_16(314);
+emit_16(248);
+emit_16(314);
+emit_16(247);
+emit_16(314);
+emit_16(248);
+emit_16(315);
+emit_16(249);
+emit_16(315);
+emit_16(248);
+emit_16(315);
+emit_16(249);
+emit_16(316);
+emit_16(250);
+emit_16(316);
+emit_16(249);
+emit_16(316);
+emit_16(250);
+emit_16(317);
+emit_16(251);
+emit_16(317);
+emit_16(250);
+emit_16(317);
+emit_16(251);
+emit_16(318);
+emit_16(252);
+emit_16(318);
+emit_16(251);
+emit_16(318);
+emit_16(252);
+emit_16(319);
+emit_16(253);
+emit_16(319);
+emit_16(252);
+emit_16(319);
+emit_16(253);
+emit_16(320);
+emit_16(254);
+emit_16(320);
+emit_16(253);
+emit_16(320);
+emit_16(254);
+emit_16(321);
+emit_16(255);
+emit_16(321);
+emit_16(254);
+emit_16(321);
+emit_16(255);
+emit_16(322);
+emit_16(256);
+emit_16(322);
+emit_16(255);
+emit_16(322);
+emit_16(256);
+emit_16(323);
+emit_16(257);
+emit_16(323);
+emit_16(256);
+emit_16(323);
+emit_16(257);
+emit_16(324);
+emit_16(258);
+emit_16(324);
+emit_16(257);
+emit_16(324);
+emit_16(258);
+emit_16(325);
+emit_16(259);
+emit_16(325);
+emit_16(258);
+emit_16(325);
+emit_16(259);
+emit_16(326);
+emit_16(260);
+emit_16(326);
+emit_16(259);
+emit_16(326);
+emit_16(260);
+emit_16(327);
+emit_16(261);
+emit_16(327);
+emit_16(260);
+emit_16(327);
+emit_16(261);
+emit_16(328);
+emit_16(262);
+emit_16(328);
+emit_16(261);
+emit_16(328);
+emit_16(262);
+emit_16(329);
+emit_16(263);
+emit_16(329);
+emit_16(262);
+emit_16(330);
+emit_16(264);
+emit_16(331);
+emit_16(265);
+emit_16(331);
+emit_16(264);
+emit_16(331);
+emit_16(265);
+emit_16(332);
+emit_16(266);
+emit_16(332);
+emit_16(265);
+emit_16(332);
+emit_16(266);
+emit_16(333);
+emit_16(267);
+emit_16(333);
+emit_16(266);
+emit_16(333);
+emit_16(267);
+emit_16(334);
+emit_16(268);
+emit_16(334);
+emit_16(267);
+emit_16(334);
+emit_16(268);
+emit_16(335);
+emit_16(269);
+emit_16(335);
+emit_16(268);
+emit_16(335);
+emit_16(269);
+emit_16(336);
+emit_16(270);
+emit_16(336);
+emit_16(269);
+emit_16(336);
+emit_16(270);
+emit_16(337);
+emit_16(271);
+emit_16(337);
+emit_16(270);
+emit_16(337);
+emit_16(271);
+emit_16(338);
+emit_16(272);
+emit_16(338);
+emit_16(271);
+emit_16(338);
+emit_16(272);
+emit_16(339);
+emit_16(273);
+emit_16(339);
+emit_16(272);
+emit_16(339);
+emit_16(273);
+emit_16(340);
+emit_16(274);
+emit_16(340);
+emit_16(273);
+emit_16(340);
+emit_16(274);
+emit_16(341);
+emit_16(275);
+emit_16(341);
+emit_16(274);
+emit_16(341);
+emit_16(275);
+emit_16(342);
+emit_16(276);
+emit_16(342);
+emit_16(275);
+emit_16(342);
+emit_16(276);
+emit_16(343);
+emit_16(277);
+emit_16(343);
+emit_16(276);
+emit_16(343);
+emit_16(277);
+emit_16(344);
+emit_16(278);
+emit_16(344);
+emit_16(277);
+emit_16(344);
+emit_16(278);
+emit_16(345);
+emit_16(279);
+emit_16(345);
+emit_16(278);
+emit_16(345);
+emit_16(279);
+emit_16(346);
+emit_16(280);
+emit_16(346);
+emit_16(279);
+emit_16(346);
+emit_16(280);
+emit_16(347);
+emit_16(281);
+emit_16(347);
+emit_16(280);
+emit_16(347);
+emit_16(281);
+emit_16(348);
+emit_16(282);
+emit_16(348);
+emit_16(281);
+emit_16(348);
+emit_16(282);
+emit_16(349);
+emit_16(283);
+emit_16(349);
+emit_16(282);
+emit_16(349);
+emit_16(283);
+emit_16(350);
+emit_16(284);
+emit_16(350);
+emit_16(283);
+emit_16(350);
+emit_16(284);
+emit_16(351);
+emit_16(285);
+emit_16(351);
+emit_16(284);
+emit_16(351);
+emit_16(285);
+emit_16(352);
+emit_16(286);
+emit_16(352);
+emit_16(285);
+emit_16(352);
+emit_16(286);
+emit_16(353);
+emit_16(287);
+emit_16(353);
+emit_16(286);
+emit_16(353);
+emit_16(287);
+emit_16(354);
+emit_16(288);
+emit_16(354);
+emit_16(287);
+emit_16(354);
+emit_16(288);
+emit_16(355);
+emit_16(289);
+emit_16(355);
+emit_16(288);
+emit_16(355);
+emit_16(289);
+emit_16(356);
+emit_16(290);
+emit_16(356);
+emit_16(289);
+emit_16(356);
+emit_16(290);
+emit_16(357);
+emit_16(291);
+emit_16(357);
+emit_16(290);
+emit_16(357);
+emit_16(291);
+emit_16(358);
+emit_16(292);
+emit_16(358);
+emit_16(291);
+emit_16(358);
+emit_16(292);
+emit_16(359);
+emit_16(293);
+emit_16(359);
+emit_16(292);
+emit_16(359);
+emit_16(293);
+emit_16(360);
+emit_16(294);
+emit_16(360);
+emit_16(293);
+emit_16(360);
+emit_16(294);
+emit_16(361);
+emit_16(295);
+emit_16(361);
+emit_16(294);
+emit_16(361);
+emit_16(295);
+emit_16(362);
+emit_16(296);
+emit_16(362);
+emit_16(295);
+emit_16(362);
+emit_16(296);
+emit_16(363);
+emit_16(297);
+emit_16(363);
+emit_16(296);
+emit_16(363);
+emit_16(297);
+emit_16(364);
+emit_16(298);
+emit_16(364);
+emit_16(297);
+emit_16(364);
+emit_16(298);
+emit_16(365);
+emit_16(299);
+emit_16(365);
+emit_16(298);
+emit_16(365);
+emit_16(299);
+emit_16(366);
+emit_16(300);
+emit_16(366);
+emit_16(299);
+emit_16(366);
+emit_16(300);
+emit_16(367);
+emit_16(301);
+emit_16(367);
+emit_16(300);
+emit_16(367);
+emit_16(301);
+emit_16(368);
+emit_16(302);
+emit_16(368);
+emit_16(301);
+emit_16(368);
+emit_16(302);
+emit_16(369);
+emit_16(303);
+emit_16(369);
+emit_16(302);
+emit_16(369);
+emit_16(303);
+emit_16(370);
+emit_16(304);
+emit_16(370);
+emit_16(303);
+emit_16(370);
+emit_16(304);
+emit_16(371);
+emit_16(305);
+emit_16(371);
+emit_16(304);
+emit_16(371);
+emit_16(305);
+emit_16(372);
+emit_16(306);
+emit_16(372);
+emit_16(305);
+emit_16(372);
+emit_16(306);
+emit_16(373);
+emit_16(307);
+emit_16(373);
+emit_16(306);
+emit_16(373);
+emit_16(307);
+emit_16(374);
+emit_16(308);
+emit_16(374);
+emit_16(307);
+emit_16(374);
+emit_16(308);
+emit_16(375);
+emit_16(309);
+emit_16(375);
+emit_16(308);
+emit_16(375);
+emit_16(309);
+emit_16(376);
+emit_16(310);
+emit_16(376);
+emit_16(309);
+emit_16(376);
+emit_16(310);
+emit_16(377);
+emit_16(311);
+emit_16(377);
+emit_16(310);
+emit_16(377);
+emit_16(311);
+emit_16(378);
+emit_16(312);
+emit_16(378);
+emit_16(311);
+emit_16(378);
+emit_16(312);
+emit_16(379);
+emit_16(313);
+emit_16(379);
+emit_16(312);
+emit_16(379);
+emit_16(313);
+emit_16(380);
+emit_16(314);
+emit_16(380);
+emit_16(313);
+emit_16(380);
+emit_16(314);
+emit_16(381);
+emit_16(315);
+emit_16(381);
+emit_16(314);
+emit_16(381);
+emit_16(315);
+emit_16(382);
+emit_16(316);
+emit_16(382);
+emit_16(315);
+emit_16(382);
+emit_16(316);
+emit_16(383);
+emit_16(317);
+emit_16(383);
+emit_16(316);
+emit_16(383);
+emit_16(317);
+emit_16(384);
+emit_16(318);
+emit_16(384);
+emit_16(317);
+emit_16(384);
+emit_16(318);
+emit_16(385);
+emit_16(319);
+emit_16(385);
+emit_16(318);
+emit_16(385);
+emit_16(319);
+emit_16(386);
+emit_16(320);
+emit_16(386);
+emit_16(319);
+emit_16(386);
+emit_16(320);
+emit_16(387);
+emit_16(321);
+emit_16(387);
+emit_16(320);
+emit_16(387);
+emit_16(321);
+emit_16(388);
+emit_16(322);
+emit_16(388);
+emit_16(321);
+emit_16(388);
+emit_16(322);
+emit_16(389);
+emit_16(323);
+emit_16(389);
+emit_16(322);
+emit_16(389);
+emit_16(323);
+emit_16(390);
+emit_16(324);
+emit_16(390);
+emit_16(323);
+emit_16(390);
+emit_16(324);
+emit_16(391);
+emit_16(325);
+emit_16(391);
+emit_16(324);
+emit_16(391);
+emit_16(325);
+emit_16(392);
+emit_16(326);
+emit_16(392);
+emit_16(325);
+emit_16(392);
+emit_16(326);
+emit_16(393);
+emit_16(327);
+emit_16(393);
+emit_16(326);
+emit_16(393);
+emit_16(327);
+emit_16(394);
+emit_16(328);
+emit_16(394);
+emit_16(327);
+emit_16(394);
+emit_16(328);
+emit_16(395);
+emit_16(329);
+emit_16(395);
+emit_16(328);
+emit_16(396);
+emit_16(330);
+emit_16(397);
+emit_16(331);
+emit_16(397);
+emit_16(330);
+emit_16(397);
+emit_16(331);
+emit_16(398);
+emit_16(332);
+emit_16(398);
+emit_16(331);
+emit_16(398);
+emit_16(332);
+emit_16(399);
+emit_16(333);
+emit_16(399);
+emit_16(332);
+emit_16(399);
+emit_16(333);
+emit_16(400);
+emit_16(334);
+emit_16(400);
+emit_16(333);
+emit_16(400);
+emit_16(334);
+emit_16(401);
+emit_16(335);
+emit_16(401);
+emit_16(334);
+emit_16(401);
+emit_16(335);
+emit_16(402);
+emit_16(336);
+emit_16(402);
+emit_16(335);
+emit_16(402);
+emit_16(336);
+emit_16(403);
+emit_16(337);
+emit_16(403);
+emit_16(336);
+emit_16(403);
+emit_16(337);
+emit_16(404);
+emit_16(338);
+emit_16(404);
+emit_16(337);
+emit_16(404);
+emit_16(338);
+emit_16(405);
+emit_16(339);
+emit_16(405);
+emit_16(338);
+emit_16(405);
+emit_16(339);
+emit_16(406);
+emit_16(340);
+emit_16(406);
+emit_16(339);
+emit_16(406);
+emit_16(340);
+emit_16(407);
+emit_16(341);
+emit_16(407);
+emit_16(340);
+emit_16(407);
+emit_16(341);
+emit_16(408);
+emit_16(342);
+emit_16(408);
+emit_16(341);
+emit_16(408);
+emit_16(342);
+emit_16(409);
+emit_16(343);
+emit_16(409);
+emit_16(342);
+emit_16(409);
+emit_16(343);
+emit_16(410);
+emit_16(344);
+emit_16(410);
+emit_16(343);
+emit_16(410);
+emit_16(344);
+emit_16(411);
+emit_16(345);
+emit_16(411);
+emit_16(344);
+emit_16(411);
+emit_16(345);
+emit_16(412);
+emit_16(346);
+emit_16(412);
+emit_16(345);
+emit_16(412);
+emit_16(346);
+emit_16(413);
+emit_16(347);
+emit_16(413);
+emit_16(346);
+emit_16(413);
+emit_16(347);
+emit_16(414);
+emit_16(348);
+emit_16(414);
+emit_16(347);
+emit_16(414);
+emit_16(348);
+emit_16(415);
+emit_16(349);
+emit_16(415);
+emit_16(348);
+emit_16(415);
+emit_16(349);
+emit_16(416);
+emit_16(350);
+emit_16(416);
+emit_16(349);
+emit_16(416);
+emit_16(350);
+emit_16(417);
+emit_16(351);
+emit_16(417);
+emit_16(350);
+emit_16(417);
+emit_16(351);
+emit_16(418);
+emit_16(352);
+emit_16(418);
+emit_16(351);
+emit_16(418);
+emit_16(352);
+emit_16(419);
+emit_16(353);
+emit_16(419);
+emit_16(352);
+emit_16(419);
+emit_16(353);
+emit_16(420);
+emit_16(354);
+emit_16(420);
+emit_16(353);
+emit_16(420);
+emit_16(354);
+emit_16(421);
+emit_16(355);
+emit_16(421);
+emit_16(354);
+emit_16(421);
+emit_16(355);
+emit_16(422);
+emit_16(356);
+emit_16(422);
+emit_16(355);
+emit_16(422);
+emit_16(356);
+emit_16(423);
+emit_16(357);
+emit_16(423);
+emit_16(356);
+emit_16(423);
+emit_16(357);
+emit_16(424);
+emit_16(358);
+emit_16(424);
+emit_16(357);
+emit_16(424);
+emit_16(358);
+emit_16(425);
+emit_16(359);
+emit_16(425);
+emit_16(358);
+emit_16(425);
+emit_16(359);
+emit_16(426);
+emit_16(360);
+emit_16(426);
+emit_16(359);
+emit_16(426);
+emit_16(360);
+emit_16(427);
+emit_16(361);
+emit_16(427);
+emit_16(360);
+emit_16(427);
+emit_16(361);
+emit_16(428);
+emit_16(362);
+emit_16(428);
+emit_16(361);
+emit_16(428);
+emit_16(362);
+emit_16(429);
+emit_16(363);
+emit_16(429);
+emit_16(362);
+emit_16(429);
+emit_16(363);
+emit_16(430);
+emit_16(364);
+emit_16(430);
+emit_16(363);
+emit_16(430);
+emit_16(364);
+emit_16(431);
+emit_16(365);
+emit_16(431);
+emit_16(364);
+emit_16(431);
+emit_16(365);
+emit_16(432);
+emit_16(366);
+emit_16(432);
+emit_16(365);
+emit_16(432);
+emit_16(366);
+emit_16(433);
+emit_16(367);
+emit_16(433);
+emit_16(366);
+emit_16(433);
+emit_16(367);
+emit_16(434);
+emit_16(368);
+emit_16(434);
+emit_16(367);
+emit_16(434);
+emit_16(368);
+emit_16(435);
+emit_16(369);
+emit_16(435);
+emit_16(368);
+emit_16(435);
+emit_16(369);
+emit_16(436);
+emit_16(370);
+emit_16(436);
+emit_16(369);
+emit_16(436);
+emit_16(370);
+emit_16(437);
+emit_16(371);
+emit_16(437);
+emit_16(370);
+emit_16(437);
+emit_16(371);
+emit_16(438);
+emit_16(372);
+emit_16(438);
+emit_16(371);
+emit_16(438);
+emit_16(372);
+emit_16(439);
+emit_16(373);
+emit_16(439);
+emit_16(372);
+emit_16(439);
+emit_16(373);
+emit_16(440);
+emit_16(374);
+emit_16(440);
+emit_16(373);
+emit_16(440);
+emit_16(374);
+emit_16(441);
+emit_16(375);
+emit_16(441);
+emit_16(374);
+emit_16(441);
+emit_16(375);
+emit_16(442);
+emit_16(376);
+emit_16(442);
+emit_16(375);
+emit_16(442);
+emit_16(376);
+emit_16(443);
+emit_16(377);
+emit_16(443);
+emit_16(376);
+emit_16(443);
+emit_16(377);
+emit_16(444);
+emit_16(378);
+emit_16(444);
+emit_16(377);
+emit_16(444);
+emit_16(378);
+emit_16(445);
+emit_16(379);
+emit_16(445);
+emit_16(378);
+emit_16(445);
+emit_16(379);
+emit_16(446);
+emit_16(380);
+emit_16(446);
+emit_16(379);
+emit_16(446);
+emit_16(380);
+emit_16(447);
+emit_16(381);
+emit_16(447);
+emit_16(380);
+emit_16(447);
+emit_16(381);
+emit_16(448);
+emit_16(382);
+emit_16(448);
+emit_16(381);
+emit_16(448);
+emit_16(382);
+emit_16(449);
+emit_16(383);
+emit_16(449);
+emit_16(382);
+emit_16(449);
+emit_16(383);
+emit_16(450);
+emit_16(384);
+emit_16(450);
+emit_16(383);
+emit_16(450);
+emit_16(384);
+emit_16(451);
+emit_16(385);
+emit_16(451);
+emit_16(384);
+emit_16(451);
+emit_16(385);
+emit_16(452);
+emit_16(386);
+emit_16(452);
+emit_16(385);
+emit_16(452);
+emit_16(386);
+emit_16(453);
+emit_16(387);
+emit_16(453);
+emit_16(386);
+emit_16(453);
+emit_16(387);
+emit_16(454);
+emit_16(388);
+emit_16(454);
+emit_16(387);
+emit_16(454);
+emit_16(388);
+emit_16(455);
+emit_16(389);
+emit_16(455);
+emit_16(388);
+emit_16(455);
+emit_16(389);
+emit_16(456);
+emit_16(390);
+emit_16(456);
+emit_16(389);
+emit_16(456);
+emit_16(390);
+emit_16(457);
+emit_16(391);
+emit_16(457);
+emit_16(390);
+emit_16(457);
+emit_16(391);
+emit_16(458);
+emit_16(392);
+emit_16(458);
+emit_16(391);
+emit_16(458);
+emit_16(392);
+emit_16(459);
+emit_16(393);
+emit_16(459);
+emit_16(392);
+emit_16(459);
+emit_16(393);
+emit_16(460);
+emit_16(394);
+emit_16(460);
+emit_16(393);
+emit_16(460);
+emit_16(394);
+emit_16(461);
+emit_16(395);
+emit_16(461);
+emit_16(394);
+emit_16(462);
+emit_16(396);
+emit_16(463);
+emit_16(397);
+emit_16(463);
+emit_16(396);
+emit_16(463);
+emit_16(397);
+emit_16(464);
+emit_16(398);
+emit_16(464);
+emit_16(397);
+emit_16(464);
+emit_16(398);
+emit_16(465);
+emit_16(399);
+emit_16(465);
+emit_16(398);
+emit_16(465);
+emit_16(399);
+emit_16(466);
+emit_16(400);
+emit_16(466);
+emit_16(399);
+emit_16(466);
+emit_16(400);
+emit_16(467);
+emit_16(401);
+emit_16(467);
+emit_16(400);
+emit_16(467);
+emit_16(401);
+emit_16(468);
+emit_16(402);
+emit_16(468);
+emit_16(401);
+emit_16(468);
+emit_16(402);
+emit_16(469);
+emit_16(403);
+emit_16(469);
+emit_16(402);
+emit_16(469);
+emit_16(403);
+emit_16(470);
+emit_16(404);
+emit_16(470);
+emit_16(403);
+emit_16(470);
+emit_16(404);
+emit_16(471);
+emit_16(405);
+emit_16(471);
+emit_16(404);
+emit_16(471);
+emit_16(405);
+emit_16(472);
+emit_16(406);
+emit_16(472);
+emit_16(405);
+emit_16(472);
+emit_16(406);
+emit_16(473);
+emit_16(407);
+emit_16(473);
+emit_16(406);
+emit_16(473);
+emit_16(407);
+emit_16(474);
+emit_16(408);
+emit_16(474);
+emit_16(407);
+emit_16(474);
+emit_16(408);
+emit_16(475);
+emit_16(409);
+emit_16(475);
+emit_16(408);
+emit_16(475);
+emit_16(409);
+emit_16(476);
+emit_16(410);
+emit_16(476);
+emit_16(409);
+emit_16(476);
+emit_16(410);
+emit_16(477);
+emit_16(411);
+emit_16(477);
+emit_16(410);
+emit_16(477);
+emit_16(411);
+emit_16(478);
+emit_16(412);
+emit_16(478);
+emit_16(411);
+emit_16(478);
+emit_16(412);
+emit_16(479);
+emit_16(413);
+emit_16(479);
+emit_16(412);
+emit_16(479);
+emit_16(413);
+emit_16(480);
+emit_16(414);
+emit_16(480);
+emit_16(413);
+emit_16(480);
+emit_16(414);
+emit_16(481);
+emit_16(415);
+emit_16(481);
+emit_16(414);
+emit_16(481);
+emit_16(415);
+emit_16(482);
+emit_16(416);
+emit_16(482);
+emit_16(415);
+emit_16(482);
+emit_16(416);
+emit_16(483);
+emit_16(417);
+emit_16(483);
+emit_16(416);
+emit_16(483);
+emit_16(417);
+emit_16(484);
+emit_16(418);
+emit_16(484);
+emit_16(417);
+emit_16(484);
+emit_16(418);
+emit_16(485);
+emit_16(419);
+emit_16(485);
+emit_16(418);
+emit_16(485);
+emit_16(419);
+emit_16(486);
+emit_16(420);
+emit_16(486);
+emit_16(419);
+emit_16(486);
+emit_16(420);
+emit_16(487);
+emit_16(421);
+emit_16(487);
+emit_16(420);
+emit_16(487);
+emit_16(421);
+emit_16(488);
+emit_16(422);
+emit_16(488);
+emit_16(421);
+emit_16(488);
+emit_16(422);
+emit_16(489);
+emit_16(423);
+emit_16(489);
+emit_16(422);
+emit_16(489);
+emit_16(423);
+emit_16(490);
+emit_16(424);
+emit_16(490);
+emit_16(423);
+emit_16(490);
+emit_16(424);
+emit_16(491);
+emit_16(425);
+emit_16(491);
+emit_16(424);
+emit_16(491);
+emit_16(425);
+emit_16(492);
+emit_16(426);
+emit_16(492);
+emit_16(425);
+emit_16(492);
+emit_16(426);
+emit_16(493);
+emit_16(427);
+emit_16(493);
+emit_16(426);
+emit_16(493);
+emit_16(427);
+emit_16(494);
+emit_16(428);
+emit_16(494);
+emit_16(427);
+emit_16(494);
+emit_16(428);
+emit_16(495);
+emit_16(429);
+emit_16(495);
+emit_16(428);
+emit_16(495);
+emit_16(429);
+emit_16(496);
+emit_16(430);
+emit_16(496);
+emit_16(429);
+emit_16(496);
+emit_16(430);
+emit_16(497);
+emit_16(431);
+emit_16(497);
+emit_16(430);
+emit_16(497);
+emit_16(431);
+emit_16(498);
+emit_16(432);
+emit_16(498);
+emit_16(431);
+emit_16(498);
+emit_16(432);
+emit_16(499);
+emit_16(433);
+emit_16(499);
+emit_16(432);
+emit_16(499);
+emit_16(433);
+emit_16(500);
+emit_16(434);
+emit_16(500);
+emit_16(433);
+emit_16(500);
+emit_16(434);
+emit_16(501);
+emit_16(435);
+emit_16(501);
+emit_16(434);
+emit_16(501);
+emit_16(435);
+emit_16(502);
+emit_16(436);
+emit_16(502);
+emit_16(435);
+emit_16(502);
+emit_16(436);
+emit_16(503);
+emit_16(437);
+emit_16(503);
+emit_16(436);
+emit_16(503);
+emit_16(437);
+emit_16(504);
+emit_16(438);
+emit_16(504);
+emit_16(437);
+emit_16(504);
+emit_16(438);
+emit_16(505);
+emit_16(439);
+emit_16(505);
+emit_16(438);
+emit_16(505);
+emit_16(439);
+emit_16(506);
+emit_16(440);
+emit_16(506);
+emit_16(439);
+emit_16(506);
+emit_16(440);
+emit_16(507);
+emit_16(441);
+emit_16(507);
+emit_16(440);
+emit_16(507);
+emit_16(441);
+emit_16(508);
+emit_16(442);
+emit_16(508);
+emit_16(441);
+emit_16(508);
+emit_16(442);
+emit_16(509);
+emit_16(443);
+emit_16(509);
+emit_16(442);
+emit_16(509);
+emit_16(443);
+emit_16(510);
+emit_16(444);
+emit_16(510);
+emit_16(443);
+emit_16(510);
+emit_16(444);
+emit_16(511);
+emit_16(445);
+emit_16(511);
+emit_16(444);
+emit_16(511);
+emit_16(445);
+emit_16(512);
+emit_16(446);
+emit_16(512);
+emit_16(445);
+emit_16(512);
+emit_16(446);
+emit_16(513);
+emit_16(447);
+emit_16(513);
+emit_16(446);
+emit_16(513);
+emit_16(447);
+emit_16(514);
+emit_16(448);
+emit_16(514);
+emit_16(447);
+emit_16(514);
+emit_16(448);
+emit_16(515);
+emit_16(449);
+emit_16(515);
+emit_16(448);
+emit_16(515);
+emit_16(449);
+emit_16(516);
+emit_16(450);
+emit_16(516);
+emit_16(449);
+emit_16(516);
+emit_16(450);
+emit_16(517);
+emit_16(451);
+emit_16(517);
+emit_16(450);
+emit_16(517);
+emit_16(451);
+emit_16(518);
+emit_16(452);
+emit_16(518);
+emit_16(451);
+emit_16(518);
+emit_16(452);
+emit_16(519);
+emit_16(453);
+emit_16(519);
+emit_16(452);
+emit_16(519);
+emit_16(453);
+emit_16(520);
+emit_16(454);
+emit_16(520);
+emit_16(453);
+emit_16(520);
+emit_16(454);
+emit_16(521);
+emit_16(455);
+emit_16(521);
+emit_16(454);
+emit_16(521);
+emit_16(455);
+emit_16(522);
+emit_16(456);
+emit_16(522);
+emit_16(455);
+emit_16(522);
+emit_16(456);
+emit_16(523);
+emit_16(457);
+emit_16(523);
+emit_16(456);
+emit_16(523);
+emit_16(457);
+emit_16(524);
+emit_16(458);
+emit_16(524);
+emit_16(457);
+emit_16(524);
+emit_16(458);
+emit_16(525);
+emit_16(459);
+emit_16(525);
+emit_16(458);
+emit_16(525);
+emit_16(459);
+emit_16(526);
+emit_16(460);
+emit_16(526);
+emit_16(459);
+emit_16(526);
+emit_16(460);
+emit_16(527);
+emit_16(461);
+emit_16(527);
+emit_16(460);
+emit_16(528);
+emit_16(462);
+emit_16(529);
+emit_16(463);
+emit_16(529);
+emit_16(462);
+emit_16(529);
+emit_16(463);
+emit_16(530);
+emit_16(464);
+emit_16(530);
+emit_16(463);
+emit_16(530);
+emit_16(464);
+emit_16(531);
+emit_16(465);
+emit_16(531);
+emit_16(464);
+emit_16(531);
+emit_16(465);
+emit_16(532);
+emit_16(466);
+emit_16(532);
+emit_16(465);
+emit_16(532);
+emit_16(466);
+emit_16(533);
+emit_16(467);
+emit_16(533);
+emit_16(466);
+emit_16(533);
+emit_16(467);
+emit_16(534);
+emit_16(468);
+emit_16(534);
+emit_16(467);
+emit_16(534);
+emit_16(468);
+emit_16(535);
+emit_16(469);
+emit_16(535);
+emit_16(468);
+emit_16(535);
+emit_16(469);
+emit_16(536);
+emit_16(470);
+emit_16(536);
+emit_16(469);
+emit_16(536);
+emit_16(470);
+emit_16(537);
+emit_16(471);
+emit_16(537);
+emit_16(470);
+emit_16(537);
+emit_16(471);
+emit_16(538);
+emit_16(472);
+emit_16(538);
+emit_16(471);
+emit_16(538);
+emit_16(472);
+emit_16(539);
+emit_16(473);
+emit_16(539);
+emit_16(472);
+emit_16(539);
+emit_16(473);
+emit_16(540);
+emit_16(474);
+emit_16(540);
+emit_16(473);
+emit_16(540);
+emit_16(474);
+emit_16(541);
+emit_16(475);
+emit_16(541);
+emit_16(474);
+emit_16(541);
+emit_16(475);
+emit_16(542);
+emit_16(476);
+emit_16(542);
+emit_16(475);
+emit_16(542);
+emit_16(476);
+emit_16(543);
+emit_16(477);
+emit_16(543);
+emit_16(476);
+emit_16(543);
+emit_16(477);
+emit_16(544);
+emit_16(478);
+emit_16(544);
+emit_16(477);
+emit_16(544);
+emit_16(478);
+emit_16(545);
+emit_16(479);
+emit_16(545);
+emit_16(478);
+emit_16(545);
+emit_16(479);
+emit_16(546);
+emit_16(480);
+emit_16(546);
+emit_16(479);
+emit_16(546);
+emit_16(480);
+emit_16(547);
+emit_16(481);
+emit_16(547);
+emit_16(480);
+emit_16(547);
+emit_16(481);
+emit_16(548);
+emit_16(482);
+emit_16(548);
+emit_16(481);
+emit_16(548);
+emit_16(482);
+emit_16(549);
+emit_16(483);
+emit_16(549);
+emit_16(482);
+emit_16(549);
+emit_16(483);
+emit_16(550);
+emit_16(484);
+emit_16(550);
+emit_16(483);
+emit_16(550);
+emit_16(484);
+emit_16(551);
+emit_16(485);
+emit_16(551);
+emit_16(484);
+emit_16(551);
+emit_16(485);
+emit_16(552);
+emit_16(486);
+emit_16(552);
+emit_16(485);
+emit_16(552);
+emit_16(486);
+emit_16(553);
+emit_16(487);
+emit_16(553);
+emit_16(486);
+emit_16(553);
+emit_16(487);
+emit_16(554);
+emit_16(488);
+emit_16(554);
+emit_16(487);
+emit_16(554);
+emit_16(488);
+emit_16(555);
+emit_16(489);
+emit_16(555);
+emit_16(488);
+emit_16(555);
+emit_16(489);
+emit_16(556);
+emit_16(490);
+emit_16(556);
+emit_16(489);
+emit_16(556);
+emit_16(490);
+emit_16(557);
+emit_16(491);
+emit_16(557);
+emit_16(490);
+emit_16(557);
+emit_16(491);
+emit_16(558);
+emit_16(492);
+emit_16(558);
+emit_16(491);
+emit_16(558);
+emit_16(492);
+emit_16(559);
+emit_16(493);
+emit_16(559);
+emit_16(492);
+emit_16(559);
+emit_16(493);
+emit_16(560);
+emit_16(494);
+emit_16(560);
+emit_16(493);
+emit_16(560);
+emit_16(494);
+emit_16(561);
+emit_16(495);
+emit_16(561);
+emit_16(494);
+emit_16(561);
+emit_16(495);
+emit_16(562);
+emit_16(496);
+emit_16(562);
+emit_16(495);
+emit_16(562);
+emit_16(496);
+emit_16(563);
+emit_16(497);
+emit_16(563);
+emit_16(496);
+emit_16(563);
+emit_16(497);
+emit_16(564);
+emit_16(498);
+emit_16(564);
+emit_16(497);
+emit_16(564);
+emit_16(498);
+emit_16(565);
+emit_16(499);
+emit_16(565);
+emit_16(498);
+emit_16(565);
+emit_16(499);
+emit_16(566);
+emit_16(500);
+emit_16(566);
+emit_16(499);
+emit_16(566);
+emit_16(500);
+emit_16(567);
+emit_16(501);
+emit_16(567);
+emit_16(500);
+emit_16(567);
+emit_16(501);
+emit_16(568);
+emit_16(502);
+emit_16(568);
+emit_16(501);
+emit_16(568);
+emit_16(502);
+emit_16(569);
+emit_16(503);
+emit_16(569);
+emit_16(502);
+emit_16(569);
+emit_16(503);
+emit_16(570);
+emit_16(504);
+emit_16(570);
+emit_16(503);
+emit_16(570);
+emit_16(504);
+emit_16(571);
+emit_16(505);
+emit_16(571);
+emit_16(504);
+emit_16(571);
+emit_16(505);
+emit_16(572);
+emit_16(506);
+emit_16(572);
+emit_16(505);
+emit_16(572);
+emit_16(506);
+emit_16(573);
+emit_16(507);
+emit_16(573);
+emit_16(506);
+emit_16(573);
+emit_16(507);
+emit_16(574);
+emit_16(508);
+emit_16(574);
+emit_16(507);
+emit_16(574);
+emit_16(508);
+emit_16(575);
+emit_16(509);
+emit_16(575);
+emit_16(508);
+emit_16(575);
+emit_16(509);
+emit_16(576);
+emit_16(510);
+emit_16(576);
+emit_16(509);
+emit_16(576);
+emit_16(510);
+emit_16(577);
+emit_16(511);
+emit_16(577);
+emit_16(510);
+emit_16(577);
+emit_16(511);
+emit_16(578);
+emit_16(512);
+emit_16(578);
+emit_16(511);
+emit_16(578);
+emit_16(512);
+emit_16(579);
+emit_16(513);
+emit_16(579);
+emit_16(512);
+emit_16(579);
+emit_16(513);
+emit_16(580);
+emit_16(514);
+emit_16(580);
+emit_16(513);
+emit_16(580);
+emit_16(514);
+emit_16(581);
+emit_16(515);
+emit_16(581);
+emit_16(514);
+emit_16(581);
+emit_16(515);
+emit_16(582);
+emit_16(516);
+emit_16(582);
+emit_16(515);
+emit_16(582);
+emit_16(516);
+emit_16(583);
+emit_16(517);
+emit_16(583);
+emit_16(516);
+emit_16(583);
+emit_16(517);
+emit_16(584);
+emit_16(518);
+emit_16(584);
+emit_16(517);
+emit_16(584);
+emit_16(518);
+emit_16(585);
+emit_16(519);
+emit_16(585);
+emit_16(518);
+emit_16(585);
+emit_16(519);
+emit_16(586);
+emit_16(520);
+emit_16(586);
+emit_16(519);
+emit_16(586);
+emit_16(520);
+emit_16(587);
+emit_16(521);
+emit_16(587);
+emit_16(520);
+emit_16(587);
+emit_16(521);
+emit_16(588);
+emit_16(522);
+emit_16(588);
+emit_16(521);
+emit_16(588);
+emit_16(522);
+emit_16(589);
+emit_16(523);
+emit_16(589);
+emit_16(522);
+emit_16(589);
+emit_16(523);
+emit_16(590);
+emit_16(524);
+emit_16(590);
+emit_16(523);
+emit_16(590);
+emit_16(524);
+emit_16(591);
+emit_16(525);
+emit_16(591);
+emit_16(524);
+emit_16(591);
+emit_16(525);
+emit_16(592);
+emit_16(526);
+emit_16(592);
+emit_16(525);
+emit_16(592);
+emit_16(526);
+emit_16(593);
+emit_16(527);
+emit_16(593);
+emit_16(526);
+emit_16(594);
+emit_16(528);
+emit_16(595);
+emit_16(529);
+emit_16(595);
+emit_16(528);
+emit_16(595);
+emit_16(529);
+emit_16(596);
+emit_16(530);
+emit_16(596);
+emit_16(529);
+emit_16(596);
+emit_16(530);
+emit_16(597);
+emit_16(531);
+emit_16(597);
+emit_16(530);
+emit_16(597);
+emit_16(531);
+emit_16(598);
+emit_16(532);
+emit_16(598);
+emit_16(531);
+emit_16(598);
+emit_16(532);
+emit_16(599);
+emit_16(533);
+emit_16(599);
+emit_16(532);
+emit_16(599);
+emit_16(533);
+emit_16(600);
+emit_16(534);
+emit_16(600);
+emit_16(533);
+emit_16(600);
+emit_16(534);
+emit_16(601);
+emit_16(535);
+emit_16(601);
+emit_16(534);
+emit_16(601);
+emit_16(535);
+emit_16(602);
+emit_16(536);
+emit_16(602);
+emit_16(535);
+emit_16(602);
+emit_16(536);
+emit_16(603);
+emit_16(537);
+emit_16(603);
+emit_16(536);
+emit_16(603);
+emit_16(537);
+emit_16(604);
+emit_16(538);
+emit_16(604);
+emit_16(537);
+emit_16(604);
+emit_16(538);
+emit_16(605);
+emit_16(539);
+emit_16(605);
+emit_16(538);
+emit_16(605);
+emit_16(539);
+emit_16(606);
+emit_16(540);
+emit_16(606);
+emit_16(539);
+emit_16(606);
+emit_16(540);
+emit_16(607);
+emit_16(541);
+emit_16(607);
+emit_16(540);
+emit_16(607);
+emit_16(541);
+emit_16(608);
+emit_16(542);
+emit_16(608);
+emit_16(541);
+emit_16(608);
+emit_16(542);
+emit_16(609);
+emit_16(543);
+emit_16(609);
+emit_16(542);
+emit_16(609);
+emit_16(543);
+emit_16(610);
+emit_16(544);
+emit_16(610);
+emit_16(543);
+emit_16(610);
+emit_16(544);
+emit_16(611);
+emit_16(545);
+emit_16(611);
+emit_16(544);
+emit_16(611);
+emit_16(545);
+emit_16(612);
+emit_16(546);
+emit_16(612);
+emit_16(545);
+emit_16(612);
+emit_16(546);
+emit_16(613);
+emit_16(547);
+emit_16(613);
+emit_16(546);
+emit_16(613);
+emit_16(547);
+emit_16(614);
+emit_16(548);
+emit_16(614);
+emit_16(547);
+emit_16(614);
+emit_16(548);
+emit_16(615);
+emit_16(549);
+emit_16(615);
+emit_16(548);
+emit_16(615);
+emit_16(549);
+emit_16(616);
+emit_16(550);
+emit_16(616);
+emit_16(549);
+emit_16(616);
+emit_16(550);
+emit_16(617);
+emit_16(551);
+emit_16(617);
+emit_16(550);
+emit_16(617);
+emit_16(551);
+emit_16(618);
+emit_16(552);
+emit_16(618);
+emit_16(551);
+emit_16(618);
+emit_16(552);
+emit_16(619);
+emit_16(553);
+emit_16(619);
+emit_16(552);
+emit_16(619);
+emit_16(553);
+emit_16(620);
+emit_16(554);
+emit_16(620);
+emit_16(553);
+emit_16(620);
+emit_16(554);
+emit_16(621);
+emit_16(555);
+emit_16(621);
+emit_16(554);
+emit_16(621);
+emit_16(555);
+emit_16(622);
+emit_16(556);
+emit_16(622);
+emit_16(555);
+emit_16(622);
+emit_16(556);
+emit_16(623);
+emit_16(557);
+emit_16(623);
+emit_16(556);
+emit_16(623);
+emit_16(557);
+emit_16(624);
+emit_16(558);
+emit_16(624);
+emit_16(557);
+emit_16(624);
+emit_16(558);
+emit_16(625);
+emit_16(559);
+emit_16(625);
+emit_16(558);
+emit_16(625);
+emit_16(559);
+emit_16(626);
+emit_16(560);
+emit_16(626);
+emit_16(559);
+emit_16(626);
+emit_16(560);
+emit_16(627);
+emit_16(561);
+emit_16(627);
+emit_16(560);
+emit_16(627);
+emit_16(561);
+emit_16(628);
+emit_16(562);
+emit_16(628);
+emit_16(561);
+emit_16(628);
+emit_16(562);
+emit_16(629);
+emit_16(563);
+emit_16(629);
+emit_16(562);
+emit_16(629);
+emit_16(563);
+emit_16(630);
+emit_16(564);
+emit_16(630);
+emit_16(563);
+emit_16(630);
+emit_16(564);
+emit_16(631);
+emit_16(565);
+emit_16(631);
+emit_16(564);
+emit_16(631);
+emit_16(565);
+emit_16(632);
+emit_16(566);
+emit_16(632);
+emit_16(565);
+emit_16(632);
+emit_16(566);
+emit_16(633);
+emit_16(567);
+emit_16(633);
+emit_16(566);
+emit_16(633);
+emit_16(567);
+emit_16(634);
+emit_16(568);
+emit_16(634);
+emit_16(567);
+emit_16(634);
+emit_16(568);
+emit_16(635);
+emit_16(569);
+emit_16(635);
+emit_16(568);
+emit_16(635);
+emit_16(569);
+emit_16(636);
+emit_16(570);
+emit_16(636);
+emit_16(569);
+emit_16(636);
+emit_16(570);
+emit_16(637);
+emit_16(571);
+emit_16(637);
+emit_16(570);
+emit_16(637);
+emit_16(571);
+emit_16(638);
+emit_16(572);
+emit_16(638);
+emit_16(571);
+emit_16(638);
+emit_16(572);
+emit_16(639);
+emit_16(573);
+emit_16(639);
+emit_16(572);
+emit_16(639);
+emit_16(573);
+emit_16(640);
+emit_16(574);
+emit_16(640);
+emit_16(573);
+emit_16(640);
+emit_16(574);
+emit_16(641);
+emit_16(575);
+emit_16(641);
+emit_16(574);
+emit_16(641);
+emit_16(575);
+emit_16(642);
+emit_16(576);
+emit_16(642);
+emit_16(575);
+emit_16(642);
+emit_16(576);
+emit_16(643);
+emit_16(577);
+emit_16(643);
+emit_16(576);
+emit_16(643);
+emit_16(577);
+emit_16(644);
+emit_16(578);
+emit_16(644);
+emit_16(577);
+emit_16(644);
+emit_16(578);
+emit_16(645);
+emit_16(579);
+emit_16(645);
+emit_16(578);
+emit_16(645);
+emit_16(579);
+emit_16(646);
+emit_16(580);
+emit_16(646);
+emit_16(579);
+emit_16(646);
+emit_16(580);
+emit_16(647);
+emit_16(581);
+emit_16(647);
+emit_16(580);
+emit_16(647);
+emit_16(581);
+emit_16(648);
+emit_16(582);
+emit_16(648);
+emit_16(581);
+emit_16(648);
+emit_16(582);
+emit_16(649);
+emit_16(583);
+emit_16(649);
+emit_16(582);
+emit_16(649);
+emit_16(583);
+emit_16(650);
+emit_16(584);
+emit_16(650);
+emit_16(583);
+emit_16(650);
+emit_16(584);
+emit_16(651);
+emit_16(585);
+emit_16(651);
+emit_16(584);
+emit_16(651);
+emit_16(585);
+emit_16(652);
+emit_16(586);
+emit_16(652);
+emit_16(585);
+emit_16(652);
+emit_16(586);
+emit_16(653);
+emit_16(587);
+emit_16(653);
+emit_16(586);
+emit_16(653);
+emit_16(587);
+emit_16(654);
+emit_16(588);
+emit_16(654);
+emit_16(587);
+emit_16(654);
+emit_16(588);
+emit_16(655);
+emit_16(589);
+emit_16(655);
+emit_16(588);
+emit_16(655);
+emit_16(589);
+emit_16(656);
+emit_16(590);
+emit_16(656);
+emit_16(589);
+emit_16(656);
+emit_16(590);
+emit_16(657);
+emit_16(591);
+emit_16(657);
+emit_16(590);
+emit_16(657);
+emit_16(591);
+emit_16(658);
+emit_16(592);
+emit_16(658);
+emit_16(591);
+emit_16(658);
+emit_16(592);
+emit_16(659);
+emit_16(593);
+emit_16(659);
+emit_16(592);
+emit_16(660);
+emit_16(594);
+emit_16(661);
+emit_16(595);
+emit_16(661);
+emit_16(594);
+emit_16(661);
+emit_16(595);
+emit_16(662);
+emit_16(596);
+emit_16(662);
+emit_16(595);
+emit_16(662);
+emit_16(596);
+emit_16(663);
+emit_16(597);
+emit_16(663);
+emit_16(596);
+emit_16(663);
+emit_16(597);
+emit_16(664);
+emit_16(598);
+emit_16(664);
+emit_16(597);
+emit_16(664);
+emit_16(598);
+emit_16(665);
+emit_16(599);
+emit_16(665);
+emit_16(598);
+emit_16(665);
+emit_16(599);
+emit_16(666);
+emit_16(600);
+emit_16(666);
+emit_16(599);
+emit_16(666);
+emit_16(600);
+emit_16(667);
+emit_16(601);
+emit_16(667);
+emit_16(600);
+emit_16(667);
+emit_16(601);
+emit_16(668);
+emit_16(602);
+emit_16(668);
+emit_16(601);
+emit_16(668);
+emit_16(602);
+emit_16(669);
+emit_16(603);
+emit_16(669);
+emit_16(602);
+emit_16(669);
+emit_16(603);
+emit_16(670);
+emit_16(604);
+emit_16(670);
+emit_16(603);
+emit_16(670);
+emit_16(604);
+emit_16(671);
+emit_16(605);
+emit_16(671);
+emit_16(604);
+emit_16(671);
+emit_16(605);
+emit_16(672);
+emit_16(606);
+emit_16(672);
+emit_16(605);
+emit_16(672);
+emit_16(606);
+emit_16(673);
+emit_16(607);
+emit_16(673);
+emit_16(606);
+emit_16(673);
+emit_16(607);
+emit_16(674);
+emit_16(608);
+emit_16(674);
+emit_16(607);
+emit_16(674);
+emit_16(608);
+emit_16(675);
+emit_16(609);
+emit_16(675);
+emit_16(608);
+emit_16(675);
+emit_16(609);
+emit_16(676);
+emit_16(610);
+emit_16(676);
+emit_16(609);
+emit_16(676);
+emit_16(610);
+emit_16(677);
+emit_16(611);
+emit_16(677);
+emit_16(610);
+emit_16(677);
+emit_16(611);
+emit_16(678);
+emit_16(612);
+emit_16(678);
+emit_16(611);
+emit_16(678);
+emit_16(612);
+emit_16(679);
+emit_16(613);
+emit_16(679);
+emit_16(612);
+emit_16(679);
+emit_16(613);
+emit_16(680);
+emit_16(614);
+emit_16(680);
+emit_16(613);
+emit_16(680);
+emit_16(614);
+emit_16(681);
+emit_16(615);
+emit_16(681);
+emit_16(614);
+emit_16(681);
+emit_16(615);
+emit_16(682);
+emit_16(616);
+emit_16(682);
+emit_16(615);
+emit_16(682);
+emit_16(616);
+emit_16(683);
+emit_16(617);
+emit_16(683);
+emit_16(616);
+emit_16(683);
+emit_16(617);
+emit_16(684);
+emit_16(618);
+emit_16(684);
+emit_16(617);
+emit_16(684);
+emit_16(618);
+emit_16(685);
+emit_16(619);
+emit_16(685);
+emit_16(618);
+emit_16(685);
+emit_16(619);
+emit_16(686);
+emit_16(620);
+emit_16(686);
+emit_16(619);
+emit_16(686);
+emit_16(620);
+emit_16(687);
+emit_16(621);
+emit_16(687);
+emit_16(620);
+emit_16(687);
+emit_16(621);
+emit_16(688);
+emit_16(622);
+emit_16(688);
+emit_16(621);
+emit_16(688);
+emit_16(622);
+emit_16(689);
+emit_16(623);
+emit_16(689);
+emit_16(622);
+emit_16(689);
+emit_16(623);
+emit_16(690);
+emit_16(624);
+emit_16(690);
+emit_16(623);
+emit_16(690);
+emit_16(624);
+emit_16(691);
+emit_16(625);
+emit_16(691);
+emit_16(624);
+emit_16(691);
+emit_16(625);
+emit_16(692);
+emit_16(626);
+emit_16(692);
+emit_16(625);
+emit_16(692);
+emit_16(626);
+emit_16(693);
+emit_16(627);
+emit_16(693);
+emit_16(626);
+emit_16(693);
+emit_16(627);
+emit_16(694);
+emit_16(628);
+emit_16(694);
+emit_16(627);
+emit_16(694);
+emit_16(628);
+emit_16(695);
+emit_16(629);
+emit_16(695);
+emit_16(628);
+emit_16(695);
+emit_16(629);
+emit_16(696);
+emit_16(630);
+emit_16(696);
+emit_16(629);
+emit_16(696);
+emit_16(630);
+emit_16(697);
+emit_16(631);
+emit_16(697);
+emit_16(630);
+emit_16(697);
+emit_16(631);
+emit_16(698);
+emit_16(632);
+emit_16(698);
+emit_16(631);
+emit_16(698);
+emit_16(632);
+emit_16(699);
+emit_16(633);
+emit_16(699);
+emit_16(632);
+emit_16(699);
+emit_16(633);
+emit_16(700);
+emit_16(634);
+emit_16(700);
+emit_16(633);
+emit_16(700);
+emit_16(634);
+emit_16(701);
+emit_16(635);
+emit_16(701);
+emit_16(634);
+emit_16(701);
+emit_16(635);
+emit_16(702);
+emit_16(636);
+emit_16(702);
+emit_16(635);
+emit_16(702);
+emit_16(636);
+emit_16(703);
+emit_16(637);
+emit_16(703);
+emit_16(636);
+emit_16(703);
+emit_16(637);
+emit_16(704);
+emit_16(638);
+emit_16(704);
+emit_16(637);
+emit_16(704);
+emit_16(638);
+emit_16(705);
+emit_16(639);
+emit_16(705);
+emit_16(638);
+emit_16(705);
+emit_16(639);
+emit_16(706);
+emit_16(640);
+emit_16(706);
+emit_16(639);
+emit_16(706);
+emit_16(640);
+emit_16(707);
+emit_16(641);
+emit_16(707);
+emit_16(640);
+emit_16(707);
+emit_16(641);
+emit_16(708);
+emit_16(642);
+emit_16(708);
+emit_16(641);
+emit_16(708);
+emit_16(642);
+emit_16(709);
+emit_16(643);
+emit_16(709);
+emit_16(642);
+emit_16(709);
+emit_16(643);
+emit_16(710);
+emit_16(644);
+emit_16(710);
+emit_16(643);
+emit_16(710);
+emit_16(644);
+emit_16(711);
+emit_16(645);
+emit_16(711);
+emit_16(644);
+emit_16(711);
+emit_16(645);
+emit_16(712);
+emit_16(646);
+emit_16(712);
+emit_16(645);
+emit_16(712);
+emit_16(646);
+emit_16(713);
+emit_16(647);
+emit_16(713);
+emit_16(646);
+emit_16(713);
+emit_16(647);
+emit_16(714);
+emit_16(648);
+emit_16(714);
+emit_16(647);
+emit_16(714);
+emit_16(648);
+emit_16(715);
+emit_16(649);
+emit_16(715);
+emit_16(648);
+emit_16(715);
+emit_16(649);
+emit_16(716);
+emit_16(650);
+emit_16(716);
+emit_16(649);
+emit_16(716);
+emit_16(650);
+emit_16(717);
+emit_16(651);
+emit_16(717);
+emit_16(650);
+emit_16(717);
+emit_16(651);
+emit_16(718);
+emit_16(652);
+emit_16(718);
+emit_16(651);
+emit_16(718);
+emit_16(652);
+emit_16(719);
+emit_16(653);
+emit_16(719);
+emit_16(652);
+emit_16(719);
+emit_16(653);
+emit_16(720);
+emit_16(654);
+emit_16(720);
+emit_16(653);
+emit_16(720);
+emit_16(654);
+emit_16(721);
+emit_16(655);
+emit_16(721);
+emit_16(654);
+emit_16(721);
+emit_16(655);
+emit_16(722);
+emit_16(656);
+emit_16(722);
+emit_16(655);
+emit_16(722);
+emit_16(656);
+emit_16(723);
+emit_16(657);
+emit_16(723);
+emit_16(656);
+emit_16(723);
+emit_16(657);
+emit_16(724);
+emit_16(658);
+emit_16(724);
+emit_16(657);
+emit_16(724);
+emit_16(658);
+emit_16(725);
+emit_16(659);
+emit_16(725);
+emit_16(658);
+emit_16(726);
+emit_16(660);
+emit_16(727);
+emit_16(661);
+emit_16(727);
+emit_16(660);
+emit_16(727);
+emit_16(661);
+emit_16(728);
+emit_16(662);
+emit_16(728);
+emit_16(661);
+emit_16(728);
+emit_16(662);
+emit_16(729);
+emit_16(663);
+emit_16(729);
+emit_16(662);
+emit_16(729);
+emit_16(663);
+emit_16(730);
+emit_16(664);
+emit_16(730);
+emit_16(663);
+emit_16(730);
+emit_16(664);
+emit_16(731);
+emit_16(665);
+emit_16(731);
+emit_16(664);
+emit_16(731);
+emit_16(665);
+emit_16(732);
+emit_16(666);
+emit_16(732);
+emit_16(665);
+emit_16(732);
+emit_16(666);
+emit_16(733);
+emit_16(667);
+emit_16(733);
+emit_16(666);
+emit_16(733);
+emit_16(667);
+emit_16(734);
+emit_16(668);
+emit_16(734);
+emit_16(667);
+emit_16(734);
+emit_16(668);
+emit_16(735);
+emit_16(669);
+emit_16(735);
+emit_16(668);
+emit_16(735);
+emit_16(669);
+emit_16(736);
+emit_16(670);
+emit_16(736);
+emit_16(669);
+emit_16(736);
+emit_16(670);
+emit_16(737);
+emit_16(671);
+emit_16(737);
+emit_16(670);
+emit_16(737);
+emit_16(671);
+emit_16(738);
+emit_16(672);
+emit_16(738);
+emit_16(671);
+emit_16(738);
+emit_16(672);
+emit_16(739);
+emit_16(673);
+emit_16(739);
+emit_16(672);
+emit_16(739);
+emit_16(673);
+emit_16(740);
+emit_16(674);
+emit_16(740);
+emit_16(673);
+emit_16(740);
+emit_16(674);
+emit_16(741);
+emit_16(675);
+emit_16(741);
+emit_16(674);
+emit_16(741);
+emit_16(675);
+emit_16(742);
+emit_16(676);
+emit_16(742);
+emit_16(675);
+emit_16(742);
+emit_16(676);
+emit_16(743);
+emit_16(677);
+emit_16(743);
+emit_16(676);
+emit_16(743);
+emit_16(677);
+emit_16(744);
+emit_16(678);
+emit_16(744);
+emit_16(677);
+emit_16(744);
+emit_16(678);
+emit_16(745);
+emit_16(679);
+emit_16(745);
+emit_16(678);
+emit_16(745);
+emit_16(679);
+emit_16(746);
+emit_16(680);
+emit_16(746);
+emit_16(679);
+emit_16(746);
+emit_16(680);
+emit_16(747);
+emit_16(681);
+emit_16(747);
+emit_16(680);
+emit_16(747);
+emit_16(681);
+emit_16(748);
+emit_16(682);
+emit_16(748);
+emit_16(681);
+emit_16(748);
+emit_16(682);
+emit_16(749);
+emit_16(683);
+emit_16(749);
+emit_16(682);
+emit_16(749);
+emit_16(683);
+emit_16(750);
+emit_16(684);
+emit_16(750);
+emit_16(683);
+emit_16(750);
+emit_16(684);
+emit_16(751);
+emit_16(685);
+emit_16(751);
+emit_16(684);
+emit_16(751);
+emit_16(685);
+emit_16(752);
+emit_16(686);
+emit_16(752);
+emit_16(685);
+emit_16(752);
+emit_16(686);
+emit_16(753);
+emit_16(687);
+emit_16(753);
+emit_16(686);
+emit_16(753);
+emit_16(687);
+emit_16(754);
+emit_16(688);
+emit_16(754);
+emit_16(687);
+emit_16(754);
+emit_16(688);
+emit_16(755);
+emit_16(689);
+emit_16(755);
+emit_16(688);
+emit_16(755);
+emit_16(689);
+emit_16(756);
+emit_16(690);
+emit_16(756);
+emit_16(689);
+emit_16(756);
+emit_16(690);
+emit_16(757);
+emit_16(691);
+emit_16(757);
+emit_16(690);
+emit_16(757);
+emit_16(691);
+emit_16(758);
+emit_16(692);
+emit_16(758);
+emit_16(691);
+emit_16(758);
+emit_16(692);
+emit_16(759);
+emit_16(693);
+emit_16(759);
+emit_16(692);
+emit_16(759);
+emit_16(693);
+emit_16(760);
+emit_16(694);
+emit_16(760);
+emit_16(693);
+emit_16(760);
+emit_16(694);
+emit_16(761);
+emit_16(695);
+emit_16(761);
+emit_16(694);
+emit_16(761);
+emit_16(695);
+emit_16(762);
+emit_16(696);
+emit_16(762);
+emit_16(695);
+emit_16(762);
+emit_16(696);
+emit_16(763);
+emit_16(697);
+emit_16(763);
+emit_16(696);
+emit_16(763);
+emit_16(697);
+emit_16(764);
+emit_16(698);
+emit_16(764);
+emit_16(697);
+emit_16(764);
+emit_16(698);
+emit_16(765);
+emit_16(699);
+emit_16(765);
+emit_16(698);
+emit_16(765);
+emit_16(699);
+emit_16(766);
+emit_16(700);
+emit_16(766);
+emit_16(699);
+emit_16(766);
+emit_16(700);
+emit_16(767);
+emit_16(701);
+emit_16(767);
+emit_16(700);
+emit_16(767);
+emit_16(701);
+emit_16(768);
+emit_16(702);
+emit_16(768);
+emit_16(701);
+emit_16(768);
+emit_16(702);
+emit_16(769);
+emit_16(703);
+emit_16(769);
+emit_16(702);
+emit_16(769);
+emit_16(703);
+emit_16(770);
+emit_16(704);
+emit_16(770);
+emit_16(703);
+emit_16(770);
+emit_16(704);
+emit_16(771);
+emit_16(705);
+emit_16(771);
+emit_16(704);
+emit_16(771);
+emit_16(705);
+emit_16(772);
+emit_16(706);
+emit_16(772);
+emit_16(705);
+emit_16(772);
+emit_16(706);
+emit_16(773);
+emit_16(707);
+emit_16(773);
+emit_16(706);
+emit_16(773);
+emit_16(707);
+emit_16(774);
+emit_16(708);
+emit_16(774);
+emit_16(707);
+emit_16(774);
+emit_16(708);
+emit_16(775);
+emit_16(709);
+emit_16(775);
+emit_16(708);
+emit_16(775);
+emit_16(709);
+emit_16(776);
+emit_16(710);
+emit_16(776);
+emit_16(709);
+emit_16(776);
+emit_16(710);
+emit_16(777);
+emit_16(711);
+emit_16(777);
+emit_16(710);
+emit_16(777);
+emit_16(711);
+emit_16(778);
+emit_16(712);
+emit_16(778);
+emit_16(711);
+emit_16(778);
+emit_16(712);
+emit_16(779);
+emit_16(713);
+emit_16(779);
+emit_16(712);
+emit_16(779);
+emit_16(713);
+emit_16(780);
+emit_16(714);
+emit_16(780);
+emit_16(713);
+emit_16(780);
+emit_16(714);
+emit_16(781);
+emit_16(715);
+emit_16(781);
+emit_16(714);
+emit_16(781);
+emit_16(715);
+emit_16(782);
+emit_16(716);
+emit_16(782);
+emit_16(715);
+emit_16(782);
+emit_16(716);
+emit_16(783);
+emit_16(717);
+emit_16(783);
+emit_16(716);
+emit_16(783);
+emit_16(717);
+emit_16(784);
+emit_16(718);
+emit_16(784);
+emit_16(717);
+emit_16(784);
+emit_16(718);
+emit_16(785);
+emit_16(719);
+emit_16(785);
+emit_16(718);
+emit_16(785);
+emit_16(719);
+emit_16(786);
+emit_16(720);
+emit_16(786);
+emit_16(719);
+emit_16(786);
+emit_16(720);
+emit_16(787);
+emit_16(721);
+emit_16(787);
+emit_16(720);
+emit_16(787);
+emit_16(721);
+emit_16(788);
+emit_16(722);
+emit_16(788);
+emit_16(721);
+emit_16(788);
+emit_16(722);
+emit_16(789);
+emit_16(723);
+emit_16(789);
+emit_16(722);
+emit_16(789);
+emit_16(723);
+emit_16(790);
+emit_16(724);
+emit_16(790);
+emit_16(723);
+emit_16(790);
+emit_16(724);
+emit_16(791);
+emit_16(725);
+emit_16(791);
+emit_16(724);
+emit_16(792);
+emit_16(726);
+emit_16(793);
+emit_16(727);
+emit_16(793);
+emit_16(726);
+emit_16(793);
+emit_16(727);
+emit_16(794);
+emit_16(728);
+emit_16(794);
+emit_16(727);
+emit_16(794);
+emit_16(728);
+emit_16(795);
+emit_16(729);
+emit_16(795);
+emit_16(728);
+emit_16(795);
+emit_16(729);
+emit_16(796);
+emit_16(730);
+emit_16(796);
+emit_16(729);
+emit_16(796);
+emit_16(730);
+emit_16(797);
+emit_16(731);
+emit_16(797);
+emit_16(730);
+emit_16(797);
+emit_16(731);
+emit_16(798);
+emit_16(732);
+emit_16(798);
+emit_16(731);
+emit_16(798);
+emit_16(732);
+emit_16(799);
+emit_16(733);
+emit_16(799);
+emit_16(732);
+emit_16(799);
+emit_16(733);
+emit_16(800);
+emit_16(734);
+emit_16(800);
+emit_16(733);
+emit_16(800);
+emit_16(734);
+emit_16(801);
+emit_16(735);
+emit_16(801);
+emit_16(734);
+emit_16(801);
+emit_16(735);
+emit_16(802);
+emit_16(736);
+emit_16(802);
+emit_16(735);
+emit_16(802);
+emit_16(736);
+emit_16(803);
+emit_16(737);
+emit_16(803);
+emit_16(736);
+emit_16(803);
+emit_16(737);
+emit_16(804);
+emit_16(738);
+emit_16(804);
+emit_16(737);
+emit_16(804);
+emit_16(738);
+emit_16(805);
+emit_16(739);
+emit_16(805);
+emit_16(738);
+emit_16(805);
+emit_16(739);
+emit_16(806);
+emit_16(740);
+emit_16(806);
+emit_16(739);
+emit_16(806);
+emit_16(740);
+emit_16(807);
+emit_16(741);
+emit_16(807);
+emit_16(740);
+emit_16(807);
+emit_16(741);
+emit_16(808);
+emit_16(742);
+emit_16(808);
+emit_16(741);
+emit_16(808);
+emit_16(742);
+emit_16(809);
+emit_16(743);
+emit_16(809);
+emit_16(742);
+emit_16(809);
+emit_16(743);
+emit_16(810);
+emit_16(744);
+emit_16(810);
+emit_16(743);
+emit_16(810);
+emit_16(744);
+emit_16(811);
+emit_16(745);
+emit_16(811);
+emit_16(744);
+emit_16(811);
+emit_16(745);
+emit_16(812);
+emit_16(746);
+emit_16(812);
+emit_16(745);
+emit_16(812);
+emit_16(746);
+emit_16(813);
+emit_16(747);
+emit_16(813);
+emit_16(746);
+emit_16(813);
+emit_16(747);
+emit_16(814);
+emit_16(748);
+emit_16(814);
+emit_16(747);
+emit_16(814);
+emit_16(748);
+emit_16(815);
+emit_16(749);
+emit_16(815);
+emit_16(748);
+emit_16(815);
+emit_16(749);
+emit_16(816);
+emit_16(750);
+emit_16(816);
+emit_16(749);
+emit_16(816);
+emit_16(750);
+emit_16(817);
+emit_16(751);
+emit_16(817);
+emit_16(750);
+emit_16(817);
+emit_16(751);
+emit_16(818);
+emit_16(752);
+emit_16(818);
+emit_16(751);
+emit_16(818);
+emit_16(752);
+emit_16(819);
+emit_16(753);
+emit_16(819);
+emit_16(752);
+emit_16(819);
+emit_16(753);
+emit_16(820);
+emit_16(754);
+emit_16(820);
+emit_16(753);
+emit_16(820);
+emit_16(754);
+emit_16(821);
+emit_16(755);
+emit_16(821);
+emit_16(754);
+emit_16(821);
+emit_16(755);
+emit_16(822);
+emit_16(756);
+emit_16(822);
+emit_16(755);
+emit_16(822);
+emit_16(756);
+emit_16(823);
+emit_16(757);
+emit_16(823);
+emit_16(756);
+emit_16(823);
+emit_16(757);
+emit_16(824);
+emit_16(758);
+emit_16(824);
+emit_16(757);
+emit_16(824);
+emit_16(758);
+emit_16(825);
+emit_16(759);
+emit_16(825);
+emit_16(758);
+emit_16(825);
+emit_16(759);
+emit_16(826);
+emit_16(760);
+emit_16(826);
+emit_16(759);
+emit_16(826);
+emit_16(760);
+emit_16(827);
+emit_16(761);
+emit_16(827);
+emit_16(760);
+emit_16(827);
+emit_16(761);
+emit_16(828);
+emit_16(762);
+emit_16(828);
+emit_16(761);
+emit_16(828);
+emit_16(762);
+emit_16(829);
+emit_16(763);
+emit_16(829);
+emit_16(762);
+emit_16(829);
+emit_16(763);
+emit_16(830);
+emit_16(764);
+emit_16(830);
+emit_16(763);
+emit_16(830);
+emit_16(764);
+emit_16(831);
+emit_16(765);
+emit_16(831);
+emit_16(764);
+emit_16(831);
+emit_16(765);
+emit_16(832);
+emit_16(766);
+emit_16(832);
+emit_16(765);
+emit_16(832);
+emit_16(766);
+emit_16(833);
+emit_16(767);
+emit_16(833);
+emit_16(766);
+emit_16(833);
+emit_16(767);
+emit_16(834);
+emit_16(768);
+emit_16(834);
+emit_16(767);
+emit_16(834);
+emit_16(768);
+emit_16(835);
+emit_16(769);
+emit_16(835);
+emit_16(768);
+emit_16(835);
+emit_16(769);
+emit_16(836);
+emit_16(770);
+emit_16(836);
+emit_16(769);
+emit_16(836);
+emit_16(770);
+emit_16(837);
+emit_16(771);
+emit_16(837);
+emit_16(770);
+emit_16(837);
+emit_16(771);
+emit_16(838);
+emit_16(772);
+emit_16(838);
+emit_16(771);
+emit_16(838);
+emit_16(772);
+emit_16(839);
+emit_16(773);
+emit_16(839);
+emit_16(772);
+emit_16(839);
+emit_16(773);
+emit_16(840);
+emit_16(774);
+emit_16(840);
+emit_16(773);
+emit_16(840);
+emit_16(774);
+emit_16(841);
+emit_16(775);
+emit_16(841);
+emit_16(774);
+emit_16(841);
+emit_16(775);
+emit_16(842);
+emit_16(776);
+emit_16(842);
+emit_16(775);
+emit_16(842);
+emit_16(776);
+emit_16(843);
+emit_16(777);
+emit_16(843);
+emit_16(776);
+emit_16(843);
+emit_16(777);
+emit_16(844);
+emit_16(778);
+emit_16(844);
+emit_16(777);
+emit_16(844);
+emit_16(778);
+emit_16(845);
+emit_16(779);
+emit_16(845);
+emit_16(778);
+emit_16(845);
+emit_16(779);
+emit_16(846);
+emit_16(780);
+emit_16(846);
+emit_16(779);
+emit_16(846);
+emit_16(780);
+emit_16(847);
+emit_16(781);
+emit_16(847);
+emit_16(780);
+emit_16(847);
+emit_16(781);
+emit_16(848);
+emit_16(782);
+emit_16(848);
+emit_16(781);
+emit_16(848);
+emit_16(782);
+emit_16(849);
+emit_16(783);
+emit_16(849);
+emit_16(782);
+emit_16(849);
+emit_16(783);
+emit_16(850);
+emit_16(784);
+emit_16(850);
+emit_16(783);
+emit_16(850);
+emit_16(784);
+emit_16(851);
+emit_16(785);
+emit_16(851);
+emit_16(784);
+emit_16(851);
+emit_16(785);
+emit_16(852);
+emit_16(786);
+emit_16(852);
+emit_16(785);
+emit_16(852);
+emit_16(786);
+emit_16(853);
+emit_16(787);
+emit_16(853);
+emit_16(786);
+emit_16(853);
+emit_16(787);
+emit_16(854);
+emit_16(788);
+emit_16(854);
+emit_16(787);
+emit_16(854);
+emit_16(788);
+emit_16(855);
+emit_16(789);
+emit_16(855);
+emit_16(788);
+emit_16(855);
+emit_16(789);
+emit_16(856);
+emit_16(790);
+emit_16(856);
+emit_16(789);
+emit_16(856);
+emit_16(790);
+emit_16(857);
+emit_16(791);
+emit_16(857);
+emit_16(790);
+emit_16(858);
+emit_16(792);
+emit_16(859);
+emit_16(793);
+emit_16(859);
+emit_16(792);
+emit_16(859);
+emit_16(793);
+emit_16(860);
+emit_16(794);
+emit_16(860);
+emit_16(793);
+emit_16(860);
+emit_16(794);
+emit_16(861);
+emit_16(795);
+emit_16(861);
+emit_16(794);
+emit_16(861);
+emit_16(795);
+emit_16(862);
+emit_16(796);
+emit_16(862);
+emit_16(795);
+emit_16(862);
+emit_16(796);
+emit_16(863);
+emit_16(797);
+emit_16(863);
+emit_16(796);
+emit_16(863);
+emit_16(797);
+emit_16(864);
+emit_16(798);
+emit_16(864);
+emit_16(797);
+emit_16(864);
+emit_16(798);
+emit_16(865);
+emit_16(799);
+emit_16(865);
+emit_16(798);
+emit_16(865);
+emit_16(799);
+emit_16(866);
+emit_16(800);
+emit_16(866);
+emit_16(799);
+emit_16(866);
+emit_16(800);
+emit_16(867);
+emit_16(801);
+emit_16(867);
+emit_16(800);
+emit_16(867);
+emit_16(801);
+emit_16(868);
+emit_16(802);
+emit_16(868);
+emit_16(801);
+emit_16(868);
+emit_16(802);
+emit_16(869);
+emit_16(803);
+emit_16(869);
+emit_16(802);
+emit_16(869);
+emit_16(803);
+emit_16(870);
+emit_16(804);
+emit_16(870);
+emit_16(803);
+emit_16(870);
+emit_16(804);
+emit_16(871);
+emit_16(805);
+emit_16(871);
+emit_16(804);
+emit_16(871);
+emit_16(805);
+emit_16(872);
+emit_16(806);
+emit_16(872);
+emit_16(805);
+emit_16(872);
+emit_16(806);
+emit_16(873);
+emit_16(807);
+emit_16(873);
+emit_16(806);
+emit_16(873);
+emit_16(807);
+emit_16(874);
+emit_16(808);
+emit_16(874);
+emit_16(807);
+emit_16(874);
+emit_16(808);
+emit_16(875);
+emit_16(809);
+emit_16(875);
+emit_16(808);
+emit_16(875);
+emit_16(809);
+emit_16(876);
+emit_16(810);
+emit_16(876);
+emit_16(809);
+emit_16(876);
+emit_16(810);
+emit_16(877);
+emit_16(811);
+emit_16(877);
+emit_16(810);
+emit_16(877);
+emit_16(811);
+emit_16(878);
+emit_16(812);
+emit_16(878);
+emit_16(811);
+emit_16(878);
+emit_16(812);
+emit_16(879);
+emit_16(813);
+emit_16(879);
+emit_16(812);
+emit_16(879);
+emit_16(813);
+emit_16(880);
+emit_16(814);
+emit_16(880);
+emit_16(813);
+emit_16(880);
+emit_16(814);
+emit_16(881);
+emit_16(815);
+emit_16(881);
+emit_16(814);
+emit_16(881);
+emit_16(815);
+emit_16(882);
+emit_16(816);
+emit_16(882);
+emit_16(815);
+emit_16(882);
+emit_16(816);
+emit_16(883);
+emit_16(817);
+emit_16(883);
+emit_16(816);
+emit_16(883);
+emit_16(817);
+emit_16(884);
+emit_16(818);
+emit_16(884);
+emit_16(817);
+emit_16(884);
+emit_16(818);
+emit_16(885);
+emit_16(819);
+emit_16(885);
+emit_16(818);
+emit_16(885);
+emit_16(819);
+emit_16(886);
+emit_16(820);
+emit_16(886);
+emit_16(819);
+emit_16(886);
+emit_16(820);
+emit_16(887);
+emit_16(821);
+emit_16(887);
+emit_16(820);
+emit_16(887);
+emit_16(821);
+emit_16(888);
+emit_16(822);
+emit_16(888);
+emit_16(821);
+emit_16(888);
+emit_16(822);
+emit_16(889);
+emit_16(823);
+emit_16(889);
+emit_16(822);
+emit_16(889);
+emit_16(823);
+emit_16(890);
+emit_16(824);
+emit_16(890);
+emit_16(823);
+emit_16(890);
+emit_16(824);
+emit_16(891);
+emit_16(825);
+emit_16(891);
+emit_16(824);
+emit_16(891);
+emit_16(825);
+emit_16(892);
+emit_16(826);
+emit_16(892);
+emit_16(825);
+emit_16(892);
+emit_16(826);
+emit_16(893);
+emit_16(827);
+emit_16(893);
+emit_16(826);
+emit_16(893);
+emit_16(827);
+emit_16(894);
+emit_16(828);
+emit_16(894);
+emit_16(827);
+emit_16(894);
+emit_16(828);
+emit_16(895);
+emit_16(829);
+emit_16(895);
+emit_16(828);
+emit_16(895);
+emit_16(829);
+emit_16(896);
+emit_16(830);
+emit_16(896);
+emit_16(829);
+emit_16(896);
+emit_16(830);
+emit_16(897);
+emit_16(831);
+emit_16(897);
+emit_16(830);
+emit_16(897);
+emit_16(831);
+emit_16(898);
+emit_16(832);
+emit_16(898);
+emit_16(831);
+emit_16(898);
+emit_16(832);
+emit_16(899);
+emit_16(833);
+emit_16(899);
+emit_16(832);
+emit_16(899);
+emit_16(833);
+emit_16(900);
+emit_16(834);
+emit_16(900);
+emit_16(833);
+emit_16(900);
+emit_16(834);
+emit_16(901);
+emit_16(835);
+emit_16(901);
+emit_16(834);
+emit_16(901);
+emit_16(835);
+emit_16(902);
+emit_16(836);
+emit_16(902);
+emit_16(835);
+emit_16(902);
+emit_16(836);
+emit_16(903);
+emit_16(837);
+emit_16(903);
+emit_16(836);
+emit_16(903);
+emit_16(837);
+emit_16(904);
+emit_16(838);
+emit_16(904);
+emit_16(837);
+emit_16(904);
+emit_16(838);
+emit_16(905);
+emit_16(839);
+emit_16(905);
+emit_16(838);
+emit_16(905);
+emit_16(839);
+emit_16(906);
+emit_16(840);
+emit_16(906);
+emit_16(839);
+emit_16(906);
+emit_16(840);
+emit_16(907);
+emit_16(841);
+emit_16(907);
+emit_16(840);
+emit_16(907);
+emit_16(841);
+emit_16(908);
+emit_16(842);
+emit_16(908);
+emit_16(841);
+emit_16(908);
+emit_16(842);
+emit_16(909);
+emit_16(843);
+emit_16(909);
+emit_16(842);
+emit_16(909);
+emit_16(843);
+emit_16(910);
+emit_16(844);
+emit_16(910);
+emit_16(843);
+emit_16(910);
+emit_16(844);
+emit_16(911);
+emit_16(845);
+emit_16(911);
+emit_16(844);
+emit_16(911);
+emit_16(845);
+emit_16(912);
+emit_16(846);
+emit_16(912);
+emit_16(845);
+emit_16(912);
+emit_16(846);
+emit_16(913);
+emit_16(847);
+emit_16(913);
+emit_16(846);
+emit_16(913);
+emit_16(847);
+emit_16(914);
+emit_16(848);
+emit_16(914);
+emit_16(847);
+emit_16(914);
+emit_16(848);
+emit_16(915);
+emit_16(849);
+emit_16(915);
+emit_16(848);
+emit_16(915);
+emit_16(849);
+emit_16(916);
+emit_16(850);
+emit_16(916);
+emit_16(849);
+emit_16(916);
+emit_16(850);
+emit_16(917);
+emit_16(851);
+emit_16(917);
+emit_16(850);
+emit_16(917);
+emit_16(851);
+emit_16(918);
+emit_16(852);
+emit_16(918);
+emit_16(851);
+emit_16(918);
+emit_16(852);
+emit_16(919);
+emit_16(853);
+emit_16(919);
+emit_16(852);
+emit_16(919);
+emit_16(853);
+emit_16(920);
+emit_16(854);
+emit_16(920);
+emit_16(853);
+emit_16(920);
+emit_16(854);
+emit_16(921);
+emit_16(855);
+emit_16(921);
+emit_16(854);
+emit_16(921);
+emit_16(855);
+emit_16(922);
+emit_16(856);
+emit_16(922);
+emit_16(855);
+emit_16(922);
+emit_16(856);
+emit_16(923);
+emit_16(857);
+emit_16(923);
+emit_16(856);
+emit_16(924);
+emit_16(858);
+emit_16(925);
+emit_16(859);
+emit_16(925);
+emit_16(858);
+emit_16(925);
+emit_16(859);
+emit_16(926);
+emit_16(860);
+emit_16(926);
+emit_16(859);
+emit_16(926);
+emit_16(860);
+emit_16(927);
+emit_16(861);
+emit_16(927);
+emit_16(860);
+emit_16(927);
+emit_16(861);
+emit_16(928);
+emit_16(862);
+emit_16(928);
+emit_16(861);
+emit_16(928);
+emit_16(862);
+emit_16(929);
+emit_16(863);
+emit_16(929);
+emit_16(862);
+emit_16(929);
+emit_16(863);
+emit_16(930);
+emit_16(864);
+emit_16(930);
+emit_16(863);
+emit_16(930);
+emit_16(864);
+emit_16(931);
+emit_16(865);
+emit_16(931);
+emit_16(864);
+emit_16(931);
+emit_16(865);
+emit_16(932);
+emit_16(866);
+emit_16(932);
+emit_16(865);
+emit_16(932);
+emit_16(866);
+emit_16(933);
+emit_16(867);
+emit_16(933);
+emit_16(866);
+emit_16(933);
+emit_16(867);
+emit_16(934);
+emit_16(868);
+emit_16(934);
+emit_16(867);
+emit_16(934);
+emit_16(868);
+emit_16(935);
+emit_16(869);
+emit_16(935);
+emit_16(868);
+emit_16(935);
+emit_16(869);
+emit_16(936);
+emit_16(870);
+emit_16(936);
+emit_16(869);
+emit_16(936);
+emit_16(870);
+emit_16(937);
+emit_16(871);
+emit_16(937);
+emit_16(870);
+emit_16(937);
+emit_16(871);
+emit_16(938);
+emit_16(872);
+emit_16(938);
+emit_16(871);
+emit_16(938);
+emit_16(872);
+emit_16(939);
+emit_16(873);
+emit_16(939);
+emit_16(872);
+emit_16(939);
+emit_16(873);
+emit_16(940);
+emit_16(874);
+emit_16(940);
+emit_16(873);
+emit_16(940);
+emit_16(874);
+emit_16(941);
+emit_16(875);
+emit_16(941);
+emit_16(874);
+emit_16(941);
+emit_16(875);
+emit_16(942);
+emit_16(876);
+emit_16(942);
+emit_16(875);
+emit_16(942);
+emit_16(876);
+emit_16(943);
+emit_16(877);
+emit_16(943);
+emit_16(876);
+emit_16(943);
+emit_16(877);
+emit_16(944);
+emit_16(878);
+emit_16(944);
+emit_16(877);
+emit_16(944);
+emit_16(878);
+emit_16(945);
+emit_16(879);
+emit_16(945);
+emit_16(878);
+emit_16(945);
+emit_16(879);
+emit_16(946);
+emit_16(880);
+emit_16(946);
+emit_16(879);
+emit_16(946);
+emit_16(880);
+emit_16(947);
+emit_16(881);
+emit_16(947);
+emit_16(880);
+emit_16(947);
+emit_16(881);
+emit_16(948);
+emit_16(882);
+emit_16(948);
+emit_16(881);
+emit_16(948);
+emit_16(882);
+emit_16(949);
+emit_16(883);
+emit_16(949);
+emit_16(882);
+emit_16(949);
+emit_16(883);
+emit_16(950);
+emit_16(884);
+emit_16(950);
+emit_16(883);
+emit_16(950);
+emit_16(884);
+emit_16(951);
+emit_16(885);
+emit_16(951);
+emit_16(884);
+emit_16(951);
+emit_16(885);
+emit_16(952);
+emit_16(886);
+emit_16(952);
+emit_16(885);
+emit_16(952);
+emit_16(886);
+emit_16(953);
+emit_16(887);
+emit_16(953);
+emit_16(886);
+emit_16(953);
+emit_16(887);
+emit_16(954);
+emit_16(888);
+emit_16(954);
+emit_16(887);
+emit_16(954);
+emit_16(888);
+emit_16(955);
+emit_16(889);
+emit_16(955);
+emit_16(888);
+emit_16(955);
+emit_16(889);
+emit_16(956);
+emit_16(890);
+emit_16(956);
+emit_16(889);
+emit_16(956);
+emit_16(890);
+emit_16(957);
+emit_16(891);
+emit_16(957);
+emit_16(890);
+emit_16(957);
+emit_16(891);
+emit_16(958);
+emit_16(892);
+emit_16(958);
+emit_16(891);
+emit_16(958);
+emit_16(892);
+emit_16(959);
+emit_16(893);
+emit_16(959);
+emit_16(892);
+emit_16(959);
+emit_16(893);
+emit_16(960);
+emit_16(894);
+emit_16(960);
+emit_16(893);
+emit_16(960);
+emit_16(894);
+emit_16(961);
+emit_16(895);
+emit_16(961);
+emit_16(894);
+emit_16(961);
+emit_16(895);
+emit_16(962);
+emit_16(896);
+emit_16(962);
+emit_16(895);
+emit_16(962);
+emit_16(896);
+emit_16(963);
+emit_16(897);
+emit_16(963);
+emit_16(896);
+emit_16(963);
+emit_16(897);
+emit_16(964);
+emit_16(898);
+emit_16(964);
+emit_16(897);
+emit_16(964);
+emit_16(898);
+emit_16(965);
+emit_16(899);
+emit_16(965);
+emit_16(898);
+emit_16(965);
+emit_16(899);
+emit_16(966);
+emit_16(900);
+emit_16(966);
+emit_16(899);
+emit_16(966);
+emit_16(900);
+emit_16(967);
+emit_16(901);
+emit_16(967);
+emit_16(900);
+emit_16(967);
+emit_16(901);
+emit_16(968);
+emit_16(902);
+emit_16(968);
+emit_16(901);
+emit_16(968);
+emit_16(902);
+emit_16(969);
+emit_16(903);
+emit_16(969);
+emit_16(902);
+emit_16(969);
+emit_16(903);
+emit_16(970);
+emit_16(904);
+emit_16(970);
+emit_16(903);
+emit_16(970);
+emit_16(904);
+emit_16(971);
+emit_16(905);
+emit_16(971);
+emit_16(904);
+emit_16(971);
+emit_16(905);
+emit_16(972);
+emit_16(906);
+emit_16(972);
+emit_16(905);
+emit_16(972);
+emit_16(906);
+emit_16(973);
+emit_16(907);
+emit_16(973);
+emit_16(906);
+emit_16(973);
+emit_16(907);
+emit_16(974);
+emit_16(908);
+emit_16(974);
+emit_16(907);
+emit_16(974);
+emit_16(908);
+emit_16(975);
+emit_16(909);
+emit_16(975);
+emit_16(908);
+emit_16(975);
+emit_16(909);
+emit_16(976);
+emit_16(910);
+emit_16(976);
+emit_16(909);
+emit_16(976);
+emit_16(910);
+emit_16(977);
+emit_16(911);
+emit_16(977);
+emit_16(910);
+emit_16(977);
+emit_16(911);
+emit_16(978);
+emit_16(912);
+emit_16(978);
+emit_16(911);
+emit_16(978);
+emit_16(912);
+emit_16(979);
+emit_16(913);
+emit_16(979);
+emit_16(912);
+emit_16(979);
+emit_16(913);
+emit_16(980);
+emit_16(914);
+emit_16(980);
+emit_16(913);
+emit_16(980);
+emit_16(914);
+emit_16(981);
+emit_16(915);
+emit_16(981);
+emit_16(914);
+emit_16(981);
+emit_16(915);
+emit_16(982);
+emit_16(916);
+emit_16(982);
+emit_16(915);
+emit_16(982);
+emit_16(916);
+emit_16(983);
+emit_16(917);
+emit_16(983);
+emit_16(916);
+emit_16(983);
+emit_16(917);
+emit_16(984);
+emit_16(918);
+emit_16(984);
+emit_16(917);
+emit_16(984);
+emit_16(918);
+emit_16(985);
+emit_16(919);
+emit_16(985);
+emit_16(918);
+emit_16(985);
+emit_16(919);
+emit_16(986);
+emit_16(920);
+emit_16(986);
+emit_16(919);
+emit_16(986);
+emit_16(920);
+emit_16(987);
+emit_16(921);
+emit_16(987);
+emit_16(920);
+emit_16(987);
+emit_16(921);
+emit_16(988);
+emit_16(922);
+emit_16(988);
+emit_16(921);
+emit_16(988);
+emit_16(922);
+emit_16(989);
+emit_16(923);
+emit_16(989);
+emit_16(922);
+emit_16(990);
+emit_16(924);
+emit_16(991);
+emit_16(925);
+emit_16(991);
+emit_16(924);
+emit_16(991);
+emit_16(925);
+emit_16(992);
+emit_16(926);
+emit_16(992);
+emit_16(925);
+emit_16(992);
+emit_16(926);
+emit_16(993);
+emit_16(927);
+emit_16(993);
+emit_16(926);
+emit_16(993);
+emit_16(927);
+emit_16(994);
+emit_16(928);
+emit_16(994);
+emit_16(927);
+emit_16(994);
+emit_16(928);
+emit_16(995);
+emit_16(929);
+emit_16(995);
+emit_16(928);
+emit_16(995);
+emit_16(929);
+emit_16(996);
+emit_16(930);
+emit_16(996);
+emit_16(929);
+emit_16(996);
+emit_16(930);
+emit_16(997);
+emit_16(931);
+emit_16(997);
+emit_16(930);
+emit_16(997);
+emit_16(931);
+emit_16(998);
+emit_16(932);
+emit_16(998);
+emit_16(931);
+emit_16(998);
+emit_16(932);
+emit_16(999);
+emit_16(933);
+emit_16(999);
+emit_16(932);
+emit_16(999);
+emit_16(933);
+emit_16(1000);
+emit_16(934);
+emit_16(1000);
+emit_16(933);
+emit_16(1000);
+emit_16(934);
+emit_16(1001);
+emit_16(935);
+emit_16(1001);
+emit_16(934);
+emit_16(1001);
+emit_16(935);
+emit_16(1002);
+emit_16(936);
+emit_16(1002);
+emit_16(935);
+emit_16(1002);
+emit_16(936);
+emit_16(1003);
+emit_16(937);
+emit_16(1003);
+emit_16(936);
+emit_16(1003);
+emit_16(937);
+emit_16(1004);
+emit_16(938);
+emit_16(1004);
+emit_16(937);
+emit_16(1004);
+emit_16(938);
+emit_16(1005);
+emit_16(939);
+emit_16(1005);
+emit_16(938);
+emit_16(1005);
+emit_16(939);
+emit_16(1006);
+emit_16(940);
+emit_16(1006);
+emit_16(939);
+emit_16(1006);
+emit_16(940);
+emit_16(1007);
+emit_16(941);
+emit_16(1007);
+emit_16(940);
+emit_16(1007);
+emit_16(941);
+emit_16(1008);
+emit_16(942);
+emit_16(1008);
+emit_16(941);
+emit_16(1008);
+emit_16(942);
+emit_16(1009);
+emit_16(943);
+emit_16(1009);
+emit_16(942);
+emit_16(1009);
+emit_16(943);
+emit_16(1010);
+emit_16(944);
+emit_16(1010);
+emit_16(943);
+emit_16(1010);
+emit_16(944);
+emit_16(1011);
+emit_16(945);
+emit_16(1011);
+emit_16(944);
+emit_16(1011);
+emit_16(945);
+emit_16(1012);
+emit_16(946);
+emit_16(1012);
+emit_16(945);
+emit_16(1012);
+emit_16(946);
+emit_16(1013);
+emit_16(947);
+emit_16(1013);
+emit_16(946);
+emit_16(1013);
+emit_16(947);
+emit_16(1014);
+emit_16(948);
+emit_16(1014);
+emit_16(947);
+emit_16(1014);
+emit_16(948);
+emit_16(1015);
+emit_16(949);
+emit_16(1015);
+emit_16(948);
+emit_16(1015);
+emit_16(949);
+emit_16(1016);
+emit_16(950);
+emit_16(1016);
+emit_16(949);
+emit_16(1016);
+emit_16(950);
+emit_16(1017);
+emit_16(951);
+emit_16(1017);
+emit_16(950);
+emit_16(1017);
+emit_16(951);
+emit_16(1018);
+emit_16(952);
+emit_16(1018);
+emit_16(951);
+emit_16(1018);
+emit_16(952);
+emit_16(1019);
+emit_16(953);
+emit_16(1019);
+emit_16(952);
+emit_16(1019);
+emit_16(953);
+emit_16(1020);
+emit_16(954);
+emit_16(1020);
+emit_16(953);
+emit_16(1020);
+emit_16(954);
+emit_16(1021);
+emit_16(955);
+emit_16(1021);
+emit_16(954);
+emit_16(1021);
+emit_16(955);
+emit_16(1022);
+emit_16(956);
+emit_16(1022);
+emit_16(955);
+emit_16(1022);
+emit_16(956);
+emit_16(1023);
+emit_16(957);
+emit_16(1023);
+emit_16(956);
+emit_16(1023);
+emit_16(957);
+emit_16(1024);
+emit_16(958);
+emit_16(1024);
+emit_16(957);
+emit_16(1024);
+emit_16(958);
+emit_16(1025);
+emit_16(959);
+emit_16(1025);
+emit_16(958);
+emit_16(1025);
+emit_16(959);
+emit_16(1026);
+emit_16(960);
+emit_16(1026);
+emit_16(959);
+emit_16(1026);
+emit_16(960);
+emit_16(1027);
+emit_16(961);
+emit_16(1027);
+emit_16(960);
+emit_16(1027);
+emit_16(961);
+emit_16(1028);
+emit_16(962);
+emit_16(1028);
+emit_16(961);
+emit_16(1028);
+emit_16(962);
+emit_16(1029);
+emit_16(963);
+emit_16(1029);
+emit_16(962);
+emit_16(1029);
+emit_16(963);
+emit_16(1030);
+emit_16(964);
+emit_16(1030);
+emit_16(963);
+emit_16(1030);
+emit_16(964);
+emit_16(1031);
+emit_16(965);
+emit_16(1031);
+emit_16(964);
+emit_16(1031);
+emit_16(965);
+emit_16(1032);
+emit_16(966);
+emit_16(1032);
+emit_16(965);
+emit_16(1032);
+emit_16(966);
+emit_16(1033);
+emit_16(967);
+emit_16(1033);
+emit_16(966);
+emit_16(1033);
+emit_16(967);
+emit_16(1034);
+emit_16(968);
+emit_16(1034);
+emit_16(967);
+emit_16(1034);
+emit_16(968);
+emit_16(1035);
+emit_16(969);
+emit_16(1035);
+emit_16(968);
+emit_16(1035);
+emit_16(969);
+emit_16(1036);
+emit_16(970);
+emit_16(1036);
+emit_16(969);
+emit_16(1036);
+emit_16(970);
+emit_16(1037);
+emit_16(971);
+emit_16(1037);
+emit_16(970);
+emit_16(1037);
+emit_16(971);
+emit_16(1038);
+emit_16(972);
+emit_16(1038);
+emit_16(971);
+emit_16(1038);
+emit_16(972);
+emit_16(1039);
+emit_16(973);
+emit_16(1039);
+emit_16(972);
+emit_16(1039);
+emit_16(973);
+emit_16(1040);
+emit_16(974);
+emit_16(1040);
+emit_16(973);
+emit_16(1040);
+emit_16(974);
+emit_16(1041);
+emit_16(975);
+emit_16(1041);
+emit_16(974);
+emit_16(1041);
+emit_16(975);
+emit_16(1042);
+emit_16(976);
+emit_16(1042);
+emit_16(975);
+emit_16(1042);
+emit_16(976);
+emit_16(1043);
+emit_16(977);
+emit_16(1043);
+emit_16(976);
+emit_16(1043);
+emit_16(977);
+emit_16(1044);
+emit_16(978);
+emit_16(1044);
+emit_16(977);
+emit_16(1044);
+emit_16(978);
+emit_16(1045);
+emit_16(979);
+emit_16(1045);
+emit_16(978);
+emit_16(1045);
+emit_16(979);
+emit_16(1046);
+emit_16(980);
+emit_16(1046);
+emit_16(979);
+emit_16(1046);
+emit_16(980);
+emit_16(1047);
+emit_16(981);
+emit_16(1047);
+emit_16(980);
+emit_16(1047);
+emit_16(981);
+emit_16(1048);
+emit_16(982);
+emit_16(1048);
+emit_16(981);
+emit_16(1048);
+emit_16(982);
+emit_16(1049);
+emit_16(983);
+emit_16(1049);
+emit_16(982);
+emit_16(1049);
+emit_16(983);
+emit_16(1050);
+emit_16(984);
+emit_16(1050);
+emit_16(983);
+emit_16(1050);
+emit_16(984);
+emit_16(1051);
+emit_16(985);
+emit_16(1051);
+emit_16(984);
+emit_16(1051);
+emit_16(985);
+emit_16(1052);
+emit_16(986);
+emit_16(1052);
+emit_16(985);
+emit_16(1052);
+emit_16(986);
+emit_16(1053);
+emit_16(987);
+emit_16(1053);
+emit_16(986);
+emit_16(1053);
+emit_16(987);
+emit_16(1054);
+emit_16(988);
+emit_16(1054);
+emit_16(987);
+emit_16(1054);
+emit_16(988);
+emit_16(1055);
+emit_16(989);
+emit_16(1055);
+emit_16(988);
+emit_16(1056);
+emit_16(990);
+emit_16(1057);
+emit_16(991);
+emit_16(1057);
+emit_16(990);
+emit_16(1057);
+emit_16(991);
+emit_16(1058);
+emit_16(992);
+emit_16(1058);
+emit_16(991);
+emit_16(1058);
+emit_16(992);
+emit_16(1059);
+emit_16(993);
+emit_16(1059);
+emit_16(992);
+emit_16(1059);
+emit_16(993);
+emit_16(1060);
+emit_16(994);
+emit_16(1060);
+emit_16(993);
+emit_16(1060);
+emit_16(994);
+emit_16(1061);
+emit_16(995);
+emit_16(1061);
+emit_16(994);
+emit_16(1061);
+emit_16(995);
+emit_16(1062);
+emit_16(996);
+emit_16(1062);
+emit_16(995);
+emit_16(1062);
+emit_16(996);
+emit_16(1063);
+emit_16(997);
+emit_16(1063);
+emit_16(996);
+emit_16(1063);
+emit_16(997);
+emit_16(1064);
+emit_16(998);
+emit_16(1064);
+emit_16(997);
+emit_16(1064);
+emit_16(998);
+emit_16(1065);
+emit_16(999);
+emit_16(1065);
+emit_16(998);
+emit_16(1065);
+emit_16(999);
+emit_16(1066);
+emit_16(1000);
+emit_16(1066);
+emit_16(999);
+emit_16(1066);
+emit_16(1000);
+emit_16(1067);
+emit_16(1001);
+emit_16(1067);
+emit_16(1000);
+emit_16(1067);
+emit_16(1001);
+emit_16(1068);
+emit_16(1002);
+emit_16(1068);
+emit_16(1001);
+emit_16(1068);
+emit_16(1002);
+emit_16(1069);
+emit_16(1003);
+emit_16(1069);
+emit_16(1002);
+emit_16(1069);
+emit_16(1003);
+emit_16(1070);
+emit_16(1004);
+emit_16(1070);
+emit_16(1003);
+emit_16(1070);
+emit_16(1004);
+emit_16(1071);
+emit_16(1005);
+emit_16(1071);
+emit_16(1004);
+emit_16(1071);
+emit_16(1005);
+emit_16(1072);
+emit_16(1006);
+emit_16(1072);
+emit_16(1005);
+emit_16(1072);
+emit_16(1006);
+emit_16(1073);
+emit_16(1007);
+emit_16(1073);
+emit_16(1006);
+emit_16(1073);
+emit_16(1007);
+emit_16(1074);
+emit_16(1008);
+emit_16(1074);
+emit_16(1007);
+emit_16(1074);
+emit_16(1008);
+emit_16(1075);
+emit_16(1009);
+emit_16(1075);
+emit_16(1008);
+emit_16(1075);
+emit_16(1009);
+emit_16(1076);
+emit_16(1010);
+emit_16(1076);
+emit_16(1009);
+emit_16(1076);
+emit_16(1010);
+emit_16(1077);
+emit_16(1011);
+emit_16(1077);
+emit_16(1010);
+emit_16(1077);
+emit_16(1011);
+emit_16(1078);
+emit_16(1012);
+emit_16(1078);
+emit_16(1011);
+emit_16(1078);
+emit_16(1012);
+emit_16(1079);
+emit_16(1013);
+emit_16(1079);
+emit_16(1012);
+emit_16(1079);
+emit_16(1013);
+emit_16(1080);
+emit_16(1014);
+emit_16(1080);
+emit_16(1013);
+emit_16(1080);
+emit_16(1014);
+emit_16(1081);
+emit_16(1015);
+emit_16(1081);
+emit_16(1014);
+emit_16(1081);
+emit_16(1015);
+emit_16(1082);
+emit_16(1016);
+emit_16(1082);
+emit_16(1015);
+emit_16(1082);
+emit_16(1016);
+emit_16(1083);
+emit_16(1017);
+emit_16(1083);
+emit_16(1016);
+emit_16(1083);
+emit_16(1017);
+emit_16(1084);
+emit_16(1018);
+emit_16(1084);
+emit_16(1017);
+emit_16(1084);
+emit_16(1018);
+emit_16(1085);
+emit_16(1019);
+emit_16(1085);
+emit_16(1018);
+emit_16(1085);
+emit_16(1019);
+emit_16(1086);
+emit_16(1020);
+emit_16(1086);
+emit_16(1019);
+emit_16(1086);
+emit_16(1020);
+emit_16(1087);
+emit_16(1021);
+emit_16(1087);
+emit_16(1020);
+emit_16(1087);
+emit_16(1021);
+emit_16(1088);
+emit_16(1022);
+emit_16(1088);
+emit_16(1021);
+emit_16(1088);
+emit_16(1022);
+emit_16(1089);
+emit_16(1023);
+emit_16(1089);
+emit_16(1022);
+emit_16(1089);
+emit_16(1023);
+emit_16(1090);
+emit_16(1024);
+emit_16(1090);
+emit_16(1023);
+emit_16(1090);
+emit_16(1024);
+emit_16(1091);
+emit_16(1025);
+emit_16(1091);
+emit_16(1024);
+emit_16(1091);
+emit_16(1025);
+emit_16(1092);
+emit_16(1026);
+emit_16(1092);
+emit_16(1025);
+emit_16(1092);
+emit_16(1026);
+emit_16(1093);
+emit_16(1027);
+emit_16(1093);
+emit_16(1026);
+emit_16(1093);
+emit_16(1027);
+emit_16(1094);
+emit_16(1028);
+emit_16(1094);
+emit_16(1027);
+emit_16(1094);
+emit_16(1028);
+emit_16(1095);
+emit_16(1029);
+emit_16(1095);
+emit_16(1028);
+emit_16(1095);
+emit_16(1029);
+emit_16(1096);
+emit_16(1030);
+emit_16(1096);
+emit_16(1029);
+emit_16(1096);
+emit_16(1030);
+emit_16(1097);
+emit_16(1031);
+emit_16(1097);
+emit_16(1030);
+emit_16(1097);
+emit_16(1031);
+emit_16(1098);
+emit_16(1032);
+emit_16(1098);
+emit_16(1031);
+emit_16(1098);
+emit_16(1032);
+emit_16(1099);
+emit_16(1033);
+emit_16(1099);
+emit_16(1032);
+emit_16(1099);
+emit_16(1033);
+emit_16(1100);
+emit_16(1034);
+emit_16(1100);
+emit_16(1033);
+emit_16(1100);
+emit_16(1034);
+emit_16(1101);
+emit_16(1035);
+emit_16(1101);
+emit_16(1034);
+emit_16(1101);
+emit_16(1035);
+emit_16(1102);
+emit_16(1036);
+emit_16(1102);
+emit_16(1035);
+emit_16(1102);
+emit_16(1036);
+emit_16(1103);
+emit_16(1037);
+emit_16(1103);
+emit_16(1036);
+emit_16(1103);
+emit_16(1037);
+emit_16(1104);
+emit_16(1038);
+emit_16(1104);
+emit_16(1037);
+emit_16(1104);
+emit_16(1038);
+emit_16(1105);
+emit_16(1039);
+emit_16(1105);
+emit_16(1038);
+emit_16(1105);
+emit_16(1039);
+emit_16(1106);
+emit_16(1040);
+emit_16(1106);
+emit_16(1039);
+emit_16(1106);
+emit_16(1040);
+emit_16(1107);
+emit_16(1041);
+emit_16(1107);
+emit_16(1040);
+emit_16(1107);
+emit_16(1041);
+emit_16(1108);
+emit_16(1042);
+emit_16(1108);
+emit_16(1041);
+emit_16(1108);
+emit_16(1042);
+emit_16(1109);
+emit_16(1043);
+emit_16(1109);
+emit_16(1042);
+emit_16(1109);
+emit_16(1043);
+emit_16(1110);
+emit_16(1044);
+emit_16(1110);
+emit_16(1043);
+emit_16(1110);
+emit_16(1044);
+emit_16(1111);
+emit_16(1045);
+emit_16(1111);
+emit_16(1044);
+emit_16(1111);
+emit_16(1045);
+emit_16(1112);
+emit_16(1046);
+emit_16(1112);
+emit_16(1045);
+emit_16(1112);
+emit_16(1046);
+emit_16(1113);
+emit_16(1047);
+emit_16(1113);
+emit_16(1046);
+emit_16(1113);
+emit_16(1047);
+emit_16(1114);
+emit_16(1048);
+emit_16(1114);
+emit_16(1047);
+emit_16(1114);
+emit_16(1048);
+emit_16(1115);
+emit_16(1049);
+emit_16(1115);
+emit_16(1048);
+emit_16(1115);
+emit_16(1049);
+emit_16(1116);
+emit_16(1050);
+emit_16(1116);
+emit_16(1049);
+emit_16(1116);
+emit_16(1050);
+emit_16(1117);
+emit_16(1051);
+emit_16(1117);
+emit_16(1050);
+emit_16(1117);
+emit_16(1051);
+emit_16(1118);
+emit_16(1052);
+emit_16(1118);
+emit_16(1051);
+emit_16(1118);
+emit_16(1052);
+emit_16(1119);
+emit_16(1053);
+emit_16(1119);
+emit_16(1052);
+emit_16(1119);
+emit_16(1053);
+emit_16(1120);
+emit_16(1054);
+emit_16(1120);
+emit_16(1053);
+emit_16(1120);
+emit_16(1054);
+emit_16(1121);
+emit_16(1055);
+emit_16(1121);
+emit_16(1054);
+emit_16(1122);
+emit_16(1056);
+emit_16(1123);
+emit_16(1057);
+emit_16(1123);
+emit_16(1056);
+emit_16(1123);
+emit_16(1057);
+emit_16(1124);
+emit_16(1058);
+emit_16(1124);
+emit_16(1057);
+emit_16(1124);
+emit_16(1058);
+emit_16(1125);
+emit_16(1059);
+emit_16(1125);
+emit_16(1058);
+emit_16(1125);
+emit_16(1059);
+emit_16(1126);
+emit_16(1060);
+emit_16(1126);
+emit_16(1059);
+emit_16(1126);
+emit_16(1060);
+emit_16(1127);
+emit_16(1061);
+emit_16(1127);
+emit_16(1060);
+emit_16(1127);
+emit_16(1061);
+emit_16(1128);
+emit_16(1062);
+emit_16(1128);
+emit_16(1061);
+emit_16(1128);
+emit_16(1062);
+emit_16(1129);
+emit_16(1063);
+emit_16(1129);
+emit_16(1062);
+emit_16(1129);
+emit_16(1063);
+emit_16(1130);
+emit_16(1064);
+emit_16(1130);
+emit_16(1063);
+emit_16(1130);
+emit_16(1064);
+emit_16(1131);
+emit_16(1065);
+emit_16(1131);
+emit_16(1064);
+emit_16(1131);
+emit_16(1065);
+emit_16(1132);
+emit_16(1066);
+emit_16(1132);
+emit_16(1065);
+emit_16(1132);
+emit_16(1066);
+emit_16(1133);
+emit_16(1067);
+emit_16(1133);
+emit_16(1066);
+emit_16(1133);
+emit_16(1067);
+emit_16(1134);
+emit_16(1068);
+emit_16(1134);
+emit_16(1067);
+emit_16(1134);
+emit_16(1068);
+emit_16(1135);
+emit_16(1069);
+emit_16(1135);
+emit_16(1068);
+emit_16(1135);
+emit_16(1069);
+emit_16(1136);
+emit_16(1070);
+emit_16(1136);
+emit_16(1069);
+emit_16(1136);
+emit_16(1070);
+emit_16(1137);
+emit_16(1071);
+emit_16(1137);
+emit_16(1070);
+emit_16(1137);
+emit_16(1071);
+emit_16(1138);
+emit_16(1072);
+emit_16(1138);
+emit_16(1071);
+emit_16(1138);
+emit_16(1072);
+emit_16(1139);
+emit_16(1073);
+emit_16(1139);
+emit_16(1072);
+emit_16(1139);
+emit_16(1073);
+emit_16(1140);
+emit_16(1074);
+emit_16(1140);
+emit_16(1073);
+emit_16(1140);
+emit_16(1074);
+emit_16(1141);
+emit_16(1075);
+emit_16(1141);
+emit_16(1074);
+emit_16(1141);
+emit_16(1075);
+emit_16(1142);
+emit_16(1076);
+emit_16(1142);
+emit_16(1075);
+emit_16(1142);
+emit_16(1076);
+emit_16(1143);
+emit_16(1077);
+emit_16(1143);
+emit_16(1076);
+emit_16(1143);
+emit_16(1077);
+emit_16(1144);
+emit_16(1078);
+emit_16(1144);
+emit_16(1077);
+emit_16(1144);
+emit_16(1078);
+emit_16(1145);
+emit_16(1079);
+emit_16(1145);
+emit_16(1078);
+emit_16(1145);
+emit_16(1079);
+emit_16(1146);
+emit_16(1080);
+emit_16(1146);
+emit_16(1079);
+emit_16(1146);
+emit_16(1080);
+emit_16(1147);
+emit_16(1081);
+emit_16(1147);
+emit_16(1080);
+emit_16(1147);
+emit_16(1081);
+emit_16(1148);
+emit_16(1082);
+emit_16(1148);
+emit_16(1081);
+emit_16(1148);
+emit_16(1082);
+emit_16(1149);
+emit_16(1083);
+emit_16(1149);
+emit_16(1082);
+emit_16(1149);
+emit_16(1083);
+emit_16(1150);
+emit_16(1084);
+emit_16(1150);
+emit_16(1083);
+emit_16(1150);
+emit_16(1084);
+emit_16(1151);
+emit_16(1085);
+emit_16(1151);
+emit_16(1084);
+emit_16(1151);
+emit_16(1085);
+emit_16(1152);
+emit_16(1086);
+emit_16(1152);
+emit_16(1085);
+emit_16(1152);
+emit_16(1086);
+emit_16(1153);
+emit_16(1087);
+emit_16(1153);
+emit_16(1086);
+emit_16(1153);
+emit_16(1087);
+emit_16(1154);
+emit_16(1088);
+emit_16(1154);
+emit_16(1087);
+emit_16(1154);
+emit_16(1088);
+emit_16(1155);
+emit_16(1089);
+emit_16(1155);
+emit_16(1088);
+emit_16(1155);
+emit_16(1089);
+emit_16(1156);
+emit_16(1090);
+emit_16(1156);
+emit_16(1089);
+emit_16(1156);
+emit_16(1090);
+emit_16(1157);
+emit_16(1091);
+emit_16(1157);
+emit_16(1090);
+emit_16(1157);
+emit_16(1091);
+emit_16(1158);
+emit_16(1092);
+emit_16(1158);
+emit_16(1091);
+emit_16(1158);
+emit_16(1092);
+emit_16(1159);
+emit_16(1093);
+emit_16(1159);
+emit_16(1092);
+emit_16(1159);
+emit_16(1093);
+emit_16(1160);
+emit_16(1094);
+emit_16(1160);
+emit_16(1093);
+emit_16(1160);
+emit_16(1094);
+emit_16(1161);
+emit_16(1095);
+emit_16(1161);
+emit_16(1094);
+emit_16(1161);
+emit_16(1095);
+emit_16(1162);
+emit_16(1096);
+emit_16(1162);
+emit_16(1095);
+emit_16(1162);
+emit_16(1096);
+emit_16(1163);
+emit_16(1097);
+emit_16(1163);
+emit_16(1096);
+emit_16(1163);
+emit_16(1097);
+emit_16(1164);
+emit_16(1098);
+emit_16(1164);
+emit_16(1097);
+emit_16(1164);
+emit_16(1098);
+emit_16(1165);
+emit_16(1099);
+emit_16(1165);
+emit_16(1098);
+emit_16(1165);
+emit_16(1099);
+emit_16(1166);
+emit_16(1100);
+emit_16(1166);
+emit_16(1099);
+emit_16(1166);
+emit_16(1100);
+emit_16(1167);
+emit_16(1101);
+emit_16(1167);
+emit_16(1100);
+emit_16(1167);
+emit_16(1101);
+emit_16(1168);
+emit_16(1102);
+emit_16(1168);
+emit_16(1101);
+emit_16(1168);
+emit_16(1102);
+emit_16(1169);
+emit_16(1103);
+emit_16(1169);
+emit_16(1102);
+emit_16(1169);
+emit_16(1103);
+emit_16(1170);
+emit_16(1104);
+emit_16(1170);
+emit_16(1103);
+emit_16(1170);
+emit_16(1104);
+emit_16(1171);
+emit_16(1105);
+emit_16(1171);
+emit_16(1104);
+emit_16(1171);
+emit_16(1105);
+emit_16(1172);
+emit_16(1106);
+emit_16(1172);
+emit_16(1105);
+emit_16(1172);
+emit_16(1106);
+emit_16(1173);
+emit_16(1107);
+emit_16(1173);
+emit_16(1106);
+emit_16(1173);
+emit_16(1107);
+emit_16(1174);
+emit_16(1108);
+emit_16(1174);
+emit_16(1107);
+emit_16(1174);
+emit_16(1108);
+emit_16(1175);
+emit_16(1109);
+emit_16(1175);
+emit_16(1108);
+emit_16(1175);
+emit_16(1109);
+emit_16(1176);
+emit_16(1110);
+emit_16(1176);
+emit_16(1109);
+emit_16(1176);
+emit_16(1110);
+emit_16(1177);
+emit_16(1111);
+emit_16(1177);
+emit_16(1110);
+emit_16(1177);
+emit_16(1111);
+emit_16(1178);
+emit_16(1112);
+emit_16(1178);
+emit_16(1111);
+emit_16(1178);
+emit_16(1112);
+emit_16(1179);
+emit_16(1113);
+emit_16(1179);
+emit_16(1112);
+emit_16(1179);
+emit_16(1113);
+emit_16(1180);
+emit_16(1114);
+emit_16(1180);
+emit_16(1113);
+emit_16(1180);
+emit_16(1114);
+emit_16(1181);
+emit_16(1115);
+emit_16(1181);
+emit_16(1114);
+emit_16(1181);
+emit_16(1115);
+emit_16(1182);
+emit_16(1116);
+emit_16(1182);
+emit_16(1115);
+emit_16(1182);
+emit_16(1116);
+emit_16(1183);
+emit_16(1117);
+emit_16(1183);
+emit_16(1116);
+emit_16(1183);
+emit_16(1117);
+emit_16(1184);
+emit_16(1118);
+emit_16(1184);
+emit_16(1117);
+emit_16(1184);
+emit_16(1118);
+emit_16(1185);
+emit_16(1119);
+emit_16(1185);
+emit_16(1118);
+emit_16(1185);
+emit_16(1119);
+emit_16(1186);
+emit_16(1120);
+emit_16(1186);
+emit_16(1119);
+emit_16(1186);
+emit_16(1120);
+emit_16(1187);
+emit_16(1121);
+emit_16(1187);
+emit_16(1120);
+emit_16(1188);
+emit_16(1122);
+emit_16(1189);
+emit_16(1123);
+emit_16(1189);
+emit_16(1122);
+emit_16(1189);
+emit_16(1123);
+emit_16(1190);
+emit_16(1124);
+emit_16(1190);
+emit_16(1123);
+emit_16(1190);
+emit_16(1124);
+emit_16(1191);
+emit_16(1125);
+emit_16(1191);
+emit_16(1124);
+emit_16(1191);
+emit_16(1125);
+emit_16(1192);
+emit_16(1126);
+emit_16(1192);
+emit_16(1125);
+emit_16(1192);
+emit_16(1126);
+emit_16(1193);
+emit_16(1127);
+emit_16(1193);
+emit_16(1126);
+emit_16(1193);
+emit_16(1127);
+emit_16(1194);
+emit_16(1128);
+emit_16(1194);
+emit_16(1127);
+emit_16(1194);
+emit_16(1128);
+emit_16(1195);
+emit_16(1129);
+emit_16(1195);
+emit_16(1128);
+emit_16(1195);
+emit_16(1129);
+emit_16(1196);
+emit_16(1130);
+emit_16(1196);
+emit_16(1129);
+emit_16(1196);
+emit_16(1130);
+emit_16(1197);
+emit_16(1131);
+emit_16(1197);
+emit_16(1130);
+emit_16(1197);
+emit_16(1131);
+emit_16(1198);
+emit_16(1132);
+emit_16(1198);
+emit_16(1131);
+emit_16(1198);
+emit_16(1132);
+emit_16(1199);
+emit_16(1133);
+emit_16(1199);
+emit_16(1132);
+emit_16(1199);
+emit_16(1133);
+emit_16(1200);
+emit_16(1134);
+emit_16(1200);
+emit_16(1133);
+emit_16(1200);
+emit_16(1134);
+emit_16(1201);
+emit_16(1135);
+emit_16(1201);
+emit_16(1134);
+emit_16(1201);
+emit_16(1135);
+emit_16(1202);
+emit_16(1136);
+emit_16(1202);
+emit_16(1135);
+emit_16(1202);
+emit_16(1136);
+emit_16(1203);
+emit_16(1137);
+emit_16(1203);
+emit_16(1136);
+emit_16(1203);
+emit_16(1137);
+emit_16(1204);
+emit_16(1138);
+emit_16(1204);
+emit_16(1137);
+emit_16(1204);
+emit_16(1138);
+emit_16(1205);
+emit_16(1139);
+emit_16(1205);
+emit_16(1138);
+emit_16(1205);
+emit_16(1139);
+emit_16(1206);
+emit_16(1140);
+emit_16(1206);
+emit_16(1139);
+emit_16(1206);
+emit_16(1140);
+emit_16(1207);
+emit_16(1141);
+emit_16(1207);
+emit_16(1140);
+emit_16(1207);
+emit_16(1141);
+emit_16(1208);
+emit_16(1142);
+emit_16(1208);
+emit_16(1141);
+emit_16(1208);
+emit_16(1142);
+emit_16(1209);
+emit_16(1143);
+emit_16(1209);
+emit_16(1142);
+emit_16(1209);
+emit_16(1143);
+emit_16(1210);
+emit_16(1144);
+emit_16(1210);
+emit_16(1143);
+emit_16(1210);
+emit_16(1144);
+emit_16(1211);
+emit_16(1145);
+emit_16(1211);
+emit_16(1144);
+emit_16(1211);
+emit_16(1145);
+emit_16(1212);
+emit_16(1146);
+emit_16(1212);
+emit_16(1145);
+emit_16(1212);
+emit_16(1146);
+emit_16(1213);
+emit_16(1147);
+emit_16(1213);
+emit_16(1146);
+emit_16(1213);
+emit_16(1147);
+emit_16(1214);
+emit_16(1148);
+emit_16(1214);
+emit_16(1147);
+emit_16(1214);
+emit_16(1148);
+emit_16(1215);
+emit_16(1149);
+emit_16(1215);
+emit_16(1148);
+emit_16(1215);
+emit_16(1149);
+emit_16(1216);
+emit_16(1150);
+emit_16(1216);
+emit_16(1149);
+emit_16(1216);
+emit_16(1150);
+emit_16(1217);
+emit_16(1151);
+emit_16(1217);
+emit_16(1150);
+emit_16(1217);
+emit_16(1151);
+emit_16(1218);
+emit_16(1152);
+emit_16(1218);
+emit_16(1151);
+emit_16(1218);
+emit_16(1152);
+emit_16(1219);
+emit_16(1153);
+emit_16(1219);
+emit_16(1152);
+emit_16(1219);
+emit_16(1153);
+emit_16(1220);
+emit_16(1154);
+emit_16(1220);
+emit_16(1153);
+emit_16(1220);
+emit_16(1154);
+emit_16(1221);
+emit_16(1155);
+emit_16(1221);
+emit_16(1154);
+emit_16(1221);
+emit_16(1155);
+emit_16(1222);
+emit_16(1156);
+emit_16(1222);
+emit_16(1155);
+emit_16(1222);
+emit_16(1156);
+emit_16(1223);
+emit_16(1157);
+emit_16(1223);
+emit_16(1156);
+emit_16(1223);
+emit_16(1157);
+emit_16(1224);
+emit_16(1158);
+emit_16(1224);
+emit_16(1157);
+emit_16(1224);
+emit_16(1158);
+emit_16(1225);
+emit_16(1159);
+emit_16(1225);
+emit_16(1158);
+emit_16(1225);
+emit_16(1159);
+emit_16(1226);
+emit_16(1160);
+emit_16(1226);
+emit_16(1159);
+emit_16(1226);
+emit_16(1160);
+emit_16(1227);
+emit_16(1161);
+emit_16(1227);
+emit_16(1160);
+emit_16(1227);
+emit_16(1161);
+emit_16(1228);
+emit_16(1162);
+emit_16(1228);
+emit_16(1161);
+emit_16(1228);
+emit_16(1162);
+emit_16(1229);
+emit_16(1163);
+emit_16(1229);
+emit_16(1162);
+emit_16(1229);
+emit_16(1163);
+emit_16(1230);
+emit_16(1164);
+emit_16(1230);
+emit_16(1163);
+emit_16(1230);
+emit_16(1164);
+emit_16(1231);
+emit_16(1165);
+emit_16(1231);
+emit_16(1164);
+emit_16(1231);
+emit_16(1165);
+emit_16(1232);
+emit_16(1166);
+emit_16(1232);
+emit_16(1165);
+emit_16(1232);
+emit_16(1166);
+emit_16(1233);
+emit_16(1167);
+emit_16(1233);
+emit_16(1166);
+emit_16(1233);
+emit_16(1167);
+emit_16(1234);
+emit_16(1168);
+emit_16(1234);
+emit_16(1167);
+emit_16(1234);
+emit_16(1168);
+emit_16(1235);
+emit_16(1169);
+emit_16(1235);
+emit_16(1168);
+emit_16(1235);
+emit_16(1169);
+emit_16(1236);
+emit_16(1170);
+emit_16(1236);
+emit_16(1169);
+emit_16(1236);
+emit_16(1170);
+emit_16(1237);
+emit_16(1171);
+emit_16(1237);
+emit_16(1170);
+emit_16(1237);
+emit_16(1171);
+emit_16(1238);
+emit_16(1172);
+emit_16(1238);
+emit_16(1171);
+emit_16(1238);
+emit_16(1172);
+emit_16(1239);
+emit_16(1173);
+emit_16(1239);
+emit_16(1172);
+emit_16(1239);
+emit_16(1173);
+emit_16(1240);
+emit_16(1174);
+emit_16(1240);
+emit_16(1173);
+emit_16(1240);
+emit_16(1174);
+emit_16(1241);
+emit_16(1175);
+emit_16(1241);
+emit_16(1174);
+emit_16(1241);
+emit_16(1175);
+emit_16(1242);
+emit_16(1176);
+emit_16(1242);
+emit_16(1175);
+emit_16(1242);
+emit_16(1176);
+emit_16(1243);
+emit_16(1177);
+emit_16(1243);
+emit_16(1176);
+emit_16(1243);
+emit_16(1177);
+emit_16(1244);
+emit_16(1178);
+emit_16(1244);
+emit_16(1177);
+emit_16(1244);
+emit_16(1178);
+emit_16(1245);
+emit_16(1179);
+emit_16(1245);
+emit_16(1178);
+emit_16(1245);
+emit_16(1179);
+emit_16(1246);
+emit_16(1180);
+emit_16(1246);
+emit_16(1179);
+emit_16(1246);
+emit_16(1180);
+emit_16(1247);
+emit_16(1181);
+emit_16(1247);
+emit_16(1180);
+emit_16(1247);
+emit_16(1181);
+emit_16(1248);
+emit_16(1182);
+emit_16(1248);
+emit_16(1181);
+emit_16(1248);
+emit_16(1182);
+emit_16(1249);
+emit_16(1183);
+emit_16(1249);
+emit_16(1182);
+emit_16(1249);
+emit_16(1183);
+emit_16(1250);
+emit_16(1184);
+emit_16(1250);
+emit_16(1183);
+emit_16(1250);
+emit_16(1184);
+emit_16(1251);
+emit_16(1185);
+emit_16(1251);
+emit_16(1184);
+emit_16(1251);
+emit_16(1185);
+emit_16(1252);
+emit_16(1186);
+emit_16(1252);
+emit_16(1185);
+emit_16(1252);
+emit_16(1186);
+emit_16(1253);
+emit_16(1187);
+emit_16(1253);
+emit_16(1186);
+emit_16(1254);
+emit_16(1188);
+emit_16(1255);
+emit_16(1189);
+emit_16(1255);
+emit_16(1188);
+emit_16(1255);
+emit_16(1189);
+emit_16(1256);
+emit_16(1190);
+emit_16(1256);
+emit_16(1189);
+emit_16(1256);
+emit_16(1190);
+emit_16(1257);
+emit_16(1191);
+emit_16(1257);
+emit_16(1190);
+emit_16(1257);
+emit_16(1191);
+emit_16(1258);
+emit_16(1192);
+emit_16(1258);
+emit_16(1191);
+emit_16(1258);
+emit_16(1192);
+emit_16(1259);
+emit_16(1193);
+emit_16(1259);
+emit_16(1192);
+emit_16(1259);
+emit_16(1193);
+emit_16(1260);
+emit_16(1194);
+emit_16(1260);
+emit_16(1193);
+emit_16(1260);
+emit_16(1194);
+emit_16(1261);
+emit_16(1195);
+emit_16(1261);
+emit_16(1194);
+emit_16(1261);
+emit_16(1195);
+emit_16(1262);
+emit_16(1196);
+emit_16(1262);
+emit_16(1195);
+emit_16(1262);
+emit_16(1196);
+emit_16(1263);
+emit_16(1197);
+emit_16(1263);
+emit_16(1196);
+emit_16(1263);
+emit_16(1197);
+emit_16(1264);
+emit_16(1198);
+emit_16(1264);
+emit_16(1197);
+emit_16(1264);
+emit_16(1198);
+emit_16(1265);
+emit_16(1199);
+emit_16(1265);
+emit_16(1198);
+emit_16(1265);
+emit_16(1199);
+emit_16(1266);
+emit_16(1200);
+emit_16(1266);
+emit_16(1199);
+emit_16(1266);
+emit_16(1200);
+emit_16(1267);
+emit_16(1201);
+emit_16(1267);
+emit_16(1200);
+emit_16(1267);
+emit_16(1201);
+emit_16(1268);
+emit_16(1202);
+emit_16(1268);
+emit_16(1201);
+emit_16(1268);
+emit_16(1202);
+emit_16(1269);
+emit_16(1203);
+emit_16(1269);
+emit_16(1202);
+emit_16(1269);
+emit_16(1203);
+emit_16(1270);
+emit_16(1204);
+emit_16(1270);
+emit_16(1203);
+emit_16(1270);
+emit_16(1204);
+emit_16(1271);
+emit_16(1205);
+emit_16(1271);
+emit_16(1204);
+emit_16(1271);
+emit_16(1205);
+emit_16(1272);
+emit_16(1206);
+emit_16(1272);
+emit_16(1205);
+emit_16(1272);
+emit_16(1206);
+emit_16(1273);
+emit_16(1207);
+emit_16(1273);
+emit_16(1206);
+emit_16(1273);
+emit_16(1207);
+emit_16(1274);
+emit_16(1208);
+emit_16(1274);
+emit_16(1207);
+emit_16(1274);
+emit_16(1208);
+emit_16(1275);
+emit_16(1209);
+emit_16(1275);
+emit_16(1208);
+emit_16(1275);
+emit_16(1209);
+emit_16(1276);
+emit_16(1210);
+emit_16(1276);
+emit_16(1209);
+emit_16(1276);
+emit_16(1210);
+emit_16(1277);
+emit_16(1211);
+emit_16(1277);
+emit_16(1210);
+emit_16(1277);
+emit_16(1211);
+emit_16(1278);
+emit_16(1212);
+emit_16(1278);
+emit_16(1211);
+emit_16(1278);
+emit_16(1212);
+emit_16(1279);
+emit_16(1213);
+emit_16(1279);
+emit_16(1212);
+emit_16(1279);
+emit_16(1213);
+emit_16(1280);
+emit_16(1214);
+emit_16(1280);
+emit_16(1213);
+emit_16(1280);
+emit_16(1214);
+emit_16(1281);
+emit_16(1215);
+emit_16(1281);
+emit_16(1214);
+emit_16(1281);
+emit_16(1215);
+emit_16(1282);
+emit_16(1216);
+emit_16(1282);
+emit_16(1215);
+emit_16(1282);
+emit_16(1216);
+emit_16(1283);
+emit_16(1217);
+emit_16(1283);
+emit_16(1216);
+emit_16(1283);
+emit_16(1217);
+emit_16(1284);
+emit_16(1218);
+emit_16(1284);
+emit_16(1217);
+emit_16(1284);
+emit_16(1218);
+emit_16(1285);
+emit_16(1219);
+emit_16(1285);
+emit_16(1218);
+emit_16(1285);
+emit_16(1219);
+emit_16(1286);
+emit_16(1220);
+emit_16(1286);
+emit_16(1219);
+emit_16(1286);
+emit_16(1220);
+emit_16(1287);
+emit_16(1221);
+emit_16(1287);
+emit_16(1220);
+emit_16(1287);
+emit_16(1221);
+emit_16(1288);
+emit_16(1222);
+emit_16(1288);
+emit_16(1221);
+emit_16(1288);
+emit_16(1222);
+emit_16(1289);
+emit_16(1223);
+emit_16(1289);
+emit_16(1222);
+emit_16(1289);
+emit_16(1223);
+emit_16(1290);
+emit_16(1224);
+emit_16(1290);
+emit_16(1223);
+emit_16(1290);
+emit_16(1224);
+emit_16(1291);
+emit_16(1225);
+emit_16(1291);
+emit_16(1224);
+emit_16(1291);
+emit_16(1225);
+emit_16(1292);
+emit_16(1226);
+emit_16(1292);
+emit_16(1225);
+emit_16(1292);
+emit_16(1226);
+emit_16(1293);
+emit_16(1227);
+emit_16(1293);
+emit_16(1226);
+emit_16(1293);
+emit_16(1227);
+emit_16(1294);
+emit_16(1228);
+emit_16(1294);
+emit_16(1227);
+emit_16(1294);
+emit_16(1228);
+emit_16(1295);
+emit_16(1229);
+emit_16(1295);
+emit_16(1228);
+emit_16(1295);
+emit_16(1229);
+emit_16(1296);
+emit_16(1230);
+emit_16(1296);
+emit_16(1229);
+emit_16(1296);
+emit_16(1230);
+emit_16(1297);
+emit_16(1231);
+emit_16(1297);
+emit_16(1230);
+emit_16(1297);
+emit_16(1231);
+emit_16(1298);
+emit_16(1232);
+emit_16(1298);
+emit_16(1231);
+emit_16(1298);
+emit_16(1232);
+emit_16(1299);
+emit_16(1233);
+emit_16(1299);
+emit_16(1232);
+emit_16(1299);
+emit_16(1233);
+emit_16(1300);
+emit_16(1234);
+emit_16(1300);
+emit_16(1233);
+emit_16(1300);
+emit_16(1234);
+emit_16(1301);
+emit_16(1235);
+emit_16(1301);
+emit_16(1234);
+emit_16(1301);
+emit_16(1235);
+emit_16(1302);
+emit_16(1236);
+emit_16(1302);
+emit_16(1235);
+emit_16(1302);
+emit_16(1236);
+emit_16(1303);
+emit_16(1237);
+emit_16(1303);
+emit_16(1236);
+emit_16(1303);
+emit_16(1237);
+emit_16(1304);
+emit_16(1238);
+emit_16(1304);
+emit_16(1237);
+emit_16(1304);
+emit_16(1238);
+emit_16(1305);
+emit_16(1239);
+emit_16(1305);
+emit_16(1238);
+emit_16(1305);
+emit_16(1239);
+emit_16(1306);
+emit_16(1240);
+emit_16(1306);
+emit_16(1239);
+emit_16(1306);
+emit_16(1240);
+emit_16(1307);
+emit_16(1241);
+emit_16(1307);
+emit_16(1240);
+emit_16(1307);
+emit_16(1241);
+emit_16(1308);
+emit_16(1242);
+emit_16(1308);
+emit_16(1241);
+emit_16(1308);
+emit_16(1242);
+emit_16(1309);
+emit_16(1243);
+emit_16(1309);
+emit_16(1242);
+emit_16(1309);
+emit_16(1243);
+emit_16(1310);
+emit_16(1244);
+emit_16(1310);
+emit_16(1243);
+emit_16(1310);
+emit_16(1244);
+emit_16(1311);
+emit_16(1245);
+emit_16(1311);
+emit_16(1244);
+emit_16(1311);
+emit_16(1245);
+emit_16(1312);
+emit_16(1246);
+emit_16(1312);
+emit_16(1245);
+emit_16(1312);
+emit_16(1246);
+emit_16(1313);
+emit_16(1247);
+emit_16(1313);
+emit_16(1246);
+emit_16(1313);
+emit_16(1247);
+emit_16(1314);
+emit_16(1248);
+emit_16(1314);
+emit_16(1247);
+emit_16(1314);
+emit_16(1248);
+emit_16(1315);
+emit_16(1249);
+emit_16(1315);
+emit_16(1248);
+emit_16(1315);
+emit_16(1249);
+emit_16(1316);
+emit_16(1250);
+emit_16(1316);
+emit_16(1249);
+emit_16(1316);
+emit_16(1250);
+emit_16(1317);
+emit_16(1251);
+emit_16(1317);
+emit_16(1250);
+emit_16(1317);
+emit_16(1251);
+emit_16(1318);
+emit_16(1252);
+emit_16(1318);
+emit_16(1251);
+emit_16(1318);
+emit_16(1252);
+emit_16(1319);
+emit_16(1253);
+emit_16(1319);
+emit_16(1252);
+emit_16(1320);
+emit_16(1254);
+emit_16(1321);
+emit_16(1255);
+emit_16(1321);
+emit_16(1254);
+emit_16(1321);
+emit_16(1255);
+emit_16(1322);
+emit_16(1256);
+emit_16(1322);
+emit_16(1255);
+emit_16(1322);
+emit_16(1256);
+emit_16(1323);
+emit_16(1257);
+emit_16(1323);
+emit_16(1256);
+emit_16(1323);
+emit_16(1257);
+emit_16(1324);
+emit_16(1258);
+emit_16(1324);
+emit_16(1257);
+emit_16(1324);
+emit_16(1258);
+emit_16(1325);
+emit_16(1259);
+emit_16(1325);
+emit_16(1258);
+emit_16(1325);
+emit_16(1259);
+emit_16(1326);
+emit_16(1260);
+emit_16(1326);
+emit_16(1259);
+emit_16(1326);
+emit_16(1260);
+emit_16(1327);
+emit_16(1261);
+emit_16(1327);
+emit_16(1260);
+emit_16(1327);
+emit_16(1261);
+emit_16(1328);
+emit_16(1262);
+emit_16(1328);
+emit_16(1261);
+emit_16(1328);
+emit_16(1262);
+emit_16(1329);
+emit_16(1263);
+emit_16(1329);
+emit_16(1262);
+emit_16(1329);
+emit_16(1263);
+emit_16(1330);
+emit_16(1264);
+emit_16(1330);
+emit_16(1263);
+emit_16(1330);
+emit_16(1264);
+emit_16(1331);
+emit_16(1265);
+emit_16(1331);
+emit_16(1264);
+emit_16(1331);
+emit_16(1265);
+emit_16(1332);
+emit_16(1266);
+emit_16(1332);
+emit_16(1265);
+emit_16(1332);
+emit_16(1266);
+emit_16(1333);
+emit_16(1267);
+emit_16(1333);
+emit_16(1266);
+emit_16(1333);
+emit_16(1267);
+emit_16(1334);
+emit_16(1268);
+emit_16(1334);
+emit_16(1267);
+emit_16(1334);
+emit_16(1268);
+emit_16(1335);
+emit_16(1269);
+emit_16(1335);
+emit_16(1268);
+emit_16(1335);
+emit_16(1269);
+emit_16(1336);
+emit_16(1270);
+emit_16(1336);
+emit_16(1269);
+emit_16(1336);
+emit_16(1270);
+emit_16(1337);
+emit_16(1271);
+emit_16(1337);
+emit_16(1270);
+emit_16(1337);
+emit_16(1271);
+emit_16(1338);
+emit_16(1272);
+emit_16(1338);
+emit_16(1271);
+emit_16(1338);
+emit_16(1272);
+emit_16(1339);
+emit_16(1273);
+emit_16(1339);
+emit_16(1272);
+emit_16(1339);
+emit_16(1273);
+emit_16(1340);
+emit_16(1274);
+emit_16(1340);
+emit_16(1273);
+emit_16(1340);
+emit_16(1274);
+emit_16(1341);
+emit_16(1275);
+emit_16(1341);
+emit_16(1274);
+emit_16(1341);
+emit_16(1275);
+emit_16(1342);
+emit_16(1276);
+emit_16(1342);
+emit_16(1275);
+emit_16(1342);
+emit_16(1276);
+emit_16(1343);
+emit_16(1277);
+emit_16(1343);
+emit_16(1276);
+emit_16(1343);
+emit_16(1277);
+emit_16(1344);
+emit_16(1278);
+emit_16(1344);
+emit_16(1277);
+emit_16(1344);
+emit_16(1278);
+emit_16(1345);
+emit_16(1279);
+emit_16(1345);
+emit_16(1278);
+emit_16(1345);
+emit_16(1279);
+emit_16(1346);
+emit_16(1280);
+emit_16(1346);
+emit_16(1279);
+emit_16(1346);
+emit_16(1280);
+emit_16(1347);
+emit_16(1281);
+emit_16(1347);
+emit_16(1280);
+emit_16(1347);
+emit_16(1281);
+emit_16(1348);
+emit_16(1282);
+emit_16(1348);
+emit_16(1281);
+emit_16(1348);
+emit_16(1282);
+emit_16(1349);
+emit_16(1283);
+emit_16(1349);
+emit_16(1282);
+emit_16(1349);
+emit_16(1283);
+emit_16(1350);
+emit_16(1284);
+emit_16(1350);
+emit_16(1283);
+emit_16(1350);
+emit_16(1284);
+emit_16(1351);
+emit_16(1285);
+emit_16(1351);
+emit_16(1284);
+emit_16(1351);
+emit_16(1285);
+emit_16(1352);
+emit_16(1286);
+emit_16(1352);
+emit_16(1285);
+emit_16(1352);
+emit_16(1286);
+emit_16(1353);
+emit_16(1287);
+emit_16(1353);
+emit_16(1286);
+emit_16(1353);
+emit_16(1287);
+emit_16(1354);
+emit_16(1288);
+emit_16(1354);
+emit_16(1287);
+emit_16(1354);
+emit_16(1288);
+emit_16(1355);
+emit_16(1289);
+emit_16(1355);
+emit_16(1288);
+emit_16(1355);
+emit_16(1289);
+emit_16(1356);
+emit_16(1290);
+emit_16(1356);
+emit_16(1289);
+emit_16(1356);
+emit_16(1290);
+emit_16(1357);
+emit_16(1291);
+emit_16(1357);
+emit_16(1290);
+emit_16(1357);
+emit_16(1291);
+emit_16(1358);
+emit_16(1292);
+emit_16(1358);
+emit_16(1291);
+emit_16(1358);
+emit_16(1292);
+emit_16(1359);
+emit_16(1293);
+emit_16(1359);
+emit_16(1292);
+emit_16(1359);
+emit_16(1293);
+emit_16(1360);
+emit_16(1294);
+emit_16(1360);
+emit_16(1293);
+emit_16(1360);
+emit_16(1294);
+emit_16(1361);
+emit_16(1295);
+emit_16(1361);
+emit_16(1294);
+emit_16(1361);
+emit_16(1295);
+emit_16(1362);
+emit_16(1296);
+emit_16(1362);
+emit_16(1295);
+emit_16(1362);
+emit_16(1296);
+emit_16(1363);
+emit_16(1297);
+emit_16(1363);
+emit_16(1296);
+emit_16(1363);
+emit_16(1297);
+emit_16(1364);
+emit_16(1298);
+emit_16(1364);
+emit_16(1297);
+emit_16(1364);
+emit_16(1298);
+emit_16(1365);
+emit_16(1299);
+emit_16(1365);
+emit_16(1298);
+emit_16(1365);
+emit_16(1299);
+emit_16(1366);
+emit_16(1300);
+emit_16(1366);
+emit_16(1299);
+emit_16(1366);
+emit_16(1300);
+emit_16(1367);
+emit_16(1301);
+emit_16(1367);
+emit_16(1300);
+emit_16(1367);
+emit_16(1301);
+emit_16(1368);
+emit_16(1302);
+emit_16(1368);
+emit_16(1301);
+emit_16(1368);
+emit_16(1302);
+emit_16(1369);
+emit_16(1303);
+emit_16(1369);
+emit_16(1302);
+emit_16(1369);
+emit_16(1303);
+emit_16(1370);
+emit_16(1304);
+emit_16(1370);
+emit_16(1303);
+emit_16(1370);
+emit_16(1304);
+emit_16(1371);
+emit_16(1305);
+emit_16(1371);
+emit_16(1304);
+emit_16(1371);
+emit_16(1305);
+emit_16(1372);
+emit_16(1306);
+emit_16(1372);
+emit_16(1305);
+emit_16(1372);
+emit_16(1306);
+emit_16(1373);
+emit_16(1307);
+emit_16(1373);
+emit_16(1306);
+emit_16(1373);
+emit_16(1307);
+emit_16(1374);
+emit_16(1308);
+emit_16(1374);
+emit_16(1307);
+emit_16(1374);
+emit_16(1308);
+emit_16(1375);
+emit_16(1309);
+emit_16(1375);
+emit_16(1308);
+emit_16(1375);
+emit_16(1309);
+emit_16(1376);
+emit_16(1310);
+emit_16(1376);
+emit_16(1309);
+emit_16(1376);
+emit_16(1310);
+emit_16(1377);
+emit_16(1311);
+emit_16(1377);
+emit_16(1310);
+emit_16(1377);
+emit_16(1311);
+emit_16(1378);
+emit_16(1312);
+emit_16(1378);
+emit_16(1311);
+emit_16(1378);
+emit_16(1312);
+emit_16(1379);
+emit_16(1313);
+emit_16(1379);
+emit_16(1312);
+emit_16(1379);
+emit_16(1313);
+emit_16(1380);
+emit_16(1314);
+emit_16(1380);
+emit_16(1313);
+emit_16(1380);
+emit_16(1314);
+emit_16(1381);
+emit_16(1315);
+emit_16(1381);
+emit_16(1314);
+emit_16(1381);
+emit_16(1315);
+emit_16(1382);
+emit_16(1316);
+emit_16(1382);
+emit_16(1315);
+emit_16(1382);
+emit_16(1316);
+emit_16(1383);
+emit_16(1317);
+emit_16(1383);
+emit_16(1316);
+emit_16(1383);
+emit_16(1317);
+emit_16(1384);
+emit_16(1318);
+emit_16(1384);
+emit_16(1317);
+emit_16(1384);
+emit_16(1318);
+emit_16(1385);
+emit_16(1319);
+emit_16(1385);
+emit_16(1318);
+emit_16(1386);
+emit_16(1320);
+emit_16(1387);
+emit_16(1321);
+emit_16(1387);
+emit_16(1320);
+emit_16(1387);
+emit_16(1321);
+emit_16(1388);
+emit_16(1322);
+emit_16(1388);
+emit_16(1321);
+emit_16(1388);
+emit_16(1322);
+emit_16(1389);
+emit_16(1323);
+emit_16(1389);
+emit_16(1322);
+emit_16(1389);
+emit_16(1323);
+emit_16(1390);
+emit_16(1324);
+emit_16(1390);
+emit_16(1323);
+emit_16(1390);
+emit_16(1324);
+emit_16(1391);
+emit_16(1325);
+emit_16(1391);
+emit_16(1324);
+emit_16(1391);
+emit_16(1325);
+emit_16(1392);
+emit_16(1326);
+emit_16(1392);
+emit_16(1325);
+emit_16(1392);
+emit_16(1326);
+emit_16(1393);
+emit_16(1327);
+emit_16(1393);
+emit_16(1326);
+emit_16(1393);
+emit_16(1327);
+emit_16(1394);
+emit_16(1328);
+emit_16(1394);
+emit_16(1327);
+emit_16(1394);
+emit_16(1328);
+emit_16(1395);
+emit_16(1329);
+emit_16(1395);
+emit_16(1328);
+emit_16(1395);
+emit_16(1329);
+emit_16(1396);
+emit_16(1330);
+emit_16(1396);
+emit_16(1329);
+emit_16(1396);
+emit_16(1330);
+emit_16(1397);
+emit_16(1331);
+emit_16(1397);
+emit_16(1330);
+emit_16(1397);
+emit_16(1331);
+emit_16(1398);
+emit_16(1332);
+emit_16(1398);
+emit_16(1331);
+emit_16(1398);
+emit_16(1332);
+emit_16(1399);
+emit_16(1333);
+emit_16(1399);
+emit_16(1332);
+emit_16(1399);
+emit_16(1333);
+emit_16(1400);
+emit_16(1334);
+emit_16(1400);
+emit_16(1333);
+emit_16(1400);
+emit_16(1334);
+emit_16(1401);
+emit_16(1335);
+emit_16(1401);
+emit_16(1334);
+emit_16(1401);
+emit_16(1335);
+emit_16(1402);
+emit_16(1336);
+emit_16(1402);
+emit_16(1335);
+emit_16(1402);
+emit_16(1336);
+emit_16(1403);
+emit_16(1337);
+emit_16(1403);
+emit_16(1336);
+emit_16(1403);
+emit_16(1337);
+emit_16(1404);
+emit_16(1338);
+emit_16(1404);
+emit_16(1337);
+emit_16(1404);
+emit_16(1338);
+emit_16(1405);
+emit_16(1339);
+emit_16(1405);
+emit_16(1338);
+emit_16(1405);
+emit_16(1339);
+emit_16(1406);
+emit_16(1340);
+emit_16(1406);
+emit_16(1339);
+emit_16(1406);
+emit_16(1340);
+emit_16(1407);
+emit_16(1341);
+emit_16(1407);
+emit_16(1340);
+emit_16(1407);
+emit_16(1341);
+emit_16(1408);
+emit_16(1342);
+emit_16(1408);
+emit_16(1341);
+emit_16(1408);
+emit_16(1342);
+emit_16(1409);
+emit_16(1343);
+emit_16(1409);
+emit_16(1342);
+emit_16(1409);
+emit_16(1343);
+emit_16(1410);
+emit_16(1344);
+emit_16(1410);
+emit_16(1343);
+emit_16(1410);
+emit_16(1344);
+emit_16(1411);
+emit_16(1345);
+emit_16(1411);
+emit_16(1344);
+emit_16(1411);
+emit_16(1345);
+emit_16(1412);
+emit_16(1346);
+emit_16(1412);
+emit_16(1345);
+emit_16(1412);
+emit_16(1346);
+emit_16(1413);
+emit_16(1347);
+emit_16(1413);
+emit_16(1346);
+emit_16(1413);
+emit_16(1347);
+emit_16(1414);
+emit_16(1348);
+emit_16(1414);
+emit_16(1347);
+emit_16(1414);
+emit_16(1348);
+emit_16(1415);
+emit_16(1349);
+emit_16(1415);
+emit_16(1348);
+emit_16(1415);
+emit_16(1349);
+emit_16(1416);
+emit_16(1350);
+emit_16(1416);
+emit_16(1349);
+emit_16(1416);
+emit_16(1350);
+emit_16(1417);
+emit_16(1351);
+emit_16(1417);
+emit_16(1350);
+emit_16(1417);
+emit_16(1351);
+emit_16(1418);
+emit_16(1352);
+emit_16(1418);
+emit_16(1351);
+emit_16(1418);
+emit_16(1352);
+emit_16(1419);
+emit_16(1353);
+emit_16(1419);
+emit_16(1352);
+emit_16(1419);
+emit_16(1353);
+emit_16(1420);
+emit_16(1354);
+emit_16(1420);
+emit_16(1353);
+emit_16(1420);
+emit_16(1354);
+emit_16(1421);
+emit_16(1355);
+emit_16(1421);
+emit_16(1354);
+emit_16(1421);
+emit_16(1355);
+emit_16(1422);
+emit_16(1356);
+emit_16(1422);
+emit_16(1355);
+emit_16(1422);
+emit_16(1356);
+emit_16(1423);
+emit_16(1357);
+emit_16(1423);
+emit_16(1356);
+emit_16(1423);
+emit_16(1357);
+emit_16(1424);
+emit_16(1358);
+emit_16(1424);
+emit_16(1357);
+emit_16(1424);
+emit_16(1358);
+emit_16(1425);
+emit_16(1359);
+emit_16(1425);
+emit_16(1358);
+emit_16(1425);
+emit_16(1359);
+emit_16(1426);
+emit_16(1360);
+emit_16(1426);
+emit_16(1359);
+emit_16(1426);
+emit_16(1360);
+emit_16(1427);
+emit_16(1361);
+emit_16(1427);
+emit_16(1360);
+emit_16(1427);
+emit_16(1361);
+emit_16(1428);
+emit_16(1362);
+emit_16(1428);
+emit_16(1361);
+emit_16(1428);
+emit_16(1362);
+emit_16(1429);
+emit_16(1363);
+emit_16(1429);
+emit_16(1362);
+emit_16(1429);
+emit_16(1363);
+emit_16(1430);
+emit_16(1364);
+emit_16(1430);
+emit_16(1363);
+emit_16(1430);
+emit_16(1364);
+emit_16(1431);
+emit_16(1365);
+emit_16(1431);
+emit_16(1364);
+emit_16(1431);
+emit_16(1365);
+emit_16(1432);
+emit_16(1366);
+emit_16(1432);
+emit_16(1365);
+emit_16(1432);
+emit_16(1366);
+emit_16(1433);
+emit_16(1367);
+emit_16(1433);
+emit_16(1366);
+emit_16(1433);
+emit_16(1367);
+emit_16(1434);
+emit_16(1368);
+emit_16(1434);
+emit_16(1367);
+emit_16(1434);
+emit_16(1368);
+emit_16(1435);
+emit_16(1369);
+emit_16(1435);
+emit_16(1368);
+emit_16(1435);
+emit_16(1369);
+emit_16(1436);
+emit_16(1370);
+emit_16(1436);
+emit_16(1369);
+emit_16(1436);
+emit_16(1370);
+emit_16(1437);
+emit_16(1371);
+emit_16(1437);
+emit_16(1370);
+emit_16(1437);
+emit_16(1371);
+emit_16(1438);
+emit_16(1372);
+emit_16(1438);
+emit_16(1371);
+emit_16(1438);
+emit_16(1372);
+emit_16(1439);
+emit_16(1373);
+emit_16(1439);
+emit_16(1372);
+emit_16(1439);
+emit_16(1373);
+emit_16(1440);
+emit_16(1374);
+emit_16(1440);
+emit_16(1373);
+emit_16(1440);
+emit_16(1374);
+emit_16(1441);
+emit_16(1375);
+emit_16(1441);
+emit_16(1374);
+emit_16(1441);
+emit_16(1375);
+emit_16(1442);
+emit_16(1376);
+emit_16(1442);
+emit_16(1375);
+emit_16(1442);
+emit_16(1376);
+emit_16(1443);
+emit_16(1377);
+emit_16(1443);
+emit_16(1376);
+emit_16(1443);
+emit_16(1377);
+emit_16(1444);
+emit_16(1378);
+emit_16(1444);
+emit_16(1377);
+emit_16(1444);
+emit_16(1378);
+emit_16(1445);
+emit_16(1379);
+emit_16(1445);
+emit_16(1378);
+emit_16(1445);
+emit_16(1379);
+emit_16(1446);
+emit_16(1380);
+emit_16(1446);
+emit_16(1379);
+emit_16(1446);
+emit_16(1380);
+emit_16(1447);
+emit_16(1381);
+emit_16(1447);
+emit_16(1380);
+emit_16(1447);
+emit_16(1381);
+emit_16(1448);
+emit_16(1382);
+emit_16(1448);
+emit_16(1381);
+emit_16(1448);
+emit_16(1382);
+emit_16(1449);
+emit_16(1383);
+emit_16(1449);
+emit_16(1382);
+emit_16(1449);
+emit_16(1383);
+emit_16(1450);
+emit_16(1384);
+emit_16(1450);
+emit_16(1383);
+emit_16(1450);
+emit_16(1384);
+emit_16(1451);
+emit_16(1385);
+emit_16(1451);
+emit_16(1384);
+emit_16(1452);
+emit_16(1386);
+emit_16(1453);
+emit_16(1387);
+emit_16(1453);
+emit_16(1386);
+emit_16(1453);
+emit_16(1387);
+emit_16(1454);
+emit_16(1388);
+emit_16(1454);
+emit_16(1387);
+emit_16(1454);
+emit_16(1388);
+emit_16(1455);
+emit_16(1389);
+emit_16(1455);
+emit_16(1388);
+emit_16(1455);
+emit_16(1389);
+emit_16(1456);
+emit_16(1390);
+emit_16(1456);
+emit_16(1389);
+emit_16(1456);
+emit_16(1390);
+emit_16(1457);
+emit_16(1391);
+emit_16(1457);
+emit_16(1390);
+emit_16(1457);
+emit_16(1391);
+emit_16(1458);
+emit_16(1392);
+emit_16(1458);
+emit_16(1391);
+emit_16(1458);
+emit_16(1392);
+emit_16(1459);
+emit_16(1393);
+emit_16(1459);
+emit_16(1392);
+emit_16(1459);
+emit_16(1393);
+emit_16(1460);
+emit_16(1394);
+emit_16(1460);
+emit_16(1393);
+emit_16(1460);
+emit_16(1394);
+emit_16(1461);
+emit_16(1395);
+emit_16(1461);
+emit_16(1394);
+emit_16(1461);
+emit_16(1395);
+emit_16(1462);
+emit_16(1396);
+emit_16(1462);
+emit_16(1395);
+emit_16(1462);
+emit_16(1396);
+emit_16(1463);
+emit_16(1397);
+emit_16(1463);
+emit_16(1396);
+emit_16(1463);
+emit_16(1397);
+emit_16(1464);
+emit_16(1398);
+emit_16(1464);
+emit_16(1397);
+emit_16(1464);
+emit_16(1398);
+emit_16(1465);
+emit_16(1399);
+emit_16(1465);
+emit_16(1398);
+emit_16(1465);
+emit_16(1399);
+emit_16(1466);
+emit_16(1400);
+emit_16(1466);
+emit_16(1399);
+emit_16(1466);
+emit_16(1400);
+emit_16(1467);
+emit_16(1401);
+emit_16(1467);
+emit_16(1400);
+emit_16(1467);
+emit_16(1401);
+emit_16(1468);
+emit_16(1402);
+emit_16(1468);
+emit_16(1401);
+emit_16(1468);
+emit_16(1402);
+emit_16(1469);
+emit_16(1403);
+emit_16(1469);
+emit_16(1402);
+emit_16(1469);
+emit_16(1403);
+emit_16(1470);
+emit_16(1404);
+emit_16(1470);
+emit_16(1403);
+emit_16(1470);
+emit_16(1404);
+emit_16(1471);
+emit_16(1405);
+emit_16(1471);
+emit_16(1404);
+emit_16(1471);
+emit_16(1405);
+emit_16(1472);
+emit_16(1406);
+emit_16(1472);
+emit_16(1405);
+emit_16(1472);
+emit_16(1406);
+emit_16(1473);
+emit_16(1407);
+emit_16(1473);
+emit_16(1406);
+emit_16(1473);
+emit_16(1407);
+emit_16(1474);
+emit_16(1408);
+emit_16(1474);
+emit_16(1407);
+emit_16(1474);
+emit_16(1408);
+emit_16(1475);
+emit_16(1409);
+emit_16(1475);
+emit_16(1408);
+emit_16(1475);
+emit_16(1409);
+emit_16(1476);
+emit_16(1410);
+emit_16(1476);
+emit_16(1409);
+emit_16(1476);
+emit_16(1410);
+emit_16(1477);
+emit_16(1411);
+emit_16(1477);
+emit_16(1410);
+emit_16(1477);
+emit_16(1411);
+emit_16(1478);
+emit_16(1412);
+emit_16(1478);
+emit_16(1411);
+emit_16(1478);
+emit_16(1412);
+emit_16(1479);
+emit_16(1413);
+emit_16(1479);
+emit_16(1412);
+emit_16(1479);
+emit_16(1413);
+emit_16(1480);
+emit_16(1414);
+emit_16(1480);
+emit_16(1413);
+emit_16(1480);
+emit_16(1414);
+emit_16(1481);
+emit_16(1415);
+emit_16(1481);
+emit_16(1414);
+emit_16(1481);
+emit_16(1415);
+emit_16(1482);
+emit_16(1416);
+emit_16(1482);
+emit_16(1415);
+emit_16(1482);
+emit_16(1416);
+emit_16(1483);
+emit_16(1417);
+emit_16(1483);
+emit_16(1416);
+emit_16(1483);
+emit_16(1417);
+emit_16(1484);
+emit_16(1418);
+emit_16(1484);
+emit_16(1417);
+emit_16(1484);
+emit_16(1418);
+emit_16(1485);
+emit_16(1419);
+emit_16(1485);
+emit_16(1418);
+emit_16(1485);
+emit_16(1419);
+emit_16(1486);
+emit_16(1420);
+emit_16(1486);
+emit_16(1419);
+emit_16(1486);
+emit_16(1420);
+emit_16(1487);
+emit_16(1421);
+emit_16(1487);
+emit_16(1420);
+emit_16(1487);
+emit_16(1421);
+emit_16(1488);
+emit_16(1422);
+emit_16(1488);
+emit_16(1421);
+emit_16(1488);
+emit_16(1422);
+emit_16(1489);
+emit_16(1423);
+emit_16(1489);
+emit_16(1422);
+emit_16(1489);
+emit_16(1423);
+emit_16(1490);
+emit_16(1424);
+emit_16(1490);
+emit_16(1423);
+emit_16(1490);
+emit_16(1424);
+emit_16(1491);
+emit_16(1425);
+emit_16(1491);
+emit_16(1424);
+emit_16(1491);
+emit_16(1425);
+emit_16(1492);
+emit_16(1426);
+emit_16(1492);
+emit_16(1425);
+emit_16(1492);
+emit_16(1426);
+emit_16(1493);
+emit_16(1427);
+emit_16(1493);
+emit_16(1426);
+emit_16(1493);
+emit_16(1427);
+emit_16(1494);
+emit_16(1428);
+emit_16(1494);
+emit_16(1427);
+emit_16(1494);
+emit_16(1428);
+emit_16(1495);
+emit_16(1429);
+emit_16(1495);
+emit_16(1428);
+emit_16(1495);
+emit_16(1429);
+emit_16(1496);
+emit_16(1430);
+emit_16(1496);
+emit_16(1429);
+emit_16(1496);
+emit_16(1430);
+emit_16(1497);
+emit_16(1431);
+emit_16(1497);
+emit_16(1430);
+emit_16(1497);
+emit_16(1431);
+emit_16(1498);
+emit_16(1432);
+emit_16(1498);
+emit_16(1431);
+emit_16(1498);
+emit_16(1432);
+emit_16(1499);
+emit_16(1433);
+emit_16(1499);
+emit_16(1432);
+emit_16(1499);
+emit_16(1433);
+emit_16(1500);
+emit_16(1434);
+emit_16(1500);
+emit_16(1433);
+emit_16(1500);
+emit_16(1434);
+emit_16(1501);
+emit_16(1435);
+emit_16(1501);
+emit_16(1434);
+emit_16(1501);
+emit_16(1435);
+emit_16(1502);
+emit_16(1436);
+emit_16(1502);
+emit_16(1435);
+emit_16(1502);
+emit_16(1436);
+emit_16(1503);
+emit_16(1437);
+emit_16(1503);
+emit_16(1436);
+emit_16(1503);
+emit_16(1437);
+emit_16(1504);
+emit_16(1438);
+emit_16(1504);
+emit_16(1437);
+emit_16(1504);
+emit_16(1438);
+emit_16(1505);
+emit_16(1439);
+emit_16(1505);
+emit_16(1438);
+emit_16(1505);
+emit_16(1439);
+emit_16(1506);
+emit_16(1440);
+emit_16(1506);
+emit_16(1439);
+emit_16(1506);
+emit_16(1440);
+emit_16(1507);
+emit_16(1441);
+emit_16(1507);
+emit_16(1440);
+emit_16(1507);
+emit_16(1441);
+emit_16(1508);
+emit_16(1442);
+emit_16(1508);
+emit_16(1441);
+emit_16(1508);
+emit_16(1442);
+emit_16(1509);
+emit_16(1443);
+emit_16(1509);
+emit_16(1442);
+emit_16(1509);
+emit_16(1443);
+emit_16(1510);
+emit_16(1444);
+emit_16(1510);
+emit_16(1443);
+emit_16(1510);
+emit_16(1444);
+emit_16(1511);
+emit_16(1445);
+emit_16(1511);
+emit_16(1444);
+emit_16(1511);
+emit_16(1445);
+emit_16(1512);
+emit_16(1446);
+emit_16(1512);
+emit_16(1445);
+emit_16(1512);
+emit_16(1446);
+emit_16(1513);
+emit_16(1447);
+emit_16(1513);
+emit_16(1446);
+emit_16(1513);
+emit_16(1447);
+emit_16(1514);
+emit_16(1448);
+emit_16(1514);
+emit_16(1447);
+emit_16(1514);
+emit_16(1448);
+emit_16(1515);
+emit_16(1449);
+emit_16(1515);
+emit_16(1448);
+emit_16(1515);
+emit_16(1449);
+emit_16(1516);
+emit_16(1450);
+emit_16(1516);
+emit_16(1449);
+emit_16(1516);
+emit_16(1450);
+emit_16(1517);
+emit_16(1451);
+emit_16(1517);
+emit_16(1450);
+emit_16(1518);
+emit_16(1452);
+emit_16(1519);
+emit_16(1453);
+emit_16(1519);
+emit_16(1452);
+emit_16(1519);
+emit_16(1453);
+emit_16(1520);
+emit_16(1454);
+emit_16(1520);
+emit_16(1453);
+emit_16(1520);
+emit_16(1454);
+emit_16(1521);
+emit_16(1455);
+emit_16(1521);
+emit_16(1454);
+emit_16(1521);
+emit_16(1455);
+emit_16(1522);
+emit_16(1456);
+emit_16(1522);
+emit_16(1455);
+emit_16(1522);
+emit_16(1456);
+emit_16(1523);
+emit_16(1457);
+emit_16(1523);
+emit_16(1456);
+emit_16(1523);
+emit_16(1457);
+emit_16(1524);
+emit_16(1458);
+emit_16(1524);
+emit_16(1457);
+emit_16(1524);
+emit_16(1458);
+emit_16(1525);
+emit_16(1459);
+emit_16(1525);
+emit_16(1458);
+emit_16(1525);
+emit_16(1459);
+emit_16(1526);
+emit_16(1460);
+emit_16(1526);
+emit_16(1459);
+emit_16(1526);
+emit_16(1460);
+emit_16(1527);
+emit_16(1461);
+emit_16(1527);
+emit_16(1460);
+emit_16(1527);
+emit_16(1461);
+emit_16(1528);
+emit_16(1462);
+emit_16(1528);
+emit_16(1461);
+emit_16(1528);
+emit_16(1462);
+emit_16(1529);
+emit_16(1463);
+emit_16(1529);
+emit_16(1462);
+emit_16(1529);
+emit_16(1463);
+emit_16(1530);
+emit_16(1464);
+emit_16(1530);
+emit_16(1463);
+emit_16(1530);
+emit_16(1464);
+emit_16(1531);
+emit_16(1465);
+emit_16(1531);
+emit_16(1464);
+emit_16(1531);
+emit_16(1465);
+emit_16(1532);
+emit_16(1466);
+emit_16(1532);
+emit_16(1465);
+emit_16(1532);
+emit_16(1466);
+emit_16(1533);
+emit_16(1467);
+emit_16(1533);
+emit_16(1466);
+emit_16(1533);
+emit_16(1467);
+emit_16(1534);
+emit_16(1468);
+emit_16(1534);
+emit_16(1467);
+emit_16(1534);
+emit_16(1468);
+emit_16(1535);
+emit_16(1469);
+emit_16(1535);
+emit_16(1468);
+emit_16(1535);
+emit_16(1469);
+emit_16(1536);
+emit_16(1470);
+emit_16(1536);
+emit_16(1469);
+emit_16(1536);
+emit_16(1470);
+emit_16(1537);
+emit_16(1471);
+emit_16(1537);
+emit_16(1470);
+emit_16(1537);
+emit_16(1471);
+emit_16(1538);
+emit_16(1472);
+emit_16(1538);
+emit_16(1471);
+emit_16(1538);
+emit_16(1472);
+emit_16(1539);
+emit_16(1473);
+emit_16(1539);
+emit_16(1472);
+emit_16(1539);
+emit_16(1473);
+emit_16(1540);
+emit_16(1474);
+emit_16(1540);
+emit_16(1473);
+emit_16(1540);
+emit_16(1474);
+emit_16(1541);
+emit_16(1475);
+emit_16(1541);
+emit_16(1474);
+emit_16(1541);
+emit_16(1475);
+emit_16(1542);
+emit_16(1476);
+emit_16(1542);
+emit_16(1475);
+emit_16(1542);
+emit_16(1476);
+emit_16(1543);
+emit_16(1477);
+emit_16(1543);
+emit_16(1476);
+emit_16(1543);
+emit_16(1477);
+emit_16(1544);
+emit_16(1478);
+emit_16(1544);
+emit_16(1477);
+emit_16(1544);
+emit_16(1478);
+emit_16(1545);
+emit_16(1479);
+emit_16(1545);
+emit_16(1478);
+emit_16(1545);
+emit_16(1479);
+emit_16(1546);
+emit_16(1480);
+emit_16(1546);
+emit_16(1479);
+emit_16(1546);
+emit_16(1480);
+emit_16(1547);
+emit_16(1481);
+emit_16(1547);
+emit_16(1480);
+emit_16(1547);
+emit_16(1481);
+emit_16(1548);
+emit_16(1482);
+emit_16(1548);
+emit_16(1481);
+emit_16(1548);
+emit_16(1482);
+emit_16(1549);
+emit_16(1483);
+emit_16(1549);
+emit_16(1482);
+emit_16(1549);
+emit_16(1483);
+emit_16(1550);
+emit_16(1484);
+emit_16(1550);
+emit_16(1483);
+emit_16(1550);
+emit_16(1484);
+emit_16(1551);
+emit_16(1485);
+emit_16(1551);
+emit_16(1484);
+emit_16(1551);
+emit_16(1485);
+emit_16(1552);
+emit_16(1486);
+emit_16(1552);
+emit_16(1485);
+emit_16(1552);
+emit_16(1486);
+emit_16(1553);
+emit_16(1487);
+emit_16(1553);
+emit_16(1486);
+emit_16(1553);
+emit_16(1487);
+emit_16(1554);
+emit_16(1488);
+emit_16(1554);
+emit_16(1487);
+emit_16(1554);
+emit_16(1488);
+emit_16(1555);
+emit_16(1489);
+emit_16(1555);
+emit_16(1488);
+emit_16(1555);
+emit_16(1489);
+emit_16(1556);
+emit_16(1490);
+emit_16(1556);
+emit_16(1489);
+emit_16(1556);
+emit_16(1490);
+emit_16(1557);
+emit_16(1491);
+emit_16(1557);
+emit_16(1490);
+emit_16(1557);
+emit_16(1491);
+emit_16(1558);
+emit_16(1492);
+emit_16(1558);
+emit_16(1491);
+emit_16(1558);
+emit_16(1492);
+emit_16(1559);
+emit_16(1493);
+emit_16(1559);
+emit_16(1492);
+emit_16(1559);
+emit_16(1493);
+emit_16(1560);
+emit_16(1494);
+emit_16(1560);
+emit_16(1493);
+emit_16(1560);
+emit_16(1494);
+emit_16(1561);
+emit_16(1495);
+emit_16(1561);
+emit_16(1494);
+emit_16(1561);
+emit_16(1495);
+emit_16(1562);
+emit_16(1496);
+emit_16(1562);
+emit_16(1495);
+emit_16(1562);
+emit_16(1496);
+emit_16(1563);
+emit_16(1497);
+emit_16(1563);
+emit_16(1496);
+emit_16(1563);
+emit_16(1497);
+emit_16(1564);
+emit_16(1498);
+emit_16(1564);
+emit_16(1497);
+emit_16(1564);
+emit_16(1498);
+emit_16(1565);
+emit_16(1499);
+emit_16(1565);
+emit_16(1498);
+emit_16(1565);
+emit_16(1499);
+emit_16(1566);
+emit_16(1500);
+emit_16(1566);
+emit_16(1499);
+emit_16(1566);
+emit_16(1500);
+emit_16(1567);
+emit_16(1501);
+emit_16(1567);
+emit_16(1500);
+emit_16(1567);
+emit_16(1501);
+emit_16(1568);
+emit_16(1502);
+emit_16(1568);
+emit_16(1501);
+emit_16(1568);
+emit_16(1502);
+emit_16(1569);
+emit_16(1503);
+emit_16(1569);
+emit_16(1502);
+emit_16(1569);
+emit_16(1503);
+emit_16(1570);
+emit_16(1504);
+emit_16(1570);
+emit_16(1503);
+emit_16(1570);
+emit_16(1504);
+emit_16(1571);
+emit_16(1505);
+emit_16(1571);
+emit_16(1504);
+emit_16(1571);
+emit_16(1505);
+emit_16(1572);
+emit_16(1506);
+emit_16(1572);
+emit_16(1505);
+emit_16(1572);
+emit_16(1506);
+emit_16(1573);
+emit_16(1507);
+emit_16(1573);
+emit_16(1506);
+emit_16(1573);
+emit_16(1507);
+emit_16(1574);
+emit_16(1508);
+emit_16(1574);
+emit_16(1507);
+emit_16(1574);
+emit_16(1508);
+emit_16(1575);
+emit_16(1509);
+emit_16(1575);
+emit_16(1508);
+emit_16(1575);
+emit_16(1509);
+emit_16(1576);
+emit_16(1510);
+emit_16(1576);
+emit_16(1509);
+emit_16(1576);
+emit_16(1510);
+emit_16(1577);
+emit_16(1511);
+emit_16(1577);
+emit_16(1510);
+emit_16(1577);
+emit_16(1511);
+emit_16(1578);
+emit_16(1512);
+emit_16(1578);
+emit_16(1511);
+emit_16(1578);
+emit_16(1512);
+emit_16(1579);
+emit_16(1513);
+emit_16(1579);
+emit_16(1512);
+emit_16(1579);
+emit_16(1513);
+emit_16(1580);
+emit_16(1514);
+emit_16(1580);
+emit_16(1513);
+emit_16(1580);
+emit_16(1514);
+emit_16(1581);
+emit_16(1515);
+emit_16(1581);
+emit_16(1514);
+emit_16(1581);
+emit_16(1515);
+emit_16(1582);
+emit_16(1516);
+emit_16(1582);
+emit_16(1515);
+emit_16(1582);
+emit_16(1516);
+emit_16(1583);
+emit_16(1517);
+emit_16(1583);
+emit_16(1516);
+emit_16(1584);
+emit_16(1518);
+emit_16(1585);
+emit_16(1519);
+emit_16(1585);
+emit_16(1518);
+emit_16(1585);
+emit_16(1519);
+emit_16(1586);
+emit_16(1520);
+emit_16(1586);
+emit_16(1519);
+emit_16(1586);
+emit_16(1520);
+emit_16(1587);
+emit_16(1521);
+emit_16(1587);
+emit_16(1520);
+emit_16(1587);
+emit_16(1521);
+emit_16(1588);
+emit_16(1522);
+emit_16(1588);
+emit_16(1521);
+emit_16(1588);
+emit_16(1522);
+emit_16(1589);
+emit_16(1523);
+emit_16(1589);
+emit_16(1522);
+emit_16(1589);
+emit_16(1523);
+emit_16(1590);
+emit_16(1524);
+emit_16(1590);
+emit_16(1523);
+emit_16(1590);
+emit_16(1524);
+emit_16(1591);
+emit_16(1525);
+emit_16(1591);
+emit_16(1524);
+emit_16(1591);
+emit_16(1525);
+emit_16(1592);
+emit_16(1526);
+emit_16(1592);
+emit_16(1525);
+emit_16(1592);
+emit_16(1526);
+emit_16(1593);
+emit_16(1527);
+emit_16(1593);
+emit_16(1526);
+emit_16(1593);
+emit_16(1527);
+emit_16(1594);
+emit_16(1528);
+emit_16(1594);
+emit_16(1527);
+emit_16(1594);
+emit_16(1528);
+emit_16(1595);
+emit_16(1529);
+emit_16(1595);
+emit_16(1528);
+emit_16(1595);
+emit_16(1529);
+emit_16(1596);
+emit_16(1530);
+emit_16(1596);
+emit_16(1529);
+emit_16(1596);
+emit_16(1530);
+emit_16(1597);
+emit_16(1531);
+emit_16(1597);
+emit_16(1530);
+emit_16(1597);
+emit_16(1531);
+emit_16(1598);
+emit_16(1532);
+emit_16(1598);
+emit_16(1531);
+emit_16(1598);
+emit_16(1532);
+emit_16(1599);
+emit_16(1533);
+emit_16(1599);
+emit_16(1532);
+emit_16(1599);
+emit_16(1533);
+emit_16(1600);
+emit_16(1534);
+emit_16(1600);
+emit_16(1533);
+emit_16(1600);
+emit_16(1534);
+emit_16(1601);
+emit_16(1535);
+emit_16(1601);
+emit_16(1534);
+emit_16(1601);
+emit_16(1535);
+emit_16(1602);
+emit_16(1536);
+emit_16(1602);
+emit_16(1535);
+emit_16(1602);
+emit_16(1536);
+emit_16(1603);
+emit_16(1537);
+emit_16(1603);
+emit_16(1536);
+emit_16(1603);
+emit_16(1537);
+emit_16(1604);
+emit_16(1538);
+emit_16(1604);
+emit_16(1537);
+emit_16(1604);
+emit_16(1538);
+emit_16(1605);
+emit_16(1539);
+emit_16(1605);
+emit_16(1538);
+emit_16(1605);
+emit_16(1539);
+emit_16(1606);
+emit_16(1540);
+emit_16(1606);
+emit_16(1539);
+emit_16(1606);
+emit_16(1540);
+emit_16(1607);
+emit_16(1541);
+emit_16(1607);
+emit_16(1540);
+emit_16(1607);
+emit_16(1541);
+emit_16(1608);
+emit_16(1542);
+emit_16(1608);
+emit_16(1541);
+emit_16(1608);
+emit_16(1542);
+emit_16(1609);
+emit_16(1543);
+emit_16(1609);
+emit_16(1542);
+emit_16(1609);
+emit_16(1543);
+emit_16(1610);
+emit_16(1544);
+emit_16(1610);
+emit_16(1543);
+emit_16(1610);
+emit_16(1544);
+emit_16(1611);
+emit_16(1545);
+emit_16(1611);
+emit_16(1544);
+emit_16(1611);
+emit_16(1545);
+emit_16(1612);
+emit_16(1546);
+emit_16(1612);
+emit_16(1545);
+emit_16(1612);
+emit_16(1546);
+emit_16(1613);
+emit_16(1547);
+emit_16(1613);
+emit_16(1546);
+emit_16(1613);
+emit_16(1547);
+emit_16(1614);
+emit_16(1548);
+emit_16(1614);
+emit_16(1547);
+emit_16(1614);
+emit_16(1548);
+emit_16(1615);
+emit_16(1549);
+emit_16(1615);
+emit_16(1548);
+emit_16(1615);
+emit_16(1549);
+emit_16(1616);
+emit_16(1550);
+emit_16(1616);
+emit_16(1549);
+emit_16(1616);
+emit_16(1550);
+emit_16(1617);
+emit_16(1551);
+emit_16(1617);
+emit_16(1550);
+emit_16(1617);
+emit_16(1551);
+emit_16(1618);
+emit_16(1552);
+emit_16(1618);
+emit_16(1551);
+emit_16(1618);
+emit_16(1552);
+emit_16(1619);
+emit_16(1553);
+emit_16(1619);
+emit_16(1552);
+emit_16(1619);
+emit_16(1553);
+emit_16(1620);
+emit_16(1554);
+emit_16(1620);
+emit_16(1553);
+emit_16(1620);
+emit_16(1554);
+emit_16(1621);
+emit_16(1555);
+emit_16(1621);
+emit_16(1554);
+emit_16(1621);
+emit_16(1555);
+emit_16(1622);
+emit_16(1556);
+emit_16(1622);
+emit_16(1555);
+emit_16(1622);
+emit_16(1556);
+emit_16(1623);
+emit_16(1557);
+emit_16(1623);
+emit_16(1556);
+emit_16(1623);
+emit_16(1557);
+emit_16(1624);
+emit_16(1558);
+emit_16(1624);
+emit_16(1557);
+emit_16(1624);
+emit_16(1558);
+emit_16(1625);
+emit_16(1559);
+emit_16(1625);
+emit_16(1558);
+emit_16(1625);
+emit_16(1559);
+emit_16(1626);
+emit_16(1560);
+emit_16(1626);
+emit_16(1559);
+emit_16(1626);
+emit_16(1560);
+emit_16(1627);
+emit_16(1561);
+emit_16(1627);
+emit_16(1560);
+emit_16(1627);
+emit_16(1561);
+emit_16(1628);
+emit_16(1562);
+emit_16(1628);
+emit_16(1561);
+emit_16(1628);
+emit_16(1562);
+emit_16(1629);
+emit_16(1563);
+emit_16(1629);
+emit_16(1562);
+emit_16(1629);
+emit_16(1563);
+emit_16(1630);
+emit_16(1564);
+emit_16(1630);
+emit_16(1563);
+emit_16(1630);
+emit_16(1564);
+emit_16(1631);
+emit_16(1565);
+emit_16(1631);
+emit_16(1564);
+emit_16(1631);
+emit_16(1565);
+emit_16(1632);
+emit_16(1566);
+emit_16(1632);
+emit_16(1565);
+emit_16(1632);
+emit_16(1566);
+emit_16(1633);
+emit_16(1567);
+emit_16(1633);
+emit_16(1566);
+emit_16(1633);
+emit_16(1567);
+emit_16(1634);
+emit_16(1568);
+emit_16(1634);
+emit_16(1567);
+emit_16(1634);
+emit_16(1568);
+emit_16(1635);
+emit_16(1569);
+emit_16(1635);
+emit_16(1568);
+emit_16(1635);
+emit_16(1569);
+emit_16(1636);
+emit_16(1570);
+emit_16(1636);
+emit_16(1569);
+emit_16(1636);
+emit_16(1570);
+emit_16(1637);
+emit_16(1571);
+emit_16(1637);
+emit_16(1570);
+emit_16(1637);
+emit_16(1571);
+emit_16(1638);
+emit_16(1572);
+emit_16(1638);
+emit_16(1571);
+emit_16(1638);
+emit_16(1572);
+emit_16(1639);
+emit_16(1573);
+emit_16(1639);
+emit_16(1572);
+emit_16(1639);
+emit_16(1573);
+emit_16(1640);
+emit_16(1574);
+emit_16(1640);
+emit_16(1573);
+emit_16(1640);
+emit_16(1574);
+emit_16(1641);
+emit_16(1575);
+emit_16(1641);
+emit_16(1574);
+emit_16(1641);
+emit_16(1575);
+emit_16(1642);
+emit_16(1576);
+emit_16(1642);
+emit_16(1575);
+emit_16(1642);
+emit_16(1576);
+emit_16(1643);
+emit_16(1577);
+emit_16(1643);
+emit_16(1576);
+emit_16(1643);
+emit_16(1577);
+emit_16(1644);
+emit_16(1578);
+emit_16(1644);
+emit_16(1577);
+emit_16(1644);
+emit_16(1578);
+emit_16(1645);
+emit_16(1579);
+emit_16(1645);
+emit_16(1578);
+emit_16(1645);
+emit_16(1579);
+emit_16(1646);
+emit_16(1580);
+emit_16(1646);
+emit_16(1579);
+emit_16(1646);
+emit_16(1580);
+emit_16(1647);
+emit_16(1581);
+emit_16(1647);
+emit_16(1580);
+emit_16(1647);
+emit_16(1581);
+emit_16(1648);
+emit_16(1582);
+emit_16(1648);
+emit_16(1581);
+emit_16(1648);
+emit_16(1582);
+emit_16(1649);
+emit_16(1583);
+emit_16(1649);
+emit_16(1582);
+emit_16(1650);
+emit_16(1584);
+emit_16(1651);
+emit_16(1585);
+emit_16(1651);
+emit_16(1584);
+emit_16(1651);
+emit_16(1585);
+emit_16(1652);
+emit_16(1586);
+emit_16(1652);
+emit_16(1585);
+emit_16(1652);
+emit_16(1586);
+emit_16(1653);
+emit_16(1587);
+emit_16(1653);
+emit_16(1586);
+emit_16(1653);
+emit_16(1587);
+emit_16(1654);
+emit_16(1588);
+emit_16(1654);
+emit_16(1587);
+emit_16(1654);
+emit_16(1588);
+emit_16(1655);
+emit_16(1589);
+emit_16(1655);
+emit_16(1588);
+emit_16(1655);
+emit_16(1589);
+emit_16(1656);
+emit_16(1590);
+emit_16(1656);
+emit_16(1589);
+emit_16(1656);
+emit_16(1590);
+emit_16(1657);
+emit_16(1591);
+emit_16(1657);
+emit_16(1590);
+emit_16(1657);
+emit_16(1591);
+emit_16(1658);
+emit_16(1592);
+emit_16(1658);
+emit_16(1591);
+emit_16(1658);
+emit_16(1592);
+emit_16(1659);
+emit_16(1593);
+emit_16(1659);
+emit_16(1592);
+emit_16(1659);
+emit_16(1593);
+emit_16(1660);
+emit_16(1594);
+emit_16(1660);
+emit_16(1593);
+emit_16(1660);
+emit_16(1594);
+emit_16(1661);
+emit_16(1595);
+emit_16(1661);
+emit_16(1594);
+emit_16(1661);
+emit_16(1595);
+emit_16(1662);
+emit_16(1596);
+emit_16(1662);
+emit_16(1595);
+emit_16(1662);
+emit_16(1596);
+emit_16(1663);
+emit_16(1597);
+emit_16(1663);
+emit_16(1596);
+emit_16(1663);
+emit_16(1597);
+emit_16(1664);
+emit_16(1598);
+emit_16(1664);
+emit_16(1597);
+emit_16(1664);
+emit_16(1598);
+emit_16(1665);
+emit_16(1599);
+emit_16(1665);
+emit_16(1598);
+emit_16(1665);
+emit_16(1599);
+emit_16(1666);
+emit_16(1600);
+emit_16(1666);
+emit_16(1599);
+emit_16(1666);
+emit_16(1600);
+emit_16(1667);
+emit_16(1601);
+emit_16(1667);
+emit_16(1600);
+emit_16(1667);
+emit_16(1601);
+emit_16(1668);
+emit_16(1602);
+emit_16(1668);
+emit_16(1601);
+emit_16(1668);
+emit_16(1602);
+emit_16(1669);
+emit_16(1603);
+emit_16(1669);
+emit_16(1602);
+emit_16(1669);
+emit_16(1603);
+emit_16(1670);
+emit_16(1604);
+emit_16(1670);
+emit_16(1603);
+emit_16(1670);
+emit_16(1604);
+emit_16(1671);
+emit_16(1605);
+emit_16(1671);
+emit_16(1604);
+emit_16(1671);
+emit_16(1605);
+emit_16(1672);
+emit_16(1606);
+emit_16(1672);
+emit_16(1605);
+emit_16(1672);
+emit_16(1606);
+emit_16(1673);
+emit_16(1607);
+emit_16(1673);
+emit_16(1606);
+emit_16(1673);
+emit_16(1607);
+emit_16(1674);
+emit_16(1608);
+emit_16(1674);
+emit_16(1607);
+emit_16(1674);
+emit_16(1608);
+emit_16(1675);
+emit_16(1609);
+emit_16(1675);
+emit_16(1608);
+emit_16(1675);
+emit_16(1609);
+emit_16(1676);
+emit_16(1610);
+emit_16(1676);
+emit_16(1609);
+emit_16(1676);
+emit_16(1610);
+emit_16(1677);
+emit_16(1611);
+emit_16(1677);
+emit_16(1610);
+emit_16(1677);
+emit_16(1611);
+emit_16(1678);
+emit_16(1612);
+emit_16(1678);
+emit_16(1611);
+emit_16(1678);
+emit_16(1612);
+emit_16(1679);
+emit_16(1613);
+emit_16(1679);
+emit_16(1612);
+emit_16(1679);
+emit_16(1613);
+emit_16(1680);
+emit_16(1614);
+emit_16(1680);
+emit_16(1613);
+emit_16(1680);
+emit_16(1614);
+emit_16(1681);
+emit_16(1615);
+emit_16(1681);
+emit_16(1614);
+emit_16(1681);
+emit_16(1615);
+emit_16(1682);
+emit_16(1616);
+emit_16(1682);
+emit_16(1615);
+emit_16(1682);
+emit_16(1616);
+emit_16(1683);
+emit_16(1617);
+emit_16(1683);
+emit_16(1616);
+emit_16(1683);
+emit_16(1617);
+emit_16(1684);
+emit_16(1618);
+emit_16(1684);
+emit_16(1617);
+emit_16(1684);
+emit_16(1618);
+emit_16(1685);
+emit_16(1619);
+emit_16(1685);
+emit_16(1618);
+emit_16(1685);
+emit_16(1619);
+emit_16(1686);
+emit_16(1620);
+emit_16(1686);
+emit_16(1619);
+emit_16(1686);
+emit_16(1620);
+emit_16(1687);
+emit_16(1621);
+emit_16(1687);
+emit_16(1620);
+emit_16(1687);
+emit_16(1621);
+emit_16(1688);
+emit_16(1622);
+emit_16(1688);
+emit_16(1621);
+emit_16(1688);
+emit_16(1622);
+emit_16(1689);
+emit_16(1623);
+emit_16(1689);
+emit_16(1622);
+emit_16(1689);
+emit_16(1623);
+emit_16(1690);
+emit_16(1624);
+emit_16(1690);
+emit_16(1623);
+emit_16(1690);
+emit_16(1624);
+emit_16(1691);
+emit_16(1625);
+emit_16(1691);
+emit_16(1624);
+emit_16(1691);
+emit_16(1625);
+emit_16(1692);
+emit_16(1626);
+emit_16(1692);
+emit_16(1625);
+emit_16(1692);
+emit_16(1626);
+emit_16(1693);
+emit_16(1627);
+emit_16(1693);
+emit_16(1626);
+emit_16(1693);
+emit_16(1627);
+emit_16(1694);
+emit_16(1628);
+emit_16(1694);
+emit_16(1627);
+emit_16(1694);
+emit_16(1628);
+emit_16(1695);
+emit_16(1629);
+emit_16(1695);
+emit_16(1628);
+emit_16(1695);
+emit_16(1629);
+emit_16(1696);
+emit_16(1630);
+emit_16(1696);
+emit_16(1629);
+emit_16(1696);
+emit_16(1630);
+emit_16(1697);
+emit_16(1631);
+emit_16(1697);
+emit_16(1630);
+emit_16(1697);
+emit_16(1631);
+emit_16(1698);
+emit_16(1632);
+emit_16(1698);
+emit_16(1631);
+emit_16(1698);
+emit_16(1632);
+emit_16(1699);
+emit_16(1633);
+emit_16(1699);
+emit_16(1632);
+emit_16(1699);
+emit_16(1633);
+emit_16(1700);
+emit_16(1634);
+emit_16(1700);
+emit_16(1633);
+emit_16(1700);
+emit_16(1634);
+emit_16(1701);
+emit_16(1635);
+emit_16(1701);
+emit_16(1634);
+emit_16(1701);
+emit_16(1635);
+emit_16(1702);
+emit_16(1636);
+emit_16(1702);
+emit_16(1635);
+emit_16(1702);
+emit_16(1636);
+emit_16(1703);
+emit_16(1637);
+emit_16(1703);
+emit_16(1636);
+emit_16(1703);
+emit_16(1637);
+emit_16(1704);
+emit_16(1638);
+emit_16(1704);
+emit_16(1637);
+emit_16(1704);
+emit_16(1638);
+emit_16(1705);
+emit_16(1639);
+emit_16(1705);
+emit_16(1638);
+emit_16(1705);
+emit_16(1639);
+emit_16(1706);
+emit_16(1640);
+emit_16(1706);
+emit_16(1639);
+emit_16(1706);
+emit_16(1640);
+emit_16(1707);
+emit_16(1641);
+emit_16(1707);
+emit_16(1640);
+emit_16(1707);
+emit_16(1641);
+emit_16(1708);
+emit_16(1642);
+emit_16(1708);
+emit_16(1641);
+emit_16(1708);
+emit_16(1642);
+emit_16(1709);
+emit_16(1643);
+emit_16(1709);
+emit_16(1642);
+emit_16(1709);
+emit_16(1643);
+emit_16(1710);
+emit_16(1644);
+emit_16(1710);
+emit_16(1643);
+emit_16(1710);
+emit_16(1644);
+emit_16(1711);
+emit_16(1645);
+emit_16(1711);
+emit_16(1644);
+emit_16(1711);
+emit_16(1645);
+emit_16(1712);
+emit_16(1646);
+emit_16(1712);
+emit_16(1645);
+emit_16(1712);
+emit_16(1646);
+emit_16(1713);
+emit_16(1647);
+emit_16(1713);
+emit_16(1646);
+emit_16(1713);
+emit_16(1647);
+emit_16(1714);
+emit_16(1648);
+emit_16(1714);
+emit_16(1647);
+emit_16(1714);
+emit_16(1648);
+emit_16(1715);
+emit_16(1649);
+emit_16(1715);
+emit_16(1648);
+emit_16(1716);
+emit_16(1650);
+emit_16(1717);
+emit_16(1651);
+emit_16(1717);
+emit_16(1650);
+emit_16(1717);
+emit_16(1651);
+emit_16(1718);
+emit_16(1652);
+emit_16(1718);
+emit_16(1651);
+emit_16(1718);
+emit_16(1652);
+emit_16(1719);
+emit_16(1653);
+emit_16(1719);
+emit_16(1652);
+emit_16(1719);
+emit_16(1653);
+emit_16(1720);
+emit_16(1654);
+emit_16(1720);
+emit_16(1653);
+emit_16(1720);
+emit_16(1654);
+emit_16(1721);
+emit_16(1655);
+emit_16(1721);
+emit_16(1654);
+emit_16(1721);
+emit_16(1655);
+emit_16(1722);
+emit_16(1656);
+emit_16(1722);
+emit_16(1655);
+emit_16(1722);
+emit_16(1656);
+emit_16(1723);
+emit_16(1657);
+emit_16(1723);
+emit_16(1656);
+emit_16(1723);
+emit_16(1657);
+emit_16(1724);
+emit_16(1658);
+emit_16(1724);
+emit_16(1657);
+emit_16(1724);
+emit_16(1658);
+emit_16(1725);
+emit_16(1659);
+emit_16(1725);
+emit_16(1658);
+emit_16(1725);
+emit_16(1659);
+emit_16(1726);
+emit_16(1660);
+emit_16(1726);
+emit_16(1659);
+emit_16(1726);
+emit_16(1660);
+emit_16(1727);
+emit_16(1661);
+emit_16(1727);
+emit_16(1660);
+emit_16(1727);
+emit_16(1661);
+emit_16(1728);
+emit_16(1662);
+emit_16(1728);
+emit_16(1661);
+emit_16(1728);
+emit_16(1662);
+emit_16(1729);
+emit_16(1663);
+emit_16(1729);
+emit_16(1662);
+emit_16(1729);
+emit_16(1663);
+emit_16(1730);
+emit_16(1664);
+emit_16(1730);
+emit_16(1663);
+emit_16(1730);
+emit_16(1664);
+emit_16(1731);
+emit_16(1665);
+emit_16(1731);
+emit_16(1664);
+emit_16(1731);
+emit_16(1665);
+emit_16(1732);
+emit_16(1666);
+emit_16(1732);
+emit_16(1665);
+emit_16(1732);
+emit_16(1666);
+emit_16(1733);
+emit_16(1667);
+emit_16(1733);
+emit_16(1666);
+emit_16(1733);
+emit_16(1667);
+emit_16(1734);
+emit_16(1668);
+emit_16(1734);
+emit_16(1667);
+emit_16(1734);
+emit_16(1668);
+emit_16(1735);
+emit_16(1669);
+emit_16(1735);
+emit_16(1668);
+emit_16(1735);
+emit_16(1669);
+emit_16(1736);
+emit_16(1670);
+emit_16(1736);
+emit_16(1669);
+emit_16(1736);
+emit_16(1670);
+emit_16(1737);
+emit_16(1671);
+emit_16(1737);
+emit_16(1670);
+emit_16(1737);
+emit_16(1671);
+emit_16(1738);
+emit_16(1672);
+emit_16(1738);
+emit_16(1671);
+emit_16(1738);
+emit_16(1672);
+emit_16(1739);
+emit_16(1673);
+emit_16(1739);
+emit_16(1672);
+emit_16(1739);
+emit_16(1673);
+emit_16(1740);
+emit_16(1674);
+emit_16(1740);
+emit_16(1673);
+emit_16(1740);
+emit_16(1674);
+emit_16(1741);
+emit_16(1675);
+emit_16(1741);
+emit_16(1674);
+emit_16(1741);
+emit_16(1675);
+emit_16(1742);
+emit_16(1676);
+emit_16(1742);
+emit_16(1675);
+emit_16(1742);
+emit_16(1676);
+emit_16(1743);
+emit_16(1677);
+emit_16(1743);
+emit_16(1676);
+emit_16(1743);
+emit_16(1677);
+emit_16(1744);
+emit_16(1678);
+emit_16(1744);
+emit_16(1677);
+emit_16(1744);
+emit_16(1678);
+emit_16(1745);
+emit_16(1679);
+emit_16(1745);
+emit_16(1678);
+emit_16(1745);
+emit_16(1679);
+emit_16(1746);
+emit_16(1680);
+emit_16(1746);
+emit_16(1679);
+emit_16(1746);
+emit_16(1680);
+emit_16(1747);
+emit_16(1681);
+emit_16(1747);
+emit_16(1680);
+emit_16(1747);
+emit_16(1681);
+emit_16(1748);
+emit_16(1682);
+emit_16(1748);
+emit_16(1681);
+emit_16(1748);
+emit_16(1682);
+emit_16(1749);
+emit_16(1683);
+emit_16(1749);
+emit_16(1682);
+emit_16(1749);
+emit_16(1683);
+emit_16(1750);
+emit_16(1684);
+emit_16(1750);
+emit_16(1683);
+emit_16(1750);
+emit_16(1684);
+emit_16(1751);
+emit_16(1685);
+emit_16(1751);
+emit_16(1684);
+emit_16(1751);
+emit_16(1685);
+emit_16(1752);
+emit_16(1686);
+emit_16(1752);
+emit_16(1685);
+emit_16(1752);
+emit_16(1686);
+emit_16(1753);
+emit_16(1687);
+emit_16(1753);
+emit_16(1686);
+emit_16(1753);
+emit_16(1687);
+emit_16(1754);
+emit_16(1688);
+emit_16(1754);
+emit_16(1687);
+emit_16(1754);
+emit_16(1688);
+emit_16(1755);
+emit_16(1689);
+emit_16(1755);
+emit_16(1688);
+emit_16(1755);
+emit_16(1689);
+emit_16(1756);
+emit_16(1690);
+emit_16(1756);
+emit_16(1689);
+emit_16(1756);
+emit_16(1690);
+emit_16(1757);
+emit_16(1691);
+emit_16(1757);
+emit_16(1690);
+emit_16(1757);
+emit_16(1691);
+emit_16(1758);
+emit_16(1692);
+emit_16(1758);
+emit_16(1691);
+emit_16(1758);
+emit_16(1692);
+emit_16(1759);
+emit_16(1693);
+emit_16(1759);
+emit_16(1692);
+emit_16(1759);
+emit_16(1693);
+emit_16(1760);
+emit_16(1694);
+emit_16(1760);
+emit_16(1693);
+emit_16(1760);
+emit_16(1694);
+emit_16(1761);
+emit_16(1695);
+emit_16(1761);
+emit_16(1694);
+emit_16(1761);
+emit_16(1695);
+emit_16(1762);
+emit_16(1696);
+emit_16(1762);
+emit_16(1695);
+emit_16(1762);
+emit_16(1696);
+emit_16(1763);
+emit_16(1697);
+emit_16(1763);
+emit_16(1696);
+emit_16(1763);
+emit_16(1697);
+emit_16(1764);
+emit_16(1698);
+emit_16(1764);
+emit_16(1697);
+emit_16(1764);
+emit_16(1698);
+emit_16(1765);
+emit_16(1699);
+emit_16(1765);
+emit_16(1698);
+emit_16(1765);
+emit_16(1699);
+emit_16(1766);
+emit_16(1700);
+emit_16(1766);
+emit_16(1699);
+emit_16(1766);
+emit_16(1700);
+emit_16(1767);
+emit_16(1701);
+emit_16(1767);
+emit_16(1700);
+emit_16(1767);
+emit_16(1701);
+emit_16(1768);
+emit_16(1702);
+emit_16(1768);
+emit_16(1701);
+emit_16(1768);
+emit_16(1702);
+emit_16(1769);
+emit_16(1703);
+emit_16(1769);
+emit_16(1702);
+emit_16(1769);
+emit_16(1703);
+emit_16(1770);
+emit_16(1704);
+emit_16(1770);
+emit_16(1703);
+emit_16(1770);
+emit_16(1704);
+emit_16(1771);
+emit_16(1705);
+emit_16(1771);
+emit_16(1704);
+emit_16(1771);
+emit_16(1705);
+emit_16(1772);
+emit_16(1706);
+emit_16(1772);
+emit_16(1705);
+emit_16(1772);
+emit_16(1706);
+emit_16(1773);
+emit_16(1707);
+emit_16(1773);
+emit_16(1706);
+emit_16(1773);
+emit_16(1707);
+emit_16(1774);
+emit_16(1708);
+emit_16(1774);
+emit_16(1707);
+emit_16(1774);
+emit_16(1708);
+emit_16(1775);
+emit_16(1709);
+emit_16(1775);
+emit_16(1708);
+emit_16(1775);
+emit_16(1709);
+emit_16(1776);
+emit_16(1710);
+emit_16(1776);
+emit_16(1709);
+emit_16(1776);
+emit_16(1710);
+emit_16(1777);
+emit_16(1711);
+emit_16(1777);
+emit_16(1710);
+emit_16(1777);
+emit_16(1711);
+emit_16(1778);
+emit_16(1712);
+emit_16(1778);
+emit_16(1711);
+emit_16(1778);
+emit_16(1712);
+emit_16(1779);
+emit_16(1713);
+emit_16(1779);
+emit_16(1712);
+emit_16(1779);
+emit_16(1713);
+emit_16(1780);
+emit_16(1714);
+emit_16(1780);
+emit_16(1713);
+emit_16(1780);
+emit_16(1714);
+emit_16(1781);
+emit_16(1715);
+emit_16(1781);
+emit_16(1714);
+emit_16(1782);
+emit_16(1716);
+emit_16(1783);
+emit_16(1717);
+emit_16(1783);
+emit_16(1716);
+emit_16(1783);
+emit_16(1717);
+emit_16(1784);
+emit_16(1718);
+emit_16(1784);
+emit_16(1717);
+emit_16(1784);
+emit_16(1718);
+emit_16(1785);
+emit_16(1719);
+emit_16(1785);
+emit_16(1718);
+emit_16(1785);
+emit_16(1719);
+emit_16(1786);
+emit_16(1720);
+emit_16(1786);
+emit_16(1719);
+emit_16(1786);
+emit_16(1720);
+emit_16(1787);
+emit_16(1721);
+emit_16(1787);
+emit_16(1720);
+emit_16(1787);
+emit_16(1721);
+emit_16(1788);
+emit_16(1722);
+emit_16(1788);
+emit_16(1721);
+emit_16(1788);
+emit_16(1722);
+emit_16(1789);
+emit_16(1723);
+emit_16(1789);
+emit_16(1722);
+emit_16(1789);
+emit_16(1723);
+emit_16(1790);
+emit_16(1724);
+emit_16(1790);
+emit_16(1723);
+emit_16(1790);
+emit_16(1724);
+emit_16(1791);
+emit_16(1725);
+emit_16(1791);
+emit_16(1724);
+emit_16(1791);
+emit_16(1725);
+emit_16(1792);
+emit_16(1726);
+emit_16(1792);
+emit_16(1725);
+emit_16(1792);
+emit_16(1726);
+emit_16(1793);
+emit_16(1727);
+emit_16(1793);
+emit_16(1726);
+emit_16(1793);
+emit_16(1727);
+emit_16(1794);
+emit_16(1728);
+emit_16(1794);
+emit_16(1727);
+emit_16(1794);
+emit_16(1728);
+emit_16(1795);
+emit_16(1729);
+emit_16(1795);
+emit_16(1728);
+emit_16(1795);
+emit_16(1729);
+emit_16(1796);
+emit_16(1730);
+emit_16(1796);
+emit_16(1729);
+emit_16(1796);
+emit_16(1730);
+emit_16(1797);
+emit_16(1731);
+emit_16(1797);
+emit_16(1730);
+emit_16(1797);
+emit_16(1731);
+emit_16(1798);
+emit_16(1732);
+emit_16(1798);
+emit_16(1731);
+emit_16(1798);
+emit_16(1732);
+emit_16(1799);
+emit_16(1733);
+emit_16(1799);
+emit_16(1732);
+emit_16(1799);
+emit_16(1733);
+emit_16(1800);
+emit_16(1734);
+emit_16(1800);
+emit_16(1733);
+emit_16(1800);
+emit_16(1734);
+emit_16(1801);
+emit_16(1735);
+emit_16(1801);
+emit_16(1734);
+emit_16(1801);
+emit_16(1735);
+emit_16(1802);
+emit_16(1736);
+emit_16(1802);
+emit_16(1735);
+emit_16(1802);
+emit_16(1736);
+emit_16(1803);
+emit_16(1737);
+emit_16(1803);
+emit_16(1736);
+emit_16(1803);
+emit_16(1737);
+emit_16(1804);
+emit_16(1738);
+emit_16(1804);
+emit_16(1737);
+emit_16(1804);
+emit_16(1738);
+emit_16(1805);
+emit_16(1739);
+emit_16(1805);
+emit_16(1738);
+emit_16(1805);
+emit_16(1739);
+emit_16(1806);
+emit_16(1740);
+emit_16(1806);
+emit_16(1739);
+emit_16(1806);
+emit_16(1740);
+emit_16(1807);
+emit_16(1741);
+emit_16(1807);
+emit_16(1740);
+emit_16(1807);
+emit_16(1741);
+emit_16(1808);
+emit_16(1742);
+emit_16(1808);
+emit_16(1741);
+emit_16(1808);
+emit_16(1742);
+emit_16(1809);
+emit_16(1743);
+emit_16(1809);
+emit_16(1742);
+emit_16(1809);
+emit_16(1743);
+emit_16(1810);
+emit_16(1744);
+emit_16(1810);
+emit_16(1743);
+emit_16(1810);
+emit_16(1744);
+emit_16(1811);
+emit_16(1745);
+emit_16(1811);
+emit_16(1744);
+emit_16(1811);
+emit_16(1745);
+emit_16(1812);
+emit_16(1746);
+emit_16(1812);
+emit_16(1745);
+emit_16(1812);
+emit_16(1746);
+emit_16(1813);
+emit_16(1747);
+emit_16(1813);
+emit_16(1746);
+emit_16(1813);
+emit_16(1747);
+emit_16(1814);
+emit_16(1748);
+emit_16(1814);
+emit_16(1747);
+emit_16(1814);
+emit_16(1748);
+emit_16(1815);
+emit_16(1749);
+emit_16(1815);
+emit_16(1748);
+emit_16(1815);
+emit_16(1749);
+emit_16(1816);
+emit_16(1750);
+emit_16(1816);
+emit_16(1749);
+emit_16(1816);
+emit_16(1750);
+emit_16(1817);
+emit_16(1751);
+emit_16(1817);
+emit_16(1750);
+emit_16(1817);
+emit_16(1751);
+emit_16(1818);
+emit_16(1752);
+emit_16(1818);
+emit_16(1751);
+emit_16(1818);
+emit_16(1752);
+emit_16(1819);
+emit_16(1753);
+emit_16(1819);
+emit_16(1752);
+emit_16(1819);
+emit_16(1753);
+emit_16(1820);
+emit_16(1754);
+emit_16(1820);
+emit_16(1753);
+emit_16(1820);
+emit_16(1754);
+emit_16(1821);
+emit_16(1755);
+emit_16(1821);
+emit_16(1754);
+emit_16(1821);
+emit_16(1755);
+emit_16(1822);
+emit_16(1756);
+emit_16(1822);
+emit_16(1755);
+emit_16(1822);
+emit_16(1756);
+emit_16(1823);
+emit_16(1757);
+emit_16(1823);
+emit_16(1756);
+emit_16(1823);
+emit_16(1757);
+emit_16(1824);
+emit_16(1758);
+emit_16(1824);
+emit_16(1757);
+emit_16(1824);
+emit_16(1758);
+emit_16(1825);
+emit_16(1759);
+emit_16(1825);
+emit_16(1758);
+emit_16(1825);
+emit_16(1759);
+emit_16(1826);
+emit_16(1760);
+emit_16(1826);
+emit_16(1759);
+emit_16(1826);
+emit_16(1760);
+emit_16(1827);
+emit_16(1761);
+emit_16(1827);
+emit_16(1760);
+emit_16(1827);
+emit_16(1761);
+emit_16(1828);
+emit_16(1762);
+emit_16(1828);
+emit_16(1761);
+emit_16(1828);
+emit_16(1762);
+emit_16(1829);
+emit_16(1763);
+emit_16(1829);
+emit_16(1762);
+emit_16(1829);
+emit_16(1763);
+emit_16(1830);
+emit_16(1764);
+emit_16(1830);
+emit_16(1763);
+emit_16(1830);
+emit_16(1764);
+emit_16(1831);
+emit_16(1765);
+emit_16(1831);
+emit_16(1764);
+emit_16(1831);
+emit_16(1765);
+emit_16(1832);
+emit_16(1766);
+emit_16(1832);
+emit_16(1765);
+emit_16(1832);
+emit_16(1766);
+emit_16(1833);
+emit_16(1767);
+emit_16(1833);
+emit_16(1766);
+emit_16(1833);
+emit_16(1767);
+emit_16(1834);
+emit_16(1768);
+emit_16(1834);
+emit_16(1767);
+emit_16(1834);
+emit_16(1768);
+emit_16(1835);
+emit_16(1769);
+emit_16(1835);
+emit_16(1768);
+emit_16(1835);
+emit_16(1769);
+emit_16(1836);
+emit_16(1770);
+emit_16(1836);
+emit_16(1769);
+emit_16(1836);
+emit_16(1770);
+emit_16(1837);
+emit_16(1771);
+emit_16(1837);
+emit_16(1770);
+emit_16(1837);
+emit_16(1771);
+emit_16(1838);
+emit_16(1772);
+emit_16(1838);
+emit_16(1771);
+emit_16(1838);
+emit_16(1772);
+emit_16(1839);
+emit_16(1773);
+emit_16(1839);
+emit_16(1772);
+emit_16(1839);
+emit_16(1773);
+emit_16(1840);
+emit_16(1774);
+emit_16(1840);
+emit_16(1773);
+emit_16(1840);
+emit_16(1774);
+emit_16(1841);
+emit_16(1775);
+emit_16(1841);
+emit_16(1774);
+emit_16(1841);
+emit_16(1775);
+emit_16(1842);
+emit_16(1776);
+emit_16(1842);
+emit_16(1775);
+emit_16(1842);
+emit_16(1776);
+emit_16(1843);
+emit_16(1777);
+emit_16(1843);
+emit_16(1776);
+emit_16(1843);
+emit_16(1777);
+emit_16(1844);
+emit_16(1778);
+emit_16(1844);
+emit_16(1777);
+emit_16(1844);
+emit_16(1778);
+emit_16(1845);
+emit_16(1779);
+emit_16(1845);
+emit_16(1778);
+emit_16(1845);
+emit_16(1779);
+emit_16(1846);
+emit_16(1780);
+emit_16(1846);
+emit_16(1779);
+emit_16(1846);
+emit_16(1780);
+emit_16(1847);
+emit_16(1781);
+emit_16(1847);
+emit_16(1780);
+emit_16(1848);
+emit_16(1782);
+emit_16(1849);
+emit_16(1783);
+emit_16(1849);
+emit_16(1782);
+emit_16(1849);
+emit_16(1783);
+emit_16(1850);
+emit_16(1784);
+emit_16(1850);
+emit_16(1783);
+emit_16(1850);
+emit_16(1784);
+emit_16(1851);
+emit_16(1785);
+emit_16(1851);
+emit_16(1784);
+emit_16(1851);
+emit_16(1785);
+emit_16(1852);
+emit_16(1786);
+emit_16(1852);
+emit_16(1785);
+emit_16(1852);
+emit_16(1786);
+emit_16(1853);
+emit_16(1787);
+emit_16(1853);
+emit_16(1786);
+emit_16(1853);
+emit_16(1787);
+emit_16(1854);
+emit_16(1788);
+emit_16(1854);
+emit_16(1787);
+emit_16(1854);
+emit_16(1788);
+emit_16(1855);
+emit_16(1789);
+emit_16(1855);
+emit_16(1788);
+emit_16(1855);
+emit_16(1789);
+emit_16(1856);
+emit_16(1790);
+emit_16(1856);
+emit_16(1789);
+emit_16(1856);
+emit_16(1790);
+emit_16(1857);
+emit_16(1791);
+emit_16(1857);
+emit_16(1790);
+emit_16(1857);
+emit_16(1791);
+emit_16(1858);
+emit_16(1792);
+emit_16(1858);
+emit_16(1791);
+emit_16(1858);
+emit_16(1792);
+emit_16(1859);
+emit_16(1793);
+emit_16(1859);
+emit_16(1792);
+emit_16(1859);
+emit_16(1793);
+emit_16(1860);
+emit_16(1794);
+emit_16(1860);
+emit_16(1793);
+emit_16(1860);
+emit_16(1794);
+emit_16(1861);
+emit_16(1795);
+emit_16(1861);
+emit_16(1794);
+emit_16(1861);
+emit_16(1795);
+emit_16(1862);
+emit_16(1796);
+emit_16(1862);
+emit_16(1795);
+emit_16(1862);
+emit_16(1796);
+emit_16(1863);
+emit_16(1797);
+emit_16(1863);
+emit_16(1796);
+emit_16(1863);
+emit_16(1797);
+emit_16(1864);
+emit_16(1798);
+emit_16(1864);
+emit_16(1797);
+emit_16(1864);
+emit_16(1798);
+emit_16(1865);
+emit_16(1799);
+emit_16(1865);
+emit_16(1798);
+emit_16(1865);
+emit_16(1799);
+emit_16(1866);
+emit_16(1800);
+emit_16(1866);
+emit_16(1799);
+emit_16(1866);
+emit_16(1800);
+emit_16(1867);
+emit_16(1801);
+emit_16(1867);
+emit_16(1800);
+emit_16(1867);
+emit_16(1801);
+emit_16(1868);
+emit_16(1802);
+emit_16(1868);
+emit_16(1801);
+emit_16(1868);
+emit_16(1802);
+emit_16(1869);
+emit_16(1803);
+emit_16(1869);
+emit_16(1802);
+emit_16(1869);
+emit_16(1803);
+emit_16(1870);
+emit_16(1804);
+emit_16(1870);
+emit_16(1803);
+emit_16(1870);
+emit_16(1804);
+emit_16(1871);
+emit_16(1805);
+emit_16(1871);
+emit_16(1804);
+emit_16(1871);
+emit_16(1805);
+emit_16(1872);
+emit_16(1806);
+emit_16(1872);
+emit_16(1805);
+emit_16(1872);
+emit_16(1806);
+emit_16(1873);
+emit_16(1807);
+emit_16(1873);
+emit_16(1806);
+emit_16(1873);
+emit_16(1807);
+emit_16(1874);
+emit_16(1808);
+emit_16(1874);
+emit_16(1807);
+emit_16(1874);
+emit_16(1808);
+emit_16(1875);
+emit_16(1809);
+emit_16(1875);
+emit_16(1808);
+emit_16(1875);
+emit_16(1809);
+emit_16(1876);
+emit_16(1810);
+emit_16(1876);
+emit_16(1809);
+emit_16(1876);
+emit_16(1810);
+emit_16(1877);
+emit_16(1811);
+emit_16(1877);
+emit_16(1810);
+emit_16(1877);
+emit_16(1811);
+emit_16(1878);
+emit_16(1812);
+emit_16(1878);
+emit_16(1811);
+emit_16(1878);
+emit_16(1812);
+emit_16(1879);
+emit_16(1813);
+emit_16(1879);
+emit_16(1812);
+emit_16(1879);
+emit_16(1813);
+emit_16(1880);
+emit_16(1814);
+emit_16(1880);
+emit_16(1813);
+emit_16(1880);
+emit_16(1814);
+emit_16(1881);
+emit_16(1815);
+emit_16(1881);
+emit_16(1814);
+emit_16(1881);
+emit_16(1815);
+emit_16(1882);
+emit_16(1816);
+emit_16(1882);
+emit_16(1815);
+emit_16(1882);
+emit_16(1816);
+emit_16(1883);
+emit_16(1817);
+emit_16(1883);
+emit_16(1816);
+emit_16(1883);
+emit_16(1817);
+emit_16(1884);
+emit_16(1818);
+emit_16(1884);
+emit_16(1817);
+emit_16(1884);
+emit_16(1818);
+emit_16(1885);
+emit_16(1819);
+emit_16(1885);
+emit_16(1818);
+emit_16(1885);
+emit_16(1819);
+emit_16(1886);
+emit_16(1820);
+emit_16(1886);
+emit_16(1819);
+emit_16(1886);
+emit_16(1820);
+emit_16(1887);
+emit_16(1821);
+emit_16(1887);
+emit_16(1820);
+emit_16(1887);
+emit_16(1821);
+emit_16(1888);
+emit_16(1822);
+emit_16(1888);
+emit_16(1821);
+emit_16(1888);
+emit_16(1822);
+emit_16(1889);
+emit_16(1823);
+emit_16(1889);
+emit_16(1822);
+emit_16(1889);
+emit_16(1823);
+emit_16(1890);
+emit_16(1824);
+emit_16(1890);
+emit_16(1823);
+emit_16(1890);
+emit_16(1824);
+emit_16(1891);
+emit_16(1825);
+emit_16(1891);
+emit_16(1824);
+emit_16(1891);
+emit_16(1825);
+emit_16(1892);
+emit_16(1826);
+emit_16(1892);
+emit_16(1825);
+emit_16(1892);
+emit_16(1826);
+emit_16(1893);
+emit_16(1827);
+emit_16(1893);
+emit_16(1826);
+emit_16(1893);
+emit_16(1827);
+emit_16(1894);
+emit_16(1828);
+emit_16(1894);
+emit_16(1827);
+emit_16(1894);
+emit_16(1828);
+emit_16(1895);
+emit_16(1829);
+emit_16(1895);
+emit_16(1828);
+emit_16(1895);
+emit_16(1829);
+emit_16(1896);
+emit_16(1830);
+emit_16(1896);
+emit_16(1829);
+emit_16(1896);
+emit_16(1830);
+emit_16(1897);
+emit_16(1831);
+emit_16(1897);
+emit_16(1830);
+emit_16(1897);
+emit_16(1831);
+emit_16(1898);
+emit_16(1832);
+emit_16(1898);
+emit_16(1831);
+emit_16(1898);
+emit_16(1832);
+emit_16(1899);
+emit_16(1833);
+emit_16(1899);
+emit_16(1832);
+emit_16(1899);
+emit_16(1833);
+emit_16(1900);
+emit_16(1834);
+emit_16(1900);
+emit_16(1833);
+emit_16(1900);
+emit_16(1834);
+emit_16(1901);
+emit_16(1835);
+emit_16(1901);
+emit_16(1834);
+emit_16(1901);
+emit_16(1835);
+emit_16(1902);
+emit_16(1836);
+emit_16(1902);
+emit_16(1835);
+emit_16(1902);
+emit_16(1836);
+emit_16(1903);
+emit_16(1837);
+emit_16(1903);
+emit_16(1836);
+emit_16(1903);
+emit_16(1837);
+emit_16(1904);
+emit_16(1838);
+emit_16(1904);
+emit_16(1837);
+emit_16(1904);
+emit_16(1838);
+emit_16(1905);
+emit_16(1839);
+emit_16(1905);
+emit_16(1838);
+emit_16(1905);
+emit_16(1839);
+emit_16(1906);
+emit_16(1840);
+emit_16(1906);
+emit_16(1839);
+emit_16(1906);
+emit_16(1840);
+emit_16(1907);
+emit_16(1841);
+emit_16(1907);
+emit_16(1840);
+emit_16(1907);
+emit_16(1841);
+emit_16(1908);
+emit_16(1842);
+emit_16(1908);
+emit_16(1841);
+emit_16(1908);
+emit_16(1842);
+emit_16(1909);
+emit_16(1843);
+emit_16(1909);
+emit_16(1842);
+emit_16(1909);
+emit_16(1843);
+emit_16(1910);
+emit_16(1844);
+emit_16(1910);
+emit_16(1843);
+emit_16(1910);
+emit_16(1844);
+emit_16(1911);
+emit_16(1845);
+emit_16(1911);
+emit_16(1844);
+emit_16(1911);
+emit_16(1845);
+emit_16(1912);
+emit_16(1846);
+emit_16(1912);
+emit_16(1845);
+emit_16(1912);
+emit_16(1846);
+emit_16(1913);
+emit_16(1847);
+emit_16(1913);
+emit_16(1846);
+emit_16(1914);
+emit_16(1848);
+emit_16(1915);
+emit_16(1849);
+emit_16(1915);
+emit_16(1848);
+emit_16(1915);
+emit_16(1849);
+emit_16(1916);
+emit_16(1850);
+emit_16(1916);
+emit_16(1849);
+emit_16(1916);
+emit_16(1850);
+emit_16(1917);
+emit_16(1851);
+emit_16(1917);
+emit_16(1850);
+emit_16(1917);
+emit_16(1851);
+emit_16(1918);
+emit_16(1852);
+emit_16(1918);
+emit_16(1851);
+emit_16(1918);
+emit_16(1852);
+emit_16(1919);
+emit_16(1853);
+emit_16(1919);
+emit_16(1852);
+emit_16(1919);
+emit_16(1853);
+emit_16(1920);
+emit_16(1854);
+emit_16(1920);
+emit_16(1853);
+emit_16(1920);
+emit_16(1854);
+emit_16(1921);
+emit_16(1855);
+emit_16(1921);
+emit_16(1854);
+emit_16(1921);
+emit_16(1855);
+emit_16(1922);
+emit_16(1856);
+emit_16(1922);
+emit_16(1855);
+emit_16(1922);
+emit_16(1856);
+emit_16(1923);
+emit_16(1857);
+emit_16(1923);
+emit_16(1856);
+emit_16(1923);
+emit_16(1857);
+emit_16(1924);
+emit_16(1858);
+emit_16(1924);
+emit_16(1857);
+emit_16(1924);
+emit_16(1858);
+emit_16(1925);
+emit_16(1859);
+emit_16(1925);
+emit_16(1858);
+emit_16(1925);
+emit_16(1859);
+emit_16(1926);
+emit_16(1860);
+emit_16(1926);
+emit_16(1859);
+emit_16(1926);
+emit_16(1860);
+emit_16(1927);
+emit_16(1861);
+emit_16(1927);
+emit_16(1860);
+emit_16(1927);
+emit_16(1861);
+emit_16(1928);
+emit_16(1862);
+emit_16(1928);
+emit_16(1861);
+emit_16(1928);
+emit_16(1862);
+emit_16(1929);
+emit_16(1863);
+emit_16(1929);
+emit_16(1862);
+emit_16(1929);
+emit_16(1863);
+emit_16(1930);
+emit_16(1864);
+emit_16(1930);
+emit_16(1863);
+emit_16(1930);
+emit_16(1864);
+emit_16(1931);
+emit_16(1865);
+emit_16(1931);
+emit_16(1864);
+emit_16(1931);
+emit_16(1865);
+emit_16(1932);
+emit_16(1866);
+emit_16(1932);
+emit_16(1865);
+emit_16(1932);
+emit_16(1866);
+emit_16(1933);
+emit_16(1867);
+emit_16(1933);
+emit_16(1866);
+emit_16(1933);
+emit_16(1867);
+emit_16(1934);
+emit_16(1868);
+emit_16(1934);
+emit_16(1867);
+emit_16(1934);
+emit_16(1868);
+emit_16(1935);
+emit_16(1869);
+emit_16(1935);
+emit_16(1868);
+emit_16(1935);
+emit_16(1869);
+emit_16(1936);
+emit_16(1870);
+emit_16(1936);
+emit_16(1869);
+emit_16(1936);
+emit_16(1870);
+emit_16(1937);
+emit_16(1871);
+emit_16(1937);
+emit_16(1870);
+emit_16(1937);
+emit_16(1871);
+emit_16(1938);
+emit_16(1872);
+emit_16(1938);
+emit_16(1871);
+emit_16(1938);
+emit_16(1872);
+emit_16(1939);
+emit_16(1873);
+emit_16(1939);
+emit_16(1872);
+emit_16(1939);
+emit_16(1873);
+emit_16(1940);
+emit_16(1874);
+emit_16(1940);
+emit_16(1873);
+emit_16(1940);
+emit_16(1874);
+emit_16(1941);
+emit_16(1875);
+emit_16(1941);
+emit_16(1874);
+emit_16(1941);
+emit_16(1875);
+emit_16(1942);
+emit_16(1876);
+emit_16(1942);
+emit_16(1875);
+emit_16(1942);
+emit_16(1876);
+emit_16(1943);
+emit_16(1877);
+emit_16(1943);
+emit_16(1876);
+emit_16(1943);
+emit_16(1877);
+emit_16(1944);
+emit_16(1878);
+emit_16(1944);
+emit_16(1877);
+emit_16(1944);
+emit_16(1878);
+emit_16(1945);
+emit_16(1879);
+emit_16(1945);
+emit_16(1878);
+emit_16(1945);
+emit_16(1879);
+emit_16(1946);
+emit_16(1880);
+emit_16(1946);
+emit_16(1879);
+emit_16(1946);
+emit_16(1880);
+emit_16(1947);
+emit_16(1881);
+emit_16(1947);
+emit_16(1880);
+emit_16(1947);
+emit_16(1881);
+emit_16(1948);
+emit_16(1882);
+emit_16(1948);
+emit_16(1881);
+emit_16(1948);
+emit_16(1882);
+emit_16(1949);
+emit_16(1883);
+emit_16(1949);
+emit_16(1882);
+emit_16(1949);
+emit_16(1883);
+emit_16(1950);
+emit_16(1884);
+emit_16(1950);
+emit_16(1883);
+emit_16(1950);
+emit_16(1884);
+emit_16(1951);
+emit_16(1885);
+emit_16(1951);
+emit_16(1884);
+emit_16(1951);
+emit_16(1885);
+emit_16(1952);
+emit_16(1886);
+emit_16(1952);
+emit_16(1885);
+emit_16(1952);
+emit_16(1886);
+emit_16(1953);
+emit_16(1887);
+emit_16(1953);
+emit_16(1886);
+emit_16(1953);
+emit_16(1887);
+emit_16(1954);
+emit_16(1888);
+emit_16(1954);
+emit_16(1887);
+emit_16(1954);
+emit_16(1888);
+emit_16(1955);
+emit_16(1889);
+emit_16(1955);
+emit_16(1888);
+emit_16(1955);
+emit_16(1889);
+emit_16(1956);
+emit_16(1890);
+emit_16(1956);
+emit_16(1889);
+emit_16(1956);
+emit_16(1890);
+emit_16(1957);
+emit_16(1891);
+emit_16(1957);
+emit_16(1890);
+emit_16(1957);
+emit_16(1891);
+emit_16(1958);
+emit_16(1892);
+emit_16(1958);
+emit_16(1891);
+emit_16(1958);
+emit_16(1892);
+emit_16(1959);
+emit_16(1893);
+emit_16(1959);
+emit_16(1892);
+emit_16(1959);
+emit_16(1893);
+emit_16(1960);
+emit_16(1894);
+emit_16(1960);
+emit_16(1893);
+emit_16(1960);
+emit_16(1894);
+emit_16(1961);
+emit_16(1895);
+emit_16(1961);
+emit_16(1894);
+emit_16(1961);
+emit_16(1895);
+emit_16(1962);
+emit_16(1896);
+emit_16(1962);
+emit_16(1895);
+emit_16(1962);
+emit_16(1896);
+emit_16(1963);
+emit_16(1897);
+emit_16(1963);
+emit_16(1896);
+emit_16(1963);
+emit_16(1897);
+emit_16(1964);
+emit_16(1898);
+emit_16(1964);
+emit_16(1897);
+emit_16(1964);
+emit_16(1898);
+emit_16(1965);
+emit_16(1899);
+emit_16(1965);
+emit_16(1898);
+emit_16(1965);
+emit_16(1899);
+emit_16(1966);
+emit_16(1900);
+emit_16(1966);
+emit_16(1899);
+emit_16(1966);
+emit_16(1900);
+emit_16(1967);
+emit_16(1901);
+emit_16(1967);
+emit_16(1900);
+emit_16(1967);
+emit_16(1901);
+emit_16(1968);
+emit_16(1902);
+emit_16(1968);
+emit_16(1901);
+emit_16(1968);
+emit_16(1902);
+emit_16(1969);
+emit_16(1903);
+emit_16(1969);
+emit_16(1902);
+emit_16(1969);
+emit_16(1903);
+emit_16(1970);
+emit_16(1904);
+emit_16(1970);
+emit_16(1903);
+emit_16(1970);
+emit_16(1904);
+emit_16(1971);
+emit_16(1905);
+emit_16(1971);
+emit_16(1904);
+emit_16(1971);
+emit_16(1905);
+emit_16(1972);
+emit_16(1906);
+emit_16(1972);
+emit_16(1905);
+emit_16(1972);
+emit_16(1906);
+emit_16(1973);
+emit_16(1907);
+emit_16(1973);
+emit_16(1906);
+emit_16(1973);
+emit_16(1907);
+emit_16(1974);
+emit_16(1908);
+emit_16(1974);
+emit_16(1907);
+emit_16(1974);
+emit_16(1908);
+emit_16(1975);
+emit_16(1909);
+emit_16(1975);
+emit_16(1908);
+emit_16(1975);
+emit_16(1909);
+emit_16(1976);
+emit_16(1910);
+emit_16(1976);
+emit_16(1909);
+emit_16(1976);
+emit_16(1910);
+emit_16(1977);
+emit_16(1911);
+emit_16(1977);
+emit_16(1910);
+emit_16(1977);
+emit_16(1911);
+emit_16(1978);
+emit_16(1912);
+emit_16(1978);
+emit_16(1911);
+emit_16(1978);
+emit_16(1912);
+emit_16(1979);
+emit_16(1913);
+emit_16(1979);
+emit_16(1912);
+emit_start(Landscape03Idx)
+emit_16(0);
+emit_16(1);
+emit_16(2);
+emit_16(3);
+emit_16(2);
+emit_16(1);
+emit_16(2);
+emit_16(3);
+emit_16(4);
+emit_16(5);
+emit_16(4);
+emit_16(3);
+emit_16(4);
+emit_16(5);
+emit_16(6);
+emit_16(7);
+emit_16(6);
+emit_16(5);
+emit_16(6);
+emit_16(7);
+emit_16(8);
+emit_16(9);
+emit_16(8);
+emit_16(7);
+emit_16(8);
+emit_16(9);
+emit_16(10);
+emit_16(11);
+emit_16(10);
+emit_16(9);
+emit_16(10);
+emit_16(11);
+emit_16(12);
+emit_16(13);
+emit_16(12);
+emit_16(11);
+emit_16(12);
+emit_16(13);
+emit_16(14);
+emit_16(15);
+emit_16(14);
+emit_16(13);
+emit_16(14);
+emit_16(15);
+emit_16(16);
+emit_16(17);
+emit_16(16);
+emit_16(15);
+emit_16(16);
+emit_16(17);
+emit_16(18);
+emit_16(19);
+emit_16(18);
+emit_16(17);
+emit_16(18);
+emit_16(19);
+emit_16(20);
+emit_16(21);
+emit_16(20);
+emit_16(19);
+emit_16(20);
+emit_16(21);
+emit_16(22);
+emit_16(23);
+emit_16(22);
+emit_16(21);
+emit_16(22);
+emit_16(23);
+emit_16(24);
+emit_16(25);
+emit_16(24);
+emit_16(23);
+emit_16(24);
+emit_16(25);
+emit_16(26);
+emit_16(27);
+emit_16(26);
+emit_16(25);
+emit_16(26);
+emit_16(27);
+emit_16(28);
+emit_16(29);
+emit_16(28);
+emit_16(27);
+emit_16(28);
+emit_16(29);
+emit_16(30);
+emit_16(31);
+emit_16(30);
+emit_16(29);
+emit_16(30);
+emit_16(31);
+emit_16(32);
+emit_16(33);
+emit_16(32);
+emit_16(31);
+emit_16(32);
+emit_16(33);
+emit_16(34);
+emit_16(35);
+emit_16(34);
+emit_16(33);
+emit_16(34);
+emit_16(35);
+emit_16(36);
+emit_16(37);
+emit_16(36);
+emit_16(35);
+emit_16(36);
+emit_16(37);
+emit_16(38);
+emit_16(39);
+emit_16(38);
+emit_16(37);
+emit_16(38);
+emit_16(39);
+emit_16(40);
+emit_16(41);
+emit_16(40);
+emit_16(39);
+emit_16(40);
+emit_16(41);
+emit_16(42);
+emit_16(43);
+emit_16(42);
+emit_16(41);
+emit_16(42);
+emit_16(43);
+emit_16(44);
+emit_16(45);
+emit_16(44);
+emit_16(43);
+emit_16(44);
+emit_16(45);
+emit_16(46);
+emit_16(47);
+emit_16(46);
+emit_16(45);
+emit_16(46);
+emit_16(47);
+emit_16(48);
+emit_16(49);
+emit_16(48);
+emit_16(47);
+emit_16(48);
+emit_16(49);
+emit_16(50);
+emit_16(51);
+emit_16(50);
+emit_16(49);
+emit_16(50);
+emit_16(51);
+emit_16(52);
+emit_16(53);
+emit_16(52);
+emit_16(51);
+emit_16(52);
+emit_16(53);
+emit_16(54);
+emit_16(55);
+emit_16(54);
+emit_16(53);
+emit_16(54);
+emit_16(55);
+emit_16(56);
+emit_16(57);
+emit_16(56);
+emit_16(55);
+emit_16(56);
+emit_16(57);
+emit_16(58);
+emit_16(59);
+emit_16(58);
+emit_16(57);
+emit_16(58);
+emit_16(59);
+emit_16(60);
+emit_16(61);
+emit_16(60);
+emit_16(59);
+emit_16(60);
+emit_16(61);
+emit_16(62);
+emit_16(63);
+emit_16(62);
+emit_16(61);
+emit_16(62);
+emit_16(63);
+emit_16(64);
+emit_16(65);
+emit_16(64);
+emit_16(63);
+emit_16(64);
+emit_16(65);
+emit_16(66);
+emit_16(67);
+emit_16(66);
+emit_16(65);
+emit_16(66);
+emit_16(67);
+emit_16(68);
+emit_16(69);
+emit_16(68);
+emit_16(67);
+emit_16(68);
+emit_16(69);
+emit_16(70);
+emit_16(71);
+emit_16(70);
+emit_16(69);
+emit_16(70);
+emit_16(71);
+emit_16(72);
+emit_16(73);
+emit_16(72);
+emit_16(71);
+emit_16(72);
+emit_16(73);
+emit_16(74);
+emit_16(75);
+emit_16(74);
+emit_16(73);
+emit_16(74);
+emit_16(75);
+emit_16(76);
+emit_16(77);
+emit_16(76);
+emit_16(75);
+emit_16(76);
+emit_16(77);
+emit_16(78);
+emit_16(79);
+emit_16(78);
+emit_16(77);
+emit_16(78);
+emit_16(79);
+emit_16(80);
+emit_16(81);
+emit_16(80);
+emit_16(79);
+emit_16(80);
+emit_16(81);
+emit_16(82);
+emit_16(83);
+emit_16(82);
+emit_16(81);
+emit_16(82);
+emit_16(83);
+emit_16(84);
+emit_16(85);
+emit_16(84);
+emit_16(83);
+emit_16(84);
+emit_16(85);
+emit_16(86);
+emit_16(87);
+emit_16(86);
+emit_16(85);
+emit_16(86);
+emit_16(87);
+emit_16(88);
+emit_16(89);
+emit_16(88);
+emit_16(87);
+emit_16(88);
+emit_16(89);
+emit_16(90);
+emit_16(91);
+emit_16(90);
+emit_16(89);
+emit_16(90);
+emit_16(91);
+emit_16(92);
+emit_16(93);
+emit_16(92);
+emit_16(91);
+emit_16(92);
+emit_16(93);
+emit_16(94);
+emit_16(95);
+emit_16(94);
+emit_16(93);
+emit_16(94);
+emit_16(95);
+emit_16(96);
+emit_16(97);
+emit_16(96);
+emit_16(95);
+emit_16(96);
+emit_16(97);
+emit_16(98);
+emit_16(99);
+emit_16(98);
+emit_16(97);
+emit_16(98);
+emit_16(99);
+emit_16(100);
+emit_16(101);
+emit_16(100);
+emit_16(99);
+emit_16(100);
+emit_16(101);
+emit_16(102);
+emit_16(103);
+emit_16(102);
+emit_16(101);
+emit_16(102);
+emit_16(103);
+emit_16(104);
+emit_16(105);
+emit_16(104);
+emit_16(103);
+emit_16(104);
+emit_16(105);
+emit_16(106);
+emit_16(107);
+emit_16(106);
+emit_16(105);
+emit_16(106);
+emit_16(107);
+emit_16(108);
+emit_16(109);
+emit_16(108);
+emit_16(107);
+emit_16(108);
+emit_16(109);
+emit_16(110);
+emit_16(111);
+emit_16(110);
+emit_16(109);
+emit_16(110);
+emit_16(111);
+emit_16(112);
+emit_16(113);
+emit_16(112);
+emit_16(111);
+emit_16(112);
+emit_16(113);
+emit_16(114);
+emit_16(115);
+emit_16(114);
+emit_16(113);
+emit_16(114);
+emit_16(115);
+emit_16(116);
+emit_16(117);
+emit_16(116);
+emit_16(115);
+emit_16(116);
+emit_16(117);
+emit_16(118);
+emit_16(119);
+emit_16(118);
+emit_16(117);
+emit_16(118);
+emit_16(119);
+emit_16(120);
+emit_16(121);
+emit_16(120);
+emit_16(119);
+emit_16(120);
+emit_16(121);
+emit_16(122);
+emit_16(123);
+emit_16(122);
+emit_16(121);
+emit_16(122);
+emit_16(123);
+emit_16(124);
+emit_16(125);
+emit_16(124);
+emit_16(123);
+emit_16(124);
+emit_16(125);
+emit_16(126);
+emit_16(127);
+emit_16(126);
+emit_16(125);
+emit_16(128);
+emit_16(0);
+emit_16(129);
+emit_16(2);
+emit_16(129);
+emit_16(0);
+emit_16(129);
+emit_16(2);
+emit_16(130);
+emit_16(4);
+emit_16(130);
+emit_16(2);
+emit_16(130);
+emit_16(4);
+emit_16(131);
+emit_16(6);
+emit_16(131);
+emit_16(4);
+emit_16(131);
+emit_16(6);
+emit_16(132);
+emit_16(8);
+emit_16(132);
+emit_16(6);
+emit_16(132);
+emit_16(8);
+emit_16(133);
+emit_16(10);
+emit_16(133);
+emit_16(8);
+emit_16(133);
+emit_16(10);
+emit_16(134);
+emit_16(12);
+emit_16(134);
+emit_16(10);
+emit_16(134);
+emit_16(12);
+emit_16(135);
+emit_16(14);
+emit_16(135);
+emit_16(12);
+emit_16(135);
+emit_16(14);
+emit_16(136);
+emit_16(16);
+emit_16(136);
+emit_16(14);
+emit_16(136);
+emit_16(16);
+emit_16(137);
+emit_16(18);
+emit_16(137);
+emit_16(16);
+emit_16(137);
+emit_16(18);
+emit_16(138);
+emit_16(20);
+emit_16(138);
+emit_16(18);
+emit_16(138);
+emit_16(20);
+emit_16(139);
+emit_16(22);
+emit_16(139);
+emit_16(20);
+emit_16(139);
+emit_16(22);
+emit_16(140);
+emit_16(24);
+emit_16(140);
+emit_16(22);
+emit_16(140);
+emit_16(24);
+emit_16(141);
+emit_16(26);
+emit_16(141);
+emit_16(24);
+emit_16(141);
+emit_16(26);
+emit_16(142);
+emit_16(28);
+emit_16(142);
+emit_16(26);
+emit_16(142);
+emit_16(28);
+emit_16(143);
+emit_16(30);
+emit_16(143);
+emit_16(28);
+emit_16(143);
+emit_16(30);
+emit_16(144);
+emit_16(32);
+emit_16(144);
+emit_16(30);
+emit_16(144);
+emit_16(32);
+emit_16(145);
+emit_16(34);
+emit_16(145);
+emit_16(32);
+emit_16(145);
+emit_16(34);
+emit_16(146);
+emit_16(36);
+emit_16(146);
+emit_16(34);
+emit_16(146);
+emit_16(36);
+emit_16(147);
+emit_16(38);
+emit_16(147);
+emit_16(36);
+emit_16(147);
+emit_16(38);
+emit_16(148);
+emit_16(40);
+emit_16(148);
+emit_16(38);
+emit_16(148);
+emit_16(40);
+emit_16(149);
+emit_16(42);
+emit_16(149);
+emit_16(40);
+emit_16(149);
+emit_16(42);
+emit_16(150);
+emit_16(44);
+emit_16(150);
+emit_16(42);
+emit_16(150);
+emit_16(44);
+emit_16(151);
+emit_16(46);
+emit_16(151);
+emit_16(44);
+emit_16(151);
+emit_16(46);
+emit_16(152);
+emit_16(48);
+emit_16(152);
+emit_16(46);
+emit_16(152);
+emit_16(48);
+emit_16(153);
+emit_16(50);
+emit_16(153);
+emit_16(48);
+emit_16(153);
+emit_16(50);
+emit_16(154);
+emit_16(52);
+emit_16(154);
+emit_16(50);
+emit_16(154);
+emit_16(52);
+emit_16(155);
+emit_16(54);
+emit_16(155);
+emit_16(52);
+emit_16(155);
+emit_16(54);
+emit_16(156);
+emit_16(56);
+emit_16(156);
+emit_16(54);
+emit_16(156);
+emit_16(56);
+emit_16(157);
+emit_16(58);
+emit_16(157);
+emit_16(56);
+emit_16(157);
+emit_16(58);
+emit_16(158);
+emit_16(60);
+emit_16(158);
+emit_16(58);
+emit_16(158);
+emit_16(60);
+emit_16(159);
+emit_16(62);
+emit_16(159);
+emit_16(60);
+emit_16(159);
+emit_16(62);
+emit_16(160);
+emit_16(64);
+emit_16(160);
+emit_16(62);
+emit_16(160);
+emit_16(64);
+emit_16(161);
+emit_16(66);
+emit_16(161);
+emit_16(64);
+emit_16(161);
+emit_16(66);
+emit_16(162);
+emit_16(68);
+emit_16(162);
+emit_16(66);
+emit_16(162);
+emit_16(68);
+emit_16(163);
+emit_16(70);
+emit_16(163);
+emit_16(68);
+emit_16(163);
+emit_16(70);
+emit_16(164);
+emit_16(72);
+emit_16(164);
+emit_16(70);
+emit_16(164);
+emit_16(72);
+emit_16(165);
+emit_16(74);
+emit_16(165);
+emit_16(72);
+emit_16(165);
+emit_16(74);
+emit_16(166);
+emit_16(76);
+emit_16(166);
+emit_16(74);
+emit_16(166);
+emit_16(76);
+emit_16(167);
+emit_16(78);
+emit_16(167);
+emit_16(76);
+emit_16(167);
+emit_16(78);
+emit_16(168);
+emit_16(80);
+emit_16(168);
+emit_16(78);
+emit_16(168);
+emit_16(80);
+emit_16(169);
+emit_16(82);
+emit_16(169);
+emit_16(80);
+emit_16(169);
+emit_16(82);
+emit_16(170);
+emit_16(84);
+emit_16(170);
+emit_16(82);
+emit_16(170);
+emit_16(84);
+emit_16(171);
+emit_16(86);
+emit_16(171);
+emit_16(84);
+emit_16(171);
+emit_16(86);
+emit_16(172);
+emit_16(88);
+emit_16(172);
+emit_16(86);
+emit_16(172);
+emit_16(88);
+emit_16(173);
+emit_16(90);
+emit_16(173);
+emit_16(88);
+emit_16(173);
+emit_16(90);
+emit_16(174);
+emit_16(92);
+emit_16(174);
+emit_16(90);
+emit_16(174);
+emit_16(92);
+emit_16(175);
+emit_16(94);
+emit_16(175);
+emit_16(92);
+emit_16(175);
+emit_16(94);
+emit_16(176);
+emit_16(96);
+emit_16(176);
+emit_16(94);
+emit_16(176);
+emit_16(96);
+emit_16(177);
+emit_16(98);
+emit_16(177);
+emit_16(96);
+emit_16(177);
+emit_16(98);
+emit_16(178);
+emit_16(100);
+emit_16(178);
+emit_16(98);
+emit_16(178);
+emit_16(100);
+emit_16(179);
+emit_16(102);
+emit_16(179);
+emit_16(100);
+emit_16(179);
+emit_16(102);
+emit_16(180);
+emit_16(104);
+emit_16(180);
+emit_16(102);
+emit_16(180);
+emit_16(104);
+emit_16(181);
+emit_16(106);
+emit_16(181);
+emit_16(104);
+emit_16(181);
+emit_16(106);
+emit_16(182);
+emit_16(108);
+emit_16(182);
+emit_16(106);
+emit_16(182);
+emit_16(108);
+emit_16(183);
+emit_16(110);
+emit_16(183);
+emit_16(108);
+emit_16(183);
+emit_16(110);
+emit_16(184);
+emit_16(112);
+emit_16(184);
+emit_16(110);
+emit_16(184);
+emit_16(112);
+emit_16(185);
+emit_16(114);
+emit_16(185);
+emit_16(112);
+emit_16(185);
+emit_16(114);
+emit_16(186);
+emit_16(116);
+emit_16(186);
+emit_16(114);
+emit_16(186);
+emit_16(116);
+emit_16(187);
+emit_16(118);
+emit_16(187);
+emit_16(116);
+emit_16(187);
+emit_16(118);
+emit_16(188);
+emit_16(120);
+emit_16(188);
+emit_16(118);
+emit_16(188);
+emit_16(120);
+emit_16(189);
+emit_16(122);
+emit_16(189);
+emit_16(120);
+emit_16(189);
+emit_16(122);
+emit_16(190);
+emit_16(124);
+emit_16(190);
+emit_16(122);
+emit_16(190);
+emit_16(124);
+emit_16(191);
+emit_16(126);
+emit_16(191);
+emit_16(124);
+emit_16(192);
+emit_16(128);
+emit_16(193);
+emit_16(129);
+emit_16(193);
+emit_16(128);
+emit_16(193);
+emit_16(129);
+emit_16(194);
+emit_16(130);
+emit_16(194);
+emit_16(129);
+emit_16(194);
+emit_16(130);
+emit_16(195);
+emit_16(131);
+emit_16(195);
+emit_16(130);
+emit_16(195);
+emit_16(131);
+emit_16(196);
+emit_16(132);
+emit_16(196);
+emit_16(131);
+emit_16(196);
+emit_16(132);
+emit_16(197);
+emit_16(133);
+emit_16(197);
+emit_16(132);
+emit_16(197);
+emit_16(133);
+emit_16(198);
+emit_16(134);
+emit_16(198);
+emit_16(133);
+emit_16(198);
+emit_16(134);
+emit_16(199);
+emit_16(135);
+emit_16(199);
+emit_16(134);
+emit_16(199);
+emit_16(135);
+emit_16(200);
+emit_16(136);
+emit_16(200);
+emit_16(135);
+emit_16(200);
+emit_16(136);
+emit_16(201);
+emit_16(137);
+emit_16(201);
+emit_16(136);
+emit_16(201);
+emit_16(137);
+emit_16(202);
+emit_16(138);
+emit_16(202);
+emit_16(137);
+emit_16(202);
+emit_16(138);
+emit_16(203);
+emit_16(139);
+emit_16(203);
+emit_16(138);
+emit_16(203);
+emit_16(139);
+emit_16(204);
+emit_16(140);
+emit_16(204);
+emit_16(139);
+emit_16(204);
+emit_16(140);
+emit_16(205);
+emit_16(141);
+emit_16(205);
+emit_16(140);
+emit_16(205);
+emit_16(141);
+emit_16(206);
+emit_16(142);
+emit_16(206);
+emit_16(141);
+emit_16(206);
+emit_16(142);
+emit_16(207);
+emit_16(143);
+emit_16(207);
+emit_16(142);
+emit_16(207);
+emit_16(143);
+emit_16(208);
+emit_16(144);
+emit_16(208);
+emit_16(143);
+emit_16(208);
+emit_16(144);
+emit_16(209);
+emit_16(145);
+emit_16(209);
+emit_16(144);
+emit_16(209);
+emit_16(145);
+emit_16(210);
+emit_16(146);
+emit_16(210);
+emit_16(145);
+emit_16(210);
+emit_16(146);
+emit_16(211);
+emit_16(147);
+emit_16(211);
+emit_16(146);
+emit_16(211);
+emit_16(147);
+emit_16(212);
+emit_16(148);
+emit_16(212);
+emit_16(147);
+emit_16(212);
+emit_16(148);
+emit_16(213);
+emit_16(149);
+emit_16(213);
+emit_16(148);
+emit_16(213);
+emit_16(149);
+emit_16(214);
+emit_16(150);
+emit_16(214);
+emit_16(149);
+emit_16(214);
+emit_16(150);
+emit_16(215);
+emit_16(151);
+emit_16(215);
+emit_16(150);
+emit_16(215);
+emit_16(151);
+emit_16(216);
+emit_16(152);
+emit_16(216);
+emit_16(151);
+emit_16(216);
+emit_16(152);
+emit_16(217);
+emit_16(153);
+emit_16(217);
+emit_16(152);
+emit_16(217);
+emit_16(153);
+emit_16(218);
+emit_16(154);
+emit_16(218);
+emit_16(153);
+emit_16(218);
+emit_16(154);
+emit_16(219);
+emit_16(155);
+emit_16(219);
+emit_16(154);
+emit_16(219);
+emit_16(155);
+emit_16(220);
+emit_16(156);
+emit_16(220);
+emit_16(155);
+emit_16(220);
+emit_16(156);
+emit_16(221);
+emit_16(157);
+emit_16(221);
+emit_16(156);
+emit_16(221);
+emit_16(157);
+emit_16(222);
+emit_16(158);
+emit_16(222);
+emit_16(157);
+emit_16(222);
+emit_16(158);
+emit_16(223);
+emit_16(159);
+emit_16(223);
+emit_16(158);
+emit_16(223);
+emit_16(159);
+emit_16(224);
+emit_16(160);
+emit_16(224);
+emit_16(159);
+emit_16(224);
+emit_16(160);
+emit_16(225);
+emit_16(161);
+emit_16(225);
+emit_16(160);
+emit_16(225);
+emit_16(161);
+emit_16(226);
+emit_16(162);
+emit_16(226);
+emit_16(161);
+emit_16(226);
+emit_16(162);
+emit_16(227);
+emit_16(163);
+emit_16(227);
+emit_16(162);
+emit_16(227);
+emit_16(163);
+emit_16(228);
+emit_16(164);
+emit_16(228);
+emit_16(163);
+emit_16(228);
+emit_16(164);
+emit_16(229);
+emit_16(165);
+emit_16(229);
+emit_16(164);
+emit_16(229);
+emit_16(165);
+emit_16(230);
+emit_16(166);
+emit_16(230);
+emit_16(165);
+emit_16(230);
+emit_16(166);
+emit_16(231);
+emit_16(167);
+emit_16(231);
+emit_16(166);
+emit_16(231);
+emit_16(167);
+emit_16(232);
+emit_16(168);
+emit_16(232);
+emit_16(167);
+emit_16(232);
+emit_16(168);
+emit_16(233);
+emit_16(169);
+emit_16(233);
+emit_16(168);
+emit_16(233);
+emit_16(169);
+emit_16(234);
+emit_16(170);
+emit_16(234);
+emit_16(169);
+emit_16(234);
+emit_16(170);
+emit_16(235);
+emit_16(171);
+emit_16(235);
+emit_16(170);
+emit_16(235);
+emit_16(171);
+emit_16(236);
+emit_16(172);
+emit_16(236);
+emit_16(171);
+emit_16(236);
+emit_16(172);
+emit_16(237);
+emit_16(173);
+emit_16(237);
+emit_16(172);
+emit_16(237);
+emit_16(173);
+emit_16(238);
+emit_16(174);
+emit_16(238);
+emit_16(173);
+emit_16(238);
+emit_16(174);
+emit_16(239);
+emit_16(175);
+emit_16(239);
+emit_16(174);
+emit_16(239);
+emit_16(175);
+emit_16(240);
+emit_16(176);
+emit_16(240);
+emit_16(175);
+emit_16(240);
+emit_16(176);
+emit_16(241);
+emit_16(177);
+emit_16(241);
+emit_16(176);
+emit_16(241);
+emit_16(177);
+emit_16(242);
+emit_16(178);
+emit_16(242);
+emit_16(177);
+emit_16(242);
+emit_16(178);
+emit_16(243);
+emit_16(179);
+emit_16(243);
+emit_16(178);
+emit_16(243);
+emit_16(179);
+emit_16(244);
+emit_16(180);
+emit_16(244);
+emit_16(179);
+emit_16(244);
+emit_16(180);
+emit_16(245);
+emit_16(181);
+emit_16(245);
+emit_16(180);
+emit_16(245);
+emit_16(181);
+emit_16(246);
+emit_16(182);
+emit_16(246);
+emit_16(181);
+emit_16(246);
+emit_16(182);
+emit_16(247);
+emit_16(183);
+emit_16(247);
+emit_16(182);
+emit_16(247);
+emit_16(183);
+emit_16(248);
+emit_16(184);
+emit_16(248);
+emit_16(183);
+emit_16(248);
+emit_16(184);
+emit_16(249);
+emit_16(185);
+emit_16(249);
+emit_16(184);
+emit_16(249);
+emit_16(185);
+emit_16(250);
+emit_16(186);
+emit_16(250);
+emit_16(185);
+emit_16(250);
+emit_16(186);
+emit_16(251);
+emit_16(187);
+emit_16(251);
+emit_16(186);
+emit_16(251);
+emit_16(187);
+emit_16(252);
+emit_16(188);
+emit_16(252);
+emit_16(187);
+emit_16(252);
+emit_16(188);
+emit_16(253);
+emit_16(189);
+emit_16(253);
+emit_16(188);
+emit_16(253);
+emit_16(189);
+emit_16(254);
+emit_16(190);
+emit_16(254);
+emit_16(189);
+emit_16(254);
+emit_16(190);
+emit_16(255);
+emit_16(191);
+emit_16(255);
+emit_16(190);
+emit_16(256);
+emit_16(192);
+emit_16(257);
+emit_16(193);
+emit_16(257);
+emit_16(192);
+emit_16(257);
+emit_16(193);
+emit_16(258);
+emit_16(194);
+emit_16(258);
+emit_16(193);
+emit_16(258);
+emit_16(194);
+emit_16(259);
+emit_16(195);
+emit_16(259);
+emit_16(194);
+emit_16(259);
+emit_16(195);
+emit_16(260);
+emit_16(196);
+emit_16(260);
+emit_16(195);
+emit_16(260);
+emit_16(196);
+emit_16(261);
+emit_16(197);
+emit_16(261);
+emit_16(196);
+emit_16(261);
+emit_16(197);
+emit_16(262);
+emit_16(198);
+emit_16(262);
+emit_16(197);
+emit_16(262);
+emit_16(198);
+emit_16(263);
+emit_16(199);
+emit_16(263);
+emit_16(198);
+emit_16(263);
+emit_16(199);
+emit_16(264);
+emit_16(200);
+emit_16(264);
+emit_16(199);
+emit_16(264);
+emit_16(200);
+emit_16(265);
+emit_16(201);
+emit_16(265);
+emit_16(200);
+emit_16(265);
+emit_16(201);
+emit_16(266);
+emit_16(202);
+emit_16(266);
+emit_16(201);
+emit_16(266);
+emit_16(202);
+emit_16(267);
+emit_16(203);
+emit_16(267);
+emit_16(202);
+emit_16(267);
+emit_16(203);
+emit_16(268);
+emit_16(204);
+emit_16(268);
+emit_16(203);
+emit_16(268);
+emit_16(204);
+emit_16(269);
+emit_16(205);
+emit_16(269);
+emit_16(204);
+emit_16(269);
+emit_16(205);
+emit_16(270);
+emit_16(206);
+emit_16(270);
+emit_16(205);
+emit_16(270);
+emit_16(206);
+emit_16(271);
+emit_16(207);
+emit_16(271);
+emit_16(206);
+emit_16(271);
+emit_16(207);
+emit_16(272);
+emit_16(208);
+emit_16(272);
+emit_16(207);
+emit_16(272);
+emit_16(208);
+emit_16(273);
+emit_16(209);
+emit_16(273);
+emit_16(208);
+emit_16(273);
+emit_16(209);
+emit_16(274);
+emit_16(210);
+emit_16(274);
+emit_16(209);
+emit_16(274);
+emit_16(210);
+emit_16(275);
+emit_16(211);
+emit_16(275);
+emit_16(210);
+emit_16(275);
+emit_16(211);
+emit_16(276);
+emit_16(212);
+emit_16(276);
+emit_16(211);
+emit_16(276);
+emit_16(212);
+emit_16(277);
+emit_16(213);
+emit_16(277);
+emit_16(212);
+emit_16(277);
+emit_16(213);
+emit_16(278);
+emit_16(214);
+emit_16(278);
+emit_16(213);
+emit_16(278);
+emit_16(214);
+emit_16(279);
+emit_16(215);
+emit_16(279);
+emit_16(214);
+emit_16(279);
+emit_16(215);
+emit_16(280);
+emit_16(216);
+emit_16(280);
+emit_16(215);
+emit_16(280);
+emit_16(216);
+emit_16(281);
+emit_16(217);
+emit_16(281);
+emit_16(216);
+emit_16(281);
+emit_16(217);
+emit_16(282);
+emit_16(218);
+emit_16(282);
+emit_16(217);
+emit_16(282);
+emit_16(218);
+emit_16(283);
+emit_16(219);
+emit_16(283);
+emit_16(218);
+emit_16(283);
+emit_16(219);
+emit_16(284);
+emit_16(220);
+emit_16(284);
+emit_16(219);
+emit_16(284);
+emit_16(220);
+emit_16(285);
+emit_16(221);
+emit_16(285);
+emit_16(220);
+emit_16(285);
+emit_16(221);
+emit_16(286);
+emit_16(222);
+emit_16(286);
+emit_16(221);
+emit_16(286);
+emit_16(222);
+emit_16(287);
+emit_16(223);
+emit_16(287);
+emit_16(222);
+emit_16(287);
+emit_16(223);
+emit_16(288);
+emit_16(224);
+emit_16(288);
+emit_16(223);
+emit_16(288);
+emit_16(224);
+emit_16(289);
+emit_16(225);
+emit_16(289);
+emit_16(224);
+emit_16(289);
+emit_16(225);
+emit_16(290);
+emit_16(226);
+emit_16(290);
+emit_16(225);
+emit_16(290);
+emit_16(226);
+emit_16(291);
+emit_16(227);
+emit_16(291);
+emit_16(226);
+emit_16(291);
+emit_16(227);
+emit_16(292);
+emit_16(228);
+emit_16(292);
+emit_16(227);
+emit_16(292);
+emit_16(228);
+emit_16(293);
+emit_16(229);
+emit_16(293);
+emit_16(228);
+emit_16(293);
+emit_16(229);
+emit_16(294);
+emit_16(230);
+emit_16(294);
+emit_16(229);
+emit_16(294);
+emit_16(230);
+emit_16(295);
+emit_16(231);
+emit_16(295);
+emit_16(230);
+emit_16(295);
+emit_16(231);
+emit_16(296);
+emit_16(232);
+emit_16(296);
+emit_16(231);
+emit_16(296);
+emit_16(232);
+emit_16(297);
+emit_16(233);
+emit_16(297);
+emit_16(232);
+emit_16(297);
+emit_16(233);
+emit_16(298);
+emit_16(234);
+emit_16(298);
+emit_16(233);
+emit_16(298);
+emit_16(234);
+emit_16(299);
+emit_16(235);
+emit_16(299);
+emit_16(234);
+emit_16(299);
+emit_16(235);
+emit_16(300);
+emit_16(236);
+emit_16(300);
+emit_16(235);
+emit_16(300);
+emit_16(236);
+emit_16(301);
+emit_16(237);
+emit_16(301);
+emit_16(236);
+emit_16(301);
+emit_16(237);
+emit_16(302);
+emit_16(238);
+emit_16(302);
+emit_16(237);
+emit_16(302);
+emit_16(238);
+emit_16(303);
+emit_16(239);
+emit_16(303);
+emit_16(238);
+emit_16(303);
+emit_16(239);
+emit_16(304);
+emit_16(240);
+emit_16(304);
+emit_16(239);
+emit_16(304);
+emit_16(240);
+emit_16(305);
+emit_16(241);
+emit_16(305);
+emit_16(240);
+emit_16(305);
+emit_16(241);
+emit_16(306);
+emit_16(242);
+emit_16(306);
+emit_16(241);
+emit_16(306);
+emit_16(242);
+emit_16(307);
+emit_16(243);
+emit_16(307);
+emit_16(242);
+emit_16(307);
+emit_16(243);
+emit_16(308);
+emit_16(244);
+emit_16(308);
+emit_16(243);
+emit_16(308);
+emit_16(244);
+emit_16(309);
+emit_16(245);
+emit_16(309);
+emit_16(244);
+emit_16(309);
+emit_16(245);
+emit_16(310);
+emit_16(246);
+emit_16(310);
+emit_16(245);
+emit_16(310);
+emit_16(246);
+emit_16(311);
+emit_16(247);
+emit_16(311);
+emit_16(246);
+emit_16(311);
+emit_16(247);
+emit_16(312);
+emit_16(248);
+emit_16(312);
+emit_16(247);
+emit_16(312);
+emit_16(248);
+emit_16(313);
+emit_16(249);
+emit_16(313);
+emit_16(248);
+emit_16(313);
+emit_16(249);
+emit_16(314);
+emit_16(250);
+emit_16(314);
+emit_16(249);
+emit_16(314);
+emit_16(250);
+emit_16(315);
+emit_16(251);
+emit_16(315);
+emit_16(250);
+emit_16(315);
+emit_16(251);
+emit_16(316);
+emit_16(252);
+emit_16(316);
+emit_16(251);
+emit_16(316);
+emit_16(252);
+emit_16(317);
+emit_16(253);
+emit_16(317);
+emit_16(252);
+emit_16(317);
+emit_16(253);
+emit_16(318);
+emit_16(254);
+emit_16(318);
+emit_16(253);
+emit_16(318);
+emit_16(254);
+emit_16(319);
+emit_16(255);
+emit_16(319);
+emit_16(254);
+emit_16(320);
+emit_16(256);
+emit_16(321);
+emit_16(257);
+emit_16(321);
+emit_16(256);
+emit_16(321);
+emit_16(257);
+emit_16(322);
+emit_16(258);
+emit_16(322);
+emit_16(257);
+emit_16(322);
+emit_16(258);
+emit_16(323);
+emit_16(259);
+emit_16(323);
+emit_16(258);
+emit_16(323);
+emit_16(259);
+emit_16(324);
+emit_16(260);
+emit_16(324);
+emit_16(259);
+emit_16(324);
+emit_16(260);
+emit_16(325);
+emit_16(261);
+emit_16(325);
+emit_16(260);
+emit_16(325);
+emit_16(261);
+emit_16(326);
+emit_16(262);
+emit_16(326);
+emit_16(261);
+emit_16(326);
+emit_16(262);
+emit_16(327);
+emit_16(263);
+emit_16(327);
+emit_16(262);
+emit_16(327);
+emit_16(263);
+emit_16(328);
+emit_16(264);
+emit_16(328);
+emit_16(263);
+emit_16(328);
+emit_16(264);
+emit_16(329);
+emit_16(265);
+emit_16(329);
+emit_16(264);
+emit_16(329);
+emit_16(265);
+emit_16(330);
+emit_16(266);
+emit_16(330);
+emit_16(265);
+emit_16(330);
+emit_16(266);
+emit_16(331);
+emit_16(267);
+emit_16(331);
+emit_16(266);
+emit_16(331);
+emit_16(267);
+emit_16(332);
+emit_16(268);
+emit_16(332);
+emit_16(267);
+emit_16(332);
+emit_16(268);
+emit_16(333);
+emit_16(269);
+emit_16(333);
+emit_16(268);
+emit_16(333);
+emit_16(269);
+emit_16(334);
+emit_16(270);
+emit_16(334);
+emit_16(269);
+emit_16(334);
+emit_16(270);
+emit_16(335);
+emit_16(271);
+emit_16(335);
+emit_16(270);
+emit_16(335);
+emit_16(271);
+emit_16(336);
+emit_16(272);
+emit_16(336);
+emit_16(271);
+emit_16(336);
+emit_16(272);
+emit_16(337);
+emit_16(273);
+emit_16(337);
+emit_16(272);
+emit_16(337);
+emit_16(273);
+emit_16(338);
+emit_16(274);
+emit_16(338);
+emit_16(273);
+emit_16(338);
+emit_16(274);
+emit_16(339);
+emit_16(275);
+emit_16(339);
+emit_16(274);
+emit_16(339);
+emit_16(275);
+emit_16(340);
+emit_16(276);
+emit_16(340);
+emit_16(275);
+emit_16(340);
+emit_16(276);
+emit_16(341);
+emit_16(277);
+emit_16(341);
+emit_16(276);
+emit_16(341);
+emit_16(277);
+emit_16(342);
+emit_16(278);
+emit_16(342);
+emit_16(277);
+emit_16(342);
+emit_16(278);
+emit_16(343);
+emit_16(279);
+emit_16(343);
+emit_16(278);
+emit_16(343);
+emit_16(279);
+emit_16(344);
+emit_16(280);
+emit_16(344);
+emit_16(279);
+emit_16(344);
+emit_16(280);
+emit_16(345);
+emit_16(281);
+emit_16(345);
+emit_16(280);
+emit_16(345);
+emit_16(281);
+emit_16(346);
+emit_16(282);
+emit_16(346);
+emit_16(281);
+emit_16(346);
+emit_16(282);
+emit_16(347);
+emit_16(283);
+emit_16(347);
+emit_16(282);
+emit_16(347);
+emit_16(283);
+emit_16(348);
+emit_16(284);
+emit_16(348);
+emit_16(283);
+emit_16(348);
+emit_16(284);
+emit_16(349);
+emit_16(285);
+emit_16(349);
+emit_16(284);
+emit_16(349);
+emit_16(285);
+emit_16(350);
+emit_16(286);
+emit_16(350);
+emit_16(285);
+emit_16(350);
+emit_16(286);
+emit_16(351);
+emit_16(287);
+emit_16(351);
+emit_16(286);
+emit_16(351);
+emit_16(287);
+emit_16(352);
+emit_16(288);
+emit_16(352);
+emit_16(287);
+emit_16(352);
+emit_16(288);
+emit_16(353);
+emit_16(289);
+emit_16(353);
+emit_16(288);
+emit_16(353);
+emit_16(289);
+emit_16(354);
+emit_16(290);
+emit_16(354);
+emit_16(289);
+emit_16(354);
+emit_16(290);
+emit_16(355);
+emit_16(291);
+emit_16(355);
+emit_16(290);
+emit_16(355);
+emit_16(291);
+emit_16(356);
+emit_16(292);
+emit_16(356);
+emit_16(291);
+emit_16(356);
+emit_16(292);
+emit_16(357);
+emit_16(293);
+emit_16(357);
+emit_16(292);
+emit_16(357);
+emit_16(293);
+emit_16(358);
+emit_16(294);
+emit_16(358);
+emit_16(293);
+emit_16(358);
+emit_16(294);
+emit_16(359);
+emit_16(295);
+emit_16(359);
+emit_16(294);
+emit_16(359);
+emit_16(295);
+emit_16(360);
+emit_16(296);
+emit_16(360);
+emit_16(295);
+emit_16(360);
+emit_16(296);
+emit_16(361);
+emit_16(297);
+emit_16(361);
+emit_16(296);
+emit_16(361);
+emit_16(297);
+emit_16(362);
+emit_16(298);
+emit_16(362);
+emit_16(297);
+emit_16(362);
+emit_16(298);
+emit_16(363);
+emit_16(299);
+emit_16(363);
+emit_16(298);
+emit_16(363);
+emit_16(299);
+emit_16(364);
+emit_16(300);
+emit_16(364);
+emit_16(299);
+emit_16(364);
+emit_16(300);
+emit_16(365);
+emit_16(301);
+emit_16(365);
+emit_16(300);
+emit_16(365);
+emit_16(301);
+emit_16(366);
+emit_16(302);
+emit_16(366);
+emit_16(301);
+emit_16(366);
+emit_16(302);
+emit_16(367);
+emit_16(303);
+emit_16(367);
+emit_16(302);
+emit_16(367);
+emit_16(303);
+emit_16(368);
+emit_16(304);
+emit_16(368);
+emit_16(303);
+emit_16(368);
+emit_16(304);
+emit_16(369);
+emit_16(305);
+emit_16(369);
+emit_16(304);
+emit_16(369);
+emit_16(305);
+emit_16(370);
+emit_16(306);
+emit_16(370);
+emit_16(305);
+emit_16(370);
+emit_16(306);
+emit_16(371);
+emit_16(307);
+emit_16(371);
+emit_16(306);
+emit_16(371);
+emit_16(307);
+emit_16(372);
+emit_16(308);
+emit_16(372);
+emit_16(307);
+emit_16(372);
+emit_16(308);
+emit_16(373);
+emit_16(309);
+emit_16(373);
+emit_16(308);
+emit_16(373);
+emit_16(309);
+emit_16(374);
+emit_16(310);
+emit_16(374);
+emit_16(309);
+emit_16(374);
+emit_16(310);
+emit_16(375);
+emit_16(311);
+emit_16(375);
+emit_16(310);
+emit_16(375);
+emit_16(311);
+emit_16(376);
+emit_16(312);
+emit_16(376);
+emit_16(311);
+emit_16(376);
+emit_16(312);
+emit_16(377);
+emit_16(313);
+emit_16(377);
+emit_16(312);
+emit_16(377);
+emit_16(313);
+emit_16(378);
+emit_16(314);
+emit_16(378);
+emit_16(313);
+emit_16(378);
+emit_16(314);
+emit_16(379);
+emit_16(315);
+emit_16(379);
+emit_16(314);
+emit_16(379);
+emit_16(315);
+emit_16(380);
+emit_16(316);
+emit_16(380);
+emit_16(315);
+emit_16(380);
+emit_16(316);
+emit_16(381);
+emit_16(317);
+emit_16(381);
+emit_16(316);
+emit_16(381);
+emit_16(317);
+emit_16(382);
+emit_16(318);
+emit_16(382);
+emit_16(317);
+emit_16(382);
+emit_16(318);
+emit_16(383);
+emit_16(319);
+emit_16(383);
+emit_16(318);
+emit_16(384);
+emit_16(320);
+emit_16(385);
+emit_16(321);
+emit_16(385);
+emit_16(320);
+emit_16(385);
+emit_16(321);
+emit_16(386);
+emit_16(322);
+emit_16(386);
+emit_16(321);
+emit_16(386);
+emit_16(322);
+emit_16(387);
+emit_16(323);
+emit_16(387);
+emit_16(322);
+emit_16(387);
+emit_16(323);
+emit_16(388);
+emit_16(324);
+emit_16(388);
+emit_16(323);
+emit_16(388);
+emit_16(324);
+emit_16(389);
+emit_16(325);
+emit_16(389);
+emit_16(324);
+emit_16(389);
+emit_16(325);
+emit_16(390);
+emit_16(326);
+emit_16(390);
+emit_16(325);
+emit_16(390);
+emit_16(326);
+emit_16(391);
+emit_16(327);
+emit_16(391);
+emit_16(326);
+emit_16(391);
+emit_16(327);
+emit_16(392);
+emit_16(328);
+emit_16(392);
+emit_16(327);
+emit_16(392);
+emit_16(328);
+emit_16(393);
+emit_16(329);
+emit_16(393);
+emit_16(328);
+emit_16(393);
+emit_16(329);
+emit_16(394);
+emit_16(330);
+emit_16(394);
+emit_16(329);
+emit_16(394);
+emit_16(330);
+emit_16(395);
+emit_16(331);
+emit_16(395);
+emit_16(330);
+emit_16(395);
+emit_16(331);
+emit_16(396);
+emit_16(332);
+emit_16(396);
+emit_16(331);
+emit_16(396);
+emit_16(332);
+emit_16(397);
+emit_16(333);
+emit_16(397);
+emit_16(332);
+emit_16(397);
+emit_16(333);
+emit_16(398);
+emit_16(334);
+emit_16(398);
+emit_16(333);
+emit_16(398);
+emit_16(334);
+emit_16(399);
+emit_16(335);
+emit_16(399);
+emit_16(334);
+emit_16(399);
+emit_16(335);
+emit_16(400);
+emit_16(336);
+emit_16(400);
+emit_16(335);
+emit_16(400);
+emit_16(336);
+emit_16(401);
+emit_16(337);
+emit_16(401);
+emit_16(336);
+emit_16(401);
+emit_16(337);
+emit_16(402);
+emit_16(338);
+emit_16(402);
+emit_16(337);
+emit_16(402);
+emit_16(338);
+emit_16(403);
+emit_16(339);
+emit_16(403);
+emit_16(338);
+emit_16(403);
+emit_16(339);
+emit_16(404);
+emit_16(340);
+emit_16(404);
+emit_16(339);
+emit_16(404);
+emit_16(340);
+emit_16(405);
+emit_16(341);
+emit_16(405);
+emit_16(340);
+emit_16(405);
+emit_16(341);
+emit_16(406);
+emit_16(342);
+emit_16(406);
+emit_16(341);
+emit_16(406);
+emit_16(342);
+emit_16(407);
+emit_16(343);
+emit_16(407);
+emit_16(342);
+emit_16(407);
+emit_16(343);
+emit_16(408);
+emit_16(344);
+emit_16(408);
+emit_16(343);
+emit_16(408);
+emit_16(344);
+emit_16(409);
+emit_16(345);
+emit_16(409);
+emit_16(344);
+emit_16(409);
+emit_16(345);
+emit_16(410);
+emit_16(346);
+emit_16(410);
+emit_16(345);
+emit_16(410);
+emit_16(346);
+emit_16(411);
+emit_16(347);
+emit_16(411);
+emit_16(346);
+emit_16(411);
+emit_16(347);
+emit_16(412);
+emit_16(348);
+emit_16(412);
+emit_16(347);
+emit_16(412);
+emit_16(348);
+emit_16(413);
+emit_16(349);
+emit_16(413);
+emit_16(348);
+emit_16(413);
+emit_16(349);
+emit_16(414);
+emit_16(350);
+emit_16(414);
+emit_16(349);
+emit_16(414);
+emit_16(350);
+emit_16(415);
+emit_16(351);
+emit_16(415);
+emit_16(350);
+emit_16(415);
+emit_16(351);
+emit_16(416);
+emit_16(352);
+emit_16(416);
+emit_16(351);
+emit_16(416);
+emit_16(352);
+emit_16(417);
+emit_16(353);
+emit_16(417);
+emit_16(352);
+emit_16(417);
+emit_16(353);
+emit_16(418);
+emit_16(354);
+emit_16(418);
+emit_16(353);
+emit_16(418);
+emit_16(354);
+emit_16(419);
+emit_16(355);
+emit_16(419);
+emit_16(354);
+emit_16(419);
+emit_16(355);
+emit_16(420);
+emit_16(356);
+emit_16(420);
+emit_16(355);
+emit_16(420);
+emit_16(356);
+emit_16(421);
+emit_16(357);
+emit_16(421);
+emit_16(356);
+emit_16(421);
+emit_16(357);
+emit_16(422);
+emit_16(358);
+emit_16(422);
+emit_16(357);
+emit_16(422);
+emit_16(358);
+emit_16(423);
+emit_16(359);
+emit_16(423);
+emit_16(358);
+emit_16(423);
+emit_16(359);
+emit_16(424);
+emit_16(360);
+emit_16(424);
+emit_16(359);
+emit_16(424);
+emit_16(360);
+emit_16(425);
+emit_16(361);
+emit_16(425);
+emit_16(360);
+emit_16(425);
+emit_16(361);
+emit_16(426);
+emit_16(362);
+emit_16(426);
+emit_16(361);
+emit_16(426);
+emit_16(362);
+emit_16(427);
+emit_16(363);
+emit_16(427);
+emit_16(362);
+emit_16(427);
+emit_16(363);
+emit_16(428);
+emit_16(364);
+emit_16(428);
+emit_16(363);
+emit_16(428);
+emit_16(364);
+emit_16(429);
+emit_16(365);
+emit_16(429);
+emit_16(364);
+emit_16(429);
+emit_16(365);
+emit_16(430);
+emit_16(366);
+emit_16(430);
+emit_16(365);
+emit_16(430);
+emit_16(366);
+emit_16(431);
+emit_16(367);
+emit_16(431);
+emit_16(366);
+emit_16(431);
+emit_16(367);
+emit_16(432);
+emit_16(368);
+emit_16(432);
+emit_16(367);
+emit_16(432);
+emit_16(368);
+emit_16(433);
+emit_16(369);
+emit_16(433);
+emit_16(368);
+emit_16(433);
+emit_16(369);
+emit_16(434);
+emit_16(370);
+emit_16(434);
+emit_16(369);
+emit_16(434);
+emit_16(370);
+emit_16(435);
+emit_16(371);
+emit_16(435);
+emit_16(370);
+emit_16(435);
+emit_16(371);
+emit_16(436);
+emit_16(372);
+emit_16(436);
+emit_16(371);
+emit_16(436);
+emit_16(372);
+emit_16(437);
+emit_16(373);
+emit_16(437);
+emit_16(372);
+emit_16(437);
+emit_16(373);
+emit_16(438);
+emit_16(374);
+emit_16(438);
+emit_16(373);
+emit_16(438);
+emit_16(374);
+emit_16(439);
+emit_16(375);
+emit_16(439);
+emit_16(374);
+emit_16(439);
+emit_16(375);
+emit_16(440);
+emit_16(376);
+emit_16(440);
+emit_16(375);
+emit_16(440);
+emit_16(376);
+emit_16(441);
+emit_16(377);
+emit_16(441);
+emit_16(376);
+emit_16(441);
+emit_16(377);
+emit_16(442);
+emit_16(378);
+emit_16(442);
+emit_16(377);
+emit_16(442);
+emit_16(378);
+emit_16(443);
+emit_16(379);
+emit_16(443);
+emit_16(378);
+emit_16(443);
+emit_16(379);
+emit_16(444);
+emit_16(380);
+emit_16(444);
+emit_16(379);
+emit_16(444);
+emit_16(380);
+emit_16(445);
+emit_16(381);
+emit_16(445);
+emit_16(380);
+emit_16(445);
+emit_16(381);
+emit_16(446);
+emit_16(382);
+emit_16(446);
+emit_16(381);
+emit_16(446);
+emit_16(382);
+emit_16(447);
+emit_16(383);
+emit_16(447);
+emit_16(382);
+emit_16(448);
+emit_16(384);
+emit_16(449);
+emit_16(385);
+emit_16(449);
+emit_16(384);
+emit_16(449);
+emit_16(385);
+emit_16(450);
+emit_16(386);
+emit_16(450);
+emit_16(385);
+emit_16(450);
+emit_16(386);
+emit_16(451);
+emit_16(387);
+emit_16(451);
+emit_16(386);
+emit_16(451);
+emit_16(387);
+emit_16(452);
+emit_16(388);
+emit_16(452);
+emit_16(387);
+emit_16(452);
+emit_16(388);
+emit_16(453);
+emit_16(389);
+emit_16(453);
+emit_16(388);
+emit_16(453);
+emit_16(389);
+emit_16(454);
+emit_16(390);
+emit_16(454);
+emit_16(389);
+emit_16(454);
+emit_16(390);
+emit_16(455);
+emit_16(391);
+emit_16(455);
+emit_16(390);
+emit_16(455);
+emit_16(391);
+emit_16(456);
+emit_16(392);
+emit_16(456);
+emit_16(391);
+emit_16(456);
+emit_16(392);
+emit_16(457);
+emit_16(393);
+emit_16(457);
+emit_16(392);
+emit_16(457);
+emit_16(393);
+emit_16(458);
+emit_16(394);
+emit_16(458);
+emit_16(393);
+emit_16(458);
+emit_16(394);
+emit_16(459);
+emit_16(395);
+emit_16(459);
+emit_16(394);
+emit_16(459);
+emit_16(395);
+emit_16(460);
+emit_16(396);
+emit_16(460);
+emit_16(395);
+emit_16(460);
+emit_16(396);
+emit_16(461);
+emit_16(397);
+emit_16(461);
+emit_16(396);
+emit_16(461);
+emit_16(397);
+emit_16(462);
+emit_16(398);
+emit_16(462);
+emit_16(397);
+emit_16(462);
+emit_16(398);
+emit_16(463);
+emit_16(399);
+emit_16(463);
+emit_16(398);
+emit_16(463);
+emit_16(399);
+emit_16(464);
+emit_16(400);
+emit_16(464);
+emit_16(399);
+emit_16(464);
+emit_16(400);
+emit_16(465);
+emit_16(401);
+emit_16(465);
+emit_16(400);
+emit_16(465);
+emit_16(401);
+emit_16(466);
+emit_16(402);
+emit_16(466);
+emit_16(401);
+emit_16(466);
+emit_16(402);
+emit_16(467);
+emit_16(403);
+emit_16(467);
+emit_16(402);
+emit_16(467);
+emit_16(403);
+emit_16(468);
+emit_16(404);
+emit_16(468);
+emit_16(403);
+emit_16(468);
+emit_16(404);
+emit_16(469);
+emit_16(405);
+emit_16(469);
+emit_16(404);
+emit_16(469);
+emit_16(405);
+emit_16(470);
+emit_16(406);
+emit_16(470);
+emit_16(405);
+emit_16(470);
+emit_16(406);
+emit_16(471);
+emit_16(407);
+emit_16(471);
+emit_16(406);
+emit_16(471);
+emit_16(407);
+emit_16(472);
+emit_16(408);
+emit_16(472);
+emit_16(407);
+emit_16(472);
+emit_16(408);
+emit_16(473);
+emit_16(409);
+emit_16(473);
+emit_16(408);
+emit_16(473);
+emit_16(409);
+emit_16(474);
+emit_16(410);
+emit_16(474);
+emit_16(409);
+emit_16(474);
+emit_16(410);
+emit_16(475);
+emit_16(411);
+emit_16(475);
+emit_16(410);
+emit_16(475);
+emit_16(411);
+emit_16(476);
+emit_16(412);
+emit_16(476);
+emit_16(411);
+emit_16(476);
+emit_16(412);
+emit_16(477);
+emit_16(413);
+emit_16(477);
+emit_16(412);
+emit_16(477);
+emit_16(413);
+emit_16(478);
+emit_16(414);
+emit_16(478);
+emit_16(413);
+emit_16(478);
+emit_16(414);
+emit_16(479);
+emit_16(415);
+emit_16(479);
+emit_16(414);
+emit_16(479);
+emit_16(415);
+emit_16(480);
+emit_16(416);
+emit_16(480);
+emit_16(415);
+emit_16(480);
+emit_16(416);
+emit_16(481);
+emit_16(417);
+emit_16(481);
+emit_16(416);
+emit_16(481);
+emit_16(417);
+emit_16(482);
+emit_16(418);
+emit_16(482);
+emit_16(417);
+emit_16(482);
+emit_16(418);
+emit_16(483);
+emit_16(419);
+emit_16(483);
+emit_16(418);
+emit_16(483);
+emit_16(419);
+emit_16(484);
+emit_16(420);
+emit_16(484);
+emit_16(419);
+emit_16(484);
+emit_16(420);
+emit_16(485);
+emit_16(421);
+emit_16(485);
+emit_16(420);
+emit_16(485);
+emit_16(421);
+emit_16(486);
+emit_16(422);
+emit_16(486);
+emit_16(421);
+emit_16(486);
+emit_16(422);
+emit_16(487);
+emit_16(423);
+emit_16(487);
+emit_16(422);
+emit_16(487);
+emit_16(423);
+emit_16(488);
+emit_16(424);
+emit_16(488);
+emit_16(423);
+emit_16(488);
+emit_16(424);
+emit_16(489);
+emit_16(425);
+emit_16(489);
+emit_16(424);
+emit_16(489);
+emit_16(425);
+emit_16(490);
+emit_16(426);
+emit_16(490);
+emit_16(425);
+emit_16(490);
+emit_16(426);
+emit_16(491);
+emit_16(427);
+emit_16(491);
+emit_16(426);
+emit_16(491);
+emit_16(427);
+emit_16(492);
+emit_16(428);
+emit_16(492);
+emit_16(427);
+emit_16(492);
+emit_16(428);
+emit_16(493);
+emit_16(429);
+emit_16(493);
+emit_16(428);
+emit_16(493);
+emit_16(429);
+emit_16(494);
+emit_16(430);
+emit_16(494);
+emit_16(429);
+emit_16(494);
+emit_16(430);
+emit_16(495);
+emit_16(431);
+emit_16(495);
+emit_16(430);
+emit_16(495);
+emit_16(431);
+emit_16(496);
+emit_16(432);
+emit_16(496);
+emit_16(431);
+emit_16(496);
+emit_16(432);
+emit_16(497);
+emit_16(433);
+emit_16(497);
+emit_16(432);
+emit_16(497);
+emit_16(433);
+emit_16(498);
+emit_16(434);
+emit_16(498);
+emit_16(433);
+emit_16(498);
+emit_16(434);
+emit_16(499);
+emit_16(435);
+emit_16(499);
+emit_16(434);
+emit_16(499);
+emit_16(435);
+emit_16(500);
+emit_16(436);
+emit_16(500);
+emit_16(435);
+emit_16(500);
+emit_16(436);
+emit_16(501);
+emit_16(437);
+emit_16(501);
+emit_16(436);
+emit_16(501);
+emit_16(437);
+emit_16(502);
+emit_16(438);
+emit_16(502);
+emit_16(437);
+emit_16(502);
+emit_16(438);
+emit_16(503);
+emit_16(439);
+emit_16(503);
+emit_16(438);
+emit_16(503);
+emit_16(439);
+emit_16(504);
+emit_16(440);
+emit_16(504);
+emit_16(439);
+emit_16(504);
+emit_16(440);
+emit_16(505);
+emit_16(441);
+emit_16(505);
+emit_16(440);
+emit_16(505);
+emit_16(441);
+emit_16(506);
+emit_16(442);
+emit_16(506);
+emit_16(441);
+emit_16(506);
+emit_16(442);
+emit_16(507);
+emit_16(443);
+emit_16(507);
+emit_16(442);
+emit_16(507);
+emit_16(443);
+emit_16(508);
+emit_16(444);
+emit_16(508);
+emit_16(443);
+emit_16(508);
+emit_16(444);
+emit_16(509);
+emit_16(445);
+emit_16(509);
+emit_16(444);
+emit_16(509);
+emit_16(445);
+emit_16(510);
+emit_16(446);
+emit_16(510);
+emit_16(445);
+emit_16(510);
+emit_16(446);
+emit_16(511);
+emit_16(447);
+emit_16(511);
+emit_16(446);
+emit_16(512);
+emit_16(448);
+emit_16(513);
+emit_16(449);
+emit_16(513);
+emit_16(448);
+emit_16(513);
+emit_16(449);
+emit_16(514);
+emit_16(450);
+emit_16(514);
+emit_16(449);
+emit_16(514);
+emit_16(450);
+emit_16(515);
+emit_16(451);
+emit_16(515);
+emit_16(450);
+emit_16(515);
+emit_16(451);
+emit_16(516);
+emit_16(452);
+emit_16(516);
+emit_16(451);
+emit_16(516);
+emit_16(452);
+emit_16(517);
+emit_16(453);
+emit_16(517);
+emit_16(452);
+emit_16(517);
+emit_16(453);
+emit_16(518);
+emit_16(454);
+emit_16(518);
+emit_16(453);
+emit_16(518);
+emit_16(454);
+emit_16(519);
+emit_16(455);
+emit_16(519);
+emit_16(454);
+emit_16(519);
+emit_16(455);
+emit_16(520);
+emit_16(456);
+emit_16(520);
+emit_16(455);
+emit_16(520);
+emit_16(456);
+emit_16(521);
+emit_16(457);
+emit_16(521);
+emit_16(456);
+emit_16(521);
+emit_16(457);
+emit_16(522);
+emit_16(458);
+emit_16(522);
+emit_16(457);
+emit_16(522);
+emit_16(458);
+emit_16(523);
+emit_16(459);
+emit_16(523);
+emit_16(458);
+emit_16(523);
+emit_16(459);
+emit_16(524);
+emit_16(460);
+emit_16(524);
+emit_16(459);
+emit_16(524);
+emit_16(460);
+emit_16(525);
+emit_16(461);
+emit_16(525);
+emit_16(460);
+emit_16(525);
+emit_16(461);
+emit_16(526);
+emit_16(462);
+emit_16(526);
+emit_16(461);
+emit_16(526);
+emit_16(462);
+emit_16(527);
+emit_16(463);
+emit_16(527);
+emit_16(462);
+emit_16(527);
+emit_16(463);
+emit_16(528);
+emit_16(464);
+emit_16(528);
+emit_16(463);
+emit_16(528);
+emit_16(464);
+emit_16(529);
+emit_16(465);
+emit_16(529);
+emit_16(464);
+emit_16(529);
+emit_16(465);
+emit_16(530);
+emit_16(466);
+emit_16(530);
+emit_16(465);
+emit_16(530);
+emit_16(466);
+emit_16(531);
+emit_16(467);
+emit_16(531);
+emit_16(466);
+emit_16(531);
+emit_16(467);
+emit_16(532);
+emit_16(468);
+emit_16(532);
+emit_16(467);
+emit_16(532);
+emit_16(468);
+emit_16(533);
+emit_16(469);
+emit_16(533);
+emit_16(468);
+emit_16(533);
+emit_16(469);
+emit_16(534);
+emit_16(470);
+emit_16(534);
+emit_16(469);
+emit_16(534);
+emit_16(470);
+emit_16(535);
+emit_16(471);
+emit_16(535);
+emit_16(470);
+emit_16(535);
+emit_16(471);
+emit_16(536);
+emit_16(472);
+emit_16(536);
+emit_16(471);
+emit_16(536);
+emit_16(472);
+emit_16(537);
+emit_16(473);
+emit_16(537);
+emit_16(472);
+emit_16(537);
+emit_16(473);
+emit_16(538);
+emit_16(474);
+emit_16(538);
+emit_16(473);
+emit_16(538);
+emit_16(474);
+emit_16(539);
+emit_16(475);
+emit_16(539);
+emit_16(474);
+emit_16(539);
+emit_16(475);
+emit_16(540);
+emit_16(476);
+emit_16(540);
+emit_16(475);
+emit_16(540);
+emit_16(476);
+emit_16(541);
+emit_16(477);
+emit_16(541);
+emit_16(476);
+emit_16(541);
+emit_16(477);
+emit_16(542);
+emit_16(478);
+emit_16(542);
+emit_16(477);
+emit_16(542);
+emit_16(478);
+emit_16(543);
+emit_16(479);
+emit_16(543);
+emit_16(478);
+emit_16(543);
+emit_16(479);
+emit_16(544);
+emit_16(480);
+emit_16(544);
+emit_16(479);
+emit_16(544);
+emit_16(480);
+emit_16(545);
+emit_16(481);
+emit_16(545);
+emit_16(480);
+emit_16(545);
+emit_16(481);
+emit_16(546);
+emit_16(482);
+emit_16(546);
+emit_16(481);
+emit_16(546);
+emit_16(482);
+emit_16(547);
+emit_16(483);
+emit_16(547);
+emit_16(482);
+emit_16(547);
+emit_16(483);
+emit_16(548);
+emit_16(484);
+emit_16(548);
+emit_16(483);
+emit_16(548);
+emit_16(484);
+emit_16(549);
+emit_16(485);
+emit_16(549);
+emit_16(484);
+emit_16(549);
+emit_16(485);
+emit_16(550);
+emit_16(486);
+emit_16(550);
+emit_16(485);
+emit_16(550);
+emit_16(486);
+emit_16(551);
+emit_16(487);
+emit_16(551);
+emit_16(486);
+emit_16(551);
+emit_16(487);
+emit_16(552);
+emit_16(488);
+emit_16(552);
+emit_16(487);
+emit_16(552);
+emit_16(488);
+emit_16(553);
+emit_16(489);
+emit_16(553);
+emit_16(488);
+emit_16(553);
+emit_16(489);
+emit_16(554);
+emit_16(490);
+emit_16(554);
+emit_16(489);
+emit_16(554);
+emit_16(490);
+emit_16(555);
+emit_16(491);
+emit_16(555);
+emit_16(490);
+emit_16(555);
+emit_16(491);
+emit_16(556);
+emit_16(492);
+emit_16(556);
+emit_16(491);
+emit_16(556);
+emit_16(492);
+emit_16(557);
+emit_16(493);
+emit_16(557);
+emit_16(492);
+emit_16(557);
+emit_16(493);
+emit_16(558);
+emit_16(494);
+emit_16(558);
+emit_16(493);
+emit_16(558);
+emit_16(494);
+emit_16(559);
+emit_16(495);
+emit_16(559);
+emit_16(494);
+emit_16(559);
+emit_16(495);
+emit_16(560);
+emit_16(496);
+emit_16(560);
+emit_16(495);
+emit_16(560);
+emit_16(496);
+emit_16(561);
+emit_16(497);
+emit_16(561);
+emit_16(496);
+emit_16(561);
+emit_16(497);
+emit_16(562);
+emit_16(498);
+emit_16(562);
+emit_16(497);
+emit_16(562);
+emit_16(498);
+emit_16(563);
+emit_16(499);
+emit_16(563);
+emit_16(498);
+emit_16(563);
+emit_16(499);
+emit_16(564);
+emit_16(500);
+emit_16(564);
+emit_16(499);
+emit_16(564);
+emit_16(500);
+emit_16(565);
+emit_16(501);
+emit_16(565);
+emit_16(500);
+emit_16(565);
+emit_16(501);
+emit_16(566);
+emit_16(502);
+emit_16(566);
+emit_16(501);
+emit_16(566);
+emit_16(502);
+emit_16(567);
+emit_16(503);
+emit_16(567);
+emit_16(502);
+emit_16(567);
+emit_16(503);
+emit_16(568);
+emit_16(504);
+emit_16(568);
+emit_16(503);
+emit_16(568);
+emit_16(504);
+emit_16(569);
+emit_16(505);
+emit_16(569);
+emit_16(504);
+emit_16(569);
+emit_16(505);
+emit_16(570);
+emit_16(506);
+emit_16(570);
+emit_16(505);
+emit_16(570);
+emit_16(506);
+emit_16(571);
+emit_16(507);
+emit_16(571);
+emit_16(506);
+emit_16(571);
+emit_16(507);
+emit_16(572);
+emit_16(508);
+emit_16(572);
+emit_16(507);
+emit_16(572);
+emit_16(508);
+emit_16(573);
+emit_16(509);
+emit_16(573);
+emit_16(508);
+emit_16(573);
+emit_16(509);
+emit_16(574);
+emit_16(510);
+emit_16(574);
+emit_16(509);
+emit_16(574);
+emit_16(510);
+emit_16(575);
+emit_16(511);
+emit_16(575);
+emit_16(510);
+emit_16(576);
+emit_16(512);
+emit_16(577);
+emit_16(513);
+emit_16(577);
+emit_16(512);
+emit_16(577);
+emit_16(513);
+emit_16(578);
+emit_16(514);
+emit_16(578);
+emit_16(513);
+emit_16(578);
+emit_16(514);
+emit_16(579);
+emit_16(515);
+emit_16(579);
+emit_16(514);
+emit_16(579);
+emit_16(515);
+emit_16(580);
+emit_16(516);
+emit_16(580);
+emit_16(515);
+emit_16(580);
+emit_16(516);
+emit_16(581);
+emit_16(517);
+emit_16(581);
+emit_16(516);
+emit_16(581);
+emit_16(517);
+emit_16(582);
+emit_16(518);
+emit_16(582);
+emit_16(517);
+emit_16(582);
+emit_16(518);
+emit_16(583);
+emit_16(519);
+emit_16(583);
+emit_16(518);
+emit_16(583);
+emit_16(519);
+emit_16(584);
+emit_16(520);
+emit_16(584);
+emit_16(519);
+emit_16(584);
+emit_16(520);
+emit_16(585);
+emit_16(521);
+emit_16(585);
+emit_16(520);
+emit_16(585);
+emit_16(521);
+emit_16(586);
+emit_16(522);
+emit_16(586);
+emit_16(521);
+emit_16(586);
+emit_16(522);
+emit_16(587);
+emit_16(523);
+emit_16(587);
+emit_16(522);
+emit_16(587);
+emit_16(523);
+emit_16(588);
+emit_16(524);
+emit_16(588);
+emit_16(523);
+emit_16(588);
+emit_16(524);
+emit_16(589);
+emit_16(525);
+emit_16(589);
+emit_16(524);
+emit_16(589);
+emit_16(525);
+emit_16(590);
+emit_16(526);
+emit_16(590);
+emit_16(525);
+emit_16(590);
+emit_16(526);
+emit_16(591);
+emit_16(527);
+emit_16(591);
+emit_16(526);
+emit_16(591);
+emit_16(527);
+emit_16(592);
+emit_16(528);
+emit_16(592);
+emit_16(527);
+emit_16(592);
+emit_16(528);
+emit_16(593);
+emit_16(529);
+emit_16(593);
+emit_16(528);
+emit_16(593);
+emit_16(529);
+emit_16(594);
+emit_16(530);
+emit_16(594);
+emit_16(529);
+emit_16(594);
+emit_16(530);
+emit_16(595);
+emit_16(531);
+emit_16(595);
+emit_16(530);
+emit_16(595);
+emit_16(531);
+emit_16(596);
+emit_16(532);
+emit_16(596);
+emit_16(531);
+emit_16(596);
+emit_16(532);
+emit_16(597);
+emit_16(533);
+emit_16(597);
+emit_16(532);
+emit_16(597);
+emit_16(533);
+emit_16(598);
+emit_16(534);
+emit_16(598);
+emit_16(533);
+emit_16(598);
+emit_16(534);
+emit_16(599);
+emit_16(535);
+emit_16(599);
+emit_16(534);
+emit_16(599);
+emit_16(535);
+emit_16(600);
+emit_16(536);
+emit_16(600);
+emit_16(535);
+emit_16(600);
+emit_16(536);
+emit_16(601);
+emit_16(537);
+emit_16(601);
+emit_16(536);
+emit_16(601);
+emit_16(537);
+emit_16(602);
+emit_16(538);
+emit_16(602);
+emit_16(537);
+emit_16(602);
+emit_16(538);
+emit_16(603);
+emit_16(539);
+emit_16(603);
+emit_16(538);
+emit_16(603);
+emit_16(539);
+emit_16(604);
+emit_16(540);
+emit_16(604);
+emit_16(539);
+emit_16(604);
+emit_16(540);
+emit_16(605);
+emit_16(541);
+emit_16(605);
+emit_16(540);
+emit_16(605);
+emit_16(541);
+emit_16(606);
+emit_16(542);
+emit_16(606);
+emit_16(541);
+emit_16(606);
+emit_16(542);
+emit_16(607);
+emit_16(543);
+emit_16(607);
+emit_16(542);
+emit_16(607);
+emit_16(543);
+emit_16(608);
+emit_16(544);
+emit_16(608);
+emit_16(543);
+emit_16(608);
+emit_16(544);
+emit_16(609);
+emit_16(545);
+emit_16(609);
+emit_16(544);
+emit_16(609);
+emit_16(545);
+emit_16(610);
+emit_16(546);
+emit_16(610);
+emit_16(545);
+emit_16(610);
+emit_16(546);
+emit_16(611);
+emit_16(547);
+emit_16(611);
+emit_16(546);
+emit_16(611);
+emit_16(547);
+emit_16(612);
+emit_16(548);
+emit_16(612);
+emit_16(547);
+emit_16(612);
+emit_16(548);
+emit_16(613);
+emit_16(549);
+emit_16(613);
+emit_16(548);
+emit_16(613);
+emit_16(549);
+emit_16(614);
+emit_16(550);
+emit_16(614);
+emit_16(549);
+emit_16(614);
+emit_16(550);
+emit_16(615);
+emit_16(551);
+emit_16(615);
+emit_16(550);
+emit_16(615);
+emit_16(551);
+emit_16(616);
+emit_16(552);
+emit_16(616);
+emit_16(551);
+emit_16(616);
+emit_16(552);
+emit_16(617);
+emit_16(553);
+emit_16(617);
+emit_16(552);
+emit_16(617);
+emit_16(553);
+emit_16(618);
+emit_16(554);
+emit_16(618);
+emit_16(553);
+emit_16(618);
+emit_16(554);
+emit_16(619);
+emit_16(555);
+emit_16(619);
+emit_16(554);
+emit_16(619);
+emit_16(555);
+emit_16(620);
+emit_16(556);
+emit_16(620);
+emit_16(555);
+emit_16(620);
+emit_16(556);
+emit_16(621);
+emit_16(557);
+emit_16(621);
+emit_16(556);
+emit_16(621);
+emit_16(557);
+emit_16(622);
+emit_16(558);
+emit_16(622);
+emit_16(557);
+emit_16(622);
+emit_16(558);
+emit_16(623);
+emit_16(559);
+emit_16(623);
+emit_16(558);
+emit_16(623);
+emit_16(559);
+emit_16(624);
+emit_16(560);
+emit_16(624);
+emit_16(559);
+emit_16(624);
+emit_16(560);
+emit_16(625);
+emit_16(561);
+emit_16(625);
+emit_16(560);
+emit_16(625);
+emit_16(561);
+emit_16(626);
+emit_16(562);
+emit_16(626);
+emit_16(561);
+emit_16(626);
+emit_16(562);
+emit_16(627);
+emit_16(563);
+emit_16(627);
+emit_16(562);
+emit_16(627);
+emit_16(563);
+emit_16(628);
+emit_16(564);
+emit_16(628);
+emit_16(563);
+emit_16(628);
+emit_16(564);
+emit_16(629);
+emit_16(565);
+emit_16(629);
+emit_16(564);
+emit_16(629);
+emit_16(565);
+emit_16(630);
+emit_16(566);
+emit_16(630);
+emit_16(565);
+emit_16(630);
+emit_16(566);
+emit_16(631);
+emit_16(567);
+emit_16(631);
+emit_16(566);
+emit_16(631);
+emit_16(567);
+emit_16(632);
+emit_16(568);
+emit_16(632);
+emit_16(567);
+emit_16(632);
+emit_16(568);
+emit_16(633);
+emit_16(569);
+emit_16(633);
+emit_16(568);
+emit_16(633);
+emit_16(569);
+emit_16(634);
+emit_16(570);
+emit_16(634);
+emit_16(569);
+emit_16(634);
+emit_16(570);
+emit_16(635);
+emit_16(571);
+emit_16(635);
+emit_16(570);
+emit_16(635);
+emit_16(571);
+emit_16(636);
+emit_16(572);
+emit_16(636);
+emit_16(571);
+emit_16(636);
+emit_16(572);
+emit_16(637);
+emit_16(573);
+emit_16(637);
+emit_16(572);
+emit_16(637);
+emit_16(573);
+emit_16(638);
+emit_16(574);
+emit_16(638);
+emit_16(573);
+emit_16(638);
+emit_16(574);
+emit_16(639);
+emit_16(575);
+emit_16(639);
+emit_16(574);
+emit_16(640);
+emit_16(576);
+emit_16(641);
+emit_16(577);
+emit_16(641);
+emit_16(576);
+emit_16(641);
+emit_16(577);
+emit_16(642);
+emit_16(578);
+emit_16(642);
+emit_16(577);
+emit_16(642);
+emit_16(578);
+emit_16(643);
+emit_16(579);
+emit_16(643);
+emit_16(578);
+emit_16(643);
+emit_16(579);
+emit_16(644);
+emit_16(580);
+emit_16(644);
+emit_16(579);
+emit_16(644);
+emit_16(580);
+emit_16(645);
+emit_16(581);
+emit_16(645);
+emit_16(580);
+emit_16(645);
+emit_16(581);
+emit_16(646);
+emit_16(582);
+emit_16(646);
+emit_16(581);
+emit_16(646);
+emit_16(582);
+emit_16(647);
+emit_16(583);
+emit_16(647);
+emit_16(582);
+emit_16(647);
+emit_16(583);
+emit_16(648);
+emit_16(584);
+emit_16(648);
+emit_16(583);
+emit_16(648);
+emit_16(584);
+emit_16(649);
+emit_16(585);
+emit_16(649);
+emit_16(584);
+emit_16(649);
+emit_16(585);
+emit_16(650);
+emit_16(586);
+emit_16(650);
+emit_16(585);
+emit_16(650);
+emit_16(586);
+emit_16(651);
+emit_16(587);
+emit_16(651);
+emit_16(586);
+emit_16(651);
+emit_16(587);
+emit_16(652);
+emit_16(588);
+emit_16(652);
+emit_16(587);
+emit_16(652);
+emit_16(588);
+emit_16(653);
+emit_16(589);
+emit_16(653);
+emit_16(588);
+emit_16(653);
+emit_16(589);
+emit_16(654);
+emit_16(590);
+emit_16(654);
+emit_16(589);
+emit_16(654);
+emit_16(590);
+emit_16(655);
+emit_16(591);
+emit_16(655);
+emit_16(590);
+emit_16(655);
+emit_16(591);
+emit_16(656);
+emit_16(592);
+emit_16(656);
+emit_16(591);
+emit_16(656);
+emit_16(592);
+emit_16(657);
+emit_16(593);
+emit_16(657);
+emit_16(592);
+emit_16(657);
+emit_16(593);
+emit_16(658);
+emit_16(594);
+emit_16(658);
+emit_16(593);
+emit_16(658);
+emit_16(594);
+emit_16(659);
+emit_16(595);
+emit_16(659);
+emit_16(594);
+emit_16(659);
+emit_16(595);
+emit_16(660);
+emit_16(596);
+emit_16(660);
+emit_16(595);
+emit_16(660);
+emit_16(596);
+emit_16(661);
+emit_16(597);
+emit_16(661);
+emit_16(596);
+emit_16(661);
+emit_16(597);
+emit_16(662);
+emit_16(598);
+emit_16(662);
+emit_16(597);
+emit_16(662);
+emit_16(598);
+emit_16(663);
+emit_16(599);
+emit_16(663);
+emit_16(598);
+emit_16(663);
+emit_16(599);
+emit_16(664);
+emit_16(600);
+emit_16(664);
+emit_16(599);
+emit_16(664);
+emit_16(600);
+emit_16(665);
+emit_16(601);
+emit_16(665);
+emit_16(600);
+emit_16(665);
+emit_16(601);
+emit_16(666);
+emit_16(602);
+emit_16(666);
+emit_16(601);
+emit_16(666);
+emit_16(602);
+emit_16(667);
+emit_16(603);
+emit_16(667);
+emit_16(602);
+emit_16(667);
+emit_16(603);
+emit_16(668);
+emit_16(604);
+emit_16(668);
+emit_16(603);
+emit_16(668);
+emit_16(604);
+emit_16(669);
+emit_16(605);
+emit_16(669);
+emit_16(604);
+emit_16(669);
+emit_16(605);
+emit_16(670);
+emit_16(606);
+emit_16(670);
+emit_16(605);
+emit_16(670);
+emit_16(606);
+emit_16(671);
+emit_16(607);
+emit_16(671);
+emit_16(606);
+emit_16(671);
+emit_16(607);
+emit_16(672);
+emit_16(608);
+emit_16(672);
+emit_16(607);
+emit_16(672);
+emit_16(608);
+emit_16(673);
+emit_16(609);
+emit_16(673);
+emit_16(608);
+emit_16(673);
+emit_16(609);
+emit_16(674);
+emit_16(610);
+emit_16(674);
+emit_16(609);
+emit_16(674);
+emit_16(610);
+emit_16(675);
+emit_16(611);
+emit_16(675);
+emit_16(610);
+emit_16(675);
+emit_16(611);
+emit_16(676);
+emit_16(612);
+emit_16(676);
+emit_16(611);
+emit_16(676);
+emit_16(612);
+emit_16(677);
+emit_16(613);
+emit_16(677);
+emit_16(612);
+emit_16(677);
+emit_16(613);
+emit_16(678);
+emit_16(614);
+emit_16(678);
+emit_16(613);
+emit_16(678);
+emit_16(614);
+emit_16(679);
+emit_16(615);
+emit_16(679);
+emit_16(614);
+emit_16(679);
+emit_16(615);
+emit_16(680);
+emit_16(616);
+emit_16(680);
+emit_16(615);
+emit_16(680);
+emit_16(616);
+emit_16(681);
+emit_16(617);
+emit_16(681);
+emit_16(616);
+emit_16(681);
+emit_16(617);
+emit_16(682);
+emit_16(618);
+emit_16(682);
+emit_16(617);
+emit_16(682);
+emit_16(618);
+emit_16(683);
+emit_16(619);
+emit_16(683);
+emit_16(618);
+emit_16(683);
+emit_16(619);
+emit_16(684);
+emit_16(620);
+emit_16(684);
+emit_16(619);
+emit_16(684);
+emit_16(620);
+emit_16(685);
+emit_16(621);
+emit_16(685);
+emit_16(620);
+emit_16(685);
+emit_16(621);
+emit_16(686);
+emit_16(622);
+emit_16(686);
+emit_16(621);
+emit_16(686);
+emit_16(622);
+emit_16(687);
+emit_16(623);
+emit_16(687);
+emit_16(622);
+emit_16(687);
+emit_16(623);
+emit_16(688);
+emit_16(624);
+emit_16(688);
+emit_16(623);
+emit_16(688);
+emit_16(624);
+emit_16(689);
+emit_16(625);
+emit_16(689);
+emit_16(624);
+emit_16(689);
+emit_16(625);
+emit_16(690);
+emit_16(626);
+emit_16(690);
+emit_16(625);
+emit_16(690);
+emit_16(626);
+emit_16(691);
+emit_16(627);
+emit_16(691);
+emit_16(626);
+emit_16(691);
+emit_16(627);
+emit_16(692);
+emit_16(628);
+emit_16(692);
+emit_16(627);
+emit_16(692);
+emit_16(628);
+emit_16(693);
+emit_16(629);
+emit_16(693);
+emit_16(628);
+emit_16(693);
+emit_16(629);
+emit_16(694);
+emit_16(630);
+emit_16(694);
+emit_16(629);
+emit_16(694);
+emit_16(630);
+emit_16(695);
+emit_16(631);
+emit_16(695);
+emit_16(630);
+emit_16(695);
+emit_16(631);
+emit_16(696);
+emit_16(632);
+emit_16(696);
+emit_16(631);
+emit_16(696);
+emit_16(632);
+emit_16(697);
+emit_16(633);
+emit_16(697);
+emit_16(632);
+emit_16(697);
+emit_16(633);
+emit_16(698);
+emit_16(634);
+emit_16(698);
+emit_16(633);
+emit_16(698);
+emit_16(634);
+emit_16(699);
+emit_16(635);
+emit_16(699);
+emit_16(634);
+emit_16(699);
+emit_16(635);
+emit_16(700);
+emit_16(636);
+emit_16(700);
+emit_16(635);
+emit_16(700);
+emit_16(636);
+emit_16(701);
+emit_16(637);
+emit_16(701);
+emit_16(636);
+emit_16(701);
+emit_16(637);
+emit_16(702);
+emit_16(638);
+emit_16(702);
+emit_16(637);
+emit_16(702);
+emit_16(638);
+emit_16(703);
+emit_16(639);
+emit_16(703);
+emit_16(638);
+emit_16(704);
+emit_16(640);
+emit_16(705);
+emit_16(641);
+emit_16(705);
+emit_16(640);
+emit_16(705);
+emit_16(641);
+emit_16(706);
+emit_16(642);
+emit_16(706);
+emit_16(641);
+emit_16(706);
+emit_16(642);
+emit_16(707);
+emit_16(643);
+emit_16(707);
+emit_16(642);
+emit_16(707);
+emit_16(643);
+emit_16(708);
+emit_16(644);
+emit_16(708);
+emit_16(643);
+emit_16(708);
+emit_16(644);
+emit_16(709);
+emit_16(645);
+emit_16(709);
+emit_16(644);
+emit_16(709);
+emit_16(645);
+emit_16(710);
+emit_16(646);
+emit_16(710);
+emit_16(645);
+emit_16(710);
+emit_16(646);
+emit_16(711);
+emit_16(647);
+emit_16(711);
+emit_16(646);
+emit_16(711);
+emit_16(647);
+emit_16(712);
+emit_16(648);
+emit_16(712);
+emit_16(647);
+emit_16(712);
+emit_16(648);
+emit_16(713);
+emit_16(649);
+emit_16(713);
+emit_16(648);
+emit_16(713);
+emit_16(649);
+emit_16(714);
+emit_16(650);
+emit_16(714);
+emit_16(649);
+emit_16(714);
+emit_16(650);
+emit_16(715);
+emit_16(651);
+emit_16(715);
+emit_16(650);
+emit_16(715);
+emit_16(651);
+emit_16(716);
+emit_16(652);
+emit_16(716);
+emit_16(651);
+emit_16(716);
+emit_16(652);
+emit_16(717);
+emit_16(653);
+emit_16(717);
+emit_16(652);
+emit_16(717);
+emit_16(653);
+emit_16(718);
+emit_16(654);
+emit_16(718);
+emit_16(653);
+emit_16(718);
+emit_16(654);
+emit_16(719);
+emit_16(655);
+emit_16(719);
+emit_16(654);
+emit_16(719);
+emit_16(655);
+emit_16(720);
+emit_16(656);
+emit_16(720);
+emit_16(655);
+emit_16(720);
+emit_16(656);
+emit_16(721);
+emit_16(657);
+emit_16(721);
+emit_16(656);
+emit_16(721);
+emit_16(657);
+emit_16(722);
+emit_16(658);
+emit_16(722);
+emit_16(657);
+emit_16(722);
+emit_16(658);
+emit_16(723);
+emit_16(659);
+emit_16(723);
+emit_16(658);
+emit_16(723);
+emit_16(659);
+emit_16(724);
+emit_16(660);
+emit_16(724);
+emit_16(659);
+emit_16(724);
+emit_16(660);
+emit_16(725);
+emit_16(661);
+emit_16(725);
+emit_16(660);
+emit_16(725);
+emit_16(661);
+emit_16(726);
+emit_16(662);
+emit_16(726);
+emit_16(661);
+emit_16(726);
+emit_16(662);
+emit_16(727);
+emit_16(663);
+emit_16(727);
+emit_16(662);
+emit_16(727);
+emit_16(663);
+emit_16(728);
+emit_16(664);
+emit_16(728);
+emit_16(663);
+emit_16(728);
+emit_16(664);
+emit_16(729);
+emit_16(665);
+emit_16(729);
+emit_16(664);
+emit_16(729);
+emit_16(665);
+emit_16(730);
+emit_16(666);
+emit_16(730);
+emit_16(665);
+emit_16(730);
+emit_16(666);
+emit_16(731);
+emit_16(667);
+emit_16(731);
+emit_16(666);
+emit_16(731);
+emit_16(667);
+emit_16(732);
+emit_16(668);
+emit_16(732);
+emit_16(667);
+emit_16(732);
+emit_16(668);
+emit_16(733);
+emit_16(669);
+emit_16(733);
+emit_16(668);
+emit_16(733);
+emit_16(669);
+emit_16(734);
+emit_16(670);
+emit_16(734);
+emit_16(669);
+emit_16(734);
+emit_16(670);
+emit_16(735);
+emit_16(671);
+emit_16(735);
+emit_16(670);
+emit_16(735);
+emit_16(671);
+emit_16(736);
+emit_16(672);
+emit_16(736);
+emit_16(671);
+emit_16(736);
+emit_16(672);
+emit_16(737);
+emit_16(673);
+emit_16(737);
+emit_16(672);
+emit_16(737);
+emit_16(673);
+emit_16(738);
+emit_16(674);
+emit_16(738);
+emit_16(673);
+emit_16(738);
+emit_16(674);
+emit_16(739);
+emit_16(675);
+emit_16(739);
+emit_16(674);
+emit_16(739);
+emit_16(675);
+emit_16(740);
+emit_16(676);
+emit_16(740);
+emit_16(675);
+emit_16(740);
+emit_16(676);
+emit_16(741);
+emit_16(677);
+emit_16(741);
+emit_16(676);
+emit_16(741);
+emit_16(677);
+emit_16(742);
+emit_16(678);
+emit_16(742);
+emit_16(677);
+emit_16(742);
+emit_16(678);
+emit_16(743);
+emit_16(679);
+emit_16(743);
+emit_16(678);
+emit_16(743);
+emit_16(679);
+emit_16(744);
+emit_16(680);
+emit_16(744);
+emit_16(679);
+emit_16(744);
+emit_16(680);
+emit_16(745);
+emit_16(681);
+emit_16(745);
+emit_16(680);
+emit_16(745);
+emit_16(681);
+emit_16(746);
+emit_16(682);
+emit_16(746);
+emit_16(681);
+emit_16(746);
+emit_16(682);
+emit_16(747);
+emit_16(683);
+emit_16(747);
+emit_16(682);
+emit_16(747);
+emit_16(683);
+emit_16(748);
+emit_16(684);
+emit_16(748);
+emit_16(683);
+emit_16(748);
+emit_16(684);
+emit_16(749);
+emit_16(685);
+emit_16(749);
+emit_16(684);
+emit_16(749);
+emit_16(685);
+emit_16(750);
+emit_16(686);
+emit_16(750);
+emit_16(685);
+emit_16(750);
+emit_16(686);
+emit_16(751);
+emit_16(687);
+emit_16(751);
+emit_16(686);
+emit_16(751);
+emit_16(687);
+emit_16(752);
+emit_16(688);
+emit_16(752);
+emit_16(687);
+emit_16(752);
+emit_16(688);
+emit_16(753);
+emit_16(689);
+emit_16(753);
+emit_16(688);
+emit_16(753);
+emit_16(689);
+emit_16(754);
+emit_16(690);
+emit_16(754);
+emit_16(689);
+emit_16(754);
+emit_16(690);
+emit_16(755);
+emit_16(691);
+emit_16(755);
+emit_16(690);
+emit_16(755);
+emit_16(691);
+emit_16(756);
+emit_16(692);
+emit_16(756);
+emit_16(691);
+emit_16(756);
+emit_16(692);
+emit_16(757);
+emit_16(693);
+emit_16(757);
+emit_16(692);
+emit_16(757);
+emit_16(693);
+emit_16(758);
+emit_16(694);
+emit_16(758);
+emit_16(693);
+emit_16(758);
+emit_16(694);
+emit_16(759);
+emit_16(695);
+emit_16(759);
+emit_16(694);
+emit_16(759);
+emit_16(695);
+emit_16(760);
+emit_16(696);
+emit_16(760);
+emit_16(695);
+emit_16(760);
+emit_16(696);
+emit_16(761);
+emit_16(697);
+emit_16(761);
+emit_16(696);
+emit_16(761);
+emit_16(697);
+emit_16(762);
+emit_16(698);
+emit_16(762);
+emit_16(697);
+emit_16(762);
+emit_16(698);
+emit_16(763);
+emit_16(699);
+emit_16(763);
+emit_16(698);
+emit_16(763);
+emit_16(699);
+emit_16(764);
+emit_16(700);
+emit_16(764);
+emit_16(699);
+emit_16(764);
+emit_16(700);
+emit_16(765);
+emit_16(701);
+emit_16(765);
+emit_16(700);
+emit_16(765);
+emit_16(701);
+emit_16(766);
+emit_16(702);
+emit_16(766);
+emit_16(701);
+emit_16(766);
+emit_16(702);
+emit_16(767);
+emit_16(703);
+emit_16(767);
+emit_16(702);
+emit_16(768);
+emit_16(704);
+emit_16(769);
+emit_16(705);
+emit_16(769);
+emit_16(704);
+emit_16(769);
+emit_16(705);
+emit_16(770);
+emit_16(706);
+emit_16(770);
+emit_16(705);
+emit_16(770);
+emit_16(706);
+emit_16(771);
+emit_16(707);
+emit_16(771);
+emit_16(706);
+emit_16(771);
+emit_16(707);
+emit_16(772);
+emit_16(708);
+emit_16(772);
+emit_16(707);
+emit_16(772);
+emit_16(708);
+emit_16(773);
+emit_16(709);
+emit_16(773);
+emit_16(708);
+emit_16(773);
+emit_16(709);
+emit_16(774);
+emit_16(710);
+emit_16(774);
+emit_16(709);
+emit_16(774);
+emit_16(710);
+emit_16(775);
+emit_16(711);
+emit_16(775);
+emit_16(710);
+emit_16(775);
+emit_16(711);
+emit_16(776);
+emit_16(712);
+emit_16(776);
+emit_16(711);
+emit_16(776);
+emit_16(712);
+emit_16(777);
+emit_16(713);
+emit_16(777);
+emit_16(712);
+emit_16(777);
+emit_16(713);
+emit_16(778);
+emit_16(714);
+emit_16(778);
+emit_16(713);
+emit_16(778);
+emit_16(714);
+emit_16(779);
+emit_16(715);
+emit_16(779);
+emit_16(714);
+emit_16(779);
+emit_16(715);
+emit_16(780);
+emit_16(716);
+emit_16(780);
+emit_16(715);
+emit_16(780);
+emit_16(716);
+emit_16(781);
+emit_16(717);
+emit_16(781);
+emit_16(716);
+emit_16(781);
+emit_16(717);
+emit_16(782);
+emit_16(718);
+emit_16(782);
+emit_16(717);
+emit_16(782);
+emit_16(718);
+emit_16(783);
+emit_16(719);
+emit_16(783);
+emit_16(718);
+emit_16(783);
+emit_16(719);
+emit_16(784);
+emit_16(720);
+emit_16(784);
+emit_16(719);
+emit_16(784);
+emit_16(720);
+emit_16(785);
+emit_16(721);
+emit_16(785);
+emit_16(720);
+emit_16(785);
+emit_16(721);
+emit_16(786);
+emit_16(722);
+emit_16(786);
+emit_16(721);
+emit_16(786);
+emit_16(722);
+emit_16(787);
+emit_16(723);
+emit_16(787);
+emit_16(722);
+emit_16(787);
+emit_16(723);
+emit_16(788);
+emit_16(724);
+emit_16(788);
+emit_16(723);
+emit_16(788);
+emit_16(724);
+emit_16(789);
+emit_16(725);
+emit_16(789);
+emit_16(724);
+emit_16(789);
+emit_16(725);
+emit_16(790);
+emit_16(726);
+emit_16(790);
+emit_16(725);
+emit_16(790);
+emit_16(726);
+emit_16(791);
+emit_16(727);
+emit_16(791);
+emit_16(726);
+emit_16(791);
+emit_16(727);
+emit_16(792);
+emit_16(728);
+emit_16(792);
+emit_16(727);
+emit_16(792);
+emit_16(728);
+emit_16(793);
+emit_16(729);
+emit_16(793);
+emit_16(728);
+emit_16(793);
+emit_16(729);
+emit_16(794);
+emit_16(730);
+emit_16(794);
+emit_16(729);
+emit_16(794);
+emit_16(730);
+emit_16(795);
+emit_16(731);
+emit_16(795);
+emit_16(730);
+emit_16(795);
+emit_16(731);
+emit_16(796);
+emit_16(732);
+emit_16(796);
+emit_16(731);
+emit_16(796);
+emit_16(732);
+emit_16(797);
+emit_16(733);
+emit_16(797);
+emit_16(732);
+emit_16(797);
+emit_16(733);
+emit_16(798);
+emit_16(734);
+emit_16(798);
+emit_16(733);
+emit_16(798);
+emit_16(734);
+emit_16(799);
+emit_16(735);
+emit_16(799);
+emit_16(734);
+emit_16(799);
+emit_16(735);
+emit_16(800);
+emit_16(736);
+emit_16(800);
+emit_16(735);
+emit_16(800);
+emit_16(736);
+emit_16(801);
+emit_16(737);
+emit_16(801);
+emit_16(736);
+emit_16(801);
+emit_16(737);
+emit_16(802);
+emit_16(738);
+emit_16(802);
+emit_16(737);
+emit_16(802);
+emit_16(738);
+emit_16(803);
+emit_16(739);
+emit_16(803);
+emit_16(738);
+emit_16(803);
+emit_16(739);
+emit_16(804);
+emit_16(740);
+emit_16(804);
+emit_16(739);
+emit_16(804);
+emit_16(740);
+emit_16(805);
+emit_16(741);
+emit_16(805);
+emit_16(740);
+emit_16(805);
+emit_16(741);
+emit_16(806);
+emit_16(742);
+emit_16(806);
+emit_16(741);
+emit_16(806);
+emit_16(742);
+emit_16(807);
+emit_16(743);
+emit_16(807);
+emit_16(742);
+emit_16(807);
+emit_16(743);
+emit_16(808);
+emit_16(744);
+emit_16(808);
+emit_16(743);
+emit_16(808);
+emit_16(744);
+emit_16(809);
+emit_16(745);
+emit_16(809);
+emit_16(744);
+emit_16(809);
+emit_16(745);
+emit_16(810);
+emit_16(746);
+emit_16(810);
+emit_16(745);
+emit_16(810);
+emit_16(746);
+emit_16(811);
+emit_16(747);
+emit_16(811);
+emit_16(746);
+emit_16(811);
+emit_16(747);
+emit_16(812);
+emit_16(748);
+emit_16(812);
+emit_16(747);
+emit_16(812);
+emit_16(748);
+emit_16(813);
+emit_16(749);
+emit_16(813);
+emit_16(748);
+emit_16(813);
+emit_16(749);
+emit_16(814);
+emit_16(750);
+emit_16(814);
+emit_16(749);
+emit_16(814);
+emit_16(750);
+emit_16(815);
+emit_16(751);
+emit_16(815);
+emit_16(750);
+emit_16(815);
+emit_16(751);
+emit_16(816);
+emit_16(752);
+emit_16(816);
+emit_16(751);
+emit_16(816);
+emit_16(752);
+emit_16(817);
+emit_16(753);
+emit_16(817);
+emit_16(752);
+emit_16(817);
+emit_16(753);
+emit_16(818);
+emit_16(754);
+emit_16(818);
+emit_16(753);
+emit_16(818);
+emit_16(754);
+emit_16(819);
+emit_16(755);
+emit_16(819);
+emit_16(754);
+emit_16(819);
+emit_16(755);
+emit_16(820);
+emit_16(756);
+emit_16(820);
+emit_16(755);
+emit_16(820);
+emit_16(756);
+emit_16(821);
+emit_16(757);
+emit_16(821);
+emit_16(756);
+emit_16(821);
+emit_16(757);
+emit_16(822);
+emit_16(758);
+emit_16(822);
+emit_16(757);
+emit_16(822);
+emit_16(758);
+emit_16(823);
+emit_16(759);
+emit_16(823);
+emit_16(758);
+emit_16(823);
+emit_16(759);
+emit_16(824);
+emit_16(760);
+emit_16(824);
+emit_16(759);
+emit_16(824);
+emit_16(760);
+emit_16(825);
+emit_16(761);
+emit_16(825);
+emit_16(760);
+emit_16(825);
+emit_16(761);
+emit_16(826);
+emit_16(762);
+emit_16(826);
+emit_16(761);
+emit_16(826);
+emit_16(762);
+emit_16(827);
+emit_16(763);
+emit_16(827);
+emit_16(762);
+emit_16(827);
+emit_16(763);
+emit_16(828);
+emit_16(764);
+emit_16(828);
+emit_16(763);
+emit_16(828);
+emit_16(764);
+emit_16(829);
+emit_16(765);
+emit_16(829);
+emit_16(764);
+emit_16(829);
+emit_16(765);
+emit_16(830);
+emit_16(766);
+emit_16(830);
+emit_16(765);
+emit_16(830);
+emit_16(766);
+emit_16(831);
+emit_16(767);
+emit_16(831);
+emit_16(766);
+emit_16(832);
+emit_16(768);
+emit_16(833);
+emit_16(769);
+emit_16(833);
+emit_16(768);
+emit_16(833);
+emit_16(769);
+emit_16(834);
+emit_16(770);
+emit_16(834);
+emit_16(769);
+emit_16(834);
+emit_16(770);
+emit_16(835);
+emit_16(771);
+emit_16(835);
+emit_16(770);
+emit_16(835);
+emit_16(771);
+emit_16(836);
+emit_16(772);
+emit_16(836);
+emit_16(771);
+emit_16(836);
+emit_16(772);
+emit_16(837);
+emit_16(773);
+emit_16(837);
+emit_16(772);
+emit_16(837);
+emit_16(773);
+emit_16(838);
+emit_16(774);
+emit_16(838);
+emit_16(773);
+emit_16(838);
+emit_16(774);
+emit_16(839);
+emit_16(775);
+emit_16(839);
+emit_16(774);
+emit_16(839);
+emit_16(775);
+emit_16(840);
+emit_16(776);
+emit_16(840);
+emit_16(775);
+emit_16(840);
+emit_16(776);
+emit_16(841);
+emit_16(777);
+emit_16(841);
+emit_16(776);
+emit_16(841);
+emit_16(777);
+emit_16(842);
+emit_16(778);
+emit_16(842);
+emit_16(777);
+emit_16(842);
+emit_16(778);
+emit_16(843);
+emit_16(779);
+emit_16(843);
+emit_16(778);
+emit_16(843);
+emit_16(779);
+emit_16(844);
+emit_16(780);
+emit_16(844);
+emit_16(779);
+emit_16(844);
+emit_16(780);
+emit_16(845);
+emit_16(781);
+emit_16(845);
+emit_16(780);
+emit_16(845);
+emit_16(781);
+emit_16(846);
+emit_16(782);
+emit_16(846);
+emit_16(781);
+emit_16(846);
+emit_16(782);
+emit_16(847);
+emit_16(783);
+emit_16(847);
+emit_16(782);
+emit_16(847);
+emit_16(783);
+emit_16(848);
+emit_16(784);
+emit_16(848);
+emit_16(783);
+emit_16(848);
+emit_16(784);
+emit_16(849);
+emit_16(785);
+emit_16(849);
+emit_16(784);
+emit_16(849);
+emit_16(785);
+emit_16(850);
+emit_16(786);
+emit_16(850);
+emit_16(785);
+emit_16(850);
+emit_16(786);
+emit_16(851);
+emit_16(787);
+emit_16(851);
+emit_16(786);
+emit_16(851);
+emit_16(787);
+emit_16(852);
+emit_16(788);
+emit_16(852);
+emit_16(787);
+emit_16(852);
+emit_16(788);
+emit_16(853);
+emit_16(789);
+emit_16(853);
+emit_16(788);
+emit_16(853);
+emit_16(789);
+emit_16(854);
+emit_16(790);
+emit_16(854);
+emit_16(789);
+emit_16(854);
+emit_16(790);
+emit_16(855);
+emit_16(791);
+emit_16(855);
+emit_16(790);
+emit_16(855);
+emit_16(791);
+emit_16(856);
+emit_16(792);
+emit_16(856);
+emit_16(791);
+emit_16(856);
+emit_16(792);
+emit_16(857);
+emit_16(793);
+emit_16(857);
+emit_16(792);
+emit_16(857);
+emit_16(793);
+emit_16(858);
+emit_16(794);
+emit_16(858);
+emit_16(793);
+emit_16(858);
+emit_16(794);
+emit_16(859);
+emit_16(795);
+emit_16(859);
+emit_16(794);
+emit_16(859);
+emit_16(795);
+emit_16(860);
+emit_16(796);
+emit_16(860);
+emit_16(795);
+emit_16(860);
+emit_16(796);
+emit_16(861);
+emit_16(797);
+emit_16(861);
+emit_16(796);
+emit_16(861);
+emit_16(797);
+emit_16(862);
+emit_16(798);
+emit_16(862);
+emit_16(797);
+emit_16(862);
+emit_16(798);
+emit_16(863);
+emit_16(799);
+emit_16(863);
+emit_16(798);
+emit_16(863);
+emit_16(799);
+emit_16(864);
+emit_16(800);
+emit_16(864);
+emit_16(799);
+emit_16(864);
+emit_16(800);
+emit_16(865);
+emit_16(801);
+emit_16(865);
+emit_16(800);
+emit_16(865);
+emit_16(801);
+emit_16(866);
+emit_16(802);
+emit_16(866);
+emit_16(801);
+emit_16(866);
+emit_16(802);
+emit_16(867);
+emit_16(803);
+emit_16(867);
+emit_16(802);
+emit_16(867);
+emit_16(803);
+emit_16(868);
+emit_16(804);
+emit_16(868);
+emit_16(803);
+emit_16(868);
+emit_16(804);
+emit_16(869);
+emit_16(805);
+emit_16(869);
+emit_16(804);
+emit_16(869);
+emit_16(805);
+emit_16(870);
+emit_16(806);
+emit_16(870);
+emit_16(805);
+emit_16(870);
+emit_16(806);
+emit_16(871);
+emit_16(807);
+emit_16(871);
+emit_16(806);
+emit_16(871);
+emit_16(807);
+emit_16(872);
+emit_16(808);
+emit_16(872);
+emit_16(807);
+emit_16(872);
+emit_16(808);
+emit_16(873);
+emit_16(809);
+emit_16(873);
+emit_16(808);
+emit_16(873);
+emit_16(809);
+emit_16(874);
+emit_16(810);
+emit_16(874);
+emit_16(809);
+emit_16(874);
+emit_16(810);
+emit_16(875);
+emit_16(811);
+emit_16(875);
+emit_16(810);
+emit_16(875);
+emit_16(811);
+emit_16(876);
+emit_16(812);
+emit_16(876);
+emit_16(811);
+emit_16(876);
+emit_16(812);
+emit_16(877);
+emit_16(813);
+emit_16(877);
+emit_16(812);
+emit_16(877);
+emit_16(813);
+emit_16(878);
+emit_16(814);
+emit_16(878);
+emit_16(813);
+emit_16(878);
+emit_16(814);
+emit_16(879);
+emit_16(815);
+emit_16(879);
+emit_16(814);
+emit_16(879);
+emit_16(815);
+emit_16(880);
+emit_16(816);
+emit_16(880);
+emit_16(815);
+emit_16(880);
+emit_16(816);
+emit_16(881);
+emit_16(817);
+emit_16(881);
+emit_16(816);
+emit_16(881);
+emit_16(817);
+emit_16(882);
+emit_16(818);
+emit_16(882);
+emit_16(817);
+emit_16(882);
+emit_16(818);
+emit_16(883);
+emit_16(819);
+emit_16(883);
+emit_16(818);
+emit_16(883);
+emit_16(819);
+emit_16(884);
+emit_16(820);
+emit_16(884);
+emit_16(819);
+emit_16(884);
+emit_16(820);
+emit_16(885);
+emit_16(821);
+emit_16(885);
+emit_16(820);
+emit_16(885);
+emit_16(821);
+emit_16(886);
+emit_16(822);
+emit_16(886);
+emit_16(821);
+emit_16(886);
+emit_16(822);
+emit_16(887);
+emit_16(823);
+emit_16(887);
+emit_16(822);
+emit_16(887);
+emit_16(823);
+emit_16(888);
+emit_16(824);
+emit_16(888);
+emit_16(823);
+emit_16(888);
+emit_16(824);
+emit_16(889);
+emit_16(825);
+emit_16(889);
+emit_16(824);
+emit_16(889);
+emit_16(825);
+emit_16(890);
+emit_16(826);
+emit_16(890);
+emit_16(825);
+emit_16(890);
+emit_16(826);
+emit_16(891);
+emit_16(827);
+emit_16(891);
+emit_16(826);
+emit_16(891);
+emit_16(827);
+emit_16(892);
+emit_16(828);
+emit_16(892);
+emit_16(827);
+emit_16(892);
+emit_16(828);
+emit_16(893);
+emit_16(829);
+emit_16(893);
+emit_16(828);
+emit_16(893);
+emit_16(829);
+emit_16(894);
+emit_16(830);
+emit_16(894);
+emit_16(829);
+emit_16(894);
+emit_16(830);
+emit_16(895);
+emit_16(831);
+emit_16(895);
+emit_16(830);
+emit_16(896);
+emit_16(832);
+emit_16(897);
+emit_16(833);
+emit_16(897);
+emit_16(832);
+emit_16(897);
+emit_16(833);
+emit_16(898);
+emit_16(834);
+emit_16(898);
+emit_16(833);
+emit_16(898);
+emit_16(834);
+emit_16(899);
+emit_16(835);
+emit_16(899);
+emit_16(834);
+emit_16(899);
+emit_16(835);
+emit_16(900);
+emit_16(836);
+emit_16(900);
+emit_16(835);
+emit_16(900);
+emit_16(836);
+emit_16(901);
+emit_16(837);
+emit_16(901);
+emit_16(836);
+emit_16(901);
+emit_16(837);
+emit_16(902);
+emit_16(838);
+emit_16(902);
+emit_16(837);
+emit_16(902);
+emit_16(838);
+emit_16(903);
+emit_16(839);
+emit_16(903);
+emit_16(838);
+emit_16(903);
+emit_16(839);
+emit_16(904);
+emit_16(840);
+emit_16(904);
+emit_16(839);
+emit_16(904);
+emit_16(840);
+emit_16(905);
+emit_16(841);
+emit_16(905);
+emit_16(840);
+emit_16(905);
+emit_16(841);
+emit_16(906);
+emit_16(842);
+emit_16(906);
+emit_16(841);
+emit_16(906);
+emit_16(842);
+emit_16(907);
+emit_16(843);
+emit_16(907);
+emit_16(842);
+emit_16(907);
+emit_16(843);
+emit_16(908);
+emit_16(844);
+emit_16(908);
+emit_16(843);
+emit_16(908);
+emit_16(844);
+emit_16(909);
+emit_16(845);
+emit_16(909);
+emit_16(844);
+emit_16(909);
+emit_16(845);
+emit_16(910);
+emit_16(846);
+emit_16(910);
+emit_16(845);
+emit_16(910);
+emit_16(846);
+emit_16(911);
+emit_16(847);
+emit_16(911);
+emit_16(846);
+emit_16(911);
+emit_16(847);
+emit_16(912);
+emit_16(848);
+emit_16(912);
+emit_16(847);
+emit_16(912);
+emit_16(848);
+emit_16(913);
+emit_16(849);
+emit_16(913);
+emit_16(848);
+emit_16(913);
+emit_16(849);
+emit_16(914);
+emit_16(850);
+emit_16(914);
+emit_16(849);
+emit_16(914);
+emit_16(850);
+emit_16(915);
+emit_16(851);
+emit_16(915);
+emit_16(850);
+emit_16(915);
+emit_16(851);
+emit_16(916);
+emit_16(852);
+emit_16(916);
+emit_16(851);
+emit_16(916);
+emit_16(852);
+emit_16(917);
+emit_16(853);
+emit_16(917);
+emit_16(852);
+emit_16(917);
+emit_16(853);
+emit_16(918);
+emit_16(854);
+emit_16(918);
+emit_16(853);
+emit_16(918);
+emit_16(854);
+emit_16(919);
+emit_16(855);
+emit_16(919);
+emit_16(854);
+emit_16(919);
+emit_16(855);
+emit_16(920);
+emit_16(856);
+emit_16(920);
+emit_16(855);
+emit_16(920);
+emit_16(856);
+emit_16(921);
+emit_16(857);
+emit_16(921);
+emit_16(856);
+emit_16(921);
+emit_16(857);
+emit_16(922);
+emit_16(858);
+emit_16(922);
+emit_16(857);
+emit_16(922);
+emit_16(858);
+emit_16(923);
+emit_16(859);
+emit_16(923);
+emit_16(858);
+emit_16(923);
+emit_16(859);
+emit_16(924);
+emit_16(860);
+emit_16(924);
+emit_16(859);
+emit_16(924);
+emit_16(860);
+emit_16(925);
+emit_16(861);
+emit_16(925);
+emit_16(860);
+emit_16(925);
+emit_16(861);
+emit_16(926);
+emit_16(862);
+emit_16(926);
+emit_16(861);
+emit_16(926);
+emit_16(862);
+emit_16(927);
+emit_16(863);
+emit_16(927);
+emit_16(862);
+emit_16(927);
+emit_16(863);
+emit_16(928);
+emit_16(864);
+emit_16(928);
+emit_16(863);
+emit_16(928);
+emit_16(864);
+emit_16(929);
+emit_16(865);
+emit_16(929);
+emit_16(864);
+emit_16(929);
+emit_16(865);
+emit_16(930);
+emit_16(866);
+emit_16(930);
+emit_16(865);
+emit_16(930);
+emit_16(866);
+emit_16(931);
+emit_16(867);
+emit_16(931);
+emit_16(866);
+emit_16(931);
+emit_16(867);
+emit_16(932);
+emit_16(868);
+emit_16(932);
+emit_16(867);
+emit_16(932);
+emit_16(868);
+emit_16(933);
+emit_16(869);
+emit_16(933);
+emit_16(868);
+emit_16(933);
+emit_16(869);
+emit_16(934);
+emit_16(870);
+emit_16(934);
+emit_16(869);
+emit_16(934);
+emit_16(870);
+emit_16(935);
+emit_16(871);
+emit_16(935);
+emit_16(870);
+emit_16(935);
+emit_16(871);
+emit_16(936);
+emit_16(872);
+emit_16(936);
+emit_16(871);
+emit_16(936);
+emit_16(872);
+emit_16(937);
+emit_16(873);
+emit_16(937);
+emit_16(872);
+emit_16(937);
+emit_16(873);
+emit_16(938);
+emit_16(874);
+emit_16(938);
+emit_16(873);
+emit_16(938);
+emit_16(874);
+emit_16(939);
+emit_16(875);
+emit_16(939);
+emit_16(874);
+emit_16(939);
+emit_16(875);
+emit_16(940);
+emit_16(876);
+emit_16(940);
+emit_16(875);
+emit_16(940);
+emit_16(876);
+emit_16(941);
+emit_16(877);
+emit_16(941);
+emit_16(876);
+emit_16(941);
+emit_16(877);
+emit_16(942);
+emit_16(878);
+emit_16(942);
+emit_16(877);
+emit_16(942);
+emit_16(878);
+emit_16(943);
+emit_16(879);
+emit_16(943);
+emit_16(878);
+emit_16(943);
+emit_16(879);
+emit_16(944);
+emit_16(880);
+emit_16(944);
+emit_16(879);
+emit_16(944);
+emit_16(880);
+emit_16(945);
+emit_16(881);
+emit_16(945);
+emit_16(880);
+emit_16(945);
+emit_16(881);
+emit_16(946);
+emit_16(882);
+emit_16(946);
+emit_16(881);
+emit_16(946);
+emit_16(882);
+emit_16(947);
+emit_16(883);
+emit_16(947);
+emit_16(882);
+emit_16(947);
+emit_16(883);
+emit_16(948);
+emit_16(884);
+emit_16(948);
+emit_16(883);
+emit_16(948);
+emit_16(884);
+emit_16(949);
+emit_16(885);
+emit_16(949);
+emit_16(884);
+emit_16(949);
+emit_16(885);
+emit_16(950);
+emit_16(886);
+emit_16(950);
+emit_16(885);
+emit_16(950);
+emit_16(886);
+emit_16(951);
+emit_16(887);
+emit_16(951);
+emit_16(886);
+emit_16(951);
+emit_16(887);
+emit_16(952);
+emit_16(888);
+emit_16(952);
+emit_16(887);
+emit_16(952);
+emit_16(888);
+emit_16(953);
+emit_16(889);
+emit_16(953);
+emit_16(888);
+emit_16(953);
+emit_16(889);
+emit_16(954);
+emit_16(890);
+emit_16(954);
+emit_16(889);
+emit_16(954);
+emit_16(890);
+emit_16(955);
+emit_16(891);
+emit_16(955);
+emit_16(890);
+emit_16(955);
+emit_16(891);
+emit_16(956);
+emit_16(892);
+emit_16(956);
+emit_16(891);
+emit_16(956);
+emit_16(892);
+emit_16(957);
+emit_16(893);
+emit_16(957);
+emit_16(892);
+emit_16(957);
+emit_16(893);
+emit_16(958);
+emit_16(894);
+emit_16(958);
+emit_16(893);
+emit_16(958);
+emit_16(894);
+emit_16(959);
+emit_16(895);
+emit_16(959);
+emit_16(894);
+emit_16(960);
+emit_16(896);
+emit_16(961);
+emit_16(897);
+emit_16(961);
+emit_16(896);
+emit_16(961);
+emit_16(897);
+emit_16(962);
+emit_16(898);
+emit_16(962);
+emit_16(897);
+emit_16(962);
+emit_16(898);
+emit_16(963);
+emit_16(899);
+emit_16(963);
+emit_16(898);
+emit_16(963);
+emit_16(899);
+emit_16(964);
+emit_16(900);
+emit_16(964);
+emit_16(899);
+emit_16(964);
+emit_16(900);
+emit_16(965);
+emit_16(901);
+emit_16(965);
+emit_16(900);
+emit_16(965);
+emit_16(901);
+emit_16(966);
+emit_16(902);
+emit_16(966);
+emit_16(901);
+emit_16(966);
+emit_16(902);
+emit_16(967);
+emit_16(903);
+emit_16(967);
+emit_16(902);
+emit_16(967);
+emit_16(903);
+emit_16(968);
+emit_16(904);
+emit_16(968);
+emit_16(903);
+emit_16(968);
+emit_16(904);
+emit_16(969);
+emit_16(905);
+emit_16(969);
+emit_16(904);
+emit_16(969);
+emit_16(905);
+emit_16(970);
+emit_16(906);
+emit_16(970);
+emit_16(905);
+emit_16(970);
+emit_16(906);
+emit_16(971);
+emit_16(907);
+emit_16(971);
+emit_16(906);
+emit_16(971);
+emit_16(907);
+emit_16(972);
+emit_16(908);
+emit_16(972);
+emit_16(907);
+emit_16(972);
+emit_16(908);
+emit_16(973);
+emit_16(909);
+emit_16(973);
+emit_16(908);
+emit_16(973);
+emit_16(909);
+emit_16(974);
+emit_16(910);
+emit_16(974);
+emit_16(909);
+emit_16(974);
+emit_16(910);
+emit_16(975);
+emit_16(911);
+emit_16(975);
+emit_16(910);
+emit_16(975);
+emit_16(911);
+emit_16(976);
+emit_16(912);
+emit_16(976);
+emit_16(911);
+emit_16(976);
+emit_16(912);
+emit_16(977);
+emit_16(913);
+emit_16(977);
+emit_16(912);
+emit_16(977);
+emit_16(913);
+emit_16(978);
+emit_16(914);
+emit_16(978);
+emit_16(913);
+emit_16(978);
+emit_16(914);
+emit_16(979);
+emit_16(915);
+emit_16(979);
+emit_16(914);
+emit_16(979);
+emit_16(915);
+emit_16(980);
+emit_16(916);
+emit_16(980);
+emit_16(915);
+emit_16(980);
+emit_16(916);
+emit_16(981);
+emit_16(917);
+emit_16(981);
+emit_16(916);
+emit_16(981);
+emit_16(917);
+emit_16(982);
+emit_16(918);
+emit_16(982);
+emit_16(917);
+emit_16(982);
+emit_16(918);
+emit_16(983);
+emit_16(919);
+emit_16(983);
+emit_16(918);
+emit_16(983);
+emit_16(919);
+emit_16(984);
+emit_16(920);
+emit_16(984);
+emit_16(919);
+emit_16(984);
+emit_16(920);
+emit_16(985);
+emit_16(921);
+emit_16(985);
+emit_16(920);
+emit_16(985);
+emit_16(921);
+emit_16(986);
+emit_16(922);
+emit_16(986);
+emit_16(921);
+emit_16(986);
+emit_16(922);
+emit_16(987);
+emit_16(923);
+emit_16(987);
+emit_16(922);
+emit_16(987);
+emit_16(923);
+emit_16(988);
+emit_16(924);
+emit_16(988);
+emit_16(923);
+emit_16(988);
+emit_16(924);
+emit_16(989);
+emit_16(925);
+emit_16(989);
+emit_16(924);
+emit_16(989);
+emit_16(925);
+emit_16(990);
+emit_16(926);
+emit_16(990);
+emit_16(925);
+emit_16(990);
+emit_16(926);
+emit_16(991);
+emit_16(927);
+emit_16(991);
+emit_16(926);
+emit_16(991);
+emit_16(927);
+emit_16(992);
+emit_16(928);
+emit_16(992);
+emit_16(927);
+emit_16(992);
+emit_16(928);
+emit_16(993);
+emit_16(929);
+emit_16(993);
+emit_16(928);
+emit_16(993);
+emit_16(929);
+emit_16(994);
+emit_16(930);
+emit_16(994);
+emit_16(929);
+emit_16(994);
+emit_16(930);
+emit_16(995);
+emit_16(931);
+emit_16(995);
+emit_16(930);
+emit_16(995);
+emit_16(931);
+emit_16(996);
+emit_16(932);
+emit_16(996);
+emit_16(931);
+emit_16(996);
+emit_16(932);
+emit_16(997);
+emit_16(933);
+emit_16(997);
+emit_16(932);
+emit_16(997);
+emit_16(933);
+emit_16(998);
+emit_16(934);
+emit_16(998);
+emit_16(933);
+emit_16(998);
+emit_16(934);
+emit_16(999);
+emit_16(935);
+emit_16(999);
+emit_16(934);
+emit_16(999);
+emit_16(935);
+emit_16(1000);
+emit_16(936);
+emit_16(1000);
+emit_16(935);
+emit_16(1000);
+emit_16(936);
+emit_16(1001);
+emit_16(937);
+emit_16(1001);
+emit_16(936);
+emit_16(1001);
+emit_16(937);
+emit_16(1002);
+emit_16(938);
+emit_16(1002);
+emit_16(937);
+emit_16(1002);
+emit_16(938);
+emit_16(1003);
+emit_16(939);
+emit_16(1003);
+emit_16(938);
+emit_16(1003);
+emit_16(939);
+emit_16(1004);
+emit_16(940);
+emit_16(1004);
+emit_16(939);
+emit_16(1004);
+emit_16(940);
+emit_16(1005);
+emit_16(941);
+emit_16(1005);
+emit_16(940);
+emit_16(1005);
+emit_16(941);
+emit_16(1006);
+emit_16(942);
+emit_16(1006);
+emit_16(941);
+emit_16(1006);
+emit_16(942);
+emit_16(1007);
+emit_16(943);
+emit_16(1007);
+emit_16(942);
+emit_16(1007);
+emit_16(943);
+emit_16(1008);
+emit_16(944);
+emit_16(1008);
+emit_16(943);
+emit_16(1008);
+emit_16(944);
+emit_16(1009);
+emit_16(945);
+emit_16(1009);
+emit_16(944);
+emit_16(1009);
+emit_16(945);
+emit_16(1010);
+emit_16(946);
+emit_16(1010);
+emit_16(945);
+emit_16(1010);
+emit_16(946);
+emit_16(1011);
+emit_16(947);
+emit_16(1011);
+emit_16(946);
+emit_16(1011);
+emit_16(947);
+emit_16(1012);
+emit_16(948);
+emit_16(1012);
+emit_16(947);
+emit_16(1012);
+emit_16(948);
+emit_16(1013);
+emit_16(949);
+emit_16(1013);
+emit_16(948);
+emit_16(1013);
+emit_16(949);
+emit_16(1014);
+emit_16(950);
+emit_16(1014);
+emit_16(949);
+emit_16(1014);
+emit_16(950);
+emit_16(1015);
+emit_16(951);
+emit_16(1015);
+emit_16(950);
+emit_16(1015);
+emit_16(951);
+emit_16(1016);
+emit_16(952);
+emit_16(1016);
+emit_16(951);
+emit_16(1016);
+emit_16(952);
+emit_16(1017);
+emit_16(953);
+emit_16(1017);
+emit_16(952);
+emit_16(1017);
+emit_16(953);
+emit_16(1018);
+emit_16(954);
+emit_16(1018);
+emit_16(953);
+emit_16(1018);
+emit_16(954);
+emit_16(1019);
+emit_16(955);
+emit_16(1019);
+emit_16(954);
+emit_16(1019);
+emit_16(955);
+emit_16(1020);
+emit_16(956);
+emit_16(1020);
+emit_16(955);
+emit_16(1020);
+emit_16(956);
+emit_16(1021);
+emit_16(957);
+emit_16(1021);
+emit_16(956);
+emit_16(1021);
+emit_16(957);
+emit_16(1022);
+emit_16(958);
+emit_16(1022);
+emit_16(957);
+emit_16(1022);
+emit_16(958);
+emit_16(1023);
+emit_16(959);
+emit_16(1023);
+emit_16(958);
+emit_16(1024);
+emit_16(960);
+emit_16(1025);
+emit_16(961);
+emit_16(1025);
+emit_16(960);
+emit_16(1025);
+emit_16(961);
+emit_16(1026);
+emit_16(962);
+emit_16(1026);
+emit_16(961);
+emit_16(1026);
+emit_16(962);
+emit_16(1027);
+emit_16(963);
+emit_16(1027);
+emit_16(962);
+emit_16(1027);
+emit_16(963);
+emit_16(1028);
+emit_16(964);
+emit_16(1028);
+emit_16(963);
+emit_16(1028);
+emit_16(964);
+emit_16(1029);
+emit_16(965);
+emit_16(1029);
+emit_16(964);
+emit_16(1029);
+emit_16(965);
+emit_16(1030);
+emit_16(966);
+emit_16(1030);
+emit_16(965);
+emit_16(1030);
+emit_16(966);
+emit_16(1031);
+emit_16(967);
+emit_16(1031);
+emit_16(966);
+emit_16(1031);
+emit_16(967);
+emit_16(1032);
+emit_16(968);
+emit_16(1032);
+emit_16(967);
+emit_16(1032);
+emit_16(968);
+emit_16(1033);
+emit_16(969);
+emit_16(1033);
+emit_16(968);
+emit_16(1033);
+emit_16(969);
+emit_16(1034);
+emit_16(970);
+emit_16(1034);
+emit_16(969);
+emit_16(1034);
+emit_16(970);
+emit_16(1035);
+emit_16(971);
+emit_16(1035);
+emit_16(970);
+emit_16(1035);
+emit_16(971);
+emit_16(1036);
+emit_16(972);
+emit_16(1036);
+emit_16(971);
+emit_16(1036);
+emit_16(972);
+emit_16(1037);
+emit_16(973);
+emit_16(1037);
+emit_16(972);
+emit_16(1037);
+emit_16(973);
+emit_16(1038);
+emit_16(974);
+emit_16(1038);
+emit_16(973);
+emit_16(1038);
+emit_16(974);
+emit_16(1039);
+emit_16(975);
+emit_16(1039);
+emit_16(974);
+emit_16(1039);
+emit_16(975);
+emit_16(1040);
+emit_16(976);
+emit_16(1040);
+emit_16(975);
+emit_16(1040);
+emit_16(976);
+emit_16(1041);
+emit_16(977);
+emit_16(1041);
+emit_16(976);
+emit_16(1041);
+emit_16(977);
+emit_16(1042);
+emit_16(978);
+emit_16(1042);
+emit_16(977);
+emit_16(1042);
+emit_16(978);
+emit_16(1043);
+emit_16(979);
+emit_16(1043);
+emit_16(978);
+emit_16(1043);
+emit_16(979);
+emit_16(1044);
+emit_16(980);
+emit_16(1044);
+emit_16(979);
+emit_16(1044);
+emit_16(980);
+emit_16(1045);
+emit_16(981);
+emit_16(1045);
+emit_16(980);
+emit_16(1045);
+emit_16(981);
+emit_16(1046);
+emit_16(982);
+emit_16(1046);
+emit_16(981);
+emit_16(1046);
+emit_16(982);
+emit_16(1047);
+emit_16(983);
+emit_16(1047);
+emit_16(982);
+emit_16(1047);
+emit_16(983);
+emit_16(1048);
+emit_16(984);
+emit_16(1048);
+emit_16(983);
+emit_16(1048);
+emit_16(984);
+emit_16(1049);
+emit_16(985);
+emit_16(1049);
+emit_16(984);
+emit_16(1049);
+emit_16(985);
+emit_16(1050);
+emit_16(986);
+emit_16(1050);
+emit_16(985);
+emit_16(1050);
+emit_16(986);
+emit_16(1051);
+emit_16(987);
+emit_16(1051);
+emit_16(986);
+emit_16(1051);
+emit_16(987);
+emit_16(1052);
+emit_16(988);
+emit_16(1052);
+emit_16(987);
+emit_16(1052);
+emit_16(988);
+emit_16(1053);
+emit_16(989);
+emit_16(1053);
+emit_16(988);
+emit_16(1053);
+emit_16(989);
+emit_16(1054);
+emit_16(990);
+emit_16(1054);
+emit_16(989);
+emit_16(1054);
+emit_16(990);
+emit_16(1055);
+emit_16(991);
+emit_16(1055);
+emit_16(990);
+emit_16(1055);
+emit_16(991);
+emit_16(1056);
+emit_16(992);
+emit_16(1056);
+emit_16(991);
+emit_16(1056);
+emit_16(992);
+emit_16(1057);
+emit_16(993);
+emit_16(1057);
+emit_16(992);
+emit_16(1057);
+emit_16(993);
+emit_16(1058);
+emit_16(994);
+emit_16(1058);
+emit_16(993);
+emit_16(1058);
+emit_16(994);
+emit_16(1059);
+emit_16(995);
+emit_16(1059);
+emit_16(994);
+emit_16(1059);
+emit_16(995);
+emit_16(1060);
+emit_16(996);
+emit_16(1060);
+emit_16(995);
+emit_16(1060);
+emit_16(996);
+emit_16(1061);
+emit_16(997);
+emit_16(1061);
+emit_16(996);
+emit_16(1061);
+emit_16(997);
+emit_16(1062);
+emit_16(998);
+emit_16(1062);
+emit_16(997);
+emit_16(1062);
+emit_16(998);
+emit_16(1063);
+emit_16(999);
+emit_16(1063);
+emit_16(998);
+emit_16(1063);
+emit_16(999);
+emit_16(1064);
+emit_16(1000);
+emit_16(1064);
+emit_16(999);
+emit_16(1064);
+emit_16(1000);
+emit_16(1065);
+emit_16(1001);
+emit_16(1065);
+emit_16(1000);
+emit_16(1065);
+emit_16(1001);
+emit_16(1066);
+emit_16(1002);
+emit_16(1066);
+emit_16(1001);
+emit_16(1066);
+emit_16(1002);
+emit_16(1067);
+emit_16(1003);
+emit_16(1067);
+emit_16(1002);
+emit_16(1067);
+emit_16(1003);
+emit_16(1068);
+emit_16(1004);
+emit_16(1068);
+emit_16(1003);
+emit_16(1068);
+emit_16(1004);
+emit_16(1069);
+emit_16(1005);
+emit_16(1069);
+emit_16(1004);
+emit_16(1069);
+emit_16(1005);
+emit_16(1070);
+emit_16(1006);
+emit_16(1070);
+emit_16(1005);
+emit_16(1070);
+emit_16(1006);
+emit_16(1071);
+emit_16(1007);
+emit_16(1071);
+emit_16(1006);
+emit_16(1071);
+emit_16(1007);
+emit_16(1072);
+emit_16(1008);
+emit_16(1072);
+emit_16(1007);
+emit_16(1072);
+emit_16(1008);
+emit_16(1073);
+emit_16(1009);
+emit_16(1073);
+emit_16(1008);
+emit_16(1073);
+emit_16(1009);
+emit_16(1074);
+emit_16(1010);
+emit_16(1074);
+emit_16(1009);
+emit_16(1074);
+emit_16(1010);
+emit_16(1075);
+emit_16(1011);
+emit_16(1075);
+emit_16(1010);
+emit_16(1075);
+emit_16(1011);
+emit_16(1076);
+emit_16(1012);
+emit_16(1076);
+emit_16(1011);
+emit_16(1076);
+emit_16(1012);
+emit_16(1077);
+emit_16(1013);
+emit_16(1077);
+emit_16(1012);
+emit_16(1077);
+emit_16(1013);
+emit_16(1078);
+emit_16(1014);
+emit_16(1078);
+emit_16(1013);
+emit_16(1078);
+emit_16(1014);
+emit_16(1079);
+emit_16(1015);
+emit_16(1079);
+emit_16(1014);
+emit_16(1079);
+emit_16(1015);
+emit_16(1080);
+emit_16(1016);
+emit_16(1080);
+emit_16(1015);
+emit_16(1080);
+emit_16(1016);
+emit_16(1081);
+emit_16(1017);
+emit_16(1081);
+emit_16(1016);
+emit_16(1081);
+emit_16(1017);
+emit_16(1082);
+emit_16(1018);
+emit_16(1082);
+emit_16(1017);
+emit_16(1082);
+emit_16(1018);
+emit_16(1083);
+emit_16(1019);
+emit_16(1083);
+emit_16(1018);
+emit_16(1083);
+emit_16(1019);
+emit_16(1084);
+emit_16(1020);
+emit_16(1084);
+emit_16(1019);
+emit_16(1084);
+emit_16(1020);
+emit_16(1085);
+emit_16(1021);
+emit_16(1085);
+emit_16(1020);
+emit_16(1085);
+emit_16(1021);
+emit_16(1086);
+emit_16(1022);
+emit_16(1086);
+emit_16(1021);
+emit_16(1086);
+emit_16(1022);
+emit_16(1087);
+emit_16(1023);
+emit_16(1087);
+emit_16(1022);
+emit_16(1088);
+emit_16(1024);
+emit_16(1089);
+emit_16(1025);
+emit_16(1089);
+emit_16(1024);
+emit_16(1089);
+emit_16(1025);
+emit_16(1090);
+emit_16(1026);
+emit_16(1090);
+emit_16(1025);
+emit_16(1090);
+emit_16(1026);
+emit_16(1091);
+emit_16(1027);
+emit_16(1091);
+emit_16(1026);
+emit_16(1091);
+emit_16(1027);
+emit_16(1092);
+emit_16(1028);
+emit_16(1092);
+emit_16(1027);
+emit_16(1092);
+emit_16(1028);
+emit_16(1093);
+emit_16(1029);
+emit_16(1093);
+emit_16(1028);
+emit_16(1093);
+emit_16(1029);
+emit_16(1094);
+emit_16(1030);
+emit_16(1094);
+emit_16(1029);
+emit_16(1094);
+emit_16(1030);
+emit_16(1095);
+emit_16(1031);
+emit_16(1095);
+emit_16(1030);
+emit_16(1095);
+emit_16(1031);
+emit_16(1096);
+emit_16(1032);
+emit_16(1096);
+emit_16(1031);
+emit_16(1096);
+emit_16(1032);
+emit_16(1097);
+emit_16(1033);
+emit_16(1097);
+emit_16(1032);
+emit_16(1097);
+emit_16(1033);
+emit_16(1098);
+emit_16(1034);
+emit_16(1098);
+emit_16(1033);
+emit_16(1098);
+emit_16(1034);
+emit_16(1099);
+emit_16(1035);
+emit_16(1099);
+emit_16(1034);
+emit_16(1099);
+emit_16(1035);
+emit_16(1100);
+emit_16(1036);
+emit_16(1100);
+emit_16(1035);
+emit_16(1100);
+emit_16(1036);
+emit_16(1101);
+emit_16(1037);
+emit_16(1101);
+emit_16(1036);
+emit_16(1101);
+emit_16(1037);
+emit_16(1102);
+emit_16(1038);
+emit_16(1102);
+emit_16(1037);
+emit_16(1102);
+emit_16(1038);
+emit_16(1103);
+emit_16(1039);
+emit_16(1103);
+emit_16(1038);
+emit_16(1103);
+emit_16(1039);
+emit_16(1104);
+emit_16(1040);
+emit_16(1104);
+emit_16(1039);
+emit_16(1104);
+emit_16(1040);
+emit_16(1105);
+emit_16(1041);
+emit_16(1105);
+emit_16(1040);
+emit_16(1105);
+emit_16(1041);
+emit_16(1106);
+emit_16(1042);
+emit_16(1106);
+emit_16(1041);
+emit_16(1106);
+emit_16(1042);
+emit_16(1107);
+emit_16(1043);
+emit_16(1107);
+emit_16(1042);
+emit_16(1107);
+emit_16(1043);
+emit_16(1108);
+emit_16(1044);
+emit_16(1108);
+emit_16(1043);
+emit_16(1108);
+emit_16(1044);
+emit_16(1109);
+emit_16(1045);
+emit_16(1109);
+emit_16(1044);
+emit_16(1109);
+emit_16(1045);
+emit_16(1110);
+emit_16(1046);
+emit_16(1110);
+emit_16(1045);
+emit_16(1110);
+emit_16(1046);
+emit_16(1111);
+emit_16(1047);
+emit_16(1111);
+emit_16(1046);
+emit_16(1111);
+emit_16(1047);
+emit_16(1112);
+emit_16(1048);
+emit_16(1112);
+emit_16(1047);
+emit_16(1112);
+emit_16(1048);
+emit_16(1113);
+emit_16(1049);
+emit_16(1113);
+emit_16(1048);
+emit_16(1113);
+emit_16(1049);
+emit_16(1114);
+emit_16(1050);
+emit_16(1114);
+emit_16(1049);
+emit_16(1114);
+emit_16(1050);
+emit_16(1115);
+emit_16(1051);
+emit_16(1115);
+emit_16(1050);
+emit_16(1115);
+emit_16(1051);
+emit_16(1116);
+emit_16(1052);
+emit_16(1116);
+emit_16(1051);
+emit_16(1116);
+emit_16(1052);
+emit_16(1117);
+emit_16(1053);
+emit_16(1117);
+emit_16(1052);
+emit_16(1117);
+emit_16(1053);
+emit_16(1118);
+emit_16(1054);
+emit_16(1118);
+emit_16(1053);
+emit_16(1118);
+emit_16(1054);
+emit_16(1119);
+emit_16(1055);
+emit_16(1119);
+emit_16(1054);
+emit_16(1119);
+emit_16(1055);
+emit_16(1120);
+emit_16(1056);
+emit_16(1120);
+emit_16(1055);
+emit_16(1120);
+emit_16(1056);
+emit_16(1121);
+emit_16(1057);
+emit_16(1121);
+emit_16(1056);
+emit_16(1121);
+emit_16(1057);
+emit_16(1122);
+emit_16(1058);
+emit_16(1122);
+emit_16(1057);
+emit_16(1122);
+emit_16(1058);
+emit_16(1123);
+emit_16(1059);
+emit_16(1123);
+emit_16(1058);
+emit_16(1123);
+emit_16(1059);
+emit_16(1124);
+emit_16(1060);
+emit_16(1124);
+emit_16(1059);
+emit_16(1124);
+emit_16(1060);
+emit_16(1125);
+emit_16(1061);
+emit_16(1125);
+emit_16(1060);
+emit_16(1125);
+emit_16(1061);
+emit_16(1126);
+emit_16(1062);
+emit_16(1126);
+emit_16(1061);
+emit_16(1126);
+emit_16(1062);
+emit_16(1127);
+emit_16(1063);
+emit_16(1127);
+emit_16(1062);
+emit_16(1127);
+emit_16(1063);
+emit_16(1128);
+emit_16(1064);
+emit_16(1128);
+emit_16(1063);
+emit_16(1128);
+emit_16(1064);
+emit_16(1129);
+emit_16(1065);
+emit_16(1129);
+emit_16(1064);
+emit_16(1129);
+emit_16(1065);
+emit_16(1130);
+emit_16(1066);
+emit_16(1130);
+emit_16(1065);
+emit_16(1130);
+emit_16(1066);
+emit_16(1131);
+emit_16(1067);
+emit_16(1131);
+emit_16(1066);
+emit_16(1131);
+emit_16(1067);
+emit_16(1132);
+emit_16(1068);
+emit_16(1132);
+emit_16(1067);
+emit_16(1132);
+emit_16(1068);
+emit_16(1133);
+emit_16(1069);
+emit_16(1133);
+emit_16(1068);
+emit_16(1133);
+emit_16(1069);
+emit_16(1134);
+emit_16(1070);
+emit_16(1134);
+emit_16(1069);
+emit_16(1134);
+emit_16(1070);
+emit_16(1135);
+emit_16(1071);
+emit_16(1135);
+emit_16(1070);
+emit_16(1135);
+emit_16(1071);
+emit_16(1136);
+emit_16(1072);
+emit_16(1136);
+emit_16(1071);
+emit_16(1136);
+emit_16(1072);
+emit_16(1137);
+emit_16(1073);
+emit_16(1137);
+emit_16(1072);
+emit_16(1137);
+emit_16(1073);
+emit_16(1138);
+emit_16(1074);
+emit_16(1138);
+emit_16(1073);
+emit_16(1138);
+emit_16(1074);
+emit_16(1139);
+emit_16(1075);
+emit_16(1139);
+emit_16(1074);
+emit_16(1139);
+emit_16(1075);
+emit_16(1140);
+emit_16(1076);
+emit_16(1140);
+emit_16(1075);
+emit_16(1140);
+emit_16(1076);
+emit_16(1141);
+emit_16(1077);
+emit_16(1141);
+emit_16(1076);
+emit_16(1141);
+emit_16(1077);
+emit_16(1142);
+emit_16(1078);
+emit_16(1142);
+emit_16(1077);
+emit_16(1142);
+emit_16(1078);
+emit_16(1143);
+emit_16(1079);
+emit_16(1143);
+emit_16(1078);
+emit_16(1143);
+emit_16(1079);
+emit_16(1144);
+emit_16(1080);
+emit_16(1144);
+emit_16(1079);
+emit_16(1144);
+emit_16(1080);
+emit_16(1145);
+emit_16(1081);
+emit_16(1145);
+emit_16(1080);
+emit_16(1145);
+emit_16(1081);
+emit_16(1146);
+emit_16(1082);
+emit_16(1146);
+emit_16(1081);
+emit_16(1146);
+emit_16(1082);
+emit_16(1147);
+emit_16(1083);
+emit_16(1147);
+emit_16(1082);
+emit_16(1147);
+emit_16(1083);
+emit_16(1148);
+emit_16(1084);
+emit_16(1148);
+emit_16(1083);
+emit_16(1148);
+emit_16(1084);
+emit_16(1149);
+emit_16(1085);
+emit_16(1149);
+emit_16(1084);
+emit_16(1149);
+emit_16(1085);
+emit_16(1150);
+emit_16(1086);
+emit_16(1150);
+emit_16(1085);
+emit_16(1150);
+emit_16(1086);
+emit_16(1151);
+emit_16(1087);
+emit_16(1151);
+emit_16(1086);
+emit_16(1152);
+emit_16(1088);
+emit_16(1153);
+emit_16(1089);
+emit_16(1153);
+emit_16(1088);
+emit_16(1153);
+emit_16(1089);
+emit_16(1154);
+emit_16(1090);
+emit_16(1154);
+emit_16(1089);
+emit_16(1154);
+emit_16(1090);
+emit_16(1155);
+emit_16(1091);
+emit_16(1155);
+emit_16(1090);
+emit_16(1155);
+emit_16(1091);
+emit_16(1156);
+emit_16(1092);
+emit_16(1156);
+emit_16(1091);
+emit_16(1156);
+emit_16(1092);
+emit_16(1157);
+emit_16(1093);
+emit_16(1157);
+emit_16(1092);
+emit_16(1157);
+emit_16(1093);
+emit_16(1158);
+emit_16(1094);
+emit_16(1158);
+emit_16(1093);
+emit_16(1158);
+emit_16(1094);
+emit_16(1159);
+emit_16(1095);
+emit_16(1159);
+emit_16(1094);
+emit_16(1159);
+emit_16(1095);
+emit_16(1160);
+emit_16(1096);
+emit_16(1160);
+emit_16(1095);
+emit_16(1160);
+emit_16(1096);
+emit_16(1161);
+emit_16(1097);
+emit_16(1161);
+emit_16(1096);
+emit_16(1161);
+emit_16(1097);
+emit_16(1162);
+emit_16(1098);
+emit_16(1162);
+emit_16(1097);
+emit_16(1162);
+emit_16(1098);
+emit_16(1163);
+emit_16(1099);
+emit_16(1163);
+emit_16(1098);
+emit_16(1163);
+emit_16(1099);
+emit_16(1164);
+emit_16(1100);
+emit_16(1164);
+emit_16(1099);
+emit_16(1164);
+emit_16(1100);
+emit_16(1165);
+emit_16(1101);
+emit_16(1165);
+emit_16(1100);
+emit_16(1165);
+emit_16(1101);
+emit_16(1166);
+emit_16(1102);
+emit_16(1166);
+emit_16(1101);
+emit_16(1166);
+emit_16(1102);
+emit_16(1167);
+emit_16(1103);
+emit_16(1167);
+emit_16(1102);
+emit_16(1167);
+emit_16(1103);
+emit_16(1168);
+emit_16(1104);
+emit_16(1168);
+emit_16(1103);
+emit_16(1168);
+emit_16(1104);
+emit_16(1169);
+emit_16(1105);
+emit_16(1169);
+emit_16(1104);
+emit_16(1169);
+emit_16(1105);
+emit_16(1170);
+emit_16(1106);
+emit_16(1170);
+emit_16(1105);
+emit_16(1170);
+emit_16(1106);
+emit_16(1171);
+emit_16(1107);
+emit_16(1171);
+emit_16(1106);
+emit_16(1171);
+emit_16(1107);
+emit_16(1172);
+emit_16(1108);
+emit_16(1172);
+emit_16(1107);
+emit_16(1172);
+emit_16(1108);
+emit_16(1173);
+emit_16(1109);
+emit_16(1173);
+emit_16(1108);
+emit_16(1173);
+emit_16(1109);
+emit_16(1174);
+emit_16(1110);
+emit_16(1174);
+emit_16(1109);
+emit_16(1174);
+emit_16(1110);
+emit_16(1175);
+emit_16(1111);
+emit_16(1175);
+emit_16(1110);
+emit_16(1175);
+emit_16(1111);
+emit_16(1176);
+emit_16(1112);
+emit_16(1176);
+emit_16(1111);
+emit_16(1176);
+emit_16(1112);
+emit_16(1177);
+emit_16(1113);
+emit_16(1177);
+emit_16(1112);
+emit_16(1177);
+emit_16(1113);
+emit_16(1178);
+emit_16(1114);
+emit_16(1178);
+emit_16(1113);
+emit_16(1178);
+emit_16(1114);
+emit_16(1179);
+emit_16(1115);
+emit_16(1179);
+emit_16(1114);
+emit_16(1179);
+emit_16(1115);
+emit_16(1180);
+emit_16(1116);
+emit_16(1180);
+emit_16(1115);
+emit_16(1180);
+emit_16(1116);
+emit_16(1181);
+emit_16(1117);
+emit_16(1181);
+emit_16(1116);
+emit_16(1181);
+emit_16(1117);
+emit_16(1182);
+emit_16(1118);
+emit_16(1182);
+emit_16(1117);
+emit_16(1182);
+emit_16(1118);
+emit_16(1183);
+emit_16(1119);
+emit_16(1183);
+emit_16(1118);
+emit_16(1183);
+emit_16(1119);
+emit_16(1184);
+emit_16(1120);
+emit_16(1184);
+emit_16(1119);
+emit_16(1184);
+emit_16(1120);
+emit_16(1185);
+emit_16(1121);
+emit_16(1185);
+emit_16(1120);
+emit_16(1185);
+emit_16(1121);
+emit_16(1186);
+emit_16(1122);
+emit_16(1186);
+emit_16(1121);
+emit_16(1186);
+emit_16(1122);
+emit_16(1187);
+emit_16(1123);
+emit_16(1187);
+emit_16(1122);
+emit_16(1187);
+emit_16(1123);
+emit_16(1188);
+emit_16(1124);
+emit_16(1188);
+emit_16(1123);
+emit_16(1188);
+emit_16(1124);
+emit_16(1189);
+emit_16(1125);
+emit_16(1189);
+emit_16(1124);
+emit_16(1189);
+emit_16(1125);
+emit_16(1190);
+emit_16(1126);
+emit_16(1190);
+emit_16(1125);
+emit_16(1190);
+emit_16(1126);
+emit_16(1191);
+emit_16(1127);
+emit_16(1191);
+emit_16(1126);
+emit_16(1191);
+emit_16(1127);
+emit_16(1192);
+emit_16(1128);
+emit_16(1192);
+emit_16(1127);
+emit_16(1192);
+emit_16(1128);
+emit_16(1193);
+emit_16(1129);
+emit_16(1193);
+emit_16(1128);
+emit_16(1193);
+emit_16(1129);
+emit_16(1194);
+emit_16(1130);
+emit_16(1194);
+emit_16(1129);
+emit_16(1194);
+emit_16(1130);
+emit_16(1195);
+emit_16(1131);
+emit_16(1195);
+emit_16(1130);
+emit_16(1195);
+emit_16(1131);
+emit_16(1196);
+emit_16(1132);
+emit_16(1196);
+emit_16(1131);
+emit_16(1196);
+emit_16(1132);
+emit_16(1197);
+emit_16(1133);
+emit_16(1197);
+emit_16(1132);
+emit_16(1197);
+emit_16(1133);
+emit_16(1198);
+emit_16(1134);
+emit_16(1198);
+emit_16(1133);
+emit_16(1198);
+emit_16(1134);
+emit_16(1199);
+emit_16(1135);
+emit_16(1199);
+emit_16(1134);
+emit_16(1199);
+emit_16(1135);
+emit_16(1200);
+emit_16(1136);
+emit_16(1200);
+emit_16(1135);
+emit_16(1200);
+emit_16(1136);
+emit_16(1201);
+emit_16(1137);
+emit_16(1201);
+emit_16(1136);
+emit_16(1201);
+emit_16(1137);
+emit_16(1202);
+emit_16(1138);
+emit_16(1202);
+emit_16(1137);
+emit_16(1202);
+emit_16(1138);
+emit_16(1203);
+emit_16(1139);
+emit_16(1203);
+emit_16(1138);
+emit_16(1203);
+emit_16(1139);
+emit_16(1204);
+emit_16(1140);
+emit_16(1204);
+emit_16(1139);
+emit_16(1204);
+emit_16(1140);
+emit_16(1205);
+emit_16(1141);
+emit_16(1205);
+emit_16(1140);
+emit_16(1205);
+emit_16(1141);
+emit_16(1206);
+emit_16(1142);
+emit_16(1206);
+emit_16(1141);
+emit_16(1206);
+emit_16(1142);
+emit_16(1207);
+emit_16(1143);
+emit_16(1207);
+emit_16(1142);
+emit_16(1207);
+emit_16(1143);
+emit_16(1208);
+emit_16(1144);
+emit_16(1208);
+emit_16(1143);
+emit_16(1208);
+emit_16(1144);
+emit_16(1209);
+emit_16(1145);
+emit_16(1209);
+emit_16(1144);
+emit_16(1209);
+emit_16(1145);
+emit_16(1210);
+emit_16(1146);
+emit_16(1210);
+emit_16(1145);
+emit_16(1210);
+emit_16(1146);
+emit_16(1211);
+emit_16(1147);
+emit_16(1211);
+emit_16(1146);
+emit_16(1211);
+emit_16(1147);
+emit_16(1212);
+emit_16(1148);
+emit_16(1212);
+emit_16(1147);
+emit_16(1212);
+emit_16(1148);
+emit_16(1213);
+emit_16(1149);
+emit_16(1213);
+emit_16(1148);
+emit_16(1213);
+emit_16(1149);
+emit_16(1214);
+emit_16(1150);
+emit_16(1214);
+emit_16(1149);
+emit_16(1214);
+emit_16(1150);
+emit_16(1215);
+emit_16(1151);
+emit_16(1215);
+emit_16(1150);
+emit_16(1216);
+emit_16(1152);
+emit_16(1217);
+emit_16(1153);
+emit_16(1217);
+emit_16(1152);
+emit_16(1217);
+emit_16(1153);
+emit_16(1218);
+emit_16(1154);
+emit_16(1218);
+emit_16(1153);
+emit_16(1218);
+emit_16(1154);
+emit_16(1219);
+emit_16(1155);
+emit_16(1219);
+emit_16(1154);
+emit_16(1219);
+emit_16(1155);
+emit_16(1220);
+emit_16(1156);
+emit_16(1220);
+emit_16(1155);
+emit_16(1220);
+emit_16(1156);
+emit_16(1221);
+emit_16(1157);
+emit_16(1221);
+emit_16(1156);
+emit_16(1221);
+emit_16(1157);
+emit_16(1222);
+emit_16(1158);
+emit_16(1222);
+emit_16(1157);
+emit_16(1222);
+emit_16(1158);
+emit_16(1223);
+emit_16(1159);
+emit_16(1223);
+emit_16(1158);
+emit_16(1223);
+emit_16(1159);
+emit_16(1224);
+emit_16(1160);
+emit_16(1224);
+emit_16(1159);
+emit_16(1224);
+emit_16(1160);
+emit_16(1225);
+emit_16(1161);
+emit_16(1225);
+emit_16(1160);
+emit_16(1225);
+emit_16(1161);
+emit_16(1226);
+emit_16(1162);
+emit_16(1226);
+emit_16(1161);
+emit_16(1226);
+emit_16(1162);
+emit_16(1227);
+emit_16(1163);
+emit_16(1227);
+emit_16(1162);
+emit_16(1227);
+emit_16(1163);
+emit_16(1228);
+emit_16(1164);
+emit_16(1228);
+emit_16(1163);
+emit_16(1228);
+emit_16(1164);
+emit_16(1229);
+emit_16(1165);
+emit_16(1229);
+emit_16(1164);
+emit_16(1229);
+emit_16(1165);
+emit_16(1230);
+emit_16(1166);
+emit_16(1230);
+emit_16(1165);
+emit_16(1230);
+emit_16(1166);
+emit_16(1231);
+emit_16(1167);
+emit_16(1231);
+emit_16(1166);
+emit_16(1231);
+emit_16(1167);
+emit_16(1232);
+emit_16(1168);
+emit_16(1232);
+emit_16(1167);
+emit_16(1232);
+emit_16(1168);
+emit_16(1233);
+emit_16(1169);
+emit_16(1233);
+emit_16(1168);
+emit_16(1233);
+emit_16(1169);
+emit_16(1234);
+emit_16(1170);
+emit_16(1234);
+emit_16(1169);
+emit_16(1234);
+emit_16(1170);
+emit_16(1235);
+emit_16(1171);
+emit_16(1235);
+emit_16(1170);
+emit_16(1235);
+emit_16(1171);
+emit_16(1236);
+emit_16(1172);
+emit_16(1236);
+emit_16(1171);
+emit_16(1236);
+emit_16(1172);
+emit_16(1237);
+emit_16(1173);
+emit_16(1237);
+emit_16(1172);
+emit_16(1237);
+emit_16(1173);
+emit_16(1238);
+emit_16(1174);
+emit_16(1238);
+emit_16(1173);
+emit_16(1238);
+emit_16(1174);
+emit_16(1239);
+emit_16(1175);
+emit_16(1239);
+emit_16(1174);
+emit_16(1239);
+emit_16(1175);
+emit_16(1240);
+emit_16(1176);
+emit_16(1240);
+emit_16(1175);
+emit_16(1240);
+emit_16(1176);
+emit_16(1241);
+emit_16(1177);
+emit_16(1241);
+emit_16(1176);
+emit_16(1241);
+emit_16(1177);
+emit_16(1242);
+emit_16(1178);
+emit_16(1242);
+emit_16(1177);
+emit_16(1242);
+emit_16(1178);
+emit_16(1243);
+emit_16(1179);
+emit_16(1243);
+emit_16(1178);
+emit_16(1243);
+emit_16(1179);
+emit_16(1244);
+emit_16(1180);
+emit_16(1244);
+emit_16(1179);
+emit_16(1244);
+emit_16(1180);
+emit_16(1245);
+emit_16(1181);
+emit_16(1245);
+emit_16(1180);
+emit_16(1245);
+emit_16(1181);
+emit_16(1246);
+emit_16(1182);
+emit_16(1246);
+emit_16(1181);
+emit_16(1246);
+emit_16(1182);
+emit_16(1247);
+emit_16(1183);
+emit_16(1247);
+emit_16(1182);
+emit_16(1247);
+emit_16(1183);
+emit_16(1248);
+emit_16(1184);
+emit_16(1248);
+emit_16(1183);
+emit_16(1248);
+emit_16(1184);
+emit_16(1249);
+emit_16(1185);
+emit_16(1249);
+emit_16(1184);
+emit_16(1249);
+emit_16(1185);
+emit_16(1250);
+emit_16(1186);
+emit_16(1250);
+emit_16(1185);
+emit_16(1250);
+emit_16(1186);
+emit_16(1251);
+emit_16(1187);
+emit_16(1251);
+emit_16(1186);
+emit_16(1251);
+emit_16(1187);
+emit_16(1252);
+emit_16(1188);
+emit_16(1252);
+emit_16(1187);
+emit_16(1252);
+emit_16(1188);
+emit_16(1253);
+emit_16(1189);
+emit_16(1253);
+emit_16(1188);
+emit_16(1253);
+emit_16(1189);
+emit_16(1254);
+emit_16(1190);
+emit_16(1254);
+emit_16(1189);
+emit_16(1254);
+emit_16(1190);
+emit_16(1255);
+emit_16(1191);
+emit_16(1255);
+emit_16(1190);
+emit_16(1255);
+emit_16(1191);
+emit_16(1256);
+emit_16(1192);
+emit_16(1256);
+emit_16(1191);
+emit_16(1256);
+emit_16(1192);
+emit_16(1257);
+emit_16(1193);
+emit_16(1257);
+emit_16(1192);
+emit_16(1257);
+emit_16(1193);
+emit_16(1258);
+emit_16(1194);
+emit_16(1258);
+emit_16(1193);
+emit_16(1258);
+emit_16(1194);
+emit_16(1259);
+emit_16(1195);
+emit_16(1259);
+emit_16(1194);
+emit_16(1259);
+emit_16(1195);
+emit_16(1260);
+emit_16(1196);
+emit_16(1260);
+emit_16(1195);
+emit_16(1260);
+emit_16(1196);
+emit_16(1261);
+emit_16(1197);
+emit_16(1261);
+emit_16(1196);
+emit_16(1261);
+emit_16(1197);
+emit_16(1262);
+emit_16(1198);
+emit_16(1262);
+emit_16(1197);
+emit_16(1262);
+emit_16(1198);
+emit_16(1263);
+emit_16(1199);
+emit_16(1263);
+emit_16(1198);
+emit_16(1263);
+emit_16(1199);
+emit_16(1264);
+emit_16(1200);
+emit_16(1264);
+emit_16(1199);
+emit_16(1264);
+emit_16(1200);
+emit_16(1265);
+emit_16(1201);
+emit_16(1265);
+emit_16(1200);
+emit_16(1265);
+emit_16(1201);
+emit_16(1266);
+emit_16(1202);
+emit_16(1266);
+emit_16(1201);
+emit_16(1266);
+emit_16(1202);
+emit_16(1267);
+emit_16(1203);
+emit_16(1267);
+emit_16(1202);
+emit_16(1267);
+emit_16(1203);
+emit_16(1268);
+emit_16(1204);
+emit_16(1268);
+emit_16(1203);
+emit_16(1268);
+emit_16(1204);
+emit_16(1269);
+emit_16(1205);
+emit_16(1269);
+emit_16(1204);
+emit_16(1269);
+emit_16(1205);
+emit_16(1270);
+emit_16(1206);
+emit_16(1270);
+emit_16(1205);
+emit_16(1270);
+emit_16(1206);
+emit_16(1271);
+emit_16(1207);
+emit_16(1271);
+emit_16(1206);
+emit_16(1271);
+emit_16(1207);
+emit_16(1272);
+emit_16(1208);
+emit_16(1272);
+emit_16(1207);
+emit_16(1272);
+emit_16(1208);
+emit_16(1273);
+emit_16(1209);
+emit_16(1273);
+emit_16(1208);
+emit_16(1273);
+emit_16(1209);
+emit_16(1274);
+emit_16(1210);
+emit_16(1274);
+emit_16(1209);
+emit_16(1274);
+emit_16(1210);
+emit_16(1275);
+emit_16(1211);
+emit_16(1275);
+emit_16(1210);
+emit_16(1275);
+emit_16(1211);
+emit_16(1276);
+emit_16(1212);
+emit_16(1276);
+emit_16(1211);
+emit_16(1276);
+emit_16(1212);
+emit_16(1277);
+emit_16(1213);
+emit_16(1277);
+emit_16(1212);
+emit_16(1277);
+emit_16(1213);
+emit_16(1278);
+emit_16(1214);
+emit_16(1278);
+emit_16(1213);
+emit_16(1278);
+emit_16(1214);
+emit_16(1279);
+emit_16(1215);
+emit_16(1279);
+emit_16(1214);
+emit_16(1280);
+emit_16(1216);
+emit_16(1281);
+emit_16(1217);
+emit_16(1281);
+emit_16(1216);
+emit_16(1281);
+emit_16(1217);
+emit_16(1282);
+emit_16(1218);
+emit_16(1282);
+emit_16(1217);
+emit_16(1282);
+emit_16(1218);
+emit_16(1283);
+emit_16(1219);
+emit_16(1283);
+emit_16(1218);
+emit_16(1283);
+emit_16(1219);
+emit_16(1284);
+emit_16(1220);
+emit_16(1284);
+emit_16(1219);
+emit_16(1284);
+emit_16(1220);
+emit_16(1285);
+emit_16(1221);
+emit_16(1285);
+emit_16(1220);
+emit_16(1285);
+emit_16(1221);
+emit_16(1286);
+emit_16(1222);
+emit_16(1286);
+emit_16(1221);
+emit_16(1286);
+emit_16(1222);
+emit_16(1287);
+emit_16(1223);
+emit_16(1287);
+emit_16(1222);
+emit_16(1287);
+emit_16(1223);
+emit_16(1288);
+emit_16(1224);
+emit_16(1288);
+emit_16(1223);
+emit_16(1288);
+emit_16(1224);
+emit_16(1289);
+emit_16(1225);
+emit_16(1289);
+emit_16(1224);
+emit_16(1289);
+emit_16(1225);
+emit_16(1290);
+emit_16(1226);
+emit_16(1290);
+emit_16(1225);
+emit_16(1290);
+emit_16(1226);
+emit_16(1291);
+emit_16(1227);
+emit_16(1291);
+emit_16(1226);
+emit_16(1291);
+emit_16(1227);
+emit_16(1292);
+emit_16(1228);
+emit_16(1292);
+emit_16(1227);
+emit_16(1292);
+emit_16(1228);
+emit_16(1293);
+emit_16(1229);
+emit_16(1293);
+emit_16(1228);
+emit_16(1293);
+emit_16(1229);
+emit_16(1294);
+emit_16(1230);
+emit_16(1294);
+emit_16(1229);
+emit_16(1294);
+emit_16(1230);
+emit_16(1295);
+emit_16(1231);
+emit_16(1295);
+emit_16(1230);
+emit_16(1295);
+emit_16(1231);
+emit_16(1296);
+emit_16(1232);
+emit_16(1296);
+emit_16(1231);
+emit_16(1296);
+emit_16(1232);
+emit_16(1297);
+emit_16(1233);
+emit_16(1297);
+emit_16(1232);
+emit_16(1297);
+emit_16(1233);
+emit_16(1298);
+emit_16(1234);
+emit_16(1298);
+emit_16(1233);
+emit_16(1298);
+emit_16(1234);
+emit_16(1299);
+emit_16(1235);
+emit_16(1299);
+emit_16(1234);
+emit_16(1299);
+emit_16(1235);
+emit_16(1300);
+emit_16(1236);
+emit_16(1300);
+emit_16(1235);
+emit_16(1300);
+emit_16(1236);
+emit_16(1301);
+emit_16(1237);
+emit_16(1301);
+emit_16(1236);
+emit_16(1301);
+emit_16(1237);
+emit_16(1302);
+emit_16(1238);
+emit_16(1302);
+emit_16(1237);
+emit_16(1302);
+emit_16(1238);
+emit_16(1303);
+emit_16(1239);
+emit_16(1303);
+emit_16(1238);
+emit_16(1303);
+emit_16(1239);
+emit_16(1304);
+emit_16(1240);
+emit_16(1304);
+emit_16(1239);
+emit_16(1304);
+emit_16(1240);
+emit_16(1305);
+emit_16(1241);
+emit_16(1305);
+emit_16(1240);
+emit_16(1305);
+emit_16(1241);
+emit_16(1306);
+emit_16(1242);
+emit_16(1306);
+emit_16(1241);
+emit_16(1306);
+emit_16(1242);
+emit_16(1307);
+emit_16(1243);
+emit_16(1307);
+emit_16(1242);
+emit_16(1307);
+emit_16(1243);
+emit_16(1308);
+emit_16(1244);
+emit_16(1308);
+emit_16(1243);
+emit_16(1308);
+emit_16(1244);
+emit_16(1309);
+emit_16(1245);
+emit_16(1309);
+emit_16(1244);
+emit_16(1309);
+emit_16(1245);
+emit_16(1310);
+emit_16(1246);
+emit_16(1310);
+emit_16(1245);
+emit_16(1310);
+emit_16(1246);
+emit_16(1311);
+emit_16(1247);
+emit_16(1311);
+emit_16(1246);
+emit_16(1311);
+emit_16(1247);
+emit_16(1312);
+emit_16(1248);
+emit_16(1312);
+emit_16(1247);
+emit_16(1312);
+emit_16(1248);
+emit_16(1313);
+emit_16(1249);
+emit_16(1313);
+emit_16(1248);
+emit_16(1313);
+emit_16(1249);
+emit_16(1314);
+emit_16(1250);
+emit_16(1314);
+emit_16(1249);
+emit_16(1314);
+emit_16(1250);
+emit_16(1315);
+emit_16(1251);
+emit_16(1315);
+emit_16(1250);
+emit_16(1315);
+emit_16(1251);
+emit_16(1316);
+emit_16(1252);
+emit_16(1316);
+emit_16(1251);
+emit_16(1316);
+emit_16(1252);
+emit_16(1317);
+emit_16(1253);
+emit_16(1317);
+emit_16(1252);
+emit_16(1317);
+emit_16(1253);
+emit_16(1318);
+emit_16(1254);
+emit_16(1318);
+emit_16(1253);
+emit_16(1318);
+emit_16(1254);
+emit_16(1319);
+emit_16(1255);
+emit_16(1319);
+emit_16(1254);
+emit_16(1319);
+emit_16(1255);
+emit_16(1320);
+emit_16(1256);
+emit_16(1320);
+emit_16(1255);
+emit_16(1320);
+emit_16(1256);
+emit_16(1321);
+emit_16(1257);
+emit_16(1321);
+emit_16(1256);
+emit_16(1321);
+emit_16(1257);
+emit_16(1322);
+emit_16(1258);
+emit_16(1322);
+emit_16(1257);
+emit_16(1322);
+emit_16(1258);
+emit_16(1323);
+emit_16(1259);
+emit_16(1323);
+emit_16(1258);
+emit_16(1323);
+emit_16(1259);
+emit_16(1324);
+emit_16(1260);
+emit_16(1324);
+emit_16(1259);
+emit_16(1324);
+emit_16(1260);
+emit_16(1325);
+emit_16(1261);
+emit_16(1325);
+emit_16(1260);
+emit_16(1325);
+emit_16(1261);
+emit_16(1326);
+emit_16(1262);
+emit_16(1326);
+emit_16(1261);
+emit_16(1326);
+emit_16(1262);
+emit_16(1327);
+emit_16(1263);
+emit_16(1327);
+emit_16(1262);
+emit_16(1327);
+emit_16(1263);
+emit_16(1328);
+emit_16(1264);
+emit_16(1328);
+emit_16(1263);
+emit_16(1328);
+emit_16(1264);
+emit_16(1329);
+emit_16(1265);
+emit_16(1329);
+emit_16(1264);
+emit_16(1329);
+emit_16(1265);
+emit_16(1330);
+emit_16(1266);
+emit_16(1330);
+emit_16(1265);
+emit_16(1330);
+emit_16(1266);
+emit_16(1331);
+emit_16(1267);
+emit_16(1331);
+emit_16(1266);
+emit_16(1331);
+emit_16(1267);
+emit_16(1332);
+emit_16(1268);
+emit_16(1332);
+emit_16(1267);
+emit_16(1332);
+emit_16(1268);
+emit_16(1333);
+emit_16(1269);
+emit_16(1333);
+emit_16(1268);
+emit_16(1333);
+emit_16(1269);
+emit_16(1334);
+emit_16(1270);
+emit_16(1334);
+emit_16(1269);
+emit_16(1334);
+emit_16(1270);
+emit_16(1335);
+emit_16(1271);
+emit_16(1335);
+emit_16(1270);
+emit_16(1335);
+emit_16(1271);
+emit_16(1336);
+emit_16(1272);
+emit_16(1336);
+emit_16(1271);
+emit_16(1336);
+emit_16(1272);
+emit_16(1337);
+emit_16(1273);
+emit_16(1337);
+emit_16(1272);
+emit_16(1337);
+emit_16(1273);
+emit_16(1338);
+emit_16(1274);
+emit_16(1338);
+emit_16(1273);
+emit_16(1338);
+emit_16(1274);
+emit_16(1339);
+emit_16(1275);
+emit_16(1339);
+emit_16(1274);
+emit_16(1339);
+emit_16(1275);
+emit_16(1340);
+emit_16(1276);
+emit_16(1340);
+emit_16(1275);
+emit_16(1340);
+emit_16(1276);
+emit_16(1341);
+emit_16(1277);
+emit_16(1341);
+emit_16(1276);
+emit_16(1341);
+emit_16(1277);
+emit_16(1342);
+emit_16(1278);
+emit_16(1342);
+emit_16(1277);
+emit_16(1342);
+emit_16(1278);
+emit_16(1343);
+emit_16(1279);
+emit_16(1343);
+emit_16(1278);
+emit_16(1344);
+emit_16(1280);
+emit_16(1345);
+emit_16(1281);
+emit_16(1345);
+emit_16(1280);
+emit_16(1345);
+emit_16(1281);
+emit_16(1346);
+emit_16(1282);
+emit_16(1346);
+emit_16(1281);
+emit_16(1346);
+emit_16(1282);
+emit_16(1347);
+emit_16(1283);
+emit_16(1347);
+emit_16(1282);
+emit_16(1347);
+emit_16(1283);
+emit_16(1348);
+emit_16(1284);
+emit_16(1348);
+emit_16(1283);
+emit_16(1348);
+emit_16(1284);
+emit_16(1349);
+emit_16(1285);
+emit_16(1349);
+emit_16(1284);
+emit_16(1349);
+emit_16(1285);
+emit_16(1350);
+emit_16(1286);
+emit_16(1350);
+emit_16(1285);
+emit_16(1350);
+emit_16(1286);
+emit_16(1351);
+emit_16(1287);
+emit_16(1351);
+emit_16(1286);
+emit_16(1351);
+emit_16(1287);
+emit_16(1352);
+emit_16(1288);
+emit_16(1352);
+emit_16(1287);
+emit_16(1352);
+emit_16(1288);
+emit_16(1353);
+emit_16(1289);
+emit_16(1353);
+emit_16(1288);
+emit_16(1353);
+emit_16(1289);
+emit_16(1354);
+emit_16(1290);
+emit_16(1354);
+emit_16(1289);
+emit_16(1354);
+emit_16(1290);
+emit_16(1355);
+emit_16(1291);
+emit_16(1355);
+emit_16(1290);
+emit_16(1355);
+emit_16(1291);
+emit_16(1356);
+emit_16(1292);
+emit_16(1356);
+emit_16(1291);
+emit_16(1356);
+emit_16(1292);
+emit_16(1357);
+emit_16(1293);
+emit_16(1357);
+emit_16(1292);
+emit_16(1357);
+emit_16(1293);
+emit_16(1358);
+emit_16(1294);
+emit_16(1358);
+emit_16(1293);
+emit_16(1358);
+emit_16(1294);
+emit_16(1359);
+emit_16(1295);
+emit_16(1359);
+emit_16(1294);
+emit_16(1359);
+emit_16(1295);
+emit_16(1360);
+emit_16(1296);
+emit_16(1360);
+emit_16(1295);
+emit_16(1360);
+emit_16(1296);
+emit_16(1361);
+emit_16(1297);
+emit_16(1361);
+emit_16(1296);
+emit_16(1361);
+emit_16(1297);
+emit_16(1362);
+emit_16(1298);
+emit_16(1362);
+emit_16(1297);
+emit_16(1362);
+emit_16(1298);
+emit_16(1363);
+emit_16(1299);
+emit_16(1363);
+emit_16(1298);
+emit_16(1363);
+emit_16(1299);
+emit_16(1364);
+emit_16(1300);
+emit_16(1364);
+emit_16(1299);
+emit_16(1364);
+emit_16(1300);
+emit_16(1365);
+emit_16(1301);
+emit_16(1365);
+emit_16(1300);
+emit_16(1365);
+emit_16(1301);
+emit_16(1366);
+emit_16(1302);
+emit_16(1366);
+emit_16(1301);
+emit_16(1366);
+emit_16(1302);
+emit_16(1367);
+emit_16(1303);
+emit_16(1367);
+emit_16(1302);
+emit_16(1367);
+emit_16(1303);
+emit_16(1368);
+emit_16(1304);
+emit_16(1368);
+emit_16(1303);
+emit_16(1368);
+emit_16(1304);
+emit_16(1369);
+emit_16(1305);
+emit_16(1369);
+emit_16(1304);
+emit_16(1369);
+emit_16(1305);
+emit_16(1370);
+emit_16(1306);
+emit_16(1370);
+emit_16(1305);
+emit_16(1370);
+emit_16(1306);
+emit_16(1371);
+emit_16(1307);
+emit_16(1371);
+emit_16(1306);
+emit_16(1371);
+emit_16(1307);
+emit_16(1372);
+emit_16(1308);
+emit_16(1372);
+emit_16(1307);
+emit_16(1372);
+emit_16(1308);
+emit_16(1373);
+emit_16(1309);
+emit_16(1373);
+emit_16(1308);
+emit_16(1373);
+emit_16(1309);
+emit_16(1374);
+emit_16(1310);
+emit_16(1374);
+emit_16(1309);
+emit_16(1374);
+emit_16(1310);
+emit_16(1375);
+emit_16(1311);
+emit_16(1375);
+emit_16(1310);
+emit_16(1375);
+emit_16(1311);
+emit_16(1376);
+emit_16(1312);
+emit_16(1376);
+emit_16(1311);
+emit_16(1376);
+emit_16(1312);
+emit_16(1377);
+emit_16(1313);
+emit_16(1377);
+emit_16(1312);
+emit_16(1377);
+emit_16(1313);
+emit_16(1378);
+emit_16(1314);
+emit_16(1378);
+emit_16(1313);
+emit_16(1378);
+emit_16(1314);
+emit_16(1379);
+emit_16(1315);
+emit_16(1379);
+emit_16(1314);
+emit_16(1379);
+emit_16(1315);
+emit_16(1380);
+emit_16(1316);
+emit_16(1380);
+emit_16(1315);
+emit_16(1380);
+emit_16(1316);
+emit_16(1381);
+emit_16(1317);
+emit_16(1381);
+emit_16(1316);
+emit_16(1381);
+emit_16(1317);
+emit_16(1382);
+emit_16(1318);
+emit_16(1382);
+emit_16(1317);
+emit_16(1382);
+emit_16(1318);
+emit_16(1383);
+emit_16(1319);
+emit_16(1383);
+emit_16(1318);
+emit_16(1383);
+emit_16(1319);
+emit_16(1384);
+emit_16(1320);
+emit_16(1384);
+emit_16(1319);
+emit_16(1384);
+emit_16(1320);
+emit_16(1385);
+emit_16(1321);
+emit_16(1385);
+emit_16(1320);
+emit_16(1385);
+emit_16(1321);
+emit_16(1386);
+emit_16(1322);
+emit_16(1386);
+emit_16(1321);
+emit_16(1386);
+emit_16(1322);
+emit_16(1387);
+emit_16(1323);
+emit_16(1387);
+emit_16(1322);
+emit_16(1387);
+emit_16(1323);
+emit_16(1388);
+emit_16(1324);
+emit_16(1388);
+emit_16(1323);
+emit_16(1388);
+emit_16(1324);
+emit_16(1389);
+emit_16(1325);
+emit_16(1389);
+emit_16(1324);
+emit_16(1389);
+emit_16(1325);
+emit_16(1390);
+emit_16(1326);
+emit_16(1390);
+emit_16(1325);
+emit_16(1390);
+emit_16(1326);
+emit_16(1391);
+emit_16(1327);
+emit_16(1391);
+emit_16(1326);
+emit_16(1391);
+emit_16(1327);
+emit_16(1392);
+emit_16(1328);
+emit_16(1392);
+emit_16(1327);
+emit_16(1392);
+emit_16(1328);
+emit_16(1393);
+emit_16(1329);
+emit_16(1393);
+emit_16(1328);
+emit_16(1393);
+emit_16(1329);
+emit_16(1394);
+emit_16(1330);
+emit_16(1394);
+emit_16(1329);
+emit_16(1394);
+emit_16(1330);
+emit_16(1395);
+emit_16(1331);
+emit_16(1395);
+emit_16(1330);
+emit_16(1395);
+emit_16(1331);
+emit_16(1396);
+emit_16(1332);
+emit_16(1396);
+emit_16(1331);
+emit_16(1396);
+emit_16(1332);
+emit_16(1397);
+emit_16(1333);
+emit_16(1397);
+emit_16(1332);
+emit_16(1397);
+emit_16(1333);
+emit_16(1398);
+emit_16(1334);
+emit_16(1398);
+emit_16(1333);
+emit_16(1398);
+emit_16(1334);
+emit_16(1399);
+emit_16(1335);
+emit_16(1399);
+emit_16(1334);
+emit_16(1399);
+emit_16(1335);
+emit_16(1400);
+emit_16(1336);
+emit_16(1400);
+emit_16(1335);
+emit_16(1400);
+emit_16(1336);
+emit_16(1401);
+emit_16(1337);
+emit_16(1401);
+emit_16(1336);
+emit_16(1401);
+emit_16(1337);
+emit_16(1402);
+emit_16(1338);
+emit_16(1402);
+emit_16(1337);
+emit_16(1402);
+emit_16(1338);
+emit_16(1403);
+emit_16(1339);
+emit_16(1403);
+emit_16(1338);
+emit_16(1403);
+emit_16(1339);
+emit_16(1404);
+emit_16(1340);
+emit_16(1404);
+emit_16(1339);
+emit_16(1404);
+emit_16(1340);
+emit_16(1405);
+emit_16(1341);
+emit_16(1405);
+emit_16(1340);
+emit_16(1405);
+emit_16(1341);
+emit_16(1406);
+emit_16(1342);
+emit_16(1406);
+emit_16(1341);
+emit_16(1406);
+emit_16(1342);
+emit_16(1407);
+emit_16(1343);
+emit_16(1407);
+emit_16(1342);
+emit_16(1408);
+emit_16(1344);
+emit_16(1409);
+emit_16(1345);
+emit_16(1409);
+emit_16(1344);
+emit_16(1409);
+emit_16(1345);
+emit_16(1410);
+emit_16(1346);
+emit_16(1410);
+emit_16(1345);
+emit_16(1410);
+emit_16(1346);
+emit_16(1411);
+emit_16(1347);
+emit_16(1411);
+emit_16(1346);
+emit_16(1411);
+emit_16(1347);
+emit_16(1412);
+emit_16(1348);
+emit_16(1412);
+emit_16(1347);
+emit_16(1412);
+emit_16(1348);
+emit_16(1413);
+emit_16(1349);
+emit_16(1413);
+emit_16(1348);
+emit_16(1413);
+emit_16(1349);
+emit_16(1414);
+emit_16(1350);
+emit_16(1414);
+emit_16(1349);
+emit_16(1414);
+emit_16(1350);
+emit_16(1415);
+emit_16(1351);
+emit_16(1415);
+emit_16(1350);
+emit_16(1415);
+emit_16(1351);
+emit_16(1416);
+emit_16(1352);
+emit_16(1416);
+emit_16(1351);
+emit_16(1416);
+emit_16(1352);
+emit_16(1417);
+emit_16(1353);
+emit_16(1417);
+emit_16(1352);
+emit_16(1417);
+emit_16(1353);
+emit_16(1418);
+emit_16(1354);
+emit_16(1418);
+emit_16(1353);
+emit_16(1418);
+emit_16(1354);
+emit_16(1419);
+emit_16(1355);
+emit_16(1419);
+emit_16(1354);
+emit_16(1419);
+emit_16(1355);
+emit_16(1420);
+emit_16(1356);
+emit_16(1420);
+emit_16(1355);
+emit_16(1420);
+emit_16(1356);
+emit_16(1421);
+emit_16(1357);
+emit_16(1421);
+emit_16(1356);
+emit_16(1421);
+emit_16(1357);
+emit_16(1422);
+emit_16(1358);
+emit_16(1422);
+emit_16(1357);
+emit_16(1422);
+emit_16(1358);
+emit_16(1423);
+emit_16(1359);
+emit_16(1423);
+emit_16(1358);
+emit_16(1423);
+emit_16(1359);
+emit_16(1424);
+emit_16(1360);
+emit_16(1424);
+emit_16(1359);
+emit_16(1424);
+emit_16(1360);
+emit_16(1425);
+emit_16(1361);
+emit_16(1425);
+emit_16(1360);
+emit_16(1425);
+emit_16(1361);
+emit_16(1426);
+emit_16(1362);
+emit_16(1426);
+emit_16(1361);
+emit_16(1426);
+emit_16(1362);
+emit_16(1427);
+emit_16(1363);
+emit_16(1427);
+emit_16(1362);
+emit_16(1427);
+emit_16(1363);
+emit_16(1428);
+emit_16(1364);
+emit_16(1428);
+emit_16(1363);
+emit_16(1428);
+emit_16(1364);
+emit_16(1429);
+emit_16(1365);
+emit_16(1429);
+emit_16(1364);
+emit_16(1429);
+emit_16(1365);
+emit_16(1430);
+emit_16(1366);
+emit_16(1430);
+emit_16(1365);
+emit_16(1430);
+emit_16(1366);
+emit_16(1431);
+emit_16(1367);
+emit_16(1431);
+emit_16(1366);
+emit_16(1431);
+emit_16(1367);
+emit_16(1432);
+emit_16(1368);
+emit_16(1432);
+emit_16(1367);
+emit_16(1432);
+emit_16(1368);
+emit_16(1433);
+emit_16(1369);
+emit_16(1433);
+emit_16(1368);
+emit_16(1433);
+emit_16(1369);
+emit_16(1434);
+emit_16(1370);
+emit_16(1434);
+emit_16(1369);
+emit_16(1434);
+emit_16(1370);
+emit_16(1435);
+emit_16(1371);
+emit_16(1435);
+emit_16(1370);
+emit_16(1435);
+emit_16(1371);
+emit_16(1436);
+emit_16(1372);
+emit_16(1436);
+emit_16(1371);
+emit_16(1436);
+emit_16(1372);
+emit_16(1437);
+emit_16(1373);
+emit_16(1437);
+emit_16(1372);
+emit_16(1437);
+emit_16(1373);
+emit_16(1438);
+emit_16(1374);
+emit_16(1438);
+emit_16(1373);
+emit_16(1438);
+emit_16(1374);
+emit_16(1439);
+emit_16(1375);
+emit_16(1439);
+emit_16(1374);
+emit_16(1439);
+emit_16(1375);
+emit_16(1440);
+emit_16(1376);
+emit_16(1440);
+emit_16(1375);
+emit_16(1440);
+emit_16(1376);
+emit_16(1441);
+emit_16(1377);
+emit_16(1441);
+emit_16(1376);
+emit_16(1441);
+emit_16(1377);
+emit_16(1442);
+emit_16(1378);
+emit_16(1442);
+emit_16(1377);
+emit_16(1442);
+emit_16(1378);
+emit_16(1443);
+emit_16(1379);
+emit_16(1443);
+emit_16(1378);
+emit_16(1443);
+emit_16(1379);
+emit_16(1444);
+emit_16(1380);
+emit_16(1444);
+emit_16(1379);
+emit_16(1444);
+emit_16(1380);
+emit_16(1445);
+emit_16(1381);
+emit_16(1445);
+emit_16(1380);
+emit_16(1445);
+emit_16(1381);
+emit_16(1446);
+emit_16(1382);
+emit_16(1446);
+emit_16(1381);
+emit_16(1446);
+emit_16(1382);
+emit_16(1447);
+emit_16(1383);
+emit_16(1447);
+emit_16(1382);
+emit_16(1447);
+emit_16(1383);
+emit_16(1448);
+emit_16(1384);
+emit_16(1448);
+emit_16(1383);
+emit_16(1448);
+emit_16(1384);
+emit_16(1449);
+emit_16(1385);
+emit_16(1449);
+emit_16(1384);
+emit_16(1449);
+emit_16(1385);
+emit_16(1450);
+emit_16(1386);
+emit_16(1450);
+emit_16(1385);
+emit_16(1450);
+emit_16(1386);
+emit_16(1451);
+emit_16(1387);
+emit_16(1451);
+emit_16(1386);
+emit_16(1451);
+emit_16(1387);
+emit_16(1452);
+emit_16(1388);
+emit_16(1452);
+emit_16(1387);
+emit_16(1452);
+emit_16(1388);
+emit_16(1453);
+emit_16(1389);
+emit_16(1453);
+emit_16(1388);
+emit_16(1453);
+emit_16(1389);
+emit_16(1454);
+emit_16(1390);
+emit_16(1454);
+emit_16(1389);
+emit_16(1454);
+emit_16(1390);
+emit_16(1455);
+emit_16(1391);
+emit_16(1455);
+emit_16(1390);
+emit_16(1455);
+emit_16(1391);
+emit_16(1456);
+emit_16(1392);
+emit_16(1456);
+emit_16(1391);
+emit_16(1456);
+emit_16(1392);
+emit_16(1457);
+emit_16(1393);
+emit_16(1457);
+emit_16(1392);
+emit_16(1457);
+emit_16(1393);
+emit_16(1458);
+emit_16(1394);
+emit_16(1458);
+emit_16(1393);
+emit_16(1458);
+emit_16(1394);
+emit_16(1459);
+emit_16(1395);
+emit_16(1459);
+emit_16(1394);
+emit_16(1459);
+emit_16(1395);
+emit_16(1460);
+emit_16(1396);
+emit_16(1460);
+emit_16(1395);
+emit_16(1460);
+emit_16(1396);
+emit_16(1461);
+emit_16(1397);
+emit_16(1461);
+emit_16(1396);
+emit_16(1461);
+emit_16(1397);
+emit_16(1462);
+emit_16(1398);
+emit_16(1462);
+emit_16(1397);
+emit_16(1462);
+emit_16(1398);
+emit_16(1463);
+emit_16(1399);
+emit_16(1463);
+emit_16(1398);
+emit_16(1463);
+emit_16(1399);
+emit_16(1464);
+emit_16(1400);
+emit_16(1464);
+emit_16(1399);
+emit_16(1464);
+emit_16(1400);
+emit_16(1465);
+emit_16(1401);
+emit_16(1465);
+emit_16(1400);
+emit_16(1465);
+emit_16(1401);
+emit_16(1466);
+emit_16(1402);
+emit_16(1466);
+emit_16(1401);
+emit_16(1466);
+emit_16(1402);
+emit_16(1467);
+emit_16(1403);
+emit_16(1467);
+emit_16(1402);
+emit_16(1467);
+emit_16(1403);
+emit_16(1468);
+emit_16(1404);
+emit_16(1468);
+emit_16(1403);
+emit_16(1468);
+emit_16(1404);
+emit_16(1469);
+emit_16(1405);
+emit_16(1469);
+emit_16(1404);
+emit_16(1469);
+emit_16(1405);
+emit_16(1470);
+emit_16(1406);
+emit_16(1470);
+emit_16(1405);
+emit_16(1470);
+emit_16(1406);
+emit_16(1471);
+emit_16(1407);
+emit_16(1471);
+emit_16(1406);
+emit_16(1472);
+emit_16(1408);
+emit_16(1473);
+emit_16(1409);
+emit_16(1473);
+emit_16(1408);
+emit_16(1473);
+emit_16(1409);
+emit_16(1474);
+emit_16(1410);
+emit_16(1474);
+emit_16(1409);
+emit_16(1474);
+emit_16(1410);
+emit_16(1475);
+emit_16(1411);
+emit_16(1475);
+emit_16(1410);
+emit_16(1475);
+emit_16(1411);
+emit_16(1476);
+emit_16(1412);
+emit_16(1476);
+emit_16(1411);
+emit_16(1476);
+emit_16(1412);
+emit_16(1477);
+emit_16(1413);
+emit_16(1477);
+emit_16(1412);
+emit_16(1477);
+emit_16(1413);
+emit_16(1478);
+emit_16(1414);
+emit_16(1478);
+emit_16(1413);
+emit_16(1478);
+emit_16(1414);
+emit_16(1479);
+emit_16(1415);
+emit_16(1479);
+emit_16(1414);
+emit_16(1479);
+emit_16(1415);
+emit_16(1480);
+emit_16(1416);
+emit_16(1480);
+emit_16(1415);
+emit_16(1480);
+emit_16(1416);
+emit_16(1481);
+emit_16(1417);
+emit_16(1481);
+emit_16(1416);
+emit_16(1481);
+emit_16(1417);
+emit_16(1482);
+emit_16(1418);
+emit_16(1482);
+emit_16(1417);
+emit_16(1482);
+emit_16(1418);
+emit_16(1483);
+emit_16(1419);
+emit_16(1483);
+emit_16(1418);
+emit_16(1483);
+emit_16(1419);
+emit_16(1484);
+emit_16(1420);
+emit_16(1484);
+emit_16(1419);
+emit_16(1484);
+emit_16(1420);
+emit_16(1485);
+emit_16(1421);
+emit_16(1485);
+emit_16(1420);
+emit_16(1485);
+emit_16(1421);
+emit_16(1486);
+emit_16(1422);
+emit_16(1486);
+emit_16(1421);
+emit_16(1486);
+emit_16(1422);
+emit_16(1487);
+emit_16(1423);
+emit_16(1487);
+emit_16(1422);
+emit_16(1487);
+emit_16(1423);
+emit_16(1488);
+emit_16(1424);
+emit_16(1488);
+emit_16(1423);
+emit_16(1488);
+emit_16(1424);
+emit_16(1489);
+emit_16(1425);
+emit_16(1489);
+emit_16(1424);
+emit_16(1489);
+emit_16(1425);
+emit_16(1490);
+emit_16(1426);
+emit_16(1490);
+emit_16(1425);
+emit_16(1490);
+emit_16(1426);
+emit_16(1491);
+emit_16(1427);
+emit_16(1491);
+emit_16(1426);
+emit_16(1491);
+emit_16(1427);
+emit_16(1492);
+emit_16(1428);
+emit_16(1492);
+emit_16(1427);
+emit_16(1492);
+emit_16(1428);
+emit_16(1493);
+emit_16(1429);
+emit_16(1493);
+emit_16(1428);
+emit_16(1493);
+emit_16(1429);
+emit_16(1494);
+emit_16(1430);
+emit_16(1494);
+emit_16(1429);
+emit_16(1494);
+emit_16(1430);
+emit_16(1495);
+emit_16(1431);
+emit_16(1495);
+emit_16(1430);
+emit_16(1495);
+emit_16(1431);
+emit_16(1496);
+emit_16(1432);
+emit_16(1496);
+emit_16(1431);
+emit_16(1496);
+emit_16(1432);
+emit_16(1497);
+emit_16(1433);
+emit_16(1497);
+emit_16(1432);
+emit_16(1497);
+emit_16(1433);
+emit_16(1498);
+emit_16(1434);
+emit_16(1498);
+emit_16(1433);
+emit_16(1498);
+emit_16(1434);
+emit_16(1499);
+emit_16(1435);
+emit_16(1499);
+emit_16(1434);
+emit_16(1499);
+emit_16(1435);
+emit_16(1500);
+emit_16(1436);
+emit_16(1500);
+emit_16(1435);
+emit_16(1500);
+emit_16(1436);
+emit_16(1501);
+emit_16(1437);
+emit_16(1501);
+emit_16(1436);
+emit_16(1501);
+emit_16(1437);
+emit_16(1502);
+emit_16(1438);
+emit_16(1502);
+emit_16(1437);
+emit_16(1502);
+emit_16(1438);
+emit_16(1503);
+emit_16(1439);
+emit_16(1503);
+emit_16(1438);
+emit_16(1503);
+emit_16(1439);
+emit_16(1504);
+emit_16(1440);
+emit_16(1504);
+emit_16(1439);
+emit_16(1504);
+emit_16(1440);
+emit_16(1505);
+emit_16(1441);
+emit_16(1505);
+emit_16(1440);
+emit_16(1505);
+emit_16(1441);
+emit_16(1506);
+emit_16(1442);
+emit_16(1506);
+emit_16(1441);
+emit_16(1506);
+emit_16(1442);
+emit_16(1507);
+emit_16(1443);
+emit_16(1507);
+emit_16(1442);
+emit_16(1507);
+emit_16(1443);
+emit_16(1508);
+emit_16(1444);
+emit_16(1508);
+emit_16(1443);
+emit_16(1508);
+emit_16(1444);
+emit_16(1509);
+emit_16(1445);
+emit_16(1509);
+emit_16(1444);
+emit_16(1509);
+emit_16(1445);
+emit_16(1510);
+emit_16(1446);
+emit_16(1510);
+emit_16(1445);
+emit_16(1510);
+emit_16(1446);
+emit_16(1511);
+emit_16(1447);
+emit_16(1511);
+emit_16(1446);
+emit_16(1511);
+emit_16(1447);
+emit_16(1512);
+emit_16(1448);
+emit_16(1512);
+emit_16(1447);
+emit_16(1512);
+emit_16(1448);
+emit_16(1513);
+emit_16(1449);
+emit_16(1513);
+emit_16(1448);
+emit_16(1513);
+emit_16(1449);
+emit_16(1514);
+emit_16(1450);
+emit_16(1514);
+emit_16(1449);
+emit_16(1514);
+emit_16(1450);
+emit_16(1515);
+emit_16(1451);
+emit_16(1515);
+emit_16(1450);
+emit_16(1515);
+emit_16(1451);
+emit_16(1516);
+emit_16(1452);
+emit_16(1516);
+emit_16(1451);
+emit_16(1516);
+emit_16(1452);
+emit_16(1517);
+emit_16(1453);
+emit_16(1517);
+emit_16(1452);
+emit_16(1517);
+emit_16(1453);
+emit_16(1518);
+emit_16(1454);
+emit_16(1518);
+emit_16(1453);
+emit_16(1518);
+emit_16(1454);
+emit_16(1519);
+emit_16(1455);
+emit_16(1519);
+emit_16(1454);
+emit_16(1519);
+emit_16(1455);
+emit_16(1520);
+emit_16(1456);
+emit_16(1520);
+emit_16(1455);
+emit_16(1520);
+emit_16(1456);
+emit_16(1521);
+emit_16(1457);
+emit_16(1521);
+emit_16(1456);
+emit_16(1521);
+emit_16(1457);
+emit_16(1522);
+emit_16(1458);
+emit_16(1522);
+emit_16(1457);
+emit_16(1522);
+emit_16(1458);
+emit_16(1523);
+emit_16(1459);
+emit_16(1523);
+emit_16(1458);
+emit_16(1523);
+emit_16(1459);
+emit_16(1524);
+emit_16(1460);
+emit_16(1524);
+emit_16(1459);
+emit_16(1524);
+emit_16(1460);
+emit_16(1525);
+emit_16(1461);
+emit_16(1525);
+emit_16(1460);
+emit_16(1525);
+emit_16(1461);
+emit_16(1526);
+emit_16(1462);
+emit_16(1526);
+emit_16(1461);
+emit_16(1526);
+emit_16(1462);
+emit_16(1527);
+emit_16(1463);
+emit_16(1527);
+emit_16(1462);
+emit_16(1527);
+emit_16(1463);
+emit_16(1528);
+emit_16(1464);
+emit_16(1528);
+emit_16(1463);
+emit_16(1528);
+emit_16(1464);
+emit_16(1529);
+emit_16(1465);
+emit_16(1529);
+emit_16(1464);
+emit_16(1529);
+emit_16(1465);
+emit_16(1530);
+emit_16(1466);
+emit_16(1530);
+emit_16(1465);
+emit_16(1530);
+emit_16(1466);
+emit_16(1531);
+emit_16(1467);
+emit_16(1531);
+emit_16(1466);
+emit_16(1531);
+emit_16(1467);
+emit_16(1532);
+emit_16(1468);
+emit_16(1532);
+emit_16(1467);
+emit_16(1532);
+emit_16(1468);
+emit_16(1533);
+emit_16(1469);
+emit_16(1533);
+emit_16(1468);
+emit_16(1533);
+emit_16(1469);
+emit_16(1534);
+emit_16(1470);
+emit_16(1534);
+emit_16(1469);
+emit_16(1534);
+emit_16(1470);
+emit_16(1535);
+emit_16(1471);
+emit_16(1535);
+emit_16(1470);
+emit_16(1536);
+emit_16(1472);
+emit_16(1537);
+emit_16(1473);
+emit_16(1537);
+emit_16(1472);
+emit_16(1537);
+emit_16(1473);
+emit_16(1538);
+emit_16(1474);
+emit_16(1538);
+emit_16(1473);
+emit_16(1538);
+emit_16(1474);
+emit_16(1539);
+emit_16(1475);
+emit_16(1539);
+emit_16(1474);
+emit_16(1539);
+emit_16(1475);
+emit_16(1540);
+emit_16(1476);
+emit_16(1540);
+emit_16(1475);
+emit_16(1540);
+emit_16(1476);
+emit_16(1541);
+emit_16(1477);
+emit_16(1541);
+emit_16(1476);
+emit_16(1541);
+emit_16(1477);
+emit_16(1542);
+emit_16(1478);
+emit_16(1542);
+emit_16(1477);
+emit_16(1542);
+emit_16(1478);
+emit_16(1543);
+emit_16(1479);
+emit_16(1543);
+emit_16(1478);
+emit_16(1543);
+emit_16(1479);
+emit_16(1544);
+emit_16(1480);
+emit_16(1544);
+emit_16(1479);
+emit_16(1544);
+emit_16(1480);
+emit_16(1545);
+emit_16(1481);
+emit_16(1545);
+emit_16(1480);
+emit_16(1545);
+emit_16(1481);
+emit_16(1546);
+emit_16(1482);
+emit_16(1546);
+emit_16(1481);
+emit_16(1546);
+emit_16(1482);
+emit_16(1547);
+emit_16(1483);
+emit_16(1547);
+emit_16(1482);
+emit_16(1547);
+emit_16(1483);
+emit_16(1548);
+emit_16(1484);
+emit_16(1548);
+emit_16(1483);
+emit_16(1548);
+emit_16(1484);
+emit_16(1549);
+emit_16(1485);
+emit_16(1549);
+emit_16(1484);
+emit_16(1549);
+emit_16(1485);
+emit_16(1550);
+emit_16(1486);
+emit_16(1550);
+emit_16(1485);
+emit_16(1550);
+emit_16(1486);
+emit_16(1551);
+emit_16(1487);
+emit_16(1551);
+emit_16(1486);
+emit_16(1551);
+emit_16(1487);
+emit_16(1552);
+emit_16(1488);
+emit_16(1552);
+emit_16(1487);
+emit_16(1552);
+emit_16(1488);
+emit_16(1553);
+emit_16(1489);
+emit_16(1553);
+emit_16(1488);
+emit_16(1553);
+emit_16(1489);
+emit_16(1554);
+emit_16(1490);
+emit_16(1554);
+emit_16(1489);
+emit_16(1554);
+emit_16(1490);
+emit_16(1555);
+emit_16(1491);
+emit_16(1555);
+emit_16(1490);
+emit_16(1555);
+emit_16(1491);
+emit_16(1556);
+emit_16(1492);
+emit_16(1556);
+emit_16(1491);
+emit_16(1556);
+emit_16(1492);
+emit_16(1557);
+emit_16(1493);
+emit_16(1557);
+emit_16(1492);
+emit_16(1557);
+emit_16(1493);
+emit_16(1558);
+emit_16(1494);
+emit_16(1558);
+emit_16(1493);
+emit_16(1558);
+emit_16(1494);
+emit_16(1559);
+emit_16(1495);
+emit_16(1559);
+emit_16(1494);
+emit_16(1559);
+emit_16(1495);
+emit_16(1560);
+emit_16(1496);
+emit_16(1560);
+emit_16(1495);
+emit_16(1560);
+emit_16(1496);
+emit_16(1561);
+emit_16(1497);
+emit_16(1561);
+emit_16(1496);
+emit_16(1561);
+emit_16(1497);
+emit_16(1562);
+emit_16(1498);
+emit_16(1562);
+emit_16(1497);
+emit_16(1562);
+emit_16(1498);
+emit_16(1563);
+emit_16(1499);
+emit_16(1563);
+emit_16(1498);
+emit_16(1563);
+emit_16(1499);
+emit_16(1564);
+emit_16(1500);
+emit_16(1564);
+emit_16(1499);
+emit_16(1564);
+emit_16(1500);
+emit_16(1565);
+emit_16(1501);
+emit_16(1565);
+emit_16(1500);
+emit_16(1565);
+emit_16(1501);
+emit_16(1566);
+emit_16(1502);
+emit_16(1566);
+emit_16(1501);
+emit_16(1566);
+emit_16(1502);
+emit_16(1567);
+emit_16(1503);
+emit_16(1567);
+emit_16(1502);
+emit_16(1567);
+emit_16(1503);
+emit_16(1568);
+emit_16(1504);
+emit_16(1568);
+emit_16(1503);
+emit_16(1568);
+emit_16(1504);
+emit_16(1569);
+emit_16(1505);
+emit_16(1569);
+emit_16(1504);
+emit_16(1569);
+emit_16(1505);
+emit_16(1570);
+emit_16(1506);
+emit_16(1570);
+emit_16(1505);
+emit_16(1570);
+emit_16(1506);
+emit_16(1571);
+emit_16(1507);
+emit_16(1571);
+emit_16(1506);
+emit_16(1571);
+emit_16(1507);
+emit_16(1572);
+emit_16(1508);
+emit_16(1572);
+emit_16(1507);
+emit_16(1572);
+emit_16(1508);
+emit_16(1573);
+emit_16(1509);
+emit_16(1573);
+emit_16(1508);
+emit_16(1573);
+emit_16(1509);
+emit_16(1574);
+emit_16(1510);
+emit_16(1574);
+emit_16(1509);
+emit_16(1574);
+emit_16(1510);
+emit_16(1575);
+emit_16(1511);
+emit_16(1575);
+emit_16(1510);
+emit_16(1575);
+emit_16(1511);
+emit_16(1576);
+emit_16(1512);
+emit_16(1576);
+emit_16(1511);
+emit_16(1576);
+emit_16(1512);
+emit_16(1577);
+emit_16(1513);
+emit_16(1577);
+emit_16(1512);
+emit_16(1577);
+emit_16(1513);
+emit_16(1578);
+emit_16(1514);
+emit_16(1578);
+emit_16(1513);
+emit_16(1578);
+emit_16(1514);
+emit_16(1579);
+emit_16(1515);
+emit_16(1579);
+emit_16(1514);
+emit_16(1579);
+emit_16(1515);
+emit_16(1580);
+emit_16(1516);
+emit_16(1580);
+emit_16(1515);
+emit_16(1580);
+emit_16(1516);
+emit_16(1581);
+emit_16(1517);
+emit_16(1581);
+emit_16(1516);
+emit_16(1581);
+emit_16(1517);
+emit_16(1582);
+emit_16(1518);
+emit_16(1582);
+emit_16(1517);
+emit_16(1582);
+emit_16(1518);
+emit_16(1583);
+emit_16(1519);
+emit_16(1583);
+emit_16(1518);
+emit_16(1583);
+emit_16(1519);
+emit_16(1584);
+emit_16(1520);
+emit_16(1584);
+emit_16(1519);
+emit_16(1584);
+emit_16(1520);
+emit_16(1585);
+emit_16(1521);
+emit_16(1585);
+emit_16(1520);
+emit_16(1585);
+emit_16(1521);
+emit_16(1586);
+emit_16(1522);
+emit_16(1586);
+emit_16(1521);
+emit_16(1586);
+emit_16(1522);
+emit_16(1587);
+emit_16(1523);
+emit_16(1587);
+emit_16(1522);
+emit_16(1587);
+emit_16(1523);
+emit_16(1588);
+emit_16(1524);
+emit_16(1588);
+emit_16(1523);
+emit_16(1588);
+emit_16(1524);
+emit_16(1589);
+emit_16(1525);
+emit_16(1589);
+emit_16(1524);
+emit_16(1589);
+emit_16(1525);
+emit_16(1590);
+emit_16(1526);
+emit_16(1590);
+emit_16(1525);
+emit_16(1590);
+emit_16(1526);
+emit_16(1591);
+emit_16(1527);
+emit_16(1591);
+emit_16(1526);
+emit_16(1591);
+emit_16(1527);
+emit_16(1592);
+emit_16(1528);
+emit_16(1592);
+emit_16(1527);
+emit_16(1592);
+emit_16(1528);
+emit_16(1593);
+emit_16(1529);
+emit_16(1593);
+emit_16(1528);
+emit_16(1593);
+emit_16(1529);
+emit_16(1594);
+emit_16(1530);
+emit_16(1594);
+emit_16(1529);
+emit_16(1594);
+emit_16(1530);
+emit_16(1595);
+emit_16(1531);
+emit_16(1595);
+emit_16(1530);
+emit_16(1595);
+emit_16(1531);
+emit_16(1596);
+emit_16(1532);
+emit_16(1596);
+emit_16(1531);
+emit_16(1596);
+emit_16(1532);
+emit_16(1597);
+emit_16(1533);
+emit_16(1597);
+emit_16(1532);
+emit_16(1597);
+emit_16(1533);
+emit_16(1598);
+emit_16(1534);
+emit_16(1598);
+emit_16(1533);
+emit_16(1598);
+emit_16(1534);
+emit_16(1599);
+emit_16(1535);
+emit_16(1599);
+emit_16(1534);
+emit_16(1600);
+emit_16(1536);
+emit_16(1601);
+emit_16(1537);
+emit_16(1601);
+emit_16(1536);
+emit_16(1601);
+emit_16(1537);
+emit_16(1602);
+emit_16(1538);
+emit_16(1602);
+emit_16(1537);
+emit_16(1602);
+emit_16(1538);
+emit_16(1603);
+emit_16(1539);
+emit_16(1603);
+emit_16(1538);
+emit_16(1603);
+emit_16(1539);
+emit_16(1604);
+emit_16(1540);
+emit_16(1604);
+emit_16(1539);
+emit_16(1604);
+emit_16(1540);
+emit_16(1605);
+emit_16(1541);
+emit_16(1605);
+emit_16(1540);
+emit_16(1605);
+emit_16(1541);
+emit_16(1606);
+emit_16(1542);
+emit_16(1606);
+emit_16(1541);
+emit_16(1606);
+emit_16(1542);
+emit_16(1607);
+emit_16(1543);
+emit_16(1607);
+emit_16(1542);
+emit_16(1607);
+emit_16(1543);
+emit_16(1608);
+emit_16(1544);
+emit_16(1608);
+emit_16(1543);
+emit_16(1608);
+emit_16(1544);
+emit_16(1609);
+emit_16(1545);
+emit_16(1609);
+emit_16(1544);
+emit_16(1609);
+emit_16(1545);
+emit_16(1610);
+emit_16(1546);
+emit_16(1610);
+emit_16(1545);
+emit_16(1610);
+emit_16(1546);
+emit_16(1611);
+emit_16(1547);
+emit_16(1611);
+emit_16(1546);
+emit_16(1611);
+emit_16(1547);
+emit_16(1612);
+emit_16(1548);
+emit_16(1612);
+emit_16(1547);
+emit_16(1612);
+emit_16(1548);
+emit_16(1613);
+emit_16(1549);
+emit_16(1613);
+emit_16(1548);
+emit_16(1613);
+emit_16(1549);
+emit_16(1614);
+emit_16(1550);
+emit_16(1614);
+emit_16(1549);
+emit_16(1614);
+emit_16(1550);
+emit_16(1615);
+emit_16(1551);
+emit_16(1615);
+emit_16(1550);
+emit_16(1615);
+emit_16(1551);
+emit_16(1616);
+emit_16(1552);
+emit_16(1616);
+emit_16(1551);
+emit_16(1616);
+emit_16(1552);
+emit_16(1617);
+emit_16(1553);
+emit_16(1617);
+emit_16(1552);
+emit_16(1617);
+emit_16(1553);
+emit_16(1618);
+emit_16(1554);
+emit_16(1618);
+emit_16(1553);
+emit_16(1618);
+emit_16(1554);
+emit_16(1619);
+emit_16(1555);
+emit_16(1619);
+emit_16(1554);
+emit_16(1619);
+emit_16(1555);
+emit_16(1620);
+emit_16(1556);
+emit_16(1620);
+emit_16(1555);
+emit_16(1620);
+emit_16(1556);
+emit_16(1621);
+emit_16(1557);
+emit_16(1621);
+emit_16(1556);
+emit_16(1621);
+emit_16(1557);
+emit_16(1622);
+emit_16(1558);
+emit_16(1622);
+emit_16(1557);
+emit_16(1622);
+emit_16(1558);
+emit_16(1623);
+emit_16(1559);
+emit_16(1623);
+emit_16(1558);
+emit_16(1623);
+emit_16(1559);
+emit_16(1624);
+emit_16(1560);
+emit_16(1624);
+emit_16(1559);
+emit_16(1624);
+emit_16(1560);
+emit_16(1625);
+emit_16(1561);
+emit_16(1625);
+emit_16(1560);
+emit_16(1625);
+emit_16(1561);
+emit_16(1626);
+emit_16(1562);
+emit_16(1626);
+emit_16(1561);
+emit_16(1626);
+emit_16(1562);
+emit_16(1627);
+emit_16(1563);
+emit_16(1627);
+emit_16(1562);
+emit_16(1627);
+emit_16(1563);
+emit_16(1628);
+emit_16(1564);
+emit_16(1628);
+emit_16(1563);
+emit_16(1628);
+emit_16(1564);
+emit_16(1629);
+emit_16(1565);
+emit_16(1629);
+emit_16(1564);
+emit_16(1629);
+emit_16(1565);
+emit_16(1630);
+emit_16(1566);
+emit_16(1630);
+emit_16(1565);
+emit_16(1630);
+emit_16(1566);
+emit_16(1631);
+emit_16(1567);
+emit_16(1631);
+emit_16(1566);
+emit_16(1631);
+emit_16(1567);
+emit_16(1632);
+emit_16(1568);
+emit_16(1632);
+emit_16(1567);
+emit_16(1632);
+emit_16(1568);
+emit_16(1633);
+emit_16(1569);
+emit_16(1633);
+emit_16(1568);
+emit_16(1633);
+emit_16(1569);
+emit_16(1634);
+emit_16(1570);
+emit_16(1634);
+emit_16(1569);
+emit_16(1634);
+emit_16(1570);
+emit_16(1635);
+emit_16(1571);
+emit_16(1635);
+emit_16(1570);
+emit_16(1635);
+emit_16(1571);
+emit_16(1636);
+emit_16(1572);
+emit_16(1636);
+emit_16(1571);
+emit_16(1636);
+emit_16(1572);
+emit_16(1637);
+emit_16(1573);
+emit_16(1637);
+emit_16(1572);
+emit_16(1637);
+emit_16(1573);
+emit_16(1638);
+emit_16(1574);
+emit_16(1638);
+emit_16(1573);
+emit_16(1638);
+emit_16(1574);
+emit_16(1639);
+emit_16(1575);
+emit_16(1639);
+emit_16(1574);
+emit_16(1639);
+emit_16(1575);
+emit_16(1640);
+emit_16(1576);
+emit_16(1640);
+emit_16(1575);
+emit_16(1640);
+emit_16(1576);
+emit_16(1641);
+emit_16(1577);
+emit_16(1641);
+emit_16(1576);
+emit_16(1641);
+emit_16(1577);
+emit_16(1642);
+emit_16(1578);
+emit_16(1642);
+emit_16(1577);
+emit_16(1642);
+emit_16(1578);
+emit_16(1643);
+emit_16(1579);
+emit_16(1643);
+emit_16(1578);
+emit_16(1643);
+emit_16(1579);
+emit_16(1644);
+emit_16(1580);
+emit_16(1644);
+emit_16(1579);
+emit_16(1644);
+emit_16(1580);
+emit_16(1645);
+emit_16(1581);
+emit_16(1645);
+emit_16(1580);
+emit_16(1645);
+emit_16(1581);
+emit_16(1646);
+emit_16(1582);
+emit_16(1646);
+emit_16(1581);
+emit_16(1646);
+emit_16(1582);
+emit_16(1647);
+emit_16(1583);
+emit_16(1647);
+emit_16(1582);
+emit_16(1647);
+emit_16(1583);
+emit_16(1648);
+emit_16(1584);
+emit_16(1648);
+emit_16(1583);
+emit_16(1648);
+emit_16(1584);
+emit_16(1649);
+emit_16(1585);
+emit_16(1649);
+emit_16(1584);
+emit_16(1649);
+emit_16(1585);
+emit_16(1650);
+emit_16(1586);
+emit_16(1650);
+emit_16(1585);
+emit_16(1650);
+emit_16(1586);
+emit_16(1651);
+emit_16(1587);
+emit_16(1651);
+emit_16(1586);
+emit_16(1651);
+emit_16(1587);
+emit_16(1652);
+emit_16(1588);
+emit_16(1652);
+emit_16(1587);
+emit_16(1652);
+emit_16(1588);
+emit_16(1653);
+emit_16(1589);
+emit_16(1653);
+emit_16(1588);
+emit_16(1653);
+emit_16(1589);
+emit_16(1654);
+emit_16(1590);
+emit_16(1654);
+emit_16(1589);
+emit_16(1654);
+emit_16(1590);
+emit_16(1655);
+emit_16(1591);
+emit_16(1655);
+emit_16(1590);
+emit_16(1655);
+emit_16(1591);
+emit_16(1656);
+emit_16(1592);
+emit_16(1656);
+emit_16(1591);
+emit_16(1656);
+emit_16(1592);
+emit_16(1657);
+emit_16(1593);
+emit_16(1657);
+emit_16(1592);
+emit_16(1657);
+emit_16(1593);
+emit_16(1658);
+emit_16(1594);
+emit_16(1658);
+emit_16(1593);
+emit_16(1658);
+emit_16(1594);
+emit_16(1659);
+emit_16(1595);
+emit_16(1659);
+emit_16(1594);
+emit_16(1659);
+emit_16(1595);
+emit_16(1660);
+emit_16(1596);
+emit_16(1660);
+emit_16(1595);
+emit_16(1660);
+emit_16(1596);
+emit_16(1661);
+emit_16(1597);
+emit_16(1661);
+emit_16(1596);
+emit_16(1661);
+emit_16(1597);
+emit_16(1662);
+emit_16(1598);
+emit_16(1662);
+emit_16(1597);
+emit_16(1662);
+emit_16(1598);
+emit_16(1663);
+emit_16(1599);
+emit_16(1663);
+emit_16(1598);
+emit_16(1664);
+emit_16(1600);
+emit_16(1665);
+emit_16(1601);
+emit_16(1665);
+emit_16(1600);
+emit_16(1665);
+emit_16(1601);
+emit_16(1666);
+emit_16(1602);
+emit_16(1666);
+emit_16(1601);
+emit_16(1666);
+emit_16(1602);
+emit_16(1667);
+emit_16(1603);
+emit_16(1667);
+emit_16(1602);
+emit_16(1667);
+emit_16(1603);
+emit_16(1668);
+emit_16(1604);
+emit_16(1668);
+emit_16(1603);
+emit_16(1668);
+emit_16(1604);
+emit_16(1669);
+emit_16(1605);
+emit_16(1669);
+emit_16(1604);
+emit_16(1669);
+emit_16(1605);
+emit_16(1670);
+emit_16(1606);
+emit_16(1670);
+emit_16(1605);
+emit_16(1670);
+emit_16(1606);
+emit_16(1671);
+emit_16(1607);
+emit_16(1671);
+emit_16(1606);
+emit_16(1671);
+emit_16(1607);
+emit_16(1672);
+emit_16(1608);
+emit_16(1672);
+emit_16(1607);
+emit_16(1672);
+emit_16(1608);
+emit_16(1673);
+emit_16(1609);
+emit_16(1673);
+emit_16(1608);
+emit_16(1673);
+emit_16(1609);
+emit_16(1674);
+emit_16(1610);
+emit_16(1674);
+emit_16(1609);
+emit_16(1674);
+emit_16(1610);
+emit_16(1675);
+emit_16(1611);
+emit_16(1675);
+emit_16(1610);
+emit_16(1675);
+emit_16(1611);
+emit_16(1676);
+emit_16(1612);
+emit_16(1676);
+emit_16(1611);
+emit_16(1676);
+emit_16(1612);
+emit_16(1677);
+emit_16(1613);
+emit_16(1677);
+emit_16(1612);
+emit_16(1677);
+emit_16(1613);
+emit_16(1678);
+emit_16(1614);
+emit_16(1678);
+emit_16(1613);
+emit_16(1678);
+emit_16(1614);
+emit_16(1679);
+emit_16(1615);
+emit_16(1679);
+emit_16(1614);
+emit_16(1679);
+emit_16(1615);
+emit_16(1680);
+emit_16(1616);
+emit_16(1680);
+emit_16(1615);
+emit_16(1680);
+emit_16(1616);
+emit_16(1681);
+emit_16(1617);
+emit_16(1681);
+emit_16(1616);
+emit_16(1681);
+emit_16(1617);
+emit_16(1682);
+emit_16(1618);
+emit_16(1682);
+emit_16(1617);
+emit_16(1682);
+emit_16(1618);
+emit_16(1683);
+emit_16(1619);
+emit_16(1683);
+emit_16(1618);
+emit_16(1683);
+emit_16(1619);
+emit_16(1684);
+emit_16(1620);
+emit_16(1684);
+emit_16(1619);
+emit_16(1684);
+emit_16(1620);
+emit_16(1685);
+emit_16(1621);
+emit_16(1685);
+emit_16(1620);
+emit_16(1685);
+emit_16(1621);
+emit_16(1686);
+emit_16(1622);
+emit_16(1686);
+emit_16(1621);
+emit_16(1686);
+emit_16(1622);
+emit_16(1687);
+emit_16(1623);
+emit_16(1687);
+emit_16(1622);
+emit_16(1687);
+emit_16(1623);
+emit_16(1688);
+emit_16(1624);
+emit_16(1688);
+emit_16(1623);
+emit_16(1688);
+emit_16(1624);
+emit_16(1689);
+emit_16(1625);
+emit_16(1689);
+emit_16(1624);
+emit_16(1689);
+emit_16(1625);
+emit_16(1690);
+emit_16(1626);
+emit_16(1690);
+emit_16(1625);
+emit_16(1690);
+emit_16(1626);
+emit_16(1691);
+emit_16(1627);
+emit_16(1691);
+emit_16(1626);
+emit_16(1691);
+emit_16(1627);
+emit_16(1692);
+emit_16(1628);
+emit_16(1692);
+emit_16(1627);
+emit_16(1692);
+emit_16(1628);
+emit_16(1693);
+emit_16(1629);
+emit_16(1693);
+emit_16(1628);
+emit_16(1693);
+emit_16(1629);
+emit_16(1694);
+emit_16(1630);
+emit_16(1694);
+emit_16(1629);
+emit_16(1694);
+emit_16(1630);
+emit_16(1695);
+emit_16(1631);
+emit_16(1695);
+emit_16(1630);
+emit_16(1695);
+emit_16(1631);
+emit_16(1696);
+emit_16(1632);
+emit_16(1696);
+emit_16(1631);
+emit_16(1696);
+emit_16(1632);
+emit_16(1697);
+emit_16(1633);
+emit_16(1697);
+emit_16(1632);
+emit_16(1697);
+emit_16(1633);
+emit_16(1698);
+emit_16(1634);
+emit_16(1698);
+emit_16(1633);
+emit_16(1698);
+emit_16(1634);
+emit_16(1699);
+emit_16(1635);
+emit_16(1699);
+emit_16(1634);
+emit_16(1699);
+emit_16(1635);
+emit_16(1700);
+emit_16(1636);
+emit_16(1700);
+emit_16(1635);
+emit_16(1700);
+emit_16(1636);
+emit_16(1701);
+emit_16(1637);
+emit_16(1701);
+emit_16(1636);
+emit_16(1701);
+emit_16(1637);
+emit_16(1702);
+emit_16(1638);
+emit_16(1702);
+emit_16(1637);
+emit_16(1702);
+emit_16(1638);
+emit_16(1703);
+emit_16(1639);
+emit_16(1703);
+emit_16(1638);
+emit_16(1703);
+emit_16(1639);
+emit_16(1704);
+emit_16(1640);
+emit_16(1704);
+emit_16(1639);
+emit_16(1704);
+emit_16(1640);
+emit_16(1705);
+emit_16(1641);
+emit_16(1705);
+emit_16(1640);
+emit_16(1705);
+emit_16(1641);
+emit_16(1706);
+emit_16(1642);
+emit_16(1706);
+emit_16(1641);
+emit_16(1706);
+emit_16(1642);
+emit_16(1707);
+emit_16(1643);
+emit_16(1707);
+emit_16(1642);
+emit_16(1707);
+emit_16(1643);
+emit_16(1708);
+emit_16(1644);
+emit_16(1708);
+emit_16(1643);
+emit_16(1708);
+emit_16(1644);
+emit_16(1709);
+emit_16(1645);
+emit_16(1709);
+emit_16(1644);
+emit_16(1709);
+emit_16(1645);
+emit_16(1710);
+emit_16(1646);
+emit_16(1710);
+emit_16(1645);
+emit_16(1710);
+emit_16(1646);
+emit_16(1711);
+emit_16(1647);
+emit_16(1711);
+emit_16(1646);
+emit_16(1711);
+emit_16(1647);
+emit_16(1712);
+emit_16(1648);
+emit_16(1712);
+emit_16(1647);
+emit_16(1712);
+emit_16(1648);
+emit_16(1713);
+emit_16(1649);
+emit_16(1713);
+emit_16(1648);
+emit_16(1713);
+emit_16(1649);
+emit_16(1714);
+emit_16(1650);
+emit_16(1714);
+emit_16(1649);
+emit_16(1714);
+emit_16(1650);
+emit_16(1715);
+emit_16(1651);
+emit_16(1715);
+emit_16(1650);
+emit_16(1715);
+emit_16(1651);
+emit_16(1716);
+emit_16(1652);
+emit_16(1716);
+emit_16(1651);
+emit_16(1716);
+emit_16(1652);
+emit_16(1717);
+emit_16(1653);
+emit_16(1717);
+emit_16(1652);
+emit_16(1717);
+emit_16(1653);
+emit_16(1718);
+emit_16(1654);
+emit_16(1718);
+emit_16(1653);
+emit_16(1718);
+emit_16(1654);
+emit_16(1719);
+emit_16(1655);
+emit_16(1719);
+emit_16(1654);
+emit_16(1719);
+emit_16(1655);
+emit_16(1720);
+emit_16(1656);
+emit_16(1720);
+emit_16(1655);
+emit_16(1720);
+emit_16(1656);
+emit_16(1721);
+emit_16(1657);
+emit_16(1721);
+emit_16(1656);
+emit_16(1721);
+emit_16(1657);
+emit_16(1722);
+emit_16(1658);
+emit_16(1722);
+emit_16(1657);
+emit_16(1722);
+emit_16(1658);
+emit_16(1723);
+emit_16(1659);
+emit_16(1723);
+emit_16(1658);
+emit_16(1723);
+emit_16(1659);
+emit_16(1724);
+emit_16(1660);
+emit_16(1724);
+emit_16(1659);
+emit_16(1724);
+emit_16(1660);
+emit_16(1725);
+emit_16(1661);
+emit_16(1725);
+emit_16(1660);
+emit_16(1725);
+emit_16(1661);
+emit_16(1726);
+emit_16(1662);
+emit_16(1726);
+emit_16(1661);
+emit_16(1726);
+emit_16(1662);
+emit_16(1727);
+emit_16(1663);
+emit_16(1727);
+emit_16(1662);
+emit_16(1728);
+emit_16(1664);
+emit_16(1729);
+emit_16(1665);
+emit_16(1729);
+emit_16(1664);
+emit_16(1729);
+emit_16(1665);
+emit_16(1730);
+emit_16(1666);
+emit_16(1730);
+emit_16(1665);
+emit_16(1730);
+emit_16(1666);
+emit_16(1731);
+emit_16(1667);
+emit_16(1731);
+emit_16(1666);
+emit_16(1731);
+emit_16(1667);
+emit_16(1732);
+emit_16(1668);
+emit_16(1732);
+emit_16(1667);
+emit_16(1732);
+emit_16(1668);
+emit_16(1733);
+emit_16(1669);
+emit_16(1733);
+emit_16(1668);
+emit_16(1733);
+emit_16(1669);
+emit_16(1734);
+emit_16(1670);
+emit_16(1734);
+emit_16(1669);
+emit_16(1734);
+emit_16(1670);
+emit_16(1735);
+emit_16(1671);
+emit_16(1735);
+emit_16(1670);
+emit_16(1735);
+emit_16(1671);
+emit_16(1736);
+emit_16(1672);
+emit_16(1736);
+emit_16(1671);
+emit_16(1736);
+emit_16(1672);
+emit_16(1737);
+emit_16(1673);
+emit_16(1737);
+emit_16(1672);
+emit_16(1737);
+emit_16(1673);
+emit_16(1738);
+emit_16(1674);
+emit_16(1738);
+emit_16(1673);
+emit_16(1738);
+emit_16(1674);
+emit_16(1739);
+emit_16(1675);
+emit_16(1739);
+emit_16(1674);
+emit_16(1739);
+emit_16(1675);
+emit_16(1740);
+emit_16(1676);
+emit_16(1740);
+emit_16(1675);
+emit_16(1740);
+emit_16(1676);
+emit_16(1741);
+emit_16(1677);
+emit_16(1741);
+emit_16(1676);
+emit_16(1741);
+emit_16(1677);
+emit_16(1742);
+emit_16(1678);
+emit_16(1742);
+emit_16(1677);
+emit_16(1742);
+emit_16(1678);
+emit_16(1743);
+emit_16(1679);
+emit_16(1743);
+emit_16(1678);
+emit_16(1743);
+emit_16(1679);
+emit_16(1744);
+emit_16(1680);
+emit_16(1744);
+emit_16(1679);
+emit_16(1744);
+emit_16(1680);
+emit_16(1745);
+emit_16(1681);
+emit_16(1745);
+emit_16(1680);
+emit_16(1745);
+emit_16(1681);
+emit_16(1746);
+emit_16(1682);
+emit_16(1746);
+emit_16(1681);
+emit_16(1746);
+emit_16(1682);
+emit_16(1747);
+emit_16(1683);
+emit_16(1747);
+emit_16(1682);
+emit_16(1747);
+emit_16(1683);
+emit_16(1748);
+emit_16(1684);
+emit_16(1748);
+emit_16(1683);
+emit_16(1748);
+emit_16(1684);
+emit_16(1749);
+emit_16(1685);
+emit_16(1749);
+emit_16(1684);
+emit_16(1749);
+emit_16(1685);
+emit_16(1750);
+emit_16(1686);
+emit_16(1750);
+emit_16(1685);
+emit_16(1750);
+emit_16(1686);
+emit_16(1751);
+emit_16(1687);
+emit_16(1751);
+emit_16(1686);
+emit_16(1751);
+emit_16(1687);
+emit_16(1752);
+emit_16(1688);
+emit_16(1752);
+emit_16(1687);
+emit_16(1752);
+emit_16(1688);
+emit_16(1753);
+emit_16(1689);
+emit_16(1753);
+emit_16(1688);
+emit_16(1753);
+emit_16(1689);
+emit_16(1754);
+emit_16(1690);
+emit_16(1754);
+emit_16(1689);
+emit_16(1754);
+emit_16(1690);
+emit_16(1755);
+emit_16(1691);
+emit_16(1755);
+emit_16(1690);
+emit_16(1755);
+emit_16(1691);
+emit_16(1756);
+emit_16(1692);
+emit_16(1756);
+emit_16(1691);
+emit_16(1756);
+emit_16(1692);
+emit_16(1757);
+emit_16(1693);
+emit_16(1757);
+emit_16(1692);
+emit_16(1757);
+emit_16(1693);
+emit_16(1758);
+emit_16(1694);
+emit_16(1758);
+emit_16(1693);
+emit_16(1758);
+emit_16(1694);
+emit_16(1759);
+emit_16(1695);
+emit_16(1759);
+emit_16(1694);
+emit_16(1759);
+emit_16(1695);
+emit_16(1760);
+emit_16(1696);
+emit_16(1760);
+emit_16(1695);
+emit_16(1760);
+emit_16(1696);
+emit_16(1761);
+emit_16(1697);
+emit_16(1761);
+emit_16(1696);
+emit_16(1761);
+emit_16(1697);
+emit_16(1762);
+emit_16(1698);
+emit_16(1762);
+emit_16(1697);
+emit_16(1762);
+emit_16(1698);
+emit_16(1763);
+emit_16(1699);
+emit_16(1763);
+emit_16(1698);
+emit_16(1763);
+emit_16(1699);
+emit_16(1764);
+emit_16(1700);
+emit_16(1764);
+emit_16(1699);
+emit_16(1764);
+emit_16(1700);
+emit_16(1765);
+emit_16(1701);
+emit_16(1765);
+emit_16(1700);
+emit_16(1765);
+emit_16(1701);
+emit_16(1766);
+emit_16(1702);
+emit_16(1766);
+emit_16(1701);
+emit_16(1766);
+emit_16(1702);
+emit_16(1767);
+emit_16(1703);
+emit_16(1767);
+emit_16(1702);
+emit_16(1767);
+emit_16(1703);
+emit_16(1768);
+emit_16(1704);
+emit_16(1768);
+emit_16(1703);
+emit_16(1768);
+emit_16(1704);
+emit_16(1769);
+emit_16(1705);
+emit_16(1769);
+emit_16(1704);
+emit_16(1769);
+emit_16(1705);
+emit_16(1770);
+emit_16(1706);
+emit_16(1770);
+emit_16(1705);
+emit_16(1770);
+emit_16(1706);
+emit_16(1771);
+emit_16(1707);
+emit_16(1771);
+emit_16(1706);
+emit_16(1771);
+emit_16(1707);
+emit_16(1772);
+emit_16(1708);
+emit_16(1772);
+emit_16(1707);
+emit_16(1772);
+emit_16(1708);
+emit_16(1773);
+emit_16(1709);
+emit_16(1773);
+emit_16(1708);
+emit_16(1773);
+emit_16(1709);
+emit_16(1774);
+emit_16(1710);
+emit_16(1774);
+emit_16(1709);
+emit_16(1774);
+emit_16(1710);
+emit_16(1775);
+emit_16(1711);
+emit_16(1775);
+emit_16(1710);
+emit_16(1775);
+emit_16(1711);
+emit_16(1776);
+emit_16(1712);
+emit_16(1776);
+emit_16(1711);
+emit_16(1776);
+emit_16(1712);
+emit_16(1777);
+emit_16(1713);
+emit_16(1777);
+emit_16(1712);
+emit_16(1777);
+emit_16(1713);
+emit_16(1778);
+emit_16(1714);
+emit_16(1778);
+emit_16(1713);
+emit_16(1778);
+emit_16(1714);
+emit_16(1779);
+emit_16(1715);
+emit_16(1779);
+emit_16(1714);
+emit_16(1779);
+emit_16(1715);
+emit_16(1780);
+emit_16(1716);
+emit_16(1780);
+emit_16(1715);
+emit_16(1780);
+emit_16(1716);
+emit_16(1781);
+emit_16(1717);
+emit_16(1781);
+emit_16(1716);
+emit_16(1781);
+emit_16(1717);
+emit_16(1782);
+emit_16(1718);
+emit_16(1782);
+emit_16(1717);
+emit_16(1782);
+emit_16(1718);
+emit_16(1783);
+emit_16(1719);
+emit_16(1783);
+emit_16(1718);
+emit_16(1783);
+emit_16(1719);
+emit_16(1784);
+emit_16(1720);
+emit_16(1784);
+emit_16(1719);
+emit_16(1784);
+emit_16(1720);
+emit_16(1785);
+emit_16(1721);
+emit_16(1785);
+emit_16(1720);
+emit_16(1785);
+emit_16(1721);
+emit_16(1786);
+emit_16(1722);
+emit_16(1786);
+emit_16(1721);
+emit_16(1786);
+emit_16(1722);
+emit_16(1787);
+emit_16(1723);
+emit_16(1787);
+emit_16(1722);
+emit_16(1787);
+emit_16(1723);
+emit_16(1788);
+emit_16(1724);
+emit_16(1788);
+emit_16(1723);
+emit_16(1788);
+emit_16(1724);
+emit_16(1789);
+emit_16(1725);
+emit_16(1789);
+emit_16(1724);
+emit_16(1789);
+emit_16(1725);
+emit_16(1790);
+emit_16(1726);
+emit_16(1790);
+emit_16(1725);
+emit_16(1790);
+emit_16(1726);
+emit_16(1791);
+emit_16(1727);
+emit_16(1791);
+emit_16(1726);
+emit_16(1792);
+emit_16(1728);
+emit_16(1793);
+emit_16(1729);
+emit_16(1793);
+emit_16(1728);
+emit_16(1793);
+emit_16(1729);
+emit_16(1794);
+emit_16(1730);
+emit_16(1794);
+emit_16(1729);
+emit_16(1794);
+emit_16(1730);
+emit_16(1795);
+emit_16(1731);
+emit_16(1795);
+emit_16(1730);
+emit_16(1795);
+emit_16(1731);
+emit_16(1796);
+emit_16(1732);
+emit_16(1796);
+emit_16(1731);
+emit_16(1796);
+emit_16(1732);
+emit_16(1797);
+emit_16(1733);
+emit_16(1797);
+emit_16(1732);
+emit_16(1797);
+emit_16(1733);
+emit_16(1798);
+emit_16(1734);
+emit_16(1798);
+emit_16(1733);
+emit_16(1798);
+emit_16(1734);
+emit_16(1799);
+emit_16(1735);
+emit_16(1799);
+emit_16(1734);
+emit_16(1799);
+emit_16(1735);
+emit_16(1800);
+emit_16(1736);
+emit_16(1800);
+emit_16(1735);
+emit_16(1800);
+emit_16(1736);
+emit_16(1801);
+emit_16(1737);
+emit_16(1801);
+emit_16(1736);
+emit_16(1801);
+emit_16(1737);
+emit_16(1802);
+emit_16(1738);
+emit_16(1802);
+emit_16(1737);
+emit_16(1802);
+emit_16(1738);
+emit_16(1803);
+emit_16(1739);
+emit_16(1803);
+emit_16(1738);
+emit_16(1803);
+emit_16(1739);
+emit_16(1804);
+emit_16(1740);
+emit_16(1804);
+emit_16(1739);
+emit_16(1804);
+emit_16(1740);
+emit_16(1805);
+emit_16(1741);
+emit_16(1805);
+emit_16(1740);
+emit_16(1805);
+emit_16(1741);
+emit_16(1806);
+emit_16(1742);
+emit_16(1806);
+emit_16(1741);
+emit_16(1806);
+emit_16(1742);
+emit_16(1807);
+emit_16(1743);
+emit_16(1807);
+emit_16(1742);
+emit_16(1807);
+emit_16(1743);
+emit_16(1808);
+emit_16(1744);
+emit_16(1808);
+emit_16(1743);
+emit_16(1808);
+emit_16(1744);
+emit_16(1809);
+emit_16(1745);
+emit_16(1809);
+emit_16(1744);
+emit_16(1809);
+emit_16(1745);
+emit_16(1810);
+emit_16(1746);
+emit_16(1810);
+emit_16(1745);
+emit_16(1810);
+emit_16(1746);
+emit_16(1811);
+emit_16(1747);
+emit_16(1811);
+emit_16(1746);
+emit_16(1811);
+emit_16(1747);
+emit_16(1812);
+emit_16(1748);
+emit_16(1812);
+emit_16(1747);
+emit_16(1812);
+emit_16(1748);
+emit_16(1813);
+emit_16(1749);
+emit_16(1813);
+emit_16(1748);
+emit_16(1813);
+emit_16(1749);
+emit_16(1814);
+emit_16(1750);
+emit_16(1814);
+emit_16(1749);
+emit_16(1814);
+emit_16(1750);
+emit_16(1815);
+emit_16(1751);
+emit_16(1815);
+emit_16(1750);
+emit_16(1815);
+emit_16(1751);
+emit_16(1816);
+emit_16(1752);
+emit_16(1816);
+emit_16(1751);
+emit_16(1816);
+emit_16(1752);
+emit_16(1817);
+emit_16(1753);
+emit_16(1817);
+emit_16(1752);
+emit_16(1817);
+emit_16(1753);
+emit_16(1818);
+emit_16(1754);
+emit_16(1818);
+emit_16(1753);
+emit_16(1818);
+emit_16(1754);
+emit_16(1819);
+emit_16(1755);
+emit_16(1819);
+emit_16(1754);
+emit_16(1819);
+emit_16(1755);
+emit_16(1820);
+emit_16(1756);
+emit_16(1820);
+emit_16(1755);
+emit_16(1820);
+emit_16(1756);
+emit_16(1821);
+emit_16(1757);
+emit_16(1821);
+emit_16(1756);
+emit_16(1821);
+emit_16(1757);
+emit_16(1822);
+emit_16(1758);
+emit_16(1822);
+emit_16(1757);
+emit_16(1822);
+emit_16(1758);
+emit_16(1823);
+emit_16(1759);
+emit_16(1823);
+emit_16(1758);
+emit_16(1823);
+emit_16(1759);
+emit_16(1824);
+emit_16(1760);
+emit_16(1824);
+emit_16(1759);
+emit_16(1824);
+emit_16(1760);
+emit_16(1825);
+emit_16(1761);
+emit_16(1825);
+emit_16(1760);
+emit_16(1825);
+emit_16(1761);
+emit_16(1826);
+emit_16(1762);
+emit_16(1826);
+emit_16(1761);
+emit_16(1826);
+emit_16(1762);
+emit_16(1827);
+emit_16(1763);
+emit_16(1827);
+emit_16(1762);
+emit_16(1827);
+emit_16(1763);
+emit_16(1828);
+emit_16(1764);
+emit_16(1828);
+emit_16(1763);
+emit_16(1828);
+emit_16(1764);
+emit_16(1829);
+emit_16(1765);
+emit_16(1829);
+emit_16(1764);
+emit_16(1829);
+emit_16(1765);
+emit_16(1830);
+emit_16(1766);
+emit_16(1830);
+emit_16(1765);
+emit_16(1830);
+emit_16(1766);
+emit_16(1831);
+emit_16(1767);
+emit_16(1831);
+emit_16(1766);
+emit_16(1831);
+emit_16(1767);
+emit_16(1832);
+emit_16(1768);
+emit_16(1832);
+emit_16(1767);
+emit_16(1832);
+emit_16(1768);
+emit_16(1833);
+emit_16(1769);
+emit_16(1833);
+emit_16(1768);
+emit_16(1833);
+emit_16(1769);
+emit_16(1834);
+emit_16(1770);
+emit_16(1834);
+emit_16(1769);
+emit_16(1834);
+emit_16(1770);
+emit_16(1835);
+emit_16(1771);
+emit_16(1835);
+emit_16(1770);
+emit_16(1835);
+emit_16(1771);
+emit_16(1836);
+emit_16(1772);
+emit_16(1836);
+emit_16(1771);
+emit_16(1836);
+emit_16(1772);
+emit_16(1837);
+emit_16(1773);
+emit_16(1837);
+emit_16(1772);
+emit_16(1837);
+emit_16(1773);
+emit_16(1838);
+emit_16(1774);
+emit_16(1838);
+emit_16(1773);
+emit_16(1838);
+emit_16(1774);
+emit_16(1839);
+emit_16(1775);
+emit_16(1839);
+emit_16(1774);
+emit_16(1839);
+emit_16(1775);
+emit_16(1840);
+emit_16(1776);
+emit_16(1840);
+emit_16(1775);
+emit_16(1840);
+emit_16(1776);
+emit_16(1841);
+emit_16(1777);
+emit_16(1841);
+emit_16(1776);
+emit_16(1841);
+emit_16(1777);
+emit_16(1842);
+emit_16(1778);
+emit_16(1842);
+emit_16(1777);
+emit_16(1842);
+emit_16(1778);
+emit_16(1843);
+emit_16(1779);
+emit_16(1843);
+emit_16(1778);
+emit_16(1843);
+emit_16(1779);
+emit_16(1844);
+emit_16(1780);
+emit_16(1844);
+emit_16(1779);
+emit_16(1844);
+emit_16(1780);
+emit_16(1845);
+emit_16(1781);
+emit_16(1845);
+emit_16(1780);
+emit_16(1845);
+emit_16(1781);
+emit_16(1846);
+emit_16(1782);
+emit_16(1846);
+emit_16(1781);
+emit_16(1846);
+emit_16(1782);
+emit_16(1847);
+emit_16(1783);
+emit_16(1847);
+emit_16(1782);
+emit_16(1847);
+emit_16(1783);
+emit_16(1848);
+emit_16(1784);
+emit_16(1848);
+emit_16(1783);
+emit_16(1848);
+emit_16(1784);
+emit_16(1849);
+emit_16(1785);
+emit_16(1849);
+emit_16(1784);
+emit_16(1849);
+emit_16(1785);
+emit_16(1850);
+emit_16(1786);
+emit_16(1850);
+emit_16(1785);
+emit_16(1850);
+emit_16(1786);
+emit_16(1851);
+emit_16(1787);
+emit_16(1851);
+emit_16(1786);
+emit_16(1851);
+emit_16(1787);
+emit_16(1852);
+emit_16(1788);
+emit_16(1852);
+emit_16(1787);
+emit_16(1852);
+emit_16(1788);
+emit_16(1853);
+emit_16(1789);
+emit_16(1853);
+emit_16(1788);
+emit_16(1853);
+emit_16(1789);
+emit_16(1854);
+emit_16(1790);
+emit_16(1854);
+emit_16(1789);
+emit_16(1854);
+emit_16(1790);
+emit_16(1855);
+emit_16(1791);
+emit_16(1855);
+emit_16(1790);
+emit_16(1856);
+emit_16(1792);
+emit_16(1857);
+emit_16(1793);
+emit_16(1857);
+emit_16(1792);
+emit_16(1857);
+emit_16(1793);
+emit_16(1858);
+emit_16(1794);
+emit_16(1858);
+emit_16(1793);
+emit_16(1858);
+emit_16(1794);
+emit_16(1859);
+emit_16(1795);
+emit_16(1859);
+emit_16(1794);
+emit_16(1859);
+emit_16(1795);
+emit_16(1860);
+emit_16(1796);
+emit_16(1860);
+emit_16(1795);
+emit_16(1860);
+emit_16(1796);
+emit_16(1861);
+emit_16(1797);
+emit_16(1861);
+emit_16(1796);
+emit_16(1861);
+emit_16(1797);
+emit_16(1862);
+emit_16(1798);
+emit_16(1862);
+emit_16(1797);
+emit_16(1862);
+emit_16(1798);
+emit_16(1863);
+emit_16(1799);
+emit_16(1863);
+emit_16(1798);
+emit_16(1863);
+emit_16(1799);
+emit_16(1864);
+emit_16(1800);
+emit_16(1864);
+emit_16(1799);
+emit_16(1864);
+emit_16(1800);
+emit_16(1865);
+emit_16(1801);
+emit_16(1865);
+emit_16(1800);
+emit_16(1865);
+emit_16(1801);
+emit_16(1866);
+emit_16(1802);
+emit_16(1866);
+emit_16(1801);
+emit_16(1866);
+emit_16(1802);
+emit_16(1867);
+emit_16(1803);
+emit_16(1867);
+emit_16(1802);
+emit_16(1867);
+emit_16(1803);
+emit_16(1868);
+emit_16(1804);
+emit_16(1868);
+emit_16(1803);
+emit_16(1868);
+emit_16(1804);
+emit_16(1869);
+emit_16(1805);
+emit_16(1869);
+emit_16(1804);
+emit_16(1869);
+emit_16(1805);
+emit_16(1870);
+emit_16(1806);
+emit_16(1870);
+emit_16(1805);
+emit_16(1870);
+emit_16(1806);
+emit_16(1871);
+emit_16(1807);
+emit_16(1871);
+emit_16(1806);
+emit_16(1871);
+emit_16(1807);
+emit_16(1872);
+emit_16(1808);
+emit_16(1872);
+emit_16(1807);
+emit_16(1872);
+emit_16(1808);
+emit_16(1873);
+emit_16(1809);
+emit_16(1873);
+emit_16(1808);
+emit_16(1873);
+emit_16(1809);
+emit_16(1874);
+emit_16(1810);
+emit_16(1874);
+emit_16(1809);
+emit_16(1874);
+emit_16(1810);
+emit_16(1875);
+emit_16(1811);
+emit_16(1875);
+emit_16(1810);
+emit_16(1875);
+emit_16(1811);
+emit_16(1876);
+emit_16(1812);
+emit_16(1876);
+emit_16(1811);
+emit_16(1876);
+emit_16(1812);
+emit_16(1877);
+emit_16(1813);
+emit_16(1877);
+emit_16(1812);
+emit_16(1877);
+emit_16(1813);
+emit_16(1878);
+emit_16(1814);
+emit_16(1878);
+emit_16(1813);
+emit_16(1878);
+emit_16(1814);
+emit_16(1879);
+emit_16(1815);
+emit_16(1879);
+emit_16(1814);
+emit_16(1879);
+emit_16(1815);
+emit_16(1880);
+emit_16(1816);
+emit_16(1880);
+emit_16(1815);
+emit_16(1880);
+emit_16(1816);
+emit_16(1881);
+emit_16(1817);
+emit_16(1881);
+emit_16(1816);
+emit_16(1881);
+emit_16(1817);
+emit_16(1882);
+emit_16(1818);
+emit_16(1882);
+emit_16(1817);
+emit_16(1882);
+emit_16(1818);
+emit_16(1883);
+emit_16(1819);
+emit_16(1883);
+emit_16(1818);
+emit_16(1883);
+emit_16(1819);
+emit_16(1884);
+emit_16(1820);
+emit_16(1884);
+emit_16(1819);
+emit_16(1884);
+emit_16(1820);
+emit_16(1885);
+emit_16(1821);
+emit_16(1885);
+emit_16(1820);
+emit_16(1885);
+emit_16(1821);
+emit_16(1886);
+emit_16(1822);
+emit_16(1886);
+emit_16(1821);
+emit_16(1886);
+emit_16(1822);
+emit_16(1887);
+emit_16(1823);
+emit_16(1887);
+emit_16(1822);
+emit_16(1887);
+emit_16(1823);
+emit_16(1888);
+emit_16(1824);
+emit_16(1888);
+emit_16(1823);
+emit_16(1888);
+emit_16(1824);
+emit_16(1889);
+emit_16(1825);
+emit_16(1889);
+emit_16(1824);
+emit_16(1889);
+emit_16(1825);
+emit_16(1890);
+emit_16(1826);
+emit_16(1890);
+emit_16(1825);
+emit_16(1890);
+emit_16(1826);
+emit_16(1891);
+emit_16(1827);
+emit_16(1891);
+emit_16(1826);
+emit_16(1891);
+emit_16(1827);
+emit_16(1892);
+emit_16(1828);
+emit_16(1892);
+emit_16(1827);
+emit_16(1892);
+emit_16(1828);
+emit_16(1893);
+emit_16(1829);
+emit_16(1893);
+emit_16(1828);
+emit_16(1893);
+emit_16(1829);
+emit_16(1894);
+emit_16(1830);
+emit_16(1894);
+emit_16(1829);
+emit_16(1894);
+emit_16(1830);
+emit_16(1895);
+emit_16(1831);
+emit_16(1895);
+emit_16(1830);
+emit_16(1895);
+emit_16(1831);
+emit_16(1896);
+emit_16(1832);
+emit_16(1896);
+emit_16(1831);
+emit_16(1896);
+emit_16(1832);
+emit_16(1897);
+emit_16(1833);
+emit_16(1897);
+emit_16(1832);
+emit_16(1897);
+emit_16(1833);
+emit_16(1898);
+emit_16(1834);
+emit_16(1898);
+emit_16(1833);
+emit_16(1898);
+emit_16(1834);
+emit_16(1899);
+emit_16(1835);
+emit_16(1899);
+emit_16(1834);
+emit_16(1899);
+emit_16(1835);
+emit_16(1900);
+emit_16(1836);
+emit_16(1900);
+emit_16(1835);
+emit_16(1900);
+emit_16(1836);
+emit_16(1901);
+emit_16(1837);
+emit_16(1901);
+emit_16(1836);
+emit_16(1901);
+emit_16(1837);
+emit_16(1902);
+emit_16(1838);
+emit_16(1902);
+emit_16(1837);
+emit_16(1902);
+emit_16(1838);
+emit_16(1903);
+emit_16(1839);
+emit_16(1903);
+emit_16(1838);
+emit_16(1903);
+emit_16(1839);
+emit_16(1904);
+emit_16(1840);
+emit_16(1904);
+emit_16(1839);
+emit_16(1904);
+emit_16(1840);
+emit_16(1905);
+emit_16(1841);
+emit_16(1905);
+emit_16(1840);
+emit_16(1905);
+emit_16(1841);
+emit_16(1906);
+emit_16(1842);
+emit_16(1906);
+emit_16(1841);
+emit_16(1906);
+emit_16(1842);
+emit_16(1907);
+emit_16(1843);
+emit_16(1907);
+emit_16(1842);
+emit_16(1907);
+emit_16(1843);
+emit_16(1908);
+emit_16(1844);
+emit_16(1908);
+emit_16(1843);
+emit_16(1908);
+emit_16(1844);
+emit_16(1909);
+emit_16(1845);
+emit_16(1909);
+emit_16(1844);
+emit_16(1909);
+emit_16(1845);
+emit_16(1910);
+emit_16(1846);
+emit_16(1910);
+emit_16(1845);
+emit_16(1910);
+emit_16(1846);
+emit_16(1911);
+emit_16(1847);
+emit_16(1911);
+emit_16(1846);
+emit_16(1911);
+emit_16(1847);
+emit_16(1912);
+emit_16(1848);
+emit_16(1912);
+emit_16(1847);
+emit_16(1912);
+emit_16(1848);
+emit_16(1913);
+emit_16(1849);
+emit_16(1913);
+emit_16(1848);
+emit_16(1913);
+emit_16(1849);
+emit_16(1914);
+emit_16(1850);
+emit_16(1914);
+emit_16(1849);
+emit_16(1914);
+emit_16(1850);
+emit_16(1915);
+emit_16(1851);
+emit_16(1915);
+emit_16(1850);
+emit_16(1915);
+emit_16(1851);
+emit_16(1916);
+emit_16(1852);
+emit_16(1916);
+emit_16(1851);
+emit_16(1916);
+emit_16(1852);
+emit_16(1917);
+emit_16(1853);
+emit_16(1917);
+emit_16(1852);
+emit_16(1917);
+emit_16(1853);
+emit_16(1918);
+emit_16(1854);
+emit_16(1918);
+emit_16(1853);
+emit_16(1918);
+emit_16(1854);
+emit_16(1919);
+emit_16(1855);
+emit_16(1919);
+emit_16(1854);
+emit_16(1920);
+emit_16(1856);
+emit_16(1921);
+emit_16(1857);
+emit_16(1921);
+emit_16(1856);
+emit_16(1921);
+emit_16(1857);
+emit_16(1922);
+emit_16(1858);
+emit_16(1922);
+emit_16(1857);
+emit_16(1922);
+emit_16(1858);
+emit_16(1923);
+emit_16(1859);
+emit_16(1923);
+emit_16(1858);
+emit_16(1923);
+emit_16(1859);
+emit_16(1924);
+emit_16(1860);
+emit_16(1924);
+emit_16(1859);
+emit_16(1924);
+emit_16(1860);
+emit_16(1925);
+emit_16(1861);
+emit_16(1925);
+emit_16(1860);
+emit_16(1925);
+emit_16(1861);
+emit_16(1926);
+emit_16(1862);
+emit_16(1926);
+emit_16(1861);
+emit_16(1926);
+emit_16(1862);
+emit_16(1927);
+emit_16(1863);
+emit_16(1927);
+emit_16(1862);
+emit_16(1927);
+emit_16(1863);
+emit_16(1928);
+emit_16(1864);
+emit_16(1928);
+emit_16(1863);
+emit_16(1928);
+emit_16(1864);
+emit_16(1929);
+emit_16(1865);
+emit_16(1929);
+emit_16(1864);
+emit_16(1929);
+emit_16(1865);
+emit_16(1930);
+emit_16(1866);
+emit_16(1930);
+emit_16(1865);
+emit_16(1930);
+emit_16(1866);
+emit_16(1931);
+emit_16(1867);
+emit_16(1931);
+emit_16(1866);
+emit_16(1931);
+emit_16(1867);
+emit_16(1932);
+emit_16(1868);
+emit_16(1932);
+emit_16(1867);
+emit_16(1932);
+emit_16(1868);
+emit_16(1933);
+emit_16(1869);
+emit_16(1933);
+emit_16(1868);
+emit_16(1933);
+emit_16(1869);
+emit_16(1934);
+emit_16(1870);
+emit_16(1934);
+emit_16(1869);
+emit_16(1934);
+emit_16(1870);
+emit_16(1935);
+emit_16(1871);
+emit_16(1935);
+emit_16(1870);
+emit_16(1935);
+emit_16(1871);
+emit_16(1936);
+emit_16(1872);
+emit_16(1936);
+emit_16(1871);
+emit_16(1936);
+emit_16(1872);
+emit_16(1937);
+emit_16(1873);
+emit_16(1937);
+emit_16(1872);
+emit_16(1937);
+emit_16(1873);
+emit_16(1938);
+emit_16(1874);
+emit_16(1938);
+emit_16(1873);
+emit_16(1938);
+emit_16(1874);
+emit_16(1939);
+emit_16(1875);
+emit_16(1939);
+emit_16(1874);
+emit_16(1939);
+emit_16(1875);
+emit_16(1940);
+emit_16(1876);
+emit_16(1940);
+emit_16(1875);
+emit_16(1940);
+emit_16(1876);
+emit_16(1941);
+emit_16(1877);
+emit_16(1941);
+emit_16(1876);
+emit_16(1941);
+emit_16(1877);
+emit_16(1942);
+emit_16(1878);
+emit_16(1942);
+emit_16(1877);
+emit_16(1942);
+emit_16(1878);
+emit_16(1943);
+emit_16(1879);
+emit_16(1943);
+emit_16(1878);
+emit_16(1943);
+emit_16(1879);
+emit_16(1944);
+emit_16(1880);
+emit_16(1944);
+emit_16(1879);
+emit_16(1944);
+emit_16(1880);
+emit_16(1945);
+emit_16(1881);
+emit_16(1945);
+emit_16(1880);
+emit_16(1945);
+emit_16(1881);
+emit_16(1946);
+emit_16(1882);
+emit_16(1946);
+emit_16(1881);
+emit_16(1946);
+emit_16(1882);
+emit_16(1947);
+emit_16(1883);
+emit_16(1947);
+emit_16(1882);
+emit_16(1947);
+emit_16(1883);
+emit_16(1948);
+emit_16(1884);
+emit_16(1948);
+emit_16(1883);
+emit_16(1948);
+emit_16(1884);
+emit_16(1949);
+emit_16(1885);
+emit_16(1949);
+emit_16(1884);
+emit_16(1949);
+emit_16(1885);
+emit_16(1950);
+emit_16(1886);
+emit_16(1950);
+emit_16(1885);
+emit_16(1950);
+emit_16(1886);
+emit_16(1951);
+emit_16(1887);
+emit_16(1951);
+emit_16(1886);
+emit_16(1951);
+emit_16(1887);
+emit_16(1952);
+emit_16(1888);
+emit_16(1952);
+emit_16(1887);
+emit_16(1952);
+emit_16(1888);
+emit_16(1953);
+emit_16(1889);
+emit_16(1953);
+emit_16(1888);
+emit_16(1953);
+emit_16(1889);
+emit_16(1954);
+emit_16(1890);
+emit_16(1954);
+emit_16(1889);
+emit_16(1954);
+emit_16(1890);
+emit_16(1955);
+emit_16(1891);
+emit_16(1955);
+emit_16(1890);
+emit_16(1955);
+emit_16(1891);
+emit_16(1956);
+emit_16(1892);
+emit_16(1956);
+emit_16(1891);
+emit_16(1956);
+emit_16(1892);
+emit_16(1957);
+emit_16(1893);
+emit_16(1957);
+emit_16(1892);
+emit_16(1957);
+emit_16(1893);
+emit_16(1958);
+emit_16(1894);
+emit_16(1958);
+emit_16(1893);
+emit_16(1958);
+emit_16(1894);
+emit_16(1959);
+emit_16(1895);
+emit_16(1959);
+emit_16(1894);
+emit_16(1959);
+emit_16(1895);
+emit_16(1960);
+emit_16(1896);
+emit_16(1960);
+emit_16(1895);
+emit_16(1960);
+emit_16(1896);
+emit_16(1961);
+emit_16(1897);
+emit_16(1961);
+emit_16(1896);
+emit_16(1961);
+emit_16(1897);
+emit_16(1962);
+emit_16(1898);
+emit_16(1962);
+emit_16(1897);
+emit_16(1962);
+emit_16(1898);
+emit_16(1963);
+emit_16(1899);
+emit_16(1963);
+emit_16(1898);
+emit_16(1963);
+emit_16(1899);
+emit_16(1964);
+emit_16(1900);
+emit_16(1964);
+emit_16(1899);
+emit_16(1964);
+emit_16(1900);
+emit_16(1965);
+emit_16(1901);
+emit_16(1965);
+emit_16(1900);
+emit_16(1965);
+emit_16(1901);
+emit_16(1966);
+emit_16(1902);
+emit_16(1966);
+emit_16(1901);
+emit_16(1966);
+emit_16(1902);
+emit_16(1967);
+emit_16(1903);
+emit_16(1967);
+emit_16(1902);
+emit_16(1967);
+emit_16(1903);
+emit_16(1968);
+emit_16(1904);
+emit_16(1968);
+emit_16(1903);
+emit_16(1968);
+emit_16(1904);
+emit_16(1969);
+emit_16(1905);
+emit_16(1969);
+emit_16(1904);
+emit_16(1969);
+emit_16(1905);
+emit_16(1970);
+emit_16(1906);
+emit_16(1970);
+emit_16(1905);
+emit_16(1970);
+emit_16(1906);
+emit_16(1971);
+emit_16(1907);
+emit_16(1971);
+emit_16(1906);
+emit_16(1971);
+emit_16(1907);
+emit_16(1972);
+emit_16(1908);
+emit_16(1972);
+emit_16(1907);
+emit_16(1972);
+emit_16(1908);
+emit_16(1973);
+emit_16(1909);
+emit_16(1973);
+emit_16(1908);
+emit_16(1973);
+emit_16(1909);
+emit_16(1974);
+emit_16(1910);
+emit_16(1974);
+emit_16(1909);
+emit_16(1974);
+emit_16(1910);
+emit_16(1975);
+emit_16(1911);
+emit_16(1975);
+emit_16(1910);
+emit_16(1975);
+emit_16(1911);
+emit_16(1976);
+emit_16(1912);
+emit_16(1976);
+emit_16(1911);
+emit_16(1976);
+emit_16(1912);
+emit_16(1977);
+emit_16(1913);
+emit_16(1977);
+emit_16(1912);
+emit_16(1977);
+emit_16(1913);
+emit_16(1978);
+emit_16(1914);
+emit_16(1978);
+emit_16(1913);
+emit_16(1978);
+emit_16(1914);
+emit_16(1979);
+emit_16(1915);
+emit_16(1979);
+emit_16(1914);
+emit_16(1979);
+emit_16(1915);
+emit_16(1980);
+emit_16(1916);
+emit_16(1980);
+emit_16(1915);
+emit_16(1980);
+emit_16(1916);
+emit_16(1981);
+emit_16(1917);
+emit_16(1981);
+emit_16(1916);
+emit_16(1981);
+emit_16(1917);
+emit_16(1982);
+emit_16(1918);
+emit_16(1982);
+emit_16(1917);
+emit_16(1982);
+emit_16(1918);
+emit_16(1983);
+emit_16(1919);
+emit_16(1983);
+emit_16(1918);
+emit_16(1984);
+emit_16(1920);
+emit_16(1985);
+emit_16(1921);
+emit_16(1985);
+emit_16(1920);
+emit_16(1985);
+emit_16(1921);
+emit_16(1986);
+emit_16(1922);
+emit_16(1986);
+emit_16(1921);
+emit_16(1986);
+emit_16(1922);
+emit_16(1987);
+emit_16(1923);
+emit_16(1987);
+emit_16(1922);
+emit_16(1987);
+emit_16(1923);
+emit_16(1988);
+emit_16(1924);
+emit_16(1988);
+emit_16(1923);
+emit_16(1988);
+emit_16(1924);
+emit_16(1989);
+emit_16(1925);
+emit_16(1989);
+emit_16(1924);
+emit_16(1989);
+emit_16(1925);
+emit_16(1990);
+emit_16(1926);
+emit_16(1990);
+emit_16(1925);
+emit_16(1990);
+emit_16(1926);
+emit_16(1991);
+emit_16(1927);
+emit_16(1991);
+emit_16(1926);
+emit_16(1991);
+emit_16(1927);
+emit_16(1992);
+emit_16(1928);
+emit_16(1992);
+emit_16(1927);
+emit_16(1992);
+emit_16(1928);
+emit_16(1993);
+emit_16(1929);
+emit_16(1993);
+emit_16(1928);
+emit_16(1993);
+emit_16(1929);
+emit_16(1994);
+emit_16(1930);
+emit_16(1994);
+emit_16(1929);
+emit_16(1994);
+emit_16(1930);
+emit_16(1995);
+emit_16(1931);
+emit_16(1995);
+emit_16(1930);
+emit_16(1995);
+emit_16(1931);
+emit_16(1996);
+emit_16(1932);
+emit_16(1996);
+emit_16(1931);
+emit_16(1996);
+emit_16(1932);
+emit_16(1997);
+emit_16(1933);
+emit_16(1997);
+emit_16(1932);
+emit_16(1997);
+emit_16(1933);
+emit_16(1998);
+emit_16(1934);
+emit_16(1998);
+emit_16(1933);
+emit_16(1998);
+emit_16(1934);
+emit_16(1999);
+emit_16(1935);
+emit_16(1999);
+emit_16(1934);
+emit_16(1999);
+emit_16(1935);
+emit_16(2000);
+emit_16(1936);
+emit_16(2000);
+emit_16(1935);
+emit_16(2000);
+emit_16(1936);
+emit_16(2001);
+emit_16(1937);
+emit_16(2001);
+emit_16(1936);
+emit_16(2001);
+emit_16(1937);
+emit_16(2002);
+emit_16(1938);
+emit_16(2002);
+emit_16(1937);
+emit_16(2002);
+emit_16(1938);
+emit_16(2003);
+emit_16(1939);
+emit_16(2003);
+emit_16(1938);
+emit_16(2003);
+emit_16(1939);
+emit_16(2004);
+emit_16(1940);
+emit_16(2004);
+emit_16(1939);
+emit_16(2004);
+emit_16(1940);
+emit_16(2005);
+emit_16(1941);
+emit_16(2005);
+emit_16(1940);
+emit_16(2005);
+emit_16(1941);
+emit_16(2006);
+emit_16(1942);
+emit_16(2006);
+emit_16(1941);
+emit_16(2006);
+emit_16(1942);
+emit_16(2007);
+emit_16(1943);
+emit_16(2007);
+emit_16(1942);
+emit_16(2007);
+emit_16(1943);
+emit_16(2008);
+emit_16(1944);
+emit_16(2008);
+emit_16(1943);
+emit_16(2008);
+emit_16(1944);
+emit_16(2009);
+emit_16(1945);
+emit_16(2009);
+emit_16(1944);
+emit_16(2009);
+emit_16(1945);
+emit_16(2010);
+emit_16(1946);
+emit_16(2010);
+emit_16(1945);
+emit_16(2010);
+emit_16(1946);
+emit_16(2011);
+emit_16(1947);
+emit_16(2011);
+emit_16(1946);
+emit_16(2011);
+emit_16(1947);
+emit_16(2012);
+emit_16(1948);
+emit_16(2012);
+emit_16(1947);
+emit_16(2012);
+emit_16(1948);
+emit_16(2013);
+emit_16(1949);
+emit_16(2013);
+emit_16(1948);
+emit_16(2013);
+emit_16(1949);
+emit_16(2014);
+emit_16(1950);
+emit_16(2014);
+emit_16(1949);
+emit_16(2014);
+emit_16(1950);
+emit_16(2015);
+emit_16(1951);
+emit_16(2015);
+emit_16(1950);
+emit_16(2015);
+emit_16(1951);
+emit_16(2016);
+emit_16(1952);
+emit_16(2016);
+emit_16(1951);
+emit_16(2016);
+emit_16(1952);
+emit_16(2017);
+emit_16(1953);
+emit_16(2017);
+emit_16(1952);
+emit_16(2017);
+emit_16(1953);
+emit_16(2018);
+emit_16(1954);
+emit_16(2018);
+emit_16(1953);
+emit_16(2018);
+emit_16(1954);
+emit_16(2019);
+emit_16(1955);
+emit_16(2019);
+emit_16(1954);
+emit_16(2019);
+emit_16(1955);
+emit_16(2020);
+emit_16(1956);
+emit_16(2020);
+emit_16(1955);
+emit_16(2020);
+emit_16(1956);
+emit_16(2021);
+emit_16(1957);
+emit_16(2021);
+emit_16(1956);
+emit_16(2021);
+emit_16(1957);
+emit_16(2022);
+emit_16(1958);
+emit_16(2022);
+emit_16(1957);
+emit_16(2022);
+emit_16(1958);
+emit_16(2023);
+emit_16(1959);
+emit_16(2023);
+emit_16(1958);
+emit_16(2023);
+emit_16(1959);
+emit_16(2024);
+emit_16(1960);
+emit_16(2024);
+emit_16(1959);
+emit_16(2024);
+emit_16(1960);
+emit_16(2025);
+emit_16(1961);
+emit_16(2025);
+emit_16(1960);
+emit_16(2025);
+emit_16(1961);
+emit_16(2026);
+emit_16(1962);
+emit_16(2026);
+emit_16(1961);
+emit_16(2026);
+emit_16(1962);
+emit_16(2027);
+emit_16(1963);
+emit_16(2027);
+emit_16(1962);
+emit_16(2027);
+emit_16(1963);
+emit_16(2028);
+emit_16(1964);
+emit_16(2028);
+emit_16(1963);
+emit_16(2028);
+emit_16(1964);
+emit_16(2029);
+emit_16(1965);
+emit_16(2029);
+emit_16(1964);
+emit_16(2029);
+emit_16(1965);
+emit_16(2030);
+emit_16(1966);
+emit_16(2030);
+emit_16(1965);
+emit_16(2030);
+emit_16(1966);
+emit_16(2031);
+emit_16(1967);
+emit_16(2031);
+emit_16(1966);
+emit_16(2031);
+emit_16(1967);
+emit_16(2032);
+emit_16(1968);
+emit_16(2032);
+emit_16(1967);
+emit_16(2032);
+emit_16(1968);
+emit_16(2033);
+emit_16(1969);
+emit_16(2033);
+emit_16(1968);
+emit_16(2033);
+emit_16(1969);
+emit_16(2034);
+emit_16(1970);
+emit_16(2034);
+emit_16(1969);
+emit_16(2034);
+emit_16(1970);
+emit_16(2035);
+emit_16(1971);
+emit_16(2035);
+emit_16(1970);
+emit_16(2035);
+emit_16(1971);
+emit_16(2036);
+emit_16(1972);
+emit_16(2036);
+emit_16(1971);
+emit_16(2036);
+emit_16(1972);
+emit_16(2037);
+emit_16(1973);
+emit_16(2037);
+emit_16(1972);
+emit_16(2037);
+emit_16(1973);
+emit_16(2038);
+emit_16(1974);
+emit_16(2038);
+emit_16(1973);
+emit_16(2038);
+emit_16(1974);
+emit_16(2039);
+emit_16(1975);
+emit_16(2039);
+emit_16(1974);
+emit_16(2039);
+emit_16(1975);
+emit_16(2040);
+emit_16(1976);
+emit_16(2040);
+emit_16(1975);
+emit_16(2040);
+emit_16(1976);
+emit_16(2041);
+emit_16(1977);
+emit_16(2041);
+emit_16(1976);
+emit_16(2041);
+emit_16(1977);
+emit_16(2042);
+emit_16(1978);
+emit_16(2042);
+emit_16(1977);
+emit_16(2042);
+emit_16(1978);
+emit_16(2043);
+emit_16(1979);
+emit_16(2043);
+emit_16(1978);
+emit_16(2043);
+emit_16(1979);
+emit_16(2044);
+emit_16(1980);
+emit_16(2044);
+emit_16(1979);
+emit_16(2044);
+emit_16(1980);
+emit_16(2045);
+emit_16(1981);
+emit_16(2045);
+emit_16(1980);
+emit_16(2045);
+emit_16(1981);
+emit_16(2046);
+emit_16(1982);
+emit_16(2046);
+emit_16(1981);
+emit_16(2046);
+emit_16(1982);
+emit_16(2047);
+emit_16(1983);
+emit_16(2047);
+emit_16(1982);
+emit_start(Landscape04Idx)
+emit_16(0);
+emit_16(1);
+emit_16(2);
+emit_16(3);
+emit_16(2);
+emit_16(1);
+emit_16(2);
+emit_16(3);
+emit_16(4);
+emit_16(5);
+emit_16(4);
+emit_16(3);
+emit_16(4);
+emit_16(5);
+emit_16(6);
+emit_16(7);
+emit_16(6);
+emit_16(5);
+emit_16(6);
+emit_16(7);
+emit_16(8);
+emit_16(9);
+emit_16(8);
+emit_16(7);
+emit_16(8);
+emit_16(9);
+emit_16(10);
+emit_16(11);
+emit_16(10);
+emit_16(9);
+emit_16(10);
+emit_16(11);
+emit_16(12);
+emit_16(13);
+emit_16(12);
+emit_16(11);
+emit_16(12);
+emit_16(13);
+emit_16(14);
+emit_16(15);
+emit_16(14);
+emit_16(13);
+emit_16(14);
+emit_16(15);
+emit_16(16);
+emit_16(17);
+emit_16(16);
+emit_16(15);
+emit_16(16);
+emit_16(17);
+emit_16(18);
+emit_16(19);
+emit_16(18);
+emit_16(17);
+emit_16(18);
+emit_16(19);
+emit_16(20);
+emit_16(21);
+emit_16(20);
+emit_16(19);
+emit_16(20);
+emit_16(21);
+emit_16(22);
+emit_16(23);
+emit_16(22);
+emit_16(21);
+emit_16(22);
+emit_16(23);
+emit_16(24);
+emit_16(25);
+emit_16(24);
+emit_16(23);
+emit_16(24);
+emit_16(25);
+emit_16(26);
+emit_16(27);
+emit_16(26);
+emit_16(25);
+emit_16(26);
+emit_16(27);
+emit_16(28);
+emit_16(29);
+emit_16(28);
+emit_16(27);
+emit_16(28);
+emit_16(29);
+emit_16(30);
+emit_16(31);
+emit_16(30);
+emit_16(29);
+emit_16(30);
+emit_16(31);
+emit_16(32);
+emit_16(33);
+emit_16(32);
+emit_16(31);
+emit_16(32);
+emit_16(33);
+emit_16(34);
+emit_16(35);
+emit_16(34);
+emit_16(33);
+emit_16(34);
+emit_16(35);
+emit_16(36);
+emit_16(37);
+emit_16(36);
+emit_16(35);
+emit_16(36);
+emit_16(37);
+emit_16(38);
+emit_16(39);
+emit_16(38);
+emit_16(37);
+emit_16(38);
+emit_16(39);
+emit_16(40);
+emit_16(41);
+emit_16(40);
+emit_16(39);
+emit_16(40);
+emit_16(41);
+emit_16(42);
+emit_16(43);
+emit_16(42);
+emit_16(41);
+emit_16(42);
+emit_16(43);
+emit_16(44);
+emit_16(45);
+emit_16(44);
+emit_16(43);
+emit_16(44);
+emit_16(45);
+emit_16(46);
+emit_16(47);
+emit_16(46);
+emit_16(45);
+emit_16(46);
+emit_16(47);
+emit_16(48);
+emit_16(49);
+emit_16(48);
+emit_16(47);
+emit_16(48);
+emit_16(49);
+emit_16(50);
+emit_16(51);
+emit_16(50);
+emit_16(49);
+emit_16(50);
+emit_16(51);
+emit_16(52);
+emit_16(53);
+emit_16(52);
+emit_16(51);
+emit_16(52);
+emit_16(53);
+emit_16(54);
+emit_16(55);
+emit_16(54);
+emit_16(53);
+emit_16(54);
+emit_16(55);
+emit_16(56);
+emit_16(57);
+emit_16(56);
+emit_16(55);
+emit_16(56);
+emit_16(57);
+emit_16(58);
+emit_16(59);
+emit_16(58);
+emit_16(57);
+emit_16(58);
+emit_16(59);
+emit_16(60);
+emit_16(61);
+emit_16(60);
+emit_16(59);
+emit_16(60);
+emit_16(61);
+emit_16(62);
+emit_16(63);
+emit_16(62);
+emit_16(61);
+emit_16(62);
+emit_16(63);
+emit_16(64);
+emit_16(65);
+emit_16(64);
+emit_16(63);
+emit_16(64);
+emit_16(65);
+emit_16(66);
+emit_16(67);
+emit_16(66);
+emit_16(65);
+emit_16(66);
+emit_16(67);
+emit_16(68);
+emit_16(69);
+emit_16(68);
+emit_16(67);
+emit_16(68);
+emit_16(69);
+emit_16(70);
+emit_16(71);
+emit_16(70);
+emit_16(69);
+emit_16(70);
+emit_16(71);
+emit_16(72);
+emit_16(73);
+emit_16(72);
+emit_16(71);
+emit_16(72);
+emit_16(73);
+emit_16(74);
+emit_16(75);
+emit_16(74);
+emit_16(73);
+emit_16(74);
+emit_16(75);
+emit_16(76);
+emit_16(77);
+emit_16(76);
+emit_16(75);
+emit_16(76);
+emit_16(77);
+emit_16(78);
+emit_16(79);
+emit_16(78);
+emit_16(77);
+emit_16(78);
+emit_16(79);
+emit_16(80);
+emit_16(81);
+emit_16(80);
+emit_16(79);
+emit_16(80);
+emit_16(81);
+emit_16(82);
+emit_16(83);
+emit_16(82);
+emit_16(81);
+emit_16(82);
+emit_16(83);
+emit_16(84);
+emit_16(85);
+emit_16(84);
+emit_16(83);
+emit_16(84);
+emit_16(85);
+emit_16(86);
+emit_16(87);
+emit_16(86);
+emit_16(85);
+emit_16(86);
+emit_16(87);
+emit_16(88);
+emit_16(89);
+emit_16(88);
+emit_16(87);
+emit_16(88);
+emit_16(89);
+emit_16(90);
+emit_16(91);
+emit_16(90);
+emit_16(89);
+emit_16(90);
+emit_16(91);
+emit_16(92);
+emit_16(93);
+emit_16(92);
+emit_16(91);
+emit_16(92);
+emit_16(93);
+emit_16(94);
+emit_16(95);
+emit_16(94);
+emit_16(93);
+emit_16(94);
+emit_16(95);
+emit_16(96);
+emit_16(97);
+emit_16(96);
+emit_16(95);
+emit_16(96);
+emit_16(97);
+emit_16(98);
+emit_16(99);
+emit_16(98);
+emit_16(97);
+emit_16(98);
+emit_16(99);
+emit_16(100);
+emit_16(101);
+emit_16(100);
+emit_16(99);
+emit_16(100);
+emit_16(101);
+emit_16(102);
+emit_16(103);
+emit_16(102);
+emit_16(101);
+emit_16(102);
+emit_16(103);
+emit_16(104);
+emit_16(105);
+emit_16(104);
+emit_16(103);
+emit_16(104);
+emit_16(105);
+emit_16(106);
+emit_16(107);
+emit_16(106);
+emit_16(105);
+emit_16(106);
+emit_16(107);
+emit_16(108);
+emit_16(109);
+emit_16(108);
+emit_16(107);
+emit_16(108);
+emit_16(109);
+emit_16(110);
+emit_16(111);
+emit_16(110);
+emit_16(109);
+emit_16(110);
+emit_16(111);
+emit_16(112);
+emit_16(113);
+emit_16(112);
+emit_16(111);
+emit_16(112);
+emit_16(113);
+emit_16(114);
+emit_16(115);
+emit_16(114);
+emit_16(113);
+emit_16(114);
+emit_16(115);
+emit_16(116);
+emit_16(117);
+emit_16(116);
+emit_16(115);
+emit_16(116);
+emit_16(117);
+emit_16(118);
+emit_16(119);
+emit_16(118);
+emit_16(117);
+emit_16(118);
+emit_16(119);
+emit_16(120);
+emit_16(121);
+emit_16(120);
+emit_16(119);
+emit_16(120);
+emit_16(121);
+emit_16(122);
+emit_16(123);
+emit_16(122);
+emit_16(121);
+emit_16(122);
+emit_16(123);
+emit_16(124);
+emit_16(125);
+emit_16(124);
+emit_16(123);
+emit_16(124);
+emit_16(125);
+emit_16(126);
+emit_16(127);
+emit_16(126);
+emit_16(125);
+emit_16(128);
+emit_16(0);
+emit_16(129);
+emit_16(2);
+emit_16(129);
+emit_16(0);
+emit_16(129);
+emit_16(2);
+emit_16(130);
+emit_16(4);
+emit_16(130);
+emit_16(2);
+emit_16(130);
+emit_16(4);
+emit_16(131);
+emit_16(6);
+emit_16(131);
+emit_16(4);
+emit_16(131);
+emit_16(6);
+emit_16(132);
+emit_16(8);
+emit_16(132);
+emit_16(6);
+emit_16(132);
+emit_16(8);
+emit_16(133);
+emit_16(10);
+emit_16(133);
+emit_16(8);
+emit_16(133);
+emit_16(10);
+emit_16(134);
+emit_16(12);
+emit_16(134);
+emit_16(10);
+emit_16(134);
+emit_16(12);
+emit_16(135);
+emit_16(14);
+emit_16(135);
+emit_16(12);
+emit_16(135);
+emit_16(14);
+emit_16(136);
+emit_16(16);
+emit_16(136);
+emit_16(14);
+emit_16(136);
+emit_16(16);
+emit_16(137);
+emit_16(18);
+emit_16(137);
+emit_16(16);
+emit_16(137);
+emit_16(18);
+emit_16(138);
+emit_16(20);
+emit_16(138);
+emit_16(18);
+emit_16(138);
+emit_16(20);
+emit_16(139);
+emit_16(22);
+emit_16(139);
+emit_16(20);
+emit_16(139);
+emit_16(22);
+emit_16(140);
+emit_16(24);
+emit_16(140);
+emit_16(22);
+emit_16(140);
+emit_16(24);
+emit_16(141);
+emit_16(26);
+emit_16(141);
+emit_16(24);
+emit_16(141);
+emit_16(26);
+emit_16(142);
+emit_16(28);
+emit_16(142);
+emit_16(26);
+emit_16(142);
+emit_16(28);
+emit_16(143);
+emit_16(30);
+emit_16(143);
+emit_16(28);
+emit_16(143);
+emit_16(30);
+emit_16(144);
+emit_16(32);
+emit_16(144);
+emit_16(30);
+emit_16(144);
+emit_16(32);
+emit_16(145);
+emit_16(34);
+emit_16(145);
+emit_16(32);
+emit_16(145);
+emit_16(34);
+emit_16(146);
+emit_16(36);
+emit_16(146);
+emit_16(34);
+emit_16(146);
+emit_16(36);
+emit_16(147);
+emit_16(38);
+emit_16(147);
+emit_16(36);
+emit_16(147);
+emit_16(38);
+emit_16(148);
+emit_16(40);
+emit_16(148);
+emit_16(38);
+emit_16(148);
+emit_16(40);
+emit_16(149);
+emit_16(42);
+emit_16(149);
+emit_16(40);
+emit_16(149);
+emit_16(42);
+emit_16(150);
+emit_16(44);
+emit_16(150);
+emit_16(42);
+emit_16(150);
+emit_16(44);
+emit_16(151);
+emit_16(46);
+emit_16(151);
+emit_16(44);
+emit_16(151);
+emit_16(46);
+emit_16(152);
+emit_16(48);
+emit_16(152);
+emit_16(46);
+emit_16(152);
+emit_16(48);
+emit_16(153);
+emit_16(50);
+emit_16(153);
+emit_16(48);
+emit_16(153);
+emit_16(50);
+emit_16(154);
+emit_16(52);
+emit_16(154);
+emit_16(50);
+emit_16(154);
+emit_16(52);
+emit_16(155);
+emit_16(54);
+emit_16(155);
+emit_16(52);
+emit_16(155);
+emit_16(54);
+emit_16(156);
+emit_16(56);
+emit_16(156);
+emit_16(54);
+emit_16(156);
+emit_16(56);
+emit_16(157);
+emit_16(58);
+emit_16(157);
+emit_16(56);
+emit_16(157);
+emit_16(58);
+emit_16(158);
+emit_16(60);
+emit_16(158);
+emit_16(58);
+emit_16(158);
+emit_16(60);
+emit_16(159);
+emit_16(62);
+emit_16(159);
+emit_16(60);
+emit_16(159);
+emit_16(62);
+emit_16(160);
+emit_16(64);
+emit_16(160);
+emit_16(62);
+emit_16(160);
+emit_16(64);
+emit_16(161);
+emit_16(66);
+emit_16(161);
+emit_16(64);
+emit_16(161);
+emit_16(66);
+emit_16(162);
+emit_16(68);
+emit_16(162);
+emit_16(66);
+emit_16(162);
+emit_16(68);
+emit_16(163);
+emit_16(70);
+emit_16(163);
+emit_16(68);
+emit_16(163);
+emit_16(70);
+emit_16(164);
+emit_16(72);
+emit_16(164);
+emit_16(70);
+emit_16(164);
+emit_16(72);
+emit_16(165);
+emit_16(74);
+emit_16(165);
+emit_16(72);
+emit_16(165);
+emit_16(74);
+emit_16(166);
+emit_16(76);
+emit_16(166);
+emit_16(74);
+emit_16(166);
+emit_16(76);
+emit_16(167);
+emit_16(78);
+emit_16(167);
+emit_16(76);
+emit_16(167);
+emit_16(78);
+emit_16(168);
+emit_16(80);
+emit_16(168);
+emit_16(78);
+emit_16(168);
+emit_16(80);
+emit_16(169);
+emit_16(82);
+emit_16(169);
+emit_16(80);
+emit_16(169);
+emit_16(82);
+emit_16(170);
+emit_16(84);
+emit_16(170);
+emit_16(82);
+emit_16(170);
+emit_16(84);
+emit_16(171);
+emit_16(86);
+emit_16(171);
+emit_16(84);
+emit_16(171);
+emit_16(86);
+emit_16(172);
+emit_16(88);
+emit_16(172);
+emit_16(86);
+emit_16(172);
+emit_16(88);
+emit_16(173);
+emit_16(90);
+emit_16(173);
+emit_16(88);
+emit_16(173);
+emit_16(90);
+emit_16(174);
+emit_16(92);
+emit_16(174);
+emit_16(90);
+emit_16(174);
+emit_16(92);
+emit_16(175);
+emit_16(94);
+emit_16(175);
+emit_16(92);
+emit_16(175);
+emit_16(94);
+emit_16(176);
+emit_16(96);
+emit_16(176);
+emit_16(94);
+emit_16(176);
+emit_16(96);
+emit_16(177);
+emit_16(98);
+emit_16(177);
+emit_16(96);
+emit_16(177);
+emit_16(98);
+emit_16(178);
+emit_16(100);
+emit_16(178);
+emit_16(98);
+emit_16(178);
+emit_16(100);
+emit_16(179);
+emit_16(102);
+emit_16(179);
+emit_16(100);
+emit_16(179);
+emit_16(102);
+emit_16(180);
+emit_16(104);
+emit_16(180);
+emit_16(102);
+emit_16(180);
+emit_16(104);
+emit_16(181);
+emit_16(106);
+emit_16(181);
+emit_16(104);
+emit_16(181);
+emit_16(106);
+emit_16(182);
+emit_16(108);
+emit_16(182);
+emit_16(106);
+emit_16(182);
+emit_16(108);
+emit_16(183);
+emit_16(110);
+emit_16(183);
+emit_16(108);
+emit_16(183);
+emit_16(110);
+emit_16(184);
+emit_16(112);
+emit_16(184);
+emit_16(110);
+emit_16(184);
+emit_16(112);
+emit_16(185);
+emit_16(114);
+emit_16(185);
+emit_16(112);
+emit_16(185);
+emit_16(114);
+emit_16(186);
+emit_16(116);
+emit_16(186);
+emit_16(114);
+emit_16(186);
+emit_16(116);
+emit_16(187);
+emit_16(118);
+emit_16(187);
+emit_16(116);
+emit_16(187);
+emit_16(118);
+emit_16(188);
+emit_16(120);
+emit_16(188);
+emit_16(118);
+emit_16(188);
+emit_16(120);
+emit_16(189);
+emit_16(122);
+emit_16(189);
+emit_16(120);
+emit_16(189);
+emit_16(122);
+emit_16(190);
+emit_16(124);
+emit_16(190);
+emit_16(122);
+emit_16(190);
+emit_16(124);
+emit_16(191);
+emit_16(126);
+emit_16(191);
+emit_16(124);
+emit_16(192);
+emit_16(128);
+emit_16(193);
+emit_16(129);
+emit_16(193);
+emit_16(128);
+emit_16(193);
+emit_16(129);
+emit_16(194);
+emit_16(130);
+emit_16(194);
+emit_16(129);
+emit_16(194);
+emit_16(130);
+emit_16(195);
+emit_16(131);
+emit_16(195);
+emit_16(130);
+emit_16(195);
+emit_16(131);
+emit_16(196);
+emit_16(132);
+emit_16(196);
+emit_16(131);
+emit_16(196);
+emit_16(132);
+emit_16(197);
+emit_16(133);
+emit_16(197);
+emit_16(132);
+emit_16(197);
+emit_16(133);
+emit_16(198);
+emit_16(134);
+emit_16(198);
+emit_16(133);
+emit_16(198);
+emit_16(134);
+emit_16(199);
+emit_16(135);
+emit_16(199);
+emit_16(134);
+emit_16(199);
+emit_16(135);
+emit_16(200);
+emit_16(136);
+emit_16(200);
+emit_16(135);
+emit_16(200);
+emit_16(136);
+emit_16(201);
+emit_16(137);
+emit_16(201);
+emit_16(136);
+emit_16(201);
+emit_16(137);
+emit_16(202);
+emit_16(138);
+emit_16(202);
+emit_16(137);
+emit_16(202);
+emit_16(138);
+emit_16(203);
+emit_16(139);
+emit_16(203);
+emit_16(138);
+emit_16(203);
+emit_16(139);
+emit_16(204);
+emit_16(140);
+emit_16(204);
+emit_16(139);
+emit_16(204);
+emit_16(140);
+emit_16(205);
+emit_16(141);
+emit_16(205);
+emit_16(140);
+emit_16(205);
+emit_16(141);
+emit_16(206);
+emit_16(142);
+emit_16(206);
+emit_16(141);
+emit_16(206);
+emit_16(142);
+emit_16(207);
+emit_16(143);
+emit_16(207);
+emit_16(142);
+emit_16(207);
+emit_16(143);
+emit_16(208);
+emit_16(144);
+emit_16(208);
+emit_16(143);
+emit_16(208);
+emit_16(144);
+emit_16(209);
+emit_16(145);
+emit_16(209);
+emit_16(144);
+emit_16(209);
+emit_16(145);
+emit_16(210);
+emit_16(146);
+emit_16(210);
+emit_16(145);
+emit_16(210);
+emit_16(146);
+emit_16(211);
+emit_16(147);
+emit_16(211);
+emit_16(146);
+emit_16(211);
+emit_16(147);
+emit_16(212);
+emit_16(148);
+emit_16(212);
+emit_16(147);
+emit_16(212);
+emit_16(148);
+emit_16(213);
+emit_16(149);
+emit_16(213);
+emit_16(148);
+emit_16(213);
+emit_16(149);
+emit_16(214);
+emit_16(150);
+emit_16(214);
+emit_16(149);
+emit_16(214);
+emit_16(150);
+emit_16(215);
+emit_16(151);
+emit_16(215);
+emit_16(150);
+emit_16(215);
+emit_16(151);
+emit_16(216);
+emit_16(152);
+emit_16(216);
+emit_16(151);
+emit_16(216);
+emit_16(152);
+emit_16(217);
+emit_16(153);
+emit_16(217);
+emit_16(152);
+emit_16(217);
+emit_16(153);
+emit_16(218);
+emit_16(154);
+emit_16(218);
+emit_16(153);
+emit_16(218);
+emit_16(154);
+emit_16(219);
+emit_16(155);
+emit_16(219);
+emit_16(154);
+emit_16(219);
+emit_16(155);
+emit_16(220);
+emit_16(156);
+emit_16(220);
+emit_16(155);
+emit_16(220);
+emit_16(156);
+emit_16(221);
+emit_16(157);
+emit_16(221);
+emit_16(156);
+emit_16(221);
+emit_16(157);
+emit_16(222);
+emit_16(158);
+emit_16(222);
+emit_16(157);
+emit_16(222);
+emit_16(158);
+emit_16(223);
+emit_16(159);
+emit_16(223);
+emit_16(158);
+emit_16(223);
+emit_16(159);
+emit_16(224);
+emit_16(160);
+emit_16(224);
+emit_16(159);
+emit_16(224);
+emit_16(160);
+emit_16(225);
+emit_16(161);
+emit_16(225);
+emit_16(160);
+emit_16(225);
+emit_16(161);
+emit_16(226);
+emit_16(162);
+emit_16(226);
+emit_16(161);
+emit_16(226);
+emit_16(162);
+emit_16(227);
+emit_16(163);
+emit_16(227);
+emit_16(162);
+emit_16(227);
+emit_16(163);
+emit_16(228);
+emit_16(164);
+emit_16(228);
+emit_16(163);
+emit_16(228);
+emit_16(164);
+emit_16(229);
+emit_16(165);
+emit_16(229);
+emit_16(164);
+emit_16(229);
+emit_16(165);
+emit_16(230);
+emit_16(166);
+emit_16(230);
+emit_16(165);
+emit_16(230);
+emit_16(166);
+emit_16(231);
+emit_16(167);
+emit_16(231);
+emit_16(166);
+emit_16(231);
+emit_16(167);
+emit_16(232);
+emit_16(168);
+emit_16(232);
+emit_16(167);
+emit_16(232);
+emit_16(168);
+emit_16(233);
+emit_16(169);
+emit_16(233);
+emit_16(168);
+emit_16(233);
+emit_16(169);
+emit_16(234);
+emit_16(170);
+emit_16(234);
+emit_16(169);
+emit_16(234);
+emit_16(170);
+emit_16(235);
+emit_16(171);
+emit_16(235);
+emit_16(170);
+emit_16(235);
+emit_16(171);
+emit_16(236);
+emit_16(172);
+emit_16(236);
+emit_16(171);
+emit_16(236);
+emit_16(172);
+emit_16(237);
+emit_16(173);
+emit_16(237);
+emit_16(172);
+emit_16(237);
+emit_16(173);
+emit_16(238);
+emit_16(174);
+emit_16(238);
+emit_16(173);
+emit_16(238);
+emit_16(174);
+emit_16(239);
+emit_16(175);
+emit_16(239);
+emit_16(174);
+emit_16(239);
+emit_16(175);
+emit_16(240);
+emit_16(176);
+emit_16(240);
+emit_16(175);
+emit_16(240);
+emit_16(176);
+emit_16(241);
+emit_16(177);
+emit_16(241);
+emit_16(176);
+emit_16(241);
+emit_16(177);
+emit_16(242);
+emit_16(178);
+emit_16(242);
+emit_16(177);
+emit_16(242);
+emit_16(178);
+emit_16(243);
+emit_16(179);
+emit_16(243);
+emit_16(178);
+emit_16(243);
+emit_16(179);
+emit_16(244);
+emit_16(180);
+emit_16(244);
+emit_16(179);
+emit_16(244);
+emit_16(180);
+emit_16(245);
+emit_16(181);
+emit_16(245);
+emit_16(180);
+emit_16(245);
+emit_16(181);
+emit_16(246);
+emit_16(182);
+emit_16(246);
+emit_16(181);
+emit_16(246);
+emit_16(182);
+emit_16(247);
+emit_16(183);
+emit_16(247);
+emit_16(182);
+emit_16(247);
+emit_16(183);
+emit_16(248);
+emit_16(184);
+emit_16(248);
+emit_16(183);
+emit_16(248);
+emit_16(184);
+emit_16(249);
+emit_16(185);
+emit_16(249);
+emit_16(184);
+emit_16(249);
+emit_16(185);
+emit_16(250);
+emit_16(186);
+emit_16(250);
+emit_16(185);
+emit_16(250);
+emit_16(186);
+emit_16(251);
+emit_16(187);
+emit_16(251);
+emit_16(186);
+emit_16(251);
+emit_16(187);
+emit_16(252);
+emit_16(188);
+emit_16(252);
+emit_16(187);
+emit_16(252);
+emit_16(188);
+emit_16(253);
+emit_16(189);
+emit_16(253);
+emit_16(188);
+emit_16(253);
+emit_16(189);
+emit_16(254);
+emit_16(190);
+emit_16(254);
+emit_16(189);
+emit_16(254);
+emit_16(190);
+emit_16(255);
+emit_16(191);
+emit_16(255);
+emit_16(190);
+emit_16(256);
+emit_16(192);
+emit_16(257);
+emit_16(193);
+emit_16(257);
+emit_16(192);
+emit_16(257);
+emit_16(193);
+emit_16(258);
+emit_16(194);
+emit_16(258);
+emit_16(193);
+emit_16(258);
+emit_16(194);
+emit_16(259);
+emit_16(195);
+emit_16(259);
+emit_16(194);
+emit_16(259);
+emit_16(195);
+emit_16(260);
+emit_16(196);
+emit_16(260);
+emit_16(195);
+emit_16(260);
+emit_16(196);
+emit_16(261);
+emit_16(197);
+emit_16(261);
+emit_16(196);
+emit_16(261);
+emit_16(197);
+emit_16(262);
+emit_16(198);
+emit_16(262);
+emit_16(197);
+emit_16(262);
+emit_16(198);
+emit_16(263);
+emit_16(199);
+emit_16(263);
+emit_16(198);
+emit_16(263);
+emit_16(199);
+emit_16(264);
+emit_16(200);
+emit_16(264);
+emit_16(199);
+emit_16(264);
+emit_16(200);
+emit_16(265);
+emit_16(201);
+emit_16(265);
+emit_16(200);
+emit_16(265);
+emit_16(201);
+emit_16(266);
+emit_16(202);
+emit_16(266);
+emit_16(201);
+emit_16(266);
+emit_16(202);
+emit_16(267);
+emit_16(203);
+emit_16(267);
+emit_16(202);
+emit_16(267);
+emit_16(203);
+emit_16(268);
+emit_16(204);
+emit_16(268);
+emit_16(203);
+emit_16(268);
+emit_16(204);
+emit_16(269);
+emit_16(205);
+emit_16(269);
+emit_16(204);
+emit_16(269);
+emit_16(205);
+emit_16(270);
+emit_16(206);
+emit_16(270);
+emit_16(205);
+emit_16(270);
+emit_16(206);
+emit_16(271);
+emit_16(207);
+emit_16(271);
+emit_16(206);
+emit_16(271);
+emit_16(207);
+emit_16(272);
+emit_16(208);
+emit_16(272);
+emit_16(207);
+emit_16(272);
+emit_16(208);
+emit_16(273);
+emit_16(209);
+emit_16(273);
+emit_16(208);
+emit_16(273);
+emit_16(209);
+emit_16(274);
+emit_16(210);
+emit_16(274);
+emit_16(209);
+emit_16(274);
+emit_16(210);
+emit_16(275);
+emit_16(211);
+emit_16(275);
+emit_16(210);
+emit_16(275);
+emit_16(211);
+emit_16(276);
+emit_16(212);
+emit_16(276);
+emit_16(211);
+emit_16(276);
+emit_16(212);
+emit_16(277);
+emit_16(213);
+emit_16(277);
+emit_16(212);
+emit_16(277);
+emit_16(213);
+emit_16(278);
+emit_16(214);
+emit_16(278);
+emit_16(213);
+emit_16(278);
+emit_16(214);
+emit_16(279);
+emit_16(215);
+emit_16(279);
+emit_16(214);
+emit_16(279);
+emit_16(215);
+emit_16(280);
+emit_16(216);
+emit_16(280);
+emit_16(215);
+emit_16(280);
+emit_16(216);
+emit_16(281);
+emit_16(217);
+emit_16(281);
+emit_16(216);
+emit_16(281);
+emit_16(217);
+emit_16(282);
+emit_16(218);
+emit_16(282);
+emit_16(217);
+emit_16(282);
+emit_16(218);
+emit_16(283);
+emit_16(219);
+emit_16(283);
+emit_16(218);
+emit_16(283);
+emit_16(219);
+emit_16(284);
+emit_16(220);
+emit_16(284);
+emit_16(219);
+emit_16(284);
+emit_16(220);
+emit_16(285);
+emit_16(221);
+emit_16(285);
+emit_16(220);
+emit_16(285);
+emit_16(221);
+emit_16(286);
+emit_16(222);
+emit_16(286);
+emit_16(221);
+emit_16(286);
+emit_16(222);
+emit_16(287);
+emit_16(223);
+emit_16(287);
+emit_16(222);
+emit_16(287);
+emit_16(223);
+emit_16(288);
+emit_16(224);
+emit_16(288);
+emit_16(223);
+emit_16(288);
+emit_16(224);
+emit_16(289);
+emit_16(225);
+emit_16(289);
+emit_16(224);
+emit_16(289);
+emit_16(225);
+emit_16(290);
+emit_16(226);
+emit_16(290);
+emit_16(225);
+emit_16(290);
+emit_16(226);
+emit_16(291);
+emit_16(227);
+emit_16(291);
+emit_16(226);
+emit_16(291);
+emit_16(227);
+emit_16(292);
+emit_16(228);
+emit_16(292);
+emit_16(227);
+emit_16(292);
+emit_16(228);
+emit_16(293);
+emit_16(229);
+emit_16(293);
+emit_16(228);
+emit_16(293);
+emit_16(229);
+emit_16(294);
+emit_16(230);
+emit_16(294);
+emit_16(229);
+emit_16(294);
+emit_16(230);
+emit_16(295);
+emit_16(231);
+emit_16(295);
+emit_16(230);
+emit_16(295);
+emit_16(231);
+emit_16(296);
+emit_16(232);
+emit_16(296);
+emit_16(231);
+emit_16(296);
+emit_16(232);
+emit_16(297);
+emit_16(233);
+emit_16(297);
+emit_16(232);
+emit_16(297);
+emit_16(233);
+emit_16(298);
+emit_16(234);
+emit_16(298);
+emit_16(233);
+emit_16(298);
+emit_16(234);
+emit_16(299);
+emit_16(235);
+emit_16(299);
+emit_16(234);
+emit_16(299);
+emit_16(235);
+emit_16(300);
+emit_16(236);
+emit_16(300);
+emit_16(235);
+emit_16(300);
+emit_16(236);
+emit_16(301);
+emit_16(237);
+emit_16(301);
+emit_16(236);
+emit_16(301);
+emit_16(237);
+emit_16(302);
+emit_16(238);
+emit_16(302);
+emit_16(237);
+emit_16(302);
+emit_16(238);
+emit_16(303);
+emit_16(239);
+emit_16(303);
+emit_16(238);
+emit_16(303);
+emit_16(239);
+emit_16(304);
+emit_16(240);
+emit_16(304);
+emit_16(239);
+emit_16(304);
+emit_16(240);
+emit_16(305);
+emit_16(241);
+emit_16(305);
+emit_16(240);
+emit_16(305);
+emit_16(241);
+emit_16(306);
+emit_16(242);
+emit_16(306);
+emit_16(241);
+emit_16(306);
+emit_16(242);
+emit_16(307);
+emit_16(243);
+emit_16(307);
+emit_16(242);
+emit_16(307);
+emit_16(243);
+emit_16(308);
+emit_16(244);
+emit_16(308);
+emit_16(243);
+emit_16(308);
+emit_16(244);
+emit_16(309);
+emit_16(245);
+emit_16(309);
+emit_16(244);
+emit_16(309);
+emit_16(245);
+emit_16(310);
+emit_16(246);
+emit_16(310);
+emit_16(245);
+emit_16(310);
+emit_16(246);
+emit_16(311);
+emit_16(247);
+emit_16(311);
+emit_16(246);
+emit_16(311);
+emit_16(247);
+emit_16(312);
+emit_16(248);
+emit_16(312);
+emit_16(247);
+emit_16(312);
+emit_16(248);
+emit_16(313);
+emit_16(249);
+emit_16(313);
+emit_16(248);
+emit_16(313);
+emit_16(249);
+emit_16(314);
+emit_16(250);
+emit_16(314);
+emit_16(249);
+emit_16(314);
+emit_16(250);
+emit_16(315);
+emit_16(251);
+emit_16(315);
+emit_16(250);
+emit_16(315);
+emit_16(251);
+emit_16(316);
+emit_16(252);
+emit_16(316);
+emit_16(251);
+emit_16(316);
+emit_16(252);
+emit_16(317);
+emit_16(253);
+emit_16(317);
+emit_16(252);
+emit_16(317);
+emit_16(253);
+emit_16(318);
+emit_16(254);
+emit_16(318);
+emit_16(253);
+emit_16(318);
+emit_16(254);
+emit_16(319);
+emit_16(255);
+emit_16(319);
+emit_16(254);
+emit_16(320);
+emit_16(256);
+emit_16(321);
+emit_16(257);
+emit_16(321);
+emit_16(256);
+emit_16(321);
+emit_16(257);
+emit_16(322);
+emit_16(258);
+emit_16(322);
+emit_16(257);
+emit_16(322);
+emit_16(258);
+emit_16(323);
+emit_16(259);
+emit_16(323);
+emit_16(258);
+emit_16(323);
+emit_16(259);
+emit_16(324);
+emit_16(260);
+emit_16(324);
+emit_16(259);
+emit_16(324);
+emit_16(260);
+emit_16(325);
+emit_16(261);
+emit_16(325);
+emit_16(260);
+emit_16(325);
+emit_16(261);
+emit_16(326);
+emit_16(262);
+emit_16(326);
+emit_16(261);
+emit_16(326);
+emit_16(262);
+emit_16(327);
+emit_16(263);
+emit_16(327);
+emit_16(262);
+emit_16(327);
+emit_16(263);
+emit_16(328);
+emit_16(264);
+emit_16(328);
+emit_16(263);
+emit_16(328);
+emit_16(264);
+emit_16(329);
+emit_16(265);
+emit_16(329);
+emit_16(264);
+emit_16(329);
+emit_16(265);
+emit_16(330);
+emit_16(266);
+emit_16(330);
+emit_16(265);
+emit_16(330);
+emit_16(266);
+emit_16(331);
+emit_16(267);
+emit_16(331);
+emit_16(266);
+emit_16(331);
+emit_16(267);
+emit_16(332);
+emit_16(268);
+emit_16(332);
+emit_16(267);
+emit_16(332);
+emit_16(268);
+emit_16(333);
+emit_16(269);
+emit_16(333);
+emit_16(268);
+emit_16(333);
+emit_16(269);
+emit_16(334);
+emit_16(270);
+emit_16(334);
+emit_16(269);
+emit_16(334);
+emit_16(270);
+emit_16(335);
+emit_16(271);
+emit_16(335);
+emit_16(270);
+emit_16(335);
+emit_16(271);
+emit_16(336);
+emit_16(272);
+emit_16(336);
+emit_16(271);
+emit_16(336);
+emit_16(272);
+emit_16(337);
+emit_16(273);
+emit_16(337);
+emit_16(272);
+emit_16(337);
+emit_16(273);
+emit_16(338);
+emit_16(274);
+emit_16(338);
+emit_16(273);
+emit_16(338);
+emit_16(274);
+emit_16(339);
+emit_16(275);
+emit_16(339);
+emit_16(274);
+emit_16(339);
+emit_16(275);
+emit_16(340);
+emit_16(276);
+emit_16(340);
+emit_16(275);
+emit_16(340);
+emit_16(276);
+emit_16(341);
+emit_16(277);
+emit_16(341);
+emit_16(276);
+emit_16(341);
+emit_16(277);
+emit_16(342);
+emit_16(278);
+emit_16(342);
+emit_16(277);
+emit_16(342);
+emit_16(278);
+emit_16(343);
+emit_16(279);
+emit_16(343);
+emit_16(278);
+emit_16(343);
+emit_16(279);
+emit_16(344);
+emit_16(280);
+emit_16(344);
+emit_16(279);
+emit_16(344);
+emit_16(280);
+emit_16(345);
+emit_16(281);
+emit_16(345);
+emit_16(280);
+emit_16(345);
+emit_16(281);
+emit_16(346);
+emit_16(282);
+emit_16(346);
+emit_16(281);
+emit_16(346);
+emit_16(282);
+emit_16(347);
+emit_16(283);
+emit_16(347);
+emit_16(282);
+emit_16(347);
+emit_16(283);
+emit_16(348);
+emit_16(284);
+emit_16(348);
+emit_16(283);
+emit_16(348);
+emit_16(284);
+emit_16(349);
+emit_16(285);
+emit_16(349);
+emit_16(284);
+emit_16(349);
+emit_16(285);
+emit_16(350);
+emit_16(286);
+emit_16(350);
+emit_16(285);
+emit_16(350);
+emit_16(286);
+emit_16(351);
+emit_16(287);
+emit_16(351);
+emit_16(286);
+emit_16(351);
+emit_16(287);
+emit_16(352);
+emit_16(288);
+emit_16(352);
+emit_16(287);
+emit_16(352);
+emit_16(288);
+emit_16(353);
+emit_16(289);
+emit_16(353);
+emit_16(288);
+emit_16(353);
+emit_16(289);
+emit_16(354);
+emit_16(290);
+emit_16(354);
+emit_16(289);
+emit_16(354);
+emit_16(290);
+emit_16(355);
+emit_16(291);
+emit_16(355);
+emit_16(290);
+emit_16(355);
+emit_16(291);
+emit_16(356);
+emit_16(292);
+emit_16(356);
+emit_16(291);
+emit_16(356);
+emit_16(292);
+emit_16(357);
+emit_16(293);
+emit_16(357);
+emit_16(292);
+emit_16(357);
+emit_16(293);
+emit_16(358);
+emit_16(294);
+emit_16(358);
+emit_16(293);
+emit_16(358);
+emit_16(294);
+emit_16(359);
+emit_16(295);
+emit_16(359);
+emit_16(294);
+emit_16(359);
+emit_16(295);
+emit_16(360);
+emit_16(296);
+emit_16(360);
+emit_16(295);
+emit_16(360);
+emit_16(296);
+emit_16(361);
+emit_16(297);
+emit_16(361);
+emit_16(296);
+emit_16(361);
+emit_16(297);
+emit_16(362);
+emit_16(298);
+emit_16(362);
+emit_16(297);
+emit_16(362);
+emit_16(298);
+emit_16(363);
+emit_16(299);
+emit_16(363);
+emit_16(298);
+emit_16(363);
+emit_16(299);
+emit_16(364);
+emit_16(300);
+emit_16(364);
+emit_16(299);
+emit_16(364);
+emit_16(300);
+emit_16(365);
+emit_16(301);
+emit_16(365);
+emit_16(300);
+emit_16(365);
+emit_16(301);
+emit_16(366);
+emit_16(302);
+emit_16(366);
+emit_16(301);
+emit_16(366);
+emit_16(302);
+emit_16(367);
+emit_16(303);
+emit_16(367);
+emit_16(302);
+emit_16(367);
+emit_16(303);
+emit_16(368);
+emit_16(304);
+emit_16(368);
+emit_16(303);
+emit_16(368);
+emit_16(304);
+emit_16(369);
+emit_16(305);
+emit_16(369);
+emit_16(304);
+emit_16(369);
+emit_16(305);
+emit_16(370);
+emit_16(306);
+emit_16(370);
+emit_16(305);
+emit_16(370);
+emit_16(306);
+emit_16(371);
+emit_16(307);
+emit_16(371);
+emit_16(306);
+emit_16(371);
+emit_16(307);
+emit_16(372);
+emit_16(308);
+emit_16(372);
+emit_16(307);
+emit_16(372);
+emit_16(308);
+emit_16(373);
+emit_16(309);
+emit_16(373);
+emit_16(308);
+emit_16(373);
+emit_16(309);
+emit_16(374);
+emit_16(310);
+emit_16(374);
+emit_16(309);
+emit_16(374);
+emit_16(310);
+emit_16(375);
+emit_16(311);
+emit_16(375);
+emit_16(310);
+emit_16(375);
+emit_16(311);
+emit_16(376);
+emit_16(312);
+emit_16(376);
+emit_16(311);
+emit_16(376);
+emit_16(312);
+emit_16(377);
+emit_16(313);
+emit_16(377);
+emit_16(312);
+emit_16(377);
+emit_16(313);
+emit_16(378);
+emit_16(314);
+emit_16(378);
+emit_16(313);
+emit_16(378);
+emit_16(314);
+emit_16(379);
+emit_16(315);
+emit_16(379);
+emit_16(314);
+emit_16(379);
+emit_16(315);
+emit_16(380);
+emit_16(316);
+emit_16(380);
+emit_16(315);
+emit_16(380);
+emit_16(316);
+emit_16(381);
+emit_16(317);
+emit_16(381);
+emit_16(316);
+emit_16(381);
+emit_16(317);
+emit_16(382);
+emit_16(318);
+emit_16(382);
+emit_16(317);
+emit_16(382);
+emit_16(318);
+emit_16(383);
+emit_16(319);
+emit_16(383);
+emit_16(318);
+emit_16(384);
+emit_16(320);
+emit_16(385);
+emit_16(321);
+emit_16(385);
+emit_16(320);
+emit_16(385);
+emit_16(321);
+emit_16(386);
+emit_16(322);
+emit_16(386);
+emit_16(321);
+emit_16(386);
+emit_16(322);
+emit_16(387);
+emit_16(323);
+emit_16(387);
+emit_16(322);
+emit_16(387);
+emit_16(323);
+emit_16(388);
+emit_16(324);
+emit_16(388);
+emit_16(323);
+emit_16(388);
+emit_16(324);
+emit_16(389);
+emit_16(325);
+emit_16(389);
+emit_16(324);
+emit_16(389);
+emit_16(325);
+emit_16(390);
+emit_16(326);
+emit_16(390);
+emit_16(325);
+emit_16(390);
+emit_16(326);
+emit_16(391);
+emit_16(327);
+emit_16(391);
+emit_16(326);
+emit_16(391);
+emit_16(327);
+emit_16(392);
+emit_16(328);
+emit_16(392);
+emit_16(327);
+emit_16(392);
+emit_16(328);
+emit_16(393);
+emit_16(329);
+emit_16(393);
+emit_16(328);
+emit_16(393);
+emit_16(329);
+emit_16(394);
+emit_16(330);
+emit_16(394);
+emit_16(329);
+emit_16(394);
+emit_16(330);
+emit_16(395);
+emit_16(331);
+emit_16(395);
+emit_16(330);
+emit_16(395);
+emit_16(331);
+emit_16(396);
+emit_16(332);
+emit_16(396);
+emit_16(331);
+emit_16(396);
+emit_16(332);
+emit_16(397);
+emit_16(333);
+emit_16(397);
+emit_16(332);
+emit_16(397);
+emit_16(333);
+emit_16(398);
+emit_16(334);
+emit_16(398);
+emit_16(333);
+emit_16(398);
+emit_16(334);
+emit_16(399);
+emit_16(335);
+emit_16(399);
+emit_16(334);
+emit_16(399);
+emit_16(335);
+emit_16(400);
+emit_16(336);
+emit_16(400);
+emit_16(335);
+emit_16(400);
+emit_16(336);
+emit_16(401);
+emit_16(337);
+emit_16(401);
+emit_16(336);
+emit_16(401);
+emit_16(337);
+emit_16(402);
+emit_16(338);
+emit_16(402);
+emit_16(337);
+emit_16(402);
+emit_16(338);
+emit_16(403);
+emit_16(339);
+emit_16(403);
+emit_16(338);
+emit_16(403);
+emit_16(339);
+emit_16(404);
+emit_16(340);
+emit_16(404);
+emit_16(339);
+emit_16(404);
+emit_16(340);
+emit_16(405);
+emit_16(341);
+emit_16(405);
+emit_16(340);
+emit_16(405);
+emit_16(341);
+emit_16(406);
+emit_16(342);
+emit_16(406);
+emit_16(341);
+emit_16(406);
+emit_16(342);
+emit_16(407);
+emit_16(343);
+emit_16(407);
+emit_16(342);
+emit_16(407);
+emit_16(343);
+emit_16(408);
+emit_16(344);
+emit_16(408);
+emit_16(343);
+emit_16(408);
+emit_16(344);
+emit_16(409);
+emit_16(345);
+emit_16(409);
+emit_16(344);
+emit_16(409);
+emit_16(345);
+emit_16(410);
+emit_16(346);
+emit_16(410);
+emit_16(345);
+emit_16(410);
+emit_16(346);
+emit_16(411);
+emit_16(347);
+emit_16(411);
+emit_16(346);
+emit_16(411);
+emit_16(347);
+emit_16(412);
+emit_16(348);
+emit_16(412);
+emit_16(347);
+emit_16(412);
+emit_16(348);
+emit_16(413);
+emit_16(349);
+emit_16(413);
+emit_16(348);
+emit_16(413);
+emit_16(349);
+emit_16(414);
+emit_16(350);
+emit_16(414);
+emit_16(349);
+emit_16(414);
+emit_16(350);
+emit_16(415);
+emit_16(351);
+emit_16(415);
+emit_16(350);
+emit_16(415);
+emit_16(351);
+emit_16(416);
+emit_16(352);
+emit_16(416);
+emit_16(351);
+emit_16(416);
+emit_16(352);
+emit_16(417);
+emit_16(353);
+emit_16(417);
+emit_16(352);
+emit_16(417);
+emit_16(353);
+emit_16(418);
+emit_16(354);
+emit_16(418);
+emit_16(353);
+emit_16(418);
+emit_16(354);
+emit_16(419);
+emit_16(355);
+emit_16(419);
+emit_16(354);
+emit_16(419);
+emit_16(355);
+emit_16(420);
+emit_16(356);
+emit_16(420);
+emit_16(355);
+emit_16(420);
+emit_16(356);
+emit_16(421);
+emit_16(357);
+emit_16(421);
+emit_16(356);
+emit_16(421);
+emit_16(357);
+emit_16(422);
+emit_16(358);
+emit_16(422);
+emit_16(357);
+emit_16(422);
+emit_16(358);
+emit_16(423);
+emit_16(359);
+emit_16(423);
+emit_16(358);
+emit_16(423);
+emit_16(359);
+emit_16(424);
+emit_16(360);
+emit_16(424);
+emit_16(359);
+emit_16(424);
+emit_16(360);
+emit_16(425);
+emit_16(361);
+emit_16(425);
+emit_16(360);
+emit_16(425);
+emit_16(361);
+emit_16(426);
+emit_16(362);
+emit_16(426);
+emit_16(361);
+emit_16(426);
+emit_16(362);
+emit_16(427);
+emit_16(363);
+emit_16(427);
+emit_16(362);
+emit_16(427);
+emit_16(363);
+emit_16(428);
+emit_16(364);
+emit_16(428);
+emit_16(363);
+emit_16(428);
+emit_16(364);
+emit_16(429);
+emit_16(365);
+emit_16(429);
+emit_16(364);
+emit_16(429);
+emit_16(365);
+emit_16(430);
+emit_16(366);
+emit_16(430);
+emit_16(365);
+emit_16(430);
+emit_16(366);
+emit_16(431);
+emit_16(367);
+emit_16(431);
+emit_16(366);
+emit_16(431);
+emit_16(367);
+emit_16(432);
+emit_16(368);
+emit_16(432);
+emit_16(367);
+emit_16(432);
+emit_16(368);
+emit_16(433);
+emit_16(369);
+emit_16(433);
+emit_16(368);
+emit_16(433);
+emit_16(369);
+emit_16(434);
+emit_16(370);
+emit_16(434);
+emit_16(369);
+emit_16(434);
+emit_16(370);
+emit_16(435);
+emit_16(371);
+emit_16(435);
+emit_16(370);
+emit_16(435);
+emit_16(371);
+emit_16(436);
+emit_16(372);
+emit_16(436);
+emit_16(371);
+emit_16(436);
+emit_16(372);
+emit_16(437);
+emit_16(373);
+emit_16(437);
+emit_16(372);
+emit_16(437);
+emit_16(373);
+emit_16(438);
+emit_16(374);
+emit_16(438);
+emit_16(373);
+emit_16(438);
+emit_16(374);
+emit_16(439);
+emit_16(375);
+emit_16(439);
+emit_16(374);
+emit_16(439);
+emit_16(375);
+emit_16(440);
+emit_16(376);
+emit_16(440);
+emit_16(375);
+emit_16(440);
+emit_16(376);
+emit_16(441);
+emit_16(377);
+emit_16(441);
+emit_16(376);
+emit_16(441);
+emit_16(377);
+emit_16(442);
+emit_16(378);
+emit_16(442);
+emit_16(377);
+emit_16(442);
+emit_16(378);
+emit_16(443);
+emit_16(379);
+emit_16(443);
+emit_16(378);
+emit_16(443);
+emit_16(379);
+emit_16(444);
+emit_16(380);
+emit_16(444);
+emit_16(379);
+emit_16(444);
+emit_16(380);
+emit_16(445);
+emit_16(381);
+emit_16(445);
+emit_16(380);
+emit_16(445);
+emit_16(381);
+emit_16(446);
+emit_16(382);
+emit_16(446);
+emit_16(381);
+emit_16(446);
+emit_16(382);
+emit_16(447);
+emit_16(383);
+emit_16(447);
+emit_16(382);
+emit_16(448);
+emit_16(384);
+emit_16(449);
+emit_16(385);
+emit_16(449);
+emit_16(384);
+emit_16(449);
+emit_16(385);
+emit_16(450);
+emit_16(386);
+emit_16(450);
+emit_16(385);
+emit_16(450);
+emit_16(386);
+emit_16(451);
+emit_16(387);
+emit_16(451);
+emit_16(386);
+emit_16(451);
+emit_16(387);
+emit_16(452);
+emit_16(388);
+emit_16(452);
+emit_16(387);
+emit_16(452);
+emit_16(388);
+emit_16(453);
+emit_16(389);
+emit_16(453);
+emit_16(388);
+emit_16(453);
+emit_16(389);
+emit_16(454);
+emit_16(390);
+emit_16(454);
+emit_16(389);
+emit_16(454);
+emit_16(390);
+emit_16(455);
+emit_16(391);
+emit_16(455);
+emit_16(390);
+emit_16(455);
+emit_16(391);
+emit_16(456);
+emit_16(392);
+emit_16(456);
+emit_16(391);
+emit_16(456);
+emit_16(392);
+emit_16(457);
+emit_16(393);
+emit_16(457);
+emit_16(392);
+emit_16(457);
+emit_16(393);
+emit_16(458);
+emit_16(394);
+emit_16(458);
+emit_16(393);
+emit_16(458);
+emit_16(394);
+emit_16(459);
+emit_16(395);
+emit_16(459);
+emit_16(394);
+emit_16(459);
+emit_16(395);
+emit_16(460);
+emit_16(396);
+emit_16(460);
+emit_16(395);
+emit_16(460);
+emit_16(396);
+emit_16(461);
+emit_16(397);
+emit_16(461);
+emit_16(396);
+emit_16(461);
+emit_16(397);
+emit_16(462);
+emit_16(398);
+emit_16(462);
+emit_16(397);
+emit_16(462);
+emit_16(398);
+emit_16(463);
+emit_16(399);
+emit_16(463);
+emit_16(398);
+emit_16(463);
+emit_16(399);
+emit_16(464);
+emit_16(400);
+emit_16(464);
+emit_16(399);
+emit_16(464);
+emit_16(400);
+emit_16(465);
+emit_16(401);
+emit_16(465);
+emit_16(400);
+emit_16(465);
+emit_16(401);
+emit_16(466);
+emit_16(402);
+emit_16(466);
+emit_16(401);
+emit_16(466);
+emit_16(402);
+emit_16(467);
+emit_16(403);
+emit_16(467);
+emit_16(402);
+emit_16(467);
+emit_16(403);
+emit_16(468);
+emit_16(404);
+emit_16(468);
+emit_16(403);
+emit_16(468);
+emit_16(404);
+emit_16(469);
+emit_16(405);
+emit_16(469);
+emit_16(404);
+emit_16(469);
+emit_16(405);
+emit_16(470);
+emit_16(406);
+emit_16(470);
+emit_16(405);
+emit_16(470);
+emit_16(406);
+emit_16(471);
+emit_16(407);
+emit_16(471);
+emit_16(406);
+emit_16(471);
+emit_16(407);
+emit_16(472);
+emit_16(408);
+emit_16(472);
+emit_16(407);
+emit_16(472);
+emit_16(408);
+emit_16(473);
+emit_16(409);
+emit_16(473);
+emit_16(408);
+emit_16(473);
+emit_16(409);
+emit_16(474);
+emit_16(410);
+emit_16(474);
+emit_16(409);
+emit_16(474);
+emit_16(410);
+emit_16(475);
+emit_16(411);
+emit_16(475);
+emit_16(410);
+emit_16(475);
+emit_16(411);
+emit_16(476);
+emit_16(412);
+emit_16(476);
+emit_16(411);
+emit_16(476);
+emit_16(412);
+emit_16(477);
+emit_16(413);
+emit_16(477);
+emit_16(412);
+emit_16(477);
+emit_16(413);
+emit_16(478);
+emit_16(414);
+emit_16(478);
+emit_16(413);
+emit_16(478);
+emit_16(414);
+emit_16(479);
+emit_16(415);
+emit_16(479);
+emit_16(414);
+emit_16(479);
+emit_16(415);
+emit_16(480);
+emit_16(416);
+emit_16(480);
+emit_16(415);
+emit_16(480);
+emit_16(416);
+emit_16(481);
+emit_16(417);
+emit_16(481);
+emit_16(416);
+emit_16(481);
+emit_16(417);
+emit_16(482);
+emit_16(418);
+emit_16(482);
+emit_16(417);
+emit_16(482);
+emit_16(418);
+emit_16(483);
+emit_16(419);
+emit_16(483);
+emit_16(418);
+emit_16(483);
+emit_16(419);
+emit_16(484);
+emit_16(420);
+emit_16(484);
+emit_16(419);
+emit_16(484);
+emit_16(420);
+emit_16(485);
+emit_16(421);
+emit_16(485);
+emit_16(420);
+emit_16(485);
+emit_16(421);
+emit_16(486);
+emit_16(422);
+emit_16(486);
+emit_16(421);
+emit_16(486);
+emit_16(422);
+emit_16(487);
+emit_16(423);
+emit_16(487);
+emit_16(422);
+emit_16(487);
+emit_16(423);
+emit_16(488);
+emit_16(424);
+emit_16(488);
+emit_16(423);
+emit_16(488);
+emit_16(424);
+emit_16(489);
+emit_16(425);
+emit_16(489);
+emit_16(424);
+emit_16(489);
+emit_16(425);
+emit_16(490);
+emit_16(426);
+emit_16(490);
+emit_16(425);
+emit_16(490);
+emit_16(426);
+emit_16(491);
+emit_16(427);
+emit_16(491);
+emit_16(426);
+emit_16(491);
+emit_16(427);
+emit_16(492);
+emit_16(428);
+emit_16(492);
+emit_16(427);
+emit_16(492);
+emit_16(428);
+emit_16(493);
+emit_16(429);
+emit_16(493);
+emit_16(428);
+emit_16(493);
+emit_16(429);
+emit_16(494);
+emit_16(430);
+emit_16(494);
+emit_16(429);
+emit_16(494);
+emit_16(430);
+emit_16(495);
+emit_16(431);
+emit_16(495);
+emit_16(430);
+emit_16(495);
+emit_16(431);
+emit_16(496);
+emit_16(432);
+emit_16(496);
+emit_16(431);
+emit_16(496);
+emit_16(432);
+emit_16(497);
+emit_16(433);
+emit_16(497);
+emit_16(432);
+emit_16(497);
+emit_16(433);
+emit_16(498);
+emit_16(434);
+emit_16(498);
+emit_16(433);
+emit_16(498);
+emit_16(434);
+emit_16(499);
+emit_16(435);
+emit_16(499);
+emit_16(434);
+emit_16(499);
+emit_16(435);
+emit_16(500);
+emit_16(436);
+emit_16(500);
+emit_16(435);
+emit_16(500);
+emit_16(436);
+emit_16(501);
+emit_16(437);
+emit_16(501);
+emit_16(436);
+emit_16(501);
+emit_16(437);
+emit_16(502);
+emit_16(438);
+emit_16(502);
+emit_16(437);
+emit_16(502);
+emit_16(438);
+emit_16(503);
+emit_16(439);
+emit_16(503);
+emit_16(438);
+emit_16(503);
+emit_16(439);
+emit_16(504);
+emit_16(440);
+emit_16(504);
+emit_16(439);
+emit_16(504);
+emit_16(440);
+emit_16(505);
+emit_16(441);
+emit_16(505);
+emit_16(440);
+emit_16(505);
+emit_16(441);
+emit_16(506);
+emit_16(442);
+emit_16(506);
+emit_16(441);
+emit_16(506);
+emit_16(442);
+emit_16(507);
+emit_16(443);
+emit_16(507);
+emit_16(442);
+emit_16(507);
+emit_16(443);
+emit_16(508);
+emit_16(444);
+emit_16(508);
+emit_16(443);
+emit_16(508);
+emit_16(444);
+emit_16(509);
+emit_16(445);
+emit_16(509);
+emit_16(444);
+emit_16(509);
+emit_16(445);
+emit_16(510);
+emit_16(446);
+emit_16(510);
+emit_16(445);
+emit_16(510);
+emit_16(446);
+emit_16(511);
+emit_16(447);
+emit_16(511);
+emit_16(446);
+emit_16(512);
+emit_16(448);
+emit_16(513);
+emit_16(449);
+emit_16(513);
+emit_16(448);
+emit_16(513);
+emit_16(449);
+emit_16(514);
+emit_16(450);
+emit_16(514);
+emit_16(449);
+emit_16(514);
+emit_16(450);
+emit_16(515);
+emit_16(451);
+emit_16(515);
+emit_16(450);
+emit_16(515);
+emit_16(451);
+emit_16(516);
+emit_16(452);
+emit_16(516);
+emit_16(451);
+emit_16(516);
+emit_16(452);
+emit_16(517);
+emit_16(453);
+emit_16(517);
+emit_16(452);
+emit_16(517);
+emit_16(453);
+emit_16(518);
+emit_16(454);
+emit_16(518);
+emit_16(453);
+emit_16(518);
+emit_16(454);
+emit_16(519);
+emit_16(455);
+emit_16(519);
+emit_16(454);
+emit_16(519);
+emit_16(455);
+emit_16(520);
+emit_16(456);
+emit_16(520);
+emit_16(455);
+emit_16(520);
+emit_16(456);
+emit_16(521);
+emit_16(457);
+emit_16(521);
+emit_16(456);
+emit_16(521);
+emit_16(457);
+emit_16(522);
+emit_16(458);
+emit_16(522);
+emit_16(457);
+emit_16(522);
+emit_16(458);
+emit_16(523);
+emit_16(459);
+emit_16(523);
+emit_16(458);
+emit_16(523);
+emit_16(459);
+emit_16(524);
+emit_16(460);
+emit_16(524);
+emit_16(459);
+emit_16(524);
+emit_16(460);
+emit_16(525);
+emit_16(461);
+emit_16(525);
+emit_16(460);
+emit_16(525);
+emit_16(461);
+emit_16(526);
+emit_16(462);
+emit_16(526);
+emit_16(461);
+emit_16(526);
+emit_16(462);
+emit_16(527);
+emit_16(463);
+emit_16(527);
+emit_16(462);
+emit_16(527);
+emit_16(463);
+emit_16(528);
+emit_16(464);
+emit_16(528);
+emit_16(463);
+emit_16(528);
+emit_16(464);
+emit_16(529);
+emit_16(465);
+emit_16(529);
+emit_16(464);
+emit_16(529);
+emit_16(465);
+emit_16(530);
+emit_16(466);
+emit_16(530);
+emit_16(465);
+emit_16(530);
+emit_16(466);
+emit_16(531);
+emit_16(467);
+emit_16(531);
+emit_16(466);
+emit_16(531);
+emit_16(467);
+emit_16(532);
+emit_16(468);
+emit_16(532);
+emit_16(467);
+emit_16(532);
+emit_16(468);
+emit_16(533);
+emit_16(469);
+emit_16(533);
+emit_16(468);
+emit_16(533);
+emit_16(469);
+emit_16(534);
+emit_16(470);
+emit_16(534);
+emit_16(469);
+emit_16(534);
+emit_16(470);
+emit_16(535);
+emit_16(471);
+emit_16(535);
+emit_16(470);
+emit_16(535);
+emit_16(471);
+emit_16(536);
+emit_16(472);
+emit_16(536);
+emit_16(471);
+emit_16(536);
+emit_16(472);
+emit_16(537);
+emit_16(473);
+emit_16(537);
+emit_16(472);
+emit_16(537);
+emit_16(473);
+emit_16(538);
+emit_16(474);
+emit_16(538);
+emit_16(473);
+emit_16(538);
+emit_16(474);
+emit_16(539);
+emit_16(475);
+emit_16(539);
+emit_16(474);
+emit_16(539);
+emit_16(475);
+emit_16(540);
+emit_16(476);
+emit_16(540);
+emit_16(475);
+emit_16(540);
+emit_16(476);
+emit_16(541);
+emit_16(477);
+emit_16(541);
+emit_16(476);
+emit_16(541);
+emit_16(477);
+emit_16(542);
+emit_16(478);
+emit_16(542);
+emit_16(477);
+emit_16(542);
+emit_16(478);
+emit_16(543);
+emit_16(479);
+emit_16(543);
+emit_16(478);
+emit_16(543);
+emit_16(479);
+emit_16(544);
+emit_16(480);
+emit_16(544);
+emit_16(479);
+emit_16(544);
+emit_16(480);
+emit_16(545);
+emit_16(481);
+emit_16(545);
+emit_16(480);
+emit_16(545);
+emit_16(481);
+emit_16(546);
+emit_16(482);
+emit_16(546);
+emit_16(481);
+emit_16(546);
+emit_16(482);
+emit_16(547);
+emit_16(483);
+emit_16(547);
+emit_16(482);
+emit_16(547);
+emit_16(483);
+emit_16(548);
+emit_16(484);
+emit_16(548);
+emit_16(483);
+emit_16(548);
+emit_16(484);
+emit_16(549);
+emit_16(485);
+emit_16(549);
+emit_16(484);
+emit_16(549);
+emit_16(485);
+emit_16(550);
+emit_16(486);
+emit_16(550);
+emit_16(485);
+emit_16(550);
+emit_16(486);
+emit_16(551);
+emit_16(487);
+emit_16(551);
+emit_16(486);
+emit_16(551);
+emit_16(487);
+emit_16(552);
+emit_16(488);
+emit_16(552);
+emit_16(487);
+emit_16(552);
+emit_16(488);
+emit_16(553);
+emit_16(489);
+emit_16(553);
+emit_16(488);
+emit_16(553);
+emit_16(489);
+emit_16(554);
+emit_16(490);
+emit_16(554);
+emit_16(489);
+emit_16(554);
+emit_16(490);
+emit_16(555);
+emit_16(491);
+emit_16(555);
+emit_16(490);
+emit_16(555);
+emit_16(491);
+emit_16(556);
+emit_16(492);
+emit_16(556);
+emit_16(491);
+emit_16(556);
+emit_16(492);
+emit_16(557);
+emit_16(493);
+emit_16(557);
+emit_16(492);
+emit_16(557);
+emit_16(493);
+emit_16(558);
+emit_16(494);
+emit_16(558);
+emit_16(493);
+emit_16(558);
+emit_16(494);
+emit_16(559);
+emit_16(495);
+emit_16(559);
+emit_16(494);
+emit_16(559);
+emit_16(495);
+emit_16(560);
+emit_16(496);
+emit_16(560);
+emit_16(495);
+emit_16(560);
+emit_16(496);
+emit_16(561);
+emit_16(497);
+emit_16(561);
+emit_16(496);
+emit_16(561);
+emit_16(497);
+emit_16(562);
+emit_16(498);
+emit_16(562);
+emit_16(497);
+emit_16(562);
+emit_16(498);
+emit_16(563);
+emit_16(499);
+emit_16(563);
+emit_16(498);
+emit_16(563);
+emit_16(499);
+emit_16(564);
+emit_16(500);
+emit_16(564);
+emit_16(499);
+emit_16(564);
+emit_16(500);
+emit_16(565);
+emit_16(501);
+emit_16(565);
+emit_16(500);
+emit_16(565);
+emit_16(501);
+emit_16(566);
+emit_16(502);
+emit_16(566);
+emit_16(501);
+emit_16(566);
+emit_16(502);
+emit_16(567);
+emit_16(503);
+emit_16(567);
+emit_16(502);
+emit_16(567);
+emit_16(503);
+emit_16(568);
+emit_16(504);
+emit_16(568);
+emit_16(503);
+emit_16(568);
+emit_16(504);
+emit_16(569);
+emit_16(505);
+emit_16(569);
+emit_16(504);
+emit_16(569);
+emit_16(505);
+emit_16(570);
+emit_16(506);
+emit_16(570);
+emit_16(505);
+emit_16(570);
+emit_16(506);
+emit_16(571);
+emit_16(507);
+emit_16(571);
+emit_16(506);
+emit_16(571);
+emit_16(507);
+emit_16(572);
+emit_16(508);
+emit_16(572);
+emit_16(507);
+emit_16(572);
+emit_16(508);
+emit_16(573);
+emit_16(509);
+emit_16(573);
+emit_16(508);
+emit_16(573);
+emit_16(509);
+emit_16(574);
+emit_16(510);
+emit_16(574);
+emit_16(509);
+emit_16(574);
+emit_16(510);
+emit_16(575);
+emit_16(511);
+emit_16(575);
+emit_16(510);
+emit_16(576);
+emit_16(512);
+emit_16(577);
+emit_16(513);
+emit_16(577);
+emit_16(512);
+emit_16(577);
+emit_16(513);
+emit_16(578);
+emit_16(514);
+emit_16(578);
+emit_16(513);
+emit_16(578);
+emit_16(514);
+emit_16(579);
+emit_16(515);
+emit_16(579);
+emit_16(514);
+emit_16(579);
+emit_16(515);
+emit_16(580);
+emit_16(516);
+emit_16(580);
+emit_16(515);
+emit_16(580);
+emit_16(516);
+emit_16(581);
+emit_16(517);
+emit_16(581);
+emit_16(516);
+emit_16(581);
+emit_16(517);
+emit_16(582);
+emit_16(518);
+emit_16(582);
+emit_16(517);
+emit_16(582);
+emit_16(518);
+emit_16(583);
+emit_16(519);
+emit_16(583);
+emit_16(518);
+emit_16(583);
+emit_16(519);
+emit_16(584);
+emit_16(520);
+emit_16(584);
+emit_16(519);
+emit_16(584);
+emit_16(520);
+emit_16(585);
+emit_16(521);
+emit_16(585);
+emit_16(520);
+emit_16(585);
+emit_16(521);
+emit_16(586);
+emit_16(522);
+emit_16(586);
+emit_16(521);
+emit_16(586);
+emit_16(522);
+emit_16(587);
+emit_16(523);
+emit_16(587);
+emit_16(522);
+emit_16(587);
+emit_16(523);
+emit_16(588);
+emit_16(524);
+emit_16(588);
+emit_16(523);
+emit_16(588);
+emit_16(524);
+emit_16(589);
+emit_16(525);
+emit_16(589);
+emit_16(524);
+emit_16(589);
+emit_16(525);
+emit_16(590);
+emit_16(526);
+emit_16(590);
+emit_16(525);
+emit_16(590);
+emit_16(526);
+emit_16(591);
+emit_16(527);
+emit_16(591);
+emit_16(526);
+emit_16(591);
+emit_16(527);
+emit_16(592);
+emit_16(528);
+emit_16(592);
+emit_16(527);
+emit_16(592);
+emit_16(528);
+emit_16(593);
+emit_16(529);
+emit_16(593);
+emit_16(528);
+emit_16(593);
+emit_16(529);
+emit_16(594);
+emit_16(530);
+emit_16(594);
+emit_16(529);
+emit_16(594);
+emit_16(530);
+emit_16(595);
+emit_16(531);
+emit_16(595);
+emit_16(530);
+emit_16(595);
+emit_16(531);
+emit_16(596);
+emit_16(532);
+emit_16(596);
+emit_16(531);
+emit_16(596);
+emit_16(532);
+emit_16(597);
+emit_16(533);
+emit_16(597);
+emit_16(532);
+emit_16(597);
+emit_16(533);
+emit_16(598);
+emit_16(534);
+emit_16(598);
+emit_16(533);
+emit_16(598);
+emit_16(534);
+emit_16(599);
+emit_16(535);
+emit_16(599);
+emit_16(534);
+emit_16(599);
+emit_16(535);
+emit_16(600);
+emit_16(536);
+emit_16(600);
+emit_16(535);
+emit_16(600);
+emit_16(536);
+emit_16(601);
+emit_16(537);
+emit_16(601);
+emit_16(536);
+emit_16(601);
+emit_16(537);
+emit_16(602);
+emit_16(538);
+emit_16(602);
+emit_16(537);
+emit_16(602);
+emit_16(538);
+emit_16(603);
+emit_16(539);
+emit_16(603);
+emit_16(538);
+emit_16(603);
+emit_16(539);
+emit_16(604);
+emit_16(540);
+emit_16(604);
+emit_16(539);
+emit_16(604);
+emit_16(540);
+emit_16(605);
+emit_16(541);
+emit_16(605);
+emit_16(540);
+emit_16(605);
+emit_16(541);
+emit_16(606);
+emit_16(542);
+emit_16(606);
+emit_16(541);
+emit_16(606);
+emit_16(542);
+emit_16(607);
+emit_16(543);
+emit_16(607);
+emit_16(542);
+emit_16(607);
+emit_16(543);
+emit_16(608);
+emit_16(544);
+emit_16(608);
+emit_16(543);
+emit_16(608);
+emit_16(544);
+emit_16(609);
+emit_16(545);
+emit_16(609);
+emit_16(544);
+emit_16(609);
+emit_16(545);
+emit_16(610);
+emit_16(546);
+emit_16(610);
+emit_16(545);
+emit_16(610);
+emit_16(546);
+emit_16(611);
+emit_16(547);
+emit_16(611);
+emit_16(546);
+emit_16(611);
+emit_16(547);
+emit_16(612);
+emit_16(548);
+emit_16(612);
+emit_16(547);
+emit_16(612);
+emit_16(548);
+emit_16(613);
+emit_16(549);
+emit_16(613);
+emit_16(548);
+emit_16(613);
+emit_16(549);
+emit_16(614);
+emit_16(550);
+emit_16(614);
+emit_16(549);
+emit_16(614);
+emit_16(550);
+emit_16(615);
+emit_16(551);
+emit_16(615);
+emit_16(550);
+emit_16(615);
+emit_16(551);
+emit_16(616);
+emit_16(552);
+emit_16(616);
+emit_16(551);
+emit_16(616);
+emit_16(552);
+emit_16(617);
+emit_16(553);
+emit_16(617);
+emit_16(552);
+emit_16(617);
+emit_16(553);
+emit_16(618);
+emit_16(554);
+emit_16(618);
+emit_16(553);
+emit_16(618);
+emit_16(554);
+emit_16(619);
+emit_16(555);
+emit_16(619);
+emit_16(554);
+emit_16(619);
+emit_16(555);
+emit_16(620);
+emit_16(556);
+emit_16(620);
+emit_16(555);
+emit_16(620);
+emit_16(556);
+emit_16(621);
+emit_16(557);
+emit_16(621);
+emit_16(556);
+emit_16(621);
+emit_16(557);
+emit_16(622);
+emit_16(558);
+emit_16(622);
+emit_16(557);
+emit_16(622);
+emit_16(558);
+emit_16(623);
+emit_16(559);
+emit_16(623);
+emit_16(558);
+emit_16(623);
+emit_16(559);
+emit_16(624);
+emit_16(560);
+emit_16(624);
+emit_16(559);
+emit_16(624);
+emit_16(560);
+emit_16(625);
+emit_16(561);
+emit_16(625);
+emit_16(560);
+emit_16(625);
+emit_16(561);
+emit_16(626);
+emit_16(562);
+emit_16(626);
+emit_16(561);
+emit_16(626);
+emit_16(562);
+emit_16(627);
+emit_16(563);
+emit_16(627);
+emit_16(562);
+emit_16(627);
+emit_16(563);
+emit_16(628);
+emit_16(564);
+emit_16(628);
+emit_16(563);
+emit_16(628);
+emit_16(564);
+emit_16(629);
+emit_16(565);
+emit_16(629);
+emit_16(564);
+emit_16(629);
+emit_16(565);
+emit_16(630);
+emit_16(566);
+emit_16(630);
+emit_16(565);
+emit_16(630);
+emit_16(566);
+emit_16(631);
+emit_16(567);
+emit_16(631);
+emit_16(566);
+emit_16(631);
+emit_16(567);
+emit_16(632);
+emit_16(568);
+emit_16(632);
+emit_16(567);
+emit_16(632);
+emit_16(568);
+emit_16(633);
+emit_16(569);
+emit_16(633);
+emit_16(568);
+emit_16(633);
+emit_16(569);
+emit_16(634);
+emit_16(570);
+emit_16(634);
+emit_16(569);
+emit_16(634);
+emit_16(570);
+emit_16(635);
+emit_16(571);
+emit_16(635);
+emit_16(570);
+emit_16(635);
+emit_16(571);
+emit_16(636);
+emit_16(572);
+emit_16(636);
+emit_16(571);
+emit_16(636);
+emit_16(572);
+emit_16(637);
+emit_16(573);
+emit_16(637);
+emit_16(572);
+emit_16(637);
+emit_16(573);
+emit_16(638);
+emit_16(574);
+emit_16(638);
+emit_16(573);
+emit_16(638);
+emit_16(574);
+emit_16(639);
+emit_16(575);
+emit_16(639);
+emit_16(574);
+emit_16(640);
+emit_16(576);
+emit_16(641);
+emit_16(577);
+emit_16(641);
+emit_16(576);
+emit_16(641);
+emit_16(577);
+emit_16(642);
+emit_16(578);
+emit_16(642);
+emit_16(577);
+emit_16(642);
+emit_16(578);
+emit_16(643);
+emit_16(579);
+emit_16(643);
+emit_16(578);
+emit_16(643);
+emit_16(579);
+emit_16(644);
+emit_16(580);
+emit_16(644);
+emit_16(579);
+emit_16(644);
+emit_16(580);
+emit_16(645);
+emit_16(581);
+emit_16(645);
+emit_16(580);
+emit_16(645);
+emit_16(581);
+emit_16(646);
+emit_16(582);
+emit_16(646);
+emit_16(581);
+emit_16(646);
+emit_16(582);
+emit_16(647);
+emit_16(583);
+emit_16(647);
+emit_16(582);
+emit_16(647);
+emit_16(583);
+emit_16(648);
+emit_16(584);
+emit_16(648);
+emit_16(583);
+emit_16(648);
+emit_16(584);
+emit_16(649);
+emit_16(585);
+emit_16(649);
+emit_16(584);
+emit_16(649);
+emit_16(585);
+emit_16(650);
+emit_16(586);
+emit_16(650);
+emit_16(585);
+emit_16(650);
+emit_16(586);
+emit_16(651);
+emit_16(587);
+emit_16(651);
+emit_16(586);
+emit_16(651);
+emit_16(587);
+emit_16(652);
+emit_16(588);
+emit_16(652);
+emit_16(587);
+emit_16(652);
+emit_16(588);
+emit_16(653);
+emit_16(589);
+emit_16(653);
+emit_16(588);
+emit_16(653);
+emit_16(589);
+emit_16(654);
+emit_16(590);
+emit_16(654);
+emit_16(589);
+emit_16(654);
+emit_16(590);
+emit_16(655);
+emit_16(591);
+emit_16(655);
+emit_16(590);
+emit_16(655);
+emit_16(591);
+emit_16(656);
+emit_16(592);
+emit_16(656);
+emit_16(591);
+emit_16(656);
+emit_16(592);
+emit_16(657);
+emit_16(593);
+emit_16(657);
+emit_16(592);
+emit_16(657);
+emit_16(593);
+emit_16(658);
+emit_16(594);
+emit_16(658);
+emit_16(593);
+emit_16(658);
+emit_16(594);
+emit_16(659);
+emit_16(595);
+emit_16(659);
+emit_16(594);
+emit_16(659);
+emit_16(595);
+emit_16(660);
+emit_16(596);
+emit_16(660);
+emit_16(595);
+emit_16(660);
+emit_16(596);
+emit_16(661);
+emit_16(597);
+emit_16(661);
+emit_16(596);
+emit_16(661);
+emit_16(597);
+emit_16(662);
+emit_16(598);
+emit_16(662);
+emit_16(597);
+emit_16(662);
+emit_16(598);
+emit_16(663);
+emit_16(599);
+emit_16(663);
+emit_16(598);
+emit_16(663);
+emit_16(599);
+emit_16(664);
+emit_16(600);
+emit_16(664);
+emit_16(599);
+emit_16(664);
+emit_16(600);
+emit_16(665);
+emit_16(601);
+emit_16(665);
+emit_16(600);
+emit_16(665);
+emit_16(601);
+emit_16(666);
+emit_16(602);
+emit_16(666);
+emit_16(601);
+emit_16(666);
+emit_16(602);
+emit_16(667);
+emit_16(603);
+emit_16(667);
+emit_16(602);
+emit_16(667);
+emit_16(603);
+emit_16(668);
+emit_16(604);
+emit_16(668);
+emit_16(603);
+emit_16(668);
+emit_16(604);
+emit_16(669);
+emit_16(605);
+emit_16(669);
+emit_16(604);
+emit_16(669);
+emit_16(605);
+emit_16(670);
+emit_16(606);
+emit_16(670);
+emit_16(605);
+emit_16(670);
+emit_16(606);
+emit_16(671);
+emit_16(607);
+emit_16(671);
+emit_16(606);
+emit_16(671);
+emit_16(607);
+emit_16(672);
+emit_16(608);
+emit_16(672);
+emit_16(607);
+emit_16(672);
+emit_16(608);
+emit_16(673);
+emit_16(609);
+emit_16(673);
+emit_16(608);
+emit_16(673);
+emit_16(609);
+emit_16(674);
+emit_16(610);
+emit_16(674);
+emit_16(609);
+emit_16(674);
+emit_16(610);
+emit_16(675);
+emit_16(611);
+emit_16(675);
+emit_16(610);
+emit_16(675);
+emit_16(611);
+emit_16(676);
+emit_16(612);
+emit_16(676);
+emit_16(611);
+emit_16(676);
+emit_16(612);
+emit_16(677);
+emit_16(613);
+emit_16(677);
+emit_16(612);
+emit_16(677);
+emit_16(613);
+emit_16(678);
+emit_16(614);
+emit_16(678);
+emit_16(613);
+emit_16(678);
+emit_16(614);
+emit_16(679);
+emit_16(615);
+emit_16(679);
+emit_16(614);
+emit_16(679);
+emit_16(615);
+emit_16(680);
+emit_16(616);
+emit_16(680);
+emit_16(615);
+emit_16(680);
+emit_16(616);
+emit_16(681);
+emit_16(617);
+emit_16(681);
+emit_16(616);
+emit_16(681);
+emit_16(617);
+emit_16(682);
+emit_16(618);
+emit_16(682);
+emit_16(617);
+emit_16(682);
+emit_16(618);
+emit_16(683);
+emit_16(619);
+emit_16(683);
+emit_16(618);
+emit_16(683);
+emit_16(619);
+emit_16(684);
+emit_16(620);
+emit_16(684);
+emit_16(619);
+emit_16(684);
+emit_16(620);
+emit_16(685);
+emit_16(621);
+emit_16(685);
+emit_16(620);
+emit_16(685);
+emit_16(621);
+emit_16(686);
+emit_16(622);
+emit_16(686);
+emit_16(621);
+emit_16(686);
+emit_16(622);
+emit_16(687);
+emit_16(623);
+emit_16(687);
+emit_16(622);
+emit_16(687);
+emit_16(623);
+emit_16(688);
+emit_16(624);
+emit_16(688);
+emit_16(623);
+emit_16(688);
+emit_16(624);
+emit_16(689);
+emit_16(625);
+emit_16(689);
+emit_16(624);
+emit_16(689);
+emit_16(625);
+emit_16(690);
+emit_16(626);
+emit_16(690);
+emit_16(625);
+emit_16(690);
+emit_16(626);
+emit_16(691);
+emit_16(627);
+emit_16(691);
+emit_16(626);
+emit_16(691);
+emit_16(627);
+emit_16(692);
+emit_16(628);
+emit_16(692);
+emit_16(627);
+emit_16(692);
+emit_16(628);
+emit_16(693);
+emit_16(629);
+emit_16(693);
+emit_16(628);
+emit_16(693);
+emit_16(629);
+emit_16(694);
+emit_16(630);
+emit_16(694);
+emit_16(629);
+emit_16(694);
+emit_16(630);
+emit_16(695);
+emit_16(631);
+emit_16(695);
+emit_16(630);
+emit_16(695);
+emit_16(631);
+emit_16(696);
+emit_16(632);
+emit_16(696);
+emit_16(631);
+emit_16(696);
+emit_16(632);
+emit_16(697);
+emit_16(633);
+emit_16(697);
+emit_16(632);
+emit_16(697);
+emit_16(633);
+emit_16(698);
+emit_16(634);
+emit_16(698);
+emit_16(633);
+emit_16(698);
+emit_16(634);
+emit_16(699);
+emit_16(635);
+emit_16(699);
+emit_16(634);
+emit_16(699);
+emit_16(635);
+emit_16(700);
+emit_16(636);
+emit_16(700);
+emit_16(635);
+emit_16(700);
+emit_16(636);
+emit_16(701);
+emit_16(637);
+emit_16(701);
+emit_16(636);
+emit_16(701);
+emit_16(637);
+emit_16(702);
+emit_16(638);
+emit_16(702);
+emit_16(637);
+emit_16(702);
+emit_16(638);
+emit_16(703);
+emit_16(639);
+emit_16(703);
+emit_16(638);
+emit_16(704);
+emit_16(640);
+emit_16(705);
+emit_16(641);
+emit_16(705);
+emit_16(640);
+emit_16(705);
+emit_16(641);
+emit_16(706);
+emit_16(642);
+emit_16(706);
+emit_16(641);
+emit_16(706);
+emit_16(642);
+emit_16(707);
+emit_16(643);
+emit_16(707);
+emit_16(642);
+emit_16(707);
+emit_16(643);
+emit_16(708);
+emit_16(644);
+emit_16(708);
+emit_16(643);
+emit_16(708);
+emit_16(644);
+emit_16(709);
+emit_16(645);
+emit_16(709);
+emit_16(644);
+emit_16(709);
+emit_16(645);
+emit_16(710);
+emit_16(646);
+emit_16(710);
+emit_16(645);
+emit_16(710);
+emit_16(646);
+emit_16(711);
+emit_16(647);
+emit_16(711);
+emit_16(646);
+emit_16(711);
+emit_16(647);
+emit_16(712);
+emit_16(648);
+emit_16(712);
+emit_16(647);
+emit_16(712);
+emit_16(648);
+emit_16(713);
+emit_16(649);
+emit_16(713);
+emit_16(648);
+emit_16(713);
+emit_16(649);
+emit_16(714);
+emit_16(650);
+emit_16(714);
+emit_16(649);
+emit_16(714);
+emit_16(650);
+emit_16(715);
+emit_16(651);
+emit_16(715);
+emit_16(650);
+emit_16(715);
+emit_16(651);
+emit_16(716);
+emit_16(652);
+emit_16(716);
+emit_16(651);
+emit_16(716);
+emit_16(652);
+emit_16(717);
+emit_16(653);
+emit_16(717);
+emit_16(652);
+emit_16(717);
+emit_16(653);
+emit_16(718);
+emit_16(654);
+emit_16(718);
+emit_16(653);
+emit_16(718);
+emit_16(654);
+emit_16(719);
+emit_16(655);
+emit_16(719);
+emit_16(654);
+emit_16(719);
+emit_16(655);
+emit_16(720);
+emit_16(656);
+emit_16(720);
+emit_16(655);
+emit_16(720);
+emit_16(656);
+emit_16(721);
+emit_16(657);
+emit_16(721);
+emit_16(656);
+emit_16(721);
+emit_16(657);
+emit_16(722);
+emit_16(658);
+emit_16(722);
+emit_16(657);
+emit_16(722);
+emit_16(658);
+emit_16(723);
+emit_16(659);
+emit_16(723);
+emit_16(658);
+emit_16(723);
+emit_16(659);
+emit_16(724);
+emit_16(660);
+emit_16(724);
+emit_16(659);
+emit_16(724);
+emit_16(660);
+emit_16(725);
+emit_16(661);
+emit_16(725);
+emit_16(660);
+emit_16(725);
+emit_16(661);
+emit_16(726);
+emit_16(662);
+emit_16(726);
+emit_16(661);
+emit_16(726);
+emit_16(662);
+emit_16(727);
+emit_16(663);
+emit_16(727);
+emit_16(662);
+emit_16(727);
+emit_16(663);
+emit_16(728);
+emit_16(664);
+emit_16(728);
+emit_16(663);
+emit_16(728);
+emit_16(664);
+emit_16(729);
+emit_16(665);
+emit_16(729);
+emit_16(664);
+emit_16(729);
+emit_16(665);
+emit_16(730);
+emit_16(666);
+emit_16(730);
+emit_16(665);
+emit_16(730);
+emit_16(666);
+emit_16(731);
+emit_16(667);
+emit_16(731);
+emit_16(666);
+emit_16(731);
+emit_16(667);
+emit_16(732);
+emit_16(668);
+emit_16(732);
+emit_16(667);
+emit_16(732);
+emit_16(668);
+emit_16(733);
+emit_16(669);
+emit_16(733);
+emit_16(668);
+emit_16(733);
+emit_16(669);
+emit_16(734);
+emit_16(670);
+emit_16(734);
+emit_16(669);
+emit_16(734);
+emit_16(670);
+emit_16(735);
+emit_16(671);
+emit_16(735);
+emit_16(670);
+emit_16(735);
+emit_16(671);
+emit_16(736);
+emit_16(672);
+emit_16(736);
+emit_16(671);
+emit_16(736);
+emit_16(672);
+emit_16(737);
+emit_16(673);
+emit_16(737);
+emit_16(672);
+emit_16(737);
+emit_16(673);
+emit_16(738);
+emit_16(674);
+emit_16(738);
+emit_16(673);
+emit_16(738);
+emit_16(674);
+emit_16(739);
+emit_16(675);
+emit_16(739);
+emit_16(674);
+emit_16(739);
+emit_16(675);
+emit_16(740);
+emit_16(676);
+emit_16(740);
+emit_16(675);
+emit_16(740);
+emit_16(676);
+emit_16(741);
+emit_16(677);
+emit_16(741);
+emit_16(676);
+emit_16(741);
+emit_16(677);
+emit_16(742);
+emit_16(678);
+emit_16(742);
+emit_16(677);
+emit_16(742);
+emit_16(678);
+emit_16(743);
+emit_16(679);
+emit_16(743);
+emit_16(678);
+emit_16(743);
+emit_16(679);
+emit_16(744);
+emit_16(680);
+emit_16(744);
+emit_16(679);
+emit_16(744);
+emit_16(680);
+emit_16(745);
+emit_16(681);
+emit_16(745);
+emit_16(680);
+emit_16(745);
+emit_16(681);
+emit_16(746);
+emit_16(682);
+emit_16(746);
+emit_16(681);
+emit_16(746);
+emit_16(682);
+emit_16(747);
+emit_16(683);
+emit_16(747);
+emit_16(682);
+emit_16(747);
+emit_16(683);
+emit_16(748);
+emit_16(684);
+emit_16(748);
+emit_16(683);
+emit_16(748);
+emit_16(684);
+emit_16(749);
+emit_16(685);
+emit_16(749);
+emit_16(684);
+emit_16(749);
+emit_16(685);
+emit_16(750);
+emit_16(686);
+emit_16(750);
+emit_16(685);
+emit_16(750);
+emit_16(686);
+emit_16(751);
+emit_16(687);
+emit_16(751);
+emit_16(686);
+emit_16(751);
+emit_16(687);
+emit_16(752);
+emit_16(688);
+emit_16(752);
+emit_16(687);
+emit_16(752);
+emit_16(688);
+emit_16(753);
+emit_16(689);
+emit_16(753);
+emit_16(688);
+emit_16(753);
+emit_16(689);
+emit_16(754);
+emit_16(690);
+emit_16(754);
+emit_16(689);
+emit_16(754);
+emit_16(690);
+emit_16(755);
+emit_16(691);
+emit_16(755);
+emit_16(690);
+emit_16(755);
+emit_16(691);
+emit_16(756);
+emit_16(692);
+emit_16(756);
+emit_16(691);
+emit_16(756);
+emit_16(692);
+emit_16(757);
+emit_16(693);
+emit_16(757);
+emit_16(692);
+emit_16(757);
+emit_16(693);
+emit_16(758);
+emit_16(694);
+emit_16(758);
+emit_16(693);
+emit_16(758);
+emit_16(694);
+emit_16(759);
+emit_16(695);
+emit_16(759);
+emit_16(694);
+emit_16(759);
+emit_16(695);
+emit_16(760);
+emit_16(696);
+emit_16(760);
+emit_16(695);
+emit_16(760);
+emit_16(696);
+emit_16(761);
+emit_16(697);
+emit_16(761);
+emit_16(696);
+emit_16(761);
+emit_16(697);
+emit_16(762);
+emit_16(698);
+emit_16(762);
+emit_16(697);
+emit_16(762);
+emit_16(698);
+emit_16(763);
+emit_16(699);
+emit_16(763);
+emit_16(698);
+emit_16(763);
+emit_16(699);
+emit_16(764);
+emit_16(700);
+emit_16(764);
+emit_16(699);
+emit_16(764);
+emit_16(700);
+emit_16(765);
+emit_16(701);
+emit_16(765);
+emit_16(700);
+emit_16(765);
+emit_16(701);
+emit_16(766);
+emit_16(702);
+emit_16(766);
+emit_16(701);
+emit_16(766);
+emit_16(702);
+emit_16(767);
+emit_16(703);
+emit_16(767);
+emit_16(702);
+emit_16(768);
+emit_16(704);
+emit_16(769);
+emit_16(705);
+emit_16(769);
+emit_16(704);
+emit_16(769);
+emit_16(705);
+emit_16(770);
+emit_16(706);
+emit_16(770);
+emit_16(705);
+emit_16(770);
+emit_16(706);
+emit_16(771);
+emit_16(707);
+emit_16(771);
+emit_16(706);
+emit_16(771);
+emit_16(707);
+emit_16(772);
+emit_16(708);
+emit_16(772);
+emit_16(707);
+emit_16(772);
+emit_16(708);
+emit_16(773);
+emit_16(709);
+emit_16(773);
+emit_16(708);
+emit_16(773);
+emit_16(709);
+emit_16(774);
+emit_16(710);
+emit_16(774);
+emit_16(709);
+emit_16(774);
+emit_16(710);
+emit_16(775);
+emit_16(711);
+emit_16(775);
+emit_16(710);
+emit_16(775);
+emit_16(711);
+emit_16(776);
+emit_16(712);
+emit_16(776);
+emit_16(711);
+emit_16(776);
+emit_16(712);
+emit_16(777);
+emit_16(713);
+emit_16(777);
+emit_16(712);
+emit_16(777);
+emit_16(713);
+emit_16(778);
+emit_16(714);
+emit_16(778);
+emit_16(713);
+emit_16(778);
+emit_16(714);
+emit_16(779);
+emit_16(715);
+emit_16(779);
+emit_16(714);
+emit_16(779);
+emit_16(715);
+emit_16(780);
+emit_16(716);
+emit_16(780);
+emit_16(715);
+emit_16(780);
+emit_16(716);
+emit_16(781);
+emit_16(717);
+emit_16(781);
+emit_16(716);
+emit_16(781);
+emit_16(717);
+emit_16(782);
+emit_16(718);
+emit_16(782);
+emit_16(717);
+emit_16(782);
+emit_16(718);
+emit_16(783);
+emit_16(719);
+emit_16(783);
+emit_16(718);
+emit_16(783);
+emit_16(719);
+emit_16(784);
+emit_16(720);
+emit_16(784);
+emit_16(719);
+emit_16(784);
+emit_16(720);
+emit_16(785);
+emit_16(721);
+emit_16(785);
+emit_16(720);
+emit_16(785);
+emit_16(721);
+emit_16(786);
+emit_16(722);
+emit_16(786);
+emit_16(721);
+emit_16(786);
+emit_16(722);
+emit_16(787);
+emit_16(723);
+emit_16(787);
+emit_16(722);
+emit_16(787);
+emit_16(723);
+emit_16(788);
+emit_16(724);
+emit_16(788);
+emit_16(723);
+emit_16(788);
+emit_16(724);
+emit_16(789);
+emit_16(725);
+emit_16(789);
+emit_16(724);
+emit_16(789);
+emit_16(725);
+emit_16(790);
+emit_16(726);
+emit_16(790);
+emit_16(725);
+emit_16(790);
+emit_16(726);
+emit_16(791);
+emit_16(727);
+emit_16(791);
+emit_16(726);
+emit_16(791);
+emit_16(727);
+emit_16(792);
+emit_16(728);
+emit_16(792);
+emit_16(727);
+emit_16(792);
+emit_16(728);
+emit_16(793);
+emit_16(729);
+emit_16(793);
+emit_16(728);
+emit_16(793);
+emit_16(729);
+emit_16(794);
+emit_16(730);
+emit_16(794);
+emit_16(729);
+emit_16(794);
+emit_16(730);
+emit_16(795);
+emit_16(731);
+emit_16(795);
+emit_16(730);
+emit_16(795);
+emit_16(731);
+emit_16(796);
+emit_16(732);
+emit_16(796);
+emit_16(731);
+emit_16(796);
+emit_16(732);
+emit_16(797);
+emit_16(733);
+emit_16(797);
+emit_16(732);
+emit_16(797);
+emit_16(733);
+emit_16(798);
+emit_16(734);
+emit_16(798);
+emit_16(733);
+emit_16(798);
+emit_16(734);
+emit_16(799);
+emit_16(735);
+emit_16(799);
+emit_16(734);
+emit_16(799);
+emit_16(735);
+emit_16(800);
+emit_16(736);
+emit_16(800);
+emit_16(735);
+emit_16(800);
+emit_16(736);
+emit_16(801);
+emit_16(737);
+emit_16(801);
+emit_16(736);
+emit_16(801);
+emit_16(737);
+emit_16(802);
+emit_16(738);
+emit_16(802);
+emit_16(737);
+emit_16(802);
+emit_16(738);
+emit_16(803);
+emit_16(739);
+emit_16(803);
+emit_16(738);
+emit_16(803);
+emit_16(739);
+emit_16(804);
+emit_16(740);
+emit_16(804);
+emit_16(739);
+emit_16(804);
+emit_16(740);
+emit_16(805);
+emit_16(741);
+emit_16(805);
+emit_16(740);
+emit_16(805);
+emit_16(741);
+emit_16(806);
+emit_16(742);
+emit_16(806);
+emit_16(741);
+emit_16(806);
+emit_16(742);
+emit_16(807);
+emit_16(743);
+emit_16(807);
+emit_16(742);
+emit_16(807);
+emit_16(743);
+emit_16(808);
+emit_16(744);
+emit_16(808);
+emit_16(743);
+emit_16(808);
+emit_16(744);
+emit_16(809);
+emit_16(745);
+emit_16(809);
+emit_16(744);
+emit_16(809);
+emit_16(745);
+emit_16(810);
+emit_16(746);
+emit_16(810);
+emit_16(745);
+emit_16(810);
+emit_16(746);
+emit_16(811);
+emit_16(747);
+emit_16(811);
+emit_16(746);
+emit_16(811);
+emit_16(747);
+emit_16(812);
+emit_16(748);
+emit_16(812);
+emit_16(747);
+emit_16(812);
+emit_16(748);
+emit_16(813);
+emit_16(749);
+emit_16(813);
+emit_16(748);
+emit_16(813);
+emit_16(749);
+emit_16(814);
+emit_16(750);
+emit_16(814);
+emit_16(749);
+emit_16(814);
+emit_16(750);
+emit_16(815);
+emit_16(751);
+emit_16(815);
+emit_16(750);
+emit_16(815);
+emit_16(751);
+emit_16(816);
+emit_16(752);
+emit_16(816);
+emit_16(751);
+emit_16(816);
+emit_16(752);
+emit_16(817);
+emit_16(753);
+emit_16(817);
+emit_16(752);
+emit_16(817);
+emit_16(753);
+emit_16(818);
+emit_16(754);
+emit_16(818);
+emit_16(753);
+emit_16(818);
+emit_16(754);
+emit_16(819);
+emit_16(755);
+emit_16(819);
+emit_16(754);
+emit_16(819);
+emit_16(755);
+emit_16(820);
+emit_16(756);
+emit_16(820);
+emit_16(755);
+emit_16(820);
+emit_16(756);
+emit_16(821);
+emit_16(757);
+emit_16(821);
+emit_16(756);
+emit_16(821);
+emit_16(757);
+emit_16(822);
+emit_16(758);
+emit_16(822);
+emit_16(757);
+emit_16(822);
+emit_16(758);
+emit_16(823);
+emit_16(759);
+emit_16(823);
+emit_16(758);
+emit_16(823);
+emit_16(759);
+emit_16(824);
+emit_16(760);
+emit_16(824);
+emit_16(759);
+emit_16(824);
+emit_16(760);
+emit_16(825);
+emit_16(761);
+emit_16(825);
+emit_16(760);
+emit_16(825);
+emit_16(761);
+emit_16(826);
+emit_16(762);
+emit_16(826);
+emit_16(761);
+emit_16(826);
+emit_16(762);
+emit_16(827);
+emit_16(763);
+emit_16(827);
+emit_16(762);
+emit_16(827);
+emit_16(763);
+emit_16(828);
+emit_16(764);
+emit_16(828);
+emit_16(763);
+emit_16(828);
+emit_16(764);
+emit_16(829);
+emit_16(765);
+emit_16(829);
+emit_16(764);
+emit_16(829);
+emit_16(765);
+emit_16(830);
+emit_16(766);
+emit_16(830);
+emit_16(765);
+emit_16(830);
+emit_16(766);
+emit_16(831);
+emit_16(767);
+emit_16(831);
+emit_16(766);
+emit_16(832);
+emit_16(768);
+emit_16(833);
+emit_16(769);
+emit_16(833);
+emit_16(768);
+emit_16(833);
+emit_16(769);
+emit_16(834);
+emit_16(770);
+emit_16(834);
+emit_16(769);
+emit_16(834);
+emit_16(770);
+emit_16(835);
+emit_16(771);
+emit_16(835);
+emit_16(770);
+emit_16(835);
+emit_16(771);
+emit_16(836);
+emit_16(772);
+emit_16(836);
+emit_16(771);
+emit_16(836);
+emit_16(772);
+emit_16(837);
+emit_16(773);
+emit_16(837);
+emit_16(772);
+emit_16(837);
+emit_16(773);
+emit_16(838);
+emit_16(774);
+emit_16(838);
+emit_16(773);
+emit_16(838);
+emit_16(774);
+emit_16(839);
+emit_16(775);
+emit_16(839);
+emit_16(774);
+emit_16(839);
+emit_16(775);
+emit_16(840);
+emit_16(776);
+emit_16(840);
+emit_16(775);
+emit_16(840);
+emit_16(776);
+emit_16(841);
+emit_16(777);
+emit_16(841);
+emit_16(776);
+emit_16(841);
+emit_16(777);
+emit_16(842);
+emit_16(778);
+emit_16(842);
+emit_16(777);
+emit_16(842);
+emit_16(778);
+emit_16(843);
+emit_16(779);
+emit_16(843);
+emit_16(778);
+emit_16(843);
+emit_16(779);
+emit_16(844);
+emit_16(780);
+emit_16(844);
+emit_16(779);
+emit_16(844);
+emit_16(780);
+emit_16(845);
+emit_16(781);
+emit_16(845);
+emit_16(780);
+emit_16(845);
+emit_16(781);
+emit_16(846);
+emit_16(782);
+emit_16(846);
+emit_16(781);
+emit_16(846);
+emit_16(782);
+emit_16(847);
+emit_16(783);
+emit_16(847);
+emit_16(782);
+emit_16(847);
+emit_16(783);
+emit_16(848);
+emit_16(784);
+emit_16(848);
+emit_16(783);
+emit_16(848);
+emit_16(784);
+emit_16(849);
+emit_16(785);
+emit_16(849);
+emit_16(784);
+emit_16(849);
+emit_16(785);
+emit_16(850);
+emit_16(786);
+emit_16(850);
+emit_16(785);
+emit_16(850);
+emit_16(786);
+emit_16(851);
+emit_16(787);
+emit_16(851);
+emit_16(786);
+emit_16(851);
+emit_16(787);
+emit_16(852);
+emit_16(788);
+emit_16(852);
+emit_16(787);
+emit_16(852);
+emit_16(788);
+emit_16(853);
+emit_16(789);
+emit_16(853);
+emit_16(788);
+emit_16(853);
+emit_16(789);
+emit_16(854);
+emit_16(790);
+emit_16(854);
+emit_16(789);
+emit_16(854);
+emit_16(790);
+emit_16(855);
+emit_16(791);
+emit_16(855);
+emit_16(790);
+emit_16(855);
+emit_16(791);
+emit_16(856);
+emit_16(792);
+emit_16(856);
+emit_16(791);
+emit_16(856);
+emit_16(792);
+emit_16(857);
+emit_16(793);
+emit_16(857);
+emit_16(792);
+emit_16(857);
+emit_16(793);
+emit_16(858);
+emit_16(794);
+emit_16(858);
+emit_16(793);
+emit_16(858);
+emit_16(794);
+emit_16(859);
+emit_16(795);
+emit_16(859);
+emit_16(794);
+emit_16(859);
+emit_16(795);
+emit_16(860);
+emit_16(796);
+emit_16(860);
+emit_16(795);
+emit_16(860);
+emit_16(796);
+emit_16(861);
+emit_16(797);
+emit_16(861);
+emit_16(796);
+emit_16(861);
+emit_16(797);
+emit_16(862);
+emit_16(798);
+emit_16(862);
+emit_16(797);
+emit_16(862);
+emit_16(798);
+emit_16(863);
+emit_16(799);
+emit_16(863);
+emit_16(798);
+emit_16(863);
+emit_16(799);
+emit_16(864);
+emit_16(800);
+emit_16(864);
+emit_16(799);
+emit_16(864);
+emit_16(800);
+emit_16(865);
+emit_16(801);
+emit_16(865);
+emit_16(800);
+emit_16(865);
+emit_16(801);
+emit_16(866);
+emit_16(802);
+emit_16(866);
+emit_16(801);
+emit_16(866);
+emit_16(802);
+emit_16(867);
+emit_16(803);
+emit_16(867);
+emit_16(802);
+emit_16(867);
+emit_16(803);
+emit_16(868);
+emit_16(804);
+emit_16(868);
+emit_16(803);
+emit_16(868);
+emit_16(804);
+emit_16(869);
+emit_16(805);
+emit_16(869);
+emit_16(804);
+emit_16(869);
+emit_16(805);
+emit_16(870);
+emit_16(806);
+emit_16(870);
+emit_16(805);
+emit_16(870);
+emit_16(806);
+emit_16(871);
+emit_16(807);
+emit_16(871);
+emit_16(806);
+emit_16(871);
+emit_16(807);
+emit_16(872);
+emit_16(808);
+emit_16(872);
+emit_16(807);
+emit_16(872);
+emit_16(808);
+emit_16(873);
+emit_16(809);
+emit_16(873);
+emit_16(808);
+emit_16(873);
+emit_16(809);
+emit_16(874);
+emit_16(810);
+emit_16(874);
+emit_16(809);
+emit_16(874);
+emit_16(810);
+emit_16(875);
+emit_16(811);
+emit_16(875);
+emit_16(810);
+emit_16(875);
+emit_16(811);
+emit_16(876);
+emit_16(812);
+emit_16(876);
+emit_16(811);
+emit_16(876);
+emit_16(812);
+emit_16(877);
+emit_16(813);
+emit_16(877);
+emit_16(812);
+emit_16(877);
+emit_16(813);
+emit_16(878);
+emit_16(814);
+emit_16(878);
+emit_16(813);
+emit_16(878);
+emit_16(814);
+emit_16(879);
+emit_16(815);
+emit_16(879);
+emit_16(814);
+emit_16(879);
+emit_16(815);
+emit_16(880);
+emit_16(816);
+emit_16(880);
+emit_16(815);
+emit_16(880);
+emit_16(816);
+emit_16(881);
+emit_16(817);
+emit_16(881);
+emit_16(816);
+emit_16(881);
+emit_16(817);
+emit_16(882);
+emit_16(818);
+emit_16(882);
+emit_16(817);
+emit_16(882);
+emit_16(818);
+emit_16(883);
+emit_16(819);
+emit_16(883);
+emit_16(818);
+emit_16(883);
+emit_16(819);
+emit_16(884);
+emit_16(820);
+emit_16(884);
+emit_16(819);
+emit_16(884);
+emit_16(820);
+emit_16(885);
+emit_16(821);
+emit_16(885);
+emit_16(820);
+emit_16(885);
+emit_16(821);
+emit_16(886);
+emit_16(822);
+emit_16(886);
+emit_16(821);
+emit_16(886);
+emit_16(822);
+emit_16(887);
+emit_16(823);
+emit_16(887);
+emit_16(822);
+emit_16(887);
+emit_16(823);
+emit_16(888);
+emit_16(824);
+emit_16(888);
+emit_16(823);
+emit_16(888);
+emit_16(824);
+emit_16(889);
+emit_16(825);
+emit_16(889);
+emit_16(824);
+emit_16(889);
+emit_16(825);
+emit_16(890);
+emit_16(826);
+emit_16(890);
+emit_16(825);
+emit_16(890);
+emit_16(826);
+emit_16(891);
+emit_16(827);
+emit_16(891);
+emit_16(826);
+emit_16(891);
+emit_16(827);
+emit_16(892);
+emit_16(828);
+emit_16(892);
+emit_16(827);
+emit_16(892);
+emit_16(828);
+emit_16(893);
+emit_16(829);
+emit_16(893);
+emit_16(828);
+emit_16(893);
+emit_16(829);
+emit_16(894);
+emit_16(830);
+emit_16(894);
+emit_16(829);
+emit_16(894);
+emit_16(830);
+emit_16(895);
+emit_16(831);
+emit_16(895);
+emit_16(830);
+emit_16(896);
+emit_16(832);
+emit_16(897);
+emit_16(833);
+emit_16(897);
+emit_16(832);
+emit_16(897);
+emit_16(833);
+emit_16(898);
+emit_16(834);
+emit_16(898);
+emit_16(833);
+emit_16(898);
+emit_16(834);
+emit_16(899);
+emit_16(835);
+emit_16(899);
+emit_16(834);
+emit_16(899);
+emit_16(835);
+emit_16(900);
+emit_16(836);
+emit_16(900);
+emit_16(835);
+emit_16(900);
+emit_16(836);
+emit_16(901);
+emit_16(837);
+emit_16(901);
+emit_16(836);
+emit_16(901);
+emit_16(837);
+emit_16(902);
+emit_16(838);
+emit_16(902);
+emit_16(837);
+emit_16(902);
+emit_16(838);
+emit_16(903);
+emit_16(839);
+emit_16(903);
+emit_16(838);
+emit_16(903);
+emit_16(839);
+emit_16(904);
+emit_16(840);
+emit_16(904);
+emit_16(839);
+emit_16(904);
+emit_16(840);
+emit_16(905);
+emit_16(841);
+emit_16(905);
+emit_16(840);
+emit_16(905);
+emit_16(841);
+emit_16(906);
+emit_16(842);
+emit_16(906);
+emit_16(841);
+emit_16(906);
+emit_16(842);
+emit_16(907);
+emit_16(843);
+emit_16(907);
+emit_16(842);
+emit_16(907);
+emit_16(843);
+emit_16(908);
+emit_16(844);
+emit_16(908);
+emit_16(843);
+emit_16(908);
+emit_16(844);
+emit_16(909);
+emit_16(845);
+emit_16(909);
+emit_16(844);
+emit_16(909);
+emit_16(845);
+emit_16(910);
+emit_16(846);
+emit_16(910);
+emit_16(845);
+emit_16(910);
+emit_16(846);
+emit_16(911);
+emit_16(847);
+emit_16(911);
+emit_16(846);
+emit_16(911);
+emit_16(847);
+emit_16(912);
+emit_16(848);
+emit_16(912);
+emit_16(847);
+emit_16(912);
+emit_16(848);
+emit_16(913);
+emit_16(849);
+emit_16(913);
+emit_16(848);
+emit_16(913);
+emit_16(849);
+emit_16(914);
+emit_16(850);
+emit_16(914);
+emit_16(849);
+emit_16(914);
+emit_16(850);
+emit_16(915);
+emit_16(851);
+emit_16(915);
+emit_16(850);
+emit_16(915);
+emit_16(851);
+emit_16(916);
+emit_16(852);
+emit_16(916);
+emit_16(851);
+emit_16(916);
+emit_16(852);
+emit_16(917);
+emit_16(853);
+emit_16(917);
+emit_16(852);
+emit_16(917);
+emit_16(853);
+emit_16(918);
+emit_16(854);
+emit_16(918);
+emit_16(853);
+emit_16(918);
+emit_16(854);
+emit_16(919);
+emit_16(855);
+emit_16(919);
+emit_16(854);
+emit_16(919);
+emit_16(855);
+emit_16(920);
+emit_16(856);
+emit_16(920);
+emit_16(855);
+emit_16(920);
+emit_16(856);
+emit_16(921);
+emit_16(857);
+emit_16(921);
+emit_16(856);
+emit_16(921);
+emit_16(857);
+emit_16(922);
+emit_16(858);
+emit_16(922);
+emit_16(857);
+emit_16(922);
+emit_16(858);
+emit_16(923);
+emit_16(859);
+emit_16(923);
+emit_16(858);
+emit_16(923);
+emit_16(859);
+emit_16(924);
+emit_16(860);
+emit_16(924);
+emit_16(859);
+emit_16(924);
+emit_16(860);
+emit_16(925);
+emit_16(861);
+emit_16(925);
+emit_16(860);
+emit_16(925);
+emit_16(861);
+emit_16(926);
+emit_16(862);
+emit_16(926);
+emit_16(861);
+emit_16(926);
+emit_16(862);
+emit_16(927);
+emit_16(863);
+emit_16(927);
+emit_16(862);
+emit_16(927);
+emit_16(863);
+emit_16(928);
+emit_16(864);
+emit_16(928);
+emit_16(863);
+emit_16(928);
+emit_16(864);
+emit_16(929);
+emit_16(865);
+emit_16(929);
+emit_16(864);
+emit_16(929);
+emit_16(865);
+emit_16(930);
+emit_16(866);
+emit_16(930);
+emit_16(865);
+emit_16(930);
+emit_16(866);
+emit_16(931);
+emit_16(867);
+emit_16(931);
+emit_16(866);
+emit_16(931);
+emit_16(867);
+emit_16(932);
+emit_16(868);
+emit_16(932);
+emit_16(867);
+emit_16(932);
+emit_16(868);
+emit_16(933);
+emit_16(869);
+emit_16(933);
+emit_16(868);
+emit_16(933);
+emit_16(869);
+emit_16(934);
+emit_16(870);
+emit_16(934);
+emit_16(869);
+emit_16(934);
+emit_16(870);
+emit_16(935);
+emit_16(871);
+emit_16(935);
+emit_16(870);
+emit_16(935);
+emit_16(871);
+emit_16(936);
+emit_16(872);
+emit_16(936);
+emit_16(871);
+emit_16(936);
+emit_16(872);
+emit_16(937);
+emit_16(873);
+emit_16(937);
+emit_16(872);
+emit_16(937);
+emit_16(873);
+emit_16(938);
+emit_16(874);
+emit_16(938);
+emit_16(873);
+emit_16(938);
+emit_16(874);
+emit_16(939);
+emit_16(875);
+emit_16(939);
+emit_16(874);
+emit_16(939);
+emit_16(875);
+emit_16(940);
+emit_16(876);
+emit_16(940);
+emit_16(875);
+emit_16(940);
+emit_16(876);
+emit_16(941);
+emit_16(877);
+emit_16(941);
+emit_16(876);
+emit_16(941);
+emit_16(877);
+emit_16(942);
+emit_16(878);
+emit_16(942);
+emit_16(877);
+emit_16(942);
+emit_16(878);
+emit_16(943);
+emit_16(879);
+emit_16(943);
+emit_16(878);
+emit_16(943);
+emit_16(879);
+emit_16(944);
+emit_16(880);
+emit_16(944);
+emit_16(879);
+emit_16(944);
+emit_16(880);
+emit_16(945);
+emit_16(881);
+emit_16(945);
+emit_16(880);
+emit_16(945);
+emit_16(881);
+emit_16(946);
+emit_16(882);
+emit_16(946);
+emit_16(881);
+emit_16(946);
+emit_16(882);
+emit_16(947);
+emit_16(883);
+emit_16(947);
+emit_16(882);
+emit_16(947);
+emit_16(883);
+emit_16(948);
+emit_16(884);
+emit_16(948);
+emit_16(883);
+emit_16(948);
+emit_16(884);
+emit_16(949);
+emit_16(885);
+emit_16(949);
+emit_16(884);
+emit_16(949);
+emit_16(885);
+emit_16(950);
+emit_16(886);
+emit_16(950);
+emit_16(885);
+emit_16(950);
+emit_16(886);
+emit_16(951);
+emit_16(887);
+emit_16(951);
+emit_16(886);
+emit_16(951);
+emit_16(887);
+emit_16(952);
+emit_16(888);
+emit_16(952);
+emit_16(887);
+emit_16(952);
+emit_16(888);
+emit_16(953);
+emit_16(889);
+emit_16(953);
+emit_16(888);
+emit_16(953);
+emit_16(889);
+emit_16(954);
+emit_16(890);
+emit_16(954);
+emit_16(889);
+emit_16(954);
+emit_16(890);
+emit_16(955);
+emit_16(891);
+emit_16(955);
+emit_16(890);
+emit_16(955);
+emit_16(891);
+emit_16(956);
+emit_16(892);
+emit_16(956);
+emit_16(891);
+emit_16(956);
+emit_16(892);
+emit_16(957);
+emit_16(893);
+emit_16(957);
+emit_16(892);
+emit_16(957);
+emit_16(893);
+emit_16(958);
+emit_16(894);
+emit_16(958);
+emit_16(893);
+emit_16(958);
+emit_16(894);
+emit_16(959);
+emit_16(895);
+emit_16(959);
+emit_16(894);
+emit_16(960);
+emit_16(896);
+emit_16(961);
+emit_16(897);
+emit_16(961);
+emit_16(896);
+emit_16(961);
+emit_16(897);
+emit_16(962);
+emit_16(898);
+emit_16(962);
+emit_16(897);
+emit_16(962);
+emit_16(898);
+emit_16(963);
+emit_16(899);
+emit_16(963);
+emit_16(898);
+emit_16(963);
+emit_16(899);
+emit_16(964);
+emit_16(900);
+emit_16(964);
+emit_16(899);
+emit_16(964);
+emit_16(900);
+emit_16(965);
+emit_16(901);
+emit_16(965);
+emit_16(900);
+emit_16(965);
+emit_16(901);
+emit_16(966);
+emit_16(902);
+emit_16(966);
+emit_16(901);
+emit_16(966);
+emit_16(902);
+emit_16(967);
+emit_16(903);
+emit_16(967);
+emit_16(902);
+emit_16(967);
+emit_16(903);
+emit_16(968);
+emit_16(904);
+emit_16(968);
+emit_16(903);
+emit_16(968);
+emit_16(904);
+emit_16(969);
+emit_16(905);
+emit_16(969);
+emit_16(904);
+emit_16(969);
+emit_16(905);
+emit_16(970);
+emit_16(906);
+emit_16(970);
+emit_16(905);
+emit_16(970);
+emit_16(906);
+emit_16(971);
+emit_16(907);
+emit_16(971);
+emit_16(906);
+emit_16(971);
+emit_16(907);
+emit_16(972);
+emit_16(908);
+emit_16(972);
+emit_16(907);
+emit_16(972);
+emit_16(908);
+emit_16(973);
+emit_16(909);
+emit_16(973);
+emit_16(908);
+emit_16(973);
+emit_16(909);
+emit_16(974);
+emit_16(910);
+emit_16(974);
+emit_16(909);
+emit_16(974);
+emit_16(910);
+emit_16(975);
+emit_16(911);
+emit_16(975);
+emit_16(910);
+emit_16(975);
+emit_16(911);
+emit_16(976);
+emit_16(912);
+emit_16(976);
+emit_16(911);
+emit_16(976);
+emit_16(912);
+emit_16(977);
+emit_16(913);
+emit_16(977);
+emit_16(912);
+emit_16(977);
+emit_16(913);
+emit_16(978);
+emit_16(914);
+emit_16(978);
+emit_16(913);
+emit_16(978);
+emit_16(914);
+emit_16(979);
+emit_16(915);
+emit_16(979);
+emit_16(914);
+emit_16(979);
+emit_16(915);
+emit_16(980);
+emit_16(916);
+emit_16(980);
+emit_16(915);
+emit_16(980);
+emit_16(916);
+emit_16(981);
+emit_16(917);
+emit_16(981);
+emit_16(916);
+emit_16(981);
+emit_16(917);
+emit_16(982);
+emit_16(918);
+emit_16(982);
+emit_16(917);
+emit_16(982);
+emit_16(918);
+emit_16(983);
+emit_16(919);
+emit_16(983);
+emit_16(918);
+emit_16(983);
+emit_16(919);
+emit_16(984);
+emit_16(920);
+emit_16(984);
+emit_16(919);
+emit_16(984);
+emit_16(920);
+emit_16(985);
+emit_16(921);
+emit_16(985);
+emit_16(920);
+emit_16(985);
+emit_16(921);
+emit_16(986);
+emit_16(922);
+emit_16(986);
+emit_16(921);
+emit_16(986);
+emit_16(922);
+emit_16(987);
+emit_16(923);
+emit_16(987);
+emit_16(922);
+emit_16(987);
+emit_16(923);
+emit_16(988);
+emit_16(924);
+emit_16(988);
+emit_16(923);
+emit_16(988);
+emit_16(924);
+emit_16(989);
+emit_16(925);
+emit_16(989);
+emit_16(924);
+emit_16(989);
+emit_16(925);
+emit_16(990);
+emit_16(926);
+emit_16(990);
+emit_16(925);
+emit_16(990);
+emit_16(926);
+emit_16(991);
+emit_16(927);
+emit_16(991);
+emit_16(926);
+emit_16(991);
+emit_16(927);
+emit_16(992);
+emit_16(928);
+emit_16(992);
+emit_16(927);
+emit_16(992);
+emit_16(928);
+emit_16(993);
+emit_16(929);
+emit_16(993);
+emit_16(928);
+emit_16(993);
+emit_16(929);
+emit_16(994);
+emit_16(930);
+emit_16(994);
+emit_16(929);
+emit_16(994);
+emit_16(930);
+emit_16(995);
+emit_16(931);
+emit_16(995);
+emit_16(930);
+emit_16(995);
+emit_16(931);
+emit_16(996);
+emit_16(932);
+emit_16(996);
+emit_16(931);
+emit_16(996);
+emit_16(932);
+emit_16(997);
+emit_16(933);
+emit_16(997);
+emit_16(932);
+emit_16(997);
+emit_16(933);
+emit_16(998);
+emit_16(934);
+emit_16(998);
+emit_16(933);
+emit_16(998);
+emit_16(934);
+emit_16(999);
+emit_16(935);
+emit_16(999);
+emit_16(934);
+emit_16(999);
+emit_16(935);
+emit_16(1000);
+emit_16(936);
+emit_16(1000);
+emit_16(935);
+emit_16(1000);
+emit_16(936);
+emit_16(1001);
+emit_16(937);
+emit_16(1001);
+emit_16(936);
+emit_16(1001);
+emit_16(937);
+emit_16(1002);
+emit_16(938);
+emit_16(1002);
+emit_16(937);
+emit_16(1002);
+emit_16(938);
+emit_16(1003);
+emit_16(939);
+emit_16(1003);
+emit_16(938);
+emit_16(1003);
+emit_16(939);
+emit_16(1004);
+emit_16(940);
+emit_16(1004);
+emit_16(939);
+emit_16(1004);
+emit_16(940);
+emit_16(1005);
+emit_16(941);
+emit_16(1005);
+emit_16(940);
+emit_16(1005);
+emit_16(941);
+emit_16(1006);
+emit_16(942);
+emit_16(1006);
+emit_16(941);
+emit_16(1006);
+emit_16(942);
+emit_16(1007);
+emit_16(943);
+emit_16(1007);
+emit_16(942);
+emit_16(1007);
+emit_16(943);
+emit_16(1008);
+emit_16(944);
+emit_16(1008);
+emit_16(943);
+emit_16(1008);
+emit_16(944);
+emit_16(1009);
+emit_16(945);
+emit_16(1009);
+emit_16(944);
+emit_16(1009);
+emit_16(945);
+emit_16(1010);
+emit_16(946);
+emit_16(1010);
+emit_16(945);
+emit_16(1010);
+emit_16(946);
+emit_16(1011);
+emit_16(947);
+emit_16(1011);
+emit_16(946);
+emit_16(1011);
+emit_16(947);
+emit_16(1012);
+emit_16(948);
+emit_16(1012);
+emit_16(947);
+emit_16(1012);
+emit_16(948);
+emit_16(1013);
+emit_16(949);
+emit_16(1013);
+emit_16(948);
+emit_16(1013);
+emit_16(949);
+emit_16(1014);
+emit_16(950);
+emit_16(1014);
+emit_16(949);
+emit_16(1014);
+emit_16(950);
+emit_16(1015);
+emit_16(951);
+emit_16(1015);
+emit_16(950);
+emit_16(1015);
+emit_16(951);
+emit_16(1016);
+emit_16(952);
+emit_16(1016);
+emit_16(951);
+emit_16(1016);
+emit_16(952);
+emit_16(1017);
+emit_16(953);
+emit_16(1017);
+emit_16(952);
+emit_16(1017);
+emit_16(953);
+emit_16(1018);
+emit_16(954);
+emit_16(1018);
+emit_16(953);
+emit_16(1018);
+emit_16(954);
+emit_16(1019);
+emit_16(955);
+emit_16(1019);
+emit_16(954);
+emit_16(1019);
+emit_16(955);
+emit_16(1020);
+emit_16(956);
+emit_16(1020);
+emit_16(955);
+emit_16(1020);
+emit_16(956);
+emit_16(1021);
+emit_16(957);
+emit_16(1021);
+emit_16(956);
+emit_16(1021);
+emit_16(957);
+emit_16(1022);
+emit_16(958);
+emit_16(1022);
+emit_16(957);
+emit_16(1022);
+emit_16(958);
+emit_16(1023);
+emit_16(959);
+emit_16(1023);
+emit_16(958);
+emit_16(1024);
+emit_16(960);
+emit_16(1025);
+emit_16(961);
+emit_16(1025);
+emit_16(960);
+emit_16(1025);
+emit_16(961);
+emit_16(1026);
+emit_16(962);
+emit_16(1026);
+emit_16(961);
+emit_16(1026);
+emit_16(962);
+emit_16(1027);
+emit_16(963);
+emit_16(1027);
+emit_16(962);
+emit_16(1027);
+emit_16(963);
+emit_16(1028);
+emit_16(964);
+emit_16(1028);
+emit_16(963);
+emit_16(1028);
+emit_16(964);
+emit_16(1029);
+emit_16(965);
+emit_16(1029);
+emit_16(964);
+emit_16(1029);
+emit_16(965);
+emit_16(1030);
+emit_16(966);
+emit_16(1030);
+emit_16(965);
+emit_16(1030);
+emit_16(966);
+emit_16(1031);
+emit_16(967);
+emit_16(1031);
+emit_16(966);
+emit_16(1031);
+emit_16(967);
+emit_16(1032);
+emit_16(968);
+emit_16(1032);
+emit_16(967);
+emit_16(1032);
+emit_16(968);
+emit_16(1033);
+emit_16(969);
+emit_16(1033);
+emit_16(968);
+emit_16(1033);
+emit_16(969);
+emit_16(1034);
+emit_16(970);
+emit_16(1034);
+emit_16(969);
+emit_16(1034);
+emit_16(970);
+emit_16(1035);
+emit_16(971);
+emit_16(1035);
+emit_16(970);
+emit_16(1035);
+emit_16(971);
+emit_16(1036);
+emit_16(972);
+emit_16(1036);
+emit_16(971);
+emit_16(1036);
+emit_16(972);
+emit_16(1037);
+emit_16(973);
+emit_16(1037);
+emit_16(972);
+emit_16(1037);
+emit_16(973);
+emit_16(1038);
+emit_16(974);
+emit_16(1038);
+emit_16(973);
+emit_16(1038);
+emit_16(974);
+emit_16(1039);
+emit_16(975);
+emit_16(1039);
+emit_16(974);
+emit_16(1039);
+emit_16(975);
+emit_16(1040);
+emit_16(976);
+emit_16(1040);
+emit_16(975);
+emit_16(1040);
+emit_16(976);
+emit_16(1041);
+emit_16(977);
+emit_16(1041);
+emit_16(976);
+emit_16(1041);
+emit_16(977);
+emit_16(1042);
+emit_16(978);
+emit_16(1042);
+emit_16(977);
+emit_16(1042);
+emit_16(978);
+emit_16(1043);
+emit_16(979);
+emit_16(1043);
+emit_16(978);
+emit_16(1043);
+emit_16(979);
+emit_16(1044);
+emit_16(980);
+emit_16(1044);
+emit_16(979);
+emit_16(1044);
+emit_16(980);
+emit_16(1045);
+emit_16(981);
+emit_16(1045);
+emit_16(980);
+emit_16(1045);
+emit_16(981);
+emit_16(1046);
+emit_16(982);
+emit_16(1046);
+emit_16(981);
+emit_16(1046);
+emit_16(982);
+emit_16(1047);
+emit_16(983);
+emit_16(1047);
+emit_16(982);
+emit_16(1047);
+emit_16(983);
+emit_16(1048);
+emit_16(984);
+emit_16(1048);
+emit_16(983);
+emit_16(1048);
+emit_16(984);
+emit_16(1049);
+emit_16(985);
+emit_16(1049);
+emit_16(984);
+emit_16(1049);
+emit_16(985);
+emit_16(1050);
+emit_16(986);
+emit_16(1050);
+emit_16(985);
+emit_16(1050);
+emit_16(986);
+emit_16(1051);
+emit_16(987);
+emit_16(1051);
+emit_16(986);
+emit_16(1051);
+emit_16(987);
+emit_16(1052);
+emit_16(988);
+emit_16(1052);
+emit_16(987);
+emit_16(1052);
+emit_16(988);
+emit_16(1053);
+emit_16(989);
+emit_16(1053);
+emit_16(988);
+emit_16(1053);
+emit_16(989);
+emit_16(1054);
+emit_16(990);
+emit_16(1054);
+emit_16(989);
+emit_16(1054);
+emit_16(990);
+emit_16(1055);
+emit_16(991);
+emit_16(1055);
+emit_16(990);
+emit_16(1055);
+emit_16(991);
+emit_16(1056);
+emit_16(992);
+emit_16(1056);
+emit_16(991);
+emit_16(1056);
+emit_16(992);
+emit_16(1057);
+emit_16(993);
+emit_16(1057);
+emit_16(992);
+emit_16(1057);
+emit_16(993);
+emit_16(1058);
+emit_16(994);
+emit_16(1058);
+emit_16(993);
+emit_16(1058);
+emit_16(994);
+emit_16(1059);
+emit_16(995);
+emit_16(1059);
+emit_16(994);
+emit_16(1059);
+emit_16(995);
+emit_16(1060);
+emit_16(996);
+emit_16(1060);
+emit_16(995);
+emit_16(1060);
+emit_16(996);
+emit_16(1061);
+emit_16(997);
+emit_16(1061);
+emit_16(996);
+emit_16(1061);
+emit_16(997);
+emit_16(1062);
+emit_16(998);
+emit_16(1062);
+emit_16(997);
+emit_16(1062);
+emit_16(998);
+emit_16(1063);
+emit_16(999);
+emit_16(1063);
+emit_16(998);
+emit_16(1063);
+emit_16(999);
+emit_16(1064);
+emit_16(1000);
+emit_16(1064);
+emit_16(999);
+emit_16(1064);
+emit_16(1000);
+emit_16(1065);
+emit_16(1001);
+emit_16(1065);
+emit_16(1000);
+emit_16(1065);
+emit_16(1001);
+emit_16(1066);
+emit_16(1002);
+emit_16(1066);
+emit_16(1001);
+emit_16(1066);
+emit_16(1002);
+emit_16(1067);
+emit_16(1003);
+emit_16(1067);
+emit_16(1002);
+emit_16(1067);
+emit_16(1003);
+emit_16(1068);
+emit_16(1004);
+emit_16(1068);
+emit_16(1003);
+emit_16(1068);
+emit_16(1004);
+emit_16(1069);
+emit_16(1005);
+emit_16(1069);
+emit_16(1004);
+emit_16(1069);
+emit_16(1005);
+emit_16(1070);
+emit_16(1006);
+emit_16(1070);
+emit_16(1005);
+emit_16(1070);
+emit_16(1006);
+emit_16(1071);
+emit_16(1007);
+emit_16(1071);
+emit_16(1006);
+emit_16(1071);
+emit_16(1007);
+emit_16(1072);
+emit_16(1008);
+emit_16(1072);
+emit_16(1007);
+emit_16(1072);
+emit_16(1008);
+emit_16(1073);
+emit_16(1009);
+emit_16(1073);
+emit_16(1008);
+emit_16(1073);
+emit_16(1009);
+emit_16(1074);
+emit_16(1010);
+emit_16(1074);
+emit_16(1009);
+emit_16(1074);
+emit_16(1010);
+emit_16(1075);
+emit_16(1011);
+emit_16(1075);
+emit_16(1010);
+emit_16(1075);
+emit_16(1011);
+emit_16(1076);
+emit_16(1012);
+emit_16(1076);
+emit_16(1011);
+emit_16(1076);
+emit_16(1012);
+emit_16(1077);
+emit_16(1013);
+emit_16(1077);
+emit_16(1012);
+emit_16(1077);
+emit_16(1013);
+emit_16(1078);
+emit_16(1014);
+emit_16(1078);
+emit_16(1013);
+emit_16(1078);
+emit_16(1014);
+emit_16(1079);
+emit_16(1015);
+emit_16(1079);
+emit_16(1014);
+emit_16(1079);
+emit_16(1015);
+emit_16(1080);
+emit_16(1016);
+emit_16(1080);
+emit_16(1015);
+emit_16(1080);
+emit_16(1016);
+emit_16(1081);
+emit_16(1017);
+emit_16(1081);
+emit_16(1016);
+emit_16(1081);
+emit_16(1017);
+emit_16(1082);
+emit_16(1018);
+emit_16(1082);
+emit_16(1017);
+emit_16(1082);
+emit_16(1018);
+emit_16(1083);
+emit_16(1019);
+emit_16(1083);
+emit_16(1018);
+emit_16(1083);
+emit_16(1019);
+emit_16(1084);
+emit_16(1020);
+emit_16(1084);
+emit_16(1019);
+emit_16(1084);
+emit_16(1020);
+emit_16(1085);
+emit_16(1021);
+emit_16(1085);
+emit_16(1020);
+emit_16(1085);
+emit_16(1021);
+emit_16(1086);
+emit_16(1022);
+emit_16(1086);
+emit_16(1021);
+emit_16(1086);
+emit_16(1022);
+emit_16(1087);
+emit_16(1023);
+emit_16(1087);
+emit_16(1022);
+emit_16(1088);
+emit_16(1024);
+emit_16(1089);
+emit_16(1025);
+emit_16(1089);
+emit_16(1024);
+emit_16(1089);
+emit_16(1025);
+emit_16(1090);
+emit_16(1026);
+emit_16(1090);
+emit_16(1025);
+emit_16(1090);
+emit_16(1026);
+emit_16(1091);
+emit_16(1027);
+emit_16(1091);
+emit_16(1026);
+emit_16(1091);
+emit_16(1027);
+emit_16(1092);
+emit_16(1028);
+emit_16(1092);
+emit_16(1027);
+emit_16(1092);
+emit_16(1028);
+emit_16(1093);
+emit_16(1029);
+emit_16(1093);
+emit_16(1028);
+emit_16(1093);
+emit_16(1029);
+emit_16(1094);
+emit_16(1030);
+emit_16(1094);
+emit_16(1029);
+emit_16(1094);
+emit_16(1030);
+emit_16(1095);
+emit_16(1031);
+emit_16(1095);
+emit_16(1030);
+emit_16(1095);
+emit_16(1031);
+emit_16(1096);
+emit_16(1032);
+emit_16(1096);
+emit_16(1031);
+emit_16(1096);
+emit_16(1032);
+emit_16(1097);
+emit_16(1033);
+emit_16(1097);
+emit_16(1032);
+emit_16(1097);
+emit_16(1033);
+emit_16(1098);
+emit_16(1034);
+emit_16(1098);
+emit_16(1033);
+emit_16(1098);
+emit_16(1034);
+emit_16(1099);
+emit_16(1035);
+emit_16(1099);
+emit_16(1034);
+emit_16(1099);
+emit_16(1035);
+emit_16(1100);
+emit_16(1036);
+emit_16(1100);
+emit_16(1035);
+emit_16(1100);
+emit_16(1036);
+emit_16(1101);
+emit_16(1037);
+emit_16(1101);
+emit_16(1036);
+emit_16(1101);
+emit_16(1037);
+emit_16(1102);
+emit_16(1038);
+emit_16(1102);
+emit_16(1037);
+emit_16(1102);
+emit_16(1038);
+emit_16(1103);
+emit_16(1039);
+emit_16(1103);
+emit_16(1038);
+emit_16(1103);
+emit_16(1039);
+emit_16(1104);
+emit_16(1040);
+emit_16(1104);
+emit_16(1039);
+emit_16(1104);
+emit_16(1040);
+emit_16(1105);
+emit_16(1041);
+emit_16(1105);
+emit_16(1040);
+emit_16(1105);
+emit_16(1041);
+emit_16(1106);
+emit_16(1042);
+emit_16(1106);
+emit_16(1041);
+emit_16(1106);
+emit_16(1042);
+emit_16(1107);
+emit_16(1043);
+emit_16(1107);
+emit_16(1042);
+emit_16(1107);
+emit_16(1043);
+emit_16(1108);
+emit_16(1044);
+emit_16(1108);
+emit_16(1043);
+emit_16(1108);
+emit_16(1044);
+emit_16(1109);
+emit_16(1045);
+emit_16(1109);
+emit_16(1044);
+emit_16(1109);
+emit_16(1045);
+emit_16(1110);
+emit_16(1046);
+emit_16(1110);
+emit_16(1045);
+emit_16(1110);
+emit_16(1046);
+emit_16(1111);
+emit_16(1047);
+emit_16(1111);
+emit_16(1046);
+emit_16(1111);
+emit_16(1047);
+emit_16(1112);
+emit_16(1048);
+emit_16(1112);
+emit_16(1047);
+emit_16(1112);
+emit_16(1048);
+emit_16(1113);
+emit_16(1049);
+emit_16(1113);
+emit_16(1048);
+emit_16(1113);
+emit_16(1049);
+emit_16(1114);
+emit_16(1050);
+emit_16(1114);
+emit_16(1049);
+emit_16(1114);
+emit_16(1050);
+emit_16(1115);
+emit_16(1051);
+emit_16(1115);
+emit_16(1050);
+emit_16(1115);
+emit_16(1051);
+emit_16(1116);
+emit_16(1052);
+emit_16(1116);
+emit_16(1051);
+emit_16(1116);
+emit_16(1052);
+emit_16(1117);
+emit_16(1053);
+emit_16(1117);
+emit_16(1052);
+emit_16(1117);
+emit_16(1053);
+emit_16(1118);
+emit_16(1054);
+emit_16(1118);
+emit_16(1053);
+emit_16(1118);
+emit_16(1054);
+emit_16(1119);
+emit_16(1055);
+emit_16(1119);
+emit_16(1054);
+emit_16(1119);
+emit_16(1055);
+emit_16(1120);
+emit_16(1056);
+emit_16(1120);
+emit_16(1055);
+emit_16(1120);
+emit_16(1056);
+emit_16(1121);
+emit_16(1057);
+emit_16(1121);
+emit_16(1056);
+emit_16(1121);
+emit_16(1057);
+emit_16(1122);
+emit_16(1058);
+emit_16(1122);
+emit_16(1057);
+emit_16(1122);
+emit_16(1058);
+emit_16(1123);
+emit_16(1059);
+emit_16(1123);
+emit_16(1058);
+emit_16(1123);
+emit_16(1059);
+emit_16(1124);
+emit_16(1060);
+emit_16(1124);
+emit_16(1059);
+emit_16(1124);
+emit_16(1060);
+emit_16(1125);
+emit_16(1061);
+emit_16(1125);
+emit_16(1060);
+emit_16(1125);
+emit_16(1061);
+emit_16(1126);
+emit_16(1062);
+emit_16(1126);
+emit_16(1061);
+emit_16(1126);
+emit_16(1062);
+emit_16(1127);
+emit_16(1063);
+emit_16(1127);
+emit_16(1062);
+emit_16(1127);
+emit_16(1063);
+emit_16(1128);
+emit_16(1064);
+emit_16(1128);
+emit_16(1063);
+emit_16(1128);
+emit_16(1064);
+emit_16(1129);
+emit_16(1065);
+emit_16(1129);
+emit_16(1064);
+emit_16(1129);
+emit_16(1065);
+emit_16(1130);
+emit_16(1066);
+emit_16(1130);
+emit_16(1065);
+emit_16(1130);
+emit_16(1066);
+emit_16(1131);
+emit_16(1067);
+emit_16(1131);
+emit_16(1066);
+emit_16(1131);
+emit_16(1067);
+emit_16(1132);
+emit_16(1068);
+emit_16(1132);
+emit_16(1067);
+emit_16(1132);
+emit_16(1068);
+emit_16(1133);
+emit_16(1069);
+emit_16(1133);
+emit_16(1068);
+emit_16(1133);
+emit_16(1069);
+emit_16(1134);
+emit_16(1070);
+emit_16(1134);
+emit_16(1069);
+emit_16(1134);
+emit_16(1070);
+emit_16(1135);
+emit_16(1071);
+emit_16(1135);
+emit_16(1070);
+emit_16(1135);
+emit_16(1071);
+emit_16(1136);
+emit_16(1072);
+emit_16(1136);
+emit_16(1071);
+emit_16(1136);
+emit_16(1072);
+emit_16(1137);
+emit_16(1073);
+emit_16(1137);
+emit_16(1072);
+emit_16(1137);
+emit_16(1073);
+emit_16(1138);
+emit_16(1074);
+emit_16(1138);
+emit_16(1073);
+emit_16(1138);
+emit_16(1074);
+emit_16(1139);
+emit_16(1075);
+emit_16(1139);
+emit_16(1074);
+emit_16(1139);
+emit_16(1075);
+emit_16(1140);
+emit_16(1076);
+emit_16(1140);
+emit_16(1075);
+emit_16(1140);
+emit_16(1076);
+emit_16(1141);
+emit_16(1077);
+emit_16(1141);
+emit_16(1076);
+emit_16(1141);
+emit_16(1077);
+emit_16(1142);
+emit_16(1078);
+emit_16(1142);
+emit_16(1077);
+emit_16(1142);
+emit_16(1078);
+emit_16(1143);
+emit_16(1079);
+emit_16(1143);
+emit_16(1078);
+emit_16(1143);
+emit_16(1079);
+emit_16(1144);
+emit_16(1080);
+emit_16(1144);
+emit_16(1079);
+emit_16(1144);
+emit_16(1080);
+emit_16(1145);
+emit_16(1081);
+emit_16(1145);
+emit_16(1080);
+emit_16(1145);
+emit_16(1081);
+emit_16(1146);
+emit_16(1082);
+emit_16(1146);
+emit_16(1081);
+emit_16(1146);
+emit_16(1082);
+emit_16(1147);
+emit_16(1083);
+emit_16(1147);
+emit_16(1082);
+emit_16(1147);
+emit_16(1083);
+emit_16(1148);
+emit_16(1084);
+emit_16(1148);
+emit_16(1083);
+emit_16(1148);
+emit_16(1084);
+emit_16(1149);
+emit_16(1085);
+emit_16(1149);
+emit_16(1084);
+emit_16(1149);
+emit_16(1085);
+emit_16(1150);
+emit_16(1086);
+emit_16(1150);
+emit_16(1085);
+emit_16(1150);
+emit_16(1086);
+emit_16(1151);
+emit_16(1087);
+emit_16(1151);
+emit_16(1086);
+emit_16(1152);
+emit_16(1088);
+emit_16(1153);
+emit_16(1089);
+emit_16(1153);
+emit_16(1088);
+emit_16(1153);
+emit_16(1089);
+emit_16(1154);
+emit_16(1090);
+emit_16(1154);
+emit_16(1089);
+emit_16(1154);
+emit_16(1090);
+emit_16(1155);
+emit_16(1091);
+emit_16(1155);
+emit_16(1090);
+emit_16(1155);
+emit_16(1091);
+emit_16(1156);
+emit_16(1092);
+emit_16(1156);
+emit_16(1091);
+emit_16(1156);
+emit_16(1092);
+emit_16(1157);
+emit_16(1093);
+emit_16(1157);
+emit_16(1092);
+emit_16(1157);
+emit_16(1093);
+emit_16(1158);
+emit_16(1094);
+emit_16(1158);
+emit_16(1093);
+emit_16(1158);
+emit_16(1094);
+emit_16(1159);
+emit_16(1095);
+emit_16(1159);
+emit_16(1094);
+emit_16(1159);
+emit_16(1095);
+emit_16(1160);
+emit_16(1096);
+emit_16(1160);
+emit_16(1095);
+emit_16(1160);
+emit_16(1096);
+emit_16(1161);
+emit_16(1097);
+emit_16(1161);
+emit_16(1096);
+emit_16(1161);
+emit_16(1097);
+emit_16(1162);
+emit_16(1098);
+emit_16(1162);
+emit_16(1097);
+emit_16(1162);
+emit_16(1098);
+emit_16(1163);
+emit_16(1099);
+emit_16(1163);
+emit_16(1098);
+emit_16(1163);
+emit_16(1099);
+emit_16(1164);
+emit_16(1100);
+emit_16(1164);
+emit_16(1099);
+emit_16(1164);
+emit_16(1100);
+emit_16(1165);
+emit_16(1101);
+emit_16(1165);
+emit_16(1100);
+emit_16(1165);
+emit_16(1101);
+emit_16(1166);
+emit_16(1102);
+emit_16(1166);
+emit_16(1101);
+emit_16(1166);
+emit_16(1102);
+emit_16(1167);
+emit_16(1103);
+emit_16(1167);
+emit_16(1102);
+emit_16(1167);
+emit_16(1103);
+emit_16(1168);
+emit_16(1104);
+emit_16(1168);
+emit_16(1103);
+emit_16(1168);
+emit_16(1104);
+emit_16(1169);
+emit_16(1105);
+emit_16(1169);
+emit_16(1104);
+emit_16(1169);
+emit_16(1105);
+emit_16(1170);
+emit_16(1106);
+emit_16(1170);
+emit_16(1105);
+emit_16(1170);
+emit_16(1106);
+emit_16(1171);
+emit_16(1107);
+emit_16(1171);
+emit_16(1106);
+emit_16(1171);
+emit_16(1107);
+emit_16(1172);
+emit_16(1108);
+emit_16(1172);
+emit_16(1107);
+emit_16(1172);
+emit_16(1108);
+emit_16(1173);
+emit_16(1109);
+emit_16(1173);
+emit_16(1108);
+emit_16(1173);
+emit_16(1109);
+emit_16(1174);
+emit_16(1110);
+emit_16(1174);
+emit_16(1109);
+emit_16(1174);
+emit_16(1110);
+emit_16(1175);
+emit_16(1111);
+emit_16(1175);
+emit_16(1110);
+emit_16(1175);
+emit_16(1111);
+emit_16(1176);
+emit_16(1112);
+emit_16(1176);
+emit_16(1111);
+emit_16(1176);
+emit_16(1112);
+emit_16(1177);
+emit_16(1113);
+emit_16(1177);
+emit_16(1112);
+emit_16(1177);
+emit_16(1113);
+emit_16(1178);
+emit_16(1114);
+emit_16(1178);
+emit_16(1113);
+emit_16(1178);
+emit_16(1114);
+emit_16(1179);
+emit_16(1115);
+emit_16(1179);
+emit_16(1114);
+emit_16(1179);
+emit_16(1115);
+emit_16(1180);
+emit_16(1116);
+emit_16(1180);
+emit_16(1115);
+emit_16(1180);
+emit_16(1116);
+emit_16(1181);
+emit_16(1117);
+emit_16(1181);
+emit_16(1116);
+emit_16(1181);
+emit_16(1117);
+emit_16(1182);
+emit_16(1118);
+emit_16(1182);
+emit_16(1117);
+emit_16(1182);
+emit_16(1118);
+emit_16(1183);
+emit_16(1119);
+emit_16(1183);
+emit_16(1118);
+emit_16(1183);
+emit_16(1119);
+emit_16(1184);
+emit_16(1120);
+emit_16(1184);
+emit_16(1119);
+emit_16(1184);
+emit_16(1120);
+emit_16(1185);
+emit_16(1121);
+emit_16(1185);
+emit_16(1120);
+emit_16(1185);
+emit_16(1121);
+emit_16(1186);
+emit_16(1122);
+emit_16(1186);
+emit_16(1121);
+emit_16(1186);
+emit_16(1122);
+emit_16(1187);
+emit_16(1123);
+emit_16(1187);
+emit_16(1122);
+emit_16(1187);
+emit_16(1123);
+emit_16(1188);
+emit_16(1124);
+emit_16(1188);
+emit_16(1123);
+emit_16(1188);
+emit_16(1124);
+emit_16(1189);
+emit_16(1125);
+emit_16(1189);
+emit_16(1124);
+emit_16(1189);
+emit_16(1125);
+emit_16(1190);
+emit_16(1126);
+emit_16(1190);
+emit_16(1125);
+emit_16(1190);
+emit_16(1126);
+emit_16(1191);
+emit_16(1127);
+emit_16(1191);
+emit_16(1126);
+emit_16(1191);
+emit_16(1127);
+emit_16(1192);
+emit_16(1128);
+emit_16(1192);
+emit_16(1127);
+emit_16(1192);
+emit_16(1128);
+emit_16(1193);
+emit_16(1129);
+emit_16(1193);
+emit_16(1128);
+emit_16(1193);
+emit_16(1129);
+emit_16(1194);
+emit_16(1130);
+emit_16(1194);
+emit_16(1129);
+emit_16(1194);
+emit_16(1130);
+emit_16(1195);
+emit_16(1131);
+emit_16(1195);
+emit_16(1130);
+emit_16(1195);
+emit_16(1131);
+emit_16(1196);
+emit_16(1132);
+emit_16(1196);
+emit_16(1131);
+emit_16(1196);
+emit_16(1132);
+emit_16(1197);
+emit_16(1133);
+emit_16(1197);
+emit_16(1132);
+emit_16(1197);
+emit_16(1133);
+emit_16(1198);
+emit_16(1134);
+emit_16(1198);
+emit_16(1133);
+emit_16(1198);
+emit_16(1134);
+emit_16(1199);
+emit_16(1135);
+emit_16(1199);
+emit_16(1134);
+emit_16(1199);
+emit_16(1135);
+emit_16(1200);
+emit_16(1136);
+emit_16(1200);
+emit_16(1135);
+emit_16(1200);
+emit_16(1136);
+emit_16(1201);
+emit_16(1137);
+emit_16(1201);
+emit_16(1136);
+emit_16(1201);
+emit_16(1137);
+emit_16(1202);
+emit_16(1138);
+emit_16(1202);
+emit_16(1137);
+emit_16(1202);
+emit_16(1138);
+emit_16(1203);
+emit_16(1139);
+emit_16(1203);
+emit_16(1138);
+emit_16(1203);
+emit_16(1139);
+emit_16(1204);
+emit_16(1140);
+emit_16(1204);
+emit_16(1139);
+emit_16(1204);
+emit_16(1140);
+emit_16(1205);
+emit_16(1141);
+emit_16(1205);
+emit_16(1140);
+emit_16(1205);
+emit_16(1141);
+emit_16(1206);
+emit_16(1142);
+emit_16(1206);
+emit_16(1141);
+emit_16(1206);
+emit_16(1142);
+emit_16(1207);
+emit_16(1143);
+emit_16(1207);
+emit_16(1142);
+emit_16(1207);
+emit_16(1143);
+emit_16(1208);
+emit_16(1144);
+emit_16(1208);
+emit_16(1143);
+emit_16(1208);
+emit_16(1144);
+emit_16(1209);
+emit_16(1145);
+emit_16(1209);
+emit_16(1144);
+emit_16(1209);
+emit_16(1145);
+emit_16(1210);
+emit_16(1146);
+emit_16(1210);
+emit_16(1145);
+emit_16(1210);
+emit_16(1146);
+emit_16(1211);
+emit_16(1147);
+emit_16(1211);
+emit_16(1146);
+emit_16(1211);
+emit_16(1147);
+emit_16(1212);
+emit_16(1148);
+emit_16(1212);
+emit_16(1147);
+emit_16(1212);
+emit_16(1148);
+emit_16(1213);
+emit_16(1149);
+emit_16(1213);
+emit_16(1148);
+emit_16(1213);
+emit_16(1149);
+emit_16(1214);
+emit_16(1150);
+emit_16(1214);
+emit_16(1149);
+emit_16(1214);
+emit_16(1150);
+emit_16(1215);
+emit_16(1151);
+emit_16(1215);
+emit_16(1150);
+emit_16(1216);
+emit_16(1152);
+emit_16(1217);
+emit_16(1153);
+emit_16(1217);
+emit_16(1152);
+emit_16(1217);
+emit_16(1153);
+emit_16(1218);
+emit_16(1154);
+emit_16(1218);
+emit_16(1153);
+emit_16(1218);
+emit_16(1154);
+emit_16(1219);
+emit_16(1155);
+emit_16(1219);
+emit_16(1154);
+emit_16(1219);
+emit_16(1155);
+emit_16(1220);
+emit_16(1156);
+emit_16(1220);
+emit_16(1155);
+emit_16(1220);
+emit_16(1156);
+emit_16(1221);
+emit_16(1157);
+emit_16(1221);
+emit_16(1156);
+emit_16(1221);
+emit_16(1157);
+emit_16(1222);
+emit_16(1158);
+emit_16(1222);
+emit_16(1157);
+emit_16(1222);
+emit_16(1158);
+emit_16(1223);
+emit_16(1159);
+emit_16(1223);
+emit_16(1158);
+emit_16(1223);
+emit_16(1159);
+emit_16(1224);
+emit_16(1160);
+emit_16(1224);
+emit_16(1159);
+emit_16(1224);
+emit_16(1160);
+emit_16(1225);
+emit_16(1161);
+emit_16(1225);
+emit_16(1160);
+emit_16(1225);
+emit_16(1161);
+emit_16(1226);
+emit_16(1162);
+emit_16(1226);
+emit_16(1161);
+emit_16(1226);
+emit_16(1162);
+emit_16(1227);
+emit_16(1163);
+emit_16(1227);
+emit_16(1162);
+emit_16(1227);
+emit_16(1163);
+emit_16(1228);
+emit_16(1164);
+emit_16(1228);
+emit_16(1163);
+emit_16(1228);
+emit_16(1164);
+emit_16(1229);
+emit_16(1165);
+emit_16(1229);
+emit_16(1164);
+emit_16(1229);
+emit_16(1165);
+emit_16(1230);
+emit_16(1166);
+emit_16(1230);
+emit_16(1165);
+emit_16(1230);
+emit_16(1166);
+emit_16(1231);
+emit_16(1167);
+emit_16(1231);
+emit_16(1166);
+emit_16(1231);
+emit_16(1167);
+emit_16(1232);
+emit_16(1168);
+emit_16(1232);
+emit_16(1167);
+emit_16(1232);
+emit_16(1168);
+emit_16(1233);
+emit_16(1169);
+emit_16(1233);
+emit_16(1168);
+emit_16(1233);
+emit_16(1169);
+emit_16(1234);
+emit_16(1170);
+emit_16(1234);
+emit_16(1169);
+emit_16(1234);
+emit_16(1170);
+emit_16(1235);
+emit_16(1171);
+emit_16(1235);
+emit_16(1170);
+emit_16(1235);
+emit_16(1171);
+emit_16(1236);
+emit_16(1172);
+emit_16(1236);
+emit_16(1171);
+emit_16(1236);
+emit_16(1172);
+emit_16(1237);
+emit_16(1173);
+emit_16(1237);
+emit_16(1172);
+emit_16(1237);
+emit_16(1173);
+emit_16(1238);
+emit_16(1174);
+emit_16(1238);
+emit_16(1173);
+emit_16(1238);
+emit_16(1174);
+emit_16(1239);
+emit_16(1175);
+emit_16(1239);
+emit_16(1174);
+emit_16(1239);
+emit_16(1175);
+emit_16(1240);
+emit_16(1176);
+emit_16(1240);
+emit_16(1175);
+emit_16(1240);
+emit_16(1176);
+emit_16(1241);
+emit_16(1177);
+emit_16(1241);
+emit_16(1176);
+emit_16(1241);
+emit_16(1177);
+emit_16(1242);
+emit_16(1178);
+emit_16(1242);
+emit_16(1177);
+emit_16(1242);
+emit_16(1178);
+emit_16(1243);
+emit_16(1179);
+emit_16(1243);
+emit_16(1178);
+emit_16(1243);
+emit_16(1179);
+emit_16(1244);
+emit_16(1180);
+emit_16(1244);
+emit_16(1179);
+emit_16(1244);
+emit_16(1180);
+emit_16(1245);
+emit_16(1181);
+emit_16(1245);
+emit_16(1180);
+emit_16(1245);
+emit_16(1181);
+emit_16(1246);
+emit_16(1182);
+emit_16(1246);
+emit_16(1181);
+emit_16(1246);
+emit_16(1182);
+emit_16(1247);
+emit_16(1183);
+emit_16(1247);
+emit_16(1182);
+emit_16(1247);
+emit_16(1183);
+emit_16(1248);
+emit_16(1184);
+emit_16(1248);
+emit_16(1183);
+emit_16(1248);
+emit_16(1184);
+emit_16(1249);
+emit_16(1185);
+emit_16(1249);
+emit_16(1184);
+emit_16(1249);
+emit_16(1185);
+emit_16(1250);
+emit_16(1186);
+emit_16(1250);
+emit_16(1185);
+emit_16(1250);
+emit_16(1186);
+emit_16(1251);
+emit_16(1187);
+emit_16(1251);
+emit_16(1186);
+emit_16(1251);
+emit_16(1187);
+emit_16(1252);
+emit_16(1188);
+emit_16(1252);
+emit_16(1187);
+emit_16(1252);
+emit_16(1188);
+emit_16(1253);
+emit_16(1189);
+emit_16(1253);
+emit_16(1188);
+emit_16(1253);
+emit_16(1189);
+emit_16(1254);
+emit_16(1190);
+emit_16(1254);
+emit_16(1189);
+emit_16(1254);
+emit_16(1190);
+emit_16(1255);
+emit_16(1191);
+emit_16(1255);
+emit_16(1190);
+emit_16(1255);
+emit_16(1191);
+emit_16(1256);
+emit_16(1192);
+emit_16(1256);
+emit_16(1191);
+emit_16(1256);
+emit_16(1192);
+emit_16(1257);
+emit_16(1193);
+emit_16(1257);
+emit_16(1192);
+emit_16(1257);
+emit_16(1193);
+emit_16(1258);
+emit_16(1194);
+emit_16(1258);
+emit_16(1193);
+emit_16(1258);
+emit_16(1194);
+emit_16(1259);
+emit_16(1195);
+emit_16(1259);
+emit_16(1194);
+emit_16(1259);
+emit_16(1195);
+emit_16(1260);
+emit_16(1196);
+emit_16(1260);
+emit_16(1195);
+emit_16(1260);
+emit_16(1196);
+emit_16(1261);
+emit_16(1197);
+emit_16(1261);
+emit_16(1196);
+emit_16(1261);
+emit_16(1197);
+emit_16(1262);
+emit_16(1198);
+emit_16(1262);
+emit_16(1197);
+emit_16(1262);
+emit_16(1198);
+emit_16(1263);
+emit_16(1199);
+emit_16(1263);
+emit_16(1198);
+emit_16(1263);
+emit_16(1199);
+emit_16(1264);
+emit_16(1200);
+emit_16(1264);
+emit_16(1199);
+emit_16(1264);
+emit_16(1200);
+emit_16(1265);
+emit_16(1201);
+emit_16(1265);
+emit_16(1200);
+emit_16(1265);
+emit_16(1201);
+emit_16(1266);
+emit_16(1202);
+emit_16(1266);
+emit_16(1201);
+emit_16(1266);
+emit_16(1202);
+emit_16(1267);
+emit_16(1203);
+emit_16(1267);
+emit_16(1202);
+emit_16(1267);
+emit_16(1203);
+emit_16(1268);
+emit_16(1204);
+emit_16(1268);
+emit_16(1203);
+emit_16(1268);
+emit_16(1204);
+emit_16(1269);
+emit_16(1205);
+emit_16(1269);
+emit_16(1204);
+emit_16(1269);
+emit_16(1205);
+emit_16(1270);
+emit_16(1206);
+emit_16(1270);
+emit_16(1205);
+emit_16(1270);
+emit_16(1206);
+emit_16(1271);
+emit_16(1207);
+emit_16(1271);
+emit_16(1206);
+emit_16(1271);
+emit_16(1207);
+emit_16(1272);
+emit_16(1208);
+emit_16(1272);
+emit_16(1207);
+emit_16(1272);
+emit_16(1208);
+emit_16(1273);
+emit_16(1209);
+emit_16(1273);
+emit_16(1208);
+emit_16(1273);
+emit_16(1209);
+emit_16(1274);
+emit_16(1210);
+emit_16(1274);
+emit_16(1209);
+emit_16(1274);
+emit_16(1210);
+emit_16(1275);
+emit_16(1211);
+emit_16(1275);
+emit_16(1210);
+emit_16(1275);
+emit_16(1211);
+emit_16(1276);
+emit_16(1212);
+emit_16(1276);
+emit_16(1211);
+emit_16(1276);
+emit_16(1212);
+emit_16(1277);
+emit_16(1213);
+emit_16(1277);
+emit_16(1212);
+emit_16(1277);
+emit_16(1213);
+emit_16(1278);
+emit_16(1214);
+emit_16(1278);
+emit_16(1213);
+emit_16(1278);
+emit_16(1214);
+emit_16(1279);
+emit_16(1215);
+emit_16(1279);
+emit_16(1214);
+emit_16(1280);
+emit_16(1216);
+emit_16(1281);
+emit_16(1217);
+emit_16(1281);
+emit_16(1216);
+emit_16(1281);
+emit_16(1217);
+emit_16(1282);
+emit_16(1218);
+emit_16(1282);
+emit_16(1217);
+emit_16(1282);
+emit_16(1218);
+emit_16(1283);
+emit_16(1219);
+emit_16(1283);
+emit_16(1218);
+emit_16(1283);
+emit_16(1219);
+emit_16(1284);
+emit_16(1220);
+emit_16(1284);
+emit_16(1219);
+emit_16(1284);
+emit_16(1220);
+emit_16(1285);
+emit_16(1221);
+emit_16(1285);
+emit_16(1220);
+emit_16(1285);
+emit_16(1221);
+emit_16(1286);
+emit_16(1222);
+emit_16(1286);
+emit_16(1221);
+emit_16(1286);
+emit_16(1222);
+emit_16(1287);
+emit_16(1223);
+emit_16(1287);
+emit_16(1222);
+emit_16(1287);
+emit_16(1223);
+emit_16(1288);
+emit_16(1224);
+emit_16(1288);
+emit_16(1223);
+emit_16(1288);
+emit_16(1224);
+emit_16(1289);
+emit_16(1225);
+emit_16(1289);
+emit_16(1224);
+emit_16(1289);
+emit_16(1225);
+emit_16(1290);
+emit_16(1226);
+emit_16(1290);
+emit_16(1225);
+emit_16(1290);
+emit_16(1226);
+emit_16(1291);
+emit_16(1227);
+emit_16(1291);
+emit_16(1226);
+emit_16(1291);
+emit_16(1227);
+emit_16(1292);
+emit_16(1228);
+emit_16(1292);
+emit_16(1227);
+emit_16(1292);
+emit_16(1228);
+emit_16(1293);
+emit_16(1229);
+emit_16(1293);
+emit_16(1228);
+emit_16(1293);
+emit_16(1229);
+emit_16(1294);
+emit_16(1230);
+emit_16(1294);
+emit_16(1229);
+emit_16(1294);
+emit_16(1230);
+emit_16(1295);
+emit_16(1231);
+emit_16(1295);
+emit_16(1230);
+emit_16(1295);
+emit_16(1231);
+emit_16(1296);
+emit_16(1232);
+emit_16(1296);
+emit_16(1231);
+emit_16(1296);
+emit_16(1232);
+emit_16(1297);
+emit_16(1233);
+emit_16(1297);
+emit_16(1232);
+emit_16(1297);
+emit_16(1233);
+emit_16(1298);
+emit_16(1234);
+emit_16(1298);
+emit_16(1233);
+emit_16(1298);
+emit_16(1234);
+emit_16(1299);
+emit_16(1235);
+emit_16(1299);
+emit_16(1234);
+emit_16(1299);
+emit_16(1235);
+emit_16(1300);
+emit_16(1236);
+emit_16(1300);
+emit_16(1235);
+emit_16(1300);
+emit_16(1236);
+emit_16(1301);
+emit_16(1237);
+emit_16(1301);
+emit_16(1236);
+emit_16(1301);
+emit_16(1237);
+emit_16(1302);
+emit_16(1238);
+emit_16(1302);
+emit_16(1237);
+emit_16(1302);
+emit_16(1238);
+emit_16(1303);
+emit_16(1239);
+emit_16(1303);
+emit_16(1238);
+emit_16(1303);
+emit_16(1239);
+emit_16(1304);
+emit_16(1240);
+emit_16(1304);
+emit_16(1239);
+emit_16(1304);
+emit_16(1240);
+emit_16(1305);
+emit_16(1241);
+emit_16(1305);
+emit_16(1240);
+emit_16(1305);
+emit_16(1241);
+emit_16(1306);
+emit_16(1242);
+emit_16(1306);
+emit_16(1241);
+emit_16(1306);
+emit_16(1242);
+emit_16(1307);
+emit_16(1243);
+emit_16(1307);
+emit_16(1242);
+emit_16(1307);
+emit_16(1243);
+emit_16(1308);
+emit_16(1244);
+emit_16(1308);
+emit_16(1243);
+emit_16(1308);
+emit_16(1244);
+emit_16(1309);
+emit_16(1245);
+emit_16(1309);
+emit_16(1244);
+emit_16(1309);
+emit_16(1245);
+emit_16(1310);
+emit_16(1246);
+emit_16(1310);
+emit_16(1245);
+emit_16(1310);
+emit_16(1246);
+emit_16(1311);
+emit_16(1247);
+emit_16(1311);
+emit_16(1246);
+emit_16(1311);
+emit_16(1247);
+emit_16(1312);
+emit_16(1248);
+emit_16(1312);
+emit_16(1247);
+emit_16(1312);
+emit_16(1248);
+emit_16(1313);
+emit_16(1249);
+emit_16(1313);
+emit_16(1248);
+emit_16(1313);
+emit_16(1249);
+emit_16(1314);
+emit_16(1250);
+emit_16(1314);
+emit_16(1249);
+emit_16(1314);
+emit_16(1250);
+emit_16(1315);
+emit_16(1251);
+emit_16(1315);
+emit_16(1250);
+emit_16(1315);
+emit_16(1251);
+emit_16(1316);
+emit_16(1252);
+emit_16(1316);
+emit_16(1251);
+emit_16(1316);
+emit_16(1252);
+emit_16(1317);
+emit_16(1253);
+emit_16(1317);
+emit_16(1252);
+emit_16(1317);
+emit_16(1253);
+emit_16(1318);
+emit_16(1254);
+emit_16(1318);
+emit_16(1253);
+emit_16(1318);
+emit_16(1254);
+emit_16(1319);
+emit_16(1255);
+emit_16(1319);
+emit_16(1254);
+emit_16(1319);
+emit_16(1255);
+emit_16(1320);
+emit_16(1256);
+emit_16(1320);
+emit_16(1255);
+emit_16(1320);
+emit_16(1256);
+emit_16(1321);
+emit_16(1257);
+emit_16(1321);
+emit_16(1256);
+emit_16(1321);
+emit_16(1257);
+emit_16(1322);
+emit_16(1258);
+emit_16(1322);
+emit_16(1257);
+emit_16(1322);
+emit_16(1258);
+emit_16(1323);
+emit_16(1259);
+emit_16(1323);
+emit_16(1258);
+emit_16(1323);
+emit_16(1259);
+emit_16(1324);
+emit_16(1260);
+emit_16(1324);
+emit_16(1259);
+emit_16(1324);
+emit_16(1260);
+emit_16(1325);
+emit_16(1261);
+emit_16(1325);
+emit_16(1260);
+emit_16(1325);
+emit_16(1261);
+emit_16(1326);
+emit_16(1262);
+emit_16(1326);
+emit_16(1261);
+emit_16(1326);
+emit_16(1262);
+emit_16(1327);
+emit_16(1263);
+emit_16(1327);
+emit_16(1262);
+emit_16(1327);
+emit_16(1263);
+emit_16(1328);
+emit_16(1264);
+emit_16(1328);
+emit_16(1263);
+emit_16(1328);
+emit_16(1264);
+emit_16(1329);
+emit_16(1265);
+emit_16(1329);
+emit_16(1264);
+emit_16(1329);
+emit_16(1265);
+emit_16(1330);
+emit_16(1266);
+emit_16(1330);
+emit_16(1265);
+emit_16(1330);
+emit_16(1266);
+emit_16(1331);
+emit_16(1267);
+emit_16(1331);
+emit_16(1266);
+emit_16(1331);
+emit_16(1267);
+emit_16(1332);
+emit_16(1268);
+emit_16(1332);
+emit_16(1267);
+emit_16(1332);
+emit_16(1268);
+emit_16(1333);
+emit_16(1269);
+emit_16(1333);
+emit_16(1268);
+emit_16(1333);
+emit_16(1269);
+emit_16(1334);
+emit_16(1270);
+emit_16(1334);
+emit_16(1269);
+emit_16(1334);
+emit_16(1270);
+emit_16(1335);
+emit_16(1271);
+emit_16(1335);
+emit_16(1270);
+emit_16(1335);
+emit_16(1271);
+emit_16(1336);
+emit_16(1272);
+emit_16(1336);
+emit_16(1271);
+emit_16(1336);
+emit_16(1272);
+emit_16(1337);
+emit_16(1273);
+emit_16(1337);
+emit_16(1272);
+emit_16(1337);
+emit_16(1273);
+emit_16(1338);
+emit_16(1274);
+emit_16(1338);
+emit_16(1273);
+emit_16(1338);
+emit_16(1274);
+emit_16(1339);
+emit_16(1275);
+emit_16(1339);
+emit_16(1274);
+emit_16(1339);
+emit_16(1275);
+emit_16(1340);
+emit_16(1276);
+emit_16(1340);
+emit_16(1275);
+emit_16(1340);
+emit_16(1276);
+emit_16(1341);
+emit_16(1277);
+emit_16(1341);
+emit_16(1276);
+emit_16(1341);
+emit_16(1277);
+emit_16(1342);
+emit_16(1278);
+emit_16(1342);
+emit_16(1277);
+emit_16(1342);
+emit_16(1278);
+emit_16(1343);
+emit_16(1279);
+emit_16(1343);
+emit_16(1278);
+emit_16(1344);
+emit_16(1280);
+emit_16(1345);
+emit_16(1281);
+emit_16(1345);
+emit_16(1280);
+emit_16(1345);
+emit_16(1281);
+emit_16(1346);
+emit_16(1282);
+emit_16(1346);
+emit_16(1281);
+emit_16(1346);
+emit_16(1282);
+emit_16(1347);
+emit_16(1283);
+emit_16(1347);
+emit_16(1282);
+emit_16(1347);
+emit_16(1283);
+emit_16(1348);
+emit_16(1284);
+emit_16(1348);
+emit_16(1283);
+emit_16(1348);
+emit_16(1284);
+emit_16(1349);
+emit_16(1285);
+emit_16(1349);
+emit_16(1284);
+emit_16(1349);
+emit_16(1285);
+emit_16(1350);
+emit_16(1286);
+emit_16(1350);
+emit_16(1285);
+emit_16(1350);
+emit_16(1286);
+emit_16(1351);
+emit_16(1287);
+emit_16(1351);
+emit_16(1286);
+emit_16(1351);
+emit_16(1287);
+emit_16(1352);
+emit_16(1288);
+emit_16(1352);
+emit_16(1287);
+emit_16(1352);
+emit_16(1288);
+emit_16(1353);
+emit_16(1289);
+emit_16(1353);
+emit_16(1288);
+emit_16(1353);
+emit_16(1289);
+emit_16(1354);
+emit_16(1290);
+emit_16(1354);
+emit_16(1289);
+emit_16(1354);
+emit_16(1290);
+emit_16(1355);
+emit_16(1291);
+emit_16(1355);
+emit_16(1290);
+emit_16(1355);
+emit_16(1291);
+emit_16(1356);
+emit_16(1292);
+emit_16(1356);
+emit_16(1291);
+emit_16(1356);
+emit_16(1292);
+emit_16(1357);
+emit_16(1293);
+emit_16(1357);
+emit_16(1292);
+emit_16(1357);
+emit_16(1293);
+emit_16(1358);
+emit_16(1294);
+emit_16(1358);
+emit_16(1293);
+emit_16(1358);
+emit_16(1294);
+emit_16(1359);
+emit_16(1295);
+emit_16(1359);
+emit_16(1294);
+emit_16(1359);
+emit_16(1295);
+emit_16(1360);
+emit_16(1296);
+emit_16(1360);
+emit_16(1295);
+emit_16(1360);
+emit_16(1296);
+emit_16(1361);
+emit_16(1297);
+emit_16(1361);
+emit_16(1296);
+emit_16(1361);
+emit_16(1297);
+emit_16(1362);
+emit_16(1298);
+emit_16(1362);
+emit_16(1297);
+emit_16(1362);
+emit_16(1298);
+emit_16(1363);
+emit_16(1299);
+emit_16(1363);
+emit_16(1298);
+emit_16(1363);
+emit_16(1299);
+emit_16(1364);
+emit_16(1300);
+emit_16(1364);
+emit_16(1299);
+emit_16(1364);
+emit_16(1300);
+emit_16(1365);
+emit_16(1301);
+emit_16(1365);
+emit_16(1300);
+emit_16(1365);
+emit_16(1301);
+emit_16(1366);
+emit_16(1302);
+emit_16(1366);
+emit_16(1301);
+emit_16(1366);
+emit_16(1302);
+emit_16(1367);
+emit_16(1303);
+emit_16(1367);
+emit_16(1302);
+emit_16(1367);
+emit_16(1303);
+emit_16(1368);
+emit_16(1304);
+emit_16(1368);
+emit_16(1303);
+emit_16(1368);
+emit_16(1304);
+emit_16(1369);
+emit_16(1305);
+emit_16(1369);
+emit_16(1304);
+emit_16(1369);
+emit_16(1305);
+emit_16(1370);
+emit_16(1306);
+emit_16(1370);
+emit_16(1305);
+emit_16(1370);
+emit_16(1306);
+emit_16(1371);
+emit_16(1307);
+emit_16(1371);
+emit_16(1306);
+emit_16(1371);
+emit_16(1307);
+emit_16(1372);
+emit_16(1308);
+emit_16(1372);
+emit_16(1307);
+emit_16(1372);
+emit_16(1308);
+emit_16(1373);
+emit_16(1309);
+emit_16(1373);
+emit_16(1308);
+emit_16(1373);
+emit_16(1309);
+emit_16(1374);
+emit_16(1310);
+emit_16(1374);
+emit_16(1309);
+emit_16(1374);
+emit_16(1310);
+emit_16(1375);
+emit_16(1311);
+emit_16(1375);
+emit_16(1310);
+emit_16(1375);
+emit_16(1311);
+emit_16(1376);
+emit_16(1312);
+emit_16(1376);
+emit_16(1311);
+emit_16(1376);
+emit_16(1312);
+emit_16(1377);
+emit_16(1313);
+emit_16(1377);
+emit_16(1312);
+emit_16(1377);
+emit_16(1313);
+emit_16(1378);
+emit_16(1314);
+emit_16(1378);
+emit_16(1313);
+emit_16(1378);
+emit_16(1314);
+emit_16(1379);
+emit_16(1315);
+emit_16(1379);
+emit_16(1314);
+emit_16(1379);
+emit_16(1315);
+emit_16(1380);
+emit_16(1316);
+emit_16(1380);
+emit_16(1315);
+emit_16(1380);
+emit_16(1316);
+emit_16(1381);
+emit_16(1317);
+emit_16(1381);
+emit_16(1316);
+emit_16(1381);
+emit_16(1317);
+emit_16(1382);
+emit_16(1318);
+emit_16(1382);
+emit_16(1317);
+emit_16(1382);
+emit_16(1318);
+emit_16(1383);
+emit_16(1319);
+emit_16(1383);
+emit_16(1318);
+emit_16(1383);
+emit_16(1319);
+emit_16(1384);
+emit_16(1320);
+emit_16(1384);
+emit_16(1319);
+emit_16(1384);
+emit_16(1320);
+emit_16(1385);
+emit_16(1321);
+emit_16(1385);
+emit_16(1320);
+emit_16(1385);
+emit_16(1321);
+emit_16(1386);
+emit_16(1322);
+emit_16(1386);
+emit_16(1321);
+emit_16(1386);
+emit_16(1322);
+emit_16(1387);
+emit_16(1323);
+emit_16(1387);
+emit_16(1322);
+emit_16(1387);
+emit_16(1323);
+emit_16(1388);
+emit_16(1324);
+emit_16(1388);
+emit_16(1323);
+emit_16(1388);
+emit_16(1324);
+emit_16(1389);
+emit_16(1325);
+emit_16(1389);
+emit_16(1324);
+emit_16(1389);
+emit_16(1325);
+emit_16(1390);
+emit_16(1326);
+emit_16(1390);
+emit_16(1325);
+emit_16(1390);
+emit_16(1326);
+emit_16(1391);
+emit_16(1327);
+emit_16(1391);
+emit_16(1326);
+emit_16(1391);
+emit_16(1327);
+emit_16(1392);
+emit_16(1328);
+emit_16(1392);
+emit_16(1327);
+emit_16(1392);
+emit_16(1328);
+emit_16(1393);
+emit_16(1329);
+emit_16(1393);
+emit_16(1328);
+emit_16(1393);
+emit_16(1329);
+emit_16(1394);
+emit_16(1330);
+emit_16(1394);
+emit_16(1329);
+emit_16(1394);
+emit_16(1330);
+emit_16(1395);
+emit_16(1331);
+emit_16(1395);
+emit_16(1330);
+emit_16(1395);
+emit_16(1331);
+emit_16(1396);
+emit_16(1332);
+emit_16(1396);
+emit_16(1331);
+emit_16(1396);
+emit_16(1332);
+emit_16(1397);
+emit_16(1333);
+emit_16(1397);
+emit_16(1332);
+emit_16(1397);
+emit_16(1333);
+emit_16(1398);
+emit_16(1334);
+emit_16(1398);
+emit_16(1333);
+emit_16(1398);
+emit_16(1334);
+emit_16(1399);
+emit_16(1335);
+emit_16(1399);
+emit_16(1334);
+emit_16(1399);
+emit_16(1335);
+emit_16(1400);
+emit_16(1336);
+emit_16(1400);
+emit_16(1335);
+emit_16(1400);
+emit_16(1336);
+emit_16(1401);
+emit_16(1337);
+emit_16(1401);
+emit_16(1336);
+emit_16(1401);
+emit_16(1337);
+emit_16(1402);
+emit_16(1338);
+emit_16(1402);
+emit_16(1337);
+emit_16(1402);
+emit_16(1338);
+emit_16(1403);
+emit_16(1339);
+emit_16(1403);
+emit_16(1338);
+emit_16(1403);
+emit_16(1339);
+emit_16(1404);
+emit_16(1340);
+emit_16(1404);
+emit_16(1339);
+emit_16(1404);
+emit_16(1340);
+emit_16(1405);
+emit_16(1341);
+emit_16(1405);
+emit_16(1340);
+emit_16(1405);
+emit_16(1341);
+emit_16(1406);
+emit_16(1342);
+emit_16(1406);
+emit_16(1341);
+emit_16(1406);
+emit_16(1342);
+emit_16(1407);
+emit_16(1343);
+emit_16(1407);
+emit_16(1342);
+emit_16(1408);
+emit_16(1344);
+emit_16(1409);
+emit_16(1345);
+emit_16(1409);
+emit_16(1344);
+emit_16(1409);
+emit_16(1345);
+emit_16(1410);
+emit_16(1346);
+emit_16(1410);
+emit_16(1345);
+emit_16(1410);
+emit_16(1346);
+emit_16(1411);
+emit_16(1347);
+emit_16(1411);
+emit_16(1346);
+emit_16(1411);
+emit_16(1347);
+emit_16(1412);
+emit_16(1348);
+emit_16(1412);
+emit_16(1347);
+emit_16(1412);
+emit_16(1348);
+emit_16(1413);
+emit_16(1349);
+emit_16(1413);
+emit_16(1348);
+emit_16(1413);
+emit_16(1349);
+emit_16(1414);
+emit_16(1350);
+emit_16(1414);
+emit_16(1349);
+emit_16(1414);
+emit_16(1350);
+emit_16(1415);
+emit_16(1351);
+emit_16(1415);
+emit_16(1350);
+emit_16(1415);
+emit_16(1351);
+emit_16(1416);
+emit_16(1352);
+emit_16(1416);
+emit_16(1351);
+emit_16(1416);
+emit_16(1352);
+emit_16(1417);
+emit_16(1353);
+emit_16(1417);
+emit_16(1352);
+emit_16(1417);
+emit_16(1353);
+emit_16(1418);
+emit_16(1354);
+emit_16(1418);
+emit_16(1353);
+emit_16(1418);
+emit_16(1354);
+emit_16(1419);
+emit_16(1355);
+emit_16(1419);
+emit_16(1354);
+emit_16(1419);
+emit_16(1355);
+emit_16(1420);
+emit_16(1356);
+emit_16(1420);
+emit_16(1355);
+emit_16(1420);
+emit_16(1356);
+emit_16(1421);
+emit_16(1357);
+emit_16(1421);
+emit_16(1356);
+emit_16(1421);
+emit_16(1357);
+emit_16(1422);
+emit_16(1358);
+emit_16(1422);
+emit_16(1357);
+emit_16(1422);
+emit_16(1358);
+emit_16(1423);
+emit_16(1359);
+emit_16(1423);
+emit_16(1358);
+emit_16(1423);
+emit_16(1359);
+emit_16(1424);
+emit_16(1360);
+emit_16(1424);
+emit_16(1359);
+emit_16(1424);
+emit_16(1360);
+emit_16(1425);
+emit_16(1361);
+emit_16(1425);
+emit_16(1360);
+emit_16(1425);
+emit_16(1361);
+emit_16(1426);
+emit_16(1362);
+emit_16(1426);
+emit_16(1361);
+emit_16(1426);
+emit_16(1362);
+emit_16(1427);
+emit_16(1363);
+emit_16(1427);
+emit_16(1362);
+emit_16(1427);
+emit_16(1363);
+emit_16(1428);
+emit_16(1364);
+emit_16(1428);
+emit_16(1363);
+emit_16(1428);
+emit_16(1364);
+emit_16(1429);
+emit_16(1365);
+emit_16(1429);
+emit_16(1364);
+emit_16(1429);
+emit_16(1365);
+emit_16(1430);
+emit_16(1366);
+emit_16(1430);
+emit_16(1365);
+emit_16(1430);
+emit_16(1366);
+emit_16(1431);
+emit_16(1367);
+emit_16(1431);
+emit_16(1366);
+emit_16(1431);
+emit_16(1367);
+emit_16(1432);
+emit_16(1368);
+emit_16(1432);
+emit_16(1367);
+emit_16(1432);
+emit_16(1368);
+emit_16(1433);
+emit_16(1369);
+emit_16(1433);
+emit_16(1368);
+emit_16(1433);
+emit_16(1369);
+emit_16(1434);
+emit_16(1370);
+emit_16(1434);
+emit_16(1369);
+emit_16(1434);
+emit_16(1370);
+emit_16(1435);
+emit_16(1371);
+emit_16(1435);
+emit_16(1370);
+emit_16(1435);
+emit_16(1371);
+emit_16(1436);
+emit_16(1372);
+emit_16(1436);
+emit_16(1371);
+emit_16(1436);
+emit_16(1372);
+emit_16(1437);
+emit_16(1373);
+emit_16(1437);
+emit_16(1372);
+emit_16(1437);
+emit_16(1373);
+emit_16(1438);
+emit_16(1374);
+emit_16(1438);
+emit_16(1373);
+emit_16(1438);
+emit_16(1374);
+emit_16(1439);
+emit_16(1375);
+emit_16(1439);
+emit_16(1374);
+emit_16(1439);
+emit_16(1375);
+emit_16(1440);
+emit_16(1376);
+emit_16(1440);
+emit_16(1375);
+emit_16(1440);
+emit_16(1376);
+emit_16(1441);
+emit_16(1377);
+emit_16(1441);
+emit_16(1376);
+emit_16(1441);
+emit_16(1377);
+emit_16(1442);
+emit_16(1378);
+emit_16(1442);
+emit_16(1377);
+emit_16(1442);
+emit_16(1378);
+emit_16(1443);
+emit_16(1379);
+emit_16(1443);
+emit_16(1378);
+emit_16(1443);
+emit_16(1379);
+emit_16(1444);
+emit_16(1380);
+emit_16(1444);
+emit_16(1379);
+emit_16(1444);
+emit_16(1380);
+emit_16(1445);
+emit_16(1381);
+emit_16(1445);
+emit_16(1380);
+emit_16(1445);
+emit_16(1381);
+emit_16(1446);
+emit_16(1382);
+emit_16(1446);
+emit_16(1381);
+emit_16(1446);
+emit_16(1382);
+emit_16(1447);
+emit_16(1383);
+emit_16(1447);
+emit_16(1382);
+emit_16(1447);
+emit_16(1383);
+emit_16(1448);
+emit_16(1384);
+emit_16(1448);
+emit_16(1383);
+emit_16(1448);
+emit_16(1384);
+emit_16(1449);
+emit_16(1385);
+emit_16(1449);
+emit_16(1384);
+emit_16(1449);
+emit_16(1385);
+emit_16(1450);
+emit_16(1386);
+emit_16(1450);
+emit_16(1385);
+emit_16(1450);
+emit_16(1386);
+emit_16(1451);
+emit_16(1387);
+emit_16(1451);
+emit_16(1386);
+emit_16(1451);
+emit_16(1387);
+emit_16(1452);
+emit_16(1388);
+emit_16(1452);
+emit_16(1387);
+emit_16(1452);
+emit_16(1388);
+emit_16(1453);
+emit_16(1389);
+emit_16(1453);
+emit_16(1388);
+emit_16(1453);
+emit_16(1389);
+emit_16(1454);
+emit_16(1390);
+emit_16(1454);
+emit_16(1389);
+emit_16(1454);
+emit_16(1390);
+emit_16(1455);
+emit_16(1391);
+emit_16(1455);
+emit_16(1390);
+emit_16(1455);
+emit_16(1391);
+emit_16(1456);
+emit_16(1392);
+emit_16(1456);
+emit_16(1391);
+emit_16(1456);
+emit_16(1392);
+emit_16(1457);
+emit_16(1393);
+emit_16(1457);
+emit_16(1392);
+emit_16(1457);
+emit_16(1393);
+emit_16(1458);
+emit_16(1394);
+emit_16(1458);
+emit_16(1393);
+emit_16(1458);
+emit_16(1394);
+emit_16(1459);
+emit_16(1395);
+emit_16(1459);
+emit_16(1394);
+emit_16(1459);
+emit_16(1395);
+emit_16(1460);
+emit_16(1396);
+emit_16(1460);
+emit_16(1395);
+emit_16(1460);
+emit_16(1396);
+emit_16(1461);
+emit_16(1397);
+emit_16(1461);
+emit_16(1396);
+emit_16(1461);
+emit_16(1397);
+emit_16(1462);
+emit_16(1398);
+emit_16(1462);
+emit_16(1397);
+emit_16(1462);
+emit_16(1398);
+emit_16(1463);
+emit_16(1399);
+emit_16(1463);
+emit_16(1398);
+emit_16(1463);
+emit_16(1399);
+emit_16(1464);
+emit_16(1400);
+emit_16(1464);
+emit_16(1399);
+emit_16(1464);
+emit_16(1400);
+emit_16(1465);
+emit_16(1401);
+emit_16(1465);
+emit_16(1400);
+emit_16(1465);
+emit_16(1401);
+emit_16(1466);
+emit_16(1402);
+emit_16(1466);
+emit_16(1401);
+emit_16(1466);
+emit_16(1402);
+emit_16(1467);
+emit_16(1403);
+emit_16(1467);
+emit_16(1402);
+emit_16(1467);
+emit_16(1403);
+emit_16(1468);
+emit_16(1404);
+emit_16(1468);
+emit_16(1403);
+emit_16(1468);
+emit_16(1404);
+emit_16(1469);
+emit_16(1405);
+emit_16(1469);
+emit_16(1404);
+emit_16(1469);
+emit_16(1405);
+emit_16(1470);
+emit_16(1406);
+emit_16(1470);
+emit_16(1405);
+emit_16(1470);
+emit_16(1406);
+emit_16(1471);
+emit_16(1407);
+emit_16(1471);
+emit_16(1406);
+emit_16(1472);
+emit_16(1408);
+emit_16(1473);
+emit_16(1409);
+emit_16(1473);
+emit_16(1408);
+emit_16(1473);
+emit_16(1409);
+emit_16(1474);
+emit_16(1410);
+emit_16(1474);
+emit_16(1409);
+emit_16(1474);
+emit_16(1410);
+emit_16(1475);
+emit_16(1411);
+emit_16(1475);
+emit_16(1410);
+emit_16(1475);
+emit_16(1411);
+emit_16(1476);
+emit_16(1412);
+emit_16(1476);
+emit_16(1411);
+emit_16(1476);
+emit_16(1412);
+emit_16(1477);
+emit_16(1413);
+emit_16(1477);
+emit_16(1412);
+emit_16(1477);
+emit_16(1413);
+emit_16(1478);
+emit_16(1414);
+emit_16(1478);
+emit_16(1413);
+emit_16(1478);
+emit_16(1414);
+emit_16(1479);
+emit_16(1415);
+emit_16(1479);
+emit_16(1414);
+emit_16(1479);
+emit_16(1415);
+emit_16(1480);
+emit_16(1416);
+emit_16(1480);
+emit_16(1415);
+emit_16(1480);
+emit_16(1416);
+emit_16(1481);
+emit_16(1417);
+emit_16(1481);
+emit_16(1416);
+emit_16(1481);
+emit_16(1417);
+emit_16(1482);
+emit_16(1418);
+emit_16(1482);
+emit_16(1417);
+emit_16(1482);
+emit_16(1418);
+emit_16(1483);
+emit_16(1419);
+emit_16(1483);
+emit_16(1418);
+emit_16(1483);
+emit_16(1419);
+emit_16(1484);
+emit_16(1420);
+emit_16(1484);
+emit_16(1419);
+emit_16(1484);
+emit_16(1420);
+emit_16(1485);
+emit_16(1421);
+emit_16(1485);
+emit_16(1420);
+emit_16(1485);
+emit_16(1421);
+emit_16(1486);
+emit_16(1422);
+emit_16(1486);
+emit_16(1421);
+emit_16(1486);
+emit_16(1422);
+emit_16(1487);
+emit_16(1423);
+emit_16(1487);
+emit_16(1422);
+emit_16(1487);
+emit_16(1423);
+emit_16(1488);
+emit_16(1424);
+emit_16(1488);
+emit_16(1423);
+emit_16(1488);
+emit_16(1424);
+emit_16(1489);
+emit_16(1425);
+emit_16(1489);
+emit_16(1424);
+emit_16(1489);
+emit_16(1425);
+emit_16(1490);
+emit_16(1426);
+emit_16(1490);
+emit_16(1425);
+emit_16(1490);
+emit_16(1426);
+emit_16(1491);
+emit_16(1427);
+emit_16(1491);
+emit_16(1426);
+emit_16(1491);
+emit_16(1427);
+emit_16(1492);
+emit_16(1428);
+emit_16(1492);
+emit_16(1427);
+emit_16(1492);
+emit_16(1428);
+emit_16(1493);
+emit_16(1429);
+emit_16(1493);
+emit_16(1428);
+emit_16(1493);
+emit_16(1429);
+emit_16(1494);
+emit_16(1430);
+emit_16(1494);
+emit_16(1429);
+emit_16(1494);
+emit_16(1430);
+emit_16(1495);
+emit_16(1431);
+emit_16(1495);
+emit_16(1430);
+emit_16(1495);
+emit_16(1431);
+emit_16(1496);
+emit_16(1432);
+emit_16(1496);
+emit_16(1431);
+emit_16(1496);
+emit_16(1432);
+emit_16(1497);
+emit_16(1433);
+emit_16(1497);
+emit_16(1432);
+emit_16(1497);
+emit_16(1433);
+emit_16(1498);
+emit_16(1434);
+emit_16(1498);
+emit_16(1433);
+emit_16(1498);
+emit_16(1434);
+emit_16(1499);
+emit_16(1435);
+emit_16(1499);
+emit_16(1434);
+emit_16(1499);
+emit_16(1435);
+emit_16(1500);
+emit_16(1436);
+emit_16(1500);
+emit_16(1435);
+emit_16(1500);
+emit_16(1436);
+emit_16(1501);
+emit_16(1437);
+emit_16(1501);
+emit_16(1436);
+emit_16(1501);
+emit_16(1437);
+emit_16(1502);
+emit_16(1438);
+emit_16(1502);
+emit_16(1437);
+emit_16(1502);
+emit_16(1438);
+emit_16(1503);
+emit_16(1439);
+emit_16(1503);
+emit_16(1438);
+emit_16(1503);
+emit_16(1439);
+emit_16(1504);
+emit_16(1440);
+emit_16(1504);
+emit_16(1439);
+emit_16(1504);
+emit_16(1440);
+emit_16(1505);
+emit_16(1441);
+emit_16(1505);
+emit_16(1440);
+emit_16(1505);
+emit_16(1441);
+emit_16(1506);
+emit_16(1442);
+emit_16(1506);
+emit_16(1441);
+emit_16(1506);
+emit_16(1442);
+emit_16(1507);
+emit_16(1443);
+emit_16(1507);
+emit_16(1442);
+emit_16(1507);
+emit_16(1443);
+emit_16(1508);
+emit_16(1444);
+emit_16(1508);
+emit_16(1443);
+emit_16(1508);
+emit_16(1444);
+emit_16(1509);
+emit_16(1445);
+emit_16(1509);
+emit_16(1444);
+emit_16(1509);
+emit_16(1445);
+emit_16(1510);
+emit_16(1446);
+emit_16(1510);
+emit_16(1445);
+emit_16(1510);
+emit_16(1446);
+emit_16(1511);
+emit_16(1447);
+emit_16(1511);
+emit_16(1446);
+emit_16(1511);
+emit_16(1447);
+emit_16(1512);
+emit_16(1448);
+emit_16(1512);
+emit_16(1447);
+emit_16(1512);
+emit_16(1448);
+emit_16(1513);
+emit_16(1449);
+emit_16(1513);
+emit_16(1448);
+emit_16(1513);
+emit_16(1449);
+emit_16(1514);
+emit_16(1450);
+emit_16(1514);
+emit_16(1449);
+emit_16(1514);
+emit_16(1450);
+emit_16(1515);
+emit_16(1451);
+emit_16(1515);
+emit_16(1450);
+emit_16(1515);
+emit_16(1451);
+emit_16(1516);
+emit_16(1452);
+emit_16(1516);
+emit_16(1451);
+emit_16(1516);
+emit_16(1452);
+emit_16(1517);
+emit_16(1453);
+emit_16(1517);
+emit_16(1452);
+emit_16(1517);
+emit_16(1453);
+emit_16(1518);
+emit_16(1454);
+emit_16(1518);
+emit_16(1453);
+emit_16(1518);
+emit_16(1454);
+emit_16(1519);
+emit_16(1455);
+emit_16(1519);
+emit_16(1454);
+emit_16(1519);
+emit_16(1455);
+emit_16(1520);
+emit_16(1456);
+emit_16(1520);
+emit_16(1455);
+emit_16(1520);
+emit_16(1456);
+emit_16(1521);
+emit_16(1457);
+emit_16(1521);
+emit_16(1456);
+emit_16(1521);
+emit_16(1457);
+emit_16(1522);
+emit_16(1458);
+emit_16(1522);
+emit_16(1457);
+emit_16(1522);
+emit_16(1458);
+emit_16(1523);
+emit_16(1459);
+emit_16(1523);
+emit_16(1458);
+emit_16(1523);
+emit_16(1459);
+emit_16(1524);
+emit_16(1460);
+emit_16(1524);
+emit_16(1459);
+emit_16(1524);
+emit_16(1460);
+emit_16(1525);
+emit_16(1461);
+emit_16(1525);
+emit_16(1460);
+emit_16(1525);
+emit_16(1461);
+emit_16(1526);
+emit_16(1462);
+emit_16(1526);
+emit_16(1461);
+emit_16(1526);
+emit_16(1462);
+emit_16(1527);
+emit_16(1463);
+emit_16(1527);
+emit_16(1462);
+emit_16(1527);
+emit_16(1463);
+emit_16(1528);
+emit_16(1464);
+emit_16(1528);
+emit_16(1463);
+emit_16(1528);
+emit_16(1464);
+emit_16(1529);
+emit_16(1465);
+emit_16(1529);
+emit_16(1464);
+emit_16(1529);
+emit_16(1465);
+emit_16(1530);
+emit_16(1466);
+emit_16(1530);
+emit_16(1465);
+emit_16(1530);
+emit_16(1466);
+emit_16(1531);
+emit_16(1467);
+emit_16(1531);
+emit_16(1466);
+emit_16(1531);
+emit_16(1467);
+emit_16(1532);
+emit_16(1468);
+emit_16(1532);
+emit_16(1467);
+emit_16(1532);
+emit_16(1468);
+emit_16(1533);
+emit_16(1469);
+emit_16(1533);
+emit_16(1468);
+emit_16(1533);
+emit_16(1469);
+emit_16(1534);
+emit_16(1470);
+emit_16(1534);
+emit_16(1469);
+emit_16(1534);
+emit_16(1470);
+emit_16(1535);
+emit_16(1471);
+emit_16(1535);
+emit_16(1470);
+emit_16(1536);
+emit_16(1472);
+emit_16(1537);
+emit_16(1473);
+emit_16(1537);
+emit_16(1472);
+emit_16(1537);
+emit_16(1473);
+emit_16(1538);
+emit_16(1474);
+emit_16(1538);
+emit_16(1473);
+emit_16(1538);
+emit_16(1474);
+emit_16(1539);
+emit_16(1475);
+emit_16(1539);
+emit_16(1474);
+emit_16(1539);
+emit_16(1475);
+emit_16(1540);
+emit_16(1476);
+emit_16(1540);
+emit_16(1475);
+emit_16(1540);
+emit_16(1476);
+emit_16(1541);
+emit_16(1477);
+emit_16(1541);
+emit_16(1476);
+emit_16(1541);
+emit_16(1477);
+emit_16(1542);
+emit_16(1478);
+emit_16(1542);
+emit_16(1477);
+emit_16(1542);
+emit_16(1478);
+emit_16(1543);
+emit_16(1479);
+emit_16(1543);
+emit_16(1478);
+emit_16(1543);
+emit_16(1479);
+emit_16(1544);
+emit_16(1480);
+emit_16(1544);
+emit_16(1479);
+emit_16(1544);
+emit_16(1480);
+emit_16(1545);
+emit_16(1481);
+emit_16(1545);
+emit_16(1480);
+emit_16(1545);
+emit_16(1481);
+emit_16(1546);
+emit_16(1482);
+emit_16(1546);
+emit_16(1481);
+emit_16(1546);
+emit_16(1482);
+emit_16(1547);
+emit_16(1483);
+emit_16(1547);
+emit_16(1482);
+emit_16(1547);
+emit_16(1483);
+emit_16(1548);
+emit_16(1484);
+emit_16(1548);
+emit_16(1483);
+emit_16(1548);
+emit_16(1484);
+emit_16(1549);
+emit_16(1485);
+emit_16(1549);
+emit_16(1484);
+emit_16(1549);
+emit_16(1485);
+emit_16(1550);
+emit_16(1486);
+emit_16(1550);
+emit_16(1485);
+emit_16(1550);
+emit_16(1486);
+emit_16(1551);
+emit_16(1487);
+emit_16(1551);
+emit_16(1486);
+emit_16(1551);
+emit_16(1487);
+emit_16(1552);
+emit_16(1488);
+emit_16(1552);
+emit_16(1487);
+emit_16(1552);
+emit_16(1488);
+emit_16(1553);
+emit_16(1489);
+emit_16(1553);
+emit_16(1488);
+emit_16(1553);
+emit_16(1489);
+emit_16(1554);
+emit_16(1490);
+emit_16(1554);
+emit_16(1489);
+emit_16(1554);
+emit_16(1490);
+emit_16(1555);
+emit_16(1491);
+emit_16(1555);
+emit_16(1490);
+emit_16(1555);
+emit_16(1491);
+emit_16(1556);
+emit_16(1492);
+emit_16(1556);
+emit_16(1491);
+emit_16(1556);
+emit_16(1492);
+emit_16(1557);
+emit_16(1493);
+emit_16(1557);
+emit_16(1492);
+emit_16(1557);
+emit_16(1493);
+emit_16(1558);
+emit_16(1494);
+emit_16(1558);
+emit_16(1493);
+emit_16(1558);
+emit_16(1494);
+emit_16(1559);
+emit_16(1495);
+emit_16(1559);
+emit_16(1494);
+emit_16(1559);
+emit_16(1495);
+emit_16(1560);
+emit_16(1496);
+emit_16(1560);
+emit_16(1495);
+emit_16(1560);
+emit_16(1496);
+emit_16(1561);
+emit_16(1497);
+emit_16(1561);
+emit_16(1496);
+emit_16(1561);
+emit_16(1497);
+emit_16(1562);
+emit_16(1498);
+emit_16(1562);
+emit_16(1497);
+emit_16(1562);
+emit_16(1498);
+emit_16(1563);
+emit_16(1499);
+emit_16(1563);
+emit_16(1498);
+emit_16(1563);
+emit_16(1499);
+emit_16(1564);
+emit_16(1500);
+emit_16(1564);
+emit_16(1499);
+emit_16(1564);
+emit_16(1500);
+emit_16(1565);
+emit_16(1501);
+emit_16(1565);
+emit_16(1500);
+emit_16(1565);
+emit_16(1501);
+emit_16(1566);
+emit_16(1502);
+emit_16(1566);
+emit_16(1501);
+emit_16(1566);
+emit_16(1502);
+emit_16(1567);
+emit_16(1503);
+emit_16(1567);
+emit_16(1502);
+emit_16(1567);
+emit_16(1503);
+emit_16(1568);
+emit_16(1504);
+emit_16(1568);
+emit_16(1503);
+emit_16(1568);
+emit_16(1504);
+emit_16(1569);
+emit_16(1505);
+emit_16(1569);
+emit_16(1504);
+emit_16(1569);
+emit_16(1505);
+emit_16(1570);
+emit_16(1506);
+emit_16(1570);
+emit_16(1505);
+emit_16(1570);
+emit_16(1506);
+emit_16(1571);
+emit_16(1507);
+emit_16(1571);
+emit_16(1506);
+emit_16(1571);
+emit_16(1507);
+emit_16(1572);
+emit_16(1508);
+emit_16(1572);
+emit_16(1507);
+emit_16(1572);
+emit_16(1508);
+emit_16(1573);
+emit_16(1509);
+emit_16(1573);
+emit_16(1508);
+emit_16(1573);
+emit_16(1509);
+emit_16(1574);
+emit_16(1510);
+emit_16(1574);
+emit_16(1509);
+emit_16(1574);
+emit_16(1510);
+emit_16(1575);
+emit_16(1511);
+emit_16(1575);
+emit_16(1510);
+emit_16(1575);
+emit_16(1511);
+emit_16(1576);
+emit_16(1512);
+emit_16(1576);
+emit_16(1511);
+emit_16(1576);
+emit_16(1512);
+emit_16(1577);
+emit_16(1513);
+emit_16(1577);
+emit_16(1512);
+emit_16(1577);
+emit_16(1513);
+emit_16(1578);
+emit_16(1514);
+emit_16(1578);
+emit_16(1513);
+emit_16(1578);
+emit_16(1514);
+emit_16(1579);
+emit_16(1515);
+emit_16(1579);
+emit_16(1514);
+emit_16(1579);
+emit_16(1515);
+emit_16(1580);
+emit_16(1516);
+emit_16(1580);
+emit_16(1515);
+emit_16(1580);
+emit_16(1516);
+emit_16(1581);
+emit_16(1517);
+emit_16(1581);
+emit_16(1516);
+emit_16(1581);
+emit_16(1517);
+emit_16(1582);
+emit_16(1518);
+emit_16(1582);
+emit_16(1517);
+emit_16(1582);
+emit_16(1518);
+emit_16(1583);
+emit_16(1519);
+emit_16(1583);
+emit_16(1518);
+emit_16(1583);
+emit_16(1519);
+emit_16(1584);
+emit_16(1520);
+emit_16(1584);
+emit_16(1519);
+emit_16(1584);
+emit_16(1520);
+emit_16(1585);
+emit_16(1521);
+emit_16(1585);
+emit_16(1520);
+emit_16(1585);
+emit_16(1521);
+emit_16(1586);
+emit_16(1522);
+emit_16(1586);
+emit_16(1521);
+emit_16(1586);
+emit_16(1522);
+emit_16(1587);
+emit_16(1523);
+emit_16(1587);
+emit_16(1522);
+emit_16(1587);
+emit_16(1523);
+emit_16(1588);
+emit_16(1524);
+emit_16(1588);
+emit_16(1523);
+emit_16(1588);
+emit_16(1524);
+emit_16(1589);
+emit_16(1525);
+emit_16(1589);
+emit_16(1524);
+emit_16(1589);
+emit_16(1525);
+emit_16(1590);
+emit_16(1526);
+emit_16(1590);
+emit_16(1525);
+emit_16(1590);
+emit_16(1526);
+emit_16(1591);
+emit_16(1527);
+emit_16(1591);
+emit_16(1526);
+emit_16(1591);
+emit_16(1527);
+emit_16(1592);
+emit_16(1528);
+emit_16(1592);
+emit_16(1527);
+emit_16(1592);
+emit_16(1528);
+emit_16(1593);
+emit_16(1529);
+emit_16(1593);
+emit_16(1528);
+emit_16(1593);
+emit_16(1529);
+emit_16(1594);
+emit_16(1530);
+emit_16(1594);
+emit_16(1529);
+emit_16(1594);
+emit_16(1530);
+emit_16(1595);
+emit_16(1531);
+emit_16(1595);
+emit_16(1530);
+emit_16(1595);
+emit_16(1531);
+emit_16(1596);
+emit_16(1532);
+emit_16(1596);
+emit_16(1531);
+emit_16(1596);
+emit_16(1532);
+emit_16(1597);
+emit_16(1533);
+emit_16(1597);
+emit_16(1532);
+emit_16(1597);
+emit_16(1533);
+emit_16(1598);
+emit_16(1534);
+emit_16(1598);
+emit_16(1533);
+emit_16(1598);
+emit_16(1534);
+emit_16(1599);
+emit_16(1535);
+emit_16(1599);
+emit_16(1534);
+emit_16(1600);
+emit_16(1536);
+emit_16(1601);
+emit_16(1537);
+emit_16(1601);
+emit_16(1536);
+emit_16(1601);
+emit_16(1537);
+emit_16(1602);
+emit_16(1538);
+emit_16(1602);
+emit_16(1537);
+emit_16(1602);
+emit_16(1538);
+emit_16(1603);
+emit_16(1539);
+emit_16(1603);
+emit_16(1538);
+emit_16(1603);
+emit_16(1539);
+emit_16(1604);
+emit_16(1540);
+emit_16(1604);
+emit_16(1539);
+emit_16(1604);
+emit_16(1540);
+emit_16(1605);
+emit_16(1541);
+emit_16(1605);
+emit_16(1540);
+emit_16(1605);
+emit_16(1541);
+emit_16(1606);
+emit_16(1542);
+emit_16(1606);
+emit_16(1541);
+emit_16(1606);
+emit_16(1542);
+emit_16(1607);
+emit_16(1543);
+emit_16(1607);
+emit_16(1542);
+emit_16(1607);
+emit_16(1543);
+emit_16(1608);
+emit_16(1544);
+emit_16(1608);
+emit_16(1543);
+emit_16(1608);
+emit_16(1544);
+emit_16(1609);
+emit_16(1545);
+emit_16(1609);
+emit_16(1544);
+emit_16(1609);
+emit_16(1545);
+emit_16(1610);
+emit_16(1546);
+emit_16(1610);
+emit_16(1545);
+emit_16(1610);
+emit_16(1546);
+emit_16(1611);
+emit_16(1547);
+emit_16(1611);
+emit_16(1546);
+emit_16(1611);
+emit_16(1547);
+emit_16(1612);
+emit_16(1548);
+emit_16(1612);
+emit_16(1547);
+emit_16(1612);
+emit_16(1548);
+emit_16(1613);
+emit_16(1549);
+emit_16(1613);
+emit_16(1548);
+emit_16(1613);
+emit_16(1549);
+emit_16(1614);
+emit_16(1550);
+emit_16(1614);
+emit_16(1549);
+emit_16(1614);
+emit_16(1550);
+emit_16(1615);
+emit_16(1551);
+emit_16(1615);
+emit_16(1550);
+emit_16(1615);
+emit_16(1551);
+emit_16(1616);
+emit_16(1552);
+emit_16(1616);
+emit_16(1551);
+emit_16(1616);
+emit_16(1552);
+emit_16(1617);
+emit_16(1553);
+emit_16(1617);
+emit_16(1552);
+emit_16(1617);
+emit_16(1553);
+emit_16(1618);
+emit_16(1554);
+emit_16(1618);
+emit_16(1553);
+emit_16(1618);
+emit_16(1554);
+emit_16(1619);
+emit_16(1555);
+emit_16(1619);
+emit_16(1554);
+emit_16(1619);
+emit_16(1555);
+emit_16(1620);
+emit_16(1556);
+emit_16(1620);
+emit_16(1555);
+emit_16(1620);
+emit_16(1556);
+emit_16(1621);
+emit_16(1557);
+emit_16(1621);
+emit_16(1556);
+emit_16(1621);
+emit_16(1557);
+emit_16(1622);
+emit_16(1558);
+emit_16(1622);
+emit_16(1557);
+emit_16(1622);
+emit_16(1558);
+emit_16(1623);
+emit_16(1559);
+emit_16(1623);
+emit_16(1558);
+emit_16(1623);
+emit_16(1559);
+emit_16(1624);
+emit_16(1560);
+emit_16(1624);
+emit_16(1559);
+emit_16(1624);
+emit_16(1560);
+emit_16(1625);
+emit_16(1561);
+emit_16(1625);
+emit_16(1560);
+emit_16(1625);
+emit_16(1561);
+emit_16(1626);
+emit_16(1562);
+emit_16(1626);
+emit_16(1561);
+emit_16(1626);
+emit_16(1562);
+emit_16(1627);
+emit_16(1563);
+emit_16(1627);
+emit_16(1562);
+emit_16(1627);
+emit_16(1563);
+emit_16(1628);
+emit_16(1564);
+emit_16(1628);
+emit_16(1563);
+emit_16(1628);
+emit_16(1564);
+emit_16(1629);
+emit_16(1565);
+emit_16(1629);
+emit_16(1564);
+emit_16(1629);
+emit_16(1565);
+emit_16(1630);
+emit_16(1566);
+emit_16(1630);
+emit_16(1565);
+emit_16(1630);
+emit_16(1566);
+emit_16(1631);
+emit_16(1567);
+emit_16(1631);
+emit_16(1566);
+emit_16(1631);
+emit_16(1567);
+emit_16(1632);
+emit_16(1568);
+emit_16(1632);
+emit_16(1567);
+emit_16(1632);
+emit_16(1568);
+emit_16(1633);
+emit_16(1569);
+emit_16(1633);
+emit_16(1568);
+emit_16(1633);
+emit_16(1569);
+emit_16(1634);
+emit_16(1570);
+emit_16(1634);
+emit_16(1569);
+emit_16(1634);
+emit_16(1570);
+emit_16(1635);
+emit_16(1571);
+emit_16(1635);
+emit_16(1570);
+emit_16(1635);
+emit_16(1571);
+emit_16(1636);
+emit_16(1572);
+emit_16(1636);
+emit_16(1571);
+emit_16(1636);
+emit_16(1572);
+emit_16(1637);
+emit_16(1573);
+emit_16(1637);
+emit_16(1572);
+emit_16(1637);
+emit_16(1573);
+emit_16(1638);
+emit_16(1574);
+emit_16(1638);
+emit_16(1573);
+emit_16(1638);
+emit_16(1574);
+emit_16(1639);
+emit_16(1575);
+emit_16(1639);
+emit_16(1574);
+emit_16(1639);
+emit_16(1575);
+emit_16(1640);
+emit_16(1576);
+emit_16(1640);
+emit_16(1575);
+emit_16(1640);
+emit_16(1576);
+emit_16(1641);
+emit_16(1577);
+emit_16(1641);
+emit_16(1576);
+emit_16(1641);
+emit_16(1577);
+emit_16(1642);
+emit_16(1578);
+emit_16(1642);
+emit_16(1577);
+emit_16(1642);
+emit_16(1578);
+emit_16(1643);
+emit_16(1579);
+emit_16(1643);
+emit_16(1578);
+emit_16(1643);
+emit_16(1579);
+emit_16(1644);
+emit_16(1580);
+emit_16(1644);
+emit_16(1579);
+emit_16(1644);
+emit_16(1580);
+emit_16(1645);
+emit_16(1581);
+emit_16(1645);
+emit_16(1580);
+emit_16(1645);
+emit_16(1581);
+emit_16(1646);
+emit_16(1582);
+emit_16(1646);
+emit_16(1581);
+emit_16(1646);
+emit_16(1582);
+emit_16(1647);
+emit_16(1583);
+emit_16(1647);
+emit_16(1582);
+emit_16(1647);
+emit_16(1583);
+emit_16(1648);
+emit_16(1584);
+emit_16(1648);
+emit_16(1583);
+emit_16(1648);
+emit_16(1584);
+emit_16(1649);
+emit_16(1585);
+emit_16(1649);
+emit_16(1584);
+emit_16(1649);
+emit_16(1585);
+emit_16(1650);
+emit_16(1586);
+emit_16(1650);
+emit_16(1585);
+emit_16(1650);
+emit_16(1586);
+emit_16(1651);
+emit_16(1587);
+emit_16(1651);
+emit_16(1586);
+emit_16(1651);
+emit_16(1587);
+emit_16(1652);
+emit_16(1588);
+emit_16(1652);
+emit_16(1587);
+emit_16(1652);
+emit_16(1588);
+emit_16(1653);
+emit_16(1589);
+emit_16(1653);
+emit_16(1588);
+emit_16(1653);
+emit_16(1589);
+emit_16(1654);
+emit_16(1590);
+emit_16(1654);
+emit_16(1589);
+emit_16(1654);
+emit_16(1590);
+emit_16(1655);
+emit_16(1591);
+emit_16(1655);
+emit_16(1590);
+emit_16(1655);
+emit_16(1591);
+emit_16(1656);
+emit_16(1592);
+emit_16(1656);
+emit_16(1591);
+emit_16(1656);
+emit_16(1592);
+emit_16(1657);
+emit_16(1593);
+emit_16(1657);
+emit_16(1592);
+emit_16(1657);
+emit_16(1593);
+emit_16(1658);
+emit_16(1594);
+emit_16(1658);
+emit_16(1593);
+emit_16(1658);
+emit_16(1594);
+emit_16(1659);
+emit_16(1595);
+emit_16(1659);
+emit_16(1594);
+emit_16(1659);
+emit_16(1595);
+emit_16(1660);
+emit_16(1596);
+emit_16(1660);
+emit_16(1595);
+emit_16(1660);
+emit_16(1596);
+emit_16(1661);
+emit_16(1597);
+emit_16(1661);
+emit_16(1596);
+emit_16(1661);
+emit_16(1597);
+emit_16(1662);
+emit_16(1598);
+emit_16(1662);
+emit_16(1597);
+emit_16(1662);
+emit_16(1598);
+emit_16(1663);
+emit_16(1599);
+emit_16(1663);
+emit_16(1598);
+emit_16(1664);
+emit_16(1600);
+emit_16(1665);
+emit_16(1601);
+emit_16(1665);
+emit_16(1600);
+emit_16(1665);
+emit_16(1601);
+emit_16(1666);
+emit_16(1602);
+emit_16(1666);
+emit_16(1601);
+emit_16(1666);
+emit_16(1602);
+emit_16(1667);
+emit_16(1603);
+emit_16(1667);
+emit_16(1602);
+emit_16(1667);
+emit_16(1603);
+emit_16(1668);
+emit_16(1604);
+emit_16(1668);
+emit_16(1603);
+emit_16(1668);
+emit_16(1604);
+emit_16(1669);
+emit_16(1605);
+emit_16(1669);
+emit_16(1604);
+emit_16(1669);
+emit_16(1605);
+emit_16(1670);
+emit_16(1606);
+emit_16(1670);
+emit_16(1605);
+emit_16(1670);
+emit_16(1606);
+emit_16(1671);
+emit_16(1607);
+emit_16(1671);
+emit_16(1606);
+emit_16(1671);
+emit_16(1607);
+emit_16(1672);
+emit_16(1608);
+emit_16(1672);
+emit_16(1607);
+emit_16(1672);
+emit_16(1608);
+emit_16(1673);
+emit_16(1609);
+emit_16(1673);
+emit_16(1608);
+emit_16(1673);
+emit_16(1609);
+emit_16(1674);
+emit_16(1610);
+emit_16(1674);
+emit_16(1609);
+emit_16(1674);
+emit_16(1610);
+emit_16(1675);
+emit_16(1611);
+emit_16(1675);
+emit_16(1610);
+emit_16(1675);
+emit_16(1611);
+emit_16(1676);
+emit_16(1612);
+emit_16(1676);
+emit_16(1611);
+emit_16(1676);
+emit_16(1612);
+emit_16(1677);
+emit_16(1613);
+emit_16(1677);
+emit_16(1612);
+emit_16(1677);
+emit_16(1613);
+emit_16(1678);
+emit_16(1614);
+emit_16(1678);
+emit_16(1613);
+emit_16(1678);
+emit_16(1614);
+emit_16(1679);
+emit_16(1615);
+emit_16(1679);
+emit_16(1614);
+emit_16(1679);
+emit_16(1615);
+emit_16(1680);
+emit_16(1616);
+emit_16(1680);
+emit_16(1615);
+emit_16(1680);
+emit_16(1616);
+emit_16(1681);
+emit_16(1617);
+emit_16(1681);
+emit_16(1616);
+emit_16(1681);
+emit_16(1617);
+emit_16(1682);
+emit_16(1618);
+emit_16(1682);
+emit_16(1617);
+emit_16(1682);
+emit_16(1618);
+emit_16(1683);
+emit_16(1619);
+emit_16(1683);
+emit_16(1618);
+emit_16(1683);
+emit_16(1619);
+emit_16(1684);
+emit_16(1620);
+emit_16(1684);
+emit_16(1619);
+emit_16(1684);
+emit_16(1620);
+emit_16(1685);
+emit_16(1621);
+emit_16(1685);
+emit_16(1620);
+emit_16(1685);
+emit_16(1621);
+emit_16(1686);
+emit_16(1622);
+emit_16(1686);
+emit_16(1621);
+emit_16(1686);
+emit_16(1622);
+emit_16(1687);
+emit_16(1623);
+emit_16(1687);
+emit_16(1622);
+emit_16(1687);
+emit_16(1623);
+emit_16(1688);
+emit_16(1624);
+emit_16(1688);
+emit_16(1623);
+emit_16(1688);
+emit_16(1624);
+emit_16(1689);
+emit_16(1625);
+emit_16(1689);
+emit_16(1624);
+emit_16(1689);
+emit_16(1625);
+emit_16(1690);
+emit_16(1626);
+emit_16(1690);
+emit_16(1625);
+emit_16(1690);
+emit_16(1626);
+emit_16(1691);
+emit_16(1627);
+emit_16(1691);
+emit_16(1626);
+emit_16(1691);
+emit_16(1627);
+emit_16(1692);
+emit_16(1628);
+emit_16(1692);
+emit_16(1627);
+emit_16(1692);
+emit_16(1628);
+emit_16(1693);
+emit_16(1629);
+emit_16(1693);
+emit_16(1628);
+emit_16(1693);
+emit_16(1629);
+emit_16(1694);
+emit_16(1630);
+emit_16(1694);
+emit_16(1629);
+emit_16(1694);
+emit_16(1630);
+emit_16(1695);
+emit_16(1631);
+emit_16(1695);
+emit_16(1630);
+emit_16(1695);
+emit_16(1631);
+emit_16(1696);
+emit_16(1632);
+emit_16(1696);
+emit_16(1631);
+emit_16(1696);
+emit_16(1632);
+emit_16(1697);
+emit_16(1633);
+emit_16(1697);
+emit_16(1632);
+emit_16(1697);
+emit_16(1633);
+emit_16(1698);
+emit_16(1634);
+emit_16(1698);
+emit_16(1633);
+emit_16(1698);
+emit_16(1634);
+emit_16(1699);
+emit_16(1635);
+emit_16(1699);
+emit_16(1634);
+emit_16(1699);
+emit_16(1635);
+emit_16(1700);
+emit_16(1636);
+emit_16(1700);
+emit_16(1635);
+emit_16(1700);
+emit_16(1636);
+emit_16(1701);
+emit_16(1637);
+emit_16(1701);
+emit_16(1636);
+emit_16(1701);
+emit_16(1637);
+emit_16(1702);
+emit_16(1638);
+emit_16(1702);
+emit_16(1637);
+emit_16(1702);
+emit_16(1638);
+emit_16(1703);
+emit_16(1639);
+emit_16(1703);
+emit_16(1638);
+emit_16(1703);
+emit_16(1639);
+emit_16(1704);
+emit_16(1640);
+emit_16(1704);
+emit_16(1639);
+emit_16(1704);
+emit_16(1640);
+emit_16(1705);
+emit_16(1641);
+emit_16(1705);
+emit_16(1640);
+emit_16(1705);
+emit_16(1641);
+emit_16(1706);
+emit_16(1642);
+emit_16(1706);
+emit_16(1641);
+emit_16(1706);
+emit_16(1642);
+emit_16(1707);
+emit_16(1643);
+emit_16(1707);
+emit_16(1642);
+emit_16(1707);
+emit_16(1643);
+emit_16(1708);
+emit_16(1644);
+emit_16(1708);
+emit_16(1643);
+emit_16(1708);
+emit_16(1644);
+emit_16(1709);
+emit_16(1645);
+emit_16(1709);
+emit_16(1644);
+emit_16(1709);
+emit_16(1645);
+emit_16(1710);
+emit_16(1646);
+emit_16(1710);
+emit_16(1645);
+emit_16(1710);
+emit_16(1646);
+emit_16(1711);
+emit_16(1647);
+emit_16(1711);
+emit_16(1646);
+emit_16(1711);
+emit_16(1647);
+emit_16(1712);
+emit_16(1648);
+emit_16(1712);
+emit_16(1647);
+emit_16(1712);
+emit_16(1648);
+emit_16(1713);
+emit_16(1649);
+emit_16(1713);
+emit_16(1648);
+emit_16(1713);
+emit_16(1649);
+emit_16(1714);
+emit_16(1650);
+emit_16(1714);
+emit_16(1649);
+emit_16(1714);
+emit_16(1650);
+emit_16(1715);
+emit_16(1651);
+emit_16(1715);
+emit_16(1650);
+emit_16(1715);
+emit_16(1651);
+emit_16(1716);
+emit_16(1652);
+emit_16(1716);
+emit_16(1651);
+emit_16(1716);
+emit_16(1652);
+emit_16(1717);
+emit_16(1653);
+emit_16(1717);
+emit_16(1652);
+emit_16(1717);
+emit_16(1653);
+emit_16(1718);
+emit_16(1654);
+emit_16(1718);
+emit_16(1653);
+emit_16(1718);
+emit_16(1654);
+emit_16(1719);
+emit_16(1655);
+emit_16(1719);
+emit_16(1654);
+emit_16(1719);
+emit_16(1655);
+emit_16(1720);
+emit_16(1656);
+emit_16(1720);
+emit_16(1655);
+emit_16(1720);
+emit_16(1656);
+emit_16(1721);
+emit_16(1657);
+emit_16(1721);
+emit_16(1656);
+emit_16(1721);
+emit_16(1657);
+emit_16(1722);
+emit_16(1658);
+emit_16(1722);
+emit_16(1657);
+emit_16(1722);
+emit_16(1658);
+emit_16(1723);
+emit_16(1659);
+emit_16(1723);
+emit_16(1658);
+emit_16(1723);
+emit_16(1659);
+emit_16(1724);
+emit_16(1660);
+emit_16(1724);
+emit_16(1659);
+emit_16(1724);
+emit_16(1660);
+emit_16(1725);
+emit_16(1661);
+emit_16(1725);
+emit_16(1660);
+emit_16(1725);
+emit_16(1661);
+emit_16(1726);
+emit_16(1662);
+emit_16(1726);
+emit_16(1661);
+emit_16(1726);
+emit_16(1662);
+emit_16(1727);
+emit_16(1663);
+emit_16(1727);
+emit_16(1662);
+emit_16(1728);
+emit_16(1664);
+emit_16(1729);
+emit_16(1665);
+emit_16(1729);
+emit_16(1664);
+emit_16(1729);
+emit_16(1665);
+emit_16(1730);
+emit_16(1666);
+emit_16(1730);
+emit_16(1665);
+emit_16(1730);
+emit_16(1666);
+emit_16(1731);
+emit_16(1667);
+emit_16(1731);
+emit_16(1666);
+emit_16(1731);
+emit_16(1667);
+emit_16(1732);
+emit_16(1668);
+emit_16(1732);
+emit_16(1667);
+emit_16(1732);
+emit_16(1668);
+emit_16(1733);
+emit_16(1669);
+emit_16(1733);
+emit_16(1668);
+emit_16(1733);
+emit_16(1669);
+emit_16(1734);
+emit_16(1670);
+emit_16(1734);
+emit_16(1669);
+emit_16(1734);
+emit_16(1670);
+emit_16(1735);
+emit_16(1671);
+emit_16(1735);
+emit_16(1670);
+emit_16(1735);
+emit_16(1671);
+emit_16(1736);
+emit_16(1672);
+emit_16(1736);
+emit_16(1671);
+emit_16(1736);
+emit_16(1672);
+emit_16(1737);
+emit_16(1673);
+emit_16(1737);
+emit_16(1672);
+emit_16(1737);
+emit_16(1673);
+emit_16(1738);
+emit_16(1674);
+emit_16(1738);
+emit_16(1673);
+emit_16(1738);
+emit_16(1674);
+emit_16(1739);
+emit_16(1675);
+emit_16(1739);
+emit_16(1674);
+emit_16(1739);
+emit_16(1675);
+emit_16(1740);
+emit_16(1676);
+emit_16(1740);
+emit_16(1675);
+emit_16(1740);
+emit_16(1676);
+emit_16(1741);
+emit_16(1677);
+emit_16(1741);
+emit_16(1676);
+emit_16(1741);
+emit_16(1677);
+emit_16(1742);
+emit_16(1678);
+emit_16(1742);
+emit_16(1677);
+emit_16(1742);
+emit_16(1678);
+emit_16(1743);
+emit_16(1679);
+emit_16(1743);
+emit_16(1678);
+emit_16(1743);
+emit_16(1679);
+emit_16(1744);
+emit_16(1680);
+emit_16(1744);
+emit_16(1679);
+emit_16(1744);
+emit_16(1680);
+emit_16(1745);
+emit_16(1681);
+emit_16(1745);
+emit_16(1680);
+emit_16(1745);
+emit_16(1681);
+emit_16(1746);
+emit_16(1682);
+emit_16(1746);
+emit_16(1681);
+emit_16(1746);
+emit_16(1682);
+emit_16(1747);
+emit_16(1683);
+emit_16(1747);
+emit_16(1682);
+emit_16(1747);
+emit_16(1683);
+emit_16(1748);
+emit_16(1684);
+emit_16(1748);
+emit_16(1683);
+emit_16(1748);
+emit_16(1684);
+emit_16(1749);
+emit_16(1685);
+emit_16(1749);
+emit_16(1684);
+emit_16(1749);
+emit_16(1685);
+emit_16(1750);
+emit_16(1686);
+emit_16(1750);
+emit_16(1685);
+emit_16(1750);
+emit_16(1686);
+emit_16(1751);
+emit_16(1687);
+emit_16(1751);
+emit_16(1686);
+emit_16(1751);
+emit_16(1687);
+emit_16(1752);
+emit_16(1688);
+emit_16(1752);
+emit_16(1687);
+emit_16(1752);
+emit_16(1688);
+emit_16(1753);
+emit_16(1689);
+emit_16(1753);
+emit_16(1688);
+emit_16(1753);
+emit_16(1689);
+emit_16(1754);
+emit_16(1690);
+emit_16(1754);
+emit_16(1689);
+emit_16(1754);
+emit_16(1690);
+emit_16(1755);
+emit_16(1691);
+emit_16(1755);
+emit_16(1690);
+emit_16(1755);
+emit_16(1691);
+emit_16(1756);
+emit_16(1692);
+emit_16(1756);
+emit_16(1691);
+emit_16(1756);
+emit_16(1692);
+emit_16(1757);
+emit_16(1693);
+emit_16(1757);
+emit_16(1692);
+emit_16(1757);
+emit_16(1693);
+emit_16(1758);
+emit_16(1694);
+emit_16(1758);
+emit_16(1693);
+emit_16(1758);
+emit_16(1694);
+emit_16(1759);
+emit_16(1695);
+emit_16(1759);
+emit_16(1694);
+emit_16(1759);
+emit_16(1695);
+emit_16(1760);
+emit_16(1696);
+emit_16(1760);
+emit_16(1695);
+emit_16(1760);
+emit_16(1696);
+emit_16(1761);
+emit_16(1697);
+emit_16(1761);
+emit_16(1696);
+emit_16(1761);
+emit_16(1697);
+emit_16(1762);
+emit_16(1698);
+emit_16(1762);
+emit_16(1697);
+emit_16(1762);
+emit_16(1698);
+emit_16(1763);
+emit_16(1699);
+emit_16(1763);
+emit_16(1698);
+emit_16(1763);
+emit_16(1699);
+emit_16(1764);
+emit_16(1700);
+emit_16(1764);
+emit_16(1699);
+emit_16(1764);
+emit_16(1700);
+emit_16(1765);
+emit_16(1701);
+emit_16(1765);
+emit_16(1700);
+emit_16(1765);
+emit_16(1701);
+emit_16(1766);
+emit_16(1702);
+emit_16(1766);
+emit_16(1701);
+emit_16(1766);
+emit_16(1702);
+emit_16(1767);
+emit_16(1703);
+emit_16(1767);
+emit_16(1702);
+emit_16(1767);
+emit_16(1703);
+emit_16(1768);
+emit_16(1704);
+emit_16(1768);
+emit_16(1703);
+emit_16(1768);
+emit_16(1704);
+emit_16(1769);
+emit_16(1705);
+emit_16(1769);
+emit_16(1704);
+emit_16(1769);
+emit_16(1705);
+emit_16(1770);
+emit_16(1706);
+emit_16(1770);
+emit_16(1705);
+emit_16(1770);
+emit_16(1706);
+emit_16(1771);
+emit_16(1707);
+emit_16(1771);
+emit_16(1706);
+emit_16(1771);
+emit_16(1707);
+emit_16(1772);
+emit_16(1708);
+emit_16(1772);
+emit_16(1707);
+emit_16(1772);
+emit_16(1708);
+emit_16(1773);
+emit_16(1709);
+emit_16(1773);
+emit_16(1708);
+emit_16(1773);
+emit_16(1709);
+emit_16(1774);
+emit_16(1710);
+emit_16(1774);
+emit_16(1709);
+emit_16(1774);
+emit_16(1710);
+emit_16(1775);
+emit_16(1711);
+emit_16(1775);
+emit_16(1710);
+emit_16(1775);
+emit_16(1711);
+emit_16(1776);
+emit_16(1712);
+emit_16(1776);
+emit_16(1711);
+emit_16(1776);
+emit_16(1712);
+emit_16(1777);
+emit_16(1713);
+emit_16(1777);
+emit_16(1712);
+emit_16(1777);
+emit_16(1713);
+emit_16(1778);
+emit_16(1714);
+emit_16(1778);
+emit_16(1713);
+emit_16(1778);
+emit_16(1714);
+emit_16(1779);
+emit_16(1715);
+emit_16(1779);
+emit_16(1714);
+emit_16(1779);
+emit_16(1715);
+emit_16(1780);
+emit_16(1716);
+emit_16(1780);
+emit_16(1715);
+emit_16(1780);
+emit_16(1716);
+emit_16(1781);
+emit_16(1717);
+emit_16(1781);
+emit_16(1716);
+emit_16(1781);
+emit_16(1717);
+emit_16(1782);
+emit_16(1718);
+emit_16(1782);
+emit_16(1717);
+emit_16(1782);
+emit_16(1718);
+emit_16(1783);
+emit_16(1719);
+emit_16(1783);
+emit_16(1718);
+emit_16(1783);
+emit_16(1719);
+emit_16(1784);
+emit_16(1720);
+emit_16(1784);
+emit_16(1719);
+emit_16(1784);
+emit_16(1720);
+emit_16(1785);
+emit_16(1721);
+emit_16(1785);
+emit_16(1720);
+emit_16(1785);
+emit_16(1721);
+emit_16(1786);
+emit_16(1722);
+emit_16(1786);
+emit_16(1721);
+emit_16(1786);
+emit_16(1722);
+emit_16(1787);
+emit_16(1723);
+emit_16(1787);
+emit_16(1722);
+emit_16(1787);
+emit_16(1723);
+emit_16(1788);
+emit_16(1724);
+emit_16(1788);
+emit_16(1723);
+emit_16(1788);
+emit_16(1724);
+emit_16(1789);
+emit_16(1725);
+emit_16(1789);
+emit_16(1724);
+emit_16(1789);
+emit_16(1725);
+emit_16(1790);
+emit_16(1726);
+emit_16(1790);
+emit_16(1725);
+emit_16(1790);
+emit_16(1726);
+emit_16(1791);
+emit_16(1727);
+emit_16(1791);
+emit_16(1726);
+emit_16(1792);
+emit_16(1728);
+emit_16(1793);
+emit_16(1729);
+emit_16(1793);
+emit_16(1728);
+emit_16(1793);
+emit_16(1729);
+emit_16(1794);
+emit_16(1730);
+emit_16(1794);
+emit_16(1729);
+emit_16(1794);
+emit_16(1730);
+emit_16(1795);
+emit_16(1731);
+emit_16(1795);
+emit_16(1730);
+emit_16(1795);
+emit_16(1731);
+emit_16(1796);
+emit_16(1732);
+emit_16(1796);
+emit_16(1731);
+emit_16(1796);
+emit_16(1732);
+emit_16(1797);
+emit_16(1733);
+emit_16(1797);
+emit_16(1732);
+emit_16(1797);
+emit_16(1733);
+emit_16(1798);
+emit_16(1734);
+emit_16(1798);
+emit_16(1733);
+emit_16(1798);
+emit_16(1734);
+emit_16(1799);
+emit_16(1735);
+emit_16(1799);
+emit_16(1734);
+emit_16(1799);
+emit_16(1735);
+emit_16(1800);
+emit_16(1736);
+emit_16(1800);
+emit_16(1735);
+emit_16(1800);
+emit_16(1736);
+emit_16(1801);
+emit_16(1737);
+emit_16(1801);
+emit_16(1736);
+emit_16(1801);
+emit_16(1737);
+emit_16(1802);
+emit_16(1738);
+emit_16(1802);
+emit_16(1737);
+emit_16(1802);
+emit_16(1738);
+emit_16(1803);
+emit_16(1739);
+emit_16(1803);
+emit_16(1738);
+emit_16(1803);
+emit_16(1739);
+emit_16(1804);
+emit_16(1740);
+emit_16(1804);
+emit_16(1739);
+emit_16(1804);
+emit_16(1740);
+emit_16(1805);
+emit_16(1741);
+emit_16(1805);
+emit_16(1740);
+emit_16(1805);
+emit_16(1741);
+emit_16(1806);
+emit_16(1742);
+emit_16(1806);
+emit_16(1741);
+emit_16(1806);
+emit_16(1742);
+emit_16(1807);
+emit_16(1743);
+emit_16(1807);
+emit_16(1742);
+emit_16(1807);
+emit_16(1743);
+emit_16(1808);
+emit_16(1744);
+emit_16(1808);
+emit_16(1743);
+emit_16(1808);
+emit_16(1744);
+emit_16(1809);
+emit_16(1745);
+emit_16(1809);
+emit_16(1744);
+emit_16(1809);
+emit_16(1745);
+emit_16(1810);
+emit_16(1746);
+emit_16(1810);
+emit_16(1745);
+emit_16(1810);
+emit_16(1746);
+emit_16(1811);
+emit_16(1747);
+emit_16(1811);
+emit_16(1746);
+emit_16(1811);
+emit_16(1747);
+emit_16(1812);
+emit_16(1748);
+emit_16(1812);
+emit_16(1747);
+emit_16(1812);
+emit_16(1748);
+emit_16(1813);
+emit_16(1749);
+emit_16(1813);
+emit_16(1748);
+emit_16(1813);
+emit_16(1749);
+emit_16(1814);
+emit_16(1750);
+emit_16(1814);
+emit_16(1749);
+emit_16(1814);
+emit_16(1750);
+emit_16(1815);
+emit_16(1751);
+emit_16(1815);
+emit_16(1750);
+emit_16(1815);
+emit_16(1751);
+emit_16(1816);
+emit_16(1752);
+emit_16(1816);
+emit_16(1751);
+emit_16(1816);
+emit_16(1752);
+emit_16(1817);
+emit_16(1753);
+emit_16(1817);
+emit_16(1752);
+emit_16(1817);
+emit_16(1753);
+emit_16(1818);
+emit_16(1754);
+emit_16(1818);
+emit_16(1753);
+emit_16(1818);
+emit_16(1754);
+emit_16(1819);
+emit_16(1755);
+emit_16(1819);
+emit_16(1754);
+emit_16(1819);
+emit_16(1755);
+emit_16(1820);
+emit_16(1756);
+emit_16(1820);
+emit_16(1755);
+emit_16(1820);
+emit_16(1756);
+emit_16(1821);
+emit_16(1757);
+emit_16(1821);
+emit_16(1756);
+emit_16(1821);
+emit_16(1757);
+emit_16(1822);
+emit_16(1758);
+emit_16(1822);
+emit_16(1757);
+emit_16(1822);
+emit_16(1758);
+emit_16(1823);
+emit_16(1759);
+emit_16(1823);
+emit_16(1758);
+emit_16(1823);
+emit_16(1759);
+emit_16(1824);
+emit_16(1760);
+emit_16(1824);
+emit_16(1759);
+emit_16(1824);
+emit_16(1760);
+emit_16(1825);
+emit_16(1761);
+emit_16(1825);
+emit_16(1760);
+emit_16(1825);
+emit_16(1761);
+emit_16(1826);
+emit_16(1762);
+emit_16(1826);
+emit_16(1761);
+emit_16(1826);
+emit_16(1762);
+emit_16(1827);
+emit_16(1763);
+emit_16(1827);
+emit_16(1762);
+emit_16(1827);
+emit_16(1763);
+emit_16(1828);
+emit_16(1764);
+emit_16(1828);
+emit_16(1763);
+emit_16(1828);
+emit_16(1764);
+emit_16(1829);
+emit_16(1765);
+emit_16(1829);
+emit_16(1764);
+emit_16(1829);
+emit_16(1765);
+emit_16(1830);
+emit_16(1766);
+emit_16(1830);
+emit_16(1765);
+emit_16(1830);
+emit_16(1766);
+emit_16(1831);
+emit_16(1767);
+emit_16(1831);
+emit_16(1766);
+emit_16(1831);
+emit_16(1767);
+emit_16(1832);
+emit_16(1768);
+emit_16(1832);
+emit_16(1767);
+emit_16(1832);
+emit_16(1768);
+emit_16(1833);
+emit_16(1769);
+emit_16(1833);
+emit_16(1768);
+emit_16(1833);
+emit_16(1769);
+emit_16(1834);
+emit_16(1770);
+emit_16(1834);
+emit_16(1769);
+emit_16(1834);
+emit_16(1770);
+emit_16(1835);
+emit_16(1771);
+emit_16(1835);
+emit_16(1770);
+emit_16(1835);
+emit_16(1771);
+emit_16(1836);
+emit_16(1772);
+emit_16(1836);
+emit_16(1771);
+emit_16(1836);
+emit_16(1772);
+emit_16(1837);
+emit_16(1773);
+emit_16(1837);
+emit_16(1772);
+emit_16(1837);
+emit_16(1773);
+emit_16(1838);
+emit_16(1774);
+emit_16(1838);
+emit_16(1773);
+emit_16(1838);
+emit_16(1774);
+emit_16(1839);
+emit_16(1775);
+emit_16(1839);
+emit_16(1774);
+emit_16(1839);
+emit_16(1775);
+emit_16(1840);
+emit_16(1776);
+emit_16(1840);
+emit_16(1775);
+emit_16(1840);
+emit_16(1776);
+emit_16(1841);
+emit_16(1777);
+emit_16(1841);
+emit_16(1776);
+emit_16(1841);
+emit_16(1777);
+emit_16(1842);
+emit_16(1778);
+emit_16(1842);
+emit_16(1777);
+emit_16(1842);
+emit_16(1778);
+emit_16(1843);
+emit_16(1779);
+emit_16(1843);
+emit_16(1778);
+emit_16(1843);
+emit_16(1779);
+emit_16(1844);
+emit_16(1780);
+emit_16(1844);
+emit_16(1779);
+emit_16(1844);
+emit_16(1780);
+emit_16(1845);
+emit_16(1781);
+emit_16(1845);
+emit_16(1780);
+emit_16(1845);
+emit_16(1781);
+emit_16(1846);
+emit_16(1782);
+emit_16(1846);
+emit_16(1781);
+emit_16(1846);
+emit_16(1782);
+emit_16(1847);
+emit_16(1783);
+emit_16(1847);
+emit_16(1782);
+emit_16(1847);
+emit_16(1783);
+emit_16(1848);
+emit_16(1784);
+emit_16(1848);
+emit_16(1783);
+emit_16(1848);
+emit_16(1784);
+emit_16(1849);
+emit_16(1785);
+emit_16(1849);
+emit_16(1784);
+emit_16(1849);
+emit_16(1785);
+emit_16(1850);
+emit_16(1786);
+emit_16(1850);
+emit_16(1785);
+emit_16(1850);
+emit_16(1786);
+emit_16(1851);
+emit_16(1787);
+emit_16(1851);
+emit_16(1786);
+emit_16(1851);
+emit_16(1787);
+emit_16(1852);
+emit_16(1788);
+emit_16(1852);
+emit_16(1787);
+emit_16(1852);
+emit_16(1788);
+emit_16(1853);
+emit_16(1789);
+emit_16(1853);
+emit_16(1788);
+emit_16(1853);
+emit_16(1789);
+emit_16(1854);
+emit_16(1790);
+emit_16(1854);
+emit_16(1789);
+emit_16(1854);
+emit_16(1790);
+emit_16(1855);
+emit_16(1791);
+emit_16(1855);
+emit_16(1790);
+emit_16(1856);
+emit_16(1792);
+emit_16(1857);
+emit_16(1793);
+emit_16(1857);
+emit_16(1792);
+emit_16(1857);
+emit_16(1793);
+emit_16(1858);
+emit_16(1794);
+emit_16(1858);
+emit_16(1793);
+emit_16(1858);
+emit_16(1794);
+emit_16(1859);
+emit_16(1795);
+emit_16(1859);
+emit_16(1794);
+emit_16(1859);
+emit_16(1795);
+emit_16(1860);
+emit_16(1796);
+emit_16(1860);
+emit_16(1795);
+emit_16(1860);
+emit_16(1796);
+emit_16(1861);
+emit_16(1797);
+emit_16(1861);
+emit_16(1796);
+emit_16(1861);
+emit_16(1797);
+emit_16(1862);
+emit_16(1798);
+emit_16(1862);
+emit_16(1797);
+emit_16(1862);
+emit_16(1798);
+emit_16(1863);
+emit_16(1799);
+emit_16(1863);
+emit_16(1798);
+emit_16(1863);
+emit_16(1799);
+emit_16(1864);
+emit_16(1800);
+emit_16(1864);
+emit_16(1799);
+emit_16(1864);
+emit_16(1800);
+emit_16(1865);
+emit_16(1801);
+emit_16(1865);
+emit_16(1800);
+emit_16(1865);
+emit_16(1801);
+emit_16(1866);
+emit_16(1802);
+emit_16(1866);
+emit_16(1801);
+emit_16(1866);
+emit_16(1802);
+emit_16(1867);
+emit_16(1803);
+emit_16(1867);
+emit_16(1802);
+emit_16(1867);
+emit_16(1803);
+emit_16(1868);
+emit_16(1804);
+emit_16(1868);
+emit_16(1803);
+emit_16(1868);
+emit_16(1804);
+emit_16(1869);
+emit_16(1805);
+emit_16(1869);
+emit_16(1804);
+emit_16(1869);
+emit_16(1805);
+emit_16(1870);
+emit_16(1806);
+emit_16(1870);
+emit_16(1805);
+emit_16(1870);
+emit_16(1806);
+emit_16(1871);
+emit_16(1807);
+emit_16(1871);
+emit_16(1806);
+emit_16(1871);
+emit_16(1807);
+emit_16(1872);
+emit_16(1808);
+emit_16(1872);
+emit_16(1807);
+emit_16(1872);
+emit_16(1808);
+emit_16(1873);
+emit_16(1809);
+emit_16(1873);
+emit_16(1808);
+emit_16(1873);
+emit_16(1809);
+emit_16(1874);
+emit_16(1810);
+emit_16(1874);
+emit_16(1809);
+emit_16(1874);
+emit_16(1810);
+emit_16(1875);
+emit_16(1811);
+emit_16(1875);
+emit_16(1810);
+emit_16(1875);
+emit_16(1811);
+emit_16(1876);
+emit_16(1812);
+emit_16(1876);
+emit_16(1811);
+emit_16(1876);
+emit_16(1812);
+emit_16(1877);
+emit_16(1813);
+emit_16(1877);
+emit_16(1812);
+emit_16(1877);
+emit_16(1813);
+emit_16(1878);
+emit_16(1814);
+emit_16(1878);
+emit_16(1813);
+emit_16(1878);
+emit_16(1814);
+emit_16(1879);
+emit_16(1815);
+emit_16(1879);
+emit_16(1814);
+emit_16(1879);
+emit_16(1815);
+emit_16(1880);
+emit_16(1816);
+emit_16(1880);
+emit_16(1815);
+emit_16(1880);
+emit_16(1816);
+emit_16(1881);
+emit_16(1817);
+emit_16(1881);
+emit_16(1816);
+emit_16(1881);
+emit_16(1817);
+emit_16(1882);
+emit_16(1818);
+emit_16(1882);
+emit_16(1817);
+emit_16(1882);
+emit_16(1818);
+emit_16(1883);
+emit_16(1819);
+emit_16(1883);
+emit_16(1818);
+emit_16(1883);
+emit_16(1819);
+emit_16(1884);
+emit_16(1820);
+emit_16(1884);
+emit_16(1819);
+emit_16(1884);
+emit_16(1820);
+emit_16(1885);
+emit_16(1821);
+emit_16(1885);
+emit_16(1820);
+emit_16(1885);
+emit_16(1821);
+emit_16(1886);
+emit_16(1822);
+emit_16(1886);
+emit_16(1821);
+emit_16(1886);
+emit_16(1822);
+emit_16(1887);
+emit_16(1823);
+emit_16(1887);
+emit_16(1822);
+emit_16(1887);
+emit_16(1823);
+emit_16(1888);
+emit_16(1824);
+emit_16(1888);
+emit_16(1823);
+emit_16(1888);
+emit_16(1824);
+emit_16(1889);
+emit_16(1825);
+emit_16(1889);
+emit_16(1824);
+emit_16(1889);
+emit_16(1825);
+emit_16(1890);
+emit_16(1826);
+emit_16(1890);
+emit_16(1825);
+emit_16(1890);
+emit_16(1826);
+emit_16(1891);
+emit_16(1827);
+emit_16(1891);
+emit_16(1826);
+emit_16(1891);
+emit_16(1827);
+emit_16(1892);
+emit_16(1828);
+emit_16(1892);
+emit_16(1827);
+emit_16(1892);
+emit_16(1828);
+emit_16(1893);
+emit_16(1829);
+emit_16(1893);
+emit_16(1828);
+emit_16(1893);
+emit_16(1829);
+emit_16(1894);
+emit_16(1830);
+emit_16(1894);
+emit_16(1829);
+emit_16(1894);
+emit_16(1830);
+emit_16(1895);
+emit_16(1831);
+emit_16(1895);
+emit_16(1830);
+emit_16(1895);
+emit_16(1831);
+emit_16(1896);
+emit_16(1832);
+emit_16(1896);
+emit_16(1831);
+emit_16(1896);
+emit_16(1832);
+emit_16(1897);
+emit_16(1833);
+emit_16(1897);
+emit_16(1832);
+emit_16(1897);
+emit_16(1833);
+emit_16(1898);
+emit_16(1834);
+emit_16(1898);
+emit_16(1833);
+emit_16(1898);
+emit_16(1834);
+emit_16(1899);
+emit_16(1835);
+emit_16(1899);
+emit_16(1834);
+emit_16(1899);
+emit_16(1835);
+emit_16(1900);
+emit_16(1836);
+emit_16(1900);
+emit_16(1835);
+emit_16(1900);
+emit_16(1836);
+emit_16(1901);
+emit_16(1837);
+emit_16(1901);
+emit_16(1836);
+emit_16(1901);
+emit_16(1837);
+emit_16(1902);
+emit_16(1838);
+emit_16(1902);
+emit_16(1837);
+emit_16(1902);
+emit_16(1838);
+emit_16(1903);
+emit_16(1839);
+emit_16(1903);
+emit_16(1838);
+emit_16(1903);
+emit_16(1839);
+emit_16(1904);
+emit_16(1840);
+emit_16(1904);
+emit_16(1839);
+emit_16(1904);
+emit_16(1840);
+emit_16(1905);
+emit_16(1841);
+emit_16(1905);
+emit_16(1840);
+emit_16(1905);
+emit_16(1841);
+emit_16(1906);
+emit_16(1842);
+emit_16(1906);
+emit_16(1841);
+emit_16(1906);
+emit_16(1842);
+emit_16(1907);
+emit_16(1843);
+emit_16(1907);
+emit_16(1842);
+emit_16(1907);
+emit_16(1843);
+emit_16(1908);
+emit_16(1844);
+emit_16(1908);
+emit_16(1843);
+emit_16(1908);
+emit_16(1844);
+emit_16(1909);
+emit_16(1845);
+emit_16(1909);
+emit_16(1844);
+emit_16(1909);
+emit_16(1845);
+emit_16(1910);
+emit_16(1846);
+emit_16(1910);
+emit_16(1845);
+emit_16(1910);
+emit_16(1846);
+emit_16(1911);
+emit_16(1847);
+emit_16(1911);
+emit_16(1846);
+emit_16(1911);
+emit_16(1847);
+emit_16(1912);
+emit_16(1848);
+emit_16(1912);
+emit_16(1847);
+emit_16(1912);
+emit_16(1848);
+emit_16(1913);
+emit_16(1849);
+emit_16(1913);
+emit_16(1848);
+emit_16(1913);
+emit_16(1849);
+emit_16(1914);
+emit_16(1850);
+emit_16(1914);
+emit_16(1849);
+emit_16(1914);
+emit_16(1850);
+emit_16(1915);
+emit_16(1851);
+emit_16(1915);
+emit_16(1850);
+emit_16(1915);
+emit_16(1851);
+emit_16(1916);
+emit_16(1852);
+emit_16(1916);
+emit_16(1851);
+emit_16(1916);
+emit_16(1852);
+emit_16(1917);
+emit_16(1853);
+emit_16(1917);
+emit_16(1852);
+emit_16(1917);
+emit_16(1853);
+emit_16(1918);
+emit_16(1854);
+emit_16(1918);
+emit_16(1853);
+emit_16(1918);
+emit_16(1854);
+emit_16(1919);
+emit_16(1855);
+emit_16(1919);
+emit_16(1854);
+emit_16(1920);
+emit_16(1856);
+emit_16(1921);
+emit_16(1857);
+emit_16(1921);
+emit_16(1856);
+emit_16(1921);
+emit_16(1857);
+emit_16(1922);
+emit_16(1858);
+emit_16(1922);
+emit_16(1857);
+emit_16(1922);
+emit_16(1858);
+emit_16(1923);
+emit_16(1859);
+emit_16(1923);
+emit_16(1858);
+emit_16(1923);
+emit_16(1859);
+emit_16(1924);
+emit_16(1860);
+emit_16(1924);
+emit_16(1859);
+emit_16(1924);
+emit_16(1860);
+emit_16(1925);
+emit_16(1861);
+emit_16(1925);
+emit_16(1860);
+emit_16(1925);
+emit_16(1861);
+emit_16(1926);
+emit_16(1862);
+emit_16(1926);
+emit_16(1861);
+emit_16(1926);
+emit_16(1862);
+emit_16(1927);
+emit_16(1863);
+emit_16(1927);
+emit_16(1862);
+emit_16(1927);
+emit_16(1863);
+emit_16(1928);
+emit_16(1864);
+emit_16(1928);
+emit_16(1863);
+emit_16(1928);
+emit_16(1864);
+emit_16(1929);
+emit_16(1865);
+emit_16(1929);
+emit_16(1864);
+emit_16(1929);
+emit_16(1865);
+emit_16(1930);
+emit_16(1866);
+emit_16(1930);
+emit_16(1865);
+emit_16(1930);
+emit_16(1866);
+emit_16(1931);
+emit_16(1867);
+emit_16(1931);
+emit_16(1866);
+emit_16(1931);
+emit_16(1867);
+emit_16(1932);
+emit_16(1868);
+emit_16(1932);
+emit_16(1867);
+emit_16(1932);
+emit_16(1868);
+emit_16(1933);
+emit_16(1869);
+emit_16(1933);
+emit_16(1868);
+emit_16(1933);
+emit_16(1869);
+emit_16(1934);
+emit_16(1870);
+emit_16(1934);
+emit_16(1869);
+emit_16(1934);
+emit_16(1870);
+emit_16(1935);
+emit_16(1871);
+emit_16(1935);
+emit_16(1870);
+emit_16(1935);
+emit_16(1871);
+emit_16(1936);
+emit_16(1872);
+emit_16(1936);
+emit_16(1871);
+emit_16(1936);
+emit_16(1872);
+emit_16(1937);
+emit_16(1873);
+emit_16(1937);
+emit_16(1872);
+emit_16(1937);
+emit_16(1873);
+emit_16(1938);
+emit_16(1874);
+emit_16(1938);
+emit_16(1873);
+emit_16(1938);
+emit_16(1874);
+emit_16(1939);
+emit_16(1875);
+emit_16(1939);
+emit_16(1874);
+emit_16(1939);
+emit_16(1875);
+emit_16(1940);
+emit_16(1876);
+emit_16(1940);
+emit_16(1875);
+emit_16(1940);
+emit_16(1876);
+emit_16(1941);
+emit_16(1877);
+emit_16(1941);
+emit_16(1876);
+emit_16(1941);
+emit_16(1877);
+emit_16(1942);
+emit_16(1878);
+emit_16(1942);
+emit_16(1877);
+emit_16(1942);
+emit_16(1878);
+emit_16(1943);
+emit_16(1879);
+emit_16(1943);
+emit_16(1878);
+emit_16(1943);
+emit_16(1879);
+emit_16(1944);
+emit_16(1880);
+emit_16(1944);
+emit_16(1879);
+emit_16(1944);
+emit_16(1880);
+emit_16(1945);
+emit_16(1881);
+emit_16(1945);
+emit_16(1880);
+emit_16(1945);
+emit_16(1881);
+emit_16(1946);
+emit_16(1882);
+emit_16(1946);
+emit_16(1881);
+emit_16(1946);
+emit_16(1882);
+emit_16(1947);
+emit_16(1883);
+emit_16(1947);
+emit_16(1882);
+emit_16(1947);
+emit_16(1883);
+emit_16(1948);
+emit_16(1884);
+emit_16(1948);
+emit_16(1883);
+emit_16(1948);
+emit_16(1884);
+emit_16(1949);
+emit_16(1885);
+emit_16(1949);
+emit_16(1884);
+emit_16(1949);
+emit_16(1885);
+emit_16(1950);
+emit_16(1886);
+emit_16(1950);
+emit_16(1885);
+emit_16(1950);
+emit_16(1886);
+emit_16(1951);
+emit_16(1887);
+emit_16(1951);
+emit_16(1886);
+emit_16(1951);
+emit_16(1887);
+emit_16(1952);
+emit_16(1888);
+emit_16(1952);
+emit_16(1887);
+emit_16(1952);
+emit_16(1888);
+emit_16(1953);
+emit_16(1889);
+emit_16(1953);
+emit_16(1888);
+emit_16(1953);
+emit_16(1889);
+emit_16(1954);
+emit_16(1890);
+emit_16(1954);
+emit_16(1889);
+emit_16(1954);
+emit_16(1890);
+emit_16(1955);
+emit_16(1891);
+emit_16(1955);
+emit_16(1890);
+emit_16(1955);
+emit_16(1891);
+emit_16(1956);
+emit_16(1892);
+emit_16(1956);
+emit_16(1891);
+emit_16(1956);
+emit_16(1892);
+emit_16(1957);
+emit_16(1893);
+emit_16(1957);
+emit_16(1892);
+emit_16(1957);
+emit_16(1893);
+emit_16(1958);
+emit_16(1894);
+emit_16(1958);
+emit_16(1893);
+emit_16(1958);
+emit_16(1894);
+emit_16(1959);
+emit_16(1895);
+emit_16(1959);
+emit_16(1894);
+emit_16(1959);
+emit_16(1895);
+emit_16(1960);
+emit_16(1896);
+emit_16(1960);
+emit_16(1895);
+emit_16(1960);
+emit_16(1896);
+emit_16(1961);
+emit_16(1897);
+emit_16(1961);
+emit_16(1896);
+emit_16(1961);
+emit_16(1897);
+emit_16(1962);
+emit_16(1898);
+emit_16(1962);
+emit_16(1897);
+emit_16(1962);
+emit_16(1898);
+emit_16(1963);
+emit_16(1899);
+emit_16(1963);
+emit_16(1898);
+emit_16(1963);
+emit_16(1899);
+emit_16(1964);
+emit_16(1900);
+emit_16(1964);
+emit_16(1899);
+emit_16(1964);
+emit_16(1900);
+emit_16(1965);
+emit_16(1901);
+emit_16(1965);
+emit_16(1900);
+emit_16(1965);
+emit_16(1901);
+emit_16(1966);
+emit_16(1902);
+emit_16(1966);
+emit_16(1901);
+emit_16(1966);
+emit_16(1902);
+emit_16(1967);
+emit_16(1903);
+emit_16(1967);
+emit_16(1902);
+emit_16(1967);
+emit_16(1903);
+emit_16(1968);
+emit_16(1904);
+emit_16(1968);
+emit_16(1903);
+emit_16(1968);
+emit_16(1904);
+emit_16(1969);
+emit_16(1905);
+emit_16(1969);
+emit_16(1904);
+emit_16(1969);
+emit_16(1905);
+emit_16(1970);
+emit_16(1906);
+emit_16(1970);
+emit_16(1905);
+emit_16(1970);
+emit_16(1906);
+emit_16(1971);
+emit_16(1907);
+emit_16(1971);
+emit_16(1906);
+emit_16(1971);
+emit_16(1907);
+emit_16(1972);
+emit_16(1908);
+emit_16(1972);
+emit_16(1907);
+emit_16(1972);
+emit_16(1908);
+emit_16(1973);
+emit_16(1909);
+emit_16(1973);
+emit_16(1908);
+emit_16(1973);
+emit_16(1909);
+emit_16(1974);
+emit_16(1910);
+emit_16(1974);
+emit_16(1909);
+emit_16(1974);
+emit_16(1910);
+emit_16(1975);
+emit_16(1911);
+emit_16(1975);
+emit_16(1910);
+emit_16(1975);
+emit_16(1911);
+emit_16(1976);
+emit_16(1912);
+emit_16(1976);
+emit_16(1911);
+emit_16(1976);
+emit_16(1912);
+emit_16(1977);
+emit_16(1913);
+emit_16(1977);
+emit_16(1912);
+emit_16(1977);
+emit_16(1913);
+emit_16(1978);
+emit_16(1914);
+emit_16(1978);
+emit_16(1913);
+emit_16(1978);
+emit_16(1914);
+emit_16(1979);
+emit_16(1915);
+emit_16(1979);
+emit_16(1914);
+emit_16(1979);
+emit_16(1915);
+emit_16(1980);
+emit_16(1916);
+emit_16(1980);
+emit_16(1915);
+emit_16(1980);
+emit_16(1916);
+emit_16(1981);
+emit_16(1917);
+emit_16(1981);
+emit_16(1916);
+emit_16(1981);
+emit_16(1917);
+emit_16(1982);
+emit_16(1918);
+emit_16(1982);
+emit_16(1917);
+emit_16(1982);
+emit_16(1918);
+emit_16(1983);
+emit_16(1919);
+emit_16(1983);
+emit_16(1918);
+emit_16(1984);
+emit_16(1920);
+emit_16(1985);
+emit_16(1921);
+emit_16(1985);
+emit_16(1920);
+emit_16(1985);
+emit_16(1921);
+emit_16(1986);
+emit_16(1922);
+emit_16(1986);
+emit_16(1921);
+emit_16(1986);
+emit_16(1922);
+emit_16(1987);
+emit_16(1923);
+emit_16(1987);
+emit_16(1922);
+emit_16(1987);
+emit_16(1923);
+emit_16(1988);
+emit_16(1924);
+emit_16(1988);
+emit_16(1923);
+emit_16(1988);
+emit_16(1924);
+emit_16(1989);
+emit_16(1925);
+emit_16(1989);
+emit_16(1924);
+emit_16(1989);
+emit_16(1925);
+emit_16(1990);
+emit_16(1926);
+emit_16(1990);
+emit_16(1925);
+emit_16(1990);
+emit_16(1926);
+emit_16(1991);
+emit_16(1927);
+emit_16(1991);
+emit_16(1926);
+emit_16(1991);
+emit_16(1927);
+emit_16(1992);
+emit_16(1928);
+emit_16(1992);
+emit_16(1927);
+emit_16(1992);
+emit_16(1928);
+emit_16(1993);
+emit_16(1929);
+emit_16(1993);
+emit_16(1928);
+emit_16(1993);
+emit_16(1929);
+emit_16(1994);
+emit_16(1930);
+emit_16(1994);
+emit_16(1929);
+emit_16(1994);
+emit_16(1930);
+emit_16(1995);
+emit_16(1931);
+emit_16(1995);
+emit_16(1930);
+emit_16(1995);
+emit_16(1931);
+emit_16(1996);
+emit_16(1932);
+emit_16(1996);
+emit_16(1931);
+emit_16(1996);
+emit_16(1932);
+emit_16(1997);
+emit_16(1933);
+emit_16(1997);
+emit_16(1932);
+emit_16(1997);
+emit_16(1933);
+emit_16(1998);
+emit_16(1934);
+emit_16(1998);
+emit_16(1933);
+emit_16(1998);
+emit_16(1934);
+emit_16(1999);
+emit_16(1935);
+emit_16(1999);
+emit_16(1934);
+emit_16(1999);
+emit_16(1935);
+emit_16(2000);
+emit_16(1936);
+emit_16(2000);
+emit_16(1935);
+emit_16(2000);
+emit_16(1936);
+emit_16(2001);
+emit_16(1937);
+emit_16(2001);
+emit_16(1936);
+emit_16(2001);
+emit_16(1937);
+emit_16(2002);
+emit_16(1938);
+emit_16(2002);
+emit_16(1937);
+emit_16(2002);
+emit_16(1938);
+emit_16(2003);
+emit_16(1939);
+emit_16(2003);
+emit_16(1938);
+emit_16(2003);
+emit_16(1939);
+emit_16(2004);
+emit_16(1940);
+emit_16(2004);
+emit_16(1939);
+emit_16(2004);
+emit_16(1940);
+emit_16(2005);
+emit_16(1941);
+emit_16(2005);
+emit_16(1940);
+emit_16(2005);
+emit_16(1941);
+emit_16(2006);
+emit_16(1942);
+emit_16(2006);
+emit_16(1941);
+emit_16(2006);
+emit_16(1942);
+emit_16(2007);
+emit_16(1943);
+emit_16(2007);
+emit_16(1942);
+emit_16(2007);
+emit_16(1943);
+emit_16(2008);
+emit_16(1944);
+emit_16(2008);
+emit_16(1943);
+emit_16(2008);
+emit_16(1944);
+emit_16(2009);
+emit_16(1945);
+emit_16(2009);
+emit_16(1944);
+emit_16(2009);
+emit_16(1945);
+emit_16(2010);
+emit_16(1946);
+emit_16(2010);
+emit_16(1945);
+emit_16(2010);
+emit_16(1946);
+emit_16(2011);
+emit_16(1947);
+emit_16(2011);
+emit_16(1946);
+emit_16(2011);
+emit_16(1947);
+emit_16(2012);
+emit_16(1948);
+emit_16(2012);
+emit_16(1947);
+emit_16(2012);
+emit_16(1948);
+emit_16(2013);
+emit_16(1949);
+emit_16(2013);
+emit_16(1948);
+emit_16(2013);
+emit_16(1949);
+emit_16(2014);
+emit_16(1950);
+emit_16(2014);
+emit_16(1949);
+emit_16(2014);
+emit_16(1950);
+emit_16(2015);
+emit_16(1951);
+emit_16(2015);
+emit_16(1950);
+emit_16(2015);
+emit_16(1951);
+emit_16(2016);
+emit_16(1952);
+emit_16(2016);
+emit_16(1951);
+emit_16(2016);
+emit_16(1952);
+emit_16(2017);
+emit_16(1953);
+emit_16(2017);
+emit_16(1952);
+emit_16(2017);
+emit_16(1953);
+emit_16(2018);
+emit_16(1954);
+emit_16(2018);
+emit_16(1953);
+emit_16(2018);
+emit_16(1954);
+emit_16(2019);
+emit_16(1955);
+emit_16(2019);
+emit_16(1954);
+emit_16(2019);
+emit_16(1955);
+emit_16(2020);
+emit_16(1956);
+emit_16(2020);
+emit_16(1955);
+emit_16(2020);
+emit_16(1956);
+emit_16(2021);
+emit_16(1957);
+emit_16(2021);
+emit_16(1956);
+emit_16(2021);
+emit_16(1957);
+emit_16(2022);
+emit_16(1958);
+emit_16(2022);
+emit_16(1957);
+emit_16(2022);
+emit_16(1958);
+emit_16(2023);
+emit_16(1959);
+emit_16(2023);
+emit_16(1958);
+emit_16(2023);
+emit_16(1959);
+emit_16(2024);
+emit_16(1960);
+emit_16(2024);
+emit_16(1959);
+emit_16(2024);
+emit_16(1960);
+emit_16(2025);
+emit_16(1961);
+emit_16(2025);
+emit_16(1960);
+emit_16(2025);
+emit_16(1961);
+emit_16(2026);
+emit_16(1962);
+emit_16(2026);
+emit_16(1961);
+emit_16(2026);
+emit_16(1962);
+emit_16(2027);
+emit_16(1963);
+emit_16(2027);
+emit_16(1962);
+emit_16(2027);
+emit_16(1963);
+emit_16(2028);
+emit_16(1964);
+emit_16(2028);
+emit_16(1963);
+emit_16(2028);
+emit_16(1964);
+emit_16(2029);
+emit_16(1965);
+emit_16(2029);
+emit_16(1964);
+emit_16(2029);
+emit_16(1965);
+emit_16(2030);
+emit_16(1966);
+emit_16(2030);
+emit_16(1965);
+emit_16(2030);
+emit_16(1966);
+emit_16(2031);
+emit_16(1967);
+emit_16(2031);
+emit_16(1966);
+emit_16(2031);
+emit_16(1967);
+emit_16(2032);
+emit_16(1968);
+emit_16(2032);
+emit_16(1967);
+emit_16(2032);
+emit_16(1968);
+emit_16(2033);
+emit_16(1969);
+emit_16(2033);
+emit_16(1968);
+emit_16(2033);
+emit_16(1969);
+emit_16(2034);
+emit_16(1970);
+emit_16(2034);
+emit_16(1969);
+emit_16(2034);
+emit_16(1970);
+emit_16(2035);
+emit_16(1971);
+emit_16(2035);
+emit_16(1970);
+emit_16(2035);
+emit_16(1971);
+emit_16(2036);
+emit_16(1972);
+emit_16(2036);
+emit_16(1971);
+emit_16(2036);
+emit_16(1972);
+emit_16(2037);
+emit_16(1973);
+emit_16(2037);
+emit_16(1972);
+emit_16(2037);
+emit_16(1973);
+emit_16(2038);
+emit_16(1974);
+emit_16(2038);
+emit_16(1973);
+emit_16(2038);
+emit_16(1974);
+emit_16(2039);
+emit_16(1975);
+emit_16(2039);
+emit_16(1974);
+emit_16(2039);
+emit_16(1975);
+emit_16(2040);
+emit_16(1976);
+emit_16(2040);
+emit_16(1975);
+emit_16(2040);
+emit_16(1976);
+emit_16(2041);
+emit_16(1977);
+emit_16(2041);
+emit_16(1976);
+emit_16(2041);
+emit_16(1977);
+emit_16(2042);
+emit_16(1978);
+emit_16(2042);
+emit_16(1977);
+emit_16(2042);
+emit_16(1978);
+emit_16(2043);
+emit_16(1979);
+emit_16(2043);
+emit_16(1978);
+emit_16(2043);
+emit_16(1979);
+emit_16(2044);
+emit_16(1980);
+emit_16(2044);
+emit_16(1979);
+emit_16(2044);
+emit_16(1980);
+emit_16(2045);
+emit_16(1981);
+emit_16(2045);
+emit_16(1980);
+emit_16(2045);
+emit_16(1981);
+emit_16(2046);
+emit_16(1982);
+emit_16(2046);
+emit_16(1981);
+emit_16(2046);
+emit_16(1982);
+emit_16(2047);
+emit_16(1983);
+emit_16(2047);
+emit_16(1982);
+emit_16(2048);
+emit_16(1984);
+emit_16(2049);
+emit_16(1985);
+emit_16(2049);
+emit_16(1984);
+emit_16(2049);
+emit_16(1985);
+emit_16(2050);
+emit_16(1986);
+emit_16(2050);
+emit_16(1985);
+emit_16(2050);
+emit_16(1986);
+emit_16(2051);
+emit_16(1987);
+emit_16(2051);
+emit_16(1986);
+emit_16(2051);
+emit_16(1987);
+emit_16(2052);
+emit_16(1988);
+emit_16(2052);
+emit_16(1987);
+emit_16(2052);
+emit_16(1988);
+emit_16(2053);
+emit_16(1989);
+emit_16(2053);
+emit_16(1988);
+emit_16(2053);
+emit_16(1989);
+emit_16(2054);
+emit_16(1990);
+emit_16(2054);
+emit_16(1989);
+emit_16(2054);
+emit_16(1990);
+emit_16(2055);
+emit_16(1991);
+emit_16(2055);
+emit_16(1990);
+emit_16(2055);
+emit_16(1991);
+emit_16(2056);
+emit_16(1992);
+emit_16(2056);
+emit_16(1991);
+emit_16(2056);
+emit_16(1992);
+emit_16(2057);
+emit_16(1993);
+emit_16(2057);
+emit_16(1992);
+emit_16(2057);
+emit_16(1993);
+emit_16(2058);
+emit_16(1994);
+emit_16(2058);
+emit_16(1993);
+emit_16(2058);
+emit_16(1994);
+emit_16(2059);
+emit_16(1995);
+emit_16(2059);
+emit_16(1994);
+emit_16(2059);
+emit_16(1995);
+emit_16(2060);
+emit_16(1996);
+emit_16(2060);
+emit_16(1995);
+emit_16(2060);
+emit_16(1996);
+emit_16(2061);
+emit_16(1997);
+emit_16(2061);
+emit_16(1996);
+emit_16(2061);
+emit_16(1997);
+emit_16(2062);
+emit_16(1998);
+emit_16(2062);
+emit_16(1997);
+emit_16(2062);
+emit_16(1998);
+emit_16(2063);
+emit_16(1999);
+emit_16(2063);
+emit_16(1998);
+emit_16(2063);
+emit_16(1999);
+emit_16(2064);
+emit_16(2000);
+emit_16(2064);
+emit_16(1999);
+emit_16(2064);
+emit_16(2000);
+emit_16(2065);
+emit_16(2001);
+emit_16(2065);
+emit_16(2000);
+emit_16(2065);
+emit_16(2001);
+emit_16(2066);
+emit_16(2002);
+emit_16(2066);
+emit_16(2001);
+emit_16(2066);
+emit_16(2002);
+emit_16(2067);
+emit_16(2003);
+emit_16(2067);
+emit_16(2002);
+emit_16(2067);
+emit_16(2003);
+emit_16(2068);
+emit_16(2004);
+emit_16(2068);
+emit_16(2003);
+emit_16(2068);
+emit_16(2004);
+emit_16(2069);
+emit_16(2005);
+emit_16(2069);
+emit_16(2004);
+emit_16(2069);
+emit_16(2005);
+emit_16(2070);
+emit_16(2006);
+emit_16(2070);
+emit_16(2005);
+emit_16(2070);
+emit_16(2006);
+emit_16(2071);
+emit_16(2007);
+emit_16(2071);
+emit_16(2006);
+emit_16(2071);
+emit_16(2007);
+emit_16(2072);
+emit_16(2008);
+emit_16(2072);
+emit_16(2007);
+emit_16(2072);
+emit_16(2008);
+emit_16(2073);
+emit_16(2009);
+emit_16(2073);
+emit_16(2008);
+emit_16(2073);
+emit_16(2009);
+emit_16(2074);
+emit_16(2010);
+emit_16(2074);
+emit_16(2009);
+emit_16(2074);
+emit_16(2010);
+emit_16(2075);
+emit_16(2011);
+emit_16(2075);
+emit_16(2010);
+emit_16(2075);
+emit_16(2011);
+emit_16(2076);
+emit_16(2012);
+emit_16(2076);
+emit_16(2011);
+emit_16(2076);
+emit_16(2012);
+emit_16(2077);
+emit_16(2013);
+emit_16(2077);
+emit_16(2012);
+emit_16(2077);
+emit_16(2013);
+emit_16(2078);
+emit_16(2014);
+emit_16(2078);
+emit_16(2013);
+emit_16(2078);
+emit_16(2014);
+emit_16(2079);
+emit_16(2015);
+emit_16(2079);
+emit_16(2014);
+emit_16(2079);
+emit_16(2015);
+emit_16(2080);
+emit_16(2016);
+emit_16(2080);
+emit_16(2015);
+emit_16(2080);
+emit_16(2016);
+emit_16(2081);
+emit_16(2017);
+emit_16(2081);
+emit_16(2016);
+emit_16(2081);
+emit_16(2017);
+emit_16(2082);
+emit_16(2018);
+emit_16(2082);
+emit_16(2017);
+emit_16(2082);
+emit_16(2018);
+emit_16(2083);
+emit_16(2019);
+emit_16(2083);
+emit_16(2018);
+emit_16(2083);
+emit_16(2019);
+emit_16(2084);
+emit_16(2020);
+emit_16(2084);
+emit_16(2019);
+emit_16(2084);
+emit_16(2020);
+emit_16(2085);
+emit_16(2021);
+emit_16(2085);
+emit_16(2020);
+emit_16(2085);
+emit_16(2021);
+emit_16(2086);
+emit_16(2022);
+emit_16(2086);
+emit_16(2021);
+emit_16(2086);
+emit_16(2022);
+emit_16(2087);
+emit_16(2023);
+emit_16(2087);
+emit_16(2022);
+emit_16(2087);
+emit_16(2023);
+emit_16(2088);
+emit_16(2024);
+emit_16(2088);
+emit_16(2023);
+emit_16(2088);
+emit_16(2024);
+emit_16(2089);
+emit_16(2025);
+emit_16(2089);
+emit_16(2024);
+emit_16(2089);
+emit_16(2025);
+emit_16(2090);
+emit_16(2026);
+emit_16(2090);
+emit_16(2025);
+emit_16(2090);
+emit_16(2026);
+emit_16(2091);
+emit_16(2027);
+emit_16(2091);
+emit_16(2026);
+emit_16(2091);
+emit_16(2027);
+emit_16(2092);
+emit_16(2028);
+emit_16(2092);
+emit_16(2027);
+emit_16(2092);
+emit_16(2028);
+emit_16(2093);
+emit_16(2029);
+emit_16(2093);
+emit_16(2028);
+emit_16(2093);
+emit_16(2029);
+emit_16(2094);
+emit_16(2030);
+emit_16(2094);
+emit_16(2029);
+emit_16(2094);
+emit_16(2030);
+emit_16(2095);
+emit_16(2031);
+emit_16(2095);
+emit_16(2030);
+emit_16(2095);
+emit_16(2031);
+emit_16(2096);
+emit_16(2032);
+emit_16(2096);
+emit_16(2031);
+emit_16(2096);
+emit_16(2032);
+emit_16(2097);
+emit_16(2033);
+emit_16(2097);
+emit_16(2032);
+emit_16(2097);
+emit_16(2033);
+emit_16(2098);
+emit_16(2034);
+emit_16(2098);
+emit_16(2033);
+emit_16(2098);
+emit_16(2034);
+emit_16(2099);
+emit_16(2035);
+emit_16(2099);
+emit_16(2034);
+emit_16(2099);
+emit_16(2035);
+emit_16(2100);
+emit_16(2036);
+emit_16(2100);
+emit_16(2035);
+emit_16(2100);
+emit_16(2036);
+emit_16(2101);
+emit_16(2037);
+emit_16(2101);
+emit_16(2036);
+emit_16(2101);
+emit_16(2037);
+emit_16(2102);
+emit_16(2038);
+emit_16(2102);
+emit_16(2037);
+emit_16(2102);
+emit_16(2038);
+emit_16(2103);
+emit_16(2039);
+emit_16(2103);
+emit_16(2038);
+emit_16(2103);
+emit_16(2039);
+emit_16(2104);
+emit_16(2040);
+emit_16(2104);
+emit_16(2039);
+emit_16(2104);
+emit_16(2040);
+emit_16(2105);
+emit_16(2041);
+emit_16(2105);
+emit_16(2040);
+emit_16(2105);
+emit_16(2041);
+emit_16(2106);
+emit_16(2042);
+emit_16(2106);
+emit_16(2041);
+emit_16(2106);
+emit_16(2042);
+emit_16(2107);
+emit_16(2043);
+emit_16(2107);
+emit_16(2042);
+emit_16(2107);
+emit_16(2043);
+emit_16(2108);
+emit_16(2044);
+emit_16(2108);
+emit_16(2043);
+emit_16(2108);
+emit_16(2044);
+emit_16(2109);
+emit_16(2045);
+emit_16(2109);
+emit_16(2044);
+emit_16(2109);
+emit_16(2045);
+emit_16(2110);
+emit_16(2046);
+emit_16(2110);
+emit_16(2045);
+emit_16(2110);
+emit_16(2046);
+emit_16(2111);
+emit_16(2047);
+emit_16(2111);
+emit_16(2046);
+emit_start(Landscape05Idx)
+emit_16(0);
+emit_16(1);
+emit_16(2);
+emit_16(3);
+emit_16(2);
+emit_16(1);
+emit_16(2);
+emit_16(3);
+emit_16(4);
+emit_16(5);
+emit_16(4);
+emit_16(3);
+emit_16(4);
+emit_16(5);
+emit_16(6);
+emit_16(7);
+emit_16(6);
+emit_16(5);
+emit_16(6);
+emit_16(7);
+emit_16(8);
+emit_16(9);
+emit_16(8);
+emit_16(7);
+emit_16(8);
+emit_16(9);
+emit_16(10);
+emit_16(11);
+emit_16(10);
+emit_16(9);
+emit_16(10);
+emit_16(11);
+emit_16(12);
+emit_16(13);
+emit_16(12);
+emit_16(11);
+emit_16(12);
+emit_16(13);
+emit_16(14);
+emit_16(15);
+emit_16(14);
+emit_16(13);
+emit_16(14);
+emit_16(15);
+emit_16(16);
+emit_16(17);
+emit_16(16);
+emit_16(15);
+emit_16(16);
+emit_16(17);
+emit_16(18);
+emit_16(19);
+emit_16(18);
+emit_16(17);
+emit_16(18);
+emit_16(19);
+emit_16(20);
+emit_16(21);
+emit_16(20);
+emit_16(19);
+emit_16(20);
+emit_16(21);
+emit_16(22);
+emit_16(23);
+emit_16(22);
+emit_16(21);
+emit_16(22);
+emit_16(23);
+emit_16(24);
+emit_16(25);
+emit_16(24);
+emit_16(23);
+emit_16(24);
+emit_16(25);
+emit_16(26);
+emit_16(27);
+emit_16(26);
+emit_16(25);
+emit_16(26);
+emit_16(27);
+emit_16(28);
+emit_16(29);
+emit_16(28);
+emit_16(27);
+emit_16(28);
+emit_16(29);
+emit_16(30);
+emit_16(31);
+emit_16(30);
+emit_16(29);
+emit_16(30);
+emit_16(31);
+emit_16(32);
+emit_16(33);
+emit_16(32);
+emit_16(31);
+emit_16(32);
+emit_16(33);
+emit_16(34);
+emit_16(35);
+emit_16(34);
+emit_16(33);
+emit_16(34);
+emit_16(35);
+emit_16(36);
+emit_16(37);
+emit_16(36);
+emit_16(35);
+emit_16(36);
+emit_16(37);
+emit_16(38);
+emit_16(39);
+emit_16(38);
+emit_16(37);
+emit_16(38);
+emit_16(39);
+emit_16(40);
+emit_16(41);
+emit_16(40);
+emit_16(39);
+emit_16(40);
+emit_16(41);
+emit_16(42);
+emit_16(43);
+emit_16(42);
+emit_16(41);
+emit_16(42);
+emit_16(43);
+emit_16(44);
+emit_16(45);
+emit_16(44);
+emit_16(43);
+emit_16(44);
+emit_16(45);
+emit_16(46);
+emit_16(47);
+emit_16(46);
+emit_16(45);
+emit_16(46);
+emit_16(47);
+emit_16(48);
+emit_16(49);
+emit_16(48);
+emit_16(47);
+emit_16(48);
+emit_16(49);
+emit_16(50);
+emit_16(51);
+emit_16(50);
+emit_16(49);
+emit_16(50);
+emit_16(51);
+emit_16(52);
+emit_16(53);
+emit_16(52);
+emit_16(51);
+emit_16(52);
+emit_16(53);
+emit_16(54);
+emit_16(55);
+emit_16(54);
+emit_16(53);
+emit_16(54);
+emit_16(55);
+emit_16(56);
+emit_16(57);
+emit_16(56);
+emit_16(55);
+emit_16(56);
+emit_16(57);
+emit_16(58);
+emit_16(59);
+emit_16(58);
+emit_16(57);
+emit_16(58);
+emit_16(59);
+emit_16(60);
+emit_16(61);
+emit_16(60);
+emit_16(59);
+emit_16(60);
+emit_16(61);
+emit_16(62);
+emit_16(63);
+emit_16(62);
+emit_16(61);
+emit_16(62);
+emit_16(63);
+emit_16(64);
+emit_16(65);
+emit_16(64);
+emit_16(63);
+emit_16(64);
+emit_16(65);
+emit_16(66);
+emit_16(67);
+emit_16(66);
+emit_16(65);
+emit_16(66);
+emit_16(67);
+emit_16(68);
+emit_16(69);
+emit_16(68);
+emit_16(67);
+emit_16(68);
+emit_16(69);
+emit_16(70);
+emit_16(71);
+emit_16(70);
+emit_16(69);
+emit_16(70);
+emit_16(71);
+emit_16(72);
+emit_16(73);
+emit_16(72);
+emit_16(71);
+emit_16(72);
+emit_16(73);
+emit_16(74);
+emit_16(75);
+emit_16(74);
+emit_16(73);
+emit_16(74);
+emit_16(75);
+emit_16(76);
+emit_16(77);
+emit_16(76);
+emit_16(75);
+emit_16(76);
+emit_16(77);
+emit_16(78);
+emit_16(79);
+emit_16(78);
+emit_16(77);
+emit_16(78);
+emit_16(79);
+emit_16(80);
+emit_16(81);
+emit_16(80);
+emit_16(79);
+emit_16(80);
+emit_16(81);
+emit_16(82);
+emit_16(83);
+emit_16(82);
+emit_16(81);
+emit_16(82);
+emit_16(83);
+emit_16(84);
+emit_16(85);
+emit_16(84);
+emit_16(83);
+emit_16(84);
+emit_16(85);
+emit_16(86);
+emit_16(87);
+emit_16(86);
+emit_16(85);
+emit_16(86);
+emit_16(87);
+emit_16(88);
+emit_16(89);
+emit_16(88);
+emit_16(87);
+emit_16(88);
+emit_16(89);
+emit_16(90);
+emit_16(91);
+emit_16(90);
+emit_16(89);
+emit_16(90);
+emit_16(91);
+emit_16(92);
+emit_16(93);
+emit_16(92);
+emit_16(91);
+emit_16(92);
+emit_16(93);
+emit_16(94);
+emit_16(95);
+emit_16(94);
+emit_16(93);
+emit_16(94);
+emit_16(95);
+emit_16(96);
+emit_16(97);
+emit_16(96);
+emit_16(95);
+emit_16(96);
+emit_16(97);
+emit_16(98);
+emit_16(99);
+emit_16(98);
+emit_16(97);
+emit_16(98);
+emit_16(99);
+emit_16(100);
+emit_16(101);
+emit_16(100);
+emit_16(99);
+emit_16(100);
+emit_16(101);
+emit_16(102);
+emit_16(103);
+emit_16(102);
+emit_16(101);
+emit_16(102);
+emit_16(103);
+emit_16(104);
+emit_16(105);
+emit_16(104);
+emit_16(103);
+emit_16(104);
+emit_16(105);
+emit_16(106);
+emit_16(107);
+emit_16(106);
+emit_16(105);
+emit_16(106);
+emit_16(107);
+emit_16(108);
+emit_16(109);
+emit_16(108);
+emit_16(107);
+emit_16(108);
+emit_16(109);
+emit_16(110);
+emit_16(111);
+emit_16(110);
+emit_16(109);
+emit_16(110);
+emit_16(111);
+emit_16(112);
+emit_16(113);
+emit_16(112);
+emit_16(111);
+emit_16(112);
+emit_16(113);
+emit_16(114);
+emit_16(115);
+emit_16(114);
+emit_16(113);
+emit_16(114);
+emit_16(115);
+emit_16(116);
+emit_16(117);
+emit_16(116);
+emit_16(115);
+emit_16(116);
+emit_16(117);
+emit_16(118);
+emit_16(119);
+emit_16(118);
+emit_16(117);
+emit_16(118);
+emit_16(119);
+emit_16(120);
+emit_16(121);
+emit_16(120);
+emit_16(119);
+emit_16(120);
+emit_16(121);
+emit_16(122);
+emit_16(123);
+emit_16(122);
+emit_16(121);
+emit_16(122);
+emit_16(123);
+emit_16(124);
+emit_16(125);
+emit_16(124);
+emit_16(123);
+emit_16(124);
+emit_16(125);
+emit_16(126);
+emit_16(127);
+emit_16(126);
+emit_16(125);
+emit_16(126);
+emit_16(127);
+emit_16(128);
+emit_16(129);
+emit_16(128);
+emit_16(127);
+emit_16(128);
+emit_16(129);
+emit_16(130);
+emit_16(131);
+emit_16(130);
+emit_16(129);
+emit_16(132);
+emit_16(0);
+emit_16(133);
+emit_16(2);
+emit_16(133);
+emit_16(0);
+emit_16(133);
+emit_16(2);
+emit_16(134);
+emit_16(4);
+emit_16(134);
+emit_16(2);
+emit_16(134);
+emit_16(4);
+emit_16(135);
+emit_16(6);
+emit_16(135);
+emit_16(4);
+emit_16(135);
+emit_16(6);
+emit_16(136);
+emit_16(8);
+emit_16(136);
+emit_16(6);
+emit_16(136);
+emit_16(8);
+emit_16(137);
+emit_16(10);
+emit_16(137);
+emit_16(8);
+emit_16(137);
+emit_16(10);
+emit_16(138);
+emit_16(12);
+emit_16(138);
+emit_16(10);
+emit_16(138);
+emit_16(12);
+emit_16(139);
+emit_16(14);
+emit_16(139);
+emit_16(12);
+emit_16(139);
+emit_16(14);
+emit_16(140);
+emit_16(16);
+emit_16(140);
+emit_16(14);
+emit_16(140);
+emit_16(16);
+emit_16(141);
+emit_16(18);
+emit_16(141);
+emit_16(16);
+emit_16(141);
+emit_16(18);
+emit_16(142);
+emit_16(20);
+emit_16(142);
+emit_16(18);
+emit_16(142);
+emit_16(20);
+emit_16(143);
+emit_16(22);
+emit_16(143);
+emit_16(20);
+emit_16(143);
+emit_16(22);
+emit_16(144);
+emit_16(24);
+emit_16(144);
+emit_16(22);
+emit_16(144);
+emit_16(24);
+emit_16(145);
+emit_16(26);
+emit_16(145);
+emit_16(24);
+emit_16(145);
+emit_16(26);
+emit_16(146);
+emit_16(28);
+emit_16(146);
+emit_16(26);
+emit_16(146);
+emit_16(28);
+emit_16(147);
+emit_16(30);
+emit_16(147);
+emit_16(28);
+emit_16(147);
+emit_16(30);
+emit_16(148);
+emit_16(32);
+emit_16(148);
+emit_16(30);
+emit_16(148);
+emit_16(32);
+emit_16(149);
+emit_16(34);
+emit_16(149);
+emit_16(32);
+emit_16(149);
+emit_16(34);
+emit_16(150);
+emit_16(36);
+emit_16(150);
+emit_16(34);
+emit_16(150);
+emit_16(36);
+emit_16(151);
+emit_16(38);
+emit_16(151);
+emit_16(36);
+emit_16(151);
+emit_16(38);
+emit_16(152);
+emit_16(40);
+emit_16(152);
+emit_16(38);
+emit_16(152);
+emit_16(40);
+emit_16(153);
+emit_16(42);
+emit_16(153);
+emit_16(40);
+emit_16(153);
+emit_16(42);
+emit_16(154);
+emit_16(44);
+emit_16(154);
+emit_16(42);
+emit_16(154);
+emit_16(44);
+emit_16(155);
+emit_16(46);
+emit_16(155);
+emit_16(44);
+emit_16(155);
+emit_16(46);
+emit_16(156);
+emit_16(48);
+emit_16(156);
+emit_16(46);
+emit_16(156);
+emit_16(48);
+emit_16(157);
+emit_16(50);
+emit_16(157);
+emit_16(48);
+emit_16(157);
+emit_16(50);
+emit_16(158);
+emit_16(52);
+emit_16(158);
+emit_16(50);
+emit_16(158);
+emit_16(52);
+emit_16(159);
+emit_16(54);
+emit_16(159);
+emit_16(52);
+emit_16(159);
+emit_16(54);
+emit_16(160);
+emit_16(56);
+emit_16(160);
+emit_16(54);
+emit_16(160);
+emit_16(56);
+emit_16(161);
+emit_16(58);
+emit_16(161);
+emit_16(56);
+emit_16(161);
+emit_16(58);
+emit_16(162);
+emit_16(60);
+emit_16(162);
+emit_16(58);
+emit_16(162);
+emit_16(60);
+emit_16(163);
+emit_16(62);
+emit_16(163);
+emit_16(60);
+emit_16(163);
+emit_16(62);
+emit_16(164);
+emit_16(64);
+emit_16(164);
+emit_16(62);
+emit_16(164);
+emit_16(64);
+emit_16(165);
+emit_16(66);
+emit_16(165);
+emit_16(64);
+emit_16(165);
+emit_16(66);
+emit_16(166);
+emit_16(68);
+emit_16(166);
+emit_16(66);
+emit_16(166);
+emit_16(68);
+emit_16(167);
+emit_16(70);
+emit_16(167);
+emit_16(68);
+emit_16(167);
+emit_16(70);
+emit_16(168);
+emit_16(72);
+emit_16(168);
+emit_16(70);
+emit_16(168);
+emit_16(72);
+emit_16(169);
+emit_16(74);
+emit_16(169);
+emit_16(72);
+emit_16(169);
+emit_16(74);
+emit_16(170);
+emit_16(76);
+emit_16(170);
+emit_16(74);
+emit_16(170);
+emit_16(76);
+emit_16(171);
+emit_16(78);
+emit_16(171);
+emit_16(76);
+emit_16(171);
+emit_16(78);
+emit_16(172);
+emit_16(80);
+emit_16(172);
+emit_16(78);
+emit_16(172);
+emit_16(80);
+emit_16(173);
+emit_16(82);
+emit_16(173);
+emit_16(80);
+emit_16(173);
+emit_16(82);
+emit_16(174);
+emit_16(84);
+emit_16(174);
+emit_16(82);
+emit_16(174);
+emit_16(84);
+emit_16(175);
+emit_16(86);
+emit_16(175);
+emit_16(84);
+emit_16(175);
+emit_16(86);
+emit_16(176);
+emit_16(88);
+emit_16(176);
+emit_16(86);
+emit_16(176);
+emit_16(88);
+emit_16(177);
+emit_16(90);
+emit_16(177);
+emit_16(88);
+emit_16(177);
+emit_16(90);
+emit_16(178);
+emit_16(92);
+emit_16(178);
+emit_16(90);
+emit_16(178);
+emit_16(92);
+emit_16(179);
+emit_16(94);
+emit_16(179);
+emit_16(92);
+emit_16(179);
+emit_16(94);
+emit_16(180);
+emit_16(96);
+emit_16(180);
+emit_16(94);
+emit_16(180);
+emit_16(96);
+emit_16(181);
+emit_16(98);
+emit_16(181);
+emit_16(96);
+emit_16(181);
+emit_16(98);
+emit_16(182);
+emit_16(100);
+emit_16(182);
+emit_16(98);
+emit_16(182);
+emit_16(100);
+emit_16(183);
+emit_16(102);
+emit_16(183);
+emit_16(100);
+emit_16(183);
+emit_16(102);
+emit_16(184);
+emit_16(104);
+emit_16(184);
+emit_16(102);
+emit_16(184);
+emit_16(104);
+emit_16(185);
+emit_16(106);
+emit_16(185);
+emit_16(104);
+emit_16(185);
+emit_16(106);
+emit_16(186);
+emit_16(108);
+emit_16(186);
+emit_16(106);
+emit_16(186);
+emit_16(108);
+emit_16(187);
+emit_16(110);
+emit_16(187);
+emit_16(108);
+emit_16(187);
+emit_16(110);
+emit_16(188);
+emit_16(112);
+emit_16(188);
+emit_16(110);
+emit_16(188);
+emit_16(112);
+emit_16(189);
+emit_16(114);
+emit_16(189);
+emit_16(112);
+emit_16(189);
+emit_16(114);
+emit_16(190);
+emit_16(116);
+emit_16(190);
+emit_16(114);
+emit_16(190);
+emit_16(116);
+emit_16(191);
+emit_16(118);
+emit_16(191);
+emit_16(116);
+emit_16(191);
+emit_16(118);
+emit_16(192);
+emit_16(120);
+emit_16(192);
+emit_16(118);
+emit_16(192);
+emit_16(120);
+emit_16(193);
+emit_16(122);
+emit_16(193);
+emit_16(120);
+emit_16(193);
+emit_16(122);
+emit_16(194);
+emit_16(124);
+emit_16(194);
+emit_16(122);
+emit_16(194);
+emit_16(124);
+emit_16(195);
+emit_16(126);
+emit_16(195);
+emit_16(124);
+emit_16(195);
+emit_16(126);
+emit_16(196);
+emit_16(128);
+emit_16(196);
+emit_16(126);
+emit_16(196);
+emit_16(128);
+emit_16(197);
+emit_16(130);
+emit_16(197);
+emit_16(128);
+emit_16(198);
+emit_16(132);
+emit_16(199);
+emit_16(133);
+emit_16(199);
+emit_16(132);
+emit_16(199);
+emit_16(133);
+emit_16(200);
+emit_16(134);
+emit_16(200);
+emit_16(133);
+emit_16(200);
+emit_16(134);
+emit_16(201);
+emit_16(135);
+emit_16(201);
+emit_16(134);
+emit_16(201);
+emit_16(135);
+emit_16(202);
+emit_16(136);
+emit_16(202);
+emit_16(135);
+emit_16(202);
+emit_16(136);
+emit_16(203);
+emit_16(137);
+emit_16(203);
+emit_16(136);
+emit_16(203);
+emit_16(137);
+emit_16(204);
+emit_16(138);
+emit_16(204);
+emit_16(137);
+emit_16(204);
+emit_16(138);
+emit_16(205);
+emit_16(139);
+emit_16(205);
+emit_16(138);
+emit_16(205);
+emit_16(139);
+emit_16(206);
+emit_16(140);
+emit_16(206);
+emit_16(139);
+emit_16(206);
+emit_16(140);
+emit_16(207);
+emit_16(141);
+emit_16(207);
+emit_16(140);
+emit_16(207);
+emit_16(141);
+emit_16(208);
+emit_16(142);
+emit_16(208);
+emit_16(141);
+emit_16(208);
+emit_16(142);
+emit_16(209);
+emit_16(143);
+emit_16(209);
+emit_16(142);
+emit_16(209);
+emit_16(143);
+emit_16(210);
+emit_16(144);
+emit_16(210);
+emit_16(143);
+emit_16(210);
+emit_16(144);
+emit_16(211);
+emit_16(145);
+emit_16(211);
+emit_16(144);
+emit_16(211);
+emit_16(145);
+emit_16(212);
+emit_16(146);
+emit_16(212);
+emit_16(145);
+emit_16(212);
+emit_16(146);
+emit_16(213);
+emit_16(147);
+emit_16(213);
+emit_16(146);
+emit_16(213);
+emit_16(147);
+emit_16(214);
+emit_16(148);
+emit_16(214);
+emit_16(147);
+emit_16(214);
+emit_16(148);
+emit_16(215);
+emit_16(149);
+emit_16(215);
+emit_16(148);
+emit_16(215);
+emit_16(149);
+emit_16(216);
+emit_16(150);
+emit_16(216);
+emit_16(149);
+emit_16(216);
+emit_16(150);
+emit_16(217);
+emit_16(151);
+emit_16(217);
+emit_16(150);
+emit_16(217);
+emit_16(151);
+emit_16(218);
+emit_16(152);
+emit_16(218);
+emit_16(151);
+emit_16(218);
+emit_16(152);
+emit_16(219);
+emit_16(153);
+emit_16(219);
+emit_16(152);
+emit_16(219);
+emit_16(153);
+emit_16(220);
+emit_16(154);
+emit_16(220);
+emit_16(153);
+emit_16(220);
+emit_16(154);
+emit_16(221);
+emit_16(155);
+emit_16(221);
+emit_16(154);
+emit_16(221);
+emit_16(155);
+emit_16(222);
+emit_16(156);
+emit_16(222);
+emit_16(155);
+emit_16(222);
+emit_16(156);
+emit_16(223);
+emit_16(157);
+emit_16(223);
+emit_16(156);
+emit_16(223);
+emit_16(157);
+emit_16(224);
+emit_16(158);
+emit_16(224);
+emit_16(157);
+emit_16(224);
+emit_16(158);
+emit_16(225);
+emit_16(159);
+emit_16(225);
+emit_16(158);
+emit_16(225);
+emit_16(159);
+emit_16(226);
+emit_16(160);
+emit_16(226);
+emit_16(159);
+emit_16(226);
+emit_16(160);
+emit_16(227);
+emit_16(161);
+emit_16(227);
+emit_16(160);
+emit_16(227);
+emit_16(161);
+emit_16(228);
+emit_16(162);
+emit_16(228);
+emit_16(161);
+emit_16(228);
+emit_16(162);
+emit_16(229);
+emit_16(163);
+emit_16(229);
+emit_16(162);
+emit_16(229);
+emit_16(163);
+emit_16(230);
+emit_16(164);
+emit_16(230);
+emit_16(163);
+emit_16(230);
+emit_16(164);
+emit_16(231);
+emit_16(165);
+emit_16(231);
+emit_16(164);
+emit_16(231);
+emit_16(165);
+emit_16(232);
+emit_16(166);
+emit_16(232);
+emit_16(165);
+emit_16(232);
+emit_16(166);
+emit_16(233);
+emit_16(167);
+emit_16(233);
+emit_16(166);
+emit_16(233);
+emit_16(167);
+emit_16(234);
+emit_16(168);
+emit_16(234);
+emit_16(167);
+emit_16(234);
+emit_16(168);
+emit_16(235);
+emit_16(169);
+emit_16(235);
+emit_16(168);
+emit_16(235);
+emit_16(169);
+emit_16(236);
+emit_16(170);
+emit_16(236);
+emit_16(169);
+emit_16(236);
+emit_16(170);
+emit_16(237);
+emit_16(171);
+emit_16(237);
+emit_16(170);
+emit_16(237);
+emit_16(171);
+emit_16(238);
+emit_16(172);
+emit_16(238);
+emit_16(171);
+emit_16(238);
+emit_16(172);
+emit_16(239);
+emit_16(173);
+emit_16(239);
+emit_16(172);
+emit_16(239);
+emit_16(173);
+emit_16(240);
+emit_16(174);
+emit_16(240);
+emit_16(173);
+emit_16(240);
+emit_16(174);
+emit_16(241);
+emit_16(175);
+emit_16(241);
+emit_16(174);
+emit_16(241);
+emit_16(175);
+emit_16(242);
+emit_16(176);
+emit_16(242);
+emit_16(175);
+emit_16(242);
+emit_16(176);
+emit_16(243);
+emit_16(177);
+emit_16(243);
+emit_16(176);
+emit_16(243);
+emit_16(177);
+emit_16(244);
+emit_16(178);
+emit_16(244);
+emit_16(177);
+emit_16(244);
+emit_16(178);
+emit_16(245);
+emit_16(179);
+emit_16(245);
+emit_16(178);
+emit_16(245);
+emit_16(179);
+emit_16(246);
+emit_16(180);
+emit_16(246);
+emit_16(179);
+emit_16(246);
+emit_16(180);
+emit_16(247);
+emit_16(181);
+emit_16(247);
+emit_16(180);
+emit_16(247);
+emit_16(181);
+emit_16(248);
+emit_16(182);
+emit_16(248);
+emit_16(181);
+emit_16(248);
+emit_16(182);
+emit_16(249);
+emit_16(183);
+emit_16(249);
+emit_16(182);
+emit_16(249);
+emit_16(183);
+emit_16(250);
+emit_16(184);
+emit_16(250);
+emit_16(183);
+emit_16(250);
+emit_16(184);
+emit_16(251);
+emit_16(185);
+emit_16(251);
+emit_16(184);
+emit_16(251);
+emit_16(185);
+emit_16(252);
+emit_16(186);
+emit_16(252);
+emit_16(185);
+emit_16(252);
+emit_16(186);
+emit_16(253);
+emit_16(187);
+emit_16(253);
+emit_16(186);
+emit_16(253);
+emit_16(187);
+emit_16(254);
+emit_16(188);
+emit_16(254);
+emit_16(187);
+emit_16(254);
+emit_16(188);
+emit_16(255);
+emit_16(189);
+emit_16(255);
+emit_16(188);
+emit_16(255);
+emit_16(189);
+emit_16(256);
+emit_16(190);
+emit_16(256);
+emit_16(189);
+emit_16(256);
+emit_16(190);
+emit_16(257);
+emit_16(191);
+emit_16(257);
+emit_16(190);
+emit_16(257);
+emit_16(191);
+emit_16(258);
+emit_16(192);
+emit_16(258);
+emit_16(191);
+emit_16(258);
+emit_16(192);
+emit_16(259);
+emit_16(193);
+emit_16(259);
+emit_16(192);
+emit_16(259);
+emit_16(193);
+emit_16(260);
+emit_16(194);
+emit_16(260);
+emit_16(193);
+emit_16(260);
+emit_16(194);
+emit_16(261);
+emit_16(195);
+emit_16(261);
+emit_16(194);
+emit_16(261);
+emit_16(195);
+emit_16(262);
+emit_16(196);
+emit_16(262);
+emit_16(195);
+emit_16(262);
+emit_16(196);
+emit_16(263);
+emit_16(197);
+emit_16(263);
+emit_16(196);
+emit_16(264);
+emit_16(198);
+emit_16(265);
+emit_16(199);
+emit_16(265);
+emit_16(198);
+emit_16(265);
+emit_16(199);
+emit_16(266);
+emit_16(200);
+emit_16(266);
+emit_16(199);
+emit_16(266);
+emit_16(200);
+emit_16(267);
+emit_16(201);
+emit_16(267);
+emit_16(200);
+emit_16(267);
+emit_16(201);
+emit_16(268);
+emit_16(202);
+emit_16(268);
+emit_16(201);
+emit_16(268);
+emit_16(202);
+emit_16(269);
+emit_16(203);
+emit_16(269);
+emit_16(202);
+emit_16(269);
+emit_16(203);
+emit_16(270);
+emit_16(204);
+emit_16(270);
+emit_16(203);
+emit_16(270);
+emit_16(204);
+emit_16(271);
+emit_16(205);
+emit_16(271);
+emit_16(204);
+emit_16(271);
+emit_16(205);
+emit_16(272);
+emit_16(206);
+emit_16(272);
+emit_16(205);
+emit_16(272);
+emit_16(206);
+emit_16(273);
+emit_16(207);
+emit_16(273);
+emit_16(206);
+emit_16(273);
+emit_16(207);
+emit_16(274);
+emit_16(208);
+emit_16(274);
+emit_16(207);
+emit_16(274);
+emit_16(208);
+emit_16(275);
+emit_16(209);
+emit_16(275);
+emit_16(208);
+emit_16(275);
+emit_16(209);
+emit_16(276);
+emit_16(210);
+emit_16(276);
+emit_16(209);
+emit_16(276);
+emit_16(210);
+emit_16(277);
+emit_16(211);
+emit_16(277);
+emit_16(210);
+emit_16(277);
+emit_16(211);
+emit_16(278);
+emit_16(212);
+emit_16(278);
+emit_16(211);
+emit_16(278);
+emit_16(212);
+emit_16(279);
+emit_16(213);
+emit_16(279);
+emit_16(212);
+emit_16(279);
+emit_16(213);
+emit_16(280);
+emit_16(214);
+emit_16(280);
+emit_16(213);
+emit_16(280);
+emit_16(214);
+emit_16(281);
+emit_16(215);
+emit_16(281);
+emit_16(214);
+emit_16(281);
+emit_16(215);
+emit_16(282);
+emit_16(216);
+emit_16(282);
+emit_16(215);
+emit_16(282);
+emit_16(216);
+emit_16(283);
+emit_16(217);
+emit_16(283);
+emit_16(216);
+emit_16(283);
+emit_16(217);
+emit_16(284);
+emit_16(218);
+emit_16(284);
+emit_16(217);
+emit_16(284);
+emit_16(218);
+emit_16(285);
+emit_16(219);
+emit_16(285);
+emit_16(218);
+emit_16(285);
+emit_16(219);
+emit_16(286);
+emit_16(220);
+emit_16(286);
+emit_16(219);
+emit_16(286);
+emit_16(220);
+emit_16(287);
+emit_16(221);
+emit_16(287);
+emit_16(220);
+emit_16(287);
+emit_16(221);
+emit_16(288);
+emit_16(222);
+emit_16(288);
+emit_16(221);
+emit_16(288);
+emit_16(222);
+emit_16(289);
+emit_16(223);
+emit_16(289);
+emit_16(222);
+emit_16(289);
+emit_16(223);
+emit_16(290);
+emit_16(224);
+emit_16(290);
+emit_16(223);
+emit_16(290);
+emit_16(224);
+emit_16(291);
+emit_16(225);
+emit_16(291);
+emit_16(224);
+emit_16(291);
+emit_16(225);
+emit_16(292);
+emit_16(226);
+emit_16(292);
+emit_16(225);
+emit_16(292);
+emit_16(226);
+emit_16(293);
+emit_16(227);
+emit_16(293);
+emit_16(226);
+emit_16(293);
+emit_16(227);
+emit_16(294);
+emit_16(228);
+emit_16(294);
+emit_16(227);
+emit_16(294);
+emit_16(228);
+emit_16(295);
+emit_16(229);
+emit_16(295);
+emit_16(228);
+emit_16(295);
+emit_16(229);
+emit_16(296);
+emit_16(230);
+emit_16(296);
+emit_16(229);
+emit_16(296);
+emit_16(230);
+emit_16(297);
+emit_16(231);
+emit_16(297);
+emit_16(230);
+emit_16(297);
+emit_16(231);
+emit_16(298);
+emit_16(232);
+emit_16(298);
+emit_16(231);
+emit_16(298);
+emit_16(232);
+emit_16(299);
+emit_16(233);
+emit_16(299);
+emit_16(232);
+emit_16(299);
+emit_16(233);
+emit_16(300);
+emit_16(234);
+emit_16(300);
+emit_16(233);
+emit_16(300);
+emit_16(234);
+emit_16(301);
+emit_16(235);
+emit_16(301);
+emit_16(234);
+emit_16(301);
+emit_16(235);
+emit_16(302);
+emit_16(236);
+emit_16(302);
+emit_16(235);
+emit_16(302);
+emit_16(236);
+emit_16(303);
+emit_16(237);
+emit_16(303);
+emit_16(236);
+emit_16(303);
+emit_16(237);
+emit_16(304);
+emit_16(238);
+emit_16(304);
+emit_16(237);
+emit_16(304);
+emit_16(238);
+emit_16(305);
+emit_16(239);
+emit_16(305);
+emit_16(238);
+emit_16(305);
+emit_16(239);
+emit_16(306);
+emit_16(240);
+emit_16(306);
+emit_16(239);
+emit_16(306);
+emit_16(240);
+emit_16(307);
+emit_16(241);
+emit_16(307);
+emit_16(240);
+emit_16(307);
+emit_16(241);
+emit_16(308);
+emit_16(242);
+emit_16(308);
+emit_16(241);
+emit_16(308);
+emit_16(242);
+emit_16(309);
+emit_16(243);
+emit_16(309);
+emit_16(242);
+emit_16(309);
+emit_16(243);
+emit_16(310);
+emit_16(244);
+emit_16(310);
+emit_16(243);
+emit_16(310);
+emit_16(244);
+emit_16(311);
+emit_16(245);
+emit_16(311);
+emit_16(244);
+emit_16(311);
+emit_16(245);
+emit_16(312);
+emit_16(246);
+emit_16(312);
+emit_16(245);
+emit_16(312);
+emit_16(246);
+emit_16(313);
+emit_16(247);
+emit_16(313);
+emit_16(246);
+emit_16(313);
+emit_16(247);
+emit_16(314);
+emit_16(248);
+emit_16(314);
+emit_16(247);
+emit_16(314);
+emit_16(248);
+emit_16(315);
+emit_16(249);
+emit_16(315);
+emit_16(248);
+emit_16(315);
+emit_16(249);
+emit_16(316);
+emit_16(250);
+emit_16(316);
+emit_16(249);
+emit_16(316);
+emit_16(250);
+emit_16(317);
+emit_16(251);
+emit_16(317);
+emit_16(250);
+emit_16(317);
+emit_16(251);
+emit_16(318);
+emit_16(252);
+emit_16(318);
+emit_16(251);
+emit_16(318);
+emit_16(252);
+emit_16(319);
+emit_16(253);
+emit_16(319);
+emit_16(252);
+emit_16(319);
+emit_16(253);
+emit_16(320);
+emit_16(254);
+emit_16(320);
+emit_16(253);
+emit_16(320);
+emit_16(254);
+emit_16(321);
+emit_16(255);
+emit_16(321);
+emit_16(254);
+emit_16(321);
+emit_16(255);
+emit_16(322);
+emit_16(256);
+emit_16(322);
+emit_16(255);
+emit_16(322);
+emit_16(256);
+emit_16(323);
+emit_16(257);
+emit_16(323);
+emit_16(256);
+emit_16(323);
+emit_16(257);
+emit_16(324);
+emit_16(258);
+emit_16(324);
+emit_16(257);
+emit_16(324);
+emit_16(258);
+emit_16(325);
+emit_16(259);
+emit_16(325);
+emit_16(258);
+emit_16(325);
+emit_16(259);
+emit_16(326);
+emit_16(260);
+emit_16(326);
+emit_16(259);
+emit_16(326);
+emit_16(260);
+emit_16(327);
+emit_16(261);
+emit_16(327);
+emit_16(260);
+emit_16(327);
+emit_16(261);
+emit_16(328);
+emit_16(262);
+emit_16(328);
+emit_16(261);
+emit_16(328);
+emit_16(262);
+emit_16(329);
+emit_16(263);
+emit_16(329);
+emit_16(262);
+emit_16(330);
+emit_16(264);
+emit_16(331);
+emit_16(265);
+emit_16(331);
+emit_16(264);
+emit_16(331);
+emit_16(265);
+emit_16(332);
+emit_16(266);
+emit_16(332);
+emit_16(265);
+emit_16(332);
+emit_16(266);
+emit_16(333);
+emit_16(267);
+emit_16(333);
+emit_16(266);
+emit_16(333);
+emit_16(267);
+emit_16(334);
+emit_16(268);
+emit_16(334);
+emit_16(267);
+emit_16(334);
+emit_16(268);
+emit_16(335);
+emit_16(269);
+emit_16(335);
+emit_16(268);
+emit_16(335);
+emit_16(269);
+emit_16(336);
+emit_16(270);
+emit_16(336);
+emit_16(269);
+emit_16(336);
+emit_16(270);
+emit_16(337);
+emit_16(271);
+emit_16(337);
+emit_16(270);
+emit_16(337);
+emit_16(271);
+emit_16(338);
+emit_16(272);
+emit_16(338);
+emit_16(271);
+emit_16(338);
+emit_16(272);
+emit_16(339);
+emit_16(273);
+emit_16(339);
+emit_16(272);
+emit_16(339);
+emit_16(273);
+emit_16(340);
+emit_16(274);
+emit_16(340);
+emit_16(273);
+emit_16(340);
+emit_16(274);
+emit_16(341);
+emit_16(275);
+emit_16(341);
+emit_16(274);
+emit_16(341);
+emit_16(275);
+emit_16(342);
+emit_16(276);
+emit_16(342);
+emit_16(275);
+emit_16(342);
+emit_16(276);
+emit_16(343);
+emit_16(277);
+emit_16(343);
+emit_16(276);
+emit_16(343);
+emit_16(277);
+emit_16(344);
+emit_16(278);
+emit_16(344);
+emit_16(277);
+emit_16(344);
+emit_16(278);
+emit_16(345);
+emit_16(279);
+emit_16(345);
+emit_16(278);
+emit_16(345);
+emit_16(279);
+emit_16(346);
+emit_16(280);
+emit_16(346);
+emit_16(279);
+emit_16(346);
+emit_16(280);
+emit_16(347);
+emit_16(281);
+emit_16(347);
+emit_16(280);
+emit_16(347);
+emit_16(281);
+emit_16(348);
+emit_16(282);
+emit_16(348);
+emit_16(281);
+emit_16(348);
+emit_16(282);
+emit_16(349);
+emit_16(283);
+emit_16(349);
+emit_16(282);
+emit_16(349);
+emit_16(283);
+emit_16(350);
+emit_16(284);
+emit_16(350);
+emit_16(283);
+emit_16(350);
+emit_16(284);
+emit_16(351);
+emit_16(285);
+emit_16(351);
+emit_16(284);
+emit_16(351);
+emit_16(285);
+emit_16(352);
+emit_16(286);
+emit_16(352);
+emit_16(285);
+emit_16(352);
+emit_16(286);
+emit_16(353);
+emit_16(287);
+emit_16(353);
+emit_16(286);
+emit_16(353);
+emit_16(287);
+emit_16(354);
+emit_16(288);
+emit_16(354);
+emit_16(287);
+emit_16(354);
+emit_16(288);
+emit_16(355);
+emit_16(289);
+emit_16(355);
+emit_16(288);
+emit_16(355);
+emit_16(289);
+emit_16(356);
+emit_16(290);
+emit_16(356);
+emit_16(289);
+emit_16(356);
+emit_16(290);
+emit_16(357);
+emit_16(291);
+emit_16(357);
+emit_16(290);
+emit_16(357);
+emit_16(291);
+emit_16(358);
+emit_16(292);
+emit_16(358);
+emit_16(291);
+emit_16(358);
+emit_16(292);
+emit_16(359);
+emit_16(293);
+emit_16(359);
+emit_16(292);
+emit_16(359);
+emit_16(293);
+emit_16(360);
+emit_16(294);
+emit_16(360);
+emit_16(293);
+emit_16(360);
+emit_16(294);
+emit_16(361);
+emit_16(295);
+emit_16(361);
+emit_16(294);
+emit_16(361);
+emit_16(295);
+emit_16(362);
+emit_16(296);
+emit_16(362);
+emit_16(295);
+emit_16(362);
+emit_16(296);
+emit_16(363);
+emit_16(297);
+emit_16(363);
+emit_16(296);
+emit_16(363);
+emit_16(297);
+emit_16(364);
+emit_16(298);
+emit_16(364);
+emit_16(297);
+emit_16(364);
+emit_16(298);
+emit_16(365);
+emit_16(299);
+emit_16(365);
+emit_16(298);
+emit_16(365);
+emit_16(299);
+emit_16(366);
+emit_16(300);
+emit_16(366);
+emit_16(299);
+emit_16(366);
+emit_16(300);
+emit_16(367);
+emit_16(301);
+emit_16(367);
+emit_16(300);
+emit_16(367);
+emit_16(301);
+emit_16(368);
+emit_16(302);
+emit_16(368);
+emit_16(301);
+emit_16(368);
+emit_16(302);
+emit_16(369);
+emit_16(303);
+emit_16(369);
+emit_16(302);
+emit_16(369);
+emit_16(303);
+emit_16(370);
+emit_16(304);
+emit_16(370);
+emit_16(303);
+emit_16(370);
+emit_16(304);
+emit_16(371);
+emit_16(305);
+emit_16(371);
+emit_16(304);
+emit_16(371);
+emit_16(305);
+emit_16(372);
+emit_16(306);
+emit_16(372);
+emit_16(305);
+emit_16(372);
+emit_16(306);
+emit_16(373);
+emit_16(307);
+emit_16(373);
+emit_16(306);
+emit_16(373);
+emit_16(307);
+emit_16(374);
+emit_16(308);
+emit_16(374);
+emit_16(307);
+emit_16(374);
+emit_16(308);
+emit_16(375);
+emit_16(309);
+emit_16(375);
+emit_16(308);
+emit_16(375);
+emit_16(309);
+emit_16(376);
+emit_16(310);
+emit_16(376);
+emit_16(309);
+emit_16(376);
+emit_16(310);
+emit_16(377);
+emit_16(311);
+emit_16(377);
+emit_16(310);
+emit_16(377);
+emit_16(311);
+emit_16(378);
+emit_16(312);
+emit_16(378);
+emit_16(311);
+emit_16(378);
+emit_16(312);
+emit_16(379);
+emit_16(313);
+emit_16(379);
+emit_16(312);
+emit_16(379);
+emit_16(313);
+emit_16(380);
+emit_16(314);
+emit_16(380);
+emit_16(313);
+emit_16(380);
+emit_16(314);
+emit_16(381);
+emit_16(315);
+emit_16(381);
+emit_16(314);
+emit_16(381);
+emit_16(315);
+emit_16(382);
+emit_16(316);
+emit_16(382);
+emit_16(315);
+emit_16(382);
+emit_16(316);
+emit_16(383);
+emit_16(317);
+emit_16(383);
+emit_16(316);
+emit_16(383);
+emit_16(317);
+emit_16(384);
+emit_16(318);
+emit_16(384);
+emit_16(317);
+emit_16(384);
+emit_16(318);
+emit_16(385);
+emit_16(319);
+emit_16(385);
+emit_16(318);
+emit_16(385);
+emit_16(319);
+emit_16(386);
+emit_16(320);
+emit_16(386);
+emit_16(319);
+emit_16(386);
+emit_16(320);
+emit_16(387);
+emit_16(321);
+emit_16(387);
+emit_16(320);
+emit_16(387);
+emit_16(321);
+emit_16(388);
+emit_16(322);
+emit_16(388);
+emit_16(321);
+emit_16(388);
+emit_16(322);
+emit_16(389);
+emit_16(323);
+emit_16(389);
+emit_16(322);
+emit_16(389);
+emit_16(323);
+emit_16(390);
+emit_16(324);
+emit_16(390);
+emit_16(323);
+emit_16(390);
+emit_16(324);
+emit_16(391);
+emit_16(325);
+emit_16(391);
+emit_16(324);
+emit_16(391);
+emit_16(325);
+emit_16(392);
+emit_16(326);
+emit_16(392);
+emit_16(325);
+emit_16(392);
+emit_16(326);
+emit_16(393);
+emit_16(327);
+emit_16(393);
+emit_16(326);
+emit_16(393);
+emit_16(327);
+emit_16(394);
+emit_16(328);
+emit_16(394);
+emit_16(327);
+emit_16(394);
+emit_16(328);
+emit_16(395);
+emit_16(329);
+emit_16(395);
+emit_16(328);
+emit_16(396);
+emit_16(330);
+emit_16(397);
+emit_16(331);
+emit_16(397);
+emit_16(330);
+emit_16(397);
+emit_16(331);
+emit_16(398);
+emit_16(332);
+emit_16(398);
+emit_16(331);
+emit_16(398);
+emit_16(332);
+emit_16(399);
+emit_16(333);
+emit_16(399);
+emit_16(332);
+emit_16(399);
+emit_16(333);
+emit_16(400);
+emit_16(334);
+emit_16(400);
+emit_16(333);
+emit_16(400);
+emit_16(334);
+emit_16(401);
+emit_16(335);
+emit_16(401);
+emit_16(334);
+emit_16(401);
+emit_16(335);
+emit_16(402);
+emit_16(336);
+emit_16(402);
+emit_16(335);
+emit_16(402);
+emit_16(336);
+emit_16(403);
+emit_16(337);
+emit_16(403);
+emit_16(336);
+emit_16(403);
+emit_16(337);
+emit_16(404);
+emit_16(338);
+emit_16(404);
+emit_16(337);
+emit_16(404);
+emit_16(338);
+emit_16(405);
+emit_16(339);
+emit_16(405);
+emit_16(338);
+emit_16(405);
+emit_16(339);
+emit_16(406);
+emit_16(340);
+emit_16(406);
+emit_16(339);
+emit_16(406);
+emit_16(340);
+emit_16(407);
+emit_16(341);
+emit_16(407);
+emit_16(340);
+emit_16(407);
+emit_16(341);
+emit_16(408);
+emit_16(342);
+emit_16(408);
+emit_16(341);
+emit_16(408);
+emit_16(342);
+emit_16(409);
+emit_16(343);
+emit_16(409);
+emit_16(342);
+emit_16(409);
+emit_16(343);
+emit_16(410);
+emit_16(344);
+emit_16(410);
+emit_16(343);
+emit_16(410);
+emit_16(344);
+emit_16(411);
+emit_16(345);
+emit_16(411);
+emit_16(344);
+emit_16(411);
+emit_16(345);
+emit_16(412);
+emit_16(346);
+emit_16(412);
+emit_16(345);
+emit_16(412);
+emit_16(346);
+emit_16(413);
+emit_16(347);
+emit_16(413);
+emit_16(346);
+emit_16(413);
+emit_16(347);
+emit_16(414);
+emit_16(348);
+emit_16(414);
+emit_16(347);
+emit_16(414);
+emit_16(348);
+emit_16(415);
+emit_16(349);
+emit_16(415);
+emit_16(348);
+emit_16(415);
+emit_16(349);
+emit_16(416);
+emit_16(350);
+emit_16(416);
+emit_16(349);
+emit_16(416);
+emit_16(350);
+emit_16(417);
+emit_16(351);
+emit_16(417);
+emit_16(350);
+emit_16(417);
+emit_16(351);
+emit_16(418);
+emit_16(352);
+emit_16(418);
+emit_16(351);
+emit_16(418);
+emit_16(352);
+emit_16(419);
+emit_16(353);
+emit_16(419);
+emit_16(352);
+emit_16(419);
+emit_16(353);
+emit_16(420);
+emit_16(354);
+emit_16(420);
+emit_16(353);
+emit_16(420);
+emit_16(354);
+emit_16(421);
+emit_16(355);
+emit_16(421);
+emit_16(354);
+emit_16(421);
+emit_16(355);
+emit_16(422);
+emit_16(356);
+emit_16(422);
+emit_16(355);
+emit_16(422);
+emit_16(356);
+emit_16(423);
+emit_16(357);
+emit_16(423);
+emit_16(356);
+emit_16(423);
+emit_16(357);
+emit_16(424);
+emit_16(358);
+emit_16(424);
+emit_16(357);
+emit_16(424);
+emit_16(358);
+emit_16(425);
+emit_16(359);
+emit_16(425);
+emit_16(358);
+emit_16(425);
+emit_16(359);
+emit_16(426);
+emit_16(360);
+emit_16(426);
+emit_16(359);
+emit_16(426);
+emit_16(360);
+emit_16(427);
+emit_16(361);
+emit_16(427);
+emit_16(360);
+emit_16(427);
+emit_16(361);
+emit_16(428);
+emit_16(362);
+emit_16(428);
+emit_16(361);
+emit_16(428);
+emit_16(362);
+emit_16(429);
+emit_16(363);
+emit_16(429);
+emit_16(362);
+emit_16(429);
+emit_16(363);
+emit_16(430);
+emit_16(364);
+emit_16(430);
+emit_16(363);
+emit_16(430);
+emit_16(364);
+emit_16(431);
+emit_16(365);
+emit_16(431);
+emit_16(364);
+emit_16(431);
+emit_16(365);
+emit_16(432);
+emit_16(366);
+emit_16(432);
+emit_16(365);
+emit_16(432);
+emit_16(366);
+emit_16(433);
+emit_16(367);
+emit_16(433);
+emit_16(366);
+emit_16(433);
+emit_16(367);
+emit_16(434);
+emit_16(368);
+emit_16(434);
+emit_16(367);
+emit_16(434);
+emit_16(368);
+emit_16(435);
+emit_16(369);
+emit_16(435);
+emit_16(368);
+emit_16(435);
+emit_16(369);
+emit_16(436);
+emit_16(370);
+emit_16(436);
+emit_16(369);
+emit_16(436);
+emit_16(370);
+emit_16(437);
+emit_16(371);
+emit_16(437);
+emit_16(370);
+emit_16(437);
+emit_16(371);
+emit_16(438);
+emit_16(372);
+emit_16(438);
+emit_16(371);
+emit_16(438);
+emit_16(372);
+emit_16(439);
+emit_16(373);
+emit_16(439);
+emit_16(372);
+emit_16(439);
+emit_16(373);
+emit_16(440);
+emit_16(374);
+emit_16(440);
+emit_16(373);
+emit_16(440);
+emit_16(374);
+emit_16(441);
+emit_16(375);
+emit_16(441);
+emit_16(374);
+emit_16(441);
+emit_16(375);
+emit_16(442);
+emit_16(376);
+emit_16(442);
+emit_16(375);
+emit_16(442);
+emit_16(376);
+emit_16(443);
+emit_16(377);
+emit_16(443);
+emit_16(376);
+emit_16(443);
+emit_16(377);
+emit_16(444);
+emit_16(378);
+emit_16(444);
+emit_16(377);
+emit_16(444);
+emit_16(378);
+emit_16(445);
+emit_16(379);
+emit_16(445);
+emit_16(378);
+emit_16(445);
+emit_16(379);
+emit_16(446);
+emit_16(380);
+emit_16(446);
+emit_16(379);
+emit_16(446);
+emit_16(380);
+emit_16(447);
+emit_16(381);
+emit_16(447);
+emit_16(380);
+emit_16(447);
+emit_16(381);
+emit_16(448);
+emit_16(382);
+emit_16(448);
+emit_16(381);
+emit_16(448);
+emit_16(382);
+emit_16(449);
+emit_16(383);
+emit_16(449);
+emit_16(382);
+emit_16(449);
+emit_16(383);
+emit_16(450);
+emit_16(384);
+emit_16(450);
+emit_16(383);
+emit_16(450);
+emit_16(384);
+emit_16(451);
+emit_16(385);
+emit_16(451);
+emit_16(384);
+emit_16(451);
+emit_16(385);
+emit_16(452);
+emit_16(386);
+emit_16(452);
+emit_16(385);
+emit_16(452);
+emit_16(386);
+emit_16(453);
+emit_16(387);
+emit_16(453);
+emit_16(386);
+emit_16(453);
+emit_16(387);
+emit_16(454);
+emit_16(388);
+emit_16(454);
+emit_16(387);
+emit_16(454);
+emit_16(388);
+emit_16(455);
+emit_16(389);
+emit_16(455);
+emit_16(388);
+emit_16(455);
+emit_16(389);
+emit_16(456);
+emit_16(390);
+emit_16(456);
+emit_16(389);
+emit_16(456);
+emit_16(390);
+emit_16(457);
+emit_16(391);
+emit_16(457);
+emit_16(390);
+emit_16(457);
+emit_16(391);
+emit_16(458);
+emit_16(392);
+emit_16(458);
+emit_16(391);
+emit_16(458);
+emit_16(392);
+emit_16(459);
+emit_16(393);
+emit_16(459);
+emit_16(392);
+emit_16(459);
+emit_16(393);
+emit_16(460);
+emit_16(394);
+emit_16(460);
+emit_16(393);
+emit_16(460);
+emit_16(394);
+emit_16(461);
+emit_16(395);
+emit_16(461);
+emit_16(394);
+emit_16(462);
+emit_16(396);
+emit_16(463);
+emit_16(397);
+emit_16(463);
+emit_16(396);
+emit_16(463);
+emit_16(397);
+emit_16(464);
+emit_16(398);
+emit_16(464);
+emit_16(397);
+emit_16(464);
+emit_16(398);
+emit_16(465);
+emit_16(399);
+emit_16(465);
+emit_16(398);
+emit_16(465);
+emit_16(399);
+emit_16(466);
+emit_16(400);
+emit_16(466);
+emit_16(399);
+emit_16(466);
+emit_16(400);
+emit_16(467);
+emit_16(401);
+emit_16(467);
+emit_16(400);
+emit_16(467);
+emit_16(401);
+emit_16(468);
+emit_16(402);
+emit_16(468);
+emit_16(401);
+emit_16(468);
+emit_16(402);
+emit_16(469);
+emit_16(403);
+emit_16(469);
+emit_16(402);
+emit_16(469);
+emit_16(403);
+emit_16(470);
+emit_16(404);
+emit_16(470);
+emit_16(403);
+emit_16(470);
+emit_16(404);
+emit_16(471);
+emit_16(405);
+emit_16(471);
+emit_16(404);
+emit_16(471);
+emit_16(405);
+emit_16(472);
+emit_16(406);
+emit_16(472);
+emit_16(405);
+emit_16(472);
+emit_16(406);
+emit_16(473);
+emit_16(407);
+emit_16(473);
+emit_16(406);
+emit_16(473);
+emit_16(407);
+emit_16(474);
+emit_16(408);
+emit_16(474);
+emit_16(407);
+emit_16(474);
+emit_16(408);
+emit_16(475);
+emit_16(409);
+emit_16(475);
+emit_16(408);
+emit_16(475);
+emit_16(409);
+emit_16(476);
+emit_16(410);
+emit_16(476);
+emit_16(409);
+emit_16(476);
+emit_16(410);
+emit_16(477);
+emit_16(411);
+emit_16(477);
+emit_16(410);
+emit_16(477);
+emit_16(411);
+emit_16(478);
+emit_16(412);
+emit_16(478);
+emit_16(411);
+emit_16(478);
+emit_16(412);
+emit_16(479);
+emit_16(413);
+emit_16(479);
+emit_16(412);
+emit_16(479);
+emit_16(413);
+emit_16(480);
+emit_16(414);
+emit_16(480);
+emit_16(413);
+emit_16(480);
+emit_16(414);
+emit_16(481);
+emit_16(415);
+emit_16(481);
+emit_16(414);
+emit_16(481);
+emit_16(415);
+emit_16(482);
+emit_16(416);
+emit_16(482);
+emit_16(415);
+emit_16(482);
+emit_16(416);
+emit_16(483);
+emit_16(417);
+emit_16(483);
+emit_16(416);
+emit_16(483);
+emit_16(417);
+emit_16(484);
+emit_16(418);
+emit_16(484);
+emit_16(417);
+emit_16(484);
+emit_16(418);
+emit_16(485);
+emit_16(419);
+emit_16(485);
+emit_16(418);
+emit_16(485);
+emit_16(419);
+emit_16(486);
+emit_16(420);
+emit_16(486);
+emit_16(419);
+emit_16(486);
+emit_16(420);
+emit_16(487);
+emit_16(421);
+emit_16(487);
+emit_16(420);
+emit_16(487);
+emit_16(421);
+emit_16(488);
+emit_16(422);
+emit_16(488);
+emit_16(421);
+emit_16(488);
+emit_16(422);
+emit_16(489);
+emit_16(423);
+emit_16(489);
+emit_16(422);
+emit_16(489);
+emit_16(423);
+emit_16(490);
+emit_16(424);
+emit_16(490);
+emit_16(423);
+emit_16(490);
+emit_16(424);
+emit_16(491);
+emit_16(425);
+emit_16(491);
+emit_16(424);
+emit_16(491);
+emit_16(425);
+emit_16(492);
+emit_16(426);
+emit_16(492);
+emit_16(425);
+emit_16(492);
+emit_16(426);
+emit_16(493);
+emit_16(427);
+emit_16(493);
+emit_16(426);
+emit_16(493);
+emit_16(427);
+emit_16(494);
+emit_16(428);
+emit_16(494);
+emit_16(427);
+emit_16(494);
+emit_16(428);
+emit_16(495);
+emit_16(429);
+emit_16(495);
+emit_16(428);
+emit_16(495);
+emit_16(429);
+emit_16(496);
+emit_16(430);
+emit_16(496);
+emit_16(429);
+emit_16(496);
+emit_16(430);
+emit_16(497);
+emit_16(431);
+emit_16(497);
+emit_16(430);
+emit_16(497);
+emit_16(431);
+emit_16(498);
+emit_16(432);
+emit_16(498);
+emit_16(431);
+emit_16(498);
+emit_16(432);
+emit_16(499);
+emit_16(433);
+emit_16(499);
+emit_16(432);
+emit_16(499);
+emit_16(433);
+emit_16(500);
+emit_16(434);
+emit_16(500);
+emit_16(433);
+emit_16(500);
+emit_16(434);
+emit_16(501);
+emit_16(435);
+emit_16(501);
+emit_16(434);
+emit_16(501);
+emit_16(435);
+emit_16(502);
+emit_16(436);
+emit_16(502);
+emit_16(435);
+emit_16(502);
+emit_16(436);
+emit_16(503);
+emit_16(437);
+emit_16(503);
+emit_16(436);
+emit_16(503);
+emit_16(437);
+emit_16(504);
+emit_16(438);
+emit_16(504);
+emit_16(437);
+emit_16(504);
+emit_16(438);
+emit_16(505);
+emit_16(439);
+emit_16(505);
+emit_16(438);
+emit_16(505);
+emit_16(439);
+emit_16(506);
+emit_16(440);
+emit_16(506);
+emit_16(439);
+emit_16(506);
+emit_16(440);
+emit_16(507);
+emit_16(441);
+emit_16(507);
+emit_16(440);
+emit_16(507);
+emit_16(441);
+emit_16(508);
+emit_16(442);
+emit_16(508);
+emit_16(441);
+emit_16(508);
+emit_16(442);
+emit_16(509);
+emit_16(443);
+emit_16(509);
+emit_16(442);
+emit_16(509);
+emit_16(443);
+emit_16(510);
+emit_16(444);
+emit_16(510);
+emit_16(443);
+emit_16(510);
+emit_16(444);
+emit_16(511);
+emit_16(445);
+emit_16(511);
+emit_16(444);
+emit_16(511);
+emit_16(445);
+emit_16(512);
+emit_16(446);
+emit_16(512);
+emit_16(445);
+emit_16(512);
+emit_16(446);
+emit_16(513);
+emit_16(447);
+emit_16(513);
+emit_16(446);
+emit_16(513);
+emit_16(447);
+emit_16(514);
+emit_16(448);
+emit_16(514);
+emit_16(447);
+emit_16(514);
+emit_16(448);
+emit_16(515);
+emit_16(449);
+emit_16(515);
+emit_16(448);
+emit_16(515);
+emit_16(449);
+emit_16(516);
+emit_16(450);
+emit_16(516);
+emit_16(449);
+emit_16(516);
+emit_16(450);
+emit_16(517);
+emit_16(451);
+emit_16(517);
+emit_16(450);
+emit_16(517);
+emit_16(451);
+emit_16(518);
+emit_16(452);
+emit_16(518);
+emit_16(451);
+emit_16(518);
+emit_16(452);
+emit_16(519);
+emit_16(453);
+emit_16(519);
+emit_16(452);
+emit_16(519);
+emit_16(453);
+emit_16(520);
+emit_16(454);
+emit_16(520);
+emit_16(453);
+emit_16(520);
+emit_16(454);
+emit_16(521);
+emit_16(455);
+emit_16(521);
+emit_16(454);
+emit_16(521);
+emit_16(455);
+emit_16(522);
+emit_16(456);
+emit_16(522);
+emit_16(455);
+emit_16(522);
+emit_16(456);
+emit_16(523);
+emit_16(457);
+emit_16(523);
+emit_16(456);
+emit_16(523);
+emit_16(457);
+emit_16(524);
+emit_16(458);
+emit_16(524);
+emit_16(457);
+emit_16(524);
+emit_16(458);
+emit_16(525);
+emit_16(459);
+emit_16(525);
+emit_16(458);
+emit_16(525);
+emit_16(459);
+emit_16(526);
+emit_16(460);
+emit_16(526);
+emit_16(459);
+emit_16(526);
+emit_16(460);
+emit_16(527);
+emit_16(461);
+emit_16(527);
+emit_16(460);
+emit_16(528);
+emit_16(462);
+emit_16(529);
+emit_16(463);
+emit_16(529);
+emit_16(462);
+emit_16(529);
+emit_16(463);
+emit_16(530);
+emit_16(464);
+emit_16(530);
+emit_16(463);
+emit_16(530);
+emit_16(464);
+emit_16(531);
+emit_16(465);
+emit_16(531);
+emit_16(464);
+emit_16(531);
+emit_16(465);
+emit_16(532);
+emit_16(466);
+emit_16(532);
+emit_16(465);
+emit_16(532);
+emit_16(466);
+emit_16(533);
+emit_16(467);
+emit_16(533);
+emit_16(466);
+emit_16(533);
+emit_16(467);
+emit_16(534);
+emit_16(468);
+emit_16(534);
+emit_16(467);
+emit_16(534);
+emit_16(468);
+emit_16(535);
+emit_16(469);
+emit_16(535);
+emit_16(468);
+emit_16(535);
+emit_16(469);
+emit_16(536);
+emit_16(470);
+emit_16(536);
+emit_16(469);
+emit_16(536);
+emit_16(470);
+emit_16(537);
+emit_16(471);
+emit_16(537);
+emit_16(470);
+emit_16(537);
+emit_16(471);
+emit_16(538);
+emit_16(472);
+emit_16(538);
+emit_16(471);
+emit_16(538);
+emit_16(472);
+emit_16(539);
+emit_16(473);
+emit_16(539);
+emit_16(472);
+emit_16(539);
+emit_16(473);
+emit_16(540);
+emit_16(474);
+emit_16(540);
+emit_16(473);
+emit_16(540);
+emit_16(474);
+emit_16(541);
+emit_16(475);
+emit_16(541);
+emit_16(474);
+emit_16(541);
+emit_16(475);
+emit_16(542);
+emit_16(476);
+emit_16(542);
+emit_16(475);
+emit_16(542);
+emit_16(476);
+emit_16(543);
+emit_16(477);
+emit_16(543);
+emit_16(476);
+emit_16(543);
+emit_16(477);
+emit_16(544);
+emit_16(478);
+emit_16(544);
+emit_16(477);
+emit_16(544);
+emit_16(478);
+emit_16(545);
+emit_16(479);
+emit_16(545);
+emit_16(478);
+emit_16(545);
+emit_16(479);
+emit_16(546);
+emit_16(480);
+emit_16(546);
+emit_16(479);
+emit_16(546);
+emit_16(480);
+emit_16(547);
+emit_16(481);
+emit_16(547);
+emit_16(480);
+emit_16(547);
+emit_16(481);
+emit_16(548);
+emit_16(482);
+emit_16(548);
+emit_16(481);
+emit_16(548);
+emit_16(482);
+emit_16(549);
+emit_16(483);
+emit_16(549);
+emit_16(482);
+emit_16(549);
+emit_16(483);
+emit_16(550);
+emit_16(484);
+emit_16(550);
+emit_16(483);
+emit_16(550);
+emit_16(484);
+emit_16(551);
+emit_16(485);
+emit_16(551);
+emit_16(484);
+emit_16(551);
+emit_16(485);
+emit_16(552);
+emit_16(486);
+emit_16(552);
+emit_16(485);
+emit_16(552);
+emit_16(486);
+emit_16(553);
+emit_16(487);
+emit_16(553);
+emit_16(486);
+emit_16(553);
+emit_16(487);
+emit_16(554);
+emit_16(488);
+emit_16(554);
+emit_16(487);
+emit_16(554);
+emit_16(488);
+emit_16(555);
+emit_16(489);
+emit_16(555);
+emit_16(488);
+emit_16(555);
+emit_16(489);
+emit_16(556);
+emit_16(490);
+emit_16(556);
+emit_16(489);
+emit_16(556);
+emit_16(490);
+emit_16(557);
+emit_16(491);
+emit_16(557);
+emit_16(490);
+emit_16(557);
+emit_16(491);
+emit_16(558);
+emit_16(492);
+emit_16(558);
+emit_16(491);
+emit_16(558);
+emit_16(492);
+emit_16(559);
+emit_16(493);
+emit_16(559);
+emit_16(492);
+emit_16(559);
+emit_16(493);
+emit_16(560);
+emit_16(494);
+emit_16(560);
+emit_16(493);
+emit_16(560);
+emit_16(494);
+emit_16(561);
+emit_16(495);
+emit_16(561);
+emit_16(494);
+emit_16(561);
+emit_16(495);
+emit_16(562);
+emit_16(496);
+emit_16(562);
+emit_16(495);
+emit_16(562);
+emit_16(496);
+emit_16(563);
+emit_16(497);
+emit_16(563);
+emit_16(496);
+emit_16(563);
+emit_16(497);
+emit_16(564);
+emit_16(498);
+emit_16(564);
+emit_16(497);
+emit_16(564);
+emit_16(498);
+emit_16(565);
+emit_16(499);
+emit_16(565);
+emit_16(498);
+emit_16(565);
+emit_16(499);
+emit_16(566);
+emit_16(500);
+emit_16(566);
+emit_16(499);
+emit_16(566);
+emit_16(500);
+emit_16(567);
+emit_16(501);
+emit_16(567);
+emit_16(500);
+emit_16(567);
+emit_16(501);
+emit_16(568);
+emit_16(502);
+emit_16(568);
+emit_16(501);
+emit_16(568);
+emit_16(502);
+emit_16(569);
+emit_16(503);
+emit_16(569);
+emit_16(502);
+emit_16(569);
+emit_16(503);
+emit_16(570);
+emit_16(504);
+emit_16(570);
+emit_16(503);
+emit_16(570);
+emit_16(504);
+emit_16(571);
+emit_16(505);
+emit_16(571);
+emit_16(504);
+emit_16(571);
+emit_16(505);
+emit_16(572);
+emit_16(506);
+emit_16(572);
+emit_16(505);
+emit_16(572);
+emit_16(506);
+emit_16(573);
+emit_16(507);
+emit_16(573);
+emit_16(506);
+emit_16(573);
+emit_16(507);
+emit_16(574);
+emit_16(508);
+emit_16(574);
+emit_16(507);
+emit_16(574);
+emit_16(508);
+emit_16(575);
+emit_16(509);
+emit_16(575);
+emit_16(508);
+emit_16(575);
+emit_16(509);
+emit_16(576);
+emit_16(510);
+emit_16(576);
+emit_16(509);
+emit_16(576);
+emit_16(510);
+emit_16(577);
+emit_16(511);
+emit_16(577);
+emit_16(510);
+emit_16(577);
+emit_16(511);
+emit_16(578);
+emit_16(512);
+emit_16(578);
+emit_16(511);
+emit_16(578);
+emit_16(512);
+emit_16(579);
+emit_16(513);
+emit_16(579);
+emit_16(512);
+emit_16(579);
+emit_16(513);
+emit_16(580);
+emit_16(514);
+emit_16(580);
+emit_16(513);
+emit_16(580);
+emit_16(514);
+emit_16(581);
+emit_16(515);
+emit_16(581);
+emit_16(514);
+emit_16(581);
+emit_16(515);
+emit_16(582);
+emit_16(516);
+emit_16(582);
+emit_16(515);
+emit_16(582);
+emit_16(516);
+emit_16(583);
+emit_16(517);
+emit_16(583);
+emit_16(516);
+emit_16(583);
+emit_16(517);
+emit_16(584);
+emit_16(518);
+emit_16(584);
+emit_16(517);
+emit_16(584);
+emit_16(518);
+emit_16(585);
+emit_16(519);
+emit_16(585);
+emit_16(518);
+emit_16(585);
+emit_16(519);
+emit_16(586);
+emit_16(520);
+emit_16(586);
+emit_16(519);
+emit_16(586);
+emit_16(520);
+emit_16(587);
+emit_16(521);
+emit_16(587);
+emit_16(520);
+emit_16(587);
+emit_16(521);
+emit_16(588);
+emit_16(522);
+emit_16(588);
+emit_16(521);
+emit_16(588);
+emit_16(522);
+emit_16(589);
+emit_16(523);
+emit_16(589);
+emit_16(522);
+emit_16(589);
+emit_16(523);
+emit_16(590);
+emit_16(524);
+emit_16(590);
+emit_16(523);
+emit_16(590);
+emit_16(524);
+emit_16(591);
+emit_16(525);
+emit_16(591);
+emit_16(524);
+emit_16(591);
+emit_16(525);
+emit_16(592);
+emit_16(526);
+emit_16(592);
+emit_16(525);
+emit_16(592);
+emit_16(526);
+emit_16(593);
+emit_16(527);
+emit_16(593);
+emit_16(526);
+emit_16(594);
+emit_16(528);
+emit_16(595);
+emit_16(529);
+emit_16(595);
+emit_16(528);
+emit_16(595);
+emit_16(529);
+emit_16(596);
+emit_16(530);
+emit_16(596);
+emit_16(529);
+emit_16(596);
+emit_16(530);
+emit_16(597);
+emit_16(531);
+emit_16(597);
+emit_16(530);
+emit_16(597);
+emit_16(531);
+emit_16(598);
+emit_16(532);
+emit_16(598);
+emit_16(531);
+emit_16(598);
+emit_16(532);
+emit_16(599);
+emit_16(533);
+emit_16(599);
+emit_16(532);
+emit_16(599);
+emit_16(533);
+emit_16(600);
+emit_16(534);
+emit_16(600);
+emit_16(533);
+emit_16(600);
+emit_16(534);
+emit_16(601);
+emit_16(535);
+emit_16(601);
+emit_16(534);
+emit_16(601);
+emit_16(535);
+emit_16(602);
+emit_16(536);
+emit_16(602);
+emit_16(535);
+emit_16(602);
+emit_16(536);
+emit_16(603);
+emit_16(537);
+emit_16(603);
+emit_16(536);
+emit_16(603);
+emit_16(537);
+emit_16(604);
+emit_16(538);
+emit_16(604);
+emit_16(537);
+emit_16(604);
+emit_16(538);
+emit_16(605);
+emit_16(539);
+emit_16(605);
+emit_16(538);
+emit_16(605);
+emit_16(539);
+emit_16(606);
+emit_16(540);
+emit_16(606);
+emit_16(539);
+emit_16(606);
+emit_16(540);
+emit_16(607);
+emit_16(541);
+emit_16(607);
+emit_16(540);
+emit_16(607);
+emit_16(541);
+emit_16(608);
+emit_16(542);
+emit_16(608);
+emit_16(541);
+emit_16(608);
+emit_16(542);
+emit_16(609);
+emit_16(543);
+emit_16(609);
+emit_16(542);
+emit_16(609);
+emit_16(543);
+emit_16(610);
+emit_16(544);
+emit_16(610);
+emit_16(543);
+emit_16(610);
+emit_16(544);
+emit_16(611);
+emit_16(545);
+emit_16(611);
+emit_16(544);
+emit_16(611);
+emit_16(545);
+emit_16(612);
+emit_16(546);
+emit_16(612);
+emit_16(545);
+emit_16(612);
+emit_16(546);
+emit_16(613);
+emit_16(547);
+emit_16(613);
+emit_16(546);
+emit_16(613);
+emit_16(547);
+emit_16(614);
+emit_16(548);
+emit_16(614);
+emit_16(547);
+emit_16(614);
+emit_16(548);
+emit_16(615);
+emit_16(549);
+emit_16(615);
+emit_16(548);
+emit_16(615);
+emit_16(549);
+emit_16(616);
+emit_16(550);
+emit_16(616);
+emit_16(549);
+emit_16(616);
+emit_16(550);
+emit_16(617);
+emit_16(551);
+emit_16(617);
+emit_16(550);
+emit_16(617);
+emit_16(551);
+emit_16(618);
+emit_16(552);
+emit_16(618);
+emit_16(551);
+emit_16(618);
+emit_16(552);
+emit_16(619);
+emit_16(553);
+emit_16(619);
+emit_16(552);
+emit_16(619);
+emit_16(553);
+emit_16(620);
+emit_16(554);
+emit_16(620);
+emit_16(553);
+emit_16(620);
+emit_16(554);
+emit_16(621);
+emit_16(555);
+emit_16(621);
+emit_16(554);
+emit_16(621);
+emit_16(555);
+emit_16(622);
+emit_16(556);
+emit_16(622);
+emit_16(555);
+emit_16(622);
+emit_16(556);
+emit_16(623);
+emit_16(557);
+emit_16(623);
+emit_16(556);
+emit_16(623);
+emit_16(557);
+emit_16(624);
+emit_16(558);
+emit_16(624);
+emit_16(557);
+emit_16(624);
+emit_16(558);
+emit_16(625);
+emit_16(559);
+emit_16(625);
+emit_16(558);
+emit_16(625);
+emit_16(559);
+emit_16(626);
+emit_16(560);
+emit_16(626);
+emit_16(559);
+emit_16(626);
+emit_16(560);
+emit_16(627);
+emit_16(561);
+emit_16(627);
+emit_16(560);
+emit_16(627);
+emit_16(561);
+emit_16(628);
+emit_16(562);
+emit_16(628);
+emit_16(561);
+emit_16(628);
+emit_16(562);
+emit_16(629);
+emit_16(563);
+emit_16(629);
+emit_16(562);
+emit_16(629);
+emit_16(563);
+emit_16(630);
+emit_16(564);
+emit_16(630);
+emit_16(563);
+emit_16(630);
+emit_16(564);
+emit_16(631);
+emit_16(565);
+emit_16(631);
+emit_16(564);
+emit_16(631);
+emit_16(565);
+emit_16(632);
+emit_16(566);
+emit_16(632);
+emit_16(565);
+emit_16(632);
+emit_16(566);
+emit_16(633);
+emit_16(567);
+emit_16(633);
+emit_16(566);
+emit_16(633);
+emit_16(567);
+emit_16(634);
+emit_16(568);
+emit_16(634);
+emit_16(567);
+emit_16(634);
+emit_16(568);
+emit_16(635);
+emit_16(569);
+emit_16(635);
+emit_16(568);
+emit_16(635);
+emit_16(569);
+emit_16(636);
+emit_16(570);
+emit_16(636);
+emit_16(569);
+emit_16(636);
+emit_16(570);
+emit_16(637);
+emit_16(571);
+emit_16(637);
+emit_16(570);
+emit_16(637);
+emit_16(571);
+emit_16(638);
+emit_16(572);
+emit_16(638);
+emit_16(571);
+emit_16(638);
+emit_16(572);
+emit_16(639);
+emit_16(573);
+emit_16(639);
+emit_16(572);
+emit_16(639);
+emit_16(573);
+emit_16(640);
+emit_16(574);
+emit_16(640);
+emit_16(573);
+emit_16(640);
+emit_16(574);
+emit_16(641);
+emit_16(575);
+emit_16(641);
+emit_16(574);
+emit_16(641);
+emit_16(575);
+emit_16(642);
+emit_16(576);
+emit_16(642);
+emit_16(575);
+emit_16(642);
+emit_16(576);
+emit_16(643);
+emit_16(577);
+emit_16(643);
+emit_16(576);
+emit_16(643);
+emit_16(577);
+emit_16(644);
+emit_16(578);
+emit_16(644);
+emit_16(577);
+emit_16(644);
+emit_16(578);
+emit_16(645);
+emit_16(579);
+emit_16(645);
+emit_16(578);
+emit_16(645);
+emit_16(579);
+emit_16(646);
+emit_16(580);
+emit_16(646);
+emit_16(579);
+emit_16(646);
+emit_16(580);
+emit_16(647);
+emit_16(581);
+emit_16(647);
+emit_16(580);
+emit_16(647);
+emit_16(581);
+emit_16(648);
+emit_16(582);
+emit_16(648);
+emit_16(581);
+emit_16(648);
+emit_16(582);
+emit_16(649);
+emit_16(583);
+emit_16(649);
+emit_16(582);
+emit_16(649);
+emit_16(583);
+emit_16(650);
+emit_16(584);
+emit_16(650);
+emit_16(583);
+emit_16(650);
+emit_16(584);
+emit_16(651);
+emit_16(585);
+emit_16(651);
+emit_16(584);
+emit_16(651);
+emit_16(585);
+emit_16(652);
+emit_16(586);
+emit_16(652);
+emit_16(585);
+emit_16(652);
+emit_16(586);
+emit_16(653);
+emit_16(587);
+emit_16(653);
+emit_16(586);
+emit_16(653);
+emit_16(587);
+emit_16(654);
+emit_16(588);
+emit_16(654);
+emit_16(587);
+emit_16(654);
+emit_16(588);
+emit_16(655);
+emit_16(589);
+emit_16(655);
+emit_16(588);
+emit_16(655);
+emit_16(589);
+emit_16(656);
+emit_16(590);
+emit_16(656);
+emit_16(589);
+emit_16(656);
+emit_16(590);
+emit_16(657);
+emit_16(591);
+emit_16(657);
+emit_16(590);
+emit_16(657);
+emit_16(591);
+emit_16(658);
+emit_16(592);
+emit_16(658);
+emit_16(591);
+emit_16(658);
+emit_16(592);
+emit_16(659);
+emit_16(593);
+emit_16(659);
+emit_16(592);
+emit_16(660);
+emit_16(594);
+emit_16(661);
+emit_16(595);
+emit_16(661);
+emit_16(594);
+emit_16(661);
+emit_16(595);
+emit_16(662);
+emit_16(596);
+emit_16(662);
+emit_16(595);
+emit_16(662);
+emit_16(596);
+emit_16(663);
+emit_16(597);
+emit_16(663);
+emit_16(596);
+emit_16(663);
+emit_16(597);
+emit_16(664);
+emit_16(598);
+emit_16(664);
+emit_16(597);
+emit_16(664);
+emit_16(598);
+emit_16(665);
+emit_16(599);
+emit_16(665);
+emit_16(598);
+emit_16(665);
+emit_16(599);
+emit_16(666);
+emit_16(600);
+emit_16(666);
+emit_16(599);
+emit_16(666);
+emit_16(600);
+emit_16(667);
+emit_16(601);
+emit_16(667);
+emit_16(600);
+emit_16(667);
+emit_16(601);
+emit_16(668);
+emit_16(602);
+emit_16(668);
+emit_16(601);
+emit_16(668);
+emit_16(602);
+emit_16(669);
+emit_16(603);
+emit_16(669);
+emit_16(602);
+emit_16(669);
+emit_16(603);
+emit_16(670);
+emit_16(604);
+emit_16(670);
+emit_16(603);
+emit_16(670);
+emit_16(604);
+emit_16(671);
+emit_16(605);
+emit_16(671);
+emit_16(604);
+emit_16(671);
+emit_16(605);
+emit_16(672);
+emit_16(606);
+emit_16(672);
+emit_16(605);
+emit_16(672);
+emit_16(606);
+emit_16(673);
+emit_16(607);
+emit_16(673);
+emit_16(606);
+emit_16(673);
+emit_16(607);
+emit_16(674);
+emit_16(608);
+emit_16(674);
+emit_16(607);
+emit_16(674);
+emit_16(608);
+emit_16(675);
+emit_16(609);
+emit_16(675);
+emit_16(608);
+emit_16(675);
+emit_16(609);
+emit_16(676);
+emit_16(610);
+emit_16(676);
+emit_16(609);
+emit_16(676);
+emit_16(610);
+emit_16(677);
+emit_16(611);
+emit_16(677);
+emit_16(610);
+emit_16(677);
+emit_16(611);
+emit_16(678);
+emit_16(612);
+emit_16(678);
+emit_16(611);
+emit_16(678);
+emit_16(612);
+emit_16(679);
+emit_16(613);
+emit_16(679);
+emit_16(612);
+emit_16(679);
+emit_16(613);
+emit_16(680);
+emit_16(614);
+emit_16(680);
+emit_16(613);
+emit_16(680);
+emit_16(614);
+emit_16(681);
+emit_16(615);
+emit_16(681);
+emit_16(614);
+emit_16(681);
+emit_16(615);
+emit_16(682);
+emit_16(616);
+emit_16(682);
+emit_16(615);
+emit_16(682);
+emit_16(616);
+emit_16(683);
+emit_16(617);
+emit_16(683);
+emit_16(616);
+emit_16(683);
+emit_16(617);
+emit_16(684);
+emit_16(618);
+emit_16(684);
+emit_16(617);
+emit_16(684);
+emit_16(618);
+emit_16(685);
+emit_16(619);
+emit_16(685);
+emit_16(618);
+emit_16(685);
+emit_16(619);
+emit_16(686);
+emit_16(620);
+emit_16(686);
+emit_16(619);
+emit_16(686);
+emit_16(620);
+emit_16(687);
+emit_16(621);
+emit_16(687);
+emit_16(620);
+emit_16(687);
+emit_16(621);
+emit_16(688);
+emit_16(622);
+emit_16(688);
+emit_16(621);
+emit_16(688);
+emit_16(622);
+emit_16(689);
+emit_16(623);
+emit_16(689);
+emit_16(622);
+emit_16(689);
+emit_16(623);
+emit_16(690);
+emit_16(624);
+emit_16(690);
+emit_16(623);
+emit_16(690);
+emit_16(624);
+emit_16(691);
+emit_16(625);
+emit_16(691);
+emit_16(624);
+emit_16(691);
+emit_16(625);
+emit_16(692);
+emit_16(626);
+emit_16(692);
+emit_16(625);
+emit_16(692);
+emit_16(626);
+emit_16(693);
+emit_16(627);
+emit_16(693);
+emit_16(626);
+emit_16(693);
+emit_16(627);
+emit_16(694);
+emit_16(628);
+emit_16(694);
+emit_16(627);
+emit_16(694);
+emit_16(628);
+emit_16(695);
+emit_16(629);
+emit_16(695);
+emit_16(628);
+emit_16(695);
+emit_16(629);
+emit_16(696);
+emit_16(630);
+emit_16(696);
+emit_16(629);
+emit_16(696);
+emit_16(630);
+emit_16(697);
+emit_16(631);
+emit_16(697);
+emit_16(630);
+emit_16(697);
+emit_16(631);
+emit_16(698);
+emit_16(632);
+emit_16(698);
+emit_16(631);
+emit_16(698);
+emit_16(632);
+emit_16(699);
+emit_16(633);
+emit_16(699);
+emit_16(632);
+emit_16(699);
+emit_16(633);
+emit_16(700);
+emit_16(634);
+emit_16(700);
+emit_16(633);
+emit_16(700);
+emit_16(634);
+emit_16(701);
+emit_16(635);
+emit_16(701);
+emit_16(634);
+emit_16(701);
+emit_16(635);
+emit_16(702);
+emit_16(636);
+emit_16(702);
+emit_16(635);
+emit_16(702);
+emit_16(636);
+emit_16(703);
+emit_16(637);
+emit_16(703);
+emit_16(636);
+emit_16(703);
+emit_16(637);
+emit_16(704);
+emit_16(638);
+emit_16(704);
+emit_16(637);
+emit_16(704);
+emit_16(638);
+emit_16(705);
+emit_16(639);
+emit_16(705);
+emit_16(638);
+emit_16(705);
+emit_16(639);
+emit_16(706);
+emit_16(640);
+emit_16(706);
+emit_16(639);
+emit_16(706);
+emit_16(640);
+emit_16(707);
+emit_16(641);
+emit_16(707);
+emit_16(640);
+emit_16(707);
+emit_16(641);
+emit_16(708);
+emit_16(642);
+emit_16(708);
+emit_16(641);
+emit_16(708);
+emit_16(642);
+emit_16(709);
+emit_16(643);
+emit_16(709);
+emit_16(642);
+emit_16(709);
+emit_16(643);
+emit_16(710);
+emit_16(644);
+emit_16(710);
+emit_16(643);
+emit_16(710);
+emit_16(644);
+emit_16(711);
+emit_16(645);
+emit_16(711);
+emit_16(644);
+emit_16(711);
+emit_16(645);
+emit_16(712);
+emit_16(646);
+emit_16(712);
+emit_16(645);
+emit_16(712);
+emit_16(646);
+emit_16(713);
+emit_16(647);
+emit_16(713);
+emit_16(646);
+emit_16(713);
+emit_16(647);
+emit_16(714);
+emit_16(648);
+emit_16(714);
+emit_16(647);
+emit_16(714);
+emit_16(648);
+emit_16(715);
+emit_16(649);
+emit_16(715);
+emit_16(648);
+emit_16(715);
+emit_16(649);
+emit_16(716);
+emit_16(650);
+emit_16(716);
+emit_16(649);
+emit_16(716);
+emit_16(650);
+emit_16(717);
+emit_16(651);
+emit_16(717);
+emit_16(650);
+emit_16(717);
+emit_16(651);
+emit_16(718);
+emit_16(652);
+emit_16(718);
+emit_16(651);
+emit_16(718);
+emit_16(652);
+emit_16(719);
+emit_16(653);
+emit_16(719);
+emit_16(652);
+emit_16(719);
+emit_16(653);
+emit_16(720);
+emit_16(654);
+emit_16(720);
+emit_16(653);
+emit_16(720);
+emit_16(654);
+emit_16(721);
+emit_16(655);
+emit_16(721);
+emit_16(654);
+emit_16(721);
+emit_16(655);
+emit_16(722);
+emit_16(656);
+emit_16(722);
+emit_16(655);
+emit_16(722);
+emit_16(656);
+emit_16(723);
+emit_16(657);
+emit_16(723);
+emit_16(656);
+emit_16(723);
+emit_16(657);
+emit_16(724);
+emit_16(658);
+emit_16(724);
+emit_16(657);
+emit_16(724);
+emit_16(658);
+emit_16(725);
+emit_16(659);
+emit_16(725);
+emit_16(658);
+emit_16(726);
+emit_16(660);
+emit_16(727);
+emit_16(661);
+emit_16(727);
+emit_16(660);
+emit_16(727);
+emit_16(661);
+emit_16(728);
+emit_16(662);
+emit_16(728);
+emit_16(661);
+emit_16(728);
+emit_16(662);
+emit_16(729);
+emit_16(663);
+emit_16(729);
+emit_16(662);
+emit_16(729);
+emit_16(663);
+emit_16(730);
+emit_16(664);
+emit_16(730);
+emit_16(663);
+emit_16(730);
+emit_16(664);
+emit_16(731);
+emit_16(665);
+emit_16(731);
+emit_16(664);
+emit_16(731);
+emit_16(665);
+emit_16(732);
+emit_16(666);
+emit_16(732);
+emit_16(665);
+emit_16(732);
+emit_16(666);
+emit_16(733);
+emit_16(667);
+emit_16(733);
+emit_16(666);
+emit_16(733);
+emit_16(667);
+emit_16(734);
+emit_16(668);
+emit_16(734);
+emit_16(667);
+emit_16(734);
+emit_16(668);
+emit_16(735);
+emit_16(669);
+emit_16(735);
+emit_16(668);
+emit_16(735);
+emit_16(669);
+emit_16(736);
+emit_16(670);
+emit_16(736);
+emit_16(669);
+emit_16(736);
+emit_16(670);
+emit_16(737);
+emit_16(671);
+emit_16(737);
+emit_16(670);
+emit_16(737);
+emit_16(671);
+emit_16(738);
+emit_16(672);
+emit_16(738);
+emit_16(671);
+emit_16(738);
+emit_16(672);
+emit_16(739);
+emit_16(673);
+emit_16(739);
+emit_16(672);
+emit_16(739);
+emit_16(673);
+emit_16(740);
+emit_16(674);
+emit_16(740);
+emit_16(673);
+emit_16(740);
+emit_16(674);
+emit_16(741);
+emit_16(675);
+emit_16(741);
+emit_16(674);
+emit_16(741);
+emit_16(675);
+emit_16(742);
+emit_16(676);
+emit_16(742);
+emit_16(675);
+emit_16(742);
+emit_16(676);
+emit_16(743);
+emit_16(677);
+emit_16(743);
+emit_16(676);
+emit_16(743);
+emit_16(677);
+emit_16(744);
+emit_16(678);
+emit_16(744);
+emit_16(677);
+emit_16(744);
+emit_16(678);
+emit_16(745);
+emit_16(679);
+emit_16(745);
+emit_16(678);
+emit_16(745);
+emit_16(679);
+emit_16(746);
+emit_16(680);
+emit_16(746);
+emit_16(679);
+emit_16(746);
+emit_16(680);
+emit_16(747);
+emit_16(681);
+emit_16(747);
+emit_16(680);
+emit_16(747);
+emit_16(681);
+emit_16(748);
+emit_16(682);
+emit_16(748);
+emit_16(681);
+emit_16(748);
+emit_16(682);
+emit_16(749);
+emit_16(683);
+emit_16(749);
+emit_16(682);
+emit_16(749);
+emit_16(683);
+emit_16(750);
+emit_16(684);
+emit_16(750);
+emit_16(683);
+emit_16(750);
+emit_16(684);
+emit_16(751);
+emit_16(685);
+emit_16(751);
+emit_16(684);
+emit_16(751);
+emit_16(685);
+emit_16(752);
+emit_16(686);
+emit_16(752);
+emit_16(685);
+emit_16(752);
+emit_16(686);
+emit_16(753);
+emit_16(687);
+emit_16(753);
+emit_16(686);
+emit_16(753);
+emit_16(687);
+emit_16(754);
+emit_16(688);
+emit_16(754);
+emit_16(687);
+emit_16(754);
+emit_16(688);
+emit_16(755);
+emit_16(689);
+emit_16(755);
+emit_16(688);
+emit_16(755);
+emit_16(689);
+emit_16(756);
+emit_16(690);
+emit_16(756);
+emit_16(689);
+emit_16(756);
+emit_16(690);
+emit_16(757);
+emit_16(691);
+emit_16(757);
+emit_16(690);
+emit_16(757);
+emit_16(691);
+emit_16(758);
+emit_16(692);
+emit_16(758);
+emit_16(691);
+emit_16(758);
+emit_16(692);
+emit_16(759);
+emit_16(693);
+emit_16(759);
+emit_16(692);
+emit_16(759);
+emit_16(693);
+emit_16(760);
+emit_16(694);
+emit_16(760);
+emit_16(693);
+emit_16(760);
+emit_16(694);
+emit_16(761);
+emit_16(695);
+emit_16(761);
+emit_16(694);
+emit_16(761);
+emit_16(695);
+emit_16(762);
+emit_16(696);
+emit_16(762);
+emit_16(695);
+emit_16(762);
+emit_16(696);
+emit_16(763);
+emit_16(697);
+emit_16(763);
+emit_16(696);
+emit_16(763);
+emit_16(697);
+emit_16(764);
+emit_16(698);
+emit_16(764);
+emit_16(697);
+emit_16(764);
+emit_16(698);
+emit_16(765);
+emit_16(699);
+emit_16(765);
+emit_16(698);
+emit_16(765);
+emit_16(699);
+emit_16(766);
+emit_16(700);
+emit_16(766);
+emit_16(699);
+emit_16(766);
+emit_16(700);
+emit_16(767);
+emit_16(701);
+emit_16(767);
+emit_16(700);
+emit_16(767);
+emit_16(701);
+emit_16(768);
+emit_16(702);
+emit_16(768);
+emit_16(701);
+emit_16(768);
+emit_16(702);
+emit_16(769);
+emit_16(703);
+emit_16(769);
+emit_16(702);
+emit_16(769);
+emit_16(703);
+emit_16(770);
+emit_16(704);
+emit_16(770);
+emit_16(703);
+emit_16(770);
+emit_16(704);
+emit_16(771);
+emit_16(705);
+emit_16(771);
+emit_16(704);
+emit_16(771);
+emit_16(705);
+emit_16(772);
+emit_16(706);
+emit_16(772);
+emit_16(705);
+emit_16(772);
+emit_16(706);
+emit_16(773);
+emit_16(707);
+emit_16(773);
+emit_16(706);
+emit_16(773);
+emit_16(707);
+emit_16(774);
+emit_16(708);
+emit_16(774);
+emit_16(707);
+emit_16(774);
+emit_16(708);
+emit_16(775);
+emit_16(709);
+emit_16(775);
+emit_16(708);
+emit_16(775);
+emit_16(709);
+emit_16(776);
+emit_16(710);
+emit_16(776);
+emit_16(709);
+emit_16(776);
+emit_16(710);
+emit_16(777);
+emit_16(711);
+emit_16(777);
+emit_16(710);
+emit_16(777);
+emit_16(711);
+emit_16(778);
+emit_16(712);
+emit_16(778);
+emit_16(711);
+emit_16(778);
+emit_16(712);
+emit_16(779);
+emit_16(713);
+emit_16(779);
+emit_16(712);
+emit_16(779);
+emit_16(713);
+emit_16(780);
+emit_16(714);
+emit_16(780);
+emit_16(713);
+emit_16(780);
+emit_16(714);
+emit_16(781);
+emit_16(715);
+emit_16(781);
+emit_16(714);
+emit_16(781);
+emit_16(715);
+emit_16(782);
+emit_16(716);
+emit_16(782);
+emit_16(715);
+emit_16(782);
+emit_16(716);
+emit_16(783);
+emit_16(717);
+emit_16(783);
+emit_16(716);
+emit_16(783);
+emit_16(717);
+emit_16(784);
+emit_16(718);
+emit_16(784);
+emit_16(717);
+emit_16(784);
+emit_16(718);
+emit_16(785);
+emit_16(719);
+emit_16(785);
+emit_16(718);
+emit_16(785);
+emit_16(719);
+emit_16(786);
+emit_16(720);
+emit_16(786);
+emit_16(719);
+emit_16(786);
+emit_16(720);
+emit_16(787);
+emit_16(721);
+emit_16(787);
+emit_16(720);
+emit_16(787);
+emit_16(721);
+emit_16(788);
+emit_16(722);
+emit_16(788);
+emit_16(721);
+emit_16(788);
+emit_16(722);
+emit_16(789);
+emit_16(723);
+emit_16(789);
+emit_16(722);
+emit_16(789);
+emit_16(723);
+emit_16(790);
+emit_16(724);
+emit_16(790);
+emit_16(723);
+emit_16(790);
+emit_16(724);
+emit_16(791);
+emit_16(725);
+emit_16(791);
+emit_16(724);
+emit_16(792);
+emit_16(726);
+emit_16(793);
+emit_16(727);
+emit_16(793);
+emit_16(726);
+emit_16(793);
+emit_16(727);
+emit_16(794);
+emit_16(728);
+emit_16(794);
+emit_16(727);
+emit_16(794);
+emit_16(728);
+emit_16(795);
+emit_16(729);
+emit_16(795);
+emit_16(728);
+emit_16(795);
+emit_16(729);
+emit_16(796);
+emit_16(730);
+emit_16(796);
+emit_16(729);
+emit_16(796);
+emit_16(730);
+emit_16(797);
+emit_16(731);
+emit_16(797);
+emit_16(730);
+emit_16(797);
+emit_16(731);
+emit_16(798);
+emit_16(732);
+emit_16(798);
+emit_16(731);
+emit_16(798);
+emit_16(732);
+emit_16(799);
+emit_16(733);
+emit_16(799);
+emit_16(732);
+emit_16(799);
+emit_16(733);
+emit_16(800);
+emit_16(734);
+emit_16(800);
+emit_16(733);
+emit_16(800);
+emit_16(734);
+emit_16(801);
+emit_16(735);
+emit_16(801);
+emit_16(734);
+emit_16(801);
+emit_16(735);
+emit_16(802);
+emit_16(736);
+emit_16(802);
+emit_16(735);
+emit_16(802);
+emit_16(736);
+emit_16(803);
+emit_16(737);
+emit_16(803);
+emit_16(736);
+emit_16(803);
+emit_16(737);
+emit_16(804);
+emit_16(738);
+emit_16(804);
+emit_16(737);
+emit_16(804);
+emit_16(738);
+emit_16(805);
+emit_16(739);
+emit_16(805);
+emit_16(738);
+emit_16(805);
+emit_16(739);
+emit_16(806);
+emit_16(740);
+emit_16(806);
+emit_16(739);
+emit_16(806);
+emit_16(740);
+emit_16(807);
+emit_16(741);
+emit_16(807);
+emit_16(740);
+emit_16(807);
+emit_16(741);
+emit_16(808);
+emit_16(742);
+emit_16(808);
+emit_16(741);
+emit_16(808);
+emit_16(742);
+emit_16(809);
+emit_16(743);
+emit_16(809);
+emit_16(742);
+emit_16(809);
+emit_16(743);
+emit_16(810);
+emit_16(744);
+emit_16(810);
+emit_16(743);
+emit_16(810);
+emit_16(744);
+emit_16(811);
+emit_16(745);
+emit_16(811);
+emit_16(744);
+emit_16(811);
+emit_16(745);
+emit_16(812);
+emit_16(746);
+emit_16(812);
+emit_16(745);
+emit_16(812);
+emit_16(746);
+emit_16(813);
+emit_16(747);
+emit_16(813);
+emit_16(746);
+emit_16(813);
+emit_16(747);
+emit_16(814);
+emit_16(748);
+emit_16(814);
+emit_16(747);
+emit_16(814);
+emit_16(748);
+emit_16(815);
+emit_16(749);
+emit_16(815);
+emit_16(748);
+emit_16(815);
+emit_16(749);
+emit_16(816);
+emit_16(750);
+emit_16(816);
+emit_16(749);
+emit_16(816);
+emit_16(750);
+emit_16(817);
+emit_16(751);
+emit_16(817);
+emit_16(750);
+emit_16(817);
+emit_16(751);
+emit_16(818);
+emit_16(752);
+emit_16(818);
+emit_16(751);
+emit_16(818);
+emit_16(752);
+emit_16(819);
+emit_16(753);
+emit_16(819);
+emit_16(752);
+emit_16(819);
+emit_16(753);
+emit_16(820);
+emit_16(754);
+emit_16(820);
+emit_16(753);
+emit_16(820);
+emit_16(754);
+emit_16(821);
+emit_16(755);
+emit_16(821);
+emit_16(754);
+emit_16(821);
+emit_16(755);
+emit_16(822);
+emit_16(756);
+emit_16(822);
+emit_16(755);
+emit_16(822);
+emit_16(756);
+emit_16(823);
+emit_16(757);
+emit_16(823);
+emit_16(756);
+emit_16(823);
+emit_16(757);
+emit_16(824);
+emit_16(758);
+emit_16(824);
+emit_16(757);
+emit_16(824);
+emit_16(758);
+emit_16(825);
+emit_16(759);
+emit_16(825);
+emit_16(758);
+emit_16(825);
+emit_16(759);
+emit_16(826);
+emit_16(760);
+emit_16(826);
+emit_16(759);
+emit_16(826);
+emit_16(760);
+emit_16(827);
+emit_16(761);
+emit_16(827);
+emit_16(760);
+emit_16(827);
+emit_16(761);
+emit_16(828);
+emit_16(762);
+emit_16(828);
+emit_16(761);
+emit_16(828);
+emit_16(762);
+emit_16(829);
+emit_16(763);
+emit_16(829);
+emit_16(762);
+emit_16(829);
+emit_16(763);
+emit_16(830);
+emit_16(764);
+emit_16(830);
+emit_16(763);
+emit_16(830);
+emit_16(764);
+emit_16(831);
+emit_16(765);
+emit_16(831);
+emit_16(764);
+emit_16(831);
+emit_16(765);
+emit_16(832);
+emit_16(766);
+emit_16(832);
+emit_16(765);
+emit_16(832);
+emit_16(766);
+emit_16(833);
+emit_16(767);
+emit_16(833);
+emit_16(766);
+emit_16(833);
+emit_16(767);
+emit_16(834);
+emit_16(768);
+emit_16(834);
+emit_16(767);
+emit_16(834);
+emit_16(768);
+emit_16(835);
+emit_16(769);
+emit_16(835);
+emit_16(768);
+emit_16(835);
+emit_16(769);
+emit_16(836);
+emit_16(770);
+emit_16(836);
+emit_16(769);
+emit_16(836);
+emit_16(770);
+emit_16(837);
+emit_16(771);
+emit_16(837);
+emit_16(770);
+emit_16(837);
+emit_16(771);
+emit_16(838);
+emit_16(772);
+emit_16(838);
+emit_16(771);
+emit_16(838);
+emit_16(772);
+emit_16(839);
+emit_16(773);
+emit_16(839);
+emit_16(772);
+emit_16(839);
+emit_16(773);
+emit_16(840);
+emit_16(774);
+emit_16(840);
+emit_16(773);
+emit_16(840);
+emit_16(774);
+emit_16(841);
+emit_16(775);
+emit_16(841);
+emit_16(774);
+emit_16(841);
+emit_16(775);
+emit_16(842);
+emit_16(776);
+emit_16(842);
+emit_16(775);
+emit_16(842);
+emit_16(776);
+emit_16(843);
+emit_16(777);
+emit_16(843);
+emit_16(776);
+emit_16(843);
+emit_16(777);
+emit_16(844);
+emit_16(778);
+emit_16(844);
+emit_16(777);
+emit_16(844);
+emit_16(778);
+emit_16(845);
+emit_16(779);
+emit_16(845);
+emit_16(778);
+emit_16(845);
+emit_16(779);
+emit_16(846);
+emit_16(780);
+emit_16(846);
+emit_16(779);
+emit_16(846);
+emit_16(780);
+emit_16(847);
+emit_16(781);
+emit_16(847);
+emit_16(780);
+emit_16(847);
+emit_16(781);
+emit_16(848);
+emit_16(782);
+emit_16(848);
+emit_16(781);
+emit_16(848);
+emit_16(782);
+emit_16(849);
+emit_16(783);
+emit_16(849);
+emit_16(782);
+emit_16(849);
+emit_16(783);
+emit_16(850);
+emit_16(784);
+emit_16(850);
+emit_16(783);
+emit_16(850);
+emit_16(784);
+emit_16(851);
+emit_16(785);
+emit_16(851);
+emit_16(784);
+emit_16(851);
+emit_16(785);
+emit_16(852);
+emit_16(786);
+emit_16(852);
+emit_16(785);
+emit_16(852);
+emit_16(786);
+emit_16(853);
+emit_16(787);
+emit_16(853);
+emit_16(786);
+emit_16(853);
+emit_16(787);
+emit_16(854);
+emit_16(788);
+emit_16(854);
+emit_16(787);
+emit_16(854);
+emit_16(788);
+emit_16(855);
+emit_16(789);
+emit_16(855);
+emit_16(788);
+emit_16(855);
+emit_16(789);
+emit_16(856);
+emit_16(790);
+emit_16(856);
+emit_16(789);
+emit_16(856);
+emit_16(790);
+emit_16(857);
+emit_16(791);
+emit_16(857);
+emit_16(790);
+emit_16(858);
+emit_16(792);
+emit_16(859);
+emit_16(793);
+emit_16(859);
+emit_16(792);
+emit_16(859);
+emit_16(793);
+emit_16(860);
+emit_16(794);
+emit_16(860);
+emit_16(793);
+emit_16(860);
+emit_16(794);
+emit_16(861);
+emit_16(795);
+emit_16(861);
+emit_16(794);
+emit_16(861);
+emit_16(795);
+emit_16(862);
+emit_16(796);
+emit_16(862);
+emit_16(795);
+emit_16(862);
+emit_16(796);
+emit_16(863);
+emit_16(797);
+emit_16(863);
+emit_16(796);
+emit_16(863);
+emit_16(797);
+emit_16(864);
+emit_16(798);
+emit_16(864);
+emit_16(797);
+emit_16(864);
+emit_16(798);
+emit_16(865);
+emit_16(799);
+emit_16(865);
+emit_16(798);
+emit_16(865);
+emit_16(799);
+emit_16(866);
+emit_16(800);
+emit_16(866);
+emit_16(799);
+emit_16(866);
+emit_16(800);
+emit_16(867);
+emit_16(801);
+emit_16(867);
+emit_16(800);
+emit_16(867);
+emit_16(801);
+emit_16(868);
+emit_16(802);
+emit_16(868);
+emit_16(801);
+emit_16(868);
+emit_16(802);
+emit_16(869);
+emit_16(803);
+emit_16(869);
+emit_16(802);
+emit_16(869);
+emit_16(803);
+emit_16(870);
+emit_16(804);
+emit_16(870);
+emit_16(803);
+emit_16(870);
+emit_16(804);
+emit_16(871);
+emit_16(805);
+emit_16(871);
+emit_16(804);
+emit_16(871);
+emit_16(805);
+emit_16(872);
+emit_16(806);
+emit_16(872);
+emit_16(805);
+emit_16(872);
+emit_16(806);
+emit_16(873);
+emit_16(807);
+emit_16(873);
+emit_16(806);
+emit_16(873);
+emit_16(807);
+emit_16(874);
+emit_16(808);
+emit_16(874);
+emit_16(807);
+emit_16(874);
+emit_16(808);
+emit_16(875);
+emit_16(809);
+emit_16(875);
+emit_16(808);
+emit_16(875);
+emit_16(809);
+emit_16(876);
+emit_16(810);
+emit_16(876);
+emit_16(809);
+emit_16(876);
+emit_16(810);
+emit_16(877);
+emit_16(811);
+emit_16(877);
+emit_16(810);
+emit_16(877);
+emit_16(811);
+emit_16(878);
+emit_16(812);
+emit_16(878);
+emit_16(811);
+emit_16(878);
+emit_16(812);
+emit_16(879);
+emit_16(813);
+emit_16(879);
+emit_16(812);
+emit_16(879);
+emit_16(813);
+emit_16(880);
+emit_16(814);
+emit_16(880);
+emit_16(813);
+emit_16(880);
+emit_16(814);
+emit_16(881);
+emit_16(815);
+emit_16(881);
+emit_16(814);
+emit_16(881);
+emit_16(815);
+emit_16(882);
+emit_16(816);
+emit_16(882);
+emit_16(815);
+emit_16(882);
+emit_16(816);
+emit_16(883);
+emit_16(817);
+emit_16(883);
+emit_16(816);
+emit_16(883);
+emit_16(817);
+emit_16(884);
+emit_16(818);
+emit_16(884);
+emit_16(817);
+emit_16(884);
+emit_16(818);
+emit_16(885);
+emit_16(819);
+emit_16(885);
+emit_16(818);
+emit_16(885);
+emit_16(819);
+emit_16(886);
+emit_16(820);
+emit_16(886);
+emit_16(819);
+emit_16(886);
+emit_16(820);
+emit_16(887);
+emit_16(821);
+emit_16(887);
+emit_16(820);
+emit_16(887);
+emit_16(821);
+emit_16(888);
+emit_16(822);
+emit_16(888);
+emit_16(821);
+emit_16(888);
+emit_16(822);
+emit_16(889);
+emit_16(823);
+emit_16(889);
+emit_16(822);
+emit_16(889);
+emit_16(823);
+emit_16(890);
+emit_16(824);
+emit_16(890);
+emit_16(823);
+emit_16(890);
+emit_16(824);
+emit_16(891);
+emit_16(825);
+emit_16(891);
+emit_16(824);
+emit_16(891);
+emit_16(825);
+emit_16(892);
+emit_16(826);
+emit_16(892);
+emit_16(825);
+emit_16(892);
+emit_16(826);
+emit_16(893);
+emit_16(827);
+emit_16(893);
+emit_16(826);
+emit_16(893);
+emit_16(827);
+emit_16(894);
+emit_16(828);
+emit_16(894);
+emit_16(827);
+emit_16(894);
+emit_16(828);
+emit_16(895);
+emit_16(829);
+emit_16(895);
+emit_16(828);
+emit_16(895);
+emit_16(829);
+emit_16(896);
+emit_16(830);
+emit_16(896);
+emit_16(829);
+emit_16(896);
+emit_16(830);
+emit_16(897);
+emit_16(831);
+emit_16(897);
+emit_16(830);
+emit_16(897);
+emit_16(831);
+emit_16(898);
+emit_16(832);
+emit_16(898);
+emit_16(831);
+emit_16(898);
+emit_16(832);
+emit_16(899);
+emit_16(833);
+emit_16(899);
+emit_16(832);
+emit_16(899);
+emit_16(833);
+emit_16(900);
+emit_16(834);
+emit_16(900);
+emit_16(833);
+emit_16(900);
+emit_16(834);
+emit_16(901);
+emit_16(835);
+emit_16(901);
+emit_16(834);
+emit_16(901);
+emit_16(835);
+emit_16(902);
+emit_16(836);
+emit_16(902);
+emit_16(835);
+emit_16(902);
+emit_16(836);
+emit_16(903);
+emit_16(837);
+emit_16(903);
+emit_16(836);
+emit_16(903);
+emit_16(837);
+emit_16(904);
+emit_16(838);
+emit_16(904);
+emit_16(837);
+emit_16(904);
+emit_16(838);
+emit_16(905);
+emit_16(839);
+emit_16(905);
+emit_16(838);
+emit_16(905);
+emit_16(839);
+emit_16(906);
+emit_16(840);
+emit_16(906);
+emit_16(839);
+emit_16(906);
+emit_16(840);
+emit_16(907);
+emit_16(841);
+emit_16(907);
+emit_16(840);
+emit_16(907);
+emit_16(841);
+emit_16(908);
+emit_16(842);
+emit_16(908);
+emit_16(841);
+emit_16(908);
+emit_16(842);
+emit_16(909);
+emit_16(843);
+emit_16(909);
+emit_16(842);
+emit_16(909);
+emit_16(843);
+emit_16(910);
+emit_16(844);
+emit_16(910);
+emit_16(843);
+emit_16(910);
+emit_16(844);
+emit_16(911);
+emit_16(845);
+emit_16(911);
+emit_16(844);
+emit_16(911);
+emit_16(845);
+emit_16(912);
+emit_16(846);
+emit_16(912);
+emit_16(845);
+emit_16(912);
+emit_16(846);
+emit_16(913);
+emit_16(847);
+emit_16(913);
+emit_16(846);
+emit_16(913);
+emit_16(847);
+emit_16(914);
+emit_16(848);
+emit_16(914);
+emit_16(847);
+emit_16(914);
+emit_16(848);
+emit_16(915);
+emit_16(849);
+emit_16(915);
+emit_16(848);
+emit_16(915);
+emit_16(849);
+emit_16(916);
+emit_16(850);
+emit_16(916);
+emit_16(849);
+emit_16(916);
+emit_16(850);
+emit_16(917);
+emit_16(851);
+emit_16(917);
+emit_16(850);
+emit_16(917);
+emit_16(851);
+emit_16(918);
+emit_16(852);
+emit_16(918);
+emit_16(851);
+emit_16(918);
+emit_16(852);
+emit_16(919);
+emit_16(853);
+emit_16(919);
+emit_16(852);
+emit_16(919);
+emit_16(853);
+emit_16(920);
+emit_16(854);
+emit_16(920);
+emit_16(853);
+emit_16(920);
+emit_16(854);
+emit_16(921);
+emit_16(855);
+emit_16(921);
+emit_16(854);
+emit_16(921);
+emit_16(855);
+emit_16(922);
+emit_16(856);
+emit_16(922);
+emit_16(855);
+emit_16(922);
+emit_16(856);
+emit_16(923);
+emit_16(857);
+emit_16(923);
+emit_16(856);
+emit_16(924);
+emit_16(858);
+emit_16(925);
+emit_16(859);
+emit_16(925);
+emit_16(858);
+emit_16(925);
+emit_16(859);
+emit_16(926);
+emit_16(860);
+emit_16(926);
+emit_16(859);
+emit_16(926);
+emit_16(860);
+emit_16(927);
+emit_16(861);
+emit_16(927);
+emit_16(860);
+emit_16(927);
+emit_16(861);
+emit_16(928);
+emit_16(862);
+emit_16(928);
+emit_16(861);
+emit_16(928);
+emit_16(862);
+emit_16(929);
+emit_16(863);
+emit_16(929);
+emit_16(862);
+emit_16(929);
+emit_16(863);
+emit_16(930);
+emit_16(864);
+emit_16(930);
+emit_16(863);
+emit_16(930);
+emit_16(864);
+emit_16(931);
+emit_16(865);
+emit_16(931);
+emit_16(864);
+emit_16(931);
+emit_16(865);
+emit_16(932);
+emit_16(866);
+emit_16(932);
+emit_16(865);
+emit_16(932);
+emit_16(866);
+emit_16(933);
+emit_16(867);
+emit_16(933);
+emit_16(866);
+emit_16(933);
+emit_16(867);
+emit_16(934);
+emit_16(868);
+emit_16(934);
+emit_16(867);
+emit_16(934);
+emit_16(868);
+emit_16(935);
+emit_16(869);
+emit_16(935);
+emit_16(868);
+emit_16(935);
+emit_16(869);
+emit_16(936);
+emit_16(870);
+emit_16(936);
+emit_16(869);
+emit_16(936);
+emit_16(870);
+emit_16(937);
+emit_16(871);
+emit_16(937);
+emit_16(870);
+emit_16(937);
+emit_16(871);
+emit_16(938);
+emit_16(872);
+emit_16(938);
+emit_16(871);
+emit_16(938);
+emit_16(872);
+emit_16(939);
+emit_16(873);
+emit_16(939);
+emit_16(872);
+emit_16(939);
+emit_16(873);
+emit_16(940);
+emit_16(874);
+emit_16(940);
+emit_16(873);
+emit_16(940);
+emit_16(874);
+emit_16(941);
+emit_16(875);
+emit_16(941);
+emit_16(874);
+emit_16(941);
+emit_16(875);
+emit_16(942);
+emit_16(876);
+emit_16(942);
+emit_16(875);
+emit_16(942);
+emit_16(876);
+emit_16(943);
+emit_16(877);
+emit_16(943);
+emit_16(876);
+emit_16(943);
+emit_16(877);
+emit_16(944);
+emit_16(878);
+emit_16(944);
+emit_16(877);
+emit_16(944);
+emit_16(878);
+emit_16(945);
+emit_16(879);
+emit_16(945);
+emit_16(878);
+emit_16(945);
+emit_16(879);
+emit_16(946);
+emit_16(880);
+emit_16(946);
+emit_16(879);
+emit_16(946);
+emit_16(880);
+emit_16(947);
+emit_16(881);
+emit_16(947);
+emit_16(880);
+emit_16(947);
+emit_16(881);
+emit_16(948);
+emit_16(882);
+emit_16(948);
+emit_16(881);
+emit_16(948);
+emit_16(882);
+emit_16(949);
+emit_16(883);
+emit_16(949);
+emit_16(882);
+emit_16(949);
+emit_16(883);
+emit_16(950);
+emit_16(884);
+emit_16(950);
+emit_16(883);
+emit_16(950);
+emit_16(884);
+emit_16(951);
+emit_16(885);
+emit_16(951);
+emit_16(884);
+emit_16(951);
+emit_16(885);
+emit_16(952);
+emit_16(886);
+emit_16(952);
+emit_16(885);
+emit_16(952);
+emit_16(886);
+emit_16(953);
+emit_16(887);
+emit_16(953);
+emit_16(886);
+emit_16(953);
+emit_16(887);
+emit_16(954);
+emit_16(888);
+emit_16(954);
+emit_16(887);
+emit_16(954);
+emit_16(888);
+emit_16(955);
+emit_16(889);
+emit_16(955);
+emit_16(888);
+emit_16(955);
+emit_16(889);
+emit_16(956);
+emit_16(890);
+emit_16(956);
+emit_16(889);
+emit_16(956);
+emit_16(890);
+emit_16(957);
+emit_16(891);
+emit_16(957);
+emit_16(890);
+emit_16(957);
+emit_16(891);
+emit_16(958);
+emit_16(892);
+emit_16(958);
+emit_16(891);
+emit_16(958);
+emit_16(892);
+emit_16(959);
+emit_16(893);
+emit_16(959);
+emit_16(892);
+emit_16(959);
+emit_16(893);
+emit_16(960);
+emit_16(894);
+emit_16(960);
+emit_16(893);
+emit_16(960);
+emit_16(894);
+emit_16(961);
+emit_16(895);
+emit_16(961);
+emit_16(894);
+emit_16(961);
+emit_16(895);
+emit_16(962);
+emit_16(896);
+emit_16(962);
+emit_16(895);
+emit_16(962);
+emit_16(896);
+emit_16(963);
+emit_16(897);
+emit_16(963);
+emit_16(896);
+emit_16(963);
+emit_16(897);
+emit_16(964);
+emit_16(898);
+emit_16(964);
+emit_16(897);
+emit_16(964);
+emit_16(898);
+emit_16(965);
+emit_16(899);
+emit_16(965);
+emit_16(898);
+emit_16(965);
+emit_16(899);
+emit_16(966);
+emit_16(900);
+emit_16(966);
+emit_16(899);
+emit_16(966);
+emit_16(900);
+emit_16(967);
+emit_16(901);
+emit_16(967);
+emit_16(900);
+emit_16(967);
+emit_16(901);
+emit_16(968);
+emit_16(902);
+emit_16(968);
+emit_16(901);
+emit_16(968);
+emit_16(902);
+emit_16(969);
+emit_16(903);
+emit_16(969);
+emit_16(902);
+emit_16(969);
+emit_16(903);
+emit_16(970);
+emit_16(904);
+emit_16(970);
+emit_16(903);
+emit_16(970);
+emit_16(904);
+emit_16(971);
+emit_16(905);
+emit_16(971);
+emit_16(904);
+emit_16(971);
+emit_16(905);
+emit_16(972);
+emit_16(906);
+emit_16(972);
+emit_16(905);
+emit_16(972);
+emit_16(906);
+emit_16(973);
+emit_16(907);
+emit_16(973);
+emit_16(906);
+emit_16(973);
+emit_16(907);
+emit_16(974);
+emit_16(908);
+emit_16(974);
+emit_16(907);
+emit_16(974);
+emit_16(908);
+emit_16(975);
+emit_16(909);
+emit_16(975);
+emit_16(908);
+emit_16(975);
+emit_16(909);
+emit_16(976);
+emit_16(910);
+emit_16(976);
+emit_16(909);
+emit_16(976);
+emit_16(910);
+emit_16(977);
+emit_16(911);
+emit_16(977);
+emit_16(910);
+emit_16(977);
+emit_16(911);
+emit_16(978);
+emit_16(912);
+emit_16(978);
+emit_16(911);
+emit_16(978);
+emit_16(912);
+emit_16(979);
+emit_16(913);
+emit_16(979);
+emit_16(912);
+emit_16(979);
+emit_16(913);
+emit_16(980);
+emit_16(914);
+emit_16(980);
+emit_16(913);
+emit_16(980);
+emit_16(914);
+emit_16(981);
+emit_16(915);
+emit_16(981);
+emit_16(914);
+emit_16(981);
+emit_16(915);
+emit_16(982);
+emit_16(916);
+emit_16(982);
+emit_16(915);
+emit_16(982);
+emit_16(916);
+emit_16(983);
+emit_16(917);
+emit_16(983);
+emit_16(916);
+emit_16(983);
+emit_16(917);
+emit_16(984);
+emit_16(918);
+emit_16(984);
+emit_16(917);
+emit_16(984);
+emit_16(918);
+emit_16(985);
+emit_16(919);
+emit_16(985);
+emit_16(918);
+emit_16(985);
+emit_16(919);
+emit_16(986);
+emit_16(920);
+emit_16(986);
+emit_16(919);
+emit_16(986);
+emit_16(920);
+emit_16(987);
+emit_16(921);
+emit_16(987);
+emit_16(920);
+emit_16(987);
+emit_16(921);
+emit_16(988);
+emit_16(922);
+emit_16(988);
+emit_16(921);
+emit_16(988);
+emit_16(922);
+emit_16(989);
+emit_16(923);
+emit_16(989);
+emit_16(922);
+emit_16(990);
+emit_16(924);
+emit_16(991);
+emit_16(925);
+emit_16(991);
+emit_16(924);
+emit_16(991);
+emit_16(925);
+emit_16(992);
+emit_16(926);
+emit_16(992);
+emit_16(925);
+emit_16(992);
+emit_16(926);
+emit_16(993);
+emit_16(927);
+emit_16(993);
+emit_16(926);
+emit_16(993);
+emit_16(927);
+emit_16(994);
+emit_16(928);
+emit_16(994);
+emit_16(927);
+emit_16(994);
+emit_16(928);
+emit_16(995);
+emit_16(929);
+emit_16(995);
+emit_16(928);
+emit_16(995);
+emit_16(929);
+emit_16(996);
+emit_16(930);
+emit_16(996);
+emit_16(929);
+emit_16(996);
+emit_16(930);
+emit_16(997);
+emit_16(931);
+emit_16(997);
+emit_16(930);
+emit_16(997);
+emit_16(931);
+emit_16(998);
+emit_16(932);
+emit_16(998);
+emit_16(931);
+emit_16(998);
+emit_16(932);
+emit_16(999);
+emit_16(933);
+emit_16(999);
+emit_16(932);
+emit_16(999);
+emit_16(933);
+emit_16(1000);
+emit_16(934);
+emit_16(1000);
+emit_16(933);
+emit_16(1000);
+emit_16(934);
+emit_16(1001);
+emit_16(935);
+emit_16(1001);
+emit_16(934);
+emit_16(1001);
+emit_16(935);
+emit_16(1002);
+emit_16(936);
+emit_16(1002);
+emit_16(935);
+emit_16(1002);
+emit_16(936);
+emit_16(1003);
+emit_16(937);
+emit_16(1003);
+emit_16(936);
+emit_16(1003);
+emit_16(937);
+emit_16(1004);
+emit_16(938);
+emit_16(1004);
+emit_16(937);
+emit_16(1004);
+emit_16(938);
+emit_16(1005);
+emit_16(939);
+emit_16(1005);
+emit_16(938);
+emit_16(1005);
+emit_16(939);
+emit_16(1006);
+emit_16(940);
+emit_16(1006);
+emit_16(939);
+emit_16(1006);
+emit_16(940);
+emit_16(1007);
+emit_16(941);
+emit_16(1007);
+emit_16(940);
+emit_16(1007);
+emit_16(941);
+emit_16(1008);
+emit_16(942);
+emit_16(1008);
+emit_16(941);
+emit_16(1008);
+emit_16(942);
+emit_16(1009);
+emit_16(943);
+emit_16(1009);
+emit_16(942);
+emit_16(1009);
+emit_16(943);
+emit_16(1010);
+emit_16(944);
+emit_16(1010);
+emit_16(943);
+emit_16(1010);
+emit_16(944);
+emit_16(1011);
+emit_16(945);
+emit_16(1011);
+emit_16(944);
+emit_16(1011);
+emit_16(945);
+emit_16(1012);
+emit_16(946);
+emit_16(1012);
+emit_16(945);
+emit_16(1012);
+emit_16(946);
+emit_16(1013);
+emit_16(947);
+emit_16(1013);
+emit_16(946);
+emit_16(1013);
+emit_16(947);
+emit_16(1014);
+emit_16(948);
+emit_16(1014);
+emit_16(947);
+emit_16(1014);
+emit_16(948);
+emit_16(1015);
+emit_16(949);
+emit_16(1015);
+emit_16(948);
+emit_16(1015);
+emit_16(949);
+emit_16(1016);
+emit_16(950);
+emit_16(1016);
+emit_16(949);
+emit_16(1016);
+emit_16(950);
+emit_16(1017);
+emit_16(951);
+emit_16(1017);
+emit_16(950);
+emit_16(1017);
+emit_16(951);
+emit_16(1018);
+emit_16(952);
+emit_16(1018);
+emit_16(951);
+emit_16(1018);
+emit_16(952);
+emit_16(1019);
+emit_16(953);
+emit_16(1019);
+emit_16(952);
+emit_16(1019);
+emit_16(953);
+emit_16(1020);
+emit_16(954);
+emit_16(1020);
+emit_16(953);
+emit_16(1020);
+emit_16(954);
+emit_16(1021);
+emit_16(955);
+emit_16(1021);
+emit_16(954);
+emit_16(1021);
+emit_16(955);
+emit_16(1022);
+emit_16(956);
+emit_16(1022);
+emit_16(955);
+emit_16(1022);
+emit_16(956);
+emit_16(1023);
+emit_16(957);
+emit_16(1023);
+emit_16(956);
+emit_16(1023);
+emit_16(957);
+emit_16(1024);
+emit_16(958);
+emit_16(1024);
+emit_16(957);
+emit_16(1024);
+emit_16(958);
+emit_16(1025);
+emit_16(959);
+emit_16(1025);
+emit_16(958);
+emit_16(1025);
+emit_16(959);
+emit_16(1026);
+emit_16(960);
+emit_16(1026);
+emit_16(959);
+emit_16(1026);
+emit_16(960);
+emit_16(1027);
+emit_16(961);
+emit_16(1027);
+emit_16(960);
+emit_16(1027);
+emit_16(961);
+emit_16(1028);
+emit_16(962);
+emit_16(1028);
+emit_16(961);
+emit_16(1028);
+emit_16(962);
+emit_16(1029);
+emit_16(963);
+emit_16(1029);
+emit_16(962);
+emit_16(1029);
+emit_16(963);
+emit_16(1030);
+emit_16(964);
+emit_16(1030);
+emit_16(963);
+emit_16(1030);
+emit_16(964);
+emit_16(1031);
+emit_16(965);
+emit_16(1031);
+emit_16(964);
+emit_16(1031);
+emit_16(965);
+emit_16(1032);
+emit_16(966);
+emit_16(1032);
+emit_16(965);
+emit_16(1032);
+emit_16(966);
+emit_16(1033);
+emit_16(967);
+emit_16(1033);
+emit_16(966);
+emit_16(1033);
+emit_16(967);
+emit_16(1034);
+emit_16(968);
+emit_16(1034);
+emit_16(967);
+emit_16(1034);
+emit_16(968);
+emit_16(1035);
+emit_16(969);
+emit_16(1035);
+emit_16(968);
+emit_16(1035);
+emit_16(969);
+emit_16(1036);
+emit_16(970);
+emit_16(1036);
+emit_16(969);
+emit_16(1036);
+emit_16(970);
+emit_16(1037);
+emit_16(971);
+emit_16(1037);
+emit_16(970);
+emit_16(1037);
+emit_16(971);
+emit_16(1038);
+emit_16(972);
+emit_16(1038);
+emit_16(971);
+emit_16(1038);
+emit_16(972);
+emit_16(1039);
+emit_16(973);
+emit_16(1039);
+emit_16(972);
+emit_16(1039);
+emit_16(973);
+emit_16(1040);
+emit_16(974);
+emit_16(1040);
+emit_16(973);
+emit_16(1040);
+emit_16(974);
+emit_16(1041);
+emit_16(975);
+emit_16(1041);
+emit_16(974);
+emit_16(1041);
+emit_16(975);
+emit_16(1042);
+emit_16(976);
+emit_16(1042);
+emit_16(975);
+emit_16(1042);
+emit_16(976);
+emit_16(1043);
+emit_16(977);
+emit_16(1043);
+emit_16(976);
+emit_16(1043);
+emit_16(977);
+emit_16(1044);
+emit_16(978);
+emit_16(1044);
+emit_16(977);
+emit_16(1044);
+emit_16(978);
+emit_16(1045);
+emit_16(979);
+emit_16(1045);
+emit_16(978);
+emit_16(1045);
+emit_16(979);
+emit_16(1046);
+emit_16(980);
+emit_16(1046);
+emit_16(979);
+emit_16(1046);
+emit_16(980);
+emit_16(1047);
+emit_16(981);
+emit_16(1047);
+emit_16(980);
+emit_16(1047);
+emit_16(981);
+emit_16(1048);
+emit_16(982);
+emit_16(1048);
+emit_16(981);
+emit_16(1048);
+emit_16(982);
+emit_16(1049);
+emit_16(983);
+emit_16(1049);
+emit_16(982);
+emit_16(1049);
+emit_16(983);
+emit_16(1050);
+emit_16(984);
+emit_16(1050);
+emit_16(983);
+emit_16(1050);
+emit_16(984);
+emit_16(1051);
+emit_16(985);
+emit_16(1051);
+emit_16(984);
+emit_16(1051);
+emit_16(985);
+emit_16(1052);
+emit_16(986);
+emit_16(1052);
+emit_16(985);
+emit_16(1052);
+emit_16(986);
+emit_16(1053);
+emit_16(987);
+emit_16(1053);
+emit_16(986);
+emit_16(1053);
+emit_16(987);
+emit_16(1054);
+emit_16(988);
+emit_16(1054);
+emit_16(987);
+emit_16(1054);
+emit_16(988);
+emit_16(1055);
+emit_16(989);
+emit_16(1055);
+emit_16(988);
+emit_16(1056);
+emit_16(990);
+emit_16(1057);
+emit_16(991);
+emit_16(1057);
+emit_16(990);
+emit_16(1057);
+emit_16(991);
+emit_16(1058);
+emit_16(992);
+emit_16(1058);
+emit_16(991);
+emit_16(1058);
+emit_16(992);
+emit_16(1059);
+emit_16(993);
+emit_16(1059);
+emit_16(992);
+emit_16(1059);
+emit_16(993);
+emit_16(1060);
+emit_16(994);
+emit_16(1060);
+emit_16(993);
+emit_16(1060);
+emit_16(994);
+emit_16(1061);
+emit_16(995);
+emit_16(1061);
+emit_16(994);
+emit_16(1061);
+emit_16(995);
+emit_16(1062);
+emit_16(996);
+emit_16(1062);
+emit_16(995);
+emit_16(1062);
+emit_16(996);
+emit_16(1063);
+emit_16(997);
+emit_16(1063);
+emit_16(996);
+emit_16(1063);
+emit_16(997);
+emit_16(1064);
+emit_16(998);
+emit_16(1064);
+emit_16(997);
+emit_16(1064);
+emit_16(998);
+emit_16(1065);
+emit_16(999);
+emit_16(1065);
+emit_16(998);
+emit_16(1065);
+emit_16(999);
+emit_16(1066);
+emit_16(1000);
+emit_16(1066);
+emit_16(999);
+emit_16(1066);
+emit_16(1000);
+emit_16(1067);
+emit_16(1001);
+emit_16(1067);
+emit_16(1000);
+emit_16(1067);
+emit_16(1001);
+emit_16(1068);
+emit_16(1002);
+emit_16(1068);
+emit_16(1001);
+emit_16(1068);
+emit_16(1002);
+emit_16(1069);
+emit_16(1003);
+emit_16(1069);
+emit_16(1002);
+emit_16(1069);
+emit_16(1003);
+emit_16(1070);
+emit_16(1004);
+emit_16(1070);
+emit_16(1003);
+emit_16(1070);
+emit_16(1004);
+emit_16(1071);
+emit_16(1005);
+emit_16(1071);
+emit_16(1004);
+emit_16(1071);
+emit_16(1005);
+emit_16(1072);
+emit_16(1006);
+emit_16(1072);
+emit_16(1005);
+emit_16(1072);
+emit_16(1006);
+emit_16(1073);
+emit_16(1007);
+emit_16(1073);
+emit_16(1006);
+emit_16(1073);
+emit_16(1007);
+emit_16(1074);
+emit_16(1008);
+emit_16(1074);
+emit_16(1007);
+emit_16(1074);
+emit_16(1008);
+emit_16(1075);
+emit_16(1009);
+emit_16(1075);
+emit_16(1008);
+emit_16(1075);
+emit_16(1009);
+emit_16(1076);
+emit_16(1010);
+emit_16(1076);
+emit_16(1009);
+emit_16(1076);
+emit_16(1010);
+emit_16(1077);
+emit_16(1011);
+emit_16(1077);
+emit_16(1010);
+emit_16(1077);
+emit_16(1011);
+emit_16(1078);
+emit_16(1012);
+emit_16(1078);
+emit_16(1011);
+emit_16(1078);
+emit_16(1012);
+emit_16(1079);
+emit_16(1013);
+emit_16(1079);
+emit_16(1012);
+emit_16(1079);
+emit_16(1013);
+emit_16(1080);
+emit_16(1014);
+emit_16(1080);
+emit_16(1013);
+emit_16(1080);
+emit_16(1014);
+emit_16(1081);
+emit_16(1015);
+emit_16(1081);
+emit_16(1014);
+emit_16(1081);
+emit_16(1015);
+emit_16(1082);
+emit_16(1016);
+emit_16(1082);
+emit_16(1015);
+emit_16(1082);
+emit_16(1016);
+emit_16(1083);
+emit_16(1017);
+emit_16(1083);
+emit_16(1016);
+emit_16(1083);
+emit_16(1017);
+emit_16(1084);
+emit_16(1018);
+emit_16(1084);
+emit_16(1017);
+emit_16(1084);
+emit_16(1018);
+emit_16(1085);
+emit_16(1019);
+emit_16(1085);
+emit_16(1018);
+emit_16(1085);
+emit_16(1019);
+emit_16(1086);
+emit_16(1020);
+emit_16(1086);
+emit_16(1019);
+emit_16(1086);
+emit_16(1020);
+emit_16(1087);
+emit_16(1021);
+emit_16(1087);
+emit_16(1020);
+emit_16(1087);
+emit_16(1021);
+emit_16(1088);
+emit_16(1022);
+emit_16(1088);
+emit_16(1021);
+emit_16(1088);
+emit_16(1022);
+emit_16(1089);
+emit_16(1023);
+emit_16(1089);
+emit_16(1022);
+emit_16(1089);
+emit_16(1023);
+emit_16(1090);
+emit_16(1024);
+emit_16(1090);
+emit_16(1023);
+emit_16(1090);
+emit_16(1024);
+emit_16(1091);
+emit_16(1025);
+emit_16(1091);
+emit_16(1024);
+emit_16(1091);
+emit_16(1025);
+emit_16(1092);
+emit_16(1026);
+emit_16(1092);
+emit_16(1025);
+emit_16(1092);
+emit_16(1026);
+emit_16(1093);
+emit_16(1027);
+emit_16(1093);
+emit_16(1026);
+emit_16(1093);
+emit_16(1027);
+emit_16(1094);
+emit_16(1028);
+emit_16(1094);
+emit_16(1027);
+emit_16(1094);
+emit_16(1028);
+emit_16(1095);
+emit_16(1029);
+emit_16(1095);
+emit_16(1028);
+emit_16(1095);
+emit_16(1029);
+emit_16(1096);
+emit_16(1030);
+emit_16(1096);
+emit_16(1029);
+emit_16(1096);
+emit_16(1030);
+emit_16(1097);
+emit_16(1031);
+emit_16(1097);
+emit_16(1030);
+emit_16(1097);
+emit_16(1031);
+emit_16(1098);
+emit_16(1032);
+emit_16(1098);
+emit_16(1031);
+emit_16(1098);
+emit_16(1032);
+emit_16(1099);
+emit_16(1033);
+emit_16(1099);
+emit_16(1032);
+emit_16(1099);
+emit_16(1033);
+emit_16(1100);
+emit_16(1034);
+emit_16(1100);
+emit_16(1033);
+emit_16(1100);
+emit_16(1034);
+emit_16(1101);
+emit_16(1035);
+emit_16(1101);
+emit_16(1034);
+emit_16(1101);
+emit_16(1035);
+emit_16(1102);
+emit_16(1036);
+emit_16(1102);
+emit_16(1035);
+emit_16(1102);
+emit_16(1036);
+emit_16(1103);
+emit_16(1037);
+emit_16(1103);
+emit_16(1036);
+emit_16(1103);
+emit_16(1037);
+emit_16(1104);
+emit_16(1038);
+emit_16(1104);
+emit_16(1037);
+emit_16(1104);
+emit_16(1038);
+emit_16(1105);
+emit_16(1039);
+emit_16(1105);
+emit_16(1038);
+emit_16(1105);
+emit_16(1039);
+emit_16(1106);
+emit_16(1040);
+emit_16(1106);
+emit_16(1039);
+emit_16(1106);
+emit_16(1040);
+emit_16(1107);
+emit_16(1041);
+emit_16(1107);
+emit_16(1040);
+emit_16(1107);
+emit_16(1041);
+emit_16(1108);
+emit_16(1042);
+emit_16(1108);
+emit_16(1041);
+emit_16(1108);
+emit_16(1042);
+emit_16(1109);
+emit_16(1043);
+emit_16(1109);
+emit_16(1042);
+emit_16(1109);
+emit_16(1043);
+emit_16(1110);
+emit_16(1044);
+emit_16(1110);
+emit_16(1043);
+emit_16(1110);
+emit_16(1044);
+emit_16(1111);
+emit_16(1045);
+emit_16(1111);
+emit_16(1044);
+emit_16(1111);
+emit_16(1045);
+emit_16(1112);
+emit_16(1046);
+emit_16(1112);
+emit_16(1045);
+emit_16(1112);
+emit_16(1046);
+emit_16(1113);
+emit_16(1047);
+emit_16(1113);
+emit_16(1046);
+emit_16(1113);
+emit_16(1047);
+emit_16(1114);
+emit_16(1048);
+emit_16(1114);
+emit_16(1047);
+emit_16(1114);
+emit_16(1048);
+emit_16(1115);
+emit_16(1049);
+emit_16(1115);
+emit_16(1048);
+emit_16(1115);
+emit_16(1049);
+emit_16(1116);
+emit_16(1050);
+emit_16(1116);
+emit_16(1049);
+emit_16(1116);
+emit_16(1050);
+emit_16(1117);
+emit_16(1051);
+emit_16(1117);
+emit_16(1050);
+emit_16(1117);
+emit_16(1051);
+emit_16(1118);
+emit_16(1052);
+emit_16(1118);
+emit_16(1051);
+emit_16(1118);
+emit_16(1052);
+emit_16(1119);
+emit_16(1053);
+emit_16(1119);
+emit_16(1052);
+emit_16(1119);
+emit_16(1053);
+emit_16(1120);
+emit_16(1054);
+emit_16(1120);
+emit_16(1053);
+emit_16(1120);
+emit_16(1054);
+emit_16(1121);
+emit_16(1055);
+emit_16(1121);
+emit_16(1054);
+emit_16(1122);
+emit_16(1056);
+emit_16(1123);
+emit_16(1057);
+emit_16(1123);
+emit_16(1056);
+emit_16(1123);
+emit_16(1057);
+emit_16(1124);
+emit_16(1058);
+emit_16(1124);
+emit_16(1057);
+emit_16(1124);
+emit_16(1058);
+emit_16(1125);
+emit_16(1059);
+emit_16(1125);
+emit_16(1058);
+emit_16(1125);
+emit_16(1059);
+emit_16(1126);
+emit_16(1060);
+emit_16(1126);
+emit_16(1059);
+emit_16(1126);
+emit_16(1060);
+emit_16(1127);
+emit_16(1061);
+emit_16(1127);
+emit_16(1060);
+emit_16(1127);
+emit_16(1061);
+emit_16(1128);
+emit_16(1062);
+emit_16(1128);
+emit_16(1061);
+emit_16(1128);
+emit_16(1062);
+emit_16(1129);
+emit_16(1063);
+emit_16(1129);
+emit_16(1062);
+emit_16(1129);
+emit_16(1063);
+emit_16(1130);
+emit_16(1064);
+emit_16(1130);
+emit_16(1063);
+emit_16(1130);
+emit_16(1064);
+emit_16(1131);
+emit_16(1065);
+emit_16(1131);
+emit_16(1064);
+emit_16(1131);
+emit_16(1065);
+emit_16(1132);
+emit_16(1066);
+emit_16(1132);
+emit_16(1065);
+emit_16(1132);
+emit_16(1066);
+emit_16(1133);
+emit_16(1067);
+emit_16(1133);
+emit_16(1066);
+emit_16(1133);
+emit_16(1067);
+emit_16(1134);
+emit_16(1068);
+emit_16(1134);
+emit_16(1067);
+emit_16(1134);
+emit_16(1068);
+emit_16(1135);
+emit_16(1069);
+emit_16(1135);
+emit_16(1068);
+emit_16(1135);
+emit_16(1069);
+emit_16(1136);
+emit_16(1070);
+emit_16(1136);
+emit_16(1069);
+emit_16(1136);
+emit_16(1070);
+emit_16(1137);
+emit_16(1071);
+emit_16(1137);
+emit_16(1070);
+emit_16(1137);
+emit_16(1071);
+emit_16(1138);
+emit_16(1072);
+emit_16(1138);
+emit_16(1071);
+emit_16(1138);
+emit_16(1072);
+emit_16(1139);
+emit_16(1073);
+emit_16(1139);
+emit_16(1072);
+emit_16(1139);
+emit_16(1073);
+emit_16(1140);
+emit_16(1074);
+emit_16(1140);
+emit_16(1073);
+emit_16(1140);
+emit_16(1074);
+emit_16(1141);
+emit_16(1075);
+emit_16(1141);
+emit_16(1074);
+emit_16(1141);
+emit_16(1075);
+emit_16(1142);
+emit_16(1076);
+emit_16(1142);
+emit_16(1075);
+emit_16(1142);
+emit_16(1076);
+emit_16(1143);
+emit_16(1077);
+emit_16(1143);
+emit_16(1076);
+emit_16(1143);
+emit_16(1077);
+emit_16(1144);
+emit_16(1078);
+emit_16(1144);
+emit_16(1077);
+emit_16(1144);
+emit_16(1078);
+emit_16(1145);
+emit_16(1079);
+emit_16(1145);
+emit_16(1078);
+emit_16(1145);
+emit_16(1079);
+emit_16(1146);
+emit_16(1080);
+emit_16(1146);
+emit_16(1079);
+emit_16(1146);
+emit_16(1080);
+emit_16(1147);
+emit_16(1081);
+emit_16(1147);
+emit_16(1080);
+emit_16(1147);
+emit_16(1081);
+emit_16(1148);
+emit_16(1082);
+emit_16(1148);
+emit_16(1081);
+emit_16(1148);
+emit_16(1082);
+emit_16(1149);
+emit_16(1083);
+emit_16(1149);
+emit_16(1082);
+emit_16(1149);
+emit_16(1083);
+emit_16(1150);
+emit_16(1084);
+emit_16(1150);
+emit_16(1083);
+emit_16(1150);
+emit_16(1084);
+emit_16(1151);
+emit_16(1085);
+emit_16(1151);
+emit_16(1084);
+emit_16(1151);
+emit_16(1085);
+emit_16(1152);
+emit_16(1086);
+emit_16(1152);
+emit_16(1085);
+emit_16(1152);
+emit_16(1086);
+emit_16(1153);
+emit_16(1087);
+emit_16(1153);
+emit_16(1086);
+emit_16(1153);
+emit_16(1087);
+emit_16(1154);
+emit_16(1088);
+emit_16(1154);
+emit_16(1087);
+emit_16(1154);
+emit_16(1088);
+emit_16(1155);
+emit_16(1089);
+emit_16(1155);
+emit_16(1088);
+emit_16(1155);
+emit_16(1089);
+emit_16(1156);
+emit_16(1090);
+emit_16(1156);
+emit_16(1089);
+emit_16(1156);
+emit_16(1090);
+emit_16(1157);
+emit_16(1091);
+emit_16(1157);
+emit_16(1090);
+emit_16(1157);
+emit_16(1091);
+emit_16(1158);
+emit_16(1092);
+emit_16(1158);
+emit_16(1091);
+emit_16(1158);
+emit_16(1092);
+emit_16(1159);
+emit_16(1093);
+emit_16(1159);
+emit_16(1092);
+emit_16(1159);
+emit_16(1093);
+emit_16(1160);
+emit_16(1094);
+emit_16(1160);
+emit_16(1093);
+emit_16(1160);
+emit_16(1094);
+emit_16(1161);
+emit_16(1095);
+emit_16(1161);
+emit_16(1094);
+emit_16(1161);
+emit_16(1095);
+emit_16(1162);
+emit_16(1096);
+emit_16(1162);
+emit_16(1095);
+emit_16(1162);
+emit_16(1096);
+emit_16(1163);
+emit_16(1097);
+emit_16(1163);
+emit_16(1096);
+emit_16(1163);
+emit_16(1097);
+emit_16(1164);
+emit_16(1098);
+emit_16(1164);
+emit_16(1097);
+emit_16(1164);
+emit_16(1098);
+emit_16(1165);
+emit_16(1099);
+emit_16(1165);
+emit_16(1098);
+emit_16(1165);
+emit_16(1099);
+emit_16(1166);
+emit_16(1100);
+emit_16(1166);
+emit_16(1099);
+emit_16(1166);
+emit_16(1100);
+emit_16(1167);
+emit_16(1101);
+emit_16(1167);
+emit_16(1100);
+emit_16(1167);
+emit_16(1101);
+emit_16(1168);
+emit_16(1102);
+emit_16(1168);
+emit_16(1101);
+emit_16(1168);
+emit_16(1102);
+emit_16(1169);
+emit_16(1103);
+emit_16(1169);
+emit_16(1102);
+emit_16(1169);
+emit_16(1103);
+emit_16(1170);
+emit_16(1104);
+emit_16(1170);
+emit_16(1103);
+emit_16(1170);
+emit_16(1104);
+emit_16(1171);
+emit_16(1105);
+emit_16(1171);
+emit_16(1104);
+emit_16(1171);
+emit_16(1105);
+emit_16(1172);
+emit_16(1106);
+emit_16(1172);
+emit_16(1105);
+emit_16(1172);
+emit_16(1106);
+emit_16(1173);
+emit_16(1107);
+emit_16(1173);
+emit_16(1106);
+emit_16(1173);
+emit_16(1107);
+emit_16(1174);
+emit_16(1108);
+emit_16(1174);
+emit_16(1107);
+emit_16(1174);
+emit_16(1108);
+emit_16(1175);
+emit_16(1109);
+emit_16(1175);
+emit_16(1108);
+emit_16(1175);
+emit_16(1109);
+emit_16(1176);
+emit_16(1110);
+emit_16(1176);
+emit_16(1109);
+emit_16(1176);
+emit_16(1110);
+emit_16(1177);
+emit_16(1111);
+emit_16(1177);
+emit_16(1110);
+emit_16(1177);
+emit_16(1111);
+emit_16(1178);
+emit_16(1112);
+emit_16(1178);
+emit_16(1111);
+emit_16(1178);
+emit_16(1112);
+emit_16(1179);
+emit_16(1113);
+emit_16(1179);
+emit_16(1112);
+emit_16(1179);
+emit_16(1113);
+emit_16(1180);
+emit_16(1114);
+emit_16(1180);
+emit_16(1113);
+emit_16(1180);
+emit_16(1114);
+emit_16(1181);
+emit_16(1115);
+emit_16(1181);
+emit_16(1114);
+emit_16(1181);
+emit_16(1115);
+emit_16(1182);
+emit_16(1116);
+emit_16(1182);
+emit_16(1115);
+emit_16(1182);
+emit_16(1116);
+emit_16(1183);
+emit_16(1117);
+emit_16(1183);
+emit_16(1116);
+emit_16(1183);
+emit_16(1117);
+emit_16(1184);
+emit_16(1118);
+emit_16(1184);
+emit_16(1117);
+emit_16(1184);
+emit_16(1118);
+emit_16(1185);
+emit_16(1119);
+emit_16(1185);
+emit_16(1118);
+emit_16(1185);
+emit_16(1119);
+emit_16(1186);
+emit_16(1120);
+emit_16(1186);
+emit_16(1119);
+emit_16(1186);
+emit_16(1120);
+emit_16(1187);
+emit_16(1121);
+emit_16(1187);
+emit_16(1120);
+emit_16(1188);
+emit_16(1122);
+emit_16(1189);
+emit_16(1123);
+emit_16(1189);
+emit_16(1122);
+emit_16(1189);
+emit_16(1123);
+emit_16(1190);
+emit_16(1124);
+emit_16(1190);
+emit_16(1123);
+emit_16(1190);
+emit_16(1124);
+emit_16(1191);
+emit_16(1125);
+emit_16(1191);
+emit_16(1124);
+emit_16(1191);
+emit_16(1125);
+emit_16(1192);
+emit_16(1126);
+emit_16(1192);
+emit_16(1125);
+emit_16(1192);
+emit_16(1126);
+emit_16(1193);
+emit_16(1127);
+emit_16(1193);
+emit_16(1126);
+emit_16(1193);
+emit_16(1127);
+emit_16(1194);
+emit_16(1128);
+emit_16(1194);
+emit_16(1127);
+emit_16(1194);
+emit_16(1128);
+emit_16(1195);
+emit_16(1129);
+emit_16(1195);
+emit_16(1128);
+emit_16(1195);
+emit_16(1129);
+emit_16(1196);
+emit_16(1130);
+emit_16(1196);
+emit_16(1129);
+emit_16(1196);
+emit_16(1130);
+emit_16(1197);
+emit_16(1131);
+emit_16(1197);
+emit_16(1130);
+emit_16(1197);
+emit_16(1131);
+emit_16(1198);
+emit_16(1132);
+emit_16(1198);
+emit_16(1131);
+emit_16(1198);
+emit_16(1132);
+emit_16(1199);
+emit_16(1133);
+emit_16(1199);
+emit_16(1132);
+emit_16(1199);
+emit_16(1133);
+emit_16(1200);
+emit_16(1134);
+emit_16(1200);
+emit_16(1133);
+emit_16(1200);
+emit_16(1134);
+emit_16(1201);
+emit_16(1135);
+emit_16(1201);
+emit_16(1134);
+emit_16(1201);
+emit_16(1135);
+emit_16(1202);
+emit_16(1136);
+emit_16(1202);
+emit_16(1135);
+emit_16(1202);
+emit_16(1136);
+emit_16(1203);
+emit_16(1137);
+emit_16(1203);
+emit_16(1136);
+emit_16(1203);
+emit_16(1137);
+emit_16(1204);
+emit_16(1138);
+emit_16(1204);
+emit_16(1137);
+emit_16(1204);
+emit_16(1138);
+emit_16(1205);
+emit_16(1139);
+emit_16(1205);
+emit_16(1138);
+emit_16(1205);
+emit_16(1139);
+emit_16(1206);
+emit_16(1140);
+emit_16(1206);
+emit_16(1139);
+emit_16(1206);
+emit_16(1140);
+emit_16(1207);
+emit_16(1141);
+emit_16(1207);
+emit_16(1140);
+emit_16(1207);
+emit_16(1141);
+emit_16(1208);
+emit_16(1142);
+emit_16(1208);
+emit_16(1141);
+emit_16(1208);
+emit_16(1142);
+emit_16(1209);
+emit_16(1143);
+emit_16(1209);
+emit_16(1142);
+emit_16(1209);
+emit_16(1143);
+emit_16(1210);
+emit_16(1144);
+emit_16(1210);
+emit_16(1143);
+emit_16(1210);
+emit_16(1144);
+emit_16(1211);
+emit_16(1145);
+emit_16(1211);
+emit_16(1144);
+emit_16(1211);
+emit_16(1145);
+emit_16(1212);
+emit_16(1146);
+emit_16(1212);
+emit_16(1145);
+emit_16(1212);
+emit_16(1146);
+emit_16(1213);
+emit_16(1147);
+emit_16(1213);
+emit_16(1146);
+emit_16(1213);
+emit_16(1147);
+emit_16(1214);
+emit_16(1148);
+emit_16(1214);
+emit_16(1147);
+emit_16(1214);
+emit_16(1148);
+emit_16(1215);
+emit_16(1149);
+emit_16(1215);
+emit_16(1148);
+emit_16(1215);
+emit_16(1149);
+emit_16(1216);
+emit_16(1150);
+emit_16(1216);
+emit_16(1149);
+emit_16(1216);
+emit_16(1150);
+emit_16(1217);
+emit_16(1151);
+emit_16(1217);
+emit_16(1150);
+emit_16(1217);
+emit_16(1151);
+emit_16(1218);
+emit_16(1152);
+emit_16(1218);
+emit_16(1151);
+emit_16(1218);
+emit_16(1152);
+emit_16(1219);
+emit_16(1153);
+emit_16(1219);
+emit_16(1152);
+emit_16(1219);
+emit_16(1153);
+emit_16(1220);
+emit_16(1154);
+emit_16(1220);
+emit_16(1153);
+emit_16(1220);
+emit_16(1154);
+emit_16(1221);
+emit_16(1155);
+emit_16(1221);
+emit_16(1154);
+emit_16(1221);
+emit_16(1155);
+emit_16(1222);
+emit_16(1156);
+emit_16(1222);
+emit_16(1155);
+emit_16(1222);
+emit_16(1156);
+emit_16(1223);
+emit_16(1157);
+emit_16(1223);
+emit_16(1156);
+emit_16(1223);
+emit_16(1157);
+emit_16(1224);
+emit_16(1158);
+emit_16(1224);
+emit_16(1157);
+emit_16(1224);
+emit_16(1158);
+emit_16(1225);
+emit_16(1159);
+emit_16(1225);
+emit_16(1158);
+emit_16(1225);
+emit_16(1159);
+emit_16(1226);
+emit_16(1160);
+emit_16(1226);
+emit_16(1159);
+emit_16(1226);
+emit_16(1160);
+emit_16(1227);
+emit_16(1161);
+emit_16(1227);
+emit_16(1160);
+emit_16(1227);
+emit_16(1161);
+emit_16(1228);
+emit_16(1162);
+emit_16(1228);
+emit_16(1161);
+emit_16(1228);
+emit_16(1162);
+emit_16(1229);
+emit_16(1163);
+emit_16(1229);
+emit_16(1162);
+emit_16(1229);
+emit_16(1163);
+emit_16(1230);
+emit_16(1164);
+emit_16(1230);
+emit_16(1163);
+emit_16(1230);
+emit_16(1164);
+emit_16(1231);
+emit_16(1165);
+emit_16(1231);
+emit_16(1164);
+emit_16(1231);
+emit_16(1165);
+emit_16(1232);
+emit_16(1166);
+emit_16(1232);
+emit_16(1165);
+emit_16(1232);
+emit_16(1166);
+emit_16(1233);
+emit_16(1167);
+emit_16(1233);
+emit_16(1166);
+emit_16(1233);
+emit_16(1167);
+emit_16(1234);
+emit_16(1168);
+emit_16(1234);
+emit_16(1167);
+emit_16(1234);
+emit_16(1168);
+emit_16(1235);
+emit_16(1169);
+emit_16(1235);
+emit_16(1168);
+emit_16(1235);
+emit_16(1169);
+emit_16(1236);
+emit_16(1170);
+emit_16(1236);
+emit_16(1169);
+emit_16(1236);
+emit_16(1170);
+emit_16(1237);
+emit_16(1171);
+emit_16(1237);
+emit_16(1170);
+emit_16(1237);
+emit_16(1171);
+emit_16(1238);
+emit_16(1172);
+emit_16(1238);
+emit_16(1171);
+emit_16(1238);
+emit_16(1172);
+emit_16(1239);
+emit_16(1173);
+emit_16(1239);
+emit_16(1172);
+emit_16(1239);
+emit_16(1173);
+emit_16(1240);
+emit_16(1174);
+emit_16(1240);
+emit_16(1173);
+emit_16(1240);
+emit_16(1174);
+emit_16(1241);
+emit_16(1175);
+emit_16(1241);
+emit_16(1174);
+emit_16(1241);
+emit_16(1175);
+emit_16(1242);
+emit_16(1176);
+emit_16(1242);
+emit_16(1175);
+emit_16(1242);
+emit_16(1176);
+emit_16(1243);
+emit_16(1177);
+emit_16(1243);
+emit_16(1176);
+emit_16(1243);
+emit_16(1177);
+emit_16(1244);
+emit_16(1178);
+emit_16(1244);
+emit_16(1177);
+emit_16(1244);
+emit_16(1178);
+emit_16(1245);
+emit_16(1179);
+emit_16(1245);
+emit_16(1178);
+emit_16(1245);
+emit_16(1179);
+emit_16(1246);
+emit_16(1180);
+emit_16(1246);
+emit_16(1179);
+emit_16(1246);
+emit_16(1180);
+emit_16(1247);
+emit_16(1181);
+emit_16(1247);
+emit_16(1180);
+emit_16(1247);
+emit_16(1181);
+emit_16(1248);
+emit_16(1182);
+emit_16(1248);
+emit_16(1181);
+emit_16(1248);
+emit_16(1182);
+emit_16(1249);
+emit_16(1183);
+emit_16(1249);
+emit_16(1182);
+emit_16(1249);
+emit_16(1183);
+emit_16(1250);
+emit_16(1184);
+emit_16(1250);
+emit_16(1183);
+emit_16(1250);
+emit_16(1184);
+emit_16(1251);
+emit_16(1185);
+emit_16(1251);
+emit_16(1184);
+emit_16(1251);
+emit_16(1185);
+emit_16(1252);
+emit_16(1186);
+emit_16(1252);
+emit_16(1185);
+emit_16(1252);
+emit_16(1186);
+emit_16(1253);
+emit_16(1187);
+emit_16(1253);
+emit_16(1186);
+emit_16(1254);
+emit_16(1188);
+emit_16(1255);
+emit_16(1189);
+emit_16(1255);
+emit_16(1188);
+emit_16(1255);
+emit_16(1189);
+emit_16(1256);
+emit_16(1190);
+emit_16(1256);
+emit_16(1189);
+emit_16(1256);
+emit_16(1190);
+emit_16(1257);
+emit_16(1191);
+emit_16(1257);
+emit_16(1190);
+emit_16(1257);
+emit_16(1191);
+emit_16(1258);
+emit_16(1192);
+emit_16(1258);
+emit_16(1191);
+emit_16(1258);
+emit_16(1192);
+emit_16(1259);
+emit_16(1193);
+emit_16(1259);
+emit_16(1192);
+emit_16(1259);
+emit_16(1193);
+emit_16(1260);
+emit_16(1194);
+emit_16(1260);
+emit_16(1193);
+emit_16(1260);
+emit_16(1194);
+emit_16(1261);
+emit_16(1195);
+emit_16(1261);
+emit_16(1194);
+emit_16(1261);
+emit_16(1195);
+emit_16(1262);
+emit_16(1196);
+emit_16(1262);
+emit_16(1195);
+emit_16(1262);
+emit_16(1196);
+emit_16(1263);
+emit_16(1197);
+emit_16(1263);
+emit_16(1196);
+emit_16(1263);
+emit_16(1197);
+emit_16(1264);
+emit_16(1198);
+emit_16(1264);
+emit_16(1197);
+emit_16(1264);
+emit_16(1198);
+emit_16(1265);
+emit_16(1199);
+emit_16(1265);
+emit_16(1198);
+emit_16(1265);
+emit_16(1199);
+emit_16(1266);
+emit_16(1200);
+emit_16(1266);
+emit_16(1199);
+emit_16(1266);
+emit_16(1200);
+emit_16(1267);
+emit_16(1201);
+emit_16(1267);
+emit_16(1200);
+emit_16(1267);
+emit_16(1201);
+emit_16(1268);
+emit_16(1202);
+emit_16(1268);
+emit_16(1201);
+emit_16(1268);
+emit_16(1202);
+emit_16(1269);
+emit_16(1203);
+emit_16(1269);
+emit_16(1202);
+emit_16(1269);
+emit_16(1203);
+emit_16(1270);
+emit_16(1204);
+emit_16(1270);
+emit_16(1203);
+emit_16(1270);
+emit_16(1204);
+emit_16(1271);
+emit_16(1205);
+emit_16(1271);
+emit_16(1204);
+emit_16(1271);
+emit_16(1205);
+emit_16(1272);
+emit_16(1206);
+emit_16(1272);
+emit_16(1205);
+emit_16(1272);
+emit_16(1206);
+emit_16(1273);
+emit_16(1207);
+emit_16(1273);
+emit_16(1206);
+emit_16(1273);
+emit_16(1207);
+emit_16(1274);
+emit_16(1208);
+emit_16(1274);
+emit_16(1207);
+emit_16(1274);
+emit_16(1208);
+emit_16(1275);
+emit_16(1209);
+emit_16(1275);
+emit_16(1208);
+emit_16(1275);
+emit_16(1209);
+emit_16(1276);
+emit_16(1210);
+emit_16(1276);
+emit_16(1209);
+emit_16(1276);
+emit_16(1210);
+emit_16(1277);
+emit_16(1211);
+emit_16(1277);
+emit_16(1210);
+emit_16(1277);
+emit_16(1211);
+emit_16(1278);
+emit_16(1212);
+emit_16(1278);
+emit_16(1211);
+emit_16(1278);
+emit_16(1212);
+emit_16(1279);
+emit_16(1213);
+emit_16(1279);
+emit_16(1212);
+emit_16(1279);
+emit_16(1213);
+emit_16(1280);
+emit_16(1214);
+emit_16(1280);
+emit_16(1213);
+emit_16(1280);
+emit_16(1214);
+emit_16(1281);
+emit_16(1215);
+emit_16(1281);
+emit_16(1214);
+emit_16(1281);
+emit_16(1215);
+emit_16(1282);
+emit_16(1216);
+emit_16(1282);
+emit_16(1215);
+emit_16(1282);
+emit_16(1216);
+emit_16(1283);
+emit_16(1217);
+emit_16(1283);
+emit_16(1216);
+emit_16(1283);
+emit_16(1217);
+emit_16(1284);
+emit_16(1218);
+emit_16(1284);
+emit_16(1217);
+emit_16(1284);
+emit_16(1218);
+emit_16(1285);
+emit_16(1219);
+emit_16(1285);
+emit_16(1218);
+emit_16(1285);
+emit_16(1219);
+emit_16(1286);
+emit_16(1220);
+emit_16(1286);
+emit_16(1219);
+emit_16(1286);
+emit_16(1220);
+emit_16(1287);
+emit_16(1221);
+emit_16(1287);
+emit_16(1220);
+emit_16(1287);
+emit_16(1221);
+emit_16(1288);
+emit_16(1222);
+emit_16(1288);
+emit_16(1221);
+emit_16(1288);
+emit_16(1222);
+emit_16(1289);
+emit_16(1223);
+emit_16(1289);
+emit_16(1222);
+emit_16(1289);
+emit_16(1223);
+emit_16(1290);
+emit_16(1224);
+emit_16(1290);
+emit_16(1223);
+emit_16(1290);
+emit_16(1224);
+emit_16(1291);
+emit_16(1225);
+emit_16(1291);
+emit_16(1224);
+emit_16(1291);
+emit_16(1225);
+emit_16(1292);
+emit_16(1226);
+emit_16(1292);
+emit_16(1225);
+emit_16(1292);
+emit_16(1226);
+emit_16(1293);
+emit_16(1227);
+emit_16(1293);
+emit_16(1226);
+emit_16(1293);
+emit_16(1227);
+emit_16(1294);
+emit_16(1228);
+emit_16(1294);
+emit_16(1227);
+emit_16(1294);
+emit_16(1228);
+emit_16(1295);
+emit_16(1229);
+emit_16(1295);
+emit_16(1228);
+emit_16(1295);
+emit_16(1229);
+emit_16(1296);
+emit_16(1230);
+emit_16(1296);
+emit_16(1229);
+emit_16(1296);
+emit_16(1230);
+emit_16(1297);
+emit_16(1231);
+emit_16(1297);
+emit_16(1230);
+emit_16(1297);
+emit_16(1231);
+emit_16(1298);
+emit_16(1232);
+emit_16(1298);
+emit_16(1231);
+emit_16(1298);
+emit_16(1232);
+emit_16(1299);
+emit_16(1233);
+emit_16(1299);
+emit_16(1232);
+emit_16(1299);
+emit_16(1233);
+emit_16(1300);
+emit_16(1234);
+emit_16(1300);
+emit_16(1233);
+emit_16(1300);
+emit_16(1234);
+emit_16(1301);
+emit_16(1235);
+emit_16(1301);
+emit_16(1234);
+emit_16(1301);
+emit_16(1235);
+emit_16(1302);
+emit_16(1236);
+emit_16(1302);
+emit_16(1235);
+emit_16(1302);
+emit_16(1236);
+emit_16(1303);
+emit_16(1237);
+emit_16(1303);
+emit_16(1236);
+emit_16(1303);
+emit_16(1237);
+emit_16(1304);
+emit_16(1238);
+emit_16(1304);
+emit_16(1237);
+emit_16(1304);
+emit_16(1238);
+emit_16(1305);
+emit_16(1239);
+emit_16(1305);
+emit_16(1238);
+emit_16(1305);
+emit_16(1239);
+emit_16(1306);
+emit_16(1240);
+emit_16(1306);
+emit_16(1239);
+emit_16(1306);
+emit_16(1240);
+emit_16(1307);
+emit_16(1241);
+emit_16(1307);
+emit_16(1240);
+emit_16(1307);
+emit_16(1241);
+emit_16(1308);
+emit_16(1242);
+emit_16(1308);
+emit_16(1241);
+emit_16(1308);
+emit_16(1242);
+emit_16(1309);
+emit_16(1243);
+emit_16(1309);
+emit_16(1242);
+emit_16(1309);
+emit_16(1243);
+emit_16(1310);
+emit_16(1244);
+emit_16(1310);
+emit_16(1243);
+emit_16(1310);
+emit_16(1244);
+emit_16(1311);
+emit_16(1245);
+emit_16(1311);
+emit_16(1244);
+emit_16(1311);
+emit_16(1245);
+emit_16(1312);
+emit_16(1246);
+emit_16(1312);
+emit_16(1245);
+emit_16(1312);
+emit_16(1246);
+emit_16(1313);
+emit_16(1247);
+emit_16(1313);
+emit_16(1246);
+emit_16(1313);
+emit_16(1247);
+emit_16(1314);
+emit_16(1248);
+emit_16(1314);
+emit_16(1247);
+emit_16(1314);
+emit_16(1248);
+emit_16(1315);
+emit_16(1249);
+emit_16(1315);
+emit_16(1248);
+emit_16(1315);
+emit_16(1249);
+emit_16(1316);
+emit_16(1250);
+emit_16(1316);
+emit_16(1249);
+emit_16(1316);
+emit_16(1250);
+emit_16(1317);
+emit_16(1251);
+emit_16(1317);
+emit_16(1250);
+emit_16(1317);
+emit_16(1251);
+emit_16(1318);
+emit_16(1252);
+emit_16(1318);
+emit_16(1251);
+emit_16(1318);
+emit_16(1252);
+emit_16(1319);
+emit_16(1253);
+emit_16(1319);
+emit_16(1252);
+emit_16(1320);
+emit_16(1254);
+emit_16(1321);
+emit_16(1255);
+emit_16(1321);
+emit_16(1254);
+emit_16(1321);
+emit_16(1255);
+emit_16(1322);
+emit_16(1256);
+emit_16(1322);
+emit_16(1255);
+emit_16(1322);
+emit_16(1256);
+emit_16(1323);
+emit_16(1257);
+emit_16(1323);
+emit_16(1256);
+emit_16(1323);
+emit_16(1257);
+emit_16(1324);
+emit_16(1258);
+emit_16(1324);
+emit_16(1257);
+emit_16(1324);
+emit_16(1258);
+emit_16(1325);
+emit_16(1259);
+emit_16(1325);
+emit_16(1258);
+emit_16(1325);
+emit_16(1259);
+emit_16(1326);
+emit_16(1260);
+emit_16(1326);
+emit_16(1259);
+emit_16(1326);
+emit_16(1260);
+emit_16(1327);
+emit_16(1261);
+emit_16(1327);
+emit_16(1260);
+emit_16(1327);
+emit_16(1261);
+emit_16(1328);
+emit_16(1262);
+emit_16(1328);
+emit_16(1261);
+emit_16(1328);
+emit_16(1262);
+emit_16(1329);
+emit_16(1263);
+emit_16(1329);
+emit_16(1262);
+emit_16(1329);
+emit_16(1263);
+emit_16(1330);
+emit_16(1264);
+emit_16(1330);
+emit_16(1263);
+emit_16(1330);
+emit_16(1264);
+emit_16(1331);
+emit_16(1265);
+emit_16(1331);
+emit_16(1264);
+emit_16(1331);
+emit_16(1265);
+emit_16(1332);
+emit_16(1266);
+emit_16(1332);
+emit_16(1265);
+emit_16(1332);
+emit_16(1266);
+emit_16(1333);
+emit_16(1267);
+emit_16(1333);
+emit_16(1266);
+emit_16(1333);
+emit_16(1267);
+emit_16(1334);
+emit_16(1268);
+emit_16(1334);
+emit_16(1267);
+emit_16(1334);
+emit_16(1268);
+emit_16(1335);
+emit_16(1269);
+emit_16(1335);
+emit_16(1268);
+emit_16(1335);
+emit_16(1269);
+emit_16(1336);
+emit_16(1270);
+emit_16(1336);
+emit_16(1269);
+emit_16(1336);
+emit_16(1270);
+emit_16(1337);
+emit_16(1271);
+emit_16(1337);
+emit_16(1270);
+emit_16(1337);
+emit_16(1271);
+emit_16(1338);
+emit_16(1272);
+emit_16(1338);
+emit_16(1271);
+emit_16(1338);
+emit_16(1272);
+emit_16(1339);
+emit_16(1273);
+emit_16(1339);
+emit_16(1272);
+emit_16(1339);
+emit_16(1273);
+emit_16(1340);
+emit_16(1274);
+emit_16(1340);
+emit_16(1273);
+emit_16(1340);
+emit_16(1274);
+emit_16(1341);
+emit_16(1275);
+emit_16(1341);
+emit_16(1274);
+emit_16(1341);
+emit_16(1275);
+emit_16(1342);
+emit_16(1276);
+emit_16(1342);
+emit_16(1275);
+emit_16(1342);
+emit_16(1276);
+emit_16(1343);
+emit_16(1277);
+emit_16(1343);
+emit_16(1276);
+emit_16(1343);
+emit_16(1277);
+emit_16(1344);
+emit_16(1278);
+emit_16(1344);
+emit_16(1277);
+emit_16(1344);
+emit_16(1278);
+emit_16(1345);
+emit_16(1279);
+emit_16(1345);
+emit_16(1278);
+emit_16(1345);
+emit_16(1279);
+emit_16(1346);
+emit_16(1280);
+emit_16(1346);
+emit_16(1279);
+emit_16(1346);
+emit_16(1280);
+emit_16(1347);
+emit_16(1281);
+emit_16(1347);
+emit_16(1280);
+emit_16(1347);
+emit_16(1281);
+emit_16(1348);
+emit_16(1282);
+emit_16(1348);
+emit_16(1281);
+emit_16(1348);
+emit_16(1282);
+emit_16(1349);
+emit_16(1283);
+emit_16(1349);
+emit_16(1282);
+emit_16(1349);
+emit_16(1283);
+emit_16(1350);
+emit_16(1284);
+emit_16(1350);
+emit_16(1283);
+emit_16(1350);
+emit_16(1284);
+emit_16(1351);
+emit_16(1285);
+emit_16(1351);
+emit_16(1284);
+emit_16(1351);
+emit_16(1285);
+emit_16(1352);
+emit_16(1286);
+emit_16(1352);
+emit_16(1285);
+emit_16(1352);
+emit_16(1286);
+emit_16(1353);
+emit_16(1287);
+emit_16(1353);
+emit_16(1286);
+emit_16(1353);
+emit_16(1287);
+emit_16(1354);
+emit_16(1288);
+emit_16(1354);
+emit_16(1287);
+emit_16(1354);
+emit_16(1288);
+emit_16(1355);
+emit_16(1289);
+emit_16(1355);
+emit_16(1288);
+emit_16(1355);
+emit_16(1289);
+emit_16(1356);
+emit_16(1290);
+emit_16(1356);
+emit_16(1289);
+emit_16(1356);
+emit_16(1290);
+emit_16(1357);
+emit_16(1291);
+emit_16(1357);
+emit_16(1290);
+emit_16(1357);
+emit_16(1291);
+emit_16(1358);
+emit_16(1292);
+emit_16(1358);
+emit_16(1291);
+emit_16(1358);
+emit_16(1292);
+emit_16(1359);
+emit_16(1293);
+emit_16(1359);
+emit_16(1292);
+emit_16(1359);
+emit_16(1293);
+emit_16(1360);
+emit_16(1294);
+emit_16(1360);
+emit_16(1293);
+emit_16(1360);
+emit_16(1294);
+emit_16(1361);
+emit_16(1295);
+emit_16(1361);
+emit_16(1294);
+emit_16(1361);
+emit_16(1295);
+emit_16(1362);
+emit_16(1296);
+emit_16(1362);
+emit_16(1295);
+emit_16(1362);
+emit_16(1296);
+emit_16(1363);
+emit_16(1297);
+emit_16(1363);
+emit_16(1296);
+emit_16(1363);
+emit_16(1297);
+emit_16(1364);
+emit_16(1298);
+emit_16(1364);
+emit_16(1297);
+emit_16(1364);
+emit_16(1298);
+emit_16(1365);
+emit_16(1299);
+emit_16(1365);
+emit_16(1298);
+emit_16(1365);
+emit_16(1299);
+emit_16(1366);
+emit_16(1300);
+emit_16(1366);
+emit_16(1299);
+emit_16(1366);
+emit_16(1300);
+emit_16(1367);
+emit_16(1301);
+emit_16(1367);
+emit_16(1300);
+emit_16(1367);
+emit_16(1301);
+emit_16(1368);
+emit_16(1302);
+emit_16(1368);
+emit_16(1301);
+emit_16(1368);
+emit_16(1302);
+emit_16(1369);
+emit_16(1303);
+emit_16(1369);
+emit_16(1302);
+emit_16(1369);
+emit_16(1303);
+emit_16(1370);
+emit_16(1304);
+emit_16(1370);
+emit_16(1303);
+emit_16(1370);
+emit_16(1304);
+emit_16(1371);
+emit_16(1305);
+emit_16(1371);
+emit_16(1304);
+emit_16(1371);
+emit_16(1305);
+emit_16(1372);
+emit_16(1306);
+emit_16(1372);
+emit_16(1305);
+emit_16(1372);
+emit_16(1306);
+emit_16(1373);
+emit_16(1307);
+emit_16(1373);
+emit_16(1306);
+emit_16(1373);
+emit_16(1307);
+emit_16(1374);
+emit_16(1308);
+emit_16(1374);
+emit_16(1307);
+emit_16(1374);
+emit_16(1308);
+emit_16(1375);
+emit_16(1309);
+emit_16(1375);
+emit_16(1308);
+emit_16(1375);
+emit_16(1309);
+emit_16(1376);
+emit_16(1310);
+emit_16(1376);
+emit_16(1309);
+emit_16(1376);
+emit_16(1310);
+emit_16(1377);
+emit_16(1311);
+emit_16(1377);
+emit_16(1310);
+emit_16(1377);
+emit_16(1311);
+emit_16(1378);
+emit_16(1312);
+emit_16(1378);
+emit_16(1311);
+emit_16(1378);
+emit_16(1312);
+emit_16(1379);
+emit_16(1313);
+emit_16(1379);
+emit_16(1312);
+emit_16(1379);
+emit_16(1313);
+emit_16(1380);
+emit_16(1314);
+emit_16(1380);
+emit_16(1313);
+emit_16(1380);
+emit_16(1314);
+emit_16(1381);
+emit_16(1315);
+emit_16(1381);
+emit_16(1314);
+emit_16(1381);
+emit_16(1315);
+emit_16(1382);
+emit_16(1316);
+emit_16(1382);
+emit_16(1315);
+emit_16(1382);
+emit_16(1316);
+emit_16(1383);
+emit_16(1317);
+emit_16(1383);
+emit_16(1316);
+emit_16(1383);
+emit_16(1317);
+emit_16(1384);
+emit_16(1318);
+emit_16(1384);
+emit_16(1317);
+emit_16(1384);
+emit_16(1318);
+emit_16(1385);
+emit_16(1319);
+emit_16(1385);
+emit_16(1318);
+emit_16(1386);
+emit_16(1320);
+emit_16(1387);
+emit_16(1321);
+emit_16(1387);
+emit_16(1320);
+emit_16(1387);
+emit_16(1321);
+emit_16(1388);
+emit_16(1322);
+emit_16(1388);
+emit_16(1321);
+emit_16(1388);
+emit_16(1322);
+emit_16(1389);
+emit_16(1323);
+emit_16(1389);
+emit_16(1322);
+emit_16(1389);
+emit_16(1323);
+emit_16(1390);
+emit_16(1324);
+emit_16(1390);
+emit_16(1323);
+emit_16(1390);
+emit_16(1324);
+emit_16(1391);
+emit_16(1325);
+emit_16(1391);
+emit_16(1324);
+emit_16(1391);
+emit_16(1325);
+emit_16(1392);
+emit_16(1326);
+emit_16(1392);
+emit_16(1325);
+emit_16(1392);
+emit_16(1326);
+emit_16(1393);
+emit_16(1327);
+emit_16(1393);
+emit_16(1326);
+emit_16(1393);
+emit_16(1327);
+emit_16(1394);
+emit_16(1328);
+emit_16(1394);
+emit_16(1327);
+emit_16(1394);
+emit_16(1328);
+emit_16(1395);
+emit_16(1329);
+emit_16(1395);
+emit_16(1328);
+emit_16(1395);
+emit_16(1329);
+emit_16(1396);
+emit_16(1330);
+emit_16(1396);
+emit_16(1329);
+emit_16(1396);
+emit_16(1330);
+emit_16(1397);
+emit_16(1331);
+emit_16(1397);
+emit_16(1330);
+emit_16(1397);
+emit_16(1331);
+emit_16(1398);
+emit_16(1332);
+emit_16(1398);
+emit_16(1331);
+emit_16(1398);
+emit_16(1332);
+emit_16(1399);
+emit_16(1333);
+emit_16(1399);
+emit_16(1332);
+emit_16(1399);
+emit_16(1333);
+emit_16(1400);
+emit_16(1334);
+emit_16(1400);
+emit_16(1333);
+emit_16(1400);
+emit_16(1334);
+emit_16(1401);
+emit_16(1335);
+emit_16(1401);
+emit_16(1334);
+emit_16(1401);
+emit_16(1335);
+emit_16(1402);
+emit_16(1336);
+emit_16(1402);
+emit_16(1335);
+emit_16(1402);
+emit_16(1336);
+emit_16(1403);
+emit_16(1337);
+emit_16(1403);
+emit_16(1336);
+emit_16(1403);
+emit_16(1337);
+emit_16(1404);
+emit_16(1338);
+emit_16(1404);
+emit_16(1337);
+emit_16(1404);
+emit_16(1338);
+emit_16(1405);
+emit_16(1339);
+emit_16(1405);
+emit_16(1338);
+emit_16(1405);
+emit_16(1339);
+emit_16(1406);
+emit_16(1340);
+emit_16(1406);
+emit_16(1339);
+emit_16(1406);
+emit_16(1340);
+emit_16(1407);
+emit_16(1341);
+emit_16(1407);
+emit_16(1340);
+emit_16(1407);
+emit_16(1341);
+emit_16(1408);
+emit_16(1342);
+emit_16(1408);
+emit_16(1341);
+emit_16(1408);
+emit_16(1342);
+emit_16(1409);
+emit_16(1343);
+emit_16(1409);
+emit_16(1342);
+emit_16(1409);
+emit_16(1343);
+emit_16(1410);
+emit_16(1344);
+emit_16(1410);
+emit_16(1343);
+emit_16(1410);
+emit_16(1344);
+emit_16(1411);
+emit_16(1345);
+emit_16(1411);
+emit_16(1344);
+emit_16(1411);
+emit_16(1345);
+emit_16(1412);
+emit_16(1346);
+emit_16(1412);
+emit_16(1345);
+emit_16(1412);
+emit_16(1346);
+emit_16(1413);
+emit_16(1347);
+emit_16(1413);
+emit_16(1346);
+emit_16(1413);
+emit_16(1347);
+emit_16(1414);
+emit_16(1348);
+emit_16(1414);
+emit_16(1347);
+emit_16(1414);
+emit_16(1348);
+emit_16(1415);
+emit_16(1349);
+emit_16(1415);
+emit_16(1348);
+emit_16(1415);
+emit_16(1349);
+emit_16(1416);
+emit_16(1350);
+emit_16(1416);
+emit_16(1349);
+emit_16(1416);
+emit_16(1350);
+emit_16(1417);
+emit_16(1351);
+emit_16(1417);
+emit_16(1350);
+emit_16(1417);
+emit_16(1351);
+emit_16(1418);
+emit_16(1352);
+emit_16(1418);
+emit_16(1351);
+emit_16(1418);
+emit_16(1352);
+emit_16(1419);
+emit_16(1353);
+emit_16(1419);
+emit_16(1352);
+emit_16(1419);
+emit_16(1353);
+emit_16(1420);
+emit_16(1354);
+emit_16(1420);
+emit_16(1353);
+emit_16(1420);
+emit_16(1354);
+emit_16(1421);
+emit_16(1355);
+emit_16(1421);
+emit_16(1354);
+emit_16(1421);
+emit_16(1355);
+emit_16(1422);
+emit_16(1356);
+emit_16(1422);
+emit_16(1355);
+emit_16(1422);
+emit_16(1356);
+emit_16(1423);
+emit_16(1357);
+emit_16(1423);
+emit_16(1356);
+emit_16(1423);
+emit_16(1357);
+emit_16(1424);
+emit_16(1358);
+emit_16(1424);
+emit_16(1357);
+emit_16(1424);
+emit_16(1358);
+emit_16(1425);
+emit_16(1359);
+emit_16(1425);
+emit_16(1358);
+emit_16(1425);
+emit_16(1359);
+emit_16(1426);
+emit_16(1360);
+emit_16(1426);
+emit_16(1359);
+emit_16(1426);
+emit_16(1360);
+emit_16(1427);
+emit_16(1361);
+emit_16(1427);
+emit_16(1360);
+emit_16(1427);
+emit_16(1361);
+emit_16(1428);
+emit_16(1362);
+emit_16(1428);
+emit_16(1361);
+emit_16(1428);
+emit_16(1362);
+emit_16(1429);
+emit_16(1363);
+emit_16(1429);
+emit_16(1362);
+emit_16(1429);
+emit_16(1363);
+emit_16(1430);
+emit_16(1364);
+emit_16(1430);
+emit_16(1363);
+emit_16(1430);
+emit_16(1364);
+emit_16(1431);
+emit_16(1365);
+emit_16(1431);
+emit_16(1364);
+emit_16(1431);
+emit_16(1365);
+emit_16(1432);
+emit_16(1366);
+emit_16(1432);
+emit_16(1365);
+emit_16(1432);
+emit_16(1366);
+emit_16(1433);
+emit_16(1367);
+emit_16(1433);
+emit_16(1366);
+emit_16(1433);
+emit_16(1367);
+emit_16(1434);
+emit_16(1368);
+emit_16(1434);
+emit_16(1367);
+emit_16(1434);
+emit_16(1368);
+emit_16(1435);
+emit_16(1369);
+emit_16(1435);
+emit_16(1368);
+emit_16(1435);
+emit_16(1369);
+emit_16(1436);
+emit_16(1370);
+emit_16(1436);
+emit_16(1369);
+emit_16(1436);
+emit_16(1370);
+emit_16(1437);
+emit_16(1371);
+emit_16(1437);
+emit_16(1370);
+emit_16(1437);
+emit_16(1371);
+emit_16(1438);
+emit_16(1372);
+emit_16(1438);
+emit_16(1371);
+emit_16(1438);
+emit_16(1372);
+emit_16(1439);
+emit_16(1373);
+emit_16(1439);
+emit_16(1372);
+emit_16(1439);
+emit_16(1373);
+emit_16(1440);
+emit_16(1374);
+emit_16(1440);
+emit_16(1373);
+emit_16(1440);
+emit_16(1374);
+emit_16(1441);
+emit_16(1375);
+emit_16(1441);
+emit_16(1374);
+emit_16(1441);
+emit_16(1375);
+emit_16(1442);
+emit_16(1376);
+emit_16(1442);
+emit_16(1375);
+emit_16(1442);
+emit_16(1376);
+emit_16(1443);
+emit_16(1377);
+emit_16(1443);
+emit_16(1376);
+emit_16(1443);
+emit_16(1377);
+emit_16(1444);
+emit_16(1378);
+emit_16(1444);
+emit_16(1377);
+emit_16(1444);
+emit_16(1378);
+emit_16(1445);
+emit_16(1379);
+emit_16(1445);
+emit_16(1378);
+emit_16(1445);
+emit_16(1379);
+emit_16(1446);
+emit_16(1380);
+emit_16(1446);
+emit_16(1379);
+emit_16(1446);
+emit_16(1380);
+emit_16(1447);
+emit_16(1381);
+emit_16(1447);
+emit_16(1380);
+emit_16(1447);
+emit_16(1381);
+emit_16(1448);
+emit_16(1382);
+emit_16(1448);
+emit_16(1381);
+emit_16(1448);
+emit_16(1382);
+emit_16(1449);
+emit_16(1383);
+emit_16(1449);
+emit_16(1382);
+emit_16(1449);
+emit_16(1383);
+emit_16(1450);
+emit_16(1384);
+emit_16(1450);
+emit_16(1383);
+emit_16(1450);
+emit_16(1384);
+emit_16(1451);
+emit_16(1385);
+emit_16(1451);
+emit_16(1384);
+emit_16(1452);
+emit_16(1386);
+emit_16(1453);
+emit_16(1387);
+emit_16(1453);
+emit_16(1386);
+emit_16(1453);
+emit_16(1387);
+emit_16(1454);
+emit_16(1388);
+emit_16(1454);
+emit_16(1387);
+emit_16(1454);
+emit_16(1388);
+emit_16(1455);
+emit_16(1389);
+emit_16(1455);
+emit_16(1388);
+emit_16(1455);
+emit_16(1389);
+emit_16(1456);
+emit_16(1390);
+emit_16(1456);
+emit_16(1389);
+emit_16(1456);
+emit_16(1390);
+emit_16(1457);
+emit_16(1391);
+emit_16(1457);
+emit_16(1390);
+emit_16(1457);
+emit_16(1391);
+emit_16(1458);
+emit_16(1392);
+emit_16(1458);
+emit_16(1391);
+emit_16(1458);
+emit_16(1392);
+emit_16(1459);
+emit_16(1393);
+emit_16(1459);
+emit_16(1392);
+emit_16(1459);
+emit_16(1393);
+emit_16(1460);
+emit_16(1394);
+emit_16(1460);
+emit_16(1393);
+emit_16(1460);
+emit_16(1394);
+emit_16(1461);
+emit_16(1395);
+emit_16(1461);
+emit_16(1394);
+emit_16(1461);
+emit_16(1395);
+emit_16(1462);
+emit_16(1396);
+emit_16(1462);
+emit_16(1395);
+emit_16(1462);
+emit_16(1396);
+emit_16(1463);
+emit_16(1397);
+emit_16(1463);
+emit_16(1396);
+emit_16(1463);
+emit_16(1397);
+emit_16(1464);
+emit_16(1398);
+emit_16(1464);
+emit_16(1397);
+emit_16(1464);
+emit_16(1398);
+emit_16(1465);
+emit_16(1399);
+emit_16(1465);
+emit_16(1398);
+emit_16(1465);
+emit_16(1399);
+emit_16(1466);
+emit_16(1400);
+emit_16(1466);
+emit_16(1399);
+emit_16(1466);
+emit_16(1400);
+emit_16(1467);
+emit_16(1401);
+emit_16(1467);
+emit_16(1400);
+emit_16(1467);
+emit_16(1401);
+emit_16(1468);
+emit_16(1402);
+emit_16(1468);
+emit_16(1401);
+emit_16(1468);
+emit_16(1402);
+emit_16(1469);
+emit_16(1403);
+emit_16(1469);
+emit_16(1402);
+emit_16(1469);
+emit_16(1403);
+emit_16(1470);
+emit_16(1404);
+emit_16(1470);
+emit_16(1403);
+emit_16(1470);
+emit_16(1404);
+emit_16(1471);
+emit_16(1405);
+emit_16(1471);
+emit_16(1404);
+emit_16(1471);
+emit_16(1405);
+emit_16(1472);
+emit_16(1406);
+emit_16(1472);
+emit_16(1405);
+emit_16(1472);
+emit_16(1406);
+emit_16(1473);
+emit_16(1407);
+emit_16(1473);
+emit_16(1406);
+emit_16(1473);
+emit_16(1407);
+emit_16(1474);
+emit_16(1408);
+emit_16(1474);
+emit_16(1407);
+emit_16(1474);
+emit_16(1408);
+emit_16(1475);
+emit_16(1409);
+emit_16(1475);
+emit_16(1408);
+emit_16(1475);
+emit_16(1409);
+emit_16(1476);
+emit_16(1410);
+emit_16(1476);
+emit_16(1409);
+emit_16(1476);
+emit_16(1410);
+emit_16(1477);
+emit_16(1411);
+emit_16(1477);
+emit_16(1410);
+emit_16(1477);
+emit_16(1411);
+emit_16(1478);
+emit_16(1412);
+emit_16(1478);
+emit_16(1411);
+emit_16(1478);
+emit_16(1412);
+emit_16(1479);
+emit_16(1413);
+emit_16(1479);
+emit_16(1412);
+emit_16(1479);
+emit_16(1413);
+emit_16(1480);
+emit_16(1414);
+emit_16(1480);
+emit_16(1413);
+emit_16(1480);
+emit_16(1414);
+emit_16(1481);
+emit_16(1415);
+emit_16(1481);
+emit_16(1414);
+emit_16(1481);
+emit_16(1415);
+emit_16(1482);
+emit_16(1416);
+emit_16(1482);
+emit_16(1415);
+emit_16(1482);
+emit_16(1416);
+emit_16(1483);
+emit_16(1417);
+emit_16(1483);
+emit_16(1416);
+emit_16(1483);
+emit_16(1417);
+emit_16(1484);
+emit_16(1418);
+emit_16(1484);
+emit_16(1417);
+emit_16(1484);
+emit_16(1418);
+emit_16(1485);
+emit_16(1419);
+emit_16(1485);
+emit_16(1418);
+emit_16(1485);
+emit_16(1419);
+emit_16(1486);
+emit_16(1420);
+emit_16(1486);
+emit_16(1419);
+emit_16(1486);
+emit_16(1420);
+emit_16(1487);
+emit_16(1421);
+emit_16(1487);
+emit_16(1420);
+emit_16(1487);
+emit_16(1421);
+emit_16(1488);
+emit_16(1422);
+emit_16(1488);
+emit_16(1421);
+emit_16(1488);
+emit_16(1422);
+emit_16(1489);
+emit_16(1423);
+emit_16(1489);
+emit_16(1422);
+emit_16(1489);
+emit_16(1423);
+emit_16(1490);
+emit_16(1424);
+emit_16(1490);
+emit_16(1423);
+emit_16(1490);
+emit_16(1424);
+emit_16(1491);
+emit_16(1425);
+emit_16(1491);
+emit_16(1424);
+emit_16(1491);
+emit_16(1425);
+emit_16(1492);
+emit_16(1426);
+emit_16(1492);
+emit_16(1425);
+emit_16(1492);
+emit_16(1426);
+emit_16(1493);
+emit_16(1427);
+emit_16(1493);
+emit_16(1426);
+emit_16(1493);
+emit_16(1427);
+emit_16(1494);
+emit_16(1428);
+emit_16(1494);
+emit_16(1427);
+emit_16(1494);
+emit_16(1428);
+emit_16(1495);
+emit_16(1429);
+emit_16(1495);
+emit_16(1428);
+emit_16(1495);
+emit_16(1429);
+emit_16(1496);
+emit_16(1430);
+emit_16(1496);
+emit_16(1429);
+emit_16(1496);
+emit_16(1430);
+emit_16(1497);
+emit_16(1431);
+emit_16(1497);
+emit_16(1430);
+emit_16(1497);
+emit_16(1431);
+emit_16(1498);
+emit_16(1432);
+emit_16(1498);
+emit_16(1431);
+emit_16(1498);
+emit_16(1432);
+emit_16(1499);
+emit_16(1433);
+emit_16(1499);
+emit_16(1432);
+emit_16(1499);
+emit_16(1433);
+emit_16(1500);
+emit_16(1434);
+emit_16(1500);
+emit_16(1433);
+emit_16(1500);
+emit_16(1434);
+emit_16(1501);
+emit_16(1435);
+emit_16(1501);
+emit_16(1434);
+emit_16(1501);
+emit_16(1435);
+emit_16(1502);
+emit_16(1436);
+emit_16(1502);
+emit_16(1435);
+emit_16(1502);
+emit_16(1436);
+emit_16(1503);
+emit_16(1437);
+emit_16(1503);
+emit_16(1436);
+emit_16(1503);
+emit_16(1437);
+emit_16(1504);
+emit_16(1438);
+emit_16(1504);
+emit_16(1437);
+emit_16(1504);
+emit_16(1438);
+emit_16(1505);
+emit_16(1439);
+emit_16(1505);
+emit_16(1438);
+emit_16(1505);
+emit_16(1439);
+emit_16(1506);
+emit_16(1440);
+emit_16(1506);
+emit_16(1439);
+emit_16(1506);
+emit_16(1440);
+emit_16(1507);
+emit_16(1441);
+emit_16(1507);
+emit_16(1440);
+emit_16(1507);
+emit_16(1441);
+emit_16(1508);
+emit_16(1442);
+emit_16(1508);
+emit_16(1441);
+emit_16(1508);
+emit_16(1442);
+emit_16(1509);
+emit_16(1443);
+emit_16(1509);
+emit_16(1442);
+emit_16(1509);
+emit_16(1443);
+emit_16(1510);
+emit_16(1444);
+emit_16(1510);
+emit_16(1443);
+emit_16(1510);
+emit_16(1444);
+emit_16(1511);
+emit_16(1445);
+emit_16(1511);
+emit_16(1444);
+emit_16(1511);
+emit_16(1445);
+emit_16(1512);
+emit_16(1446);
+emit_16(1512);
+emit_16(1445);
+emit_16(1512);
+emit_16(1446);
+emit_16(1513);
+emit_16(1447);
+emit_16(1513);
+emit_16(1446);
+emit_16(1513);
+emit_16(1447);
+emit_16(1514);
+emit_16(1448);
+emit_16(1514);
+emit_16(1447);
+emit_16(1514);
+emit_16(1448);
+emit_16(1515);
+emit_16(1449);
+emit_16(1515);
+emit_16(1448);
+emit_16(1515);
+emit_16(1449);
+emit_16(1516);
+emit_16(1450);
+emit_16(1516);
+emit_16(1449);
+emit_16(1516);
+emit_16(1450);
+emit_16(1517);
+emit_16(1451);
+emit_16(1517);
+emit_16(1450);
+emit_16(1518);
+emit_16(1452);
+emit_16(1519);
+emit_16(1453);
+emit_16(1519);
+emit_16(1452);
+emit_16(1519);
+emit_16(1453);
+emit_16(1520);
+emit_16(1454);
+emit_16(1520);
+emit_16(1453);
+emit_16(1520);
+emit_16(1454);
+emit_16(1521);
+emit_16(1455);
+emit_16(1521);
+emit_16(1454);
+emit_16(1521);
+emit_16(1455);
+emit_16(1522);
+emit_16(1456);
+emit_16(1522);
+emit_16(1455);
+emit_16(1522);
+emit_16(1456);
+emit_16(1523);
+emit_16(1457);
+emit_16(1523);
+emit_16(1456);
+emit_16(1523);
+emit_16(1457);
+emit_16(1524);
+emit_16(1458);
+emit_16(1524);
+emit_16(1457);
+emit_16(1524);
+emit_16(1458);
+emit_16(1525);
+emit_16(1459);
+emit_16(1525);
+emit_16(1458);
+emit_16(1525);
+emit_16(1459);
+emit_16(1526);
+emit_16(1460);
+emit_16(1526);
+emit_16(1459);
+emit_16(1526);
+emit_16(1460);
+emit_16(1527);
+emit_16(1461);
+emit_16(1527);
+emit_16(1460);
+emit_16(1527);
+emit_16(1461);
+emit_16(1528);
+emit_16(1462);
+emit_16(1528);
+emit_16(1461);
+emit_16(1528);
+emit_16(1462);
+emit_16(1529);
+emit_16(1463);
+emit_16(1529);
+emit_16(1462);
+emit_16(1529);
+emit_16(1463);
+emit_16(1530);
+emit_16(1464);
+emit_16(1530);
+emit_16(1463);
+emit_16(1530);
+emit_16(1464);
+emit_16(1531);
+emit_16(1465);
+emit_16(1531);
+emit_16(1464);
+emit_16(1531);
+emit_16(1465);
+emit_16(1532);
+emit_16(1466);
+emit_16(1532);
+emit_16(1465);
+emit_16(1532);
+emit_16(1466);
+emit_16(1533);
+emit_16(1467);
+emit_16(1533);
+emit_16(1466);
+emit_16(1533);
+emit_16(1467);
+emit_16(1534);
+emit_16(1468);
+emit_16(1534);
+emit_16(1467);
+emit_16(1534);
+emit_16(1468);
+emit_16(1535);
+emit_16(1469);
+emit_16(1535);
+emit_16(1468);
+emit_16(1535);
+emit_16(1469);
+emit_16(1536);
+emit_16(1470);
+emit_16(1536);
+emit_16(1469);
+emit_16(1536);
+emit_16(1470);
+emit_16(1537);
+emit_16(1471);
+emit_16(1537);
+emit_16(1470);
+emit_16(1537);
+emit_16(1471);
+emit_16(1538);
+emit_16(1472);
+emit_16(1538);
+emit_16(1471);
+emit_16(1538);
+emit_16(1472);
+emit_16(1539);
+emit_16(1473);
+emit_16(1539);
+emit_16(1472);
+emit_16(1539);
+emit_16(1473);
+emit_16(1540);
+emit_16(1474);
+emit_16(1540);
+emit_16(1473);
+emit_16(1540);
+emit_16(1474);
+emit_16(1541);
+emit_16(1475);
+emit_16(1541);
+emit_16(1474);
+emit_16(1541);
+emit_16(1475);
+emit_16(1542);
+emit_16(1476);
+emit_16(1542);
+emit_16(1475);
+emit_16(1542);
+emit_16(1476);
+emit_16(1543);
+emit_16(1477);
+emit_16(1543);
+emit_16(1476);
+emit_16(1543);
+emit_16(1477);
+emit_16(1544);
+emit_16(1478);
+emit_16(1544);
+emit_16(1477);
+emit_16(1544);
+emit_16(1478);
+emit_16(1545);
+emit_16(1479);
+emit_16(1545);
+emit_16(1478);
+emit_16(1545);
+emit_16(1479);
+emit_16(1546);
+emit_16(1480);
+emit_16(1546);
+emit_16(1479);
+emit_16(1546);
+emit_16(1480);
+emit_16(1547);
+emit_16(1481);
+emit_16(1547);
+emit_16(1480);
+emit_16(1547);
+emit_16(1481);
+emit_16(1548);
+emit_16(1482);
+emit_16(1548);
+emit_16(1481);
+emit_16(1548);
+emit_16(1482);
+emit_16(1549);
+emit_16(1483);
+emit_16(1549);
+emit_16(1482);
+emit_16(1549);
+emit_16(1483);
+emit_16(1550);
+emit_16(1484);
+emit_16(1550);
+emit_16(1483);
+emit_16(1550);
+emit_16(1484);
+emit_16(1551);
+emit_16(1485);
+emit_16(1551);
+emit_16(1484);
+emit_16(1551);
+emit_16(1485);
+emit_16(1552);
+emit_16(1486);
+emit_16(1552);
+emit_16(1485);
+emit_16(1552);
+emit_16(1486);
+emit_16(1553);
+emit_16(1487);
+emit_16(1553);
+emit_16(1486);
+emit_16(1553);
+emit_16(1487);
+emit_16(1554);
+emit_16(1488);
+emit_16(1554);
+emit_16(1487);
+emit_16(1554);
+emit_16(1488);
+emit_16(1555);
+emit_16(1489);
+emit_16(1555);
+emit_16(1488);
+emit_16(1555);
+emit_16(1489);
+emit_16(1556);
+emit_16(1490);
+emit_16(1556);
+emit_16(1489);
+emit_16(1556);
+emit_16(1490);
+emit_16(1557);
+emit_16(1491);
+emit_16(1557);
+emit_16(1490);
+emit_16(1557);
+emit_16(1491);
+emit_16(1558);
+emit_16(1492);
+emit_16(1558);
+emit_16(1491);
+emit_16(1558);
+emit_16(1492);
+emit_16(1559);
+emit_16(1493);
+emit_16(1559);
+emit_16(1492);
+emit_16(1559);
+emit_16(1493);
+emit_16(1560);
+emit_16(1494);
+emit_16(1560);
+emit_16(1493);
+emit_16(1560);
+emit_16(1494);
+emit_16(1561);
+emit_16(1495);
+emit_16(1561);
+emit_16(1494);
+emit_16(1561);
+emit_16(1495);
+emit_16(1562);
+emit_16(1496);
+emit_16(1562);
+emit_16(1495);
+emit_16(1562);
+emit_16(1496);
+emit_16(1563);
+emit_16(1497);
+emit_16(1563);
+emit_16(1496);
+emit_16(1563);
+emit_16(1497);
+emit_16(1564);
+emit_16(1498);
+emit_16(1564);
+emit_16(1497);
+emit_16(1564);
+emit_16(1498);
+emit_16(1565);
+emit_16(1499);
+emit_16(1565);
+emit_16(1498);
+emit_16(1565);
+emit_16(1499);
+emit_16(1566);
+emit_16(1500);
+emit_16(1566);
+emit_16(1499);
+emit_16(1566);
+emit_16(1500);
+emit_16(1567);
+emit_16(1501);
+emit_16(1567);
+emit_16(1500);
+emit_16(1567);
+emit_16(1501);
+emit_16(1568);
+emit_16(1502);
+emit_16(1568);
+emit_16(1501);
+emit_16(1568);
+emit_16(1502);
+emit_16(1569);
+emit_16(1503);
+emit_16(1569);
+emit_16(1502);
+emit_16(1569);
+emit_16(1503);
+emit_16(1570);
+emit_16(1504);
+emit_16(1570);
+emit_16(1503);
+emit_16(1570);
+emit_16(1504);
+emit_16(1571);
+emit_16(1505);
+emit_16(1571);
+emit_16(1504);
+emit_16(1571);
+emit_16(1505);
+emit_16(1572);
+emit_16(1506);
+emit_16(1572);
+emit_16(1505);
+emit_16(1572);
+emit_16(1506);
+emit_16(1573);
+emit_16(1507);
+emit_16(1573);
+emit_16(1506);
+emit_16(1573);
+emit_16(1507);
+emit_16(1574);
+emit_16(1508);
+emit_16(1574);
+emit_16(1507);
+emit_16(1574);
+emit_16(1508);
+emit_16(1575);
+emit_16(1509);
+emit_16(1575);
+emit_16(1508);
+emit_16(1575);
+emit_16(1509);
+emit_16(1576);
+emit_16(1510);
+emit_16(1576);
+emit_16(1509);
+emit_16(1576);
+emit_16(1510);
+emit_16(1577);
+emit_16(1511);
+emit_16(1577);
+emit_16(1510);
+emit_16(1577);
+emit_16(1511);
+emit_16(1578);
+emit_16(1512);
+emit_16(1578);
+emit_16(1511);
+emit_16(1578);
+emit_16(1512);
+emit_16(1579);
+emit_16(1513);
+emit_16(1579);
+emit_16(1512);
+emit_16(1579);
+emit_16(1513);
+emit_16(1580);
+emit_16(1514);
+emit_16(1580);
+emit_16(1513);
+emit_16(1580);
+emit_16(1514);
+emit_16(1581);
+emit_16(1515);
+emit_16(1581);
+emit_16(1514);
+emit_16(1581);
+emit_16(1515);
+emit_16(1582);
+emit_16(1516);
+emit_16(1582);
+emit_16(1515);
+emit_16(1582);
+emit_16(1516);
+emit_16(1583);
+emit_16(1517);
+emit_16(1583);
+emit_16(1516);
+emit_16(1584);
+emit_16(1518);
+emit_16(1585);
+emit_16(1519);
+emit_16(1585);
+emit_16(1518);
+emit_16(1585);
+emit_16(1519);
+emit_16(1586);
+emit_16(1520);
+emit_16(1586);
+emit_16(1519);
+emit_16(1586);
+emit_16(1520);
+emit_16(1587);
+emit_16(1521);
+emit_16(1587);
+emit_16(1520);
+emit_16(1587);
+emit_16(1521);
+emit_16(1588);
+emit_16(1522);
+emit_16(1588);
+emit_16(1521);
+emit_16(1588);
+emit_16(1522);
+emit_16(1589);
+emit_16(1523);
+emit_16(1589);
+emit_16(1522);
+emit_16(1589);
+emit_16(1523);
+emit_16(1590);
+emit_16(1524);
+emit_16(1590);
+emit_16(1523);
+emit_16(1590);
+emit_16(1524);
+emit_16(1591);
+emit_16(1525);
+emit_16(1591);
+emit_16(1524);
+emit_16(1591);
+emit_16(1525);
+emit_16(1592);
+emit_16(1526);
+emit_16(1592);
+emit_16(1525);
+emit_16(1592);
+emit_16(1526);
+emit_16(1593);
+emit_16(1527);
+emit_16(1593);
+emit_16(1526);
+emit_16(1593);
+emit_16(1527);
+emit_16(1594);
+emit_16(1528);
+emit_16(1594);
+emit_16(1527);
+emit_16(1594);
+emit_16(1528);
+emit_16(1595);
+emit_16(1529);
+emit_16(1595);
+emit_16(1528);
+emit_16(1595);
+emit_16(1529);
+emit_16(1596);
+emit_16(1530);
+emit_16(1596);
+emit_16(1529);
+emit_16(1596);
+emit_16(1530);
+emit_16(1597);
+emit_16(1531);
+emit_16(1597);
+emit_16(1530);
+emit_16(1597);
+emit_16(1531);
+emit_16(1598);
+emit_16(1532);
+emit_16(1598);
+emit_16(1531);
+emit_16(1598);
+emit_16(1532);
+emit_16(1599);
+emit_16(1533);
+emit_16(1599);
+emit_16(1532);
+emit_16(1599);
+emit_16(1533);
+emit_16(1600);
+emit_16(1534);
+emit_16(1600);
+emit_16(1533);
+emit_16(1600);
+emit_16(1534);
+emit_16(1601);
+emit_16(1535);
+emit_16(1601);
+emit_16(1534);
+emit_16(1601);
+emit_16(1535);
+emit_16(1602);
+emit_16(1536);
+emit_16(1602);
+emit_16(1535);
+emit_16(1602);
+emit_16(1536);
+emit_16(1603);
+emit_16(1537);
+emit_16(1603);
+emit_16(1536);
+emit_16(1603);
+emit_16(1537);
+emit_16(1604);
+emit_16(1538);
+emit_16(1604);
+emit_16(1537);
+emit_16(1604);
+emit_16(1538);
+emit_16(1605);
+emit_16(1539);
+emit_16(1605);
+emit_16(1538);
+emit_16(1605);
+emit_16(1539);
+emit_16(1606);
+emit_16(1540);
+emit_16(1606);
+emit_16(1539);
+emit_16(1606);
+emit_16(1540);
+emit_16(1607);
+emit_16(1541);
+emit_16(1607);
+emit_16(1540);
+emit_16(1607);
+emit_16(1541);
+emit_16(1608);
+emit_16(1542);
+emit_16(1608);
+emit_16(1541);
+emit_16(1608);
+emit_16(1542);
+emit_16(1609);
+emit_16(1543);
+emit_16(1609);
+emit_16(1542);
+emit_16(1609);
+emit_16(1543);
+emit_16(1610);
+emit_16(1544);
+emit_16(1610);
+emit_16(1543);
+emit_16(1610);
+emit_16(1544);
+emit_16(1611);
+emit_16(1545);
+emit_16(1611);
+emit_16(1544);
+emit_16(1611);
+emit_16(1545);
+emit_16(1612);
+emit_16(1546);
+emit_16(1612);
+emit_16(1545);
+emit_16(1612);
+emit_16(1546);
+emit_16(1613);
+emit_16(1547);
+emit_16(1613);
+emit_16(1546);
+emit_16(1613);
+emit_16(1547);
+emit_16(1614);
+emit_16(1548);
+emit_16(1614);
+emit_16(1547);
+emit_16(1614);
+emit_16(1548);
+emit_16(1615);
+emit_16(1549);
+emit_16(1615);
+emit_16(1548);
+emit_16(1615);
+emit_16(1549);
+emit_16(1616);
+emit_16(1550);
+emit_16(1616);
+emit_16(1549);
+emit_16(1616);
+emit_16(1550);
+emit_16(1617);
+emit_16(1551);
+emit_16(1617);
+emit_16(1550);
+emit_16(1617);
+emit_16(1551);
+emit_16(1618);
+emit_16(1552);
+emit_16(1618);
+emit_16(1551);
+emit_16(1618);
+emit_16(1552);
+emit_16(1619);
+emit_16(1553);
+emit_16(1619);
+emit_16(1552);
+emit_16(1619);
+emit_16(1553);
+emit_16(1620);
+emit_16(1554);
+emit_16(1620);
+emit_16(1553);
+emit_16(1620);
+emit_16(1554);
+emit_16(1621);
+emit_16(1555);
+emit_16(1621);
+emit_16(1554);
+emit_16(1621);
+emit_16(1555);
+emit_16(1622);
+emit_16(1556);
+emit_16(1622);
+emit_16(1555);
+emit_16(1622);
+emit_16(1556);
+emit_16(1623);
+emit_16(1557);
+emit_16(1623);
+emit_16(1556);
+emit_16(1623);
+emit_16(1557);
+emit_16(1624);
+emit_16(1558);
+emit_16(1624);
+emit_16(1557);
+emit_16(1624);
+emit_16(1558);
+emit_16(1625);
+emit_16(1559);
+emit_16(1625);
+emit_16(1558);
+emit_16(1625);
+emit_16(1559);
+emit_16(1626);
+emit_16(1560);
+emit_16(1626);
+emit_16(1559);
+emit_16(1626);
+emit_16(1560);
+emit_16(1627);
+emit_16(1561);
+emit_16(1627);
+emit_16(1560);
+emit_16(1627);
+emit_16(1561);
+emit_16(1628);
+emit_16(1562);
+emit_16(1628);
+emit_16(1561);
+emit_16(1628);
+emit_16(1562);
+emit_16(1629);
+emit_16(1563);
+emit_16(1629);
+emit_16(1562);
+emit_16(1629);
+emit_16(1563);
+emit_16(1630);
+emit_16(1564);
+emit_16(1630);
+emit_16(1563);
+emit_16(1630);
+emit_16(1564);
+emit_16(1631);
+emit_16(1565);
+emit_16(1631);
+emit_16(1564);
+emit_16(1631);
+emit_16(1565);
+emit_16(1632);
+emit_16(1566);
+emit_16(1632);
+emit_16(1565);
+emit_16(1632);
+emit_16(1566);
+emit_16(1633);
+emit_16(1567);
+emit_16(1633);
+emit_16(1566);
+emit_16(1633);
+emit_16(1567);
+emit_16(1634);
+emit_16(1568);
+emit_16(1634);
+emit_16(1567);
+emit_16(1634);
+emit_16(1568);
+emit_16(1635);
+emit_16(1569);
+emit_16(1635);
+emit_16(1568);
+emit_16(1635);
+emit_16(1569);
+emit_16(1636);
+emit_16(1570);
+emit_16(1636);
+emit_16(1569);
+emit_16(1636);
+emit_16(1570);
+emit_16(1637);
+emit_16(1571);
+emit_16(1637);
+emit_16(1570);
+emit_16(1637);
+emit_16(1571);
+emit_16(1638);
+emit_16(1572);
+emit_16(1638);
+emit_16(1571);
+emit_16(1638);
+emit_16(1572);
+emit_16(1639);
+emit_16(1573);
+emit_16(1639);
+emit_16(1572);
+emit_16(1639);
+emit_16(1573);
+emit_16(1640);
+emit_16(1574);
+emit_16(1640);
+emit_16(1573);
+emit_16(1640);
+emit_16(1574);
+emit_16(1641);
+emit_16(1575);
+emit_16(1641);
+emit_16(1574);
+emit_16(1641);
+emit_16(1575);
+emit_16(1642);
+emit_16(1576);
+emit_16(1642);
+emit_16(1575);
+emit_16(1642);
+emit_16(1576);
+emit_16(1643);
+emit_16(1577);
+emit_16(1643);
+emit_16(1576);
+emit_16(1643);
+emit_16(1577);
+emit_16(1644);
+emit_16(1578);
+emit_16(1644);
+emit_16(1577);
+emit_16(1644);
+emit_16(1578);
+emit_16(1645);
+emit_16(1579);
+emit_16(1645);
+emit_16(1578);
+emit_16(1645);
+emit_16(1579);
+emit_16(1646);
+emit_16(1580);
+emit_16(1646);
+emit_16(1579);
+emit_16(1646);
+emit_16(1580);
+emit_16(1647);
+emit_16(1581);
+emit_16(1647);
+emit_16(1580);
+emit_16(1647);
+emit_16(1581);
+emit_16(1648);
+emit_16(1582);
+emit_16(1648);
+emit_16(1581);
+emit_16(1648);
+emit_16(1582);
+emit_16(1649);
+emit_16(1583);
+emit_16(1649);
+emit_16(1582);
+emit_16(1650);
+emit_16(1584);
+emit_16(1651);
+emit_16(1585);
+emit_16(1651);
+emit_16(1584);
+emit_16(1651);
+emit_16(1585);
+emit_16(1652);
+emit_16(1586);
+emit_16(1652);
+emit_16(1585);
+emit_16(1652);
+emit_16(1586);
+emit_16(1653);
+emit_16(1587);
+emit_16(1653);
+emit_16(1586);
+emit_16(1653);
+emit_16(1587);
+emit_16(1654);
+emit_16(1588);
+emit_16(1654);
+emit_16(1587);
+emit_16(1654);
+emit_16(1588);
+emit_16(1655);
+emit_16(1589);
+emit_16(1655);
+emit_16(1588);
+emit_16(1655);
+emit_16(1589);
+emit_16(1656);
+emit_16(1590);
+emit_16(1656);
+emit_16(1589);
+emit_16(1656);
+emit_16(1590);
+emit_16(1657);
+emit_16(1591);
+emit_16(1657);
+emit_16(1590);
+emit_16(1657);
+emit_16(1591);
+emit_16(1658);
+emit_16(1592);
+emit_16(1658);
+emit_16(1591);
+emit_16(1658);
+emit_16(1592);
+emit_16(1659);
+emit_16(1593);
+emit_16(1659);
+emit_16(1592);
+emit_16(1659);
+emit_16(1593);
+emit_16(1660);
+emit_16(1594);
+emit_16(1660);
+emit_16(1593);
+emit_16(1660);
+emit_16(1594);
+emit_16(1661);
+emit_16(1595);
+emit_16(1661);
+emit_16(1594);
+emit_16(1661);
+emit_16(1595);
+emit_16(1662);
+emit_16(1596);
+emit_16(1662);
+emit_16(1595);
+emit_16(1662);
+emit_16(1596);
+emit_16(1663);
+emit_16(1597);
+emit_16(1663);
+emit_16(1596);
+emit_16(1663);
+emit_16(1597);
+emit_16(1664);
+emit_16(1598);
+emit_16(1664);
+emit_16(1597);
+emit_16(1664);
+emit_16(1598);
+emit_16(1665);
+emit_16(1599);
+emit_16(1665);
+emit_16(1598);
+emit_16(1665);
+emit_16(1599);
+emit_16(1666);
+emit_16(1600);
+emit_16(1666);
+emit_16(1599);
+emit_16(1666);
+emit_16(1600);
+emit_16(1667);
+emit_16(1601);
+emit_16(1667);
+emit_16(1600);
+emit_16(1667);
+emit_16(1601);
+emit_16(1668);
+emit_16(1602);
+emit_16(1668);
+emit_16(1601);
+emit_16(1668);
+emit_16(1602);
+emit_16(1669);
+emit_16(1603);
+emit_16(1669);
+emit_16(1602);
+emit_16(1669);
+emit_16(1603);
+emit_16(1670);
+emit_16(1604);
+emit_16(1670);
+emit_16(1603);
+emit_16(1670);
+emit_16(1604);
+emit_16(1671);
+emit_16(1605);
+emit_16(1671);
+emit_16(1604);
+emit_16(1671);
+emit_16(1605);
+emit_16(1672);
+emit_16(1606);
+emit_16(1672);
+emit_16(1605);
+emit_16(1672);
+emit_16(1606);
+emit_16(1673);
+emit_16(1607);
+emit_16(1673);
+emit_16(1606);
+emit_16(1673);
+emit_16(1607);
+emit_16(1674);
+emit_16(1608);
+emit_16(1674);
+emit_16(1607);
+emit_16(1674);
+emit_16(1608);
+emit_16(1675);
+emit_16(1609);
+emit_16(1675);
+emit_16(1608);
+emit_16(1675);
+emit_16(1609);
+emit_16(1676);
+emit_16(1610);
+emit_16(1676);
+emit_16(1609);
+emit_16(1676);
+emit_16(1610);
+emit_16(1677);
+emit_16(1611);
+emit_16(1677);
+emit_16(1610);
+emit_16(1677);
+emit_16(1611);
+emit_16(1678);
+emit_16(1612);
+emit_16(1678);
+emit_16(1611);
+emit_16(1678);
+emit_16(1612);
+emit_16(1679);
+emit_16(1613);
+emit_16(1679);
+emit_16(1612);
+emit_16(1679);
+emit_16(1613);
+emit_16(1680);
+emit_16(1614);
+emit_16(1680);
+emit_16(1613);
+emit_16(1680);
+emit_16(1614);
+emit_16(1681);
+emit_16(1615);
+emit_16(1681);
+emit_16(1614);
+emit_16(1681);
+emit_16(1615);
+emit_16(1682);
+emit_16(1616);
+emit_16(1682);
+emit_16(1615);
+emit_16(1682);
+emit_16(1616);
+emit_16(1683);
+emit_16(1617);
+emit_16(1683);
+emit_16(1616);
+emit_16(1683);
+emit_16(1617);
+emit_16(1684);
+emit_16(1618);
+emit_16(1684);
+emit_16(1617);
+emit_16(1684);
+emit_16(1618);
+emit_16(1685);
+emit_16(1619);
+emit_16(1685);
+emit_16(1618);
+emit_16(1685);
+emit_16(1619);
+emit_16(1686);
+emit_16(1620);
+emit_16(1686);
+emit_16(1619);
+emit_16(1686);
+emit_16(1620);
+emit_16(1687);
+emit_16(1621);
+emit_16(1687);
+emit_16(1620);
+emit_16(1687);
+emit_16(1621);
+emit_16(1688);
+emit_16(1622);
+emit_16(1688);
+emit_16(1621);
+emit_16(1688);
+emit_16(1622);
+emit_16(1689);
+emit_16(1623);
+emit_16(1689);
+emit_16(1622);
+emit_16(1689);
+emit_16(1623);
+emit_16(1690);
+emit_16(1624);
+emit_16(1690);
+emit_16(1623);
+emit_16(1690);
+emit_16(1624);
+emit_16(1691);
+emit_16(1625);
+emit_16(1691);
+emit_16(1624);
+emit_16(1691);
+emit_16(1625);
+emit_16(1692);
+emit_16(1626);
+emit_16(1692);
+emit_16(1625);
+emit_16(1692);
+emit_16(1626);
+emit_16(1693);
+emit_16(1627);
+emit_16(1693);
+emit_16(1626);
+emit_16(1693);
+emit_16(1627);
+emit_16(1694);
+emit_16(1628);
+emit_16(1694);
+emit_16(1627);
+emit_16(1694);
+emit_16(1628);
+emit_16(1695);
+emit_16(1629);
+emit_16(1695);
+emit_16(1628);
+emit_16(1695);
+emit_16(1629);
+emit_16(1696);
+emit_16(1630);
+emit_16(1696);
+emit_16(1629);
+emit_16(1696);
+emit_16(1630);
+emit_16(1697);
+emit_16(1631);
+emit_16(1697);
+emit_16(1630);
+emit_16(1697);
+emit_16(1631);
+emit_16(1698);
+emit_16(1632);
+emit_16(1698);
+emit_16(1631);
+emit_16(1698);
+emit_16(1632);
+emit_16(1699);
+emit_16(1633);
+emit_16(1699);
+emit_16(1632);
+emit_16(1699);
+emit_16(1633);
+emit_16(1700);
+emit_16(1634);
+emit_16(1700);
+emit_16(1633);
+emit_16(1700);
+emit_16(1634);
+emit_16(1701);
+emit_16(1635);
+emit_16(1701);
+emit_16(1634);
+emit_16(1701);
+emit_16(1635);
+emit_16(1702);
+emit_16(1636);
+emit_16(1702);
+emit_16(1635);
+emit_16(1702);
+emit_16(1636);
+emit_16(1703);
+emit_16(1637);
+emit_16(1703);
+emit_16(1636);
+emit_16(1703);
+emit_16(1637);
+emit_16(1704);
+emit_16(1638);
+emit_16(1704);
+emit_16(1637);
+emit_16(1704);
+emit_16(1638);
+emit_16(1705);
+emit_16(1639);
+emit_16(1705);
+emit_16(1638);
+emit_16(1705);
+emit_16(1639);
+emit_16(1706);
+emit_16(1640);
+emit_16(1706);
+emit_16(1639);
+emit_16(1706);
+emit_16(1640);
+emit_16(1707);
+emit_16(1641);
+emit_16(1707);
+emit_16(1640);
+emit_16(1707);
+emit_16(1641);
+emit_16(1708);
+emit_16(1642);
+emit_16(1708);
+emit_16(1641);
+emit_16(1708);
+emit_16(1642);
+emit_16(1709);
+emit_16(1643);
+emit_16(1709);
+emit_16(1642);
+emit_16(1709);
+emit_16(1643);
+emit_16(1710);
+emit_16(1644);
+emit_16(1710);
+emit_16(1643);
+emit_16(1710);
+emit_16(1644);
+emit_16(1711);
+emit_16(1645);
+emit_16(1711);
+emit_16(1644);
+emit_16(1711);
+emit_16(1645);
+emit_16(1712);
+emit_16(1646);
+emit_16(1712);
+emit_16(1645);
+emit_16(1712);
+emit_16(1646);
+emit_16(1713);
+emit_16(1647);
+emit_16(1713);
+emit_16(1646);
+emit_16(1713);
+emit_16(1647);
+emit_16(1714);
+emit_16(1648);
+emit_16(1714);
+emit_16(1647);
+emit_16(1714);
+emit_16(1648);
+emit_16(1715);
+emit_16(1649);
+emit_16(1715);
+emit_16(1648);
+emit_16(1716);
+emit_16(1650);
+emit_16(1717);
+emit_16(1651);
+emit_16(1717);
+emit_16(1650);
+emit_16(1717);
+emit_16(1651);
+emit_16(1718);
+emit_16(1652);
+emit_16(1718);
+emit_16(1651);
+emit_16(1718);
+emit_16(1652);
+emit_16(1719);
+emit_16(1653);
+emit_16(1719);
+emit_16(1652);
+emit_16(1719);
+emit_16(1653);
+emit_16(1720);
+emit_16(1654);
+emit_16(1720);
+emit_16(1653);
+emit_16(1720);
+emit_16(1654);
+emit_16(1721);
+emit_16(1655);
+emit_16(1721);
+emit_16(1654);
+emit_16(1721);
+emit_16(1655);
+emit_16(1722);
+emit_16(1656);
+emit_16(1722);
+emit_16(1655);
+emit_16(1722);
+emit_16(1656);
+emit_16(1723);
+emit_16(1657);
+emit_16(1723);
+emit_16(1656);
+emit_16(1723);
+emit_16(1657);
+emit_16(1724);
+emit_16(1658);
+emit_16(1724);
+emit_16(1657);
+emit_16(1724);
+emit_16(1658);
+emit_16(1725);
+emit_16(1659);
+emit_16(1725);
+emit_16(1658);
+emit_16(1725);
+emit_16(1659);
+emit_16(1726);
+emit_16(1660);
+emit_16(1726);
+emit_16(1659);
+emit_16(1726);
+emit_16(1660);
+emit_16(1727);
+emit_16(1661);
+emit_16(1727);
+emit_16(1660);
+emit_16(1727);
+emit_16(1661);
+emit_16(1728);
+emit_16(1662);
+emit_16(1728);
+emit_16(1661);
+emit_16(1728);
+emit_16(1662);
+emit_16(1729);
+emit_16(1663);
+emit_16(1729);
+emit_16(1662);
+emit_16(1729);
+emit_16(1663);
+emit_16(1730);
+emit_16(1664);
+emit_16(1730);
+emit_16(1663);
+emit_16(1730);
+emit_16(1664);
+emit_16(1731);
+emit_16(1665);
+emit_16(1731);
+emit_16(1664);
+emit_16(1731);
+emit_16(1665);
+emit_16(1732);
+emit_16(1666);
+emit_16(1732);
+emit_16(1665);
+emit_16(1732);
+emit_16(1666);
+emit_16(1733);
+emit_16(1667);
+emit_16(1733);
+emit_16(1666);
+emit_16(1733);
+emit_16(1667);
+emit_16(1734);
+emit_16(1668);
+emit_16(1734);
+emit_16(1667);
+emit_16(1734);
+emit_16(1668);
+emit_16(1735);
+emit_16(1669);
+emit_16(1735);
+emit_16(1668);
+emit_16(1735);
+emit_16(1669);
+emit_16(1736);
+emit_16(1670);
+emit_16(1736);
+emit_16(1669);
+emit_16(1736);
+emit_16(1670);
+emit_16(1737);
+emit_16(1671);
+emit_16(1737);
+emit_16(1670);
+emit_16(1737);
+emit_16(1671);
+emit_16(1738);
+emit_16(1672);
+emit_16(1738);
+emit_16(1671);
+emit_16(1738);
+emit_16(1672);
+emit_16(1739);
+emit_16(1673);
+emit_16(1739);
+emit_16(1672);
+emit_16(1739);
+emit_16(1673);
+emit_16(1740);
+emit_16(1674);
+emit_16(1740);
+emit_16(1673);
+emit_16(1740);
+emit_16(1674);
+emit_16(1741);
+emit_16(1675);
+emit_16(1741);
+emit_16(1674);
+emit_16(1741);
+emit_16(1675);
+emit_16(1742);
+emit_16(1676);
+emit_16(1742);
+emit_16(1675);
+emit_16(1742);
+emit_16(1676);
+emit_16(1743);
+emit_16(1677);
+emit_16(1743);
+emit_16(1676);
+emit_16(1743);
+emit_16(1677);
+emit_16(1744);
+emit_16(1678);
+emit_16(1744);
+emit_16(1677);
+emit_16(1744);
+emit_16(1678);
+emit_16(1745);
+emit_16(1679);
+emit_16(1745);
+emit_16(1678);
+emit_16(1745);
+emit_16(1679);
+emit_16(1746);
+emit_16(1680);
+emit_16(1746);
+emit_16(1679);
+emit_16(1746);
+emit_16(1680);
+emit_16(1747);
+emit_16(1681);
+emit_16(1747);
+emit_16(1680);
+emit_16(1747);
+emit_16(1681);
+emit_16(1748);
+emit_16(1682);
+emit_16(1748);
+emit_16(1681);
+emit_16(1748);
+emit_16(1682);
+emit_16(1749);
+emit_16(1683);
+emit_16(1749);
+emit_16(1682);
+emit_16(1749);
+emit_16(1683);
+emit_16(1750);
+emit_16(1684);
+emit_16(1750);
+emit_16(1683);
+emit_16(1750);
+emit_16(1684);
+emit_16(1751);
+emit_16(1685);
+emit_16(1751);
+emit_16(1684);
+emit_16(1751);
+emit_16(1685);
+emit_16(1752);
+emit_16(1686);
+emit_16(1752);
+emit_16(1685);
+emit_16(1752);
+emit_16(1686);
+emit_16(1753);
+emit_16(1687);
+emit_16(1753);
+emit_16(1686);
+emit_16(1753);
+emit_16(1687);
+emit_16(1754);
+emit_16(1688);
+emit_16(1754);
+emit_16(1687);
+emit_16(1754);
+emit_16(1688);
+emit_16(1755);
+emit_16(1689);
+emit_16(1755);
+emit_16(1688);
+emit_16(1755);
+emit_16(1689);
+emit_16(1756);
+emit_16(1690);
+emit_16(1756);
+emit_16(1689);
+emit_16(1756);
+emit_16(1690);
+emit_16(1757);
+emit_16(1691);
+emit_16(1757);
+emit_16(1690);
+emit_16(1757);
+emit_16(1691);
+emit_16(1758);
+emit_16(1692);
+emit_16(1758);
+emit_16(1691);
+emit_16(1758);
+emit_16(1692);
+emit_16(1759);
+emit_16(1693);
+emit_16(1759);
+emit_16(1692);
+emit_16(1759);
+emit_16(1693);
+emit_16(1760);
+emit_16(1694);
+emit_16(1760);
+emit_16(1693);
+emit_16(1760);
+emit_16(1694);
+emit_16(1761);
+emit_16(1695);
+emit_16(1761);
+emit_16(1694);
+emit_16(1761);
+emit_16(1695);
+emit_16(1762);
+emit_16(1696);
+emit_16(1762);
+emit_16(1695);
+emit_16(1762);
+emit_16(1696);
+emit_16(1763);
+emit_16(1697);
+emit_16(1763);
+emit_16(1696);
+emit_16(1763);
+emit_16(1697);
+emit_16(1764);
+emit_16(1698);
+emit_16(1764);
+emit_16(1697);
+emit_16(1764);
+emit_16(1698);
+emit_16(1765);
+emit_16(1699);
+emit_16(1765);
+emit_16(1698);
+emit_16(1765);
+emit_16(1699);
+emit_16(1766);
+emit_16(1700);
+emit_16(1766);
+emit_16(1699);
+emit_16(1766);
+emit_16(1700);
+emit_16(1767);
+emit_16(1701);
+emit_16(1767);
+emit_16(1700);
+emit_16(1767);
+emit_16(1701);
+emit_16(1768);
+emit_16(1702);
+emit_16(1768);
+emit_16(1701);
+emit_16(1768);
+emit_16(1702);
+emit_16(1769);
+emit_16(1703);
+emit_16(1769);
+emit_16(1702);
+emit_16(1769);
+emit_16(1703);
+emit_16(1770);
+emit_16(1704);
+emit_16(1770);
+emit_16(1703);
+emit_16(1770);
+emit_16(1704);
+emit_16(1771);
+emit_16(1705);
+emit_16(1771);
+emit_16(1704);
+emit_16(1771);
+emit_16(1705);
+emit_16(1772);
+emit_16(1706);
+emit_16(1772);
+emit_16(1705);
+emit_16(1772);
+emit_16(1706);
+emit_16(1773);
+emit_16(1707);
+emit_16(1773);
+emit_16(1706);
+emit_16(1773);
+emit_16(1707);
+emit_16(1774);
+emit_16(1708);
+emit_16(1774);
+emit_16(1707);
+emit_16(1774);
+emit_16(1708);
+emit_16(1775);
+emit_16(1709);
+emit_16(1775);
+emit_16(1708);
+emit_16(1775);
+emit_16(1709);
+emit_16(1776);
+emit_16(1710);
+emit_16(1776);
+emit_16(1709);
+emit_16(1776);
+emit_16(1710);
+emit_16(1777);
+emit_16(1711);
+emit_16(1777);
+emit_16(1710);
+emit_16(1777);
+emit_16(1711);
+emit_16(1778);
+emit_16(1712);
+emit_16(1778);
+emit_16(1711);
+emit_16(1778);
+emit_16(1712);
+emit_16(1779);
+emit_16(1713);
+emit_16(1779);
+emit_16(1712);
+emit_16(1779);
+emit_16(1713);
+emit_16(1780);
+emit_16(1714);
+emit_16(1780);
+emit_16(1713);
+emit_16(1780);
+emit_16(1714);
+emit_16(1781);
+emit_16(1715);
+emit_16(1781);
+emit_16(1714);
+emit_16(1782);
+emit_16(1716);
+emit_16(1783);
+emit_16(1717);
+emit_16(1783);
+emit_16(1716);
+emit_16(1783);
+emit_16(1717);
+emit_16(1784);
+emit_16(1718);
+emit_16(1784);
+emit_16(1717);
+emit_16(1784);
+emit_16(1718);
+emit_16(1785);
+emit_16(1719);
+emit_16(1785);
+emit_16(1718);
+emit_16(1785);
+emit_16(1719);
+emit_16(1786);
+emit_16(1720);
+emit_16(1786);
+emit_16(1719);
+emit_16(1786);
+emit_16(1720);
+emit_16(1787);
+emit_16(1721);
+emit_16(1787);
+emit_16(1720);
+emit_16(1787);
+emit_16(1721);
+emit_16(1788);
+emit_16(1722);
+emit_16(1788);
+emit_16(1721);
+emit_16(1788);
+emit_16(1722);
+emit_16(1789);
+emit_16(1723);
+emit_16(1789);
+emit_16(1722);
+emit_16(1789);
+emit_16(1723);
+emit_16(1790);
+emit_16(1724);
+emit_16(1790);
+emit_16(1723);
+emit_16(1790);
+emit_16(1724);
+emit_16(1791);
+emit_16(1725);
+emit_16(1791);
+emit_16(1724);
+emit_16(1791);
+emit_16(1725);
+emit_16(1792);
+emit_16(1726);
+emit_16(1792);
+emit_16(1725);
+emit_16(1792);
+emit_16(1726);
+emit_16(1793);
+emit_16(1727);
+emit_16(1793);
+emit_16(1726);
+emit_16(1793);
+emit_16(1727);
+emit_16(1794);
+emit_16(1728);
+emit_16(1794);
+emit_16(1727);
+emit_16(1794);
+emit_16(1728);
+emit_16(1795);
+emit_16(1729);
+emit_16(1795);
+emit_16(1728);
+emit_16(1795);
+emit_16(1729);
+emit_16(1796);
+emit_16(1730);
+emit_16(1796);
+emit_16(1729);
+emit_16(1796);
+emit_16(1730);
+emit_16(1797);
+emit_16(1731);
+emit_16(1797);
+emit_16(1730);
+emit_16(1797);
+emit_16(1731);
+emit_16(1798);
+emit_16(1732);
+emit_16(1798);
+emit_16(1731);
+emit_16(1798);
+emit_16(1732);
+emit_16(1799);
+emit_16(1733);
+emit_16(1799);
+emit_16(1732);
+emit_16(1799);
+emit_16(1733);
+emit_16(1800);
+emit_16(1734);
+emit_16(1800);
+emit_16(1733);
+emit_16(1800);
+emit_16(1734);
+emit_16(1801);
+emit_16(1735);
+emit_16(1801);
+emit_16(1734);
+emit_16(1801);
+emit_16(1735);
+emit_16(1802);
+emit_16(1736);
+emit_16(1802);
+emit_16(1735);
+emit_16(1802);
+emit_16(1736);
+emit_16(1803);
+emit_16(1737);
+emit_16(1803);
+emit_16(1736);
+emit_16(1803);
+emit_16(1737);
+emit_16(1804);
+emit_16(1738);
+emit_16(1804);
+emit_16(1737);
+emit_16(1804);
+emit_16(1738);
+emit_16(1805);
+emit_16(1739);
+emit_16(1805);
+emit_16(1738);
+emit_16(1805);
+emit_16(1739);
+emit_16(1806);
+emit_16(1740);
+emit_16(1806);
+emit_16(1739);
+emit_16(1806);
+emit_16(1740);
+emit_16(1807);
+emit_16(1741);
+emit_16(1807);
+emit_16(1740);
+emit_16(1807);
+emit_16(1741);
+emit_16(1808);
+emit_16(1742);
+emit_16(1808);
+emit_16(1741);
+emit_16(1808);
+emit_16(1742);
+emit_16(1809);
+emit_16(1743);
+emit_16(1809);
+emit_16(1742);
+emit_16(1809);
+emit_16(1743);
+emit_16(1810);
+emit_16(1744);
+emit_16(1810);
+emit_16(1743);
+emit_16(1810);
+emit_16(1744);
+emit_16(1811);
+emit_16(1745);
+emit_16(1811);
+emit_16(1744);
+emit_16(1811);
+emit_16(1745);
+emit_16(1812);
+emit_16(1746);
+emit_16(1812);
+emit_16(1745);
+emit_16(1812);
+emit_16(1746);
+emit_16(1813);
+emit_16(1747);
+emit_16(1813);
+emit_16(1746);
+emit_16(1813);
+emit_16(1747);
+emit_16(1814);
+emit_16(1748);
+emit_16(1814);
+emit_16(1747);
+emit_16(1814);
+emit_16(1748);
+emit_16(1815);
+emit_16(1749);
+emit_16(1815);
+emit_16(1748);
+emit_16(1815);
+emit_16(1749);
+emit_16(1816);
+emit_16(1750);
+emit_16(1816);
+emit_16(1749);
+emit_16(1816);
+emit_16(1750);
+emit_16(1817);
+emit_16(1751);
+emit_16(1817);
+emit_16(1750);
+emit_16(1817);
+emit_16(1751);
+emit_16(1818);
+emit_16(1752);
+emit_16(1818);
+emit_16(1751);
+emit_16(1818);
+emit_16(1752);
+emit_16(1819);
+emit_16(1753);
+emit_16(1819);
+emit_16(1752);
+emit_16(1819);
+emit_16(1753);
+emit_16(1820);
+emit_16(1754);
+emit_16(1820);
+emit_16(1753);
+emit_16(1820);
+emit_16(1754);
+emit_16(1821);
+emit_16(1755);
+emit_16(1821);
+emit_16(1754);
+emit_16(1821);
+emit_16(1755);
+emit_16(1822);
+emit_16(1756);
+emit_16(1822);
+emit_16(1755);
+emit_16(1822);
+emit_16(1756);
+emit_16(1823);
+emit_16(1757);
+emit_16(1823);
+emit_16(1756);
+emit_16(1823);
+emit_16(1757);
+emit_16(1824);
+emit_16(1758);
+emit_16(1824);
+emit_16(1757);
+emit_16(1824);
+emit_16(1758);
+emit_16(1825);
+emit_16(1759);
+emit_16(1825);
+emit_16(1758);
+emit_16(1825);
+emit_16(1759);
+emit_16(1826);
+emit_16(1760);
+emit_16(1826);
+emit_16(1759);
+emit_16(1826);
+emit_16(1760);
+emit_16(1827);
+emit_16(1761);
+emit_16(1827);
+emit_16(1760);
+emit_16(1827);
+emit_16(1761);
+emit_16(1828);
+emit_16(1762);
+emit_16(1828);
+emit_16(1761);
+emit_16(1828);
+emit_16(1762);
+emit_16(1829);
+emit_16(1763);
+emit_16(1829);
+emit_16(1762);
+emit_16(1829);
+emit_16(1763);
+emit_16(1830);
+emit_16(1764);
+emit_16(1830);
+emit_16(1763);
+emit_16(1830);
+emit_16(1764);
+emit_16(1831);
+emit_16(1765);
+emit_16(1831);
+emit_16(1764);
+emit_16(1831);
+emit_16(1765);
+emit_16(1832);
+emit_16(1766);
+emit_16(1832);
+emit_16(1765);
+emit_16(1832);
+emit_16(1766);
+emit_16(1833);
+emit_16(1767);
+emit_16(1833);
+emit_16(1766);
+emit_16(1833);
+emit_16(1767);
+emit_16(1834);
+emit_16(1768);
+emit_16(1834);
+emit_16(1767);
+emit_16(1834);
+emit_16(1768);
+emit_16(1835);
+emit_16(1769);
+emit_16(1835);
+emit_16(1768);
+emit_16(1835);
+emit_16(1769);
+emit_16(1836);
+emit_16(1770);
+emit_16(1836);
+emit_16(1769);
+emit_16(1836);
+emit_16(1770);
+emit_16(1837);
+emit_16(1771);
+emit_16(1837);
+emit_16(1770);
+emit_16(1837);
+emit_16(1771);
+emit_16(1838);
+emit_16(1772);
+emit_16(1838);
+emit_16(1771);
+emit_16(1838);
+emit_16(1772);
+emit_16(1839);
+emit_16(1773);
+emit_16(1839);
+emit_16(1772);
+emit_16(1839);
+emit_16(1773);
+emit_16(1840);
+emit_16(1774);
+emit_16(1840);
+emit_16(1773);
+emit_16(1840);
+emit_16(1774);
+emit_16(1841);
+emit_16(1775);
+emit_16(1841);
+emit_16(1774);
+emit_16(1841);
+emit_16(1775);
+emit_16(1842);
+emit_16(1776);
+emit_16(1842);
+emit_16(1775);
+emit_16(1842);
+emit_16(1776);
+emit_16(1843);
+emit_16(1777);
+emit_16(1843);
+emit_16(1776);
+emit_16(1843);
+emit_16(1777);
+emit_16(1844);
+emit_16(1778);
+emit_16(1844);
+emit_16(1777);
+emit_16(1844);
+emit_16(1778);
+emit_16(1845);
+emit_16(1779);
+emit_16(1845);
+emit_16(1778);
+emit_16(1845);
+emit_16(1779);
+emit_16(1846);
+emit_16(1780);
+emit_16(1846);
+emit_16(1779);
+emit_16(1846);
+emit_16(1780);
+emit_16(1847);
+emit_16(1781);
+emit_16(1847);
+emit_16(1780);
+emit_16(1848);
+emit_16(1782);
+emit_16(1849);
+emit_16(1783);
+emit_16(1849);
+emit_16(1782);
+emit_16(1849);
+emit_16(1783);
+emit_16(1850);
+emit_16(1784);
+emit_16(1850);
+emit_16(1783);
+emit_16(1850);
+emit_16(1784);
+emit_16(1851);
+emit_16(1785);
+emit_16(1851);
+emit_16(1784);
+emit_16(1851);
+emit_16(1785);
+emit_16(1852);
+emit_16(1786);
+emit_16(1852);
+emit_16(1785);
+emit_16(1852);
+emit_16(1786);
+emit_16(1853);
+emit_16(1787);
+emit_16(1853);
+emit_16(1786);
+emit_16(1853);
+emit_16(1787);
+emit_16(1854);
+emit_16(1788);
+emit_16(1854);
+emit_16(1787);
+emit_16(1854);
+emit_16(1788);
+emit_16(1855);
+emit_16(1789);
+emit_16(1855);
+emit_16(1788);
+emit_16(1855);
+emit_16(1789);
+emit_16(1856);
+emit_16(1790);
+emit_16(1856);
+emit_16(1789);
+emit_16(1856);
+emit_16(1790);
+emit_16(1857);
+emit_16(1791);
+emit_16(1857);
+emit_16(1790);
+emit_16(1857);
+emit_16(1791);
+emit_16(1858);
+emit_16(1792);
+emit_16(1858);
+emit_16(1791);
+emit_16(1858);
+emit_16(1792);
+emit_16(1859);
+emit_16(1793);
+emit_16(1859);
+emit_16(1792);
+emit_16(1859);
+emit_16(1793);
+emit_16(1860);
+emit_16(1794);
+emit_16(1860);
+emit_16(1793);
+emit_16(1860);
+emit_16(1794);
+emit_16(1861);
+emit_16(1795);
+emit_16(1861);
+emit_16(1794);
+emit_16(1861);
+emit_16(1795);
+emit_16(1862);
+emit_16(1796);
+emit_16(1862);
+emit_16(1795);
+emit_16(1862);
+emit_16(1796);
+emit_16(1863);
+emit_16(1797);
+emit_16(1863);
+emit_16(1796);
+emit_16(1863);
+emit_16(1797);
+emit_16(1864);
+emit_16(1798);
+emit_16(1864);
+emit_16(1797);
+emit_16(1864);
+emit_16(1798);
+emit_16(1865);
+emit_16(1799);
+emit_16(1865);
+emit_16(1798);
+emit_16(1865);
+emit_16(1799);
+emit_16(1866);
+emit_16(1800);
+emit_16(1866);
+emit_16(1799);
+emit_16(1866);
+emit_16(1800);
+emit_16(1867);
+emit_16(1801);
+emit_16(1867);
+emit_16(1800);
+emit_16(1867);
+emit_16(1801);
+emit_16(1868);
+emit_16(1802);
+emit_16(1868);
+emit_16(1801);
+emit_16(1868);
+emit_16(1802);
+emit_16(1869);
+emit_16(1803);
+emit_16(1869);
+emit_16(1802);
+emit_16(1869);
+emit_16(1803);
+emit_16(1870);
+emit_16(1804);
+emit_16(1870);
+emit_16(1803);
+emit_16(1870);
+emit_16(1804);
+emit_16(1871);
+emit_16(1805);
+emit_16(1871);
+emit_16(1804);
+emit_16(1871);
+emit_16(1805);
+emit_16(1872);
+emit_16(1806);
+emit_16(1872);
+emit_16(1805);
+emit_16(1872);
+emit_16(1806);
+emit_16(1873);
+emit_16(1807);
+emit_16(1873);
+emit_16(1806);
+emit_16(1873);
+emit_16(1807);
+emit_16(1874);
+emit_16(1808);
+emit_16(1874);
+emit_16(1807);
+emit_16(1874);
+emit_16(1808);
+emit_16(1875);
+emit_16(1809);
+emit_16(1875);
+emit_16(1808);
+emit_16(1875);
+emit_16(1809);
+emit_16(1876);
+emit_16(1810);
+emit_16(1876);
+emit_16(1809);
+emit_16(1876);
+emit_16(1810);
+emit_16(1877);
+emit_16(1811);
+emit_16(1877);
+emit_16(1810);
+emit_16(1877);
+emit_16(1811);
+emit_16(1878);
+emit_16(1812);
+emit_16(1878);
+emit_16(1811);
+emit_16(1878);
+emit_16(1812);
+emit_16(1879);
+emit_16(1813);
+emit_16(1879);
+emit_16(1812);
+emit_16(1879);
+emit_16(1813);
+emit_16(1880);
+emit_16(1814);
+emit_16(1880);
+emit_16(1813);
+emit_16(1880);
+emit_16(1814);
+emit_16(1881);
+emit_16(1815);
+emit_16(1881);
+emit_16(1814);
+emit_16(1881);
+emit_16(1815);
+emit_16(1882);
+emit_16(1816);
+emit_16(1882);
+emit_16(1815);
+emit_16(1882);
+emit_16(1816);
+emit_16(1883);
+emit_16(1817);
+emit_16(1883);
+emit_16(1816);
+emit_16(1883);
+emit_16(1817);
+emit_16(1884);
+emit_16(1818);
+emit_16(1884);
+emit_16(1817);
+emit_16(1884);
+emit_16(1818);
+emit_16(1885);
+emit_16(1819);
+emit_16(1885);
+emit_16(1818);
+emit_16(1885);
+emit_16(1819);
+emit_16(1886);
+emit_16(1820);
+emit_16(1886);
+emit_16(1819);
+emit_16(1886);
+emit_16(1820);
+emit_16(1887);
+emit_16(1821);
+emit_16(1887);
+emit_16(1820);
+emit_16(1887);
+emit_16(1821);
+emit_16(1888);
+emit_16(1822);
+emit_16(1888);
+emit_16(1821);
+emit_16(1888);
+emit_16(1822);
+emit_16(1889);
+emit_16(1823);
+emit_16(1889);
+emit_16(1822);
+emit_16(1889);
+emit_16(1823);
+emit_16(1890);
+emit_16(1824);
+emit_16(1890);
+emit_16(1823);
+emit_16(1890);
+emit_16(1824);
+emit_16(1891);
+emit_16(1825);
+emit_16(1891);
+emit_16(1824);
+emit_16(1891);
+emit_16(1825);
+emit_16(1892);
+emit_16(1826);
+emit_16(1892);
+emit_16(1825);
+emit_16(1892);
+emit_16(1826);
+emit_16(1893);
+emit_16(1827);
+emit_16(1893);
+emit_16(1826);
+emit_16(1893);
+emit_16(1827);
+emit_16(1894);
+emit_16(1828);
+emit_16(1894);
+emit_16(1827);
+emit_16(1894);
+emit_16(1828);
+emit_16(1895);
+emit_16(1829);
+emit_16(1895);
+emit_16(1828);
+emit_16(1895);
+emit_16(1829);
+emit_16(1896);
+emit_16(1830);
+emit_16(1896);
+emit_16(1829);
+emit_16(1896);
+emit_16(1830);
+emit_16(1897);
+emit_16(1831);
+emit_16(1897);
+emit_16(1830);
+emit_16(1897);
+emit_16(1831);
+emit_16(1898);
+emit_16(1832);
+emit_16(1898);
+emit_16(1831);
+emit_16(1898);
+emit_16(1832);
+emit_16(1899);
+emit_16(1833);
+emit_16(1899);
+emit_16(1832);
+emit_16(1899);
+emit_16(1833);
+emit_16(1900);
+emit_16(1834);
+emit_16(1900);
+emit_16(1833);
+emit_16(1900);
+emit_16(1834);
+emit_16(1901);
+emit_16(1835);
+emit_16(1901);
+emit_16(1834);
+emit_16(1901);
+emit_16(1835);
+emit_16(1902);
+emit_16(1836);
+emit_16(1902);
+emit_16(1835);
+emit_16(1902);
+emit_16(1836);
+emit_16(1903);
+emit_16(1837);
+emit_16(1903);
+emit_16(1836);
+emit_16(1903);
+emit_16(1837);
+emit_16(1904);
+emit_16(1838);
+emit_16(1904);
+emit_16(1837);
+emit_16(1904);
+emit_16(1838);
+emit_16(1905);
+emit_16(1839);
+emit_16(1905);
+emit_16(1838);
+emit_16(1905);
+emit_16(1839);
+emit_16(1906);
+emit_16(1840);
+emit_16(1906);
+emit_16(1839);
+emit_16(1906);
+emit_16(1840);
+emit_16(1907);
+emit_16(1841);
+emit_16(1907);
+emit_16(1840);
+emit_16(1907);
+emit_16(1841);
+emit_16(1908);
+emit_16(1842);
+emit_16(1908);
+emit_16(1841);
+emit_16(1908);
+emit_16(1842);
+emit_16(1909);
+emit_16(1843);
+emit_16(1909);
+emit_16(1842);
+emit_16(1909);
+emit_16(1843);
+emit_16(1910);
+emit_16(1844);
+emit_16(1910);
+emit_16(1843);
+emit_16(1910);
+emit_16(1844);
+emit_16(1911);
+emit_16(1845);
+emit_16(1911);
+emit_16(1844);
+emit_16(1911);
+emit_16(1845);
+emit_16(1912);
+emit_16(1846);
+emit_16(1912);
+emit_16(1845);
+emit_16(1912);
+emit_16(1846);
+emit_16(1913);
+emit_16(1847);
+emit_16(1913);
+emit_16(1846);
+emit_16(1914);
+emit_16(1848);
+emit_16(1915);
+emit_16(1849);
+emit_16(1915);
+emit_16(1848);
+emit_16(1915);
+emit_16(1849);
+emit_16(1916);
+emit_16(1850);
+emit_16(1916);
+emit_16(1849);
+emit_16(1916);
+emit_16(1850);
+emit_16(1917);
+emit_16(1851);
+emit_16(1917);
+emit_16(1850);
+emit_16(1917);
+emit_16(1851);
+emit_16(1918);
+emit_16(1852);
+emit_16(1918);
+emit_16(1851);
+emit_16(1918);
+emit_16(1852);
+emit_16(1919);
+emit_16(1853);
+emit_16(1919);
+emit_16(1852);
+emit_16(1919);
+emit_16(1853);
+emit_16(1920);
+emit_16(1854);
+emit_16(1920);
+emit_16(1853);
+emit_16(1920);
+emit_16(1854);
+emit_16(1921);
+emit_16(1855);
+emit_16(1921);
+emit_16(1854);
+emit_16(1921);
+emit_16(1855);
+emit_16(1922);
+emit_16(1856);
+emit_16(1922);
+emit_16(1855);
+emit_16(1922);
+emit_16(1856);
+emit_16(1923);
+emit_16(1857);
+emit_16(1923);
+emit_16(1856);
+emit_16(1923);
+emit_16(1857);
+emit_16(1924);
+emit_16(1858);
+emit_16(1924);
+emit_16(1857);
+emit_16(1924);
+emit_16(1858);
+emit_16(1925);
+emit_16(1859);
+emit_16(1925);
+emit_16(1858);
+emit_16(1925);
+emit_16(1859);
+emit_16(1926);
+emit_16(1860);
+emit_16(1926);
+emit_16(1859);
+emit_16(1926);
+emit_16(1860);
+emit_16(1927);
+emit_16(1861);
+emit_16(1927);
+emit_16(1860);
+emit_16(1927);
+emit_16(1861);
+emit_16(1928);
+emit_16(1862);
+emit_16(1928);
+emit_16(1861);
+emit_16(1928);
+emit_16(1862);
+emit_16(1929);
+emit_16(1863);
+emit_16(1929);
+emit_16(1862);
+emit_16(1929);
+emit_16(1863);
+emit_16(1930);
+emit_16(1864);
+emit_16(1930);
+emit_16(1863);
+emit_16(1930);
+emit_16(1864);
+emit_16(1931);
+emit_16(1865);
+emit_16(1931);
+emit_16(1864);
+emit_16(1931);
+emit_16(1865);
+emit_16(1932);
+emit_16(1866);
+emit_16(1932);
+emit_16(1865);
+emit_16(1932);
+emit_16(1866);
+emit_16(1933);
+emit_16(1867);
+emit_16(1933);
+emit_16(1866);
+emit_16(1933);
+emit_16(1867);
+emit_16(1934);
+emit_16(1868);
+emit_16(1934);
+emit_16(1867);
+emit_16(1934);
+emit_16(1868);
+emit_16(1935);
+emit_16(1869);
+emit_16(1935);
+emit_16(1868);
+emit_16(1935);
+emit_16(1869);
+emit_16(1936);
+emit_16(1870);
+emit_16(1936);
+emit_16(1869);
+emit_16(1936);
+emit_16(1870);
+emit_16(1937);
+emit_16(1871);
+emit_16(1937);
+emit_16(1870);
+emit_16(1937);
+emit_16(1871);
+emit_16(1938);
+emit_16(1872);
+emit_16(1938);
+emit_16(1871);
+emit_16(1938);
+emit_16(1872);
+emit_16(1939);
+emit_16(1873);
+emit_16(1939);
+emit_16(1872);
+emit_16(1939);
+emit_16(1873);
+emit_16(1940);
+emit_16(1874);
+emit_16(1940);
+emit_16(1873);
+emit_16(1940);
+emit_16(1874);
+emit_16(1941);
+emit_16(1875);
+emit_16(1941);
+emit_16(1874);
+emit_16(1941);
+emit_16(1875);
+emit_16(1942);
+emit_16(1876);
+emit_16(1942);
+emit_16(1875);
+emit_16(1942);
+emit_16(1876);
+emit_16(1943);
+emit_16(1877);
+emit_16(1943);
+emit_16(1876);
+emit_16(1943);
+emit_16(1877);
+emit_16(1944);
+emit_16(1878);
+emit_16(1944);
+emit_16(1877);
+emit_16(1944);
+emit_16(1878);
+emit_16(1945);
+emit_16(1879);
+emit_16(1945);
+emit_16(1878);
+emit_16(1945);
+emit_16(1879);
+emit_16(1946);
+emit_16(1880);
+emit_16(1946);
+emit_16(1879);
+emit_16(1946);
+emit_16(1880);
+emit_16(1947);
+emit_16(1881);
+emit_16(1947);
+emit_16(1880);
+emit_16(1947);
+emit_16(1881);
+emit_16(1948);
+emit_16(1882);
+emit_16(1948);
+emit_16(1881);
+emit_16(1948);
+emit_16(1882);
+emit_16(1949);
+emit_16(1883);
+emit_16(1949);
+emit_16(1882);
+emit_16(1949);
+emit_16(1883);
+emit_16(1950);
+emit_16(1884);
+emit_16(1950);
+emit_16(1883);
+emit_16(1950);
+emit_16(1884);
+emit_16(1951);
+emit_16(1885);
+emit_16(1951);
+emit_16(1884);
+emit_16(1951);
+emit_16(1885);
+emit_16(1952);
+emit_16(1886);
+emit_16(1952);
+emit_16(1885);
+emit_16(1952);
+emit_16(1886);
+emit_16(1953);
+emit_16(1887);
+emit_16(1953);
+emit_16(1886);
+emit_16(1953);
+emit_16(1887);
+emit_16(1954);
+emit_16(1888);
+emit_16(1954);
+emit_16(1887);
+emit_16(1954);
+emit_16(1888);
+emit_16(1955);
+emit_16(1889);
+emit_16(1955);
+emit_16(1888);
+emit_16(1955);
+emit_16(1889);
+emit_16(1956);
+emit_16(1890);
+emit_16(1956);
+emit_16(1889);
+emit_16(1956);
+emit_16(1890);
+emit_16(1957);
+emit_16(1891);
+emit_16(1957);
+emit_16(1890);
+emit_16(1957);
+emit_16(1891);
+emit_16(1958);
+emit_16(1892);
+emit_16(1958);
+emit_16(1891);
+emit_16(1958);
+emit_16(1892);
+emit_16(1959);
+emit_16(1893);
+emit_16(1959);
+emit_16(1892);
+emit_16(1959);
+emit_16(1893);
+emit_16(1960);
+emit_16(1894);
+emit_16(1960);
+emit_16(1893);
+emit_16(1960);
+emit_16(1894);
+emit_16(1961);
+emit_16(1895);
+emit_16(1961);
+emit_16(1894);
+emit_16(1961);
+emit_16(1895);
+emit_16(1962);
+emit_16(1896);
+emit_16(1962);
+emit_16(1895);
+emit_16(1962);
+emit_16(1896);
+emit_16(1963);
+emit_16(1897);
+emit_16(1963);
+emit_16(1896);
+emit_16(1963);
+emit_16(1897);
+emit_16(1964);
+emit_16(1898);
+emit_16(1964);
+emit_16(1897);
+emit_16(1964);
+emit_16(1898);
+emit_16(1965);
+emit_16(1899);
+emit_16(1965);
+emit_16(1898);
+emit_16(1965);
+emit_16(1899);
+emit_16(1966);
+emit_16(1900);
+emit_16(1966);
+emit_16(1899);
+emit_16(1966);
+emit_16(1900);
+emit_16(1967);
+emit_16(1901);
+emit_16(1967);
+emit_16(1900);
+emit_16(1967);
+emit_16(1901);
+emit_16(1968);
+emit_16(1902);
+emit_16(1968);
+emit_16(1901);
+emit_16(1968);
+emit_16(1902);
+emit_16(1969);
+emit_16(1903);
+emit_16(1969);
+emit_16(1902);
+emit_16(1969);
+emit_16(1903);
+emit_16(1970);
+emit_16(1904);
+emit_16(1970);
+emit_16(1903);
+emit_16(1970);
+emit_16(1904);
+emit_16(1971);
+emit_16(1905);
+emit_16(1971);
+emit_16(1904);
+emit_16(1971);
+emit_16(1905);
+emit_16(1972);
+emit_16(1906);
+emit_16(1972);
+emit_16(1905);
+emit_16(1972);
+emit_16(1906);
+emit_16(1973);
+emit_16(1907);
+emit_16(1973);
+emit_16(1906);
+emit_16(1973);
+emit_16(1907);
+emit_16(1974);
+emit_16(1908);
+emit_16(1974);
+emit_16(1907);
+emit_16(1974);
+emit_16(1908);
+emit_16(1975);
+emit_16(1909);
+emit_16(1975);
+emit_16(1908);
+emit_16(1975);
+emit_16(1909);
+emit_16(1976);
+emit_16(1910);
+emit_16(1976);
+emit_16(1909);
+emit_16(1976);
+emit_16(1910);
+emit_16(1977);
+emit_16(1911);
+emit_16(1977);
+emit_16(1910);
+emit_16(1977);
+emit_16(1911);
+emit_16(1978);
+emit_16(1912);
+emit_16(1978);
+emit_16(1911);
+emit_16(1978);
+emit_16(1912);
+emit_16(1979);
+emit_16(1913);
+emit_16(1979);
+emit_16(1912);
+emit_16(1980);
+emit_16(1914);
+emit_16(1981);
+emit_16(1915);
+emit_16(1981);
+emit_16(1914);
+emit_16(1981);
+emit_16(1915);
+emit_16(1982);
+emit_16(1916);
+emit_16(1982);
+emit_16(1915);
+emit_16(1982);
+emit_16(1916);
+emit_16(1983);
+emit_16(1917);
+emit_16(1983);
+emit_16(1916);
+emit_16(1983);
+emit_16(1917);
+emit_16(1984);
+emit_16(1918);
+emit_16(1984);
+emit_16(1917);
+emit_16(1984);
+emit_16(1918);
+emit_16(1985);
+emit_16(1919);
+emit_16(1985);
+emit_16(1918);
+emit_16(1985);
+emit_16(1919);
+emit_16(1986);
+emit_16(1920);
+emit_16(1986);
+emit_16(1919);
+emit_16(1986);
+emit_16(1920);
+emit_16(1987);
+emit_16(1921);
+emit_16(1987);
+emit_16(1920);
+emit_16(1987);
+emit_16(1921);
+emit_16(1988);
+emit_16(1922);
+emit_16(1988);
+emit_16(1921);
+emit_16(1988);
+emit_16(1922);
+emit_16(1989);
+emit_16(1923);
+emit_16(1989);
+emit_16(1922);
+emit_16(1989);
+emit_16(1923);
+emit_16(1990);
+emit_16(1924);
+emit_16(1990);
+emit_16(1923);
+emit_16(1990);
+emit_16(1924);
+emit_16(1991);
+emit_16(1925);
+emit_16(1991);
+emit_16(1924);
+emit_16(1991);
+emit_16(1925);
+emit_16(1992);
+emit_16(1926);
+emit_16(1992);
+emit_16(1925);
+emit_16(1992);
+emit_16(1926);
+emit_16(1993);
+emit_16(1927);
+emit_16(1993);
+emit_16(1926);
+emit_16(1993);
+emit_16(1927);
+emit_16(1994);
+emit_16(1928);
+emit_16(1994);
+emit_16(1927);
+emit_16(1994);
+emit_16(1928);
+emit_16(1995);
+emit_16(1929);
+emit_16(1995);
+emit_16(1928);
+emit_16(1995);
+emit_16(1929);
+emit_16(1996);
+emit_16(1930);
+emit_16(1996);
+emit_16(1929);
+emit_16(1996);
+emit_16(1930);
+emit_16(1997);
+emit_16(1931);
+emit_16(1997);
+emit_16(1930);
+emit_16(1997);
+emit_16(1931);
+emit_16(1998);
+emit_16(1932);
+emit_16(1998);
+emit_16(1931);
+emit_16(1998);
+emit_16(1932);
+emit_16(1999);
+emit_16(1933);
+emit_16(1999);
+emit_16(1932);
+emit_16(1999);
+emit_16(1933);
+emit_16(2000);
+emit_16(1934);
+emit_16(2000);
+emit_16(1933);
+emit_16(2000);
+emit_16(1934);
+emit_16(2001);
+emit_16(1935);
+emit_16(2001);
+emit_16(1934);
+emit_16(2001);
+emit_16(1935);
+emit_16(2002);
+emit_16(1936);
+emit_16(2002);
+emit_16(1935);
+emit_16(2002);
+emit_16(1936);
+emit_16(2003);
+emit_16(1937);
+emit_16(2003);
+emit_16(1936);
+emit_16(2003);
+emit_16(1937);
+emit_16(2004);
+emit_16(1938);
+emit_16(2004);
+emit_16(1937);
+emit_16(2004);
+emit_16(1938);
+emit_16(2005);
+emit_16(1939);
+emit_16(2005);
+emit_16(1938);
+emit_16(2005);
+emit_16(1939);
+emit_16(2006);
+emit_16(1940);
+emit_16(2006);
+emit_16(1939);
+emit_16(2006);
+emit_16(1940);
+emit_16(2007);
+emit_16(1941);
+emit_16(2007);
+emit_16(1940);
+emit_16(2007);
+emit_16(1941);
+emit_16(2008);
+emit_16(1942);
+emit_16(2008);
+emit_16(1941);
+emit_16(2008);
+emit_16(1942);
+emit_16(2009);
+emit_16(1943);
+emit_16(2009);
+emit_16(1942);
+emit_16(2009);
+emit_16(1943);
+emit_16(2010);
+emit_16(1944);
+emit_16(2010);
+emit_16(1943);
+emit_16(2010);
+emit_16(1944);
+emit_16(2011);
+emit_16(1945);
+emit_16(2011);
+emit_16(1944);
+emit_16(2011);
+emit_16(1945);
+emit_16(2012);
+emit_16(1946);
+emit_16(2012);
+emit_16(1945);
+emit_16(2012);
+emit_16(1946);
+emit_16(2013);
+emit_16(1947);
+emit_16(2013);
+emit_16(1946);
+emit_16(2013);
+emit_16(1947);
+emit_16(2014);
+emit_16(1948);
+emit_16(2014);
+emit_16(1947);
+emit_16(2014);
+emit_16(1948);
+emit_16(2015);
+emit_16(1949);
+emit_16(2015);
+emit_16(1948);
+emit_16(2015);
+emit_16(1949);
+emit_16(2016);
+emit_16(1950);
+emit_16(2016);
+emit_16(1949);
+emit_16(2016);
+emit_16(1950);
+emit_16(2017);
+emit_16(1951);
+emit_16(2017);
+emit_16(1950);
+emit_16(2017);
+emit_16(1951);
+emit_16(2018);
+emit_16(1952);
+emit_16(2018);
+emit_16(1951);
+emit_16(2018);
+emit_16(1952);
+emit_16(2019);
+emit_16(1953);
+emit_16(2019);
+emit_16(1952);
+emit_16(2019);
+emit_16(1953);
+emit_16(2020);
+emit_16(1954);
+emit_16(2020);
+emit_16(1953);
+emit_16(2020);
+emit_16(1954);
+emit_16(2021);
+emit_16(1955);
+emit_16(2021);
+emit_16(1954);
+emit_16(2021);
+emit_16(1955);
+emit_16(2022);
+emit_16(1956);
+emit_16(2022);
+emit_16(1955);
+emit_16(2022);
+emit_16(1956);
+emit_16(2023);
+emit_16(1957);
+emit_16(2023);
+emit_16(1956);
+emit_16(2023);
+emit_16(1957);
+emit_16(2024);
+emit_16(1958);
+emit_16(2024);
+emit_16(1957);
+emit_16(2024);
+emit_16(1958);
+emit_16(2025);
+emit_16(1959);
+emit_16(2025);
+emit_16(1958);
+emit_16(2025);
+emit_16(1959);
+emit_16(2026);
+emit_16(1960);
+emit_16(2026);
+emit_16(1959);
+emit_16(2026);
+emit_16(1960);
+emit_16(2027);
+emit_16(1961);
+emit_16(2027);
+emit_16(1960);
+emit_16(2027);
+emit_16(1961);
+emit_16(2028);
+emit_16(1962);
+emit_16(2028);
+emit_16(1961);
+emit_16(2028);
+emit_16(1962);
+emit_16(2029);
+emit_16(1963);
+emit_16(2029);
+emit_16(1962);
+emit_16(2029);
+emit_16(1963);
+emit_16(2030);
+emit_16(1964);
+emit_16(2030);
+emit_16(1963);
+emit_16(2030);
+emit_16(1964);
+emit_16(2031);
+emit_16(1965);
+emit_16(2031);
+emit_16(1964);
+emit_16(2031);
+emit_16(1965);
+emit_16(2032);
+emit_16(1966);
+emit_16(2032);
+emit_16(1965);
+emit_16(2032);
+emit_16(1966);
+emit_16(2033);
+emit_16(1967);
+emit_16(2033);
+emit_16(1966);
+emit_16(2033);
+emit_16(1967);
+emit_16(2034);
+emit_16(1968);
+emit_16(2034);
+emit_16(1967);
+emit_16(2034);
+emit_16(1968);
+emit_16(2035);
+emit_16(1969);
+emit_16(2035);
+emit_16(1968);
+emit_16(2035);
+emit_16(1969);
+emit_16(2036);
+emit_16(1970);
+emit_16(2036);
+emit_16(1969);
+emit_16(2036);
+emit_16(1970);
+emit_16(2037);
+emit_16(1971);
+emit_16(2037);
+emit_16(1970);
+emit_16(2037);
+emit_16(1971);
+emit_16(2038);
+emit_16(1972);
+emit_16(2038);
+emit_16(1971);
+emit_16(2038);
+emit_16(1972);
+emit_16(2039);
+emit_16(1973);
+emit_16(2039);
+emit_16(1972);
+emit_16(2039);
+emit_16(1973);
+emit_16(2040);
+emit_16(1974);
+emit_16(2040);
+emit_16(1973);
+emit_16(2040);
+emit_16(1974);
+emit_16(2041);
+emit_16(1975);
+emit_16(2041);
+emit_16(1974);
+emit_16(2041);
+emit_16(1975);
+emit_16(2042);
+emit_16(1976);
+emit_16(2042);
+emit_16(1975);
+emit_16(2042);
+emit_16(1976);
+emit_16(2043);
+emit_16(1977);
+emit_16(2043);
+emit_16(1976);
+emit_16(2043);
+emit_16(1977);
+emit_16(2044);
+emit_16(1978);
+emit_16(2044);
+emit_16(1977);
+emit_16(2044);
+emit_16(1978);
+emit_16(2045);
+emit_16(1979);
+emit_16(2045);
+emit_16(1978);
+emit_16(2046);
+emit_16(1980);
+emit_16(2047);
+emit_16(1981);
+emit_16(2047);
+emit_16(1980);
+emit_16(2047);
+emit_16(1981);
+emit_16(2048);
+emit_16(1982);
+emit_16(2048);
+emit_16(1981);
+emit_16(2048);
+emit_16(1982);
+emit_16(2049);
+emit_16(1983);
+emit_16(2049);
+emit_16(1982);
+emit_16(2049);
+emit_16(1983);
+emit_16(2050);
+emit_16(1984);
+emit_16(2050);
+emit_16(1983);
+emit_16(2050);
+emit_16(1984);
+emit_16(2051);
+emit_16(1985);
+emit_16(2051);
+emit_16(1984);
+emit_16(2051);
+emit_16(1985);
+emit_16(2052);
+emit_16(1986);
+emit_16(2052);
+emit_16(1985);
+emit_16(2052);
+emit_16(1986);
+emit_16(2053);
+emit_16(1987);
+emit_16(2053);
+emit_16(1986);
+emit_16(2053);
+emit_16(1987);
+emit_16(2054);
+emit_16(1988);
+emit_16(2054);
+emit_16(1987);
+emit_16(2054);
+emit_16(1988);
+emit_16(2055);
+emit_16(1989);
+emit_16(2055);
+emit_16(1988);
+emit_16(2055);
+emit_16(1989);
+emit_16(2056);
+emit_16(1990);
+emit_16(2056);
+emit_16(1989);
+emit_16(2056);
+emit_16(1990);
+emit_16(2057);
+emit_16(1991);
+emit_16(2057);
+emit_16(1990);
+emit_16(2057);
+emit_16(1991);
+emit_16(2058);
+emit_16(1992);
+emit_16(2058);
+emit_16(1991);
+emit_16(2058);
+emit_16(1992);
+emit_16(2059);
+emit_16(1993);
+emit_16(2059);
+emit_16(1992);
+emit_16(2059);
+emit_16(1993);
+emit_16(2060);
+emit_16(1994);
+emit_16(2060);
+emit_16(1993);
+emit_16(2060);
+emit_16(1994);
+emit_16(2061);
+emit_16(1995);
+emit_16(2061);
+emit_16(1994);
+emit_16(2061);
+emit_16(1995);
+emit_16(2062);
+emit_16(1996);
+emit_16(2062);
+emit_16(1995);
+emit_16(2062);
+emit_16(1996);
+emit_16(2063);
+emit_16(1997);
+emit_16(2063);
+emit_16(1996);
+emit_16(2063);
+emit_16(1997);
+emit_16(2064);
+emit_16(1998);
+emit_16(2064);
+emit_16(1997);
+emit_16(2064);
+emit_16(1998);
+emit_16(2065);
+emit_16(1999);
+emit_16(2065);
+emit_16(1998);
+emit_16(2065);
+emit_16(1999);
+emit_16(2066);
+emit_16(2000);
+emit_16(2066);
+emit_16(1999);
+emit_16(2066);
+emit_16(2000);
+emit_16(2067);
+emit_16(2001);
+emit_16(2067);
+emit_16(2000);
+emit_16(2067);
+emit_16(2001);
+emit_16(2068);
+emit_16(2002);
+emit_16(2068);
+emit_16(2001);
+emit_16(2068);
+emit_16(2002);
+emit_16(2069);
+emit_16(2003);
+emit_16(2069);
+emit_16(2002);
+emit_16(2069);
+emit_16(2003);
+emit_16(2070);
+emit_16(2004);
+emit_16(2070);
+emit_16(2003);
+emit_16(2070);
+emit_16(2004);
+emit_16(2071);
+emit_16(2005);
+emit_16(2071);
+emit_16(2004);
+emit_16(2071);
+emit_16(2005);
+emit_16(2072);
+emit_16(2006);
+emit_16(2072);
+emit_16(2005);
+emit_16(2072);
+emit_16(2006);
+emit_16(2073);
+emit_16(2007);
+emit_16(2073);
+emit_16(2006);
+emit_16(2073);
+emit_16(2007);
+emit_16(2074);
+emit_16(2008);
+emit_16(2074);
+emit_16(2007);
+emit_16(2074);
+emit_16(2008);
+emit_16(2075);
+emit_16(2009);
+emit_16(2075);
+emit_16(2008);
+emit_16(2075);
+emit_16(2009);
+emit_16(2076);
+emit_16(2010);
+emit_16(2076);
+emit_16(2009);
+emit_16(2076);
+emit_16(2010);
+emit_16(2077);
+emit_16(2011);
+emit_16(2077);
+emit_16(2010);
+emit_16(2077);
+emit_16(2011);
+emit_16(2078);
+emit_16(2012);
+emit_16(2078);
+emit_16(2011);
+emit_16(2078);
+emit_16(2012);
+emit_16(2079);
+emit_16(2013);
+emit_16(2079);
+emit_16(2012);
+emit_16(2079);
+emit_16(2013);
+emit_16(2080);
+emit_16(2014);
+emit_16(2080);
+emit_16(2013);
+emit_16(2080);
+emit_16(2014);
+emit_16(2081);
+emit_16(2015);
+emit_16(2081);
+emit_16(2014);
+emit_16(2081);
+emit_16(2015);
+emit_16(2082);
+emit_16(2016);
+emit_16(2082);
+emit_16(2015);
+emit_16(2082);
+emit_16(2016);
+emit_16(2083);
+emit_16(2017);
+emit_16(2083);
+emit_16(2016);
+emit_16(2083);
+emit_16(2017);
+emit_16(2084);
+emit_16(2018);
+emit_16(2084);
+emit_16(2017);
+emit_16(2084);
+emit_16(2018);
+emit_16(2085);
+emit_16(2019);
+emit_16(2085);
+emit_16(2018);
+emit_16(2085);
+emit_16(2019);
+emit_16(2086);
+emit_16(2020);
+emit_16(2086);
+emit_16(2019);
+emit_16(2086);
+emit_16(2020);
+emit_16(2087);
+emit_16(2021);
+emit_16(2087);
+emit_16(2020);
+emit_16(2087);
+emit_16(2021);
+emit_16(2088);
+emit_16(2022);
+emit_16(2088);
+emit_16(2021);
+emit_16(2088);
+emit_16(2022);
+emit_16(2089);
+emit_16(2023);
+emit_16(2089);
+emit_16(2022);
+emit_16(2089);
+emit_16(2023);
+emit_16(2090);
+emit_16(2024);
+emit_16(2090);
+emit_16(2023);
+emit_16(2090);
+emit_16(2024);
+emit_16(2091);
+emit_16(2025);
+emit_16(2091);
+emit_16(2024);
+emit_16(2091);
+emit_16(2025);
+emit_16(2092);
+emit_16(2026);
+emit_16(2092);
+emit_16(2025);
+emit_16(2092);
+emit_16(2026);
+emit_16(2093);
+emit_16(2027);
+emit_16(2093);
+emit_16(2026);
+emit_16(2093);
+emit_16(2027);
+emit_16(2094);
+emit_16(2028);
+emit_16(2094);
+emit_16(2027);
+emit_16(2094);
+emit_16(2028);
+emit_16(2095);
+emit_16(2029);
+emit_16(2095);
+emit_16(2028);
+emit_16(2095);
+emit_16(2029);
+emit_16(2096);
+emit_16(2030);
+emit_16(2096);
+emit_16(2029);
+emit_16(2096);
+emit_16(2030);
+emit_16(2097);
+emit_16(2031);
+emit_16(2097);
+emit_16(2030);
+emit_16(2097);
+emit_16(2031);
+emit_16(2098);
+emit_16(2032);
+emit_16(2098);
+emit_16(2031);
+emit_16(2098);
+emit_16(2032);
+emit_16(2099);
+emit_16(2033);
+emit_16(2099);
+emit_16(2032);
+emit_16(2099);
+emit_16(2033);
+emit_16(2100);
+emit_16(2034);
+emit_16(2100);
+emit_16(2033);
+emit_16(2100);
+emit_16(2034);
+emit_16(2101);
+emit_16(2035);
+emit_16(2101);
+emit_16(2034);
+emit_16(2101);
+emit_16(2035);
+emit_16(2102);
+emit_16(2036);
+emit_16(2102);
+emit_16(2035);
+emit_16(2102);
+emit_16(2036);
+emit_16(2103);
+emit_16(2037);
+emit_16(2103);
+emit_16(2036);
+emit_16(2103);
+emit_16(2037);
+emit_16(2104);
+emit_16(2038);
+emit_16(2104);
+emit_16(2037);
+emit_16(2104);
+emit_16(2038);
+emit_16(2105);
+emit_16(2039);
+emit_16(2105);
+emit_16(2038);
+emit_16(2105);
+emit_16(2039);
+emit_16(2106);
+emit_16(2040);
+emit_16(2106);
+emit_16(2039);
+emit_16(2106);
+emit_16(2040);
+emit_16(2107);
+emit_16(2041);
+emit_16(2107);
+emit_16(2040);
+emit_16(2107);
+emit_16(2041);
+emit_16(2108);
+emit_16(2042);
+emit_16(2108);
+emit_16(2041);
+emit_16(2108);
+emit_16(2042);
+emit_16(2109);
+emit_16(2043);
+emit_16(2109);
+emit_16(2042);
+emit_16(2109);
+emit_16(2043);
+emit_16(2110);
+emit_16(2044);
+emit_16(2110);
+emit_16(2043);
+emit_16(2110);
+emit_16(2044);
+emit_16(2111);
+emit_16(2045);
+emit_16(2111);
+emit_16(2044);
+emit_16(2112);
+emit_16(2046);
+emit_16(2113);
+emit_16(2047);
+emit_16(2113);
+emit_16(2046);
+emit_16(2113);
+emit_16(2047);
+emit_16(2114);
+emit_16(2048);
+emit_16(2114);
+emit_16(2047);
+emit_16(2114);
+emit_16(2048);
+emit_16(2115);
+emit_16(2049);
+emit_16(2115);
+emit_16(2048);
+emit_16(2115);
+emit_16(2049);
+emit_16(2116);
+emit_16(2050);
+emit_16(2116);
+emit_16(2049);
+emit_16(2116);
+emit_16(2050);
+emit_16(2117);
+emit_16(2051);
+emit_16(2117);
+emit_16(2050);
+emit_16(2117);
+emit_16(2051);
+emit_16(2118);
+emit_16(2052);
+emit_16(2118);
+emit_16(2051);
+emit_16(2118);
+emit_16(2052);
+emit_16(2119);
+emit_16(2053);
+emit_16(2119);
+emit_16(2052);
+emit_16(2119);
+emit_16(2053);
+emit_16(2120);
+emit_16(2054);
+emit_16(2120);
+emit_16(2053);
+emit_16(2120);
+emit_16(2054);
+emit_16(2121);
+emit_16(2055);
+emit_16(2121);
+emit_16(2054);
+emit_16(2121);
+emit_16(2055);
+emit_16(2122);
+emit_16(2056);
+emit_16(2122);
+emit_16(2055);
+emit_16(2122);
+emit_16(2056);
+emit_16(2123);
+emit_16(2057);
+emit_16(2123);
+emit_16(2056);
+emit_16(2123);
+emit_16(2057);
+emit_16(2124);
+emit_16(2058);
+emit_16(2124);
+emit_16(2057);
+emit_16(2124);
+emit_16(2058);
+emit_16(2125);
+emit_16(2059);
+emit_16(2125);
+emit_16(2058);
+emit_16(2125);
+emit_16(2059);
+emit_16(2126);
+emit_16(2060);
+emit_16(2126);
+emit_16(2059);
+emit_16(2126);
+emit_16(2060);
+emit_16(2127);
+emit_16(2061);
+emit_16(2127);
+emit_16(2060);
+emit_16(2127);
+emit_16(2061);
+emit_16(2128);
+emit_16(2062);
+emit_16(2128);
+emit_16(2061);
+emit_16(2128);
+emit_16(2062);
+emit_16(2129);
+emit_16(2063);
+emit_16(2129);
+emit_16(2062);
+emit_16(2129);
+emit_16(2063);
+emit_16(2130);
+emit_16(2064);
+emit_16(2130);
+emit_16(2063);
+emit_16(2130);
+emit_16(2064);
+emit_16(2131);
+emit_16(2065);
+emit_16(2131);
+emit_16(2064);
+emit_16(2131);
+emit_16(2065);
+emit_16(2132);
+emit_16(2066);
+emit_16(2132);
+emit_16(2065);
+emit_16(2132);
+emit_16(2066);
+emit_16(2133);
+emit_16(2067);
+emit_16(2133);
+emit_16(2066);
+emit_16(2133);
+emit_16(2067);
+emit_16(2134);
+emit_16(2068);
+emit_16(2134);
+emit_16(2067);
+emit_16(2134);
+emit_16(2068);
+emit_16(2135);
+emit_16(2069);
+emit_16(2135);
+emit_16(2068);
+emit_16(2135);
+emit_16(2069);
+emit_16(2136);
+emit_16(2070);
+emit_16(2136);
+emit_16(2069);
+emit_16(2136);
+emit_16(2070);
+emit_16(2137);
+emit_16(2071);
+emit_16(2137);
+emit_16(2070);
+emit_16(2137);
+emit_16(2071);
+emit_16(2138);
+emit_16(2072);
+emit_16(2138);
+emit_16(2071);
+emit_16(2138);
+emit_16(2072);
+emit_16(2139);
+emit_16(2073);
+emit_16(2139);
+emit_16(2072);
+emit_16(2139);
+emit_16(2073);
+emit_16(2140);
+emit_16(2074);
+emit_16(2140);
+emit_16(2073);
+emit_16(2140);
+emit_16(2074);
+emit_16(2141);
+emit_16(2075);
+emit_16(2141);
+emit_16(2074);
+emit_16(2141);
+emit_16(2075);
+emit_16(2142);
+emit_16(2076);
+emit_16(2142);
+emit_16(2075);
+emit_16(2142);
+emit_16(2076);
+emit_16(2143);
+emit_16(2077);
+emit_16(2143);
+emit_16(2076);
+emit_16(2143);
+emit_16(2077);
+emit_16(2144);
+emit_16(2078);
+emit_16(2144);
+emit_16(2077);
+emit_16(2144);
+emit_16(2078);
+emit_16(2145);
+emit_16(2079);
+emit_16(2145);
+emit_16(2078);
+emit_16(2145);
+emit_16(2079);
+emit_16(2146);
+emit_16(2080);
+emit_16(2146);
+emit_16(2079);
+emit_16(2146);
+emit_16(2080);
+emit_16(2147);
+emit_16(2081);
+emit_16(2147);
+emit_16(2080);
+emit_16(2147);
+emit_16(2081);
+emit_16(2148);
+emit_16(2082);
+emit_16(2148);
+emit_16(2081);
+emit_16(2148);
+emit_16(2082);
+emit_16(2149);
+emit_16(2083);
+emit_16(2149);
+emit_16(2082);
+emit_16(2149);
+emit_16(2083);
+emit_16(2150);
+emit_16(2084);
+emit_16(2150);
+emit_16(2083);
+emit_16(2150);
+emit_16(2084);
+emit_16(2151);
+emit_16(2085);
+emit_16(2151);
+emit_16(2084);
+emit_16(2151);
+emit_16(2085);
+emit_16(2152);
+emit_16(2086);
+emit_16(2152);
+emit_16(2085);
+emit_16(2152);
+emit_16(2086);
+emit_16(2153);
+emit_16(2087);
+emit_16(2153);
+emit_16(2086);
+emit_16(2153);
+emit_16(2087);
+emit_16(2154);
+emit_16(2088);
+emit_16(2154);
+emit_16(2087);
+emit_16(2154);
+emit_16(2088);
+emit_16(2155);
+emit_16(2089);
+emit_16(2155);
+emit_16(2088);
+emit_16(2155);
+emit_16(2089);
+emit_16(2156);
+emit_16(2090);
+emit_16(2156);
+emit_16(2089);
+emit_16(2156);
+emit_16(2090);
+emit_16(2157);
+emit_16(2091);
+emit_16(2157);
+emit_16(2090);
+emit_16(2157);
+emit_16(2091);
+emit_16(2158);
+emit_16(2092);
+emit_16(2158);
+emit_16(2091);
+emit_16(2158);
+emit_16(2092);
+emit_16(2159);
+emit_16(2093);
+emit_16(2159);
+emit_16(2092);
+emit_16(2159);
+emit_16(2093);
+emit_16(2160);
+emit_16(2094);
+emit_16(2160);
+emit_16(2093);
+emit_16(2160);
+emit_16(2094);
+emit_16(2161);
+emit_16(2095);
+emit_16(2161);
+emit_16(2094);
+emit_16(2161);
+emit_16(2095);
+emit_16(2162);
+emit_16(2096);
+emit_16(2162);
+emit_16(2095);
+emit_16(2162);
+emit_16(2096);
+emit_16(2163);
+emit_16(2097);
+emit_16(2163);
+emit_16(2096);
+emit_16(2163);
+emit_16(2097);
+emit_16(2164);
+emit_16(2098);
+emit_16(2164);
+emit_16(2097);
+emit_16(2164);
+emit_16(2098);
+emit_16(2165);
+emit_16(2099);
+emit_16(2165);
+emit_16(2098);
+emit_16(2165);
+emit_16(2099);
+emit_16(2166);
+emit_16(2100);
+emit_16(2166);
+emit_16(2099);
+emit_16(2166);
+emit_16(2100);
+emit_16(2167);
+emit_16(2101);
+emit_16(2167);
+emit_16(2100);
+emit_16(2167);
+emit_16(2101);
+emit_16(2168);
+emit_16(2102);
+emit_16(2168);
+emit_16(2101);
+emit_16(2168);
+emit_16(2102);
+emit_16(2169);
+emit_16(2103);
+emit_16(2169);
+emit_16(2102);
+emit_16(2169);
+emit_16(2103);
+emit_16(2170);
+emit_16(2104);
+emit_16(2170);
+emit_16(2103);
+emit_16(2170);
+emit_16(2104);
+emit_16(2171);
+emit_16(2105);
+emit_16(2171);
+emit_16(2104);
+emit_16(2171);
+emit_16(2105);
+emit_16(2172);
+emit_16(2106);
+emit_16(2172);
+emit_16(2105);
+emit_16(2172);
+emit_16(2106);
+emit_16(2173);
+emit_16(2107);
+emit_16(2173);
+emit_16(2106);
+emit_16(2173);
+emit_16(2107);
+emit_16(2174);
+emit_16(2108);
+emit_16(2174);
+emit_16(2107);
+emit_16(2174);
+emit_16(2108);
+emit_16(2175);
+emit_16(2109);
+emit_16(2175);
+emit_16(2108);
+emit_16(2175);
+emit_16(2109);
+emit_16(2176);
+emit_16(2110);
+emit_16(2176);
+emit_16(2109);
+emit_16(2176);
+emit_16(2110);
+emit_16(2177);
+emit_16(2111);
+emit_16(2177);
+emit_16(2110);
+emit_16(2178);
+emit_16(2112);
+emit_16(2179);
+emit_16(2113);
+emit_16(2179);
+emit_16(2112);
+emit_16(2179);
+emit_16(2113);
+emit_16(2180);
+emit_16(2114);
+emit_16(2180);
+emit_16(2113);
+emit_16(2180);
+emit_16(2114);
+emit_16(2181);
+emit_16(2115);
+emit_16(2181);
+emit_16(2114);
+emit_16(2181);
+emit_16(2115);
+emit_16(2182);
+emit_16(2116);
+emit_16(2182);
+emit_16(2115);
+emit_16(2182);
+emit_16(2116);
+emit_16(2183);
+emit_16(2117);
+emit_16(2183);
+emit_16(2116);
+emit_16(2183);
+emit_16(2117);
+emit_16(2184);
+emit_16(2118);
+emit_16(2184);
+emit_16(2117);
+emit_16(2184);
+emit_16(2118);
+emit_16(2185);
+emit_16(2119);
+emit_16(2185);
+emit_16(2118);
+emit_16(2185);
+emit_16(2119);
+emit_16(2186);
+emit_16(2120);
+emit_16(2186);
+emit_16(2119);
+emit_16(2186);
+emit_16(2120);
+emit_16(2187);
+emit_16(2121);
+emit_16(2187);
+emit_16(2120);
+emit_16(2187);
+emit_16(2121);
+emit_16(2188);
+emit_16(2122);
+emit_16(2188);
+emit_16(2121);
+emit_16(2188);
+emit_16(2122);
+emit_16(2189);
+emit_16(2123);
+emit_16(2189);
+emit_16(2122);
+emit_16(2189);
+emit_16(2123);
+emit_16(2190);
+emit_16(2124);
+emit_16(2190);
+emit_16(2123);
+emit_16(2190);
+emit_16(2124);
+emit_16(2191);
+emit_16(2125);
+emit_16(2191);
+emit_16(2124);
+emit_16(2191);
+emit_16(2125);
+emit_16(2192);
+emit_16(2126);
+emit_16(2192);
+emit_16(2125);
+emit_16(2192);
+emit_16(2126);
+emit_16(2193);
+emit_16(2127);
+emit_16(2193);
+emit_16(2126);
+emit_16(2193);
+emit_16(2127);
+emit_16(2194);
+emit_16(2128);
+emit_16(2194);
+emit_16(2127);
+emit_16(2194);
+emit_16(2128);
+emit_16(2195);
+emit_16(2129);
+emit_16(2195);
+emit_16(2128);
+emit_16(2195);
+emit_16(2129);
+emit_16(2196);
+emit_16(2130);
+emit_16(2196);
+emit_16(2129);
+emit_16(2196);
+emit_16(2130);
+emit_16(2197);
+emit_16(2131);
+emit_16(2197);
+emit_16(2130);
+emit_16(2197);
+emit_16(2131);
+emit_16(2198);
+emit_16(2132);
+emit_16(2198);
+emit_16(2131);
+emit_16(2198);
+emit_16(2132);
+emit_16(2199);
+emit_16(2133);
+emit_16(2199);
+emit_16(2132);
+emit_16(2199);
+emit_16(2133);
+emit_16(2200);
+emit_16(2134);
+emit_16(2200);
+emit_16(2133);
+emit_16(2200);
+emit_16(2134);
+emit_16(2201);
+emit_16(2135);
+emit_16(2201);
+emit_16(2134);
+emit_16(2201);
+emit_16(2135);
+emit_16(2202);
+emit_16(2136);
+emit_16(2202);
+emit_16(2135);
+emit_16(2202);
+emit_16(2136);
+emit_16(2203);
+emit_16(2137);
+emit_16(2203);
+emit_16(2136);
+emit_16(2203);
+emit_16(2137);
+emit_16(2204);
+emit_16(2138);
+emit_16(2204);
+emit_16(2137);
+emit_16(2204);
+emit_16(2138);
+emit_16(2205);
+emit_16(2139);
+emit_16(2205);
+emit_16(2138);
+emit_16(2205);
+emit_16(2139);
+emit_16(2206);
+emit_16(2140);
+emit_16(2206);
+emit_16(2139);
+emit_16(2206);
+emit_16(2140);
+emit_16(2207);
+emit_16(2141);
+emit_16(2207);
+emit_16(2140);
+emit_16(2207);
+emit_16(2141);
+emit_16(2208);
+emit_16(2142);
+emit_16(2208);
+emit_16(2141);
+emit_16(2208);
+emit_16(2142);
+emit_16(2209);
+emit_16(2143);
+emit_16(2209);
+emit_16(2142);
+emit_16(2209);
+emit_16(2143);
+emit_16(2210);
+emit_16(2144);
+emit_16(2210);
+emit_16(2143);
+emit_16(2210);
+emit_16(2144);
+emit_16(2211);
+emit_16(2145);
+emit_16(2211);
+emit_16(2144);
+emit_16(2211);
+emit_16(2145);
+emit_16(2212);
+emit_16(2146);
+emit_16(2212);
+emit_16(2145);
+emit_16(2212);
+emit_16(2146);
+emit_16(2213);
+emit_16(2147);
+emit_16(2213);
+emit_16(2146);
+emit_16(2213);
+emit_16(2147);
+emit_16(2214);
+emit_16(2148);
+emit_16(2214);
+emit_16(2147);
+emit_16(2214);
+emit_16(2148);
+emit_16(2215);
+emit_16(2149);
+emit_16(2215);
+emit_16(2148);
+emit_16(2215);
+emit_16(2149);
+emit_16(2216);
+emit_16(2150);
+emit_16(2216);
+emit_16(2149);
+emit_16(2216);
+emit_16(2150);
+emit_16(2217);
+emit_16(2151);
+emit_16(2217);
+emit_16(2150);
+emit_16(2217);
+emit_16(2151);
+emit_16(2218);
+emit_16(2152);
+emit_16(2218);
+emit_16(2151);
+emit_16(2218);
+emit_16(2152);
+emit_16(2219);
+emit_16(2153);
+emit_16(2219);
+emit_16(2152);
+emit_16(2219);
+emit_16(2153);
+emit_16(2220);
+emit_16(2154);
+emit_16(2220);
+emit_16(2153);
+emit_16(2220);
+emit_16(2154);
+emit_16(2221);
+emit_16(2155);
+emit_16(2221);
+emit_16(2154);
+emit_16(2221);
+emit_16(2155);
+emit_16(2222);
+emit_16(2156);
+emit_16(2222);
+emit_16(2155);
+emit_16(2222);
+emit_16(2156);
+emit_16(2223);
+emit_16(2157);
+emit_16(2223);
+emit_16(2156);
+emit_16(2223);
+emit_16(2157);
+emit_16(2224);
+emit_16(2158);
+emit_16(2224);
+emit_16(2157);
+emit_16(2224);
+emit_16(2158);
+emit_16(2225);
+emit_16(2159);
+emit_16(2225);
+emit_16(2158);
+emit_16(2225);
+emit_16(2159);
+emit_16(2226);
+emit_16(2160);
+emit_16(2226);
+emit_16(2159);
+emit_16(2226);
+emit_16(2160);
+emit_16(2227);
+emit_16(2161);
+emit_16(2227);
+emit_16(2160);
+emit_16(2227);
+emit_16(2161);
+emit_16(2228);
+emit_16(2162);
+emit_16(2228);
+emit_16(2161);
+emit_16(2228);
+emit_16(2162);
+emit_16(2229);
+emit_16(2163);
+emit_16(2229);
+emit_16(2162);
+emit_16(2229);
+emit_16(2163);
+emit_16(2230);
+emit_16(2164);
+emit_16(2230);
+emit_16(2163);
+emit_16(2230);
+emit_16(2164);
+emit_16(2231);
+emit_16(2165);
+emit_16(2231);
+emit_16(2164);
+emit_16(2231);
+emit_16(2165);
+emit_16(2232);
+emit_16(2166);
+emit_16(2232);
+emit_16(2165);
+emit_16(2232);
+emit_16(2166);
+emit_16(2233);
+emit_16(2167);
+emit_16(2233);
+emit_16(2166);
+emit_16(2233);
+emit_16(2167);
+emit_16(2234);
+emit_16(2168);
+emit_16(2234);
+emit_16(2167);
+emit_16(2234);
+emit_16(2168);
+emit_16(2235);
+emit_16(2169);
+emit_16(2235);
+emit_16(2168);
+emit_16(2235);
+emit_16(2169);
+emit_16(2236);
+emit_16(2170);
+emit_16(2236);
+emit_16(2169);
+emit_16(2236);
+emit_16(2170);
+emit_16(2237);
+emit_16(2171);
+emit_16(2237);
+emit_16(2170);
+emit_16(2237);
+emit_16(2171);
+emit_16(2238);
+emit_16(2172);
+emit_16(2238);
+emit_16(2171);
+emit_16(2238);
+emit_16(2172);
+emit_16(2239);
+emit_16(2173);
+emit_16(2239);
+emit_16(2172);
+emit_16(2239);
+emit_16(2173);
+emit_16(2240);
+emit_16(2174);
+emit_16(2240);
+emit_16(2173);
+emit_16(2240);
+emit_16(2174);
+emit_16(2241);
+emit_16(2175);
+emit_16(2241);
+emit_16(2174);
+emit_16(2241);
+emit_16(2175);
+emit_16(2242);
+emit_16(2176);
+emit_16(2242);
+emit_16(2175);
+emit_16(2242);
+emit_16(2176);
+emit_16(2243);
+emit_16(2177);
+emit_16(2243);
+emit_16(2176);
+emit_start(Landscape06Idx)
+emit_16(0);
+emit_16(1);
+emit_16(2);
+emit_16(3);
+emit_16(2);
+emit_16(1);
+emit_16(2);
+emit_16(3);
+emit_16(4);
+emit_16(5);
+emit_16(4);
+emit_16(3);
+emit_16(4);
+emit_16(5);
+emit_16(6);
+emit_16(7);
+emit_16(6);
+emit_16(5);
+emit_16(6);
+emit_16(7);
+emit_16(8);
+emit_16(9);
+emit_16(8);
+emit_16(7);
+emit_16(8);
+emit_16(9);
+emit_16(10);
+emit_16(11);
+emit_16(10);
+emit_16(9);
+emit_16(10);
+emit_16(11);
+emit_16(12);
+emit_16(13);
+emit_16(12);
+emit_16(11);
+emit_16(12);
+emit_16(13);
+emit_16(14);
+emit_16(15);
+emit_16(14);
+emit_16(13);
+emit_16(14);
+emit_16(15);
+emit_16(16);
+emit_16(17);
+emit_16(16);
+emit_16(15);
+emit_16(16);
+emit_16(17);
+emit_16(18);
+emit_16(19);
+emit_16(18);
+emit_16(17);
+emit_16(18);
+emit_16(19);
+emit_16(20);
+emit_16(21);
+emit_16(20);
+emit_16(19);
+emit_16(20);
+emit_16(21);
+emit_16(22);
+emit_16(23);
+emit_16(22);
+emit_16(21);
+emit_16(22);
+emit_16(23);
+emit_16(24);
+emit_16(25);
+emit_16(24);
+emit_16(23);
+emit_16(24);
+emit_16(25);
+emit_16(26);
+emit_16(27);
+emit_16(26);
+emit_16(25);
+emit_16(26);
+emit_16(27);
+emit_16(28);
+emit_16(29);
+emit_16(28);
+emit_16(27);
+emit_16(28);
+emit_16(29);
+emit_16(30);
+emit_16(31);
+emit_16(30);
+emit_16(29);
+emit_16(30);
+emit_16(31);
+emit_16(32);
+emit_16(33);
+emit_16(32);
+emit_16(31);
+emit_16(32);
+emit_16(33);
+emit_16(34);
+emit_16(35);
+emit_16(34);
+emit_16(33);
+emit_16(34);
+emit_16(35);
+emit_16(36);
+emit_16(37);
+emit_16(36);
+emit_16(35);
+emit_16(36);
+emit_16(37);
+emit_16(38);
+emit_16(39);
+emit_16(38);
+emit_16(37);
+emit_16(38);
+emit_16(39);
+emit_16(40);
+emit_16(41);
+emit_16(40);
+emit_16(39);
+emit_16(40);
+emit_16(41);
+emit_16(42);
+emit_16(43);
+emit_16(42);
+emit_16(41);
+emit_16(42);
+emit_16(43);
+emit_16(44);
+emit_16(45);
+emit_16(44);
+emit_16(43);
+emit_16(44);
+emit_16(45);
+emit_16(46);
+emit_16(47);
+emit_16(46);
+emit_16(45);
+emit_16(46);
+emit_16(47);
+emit_16(48);
+emit_16(49);
+emit_16(48);
+emit_16(47);
+emit_16(48);
+emit_16(49);
+emit_16(50);
+emit_16(51);
+emit_16(50);
+emit_16(49);
+emit_16(50);
+emit_16(51);
+emit_16(52);
+emit_16(53);
+emit_16(52);
+emit_16(51);
+emit_16(52);
+emit_16(53);
+emit_16(54);
+emit_16(55);
+emit_16(54);
+emit_16(53);
+emit_16(54);
+emit_16(55);
+emit_16(56);
+emit_16(57);
+emit_16(56);
+emit_16(55);
+emit_16(56);
+emit_16(57);
+emit_16(58);
+emit_16(59);
+emit_16(58);
+emit_16(57);
+emit_16(58);
+emit_16(59);
+emit_16(60);
+emit_16(61);
+emit_16(60);
+emit_16(59);
+emit_16(60);
+emit_16(61);
+emit_16(62);
+emit_16(63);
+emit_16(62);
+emit_16(61);
+emit_16(62);
+emit_16(63);
+emit_16(64);
+emit_16(65);
+emit_16(64);
+emit_16(63);
+emit_16(64);
+emit_16(65);
+emit_16(66);
+emit_16(67);
+emit_16(66);
+emit_16(65);
+emit_16(66);
+emit_16(67);
+emit_16(68);
+emit_16(69);
+emit_16(68);
+emit_16(67);
+emit_16(68);
+emit_16(69);
+emit_16(70);
+emit_16(71);
+emit_16(70);
+emit_16(69);
+emit_16(70);
+emit_16(71);
+emit_16(72);
+emit_16(73);
+emit_16(72);
+emit_16(71);
+emit_16(72);
+emit_16(73);
+emit_16(74);
+emit_16(75);
+emit_16(74);
+emit_16(73);
+emit_16(74);
+emit_16(75);
+emit_16(76);
+emit_16(77);
+emit_16(76);
+emit_16(75);
+emit_16(76);
+emit_16(77);
+emit_16(78);
+emit_16(79);
+emit_16(78);
+emit_16(77);
+emit_16(78);
+emit_16(79);
+emit_16(80);
+emit_16(81);
+emit_16(80);
+emit_16(79);
+emit_16(80);
+emit_16(81);
+emit_16(82);
+emit_16(83);
+emit_16(82);
+emit_16(81);
+emit_16(82);
+emit_16(83);
+emit_16(84);
+emit_16(85);
+emit_16(84);
+emit_16(83);
+emit_16(84);
+emit_16(85);
+emit_16(86);
+emit_16(87);
+emit_16(86);
+emit_16(85);
+emit_16(86);
+emit_16(87);
+emit_16(88);
+emit_16(89);
+emit_16(88);
+emit_16(87);
+emit_16(88);
+emit_16(89);
+emit_16(90);
+emit_16(91);
+emit_16(90);
+emit_16(89);
+emit_16(90);
+emit_16(91);
+emit_16(92);
+emit_16(93);
+emit_16(92);
+emit_16(91);
+emit_16(92);
+emit_16(93);
+emit_16(94);
+emit_16(95);
+emit_16(94);
+emit_16(93);
+emit_16(94);
+emit_16(95);
+emit_16(96);
+emit_16(97);
+emit_16(96);
+emit_16(95);
+emit_16(96);
+emit_16(97);
+emit_16(98);
+emit_16(99);
+emit_16(98);
+emit_16(97);
+emit_16(98);
+emit_16(99);
+emit_16(100);
+emit_16(101);
+emit_16(100);
+emit_16(99);
+emit_16(100);
+emit_16(101);
+emit_16(102);
+emit_16(103);
+emit_16(102);
+emit_16(101);
+emit_16(102);
+emit_16(103);
+emit_16(104);
+emit_16(105);
+emit_16(104);
+emit_16(103);
+emit_16(104);
+emit_16(105);
+emit_16(106);
+emit_16(107);
+emit_16(106);
+emit_16(105);
+emit_16(106);
+emit_16(107);
+emit_16(108);
+emit_16(109);
+emit_16(108);
+emit_16(107);
+emit_16(108);
+emit_16(109);
+emit_16(110);
+emit_16(111);
+emit_16(110);
+emit_16(109);
+emit_16(110);
+emit_16(111);
+emit_16(112);
+emit_16(113);
+emit_16(112);
+emit_16(111);
+emit_16(112);
+emit_16(113);
+emit_16(114);
+emit_16(115);
+emit_16(114);
+emit_16(113);
+emit_16(114);
+emit_16(115);
+emit_16(116);
+emit_16(117);
+emit_16(116);
+emit_16(115);
+emit_16(116);
+emit_16(117);
+emit_16(118);
+emit_16(119);
+emit_16(118);
+emit_16(117);
+emit_16(118);
+emit_16(119);
+emit_16(120);
+emit_16(121);
+emit_16(120);
+emit_16(119);
+emit_16(120);
+emit_16(121);
+emit_16(122);
+emit_16(123);
+emit_16(122);
+emit_16(121);
+emit_16(122);
+emit_16(123);
+emit_16(124);
+emit_16(125);
+emit_16(124);
+emit_16(123);
+emit_16(124);
+emit_16(125);
+emit_16(126);
+emit_16(127);
+emit_16(126);
+emit_16(125);
+emit_16(126);
+emit_16(127);
+emit_16(128);
+emit_16(129);
+emit_16(128);
+emit_16(127);
+emit_16(128);
+emit_16(129);
+emit_16(130);
+emit_16(131);
+emit_16(130);
+emit_16(129);
+emit_16(132);
+emit_16(0);
+emit_16(133);
+emit_16(2);
+emit_16(133);
+emit_16(0);
+emit_16(133);
+emit_16(2);
+emit_16(134);
+emit_16(4);
+emit_16(134);
+emit_16(2);
+emit_16(134);
+emit_16(4);
+emit_16(135);
+emit_16(6);
+emit_16(135);
+emit_16(4);
+emit_16(135);
+emit_16(6);
+emit_16(136);
+emit_16(8);
+emit_16(136);
+emit_16(6);
+emit_16(136);
+emit_16(8);
+emit_16(137);
+emit_16(10);
+emit_16(137);
+emit_16(8);
+emit_16(137);
+emit_16(10);
+emit_16(138);
+emit_16(12);
+emit_16(138);
+emit_16(10);
+emit_16(138);
+emit_16(12);
+emit_16(139);
+emit_16(14);
+emit_16(139);
+emit_16(12);
+emit_16(139);
+emit_16(14);
+emit_16(140);
+emit_16(16);
+emit_16(140);
+emit_16(14);
+emit_16(140);
+emit_16(16);
+emit_16(141);
+emit_16(18);
+emit_16(141);
+emit_16(16);
+emit_16(141);
+emit_16(18);
+emit_16(142);
+emit_16(20);
+emit_16(142);
+emit_16(18);
+emit_16(142);
+emit_16(20);
+emit_16(143);
+emit_16(22);
+emit_16(143);
+emit_16(20);
+emit_16(143);
+emit_16(22);
+emit_16(144);
+emit_16(24);
+emit_16(144);
+emit_16(22);
+emit_16(144);
+emit_16(24);
+emit_16(145);
+emit_16(26);
+emit_16(145);
+emit_16(24);
+emit_16(145);
+emit_16(26);
+emit_16(146);
+emit_16(28);
+emit_16(146);
+emit_16(26);
+emit_16(146);
+emit_16(28);
+emit_16(147);
+emit_16(30);
+emit_16(147);
+emit_16(28);
+emit_16(147);
+emit_16(30);
+emit_16(148);
+emit_16(32);
+emit_16(148);
+emit_16(30);
+emit_16(148);
+emit_16(32);
+emit_16(149);
+emit_16(34);
+emit_16(149);
+emit_16(32);
+emit_16(149);
+emit_16(34);
+emit_16(150);
+emit_16(36);
+emit_16(150);
+emit_16(34);
+emit_16(150);
+emit_16(36);
+emit_16(151);
+emit_16(38);
+emit_16(151);
+emit_16(36);
+emit_16(151);
+emit_16(38);
+emit_16(152);
+emit_16(40);
+emit_16(152);
+emit_16(38);
+emit_16(152);
+emit_16(40);
+emit_16(153);
+emit_16(42);
+emit_16(153);
+emit_16(40);
+emit_16(153);
+emit_16(42);
+emit_16(154);
+emit_16(44);
+emit_16(154);
+emit_16(42);
+emit_16(154);
+emit_16(44);
+emit_16(155);
+emit_16(46);
+emit_16(155);
+emit_16(44);
+emit_16(155);
+emit_16(46);
+emit_16(156);
+emit_16(48);
+emit_16(156);
+emit_16(46);
+emit_16(156);
+emit_16(48);
+emit_16(157);
+emit_16(50);
+emit_16(157);
+emit_16(48);
+emit_16(157);
+emit_16(50);
+emit_16(158);
+emit_16(52);
+emit_16(158);
+emit_16(50);
+emit_16(158);
+emit_16(52);
+emit_16(159);
+emit_16(54);
+emit_16(159);
+emit_16(52);
+emit_16(159);
+emit_16(54);
+emit_16(160);
+emit_16(56);
+emit_16(160);
+emit_16(54);
+emit_16(160);
+emit_16(56);
+emit_16(161);
+emit_16(58);
+emit_16(161);
+emit_16(56);
+emit_16(161);
+emit_16(58);
+emit_16(162);
+emit_16(60);
+emit_16(162);
+emit_16(58);
+emit_16(162);
+emit_16(60);
+emit_16(163);
+emit_16(62);
+emit_16(163);
+emit_16(60);
+emit_16(163);
+emit_16(62);
+emit_16(164);
+emit_16(64);
+emit_16(164);
+emit_16(62);
+emit_16(164);
+emit_16(64);
+emit_16(165);
+emit_16(66);
+emit_16(165);
+emit_16(64);
+emit_16(165);
+emit_16(66);
+emit_16(166);
+emit_16(68);
+emit_16(166);
+emit_16(66);
+emit_16(166);
+emit_16(68);
+emit_16(167);
+emit_16(70);
+emit_16(167);
+emit_16(68);
+emit_16(167);
+emit_16(70);
+emit_16(168);
+emit_16(72);
+emit_16(168);
+emit_16(70);
+emit_16(168);
+emit_16(72);
+emit_16(169);
+emit_16(74);
+emit_16(169);
+emit_16(72);
+emit_16(169);
+emit_16(74);
+emit_16(170);
+emit_16(76);
+emit_16(170);
+emit_16(74);
+emit_16(170);
+emit_16(76);
+emit_16(171);
+emit_16(78);
+emit_16(171);
+emit_16(76);
+emit_16(171);
+emit_16(78);
+emit_16(172);
+emit_16(80);
+emit_16(172);
+emit_16(78);
+emit_16(172);
+emit_16(80);
+emit_16(173);
+emit_16(82);
+emit_16(173);
+emit_16(80);
+emit_16(173);
+emit_16(82);
+emit_16(174);
+emit_16(84);
+emit_16(174);
+emit_16(82);
+emit_16(174);
+emit_16(84);
+emit_16(175);
+emit_16(86);
+emit_16(175);
+emit_16(84);
+emit_16(175);
+emit_16(86);
+emit_16(176);
+emit_16(88);
+emit_16(176);
+emit_16(86);
+emit_16(176);
+emit_16(88);
+emit_16(177);
+emit_16(90);
+emit_16(177);
+emit_16(88);
+emit_16(177);
+emit_16(90);
+emit_16(178);
+emit_16(92);
+emit_16(178);
+emit_16(90);
+emit_16(178);
+emit_16(92);
+emit_16(179);
+emit_16(94);
+emit_16(179);
+emit_16(92);
+emit_16(179);
+emit_16(94);
+emit_16(180);
+emit_16(96);
+emit_16(180);
+emit_16(94);
+emit_16(180);
+emit_16(96);
+emit_16(181);
+emit_16(98);
+emit_16(181);
+emit_16(96);
+emit_16(181);
+emit_16(98);
+emit_16(182);
+emit_16(100);
+emit_16(182);
+emit_16(98);
+emit_16(182);
+emit_16(100);
+emit_16(183);
+emit_16(102);
+emit_16(183);
+emit_16(100);
+emit_16(183);
+emit_16(102);
+emit_16(184);
+emit_16(104);
+emit_16(184);
+emit_16(102);
+emit_16(184);
+emit_16(104);
+emit_16(185);
+emit_16(106);
+emit_16(185);
+emit_16(104);
+emit_16(185);
+emit_16(106);
+emit_16(186);
+emit_16(108);
+emit_16(186);
+emit_16(106);
+emit_16(186);
+emit_16(108);
+emit_16(187);
+emit_16(110);
+emit_16(187);
+emit_16(108);
+emit_16(187);
+emit_16(110);
+emit_16(188);
+emit_16(112);
+emit_16(188);
+emit_16(110);
+emit_16(188);
+emit_16(112);
+emit_16(189);
+emit_16(114);
+emit_16(189);
+emit_16(112);
+emit_16(189);
+emit_16(114);
+emit_16(190);
+emit_16(116);
+emit_16(190);
+emit_16(114);
+emit_16(190);
+emit_16(116);
+emit_16(191);
+emit_16(118);
+emit_16(191);
+emit_16(116);
+emit_16(191);
+emit_16(118);
+emit_16(192);
+emit_16(120);
+emit_16(192);
+emit_16(118);
+emit_16(192);
+emit_16(120);
+emit_16(193);
+emit_16(122);
+emit_16(193);
+emit_16(120);
+emit_16(193);
+emit_16(122);
+emit_16(194);
+emit_16(124);
+emit_16(194);
+emit_16(122);
+emit_16(194);
+emit_16(124);
+emit_16(195);
+emit_16(126);
+emit_16(195);
+emit_16(124);
+emit_16(195);
+emit_16(126);
+emit_16(196);
+emit_16(128);
+emit_16(196);
+emit_16(126);
+emit_16(196);
+emit_16(128);
+emit_16(197);
+emit_16(130);
+emit_16(197);
+emit_16(128);
+emit_16(198);
+emit_16(132);
+emit_16(199);
+emit_16(133);
+emit_16(199);
+emit_16(132);
+emit_16(199);
+emit_16(133);
+emit_16(200);
+emit_16(134);
+emit_16(200);
+emit_16(133);
+emit_16(200);
+emit_16(134);
+emit_16(201);
+emit_16(135);
+emit_16(201);
+emit_16(134);
+emit_16(201);
+emit_16(135);
+emit_16(202);
+emit_16(136);
+emit_16(202);
+emit_16(135);
+emit_16(202);
+emit_16(136);
+emit_16(203);
+emit_16(137);
+emit_16(203);
+emit_16(136);
+emit_16(203);
+emit_16(137);
+emit_16(204);
+emit_16(138);
+emit_16(204);
+emit_16(137);
+emit_16(204);
+emit_16(138);
+emit_16(205);
+emit_16(139);
+emit_16(205);
+emit_16(138);
+emit_16(205);
+emit_16(139);
+emit_16(206);
+emit_16(140);
+emit_16(206);
+emit_16(139);
+emit_16(206);
+emit_16(140);
+emit_16(207);
+emit_16(141);
+emit_16(207);
+emit_16(140);
+emit_16(207);
+emit_16(141);
+emit_16(208);
+emit_16(142);
+emit_16(208);
+emit_16(141);
+emit_16(208);
+emit_16(142);
+emit_16(209);
+emit_16(143);
+emit_16(209);
+emit_16(142);
+emit_16(209);
+emit_16(143);
+emit_16(210);
+emit_16(144);
+emit_16(210);
+emit_16(143);
+emit_16(210);
+emit_16(144);
+emit_16(211);
+emit_16(145);
+emit_16(211);
+emit_16(144);
+emit_16(211);
+emit_16(145);
+emit_16(212);
+emit_16(146);
+emit_16(212);
+emit_16(145);
+emit_16(212);
+emit_16(146);
+emit_16(213);
+emit_16(147);
+emit_16(213);
+emit_16(146);
+emit_16(213);
+emit_16(147);
+emit_16(214);
+emit_16(148);
+emit_16(214);
+emit_16(147);
+emit_16(214);
+emit_16(148);
+emit_16(215);
+emit_16(149);
+emit_16(215);
+emit_16(148);
+emit_16(215);
+emit_16(149);
+emit_16(216);
+emit_16(150);
+emit_16(216);
+emit_16(149);
+emit_16(216);
+emit_16(150);
+emit_16(217);
+emit_16(151);
+emit_16(217);
+emit_16(150);
+emit_16(217);
+emit_16(151);
+emit_16(218);
+emit_16(152);
+emit_16(218);
+emit_16(151);
+emit_16(218);
+emit_16(152);
+emit_16(219);
+emit_16(153);
+emit_16(219);
+emit_16(152);
+emit_16(219);
+emit_16(153);
+emit_16(220);
+emit_16(154);
+emit_16(220);
+emit_16(153);
+emit_16(220);
+emit_16(154);
+emit_16(221);
+emit_16(155);
+emit_16(221);
+emit_16(154);
+emit_16(221);
+emit_16(155);
+emit_16(222);
+emit_16(156);
+emit_16(222);
+emit_16(155);
+emit_16(222);
+emit_16(156);
+emit_16(223);
+emit_16(157);
+emit_16(223);
+emit_16(156);
+emit_16(223);
+emit_16(157);
+emit_16(224);
+emit_16(158);
+emit_16(224);
+emit_16(157);
+emit_16(224);
+emit_16(158);
+emit_16(225);
+emit_16(159);
+emit_16(225);
+emit_16(158);
+emit_16(225);
+emit_16(159);
+emit_16(226);
+emit_16(160);
+emit_16(226);
+emit_16(159);
+emit_16(226);
+emit_16(160);
+emit_16(227);
+emit_16(161);
+emit_16(227);
+emit_16(160);
+emit_16(227);
+emit_16(161);
+emit_16(228);
+emit_16(162);
+emit_16(228);
+emit_16(161);
+emit_16(228);
+emit_16(162);
+emit_16(229);
+emit_16(163);
+emit_16(229);
+emit_16(162);
+emit_16(229);
+emit_16(163);
+emit_16(230);
+emit_16(164);
+emit_16(230);
+emit_16(163);
+emit_16(230);
+emit_16(164);
+emit_16(231);
+emit_16(165);
+emit_16(231);
+emit_16(164);
+emit_16(231);
+emit_16(165);
+emit_16(232);
+emit_16(166);
+emit_16(232);
+emit_16(165);
+emit_16(232);
+emit_16(166);
+emit_16(233);
+emit_16(167);
+emit_16(233);
+emit_16(166);
+emit_16(233);
+emit_16(167);
+emit_16(234);
+emit_16(168);
+emit_16(234);
+emit_16(167);
+emit_16(234);
+emit_16(168);
+emit_16(235);
+emit_16(169);
+emit_16(235);
+emit_16(168);
+emit_16(235);
+emit_16(169);
+emit_16(236);
+emit_16(170);
+emit_16(236);
+emit_16(169);
+emit_16(236);
+emit_16(170);
+emit_16(237);
+emit_16(171);
+emit_16(237);
+emit_16(170);
+emit_16(237);
+emit_16(171);
+emit_16(238);
+emit_16(172);
+emit_16(238);
+emit_16(171);
+emit_16(238);
+emit_16(172);
+emit_16(239);
+emit_16(173);
+emit_16(239);
+emit_16(172);
+emit_16(239);
+emit_16(173);
+emit_16(240);
+emit_16(174);
+emit_16(240);
+emit_16(173);
+emit_16(240);
+emit_16(174);
+emit_16(241);
+emit_16(175);
+emit_16(241);
+emit_16(174);
+emit_16(241);
+emit_16(175);
+emit_16(242);
+emit_16(176);
+emit_16(242);
+emit_16(175);
+emit_16(242);
+emit_16(176);
+emit_16(243);
+emit_16(177);
+emit_16(243);
+emit_16(176);
+emit_16(243);
+emit_16(177);
+emit_16(244);
+emit_16(178);
+emit_16(244);
+emit_16(177);
+emit_16(244);
+emit_16(178);
+emit_16(245);
+emit_16(179);
+emit_16(245);
+emit_16(178);
+emit_16(245);
+emit_16(179);
+emit_16(246);
+emit_16(180);
+emit_16(246);
+emit_16(179);
+emit_16(246);
+emit_16(180);
+emit_16(247);
+emit_16(181);
+emit_16(247);
+emit_16(180);
+emit_16(247);
+emit_16(181);
+emit_16(248);
+emit_16(182);
+emit_16(248);
+emit_16(181);
+emit_16(248);
+emit_16(182);
+emit_16(249);
+emit_16(183);
+emit_16(249);
+emit_16(182);
+emit_16(249);
+emit_16(183);
+emit_16(250);
+emit_16(184);
+emit_16(250);
+emit_16(183);
+emit_16(250);
+emit_16(184);
+emit_16(251);
+emit_16(185);
+emit_16(251);
+emit_16(184);
+emit_16(251);
+emit_16(185);
+emit_16(252);
+emit_16(186);
+emit_16(252);
+emit_16(185);
+emit_16(252);
+emit_16(186);
+emit_16(253);
+emit_16(187);
+emit_16(253);
+emit_16(186);
+emit_16(253);
+emit_16(187);
+emit_16(254);
+emit_16(188);
+emit_16(254);
+emit_16(187);
+emit_16(254);
+emit_16(188);
+emit_16(255);
+emit_16(189);
+emit_16(255);
+emit_16(188);
+emit_16(255);
+emit_16(189);
+emit_16(256);
+emit_16(190);
+emit_16(256);
+emit_16(189);
+emit_16(256);
+emit_16(190);
+emit_16(257);
+emit_16(191);
+emit_16(257);
+emit_16(190);
+emit_16(257);
+emit_16(191);
+emit_16(258);
+emit_16(192);
+emit_16(258);
+emit_16(191);
+emit_16(258);
+emit_16(192);
+emit_16(259);
+emit_16(193);
+emit_16(259);
+emit_16(192);
+emit_16(259);
+emit_16(193);
+emit_16(260);
+emit_16(194);
+emit_16(260);
+emit_16(193);
+emit_16(260);
+emit_16(194);
+emit_16(261);
+emit_16(195);
+emit_16(261);
+emit_16(194);
+emit_16(261);
+emit_16(195);
+emit_16(262);
+emit_16(196);
+emit_16(262);
+emit_16(195);
+emit_16(262);
+emit_16(196);
+emit_16(263);
+emit_16(197);
+emit_16(263);
+emit_16(196);
+emit_16(264);
+emit_16(198);
+emit_16(265);
+emit_16(199);
+emit_16(265);
+emit_16(198);
+emit_16(265);
+emit_16(199);
+emit_16(266);
+emit_16(200);
+emit_16(266);
+emit_16(199);
+emit_16(266);
+emit_16(200);
+emit_16(267);
+emit_16(201);
+emit_16(267);
+emit_16(200);
+emit_16(267);
+emit_16(201);
+emit_16(268);
+emit_16(202);
+emit_16(268);
+emit_16(201);
+emit_16(268);
+emit_16(202);
+emit_16(269);
+emit_16(203);
+emit_16(269);
+emit_16(202);
+emit_16(269);
+emit_16(203);
+emit_16(270);
+emit_16(204);
+emit_16(270);
+emit_16(203);
+emit_16(270);
+emit_16(204);
+emit_16(271);
+emit_16(205);
+emit_16(271);
+emit_16(204);
+emit_16(271);
+emit_16(205);
+emit_16(272);
+emit_16(206);
+emit_16(272);
+emit_16(205);
+emit_16(272);
+emit_16(206);
+emit_16(273);
+emit_16(207);
+emit_16(273);
+emit_16(206);
+emit_16(273);
+emit_16(207);
+emit_16(274);
+emit_16(208);
+emit_16(274);
+emit_16(207);
+emit_16(274);
+emit_16(208);
+emit_16(275);
+emit_16(209);
+emit_16(275);
+emit_16(208);
+emit_16(275);
+emit_16(209);
+emit_16(276);
+emit_16(210);
+emit_16(276);
+emit_16(209);
+emit_16(276);
+emit_16(210);
+emit_16(277);
+emit_16(211);
+emit_16(277);
+emit_16(210);
+emit_16(277);
+emit_16(211);
+emit_16(278);
+emit_16(212);
+emit_16(278);
+emit_16(211);
+emit_16(278);
+emit_16(212);
+emit_16(279);
+emit_16(213);
+emit_16(279);
+emit_16(212);
+emit_16(279);
+emit_16(213);
+emit_16(280);
+emit_16(214);
+emit_16(280);
+emit_16(213);
+emit_16(280);
+emit_16(214);
+emit_16(281);
+emit_16(215);
+emit_16(281);
+emit_16(214);
+emit_16(281);
+emit_16(215);
+emit_16(282);
+emit_16(216);
+emit_16(282);
+emit_16(215);
+emit_16(282);
+emit_16(216);
+emit_16(283);
+emit_16(217);
+emit_16(283);
+emit_16(216);
+emit_16(283);
+emit_16(217);
+emit_16(284);
+emit_16(218);
+emit_16(284);
+emit_16(217);
+emit_16(284);
+emit_16(218);
+emit_16(285);
+emit_16(219);
+emit_16(285);
+emit_16(218);
+emit_16(285);
+emit_16(219);
+emit_16(286);
+emit_16(220);
+emit_16(286);
+emit_16(219);
+emit_16(286);
+emit_16(220);
+emit_16(287);
+emit_16(221);
+emit_16(287);
+emit_16(220);
+emit_16(287);
+emit_16(221);
+emit_16(288);
+emit_16(222);
+emit_16(288);
+emit_16(221);
+emit_16(288);
+emit_16(222);
+emit_16(289);
+emit_16(223);
+emit_16(289);
+emit_16(222);
+emit_16(289);
+emit_16(223);
+emit_16(290);
+emit_16(224);
+emit_16(290);
+emit_16(223);
+emit_16(290);
+emit_16(224);
+emit_16(291);
+emit_16(225);
+emit_16(291);
+emit_16(224);
+emit_16(291);
+emit_16(225);
+emit_16(292);
+emit_16(226);
+emit_16(292);
+emit_16(225);
+emit_16(292);
+emit_16(226);
+emit_16(293);
+emit_16(227);
+emit_16(293);
+emit_16(226);
+emit_16(293);
+emit_16(227);
+emit_16(294);
+emit_16(228);
+emit_16(294);
+emit_16(227);
+emit_16(294);
+emit_16(228);
+emit_16(295);
+emit_16(229);
+emit_16(295);
+emit_16(228);
+emit_16(295);
+emit_16(229);
+emit_16(296);
+emit_16(230);
+emit_16(296);
+emit_16(229);
+emit_16(296);
+emit_16(230);
+emit_16(297);
+emit_16(231);
+emit_16(297);
+emit_16(230);
+emit_16(297);
+emit_16(231);
+emit_16(298);
+emit_16(232);
+emit_16(298);
+emit_16(231);
+emit_16(298);
+emit_16(232);
+emit_16(299);
+emit_16(233);
+emit_16(299);
+emit_16(232);
+emit_16(299);
+emit_16(233);
+emit_16(300);
+emit_16(234);
+emit_16(300);
+emit_16(233);
+emit_16(300);
+emit_16(234);
+emit_16(301);
+emit_16(235);
+emit_16(301);
+emit_16(234);
+emit_16(301);
+emit_16(235);
+emit_16(302);
+emit_16(236);
+emit_16(302);
+emit_16(235);
+emit_16(302);
+emit_16(236);
+emit_16(303);
+emit_16(237);
+emit_16(303);
+emit_16(236);
+emit_16(303);
+emit_16(237);
+emit_16(304);
+emit_16(238);
+emit_16(304);
+emit_16(237);
+emit_16(304);
+emit_16(238);
+emit_16(305);
+emit_16(239);
+emit_16(305);
+emit_16(238);
+emit_16(305);
+emit_16(239);
+emit_16(306);
+emit_16(240);
+emit_16(306);
+emit_16(239);
+emit_16(306);
+emit_16(240);
+emit_16(307);
+emit_16(241);
+emit_16(307);
+emit_16(240);
+emit_16(307);
+emit_16(241);
+emit_16(308);
+emit_16(242);
+emit_16(308);
+emit_16(241);
+emit_16(308);
+emit_16(242);
+emit_16(309);
+emit_16(243);
+emit_16(309);
+emit_16(242);
+emit_16(309);
+emit_16(243);
+emit_16(310);
+emit_16(244);
+emit_16(310);
+emit_16(243);
+emit_16(310);
+emit_16(244);
+emit_16(311);
+emit_16(245);
+emit_16(311);
+emit_16(244);
+emit_16(311);
+emit_16(245);
+emit_16(312);
+emit_16(246);
+emit_16(312);
+emit_16(245);
+emit_16(312);
+emit_16(246);
+emit_16(313);
+emit_16(247);
+emit_16(313);
+emit_16(246);
+emit_16(313);
+emit_16(247);
+emit_16(314);
+emit_16(248);
+emit_16(314);
+emit_16(247);
+emit_16(314);
+emit_16(248);
+emit_16(315);
+emit_16(249);
+emit_16(315);
+emit_16(248);
+emit_16(315);
+emit_16(249);
+emit_16(316);
+emit_16(250);
+emit_16(316);
+emit_16(249);
+emit_16(316);
+emit_16(250);
+emit_16(317);
+emit_16(251);
+emit_16(317);
+emit_16(250);
+emit_16(317);
+emit_16(251);
+emit_16(318);
+emit_16(252);
+emit_16(318);
+emit_16(251);
+emit_16(318);
+emit_16(252);
+emit_16(319);
+emit_16(253);
+emit_16(319);
+emit_16(252);
+emit_16(319);
+emit_16(253);
+emit_16(320);
+emit_16(254);
+emit_16(320);
+emit_16(253);
+emit_16(320);
+emit_16(254);
+emit_16(321);
+emit_16(255);
+emit_16(321);
+emit_16(254);
+emit_16(321);
+emit_16(255);
+emit_16(322);
+emit_16(256);
+emit_16(322);
+emit_16(255);
+emit_16(322);
+emit_16(256);
+emit_16(323);
+emit_16(257);
+emit_16(323);
+emit_16(256);
+emit_16(323);
+emit_16(257);
+emit_16(324);
+emit_16(258);
+emit_16(324);
+emit_16(257);
+emit_16(324);
+emit_16(258);
+emit_16(325);
+emit_16(259);
+emit_16(325);
+emit_16(258);
+emit_16(325);
+emit_16(259);
+emit_16(326);
+emit_16(260);
+emit_16(326);
+emit_16(259);
+emit_16(326);
+emit_16(260);
+emit_16(327);
+emit_16(261);
+emit_16(327);
+emit_16(260);
+emit_16(327);
+emit_16(261);
+emit_16(328);
+emit_16(262);
+emit_16(328);
+emit_16(261);
+emit_16(328);
+emit_16(262);
+emit_16(329);
+emit_16(263);
+emit_16(329);
+emit_16(262);
+emit_16(330);
+emit_16(264);
+emit_16(331);
+emit_16(265);
+emit_16(331);
+emit_16(264);
+emit_16(331);
+emit_16(265);
+emit_16(332);
+emit_16(266);
+emit_16(332);
+emit_16(265);
+emit_16(332);
+emit_16(266);
+emit_16(333);
+emit_16(267);
+emit_16(333);
+emit_16(266);
+emit_16(333);
+emit_16(267);
+emit_16(334);
+emit_16(268);
+emit_16(334);
+emit_16(267);
+emit_16(334);
+emit_16(268);
+emit_16(335);
+emit_16(269);
+emit_16(335);
+emit_16(268);
+emit_16(335);
+emit_16(269);
+emit_16(336);
+emit_16(270);
+emit_16(336);
+emit_16(269);
+emit_16(336);
+emit_16(270);
+emit_16(337);
+emit_16(271);
+emit_16(337);
+emit_16(270);
+emit_16(337);
+emit_16(271);
+emit_16(338);
+emit_16(272);
+emit_16(338);
+emit_16(271);
+emit_16(338);
+emit_16(272);
+emit_16(339);
+emit_16(273);
+emit_16(339);
+emit_16(272);
+emit_16(339);
+emit_16(273);
+emit_16(340);
+emit_16(274);
+emit_16(340);
+emit_16(273);
+emit_16(340);
+emit_16(274);
+emit_16(341);
+emit_16(275);
+emit_16(341);
+emit_16(274);
+emit_16(341);
+emit_16(275);
+emit_16(342);
+emit_16(276);
+emit_16(342);
+emit_16(275);
+emit_16(342);
+emit_16(276);
+emit_16(343);
+emit_16(277);
+emit_16(343);
+emit_16(276);
+emit_16(343);
+emit_16(277);
+emit_16(344);
+emit_16(278);
+emit_16(344);
+emit_16(277);
+emit_16(344);
+emit_16(278);
+emit_16(345);
+emit_16(279);
+emit_16(345);
+emit_16(278);
+emit_16(345);
+emit_16(279);
+emit_16(346);
+emit_16(280);
+emit_16(346);
+emit_16(279);
+emit_16(346);
+emit_16(280);
+emit_16(347);
+emit_16(281);
+emit_16(347);
+emit_16(280);
+emit_16(347);
+emit_16(281);
+emit_16(348);
+emit_16(282);
+emit_16(348);
+emit_16(281);
+emit_16(348);
+emit_16(282);
+emit_16(349);
+emit_16(283);
+emit_16(349);
+emit_16(282);
+emit_16(349);
+emit_16(283);
+emit_16(350);
+emit_16(284);
+emit_16(350);
+emit_16(283);
+emit_16(350);
+emit_16(284);
+emit_16(351);
+emit_16(285);
+emit_16(351);
+emit_16(284);
+emit_16(351);
+emit_16(285);
+emit_16(352);
+emit_16(286);
+emit_16(352);
+emit_16(285);
+emit_16(352);
+emit_16(286);
+emit_16(353);
+emit_16(287);
+emit_16(353);
+emit_16(286);
+emit_16(353);
+emit_16(287);
+emit_16(354);
+emit_16(288);
+emit_16(354);
+emit_16(287);
+emit_16(354);
+emit_16(288);
+emit_16(355);
+emit_16(289);
+emit_16(355);
+emit_16(288);
+emit_16(355);
+emit_16(289);
+emit_16(356);
+emit_16(290);
+emit_16(356);
+emit_16(289);
+emit_16(356);
+emit_16(290);
+emit_16(357);
+emit_16(291);
+emit_16(357);
+emit_16(290);
+emit_16(357);
+emit_16(291);
+emit_16(358);
+emit_16(292);
+emit_16(358);
+emit_16(291);
+emit_16(358);
+emit_16(292);
+emit_16(359);
+emit_16(293);
+emit_16(359);
+emit_16(292);
+emit_16(359);
+emit_16(293);
+emit_16(360);
+emit_16(294);
+emit_16(360);
+emit_16(293);
+emit_16(360);
+emit_16(294);
+emit_16(361);
+emit_16(295);
+emit_16(361);
+emit_16(294);
+emit_16(361);
+emit_16(295);
+emit_16(362);
+emit_16(296);
+emit_16(362);
+emit_16(295);
+emit_16(362);
+emit_16(296);
+emit_16(363);
+emit_16(297);
+emit_16(363);
+emit_16(296);
+emit_16(363);
+emit_16(297);
+emit_16(364);
+emit_16(298);
+emit_16(364);
+emit_16(297);
+emit_16(364);
+emit_16(298);
+emit_16(365);
+emit_16(299);
+emit_16(365);
+emit_16(298);
+emit_16(365);
+emit_16(299);
+emit_16(366);
+emit_16(300);
+emit_16(366);
+emit_16(299);
+emit_16(366);
+emit_16(300);
+emit_16(367);
+emit_16(301);
+emit_16(367);
+emit_16(300);
+emit_16(367);
+emit_16(301);
+emit_16(368);
+emit_16(302);
+emit_16(368);
+emit_16(301);
+emit_16(368);
+emit_16(302);
+emit_16(369);
+emit_16(303);
+emit_16(369);
+emit_16(302);
+emit_16(369);
+emit_16(303);
+emit_16(370);
+emit_16(304);
+emit_16(370);
+emit_16(303);
+emit_16(370);
+emit_16(304);
+emit_16(371);
+emit_16(305);
+emit_16(371);
+emit_16(304);
+emit_16(371);
+emit_16(305);
+emit_16(372);
+emit_16(306);
+emit_16(372);
+emit_16(305);
+emit_16(372);
+emit_16(306);
+emit_16(373);
+emit_16(307);
+emit_16(373);
+emit_16(306);
+emit_16(373);
+emit_16(307);
+emit_16(374);
+emit_16(308);
+emit_16(374);
+emit_16(307);
+emit_16(374);
+emit_16(308);
+emit_16(375);
+emit_16(309);
+emit_16(375);
+emit_16(308);
+emit_16(375);
+emit_16(309);
+emit_16(376);
+emit_16(310);
+emit_16(376);
+emit_16(309);
+emit_16(376);
+emit_16(310);
+emit_16(377);
+emit_16(311);
+emit_16(377);
+emit_16(310);
+emit_16(377);
+emit_16(311);
+emit_16(378);
+emit_16(312);
+emit_16(378);
+emit_16(311);
+emit_16(378);
+emit_16(312);
+emit_16(379);
+emit_16(313);
+emit_16(379);
+emit_16(312);
+emit_16(379);
+emit_16(313);
+emit_16(380);
+emit_16(314);
+emit_16(380);
+emit_16(313);
+emit_16(380);
+emit_16(314);
+emit_16(381);
+emit_16(315);
+emit_16(381);
+emit_16(314);
+emit_16(381);
+emit_16(315);
+emit_16(382);
+emit_16(316);
+emit_16(382);
+emit_16(315);
+emit_16(382);
+emit_16(316);
+emit_16(383);
+emit_16(317);
+emit_16(383);
+emit_16(316);
+emit_16(383);
+emit_16(317);
+emit_16(384);
+emit_16(318);
+emit_16(384);
+emit_16(317);
+emit_16(384);
+emit_16(318);
+emit_16(385);
+emit_16(319);
+emit_16(385);
+emit_16(318);
+emit_16(385);
+emit_16(319);
+emit_16(386);
+emit_16(320);
+emit_16(386);
+emit_16(319);
+emit_16(386);
+emit_16(320);
+emit_16(387);
+emit_16(321);
+emit_16(387);
+emit_16(320);
+emit_16(387);
+emit_16(321);
+emit_16(388);
+emit_16(322);
+emit_16(388);
+emit_16(321);
+emit_16(388);
+emit_16(322);
+emit_16(389);
+emit_16(323);
+emit_16(389);
+emit_16(322);
+emit_16(389);
+emit_16(323);
+emit_16(390);
+emit_16(324);
+emit_16(390);
+emit_16(323);
+emit_16(390);
+emit_16(324);
+emit_16(391);
+emit_16(325);
+emit_16(391);
+emit_16(324);
+emit_16(391);
+emit_16(325);
+emit_16(392);
+emit_16(326);
+emit_16(392);
+emit_16(325);
+emit_16(392);
+emit_16(326);
+emit_16(393);
+emit_16(327);
+emit_16(393);
+emit_16(326);
+emit_16(393);
+emit_16(327);
+emit_16(394);
+emit_16(328);
+emit_16(394);
+emit_16(327);
+emit_16(394);
+emit_16(328);
+emit_16(395);
+emit_16(329);
+emit_16(395);
+emit_16(328);
+emit_16(396);
+emit_16(330);
+emit_16(397);
+emit_16(331);
+emit_16(397);
+emit_16(330);
+emit_16(397);
+emit_16(331);
+emit_16(398);
+emit_16(332);
+emit_16(398);
+emit_16(331);
+emit_16(398);
+emit_16(332);
+emit_16(399);
+emit_16(333);
+emit_16(399);
+emit_16(332);
+emit_16(399);
+emit_16(333);
+emit_16(400);
+emit_16(334);
+emit_16(400);
+emit_16(333);
+emit_16(400);
+emit_16(334);
+emit_16(401);
+emit_16(335);
+emit_16(401);
+emit_16(334);
+emit_16(401);
+emit_16(335);
+emit_16(402);
+emit_16(336);
+emit_16(402);
+emit_16(335);
+emit_16(402);
+emit_16(336);
+emit_16(403);
+emit_16(337);
+emit_16(403);
+emit_16(336);
+emit_16(403);
+emit_16(337);
+emit_16(404);
+emit_16(338);
+emit_16(404);
+emit_16(337);
+emit_16(404);
+emit_16(338);
+emit_16(405);
+emit_16(339);
+emit_16(405);
+emit_16(338);
+emit_16(405);
+emit_16(339);
+emit_16(406);
+emit_16(340);
+emit_16(406);
+emit_16(339);
+emit_16(406);
+emit_16(340);
+emit_16(407);
+emit_16(341);
+emit_16(407);
+emit_16(340);
+emit_16(407);
+emit_16(341);
+emit_16(408);
+emit_16(342);
+emit_16(408);
+emit_16(341);
+emit_16(408);
+emit_16(342);
+emit_16(409);
+emit_16(343);
+emit_16(409);
+emit_16(342);
+emit_16(409);
+emit_16(343);
+emit_16(410);
+emit_16(344);
+emit_16(410);
+emit_16(343);
+emit_16(410);
+emit_16(344);
+emit_16(411);
+emit_16(345);
+emit_16(411);
+emit_16(344);
+emit_16(411);
+emit_16(345);
+emit_16(412);
+emit_16(346);
+emit_16(412);
+emit_16(345);
+emit_16(412);
+emit_16(346);
+emit_16(413);
+emit_16(347);
+emit_16(413);
+emit_16(346);
+emit_16(413);
+emit_16(347);
+emit_16(414);
+emit_16(348);
+emit_16(414);
+emit_16(347);
+emit_16(414);
+emit_16(348);
+emit_16(415);
+emit_16(349);
+emit_16(415);
+emit_16(348);
+emit_16(415);
+emit_16(349);
+emit_16(416);
+emit_16(350);
+emit_16(416);
+emit_16(349);
+emit_16(416);
+emit_16(350);
+emit_16(417);
+emit_16(351);
+emit_16(417);
+emit_16(350);
+emit_16(417);
+emit_16(351);
+emit_16(418);
+emit_16(352);
+emit_16(418);
+emit_16(351);
+emit_16(418);
+emit_16(352);
+emit_16(419);
+emit_16(353);
+emit_16(419);
+emit_16(352);
+emit_16(419);
+emit_16(353);
+emit_16(420);
+emit_16(354);
+emit_16(420);
+emit_16(353);
+emit_16(420);
+emit_16(354);
+emit_16(421);
+emit_16(355);
+emit_16(421);
+emit_16(354);
+emit_16(421);
+emit_16(355);
+emit_16(422);
+emit_16(356);
+emit_16(422);
+emit_16(355);
+emit_16(422);
+emit_16(356);
+emit_16(423);
+emit_16(357);
+emit_16(423);
+emit_16(356);
+emit_16(423);
+emit_16(357);
+emit_16(424);
+emit_16(358);
+emit_16(424);
+emit_16(357);
+emit_16(424);
+emit_16(358);
+emit_16(425);
+emit_16(359);
+emit_16(425);
+emit_16(358);
+emit_16(425);
+emit_16(359);
+emit_16(426);
+emit_16(360);
+emit_16(426);
+emit_16(359);
+emit_16(426);
+emit_16(360);
+emit_16(427);
+emit_16(361);
+emit_16(427);
+emit_16(360);
+emit_16(427);
+emit_16(361);
+emit_16(428);
+emit_16(362);
+emit_16(428);
+emit_16(361);
+emit_16(428);
+emit_16(362);
+emit_16(429);
+emit_16(363);
+emit_16(429);
+emit_16(362);
+emit_16(429);
+emit_16(363);
+emit_16(430);
+emit_16(364);
+emit_16(430);
+emit_16(363);
+emit_16(430);
+emit_16(364);
+emit_16(431);
+emit_16(365);
+emit_16(431);
+emit_16(364);
+emit_16(431);
+emit_16(365);
+emit_16(432);
+emit_16(366);
+emit_16(432);
+emit_16(365);
+emit_16(432);
+emit_16(366);
+emit_16(433);
+emit_16(367);
+emit_16(433);
+emit_16(366);
+emit_16(433);
+emit_16(367);
+emit_16(434);
+emit_16(368);
+emit_16(434);
+emit_16(367);
+emit_16(434);
+emit_16(368);
+emit_16(435);
+emit_16(369);
+emit_16(435);
+emit_16(368);
+emit_16(435);
+emit_16(369);
+emit_16(436);
+emit_16(370);
+emit_16(436);
+emit_16(369);
+emit_16(436);
+emit_16(370);
+emit_16(437);
+emit_16(371);
+emit_16(437);
+emit_16(370);
+emit_16(437);
+emit_16(371);
+emit_16(438);
+emit_16(372);
+emit_16(438);
+emit_16(371);
+emit_16(438);
+emit_16(372);
+emit_16(439);
+emit_16(373);
+emit_16(439);
+emit_16(372);
+emit_16(439);
+emit_16(373);
+emit_16(440);
+emit_16(374);
+emit_16(440);
+emit_16(373);
+emit_16(440);
+emit_16(374);
+emit_16(441);
+emit_16(375);
+emit_16(441);
+emit_16(374);
+emit_16(441);
+emit_16(375);
+emit_16(442);
+emit_16(376);
+emit_16(442);
+emit_16(375);
+emit_16(442);
+emit_16(376);
+emit_16(443);
+emit_16(377);
+emit_16(443);
+emit_16(376);
+emit_16(443);
+emit_16(377);
+emit_16(444);
+emit_16(378);
+emit_16(444);
+emit_16(377);
+emit_16(444);
+emit_16(378);
+emit_16(445);
+emit_16(379);
+emit_16(445);
+emit_16(378);
+emit_16(445);
+emit_16(379);
+emit_16(446);
+emit_16(380);
+emit_16(446);
+emit_16(379);
+emit_16(446);
+emit_16(380);
+emit_16(447);
+emit_16(381);
+emit_16(447);
+emit_16(380);
+emit_16(447);
+emit_16(381);
+emit_16(448);
+emit_16(382);
+emit_16(448);
+emit_16(381);
+emit_16(448);
+emit_16(382);
+emit_16(449);
+emit_16(383);
+emit_16(449);
+emit_16(382);
+emit_16(449);
+emit_16(383);
+emit_16(450);
+emit_16(384);
+emit_16(450);
+emit_16(383);
+emit_16(450);
+emit_16(384);
+emit_16(451);
+emit_16(385);
+emit_16(451);
+emit_16(384);
+emit_16(451);
+emit_16(385);
+emit_16(452);
+emit_16(386);
+emit_16(452);
+emit_16(385);
+emit_16(452);
+emit_16(386);
+emit_16(453);
+emit_16(387);
+emit_16(453);
+emit_16(386);
+emit_16(453);
+emit_16(387);
+emit_16(454);
+emit_16(388);
+emit_16(454);
+emit_16(387);
+emit_16(454);
+emit_16(388);
+emit_16(455);
+emit_16(389);
+emit_16(455);
+emit_16(388);
+emit_16(455);
+emit_16(389);
+emit_16(456);
+emit_16(390);
+emit_16(456);
+emit_16(389);
+emit_16(456);
+emit_16(390);
+emit_16(457);
+emit_16(391);
+emit_16(457);
+emit_16(390);
+emit_16(457);
+emit_16(391);
+emit_16(458);
+emit_16(392);
+emit_16(458);
+emit_16(391);
+emit_16(458);
+emit_16(392);
+emit_16(459);
+emit_16(393);
+emit_16(459);
+emit_16(392);
+emit_16(459);
+emit_16(393);
+emit_16(460);
+emit_16(394);
+emit_16(460);
+emit_16(393);
+emit_16(460);
+emit_16(394);
+emit_16(461);
+emit_16(395);
+emit_16(461);
+emit_16(394);
+emit_16(462);
+emit_16(396);
+emit_16(463);
+emit_16(397);
+emit_16(463);
+emit_16(396);
+emit_16(463);
+emit_16(397);
+emit_16(464);
+emit_16(398);
+emit_16(464);
+emit_16(397);
+emit_16(464);
+emit_16(398);
+emit_16(465);
+emit_16(399);
+emit_16(465);
+emit_16(398);
+emit_16(465);
+emit_16(399);
+emit_16(466);
+emit_16(400);
+emit_16(466);
+emit_16(399);
+emit_16(466);
+emit_16(400);
+emit_16(467);
+emit_16(401);
+emit_16(467);
+emit_16(400);
+emit_16(467);
+emit_16(401);
+emit_16(468);
+emit_16(402);
+emit_16(468);
+emit_16(401);
+emit_16(468);
+emit_16(402);
+emit_16(469);
+emit_16(403);
+emit_16(469);
+emit_16(402);
+emit_16(469);
+emit_16(403);
+emit_16(470);
+emit_16(404);
+emit_16(470);
+emit_16(403);
+emit_16(470);
+emit_16(404);
+emit_16(471);
+emit_16(405);
+emit_16(471);
+emit_16(404);
+emit_16(471);
+emit_16(405);
+emit_16(472);
+emit_16(406);
+emit_16(472);
+emit_16(405);
+emit_16(472);
+emit_16(406);
+emit_16(473);
+emit_16(407);
+emit_16(473);
+emit_16(406);
+emit_16(473);
+emit_16(407);
+emit_16(474);
+emit_16(408);
+emit_16(474);
+emit_16(407);
+emit_16(474);
+emit_16(408);
+emit_16(475);
+emit_16(409);
+emit_16(475);
+emit_16(408);
+emit_16(475);
+emit_16(409);
+emit_16(476);
+emit_16(410);
+emit_16(476);
+emit_16(409);
+emit_16(476);
+emit_16(410);
+emit_16(477);
+emit_16(411);
+emit_16(477);
+emit_16(410);
+emit_16(477);
+emit_16(411);
+emit_16(478);
+emit_16(412);
+emit_16(478);
+emit_16(411);
+emit_16(478);
+emit_16(412);
+emit_16(479);
+emit_16(413);
+emit_16(479);
+emit_16(412);
+emit_16(479);
+emit_16(413);
+emit_16(480);
+emit_16(414);
+emit_16(480);
+emit_16(413);
+emit_16(480);
+emit_16(414);
+emit_16(481);
+emit_16(415);
+emit_16(481);
+emit_16(414);
+emit_16(481);
+emit_16(415);
+emit_16(482);
+emit_16(416);
+emit_16(482);
+emit_16(415);
+emit_16(482);
+emit_16(416);
+emit_16(483);
+emit_16(417);
+emit_16(483);
+emit_16(416);
+emit_16(483);
+emit_16(417);
+emit_16(484);
+emit_16(418);
+emit_16(484);
+emit_16(417);
+emit_16(484);
+emit_16(418);
+emit_16(485);
+emit_16(419);
+emit_16(485);
+emit_16(418);
+emit_16(485);
+emit_16(419);
+emit_16(486);
+emit_16(420);
+emit_16(486);
+emit_16(419);
+emit_16(486);
+emit_16(420);
+emit_16(487);
+emit_16(421);
+emit_16(487);
+emit_16(420);
+emit_16(487);
+emit_16(421);
+emit_16(488);
+emit_16(422);
+emit_16(488);
+emit_16(421);
+emit_16(488);
+emit_16(422);
+emit_16(489);
+emit_16(423);
+emit_16(489);
+emit_16(422);
+emit_16(489);
+emit_16(423);
+emit_16(490);
+emit_16(424);
+emit_16(490);
+emit_16(423);
+emit_16(490);
+emit_16(424);
+emit_16(491);
+emit_16(425);
+emit_16(491);
+emit_16(424);
+emit_16(491);
+emit_16(425);
+emit_16(492);
+emit_16(426);
+emit_16(492);
+emit_16(425);
+emit_16(492);
+emit_16(426);
+emit_16(493);
+emit_16(427);
+emit_16(493);
+emit_16(426);
+emit_16(493);
+emit_16(427);
+emit_16(494);
+emit_16(428);
+emit_16(494);
+emit_16(427);
+emit_16(494);
+emit_16(428);
+emit_16(495);
+emit_16(429);
+emit_16(495);
+emit_16(428);
+emit_16(495);
+emit_16(429);
+emit_16(496);
+emit_16(430);
+emit_16(496);
+emit_16(429);
+emit_16(496);
+emit_16(430);
+emit_16(497);
+emit_16(431);
+emit_16(497);
+emit_16(430);
+emit_16(497);
+emit_16(431);
+emit_16(498);
+emit_16(432);
+emit_16(498);
+emit_16(431);
+emit_16(498);
+emit_16(432);
+emit_16(499);
+emit_16(433);
+emit_16(499);
+emit_16(432);
+emit_16(499);
+emit_16(433);
+emit_16(500);
+emit_16(434);
+emit_16(500);
+emit_16(433);
+emit_16(500);
+emit_16(434);
+emit_16(501);
+emit_16(435);
+emit_16(501);
+emit_16(434);
+emit_16(501);
+emit_16(435);
+emit_16(502);
+emit_16(436);
+emit_16(502);
+emit_16(435);
+emit_16(502);
+emit_16(436);
+emit_16(503);
+emit_16(437);
+emit_16(503);
+emit_16(436);
+emit_16(503);
+emit_16(437);
+emit_16(504);
+emit_16(438);
+emit_16(504);
+emit_16(437);
+emit_16(504);
+emit_16(438);
+emit_16(505);
+emit_16(439);
+emit_16(505);
+emit_16(438);
+emit_16(505);
+emit_16(439);
+emit_16(506);
+emit_16(440);
+emit_16(506);
+emit_16(439);
+emit_16(506);
+emit_16(440);
+emit_16(507);
+emit_16(441);
+emit_16(507);
+emit_16(440);
+emit_16(507);
+emit_16(441);
+emit_16(508);
+emit_16(442);
+emit_16(508);
+emit_16(441);
+emit_16(508);
+emit_16(442);
+emit_16(509);
+emit_16(443);
+emit_16(509);
+emit_16(442);
+emit_16(509);
+emit_16(443);
+emit_16(510);
+emit_16(444);
+emit_16(510);
+emit_16(443);
+emit_16(510);
+emit_16(444);
+emit_16(511);
+emit_16(445);
+emit_16(511);
+emit_16(444);
+emit_16(511);
+emit_16(445);
+emit_16(512);
+emit_16(446);
+emit_16(512);
+emit_16(445);
+emit_16(512);
+emit_16(446);
+emit_16(513);
+emit_16(447);
+emit_16(513);
+emit_16(446);
+emit_16(513);
+emit_16(447);
+emit_16(514);
+emit_16(448);
+emit_16(514);
+emit_16(447);
+emit_16(514);
+emit_16(448);
+emit_16(515);
+emit_16(449);
+emit_16(515);
+emit_16(448);
+emit_16(515);
+emit_16(449);
+emit_16(516);
+emit_16(450);
+emit_16(516);
+emit_16(449);
+emit_16(516);
+emit_16(450);
+emit_16(517);
+emit_16(451);
+emit_16(517);
+emit_16(450);
+emit_16(517);
+emit_16(451);
+emit_16(518);
+emit_16(452);
+emit_16(518);
+emit_16(451);
+emit_16(518);
+emit_16(452);
+emit_16(519);
+emit_16(453);
+emit_16(519);
+emit_16(452);
+emit_16(519);
+emit_16(453);
+emit_16(520);
+emit_16(454);
+emit_16(520);
+emit_16(453);
+emit_16(520);
+emit_16(454);
+emit_16(521);
+emit_16(455);
+emit_16(521);
+emit_16(454);
+emit_16(521);
+emit_16(455);
+emit_16(522);
+emit_16(456);
+emit_16(522);
+emit_16(455);
+emit_16(522);
+emit_16(456);
+emit_16(523);
+emit_16(457);
+emit_16(523);
+emit_16(456);
+emit_16(523);
+emit_16(457);
+emit_16(524);
+emit_16(458);
+emit_16(524);
+emit_16(457);
+emit_16(524);
+emit_16(458);
+emit_16(525);
+emit_16(459);
+emit_16(525);
+emit_16(458);
+emit_16(525);
+emit_16(459);
+emit_16(526);
+emit_16(460);
+emit_16(526);
+emit_16(459);
+emit_16(526);
+emit_16(460);
+emit_16(527);
+emit_16(461);
+emit_16(527);
+emit_16(460);
+emit_16(528);
+emit_16(462);
+emit_16(529);
+emit_16(463);
+emit_16(529);
+emit_16(462);
+emit_16(529);
+emit_16(463);
+emit_16(530);
+emit_16(464);
+emit_16(530);
+emit_16(463);
+emit_16(530);
+emit_16(464);
+emit_16(531);
+emit_16(465);
+emit_16(531);
+emit_16(464);
+emit_16(531);
+emit_16(465);
+emit_16(532);
+emit_16(466);
+emit_16(532);
+emit_16(465);
+emit_16(532);
+emit_16(466);
+emit_16(533);
+emit_16(467);
+emit_16(533);
+emit_16(466);
+emit_16(533);
+emit_16(467);
+emit_16(534);
+emit_16(468);
+emit_16(534);
+emit_16(467);
+emit_16(534);
+emit_16(468);
+emit_16(535);
+emit_16(469);
+emit_16(535);
+emit_16(468);
+emit_16(535);
+emit_16(469);
+emit_16(536);
+emit_16(470);
+emit_16(536);
+emit_16(469);
+emit_16(536);
+emit_16(470);
+emit_16(537);
+emit_16(471);
+emit_16(537);
+emit_16(470);
+emit_16(537);
+emit_16(471);
+emit_16(538);
+emit_16(472);
+emit_16(538);
+emit_16(471);
+emit_16(538);
+emit_16(472);
+emit_16(539);
+emit_16(473);
+emit_16(539);
+emit_16(472);
+emit_16(539);
+emit_16(473);
+emit_16(540);
+emit_16(474);
+emit_16(540);
+emit_16(473);
+emit_16(540);
+emit_16(474);
+emit_16(541);
+emit_16(475);
+emit_16(541);
+emit_16(474);
+emit_16(541);
+emit_16(475);
+emit_16(542);
+emit_16(476);
+emit_16(542);
+emit_16(475);
+emit_16(542);
+emit_16(476);
+emit_16(543);
+emit_16(477);
+emit_16(543);
+emit_16(476);
+emit_16(543);
+emit_16(477);
+emit_16(544);
+emit_16(478);
+emit_16(544);
+emit_16(477);
+emit_16(544);
+emit_16(478);
+emit_16(545);
+emit_16(479);
+emit_16(545);
+emit_16(478);
+emit_16(545);
+emit_16(479);
+emit_16(546);
+emit_16(480);
+emit_16(546);
+emit_16(479);
+emit_16(546);
+emit_16(480);
+emit_16(547);
+emit_16(481);
+emit_16(547);
+emit_16(480);
+emit_16(547);
+emit_16(481);
+emit_16(548);
+emit_16(482);
+emit_16(548);
+emit_16(481);
+emit_16(548);
+emit_16(482);
+emit_16(549);
+emit_16(483);
+emit_16(549);
+emit_16(482);
+emit_16(549);
+emit_16(483);
+emit_16(550);
+emit_16(484);
+emit_16(550);
+emit_16(483);
+emit_16(550);
+emit_16(484);
+emit_16(551);
+emit_16(485);
+emit_16(551);
+emit_16(484);
+emit_16(551);
+emit_16(485);
+emit_16(552);
+emit_16(486);
+emit_16(552);
+emit_16(485);
+emit_16(552);
+emit_16(486);
+emit_16(553);
+emit_16(487);
+emit_16(553);
+emit_16(486);
+emit_16(553);
+emit_16(487);
+emit_16(554);
+emit_16(488);
+emit_16(554);
+emit_16(487);
+emit_16(554);
+emit_16(488);
+emit_16(555);
+emit_16(489);
+emit_16(555);
+emit_16(488);
+emit_16(555);
+emit_16(489);
+emit_16(556);
+emit_16(490);
+emit_16(556);
+emit_16(489);
+emit_16(556);
+emit_16(490);
+emit_16(557);
+emit_16(491);
+emit_16(557);
+emit_16(490);
+emit_16(557);
+emit_16(491);
+emit_16(558);
+emit_16(492);
+emit_16(558);
+emit_16(491);
+emit_16(558);
+emit_16(492);
+emit_16(559);
+emit_16(493);
+emit_16(559);
+emit_16(492);
+emit_16(559);
+emit_16(493);
+emit_16(560);
+emit_16(494);
+emit_16(560);
+emit_16(493);
+emit_16(560);
+emit_16(494);
+emit_16(561);
+emit_16(495);
+emit_16(561);
+emit_16(494);
+emit_16(561);
+emit_16(495);
+emit_16(562);
+emit_16(496);
+emit_16(562);
+emit_16(495);
+emit_16(562);
+emit_16(496);
+emit_16(563);
+emit_16(497);
+emit_16(563);
+emit_16(496);
+emit_16(563);
+emit_16(497);
+emit_16(564);
+emit_16(498);
+emit_16(564);
+emit_16(497);
+emit_16(564);
+emit_16(498);
+emit_16(565);
+emit_16(499);
+emit_16(565);
+emit_16(498);
+emit_16(565);
+emit_16(499);
+emit_16(566);
+emit_16(500);
+emit_16(566);
+emit_16(499);
+emit_16(566);
+emit_16(500);
+emit_16(567);
+emit_16(501);
+emit_16(567);
+emit_16(500);
+emit_16(567);
+emit_16(501);
+emit_16(568);
+emit_16(502);
+emit_16(568);
+emit_16(501);
+emit_16(568);
+emit_16(502);
+emit_16(569);
+emit_16(503);
+emit_16(569);
+emit_16(502);
+emit_16(569);
+emit_16(503);
+emit_16(570);
+emit_16(504);
+emit_16(570);
+emit_16(503);
+emit_16(570);
+emit_16(504);
+emit_16(571);
+emit_16(505);
+emit_16(571);
+emit_16(504);
+emit_16(571);
+emit_16(505);
+emit_16(572);
+emit_16(506);
+emit_16(572);
+emit_16(505);
+emit_16(572);
+emit_16(506);
+emit_16(573);
+emit_16(507);
+emit_16(573);
+emit_16(506);
+emit_16(573);
+emit_16(507);
+emit_16(574);
+emit_16(508);
+emit_16(574);
+emit_16(507);
+emit_16(574);
+emit_16(508);
+emit_16(575);
+emit_16(509);
+emit_16(575);
+emit_16(508);
+emit_16(575);
+emit_16(509);
+emit_16(576);
+emit_16(510);
+emit_16(576);
+emit_16(509);
+emit_16(576);
+emit_16(510);
+emit_16(577);
+emit_16(511);
+emit_16(577);
+emit_16(510);
+emit_16(577);
+emit_16(511);
+emit_16(578);
+emit_16(512);
+emit_16(578);
+emit_16(511);
+emit_16(578);
+emit_16(512);
+emit_16(579);
+emit_16(513);
+emit_16(579);
+emit_16(512);
+emit_16(579);
+emit_16(513);
+emit_16(580);
+emit_16(514);
+emit_16(580);
+emit_16(513);
+emit_16(580);
+emit_16(514);
+emit_16(581);
+emit_16(515);
+emit_16(581);
+emit_16(514);
+emit_16(581);
+emit_16(515);
+emit_16(582);
+emit_16(516);
+emit_16(582);
+emit_16(515);
+emit_16(582);
+emit_16(516);
+emit_16(583);
+emit_16(517);
+emit_16(583);
+emit_16(516);
+emit_16(583);
+emit_16(517);
+emit_16(584);
+emit_16(518);
+emit_16(584);
+emit_16(517);
+emit_16(584);
+emit_16(518);
+emit_16(585);
+emit_16(519);
+emit_16(585);
+emit_16(518);
+emit_16(585);
+emit_16(519);
+emit_16(586);
+emit_16(520);
+emit_16(586);
+emit_16(519);
+emit_16(586);
+emit_16(520);
+emit_16(587);
+emit_16(521);
+emit_16(587);
+emit_16(520);
+emit_16(587);
+emit_16(521);
+emit_16(588);
+emit_16(522);
+emit_16(588);
+emit_16(521);
+emit_16(588);
+emit_16(522);
+emit_16(589);
+emit_16(523);
+emit_16(589);
+emit_16(522);
+emit_16(589);
+emit_16(523);
+emit_16(590);
+emit_16(524);
+emit_16(590);
+emit_16(523);
+emit_16(590);
+emit_16(524);
+emit_16(591);
+emit_16(525);
+emit_16(591);
+emit_16(524);
+emit_16(591);
+emit_16(525);
+emit_16(592);
+emit_16(526);
+emit_16(592);
+emit_16(525);
+emit_16(592);
+emit_16(526);
+emit_16(593);
+emit_16(527);
+emit_16(593);
+emit_16(526);
+emit_16(594);
+emit_16(528);
+emit_16(595);
+emit_16(529);
+emit_16(595);
+emit_16(528);
+emit_16(595);
+emit_16(529);
+emit_16(596);
+emit_16(530);
+emit_16(596);
+emit_16(529);
+emit_16(596);
+emit_16(530);
+emit_16(597);
+emit_16(531);
+emit_16(597);
+emit_16(530);
+emit_16(597);
+emit_16(531);
+emit_16(598);
+emit_16(532);
+emit_16(598);
+emit_16(531);
+emit_16(598);
+emit_16(532);
+emit_16(599);
+emit_16(533);
+emit_16(599);
+emit_16(532);
+emit_16(599);
+emit_16(533);
+emit_16(600);
+emit_16(534);
+emit_16(600);
+emit_16(533);
+emit_16(600);
+emit_16(534);
+emit_16(601);
+emit_16(535);
+emit_16(601);
+emit_16(534);
+emit_16(601);
+emit_16(535);
+emit_16(602);
+emit_16(536);
+emit_16(602);
+emit_16(535);
+emit_16(602);
+emit_16(536);
+emit_16(603);
+emit_16(537);
+emit_16(603);
+emit_16(536);
+emit_16(603);
+emit_16(537);
+emit_16(604);
+emit_16(538);
+emit_16(604);
+emit_16(537);
+emit_16(604);
+emit_16(538);
+emit_16(605);
+emit_16(539);
+emit_16(605);
+emit_16(538);
+emit_16(605);
+emit_16(539);
+emit_16(606);
+emit_16(540);
+emit_16(606);
+emit_16(539);
+emit_16(606);
+emit_16(540);
+emit_16(607);
+emit_16(541);
+emit_16(607);
+emit_16(540);
+emit_16(607);
+emit_16(541);
+emit_16(608);
+emit_16(542);
+emit_16(608);
+emit_16(541);
+emit_16(608);
+emit_16(542);
+emit_16(609);
+emit_16(543);
+emit_16(609);
+emit_16(542);
+emit_16(609);
+emit_16(543);
+emit_16(610);
+emit_16(544);
+emit_16(610);
+emit_16(543);
+emit_16(610);
+emit_16(544);
+emit_16(611);
+emit_16(545);
+emit_16(611);
+emit_16(544);
+emit_16(611);
+emit_16(545);
+emit_16(612);
+emit_16(546);
+emit_16(612);
+emit_16(545);
+emit_16(612);
+emit_16(546);
+emit_16(613);
+emit_16(547);
+emit_16(613);
+emit_16(546);
+emit_16(613);
+emit_16(547);
+emit_16(614);
+emit_16(548);
+emit_16(614);
+emit_16(547);
+emit_16(614);
+emit_16(548);
+emit_16(615);
+emit_16(549);
+emit_16(615);
+emit_16(548);
+emit_16(615);
+emit_16(549);
+emit_16(616);
+emit_16(550);
+emit_16(616);
+emit_16(549);
+emit_16(616);
+emit_16(550);
+emit_16(617);
+emit_16(551);
+emit_16(617);
+emit_16(550);
+emit_16(617);
+emit_16(551);
+emit_16(618);
+emit_16(552);
+emit_16(618);
+emit_16(551);
+emit_16(618);
+emit_16(552);
+emit_16(619);
+emit_16(553);
+emit_16(619);
+emit_16(552);
+emit_16(619);
+emit_16(553);
+emit_16(620);
+emit_16(554);
+emit_16(620);
+emit_16(553);
+emit_16(620);
+emit_16(554);
+emit_16(621);
+emit_16(555);
+emit_16(621);
+emit_16(554);
+emit_16(621);
+emit_16(555);
+emit_16(622);
+emit_16(556);
+emit_16(622);
+emit_16(555);
+emit_16(622);
+emit_16(556);
+emit_16(623);
+emit_16(557);
+emit_16(623);
+emit_16(556);
+emit_16(623);
+emit_16(557);
+emit_16(624);
+emit_16(558);
+emit_16(624);
+emit_16(557);
+emit_16(624);
+emit_16(558);
+emit_16(625);
+emit_16(559);
+emit_16(625);
+emit_16(558);
+emit_16(625);
+emit_16(559);
+emit_16(626);
+emit_16(560);
+emit_16(626);
+emit_16(559);
+emit_16(626);
+emit_16(560);
+emit_16(627);
+emit_16(561);
+emit_16(627);
+emit_16(560);
+emit_16(627);
+emit_16(561);
+emit_16(628);
+emit_16(562);
+emit_16(628);
+emit_16(561);
+emit_16(628);
+emit_16(562);
+emit_16(629);
+emit_16(563);
+emit_16(629);
+emit_16(562);
+emit_16(629);
+emit_16(563);
+emit_16(630);
+emit_16(564);
+emit_16(630);
+emit_16(563);
+emit_16(630);
+emit_16(564);
+emit_16(631);
+emit_16(565);
+emit_16(631);
+emit_16(564);
+emit_16(631);
+emit_16(565);
+emit_16(632);
+emit_16(566);
+emit_16(632);
+emit_16(565);
+emit_16(632);
+emit_16(566);
+emit_16(633);
+emit_16(567);
+emit_16(633);
+emit_16(566);
+emit_16(633);
+emit_16(567);
+emit_16(634);
+emit_16(568);
+emit_16(634);
+emit_16(567);
+emit_16(634);
+emit_16(568);
+emit_16(635);
+emit_16(569);
+emit_16(635);
+emit_16(568);
+emit_16(635);
+emit_16(569);
+emit_16(636);
+emit_16(570);
+emit_16(636);
+emit_16(569);
+emit_16(636);
+emit_16(570);
+emit_16(637);
+emit_16(571);
+emit_16(637);
+emit_16(570);
+emit_16(637);
+emit_16(571);
+emit_16(638);
+emit_16(572);
+emit_16(638);
+emit_16(571);
+emit_16(638);
+emit_16(572);
+emit_16(639);
+emit_16(573);
+emit_16(639);
+emit_16(572);
+emit_16(639);
+emit_16(573);
+emit_16(640);
+emit_16(574);
+emit_16(640);
+emit_16(573);
+emit_16(640);
+emit_16(574);
+emit_16(641);
+emit_16(575);
+emit_16(641);
+emit_16(574);
+emit_16(641);
+emit_16(575);
+emit_16(642);
+emit_16(576);
+emit_16(642);
+emit_16(575);
+emit_16(642);
+emit_16(576);
+emit_16(643);
+emit_16(577);
+emit_16(643);
+emit_16(576);
+emit_16(643);
+emit_16(577);
+emit_16(644);
+emit_16(578);
+emit_16(644);
+emit_16(577);
+emit_16(644);
+emit_16(578);
+emit_16(645);
+emit_16(579);
+emit_16(645);
+emit_16(578);
+emit_16(645);
+emit_16(579);
+emit_16(646);
+emit_16(580);
+emit_16(646);
+emit_16(579);
+emit_16(646);
+emit_16(580);
+emit_16(647);
+emit_16(581);
+emit_16(647);
+emit_16(580);
+emit_16(647);
+emit_16(581);
+emit_16(648);
+emit_16(582);
+emit_16(648);
+emit_16(581);
+emit_16(648);
+emit_16(582);
+emit_16(649);
+emit_16(583);
+emit_16(649);
+emit_16(582);
+emit_16(649);
+emit_16(583);
+emit_16(650);
+emit_16(584);
+emit_16(650);
+emit_16(583);
+emit_16(650);
+emit_16(584);
+emit_16(651);
+emit_16(585);
+emit_16(651);
+emit_16(584);
+emit_16(651);
+emit_16(585);
+emit_16(652);
+emit_16(586);
+emit_16(652);
+emit_16(585);
+emit_16(652);
+emit_16(586);
+emit_16(653);
+emit_16(587);
+emit_16(653);
+emit_16(586);
+emit_16(653);
+emit_16(587);
+emit_16(654);
+emit_16(588);
+emit_16(654);
+emit_16(587);
+emit_16(654);
+emit_16(588);
+emit_16(655);
+emit_16(589);
+emit_16(655);
+emit_16(588);
+emit_16(655);
+emit_16(589);
+emit_16(656);
+emit_16(590);
+emit_16(656);
+emit_16(589);
+emit_16(656);
+emit_16(590);
+emit_16(657);
+emit_16(591);
+emit_16(657);
+emit_16(590);
+emit_16(657);
+emit_16(591);
+emit_16(658);
+emit_16(592);
+emit_16(658);
+emit_16(591);
+emit_16(658);
+emit_16(592);
+emit_16(659);
+emit_16(593);
+emit_16(659);
+emit_16(592);
+emit_16(660);
+emit_16(594);
+emit_16(661);
+emit_16(595);
+emit_16(661);
+emit_16(594);
+emit_16(661);
+emit_16(595);
+emit_16(662);
+emit_16(596);
+emit_16(662);
+emit_16(595);
+emit_16(662);
+emit_16(596);
+emit_16(663);
+emit_16(597);
+emit_16(663);
+emit_16(596);
+emit_16(663);
+emit_16(597);
+emit_16(664);
+emit_16(598);
+emit_16(664);
+emit_16(597);
+emit_16(664);
+emit_16(598);
+emit_16(665);
+emit_16(599);
+emit_16(665);
+emit_16(598);
+emit_16(665);
+emit_16(599);
+emit_16(666);
+emit_16(600);
+emit_16(666);
+emit_16(599);
+emit_16(666);
+emit_16(600);
+emit_16(667);
+emit_16(601);
+emit_16(667);
+emit_16(600);
+emit_16(667);
+emit_16(601);
+emit_16(668);
+emit_16(602);
+emit_16(668);
+emit_16(601);
+emit_16(668);
+emit_16(602);
+emit_16(669);
+emit_16(603);
+emit_16(669);
+emit_16(602);
+emit_16(669);
+emit_16(603);
+emit_16(670);
+emit_16(604);
+emit_16(670);
+emit_16(603);
+emit_16(670);
+emit_16(604);
+emit_16(671);
+emit_16(605);
+emit_16(671);
+emit_16(604);
+emit_16(671);
+emit_16(605);
+emit_16(672);
+emit_16(606);
+emit_16(672);
+emit_16(605);
+emit_16(672);
+emit_16(606);
+emit_16(673);
+emit_16(607);
+emit_16(673);
+emit_16(606);
+emit_16(673);
+emit_16(607);
+emit_16(674);
+emit_16(608);
+emit_16(674);
+emit_16(607);
+emit_16(674);
+emit_16(608);
+emit_16(675);
+emit_16(609);
+emit_16(675);
+emit_16(608);
+emit_16(675);
+emit_16(609);
+emit_16(676);
+emit_16(610);
+emit_16(676);
+emit_16(609);
+emit_16(676);
+emit_16(610);
+emit_16(677);
+emit_16(611);
+emit_16(677);
+emit_16(610);
+emit_16(677);
+emit_16(611);
+emit_16(678);
+emit_16(612);
+emit_16(678);
+emit_16(611);
+emit_16(678);
+emit_16(612);
+emit_16(679);
+emit_16(613);
+emit_16(679);
+emit_16(612);
+emit_16(679);
+emit_16(613);
+emit_16(680);
+emit_16(614);
+emit_16(680);
+emit_16(613);
+emit_16(680);
+emit_16(614);
+emit_16(681);
+emit_16(615);
+emit_16(681);
+emit_16(614);
+emit_16(681);
+emit_16(615);
+emit_16(682);
+emit_16(616);
+emit_16(682);
+emit_16(615);
+emit_16(682);
+emit_16(616);
+emit_16(683);
+emit_16(617);
+emit_16(683);
+emit_16(616);
+emit_16(683);
+emit_16(617);
+emit_16(684);
+emit_16(618);
+emit_16(684);
+emit_16(617);
+emit_16(684);
+emit_16(618);
+emit_16(685);
+emit_16(619);
+emit_16(685);
+emit_16(618);
+emit_16(685);
+emit_16(619);
+emit_16(686);
+emit_16(620);
+emit_16(686);
+emit_16(619);
+emit_16(686);
+emit_16(620);
+emit_16(687);
+emit_16(621);
+emit_16(687);
+emit_16(620);
+emit_16(687);
+emit_16(621);
+emit_16(688);
+emit_16(622);
+emit_16(688);
+emit_16(621);
+emit_16(688);
+emit_16(622);
+emit_16(689);
+emit_16(623);
+emit_16(689);
+emit_16(622);
+emit_16(689);
+emit_16(623);
+emit_16(690);
+emit_16(624);
+emit_16(690);
+emit_16(623);
+emit_16(690);
+emit_16(624);
+emit_16(691);
+emit_16(625);
+emit_16(691);
+emit_16(624);
+emit_16(691);
+emit_16(625);
+emit_16(692);
+emit_16(626);
+emit_16(692);
+emit_16(625);
+emit_16(692);
+emit_16(626);
+emit_16(693);
+emit_16(627);
+emit_16(693);
+emit_16(626);
+emit_16(693);
+emit_16(627);
+emit_16(694);
+emit_16(628);
+emit_16(694);
+emit_16(627);
+emit_16(694);
+emit_16(628);
+emit_16(695);
+emit_16(629);
+emit_16(695);
+emit_16(628);
+emit_16(695);
+emit_16(629);
+emit_16(696);
+emit_16(630);
+emit_16(696);
+emit_16(629);
+emit_16(696);
+emit_16(630);
+emit_16(697);
+emit_16(631);
+emit_16(697);
+emit_16(630);
+emit_16(697);
+emit_16(631);
+emit_16(698);
+emit_16(632);
+emit_16(698);
+emit_16(631);
+emit_16(698);
+emit_16(632);
+emit_16(699);
+emit_16(633);
+emit_16(699);
+emit_16(632);
+emit_16(699);
+emit_16(633);
+emit_16(700);
+emit_16(634);
+emit_16(700);
+emit_16(633);
+emit_16(700);
+emit_16(634);
+emit_16(701);
+emit_16(635);
+emit_16(701);
+emit_16(634);
+emit_16(701);
+emit_16(635);
+emit_16(702);
+emit_16(636);
+emit_16(702);
+emit_16(635);
+emit_16(702);
+emit_16(636);
+emit_16(703);
+emit_16(637);
+emit_16(703);
+emit_16(636);
+emit_16(703);
+emit_16(637);
+emit_16(704);
+emit_16(638);
+emit_16(704);
+emit_16(637);
+emit_16(704);
+emit_16(638);
+emit_16(705);
+emit_16(639);
+emit_16(705);
+emit_16(638);
+emit_16(705);
+emit_16(639);
+emit_16(706);
+emit_16(640);
+emit_16(706);
+emit_16(639);
+emit_16(706);
+emit_16(640);
+emit_16(707);
+emit_16(641);
+emit_16(707);
+emit_16(640);
+emit_16(707);
+emit_16(641);
+emit_16(708);
+emit_16(642);
+emit_16(708);
+emit_16(641);
+emit_16(708);
+emit_16(642);
+emit_16(709);
+emit_16(643);
+emit_16(709);
+emit_16(642);
+emit_16(709);
+emit_16(643);
+emit_16(710);
+emit_16(644);
+emit_16(710);
+emit_16(643);
+emit_16(710);
+emit_16(644);
+emit_16(711);
+emit_16(645);
+emit_16(711);
+emit_16(644);
+emit_16(711);
+emit_16(645);
+emit_16(712);
+emit_16(646);
+emit_16(712);
+emit_16(645);
+emit_16(712);
+emit_16(646);
+emit_16(713);
+emit_16(647);
+emit_16(713);
+emit_16(646);
+emit_16(713);
+emit_16(647);
+emit_16(714);
+emit_16(648);
+emit_16(714);
+emit_16(647);
+emit_16(714);
+emit_16(648);
+emit_16(715);
+emit_16(649);
+emit_16(715);
+emit_16(648);
+emit_16(715);
+emit_16(649);
+emit_16(716);
+emit_16(650);
+emit_16(716);
+emit_16(649);
+emit_16(716);
+emit_16(650);
+emit_16(717);
+emit_16(651);
+emit_16(717);
+emit_16(650);
+emit_16(717);
+emit_16(651);
+emit_16(718);
+emit_16(652);
+emit_16(718);
+emit_16(651);
+emit_16(718);
+emit_16(652);
+emit_16(719);
+emit_16(653);
+emit_16(719);
+emit_16(652);
+emit_16(719);
+emit_16(653);
+emit_16(720);
+emit_16(654);
+emit_16(720);
+emit_16(653);
+emit_16(720);
+emit_16(654);
+emit_16(721);
+emit_16(655);
+emit_16(721);
+emit_16(654);
+emit_16(721);
+emit_16(655);
+emit_16(722);
+emit_16(656);
+emit_16(722);
+emit_16(655);
+emit_16(722);
+emit_16(656);
+emit_16(723);
+emit_16(657);
+emit_16(723);
+emit_16(656);
+emit_16(723);
+emit_16(657);
+emit_16(724);
+emit_16(658);
+emit_16(724);
+emit_16(657);
+emit_16(724);
+emit_16(658);
+emit_16(725);
+emit_16(659);
+emit_16(725);
+emit_16(658);
+emit_16(726);
+emit_16(660);
+emit_16(727);
+emit_16(661);
+emit_16(727);
+emit_16(660);
+emit_16(727);
+emit_16(661);
+emit_16(728);
+emit_16(662);
+emit_16(728);
+emit_16(661);
+emit_16(728);
+emit_16(662);
+emit_16(729);
+emit_16(663);
+emit_16(729);
+emit_16(662);
+emit_16(729);
+emit_16(663);
+emit_16(730);
+emit_16(664);
+emit_16(730);
+emit_16(663);
+emit_16(730);
+emit_16(664);
+emit_16(731);
+emit_16(665);
+emit_16(731);
+emit_16(664);
+emit_16(731);
+emit_16(665);
+emit_16(732);
+emit_16(666);
+emit_16(732);
+emit_16(665);
+emit_16(732);
+emit_16(666);
+emit_16(733);
+emit_16(667);
+emit_16(733);
+emit_16(666);
+emit_16(733);
+emit_16(667);
+emit_16(734);
+emit_16(668);
+emit_16(734);
+emit_16(667);
+emit_16(734);
+emit_16(668);
+emit_16(735);
+emit_16(669);
+emit_16(735);
+emit_16(668);
+emit_16(735);
+emit_16(669);
+emit_16(736);
+emit_16(670);
+emit_16(736);
+emit_16(669);
+emit_16(736);
+emit_16(670);
+emit_16(737);
+emit_16(671);
+emit_16(737);
+emit_16(670);
+emit_16(737);
+emit_16(671);
+emit_16(738);
+emit_16(672);
+emit_16(738);
+emit_16(671);
+emit_16(738);
+emit_16(672);
+emit_16(739);
+emit_16(673);
+emit_16(739);
+emit_16(672);
+emit_16(739);
+emit_16(673);
+emit_16(740);
+emit_16(674);
+emit_16(740);
+emit_16(673);
+emit_16(740);
+emit_16(674);
+emit_16(741);
+emit_16(675);
+emit_16(741);
+emit_16(674);
+emit_16(741);
+emit_16(675);
+emit_16(742);
+emit_16(676);
+emit_16(742);
+emit_16(675);
+emit_16(742);
+emit_16(676);
+emit_16(743);
+emit_16(677);
+emit_16(743);
+emit_16(676);
+emit_16(743);
+emit_16(677);
+emit_16(744);
+emit_16(678);
+emit_16(744);
+emit_16(677);
+emit_16(744);
+emit_16(678);
+emit_16(745);
+emit_16(679);
+emit_16(745);
+emit_16(678);
+emit_16(745);
+emit_16(679);
+emit_16(746);
+emit_16(680);
+emit_16(746);
+emit_16(679);
+emit_16(746);
+emit_16(680);
+emit_16(747);
+emit_16(681);
+emit_16(747);
+emit_16(680);
+emit_16(747);
+emit_16(681);
+emit_16(748);
+emit_16(682);
+emit_16(748);
+emit_16(681);
+emit_16(748);
+emit_16(682);
+emit_16(749);
+emit_16(683);
+emit_16(749);
+emit_16(682);
+emit_16(749);
+emit_16(683);
+emit_16(750);
+emit_16(684);
+emit_16(750);
+emit_16(683);
+emit_16(750);
+emit_16(684);
+emit_16(751);
+emit_16(685);
+emit_16(751);
+emit_16(684);
+emit_16(751);
+emit_16(685);
+emit_16(752);
+emit_16(686);
+emit_16(752);
+emit_16(685);
+emit_16(752);
+emit_16(686);
+emit_16(753);
+emit_16(687);
+emit_16(753);
+emit_16(686);
+emit_16(753);
+emit_16(687);
+emit_16(754);
+emit_16(688);
+emit_16(754);
+emit_16(687);
+emit_16(754);
+emit_16(688);
+emit_16(755);
+emit_16(689);
+emit_16(755);
+emit_16(688);
+emit_16(755);
+emit_16(689);
+emit_16(756);
+emit_16(690);
+emit_16(756);
+emit_16(689);
+emit_16(756);
+emit_16(690);
+emit_16(757);
+emit_16(691);
+emit_16(757);
+emit_16(690);
+emit_16(757);
+emit_16(691);
+emit_16(758);
+emit_16(692);
+emit_16(758);
+emit_16(691);
+emit_16(758);
+emit_16(692);
+emit_16(759);
+emit_16(693);
+emit_16(759);
+emit_16(692);
+emit_16(759);
+emit_16(693);
+emit_16(760);
+emit_16(694);
+emit_16(760);
+emit_16(693);
+emit_16(760);
+emit_16(694);
+emit_16(761);
+emit_16(695);
+emit_16(761);
+emit_16(694);
+emit_16(761);
+emit_16(695);
+emit_16(762);
+emit_16(696);
+emit_16(762);
+emit_16(695);
+emit_16(762);
+emit_16(696);
+emit_16(763);
+emit_16(697);
+emit_16(763);
+emit_16(696);
+emit_16(763);
+emit_16(697);
+emit_16(764);
+emit_16(698);
+emit_16(764);
+emit_16(697);
+emit_16(764);
+emit_16(698);
+emit_16(765);
+emit_16(699);
+emit_16(765);
+emit_16(698);
+emit_16(765);
+emit_16(699);
+emit_16(766);
+emit_16(700);
+emit_16(766);
+emit_16(699);
+emit_16(766);
+emit_16(700);
+emit_16(767);
+emit_16(701);
+emit_16(767);
+emit_16(700);
+emit_16(767);
+emit_16(701);
+emit_16(768);
+emit_16(702);
+emit_16(768);
+emit_16(701);
+emit_16(768);
+emit_16(702);
+emit_16(769);
+emit_16(703);
+emit_16(769);
+emit_16(702);
+emit_16(769);
+emit_16(703);
+emit_16(770);
+emit_16(704);
+emit_16(770);
+emit_16(703);
+emit_16(770);
+emit_16(704);
+emit_16(771);
+emit_16(705);
+emit_16(771);
+emit_16(704);
+emit_16(771);
+emit_16(705);
+emit_16(772);
+emit_16(706);
+emit_16(772);
+emit_16(705);
+emit_16(772);
+emit_16(706);
+emit_16(773);
+emit_16(707);
+emit_16(773);
+emit_16(706);
+emit_16(773);
+emit_16(707);
+emit_16(774);
+emit_16(708);
+emit_16(774);
+emit_16(707);
+emit_16(774);
+emit_16(708);
+emit_16(775);
+emit_16(709);
+emit_16(775);
+emit_16(708);
+emit_16(775);
+emit_16(709);
+emit_16(776);
+emit_16(710);
+emit_16(776);
+emit_16(709);
+emit_16(776);
+emit_16(710);
+emit_16(777);
+emit_16(711);
+emit_16(777);
+emit_16(710);
+emit_16(777);
+emit_16(711);
+emit_16(778);
+emit_16(712);
+emit_16(778);
+emit_16(711);
+emit_16(778);
+emit_16(712);
+emit_16(779);
+emit_16(713);
+emit_16(779);
+emit_16(712);
+emit_16(779);
+emit_16(713);
+emit_16(780);
+emit_16(714);
+emit_16(780);
+emit_16(713);
+emit_16(780);
+emit_16(714);
+emit_16(781);
+emit_16(715);
+emit_16(781);
+emit_16(714);
+emit_16(781);
+emit_16(715);
+emit_16(782);
+emit_16(716);
+emit_16(782);
+emit_16(715);
+emit_16(782);
+emit_16(716);
+emit_16(783);
+emit_16(717);
+emit_16(783);
+emit_16(716);
+emit_16(783);
+emit_16(717);
+emit_16(784);
+emit_16(718);
+emit_16(784);
+emit_16(717);
+emit_16(784);
+emit_16(718);
+emit_16(785);
+emit_16(719);
+emit_16(785);
+emit_16(718);
+emit_16(785);
+emit_16(719);
+emit_16(786);
+emit_16(720);
+emit_16(786);
+emit_16(719);
+emit_16(786);
+emit_16(720);
+emit_16(787);
+emit_16(721);
+emit_16(787);
+emit_16(720);
+emit_16(787);
+emit_16(721);
+emit_16(788);
+emit_16(722);
+emit_16(788);
+emit_16(721);
+emit_16(788);
+emit_16(722);
+emit_16(789);
+emit_16(723);
+emit_16(789);
+emit_16(722);
+emit_16(789);
+emit_16(723);
+emit_16(790);
+emit_16(724);
+emit_16(790);
+emit_16(723);
+emit_16(790);
+emit_16(724);
+emit_16(791);
+emit_16(725);
+emit_16(791);
+emit_16(724);
+emit_16(792);
+emit_16(726);
+emit_16(793);
+emit_16(727);
+emit_16(793);
+emit_16(726);
+emit_16(793);
+emit_16(727);
+emit_16(794);
+emit_16(728);
+emit_16(794);
+emit_16(727);
+emit_16(794);
+emit_16(728);
+emit_16(795);
+emit_16(729);
+emit_16(795);
+emit_16(728);
+emit_16(795);
+emit_16(729);
+emit_16(796);
+emit_16(730);
+emit_16(796);
+emit_16(729);
+emit_16(796);
+emit_16(730);
+emit_16(797);
+emit_16(731);
+emit_16(797);
+emit_16(730);
+emit_16(797);
+emit_16(731);
+emit_16(798);
+emit_16(732);
+emit_16(798);
+emit_16(731);
+emit_16(798);
+emit_16(732);
+emit_16(799);
+emit_16(733);
+emit_16(799);
+emit_16(732);
+emit_16(799);
+emit_16(733);
+emit_16(800);
+emit_16(734);
+emit_16(800);
+emit_16(733);
+emit_16(800);
+emit_16(734);
+emit_16(801);
+emit_16(735);
+emit_16(801);
+emit_16(734);
+emit_16(801);
+emit_16(735);
+emit_16(802);
+emit_16(736);
+emit_16(802);
+emit_16(735);
+emit_16(802);
+emit_16(736);
+emit_16(803);
+emit_16(737);
+emit_16(803);
+emit_16(736);
+emit_16(803);
+emit_16(737);
+emit_16(804);
+emit_16(738);
+emit_16(804);
+emit_16(737);
+emit_16(804);
+emit_16(738);
+emit_16(805);
+emit_16(739);
+emit_16(805);
+emit_16(738);
+emit_16(805);
+emit_16(739);
+emit_16(806);
+emit_16(740);
+emit_16(806);
+emit_16(739);
+emit_16(806);
+emit_16(740);
+emit_16(807);
+emit_16(741);
+emit_16(807);
+emit_16(740);
+emit_16(807);
+emit_16(741);
+emit_16(808);
+emit_16(742);
+emit_16(808);
+emit_16(741);
+emit_16(808);
+emit_16(742);
+emit_16(809);
+emit_16(743);
+emit_16(809);
+emit_16(742);
+emit_16(809);
+emit_16(743);
+emit_16(810);
+emit_16(744);
+emit_16(810);
+emit_16(743);
+emit_16(810);
+emit_16(744);
+emit_16(811);
+emit_16(745);
+emit_16(811);
+emit_16(744);
+emit_16(811);
+emit_16(745);
+emit_16(812);
+emit_16(746);
+emit_16(812);
+emit_16(745);
+emit_16(812);
+emit_16(746);
+emit_16(813);
+emit_16(747);
+emit_16(813);
+emit_16(746);
+emit_16(813);
+emit_16(747);
+emit_16(814);
+emit_16(748);
+emit_16(814);
+emit_16(747);
+emit_16(814);
+emit_16(748);
+emit_16(815);
+emit_16(749);
+emit_16(815);
+emit_16(748);
+emit_16(815);
+emit_16(749);
+emit_16(816);
+emit_16(750);
+emit_16(816);
+emit_16(749);
+emit_16(816);
+emit_16(750);
+emit_16(817);
+emit_16(751);
+emit_16(817);
+emit_16(750);
+emit_16(817);
+emit_16(751);
+emit_16(818);
+emit_16(752);
+emit_16(818);
+emit_16(751);
+emit_16(818);
+emit_16(752);
+emit_16(819);
+emit_16(753);
+emit_16(819);
+emit_16(752);
+emit_16(819);
+emit_16(753);
+emit_16(820);
+emit_16(754);
+emit_16(820);
+emit_16(753);
+emit_16(820);
+emit_16(754);
+emit_16(821);
+emit_16(755);
+emit_16(821);
+emit_16(754);
+emit_16(821);
+emit_16(755);
+emit_16(822);
+emit_16(756);
+emit_16(822);
+emit_16(755);
+emit_16(822);
+emit_16(756);
+emit_16(823);
+emit_16(757);
+emit_16(823);
+emit_16(756);
+emit_16(823);
+emit_16(757);
+emit_16(824);
+emit_16(758);
+emit_16(824);
+emit_16(757);
+emit_16(824);
+emit_16(758);
+emit_16(825);
+emit_16(759);
+emit_16(825);
+emit_16(758);
+emit_16(825);
+emit_16(759);
+emit_16(826);
+emit_16(760);
+emit_16(826);
+emit_16(759);
+emit_16(826);
+emit_16(760);
+emit_16(827);
+emit_16(761);
+emit_16(827);
+emit_16(760);
+emit_16(827);
+emit_16(761);
+emit_16(828);
+emit_16(762);
+emit_16(828);
+emit_16(761);
+emit_16(828);
+emit_16(762);
+emit_16(829);
+emit_16(763);
+emit_16(829);
+emit_16(762);
+emit_16(829);
+emit_16(763);
+emit_16(830);
+emit_16(764);
+emit_16(830);
+emit_16(763);
+emit_16(830);
+emit_16(764);
+emit_16(831);
+emit_16(765);
+emit_16(831);
+emit_16(764);
+emit_16(831);
+emit_16(765);
+emit_16(832);
+emit_16(766);
+emit_16(832);
+emit_16(765);
+emit_16(832);
+emit_16(766);
+emit_16(833);
+emit_16(767);
+emit_16(833);
+emit_16(766);
+emit_16(833);
+emit_16(767);
+emit_16(834);
+emit_16(768);
+emit_16(834);
+emit_16(767);
+emit_16(834);
+emit_16(768);
+emit_16(835);
+emit_16(769);
+emit_16(835);
+emit_16(768);
+emit_16(835);
+emit_16(769);
+emit_16(836);
+emit_16(770);
+emit_16(836);
+emit_16(769);
+emit_16(836);
+emit_16(770);
+emit_16(837);
+emit_16(771);
+emit_16(837);
+emit_16(770);
+emit_16(837);
+emit_16(771);
+emit_16(838);
+emit_16(772);
+emit_16(838);
+emit_16(771);
+emit_16(838);
+emit_16(772);
+emit_16(839);
+emit_16(773);
+emit_16(839);
+emit_16(772);
+emit_16(839);
+emit_16(773);
+emit_16(840);
+emit_16(774);
+emit_16(840);
+emit_16(773);
+emit_16(840);
+emit_16(774);
+emit_16(841);
+emit_16(775);
+emit_16(841);
+emit_16(774);
+emit_16(841);
+emit_16(775);
+emit_16(842);
+emit_16(776);
+emit_16(842);
+emit_16(775);
+emit_16(842);
+emit_16(776);
+emit_16(843);
+emit_16(777);
+emit_16(843);
+emit_16(776);
+emit_16(843);
+emit_16(777);
+emit_16(844);
+emit_16(778);
+emit_16(844);
+emit_16(777);
+emit_16(844);
+emit_16(778);
+emit_16(845);
+emit_16(779);
+emit_16(845);
+emit_16(778);
+emit_16(845);
+emit_16(779);
+emit_16(846);
+emit_16(780);
+emit_16(846);
+emit_16(779);
+emit_16(846);
+emit_16(780);
+emit_16(847);
+emit_16(781);
+emit_16(847);
+emit_16(780);
+emit_16(847);
+emit_16(781);
+emit_16(848);
+emit_16(782);
+emit_16(848);
+emit_16(781);
+emit_16(848);
+emit_16(782);
+emit_16(849);
+emit_16(783);
+emit_16(849);
+emit_16(782);
+emit_16(849);
+emit_16(783);
+emit_16(850);
+emit_16(784);
+emit_16(850);
+emit_16(783);
+emit_16(850);
+emit_16(784);
+emit_16(851);
+emit_16(785);
+emit_16(851);
+emit_16(784);
+emit_16(851);
+emit_16(785);
+emit_16(852);
+emit_16(786);
+emit_16(852);
+emit_16(785);
+emit_16(852);
+emit_16(786);
+emit_16(853);
+emit_16(787);
+emit_16(853);
+emit_16(786);
+emit_16(853);
+emit_16(787);
+emit_16(854);
+emit_16(788);
+emit_16(854);
+emit_16(787);
+emit_16(854);
+emit_16(788);
+emit_16(855);
+emit_16(789);
+emit_16(855);
+emit_16(788);
+emit_16(855);
+emit_16(789);
+emit_16(856);
+emit_16(790);
+emit_16(856);
+emit_16(789);
+emit_16(856);
+emit_16(790);
+emit_16(857);
+emit_16(791);
+emit_16(857);
+emit_16(790);
+emit_16(858);
+emit_16(792);
+emit_16(859);
+emit_16(793);
+emit_16(859);
+emit_16(792);
+emit_16(859);
+emit_16(793);
+emit_16(860);
+emit_16(794);
+emit_16(860);
+emit_16(793);
+emit_16(860);
+emit_16(794);
+emit_16(861);
+emit_16(795);
+emit_16(861);
+emit_16(794);
+emit_16(861);
+emit_16(795);
+emit_16(862);
+emit_16(796);
+emit_16(862);
+emit_16(795);
+emit_16(862);
+emit_16(796);
+emit_16(863);
+emit_16(797);
+emit_16(863);
+emit_16(796);
+emit_16(863);
+emit_16(797);
+emit_16(864);
+emit_16(798);
+emit_16(864);
+emit_16(797);
+emit_16(864);
+emit_16(798);
+emit_16(865);
+emit_16(799);
+emit_16(865);
+emit_16(798);
+emit_16(865);
+emit_16(799);
+emit_16(866);
+emit_16(800);
+emit_16(866);
+emit_16(799);
+emit_16(866);
+emit_16(800);
+emit_16(867);
+emit_16(801);
+emit_16(867);
+emit_16(800);
+emit_16(867);
+emit_16(801);
+emit_16(868);
+emit_16(802);
+emit_16(868);
+emit_16(801);
+emit_16(868);
+emit_16(802);
+emit_16(869);
+emit_16(803);
+emit_16(869);
+emit_16(802);
+emit_16(869);
+emit_16(803);
+emit_16(870);
+emit_16(804);
+emit_16(870);
+emit_16(803);
+emit_16(870);
+emit_16(804);
+emit_16(871);
+emit_16(805);
+emit_16(871);
+emit_16(804);
+emit_16(871);
+emit_16(805);
+emit_16(872);
+emit_16(806);
+emit_16(872);
+emit_16(805);
+emit_16(872);
+emit_16(806);
+emit_16(873);
+emit_16(807);
+emit_16(873);
+emit_16(806);
+emit_16(873);
+emit_16(807);
+emit_16(874);
+emit_16(808);
+emit_16(874);
+emit_16(807);
+emit_16(874);
+emit_16(808);
+emit_16(875);
+emit_16(809);
+emit_16(875);
+emit_16(808);
+emit_16(875);
+emit_16(809);
+emit_16(876);
+emit_16(810);
+emit_16(876);
+emit_16(809);
+emit_16(876);
+emit_16(810);
+emit_16(877);
+emit_16(811);
+emit_16(877);
+emit_16(810);
+emit_16(877);
+emit_16(811);
+emit_16(878);
+emit_16(812);
+emit_16(878);
+emit_16(811);
+emit_16(878);
+emit_16(812);
+emit_16(879);
+emit_16(813);
+emit_16(879);
+emit_16(812);
+emit_16(879);
+emit_16(813);
+emit_16(880);
+emit_16(814);
+emit_16(880);
+emit_16(813);
+emit_16(880);
+emit_16(814);
+emit_16(881);
+emit_16(815);
+emit_16(881);
+emit_16(814);
+emit_16(881);
+emit_16(815);
+emit_16(882);
+emit_16(816);
+emit_16(882);
+emit_16(815);
+emit_16(882);
+emit_16(816);
+emit_16(883);
+emit_16(817);
+emit_16(883);
+emit_16(816);
+emit_16(883);
+emit_16(817);
+emit_16(884);
+emit_16(818);
+emit_16(884);
+emit_16(817);
+emit_16(884);
+emit_16(818);
+emit_16(885);
+emit_16(819);
+emit_16(885);
+emit_16(818);
+emit_16(885);
+emit_16(819);
+emit_16(886);
+emit_16(820);
+emit_16(886);
+emit_16(819);
+emit_16(886);
+emit_16(820);
+emit_16(887);
+emit_16(821);
+emit_16(887);
+emit_16(820);
+emit_16(887);
+emit_16(821);
+emit_16(888);
+emit_16(822);
+emit_16(888);
+emit_16(821);
+emit_16(888);
+emit_16(822);
+emit_16(889);
+emit_16(823);
+emit_16(889);
+emit_16(822);
+emit_16(889);
+emit_16(823);
+emit_16(890);
+emit_16(824);
+emit_16(890);
+emit_16(823);
+emit_16(890);
+emit_16(824);
+emit_16(891);
+emit_16(825);
+emit_16(891);
+emit_16(824);
+emit_16(891);
+emit_16(825);
+emit_16(892);
+emit_16(826);
+emit_16(892);
+emit_16(825);
+emit_16(892);
+emit_16(826);
+emit_16(893);
+emit_16(827);
+emit_16(893);
+emit_16(826);
+emit_16(893);
+emit_16(827);
+emit_16(894);
+emit_16(828);
+emit_16(894);
+emit_16(827);
+emit_16(894);
+emit_16(828);
+emit_16(895);
+emit_16(829);
+emit_16(895);
+emit_16(828);
+emit_16(895);
+emit_16(829);
+emit_16(896);
+emit_16(830);
+emit_16(896);
+emit_16(829);
+emit_16(896);
+emit_16(830);
+emit_16(897);
+emit_16(831);
+emit_16(897);
+emit_16(830);
+emit_16(897);
+emit_16(831);
+emit_16(898);
+emit_16(832);
+emit_16(898);
+emit_16(831);
+emit_16(898);
+emit_16(832);
+emit_16(899);
+emit_16(833);
+emit_16(899);
+emit_16(832);
+emit_16(899);
+emit_16(833);
+emit_16(900);
+emit_16(834);
+emit_16(900);
+emit_16(833);
+emit_16(900);
+emit_16(834);
+emit_16(901);
+emit_16(835);
+emit_16(901);
+emit_16(834);
+emit_16(901);
+emit_16(835);
+emit_16(902);
+emit_16(836);
+emit_16(902);
+emit_16(835);
+emit_16(902);
+emit_16(836);
+emit_16(903);
+emit_16(837);
+emit_16(903);
+emit_16(836);
+emit_16(903);
+emit_16(837);
+emit_16(904);
+emit_16(838);
+emit_16(904);
+emit_16(837);
+emit_16(904);
+emit_16(838);
+emit_16(905);
+emit_16(839);
+emit_16(905);
+emit_16(838);
+emit_16(905);
+emit_16(839);
+emit_16(906);
+emit_16(840);
+emit_16(906);
+emit_16(839);
+emit_16(906);
+emit_16(840);
+emit_16(907);
+emit_16(841);
+emit_16(907);
+emit_16(840);
+emit_16(907);
+emit_16(841);
+emit_16(908);
+emit_16(842);
+emit_16(908);
+emit_16(841);
+emit_16(908);
+emit_16(842);
+emit_16(909);
+emit_16(843);
+emit_16(909);
+emit_16(842);
+emit_16(909);
+emit_16(843);
+emit_16(910);
+emit_16(844);
+emit_16(910);
+emit_16(843);
+emit_16(910);
+emit_16(844);
+emit_16(911);
+emit_16(845);
+emit_16(911);
+emit_16(844);
+emit_16(911);
+emit_16(845);
+emit_16(912);
+emit_16(846);
+emit_16(912);
+emit_16(845);
+emit_16(912);
+emit_16(846);
+emit_16(913);
+emit_16(847);
+emit_16(913);
+emit_16(846);
+emit_16(913);
+emit_16(847);
+emit_16(914);
+emit_16(848);
+emit_16(914);
+emit_16(847);
+emit_16(914);
+emit_16(848);
+emit_16(915);
+emit_16(849);
+emit_16(915);
+emit_16(848);
+emit_16(915);
+emit_16(849);
+emit_16(916);
+emit_16(850);
+emit_16(916);
+emit_16(849);
+emit_16(916);
+emit_16(850);
+emit_16(917);
+emit_16(851);
+emit_16(917);
+emit_16(850);
+emit_16(917);
+emit_16(851);
+emit_16(918);
+emit_16(852);
+emit_16(918);
+emit_16(851);
+emit_16(918);
+emit_16(852);
+emit_16(919);
+emit_16(853);
+emit_16(919);
+emit_16(852);
+emit_16(919);
+emit_16(853);
+emit_16(920);
+emit_16(854);
+emit_16(920);
+emit_16(853);
+emit_16(920);
+emit_16(854);
+emit_16(921);
+emit_16(855);
+emit_16(921);
+emit_16(854);
+emit_16(921);
+emit_16(855);
+emit_16(922);
+emit_16(856);
+emit_16(922);
+emit_16(855);
+emit_16(922);
+emit_16(856);
+emit_16(923);
+emit_16(857);
+emit_16(923);
+emit_16(856);
+emit_16(924);
+emit_16(858);
+emit_16(925);
+emit_16(859);
+emit_16(925);
+emit_16(858);
+emit_16(925);
+emit_16(859);
+emit_16(926);
+emit_16(860);
+emit_16(926);
+emit_16(859);
+emit_16(926);
+emit_16(860);
+emit_16(927);
+emit_16(861);
+emit_16(927);
+emit_16(860);
+emit_16(927);
+emit_16(861);
+emit_16(928);
+emit_16(862);
+emit_16(928);
+emit_16(861);
+emit_16(928);
+emit_16(862);
+emit_16(929);
+emit_16(863);
+emit_16(929);
+emit_16(862);
+emit_16(929);
+emit_16(863);
+emit_16(930);
+emit_16(864);
+emit_16(930);
+emit_16(863);
+emit_16(930);
+emit_16(864);
+emit_16(931);
+emit_16(865);
+emit_16(931);
+emit_16(864);
+emit_16(931);
+emit_16(865);
+emit_16(932);
+emit_16(866);
+emit_16(932);
+emit_16(865);
+emit_16(932);
+emit_16(866);
+emit_16(933);
+emit_16(867);
+emit_16(933);
+emit_16(866);
+emit_16(933);
+emit_16(867);
+emit_16(934);
+emit_16(868);
+emit_16(934);
+emit_16(867);
+emit_16(934);
+emit_16(868);
+emit_16(935);
+emit_16(869);
+emit_16(935);
+emit_16(868);
+emit_16(935);
+emit_16(869);
+emit_16(936);
+emit_16(870);
+emit_16(936);
+emit_16(869);
+emit_16(936);
+emit_16(870);
+emit_16(937);
+emit_16(871);
+emit_16(937);
+emit_16(870);
+emit_16(937);
+emit_16(871);
+emit_16(938);
+emit_16(872);
+emit_16(938);
+emit_16(871);
+emit_16(938);
+emit_16(872);
+emit_16(939);
+emit_16(873);
+emit_16(939);
+emit_16(872);
+emit_16(939);
+emit_16(873);
+emit_16(940);
+emit_16(874);
+emit_16(940);
+emit_16(873);
+emit_16(940);
+emit_16(874);
+emit_16(941);
+emit_16(875);
+emit_16(941);
+emit_16(874);
+emit_16(941);
+emit_16(875);
+emit_16(942);
+emit_16(876);
+emit_16(942);
+emit_16(875);
+emit_16(942);
+emit_16(876);
+emit_16(943);
+emit_16(877);
+emit_16(943);
+emit_16(876);
+emit_16(943);
+emit_16(877);
+emit_16(944);
+emit_16(878);
+emit_16(944);
+emit_16(877);
+emit_16(944);
+emit_16(878);
+emit_16(945);
+emit_16(879);
+emit_16(945);
+emit_16(878);
+emit_16(945);
+emit_16(879);
+emit_16(946);
+emit_16(880);
+emit_16(946);
+emit_16(879);
+emit_16(946);
+emit_16(880);
+emit_16(947);
+emit_16(881);
+emit_16(947);
+emit_16(880);
+emit_16(947);
+emit_16(881);
+emit_16(948);
+emit_16(882);
+emit_16(948);
+emit_16(881);
+emit_16(948);
+emit_16(882);
+emit_16(949);
+emit_16(883);
+emit_16(949);
+emit_16(882);
+emit_16(949);
+emit_16(883);
+emit_16(950);
+emit_16(884);
+emit_16(950);
+emit_16(883);
+emit_16(950);
+emit_16(884);
+emit_16(951);
+emit_16(885);
+emit_16(951);
+emit_16(884);
+emit_16(951);
+emit_16(885);
+emit_16(952);
+emit_16(886);
+emit_16(952);
+emit_16(885);
+emit_16(952);
+emit_16(886);
+emit_16(953);
+emit_16(887);
+emit_16(953);
+emit_16(886);
+emit_16(953);
+emit_16(887);
+emit_16(954);
+emit_16(888);
+emit_16(954);
+emit_16(887);
+emit_16(954);
+emit_16(888);
+emit_16(955);
+emit_16(889);
+emit_16(955);
+emit_16(888);
+emit_16(955);
+emit_16(889);
+emit_16(956);
+emit_16(890);
+emit_16(956);
+emit_16(889);
+emit_16(956);
+emit_16(890);
+emit_16(957);
+emit_16(891);
+emit_16(957);
+emit_16(890);
+emit_16(957);
+emit_16(891);
+emit_16(958);
+emit_16(892);
+emit_16(958);
+emit_16(891);
+emit_16(958);
+emit_16(892);
+emit_16(959);
+emit_16(893);
+emit_16(959);
+emit_16(892);
+emit_16(959);
+emit_16(893);
+emit_16(960);
+emit_16(894);
+emit_16(960);
+emit_16(893);
+emit_16(960);
+emit_16(894);
+emit_16(961);
+emit_16(895);
+emit_16(961);
+emit_16(894);
+emit_16(961);
+emit_16(895);
+emit_16(962);
+emit_16(896);
+emit_16(962);
+emit_16(895);
+emit_16(962);
+emit_16(896);
+emit_16(963);
+emit_16(897);
+emit_16(963);
+emit_16(896);
+emit_16(963);
+emit_16(897);
+emit_16(964);
+emit_16(898);
+emit_16(964);
+emit_16(897);
+emit_16(964);
+emit_16(898);
+emit_16(965);
+emit_16(899);
+emit_16(965);
+emit_16(898);
+emit_16(965);
+emit_16(899);
+emit_16(966);
+emit_16(900);
+emit_16(966);
+emit_16(899);
+emit_16(966);
+emit_16(900);
+emit_16(967);
+emit_16(901);
+emit_16(967);
+emit_16(900);
+emit_16(967);
+emit_16(901);
+emit_16(968);
+emit_16(902);
+emit_16(968);
+emit_16(901);
+emit_16(968);
+emit_16(902);
+emit_16(969);
+emit_16(903);
+emit_16(969);
+emit_16(902);
+emit_16(969);
+emit_16(903);
+emit_16(970);
+emit_16(904);
+emit_16(970);
+emit_16(903);
+emit_16(970);
+emit_16(904);
+emit_16(971);
+emit_16(905);
+emit_16(971);
+emit_16(904);
+emit_16(971);
+emit_16(905);
+emit_16(972);
+emit_16(906);
+emit_16(972);
+emit_16(905);
+emit_16(972);
+emit_16(906);
+emit_16(973);
+emit_16(907);
+emit_16(973);
+emit_16(906);
+emit_16(973);
+emit_16(907);
+emit_16(974);
+emit_16(908);
+emit_16(974);
+emit_16(907);
+emit_16(974);
+emit_16(908);
+emit_16(975);
+emit_16(909);
+emit_16(975);
+emit_16(908);
+emit_16(975);
+emit_16(909);
+emit_16(976);
+emit_16(910);
+emit_16(976);
+emit_16(909);
+emit_16(976);
+emit_16(910);
+emit_16(977);
+emit_16(911);
+emit_16(977);
+emit_16(910);
+emit_16(977);
+emit_16(911);
+emit_16(978);
+emit_16(912);
+emit_16(978);
+emit_16(911);
+emit_16(978);
+emit_16(912);
+emit_16(979);
+emit_16(913);
+emit_16(979);
+emit_16(912);
+emit_16(979);
+emit_16(913);
+emit_16(980);
+emit_16(914);
+emit_16(980);
+emit_16(913);
+emit_16(980);
+emit_16(914);
+emit_16(981);
+emit_16(915);
+emit_16(981);
+emit_16(914);
+emit_16(981);
+emit_16(915);
+emit_16(982);
+emit_16(916);
+emit_16(982);
+emit_16(915);
+emit_16(982);
+emit_16(916);
+emit_16(983);
+emit_16(917);
+emit_16(983);
+emit_16(916);
+emit_16(983);
+emit_16(917);
+emit_16(984);
+emit_16(918);
+emit_16(984);
+emit_16(917);
+emit_16(984);
+emit_16(918);
+emit_16(985);
+emit_16(919);
+emit_16(985);
+emit_16(918);
+emit_16(985);
+emit_16(919);
+emit_16(986);
+emit_16(920);
+emit_16(986);
+emit_16(919);
+emit_16(986);
+emit_16(920);
+emit_16(987);
+emit_16(921);
+emit_16(987);
+emit_16(920);
+emit_16(987);
+emit_16(921);
+emit_16(988);
+emit_16(922);
+emit_16(988);
+emit_16(921);
+emit_16(988);
+emit_16(922);
+emit_16(989);
+emit_16(923);
+emit_16(989);
+emit_16(922);
+emit_16(990);
+emit_16(924);
+emit_16(991);
+emit_16(925);
+emit_16(991);
+emit_16(924);
+emit_16(991);
+emit_16(925);
+emit_16(992);
+emit_16(926);
+emit_16(992);
+emit_16(925);
+emit_16(992);
+emit_16(926);
+emit_16(993);
+emit_16(927);
+emit_16(993);
+emit_16(926);
+emit_16(993);
+emit_16(927);
+emit_16(994);
+emit_16(928);
+emit_16(994);
+emit_16(927);
+emit_16(994);
+emit_16(928);
+emit_16(995);
+emit_16(929);
+emit_16(995);
+emit_16(928);
+emit_16(995);
+emit_16(929);
+emit_16(996);
+emit_16(930);
+emit_16(996);
+emit_16(929);
+emit_16(996);
+emit_16(930);
+emit_16(997);
+emit_16(931);
+emit_16(997);
+emit_16(930);
+emit_16(997);
+emit_16(931);
+emit_16(998);
+emit_16(932);
+emit_16(998);
+emit_16(931);
+emit_16(998);
+emit_16(932);
+emit_16(999);
+emit_16(933);
+emit_16(999);
+emit_16(932);
+emit_16(999);
+emit_16(933);
+emit_16(1000);
+emit_16(934);
+emit_16(1000);
+emit_16(933);
+emit_16(1000);
+emit_16(934);
+emit_16(1001);
+emit_16(935);
+emit_16(1001);
+emit_16(934);
+emit_16(1001);
+emit_16(935);
+emit_16(1002);
+emit_16(936);
+emit_16(1002);
+emit_16(935);
+emit_16(1002);
+emit_16(936);
+emit_16(1003);
+emit_16(937);
+emit_16(1003);
+emit_16(936);
+emit_16(1003);
+emit_16(937);
+emit_16(1004);
+emit_16(938);
+emit_16(1004);
+emit_16(937);
+emit_16(1004);
+emit_16(938);
+emit_16(1005);
+emit_16(939);
+emit_16(1005);
+emit_16(938);
+emit_16(1005);
+emit_16(939);
+emit_16(1006);
+emit_16(940);
+emit_16(1006);
+emit_16(939);
+emit_16(1006);
+emit_16(940);
+emit_16(1007);
+emit_16(941);
+emit_16(1007);
+emit_16(940);
+emit_16(1007);
+emit_16(941);
+emit_16(1008);
+emit_16(942);
+emit_16(1008);
+emit_16(941);
+emit_16(1008);
+emit_16(942);
+emit_16(1009);
+emit_16(943);
+emit_16(1009);
+emit_16(942);
+emit_16(1009);
+emit_16(943);
+emit_16(1010);
+emit_16(944);
+emit_16(1010);
+emit_16(943);
+emit_16(1010);
+emit_16(944);
+emit_16(1011);
+emit_16(945);
+emit_16(1011);
+emit_16(944);
+emit_16(1011);
+emit_16(945);
+emit_16(1012);
+emit_16(946);
+emit_16(1012);
+emit_16(945);
+emit_16(1012);
+emit_16(946);
+emit_16(1013);
+emit_16(947);
+emit_16(1013);
+emit_16(946);
+emit_16(1013);
+emit_16(947);
+emit_16(1014);
+emit_16(948);
+emit_16(1014);
+emit_16(947);
+emit_16(1014);
+emit_16(948);
+emit_16(1015);
+emit_16(949);
+emit_16(1015);
+emit_16(948);
+emit_16(1015);
+emit_16(949);
+emit_16(1016);
+emit_16(950);
+emit_16(1016);
+emit_16(949);
+emit_16(1016);
+emit_16(950);
+emit_16(1017);
+emit_16(951);
+emit_16(1017);
+emit_16(950);
+emit_16(1017);
+emit_16(951);
+emit_16(1018);
+emit_16(952);
+emit_16(1018);
+emit_16(951);
+emit_16(1018);
+emit_16(952);
+emit_16(1019);
+emit_16(953);
+emit_16(1019);
+emit_16(952);
+emit_16(1019);
+emit_16(953);
+emit_16(1020);
+emit_16(954);
+emit_16(1020);
+emit_16(953);
+emit_16(1020);
+emit_16(954);
+emit_16(1021);
+emit_16(955);
+emit_16(1021);
+emit_16(954);
+emit_16(1021);
+emit_16(955);
+emit_16(1022);
+emit_16(956);
+emit_16(1022);
+emit_16(955);
+emit_16(1022);
+emit_16(956);
+emit_16(1023);
+emit_16(957);
+emit_16(1023);
+emit_16(956);
+emit_16(1023);
+emit_16(957);
+emit_16(1024);
+emit_16(958);
+emit_16(1024);
+emit_16(957);
+emit_16(1024);
+emit_16(958);
+emit_16(1025);
+emit_16(959);
+emit_16(1025);
+emit_16(958);
+emit_16(1025);
+emit_16(959);
+emit_16(1026);
+emit_16(960);
+emit_16(1026);
+emit_16(959);
+emit_16(1026);
+emit_16(960);
+emit_16(1027);
+emit_16(961);
+emit_16(1027);
+emit_16(960);
+emit_16(1027);
+emit_16(961);
+emit_16(1028);
+emit_16(962);
+emit_16(1028);
+emit_16(961);
+emit_16(1028);
+emit_16(962);
+emit_16(1029);
+emit_16(963);
+emit_16(1029);
+emit_16(962);
+emit_16(1029);
+emit_16(963);
+emit_16(1030);
+emit_16(964);
+emit_16(1030);
+emit_16(963);
+emit_16(1030);
+emit_16(964);
+emit_16(1031);
+emit_16(965);
+emit_16(1031);
+emit_16(964);
+emit_16(1031);
+emit_16(965);
+emit_16(1032);
+emit_16(966);
+emit_16(1032);
+emit_16(965);
+emit_16(1032);
+emit_16(966);
+emit_16(1033);
+emit_16(967);
+emit_16(1033);
+emit_16(966);
+emit_16(1033);
+emit_16(967);
+emit_16(1034);
+emit_16(968);
+emit_16(1034);
+emit_16(967);
+emit_16(1034);
+emit_16(968);
+emit_16(1035);
+emit_16(969);
+emit_16(1035);
+emit_16(968);
+emit_16(1035);
+emit_16(969);
+emit_16(1036);
+emit_16(970);
+emit_16(1036);
+emit_16(969);
+emit_16(1036);
+emit_16(970);
+emit_16(1037);
+emit_16(971);
+emit_16(1037);
+emit_16(970);
+emit_16(1037);
+emit_16(971);
+emit_16(1038);
+emit_16(972);
+emit_16(1038);
+emit_16(971);
+emit_16(1038);
+emit_16(972);
+emit_16(1039);
+emit_16(973);
+emit_16(1039);
+emit_16(972);
+emit_16(1039);
+emit_16(973);
+emit_16(1040);
+emit_16(974);
+emit_16(1040);
+emit_16(973);
+emit_16(1040);
+emit_16(974);
+emit_16(1041);
+emit_16(975);
+emit_16(1041);
+emit_16(974);
+emit_16(1041);
+emit_16(975);
+emit_16(1042);
+emit_16(976);
+emit_16(1042);
+emit_16(975);
+emit_16(1042);
+emit_16(976);
+emit_16(1043);
+emit_16(977);
+emit_16(1043);
+emit_16(976);
+emit_16(1043);
+emit_16(977);
+emit_16(1044);
+emit_16(978);
+emit_16(1044);
+emit_16(977);
+emit_16(1044);
+emit_16(978);
+emit_16(1045);
+emit_16(979);
+emit_16(1045);
+emit_16(978);
+emit_16(1045);
+emit_16(979);
+emit_16(1046);
+emit_16(980);
+emit_16(1046);
+emit_16(979);
+emit_16(1046);
+emit_16(980);
+emit_16(1047);
+emit_16(981);
+emit_16(1047);
+emit_16(980);
+emit_16(1047);
+emit_16(981);
+emit_16(1048);
+emit_16(982);
+emit_16(1048);
+emit_16(981);
+emit_16(1048);
+emit_16(982);
+emit_16(1049);
+emit_16(983);
+emit_16(1049);
+emit_16(982);
+emit_16(1049);
+emit_16(983);
+emit_16(1050);
+emit_16(984);
+emit_16(1050);
+emit_16(983);
+emit_16(1050);
+emit_16(984);
+emit_16(1051);
+emit_16(985);
+emit_16(1051);
+emit_16(984);
+emit_16(1051);
+emit_16(985);
+emit_16(1052);
+emit_16(986);
+emit_16(1052);
+emit_16(985);
+emit_16(1052);
+emit_16(986);
+emit_16(1053);
+emit_16(987);
+emit_16(1053);
+emit_16(986);
+emit_16(1053);
+emit_16(987);
+emit_16(1054);
+emit_16(988);
+emit_16(1054);
+emit_16(987);
+emit_16(1054);
+emit_16(988);
+emit_16(1055);
+emit_16(989);
+emit_16(1055);
+emit_16(988);
+emit_16(1056);
+emit_16(990);
+emit_16(1057);
+emit_16(991);
+emit_16(1057);
+emit_16(990);
+emit_16(1057);
+emit_16(991);
+emit_16(1058);
+emit_16(992);
+emit_16(1058);
+emit_16(991);
+emit_16(1058);
+emit_16(992);
+emit_16(1059);
+emit_16(993);
+emit_16(1059);
+emit_16(992);
+emit_16(1059);
+emit_16(993);
+emit_16(1060);
+emit_16(994);
+emit_16(1060);
+emit_16(993);
+emit_16(1060);
+emit_16(994);
+emit_16(1061);
+emit_16(995);
+emit_16(1061);
+emit_16(994);
+emit_16(1061);
+emit_16(995);
+emit_16(1062);
+emit_16(996);
+emit_16(1062);
+emit_16(995);
+emit_16(1062);
+emit_16(996);
+emit_16(1063);
+emit_16(997);
+emit_16(1063);
+emit_16(996);
+emit_16(1063);
+emit_16(997);
+emit_16(1064);
+emit_16(998);
+emit_16(1064);
+emit_16(997);
+emit_16(1064);
+emit_16(998);
+emit_16(1065);
+emit_16(999);
+emit_16(1065);
+emit_16(998);
+emit_16(1065);
+emit_16(999);
+emit_16(1066);
+emit_16(1000);
+emit_16(1066);
+emit_16(999);
+emit_16(1066);
+emit_16(1000);
+emit_16(1067);
+emit_16(1001);
+emit_16(1067);
+emit_16(1000);
+emit_16(1067);
+emit_16(1001);
+emit_16(1068);
+emit_16(1002);
+emit_16(1068);
+emit_16(1001);
+emit_16(1068);
+emit_16(1002);
+emit_16(1069);
+emit_16(1003);
+emit_16(1069);
+emit_16(1002);
+emit_16(1069);
+emit_16(1003);
+emit_16(1070);
+emit_16(1004);
+emit_16(1070);
+emit_16(1003);
+emit_16(1070);
+emit_16(1004);
+emit_16(1071);
+emit_16(1005);
+emit_16(1071);
+emit_16(1004);
+emit_16(1071);
+emit_16(1005);
+emit_16(1072);
+emit_16(1006);
+emit_16(1072);
+emit_16(1005);
+emit_16(1072);
+emit_16(1006);
+emit_16(1073);
+emit_16(1007);
+emit_16(1073);
+emit_16(1006);
+emit_16(1073);
+emit_16(1007);
+emit_16(1074);
+emit_16(1008);
+emit_16(1074);
+emit_16(1007);
+emit_16(1074);
+emit_16(1008);
+emit_16(1075);
+emit_16(1009);
+emit_16(1075);
+emit_16(1008);
+emit_16(1075);
+emit_16(1009);
+emit_16(1076);
+emit_16(1010);
+emit_16(1076);
+emit_16(1009);
+emit_16(1076);
+emit_16(1010);
+emit_16(1077);
+emit_16(1011);
+emit_16(1077);
+emit_16(1010);
+emit_16(1077);
+emit_16(1011);
+emit_16(1078);
+emit_16(1012);
+emit_16(1078);
+emit_16(1011);
+emit_16(1078);
+emit_16(1012);
+emit_16(1079);
+emit_16(1013);
+emit_16(1079);
+emit_16(1012);
+emit_16(1079);
+emit_16(1013);
+emit_16(1080);
+emit_16(1014);
+emit_16(1080);
+emit_16(1013);
+emit_16(1080);
+emit_16(1014);
+emit_16(1081);
+emit_16(1015);
+emit_16(1081);
+emit_16(1014);
+emit_16(1081);
+emit_16(1015);
+emit_16(1082);
+emit_16(1016);
+emit_16(1082);
+emit_16(1015);
+emit_16(1082);
+emit_16(1016);
+emit_16(1083);
+emit_16(1017);
+emit_16(1083);
+emit_16(1016);
+emit_16(1083);
+emit_16(1017);
+emit_16(1084);
+emit_16(1018);
+emit_16(1084);
+emit_16(1017);
+emit_16(1084);
+emit_16(1018);
+emit_16(1085);
+emit_16(1019);
+emit_16(1085);
+emit_16(1018);
+emit_16(1085);
+emit_16(1019);
+emit_16(1086);
+emit_16(1020);
+emit_16(1086);
+emit_16(1019);
+emit_16(1086);
+emit_16(1020);
+emit_16(1087);
+emit_16(1021);
+emit_16(1087);
+emit_16(1020);
+emit_16(1087);
+emit_16(1021);
+emit_16(1088);
+emit_16(1022);
+emit_16(1088);
+emit_16(1021);
+emit_16(1088);
+emit_16(1022);
+emit_16(1089);
+emit_16(1023);
+emit_16(1089);
+emit_16(1022);
+emit_16(1089);
+emit_16(1023);
+emit_16(1090);
+emit_16(1024);
+emit_16(1090);
+emit_16(1023);
+emit_16(1090);
+emit_16(1024);
+emit_16(1091);
+emit_16(1025);
+emit_16(1091);
+emit_16(1024);
+emit_16(1091);
+emit_16(1025);
+emit_16(1092);
+emit_16(1026);
+emit_16(1092);
+emit_16(1025);
+emit_16(1092);
+emit_16(1026);
+emit_16(1093);
+emit_16(1027);
+emit_16(1093);
+emit_16(1026);
+emit_16(1093);
+emit_16(1027);
+emit_16(1094);
+emit_16(1028);
+emit_16(1094);
+emit_16(1027);
+emit_16(1094);
+emit_16(1028);
+emit_16(1095);
+emit_16(1029);
+emit_16(1095);
+emit_16(1028);
+emit_16(1095);
+emit_16(1029);
+emit_16(1096);
+emit_16(1030);
+emit_16(1096);
+emit_16(1029);
+emit_16(1096);
+emit_16(1030);
+emit_16(1097);
+emit_16(1031);
+emit_16(1097);
+emit_16(1030);
+emit_16(1097);
+emit_16(1031);
+emit_16(1098);
+emit_16(1032);
+emit_16(1098);
+emit_16(1031);
+emit_16(1098);
+emit_16(1032);
+emit_16(1099);
+emit_16(1033);
+emit_16(1099);
+emit_16(1032);
+emit_16(1099);
+emit_16(1033);
+emit_16(1100);
+emit_16(1034);
+emit_16(1100);
+emit_16(1033);
+emit_16(1100);
+emit_16(1034);
+emit_16(1101);
+emit_16(1035);
+emit_16(1101);
+emit_16(1034);
+emit_16(1101);
+emit_16(1035);
+emit_16(1102);
+emit_16(1036);
+emit_16(1102);
+emit_16(1035);
+emit_16(1102);
+emit_16(1036);
+emit_16(1103);
+emit_16(1037);
+emit_16(1103);
+emit_16(1036);
+emit_16(1103);
+emit_16(1037);
+emit_16(1104);
+emit_16(1038);
+emit_16(1104);
+emit_16(1037);
+emit_16(1104);
+emit_16(1038);
+emit_16(1105);
+emit_16(1039);
+emit_16(1105);
+emit_16(1038);
+emit_16(1105);
+emit_16(1039);
+emit_16(1106);
+emit_16(1040);
+emit_16(1106);
+emit_16(1039);
+emit_16(1106);
+emit_16(1040);
+emit_16(1107);
+emit_16(1041);
+emit_16(1107);
+emit_16(1040);
+emit_16(1107);
+emit_16(1041);
+emit_16(1108);
+emit_16(1042);
+emit_16(1108);
+emit_16(1041);
+emit_16(1108);
+emit_16(1042);
+emit_16(1109);
+emit_16(1043);
+emit_16(1109);
+emit_16(1042);
+emit_16(1109);
+emit_16(1043);
+emit_16(1110);
+emit_16(1044);
+emit_16(1110);
+emit_16(1043);
+emit_16(1110);
+emit_16(1044);
+emit_16(1111);
+emit_16(1045);
+emit_16(1111);
+emit_16(1044);
+emit_16(1111);
+emit_16(1045);
+emit_16(1112);
+emit_16(1046);
+emit_16(1112);
+emit_16(1045);
+emit_16(1112);
+emit_16(1046);
+emit_16(1113);
+emit_16(1047);
+emit_16(1113);
+emit_16(1046);
+emit_16(1113);
+emit_16(1047);
+emit_16(1114);
+emit_16(1048);
+emit_16(1114);
+emit_16(1047);
+emit_16(1114);
+emit_16(1048);
+emit_16(1115);
+emit_16(1049);
+emit_16(1115);
+emit_16(1048);
+emit_16(1115);
+emit_16(1049);
+emit_16(1116);
+emit_16(1050);
+emit_16(1116);
+emit_16(1049);
+emit_16(1116);
+emit_16(1050);
+emit_16(1117);
+emit_16(1051);
+emit_16(1117);
+emit_16(1050);
+emit_16(1117);
+emit_16(1051);
+emit_16(1118);
+emit_16(1052);
+emit_16(1118);
+emit_16(1051);
+emit_16(1118);
+emit_16(1052);
+emit_16(1119);
+emit_16(1053);
+emit_16(1119);
+emit_16(1052);
+emit_16(1119);
+emit_16(1053);
+emit_16(1120);
+emit_16(1054);
+emit_16(1120);
+emit_16(1053);
+emit_16(1120);
+emit_16(1054);
+emit_16(1121);
+emit_16(1055);
+emit_16(1121);
+emit_16(1054);
+emit_16(1122);
+emit_16(1056);
+emit_16(1123);
+emit_16(1057);
+emit_16(1123);
+emit_16(1056);
+emit_16(1123);
+emit_16(1057);
+emit_16(1124);
+emit_16(1058);
+emit_16(1124);
+emit_16(1057);
+emit_16(1124);
+emit_16(1058);
+emit_16(1125);
+emit_16(1059);
+emit_16(1125);
+emit_16(1058);
+emit_16(1125);
+emit_16(1059);
+emit_16(1126);
+emit_16(1060);
+emit_16(1126);
+emit_16(1059);
+emit_16(1126);
+emit_16(1060);
+emit_16(1127);
+emit_16(1061);
+emit_16(1127);
+emit_16(1060);
+emit_16(1127);
+emit_16(1061);
+emit_16(1128);
+emit_16(1062);
+emit_16(1128);
+emit_16(1061);
+emit_16(1128);
+emit_16(1062);
+emit_16(1129);
+emit_16(1063);
+emit_16(1129);
+emit_16(1062);
+emit_16(1129);
+emit_16(1063);
+emit_16(1130);
+emit_16(1064);
+emit_16(1130);
+emit_16(1063);
+emit_16(1130);
+emit_16(1064);
+emit_16(1131);
+emit_16(1065);
+emit_16(1131);
+emit_16(1064);
+emit_16(1131);
+emit_16(1065);
+emit_16(1132);
+emit_16(1066);
+emit_16(1132);
+emit_16(1065);
+emit_16(1132);
+emit_16(1066);
+emit_16(1133);
+emit_16(1067);
+emit_16(1133);
+emit_16(1066);
+emit_16(1133);
+emit_16(1067);
+emit_16(1134);
+emit_16(1068);
+emit_16(1134);
+emit_16(1067);
+emit_16(1134);
+emit_16(1068);
+emit_16(1135);
+emit_16(1069);
+emit_16(1135);
+emit_16(1068);
+emit_16(1135);
+emit_16(1069);
+emit_16(1136);
+emit_16(1070);
+emit_16(1136);
+emit_16(1069);
+emit_16(1136);
+emit_16(1070);
+emit_16(1137);
+emit_16(1071);
+emit_16(1137);
+emit_16(1070);
+emit_16(1137);
+emit_16(1071);
+emit_16(1138);
+emit_16(1072);
+emit_16(1138);
+emit_16(1071);
+emit_16(1138);
+emit_16(1072);
+emit_16(1139);
+emit_16(1073);
+emit_16(1139);
+emit_16(1072);
+emit_16(1139);
+emit_16(1073);
+emit_16(1140);
+emit_16(1074);
+emit_16(1140);
+emit_16(1073);
+emit_16(1140);
+emit_16(1074);
+emit_16(1141);
+emit_16(1075);
+emit_16(1141);
+emit_16(1074);
+emit_16(1141);
+emit_16(1075);
+emit_16(1142);
+emit_16(1076);
+emit_16(1142);
+emit_16(1075);
+emit_16(1142);
+emit_16(1076);
+emit_16(1143);
+emit_16(1077);
+emit_16(1143);
+emit_16(1076);
+emit_16(1143);
+emit_16(1077);
+emit_16(1144);
+emit_16(1078);
+emit_16(1144);
+emit_16(1077);
+emit_16(1144);
+emit_16(1078);
+emit_16(1145);
+emit_16(1079);
+emit_16(1145);
+emit_16(1078);
+emit_16(1145);
+emit_16(1079);
+emit_16(1146);
+emit_16(1080);
+emit_16(1146);
+emit_16(1079);
+emit_16(1146);
+emit_16(1080);
+emit_16(1147);
+emit_16(1081);
+emit_16(1147);
+emit_16(1080);
+emit_16(1147);
+emit_16(1081);
+emit_16(1148);
+emit_16(1082);
+emit_16(1148);
+emit_16(1081);
+emit_16(1148);
+emit_16(1082);
+emit_16(1149);
+emit_16(1083);
+emit_16(1149);
+emit_16(1082);
+emit_16(1149);
+emit_16(1083);
+emit_16(1150);
+emit_16(1084);
+emit_16(1150);
+emit_16(1083);
+emit_16(1150);
+emit_16(1084);
+emit_16(1151);
+emit_16(1085);
+emit_16(1151);
+emit_16(1084);
+emit_16(1151);
+emit_16(1085);
+emit_16(1152);
+emit_16(1086);
+emit_16(1152);
+emit_16(1085);
+emit_16(1152);
+emit_16(1086);
+emit_16(1153);
+emit_16(1087);
+emit_16(1153);
+emit_16(1086);
+emit_16(1153);
+emit_16(1087);
+emit_16(1154);
+emit_16(1088);
+emit_16(1154);
+emit_16(1087);
+emit_16(1154);
+emit_16(1088);
+emit_16(1155);
+emit_16(1089);
+emit_16(1155);
+emit_16(1088);
+emit_16(1155);
+emit_16(1089);
+emit_16(1156);
+emit_16(1090);
+emit_16(1156);
+emit_16(1089);
+emit_16(1156);
+emit_16(1090);
+emit_16(1157);
+emit_16(1091);
+emit_16(1157);
+emit_16(1090);
+emit_16(1157);
+emit_16(1091);
+emit_16(1158);
+emit_16(1092);
+emit_16(1158);
+emit_16(1091);
+emit_16(1158);
+emit_16(1092);
+emit_16(1159);
+emit_16(1093);
+emit_16(1159);
+emit_16(1092);
+emit_16(1159);
+emit_16(1093);
+emit_16(1160);
+emit_16(1094);
+emit_16(1160);
+emit_16(1093);
+emit_16(1160);
+emit_16(1094);
+emit_16(1161);
+emit_16(1095);
+emit_16(1161);
+emit_16(1094);
+emit_16(1161);
+emit_16(1095);
+emit_16(1162);
+emit_16(1096);
+emit_16(1162);
+emit_16(1095);
+emit_16(1162);
+emit_16(1096);
+emit_16(1163);
+emit_16(1097);
+emit_16(1163);
+emit_16(1096);
+emit_16(1163);
+emit_16(1097);
+emit_16(1164);
+emit_16(1098);
+emit_16(1164);
+emit_16(1097);
+emit_16(1164);
+emit_16(1098);
+emit_16(1165);
+emit_16(1099);
+emit_16(1165);
+emit_16(1098);
+emit_16(1165);
+emit_16(1099);
+emit_16(1166);
+emit_16(1100);
+emit_16(1166);
+emit_16(1099);
+emit_16(1166);
+emit_16(1100);
+emit_16(1167);
+emit_16(1101);
+emit_16(1167);
+emit_16(1100);
+emit_16(1167);
+emit_16(1101);
+emit_16(1168);
+emit_16(1102);
+emit_16(1168);
+emit_16(1101);
+emit_16(1168);
+emit_16(1102);
+emit_16(1169);
+emit_16(1103);
+emit_16(1169);
+emit_16(1102);
+emit_16(1169);
+emit_16(1103);
+emit_16(1170);
+emit_16(1104);
+emit_16(1170);
+emit_16(1103);
+emit_16(1170);
+emit_16(1104);
+emit_16(1171);
+emit_16(1105);
+emit_16(1171);
+emit_16(1104);
+emit_16(1171);
+emit_16(1105);
+emit_16(1172);
+emit_16(1106);
+emit_16(1172);
+emit_16(1105);
+emit_16(1172);
+emit_16(1106);
+emit_16(1173);
+emit_16(1107);
+emit_16(1173);
+emit_16(1106);
+emit_16(1173);
+emit_16(1107);
+emit_16(1174);
+emit_16(1108);
+emit_16(1174);
+emit_16(1107);
+emit_16(1174);
+emit_16(1108);
+emit_16(1175);
+emit_16(1109);
+emit_16(1175);
+emit_16(1108);
+emit_16(1175);
+emit_16(1109);
+emit_16(1176);
+emit_16(1110);
+emit_16(1176);
+emit_16(1109);
+emit_16(1176);
+emit_16(1110);
+emit_16(1177);
+emit_16(1111);
+emit_16(1177);
+emit_16(1110);
+emit_16(1177);
+emit_16(1111);
+emit_16(1178);
+emit_16(1112);
+emit_16(1178);
+emit_16(1111);
+emit_16(1178);
+emit_16(1112);
+emit_16(1179);
+emit_16(1113);
+emit_16(1179);
+emit_16(1112);
+emit_16(1179);
+emit_16(1113);
+emit_16(1180);
+emit_16(1114);
+emit_16(1180);
+emit_16(1113);
+emit_16(1180);
+emit_16(1114);
+emit_16(1181);
+emit_16(1115);
+emit_16(1181);
+emit_16(1114);
+emit_16(1181);
+emit_16(1115);
+emit_16(1182);
+emit_16(1116);
+emit_16(1182);
+emit_16(1115);
+emit_16(1182);
+emit_16(1116);
+emit_16(1183);
+emit_16(1117);
+emit_16(1183);
+emit_16(1116);
+emit_16(1183);
+emit_16(1117);
+emit_16(1184);
+emit_16(1118);
+emit_16(1184);
+emit_16(1117);
+emit_16(1184);
+emit_16(1118);
+emit_16(1185);
+emit_16(1119);
+emit_16(1185);
+emit_16(1118);
+emit_16(1185);
+emit_16(1119);
+emit_16(1186);
+emit_16(1120);
+emit_16(1186);
+emit_16(1119);
+emit_16(1186);
+emit_16(1120);
+emit_16(1187);
+emit_16(1121);
+emit_16(1187);
+emit_16(1120);
+emit_16(1188);
+emit_16(1122);
+emit_16(1189);
+emit_16(1123);
+emit_16(1189);
+emit_16(1122);
+emit_16(1189);
+emit_16(1123);
+emit_16(1190);
+emit_16(1124);
+emit_16(1190);
+emit_16(1123);
+emit_16(1190);
+emit_16(1124);
+emit_16(1191);
+emit_16(1125);
+emit_16(1191);
+emit_16(1124);
+emit_16(1191);
+emit_16(1125);
+emit_16(1192);
+emit_16(1126);
+emit_16(1192);
+emit_16(1125);
+emit_16(1192);
+emit_16(1126);
+emit_16(1193);
+emit_16(1127);
+emit_16(1193);
+emit_16(1126);
+emit_16(1193);
+emit_16(1127);
+emit_16(1194);
+emit_16(1128);
+emit_16(1194);
+emit_16(1127);
+emit_16(1194);
+emit_16(1128);
+emit_16(1195);
+emit_16(1129);
+emit_16(1195);
+emit_16(1128);
+emit_16(1195);
+emit_16(1129);
+emit_16(1196);
+emit_16(1130);
+emit_16(1196);
+emit_16(1129);
+emit_16(1196);
+emit_16(1130);
+emit_16(1197);
+emit_16(1131);
+emit_16(1197);
+emit_16(1130);
+emit_16(1197);
+emit_16(1131);
+emit_16(1198);
+emit_16(1132);
+emit_16(1198);
+emit_16(1131);
+emit_16(1198);
+emit_16(1132);
+emit_16(1199);
+emit_16(1133);
+emit_16(1199);
+emit_16(1132);
+emit_16(1199);
+emit_16(1133);
+emit_16(1200);
+emit_16(1134);
+emit_16(1200);
+emit_16(1133);
+emit_16(1200);
+emit_16(1134);
+emit_16(1201);
+emit_16(1135);
+emit_16(1201);
+emit_16(1134);
+emit_16(1201);
+emit_16(1135);
+emit_16(1202);
+emit_16(1136);
+emit_16(1202);
+emit_16(1135);
+emit_16(1202);
+emit_16(1136);
+emit_16(1203);
+emit_16(1137);
+emit_16(1203);
+emit_16(1136);
+emit_16(1203);
+emit_16(1137);
+emit_16(1204);
+emit_16(1138);
+emit_16(1204);
+emit_16(1137);
+emit_16(1204);
+emit_16(1138);
+emit_16(1205);
+emit_16(1139);
+emit_16(1205);
+emit_16(1138);
+emit_16(1205);
+emit_16(1139);
+emit_16(1206);
+emit_16(1140);
+emit_16(1206);
+emit_16(1139);
+emit_16(1206);
+emit_16(1140);
+emit_16(1207);
+emit_16(1141);
+emit_16(1207);
+emit_16(1140);
+emit_16(1207);
+emit_16(1141);
+emit_16(1208);
+emit_16(1142);
+emit_16(1208);
+emit_16(1141);
+emit_16(1208);
+emit_16(1142);
+emit_16(1209);
+emit_16(1143);
+emit_16(1209);
+emit_16(1142);
+emit_16(1209);
+emit_16(1143);
+emit_16(1210);
+emit_16(1144);
+emit_16(1210);
+emit_16(1143);
+emit_16(1210);
+emit_16(1144);
+emit_16(1211);
+emit_16(1145);
+emit_16(1211);
+emit_16(1144);
+emit_16(1211);
+emit_16(1145);
+emit_16(1212);
+emit_16(1146);
+emit_16(1212);
+emit_16(1145);
+emit_16(1212);
+emit_16(1146);
+emit_16(1213);
+emit_16(1147);
+emit_16(1213);
+emit_16(1146);
+emit_16(1213);
+emit_16(1147);
+emit_16(1214);
+emit_16(1148);
+emit_16(1214);
+emit_16(1147);
+emit_16(1214);
+emit_16(1148);
+emit_16(1215);
+emit_16(1149);
+emit_16(1215);
+emit_16(1148);
+emit_16(1215);
+emit_16(1149);
+emit_16(1216);
+emit_16(1150);
+emit_16(1216);
+emit_16(1149);
+emit_16(1216);
+emit_16(1150);
+emit_16(1217);
+emit_16(1151);
+emit_16(1217);
+emit_16(1150);
+emit_16(1217);
+emit_16(1151);
+emit_16(1218);
+emit_16(1152);
+emit_16(1218);
+emit_16(1151);
+emit_16(1218);
+emit_16(1152);
+emit_16(1219);
+emit_16(1153);
+emit_16(1219);
+emit_16(1152);
+emit_16(1219);
+emit_16(1153);
+emit_16(1220);
+emit_16(1154);
+emit_16(1220);
+emit_16(1153);
+emit_16(1220);
+emit_16(1154);
+emit_16(1221);
+emit_16(1155);
+emit_16(1221);
+emit_16(1154);
+emit_16(1221);
+emit_16(1155);
+emit_16(1222);
+emit_16(1156);
+emit_16(1222);
+emit_16(1155);
+emit_16(1222);
+emit_16(1156);
+emit_16(1223);
+emit_16(1157);
+emit_16(1223);
+emit_16(1156);
+emit_16(1223);
+emit_16(1157);
+emit_16(1224);
+emit_16(1158);
+emit_16(1224);
+emit_16(1157);
+emit_16(1224);
+emit_16(1158);
+emit_16(1225);
+emit_16(1159);
+emit_16(1225);
+emit_16(1158);
+emit_16(1225);
+emit_16(1159);
+emit_16(1226);
+emit_16(1160);
+emit_16(1226);
+emit_16(1159);
+emit_16(1226);
+emit_16(1160);
+emit_16(1227);
+emit_16(1161);
+emit_16(1227);
+emit_16(1160);
+emit_16(1227);
+emit_16(1161);
+emit_16(1228);
+emit_16(1162);
+emit_16(1228);
+emit_16(1161);
+emit_16(1228);
+emit_16(1162);
+emit_16(1229);
+emit_16(1163);
+emit_16(1229);
+emit_16(1162);
+emit_16(1229);
+emit_16(1163);
+emit_16(1230);
+emit_16(1164);
+emit_16(1230);
+emit_16(1163);
+emit_16(1230);
+emit_16(1164);
+emit_16(1231);
+emit_16(1165);
+emit_16(1231);
+emit_16(1164);
+emit_16(1231);
+emit_16(1165);
+emit_16(1232);
+emit_16(1166);
+emit_16(1232);
+emit_16(1165);
+emit_16(1232);
+emit_16(1166);
+emit_16(1233);
+emit_16(1167);
+emit_16(1233);
+emit_16(1166);
+emit_16(1233);
+emit_16(1167);
+emit_16(1234);
+emit_16(1168);
+emit_16(1234);
+emit_16(1167);
+emit_16(1234);
+emit_16(1168);
+emit_16(1235);
+emit_16(1169);
+emit_16(1235);
+emit_16(1168);
+emit_16(1235);
+emit_16(1169);
+emit_16(1236);
+emit_16(1170);
+emit_16(1236);
+emit_16(1169);
+emit_16(1236);
+emit_16(1170);
+emit_16(1237);
+emit_16(1171);
+emit_16(1237);
+emit_16(1170);
+emit_16(1237);
+emit_16(1171);
+emit_16(1238);
+emit_16(1172);
+emit_16(1238);
+emit_16(1171);
+emit_16(1238);
+emit_16(1172);
+emit_16(1239);
+emit_16(1173);
+emit_16(1239);
+emit_16(1172);
+emit_16(1239);
+emit_16(1173);
+emit_16(1240);
+emit_16(1174);
+emit_16(1240);
+emit_16(1173);
+emit_16(1240);
+emit_16(1174);
+emit_16(1241);
+emit_16(1175);
+emit_16(1241);
+emit_16(1174);
+emit_16(1241);
+emit_16(1175);
+emit_16(1242);
+emit_16(1176);
+emit_16(1242);
+emit_16(1175);
+emit_16(1242);
+emit_16(1176);
+emit_16(1243);
+emit_16(1177);
+emit_16(1243);
+emit_16(1176);
+emit_16(1243);
+emit_16(1177);
+emit_16(1244);
+emit_16(1178);
+emit_16(1244);
+emit_16(1177);
+emit_16(1244);
+emit_16(1178);
+emit_16(1245);
+emit_16(1179);
+emit_16(1245);
+emit_16(1178);
+emit_16(1245);
+emit_16(1179);
+emit_16(1246);
+emit_16(1180);
+emit_16(1246);
+emit_16(1179);
+emit_16(1246);
+emit_16(1180);
+emit_16(1247);
+emit_16(1181);
+emit_16(1247);
+emit_16(1180);
+emit_16(1247);
+emit_16(1181);
+emit_16(1248);
+emit_16(1182);
+emit_16(1248);
+emit_16(1181);
+emit_16(1248);
+emit_16(1182);
+emit_16(1249);
+emit_16(1183);
+emit_16(1249);
+emit_16(1182);
+emit_16(1249);
+emit_16(1183);
+emit_16(1250);
+emit_16(1184);
+emit_16(1250);
+emit_16(1183);
+emit_16(1250);
+emit_16(1184);
+emit_16(1251);
+emit_16(1185);
+emit_16(1251);
+emit_16(1184);
+emit_16(1251);
+emit_16(1185);
+emit_16(1252);
+emit_16(1186);
+emit_16(1252);
+emit_16(1185);
+emit_16(1252);
+emit_16(1186);
+emit_16(1253);
+emit_16(1187);
+emit_16(1253);
+emit_16(1186);
+emit_16(1254);
+emit_16(1188);
+emit_16(1255);
+emit_16(1189);
+emit_16(1255);
+emit_16(1188);
+emit_16(1255);
+emit_16(1189);
+emit_16(1256);
+emit_16(1190);
+emit_16(1256);
+emit_16(1189);
+emit_16(1256);
+emit_16(1190);
+emit_16(1257);
+emit_16(1191);
+emit_16(1257);
+emit_16(1190);
+emit_16(1257);
+emit_16(1191);
+emit_16(1258);
+emit_16(1192);
+emit_16(1258);
+emit_16(1191);
+emit_16(1258);
+emit_16(1192);
+emit_16(1259);
+emit_16(1193);
+emit_16(1259);
+emit_16(1192);
+emit_16(1259);
+emit_16(1193);
+emit_16(1260);
+emit_16(1194);
+emit_16(1260);
+emit_16(1193);
+emit_16(1260);
+emit_16(1194);
+emit_16(1261);
+emit_16(1195);
+emit_16(1261);
+emit_16(1194);
+emit_16(1261);
+emit_16(1195);
+emit_16(1262);
+emit_16(1196);
+emit_16(1262);
+emit_16(1195);
+emit_16(1262);
+emit_16(1196);
+emit_16(1263);
+emit_16(1197);
+emit_16(1263);
+emit_16(1196);
+emit_16(1263);
+emit_16(1197);
+emit_16(1264);
+emit_16(1198);
+emit_16(1264);
+emit_16(1197);
+emit_16(1264);
+emit_16(1198);
+emit_16(1265);
+emit_16(1199);
+emit_16(1265);
+emit_16(1198);
+emit_16(1265);
+emit_16(1199);
+emit_16(1266);
+emit_16(1200);
+emit_16(1266);
+emit_16(1199);
+emit_16(1266);
+emit_16(1200);
+emit_16(1267);
+emit_16(1201);
+emit_16(1267);
+emit_16(1200);
+emit_16(1267);
+emit_16(1201);
+emit_16(1268);
+emit_16(1202);
+emit_16(1268);
+emit_16(1201);
+emit_16(1268);
+emit_16(1202);
+emit_16(1269);
+emit_16(1203);
+emit_16(1269);
+emit_16(1202);
+emit_16(1269);
+emit_16(1203);
+emit_16(1270);
+emit_16(1204);
+emit_16(1270);
+emit_16(1203);
+emit_16(1270);
+emit_16(1204);
+emit_16(1271);
+emit_16(1205);
+emit_16(1271);
+emit_16(1204);
+emit_16(1271);
+emit_16(1205);
+emit_16(1272);
+emit_16(1206);
+emit_16(1272);
+emit_16(1205);
+emit_16(1272);
+emit_16(1206);
+emit_16(1273);
+emit_16(1207);
+emit_16(1273);
+emit_16(1206);
+emit_16(1273);
+emit_16(1207);
+emit_16(1274);
+emit_16(1208);
+emit_16(1274);
+emit_16(1207);
+emit_16(1274);
+emit_16(1208);
+emit_16(1275);
+emit_16(1209);
+emit_16(1275);
+emit_16(1208);
+emit_16(1275);
+emit_16(1209);
+emit_16(1276);
+emit_16(1210);
+emit_16(1276);
+emit_16(1209);
+emit_16(1276);
+emit_16(1210);
+emit_16(1277);
+emit_16(1211);
+emit_16(1277);
+emit_16(1210);
+emit_16(1277);
+emit_16(1211);
+emit_16(1278);
+emit_16(1212);
+emit_16(1278);
+emit_16(1211);
+emit_16(1278);
+emit_16(1212);
+emit_16(1279);
+emit_16(1213);
+emit_16(1279);
+emit_16(1212);
+emit_16(1279);
+emit_16(1213);
+emit_16(1280);
+emit_16(1214);
+emit_16(1280);
+emit_16(1213);
+emit_16(1280);
+emit_16(1214);
+emit_16(1281);
+emit_16(1215);
+emit_16(1281);
+emit_16(1214);
+emit_16(1281);
+emit_16(1215);
+emit_16(1282);
+emit_16(1216);
+emit_16(1282);
+emit_16(1215);
+emit_16(1282);
+emit_16(1216);
+emit_16(1283);
+emit_16(1217);
+emit_16(1283);
+emit_16(1216);
+emit_16(1283);
+emit_16(1217);
+emit_16(1284);
+emit_16(1218);
+emit_16(1284);
+emit_16(1217);
+emit_16(1284);
+emit_16(1218);
+emit_16(1285);
+emit_16(1219);
+emit_16(1285);
+emit_16(1218);
+emit_16(1285);
+emit_16(1219);
+emit_16(1286);
+emit_16(1220);
+emit_16(1286);
+emit_16(1219);
+emit_16(1286);
+emit_16(1220);
+emit_16(1287);
+emit_16(1221);
+emit_16(1287);
+emit_16(1220);
+emit_16(1287);
+emit_16(1221);
+emit_16(1288);
+emit_16(1222);
+emit_16(1288);
+emit_16(1221);
+emit_16(1288);
+emit_16(1222);
+emit_16(1289);
+emit_16(1223);
+emit_16(1289);
+emit_16(1222);
+emit_16(1289);
+emit_16(1223);
+emit_16(1290);
+emit_16(1224);
+emit_16(1290);
+emit_16(1223);
+emit_16(1290);
+emit_16(1224);
+emit_16(1291);
+emit_16(1225);
+emit_16(1291);
+emit_16(1224);
+emit_16(1291);
+emit_16(1225);
+emit_16(1292);
+emit_16(1226);
+emit_16(1292);
+emit_16(1225);
+emit_16(1292);
+emit_16(1226);
+emit_16(1293);
+emit_16(1227);
+emit_16(1293);
+emit_16(1226);
+emit_16(1293);
+emit_16(1227);
+emit_16(1294);
+emit_16(1228);
+emit_16(1294);
+emit_16(1227);
+emit_16(1294);
+emit_16(1228);
+emit_16(1295);
+emit_16(1229);
+emit_16(1295);
+emit_16(1228);
+emit_16(1295);
+emit_16(1229);
+emit_16(1296);
+emit_16(1230);
+emit_16(1296);
+emit_16(1229);
+emit_16(1296);
+emit_16(1230);
+emit_16(1297);
+emit_16(1231);
+emit_16(1297);
+emit_16(1230);
+emit_16(1297);
+emit_16(1231);
+emit_16(1298);
+emit_16(1232);
+emit_16(1298);
+emit_16(1231);
+emit_16(1298);
+emit_16(1232);
+emit_16(1299);
+emit_16(1233);
+emit_16(1299);
+emit_16(1232);
+emit_16(1299);
+emit_16(1233);
+emit_16(1300);
+emit_16(1234);
+emit_16(1300);
+emit_16(1233);
+emit_16(1300);
+emit_16(1234);
+emit_16(1301);
+emit_16(1235);
+emit_16(1301);
+emit_16(1234);
+emit_16(1301);
+emit_16(1235);
+emit_16(1302);
+emit_16(1236);
+emit_16(1302);
+emit_16(1235);
+emit_16(1302);
+emit_16(1236);
+emit_16(1303);
+emit_16(1237);
+emit_16(1303);
+emit_16(1236);
+emit_16(1303);
+emit_16(1237);
+emit_16(1304);
+emit_16(1238);
+emit_16(1304);
+emit_16(1237);
+emit_16(1304);
+emit_16(1238);
+emit_16(1305);
+emit_16(1239);
+emit_16(1305);
+emit_16(1238);
+emit_16(1305);
+emit_16(1239);
+emit_16(1306);
+emit_16(1240);
+emit_16(1306);
+emit_16(1239);
+emit_16(1306);
+emit_16(1240);
+emit_16(1307);
+emit_16(1241);
+emit_16(1307);
+emit_16(1240);
+emit_16(1307);
+emit_16(1241);
+emit_16(1308);
+emit_16(1242);
+emit_16(1308);
+emit_16(1241);
+emit_16(1308);
+emit_16(1242);
+emit_16(1309);
+emit_16(1243);
+emit_16(1309);
+emit_16(1242);
+emit_16(1309);
+emit_16(1243);
+emit_16(1310);
+emit_16(1244);
+emit_16(1310);
+emit_16(1243);
+emit_16(1310);
+emit_16(1244);
+emit_16(1311);
+emit_16(1245);
+emit_16(1311);
+emit_16(1244);
+emit_16(1311);
+emit_16(1245);
+emit_16(1312);
+emit_16(1246);
+emit_16(1312);
+emit_16(1245);
+emit_16(1312);
+emit_16(1246);
+emit_16(1313);
+emit_16(1247);
+emit_16(1313);
+emit_16(1246);
+emit_16(1313);
+emit_16(1247);
+emit_16(1314);
+emit_16(1248);
+emit_16(1314);
+emit_16(1247);
+emit_16(1314);
+emit_16(1248);
+emit_16(1315);
+emit_16(1249);
+emit_16(1315);
+emit_16(1248);
+emit_16(1315);
+emit_16(1249);
+emit_16(1316);
+emit_16(1250);
+emit_16(1316);
+emit_16(1249);
+emit_16(1316);
+emit_16(1250);
+emit_16(1317);
+emit_16(1251);
+emit_16(1317);
+emit_16(1250);
+emit_16(1317);
+emit_16(1251);
+emit_16(1318);
+emit_16(1252);
+emit_16(1318);
+emit_16(1251);
+emit_16(1318);
+emit_16(1252);
+emit_16(1319);
+emit_16(1253);
+emit_16(1319);
+emit_16(1252);
+emit_16(1320);
+emit_16(1254);
+emit_16(1321);
+emit_16(1255);
+emit_16(1321);
+emit_16(1254);
+emit_16(1321);
+emit_16(1255);
+emit_16(1322);
+emit_16(1256);
+emit_16(1322);
+emit_16(1255);
+emit_16(1322);
+emit_16(1256);
+emit_16(1323);
+emit_16(1257);
+emit_16(1323);
+emit_16(1256);
+emit_16(1323);
+emit_16(1257);
+emit_16(1324);
+emit_16(1258);
+emit_16(1324);
+emit_16(1257);
+emit_16(1324);
+emit_16(1258);
+emit_16(1325);
+emit_16(1259);
+emit_16(1325);
+emit_16(1258);
+emit_16(1325);
+emit_16(1259);
+emit_16(1326);
+emit_16(1260);
+emit_16(1326);
+emit_16(1259);
+emit_16(1326);
+emit_16(1260);
+emit_16(1327);
+emit_16(1261);
+emit_16(1327);
+emit_16(1260);
+emit_16(1327);
+emit_16(1261);
+emit_16(1328);
+emit_16(1262);
+emit_16(1328);
+emit_16(1261);
+emit_16(1328);
+emit_16(1262);
+emit_16(1329);
+emit_16(1263);
+emit_16(1329);
+emit_16(1262);
+emit_16(1329);
+emit_16(1263);
+emit_16(1330);
+emit_16(1264);
+emit_16(1330);
+emit_16(1263);
+emit_16(1330);
+emit_16(1264);
+emit_16(1331);
+emit_16(1265);
+emit_16(1331);
+emit_16(1264);
+emit_16(1331);
+emit_16(1265);
+emit_16(1332);
+emit_16(1266);
+emit_16(1332);
+emit_16(1265);
+emit_16(1332);
+emit_16(1266);
+emit_16(1333);
+emit_16(1267);
+emit_16(1333);
+emit_16(1266);
+emit_16(1333);
+emit_16(1267);
+emit_16(1334);
+emit_16(1268);
+emit_16(1334);
+emit_16(1267);
+emit_16(1334);
+emit_16(1268);
+emit_16(1335);
+emit_16(1269);
+emit_16(1335);
+emit_16(1268);
+emit_16(1335);
+emit_16(1269);
+emit_16(1336);
+emit_16(1270);
+emit_16(1336);
+emit_16(1269);
+emit_16(1336);
+emit_16(1270);
+emit_16(1337);
+emit_16(1271);
+emit_16(1337);
+emit_16(1270);
+emit_16(1337);
+emit_16(1271);
+emit_16(1338);
+emit_16(1272);
+emit_16(1338);
+emit_16(1271);
+emit_16(1338);
+emit_16(1272);
+emit_16(1339);
+emit_16(1273);
+emit_16(1339);
+emit_16(1272);
+emit_16(1339);
+emit_16(1273);
+emit_16(1340);
+emit_16(1274);
+emit_16(1340);
+emit_16(1273);
+emit_16(1340);
+emit_16(1274);
+emit_16(1341);
+emit_16(1275);
+emit_16(1341);
+emit_16(1274);
+emit_16(1341);
+emit_16(1275);
+emit_16(1342);
+emit_16(1276);
+emit_16(1342);
+emit_16(1275);
+emit_16(1342);
+emit_16(1276);
+emit_16(1343);
+emit_16(1277);
+emit_16(1343);
+emit_16(1276);
+emit_16(1343);
+emit_16(1277);
+emit_16(1344);
+emit_16(1278);
+emit_16(1344);
+emit_16(1277);
+emit_16(1344);
+emit_16(1278);
+emit_16(1345);
+emit_16(1279);
+emit_16(1345);
+emit_16(1278);
+emit_16(1345);
+emit_16(1279);
+emit_16(1346);
+emit_16(1280);
+emit_16(1346);
+emit_16(1279);
+emit_16(1346);
+emit_16(1280);
+emit_16(1347);
+emit_16(1281);
+emit_16(1347);
+emit_16(1280);
+emit_16(1347);
+emit_16(1281);
+emit_16(1348);
+emit_16(1282);
+emit_16(1348);
+emit_16(1281);
+emit_16(1348);
+emit_16(1282);
+emit_16(1349);
+emit_16(1283);
+emit_16(1349);
+emit_16(1282);
+emit_16(1349);
+emit_16(1283);
+emit_16(1350);
+emit_16(1284);
+emit_16(1350);
+emit_16(1283);
+emit_16(1350);
+emit_16(1284);
+emit_16(1351);
+emit_16(1285);
+emit_16(1351);
+emit_16(1284);
+emit_16(1351);
+emit_16(1285);
+emit_16(1352);
+emit_16(1286);
+emit_16(1352);
+emit_16(1285);
+emit_16(1352);
+emit_16(1286);
+emit_16(1353);
+emit_16(1287);
+emit_16(1353);
+emit_16(1286);
+emit_16(1353);
+emit_16(1287);
+emit_16(1354);
+emit_16(1288);
+emit_16(1354);
+emit_16(1287);
+emit_16(1354);
+emit_16(1288);
+emit_16(1355);
+emit_16(1289);
+emit_16(1355);
+emit_16(1288);
+emit_16(1355);
+emit_16(1289);
+emit_16(1356);
+emit_16(1290);
+emit_16(1356);
+emit_16(1289);
+emit_16(1356);
+emit_16(1290);
+emit_16(1357);
+emit_16(1291);
+emit_16(1357);
+emit_16(1290);
+emit_16(1357);
+emit_16(1291);
+emit_16(1358);
+emit_16(1292);
+emit_16(1358);
+emit_16(1291);
+emit_16(1358);
+emit_16(1292);
+emit_16(1359);
+emit_16(1293);
+emit_16(1359);
+emit_16(1292);
+emit_16(1359);
+emit_16(1293);
+emit_16(1360);
+emit_16(1294);
+emit_16(1360);
+emit_16(1293);
+emit_16(1360);
+emit_16(1294);
+emit_16(1361);
+emit_16(1295);
+emit_16(1361);
+emit_16(1294);
+emit_16(1361);
+emit_16(1295);
+emit_16(1362);
+emit_16(1296);
+emit_16(1362);
+emit_16(1295);
+emit_16(1362);
+emit_16(1296);
+emit_16(1363);
+emit_16(1297);
+emit_16(1363);
+emit_16(1296);
+emit_16(1363);
+emit_16(1297);
+emit_16(1364);
+emit_16(1298);
+emit_16(1364);
+emit_16(1297);
+emit_16(1364);
+emit_16(1298);
+emit_16(1365);
+emit_16(1299);
+emit_16(1365);
+emit_16(1298);
+emit_16(1365);
+emit_16(1299);
+emit_16(1366);
+emit_16(1300);
+emit_16(1366);
+emit_16(1299);
+emit_16(1366);
+emit_16(1300);
+emit_16(1367);
+emit_16(1301);
+emit_16(1367);
+emit_16(1300);
+emit_16(1367);
+emit_16(1301);
+emit_16(1368);
+emit_16(1302);
+emit_16(1368);
+emit_16(1301);
+emit_16(1368);
+emit_16(1302);
+emit_16(1369);
+emit_16(1303);
+emit_16(1369);
+emit_16(1302);
+emit_16(1369);
+emit_16(1303);
+emit_16(1370);
+emit_16(1304);
+emit_16(1370);
+emit_16(1303);
+emit_16(1370);
+emit_16(1304);
+emit_16(1371);
+emit_16(1305);
+emit_16(1371);
+emit_16(1304);
+emit_16(1371);
+emit_16(1305);
+emit_16(1372);
+emit_16(1306);
+emit_16(1372);
+emit_16(1305);
+emit_16(1372);
+emit_16(1306);
+emit_16(1373);
+emit_16(1307);
+emit_16(1373);
+emit_16(1306);
+emit_16(1373);
+emit_16(1307);
+emit_16(1374);
+emit_16(1308);
+emit_16(1374);
+emit_16(1307);
+emit_16(1374);
+emit_16(1308);
+emit_16(1375);
+emit_16(1309);
+emit_16(1375);
+emit_16(1308);
+emit_16(1375);
+emit_16(1309);
+emit_16(1376);
+emit_16(1310);
+emit_16(1376);
+emit_16(1309);
+emit_16(1376);
+emit_16(1310);
+emit_16(1377);
+emit_16(1311);
+emit_16(1377);
+emit_16(1310);
+emit_16(1377);
+emit_16(1311);
+emit_16(1378);
+emit_16(1312);
+emit_16(1378);
+emit_16(1311);
+emit_16(1378);
+emit_16(1312);
+emit_16(1379);
+emit_16(1313);
+emit_16(1379);
+emit_16(1312);
+emit_16(1379);
+emit_16(1313);
+emit_16(1380);
+emit_16(1314);
+emit_16(1380);
+emit_16(1313);
+emit_16(1380);
+emit_16(1314);
+emit_16(1381);
+emit_16(1315);
+emit_16(1381);
+emit_16(1314);
+emit_16(1381);
+emit_16(1315);
+emit_16(1382);
+emit_16(1316);
+emit_16(1382);
+emit_16(1315);
+emit_16(1382);
+emit_16(1316);
+emit_16(1383);
+emit_16(1317);
+emit_16(1383);
+emit_16(1316);
+emit_16(1383);
+emit_16(1317);
+emit_16(1384);
+emit_16(1318);
+emit_16(1384);
+emit_16(1317);
+emit_16(1384);
+emit_16(1318);
+emit_16(1385);
+emit_16(1319);
+emit_16(1385);
+emit_16(1318);
+emit_16(1386);
+emit_16(1320);
+emit_16(1387);
+emit_16(1321);
+emit_16(1387);
+emit_16(1320);
+emit_16(1387);
+emit_16(1321);
+emit_16(1388);
+emit_16(1322);
+emit_16(1388);
+emit_16(1321);
+emit_16(1388);
+emit_16(1322);
+emit_16(1389);
+emit_16(1323);
+emit_16(1389);
+emit_16(1322);
+emit_16(1389);
+emit_16(1323);
+emit_16(1390);
+emit_16(1324);
+emit_16(1390);
+emit_16(1323);
+emit_16(1390);
+emit_16(1324);
+emit_16(1391);
+emit_16(1325);
+emit_16(1391);
+emit_16(1324);
+emit_16(1391);
+emit_16(1325);
+emit_16(1392);
+emit_16(1326);
+emit_16(1392);
+emit_16(1325);
+emit_16(1392);
+emit_16(1326);
+emit_16(1393);
+emit_16(1327);
+emit_16(1393);
+emit_16(1326);
+emit_16(1393);
+emit_16(1327);
+emit_16(1394);
+emit_16(1328);
+emit_16(1394);
+emit_16(1327);
+emit_16(1394);
+emit_16(1328);
+emit_16(1395);
+emit_16(1329);
+emit_16(1395);
+emit_16(1328);
+emit_16(1395);
+emit_16(1329);
+emit_16(1396);
+emit_16(1330);
+emit_16(1396);
+emit_16(1329);
+emit_16(1396);
+emit_16(1330);
+emit_16(1397);
+emit_16(1331);
+emit_16(1397);
+emit_16(1330);
+emit_16(1397);
+emit_16(1331);
+emit_16(1398);
+emit_16(1332);
+emit_16(1398);
+emit_16(1331);
+emit_16(1398);
+emit_16(1332);
+emit_16(1399);
+emit_16(1333);
+emit_16(1399);
+emit_16(1332);
+emit_16(1399);
+emit_16(1333);
+emit_16(1400);
+emit_16(1334);
+emit_16(1400);
+emit_16(1333);
+emit_16(1400);
+emit_16(1334);
+emit_16(1401);
+emit_16(1335);
+emit_16(1401);
+emit_16(1334);
+emit_16(1401);
+emit_16(1335);
+emit_16(1402);
+emit_16(1336);
+emit_16(1402);
+emit_16(1335);
+emit_16(1402);
+emit_16(1336);
+emit_16(1403);
+emit_16(1337);
+emit_16(1403);
+emit_16(1336);
+emit_16(1403);
+emit_16(1337);
+emit_16(1404);
+emit_16(1338);
+emit_16(1404);
+emit_16(1337);
+emit_16(1404);
+emit_16(1338);
+emit_16(1405);
+emit_16(1339);
+emit_16(1405);
+emit_16(1338);
+emit_16(1405);
+emit_16(1339);
+emit_16(1406);
+emit_16(1340);
+emit_16(1406);
+emit_16(1339);
+emit_16(1406);
+emit_16(1340);
+emit_16(1407);
+emit_16(1341);
+emit_16(1407);
+emit_16(1340);
+emit_16(1407);
+emit_16(1341);
+emit_16(1408);
+emit_16(1342);
+emit_16(1408);
+emit_16(1341);
+emit_16(1408);
+emit_16(1342);
+emit_16(1409);
+emit_16(1343);
+emit_16(1409);
+emit_16(1342);
+emit_16(1409);
+emit_16(1343);
+emit_16(1410);
+emit_16(1344);
+emit_16(1410);
+emit_16(1343);
+emit_16(1410);
+emit_16(1344);
+emit_16(1411);
+emit_16(1345);
+emit_16(1411);
+emit_16(1344);
+emit_16(1411);
+emit_16(1345);
+emit_16(1412);
+emit_16(1346);
+emit_16(1412);
+emit_16(1345);
+emit_16(1412);
+emit_16(1346);
+emit_16(1413);
+emit_16(1347);
+emit_16(1413);
+emit_16(1346);
+emit_16(1413);
+emit_16(1347);
+emit_16(1414);
+emit_16(1348);
+emit_16(1414);
+emit_16(1347);
+emit_16(1414);
+emit_16(1348);
+emit_16(1415);
+emit_16(1349);
+emit_16(1415);
+emit_16(1348);
+emit_16(1415);
+emit_16(1349);
+emit_16(1416);
+emit_16(1350);
+emit_16(1416);
+emit_16(1349);
+emit_16(1416);
+emit_16(1350);
+emit_16(1417);
+emit_16(1351);
+emit_16(1417);
+emit_16(1350);
+emit_16(1417);
+emit_16(1351);
+emit_16(1418);
+emit_16(1352);
+emit_16(1418);
+emit_16(1351);
+emit_16(1418);
+emit_16(1352);
+emit_16(1419);
+emit_16(1353);
+emit_16(1419);
+emit_16(1352);
+emit_16(1419);
+emit_16(1353);
+emit_16(1420);
+emit_16(1354);
+emit_16(1420);
+emit_16(1353);
+emit_16(1420);
+emit_16(1354);
+emit_16(1421);
+emit_16(1355);
+emit_16(1421);
+emit_16(1354);
+emit_16(1421);
+emit_16(1355);
+emit_16(1422);
+emit_16(1356);
+emit_16(1422);
+emit_16(1355);
+emit_16(1422);
+emit_16(1356);
+emit_16(1423);
+emit_16(1357);
+emit_16(1423);
+emit_16(1356);
+emit_16(1423);
+emit_16(1357);
+emit_16(1424);
+emit_16(1358);
+emit_16(1424);
+emit_16(1357);
+emit_16(1424);
+emit_16(1358);
+emit_16(1425);
+emit_16(1359);
+emit_16(1425);
+emit_16(1358);
+emit_16(1425);
+emit_16(1359);
+emit_16(1426);
+emit_16(1360);
+emit_16(1426);
+emit_16(1359);
+emit_16(1426);
+emit_16(1360);
+emit_16(1427);
+emit_16(1361);
+emit_16(1427);
+emit_16(1360);
+emit_16(1427);
+emit_16(1361);
+emit_16(1428);
+emit_16(1362);
+emit_16(1428);
+emit_16(1361);
+emit_16(1428);
+emit_16(1362);
+emit_16(1429);
+emit_16(1363);
+emit_16(1429);
+emit_16(1362);
+emit_16(1429);
+emit_16(1363);
+emit_16(1430);
+emit_16(1364);
+emit_16(1430);
+emit_16(1363);
+emit_16(1430);
+emit_16(1364);
+emit_16(1431);
+emit_16(1365);
+emit_16(1431);
+emit_16(1364);
+emit_16(1431);
+emit_16(1365);
+emit_16(1432);
+emit_16(1366);
+emit_16(1432);
+emit_16(1365);
+emit_16(1432);
+emit_16(1366);
+emit_16(1433);
+emit_16(1367);
+emit_16(1433);
+emit_16(1366);
+emit_16(1433);
+emit_16(1367);
+emit_16(1434);
+emit_16(1368);
+emit_16(1434);
+emit_16(1367);
+emit_16(1434);
+emit_16(1368);
+emit_16(1435);
+emit_16(1369);
+emit_16(1435);
+emit_16(1368);
+emit_16(1435);
+emit_16(1369);
+emit_16(1436);
+emit_16(1370);
+emit_16(1436);
+emit_16(1369);
+emit_16(1436);
+emit_16(1370);
+emit_16(1437);
+emit_16(1371);
+emit_16(1437);
+emit_16(1370);
+emit_16(1437);
+emit_16(1371);
+emit_16(1438);
+emit_16(1372);
+emit_16(1438);
+emit_16(1371);
+emit_16(1438);
+emit_16(1372);
+emit_16(1439);
+emit_16(1373);
+emit_16(1439);
+emit_16(1372);
+emit_16(1439);
+emit_16(1373);
+emit_16(1440);
+emit_16(1374);
+emit_16(1440);
+emit_16(1373);
+emit_16(1440);
+emit_16(1374);
+emit_16(1441);
+emit_16(1375);
+emit_16(1441);
+emit_16(1374);
+emit_16(1441);
+emit_16(1375);
+emit_16(1442);
+emit_16(1376);
+emit_16(1442);
+emit_16(1375);
+emit_16(1442);
+emit_16(1376);
+emit_16(1443);
+emit_16(1377);
+emit_16(1443);
+emit_16(1376);
+emit_16(1443);
+emit_16(1377);
+emit_16(1444);
+emit_16(1378);
+emit_16(1444);
+emit_16(1377);
+emit_16(1444);
+emit_16(1378);
+emit_16(1445);
+emit_16(1379);
+emit_16(1445);
+emit_16(1378);
+emit_16(1445);
+emit_16(1379);
+emit_16(1446);
+emit_16(1380);
+emit_16(1446);
+emit_16(1379);
+emit_16(1446);
+emit_16(1380);
+emit_16(1447);
+emit_16(1381);
+emit_16(1447);
+emit_16(1380);
+emit_16(1447);
+emit_16(1381);
+emit_16(1448);
+emit_16(1382);
+emit_16(1448);
+emit_16(1381);
+emit_16(1448);
+emit_16(1382);
+emit_16(1449);
+emit_16(1383);
+emit_16(1449);
+emit_16(1382);
+emit_16(1449);
+emit_16(1383);
+emit_16(1450);
+emit_16(1384);
+emit_16(1450);
+emit_16(1383);
+emit_16(1450);
+emit_16(1384);
+emit_16(1451);
+emit_16(1385);
+emit_16(1451);
+emit_16(1384);
+emit_16(1452);
+emit_16(1386);
+emit_16(1453);
+emit_16(1387);
+emit_16(1453);
+emit_16(1386);
+emit_16(1453);
+emit_16(1387);
+emit_16(1454);
+emit_16(1388);
+emit_16(1454);
+emit_16(1387);
+emit_16(1454);
+emit_16(1388);
+emit_16(1455);
+emit_16(1389);
+emit_16(1455);
+emit_16(1388);
+emit_16(1455);
+emit_16(1389);
+emit_16(1456);
+emit_16(1390);
+emit_16(1456);
+emit_16(1389);
+emit_16(1456);
+emit_16(1390);
+emit_16(1457);
+emit_16(1391);
+emit_16(1457);
+emit_16(1390);
+emit_16(1457);
+emit_16(1391);
+emit_16(1458);
+emit_16(1392);
+emit_16(1458);
+emit_16(1391);
+emit_16(1458);
+emit_16(1392);
+emit_16(1459);
+emit_16(1393);
+emit_16(1459);
+emit_16(1392);
+emit_16(1459);
+emit_16(1393);
+emit_16(1460);
+emit_16(1394);
+emit_16(1460);
+emit_16(1393);
+emit_16(1460);
+emit_16(1394);
+emit_16(1461);
+emit_16(1395);
+emit_16(1461);
+emit_16(1394);
+emit_16(1461);
+emit_16(1395);
+emit_16(1462);
+emit_16(1396);
+emit_16(1462);
+emit_16(1395);
+emit_16(1462);
+emit_16(1396);
+emit_16(1463);
+emit_16(1397);
+emit_16(1463);
+emit_16(1396);
+emit_16(1463);
+emit_16(1397);
+emit_16(1464);
+emit_16(1398);
+emit_16(1464);
+emit_16(1397);
+emit_16(1464);
+emit_16(1398);
+emit_16(1465);
+emit_16(1399);
+emit_16(1465);
+emit_16(1398);
+emit_16(1465);
+emit_16(1399);
+emit_16(1466);
+emit_16(1400);
+emit_16(1466);
+emit_16(1399);
+emit_16(1466);
+emit_16(1400);
+emit_16(1467);
+emit_16(1401);
+emit_16(1467);
+emit_16(1400);
+emit_16(1467);
+emit_16(1401);
+emit_16(1468);
+emit_16(1402);
+emit_16(1468);
+emit_16(1401);
+emit_16(1468);
+emit_16(1402);
+emit_16(1469);
+emit_16(1403);
+emit_16(1469);
+emit_16(1402);
+emit_16(1469);
+emit_16(1403);
+emit_16(1470);
+emit_16(1404);
+emit_16(1470);
+emit_16(1403);
+emit_16(1470);
+emit_16(1404);
+emit_16(1471);
+emit_16(1405);
+emit_16(1471);
+emit_16(1404);
+emit_16(1471);
+emit_16(1405);
+emit_16(1472);
+emit_16(1406);
+emit_16(1472);
+emit_16(1405);
+emit_16(1472);
+emit_16(1406);
+emit_16(1473);
+emit_16(1407);
+emit_16(1473);
+emit_16(1406);
+emit_16(1473);
+emit_16(1407);
+emit_16(1474);
+emit_16(1408);
+emit_16(1474);
+emit_16(1407);
+emit_16(1474);
+emit_16(1408);
+emit_16(1475);
+emit_16(1409);
+emit_16(1475);
+emit_16(1408);
+emit_16(1475);
+emit_16(1409);
+emit_16(1476);
+emit_16(1410);
+emit_16(1476);
+emit_16(1409);
+emit_16(1476);
+emit_16(1410);
+emit_16(1477);
+emit_16(1411);
+emit_16(1477);
+emit_16(1410);
+emit_16(1477);
+emit_16(1411);
+emit_16(1478);
+emit_16(1412);
+emit_16(1478);
+emit_16(1411);
+emit_16(1478);
+emit_16(1412);
+emit_16(1479);
+emit_16(1413);
+emit_16(1479);
+emit_16(1412);
+emit_16(1479);
+emit_16(1413);
+emit_16(1480);
+emit_16(1414);
+emit_16(1480);
+emit_16(1413);
+emit_16(1480);
+emit_16(1414);
+emit_16(1481);
+emit_16(1415);
+emit_16(1481);
+emit_16(1414);
+emit_16(1481);
+emit_16(1415);
+emit_16(1482);
+emit_16(1416);
+emit_16(1482);
+emit_16(1415);
+emit_16(1482);
+emit_16(1416);
+emit_16(1483);
+emit_16(1417);
+emit_16(1483);
+emit_16(1416);
+emit_16(1483);
+emit_16(1417);
+emit_16(1484);
+emit_16(1418);
+emit_16(1484);
+emit_16(1417);
+emit_16(1484);
+emit_16(1418);
+emit_16(1485);
+emit_16(1419);
+emit_16(1485);
+emit_16(1418);
+emit_16(1485);
+emit_16(1419);
+emit_16(1486);
+emit_16(1420);
+emit_16(1486);
+emit_16(1419);
+emit_16(1486);
+emit_16(1420);
+emit_16(1487);
+emit_16(1421);
+emit_16(1487);
+emit_16(1420);
+emit_16(1487);
+emit_16(1421);
+emit_16(1488);
+emit_16(1422);
+emit_16(1488);
+emit_16(1421);
+emit_16(1488);
+emit_16(1422);
+emit_16(1489);
+emit_16(1423);
+emit_16(1489);
+emit_16(1422);
+emit_16(1489);
+emit_16(1423);
+emit_16(1490);
+emit_16(1424);
+emit_16(1490);
+emit_16(1423);
+emit_16(1490);
+emit_16(1424);
+emit_16(1491);
+emit_16(1425);
+emit_16(1491);
+emit_16(1424);
+emit_16(1491);
+emit_16(1425);
+emit_16(1492);
+emit_16(1426);
+emit_16(1492);
+emit_16(1425);
+emit_16(1492);
+emit_16(1426);
+emit_16(1493);
+emit_16(1427);
+emit_16(1493);
+emit_16(1426);
+emit_16(1493);
+emit_16(1427);
+emit_16(1494);
+emit_16(1428);
+emit_16(1494);
+emit_16(1427);
+emit_16(1494);
+emit_16(1428);
+emit_16(1495);
+emit_16(1429);
+emit_16(1495);
+emit_16(1428);
+emit_16(1495);
+emit_16(1429);
+emit_16(1496);
+emit_16(1430);
+emit_16(1496);
+emit_16(1429);
+emit_16(1496);
+emit_16(1430);
+emit_16(1497);
+emit_16(1431);
+emit_16(1497);
+emit_16(1430);
+emit_16(1497);
+emit_16(1431);
+emit_16(1498);
+emit_16(1432);
+emit_16(1498);
+emit_16(1431);
+emit_16(1498);
+emit_16(1432);
+emit_16(1499);
+emit_16(1433);
+emit_16(1499);
+emit_16(1432);
+emit_16(1499);
+emit_16(1433);
+emit_16(1500);
+emit_16(1434);
+emit_16(1500);
+emit_16(1433);
+emit_16(1500);
+emit_16(1434);
+emit_16(1501);
+emit_16(1435);
+emit_16(1501);
+emit_16(1434);
+emit_16(1501);
+emit_16(1435);
+emit_16(1502);
+emit_16(1436);
+emit_16(1502);
+emit_16(1435);
+emit_16(1502);
+emit_16(1436);
+emit_16(1503);
+emit_16(1437);
+emit_16(1503);
+emit_16(1436);
+emit_16(1503);
+emit_16(1437);
+emit_16(1504);
+emit_16(1438);
+emit_16(1504);
+emit_16(1437);
+emit_16(1504);
+emit_16(1438);
+emit_16(1505);
+emit_16(1439);
+emit_16(1505);
+emit_16(1438);
+emit_16(1505);
+emit_16(1439);
+emit_16(1506);
+emit_16(1440);
+emit_16(1506);
+emit_16(1439);
+emit_16(1506);
+emit_16(1440);
+emit_16(1507);
+emit_16(1441);
+emit_16(1507);
+emit_16(1440);
+emit_16(1507);
+emit_16(1441);
+emit_16(1508);
+emit_16(1442);
+emit_16(1508);
+emit_16(1441);
+emit_16(1508);
+emit_16(1442);
+emit_16(1509);
+emit_16(1443);
+emit_16(1509);
+emit_16(1442);
+emit_16(1509);
+emit_16(1443);
+emit_16(1510);
+emit_16(1444);
+emit_16(1510);
+emit_16(1443);
+emit_16(1510);
+emit_16(1444);
+emit_16(1511);
+emit_16(1445);
+emit_16(1511);
+emit_16(1444);
+emit_16(1511);
+emit_16(1445);
+emit_16(1512);
+emit_16(1446);
+emit_16(1512);
+emit_16(1445);
+emit_16(1512);
+emit_16(1446);
+emit_16(1513);
+emit_16(1447);
+emit_16(1513);
+emit_16(1446);
+emit_16(1513);
+emit_16(1447);
+emit_16(1514);
+emit_16(1448);
+emit_16(1514);
+emit_16(1447);
+emit_16(1514);
+emit_16(1448);
+emit_16(1515);
+emit_16(1449);
+emit_16(1515);
+emit_16(1448);
+emit_16(1515);
+emit_16(1449);
+emit_16(1516);
+emit_16(1450);
+emit_16(1516);
+emit_16(1449);
+emit_16(1516);
+emit_16(1450);
+emit_16(1517);
+emit_16(1451);
+emit_16(1517);
+emit_16(1450);
+emit_16(1518);
+emit_16(1452);
+emit_16(1519);
+emit_16(1453);
+emit_16(1519);
+emit_16(1452);
+emit_16(1519);
+emit_16(1453);
+emit_16(1520);
+emit_16(1454);
+emit_16(1520);
+emit_16(1453);
+emit_16(1520);
+emit_16(1454);
+emit_16(1521);
+emit_16(1455);
+emit_16(1521);
+emit_16(1454);
+emit_16(1521);
+emit_16(1455);
+emit_16(1522);
+emit_16(1456);
+emit_16(1522);
+emit_16(1455);
+emit_16(1522);
+emit_16(1456);
+emit_16(1523);
+emit_16(1457);
+emit_16(1523);
+emit_16(1456);
+emit_16(1523);
+emit_16(1457);
+emit_16(1524);
+emit_16(1458);
+emit_16(1524);
+emit_16(1457);
+emit_16(1524);
+emit_16(1458);
+emit_16(1525);
+emit_16(1459);
+emit_16(1525);
+emit_16(1458);
+emit_16(1525);
+emit_16(1459);
+emit_16(1526);
+emit_16(1460);
+emit_16(1526);
+emit_16(1459);
+emit_16(1526);
+emit_16(1460);
+emit_16(1527);
+emit_16(1461);
+emit_16(1527);
+emit_16(1460);
+emit_16(1527);
+emit_16(1461);
+emit_16(1528);
+emit_16(1462);
+emit_16(1528);
+emit_16(1461);
+emit_16(1528);
+emit_16(1462);
+emit_16(1529);
+emit_16(1463);
+emit_16(1529);
+emit_16(1462);
+emit_16(1529);
+emit_16(1463);
+emit_16(1530);
+emit_16(1464);
+emit_16(1530);
+emit_16(1463);
+emit_16(1530);
+emit_16(1464);
+emit_16(1531);
+emit_16(1465);
+emit_16(1531);
+emit_16(1464);
+emit_16(1531);
+emit_16(1465);
+emit_16(1532);
+emit_16(1466);
+emit_16(1532);
+emit_16(1465);
+emit_16(1532);
+emit_16(1466);
+emit_16(1533);
+emit_16(1467);
+emit_16(1533);
+emit_16(1466);
+emit_16(1533);
+emit_16(1467);
+emit_16(1534);
+emit_16(1468);
+emit_16(1534);
+emit_16(1467);
+emit_16(1534);
+emit_16(1468);
+emit_16(1535);
+emit_16(1469);
+emit_16(1535);
+emit_16(1468);
+emit_16(1535);
+emit_16(1469);
+emit_16(1536);
+emit_16(1470);
+emit_16(1536);
+emit_16(1469);
+emit_16(1536);
+emit_16(1470);
+emit_16(1537);
+emit_16(1471);
+emit_16(1537);
+emit_16(1470);
+emit_16(1537);
+emit_16(1471);
+emit_16(1538);
+emit_16(1472);
+emit_16(1538);
+emit_16(1471);
+emit_16(1538);
+emit_16(1472);
+emit_16(1539);
+emit_16(1473);
+emit_16(1539);
+emit_16(1472);
+emit_16(1539);
+emit_16(1473);
+emit_16(1540);
+emit_16(1474);
+emit_16(1540);
+emit_16(1473);
+emit_16(1540);
+emit_16(1474);
+emit_16(1541);
+emit_16(1475);
+emit_16(1541);
+emit_16(1474);
+emit_16(1541);
+emit_16(1475);
+emit_16(1542);
+emit_16(1476);
+emit_16(1542);
+emit_16(1475);
+emit_16(1542);
+emit_16(1476);
+emit_16(1543);
+emit_16(1477);
+emit_16(1543);
+emit_16(1476);
+emit_16(1543);
+emit_16(1477);
+emit_16(1544);
+emit_16(1478);
+emit_16(1544);
+emit_16(1477);
+emit_16(1544);
+emit_16(1478);
+emit_16(1545);
+emit_16(1479);
+emit_16(1545);
+emit_16(1478);
+emit_16(1545);
+emit_16(1479);
+emit_16(1546);
+emit_16(1480);
+emit_16(1546);
+emit_16(1479);
+emit_16(1546);
+emit_16(1480);
+emit_16(1547);
+emit_16(1481);
+emit_16(1547);
+emit_16(1480);
+emit_16(1547);
+emit_16(1481);
+emit_16(1548);
+emit_16(1482);
+emit_16(1548);
+emit_16(1481);
+emit_16(1548);
+emit_16(1482);
+emit_16(1549);
+emit_16(1483);
+emit_16(1549);
+emit_16(1482);
+emit_16(1549);
+emit_16(1483);
+emit_16(1550);
+emit_16(1484);
+emit_16(1550);
+emit_16(1483);
+emit_16(1550);
+emit_16(1484);
+emit_16(1551);
+emit_16(1485);
+emit_16(1551);
+emit_16(1484);
+emit_16(1551);
+emit_16(1485);
+emit_16(1552);
+emit_16(1486);
+emit_16(1552);
+emit_16(1485);
+emit_16(1552);
+emit_16(1486);
+emit_16(1553);
+emit_16(1487);
+emit_16(1553);
+emit_16(1486);
+emit_16(1553);
+emit_16(1487);
+emit_16(1554);
+emit_16(1488);
+emit_16(1554);
+emit_16(1487);
+emit_16(1554);
+emit_16(1488);
+emit_16(1555);
+emit_16(1489);
+emit_16(1555);
+emit_16(1488);
+emit_16(1555);
+emit_16(1489);
+emit_16(1556);
+emit_16(1490);
+emit_16(1556);
+emit_16(1489);
+emit_16(1556);
+emit_16(1490);
+emit_16(1557);
+emit_16(1491);
+emit_16(1557);
+emit_16(1490);
+emit_16(1557);
+emit_16(1491);
+emit_16(1558);
+emit_16(1492);
+emit_16(1558);
+emit_16(1491);
+emit_16(1558);
+emit_16(1492);
+emit_16(1559);
+emit_16(1493);
+emit_16(1559);
+emit_16(1492);
+emit_16(1559);
+emit_16(1493);
+emit_16(1560);
+emit_16(1494);
+emit_16(1560);
+emit_16(1493);
+emit_16(1560);
+emit_16(1494);
+emit_16(1561);
+emit_16(1495);
+emit_16(1561);
+emit_16(1494);
+emit_16(1561);
+emit_16(1495);
+emit_16(1562);
+emit_16(1496);
+emit_16(1562);
+emit_16(1495);
+emit_16(1562);
+emit_16(1496);
+emit_16(1563);
+emit_16(1497);
+emit_16(1563);
+emit_16(1496);
+emit_16(1563);
+emit_16(1497);
+emit_16(1564);
+emit_16(1498);
+emit_16(1564);
+emit_16(1497);
+emit_16(1564);
+emit_16(1498);
+emit_16(1565);
+emit_16(1499);
+emit_16(1565);
+emit_16(1498);
+emit_16(1565);
+emit_16(1499);
+emit_16(1566);
+emit_16(1500);
+emit_16(1566);
+emit_16(1499);
+emit_16(1566);
+emit_16(1500);
+emit_16(1567);
+emit_16(1501);
+emit_16(1567);
+emit_16(1500);
+emit_16(1567);
+emit_16(1501);
+emit_16(1568);
+emit_16(1502);
+emit_16(1568);
+emit_16(1501);
+emit_16(1568);
+emit_16(1502);
+emit_16(1569);
+emit_16(1503);
+emit_16(1569);
+emit_16(1502);
+emit_16(1569);
+emit_16(1503);
+emit_16(1570);
+emit_16(1504);
+emit_16(1570);
+emit_16(1503);
+emit_16(1570);
+emit_16(1504);
+emit_16(1571);
+emit_16(1505);
+emit_16(1571);
+emit_16(1504);
+emit_16(1571);
+emit_16(1505);
+emit_16(1572);
+emit_16(1506);
+emit_16(1572);
+emit_16(1505);
+emit_16(1572);
+emit_16(1506);
+emit_16(1573);
+emit_16(1507);
+emit_16(1573);
+emit_16(1506);
+emit_16(1573);
+emit_16(1507);
+emit_16(1574);
+emit_16(1508);
+emit_16(1574);
+emit_16(1507);
+emit_16(1574);
+emit_16(1508);
+emit_16(1575);
+emit_16(1509);
+emit_16(1575);
+emit_16(1508);
+emit_16(1575);
+emit_16(1509);
+emit_16(1576);
+emit_16(1510);
+emit_16(1576);
+emit_16(1509);
+emit_16(1576);
+emit_16(1510);
+emit_16(1577);
+emit_16(1511);
+emit_16(1577);
+emit_16(1510);
+emit_16(1577);
+emit_16(1511);
+emit_16(1578);
+emit_16(1512);
+emit_16(1578);
+emit_16(1511);
+emit_16(1578);
+emit_16(1512);
+emit_16(1579);
+emit_16(1513);
+emit_16(1579);
+emit_16(1512);
+emit_16(1579);
+emit_16(1513);
+emit_16(1580);
+emit_16(1514);
+emit_16(1580);
+emit_16(1513);
+emit_16(1580);
+emit_16(1514);
+emit_16(1581);
+emit_16(1515);
+emit_16(1581);
+emit_16(1514);
+emit_16(1581);
+emit_16(1515);
+emit_16(1582);
+emit_16(1516);
+emit_16(1582);
+emit_16(1515);
+emit_16(1582);
+emit_16(1516);
+emit_16(1583);
+emit_16(1517);
+emit_16(1583);
+emit_16(1516);
+emit_16(1584);
+emit_16(1518);
+emit_16(1585);
+emit_16(1519);
+emit_16(1585);
+emit_16(1518);
+emit_16(1585);
+emit_16(1519);
+emit_16(1586);
+emit_16(1520);
+emit_16(1586);
+emit_16(1519);
+emit_16(1586);
+emit_16(1520);
+emit_16(1587);
+emit_16(1521);
+emit_16(1587);
+emit_16(1520);
+emit_16(1587);
+emit_16(1521);
+emit_16(1588);
+emit_16(1522);
+emit_16(1588);
+emit_16(1521);
+emit_16(1588);
+emit_16(1522);
+emit_16(1589);
+emit_16(1523);
+emit_16(1589);
+emit_16(1522);
+emit_16(1589);
+emit_16(1523);
+emit_16(1590);
+emit_16(1524);
+emit_16(1590);
+emit_16(1523);
+emit_16(1590);
+emit_16(1524);
+emit_16(1591);
+emit_16(1525);
+emit_16(1591);
+emit_16(1524);
+emit_16(1591);
+emit_16(1525);
+emit_16(1592);
+emit_16(1526);
+emit_16(1592);
+emit_16(1525);
+emit_16(1592);
+emit_16(1526);
+emit_16(1593);
+emit_16(1527);
+emit_16(1593);
+emit_16(1526);
+emit_16(1593);
+emit_16(1527);
+emit_16(1594);
+emit_16(1528);
+emit_16(1594);
+emit_16(1527);
+emit_16(1594);
+emit_16(1528);
+emit_16(1595);
+emit_16(1529);
+emit_16(1595);
+emit_16(1528);
+emit_16(1595);
+emit_16(1529);
+emit_16(1596);
+emit_16(1530);
+emit_16(1596);
+emit_16(1529);
+emit_16(1596);
+emit_16(1530);
+emit_16(1597);
+emit_16(1531);
+emit_16(1597);
+emit_16(1530);
+emit_16(1597);
+emit_16(1531);
+emit_16(1598);
+emit_16(1532);
+emit_16(1598);
+emit_16(1531);
+emit_16(1598);
+emit_16(1532);
+emit_16(1599);
+emit_16(1533);
+emit_16(1599);
+emit_16(1532);
+emit_16(1599);
+emit_16(1533);
+emit_16(1600);
+emit_16(1534);
+emit_16(1600);
+emit_16(1533);
+emit_16(1600);
+emit_16(1534);
+emit_16(1601);
+emit_16(1535);
+emit_16(1601);
+emit_16(1534);
+emit_16(1601);
+emit_16(1535);
+emit_16(1602);
+emit_16(1536);
+emit_16(1602);
+emit_16(1535);
+emit_16(1602);
+emit_16(1536);
+emit_16(1603);
+emit_16(1537);
+emit_16(1603);
+emit_16(1536);
+emit_16(1603);
+emit_16(1537);
+emit_16(1604);
+emit_16(1538);
+emit_16(1604);
+emit_16(1537);
+emit_16(1604);
+emit_16(1538);
+emit_16(1605);
+emit_16(1539);
+emit_16(1605);
+emit_16(1538);
+emit_16(1605);
+emit_16(1539);
+emit_16(1606);
+emit_16(1540);
+emit_16(1606);
+emit_16(1539);
+emit_16(1606);
+emit_16(1540);
+emit_16(1607);
+emit_16(1541);
+emit_16(1607);
+emit_16(1540);
+emit_16(1607);
+emit_16(1541);
+emit_16(1608);
+emit_16(1542);
+emit_16(1608);
+emit_16(1541);
+emit_16(1608);
+emit_16(1542);
+emit_16(1609);
+emit_16(1543);
+emit_16(1609);
+emit_16(1542);
+emit_16(1609);
+emit_16(1543);
+emit_16(1610);
+emit_16(1544);
+emit_16(1610);
+emit_16(1543);
+emit_16(1610);
+emit_16(1544);
+emit_16(1611);
+emit_16(1545);
+emit_16(1611);
+emit_16(1544);
+emit_16(1611);
+emit_16(1545);
+emit_16(1612);
+emit_16(1546);
+emit_16(1612);
+emit_16(1545);
+emit_16(1612);
+emit_16(1546);
+emit_16(1613);
+emit_16(1547);
+emit_16(1613);
+emit_16(1546);
+emit_16(1613);
+emit_16(1547);
+emit_16(1614);
+emit_16(1548);
+emit_16(1614);
+emit_16(1547);
+emit_16(1614);
+emit_16(1548);
+emit_16(1615);
+emit_16(1549);
+emit_16(1615);
+emit_16(1548);
+emit_16(1615);
+emit_16(1549);
+emit_16(1616);
+emit_16(1550);
+emit_16(1616);
+emit_16(1549);
+emit_16(1616);
+emit_16(1550);
+emit_16(1617);
+emit_16(1551);
+emit_16(1617);
+emit_16(1550);
+emit_16(1617);
+emit_16(1551);
+emit_16(1618);
+emit_16(1552);
+emit_16(1618);
+emit_16(1551);
+emit_16(1618);
+emit_16(1552);
+emit_16(1619);
+emit_16(1553);
+emit_16(1619);
+emit_16(1552);
+emit_16(1619);
+emit_16(1553);
+emit_16(1620);
+emit_16(1554);
+emit_16(1620);
+emit_16(1553);
+emit_16(1620);
+emit_16(1554);
+emit_16(1621);
+emit_16(1555);
+emit_16(1621);
+emit_16(1554);
+emit_16(1621);
+emit_16(1555);
+emit_16(1622);
+emit_16(1556);
+emit_16(1622);
+emit_16(1555);
+emit_16(1622);
+emit_16(1556);
+emit_16(1623);
+emit_16(1557);
+emit_16(1623);
+emit_16(1556);
+emit_16(1623);
+emit_16(1557);
+emit_16(1624);
+emit_16(1558);
+emit_16(1624);
+emit_16(1557);
+emit_16(1624);
+emit_16(1558);
+emit_16(1625);
+emit_16(1559);
+emit_16(1625);
+emit_16(1558);
+emit_16(1625);
+emit_16(1559);
+emit_16(1626);
+emit_16(1560);
+emit_16(1626);
+emit_16(1559);
+emit_16(1626);
+emit_16(1560);
+emit_16(1627);
+emit_16(1561);
+emit_16(1627);
+emit_16(1560);
+emit_16(1627);
+emit_16(1561);
+emit_16(1628);
+emit_16(1562);
+emit_16(1628);
+emit_16(1561);
+emit_16(1628);
+emit_16(1562);
+emit_16(1629);
+emit_16(1563);
+emit_16(1629);
+emit_16(1562);
+emit_16(1629);
+emit_16(1563);
+emit_16(1630);
+emit_16(1564);
+emit_16(1630);
+emit_16(1563);
+emit_16(1630);
+emit_16(1564);
+emit_16(1631);
+emit_16(1565);
+emit_16(1631);
+emit_16(1564);
+emit_16(1631);
+emit_16(1565);
+emit_16(1632);
+emit_16(1566);
+emit_16(1632);
+emit_16(1565);
+emit_16(1632);
+emit_16(1566);
+emit_16(1633);
+emit_16(1567);
+emit_16(1633);
+emit_16(1566);
+emit_16(1633);
+emit_16(1567);
+emit_16(1634);
+emit_16(1568);
+emit_16(1634);
+emit_16(1567);
+emit_16(1634);
+emit_16(1568);
+emit_16(1635);
+emit_16(1569);
+emit_16(1635);
+emit_16(1568);
+emit_16(1635);
+emit_16(1569);
+emit_16(1636);
+emit_16(1570);
+emit_16(1636);
+emit_16(1569);
+emit_16(1636);
+emit_16(1570);
+emit_16(1637);
+emit_16(1571);
+emit_16(1637);
+emit_16(1570);
+emit_16(1637);
+emit_16(1571);
+emit_16(1638);
+emit_16(1572);
+emit_16(1638);
+emit_16(1571);
+emit_16(1638);
+emit_16(1572);
+emit_16(1639);
+emit_16(1573);
+emit_16(1639);
+emit_16(1572);
+emit_16(1639);
+emit_16(1573);
+emit_16(1640);
+emit_16(1574);
+emit_16(1640);
+emit_16(1573);
+emit_16(1640);
+emit_16(1574);
+emit_16(1641);
+emit_16(1575);
+emit_16(1641);
+emit_16(1574);
+emit_16(1641);
+emit_16(1575);
+emit_16(1642);
+emit_16(1576);
+emit_16(1642);
+emit_16(1575);
+emit_16(1642);
+emit_16(1576);
+emit_16(1643);
+emit_16(1577);
+emit_16(1643);
+emit_16(1576);
+emit_16(1643);
+emit_16(1577);
+emit_16(1644);
+emit_16(1578);
+emit_16(1644);
+emit_16(1577);
+emit_16(1644);
+emit_16(1578);
+emit_16(1645);
+emit_16(1579);
+emit_16(1645);
+emit_16(1578);
+emit_16(1645);
+emit_16(1579);
+emit_16(1646);
+emit_16(1580);
+emit_16(1646);
+emit_16(1579);
+emit_16(1646);
+emit_16(1580);
+emit_16(1647);
+emit_16(1581);
+emit_16(1647);
+emit_16(1580);
+emit_16(1647);
+emit_16(1581);
+emit_16(1648);
+emit_16(1582);
+emit_16(1648);
+emit_16(1581);
+emit_16(1648);
+emit_16(1582);
+emit_16(1649);
+emit_16(1583);
+emit_16(1649);
+emit_16(1582);
+emit_16(1650);
+emit_16(1584);
+emit_16(1651);
+emit_16(1585);
+emit_16(1651);
+emit_16(1584);
+emit_16(1651);
+emit_16(1585);
+emit_16(1652);
+emit_16(1586);
+emit_16(1652);
+emit_16(1585);
+emit_16(1652);
+emit_16(1586);
+emit_16(1653);
+emit_16(1587);
+emit_16(1653);
+emit_16(1586);
+emit_16(1653);
+emit_16(1587);
+emit_16(1654);
+emit_16(1588);
+emit_16(1654);
+emit_16(1587);
+emit_16(1654);
+emit_16(1588);
+emit_16(1655);
+emit_16(1589);
+emit_16(1655);
+emit_16(1588);
+emit_16(1655);
+emit_16(1589);
+emit_16(1656);
+emit_16(1590);
+emit_16(1656);
+emit_16(1589);
+emit_16(1656);
+emit_16(1590);
+emit_16(1657);
+emit_16(1591);
+emit_16(1657);
+emit_16(1590);
+emit_16(1657);
+emit_16(1591);
+emit_16(1658);
+emit_16(1592);
+emit_16(1658);
+emit_16(1591);
+emit_16(1658);
+emit_16(1592);
+emit_16(1659);
+emit_16(1593);
+emit_16(1659);
+emit_16(1592);
+emit_16(1659);
+emit_16(1593);
+emit_16(1660);
+emit_16(1594);
+emit_16(1660);
+emit_16(1593);
+emit_16(1660);
+emit_16(1594);
+emit_16(1661);
+emit_16(1595);
+emit_16(1661);
+emit_16(1594);
+emit_16(1661);
+emit_16(1595);
+emit_16(1662);
+emit_16(1596);
+emit_16(1662);
+emit_16(1595);
+emit_16(1662);
+emit_16(1596);
+emit_16(1663);
+emit_16(1597);
+emit_16(1663);
+emit_16(1596);
+emit_16(1663);
+emit_16(1597);
+emit_16(1664);
+emit_16(1598);
+emit_16(1664);
+emit_16(1597);
+emit_16(1664);
+emit_16(1598);
+emit_16(1665);
+emit_16(1599);
+emit_16(1665);
+emit_16(1598);
+emit_16(1665);
+emit_16(1599);
+emit_16(1666);
+emit_16(1600);
+emit_16(1666);
+emit_16(1599);
+emit_16(1666);
+emit_16(1600);
+emit_16(1667);
+emit_16(1601);
+emit_16(1667);
+emit_16(1600);
+emit_16(1667);
+emit_16(1601);
+emit_16(1668);
+emit_16(1602);
+emit_16(1668);
+emit_16(1601);
+emit_16(1668);
+emit_16(1602);
+emit_16(1669);
+emit_16(1603);
+emit_16(1669);
+emit_16(1602);
+emit_16(1669);
+emit_16(1603);
+emit_16(1670);
+emit_16(1604);
+emit_16(1670);
+emit_16(1603);
+emit_16(1670);
+emit_16(1604);
+emit_16(1671);
+emit_16(1605);
+emit_16(1671);
+emit_16(1604);
+emit_16(1671);
+emit_16(1605);
+emit_16(1672);
+emit_16(1606);
+emit_16(1672);
+emit_16(1605);
+emit_16(1672);
+emit_16(1606);
+emit_16(1673);
+emit_16(1607);
+emit_16(1673);
+emit_16(1606);
+emit_16(1673);
+emit_16(1607);
+emit_16(1674);
+emit_16(1608);
+emit_16(1674);
+emit_16(1607);
+emit_16(1674);
+emit_16(1608);
+emit_16(1675);
+emit_16(1609);
+emit_16(1675);
+emit_16(1608);
+emit_16(1675);
+emit_16(1609);
+emit_16(1676);
+emit_16(1610);
+emit_16(1676);
+emit_16(1609);
+emit_16(1676);
+emit_16(1610);
+emit_16(1677);
+emit_16(1611);
+emit_16(1677);
+emit_16(1610);
+emit_16(1677);
+emit_16(1611);
+emit_16(1678);
+emit_16(1612);
+emit_16(1678);
+emit_16(1611);
+emit_16(1678);
+emit_16(1612);
+emit_16(1679);
+emit_16(1613);
+emit_16(1679);
+emit_16(1612);
+emit_16(1679);
+emit_16(1613);
+emit_16(1680);
+emit_16(1614);
+emit_16(1680);
+emit_16(1613);
+emit_16(1680);
+emit_16(1614);
+emit_16(1681);
+emit_16(1615);
+emit_16(1681);
+emit_16(1614);
+emit_16(1681);
+emit_16(1615);
+emit_16(1682);
+emit_16(1616);
+emit_16(1682);
+emit_16(1615);
+emit_16(1682);
+emit_16(1616);
+emit_16(1683);
+emit_16(1617);
+emit_16(1683);
+emit_16(1616);
+emit_16(1683);
+emit_16(1617);
+emit_16(1684);
+emit_16(1618);
+emit_16(1684);
+emit_16(1617);
+emit_16(1684);
+emit_16(1618);
+emit_16(1685);
+emit_16(1619);
+emit_16(1685);
+emit_16(1618);
+emit_16(1685);
+emit_16(1619);
+emit_16(1686);
+emit_16(1620);
+emit_16(1686);
+emit_16(1619);
+emit_16(1686);
+emit_16(1620);
+emit_16(1687);
+emit_16(1621);
+emit_16(1687);
+emit_16(1620);
+emit_16(1687);
+emit_16(1621);
+emit_16(1688);
+emit_16(1622);
+emit_16(1688);
+emit_16(1621);
+emit_16(1688);
+emit_16(1622);
+emit_16(1689);
+emit_16(1623);
+emit_16(1689);
+emit_16(1622);
+emit_16(1689);
+emit_16(1623);
+emit_16(1690);
+emit_16(1624);
+emit_16(1690);
+emit_16(1623);
+emit_16(1690);
+emit_16(1624);
+emit_16(1691);
+emit_16(1625);
+emit_16(1691);
+emit_16(1624);
+emit_16(1691);
+emit_16(1625);
+emit_16(1692);
+emit_16(1626);
+emit_16(1692);
+emit_16(1625);
+emit_16(1692);
+emit_16(1626);
+emit_16(1693);
+emit_16(1627);
+emit_16(1693);
+emit_16(1626);
+emit_16(1693);
+emit_16(1627);
+emit_16(1694);
+emit_16(1628);
+emit_16(1694);
+emit_16(1627);
+emit_16(1694);
+emit_16(1628);
+emit_16(1695);
+emit_16(1629);
+emit_16(1695);
+emit_16(1628);
+emit_16(1695);
+emit_16(1629);
+emit_16(1696);
+emit_16(1630);
+emit_16(1696);
+emit_16(1629);
+emit_16(1696);
+emit_16(1630);
+emit_16(1697);
+emit_16(1631);
+emit_16(1697);
+emit_16(1630);
+emit_16(1697);
+emit_16(1631);
+emit_16(1698);
+emit_16(1632);
+emit_16(1698);
+emit_16(1631);
+emit_16(1698);
+emit_16(1632);
+emit_16(1699);
+emit_16(1633);
+emit_16(1699);
+emit_16(1632);
+emit_16(1699);
+emit_16(1633);
+emit_16(1700);
+emit_16(1634);
+emit_16(1700);
+emit_16(1633);
+emit_16(1700);
+emit_16(1634);
+emit_16(1701);
+emit_16(1635);
+emit_16(1701);
+emit_16(1634);
+emit_16(1701);
+emit_16(1635);
+emit_16(1702);
+emit_16(1636);
+emit_16(1702);
+emit_16(1635);
+emit_16(1702);
+emit_16(1636);
+emit_16(1703);
+emit_16(1637);
+emit_16(1703);
+emit_16(1636);
+emit_16(1703);
+emit_16(1637);
+emit_16(1704);
+emit_16(1638);
+emit_16(1704);
+emit_16(1637);
+emit_16(1704);
+emit_16(1638);
+emit_16(1705);
+emit_16(1639);
+emit_16(1705);
+emit_16(1638);
+emit_16(1705);
+emit_16(1639);
+emit_16(1706);
+emit_16(1640);
+emit_16(1706);
+emit_16(1639);
+emit_16(1706);
+emit_16(1640);
+emit_16(1707);
+emit_16(1641);
+emit_16(1707);
+emit_16(1640);
+emit_16(1707);
+emit_16(1641);
+emit_16(1708);
+emit_16(1642);
+emit_16(1708);
+emit_16(1641);
+emit_16(1708);
+emit_16(1642);
+emit_16(1709);
+emit_16(1643);
+emit_16(1709);
+emit_16(1642);
+emit_16(1709);
+emit_16(1643);
+emit_16(1710);
+emit_16(1644);
+emit_16(1710);
+emit_16(1643);
+emit_16(1710);
+emit_16(1644);
+emit_16(1711);
+emit_16(1645);
+emit_16(1711);
+emit_16(1644);
+emit_16(1711);
+emit_16(1645);
+emit_16(1712);
+emit_16(1646);
+emit_16(1712);
+emit_16(1645);
+emit_16(1712);
+emit_16(1646);
+emit_16(1713);
+emit_16(1647);
+emit_16(1713);
+emit_16(1646);
+emit_16(1713);
+emit_16(1647);
+emit_16(1714);
+emit_16(1648);
+emit_16(1714);
+emit_16(1647);
+emit_16(1714);
+emit_16(1648);
+emit_16(1715);
+emit_16(1649);
+emit_16(1715);
+emit_16(1648);
+emit_16(1716);
+emit_16(1650);
+emit_16(1717);
+emit_16(1651);
+emit_16(1717);
+emit_16(1650);
+emit_16(1717);
+emit_16(1651);
+emit_16(1718);
+emit_16(1652);
+emit_16(1718);
+emit_16(1651);
+emit_16(1718);
+emit_16(1652);
+emit_16(1719);
+emit_16(1653);
+emit_16(1719);
+emit_16(1652);
+emit_16(1719);
+emit_16(1653);
+emit_16(1720);
+emit_16(1654);
+emit_16(1720);
+emit_16(1653);
+emit_16(1720);
+emit_16(1654);
+emit_16(1721);
+emit_16(1655);
+emit_16(1721);
+emit_16(1654);
+emit_16(1721);
+emit_16(1655);
+emit_16(1722);
+emit_16(1656);
+emit_16(1722);
+emit_16(1655);
+emit_16(1722);
+emit_16(1656);
+emit_16(1723);
+emit_16(1657);
+emit_16(1723);
+emit_16(1656);
+emit_16(1723);
+emit_16(1657);
+emit_16(1724);
+emit_16(1658);
+emit_16(1724);
+emit_16(1657);
+emit_16(1724);
+emit_16(1658);
+emit_16(1725);
+emit_16(1659);
+emit_16(1725);
+emit_16(1658);
+emit_16(1725);
+emit_16(1659);
+emit_16(1726);
+emit_16(1660);
+emit_16(1726);
+emit_16(1659);
+emit_16(1726);
+emit_16(1660);
+emit_16(1727);
+emit_16(1661);
+emit_16(1727);
+emit_16(1660);
+emit_16(1727);
+emit_16(1661);
+emit_16(1728);
+emit_16(1662);
+emit_16(1728);
+emit_16(1661);
+emit_16(1728);
+emit_16(1662);
+emit_16(1729);
+emit_16(1663);
+emit_16(1729);
+emit_16(1662);
+emit_16(1729);
+emit_16(1663);
+emit_16(1730);
+emit_16(1664);
+emit_16(1730);
+emit_16(1663);
+emit_16(1730);
+emit_16(1664);
+emit_16(1731);
+emit_16(1665);
+emit_16(1731);
+emit_16(1664);
+emit_16(1731);
+emit_16(1665);
+emit_16(1732);
+emit_16(1666);
+emit_16(1732);
+emit_16(1665);
+emit_16(1732);
+emit_16(1666);
+emit_16(1733);
+emit_16(1667);
+emit_16(1733);
+emit_16(1666);
+emit_16(1733);
+emit_16(1667);
+emit_16(1734);
+emit_16(1668);
+emit_16(1734);
+emit_16(1667);
+emit_16(1734);
+emit_16(1668);
+emit_16(1735);
+emit_16(1669);
+emit_16(1735);
+emit_16(1668);
+emit_16(1735);
+emit_16(1669);
+emit_16(1736);
+emit_16(1670);
+emit_16(1736);
+emit_16(1669);
+emit_16(1736);
+emit_16(1670);
+emit_16(1737);
+emit_16(1671);
+emit_16(1737);
+emit_16(1670);
+emit_16(1737);
+emit_16(1671);
+emit_16(1738);
+emit_16(1672);
+emit_16(1738);
+emit_16(1671);
+emit_16(1738);
+emit_16(1672);
+emit_16(1739);
+emit_16(1673);
+emit_16(1739);
+emit_16(1672);
+emit_16(1739);
+emit_16(1673);
+emit_16(1740);
+emit_16(1674);
+emit_16(1740);
+emit_16(1673);
+emit_16(1740);
+emit_16(1674);
+emit_16(1741);
+emit_16(1675);
+emit_16(1741);
+emit_16(1674);
+emit_16(1741);
+emit_16(1675);
+emit_16(1742);
+emit_16(1676);
+emit_16(1742);
+emit_16(1675);
+emit_16(1742);
+emit_16(1676);
+emit_16(1743);
+emit_16(1677);
+emit_16(1743);
+emit_16(1676);
+emit_16(1743);
+emit_16(1677);
+emit_16(1744);
+emit_16(1678);
+emit_16(1744);
+emit_16(1677);
+emit_16(1744);
+emit_16(1678);
+emit_16(1745);
+emit_16(1679);
+emit_16(1745);
+emit_16(1678);
+emit_16(1745);
+emit_16(1679);
+emit_16(1746);
+emit_16(1680);
+emit_16(1746);
+emit_16(1679);
+emit_16(1746);
+emit_16(1680);
+emit_16(1747);
+emit_16(1681);
+emit_16(1747);
+emit_16(1680);
+emit_16(1747);
+emit_16(1681);
+emit_16(1748);
+emit_16(1682);
+emit_16(1748);
+emit_16(1681);
+emit_16(1748);
+emit_16(1682);
+emit_16(1749);
+emit_16(1683);
+emit_16(1749);
+emit_16(1682);
+emit_16(1749);
+emit_16(1683);
+emit_16(1750);
+emit_16(1684);
+emit_16(1750);
+emit_16(1683);
+emit_16(1750);
+emit_16(1684);
+emit_16(1751);
+emit_16(1685);
+emit_16(1751);
+emit_16(1684);
+emit_16(1751);
+emit_16(1685);
+emit_16(1752);
+emit_16(1686);
+emit_16(1752);
+emit_16(1685);
+emit_16(1752);
+emit_16(1686);
+emit_16(1753);
+emit_16(1687);
+emit_16(1753);
+emit_16(1686);
+emit_16(1753);
+emit_16(1687);
+emit_16(1754);
+emit_16(1688);
+emit_16(1754);
+emit_16(1687);
+emit_16(1754);
+emit_16(1688);
+emit_16(1755);
+emit_16(1689);
+emit_16(1755);
+emit_16(1688);
+emit_16(1755);
+emit_16(1689);
+emit_16(1756);
+emit_16(1690);
+emit_16(1756);
+emit_16(1689);
+emit_16(1756);
+emit_16(1690);
+emit_16(1757);
+emit_16(1691);
+emit_16(1757);
+emit_16(1690);
+emit_16(1757);
+emit_16(1691);
+emit_16(1758);
+emit_16(1692);
+emit_16(1758);
+emit_16(1691);
+emit_16(1758);
+emit_16(1692);
+emit_16(1759);
+emit_16(1693);
+emit_16(1759);
+emit_16(1692);
+emit_16(1759);
+emit_16(1693);
+emit_16(1760);
+emit_16(1694);
+emit_16(1760);
+emit_16(1693);
+emit_16(1760);
+emit_16(1694);
+emit_16(1761);
+emit_16(1695);
+emit_16(1761);
+emit_16(1694);
+emit_16(1761);
+emit_16(1695);
+emit_16(1762);
+emit_16(1696);
+emit_16(1762);
+emit_16(1695);
+emit_16(1762);
+emit_16(1696);
+emit_16(1763);
+emit_16(1697);
+emit_16(1763);
+emit_16(1696);
+emit_16(1763);
+emit_16(1697);
+emit_16(1764);
+emit_16(1698);
+emit_16(1764);
+emit_16(1697);
+emit_16(1764);
+emit_16(1698);
+emit_16(1765);
+emit_16(1699);
+emit_16(1765);
+emit_16(1698);
+emit_16(1765);
+emit_16(1699);
+emit_16(1766);
+emit_16(1700);
+emit_16(1766);
+emit_16(1699);
+emit_16(1766);
+emit_16(1700);
+emit_16(1767);
+emit_16(1701);
+emit_16(1767);
+emit_16(1700);
+emit_16(1767);
+emit_16(1701);
+emit_16(1768);
+emit_16(1702);
+emit_16(1768);
+emit_16(1701);
+emit_16(1768);
+emit_16(1702);
+emit_16(1769);
+emit_16(1703);
+emit_16(1769);
+emit_16(1702);
+emit_16(1769);
+emit_16(1703);
+emit_16(1770);
+emit_16(1704);
+emit_16(1770);
+emit_16(1703);
+emit_16(1770);
+emit_16(1704);
+emit_16(1771);
+emit_16(1705);
+emit_16(1771);
+emit_16(1704);
+emit_16(1771);
+emit_16(1705);
+emit_16(1772);
+emit_16(1706);
+emit_16(1772);
+emit_16(1705);
+emit_16(1772);
+emit_16(1706);
+emit_16(1773);
+emit_16(1707);
+emit_16(1773);
+emit_16(1706);
+emit_16(1773);
+emit_16(1707);
+emit_16(1774);
+emit_16(1708);
+emit_16(1774);
+emit_16(1707);
+emit_16(1774);
+emit_16(1708);
+emit_16(1775);
+emit_16(1709);
+emit_16(1775);
+emit_16(1708);
+emit_16(1775);
+emit_16(1709);
+emit_16(1776);
+emit_16(1710);
+emit_16(1776);
+emit_16(1709);
+emit_16(1776);
+emit_16(1710);
+emit_16(1777);
+emit_16(1711);
+emit_16(1777);
+emit_16(1710);
+emit_16(1777);
+emit_16(1711);
+emit_16(1778);
+emit_16(1712);
+emit_16(1778);
+emit_16(1711);
+emit_16(1778);
+emit_16(1712);
+emit_16(1779);
+emit_16(1713);
+emit_16(1779);
+emit_16(1712);
+emit_16(1779);
+emit_16(1713);
+emit_16(1780);
+emit_16(1714);
+emit_16(1780);
+emit_16(1713);
+emit_16(1780);
+emit_16(1714);
+emit_16(1781);
+emit_16(1715);
+emit_16(1781);
+emit_16(1714);
+emit_16(1782);
+emit_16(1716);
+emit_16(1783);
+emit_16(1717);
+emit_16(1783);
+emit_16(1716);
+emit_16(1783);
+emit_16(1717);
+emit_16(1784);
+emit_16(1718);
+emit_16(1784);
+emit_16(1717);
+emit_16(1784);
+emit_16(1718);
+emit_16(1785);
+emit_16(1719);
+emit_16(1785);
+emit_16(1718);
+emit_16(1785);
+emit_16(1719);
+emit_16(1786);
+emit_16(1720);
+emit_16(1786);
+emit_16(1719);
+emit_16(1786);
+emit_16(1720);
+emit_16(1787);
+emit_16(1721);
+emit_16(1787);
+emit_16(1720);
+emit_16(1787);
+emit_16(1721);
+emit_16(1788);
+emit_16(1722);
+emit_16(1788);
+emit_16(1721);
+emit_16(1788);
+emit_16(1722);
+emit_16(1789);
+emit_16(1723);
+emit_16(1789);
+emit_16(1722);
+emit_16(1789);
+emit_16(1723);
+emit_16(1790);
+emit_16(1724);
+emit_16(1790);
+emit_16(1723);
+emit_16(1790);
+emit_16(1724);
+emit_16(1791);
+emit_16(1725);
+emit_16(1791);
+emit_16(1724);
+emit_16(1791);
+emit_16(1725);
+emit_16(1792);
+emit_16(1726);
+emit_16(1792);
+emit_16(1725);
+emit_16(1792);
+emit_16(1726);
+emit_16(1793);
+emit_16(1727);
+emit_16(1793);
+emit_16(1726);
+emit_16(1793);
+emit_16(1727);
+emit_16(1794);
+emit_16(1728);
+emit_16(1794);
+emit_16(1727);
+emit_16(1794);
+emit_16(1728);
+emit_16(1795);
+emit_16(1729);
+emit_16(1795);
+emit_16(1728);
+emit_16(1795);
+emit_16(1729);
+emit_16(1796);
+emit_16(1730);
+emit_16(1796);
+emit_16(1729);
+emit_16(1796);
+emit_16(1730);
+emit_16(1797);
+emit_16(1731);
+emit_16(1797);
+emit_16(1730);
+emit_16(1797);
+emit_16(1731);
+emit_16(1798);
+emit_16(1732);
+emit_16(1798);
+emit_16(1731);
+emit_16(1798);
+emit_16(1732);
+emit_16(1799);
+emit_16(1733);
+emit_16(1799);
+emit_16(1732);
+emit_16(1799);
+emit_16(1733);
+emit_16(1800);
+emit_16(1734);
+emit_16(1800);
+emit_16(1733);
+emit_16(1800);
+emit_16(1734);
+emit_16(1801);
+emit_16(1735);
+emit_16(1801);
+emit_16(1734);
+emit_16(1801);
+emit_16(1735);
+emit_16(1802);
+emit_16(1736);
+emit_16(1802);
+emit_16(1735);
+emit_16(1802);
+emit_16(1736);
+emit_16(1803);
+emit_16(1737);
+emit_16(1803);
+emit_16(1736);
+emit_16(1803);
+emit_16(1737);
+emit_16(1804);
+emit_16(1738);
+emit_16(1804);
+emit_16(1737);
+emit_16(1804);
+emit_16(1738);
+emit_16(1805);
+emit_16(1739);
+emit_16(1805);
+emit_16(1738);
+emit_16(1805);
+emit_16(1739);
+emit_16(1806);
+emit_16(1740);
+emit_16(1806);
+emit_16(1739);
+emit_16(1806);
+emit_16(1740);
+emit_16(1807);
+emit_16(1741);
+emit_16(1807);
+emit_16(1740);
+emit_16(1807);
+emit_16(1741);
+emit_16(1808);
+emit_16(1742);
+emit_16(1808);
+emit_16(1741);
+emit_16(1808);
+emit_16(1742);
+emit_16(1809);
+emit_16(1743);
+emit_16(1809);
+emit_16(1742);
+emit_16(1809);
+emit_16(1743);
+emit_16(1810);
+emit_16(1744);
+emit_16(1810);
+emit_16(1743);
+emit_16(1810);
+emit_16(1744);
+emit_16(1811);
+emit_16(1745);
+emit_16(1811);
+emit_16(1744);
+emit_16(1811);
+emit_16(1745);
+emit_16(1812);
+emit_16(1746);
+emit_16(1812);
+emit_16(1745);
+emit_16(1812);
+emit_16(1746);
+emit_16(1813);
+emit_16(1747);
+emit_16(1813);
+emit_16(1746);
+emit_16(1813);
+emit_16(1747);
+emit_16(1814);
+emit_16(1748);
+emit_16(1814);
+emit_16(1747);
+emit_16(1814);
+emit_16(1748);
+emit_16(1815);
+emit_16(1749);
+emit_16(1815);
+emit_16(1748);
+emit_16(1815);
+emit_16(1749);
+emit_16(1816);
+emit_16(1750);
+emit_16(1816);
+emit_16(1749);
+emit_16(1816);
+emit_16(1750);
+emit_16(1817);
+emit_16(1751);
+emit_16(1817);
+emit_16(1750);
+emit_16(1817);
+emit_16(1751);
+emit_16(1818);
+emit_16(1752);
+emit_16(1818);
+emit_16(1751);
+emit_16(1818);
+emit_16(1752);
+emit_16(1819);
+emit_16(1753);
+emit_16(1819);
+emit_16(1752);
+emit_16(1819);
+emit_16(1753);
+emit_16(1820);
+emit_16(1754);
+emit_16(1820);
+emit_16(1753);
+emit_16(1820);
+emit_16(1754);
+emit_16(1821);
+emit_16(1755);
+emit_16(1821);
+emit_16(1754);
+emit_16(1821);
+emit_16(1755);
+emit_16(1822);
+emit_16(1756);
+emit_16(1822);
+emit_16(1755);
+emit_16(1822);
+emit_16(1756);
+emit_16(1823);
+emit_16(1757);
+emit_16(1823);
+emit_16(1756);
+emit_16(1823);
+emit_16(1757);
+emit_16(1824);
+emit_16(1758);
+emit_16(1824);
+emit_16(1757);
+emit_16(1824);
+emit_16(1758);
+emit_16(1825);
+emit_16(1759);
+emit_16(1825);
+emit_16(1758);
+emit_16(1825);
+emit_16(1759);
+emit_16(1826);
+emit_16(1760);
+emit_16(1826);
+emit_16(1759);
+emit_16(1826);
+emit_16(1760);
+emit_16(1827);
+emit_16(1761);
+emit_16(1827);
+emit_16(1760);
+emit_16(1827);
+emit_16(1761);
+emit_16(1828);
+emit_16(1762);
+emit_16(1828);
+emit_16(1761);
+emit_16(1828);
+emit_16(1762);
+emit_16(1829);
+emit_16(1763);
+emit_16(1829);
+emit_16(1762);
+emit_16(1829);
+emit_16(1763);
+emit_16(1830);
+emit_16(1764);
+emit_16(1830);
+emit_16(1763);
+emit_16(1830);
+emit_16(1764);
+emit_16(1831);
+emit_16(1765);
+emit_16(1831);
+emit_16(1764);
+emit_16(1831);
+emit_16(1765);
+emit_16(1832);
+emit_16(1766);
+emit_16(1832);
+emit_16(1765);
+emit_16(1832);
+emit_16(1766);
+emit_16(1833);
+emit_16(1767);
+emit_16(1833);
+emit_16(1766);
+emit_16(1833);
+emit_16(1767);
+emit_16(1834);
+emit_16(1768);
+emit_16(1834);
+emit_16(1767);
+emit_16(1834);
+emit_16(1768);
+emit_16(1835);
+emit_16(1769);
+emit_16(1835);
+emit_16(1768);
+emit_16(1835);
+emit_16(1769);
+emit_16(1836);
+emit_16(1770);
+emit_16(1836);
+emit_16(1769);
+emit_16(1836);
+emit_16(1770);
+emit_16(1837);
+emit_16(1771);
+emit_16(1837);
+emit_16(1770);
+emit_16(1837);
+emit_16(1771);
+emit_16(1838);
+emit_16(1772);
+emit_16(1838);
+emit_16(1771);
+emit_16(1838);
+emit_16(1772);
+emit_16(1839);
+emit_16(1773);
+emit_16(1839);
+emit_16(1772);
+emit_16(1839);
+emit_16(1773);
+emit_16(1840);
+emit_16(1774);
+emit_16(1840);
+emit_16(1773);
+emit_16(1840);
+emit_16(1774);
+emit_16(1841);
+emit_16(1775);
+emit_16(1841);
+emit_16(1774);
+emit_16(1841);
+emit_16(1775);
+emit_16(1842);
+emit_16(1776);
+emit_16(1842);
+emit_16(1775);
+emit_16(1842);
+emit_16(1776);
+emit_16(1843);
+emit_16(1777);
+emit_16(1843);
+emit_16(1776);
+emit_16(1843);
+emit_16(1777);
+emit_16(1844);
+emit_16(1778);
+emit_16(1844);
+emit_16(1777);
+emit_16(1844);
+emit_16(1778);
+emit_16(1845);
+emit_16(1779);
+emit_16(1845);
+emit_16(1778);
+emit_16(1845);
+emit_16(1779);
+emit_16(1846);
+emit_16(1780);
+emit_16(1846);
+emit_16(1779);
+emit_16(1846);
+emit_16(1780);
+emit_16(1847);
+emit_16(1781);
+emit_16(1847);
+emit_16(1780);
+emit_16(1848);
+emit_16(1782);
+emit_16(1849);
+emit_16(1783);
+emit_16(1849);
+emit_16(1782);
+emit_16(1849);
+emit_16(1783);
+emit_16(1850);
+emit_16(1784);
+emit_16(1850);
+emit_16(1783);
+emit_16(1850);
+emit_16(1784);
+emit_16(1851);
+emit_16(1785);
+emit_16(1851);
+emit_16(1784);
+emit_16(1851);
+emit_16(1785);
+emit_16(1852);
+emit_16(1786);
+emit_16(1852);
+emit_16(1785);
+emit_16(1852);
+emit_16(1786);
+emit_16(1853);
+emit_16(1787);
+emit_16(1853);
+emit_16(1786);
+emit_16(1853);
+emit_16(1787);
+emit_16(1854);
+emit_16(1788);
+emit_16(1854);
+emit_16(1787);
+emit_16(1854);
+emit_16(1788);
+emit_16(1855);
+emit_16(1789);
+emit_16(1855);
+emit_16(1788);
+emit_16(1855);
+emit_16(1789);
+emit_16(1856);
+emit_16(1790);
+emit_16(1856);
+emit_16(1789);
+emit_16(1856);
+emit_16(1790);
+emit_16(1857);
+emit_16(1791);
+emit_16(1857);
+emit_16(1790);
+emit_16(1857);
+emit_16(1791);
+emit_16(1858);
+emit_16(1792);
+emit_16(1858);
+emit_16(1791);
+emit_16(1858);
+emit_16(1792);
+emit_16(1859);
+emit_16(1793);
+emit_16(1859);
+emit_16(1792);
+emit_16(1859);
+emit_16(1793);
+emit_16(1860);
+emit_16(1794);
+emit_16(1860);
+emit_16(1793);
+emit_16(1860);
+emit_16(1794);
+emit_16(1861);
+emit_16(1795);
+emit_16(1861);
+emit_16(1794);
+emit_16(1861);
+emit_16(1795);
+emit_16(1862);
+emit_16(1796);
+emit_16(1862);
+emit_16(1795);
+emit_16(1862);
+emit_16(1796);
+emit_16(1863);
+emit_16(1797);
+emit_16(1863);
+emit_16(1796);
+emit_16(1863);
+emit_16(1797);
+emit_16(1864);
+emit_16(1798);
+emit_16(1864);
+emit_16(1797);
+emit_16(1864);
+emit_16(1798);
+emit_16(1865);
+emit_16(1799);
+emit_16(1865);
+emit_16(1798);
+emit_16(1865);
+emit_16(1799);
+emit_16(1866);
+emit_16(1800);
+emit_16(1866);
+emit_16(1799);
+emit_16(1866);
+emit_16(1800);
+emit_16(1867);
+emit_16(1801);
+emit_16(1867);
+emit_16(1800);
+emit_16(1867);
+emit_16(1801);
+emit_16(1868);
+emit_16(1802);
+emit_16(1868);
+emit_16(1801);
+emit_16(1868);
+emit_16(1802);
+emit_16(1869);
+emit_16(1803);
+emit_16(1869);
+emit_16(1802);
+emit_16(1869);
+emit_16(1803);
+emit_16(1870);
+emit_16(1804);
+emit_16(1870);
+emit_16(1803);
+emit_16(1870);
+emit_16(1804);
+emit_16(1871);
+emit_16(1805);
+emit_16(1871);
+emit_16(1804);
+emit_16(1871);
+emit_16(1805);
+emit_16(1872);
+emit_16(1806);
+emit_16(1872);
+emit_16(1805);
+emit_16(1872);
+emit_16(1806);
+emit_16(1873);
+emit_16(1807);
+emit_16(1873);
+emit_16(1806);
+emit_16(1873);
+emit_16(1807);
+emit_16(1874);
+emit_16(1808);
+emit_16(1874);
+emit_16(1807);
+emit_16(1874);
+emit_16(1808);
+emit_16(1875);
+emit_16(1809);
+emit_16(1875);
+emit_16(1808);
+emit_16(1875);
+emit_16(1809);
+emit_16(1876);
+emit_16(1810);
+emit_16(1876);
+emit_16(1809);
+emit_16(1876);
+emit_16(1810);
+emit_16(1877);
+emit_16(1811);
+emit_16(1877);
+emit_16(1810);
+emit_16(1877);
+emit_16(1811);
+emit_16(1878);
+emit_16(1812);
+emit_16(1878);
+emit_16(1811);
+emit_16(1878);
+emit_16(1812);
+emit_16(1879);
+emit_16(1813);
+emit_16(1879);
+emit_16(1812);
+emit_16(1879);
+emit_16(1813);
+emit_16(1880);
+emit_16(1814);
+emit_16(1880);
+emit_16(1813);
+emit_16(1880);
+emit_16(1814);
+emit_16(1881);
+emit_16(1815);
+emit_16(1881);
+emit_16(1814);
+emit_16(1881);
+emit_16(1815);
+emit_16(1882);
+emit_16(1816);
+emit_16(1882);
+emit_16(1815);
+emit_16(1882);
+emit_16(1816);
+emit_16(1883);
+emit_16(1817);
+emit_16(1883);
+emit_16(1816);
+emit_16(1883);
+emit_16(1817);
+emit_16(1884);
+emit_16(1818);
+emit_16(1884);
+emit_16(1817);
+emit_16(1884);
+emit_16(1818);
+emit_16(1885);
+emit_16(1819);
+emit_16(1885);
+emit_16(1818);
+emit_16(1885);
+emit_16(1819);
+emit_16(1886);
+emit_16(1820);
+emit_16(1886);
+emit_16(1819);
+emit_16(1886);
+emit_16(1820);
+emit_16(1887);
+emit_16(1821);
+emit_16(1887);
+emit_16(1820);
+emit_16(1887);
+emit_16(1821);
+emit_16(1888);
+emit_16(1822);
+emit_16(1888);
+emit_16(1821);
+emit_16(1888);
+emit_16(1822);
+emit_16(1889);
+emit_16(1823);
+emit_16(1889);
+emit_16(1822);
+emit_16(1889);
+emit_16(1823);
+emit_16(1890);
+emit_16(1824);
+emit_16(1890);
+emit_16(1823);
+emit_16(1890);
+emit_16(1824);
+emit_16(1891);
+emit_16(1825);
+emit_16(1891);
+emit_16(1824);
+emit_16(1891);
+emit_16(1825);
+emit_16(1892);
+emit_16(1826);
+emit_16(1892);
+emit_16(1825);
+emit_16(1892);
+emit_16(1826);
+emit_16(1893);
+emit_16(1827);
+emit_16(1893);
+emit_16(1826);
+emit_16(1893);
+emit_16(1827);
+emit_16(1894);
+emit_16(1828);
+emit_16(1894);
+emit_16(1827);
+emit_16(1894);
+emit_16(1828);
+emit_16(1895);
+emit_16(1829);
+emit_16(1895);
+emit_16(1828);
+emit_16(1895);
+emit_16(1829);
+emit_16(1896);
+emit_16(1830);
+emit_16(1896);
+emit_16(1829);
+emit_16(1896);
+emit_16(1830);
+emit_16(1897);
+emit_16(1831);
+emit_16(1897);
+emit_16(1830);
+emit_16(1897);
+emit_16(1831);
+emit_16(1898);
+emit_16(1832);
+emit_16(1898);
+emit_16(1831);
+emit_16(1898);
+emit_16(1832);
+emit_16(1899);
+emit_16(1833);
+emit_16(1899);
+emit_16(1832);
+emit_16(1899);
+emit_16(1833);
+emit_16(1900);
+emit_16(1834);
+emit_16(1900);
+emit_16(1833);
+emit_16(1900);
+emit_16(1834);
+emit_16(1901);
+emit_16(1835);
+emit_16(1901);
+emit_16(1834);
+emit_16(1901);
+emit_16(1835);
+emit_16(1902);
+emit_16(1836);
+emit_16(1902);
+emit_16(1835);
+emit_16(1902);
+emit_16(1836);
+emit_16(1903);
+emit_16(1837);
+emit_16(1903);
+emit_16(1836);
+emit_16(1903);
+emit_16(1837);
+emit_16(1904);
+emit_16(1838);
+emit_16(1904);
+emit_16(1837);
+emit_16(1904);
+emit_16(1838);
+emit_16(1905);
+emit_16(1839);
+emit_16(1905);
+emit_16(1838);
+emit_16(1905);
+emit_16(1839);
+emit_16(1906);
+emit_16(1840);
+emit_16(1906);
+emit_16(1839);
+emit_16(1906);
+emit_16(1840);
+emit_16(1907);
+emit_16(1841);
+emit_16(1907);
+emit_16(1840);
+emit_16(1907);
+emit_16(1841);
+emit_16(1908);
+emit_16(1842);
+emit_16(1908);
+emit_16(1841);
+emit_16(1908);
+emit_16(1842);
+emit_16(1909);
+emit_16(1843);
+emit_16(1909);
+emit_16(1842);
+emit_16(1909);
+emit_16(1843);
+emit_16(1910);
+emit_16(1844);
+emit_16(1910);
+emit_16(1843);
+emit_16(1910);
+emit_16(1844);
+emit_16(1911);
+emit_16(1845);
+emit_16(1911);
+emit_16(1844);
+emit_16(1911);
+emit_16(1845);
+emit_16(1912);
+emit_16(1846);
+emit_16(1912);
+emit_16(1845);
+emit_16(1912);
+emit_16(1846);
+emit_16(1913);
+emit_16(1847);
+emit_16(1913);
+emit_16(1846);
+emit_16(1914);
+emit_16(1848);
+emit_16(1915);
+emit_16(1849);
+emit_16(1915);
+emit_16(1848);
+emit_16(1915);
+emit_16(1849);
+emit_16(1916);
+emit_16(1850);
+emit_16(1916);
+emit_16(1849);
+emit_16(1916);
+emit_16(1850);
+emit_16(1917);
+emit_16(1851);
+emit_16(1917);
+emit_16(1850);
+emit_16(1917);
+emit_16(1851);
+emit_16(1918);
+emit_16(1852);
+emit_16(1918);
+emit_16(1851);
+emit_16(1918);
+emit_16(1852);
+emit_16(1919);
+emit_16(1853);
+emit_16(1919);
+emit_16(1852);
+emit_16(1919);
+emit_16(1853);
+emit_16(1920);
+emit_16(1854);
+emit_16(1920);
+emit_16(1853);
+emit_16(1920);
+emit_16(1854);
+emit_16(1921);
+emit_16(1855);
+emit_16(1921);
+emit_16(1854);
+emit_16(1921);
+emit_16(1855);
+emit_16(1922);
+emit_16(1856);
+emit_16(1922);
+emit_16(1855);
+emit_16(1922);
+emit_16(1856);
+emit_16(1923);
+emit_16(1857);
+emit_16(1923);
+emit_16(1856);
+emit_16(1923);
+emit_16(1857);
+emit_16(1924);
+emit_16(1858);
+emit_16(1924);
+emit_16(1857);
+emit_16(1924);
+emit_16(1858);
+emit_16(1925);
+emit_16(1859);
+emit_16(1925);
+emit_16(1858);
+emit_16(1925);
+emit_16(1859);
+emit_16(1926);
+emit_16(1860);
+emit_16(1926);
+emit_16(1859);
+emit_16(1926);
+emit_16(1860);
+emit_16(1927);
+emit_16(1861);
+emit_16(1927);
+emit_16(1860);
+emit_16(1927);
+emit_16(1861);
+emit_16(1928);
+emit_16(1862);
+emit_16(1928);
+emit_16(1861);
+emit_16(1928);
+emit_16(1862);
+emit_16(1929);
+emit_16(1863);
+emit_16(1929);
+emit_16(1862);
+emit_16(1929);
+emit_16(1863);
+emit_16(1930);
+emit_16(1864);
+emit_16(1930);
+emit_16(1863);
+emit_16(1930);
+emit_16(1864);
+emit_16(1931);
+emit_16(1865);
+emit_16(1931);
+emit_16(1864);
+emit_16(1931);
+emit_16(1865);
+emit_16(1932);
+emit_16(1866);
+emit_16(1932);
+emit_16(1865);
+emit_16(1932);
+emit_16(1866);
+emit_16(1933);
+emit_16(1867);
+emit_16(1933);
+emit_16(1866);
+emit_16(1933);
+emit_16(1867);
+emit_16(1934);
+emit_16(1868);
+emit_16(1934);
+emit_16(1867);
+emit_16(1934);
+emit_16(1868);
+emit_16(1935);
+emit_16(1869);
+emit_16(1935);
+emit_16(1868);
+emit_16(1935);
+emit_16(1869);
+emit_16(1936);
+emit_16(1870);
+emit_16(1936);
+emit_16(1869);
+emit_16(1936);
+emit_16(1870);
+emit_16(1937);
+emit_16(1871);
+emit_16(1937);
+emit_16(1870);
+emit_16(1937);
+emit_16(1871);
+emit_16(1938);
+emit_16(1872);
+emit_16(1938);
+emit_16(1871);
+emit_16(1938);
+emit_16(1872);
+emit_16(1939);
+emit_16(1873);
+emit_16(1939);
+emit_16(1872);
+emit_16(1939);
+emit_16(1873);
+emit_16(1940);
+emit_16(1874);
+emit_16(1940);
+emit_16(1873);
+emit_16(1940);
+emit_16(1874);
+emit_16(1941);
+emit_16(1875);
+emit_16(1941);
+emit_16(1874);
+emit_16(1941);
+emit_16(1875);
+emit_16(1942);
+emit_16(1876);
+emit_16(1942);
+emit_16(1875);
+emit_16(1942);
+emit_16(1876);
+emit_16(1943);
+emit_16(1877);
+emit_16(1943);
+emit_16(1876);
+emit_16(1943);
+emit_16(1877);
+emit_16(1944);
+emit_16(1878);
+emit_16(1944);
+emit_16(1877);
+emit_16(1944);
+emit_16(1878);
+emit_16(1945);
+emit_16(1879);
+emit_16(1945);
+emit_16(1878);
+emit_16(1945);
+emit_16(1879);
+emit_16(1946);
+emit_16(1880);
+emit_16(1946);
+emit_16(1879);
+emit_16(1946);
+emit_16(1880);
+emit_16(1947);
+emit_16(1881);
+emit_16(1947);
+emit_16(1880);
+emit_16(1947);
+emit_16(1881);
+emit_16(1948);
+emit_16(1882);
+emit_16(1948);
+emit_16(1881);
+emit_16(1948);
+emit_16(1882);
+emit_16(1949);
+emit_16(1883);
+emit_16(1949);
+emit_16(1882);
+emit_16(1949);
+emit_16(1883);
+emit_16(1950);
+emit_16(1884);
+emit_16(1950);
+emit_16(1883);
+emit_16(1950);
+emit_16(1884);
+emit_16(1951);
+emit_16(1885);
+emit_16(1951);
+emit_16(1884);
+emit_16(1951);
+emit_16(1885);
+emit_16(1952);
+emit_16(1886);
+emit_16(1952);
+emit_16(1885);
+emit_16(1952);
+emit_16(1886);
+emit_16(1953);
+emit_16(1887);
+emit_16(1953);
+emit_16(1886);
+emit_16(1953);
+emit_16(1887);
+emit_16(1954);
+emit_16(1888);
+emit_16(1954);
+emit_16(1887);
+emit_16(1954);
+emit_16(1888);
+emit_16(1955);
+emit_16(1889);
+emit_16(1955);
+emit_16(1888);
+emit_16(1955);
+emit_16(1889);
+emit_16(1956);
+emit_16(1890);
+emit_16(1956);
+emit_16(1889);
+emit_16(1956);
+emit_16(1890);
+emit_16(1957);
+emit_16(1891);
+emit_16(1957);
+emit_16(1890);
+emit_16(1957);
+emit_16(1891);
+emit_16(1958);
+emit_16(1892);
+emit_16(1958);
+emit_16(1891);
+emit_16(1958);
+emit_16(1892);
+emit_16(1959);
+emit_16(1893);
+emit_16(1959);
+emit_16(1892);
+emit_16(1959);
+emit_16(1893);
+emit_16(1960);
+emit_16(1894);
+emit_16(1960);
+emit_16(1893);
+emit_16(1960);
+emit_16(1894);
+emit_16(1961);
+emit_16(1895);
+emit_16(1961);
+emit_16(1894);
+emit_16(1961);
+emit_16(1895);
+emit_16(1962);
+emit_16(1896);
+emit_16(1962);
+emit_16(1895);
+emit_16(1962);
+emit_16(1896);
+emit_16(1963);
+emit_16(1897);
+emit_16(1963);
+emit_16(1896);
+emit_16(1963);
+emit_16(1897);
+emit_16(1964);
+emit_16(1898);
+emit_16(1964);
+emit_16(1897);
+emit_16(1964);
+emit_16(1898);
+emit_16(1965);
+emit_16(1899);
+emit_16(1965);
+emit_16(1898);
+emit_16(1965);
+emit_16(1899);
+emit_16(1966);
+emit_16(1900);
+emit_16(1966);
+emit_16(1899);
+emit_16(1966);
+emit_16(1900);
+emit_16(1967);
+emit_16(1901);
+emit_16(1967);
+emit_16(1900);
+emit_16(1967);
+emit_16(1901);
+emit_16(1968);
+emit_16(1902);
+emit_16(1968);
+emit_16(1901);
+emit_16(1968);
+emit_16(1902);
+emit_16(1969);
+emit_16(1903);
+emit_16(1969);
+emit_16(1902);
+emit_16(1969);
+emit_16(1903);
+emit_16(1970);
+emit_16(1904);
+emit_16(1970);
+emit_16(1903);
+emit_16(1970);
+emit_16(1904);
+emit_16(1971);
+emit_16(1905);
+emit_16(1971);
+emit_16(1904);
+emit_16(1971);
+emit_16(1905);
+emit_16(1972);
+emit_16(1906);
+emit_16(1972);
+emit_16(1905);
+emit_16(1972);
+emit_16(1906);
+emit_16(1973);
+emit_16(1907);
+emit_16(1973);
+emit_16(1906);
+emit_16(1973);
+emit_16(1907);
+emit_16(1974);
+emit_16(1908);
+emit_16(1974);
+emit_16(1907);
+emit_16(1974);
+emit_16(1908);
+emit_16(1975);
+emit_16(1909);
+emit_16(1975);
+emit_16(1908);
+emit_16(1975);
+emit_16(1909);
+emit_16(1976);
+emit_16(1910);
+emit_16(1976);
+emit_16(1909);
+emit_16(1976);
+emit_16(1910);
+emit_16(1977);
+emit_16(1911);
+emit_16(1977);
+emit_16(1910);
+emit_16(1977);
+emit_16(1911);
+emit_16(1978);
+emit_16(1912);
+emit_16(1978);
+emit_16(1911);
+emit_16(1978);
+emit_16(1912);
+emit_16(1979);
+emit_16(1913);
+emit_16(1979);
+emit_16(1912);
+emit_16(1980);
+emit_16(1914);
+emit_16(1981);
+emit_16(1915);
+emit_16(1981);
+emit_16(1914);
+emit_16(1981);
+emit_16(1915);
+emit_16(1982);
+emit_16(1916);
+emit_16(1982);
+emit_16(1915);
+emit_16(1982);
+emit_16(1916);
+emit_16(1983);
+emit_16(1917);
+emit_16(1983);
+emit_16(1916);
+emit_16(1983);
+emit_16(1917);
+emit_16(1984);
+emit_16(1918);
+emit_16(1984);
+emit_16(1917);
+emit_16(1984);
+emit_16(1918);
+emit_16(1985);
+emit_16(1919);
+emit_16(1985);
+emit_16(1918);
+emit_16(1985);
+emit_16(1919);
+emit_16(1986);
+emit_16(1920);
+emit_16(1986);
+emit_16(1919);
+emit_16(1986);
+emit_16(1920);
+emit_16(1987);
+emit_16(1921);
+emit_16(1987);
+emit_16(1920);
+emit_16(1987);
+emit_16(1921);
+emit_16(1988);
+emit_16(1922);
+emit_16(1988);
+emit_16(1921);
+emit_16(1988);
+emit_16(1922);
+emit_16(1989);
+emit_16(1923);
+emit_16(1989);
+emit_16(1922);
+emit_16(1989);
+emit_16(1923);
+emit_16(1990);
+emit_16(1924);
+emit_16(1990);
+emit_16(1923);
+emit_16(1990);
+emit_16(1924);
+emit_16(1991);
+emit_16(1925);
+emit_16(1991);
+emit_16(1924);
+emit_16(1991);
+emit_16(1925);
+emit_16(1992);
+emit_16(1926);
+emit_16(1992);
+emit_16(1925);
+emit_16(1992);
+emit_16(1926);
+emit_16(1993);
+emit_16(1927);
+emit_16(1993);
+emit_16(1926);
+emit_16(1993);
+emit_16(1927);
+emit_16(1994);
+emit_16(1928);
+emit_16(1994);
+emit_16(1927);
+emit_16(1994);
+emit_16(1928);
+emit_16(1995);
+emit_16(1929);
+emit_16(1995);
+emit_16(1928);
+emit_16(1995);
+emit_16(1929);
+emit_16(1996);
+emit_16(1930);
+emit_16(1996);
+emit_16(1929);
+emit_16(1996);
+emit_16(1930);
+emit_16(1997);
+emit_16(1931);
+emit_16(1997);
+emit_16(1930);
+emit_16(1997);
+emit_16(1931);
+emit_16(1998);
+emit_16(1932);
+emit_16(1998);
+emit_16(1931);
+emit_16(1998);
+emit_16(1932);
+emit_16(1999);
+emit_16(1933);
+emit_16(1999);
+emit_16(1932);
+emit_16(1999);
+emit_16(1933);
+emit_16(2000);
+emit_16(1934);
+emit_16(2000);
+emit_16(1933);
+emit_16(2000);
+emit_16(1934);
+emit_16(2001);
+emit_16(1935);
+emit_16(2001);
+emit_16(1934);
+emit_16(2001);
+emit_16(1935);
+emit_16(2002);
+emit_16(1936);
+emit_16(2002);
+emit_16(1935);
+emit_16(2002);
+emit_16(1936);
+emit_16(2003);
+emit_16(1937);
+emit_16(2003);
+emit_16(1936);
+emit_16(2003);
+emit_16(1937);
+emit_16(2004);
+emit_16(1938);
+emit_16(2004);
+emit_16(1937);
+emit_16(2004);
+emit_16(1938);
+emit_16(2005);
+emit_16(1939);
+emit_16(2005);
+emit_16(1938);
+emit_16(2005);
+emit_16(1939);
+emit_16(2006);
+emit_16(1940);
+emit_16(2006);
+emit_16(1939);
+emit_16(2006);
+emit_16(1940);
+emit_16(2007);
+emit_16(1941);
+emit_16(2007);
+emit_16(1940);
+emit_16(2007);
+emit_16(1941);
+emit_16(2008);
+emit_16(1942);
+emit_16(2008);
+emit_16(1941);
+emit_16(2008);
+emit_16(1942);
+emit_16(2009);
+emit_16(1943);
+emit_16(2009);
+emit_16(1942);
+emit_16(2009);
+emit_16(1943);
+emit_16(2010);
+emit_16(1944);
+emit_16(2010);
+emit_16(1943);
+emit_16(2010);
+emit_16(1944);
+emit_16(2011);
+emit_16(1945);
+emit_16(2011);
+emit_16(1944);
+emit_16(2011);
+emit_16(1945);
+emit_16(2012);
+emit_16(1946);
+emit_16(2012);
+emit_16(1945);
+emit_16(2012);
+emit_16(1946);
+emit_16(2013);
+emit_16(1947);
+emit_16(2013);
+emit_16(1946);
+emit_16(2013);
+emit_16(1947);
+emit_16(2014);
+emit_16(1948);
+emit_16(2014);
+emit_16(1947);
+emit_16(2014);
+emit_16(1948);
+emit_16(2015);
+emit_16(1949);
+emit_16(2015);
+emit_16(1948);
+emit_16(2015);
+emit_16(1949);
+emit_16(2016);
+emit_16(1950);
+emit_16(2016);
+emit_16(1949);
+emit_16(2016);
+emit_16(1950);
+emit_16(2017);
+emit_16(1951);
+emit_16(2017);
+emit_16(1950);
+emit_16(2017);
+emit_16(1951);
+emit_16(2018);
+emit_16(1952);
+emit_16(2018);
+emit_16(1951);
+emit_16(2018);
+emit_16(1952);
+emit_16(2019);
+emit_16(1953);
+emit_16(2019);
+emit_16(1952);
+emit_16(2019);
+emit_16(1953);
+emit_16(2020);
+emit_16(1954);
+emit_16(2020);
+emit_16(1953);
+emit_16(2020);
+emit_16(1954);
+emit_16(2021);
+emit_16(1955);
+emit_16(2021);
+emit_16(1954);
+emit_16(2021);
+emit_16(1955);
+emit_16(2022);
+emit_16(1956);
+emit_16(2022);
+emit_16(1955);
+emit_16(2022);
+emit_16(1956);
+emit_16(2023);
+emit_16(1957);
+emit_16(2023);
+emit_16(1956);
+emit_16(2023);
+emit_16(1957);
+emit_16(2024);
+emit_16(1958);
+emit_16(2024);
+emit_16(1957);
+emit_16(2024);
+emit_16(1958);
+emit_16(2025);
+emit_16(1959);
+emit_16(2025);
+emit_16(1958);
+emit_16(2025);
+emit_16(1959);
+emit_16(2026);
+emit_16(1960);
+emit_16(2026);
+emit_16(1959);
+emit_16(2026);
+emit_16(1960);
+emit_16(2027);
+emit_16(1961);
+emit_16(2027);
+emit_16(1960);
+emit_16(2027);
+emit_16(1961);
+emit_16(2028);
+emit_16(1962);
+emit_16(2028);
+emit_16(1961);
+emit_16(2028);
+emit_16(1962);
+emit_16(2029);
+emit_16(1963);
+emit_16(2029);
+emit_16(1962);
+emit_16(2029);
+emit_16(1963);
+emit_16(2030);
+emit_16(1964);
+emit_16(2030);
+emit_16(1963);
+emit_16(2030);
+emit_16(1964);
+emit_16(2031);
+emit_16(1965);
+emit_16(2031);
+emit_16(1964);
+emit_16(2031);
+emit_16(1965);
+emit_16(2032);
+emit_16(1966);
+emit_16(2032);
+emit_16(1965);
+emit_16(2032);
+emit_16(1966);
+emit_16(2033);
+emit_16(1967);
+emit_16(2033);
+emit_16(1966);
+emit_16(2033);
+emit_16(1967);
+emit_16(2034);
+emit_16(1968);
+emit_16(2034);
+emit_16(1967);
+emit_16(2034);
+emit_16(1968);
+emit_16(2035);
+emit_16(1969);
+emit_16(2035);
+emit_16(1968);
+emit_16(2035);
+emit_16(1969);
+emit_16(2036);
+emit_16(1970);
+emit_16(2036);
+emit_16(1969);
+emit_16(2036);
+emit_16(1970);
+emit_16(2037);
+emit_16(1971);
+emit_16(2037);
+emit_16(1970);
+emit_16(2037);
+emit_16(1971);
+emit_16(2038);
+emit_16(1972);
+emit_16(2038);
+emit_16(1971);
+emit_16(2038);
+emit_16(1972);
+emit_16(2039);
+emit_16(1973);
+emit_16(2039);
+emit_16(1972);
+emit_16(2039);
+emit_16(1973);
+emit_16(2040);
+emit_16(1974);
+emit_16(2040);
+emit_16(1973);
+emit_16(2040);
+emit_16(1974);
+emit_16(2041);
+emit_16(1975);
+emit_16(2041);
+emit_16(1974);
+emit_16(2041);
+emit_16(1975);
+emit_16(2042);
+emit_16(1976);
+emit_16(2042);
+emit_16(1975);
+emit_16(2042);
+emit_16(1976);
+emit_16(2043);
+emit_16(1977);
+emit_16(2043);
+emit_16(1976);
+emit_16(2043);
+emit_16(1977);
+emit_16(2044);
+emit_16(1978);
+emit_16(2044);
+emit_16(1977);
+emit_16(2044);
+emit_16(1978);
+emit_16(2045);
+emit_16(1979);
+emit_16(2045);
+emit_16(1978);
+emit_16(2046);
+emit_16(1980);
+emit_16(2047);
+emit_16(1981);
+emit_16(2047);
+emit_16(1980);
+emit_16(2047);
+emit_16(1981);
+emit_16(2048);
+emit_16(1982);
+emit_16(2048);
+emit_16(1981);
+emit_16(2048);
+emit_16(1982);
+emit_16(2049);
+emit_16(1983);
+emit_16(2049);
+emit_16(1982);
+emit_16(2049);
+emit_16(1983);
+emit_16(2050);
+emit_16(1984);
+emit_16(2050);
+emit_16(1983);
+emit_16(2050);
+emit_16(1984);
+emit_16(2051);
+emit_16(1985);
+emit_16(2051);
+emit_16(1984);
+emit_16(2051);
+emit_16(1985);
+emit_16(2052);
+emit_16(1986);
+emit_16(2052);
+emit_16(1985);
+emit_16(2052);
+emit_16(1986);
+emit_16(2053);
+emit_16(1987);
+emit_16(2053);
+emit_16(1986);
+emit_16(2053);
+emit_16(1987);
+emit_16(2054);
+emit_16(1988);
+emit_16(2054);
+emit_16(1987);
+emit_16(2054);
+emit_16(1988);
+emit_16(2055);
+emit_16(1989);
+emit_16(2055);
+emit_16(1988);
+emit_16(2055);
+emit_16(1989);
+emit_16(2056);
+emit_16(1990);
+emit_16(2056);
+emit_16(1989);
+emit_16(2056);
+emit_16(1990);
+emit_16(2057);
+emit_16(1991);
+emit_16(2057);
+emit_16(1990);
+emit_16(2057);
+emit_16(1991);
+emit_16(2058);
+emit_16(1992);
+emit_16(2058);
+emit_16(1991);
+emit_16(2058);
+emit_16(1992);
+emit_16(2059);
+emit_16(1993);
+emit_16(2059);
+emit_16(1992);
+emit_16(2059);
+emit_16(1993);
+emit_16(2060);
+emit_16(1994);
+emit_16(2060);
+emit_16(1993);
+emit_16(2060);
+emit_16(1994);
+emit_16(2061);
+emit_16(1995);
+emit_16(2061);
+emit_16(1994);
+emit_16(2061);
+emit_16(1995);
+emit_16(2062);
+emit_16(1996);
+emit_16(2062);
+emit_16(1995);
+emit_16(2062);
+emit_16(1996);
+emit_16(2063);
+emit_16(1997);
+emit_16(2063);
+emit_16(1996);
+emit_16(2063);
+emit_16(1997);
+emit_16(2064);
+emit_16(1998);
+emit_16(2064);
+emit_16(1997);
+emit_16(2064);
+emit_16(1998);
+emit_16(2065);
+emit_16(1999);
+emit_16(2065);
+emit_16(1998);
+emit_16(2065);
+emit_16(1999);
+emit_16(2066);
+emit_16(2000);
+emit_16(2066);
+emit_16(1999);
+emit_16(2066);
+emit_16(2000);
+emit_16(2067);
+emit_16(2001);
+emit_16(2067);
+emit_16(2000);
+emit_16(2067);
+emit_16(2001);
+emit_16(2068);
+emit_16(2002);
+emit_16(2068);
+emit_16(2001);
+emit_16(2068);
+emit_16(2002);
+emit_16(2069);
+emit_16(2003);
+emit_16(2069);
+emit_16(2002);
+emit_16(2069);
+emit_16(2003);
+emit_16(2070);
+emit_16(2004);
+emit_16(2070);
+emit_16(2003);
+emit_16(2070);
+emit_16(2004);
+emit_16(2071);
+emit_16(2005);
+emit_16(2071);
+emit_16(2004);
+emit_16(2071);
+emit_16(2005);
+emit_16(2072);
+emit_16(2006);
+emit_16(2072);
+emit_16(2005);
+emit_16(2072);
+emit_16(2006);
+emit_16(2073);
+emit_16(2007);
+emit_16(2073);
+emit_16(2006);
+emit_16(2073);
+emit_16(2007);
+emit_16(2074);
+emit_16(2008);
+emit_16(2074);
+emit_16(2007);
+emit_16(2074);
+emit_16(2008);
+emit_16(2075);
+emit_16(2009);
+emit_16(2075);
+emit_16(2008);
+emit_16(2075);
+emit_16(2009);
+emit_16(2076);
+emit_16(2010);
+emit_16(2076);
+emit_16(2009);
+emit_16(2076);
+emit_16(2010);
+emit_16(2077);
+emit_16(2011);
+emit_16(2077);
+emit_16(2010);
+emit_16(2077);
+emit_16(2011);
+emit_16(2078);
+emit_16(2012);
+emit_16(2078);
+emit_16(2011);
+emit_16(2078);
+emit_16(2012);
+emit_16(2079);
+emit_16(2013);
+emit_16(2079);
+emit_16(2012);
+emit_16(2079);
+emit_16(2013);
+emit_16(2080);
+emit_16(2014);
+emit_16(2080);
+emit_16(2013);
+emit_16(2080);
+emit_16(2014);
+emit_16(2081);
+emit_16(2015);
+emit_16(2081);
+emit_16(2014);
+emit_16(2081);
+emit_16(2015);
+emit_16(2082);
+emit_16(2016);
+emit_16(2082);
+emit_16(2015);
+emit_16(2082);
+emit_16(2016);
+emit_16(2083);
+emit_16(2017);
+emit_16(2083);
+emit_16(2016);
+emit_16(2083);
+emit_16(2017);
+emit_16(2084);
+emit_16(2018);
+emit_16(2084);
+emit_16(2017);
+emit_16(2084);
+emit_16(2018);
+emit_16(2085);
+emit_16(2019);
+emit_16(2085);
+emit_16(2018);
+emit_16(2085);
+emit_16(2019);
+emit_16(2086);
+emit_16(2020);
+emit_16(2086);
+emit_16(2019);
+emit_16(2086);
+emit_16(2020);
+emit_16(2087);
+emit_16(2021);
+emit_16(2087);
+emit_16(2020);
+emit_16(2087);
+emit_16(2021);
+emit_16(2088);
+emit_16(2022);
+emit_16(2088);
+emit_16(2021);
+emit_16(2088);
+emit_16(2022);
+emit_16(2089);
+emit_16(2023);
+emit_16(2089);
+emit_16(2022);
+emit_16(2089);
+emit_16(2023);
+emit_16(2090);
+emit_16(2024);
+emit_16(2090);
+emit_16(2023);
+emit_16(2090);
+emit_16(2024);
+emit_16(2091);
+emit_16(2025);
+emit_16(2091);
+emit_16(2024);
+emit_16(2091);
+emit_16(2025);
+emit_16(2092);
+emit_16(2026);
+emit_16(2092);
+emit_16(2025);
+emit_16(2092);
+emit_16(2026);
+emit_16(2093);
+emit_16(2027);
+emit_16(2093);
+emit_16(2026);
+emit_16(2093);
+emit_16(2027);
+emit_16(2094);
+emit_16(2028);
+emit_16(2094);
+emit_16(2027);
+emit_16(2094);
+emit_16(2028);
+emit_16(2095);
+emit_16(2029);
+emit_16(2095);
+emit_16(2028);
+emit_16(2095);
+emit_16(2029);
+emit_16(2096);
+emit_16(2030);
+emit_16(2096);
+emit_16(2029);
+emit_16(2096);
+emit_16(2030);
+emit_16(2097);
+emit_16(2031);
+emit_16(2097);
+emit_16(2030);
+emit_16(2097);
+emit_16(2031);
+emit_16(2098);
+emit_16(2032);
+emit_16(2098);
+emit_16(2031);
+emit_16(2098);
+emit_16(2032);
+emit_16(2099);
+emit_16(2033);
+emit_16(2099);
+emit_16(2032);
+emit_16(2099);
+emit_16(2033);
+emit_16(2100);
+emit_16(2034);
+emit_16(2100);
+emit_16(2033);
+emit_16(2100);
+emit_16(2034);
+emit_16(2101);
+emit_16(2035);
+emit_16(2101);
+emit_16(2034);
+emit_16(2101);
+emit_16(2035);
+emit_16(2102);
+emit_16(2036);
+emit_16(2102);
+emit_16(2035);
+emit_16(2102);
+emit_16(2036);
+emit_16(2103);
+emit_16(2037);
+emit_16(2103);
+emit_16(2036);
+emit_16(2103);
+emit_16(2037);
+emit_16(2104);
+emit_16(2038);
+emit_16(2104);
+emit_16(2037);
+emit_16(2104);
+emit_16(2038);
+emit_16(2105);
+emit_16(2039);
+emit_16(2105);
+emit_16(2038);
+emit_16(2105);
+emit_16(2039);
+emit_16(2106);
+emit_16(2040);
+emit_16(2106);
+emit_16(2039);
+emit_16(2106);
+emit_16(2040);
+emit_16(2107);
+emit_16(2041);
+emit_16(2107);
+emit_16(2040);
+emit_16(2107);
+emit_16(2041);
+emit_16(2108);
+emit_16(2042);
+emit_16(2108);
+emit_16(2041);
+emit_16(2108);
+emit_16(2042);
+emit_16(2109);
+emit_16(2043);
+emit_16(2109);
+emit_16(2042);
+emit_16(2109);
+emit_16(2043);
+emit_16(2110);
+emit_16(2044);
+emit_16(2110);
+emit_16(2043);
+emit_16(2110);
+emit_16(2044);
+emit_16(2111);
+emit_16(2045);
+emit_16(2111);
+emit_16(2044);
+emit_16(2112);
+emit_16(2046);
+emit_16(2113);
+emit_16(2047);
+emit_16(2113);
+emit_16(2046);
+emit_16(2113);
+emit_16(2047);
+emit_16(2114);
+emit_16(2048);
+emit_16(2114);
+emit_16(2047);
+emit_16(2114);
+emit_16(2048);
+emit_16(2115);
+emit_16(2049);
+emit_16(2115);
+emit_16(2048);
+emit_16(2115);
+emit_16(2049);
+emit_16(2116);
+emit_16(2050);
+emit_16(2116);
+emit_16(2049);
+emit_16(2116);
+emit_16(2050);
+emit_16(2117);
+emit_16(2051);
+emit_16(2117);
+emit_16(2050);
+emit_16(2117);
+emit_16(2051);
+emit_16(2118);
+emit_16(2052);
+emit_16(2118);
+emit_16(2051);
+emit_16(2118);
+emit_16(2052);
+emit_16(2119);
+emit_16(2053);
+emit_16(2119);
+emit_16(2052);
+emit_16(2119);
+emit_16(2053);
+emit_16(2120);
+emit_16(2054);
+emit_16(2120);
+emit_16(2053);
+emit_16(2120);
+emit_16(2054);
+emit_16(2121);
+emit_16(2055);
+emit_16(2121);
+emit_16(2054);
+emit_16(2121);
+emit_16(2055);
+emit_16(2122);
+emit_16(2056);
+emit_16(2122);
+emit_16(2055);
+emit_16(2122);
+emit_16(2056);
+emit_16(2123);
+emit_16(2057);
+emit_16(2123);
+emit_16(2056);
+emit_16(2123);
+emit_16(2057);
+emit_16(2124);
+emit_16(2058);
+emit_16(2124);
+emit_16(2057);
+emit_16(2124);
+emit_16(2058);
+emit_16(2125);
+emit_16(2059);
+emit_16(2125);
+emit_16(2058);
+emit_16(2125);
+emit_16(2059);
+emit_16(2126);
+emit_16(2060);
+emit_16(2126);
+emit_16(2059);
+emit_16(2126);
+emit_16(2060);
+emit_16(2127);
+emit_16(2061);
+emit_16(2127);
+emit_16(2060);
+emit_16(2127);
+emit_16(2061);
+emit_16(2128);
+emit_16(2062);
+emit_16(2128);
+emit_16(2061);
+emit_16(2128);
+emit_16(2062);
+emit_16(2129);
+emit_16(2063);
+emit_16(2129);
+emit_16(2062);
+emit_16(2129);
+emit_16(2063);
+emit_16(2130);
+emit_16(2064);
+emit_16(2130);
+emit_16(2063);
+emit_16(2130);
+emit_16(2064);
+emit_16(2131);
+emit_16(2065);
+emit_16(2131);
+emit_16(2064);
+emit_16(2131);
+emit_16(2065);
+emit_16(2132);
+emit_16(2066);
+emit_16(2132);
+emit_16(2065);
+emit_16(2132);
+emit_16(2066);
+emit_16(2133);
+emit_16(2067);
+emit_16(2133);
+emit_16(2066);
+emit_16(2133);
+emit_16(2067);
+emit_16(2134);
+emit_16(2068);
+emit_16(2134);
+emit_16(2067);
+emit_16(2134);
+emit_16(2068);
+emit_16(2135);
+emit_16(2069);
+emit_16(2135);
+emit_16(2068);
+emit_16(2135);
+emit_16(2069);
+emit_16(2136);
+emit_16(2070);
+emit_16(2136);
+emit_16(2069);
+emit_16(2136);
+emit_16(2070);
+emit_16(2137);
+emit_16(2071);
+emit_16(2137);
+emit_16(2070);
+emit_16(2137);
+emit_16(2071);
+emit_16(2138);
+emit_16(2072);
+emit_16(2138);
+emit_16(2071);
+emit_16(2138);
+emit_16(2072);
+emit_16(2139);
+emit_16(2073);
+emit_16(2139);
+emit_16(2072);
+emit_16(2139);
+emit_16(2073);
+emit_16(2140);
+emit_16(2074);
+emit_16(2140);
+emit_16(2073);
+emit_16(2140);
+emit_16(2074);
+emit_16(2141);
+emit_16(2075);
+emit_16(2141);
+emit_16(2074);
+emit_16(2141);
+emit_16(2075);
+emit_16(2142);
+emit_16(2076);
+emit_16(2142);
+emit_16(2075);
+emit_16(2142);
+emit_16(2076);
+emit_16(2143);
+emit_16(2077);
+emit_16(2143);
+emit_16(2076);
+emit_16(2143);
+emit_16(2077);
+emit_16(2144);
+emit_16(2078);
+emit_16(2144);
+emit_16(2077);
+emit_16(2144);
+emit_16(2078);
+emit_16(2145);
+emit_16(2079);
+emit_16(2145);
+emit_16(2078);
+emit_16(2145);
+emit_16(2079);
+emit_16(2146);
+emit_16(2080);
+emit_16(2146);
+emit_16(2079);
+emit_16(2146);
+emit_16(2080);
+emit_16(2147);
+emit_16(2081);
+emit_16(2147);
+emit_16(2080);
+emit_16(2147);
+emit_16(2081);
+emit_16(2148);
+emit_16(2082);
+emit_16(2148);
+emit_16(2081);
+emit_16(2148);
+emit_16(2082);
+emit_16(2149);
+emit_16(2083);
+emit_16(2149);
+emit_16(2082);
+emit_16(2149);
+emit_16(2083);
+emit_16(2150);
+emit_16(2084);
+emit_16(2150);
+emit_16(2083);
+emit_16(2150);
+emit_16(2084);
+emit_16(2151);
+emit_16(2085);
+emit_16(2151);
+emit_16(2084);
+emit_16(2151);
+emit_16(2085);
+emit_16(2152);
+emit_16(2086);
+emit_16(2152);
+emit_16(2085);
+emit_16(2152);
+emit_16(2086);
+emit_16(2153);
+emit_16(2087);
+emit_16(2153);
+emit_16(2086);
+emit_16(2153);
+emit_16(2087);
+emit_16(2154);
+emit_16(2088);
+emit_16(2154);
+emit_16(2087);
+emit_16(2154);
+emit_16(2088);
+emit_16(2155);
+emit_16(2089);
+emit_16(2155);
+emit_16(2088);
+emit_16(2155);
+emit_16(2089);
+emit_16(2156);
+emit_16(2090);
+emit_16(2156);
+emit_16(2089);
+emit_16(2156);
+emit_16(2090);
+emit_16(2157);
+emit_16(2091);
+emit_16(2157);
+emit_16(2090);
+emit_16(2157);
+emit_16(2091);
+emit_16(2158);
+emit_16(2092);
+emit_16(2158);
+emit_16(2091);
+emit_16(2158);
+emit_16(2092);
+emit_16(2159);
+emit_16(2093);
+emit_16(2159);
+emit_16(2092);
+emit_16(2159);
+emit_16(2093);
+emit_16(2160);
+emit_16(2094);
+emit_16(2160);
+emit_16(2093);
+emit_16(2160);
+emit_16(2094);
+emit_16(2161);
+emit_16(2095);
+emit_16(2161);
+emit_16(2094);
+emit_16(2161);
+emit_16(2095);
+emit_16(2162);
+emit_16(2096);
+emit_16(2162);
+emit_16(2095);
+emit_16(2162);
+emit_16(2096);
+emit_16(2163);
+emit_16(2097);
+emit_16(2163);
+emit_16(2096);
+emit_16(2163);
+emit_16(2097);
+emit_16(2164);
+emit_16(2098);
+emit_16(2164);
+emit_16(2097);
+emit_16(2164);
+emit_16(2098);
+emit_16(2165);
+emit_16(2099);
+emit_16(2165);
+emit_16(2098);
+emit_16(2165);
+emit_16(2099);
+emit_16(2166);
+emit_16(2100);
+emit_16(2166);
+emit_16(2099);
+emit_16(2166);
+emit_16(2100);
+emit_16(2167);
+emit_16(2101);
+emit_16(2167);
+emit_16(2100);
+emit_16(2167);
+emit_16(2101);
+emit_16(2168);
+emit_16(2102);
+emit_16(2168);
+emit_16(2101);
+emit_16(2168);
+emit_16(2102);
+emit_16(2169);
+emit_16(2103);
+emit_16(2169);
+emit_16(2102);
+emit_16(2169);
+emit_16(2103);
+emit_16(2170);
+emit_16(2104);
+emit_16(2170);
+emit_16(2103);
+emit_16(2170);
+emit_16(2104);
+emit_16(2171);
+emit_16(2105);
+emit_16(2171);
+emit_16(2104);
+emit_16(2171);
+emit_16(2105);
+emit_16(2172);
+emit_16(2106);
+emit_16(2172);
+emit_16(2105);
+emit_16(2172);
+emit_16(2106);
+emit_16(2173);
+emit_16(2107);
+emit_16(2173);
+emit_16(2106);
+emit_16(2173);
+emit_16(2107);
+emit_16(2174);
+emit_16(2108);
+emit_16(2174);
+emit_16(2107);
+emit_16(2174);
+emit_16(2108);
+emit_16(2175);
+emit_16(2109);
+emit_16(2175);
+emit_16(2108);
+emit_16(2175);
+emit_16(2109);
+emit_16(2176);
+emit_16(2110);
+emit_16(2176);
+emit_16(2109);
+emit_16(2176);
+emit_16(2110);
+emit_16(2177);
+emit_16(2111);
+emit_16(2177);
+emit_16(2110);
+emit_16(2178);
+emit_16(2112);
+emit_16(2179);
+emit_16(2113);
+emit_16(2179);
+emit_16(2112);
+emit_16(2179);
+emit_16(2113);
+emit_16(2180);
+emit_16(2114);
+emit_16(2180);
+emit_16(2113);
+emit_16(2180);
+emit_16(2114);
+emit_16(2181);
+emit_16(2115);
+emit_16(2181);
+emit_16(2114);
+emit_16(2181);
+emit_16(2115);
+emit_16(2182);
+emit_16(2116);
+emit_16(2182);
+emit_16(2115);
+emit_16(2182);
+emit_16(2116);
+emit_16(2183);
+emit_16(2117);
+emit_16(2183);
+emit_16(2116);
+emit_16(2183);
+emit_16(2117);
+emit_16(2184);
+emit_16(2118);
+emit_16(2184);
+emit_16(2117);
+emit_16(2184);
+emit_16(2118);
+emit_16(2185);
+emit_16(2119);
+emit_16(2185);
+emit_16(2118);
+emit_16(2185);
+emit_16(2119);
+emit_16(2186);
+emit_16(2120);
+emit_16(2186);
+emit_16(2119);
+emit_16(2186);
+emit_16(2120);
+emit_16(2187);
+emit_16(2121);
+emit_16(2187);
+emit_16(2120);
+emit_16(2187);
+emit_16(2121);
+emit_16(2188);
+emit_16(2122);
+emit_16(2188);
+emit_16(2121);
+emit_16(2188);
+emit_16(2122);
+emit_16(2189);
+emit_16(2123);
+emit_16(2189);
+emit_16(2122);
+emit_16(2189);
+emit_16(2123);
+emit_16(2190);
+emit_16(2124);
+emit_16(2190);
+emit_16(2123);
+emit_16(2190);
+emit_16(2124);
+emit_16(2191);
+emit_16(2125);
+emit_16(2191);
+emit_16(2124);
+emit_16(2191);
+emit_16(2125);
+emit_16(2192);
+emit_16(2126);
+emit_16(2192);
+emit_16(2125);
+emit_16(2192);
+emit_16(2126);
+emit_16(2193);
+emit_16(2127);
+emit_16(2193);
+emit_16(2126);
+emit_16(2193);
+emit_16(2127);
+emit_16(2194);
+emit_16(2128);
+emit_16(2194);
+emit_16(2127);
+emit_16(2194);
+emit_16(2128);
+emit_16(2195);
+emit_16(2129);
+emit_16(2195);
+emit_16(2128);
+emit_16(2195);
+emit_16(2129);
+emit_16(2196);
+emit_16(2130);
+emit_16(2196);
+emit_16(2129);
+emit_16(2196);
+emit_16(2130);
+emit_16(2197);
+emit_16(2131);
+emit_16(2197);
+emit_16(2130);
+emit_16(2197);
+emit_16(2131);
+emit_16(2198);
+emit_16(2132);
+emit_16(2198);
+emit_16(2131);
+emit_16(2198);
+emit_16(2132);
+emit_16(2199);
+emit_16(2133);
+emit_16(2199);
+emit_16(2132);
+emit_16(2199);
+emit_16(2133);
+emit_16(2200);
+emit_16(2134);
+emit_16(2200);
+emit_16(2133);
+emit_16(2200);
+emit_16(2134);
+emit_16(2201);
+emit_16(2135);
+emit_16(2201);
+emit_16(2134);
+emit_16(2201);
+emit_16(2135);
+emit_16(2202);
+emit_16(2136);
+emit_16(2202);
+emit_16(2135);
+emit_16(2202);
+emit_16(2136);
+emit_16(2203);
+emit_16(2137);
+emit_16(2203);
+emit_16(2136);
+emit_16(2203);
+emit_16(2137);
+emit_16(2204);
+emit_16(2138);
+emit_16(2204);
+emit_16(2137);
+emit_16(2204);
+emit_16(2138);
+emit_16(2205);
+emit_16(2139);
+emit_16(2205);
+emit_16(2138);
+emit_16(2205);
+emit_16(2139);
+emit_16(2206);
+emit_16(2140);
+emit_16(2206);
+emit_16(2139);
+emit_16(2206);
+emit_16(2140);
+emit_16(2207);
+emit_16(2141);
+emit_16(2207);
+emit_16(2140);
+emit_16(2207);
+emit_16(2141);
+emit_16(2208);
+emit_16(2142);
+emit_16(2208);
+emit_16(2141);
+emit_16(2208);
+emit_16(2142);
+emit_16(2209);
+emit_16(2143);
+emit_16(2209);
+emit_16(2142);
+emit_16(2209);
+emit_16(2143);
+emit_16(2210);
+emit_16(2144);
+emit_16(2210);
+emit_16(2143);
+emit_16(2210);
+emit_16(2144);
+emit_16(2211);
+emit_16(2145);
+emit_16(2211);
+emit_16(2144);
+emit_16(2211);
+emit_16(2145);
+emit_16(2212);
+emit_16(2146);
+emit_16(2212);
+emit_16(2145);
+emit_16(2212);
+emit_16(2146);
+emit_16(2213);
+emit_16(2147);
+emit_16(2213);
+emit_16(2146);
+emit_16(2213);
+emit_16(2147);
+emit_16(2214);
+emit_16(2148);
+emit_16(2214);
+emit_16(2147);
+emit_16(2214);
+emit_16(2148);
+emit_16(2215);
+emit_16(2149);
+emit_16(2215);
+emit_16(2148);
+emit_16(2215);
+emit_16(2149);
+emit_16(2216);
+emit_16(2150);
+emit_16(2216);
+emit_16(2149);
+emit_16(2216);
+emit_16(2150);
+emit_16(2217);
+emit_16(2151);
+emit_16(2217);
+emit_16(2150);
+emit_16(2217);
+emit_16(2151);
+emit_16(2218);
+emit_16(2152);
+emit_16(2218);
+emit_16(2151);
+emit_16(2218);
+emit_16(2152);
+emit_16(2219);
+emit_16(2153);
+emit_16(2219);
+emit_16(2152);
+emit_16(2219);
+emit_16(2153);
+emit_16(2220);
+emit_16(2154);
+emit_16(2220);
+emit_16(2153);
+emit_16(2220);
+emit_16(2154);
+emit_16(2221);
+emit_16(2155);
+emit_16(2221);
+emit_16(2154);
+emit_16(2221);
+emit_16(2155);
+emit_16(2222);
+emit_16(2156);
+emit_16(2222);
+emit_16(2155);
+emit_16(2222);
+emit_16(2156);
+emit_16(2223);
+emit_16(2157);
+emit_16(2223);
+emit_16(2156);
+emit_16(2223);
+emit_16(2157);
+emit_16(2224);
+emit_16(2158);
+emit_16(2224);
+emit_16(2157);
+emit_16(2224);
+emit_16(2158);
+emit_16(2225);
+emit_16(2159);
+emit_16(2225);
+emit_16(2158);
+emit_16(2225);
+emit_16(2159);
+emit_16(2226);
+emit_16(2160);
+emit_16(2226);
+emit_16(2159);
+emit_16(2226);
+emit_16(2160);
+emit_16(2227);
+emit_16(2161);
+emit_16(2227);
+emit_16(2160);
+emit_16(2227);
+emit_16(2161);
+emit_16(2228);
+emit_16(2162);
+emit_16(2228);
+emit_16(2161);
+emit_16(2228);
+emit_16(2162);
+emit_16(2229);
+emit_16(2163);
+emit_16(2229);
+emit_16(2162);
+emit_16(2229);
+emit_16(2163);
+emit_16(2230);
+emit_16(2164);
+emit_16(2230);
+emit_16(2163);
+emit_16(2230);
+emit_16(2164);
+emit_16(2231);
+emit_16(2165);
+emit_16(2231);
+emit_16(2164);
+emit_16(2231);
+emit_16(2165);
+emit_16(2232);
+emit_16(2166);
+emit_16(2232);
+emit_16(2165);
+emit_16(2232);
+emit_16(2166);
+emit_16(2233);
+emit_16(2167);
+emit_16(2233);
+emit_16(2166);
+emit_16(2233);
+emit_16(2167);
+emit_16(2234);
+emit_16(2168);
+emit_16(2234);
+emit_16(2167);
+emit_16(2234);
+emit_16(2168);
+emit_16(2235);
+emit_16(2169);
+emit_16(2235);
+emit_16(2168);
+emit_16(2235);
+emit_16(2169);
+emit_16(2236);
+emit_16(2170);
+emit_16(2236);
+emit_16(2169);
+emit_16(2236);
+emit_16(2170);
+emit_16(2237);
+emit_16(2171);
+emit_16(2237);
+emit_16(2170);
+emit_16(2237);
+emit_16(2171);
+emit_16(2238);
+emit_16(2172);
+emit_16(2238);
+emit_16(2171);
+emit_16(2238);
+emit_16(2172);
+emit_16(2239);
+emit_16(2173);
+emit_16(2239);
+emit_16(2172);
+emit_16(2239);
+emit_16(2173);
+emit_16(2240);
+emit_16(2174);
+emit_16(2240);
+emit_16(2173);
+emit_16(2240);
+emit_16(2174);
+emit_16(2241);
+emit_16(2175);
+emit_16(2241);
+emit_16(2174);
+emit_16(2241);
+emit_16(2175);
+emit_16(2242);
+emit_16(2176);
+emit_16(2242);
+emit_16(2175);
+emit_16(2242);
+emit_16(2176);
+emit_16(2243);
+emit_16(2177);
+emit_16(2243);
+emit_16(2176);
+emit_16(2244);
+emit_16(2178);
+emit_16(2245);
+emit_16(2179);
+emit_16(2245);
+emit_16(2178);
+emit_16(2245);
+emit_16(2179);
+emit_16(2246);
+emit_16(2180);
+emit_16(2246);
+emit_16(2179);
+emit_16(2246);
+emit_16(2180);
+emit_16(2247);
+emit_16(2181);
+emit_16(2247);
+emit_16(2180);
+emit_16(2247);
+emit_16(2181);
+emit_16(2248);
+emit_16(2182);
+emit_16(2248);
+emit_16(2181);
+emit_16(2248);
+emit_16(2182);
+emit_16(2249);
+emit_16(2183);
+emit_16(2249);
+emit_16(2182);
+emit_16(2249);
+emit_16(2183);
+emit_16(2250);
+emit_16(2184);
+emit_16(2250);
+emit_16(2183);
+emit_16(2250);
+emit_16(2184);
+emit_16(2251);
+emit_16(2185);
+emit_16(2251);
+emit_16(2184);
+emit_16(2251);
+emit_16(2185);
+emit_16(2252);
+emit_16(2186);
+emit_16(2252);
+emit_16(2185);
+emit_16(2252);
+emit_16(2186);
+emit_16(2253);
+emit_16(2187);
+emit_16(2253);
+emit_16(2186);
+emit_16(2253);
+emit_16(2187);
+emit_16(2254);
+emit_16(2188);
+emit_16(2254);
+emit_16(2187);
+emit_16(2254);
+emit_16(2188);
+emit_16(2255);
+emit_16(2189);
+emit_16(2255);
+emit_16(2188);
+emit_16(2255);
+emit_16(2189);
+emit_16(2256);
+emit_16(2190);
+emit_16(2256);
+emit_16(2189);
+emit_16(2256);
+emit_16(2190);
+emit_16(2257);
+emit_16(2191);
+emit_16(2257);
+emit_16(2190);
+emit_16(2257);
+emit_16(2191);
+emit_16(2258);
+emit_16(2192);
+emit_16(2258);
+emit_16(2191);
+emit_16(2258);
+emit_16(2192);
+emit_16(2259);
+emit_16(2193);
+emit_16(2259);
+emit_16(2192);
+emit_16(2259);
+emit_16(2193);
+emit_16(2260);
+emit_16(2194);
+emit_16(2260);
+emit_16(2193);
+emit_16(2260);
+emit_16(2194);
+emit_16(2261);
+emit_16(2195);
+emit_16(2261);
+emit_16(2194);
+emit_16(2261);
+emit_16(2195);
+emit_16(2262);
+emit_16(2196);
+emit_16(2262);
+emit_16(2195);
+emit_16(2262);
+emit_16(2196);
+emit_16(2263);
+emit_16(2197);
+emit_16(2263);
+emit_16(2196);
+emit_16(2263);
+emit_16(2197);
+emit_16(2264);
+emit_16(2198);
+emit_16(2264);
+emit_16(2197);
+emit_16(2264);
+emit_16(2198);
+emit_16(2265);
+emit_16(2199);
+emit_16(2265);
+emit_16(2198);
+emit_16(2265);
+emit_16(2199);
+emit_16(2266);
+emit_16(2200);
+emit_16(2266);
+emit_16(2199);
+emit_16(2266);
+emit_16(2200);
+emit_16(2267);
+emit_16(2201);
+emit_16(2267);
+emit_16(2200);
+emit_16(2267);
+emit_16(2201);
+emit_16(2268);
+emit_16(2202);
+emit_16(2268);
+emit_16(2201);
+emit_16(2268);
+emit_16(2202);
+emit_16(2269);
+emit_16(2203);
+emit_16(2269);
+emit_16(2202);
+emit_16(2269);
+emit_16(2203);
+emit_16(2270);
+emit_16(2204);
+emit_16(2270);
+emit_16(2203);
+emit_16(2270);
+emit_16(2204);
+emit_16(2271);
+emit_16(2205);
+emit_16(2271);
+emit_16(2204);
+emit_16(2271);
+emit_16(2205);
+emit_16(2272);
+emit_16(2206);
+emit_16(2272);
+emit_16(2205);
+emit_16(2272);
+emit_16(2206);
+emit_16(2273);
+emit_16(2207);
+emit_16(2273);
+emit_16(2206);
+emit_16(2273);
+emit_16(2207);
+emit_16(2274);
+emit_16(2208);
+emit_16(2274);
+emit_16(2207);
+emit_16(2274);
+emit_16(2208);
+emit_16(2275);
+emit_16(2209);
+emit_16(2275);
+emit_16(2208);
+emit_16(2275);
+emit_16(2209);
+emit_16(2276);
+emit_16(2210);
+emit_16(2276);
+emit_16(2209);
+emit_16(2276);
+emit_16(2210);
+emit_16(2277);
+emit_16(2211);
+emit_16(2277);
+emit_16(2210);
+emit_16(2277);
+emit_16(2211);
+emit_16(2278);
+emit_16(2212);
+emit_16(2278);
+emit_16(2211);
+emit_16(2278);
+emit_16(2212);
+emit_16(2279);
+emit_16(2213);
+emit_16(2279);
+emit_16(2212);
+emit_16(2279);
+emit_16(2213);
+emit_16(2280);
+emit_16(2214);
+emit_16(2280);
+emit_16(2213);
+emit_16(2280);
+emit_16(2214);
+emit_16(2281);
+emit_16(2215);
+emit_16(2281);
+emit_16(2214);
+emit_16(2281);
+emit_16(2215);
+emit_16(2282);
+emit_16(2216);
+emit_16(2282);
+emit_16(2215);
+emit_16(2282);
+emit_16(2216);
+emit_16(2283);
+emit_16(2217);
+emit_16(2283);
+emit_16(2216);
+emit_16(2283);
+emit_16(2217);
+emit_16(2284);
+emit_16(2218);
+emit_16(2284);
+emit_16(2217);
+emit_16(2284);
+emit_16(2218);
+emit_16(2285);
+emit_16(2219);
+emit_16(2285);
+emit_16(2218);
+emit_16(2285);
+emit_16(2219);
+emit_16(2286);
+emit_16(2220);
+emit_16(2286);
+emit_16(2219);
+emit_16(2286);
+emit_16(2220);
+emit_16(2287);
+emit_16(2221);
+emit_16(2287);
+emit_16(2220);
+emit_16(2287);
+emit_16(2221);
+emit_16(2288);
+emit_16(2222);
+emit_16(2288);
+emit_16(2221);
+emit_16(2288);
+emit_16(2222);
+emit_16(2289);
+emit_16(2223);
+emit_16(2289);
+emit_16(2222);
+emit_16(2289);
+emit_16(2223);
+emit_16(2290);
+emit_16(2224);
+emit_16(2290);
+emit_16(2223);
+emit_16(2290);
+emit_16(2224);
+emit_16(2291);
+emit_16(2225);
+emit_16(2291);
+emit_16(2224);
+emit_16(2291);
+emit_16(2225);
+emit_16(2292);
+emit_16(2226);
+emit_16(2292);
+emit_16(2225);
+emit_16(2292);
+emit_16(2226);
+emit_16(2293);
+emit_16(2227);
+emit_16(2293);
+emit_16(2226);
+emit_16(2293);
+emit_16(2227);
+emit_16(2294);
+emit_16(2228);
+emit_16(2294);
+emit_16(2227);
+emit_16(2294);
+emit_16(2228);
+emit_16(2295);
+emit_16(2229);
+emit_16(2295);
+emit_16(2228);
+emit_16(2295);
+emit_16(2229);
+emit_16(2296);
+emit_16(2230);
+emit_16(2296);
+emit_16(2229);
+emit_16(2296);
+emit_16(2230);
+emit_16(2297);
+emit_16(2231);
+emit_16(2297);
+emit_16(2230);
+emit_16(2297);
+emit_16(2231);
+emit_16(2298);
+emit_16(2232);
+emit_16(2298);
+emit_16(2231);
+emit_16(2298);
+emit_16(2232);
+emit_16(2299);
+emit_16(2233);
+emit_16(2299);
+emit_16(2232);
+emit_16(2299);
+emit_16(2233);
+emit_16(2300);
+emit_16(2234);
+emit_16(2300);
+emit_16(2233);
+emit_16(2300);
+emit_16(2234);
+emit_16(2301);
+emit_16(2235);
+emit_16(2301);
+emit_16(2234);
+emit_16(2301);
+emit_16(2235);
+emit_16(2302);
+emit_16(2236);
+emit_16(2302);
+emit_16(2235);
+emit_16(2302);
+emit_16(2236);
+emit_16(2303);
+emit_16(2237);
+emit_16(2303);
+emit_16(2236);
+emit_16(2303);
+emit_16(2237);
+emit_16(2304);
+emit_16(2238);
+emit_16(2304);
+emit_16(2237);
+emit_16(2304);
+emit_16(2238);
+emit_16(2305);
+emit_16(2239);
+emit_16(2305);
+emit_16(2238);
+emit_16(2305);
+emit_16(2239);
+emit_16(2306);
+emit_16(2240);
+emit_16(2306);
+emit_16(2239);
+emit_16(2306);
+emit_16(2240);
+emit_16(2307);
+emit_16(2241);
+emit_16(2307);
+emit_16(2240);
+emit_16(2307);
+emit_16(2241);
+emit_16(2308);
+emit_16(2242);
+emit_16(2308);
+emit_16(2241);
+emit_16(2308);
+emit_16(2242);
+emit_16(2309);
+emit_16(2243);
+emit_16(2309);
+emit_16(2242);
+emit_start(Landscape07Idx)
+emit_16(0);
+emit_16(1);
+emit_16(2);
+emit_16(3);
+emit_16(2);
+emit_16(1);
+emit_16(2);
+emit_16(3);
+emit_16(4);
+emit_16(5);
+emit_16(4);
+emit_16(3);
+emit_16(4);
+emit_16(5);
+emit_16(6);
+emit_16(7);
+emit_16(6);
+emit_16(5);
+emit_16(6);
+emit_16(7);
+emit_16(8);
+emit_16(9);
+emit_16(8);
+emit_16(7);
+emit_16(8);
+emit_16(9);
+emit_16(10);
+emit_16(11);
+emit_16(10);
+emit_16(9);
+emit_16(10);
+emit_16(11);
+emit_16(12);
+emit_16(13);
+emit_16(12);
+emit_16(11);
+emit_16(12);
+emit_16(13);
+emit_16(14);
+emit_16(15);
+emit_16(14);
+emit_16(13);
+emit_16(14);
+emit_16(15);
+emit_16(16);
+emit_16(17);
+emit_16(16);
+emit_16(15);
+emit_16(16);
+emit_16(17);
+emit_16(18);
+emit_16(19);
+emit_16(18);
+emit_16(17);
+emit_16(18);
+emit_16(19);
+emit_16(20);
+emit_16(21);
+emit_16(20);
+emit_16(19);
+emit_16(20);
+emit_16(21);
+emit_16(22);
+emit_16(23);
+emit_16(22);
+emit_16(21);
+emit_16(22);
+emit_16(23);
+emit_16(24);
+emit_16(25);
+emit_16(24);
+emit_16(23);
+emit_16(24);
+emit_16(25);
+emit_16(26);
+emit_16(27);
+emit_16(26);
+emit_16(25);
+emit_16(26);
+emit_16(27);
+emit_16(28);
+emit_16(29);
+emit_16(28);
+emit_16(27);
+emit_16(28);
+emit_16(29);
+emit_16(30);
+emit_16(31);
+emit_16(30);
+emit_16(29);
+emit_16(30);
+emit_16(31);
+emit_16(32);
+emit_16(33);
+emit_16(32);
+emit_16(31);
+emit_16(32);
+emit_16(33);
+emit_16(34);
+emit_16(35);
+emit_16(34);
+emit_16(33);
+emit_16(34);
+emit_16(35);
+emit_16(36);
+emit_16(37);
+emit_16(36);
+emit_16(35);
+emit_16(36);
+emit_16(37);
+emit_16(38);
+emit_16(39);
+emit_16(38);
+emit_16(37);
+emit_16(38);
+emit_16(39);
+emit_16(40);
+emit_16(41);
+emit_16(40);
+emit_16(39);
+emit_16(40);
+emit_16(41);
+emit_16(42);
+emit_16(43);
+emit_16(42);
+emit_16(41);
+emit_16(42);
+emit_16(43);
+emit_16(44);
+emit_16(45);
+emit_16(44);
+emit_16(43);
+emit_16(44);
+emit_16(45);
+emit_16(46);
+emit_16(47);
+emit_16(46);
+emit_16(45);
+emit_16(46);
+emit_16(47);
+emit_16(48);
+emit_16(49);
+emit_16(48);
+emit_16(47);
+emit_16(48);
+emit_16(49);
+emit_16(50);
+emit_16(51);
+emit_16(50);
+emit_16(49);
+emit_16(50);
+emit_16(51);
+emit_16(52);
+emit_16(53);
+emit_16(52);
+emit_16(51);
+emit_16(52);
+emit_16(53);
+emit_16(54);
+emit_16(55);
+emit_16(54);
+emit_16(53);
+emit_16(54);
+emit_16(55);
+emit_16(56);
+emit_16(57);
+emit_16(56);
+emit_16(55);
+emit_16(56);
+emit_16(57);
+emit_16(58);
+emit_16(59);
+emit_16(58);
+emit_16(57);
+emit_16(58);
+emit_16(59);
+emit_16(60);
+emit_16(61);
+emit_16(60);
+emit_16(59);
+emit_16(60);
+emit_16(61);
+emit_16(62);
+emit_16(63);
+emit_16(62);
+emit_16(61);
+emit_16(62);
+emit_16(63);
+emit_16(64);
+emit_16(65);
+emit_16(64);
+emit_16(63);
+emit_16(64);
+emit_16(65);
+emit_16(66);
+emit_16(67);
+emit_16(66);
+emit_16(65);
+emit_16(66);
+emit_16(67);
+emit_16(68);
+emit_16(69);
+emit_16(68);
+emit_16(67);
+emit_16(68);
+emit_16(69);
+emit_16(70);
+emit_16(71);
+emit_16(70);
+emit_16(69);
+emit_16(70);
+emit_16(71);
+emit_16(72);
+emit_16(73);
+emit_16(72);
+emit_16(71);
+emit_16(72);
+emit_16(73);
+emit_16(74);
+emit_16(75);
+emit_16(74);
+emit_16(73);
+emit_16(74);
+emit_16(75);
+emit_16(76);
+emit_16(77);
+emit_16(76);
+emit_16(75);
+emit_16(76);
+emit_16(77);
+emit_16(78);
+emit_16(79);
+emit_16(78);
+emit_16(77);
+emit_16(78);
+emit_16(79);
+emit_16(80);
+emit_16(81);
+emit_16(80);
+emit_16(79);
+emit_16(80);
+emit_16(81);
+emit_16(82);
+emit_16(83);
+emit_16(82);
+emit_16(81);
+emit_16(82);
+emit_16(83);
+emit_16(84);
+emit_16(85);
+emit_16(84);
+emit_16(83);
+emit_16(84);
+emit_16(85);
+emit_16(86);
+emit_16(87);
+emit_16(86);
+emit_16(85);
+emit_16(86);
+emit_16(87);
+emit_16(88);
+emit_16(89);
+emit_16(88);
+emit_16(87);
+emit_16(88);
+emit_16(89);
+emit_16(90);
+emit_16(91);
+emit_16(90);
+emit_16(89);
+emit_16(90);
+emit_16(91);
+emit_16(92);
+emit_16(93);
+emit_16(92);
+emit_16(91);
+emit_16(92);
+emit_16(93);
+emit_16(94);
+emit_16(95);
+emit_16(94);
+emit_16(93);
+emit_16(94);
+emit_16(95);
+emit_16(96);
+emit_16(97);
+emit_16(96);
+emit_16(95);
+emit_16(96);
+emit_16(97);
+emit_16(98);
+emit_16(99);
+emit_16(98);
+emit_16(97);
+emit_16(98);
+emit_16(99);
+emit_16(100);
+emit_16(101);
+emit_16(100);
+emit_16(99);
+emit_16(100);
+emit_16(101);
+emit_16(102);
+emit_16(103);
+emit_16(102);
+emit_16(101);
+emit_16(102);
+emit_16(103);
+emit_16(104);
+emit_16(105);
+emit_16(104);
+emit_16(103);
+emit_16(104);
+emit_16(105);
+emit_16(106);
+emit_16(107);
+emit_16(106);
+emit_16(105);
+emit_16(106);
+emit_16(107);
+emit_16(108);
+emit_16(109);
+emit_16(108);
+emit_16(107);
+emit_16(108);
+emit_16(109);
+emit_16(110);
+emit_16(111);
+emit_16(110);
+emit_16(109);
+emit_16(110);
+emit_16(111);
+emit_16(112);
+emit_16(113);
+emit_16(112);
+emit_16(111);
+emit_16(112);
+emit_16(113);
+emit_16(114);
+emit_16(115);
+emit_16(114);
+emit_16(113);
+emit_16(114);
+emit_16(115);
+emit_16(116);
+emit_16(117);
+emit_16(116);
+emit_16(115);
+emit_16(116);
+emit_16(117);
+emit_16(118);
+emit_16(119);
+emit_16(118);
+emit_16(117);
+emit_16(118);
+emit_16(119);
+emit_16(120);
+emit_16(121);
+emit_16(120);
+emit_16(119);
+emit_16(120);
+emit_16(121);
+emit_16(122);
+emit_16(123);
+emit_16(122);
+emit_16(121);
+emit_16(122);
+emit_16(123);
+emit_16(124);
+emit_16(125);
+emit_16(124);
+emit_16(123);
+emit_16(124);
+emit_16(125);
+emit_16(126);
+emit_16(127);
+emit_16(126);
+emit_16(125);
+emit_16(128);
+emit_16(0);
+emit_16(129);
+emit_16(2);
+emit_16(129);
+emit_16(0);
+emit_16(129);
+emit_16(2);
+emit_16(130);
+emit_16(4);
+emit_16(130);
+emit_16(2);
+emit_16(130);
+emit_16(4);
+emit_16(131);
+emit_16(6);
+emit_16(131);
+emit_16(4);
+emit_16(131);
+emit_16(6);
+emit_16(132);
+emit_16(8);
+emit_16(132);
+emit_16(6);
+emit_16(132);
+emit_16(8);
+emit_16(133);
+emit_16(10);
+emit_16(133);
+emit_16(8);
+emit_16(133);
+emit_16(10);
+emit_16(134);
+emit_16(12);
+emit_16(134);
+emit_16(10);
+emit_16(134);
+emit_16(12);
+emit_16(135);
+emit_16(14);
+emit_16(135);
+emit_16(12);
+emit_16(135);
+emit_16(14);
+emit_16(136);
+emit_16(16);
+emit_16(136);
+emit_16(14);
+emit_16(136);
+emit_16(16);
+emit_16(137);
+emit_16(18);
+emit_16(137);
+emit_16(16);
+emit_16(137);
+emit_16(18);
+emit_16(138);
+emit_16(20);
+emit_16(138);
+emit_16(18);
+emit_16(138);
+emit_16(20);
+emit_16(139);
+emit_16(22);
+emit_16(139);
+emit_16(20);
+emit_16(139);
+emit_16(22);
+emit_16(140);
+emit_16(24);
+emit_16(140);
+emit_16(22);
+emit_16(140);
+emit_16(24);
+emit_16(141);
+emit_16(26);
+emit_16(141);
+emit_16(24);
+emit_16(141);
+emit_16(26);
+emit_16(142);
+emit_16(28);
+emit_16(142);
+emit_16(26);
+emit_16(142);
+emit_16(28);
+emit_16(143);
+emit_16(30);
+emit_16(143);
+emit_16(28);
+emit_16(143);
+emit_16(30);
+emit_16(144);
+emit_16(32);
+emit_16(144);
+emit_16(30);
+emit_16(144);
+emit_16(32);
+emit_16(145);
+emit_16(34);
+emit_16(145);
+emit_16(32);
+emit_16(145);
+emit_16(34);
+emit_16(146);
+emit_16(36);
+emit_16(146);
+emit_16(34);
+emit_16(146);
+emit_16(36);
+emit_16(147);
+emit_16(38);
+emit_16(147);
+emit_16(36);
+emit_16(147);
+emit_16(38);
+emit_16(148);
+emit_16(40);
+emit_16(148);
+emit_16(38);
+emit_16(148);
+emit_16(40);
+emit_16(149);
+emit_16(42);
+emit_16(149);
+emit_16(40);
+emit_16(149);
+emit_16(42);
+emit_16(150);
+emit_16(44);
+emit_16(150);
+emit_16(42);
+emit_16(150);
+emit_16(44);
+emit_16(151);
+emit_16(46);
+emit_16(151);
+emit_16(44);
+emit_16(151);
+emit_16(46);
+emit_16(152);
+emit_16(48);
+emit_16(152);
+emit_16(46);
+emit_16(152);
+emit_16(48);
+emit_16(153);
+emit_16(50);
+emit_16(153);
+emit_16(48);
+emit_16(153);
+emit_16(50);
+emit_16(154);
+emit_16(52);
+emit_16(154);
+emit_16(50);
+emit_16(154);
+emit_16(52);
+emit_16(155);
+emit_16(54);
+emit_16(155);
+emit_16(52);
+emit_16(155);
+emit_16(54);
+emit_16(156);
+emit_16(56);
+emit_16(156);
+emit_16(54);
+emit_16(156);
+emit_16(56);
+emit_16(157);
+emit_16(58);
+emit_16(157);
+emit_16(56);
+emit_16(157);
+emit_16(58);
+emit_16(158);
+emit_16(60);
+emit_16(158);
+emit_16(58);
+emit_16(158);
+emit_16(60);
+emit_16(159);
+emit_16(62);
+emit_16(159);
+emit_16(60);
+emit_16(159);
+emit_16(62);
+emit_16(160);
+emit_16(64);
+emit_16(160);
+emit_16(62);
+emit_16(160);
+emit_16(64);
+emit_16(161);
+emit_16(66);
+emit_16(161);
+emit_16(64);
+emit_16(161);
+emit_16(66);
+emit_16(162);
+emit_16(68);
+emit_16(162);
+emit_16(66);
+emit_16(162);
+emit_16(68);
+emit_16(163);
+emit_16(70);
+emit_16(163);
+emit_16(68);
+emit_16(163);
+emit_16(70);
+emit_16(164);
+emit_16(72);
+emit_16(164);
+emit_16(70);
+emit_16(164);
+emit_16(72);
+emit_16(165);
+emit_16(74);
+emit_16(165);
+emit_16(72);
+emit_16(165);
+emit_16(74);
+emit_16(166);
+emit_16(76);
+emit_16(166);
+emit_16(74);
+emit_16(166);
+emit_16(76);
+emit_16(167);
+emit_16(78);
+emit_16(167);
+emit_16(76);
+emit_16(167);
+emit_16(78);
+emit_16(168);
+emit_16(80);
+emit_16(168);
+emit_16(78);
+emit_16(168);
+emit_16(80);
+emit_16(169);
+emit_16(82);
+emit_16(169);
+emit_16(80);
+emit_16(169);
+emit_16(82);
+emit_16(170);
+emit_16(84);
+emit_16(170);
+emit_16(82);
+emit_16(170);
+emit_16(84);
+emit_16(171);
+emit_16(86);
+emit_16(171);
+emit_16(84);
+emit_16(171);
+emit_16(86);
+emit_16(172);
+emit_16(88);
+emit_16(172);
+emit_16(86);
+emit_16(172);
+emit_16(88);
+emit_16(173);
+emit_16(90);
+emit_16(173);
+emit_16(88);
+emit_16(173);
+emit_16(90);
+emit_16(174);
+emit_16(92);
+emit_16(174);
+emit_16(90);
+emit_16(174);
+emit_16(92);
+emit_16(175);
+emit_16(94);
+emit_16(175);
+emit_16(92);
+emit_16(175);
+emit_16(94);
+emit_16(176);
+emit_16(96);
+emit_16(176);
+emit_16(94);
+emit_16(176);
+emit_16(96);
+emit_16(177);
+emit_16(98);
+emit_16(177);
+emit_16(96);
+emit_16(177);
+emit_16(98);
+emit_16(178);
+emit_16(100);
+emit_16(178);
+emit_16(98);
+emit_16(178);
+emit_16(100);
+emit_16(179);
+emit_16(102);
+emit_16(179);
+emit_16(100);
+emit_16(179);
+emit_16(102);
+emit_16(180);
+emit_16(104);
+emit_16(180);
+emit_16(102);
+emit_16(180);
+emit_16(104);
+emit_16(181);
+emit_16(106);
+emit_16(181);
+emit_16(104);
+emit_16(181);
+emit_16(106);
+emit_16(182);
+emit_16(108);
+emit_16(182);
+emit_16(106);
+emit_16(182);
+emit_16(108);
+emit_16(183);
+emit_16(110);
+emit_16(183);
+emit_16(108);
+emit_16(183);
+emit_16(110);
+emit_16(184);
+emit_16(112);
+emit_16(184);
+emit_16(110);
+emit_16(184);
+emit_16(112);
+emit_16(185);
+emit_16(114);
+emit_16(185);
+emit_16(112);
+emit_16(185);
+emit_16(114);
+emit_16(186);
+emit_16(116);
+emit_16(186);
+emit_16(114);
+emit_16(186);
+emit_16(116);
+emit_16(187);
+emit_16(118);
+emit_16(187);
+emit_16(116);
+emit_16(187);
+emit_16(118);
+emit_16(188);
+emit_16(120);
+emit_16(188);
+emit_16(118);
+emit_16(188);
+emit_16(120);
+emit_16(189);
+emit_16(122);
+emit_16(189);
+emit_16(120);
+emit_16(189);
+emit_16(122);
+emit_16(190);
+emit_16(124);
+emit_16(190);
+emit_16(122);
+emit_16(190);
+emit_16(124);
+emit_16(191);
+emit_16(126);
+emit_16(191);
+emit_16(124);
+emit_16(192);
+emit_16(128);
+emit_16(193);
+emit_16(129);
+emit_16(193);
+emit_16(128);
+emit_16(193);
+emit_16(129);
+emit_16(194);
+emit_16(130);
+emit_16(194);
+emit_16(129);
+emit_16(194);
+emit_16(130);
+emit_16(195);
+emit_16(131);
+emit_16(195);
+emit_16(130);
+emit_16(195);
+emit_16(131);
+emit_16(196);
+emit_16(132);
+emit_16(196);
+emit_16(131);
+emit_16(196);
+emit_16(132);
+emit_16(197);
+emit_16(133);
+emit_16(197);
+emit_16(132);
+emit_16(197);
+emit_16(133);
+emit_16(198);
+emit_16(134);
+emit_16(198);
+emit_16(133);
+emit_16(198);
+emit_16(134);
+emit_16(199);
+emit_16(135);
+emit_16(199);
+emit_16(134);
+emit_16(199);
+emit_16(135);
+emit_16(200);
+emit_16(136);
+emit_16(200);
+emit_16(135);
+emit_16(200);
+emit_16(136);
+emit_16(201);
+emit_16(137);
+emit_16(201);
+emit_16(136);
+emit_16(201);
+emit_16(137);
+emit_16(202);
+emit_16(138);
+emit_16(202);
+emit_16(137);
+emit_16(202);
+emit_16(138);
+emit_16(203);
+emit_16(139);
+emit_16(203);
+emit_16(138);
+emit_16(203);
+emit_16(139);
+emit_16(204);
+emit_16(140);
+emit_16(204);
+emit_16(139);
+emit_16(204);
+emit_16(140);
+emit_16(205);
+emit_16(141);
+emit_16(205);
+emit_16(140);
+emit_16(205);
+emit_16(141);
+emit_16(206);
+emit_16(142);
+emit_16(206);
+emit_16(141);
+emit_16(206);
+emit_16(142);
+emit_16(207);
+emit_16(143);
+emit_16(207);
+emit_16(142);
+emit_16(207);
+emit_16(143);
+emit_16(208);
+emit_16(144);
+emit_16(208);
+emit_16(143);
+emit_16(208);
+emit_16(144);
+emit_16(209);
+emit_16(145);
+emit_16(209);
+emit_16(144);
+emit_16(209);
+emit_16(145);
+emit_16(210);
+emit_16(146);
+emit_16(210);
+emit_16(145);
+emit_16(210);
+emit_16(146);
+emit_16(211);
+emit_16(147);
+emit_16(211);
+emit_16(146);
+emit_16(211);
+emit_16(147);
+emit_16(212);
+emit_16(148);
+emit_16(212);
+emit_16(147);
+emit_16(212);
+emit_16(148);
+emit_16(213);
+emit_16(149);
+emit_16(213);
+emit_16(148);
+emit_16(213);
+emit_16(149);
+emit_16(214);
+emit_16(150);
+emit_16(214);
+emit_16(149);
+emit_16(214);
+emit_16(150);
+emit_16(215);
+emit_16(151);
+emit_16(215);
+emit_16(150);
+emit_16(215);
+emit_16(151);
+emit_16(216);
+emit_16(152);
+emit_16(216);
+emit_16(151);
+emit_16(216);
+emit_16(152);
+emit_16(217);
+emit_16(153);
+emit_16(217);
+emit_16(152);
+emit_16(217);
+emit_16(153);
+emit_16(218);
+emit_16(154);
+emit_16(218);
+emit_16(153);
+emit_16(218);
+emit_16(154);
+emit_16(219);
+emit_16(155);
+emit_16(219);
+emit_16(154);
+emit_16(219);
+emit_16(155);
+emit_16(220);
+emit_16(156);
+emit_16(220);
+emit_16(155);
+emit_16(220);
+emit_16(156);
+emit_16(221);
+emit_16(157);
+emit_16(221);
+emit_16(156);
+emit_16(221);
+emit_16(157);
+emit_16(222);
+emit_16(158);
+emit_16(222);
+emit_16(157);
+emit_16(222);
+emit_16(158);
+emit_16(223);
+emit_16(159);
+emit_16(223);
+emit_16(158);
+emit_16(223);
+emit_16(159);
+emit_16(224);
+emit_16(160);
+emit_16(224);
+emit_16(159);
+emit_16(224);
+emit_16(160);
+emit_16(225);
+emit_16(161);
+emit_16(225);
+emit_16(160);
+emit_16(225);
+emit_16(161);
+emit_16(226);
+emit_16(162);
+emit_16(226);
+emit_16(161);
+emit_16(226);
+emit_16(162);
+emit_16(227);
+emit_16(163);
+emit_16(227);
+emit_16(162);
+emit_16(227);
+emit_16(163);
+emit_16(228);
+emit_16(164);
+emit_16(228);
+emit_16(163);
+emit_16(228);
+emit_16(164);
+emit_16(229);
+emit_16(165);
+emit_16(229);
+emit_16(164);
+emit_16(229);
+emit_16(165);
+emit_16(230);
+emit_16(166);
+emit_16(230);
+emit_16(165);
+emit_16(230);
+emit_16(166);
+emit_16(231);
+emit_16(167);
+emit_16(231);
+emit_16(166);
+emit_16(231);
+emit_16(167);
+emit_16(232);
+emit_16(168);
+emit_16(232);
+emit_16(167);
+emit_16(232);
+emit_16(168);
+emit_16(233);
+emit_16(169);
+emit_16(233);
+emit_16(168);
+emit_16(233);
+emit_16(169);
+emit_16(234);
+emit_16(170);
+emit_16(234);
+emit_16(169);
+emit_16(234);
+emit_16(170);
+emit_16(235);
+emit_16(171);
+emit_16(235);
+emit_16(170);
+emit_16(235);
+emit_16(171);
+emit_16(236);
+emit_16(172);
+emit_16(236);
+emit_16(171);
+emit_16(236);
+emit_16(172);
+emit_16(237);
+emit_16(173);
+emit_16(237);
+emit_16(172);
+emit_16(237);
+emit_16(173);
+emit_16(238);
+emit_16(174);
+emit_16(238);
+emit_16(173);
+emit_16(238);
+emit_16(174);
+emit_16(239);
+emit_16(175);
+emit_16(239);
+emit_16(174);
+emit_16(239);
+emit_16(175);
+emit_16(240);
+emit_16(176);
+emit_16(240);
+emit_16(175);
+emit_16(240);
+emit_16(176);
+emit_16(241);
+emit_16(177);
+emit_16(241);
+emit_16(176);
+emit_16(241);
+emit_16(177);
+emit_16(242);
+emit_16(178);
+emit_16(242);
+emit_16(177);
+emit_16(242);
+emit_16(178);
+emit_16(243);
+emit_16(179);
+emit_16(243);
+emit_16(178);
+emit_16(243);
+emit_16(179);
+emit_16(244);
+emit_16(180);
+emit_16(244);
+emit_16(179);
+emit_16(244);
+emit_16(180);
+emit_16(245);
+emit_16(181);
+emit_16(245);
+emit_16(180);
+emit_16(245);
+emit_16(181);
+emit_16(246);
+emit_16(182);
+emit_16(246);
+emit_16(181);
+emit_16(246);
+emit_16(182);
+emit_16(247);
+emit_16(183);
+emit_16(247);
+emit_16(182);
+emit_16(247);
+emit_16(183);
+emit_16(248);
+emit_16(184);
+emit_16(248);
+emit_16(183);
+emit_16(248);
+emit_16(184);
+emit_16(249);
+emit_16(185);
+emit_16(249);
+emit_16(184);
+emit_16(249);
+emit_16(185);
+emit_16(250);
+emit_16(186);
+emit_16(250);
+emit_16(185);
+emit_16(250);
+emit_16(186);
+emit_16(251);
+emit_16(187);
+emit_16(251);
+emit_16(186);
+emit_16(251);
+emit_16(187);
+emit_16(252);
+emit_16(188);
+emit_16(252);
+emit_16(187);
+emit_16(252);
+emit_16(188);
+emit_16(253);
+emit_16(189);
+emit_16(253);
+emit_16(188);
+emit_16(253);
+emit_16(189);
+emit_16(254);
+emit_16(190);
+emit_16(254);
+emit_16(189);
+emit_16(254);
+emit_16(190);
+emit_16(255);
+emit_16(191);
+emit_16(255);
+emit_16(190);
+emit_16(256);
+emit_16(192);
+emit_16(257);
+emit_16(193);
+emit_16(257);
+emit_16(192);
+emit_16(257);
+emit_16(193);
+emit_16(258);
+emit_16(194);
+emit_16(258);
+emit_16(193);
+emit_16(258);
+emit_16(194);
+emit_16(259);
+emit_16(195);
+emit_16(259);
+emit_16(194);
+emit_16(259);
+emit_16(195);
+emit_16(260);
+emit_16(196);
+emit_16(260);
+emit_16(195);
+emit_16(260);
+emit_16(196);
+emit_16(261);
+emit_16(197);
+emit_16(261);
+emit_16(196);
+emit_16(261);
+emit_16(197);
+emit_16(262);
+emit_16(198);
+emit_16(262);
+emit_16(197);
+emit_16(262);
+emit_16(198);
+emit_16(263);
+emit_16(199);
+emit_16(263);
+emit_16(198);
+emit_16(263);
+emit_16(199);
+emit_16(264);
+emit_16(200);
+emit_16(264);
+emit_16(199);
+emit_16(264);
+emit_16(200);
+emit_16(265);
+emit_16(201);
+emit_16(265);
+emit_16(200);
+emit_16(265);
+emit_16(201);
+emit_16(266);
+emit_16(202);
+emit_16(266);
+emit_16(201);
+emit_16(266);
+emit_16(202);
+emit_16(267);
+emit_16(203);
+emit_16(267);
+emit_16(202);
+emit_16(267);
+emit_16(203);
+emit_16(268);
+emit_16(204);
+emit_16(268);
+emit_16(203);
+emit_16(268);
+emit_16(204);
+emit_16(269);
+emit_16(205);
+emit_16(269);
+emit_16(204);
+emit_16(269);
+emit_16(205);
+emit_16(270);
+emit_16(206);
+emit_16(270);
+emit_16(205);
+emit_16(270);
+emit_16(206);
+emit_16(271);
+emit_16(207);
+emit_16(271);
+emit_16(206);
+emit_16(271);
+emit_16(207);
+emit_16(272);
+emit_16(208);
+emit_16(272);
+emit_16(207);
+emit_16(272);
+emit_16(208);
+emit_16(273);
+emit_16(209);
+emit_16(273);
+emit_16(208);
+emit_16(273);
+emit_16(209);
+emit_16(274);
+emit_16(210);
+emit_16(274);
+emit_16(209);
+emit_16(274);
+emit_16(210);
+emit_16(275);
+emit_16(211);
+emit_16(275);
+emit_16(210);
+emit_16(275);
+emit_16(211);
+emit_16(276);
+emit_16(212);
+emit_16(276);
+emit_16(211);
+emit_16(276);
+emit_16(212);
+emit_16(277);
+emit_16(213);
+emit_16(277);
+emit_16(212);
+emit_16(277);
+emit_16(213);
+emit_16(278);
+emit_16(214);
+emit_16(278);
+emit_16(213);
+emit_16(278);
+emit_16(214);
+emit_16(279);
+emit_16(215);
+emit_16(279);
+emit_16(214);
+emit_16(279);
+emit_16(215);
+emit_16(280);
+emit_16(216);
+emit_16(280);
+emit_16(215);
+emit_16(280);
+emit_16(216);
+emit_16(281);
+emit_16(217);
+emit_16(281);
+emit_16(216);
+emit_16(281);
+emit_16(217);
+emit_16(282);
+emit_16(218);
+emit_16(282);
+emit_16(217);
+emit_16(282);
+emit_16(218);
+emit_16(283);
+emit_16(219);
+emit_16(283);
+emit_16(218);
+emit_16(283);
+emit_16(219);
+emit_16(284);
+emit_16(220);
+emit_16(284);
+emit_16(219);
+emit_16(284);
+emit_16(220);
+emit_16(285);
+emit_16(221);
+emit_16(285);
+emit_16(220);
+emit_16(285);
+emit_16(221);
+emit_16(286);
+emit_16(222);
+emit_16(286);
+emit_16(221);
+emit_16(286);
+emit_16(222);
+emit_16(287);
+emit_16(223);
+emit_16(287);
+emit_16(222);
+emit_16(287);
+emit_16(223);
+emit_16(288);
+emit_16(224);
+emit_16(288);
+emit_16(223);
+emit_16(288);
+emit_16(224);
+emit_16(289);
+emit_16(225);
+emit_16(289);
+emit_16(224);
+emit_16(289);
+emit_16(225);
+emit_16(290);
+emit_16(226);
+emit_16(290);
+emit_16(225);
+emit_16(290);
+emit_16(226);
+emit_16(291);
+emit_16(227);
+emit_16(291);
+emit_16(226);
+emit_16(291);
+emit_16(227);
+emit_16(292);
+emit_16(228);
+emit_16(292);
+emit_16(227);
+emit_16(292);
+emit_16(228);
+emit_16(293);
+emit_16(229);
+emit_16(293);
+emit_16(228);
+emit_16(293);
+emit_16(229);
+emit_16(294);
+emit_16(230);
+emit_16(294);
+emit_16(229);
+emit_16(294);
+emit_16(230);
+emit_16(295);
+emit_16(231);
+emit_16(295);
+emit_16(230);
+emit_16(295);
+emit_16(231);
+emit_16(296);
+emit_16(232);
+emit_16(296);
+emit_16(231);
+emit_16(296);
+emit_16(232);
+emit_16(297);
+emit_16(233);
+emit_16(297);
+emit_16(232);
+emit_16(297);
+emit_16(233);
+emit_16(298);
+emit_16(234);
+emit_16(298);
+emit_16(233);
+emit_16(298);
+emit_16(234);
+emit_16(299);
+emit_16(235);
+emit_16(299);
+emit_16(234);
+emit_16(299);
+emit_16(235);
+emit_16(300);
+emit_16(236);
+emit_16(300);
+emit_16(235);
+emit_16(300);
+emit_16(236);
+emit_16(301);
+emit_16(237);
+emit_16(301);
+emit_16(236);
+emit_16(301);
+emit_16(237);
+emit_16(302);
+emit_16(238);
+emit_16(302);
+emit_16(237);
+emit_16(302);
+emit_16(238);
+emit_16(303);
+emit_16(239);
+emit_16(303);
+emit_16(238);
+emit_16(303);
+emit_16(239);
+emit_16(304);
+emit_16(240);
+emit_16(304);
+emit_16(239);
+emit_16(304);
+emit_16(240);
+emit_16(305);
+emit_16(241);
+emit_16(305);
+emit_16(240);
+emit_16(305);
+emit_16(241);
+emit_16(306);
+emit_16(242);
+emit_16(306);
+emit_16(241);
+emit_16(306);
+emit_16(242);
+emit_16(307);
+emit_16(243);
+emit_16(307);
+emit_16(242);
+emit_16(307);
+emit_16(243);
+emit_16(308);
+emit_16(244);
+emit_16(308);
+emit_16(243);
+emit_16(308);
+emit_16(244);
+emit_16(309);
+emit_16(245);
+emit_16(309);
+emit_16(244);
+emit_16(309);
+emit_16(245);
+emit_16(310);
+emit_16(246);
+emit_16(310);
+emit_16(245);
+emit_16(310);
+emit_16(246);
+emit_16(311);
+emit_16(247);
+emit_16(311);
+emit_16(246);
+emit_16(311);
+emit_16(247);
+emit_16(312);
+emit_16(248);
+emit_16(312);
+emit_16(247);
+emit_16(312);
+emit_16(248);
+emit_16(313);
+emit_16(249);
+emit_16(313);
+emit_16(248);
+emit_16(313);
+emit_16(249);
+emit_16(314);
+emit_16(250);
+emit_16(314);
+emit_16(249);
+emit_16(314);
+emit_16(250);
+emit_16(315);
+emit_16(251);
+emit_16(315);
+emit_16(250);
+emit_16(315);
+emit_16(251);
+emit_16(316);
+emit_16(252);
+emit_16(316);
+emit_16(251);
+emit_16(316);
+emit_16(252);
+emit_16(317);
+emit_16(253);
+emit_16(317);
+emit_16(252);
+emit_16(317);
+emit_16(253);
+emit_16(318);
+emit_16(254);
+emit_16(318);
+emit_16(253);
+emit_16(318);
+emit_16(254);
+emit_16(319);
+emit_16(255);
+emit_16(319);
+emit_16(254);
+emit_16(320);
+emit_16(256);
+emit_16(321);
+emit_16(257);
+emit_16(321);
+emit_16(256);
+emit_16(321);
+emit_16(257);
+emit_16(322);
+emit_16(258);
+emit_16(322);
+emit_16(257);
+emit_16(322);
+emit_16(258);
+emit_16(323);
+emit_16(259);
+emit_16(323);
+emit_16(258);
+emit_16(323);
+emit_16(259);
+emit_16(324);
+emit_16(260);
+emit_16(324);
+emit_16(259);
+emit_16(324);
+emit_16(260);
+emit_16(325);
+emit_16(261);
+emit_16(325);
+emit_16(260);
+emit_16(325);
+emit_16(261);
+emit_16(326);
+emit_16(262);
+emit_16(326);
+emit_16(261);
+emit_16(326);
+emit_16(262);
+emit_16(327);
+emit_16(263);
+emit_16(327);
+emit_16(262);
+emit_16(327);
+emit_16(263);
+emit_16(328);
+emit_16(264);
+emit_16(328);
+emit_16(263);
+emit_16(328);
+emit_16(264);
+emit_16(329);
+emit_16(265);
+emit_16(329);
+emit_16(264);
+emit_16(329);
+emit_16(265);
+emit_16(330);
+emit_16(266);
+emit_16(330);
+emit_16(265);
+emit_16(330);
+emit_16(266);
+emit_16(331);
+emit_16(267);
+emit_16(331);
+emit_16(266);
+emit_16(331);
+emit_16(267);
+emit_16(332);
+emit_16(268);
+emit_16(332);
+emit_16(267);
+emit_16(332);
+emit_16(268);
+emit_16(333);
+emit_16(269);
+emit_16(333);
+emit_16(268);
+emit_16(333);
+emit_16(269);
+emit_16(334);
+emit_16(270);
+emit_16(334);
+emit_16(269);
+emit_16(334);
+emit_16(270);
+emit_16(335);
+emit_16(271);
+emit_16(335);
+emit_16(270);
+emit_16(335);
+emit_16(271);
+emit_16(336);
+emit_16(272);
+emit_16(336);
+emit_16(271);
+emit_16(336);
+emit_16(272);
+emit_16(337);
+emit_16(273);
+emit_16(337);
+emit_16(272);
+emit_16(337);
+emit_16(273);
+emit_16(338);
+emit_16(274);
+emit_16(338);
+emit_16(273);
+emit_16(338);
+emit_16(274);
+emit_16(339);
+emit_16(275);
+emit_16(339);
+emit_16(274);
+emit_16(339);
+emit_16(275);
+emit_16(340);
+emit_16(276);
+emit_16(340);
+emit_16(275);
+emit_16(340);
+emit_16(276);
+emit_16(341);
+emit_16(277);
+emit_16(341);
+emit_16(276);
+emit_16(341);
+emit_16(277);
+emit_16(342);
+emit_16(278);
+emit_16(342);
+emit_16(277);
+emit_16(342);
+emit_16(278);
+emit_16(343);
+emit_16(279);
+emit_16(343);
+emit_16(278);
+emit_16(343);
+emit_16(279);
+emit_16(344);
+emit_16(280);
+emit_16(344);
+emit_16(279);
+emit_16(344);
+emit_16(280);
+emit_16(345);
+emit_16(281);
+emit_16(345);
+emit_16(280);
+emit_16(345);
+emit_16(281);
+emit_16(346);
+emit_16(282);
+emit_16(346);
+emit_16(281);
+emit_16(346);
+emit_16(282);
+emit_16(347);
+emit_16(283);
+emit_16(347);
+emit_16(282);
+emit_16(347);
+emit_16(283);
+emit_16(348);
+emit_16(284);
+emit_16(348);
+emit_16(283);
+emit_16(348);
+emit_16(284);
+emit_16(349);
+emit_16(285);
+emit_16(349);
+emit_16(284);
+emit_16(349);
+emit_16(285);
+emit_16(350);
+emit_16(286);
+emit_16(350);
+emit_16(285);
+emit_16(350);
+emit_16(286);
+emit_16(351);
+emit_16(287);
+emit_16(351);
+emit_16(286);
+emit_16(351);
+emit_16(287);
+emit_16(352);
+emit_16(288);
+emit_16(352);
+emit_16(287);
+emit_16(352);
+emit_16(288);
+emit_16(353);
+emit_16(289);
+emit_16(353);
+emit_16(288);
+emit_16(353);
+emit_16(289);
+emit_16(354);
+emit_16(290);
+emit_16(354);
+emit_16(289);
+emit_16(354);
+emit_16(290);
+emit_16(355);
+emit_16(291);
+emit_16(355);
+emit_16(290);
+emit_16(355);
+emit_16(291);
+emit_16(356);
+emit_16(292);
+emit_16(356);
+emit_16(291);
+emit_16(356);
+emit_16(292);
+emit_16(357);
+emit_16(293);
+emit_16(357);
+emit_16(292);
+emit_16(357);
+emit_16(293);
+emit_16(358);
+emit_16(294);
+emit_16(358);
+emit_16(293);
+emit_16(358);
+emit_16(294);
+emit_16(359);
+emit_16(295);
+emit_16(359);
+emit_16(294);
+emit_16(359);
+emit_16(295);
+emit_16(360);
+emit_16(296);
+emit_16(360);
+emit_16(295);
+emit_16(360);
+emit_16(296);
+emit_16(361);
+emit_16(297);
+emit_16(361);
+emit_16(296);
+emit_16(361);
+emit_16(297);
+emit_16(362);
+emit_16(298);
+emit_16(362);
+emit_16(297);
+emit_16(362);
+emit_16(298);
+emit_16(363);
+emit_16(299);
+emit_16(363);
+emit_16(298);
+emit_16(363);
+emit_16(299);
+emit_16(364);
+emit_16(300);
+emit_16(364);
+emit_16(299);
+emit_16(364);
+emit_16(300);
+emit_16(365);
+emit_16(301);
+emit_16(365);
+emit_16(300);
+emit_16(365);
+emit_16(301);
+emit_16(366);
+emit_16(302);
+emit_16(366);
+emit_16(301);
+emit_16(366);
+emit_16(302);
+emit_16(367);
+emit_16(303);
+emit_16(367);
+emit_16(302);
+emit_16(367);
+emit_16(303);
+emit_16(368);
+emit_16(304);
+emit_16(368);
+emit_16(303);
+emit_16(368);
+emit_16(304);
+emit_16(369);
+emit_16(305);
+emit_16(369);
+emit_16(304);
+emit_16(369);
+emit_16(305);
+emit_16(370);
+emit_16(306);
+emit_16(370);
+emit_16(305);
+emit_16(370);
+emit_16(306);
+emit_16(371);
+emit_16(307);
+emit_16(371);
+emit_16(306);
+emit_16(371);
+emit_16(307);
+emit_16(372);
+emit_16(308);
+emit_16(372);
+emit_16(307);
+emit_16(372);
+emit_16(308);
+emit_16(373);
+emit_16(309);
+emit_16(373);
+emit_16(308);
+emit_16(373);
+emit_16(309);
+emit_16(374);
+emit_16(310);
+emit_16(374);
+emit_16(309);
+emit_16(374);
+emit_16(310);
+emit_16(375);
+emit_16(311);
+emit_16(375);
+emit_16(310);
+emit_16(375);
+emit_16(311);
+emit_16(376);
+emit_16(312);
+emit_16(376);
+emit_16(311);
+emit_16(376);
+emit_16(312);
+emit_16(377);
+emit_16(313);
+emit_16(377);
+emit_16(312);
+emit_16(377);
+emit_16(313);
+emit_16(378);
+emit_16(314);
+emit_16(378);
+emit_16(313);
+emit_16(378);
+emit_16(314);
+emit_16(379);
+emit_16(315);
+emit_16(379);
+emit_16(314);
+emit_16(379);
+emit_16(315);
+emit_16(380);
+emit_16(316);
+emit_16(380);
+emit_16(315);
+emit_16(380);
+emit_16(316);
+emit_16(381);
+emit_16(317);
+emit_16(381);
+emit_16(316);
+emit_16(381);
+emit_16(317);
+emit_16(382);
+emit_16(318);
+emit_16(382);
+emit_16(317);
+emit_16(382);
+emit_16(318);
+emit_16(383);
+emit_16(319);
+emit_16(383);
+emit_16(318);
+emit_16(384);
+emit_16(320);
+emit_16(385);
+emit_16(321);
+emit_16(385);
+emit_16(320);
+emit_16(385);
+emit_16(321);
+emit_16(386);
+emit_16(322);
+emit_16(386);
+emit_16(321);
+emit_16(386);
+emit_16(322);
+emit_16(387);
+emit_16(323);
+emit_16(387);
+emit_16(322);
+emit_16(387);
+emit_16(323);
+emit_16(388);
+emit_16(324);
+emit_16(388);
+emit_16(323);
+emit_16(388);
+emit_16(324);
+emit_16(389);
+emit_16(325);
+emit_16(389);
+emit_16(324);
+emit_16(389);
+emit_16(325);
+emit_16(390);
+emit_16(326);
+emit_16(390);
+emit_16(325);
+emit_16(390);
+emit_16(326);
+emit_16(391);
+emit_16(327);
+emit_16(391);
+emit_16(326);
+emit_16(391);
+emit_16(327);
+emit_16(392);
+emit_16(328);
+emit_16(392);
+emit_16(327);
+emit_16(392);
+emit_16(328);
+emit_16(393);
+emit_16(329);
+emit_16(393);
+emit_16(328);
+emit_16(393);
+emit_16(329);
+emit_16(394);
+emit_16(330);
+emit_16(394);
+emit_16(329);
+emit_16(394);
+emit_16(330);
+emit_16(395);
+emit_16(331);
+emit_16(395);
+emit_16(330);
+emit_16(395);
+emit_16(331);
+emit_16(396);
+emit_16(332);
+emit_16(396);
+emit_16(331);
+emit_16(396);
+emit_16(332);
+emit_16(397);
+emit_16(333);
+emit_16(397);
+emit_16(332);
+emit_16(397);
+emit_16(333);
+emit_16(398);
+emit_16(334);
+emit_16(398);
+emit_16(333);
+emit_16(398);
+emit_16(334);
+emit_16(399);
+emit_16(335);
+emit_16(399);
+emit_16(334);
+emit_16(399);
+emit_16(335);
+emit_16(400);
+emit_16(336);
+emit_16(400);
+emit_16(335);
+emit_16(400);
+emit_16(336);
+emit_16(401);
+emit_16(337);
+emit_16(401);
+emit_16(336);
+emit_16(401);
+emit_16(337);
+emit_16(402);
+emit_16(338);
+emit_16(402);
+emit_16(337);
+emit_16(402);
+emit_16(338);
+emit_16(403);
+emit_16(339);
+emit_16(403);
+emit_16(338);
+emit_16(403);
+emit_16(339);
+emit_16(404);
+emit_16(340);
+emit_16(404);
+emit_16(339);
+emit_16(404);
+emit_16(340);
+emit_16(405);
+emit_16(341);
+emit_16(405);
+emit_16(340);
+emit_16(405);
+emit_16(341);
+emit_16(406);
+emit_16(342);
+emit_16(406);
+emit_16(341);
+emit_16(406);
+emit_16(342);
+emit_16(407);
+emit_16(343);
+emit_16(407);
+emit_16(342);
+emit_16(407);
+emit_16(343);
+emit_16(408);
+emit_16(344);
+emit_16(408);
+emit_16(343);
+emit_16(408);
+emit_16(344);
+emit_16(409);
+emit_16(345);
+emit_16(409);
+emit_16(344);
+emit_16(409);
+emit_16(345);
+emit_16(410);
+emit_16(346);
+emit_16(410);
+emit_16(345);
+emit_16(410);
+emit_16(346);
+emit_16(411);
+emit_16(347);
+emit_16(411);
+emit_16(346);
+emit_16(411);
+emit_16(347);
+emit_16(412);
+emit_16(348);
+emit_16(412);
+emit_16(347);
+emit_16(412);
+emit_16(348);
+emit_16(413);
+emit_16(349);
+emit_16(413);
+emit_16(348);
+emit_16(413);
+emit_16(349);
+emit_16(414);
+emit_16(350);
+emit_16(414);
+emit_16(349);
+emit_16(414);
+emit_16(350);
+emit_16(415);
+emit_16(351);
+emit_16(415);
+emit_16(350);
+emit_16(415);
+emit_16(351);
+emit_16(416);
+emit_16(352);
+emit_16(416);
+emit_16(351);
+emit_16(416);
+emit_16(352);
+emit_16(417);
+emit_16(353);
+emit_16(417);
+emit_16(352);
+emit_16(417);
+emit_16(353);
+emit_16(418);
+emit_16(354);
+emit_16(418);
+emit_16(353);
+emit_16(418);
+emit_16(354);
+emit_16(419);
+emit_16(355);
+emit_16(419);
+emit_16(354);
+emit_16(419);
+emit_16(355);
+emit_16(420);
+emit_16(356);
+emit_16(420);
+emit_16(355);
+emit_16(420);
+emit_16(356);
+emit_16(421);
+emit_16(357);
+emit_16(421);
+emit_16(356);
+emit_16(421);
+emit_16(357);
+emit_16(422);
+emit_16(358);
+emit_16(422);
+emit_16(357);
+emit_16(422);
+emit_16(358);
+emit_16(423);
+emit_16(359);
+emit_16(423);
+emit_16(358);
+emit_16(423);
+emit_16(359);
+emit_16(424);
+emit_16(360);
+emit_16(424);
+emit_16(359);
+emit_16(424);
+emit_16(360);
+emit_16(425);
+emit_16(361);
+emit_16(425);
+emit_16(360);
+emit_16(425);
+emit_16(361);
+emit_16(426);
+emit_16(362);
+emit_16(426);
+emit_16(361);
+emit_16(426);
+emit_16(362);
+emit_16(427);
+emit_16(363);
+emit_16(427);
+emit_16(362);
+emit_16(427);
+emit_16(363);
+emit_16(428);
+emit_16(364);
+emit_16(428);
+emit_16(363);
+emit_16(428);
+emit_16(364);
+emit_16(429);
+emit_16(365);
+emit_16(429);
+emit_16(364);
+emit_16(429);
+emit_16(365);
+emit_16(430);
+emit_16(366);
+emit_16(430);
+emit_16(365);
+emit_16(430);
+emit_16(366);
+emit_16(431);
+emit_16(367);
+emit_16(431);
+emit_16(366);
+emit_16(431);
+emit_16(367);
+emit_16(432);
+emit_16(368);
+emit_16(432);
+emit_16(367);
+emit_16(432);
+emit_16(368);
+emit_16(433);
+emit_16(369);
+emit_16(433);
+emit_16(368);
+emit_16(433);
+emit_16(369);
+emit_16(434);
+emit_16(370);
+emit_16(434);
+emit_16(369);
+emit_16(434);
+emit_16(370);
+emit_16(435);
+emit_16(371);
+emit_16(435);
+emit_16(370);
+emit_16(435);
+emit_16(371);
+emit_16(436);
+emit_16(372);
+emit_16(436);
+emit_16(371);
+emit_16(436);
+emit_16(372);
+emit_16(437);
+emit_16(373);
+emit_16(437);
+emit_16(372);
+emit_16(437);
+emit_16(373);
+emit_16(438);
+emit_16(374);
+emit_16(438);
+emit_16(373);
+emit_16(438);
+emit_16(374);
+emit_16(439);
+emit_16(375);
+emit_16(439);
+emit_16(374);
+emit_16(439);
+emit_16(375);
+emit_16(440);
+emit_16(376);
+emit_16(440);
+emit_16(375);
+emit_16(440);
+emit_16(376);
+emit_16(441);
+emit_16(377);
+emit_16(441);
+emit_16(376);
+emit_16(441);
+emit_16(377);
+emit_16(442);
+emit_16(378);
+emit_16(442);
+emit_16(377);
+emit_16(442);
+emit_16(378);
+emit_16(443);
+emit_16(379);
+emit_16(443);
+emit_16(378);
+emit_16(443);
+emit_16(379);
+emit_16(444);
+emit_16(380);
+emit_16(444);
+emit_16(379);
+emit_16(444);
+emit_16(380);
+emit_16(445);
+emit_16(381);
+emit_16(445);
+emit_16(380);
+emit_16(445);
+emit_16(381);
+emit_16(446);
+emit_16(382);
+emit_16(446);
+emit_16(381);
+emit_16(446);
+emit_16(382);
+emit_16(447);
+emit_16(383);
+emit_16(447);
+emit_16(382);
+emit_16(448);
+emit_16(384);
+emit_16(449);
+emit_16(385);
+emit_16(449);
+emit_16(384);
+emit_16(449);
+emit_16(385);
+emit_16(450);
+emit_16(386);
+emit_16(450);
+emit_16(385);
+emit_16(450);
+emit_16(386);
+emit_16(451);
+emit_16(387);
+emit_16(451);
+emit_16(386);
+emit_16(451);
+emit_16(387);
+emit_16(452);
+emit_16(388);
+emit_16(452);
+emit_16(387);
+emit_16(452);
+emit_16(388);
+emit_16(453);
+emit_16(389);
+emit_16(453);
+emit_16(388);
+emit_16(453);
+emit_16(389);
+emit_16(454);
+emit_16(390);
+emit_16(454);
+emit_16(389);
+emit_16(454);
+emit_16(390);
+emit_16(455);
+emit_16(391);
+emit_16(455);
+emit_16(390);
+emit_16(455);
+emit_16(391);
+emit_16(456);
+emit_16(392);
+emit_16(456);
+emit_16(391);
+emit_16(456);
+emit_16(392);
+emit_16(457);
+emit_16(393);
+emit_16(457);
+emit_16(392);
+emit_16(457);
+emit_16(393);
+emit_16(458);
+emit_16(394);
+emit_16(458);
+emit_16(393);
+emit_16(458);
+emit_16(394);
+emit_16(459);
+emit_16(395);
+emit_16(459);
+emit_16(394);
+emit_16(459);
+emit_16(395);
+emit_16(460);
+emit_16(396);
+emit_16(460);
+emit_16(395);
+emit_16(460);
+emit_16(396);
+emit_16(461);
+emit_16(397);
+emit_16(461);
+emit_16(396);
+emit_16(461);
+emit_16(397);
+emit_16(462);
+emit_16(398);
+emit_16(462);
+emit_16(397);
+emit_16(462);
+emit_16(398);
+emit_16(463);
+emit_16(399);
+emit_16(463);
+emit_16(398);
+emit_16(463);
+emit_16(399);
+emit_16(464);
+emit_16(400);
+emit_16(464);
+emit_16(399);
+emit_16(464);
+emit_16(400);
+emit_16(465);
+emit_16(401);
+emit_16(465);
+emit_16(400);
+emit_16(465);
+emit_16(401);
+emit_16(466);
+emit_16(402);
+emit_16(466);
+emit_16(401);
+emit_16(466);
+emit_16(402);
+emit_16(467);
+emit_16(403);
+emit_16(467);
+emit_16(402);
+emit_16(467);
+emit_16(403);
+emit_16(468);
+emit_16(404);
+emit_16(468);
+emit_16(403);
+emit_16(468);
+emit_16(404);
+emit_16(469);
+emit_16(405);
+emit_16(469);
+emit_16(404);
+emit_16(469);
+emit_16(405);
+emit_16(470);
+emit_16(406);
+emit_16(470);
+emit_16(405);
+emit_16(470);
+emit_16(406);
+emit_16(471);
+emit_16(407);
+emit_16(471);
+emit_16(406);
+emit_16(471);
+emit_16(407);
+emit_16(472);
+emit_16(408);
+emit_16(472);
+emit_16(407);
+emit_16(472);
+emit_16(408);
+emit_16(473);
+emit_16(409);
+emit_16(473);
+emit_16(408);
+emit_16(473);
+emit_16(409);
+emit_16(474);
+emit_16(410);
+emit_16(474);
+emit_16(409);
+emit_16(474);
+emit_16(410);
+emit_16(475);
+emit_16(411);
+emit_16(475);
+emit_16(410);
+emit_16(475);
+emit_16(411);
+emit_16(476);
+emit_16(412);
+emit_16(476);
+emit_16(411);
+emit_16(476);
+emit_16(412);
+emit_16(477);
+emit_16(413);
+emit_16(477);
+emit_16(412);
+emit_16(477);
+emit_16(413);
+emit_16(478);
+emit_16(414);
+emit_16(478);
+emit_16(413);
+emit_16(478);
+emit_16(414);
+emit_16(479);
+emit_16(415);
+emit_16(479);
+emit_16(414);
+emit_16(479);
+emit_16(415);
+emit_16(480);
+emit_16(416);
+emit_16(480);
+emit_16(415);
+emit_16(480);
+emit_16(416);
+emit_16(481);
+emit_16(417);
+emit_16(481);
+emit_16(416);
+emit_16(481);
+emit_16(417);
+emit_16(482);
+emit_16(418);
+emit_16(482);
+emit_16(417);
+emit_16(482);
+emit_16(418);
+emit_16(483);
+emit_16(419);
+emit_16(483);
+emit_16(418);
+emit_16(483);
+emit_16(419);
+emit_16(484);
+emit_16(420);
+emit_16(484);
+emit_16(419);
+emit_16(484);
+emit_16(420);
+emit_16(485);
+emit_16(421);
+emit_16(485);
+emit_16(420);
+emit_16(485);
+emit_16(421);
+emit_16(486);
+emit_16(422);
+emit_16(486);
+emit_16(421);
+emit_16(486);
+emit_16(422);
+emit_16(487);
+emit_16(423);
+emit_16(487);
+emit_16(422);
+emit_16(487);
+emit_16(423);
+emit_16(488);
+emit_16(424);
+emit_16(488);
+emit_16(423);
+emit_16(488);
+emit_16(424);
+emit_16(489);
+emit_16(425);
+emit_16(489);
+emit_16(424);
+emit_16(489);
+emit_16(425);
+emit_16(490);
+emit_16(426);
+emit_16(490);
+emit_16(425);
+emit_16(490);
+emit_16(426);
+emit_16(491);
+emit_16(427);
+emit_16(491);
+emit_16(426);
+emit_16(491);
+emit_16(427);
+emit_16(492);
+emit_16(428);
+emit_16(492);
+emit_16(427);
+emit_16(492);
+emit_16(428);
+emit_16(493);
+emit_16(429);
+emit_16(493);
+emit_16(428);
+emit_16(493);
+emit_16(429);
+emit_16(494);
+emit_16(430);
+emit_16(494);
+emit_16(429);
+emit_16(494);
+emit_16(430);
+emit_16(495);
+emit_16(431);
+emit_16(495);
+emit_16(430);
+emit_16(495);
+emit_16(431);
+emit_16(496);
+emit_16(432);
+emit_16(496);
+emit_16(431);
+emit_16(496);
+emit_16(432);
+emit_16(497);
+emit_16(433);
+emit_16(497);
+emit_16(432);
+emit_16(497);
+emit_16(433);
+emit_16(498);
+emit_16(434);
+emit_16(498);
+emit_16(433);
+emit_16(498);
+emit_16(434);
+emit_16(499);
+emit_16(435);
+emit_16(499);
+emit_16(434);
+emit_16(499);
+emit_16(435);
+emit_16(500);
+emit_16(436);
+emit_16(500);
+emit_16(435);
+emit_16(500);
+emit_16(436);
+emit_16(501);
+emit_16(437);
+emit_16(501);
+emit_16(436);
+emit_16(501);
+emit_16(437);
+emit_16(502);
+emit_16(438);
+emit_16(502);
+emit_16(437);
+emit_16(502);
+emit_16(438);
+emit_16(503);
+emit_16(439);
+emit_16(503);
+emit_16(438);
+emit_16(503);
+emit_16(439);
+emit_16(504);
+emit_16(440);
+emit_16(504);
+emit_16(439);
+emit_16(504);
+emit_16(440);
+emit_16(505);
+emit_16(441);
+emit_16(505);
+emit_16(440);
+emit_16(505);
+emit_16(441);
+emit_16(506);
+emit_16(442);
+emit_16(506);
+emit_16(441);
+emit_16(506);
+emit_16(442);
+emit_16(507);
+emit_16(443);
+emit_16(507);
+emit_16(442);
+emit_16(507);
+emit_16(443);
+emit_16(508);
+emit_16(444);
+emit_16(508);
+emit_16(443);
+emit_16(508);
+emit_16(444);
+emit_16(509);
+emit_16(445);
+emit_16(509);
+emit_16(444);
+emit_16(509);
+emit_16(445);
+emit_16(510);
+emit_16(446);
+emit_16(510);
+emit_16(445);
+emit_16(510);
+emit_16(446);
+emit_16(511);
+emit_16(447);
+emit_16(511);
+emit_16(446);
+emit_16(512);
+emit_16(448);
+emit_16(513);
+emit_16(449);
+emit_16(513);
+emit_16(448);
+emit_16(513);
+emit_16(449);
+emit_16(514);
+emit_16(450);
+emit_16(514);
+emit_16(449);
+emit_16(514);
+emit_16(450);
+emit_16(515);
+emit_16(451);
+emit_16(515);
+emit_16(450);
+emit_16(515);
+emit_16(451);
+emit_16(516);
+emit_16(452);
+emit_16(516);
+emit_16(451);
+emit_16(516);
+emit_16(452);
+emit_16(517);
+emit_16(453);
+emit_16(517);
+emit_16(452);
+emit_16(517);
+emit_16(453);
+emit_16(518);
+emit_16(454);
+emit_16(518);
+emit_16(453);
+emit_16(518);
+emit_16(454);
+emit_16(519);
+emit_16(455);
+emit_16(519);
+emit_16(454);
+emit_16(519);
+emit_16(455);
+emit_16(520);
+emit_16(456);
+emit_16(520);
+emit_16(455);
+emit_16(520);
+emit_16(456);
+emit_16(521);
+emit_16(457);
+emit_16(521);
+emit_16(456);
+emit_16(521);
+emit_16(457);
+emit_16(522);
+emit_16(458);
+emit_16(522);
+emit_16(457);
+emit_16(522);
+emit_16(458);
+emit_16(523);
+emit_16(459);
+emit_16(523);
+emit_16(458);
+emit_16(523);
+emit_16(459);
+emit_16(524);
+emit_16(460);
+emit_16(524);
+emit_16(459);
+emit_16(524);
+emit_16(460);
+emit_16(525);
+emit_16(461);
+emit_16(525);
+emit_16(460);
+emit_16(525);
+emit_16(461);
+emit_16(526);
+emit_16(462);
+emit_16(526);
+emit_16(461);
+emit_16(526);
+emit_16(462);
+emit_16(527);
+emit_16(463);
+emit_16(527);
+emit_16(462);
+emit_16(527);
+emit_16(463);
+emit_16(528);
+emit_16(464);
+emit_16(528);
+emit_16(463);
+emit_16(528);
+emit_16(464);
+emit_16(529);
+emit_16(465);
+emit_16(529);
+emit_16(464);
+emit_16(529);
+emit_16(465);
+emit_16(530);
+emit_16(466);
+emit_16(530);
+emit_16(465);
+emit_16(530);
+emit_16(466);
+emit_16(531);
+emit_16(467);
+emit_16(531);
+emit_16(466);
+emit_16(531);
+emit_16(467);
+emit_16(532);
+emit_16(468);
+emit_16(532);
+emit_16(467);
+emit_16(532);
+emit_16(468);
+emit_16(533);
+emit_16(469);
+emit_16(533);
+emit_16(468);
+emit_16(533);
+emit_16(469);
+emit_16(534);
+emit_16(470);
+emit_16(534);
+emit_16(469);
+emit_16(534);
+emit_16(470);
+emit_16(535);
+emit_16(471);
+emit_16(535);
+emit_16(470);
+emit_16(535);
+emit_16(471);
+emit_16(536);
+emit_16(472);
+emit_16(536);
+emit_16(471);
+emit_16(536);
+emit_16(472);
+emit_16(537);
+emit_16(473);
+emit_16(537);
+emit_16(472);
+emit_16(537);
+emit_16(473);
+emit_16(538);
+emit_16(474);
+emit_16(538);
+emit_16(473);
+emit_16(538);
+emit_16(474);
+emit_16(539);
+emit_16(475);
+emit_16(539);
+emit_16(474);
+emit_16(539);
+emit_16(475);
+emit_16(540);
+emit_16(476);
+emit_16(540);
+emit_16(475);
+emit_16(540);
+emit_16(476);
+emit_16(541);
+emit_16(477);
+emit_16(541);
+emit_16(476);
+emit_16(541);
+emit_16(477);
+emit_16(542);
+emit_16(478);
+emit_16(542);
+emit_16(477);
+emit_16(542);
+emit_16(478);
+emit_16(543);
+emit_16(479);
+emit_16(543);
+emit_16(478);
+emit_16(543);
+emit_16(479);
+emit_16(544);
+emit_16(480);
+emit_16(544);
+emit_16(479);
+emit_16(544);
+emit_16(480);
+emit_16(545);
+emit_16(481);
+emit_16(545);
+emit_16(480);
+emit_16(545);
+emit_16(481);
+emit_16(546);
+emit_16(482);
+emit_16(546);
+emit_16(481);
+emit_16(546);
+emit_16(482);
+emit_16(547);
+emit_16(483);
+emit_16(547);
+emit_16(482);
+emit_16(547);
+emit_16(483);
+emit_16(548);
+emit_16(484);
+emit_16(548);
+emit_16(483);
+emit_16(548);
+emit_16(484);
+emit_16(549);
+emit_16(485);
+emit_16(549);
+emit_16(484);
+emit_16(549);
+emit_16(485);
+emit_16(550);
+emit_16(486);
+emit_16(550);
+emit_16(485);
+emit_16(550);
+emit_16(486);
+emit_16(551);
+emit_16(487);
+emit_16(551);
+emit_16(486);
+emit_16(551);
+emit_16(487);
+emit_16(552);
+emit_16(488);
+emit_16(552);
+emit_16(487);
+emit_16(552);
+emit_16(488);
+emit_16(553);
+emit_16(489);
+emit_16(553);
+emit_16(488);
+emit_16(553);
+emit_16(489);
+emit_16(554);
+emit_16(490);
+emit_16(554);
+emit_16(489);
+emit_16(554);
+emit_16(490);
+emit_16(555);
+emit_16(491);
+emit_16(555);
+emit_16(490);
+emit_16(555);
+emit_16(491);
+emit_16(556);
+emit_16(492);
+emit_16(556);
+emit_16(491);
+emit_16(556);
+emit_16(492);
+emit_16(557);
+emit_16(493);
+emit_16(557);
+emit_16(492);
+emit_16(557);
+emit_16(493);
+emit_16(558);
+emit_16(494);
+emit_16(558);
+emit_16(493);
+emit_16(558);
+emit_16(494);
+emit_16(559);
+emit_16(495);
+emit_16(559);
+emit_16(494);
+emit_16(559);
+emit_16(495);
+emit_16(560);
+emit_16(496);
+emit_16(560);
+emit_16(495);
+emit_16(560);
+emit_16(496);
+emit_16(561);
+emit_16(497);
+emit_16(561);
+emit_16(496);
+emit_16(561);
+emit_16(497);
+emit_16(562);
+emit_16(498);
+emit_16(562);
+emit_16(497);
+emit_16(562);
+emit_16(498);
+emit_16(563);
+emit_16(499);
+emit_16(563);
+emit_16(498);
+emit_16(563);
+emit_16(499);
+emit_16(564);
+emit_16(500);
+emit_16(564);
+emit_16(499);
+emit_16(564);
+emit_16(500);
+emit_16(565);
+emit_16(501);
+emit_16(565);
+emit_16(500);
+emit_16(565);
+emit_16(501);
+emit_16(566);
+emit_16(502);
+emit_16(566);
+emit_16(501);
+emit_16(566);
+emit_16(502);
+emit_16(567);
+emit_16(503);
+emit_16(567);
+emit_16(502);
+emit_16(567);
+emit_16(503);
+emit_16(568);
+emit_16(504);
+emit_16(568);
+emit_16(503);
+emit_16(568);
+emit_16(504);
+emit_16(569);
+emit_16(505);
+emit_16(569);
+emit_16(504);
+emit_16(569);
+emit_16(505);
+emit_16(570);
+emit_16(506);
+emit_16(570);
+emit_16(505);
+emit_16(570);
+emit_16(506);
+emit_16(571);
+emit_16(507);
+emit_16(571);
+emit_16(506);
+emit_16(571);
+emit_16(507);
+emit_16(572);
+emit_16(508);
+emit_16(572);
+emit_16(507);
+emit_16(572);
+emit_16(508);
+emit_16(573);
+emit_16(509);
+emit_16(573);
+emit_16(508);
+emit_16(573);
+emit_16(509);
+emit_16(574);
+emit_16(510);
+emit_16(574);
+emit_16(509);
+emit_16(574);
+emit_16(510);
+emit_16(575);
+emit_16(511);
+emit_16(575);
+emit_16(510);
+emit_16(576);
+emit_16(512);
+emit_16(577);
+emit_16(513);
+emit_16(577);
+emit_16(512);
+emit_16(577);
+emit_16(513);
+emit_16(578);
+emit_16(514);
+emit_16(578);
+emit_16(513);
+emit_16(578);
+emit_16(514);
+emit_16(579);
+emit_16(515);
+emit_16(579);
+emit_16(514);
+emit_16(579);
+emit_16(515);
+emit_16(580);
+emit_16(516);
+emit_16(580);
+emit_16(515);
+emit_16(580);
+emit_16(516);
+emit_16(581);
+emit_16(517);
+emit_16(581);
+emit_16(516);
+emit_16(581);
+emit_16(517);
+emit_16(582);
+emit_16(518);
+emit_16(582);
+emit_16(517);
+emit_16(582);
+emit_16(518);
+emit_16(583);
+emit_16(519);
+emit_16(583);
+emit_16(518);
+emit_16(583);
+emit_16(519);
+emit_16(584);
+emit_16(520);
+emit_16(584);
+emit_16(519);
+emit_16(584);
+emit_16(520);
+emit_16(585);
+emit_16(521);
+emit_16(585);
+emit_16(520);
+emit_16(585);
+emit_16(521);
+emit_16(586);
+emit_16(522);
+emit_16(586);
+emit_16(521);
+emit_16(586);
+emit_16(522);
+emit_16(587);
+emit_16(523);
+emit_16(587);
+emit_16(522);
+emit_16(587);
+emit_16(523);
+emit_16(588);
+emit_16(524);
+emit_16(588);
+emit_16(523);
+emit_16(588);
+emit_16(524);
+emit_16(589);
+emit_16(525);
+emit_16(589);
+emit_16(524);
+emit_16(589);
+emit_16(525);
+emit_16(590);
+emit_16(526);
+emit_16(590);
+emit_16(525);
+emit_16(590);
+emit_16(526);
+emit_16(591);
+emit_16(527);
+emit_16(591);
+emit_16(526);
+emit_16(591);
+emit_16(527);
+emit_16(592);
+emit_16(528);
+emit_16(592);
+emit_16(527);
+emit_16(592);
+emit_16(528);
+emit_16(593);
+emit_16(529);
+emit_16(593);
+emit_16(528);
+emit_16(593);
+emit_16(529);
+emit_16(594);
+emit_16(530);
+emit_16(594);
+emit_16(529);
+emit_16(594);
+emit_16(530);
+emit_16(595);
+emit_16(531);
+emit_16(595);
+emit_16(530);
+emit_16(595);
+emit_16(531);
+emit_16(596);
+emit_16(532);
+emit_16(596);
+emit_16(531);
+emit_16(596);
+emit_16(532);
+emit_16(597);
+emit_16(533);
+emit_16(597);
+emit_16(532);
+emit_16(597);
+emit_16(533);
+emit_16(598);
+emit_16(534);
+emit_16(598);
+emit_16(533);
+emit_16(598);
+emit_16(534);
+emit_16(599);
+emit_16(535);
+emit_16(599);
+emit_16(534);
+emit_16(599);
+emit_16(535);
+emit_16(600);
+emit_16(536);
+emit_16(600);
+emit_16(535);
+emit_16(600);
+emit_16(536);
+emit_16(601);
+emit_16(537);
+emit_16(601);
+emit_16(536);
+emit_16(601);
+emit_16(537);
+emit_16(602);
+emit_16(538);
+emit_16(602);
+emit_16(537);
+emit_16(602);
+emit_16(538);
+emit_16(603);
+emit_16(539);
+emit_16(603);
+emit_16(538);
+emit_16(603);
+emit_16(539);
+emit_16(604);
+emit_16(540);
+emit_16(604);
+emit_16(539);
+emit_16(604);
+emit_16(540);
+emit_16(605);
+emit_16(541);
+emit_16(605);
+emit_16(540);
+emit_16(605);
+emit_16(541);
+emit_16(606);
+emit_16(542);
+emit_16(606);
+emit_16(541);
+emit_16(606);
+emit_16(542);
+emit_16(607);
+emit_16(543);
+emit_16(607);
+emit_16(542);
+emit_16(607);
+emit_16(543);
+emit_16(608);
+emit_16(544);
+emit_16(608);
+emit_16(543);
+emit_16(608);
+emit_16(544);
+emit_16(609);
+emit_16(545);
+emit_16(609);
+emit_16(544);
+emit_16(609);
+emit_16(545);
+emit_16(610);
+emit_16(546);
+emit_16(610);
+emit_16(545);
+emit_16(610);
+emit_16(546);
+emit_16(611);
+emit_16(547);
+emit_16(611);
+emit_16(546);
+emit_16(611);
+emit_16(547);
+emit_16(612);
+emit_16(548);
+emit_16(612);
+emit_16(547);
+emit_16(612);
+emit_16(548);
+emit_16(613);
+emit_16(549);
+emit_16(613);
+emit_16(548);
+emit_16(613);
+emit_16(549);
+emit_16(614);
+emit_16(550);
+emit_16(614);
+emit_16(549);
+emit_16(614);
+emit_16(550);
+emit_16(615);
+emit_16(551);
+emit_16(615);
+emit_16(550);
+emit_16(615);
+emit_16(551);
+emit_16(616);
+emit_16(552);
+emit_16(616);
+emit_16(551);
+emit_16(616);
+emit_16(552);
+emit_16(617);
+emit_16(553);
+emit_16(617);
+emit_16(552);
+emit_16(617);
+emit_16(553);
+emit_16(618);
+emit_16(554);
+emit_16(618);
+emit_16(553);
+emit_16(618);
+emit_16(554);
+emit_16(619);
+emit_16(555);
+emit_16(619);
+emit_16(554);
+emit_16(619);
+emit_16(555);
+emit_16(620);
+emit_16(556);
+emit_16(620);
+emit_16(555);
+emit_16(620);
+emit_16(556);
+emit_16(621);
+emit_16(557);
+emit_16(621);
+emit_16(556);
+emit_16(621);
+emit_16(557);
+emit_16(622);
+emit_16(558);
+emit_16(622);
+emit_16(557);
+emit_16(622);
+emit_16(558);
+emit_16(623);
+emit_16(559);
+emit_16(623);
+emit_16(558);
+emit_16(623);
+emit_16(559);
+emit_16(624);
+emit_16(560);
+emit_16(624);
+emit_16(559);
+emit_16(624);
+emit_16(560);
+emit_16(625);
+emit_16(561);
+emit_16(625);
+emit_16(560);
+emit_16(625);
+emit_16(561);
+emit_16(626);
+emit_16(562);
+emit_16(626);
+emit_16(561);
+emit_16(626);
+emit_16(562);
+emit_16(627);
+emit_16(563);
+emit_16(627);
+emit_16(562);
+emit_16(627);
+emit_16(563);
+emit_16(628);
+emit_16(564);
+emit_16(628);
+emit_16(563);
+emit_16(628);
+emit_16(564);
+emit_16(629);
+emit_16(565);
+emit_16(629);
+emit_16(564);
+emit_16(629);
+emit_16(565);
+emit_16(630);
+emit_16(566);
+emit_16(630);
+emit_16(565);
+emit_16(630);
+emit_16(566);
+emit_16(631);
+emit_16(567);
+emit_16(631);
+emit_16(566);
+emit_16(631);
+emit_16(567);
+emit_16(632);
+emit_16(568);
+emit_16(632);
+emit_16(567);
+emit_16(632);
+emit_16(568);
+emit_16(633);
+emit_16(569);
+emit_16(633);
+emit_16(568);
+emit_16(633);
+emit_16(569);
+emit_16(634);
+emit_16(570);
+emit_16(634);
+emit_16(569);
+emit_16(634);
+emit_16(570);
+emit_16(635);
+emit_16(571);
+emit_16(635);
+emit_16(570);
+emit_16(635);
+emit_16(571);
+emit_16(636);
+emit_16(572);
+emit_16(636);
+emit_16(571);
+emit_16(636);
+emit_16(572);
+emit_16(637);
+emit_16(573);
+emit_16(637);
+emit_16(572);
+emit_16(637);
+emit_16(573);
+emit_16(638);
+emit_16(574);
+emit_16(638);
+emit_16(573);
+emit_16(638);
+emit_16(574);
+emit_16(639);
+emit_16(575);
+emit_16(639);
+emit_16(574);
+emit_16(640);
+emit_16(576);
+emit_16(641);
+emit_16(577);
+emit_16(641);
+emit_16(576);
+emit_16(641);
+emit_16(577);
+emit_16(642);
+emit_16(578);
+emit_16(642);
+emit_16(577);
+emit_16(642);
+emit_16(578);
+emit_16(643);
+emit_16(579);
+emit_16(643);
+emit_16(578);
+emit_16(643);
+emit_16(579);
+emit_16(644);
+emit_16(580);
+emit_16(644);
+emit_16(579);
+emit_16(644);
+emit_16(580);
+emit_16(645);
+emit_16(581);
+emit_16(645);
+emit_16(580);
+emit_16(645);
+emit_16(581);
+emit_16(646);
+emit_16(582);
+emit_16(646);
+emit_16(581);
+emit_16(646);
+emit_16(582);
+emit_16(647);
+emit_16(583);
+emit_16(647);
+emit_16(582);
+emit_16(647);
+emit_16(583);
+emit_16(648);
+emit_16(584);
+emit_16(648);
+emit_16(583);
+emit_16(648);
+emit_16(584);
+emit_16(649);
+emit_16(585);
+emit_16(649);
+emit_16(584);
+emit_16(649);
+emit_16(585);
+emit_16(650);
+emit_16(586);
+emit_16(650);
+emit_16(585);
+emit_16(650);
+emit_16(586);
+emit_16(651);
+emit_16(587);
+emit_16(651);
+emit_16(586);
+emit_16(651);
+emit_16(587);
+emit_16(652);
+emit_16(588);
+emit_16(652);
+emit_16(587);
+emit_16(652);
+emit_16(588);
+emit_16(653);
+emit_16(589);
+emit_16(653);
+emit_16(588);
+emit_16(653);
+emit_16(589);
+emit_16(654);
+emit_16(590);
+emit_16(654);
+emit_16(589);
+emit_16(654);
+emit_16(590);
+emit_16(655);
+emit_16(591);
+emit_16(655);
+emit_16(590);
+emit_16(655);
+emit_16(591);
+emit_16(656);
+emit_16(592);
+emit_16(656);
+emit_16(591);
+emit_16(656);
+emit_16(592);
+emit_16(657);
+emit_16(593);
+emit_16(657);
+emit_16(592);
+emit_16(657);
+emit_16(593);
+emit_16(658);
+emit_16(594);
+emit_16(658);
+emit_16(593);
+emit_16(658);
+emit_16(594);
+emit_16(659);
+emit_16(595);
+emit_16(659);
+emit_16(594);
+emit_16(659);
+emit_16(595);
+emit_16(660);
+emit_16(596);
+emit_16(660);
+emit_16(595);
+emit_16(660);
+emit_16(596);
+emit_16(661);
+emit_16(597);
+emit_16(661);
+emit_16(596);
+emit_16(661);
+emit_16(597);
+emit_16(662);
+emit_16(598);
+emit_16(662);
+emit_16(597);
+emit_16(662);
+emit_16(598);
+emit_16(663);
+emit_16(599);
+emit_16(663);
+emit_16(598);
+emit_16(663);
+emit_16(599);
+emit_16(664);
+emit_16(600);
+emit_16(664);
+emit_16(599);
+emit_16(664);
+emit_16(600);
+emit_16(665);
+emit_16(601);
+emit_16(665);
+emit_16(600);
+emit_16(665);
+emit_16(601);
+emit_16(666);
+emit_16(602);
+emit_16(666);
+emit_16(601);
+emit_16(666);
+emit_16(602);
+emit_16(667);
+emit_16(603);
+emit_16(667);
+emit_16(602);
+emit_16(667);
+emit_16(603);
+emit_16(668);
+emit_16(604);
+emit_16(668);
+emit_16(603);
+emit_16(668);
+emit_16(604);
+emit_16(669);
+emit_16(605);
+emit_16(669);
+emit_16(604);
+emit_16(669);
+emit_16(605);
+emit_16(670);
+emit_16(606);
+emit_16(670);
+emit_16(605);
+emit_16(670);
+emit_16(606);
+emit_16(671);
+emit_16(607);
+emit_16(671);
+emit_16(606);
+emit_16(671);
+emit_16(607);
+emit_16(672);
+emit_16(608);
+emit_16(672);
+emit_16(607);
+emit_16(672);
+emit_16(608);
+emit_16(673);
+emit_16(609);
+emit_16(673);
+emit_16(608);
+emit_16(673);
+emit_16(609);
+emit_16(674);
+emit_16(610);
+emit_16(674);
+emit_16(609);
+emit_16(674);
+emit_16(610);
+emit_16(675);
+emit_16(611);
+emit_16(675);
+emit_16(610);
+emit_16(675);
+emit_16(611);
+emit_16(676);
+emit_16(612);
+emit_16(676);
+emit_16(611);
+emit_16(676);
+emit_16(612);
+emit_16(677);
+emit_16(613);
+emit_16(677);
+emit_16(612);
+emit_16(677);
+emit_16(613);
+emit_16(678);
+emit_16(614);
+emit_16(678);
+emit_16(613);
+emit_16(678);
+emit_16(614);
+emit_16(679);
+emit_16(615);
+emit_16(679);
+emit_16(614);
+emit_16(679);
+emit_16(615);
+emit_16(680);
+emit_16(616);
+emit_16(680);
+emit_16(615);
+emit_16(680);
+emit_16(616);
+emit_16(681);
+emit_16(617);
+emit_16(681);
+emit_16(616);
+emit_16(681);
+emit_16(617);
+emit_16(682);
+emit_16(618);
+emit_16(682);
+emit_16(617);
+emit_16(682);
+emit_16(618);
+emit_16(683);
+emit_16(619);
+emit_16(683);
+emit_16(618);
+emit_16(683);
+emit_16(619);
+emit_16(684);
+emit_16(620);
+emit_16(684);
+emit_16(619);
+emit_16(684);
+emit_16(620);
+emit_16(685);
+emit_16(621);
+emit_16(685);
+emit_16(620);
+emit_16(685);
+emit_16(621);
+emit_16(686);
+emit_16(622);
+emit_16(686);
+emit_16(621);
+emit_16(686);
+emit_16(622);
+emit_16(687);
+emit_16(623);
+emit_16(687);
+emit_16(622);
+emit_16(687);
+emit_16(623);
+emit_16(688);
+emit_16(624);
+emit_16(688);
+emit_16(623);
+emit_16(688);
+emit_16(624);
+emit_16(689);
+emit_16(625);
+emit_16(689);
+emit_16(624);
+emit_16(689);
+emit_16(625);
+emit_16(690);
+emit_16(626);
+emit_16(690);
+emit_16(625);
+emit_16(690);
+emit_16(626);
+emit_16(691);
+emit_16(627);
+emit_16(691);
+emit_16(626);
+emit_16(691);
+emit_16(627);
+emit_16(692);
+emit_16(628);
+emit_16(692);
+emit_16(627);
+emit_16(692);
+emit_16(628);
+emit_16(693);
+emit_16(629);
+emit_16(693);
+emit_16(628);
+emit_16(693);
+emit_16(629);
+emit_16(694);
+emit_16(630);
+emit_16(694);
+emit_16(629);
+emit_16(694);
+emit_16(630);
+emit_16(695);
+emit_16(631);
+emit_16(695);
+emit_16(630);
+emit_16(695);
+emit_16(631);
+emit_16(696);
+emit_16(632);
+emit_16(696);
+emit_16(631);
+emit_16(696);
+emit_16(632);
+emit_16(697);
+emit_16(633);
+emit_16(697);
+emit_16(632);
+emit_16(697);
+emit_16(633);
+emit_16(698);
+emit_16(634);
+emit_16(698);
+emit_16(633);
+emit_16(698);
+emit_16(634);
+emit_16(699);
+emit_16(635);
+emit_16(699);
+emit_16(634);
+emit_16(699);
+emit_16(635);
+emit_16(700);
+emit_16(636);
+emit_16(700);
+emit_16(635);
+emit_16(700);
+emit_16(636);
+emit_16(701);
+emit_16(637);
+emit_16(701);
+emit_16(636);
+emit_16(701);
+emit_16(637);
+emit_16(702);
+emit_16(638);
+emit_16(702);
+emit_16(637);
+emit_16(702);
+emit_16(638);
+emit_16(703);
+emit_16(639);
+emit_16(703);
+emit_16(638);
+emit_16(704);
+emit_16(640);
+emit_16(705);
+emit_16(641);
+emit_16(705);
+emit_16(640);
+emit_16(705);
+emit_16(641);
+emit_16(706);
+emit_16(642);
+emit_16(706);
+emit_16(641);
+emit_16(706);
+emit_16(642);
+emit_16(707);
+emit_16(643);
+emit_16(707);
+emit_16(642);
+emit_16(707);
+emit_16(643);
+emit_16(708);
+emit_16(644);
+emit_16(708);
+emit_16(643);
+emit_16(708);
+emit_16(644);
+emit_16(709);
+emit_16(645);
+emit_16(709);
+emit_16(644);
+emit_16(709);
+emit_16(645);
+emit_16(710);
+emit_16(646);
+emit_16(710);
+emit_16(645);
+emit_16(710);
+emit_16(646);
+emit_16(711);
+emit_16(647);
+emit_16(711);
+emit_16(646);
+emit_16(711);
+emit_16(647);
+emit_16(712);
+emit_16(648);
+emit_16(712);
+emit_16(647);
+emit_16(712);
+emit_16(648);
+emit_16(713);
+emit_16(649);
+emit_16(713);
+emit_16(648);
+emit_16(713);
+emit_16(649);
+emit_16(714);
+emit_16(650);
+emit_16(714);
+emit_16(649);
+emit_16(714);
+emit_16(650);
+emit_16(715);
+emit_16(651);
+emit_16(715);
+emit_16(650);
+emit_16(715);
+emit_16(651);
+emit_16(716);
+emit_16(652);
+emit_16(716);
+emit_16(651);
+emit_16(716);
+emit_16(652);
+emit_16(717);
+emit_16(653);
+emit_16(717);
+emit_16(652);
+emit_16(717);
+emit_16(653);
+emit_16(718);
+emit_16(654);
+emit_16(718);
+emit_16(653);
+emit_16(718);
+emit_16(654);
+emit_16(719);
+emit_16(655);
+emit_16(719);
+emit_16(654);
+emit_16(719);
+emit_16(655);
+emit_16(720);
+emit_16(656);
+emit_16(720);
+emit_16(655);
+emit_16(720);
+emit_16(656);
+emit_16(721);
+emit_16(657);
+emit_16(721);
+emit_16(656);
+emit_16(721);
+emit_16(657);
+emit_16(722);
+emit_16(658);
+emit_16(722);
+emit_16(657);
+emit_16(722);
+emit_16(658);
+emit_16(723);
+emit_16(659);
+emit_16(723);
+emit_16(658);
+emit_16(723);
+emit_16(659);
+emit_16(724);
+emit_16(660);
+emit_16(724);
+emit_16(659);
+emit_16(724);
+emit_16(660);
+emit_16(725);
+emit_16(661);
+emit_16(725);
+emit_16(660);
+emit_16(725);
+emit_16(661);
+emit_16(726);
+emit_16(662);
+emit_16(726);
+emit_16(661);
+emit_16(726);
+emit_16(662);
+emit_16(727);
+emit_16(663);
+emit_16(727);
+emit_16(662);
+emit_16(727);
+emit_16(663);
+emit_16(728);
+emit_16(664);
+emit_16(728);
+emit_16(663);
+emit_16(728);
+emit_16(664);
+emit_16(729);
+emit_16(665);
+emit_16(729);
+emit_16(664);
+emit_16(729);
+emit_16(665);
+emit_16(730);
+emit_16(666);
+emit_16(730);
+emit_16(665);
+emit_16(730);
+emit_16(666);
+emit_16(731);
+emit_16(667);
+emit_16(731);
+emit_16(666);
+emit_16(731);
+emit_16(667);
+emit_16(732);
+emit_16(668);
+emit_16(732);
+emit_16(667);
+emit_16(732);
+emit_16(668);
+emit_16(733);
+emit_16(669);
+emit_16(733);
+emit_16(668);
+emit_16(733);
+emit_16(669);
+emit_16(734);
+emit_16(670);
+emit_16(734);
+emit_16(669);
+emit_16(734);
+emit_16(670);
+emit_16(735);
+emit_16(671);
+emit_16(735);
+emit_16(670);
+emit_16(735);
+emit_16(671);
+emit_16(736);
+emit_16(672);
+emit_16(736);
+emit_16(671);
+emit_16(736);
+emit_16(672);
+emit_16(737);
+emit_16(673);
+emit_16(737);
+emit_16(672);
+emit_16(737);
+emit_16(673);
+emit_16(738);
+emit_16(674);
+emit_16(738);
+emit_16(673);
+emit_16(738);
+emit_16(674);
+emit_16(739);
+emit_16(675);
+emit_16(739);
+emit_16(674);
+emit_16(739);
+emit_16(675);
+emit_16(740);
+emit_16(676);
+emit_16(740);
+emit_16(675);
+emit_16(740);
+emit_16(676);
+emit_16(741);
+emit_16(677);
+emit_16(741);
+emit_16(676);
+emit_16(741);
+emit_16(677);
+emit_16(742);
+emit_16(678);
+emit_16(742);
+emit_16(677);
+emit_16(742);
+emit_16(678);
+emit_16(743);
+emit_16(679);
+emit_16(743);
+emit_16(678);
+emit_16(743);
+emit_16(679);
+emit_16(744);
+emit_16(680);
+emit_16(744);
+emit_16(679);
+emit_16(744);
+emit_16(680);
+emit_16(745);
+emit_16(681);
+emit_16(745);
+emit_16(680);
+emit_16(745);
+emit_16(681);
+emit_16(746);
+emit_16(682);
+emit_16(746);
+emit_16(681);
+emit_16(746);
+emit_16(682);
+emit_16(747);
+emit_16(683);
+emit_16(747);
+emit_16(682);
+emit_16(747);
+emit_16(683);
+emit_16(748);
+emit_16(684);
+emit_16(748);
+emit_16(683);
+emit_16(748);
+emit_16(684);
+emit_16(749);
+emit_16(685);
+emit_16(749);
+emit_16(684);
+emit_16(749);
+emit_16(685);
+emit_16(750);
+emit_16(686);
+emit_16(750);
+emit_16(685);
+emit_16(750);
+emit_16(686);
+emit_16(751);
+emit_16(687);
+emit_16(751);
+emit_16(686);
+emit_16(751);
+emit_16(687);
+emit_16(752);
+emit_16(688);
+emit_16(752);
+emit_16(687);
+emit_16(752);
+emit_16(688);
+emit_16(753);
+emit_16(689);
+emit_16(753);
+emit_16(688);
+emit_16(753);
+emit_16(689);
+emit_16(754);
+emit_16(690);
+emit_16(754);
+emit_16(689);
+emit_16(754);
+emit_16(690);
+emit_16(755);
+emit_16(691);
+emit_16(755);
+emit_16(690);
+emit_16(755);
+emit_16(691);
+emit_16(756);
+emit_16(692);
+emit_16(756);
+emit_16(691);
+emit_16(756);
+emit_16(692);
+emit_16(757);
+emit_16(693);
+emit_16(757);
+emit_16(692);
+emit_16(757);
+emit_16(693);
+emit_16(758);
+emit_16(694);
+emit_16(758);
+emit_16(693);
+emit_16(758);
+emit_16(694);
+emit_16(759);
+emit_16(695);
+emit_16(759);
+emit_16(694);
+emit_16(759);
+emit_16(695);
+emit_16(760);
+emit_16(696);
+emit_16(760);
+emit_16(695);
+emit_16(760);
+emit_16(696);
+emit_16(761);
+emit_16(697);
+emit_16(761);
+emit_16(696);
+emit_16(761);
+emit_16(697);
+emit_16(762);
+emit_16(698);
+emit_16(762);
+emit_16(697);
+emit_16(762);
+emit_16(698);
+emit_16(763);
+emit_16(699);
+emit_16(763);
+emit_16(698);
+emit_16(763);
+emit_16(699);
+emit_16(764);
+emit_16(700);
+emit_16(764);
+emit_16(699);
+emit_16(764);
+emit_16(700);
+emit_16(765);
+emit_16(701);
+emit_16(765);
+emit_16(700);
+emit_16(765);
+emit_16(701);
+emit_16(766);
+emit_16(702);
+emit_16(766);
+emit_16(701);
+emit_16(766);
+emit_16(702);
+emit_16(767);
+emit_16(703);
+emit_16(767);
+emit_16(702);
+emit_16(768);
+emit_16(704);
+emit_16(769);
+emit_16(705);
+emit_16(769);
+emit_16(704);
+emit_16(769);
+emit_16(705);
+emit_16(770);
+emit_16(706);
+emit_16(770);
+emit_16(705);
+emit_16(770);
+emit_16(706);
+emit_16(771);
+emit_16(707);
+emit_16(771);
+emit_16(706);
+emit_16(771);
+emit_16(707);
+emit_16(772);
+emit_16(708);
+emit_16(772);
+emit_16(707);
+emit_16(772);
+emit_16(708);
+emit_16(773);
+emit_16(709);
+emit_16(773);
+emit_16(708);
+emit_16(773);
+emit_16(709);
+emit_16(774);
+emit_16(710);
+emit_16(774);
+emit_16(709);
+emit_16(774);
+emit_16(710);
+emit_16(775);
+emit_16(711);
+emit_16(775);
+emit_16(710);
+emit_16(775);
+emit_16(711);
+emit_16(776);
+emit_16(712);
+emit_16(776);
+emit_16(711);
+emit_16(776);
+emit_16(712);
+emit_16(777);
+emit_16(713);
+emit_16(777);
+emit_16(712);
+emit_16(777);
+emit_16(713);
+emit_16(778);
+emit_16(714);
+emit_16(778);
+emit_16(713);
+emit_16(778);
+emit_16(714);
+emit_16(779);
+emit_16(715);
+emit_16(779);
+emit_16(714);
+emit_16(779);
+emit_16(715);
+emit_16(780);
+emit_16(716);
+emit_16(780);
+emit_16(715);
+emit_16(780);
+emit_16(716);
+emit_16(781);
+emit_16(717);
+emit_16(781);
+emit_16(716);
+emit_16(781);
+emit_16(717);
+emit_16(782);
+emit_16(718);
+emit_16(782);
+emit_16(717);
+emit_16(782);
+emit_16(718);
+emit_16(783);
+emit_16(719);
+emit_16(783);
+emit_16(718);
+emit_16(783);
+emit_16(719);
+emit_16(784);
+emit_16(720);
+emit_16(784);
+emit_16(719);
+emit_16(784);
+emit_16(720);
+emit_16(785);
+emit_16(721);
+emit_16(785);
+emit_16(720);
+emit_16(785);
+emit_16(721);
+emit_16(786);
+emit_16(722);
+emit_16(786);
+emit_16(721);
+emit_16(786);
+emit_16(722);
+emit_16(787);
+emit_16(723);
+emit_16(787);
+emit_16(722);
+emit_16(787);
+emit_16(723);
+emit_16(788);
+emit_16(724);
+emit_16(788);
+emit_16(723);
+emit_16(788);
+emit_16(724);
+emit_16(789);
+emit_16(725);
+emit_16(789);
+emit_16(724);
+emit_16(789);
+emit_16(725);
+emit_16(790);
+emit_16(726);
+emit_16(790);
+emit_16(725);
+emit_16(790);
+emit_16(726);
+emit_16(791);
+emit_16(727);
+emit_16(791);
+emit_16(726);
+emit_16(791);
+emit_16(727);
+emit_16(792);
+emit_16(728);
+emit_16(792);
+emit_16(727);
+emit_16(792);
+emit_16(728);
+emit_16(793);
+emit_16(729);
+emit_16(793);
+emit_16(728);
+emit_16(793);
+emit_16(729);
+emit_16(794);
+emit_16(730);
+emit_16(794);
+emit_16(729);
+emit_16(794);
+emit_16(730);
+emit_16(795);
+emit_16(731);
+emit_16(795);
+emit_16(730);
+emit_16(795);
+emit_16(731);
+emit_16(796);
+emit_16(732);
+emit_16(796);
+emit_16(731);
+emit_16(796);
+emit_16(732);
+emit_16(797);
+emit_16(733);
+emit_16(797);
+emit_16(732);
+emit_16(797);
+emit_16(733);
+emit_16(798);
+emit_16(734);
+emit_16(798);
+emit_16(733);
+emit_16(798);
+emit_16(734);
+emit_16(799);
+emit_16(735);
+emit_16(799);
+emit_16(734);
+emit_16(799);
+emit_16(735);
+emit_16(800);
+emit_16(736);
+emit_16(800);
+emit_16(735);
+emit_16(800);
+emit_16(736);
+emit_16(801);
+emit_16(737);
+emit_16(801);
+emit_16(736);
+emit_16(801);
+emit_16(737);
+emit_16(802);
+emit_16(738);
+emit_16(802);
+emit_16(737);
+emit_16(802);
+emit_16(738);
+emit_16(803);
+emit_16(739);
+emit_16(803);
+emit_16(738);
+emit_16(803);
+emit_16(739);
+emit_16(804);
+emit_16(740);
+emit_16(804);
+emit_16(739);
+emit_16(804);
+emit_16(740);
+emit_16(805);
+emit_16(741);
+emit_16(805);
+emit_16(740);
+emit_16(805);
+emit_16(741);
+emit_16(806);
+emit_16(742);
+emit_16(806);
+emit_16(741);
+emit_16(806);
+emit_16(742);
+emit_16(807);
+emit_16(743);
+emit_16(807);
+emit_16(742);
+emit_16(807);
+emit_16(743);
+emit_16(808);
+emit_16(744);
+emit_16(808);
+emit_16(743);
+emit_16(808);
+emit_16(744);
+emit_16(809);
+emit_16(745);
+emit_16(809);
+emit_16(744);
+emit_16(809);
+emit_16(745);
+emit_16(810);
+emit_16(746);
+emit_16(810);
+emit_16(745);
+emit_16(810);
+emit_16(746);
+emit_16(811);
+emit_16(747);
+emit_16(811);
+emit_16(746);
+emit_16(811);
+emit_16(747);
+emit_16(812);
+emit_16(748);
+emit_16(812);
+emit_16(747);
+emit_16(812);
+emit_16(748);
+emit_16(813);
+emit_16(749);
+emit_16(813);
+emit_16(748);
+emit_16(813);
+emit_16(749);
+emit_16(814);
+emit_16(750);
+emit_16(814);
+emit_16(749);
+emit_16(814);
+emit_16(750);
+emit_16(815);
+emit_16(751);
+emit_16(815);
+emit_16(750);
+emit_16(815);
+emit_16(751);
+emit_16(816);
+emit_16(752);
+emit_16(816);
+emit_16(751);
+emit_16(816);
+emit_16(752);
+emit_16(817);
+emit_16(753);
+emit_16(817);
+emit_16(752);
+emit_16(817);
+emit_16(753);
+emit_16(818);
+emit_16(754);
+emit_16(818);
+emit_16(753);
+emit_16(818);
+emit_16(754);
+emit_16(819);
+emit_16(755);
+emit_16(819);
+emit_16(754);
+emit_16(819);
+emit_16(755);
+emit_16(820);
+emit_16(756);
+emit_16(820);
+emit_16(755);
+emit_16(820);
+emit_16(756);
+emit_16(821);
+emit_16(757);
+emit_16(821);
+emit_16(756);
+emit_16(821);
+emit_16(757);
+emit_16(822);
+emit_16(758);
+emit_16(822);
+emit_16(757);
+emit_16(822);
+emit_16(758);
+emit_16(823);
+emit_16(759);
+emit_16(823);
+emit_16(758);
+emit_16(823);
+emit_16(759);
+emit_16(824);
+emit_16(760);
+emit_16(824);
+emit_16(759);
+emit_16(824);
+emit_16(760);
+emit_16(825);
+emit_16(761);
+emit_16(825);
+emit_16(760);
+emit_16(825);
+emit_16(761);
+emit_16(826);
+emit_16(762);
+emit_16(826);
+emit_16(761);
+emit_16(826);
+emit_16(762);
+emit_16(827);
+emit_16(763);
+emit_16(827);
+emit_16(762);
+emit_16(827);
+emit_16(763);
+emit_16(828);
+emit_16(764);
+emit_16(828);
+emit_16(763);
+emit_16(828);
+emit_16(764);
+emit_16(829);
+emit_16(765);
+emit_16(829);
+emit_16(764);
+emit_16(829);
+emit_16(765);
+emit_16(830);
+emit_16(766);
+emit_16(830);
+emit_16(765);
+emit_16(830);
+emit_16(766);
+emit_16(831);
+emit_16(767);
+emit_16(831);
+emit_16(766);
+emit_16(832);
+emit_16(768);
+emit_16(833);
+emit_16(769);
+emit_16(833);
+emit_16(768);
+emit_16(833);
+emit_16(769);
+emit_16(834);
+emit_16(770);
+emit_16(834);
+emit_16(769);
+emit_16(834);
+emit_16(770);
+emit_16(835);
+emit_16(771);
+emit_16(835);
+emit_16(770);
+emit_16(835);
+emit_16(771);
+emit_16(836);
+emit_16(772);
+emit_16(836);
+emit_16(771);
+emit_16(836);
+emit_16(772);
+emit_16(837);
+emit_16(773);
+emit_16(837);
+emit_16(772);
+emit_16(837);
+emit_16(773);
+emit_16(838);
+emit_16(774);
+emit_16(838);
+emit_16(773);
+emit_16(838);
+emit_16(774);
+emit_16(839);
+emit_16(775);
+emit_16(839);
+emit_16(774);
+emit_16(839);
+emit_16(775);
+emit_16(840);
+emit_16(776);
+emit_16(840);
+emit_16(775);
+emit_16(840);
+emit_16(776);
+emit_16(841);
+emit_16(777);
+emit_16(841);
+emit_16(776);
+emit_16(841);
+emit_16(777);
+emit_16(842);
+emit_16(778);
+emit_16(842);
+emit_16(777);
+emit_16(842);
+emit_16(778);
+emit_16(843);
+emit_16(779);
+emit_16(843);
+emit_16(778);
+emit_16(843);
+emit_16(779);
+emit_16(844);
+emit_16(780);
+emit_16(844);
+emit_16(779);
+emit_16(844);
+emit_16(780);
+emit_16(845);
+emit_16(781);
+emit_16(845);
+emit_16(780);
+emit_16(845);
+emit_16(781);
+emit_16(846);
+emit_16(782);
+emit_16(846);
+emit_16(781);
+emit_16(846);
+emit_16(782);
+emit_16(847);
+emit_16(783);
+emit_16(847);
+emit_16(782);
+emit_16(847);
+emit_16(783);
+emit_16(848);
+emit_16(784);
+emit_16(848);
+emit_16(783);
+emit_16(848);
+emit_16(784);
+emit_16(849);
+emit_16(785);
+emit_16(849);
+emit_16(784);
+emit_16(849);
+emit_16(785);
+emit_16(850);
+emit_16(786);
+emit_16(850);
+emit_16(785);
+emit_16(850);
+emit_16(786);
+emit_16(851);
+emit_16(787);
+emit_16(851);
+emit_16(786);
+emit_16(851);
+emit_16(787);
+emit_16(852);
+emit_16(788);
+emit_16(852);
+emit_16(787);
+emit_16(852);
+emit_16(788);
+emit_16(853);
+emit_16(789);
+emit_16(853);
+emit_16(788);
+emit_16(853);
+emit_16(789);
+emit_16(854);
+emit_16(790);
+emit_16(854);
+emit_16(789);
+emit_16(854);
+emit_16(790);
+emit_16(855);
+emit_16(791);
+emit_16(855);
+emit_16(790);
+emit_16(855);
+emit_16(791);
+emit_16(856);
+emit_16(792);
+emit_16(856);
+emit_16(791);
+emit_16(856);
+emit_16(792);
+emit_16(857);
+emit_16(793);
+emit_16(857);
+emit_16(792);
+emit_16(857);
+emit_16(793);
+emit_16(858);
+emit_16(794);
+emit_16(858);
+emit_16(793);
+emit_16(858);
+emit_16(794);
+emit_16(859);
+emit_16(795);
+emit_16(859);
+emit_16(794);
+emit_16(859);
+emit_16(795);
+emit_16(860);
+emit_16(796);
+emit_16(860);
+emit_16(795);
+emit_16(860);
+emit_16(796);
+emit_16(861);
+emit_16(797);
+emit_16(861);
+emit_16(796);
+emit_16(861);
+emit_16(797);
+emit_16(862);
+emit_16(798);
+emit_16(862);
+emit_16(797);
+emit_16(862);
+emit_16(798);
+emit_16(863);
+emit_16(799);
+emit_16(863);
+emit_16(798);
+emit_16(863);
+emit_16(799);
+emit_16(864);
+emit_16(800);
+emit_16(864);
+emit_16(799);
+emit_16(864);
+emit_16(800);
+emit_16(865);
+emit_16(801);
+emit_16(865);
+emit_16(800);
+emit_16(865);
+emit_16(801);
+emit_16(866);
+emit_16(802);
+emit_16(866);
+emit_16(801);
+emit_16(866);
+emit_16(802);
+emit_16(867);
+emit_16(803);
+emit_16(867);
+emit_16(802);
+emit_16(867);
+emit_16(803);
+emit_16(868);
+emit_16(804);
+emit_16(868);
+emit_16(803);
+emit_16(868);
+emit_16(804);
+emit_16(869);
+emit_16(805);
+emit_16(869);
+emit_16(804);
+emit_16(869);
+emit_16(805);
+emit_16(870);
+emit_16(806);
+emit_16(870);
+emit_16(805);
+emit_16(870);
+emit_16(806);
+emit_16(871);
+emit_16(807);
+emit_16(871);
+emit_16(806);
+emit_16(871);
+emit_16(807);
+emit_16(872);
+emit_16(808);
+emit_16(872);
+emit_16(807);
+emit_16(872);
+emit_16(808);
+emit_16(873);
+emit_16(809);
+emit_16(873);
+emit_16(808);
+emit_16(873);
+emit_16(809);
+emit_16(874);
+emit_16(810);
+emit_16(874);
+emit_16(809);
+emit_16(874);
+emit_16(810);
+emit_16(875);
+emit_16(811);
+emit_16(875);
+emit_16(810);
+emit_16(875);
+emit_16(811);
+emit_16(876);
+emit_16(812);
+emit_16(876);
+emit_16(811);
+emit_16(876);
+emit_16(812);
+emit_16(877);
+emit_16(813);
+emit_16(877);
+emit_16(812);
+emit_16(877);
+emit_16(813);
+emit_16(878);
+emit_16(814);
+emit_16(878);
+emit_16(813);
+emit_16(878);
+emit_16(814);
+emit_16(879);
+emit_16(815);
+emit_16(879);
+emit_16(814);
+emit_16(879);
+emit_16(815);
+emit_16(880);
+emit_16(816);
+emit_16(880);
+emit_16(815);
+emit_16(880);
+emit_16(816);
+emit_16(881);
+emit_16(817);
+emit_16(881);
+emit_16(816);
+emit_16(881);
+emit_16(817);
+emit_16(882);
+emit_16(818);
+emit_16(882);
+emit_16(817);
+emit_16(882);
+emit_16(818);
+emit_16(883);
+emit_16(819);
+emit_16(883);
+emit_16(818);
+emit_16(883);
+emit_16(819);
+emit_16(884);
+emit_16(820);
+emit_16(884);
+emit_16(819);
+emit_16(884);
+emit_16(820);
+emit_16(885);
+emit_16(821);
+emit_16(885);
+emit_16(820);
+emit_16(885);
+emit_16(821);
+emit_16(886);
+emit_16(822);
+emit_16(886);
+emit_16(821);
+emit_16(886);
+emit_16(822);
+emit_16(887);
+emit_16(823);
+emit_16(887);
+emit_16(822);
+emit_16(887);
+emit_16(823);
+emit_16(888);
+emit_16(824);
+emit_16(888);
+emit_16(823);
+emit_16(888);
+emit_16(824);
+emit_16(889);
+emit_16(825);
+emit_16(889);
+emit_16(824);
+emit_16(889);
+emit_16(825);
+emit_16(890);
+emit_16(826);
+emit_16(890);
+emit_16(825);
+emit_16(890);
+emit_16(826);
+emit_16(891);
+emit_16(827);
+emit_16(891);
+emit_16(826);
+emit_16(891);
+emit_16(827);
+emit_16(892);
+emit_16(828);
+emit_16(892);
+emit_16(827);
+emit_16(892);
+emit_16(828);
+emit_16(893);
+emit_16(829);
+emit_16(893);
+emit_16(828);
+emit_16(893);
+emit_16(829);
+emit_16(894);
+emit_16(830);
+emit_16(894);
+emit_16(829);
+emit_16(894);
+emit_16(830);
+emit_16(895);
+emit_16(831);
+emit_16(895);
+emit_16(830);
+emit_16(896);
+emit_16(832);
+emit_16(897);
+emit_16(833);
+emit_16(897);
+emit_16(832);
+emit_16(897);
+emit_16(833);
+emit_16(898);
+emit_16(834);
+emit_16(898);
+emit_16(833);
+emit_16(898);
+emit_16(834);
+emit_16(899);
+emit_16(835);
+emit_16(899);
+emit_16(834);
+emit_16(899);
+emit_16(835);
+emit_16(900);
+emit_16(836);
+emit_16(900);
+emit_16(835);
+emit_16(900);
+emit_16(836);
+emit_16(901);
+emit_16(837);
+emit_16(901);
+emit_16(836);
+emit_16(901);
+emit_16(837);
+emit_16(902);
+emit_16(838);
+emit_16(902);
+emit_16(837);
+emit_16(902);
+emit_16(838);
+emit_16(903);
+emit_16(839);
+emit_16(903);
+emit_16(838);
+emit_16(903);
+emit_16(839);
+emit_16(904);
+emit_16(840);
+emit_16(904);
+emit_16(839);
+emit_16(904);
+emit_16(840);
+emit_16(905);
+emit_16(841);
+emit_16(905);
+emit_16(840);
+emit_16(905);
+emit_16(841);
+emit_16(906);
+emit_16(842);
+emit_16(906);
+emit_16(841);
+emit_16(906);
+emit_16(842);
+emit_16(907);
+emit_16(843);
+emit_16(907);
+emit_16(842);
+emit_16(907);
+emit_16(843);
+emit_16(908);
+emit_16(844);
+emit_16(908);
+emit_16(843);
+emit_16(908);
+emit_16(844);
+emit_16(909);
+emit_16(845);
+emit_16(909);
+emit_16(844);
+emit_16(909);
+emit_16(845);
+emit_16(910);
+emit_16(846);
+emit_16(910);
+emit_16(845);
+emit_16(910);
+emit_16(846);
+emit_16(911);
+emit_16(847);
+emit_16(911);
+emit_16(846);
+emit_16(911);
+emit_16(847);
+emit_16(912);
+emit_16(848);
+emit_16(912);
+emit_16(847);
+emit_16(912);
+emit_16(848);
+emit_16(913);
+emit_16(849);
+emit_16(913);
+emit_16(848);
+emit_16(913);
+emit_16(849);
+emit_16(914);
+emit_16(850);
+emit_16(914);
+emit_16(849);
+emit_16(914);
+emit_16(850);
+emit_16(915);
+emit_16(851);
+emit_16(915);
+emit_16(850);
+emit_16(915);
+emit_16(851);
+emit_16(916);
+emit_16(852);
+emit_16(916);
+emit_16(851);
+emit_16(916);
+emit_16(852);
+emit_16(917);
+emit_16(853);
+emit_16(917);
+emit_16(852);
+emit_16(917);
+emit_16(853);
+emit_16(918);
+emit_16(854);
+emit_16(918);
+emit_16(853);
+emit_16(918);
+emit_16(854);
+emit_16(919);
+emit_16(855);
+emit_16(919);
+emit_16(854);
+emit_16(919);
+emit_16(855);
+emit_16(920);
+emit_16(856);
+emit_16(920);
+emit_16(855);
+emit_16(920);
+emit_16(856);
+emit_16(921);
+emit_16(857);
+emit_16(921);
+emit_16(856);
+emit_16(921);
+emit_16(857);
+emit_16(922);
+emit_16(858);
+emit_16(922);
+emit_16(857);
+emit_16(922);
+emit_16(858);
+emit_16(923);
+emit_16(859);
+emit_16(923);
+emit_16(858);
+emit_16(923);
+emit_16(859);
+emit_16(924);
+emit_16(860);
+emit_16(924);
+emit_16(859);
+emit_16(924);
+emit_16(860);
+emit_16(925);
+emit_16(861);
+emit_16(925);
+emit_16(860);
+emit_16(925);
+emit_16(861);
+emit_16(926);
+emit_16(862);
+emit_16(926);
+emit_16(861);
+emit_16(926);
+emit_16(862);
+emit_16(927);
+emit_16(863);
+emit_16(927);
+emit_16(862);
+emit_16(927);
+emit_16(863);
+emit_16(928);
+emit_16(864);
+emit_16(928);
+emit_16(863);
+emit_16(928);
+emit_16(864);
+emit_16(929);
+emit_16(865);
+emit_16(929);
+emit_16(864);
+emit_16(929);
+emit_16(865);
+emit_16(930);
+emit_16(866);
+emit_16(930);
+emit_16(865);
+emit_16(930);
+emit_16(866);
+emit_16(931);
+emit_16(867);
+emit_16(931);
+emit_16(866);
+emit_16(931);
+emit_16(867);
+emit_16(932);
+emit_16(868);
+emit_16(932);
+emit_16(867);
+emit_16(932);
+emit_16(868);
+emit_16(933);
+emit_16(869);
+emit_16(933);
+emit_16(868);
+emit_16(933);
+emit_16(869);
+emit_16(934);
+emit_16(870);
+emit_16(934);
+emit_16(869);
+emit_16(934);
+emit_16(870);
+emit_16(935);
+emit_16(871);
+emit_16(935);
+emit_16(870);
+emit_16(935);
+emit_16(871);
+emit_16(936);
+emit_16(872);
+emit_16(936);
+emit_16(871);
+emit_16(936);
+emit_16(872);
+emit_16(937);
+emit_16(873);
+emit_16(937);
+emit_16(872);
+emit_16(937);
+emit_16(873);
+emit_16(938);
+emit_16(874);
+emit_16(938);
+emit_16(873);
+emit_16(938);
+emit_16(874);
+emit_16(939);
+emit_16(875);
+emit_16(939);
+emit_16(874);
+emit_16(939);
+emit_16(875);
+emit_16(940);
+emit_16(876);
+emit_16(940);
+emit_16(875);
+emit_16(940);
+emit_16(876);
+emit_16(941);
+emit_16(877);
+emit_16(941);
+emit_16(876);
+emit_16(941);
+emit_16(877);
+emit_16(942);
+emit_16(878);
+emit_16(942);
+emit_16(877);
+emit_16(942);
+emit_16(878);
+emit_16(943);
+emit_16(879);
+emit_16(943);
+emit_16(878);
+emit_16(943);
+emit_16(879);
+emit_16(944);
+emit_16(880);
+emit_16(944);
+emit_16(879);
+emit_16(944);
+emit_16(880);
+emit_16(945);
+emit_16(881);
+emit_16(945);
+emit_16(880);
+emit_16(945);
+emit_16(881);
+emit_16(946);
+emit_16(882);
+emit_16(946);
+emit_16(881);
+emit_16(946);
+emit_16(882);
+emit_16(947);
+emit_16(883);
+emit_16(947);
+emit_16(882);
+emit_16(947);
+emit_16(883);
+emit_16(948);
+emit_16(884);
+emit_16(948);
+emit_16(883);
+emit_16(948);
+emit_16(884);
+emit_16(949);
+emit_16(885);
+emit_16(949);
+emit_16(884);
+emit_16(949);
+emit_16(885);
+emit_16(950);
+emit_16(886);
+emit_16(950);
+emit_16(885);
+emit_16(950);
+emit_16(886);
+emit_16(951);
+emit_16(887);
+emit_16(951);
+emit_16(886);
+emit_16(951);
+emit_16(887);
+emit_16(952);
+emit_16(888);
+emit_16(952);
+emit_16(887);
+emit_16(952);
+emit_16(888);
+emit_16(953);
+emit_16(889);
+emit_16(953);
+emit_16(888);
+emit_16(953);
+emit_16(889);
+emit_16(954);
+emit_16(890);
+emit_16(954);
+emit_16(889);
+emit_16(954);
+emit_16(890);
+emit_16(955);
+emit_16(891);
+emit_16(955);
+emit_16(890);
+emit_16(955);
+emit_16(891);
+emit_16(956);
+emit_16(892);
+emit_16(956);
+emit_16(891);
+emit_16(956);
+emit_16(892);
+emit_16(957);
+emit_16(893);
+emit_16(957);
+emit_16(892);
+emit_16(957);
+emit_16(893);
+emit_16(958);
+emit_16(894);
+emit_16(958);
+emit_16(893);
+emit_16(958);
+emit_16(894);
+emit_16(959);
+emit_16(895);
+emit_16(959);
+emit_16(894);
+emit_16(960);
+emit_16(896);
+emit_16(961);
+emit_16(897);
+emit_16(961);
+emit_16(896);
+emit_16(961);
+emit_16(897);
+emit_16(962);
+emit_16(898);
+emit_16(962);
+emit_16(897);
+emit_16(962);
+emit_16(898);
+emit_16(963);
+emit_16(899);
+emit_16(963);
+emit_16(898);
+emit_16(963);
+emit_16(899);
+emit_16(964);
+emit_16(900);
+emit_16(964);
+emit_16(899);
+emit_16(964);
+emit_16(900);
+emit_16(965);
+emit_16(901);
+emit_16(965);
+emit_16(900);
+emit_16(965);
+emit_16(901);
+emit_16(966);
+emit_16(902);
+emit_16(966);
+emit_16(901);
+emit_16(966);
+emit_16(902);
+emit_16(967);
+emit_16(903);
+emit_16(967);
+emit_16(902);
+emit_16(967);
+emit_16(903);
+emit_16(968);
+emit_16(904);
+emit_16(968);
+emit_16(903);
+emit_16(968);
+emit_16(904);
+emit_16(969);
+emit_16(905);
+emit_16(969);
+emit_16(904);
+emit_16(969);
+emit_16(905);
+emit_16(970);
+emit_16(906);
+emit_16(970);
+emit_16(905);
+emit_16(970);
+emit_16(906);
+emit_16(971);
+emit_16(907);
+emit_16(971);
+emit_16(906);
+emit_16(971);
+emit_16(907);
+emit_16(972);
+emit_16(908);
+emit_16(972);
+emit_16(907);
+emit_16(972);
+emit_16(908);
+emit_16(973);
+emit_16(909);
+emit_16(973);
+emit_16(908);
+emit_16(973);
+emit_16(909);
+emit_16(974);
+emit_16(910);
+emit_16(974);
+emit_16(909);
+emit_16(974);
+emit_16(910);
+emit_16(975);
+emit_16(911);
+emit_16(975);
+emit_16(910);
+emit_16(975);
+emit_16(911);
+emit_16(976);
+emit_16(912);
+emit_16(976);
+emit_16(911);
+emit_16(976);
+emit_16(912);
+emit_16(977);
+emit_16(913);
+emit_16(977);
+emit_16(912);
+emit_16(977);
+emit_16(913);
+emit_16(978);
+emit_16(914);
+emit_16(978);
+emit_16(913);
+emit_16(978);
+emit_16(914);
+emit_16(979);
+emit_16(915);
+emit_16(979);
+emit_16(914);
+emit_16(979);
+emit_16(915);
+emit_16(980);
+emit_16(916);
+emit_16(980);
+emit_16(915);
+emit_16(980);
+emit_16(916);
+emit_16(981);
+emit_16(917);
+emit_16(981);
+emit_16(916);
+emit_16(981);
+emit_16(917);
+emit_16(982);
+emit_16(918);
+emit_16(982);
+emit_16(917);
+emit_16(982);
+emit_16(918);
+emit_16(983);
+emit_16(919);
+emit_16(983);
+emit_16(918);
+emit_16(983);
+emit_16(919);
+emit_16(984);
+emit_16(920);
+emit_16(984);
+emit_16(919);
+emit_16(984);
+emit_16(920);
+emit_16(985);
+emit_16(921);
+emit_16(985);
+emit_16(920);
+emit_16(985);
+emit_16(921);
+emit_16(986);
+emit_16(922);
+emit_16(986);
+emit_16(921);
+emit_16(986);
+emit_16(922);
+emit_16(987);
+emit_16(923);
+emit_16(987);
+emit_16(922);
+emit_16(987);
+emit_16(923);
+emit_16(988);
+emit_16(924);
+emit_16(988);
+emit_16(923);
+emit_16(988);
+emit_16(924);
+emit_16(989);
+emit_16(925);
+emit_16(989);
+emit_16(924);
+emit_16(989);
+emit_16(925);
+emit_16(990);
+emit_16(926);
+emit_16(990);
+emit_16(925);
+emit_16(990);
+emit_16(926);
+emit_16(991);
+emit_16(927);
+emit_16(991);
+emit_16(926);
+emit_16(991);
+emit_16(927);
+emit_16(992);
+emit_16(928);
+emit_16(992);
+emit_16(927);
+emit_16(992);
+emit_16(928);
+emit_16(993);
+emit_16(929);
+emit_16(993);
+emit_16(928);
+emit_16(993);
+emit_16(929);
+emit_16(994);
+emit_16(930);
+emit_16(994);
+emit_16(929);
+emit_16(994);
+emit_16(930);
+emit_16(995);
+emit_16(931);
+emit_16(995);
+emit_16(930);
+emit_16(995);
+emit_16(931);
+emit_16(996);
+emit_16(932);
+emit_16(996);
+emit_16(931);
+emit_16(996);
+emit_16(932);
+emit_16(997);
+emit_16(933);
+emit_16(997);
+emit_16(932);
+emit_16(997);
+emit_16(933);
+emit_16(998);
+emit_16(934);
+emit_16(998);
+emit_16(933);
+emit_16(998);
+emit_16(934);
+emit_16(999);
+emit_16(935);
+emit_16(999);
+emit_16(934);
+emit_16(999);
+emit_16(935);
+emit_16(1000);
+emit_16(936);
+emit_16(1000);
+emit_16(935);
+emit_16(1000);
+emit_16(936);
+emit_16(1001);
+emit_16(937);
+emit_16(1001);
+emit_16(936);
+emit_16(1001);
+emit_16(937);
+emit_16(1002);
+emit_16(938);
+emit_16(1002);
+emit_16(937);
+emit_16(1002);
+emit_16(938);
+emit_16(1003);
+emit_16(939);
+emit_16(1003);
+emit_16(938);
+emit_16(1003);
+emit_16(939);
+emit_16(1004);
+emit_16(940);
+emit_16(1004);
+emit_16(939);
+emit_16(1004);
+emit_16(940);
+emit_16(1005);
+emit_16(941);
+emit_16(1005);
+emit_16(940);
+emit_16(1005);
+emit_16(941);
+emit_16(1006);
+emit_16(942);
+emit_16(1006);
+emit_16(941);
+emit_16(1006);
+emit_16(942);
+emit_16(1007);
+emit_16(943);
+emit_16(1007);
+emit_16(942);
+emit_16(1007);
+emit_16(943);
+emit_16(1008);
+emit_16(944);
+emit_16(1008);
+emit_16(943);
+emit_16(1008);
+emit_16(944);
+emit_16(1009);
+emit_16(945);
+emit_16(1009);
+emit_16(944);
+emit_16(1009);
+emit_16(945);
+emit_16(1010);
+emit_16(946);
+emit_16(1010);
+emit_16(945);
+emit_16(1010);
+emit_16(946);
+emit_16(1011);
+emit_16(947);
+emit_16(1011);
+emit_16(946);
+emit_16(1011);
+emit_16(947);
+emit_16(1012);
+emit_16(948);
+emit_16(1012);
+emit_16(947);
+emit_16(1012);
+emit_16(948);
+emit_16(1013);
+emit_16(949);
+emit_16(1013);
+emit_16(948);
+emit_16(1013);
+emit_16(949);
+emit_16(1014);
+emit_16(950);
+emit_16(1014);
+emit_16(949);
+emit_16(1014);
+emit_16(950);
+emit_16(1015);
+emit_16(951);
+emit_16(1015);
+emit_16(950);
+emit_16(1015);
+emit_16(951);
+emit_16(1016);
+emit_16(952);
+emit_16(1016);
+emit_16(951);
+emit_16(1016);
+emit_16(952);
+emit_16(1017);
+emit_16(953);
+emit_16(1017);
+emit_16(952);
+emit_16(1017);
+emit_16(953);
+emit_16(1018);
+emit_16(954);
+emit_16(1018);
+emit_16(953);
+emit_16(1018);
+emit_16(954);
+emit_16(1019);
+emit_16(955);
+emit_16(1019);
+emit_16(954);
+emit_16(1019);
+emit_16(955);
+emit_16(1020);
+emit_16(956);
+emit_16(1020);
+emit_16(955);
+emit_16(1020);
+emit_16(956);
+emit_16(1021);
+emit_16(957);
+emit_16(1021);
+emit_16(956);
+emit_16(1021);
+emit_16(957);
+emit_16(1022);
+emit_16(958);
+emit_16(1022);
+emit_16(957);
+emit_16(1022);
+emit_16(958);
+emit_16(1023);
+emit_16(959);
+emit_16(1023);
+emit_16(958);
+emit_16(1024);
+emit_16(960);
+emit_16(1025);
+emit_16(961);
+emit_16(1025);
+emit_16(960);
+emit_16(1025);
+emit_16(961);
+emit_16(1026);
+emit_16(962);
+emit_16(1026);
+emit_16(961);
+emit_16(1026);
+emit_16(962);
+emit_16(1027);
+emit_16(963);
+emit_16(1027);
+emit_16(962);
+emit_16(1027);
+emit_16(963);
+emit_16(1028);
+emit_16(964);
+emit_16(1028);
+emit_16(963);
+emit_16(1028);
+emit_16(964);
+emit_16(1029);
+emit_16(965);
+emit_16(1029);
+emit_16(964);
+emit_16(1029);
+emit_16(965);
+emit_16(1030);
+emit_16(966);
+emit_16(1030);
+emit_16(965);
+emit_16(1030);
+emit_16(966);
+emit_16(1031);
+emit_16(967);
+emit_16(1031);
+emit_16(966);
+emit_16(1031);
+emit_16(967);
+emit_16(1032);
+emit_16(968);
+emit_16(1032);
+emit_16(967);
+emit_16(1032);
+emit_16(968);
+emit_16(1033);
+emit_16(969);
+emit_16(1033);
+emit_16(968);
+emit_16(1033);
+emit_16(969);
+emit_16(1034);
+emit_16(970);
+emit_16(1034);
+emit_16(969);
+emit_16(1034);
+emit_16(970);
+emit_16(1035);
+emit_16(971);
+emit_16(1035);
+emit_16(970);
+emit_16(1035);
+emit_16(971);
+emit_16(1036);
+emit_16(972);
+emit_16(1036);
+emit_16(971);
+emit_16(1036);
+emit_16(972);
+emit_16(1037);
+emit_16(973);
+emit_16(1037);
+emit_16(972);
+emit_16(1037);
+emit_16(973);
+emit_16(1038);
+emit_16(974);
+emit_16(1038);
+emit_16(973);
+emit_16(1038);
+emit_16(974);
+emit_16(1039);
+emit_16(975);
+emit_16(1039);
+emit_16(974);
+emit_16(1039);
+emit_16(975);
+emit_16(1040);
+emit_16(976);
+emit_16(1040);
+emit_16(975);
+emit_16(1040);
+emit_16(976);
+emit_16(1041);
+emit_16(977);
+emit_16(1041);
+emit_16(976);
+emit_16(1041);
+emit_16(977);
+emit_16(1042);
+emit_16(978);
+emit_16(1042);
+emit_16(977);
+emit_16(1042);
+emit_16(978);
+emit_16(1043);
+emit_16(979);
+emit_16(1043);
+emit_16(978);
+emit_16(1043);
+emit_16(979);
+emit_16(1044);
+emit_16(980);
+emit_16(1044);
+emit_16(979);
+emit_16(1044);
+emit_16(980);
+emit_16(1045);
+emit_16(981);
+emit_16(1045);
+emit_16(980);
+emit_16(1045);
+emit_16(981);
+emit_16(1046);
+emit_16(982);
+emit_16(1046);
+emit_16(981);
+emit_16(1046);
+emit_16(982);
+emit_16(1047);
+emit_16(983);
+emit_16(1047);
+emit_16(982);
+emit_16(1047);
+emit_16(983);
+emit_16(1048);
+emit_16(984);
+emit_16(1048);
+emit_16(983);
+emit_16(1048);
+emit_16(984);
+emit_16(1049);
+emit_16(985);
+emit_16(1049);
+emit_16(984);
+emit_16(1049);
+emit_16(985);
+emit_16(1050);
+emit_16(986);
+emit_16(1050);
+emit_16(985);
+emit_16(1050);
+emit_16(986);
+emit_16(1051);
+emit_16(987);
+emit_16(1051);
+emit_16(986);
+emit_16(1051);
+emit_16(987);
+emit_16(1052);
+emit_16(988);
+emit_16(1052);
+emit_16(987);
+emit_16(1052);
+emit_16(988);
+emit_16(1053);
+emit_16(989);
+emit_16(1053);
+emit_16(988);
+emit_16(1053);
+emit_16(989);
+emit_16(1054);
+emit_16(990);
+emit_16(1054);
+emit_16(989);
+emit_16(1054);
+emit_16(990);
+emit_16(1055);
+emit_16(991);
+emit_16(1055);
+emit_16(990);
+emit_16(1055);
+emit_16(991);
+emit_16(1056);
+emit_16(992);
+emit_16(1056);
+emit_16(991);
+emit_16(1056);
+emit_16(992);
+emit_16(1057);
+emit_16(993);
+emit_16(1057);
+emit_16(992);
+emit_16(1057);
+emit_16(993);
+emit_16(1058);
+emit_16(994);
+emit_16(1058);
+emit_16(993);
+emit_16(1058);
+emit_16(994);
+emit_16(1059);
+emit_16(995);
+emit_16(1059);
+emit_16(994);
+emit_16(1059);
+emit_16(995);
+emit_16(1060);
+emit_16(996);
+emit_16(1060);
+emit_16(995);
+emit_16(1060);
+emit_16(996);
+emit_16(1061);
+emit_16(997);
+emit_16(1061);
+emit_16(996);
+emit_16(1061);
+emit_16(997);
+emit_16(1062);
+emit_16(998);
+emit_16(1062);
+emit_16(997);
+emit_16(1062);
+emit_16(998);
+emit_16(1063);
+emit_16(999);
+emit_16(1063);
+emit_16(998);
+emit_16(1063);
+emit_16(999);
+emit_16(1064);
+emit_16(1000);
+emit_16(1064);
+emit_16(999);
+emit_16(1064);
+emit_16(1000);
+emit_16(1065);
+emit_16(1001);
+emit_16(1065);
+emit_16(1000);
+emit_16(1065);
+emit_16(1001);
+emit_16(1066);
+emit_16(1002);
+emit_16(1066);
+emit_16(1001);
+emit_16(1066);
+emit_16(1002);
+emit_16(1067);
+emit_16(1003);
+emit_16(1067);
+emit_16(1002);
+emit_16(1067);
+emit_16(1003);
+emit_16(1068);
+emit_16(1004);
+emit_16(1068);
+emit_16(1003);
+emit_16(1068);
+emit_16(1004);
+emit_16(1069);
+emit_16(1005);
+emit_16(1069);
+emit_16(1004);
+emit_16(1069);
+emit_16(1005);
+emit_16(1070);
+emit_16(1006);
+emit_16(1070);
+emit_16(1005);
+emit_16(1070);
+emit_16(1006);
+emit_16(1071);
+emit_16(1007);
+emit_16(1071);
+emit_16(1006);
+emit_16(1071);
+emit_16(1007);
+emit_16(1072);
+emit_16(1008);
+emit_16(1072);
+emit_16(1007);
+emit_16(1072);
+emit_16(1008);
+emit_16(1073);
+emit_16(1009);
+emit_16(1073);
+emit_16(1008);
+emit_16(1073);
+emit_16(1009);
+emit_16(1074);
+emit_16(1010);
+emit_16(1074);
+emit_16(1009);
+emit_16(1074);
+emit_16(1010);
+emit_16(1075);
+emit_16(1011);
+emit_16(1075);
+emit_16(1010);
+emit_16(1075);
+emit_16(1011);
+emit_16(1076);
+emit_16(1012);
+emit_16(1076);
+emit_16(1011);
+emit_16(1076);
+emit_16(1012);
+emit_16(1077);
+emit_16(1013);
+emit_16(1077);
+emit_16(1012);
+emit_16(1077);
+emit_16(1013);
+emit_16(1078);
+emit_16(1014);
+emit_16(1078);
+emit_16(1013);
+emit_16(1078);
+emit_16(1014);
+emit_16(1079);
+emit_16(1015);
+emit_16(1079);
+emit_16(1014);
+emit_16(1079);
+emit_16(1015);
+emit_16(1080);
+emit_16(1016);
+emit_16(1080);
+emit_16(1015);
+emit_16(1080);
+emit_16(1016);
+emit_16(1081);
+emit_16(1017);
+emit_16(1081);
+emit_16(1016);
+emit_16(1081);
+emit_16(1017);
+emit_16(1082);
+emit_16(1018);
+emit_16(1082);
+emit_16(1017);
+emit_16(1082);
+emit_16(1018);
+emit_16(1083);
+emit_16(1019);
+emit_16(1083);
+emit_16(1018);
+emit_16(1083);
+emit_16(1019);
+emit_16(1084);
+emit_16(1020);
+emit_16(1084);
+emit_16(1019);
+emit_16(1084);
+emit_16(1020);
+emit_16(1085);
+emit_16(1021);
+emit_16(1085);
+emit_16(1020);
+emit_16(1085);
+emit_16(1021);
+emit_16(1086);
+emit_16(1022);
+emit_16(1086);
+emit_16(1021);
+emit_16(1086);
+emit_16(1022);
+emit_16(1087);
+emit_16(1023);
+emit_16(1087);
+emit_16(1022);
+emit_16(1088);
+emit_16(1024);
+emit_16(1089);
+emit_16(1025);
+emit_16(1089);
+emit_16(1024);
+emit_16(1089);
+emit_16(1025);
+emit_16(1090);
+emit_16(1026);
+emit_16(1090);
+emit_16(1025);
+emit_16(1090);
+emit_16(1026);
+emit_16(1091);
+emit_16(1027);
+emit_16(1091);
+emit_16(1026);
+emit_16(1091);
+emit_16(1027);
+emit_16(1092);
+emit_16(1028);
+emit_16(1092);
+emit_16(1027);
+emit_16(1092);
+emit_16(1028);
+emit_16(1093);
+emit_16(1029);
+emit_16(1093);
+emit_16(1028);
+emit_16(1093);
+emit_16(1029);
+emit_16(1094);
+emit_16(1030);
+emit_16(1094);
+emit_16(1029);
+emit_16(1094);
+emit_16(1030);
+emit_16(1095);
+emit_16(1031);
+emit_16(1095);
+emit_16(1030);
+emit_16(1095);
+emit_16(1031);
+emit_16(1096);
+emit_16(1032);
+emit_16(1096);
+emit_16(1031);
+emit_16(1096);
+emit_16(1032);
+emit_16(1097);
+emit_16(1033);
+emit_16(1097);
+emit_16(1032);
+emit_16(1097);
+emit_16(1033);
+emit_16(1098);
+emit_16(1034);
+emit_16(1098);
+emit_16(1033);
+emit_16(1098);
+emit_16(1034);
+emit_16(1099);
+emit_16(1035);
+emit_16(1099);
+emit_16(1034);
+emit_16(1099);
+emit_16(1035);
+emit_16(1100);
+emit_16(1036);
+emit_16(1100);
+emit_16(1035);
+emit_16(1100);
+emit_16(1036);
+emit_16(1101);
+emit_16(1037);
+emit_16(1101);
+emit_16(1036);
+emit_16(1101);
+emit_16(1037);
+emit_16(1102);
+emit_16(1038);
+emit_16(1102);
+emit_16(1037);
+emit_16(1102);
+emit_16(1038);
+emit_16(1103);
+emit_16(1039);
+emit_16(1103);
+emit_16(1038);
+emit_16(1103);
+emit_16(1039);
+emit_16(1104);
+emit_16(1040);
+emit_16(1104);
+emit_16(1039);
+emit_16(1104);
+emit_16(1040);
+emit_16(1105);
+emit_16(1041);
+emit_16(1105);
+emit_16(1040);
+emit_16(1105);
+emit_16(1041);
+emit_16(1106);
+emit_16(1042);
+emit_16(1106);
+emit_16(1041);
+emit_16(1106);
+emit_16(1042);
+emit_16(1107);
+emit_16(1043);
+emit_16(1107);
+emit_16(1042);
+emit_16(1107);
+emit_16(1043);
+emit_16(1108);
+emit_16(1044);
+emit_16(1108);
+emit_16(1043);
+emit_16(1108);
+emit_16(1044);
+emit_16(1109);
+emit_16(1045);
+emit_16(1109);
+emit_16(1044);
+emit_16(1109);
+emit_16(1045);
+emit_16(1110);
+emit_16(1046);
+emit_16(1110);
+emit_16(1045);
+emit_16(1110);
+emit_16(1046);
+emit_16(1111);
+emit_16(1047);
+emit_16(1111);
+emit_16(1046);
+emit_16(1111);
+emit_16(1047);
+emit_16(1112);
+emit_16(1048);
+emit_16(1112);
+emit_16(1047);
+emit_16(1112);
+emit_16(1048);
+emit_16(1113);
+emit_16(1049);
+emit_16(1113);
+emit_16(1048);
+emit_16(1113);
+emit_16(1049);
+emit_16(1114);
+emit_16(1050);
+emit_16(1114);
+emit_16(1049);
+emit_16(1114);
+emit_16(1050);
+emit_16(1115);
+emit_16(1051);
+emit_16(1115);
+emit_16(1050);
+emit_16(1115);
+emit_16(1051);
+emit_16(1116);
+emit_16(1052);
+emit_16(1116);
+emit_16(1051);
+emit_16(1116);
+emit_16(1052);
+emit_16(1117);
+emit_16(1053);
+emit_16(1117);
+emit_16(1052);
+emit_16(1117);
+emit_16(1053);
+emit_16(1118);
+emit_16(1054);
+emit_16(1118);
+emit_16(1053);
+emit_16(1118);
+emit_16(1054);
+emit_16(1119);
+emit_16(1055);
+emit_16(1119);
+emit_16(1054);
+emit_16(1119);
+emit_16(1055);
+emit_16(1120);
+emit_16(1056);
+emit_16(1120);
+emit_16(1055);
+emit_16(1120);
+emit_16(1056);
+emit_16(1121);
+emit_16(1057);
+emit_16(1121);
+emit_16(1056);
+emit_16(1121);
+emit_16(1057);
+emit_16(1122);
+emit_16(1058);
+emit_16(1122);
+emit_16(1057);
+emit_16(1122);
+emit_16(1058);
+emit_16(1123);
+emit_16(1059);
+emit_16(1123);
+emit_16(1058);
+emit_16(1123);
+emit_16(1059);
+emit_16(1124);
+emit_16(1060);
+emit_16(1124);
+emit_16(1059);
+emit_16(1124);
+emit_16(1060);
+emit_16(1125);
+emit_16(1061);
+emit_16(1125);
+emit_16(1060);
+emit_16(1125);
+emit_16(1061);
+emit_16(1126);
+emit_16(1062);
+emit_16(1126);
+emit_16(1061);
+emit_16(1126);
+emit_16(1062);
+emit_16(1127);
+emit_16(1063);
+emit_16(1127);
+emit_16(1062);
+emit_16(1127);
+emit_16(1063);
+emit_16(1128);
+emit_16(1064);
+emit_16(1128);
+emit_16(1063);
+emit_16(1128);
+emit_16(1064);
+emit_16(1129);
+emit_16(1065);
+emit_16(1129);
+emit_16(1064);
+emit_16(1129);
+emit_16(1065);
+emit_16(1130);
+emit_16(1066);
+emit_16(1130);
+emit_16(1065);
+emit_16(1130);
+emit_16(1066);
+emit_16(1131);
+emit_16(1067);
+emit_16(1131);
+emit_16(1066);
+emit_16(1131);
+emit_16(1067);
+emit_16(1132);
+emit_16(1068);
+emit_16(1132);
+emit_16(1067);
+emit_16(1132);
+emit_16(1068);
+emit_16(1133);
+emit_16(1069);
+emit_16(1133);
+emit_16(1068);
+emit_16(1133);
+emit_16(1069);
+emit_16(1134);
+emit_16(1070);
+emit_16(1134);
+emit_16(1069);
+emit_16(1134);
+emit_16(1070);
+emit_16(1135);
+emit_16(1071);
+emit_16(1135);
+emit_16(1070);
+emit_16(1135);
+emit_16(1071);
+emit_16(1136);
+emit_16(1072);
+emit_16(1136);
+emit_16(1071);
+emit_16(1136);
+emit_16(1072);
+emit_16(1137);
+emit_16(1073);
+emit_16(1137);
+emit_16(1072);
+emit_16(1137);
+emit_16(1073);
+emit_16(1138);
+emit_16(1074);
+emit_16(1138);
+emit_16(1073);
+emit_16(1138);
+emit_16(1074);
+emit_16(1139);
+emit_16(1075);
+emit_16(1139);
+emit_16(1074);
+emit_16(1139);
+emit_16(1075);
+emit_16(1140);
+emit_16(1076);
+emit_16(1140);
+emit_16(1075);
+emit_16(1140);
+emit_16(1076);
+emit_16(1141);
+emit_16(1077);
+emit_16(1141);
+emit_16(1076);
+emit_16(1141);
+emit_16(1077);
+emit_16(1142);
+emit_16(1078);
+emit_16(1142);
+emit_16(1077);
+emit_16(1142);
+emit_16(1078);
+emit_16(1143);
+emit_16(1079);
+emit_16(1143);
+emit_16(1078);
+emit_16(1143);
+emit_16(1079);
+emit_16(1144);
+emit_16(1080);
+emit_16(1144);
+emit_16(1079);
+emit_16(1144);
+emit_16(1080);
+emit_16(1145);
+emit_16(1081);
+emit_16(1145);
+emit_16(1080);
+emit_16(1145);
+emit_16(1081);
+emit_16(1146);
+emit_16(1082);
+emit_16(1146);
+emit_16(1081);
+emit_16(1146);
+emit_16(1082);
+emit_16(1147);
+emit_16(1083);
+emit_16(1147);
+emit_16(1082);
+emit_16(1147);
+emit_16(1083);
+emit_16(1148);
+emit_16(1084);
+emit_16(1148);
+emit_16(1083);
+emit_16(1148);
+emit_16(1084);
+emit_16(1149);
+emit_16(1085);
+emit_16(1149);
+emit_16(1084);
+emit_16(1149);
+emit_16(1085);
+emit_16(1150);
+emit_16(1086);
+emit_16(1150);
+emit_16(1085);
+emit_16(1150);
+emit_16(1086);
+emit_16(1151);
+emit_16(1087);
+emit_16(1151);
+emit_16(1086);
+emit_16(1152);
+emit_16(1088);
+emit_16(1153);
+emit_16(1089);
+emit_16(1153);
+emit_16(1088);
+emit_16(1153);
+emit_16(1089);
+emit_16(1154);
+emit_16(1090);
+emit_16(1154);
+emit_16(1089);
+emit_16(1154);
+emit_16(1090);
+emit_16(1155);
+emit_16(1091);
+emit_16(1155);
+emit_16(1090);
+emit_16(1155);
+emit_16(1091);
+emit_16(1156);
+emit_16(1092);
+emit_16(1156);
+emit_16(1091);
+emit_16(1156);
+emit_16(1092);
+emit_16(1157);
+emit_16(1093);
+emit_16(1157);
+emit_16(1092);
+emit_16(1157);
+emit_16(1093);
+emit_16(1158);
+emit_16(1094);
+emit_16(1158);
+emit_16(1093);
+emit_16(1158);
+emit_16(1094);
+emit_16(1159);
+emit_16(1095);
+emit_16(1159);
+emit_16(1094);
+emit_16(1159);
+emit_16(1095);
+emit_16(1160);
+emit_16(1096);
+emit_16(1160);
+emit_16(1095);
+emit_16(1160);
+emit_16(1096);
+emit_16(1161);
+emit_16(1097);
+emit_16(1161);
+emit_16(1096);
+emit_16(1161);
+emit_16(1097);
+emit_16(1162);
+emit_16(1098);
+emit_16(1162);
+emit_16(1097);
+emit_16(1162);
+emit_16(1098);
+emit_16(1163);
+emit_16(1099);
+emit_16(1163);
+emit_16(1098);
+emit_16(1163);
+emit_16(1099);
+emit_16(1164);
+emit_16(1100);
+emit_16(1164);
+emit_16(1099);
+emit_16(1164);
+emit_16(1100);
+emit_16(1165);
+emit_16(1101);
+emit_16(1165);
+emit_16(1100);
+emit_16(1165);
+emit_16(1101);
+emit_16(1166);
+emit_16(1102);
+emit_16(1166);
+emit_16(1101);
+emit_16(1166);
+emit_16(1102);
+emit_16(1167);
+emit_16(1103);
+emit_16(1167);
+emit_16(1102);
+emit_16(1167);
+emit_16(1103);
+emit_16(1168);
+emit_16(1104);
+emit_16(1168);
+emit_16(1103);
+emit_16(1168);
+emit_16(1104);
+emit_16(1169);
+emit_16(1105);
+emit_16(1169);
+emit_16(1104);
+emit_16(1169);
+emit_16(1105);
+emit_16(1170);
+emit_16(1106);
+emit_16(1170);
+emit_16(1105);
+emit_16(1170);
+emit_16(1106);
+emit_16(1171);
+emit_16(1107);
+emit_16(1171);
+emit_16(1106);
+emit_16(1171);
+emit_16(1107);
+emit_16(1172);
+emit_16(1108);
+emit_16(1172);
+emit_16(1107);
+emit_16(1172);
+emit_16(1108);
+emit_16(1173);
+emit_16(1109);
+emit_16(1173);
+emit_16(1108);
+emit_16(1173);
+emit_16(1109);
+emit_16(1174);
+emit_16(1110);
+emit_16(1174);
+emit_16(1109);
+emit_16(1174);
+emit_16(1110);
+emit_16(1175);
+emit_16(1111);
+emit_16(1175);
+emit_16(1110);
+emit_16(1175);
+emit_16(1111);
+emit_16(1176);
+emit_16(1112);
+emit_16(1176);
+emit_16(1111);
+emit_16(1176);
+emit_16(1112);
+emit_16(1177);
+emit_16(1113);
+emit_16(1177);
+emit_16(1112);
+emit_16(1177);
+emit_16(1113);
+emit_16(1178);
+emit_16(1114);
+emit_16(1178);
+emit_16(1113);
+emit_16(1178);
+emit_16(1114);
+emit_16(1179);
+emit_16(1115);
+emit_16(1179);
+emit_16(1114);
+emit_16(1179);
+emit_16(1115);
+emit_16(1180);
+emit_16(1116);
+emit_16(1180);
+emit_16(1115);
+emit_16(1180);
+emit_16(1116);
+emit_16(1181);
+emit_16(1117);
+emit_16(1181);
+emit_16(1116);
+emit_16(1181);
+emit_16(1117);
+emit_16(1182);
+emit_16(1118);
+emit_16(1182);
+emit_16(1117);
+emit_16(1182);
+emit_16(1118);
+emit_16(1183);
+emit_16(1119);
+emit_16(1183);
+emit_16(1118);
+emit_16(1183);
+emit_16(1119);
+emit_16(1184);
+emit_16(1120);
+emit_16(1184);
+emit_16(1119);
+emit_16(1184);
+emit_16(1120);
+emit_16(1185);
+emit_16(1121);
+emit_16(1185);
+emit_16(1120);
+emit_16(1185);
+emit_16(1121);
+emit_16(1186);
+emit_16(1122);
+emit_16(1186);
+emit_16(1121);
+emit_16(1186);
+emit_16(1122);
+emit_16(1187);
+emit_16(1123);
+emit_16(1187);
+emit_16(1122);
+emit_16(1187);
+emit_16(1123);
+emit_16(1188);
+emit_16(1124);
+emit_16(1188);
+emit_16(1123);
+emit_16(1188);
+emit_16(1124);
+emit_16(1189);
+emit_16(1125);
+emit_16(1189);
+emit_16(1124);
+emit_16(1189);
+emit_16(1125);
+emit_16(1190);
+emit_16(1126);
+emit_16(1190);
+emit_16(1125);
+emit_16(1190);
+emit_16(1126);
+emit_16(1191);
+emit_16(1127);
+emit_16(1191);
+emit_16(1126);
+emit_16(1191);
+emit_16(1127);
+emit_16(1192);
+emit_16(1128);
+emit_16(1192);
+emit_16(1127);
+emit_16(1192);
+emit_16(1128);
+emit_16(1193);
+emit_16(1129);
+emit_16(1193);
+emit_16(1128);
+emit_16(1193);
+emit_16(1129);
+emit_16(1194);
+emit_16(1130);
+emit_16(1194);
+emit_16(1129);
+emit_16(1194);
+emit_16(1130);
+emit_16(1195);
+emit_16(1131);
+emit_16(1195);
+emit_16(1130);
+emit_16(1195);
+emit_16(1131);
+emit_16(1196);
+emit_16(1132);
+emit_16(1196);
+emit_16(1131);
+emit_16(1196);
+emit_16(1132);
+emit_16(1197);
+emit_16(1133);
+emit_16(1197);
+emit_16(1132);
+emit_16(1197);
+emit_16(1133);
+emit_16(1198);
+emit_16(1134);
+emit_16(1198);
+emit_16(1133);
+emit_16(1198);
+emit_16(1134);
+emit_16(1199);
+emit_16(1135);
+emit_16(1199);
+emit_16(1134);
+emit_16(1199);
+emit_16(1135);
+emit_16(1200);
+emit_16(1136);
+emit_16(1200);
+emit_16(1135);
+emit_16(1200);
+emit_16(1136);
+emit_16(1201);
+emit_16(1137);
+emit_16(1201);
+emit_16(1136);
+emit_16(1201);
+emit_16(1137);
+emit_16(1202);
+emit_16(1138);
+emit_16(1202);
+emit_16(1137);
+emit_16(1202);
+emit_16(1138);
+emit_16(1203);
+emit_16(1139);
+emit_16(1203);
+emit_16(1138);
+emit_16(1203);
+emit_16(1139);
+emit_16(1204);
+emit_16(1140);
+emit_16(1204);
+emit_16(1139);
+emit_16(1204);
+emit_16(1140);
+emit_16(1205);
+emit_16(1141);
+emit_16(1205);
+emit_16(1140);
+emit_16(1205);
+emit_16(1141);
+emit_16(1206);
+emit_16(1142);
+emit_16(1206);
+emit_16(1141);
+emit_16(1206);
+emit_16(1142);
+emit_16(1207);
+emit_16(1143);
+emit_16(1207);
+emit_16(1142);
+emit_16(1207);
+emit_16(1143);
+emit_16(1208);
+emit_16(1144);
+emit_16(1208);
+emit_16(1143);
+emit_16(1208);
+emit_16(1144);
+emit_16(1209);
+emit_16(1145);
+emit_16(1209);
+emit_16(1144);
+emit_16(1209);
+emit_16(1145);
+emit_16(1210);
+emit_16(1146);
+emit_16(1210);
+emit_16(1145);
+emit_16(1210);
+emit_16(1146);
+emit_16(1211);
+emit_16(1147);
+emit_16(1211);
+emit_16(1146);
+emit_16(1211);
+emit_16(1147);
+emit_16(1212);
+emit_16(1148);
+emit_16(1212);
+emit_16(1147);
+emit_16(1212);
+emit_16(1148);
+emit_16(1213);
+emit_16(1149);
+emit_16(1213);
+emit_16(1148);
+emit_16(1213);
+emit_16(1149);
+emit_16(1214);
+emit_16(1150);
+emit_16(1214);
+emit_16(1149);
+emit_16(1214);
+emit_16(1150);
+emit_16(1215);
+emit_16(1151);
+emit_16(1215);
+emit_16(1150);
+emit_16(1216);
+emit_16(1152);
+emit_16(1217);
+emit_16(1153);
+emit_16(1217);
+emit_16(1152);
+emit_16(1217);
+emit_16(1153);
+emit_16(1218);
+emit_16(1154);
+emit_16(1218);
+emit_16(1153);
+emit_16(1218);
+emit_16(1154);
+emit_16(1219);
+emit_16(1155);
+emit_16(1219);
+emit_16(1154);
+emit_16(1219);
+emit_16(1155);
+emit_16(1220);
+emit_16(1156);
+emit_16(1220);
+emit_16(1155);
+emit_16(1220);
+emit_16(1156);
+emit_16(1221);
+emit_16(1157);
+emit_16(1221);
+emit_16(1156);
+emit_16(1221);
+emit_16(1157);
+emit_16(1222);
+emit_16(1158);
+emit_16(1222);
+emit_16(1157);
+emit_16(1222);
+emit_16(1158);
+emit_16(1223);
+emit_16(1159);
+emit_16(1223);
+emit_16(1158);
+emit_16(1223);
+emit_16(1159);
+emit_16(1224);
+emit_16(1160);
+emit_16(1224);
+emit_16(1159);
+emit_16(1224);
+emit_16(1160);
+emit_16(1225);
+emit_16(1161);
+emit_16(1225);
+emit_16(1160);
+emit_16(1225);
+emit_16(1161);
+emit_16(1226);
+emit_16(1162);
+emit_16(1226);
+emit_16(1161);
+emit_16(1226);
+emit_16(1162);
+emit_16(1227);
+emit_16(1163);
+emit_16(1227);
+emit_16(1162);
+emit_16(1227);
+emit_16(1163);
+emit_16(1228);
+emit_16(1164);
+emit_16(1228);
+emit_16(1163);
+emit_16(1228);
+emit_16(1164);
+emit_16(1229);
+emit_16(1165);
+emit_16(1229);
+emit_16(1164);
+emit_16(1229);
+emit_16(1165);
+emit_16(1230);
+emit_16(1166);
+emit_16(1230);
+emit_16(1165);
+emit_16(1230);
+emit_16(1166);
+emit_16(1231);
+emit_16(1167);
+emit_16(1231);
+emit_16(1166);
+emit_16(1231);
+emit_16(1167);
+emit_16(1232);
+emit_16(1168);
+emit_16(1232);
+emit_16(1167);
+emit_16(1232);
+emit_16(1168);
+emit_16(1233);
+emit_16(1169);
+emit_16(1233);
+emit_16(1168);
+emit_16(1233);
+emit_16(1169);
+emit_16(1234);
+emit_16(1170);
+emit_16(1234);
+emit_16(1169);
+emit_16(1234);
+emit_16(1170);
+emit_16(1235);
+emit_16(1171);
+emit_16(1235);
+emit_16(1170);
+emit_16(1235);
+emit_16(1171);
+emit_16(1236);
+emit_16(1172);
+emit_16(1236);
+emit_16(1171);
+emit_16(1236);
+emit_16(1172);
+emit_16(1237);
+emit_16(1173);
+emit_16(1237);
+emit_16(1172);
+emit_16(1237);
+emit_16(1173);
+emit_16(1238);
+emit_16(1174);
+emit_16(1238);
+emit_16(1173);
+emit_16(1238);
+emit_16(1174);
+emit_16(1239);
+emit_16(1175);
+emit_16(1239);
+emit_16(1174);
+emit_16(1239);
+emit_16(1175);
+emit_16(1240);
+emit_16(1176);
+emit_16(1240);
+emit_16(1175);
+emit_16(1240);
+emit_16(1176);
+emit_16(1241);
+emit_16(1177);
+emit_16(1241);
+emit_16(1176);
+emit_16(1241);
+emit_16(1177);
+emit_16(1242);
+emit_16(1178);
+emit_16(1242);
+emit_16(1177);
+emit_16(1242);
+emit_16(1178);
+emit_16(1243);
+emit_16(1179);
+emit_16(1243);
+emit_16(1178);
+emit_16(1243);
+emit_16(1179);
+emit_16(1244);
+emit_16(1180);
+emit_16(1244);
+emit_16(1179);
+emit_16(1244);
+emit_16(1180);
+emit_16(1245);
+emit_16(1181);
+emit_16(1245);
+emit_16(1180);
+emit_16(1245);
+emit_16(1181);
+emit_16(1246);
+emit_16(1182);
+emit_16(1246);
+emit_16(1181);
+emit_16(1246);
+emit_16(1182);
+emit_16(1247);
+emit_16(1183);
+emit_16(1247);
+emit_16(1182);
+emit_16(1247);
+emit_16(1183);
+emit_16(1248);
+emit_16(1184);
+emit_16(1248);
+emit_16(1183);
+emit_16(1248);
+emit_16(1184);
+emit_16(1249);
+emit_16(1185);
+emit_16(1249);
+emit_16(1184);
+emit_16(1249);
+emit_16(1185);
+emit_16(1250);
+emit_16(1186);
+emit_16(1250);
+emit_16(1185);
+emit_16(1250);
+emit_16(1186);
+emit_16(1251);
+emit_16(1187);
+emit_16(1251);
+emit_16(1186);
+emit_16(1251);
+emit_16(1187);
+emit_16(1252);
+emit_16(1188);
+emit_16(1252);
+emit_16(1187);
+emit_16(1252);
+emit_16(1188);
+emit_16(1253);
+emit_16(1189);
+emit_16(1253);
+emit_16(1188);
+emit_16(1253);
+emit_16(1189);
+emit_16(1254);
+emit_16(1190);
+emit_16(1254);
+emit_16(1189);
+emit_16(1254);
+emit_16(1190);
+emit_16(1255);
+emit_16(1191);
+emit_16(1255);
+emit_16(1190);
+emit_16(1255);
+emit_16(1191);
+emit_16(1256);
+emit_16(1192);
+emit_16(1256);
+emit_16(1191);
+emit_16(1256);
+emit_16(1192);
+emit_16(1257);
+emit_16(1193);
+emit_16(1257);
+emit_16(1192);
+emit_16(1257);
+emit_16(1193);
+emit_16(1258);
+emit_16(1194);
+emit_16(1258);
+emit_16(1193);
+emit_16(1258);
+emit_16(1194);
+emit_16(1259);
+emit_16(1195);
+emit_16(1259);
+emit_16(1194);
+emit_16(1259);
+emit_16(1195);
+emit_16(1260);
+emit_16(1196);
+emit_16(1260);
+emit_16(1195);
+emit_16(1260);
+emit_16(1196);
+emit_16(1261);
+emit_16(1197);
+emit_16(1261);
+emit_16(1196);
+emit_16(1261);
+emit_16(1197);
+emit_16(1262);
+emit_16(1198);
+emit_16(1262);
+emit_16(1197);
+emit_16(1262);
+emit_16(1198);
+emit_16(1263);
+emit_16(1199);
+emit_16(1263);
+emit_16(1198);
+emit_16(1263);
+emit_16(1199);
+emit_16(1264);
+emit_16(1200);
+emit_16(1264);
+emit_16(1199);
+emit_16(1264);
+emit_16(1200);
+emit_16(1265);
+emit_16(1201);
+emit_16(1265);
+emit_16(1200);
+emit_16(1265);
+emit_16(1201);
+emit_16(1266);
+emit_16(1202);
+emit_16(1266);
+emit_16(1201);
+emit_16(1266);
+emit_16(1202);
+emit_16(1267);
+emit_16(1203);
+emit_16(1267);
+emit_16(1202);
+emit_16(1267);
+emit_16(1203);
+emit_16(1268);
+emit_16(1204);
+emit_16(1268);
+emit_16(1203);
+emit_16(1268);
+emit_16(1204);
+emit_16(1269);
+emit_16(1205);
+emit_16(1269);
+emit_16(1204);
+emit_16(1269);
+emit_16(1205);
+emit_16(1270);
+emit_16(1206);
+emit_16(1270);
+emit_16(1205);
+emit_16(1270);
+emit_16(1206);
+emit_16(1271);
+emit_16(1207);
+emit_16(1271);
+emit_16(1206);
+emit_16(1271);
+emit_16(1207);
+emit_16(1272);
+emit_16(1208);
+emit_16(1272);
+emit_16(1207);
+emit_16(1272);
+emit_16(1208);
+emit_16(1273);
+emit_16(1209);
+emit_16(1273);
+emit_16(1208);
+emit_16(1273);
+emit_16(1209);
+emit_16(1274);
+emit_16(1210);
+emit_16(1274);
+emit_16(1209);
+emit_16(1274);
+emit_16(1210);
+emit_16(1275);
+emit_16(1211);
+emit_16(1275);
+emit_16(1210);
+emit_16(1275);
+emit_16(1211);
+emit_16(1276);
+emit_16(1212);
+emit_16(1276);
+emit_16(1211);
+emit_16(1276);
+emit_16(1212);
+emit_16(1277);
+emit_16(1213);
+emit_16(1277);
+emit_16(1212);
+emit_16(1277);
+emit_16(1213);
+emit_16(1278);
+emit_16(1214);
+emit_16(1278);
+emit_16(1213);
+emit_16(1278);
+emit_16(1214);
+emit_16(1279);
+emit_16(1215);
+emit_16(1279);
+emit_16(1214);
+emit_16(1280);
+emit_16(1216);
+emit_16(1281);
+emit_16(1217);
+emit_16(1281);
+emit_16(1216);
+emit_16(1281);
+emit_16(1217);
+emit_16(1282);
+emit_16(1218);
+emit_16(1282);
+emit_16(1217);
+emit_16(1282);
+emit_16(1218);
+emit_16(1283);
+emit_16(1219);
+emit_16(1283);
+emit_16(1218);
+emit_16(1283);
+emit_16(1219);
+emit_16(1284);
+emit_16(1220);
+emit_16(1284);
+emit_16(1219);
+emit_16(1284);
+emit_16(1220);
+emit_16(1285);
+emit_16(1221);
+emit_16(1285);
+emit_16(1220);
+emit_16(1285);
+emit_16(1221);
+emit_16(1286);
+emit_16(1222);
+emit_16(1286);
+emit_16(1221);
+emit_16(1286);
+emit_16(1222);
+emit_16(1287);
+emit_16(1223);
+emit_16(1287);
+emit_16(1222);
+emit_16(1287);
+emit_16(1223);
+emit_16(1288);
+emit_16(1224);
+emit_16(1288);
+emit_16(1223);
+emit_16(1288);
+emit_16(1224);
+emit_16(1289);
+emit_16(1225);
+emit_16(1289);
+emit_16(1224);
+emit_16(1289);
+emit_16(1225);
+emit_16(1290);
+emit_16(1226);
+emit_16(1290);
+emit_16(1225);
+emit_16(1290);
+emit_16(1226);
+emit_16(1291);
+emit_16(1227);
+emit_16(1291);
+emit_16(1226);
+emit_16(1291);
+emit_16(1227);
+emit_16(1292);
+emit_16(1228);
+emit_16(1292);
+emit_16(1227);
+emit_16(1292);
+emit_16(1228);
+emit_16(1293);
+emit_16(1229);
+emit_16(1293);
+emit_16(1228);
+emit_16(1293);
+emit_16(1229);
+emit_16(1294);
+emit_16(1230);
+emit_16(1294);
+emit_16(1229);
+emit_16(1294);
+emit_16(1230);
+emit_16(1295);
+emit_16(1231);
+emit_16(1295);
+emit_16(1230);
+emit_16(1295);
+emit_16(1231);
+emit_16(1296);
+emit_16(1232);
+emit_16(1296);
+emit_16(1231);
+emit_16(1296);
+emit_16(1232);
+emit_16(1297);
+emit_16(1233);
+emit_16(1297);
+emit_16(1232);
+emit_16(1297);
+emit_16(1233);
+emit_16(1298);
+emit_16(1234);
+emit_16(1298);
+emit_16(1233);
+emit_16(1298);
+emit_16(1234);
+emit_16(1299);
+emit_16(1235);
+emit_16(1299);
+emit_16(1234);
+emit_16(1299);
+emit_16(1235);
+emit_16(1300);
+emit_16(1236);
+emit_16(1300);
+emit_16(1235);
+emit_16(1300);
+emit_16(1236);
+emit_16(1301);
+emit_16(1237);
+emit_16(1301);
+emit_16(1236);
+emit_16(1301);
+emit_16(1237);
+emit_16(1302);
+emit_16(1238);
+emit_16(1302);
+emit_16(1237);
+emit_16(1302);
+emit_16(1238);
+emit_16(1303);
+emit_16(1239);
+emit_16(1303);
+emit_16(1238);
+emit_16(1303);
+emit_16(1239);
+emit_16(1304);
+emit_16(1240);
+emit_16(1304);
+emit_16(1239);
+emit_16(1304);
+emit_16(1240);
+emit_16(1305);
+emit_16(1241);
+emit_16(1305);
+emit_16(1240);
+emit_16(1305);
+emit_16(1241);
+emit_16(1306);
+emit_16(1242);
+emit_16(1306);
+emit_16(1241);
+emit_16(1306);
+emit_16(1242);
+emit_16(1307);
+emit_16(1243);
+emit_16(1307);
+emit_16(1242);
+emit_16(1307);
+emit_16(1243);
+emit_16(1308);
+emit_16(1244);
+emit_16(1308);
+emit_16(1243);
+emit_16(1308);
+emit_16(1244);
+emit_16(1309);
+emit_16(1245);
+emit_16(1309);
+emit_16(1244);
+emit_16(1309);
+emit_16(1245);
+emit_16(1310);
+emit_16(1246);
+emit_16(1310);
+emit_16(1245);
+emit_16(1310);
+emit_16(1246);
+emit_16(1311);
+emit_16(1247);
+emit_16(1311);
+emit_16(1246);
+emit_16(1311);
+emit_16(1247);
+emit_16(1312);
+emit_16(1248);
+emit_16(1312);
+emit_16(1247);
+emit_16(1312);
+emit_16(1248);
+emit_16(1313);
+emit_16(1249);
+emit_16(1313);
+emit_16(1248);
+emit_16(1313);
+emit_16(1249);
+emit_16(1314);
+emit_16(1250);
+emit_16(1314);
+emit_16(1249);
+emit_16(1314);
+emit_16(1250);
+emit_16(1315);
+emit_16(1251);
+emit_16(1315);
+emit_16(1250);
+emit_16(1315);
+emit_16(1251);
+emit_16(1316);
+emit_16(1252);
+emit_16(1316);
+emit_16(1251);
+emit_16(1316);
+emit_16(1252);
+emit_16(1317);
+emit_16(1253);
+emit_16(1317);
+emit_16(1252);
+emit_16(1317);
+emit_16(1253);
+emit_16(1318);
+emit_16(1254);
+emit_16(1318);
+emit_16(1253);
+emit_16(1318);
+emit_16(1254);
+emit_16(1319);
+emit_16(1255);
+emit_16(1319);
+emit_16(1254);
+emit_16(1319);
+emit_16(1255);
+emit_16(1320);
+emit_16(1256);
+emit_16(1320);
+emit_16(1255);
+emit_16(1320);
+emit_16(1256);
+emit_16(1321);
+emit_16(1257);
+emit_16(1321);
+emit_16(1256);
+emit_16(1321);
+emit_16(1257);
+emit_16(1322);
+emit_16(1258);
+emit_16(1322);
+emit_16(1257);
+emit_16(1322);
+emit_16(1258);
+emit_16(1323);
+emit_16(1259);
+emit_16(1323);
+emit_16(1258);
+emit_16(1323);
+emit_16(1259);
+emit_16(1324);
+emit_16(1260);
+emit_16(1324);
+emit_16(1259);
+emit_16(1324);
+emit_16(1260);
+emit_16(1325);
+emit_16(1261);
+emit_16(1325);
+emit_16(1260);
+emit_16(1325);
+emit_16(1261);
+emit_16(1326);
+emit_16(1262);
+emit_16(1326);
+emit_16(1261);
+emit_16(1326);
+emit_16(1262);
+emit_16(1327);
+emit_16(1263);
+emit_16(1327);
+emit_16(1262);
+emit_16(1327);
+emit_16(1263);
+emit_16(1328);
+emit_16(1264);
+emit_16(1328);
+emit_16(1263);
+emit_16(1328);
+emit_16(1264);
+emit_16(1329);
+emit_16(1265);
+emit_16(1329);
+emit_16(1264);
+emit_16(1329);
+emit_16(1265);
+emit_16(1330);
+emit_16(1266);
+emit_16(1330);
+emit_16(1265);
+emit_16(1330);
+emit_16(1266);
+emit_16(1331);
+emit_16(1267);
+emit_16(1331);
+emit_16(1266);
+emit_16(1331);
+emit_16(1267);
+emit_16(1332);
+emit_16(1268);
+emit_16(1332);
+emit_16(1267);
+emit_16(1332);
+emit_16(1268);
+emit_16(1333);
+emit_16(1269);
+emit_16(1333);
+emit_16(1268);
+emit_16(1333);
+emit_16(1269);
+emit_16(1334);
+emit_16(1270);
+emit_16(1334);
+emit_16(1269);
+emit_16(1334);
+emit_16(1270);
+emit_16(1335);
+emit_16(1271);
+emit_16(1335);
+emit_16(1270);
+emit_16(1335);
+emit_16(1271);
+emit_16(1336);
+emit_16(1272);
+emit_16(1336);
+emit_16(1271);
+emit_16(1336);
+emit_16(1272);
+emit_16(1337);
+emit_16(1273);
+emit_16(1337);
+emit_16(1272);
+emit_16(1337);
+emit_16(1273);
+emit_16(1338);
+emit_16(1274);
+emit_16(1338);
+emit_16(1273);
+emit_16(1338);
+emit_16(1274);
+emit_16(1339);
+emit_16(1275);
+emit_16(1339);
+emit_16(1274);
+emit_16(1339);
+emit_16(1275);
+emit_16(1340);
+emit_16(1276);
+emit_16(1340);
+emit_16(1275);
+emit_16(1340);
+emit_16(1276);
+emit_16(1341);
+emit_16(1277);
+emit_16(1341);
+emit_16(1276);
+emit_16(1341);
+emit_16(1277);
+emit_16(1342);
+emit_16(1278);
+emit_16(1342);
+emit_16(1277);
+emit_16(1342);
+emit_16(1278);
+emit_16(1343);
+emit_16(1279);
+emit_16(1343);
+emit_16(1278);
+emit_16(1344);
+emit_16(1280);
+emit_16(1345);
+emit_16(1281);
+emit_16(1345);
+emit_16(1280);
+emit_16(1345);
+emit_16(1281);
+emit_16(1346);
+emit_16(1282);
+emit_16(1346);
+emit_16(1281);
+emit_16(1346);
+emit_16(1282);
+emit_16(1347);
+emit_16(1283);
+emit_16(1347);
+emit_16(1282);
+emit_16(1347);
+emit_16(1283);
+emit_16(1348);
+emit_16(1284);
+emit_16(1348);
+emit_16(1283);
+emit_16(1348);
+emit_16(1284);
+emit_16(1349);
+emit_16(1285);
+emit_16(1349);
+emit_16(1284);
+emit_16(1349);
+emit_16(1285);
+emit_16(1350);
+emit_16(1286);
+emit_16(1350);
+emit_16(1285);
+emit_16(1350);
+emit_16(1286);
+emit_16(1351);
+emit_16(1287);
+emit_16(1351);
+emit_16(1286);
+emit_16(1351);
+emit_16(1287);
+emit_16(1352);
+emit_16(1288);
+emit_16(1352);
+emit_16(1287);
+emit_16(1352);
+emit_16(1288);
+emit_16(1353);
+emit_16(1289);
+emit_16(1353);
+emit_16(1288);
+emit_16(1353);
+emit_16(1289);
+emit_16(1354);
+emit_16(1290);
+emit_16(1354);
+emit_16(1289);
+emit_16(1354);
+emit_16(1290);
+emit_16(1355);
+emit_16(1291);
+emit_16(1355);
+emit_16(1290);
+emit_16(1355);
+emit_16(1291);
+emit_16(1356);
+emit_16(1292);
+emit_16(1356);
+emit_16(1291);
+emit_16(1356);
+emit_16(1292);
+emit_16(1357);
+emit_16(1293);
+emit_16(1357);
+emit_16(1292);
+emit_16(1357);
+emit_16(1293);
+emit_16(1358);
+emit_16(1294);
+emit_16(1358);
+emit_16(1293);
+emit_16(1358);
+emit_16(1294);
+emit_16(1359);
+emit_16(1295);
+emit_16(1359);
+emit_16(1294);
+emit_16(1359);
+emit_16(1295);
+emit_16(1360);
+emit_16(1296);
+emit_16(1360);
+emit_16(1295);
+emit_16(1360);
+emit_16(1296);
+emit_16(1361);
+emit_16(1297);
+emit_16(1361);
+emit_16(1296);
+emit_16(1361);
+emit_16(1297);
+emit_16(1362);
+emit_16(1298);
+emit_16(1362);
+emit_16(1297);
+emit_16(1362);
+emit_16(1298);
+emit_16(1363);
+emit_16(1299);
+emit_16(1363);
+emit_16(1298);
+emit_16(1363);
+emit_16(1299);
+emit_16(1364);
+emit_16(1300);
+emit_16(1364);
+emit_16(1299);
+emit_16(1364);
+emit_16(1300);
+emit_16(1365);
+emit_16(1301);
+emit_16(1365);
+emit_16(1300);
+emit_16(1365);
+emit_16(1301);
+emit_16(1366);
+emit_16(1302);
+emit_16(1366);
+emit_16(1301);
+emit_16(1366);
+emit_16(1302);
+emit_16(1367);
+emit_16(1303);
+emit_16(1367);
+emit_16(1302);
+emit_16(1367);
+emit_16(1303);
+emit_16(1368);
+emit_16(1304);
+emit_16(1368);
+emit_16(1303);
+emit_16(1368);
+emit_16(1304);
+emit_16(1369);
+emit_16(1305);
+emit_16(1369);
+emit_16(1304);
+emit_16(1369);
+emit_16(1305);
+emit_16(1370);
+emit_16(1306);
+emit_16(1370);
+emit_16(1305);
+emit_16(1370);
+emit_16(1306);
+emit_16(1371);
+emit_16(1307);
+emit_16(1371);
+emit_16(1306);
+emit_16(1371);
+emit_16(1307);
+emit_16(1372);
+emit_16(1308);
+emit_16(1372);
+emit_16(1307);
+emit_16(1372);
+emit_16(1308);
+emit_16(1373);
+emit_16(1309);
+emit_16(1373);
+emit_16(1308);
+emit_16(1373);
+emit_16(1309);
+emit_16(1374);
+emit_16(1310);
+emit_16(1374);
+emit_16(1309);
+emit_16(1374);
+emit_16(1310);
+emit_16(1375);
+emit_16(1311);
+emit_16(1375);
+emit_16(1310);
+emit_16(1375);
+emit_16(1311);
+emit_16(1376);
+emit_16(1312);
+emit_16(1376);
+emit_16(1311);
+emit_16(1376);
+emit_16(1312);
+emit_16(1377);
+emit_16(1313);
+emit_16(1377);
+emit_16(1312);
+emit_16(1377);
+emit_16(1313);
+emit_16(1378);
+emit_16(1314);
+emit_16(1378);
+emit_16(1313);
+emit_16(1378);
+emit_16(1314);
+emit_16(1379);
+emit_16(1315);
+emit_16(1379);
+emit_16(1314);
+emit_16(1379);
+emit_16(1315);
+emit_16(1380);
+emit_16(1316);
+emit_16(1380);
+emit_16(1315);
+emit_16(1380);
+emit_16(1316);
+emit_16(1381);
+emit_16(1317);
+emit_16(1381);
+emit_16(1316);
+emit_16(1381);
+emit_16(1317);
+emit_16(1382);
+emit_16(1318);
+emit_16(1382);
+emit_16(1317);
+emit_16(1382);
+emit_16(1318);
+emit_16(1383);
+emit_16(1319);
+emit_16(1383);
+emit_16(1318);
+emit_16(1383);
+emit_16(1319);
+emit_16(1384);
+emit_16(1320);
+emit_16(1384);
+emit_16(1319);
+emit_16(1384);
+emit_16(1320);
+emit_16(1385);
+emit_16(1321);
+emit_16(1385);
+emit_16(1320);
+emit_16(1385);
+emit_16(1321);
+emit_16(1386);
+emit_16(1322);
+emit_16(1386);
+emit_16(1321);
+emit_16(1386);
+emit_16(1322);
+emit_16(1387);
+emit_16(1323);
+emit_16(1387);
+emit_16(1322);
+emit_16(1387);
+emit_16(1323);
+emit_16(1388);
+emit_16(1324);
+emit_16(1388);
+emit_16(1323);
+emit_16(1388);
+emit_16(1324);
+emit_16(1389);
+emit_16(1325);
+emit_16(1389);
+emit_16(1324);
+emit_16(1389);
+emit_16(1325);
+emit_16(1390);
+emit_16(1326);
+emit_16(1390);
+emit_16(1325);
+emit_16(1390);
+emit_16(1326);
+emit_16(1391);
+emit_16(1327);
+emit_16(1391);
+emit_16(1326);
+emit_16(1391);
+emit_16(1327);
+emit_16(1392);
+emit_16(1328);
+emit_16(1392);
+emit_16(1327);
+emit_16(1392);
+emit_16(1328);
+emit_16(1393);
+emit_16(1329);
+emit_16(1393);
+emit_16(1328);
+emit_16(1393);
+emit_16(1329);
+emit_16(1394);
+emit_16(1330);
+emit_16(1394);
+emit_16(1329);
+emit_16(1394);
+emit_16(1330);
+emit_16(1395);
+emit_16(1331);
+emit_16(1395);
+emit_16(1330);
+emit_16(1395);
+emit_16(1331);
+emit_16(1396);
+emit_16(1332);
+emit_16(1396);
+emit_16(1331);
+emit_16(1396);
+emit_16(1332);
+emit_16(1397);
+emit_16(1333);
+emit_16(1397);
+emit_16(1332);
+emit_16(1397);
+emit_16(1333);
+emit_16(1398);
+emit_16(1334);
+emit_16(1398);
+emit_16(1333);
+emit_16(1398);
+emit_16(1334);
+emit_16(1399);
+emit_16(1335);
+emit_16(1399);
+emit_16(1334);
+emit_16(1399);
+emit_16(1335);
+emit_16(1400);
+emit_16(1336);
+emit_16(1400);
+emit_16(1335);
+emit_16(1400);
+emit_16(1336);
+emit_16(1401);
+emit_16(1337);
+emit_16(1401);
+emit_16(1336);
+emit_16(1401);
+emit_16(1337);
+emit_16(1402);
+emit_16(1338);
+emit_16(1402);
+emit_16(1337);
+emit_16(1402);
+emit_16(1338);
+emit_16(1403);
+emit_16(1339);
+emit_16(1403);
+emit_16(1338);
+emit_16(1403);
+emit_16(1339);
+emit_16(1404);
+emit_16(1340);
+emit_16(1404);
+emit_16(1339);
+emit_16(1404);
+emit_16(1340);
+emit_16(1405);
+emit_16(1341);
+emit_16(1405);
+emit_16(1340);
+emit_16(1405);
+emit_16(1341);
+emit_16(1406);
+emit_16(1342);
+emit_16(1406);
+emit_16(1341);
+emit_16(1406);
+emit_16(1342);
+emit_16(1407);
+emit_16(1343);
+emit_16(1407);
+emit_16(1342);
+emit_16(1408);
+emit_16(1344);
+emit_16(1409);
+emit_16(1345);
+emit_16(1409);
+emit_16(1344);
+emit_16(1409);
+emit_16(1345);
+emit_16(1410);
+emit_16(1346);
+emit_16(1410);
+emit_16(1345);
+emit_16(1410);
+emit_16(1346);
+emit_16(1411);
+emit_16(1347);
+emit_16(1411);
+emit_16(1346);
+emit_16(1411);
+emit_16(1347);
+emit_16(1412);
+emit_16(1348);
+emit_16(1412);
+emit_16(1347);
+emit_16(1412);
+emit_16(1348);
+emit_16(1413);
+emit_16(1349);
+emit_16(1413);
+emit_16(1348);
+emit_16(1413);
+emit_16(1349);
+emit_16(1414);
+emit_16(1350);
+emit_16(1414);
+emit_16(1349);
+emit_16(1414);
+emit_16(1350);
+emit_16(1415);
+emit_16(1351);
+emit_16(1415);
+emit_16(1350);
+emit_16(1415);
+emit_16(1351);
+emit_16(1416);
+emit_16(1352);
+emit_16(1416);
+emit_16(1351);
+emit_16(1416);
+emit_16(1352);
+emit_16(1417);
+emit_16(1353);
+emit_16(1417);
+emit_16(1352);
+emit_16(1417);
+emit_16(1353);
+emit_16(1418);
+emit_16(1354);
+emit_16(1418);
+emit_16(1353);
+emit_16(1418);
+emit_16(1354);
+emit_16(1419);
+emit_16(1355);
+emit_16(1419);
+emit_16(1354);
+emit_16(1419);
+emit_16(1355);
+emit_16(1420);
+emit_16(1356);
+emit_16(1420);
+emit_16(1355);
+emit_16(1420);
+emit_16(1356);
+emit_16(1421);
+emit_16(1357);
+emit_16(1421);
+emit_16(1356);
+emit_16(1421);
+emit_16(1357);
+emit_16(1422);
+emit_16(1358);
+emit_16(1422);
+emit_16(1357);
+emit_16(1422);
+emit_16(1358);
+emit_16(1423);
+emit_16(1359);
+emit_16(1423);
+emit_16(1358);
+emit_16(1423);
+emit_16(1359);
+emit_16(1424);
+emit_16(1360);
+emit_16(1424);
+emit_16(1359);
+emit_16(1424);
+emit_16(1360);
+emit_16(1425);
+emit_16(1361);
+emit_16(1425);
+emit_16(1360);
+emit_16(1425);
+emit_16(1361);
+emit_16(1426);
+emit_16(1362);
+emit_16(1426);
+emit_16(1361);
+emit_16(1426);
+emit_16(1362);
+emit_16(1427);
+emit_16(1363);
+emit_16(1427);
+emit_16(1362);
+emit_16(1427);
+emit_16(1363);
+emit_16(1428);
+emit_16(1364);
+emit_16(1428);
+emit_16(1363);
+emit_16(1428);
+emit_16(1364);
+emit_16(1429);
+emit_16(1365);
+emit_16(1429);
+emit_16(1364);
+emit_16(1429);
+emit_16(1365);
+emit_16(1430);
+emit_16(1366);
+emit_16(1430);
+emit_16(1365);
+emit_16(1430);
+emit_16(1366);
+emit_16(1431);
+emit_16(1367);
+emit_16(1431);
+emit_16(1366);
+emit_16(1431);
+emit_16(1367);
+emit_16(1432);
+emit_16(1368);
+emit_16(1432);
+emit_16(1367);
+emit_16(1432);
+emit_16(1368);
+emit_16(1433);
+emit_16(1369);
+emit_16(1433);
+emit_16(1368);
+emit_16(1433);
+emit_16(1369);
+emit_16(1434);
+emit_16(1370);
+emit_16(1434);
+emit_16(1369);
+emit_16(1434);
+emit_16(1370);
+emit_16(1435);
+emit_16(1371);
+emit_16(1435);
+emit_16(1370);
+emit_16(1435);
+emit_16(1371);
+emit_16(1436);
+emit_16(1372);
+emit_16(1436);
+emit_16(1371);
+emit_16(1436);
+emit_16(1372);
+emit_16(1437);
+emit_16(1373);
+emit_16(1437);
+emit_16(1372);
+emit_16(1437);
+emit_16(1373);
+emit_16(1438);
+emit_16(1374);
+emit_16(1438);
+emit_16(1373);
+emit_16(1438);
+emit_16(1374);
+emit_16(1439);
+emit_16(1375);
+emit_16(1439);
+emit_16(1374);
+emit_16(1439);
+emit_16(1375);
+emit_16(1440);
+emit_16(1376);
+emit_16(1440);
+emit_16(1375);
+emit_16(1440);
+emit_16(1376);
+emit_16(1441);
+emit_16(1377);
+emit_16(1441);
+emit_16(1376);
+emit_16(1441);
+emit_16(1377);
+emit_16(1442);
+emit_16(1378);
+emit_16(1442);
+emit_16(1377);
+emit_16(1442);
+emit_16(1378);
+emit_16(1443);
+emit_16(1379);
+emit_16(1443);
+emit_16(1378);
+emit_16(1443);
+emit_16(1379);
+emit_16(1444);
+emit_16(1380);
+emit_16(1444);
+emit_16(1379);
+emit_16(1444);
+emit_16(1380);
+emit_16(1445);
+emit_16(1381);
+emit_16(1445);
+emit_16(1380);
+emit_16(1445);
+emit_16(1381);
+emit_16(1446);
+emit_16(1382);
+emit_16(1446);
+emit_16(1381);
+emit_16(1446);
+emit_16(1382);
+emit_16(1447);
+emit_16(1383);
+emit_16(1447);
+emit_16(1382);
+emit_16(1447);
+emit_16(1383);
+emit_16(1448);
+emit_16(1384);
+emit_16(1448);
+emit_16(1383);
+emit_16(1448);
+emit_16(1384);
+emit_16(1449);
+emit_16(1385);
+emit_16(1449);
+emit_16(1384);
+emit_16(1449);
+emit_16(1385);
+emit_16(1450);
+emit_16(1386);
+emit_16(1450);
+emit_16(1385);
+emit_16(1450);
+emit_16(1386);
+emit_16(1451);
+emit_16(1387);
+emit_16(1451);
+emit_16(1386);
+emit_16(1451);
+emit_16(1387);
+emit_16(1452);
+emit_16(1388);
+emit_16(1452);
+emit_16(1387);
+emit_16(1452);
+emit_16(1388);
+emit_16(1453);
+emit_16(1389);
+emit_16(1453);
+emit_16(1388);
+emit_16(1453);
+emit_16(1389);
+emit_16(1454);
+emit_16(1390);
+emit_16(1454);
+emit_16(1389);
+emit_16(1454);
+emit_16(1390);
+emit_16(1455);
+emit_16(1391);
+emit_16(1455);
+emit_16(1390);
+emit_16(1455);
+emit_16(1391);
+emit_16(1456);
+emit_16(1392);
+emit_16(1456);
+emit_16(1391);
+emit_16(1456);
+emit_16(1392);
+emit_16(1457);
+emit_16(1393);
+emit_16(1457);
+emit_16(1392);
+emit_16(1457);
+emit_16(1393);
+emit_16(1458);
+emit_16(1394);
+emit_16(1458);
+emit_16(1393);
+emit_16(1458);
+emit_16(1394);
+emit_16(1459);
+emit_16(1395);
+emit_16(1459);
+emit_16(1394);
+emit_16(1459);
+emit_16(1395);
+emit_16(1460);
+emit_16(1396);
+emit_16(1460);
+emit_16(1395);
+emit_16(1460);
+emit_16(1396);
+emit_16(1461);
+emit_16(1397);
+emit_16(1461);
+emit_16(1396);
+emit_16(1461);
+emit_16(1397);
+emit_16(1462);
+emit_16(1398);
+emit_16(1462);
+emit_16(1397);
+emit_16(1462);
+emit_16(1398);
+emit_16(1463);
+emit_16(1399);
+emit_16(1463);
+emit_16(1398);
+emit_16(1463);
+emit_16(1399);
+emit_16(1464);
+emit_16(1400);
+emit_16(1464);
+emit_16(1399);
+emit_16(1464);
+emit_16(1400);
+emit_16(1465);
+emit_16(1401);
+emit_16(1465);
+emit_16(1400);
+emit_16(1465);
+emit_16(1401);
+emit_16(1466);
+emit_16(1402);
+emit_16(1466);
+emit_16(1401);
+emit_16(1466);
+emit_16(1402);
+emit_16(1467);
+emit_16(1403);
+emit_16(1467);
+emit_16(1402);
+emit_16(1467);
+emit_16(1403);
+emit_16(1468);
+emit_16(1404);
+emit_16(1468);
+emit_16(1403);
+emit_16(1468);
+emit_16(1404);
+emit_16(1469);
+emit_16(1405);
+emit_16(1469);
+emit_16(1404);
+emit_16(1469);
+emit_16(1405);
+emit_16(1470);
+emit_16(1406);
+emit_16(1470);
+emit_16(1405);
+emit_16(1470);
+emit_16(1406);
+emit_16(1471);
+emit_16(1407);
+emit_16(1471);
+emit_16(1406);
+emit_16(1472);
+emit_16(1408);
+emit_16(1473);
+emit_16(1409);
+emit_16(1473);
+emit_16(1408);
+emit_16(1473);
+emit_16(1409);
+emit_16(1474);
+emit_16(1410);
+emit_16(1474);
+emit_16(1409);
+emit_16(1474);
+emit_16(1410);
+emit_16(1475);
+emit_16(1411);
+emit_16(1475);
+emit_16(1410);
+emit_16(1475);
+emit_16(1411);
+emit_16(1476);
+emit_16(1412);
+emit_16(1476);
+emit_16(1411);
+emit_16(1476);
+emit_16(1412);
+emit_16(1477);
+emit_16(1413);
+emit_16(1477);
+emit_16(1412);
+emit_16(1477);
+emit_16(1413);
+emit_16(1478);
+emit_16(1414);
+emit_16(1478);
+emit_16(1413);
+emit_16(1478);
+emit_16(1414);
+emit_16(1479);
+emit_16(1415);
+emit_16(1479);
+emit_16(1414);
+emit_16(1479);
+emit_16(1415);
+emit_16(1480);
+emit_16(1416);
+emit_16(1480);
+emit_16(1415);
+emit_16(1480);
+emit_16(1416);
+emit_16(1481);
+emit_16(1417);
+emit_16(1481);
+emit_16(1416);
+emit_16(1481);
+emit_16(1417);
+emit_16(1482);
+emit_16(1418);
+emit_16(1482);
+emit_16(1417);
+emit_16(1482);
+emit_16(1418);
+emit_16(1483);
+emit_16(1419);
+emit_16(1483);
+emit_16(1418);
+emit_16(1483);
+emit_16(1419);
+emit_16(1484);
+emit_16(1420);
+emit_16(1484);
+emit_16(1419);
+emit_16(1484);
+emit_16(1420);
+emit_16(1485);
+emit_16(1421);
+emit_16(1485);
+emit_16(1420);
+emit_16(1485);
+emit_16(1421);
+emit_16(1486);
+emit_16(1422);
+emit_16(1486);
+emit_16(1421);
+emit_16(1486);
+emit_16(1422);
+emit_16(1487);
+emit_16(1423);
+emit_16(1487);
+emit_16(1422);
+emit_16(1487);
+emit_16(1423);
+emit_16(1488);
+emit_16(1424);
+emit_16(1488);
+emit_16(1423);
+emit_16(1488);
+emit_16(1424);
+emit_16(1489);
+emit_16(1425);
+emit_16(1489);
+emit_16(1424);
+emit_16(1489);
+emit_16(1425);
+emit_16(1490);
+emit_16(1426);
+emit_16(1490);
+emit_16(1425);
+emit_16(1490);
+emit_16(1426);
+emit_16(1491);
+emit_16(1427);
+emit_16(1491);
+emit_16(1426);
+emit_16(1491);
+emit_16(1427);
+emit_16(1492);
+emit_16(1428);
+emit_16(1492);
+emit_16(1427);
+emit_16(1492);
+emit_16(1428);
+emit_16(1493);
+emit_16(1429);
+emit_16(1493);
+emit_16(1428);
+emit_16(1493);
+emit_16(1429);
+emit_16(1494);
+emit_16(1430);
+emit_16(1494);
+emit_16(1429);
+emit_16(1494);
+emit_16(1430);
+emit_16(1495);
+emit_16(1431);
+emit_16(1495);
+emit_16(1430);
+emit_16(1495);
+emit_16(1431);
+emit_16(1496);
+emit_16(1432);
+emit_16(1496);
+emit_16(1431);
+emit_16(1496);
+emit_16(1432);
+emit_16(1497);
+emit_16(1433);
+emit_16(1497);
+emit_16(1432);
+emit_16(1497);
+emit_16(1433);
+emit_16(1498);
+emit_16(1434);
+emit_16(1498);
+emit_16(1433);
+emit_16(1498);
+emit_16(1434);
+emit_16(1499);
+emit_16(1435);
+emit_16(1499);
+emit_16(1434);
+emit_16(1499);
+emit_16(1435);
+emit_16(1500);
+emit_16(1436);
+emit_16(1500);
+emit_16(1435);
+emit_16(1500);
+emit_16(1436);
+emit_16(1501);
+emit_16(1437);
+emit_16(1501);
+emit_16(1436);
+emit_16(1501);
+emit_16(1437);
+emit_16(1502);
+emit_16(1438);
+emit_16(1502);
+emit_16(1437);
+emit_16(1502);
+emit_16(1438);
+emit_16(1503);
+emit_16(1439);
+emit_16(1503);
+emit_16(1438);
+emit_16(1503);
+emit_16(1439);
+emit_16(1504);
+emit_16(1440);
+emit_16(1504);
+emit_16(1439);
+emit_16(1504);
+emit_16(1440);
+emit_16(1505);
+emit_16(1441);
+emit_16(1505);
+emit_16(1440);
+emit_16(1505);
+emit_16(1441);
+emit_16(1506);
+emit_16(1442);
+emit_16(1506);
+emit_16(1441);
+emit_16(1506);
+emit_16(1442);
+emit_16(1507);
+emit_16(1443);
+emit_16(1507);
+emit_16(1442);
+emit_16(1507);
+emit_16(1443);
+emit_16(1508);
+emit_16(1444);
+emit_16(1508);
+emit_16(1443);
+emit_16(1508);
+emit_16(1444);
+emit_16(1509);
+emit_16(1445);
+emit_16(1509);
+emit_16(1444);
+emit_16(1509);
+emit_16(1445);
+emit_16(1510);
+emit_16(1446);
+emit_16(1510);
+emit_16(1445);
+emit_16(1510);
+emit_16(1446);
+emit_16(1511);
+emit_16(1447);
+emit_16(1511);
+emit_16(1446);
+emit_16(1511);
+emit_16(1447);
+emit_16(1512);
+emit_16(1448);
+emit_16(1512);
+emit_16(1447);
+emit_16(1512);
+emit_16(1448);
+emit_16(1513);
+emit_16(1449);
+emit_16(1513);
+emit_16(1448);
+emit_16(1513);
+emit_16(1449);
+emit_16(1514);
+emit_16(1450);
+emit_16(1514);
+emit_16(1449);
+emit_16(1514);
+emit_16(1450);
+emit_16(1515);
+emit_16(1451);
+emit_16(1515);
+emit_16(1450);
+emit_16(1515);
+emit_16(1451);
+emit_16(1516);
+emit_16(1452);
+emit_16(1516);
+emit_16(1451);
+emit_16(1516);
+emit_16(1452);
+emit_16(1517);
+emit_16(1453);
+emit_16(1517);
+emit_16(1452);
+emit_16(1517);
+emit_16(1453);
+emit_16(1518);
+emit_16(1454);
+emit_16(1518);
+emit_16(1453);
+emit_16(1518);
+emit_16(1454);
+emit_16(1519);
+emit_16(1455);
+emit_16(1519);
+emit_16(1454);
+emit_16(1519);
+emit_16(1455);
+emit_16(1520);
+emit_16(1456);
+emit_16(1520);
+emit_16(1455);
+emit_16(1520);
+emit_16(1456);
+emit_16(1521);
+emit_16(1457);
+emit_16(1521);
+emit_16(1456);
+emit_16(1521);
+emit_16(1457);
+emit_16(1522);
+emit_16(1458);
+emit_16(1522);
+emit_16(1457);
+emit_16(1522);
+emit_16(1458);
+emit_16(1523);
+emit_16(1459);
+emit_16(1523);
+emit_16(1458);
+emit_16(1523);
+emit_16(1459);
+emit_16(1524);
+emit_16(1460);
+emit_16(1524);
+emit_16(1459);
+emit_16(1524);
+emit_16(1460);
+emit_16(1525);
+emit_16(1461);
+emit_16(1525);
+emit_16(1460);
+emit_16(1525);
+emit_16(1461);
+emit_16(1526);
+emit_16(1462);
+emit_16(1526);
+emit_16(1461);
+emit_16(1526);
+emit_16(1462);
+emit_16(1527);
+emit_16(1463);
+emit_16(1527);
+emit_16(1462);
+emit_16(1527);
+emit_16(1463);
+emit_16(1528);
+emit_16(1464);
+emit_16(1528);
+emit_16(1463);
+emit_16(1528);
+emit_16(1464);
+emit_16(1529);
+emit_16(1465);
+emit_16(1529);
+emit_16(1464);
+emit_16(1529);
+emit_16(1465);
+emit_16(1530);
+emit_16(1466);
+emit_16(1530);
+emit_16(1465);
+emit_16(1530);
+emit_16(1466);
+emit_16(1531);
+emit_16(1467);
+emit_16(1531);
+emit_16(1466);
+emit_16(1531);
+emit_16(1467);
+emit_16(1532);
+emit_16(1468);
+emit_16(1532);
+emit_16(1467);
+emit_16(1532);
+emit_16(1468);
+emit_16(1533);
+emit_16(1469);
+emit_16(1533);
+emit_16(1468);
+emit_16(1533);
+emit_16(1469);
+emit_16(1534);
+emit_16(1470);
+emit_16(1534);
+emit_16(1469);
+emit_16(1534);
+emit_16(1470);
+emit_16(1535);
+emit_16(1471);
+emit_16(1535);
+emit_16(1470);
+emit_16(1536);
+emit_16(1472);
+emit_16(1537);
+emit_16(1473);
+emit_16(1537);
+emit_16(1472);
+emit_16(1537);
+emit_16(1473);
+emit_16(1538);
+emit_16(1474);
+emit_16(1538);
+emit_16(1473);
+emit_16(1538);
+emit_16(1474);
+emit_16(1539);
+emit_16(1475);
+emit_16(1539);
+emit_16(1474);
+emit_16(1539);
+emit_16(1475);
+emit_16(1540);
+emit_16(1476);
+emit_16(1540);
+emit_16(1475);
+emit_16(1540);
+emit_16(1476);
+emit_16(1541);
+emit_16(1477);
+emit_16(1541);
+emit_16(1476);
+emit_16(1541);
+emit_16(1477);
+emit_16(1542);
+emit_16(1478);
+emit_16(1542);
+emit_16(1477);
+emit_16(1542);
+emit_16(1478);
+emit_16(1543);
+emit_16(1479);
+emit_16(1543);
+emit_16(1478);
+emit_16(1543);
+emit_16(1479);
+emit_16(1544);
+emit_16(1480);
+emit_16(1544);
+emit_16(1479);
+emit_16(1544);
+emit_16(1480);
+emit_16(1545);
+emit_16(1481);
+emit_16(1545);
+emit_16(1480);
+emit_16(1545);
+emit_16(1481);
+emit_16(1546);
+emit_16(1482);
+emit_16(1546);
+emit_16(1481);
+emit_16(1546);
+emit_16(1482);
+emit_16(1547);
+emit_16(1483);
+emit_16(1547);
+emit_16(1482);
+emit_16(1547);
+emit_16(1483);
+emit_16(1548);
+emit_16(1484);
+emit_16(1548);
+emit_16(1483);
+emit_16(1548);
+emit_16(1484);
+emit_16(1549);
+emit_16(1485);
+emit_16(1549);
+emit_16(1484);
+emit_16(1549);
+emit_16(1485);
+emit_16(1550);
+emit_16(1486);
+emit_16(1550);
+emit_16(1485);
+emit_16(1550);
+emit_16(1486);
+emit_16(1551);
+emit_16(1487);
+emit_16(1551);
+emit_16(1486);
+emit_16(1551);
+emit_16(1487);
+emit_16(1552);
+emit_16(1488);
+emit_16(1552);
+emit_16(1487);
+emit_16(1552);
+emit_16(1488);
+emit_16(1553);
+emit_16(1489);
+emit_16(1553);
+emit_16(1488);
+emit_16(1553);
+emit_16(1489);
+emit_16(1554);
+emit_16(1490);
+emit_16(1554);
+emit_16(1489);
+emit_16(1554);
+emit_16(1490);
+emit_16(1555);
+emit_16(1491);
+emit_16(1555);
+emit_16(1490);
+emit_16(1555);
+emit_16(1491);
+emit_16(1556);
+emit_16(1492);
+emit_16(1556);
+emit_16(1491);
+emit_16(1556);
+emit_16(1492);
+emit_16(1557);
+emit_16(1493);
+emit_16(1557);
+emit_16(1492);
+emit_16(1557);
+emit_16(1493);
+emit_16(1558);
+emit_16(1494);
+emit_16(1558);
+emit_16(1493);
+emit_16(1558);
+emit_16(1494);
+emit_16(1559);
+emit_16(1495);
+emit_16(1559);
+emit_16(1494);
+emit_16(1559);
+emit_16(1495);
+emit_16(1560);
+emit_16(1496);
+emit_16(1560);
+emit_16(1495);
+emit_16(1560);
+emit_16(1496);
+emit_16(1561);
+emit_16(1497);
+emit_16(1561);
+emit_16(1496);
+emit_16(1561);
+emit_16(1497);
+emit_16(1562);
+emit_16(1498);
+emit_16(1562);
+emit_16(1497);
+emit_16(1562);
+emit_16(1498);
+emit_16(1563);
+emit_16(1499);
+emit_16(1563);
+emit_16(1498);
+emit_16(1563);
+emit_16(1499);
+emit_16(1564);
+emit_16(1500);
+emit_16(1564);
+emit_16(1499);
+emit_16(1564);
+emit_16(1500);
+emit_16(1565);
+emit_16(1501);
+emit_16(1565);
+emit_16(1500);
+emit_16(1565);
+emit_16(1501);
+emit_16(1566);
+emit_16(1502);
+emit_16(1566);
+emit_16(1501);
+emit_16(1566);
+emit_16(1502);
+emit_16(1567);
+emit_16(1503);
+emit_16(1567);
+emit_16(1502);
+emit_16(1567);
+emit_16(1503);
+emit_16(1568);
+emit_16(1504);
+emit_16(1568);
+emit_16(1503);
+emit_16(1568);
+emit_16(1504);
+emit_16(1569);
+emit_16(1505);
+emit_16(1569);
+emit_16(1504);
+emit_16(1569);
+emit_16(1505);
+emit_16(1570);
+emit_16(1506);
+emit_16(1570);
+emit_16(1505);
+emit_16(1570);
+emit_16(1506);
+emit_16(1571);
+emit_16(1507);
+emit_16(1571);
+emit_16(1506);
+emit_16(1571);
+emit_16(1507);
+emit_16(1572);
+emit_16(1508);
+emit_16(1572);
+emit_16(1507);
+emit_16(1572);
+emit_16(1508);
+emit_16(1573);
+emit_16(1509);
+emit_16(1573);
+emit_16(1508);
+emit_16(1573);
+emit_16(1509);
+emit_16(1574);
+emit_16(1510);
+emit_16(1574);
+emit_16(1509);
+emit_16(1574);
+emit_16(1510);
+emit_16(1575);
+emit_16(1511);
+emit_16(1575);
+emit_16(1510);
+emit_16(1575);
+emit_16(1511);
+emit_16(1576);
+emit_16(1512);
+emit_16(1576);
+emit_16(1511);
+emit_16(1576);
+emit_16(1512);
+emit_16(1577);
+emit_16(1513);
+emit_16(1577);
+emit_16(1512);
+emit_16(1577);
+emit_16(1513);
+emit_16(1578);
+emit_16(1514);
+emit_16(1578);
+emit_16(1513);
+emit_16(1578);
+emit_16(1514);
+emit_16(1579);
+emit_16(1515);
+emit_16(1579);
+emit_16(1514);
+emit_16(1579);
+emit_16(1515);
+emit_16(1580);
+emit_16(1516);
+emit_16(1580);
+emit_16(1515);
+emit_16(1580);
+emit_16(1516);
+emit_16(1581);
+emit_16(1517);
+emit_16(1581);
+emit_16(1516);
+emit_16(1581);
+emit_16(1517);
+emit_16(1582);
+emit_16(1518);
+emit_16(1582);
+emit_16(1517);
+emit_16(1582);
+emit_16(1518);
+emit_16(1583);
+emit_16(1519);
+emit_16(1583);
+emit_16(1518);
+emit_16(1583);
+emit_16(1519);
+emit_16(1584);
+emit_16(1520);
+emit_16(1584);
+emit_16(1519);
+emit_16(1584);
+emit_16(1520);
+emit_16(1585);
+emit_16(1521);
+emit_16(1585);
+emit_16(1520);
+emit_16(1585);
+emit_16(1521);
+emit_16(1586);
+emit_16(1522);
+emit_16(1586);
+emit_16(1521);
+emit_16(1586);
+emit_16(1522);
+emit_16(1587);
+emit_16(1523);
+emit_16(1587);
+emit_16(1522);
+emit_16(1587);
+emit_16(1523);
+emit_16(1588);
+emit_16(1524);
+emit_16(1588);
+emit_16(1523);
+emit_16(1588);
+emit_16(1524);
+emit_16(1589);
+emit_16(1525);
+emit_16(1589);
+emit_16(1524);
+emit_16(1589);
+emit_16(1525);
+emit_16(1590);
+emit_16(1526);
+emit_16(1590);
+emit_16(1525);
+emit_16(1590);
+emit_16(1526);
+emit_16(1591);
+emit_16(1527);
+emit_16(1591);
+emit_16(1526);
+emit_16(1591);
+emit_16(1527);
+emit_16(1592);
+emit_16(1528);
+emit_16(1592);
+emit_16(1527);
+emit_16(1592);
+emit_16(1528);
+emit_16(1593);
+emit_16(1529);
+emit_16(1593);
+emit_16(1528);
+emit_16(1593);
+emit_16(1529);
+emit_16(1594);
+emit_16(1530);
+emit_16(1594);
+emit_16(1529);
+emit_16(1594);
+emit_16(1530);
+emit_16(1595);
+emit_16(1531);
+emit_16(1595);
+emit_16(1530);
+emit_16(1595);
+emit_16(1531);
+emit_16(1596);
+emit_16(1532);
+emit_16(1596);
+emit_16(1531);
+emit_16(1596);
+emit_16(1532);
+emit_16(1597);
+emit_16(1533);
+emit_16(1597);
+emit_16(1532);
+emit_16(1597);
+emit_16(1533);
+emit_16(1598);
+emit_16(1534);
+emit_16(1598);
+emit_16(1533);
+emit_16(1598);
+emit_16(1534);
+emit_16(1599);
+emit_16(1535);
+emit_16(1599);
+emit_16(1534);
+emit_16(1600);
+emit_16(1536);
+emit_16(1601);
+emit_16(1537);
+emit_16(1601);
+emit_16(1536);
+emit_16(1601);
+emit_16(1537);
+emit_16(1602);
+emit_16(1538);
+emit_16(1602);
+emit_16(1537);
+emit_16(1602);
+emit_16(1538);
+emit_16(1603);
+emit_16(1539);
+emit_16(1603);
+emit_16(1538);
+emit_16(1603);
+emit_16(1539);
+emit_16(1604);
+emit_16(1540);
+emit_16(1604);
+emit_16(1539);
+emit_16(1604);
+emit_16(1540);
+emit_16(1605);
+emit_16(1541);
+emit_16(1605);
+emit_16(1540);
+emit_16(1605);
+emit_16(1541);
+emit_16(1606);
+emit_16(1542);
+emit_16(1606);
+emit_16(1541);
+emit_16(1606);
+emit_16(1542);
+emit_16(1607);
+emit_16(1543);
+emit_16(1607);
+emit_16(1542);
+emit_16(1607);
+emit_16(1543);
+emit_16(1608);
+emit_16(1544);
+emit_16(1608);
+emit_16(1543);
+emit_16(1608);
+emit_16(1544);
+emit_16(1609);
+emit_16(1545);
+emit_16(1609);
+emit_16(1544);
+emit_16(1609);
+emit_16(1545);
+emit_16(1610);
+emit_16(1546);
+emit_16(1610);
+emit_16(1545);
+emit_16(1610);
+emit_16(1546);
+emit_16(1611);
+emit_16(1547);
+emit_16(1611);
+emit_16(1546);
+emit_16(1611);
+emit_16(1547);
+emit_16(1612);
+emit_16(1548);
+emit_16(1612);
+emit_16(1547);
+emit_16(1612);
+emit_16(1548);
+emit_16(1613);
+emit_16(1549);
+emit_16(1613);
+emit_16(1548);
+emit_16(1613);
+emit_16(1549);
+emit_16(1614);
+emit_16(1550);
+emit_16(1614);
+emit_16(1549);
+emit_16(1614);
+emit_16(1550);
+emit_16(1615);
+emit_16(1551);
+emit_16(1615);
+emit_16(1550);
+emit_16(1615);
+emit_16(1551);
+emit_16(1616);
+emit_16(1552);
+emit_16(1616);
+emit_16(1551);
+emit_16(1616);
+emit_16(1552);
+emit_16(1617);
+emit_16(1553);
+emit_16(1617);
+emit_16(1552);
+emit_16(1617);
+emit_16(1553);
+emit_16(1618);
+emit_16(1554);
+emit_16(1618);
+emit_16(1553);
+emit_16(1618);
+emit_16(1554);
+emit_16(1619);
+emit_16(1555);
+emit_16(1619);
+emit_16(1554);
+emit_16(1619);
+emit_16(1555);
+emit_16(1620);
+emit_16(1556);
+emit_16(1620);
+emit_16(1555);
+emit_16(1620);
+emit_16(1556);
+emit_16(1621);
+emit_16(1557);
+emit_16(1621);
+emit_16(1556);
+emit_16(1621);
+emit_16(1557);
+emit_16(1622);
+emit_16(1558);
+emit_16(1622);
+emit_16(1557);
+emit_16(1622);
+emit_16(1558);
+emit_16(1623);
+emit_16(1559);
+emit_16(1623);
+emit_16(1558);
+emit_16(1623);
+emit_16(1559);
+emit_16(1624);
+emit_16(1560);
+emit_16(1624);
+emit_16(1559);
+emit_16(1624);
+emit_16(1560);
+emit_16(1625);
+emit_16(1561);
+emit_16(1625);
+emit_16(1560);
+emit_16(1625);
+emit_16(1561);
+emit_16(1626);
+emit_16(1562);
+emit_16(1626);
+emit_16(1561);
+emit_16(1626);
+emit_16(1562);
+emit_16(1627);
+emit_16(1563);
+emit_16(1627);
+emit_16(1562);
+emit_16(1627);
+emit_16(1563);
+emit_16(1628);
+emit_16(1564);
+emit_16(1628);
+emit_16(1563);
+emit_16(1628);
+emit_16(1564);
+emit_16(1629);
+emit_16(1565);
+emit_16(1629);
+emit_16(1564);
+emit_16(1629);
+emit_16(1565);
+emit_16(1630);
+emit_16(1566);
+emit_16(1630);
+emit_16(1565);
+emit_16(1630);
+emit_16(1566);
+emit_16(1631);
+emit_16(1567);
+emit_16(1631);
+emit_16(1566);
+emit_16(1631);
+emit_16(1567);
+emit_16(1632);
+emit_16(1568);
+emit_16(1632);
+emit_16(1567);
+emit_16(1632);
+emit_16(1568);
+emit_16(1633);
+emit_16(1569);
+emit_16(1633);
+emit_16(1568);
+emit_16(1633);
+emit_16(1569);
+emit_16(1634);
+emit_16(1570);
+emit_16(1634);
+emit_16(1569);
+emit_16(1634);
+emit_16(1570);
+emit_16(1635);
+emit_16(1571);
+emit_16(1635);
+emit_16(1570);
+emit_16(1635);
+emit_16(1571);
+emit_16(1636);
+emit_16(1572);
+emit_16(1636);
+emit_16(1571);
+emit_16(1636);
+emit_16(1572);
+emit_16(1637);
+emit_16(1573);
+emit_16(1637);
+emit_16(1572);
+emit_16(1637);
+emit_16(1573);
+emit_16(1638);
+emit_16(1574);
+emit_16(1638);
+emit_16(1573);
+emit_16(1638);
+emit_16(1574);
+emit_16(1639);
+emit_16(1575);
+emit_16(1639);
+emit_16(1574);
+emit_16(1639);
+emit_16(1575);
+emit_16(1640);
+emit_16(1576);
+emit_16(1640);
+emit_16(1575);
+emit_16(1640);
+emit_16(1576);
+emit_16(1641);
+emit_16(1577);
+emit_16(1641);
+emit_16(1576);
+emit_16(1641);
+emit_16(1577);
+emit_16(1642);
+emit_16(1578);
+emit_16(1642);
+emit_16(1577);
+emit_16(1642);
+emit_16(1578);
+emit_16(1643);
+emit_16(1579);
+emit_16(1643);
+emit_16(1578);
+emit_16(1643);
+emit_16(1579);
+emit_16(1644);
+emit_16(1580);
+emit_16(1644);
+emit_16(1579);
+emit_16(1644);
+emit_16(1580);
+emit_16(1645);
+emit_16(1581);
+emit_16(1645);
+emit_16(1580);
+emit_16(1645);
+emit_16(1581);
+emit_16(1646);
+emit_16(1582);
+emit_16(1646);
+emit_16(1581);
+emit_16(1646);
+emit_16(1582);
+emit_16(1647);
+emit_16(1583);
+emit_16(1647);
+emit_16(1582);
+emit_16(1647);
+emit_16(1583);
+emit_16(1648);
+emit_16(1584);
+emit_16(1648);
+emit_16(1583);
+emit_16(1648);
+emit_16(1584);
+emit_16(1649);
+emit_16(1585);
+emit_16(1649);
+emit_16(1584);
+emit_16(1649);
+emit_16(1585);
+emit_16(1650);
+emit_16(1586);
+emit_16(1650);
+emit_16(1585);
+emit_16(1650);
+emit_16(1586);
+emit_16(1651);
+emit_16(1587);
+emit_16(1651);
+emit_16(1586);
+emit_16(1651);
+emit_16(1587);
+emit_16(1652);
+emit_16(1588);
+emit_16(1652);
+emit_16(1587);
+emit_16(1652);
+emit_16(1588);
+emit_16(1653);
+emit_16(1589);
+emit_16(1653);
+emit_16(1588);
+emit_16(1653);
+emit_16(1589);
+emit_16(1654);
+emit_16(1590);
+emit_16(1654);
+emit_16(1589);
+emit_16(1654);
+emit_16(1590);
+emit_16(1655);
+emit_16(1591);
+emit_16(1655);
+emit_16(1590);
+emit_16(1655);
+emit_16(1591);
+emit_16(1656);
+emit_16(1592);
+emit_16(1656);
+emit_16(1591);
+emit_16(1656);
+emit_16(1592);
+emit_16(1657);
+emit_16(1593);
+emit_16(1657);
+emit_16(1592);
+emit_16(1657);
+emit_16(1593);
+emit_16(1658);
+emit_16(1594);
+emit_16(1658);
+emit_16(1593);
+emit_16(1658);
+emit_16(1594);
+emit_16(1659);
+emit_16(1595);
+emit_16(1659);
+emit_16(1594);
+emit_16(1659);
+emit_16(1595);
+emit_16(1660);
+emit_16(1596);
+emit_16(1660);
+emit_16(1595);
+emit_16(1660);
+emit_16(1596);
+emit_16(1661);
+emit_16(1597);
+emit_16(1661);
+emit_16(1596);
+emit_16(1661);
+emit_16(1597);
+emit_16(1662);
+emit_16(1598);
+emit_16(1662);
+emit_16(1597);
+emit_16(1662);
+emit_16(1598);
+emit_16(1663);
+emit_16(1599);
+emit_16(1663);
+emit_16(1598);
+emit_16(1664);
+emit_16(1600);
+emit_16(1665);
+emit_16(1601);
+emit_16(1665);
+emit_16(1600);
+emit_16(1665);
+emit_16(1601);
+emit_16(1666);
+emit_16(1602);
+emit_16(1666);
+emit_16(1601);
+emit_16(1666);
+emit_16(1602);
+emit_16(1667);
+emit_16(1603);
+emit_16(1667);
+emit_16(1602);
+emit_16(1667);
+emit_16(1603);
+emit_16(1668);
+emit_16(1604);
+emit_16(1668);
+emit_16(1603);
+emit_16(1668);
+emit_16(1604);
+emit_16(1669);
+emit_16(1605);
+emit_16(1669);
+emit_16(1604);
+emit_16(1669);
+emit_16(1605);
+emit_16(1670);
+emit_16(1606);
+emit_16(1670);
+emit_16(1605);
+emit_16(1670);
+emit_16(1606);
+emit_16(1671);
+emit_16(1607);
+emit_16(1671);
+emit_16(1606);
+emit_16(1671);
+emit_16(1607);
+emit_16(1672);
+emit_16(1608);
+emit_16(1672);
+emit_16(1607);
+emit_16(1672);
+emit_16(1608);
+emit_16(1673);
+emit_16(1609);
+emit_16(1673);
+emit_16(1608);
+emit_16(1673);
+emit_16(1609);
+emit_16(1674);
+emit_16(1610);
+emit_16(1674);
+emit_16(1609);
+emit_16(1674);
+emit_16(1610);
+emit_16(1675);
+emit_16(1611);
+emit_16(1675);
+emit_16(1610);
+emit_16(1675);
+emit_16(1611);
+emit_16(1676);
+emit_16(1612);
+emit_16(1676);
+emit_16(1611);
+emit_16(1676);
+emit_16(1612);
+emit_16(1677);
+emit_16(1613);
+emit_16(1677);
+emit_16(1612);
+emit_16(1677);
+emit_16(1613);
+emit_16(1678);
+emit_16(1614);
+emit_16(1678);
+emit_16(1613);
+emit_16(1678);
+emit_16(1614);
+emit_16(1679);
+emit_16(1615);
+emit_16(1679);
+emit_16(1614);
+emit_16(1679);
+emit_16(1615);
+emit_16(1680);
+emit_16(1616);
+emit_16(1680);
+emit_16(1615);
+emit_16(1680);
+emit_16(1616);
+emit_16(1681);
+emit_16(1617);
+emit_16(1681);
+emit_16(1616);
+emit_16(1681);
+emit_16(1617);
+emit_16(1682);
+emit_16(1618);
+emit_16(1682);
+emit_16(1617);
+emit_16(1682);
+emit_16(1618);
+emit_16(1683);
+emit_16(1619);
+emit_16(1683);
+emit_16(1618);
+emit_16(1683);
+emit_16(1619);
+emit_16(1684);
+emit_16(1620);
+emit_16(1684);
+emit_16(1619);
+emit_16(1684);
+emit_16(1620);
+emit_16(1685);
+emit_16(1621);
+emit_16(1685);
+emit_16(1620);
+emit_16(1685);
+emit_16(1621);
+emit_16(1686);
+emit_16(1622);
+emit_16(1686);
+emit_16(1621);
+emit_16(1686);
+emit_16(1622);
+emit_16(1687);
+emit_16(1623);
+emit_16(1687);
+emit_16(1622);
+emit_16(1687);
+emit_16(1623);
+emit_16(1688);
+emit_16(1624);
+emit_16(1688);
+emit_16(1623);
+emit_16(1688);
+emit_16(1624);
+emit_16(1689);
+emit_16(1625);
+emit_16(1689);
+emit_16(1624);
+emit_16(1689);
+emit_16(1625);
+emit_16(1690);
+emit_16(1626);
+emit_16(1690);
+emit_16(1625);
+emit_16(1690);
+emit_16(1626);
+emit_16(1691);
+emit_16(1627);
+emit_16(1691);
+emit_16(1626);
+emit_16(1691);
+emit_16(1627);
+emit_16(1692);
+emit_16(1628);
+emit_16(1692);
+emit_16(1627);
+emit_16(1692);
+emit_16(1628);
+emit_16(1693);
+emit_16(1629);
+emit_16(1693);
+emit_16(1628);
+emit_16(1693);
+emit_16(1629);
+emit_16(1694);
+emit_16(1630);
+emit_16(1694);
+emit_16(1629);
+emit_16(1694);
+emit_16(1630);
+emit_16(1695);
+emit_16(1631);
+emit_16(1695);
+emit_16(1630);
+emit_16(1695);
+emit_16(1631);
+emit_16(1696);
+emit_16(1632);
+emit_16(1696);
+emit_16(1631);
+emit_16(1696);
+emit_16(1632);
+emit_16(1697);
+emit_16(1633);
+emit_16(1697);
+emit_16(1632);
+emit_16(1697);
+emit_16(1633);
+emit_16(1698);
+emit_16(1634);
+emit_16(1698);
+emit_16(1633);
+emit_16(1698);
+emit_16(1634);
+emit_16(1699);
+emit_16(1635);
+emit_16(1699);
+emit_16(1634);
+emit_16(1699);
+emit_16(1635);
+emit_16(1700);
+emit_16(1636);
+emit_16(1700);
+emit_16(1635);
+emit_16(1700);
+emit_16(1636);
+emit_16(1701);
+emit_16(1637);
+emit_16(1701);
+emit_16(1636);
+emit_16(1701);
+emit_16(1637);
+emit_16(1702);
+emit_16(1638);
+emit_16(1702);
+emit_16(1637);
+emit_16(1702);
+emit_16(1638);
+emit_16(1703);
+emit_16(1639);
+emit_16(1703);
+emit_16(1638);
+emit_16(1703);
+emit_16(1639);
+emit_16(1704);
+emit_16(1640);
+emit_16(1704);
+emit_16(1639);
+emit_16(1704);
+emit_16(1640);
+emit_16(1705);
+emit_16(1641);
+emit_16(1705);
+emit_16(1640);
+emit_16(1705);
+emit_16(1641);
+emit_16(1706);
+emit_16(1642);
+emit_16(1706);
+emit_16(1641);
+emit_16(1706);
+emit_16(1642);
+emit_16(1707);
+emit_16(1643);
+emit_16(1707);
+emit_16(1642);
+emit_16(1707);
+emit_16(1643);
+emit_16(1708);
+emit_16(1644);
+emit_16(1708);
+emit_16(1643);
+emit_16(1708);
+emit_16(1644);
+emit_16(1709);
+emit_16(1645);
+emit_16(1709);
+emit_16(1644);
+emit_16(1709);
+emit_16(1645);
+emit_16(1710);
+emit_16(1646);
+emit_16(1710);
+emit_16(1645);
+emit_16(1710);
+emit_16(1646);
+emit_16(1711);
+emit_16(1647);
+emit_16(1711);
+emit_16(1646);
+emit_16(1711);
+emit_16(1647);
+emit_16(1712);
+emit_16(1648);
+emit_16(1712);
+emit_16(1647);
+emit_16(1712);
+emit_16(1648);
+emit_16(1713);
+emit_16(1649);
+emit_16(1713);
+emit_16(1648);
+emit_16(1713);
+emit_16(1649);
+emit_16(1714);
+emit_16(1650);
+emit_16(1714);
+emit_16(1649);
+emit_16(1714);
+emit_16(1650);
+emit_16(1715);
+emit_16(1651);
+emit_16(1715);
+emit_16(1650);
+emit_16(1715);
+emit_16(1651);
+emit_16(1716);
+emit_16(1652);
+emit_16(1716);
+emit_16(1651);
+emit_16(1716);
+emit_16(1652);
+emit_16(1717);
+emit_16(1653);
+emit_16(1717);
+emit_16(1652);
+emit_16(1717);
+emit_16(1653);
+emit_16(1718);
+emit_16(1654);
+emit_16(1718);
+emit_16(1653);
+emit_16(1718);
+emit_16(1654);
+emit_16(1719);
+emit_16(1655);
+emit_16(1719);
+emit_16(1654);
+emit_16(1719);
+emit_16(1655);
+emit_16(1720);
+emit_16(1656);
+emit_16(1720);
+emit_16(1655);
+emit_16(1720);
+emit_16(1656);
+emit_16(1721);
+emit_16(1657);
+emit_16(1721);
+emit_16(1656);
+emit_16(1721);
+emit_16(1657);
+emit_16(1722);
+emit_16(1658);
+emit_16(1722);
+emit_16(1657);
+emit_16(1722);
+emit_16(1658);
+emit_16(1723);
+emit_16(1659);
+emit_16(1723);
+emit_16(1658);
+emit_16(1723);
+emit_16(1659);
+emit_16(1724);
+emit_16(1660);
+emit_16(1724);
+emit_16(1659);
+emit_16(1724);
+emit_16(1660);
+emit_16(1725);
+emit_16(1661);
+emit_16(1725);
+emit_16(1660);
+emit_16(1725);
+emit_16(1661);
+emit_16(1726);
+emit_16(1662);
+emit_16(1726);
+emit_16(1661);
+emit_16(1726);
+emit_16(1662);
+emit_16(1727);
+emit_16(1663);
+emit_16(1727);
+emit_16(1662);
+emit_16(1728);
+emit_16(1664);
+emit_16(1729);
+emit_16(1665);
+emit_16(1729);
+emit_16(1664);
+emit_16(1729);
+emit_16(1665);
+emit_16(1730);
+emit_16(1666);
+emit_16(1730);
+emit_16(1665);
+emit_16(1730);
+emit_16(1666);
+emit_16(1731);
+emit_16(1667);
+emit_16(1731);
+emit_16(1666);
+emit_16(1731);
+emit_16(1667);
+emit_16(1732);
+emit_16(1668);
+emit_16(1732);
+emit_16(1667);
+emit_16(1732);
+emit_16(1668);
+emit_16(1733);
+emit_16(1669);
+emit_16(1733);
+emit_16(1668);
+emit_16(1733);
+emit_16(1669);
+emit_16(1734);
+emit_16(1670);
+emit_16(1734);
+emit_16(1669);
+emit_16(1734);
+emit_16(1670);
+emit_16(1735);
+emit_16(1671);
+emit_16(1735);
+emit_16(1670);
+emit_16(1735);
+emit_16(1671);
+emit_16(1736);
+emit_16(1672);
+emit_16(1736);
+emit_16(1671);
+emit_16(1736);
+emit_16(1672);
+emit_16(1737);
+emit_16(1673);
+emit_16(1737);
+emit_16(1672);
+emit_16(1737);
+emit_16(1673);
+emit_16(1738);
+emit_16(1674);
+emit_16(1738);
+emit_16(1673);
+emit_16(1738);
+emit_16(1674);
+emit_16(1739);
+emit_16(1675);
+emit_16(1739);
+emit_16(1674);
+emit_16(1739);
+emit_16(1675);
+emit_16(1740);
+emit_16(1676);
+emit_16(1740);
+emit_16(1675);
+emit_16(1740);
+emit_16(1676);
+emit_16(1741);
+emit_16(1677);
+emit_16(1741);
+emit_16(1676);
+emit_16(1741);
+emit_16(1677);
+emit_16(1742);
+emit_16(1678);
+emit_16(1742);
+emit_16(1677);
+emit_16(1742);
+emit_16(1678);
+emit_16(1743);
+emit_16(1679);
+emit_16(1743);
+emit_16(1678);
+emit_16(1743);
+emit_16(1679);
+emit_16(1744);
+emit_16(1680);
+emit_16(1744);
+emit_16(1679);
+emit_16(1744);
+emit_16(1680);
+emit_16(1745);
+emit_16(1681);
+emit_16(1745);
+emit_16(1680);
+emit_16(1745);
+emit_16(1681);
+emit_16(1746);
+emit_16(1682);
+emit_16(1746);
+emit_16(1681);
+emit_16(1746);
+emit_16(1682);
+emit_16(1747);
+emit_16(1683);
+emit_16(1747);
+emit_16(1682);
+emit_16(1747);
+emit_16(1683);
+emit_16(1748);
+emit_16(1684);
+emit_16(1748);
+emit_16(1683);
+emit_16(1748);
+emit_16(1684);
+emit_16(1749);
+emit_16(1685);
+emit_16(1749);
+emit_16(1684);
+emit_16(1749);
+emit_16(1685);
+emit_16(1750);
+emit_16(1686);
+emit_16(1750);
+emit_16(1685);
+emit_16(1750);
+emit_16(1686);
+emit_16(1751);
+emit_16(1687);
+emit_16(1751);
+emit_16(1686);
+emit_16(1751);
+emit_16(1687);
+emit_16(1752);
+emit_16(1688);
+emit_16(1752);
+emit_16(1687);
+emit_16(1752);
+emit_16(1688);
+emit_16(1753);
+emit_16(1689);
+emit_16(1753);
+emit_16(1688);
+emit_16(1753);
+emit_16(1689);
+emit_16(1754);
+emit_16(1690);
+emit_16(1754);
+emit_16(1689);
+emit_16(1754);
+emit_16(1690);
+emit_16(1755);
+emit_16(1691);
+emit_16(1755);
+emit_16(1690);
+emit_16(1755);
+emit_16(1691);
+emit_16(1756);
+emit_16(1692);
+emit_16(1756);
+emit_16(1691);
+emit_16(1756);
+emit_16(1692);
+emit_16(1757);
+emit_16(1693);
+emit_16(1757);
+emit_16(1692);
+emit_16(1757);
+emit_16(1693);
+emit_16(1758);
+emit_16(1694);
+emit_16(1758);
+emit_16(1693);
+emit_16(1758);
+emit_16(1694);
+emit_16(1759);
+emit_16(1695);
+emit_16(1759);
+emit_16(1694);
+emit_16(1759);
+emit_16(1695);
+emit_16(1760);
+emit_16(1696);
+emit_16(1760);
+emit_16(1695);
+emit_16(1760);
+emit_16(1696);
+emit_16(1761);
+emit_16(1697);
+emit_16(1761);
+emit_16(1696);
+emit_16(1761);
+emit_16(1697);
+emit_16(1762);
+emit_16(1698);
+emit_16(1762);
+emit_16(1697);
+emit_16(1762);
+emit_16(1698);
+emit_16(1763);
+emit_16(1699);
+emit_16(1763);
+emit_16(1698);
+emit_16(1763);
+emit_16(1699);
+emit_16(1764);
+emit_16(1700);
+emit_16(1764);
+emit_16(1699);
+emit_16(1764);
+emit_16(1700);
+emit_16(1765);
+emit_16(1701);
+emit_16(1765);
+emit_16(1700);
+emit_16(1765);
+emit_16(1701);
+emit_16(1766);
+emit_16(1702);
+emit_16(1766);
+emit_16(1701);
+emit_16(1766);
+emit_16(1702);
+emit_16(1767);
+emit_16(1703);
+emit_16(1767);
+emit_16(1702);
+emit_16(1767);
+emit_16(1703);
+emit_16(1768);
+emit_16(1704);
+emit_16(1768);
+emit_16(1703);
+emit_16(1768);
+emit_16(1704);
+emit_16(1769);
+emit_16(1705);
+emit_16(1769);
+emit_16(1704);
+emit_16(1769);
+emit_16(1705);
+emit_16(1770);
+emit_16(1706);
+emit_16(1770);
+emit_16(1705);
+emit_16(1770);
+emit_16(1706);
+emit_16(1771);
+emit_16(1707);
+emit_16(1771);
+emit_16(1706);
+emit_16(1771);
+emit_16(1707);
+emit_16(1772);
+emit_16(1708);
+emit_16(1772);
+emit_16(1707);
+emit_16(1772);
+emit_16(1708);
+emit_16(1773);
+emit_16(1709);
+emit_16(1773);
+emit_16(1708);
+emit_16(1773);
+emit_16(1709);
+emit_16(1774);
+emit_16(1710);
+emit_16(1774);
+emit_16(1709);
+emit_16(1774);
+emit_16(1710);
+emit_16(1775);
+emit_16(1711);
+emit_16(1775);
+emit_16(1710);
+emit_16(1775);
+emit_16(1711);
+emit_16(1776);
+emit_16(1712);
+emit_16(1776);
+emit_16(1711);
+emit_16(1776);
+emit_16(1712);
+emit_16(1777);
+emit_16(1713);
+emit_16(1777);
+emit_16(1712);
+emit_16(1777);
+emit_16(1713);
+emit_16(1778);
+emit_16(1714);
+emit_16(1778);
+emit_16(1713);
+emit_16(1778);
+emit_16(1714);
+emit_16(1779);
+emit_16(1715);
+emit_16(1779);
+emit_16(1714);
+emit_16(1779);
+emit_16(1715);
+emit_16(1780);
+emit_16(1716);
+emit_16(1780);
+emit_16(1715);
+emit_16(1780);
+emit_16(1716);
+emit_16(1781);
+emit_16(1717);
+emit_16(1781);
+emit_16(1716);
+emit_16(1781);
+emit_16(1717);
+emit_16(1782);
+emit_16(1718);
+emit_16(1782);
+emit_16(1717);
+emit_16(1782);
+emit_16(1718);
+emit_16(1783);
+emit_16(1719);
+emit_16(1783);
+emit_16(1718);
+emit_16(1783);
+emit_16(1719);
+emit_16(1784);
+emit_16(1720);
+emit_16(1784);
+emit_16(1719);
+emit_16(1784);
+emit_16(1720);
+emit_16(1785);
+emit_16(1721);
+emit_16(1785);
+emit_16(1720);
+emit_16(1785);
+emit_16(1721);
+emit_16(1786);
+emit_16(1722);
+emit_16(1786);
+emit_16(1721);
+emit_16(1786);
+emit_16(1722);
+emit_16(1787);
+emit_16(1723);
+emit_16(1787);
+emit_16(1722);
+emit_16(1787);
+emit_16(1723);
+emit_16(1788);
+emit_16(1724);
+emit_16(1788);
+emit_16(1723);
+emit_16(1788);
+emit_16(1724);
+emit_16(1789);
+emit_16(1725);
+emit_16(1789);
+emit_16(1724);
+emit_16(1789);
+emit_16(1725);
+emit_16(1790);
+emit_16(1726);
+emit_16(1790);
+emit_16(1725);
+emit_16(1790);
+emit_16(1726);
+emit_16(1791);
+emit_16(1727);
+emit_16(1791);
+emit_16(1726);
+emit_16(1792);
+emit_16(1728);
+emit_16(1793);
+emit_16(1729);
+emit_16(1793);
+emit_16(1728);
+emit_16(1793);
+emit_16(1729);
+emit_16(1794);
+emit_16(1730);
+emit_16(1794);
+emit_16(1729);
+emit_16(1794);
+emit_16(1730);
+emit_16(1795);
+emit_16(1731);
+emit_16(1795);
+emit_16(1730);
+emit_16(1795);
+emit_16(1731);
+emit_16(1796);
+emit_16(1732);
+emit_16(1796);
+emit_16(1731);
+emit_16(1796);
+emit_16(1732);
+emit_16(1797);
+emit_16(1733);
+emit_16(1797);
+emit_16(1732);
+emit_16(1797);
+emit_16(1733);
+emit_16(1798);
+emit_16(1734);
+emit_16(1798);
+emit_16(1733);
+emit_16(1798);
+emit_16(1734);
+emit_16(1799);
+emit_16(1735);
+emit_16(1799);
+emit_16(1734);
+emit_16(1799);
+emit_16(1735);
+emit_16(1800);
+emit_16(1736);
+emit_16(1800);
+emit_16(1735);
+emit_16(1800);
+emit_16(1736);
+emit_16(1801);
+emit_16(1737);
+emit_16(1801);
+emit_16(1736);
+emit_16(1801);
+emit_16(1737);
+emit_16(1802);
+emit_16(1738);
+emit_16(1802);
+emit_16(1737);
+emit_16(1802);
+emit_16(1738);
+emit_16(1803);
+emit_16(1739);
+emit_16(1803);
+emit_16(1738);
+emit_16(1803);
+emit_16(1739);
+emit_16(1804);
+emit_16(1740);
+emit_16(1804);
+emit_16(1739);
+emit_16(1804);
+emit_16(1740);
+emit_16(1805);
+emit_16(1741);
+emit_16(1805);
+emit_16(1740);
+emit_16(1805);
+emit_16(1741);
+emit_16(1806);
+emit_16(1742);
+emit_16(1806);
+emit_16(1741);
+emit_16(1806);
+emit_16(1742);
+emit_16(1807);
+emit_16(1743);
+emit_16(1807);
+emit_16(1742);
+emit_16(1807);
+emit_16(1743);
+emit_16(1808);
+emit_16(1744);
+emit_16(1808);
+emit_16(1743);
+emit_16(1808);
+emit_16(1744);
+emit_16(1809);
+emit_16(1745);
+emit_16(1809);
+emit_16(1744);
+emit_16(1809);
+emit_16(1745);
+emit_16(1810);
+emit_16(1746);
+emit_16(1810);
+emit_16(1745);
+emit_16(1810);
+emit_16(1746);
+emit_16(1811);
+emit_16(1747);
+emit_16(1811);
+emit_16(1746);
+emit_16(1811);
+emit_16(1747);
+emit_16(1812);
+emit_16(1748);
+emit_16(1812);
+emit_16(1747);
+emit_16(1812);
+emit_16(1748);
+emit_16(1813);
+emit_16(1749);
+emit_16(1813);
+emit_16(1748);
+emit_16(1813);
+emit_16(1749);
+emit_16(1814);
+emit_16(1750);
+emit_16(1814);
+emit_16(1749);
+emit_16(1814);
+emit_16(1750);
+emit_16(1815);
+emit_16(1751);
+emit_16(1815);
+emit_16(1750);
+emit_16(1815);
+emit_16(1751);
+emit_16(1816);
+emit_16(1752);
+emit_16(1816);
+emit_16(1751);
+emit_16(1816);
+emit_16(1752);
+emit_16(1817);
+emit_16(1753);
+emit_16(1817);
+emit_16(1752);
+emit_16(1817);
+emit_16(1753);
+emit_16(1818);
+emit_16(1754);
+emit_16(1818);
+emit_16(1753);
+emit_16(1818);
+emit_16(1754);
+emit_16(1819);
+emit_16(1755);
+emit_16(1819);
+emit_16(1754);
+emit_16(1819);
+emit_16(1755);
+emit_16(1820);
+emit_16(1756);
+emit_16(1820);
+emit_16(1755);
+emit_16(1820);
+emit_16(1756);
+emit_16(1821);
+emit_16(1757);
+emit_16(1821);
+emit_16(1756);
+emit_16(1821);
+emit_16(1757);
+emit_16(1822);
+emit_16(1758);
+emit_16(1822);
+emit_16(1757);
+emit_16(1822);
+emit_16(1758);
+emit_16(1823);
+emit_16(1759);
+emit_16(1823);
+emit_16(1758);
+emit_16(1823);
+emit_16(1759);
+emit_16(1824);
+emit_16(1760);
+emit_16(1824);
+emit_16(1759);
+emit_16(1824);
+emit_16(1760);
+emit_16(1825);
+emit_16(1761);
+emit_16(1825);
+emit_16(1760);
+emit_16(1825);
+emit_16(1761);
+emit_16(1826);
+emit_16(1762);
+emit_16(1826);
+emit_16(1761);
+emit_16(1826);
+emit_16(1762);
+emit_16(1827);
+emit_16(1763);
+emit_16(1827);
+emit_16(1762);
+emit_16(1827);
+emit_16(1763);
+emit_16(1828);
+emit_16(1764);
+emit_16(1828);
+emit_16(1763);
+emit_16(1828);
+emit_16(1764);
+emit_16(1829);
+emit_16(1765);
+emit_16(1829);
+emit_16(1764);
+emit_16(1829);
+emit_16(1765);
+emit_16(1830);
+emit_16(1766);
+emit_16(1830);
+emit_16(1765);
+emit_16(1830);
+emit_16(1766);
+emit_16(1831);
+emit_16(1767);
+emit_16(1831);
+emit_16(1766);
+emit_16(1831);
+emit_16(1767);
+emit_16(1832);
+emit_16(1768);
+emit_16(1832);
+emit_16(1767);
+emit_16(1832);
+emit_16(1768);
+emit_16(1833);
+emit_16(1769);
+emit_16(1833);
+emit_16(1768);
+emit_16(1833);
+emit_16(1769);
+emit_16(1834);
+emit_16(1770);
+emit_16(1834);
+emit_16(1769);
+emit_16(1834);
+emit_16(1770);
+emit_16(1835);
+emit_16(1771);
+emit_16(1835);
+emit_16(1770);
+emit_16(1835);
+emit_16(1771);
+emit_16(1836);
+emit_16(1772);
+emit_16(1836);
+emit_16(1771);
+emit_16(1836);
+emit_16(1772);
+emit_16(1837);
+emit_16(1773);
+emit_16(1837);
+emit_16(1772);
+emit_16(1837);
+emit_16(1773);
+emit_16(1838);
+emit_16(1774);
+emit_16(1838);
+emit_16(1773);
+emit_16(1838);
+emit_16(1774);
+emit_16(1839);
+emit_16(1775);
+emit_16(1839);
+emit_16(1774);
+emit_16(1839);
+emit_16(1775);
+emit_16(1840);
+emit_16(1776);
+emit_16(1840);
+emit_16(1775);
+emit_16(1840);
+emit_16(1776);
+emit_16(1841);
+emit_16(1777);
+emit_16(1841);
+emit_16(1776);
+emit_16(1841);
+emit_16(1777);
+emit_16(1842);
+emit_16(1778);
+emit_16(1842);
+emit_16(1777);
+emit_16(1842);
+emit_16(1778);
+emit_16(1843);
+emit_16(1779);
+emit_16(1843);
+emit_16(1778);
+emit_16(1843);
+emit_16(1779);
+emit_16(1844);
+emit_16(1780);
+emit_16(1844);
+emit_16(1779);
+emit_16(1844);
+emit_16(1780);
+emit_16(1845);
+emit_16(1781);
+emit_16(1845);
+emit_16(1780);
+emit_16(1845);
+emit_16(1781);
+emit_16(1846);
+emit_16(1782);
+emit_16(1846);
+emit_16(1781);
+emit_16(1846);
+emit_16(1782);
+emit_16(1847);
+emit_16(1783);
+emit_16(1847);
+emit_16(1782);
+emit_16(1847);
+emit_16(1783);
+emit_16(1848);
+emit_16(1784);
+emit_16(1848);
+emit_16(1783);
+emit_16(1848);
+emit_16(1784);
+emit_16(1849);
+emit_16(1785);
+emit_16(1849);
+emit_16(1784);
+emit_16(1849);
+emit_16(1785);
+emit_16(1850);
+emit_16(1786);
+emit_16(1850);
+emit_16(1785);
+emit_16(1850);
+emit_16(1786);
+emit_16(1851);
+emit_16(1787);
+emit_16(1851);
+emit_16(1786);
+emit_16(1851);
+emit_16(1787);
+emit_16(1852);
+emit_16(1788);
+emit_16(1852);
+emit_16(1787);
+emit_16(1852);
+emit_16(1788);
+emit_16(1853);
+emit_16(1789);
+emit_16(1853);
+emit_16(1788);
+emit_16(1853);
+emit_16(1789);
+emit_16(1854);
+emit_16(1790);
+emit_16(1854);
+emit_16(1789);
+emit_16(1854);
+emit_16(1790);
+emit_16(1855);
+emit_16(1791);
+emit_16(1855);
+emit_16(1790);
+emit_16(1856);
+emit_16(1792);
+emit_16(1857);
+emit_16(1793);
+emit_16(1857);
+emit_16(1792);
+emit_16(1857);
+emit_16(1793);
+emit_16(1858);
+emit_16(1794);
+emit_16(1858);
+emit_16(1793);
+emit_16(1858);
+emit_16(1794);
+emit_16(1859);
+emit_16(1795);
+emit_16(1859);
+emit_16(1794);
+emit_16(1859);
+emit_16(1795);
+emit_16(1860);
+emit_16(1796);
+emit_16(1860);
+emit_16(1795);
+emit_16(1860);
+emit_16(1796);
+emit_16(1861);
+emit_16(1797);
+emit_16(1861);
+emit_16(1796);
+emit_16(1861);
+emit_16(1797);
+emit_16(1862);
+emit_16(1798);
+emit_16(1862);
+emit_16(1797);
+emit_16(1862);
+emit_16(1798);
+emit_16(1863);
+emit_16(1799);
+emit_16(1863);
+emit_16(1798);
+emit_16(1863);
+emit_16(1799);
+emit_16(1864);
+emit_16(1800);
+emit_16(1864);
+emit_16(1799);
+emit_16(1864);
+emit_16(1800);
+emit_16(1865);
+emit_16(1801);
+emit_16(1865);
+emit_16(1800);
+emit_16(1865);
+emit_16(1801);
+emit_16(1866);
+emit_16(1802);
+emit_16(1866);
+emit_16(1801);
+emit_16(1866);
+emit_16(1802);
+emit_16(1867);
+emit_16(1803);
+emit_16(1867);
+emit_16(1802);
+emit_16(1867);
+emit_16(1803);
+emit_16(1868);
+emit_16(1804);
+emit_16(1868);
+emit_16(1803);
+emit_16(1868);
+emit_16(1804);
+emit_16(1869);
+emit_16(1805);
+emit_16(1869);
+emit_16(1804);
+emit_16(1869);
+emit_16(1805);
+emit_16(1870);
+emit_16(1806);
+emit_16(1870);
+emit_16(1805);
+emit_16(1870);
+emit_16(1806);
+emit_16(1871);
+emit_16(1807);
+emit_16(1871);
+emit_16(1806);
+emit_16(1871);
+emit_16(1807);
+emit_16(1872);
+emit_16(1808);
+emit_16(1872);
+emit_16(1807);
+emit_16(1872);
+emit_16(1808);
+emit_16(1873);
+emit_16(1809);
+emit_16(1873);
+emit_16(1808);
+emit_16(1873);
+emit_16(1809);
+emit_16(1874);
+emit_16(1810);
+emit_16(1874);
+emit_16(1809);
+emit_16(1874);
+emit_16(1810);
+emit_16(1875);
+emit_16(1811);
+emit_16(1875);
+emit_16(1810);
+emit_16(1875);
+emit_16(1811);
+emit_16(1876);
+emit_16(1812);
+emit_16(1876);
+emit_16(1811);
+emit_16(1876);
+emit_16(1812);
+emit_16(1877);
+emit_16(1813);
+emit_16(1877);
+emit_16(1812);
+emit_16(1877);
+emit_16(1813);
+emit_16(1878);
+emit_16(1814);
+emit_16(1878);
+emit_16(1813);
+emit_16(1878);
+emit_16(1814);
+emit_16(1879);
+emit_16(1815);
+emit_16(1879);
+emit_16(1814);
+emit_16(1879);
+emit_16(1815);
+emit_16(1880);
+emit_16(1816);
+emit_16(1880);
+emit_16(1815);
+emit_16(1880);
+emit_16(1816);
+emit_16(1881);
+emit_16(1817);
+emit_16(1881);
+emit_16(1816);
+emit_16(1881);
+emit_16(1817);
+emit_16(1882);
+emit_16(1818);
+emit_16(1882);
+emit_16(1817);
+emit_16(1882);
+emit_16(1818);
+emit_16(1883);
+emit_16(1819);
+emit_16(1883);
+emit_16(1818);
+emit_16(1883);
+emit_16(1819);
+emit_16(1884);
+emit_16(1820);
+emit_16(1884);
+emit_16(1819);
+emit_16(1884);
+emit_16(1820);
+emit_16(1885);
+emit_16(1821);
+emit_16(1885);
+emit_16(1820);
+emit_16(1885);
+emit_16(1821);
+emit_16(1886);
+emit_16(1822);
+emit_16(1886);
+emit_16(1821);
+emit_16(1886);
+emit_16(1822);
+emit_16(1887);
+emit_16(1823);
+emit_16(1887);
+emit_16(1822);
+emit_16(1887);
+emit_16(1823);
+emit_16(1888);
+emit_16(1824);
+emit_16(1888);
+emit_16(1823);
+emit_16(1888);
+emit_16(1824);
+emit_16(1889);
+emit_16(1825);
+emit_16(1889);
+emit_16(1824);
+emit_16(1889);
+emit_16(1825);
+emit_16(1890);
+emit_16(1826);
+emit_16(1890);
+emit_16(1825);
+emit_16(1890);
+emit_16(1826);
+emit_16(1891);
+emit_16(1827);
+emit_16(1891);
+emit_16(1826);
+emit_16(1891);
+emit_16(1827);
+emit_16(1892);
+emit_16(1828);
+emit_16(1892);
+emit_16(1827);
+emit_16(1892);
+emit_16(1828);
+emit_16(1893);
+emit_16(1829);
+emit_16(1893);
+emit_16(1828);
+emit_16(1893);
+emit_16(1829);
+emit_16(1894);
+emit_16(1830);
+emit_16(1894);
+emit_16(1829);
+emit_16(1894);
+emit_16(1830);
+emit_16(1895);
+emit_16(1831);
+emit_16(1895);
+emit_16(1830);
+emit_16(1895);
+emit_16(1831);
+emit_16(1896);
+emit_16(1832);
+emit_16(1896);
+emit_16(1831);
+emit_16(1896);
+emit_16(1832);
+emit_16(1897);
+emit_16(1833);
+emit_16(1897);
+emit_16(1832);
+emit_16(1897);
+emit_16(1833);
+emit_16(1898);
+emit_16(1834);
+emit_16(1898);
+emit_16(1833);
+emit_16(1898);
+emit_16(1834);
+emit_16(1899);
+emit_16(1835);
+emit_16(1899);
+emit_16(1834);
+emit_16(1899);
+emit_16(1835);
+emit_16(1900);
+emit_16(1836);
+emit_16(1900);
+emit_16(1835);
+emit_16(1900);
+emit_16(1836);
+emit_16(1901);
+emit_16(1837);
+emit_16(1901);
+emit_16(1836);
+emit_16(1901);
+emit_16(1837);
+emit_16(1902);
+emit_16(1838);
+emit_16(1902);
+emit_16(1837);
+emit_16(1902);
+emit_16(1838);
+emit_16(1903);
+emit_16(1839);
+emit_16(1903);
+emit_16(1838);
+emit_16(1903);
+emit_16(1839);
+emit_16(1904);
+emit_16(1840);
+emit_16(1904);
+emit_16(1839);
+emit_16(1904);
+emit_16(1840);
+emit_16(1905);
+emit_16(1841);
+emit_16(1905);
+emit_16(1840);
+emit_16(1905);
+emit_16(1841);
+emit_16(1906);
+emit_16(1842);
+emit_16(1906);
+emit_16(1841);
+emit_16(1906);
+emit_16(1842);
+emit_16(1907);
+emit_16(1843);
+emit_16(1907);
+emit_16(1842);
+emit_16(1907);
+emit_16(1843);
+emit_16(1908);
+emit_16(1844);
+emit_16(1908);
+emit_16(1843);
+emit_16(1908);
+emit_16(1844);
+emit_16(1909);
+emit_16(1845);
+emit_16(1909);
+emit_16(1844);
+emit_16(1909);
+emit_16(1845);
+emit_16(1910);
+emit_16(1846);
+emit_16(1910);
+emit_16(1845);
+emit_16(1910);
+emit_16(1846);
+emit_16(1911);
+emit_16(1847);
+emit_16(1911);
+emit_16(1846);
+emit_16(1911);
+emit_16(1847);
+emit_16(1912);
+emit_16(1848);
+emit_16(1912);
+emit_16(1847);
+emit_16(1912);
+emit_16(1848);
+emit_16(1913);
+emit_16(1849);
+emit_16(1913);
+emit_16(1848);
+emit_16(1913);
+emit_16(1849);
+emit_16(1914);
+emit_16(1850);
+emit_16(1914);
+emit_16(1849);
+emit_16(1914);
+emit_16(1850);
+emit_16(1915);
+emit_16(1851);
+emit_16(1915);
+emit_16(1850);
+emit_16(1915);
+emit_16(1851);
+emit_16(1916);
+emit_16(1852);
+emit_16(1916);
+emit_16(1851);
+emit_16(1916);
+emit_16(1852);
+emit_16(1917);
+emit_16(1853);
+emit_16(1917);
+emit_16(1852);
+emit_16(1917);
+emit_16(1853);
+emit_16(1918);
+emit_16(1854);
+emit_16(1918);
+emit_16(1853);
+emit_16(1918);
+emit_16(1854);
+emit_16(1919);
+emit_16(1855);
+emit_16(1919);
+emit_16(1854);
+emit_16(1920);
+emit_16(1856);
+emit_16(1921);
+emit_16(1857);
+emit_16(1921);
+emit_16(1856);
+emit_16(1921);
+emit_16(1857);
+emit_16(1922);
+emit_16(1858);
+emit_16(1922);
+emit_16(1857);
+emit_16(1922);
+emit_16(1858);
+emit_16(1923);
+emit_16(1859);
+emit_16(1923);
+emit_16(1858);
+emit_16(1923);
+emit_16(1859);
+emit_16(1924);
+emit_16(1860);
+emit_16(1924);
+emit_16(1859);
+emit_16(1924);
+emit_16(1860);
+emit_16(1925);
+emit_16(1861);
+emit_16(1925);
+emit_16(1860);
+emit_16(1925);
+emit_16(1861);
+emit_16(1926);
+emit_16(1862);
+emit_16(1926);
+emit_16(1861);
+emit_16(1926);
+emit_16(1862);
+emit_16(1927);
+emit_16(1863);
+emit_16(1927);
+emit_16(1862);
+emit_16(1927);
+emit_16(1863);
+emit_16(1928);
+emit_16(1864);
+emit_16(1928);
+emit_16(1863);
+emit_16(1928);
+emit_16(1864);
+emit_16(1929);
+emit_16(1865);
+emit_16(1929);
+emit_16(1864);
+emit_16(1929);
+emit_16(1865);
+emit_16(1930);
+emit_16(1866);
+emit_16(1930);
+emit_16(1865);
+emit_16(1930);
+emit_16(1866);
+emit_16(1931);
+emit_16(1867);
+emit_16(1931);
+emit_16(1866);
+emit_16(1931);
+emit_16(1867);
+emit_16(1932);
+emit_16(1868);
+emit_16(1932);
+emit_16(1867);
+emit_16(1932);
+emit_16(1868);
+emit_16(1933);
+emit_16(1869);
+emit_16(1933);
+emit_16(1868);
+emit_16(1933);
+emit_16(1869);
+emit_16(1934);
+emit_16(1870);
+emit_16(1934);
+emit_16(1869);
+emit_16(1934);
+emit_16(1870);
+emit_16(1935);
+emit_16(1871);
+emit_16(1935);
+emit_16(1870);
+emit_16(1935);
+emit_16(1871);
+emit_16(1936);
+emit_16(1872);
+emit_16(1936);
+emit_16(1871);
+emit_16(1936);
+emit_16(1872);
+emit_16(1937);
+emit_16(1873);
+emit_16(1937);
+emit_16(1872);
+emit_16(1937);
+emit_16(1873);
+emit_16(1938);
+emit_16(1874);
+emit_16(1938);
+emit_16(1873);
+emit_16(1938);
+emit_16(1874);
+emit_16(1939);
+emit_16(1875);
+emit_16(1939);
+emit_16(1874);
+emit_16(1939);
+emit_16(1875);
+emit_16(1940);
+emit_16(1876);
+emit_16(1940);
+emit_16(1875);
+emit_16(1940);
+emit_16(1876);
+emit_16(1941);
+emit_16(1877);
+emit_16(1941);
+emit_16(1876);
+emit_16(1941);
+emit_16(1877);
+emit_16(1942);
+emit_16(1878);
+emit_16(1942);
+emit_16(1877);
+emit_16(1942);
+emit_16(1878);
+emit_16(1943);
+emit_16(1879);
+emit_16(1943);
+emit_16(1878);
+emit_16(1943);
+emit_16(1879);
+emit_16(1944);
+emit_16(1880);
+emit_16(1944);
+emit_16(1879);
+emit_16(1944);
+emit_16(1880);
+emit_16(1945);
+emit_16(1881);
+emit_16(1945);
+emit_16(1880);
+emit_16(1945);
+emit_16(1881);
+emit_16(1946);
+emit_16(1882);
+emit_16(1946);
+emit_16(1881);
+emit_16(1946);
+emit_16(1882);
+emit_16(1947);
+emit_16(1883);
+emit_16(1947);
+emit_16(1882);
+emit_16(1947);
+emit_16(1883);
+emit_16(1948);
+emit_16(1884);
+emit_16(1948);
+emit_16(1883);
+emit_16(1948);
+emit_16(1884);
+emit_16(1949);
+emit_16(1885);
+emit_16(1949);
+emit_16(1884);
+emit_16(1949);
+emit_16(1885);
+emit_16(1950);
+emit_16(1886);
+emit_16(1950);
+emit_16(1885);
+emit_16(1950);
+emit_16(1886);
+emit_16(1951);
+emit_16(1887);
+emit_16(1951);
+emit_16(1886);
+emit_16(1951);
+emit_16(1887);
+emit_16(1952);
+emit_16(1888);
+emit_16(1952);
+emit_16(1887);
+emit_16(1952);
+emit_16(1888);
+emit_16(1953);
+emit_16(1889);
+emit_16(1953);
+emit_16(1888);
+emit_16(1953);
+emit_16(1889);
+emit_16(1954);
+emit_16(1890);
+emit_16(1954);
+emit_16(1889);
+emit_16(1954);
+emit_16(1890);
+emit_16(1955);
+emit_16(1891);
+emit_16(1955);
+emit_16(1890);
+emit_16(1955);
+emit_16(1891);
+emit_16(1956);
+emit_16(1892);
+emit_16(1956);
+emit_16(1891);
+emit_16(1956);
+emit_16(1892);
+emit_16(1957);
+emit_16(1893);
+emit_16(1957);
+emit_16(1892);
+emit_16(1957);
+emit_16(1893);
+emit_16(1958);
+emit_16(1894);
+emit_16(1958);
+emit_16(1893);
+emit_16(1958);
+emit_16(1894);
+emit_16(1959);
+emit_16(1895);
+emit_16(1959);
+emit_16(1894);
+emit_16(1959);
+emit_16(1895);
+emit_16(1960);
+emit_16(1896);
+emit_16(1960);
+emit_16(1895);
+emit_16(1960);
+emit_16(1896);
+emit_16(1961);
+emit_16(1897);
+emit_16(1961);
+emit_16(1896);
+emit_16(1961);
+emit_16(1897);
+emit_16(1962);
+emit_16(1898);
+emit_16(1962);
+emit_16(1897);
+emit_16(1962);
+emit_16(1898);
+emit_16(1963);
+emit_16(1899);
+emit_16(1963);
+emit_16(1898);
+emit_16(1963);
+emit_16(1899);
+emit_16(1964);
+emit_16(1900);
+emit_16(1964);
+emit_16(1899);
+emit_16(1964);
+emit_16(1900);
+emit_16(1965);
+emit_16(1901);
+emit_16(1965);
+emit_16(1900);
+emit_16(1965);
+emit_16(1901);
+emit_16(1966);
+emit_16(1902);
+emit_16(1966);
+emit_16(1901);
+emit_16(1966);
+emit_16(1902);
+emit_16(1967);
+emit_16(1903);
+emit_16(1967);
+emit_16(1902);
+emit_16(1967);
+emit_16(1903);
+emit_16(1968);
+emit_16(1904);
+emit_16(1968);
+emit_16(1903);
+emit_16(1968);
+emit_16(1904);
+emit_16(1969);
+emit_16(1905);
+emit_16(1969);
+emit_16(1904);
+emit_16(1969);
+emit_16(1905);
+emit_16(1970);
+emit_16(1906);
+emit_16(1970);
+emit_16(1905);
+emit_16(1970);
+emit_16(1906);
+emit_16(1971);
+emit_16(1907);
+emit_16(1971);
+emit_16(1906);
+emit_16(1971);
+emit_16(1907);
+emit_16(1972);
+emit_16(1908);
+emit_16(1972);
+emit_16(1907);
+emit_16(1972);
+emit_16(1908);
+emit_16(1973);
+emit_16(1909);
+emit_16(1973);
+emit_16(1908);
+emit_16(1973);
+emit_16(1909);
+emit_16(1974);
+emit_16(1910);
+emit_16(1974);
+emit_16(1909);
+emit_16(1974);
+emit_16(1910);
+emit_16(1975);
+emit_16(1911);
+emit_16(1975);
+emit_16(1910);
+emit_16(1975);
+emit_16(1911);
+emit_16(1976);
+emit_16(1912);
+emit_16(1976);
+emit_16(1911);
+emit_16(1976);
+emit_16(1912);
+emit_16(1977);
+emit_16(1913);
+emit_16(1977);
+emit_16(1912);
+emit_16(1977);
+emit_16(1913);
+emit_16(1978);
+emit_16(1914);
+emit_16(1978);
+emit_16(1913);
+emit_16(1978);
+emit_16(1914);
+emit_16(1979);
+emit_16(1915);
+emit_16(1979);
+emit_16(1914);
+emit_16(1979);
+emit_16(1915);
+emit_16(1980);
+emit_16(1916);
+emit_16(1980);
+emit_16(1915);
+emit_16(1980);
+emit_16(1916);
+emit_16(1981);
+emit_16(1917);
+emit_16(1981);
+emit_16(1916);
+emit_16(1981);
+emit_16(1917);
+emit_16(1982);
+emit_16(1918);
+emit_16(1982);
+emit_16(1917);
+emit_16(1982);
+emit_16(1918);
+emit_16(1983);
+emit_16(1919);
+emit_16(1983);
+emit_16(1918);
+emit_16(1984);
+emit_16(1920);
+emit_16(1985);
+emit_16(1921);
+emit_16(1985);
+emit_16(1920);
+emit_16(1985);
+emit_16(1921);
+emit_16(1986);
+emit_16(1922);
+emit_16(1986);
+emit_16(1921);
+emit_16(1986);
+emit_16(1922);
+emit_16(1987);
+emit_16(1923);
+emit_16(1987);
+emit_16(1922);
+emit_16(1987);
+emit_16(1923);
+emit_16(1988);
+emit_16(1924);
+emit_16(1988);
+emit_16(1923);
+emit_16(1988);
+emit_16(1924);
+emit_16(1989);
+emit_16(1925);
+emit_16(1989);
+emit_16(1924);
+emit_16(1989);
+emit_16(1925);
+emit_16(1990);
+emit_16(1926);
+emit_16(1990);
+emit_16(1925);
+emit_16(1990);
+emit_16(1926);
+emit_16(1991);
+emit_16(1927);
+emit_16(1991);
+emit_16(1926);
+emit_16(1991);
+emit_16(1927);
+emit_16(1992);
+emit_16(1928);
+emit_16(1992);
+emit_16(1927);
+emit_16(1992);
+emit_16(1928);
+emit_16(1993);
+emit_16(1929);
+emit_16(1993);
+emit_16(1928);
+emit_16(1993);
+emit_16(1929);
+emit_16(1994);
+emit_16(1930);
+emit_16(1994);
+emit_16(1929);
+emit_16(1994);
+emit_16(1930);
+emit_16(1995);
+emit_16(1931);
+emit_16(1995);
+emit_16(1930);
+emit_16(1995);
+emit_16(1931);
+emit_16(1996);
+emit_16(1932);
+emit_16(1996);
+emit_16(1931);
+emit_16(1996);
+emit_16(1932);
+emit_16(1997);
+emit_16(1933);
+emit_16(1997);
+emit_16(1932);
+emit_16(1997);
+emit_16(1933);
+emit_16(1998);
+emit_16(1934);
+emit_16(1998);
+emit_16(1933);
+emit_16(1998);
+emit_16(1934);
+emit_16(1999);
+emit_16(1935);
+emit_16(1999);
+emit_16(1934);
+emit_16(1999);
+emit_16(1935);
+emit_16(2000);
+emit_16(1936);
+emit_16(2000);
+emit_16(1935);
+emit_16(2000);
+emit_16(1936);
+emit_16(2001);
+emit_16(1937);
+emit_16(2001);
+emit_16(1936);
+emit_16(2001);
+emit_16(1937);
+emit_16(2002);
+emit_16(1938);
+emit_16(2002);
+emit_16(1937);
+emit_16(2002);
+emit_16(1938);
+emit_16(2003);
+emit_16(1939);
+emit_16(2003);
+emit_16(1938);
+emit_16(2003);
+emit_16(1939);
+emit_16(2004);
+emit_16(1940);
+emit_16(2004);
+emit_16(1939);
+emit_16(2004);
+emit_16(1940);
+emit_16(2005);
+emit_16(1941);
+emit_16(2005);
+emit_16(1940);
+emit_16(2005);
+emit_16(1941);
+emit_16(2006);
+emit_16(1942);
+emit_16(2006);
+emit_16(1941);
+emit_16(2006);
+emit_16(1942);
+emit_16(2007);
+emit_16(1943);
+emit_16(2007);
+emit_16(1942);
+emit_16(2007);
+emit_16(1943);
+emit_16(2008);
+emit_16(1944);
+emit_16(2008);
+emit_16(1943);
+emit_16(2008);
+emit_16(1944);
+emit_16(2009);
+emit_16(1945);
+emit_16(2009);
+emit_16(1944);
+emit_16(2009);
+emit_16(1945);
+emit_16(2010);
+emit_16(1946);
+emit_16(2010);
+emit_16(1945);
+emit_16(2010);
+emit_16(1946);
+emit_16(2011);
+emit_16(1947);
+emit_16(2011);
+emit_16(1946);
+emit_16(2011);
+emit_16(1947);
+emit_16(2012);
+emit_16(1948);
+emit_16(2012);
+emit_16(1947);
+emit_16(2012);
+emit_16(1948);
+emit_16(2013);
+emit_16(1949);
+emit_16(2013);
+emit_16(1948);
+emit_16(2013);
+emit_16(1949);
+emit_16(2014);
+emit_16(1950);
+emit_16(2014);
+emit_16(1949);
+emit_16(2014);
+emit_16(1950);
+emit_16(2015);
+emit_16(1951);
+emit_16(2015);
+emit_16(1950);
+emit_16(2015);
+emit_16(1951);
+emit_16(2016);
+emit_16(1952);
+emit_16(2016);
+emit_16(1951);
+emit_16(2016);
+emit_16(1952);
+emit_16(2017);
+emit_16(1953);
+emit_16(2017);
+emit_16(1952);
+emit_16(2017);
+emit_16(1953);
+emit_16(2018);
+emit_16(1954);
+emit_16(2018);
+emit_16(1953);
+emit_16(2018);
+emit_16(1954);
+emit_16(2019);
+emit_16(1955);
+emit_16(2019);
+emit_16(1954);
+emit_16(2019);
+emit_16(1955);
+emit_16(2020);
+emit_16(1956);
+emit_16(2020);
+emit_16(1955);
+emit_16(2020);
+emit_16(1956);
+emit_16(2021);
+emit_16(1957);
+emit_16(2021);
+emit_16(1956);
+emit_16(2021);
+emit_16(1957);
+emit_16(2022);
+emit_16(1958);
+emit_16(2022);
+emit_16(1957);
+emit_16(2022);
+emit_16(1958);
+emit_16(2023);
+emit_16(1959);
+emit_16(2023);
+emit_16(1958);
+emit_16(2023);
+emit_16(1959);
+emit_16(2024);
+emit_16(1960);
+emit_16(2024);
+emit_16(1959);
+emit_16(2024);
+emit_16(1960);
+emit_16(2025);
+emit_16(1961);
+emit_16(2025);
+emit_16(1960);
+emit_16(2025);
+emit_16(1961);
+emit_16(2026);
+emit_16(1962);
+emit_16(2026);
+emit_16(1961);
+emit_16(2026);
+emit_16(1962);
+emit_16(2027);
+emit_16(1963);
+emit_16(2027);
+emit_16(1962);
+emit_16(2027);
+emit_16(1963);
+emit_16(2028);
+emit_16(1964);
+emit_16(2028);
+emit_16(1963);
+emit_16(2028);
+emit_16(1964);
+emit_16(2029);
+emit_16(1965);
+emit_16(2029);
+emit_16(1964);
+emit_16(2029);
+emit_16(1965);
+emit_16(2030);
+emit_16(1966);
+emit_16(2030);
+emit_16(1965);
+emit_16(2030);
+emit_16(1966);
+emit_16(2031);
+emit_16(1967);
+emit_16(2031);
+emit_16(1966);
+emit_16(2031);
+emit_16(1967);
+emit_16(2032);
+emit_16(1968);
+emit_16(2032);
+emit_16(1967);
+emit_16(2032);
+emit_16(1968);
+emit_16(2033);
+emit_16(1969);
+emit_16(2033);
+emit_16(1968);
+emit_16(2033);
+emit_16(1969);
+emit_16(2034);
+emit_16(1970);
+emit_16(2034);
+emit_16(1969);
+emit_16(2034);
+emit_16(1970);
+emit_16(2035);
+emit_16(1971);
+emit_16(2035);
+emit_16(1970);
+emit_16(2035);
+emit_16(1971);
+emit_16(2036);
+emit_16(1972);
+emit_16(2036);
+emit_16(1971);
+emit_16(2036);
+emit_16(1972);
+emit_16(2037);
+emit_16(1973);
+emit_16(2037);
+emit_16(1972);
+emit_16(2037);
+emit_16(1973);
+emit_16(2038);
+emit_16(1974);
+emit_16(2038);
+emit_16(1973);
+emit_16(2038);
+emit_16(1974);
+emit_16(2039);
+emit_16(1975);
+emit_16(2039);
+emit_16(1974);
+emit_16(2039);
+emit_16(1975);
+emit_16(2040);
+emit_16(1976);
+emit_16(2040);
+emit_16(1975);
+emit_16(2040);
+emit_16(1976);
+emit_16(2041);
+emit_16(1977);
+emit_16(2041);
+emit_16(1976);
+emit_16(2041);
+emit_16(1977);
+emit_16(2042);
+emit_16(1978);
+emit_16(2042);
+emit_16(1977);
+emit_16(2042);
+emit_16(1978);
+emit_16(2043);
+emit_16(1979);
+emit_16(2043);
+emit_16(1978);
+emit_16(2043);
+emit_16(1979);
+emit_16(2044);
+emit_16(1980);
+emit_16(2044);
+emit_16(1979);
+emit_16(2044);
+emit_16(1980);
+emit_16(2045);
+emit_16(1981);
+emit_16(2045);
+emit_16(1980);
+emit_16(2045);
+emit_16(1981);
+emit_16(2046);
+emit_16(1982);
+emit_16(2046);
+emit_16(1981);
+emit_16(2046);
+emit_16(1982);
+emit_16(2047);
+emit_16(1983);
+emit_16(2047);
+emit_16(1982);
+emit_16(2048);
+emit_16(1984);
+emit_16(2049);
+emit_16(1985);
+emit_16(2049);
+emit_16(1984);
+emit_16(2049);
+emit_16(1985);
+emit_16(2050);
+emit_16(1986);
+emit_16(2050);
+emit_16(1985);
+emit_16(2050);
+emit_16(1986);
+emit_16(2051);
+emit_16(1987);
+emit_16(2051);
+emit_16(1986);
+emit_16(2051);
+emit_16(1987);
+emit_16(2052);
+emit_16(1988);
+emit_16(2052);
+emit_16(1987);
+emit_16(2052);
+emit_16(1988);
+emit_16(2053);
+emit_16(1989);
+emit_16(2053);
+emit_16(1988);
+emit_16(2053);
+emit_16(1989);
+emit_16(2054);
+emit_16(1990);
+emit_16(2054);
+emit_16(1989);
+emit_16(2054);
+emit_16(1990);
+emit_16(2055);
+emit_16(1991);
+emit_16(2055);
+emit_16(1990);
+emit_16(2055);
+emit_16(1991);
+emit_16(2056);
+emit_16(1992);
+emit_16(2056);
+emit_16(1991);
+emit_16(2056);
+emit_16(1992);
+emit_16(2057);
+emit_16(1993);
+emit_16(2057);
+emit_16(1992);
+emit_16(2057);
+emit_16(1993);
+emit_16(2058);
+emit_16(1994);
+emit_16(2058);
+emit_16(1993);
+emit_16(2058);
+emit_16(1994);
+emit_16(2059);
+emit_16(1995);
+emit_16(2059);
+emit_16(1994);
+emit_16(2059);
+emit_16(1995);
+emit_16(2060);
+emit_16(1996);
+emit_16(2060);
+emit_16(1995);
+emit_16(2060);
+emit_16(1996);
+emit_16(2061);
+emit_16(1997);
+emit_16(2061);
+emit_16(1996);
+emit_16(2061);
+emit_16(1997);
+emit_16(2062);
+emit_16(1998);
+emit_16(2062);
+emit_16(1997);
+emit_16(2062);
+emit_16(1998);
+emit_16(2063);
+emit_16(1999);
+emit_16(2063);
+emit_16(1998);
+emit_16(2063);
+emit_16(1999);
+emit_16(2064);
+emit_16(2000);
+emit_16(2064);
+emit_16(1999);
+emit_16(2064);
+emit_16(2000);
+emit_16(2065);
+emit_16(2001);
+emit_16(2065);
+emit_16(2000);
+emit_16(2065);
+emit_16(2001);
+emit_16(2066);
+emit_16(2002);
+emit_16(2066);
+emit_16(2001);
+emit_16(2066);
+emit_16(2002);
+emit_16(2067);
+emit_16(2003);
+emit_16(2067);
+emit_16(2002);
+emit_16(2067);
+emit_16(2003);
+emit_16(2068);
+emit_16(2004);
+emit_16(2068);
+emit_16(2003);
+emit_16(2068);
+emit_16(2004);
+emit_16(2069);
+emit_16(2005);
+emit_16(2069);
+emit_16(2004);
+emit_16(2069);
+emit_16(2005);
+emit_16(2070);
+emit_16(2006);
+emit_16(2070);
+emit_16(2005);
+emit_16(2070);
+emit_16(2006);
+emit_16(2071);
+emit_16(2007);
+emit_16(2071);
+emit_16(2006);
+emit_16(2071);
+emit_16(2007);
+emit_16(2072);
+emit_16(2008);
+emit_16(2072);
+emit_16(2007);
+emit_16(2072);
+emit_16(2008);
+emit_16(2073);
+emit_16(2009);
+emit_16(2073);
+emit_16(2008);
+emit_16(2073);
+emit_16(2009);
+emit_16(2074);
+emit_16(2010);
+emit_16(2074);
+emit_16(2009);
+emit_16(2074);
+emit_16(2010);
+emit_16(2075);
+emit_16(2011);
+emit_16(2075);
+emit_16(2010);
+emit_16(2075);
+emit_16(2011);
+emit_16(2076);
+emit_16(2012);
+emit_16(2076);
+emit_16(2011);
+emit_16(2076);
+emit_16(2012);
+emit_16(2077);
+emit_16(2013);
+emit_16(2077);
+emit_16(2012);
+emit_16(2077);
+emit_16(2013);
+emit_16(2078);
+emit_16(2014);
+emit_16(2078);
+emit_16(2013);
+emit_16(2078);
+emit_16(2014);
+emit_16(2079);
+emit_16(2015);
+emit_16(2079);
+emit_16(2014);
+emit_16(2079);
+emit_16(2015);
+emit_16(2080);
+emit_16(2016);
+emit_16(2080);
+emit_16(2015);
+emit_16(2080);
+emit_16(2016);
+emit_16(2081);
+emit_16(2017);
+emit_16(2081);
+emit_16(2016);
+emit_16(2081);
+emit_16(2017);
+emit_16(2082);
+emit_16(2018);
+emit_16(2082);
+emit_16(2017);
+emit_16(2082);
+emit_16(2018);
+emit_16(2083);
+emit_16(2019);
+emit_16(2083);
+emit_16(2018);
+emit_16(2083);
+emit_16(2019);
+emit_16(2084);
+emit_16(2020);
+emit_16(2084);
+emit_16(2019);
+emit_16(2084);
+emit_16(2020);
+emit_16(2085);
+emit_16(2021);
+emit_16(2085);
+emit_16(2020);
+emit_16(2085);
+emit_16(2021);
+emit_16(2086);
+emit_16(2022);
+emit_16(2086);
+emit_16(2021);
+emit_16(2086);
+emit_16(2022);
+emit_16(2087);
+emit_16(2023);
+emit_16(2087);
+emit_16(2022);
+emit_16(2087);
+emit_16(2023);
+emit_16(2088);
+emit_16(2024);
+emit_16(2088);
+emit_16(2023);
+emit_16(2088);
+emit_16(2024);
+emit_16(2089);
+emit_16(2025);
+emit_16(2089);
+emit_16(2024);
+emit_16(2089);
+emit_16(2025);
+emit_16(2090);
+emit_16(2026);
+emit_16(2090);
+emit_16(2025);
+emit_16(2090);
+emit_16(2026);
+emit_16(2091);
+emit_16(2027);
+emit_16(2091);
+emit_16(2026);
+emit_16(2091);
+emit_16(2027);
+emit_16(2092);
+emit_16(2028);
+emit_16(2092);
+emit_16(2027);
+emit_16(2092);
+emit_16(2028);
+emit_16(2093);
+emit_16(2029);
+emit_16(2093);
+emit_16(2028);
+emit_16(2093);
+emit_16(2029);
+emit_16(2094);
+emit_16(2030);
+emit_16(2094);
+emit_16(2029);
+emit_16(2094);
+emit_16(2030);
+emit_16(2095);
+emit_16(2031);
+emit_16(2095);
+emit_16(2030);
+emit_16(2095);
+emit_16(2031);
+emit_16(2096);
+emit_16(2032);
+emit_16(2096);
+emit_16(2031);
+emit_16(2096);
+emit_16(2032);
+emit_16(2097);
+emit_16(2033);
+emit_16(2097);
+emit_16(2032);
+emit_16(2097);
+emit_16(2033);
+emit_16(2098);
+emit_16(2034);
+emit_16(2098);
+emit_16(2033);
+emit_16(2098);
+emit_16(2034);
+emit_16(2099);
+emit_16(2035);
+emit_16(2099);
+emit_16(2034);
+emit_16(2099);
+emit_16(2035);
+emit_16(2100);
+emit_16(2036);
+emit_16(2100);
+emit_16(2035);
+emit_16(2100);
+emit_16(2036);
+emit_16(2101);
+emit_16(2037);
+emit_16(2101);
+emit_16(2036);
+emit_16(2101);
+emit_16(2037);
+emit_16(2102);
+emit_16(2038);
+emit_16(2102);
+emit_16(2037);
+emit_16(2102);
+emit_16(2038);
+emit_16(2103);
+emit_16(2039);
+emit_16(2103);
+emit_16(2038);
+emit_16(2103);
+emit_16(2039);
+emit_16(2104);
+emit_16(2040);
+emit_16(2104);
+emit_16(2039);
+emit_16(2104);
+emit_16(2040);
+emit_16(2105);
+emit_16(2041);
+emit_16(2105);
+emit_16(2040);
+emit_16(2105);
+emit_16(2041);
+emit_16(2106);
+emit_16(2042);
+emit_16(2106);
+emit_16(2041);
+emit_16(2106);
+emit_16(2042);
+emit_16(2107);
+emit_16(2043);
+emit_16(2107);
+emit_16(2042);
+emit_16(2107);
+emit_16(2043);
+emit_16(2108);
+emit_16(2044);
+emit_16(2108);
+emit_16(2043);
+emit_16(2108);
+emit_16(2044);
+emit_16(2109);
+emit_16(2045);
+emit_16(2109);
+emit_16(2044);
+emit_16(2109);
+emit_16(2045);
+emit_16(2110);
+emit_16(2046);
+emit_16(2110);
+emit_16(2045);
+emit_16(2110);
+emit_16(2046);
+emit_16(2111);
+emit_16(2047);
+emit_16(2111);
+emit_16(2046);
+emit_16(2112);
+emit_16(2048);
+emit_16(2113);
+emit_16(2049);
+emit_16(2113);
+emit_16(2048);
+emit_16(2113);
+emit_16(2049);
+emit_16(2114);
+emit_16(2050);
+emit_16(2114);
+emit_16(2049);
+emit_16(2114);
+emit_16(2050);
+emit_16(2115);
+emit_16(2051);
+emit_16(2115);
+emit_16(2050);
+emit_16(2115);
+emit_16(2051);
+emit_16(2116);
+emit_16(2052);
+emit_16(2116);
+emit_16(2051);
+emit_16(2116);
+emit_16(2052);
+emit_16(2117);
+emit_16(2053);
+emit_16(2117);
+emit_16(2052);
+emit_16(2117);
+emit_16(2053);
+emit_16(2118);
+emit_16(2054);
+emit_16(2118);
+emit_16(2053);
+emit_16(2118);
+emit_16(2054);
+emit_16(2119);
+emit_16(2055);
+emit_16(2119);
+emit_16(2054);
+emit_16(2119);
+emit_16(2055);
+emit_16(2120);
+emit_16(2056);
+emit_16(2120);
+emit_16(2055);
+emit_16(2120);
+emit_16(2056);
+emit_16(2121);
+emit_16(2057);
+emit_16(2121);
+emit_16(2056);
+emit_16(2121);
+emit_16(2057);
+emit_16(2122);
+emit_16(2058);
+emit_16(2122);
+emit_16(2057);
+emit_16(2122);
+emit_16(2058);
+emit_16(2123);
+emit_16(2059);
+emit_16(2123);
+emit_16(2058);
+emit_16(2123);
+emit_16(2059);
+emit_16(2124);
+emit_16(2060);
+emit_16(2124);
+emit_16(2059);
+emit_16(2124);
+emit_16(2060);
+emit_16(2125);
+emit_16(2061);
+emit_16(2125);
+emit_16(2060);
+emit_16(2125);
+emit_16(2061);
+emit_16(2126);
+emit_16(2062);
+emit_16(2126);
+emit_16(2061);
+emit_16(2126);
+emit_16(2062);
+emit_16(2127);
+emit_16(2063);
+emit_16(2127);
+emit_16(2062);
+emit_16(2127);
+emit_16(2063);
+emit_16(2128);
+emit_16(2064);
+emit_16(2128);
+emit_16(2063);
+emit_16(2128);
+emit_16(2064);
+emit_16(2129);
+emit_16(2065);
+emit_16(2129);
+emit_16(2064);
+emit_16(2129);
+emit_16(2065);
+emit_16(2130);
+emit_16(2066);
+emit_16(2130);
+emit_16(2065);
+emit_16(2130);
+emit_16(2066);
+emit_16(2131);
+emit_16(2067);
+emit_16(2131);
+emit_16(2066);
+emit_16(2131);
+emit_16(2067);
+emit_16(2132);
+emit_16(2068);
+emit_16(2132);
+emit_16(2067);
+emit_16(2132);
+emit_16(2068);
+emit_16(2133);
+emit_16(2069);
+emit_16(2133);
+emit_16(2068);
+emit_16(2133);
+emit_16(2069);
+emit_16(2134);
+emit_16(2070);
+emit_16(2134);
+emit_16(2069);
+emit_16(2134);
+emit_16(2070);
+emit_16(2135);
+emit_16(2071);
+emit_16(2135);
+emit_16(2070);
+emit_16(2135);
+emit_16(2071);
+emit_16(2136);
+emit_16(2072);
+emit_16(2136);
+emit_16(2071);
+emit_16(2136);
+emit_16(2072);
+emit_16(2137);
+emit_16(2073);
+emit_16(2137);
+emit_16(2072);
+emit_16(2137);
+emit_16(2073);
+emit_16(2138);
+emit_16(2074);
+emit_16(2138);
+emit_16(2073);
+emit_16(2138);
+emit_16(2074);
+emit_16(2139);
+emit_16(2075);
+emit_16(2139);
+emit_16(2074);
+emit_16(2139);
+emit_16(2075);
+emit_16(2140);
+emit_16(2076);
+emit_16(2140);
+emit_16(2075);
+emit_16(2140);
+emit_16(2076);
+emit_16(2141);
+emit_16(2077);
+emit_16(2141);
+emit_16(2076);
+emit_16(2141);
+emit_16(2077);
+emit_16(2142);
+emit_16(2078);
+emit_16(2142);
+emit_16(2077);
+emit_16(2142);
+emit_16(2078);
+emit_16(2143);
+emit_16(2079);
+emit_16(2143);
+emit_16(2078);
+emit_16(2143);
+emit_16(2079);
+emit_16(2144);
+emit_16(2080);
+emit_16(2144);
+emit_16(2079);
+emit_16(2144);
+emit_16(2080);
+emit_16(2145);
+emit_16(2081);
+emit_16(2145);
+emit_16(2080);
+emit_16(2145);
+emit_16(2081);
+emit_16(2146);
+emit_16(2082);
+emit_16(2146);
+emit_16(2081);
+emit_16(2146);
+emit_16(2082);
+emit_16(2147);
+emit_16(2083);
+emit_16(2147);
+emit_16(2082);
+emit_16(2147);
+emit_16(2083);
+emit_16(2148);
+emit_16(2084);
+emit_16(2148);
+emit_16(2083);
+emit_16(2148);
+emit_16(2084);
+emit_16(2149);
+emit_16(2085);
+emit_16(2149);
+emit_16(2084);
+emit_16(2149);
+emit_16(2085);
+emit_16(2150);
+emit_16(2086);
+emit_16(2150);
+emit_16(2085);
+emit_16(2150);
+emit_16(2086);
+emit_16(2151);
+emit_16(2087);
+emit_16(2151);
+emit_16(2086);
+emit_16(2151);
+emit_16(2087);
+emit_16(2152);
+emit_16(2088);
+emit_16(2152);
+emit_16(2087);
+emit_16(2152);
+emit_16(2088);
+emit_16(2153);
+emit_16(2089);
+emit_16(2153);
+emit_16(2088);
+emit_16(2153);
+emit_16(2089);
+emit_16(2154);
+emit_16(2090);
+emit_16(2154);
+emit_16(2089);
+emit_16(2154);
+emit_16(2090);
+emit_16(2155);
+emit_16(2091);
+emit_16(2155);
+emit_16(2090);
+emit_16(2155);
+emit_16(2091);
+emit_16(2156);
+emit_16(2092);
+emit_16(2156);
+emit_16(2091);
+emit_16(2156);
+emit_16(2092);
+emit_16(2157);
+emit_16(2093);
+emit_16(2157);
+emit_16(2092);
+emit_16(2157);
+emit_16(2093);
+emit_16(2158);
+emit_16(2094);
+emit_16(2158);
+emit_16(2093);
+emit_16(2158);
+emit_16(2094);
+emit_16(2159);
+emit_16(2095);
+emit_16(2159);
+emit_16(2094);
+emit_16(2159);
+emit_16(2095);
+emit_16(2160);
+emit_16(2096);
+emit_16(2160);
+emit_16(2095);
+emit_16(2160);
+emit_16(2096);
+emit_16(2161);
+emit_16(2097);
+emit_16(2161);
+emit_16(2096);
+emit_16(2161);
+emit_16(2097);
+emit_16(2162);
+emit_16(2098);
+emit_16(2162);
+emit_16(2097);
+emit_16(2162);
+emit_16(2098);
+emit_16(2163);
+emit_16(2099);
+emit_16(2163);
+emit_16(2098);
+emit_16(2163);
+emit_16(2099);
+emit_16(2164);
+emit_16(2100);
+emit_16(2164);
+emit_16(2099);
+emit_16(2164);
+emit_16(2100);
+emit_16(2165);
+emit_16(2101);
+emit_16(2165);
+emit_16(2100);
+emit_16(2165);
+emit_16(2101);
+emit_16(2166);
+emit_16(2102);
+emit_16(2166);
+emit_16(2101);
+emit_16(2166);
+emit_16(2102);
+emit_16(2167);
+emit_16(2103);
+emit_16(2167);
+emit_16(2102);
+emit_16(2167);
+emit_16(2103);
+emit_16(2168);
+emit_16(2104);
+emit_16(2168);
+emit_16(2103);
+emit_16(2168);
+emit_16(2104);
+emit_16(2169);
+emit_16(2105);
+emit_16(2169);
+emit_16(2104);
+emit_16(2169);
+emit_16(2105);
+emit_16(2170);
+emit_16(2106);
+emit_16(2170);
+emit_16(2105);
+emit_16(2170);
+emit_16(2106);
+emit_16(2171);
+emit_16(2107);
+emit_16(2171);
+emit_16(2106);
+emit_16(2171);
+emit_16(2107);
+emit_16(2172);
+emit_16(2108);
+emit_16(2172);
+emit_16(2107);
+emit_16(2172);
+emit_16(2108);
+emit_16(2173);
+emit_16(2109);
+emit_16(2173);
+emit_16(2108);
+emit_16(2173);
+emit_16(2109);
+emit_16(2174);
+emit_16(2110);
+emit_16(2174);
+emit_16(2109);
+emit_16(2174);
+emit_16(2110);
+emit_16(2175);
+emit_16(2111);
+emit_16(2175);
+emit_16(2110);
+emit_16(2176);
+emit_16(2112);
+emit_16(2177);
+emit_16(2113);
+emit_16(2177);
+emit_16(2112);
+emit_16(2177);
+emit_16(2113);
+emit_16(2178);
+emit_16(2114);
+emit_16(2178);
+emit_16(2113);
+emit_16(2178);
+emit_16(2114);
+emit_16(2179);
+emit_16(2115);
+emit_16(2179);
+emit_16(2114);
+emit_16(2179);
+emit_16(2115);
+emit_16(2180);
+emit_16(2116);
+emit_16(2180);
+emit_16(2115);
+emit_16(2180);
+emit_16(2116);
+emit_16(2181);
+emit_16(2117);
+emit_16(2181);
+emit_16(2116);
+emit_16(2181);
+emit_16(2117);
+emit_16(2182);
+emit_16(2118);
+emit_16(2182);
+emit_16(2117);
+emit_16(2182);
+emit_16(2118);
+emit_16(2183);
+emit_16(2119);
+emit_16(2183);
+emit_16(2118);
+emit_16(2183);
+emit_16(2119);
+emit_16(2184);
+emit_16(2120);
+emit_16(2184);
+emit_16(2119);
+emit_16(2184);
+emit_16(2120);
+emit_16(2185);
+emit_16(2121);
+emit_16(2185);
+emit_16(2120);
+emit_16(2185);
+emit_16(2121);
+emit_16(2186);
+emit_16(2122);
+emit_16(2186);
+emit_16(2121);
+emit_16(2186);
+emit_16(2122);
+emit_16(2187);
+emit_16(2123);
+emit_16(2187);
+emit_16(2122);
+emit_16(2187);
+emit_16(2123);
+emit_16(2188);
+emit_16(2124);
+emit_16(2188);
+emit_16(2123);
+emit_16(2188);
+emit_16(2124);
+emit_16(2189);
+emit_16(2125);
+emit_16(2189);
+emit_16(2124);
+emit_16(2189);
+emit_16(2125);
+emit_16(2190);
+emit_16(2126);
+emit_16(2190);
+emit_16(2125);
+emit_16(2190);
+emit_16(2126);
+emit_16(2191);
+emit_16(2127);
+emit_16(2191);
+emit_16(2126);
+emit_16(2191);
+emit_16(2127);
+emit_16(2192);
+emit_16(2128);
+emit_16(2192);
+emit_16(2127);
+emit_16(2192);
+emit_16(2128);
+emit_16(2193);
+emit_16(2129);
+emit_16(2193);
+emit_16(2128);
+emit_16(2193);
+emit_16(2129);
+emit_16(2194);
+emit_16(2130);
+emit_16(2194);
+emit_16(2129);
+emit_16(2194);
+emit_16(2130);
+emit_16(2195);
+emit_16(2131);
+emit_16(2195);
+emit_16(2130);
+emit_16(2195);
+emit_16(2131);
+emit_16(2196);
+emit_16(2132);
+emit_16(2196);
+emit_16(2131);
+emit_16(2196);
+emit_16(2132);
+emit_16(2197);
+emit_16(2133);
+emit_16(2197);
+emit_16(2132);
+emit_16(2197);
+emit_16(2133);
+emit_16(2198);
+emit_16(2134);
+emit_16(2198);
+emit_16(2133);
+emit_16(2198);
+emit_16(2134);
+emit_16(2199);
+emit_16(2135);
+emit_16(2199);
+emit_16(2134);
+emit_16(2199);
+emit_16(2135);
+emit_16(2200);
+emit_16(2136);
+emit_16(2200);
+emit_16(2135);
+emit_16(2200);
+emit_16(2136);
+emit_16(2201);
+emit_16(2137);
+emit_16(2201);
+emit_16(2136);
+emit_16(2201);
+emit_16(2137);
+emit_16(2202);
+emit_16(2138);
+emit_16(2202);
+emit_16(2137);
+emit_16(2202);
+emit_16(2138);
+emit_16(2203);
+emit_16(2139);
+emit_16(2203);
+emit_16(2138);
+emit_16(2203);
+emit_16(2139);
+emit_16(2204);
+emit_16(2140);
+emit_16(2204);
+emit_16(2139);
+emit_16(2204);
+emit_16(2140);
+emit_16(2205);
+emit_16(2141);
+emit_16(2205);
+emit_16(2140);
+emit_16(2205);
+emit_16(2141);
+emit_16(2206);
+emit_16(2142);
+emit_16(2206);
+emit_16(2141);
+emit_16(2206);
+emit_16(2142);
+emit_16(2207);
+emit_16(2143);
+emit_16(2207);
+emit_16(2142);
+emit_16(2207);
+emit_16(2143);
+emit_16(2208);
+emit_16(2144);
+emit_16(2208);
+emit_16(2143);
+emit_16(2208);
+emit_16(2144);
+emit_16(2209);
+emit_16(2145);
+emit_16(2209);
+emit_16(2144);
+emit_16(2209);
+emit_16(2145);
+emit_16(2210);
+emit_16(2146);
+emit_16(2210);
+emit_16(2145);
+emit_16(2210);
+emit_16(2146);
+emit_16(2211);
+emit_16(2147);
+emit_16(2211);
+emit_16(2146);
+emit_16(2211);
+emit_16(2147);
+emit_16(2212);
+emit_16(2148);
+emit_16(2212);
+emit_16(2147);
+emit_16(2212);
+emit_16(2148);
+emit_16(2213);
+emit_16(2149);
+emit_16(2213);
+emit_16(2148);
+emit_16(2213);
+emit_16(2149);
+emit_16(2214);
+emit_16(2150);
+emit_16(2214);
+emit_16(2149);
+emit_16(2214);
+emit_16(2150);
+emit_16(2215);
+emit_16(2151);
+emit_16(2215);
+emit_16(2150);
+emit_16(2215);
+emit_16(2151);
+emit_16(2216);
+emit_16(2152);
+emit_16(2216);
+emit_16(2151);
+emit_16(2216);
+emit_16(2152);
+emit_16(2217);
+emit_16(2153);
+emit_16(2217);
+emit_16(2152);
+emit_16(2217);
+emit_16(2153);
+emit_16(2218);
+emit_16(2154);
+emit_16(2218);
+emit_16(2153);
+emit_16(2218);
+emit_16(2154);
+emit_16(2219);
+emit_16(2155);
+emit_16(2219);
+emit_16(2154);
+emit_16(2219);
+emit_16(2155);
+emit_16(2220);
+emit_16(2156);
+emit_16(2220);
+emit_16(2155);
+emit_16(2220);
+emit_16(2156);
+emit_16(2221);
+emit_16(2157);
+emit_16(2221);
+emit_16(2156);
+emit_16(2221);
+emit_16(2157);
+emit_16(2222);
+emit_16(2158);
+emit_16(2222);
+emit_16(2157);
+emit_16(2222);
+emit_16(2158);
+emit_16(2223);
+emit_16(2159);
+emit_16(2223);
+emit_16(2158);
+emit_16(2223);
+emit_16(2159);
+emit_16(2224);
+emit_16(2160);
+emit_16(2224);
+emit_16(2159);
+emit_16(2224);
+emit_16(2160);
+emit_16(2225);
+emit_16(2161);
+emit_16(2225);
+emit_16(2160);
+emit_16(2225);
+emit_16(2161);
+emit_16(2226);
+emit_16(2162);
+emit_16(2226);
+emit_16(2161);
+emit_16(2226);
+emit_16(2162);
+emit_16(2227);
+emit_16(2163);
+emit_16(2227);
+emit_16(2162);
+emit_16(2227);
+emit_16(2163);
+emit_16(2228);
+emit_16(2164);
+emit_16(2228);
+emit_16(2163);
+emit_16(2228);
+emit_16(2164);
+emit_16(2229);
+emit_16(2165);
+emit_16(2229);
+emit_16(2164);
+emit_16(2229);
+emit_16(2165);
+emit_16(2230);
+emit_16(2166);
+emit_16(2230);
+emit_16(2165);
+emit_16(2230);
+emit_16(2166);
+emit_16(2231);
+emit_16(2167);
+emit_16(2231);
+emit_16(2166);
+emit_16(2231);
+emit_16(2167);
+emit_16(2232);
+emit_16(2168);
+emit_16(2232);
+emit_16(2167);
+emit_16(2232);
+emit_16(2168);
+emit_16(2233);
+emit_16(2169);
+emit_16(2233);
+emit_16(2168);
+emit_16(2233);
+emit_16(2169);
+emit_16(2234);
+emit_16(2170);
+emit_16(2234);
+emit_16(2169);
+emit_16(2234);
+emit_16(2170);
+emit_16(2235);
+emit_16(2171);
+emit_16(2235);
+emit_16(2170);
+emit_16(2235);
+emit_16(2171);
+emit_16(2236);
+emit_16(2172);
+emit_16(2236);
+emit_16(2171);
+emit_16(2236);
+emit_16(2172);
+emit_16(2237);
+emit_16(2173);
+emit_16(2237);
+emit_16(2172);
+emit_16(2237);
+emit_16(2173);
+emit_16(2238);
+emit_16(2174);
+emit_16(2238);
+emit_16(2173);
+emit_16(2238);
+emit_16(2174);
+emit_16(2239);
+emit_16(2175);
+emit_16(2239);
+emit_16(2174);
+emit_start(Landscape08Idx)
+emit_16(0);
+emit_16(1);
+emit_16(2);
+emit_16(3);
+emit_16(2);
+emit_16(1);
+emit_16(2);
+emit_16(3);
+emit_16(4);
+emit_16(5);
+emit_16(4);
+emit_16(3);
+emit_16(4);
+emit_16(5);
+emit_16(6);
+emit_16(7);
+emit_16(6);
+emit_16(5);
+emit_16(6);
+emit_16(7);
+emit_16(8);
+emit_16(9);
+emit_16(8);
+emit_16(7);
+emit_16(8);
+emit_16(9);
+emit_16(10);
+emit_16(11);
+emit_16(10);
+emit_16(9);
+emit_16(10);
+emit_16(11);
+emit_16(12);
+emit_16(13);
+emit_16(12);
+emit_16(11);
+emit_16(12);
+emit_16(13);
+emit_16(14);
+emit_16(15);
+emit_16(14);
+emit_16(13);
+emit_16(14);
+emit_16(15);
+emit_16(16);
+emit_16(17);
+emit_16(16);
+emit_16(15);
+emit_16(16);
+emit_16(17);
+emit_16(18);
+emit_16(19);
+emit_16(18);
+emit_16(17);
+emit_16(18);
+emit_16(19);
+emit_16(20);
+emit_16(21);
+emit_16(20);
+emit_16(19);
+emit_16(20);
+emit_16(21);
+emit_16(22);
+emit_16(23);
+emit_16(22);
+emit_16(21);
+emit_16(22);
+emit_16(23);
+emit_16(24);
+emit_16(25);
+emit_16(24);
+emit_16(23);
+emit_16(24);
+emit_16(25);
+emit_16(26);
+emit_16(27);
+emit_16(26);
+emit_16(25);
+emit_16(26);
+emit_16(27);
+emit_16(28);
+emit_16(29);
+emit_16(28);
+emit_16(27);
+emit_16(28);
+emit_16(29);
+emit_16(30);
+emit_16(31);
+emit_16(30);
+emit_16(29);
+emit_16(30);
+emit_16(31);
+emit_16(32);
+emit_16(33);
+emit_16(32);
+emit_16(31);
+emit_16(32);
+emit_16(33);
+emit_16(34);
+emit_16(35);
+emit_16(34);
+emit_16(33);
+emit_16(34);
+emit_16(35);
+emit_16(36);
+emit_16(37);
+emit_16(36);
+emit_16(35);
+emit_16(36);
+emit_16(37);
+emit_16(38);
+emit_16(39);
+emit_16(38);
+emit_16(37);
+emit_16(38);
+emit_16(39);
+emit_16(40);
+emit_16(41);
+emit_16(40);
+emit_16(39);
+emit_16(40);
+emit_16(41);
+emit_16(42);
+emit_16(43);
+emit_16(42);
+emit_16(41);
+emit_16(42);
+emit_16(43);
+emit_16(44);
+emit_16(45);
+emit_16(44);
+emit_16(43);
+emit_16(44);
+emit_16(45);
+emit_16(46);
+emit_16(47);
+emit_16(46);
+emit_16(45);
+emit_16(46);
+emit_16(47);
+emit_16(48);
+emit_16(49);
+emit_16(48);
+emit_16(47);
+emit_16(48);
+emit_16(49);
+emit_16(50);
+emit_16(51);
+emit_16(50);
+emit_16(49);
+emit_16(50);
+emit_16(51);
+emit_16(52);
+emit_16(53);
+emit_16(52);
+emit_16(51);
+emit_16(52);
+emit_16(53);
+emit_16(54);
+emit_16(55);
+emit_16(54);
+emit_16(53);
+emit_16(54);
+emit_16(55);
+emit_16(56);
+emit_16(57);
+emit_16(56);
+emit_16(55);
+emit_16(56);
+emit_16(57);
+emit_16(58);
+emit_16(59);
+emit_16(58);
+emit_16(57);
+emit_16(58);
+emit_16(59);
+emit_16(60);
+emit_16(61);
+emit_16(60);
+emit_16(59);
+emit_16(60);
+emit_16(61);
+emit_16(62);
+emit_16(63);
+emit_16(62);
+emit_16(61);
+emit_16(62);
+emit_16(63);
+emit_16(64);
+emit_16(65);
+emit_16(64);
+emit_16(63);
+emit_16(64);
+emit_16(65);
+emit_16(66);
+emit_16(67);
+emit_16(66);
+emit_16(65);
+emit_16(66);
+emit_16(67);
+emit_16(68);
+emit_16(69);
+emit_16(68);
+emit_16(67);
+emit_16(68);
+emit_16(69);
+emit_16(70);
+emit_16(71);
+emit_16(70);
+emit_16(69);
+emit_16(70);
+emit_16(71);
+emit_16(72);
+emit_16(73);
+emit_16(72);
+emit_16(71);
+emit_16(72);
+emit_16(73);
+emit_16(74);
+emit_16(75);
+emit_16(74);
+emit_16(73);
+emit_16(74);
+emit_16(75);
+emit_16(76);
+emit_16(77);
+emit_16(76);
+emit_16(75);
+emit_16(76);
+emit_16(77);
+emit_16(78);
+emit_16(79);
+emit_16(78);
+emit_16(77);
+emit_16(78);
+emit_16(79);
+emit_16(80);
+emit_16(81);
+emit_16(80);
+emit_16(79);
+emit_16(80);
+emit_16(81);
+emit_16(82);
+emit_16(83);
+emit_16(82);
+emit_16(81);
+emit_16(82);
+emit_16(83);
+emit_16(84);
+emit_16(85);
+emit_16(84);
+emit_16(83);
+emit_16(84);
+emit_16(85);
+emit_16(86);
+emit_16(87);
+emit_16(86);
+emit_16(85);
+emit_16(86);
+emit_16(87);
+emit_16(88);
+emit_16(89);
+emit_16(88);
+emit_16(87);
+emit_16(88);
+emit_16(89);
+emit_16(90);
+emit_16(91);
+emit_16(90);
+emit_16(89);
+emit_16(90);
+emit_16(91);
+emit_16(92);
+emit_16(93);
+emit_16(92);
+emit_16(91);
+emit_16(92);
+emit_16(93);
+emit_16(94);
+emit_16(95);
+emit_16(94);
+emit_16(93);
+emit_16(94);
+emit_16(95);
+emit_16(96);
+emit_16(97);
+emit_16(96);
+emit_16(95);
+emit_16(96);
+emit_16(97);
+emit_16(98);
+emit_16(99);
+emit_16(98);
+emit_16(97);
+emit_16(98);
+emit_16(99);
+emit_16(100);
+emit_16(101);
+emit_16(100);
+emit_16(99);
+emit_16(100);
+emit_16(101);
+emit_16(102);
+emit_16(103);
+emit_16(102);
+emit_16(101);
+emit_16(102);
+emit_16(103);
+emit_16(104);
+emit_16(105);
+emit_16(104);
+emit_16(103);
+emit_16(104);
+emit_16(105);
+emit_16(106);
+emit_16(107);
+emit_16(106);
+emit_16(105);
+emit_16(106);
+emit_16(107);
+emit_16(108);
+emit_16(109);
+emit_16(108);
+emit_16(107);
+emit_16(108);
+emit_16(109);
+emit_16(110);
+emit_16(111);
+emit_16(110);
+emit_16(109);
+emit_16(110);
+emit_16(111);
+emit_16(112);
+emit_16(113);
+emit_16(112);
+emit_16(111);
+emit_16(112);
+emit_16(113);
+emit_16(114);
+emit_16(115);
+emit_16(114);
+emit_16(113);
+emit_16(114);
+emit_16(115);
+emit_16(116);
+emit_16(117);
+emit_16(116);
+emit_16(115);
+emit_16(116);
+emit_16(117);
+emit_16(118);
+emit_16(119);
+emit_16(118);
+emit_16(117);
+emit_16(118);
+emit_16(119);
+emit_16(120);
+emit_16(121);
+emit_16(120);
+emit_16(119);
+emit_16(120);
+emit_16(121);
+emit_16(122);
+emit_16(123);
+emit_16(122);
+emit_16(121);
+emit_16(122);
+emit_16(123);
+emit_16(124);
+emit_16(125);
+emit_16(124);
+emit_16(123);
+emit_16(124);
+emit_16(125);
+emit_16(126);
+emit_16(127);
+emit_16(126);
+emit_16(125);
+emit_16(126);
+emit_16(127);
+emit_16(128);
+emit_16(129);
+emit_16(128);
+emit_16(127);
+emit_16(128);
+emit_16(129);
+emit_16(130);
+emit_16(131);
+emit_16(130);
+emit_16(129);
+emit_16(132);
+emit_16(0);
+emit_16(133);
+emit_16(2);
+emit_16(133);
+emit_16(0);
+emit_16(133);
+emit_16(2);
+emit_16(134);
+emit_16(4);
+emit_16(134);
+emit_16(2);
+emit_16(134);
+emit_16(4);
+emit_16(135);
+emit_16(6);
+emit_16(135);
+emit_16(4);
+emit_16(135);
+emit_16(6);
+emit_16(136);
+emit_16(8);
+emit_16(136);
+emit_16(6);
+emit_16(136);
+emit_16(8);
+emit_16(137);
+emit_16(10);
+emit_16(137);
+emit_16(8);
+emit_16(137);
+emit_16(10);
+emit_16(138);
+emit_16(12);
+emit_16(138);
+emit_16(10);
+emit_16(138);
+emit_16(12);
+emit_16(139);
+emit_16(14);
+emit_16(139);
+emit_16(12);
+emit_16(139);
+emit_16(14);
+emit_16(140);
+emit_16(16);
+emit_16(140);
+emit_16(14);
+emit_16(140);
+emit_16(16);
+emit_16(141);
+emit_16(18);
+emit_16(141);
+emit_16(16);
+emit_16(141);
+emit_16(18);
+emit_16(142);
+emit_16(20);
+emit_16(142);
+emit_16(18);
+emit_16(142);
+emit_16(20);
+emit_16(143);
+emit_16(22);
+emit_16(143);
+emit_16(20);
+emit_16(143);
+emit_16(22);
+emit_16(144);
+emit_16(24);
+emit_16(144);
+emit_16(22);
+emit_16(144);
+emit_16(24);
+emit_16(145);
+emit_16(26);
+emit_16(145);
+emit_16(24);
+emit_16(145);
+emit_16(26);
+emit_16(146);
+emit_16(28);
+emit_16(146);
+emit_16(26);
+emit_16(146);
+emit_16(28);
+emit_16(147);
+emit_16(30);
+emit_16(147);
+emit_16(28);
+emit_16(147);
+emit_16(30);
+emit_16(148);
+emit_16(32);
+emit_16(148);
+emit_16(30);
+emit_16(148);
+emit_16(32);
+emit_16(149);
+emit_16(34);
+emit_16(149);
+emit_16(32);
+emit_16(149);
+emit_16(34);
+emit_16(150);
+emit_16(36);
+emit_16(150);
+emit_16(34);
+emit_16(150);
+emit_16(36);
+emit_16(151);
+emit_16(38);
+emit_16(151);
+emit_16(36);
+emit_16(151);
+emit_16(38);
+emit_16(152);
+emit_16(40);
+emit_16(152);
+emit_16(38);
+emit_16(152);
+emit_16(40);
+emit_16(153);
+emit_16(42);
+emit_16(153);
+emit_16(40);
+emit_16(153);
+emit_16(42);
+emit_16(154);
+emit_16(44);
+emit_16(154);
+emit_16(42);
+emit_16(154);
+emit_16(44);
+emit_16(155);
+emit_16(46);
+emit_16(155);
+emit_16(44);
+emit_16(155);
+emit_16(46);
+emit_16(156);
+emit_16(48);
+emit_16(156);
+emit_16(46);
+emit_16(156);
+emit_16(48);
+emit_16(157);
+emit_16(50);
+emit_16(157);
+emit_16(48);
+emit_16(157);
+emit_16(50);
+emit_16(158);
+emit_16(52);
+emit_16(158);
+emit_16(50);
+emit_16(158);
+emit_16(52);
+emit_16(159);
+emit_16(54);
+emit_16(159);
+emit_16(52);
+emit_16(159);
+emit_16(54);
+emit_16(160);
+emit_16(56);
+emit_16(160);
+emit_16(54);
+emit_16(160);
+emit_16(56);
+emit_16(161);
+emit_16(58);
+emit_16(161);
+emit_16(56);
+emit_16(161);
+emit_16(58);
+emit_16(162);
+emit_16(60);
+emit_16(162);
+emit_16(58);
+emit_16(162);
+emit_16(60);
+emit_16(163);
+emit_16(62);
+emit_16(163);
+emit_16(60);
+emit_16(163);
+emit_16(62);
+emit_16(164);
+emit_16(64);
+emit_16(164);
+emit_16(62);
+emit_16(164);
+emit_16(64);
+emit_16(165);
+emit_16(66);
+emit_16(165);
+emit_16(64);
+emit_16(165);
+emit_16(66);
+emit_16(166);
+emit_16(68);
+emit_16(166);
+emit_16(66);
+emit_16(166);
+emit_16(68);
+emit_16(167);
+emit_16(70);
+emit_16(167);
+emit_16(68);
+emit_16(167);
+emit_16(70);
+emit_16(168);
+emit_16(72);
+emit_16(168);
+emit_16(70);
+emit_16(168);
+emit_16(72);
+emit_16(169);
+emit_16(74);
+emit_16(169);
+emit_16(72);
+emit_16(169);
+emit_16(74);
+emit_16(170);
+emit_16(76);
+emit_16(170);
+emit_16(74);
+emit_16(170);
+emit_16(76);
+emit_16(171);
+emit_16(78);
+emit_16(171);
+emit_16(76);
+emit_16(171);
+emit_16(78);
+emit_16(172);
+emit_16(80);
+emit_16(172);
+emit_16(78);
+emit_16(172);
+emit_16(80);
+emit_16(173);
+emit_16(82);
+emit_16(173);
+emit_16(80);
+emit_16(173);
+emit_16(82);
+emit_16(174);
+emit_16(84);
+emit_16(174);
+emit_16(82);
+emit_16(174);
+emit_16(84);
+emit_16(175);
+emit_16(86);
+emit_16(175);
+emit_16(84);
+emit_16(175);
+emit_16(86);
+emit_16(176);
+emit_16(88);
+emit_16(176);
+emit_16(86);
+emit_16(176);
+emit_16(88);
+emit_16(177);
+emit_16(90);
+emit_16(177);
+emit_16(88);
+emit_16(177);
+emit_16(90);
+emit_16(178);
+emit_16(92);
+emit_16(178);
+emit_16(90);
+emit_16(178);
+emit_16(92);
+emit_16(179);
+emit_16(94);
+emit_16(179);
+emit_16(92);
+emit_16(179);
+emit_16(94);
+emit_16(180);
+emit_16(96);
+emit_16(180);
+emit_16(94);
+emit_16(180);
+emit_16(96);
+emit_16(181);
+emit_16(98);
+emit_16(181);
+emit_16(96);
+emit_16(181);
+emit_16(98);
+emit_16(182);
+emit_16(100);
+emit_16(182);
+emit_16(98);
+emit_16(182);
+emit_16(100);
+emit_16(183);
+emit_16(102);
+emit_16(183);
+emit_16(100);
+emit_16(183);
+emit_16(102);
+emit_16(184);
+emit_16(104);
+emit_16(184);
+emit_16(102);
+emit_16(184);
+emit_16(104);
+emit_16(185);
+emit_16(106);
+emit_16(185);
+emit_16(104);
+emit_16(185);
+emit_16(106);
+emit_16(186);
+emit_16(108);
+emit_16(186);
+emit_16(106);
+emit_16(186);
+emit_16(108);
+emit_16(187);
+emit_16(110);
+emit_16(187);
+emit_16(108);
+emit_16(187);
+emit_16(110);
+emit_16(188);
+emit_16(112);
+emit_16(188);
+emit_16(110);
+emit_16(188);
+emit_16(112);
+emit_16(189);
+emit_16(114);
+emit_16(189);
+emit_16(112);
+emit_16(189);
+emit_16(114);
+emit_16(190);
+emit_16(116);
+emit_16(190);
+emit_16(114);
+emit_16(190);
+emit_16(116);
+emit_16(191);
+emit_16(118);
+emit_16(191);
+emit_16(116);
+emit_16(191);
+emit_16(118);
+emit_16(192);
+emit_16(120);
+emit_16(192);
+emit_16(118);
+emit_16(192);
+emit_16(120);
+emit_16(193);
+emit_16(122);
+emit_16(193);
+emit_16(120);
+emit_16(193);
+emit_16(122);
+emit_16(194);
+emit_16(124);
+emit_16(194);
+emit_16(122);
+emit_16(194);
+emit_16(124);
+emit_16(195);
+emit_16(126);
+emit_16(195);
+emit_16(124);
+emit_16(195);
+emit_16(126);
+emit_16(196);
+emit_16(128);
+emit_16(196);
+emit_16(126);
+emit_16(196);
+emit_16(128);
+emit_16(197);
+emit_16(130);
+emit_16(197);
+emit_16(128);
+emit_16(198);
+emit_16(132);
+emit_16(199);
+emit_16(133);
+emit_16(199);
+emit_16(132);
+emit_16(199);
+emit_16(133);
+emit_16(200);
+emit_16(134);
+emit_16(200);
+emit_16(133);
+emit_16(200);
+emit_16(134);
+emit_16(201);
+emit_16(135);
+emit_16(201);
+emit_16(134);
+emit_16(201);
+emit_16(135);
+emit_16(202);
+emit_16(136);
+emit_16(202);
+emit_16(135);
+emit_16(202);
+emit_16(136);
+emit_16(203);
+emit_16(137);
+emit_16(203);
+emit_16(136);
+emit_16(203);
+emit_16(137);
+emit_16(204);
+emit_16(138);
+emit_16(204);
+emit_16(137);
+emit_16(204);
+emit_16(138);
+emit_16(205);
+emit_16(139);
+emit_16(205);
+emit_16(138);
+emit_16(205);
+emit_16(139);
+emit_16(206);
+emit_16(140);
+emit_16(206);
+emit_16(139);
+emit_16(206);
+emit_16(140);
+emit_16(207);
+emit_16(141);
+emit_16(207);
+emit_16(140);
+emit_16(207);
+emit_16(141);
+emit_16(208);
+emit_16(142);
+emit_16(208);
+emit_16(141);
+emit_16(208);
+emit_16(142);
+emit_16(209);
+emit_16(143);
+emit_16(209);
+emit_16(142);
+emit_16(209);
+emit_16(143);
+emit_16(210);
+emit_16(144);
+emit_16(210);
+emit_16(143);
+emit_16(210);
+emit_16(144);
+emit_16(211);
+emit_16(145);
+emit_16(211);
+emit_16(144);
+emit_16(211);
+emit_16(145);
+emit_16(212);
+emit_16(146);
+emit_16(212);
+emit_16(145);
+emit_16(212);
+emit_16(146);
+emit_16(213);
+emit_16(147);
+emit_16(213);
+emit_16(146);
+emit_16(213);
+emit_16(147);
+emit_16(214);
+emit_16(148);
+emit_16(214);
+emit_16(147);
+emit_16(214);
+emit_16(148);
+emit_16(215);
+emit_16(149);
+emit_16(215);
+emit_16(148);
+emit_16(215);
+emit_16(149);
+emit_16(216);
+emit_16(150);
+emit_16(216);
+emit_16(149);
+emit_16(216);
+emit_16(150);
+emit_16(217);
+emit_16(151);
+emit_16(217);
+emit_16(150);
+emit_16(217);
+emit_16(151);
+emit_16(218);
+emit_16(152);
+emit_16(218);
+emit_16(151);
+emit_16(218);
+emit_16(152);
+emit_16(219);
+emit_16(153);
+emit_16(219);
+emit_16(152);
+emit_16(219);
+emit_16(153);
+emit_16(220);
+emit_16(154);
+emit_16(220);
+emit_16(153);
+emit_16(220);
+emit_16(154);
+emit_16(221);
+emit_16(155);
+emit_16(221);
+emit_16(154);
+emit_16(221);
+emit_16(155);
+emit_16(222);
+emit_16(156);
+emit_16(222);
+emit_16(155);
+emit_16(222);
+emit_16(156);
+emit_16(223);
+emit_16(157);
+emit_16(223);
+emit_16(156);
+emit_16(223);
+emit_16(157);
+emit_16(224);
+emit_16(158);
+emit_16(224);
+emit_16(157);
+emit_16(224);
+emit_16(158);
+emit_16(225);
+emit_16(159);
+emit_16(225);
+emit_16(158);
+emit_16(225);
+emit_16(159);
+emit_16(226);
+emit_16(160);
+emit_16(226);
+emit_16(159);
+emit_16(226);
+emit_16(160);
+emit_16(227);
+emit_16(161);
+emit_16(227);
+emit_16(160);
+emit_16(227);
+emit_16(161);
+emit_16(228);
+emit_16(162);
+emit_16(228);
+emit_16(161);
+emit_16(228);
+emit_16(162);
+emit_16(229);
+emit_16(163);
+emit_16(229);
+emit_16(162);
+emit_16(229);
+emit_16(163);
+emit_16(230);
+emit_16(164);
+emit_16(230);
+emit_16(163);
+emit_16(230);
+emit_16(164);
+emit_16(231);
+emit_16(165);
+emit_16(231);
+emit_16(164);
+emit_16(231);
+emit_16(165);
+emit_16(232);
+emit_16(166);
+emit_16(232);
+emit_16(165);
+emit_16(232);
+emit_16(166);
+emit_16(233);
+emit_16(167);
+emit_16(233);
+emit_16(166);
+emit_16(233);
+emit_16(167);
+emit_16(234);
+emit_16(168);
+emit_16(234);
+emit_16(167);
+emit_16(234);
+emit_16(168);
+emit_16(235);
+emit_16(169);
+emit_16(235);
+emit_16(168);
+emit_16(235);
+emit_16(169);
+emit_16(236);
+emit_16(170);
+emit_16(236);
+emit_16(169);
+emit_16(236);
+emit_16(170);
+emit_16(237);
+emit_16(171);
+emit_16(237);
+emit_16(170);
+emit_16(237);
+emit_16(171);
+emit_16(238);
+emit_16(172);
+emit_16(238);
+emit_16(171);
+emit_16(238);
+emit_16(172);
+emit_16(239);
+emit_16(173);
+emit_16(239);
+emit_16(172);
+emit_16(239);
+emit_16(173);
+emit_16(240);
+emit_16(174);
+emit_16(240);
+emit_16(173);
+emit_16(240);
+emit_16(174);
+emit_16(241);
+emit_16(175);
+emit_16(241);
+emit_16(174);
+emit_16(241);
+emit_16(175);
+emit_16(242);
+emit_16(176);
+emit_16(242);
+emit_16(175);
+emit_16(242);
+emit_16(176);
+emit_16(243);
+emit_16(177);
+emit_16(243);
+emit_16(176);
+emit_16(243);
+emit_16(177);
+emit_16(244);
+emit_16(178);
+emit_16(244);
+emit_16(177);
+emit_16(244);
+emit_16(178);
+emit_16(245);
+emit_16(179);
+emit_16(245);
+emit_16(178);
+emit_16(245);
+emit_16(179);
+emit_16(246);
+emit_16(180);
+emit_16(246);
+emit_16(179);
+emit_16(246);
+emit_16(180);
+emit_16(247);
+emit_16(181);
+emit_16(247);
+emit_16(180);
+emit_16(247);
+emit_16(181);
+emit_16(248);
+emit_16(182);
+emit_16(248);
+emit_16(181);
+emit_16(248);
+emit_16(182);
+emit_16(249);
+emit_16(183);
+emit_16(249);
+emit_16(182);
+emit_16(249);
+emit_16(183);
+emit_16(250);
+emit_16(184);
+emit_16(250);
+emit_16(183);
+emit_16(250);
+emit_16(184);
+emit_16(251);
+emit_16(185);
+emit_16(251);
+emit_16(184);
+emit_16(251);
+emit_16(185);
+emit_16(252);
+emit_16(186);
+emit_16(252);
+emit_16(185);
+emit_16(252);
+emit_16(186);
+emit_16(253);
+emit_16(187);
+emit_16(253);
+emit_16(186);
+emit_16(253);
+emit_16(187);
+emit_16(254);
+emit_16(188);
+emit_16(254);
+emit_16(187);
+emit_16(254);
+emit_16(188);
+emit_16(255);
+emit_16(189);
+emit_16(255);
+emit_16(188);
+emit_16(255);
+emit_16(189);
+emit_16(256);
+emit_16(190);
+emit_16(256);
+emit_16(189);
+emit_16(256);
+emit_16(190);
+emit_16(257);
+emit_16(191);
+emit_16(257);
+emit_16(190);
+emit_16(257);
+emit_16(191);
+emit_16(258);
+emit_16(192);
+emit_16(258);
+emit_16(191);
+emit_16(258);
+emit_16(192);
+emit_16(259);
+emit_16(193);
+emit_16(259);
+emit_16(192);
+emit_16(259);
+emit_16(193);
+emit_16(260);
+emit_16(194);
+emit_16(260);
+emit_16(193);
+emit_16(260);
+emit_16(194);
+emit_16(261);
+emit_16(195);
+emit_16(261);
+emit_16(194);
+emit_16(261);
+emit_16(195);
+emit_16(262);
+emit_16(196);
+emit_16(262);
+emit_16(195);
+emit_16(262);
+emit_16(196);
+emit_16(263);
+emit_16(197);
+emit_16(263);
+emit_16(196);
+emit_16(264);
+emit_16(198);
+emit_16(265);
+emit_16(199);
+emit_16(265);
+emit_16(198);
+emit_16(265);
+emit_16(199);
+emit_16(266);
+emit_16(200);
+emit_16(266);
+emit_16(199);
+emit_16(266);
+emit_16(200);
+emit_16(267);
+emit_16(201);
+emit_16(267);
+emit_16(200);
+emit_16(267);
+emit_16(201);
+emit_16(268);
+emit_16(202);
+emit_16(268);
+emit_16(201);
+emit_16(268);
+emit_16(202);
+emit_16(269);
+emit_16(203);
+emit_16(269);
+emit_16(202);
+emit_16(269);
+emit_16(203);
+emit_16(270);
+emit_16(204);
+emit_16(270);
+emit_16(203);
+emit_16(270);
+emit_16(204);
+emit_16(271);
+emit_16(205);
+emit_16(271);
+emit_16(204);
+emit_16(271);
+emit_16(205);
+emit_16(272);
+emit_16(206);
+emit_16(272);
+emit_16(205);
+emit_16(272);
+emit_16(206);
+emit_16(273);
+emit_16(207);
+emit_16(273);
+emit_16(206);
+emit_16(273);
+emit_16(207);
+emit_16(274);
+emit_16(208);
+emit_16(274);
+emit_16(207);
+emit_16(274);
+emit_16(208);
+emit_16(275);
+emit_16(209);
+emit_16(275);
+emit_16(208);
+emit_16(275);
+emit_16(209);
+emit_16(276);
+emit_16(210);
+emit_16(276);
+emit_16(209);
+emit_16(276);
+emit_16(210);
+emit_16(277);
+emit_16(211);
+emit_16(277);
+emit_16(210);
+emit_16(277);
+emit_16(211);
+emit_16(278);
+emit_16(212);
+emit_16(278);
+emit_16(211);
+emit_16(278);
+emit_16(212);
+emit_16(279);
+emit_16(213);
+emit_16(279);
+emit_16(212);
+emit_16(279);
+emit_16(213);
+emit_16(280);
+emit_16(214);
+emit_16(280);
+emit_16(213);
+emit_16(280);
+emit_16(214);
+emit_16(281);
+emit_16(215);
+emit_16(281);
+emit_16(214);
+emit_16(281);
+emit_16(215);
+emit_16(282);
+emit_16(216);
+emit_16(282);
+emit_16(215);
+emit_16(282);
+emit_16(216);
+emit_16(283);
+emit_16(217);
+emit_16(283);
+emit_16(216);
+emit_16(283);
+emit_16(217);
+emit_16(284);
+emit_16(218);
+emit_16(284);
+emit_16(217);
+emit_16(284);
+emit_16(218);
+emit_16(285);
+emit_16(219);
+emit_16(285);
+emit_16(218);
+emit_16(285);
+emit_16(219);
+emit_16(286);
+emit_16(220);
+emit_16(286);
+emit_16(219);
+emit_16(286);
+emit_16(220);
+emit_16(287);
+emit_16(221);
+emit_16(287);
+emit_16(220);
+emit_16(287);
+emit_16(221);
+emit_16(288);
+emit_16(222);
+emit_16(288);
+emit_16(221);
+emit_16(288);
+emit_16(222);
+emit_16(289);
+emit_16(223);
+emit_16(289);
+emit_16(222);
+emit_16(289);
+emit_16(223);
+emit_16(290);
+emit_16(224);
+emit_16(290);
+emit_16(223);
+emit_16(290);
+emit_16(224);
+emit_16(291);
+emit_16(225);
+emit_16(291);
+emit_16(224);
+emit_16(291);
+emit_16(225);
+emit_16(292);
+emit_16(226);
+emit_16(292);
+emit_16(225);
+emit_16(292);
+emit_16(226);
+emit_16(293);
+emit_16(227);
+emit_16(293);
+emit_16(226);
+emit_16(293);
+emit_16(227);
+emit_16(294);
+emit_16(228);
+emit_16(294);
+emit_16(227);
+emit_16(294);
+emit_16(228);
+emit_16(295);
+emit_16(229);
+emit_16(295);
+emit_16(228);
+emit_16(295);
+emit_16(229);
+emit_16(296);
+emit_16(230);
+emit_16(296);
+emit_16(229);
+emit_16(296);
+emit_16(230);
+emit_16(297);
+emit_16(231);
+emit_16(297);
+emit_16(230);
+emit_16(297);
+emit_16(231);
+emit_16(298);
+emit_16(232);
+emit_16(298);
+emit_16(231);
+emit_16(298);
+emit_16(232);
+emit_16(299);
+emit_16(233);
+emit_16(299);
+emit_16(232);
+emit_16(299);
+emit_16(233);
+emit_16(300);
+emit_16(234);
+emit_16(300);
+emit_16(233);
+emit_16(300);
+emit_16(234);
+emit_16(301);
+emit_16(235);
+emit_16(301);
+emit_16(234);
+emit_16(301);
+emit_16(235);
+emit_16(302);
+emit_16(236);
+emit_16(302);
+emit_16(235);
+emit_16(302);
+emit_16(236);
+emit_16(303);
+emit_16(237);
+emit_16(303);
+emit_16(236);
+emit_16(303);
+emit_16(237);
+emit_16(304);
+emit_16(238);
+emit_16(304);
+emit_16(237);
+emit_16(304);
+emit_16(238);
+emit_16(305);
+emit_16(239);
+emit_16(305);
+emit_16(238);
+emit_16(305);
+emit_16(239);
+emit_16(306);
+emit_16(240);
+emit_16(306);
+emit_16(239);
+emit_16(306);
+emit_16(240);
+emit_16(307);
+emit_16(241);
+emit_16(307);
+emit_16(240);
+emit_16(307);
+emit_16(241);
+emit_16(308);
+emit_16(242);
+emit_16(308);
+emit_16(241);
+emit_16(308);
+emit_16(242);
+emit_16(309);
+emit_16(243);
+emit_16(309);
+emit_16(242);
+emit_16(309);
+emit_16(243);
+emit_16(310);
+emit_16(244);
+emit_16(310);
+emit_16(243);
+emit_16(310);
+emit_16(244);
+emit_16(311);
+emit_16(245);
+emit_16(311);
+emit_16(244);
+emit_16(311);
+emit_16(245);
+emit_16(312);
+emit_16(246);
+emit_16(312);
+emit_16(245);
+emit_16(312);
+emit_16(246);
+emit_16(313);
+emit_16(247);
+emit_16(313);
+emit_16(246);
+emit_16(313);
+emit_16(247);
+emit_16(314);
+emit_16(248);
+emit_16(314);
+emit_16(247);
+emit_16(314);
+emit_16(248);
+emit_16(315);
+emit_16(249);
+emit_16(315);
+emit_16(248);
+emit_16(315);
+emit_16(249);
+emit_16(316);
+emit_16(250);
+emit_16(316);
+emit_16(249);
+emit_16(316);
+emit_16(250);
+emit_16(317);
+emit_16(251);
+emit_16(317);
+emit_16(250);
+emit_16(317);
+emit_16(251);
+emit_16(318);
+emit_16(252);
+emit_16(318);
+emit_16(251);
+emit_16(318);
+emit_16(252);
+emit_16(319);
+emit_16(253);
+emit_16(319);
+emit_16(252);
+emit_16(319);
+emit_16(253);
+emit_16(320);
+emit_16(254);
+emit_16(320);
+emit_16(253);
+emit_16(320);
+emit_16(254);
+emit_16(321);
+emit_16(255);
+emit_16(321);
+emit_16(254);
+emit_16(321);
+emit_16(255);
+emit_16(322);
+emit_16(256);
+emit_16(322);
+emit_16(255);
+emit_16(322);
+emit_16(256);
+emit_16(323);
+emit_16(257);
+emit_16(323);
+emit_16(256);
+emit_16(323);
+emit_16(257);
+emit_16(324);
+emit_16(258);
+emit_16(324);
+emit_16(257);
+emit_16(324);
+emit_16(258);
+emit_16(325);
+emit_16(259);
+emit_16(325);
+emit_16(258);
+emit_16(325);
+emit_16(259);
+emit_16(326);
+emit_16(260);
+emit_16(326);
+emit_16(259);
+emit_16(326);
+emit_16(260);
+emit_16(327);
+emit_16(261);
+emit_16(327);
+emit_16(260);
+emit_16(327);
+emit_16(261);
+emit_16(328);
+emit_16(262);
+emit_16(328);
+emit_16(261);
+emit_16(328);
+emit_16(262);
+emit_16(329);
+emit_16(263);
+emit_16(329);
+emit_16(262);
+emit_16(330);
+emit_16(264);
+emit_16(331);
+emit_16(265);
+emit_16(331);
+emit_16(264);
+emit_16(331);
+emit_16(265);
+emit_16(332);
+emit_16(266);
+emit_16(332);
+emit_16(265);
+emit_16(332);
+emit_16(266);
+emit_16(333);
+emit_16(267);
+emit_16(333);
+emit_16(266);
+emit_16(333);
+emit_16(267);
+emit_16(334);
+emit_16(268);
+emit_16(334);
+emit_16(267);
+emit_16(334);
+emit_16(268);
+emit_16(335);
+emit_16(269);
+emit_16(335);
+emit_16(268);
+emit_16(335);
+emit_16(269);
+emit_16(336);
+emit_16(270);
+emit_16(336);
+emit_16(269);
+emit_16(336);
+emit_16(270);
+emit_16(337);
+emit_16(271);
+emit_16(337);
+emit_16(270);
+emit_16(337);
+emit_16(271);
+emit_16(338);
+emit_16(272);
+emit_16(338);
+emit_16(271);
+emit_16(338);
+emit_16(272);
+emit_16(339);
+emit_16(273);
+emit_16(339);
+emit_16(272);
+emit_16(339);
+emit_16(273);
+emit_16(340);
+emit_16(274);
+emit_16(340);
+emit_16(273);
+emit_16(340);
+emit_16(274);
+emit_16(341);
+emit_16(275);
+emit_16(341);
+emit_16(274);
+emit_16(341);
+emit_16(275);
+emit_16(342);
+emit_16(276);
+emit_16(342);
+emit_16(275);
+emit_16(342);
+emit_16(276);
+emit_16(343);
+emit_16(277);
+emit_16(343);
+emit_16(276);
+emit_16(343);
+emit_16(277);
+emit_16(344);
+emit_16(278);
+emit_16(344);
+emit_16(277);
+emit_16(344);
+emit_16(278);
+emit_16(345);
+emit_16(279);
+emit_16(345);
+emit_16(278);
+emit_16(345);
+emit_16(279);
+emit_16(346);
+emit_16(280);
+emit_16(346);
+emit_16(279);
+emit_16(346);
+emit_16(280);
+emit_16(347);
+emit_16(281);
+emit_16(347);
+emit_16(280);
+emit_16(347);
+emit_16(281);
+emit_16(348);
+emit_16(282);
+emit_16(348);
+emit_16(281);
+emit_16(348);
+emit_16(282);
+emit_16(349);
+emit_16(283);
+emit_16(349);
+emit_16(282);
+emit_16(349);
+emit_16(283);
+emit_16(350);
+emit_16(284);
+emit_16(350);
+emit_16(283);
+emit_16(350);
+emit_16(284);
+emit_16(351);
+emit_16(285);
+emit_16(351);
+emit_16(284);
+emit_16(351);
+emit_16(285);
+emit_16(352);
+emit_16(286);
+emit_16(352);
+emit_16(285);
+emit_16(352);
+emit_16(286);
+emit_16(353);
+emit_16(287);
+emit_16(353);
+emit_16(286);
+emit_16(353);
+emit_16(287);
+emit_16(354);
+emit_16(288);
+emit_16(354);
+emit_16(287);
+emit_16(354);
+emit_16(288);
+emit_16(355);
+emit_16(289);
+emit_16(355);
+emit_16(288);
+emit_16(355);
+emit_16(289);
+emit_16(356);
+emit_16(290);
+emit_16(356);
+emit_16(289);
+emit_16(356);
+emit_16(290);
+emit_16(357);
+emit_16(291);
+emit_16(357);
+emit_16(290);
+emit_16(357);
+emit_16(291);
+emit_16(358);
+emit_16(292);
+emit_16(358);
+emit_16(291);
+emit_16(358);
+emit_16(292);
+emit_16(359);
+emit_16(293);
+emit_16(359);
+emit_16(292);
+emit_16(359);
+emit_16(293);
+emit_16(360);
+emit_16(294);
+emit_16(360);
+emit_16(293);
+emit_16(360);
+emit_16(294);
+emit_16(361);
+emit_16(295);
+emit_16(361);
+emit_16(294);
+emit_16(361);
+emit_16(295);
+emit_16(362);
+emit_16(296);
+emit_16(362);
+emit_16(295);
+emit_16(362);
+emit_16(296);
+emit_16(363);
+emit_16(297);
+emit_16(363);
+emit_16(296);
+emit_16(363);
+emit_16(297);
+emit_16(364);
+emit_16(298);
+emit_16(364);
+emit_16(297);
+emit_16(364);
+emit_16(298);
+emit_16(365);
+emit_16(299);
+emit_16(365);
+emit_16(298);
+emit_16(365);
+emit_16(299);
+emit_16(366);
+emit_16(300);
+emit_16(366);
+emit_16(299);
+emit_16(366);
+emit_16(300);
+emit_16(367);
+emit_16(301);
+emit_16(367);
+emit_16(300);
+emit_16(367);
+emit_16(301);
+emit_16(368);
+emit_16(302);
+emit_16(368);
+emit_16(301);
+emit_16(368);
+emit_16(302);
+emit_16(369);
+emit_16(303);
+emit_16(369);
+emit_16(302);
+emit_16(369);
+emit_16(303);
+emit_16(370);
+emit_16(304);
+emit_16(370);
+emit_16(303);
+emit_16(370);
+emit_16(304);
+emit_16(371);
+emit_16(305);
+emit_16(371);
+emit_16(304);
+emit_16(371);
+emit_16(305);
+emit_16(372);
+emit_16(306);
+emit_16(372);
+emit_16(305);
+emit_16(372);
+emit_16(306);
+emit_16(373);
+emit_16(307);
+emit_16(373);
+emit_16(306);
+emit_16(373);
+emit_16(307);
+emit_16(374);
+emit_16(308);
+emit_16(374);
+emit_16(307);
+emit_16(374);
+emit_16(308);
+emit_16(375);
+emit_16(309);
+emit_16(375);
+emit_16(308);
+emit_16(375);
+emit_16(309);
+emit_16(376);
+emit_16(310);
+emit_16(376);
+emit_16(309);
+emit_16(376);
+emit_16(310);
+emit_16(377);
+emit_16(311);
+emit_16(377);
+emit_16(310);
+emit_16(377);
+emit_16(311);
+emit_16(378);
+emit_16(312);
+emit_16(378);
+emit_16(311);
+emit_16(378);
+emit_16(312);
+emit_16(379);
+emit_16(313);
+emit_16(379);
+emit_16(312);
+emit_16(379);
+emit_16(313);
+emit_16(380);
+emit_16(314);
+emit_16(380);
+emit_16(313);
+emit_16(380);
+emit_16(314);
+emit_16(381);
+emit_16(315);
+emit_16(381);
+emit_16(314);
+emit_16(381);
+emit_16(315);
+emit_16(382);
+emit_16(316);
+emit_16(382);
+emit_16(315);
+emit_16(382);
+emit_16(316);
+emit_16(383);
+emit_16(317);
+emit_16(383);
+emit_16(316);
+emit_16(383);
+emit_16(317);
+emit_16(384);
+emit_16(318);
+emit_16(384);
+emit_16(317);
+emit_16(384);
+emit_16(318);
+emit_16(385);
+emit_16(319);
+emit_16(385);
+emit_16(318);
+emit_16(385);
+emit_16(319);
+emit_16(386);
+emit_16(320);
+emit_16(386);
+emit_16(319);
+emit_16(386);
+emit_16(320);
+emit_16(387);
+emit_16(321);
+emit_16(387);
+emit_16(320);
+emit_16(387);
+emit_16(321);
+emit_16(388);
+emit_16(322);
+emit_16(388);
+emit_16(321);
+emit_16(388);
+emit_16(322);
+emit_16(389);
+emit_16(323);
+emit_16(389);
+emit_16(322);
+emit_16(389);
+emit_16(323);
+emit_16(390);
+emit_16(324);
+emit_16(390);
+emit_16(323);
+emit_16(390);
+emit_16(324);
+emit_16(391);
+emit_16(325);
+emit_16(391);
+emit_16(324);
+emit_16(391);
+emit_16(325);
+emit_16(392);
+emit_16(326);
+emit_16(392);
+emit_16(325);
+emit_16(392);
+emit_16(326);
+emit_16(393);
+emit_16(327);
+emit_16(393);
+emit_16(326);
+emit_16(393);
+emit_16(327);
+emit_16(394);
+emit_16(328);
+emit_16(394);
+emit_16(327);
+emit_16(394);
+emit_16(328);
+emit_16(395);
+emit_16(329);
+emit_16(395);
+emit_16(328);
+emit_16(396);
+emit_16(330);
+emit_16(397);
+emit_16(331);
+emit_16(397);
+emit_16(330);
+emit_16(397);
+emit_16(331);
+emit_16(398);
+emit_16(332);
+emit_16(398);
+emit_16(331);
+emit_16(398);
+emit_16(332);
+emit_16(399);
+emit_16(333);
+emit_16(399);
+emit_16(332);
+emit_16(399);
+emit_16(333);
+emit_16(400);
+emit_16(334);
+emit_16(400);
+emit_16(333);
+emit_16(400);
+emit_16(334);
+emit_16(401);
+emit_16(335);
+emit_16(401);
+emit_16(334);
+emit_16(401);
+emit_16(335);
+emit_16(402);
+emit_16(336);
+emit_16(402);
+emit_16(335);
+emit_16(402);
+emit_16(336);
+emit_16(403);
+emit_16(337);
+emit_16(403);
+emit_16(336);
+emit_16(403);
+emit_16(337);
+emit_16(404);
+emit_16(338);
+emit_16(404);
+emit_16(337);
+emit_16(404);
+emit_16(338);
+emit_16(405);
+emit_16(339);
+emit_16(405);
+emit_16(338);
+emit_16(405);
+emit_16(339);
+emit_16(406);
+emit_16(340);
+emit_16(406);
+emit_16(339);
+emit_16(406);
+emit_16(340);
+emit_16(407);
+emit_16(341);
+emit_16(407);
+emit_16(340);
+emit_16(407);
+emit_16(341);
+emit_16(408);
+emit_16(342);
+emit_16(408);
+emit_16(341);
+emit_16(408);
+emit_16(342);
+emit_16(409);
+emit_16(343);
+emit_16(409);
+emit_16(342);
+emit_16(409);
+emit_16(343);
+emit_16(410);
+emit_16(344);
+emit_16(410);
+emit_16(343);
+emit_16(410);
+emit_16(344);
+emit_16(411);
+emit_16(345);
+emit_16(411);
+emit_16(344);
+emit_16(411);
+emit_16(345);
+emit_16(412);
+emit_16(346);
+emit_16(412);
+emit_16(345);
+emit_16(412);
+emit_16(346);
+emit_16(413);
+emit_16(347);
+emit_16(413);
+emit_16(346);
+emit_16(413);
+emit_16(347);
+emit_16(414);
+emit_16(348);
+emit_16(414);
+emit_16(347);
+emit_16(414);
+emit_16(348);
+emit_16(415);
+emit_16(349);
+emit_16(415);
+emit_16(348);
+emit_16(415);
+emit_16(349);
+emit_16(416);
+emit_16(350);
+emit_16(416);
+emit_16(349);
+emit_16(416);
+emit_16(350);
+emit_16(417);
+emit_16(351);
+emit_16(417);
+emit_16(350);
+emit_16(417);
+emit_16(351);
+emit_16(418);
+emit_16(352);
+emit_16(418);
+emit_16(351);
+emit_16(418);
+emit_16(352);
+emit_16(419);
+emit_16(353);
+emit_16(419);
+emit_16(352);
+emit_16(419);
+emit_16(353);
+emit_16(420);
+emit_16(354);
+emit_16(420);
+emit_16(353);
+emit_16(420);
+emit_16(354);
+emit_16(421);
+emit_16(355);
+emit_16(421);
+emit_16(354);
+emit_16(421);
+emit_16(355);
+emit_16(422);
+emit_16(356);
+emit_16(422);
+emit_16(355);
+emit_16(422);
+emit_16(356);
+emit_16(423);
+emit_16(357);
+emit_16(423);
+emit_16(356);
+emit_16(423);
+emit_16(357);
+emit_16(424);
+emit_16(358);
+emit_16(424);
+emit_16(357);
+emit_16(424);
+emit_16(358);
+emit_16(425);
+emit_16(359);
+emit_16(425);
+emit_16(358);
+emit_16(425);
+emit_16(359);
+emit_16(426);
+emit_16(360);
+emit_16(426);
+emit_16(359);
+emit_16(426);
+emit_16(360);
+emit_16(427);
+emit_16(361);
+emit_16(427);
+emit_16(360);
+emit_16(427);
+emit_16(361);
+emit_16(428);
+emit_16(362);
+emit_16(428);
+emit_16(361);
+emit_16(428);
+emit_16(362);
+emit_16(429);
+emit_16(363);
+emit_16(429);
+emit_16(362);
+emit_16(429);
+emit_16(363);
+emit_16(430);
+emit_16(364);
+emit_16(430);
+emit_16(363);
+emit_16(430);
+emit_16(364);
+emit_16(431);
+emit_16(365);
+emit_16(431);
+emit_16(364);
+emit_16(431);
+emit_16(365);
+emit_16(432);
+emit_16(366);
+emit_16(432);
+emit_16(365);
+emit_16(432);
+emit_16(366);
+emit_16(433);
+emit_16(367);
+emit_16(433);
+emit_16(366);
+emit_16(433);
+emit_16(367);
+emit_16(434);
+emit_16(368);
+emit_16(434);
+emit_16(367);
+emit_16(434);
+emit_16(368);
+emit_16(435);
+emit_16(369);
+emit_16(435);
+emit_16(368);
+emit_16(435);
+emit_16(369);
+emit_16(436);
+emit_16(370);
+emit_16(436);
+emit_16(369);
+emit_16(436);
+emit_16(370);
+emit_16(437);
+emit_16(371);
+emit_16(437);
+emit_16(370);
+emit_16(437);
+emit_16(371);
+emit_16(438);
+emit_16(372);
+emit_16(438);
+emit_16(371);
+emit_16(438);
+emit_16(372);
+emit_16(439);
+emit_16(373);
+emit_16(439);
+emit_16(372);
+emit_16(439);
+emit_16(373);
+emit_16(440);
+emit_16(374);
+emit_16(440);
+emit_16(373);
+emit_16(440);
+emit_16(374);
+emit_16(441);
+emit_16(375);
+emit_16(441);
+emit_16(374);
+emit_16(441);
+emit_16(375);
+emit_16(442);
+emit_16(376);
+emit_16(442);
+emit_16(375);
+emit_16(442);
+emit_16(376);
+emit_16(443);
+emit_16(377);
+emit_16(443);
+emit_16(376);
+emit_16(443);
+emit_16(377);
+emit_16(444);
+emit_16(378);
+emit_16(444);
+emit_16(377);
+emit_16(444);
+emit_16(378);
+emit_16(445);
+emit_16(379);
+emit_16(445);
+emit_16(378);
+emit_16(445);
+emit_16(379);
+emit_16(446);
+emit_16(380);
+emit_16(446);
+emit_16(379);
+emit_16(446);
+emit_16(380);
+emit_16(447);
+emit_16(381);
+emit_16(447);
+emit_16(380);
+emit_16(447);
+emit_16(381);
+emit_16(448);
+emit_16(382);
+emit_16(448);
+emit_16(381);
+emit_16(448);
+emit_16(382);
+emit_16(449);
+emit_16(383);
+emit_16(449);
+emit_16(382);
+emit_16(449);
+emit_16(383);
+emit_16(450);
+emit_16(384);
+emit_16(450);
+emit_16(383);
+emit_16(450);
+emit_16(384);
+emit_16(451);
+emit_16(385);
+emit_16(451);
+emit_16(384);
+emit_16(451);
+emit_16(385);
+emit_16(452);
+emit_16(386);
+emit_16(452);
+emit_16(385);
+emit_16(452);
+emit_16(386);
+emit_16(453);
+emit_16(387);
+emit_16(453);
+emit_16(386);
+emit_16(453);
+emit_16(387);
+emit_16(454);
+emit_16(388);
+emit_16(454);
+emit_16(387);
+emit_16(454);
+emit_16(388);
+emit_16(455);
+emit_16(389);
+emit_16(455);
+emit_16(388);
+emit_16(455);
+emit_16(389);
+emit_16(456);
+emit_16(390);
+emit_16(456);
+emit_16(389);
+emit_16(456);
+emit_16(390);
+emit_16(457);
+emit_16(391);
+emit_16(457);
+emit_16(390);
+emit_16(457);
+emit_16(391);
+emit_16(458);
+emit_16(392);
+emit_16(458);
+emit_16(391);
+emit_16(458);
+emit_16(392);
+emit_16(459);
+emit_16(393);
+emit_16(459);
+emit_16(392);
+emit_16(459);
+emit_16(393);
+emit_16(460);
+emit_16(394);
+emit_16(460);
+emit_16(393);
+emit_16(460);
+emit_16(394);
+emit_16(461);
+emit_16(395);
+emit_16(461);
+emit_16(394);
+emit_16(462);
+emit_16(396);
+emit_16(463);
+emit_16(397);
+emit_16(463);
+emit_16(396);
+emit_16(463);
+emit_16(397);
+emit_16(464);
+emit_16(398);
+emit_16(464);
+emit_16(397);
+emit_16(464);
+emit_16(398);
+emit_16(465);
+emit_16(399);
+emit_16(465);
+emit_16(398);
+emit_16(465);
+emit_16(399);
+emit_16(466);
+emit_16(400);
+emit_16(466);
+emit_16(399);
+emit_16(466);
+emit_16(400);
+emit_16(467);
+emit_16(401);
+emit_16(467);
+emit_16(400);
+emit_16(467);
+emit_16(401);
+emit_16(468);
+emit_16(402);
+emit_16(468);
+emit_16(401);
+emit_16(468);
+emit_16(402);
+emit_16(469);
+emit_16(403);
+emit_16(469);
+emit_16(402);
+emit_16(469);
+emit_16(403);
+emit_16(470);
+emit_16(404);
+emit_16(470);
+emit_16(403);
+emit_16(470);
+emit_16(404);
+emit_16(471);
+emit_16(405);
+emit_16(471);
+emit_16(404);
+emit_16(471);
+emit_16(405);
+emit_16(472);
+emit_16(406);
+emit_16(472);
+emit_16(405);
+emit_16(472);
+emit_16(406);
+emit_16(473);
+emit_16(407);
+emit_16(473);
+emit_16(406);
+emit_16(473);
+emit_16(407);
+emit_16(474);
+emit_16(408);
+emit_16(474);
+emit_16(407);
+emit_16(474);
+emit_16(408);
+emit_16(475);
+emit_16(409);
+emit_16(475);
+emit_16(408);
+emit_16(475);
+emit_16(409);
+emit_16(476);
+emit_16(410);
+emit_16(476);
+emit_16(409);
+emit_16(476);
+emit_16(410);
+emit_16(477);
+emit_16(411);
+emit_16(477);
+emit_16(410);
+emit_16(477);
+emit_16(411);
+emit_16(478);
+emit_16(412);
+emit_16(478);
+emit_16(411);
+emit_16(478);
+emit_16(412);
+emit_16(479);
+emit_16(413);
+emit_16(479);
+emit_16(412);
+emit_16(479);
+emit_16(413);
+emit_16(480);
+emit_16(414);
+emit_16(480);
+emit_16(413);
+emit_16(480);
+emit_16(414);
+emit_16(481);
+emit_16(415);
+emit_16(481);
+emit_16(414);
+emit_16(481);
+emit_16(415);
+emit_16(482);
+emit_16(416);
+emit_16(482);
+emit_16(415);
+emit_16(482);
+emit_16(416);
+emit_16(483);
+emit_16(417);
+emit_16(483);
+emit_16(416);
+emit_16(483);
+emit_16(417);
+emit_16(484);
+emit_16(418);
+emit_16(484);
+emit_16(417);
+emit_16(484);
+emit_16(418);
+emit_16(485);
+emit_16(419);
+emit_16(485);
+emit_16(418);
+emit_16(485);
+emit_16(419);
+emit_16(486);
+emit_16(420);
+emit_16(486);
+emit_16(419);
+emit_16(486);
+emit_16(420);
+emit_16(487);
+emit_16(421);
+emit_16(487);
+emit_16(420);
+emit_16(487);
+emit_16(421);
+emit_16(488);
+emit_16(422);
+emit_16(488);
+emit_16(421);
+emit_16(488);
+emit_16(422);
+emit_16(489);
+emit_16(423);
+emit_16(489);
+emit_16(422);
+emit_16(489);
+emit_16(423);
+emit_16(490);
+emit_16(424);
+emit_16(490);
+emit_16(423);
+emit_16(490);
+emit_16(424);
+emit_16(491);
+emit_16(425);
+emit_16(491);
+emit_16(424);
+emit_16(491);
+emit_16(425);
+emit_16(492);
+emit_16(426);
+emit_16(492);
+emit_16(425);
+emit_16(492);
+emit_16(426);
+emit_16(493);
+emit_16(427);
+emit_16(493);
+emit_16(426);
+emit_16(493);
+emit_16(427);
+emit_16(494);
+emit_16(428);
+emit_16(494);
+emit_16(427);
+emit_16(494);
+emit_16(428);
+emit_16(495);
+emit_16(429);
+emit_16(495);
+emit_16(428);
+emit_16(495);
+emit_16(429);
+emit_16(496);
+emit_16(430);
+emit_16(496);
+emit_16(429);
+emit_16(496);
+emit_16(430);
+emit_16(497);
+emit_16(431);
+emit_16(497);
+emit_16(430);
+emit_16(497);
+emit_16(431);
+emit_16(498);
+emit_16(432);
+emit_16(498);
+emit_16(431);
+emit_16(498);
+emit_16(432);
+emit_16(499);
+emit_16(433);
+emit_16(499);
+emit_16(432);
+emit_16(499);
+emit_16(433);
+emit_16(500);
+emit_16(434);
+emit_16(500);
+emit_16(433);
+emit_16(500);
+emit_16(434);
+emit_16(501);
+emit_16(435);
+emit_16(501);
+emit_16(434);
+emit_16(501);
+emit_16(435);
+emit_16(502);
+emit_16(436);
+emit_16(502);
+emit_16(435);
+emit_16(502);
+emit_16(436);
+emit_16(503);
+emit_16(437);
+emit_16(503);
+emit_16(436);
+emit_16(503);
+emit_16(437);
+emit_16(504);
+emit_16(438);
+emit_16(504);
+emit_16(437);
+emit_16(504);
+emit_16(438);
+emit_16(505);
+emit_16(439);
+emit_16(505);
+emit_16(438);
+emit_16(505);
+emit_16(439);
+emit_16(506);
+emit_16(440);
+emit_16(506);
+emit_16(439);
+emit_16(506);
+emit_16(440);
+emit_16(507);
+emit_16(441);
+emit_16(507);
+emit_16(440);
+emit_16(507);
+emit_16(441);
+emit_16(508);
+emit_16(442);
+emit_16(508);
+emit_16(441);
+emit_16(508);
+emit_16(442);
+emit_16(509);
+emit_16(443);
+emit_16(509);
+emit_16(442);
+emit_16(509);
+emit_16(443);
+emit_16(510);
+emit_16(444);
+emit_16(510);
+emit_16(443);
+emit_16(510);
+emit_16(444);
+emit_16(511);
+emit_16(445);
+emit_16(511);
+emit_16(444);
+emit_16(511);
+emit_16(445);
+emit_16(512);
+emit_16(446);
+emit_16(512);
+emit_16(445);
+emit_16(512);
+emit_16(446);
+emit_16(513);
+emit_16(447);
+emit_16(513);
+emit_16(446);
+emit_16(513);
+emit_16(447);
+emit_16(514);
+emit_16(448);
+emit_16(514);
+emit_16(447);
+emit_16(514);
+emit_16(448);
+emit_16(515);
+emit_16(449);
+emit_16(515);
+emit_16(448);
+emit_16(515);
+emit_16(449);
+emit_16(516);
+emit_16(450);
+emit_16(516);
+emit_16(449);
+emit_16(516);
+emit_16(450);
+emit_16(517);
+emit_16(451);
+emit_16(517);
+emit_16(450);
+emit_16(517);
+emit_16(451);
+emit_16(518);
+emit_16(452);
+emit_16(518);
+emit_16(451);
+emit_16(518);
+emit_16(452);
+emit_16(519);
+emit_16(453);
+emit_16(519);
+emit_16(452);
+emit_16(519);
+emit_16(453);
+emit_16(520);
+emit_16(454);
+emit_16(520);
+emit_16(453);
+emit_16(520);
+emit_16(454);
+emit_16(521);
+emit_16(455);
+emit_16(521);
+emit_16(454);
+emit_16(521);
+emit_16(455);
+emit_16(522);
+emit_16(456);
+emit_16(522);
+emit_16(455);
+emit_16(522);
+emit_16(456);
+emit_16(523);
+emit_16(457);
+emit_16(523);
+emit_16(456);
+emit_16(523);
+emit_16(457);
+emit_16(524);
+emit_16(458);
+emit_16(524);
+emit_16(457);
+emit_16(524);
+emit_16(458);
+emit_16(525);
+emit_16(459);
+emit_16(525);
+emit_16(458);
+emit_16(525);
+emit_16(459);
+emit_16(526);
+emit_16(460);
+emit_16(526);
+emit_16(459);
+emit_16(526);
+emit_16(460);
+emit_16(527);
+emit_16(461);
+emit_16(527);
+emit_16(460);
+emit_16(528);
+emit_16(462);
+emit_16(529);
+emit_16(463);
+emit_16(529);
+emit_16(462);
+emit_16(529);
+emit_16(463);
+emit_16(530);
+emit_16(464);
+emit_16(530);
+emit_16(463);
+emit_16(530);
+emit_16(464);
+emit_16(531);
+emit_16(465);
+emit_16(531);
+emit_16(464);
+emit_16(531);
+emit_16(465);
+emit_16(532);
+emit_16(466);
+emit_16(532);
+emit_16(465);
+emit_16(532);
+emit_16(466);
+emit_16(533);
+emit_16(467);
+emit_16(533);
+emit_16(466);
+emit_16(533);
+emit_16(467);
+emit_16(534);
+emit_16(468);
+emit_16(534);
+emit_16(467);
+emit_16(534);
+emit_16(468);
+emit_16(535);
+emit_16(469);
+emit_16(535);
+emit_16(468);
+emit_16(535);
+emit_16(469);
+emit_16(536);
+emit_16(470);
+emit_16(536);
+emit_16(469);
+emit_16(536);
+emit_16(470);
+emit_16(537);
+emit_16(471);
+emit_16(537);
+emit_16(470);
+emit_16(537);
+emit_16(471);
+emit_16(538);
+emit_16(472);
+emit_16(538);
+emit_16(471);
+emit_16(538);
+emit_16(472);
+emit_16(539);
+emit_16(473);
+emit_16(539);
+emit_16(472);
+emit_16(539);
+emit_16(473);
+emit_16(540);
+emit_16(474);
+emit_16(540);
+emit_16(473);
+emit_16(540);
+emit_16(474);
+emit_16(541);
+emit_16(475);
+emit_16(541);
+emit_16(474);
+emit_16(541);
+emit_16(475);
+emit_16(542);
+emit_16(476);
+emit_16(542);
+emit_16(475);
+emit_16(542);
+emit_16(476);
+emit_16(543);
+emit_16(477);
+emit_16(543);
+emit_16(476);
+emit_16(543);
+emit_16(477);
+emit_16(544);
+emit_16(478);
+emit_16(544);
+emit_16(477);
+emit_16(544);
+emit_16(478);
+emit_16(545);
+emit_16(479);
+emit_16(545);
+emit_16(478);
+emit_16(545);
+emit_16(479);
+emit_16(546);
+emit_16(480);
+emit_16(546);
+emit_16(479);
+emit_16(546);
+emit_16(480);
+emit_16(547);
+emit_16(481);
+emit_16(547);
+emit_16(480);
+emit_16(547);
+emit_16(481);
+emit_16(548);
+emit_16(482);
+emit_16(548);
+emit_16(481);
+emit_16(548);
+emit_16(482);
+emit_16(549);
+emit_16(483);
+emit_16(549);
+emit_16(482);
+emit_16(549);
+emit_16(483);
+emit_16(550);
+emit_16(484);
+emit_16(550);
+emit_16(483);
+emit_16(550);
+emit_16(484);
+emit_16(551);
+emit_16(485);
+emit_16(551);
+emit_16(484);
+emit_16(551);
+emit_16(485);
+emit_16(552);
+emit_16(486);
+emit_16(552);
+emit_16(485);
+emit_16(552);
+emit_16(486);
+emit_16(553);
+emit_16(487);
+emit_16(553);
+emit_16(486);
+emit_16(553);
+emit_16(487);
+emit_16(554);
+emit_16(488);
+emit_16(554);
+emit_16(487);
+emit_16(554);
+emit_16(488);
+emit_16(555);
+emit_16(489);
+emit_16(555);
+emit_16(488);
+emit_16(555);
+emit_16(489);
+emit_16(556);
+emit_16(490);
+emit_16(556);
+emit_16(489);
+emit_16(556);
+emit_16(490);
+emit_16(557);
+emit_16(491);
+emit_16(557);
+emit_16(490);
+emit_16(557);
+emit_16(491);
+emit_16(558);
+emit_16(492);
+emit_16(558);
+emit_16(491);
+emit_16(558);
+emit_16(492);
+emit_16(559);
+emit_16(493);
+emit_16(559);
+emit_16(492);
+emit_16(559);
+emit_16(493);
+emit_16(560);
+emit_16(494);
+emit_16(560);
+emit_16(493);
+emit_16(560);
+emit_16(494);
+emit_16(561);
+emit_16(495);
+emit_16(561);
+emit_16(494);
+emit_16(561);
+emit_16(495);
+emit_16(562);
+emit_16(496);
+emit_16(562);
+emit_16(495);
+emit_16(562);
+emit_16(496);
+emit_16(563);
+emit_16(497);
+emit_16(563);
+emit_16(496);
+emit_16(563);
+emit_16(497);
+emit_16(564);
+emit_16(498);
+emit_16(564);
+emit_16(497);
+emit_16(564);
+emit_16(498);
+emit_16(565);
+emit_16(499);
+emit_16(565);
+emit_16(498);
+emit_16(565);
+emit_16(499);
+emit_16(566);
+emit_16(500);
+emit_16(566);
+emit_16(499);
+emit_16(566);
+emit_16(500);
+emit_16(567);
+emit_16(501);
+emit_16(567);
+emit_16(500);
+emit_16(567);
+emit_16(501);
+emit_16(568);
+emit_16(502);
+emit_16(568);
+emit_16(501);
+emit_16(568);
+emit_16(502);
+emit_16(569);
+emit_16(503);
+emit_16(569);
+emit_16(502);
+emit_16(569);
+emit_16(503);
+emit_16(570);
+emit_16(504);
+emit_16(570);
+emit_16(503);
+emit_16(570);
+emit_16(504);
+emit_16(571);
+emit_16(505);
+emit_16(571);
+emit_16(504);
+emit_16(571);
+emit_16(505);
+emit_16(572);
+emit_16(506);
+emit_16(572);
+emit_16(505);
+emit_16(572);
+emit_16(506);
+emit_16(573);
+emit_16(507);
+emit_16(573);
+emit_16(506);
+emit_16(573);
+emit_16(507);
+emit_16(574);
+emit_16(508);
+emit_16(574);
+emit_16(507);
+emit_16(574);
+emit_16(508);
+emit_16(575);
+emit_16(509);
+emit_16(575);
+emit_16(508);
+emit_16(575);
+emit_16(509);
+emit_16(576);
+emit_16(510);
+emit_16(576);
+emit_16(509);
+emit_16(576);
+emit_16(510);
+emit_16(577);
+emit_16(511);
+emit_16(577);
+emit_16(510);
+emit_16(577);
+emit_16(511);
+emit_16(578);
+emit_16(512);
+emit_16(578);
+emit_16(511);
+emit_16(578);
+emit_16(512);
+emit_16(579);
+emit_16(513);
+emit_16(579);
+emit_16(512);
+emit_16(579);
+emit_16(513);
+emit_16(580);
+emit_16(514);
+emit_16(580);
+emit_16(513);
+emit_16(580);
+emit_16(514);
+emit_16(581);
+emit_16(515);
+emit_16(581);
+emit_16(514);
+emit_16(581);
+emit_16(515);
+emit_16(582);
+emit_16(516);
+emit_16(582);
+emit_16(515);
+emit_16(582);
+emit_16(516);
+emit_16(583);
+emit_16(517);
+emit_16(583);
+emit_16(516);
+emit_16(583);
+emit_16(517);
+emit_16(584);
+emit_16(518);
+emit_16(584);
+emit_16(517);
+emit_16(584);
+emit_16(518);
+emit_16(585);
+emit_16(519);
+emit_16(585);
+emit_16(518);
+emit_16(585);
+emit_16(519);
+emit_16(586);
+emit_16(520);
+emit_16(586);
+emit_16(519);
+emit_16(586);
+emit_16(520);
+emit_16(587);
+emit_16(521);
+emit_16(587);
+emit_16(520);
+emit_16(587);
+emit_16(521);
+emit_16(588);
+emit_16(522);
+emit_16(588);
+emit_16(521);
+emit_16(588);
+emit_16(522);
+emit_16(589);
+emit_16(523);
+emit_16(589);
+emit_16(522);
+emit_16(589);
+emit_16(523);
+emit_16(590);
+emit_16(524);
+emit_16(590);
+emit_16(523);
+emit_16(590);
+emit_16(524);
+emit_16(591);
+emit_16(525);
+emit_16(591);
+emit_16(524);
+emit_16(591);
+emit_16(525);
+emit_16(592);
+emit_16(526);
+emit_16(592);
+emit_16(525);
+emit_16(592);
+emit_16(526);
+emit_16(593);
+emit_16(527);
+emit_16(593);
+emit_16(526);
+emit_16(594);
+emit_16(528);
+emit_16(595);
+emit_16(529);
+emit_16(595);
+emit_16(528);
+emit_16(595);
+emit_16(529);
+emit_16(596);
+emit_16(530);
+emit_16(596);
+emit_16(529);
+emit_16(596);
+emit_16(530);
+emit_16(597);
+emit_16(531);
+emit_16(597);
+emit_16(530);
+emit_16(597);
+emit_16(531);
+emit_16(598);
+emit_16(532);
+emit_16(598);
+emit_16(531);
+emit_16(598);
+emit_16(532);
+emit_16(599);
+emit_16(533);
+emit_16(599);
+emit_16(532);
+emit_16(599);
+emit_16(533);
+emit_16(600);
+emit_16(534);
+emit_16(600);
+emit_16(533);
+emit_16(600);
+emit_16(534);
+emit_16(601);
+emit_16(535);
+emit_16(601);
+emit_16(534);
+emit_16(601);
+emit_16(535);
+emit_16(602);
+emit_16(536);
+emit_16(602);
+emit_16(535);
+emit_16(602);
+emit_16(536);
+emit_16(603);
+emit_16(537);
+emit_16(603);
+emit_16(536);
+emit_16(603);
+emit_16(537);
+emit_16(604);
+emit_16(538);
+emit_16(604);
+emit_16(537);
+emit_16(604);
+emit_16(538);
+emit_16(605);
+emit_16(539);
+emit_16(605);
+emit_16(538);
+emit_16(605);
+emit_16(539);
+emit_16(606);
+emit_16(540);
+emit_16(606);
+emit_16(539);
+emit_16(606);
+emit_16(540);
+emit_16(607);
+emit_16(541);
+emit_16(607);
+emit_16(540);
+emit_16(607);
+emit_16(541);
+emit_16(608);
+emit_16(542);
+emit_16(608);
+emit_16(541);
+emit_16(608);
+emit_16(542);
+emit_16(609);
+emit_16(543);
+emit_16(609);
+emit_16(542);
+emit_16(609);
+emit_16(543);
+emit_16(610);
+emit_16(544);
+emit_16(610);
+emit_16(543);
+emit_16(610);
+emit_16(544);
+emit_16(611);
+emit_16(545);
+emit_16(611);
+emit_16(544);
+emit_16(611);
+emit_16(545);
+emit_16(612);
+emit_16(546);
+emit_16(612);
+emit_16(545);
+emit_16(612);
+emit_16(546);
+emit_16(613);
+emit_16(547);
+emit_16(613);
+emit_16(546);
+emit_16(613);
+emit_16(547);
+emit_16(614);
+emit_16(548);
+emit_16(614);
+emit_16(547);
+emit_16(614);
+emit_16(548);
+emit_16(615);
+emit_16(549);
+emit_16(615);
+emit_16(548);
+emit_16(615);
+emit_16(549);
+emit_16(616);
+emit_16(550);
+emit_16(616);
+emit_16(549);
+emit_16(616);
+emit_16(550);
+emit_16(617);
+emit_16(551);
+emit_16(617);
+emit_16(550);
+emit_16(617);
+emit_16(551);
+emit_16(618);
+emit_16(552);
+emit_16(618);
+emit_16(551);
+emit_16(618);
+emit_16(552);
+emit_16(619);
+emit_16(553);
+emit_16(619);
+emit_16(552);
+emit_16(619);
+emit_16(553);
+emit_16(620);
+emit_16(554);
+emit_16(620);
+emit_16(553);
+emit_16(620);
+emit_16(554);
+emit_16(621);
+emit_16(555);
+emit_16(621);
+emit_16(554);
+emit_16(621);
+emit_16(555);
+emit_16(622);
+emit_16(556);
+emit_16(622);
+emit_16(555);
+emit_16(622);
+emit_16(556);
+emit_16(623);
+emit_16(557);
+emit_16(623);
+emit_16(556);
+emit_16(623);
+emit_16(557);
+emit_16(624);
+emit_16(558);
+emit_16(624);
+emit_16(557);
+emit_16(624);
+emit_16(558);
+emit_16(625);
+emit_16(559);
+emit_16(625);
+emit_16(558);
+emit_16(625);
+emit_16(559);
+emit_16(626);
+emit_16(560);
+emit_16(626);
+emit_16(559);
+emit_16(626);
+emit_16(560);
+emit_16(627);
+emit_16(561);
+emit_16(627);
+emit_16(560);
+emit_16(627);
+emit_16(561);
+emit_16(628);
+emit_16(562);
+emit_16(628);
+emit_16(561);
+emit_16(628);
+emit_16(562);
+emit_16(629);
+emit_16(563);
+emit_16(629);
+emit_16(562);
+emit_16(629);
+emit_16(563);
+emit_16(630);
+emit_16(564);
+emit_16(630);
+emit_16(563);
+emit_16(630);
+emit_16(564);
+emit_16(631);
+emit_16(565);
+emit_16(631);
+emit_16(564);
+emit_16(631);
+emit_16(565);
+emit_16(632);
+emit_16(566);
+emit_16(632);
+emit_16(565);
+emit_16(632);
+emit_16(566);
+emit_16(633);
+emit_16(567);
+emit_16(633);
+emit_16(566);
+emit_16(633);
+emit_16(567);
+emit_16(634);
+emit_16(568);
+emit_16(634);
+emit_16(567);
+emit_16(634);
+emit_16(568);
+emit_16(635);
+emit_16(569);
+emit_16(635);
+emit_16(568);
+emit_16(635);
+emit_16(569);
+emit_16(636);
+emit_16(570);
+emit_16(636);
+emit_16(569);
+emit_16(636);
+emit_16(570);
+emit_16(637);
+emit_16(571);
+emit_16(637);
+emit_16(570);
+emit_16(637);
+emit_16(571);
+emit_16(638);
+emit_16(572);
+emit_16(638);
+emit_16(571);
+emit_16(638);
+emit_16(572);
+emit_16(639);
+emit_16(573);
+emit_16(639);
+emit_16(572);
+emit_16(639);
+emit_16(573);
+emit_16(640);
+emit_16(574);
+emit_16(640);
+emit_16(573);
+emit_16(640);
+emit_16(574);
+emit_16(641);
+emit_16(575);
+emit_16(641);
+emit_16(574);
+emit_16(641);
+emit_16(575);
+emit_16(642);
+emit_16(576);
+emit_16(642);
+emit_16(575);
+emit_16(642);
+emit_16(576);
+emit_16(643);
+emit_16(577);
+emit_16(643);
+emit_16(576);
+emit_16(643);
+emit_16(577);
+emit_16(644);
+emit_16(578);
+emit_16(644);
+emit_16(577);
+emit_16(644);
+emit_16(578);
+emit_16(645);
+emit_16(579);
+emit_16(645);
+emit_16(578);
+emit_16(645);
+emit_16(579);
+emit_16(646);
+emit_16(580);
+emit_16(646);
+emit_16(579);
+emit_16(646);
+emit_16(580);
+emit_16(647);
+emit_16(581);
+emit_16(647);
+emit_16(580);
+emit_16(647);
+emit_16(581);
+emit_16(648);
+emit_16(582);
+emit_16(648);
+emit_16(581);
+emit_16(648);
+emit_16(582);
+emit_16(649);
+emit_16(583);
+emit_16(649);
+emit_16(582);
+emit_16(649);
+emit_16(583);
+emit_16(650);
+emit_16(584);
+emit_16(650);
+emit_16(583);
+emit_16(650);
+emit_16(584);
+emit_16(651);
+emit_16(585);
+emit_16(651);
+emit_16(584);
+emit_16(651);
+emit_16(585);
+emit_16(652);
+emit_16(586);
+emit_16(652);
+emit_16(585);
+emit_16(652);
+emit_16(586);
+emit_16(653);
+emit_16(587);
+emit_16(653);
+emit_16(586);
+emit_16(653);
+emit_16(587);
+emit_16(654);
+emit_16(588);
+emit_16(654);
+emit_16(587);
+emit_16(654);
+emit_16(588);
+emit_16(655);
+emit_16(589);
+emit_16(655);
+emit_16(588);
+emit_16(655);
+emit_16(589);
+emit_16(656);
+emit_16(590);
+emit_16(656);
+emit_16(589);
+emit_16(656);
+emit_16(590);
+emit_16(657);
+emit_16(591);
+emit_16(657);
+emit_16(590);
+emit_16(657);
+emit_16(591);
+emit_16(658);
+emit_16(592);
+emit_16(658);
+emit_16(591);
+emit_16(658);
+emit_16(592);
+emit_16(659);
+emit_16(593);
+emit_16(659);
+emit_16(592);
+emit_16(660);
+emit_16(594);
+emit_16(661);
+emit_16(595);
+emit_16(661);
+emit_16(594);
+emit_16(661);
+emit_16(595);
+emit_16(662);
+emit_16(596);
+emit_16(662);
+emit_16(595);
+emit_16(662);
+emit_16(596);
+emit_16(663);
+emit_16(597);
+emit_16(663);
+emit_16(596);
+emit_16(663);
+emit_16(597);
+emit_16(664);
+emit_16(598);
+emit_16(664);
+emit_16(597);
+emit_16(664);
+emit_16(598);
+emit_16(665);
+emit_16(599);
+emit_16(665);
+emit_16(598);
+emit_16(665);
+emit_16(599);
+emit_16(666);
+emit_16(600);
+emit_16(666);
+emit_16(599);
+emit_16(666);
+emit_16(600);
+emit_16(667);
+emit_16(601);
+emit_16(667);
+emit_16(600);
+emit_16(667);
+emit_16(601);
+emit_16(668);
+emit_16(602);
+emit_16(668);
+emit_16(601);
+emit_16(668);
+emit_16(602);
+emit_16(669);
+emit_16(603);
+emit_16(669);
+emit_16(602);
+emit_16(669);
+emit_16(603);
+emit_16(670);
+emit_16(604);
+emit_16(670);
+emit_16(603);
+emit_16(670);
+emit_16(604);
+emit_16(671);
+emit_16(605);
+emit_16(671);
+emit_16(604);
+emit_16(671);
+emit_16(605);
+emit_16(672);
+emit_16(606);
+emit_16(672);
+emit_16(605);
+emit_16(672);
+emit_16(606);
+emit_16(673);
+emit_16(607);
+emit_16(673);
+emit_16(606);
+emit_16(673);
+emit_16(607);
+emit_16(674);
+emit_16(608);
+emit_16(674);
+emit_16(607);
+emit_16(674);
+emit_16(608);
+emit_16(675);
+emit_16(609);
+emit_16(675);
+emit_16(608);
+emit_16(675);
+emit_16(609);
+emit_16(676);
+emit_16(610);
+emit_16(676);
+emit_16(609);
+emit_16(676);
+emit_16(610);
+emit_16(677);
+emit_16(611);
+emit_16(677);
+emit_16(610);
+emit_16(677);
+emit_16(611);
+emit_16(678);
+emit_16(612);
+emit_16(678);
+emit_16(611);
+emit_16(678);
+emit_16(612);
+emit_16(679);
+emit_16(613);
+emit_16(679);
+emit_16(612);
+emit_16(679);
+emit_16(613);
+emit_16(680);
+emit_16(614);
+emit_16(680);
+emit_16(613);
+emit_16(680);
+emit_16(614);
+emit_16(681);
+emit_16(615);
+emit_16(681);
+emit_16(614);
+emit_16(681);
+emit_16(615);
+emit_16(682);
+emit_16(616);
+emit_16(682);
+emit_16(615);
+emit_16(682);
+emit_16(616);
+emit_16(683);
+emit_16(617);
+emit_16(683);
+emit_16(616);
+emit_16(683);
+emit_16(617);
+emit_16(684);
+emit_16(618);
+emit_16(684);
+emit_16(617);
+emit_16(684);
+emit_16(618);
+emit_16(685);
+emit_16(619);
+emit_16(685);
+emit_16(618);
+emit_16(685);
+emit_16(619);
+emit_16(686);
+emit_16(620);
+emit_16(686);
+emit_16(619);
+emit_16(686);
+emit_16(620);
+emit_16(687);
+emit_16(621);
+emit_16(687);
+emit_16(620);
+emit_16(687);
+emit_16(621);
+emit_16(688);
+emit_16(622);
+emit_16(688);
+emit_16(621);
+emit_16(688);
+emit_16(622);
+emit_16(689);
+emit_16(623);
+emit_16(689);
+emit_16(622);
+emit_16(689);
+emit_16(623);
+emit_16(690);
+emit_16(624);
+emit_16(690);
+emit_16(623);
+emit_16(690);
+emit_16(624);
+emit_16(691);
+emit_16(625);
+emit_16(691);
+emit_16(624);
+emit_16(691);
+emit_16(625);
+emit_16(692);
+emit_16(626);
+emit_16(692);
+emit_16(625);
+emit_16(692);
+emit_16(626);
+emit_16(693);
+emit_16(627);
+emit_16(693);
+emit_16(626);
+emit_16(693);
+emit_16(627);
+emit_16(694);
+emit_16(628);
+emit_16(694);
+emit_16(627);
+emit_16(694);
+emit_16(628);
+emit_16(695);
+emit_16(629);
+emit_16(695);
+emit_16(628);
+emit_16(695);
+emit_16(629);
+emit_16(696);
+emit_16(630);
+emit_16(696);
+emit_16(629);
+emit_16(696);
+emit_16(630);
+emit_16(697);
+emit_16(631);
+emit_16(697);
+emit_16(630);
+emit_16(697);
+emit_16(631);
+emit_16(698);
+emit_16(632);
+emit_16(698);
+emit_16(631);
+emit_16(698);
+emit_16(632);
+emit_16(699);
+emit_16(633);
+emit_16(699);
+emit_16(632);
+emit_16(699);
+emit_16(633);
+emit_16(700);
+emit_16(634);
+emit_16(700);
+emit_16(633);
+emit_16(700);
+emit_16(634);
+emit_16(701);
+emit_16(635);
+emit_16(701);
+emit_16(634);
+emit_16(701);
+emit_16(635);
+emit_16(702);
+emit_16(636);
+emit_16(702);
+emit_16(635);
+emit_16(702);
+emit_16(636);
+emit_16(703);
+emit_16(637);
+emit_16(703);
+emit_16(636);
+emit_16(703);
+emit_16(637);
+emit_16(704);
+emit_16(638);
+emit_16(704);
+emit_16(637);
+emit_16(704);
+emit_16(638);
+emit_16(705);
+emit_16(639);
+emit_16(705);
+emit_16(638);
+emit_16(705);
+emit_16(639);
+emit_16(706);
+emit_16(640);
+emit_16(706);
+emit_16(639);
+emit_16(706);
+emit_16(640);
+emit_16(707);
+emit_16(641);
+emit_16(707);
+emit_16(640);
+emit_16(707);
+emit_16(641);
+emit_16(708);
+emit_16(642);
+emit_16(708);
+emit_16(641);
+emit_16(708);
+emit_16(642);
+emit_16(709);
+emit_16(643);
+emit_16(709);
+emit_16(642);
+emit_16(709);
+emit_16(643);
+emit_16(710);
+emit_16(644);
+emit_16(710);
+emit_16(643);
+emit_16(710);
+emit_16(644);
+emit_16(711);
+emit_16(645);
+emit_16(711);
+emit_16(644);
+emit_16(711);
+emit_16(645);
+emit_16(712);
+emit_16(646);
+emit_16(712);
+emit_16(645);
+emit_16(712);
+emit_16(646);
+emit_16(713);
+emit_16(647);
+emit_16(713);
+emit_16(646);
+emit_16(713);
+emit_16(647);
+emit_16(714);
+emit_16(648);
+emit_16(714);
+emit_16(647);
+emit_16(714);
+emit_16(648);
+emit_16(715);
+emit_16(649);
+emit_16(715);
+emit_16(648);
+emit_16(715);
+emit_16(649);
+emit_16(716);
+emit_16(650);
+emit_16(716);
+emit_16(649);
+emit_16(716);
+emit_16(650);
+emit_16(717);
+emit_16(651);
+emit_16(717);
+emit_16(650);
+emit_16(717);
+emit_16(651);
+emit_16(718);
+emit_16(652);
+emit_16(718);
+emit_16(651);
+emit_16(718);
+emit_16(652);
+emit_16(719);
+emit_16(653);
+emit_16(719);
+emit_16(652);
+emit_16(719);
+emit_16(653);
+emit_16(720);
+emit_16(654);
+emit_16(720);
+emit_16(653);
+emit_16(720);
+emit_16(654);
+emit_16(721);
+emit_16(655);
+emit_16(721);
+emit_16(654);
+emit_16(721);
+emit_16(655);
+emit_16(722);
+emit_16(656);
+emit_16(722);
+emit_16(655);
+emit_16(722);
+emit_16(656);
+emit_16(723);
+emit_16(657);
+emit_16(723);
+emit_16(656);
+emit_16(723);
+emit_16(657);
+emit_16(724);
+emit_16(658);
+emit_16(724);
+emit_16(657);
+emit_16(724);
+emit_16(658);
+emit_16(725);
+emit_16(659);
+emit_16(725);
+emit_16(658);
+emit_16(726);
+emit_16(660);
+emit_16(727);
+emit_16(661);
+emit_16(727);
+emit_16(660);
+emit_16(727);
+emit_16(661);
+emit_16(728);
+emit_16(662);
+emit_16(728);
+emit_16(661);
+emit_16(728);
+emit_16(662);
+emit_16(729);
+emit_16(663);
+emit_16(729);
+emit_16(662);
+emit_16(729);
+emit_16(663);
+emit_16(730);
+emit_16(664);
+emit_16(730);
+emit_16(663);
+emit_16(730);
+emit_16(664);
+emit_16(731);
+emit_16(665);
+emit_16(731);
+emit_16(664);
+emit_16(731);
+emit_16(665);
+emit_16(732);
+emit_16(666);
+emit_16(732);
+emit_16(665);
+emit_16(732);
+emit_16(666);
+emit_16(733);
+emit_16(667);
+emit_16(733);
+emit_16(666);
+emit_16(733);
+emit_16(667);
+emit_16(734);
+emit_16(668);
+emit_16(734);
+emit_16(667);
+emit_16(734);
+emit_16(668);
+emit_16(735);
+emit_16(669);
+emit_16(735);
+emit_16(668);
+emit_16(735);
+emit_16(669);
+emit_16(736);
+emit_16(670);
+emit_16(736);
+emit_16(669);
+emit_16(736);
+emit_16(670);
+emit_16(737);
+emit_16(671);
+emit_16(737);
+emit_16(670);
+emit_16(737);
+emit_16(671);
+emit_16(738);
+emit_16(672);
+emit_16(738);
+emit_16(671);
+emit_16(738);
+emit_16(672);
+emit_16(739);
+emit_16(673);
+emit_16(739);
+emit_16(672);
+emit_16(739);
+emit_16(673);
+emit_16(740);
+emit_16(674);
+emit_16(740);
+emit_16(673);
+emit_16(740);
+emit_16(674);
+emit_16(741);
+emit_16(675);
+emit_16(741);
+emit_16(674);
+emit_16(741);
+emit_16(675);
+emit_16(742);
+emit_16(676);
+emit_16(742);
+emit_16(675);
+emit_16(742);
+emit_16(676);
+emit_16(743);
+emit_16(677);
+emit_16(743);
+emit_16(676);
+emit_16(743);
+emit_16(677);
+emit_16(744);
+emit_16(678);
+emit_16(744);
+emit_16(677);
+emit_16(744);
+emit_16(678);
+emit_16(745);
+emit_16(679);
+emit_16(745);
+emit_16(678);
+emit_16(745);
+emit_16(679);
+emit_16(746);
+emit_16(680);
+emit_16(746);
+emit_16(679);
+emit_16(746);
+emit_16(680);
+emit_16(747);
+emit_16(681);
+emit_16(747);
+emit_16(680);
+emit_16(747);
+emit_16(681);
+emit_16(748);
+emit_16(682);
+emit_16(748);
+emit_16(681);
+emit_16(748);
+emit_16(682);
+emit_16(749);
+emit_16(683);
+emit_16(749);
+emit_16(682);
+emit_16(749);
+emit_16(683);
+emit_16(750);
+emit_16(684);
+emit_16(750);
+emit_16(683);
+emit_16(750);
+emit_16(684);
+emit_16(751);
+emit_16(685);
+emit_16(751);
+emit_16(684);
+emit_16(751);
+emit_16(685);
+emit_16(752);
+emit_16(686);
+emit_16(752);
+emit_16(685);
+emit_16(752);
+emit_16(686);
+emit_16(753);
+emit_16(687);
+emit_16(753);
+emit_16(686);
+emit_16(753);
+emit_16(687);
+emit_16(754);
+emit_16(688);
+emit_16(754);
+emit_16(687);
+emit_16(754);
+emit_16(688);
+emit_16(755);
+emit_16(689);
+emit_16(755);
+emit_16(688);
+emit_16(755);
+emit_16(689);
+emit_16(756);
+emit_16(690);
+emit_16(756);
+emit_16(689);
+emit_16(756);
+emit_16(690);
+emit_16(757);
+emit_16(691);
+emit_16(757);
+emit_16(690);
+emit_16(757);
+emit_16(691);
+emit_16(758);
+emit_16(692);
+emit_16(758);
+emit_16(691);
+emit_16(758);
+emit_16(692);
+emit_16(759);
+emit_16(693);
+emit_16(759);
+emit_16(692);
+emit_16(759);
+emit_16(693);
+emit_16(760);
+emit_16(694);
+emit_16(760);
+emit_16(693);
+emit_16(760);
+emit_16(694);
+emit_16(761);
+emit_16(695);
+emit_16(761);
+emit_16(694);
+emit_16(761);
+emit_16(695);
+emit_16(762);
+emit_16(696);
+emit_16(762);
+emit_16(695);
+emit_16(762);
+emit_16(696);
+emit_16(763);
+emit_16(697);
+emit_16(763);
+emit_16(696);
+emit_16(763);
+emit_16(697);
+emit_16(764);
+emit_16(698);
+emit_16(764);
+emit_16(697);
+emit_16(764);
+emit_16(698);
+emit_16(765);
+emit_16(699);
+emit_16(765);
+emit_16(698);
+emit_16(765);
+emit_16(699);
+emit_16(766);
+emit_16(700);
+emit_16(766);
+emit_16(699);
+emit_16(766);
+emit_16(700);
+emit_16(767);
+emit_16(701);
+emit_16(767);
+emit_16(700);
+emit_16(767);
+emit_16(701);
+emit_16(768);
+emit_16(702);
+emit_16(768);
+emit_16(701);
+emit_16(768);
+emit_16(702);
+emit_16(769);
+emit_16(703);
+emit_16(769);
+emit_16(702);
+emit_16(769);
+emit_16(703);
+emit_16(770);
+emit_16(704);
+emit_16(770);
+emit_16(703);
+emit_16(770);
+emit_16(704);
+emit_16(771);
+emit_16(705);
+emit_16(771);
+emit_16(704);
+emit_16(771);
+emit_16(705);
+emit_16(772);
+emit_16(706);
+emit_16(772);
+emit_16(705);
+emit_16(772);
+emit_16(706);
+emit_16(773);
+emit_16(707);
+emit_16(773);
+emit_16(706);
+emit_16(773);
+emit_16(707);
+emit_16(774);
+emit_16(708);
+emit_16(774);
+emit_16(707);
+emit_16(774);
+emit_16(708);
+emit_16(775);
+emit_16(709);
+emit_16(775);
+emit_16(708);
+emit_16(775);
+emit_16(709);
+emit_16(776);
+emit_16(710);
+emit_16(776);
+emit_16(709);
+emit_16(776);
+emit_16(710);
+emit_16(777);
+emit_16(711);
+emit_16(777);
+emit_16(710);
+emit_16(777);
+emit_16(711);
+emit_16(778);
+emit_16(712);
+emit_16(778);
+emit_16(711);
+emit_16(778);
+emit_16(712);
+emit_16(779);
+emit_16(713);
+emit_16(779);
+emit_16(712);
+emit_16(779);
+emit_16(713);
+emit_16(780);
+emit_16(714);
+emit_16(780);
+emit_16(713);
+emit_16(780);
+emit_16(714);
+emit_16(781);
+emit_16(715);
+emit_16(781);
+emit_16(714);
+emit_16(781);
+emit_16(715);
+emit_16(782);
+emit_16(716);
+emit_16(782);
+emit_16(715);
+emit_16(782);
+emit_16(716);
+emit_16(783);
+emit_16(717);
+emit_16(783);
+emit_16(716);
+emit_16(783);
+emit_16(717);
+emit_16(784);
+emit_16(718);
+emit_16(784);
+emit_16(717);
+emit_16(784);
+emit_16(718);
+emit_16(785);
+emit_16(719);
+emit_16(785);
+emit_16(718);
+emit_16(785);
+emit_16(719);
+emit_16(786);
+emit_16(720);
+emit_16(786);
+emit_16(719);
+emit_16(786);
+emit_16(720);
+emit_16(787);
+emit_16(721);
+emit_16(787);
+emit_16(720);
+emit_16(787);
+emit_16(721);
+emit_16(788);
+emit_16(722);
+emit_16(788);
+emit_16(721);
+emit_16(788);
+emit_16(722);
+emit_16(789);
+emit_16(723);
+emit_16(789);
+emit_16(722);
+emit_16(789);
+emit_16(723);
+emit_16(790);
+emit_16(724);
+emit_16(790);
+emit_16(723);
+emit_16(790);
+emit_16(724);
+emit_16(791);
+emit_16(725);
+emit_16(791);
+emit_16(724);
+emit_16(792);
+emit_16(726);
+emit_16(793);
+emit_16(727);
+emit_16(793);
+emit_16(726);
+emit_16(793);
+emit_16(727);
+emit_16(794);
+emit_16(728);
+emit_16(794);
+emit_16(727);
+emit_16(794);
+emit_16(728);
+emit_16(795);
+emit_16(729);
+emit_16(795);
+emit_16(728);
+emit_16(795);
+emit_16(729);
+emit_16(796);
+emit_16(730);
+emit_16(796);
+emit_16(729);
+emit_16(796);
+emit_16(730);
+emit_16(797);
+emit_16(731);
+emit_16(797);
+emit_16(730);
+emit_16(797);
+emit_16(731);
+emit_16(798);
+emit_16(732);
+emit_16(798);
+emit_16(731);
+emit_16(798);
+emit_16(732);
+emit_16(799);
+emit_16(733);
+emit_16(799);
+emit_16(732);
+emit_16(799);
+emit_16(733);
+emit_16(800);
+emit_16(734);
+emit_16(800);
+emit_16(733);
+emit_16(800);
+emit_16(734);
+emit_16(801);
+emit_16(735);
+emit_16(801);
+emit_16(734);
+emit_16(801);
+emit_16(735);
+emit_16(802);
+emit_16(736);
+emit_16(802);
+emit_16(735);
+emit_16(802);
+emit_16(736);
+emit_16(803);
+emit_16(737);
+emit_16(803);
+emit_16(736);
+emit_16(803);
+emit_16(737);
+emit_16(804);
+emit_16(738);
+emit_16(804);
+emit_16(737);
+emit_16(804);
+emit_16(738);
+emit_16(805);
+emit_16(739);
+emit_16(805);
+emit_16(738);
+emit_16(805);
+emit_16(739);
+emit_16(806);
+emit_16(740);
+emit_16(806);
+emit_16(739);
+emit_16(806);
+emit_16(740);
+emit_16(807);
+emit_16(741);
+emit_16(807);
+emit_16(740);
+emit_16(807);
+emit_16(741);
+emit_16(808);
+emit_16(742);
+emit_16(808);
+emit_16(741);
+emit_16(808);
+emit_16(742);
+emit_16(809);
+emit_16(743);
+emit_16(809);
+emit_16(742);
+emit_16(809);
+emit_16(743);
+emit_16(810);
+emit_16(744);
+emit_16(810);
+emit_16(743);
+emit_16(810);
+emit_16(744);
+emit_16(811);
+emit_16(745);
+emit_16(811);
+emit_16(744);
+emit_16(811);
+emit_16(745);
+emit_16(812);
+emit_16(746);
+emit_16(812);
+emit_16(745);
+emit_16(812);
+emit_16(746);
+emit_16(813);
+emit_16(747);
+emit_16(813);
+emit_16(746);
+emit_16(813);
+emit_16(747);
+emit_16(814);
+emit_16(748);
+emit_16(814);
+emit_16(747);
+emit_16(814);
+emit_16(748);
+emit_16(815);
+emit_16(749);
+emit_16(815);
+emit_16(748);
+emit_16(815);
+emit_16(749);
+emit_16(816);
+emit_16(750);
+emit_16(816);
+emit_16(749);
+emit_16(816);
+emit_16(750);
+emit_16(817);
+emit_16(751);
+emit_16(817);
+emit_16(750);
+emit_16(817);
+emit_16(751);
+emit_16(818);
+emit_16(752);
+emit_16(818);
+emit_16(751);
+emit_16(818);
+emit_16(752);
+emit_16(819);
+emit_16(753);
+emit_16(819);
+emit_16(752);
+emit_16(819);
+emit_16(753);
+emit_16(820);
+emit_16(754);
+emit_16(820);
+emit_16(753);
+emit_16(820);
+emit_16(754);
+emit_16(821);
+emit_16(755);
+emit_16(821);
+emit_16(754);
+emit_16(821);
+emit_16(755);
+emit_16(822);
+emit_16(756);
+emit_16(822);
+emit_16(755);
+emit_16(822);
+emit_16(756);
+emit_16(823);
+emit_16(757);
+emit_16(823);
+emit_16(756);
+emit_16(823);
+emit_16(757);
+emit_16(824);
+emit_16(758);
+emit_16(824);
+emit_16(757);
+emit_16(824);
+emit_16(758);
+emit_16(825);
+emit_16(759);
+emit_16(825);
+emit_16(758);
+emit_16(825);
+emit_16(759);
+emit_16(826);
+emit_16(760);
+emit_16(826);
+emit_16(759);
+emit_16(826);
+emit_16(760);
+emit_16(827);
+emit_16(761);
+emit_16(827);
+emit_16(760);
+emit_16(827);
+emit_16(761);
+emit_16(828);
+emit_16(762);
+emit_16(828);
+emit_16(761);
+emit_16(828);
+emit_16(762);
+emit_16(829);
+emit_16(763);
+emit_16(829);
+emit_16(762);
+emit_16(829);
+emit_16(763);
+emit_16(830);
+emit_16(764);
+emit_16(830);
+emit_16(763);
+emit_16(830);
+emit_16(764);
+emit_16(831);
+emit_16(765);
+emit_16(831);
+emit_16(764);
+emit_16(831);
+emit_16(765);
+emit_16(832);
+emit_16(766);
+emit_16(832);
+emit_16(765);
+emit_16(832);
+emit_16(766);
+emit_16(833);
+emit_16(767);
+emit_16(833);
+emit_16(766);
+emit_16(833);
+emit_16(767);
+emit_16(834);
+emit_16(768);
+emit_16(834);
+emit_16(767);
+emit_16(834);
+emit_16(768);
+emit_16(835);
+emit_16(769);
+emit_16(835);
+emit_16(768);
+emit_16(835);
+emit_16(769);
+emit_16(836);
+emit_16(770);
+emit_16(836);
+emit_16(769);
+emit_16(836);
+emit_16(770);
+emit_16(837);
+emit_16(771);
+emit_16(837);
+emit_16(770);
+emit_16(837);
+emit_16(771);
+emit_16(838);
+emit_16(772);
+emit_16(838);
+emit_16(771);
+emit_16(838);
+emit_16(772);
+emit_16(839);
+emit_16(773);
+emit_16(839);
+emit_16(772);
+emit_16(839);
+emit_16(773);
+emit_16(840);
+emit_16(774);
+emit_16(840);
+emit_16(773);
+emit_16(840);
+emit_16(774);
+emit_16(841);
+emit_16(775);
+emit_16(841);
+emit_16(774);
+emit_16(841);
+emit_16(775);
+emit_16(842);
+emit_16(776);
+emit_16(842);
+emit_16(775);
+emit_16(842);
+emit_16(776);
+emit_16(843);
+emit_16(777);
+emit_16(843);
+emit_16(776);
+emit_16(843);
+emit_16(777);
+emit_16(844);
+emit_16(778);
+emit_16(844);
+emit_16(777);
+emit_16(844);
+emit_16(778);
+emit_16(845);
+emit_16(779);
+emit_16(845);
+emit_16(778);
+emit_16(845);
+emit_16(779);
+emit_16(846);
+emit_16(780);
+emit_16(846);
+emit_16(779);
+emit_16(846);
+emit_16(780);
+emit_16(847);
+emit_16(781);
+emit_16(847);
+emit_16(780);
+emit_16(847);
+emit_16(781);
+emit_16(848);
+emit_16(782);
+emit_16(848);
+emit_16(781);
+emit_16(848);
+emit_16(782);
+emit_16(849);
+emit_16(783);
+emit_16(849);
+emit_16(782);
+emit_16(849);
+emit_16(783);
+emit_16(850);
+emit_16(784);
+emit_16(850);
+emit_16(783);
+emit_16(850);
+emit_16(784);
+emit_16(851);
+emit_16(785);
+emit_16(851);
+emit_16(784);
+emit_16(851);
+emit_16(785);
+emit_16(852);
+emit_16(786);
+emit_16(852);
+emit_16(785);
+emit_16(852);
+emit_16(786);
+emit_16(853);
+emit_16(787);
+emit_16(853);
+emit_16(786);
+emit_16(853);
+emit_16(787);
+emit_16(854);
+emit_16(788);
+emit_16(854);
+emit_16(787);
+emit_16(854);
+emit_16(788);
+emit_16(855);
+emit_16(789);
+emit_16(855);
+emit_16(788);
+emit_16(855);
+emit_16(789);
+emit_16(856);
+emit_16(790);
+emit_16(856);
+emit_16(789);
+emit_16(856);
+emit_16(790);
+emit_16(857);
+emit_16(791);
+emit_16(857);
+emit_16(790);
+emit_16(858);
+emit_16(792);
+emit_16(859);
+emit_16(793);
+emit_16(859);
+emit_16(792);
+emit_16(859);
+emit_16(793);
+emit_16(860);
+emit_16(794);
+emit_16(860);
+emit_16(793);
+emit_16(860);
+emit_16(794);
+emit_16(861);
+emit_16(795);
+emit_16(861);
+emit_16(794);
+emit_16(861);
+emit_16(795);
+emit_16(862);
+emit_16(796);
+emit_16(862);
+emit_16(795);
+emit_16(862);
+emit_16(796);
+emit_16(863);
+emit_16(797);
+emit_16(863);
+emit_16(796);
+emit_16(863);
+emit_16(797);
+emit_16(864);
+emit_16(798);
+emit_16(864);
+emit_16(797);
+emit_16(864);
+emit_16(798);
+emit_16(865);
+emit_16(799);
+emit_16(865);
+emit_16(798);
+emit_16(865);
+emit_16(799);
+emit_16(866);
+emit_16(800);
+emit_16(866);
+emit_16(799);
+emit_16(866);
+emit_16(800);
+emit_16(867);
+emit_16(801);
+emit_16(867);
+emit_16(800);
+emit_16(867);
+emit_16(801);
+emit_16(868);
+emit_16(802);
+emit_16(868);
+emit_16(801);
+emit_16(868);
+emit_16(802);
+emit_16(869);
+emit_16(803);
+emit_16(869);
+emit_16(802);
+emit_16(869);
+emit_16(803);
+emit_16(870);
+emit_16(804);
+emit_16(870);
+emit_16(803);
+emit_16(870);
+emit_16(804);
+emit_16(871);
+emit_16(805);
+emit_16(871);
+emit_16(804);
+emit_16(871);
+emit_16(805);
+emit_16(872);
+emit_16(806);
+emit_16(872);
+emit_16(805);
+emit_16(872);
+emit_16(806);
+emit_16(873);
+emit_16(807);
+emit_16(873);
+emit_16(806);
+emit_16(873);
+emit_16(807);
+emit_16(874);
+emit_16(808);
+emit_16(874);
+emit_16(807);
+emit_16(874);
+emit_16(808);
+emit_16(875);
+emit_16(809);
+emit_16(875);
+emit_16(808);
+emit_16(875);
+emit_16(809);
+emit_16(876);
+emit_16(810);
+emit_16(876);
+emit_16(809);
+emit_16(876);
+emit_16(810);
+emit_16(877);
+emit_16(811);
+emit_16(877);
+emit_16(810);
+emit_16(877);
+emit_16(811);
+emit_16(878);
+emit_16(812);
+emit_16(878);
+emit_16(811);
+emit_16(878);
+emit_16(812);
+emit_16(879);
+emit_16(813);
+emit_16(879);
+emit_16(812);
+emit_16(879);
+emit_16(813);
+emit_16(880);
+emit_16(814);
+emit_16(880);
+emit_16(813);
+emit_16(880);
+emit_16(814);
+emit_16(881);
+emit_16(815);
+emit_16(881);
+emit_16(814);
+emit_16(881);
+emit_16(815);
+emit_16(882);
+emit_16(816);
+emit_16(882);
+emit_16(815);
+emit_16(882);
+emit_16(816);
+emit_16(883);
+emit_16(817);
+emit_16(883);
+emit_16(816);
+emit_16(883);
+emit_16(817);
+emit_16(884);
+emit_16(818);
+emit_16(884);
+emit_16(817);
+emit_16(884);
+emit_16(818);
+emit_16(885);
+emit_16(819);
+emit_16(885);
+emit_16(818);
+emit_16(885);
+emit_16(819);
+emit_16(886);
+emit_16(820);
+emit_16(886);
+emit_16(819);
+emit_16(886);
+emit_16(820);
+emit_16(887);
+emit_16(821);
+emit_16(887);
+emit_16(820);
+emit_16(887);
+emit_16(821);
+emit_16(888);
+emit_16(822);
+emit_16(888);
+emit_16(821);
+emit_16(888);
+emit_16(822);
+emit_16(889);
+emit_16(823);
+emit_16(889);
+emit_16(822);
+emit_16(889);
+emit_16(823);
+emit_16(890);
+emit_16(824);
+emit_16(890);
+emit_16(823);
+emit_16(890);
+emit_16(824);
+emit_16(891);
+emit_16(825);
+emit_16(891);
+emit_16(824);
+emit_16(891);
+emit_16(825);
+emit_16(892);
+emit_16(826);
+emit_16(892);
+emit_16(825);
+emit_16(892);
+emit_16(826);
+emit_16(893);
+emit_16(827);
+emit_16(893);
+emit_16(826);
+emit_16(893);
+emit_16(827);
+emit_16(894);
+emit_16(828);
+emit_16(894);
+emit_16(827);
+emit_16(894);
+emit_16(828);
+emit_16(895);
+emit_16(829);
+emit_16(895);
+emit_16(828);
+emit_16(895);
+emit_16(829);
+emit_16(896);
+emit_16(830);
+emit_16(896);
+emit_16(829);
+emit_16(896);
+emit_16(830);
+emit_16(897);
+emit_16(831);
+emit_16(897);
+emit_16(830);
+emit_16(897);
+emit_16(831);
+emit_16(898);
+emit_16(832);
+emit_16(898);
+emit_16(831);
+emit_16(898);
+emit_16(832);
+emit_16(899);
+emit_16(833);
+emit_16(899);
+emit_16(832);
+emit_16(899);
+emit_16(833);
+emit_16(900);
+emit_16(834);
+emit_16(900);
+emit_16(833);
+emit_16(900);
+emit_16(834);
+emit_16(901);
+emit_16(835);
+emit_16(901);
+emit_16(834);
+emit_16(901);
+emit_16(835);
+emit_16(902);
+emit_16(836);
+emit_16(902);
+emit_16(835);
+emit_16(902);
+emit_16(836);
+emit_16(903);
+emit_16(837);
+emit_16(903);
+emit_16(836);
+emit_16(903);
+emit_16(837);
+emit_16(904);
+emit_16(838);
+emit_16(904);
+emit_16(837);
+emit_16(904);
+emit_16(838);
+emit_16(905);
+emit_16(839);
+emit_16(905);
+emit_16(838);
+emit_16(905);
+emit_16(839);
+emit_16(906);
+emit_16(840);
+emit_16(906);
+emit_16(839);
+emit_16(906);
+emit_16(840);
+emit_16(907);
+emit_16(841);
+emit_16(907);
+emit_16(840);
+emit_16(907);
+emit_16(841);
+emit_16(908);
+emit_16(842);
+emit_16(908);
+emit_16(841);
+emit_16(908);
+emit_16(842);
+emit_16(909);
+emit_16(843);
+emit_16(909);
+emit_16(842);
+emit_16(909);
+emit_16(843);
+emit_16(910);
+emit_16(844);
+emit_16(910);
+emit_16(843);
+emit_16(910);
+emit_16(844);
+emit_16(911);
+emit_16(845);
+emit_16(911);
+emit_16(844);
+emit_16(911);
+emit_16(845);
+emit_16(912);
+emit_16(846);
+emit_16(912);
+emit_16(845);
+emit_16(912);
+emit_16(846);
+emit_16(913);
+emit_16(847);
+emit_16(913);
+emit_16(846);
+emit_16(913);
+emit_16(847);
+emit_16(914);
+emit_16(848);
+emit_16(914);
+emit_16(847);
+emit_16(914);
+emit_16(848);
+emit_16(915);
+emit_16(849);
+emit_16(915);
+emit_16(848);
+emit_16(915);
+emit_16(849);
+emit_16(916);
+emit_16(850);
+emit_16(916);
+emit_16(849);
+emit_16(916);
+emit_16(850);
+emit_16(917);
+emit_16(851);
+emit_16(917);
+emit_16(850);
+emit_16(917);
+emit_16(851);
+emit_16(918);
+emit_16(852);
+emit_16(918);
+emit_16(851);
+emit_16(918);
+emit_16(852);
+emit_16(919);
+emit_16(853);
+emit_16(919);
+emit_16(852);
+emit_16(919);
+emit_16(853);
+emit_16(920);
+emit_16(854);
+emit_16(920);
+emit_16(853);
+emit_16(920);
+emit_16(854);
+emit_16(921);
+emit_16(855);
+emit_16(921);
+emit_16(854);
+emit_16(921);
+emit_16(855);
+emit_16(922);
+emit_16(856);
+emit_16(922);
+emit_16(855);
+emit_16(922);
+emit_16(856);
+emit_16(923);
+emit_16(857);
+emit_16(923);
+emit_16(856);
+emit_16(924);
+emit_16(858);
+emit_16(925);
+emit_16(859);
+emit_16(925);
+emit_16(858);
+emit_16(925);
+emit_16(859);
+emit_16(926);
+emit_16(860);
+emit_16(926);
+emit_16(859);
+emit_16(926);
+emit_16(860);
+emit_16(927);
+emit_16(861);
+emit_16(927);
+emit_16(860);
+emit_16(927);
+emit_16(861);
+emit_16(928);
+emit_16(862);
+emit_16(928);
+emit_16(861);
+emit_16(928);
+emit_16(862);
+emit_16(929);
+emit_16(863);
+emit_16(929);
+emit_16(862);
+emit_16(929);
+emit_16(863);
+emit_16(930);
+emit_16(864);
+emit_16(930);
+emit_16(863);
+emit_16(930);
+emit_16(864);
+emit_16(931);
+emit_16(865);
+emit_16(931);
+emit_16(864);
+emit_16(931);
+emit_16(865);
+emit_16(932);
+emit_16(866);
+emit_16(932);
+emit_16(865);
+emit_16(932);
+emit_16(866);
+emit_16(933);
+emit_16(867);
+emit_16(933);
+emit_16(866);
+emit_16(933);
+emit_16(867);
+emit_16(934);
+emit_16(868);
+emit_16(934);
+emit_16(867);
+emit_16(934);
+emit_16(868);
+emit_16(935);
+emit_16(869);
+emit_16(935);
+emit_16(868);
+emit_16(935);
+emit_16(869);
+emit_16(936);
+emit_16(870);
+emit_16(936);
+emit_16(869);
+emit_16(936);
+emit_16(870);
+emit_16(937);
+emit_16(871);
+emit_16(937);
+emit_16(870);
+emit_16(937);
+emit_16(871);
+emit_16(938);
+emit_16(872);
+emit_16(938);
+emit_16(871);
+emit_16(938);
+emit_16(872);
+emit_16(939);
+emit_16(873);
+emit_16(939);
+emit_16(872);
+emit_16(939);
+emit_16(873);
+emit_16(940);
+emit_16(874);
+emit_16(940);
+emit_16(873);
+emit_16(940);
+emit_16(874);
+emit_16(941);
+emit_16(875);
+emit_16(941);
+emit_16(874);
+emit_16(941);
+emit_16(875);
+emit_16(942);
+emit_16(876);
+emit_16(942);
+emit_16(875);
+emit_16(942);
+emit_16(876);
+emit_16(943);
+emit_16(877);
+emit_16(943);
+emit_16(876);
+emit_16(943);
+emit_16(877);
+emit_16(944);
+emit_16(878);
+emit_16(944);
+emit_16(877);
+emit_16(944);
+emit_16(878);
+emit_16(945);
+emit_16(879);
+emit_16(945);
+emit_16(878);
+emit_16(945);
+emit_16(879);
+emit_16(946);
+emit_16(880);
+emit_16(946);
+emit_16(879);
+emit_16(946);
+emit_16(880);
+emit_16(947);
+emit_16(881);
+emit_16(947);
+emit_16(880);
+emit_16(947);
+emit_16(881);
+emit_16(948);
+emit_16(882);
+emit_16(948);
+emit_16(881);
+emit_16(948);
+emit_16(882);
+emit_16(949);
+emit_16(883);
+emit_16(949);
+emit_16(882);
+emit_16(949);
+emit_16(883);
+emit_16(950);
+emit_16(884);
+emit_16(950);
+emit_16(883);
+emit_16(950);
+emit_16(884);
+emit_16(951);
+emit_16(885);
+emit_16(951);
+emit_16(884);
+emit_16(951);
+emit_16(885);
+emit_16(952);
+emit_16(886);
+emit_16(952);
+emit_16(885);
+emit_16(952);
+emit_16(886);
+emit_16(953);
+emit_16(887);
+emit_16(953);
+emit_16(886);
+emit_16(953);
+emit_16(887);
+emit_16(954);
+emit_16(888);
+emit_16(954);
+emit_16(887);
+emit_16(954);
+emit_16(888);
+emit_16(955);
+emit_16(889);
+emit_16(955);
+emit_16(888);
+emit_16(955);
+emit_16(889);
+emit_16(956);
+emit_16(890);
+emit_16(956);
+emit_16(889);
+emit_16(956);
+emit_16(890);
+emit_16(957);
+emit_16(891);
+emit_16(957);
+emit_16(890);
+emit_16(957);
+emit_16(891);
+emit_16(958);
+emit_16(892);
+emit_16(958);
+emit_16(891);
+emit_16(958);
+emit_16(892);
+emit_16(959);
+emit_16(893);
+emit_16(959);
+emit_16(892);
+emit_16(959);
+emit_16(893);
+emit_16(960);
+emit_16(894);
+emit_16(960);
+emit_16(893);
+emit_16(960);
+emit_16(894);
+emit_16(961);
+emit_16(895);
+emit_16(961);
+emit_16(894);
+emit_16(961);
+emit_16(895);
+emit_16(962);
+emit_16(896);
+emit_16(962);
+emit_16(895);
+emit_16(962);
+emit_16(896);
+emit_16(963);
+emit_16(897);
+emit_16(963);
+emit_16(896);
+emit_16(963);
+emit_16(897);
+emit_16(964);
+emit_16(898);
+emit_16(964);
+emit_16(897);
+emit_16(964);
+emit_16(898);
+emit_16(965);
+emit_16(899);
+emit_16(965);
+emit_16(898);
+emit_16(965);
+emit_16(899);
+emit_16(966);
+emit_16(900);
+emit_16(966);
+emit_16(899);
+emit_16(966);
+emit_16(900);
+emit_16(967);
+emit_16(901);
+emit_16(967);
+emit_16(900);
+emit_16(967);
+emit_16(901);
+emit_16(968);
+emit_16(902);
+emit_16(968);
+emit_16(901);
+emit_16(968);
+emit_16(902);
+emit_16(969);
+emit_16(903);
+emit_16(969);
+emit_16(902);
+emit_16(969);
+emit_16(903);
+emit_16(970);
+emit_16(904);
+emit_16(970);
+emit_16(903);
+emit_16(970);
+emit_16(904);
+emit_16(971);
+emit_16(905);
+emit_16(971);
+emit_16(904);
+emit_16(971);
+emit_16(905);
+emit_16(972);
+emit_16(906);
+emit_16(972);
+emit_16(905);
+emit_16(972);
+emit_16(906);
+emit_16(973);
+emit_16(907);
+emit_16(973);
+emit_16(906);
+emit_16(973);
+emit_16(907);
+emit_16(974);
+emit_16(908);
+emit_16(974);
+emit_16(907);
+emit_16(974);
+emit_16(908);
+emit_16(975);
+emit_16(909);
+emit_16(975);
+emit_16(908);
+emit_16(975);
+emit_16(909);
+emit_16(976);
+emit_16(910);
+emit_16(976);
+emit_16(909);
+emit_16(976);
+emit_16(910);
+emit_16(977);
+emit_16(911);
+emit_16(977);
+emit_16(910);
+emit_16(977);
+emit_16(911);
+emit_16(978);
+emit_16(912);
+emit_16(978);
+emit_16(911);
+emit_16(978);
+emit_16(912);
+emit_16(979);
+emit_16(913);
+emit_16(979);
+emit_16(912);
+emit_16(979);
+emit_16(913);
+emit_16(980);
+emit_16(914);
+emit_16(980);
+emit_16(913);
+emit_16(980);
+emit_16(914);
+emit_16(981);
+emit_16(915);
+emit_16(981);
+emit_16(914);
+emit_16(981);
+emit_16(915);
+emit_16(982);
+emit_16(916);
+emit_16(982);
+emit_16(915);
+emit_16(982);
+emit_16(916);
+emit_16(983);
+emit_16(917);
+emit_16(983);
+emit_16(916);
+emit_16(983);
+emit_16(917);
+emit_16(984);
+emit_16(918);
+emit_16(984);
+emit_16(917);
+emit_16(984);
+emit_16(918);
+emit_16(985);
+emit_16(919);
+emit_16(985);
+emit_16(918);
+emit_16(985);
+emit_16(919);
+emit_16(986);
+emit_16(920);
+emit_16(986);
+emit_16(919);
+emit_16(986);
+emit_16(920);
+emit_16(987);
+emit_16(921);
+emit_16(987);
+emit_16(920);
+emit_16(987);
+emit_16(921);
+emit_16(988);
+emit_16(922);
+emit_16(988);
+emit_16(921);
+emit_16(988);
+emit_16(922);
+emit_16(989);
+emit_16(923);
+emit_16(989);
+emit_16(922);
+emit_16(990);
+emit_16(924);
+emit_16(991);
+emit_16(925);
+emit_16(991);
+emit_16(924);
+emit_16(991);
+emit_16(925);
+emit_16(992);
+emit_16(926);
+emit_16(992);
+emit_16(925);
+emit_16(992);
+emit_16(926);
+emit_16(993);
+emit_16(927);
+emit_16(993);
+emit_16(926);
+emit_16(993);
+emit_16(927);
+emit_16(994);
+emit_16(928);
+emit_16(994);
+emit_16(927);
+emit_16(994);
+emit_16(928);
+emit_16(995);
+emit_16(929);
+emit_16(995);
+emit_16(928);
+emit_16(995);
+emit_16(929);
+emit_16(996);
+emit_16(930);
+emit_16(996);
+emit_16(929);
+emit_16(996);
+emit_16(930);
+emit_16(997);
+emit_16(931);
+emit_16(997);
+emit_16(930);
+emit_16(997);
+emit_16(931);
+emit_16(998);
+emit_16(932);
+emit_16(998);
+emit_16(931);
+emit_16(998);
+emit_16(932);
+emit_16(999);
+emit_16(933);
+emit_16(999);
+emit_16(932);
+emit_16(999);
+emit_16(933);
+emit_16(1000);
+emit_16(934);
+emit_16(1000);
+emit_16(933);
+emit_16(1000);
+emit_16(934);
+emit_16(1001);
+emit_16(935);
+emit_16(1001);
+emit_16(934);
+emit_16(1001);
+emit_16(935);
+emit_16(1002);
+emit_16(936);
+emit_16(1002);
+emit_16(935);
+emit_16(1002);
+emit_16(936);
+emit_16(1003);
+emit_16(937);
+emit_16(1003);
+emit_16(936);
+emit_16(1003);
+emit_16(937);
+emit_16(1004);
+emit_16(938);
+emit_16(1004);
+emit_16(937);
+emit_16(1004);
+emit_16(938);
+emit_16(1005);
+emit_16(939);
+emit_16(1005);
+emit_16(938);
+emit_16(1005);
+emit_16(939);
+emit_16(1006);
+emit_16(940);
+emit_16(1006);
+emit_16(939);
+emit_16(1006);
+emit_16(940);
+emit_16(1007);
+emit_16(941);
+emit_16(1007);
+emit_16(940);
+emit_16(1007);
+emit_16(941);
+emit_16(1008);
+emit_16(942);
+emit_16(1008);
+emit_16(941);
+emit_16(1008);
+emit_16(942);
+emit_16(1009);
+emit_16(943);
+emit_16(1009);
+emit_16(942);
+emit_16(1009);
+emit_16(943);
+emit_16(1010);
+emit_16(944);
+emit_16(1010);
+emit_16(943);
+emit_16(1010);
+emit_16(944);
+emit_16(1011);
+emit_16(945);
+emit_16(1011);
+emit_16(944);
+emit_16(1011);
+emit_16(945);
+emit_16(1012);
+emit_16(946);
+emit_16(1012);
+emit_16(945);
+emit_16(1012);
+emit_16(946);
+emit_16(1013);
+emit_16(947);
+emit_16(1013);
+emit_16(946);
+emit_16(1013);
+emit_16(947);
+emit_16(1014);
+emit_16(948);
+emit_16(1014);
+emit_16(947);
+emit_16(1014);
+emit_16(948);
+emit_16(1015);
+emit_16(949);
+emit_16(1015);
+emit_16(948);
+emit_16(1015);
+emit_16(949);
+emit_16(1016);
+emit_16(950);
+emit_16(1016);
+emit_16(949);
+emit_16(1016);
+emit_16(950);
+emit_16(1017);
+emit_16(951);
+emit_16(1017);
+emit_16(950);
+emit_16(1017);
+emit_16(951);
+emit_16(1018);
+emit_16(952);
+emit_16(1018);
+emit_16(951);
+emit_16(1018);
+emit_16(952);
+emit_16(1019);
+emit_16(953);
+emit_16(1019);
+emit_16(952);
+emit_16(1019);
+emit_16(953);
+emit_16(1020);
+emit_16(954);
+emit_16(1020);
+emit_16(953);
+emit_16(1020);
+emit_16(954);
+emit_16(1021);
+emit_16(955);
+emit_16(1021);
+emit_16(954);
+emit_16(1021);
+emit_16(955);
+emit_16(1022);
+emit_16(956);
+emit_16(1022);
+emit_16(955);
+emit_16(1022);
+emit_16(956);
+emit_16(1023);
+emit_16(957);
+emit_16(1023);
+emit_16(956);
+emit_16(1023);
+emit_16(957);
+emit_16(1024);
+emit_16(958);
+emit_16(1024);
+emit_16(957);
+emit_16(1024);
+emit_16(958);
+emit_16(1025);
+emit_16(959);
+emit_16(1025);
+emit_16(958);
+emit_16(1025);
+emit_16(959);
+emit_16(1026);
+emit_16(960);
+emit_16(1026);
+emit_16(959);
+emit_16(1026);
+emit_16(960);
+emit_16(1027);
+emit_16(961);
+emit_16(1027);
+emit_16(960);
+emit_16(1027);
+emit_16(961);
+emit_16(1028);
+emit_16(962);
+emit_16(1028);
+emit_16(961);
+emit_16(1028);
+emit_16(962);
+emit_16(1029);
+emit_16(963);
+emit_16(1029);
+emit_16(962);
+emit_16(1029);
+emit_16(963);
+emit_16(1030);
+emit_16(964);
+emit_16(1030);
+emit_16(963);
+emit_16(1030);
+emit_16(964);
+emit_16(1031);
+emit_16(965);
+emit_16(1031);
+emit_16(964);
+emit_16(1031);
+emit_16(965);
+emit_16(1032);
+emit_16(966);
+emit_16(1032);
+emit_16(965);
+emit_16(1032);
+emit_16(966);
+emit_16(1033);
+emit_16(967);
+emit_16(1033);
+emit_16(966);
+emit_16(1033);
+emit_16(967);
+emit_16(1034);
+emit_16(968);
+emit_16(1034);
+emit_16(967);
+emit_16(1034);
+emit_16(968);
+emit_16(1035);
+emit_16(969);
+emit_16(1035);
+emit_16(968);
+emit_16(1035);
+emit_16(969);
+emit_16(1036);
+emit_16(970);
+emit_16(1036);
+emit_16(969);
+emit_16(1036);
+emit_16(970);
+emit_16(1037);
+emit_16(971);
+emit_16(1037);
+emit_16(970);
+emit_16(1037);
+emit_16(971);
+emit_16(1038);
+emit_16(972);
+emit_16(1038);
+emit_16(971);
+emit_16(1038);
+emit_16(972);
+emit_16(1039);
+emit_16(973);
+emit_16(1039);
+emit_16(972);
+emit_16(1039);
+emit_16(973);
+emit_16(1040);
+emit_16(974);
+emit_16(1040);
+emit_16(973);
+emit_16(1040);
+emit_16(974);
+emit_16(1041);
+emit_16(975);
+emit_16(1041);
+emit_16(974);
+emit_16(1041);
+emit_16(975);
+emit_16(1042);
+emit_16(976);
+emit_16(1042);
+emit_16(975);
+emit_16(1042);
+emit_16(976);
+emit_16(1043);
+emit_16(977);
+emit_16(1043);
+emit_16(976);
+emit_16(1043);
+emit_16(977);
+emit_16(1044);
+emit_16(978);
+emit_16(1044);
+emit_16(977);
+emit_16(1044);
+emit_16(978);
+emit_16(1045);
+emit_16(979);
+emit_16(1045);
+emit_16(978);
+emit_16(1045);
+emit_16(979);
+emit_16(1046);
+emit_16(980);
+emit_16(1046);
+emit_16(979);
+emit_16(1046);
+emit_16(980);
+emit_16(1047);
+emit_16(981);
+emit_16(1047);
+emit_16(980);
+emit_16(1047);
+emit_16(981);
+emit_16(1048);
+emit_16(982);
+emit_16(1048);
+emit_16(981);
+emit_16(1048);
+emit_16(982);
+emit_16(1049);
+emit_16(983);
+emit_16(1049);
+emit_16(982);
+emit_16(1049);
+emit_16(983);
+emit_16(1050);
+emit_16(984);
+emit_16(1050);
+emit_16(983);
+emit_16(1050);
+emit_16(984);
+emit_16(1051);
+emit_16(985);
+emit_16(1051);
+emit_16(984);
+emit_16(1051);
+emit_16(985);
+emit_16(1052);
+emit_16(986);
+emit_16(1052);
+emit_16(985);
+emit_16(1052);
+emit_16(986);
+emit_16(1053);
+emit_16(987);
+emit_16(1053);
+emit_16(986);
+emit_16(1053);
+emit_16(987);
+emit_16(1054);
+emit_16(988);
+emit_16(1054);
+emit_16(987);
+emit_16(1054);
+emit_16(988);
+emit_16(1055);
+emit_16(989);
+emit_16(1055);
+emit_16(988);
+emit_16(1056);
+emit_16(990);
+emit_16(1057);
+emit_16(991);
+emit_16(1057);
+emit_16(990);
+emit_16(1057);
+emit_16(991);
+emit_16(1058);
+emit_16(992);
+emit_16(1058);
+emit_16(991);
+emit_16(1058);
+emit_16(992);
+emit_16(1059);
+emit_16(993);
+emit_16(1059);
+emit_16(992);
+emit_16(1059);
+emit_16(993);
+emit_16(1060);
+emit_16(994);
+emit_16(1060);
+emit_16(993);
+emit_16(1060);
+emit_16(994);
+emit_16(1061);
+emit_16(995);
+emit_16(1061);
+emit_16(994);
+emit_16(1061);
+emit_16(995);
+emit_16(1062);
+emit_16(996);
+emit_16(1062);
+emit_16(995);
+emit_16(1062);
+emit_16(996);
+emit_16(1063);
+emit_16(997);
+emit_16(1063);
+emit_16(996);
+emit_16(1063);
+emit_16(997);
+emit_16(1064);
+emit_16(998);
+emit_16(1064);
+emit_16(997);
+emit_16(1064);
+emit_16(998);
+emit_16(1065);
+emit_16(999);
+emit_16(1065);
+emit_16(998);
+emit_16(1065);
+emit_16(999);
+emit_16(1066);
+emit_16(1000);
+emit_16(1066);
+emit_16(999);
+emit_16(1066);
+emit_16(1000);
+emit_16(1067);
+emit_16(1001);
+emit_16(1067);
+emit_16(1000);
+emit_16(1067);
+emit_16(1001);
+emit_16(1068);
+emit_16(1002);
+emit_16(1068);
+emit_16(1001);
+emit_16(1068);
+emit_16(1002);
+emit_16(1069);
+emit_16(1003);
+emit_16(1069);
+emit_16(1002);
+emit_16(1069);
+emit_16(1003);
+emit_16(1070);
+emit_16(1004);
+emit_16(1070);
+emit_16(1003);
+emit_16(1070);
+emit_16(1004);
+emit_16(1071);
+emit_16(1005);
+emit_16(1071);
+emit_16(1004);
+emit_16(1071);
+emit_16(1005);
+emit_16(1072);
+emit_16(1006);
+emit_16(1072);
+emit_16(1005);
+emit_16(1072);
+emit_16(1006);
+emit_16(1073);
+emit_16(1007);
+emit_16(1073);
+emit_16(1006);
+emit_16(1073);
+emit_16(1007);
+emit_16(1074);
+emit_16(1008);
+emit_16(1074);
+emit_16(1007);
+emit_16(1074);
+emit_16(1008);
+emit_16(1075);
+emit_16(1009);
+emit_16(1075);
+emit_16(1008);
+emit_16(1075);
+emit_16(1009);
+emit_16(1076);
+emit_16(1010);
+emit_16(1076);
+emit_16(1009);
+emit_16(1076);
+emit_16(1010);
+emit_16(1077);
+emit_16(1011);
+emit_16(1077);
+emit_16(1010);
+emit_16(1077);
+emit_16(1011);
+emit_16(1078);
+emit_16(1012);
+emit_16(1078);
+emit_16(1011);
+emit_16(1078);
+emit_16(1012);
+emit_16(1079);
+emit_16(1013);
+emit_16(1079);
+emit_16(1012);
+emit_16(1079);
+emit_16(1013);
+emit_16(1080);
+emit_16(1014);
+emit_16(1080);
+emit_16(1013);
+emit_16(1080);
+emit_16(1014);
+emit_16(1081);
+emit_16(1015);
+emit_16(1081);
+emit_16(1014);
+emit_16(1081);
+emit_16(1015);
+emit_16(1082);
+emit_16(1016);
+emit_16(1082);
+emit_16(1015);
+emit_16(1082);
+emit_16(1016);
+emit_16(1083);
+emit_16(1017);
+emit_16(1083);
+emit_16(1016);
+emit_16(1083);
+emit_16(1017);
+emit_16(1084);
+emit_16(1018);
+emit_16(1084);
+emit_16(1017);
+emit_16(1084);
+emit_16(1018);
+emit_16(1085);
+emit_16(1019);
+emit_16(1085);
+emit_16(1018);
+emit_16(1085);
+emit_16(1019);
+emit_16(1086);
+emit_16(1020);
+emit_16(1086);
+emit_16(1019);
+emit_16(1086);
+emit_16(1020);
+emit_16(1087);
+emit_16(1021);
+emit_16(1087);
+emit_16(1020);
+emit_16(1087);
+emit_16(1021);
+emit_16(1088);
+emit_16(1022);
+emit_16(1088);
+emit_16(1021);
+emit_16(1088);
+emit_16(1022);
+emit_16(1089);
+emit_16(1023);
+emit_16(1089);
+emit_16(1022);
+emit_16(1089);
+emit_16(1023);
+emit_16(1090);
+emit_16(1024);
+emit_16(1090);
+emit_16(1023);
+emit_16(1090);
+emit_16(1024);
+emit_16(1091);
+emit_16(1025);
+emit_16(1091);
+emit_16(1024);
+emit_16(1091);
+emit_16(1025);
+emit_16(1092);
+emit_16(1026);
+emit_16(1092);
+emit_16(1025);
+emit_16(1092);
+emit_16(1026);
+emit_16(1093);
+emit_16(1027);
+emit_16(1093);
+emit_16(1026);
+emit_16(1093);
+emit_16(1027);
+emit_16(1094);
+emit_16(1028);
+emit_16(1094);
+emit_16(1027);
+emit_16(1094);
+emit_16(1028);
+emit_16(1095);
+emit_16(1029);
+emit_16(1095);
+emit_16(1028);
+emit_16(1095);
+emit_16(1029);
+emit_16(1096);
+emit_16(1030);
+emit_16(1096);
+emit_16(1029);
+emit_16(1096);
+emit_16(1030);
+emit_16(1097);
+emit_16(1031);
+emit_16(1097);
+emit_16(1030);
+emit_16(1097);
+emit_16(1031);
+emit_16(1098);
+emit_16(1032);
+emit_16(1098);
+emit_16(1031);
+emit_16(1098);
+emit_16(1032);
+emit_16(1099);
+emit_16(1033);
+emit_16(1099);
+emit_16(1032);
+emit_16(1099);
+emit_16(1033);
+emit_16(1100);
+emit_16(1034);
+emit_16(1100);
+emit_16(1033);
+emit_16(1100);
+emit_16(1034);
+emit_16(1101);
+emit_16(1035);
+emit_16(1101);
+emit_16(1034);
+emit_16(1101);
+emit_16(1035);
+emit_16(1102);
+emit_16(1036);
+emit_16(1102);
+emit_16(1035);
+emit_16(1102);
+emit_16(1036);
+emit_16(1103);
+emit_16(1037);
+emit_16(1103);
+emit_16(1036);
+emit_16(1103);
+emit_16(1037);
+emit_16(1104);
+emit_16(1038);
+emit_16(1104);
+emit_16(1037);
+emit_16(1104);
+emit_16(1038);
+emit_16(1105);
+emit_16(1039);
+emit_16(1105);
+emit_16(1038);
+emit_16(1105);
+emit_16(1039);
+emit_16(1106);
+emit_16(1040);
+emit_16(1106);
+emit_16(1039);
+emit_16(1106);
+emit_16(1040);
+emit_16(1107);
+emit_16(1041);
+emit_16(1107);
+emit_16(1040);
+emit_16(1107);
+emit_16(1041);
+emit_16(1108);
+emit_16(1042);
+emit_16(1108);
+emit_16(1041);
+emit_16(1108);
+emit_16(1042);
+emit_16(1109);
+emit_16(1043);
+emit_16(1109);
+emit_16(1042);
+emit_16(1109);
+emit_16(1043);
+emit_16(1110);
+emit_16(1044);
+emit_16(1110);
+emit_16(1043);
+emit_16(1110);
+emit_16(1044);
+emit_16(1111);
+emit_16(1045);
+emit_16(1111);
+emit_16(1044);
+emit_16(1111);
+emit_16(1045);
+emit_16(1112);
+emit_16(1046);
+emit_16(1112);
+emit_16(1045);
+emit_16(1112);
+emit_16(1046);
+emit_16(1113);
+emit_16(1047);
+emit_16(1113);
+emit_16(1046);
+emit_16(1113);
+emit_16(1047);
+emit_16(1114);
+emit_16(1048);
+emit_16(1114);
+emit_16(1047);
+emit_16(1114);
+emit_16(1048);
+emit_16(1115);
+emit_16(1049);
+emit_16(1115);
+emit_16(1048);
+emit_16(1115);
+emit_16(1049);
+emit_16(1116);
+emit_16(1050);
+emit_16(1116);
+emit_16(1049);
+emit_16(1116);
+emit_16(1050);
+emit_16(1117);
+emit_16(1051);
+emit_16(1117);
+emit_16(1050);
+emit_16(1117);
+emit_16(1051);
+emit_16(1118);
+emit_16(1052);
+emit_16(1118);
+emit_16(1051);
+emit_16(1118);
+emit_16(1052);
+emit_16(1119);
+emit_16(1053);
+emit_16(1119);
+emit_16(1052);
+emit_16(1119);
+emit_16(1053);
+emit_16(1120);
+emit_16(1054);
+emit_16(1120);
+emit_16(1053);
+emit_16(1120);
+emit_16(1054);
+emit_16(1121);
+emit_16(1055);
+emit_16(1121);
+emit_16(1054);
+emit_16(1122);
+emit_16(1056);
+emit_16(1123);
+emit_16(1057);
+emit_16(1123);
+emit_16(1056);
+emit_16(1123);
+emit_16(1057);
+emit_16(1124);
+emit_16(1058);
+emit_16(1124);
+emit_16(1057);
+emit_16(1124);
+emit_16(1058);
+emit_16(1125);
+emit_16(1059);
+emit_16(1125);
+emit_16(1058);
+emit_16(1125);
+emit_16(1059);
+emit_16(1126);
+emit_16(1060);
+emit_16(1126);
+emit_16(1059);
+emit_16(1126);
+emit_16(1060);
+emit_16(1127);
+emit_16(1061);
+emit_16(1127);
+emit_16(1060);
+emit_16(1127);
+emit_16(1061);
+emit_16(1128);
+emit_16(1062);
+emit_16(1128);
+emit_16(1061);
+emit_16(1128);
+emit_16(1062);
+emit_16(1129);
+emit_16(1063);
+emit_16(1129);
+emit_16(1062);
+emit_16(1129);
+emit_16(1063);
+emit_16(1130);
+emit_16(1064);
+emit_16(1130);
+emit_16(1063);
+emit_16(1130);
+emit_16(1064);
+emit_16(1131);
+emit_16(1065);
+emit_16(1131);
+emit_16(1064);
+emit_16(1131);
+emit_16(1065);
+emit_16(1132);
+emit_16(1066);
+emit_16(1132);
+emit_16(1065);
+emit_16(1132);
+emit_16(1066);
+emit_16(1133);
+emit_16(1067);
+emit_16(1133);
+emit_16(1066);
+emit_16(1133);
+emit_16(1067);
+emit_16(1134);
+emit_16(1068);
+emit_16(1134);
+emit_16(1067);
+emit_16(1134);
+emit_16(1068);
+emit_16(1135);
+emit_16(1069);
+emit_16(1135);
+emit_16(1068);
+emit_16(1135);
+emit_16(1069);
+emit_16(1136);
+emit_16(1070);
+emit_16(1136);
+emit_16(1069);
+emit_16(1136);
+emit_16(1070);
+emit_16(1137);
+emit_16(1071);
+emit_16(1137);
+emit_16(1070);
+emit_16(1137);
+emit_16(1071);
+emit_16(1138);
+emit_16(1072);
+emit_16(1138);
+emit_16(1071);
+emit_16(1138);
+emit_16(1072);
+emit_16(1139);
+emit_16(1073);
+emit_16(1139);
+emit_16(1072);
+emit_16(1139);
+emit_16(1073);
+emit_16(1140);
+emit_16(1074);
+emit_16(1140);
+emit_16(1073);
+emit_16(1140);
+emit_16(1074);
+emit_16(1141);
+emit_16(1075);
+emit_16(1141);
+emit_16(1074);
+emit_16(1141);
+emit_16(1075);
+emit_16(1142);
+emit_16(1076);
+emit_16(1142);
+emit_16(1075);
+emit_16(1142);
+emit_16(1076);
+emit_16(1143);
+emit_16(1077);
+emit_16(1143);
+emit_16(1076);
+emit_16(1143);
+emit_16(1077);
+emit_16(1144);
+emit_16(1078);
+emit_16(1144);
+emit_16(1077);
+emit_16(1144);
+emit_16(1078);
+emit_16(1145);
+emit_16(1079);
+emit_16(1145);
+emit_16(1078);
+emit_16(1145);
+emit_16(1079);
+emit_16(1146);
+emit_16(1080);
+emit_16(1146);
+emit_16(1079);
+emit_16(1146);
+emit_16(1080);
+emit_16(1147);
+emit_16(1081);
+emit_16(1147);
+emit_16(1080);
+emit_16(1147);
+emit_16(1081);
+emit_16(1148);
+emit_16(1082);
+emit_16(1148);
+emit_16(1081);
+emit_16(1148);
+emit_16(1082);
+emit_16(1149);
+emit_16(1083);
+emit_16(1149);
+emit_16(1082);
+emit_16(1149);
+emit_16(1083);
+emit_16(1150);
+emit_16(1084);
+emit_16(1150);
+emit_16(1083);
+emit_16(1150);
+emit_16(1084);
+emit_16(1151);
+emit_16(1085);
+emit_16(1151);
+emit_16(1084);
+emit_16(1151);
+emit_16(1085);
+emit_16(1152);
+emit_16(1086);
+emit_16(1152);
+emit_16(1085);
+emit_16(1152);
+emit_16(1086);
+emit_16(1153);
+emit_16(1087);
+emit_16(1153);
+emit_16(1086);
+emit_16(1153);
+emit_16(1087);
+emit_16(1154);
+emit_16(1088);
+emit_16(1154);
+emit_16(1087);
+emit_16(1154);
+emit_16(1088);
+emit_16(1155);
+emit_16(1089);
+emit_16(1155);
+emit_16(1088);
+emit_16(1155);
+emit_16(1089);
+emit_16(1156);
+emit_16(1090);
+emit_16(1156);
+emit_16(1089);
+emit_16(1156);
+emit_16(1090);
+emit_16(1157);
+emit_16(1091);
+emit_16(1157);
+emit_16(1090);
+emit_16(1157);
+emit_16(1091);
+emit_16(1158);
+emit_16(1092);
+emit_16(1158);
+emit_16(1091);
+emit_16(1158);
+emit_16(1092);
+emit_16(1159);
+emit_16(1093);
+emit_16(1159);
+emit_16(1092);
+emit_16(1159);
+emit_16(1093);
+emit_16(1160);
+emit_16(1094);
+emit_16(1160);
+emit_16(1093);
+emit_16(1160);
+emit_16(1094);
+emit_16(1161);
+emit_16(1095);
+emit_16(1161);
+emit_16(1094);
+emit_16(1161);
+emit_16(1095);
+emit_16(1162);
+emit_16(1096);
+emit_16(1162);
+emit_16(1095);
+emit_16(1162);
+emit_16(1096);
+emit_16(1163);
+emit_16(1097);
+emit_16(1163);
+emit_16(1096);
+emit_16(1163);
+emit_16(1097);
+emit_16(1164);
+emit_16(1098);
+emit_16(1164);
+emit_16(1097);
+emit_16(1164);
+emit_16(1098);
+emit_16(1165);
+emit_16(1099);
+emit_16(1165);
+emit_16(1098);
+emit_16(1165);
+emit_16(1099);
+emit_16(1166);
+emit_16(1100);
+emit_16(1166);
+emit_16(1099);
+emit_16(1166);
+emit_16(1100);
+emit_16(1167);
+emit_16(1101);
+emit_16(1167);
+emit_16(1100);
+emit_16(1167);
+emit_16(1101);
+emit_16(1168);
+emit_16(1102);
+emit_16(1168);
+emit_16(1101);
+emit_16(1168);
+emit_16(1102);
+emit_16(1169);
+emit_16(1103);
+emit_16(1169);
+emit_16(1102);
+emit_16(1169);
+emit_16(1103);
+emit_16(1170);
+emit_16(1104);
+emit_16(1170);
+emit_16(1103);
+emit_16(1170);
+emit_16(1104);
+emit_16(1171);
+emit_16(1105);
+emit_16(1171);
+emit_16(1104);
+emit_16(1171);
+emit_16(1105);
+emit_16(1172);
+emit_16(1106);
+emit_16(1172);
+emit_16(1105);
+emit_16(1172);
+emit_16(1106);
+emit_16(1173);
+emit_16(1107);
+emit_16(1173);
+emit_16(1106);
+emit_16(1173);
+emit_16(1107);
+emit_16(1174);
+emit_16(1108);
+emit_16(1174);
+emit_16(1107);
+emit_16(1174);
+emit_16(1108);
+emit_16(1175);
+emit_16(1109);
+emit_16(1175);
+emit_16(1108);
+emit_16(1175);
+emit_16(1109);
+emit_16(1176);
+emit_16(1110);
+emit_16(1176);
+emit_16(1109);
+emit_16(1176);
+emit_16(1110);
+emit_16(1177);
+emit_16(1111);
+emit_16(1177);
+emit_16(1110);
+emit_16(1177);
+emit_16(1111);
+emit_16(1178);
+emit_16(1112);
+emit_16(1178);
+emit_16(1111);
+emit_16(1178);
+emit_16(1112);
+emit_16(1179);
+emit_16(1113);
+emit_16(1179);
+emit_16(1112);
+emit_16(1179);
+emit_16(1113);
+emit_16(1180);
+emit_16(1114);
+emit_16(1180);
+emit_16(1113);
+emit_16(1180);
+emit_16(1114);
+emit_16(1181);
+emit_16(1115);
+emit_16(1181);
+emit_16(1114);
+emit_16(1181);
+emit_16(1115);
+emit_16(1182);
+emit_16(1116);
+emit_16(1182);
+emit_16(1115);
+emit_16(1182);
+emit_16(1116);
+emit_16(1183);
+emit_16(1117);
+emit_16(1183);
+emit_16(1116);
+emit_16(1183);
+emit_16(1117);
+emit_16(1184);
+emit_16(1118);
+emit_16(1184);
+emit_16(1117);
+emit_16(1184);
+emit_16(1118);
+emit_16(1185);
+emit_16(1119);
+emit_16(1185);
+emit_16(1118);
+emit_16(1185);
+emit_16(1119);
+emit_16(1186);
+emit_16(1120);
+emit_16(1186);
+emit_16(1119);
+emit_16(1186);
+emit_16(1120);
+emit_16(1187);
+emit_16(1121);
+emit_16(1187);
+emit_16(1120);
+emit_16(1188);
+emit_16(1122);
+emit_16(1189);
+emit_16(1123);
+emit_16(1189);
+emit_16(1122);
+emit_16(1189);
+emit_16(1123);
+emit_16(1190);
+emit_16(1124);
+emit_16(1190);
+emit_16(1123);
+emit_16(1190);
+emit_16(1124);
+emit_16(1191);
+emit_16(1125);
+emit_16(1191);
+emit_16(1124);
+emit_16(1191);
+emit_16(1125);
+emit_16(1192);
+emit_16(1126);
+emit_16(1192);
+emit_16(1125);
+emit_16(1192);
+emit_16(1126);
+emit_16(1193);
+emit_16(1127);
+emit_16(1193);
+emit_16(1126);
+emit_16(1193);
+emit_16(1127);
+emit_16(1194);
+emit_16(1128);
+emit_16(1194);
+emit_16(1127);
+emit_16(1194);
+emit_16(1128);
+emit_16(1195);
+emit_16(1129);
+emit_16(1195);
+emit_16(1128);
+emit_16(1195);
+emit_16(1129);
+emit_16(1196);
+emit_16(1130);
+emit_16(1196);
+emit_16(1129);
+emit_16(1196);
+emit_16(1130);
+emit_16(1197);
+emit_16(1131);
+emit_16(1197);
+emit_16(1130);
+emit_16(1197);
+emit_16(1131);
+emit_16(1198);
+emit_16(1132);
+emit_16(1198);
+emit_16(1131);
+emit_16(1198);
+emit_16(1132);
+emit_16(1199);
+emit_16(1133);
+emit_16(1199);
+emit_16(1132);
+emit_16(1199);
+emit_16(1133);
+emit_16(1200);
+emit_16(1134);
+emit_16(1200);
+emit_16(1133);
+emit_16(1200);
+emit_16(1134);
+emit_16(1201);
+emit_16(1135);
+emit_16(1201);
+emit_16(1134);
+emit_16(1201);
+emit_16(1135);
+emit_16(1202);
+emit_16(1136);
+emit_16(1202);
+emit_16(1135);
+emit_16(1202);
+emit_16(1136);
+emit_16(1203);
+emit_16(1137);
+emit_16(1203);
+emit_16(1136);
+emit_16(1203);
+emit_16(1137);
+emit_16(1204);
+emit_16(1138);
+emit_16(1204);
+emit_16(1137);
+emit_16(1204);
+emit_16(1138);
+emit_16(1205);
+emit_16(1139);
+emit_16(1205);
+emit_16(1138);
+emit_16(1205);
+emit_16(1139);
+emit_16(1206);
+emit_16(1140);
+emit_16(1206);
+emit_16(1139);
+emit_16(1206);
+emit_16(1140);
+emit_16(1207);
+emit_16(1141);
+emit_16(1207);
+emit_16(1140);
+emit_16(1207);
+emit_16(1141);
+emit_16(1208);
+emit_16(1142);
+emit_16(1208);
+emit_16(1141);
+emit_16(1208);
+emit_16(1142);
+emit_16(1209);
+emit_16(1143);
+emit_16(1209);
+emit_16(1142);
+emit_16(1209);
+emit_16(1143);
+emit_16(1210);
+emit_16(1144);
+emit_16(1210);
+emit_16(1143);
+emit_16(1210);
+emit_16(1144);
+emit_16(1211);
+emit_16(1145);
+emit_16(1211);
+emit_16(1144);
+emit_16(1211);
+emit_16(1145);
+emit_16(1212);
+emit_16(1146);
+emit_16(1212);
+emit_16(1145);
+emit_16(1212);
+emit_16(1146);
+emit_16(1213);
+emit_16(1147);
+emit_16(1213);
+emit_16(1146);
+emit_16(1213);
+emit_16(1147);
+emit_16(1214);
+emit_16(1148);
+emit_16(1214);
+emit_16(1147);
+emit_16(1214);
+emit_16(1148);
+emit_16(1215);
+emit_16(1149);
+emit_16(1215);
+emit_16(1148);
+emit_16(1215);
+emit_16(1149);
+emit_16(1216);
+emit_16(1150);
+emit_16(1216);
+emit_16(1149);
+emit_16(1216);
+emit_16(1150);
+emit_16(1217);
+emit_16(1151);
+emit_16(1217);
+emit_16(1150);
+emit_16(1217);
+emit_16(1151);
+emit_16(1218);
+emit_16(1152);
+emit_16(1218);
+emit_16(1151);
+emit_16(1218);
+emit_16(1152);
+emit_16(1219);
+emit_16(1153);
+emit_16(1219);
+emit_16(1152);
+emit_16(1219);
+emit_16(1153);
+emit_16(1220);
+emit_16(1154);
+emit_16(1220);
+emit_16(1153);
+emit_16(1220);
+emit_16(1154);
+emit_16(1221);
+emit_16(1155);
+emit_16(1221);
+emit_16(1154);
+emit_16(1221);
+emit_16(1155);
+emit_16(1222);
+emit_16(1156);
+emit_16(1222);
+emit_16(1155);
+emit_16(1222);
+emit_16(1156);
+emit_16(1223);
+emit_16(1157);
+emit_16(1223);
+emit_16(1156);
+emit_16(1223);
+emit_16(1157);
+emit_16(1224);
+emit_16(1158);
+emit_16(1224);
+emit_16(1157);
+emit_16(1224);
+emit_16(1158);
+emit_16(1225);
+emit_16(1159);
+emit_16(1225);
+emit_16(1158);
+emit_16(1225);
+emit_16(1159);
+emit_16(1226);
+emit_16(1160);
+emit_16(1226);
+emit_16(1159);
+emit_16(1226);
+emit_16(1160);
+emit_16(1227);
+emit_16(1161);
+emit_16(1227);
+emit_16(1160);
+emit_16(1227);
+emit_16(1161);
+emit_16(1228);
+emit_16(1162);
+emit_16(1228);
+emit_16(1161);
+emit_16(1228);
+emit_16(1162);
+emit_16(1229);
+emit_16(1163);
+emit_16(1229);
+emit_16(1162);
+emit_16(1229);
+emit_16(1163);
+emit_16(1230);
+emit_16(1164);
+emit_16(1230);
+emit_16(1163);
+emit_16(1230);
+emit_16(1164);
+emit_16(1231);
+emit_16(1165);
+emit_16(1231);
+emit_16(1164);
+emit_16(1231);
+emit_16(1165);
+emit_16(1232);
+emit_16(1166);
+emit_16(1232);
+emit_16(1165);
+emit_16(1232);
+emit_16(1166);
+emit_16(1233);
+emit_16(1167);
+emit_16(1233);
+emit_16(1166);
+emit_16(1233);
+emit_16(1167);
+emit_16(1234);
+emit_16(1168);
+emit_16(1234);
+emit_16(1167);
+emit_16(1234);
+emit_16(1168);
+emit_16(1235);
+emit_16(1169);
+emit_16(1235);
+emit_16(1168);
+emit_16(1235);
+emit_16(1169);
+emit_16(1236);
+emit_16(1170);
+emit_16(1236);
+emit_16(1169);
+emit_16(1236);
+emit_16(1170);
+emit_16(1237);
+emit_16(1171);
+emit_16(1237);
+emit_16(1170);
+emit_16(1237);
+emit_16(1171);
+emit_16(1238);
+emit_16(1172);
+emit_16(1238);
+emit_16(1171);
+emit_16(1238);
+emit_16(1172);
+emit_16(1239);
+emit_16(1173);
+emit_16(1239);
+emit_16(1172);
+emit_16(1239);
+emit_16(1173);
+emit_16(1240);
+emit_16(1174);
+emit_16(1240);
+emit_16(1173);
+emit_16(1240);
+emit_16(1174);
+emit_16(1241);
+emit_16(1175);
+emit_16(1241);
+emit_16(1174);
+emit_16(1241);
+emit_16(1175);
+emit_16(1242);
+emit_16(1176);
+emit_16(1242);
+emit_16(1175);
+emit_16(1242);
+emit_16(1176);
+emit_16(1243);
+emit_16(1177);
+emit_16(1243);
+emit_16(1176);
+emit_16(1243);
+emit_16(1177);
+emit_16(1244);
+emit_16(1178);
+emit_16(1244);
+emit_16(1177);
+emit_16(1244);
+emit_16(1178);
+emit_16(1245);
+emit_16(1179);
+emit_16(1245);
+emit_16(1178);
+emit_16(1245);
+emit_16(1179);
+emit_16(1246);
+emit_16(1180);
+emit_16(1246);
+emit_16(1179);
+emit_16(1246);
+emit_16(1180);
+emit_16(1247);
+emit_16(1181);
+emit_16(1247);
+emit_16(1180);
+emit_16(1247);
+emit_16(1181);
+emit_16(1248);
+emit_16(1182);
+emit_16(1248);
+emit_16(1181);
+emit_16(1248);
+emit_16(1182);
+emit_16(1249);
+emit_16(1183);
+emit_16(1249);
+emit_16(1182);
+emit_16(1249);
+emit_16(1183);
+emit_16(1250);
+emit_16(1184);
+emit_16(1250);
+emit_16(1183);
+emit_16(1250);
+emit_16(1184);
+emit_16(1251);
+emit_16(1185);
+emit_16(1251);
+emit_16(1184);
+emit_16(1251);
+emit_16(1185);
+emit_16(1252);
+emit_16(1186);
+emit_16(1252);
+emit_16(1185);
+emit_16(1252);
+emit_16(1186);
+emit_16(1253);
+emit_16(1187);
+emit_16(1253);
+emit_16(1186);
+emit_16(1254);
+emit_16(1188);
+emit_16(1255);
+emit_16(1189);
+emit_16(1255);
+emit_16(1188);
+emit_16(1255);
+emit_16(1189);
+emit_16(1256);
+emit_16(1190);
+emit_16(1256);
+emit_16(1189);
+emit_16(1256);
+emit_16(1190);
+emit_16(1257);
+emit_16(1191);
+emit_16(1257);
+emit_16(1190);
+emit_16(1257);
+emit_16(1191);
+emit_16(1258);
+emit_16(1192);
+emit_16(1258);
+emit_16(1191);
+emit_16(1258);
+emit_16(1192);
+emit_16(1259);
+emit_16(1193);
+emit_16(1259);
+emit_16(1192);
+emit_16(1259);
+emit_16(1193);
+emit_16(1260);
+emit_16(1194);
+emit_16(1260);
+emit_16(1193);
+emit_16(1260);
+emit_16(1194);
+emit_16(1261);
+emit_16(1195);
+emit_16(1261);
+emit_16(1194);
+emit_16(1261);
+emit_16(1195);
+emit_16(1262);
+emit_16(1196);
+emit_16(1262);
+emit_16(1195);
+emit_16(1262);
+emit_16(1196);
+emit_16(1263);
+emit_16(1197);
+emit_16(1263);
+emit_16(1196);
+emit_16(1263);
+emit_16(1197);
+emit_16(1264);
+emit_16(1198);
+emit_16(1264);
+emit_16(1197);
+emit_16(1264);
+emit_16(1198);
+emit_16(1265);
+emit_16(1199);
+emit_16(1265);
+emit_16(1198);
+emit_16(1265);
+emit_16(1199);
+emit_16(1266);
+emit_16(1200);
+emit_16(1266);
+emit_16(1199);
+emit_16(1266);
+emit_16(1200);
+emit_16(1267);
+emit_16(1201);
+emit_16(1267);
+emit_16(1200);
+emit_16(1267);
+emit_16(1201);
+emit_16(1268);
+emit_16(1202);
+emit_16(1268);
+emit_16(1201);
+emit_16(1268);
+emit_16(1202);
+emit_16(1269);
+emit_16(1203);
+emit_16(1269);
+emit_16(1202);
+emit_16(1269);
+emit_16(1203);
+emit_16(1270);
+emit_16(1204);
+emit_16(1270);
+emit_16(1203);
+emit_16(1270);
+emit_16(1204);
+emit_16(1271);
+emit_16(1205);
+emit_16(1271);
+emit_16(1204);
+emit_16(1271);
+emit_16(1205);
+emit_16(1272);
+emit_16(1206);
+emit_16(1272);
+emit_16(1205);
+emit_16(1272);
+emit_16(1206);
+emit_16(1273);
+emit_16(1207);
+emit_16(1273);
+emit_16(1206);
+emit_16(1273);
+emit_16(1207);
+emit_16(1274);
+emit_16(1208);
+emit_16(1274);
+emit_16(1207);
+emit_16(1274);
+emit_16(1208);
+emit_16(1275);
+emit_16(1209);
+emit_16(1275);
+emit_16(1208);
+emit_16(1275);
+emit_16(1209);
+emit_16(1276);
+emit_16(1210);
+emit_16(1276);
+emit_16(1209);
+emit_16(1276);
+emit_16(1210);
+emit_16(1277);
+emit_16(1211);
+emit_16(1277);
+emit_16(1210);
+emit_16(1277);
+emit_16(1211);
+emit_16(1278);
+emit_16(1212);
+emit_16(1278);
+emit_16(1211);
+emit_16(1278);
+emit_16(1212);
+emit_16(1279);
+emit_16(1213);
+emit_16(1279);
+emit_16(1212);
+emit_16(1279);
+emit_16(1213);
+emit_16(1280);
+emit_16(1214);
+emit_16(1280);
+emit_16(1213);
+emit_16(1280);
+emit_16(1214);
+emit_16(1281);
+emit_16(1215);
+emit_16(1281);
+emit_16(1214);
+emit_16(1281);
+emit_16(1215);
+emit_16(1282);
+emit_16(1216);
+emit_16(1282);
+emit_16(1215);
+emit_16(1282);
+emit_16(1216);
+emit_16(1283);
+emit_16(1217);
+emit_16(1283);
+emit_16(1216);
+emit_16(1283);
+emit_16(1217);
+emit_16(1284);
+emit_16(1218);
+emit_16(1284);
+emit_16(1217);
+emit_16(1284);
+emit_16(1218);
+emit_16(1285);
+emit_16(1219);
+emit_16(1285);
+emit_16(1218);
+emit_16(1285);
+emit_16(1219);
+emit_16(1286);
+emit_16(1220);
+emit_16(1286);
+emit_16(1219);
+emit_16(1286);
+emit_16(1220);
+emit_16(1287);
+emit_16(1221);
+emit_16(1287);
+emit_16(1220);
+emit_16(1287);
+emit_16(1221);
+emit_16(1288);
+emit_16(1222);
+emit_16(1288);
+emit_16(1221);
+emit_16(1288);
+emit_16(1222);
+emit_16(1289);
+emit_16(1223);
+emit_16(1289);
+emit_16(1222);
+emit_16(1289);
+emit_16(1223);
+emit_16(1290);
+emit_16(1224);
+emit_16(1290);
+emit_16(1223);
+emit_16(1290);
+emit_16(1224);
+emit_16(1291);
+emit_16(1225);
+emit_16(1291);
+emit_16(1224);
+emit_16(1291);
+emit_16(1225);
+emit_16(1292);
+emit_16(1226);
+emit_16(1292);
+emit_16(1225);
+emit_16(1292);
+emit_16(1226);
+emit_16(1293);
+emit_16(1227);
+emit_16(1293);
+emit_16(1226);
+emit_16(1293);
+emit_16(1227);
+emit_16(1294);
+emit_16(1228);
+emit_16(1294);
+emit_16(1227);
+emit_16(1294);
+emit_16(1228);
+emit_16(1295);
+emit_16(1229);
+emit_16(1295);
+emit_16(1228);
+emit_16(1295);
+emit_16(1229);
+emit_16(1296);
+emit_16(1230);
+emit_16(1296);
+emit_16(1229);
+emit_16(1296);
+emit_16(1230);
+emit_16(1297);
+emit_16(1231);
+emit_16(1297);
+emit_16(1230);
+emit_16(1297);
+emit_16(1231);
+emit_16(1298);
+emit_16(1232);
+emit_16(1298);
+emit_16(1231);
+emit_16(1298);
+emit_16(1232);
+emit_16(1299);
+emit_16(1233);
+emit_16(1299);
+emit_16(1232);
+emit_16(1299);
+emit_16(1233);
+emit_16(1300);
+emit_16(1234);
+emit_16(1300);
+emit_16(1233);
+emit_16(1300);
+emit_16(1234);
+emit_16(1301);
+emit_16(1235);
+emit_16(1301);
+emit_16(1234);
+emit_16(1301);
+emit_16(1235);
+emit_16(1302);
+emit_16(1236);
+emit_16(1302);
+emit_16(1235);
+emit_16(1302);
+emit_16(1236);
+emit_16(1303);
+emit_16(1237);
+emit_16(1303);
+emit_16(1236);
+emit_16(1303);
+emit_16(1237);
+emit_16(1304);
+emit_16(1238);
+emit_16(1304);
+emit_16(1237);
+emit_16(1304);
+emit_16(1238);
+emit_16(1305);
+emit_16(1239);
+emit_16(1305);
+emit_16(1238);
+emit_16(1305);
+emit_16(1239);
+emit_16(1306);
+emit_16(1240);
+emit_16(1306);
+emit_16(1239);
+emit_16(1306);
+emit_16(1240);
+emit_16(1307);
+emit_16(1241);
+emit_16(1307);
+emit_16(1240);
+emit_16(1307);
+emit_16(1241);
+emit_16(1308);
+emit_16(1242);
+emit_16(1308);
+emit_16(1241);
+emit_16(1308);
+emit_16(1242);
+emit_16(1309);
+emit_16(1243);
+emit_16(1309);
+emit_16(1242);
+emit_16(1309);
+emit_16(1243);
+emit_16(1310);
+emit_16(1244);
+emit_16(1310);
+emit_16(1243);
+emit_16(1310);
+emit_16(1244);
+emit_16(1311);
+emit_16(1245);
+emit_16(1311);
+emit_16(1244);
+emit_16(1311);
+emit_16(1245);
+emit_16(1312);
+emit_16(1246);
+emit_16(1312);
+emit_16(1245);
+emit_16(1312);
+emit_16(1246);
+emit_16(1313);
+emit_16(1247);
+emit_16(1313);
+emit_16(1246);
+emit_16(1313);
+emit_16(1247);
+emit_16(1314);
+emit_16(1248);
+emit_16(1314);
+emit_16(1247);
+emit_16(1314);
+emit_16(1248);
+emit_16(1315);
+emit_16(1249);
+emit_16(1315);
+emit_16(1248);
+emit_16(1315);
+emit_16(1249);
+emit_16(1316);
+emit_16(1250);
+emit_16(1316);
+emit_16(1249);
+emit_16(1316);
+emit_16(1250);
+emit_16(1317);
+emit_16(1251);
+emit_16(1317);
+emit_16(1250);
+emit_16(1317);
+emit_16(1251);
+emit_16(1318);
+emit_16(1252);
+emit_16(1318);
+emit_16(1251);
+emit_16(1318);
+emit_16(1252);
+emit_16(1319);
+emit_16(1253);
+emit_16(1319);
+emit_16(1252);
+emit_16(1320);
+emit_16(1254);
+emit_16(1321);
+emit_16(1255);
+emit_16(1321);
+emit_16(1254);
+emit_16(1321);
+emit_16(1255);
+emit_16(1322);
+emit_16(1256);
+emit_16(1322);
+emit_16(1255);
+emit_16(1322);
+emit_16(1256);
+emit_16(1323);
+emit_16(1257);
+emit_16(1323);
+emit_16(1256);
+emit_16(1323);
+emit_16(1257);
+emit_16(1324);
+emit_16(1258);
+emit_16(1324);
+emit_16(1257);
+emit_16(1324);
+emit_16(1258);
+emit_16(1325);
+emit_16(1259);
+emit_16(1325);
+emit_16(1258);
+emit_16(1325);
+emit_16(1259);
+emit_16(1326);
+emit_16(1260);
+emit_16(1326);
+emit_16(1259);
+emit_16(1326);
+emit_16(1260);
+emit_16(1327);
+emit_16(1261);
+emit_16(1327);
+emit_16(1260);
+emit_16(1327);
+emit_16(1261);
+emit_16(1328);
+emit_16(1262);
+emit_16(1328);
+emit_16(1261);
+emit_16(1328);
+emit_16(1262);
+emit_16(1329);
+emit_16(1263);
+emit_16(1329);
+emit_16(1262);
+emit_16(1329);
+emit_16(1263);
+emit_16(1330);
+emit_16(1264);
+emit_16(1330);
+emit_16(1263);
+emit_16(1330);
+emit_16(1264);
+emit_16(1331);
+emit_16(1265);
+emit_16(1331);
+emit_16(1264);
+emit_16(1331);
+emit_16(1265);
+emit_16(1332);
+emit_16(1266);
+emit_16(1332);
+emit_16(1265);
+emit_16(1332);
+emit_16(1266);
+emit_16(1333);
+emit_16(1267);
+emit_16(1333);
+emit_16(1266);
+emit_16(1333);
+emit_16(1267);
+emit_16(1334);
+emit_16(1268);
+emit_16(1334);
+emit_16(1267);
+emit_16(1334);
+emit_16(1268);
+emit_16(1335);
+emit_16(1269);
+emit_16(1335);
+emit_16(1268);
+emit_16(1335);
+emit_16(1269);
+emit_16(1336);
+emit_16(1270);
+emit_16(1336);
+emit_16(1269);
+emit_16(1336);
+emit_16(1270);
+emit_16(1337);
+emit_16(1271);
+emit_16(1337);
+emit_16(1270);
+emit_16(1337);
+emit_16(1271);
+emit_16(1338);
+emit_16(1272);
+emit_16(1338);
+emit_16(1271);
+emit_16(1338);
+emit_16(1272);
+emit_16(1339);
+emit_16(1273);
+emit_16(1339);
+emit_16(1272);
+emit_16(1339);
+emit_16(1273);
+emit_16(1340);
+emit_16(1274);
+emit_16(1340);
+emit_16(1273);
+emit_16(1340);
+emit_16(1274);
+emit_16(1341);
+emit_16(1275);
+emit_16(1341);
+emit_16(1274);
+emit_16(1341);
+emit_16(1275);
+emit_16(1342);
+emit_16(1276);
+emit_16(1342);
+emit_16(1275);
+emit_16(1342);
+emit_16(1276);
+emit_16(1343);
+emit_16(1277);
+emit_16(1343);
+emit_16(1276);
+emit_16(1343);
+emit_16(1277);
+emit_16(1344);
+emit_16(1278);
+emit_16(1344);
+emit_16(1277);
+emit_16(1344);
+emit_16(1278);
+emit_16(1345);
+emit_16(1279);
+emit_16(1345);
+emit_16(1278);
+emit_16(1345);
+emit_16(1279);
+emit_16(1346);
+emit_16(1280);
+emit_16(1346);
+emit_16(1279);
+emit_16(1346);
+emit_16(1280);
+emit_16(1347);
+emit_16(1281);
+emit_16(1347);
+emit_16(1280);
+emit_16(1347);
+emit_16(1281);
+emit_16(1348);
+emit_16(1282);
+emit_16(1348);
+emit_16(1281);
+emit_16(1348);
+emit_16(1282);
+emit_16(1349);
+emit_16(1283);
+emit_16(1349);
+emit_16(1282);
+emit_16(1349);
+emit_16(1283);
+emit_16(1350);
+emit_16(1284);
+emit_16(1350);
+emit_16(1283);
+emit_16(1350);
+emit_16(1284);
+emit_16(1351);
+emit_16(1285);
+emit_16(1351);
+emit_16(1284);
+emit_16(1351);
+emit_16(1285);
+emit_16(1352);
+emit_16(1286);
+emit_16(1352);
+emit_16(1285);
+emit_16(1352);
+emit_16(1286);
+emit_16(1353);
+emit_16(1287);
+emit_16(1353);
+emit_16(1286);
+emit_16(1353);
+emit_16(1287);
+emit_16(1354);
+emit_16(1288);
+emit_16(1354);
+emit_16(1287);
+emit_16(1354);
+emit_16(1288);
+emit_16(1355);
+emit_16(1289);
+emit_16(1355);
+emit_16(1288);
+emit_16(1355);
+emit_16(1289);
+emit_16(1356);
+emit_16(1290);
+emit_16(1356);
+emit_16(1289);
+emit_16(1356);
+emit_16(1290);
+emit_16(1357);
+emit_16(1291);
+emit_16(1357);
+emit_16(1290);
+emit_16(1357);
+emit_16(1291);
+emit_16(1358);
+emit_16(1292);
+emit_16(1358);
+emit_16(1291);
+emit_16(1358);
+emit_16(1292);
+emit_16(1359);
+emit_16(1293);
+emit_16(1359);
+emit_16(1292);
+emit_16(1359);
+emit_16(1293);
+emit_16(1360);
+emit_16(1294);
+emit_16(1360);
+emit_16(1293);
+emit_16(1360);
+emit_16(1294);
+emit_16(1361);
+emit_16(1295);
+emit_16(1361);
+emit_16(1294);
+emit_16(1361);
+emit_16(1295);
+emit_16(1362);
+emit_16(1296);
+emit_16(1362);
+emit_16(1295);
+emit_16(1362);
+emit_16(1296);
+emit_16(1363);
+emit_16(1297);
+emit_16(1363);
+emit_16(1296);
+emit_16(1363);
+emit_16(1297);
+emit_16(1364);
+emit_16(1298);
+emit_16(1364);
+emit_16(1297);
+emit_16(1364);
+emit_16(1298);
+emit_16(1365);
+emit_16(1299);
+emit_16(1365);
+emit_16(1298);
+emit_16(1365);
+emit_16(1299);
+emit_16(1366);
+emit_16(1300);
+emit_16(1366);
+emit_16(1299);
+emit_16(1366);
+emit_16(1300);
+emit_16(1367);
+emit_16(1301);
+emit_16(1367);
+emit_16(1300);
+emit_16(1367);
+emit_16(1301);
+emit_16(1368);
+emit_16(1302);
+emit_16(1368);
+emit_16(1301);
+emit_16(1368);
+emit_16(1302);
+emit_16(1369);
+emit_16(1303);
+emit_16(1369);
+emit_16(1302);
+emit_16(1369);
+emit_16(1303);
+emit_16(1370);
+emit_16(1304);
+emit_16(1370);
+emit_16(1303);
+emit_16(1370);
+emit_16(1304);
+emit_16(1371);
+emit_16(1305);
+emit_16(1371);
+emit_16(1304);
+emit_16(1371);
+emit_16(1305);
+emit_16(1372);
+emit_16(1306);
+emit_16(1372);
+emit_16(1305);
+emit_16(1372);
+emit_16(1306);
+emit_16(1373);
+emit_16(1307);
+emit_16(1373);
+emit_16(1306);
+emit_16(1373);
+emit_16(1307);
+emit_16(1374);
+emit_16(1308);
+emit_16(1374);
+emit_16(1307);
+emit_16(1374);
+emit_16(1308);
+emit_16(1375);
+emit_16(1309);
+emit_16(1375);
+emit_16(1308);
+emit_16(1375);
+emit_16(1309);
+emit_16(1376);
+emit_16(1310);
+emit_16(1376);
+emit_16(1309);
+emit_16(1376);
+emit_16(1310);
+emit_16(1377);
+emit_16(1311);
+emit_16(1377);
+emit_16(1310);
+emit_16(1377);
+emit_16(1311);
+emit_16(1378);
+emit_16(1312);
+emit_16(1378);
+emit_16(1311);
+emit_16(1378);
+emit_16(1312);
+emit_16(1379);
+emit_16(1313);
+emit_16(1379);
+emit_16(1312);
+emit_16(1379);
+emit_16(1313);
+emit_16(1380);
+emit_16(1314);
+emit_16(1380);
+emit_16(1313);
+emit_16(1380);
+emit_16(1314);
+emit_16(1381);
+emit_16(1315);
+emit_16(1381);
+emit_16(1314);
+emit_16(1381);
+emit_16(1315);
+emit_16(1382);
+emit_16(1316);
+emit_16(1382);
+emit_16(1315);
+emit_16(1382);
+emit_16(1316);
+emit_16(1383);
+emit_16(1317);
+emit_16(1383);
+emit_16(1316);
+emit_16(1383);
+emit_16(1317);
+emit_16(1384);
+emit_16(1318);
+emit_16(1384);
+emit_16(1317);
+emit_16(1384);
+emit_16(1318);
+emit_16(1385);
+emit_16(1319);
+emit_16(1385);
+emit_16(1318);
+emit_16(1386);
+emit_16(1320);
+emit_16(1387);
+emit_16(1321);
+emit_16(1387);
+emit_16(1320);
+emit_16(1387);
+emit_16(1321);
+emit_16(1388);
+emit_16(1322);
+emit_16(1388);
+emit_16(1321);
+emit_16(1388);
+emit_16(1322);
+emit_16(1389);
+emit_16(1323);
+emit_16(1389);
+emit_16(1322);
+emit_16(1389);
+emit_16(1323);
+emit_16(1390);
+emit_16(1324);
+emit_16(1390);
+emit_16(1323);
+emit_16(1390);
+emit_16(1324);
+emit_16(1391);
+emit_16(1325);
+emit_16(1391);
+emit_16(1324);
+emit_16(1391);
+emit_16(1325);
+emit_16(1392);
+emit_16(1326);
+emit_16(1392);
+emit_16(1325);
+emit_16(1392);
+emit_16(1326);
+emit_16(1393);
+emit_16(1327);
+emit_16(1393);
+emit_16(1326);
+emit_16(1393);
+emit_16(1327);
+emit_16(1394);
+emit_16(1328);
+emit_16(1394);
+emit_16(1327);
+emit_16(1394);
+emit_16(1328);
+emit_16(1395);
+emit_16(1329);
+emit_16(1395);
+emit_16(1328);
+emit_16(1395);
+emit_16(1329);
+emit_16(1396);
+emit_16(1330);
+emit_16(1396);
+emit_16(1329);
+emit_16(1396);
+emit_16(1330);
+emit_16(1397);
+emit_16(1331);
+emit_16(1397);
+emit_16(1330);
+emit_16(1397);
+emit_16(1331);
+emit_16(1398);
+emit_16(1332);
+emit_16(1398);
+emit_16(1331);
+emit_16(1398);
+emit_16(1332);
+emit_16(1399);
+emit_16(1333);
+emit_16(1399);
+emit_16(1332);
+emit_16(1399);
+emit_16(1333);
+emit_16(1400);
+emit_16(1334);
+emit_16(1400);
+emit_16(1333);
+emit_16(1400);
+emit_16(1334);
+emit_16(1401);
+emit_16(1335);
+emit_16(1401);
+emit_16(1334);
+emit_16(1401);
+emit_16(1335);
+emit_16(1402);
+emit_16(1336);
+emit_16(1402);
+emit_16(1335);
+emit_16(1402);
+emit_16(1336);
+emit_16(1403);
+emit_16(1337);
+emit_16(1403);
+emit_16(1336);
+emit_16(1403);
+emit_16(1337);
+emit_16(1404);
+emit_16(1338);
+emit_16(1404);
+emit_16(1337);
+emit_16(1404);
+emit_16(1338);
+emit_16(1405);
+emit_16(1339);
+emit_16(1405);
+emit_16(1338);
+emit_16(1405);
+emit_16(1339);
+emit_16(1406);
+emit_16(1340);
+emit_16(1406);
+emit_16(1339);
+emit_16(1406);
+emit_16(1340);
+emit_16(1407);
+emit_16(1341);
+emit_16(1407);
+emit_16(1340);
+emit_16(1407);
+emit_16(1341);
+emit_16(1408);
+emit_16(1342);
+emit_16(1408);
+emit_16(1341);
+emit_16(1408);
+emit_16(1342);
+emit_16(1409);
+emit_16(1343);
+emit_16(1409);
+emit_16(1342);
+emit_16(1409);
+emit_16(1343);
+emit_16(1410);
+emit_16(1344);
+emit_16(1410);
+emit_16(1343);
+emit_16(1410);
+emit_16(1344);
+emit_16(1411);
+emit_16(1345);
+emit_16(1411);
+emit_16(1344);
+emit_16(1411);
+emit_16(1345);
+emit_16(1412);
+emit_16(1346);
+emit_16(1412);
+emit_16(1345);
+emit_16(1412);
+emit_16(1346);
+emit_16(1413);
+emit_16(1347);
+emit_16(1413);
+emit_16(1346);
+emit_16(1413);
+emit_16(1347);
+emit_16(1414);
+emit_16(1348);
+emit_16(1414);
+emit_16(1347);
+emit_16(1414);
+emit_16(1348);
+emit_16(1415);
+emit_16(1349);
+emit_16(1415);
+emit_16(1348);
+emit_16(1415);
+emit_16(1349);
+emit_16(1416);
+emit_16(1350);
+emit_16(1416);
+emit_16(1349);
+emit_16(1416);
+emit_16(1350);
+emit_16(1417);
+emit_16(1351);
+emit_16(1417);
+emit_16(1350);
+emit_16(1417);
+emit_16(1351);
+emit_16(1418);
+emit_16(1352);
+emit_16(1418);
+emit_16(1351);
+emit_16(1418);
+emit_16(1352);
+emit_16(1419);
+emit_16(1353);
+emit_16(1419);
+emit_16(1352);
+emit_16(1419);
+emit_16(1353);
+emit_16(1420);
+emit_16(1354);
+emit_16(1420);
+emit_16(1353);
+emit_16(1420);
+emit_16(1354);
+emit_16(1421);
+emit_16(1355);
+emit_16(1421);
+emit_16(1354);
+emit_16(1421);
+emit_16(1355);
+emit_16(1422);
+emit_16(1356);
+emit_16(1422);
+emit_16(1355);
+emit_16(1422);
+emit_16(1356);
+emit_16(1423);
+emit_16(1357);
+emit_16(1423);
+emit_16(1356);
+emit_16(1423);
+emit_16(1357);
+emit_16(1424);
+emit_16(1358);
+emit_16(1424);
+emit_16(1357);
+emit_16(1424);
+emit_16(1358);
+emit_16(1425);
+emit_16(1359);
+emit_16(1425);
+emit_16(1358);
+emit_16(1425);
+emit_16(1359);
+emit_16(1426);
+emit_16(1360);
+emit_16(1426);
+emit_16(1359);
+emit_16(1426);
+emit_16(1360);
+emit_16(1427);
+emit_16(1361);
+emit_16(1427);
+emit_16(1360);
+emit_16(1427);
+emit_16(1361);
+emit_16(1428);
+emit_16(1362);
+emit_16(1428);
+emit_16(1361);
+emit_16(1428);
+emit_16(1362);
+emit_16(1429);
+emit_16(1363);
+emit_16(1429);
+emit_16(1362);
+emit_16(1429);
+emit_16(1363);
+emit_16(1430);
+emit_16(1364);
+emit_16(1430);
+emit_16(1363);
+emit_16(1430);
+emit_16(1364);
+emit_16(1431);
+emit_16(1365);
+emit_16(1431);
+emit_16(1364);
+emit_16(1431);
+emit_16(1365);
+emit_16(1432);
+emit_16(1366);
+emit_16(1432);
+emit_16(1365);
+emit_16(1432);
+emit_16(1366);
+emit_16(1433);
+emit_16(1367);
+emit_16(1433);
+emit_16(1366);
+emit_16(1433);
+emit_16(1367);
+emit_16(1434);
+emit_16(1368);
+emit_16(1434);
+emit_16(1367);
+emit_16(1434);
+emit_16(1368);
+emit_16(1435);
+emit_16(1369);
+emit_16(1435);
+emit_16(1368);
+emit_16(1435);
+emit_16(1369);
+emit_16(1436);
+emit_16(1370);
+emit_16(1436);
+emit_16(1369);
+emit_16(1436);
+emit_16(1370);
+emit_16(1437);
+emit_16(1371);
+emit_16(1437);
+emit_16(1370);
+emit_16(1437);
+emit_16(1371);
+emit_16(1438);
+emit_16(1372);
+emit_16(1438);
+emit_16(1371);
+emit_16(1438);
+emit_16(1372);
+emit_16(1439);
+emit_16(1373);
+emit_16(1439);
+emit_16(1372);
+emit_16(1439);
+emit_16(1373);
+emit_16(1440);
+emit_16(1374);
+emit_16(1440);
+emit_16(1373);
+emit_16(1440);
+emit_16(1374);
+emit_16(1441);
+emit_16(1375);
+emit_16(1441);
+emit_16(1374);
+emit_16(1441);
+emit_16(1375);
+emit_16(1442);
+emit_16(1376);
+emit_16(1442);
+emit_16(1375);
+emit_16(1442);
+emit_16(1376);
+emit_16(1443);
+emit_16(1377);
+emit_16(1443);
+emit_16(1376);
+emit_16(1443);
+emit_16(1377);
+emit_16(1444);
+emit_16(1378);
+emit_16(1444);
+emit_16(1377);
+emit_16(1444);
+emit_16(1378);
+emit_16(1445);
+emit_16(1379);
+emit_16(1445);
+emit_16(1378);
+emit_16(1445);
+emit_16(1379);
+emit_16(1446);
+emit_16(1380);
+emit_16(1446);
+emit_16(1379);
+emit_16(1446);
+emit_16(1380);
+emit_16(1447);
+emit_16(1381);
+emit_16(1447);
+emit_16(1380);
+emit_16(1447);
+emit_16(1381);
+emit_16(1448);
+emit_16(1382);
+emit_16(1448);
+emit_16(1381);
+emit_16(1448);
+emit_16(1382);
+emit_16(1449);
+emit_16(1383);
+emit_16(1449);
+emit_16(1382);
+emit_16(1449);
+emit_16(1383);
+emit_16(1450);
+emit_16(1384);
+emit_16(1450);
+emit_16(1383);
+emit_16(1450);
+emit_16(1384);
+emit_16(1451);
+emit_16(1385);
+emit_16(1451);
+emit_16(1384);
+emit_16(1452);
+emit_16(1386);
+emit_16(1453);
+emit_16(1387);
+emit_16(1453);
+emit_16(1386);
+emit_16(1453);
+emit_16(1387);
+emit_16(1454);
+emit_16(1388);
+emit_16(1454);
+emit_16(1387);
+emit_16(1454);
+emit_16(1388);
+emit_16(1455);
+emit_16(1389);
+emit_16(1455);
+emit_16(1388);
+emit_16(1455);
+emit_16(1389);
+emit_16(1456);
+emit_16(1390);
+emit_16(1456);
+emit_16(1389);
+emit_16(1456);
+emit_16(1390);
+emit_16(1457);
+emit_16(1391);
+emit_16(1457);
+emit_16(1390);
+emit_16(1457);
+emit_16(1391);
+emit_16(1458);
+emit_16(1392);
+emit_16(1458);
+emit_16(1391);
+emit_16(1458);
+emit_16(1392);
+emit_16(1459);
+emit_16(1393);
+emit_16(1459);
+emit_16(1392);
+emit_16(1459);
+emit_16(1393);
+emit_16(1460);
+emit_16(1394);
+emit_16(1460);
+emit_16(1393);
+emit_16(1460);
+emit_16(1394);
+emit_16(1461);
+emit_16(1395);
+emit_16(1461);
+emit_16(1394);
+emit_16(1461);
+emit_16(1395);
+emit_16(1462);
+emit_16(1396);
+emit_16(1462);
+emit_16(1395);
+emit_16(1462);
+emit_16(1396);
+emit_16(1463);
+emit_16(1397);
+emit_16(1463);
+emit_16(1396);
+emit_16(1463);
+emit_16(1397);
+emit_16(1464);
+emit_16(1398);
+emit_16(1464);
+emit_16(1397);
+emit_16(1464);
+emit_16(1398);
+emit_16(1465);
+emit_16(1399);
+emit_16(1465);
+emit_16(1398);
+emit_16(1465);
+emit_16(1399);
+emit_16(1466);
+emit_16(1400);
+emit_16(1466);
+emit_16(1399);
+emit_16(1466);
+emit_16(1400);
+emit_16(1467);
+emit_16(1401);
+emit_16(1467);
+emit_16(1400);
+emit_16(1467);
+emit_16(1401);
+emit_16(1468);
+emit_16(1402);
+emit_16(1468);
+emit_16(1401);
+emit_16(1468);
+emit_16(1402);
+emit_16(1469);
+emit_16(1403);
+emit_16(1469);
+emit_16(1402);
+emit_16(1469);
+emit_16(1403);
+emit_16(1470);
+emit_16(1404);
+emit_16(1470);
+emit_16(1403);
+emit_16(1470);
+emit_16(1404);
+emit_16(1471);
+emit_16(1405);
+emit_16(1471);
+emit_16(1404);
+emit_16(1471);
+emit_16(1405);
+emit_16(1472);
+emit_16(1406);
+emit_16(1472);
+emit_16(1405);
+emit_16(1472);
+emit_16(1406);
+emit_16(1473);
+emit_16(1407);
+emit_16(1473);
+emit_16(1406);
+emit_16(1473);
+emit_16(1407);
+emit_16(1474);
+emit_16(1408);
+emit_16(1474);
+emit_16(1407);
+emit_16(1474);
+emit_16(1408);
+emit_16(1475);
+emit_16(1409);
+emit_16(1475);
+emit_16(1408);
+emit_16(1475);
+emit_16(1409);
+emit_16(1476);
+emit_16(1410);
+emit_16(1476);
+emit_16(1409);
+emit_16(1476);
+emit_16(1410);
+emit_16(1477);
+emit_16(1411);
+emit_16(1477);
+emit_16(1410);
+emit_16(1477);
+emit_16(1411);
+emit_16(1478);
+emit_16(1412);
+emit_16(1478);
+emit_16(1411);
+emit_16(1478);
+emit_16(1412);
+emit_16(1479);
+emit_16(1413);
+emit_16(1479);
+emit_16(1412);
+emit_16(1479);
+emit_16(1413);
+emit_16(1480);
+emit_16(1414);
+emit_16(1480);
+emit_16(1413);
+emit_16(1480);
+emit_16(1414);
+emit_16(1481);
+emit_16(1415);
+emit_16(1481);
+emit_16(1414);
+emit_16(1481);
+emit_16(1415);
+emit_16(1482);
+emit_16(1416);
+emit_16(1482);
+emit_16(1415);
+emit_16(1482);
+emit_16(1416);
+emit_16(1483);
+emit_16(1417);
+emit_16(1483);
+emit_16(1416);
+emit_16(1483);
+emit_16(1417);
+emit_16(1484);
+emit_16(1418);
+emit_16(1484);
+emit_16(1417);
+emit_16(1484);
+emit_16(1418);
+emit_16(1485);
+emit_16(1419);
+emit_16(1485);
+emit_16(1418);
+emit_16(1485);
+emit_16(1419);
+emit_16(1486);
+emit_16(1420);
+emit_16(1486);
+emit_16(1419);
+emit_16(1486);
+emit_16(1420);
+emit_16(1487);
+emit_16(1421);
+emit_16(1487);
+emit_16(1420);
+emit_16(1487);
+emit_16(1421);
+emit_16(1488);
+emit_16(1422);
+emit_16(1488);
+emit_16(1421);
+emit_16(1488);
+emit_16(1422);
+emit_16(1489);
+emit_16(1423);
+emit_16(1489);
+emit_16(1422);
+emit_16(1489);
+emit_16(1423);
+emit_16(1490);
+emit_16(1424);
+emit_16(1490);
+emit_16(1423);
+emit_16(1490);
+emit_16(1424);
+emit_16(1491);
+emit_16(1425);
+emit_16(1491);
+emit_16(1424);
+emit_16(1491);
+emit_16(1425);
+emit_16(1492);
+emit_16(1426);
+emit_16(1492);
+emit_16(1425);
+emit_16(1492);
+emit_16(1426);
+emit_16(1493);
+emit_16(1427);
+emit_16(1493);
+emit_16(1426);
+emit_16(1493);
+emit_16(1427);
+emit_16(1494);
+emit_16(1428);
+emit_16(1494);
+emit_16(1427);
+emit_16(1494);
+emit_16(1428);
+emit_16(1495);
+emit_16(1429);
+emit_16(1495);
+emit_16(1428);
+emit_16(1495);
+emit_16(1429);
+emit_16(1496);
+emit_16(1430);
+emit_16(1496);
+emit_16(1429);
+emit_16(1496);
+emit_16(1430);
+emit_16(1497);
+emit_16(1431);
+emit_16(1497);
+emit_16(1430);
+emit_16(1497);
+emit_16(1431);
+emit_16(1498);
+emit_16(1432);
+emit_16(1498);
+emit_16(1431);
+emit_16(1498);
+emit_16(1432);
+emit_16(1499);
+emit_16(1433);
+emit_16(1499);
+emit_16(1432);
+emit_16(1499);
+emit_16(1433);
+emit_16(1500);
+emit_16(1434);
+emit_16(1500);
+emit_16(1433);
+emit_16(1500);
+emit_16(1434);
+emit_16(1501);
+emit_16(1435);
+emit_16(1501);
+emit_16(1434);
+emit_16(1501);
+emit_16(1435);
+emit_16(1502);
+emit_16(1436);
+emit_16(1502);
+emit_16(1435);
+emit_16(1502);
+emit_16(1436);
+emit_16(1503);
+emit_16(1437);
+emit_16(1503);
+emit_16(1436);
+emit_16(1503);
+emit_16(1437);
+emit_16(1504);
+emit_16(1438);
+emit_16(1504);
+emit_16(1437);
+emit_16(1504);
+emit_16(1438);
+emit_16(1505);
+emit_16(1439);
+emit_16(1505);
+emit_16(1438);
+emit_16(1505);
+emit_16(1439);
+emit_16(1506);
+emit_16(1440);
+emit_16(1506);
+emit_16(1439);
+emit_16(1506);
+emit_16(1440);
+emit_16(1507);
+emit_16(1441);
+emit_16(1507);
+emit_16(1440);
+emit_16(1507);
+emit_16(1441);
+emit_16(1508);
+emit_16(1442);
+emit_16(1508);
+emit_16(1441);
+emit_16(1508);
+emit_16(1442);
+emit_16(1509);
+emit_16(1443);
+emit_16(1509);
+emit_16(1442);
+emit_16(1509);
+emit_16(1443);
+emit_16(1510);
+emit_16(1444);
+emit_16(1510);
+emit_16(1443);
+emit_16(1510);
+emit_16(1444);
+emit_16(1511);
+emit_16(1445);
+emit_16(1511);
+emit_16(1444);
+emit_16(1511);
+emit_16(1445);
+emit_16(1512);
+emit_16(1446);
+emit_16(1512);
+emit_16(1445);
+emit_16(1512);
+emit_16(1446);
+emit_16(1513);
+emit_16(1447);
+emit_16(1513);
+emit_16(1446);
+emit_16(1513);
+emit_16(1447);
+emit_16(1514);
+emit_16(1448);
+emit_16(1514);
+emit_16(1447);
+emit_16(1514);
+emit_16(1448);
+emit_16(1515);
+emit_16(1449);
+emit_16(1515);
+emit_16(1448);
+emit_16(1515);
+emit_16(1449);
+emit_16(1516);
+emit_16(1450);
+emit_16(1516);
+emit_16(1449);
+emit_16(1516);
+emit_16(1450);
+emit_16(1517);
+emit_16(1451);
+emit_16(1517);
+emit_16(1450);
+emit_16(1518);
+emit_16(1452);
+emit_16(1519);
+emit_16(1453);
+emit_16(1519);
+emit_16(1452);
+emit_16(1519);
+emit_16(1453);
+emit_16(1520);
+emit_16(1454);
+emit_16(1520);
+emit_16(1453);
+emit_16(1520);
+emit_16(1454);
+emit_16(1521);
+emit_16(1455);
+emit_16(1521);
+emit_16(1454);
+emit_16(1521);
+emit_16(1455);
+emit_16(1522);
+emit_16(1456);
+emit_16(1522);
+emit_16(1455);
+emit_16(1522);
+emit_16(1456);
+emit_16(1523);
+emit_16(1457);
+emit_16(1523);
+emit_16(1456);
+emit_16(1523);
+emit_16(1457);
+emit_16(1524);
+emit_16(1458);
+emit_16(1524);
+emit_16(1457);
+emit_16(1524);
+emit_16(1458);
+emit_16(1525);
+emit_16(1459);
+emit_16(1525);
+emit_16(1458);
+emit_16(1525);
+emit_16(1459);
+emit_16(1526);
+emit_16(1460);
+emit_16(1526);
+emit_16(1459);
+emit_16(1526);
+emit_16(1460);
+emit_16(1527);
+emit_16(1461);
+emit_16(1527);
+emit_16(1460);
+emit_16(1527);
+emit_16(1461);
+emit_16(1528);
+emit_16(1462);
+emit_16(1528);
+emit_16(1461);
+emit_16(1528);
+emit_16(1462);
+emit_16(1529);
+emit_16(1463);
+emit_16(1529);
+emit_16(1462);
+emit_16(1529);
+emit_16(1463);
+emit_16(1530);
+emit_16(1464);
+emit_16(1530);
+emit_16(1463);
+emit_16(1530);
+emit_16(1464);
+emit_16(1531);
+emit_16(1465);
+emit_16(1531);
+emit_16(1464);
+emit_16(1531);
+emit_16(1465);
+emit_16(1532);
+emit_16(1466);
+emit_16(1532);
+emit_16(1465);
+emit_16(1532);
+emit_16(1466);
+emit_16(1533);
+emit_16(1467);
+emit_16(1533);
+emit_16(1466);
+emit_16(1533);
+emit_16(1467);
+emit_16(1534);
+emit_16(1468);
+emit_16(1534);
+emit_16(1467);
+emit_16(1534);
+emit_16(1468);
+emit_16(1535);
+emit_16(1469);
+emit_16(1535);
+emit_16(1468);
+emit_16(1535);
+emit_16(1469);
+emit_16(1536);
+emit_16(1470);
+emit_16(1536);
+emit_16(1469);
+emit_16(1536);
+emit_16(1470);
+emit_16(1537);
+emit_16(1471);
+emit_16(1537);
+emit_16(1470);
+emit_16(1537);
+emit_16(1471);
+emit_16(1538);
+emit_16(1472);
+emit_16(1538);
+emit_16(1471);
+emit_16(1538);
+emit_16(1472);
+emit_16(1539);
+emit_16(1473);
+emit_16(1539);
+emit_16(1472);
+emit_16(1539);
+emit_16(1473);
+emit_16(1540);
+emit_16(1474);
+emit_16(1540);
+emit_16(1473);
+emit_16(1540);
+emit_16(1474);
+emit_16(1541);
+emit_16(1475);
+emit_16(1541);
+emit_16(1474);
+emit_16(1541);
+emit_16(1475);
+emit_16(1542);
+emit_16(1476);
+emit_16(1542);
+emit_16(1475);
+emit_16(1542);
+emit_16(1476);
+emit_16(1543);
+emit_16(1477);
+emit_16(1543);
+emit_16(1476);
+emit_16(1543);
+emit_16(1477);
+emit_16(1544);
+emit_16(1478);
+emit_16(1544);
+emit_16(1477);
+emit_16(1544);
+emit_16(1478);
+emit_16(1545);
+emit_16(1479);
+emit_16(1545);
+emit_16(1478);
+emit_16(1545);
+emit_16(1479);
+emit_16(1546);
+emit_16(1480);
+emit_16(1546);
+emit_16(1479);
+emit_16(1546);
+emit_16(1480);
+emit_16(1547);
+emit_16(1481);
+emit_16(1547);
+emit_16(1480);
+emit_16(1547);
+emit_16(1481);
+emit_16(1548);
+emit_16(1482);
+emit_16(1548);
+emit_16(1481);
+emit_16(1548);
+emit_16(1482);
+emit_16(1549);
+emit_16(1483);
+emit_16(1549);
+emit_16(1482);
+emit_16(1549);
+emit_16(1483);
+emit_16(1550);
+emit_16(1484);
+emit_16(1550);
+emit_16(1483);
+emit_16(1550);
+emit_16(1484);
+emit_16(1551);
+emit_16(1485);
+emit_16(1551);
+emit_16(1484);
+emit_16(1551);
+emit_16(1485);
+emit_16(1552);
+emit_16(1486);
+emit_16(1552);
+emit_16(1485);
+emit_16(1552);
+emit_16(1486);
+emit_16(1553);
+emit_16(1487);
+emit_16(1553);
+emit_16(1486);
+emit_16(1553);
+emit_16(1487);
+emit_16(1554);
+emit_16(1488);
+emit_16(1554);
+emit_16(1487);
+emit_16(1554);
+emit_16(1488);
+emit_16(1555);
+emit_16(1489);
+emit_16(1555);
+emit_16(1488);
+emit_16(1555);
+emit_16(1489);
+emit_16(1556);
+emit_16(1490);
+emit_16(1556);
+emit_16(1489);
+emit_16(1556);
+emit_16(1490);
+emit_16(1557);
+emit_16(1491);
+emit_16(1557);
+emit_16(1490);
+emit_16(1557);
+emit_16(1491);
+emit_16(1558);
+emit_16(1492);
+emit_16(1558);
+emit_16(1491);
+emit_16(1558);
+emit_16(1492);
+emit_16(1559);
+emit_16(1493);
+emit_16(1559);
+emit_16(1492);
+emit_16(1559);
+emit_16(1493);
+emit_16(1560);
+emit_16(1494);
+emit_16(1560);
+emit_16(1493);
+emit_16(1560);
+emit_16(1494);
+emit_16(1561);
+emit_16(1495);
+emit_16(1561);
+emit_16(1494);
+emit_16(1561);
+emit_16(1495);
+emit_16(1562);
+emit_16(1496);
+emit_16(1562);
+emit_16(1495);
+emit_16(1562);
+emit_16(1496);
+emit_16(1563);
+emit_16(1497);
+emit_16(1563);
+emit_16(1496);
+emit_16(1563);
+emit_16(1497);
+emit_16(1564);
+emit_16(1498);
+emit_16(1564);
+emit_16(1497);
+emit_16(1564);
+emit_16(1498);
+emit_16(1565);
+emit_16(1499);
+emit_16(1565);
+emit_16(1498);
+emit_16(1565);
+emit_16(1499);
+emit_16(1566);
+emit_16(1500);
+emit_16(1566);
+emit_16(1499);
+emit_16(1566);
+emit_16(1500);
+emit_16(1567);
+emit_16(1501);
+emit_16(1567);
+emit_16(1500);
+emit_16(1567);
+emit_16(1501);
+emit_16(1568);
+emit_16(1502);
+emit_16(1568);
+emit_16(1501);
+emit_16(1568);
+emit_16(1502);
+emit_16(1569);
+emit_16(1503);
+emit_16(1569);
+emit_16(1502);
+emit_16(1569);
+emit_16(1503);
+emit_16(1570);
+emit_16(1504);
+emit_16(1570);
+emit_16(1503);
+emit_16(1570);
+emit_16(1504);
+emit_16(1571);
+emit_16(1505);
+emit_16(1571);
+emit_16(1504);
+emit_16(1571);
+emit_16(1505);
+emit_16(1572);
+emit_16(1506);
+emit_16(1572);
+emit_16(1505);
+emit_16(1572);
+emit_16(1506);
+emit_16(1573);
+emit_16(1507);
+emit_16(1573);
+emit_16(1506);
+emit_16(1573);
+emit_16(1507);
+emit_16(1574);
+emit_16(1508);
+emit_16(1574);
+emit_16(1507);
+emit_16(1574);
+emit_16(1508);
+emit_16(1575);
+emit_16(1509);
+emit_16(1575);
+emit_16(1508);
+emit_16(1575);
+emit_16(1509);
+emit_16(1576);
+emit_16(1510);
+emit_16(1576);
+emit_16(1509);
+emit_16(1576);
+emit_16(1510);
+emit_16(1577);
+emit_16(1511);
+emit_16(1577);
+emit_16(1510);
+emit_16(1577);
+emit_16(1511);
+emit_16(1578);
+emit_16(1512);
+emit_16(1578);
+emit_16(1511);
+emit_16(1578);
+emit_16(1512);
+emit_16(1579);
+emit_16(1513);
+emit_16(1579);
+emit_16(1512);
+emit_16(1579);
+emit_16(1513);
+emit_16(1580);
+emit_16(1514);
+emit_16(1580);
+emit_16(1513);
+emit_16(1580);
+emit_16(1514);
+emit_16(1581);
+emit_16(1515);
+emit_16(1581);
+emit_16(1514);
+emit_16(1581);
+emit_16(1515);
+emit_16(1582);
+emit_16(1516);
+emit_16(1582);
+emit_16(1515);
+emit_16(1582);
+emit_16(1516);
+emit_16(1583);
+emit_16(1517);
+emit_16(1583);
+emit_16(1516);
+emit_16(1584);
+emit_16(1518);
+emit_16(1585);
+emit_16(1519);
+emit_16(1585);
+emit_16(1518);
+emit_16(1585);
+emit_16(1519);
+emit_16(1586);
+emit_16(1520);
+emit_16(1586);
+emit_16(1519);
+emit_16(1586);
+emit_16(1520);
+emit_16(1587);
+emit_16(1521);
+emit_16(1587);
+emit_16(1520);
+emit_16(1587);
+emit_16(1521);
+emit_16(1588);
+emit_16(1522);
+emit_16(1588);
+emit_16(1521);
+emit_16(1588);
+emit_16(1522);
+emit_16(1589);
+emit_16(1523);
+emit_16(1589);
+emit_16(1522);
+emit_16(1589);
+emit_16(1523);
+emit_16(1590);
+emit_16(1524);
+emit_16(1590);
+emit_16(1523);
+emit_16(1590);
+emit_16(1524);
+emit_16(1591);
+emit_16(1525);
+emit_16(1591);
+emit_16(1524);
+emit_16(1591);
+emit_16(1525);
+emit_16(1592);
+emit_16(1526);
+emit_16(1592);
+emit_16(1525);
+emit_16(1592);
+emit_16(1526);
+emit_16(1593);
+emit_16(1527);
+emit_16(1593);
+emit_16(1526);
+emit_16(1593);
+emit_16(1527);
+emit_16(1594);
+emit_16(1528);
+emit_16(1594);
+emit_16(1527);
+emit_16(1594);
+emit_16(1528);
+emit_16(1595);
+emit_16(1529);
+emit_16(1595);
+emit_16(1528);
+emit_16(1595);
+emit_16(1529);
+emit_16(1596);
+emit_16(1530);
+emit_16(1596);
+emit_16(1529);
+emit_16(1596);
+emit_16(1530);
+emit_16(1597);
+emit_16(1531);
+emit_16(1597);
+emit_16(1530);
+emit_16(1597);
+emit_16(1531);
+emit_16(1598);
+emit_16(1532);
+emit_16(1598);
+emit_16(1531);
+emit_16(1598);
+emit_16(1532);
+emit_16(1599);
+emit_16(1533);
+emit_16(1599);
+emit_16(1532);
+emit_16(1599);
+emit_16(1533);
+emit_16(1600);
+emit_16(1534);
+emit_16(1600);
+emit_16(1533);
+emit_16(1600);
+emit_16(1534);
+emit_16(1601);
+emit_16(1535);
+emit_16(1601);
+emit_16(1534);
+emit_16(1601);
+emit_16(1535);
+emit_16(1602);
+emit_16(1536);
+emit_16(1602);
+emit_16(1535);
+emit_16(1602);
+emit_16(1536);
+emit_16(1603);
+emit_16(1537);
+emit_16(1603);
+emit_16(1536);
+emit_16(1603);
+emit_16(1537);
+emit_16(1604);
+emit_16(1538);
+emit_16(1604);
+emit_16(1537);
+emit_16(1604);
+emit_16(1538);
+emit_16(1605);
+emit_16(1539);
+emit_16(1605);
+emit_16(1538);
+emit_16(1605);
+emit_16(1539);
+emit_16(1606);
+emit_16(1540);
+emit_16(1606);
+emit_16(1539);
+emit_16(1606);
+emit_16(1540);
+emit_16(1607);
+emit_16(1541);
+emit_16(1607);
+emit_16(1540);
+emit_16(1607);
+emit_16(1541);
+emit_16(1608);
+emit_16(1542);
+emit_16(1608);
+emit_16(1541);
+emit_16(1608);
+emit_16(1542);
+emit_16(1609);
+emit_16(1543);
+emit_16(1609);
+emit_16(1542);
+emit_16(1609);
+emit_16(1543);
+emit_16(1610);
+emit_16(1544);
+emit_16(1610);
+emit_16(1543);
+emit_16(1610);
+emit_16(1544);
+emit_16(1611);
+emit_16(1545);
+emit_16(1611);
+emit_16(1544);
+emit_16(1611);
+emit_16(1545);
+emit_16(1612);
+emit_16(1546);
+emit_16(1612);
+emit_16(1545);
+emit_16(1612);
+emit_16(1546);
+emit_16(1613);
+emit_16(1547);
+emit_16(1613);
+emit_16(1546);
+emit_16(1613);
+emit_16(1547);
+emit_16(1614);
+emit_16(1548);
+emit_16(1614);
+emit_16(1547);
+emit_16(1614);
+emit_16(1548);
+emit_16(1615);
+emit_16(1549);
+emit_16(1615);
+emit_16(1548);
+emit_16(1615);
+emit_16(1549);
+emit_16(1616);
+emit_16(1550);
+emit_16(1616);
+emit_16(1549);
+emit_16(1616);
+emit_16(1550);
+emit_16(1617);
+emit_16(1551);
+emit_16(1617);
+emit_16(1550);
+emit_16(1617);
+emit_16(1551);
+emit_16(1618);
+emit_16(1552);
+emit_16(1618);
+emit_16(1551);
+emit_16(1618);
+emit_16(1552);
+emit_16(1619);
+emit_16(1553);
+emit_16(1619);
+emit_16(1552);
+emit_16(1619);
+emit_16(1553);
+emit_16(1620);
+emit_16(1554);
+emit_16(1620);
+emit_16(1553);
+emit_16(1620);
+emit_16(1554);
+emit_16(1621);
+emit_16(1555);
+emit_16(1621);
+emit_16(1554);
+emit_16(1621);
+emit_16(1555);
+emit_16(1622);
+emit_16(1556);
+emit_16(1622);
+emit_16(1555);
+emit_16(1622);
+emit_16(1556);
+emit_16(1623);
+emit_16(1557);
+emit_16(1623);
+emit_16(1556);
+emit_16(1623);
+emit_16(1557);
+emit_16(1624);
+emit_16(1558);
+emit_16(1624);
+emit_16(1557);
+emit_16(1624);
+emit_16(1558);
+emit_16(1625);
+emit_16(1559);
+emit_16(1625);
+emit_16(1558);
+emit_16(1625);
+emit_16(1559);
+emit_16(1626);
+emit_16(1560);
+emit_16(1626);
+emit_16(1559);
+emit_16(1626);
+emit_16(1560);
+emit_16(1627);
+emit_16(1561);
+emit_16(1627);
+emit_16(1560);
+emit_16(1627);
+emit_16(1561);
+emit_16(1628);
+emit_16(1562);
+emit_16(1628);
+emit_16(1561);
+emit_16(1628);
+emit_16(1562);
+emit_16(1629);
+emit_16(1563);
+emit_16(1629);
+emit_16(1562);
+emit_16(1629);
+emit_16(1563);
+emit_16(1630);
+emit_16(1564);
+emit_16(1630);
+emit_16(1563);
+emit_16(1630);
+emit_16(1564);
+emit_16(1631);
+emit_16(1565);
+emit_16(1631);
+emit_16(1564);
+emit_16(1631);
+emit_16(1565);
+emit_16(1632);
+emit_16(1566);
+emit_16(1632);
+emit_16(1565);
+emit_16(1632);
+emit_16(1566);
+emit_16(1633);
+emit_16(1567);
+emit_16(1633);
+emit_16(1566);
+emit_16(1633);
+emit_16(1567);
+emit_16(1634);
+emit_16(1568);
+emit_16(1634);
+emit_16(1567);
+emit_16(1634);
+emit_16(1568);
+emit_16(1635);
+emit_16(1569);
+emit_16(1635);
+emit_16(1568);
+emit_16(1635);
+emit_16(1569);
+emit_16(1636);
+emit_16(1570);
+emit_16(1636);
+emit_16(1569);
+emit_16(1636);
+emit_16(1570);
+emit_16(1637);
+emit_16(1571);
+emit_16(1637);
+emit_16(1570);
+emit_16(1637);
+emit_16(1571);
+emit_16(1638);
+emit_16(1572);
+emit_16(1638);
+emit_16(1571);
+emit_16(1638);
+emit_16(1572);
+emit_16(1639);
+emit_16(1573);
+emit_16(1639);
+emit_16(1572);
+emit_16(1639);
+emit_16(1573);
+emit_16(1640);
+emit_16(1574);
+emit_16(1640);
+emit_16(1573);
+emit_16(1640);
+emit_16(1574);
+emit_16(1641);
+emit_16(1575);
+emit_16(1641);
+emit_16(1574);
+emit_16(1641);
+emit_16(1575);
+emit_16(1642);
+emit_16(1576);
+emit_16(1642);
+emit_16(1575);
+emit_16(1642);
+emit_16(1576);
+emit_16(1643);
+emit_16(1577);
+emit_16(1643);
+emit_16(1576);
+emit_16(1643);
+emit_16(1577);
+emit_16(1644);
+emit_16(1578);
+emit_16(1644);
+emit_16(1577);
+emit_16(1644);
+emit_16(1578);
+emit_16(1645);
+emit_16(1579);
+emit_16(1645);
+emit_16(1578);
+emit_16(1645);
+emit_16(1579);
+emit_16(1646);
+emit_16(1580);
+emit_16(1646);
+emit_16(1579);
+emit_16(1646);
+emit_16(1580);
+emit_16(1647);
+emit_16(1581);
+emit_16(1647);
+emit_16(1580);
+emit_16(1647);
+emit_16(1581);
+emit_16(1648);
+emit_16(1582);
+emit_16(1648);
+emit_16(1581);
+emit_16(1648);
+emit_16(1582);
+emit_16(1649);
+emit_16(1583);
+emit_16(1649);
+emit_16(1582);
+emit_16(1650);
+emit_16(1584);
+emit_16(1651);
+emit_16(1585);
+emit_16(1651);
+emit_16(1584);
+emit_16(1651);
+emit_16(1585);
+emit_16(1652);
+emit_16(1586);
+emit_16(1652);
+emit_16(1585);
+emit_16(1652);
+emit_16(1586);
+emit_16(1653);
+emit_16(1587);
+emit_16(1653);
+emit_16(1586);
+emit_16(1653);
+emit_16(1587);
+emit_16(1654);
+emit_16(1588);
+emit_16(1654);
+emit_16(1587);
+emit_16(1654);
+emit_16(1588);
+emit_16(1655);
+emit_16(1589);
+emit_16(1655);
+emit_16(1588);
+emit_16(1655);
+emit_16(1589);
+emit_16(1656);
+emit_16(1590);
+emit_16(1656);
+emit_16(1589);
+emit_16(1656);
+emit_16(1590);
+emit_16(1657);
+emit_16(1591);
+emit_16(1657);
+emit_16(1590);
+emit_16(1657);
+emit_16(1591);
+emit_16(1658);
+emit_16(1592);
+emit_16(1658);
+emit_16(1591);
+emit_16(1658);
+emit_16(1592);
+emit_16(1659);
+emit_16(1593);
+emit_16(1659);
+emit_16(1592);
+emit_16(1659);
+emit_16(1593);
+emit_16(1660);
+emit_16(1594);
+emit_16(1660);
+emit_16(1593);
+emit_16(1660);
+emit_16(1594);
+emit_16(1661);
+emit_16(1595);
+emit_16(1661);
+emit_16(1594);
+emit_16(1661);
+emit_16(1595);
+emit_16(1662);
+emit_16(1596);
+emit_16(1662);
+emit_16(1595);
+emit_16(1662);
+emit_16(1596);
+emit_16(1663);
+emit_16(1597);
+emit_16(1663);
+emit_16(1596);
+emit_16(1663);
+emit_16(1597);
+emit_16(1664);
+emit_16(1598);
+emit_16(1664);
+emit_16(1597);
+emit_16(1664);
+emit_16(1598);
+emit_16(1665);
+emit_16(1599);
+emit_16(1665);
+emit_16(1598);
+emit_16(1665);
+emit_16(1599);
+emit_16(1666);
+emit_16(1600);
+emit_16(1666);
+emit_16(1599);
+emit_16(1666);
+emit_16(1600);
+emit_16(1667);
+emit_16(1601);
+emit_16(1667);
+emit_16(1600);
+emit_16(1667);
+emit_16(1601);
+emit_16(1668);
+emit_16(1602);
+emit_16(1668);
+emit_16(1601);
+emit_16(1668);
+emit_16(1602);
+emit_16(1669);
+emit_16(1603);
+emit_16(1669);
+emit_16(1602);
+emit_16(1669);
+emit_16(1603);
+emit_16(1670);
+emit_16(1604);
+emit_16(1670);
+emit_16(1603);
+emit_16(1670);
+emit_16(1604);
+emit_16(1671);
+emit_16(1605);
+emit_16(1671);
+emit_16(1604);
+emit_16(1671);
+emit_16(1605);
+emit_16(1672);
+emit_16(1606);
+emit_16(1672);
+emit_16(1605);
+emit_16(1672);
+emit_16(1606);
+emit_16(1673);
+emit_16(1607);
+emit_16(1673);
+emit_16(1606);
+emit_16(1673);
+emit_16(1607);
+emit_16(1674);
+emit_16(1608);
+emit_16(1674);
+emit_16(1607);
+emit_16(1674);
+emit_16(1608);
+emit_16(1675);
+emit_16(1609);
+emit_16(1675);
+emit_16(1608);
+emit_16(1675);
+emit_16(1609);
+emit_16(1676);
+emit_16(1610);
+emit_16(1676);
+emit_16(1609);
+emit_16(1676);
+emit_16(1610);
+emit_16(1677);
+emit_16(1611);
+emit_16(1677);
+emit_16(1610);
+emit_16(1677);
+emit_16(1611);
+emit_16(1678);
+emit_16(1612);
+emit_16(1678);
+emit_16(1611);
+emit_16(1678);
+emit_16(1612);
+emit_16(1679);
+emit_16(1613);
+emit_16(1679);
+emit_16(1612);
+emit_16(1679);
+emit_16(1613);
+emit_16(1680);
+emit_16(1614);
+emit_16(1680);
+emit_16(1613);
+emit_16(1680);
+emit_16(1614);
+emit_16(1681);
+emit_16(1615);
+emit_16(1681);
+emit_16(1614);
+emit_16(1681);
+emit_16(1615);
+emit_16(1682);
+emit_16(1616);
+emit_16(1682);
+emit_16(1615);
+emit_16(1682);
+emit_16(1616);
+emit_16(1683);
+emit_16(1617);
+emit_16(1683);
+emit_16(1616);
+emit_16(1683);
+emit_16(1617);
+emit_16(1684);
+emit_16(1618);
+emit_16(1684);
+emit_16(1617);
+emit_16(1684);
+emit_16(1618);
+emit_16(1685);
+emit_16(1619);
+emit_16(1685);
+emit_16(1618);
+emit_16(1685);
+emit_16(1619);
+emit_16(1686);
+emit_16(1620);
+emit_16(1686);
+emit_16(1619);
+emit_16(1686);
+emit_16(1620);
+emit_16(1687);
+emit_16(1621);
+emit_16(1687);
+emit_16(1620);
+emit_16(1687);
+emit_16(1621);
+emit_16(1688);
+emit_16(1622);
+emit_16(1688);
+emit_16(1621);
+emit_16(1688);
+emit_16(1622);
+emit_16(1689);
+emit_16(1623);
+emit_16(1689);
+emit_16(1622);
+emit_16(1689);
+emit_16(1623);
+emit_16(1690);
+emit_16(1624);
+emit_16(1690);
+emit_16(1623);
+emit_16(1690);
+emit_16(1624);
+emit_16(1691);
+emit_16(1625);
+emit_16(1691);
+emit_16(1624);
+emit_16(1691);
+emit_16(1625);
+emit_16(1692);
+emit_16(1626);
+emit_16(1692);
+emit_16(1625);
+emit_16(1692);
+emit_16(1626);
+emit_16(1693);
+emit_16(1627);
+emit_16(1693);
+emit_16(1626);
+emit_16(1693);
+emit_16(1627);
+emit_16(1694);
+emit_16(1628);
+emit_16(1694);
+emit_16(1627);
+emit_16(1694);
+emit_16(1628);
+emit_16(1695);
+emit_16(1629);
+emit_16(1695);
+emit_16(1628);
+emit_16(1695);
+emit_16(1629);
+emit_16(1696);
+emit_16(1630);
+emit_16(1696);
+emit_16(1629);
+emit_16(1696);
+emit_16(1630);
+emit_16(1697);
+emit_16(1631);
+emit_16(1697);
+emit_16(1630);
+emit_16(1697);
+emit_16(1631);
+emit_16(1698);
+emit_16(1632);
+emit_16(1698);
+emit_16(1631);
+emit_16(1698);
+emit_16(1632);
+emit_16(1699);
+emit_16(1633);
+emit_16(1699);
+emit_16(1632);
+emit_16(1699);
+emit_16(1633);
+emit_16(1700);
+emit_16(1634);
+emit_16(1700);
+emit_16(1633);
+emit_16(1700);
+emit_16(1634);
+emit_16(1701);
+emit_16(1635);
+emit_16(1701);
+emit_16(1634);
+emit_16(1701);
+emit_16(1635);
+emit_16(1702);
+emit_16(1636);
+emit_16(1702);
+emit_16(1635);
+emit_16(1702);
+emit_16(1636);
+emit_16(1703);
+emit_16(1637);
+emit_16(1703);
+emit_16(1636);
+emit_16(1703);
+emit_16(1637);
+emit_16(1704);
+emit_16(1638);
+emit_16(1704);
+emit_16(1637);
+emit_16(1704);
+emit_16(1638);
+emit_16(1705);
+emit_16(1639);
+emit_16(1705);
+emit_16(1638);
+emit_16(1705);
+emit_16(1639);
+emit_16(1706);
+emit_16(1640);
+emit_16(1706);
+emit_16(1639);
+emit_16(1706);
+emit_16(1640);
+emit_16(1707);
+emit_16(1641);
+emit_16(1707);
+emit_16(1640);
+emit_16(1707);
+emit_16(1641);
+emit_16(1708);
+emit_16(1642);
+emit_16(1708);
+emit_16(1641);
+emit_16(1708);
+emit_16(1642);
+emit_16(1709);
+emit_16(1643);
+emit_16(1709);
+emit_16(1642);
+emit_16(1709);
+emit_16(1643);
+emit_16(1710);
+emit_16(1644);
+emit_16(1710);
+emit_16(1643);
+emit_16(1710);
+emit_16(1644);
+emit_16(1711);
+emit_16(1645);
+emit_16(1711);
+emit_16(1644);
+emit_16(1711);
+emit_16(1645);
+emit_16(1712);
+emit_16(1646);
+emit_16(1712);
+emit_16(1645);
+emit_16(1712);
+emit_16(1646);
+emit_16(1713);
+emit_16(1647);
+emit_16(1713);
+emit_16(1646);
+emit_16(1713);
+emit_16(1647);
+emit_16(1714);
+emit_16(1648);
+emit_16(1714);
+emit_16(1647);
+emit_16(1714);
+emit_16(1648);
+emit_16(1715);
+emit_16(1649);
+emit_16(1715);
+emit_16(1648);
+emit_16(1716);
+emit_16(1650);
+emit_16(1717);
+emit_16(1651);
+emit_16(1717);
+emit_16(1650);
+emit_16(1717);
+emit_16(1651);
+emit_16(1718);
+emit_16(1652);
+emit_16(1718);
+emit_16(1651);
+emit_16(1718);
+emit_16(1652);
+emit_16(1719);
+emit_16(1653);
+emit_16(1719);
+emit_16(1652);
+emit_16(1719);
+emit_16(1653);
+emit_16(1720);
+emit_16(1654);
+emit_16(1720);
+emit_16(1653);
+emit_16(1720);
+emit_16(1654);
+emit_16(1721);
+emit_16(1655);
+emit_16(1721);
+emit_16(1654);
+emit_16(1721);
+emit_16(1655);
+emit_16(1722);
+emit_16(1656);
+emit_16(1722);
+emit_16(1655);
+emit_16(1722);
+emit_16(1656);
+emit_16(1723);
+emit_16(1657);
+emit_16(1723);
+emit_16(1656);
+emit_16(1723);
+emit_16(1657);
+emit_16(1724);
+emit_16(1658);
+emit_16(1724);
+emit_16(1657);
+emit_16(1724);
+emit_16(1658);
+emit_16(1725);
+emit_16(1659);
+emit_16(1725);
+emit_16(1658);
+emit_16(1725);
+emit_16(1659);
+emit_16(1726);
+emit_16(1660);
+emit_16(1726);
+emit_16(1659);
+emit_16(1726);
+emit_16(1660);
+emit_16(1727);
+emit_16(1661);
+emit_16(1727);
+emit_16(1660);
+emit_16(1727);
+emit_16(1661);
+emit_16(1728);
+emit_16(1662);
+emit_16(1728);
+emit_16(1661);
+emit_16(1728);
+emit_16(1662);
+emit_16(1729);
+emit_16(1663);
+emit_16(1729);
+emit_16(1662);
+emit_16(1729);
+emit_16(1663);
+emit_16(1730);
+emit_16(1664);
+emit_16(1730);
+emit_16(1663);
+emit_16(1730);
+emit_16(1664);
+emit_16(1731);
+emit_16(1665);
+emit_16(1731);
+emit_16(1664);
+emit_16(1731);
+emit_16(1665);
+emit_16(1732);
+emit_16(1666);
+emit_16(1732);
+emit_16(1665);
+emit_16(1732);
+emit_16(1666);
+emit_16(1733);
+emit_16(1667);
+emit_16(1733);
+emit_16(1666);
+emit_16(1733);
+emit_16(1667);
+emit_16(1734);
+emit_16(1668);
+emit_16(1734);
+emit_16(1667);
+emit_16(1734);
+emit_16(1668);
+emit_16(1735);
+emit_16(1669);
+emit_16(1735);
+emit_16(1668);
+emit_16(1735);
+emit_16(1669);
+emit_16(1736);
+emit_16(1670);
+emit_16(1736);
+emit_16(1669);
+emit_16(1736);
+emit_16(1670);
+emit_16(1737);
+emit_16(1671);
+emit_16(1737);
+emit_16(1670);
+emit_16(1737);
+emit_16(1671);
+emit_16(1738);
+emit_16(1672);
+emit_16(1738);
+emit_16(1671);
+emit_16(1738);
+emit_16(1672);
+emit_16(1739);
+emit_16(1673);
+emit_16(1739);
+emit_16(1672);
+emit_16(1739);
+emit_16(1673);
+emit_16(1740);
+emit_16(1674);
+emit_16(1740);
+emit_16(1673);
+emit_16(1740);
+emit_16(1674);
+emit_16(1741);
+emit_16(1675);
+emit_16(1741);
+emit_16(1674);
+emit_16(1741);
+emit_16(1675);
+emit_16(1742);
+emit_16(1676);
+emit_16(1742);
+emit_16(1675);
+emit_16(1742);
+emit_16(1676);
+emit_16(1743);
+emit_16(1677);
+emit_16(1743);
+emit_16(1676);
+emit_16(1743);
+emit_16(1677);
+emit_16(1744);
+emit_16(1678);
+emit_16(1744);
+emit_16(1677);
+emit_16(1744);
+emit_16(1678);
+emit_16(1745);
+emit_16(1679);
+emit_16(1745);
+emit_16(1678);
+emit_16(1745);
+emit_16(1679);
+emit_16(1746);
+emit_16(1680);
+emit_16(1746);
+emit_16(1679);
+emit_16(1746);
+emit_16(1680);
+emit_16(1747);
+emit_16(1681);
+emit_16(1747);
+emit_16(1680);
+emit_16(1747);
+emit_16(1681);
+emit_16(1748);
+emit_16(1682);
+emit_16(1748);
+emit_16(1681);
+emit_16(1748);
+emit_16(1682);
+emit_16(1749);
+emit_16(1683);
+emit_16(1749);
+emit_16(1682);
+emit_16(1749);
+emit_16(1683);
+emit_16(1750);
+emit_16(1684);
+emit_16(1750);
+emit_16(1683);
+emit_16(1750);
+emit_16(1684);
+emit_16(1751);
+emit_16(1685);
+emit_16(1751);
+emit_16(1684);
+emit_16(1751);
+emit_16(1685);
+emit_16(1752);
+emit_16(1686);
+emit_16(1752);
+emit_16(1685);
+emit_16(1752);
+emit_16(1686);
+emit_16(1753);
+emit_16(1687);
+emit_16(1753);
+emit_16(1686);
+emit_16(1753);
+emit_16(1687);
+emit_16(1754);
+emit_16(1688);
+emit_16(1754);
+emit_16(1687);
+emit_16(1754);
+emit_16(1688);
+emit_16(1755);
+emit_16(1689);
+emit_16(1755);
+emit_16(1688);
+emit_16(1755);
+emit_16(1689);
+emit_16(1756);
+emit_16(1690);
+emit_16(1756);
+emit_16(1689);
+emit_16(1756);
+emit_16(1690);
+emit_16(1757);
+emit_16(1691);
+emit_16(1757);
+emit_16(1690);
+emit_16(1757);
+emit_16(1691);
+emit_16(1758);
+emit_16(1692);
+emit_16(1758);
+emit_16(1691);
+emit_16(1758);
+emit_16(1692);
+emit_16(1759);
+emit_16(1693);
+emit_16(1759);
+emit_16(1692);
+emit_16(1759);
+emit_16(1693);
+emit_16(1760);
+emit_16(1694);
+emit_16(1760);
+emit_16(1693);
+emit_16(1760);
+emit_16(1694);
+emit_16(1761);
+emit_16(1695);
+emit_16(1761);
+emit_16(1694);
+emit_16(1761);
+emit_16(1695);
+emit_16(1762);
+emit_16(1696);
+emit_16(1762);
+emit_16(1695);
+emit_16(1762);
+emit_16(1696);
+emit_16(1763);
+emit_16(1697);
+emit_16(1763);
+emit_16(1696);
+emit_16(1763);
+emit_16(1697);
+emit_16(1764);
+emit_16(1698);
+emit_16(1764);
+emit_16(1697);
+emit_16(1764);
+emit_16(1698);
+emit_16(1765);
+emit_16(1699);
+emit_16(1765);
+emit_16(1698);
+emit_16(1765);
+emit_16(1699);
+emit_16(1766);
+emit_16(1700);
+emit_16(1766);
+emit_16(1699);
+emit_16(1766);
+emit_16(1700);
+emit_16(1767);
+emit_16(1701);
+emit_16(1767);
+emit_16(1700);
+emit_16(1767);
+emit_16(1701);
+emit_16(1768);
+emit_16(1702);
+emit_16(1768);
+emit_16(1701);
+emit_16(1768);
+emit_16(1702);
+emit_16(1769);
+emit_16(1703);
+emit_16(1769);
+emit_16(1702);
+emit_16(1769);
+emit_16(1703);
+emit_16(1770);
+emit_16(1704);
+emit_16(1770);
+emit_16(1703);
+emit_16(1770);
+emit_16(1704);
+emit_16(1771);
+emit_16(1705);
+emit_16(1771);
+emit_16(1704);
+emit_16(1771);
+emit_16(1705);
+emit_16(1772);
+emit_16(1706);
+emit_16(1772);
+emit_16(1705);
+emit_16(1772);
+emit_16(1706);
+emit_16(1773);
+emit_16(1707);
+emit_16(1773);
+emit_16(1706);
+emit_16(1773);
+emit_16(1707);
+emit_16(1774);
+emit_16(1708);
+emit_16(1774);
+emit_16(1707);
+emit_16(1774);
+emit_16(1708);
+emit_16(1775);
+emit_16(1709);
+emit_16(1775);
+emit_16(1708);
+emit_16(1775);
+emit_16(1709);
+emit_16(1776);
+emit_16(1710);
+emit_16(1776);
+emit_16(1709);
+emit_16(1776);
+emit_16(1710);
+emit_16(1777);
+emit_16(1711);
+emit_16(1777);
+emit_16(1710);
+emit_16(1777);
+emit_16(1711);
+emit_16(1778);
+emit_16(1712);
+emit_16(1778);
+emit_16(1711);
+emit_16(1778);
+emit_16(1712);
+emit_16(1779);
+emit_16(1713);
+emit_16(1779);
+emit_16(1712);
+emit_16(1779);
+emit_16(1713);
+emit_16(1780);
+emit_16(1714);
+emit_16(1780);
+emit_16(1713);
+emit_16(1780);
+emit_16(1714);
+emit_16(1781);
+emit_16(1715);
+emit_16(1781);
+emit_16(1714);
+emit_16(1782);
+emit_16(1716);
+emit_16(1783);
+emit_16(1717);
+emit_16(1783);
+emit_16(1716);
+emit_16(1783);
+emit_16(1717);
+emit_16(1784);
+emit_16(1718);
+emit_16(1784);
+emit_16(1717);
+emit_16(1784);
+emit_16(1718);
+emit_16(1785);
+emit_16(1719);
+emit_16(1785);
+emit_16(1718);
+emit_16(1785);
+emit_16(1719);
+emit_16(1786);
+emit_16(1720);
+emit_16(1786);
+emit_16(1719);
+emit_16(1786);
+emit_16(1720);
+emit_16(1787);
+emit_16(1721);
+emit_16(1787);
+emit_16(1720);
+emit_16(1787);
+emit_16(1721);
+emit_16(1788);
+emit_16(1722);
+emit_16(1788);
+emit_16(1721);
+emit_16(1788);
+emit_16(1722);
+emit_16(1789);
+emit_16(1723);
+emit_16(1789);
+emit_16(1722);
+emit_16(1789);
+emit_16(1723);
+emit_16(1790);
+emit_16(1724);
+emit_16(1790);
+emit_16(1723);
+emit_16(1790);
+emit_16(1724);
+emit_16(1791);
+emit_16(1725);
+emit_16(1791);
+emit_16(1724);
+emit_16(1791);
+emit_16(1725);
+emit_16(1792);
+emit_16(1726);
+emit_16(1792);
+emit_16(1725);
+emit_16(1792);
+emit_16(1726);
+emit_16(1793);
+emit_16(1727);
+emit_16(1793);
+emit_16(1726);
+emit_16(1793);
+emit_16(1727);
+emit_16(1794);
+emit_16(1728);
+emit_16(1794);
+emit_16(1727);
+emit_16(1794);
+emit_16(1728);
+emit_16(1795);
+emit_16(1729);
+emit_16(1795);
+emit_16(1728);
+emit_16(1795);
+emit_16(1729);
+emit_16(1796);
+emit_16(1730);
+emit_16(1796);
+emit_16(1729);
+emit_16(1796);
+emit_16(1730);
+emit_16(1797);
+emit_16(1731);
+emit_16(1797);
+emit_16(1730);
+emit_16(1797);
+emit_16(1731);
+emit_16(1798);
+emit_16(1732);
+emit_16(1798);
+emit_16(1731);
+emit_16(1798);
+emit_16(1732);
+emit_16(1799);
+emit_16(1733);
+emit_16(1799);
+emit_16(1732);
+emit_16(1799);
+emit_16(1733);
+emit_16(1800);
+emit_16(1734);
+emit_16(1800);
+emit_16(1733);
+emit_16(1800);
+emit_16(1734);
+emit_16(1801);
+emit_16(1735);
+emit_16(1801);
+emit_16(1734);
+emit_16(1801);
+emit_16(1735);
+emit_16(1802);
+emit_16(1736);
+emit_16(1802);
+emit_16(1735);
+emit_16(1802);
+emit_16(1736);
+emit_16(1803);
+emit_16(1737);
+emit_16(1803);
+emit_16(1736);
+emit_16(1803);
+emit_16(1737);
+emit_16(1804);
+emit_16(1738);
+emit_16(1804);
+emit_16(1737);
+emit_16(1804);
+emit_16(1738);
+emit_16(1805);
+emit_16(1739);
+emit_16(1805);
+emit_16(1738);
+emit_16(1805);
+emit_16(1739);
+emit_16(1806);
+emit_16(1740);
+emit_16(1806);
+emit_16(1739);
+emit_16(1806);
+emit_16(1740);
+emit_16(1807);
+emit_16(1741);
+emit_16(1807);
+emit_16(1740);
+emit_16(1807);
+emit_16(1741);
+emit_16(1808);
+emit_16(1742);
+emit_16(1808);
+emit_16(1741);
+emit_16(1808);
+emit_16(1742);
+emit_16(1809);
+emit_16(1743);
+emit_16(1809);
+emit_16(1742);
+emit_16(1809);
+emit_16(1743);
+emit_16(1810);
+emit_16(1744);
+emit_16(1810);
+emit_16(1743);
+emit_16(1810);
+emit_16(1744);
+emit_16(1811);
+emit_16(1745);
+emit_16(1811);
+emit_16(1744);
+emit_16(1811);
+emit_16(1745);
+emit_16(1812);
+emit_16(1746);
+emit_16(1812);
+emit_16(1745);
+emit_16(1812);
+emit_16(1746);
+emit_16(1813);
+emit_16(1747);
+emit_16(1813);
+emit_16(1746);
+emit_16(1813);
+emit_16(1747);
+emit_16(1814);
+emit_16(1748);
+emit_16(1814);
+emit_16(1747);
+emit_16(1814);
+emit_16(1748);
+emit_16(1815);
+emit_16(1749);
+emit_16(1815);
+emit_16(1748);
+emit_16(1815);
+emit_16(1749);
+emit_16(1816);
+emit_16(1750);
+emit_16(1816);
+emit_16(1749);
+emit_16(1816);
+emit_16(1750);
+emit_16(1817);
+emit_16(1751);
+emit_16(1817);
+emit_16(1750);
+emit_16(1817);
+emit_16(1751);
+emit_16(1818);
+emit_16(1752);
+emit_16(1818);
+emit_16(1751);
+emit_16(1818);
+emit_16(1752);
+emit_16(1819);
+emit_16(1753);
+emit_16(1819);
+emit_16(1752);
+emit_16(1819);
+emit_16(1753);
+emit_16(1820);
+emit_16(1754);
+emit_16(1820);
+emit_16(1753);
+emit_16(1820);
+emit_16(1754);
+emit_16(1821);
+emit_16(1755);
+emit_16(1821);
+emit_16(1754);
+emit_16(1821);
+emit_16(1755);
+emit_16(1822);
+emit_16(1756);
+emit_16(1822);
+emit_16(1755);
+emit_16(1822);
+emit_16(1756);
+emit_16(1823);
+emit_16(1757);
+emit_16(1823);
+emit_16(1756);
+emit_16(1823);
+emit_16(1757);
+emit_16(1824);
+emit_16(1758);
+emit_16(1824);
+emit_16(1757);
+emit_16(1824);
+emit_16(1758);
+emit_16(1825);
+emit_16(1759);
+emit_16(1825);
+emit_16(1758);
+emit_16(1825);
+emit_16(1759);
+emit_16(1826);
+emit_16(1760);
+emit_16(1826);
+emit_16(1759);
+emit_16(1826);
+emit_16(1760);
+emit_16(1827);
+emit_16(1761);
+emit_16(1827);
+emit_16(1760);
+emit_16(1827);
+emit_16(1761);
+emit_16(1828);
+emit_16(1762);
+emit_16(1828);
+emit_16(1761);
+emit_16(1828);
+emit_16(1762);
+emit_16(1829);
+emit_16(1763);
+emit_16(1829);
+emit_16(1762);
+emit_16(1829);
+emit_16(1763);
+emit_16(1830);
+emit_16(1764);
+emit_16(1830);
+emit_16(1763);
+emit_16(1830);
+emit_16(1764);
+emit_16(1831);
+emit_16(1765);
+emit_16(1831);
+emit_16(1764);
+emit_16(1831);
+emit_16(1765);
+emit_16(1832);
+emit_16(1766);
+emit_16(1832);
+emit_16(1765);
+emit_16(1832);
+emit_16(1766);
+emit_16(1833);
+emit_16(1767);
+emit_16(1833);
+emit_16(1766);
+emit_16(1833);
+emit_16(1767);
+emit_16(1834);
+emit_16(1768);
+emit_16(1834);
+emit_16(1767);
+emit_16(1834);
+emit_16(1768);
+emit_16(1835);
+emit_16(1769);
+emit_16(1835);
+emit_16(1768);
+emit_16(1835);
+emit_16(1769);
+emit_16(1836);
+emit_16(1770);
+emit_16(1836);
+emit_16(1769);
+emit_16(1836);
+emit_16(1770);
+emit_16(1837);
+emit_16(1771);
+emit_16(1837);
+emit_16(1770);
+emit_16(1837);
+emit_16(1771);
+emit_16(1838);
+emit_16(1772);
+emit_16(1838);
+emit_16(1771);
+emit_16(1838);
+emit_16(1772);
+emit_16(1839);
+emit_16(1773);
+emit_16(1839);
+emit_16(1772);
+emit_16(1839);
+emit_16(1773);
+emit_16(1840);
+emit_16(1774);
+emit_16(1840);
+emit_16(1773);
+emit_16(1840);
+emit_16(1774);
+emit_16(1841);
+emit_16(1775);
+emit_16(1841);
+emit_16(1774);
+emit_16(1841);
+emit_16(1775);
+emit_16(1842);
+emit_16(1776);
+emit_16(1842);
+emit_16(1775);
+emit_16(1842);
+emit_16(1776);
+emit_16(1843);
+emit_16(1777);
+emit_16(1843);
+emit_16(1776);
+emit_16(1843);
+emit_16(1777);
+emit_16(1844);
+emit_16(1778);
+emit_16(1844);
+emit_16(1777);
+emit_16(1844);
+emit_16(1778);
+emit_16(1845);
+emit_16(1779);
+emit_16(1845);
+emit_16(1778);
+emit_16(1845);
+emit_16(1779);
+emit_16(1846);
+emit_16(1780);
+emit_16(1846);
+emit_16(1779);
+emit_16(1846);
+emit_16(1780);
+emit_16(1847);
+emit_16(1781);
+emit_16(1847);
+emit_16(1780);
+emit_16(1848);
+emit_16(1782);
+emit_16(1849);
+emit_16(1783);
+emit_16(1849);
+emit_16(1782);
+emit_16(1849);
+emit_16(1783);
+emit_16(1850);
+emit_16(1784);
+emit_16(1850);
+emit_16(1783);
+emit_16(1850);
+emit_16(1784);
+emit_16(1851);
+emit_16(1785);
+emit_16(1851);
+emit_16(1784);
+emit_16(1851);
+emit_16(1785);
+emit_16(1852);
+emit_16(1786);
+emit_16(1852);
+emit_16(1785);
+emit_16(1852);
+emit_16(1786);
+emit_16(1853);
+emit_16(1787);
+emit_16(1853);
+emit_16(1786);
+emit_16(1853);
+emit_16(1787);
+emit_16(1854);
+emit_16(1788);
+emit_16(1854);
+emit_16(1787);
+emit_16(1854);
+emit_16(1788);
+emit_16(1855);
+emit_16(1789);
+emit_16(1855);
+emit_16(1788);
+emit_16(1855);
+emit_16(1789);
+emit_16(1856);
+emit_16(1790);
+emit_16(1856);
+emit_16(1789);
+emit_16(1856);
+emit_16(1790);
+emit_16(1857);
+emit_16(1791);
+emit_16(1857);
+emit_16(1790);
+emit_16(1857);
+emit_16(1791);
+emit_16(1858);
+emit_16(1792);
+emit_16(1858);
+emit_16(1791);
+emit_16(1858);
+emit_16(1792);
+emit_16(1859);
+emit_16(1793);
+emit_16(1859);
+emit_16(1792);
+emit_16(1859);
+emit_16(1793);
+emit_16(1860);
+emit_16(1794);
+emit_16(1860);
+emit_16(1793);
+emit_16(1860);
+emit_16(1794);
+emit_16(1861);
+emit_16(1795);
+emit_16(1861);
+emit_16(1794);
+emit_16(1861);
+emit_16(1795);
+emit_16(1862);
+emit_16(1796);
+emit_16(1862);
+emit_16(1795);
+emit_16(1862);
+emit_16(1796);
+emit_16(1863);
+emit_16(1797);
+emit_16(1863);
+emit_16(1796);
+emit_16(1863);
+emit_16(1797);
+emit_16(1864);
+emit_16(1798);
+emit_16(1864);
+emit_16(1797);
+emit_16(1864);
+emit_16(1798);
+emit_16(1865);
+emit_16(1799);
+emit_16(1865);
+emit_16(1798);
+emit_16(1865);
+emit_16(1799);
+emit_16(1866);
+emit_16(1800);
+emit_16(1866);
+emit_16(1799);
+emit_16(1866);
+emit_16(1800);
+emit_16(1867);
+emit_16(1801);
+emit_16(1867);
+emit_16(1800);
+emit_16(1867);
+emit_16(1801);
+emit_16(1868);
+emit_16(1802);
+emit_16(1868);
+emit_16(1801);
+emit_16(1868);
+emit_16(1802);
+emit_16(1869);
+emit_16(1803);
+emit_16(1869);
+emit_16(1802);
+emit_16(1869);
+emit_16(1803);
+emit_16(1870);
+emit_16(1804);
+emit_16(1870);
+emit_16(1803);
+emit_16(1870);
+emit_16(1804);
+emit_16(1871);
+emit_16(1805);
+emit_16(1871);
+emit_16(1804);
+emit_16(1871);
+emit_16(1805);
+emit_16(1872);
+emit_16(1806);
+emit_16(1872);
+emit_16(1805);
+emit_16(1872);
+emit_16(1806);
+emit_16(1873);
+emit_16(1807);
+emit_16(1873);
+emit_16(1806);
+emit_16(1873);
+emit_16(1807);
+emit_16(1874);
+emit_16(1808);
+emit_16(1874);
+emit_16(1807);
+emit_16(1874);
+emit_16(1808);
+emit_16(1875);
+emit_16(1809);
+emit_16(1875);
+emit_16(1808);
+emit_16(1875);
+emit_16(1809);
+emit_16(1876);
+emit_16(1810);
+emit_16(1876);
+emit_16(1809);
+emit_16(1876);
+emit_16(1810);
+emit_16(1877);
+emit_16(1811);
+emit_16(1877);
+emit_16(1810);
+emit_16(1877);
+emit_16(1811);
+emit_16(1878);
+emit_16(1812);
+emit_16(1878);
+emit_16(1811);
+emit_16(1878);
+emit_16(1812);
+emit_16(1879);
+emit_16(1813);
+emit_16(1879);
+emit_16(1812);
+emit_16(1879);
+emit_16(1813);
+emit_16(1880);
+emit_16(1814);
+emit_16(1880);
+emit_16(1813);
+emit_16(1880);
+emit_16(1814);
+emit_16(1881);
+emit_16(1815);
+emit_16(1881);
+emit_16(1814);
+emit_16(1881);
+emit_16(1815);
+emit_16(1882);
+emit_16(1816);
+emit_16(1882);
+emit_16(1815);
+emit_16(1882);
+emit_16(1816);
+emit_16(1883);
+emit_16(1817);
+emit_16(1883);
+emit_16(1816);
+emit_16(1883);
+emit_16(1817);
+emit_16(1884);
+emit_16(1818);
+emit_16(1884);
+emit_16(1817);
+emit_16(1884);
+emit_16(1818);
+emit_16(1885);
+emit_16(1819);
+emit_16(1885);
+emit_16(1818);
+emit_16(1885);
+emit_16(1819);
+emit_16(1886);
+emit_16(1820);
+emit_16(1886);
+emit_16(1819);
+emit_16(1886);
+emit_16(1820);
+emit_16(1887);
+emit_16(1821);
+emit_16(1887);
+emit_16(1820);
+emit_16(1887);
+emit_16(1821);
+emit_16(1888);
+emit_16(1822);
+emit_16(1888);
+emit_16(1821);
+emit_16(1888);
+emit_16(1822);
+emit_16(1889);
+emit_16(1823);
+emit_16(1889);
+emit_16(1822);
+emit_16(1889);
+emit_16(1823);
+emit_16(1890);
+emit_16(1824);
+emit_16(1890);
+emit_16(1823);
+emit_16(1890);
+emit_16(1824);
+emit_16(1891);
+emit_16(1825);
+emit_16(1891);
+emit_16(1824);
+emit_16(1891);
+emit_16(1825);
+emit_16(1892);
+emit_16(1826);
+emit_16(1892);
+emit_16(1825);
+emit_16(1892);
+emit_16(1826);
+emit_16(1893);
+emit_16(1827);
+emit_16(1893);
+emit_16(1826);
+emit_16(1893);
+emit_16(1827);
+emit_16(1894);
+emit_16(1828);
+emit_16(1894);
+emit_16(1827);
+emit_16(1894);
+emit_16(1828);
+emit_16(1895);
+emit_16(1829);
+emit_16(1895);
+emit_16(1828);
+emit_16(1895);
+emit_16(1829);
+emit_16(1896);
+emit_16(1830);
+emit_16(1896);
+emit_16(1829);
+emit_16(1896);
+emit_16(1830);
+emit_16(1897);
+emit_16(1831);
+emit_16(1897);
+emit_16(1830);
+emit_16(1897);
+emit_16(1831);
+emit_16(1898);
+emit_16(1832);
+emit_16(1898);
+emit_16(1831);
+emit_16(1898);
+emit_16(1832);
+emit_16(1899);
+emit_16(1833);
+emit_16(1899);
+emit_16(1832);
+emit_16(1899);
+emit_16(1833);
+emit_16(1900);
+emit_16(1834);
+emit_16(1900);
+emit_16(1833);
+emit_16(1900);
+emit_16(1834);
+emit_16(1901);
+emit_16(1835);
+emit_16(1901);
+emit_16(1834);
+emit_16(1901);
+emit_16(1835);
+emit_16(1902);
+emit_16(1836);
+emit_16(1902);
+emit_16(1835);
+emit_16(1902);
+emit_16(1836);
+emit_16(1903);
+emit_16(1837);
+emit_16(1903);
+emit_16(1836);
+emit_16(1903);
+emit_16(1837);
+emit_16(1904);
+emit_16(1838);
+emit_16(1904);
+emit_16(1837);
+emit_16(1904);
+emit_16(1838);
+emit_16(1905);
+emit_16(1839);
+emit_16(1905);
+emit_16(1838);
+emit_16(1905);
+emit_16(1839);
+emit_16(1906);
+emit_16(1840);
+emit_16(1906);
+emit_16(1839);
+emit_16(1906);
+emit_16(1840);
+emit_16(1907);
+emit_16(1841);
+emit_16(1907);
+emit_16(1840);
+emit_16(1907);
+emit_16(1841);
+emit_16(1908);
+emit_16(1842);
+emit_16(1908);
+emit_16(1841);
+emit_16(1908);
+emit_16(1842);
+emit_16(1909);
+emit_16(1843);
+emit_16(1909);
+emit_16(1842);
+emit_16(1909);
+emit_16(1843);
+emit_16(1910);
+emit_16(1844);
+emit_16(1910);
+emit_16(1843);
+emit_16(1910);
+emit_16(1844);
+emit_16(1911);
+emit_16(1845);
+emit_16(1911);
+emit_16(1844);
+emit_16(1911);
+emit_16(1845);
+emit_16(1912);
+emit_16(1846);
+emit_16(1912);
+emit_16(1845);
+emit_16(1912);
+emit_16(1846);
+emit_16(1913);
+emit_16(1847);
+emit_16(1913);
+emit_16(1846);
+emit_16(1914);
+emit_16(1848);
+emit_16(1915);
+emit_16(1849);
+emit_16(1915);
+emit_16(1848);
+emit_16(1915);
+emit_16(1849);
+emit_16(1916);
+emit_16(1850);
+emit_16(1916);
+emit_16(1849);
+emit_16(1916);
+emit_16(1850);
+emit_16(1917);
+emit_16(1851);
+emit_16(1917);
+emit_16(1850);
+emit_16(1917);
+emit_16(1851);
+emit_16(1918);
+emit_16(1852);
+emit_16(1918);
+emit_16(1851);
+emit_16(1918);
+emit_16(1852);
+emit_16(1919);
+emit_16(1853);
+emit_16(1919);
+emit_16(1852);
+emit_16(1919);
+emit_16(1853);
+emit_16(1920);
+emit_16(1854);
+emit_16(1920);
+emit_16(1853);
+emit_16(1920);
+emit_16(1854);
+emit_16(1921);
+emit_16(1855);
+emit_16(1921);
+emit_16(1854);
+emit_16(1921);
+emit_16(1855);
+emit_16(1922);
+emit_16(1856);
+emit_16(1922);
+emit_16(1855);
+emit_16(1922);
+emit_16(1856);
+emit_16(1923);
+emit_16(1857);
+emit_16(1923);
+emit_16(1856);
+emit_16(1923);
+emit_16(1857);
+emit_16(1924);
+emit_16(1858);
+emit_16(1924);
+emit_16(1857);
+emit_16(1924);
+emit_16(1858);
+emit_16(1925);
+emit_16(1859);
+emit_16(1925);
+emit_16(1858);
+emit_16(1925);
+emit_16(1859);
+emit_16(1926);
+emit_16(1860);
+emit_16(1926);
+emit_16(1859);
+emit_16(1926);
+emit_16(1860);
+emit_16(1927);
+emit_16(1861);
+emit_16(1927);
+emit_16(1860);
+emit_16(1927);
+emit_16(1861);
+emit_16(1928);
+emit_16(1862);
+emit_16(1928);
+emit_16(1861);
+emit_16(1928);
+emit_16(1862);
+emit_16(1929);
+emit_16(1863);
+emit_16(1929);
+emit_16(1862);
+emit_16(1929);
+emit_16(1863);
+emit_16(1930);
+emit_16(1864);
+emit_16(1930);
+emit_16(1863);
+emit_16(1930);
+emit_16(1864);
+emit_16(1931);
+emit_16(1865);
+emit_16(1931);
+emit_16(1864);
+emit_16(1931);
+emit_16(1865);
+emit_16(1932);
+emit_16(1866);
+emit_16(1932);
+emit_16(1865);
+emit_16(1932);
+emit_16(1866);
+emit_16(1933);
+emit_16(1867);
+emit_16(1933);
+emit_16(1866);
+emit_16(1933);
+emit_16(1867);
+emit_16(1934);
+emit_16(1868);
+emit_16(1934);
+emit_16(1867);
+emit_16(1934);
+emit_16(1868);
+emit_16(1935);
+emit_16(1869);
+emit_16(1935);
+emit_16(1868);
+emit_16(1935);
+emit_16(1869);
+emit_16(1936);
+emit_16(1870);
+emit_16(1936);
+emit_16(1869);
+emit_16(1936);
+emit_16(1870);
+emit_16(1937);
+emit_16(1871);
+emit_16(1937);
+emit_16(1870);
+emit_16(1937);
+emit_16(1871);
+emit_16(1938);
+emit_16(1872);
+emit_16(1938);
+emit_16(1871);
+emit_16(1938);
+emit_16(1872);
+emit_16(1939);
+emit_16(1873);
+emit_16(1939);
+emit_16(1872);
+emit_16(1939);
+emit_16(1873);
+emit_16(1940);
+emit_16(1874);
+emit_16(1940);
+emit_16(1873);
+emit_16(1940);
+emit_16(1874);
+emit_16(1941);
+emit_16(1875);
+emit_16(1941);
+emit_16(1874);
+emit_16(1941);
+emit_16(1875);
+emit_16(1942);
+emit_16(1876);
+emit_16(1942);
+emit_16(1875);
+emit_16(1942);
+emit_16(1876);
+emit_16(1943);
+emit_16(1877);
+emit_16(1943);
+emit_16(1876);
+emit_16(1943);
+emit_16(1877);
+emit_16(1944);
+emit_16(1878);
+emit_16(1944);
+emit_16(1877);
+emit_16(1944);
+emit_16(1878);
+emit_16(1945);
+emit_16(1879);
+emit_16(1945);
+emit_16(1878);
+emit_16(1945);
+emit_16(1879);
+emit_16(1946);
+emit_16(1880);
+emit_16(1946);
+emit_16(1879);
+emit_16(1946);
+emit_16(1880);
+emit_16(1947);
+emit_16(1881);
+emit_16(1947);
+emit_16(1880);
+emit_16(1947);
+emit_16(1881);
+emit_16(1948);
+emit_16(1882);
+emit_16(1948);
+emit_16(1881);
+emit_16(1948);
+emit_16(1882);
+emit_16(1949);
+emit_16(1883);
+emit_16(1949);
+emit_16(1882);
+emit_16(1949);
+emit_16(1883);
+emit_16(1950);
+emit_16(1884);
+emit_16(1950);
+emit_16(1883);
+emit_16(1950);
+emit_16(1884);
+emit_16(1951);
+emit_16(1885);
+emit_16(1951);
+emit_16(1884);
+emit_16(1951);
+emit_16(1885);
+emit_16(1952);
+emit_16(1886);
+emit_16(1952);
+emit_16(1885);
+emit_16(1952);
+emit_16(1886);
+emit_16(1953);
+emit_16(1887);
+emit_16(1953);
+emit_16(1886);
+emit_16(1953);
+emit_16(1887);
+emit_16(1954);
+emit_16(1888);
+emit_16(1954);
+emit_16(1887);
+emit_16(1954);
+emit_16(1888);
+emit_16(1955);
+emit_16(1889);
+emit_16(1955);
+emit_16(1888);
+emit_16(1955);
+emit_16(1889);
+emit_16(1956);
+emit_16(1890);
+emit_16(1956);
+emit_16(1889);
+emit_16(1956);
+emit_16(1890);
+emit_16(1957);
+emit_16(1891);
+emit_16(1957);
+emit_16(1890);
+emit_16(1957);
+emit_16(1891);
+emit_16(1958);
+emit_16(1892);
+emit_16(1958);
+emit_16(1891);
+emit_16(1958);
+emit_16(1892);
+emit_16(1959);
+emit_16(1893);
+emit_16(1959);
+emit_16(1892);
+emit_16(1959);
+emit_16(1893);
+emit_16(1960);
+emit_16(1894);
+emit_16(1960);
+emit_16(1893);
+emit_16(1960);
+emit_16(1894);
+emit_16(1961);
+emit_16(1895);
+emit_16(1961);
+emit_16(1894);
+emit_16(1961);
+emit_16(1895);
+emit_16(1962);
+emit_16(1896);
+emit_16(1962);
+emit_16(1895);
+emit_16(1962);
+emit_16(1896);
+emit_16(1963);
+emit_16(1897);
+emit_16(1963);
+emit_16(1896);
+emit_16(1963);
+emit_16(1897);
+emit_16(1964);
+emit_16(1898);
+emit_16(1964);
+emit_16(1897);
+emit_16(1964);
+emit_16(1898);
+emit_16(1965);
+emit_16(1899);
+emit_16(1965);
+emit_16(1898);
+emit_16(1965);
+emit_16(1899);
+emit_16(1966);
+emit_16(1900);
+emit_16(1966);
+emit_16(1899);
+emit_16(1966);
+emit_16(1900);
+emit_16(1967);
+emit_16(1901);
+emit_16(1967);
+emit_16(1900);
+emit_16(1967);
+emit_16(1901);
+emit_16(1968);
+emit_16(1902);
+emit_16(1968);
+emit_16(1901);
+emit_16(1968);
+emit_16(1902);
+emit_16(1969);
+emit_16(1903);
+emit_16(1969);
+emit_16(1902);
+emit_16(1969);
+emit_16(1903);
+emit_16(1970);
+emit_16(1904);
+emit_16(1970);
+emit_16(1903);
+emit_16(1970);
+emit_16(1904);
+emit_16(1971);
+emit_16(1905);
+emit_16(1971);
+emit_16(1904);
+emit_16(1971);
+emit_16(1905);
+emit_16(1972);
+emit_16(1906);
+emit_16(1972);
+emit_16(1905);
+emit_16(1972);
+emit_16(1906);
+emit_16(1973);
+emit_16(1907);
+emit_16(1973);
+emit_16(1906);
+emit_16(1973);
+emit_16(1907);
+emit_16(1974);
+emit_16(1908);
+emit_16(1974);
+emit_16(1907);
+emit_16(1974);
+emit_16(1908);
+emit_16(1975);
+emit_16(1909);
+emit_16(1975);
+emit_16(1908);
+emit_16(1975);
+emit_16(1909);
+emit_16(1976);
+emit_16(1910);
+emit_16(1976);
+emit_16(1909);
+emit_16(1976);
+emit_16(1910);
+emit_16(1977);
+emit_16(1911);
+emit_16(1977);
+emit_16(1910);
+emit_16(1977);
+emit_16(1911);
+emit_16(1978);
+emit_16(1912);
+emit_16(1978);
+emit_16(1911);
+emit_16(1978);
+emit_16(1912);
+emit_16(1979);
+emit_16(1913);
+emit_16(1979);
+emit_16(1912);
+emit_16(1980);
+emit_16(1914);
+emit_16(1981);
+emit_16(1915);
+emit_16(1981);
+emit_16(1914);
+emit_16(1981);
+emit_16(1915);
+emit_16(1982);
+emit_16(1916);
+emit_16(1982);
+emit_16(1915);
+emit_16(1982);
+emit_16(1916);
+emit_16(1983);
+emit_16(1917);
+emit_16(1983);
+emit_16(1916);
+emit_16(1983);
+emit_16(1917);
+emit_16(1984);
+emit_16(1918);
+emit_16(1984);
+emit_16(1917);
+emit_16(1984);
+emit_16(1918);
+emit_16(1985);
+emit_16(1919);
+emit_16(1985);
+emit_16(1918);
+emit_16(1985);
+emit_16(1919);
+emit_16(1986);
+emit_16(1920);
+emit_16(1986);
+emit_16(1919);
+emit_16(1986);
+emit_16(1920);
+emit_16(1987);
+emit_16(1921);
+emit_16(1987);
+emit_16(1920);
+emit_16(1987);
+emit_16(1921);
+emit_16(1988);
+emit_16(1922);
+emit_16(1988);
+emit_16(1921);
+emit_16(1988);
+emit_16(1922);
+emit_16(1989);
+emit_16(1923);
+emit_16(1989);
+emit_16(1922);
+emit_16(1989);
+emit_16(1923);
+emit_16(1990);
+emit_16(1924);
+emit_16(1990);
+emit_16(1923);
+emit_16(1990);
+emit_16(1924);
+emit_16(1991);
+emit_16(1925);
+emit_16(1991);
+emit_16(1924);
+emit_16(1991);
+emit_16(1925);
+emit_16(1992);
+emit_16(1926);
+emit_16(1992);
+emit_16(1925);
+emit_16(1992);
+emit_16(1926);
+emit_16(1993);
+emit_16(1927);
+emit_16(1993);
+emit_16(1926);
+emit_16(1993);
+emit_16(1927);
+emit_16(1994);
+emit_16(1928);
+emit_16(1994);
+emit_16(1927);
+emit_16(1994);
+emit_16(1928);
+emit_16(1995);
+emit_16(1929);
+emit_16(1995);
+emit_16(1928);
+emit_16(1995);
+emit_16(1929);
+emit_16(1996);
+emit_16(1930);
+emit_16(1996);
+emit_16(1929);
+emit_16(1996);
+emit_16(1930);
+emit_16(1997);
+emit_16(1931);
+emit_16(1997);
+emit_16(1930);
+emit_16(1997);
+emit_16(1931);
+emit_16(1998);
+emit_16(1932);
+emit_16(1998);
+emit_16(1931);
+emit_16(1998);
+emit_16(1932);
+emit_16(1999);
+emit_16(1933);
+emit_16(1999);
+emit_16(1932);
+emit_16(1999);
+emit_16(1933);
+emit_16(2000);
+emit_16(1934);
+emit_16(2000);
+emit_16(1933);
+emit_16(2000);
+emit_16(1934);
+emit_16(2001);
+emit_16(1935);
+emit_16(2001);
+emit_16(1934);
+emit_16(2001);
+emit_16(1935);
+emit_16(2002);
+emit_16(1936);
+emit_16(2002);
+emit_16(1935);
+emit_16(2002);
+emit_16(1936);
+emit_16(2003);
+emit_16(1937);
+emit_16(2003);
+emit_16(1936);
+emit_16(2003);
+emit_16(1937);
+emit_16(2004);
+emit_16(1938);
+emit_16(2004);
+emit_16(1937);
+emit_16(2004);
+emit_16(1938);
+emit_16(2005);
+emit_16(1939);
+emit_16(2005);
+emit_16(1938);
+emit_16(2005);
+emit_16(1939);
+emit_16(2006);
+emit_16(1940);
+emit_16(2006);
+emit_16(1939);
+emit_16(2006);
+emit_16(1940);
+emit_16(2007);
+emit_16(1941);
+emit_16(2007);
+emit_16(1940);
+emit_16(2007);
+emit_16(1941);
+emit_16(2008);
+emit_16(1942);
+emit_16(2008);
+emit_16(1941);
+emit_16(2008);
+emit_16(1942);
+emit_16(2009);
+emit_16(1943);
+emit_16(2009);
+emit_16(1942);
+emit_16(2009);
+emit_16(1943);
+emit_16(2010);
+emit_16(1944);
+emit_16(2010);
+emit_16(1943);
+emit_16(2010);
+emit_16(1944);
+emit_16(2011);
+emit_16(1945);
+emit_16(2011);
+emit_16(1944);
+emit_16(2011);
+emit_16(1945);
+emit_16(2012);
+emit_16(1946);
+emit_16(2012);
+emit_16(1945);
+emit_16(2012);
+emit_16(1946);
+emit_16(2013);
+emit_16(1947);
+emit_16(2013);
+emit_16(1946);
+emit_16(2013);
+emit_16(1947);
+emit_16(2014);
+emit_16(1948);
+emit_16(2014);
+emit_16(1947);
+emit_16(2014);
+emit_16(1948);
+emit_16(2015);
+emit_16(1949);
+emit_16(2015);
+emit_16(1948);
+emit_16(2015);
+emit_16(1949);
+emit_16(2016);
+emit_16(1950);
+emit_16(2016);
+emit_16(1949);
+emit_16(2016);
+emit_16(1950);
+emit_16(2017);
+emit_16(1951);
+emit_16(2017);
+emit_16(1950);
+emit_16(2017);
+emit_16(1951);
+emit_16(2018);
+emit_16(1952);
+emit_16(2018);
+emit_16(1951);
+emit_16(2018);
+emit_16(1952);
+emit_16(2019);
+emit_16(1953);
+emit_16(2019);
+emit_16(1952);
+emit_16(2019);
+emit_16(1953);
+emit_16(2020);
+emit_16(1954);
+emit_16(2020);
+emit_16(1953);
+emit_16(2020);
+emit_16(1954);
+emit_16(2021);
+emit_16(1955);
+emit_16(2021);
+emit_16(1954);
+emit_16(2021);
+emit_16(1955);
+emit_16(2022);
+emit_16(1956);
+emit_16(2022);
+emit_16(1955);
+emit_16(2022);
+emit_16(1956);
+emit_16(2023);
+emit_16(1957);
+emit_16(2023);
+emit_16(1956);
+emit_16(2023);
+emit_16(1957);
+emit_16(2024);
+emit_16(1958);
+emit_16(2024);
+emit_16(1957);
+emit_16(2024);
+emit_16(1958);
+emit_16(2025);
+emit_16(1959);
+emit_16(2025);
+emit_16(1958);
+emit_16(2025);
+emit_16(1959);
+emit_16(2026);
+emit_16(1960);
+emit_16(2026);
+emit_16(1959);
+emit_16(2026);
+emit_16(1960);
+emit_16(2027);
+emit_16(1961);
+emit_16(2027);
+emit_16(1960);
+emit_16(2027);
+emit_16(1961);
+emit_16(2028);
+emit_16(1962);
+emit_16(2028);
+emit_16(1961);
+emit_16(2028);
+emit_16(1962);
+emit_16(2029);
+emit_16(1963);
+emit_16(2029);
+emit_16(1962);
+emit_16(2029);
+emit_16(1963);
+emit_16(2030);
+emit_16(1964);
+emit_16(2030);
+emit_16(1963);
+emit_16(2030);
+emit_16(1964);
+emit_16(2031);
+emit_16(1965);
+emit_16(2031);
+emit_16(1964);
+emit_16(2031);
+emit_16(1965);
+emit_16(2032);
+emit_16(1966);
+emit_16(2032);
+emit_16(1965);
+emit_16(2032);
+emit_16(1966);
+emit_16(2033);
+emit_16(1967);
+emit_16(2033);
+emit_16(1966);
+emit_16(2033);
+emit_16(1967);
+emit_16(2034);
+emit_16(1968);
+emit_16(2034);
+emit_16(1967);
+emit_16(2034);
+emit_16(1968);
+emit_16(2035);
+emit_16(1969);
+emit_16(2035);
+emit_16(1968);
+emit_16(2035);
+emit_16(1969);
+emit_16(2036);
+emit_16(1970);
+emit_16(2036);
+emit_16(1969);
+emit_16(2036);
+emit_16(1970);
+emit_16(2037);
+emit_16(1971);
+emit_16(2037);
+emit_16(1970);
+emit_16(2037);
+emit_16(1971);
+emit_16(2038);
+emit_16(1972);
+emit_16(2038);
+emit_16(1971);
+emit_16(2038);
+emit_16(1972);
+emit_16(2039);
+emit_16(1973);
+emit_16(2039);
+emit_16(1972);
+emit_16(2039);
+emit_16(1973);
+emit_16(2040);
+emit_16(1974);
+emit_16(2040);
+emit_16(1973);
+emit_16(2040);
+emit_16(1974);
+emit_16(2041);
+emit_16(1975);
+emit_16(2041);
+emit_16(1974);
+emit_16(2041);
+emit_16(1975);
+emit_16(2042);
+emit_16(1976);
+emit_16(2042);
+emit_16(1975);
+emit_16(2042);
+emit_16(1976);
+emit_16(2043);
+emit_16(1977);
+emit_16(2043);
+emit_16(1976);
+emit_16(2043);
+emit_16(1977);
+emit_16(2044);
+emit_16(1978);
+emit_16(2044);
+emit_16(1977);
+emit_16(2044);
+emit_16(1978);
+emit_16(2045);
+emit_16(1979);
+emit_16(2045);
+emit_16(1978);
+emit_16(2046);
+emit_16(1980);
+emit_16(2047);
+emit_16(1981);
+emit_16(2047);
+emit_16(1980);
+emit_16(2047);
+emit_16(1981);
+emit_16(2048);
+emit_16(1982);
+emit_16(2048);
+emit_16(1981);
+emit_16(2048);
+emit_16(1982);
+emit_16(2049);
+emit_16(1983);
+emit_16(2049);
+emit_16(1982);
+emit_16(2049);
+emit_16(1983);
+emit_16(2050);
+emit_16(1984);
+emit_16(2050);
+emit_16(1983);
+emit_16(2050);
+emit_16(1984);
+emit_16(2051);
+emit_16(1985);
+emit_16(2051);
+emit_16(1984);
+emit_16(2051);
+emit_16(1985);
+emit_16(2052);
+emit_16(1986);
+emit_16(2052);
+emit_16(1985);
+emit_16(2052);
+emit_16(1986);
+emit_16(2053);
+emit_16(1987);
+emit_16(2053);
+emit_16(1986);
+emit_16(2053);
+emit_16(1987);
+emit_16(2054);
+emit_16(1988);
+emit_16(2054);
+emit_16(1987);
+emit_16(2054);
+emit_16(1988);
+emit_16(2055);
+emit_16(1989);
+emit_16(2055);
+emit_16(1988);
+emit_16(2055);
+emit_16(1989);
+emit_16(2056);
+emit_16(1990);
+emit_16(2056);
+emit_16(1989);
+emit_16(2056);
+emit_16(1990);
+emit_16(2057);
+emit_16(1991);
+emit_16(2057);
+emit_16(1990);
+emit_16(2057);
+emit_16(1991);
+emit_16(2058);
+emit_16(1992);
+emit_16(2058);
+emit_16(1991);
+emit_16(2058);
+emit_16(1992);
+emit_16(2059);
+emit_16(1993);
+emit_16(2059);
+emit_16(1992);
+emit_16(2059);
+emit_16(1993);
+emit_16(2060);
+emit_16(1994);
+emit_16(2060);
+emit_16(1993);
+emit_16(2060);
+emit_16(1994);
+emit_16(2061);
+emit_16(1995);
+emit_16(2061);
+emit_16(1994);
+emit_16(2061);
+emit_16(1995);
+emit_16(2062);
+emit_16(1996);
+emit_16(2062);
+emit_16(1995);
+emit_16(2062);
+emit_16(1996);
+emit_16(2063);
+emit_16(1997);
+emit_16(2063);
+emit_16(1996);
+emit_16(2063);
+emit_16(1997);
+emit_16(2064);
+emit_16(1998);
+emit_16(2064);
+emit_16(1997);
+emit_16(2064);
+emit_16(1998);
+emit_16(2065);
+emit_16(1999);
+emit_16(2065);
+emit_16(1998);
+emit_16(2065);
+emit_16(1999);
+emit_16(2066);
+emit_16(2000);
+emit_16(2066);
+emit_16(1999);
+emit_16(2066);
+emit_16(2000);
+emit_16(2067);
+emit_16(2001);
+emit_16(2067);
+emit_16(2000);
+emit_16(2067);
+emit_16(2001);
+emit_16(2068);
+emit_16(2002);
+emit_16(2068);
+emit_16(2001);
+emit_16(2068);
+emit_16(2002);
+emit_16(2069);
+emit_16(2003);
+emit_16(2069);
+emit_16(2002);
+emit_16(2069);
+emit_16(2003);
+emit_16(2070);
+emit_16(2004);
+emit_16(2070);
+emit_16(2003);
+emit_16(2070);
+emit_16(2004);
+emit_16(2071);
+emit_16(2005);
+emit_16(2071);
+emit_16(2004);
+emit_16(2071);
+emit_16(2005);
+emit_16(2072);
+emit_16(2006);
+emit_16(2072);
+emit_16(2005);
+emit_16(2072);
+emit_16(2006);
+emit_16(2073);
+emit_16(2007);
+emit_16(2073);
+emit_16(2006);
+emit_16(2073);
+emit_16(2007);
+emit_16(2074);
+emit_16(2008);
+emit_16(2074);
+emit_16(2007);
+emit_16(2074);
+emit_16(2008);
+emit_16(2075);
+emit_16(2009);
+emit_16(2075);
+emit_16(2008);
+emit_16(2075);
+emit_16(2009);
+emit_16(2076);
+emit_16(2010);
+emit_16(2076);
+emit_16(2009);
+emit_16(2076);
+emit_16(2010);
+emit_16(2077);
+emit_16(2011);
+emit_16(2077);
+emit_16(2010);
+emit_16(2077);
+emit_16(2011);
+emit_16(2078);
+emit_16(2012);
+emit_16(2078);
+emit_16(2011);
+emit_16(2078);
+emit_16(2012);
+emit_16(2079);
+emit_16(2013);
+emit_16(2079);
+emit_16(2012);
+emit_16(2079);
+emit_16(2013);
+emit_16(2080);
+emit_16(2014);
+emit_16(2080);
+emit_16(2013);
+emit_16(2080);
+emit_16(2014);
+emit_16(2081);
+emit_16(2015);
+emit_16(2081);
+emit_16(2014);
+emit_16(2081);
+emit_16(2015);
+emit_16(2082);
+emit_16(2016);
+emit_16(2082);
+emit_16(2015);
+emit_16(2082);
+emit_16(2016);
+emit_16(2083);
+emit_16(2017);
+emit_16(2083);
+emit_16(2016);
+emit_16(2083);
+emit_16(2017);
+emit_16(2084);
+emit_16(2018);
+emit_16(2084);
+emit_16(2017);
+emit_16(2084);
+emit_16(2018);
+emit_16(2085);
+emit_16(2019);
+emit_16(2085);
+emit_16(2018);
+emit_16(2085);
+emit_16(2019);
+emit_16(2086);
+emit_16(2020);
+emit_16(2086);
+emit_16(2019);
+emit_16(2086);
+emit_16(2020);
+emit_16(2087);
+emit_16(2021);
+emit_16(2087);
+emit_16(2020);
+emit_16(2087);
+emit_16(2021);
+emit_16(2088);
+emit_16(2022);
+emit_16(2088);
+emit_16(2021);
+emit_16(2088);
+emit_16(2022);
+emit_16(2089);
+emit_16(2023);
+emit_16(2089);
+emit_16(2022);
+emit_16(2089);
+emit_16(2023);
+emit_16(2090);
+emit_16(2024);
+emit_16(2090);
+emit_16(2023);
+emit_16(2090);
+emit_16(2024);
+emit_16(2091);
+emit_16(2025);
+emit_16(2091);
+emit_16(2024);
+emit_16(2091);
+emit_16(2025);
+emit_16(2092);
+emit_16(2026);
+emit_16(2092);
+emit_16(2025);
+emit_16(2092);
+emit_16(2026);
+emit_16(2093);
+emit_16(2027);
+emit_16(2093);
+emit_16(2026);
+emit_16(2093);
+emit_16(2027);
+emit_16(2094);
+emit_16(2028);
+emit_16(2094);
+emit_16(2027);
+emit_16(2094);
+emit_16(2028);
+emit_16(2095);
+emit_16(2029);
+emit_16(2095);
+emit_16(2028);
+emit_16(2095);
+emit_16(2029);
+emit_16(2096);
+emit_16(2030);
+emit_16(2096);
+emit_16(2029);
+emit_16(2096);
+emit_16(2030);
+emit_16(2097);
+emit_16(2031);
+emit_16(2097);
+emit_16(2030);
+emit_16(2097);
+emit_16(2031);
+emit_16(2098);
+emit_16(2032);
+emit_16(2098);
+emit_16(2031);
+emit_16(2098);
+emit_16(2032);
+emit_16(2099);
+emit_16(2033);
+emit_16(2099);
+emit_16(2032);
+emit_16(2099);
+emit_16(2033);
+emit_16(2100);
+emit_16(2034);
+emit_16(2100);
+emit_16(2033);
+emit_16(2100);
+emit_16(2034);
+emit_16(2101);
+emit_16(2035);
+emit_16(2101);
+emit_16(2034);
+emit_16(2101);
+emit_16(2035);
+emit_16(2102);
+emit_16(2036);
+emit_16(2102);
+emit_16(2035);
+emit_16(2102);
+emit_16(2036);
+emit_16(2103);
+emit_16(2037);
+emit_16(2103);
+emit_16(2036);
+emit_16(2103);
+emit_16(2037);
+emit_16(2104);
+emit_16(2038);
+emit_16(2104);
+emit_16(2037);
+emit_16(2104);
+emit_16(2038);
+emit_16(2105);
+emit_16(2039);
+emit_16(2105);
+emit_16(2038);
+emit_16(2105);
+emit_16(2039);
+emit_16(2106);
+emit_16(2040);
+emit_16(2106);
+emit_16(2039);
+emit_16(2106);
+emit_16(2040);
+emit_16(2107);
+emit_16(2041);
+emit_16(2107);
+emit_16(2040);
+emit_16(2107);
+emit_16(2041);
+emit_16(2108);
+emit_16(2042);
+emit_16(2108);
+emit_16(2041);
+emit_16(2108);
+emit_16(2042);
+emit_16(2109);
+emit_16(2043);
+emit_16(2109);
+emit_16(2042);
+emit_16(2109);
+emit_16(2043);
+emit_16(2110);
+emit_16(2044);
+emit_16(2110);
+emit_16(2043);
+emit_16(2110);
+emit_16(2044);
+emit_16(2111);
+emit_16(2045);
+emit_16(2111);
+emit_16(2044);
+emit_16(2112);
+emit_16(2046);
+emit_16(2113);
+emit_16(2047);
+emit_16(2113);
+emit_16(2046);
+emit_16(2113);
+emit_16(2047);
+emit_16(2114);
+emit_16(2048);
+emit_16(2114);
+emit_16(2047);
+emit_16(2114);
+emit_16(2048);
+emit_16(2115);
+emit_16(2049);
+emit_16(2115);
+emit_16(2048);
+emit_16(2115);
+emit_16(2049);
+emit_16(2116);
+emit_16(2050);
+emit_16(2116);
+emit_16(2049);
+emit_16(2116);
+emit_16(2050);
+emit_16(2117);
+emit_16(2051);
+emit_16(2117);
+emit_16(2050);
+emit_16(2117);
+emit_16(2051);
+emit_16(2118);
+emit_16(2052);
+emit_16(2118);
+emit_16(2051);
+emit_16(2118);
+emit_16(2052);
+emit_16(2119);
+emit_16(2053);
+emit_16(2119);
+emit_16(2052);
+emit_16(2119);
+emit_16(2053);
+emit_16(2120);
+emit_16(2054);
+emit_16(2120);
+emit_16(2053);
+emit_16(2120);
+emit_16(2054);
+emit_16(2121);
+emit_16(2055);
+emit_16(2121);
+emit_16(2054);
+emit_16(2121);
+emit_16(2055);
+emit_16(2122);
+emit_16(2056);
+emit_16(2122);
+emit_16(2055);
+emit_16(2122);
+emit_16(2056);
+emit_16(2123);
+emit_16(2057);
+emit_16(2123);
+emit_16(2056);
+emit_16(2123);
+emit_16(2057);
+emit_16(2124);
+emit_16(2058);
+emit_16(2124);
+emit_16(2057);
+emit_16(2124);
+emit_16(2058);
+emit_16(2125);
+emit_16(2059);
+emit_16(2125);
+emit_16(2058);
+emit_16(2125);
+emit_16(2059);
+emit_16(2126);
+emit_16(2060);
+emit_16(2126);
+emit_16(2059);
+emit_16(2126);
+emit_16(2060);
+emit_16(2127);
+emit_16(2061);
+emit_16(2127);
+emit_16(2060);
+emit_16(2127);
+emit_16(2061);
+emit_16(2128);
+emit_16(2062);
+emit_16(2128);
+emit_16(2061);
+emit_16(2128);
+emit_16(2062);
+emit_16(2129);
+emit_16(2063);
+emit_16(2129);
+emit_16(2062);
+emit_16(2129);
+emit_16(2063);
+emit_16(2130);
+emit_16(2064);
+emit_16(2130);
+emit_16(2063);
+emit_16(2130);
+emit_16(2064);
+emit_16(2131);
+emit_16(2065);
+emit_16(2131);
+emit_16(2064);
+emit_16(2131);
+emit_16(2065);
+emit_16(2132);
+emit_16(2066);
+emit_16(2132);
+emit_16(2065);
+emit_16(2132);
+emit_16(2066);
+emit_16(2133);
+emit_16(2067);
+emit_16(2133);
+emit_16(2066);
+emit_16(2133);
+emit_16(2067);
+emit_16(2134);
+emit_16(2068);
+emit_16(2134);
+emit_16(2067);
+emit_16(2134);
+emit_16(2068);
+emit_16(2135);
+emit_16(2069);
+emit_16(2135);
+emit_16(2068);
+emit_16(2135);
+emit_16(2069);
+emit_16(2136);
+emit_16(2070);
+emit_16(2136);
+emit_16(2069);
+emit_16(2136);
+emit_16(2070);
+emit_16(2137);
+emit_16(2071);
+emit_16(2137);
+emit_16(2070);
+emit_16(2137);
+emit_16(2071);
+emit_16(2138);
+emit_16(2072);
+emit_16(2138);
+emit_16(2071);
+emit_16(2138);
+emit_16(2072);
+emit_16(2139);
+emit_16(2073);
+emit_16(2139);
+emit_16(2072);
+emit_16(2139);
+emit_16(2073);
+emit_16(2140);
+emit_16(2074);
+emit_16(2140);
+emit_16(2073);
+emit_16(2140);
+emit_16(2074);
+emit_16(2141);
+emit_16(2075);
+emit_16(2141);
+emit_16(2074);
+emit_16(2141);
+emit_16(2075);
+emit_16(2142);
+emit_16(2076);
+emit_16(2142);
+emit_16(2075);
+emit_16(2142);
+emit_16(2076);
+emit_16(2143);
+emit_16(2077);
+emit_16(2143);
+emit_16(2076);
+emit_16(2143);
+emit_16(2077);
+emit_16(2144);
+emit_16(2078);
+emit_16(2144);
+emit_16(2077);
+emit_16(2144);
+emit_16(2078);
+emit_16(2145);
+emit_16(2079);
+emit_16(2145);
+emit_16(2078);
+emit_16(2145);
+emit_16(2079);
+emit_16(2146);
+emit_16(2080);
+emit_16(2146);
+emit_16(2079);
+emit_16(2146);
+emit_16(2080);
+emit_16(2147);
+emit_16(2081);
+emit_16(2147);
+emit_16(2080);
+emit_16(2147);
+emit_16(2081);
+emit_16(2148);
+emit_16(2082);
+emit_16(2148);
+emit_16(2081);
+emit_16(2148);
+emit_16(2082);
+emit_16(2149);
+emit_16(2083);
+emit_16(2149);
+emit_16(2082);
+emit_16(2149);
+emit_16(2083);
+emit_16(2150);
+emit_16(2084);
+emit_16(2150);
+emit_16(2083);
+emit_16(2150);
+emit_16(2084);
+emit_16(2151);
+emit_16(2085);
+emit_16(2151);
+emit_16(2084);
+emit_16(2151);
+emit_16(2085);
+emit_16(2152);
+emit_16(2086);
+emit_16(2152);
+emit_16(2085);
+emit_16(2152);
+emit_16(2086);
+emit_16(2153);
+emit_16(2087);
+emit_16(2153);
+emit_16(2086);
+emit_16(2153);
+emit_16(2087);
+emit_16(2154);
+emit_16(2088);
+emit_16(2154);
+emit_16(2087);
+emit_16(2154);
+emit_16(2088);
+emit_16(2155);
+emit_16(2089);
+emit_16(2155);
+emit_16(2088);
+emit_16(2155);
+emit_16(2089);
+emit_16(2156);
+emit_16(2090);
+emit_16(2156);
+emit_16(2089);
+emit_16(2156);
+emit_16(2090);
+emit_16(2157);
+emit_16(2091);
+emit_16(2157);
+emit_16(2090);
+emit_16(2157);
+emit_16(2091);
+emit_16(2158);
+emit_16(2092);
+emit_16(2158);
+emit_16(2091);
+emit_16(2158);
+emit_16(2092);
+emit_16(2159);
+emit_16(2093);
+emit_16(2159);
+emit_16(2092);
+emit_16(2159);
+emit_16(2093);
+emit_16(2160);
+emit_16(2094);
+emit_16(2160);
+emit_16(2093);
+emit_16(2160);
+emit_16(2094);
+emit_16(2161);
+emit_16(2095);
+emit_16(2161);
+emit_16(2094);
+emit_16(2161);
+emit_16(2095);
+emit_16(2162);
+emit_16(2096);
+emit_16(2162);
+emit_16(2095);
+emit_16(2162);
+emit_16(2096);
+emit_16(2163);
+emit_16(2097);
+emit_16(2163);
+emit_16(2096);
+emit_16(2163);
+emit_16(2097);
+emit_16(2164);
+emit_16(2098);
+emit_16(2164);
+emit_16(2097);
+emit_16(2164);
+emit_16(2098);
+emit_16(2165);
+emit_16(2099);
+emit_16(2165);
+emit_16(2098);
+emit_16(2165);
+emit_16(2099);
+emit_16(2166);
+emit_16(2100);
+emit_16(2166);
+emit_16(2099);
+emit_16(2166);
+emit_16(2100);
+emit_16(2167);
+emit_16(2101);
+emit_16(2167);
+emit_16(2100);
+emit_16(2167);
+emit_16(2101);
+emit_16(2168);
+emit_16(2102);
+emit_16(2168);
+emit_16(2101);
+emit_16(2168);
+emit_16(2102);
+emit_16(2169);
+emit_16(2103);
+emit_16(2169);
+emit_16(2102);
+emit_16(2169);
+emit_16(2103);
+emit_16(2170);
+emit_16(2104);
+emit_16(2170);
+emit_16(2103);
+emit_16(2170);
+emit_16(2104);
+emit_16(2171);
+emit_16(2105);
+emit_16(2171);
+emit_16(2104);
+emit_16(2171);
+emit_16(2105);
+emit_16(2172);
+emit_16(2106);
+emit_16(2172);
+emit_16(2105);
+emit_16(2172);
+emit_16(2106);
+emit_16(2173);
+emit_16(2107);
+emit_16(2173);
+emit_16(2106);
+emit_16(2173);
+emit_16(2107);
+emit_16(2174);
+emit_16(2108);
+emit_16(2174);
+emit_16(2107);
+emit_16(2174);
+emit_16(2108);
+emit_16(2175);
+emit_16(2109);
+emit_16(2175);
+emit_16(2108);
+emit_16(2175);
+emit_16(2109);
+emit_16(2176);
+emit_16(2110);
+emit_16(2176);
+emit_16(2109);
+emit_16(2176);
+emit_16(2110);
+emit_16(2177);
+emit_16(2111);
+emit_16(2177);
+emit_16(2110);
+emit_start(LandscapeIdxCount)
+emit_32(11718);
+emit_32(11310);
+emit_32(11718);
+emit_32(12096);
+emit_32(12870);
+emit_32(13260);
+emit_32(12852);
+emit_32(12480);
+emit_start(_ZTV14BenchmarkDemo4)
+emit_32(0);
+emit_32(_ZTI14BenchmarkDemo4);
+emit_32(_ZN15DemoApplication6myinitEv__index__);
+emit_32(_ZN15DemoApplication16getDynamicsWorldEv__index__);
+emit_32(_ZN15DemoApplication20localCreateRigidBodyEfRK11btTransformP16btCollisionShape__index__);
+emit_32(_ZN14BenchmarkDemo4D1Ev__index__);
+emit_32(_ZN14BenchmarkDemo4D0Ev__index__);
+emit_32(_ZN13BenchmarkDemo20clientMoveAndDisplayEv__index__);
+emit_32(_ZN13BenchmarkDemo15displayCallbackEv__index__);
+emit_start(_ZTI14BenchmarkDemo4)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTS14BenchmarkDemo4);
+emit_32(_ZTI13BenchmarkDemo);
+emit_start(_ZTS14BenchmarkDemo4)
+emit_string('14BenchmarkDemo4\x00');
+emit_start(_ZL14benchmarkDemo4)
+emit_32(_ZTV14BenchmarkDemo4+8);
+emit_32(0);
+emit_32(1566444395);
+emit_fill(0,1);
+emit_fill(0,3);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_8(1);
+emit_fill(0,3);
+emit_fill(0,1);
+emit_fill(0,3);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_8(1);
+emit_fill(0,3);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(4);
+emit_32(0);
+emit_32(0);
+emit_start(_ZTI21btBroadphaseInterface)
+emit_32(_ZTVN10__cxxabiv117__class_type_infoE+8);
+emit_32(_ZTS21btBroadphaseInterface);
+emit_start(_ZTS21btBroadphaseInterface)
+emit_string('21btBroadphaseInterface\x00');
+emit_start(_ZTI25btOverlappingPairCallback)
+emit_32(_ZTVN10__cxxabiv117__class_type_infoE+8);
+emit_32(_ZTS25btOverlappingPairCallback);
+emit_start(_ZTS25btOverlappingPairCallback)
+emit_string('25btOverlappingPairCallback\x00');
+emit_start(_ZTI22btOverlappingPairCache)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTS22btOverlappingPairCache);
+emit_32(_ZTI25btOverlappingPairCallback);
+emit_start(_ZTS22btOverlappingPairCache)
+emit_string('22btOverlappingPairCache\x00');
+emit_start(_ZTV15btNullPairCache)
+emit_32(0);
+emit_32(_ZTI15btNullPairCache);
+emit_32(_ZN15btNullPairCacheD1Ev__index__);
+emit_32(_ZN15btNullPairCacheD0Ev__index__);
+emit_32(_ZN15btNullPairCache18addOverlappingPairEP17btBroadphaseProxyS1___index__);
+emit_32(_ZN15btNullPairCache21removeOverlappingPairEP17btBroadphaseProxyS1_P12btDispatcher__index__);
+emit_32(_ZN15btNullPairCache37removeOverlappingPairsContainingProxyEP17btBroadphaseProxyP12btDispatcher__index__);
+emit_32(_ZN15btNullPairCache26getOverlappingPairArrayPtrEv__index__);
+emit_32(_ZNK15btNullPairCache26getOverlappingPairArrayPtrEv__index__);
+emit_32(_ZN15btNullPairCache23getOverlappingPairArrayEv__index__);
+emit_32(_ZN15btNullPairCache20cleanOverlappingPairER16btBroadphasePairP12btDispatcher__index__);
+emit_32(_ZNK15btNullPairCache22getNumOverlappingPairsEv__index__);
+emit_32(_ZN15btNullPairCache19cleanProxyFromPairsEP17btBroadphaseProxyP12btDispatcher__index__);
+emit_32(_ZN15btNullPairCache24setOverlapFilterCallbackEP23btOverlapFilterCallback__index__);
+emit_32(_ZN15btNullPairCache26processAllOverlappingPairsEP17btOverlapCallbackP12btDispatcher__index__);
+emit_32(_ZN15btNullPairCache8findPairEP17btBroadphaseProxyS1___index__);
+emit_32(_ZN15btNullPairCache18hasDeferredRemovalEv__index__);
+emit_32(_ZN15btNullPairCache28setInternalGhostPairCallbackEP25btOverlappingPairCallback__index__);
+emit_32(_ZN15btNullPairCache20sortOverlappingPairsEP12btDispatcher__index__);
+emit_start(_ZTI15btNullPairCache)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTS15btNullPairCache);
+emit_32(_ZTI22btOverlappingPairCache);
+emit_start(_ZTS15btNullPairCache)
+emit_string('15btNullPairCache\x00');
+emit_start(_2E_str11)
+emit_string('handle > 0 && handle < m_maxHandles\x00');
+emit_start(_2E_str112)
+emit_string('../../../../src/BulletCollision/BroadphaseCollision/btAxisSweep3.h\x00');
+emit_start(_2E_str213)
+emit_string('m_firstFreeHandle\x00');
+emit_start(_2E_str314)
+emit_string('!pair.m_algorithm\x00');
+emit_start(_ZTV20btAxisSweep3InternalItE)
+emit_32(0);
+emit_32(_ZTI20btAxisSweep3InternalItE);
+emit_32(_ZN20btAxisSweep3InternalItED1Ev__index__);
+emit_32(_ZN20btAxisSweep3InternalItED0Ev__index__);
+emit_32(_ZN20btAxisSweep3InternalItE11createProxyERK9btVector3S3_iPvssP12btDispatcherS4___index__);
+emit_32(_ZN20btAxisSweep3InternalItE12destroyProxyEP17btBroadphaseProxyP12btDispatcher__index__);
+emit_32(_ZN20btAxisSweep3InternalItE7setAabbEP17btBroadphaseProxyRK9btVector3S5_P12btDispatcher__index__);
+emit_32(_ZNK20btAxisSweep3InternalItE7getAabbEP17btBroadphaseProxyR9btVector3S4___index__);
+emit_32(_ZN20btAxisSweep3InternalItE7rayTestERK9btVector3S3_R23btBroadphaseRayCallbackS3_S3___index__);
+emit_32(_ZN20btAxisSweep3InternalItE8aabbTestERK9btVector3S3_R24btBroadphaseAabbCallback__index__);
+emit_32(_ZN20btAxisSweep3InternalItE25calculateOverlappingPairsEP12btDispatcher__index__);
+emit_32(_ZN20btAxisSweep3InternalItE23getOverlappingPairCacheEv__index__);
+emit_32(_ZNK20btAxisSweep3InternalItE23getOverlappingPairCacheEv__index__);
+emit_32(_ZNK20btAxisSweep3InternalItE17getBroadphaseAabbER9btVector3S2___index__);
+emit_32(_ZN20btAxisSweep3InternalItE9resetPoolEP12btDispatcher__index__);
+emit_32(_ZN20btAxisSweep3InternalItE10printStatsEv__index__);
+emit_start(_ZTI20btAxisSweep3InternalItE)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTS20btAxisSweep3InternalItE);
+emit_32(_ZTI21btBroadphaseInterface);
+emit_start(_ZTS20btAxisSweep3InternalItE)
+emit_string('20btAxisSweep3InternalItE\x00');
+emit_start(_ZTV12btAxisSweep3)
+emit_32(0);
+emit_32(_ZTI12btAxisSweep3);
+emit_32(_ZN12btAxisSweep3D1Ev__index__);
+emit_32(_ZN12btAxisSweep3D0Ev__index__);
+emit_32(_ZN20btAxisSweep3InternalItE11createProxyERK9btVector3S3_iPvssP12btDispatcherS4___index__);
+emit_32(_ZN20btAxisSweep3InternalItE12destroyProxyEP17btBroadphaseProxyP12btDispatcher__index__);
+emit_32(_ZN20btAxisSweep3InternalItE7setAabbEP17btBroadphaseProxyRK9btVector3S5_P12btDispatcher__index__);
+emit_32(_ZNK20btAxisSweep3InternalItE7getAabbEP17btBroadphaseProxyR9btVector3S4___index__);
+emit_32(_ZN20btAxisSweep3InternalItE7rayTestERK9btVector3S3_R23btBroadphaseRayCallbackS3_S3___index__);
+emit_32(_ZN20btAxisSweep3InternalItE8aabbTestERK9btVector3S3_R24btBroadphaseAabbCallback__index__);
+emit_32(_ZN20btAxisSweep3InternalItE25calculateOverlappingPairsEP12btDispatcher__index__);
+emit_32(_ZN20btAxisSweep3InternalItE23getOverlappingPairCacheEv__index__);
+emit_32(_ZNK20btAxisSweep3InternalItE23getOverlappingPairCacheEv__index__);
+emit_32(_ZNK20btAxisSweep3InternalItE17getBroadphaseAabbER9btVector3S2___index__);
+emit_32(_ZN20btAxisSweep3InternalItE9resetPoolEP12btDispatcher__index__);
+emit_32(_ZN20btAxisSweep3InternalItE10printStatsEv__index__);
+emit_start(_ZTI12btAxisSweep3)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTS12btAxisSweep3);
+emit_32(_ZTI20btAxisSweep3InternalItE);
+emit_start(_ZTS12btAxisSweep3)
+emit_string('12btAxisSweep3\x00');
+emit_start(_ZTV20btCollisionAlgorithm)
+emit_32(0);
+emit_32(_ZTI20btCollisionAlgorithm);
+emit_32(_ZN20btCollisionAlgorithmD1Ev__index__);
+emit_32(_ZN20btCollisionAlgorithmD0Ev__index__);
+emit_32(__cxa_pure_virtual__index__);
+emit_32(__cxa_pure_virtual__index__);
+emit_32(__cxa_pure_virtual__index__);
+emit_start(_ZTI20btCollisionAlgorithm)
+emit_32(_ZTVN10__cxxabiv117__class_type_infoE+8);
+emit_32(_ZTS20btCollisionAlgorithm);
+emit_start(_ZTS20btCollisionAlgorithm)
+emit_string('20btCollisionAlgorithm\x00');
+emit_start(_ZTIN6btDbvt8ICollideE)
+emit_32(_ZTVN10__cxxabiv117__class_type_infoE+8);
+emit_32(_ZTSN6btDbvt8ICollideE);
+emit_start(_ZTSN6btDbvt8ICollideE)
+emit_string('N6btDbvt8ICollideE\x00');
+emit_start(_2E_str1118)
+emit_string('../../../../src/BulletCollision/BroadphaseCollision/btDbvt.cpp\x00');
+emit_start(_2E_str22)
+emit_string('n==p->childs[i]\x00');
+emit_start(_ZTV18btDbvtTreeCollider)
+emit_32(0);
+emit_32(_ZTI18btDbvtTreeCollider);
+emit_32(_ZN18btDbvtTreeColliderD1Ev__index__);
+emit_32(_ZN18btDbvtTreeColliderD0Ev__index__);
+emit_32(_ZN18btDbvtTreeCollider7ProcessEPK10btDbvtNodeS2___index__);
+emit_32(_ZN18btDbvtTreeCollider7ProcessEPK10btDbvtNode__index__);
+emit_32(_ZN6btDbvt8ICollide7ProcessEPK10btDbvtNodef__index__);
+emit_32(_ZN6btDbvt8ICollide7DescentEPK10btDbvtNode__index__);
+emit_32(_ZN6btDbvt8ICollide9AllLeavesEPK10btDbvtNode__index__);
+emit_start(_ZTI18btDbvtTreeCollider)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTS18btDbvtTreeCollider);
+emit_32(_ZTIN6btDbvt8ICollideE);
+emit_start(_ZTS18btDbvtTreeCollider)
+emit_string('18btDbvtTreeCollider\x00');
+emit_start(_ZTV19BroadphaseRayTester)
+emit_32(0);
+emit_32(_ZTI19BroadphaseRayTester);
+emit_32(_ZN19BroadphaseRayTesterD1Ev__index__);
+emit_32(_ZN19BroadphaseRayTesterD0Ev__index__);
+emit_32(_ZN6btDbvt8ICollide7ProcessEPK10btDbvtNodeS3___index__);
+emit_32(_ZN19BroadphaseRayTester7ProcessEPK10btDbvtNode__index__);
+emit_32(_ZN6btDbvt8ICollide7ProcessEPK10btDbvtNodef__index__);
+emit_32(_ZN6btDbvt8ICollide7DescentEPK10btDbvtNode__index__);
+emit_32(_ZN6btDbvt8ICollide9AllLeavesEPK10btDbvtNode__index__);
+emit_start(_ZTI19BroadphaseRayTester)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTS19BroadphaseRayTester);
+emit_32(_ZTIN6btDbvt8ICollideE);
+emit_start(_ZTS19BroadphaseRayTester)
+emit_string('19BroadphaseRayTester\x00');
+emit_start(_ZTV20BroadphaseAabbTester)
+emit_32(0);
+emit_32(_ZTI20BroadphaseAabbTester);
+emit_32(_ZN20BroadphaseAabbTesterD1Ev__index__);
+emit_32(_ZN20BroadphaseAabbTesterD0Ev__index__);
+emit_32(_ZN6btDbvt8ICollide7ProcessEPK10btDbvtNodeS3___index__);
+emit_32(_ZN20BroadphaseAabbTester7ProcessEPK10btDbvtNode__index__);
+emit_32(_ZN6btDbvt8ICollide7ProcessEPK10btDbvtNodef__index__);
+emit_32(_ZN6btDbvt8ICollide7DescentEPK10btDbvtNode__index__);
+emit_32(_ZN6btDbvt8ICollide9AllLeavesEPK10btDbvtNode__index__);
+emit_start(_ZTI20BroadphaseAabbTester)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTS20BroadphaseAabbTester);
+emit_32(_ZTIN6btDbvt8ICollideE);
+emit_start(_ZTS20BroadphaseAabbTester)
+emit_string('20BroadphaseAabbTester\x00');
+emit_start(_2E_str18)
+emit_string('../../../../src/BulletCollision/BroadphaseCollision/btDbvtBroadphase.cpp\x00');
+emit_start(_ZTV16btDbvtBroadphase)
+emit_32(0);
+emit_32(_ZTI16btDbvtBroadphase);
+emit_32(_ZN16btDbvtBroadphaseD1Ev__index__);
+emit_32(_ZN16btDbvtBroadphaseD0Ev__index__);
+emit_32(_ZN16btDbvtBroadphase11createProxyERK9btVector3S2_iPvssP12btDispatcherS3___index__);
+emit_32(_ZN16btDbvtBroadphase12destroyProxyEP17btBroadphaseProxyP12btDispatcher__index__);
+emit_32(_ZN16btDbvtBroadphase7setAabbEP17btBroadphaseProxyRK9btVector3S4_P12btDispatcher__index__);
+emit_32(_ZNK16btDbvtBroadphase7getAabbEP17btBroadphaseProxyR9btVector3S3___index__);
+emit_32(_ZN16btDbvtBroadphase7rayTestERK9btVector3S2_R23btBroadphaseRayCallbackS2_S2___index__);
+emit_32(_ZN16btDbvtBroadphase8aabbTestERK9btVector3S2_R24btBroadphaseAabbCallback__index__);
+emit_32(_ZN16btDbvtBroadphase25calculateOverlappingPairsEP12btDispatcher__index__);
+emit_32(_ZN16btDbvtBroadphase23getOverlappingPairCacheEv__index__);
+emit_32(_ZNK16btDbvtBroadphase23getOverlappingPairCacheEv__index__);
+emit_32(_ZNK16btDbvtBroadphase17getBroadphaseAabbER9btVector3S1___index__);
+emit_32(_ZN16btDbvtBroadphase9resetPoolEP12btDispatcher__index__);
+emit_32(_ZN16btDbvtBroadphase10printStatsEv__index__);
+emit_start(_ZTI16btDbvtBroadphase)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTS16btDbvtBroadphase);
+emit_32(_ZTI21btBroadphaseInterface);
+emit_start(_ZTS16btDbvtBroadphase)
+emit_string('16btDbvtBroadphase\x00');
+emit_start(_ZTV12btDispatcher)
+emit_32(0);
+emit_32(_ZTI12btDispatcher);
+emit_32(_ZN12btDispatcherD1Ev__index__);
+emit_32(_ZN12btDispatcherD0Ev__index__);
+emit_32(__cxa_pure_virtual__index__);
+emit_32(__cxa_pure_virtual__index__);
+emit_32(__cxa_pure_virtual__index__);
+emit_32(__cxa_pure_virtual__index__);
+emit_32(__cxa_pure_virtual__index__);
+emit_32(__cxa_pure_virtual__index__);
+emit_32(__cxa_pure_virtual__index__);
+emit_32(__cxa_pure_virtual__index__);
+emit_32(__cxa_pure_virtual__index__);
+emit_32(__cxa_pure_virtual__index__);
+emit_32(__cxa_pure_virtual__index__);
+emit_32(__cxa_pure_virtual__index__);
+emit_start(_ZTI12btDispatcher)
+emit_32(_ZTVN10__cxxabiv117__class_type_infoE+8);
+emit_32(_ZTS12btDispatcher);
+emit_start(_ZTS12btDispatcher)
+emit_string('12btDispatcher\x00');
+emit_start(_ZTI21btNodeOverlapCallback)
+emit_32(_ZTVN10__cxxabiv117__class_type_infoE+8);
+emit_32(_ZTS21btNodeOverlapCallback);
+emit_start(_ZTS21btNodeOverlapCallback)
+emit_string('21btNodeOverlapCallback\x00');
+emit_start(_2E_str10)
+emit_string('0\x00');
+emit_start(_2E_str212)
+emit_string('m_useQuantization\x00');
+emit_start(_2E_str313)
+emit_string('../../../../src/BulletCollision/BroadphaseCollision/btQuantizedBvh.h\x00');
+emit_start(_2E_str414)
+emit_string('point.getX() <= m_bvhAabbMax.getX()\x00');
+emit_start(_2E_str515)
+emit_string('point.getY() <= m_bvhAabbMax.getY()\x00');
+emit_start(_2E_str616)
+emit_string('point.getZ() <= m_bvhAabbMax.getZ()\x00');
+emit_start(_2E_str717)
+emit_string('point.getX() >= m_bvhAabbMin.getX()\x00');
+emit_start(_2E_str820)
+emit_string('point.getY() >= m_bvhAabbMin.getY()\x00');
+emit_start(_2E_str9)
+emit_string('point.getZ() >= m_bvhAabbMin.getZ()\x00');
+emit_start(_ZTI17btOverlapCallback)
+emit_32(_ZTVN10__cxxabiv117__class_type_infoE+8);
+emit_32(_ZTS17btOverlapCallback);
+emit_start(_ZTS17btOverlapCallback)
+emit_string('17btOverlapCallback\x00');
+emit_start(_ZTVZN28btHashedOverlappingPairCache19cleanProxyFromPairsEP17btBroadphaseProxyP12btDispatcherE17CleanPairCallback)
+emit_32(0);
+emit_32(_ZTIZN28btHashedOverlappingPairCache19cleanProxyFromPairsEP17btBroadphaseProxyP12btDispatcherE17CleanPairCallback);
+emit_32(_ZZN28btHashedOverlappingPairCache19cleanProxyFromPairsEP17btBroadphaseProxyP12btDispatcherEN17CleanPairCallbackD1Ev__index__);
+emit_32(_ZZN28btHashedOverlappingPairCache19cleanProxyFromPairsEP17btBroadphaseProxyP12btDispatcherEN17CleanPairCallbackD0Ev__index__);
+emit_32(_ZZN28btHashedOverlappingPairCache19cleanProxyFromPairsEP17btBroadphaseProxyP12btDispatcherEN17CleanPairCallback14processOverlapER16btBroadphasePair__index__);
+emit_start(_ZTIZN28btHashedOverlappingPairCache19cleanProxyFromPairsEP17btBroadphaseProxyP12btDispatcherE17CleanPairCallback)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTSZN28btHashedOverlappingPairCache19cleanProxyFromPairsEP17btBroadphaseProxyP12btDispatcherE17CleanPairCallback);
+emit_32(_ZTI17btOverlapCallback);
+emit_start(_ZTSZN28btHashedOverlappingPairCache19cleanProxyFromPairsEP17btBroadphaseProxyP12btDispatcherE17CleanPairCallback)
+emit_string('ZN28btHashedOverlappingPairCache19cleanProxyFromPairsEP17btBroadphaseProxyP12btDispatcherE17CleanPairCallback\x00');
+emit_start(_ZTVZN28btHashedOverlappingPairCache37removeOverlappingPairsContainingProxyEP17btBroadphaseProxyP12btDispatcherE18RemovePairCallback)
+emit_32(0);
+emit_32(_ZTIZN28btHashedOverlappingPairCache37removeOverlappingPairsContainingProxyEP17btBroadphaseProxyP12btDispatcherE18RemovePairCallback);
+emit_32(_ZZN28btHashedOverlappingPairCache37removeOverlappingPairsContainingProxyEP17btBroadphaseProxyP12btDispatcherEN18RemovePairCallbackD1Ev__index__);
+emit_32(_ZZN28btHashedOverlappingPairCache37removeOverlappingPairsContainingProxyEP17btBroadphaseProxyP12btDispatcherEN18RemovePairCallbackD0Ev__index__);
+emit_32(_ZZN28btHashedOverlappingPairCache37removeOverlappingPairsContainingProxyEP17btBroadphaseProxyP12btDispatcherEN18RemovePairCallback14processOverlapER16btBroadphasePair__index__);
+emit_start(_ZTIZN28btHashedOverlappingPairCache37removeOverlappingPairsContainingProxyEP17btBroadphaseProxyP12btDispatcherE18RemovePairCallback)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTSZN28btHashedOverlappingPairCache37removeOverlappingPairsContainingProxyEP17btBroadphaseProxyP12btDispatcherE18RemovePairCallback);
+emit_32(_ZTI17btOverlapCallback);
+emit_start(_ZTSZN28btHashedOverlappingPairCache37removeOverlappingPairsContainingProxyEP17btBroadphaseProxyP12btDispatcherE18RemovePairCallback)
+emit_string('ZN28btHashedOverlappingPairCache37removeOverlappingPairsContainingProxyEP17btBroadphaseProxyP12btDispatcherE18RemovePairCallback\x00');
+emit_start(_ZTV28btHashedOverlappingPairCache)
+emit_32(0);
+emit_32(_ZTI28btHashedOverlappingPairCache);
+emit_32(_ZN28btHashedOverlappingPairCacheD1Ev__index__);
+emit_32(_ZN28btHashedOverlappingPairCacheD0Ev__index__);
+emit_32(_ZN28btHashedOverlappingPairCache18addOverlappingPairEP17btBroadphaseProxyS1___index__);
+emit_32(_ZN28btHashedOverlappingPairCache21removeOverlappingPairEP17btBroadphaseProxyS1_P12btDispatcher__index__);
+emit_32(_ZN28btHashedOverlappingPairCache37removeOverlappingPairsContainingProxyEP17btBroadphaseProxyP12btDispatcher__index__);
+emit_32(_ZN28btHashedOverlappingPairCache26getOverlappingPairArrayPtrEv__index__);
+emit_32(_ZNK28btHashedOverlappingPairCache26getOverlappingPairArrayPtrEv__index__);
+emit_32(_ZN28btHashedOverlappingPairCache23getOverlappingPairArrayEv__index__);
+emit_32(_ZN28btHashedOverlappingPairCache20cleanOverlappingPairER16btBroadphasePairP12btDispatcher__index__);
+emit_32(_ZNK28btHashedOverlappingPairCache22getNumOverlappingPairsEv__index__);
+emit_32(_ZN28btHashedOverlappingPairCache19cleanProxyFromPairsEP17btBroadphaseProxyP12btDispatcher__index__);
+emit_32(_ZN28btHashedOverlappingPairCache24setOverlapFilterCallbackEP23btOverlapFilterCallback__index__);
+emit_32(_ZN28btHashedOverlappingPairCache26processAllOverlappingPairsEP17btOverlapCallbackP12btDispatcher__index__);
+emit_32(_ZN28btHashedOverlappingPairCache8findPairEP17btBroadphaseProxyS1___index__);
+emit_32(_ZN28btHashedOverlappingPairCache18hasDeferredRemovalEv__index__);
+emit_32(_ZN28btHashedOverlappingPairCache28setInternalGhostPairCallbackEP25btOverlappingPairCallback__index__);
+emit_32(_ZN28btHashedOverlappingPairCache20sortOverlappingPairsEP12btDispatcher__index__);
+emit_start(_ZTI28btHashedOverlappingPairCache)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTS28btHashedOverlappingPairCache);
+emit_32(_ZTI22btOverlappingPairCache);
+emit_start(_ZTS28btHashedOverlappingPairCache)
+emit_string('28btHashedOverlappingPairCache\x00');
+emit_start(_2E_str121)
+emit_string('../../../../src/BulletCollision/BroadphaseCollision/btOverlappingPairCache.cpp\x00');
+emit_start(_2E_str222)
+emit_string('index < m_overlappingPairArray.size()\x00');
+emit_start(_2E_str323)
+emit_string('../../../../src/BulletCollision/BroadphaseCollision/btOverlappingPairCache.h\x00');
+emit_start(_2E_str424)
+emit_string('pair->m_pProxy0->getUid() == proxyId1\x00');
+emit_start(_2E_str525)
+emit_string('pair->m_pProxy1->getUid() == proxyId2\x00');
+emit_start(_2E_str626)
+emit_string('pairIndex < m_overlappingPairArray.size()\x00');
+emit_start(_2E_str727)
+emit_string('index != BT_NULL_PAIR\x00');
+emit_start(_2E_str32)
+emit_string('btOptimizedBvhNodeData\x00');
+emit_start(_2E_str133)
+emit_string('btQuantizedBvhNodeData\x00');
+emit_start(_2E_str234)
+emit_string('btBvhSubtreeInfoData\x00');
+emit_start(_2E_str335)
+emit_string('btQuantizedBvhFloatData\x00');
+emit_start(_ZTV14btQuantizedBvh)
+emit_32(0);
+emit_32(_ZTI14btQuantizedBvh);
+emit_32(_ZN14btQuantizedBvhD1Ev__index__);
+emit_32(_ZN14btQuantizedBvhD0Ev__index__);
+emit_32(_ZNK14btQuantizedBvh9serializeEPvjb__index__);
+emit_32(_ZNK14btQuantizedBvh31calculateSerializeBufferSizeNewEv__index__);
+emit_32(_ZNK14btQuantizedBvh9serializeEPvP12btSerializer__index__);
+emit_32(_ZN14btQuantizedBvh16deSerializeFloatER23btQuantizedBvhFloatData__index__);
+emit_32(_ZN14btQuantizedBvh17deSerializeDoubleER24btQuantizedBvhDoubleData__index__);
+emit_start(_ZTI14btQuantizedBvh)
+emit_32(_ZTVN10__cxxabiv117__class_type_infoE+8);
+emit_32(_ZTS14btQuantizedBvh);
+emit_start(_ZTS14btQuantizedBvh)
+emit_string('14btQuantizedBvh\x00');
+emit_start(_2E_str537)
+emit_string('../../../../src/BulletCollision/BroadphaseCollision/btQuantizedBvh.cpp\x00');
+emit_start(_2E_str638)
+emit_string('m_subtreeHeaderCount == m_SubtreeHeaders.size()\x00');
+emit_start(_2E_str739)
+emit_string('isLeafNode()\x00');
+emit_start(_2E_str941)
+emit_string('!isLeafNode()\x00');
+emit_start(_2E_str1143)
+emit_string('walkIterations < subTreeSize\x00');
+emit_start(_2E_str1844)
+emit_string('!m_useQuantization\x00');
+emit_start(_2E_str1921)
+emit_string('walkIterations < m_curNodeIndex\x00');
+emit_start(_2E_str21)
+emit_string('!unbal\x00');
+emit_start(_2E_str2246)
+emit_string('numIndices>0\x00');
+emit_start(_ZTV30btActivatingCollisionAlgorithm)
+emit_32(0);
+emit_32(_ZTI30btActivatingCollisionAlgorithm);
+emit_32(_ZN30btActivatingCollisionAlgorithmD1Ev__index__);
+emit_32(_ZN30btActivatingCollisionAlgorithmD0Ev__index__);
+emit_32(__cxa_pure_virtual__index__);
+emit_32(__cxa_pure_virtual__index__);
+emit_32(__cxa_pure_virtual__index__);
+emit_start(_ZTI30btActivatingCollisionAlgorithm)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTS30btActivatingCollisionAlgorithm);
+emit_32(_ZTI20btCollisionAlgorithm);
+emit_start(_ZTS30btActivatingCollisionAlgorithm)
+emit_string('30btActivatingCollisionAlgorithm\x00');
+emit_start(_2E_str59)
+emit_string('m_manifoldPtr\x00');
+emit_start(_2E_str160)
+emit_string('../../../../src/BulletCollision/CollisionDispatch/btManifoldResult.h\x00');
+emit_start(_ZTV26btBoxBoxCollisionAlgorithm)
+emit_32(0);
+emit_32(_ZTI26btBoxBoxCollisionAlgorithm);
+emit_32(_ZN26btBoxBoxCollisionAlgorithmD1Ev__index__);
+emit_32(_ZN26btBoxBoxCollisionAlgorithmD0Ev__index__);
+emit_32(_ZN26btBoxBoxCollisionAlgorithm16processCollisionEP17btCollisionObjectS1_RK16btDispatcherInfoP16btManifoldResult__index__);
+emit_32(_ZN26btBoxBoxCollisionAlgorithm21calculateTimeOfImpactEP17btCollisionObjectS1_RK16btDispatcherInfoP16btManifoldResult__index__);
+emit_32(_ZN26btBoxBoxCollisionAlgorithm22getAllContactManifoldsER20btAlignedObjectArrayIP20btPersistentManifoldE__index__);
+emit_start(_ZTI26btBoxBoxCollisionAlgorithm)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTS26btBoxBoxCollisionAlgorithm);
+emit_32(_ZTI30btActivatingCollisionAlgorithm);
+emit_start(_ZTS26btBoxBoxCollisionAlgorithm)
+emit_string('26btBoxBoxCollisionAlgorithm\x00');
+emit_start(_ZTI36btDiscreteCollisionDetectorInterface)
+emit_32(_ZTVN10__cxxabiv117__class_type_infoE+8);
+emit_32(_ZTS36btDiscreteCollisionDetectorInterface);
+emit_start(_ZTS36btDiscreteCollisionDetectorInterface)
+emit_string('36btDiscreteCollisionDetectorInterface\x00');
+emit_start(_ZTV16btBoxBoxDetector)
+emit_32(0);
+emit_32(_ZTI16btBoxBoxDetector);
+emit_32(_ZN16btBoxBoxDetectorD1Ev__index__);
+emit_32(_ZN16btBoxBoxDetectorD0Ev__index__);
+emit_32(_ZN16btBoxBoxDetector16getClosestPointsERKN36btDiscreteCollisionDetectorInterface17ClosestPointInputERNS0_6ResultEP12btIDebugDrawb__index__);
+emit_start(_ZTI16btBoxBoxDetector)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTS16btBoxBoxDetector);
+emit_32(_ZTI36btDiscreteCollisionDetectorInterface);
+emit_start(_ZTS16btBoxBoxDetector)
+emit_string('16btBoxBoxDetector\x00');
+emit_start(_2E_str65)
+emit_string('*iret != i0\x00');
+emit_start(_2E_str166)
+emit_string('../../../../src/BulletCollision/CollisionDispatch/btBoxBoxDetector.cpp\x00');
+emit_start(_ZTIN36btDiscreteCollisionDetectorInterface6ResultE)
+emit_32(_ZTVN10__cxxabiv117__class_type_infoE+8);
+emit_32(_ZTSN36btDiscreteCollisionDetectorInterface6ResultE);
+emit_start(_ZTSN36btDiscreteCollisionDetectorInterface6ResultE)
+emit_string('N36btDiscreteCollisionDetectorInterface6ResultE\x00');
+emit_start(_ZTV23btCollisionPairCallback)
+emit_32(0);
+emit_32(_ZTI23btCollisionPairCallback);
+emit_32(_ZN23btCollisionPairCallbackD1Ev__index__);
+emit_32(_ZN23btCollisionPairCallbackD0Ev__index__);
+emit_32(_ZN23btCollisionPairCallback14processOverlapER16btBroadphasePair__index__);
+emit_start(_ZTI23btCollisionPairCallback)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTS23btCollisionPairCallback);
+emit_32(_ZTI17btOverlapCallback);
+emit_start(_ZTS23btCollisionPairCallback)
+emit_string('23btCollisionPairCallback\x00');
+emit_start(_2E_str169)
+emit_string('../../../../src/LinearMath/btPoolAllocator.h\x00');
+emit_start(_2E_str270)
+emit_string('!size || size<=m_elemSize\x00');
+emit_start(_2E_str371)
+emit_string('m_freeCount>0\x00');
+emit_start(_2E_str472)
+emit_string('findIndex < m_manifoldsPtr.size()\x00');
+emit_start(_2E_str573)
+emit_string('../../../../src/BulletCollision/CollisionDispatch/btCollisionDispatcher.cpp\x00');
+emit_start(_ZTV21btCollisionDispatcher)
+emit_32(0);
+emit_32(_ZTI21btCollisionDispatcher);
+emit_32(_ZN21btCollisionDispatcherD1Ev__index__);
+emit_32(_ZN21btCollisionDispatcherD0Ev__index__);
+emit_32(_ZN21btCollisionDispatcher13findAlgorithmEP17btCollisionObjectS1_P20btPersistentManifold__index__);
+emit_32(_ZN21btCollisionDispatcher14getNewManifoldEPvS0___index__);
+emit_32(_ZN21btCollisionDispatcher15releaseManifoldEP20btPersistentManifold__index__);
+emit_32(_ZN21btCollisionDispatcher13clearManifoldEP20btPersistentManifold__index__);
+emit_32(_ZN21btCollisionDispatcher14needsCollisionEP17btCollisionObjectS1___index__);
+emit_32(_ZN21btCollisionDispatcher13needsResponseEP17btCollisionObjectS1___index__);
+emit_32(_ZN21btCollisionDispatcher25dispatchAllCollisionPairsEP22btOverlappingPairCacheRK16btDispatcherInfoP12btDispatcher__index__);
+emit_32(_ZNK21btCollisionDispatcher15getNumManifoldsEv__index__);
+emit_32(_ZN21btCollisionDispatcher26getManifoldByIndexInternalEi__index__);
+emit_32(_ZN21btCollisionDispatcher26getInternalManifoldPointerEv__index__);
+emit_32(_ZN21btCollisionDispatcher26allocateCollisionAlgorithmEi__index__);
+emit_32(_ZN21btCollisionDispatcher22freeCollisionAlgorithmEPv__index__);
+emit_start(_ZTI21btCollisionDispatcher)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTS21btCollisionDispatcher);
+emit_32(_ZTI12btDispatcher);
+emit_start(_ZTS21btCollisionDispatcher)
+emit_string('21btCollisionDispatcher\x00');
+emit_start(_2E_str674)
+emit_string('m_doubleDispatch[i][j]\x00');
+emit_start(_2E_str775)
+emit_string('body0\x00');
+emit_start(_2E_str876)
+emit_string('body1\x00');
+emit_start(_2E_str977)
+emit_string('warning btCollisionDispatcher::needsCollision: static-static collision!\x0a\x00');
+emit_start(_ZTV17btCollisionObject)
+emit_32(0);
+emit_32(_ZTI17btCollisionObject);
+emit_32(_ZN17btCollisionObject24checkCollideWithOverrideEPS___index__);
+emit_32(_ZN17btCollisionObjectD1Ev__index__);
+emit_32(_ZN17btCollisionObjectD0Ev__index__);
+emit_32(_ZN17btCollisionObject17setCollisionShapeEP16btCollisionShape__index__);
+emit_32(_ZNK17btCollisionObject28calculateSerializeBufferSizeEv__index__);
+emit_32(_ZNK17btCollisionObject9serializeEPvP12btSerializer__index__);
+emit_32(_ZNK17btCollisionObject21serializeSingleObjectEP12btSerializer__index__);
+emit_start(_ZTI17btCollisionObject)
+emit_32(_ZTVN10__cxxabiv117__class_type_infoE+8);
+emit_32(_ZTS17btCollisionObject);
+emit_start(_ZTS17btCollisionObject)
+emit_string('17btCollisionObject\x00');
+emit_start(_2E_str78)
+emit_string('btCollisionObjectFloatData\x00');
+emit_start(_ZTIN16btCollisionWorld20ConvexResultCallbackE)
+emit_32(_ZTVN10__cxxabiv117__class_type_infoE+8);
+emit_32(_ZTSN16btCollisionWorld20ConvexResultCallbackE);
+emit_start(_ZTSN16btCollisionWorld20ConvexResultCallbackE)
+emit_string('N16btCollisionWorld20ConvexResultCallbackE\x00');
+emit_start(_ZTI30btConvexPenetrationDepthSolver)
+emit_32(_ZTVN10__cxxabiv117__class_type_infoE+8);
+emit_32(_ZTS30btConvexPenetrationDepthSolver);
+emit_start(_ZTS30btConvexPenetrationDepthSolver)
+emit_string('30btConvexPenetrationDepthSolver\x00');
+emit_start(_ZTVN12btConvexCast10CastResultE)
+emit_32(0);
+emit_32(_ZTIN12btConvexCast10CastResultE);
+emit_32(_ZN12btConvexCast10CastResult9DebugDrawEf__index__);
+emit_32(_ZN12btConvexCast10CastResult15drawCoordSystemERK11btTransform__index__);
+emit_32(_ZN12btConvexCast10CastResultD1Ev__index__);
+emit_32(_ZN12btConvexCast10CastResultD0Ev__index__);
+emit_start(_ZTIN12btConvexCast10CastResultE)
+emit_32(_ZTVN10__cxxabiv117__class_type_infoE+8);
+emit_32(_ZTSN12btConvexCast10CastResultE);
+emit_start(_ZTSN12btConvexCast10CastResultE)
+emit_string('N12btConvexCast10CastResultE\x00');
+emit_start(_ZTVZN16btCollisionWorld13rayTestSingleERK11btTransformS2_P17btCollisionObjectPK16btCollisionShapeS2_RNS_17RayResultCallbackEE15LocalInfoAdder2)
+emit_32(0);
+emit_32(_ZTIZN16btCollisionWorld13rayTestSingleERK11btTransformS2_P17btCollisionObjectPK16btCollisionShapeS2_RNS_17RayResultCallbackEE15LocalInfoAdder2);
+emit_32(_ZZN16btCollisionWorld13rayTestSingleERK11btTransformS2_P17btCollisionObjectPK16btCollisionShapeS2_RNS_17RayResultCallbackEEN15LocalInfoAdder2D1Ev__index__);
+emit_32(_ZZN16btCollisionWorld13rayTestSingleERK11btTransformS2_P17btCollisionObjectPK16btCollisionShapeS2_RNS_17RayResultCallbackEEN15LocalInfoAdder2D0Ev__index__);
+emit_32(_ZNK16btCollisionWorld17RayResultCallback14needsCollisionEP17btBroadphaseProxy__index__);
+emit_32(_ZZN16btCollisionWorld13rayTestSingleERK11btTransformS2_P17btCollisionObjectPK16btCollisionShapeS2_RNS_17RayResultCallbackEEN15LocalInfoAdder215addSingleResultERNS_14LocalRayResultEb__index__);
+emit_start(_ZTIZN16btCollisionWorld13rayTestSingleERK11btTransformS2_P17btCollisionObjectPK16btCollisionShapeS2_RNS_17RayResultCallbackEE15LocalInfoAdder2)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTSZN16btCollisionWorld13rayTestSingleERK11btTransformS2_P17btCollisionObjectPK16btCollisionShapeS2_RNS_17RayResultCallbackEE15LocalInfoAdder2);
+emit_32(_ZTIN16btCollisionWorld17RayResultCallbackE);
+emit_start(_ZTSZN16btCollisionWorld13rayTestSingleERK11btTransformS2_P17btCollisionObjectPK16btCollisionShapeS2_RNS_17RayResultCallbackEE15LocalInfoAdder2)
+emit_string('ZN16btCollisionWorld13rayTestSingleERK11btTransformS2_P17btCollisionObjectPK16btCollisionShapeS2_RNS_17RayResultCallbackEE15LocalInfoAdder2\x00');
+emit_start(_ZTVZN16btCollisionWorld17objectQuerySingleEPK13btConvexShapeRK11btTransformS5_P17btCollisionObjectPK16btCollisionShapeS5_RNS_20ConvexResultCallbackEfE14LocalInfoAdder)
+emit_32(0);
+emit_32(_ZTIZN16btCollisionWorld17objectQuerySingleEPK13btConvexShapeRK11btTransformS5_P17btCollisionObjectPK16btCollisionShapeS5_RNS_20ConvexResultCallbackEfE14LocalInfoAdder);
+emit_32(_ZZN16btCollisionWorld17objectQuerySingleEPK13btConvexShapeRK11btTransformS5_P17btCollisionObjectPK16btCollisionShapeS5_RNS_20ConvexResultCallbackEfEN14LocalInfoAdderD1Ev__index__);
+emit_32(_ZZN16btCollisionWorld17objectQuerySingleEPK13btConvexShapeRK11btTransformS5_P17btCollisionObjectPK16btCollisionShapeS5_RNS_20ConvexResultCallbackEfEN14LocalInfoAdderD0Ev__index__);
+emit_32(_ZNK16btCollisionWorld20ConvexResultCallback14needsCollisionEP17btBroadphaseProxy__index__);
+emit_32(_ZZN16btCollisionWorld17objectQuerySingleEPK13btConvexShapeRK11btTransformS5_P17btCollisionObjectPK16btCollisionShapeS5_RNS_20ConvexResultCallbackEfEN14LocalInfoAdder15addSingleResultERNS_17LocalConvexResultEb__index__);
+emit_start(_ZTIZN16btCollisionWorld17objectQuerySingleEPK13btConvexShapeRK11btTransformS5_P17btCollisionObjectPK16btCollisionShapeS5_RNS_20ConvexResultCallbackEfE14LocalInfoAdder)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTSZN16btCollisionWorld17objectQuerySingleEPK13btConvexShapeRK11btTransformS5_P17btCollisionObjectPK16btCollisionShapeS5_RNS_20ConvexResultCallbackEfE14LocalInfoAdder);
+emit_32(_ZTIN16btCollisionWorld20ConvexResultCallbackE);
+emit_start(_ZTSZN16btCollisionWorld17objectQuerySingleEPK13btConvexShapeRK11btTransformS5_P17btCollisionObjectPK16btCollisionShapeS5_RNS_20ConvexResultCallbackEfE14LocalInfoAdder)
+emit_string('ZN16btCollisionWorld17objectQuerySingleEPK13btConvexShapeRK11btTransformS5_P17btCollisionObjectPK16btCollisionShapeS5_RNS_20ConvexResultCallbackEfE14LocalInfoAdder\x00');
+emit_start(_ZTI24btBroadphaseAabbCallback)
+emit_32(_ZTVN10__cxxabiv117__class_type_infoE+8);
+emit_32(_ZTS24btBroadphaseAabbCallback);
+emit_start(_ZTS24btBroadphaseAabbCallback)
+emit_string('24btBroadphaseAabbCallback\x00');
+emit_start(_ZTI23btBroadphaseRayCallback)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTS23btBroadphaseRayCallback);
+emit_32(_ZTI24btBroadphaseAabbCallback);
+emit_start(_ZTS23btBroadphaseRayCallback)
+emit_string('23btBroadphaseRayCallback\x00');
+emit_start(_ZTV17DebugDrawcallback)
+emit_32(0);
+emit_32(_ZTI17DebugDrawcallback);
+emit_32(_ZN17DebugDrawcallbackD1Ev__index__);
+emit_32(_ZN17DebugDrawcallbackD0Ev__index__);
+emit_32(_ZN17DebugDrawcallback15processTriangleEP9btVector3ii__index__);
+emit_32(_ZN17DebugDrawcallback28internalProcessTriangleIndexEP9btVector3ii__index__);
+emit_32(4294967292);
+emit_32(_ZTI17DebugDrawcallback);
+emit_32(_ZThn4_N17DebugDrawcallbackD1Ev__index__);
+emit_32(_ZThn4_N17DebugDrawcallbackD0Ev__index__);
+emit_32(_ZThn4_N17DebugDrawcallback28internalProcessTriangleIndexEP9btVector3ii__index__);
+emit_start(_ZTI17DebugDrawcallback)
+emit_32(_ZTVN10__cxxabiv121__vmi_class_type_infoE+8);
+emit_32(_ZTS17DebugDrawcallback);
+emit_32(0);
+emit_32(2);
+emit_32(_ZTI18btTriangleCallback);
+emit_32(2);
+emit_32(_ZTI31btInternalTriangleIndexCallback);
+emit_32(1026);
+emit_start(_ZTS17DebugDrawcallback)
+emit_string('17DebugDrawcallback\x00');
+emit_start(_ZTI18btTriangleCallback)
+emit_32(_ZTVN10__cxxabiv117__class_type_infoE+8);
+emit_32(_ZTS18btTriangleCallback);
+emit_start(_ZTS18btTriangleCallback)
+emit_string('18btTriangleCallback\x00');
+emit_start(_ZTI31btInternalTriangleIndexCallback)
+emit_32(_ZTVN10__cxxabiv117__class_type_infoE+8);
+emit_32(_ZTS31btInternalTriangleIndexCallback);
+emit_start(_ZTS31btInternalTriangleIndexCallback)
+emit_string('31btInternalTriangleIndexCallback\x00');
+emit_start(_ZTV16btCollisionWorld)
+emit_32(0);
+emit_32(_ZTI16btCollisionWorld);
+emit_32(_ZN16btCollisionWorldD1Ev__index__);
+emit_32(_ZN16btCollisionWorldD0Ev__index__);
+emit_32(_ZN16btCollisionWorld11updateAabbsEv__index__);
+emit_32(_ZN16btCollisionWorld14setDebugDrawerEP12btIDebugDraw__index__);
+emit_32(_ZN16btCollisionWorld14getDebugDrawerEv__index__);
+emit_32(_ZN16btCollisionWorld14debugDrawWorldEv__index__);
+emit_32(_ZN16btCollisionWorld15debugDrawObjectERK11btTransformPK16btCollisionShapeRK9btVector3__index__);
+emit_32(_ZNK16btCollisionWorld7rayTestERK9btVector3S2_RNS_17RayResultCallbackE__index__);
+emit_32(_ZN16btCollisionWorld18addCollisionObjectEP17btCollisionObjectss__index__);
+emit_32(_ZN16btCollisionWorld21removeCollisionObjectEP17btCollisionObject__index__);
+emit_32(_ZN16btCollisionWorld33performDiscreteCollisionDetectionEv__index__);
+emit_32(_ZN16btCollisionWorld9serializeEP12btSerializer__index__);
+emit_start(_ZTI16btCollisionWorld)
+emit_32(_ZTVN10__cxxabiv117__class_type_infoE+8);
+emit_32(_ZTS16btCollisionWorld);
+emit_start(_ZTS16btCollisionWorld)
+emit_string('16btCollisionWorld\x00');
+emit_start(_ZTI16btManifoldResult)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTS16btManifoldResult);
+emit_32(_ZTIN36btDiscreteCollisionDetectorInterface6ResultE);
+emit_start(_ZTS16btManifoldResult)
+emit_string('16btManifoldResult\x00');
+emit_start(_ZTV21btSingleSweepCallback)
+emit_32(0);
+emit_32(_ZTI21btSingleSweepCallback);
+emit_32(_ZN21btSingleSweepCallbackD1Ev__index__);
+emit_32(_ZN21btSingleSweepCallbackD0Ev__index__);
+emit_32(_ZN21btSingleSweepCallback7processEPK17btBroadphaseProxy__index__);
+emit_start(_ZTI21btSingleSweepCallback)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTS21btSingleSweepCallback);
+emit_32(_ZTI23btBroadphaseRayCallback);
+emit_start(_ZTS21btSingleSweepCallback)
+emit_string('21btSingleSweepCallback\x00');
+emit_start(_ZTV19btSingleRayCallback)
+emit_32(0);
+emit_32(_ZTI19btSingleRayCallback);
+emit_32(_ZN19btSingleRayCallbackD1Ev__index__);
+emit_32(_ZN19btSingleRayCallbackD0Ev__index__);
+emit_32(_ZN19btSingleRayCallback7processEPK17btBroadphaseProxy__index__);
+emit_start(_ZTI19btSingleRayCallback)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTS19btSingleRayCallback);
+emit_32(_ZTI23btBroadphaseRayCallback);
+emit_start(_ZTS19btSingleRayCallback)
+emit_string('19btSingleRayCallback\x00');
+emit_start(_2E_str382)
+emit_string('index < m_cachedPoints\x00');
+emit_start(_2E_str483)
+emit_string('../../../../src/BulletCollision/NarrowPhaseCollision/btPersistentManifold.h\x00');
+emit_start(_2E_str584)
+emit_string('s != btScalar(0.0)\x00');
+emit_start(_2E_str685)
+emit_string('../../../../src/LinearMath/btQuaternion.h\x00');
+emit_start(_2E_str786)
+emit_string('collisionObject\x00');
+emit_start(_2E_str887)
+emit_string('../../../../src/BulletCollision/CollisionDispatch/btCollisionWorld.cpp\x00');
+emit_start(_2E_str988)
+emit_string('m_collisionObjects.findLinearSearch(collisionObject) == m_collisionObjects.size()\x00');
+emit_start(_ZTVZN16btCollisionWorld17objectQuerySingleEPK13btConvexShapeRK11btTransformS5_P17btCollisionObjectPK16btCollisionShapeS5_RNS_20ConvexResultCallbackEfE32BridgeTriangleConvexcastCallback_0)
+emit_32(0);
+emit_32(_ZTIZN16btCollisionWorld17objectQuerySingleEPK13btConvexShapeRK11btTransformS5_P17btCollisionObjectPK16btCollisionShapeS5_RNS_20ConvexResultCallbackEfE32BridgeTriangleConvexcastCallback_0);
+emit_32(_ZZN16btCollisionWorld17objectQuerySingleEPK13btConvexShapeRK11btTransformS5_P17btCollisionObjectPK16btCollisionShapeS5_RNS_20ConvexResultCallbackEfEN32BridgeTriangleConvexcastCallbackD1E_0v__index__);
+emit_32(_ZZN16btCollisionWorld17objectQuerySingleEPK13btConvexShapeRK11btTransformS5_P17btCollisionObjectPK16btCollisionShapeS5_RNS_20ConvexResultCallbackEfEN32BridgeTriangleConvexcastCallbackD0E_0v__index__);
+emit_32(_ZN28btTriangleConvexcastCallback15processTriangleEP9btVector3ii__index__);
+emit_32(_ZZN16btCollisionWorld17objectQuerySingleEPK13btConvexShapeRK11btTransformS5_P17btCollisionObjectPK16btCollisionShapeS5_RNS_20ConvexResultCallbackEfEN32BridgeTriangleConvexcastCallback9reportHitE_0RK9btVector3SG_fii__index__);
+emit_start(_ZTIZN16btCollisionWorld17objectQuerySingleEPK13btConvexShapeRK11btTransformS5_P17btCollisionObjectPK16btCollisionShapeS5_RNS_20ConvexResultCallbackEfE32BridgeTriangleConvexcastCallback_0)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTSZN16btCollisionWorld17objectQuerySingleEPK13btConvexShapeRK11btTransformS5_P17btCollisionObjectPK16btCollisionShapeS5_RNS_20ConvexResultCallbackEfE32BridgeTriangleConvexcastCallback_0);
+emit_32(_ZTI28btTriangleConvexcastCallback);
+emit_start(_ZTSZN16btCollisionWorld17objectQuerySingleEPK13btConvexShapeRK11btTransformS5_P17btCollisionObjectPK16btCollisionShapeS5_RNS_20ConvexResultCallbackEfE32BridgeTriangleConvexcastCallback_0)
+emit_string('ZN16btCollisionWorld17objectQuerySingleEPK13btConvexShapeRK11btTransformS5_P17btCollisionObjectPK16btCollisionShapeS5_RNS_20ConvexResultCallbackEfE32BridgeTriangleConvexcastCallback_0\x00');
+emit_start(_ZTI28btTriangleConvexcastCallback)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTS28btTriangleConvexcastCallback);
+emit_32(_ZTI18btTriangleCallback);
+emit_start(_ZTS28btTriangleConvexcastCallback)
+emit_string('28btTriangleConvexcastCallback\x00');
+emit_start(_ZTVZN16btCollisionWorld17objectQuerySingleEPK13btConvexShapeRK11btTransformS5_P17btCollisionObjectPK16btCollisionShapeS5_RNS_20ConvexResultCallbackEfE32BridgeTriangleConvexcastCallback)
+emit_32(0);
+emit_32(_ZTIZN16btCollisionWorld17objectQuerySingleEPK13btConvexShapeRK11btTransformS5_P17btCollisionObjectPK16btCollisionShapeS5_RNS_20ConvexResultCallbackEfE32BridgeTriangleConvexcastCallback);
+emit_32(_ZZN16btCollisionWorld17objectQuerySingleEPK13btConvexShapeRK11btTransformS5_P17btCollisionObjectPK16btCollisionShapeS5_RNS_20ConvexResultCallbackEfEN32BridgeTriangleConvexcastCallbackD1Ev__index__);
+emit_32(_ZZN16btCollisionWorld17objectQuerySingleEPK13btConvexShapeRK11btTransformS5_P17btCollisionObjectPK16btCollisionShapeS5_RNS_20ConvexResultCallbackEfEN32BridgeTriangleConvexcastCallbackD0Ev__index__);
+emit_32(_ZN28btTriangleConvexcastCallback15processTriangleEP9btVector3ii__index__);
+emit_32(_ZZN16btCollisionWorld17objectQuerySingleEPK13btConvexShapeRK11btTransformS5_P17btCollisionObjectPK16btCollisionShapeS5_RNS_20ConvexResultCallbackEfEN32BridgeTriangleConvexcastCallback9reportHitERK9btVector3SG_fii__index__);
+emit_start(_ZTIZN16btCollisionWorld17objectQuerySingleEPK13btConvexShapeRK11btTransformS5_P17btCollisionObjectPK16btCollisionShapeS5_RNS_20ConvexResultCallbackEfE32BridgeTriangleConvexcastCallback)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTSZN16btCollisionWorld17objectQuerySingleEPK13btConvexShapeRK11btTransformS5_P17btCollisionObjectPK16btCollisionShapeS5_RNS_20ConvexResultCallbackEfE32BridgeTriangleConvexcastCallback);
+emit_32(_ZTI28btTriangleConvexcastCallback);
+emit_start(_ZTSZN16btCollisionWorld17objectQuerySingleEPK13btConvexShapeRK11btTransformS5_P17btCollisionObjectPK16btCollisionShapeS5_RNS_20ConvexResultCallbackEfE32BridgeTriangleConvexcastCallback)
+emit_string('ZN16btCollisionWorld17objectQuerySingleEPK13btConvexShapeRK11btTransformS5_P17btCollisionObjectPK16btCollisionShapeS5_RNS_20ConvexResultCallbackEfE32BridgeTriangleConvexcastCallback\x00');
+emit_start(_ZTVZN16btCollisionWorld13rayTestSingleERK11btTransformS2_P17btCollisionObjectPK16btCollisionShapeS2_RNS_17RayResultCallbackEE29BridgeTriangleRaycastCallback_0)
+emit_32(0);
+emit_32(_ZTIZN16btCollisionWorld13rayTestSingleERK11btTransformS2_P17btCollisionObjectPK16btCollisionShapeS2_RNS_17RayResultCallbackEE29BridgeTriangleRaycastCallback_0);
+emit_32(_ZZN16btCollisionWorld13rayTestSingleERK11btTransformS2_P17btCollisionObjectPK16btCollisionShapeS2_RNS_17RayResultCallbackEEN29BridgeTriangleRaycastCallbackD1E_0v__index__);
+emit_32(_ZZN16btCollisionWorld13rayTestSingleERK11btTransformS2_P17btCollisionObjectPK16btCollisionShapeS2_RNS_17RayResultCallbackEEN29BridgeTriangleRaycastCallbackD0E_0v__index__);
+emit_32(_ZN25btTriangleRaycastCallback15processTriangleEP9btVector3ii__index__);
+emit_32(_ZZN16btCollisionWorld13rayTestSingleERK11btTransformS2_P17btCollisionObjectPK16btCollisionShapeS2_RNS_17RayResultCallbackEEN29BridgeTriangleRaycastCallback9reportHitE_0RK9btVector3fii__index__);
+emit_start(_ZTIZN16btCollisionWorld13rayTestSingleERK11btTransformS2_P17btCollisionObjectPK16btCollisionShapeS2_RNS_17RayResultCallbackEE29BridgeTriangleRaycastCallback_0)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTSZN16btCollisionWorld13rayTestSingleERK11btTransformS2_P17btCollisionObjectPK16btCollisionShapeS2_RNS_17RayResultCallbackEE29BridgeTriangleRaycastCallback_0);
+emit_32(_ZTI25btTriangleRaycastCallback);
+emit_start(_ZTSZN16btCollisionWorld13rayTestSingleERK11btTransformS2_P17btCollisionObjectPK16btCollisionShapeS2_RNS_17RayResultCallbackEE29BridgeTriangleRaycastCallback_0)
+emit_string('ZN16btCollisionWorld13rayTestSingleERK11btTransformS2_P17btCollisionObjectPK16btCollisionShapeS2_RNS_17RayResultCallbackEE29BridgeTriangleRaycastCallback_0\x00');
+emit_start(_ZTI25btTriangleRaycastCallback)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTS25btTriangleRaycastCallback);
+emit_32(_ZTI18btTriangleCallback);
+emit_start(_ZTS25btTriangleRaycastCallback)
+emit_string('25btTriangleRaycastCallback\x00');
+emit_start(_ZTVZN16btCollisionWorld13rayTestSingleERK11btTransformS2_P17btCollisionObjectPK16btCollisionShapeS2_RNS_17RayResultCallbackEE29BridgeTriangleRaycastCallback)
+emit_32(0);
+emit_32(_ZTIZN16btCollisionWorld13rayTestSingleERK11btTransformS2_P17btCollisionObjectPK16btCollisionShapeS2_RNS_17RayResultCallbackEE29BridgeTriangleRaycastCallback);
+emit_32(_ZZN16btCollisionWorld13rayTestSingleERK11btTransformS2_P17btCollisionObjectPK16btCollisionShapeS2_RNS_17RayResultCallbackEEN29BridgeTriangleRaycastCallbackD1Ev__index__);
+emit_32(_ZZN16btCollisionWorld13rayTestSingleERK11btTransformS2_P17btCollisionObjectPK16btCollisionShapeS2_RNS_17RayResultCallbackEEN29BridgeTriangleRaycastCallbackD0Ev__index__);
+emit_32(_ZN25btTriangleRaycastCallback15processTriangleEP9btVector3ii__index__);
+emit_32(_ZZN16btCollisionWorld13rayTestSingleERK11btTransformS2_P17btCollisionObjectPK16btCollisionShapeS2_RNS_17RayResultCallbackEEN29BridgeTriangleRaycastCallback9reportHitERK9btVector3fii__index__);
+emit_start(_ZTIZN16btCollisionWorld13rayTestSingleERK11btTransformS2_P17btCollisionObjectPK16btCollisionShapeS2_RNS_17RayResultCallbackEE29BridgeTriangleRaycastCallback)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTSZN16btCollisionWorld13rayTestSingleERK11btTransformS2_P17btCollisionObjectPK16btCollisionShapeS2_RNS_17RayResultCallbackEE29BridgeTriangleRaycastCallback);
+emit_32(_ZTI25btTriangleRaycastCallback);
+emit_start(_ZTSZN16btCollisionWorld13rayTestSingleERK11btTransformS2_P17btCollisionObjectPK16btCollisionShapeS2_RNS_17RayResultCallbackEE29BridgeTriangleRaycastCallback)
+emit_string('ZN16btCollisionWorld13rayTestSingleERK11btTransformS2_P17btCollisionObjectPK16btCollisionShapeS2_RNS_17RayResultCallbackEE29BridgeTriangleRaycastCallback\x00');
+emit_start(_2E_str1089)
+emit_string('convexSweepTest\x00');
+emit_start(_2E_str1190)
+emit_string('performDiscreteCollisionDetection\x00');
+emit_start(_2E_str1291)
+emit_string('calculateOverlappingPairs\x00');
+emit_start(_2E_str1392)
+emit_string('dispatchAllCollisionPairs\x00');
+emit_start(_2E_str1493)
+emit_string('convexSweepCompound\x00');
+emit_start(_2E_str1594)
+emit_string('Overflow in AABB, object removed from simulation\x00');
+emit_start(_2E_str1695)
+emit_string('If you can reproduce this, please email bugs@continuousphysics.com\x0a\x00');
+emit_start(_2E_str1796)
+emit_string('Please include above information, your Platform, version of OS.\x0a\x00');
+emit_start(_2E_str1897)
+emit_string('Thanks.\x0a\x00');
+emit_start(_2E_str1998)
+emit_string('updateAabbs\x00');
+emit_start(_ZTV22btCompoundLeafCallback)
+emit_32(0);
+emit_32(_ZTI22btCompoundLeafCallback);
+emit_32(_ZN22btCompoundLeafCallbackD1Ev__index__);
+emit_32(_ZN22btCompoundLeafCallbackD0Ev__index__);
+emit_32(_ZN6btDbvt8ICollide7ProcessEPK10btDbvtNodeS3___index__);
+emit_32(_ZN22btCompoundLeafCallback7ProcessEPK10btDbvtNode__index__);
+emit_32(_ZN6btDbvt8ICollide7ProcessEPK10btDbvtNodef__index__);
+emit_32(_ZN6btDbvt8ICollide7DescentEPK10btDbvtNode__index__);
+emit_32(_ZN6btDbvt8ICollide9AllLeavesEPK10btDbvtNode__index__);
+emit_start(_ZTI22btCompoundLeafCallback)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTS22btCompoundLeafCallback);
+emit_32(_ZTIN6btDbvt8ICollideE);
+emit_start(_ZTS22btCompoundLeafCallback)
+emit_string('22btCompoundLeafCallback\x00');
+emit_start(_2E_str99)
+emit_string('colObj->getCollisionShape()->isCompound()\x00');
+emit_start(_2E_str1100)
+emit_string('../../../../src/BulletCollision/CollisionDispatch/btCompoundCollisionAlgorithm.cpp\x00');
+emit_start(_2E_str2101)
+emit_string('localAabbMin.getX() <= localAabbMax.getX()\x00');
+emit_start(_2E_str3102)
+emit_string('../../../../src/LinearMath/btAabbUtil2.h\x00');
+emit_start(_2E_str4103)
+emit_string('localAabbMin.getY() <= localAabbMax.getY()\x00');
+emit_start(_2E_str5104)
+emit_string('localAabbMin.getZ() <= localAabbMax.getZ()\x00');
+emit_start(_2E_str6105)
+emit_string('index>=0\x00');
+emit_start(_2E_str7106)
+emit_string('index<compoundShape->getNumChildShapes()\x00');
+emit_start(_ZTV28btCompoundCollisionAlgorithm)
+emit_32(0);
+emit_32(_ZTI28btCompoundCollisionAlgorithm);
+emit_32(_ZN28btCompoundCollisionAlgorithmD1Ev__index__);
+emit_32(_ZN28btCompoundCollisionAlgorithmD0Ev__index__);
+emit_32(_ZN28btCompoundCollisionAlgorithm16processCollisionEP17btCollisionObjectS1_RK16btDispatcherInfoP16btManifoldResult__index__);
+emit_32(_ZN28btCompoundCollisionAlgorithm21calculateTimeOfImpactEP17btCollisionObjectS1_RK16btDispatcherInfoP16btManifoldResult__index__);
+emit_32(_ZN28btCompoundCollisionAlgorithm22getAllContactManifoldsER20btAlignedObjectArrayIP20btPersistentManifoldE__index__);
+emit_start(_ZTI28btCompoundCollisionAlgorithm)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTS28btCompoundCollisionAlgorithm);
+emit_32(_ZTI30btActivatingCollisionAlgorithm);
+emit_start(_ZTS28btCompoundCollisionAlgorithm)
+emit_string('28btCompoundCollisionAlgorithm\x00');
+emit_start(_2E_str109)
+emit_string('Triangle\x00');
+emit_start(_ZTV24btConvexTriangleCallback)
+emit_32(0);
+emit_32(_ZTI24btConvexTriangleCallback);
+emit_32(_ZN24btConvexTriangleCallbackD1Ev__index__);
+emit_32(_ZN24btConvexTriangleCallbackD0Ev__index__);
+emit_32(_ZN24btConvexTriangleCallback15processTriangleEP9btVector3ii__index__);
+emit_start(_ZTI24btConvexTriangleCallback)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTS24btConvexTriangleCallback);
+emit_32(_ZTI18btTriangleCallback);
+emit_start(_ZTS24btConvexTriangleCallback)
+emit_string('24btConvexTriangleCallback\x00');
+emit_start(_ZTVZN33btConvexConcaveCollisionAlgorithm21calculateTimeOfImpactEP17btCollisionObjectS1_RK16btDispatcherInfoP16btManifoldResultE31LocalTriangleSphereCastCallback)
+emit_32(0);
+emit_32(_ZTIZN33btConvexConcaveCollisionAlgorithm21calculateTimeOfImpactEP17btCollisionObjectS1_RK16btDispatcherInfoP16btManifoldResultE31LocalTriangleSphereCastCallback);
+emit_32(_ZZN33btConvexConcaveCollisionAlgorithm21calculateTimeOfImpactEP17btCollisionObjectS1_RK16btDispatcherInfoP16btManifoldResultEN31LocalTriangleSphereCastCallbackD1Ev__index__);
+emit_32(_ZZN33btConvexConcaveCollisionAlgorithm21calculateTimeOfImpactEP17btCollisionObjectS1_RK16btDispatcherInfoP16btManifoldResultEN31LocalTriangleSphereCastCallbackD0Ev__index__);
+emit_32(_ZZN33btConvexConcaveCollisionAlgorithm21calculateTimeOfImpactEP17btCollisionObjectS1_RK16btDispatcherInfoP16btManifoldResultEN31LocalTriangleSphereCastCallback15processTriangleEP9btVector3ii__index__);
+emit_start(_ZTIZN33btConvexConcaveCollisionAlgorithm21calculateTimeOfImpactEP17btCollisionObjectS1_RK16btDispatcherInfoP16btManifoldResultE31LocalTriangleSphereCastCallback)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTSZN33btConvexConcaveCollisionAlgorithm21calculateTimeOfImpactEP17btCollisionObjectS1_RK16btDispatcherInfoP16btManifoldResultE31LocalTriangleSphereCastCallback);
+emit_32(_ZTI18btTriangleCallback);
+emit_start(_ZTSZN33btConvexConcaveCollisionAlgorithm21calculateTimeOfImpactEP17btCollisionObjectS1_RK16btDispatcherInfoP16btManifoldResultE31LocalTriangleSphereCastCallback)
+emit_string('ZN33btConvexConcaveCollisionAlgorithm21calculateTimeOfImpactEP17btCollisionObjectS1_RK16btDispatcherInfoP16btManifoldResultE31LocalTriangleSphereCastCallback\x00');
+emit_start(_ZTV15btTriangleShape)
+emit_32(0);
+emit_32(_ZTI15btTriangleShape);
+emit_32(_ZN15btTriangleShapeD1Ev__index__);
+emit_32(_ZN15btTriangleShapeD0Ev__index__);
+emit_32(_ZNK15btTriangleShape7getAabbERK11btTransformR9btVector3S4___index__);
+emit_32(_ZNK16btCollisionShape17getBoundingSphereER9btVector3Rf__index__);
+emit_32(_ZNK16btCollisionShape20getAngularMotionDiscEv__index__);
+emit_32(_ZNK16btCollisionShape27getContactBreakingThresholdEf__index__);
+emit_32(_ZN21btConvexInternalShape15setLocalScalingERK9btVector3__index__);
+emit_32(_ZNK21btConvexInternalShape15getLocalScalingEv__index__);
+emit_32(_ZNK15btTriangleShape21calculateLocalInertiaEfR9btVector3__index__);
+emit_32(_ZNK15btTriangleShape7getNameEv__index__);
+emit_32(_ZN21btConvexInternalShape9setMarginEf__index__);
+emit_32(_ZNK21btConvexInternalShape9getMarginEv__index__);
+emit_32(_ZNK21btConvexInternalShape28calculateSerializeBufferSizeEv__index__);
+emit_32(_ZNK21btConvexInternalShape9serializeEPvP12btSerializer__index__);
+emit_32(_ZNK16btCollisionShape20serializeSingleShapeEP12btSerializer__index__);
+emit_32(_ZNK21btConvexInternalShape24localGetSupportingVertexERK9btVector3__index__);
+emit_32(_ZNK15btTriangleShape37localGetSupportingVertexWithoutMarginERK9btVector3__index__);
+emit_32(_ZNK15btTriangleShape49batchedUnitVectorGetSupportingVertexWithoutMarginEPK9btVector3PS0_i__index__);
+emit_32(_ZNK21btConvexInternalShape11getAabbSlowERK11btTransformR9btVector3S4___index__);
+emit_32(_ZNK15btTriangleShape36getNumPreferredPenetrationDirectionsEv__index__);
+emit_32(_ZNK15btTriangleShape32getPreferredPenetrationDirectionEiR9btVector3__index__);
+emit_32(_ZNK15btTriangleShape14getNumVerticesEv__index__);
+emit_32(_ZNK15btTriangleShape11getNumEdgesEv__index__);
+emit_32(_ZNK15btTriangleShape7getEdgeEiR9btVector3S1___index__);
+emit_32(_ZNK15btTriangleShape9getVertexEiR9btVector3__index__);
+emit_32(_ZNK15btTriangleShape12getNumPlanesEv__index__);
+emit_32(_ZNK15btTriangleShape8getPlaneER9btVector3S1_i__index__);
+emit_32(_ZNK15btTriangleShape8isInsideERK9btVector3f__index__);
+emit_32(_ZNK15btTriangleShape16getPlaneEquationEiR9btVector3S1___index__);
+emit_start(_ZTI15btTriangleShape)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTS15btTriangleShape);
+emit_32(_ZTI23btPolyhedralConvexShape);
+emit_start(_ZTS15btTriangleShape)
+emit_string('15btTriangleShape\x00');
+emit_start(_ZTI23btPolyhedralConvexShape)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTS23btPolyhedralConvexShape);
+emit_32(_ZTI21btConvexInternalShape);
+emit_start(_ZTS23btPolyhedralConvexShape)
+emit_string('23btPolyhedralConvexShape\x00');
+emit_start(_ZTI21btConvexInternalShape)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTS21btConvexInternalShape);
+emit_32(_ZTI13btConvexShape);
+emit_start(_ZTS21btConvexInternalShape)
+emit_string('21btConvexInternalShape\x00');
+emit_start(_ZTI13btConvexShape)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTS13btConvexShape);
+emit_32(_ZTI16btCollisionShape);
+emit_start(_ZTS13btConvexShape)
+emit_string('13btConvexShape\x00');
+emit_start(_ZTI16btCollisionShape)
+emit_32(_ZTVN10__cxxabiv117__class_type_infoE+8);
+emit_32(_ZTS16btCollisionShape);
+emit_start(_ZTS16btCollisionShape)
+emit_string('16btCollisionShape\x00');
+emit_start(_2E_str1110)
+emit_string('btConvexInternalShapeData\x00');
+emit_start(_2E_str3112)
+emit_string('../../../../src/BulletCollision/CollisionShapes/btTriangleShape.h\x00');
+emit_start(_ZTV33btConvexConcaveCollisionAlgorithm)
+emit_32(0);
+emit_32(_ZTI33btConvexConcaveCollisionAlgorithm);
+emit_32(_ZN33btConvexConcaveCollisionAlgorithmD1Ev__index__);
+emit_32(_ZN33btConvexConcaveCollisionAlgorithmD0Ev__index__);
+emit_32(_ZN33btConvexConcaveCollisionAlgorithm16processCollisionEP17btCollisionObjectS1_RK16btDispatcherInfoP16btManifoldResult__index__);
+emit_32(_ZN33btConvexConcaveCollisionAlgorithm21calculateTimeOfImpactEP17btCollisionObjectS1_RK16btDispatcherInfoP16btManifoldResult__index__);
+emit_32(_ZN33btConvexConcaveCollisionAlgorithm22getAllContactManifoldsER20btAlignedObjectArrayIP20btPersistentManifoldE__index__);
+emit_start(_ZTI33btConvexConcaveCollisionAlgorithm)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTS33btConvexConcaveCollisionAlgorithm);
+emit_32(_ZTI30btActivatingCollisionAlgorithm);
+emit_start(_ZTS33btConvexConcaveCollisionAlgorithm)
+emit_string('33btConvexConcaveCollisionAlgorithm\x00');
+emit_start(_ZTI30btCollisionAlgorithmCreateFunc)
+emit_32(_ZTVN10__cxxabiv117__class_type_infoE+8);
+emit_32(_ZTS30btCollisionAlgorithmCreateFunc);
+emit_start(_ZTS30btCollisionAlgorithmCreateFunc)
+emit_string('30btCollisionAlgorithmCreateFunc\x00');
+emit_start(_ZTVN23btConvexConvexAlgorithm10CreateFuncE)
+emit_32(0);
+emit_32(_ZTIN23btConvexConvexAlgorithm10CreateFuncE);
+emit_32(_ZN23btConvexConvexAlgorithm10CreateFuncD1Ev__index__);
+emit_32(_ZN23btConvexConvexAlgorithm10CreateFuncD0Ev__index__);
+emit_32(_ZN23btConvexConvexAlgorithm10CreateFunc24CreateCollisionAlgorithmER36btCollisionAlgorithmConstructionInfoP17btCollisionObjectS4___index__);
+emit_start(_ZTIN23btConvexConvexAlgorithm10CreateFuncE)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTSN23btConvexConvexAlgorithm10CreateFuncE);
+emit_32(_ZTI30btCollisionAlgorithmCreateFunc);
+emit_start(_ZTSN23btConvexConvexAlgorithm10CreateFuncE)
+emit_string('N23btConvexConvexAlgorithm10CreateFuncE\x00');
+emit_start(_ZTV24btPerturbedContactResult)
+emit_32(0);
+emit_32(_ZTI24btPerturbedContactResult);
+emit_32(_ZN24btPerturbedContactResultD1Ev__index__);
+emit_32(_ZN24btPerturbedContactResultD0Ev__index__);
+emit_32(_ZN16btManifoldResult20setShapeIdentifiersAEii__index__);
+emit_32(_ZN16btManifoldResult20setShapeIdentifiersBEii__index__);
+emit_32(_ZN24btPerturbedContactResult15addContactPointERK9btVector3S2_f__index__);
+emit_start(_ZTI24btPerturbedContactResult)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTS24btPerturbedContactResult);
+emit_32(_ZTI16btManifoldResult);
+emit_start(_ZTS24btPerturbedContactResult)
+emit_string('24btPerturbedContactResult\x00');
+emit_start(_2E_str115)
+emit_string('d != btScalar(0.0)\x00');
+emit_start(_2E_str4119)
+emit_string('normalOnB.length2()>=(SIMD_EPSILON*SIMD_EPSILON)\x00');
+emit_start(_2E_str5120)
+emit_string('../../../../src/BulletCollision/CollisionDispatch/btConvexConvexAlgorithm.cpp\x00');
+emit_start(_ZTV23btConvexConvexAlgorithm)
+emit_32(0);
+emit_32(_ZTI23btConvexConvexAlgorithm);
+emit_32(_ZN23btConvexConvexAlgorithmD1Ev__index__);
+emit_32(_ZN23btConvexConvexAlgorithmD0Ev__index__);
+emit_32(_ZN23btConvexConvexAlgorithm16processCollisionEP17btCollisionObjectS1_RK16btDispatcherInfoP16btManifoldResult__index__);
+emit_32(_ZN23btConvexConvexAlgorithm21calculateTimeOfImpactEP17btCollisionObjectS1_RK16btDispatcherInfoP16btManifoldResult__index__);
+emit_32(_ZN23btConvexConvexAlgorithm22getAllContactManifoldsER20btAlignedObjectArrayIP20btPersistentManifoldE__index__);
+emit_start(_ZTI23btConvexConvexAlgorithm)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTS23btConvexConvexAlgorithm);
+emit_32(_ZTI30btActivatingCollisionAlgorithm);
+emit_start(_ZTS23btConvexConvexAlgorithm)
+emit_string('23btConvexConvexAlgorithm\x00');
+emit_start(_ZTV31btConvexPlaneCollisionAlgorithm)
+emit_32(0);
+emit_32(_ZTI31btConvexPlaneCollisionAlgorithm);
+emit_32(_ZN31btConvexPlaneCollisionAlgorithmD1Ev__index__);
+emit_32(_ZN31btConvexPlaneCollisionAlgorithmD0Ev__index__);
+emit_32(_ZN31btConvexPlaneCollisionAlgorithm16processCollisionEP17btCollisionObjectS1_RK16btDispatcherInfoP16btManifoldResult__index__);
+emit_32(_ZN31btConvexPlaneCollisionAlgorithm21calculateTimeOfImpactEP17btCollisionObjectS1_RK16btDispatcherInfoP16btManifoldResult__index__);
+emit_32(_ZN31btConvexPlaneCollisionAlgorithm22getAllContactManifoldsER20btAlignedObjectArrayIP20btPersistentManifoldE__index__);
+emit_start(_ZTI31btConvexPlaneCollisionAlgorithm)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTS31btConvexPlaneCollisionAlgorithm);
+emit_32(_ZTI20btCollisionAlgorithm);
+emit_start(_ZTS31btConvexPlaneCollisionAlgorithm)
+emit_string('31btConvexPlaneCollisionAlgorithm\x00');
+emit_start(_ZTVN31btConvexPlaneCollisionAlgorithm10CreateFuncE)
+emit_32(0);
+emit_32(_ZTIN31btConvexPlaneCollisionAlgorithm10CreateFuncE);
+emit_32(_ZN31btConvexPlaneCollisionAlgorithm10CreateFuncD1Ev__index__);
+emit_32(_ZN31btConvexPlaneCollisionAlgorithm10CreateFuncD0Ev__index__);
+emit_32(_ZN31btConvexPlaneCollisionAlgorithm10CreateFunc24CreateCollisionAlgorithmER36btCollisionAlgorithmConstructionInfoP17btCollisionObjectS4___index__);
+emit_start(_ZTIN31btConvexPlaneCollisionAlgorithm10CreateFuncE)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTSN31btConvexPlaneCollisionAlgorithm10CreateFuncE);
+emit_32(_ZTI30btCollisionAlgorithmCreateFunc);
+emit_start(_ZTSN31btConvexPlaneCollisionAlgorithm10CreateFuncE)
+emit_string('N31btConvexPlaneCollisionAlgorithm10CreateFuncE\x00');
+emit_start(_ZTI24btCollisionConfiguration)
+emit_32(_ZTVN10__cxxabiv117__class_type_infoE+8);
+emit_32(_ZTS24btCollisionConfiguration);
+emit_start(_ZTS24btCollisionConfiguration)
+emit_string('24btCollisionConfiguration\x00');
+emit_start(_ZTVN33btConvexConcaveCollisionAlgorithm10CreateFuncE)
+emit_32(0);
+emit_32(_ZTIN33btConvexConcaveCollisionAlgorithm10CreateFuncE);
+emit_32(_ZN33btConvexConcaveCollisionAlgorithm10CreateFuncD1Ev__index__);
+emit_32(_ZN33btConvexConcaveCollisionAlgorithm10CreateFuncD0Ev__index__);
+emit_32(_ZN33btConvexConcaveCollisionAlgorithm10CreateFunc24CreateCollisionAlgorithmER36btCollisionAlgorithmConstructionInfoP17btCollisionObjectS4___index__);
+emit_start(_ZTIN33btConvexConcaveCollisionAlgorithm10CreateFuncE)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTSN33btConvexConcaveCollisionAlgorithm10CreateFuncE);
+emit_32(_ZTI30btCollisionAlgorithmCreateFunc);
+emit_start(_ZTSN33btConvexConcaveCollisionAlgorithm10CreateFuncE)
+emit_string('N33btConvexConcaveCollisionAlgorithm10CreateFuncE\x00');
+emit_start(_ZTVN33btConvexConcaveCollisionAlgorithm17SwappedCreateFuncE)
+emit_32(0);
+emit_32(_ZTIN33btConvexConcaveCollisionAlgorithm17SwappedCreateFuncE);
+emit_32(_ZN33btConvexConcaveCollisionAlgorithm17SwappedCreateFuncD1Ev__index__);
+emit_32(_ZN33btConvexConcaveCollisionAlgorithm17SwappedCreateFuncD0Ev__index__);
+emit_32(_ZN33btConvexConcaveCollisionAlgorithm17SwappedCreateFunc24CreateCollisionAlgorithmER36btCollisionAlgorithmConstructionInfoP17btCollisionObjectS4___index__);
+emit_start(_ZTIN33btConvexConcaveCollisionAlgorithm17SwappedCreateFuncE)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTSN33btConvexConcaveCollisionAlgorithm17SwappedCreateFuncE);
+emit_32(_ZTI30btCollisionAlgorithmCreateFunc);
+emit_start(_ZTSN33btConvexConcaveCollisionAlgorithm17SwappedCreateFuncE)
+emit_string('N33btConvexConcaveCollisionAlgorithm17SwappedCreateFuncE\x00');
+emit_start(_ZTVN28btCompoundCollisionAlgorithm10CreateFuncE)
+emit_32(0);
+emit_32(_ZTIN28btCompoundCollisionAlgorithm10CreateFuncE);
+emit_32(_ZN28btCompoundCollisionAlgorithm10CreateFuncD1Ev__index__);
+emit_32(_ZN28btCompoundCollisionAlgorithm10CreateFuncD0Ev__index__);
+emit_32(_ZN28btCompoundCollisionAlgorithm10CreateFunc24CreateCollisionAlgorithmER36btCollisionAlgorithmConstructionInfoP17btCollisionObjectS4___index__);
+emit_start(_ZTIN28btCompoundCollisionAlgorithm10CreateFuncE)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTSN28btCompoundCollisionAlgorithm10CreateFuncE);
+emit_32(_ZTI30btCollisionAlgorithmCreateFunc);
+emit_start(_ZTSN28btCompoundCollisionAlgorithm10CreateFuncE)
+emit_string('N28btCompoundCollisionAlgorithm10CreateFuncE\x00');
+emit_start(_ZTVN28btCompoundCollisionAlgorithm17SwappedCreateFuncE)
+emit_32(0);
+emit_32(_ZTIN28btCompoundCollisionAlgorithm17SwappedCreateFuncE);
+emit_32(_ZN28btCompoundCollisionAlgorithm17SwappedCreateFuncD1Ev__index__);
+emit_32(_ZN28btCompoundCollisionAlgorithm17SwappedCreateFuncD0Ev__index__);
+emit_32(_ZN28btCompoundCollisionAlgorithm17SwappedCreateFunc24CreateCollisionAlgorithmER36btCollisionAlgorithmConstructionInfoP17btCollisionObjectS4___index__);
+emit_start(_ZTIN28btCompoundCollisionAlgorithm17SwappedCreateFuncE)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTSN28btCompoundCollisionAlgorithm17SwappedCreateFuncE);
+emit_32(_ZTI30btCollisionAlgorithmCreateFunc);
+emit_start(_ZTSN28btCompoundCollisionAlgorithm17SwappedCreateFuncE)
+emit_string('N28btCompoundCollisionAlgorithm17SwappedCreateFuncE\x00');
+emit_start(_ZTVN16btEmptyAlgorithm10CreateFuncE)
+emit_32(0);
+emit_32(_ZTIN16btEmptyAlgorithm10CreateFuncE);
+emit_32(_ZN16btEmptyAlgorithm10CreateFuncD1Ev__index__);
+emit_32(_ZN16btEmptyAlgorithm10CreateFuncD0Ev__index__);
+emit_32(_ZN16btEmptyAlgorithm10CreateFunc24CreateCollisionAlgorithmER36btCollisionAlgorithmConstructionInfoP17btCollisionObjectS4___index__);
+emit_start(_ZTIN16btEmptyAlgorithm10CreateFuncE)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTSN16btEmptyAlgorithm10CreateFuncE);
+emit_32(_ZTI30btCollisionAlgorithmCreateFunc);
+emit_start(_ZTSN16btEmptyAlgorithm10CreateFuncE)
+emit_string('N16btEmptyAlgorithm10CreateFuncE\x00');
+emit_start(_ZTVN32btSphereSphereCollisionAlgorithm10CreateFuncE)
+emit_32(0);
+emit_32(_ZTIN32btSphereSphereCollisionAlgorithm10CreateFuncE);
+emit_32(_ZN32btSphereSphereCollisionAlgorithm10CreateFuncD1Ev__index__);
+emit_32(_ZN32btSphereSphereCollisionAlgorithm10CreateFuncD0Ev__index__);
+emit_32(_ZN32btSphereSphereCollisionAlgorithm10CreateFunc24CreateCollisionAlgorithmER36btCollisionAlgorithmConstructionInfoP17btCollisionObjectS4___index__);
+emit_start(_ZTIN32btSphereSphereCollisionAlgorithm10CreateFuncE)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTSN32btSphereSphereCollisionAlgorithm10CreateFuncE);
+emit_32(_ZTI30btCollisionAlgorithmCreateFunc);
+emit_start(_ZTSN32btSphereSphereCollisionAlgorithm10CreateFuncE)
+emit_string('N32btSphereSphereCollisionAlgorithm10CreateFuncE\x00');
+emit_start(_ZTVN34btSphereTriangleCollisionAlgorithm10CreateFuncE)
+emit_32(0);
+emit_32(_ZTIN34btSphereTriangleCollisionAlgorithm10CreateFuncE);
+emit_32(_ZN34btSphereTriangleCollisionAlgorithm10CreateFuncD1Ev__index__);
+emit_32(_ZN34btSphereTriangleCollisionAlgorithm10CreateFuncD0Ev__index__);
+emit_32(_ZN34btSphereTriangleCollisionAlgorithm10CreateFunc24CreateCollisionAlgorithmER36btCollisionAlgorithmConstructionInfoP17btCollisionObjectS4___index__);
+emit_start(_ZTIN34btSphereTriangleCollisionAlgorithm10CreateFuncE)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTSN34btSphereTriangleCollisionAlgorithm10CreateFuncE);
+emit_32(_ZTI30btCollisionAlgorithmCreateFunc);
+emit_start(_ZTSN34btSphereTriangleCollisionAlgorithm10CreateFuncE)
+emit_string('N34btSphereTriangleCollisionAlgorithm10CreateFuncE\x00');
+emit_start(_ZTVN26btBoxBoxCollisionAlgorithm10CreateFuncE)
+emit_32(0);
+emit_32(_ZTIN26btBoxBoxCollisionAlgorithm10CreateFuncE);
+emit_32(_ZN26btBoxBoxCollisionAlgorithm10CreateFuncD1Ev__index__);
+emit_32(_ZN26btBoxBoxCollisionAlgorithm10CreateFuncD0Ev__index__);
+emit_32(_ZN26btBoxBoxCollisionAlgorithm10CreateFunc24CreateCollisionAlgorithmER36btCollisionAlgorithmConstructionInfoP17btCollisionObjectS4___index__);
+emit_start(_ZTIN26btBoxBoxCollisionAlgorithm10CreateFuncE)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTSN26btBoxBoxCollisionAlgorithm10CreateFuncE);
+emit_32(_ZTI30btCollisionAlgorithmCreateFunc);
+emit_start(_ZTSN26btBoxBoxCollisionAlgorithm10CreateFuncE)
+emit_string('N26btBoxBoxCollisionAlgorithm10CreateFuncE\x00');
+emit_start(_2E_str128)
+emit_string('usedsize==0\x00');
+emit_start(_2E_str1129)
+emit_string('../../../../src/LinearMath/btStackAlloc.h\x00');
+emit_start(_ZTV31btDefaultCollisionConfiguration)
+emit_32(0);
+emit_32(_ZTI31btDefaultCollisionConfiguration);
+emit_32(_ZN31btDefaultCollisionConfigurationD1Ev__index__);
+emit_32(_ZN31btDefaultCollisionConfigurationD0Ev__index__);
+emit_32(_ZN31btDefaultCollisionConfiguration25getPersistentManifoldPoolEv__index__);
+emit_32(_ZN31btDefaultCollisionConfiguration25getCollisionAlgorithmPoolEv__index__);
+emit_32(_ZN31btDefaultCollisionConfiguration17getStackAllocatorEv__index__);
+emit_32(_ZN31btDefaultCollisionConfiguration31getCollisionAlgorithmCreateFuncEii__index__);
+emit_32(_ZN31btDefaultCollisionConfiguration16getSimplexSolverEv__index__);
+emit_start(_ZTI31btDefaultCollisionConfiguration)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTS31btDefaultCollisionConfiguration);
+emit_32(_ZTI24btCollisionConfiguration);
+emit_start(_ZTS31btDefaultCollisionConfiguration)
+emit_string('31btDefaultCollisionConfiguration\x00');
+emit_start(_ZTV16btEmptyAlgorithm)
+emit_32(0);
+emit_32(_ZTI16btEmptyAlgorithm);
+emit_32(_ZN16btEmptyAlgorithmD1Ev__index__);
+emit_32(_ZN16btEmptyAlgorithmD0Ev__index__);
+emit_32(_ZN16btEmptyAlgorithm16processCollisionEP17btCollisionObjectS1_RK16btDispatcherInfoP16btManifoldResult__index__);
+emit_32(_ZN16btEmptyAlgorithm21calculateTimeOfImpactEP17btCollisionObjectS1_RK16btDispatcherInfoP16btManifoldResult__index__);
+emit_32(_ZN16btEmptyAlgorithm22getAllContactManifoldsER20btAlignedObjectArrayIP20btPersistentManifoldE__index__);
+emit_start(_ZTI16btEmptyAlgorithm)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTS16btEmptyAlgorithm);
+emit_32(_ZTI20btCollisionAlgorithm);
+emit_start(_ZTS16btEmptyAlgorithm)
+emit_string('16btEmptyAlgorithm\x00');
+emit_start(_ZTV16btManifoldResult)
+emit_32(0);
+emit_32(_ZTI16btManifoldResult);
+emit_32(_ZN16btManifoldResultD1Ev__index__);
+emit_32(_ZN16btManifoldResultD0Ev__index__);
+emit_32(_ZN16btManifoldResult20setShapeIdentifiersAEii__index__);
+emit_32(_ZN16btManifoldResult20setShapeIdentifiersBEii__index__);
+emit_32(_ZN16btManifoldResult15addContactPointERK9btVector3S2_f__index__);
+emit_start(_2E_str2149)
+emit_string('validContactDistance(newPoint)\x00');
+emit_start(_2E_str3150)
+emit_string('lifeTime>=0\x00');
+emit_start(_2E_str5152)
+emit_string('../../../../src/BulletCollision/CollisionDispatch/btManifoldResult.cpp\x00');
+emit_start(_2E_str155)
+emit_string('islandUnionFindAndQuickSort\x00');
+emit_start(_2E_str1156)
+emit_string('(colObj0->getIslandTag() == islandId) || (colObj0->getIslandTag() == -1)\x00');
+emit_start(_2E_str2157)
+emit_string('../../../../src/BulletCollision/CollisionDispatch/btSimulationIslandManager.cpp\x00');
+emit_start(_2E_str3158)
+emit_string('processIslands\x00');
+emit_start(_ZTV25btSimulationIslandManager)
+emit_32(0);
+emit_32(_ZTI25btSimulationIslandManager);
+emit_32(_ZN25btSimulationIslandManagerD1Ev__index__);
+emit_32(_ZN25btSimulationIslandManagerD0Ev__index__);
+emit_32(_ZN25btSimulationIslandManager21updateActivationStateEP16btCollisionWorldP12btDispatcher__index__);
+emit_32(_ZN25btSimulationIslandManager26storeIslandActivationStateEP16btCollisionWorld__index__);
+emit_start(_ZTI25btSimulationIslandManager)
+emit_32(_ZTVN10__cxxabiv117__class_type_infoE+8);
+emit_32(_ZTS25btSimulationIslandManager);
+emit_start(_ZTS25btSimulationIslandManager)
+emit_string('25btSimulationIslandManager\x00');
+emit_start(_ZTV32btSphereSphereCollisionAlgorithm)
+emit_32(0);
+emit_32(_ZTI32btSphereSphereCollisionAlgorithm);
+emit_32(_ZN32btSphereSphereCollisionAlgorithmD1Ev__index__);
+emit_32(_ZN32btSphereSphereCollisionAlgorithmD0Ev__index__);
+emit_32(_ZN32btSphereSphereCollisionAlgorithm16processCollisionEP17btCollisionObjectS1_RK16btDispatcherInfoP16btManifoldResult__index__);
+emit_32(_ZN32btSphereSphereCollisionAlgorithm21calculateTimeOfImpactEP17btCollisionObjectS1_RK16btDispatcherInfoP16btManifoldResult__index__);
+emit_32(_ZN32btSphereSphereCollisionAlgorithm22getAllContactManifoldsER20btAlignedObjectArrayIP20btPersistentManifoldE__index__);
+emit_start(_ZTI32btSphereSphereCollisionAlgorithm)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTS32btSphereSphereCollisionAlgorithm);
+emit_32(_ZTI30btActivatingCollisionAlgorithm);
+emit_start(_ZTS32btSphereSphereCollisionAlgorithm)
+emit_string('32btSphereSphereCollisionAlgorithm\x00');
+emit_start(_ZTV34btSphereTriangleCollisionAlgorithm)
+emit_32(0);
+emit_32(_ZTI34btSphereTriangleCollisionAlgorithm);
+emit_32(_ZN34btSphereTriangleCollisionAlgorithmD1Ev__index__);
+emit_32(_ZN34btSphereTriangleCollisionAlgorithmD0Ev__index__);
+emit_32(_ZN34btSphereTriangleCollisionAlgorithm16processCollisionEP17btCollisionObjectS1_RK16btDispatcherInfoP16btManifoldResult__index__);
+emit_32(_ZN34btSphereTriangleCollisionAlgorithm21calculateTimeOfImpactEP17btCollisionObjectS1_RK16btDispatcherInfoP16btManifoldResult__index__);
+emit_32(_ZN34btSphereTriangleCollisionAlgorithm22getAllContactManifoldsER20btAlignedObjectArrayIP20btPersistentManifoldE__index__);
+emit_start(_ZTI34btSphereTriangleCollisionAlgorithm)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTS34btSphereTriangleCollisionAlgorithm);
+emit_32(_ZTI30btActivatingCollisionAlgorithm);
+emit_start(_ZTS34btSphereTriangleCollisionAlgorithm)
+emit_string('34btSphereTriangleCollisionAlgorithm\x00');
+emit_start(_ZTV22SphereTriangleDetector)
+emit_32(0);
+emit_32(_ZTI22SphereTriangleDetector);
+emit_32(_ZN22SphereTriangleDetectorD1Ev__index__);
+emit_32(_ZN22SphereTriangleDetectorD0Ev__index__);
+emit_32(_ZN22SphereTriangleDetector16getClosestPointsERKN36btDiscreteCollisionDetectorInterface17ClosestPointInputERNS0_6ResultEP12btIDebugDrawb__index__);
+emit_start(_ZTI22SphereTriangleDetector)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTS22SphereTriangleDetector);
+emit_32(_ZTI36btDiscreteCollisionDetectorInterface);
+emit_start(_ZTS22SphereTriangleDetector)
+emit_string('22SphereTriangleDetector\x00');
+emit_start(_2E_str173)
+emit_string('Box\x00');
+emit_start(_2E_str2175)
+emit_string('../../../../src/BulletCollision/CollisionShapes/btBoxShape.h\x00');
+emit_start(_ZTV10btBoxShape)
+emit_32(0);
+emit_32(_ZTI10btBoxShape);
+emit_32(_ZN10btBoxShapeD1Ev__index__);
+emit_32(_ZN10btBoxShapeD0Ev__index__);
+emit_32(_ZNK10btBoxShape7getAabbERK11btTransformR9btVector3S4___index__);
+emit_32(_ZNK16btCollisionShape17getBoundingSphereER9btVector3Rf__index__);
+emit_32(_ZNK16btCollisionShape20getAngularMotionDiscEv__index__);
+emit_32(_ZNK16btCollisionShape27getContactBreakingThresholdEf__index__);
+emit_32(_ZN10btBoxShape15setLocalScalingERK9btVector3__index__);
+emit_32(_ZNK21btConvexInternalShape15getLocalScalingEv__index__);
+emit_32(_ZNK10btBoxShape21calculateLocalInertiaEfR9btVector3__index__);
+emit_32(_ZNK10btBoxShape7getNameEv__index__);
+emit_32(_ZN10btBoxShape9setMarginEf__index__);
+emit_32(_ZNK21btConvexInternalShape9getMarginEv__index__);
+emit_32(_ZNK21btConvexInternalShape28calculateSerializeBufferSizeEv__index__);
+emit_32(_ZNK21btConvexInternalShape9serializeEPvP12btSerializer__index__);
+emit_32(_ZNK16btCollisionShape20serializeSingleShapeEP12btSerializer__index__);
+emit_32(_ZNK10btBoxShape24localGetSupportingVertexERK9btVector3__index__);
+emit_32(_ZNK10btBoxShape37localGetSupportingVertexWithoutMarginERK9btVector3__index__);
+emit_32(_ZNK10btBoxShape49batchedUnitVectorGetSupportingVertexWithoutMarginEPK9btVector3PS0_i__index__);
+emit_32(_ZNK21btConvexInternalShape11getAabbSlowERK11btTransformR9btVector3S4___index__);
+emit_32(_ZNK10btBoxShape36getNumPreferredPenetrationDirectionsEv__index__);
+emit_32(_ZNK10btBoxShape32getPreferredPenetrationDirectionEiR9btVector3__index__);
+emit_32(_ZNK10btBoxShape14getNumVerticesEv__index__);
+emit_32(_ZNK10btBoxShape11getNumEdgesEv__index__);
+emit_32(_ZNK10btBoxShape7getEdgeEiR9btVector3S1___index__);
+emit_32(_ZNK10btBoxShape9getVertexEiR9btVector3__index__);
+emit_32(_ZNK10btBoxShape12getNumPlanesEv__index__);
+emit_32(_ZNK10btBoxShape8getPlaneER9btVector3S1_i__index__);
+emit_32(_ZNK10btBoxShape8isInsideERK9btVector3f__index__);
+emit_32(_ZNK10btBoxShape16getPlaneEquationER9btVector4i__index__);
+emit_start(_ZTI10btBoxShape)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTS10btBoxShape);
+emit_32(_ZTI23btPolyhedralConvexShape);
+emit_start(_ZTS10btBoxShape)
+emit_string('10btBoxShape\x00');
+emit_start(_2E_str181)
+emit_string('BVHTRIANGLEMESH\x00');
+emit_start(_ZTVZN22btBvhTriangleMeshShape14performRaycastEP18btTriangleCallbackRK9btVector3S4_E21MyNodeOverlapCallback)
+emit_32(0);
+emit_32(_ZTIZN22btBvhTriangleMeshShape14performRaycastEP18btTriangleCallbackRK9btVector3S4_E21MyNodeOverlapCallback);
+emit_32(_ZZN22btBvhTriangleMeshShape14performRaycastEP18btTriangleCallbackRK9btVector3S4_EN21MyNodeOverlapCallbackD1Ev__index__);
+emit_32(_ZZN22btBvhTriangleMeshShape14performRaycastEP18btTriangleCallbackRK9btVector3S4_EN21MyNodeOverlapCallbackD0Ev__index__);
+emit_32(_ZZN22btBvhTriangleMeshShape14performRaycastEP18btTriangleCallbackRK9btVector3S4_EN21MyNodeOverlapCallback11processNodeEii__index__);
+emit_start(_ZTIZN22btBvhTriangleMeshShape14performRaycastEP18btTriangleCallbackRK9btVector3S4_E21MyNodeOverlapCallback)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTSZN22btBvhTriangleMeshShape14performRaycastEP18btTriangleCallbackRK9btVector3S4_E21MyNodeOverlapCallback);
+emit_32(_ZTI21btNodeOverlapCallback);
+emit_start(_ZTSZN22btBvhTriangleMeshShape14performRaycastEP18btTriangleCallbackRK9btVector3S4_E21MyNodeOverlapCallback)
+emit_string('ZN22btBvhTriangleMeshShape14performRaycastEP18btTriangleCallbackRK9btVector3S4_E21MyNodeOverlapCallback\x00');
+emit_start(_ZTVZN22btBvhTriangleMeshShape17performConvexcastEP18btTriangleCallbackRK9btVector3S4_S4_S4_E21MyNodeOverlapCallback)
+emit_32(0);
+emit_32(_ZTIZN22btBvhTriangleMeshShape17performConvexcastEP18btTriangleCallbackRK9btVector3S4_S4_S4_E21MyNodeOverlapCallback);
+emit_32(_ZZN22btBvhTriangleMeshShape17performConvexcastEP18btTriangleCallbackRK9btVector3S4_S4_S4_EN21MyNodeOverlapCallbackD1Ev__index__);
+emit_32(_ZZN22btBvhTriangleMeshShape17performConvexcastEP18btTriangleCallbackRK9btVector3S4_S4_S4_EN21MyNodeOverlapCallbackD0Ev__index__);
+emit_32(_ZZN22btBvhTriangleMeshShape17performConvexcastEP18btTriangleCallbackRK9btVector3S4_S4_S4_EN21MyNodeOverlapCallback11processNodeEii__index__);
+emit_start(_ZTIZN22btBvhTriangleMeshShape17performConvexcastEP18btTriangleCallbackRK9btVector3S4_S4_S4_E21MyNodeOverlapCallback)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTSZN22btBvhTriangleMeshShape17performConvexcastEP18btTriangleCallbackRK9btVector3S4_S4_S4_E21MyNodeOverlapCallback);
+emit_32(_ZTI21btNodeOverlapCallback);
+emit_start(_ZTSZN22btBvhTriangleMeshShape17performConvexcastEP18btTriangleCallbackRK9btVector3S4_S4_S4_E21MyNodeOverlapCallback)
+emit_string('ZN22btBvhTriangleMeshShape17performConvexcastEP18btTriangleCallbackRK9btVector3S4_S4_S4_E21MyNodeOverlapCallback\x00');
+emit_start(_ZTVZNK22btBvhTriangleMeshShape19processAllTrianglesEP18btTriangleCallbackRK9btVector3S4_E21MyNodeOverlapCallback)
+emit_32(0);
+emit_32(_ZTIZNK22btBvhTriangleMeshShape19processAllTrianglesEP18btTriangleCallbackRK9btVector3S4_E21MyNodeOverlapCallback);
+emit_32(_ZZNK22btBvhTriangleMeshShape19processAllTrianglesEP18btTriangleCallbackRK9btVector3S4_EN21MyNodeOverlapCallbackD1Ev__index__);
+emit_32(_ZZNK22btBvhTriangleMeshShape19processAllTrianglesEP18btTriangleCallbackRK9btVector3S4_EN21MyNodeOverlapCallbackD0Ev__index__);
+emit_32(_ZZNK22btBvhTriangleMeshShape19processAllTrianglesEP18btTriangleCallbackRK9btVector3S4_EN21MyNodeOverlapCallback11processNodeEii__index__);
+emit_start(_ZTIZNK22btBvhTriangleMeshShape19processAllTrianglesEP18btTriangleCallbackRK9btVector3S4_E21MyNodeOverlapCallback)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTSZNK22btBvhTriangleMeshShape19processAllTrianglesEP18btTriangleCallbackRK9btVector3S4_E21MyNodeOverlapCallback);
+emit_32(_ZTI21btNodeOverlapCallback);
+emit_start(_ZTSZNK22btBvhTriangleMeshShape19processAllTrianglesEP18btTriangleCallbackRK9btVector3S4_E21MyNodeOverlapCallback)
+emit_string('ZNK22btBvhTriangleMeshShape19processAllTrianglesEP18btTriangleCallbackRK9btVector3S4_E21MyNodeOverlapCallback\x00');
+emit_start(_2E_str5186)
+emit_string('../../../../src/BulletCollision/CollisionShapes/btTriangleMeshShape.h\x00');
+emit_start(_2E_str6187)
+emit_string('indicestype==PHY_INTEGER||indicestype==PHY_SHORT\x00');
+emit_start(_2E_str7188)
+emit_string('../../../../src/BulletCollision/CollisionShapes/btBvhTriangleMeshShape.cpp\x00');
+emit_start(_2E_str8189)
+emit_string('btTriangleMeshShapeData\x00');
+emit_start(_ZTV22btBvhTriangleMeshShape)
+emit_32(0);
+emit_32(_ZTI22btBvhTriangleMeshShape);
+emit_32(_ZN22btBvhTriangleMeshShapeD1Ev__index__);
+emit_32(_ZN22btBvhTriangleMeshShapeD0Ev__index__);
+emit_32(_ZNK19btTriangleMeshShape7getAabbERK11btTransformR9btVector3S4___index__);
+emit_32(_ZNK16btCollisionShape17getBoundingSphereER9btVector3Rf__index__);
+emit_32(_ZNK16btCollisionShape20getAngularMotionDiscEv__index__);
+emit_32(_ZNK16btCollisionShape27getContactBreakingThresholdEf__index__);
+emit_32(_ZN22btBvhTriangleMeshShape15setLocalScalingERK9btVector3__index__);
+emit_32(_ZNK19btTriangleMeshShape15getLocalScalingEv__index__);
+emit_32(_ZNK19btTriangleMeshShape21calculateLocalInertiaEfR9btVector3__index__);
+emit_32(_ZNK22btBvhTriangleMeshShape7getNameEv__index__);
+emit_32(_ZN14btConcaveShape9setMarginEf__index__);
+emit_32(_ZNK14btConcaveShape9getMarginEv__index__);
+emit_32(_ZNK22btBvhTriangleMeshShape28calculateSerializeBufferSizeEv__index__);
+emit_32(_ZNK22btBvhTriangleMeshShape9serializeEPvP12btSerializer__index__);
+emit_32(_ZNK16btCollisionShape20serializeSingleShapeEP12btSerializer__index__);
+emit_32(_ZNK22btBvhTriangleMeshShape19processAllTrianglesEP18btTriangleCallbackRK9btVector3S4___index__);
+emit_32(_ZNK19btTriangleMeshShape24localGetSupportingVertexERK9btVector3__index__);
+emit_32(_ZNK19btTriangleMeshShape37localGetSupportingVertexWithoutMarginERK9btVector3__index__);
+emit_32(_ZNK22btBvhTriangleMeshShape18serializeSingleBvhEP12btSerializer__index__);
+emit_32(_ZNK22btBvhTriangleMeshShape30serializeSingleTriangleInfoMapEP12btSerializer__index__);
+emit_start(_ZTI22btBvhTriangleMeshShape)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTS22btBvhTriangleMeshShape);
+emit_32(_ZTI19btTriangleMeshShape);
+emit_start(_ZTS22btBvhTriangleMeshShape)
+emit_string('22btBvhTriangleMeshShape\x00');
+emit_start(_ZTI19btTriangleMeshShape)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTS19btTriangleMeshShape);
+emit_32(_ZTI14btConcaveShape);
+emit_start(_ZTS19btTriangleMeshShape)
+emit_string('19btTriangleMeshShape\x00');
+emit_start(_ZTI14btConcaveShape)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTS14btConcaveShape);
+emit_32(_ZTI16btCollisionShape);
+emit_start(_ZTS14btConcaveShape)
+emit_string('14btConcaveShape\x00');
+emit_start(_2E_str194)
+emit_string('CapsuleShape\x00');
+emit_start(_2E_str4198)
+emit_string('../../../../src/BulletCollision/CollisionShapes/btConvexInternalShape.h\x00');
+emit_start(_2E_str6199)
+emit_string('btCapsuleShapeData\x00');
+emit_start(_ZTV14btCapsuleShape)
+emit_32(0);
+emit_32(_ZTI14btCapsuleShape);
+emit_32(_ZN14btCapsuleShapeD1Ev__index__);
+emit_32(_ZN14btCapsuleShapeD0Ev__index__);
+emit_32(_ZNK14btCapsuleShape7getAabbERK11btTransformR9btVector3S4___index__);
+emit_32(_ZNK16btCollisionShape17getBoundingSphereER9btVector3Rf__index__);
+emit_32(_ZNK16btCollisionShape20getAngularMotionDiscEv__index__);
+emit_32(_ZNK16btCollisionShape27getContactBreakingThresholdEf__index__);
+emit_32(_ZN14btCapsuleShape15setLocalScalingERK9btVector3__index__);
+emit_32(_ZNK21btConvexInternalShape15getLocalScalingEv__index__);
+emit_32(_ZNK14btCapsuleShape21calculateLocalInertiaEfR9btVector3__index__);
+emit_32(_ZNK14btCapsuleShape7getNameEv__index__);
+emit_32(_ZN14btCapsuleShape9setMarginEf__index__);
+emit_32(_ZNK21btConvexInternalShape9getMarginEv__index__);
+emit_32(_ZNK14btCapsuleShape28calculateSerializeBufferSizeEv__index__);
+emit_32(_ZNK14btCapsuleShape9serializeEPvP12btSerializer__index__);
+emit_32(_ZNK16btCollisionShape20serializeSingleShapeEP12btSerializer__index__);
+emit_32(_ZNK21btConvexInternalShape24localGetSupportingVertexERK9btVector3__index__);
+emit_32(_ZNK14btCapsuleShape37localGetSupportingVertexWithoutMarginERK9btVector3__index__);
+emit_32(_ZNK14btCapsuleShape49batchedUnitVectorGetSupportingVertexWithoutMarginEPK9btVector3PS0_i__index__);
+emit_32(_ZNK21btConvexInternalShape11getAabbSlowERK11btTransformR9btVector3S4___index__);
+emit_32(_ZNK21btConvexInternalShape36getNumPreferredPenetrationDirectionsEv__index__);
+emit_32(_ZNK21btConvexInternalShape32getPreferredPenetrationDirectionEiR9btVector3__index__);
+emit_start(_ZTI14btCapsuleShape)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTS14btCapsuleShape);
+emit_32(_ZTI21btConvexInternalShape);
+emit_start(_ZTS14btCapsuleShape)
+emit_string('14btCapsuleShape\x00');
+emit_start(_2E_str200)
+emit_string('btCollisionShapeData\x00');
+emit_start(_ZTV14btConcaveShape)
+emit_32(0);
+emit_32(_ZTI14btConcaveShape);
+emit_32(_ZN14btConcaveShapeD1Ev__index__);
+emit_32(_ZN14btConcaveShapeD0Ev__index__);
+emit_32(__cxa_pure_virtual__index__);
+emit_32(_ZNK16btCollisionShape17getBoundingSphereER9btVector3Rf__index__);
+emit_32(_ZNK16btCollisionShape20getAngularMotionDiscEv__index__);
+emit_32(_ZNK16btCollisionShape27getContactBreakingThresholdEf__index__);
+emit_32(__cxa_pure_virtual__index__);
+emit_32(__cxa_pure_virtual__index__);
+emit_32(__cxa_pure_virtual__index__);
+emit_32(__cxa_pure_virtual__index__);
+emit_32(_ZN14btConcaveShape9setMarginEf__index__);
+emit_32(_ZNK14btConcaveShape9getMarginEv__index__);
+emit_32(_ZNK16btCollisionShape28calculateSerializeBufferSizeEv__index__);
+emit_32(_ZNK16btCollisionShape9serializeEPvP12btSerializer__index__);
+emit_32(_ZNK16btCollisionShape20serializeSingleShapeEP12btSerializer__index__);
+emit_32(__cxa_pure_virtual__index__);
+emit_start(_2E_str219)
+emit_string('Convex\x00');
+emit_start(_2E_str3222)
+emit_string('../../../../src/BulletCollision/CollisionShapes/btConvexHullShape.cpp\x00');
+emit_start(_ZTV17btConvexHullShape)
+emit_32(0);
+emit_32(_ZTI17btConvexHullShape);
+emit_32(_ZN17btConvexHullShapeD1Ev__index__);
+emit_32(_ZN17btConvexHullShapeD0Ev__index__);
+emit_32(_ZNK34btPolyhedralConvexAabbCachingShape7getAabbERK11btTransformR9btVector3S4___index__);
+emit_32(_ZNK16btCollisionShape17getBoundingSphereER9btVector3Rf__index__);
+emit_32(_ZNK16btCollisionShape20getAngularMotionDiscEv__index__);
+emit_32(_ZNK16btCollisionShape27getContactBreakingThresholdEf__index__);
+emit_32(_ZN17btConvexHullShape15setLocalScalingERK9btVector3__index__);
+emit_32(_ZNK21btConvexInternalShape15getLocalScalingEv__index__);
+emit_32(_ZNK23btPolyhedralConvexShape21calculateLocalInertiaEfR9btVector3__index__);
+emit_32(_ZNK17btConvexHullShape7getNameEv__index__);
+emit_32(_ZN21btConvexInternalShape9setMarginEf__index__);
+emit_32(_ZNK21btConvexInternalShape9getMarginEv__index__);
+emit_32(_ZNK17btConvexHullShape28calculateSerializeBufferSizeEv__index__);
+emit_32(_ZNK17btConvexHullShape9serializeEPvP12btSerializer__index__);
+emit_32(_ZNK16btCollisionShape20serializeSingleShapeEP12btSerializer__index__);
+emit_32(_ZNK17btConvexHullShape24localGetSupportingVertexERK9btVector3__index__);
+emit_32(_ZNK17btConvexHullShape37localGetSupportingVertexWithoutMarginERK9btVector3__index__);
+emit_32(_ZNK17btConvexHullShape49batchedUnitVectorGetSupportingVertexWithoutMarginEPK9btVector3PS0_i__index__);
+emit_32(_ZNK21btConvexInternalShape11getAabbSlowERK11btTransformR9btVector3S4___index__);
+emit_32(_ZNK21btConvexInternalShape36getNumPreferredPenetrationDirectionsEv__index__);
+emit_32(_ZNK21btConvexInternalShape32getPreferredPenetrationDirectionEiR9btVector3__index__);
+emit_32(_ZNK17btConvexHullShape14getNumVerticesEv__index__);
+emit_32(_ZNK17btConvexHullShape11getNumEdgesEv__index__);
+emit_32(_ZNK17btConvexHullShape7getEdgeEiR9btVector3S1___index__);
+emit_32(_ZNK17btConvexHullShape9getVertexEiR9btVector3__index__);
+emit_32(_ZNK17btConvexHullShape12getNumPlanesEv__index__);
+emit_32(_ZNK17btConvexHullShape8getPlaneER9btVector3S1_i__index__);
+emit_32(_ZNK17btConvexHullShape8isInsideERK9btVector3f__index__);
+emit_start(_ZTI17btConvexHullShape)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTS17btConvexHullShape);
+emit_32(_ZTI34btPolyhedralConvexAabbCachingShape);
+emit_start(_ZTS17btConvexHullShape)
+emit_string('17btConvexHullShape\x00');
+emit_start(_ZTI34btPolyhedralConvexAabbCachingShape)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTS34btPolyhedralConvexAabbCachingShape);
+emit_32(_ZTI23btPolyhedralConvexShape);
+emit_start(_ZTS34btPolyhedralConvexAabbCachingShape)
+emit_string('34btPolyhedralConvexAabbCachingShape\x00');
+emit_start(_2E_str5223)
+emit_string('btVector3FloatData\x00');
+emit_start(_2E_str6224)
+emit_string('btConvexHullShapeData\x00');
+emit_start(_2E_str6232)
+emit_string('m_isLocalAabbValid\x00');
+emit_start(_ZTV13btConvexShape)
+emit_32(0);
+emit_32(_ZTI13btConvexShape);
+emit_32(_ZN13btConvexShapeD1Ev__index__);
+emit_32(_ZN13btConvexShapeD0Ev__index__);
+emit_32(__cxa_pure_virtual__index__);
+emit_32(_ZNK16btCollisionShape17getBoundingSphereER9btVector3Rf__index__);
+emit_32(_ZNK16btCollisionShape20getAngularMotionDiscEv__index__);
+emit_32(_ZNK16btCollisionShape27getContactBreakingThresholdEf__index__);
+emit_32(__cxa_pure_virtual__index__);
+emit_32(__cxa_pure_virtual__index__);
+emit_32(__cxa_pure_virtual__index__);
+emit_32(__cxa_pure_virtual__index__);
+emit_32(__cxa_pure_virtual__index__);
+emit_32(__cxa_pure_virtual__index__);
+emit_32(_ZNK16btCollisionShape28calculateSerializeBufferSizeEv__index__);
+emit_32(_ZNK16btCollisionShape9serializeEPvP12btSerializer__index__);
+emit_32(_ZNK16btCollisionShape20serializeSingleShapeEP12btSerializer__index__);
+emit_32(__cxa_pure_virtual__index__);
+emit_32(__cxa_pure_virtual__index__);
+emit_32(__cxa_pure_virtual__index__);
+emit_32(__cxa_pure_virtual__index__);
+emit_32(__cxa_pure_virtual__index__);
+emit_32(__cxa_pure_virtual__index__);
+emit_start(_2E_str6249)
+emit_string('ptIndex >= 0\x00');
+emit_start(_2E_str7250)
+emit_string('../../../../src/BulletCollision/CollisionShapes/btConvexShape.cpp\x00');
+emit_start(_ZTVZN14btOptimizedBvh5buildEP23btStridingMeshInterfacebRK9btVector3S4_E20NodeTriangleCallback)
+emit_32(0);
+emit_32(_ZTIZN14btOptimizedBvh5buildEP23btStridingMeshInterfacebRK9btVector3S4_E20NodeTriangleCallback);
+emit_32(_ZZN14btOptimizedBvh5buildEP23btStridingMeshInterfacebRK9btVector3S4_EN20NodeTriangleCallbackD1Ev__index__);
+emit_32(_ZZN14btOptimizedBvh5buildEP23btStridingMeshInterfacebRK9btVector3S4_EN20NodeTriangleCallbackD0Ev__index__);
+emit_32(_ZZN14btOptimizedBvh5buildEP23btStridingMeshInterfacebRK9btVector3S4_EN20NodeTriangleCallback28internalProcessTriangleIndexEPS2_ii__index__);
+emit_start(_ZTIZN14btOptimizedBvh5buildEP23btStridingMeshInterfacebRK9btVector3S4_E20NodeTriangleCallback)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTSZN14btOptimizedBvh5buildEP23btStridingMeshInterfacebRK9btVector3S4_E20NodeTriangleCallback);
+emit_32(_ZTI31btInternalTriangleIndexCallback);
+emit_start(_ZTSZN14btOptimizedBvh5buildEP23btStridingMeshInterfacebRK9btVector3S4_E20NodeTriangleCallback)
+emit_string('ZN14btOptimizedBvh5buildEP23btStridingMeshInterfacebRK9btVector3S4_E20NodeTriangleCallback\x00');
+emit_start(_ZTVZN14btOptimizedBvh5buildEP23btStridingMeshInterfacebRK9btVector3S4_E29QuantizedNodeTriangleCallback)
+emit_32(0);
+emit_32(_ZTIZN14btOptimizedBvh5buildEP23btStridingMeshInterfacebRK9btVector3S4_E29QuantizedNodeTriangleCallback);
+emit_32(_ZZN14btOptimizedBvh5buildEP23btStridingMeshInterfacebRK9btVector3S4_EN29QuantizedNodeTriangleCallbackD1Ev__index__);
+emit_32(_ZZN14btOptimizedBvh5buildEP23btStridingMeshInterfacebRK9btVector3S4_EN29QuantizedNodeTriangleCallbackD0Ev__index__);
+emit_32(_ZZN14btOptimizedBvh5buildEP23btStridingMeshInterfacebRK9btVector3S4_EN29QuantizedNodeTriangleCallback28internalProcessTriangleIndexEPS2_ii__index__);
+emit_start(_ZTIZN14btOptimizedBvh5buildEP23btStridingMeshInterfacebRK9btVector3S4_E29QuantizedNodeTriangleCallback)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTSZN14btOptimizedBvh5buildEP23btStridingMeshInterfacebRK9btVector3S4_E29QuantizedNodeTriangleCallback);
+emit_32(_ZTI31btInternalTriangleIndexCallback);
+emit_start(_ZTSZN14btOptimizedBvh5buildEP23btStridingMeshInterfacebRK9btVector3S4_E29QuantizedNodeTriangleCallback)
+emit_string('ZN14btOptimizedBvh5buildEP23btStridingMeshInterfacebRK9btVector3S4_E29QuantizedNodeTriangleCallback\x00');
+emit_start(_2E_str10306)
+emit_string('../../../../src/BulletCollision/CollisionShapes/btOptimizedBvh.cpp\x00');
+emit_start(_2E_str18314)
+emit_string('partId < (1<<MAX_NUM_PARTS_IN_BITS)\x00');
+emit_start(_2E_str19315)
+emit_string('triangleIndex < (1<<(31-MAX_NUM_PARTS_IN_BITS))\x00');
+emit_start(_2E_str20316)
+emit_string('triangleIndex>=0\x00');
+emit_start(_ZTV14btOptimizedBvh)
+emit_32(0);
+emit_32(_ZTI14btOptimizedBvh);
+emit_32(_ZN14btOptimizedBvhD1Ev__index__);
+emit_32(_ZN14btOptimizedBvhD0Ev__index__);
+emit_32(_ZNK14btQuantizedBvh9serializeEPvjb__index__);
+emit_32(_ZNK14btQuantizedBvh31calculateSerializeBufferSizeNewEv__index__);
+emit_32(_ZNK14btQuantizedBvh9serializeEPvP12btSerializer__index__);
+emit_32(_ZN14btQuantizedBvh16deSerializeFloatER23btQuantizedBvhFloatData__index__);
+emit_32(_ZN14btQuantizedBvh17deSerializeDoubleER24btQuantizedBvhDoubleData__index__);
+emit_32(_ZNK14btOptimizedBvh16serializeInPlaceEPvjb__index__);
+emit_start(_ZTI14btOptimizedBvh)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTS14btOptimizedBvh);
+emit_32(_ZTI14btQuantizedBvh);
+emit_start(_ZTS14btOptimizedBvh)
+emit_string('14btOptimizedBvh\x00');
+emit_start(_2E_str7331)
+emit_string('../../../../src/BulletCollision/CollisionShapes/btPolyhedralConvexShape.h\x00');
+emit_start(_2E_str342)
+emit_string('SPHERE\x00');
+emit_start(_ZTV13btSphereShape)
+emit_32(0);
+emit_32(_ZTI13btSphereShape);
+emit_32(_ZN13btSphereShapeD1Ev__index__);
+emit_32(_ZN13btSphereShapeD0Ev__index__);
+emit_32(_ZNK13btSphereShape7getAabbERK11btTransformR9btVector3S4___index__);
+emit_32(_ZNK16btCollisionShape17getBoundingSphereER9btVector3Rf__index__);
+emit_32(_ZNK16btCollisionShape20getAngularMotionDiscEv__index__);
+emit_32(_ZNK16btCollisionShape27getContactBreakingThresholdEf__index__);
+emit_32(_ZN21btConvexInternalShape15setLocalScalingERK9btVector3__index__);
+emit_32(_ZNK21btConvexInternalShape15getLocalScalingEv__index__);
+emit_32(_ZNK13btSphereShape21calculateLocalInertiaEfR9btVector3__index__);
+emit_32(_ZNK13btSphereShape7getNameEv__index__);
+emit_32(_ZN13btSphereShape9setMarginEf__index__);
+emit_32(_ZNK13btSphereShape9getMarginEv__index__);
+emit_32(_ZNK21btConvexInternalShape28calculateSerializeBufferSizeEv__index__);
+emit_32(_ZNK21btConvexInternalShape9serializeEPvP12btSerializer__index__);
+emit_32(_ZNK16btCollisionShape20serializeSingleShapeEP12btSerializer__index__);
+emit_32(_ZNK13btSphereShape24localGetSupportingVertexERK9btVector3__index__);
+emit_32(_ZNK13btSphereShape37localGetSupportingVertexWithoutMarginERK9btVector3__index__);
+emit_32(_ZNK13btSphereShape49batchedUnitVectorGetSupportingVertexWithoutMarginEPK9btVector3PS0_i__index__);
+emit_32(_ZNK21btConvexInternalShape11getAabbSlowERK11btTransformR9btVector3S4___index__);
+emit_32(_ZNK21btConvexInternalShape36getNumPreferredPenetrationDirectionsEv__index__);
+emit_32(_ZNK21btConvexInternalShape32getPreferredPenetrationDirectionEiR9btVector3__index__);
+emit_start(_ZTI13btSphereShape)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTS13btSphereShape);
+emit_32(_ZTI21btConvexInternalShape);
+emit_start(_ZTS13btSphereShape)
+emit_string('13btSphereShape\x00');
+emit_start(_2E_str349)
+emit_string('btIntIndexData\x00');
+emit_start(_2E_str1350)
+emit_string('btShortIntIndexTripletData\x00');
+emit_start(_2E_str3352)
+emit_string('../../../../src/BulletCollision/CollisionShapes/btStridingMeshInterface.cpp\x00');
+emit_start(_2E_str5354)
+emit_string('btVector3DoubleData\x00');
+emit_start(_2E_str6355)
+emit_string('(type == PHY_FLOAT) || (type == PHY_DOUBLE)\x00');
+emit_start(_2E_str7356)
+emit_string('btMeshPartData\x00');
+emit_start(_2E_str8357)
+emit_string('btStridingMeshInterfaceData\x00');
+emit_start(_2E_str9358)
+emit_string('(gfxindextype == PHY_INTEGER) || (gfxindextype == PHY_SHORT)\x00');
+emit_start(_ZTV23btStridingMeshInterface)
+emit_32(0);
+emit_32(_ZTI23btStridingMeshInterface);
+emit_32(_ZN23btStridingMeshInterfaceD1Ev__index__);
+emit_32(_ZN23btStridingMeshInterfaceD0Ev__index__);
+emit_32(_ZNK23btStridingMeshInterface27InternalProcessAllTrianglesEP31btInternalTriangleIndexCallbackRK9btVector3S4___index__);
+emit_32(__cxa_pure_virtual__index__);
+emit_32(__cxa_pure_virtual__index__);
+emit_32(__cxa_pure_virtual__index__);
+emit_32(__cxa_pure_virtual__index__);
+emit_32(__cxa_pure_virtual__index__);
+emit_32(__cxa_pure_virtual__index__);
+emit_32(__cxa_pure_virtual__index__);
+emit_32(_ZNK23btStridingMeshInterface14hasPremadeAabbEv__index__);
+emit_32(_ZNK23btStridingMeshInterface14setPremadeAabbERK9btVector3S2___index__);
+emit_32(_ZNK23btStridingMeshInterface14getPremadeAabbEP9btVector3S1___index__);
+emit_32(_ZNK23btStridingMeshInterface28calculateSerializeBufferSizeEv__index__);
+emit_32(_ZNK23btStridingMeshInterface9serializeEPvP12btSerializer__index__);
+emit_start(_ZTI23btStridingMeshInterface)
+emit_32(_ZTVN10__cxxabiv117__class_type_infoE+8);
+emit_32(_ZTS23btStridingMeshInterface);
+emit_start(_ZTS23btStridingMeshInterface)
+emit_string('23btStridingMeshInterface\x00');
+emit_start(_ZTV31btInternalTriangleIndexCallback)
+emit_32(0);
+emit_32(_ZTI31btInternalTriangleIndexCallback);
+emit_32(_ZN31btInternalTriangleIndexCallbackD1Ev__index__);
+emit_32(_ZN31btInternalTriangleIndexCallbackD0Ev__index__);
+emit_32(__cxa_pure_virtual__index__);
+emit_start(_ZTV18btTriangleCallback)
+emit_32(0);
+emit_32(_ZTI18btTriangleCallback);
+emit_32(_ZN18btTriangleCallbackD1Ev__index__);
+emit_32(_ZN18btTriangleCallbackD0Ev__index__);
+emit_32(__cxa_pure_virtual__index__);
+emit_start(_2E_str367)
+emit_string('subpart< getNumSubParts()\x00');
+emit_start(_2E_str1368)
+emit_string('../../../../src/BulletCollision/CollisionShapes/btTriangleIndexVertexArray.cpp\x00');
+emit_start(_ZTV26btTriangleIndexVertexArray)
+emit_32(0);
+emit_32(_ZTI26btTriangleIndexVertexArray);
+emit_32(_ZN26btTriangleIndexVertexArrayD1Ev__index__);
+emit_32(_ZN26btTriangleIndexVertexArrayD0Ev__index__);
+emit_32(_ZNK23btStridingMeshInterface27InternalProcessAllTrianglesEP31btInternalTriangleIndexCallbackRK9btVector3S4___index__);
+emit_32(_ZN26btTriangleIndexVertexArray24getLockedVertexIndexBaseEPPhRiR14PHY_ScalarTypeS2_S1_S2_S2_S4_i__index__);
+emit_32(_ZNK26btTriangleIndexVertexArray32getLockedReadOnlyVertexIndexBaseEPPKhRiR14PHY_ScalarTypeS3_S2_S3_S3_S5_i__index__);
+emit_32(_ZN26btTriangleIndexVertexArray16unLockVertexBaseEi__index__);
+emit_32(_ZNK26btTriangleIndexVertexArray24unLockReadOnlyVertexBaseEi__index__);
+emit_32(_ZNK26btTriangleIndexVertexArray14getNumSubPartsEv__index__);
+emit_32(_ZN26btTriangleIndexVertexArray19preallocateVerticesEi__index__);
+emit_32(_ZN26btTriangleIndexVertexArray18preallocateIndicesEi__index__);
+emit_32(_ZNK26btTriangleIndexVertexArray14hasPremadeAabbEv__index__);
+emit_32(_ZNK26btTriangleIndexVertexArray14setPremadeAabbERK9btVector3S2___index__);
+emit_32(_ZNK26btTriangleIndexVertexArray14getPremadeAabbEP9btVector3S1___index__);
+emit_32(_ZNK23btStridingMeshInterface28calculateSerializeBufferSizeEv__index__);
+emit_32(_ZNK23btStridingMeshInterface9serializeEPvP12btSerializer__index__);
+emit_start(_ZTI26btTriangleIndexVertexArray)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTS26btTriangleIndexVertexArray);
+emit_32(_ZTI23btStridingMeshInterface);
+emit_start(_ZTS26btTriangleIndexVertexArray)
+emit_string('26btTriangleIndexVertexArray\x00');
+emit_start(_2E_str372)
+emit_string('TRIANGLEMESH\x00');
+emit_start(_ZTV21SupportVertexCallback)
+emit_32(0);
+emit_32(_ZTI21SupportVertexCallback);
+emit_32(_ZN21SupportVertexCallbackD1Ev__index__);
+emit_32(_ZN21SupportVertexCallbackD0Ev__index__);
+emit_32(_ZN21SupportVertexCallback15processTriangleEP9btVector3ii__index__);
+emit_start(_ZTI21SupportVertexCallback)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTS21SupportVertexCallback);
+emit_32(_ZTI18btTriangleCallback);
+emit_start(_ZTS21SupportVertexCallback)
+emit_string('21SupportVertexCallback\x00');
+emit_start(_ZTVZNK19btTriangleMeshShape19processAllTrianglesEP18btTriangleCallbackRK9btVector3S4_E16FilteredCallback)
+emit_32(0);
+emit_32(_ZTIZNK19btTriangleMeshShape19processAllTrianglesEP18btTriangleCallbackRK9btVector3S4_E16FilteredCallback);
+emit_32(_ZZNK19btTriangleMeshShape19processAllTrianglesEP18btTriangleCallbackRK9btVector3S4_EN16FilteredCallbackD1Ev__index__);
+emit_32(_ZZNK19btTriangleMeshShape19processAllTrianglesEP18btTriangleCallbackRK9btVector3S4_EN16FilteredCallbackD0Ev__index__);
+emit_32(_ZZNK19btTriangleMeshShape19processAllTrianglesEP18btTriangleCallbackRK9btVector3S4_EN16FilteredCallback28internalProcessTriangleIndexEPS2_ii__index__);
+emit_start(_ZTIZNK19btTriangleMeshShape19processAllTrianglesEP18btTriangleCallbackRK9btVector3S4_E16FilteredCallback)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTSZNK19btTriangleMeshShape19processAllTrianglesEP18btTriangleCallbackRK9btVector3S4_E16FilteredCallback);
+emit_32(_ZTI31btInternalTriangleIndexCallback);
+emit_start(_ZTSZNK19btTriangleMeshShape19processAllTrianglesEP18btTriangleCallbackRK9btVector3S4_E16FilteredCallback)
+emit_string('ZNK19btTriangleMeshShape19processAllTrianglesEP18btTriangleCallbackRK9btVector3S4_E16FilteredCallback\x00');
+emit_start(_2E_str3375)
+emit_string('../../../../src/BulletCollision/CollisionShapes/btTriangleMeshShape.cpp\x00');
+emit_start(_ZTV19btTriangleMeshShape)
+emit_32(0);
+emit_32(_ZTI19btTriangleMeshShape);
+emit_32(_ZN19btTriangleMeshShapeD1Ev__index__);
+emit_32(_ZN19btTriangleMeshShapeD0Ev__index__);
+emit_32(_ZNK19btTriangleMeshShape7getAabbERK11btTransformR9btVector3S4___index__);
+emit_32(_ZNK16btCollisionShape17getBoundingSphereER9btVector3Rf__index__);
+emit_32(_ZNK16btCollisionShape20getAngularMotionDiscEv__index__);
+emit_32(_ZNK16btCollisionShape27getContactBreakingThresholdEf__index__);
+emit_32(_ZN19btTriangleMeshShape15setLocalScalingERK9btVector3__index__);
+emit_32(_ZNK19btTriangleMeshShape15getLocalScalingEv__index__);
+emit_32(_ZNK19btTriangleMeshShape21calculateLocalInertiaEfR9btVector3__index__);
+emit_32(_ZNK19btTriangleMeshShape7getNameEv__index__);
+emit_32(_ZN14btConcaveShape9setMarginEf__index__);
+emit_32(_ZNK14btConcaveShape9getMarginEv__index__);
+emit_32(_ZNK16btCollisionShape28calculateSerializeBufferSizeEv__index__);
+emit_32(_ZNK16btCollisionShape9serializeEPvP12btSerializer__index__);
+emit_32(_ZNK16btCollisionShape20serializeSingleShapeEP12btSerializer__index__);
+emit_32(_ZNK19btTriangleMeshShape19processAllTrianglesEP18btTriangleCallbackRK9btVector3S4___index__);
+emit_32(_ZNK19btTriangleMeshShape24localGetSupportingVertexERK9btVector3__index__);
+emit_32(_ZNK19btTriangleMeshShape37localGetSupportingVertexWithoutMarginERK9btVector3__index__);
+emit_start(_ZTV16btPointCollector)
+emit_32(0);
+emit_32(_ZTI16btPointCollector);
+emit_32(_ZN16btPointCollectorD1Ev__index__);
+emit_32(_ZN16btPointCollectorD0Ev__index__);
+emit_32(_ZN16btPointCollector20setShapeIdentifiersAEii__index__);
+emit_32(_ZN16btPointCollector20setShapeIdentifiersBEii__index__);
+emit_32(_ZN16btPointCollector15addContactPointERK9btVector3S2_f__index__);
+emit_start(_ZTI16btPointCollector)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTS16btPointCollector);
+emit_32(_ZTIN36btDiscreteCollisionDetectorInterface6ResultE);
+emit_start(_ZTS16btPointCollector)
+emit_string('16btPointCollector\x00');
+emit_start(_ZTV27btContinuousConvexCollision)
+emit_32(0);
+emit_32(_ZTI27btContinuousConvexCollision);
+emit_32(_ZN27btContinuousConvexCollisionD1Ev__index__);
+emit_32(_ZN27btContinuousConvexCollisionD0Ev__index__);
+emit_32(_ZN27btContinuousConvexCollision16calcTimeOfImpactERK11btTransformS2_S2_S2_RN12btConvexCast10CastResultE__index__);
+emit_start(_ZTI27btContinuousConvexCollision)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTS27btContinuousConvexCollision);
+emit_32(_ZTI12btConvexCast);
+emit_start(_ZTS27btContinuousConvexCollision)
+emit_string('27btContinuousConvexCollision\x00');
+emit_start(_ZTI12btConvexCast)
+emit_32(_ZTVN10__cxxabiv117__class_type_infoE+8);
+emit_32(_ZTS12btConvexCast);
+emit_start(_ZTS12btConvexCast)
+emit_string('12btConvexCast\x00');
+emit_start(_ZTV12btConvexCast)
+emit_32(0);
+emit_32(_ZTI12btConvexCast);
+emit_32(_ZN12btConvexCastD1Ev__index__);
+emit_32(_ZN12btConvexCastD0Ev__index__);
+emit_32(__cxa_pure_virtual__index__);
+emit_start(_ZTV15btGjkConvexCast)
+emit_32(0);
+emit_32(_ZTI15btGjkConvexCast);
+emit_32(_ZN15btGjkConvexCastD1Ev__index__);
+emit_32(_ZN15btGjkConvexCastD0Ev__index__);
+emit_32(_ZN15btGjkConvexCast16calcTimeOfImpactERK11btTransformS2_S2_S2_RN12btConvexCast10CastResultE__index__);
+emit_start(_ZTI15btGjkConvexCast)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTS15btGjkConvexCast);
+emit_32(_ZTI12btConvexCast);
+emit_start(_ZTS15btGjkConvexCast)
+emit_string('15btGjkConvexCast\x00');
+emit_start(_ZZN12gjkepa2_impl3GJK13projectoriginERK9btVector3S3_S3_PfRjE4imd3)
+emit_32(1);
+emit_32(2);
+emit_32(0);
+emit_start(_ZZN12gjkepa2_impl3EPA6expandEjPNS_3GJK3sSVEPNS0_5sFaceEjRNS0_8sHorizonEE4i2m3)
+emit_32(2);
+emit_32(0);
+emit_32(1);
+emit_start(_ZTV30btGjkEpaPenetrationDepthSolver)
+emit_32(0);
+emit_32(_ZTI30btGjkEpaPenetrationDepthSolver);
+emit_32(_ZN30btGjkEpaPenetrationDepthSolverD1Ev__index__);
+emit_32(_ZN30btGjkEpaPenetrationDepthSolverD0Ev__index__);
+emit_32(_ZN30btGjkEpaPenetrationDepthSolver12calcPenDepthER22btVoronoiSimplexSolverPK13btConvexShapeS4_RK11btTransformS7_R9btVector3S9_S9_P12btIDebugDrawP12btStackAlloc__index__);
+emit_start(_ZTI30btGjkEpaPenetrationDepthSolver)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTS30btGjkEpaPenetrationDepthSolver);
+emit_32(_ZTI30btConvexPenetrationDepthSolver);
+emit_start(_ZTS30btGjkEpaPenetrationDepthSolver)
+emit_string('30btGjkEpaPenetrationDepthSolver\x00');
+emit_start(_ZTV17btGjkPairDetector)
+emit_32(0);
+emit_32(_ZTI17btGjkPairDetector);
+emit_32(_ZN17btGjkPairDetectorD1Ev__index__);
+emit_32(_ZN17btGjkPairDetectorD0Ev__index__);
+emit_32(_ZN17btGjkPairDetector16getClosestPointsERKN36btDiscreteCollisionDetectorInterface17ClosestPointInputERNS0_6ResultEP12btIDebugDrawb__index__);
+emit_start(_ZTI17btGjkPairDetector)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTS17btGjkPairDetector);
+emit_32(_ZTI36btDiscreteCollisionDetectorInterface);
+emit_start(_ZTS17btGjkPairDetector)
+emit_string('17btGjkPairDetector\x00');
+emit_start(_2E_str425)
+emit_string('btGjkPairDetector maxIter exceeded:%i\x0a\x00');
+emit_start(_2E_str1426)
+emit_string('sepAxis=(%f,%f,%f), squaredDistance = %f, shapeTypeA=%i,shapeTypeB=%i\x0a\x00');
+emit_start(_2E_str2427)
+emit_string('s > btScalar(0.0)\x00');
+emit_start(_2E_str3428)
+emit_string('../../../../src/BulletCollision/NarrowPhaseCollision/btGjkPairDetector.cpp\x00');
+emit_start(gContactBreakingThreshold)
+emit_32(1017370378);
+emit_start(_2E_str434)
+emit_string('m_pointCache[lastUsedIndex].m_userPersistentData==0\x00');
+emit_start(_2E_str3437)
+emit_string('../../../../src/BulletCollision/NarrowPhaseCollision/btPersistentManifold.cpp\x00');
+emit_start(_2E_str4438)
+emit_string('m_pointCache[insertIndex].m_userPersistentData==0\x00');
+emit_start(_ZTV28btTriangleConvexcastCallback)
+emit_32(0);
+emit_32(_ZTI28btTriangleConvexcastCallback);
+emit_32(_ZN28btTriangleConvexcastCallbackD1Ev__index__);
+emit_32(_ZN28btTriangleConvexcastCallbackD0Ev__index__);
+emit_32(_ZN28btTriangleConvexcastCallback15processTriangleEP9btVector3ii__index__);
+emit_32(__cxa_pure_virtual__index__);
+emit_start(_ZTV22btSubsimplexConvexCast)
+emit_32(0);
+emit_32(_ZTI22btSubsimplexConvexCast);
+emit_32(_ZN22btSubsimplexConvexCastD1Ev__index__);
+emit_32(_ZN22btSubsimplexConvexCastD0Ev__index__);
+emit_32(_ZN22btSubsimplexConvexCast16calcTimeOfImpactERK11btTransformS2_S2_S2_RN12btConvexCast10CastResultE__index__);
+emit_start(_ZTI22btSubsimplexConvexCast)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTS22btSubsimplexConvexCast);
+emit_32(_ZTI12btConvexCast);
+emit_start(_ZTS22btSubsimplexConvexCast)
+emit_string('22btSubsimplexConvexCast\x00');
+emit_start(_2E_str457)
+emit_string('m_numVertices>0\x00');
+emit_start(_2E_str1458)
+emit_string('../../../../src/BulletCollision/NarrowPhaseCollision/btVoronoiSimplexSolver.cpp\x00');
+emit_start(_ZTVN16btCollisionWorld27ClosestConvexResultCallbackE)
+emit_32(0);
+emit_32(_ZTIN16btCollisionWorld27ClosestConvexResultCallbackE);
+emit_32(_ZN16btCollisionWorld27ClosestConvexResultCallbackD1Ev__index__);
+emit_32(_ZN16btCollisionWorld27ClosestConvexResultCallbackD0Ev__index__);
+emit_32(_ZNK16btCollisionWorld20ConvexResultCallback14needsCollisionEP17btBroadphaseProxy__index__);
+emit_32(_ZN16btCollisionWorld27ClosestConvexResultCallback15addSingleResultERNS_17LocalConvexResultEb__index__);
+emit_start(_ZTIN16btCollisionWorld27ClosestConvexResultCallbackE)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTSN16btCollisionWorld27ClosestConvexResultCallbackE);
+emit_32(_ZTIN16btCollisionWorld20ConvexResultCallbackE);
+emit_start(_ZTSN16btCollisionWorld27ClosestConvexResultCallbackE)
+emit_string('N16btCollisionWorld27ClosestConvexResultCallbackE\x00');
+emit_start(_2E_str36)
+emit_string('convexResult.m_hitFraction <= m_closestHitFraction\x00');
+emit_start(_2E_str239)
+emit_string('btConeTwistConstraintData\x00');
+emit_start(_ZTV21btConeTwistConstraint)
+emit_32(0);
+emit_32(_ZTI21btConeTwistConstraint);
+emit_32(_ZN21btConeTwistConstraintD1Ev__index__);
+emit_32(_ZN21btConeTwistConstraintD0Ev__index__);
+emit_32(_ZN21btConeTwistConstraint13buildJacobianEv__index__);
+emit_32(_ZN17btTypedConstraint21setupSolverConstraintER20btAlignedObjectArrayI18btSolverConstraintEiif__index__);
+emit_32(_ZN21btConeTwistConstraint8getInfo1EPN17btTypedConstraint17btConstraintInfo1E__index__);
+emit_32(_ZN21btConeTwistConstraint8getInfo2EPN17btTypedConstraint17btConstraintInfo2E__index__);
+emit_32(_ZN21btConeTwistConstraint23solveConstraintObsoleteER11btRigidBodyS1_f__index__);
+emit_32(_ZN21btConeTwistConstraint8setParamEifi__index__);
+emit_32(_ZNK21btConeTwistConstraint8getParamEii__index__);
+emit_32(_ZNK21btConeTwistConstraint28calculateSerializeBufferSizeEv__index__);
+emit_32(_ZNK21btConeTwistConstraint9serializeEPvP12btSerializer__index__);
+emit_start(_ZTI21btConeTwistConstraint)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTS21btConeTwistConstraint);
+emit_32(_ZTI17btTypedConstraint);
+emit_start(_ZTS21btConeTwistConstraint)
+emit_string('21btConeTwistConstraint\x00');
+emit_start(_2E_str1340)
+emit_string('m_flags & BT_CONETWIST_FLAGS_LIN_ERP\x00');
+emit_start(_2E_str24)
+emit_string('../../../../src/BulletDynamics/ConstraintSolver/btConeTwistConstraint.cpp\x00');
+emit_start(_2E_str442)
+emit_string('m_flags & BT_CONETWIST_FLAGS_LIN_CFM\x00');
+emit_start(_2E_str543)
+emit_string('m_flags & BT_CONETWIST_FLAGS_ANG_CFM\x00');
+emit_start(_2E_str846)
+emit_string('m_Adiag > btScalar(0.0)\x00');
+emit_start(_2E_str947)
+emit_string('../../../../src/BulletDynamics/ConstraintSolver/btJacobianEntry.h\x00');
+emit_start(_2E_str1149)
+emit_string('!m_useSolveConstraintObsolete\x00');
+emit_start(_2E_str29)
+emit_string('btHingeConstraintFloatData\x00');
+emit_start(_ZTV17btHingeConstraint)
+emit_32(0);
+emit_32(_ZTI17btHingeConstraint);
+emit_32(_ZN17btHingeConstraintD1Ev__index__);
+emit_32(_ZN17btHingeConstraintD0Ev__index__);
+emit_32(_ZN17btHingeConstraint13buildJacobianEv__index__);
+emit_32(_ZN17btTypedConstraint21setupSolverConstraintER20btAlignedObjectArrayI18btSolverConstraintEiif__index__);
+emit_32(_ZN17btHingeConstraint8getInfo1EPN17btTypedConstraint17btConstraintInfo1E__index__);
+emit_32(_ZN17btHingeConstraint8getInfo2EPN17btTypedConstraint17btConstraintInfo2E__index__);
+emit_32(_ZN17btTypedConstraint23solveConstraintObsoleteER11btRigidBodyS1_f__index__);
+emit_32(_ZN17btHingeConstraint8setParamEifi__index__);
+emit_32(_ZNK17btHingeConstraint8getParamEii__index__);
+emit_32(_ZNK17btHingeConstraint28calculateSerializeBufferSizeEv__index__);
+emit_32(_ZNK17btHingeConstraint9serializeEPvP12btSerializer__index__);
+emit_start(_ZTI17btHingeConstraint)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTS17btHingeConstraint);
+emit_32(_ZTI17btTypedConstraint);
+emit_start(_ZTS17btHingeConstraint)
+emit_string('17btHingeConstraint\x00');
+emit_start(_2E_str130)
+emit_string('m_flags & BT_HINGE_FLAGS_ERP_STOP\x00');
+emit_start(_2E_str231)
+emit_string('../../../../src/BulletDynamics/ConstraintSolver/btHingeConstraint.cpp\x00');
+emit_start(_2E_str332)
+emit_string('m_flags & BT_HINGE_FLAGS_CFM_STOP\x00');
+emit_start(_2E_str433)
+emit_string('m_flags & BT_HINGE_FLAGS_CFM_NORM\x00');
+emit_start(_ZTI18btConstraintSolver)
+emit_32(_ZTVN10__cxxabiv117__class_type_infoE+8);
+emit_32(_ZTS18btConstraintSolver);
+emit_start(_ZTS18btConstraintSolver)
+emit_string('18btConstraintSolver\x00');
+emit_start(_ZTV35btSequentialImpulseConstraintSolver)
+emit_32(0);
+emit_32(_ZTI35btSequentialImpulseConstraintSolver);
+emit_32(_ZN35btSequentialImpulseConstraintSolverD1Ev__index__);
+emit_32(_ZN35btSequentialImpulseConstraintSolverD0Ev__index__);
+emit_32(_ZN18btConstraintSolver12prepareSolveEii__index__);
+emit_32(_ZN35btSequentialImpulseConstraintSolver10solveGroupEPP17btCollisionObjectiPP20btPersistentManifoldiPP17btTypedConstraintiRK19btContactSolverInfoP12btIDebugDrawP12btStackAllocP12btDispatcher__index__);
+emit_32(_ZN18btConstraintSolver9allSolvedERK19btContactSolverInfoP12btIDebugDrawP12btStackAlloc__index__);
+emit_32(_ZN35btSequentialImpulseConstraintSolver5resetEv__index__);
+emit_32(_ZN35btSequentialImpulseConstraintSolver45solveGroupCacheFriendlySplitImpulseIterationsEPP17btCollisionObjectiPP20btPersistentManifoldiPP17btTypedConstraintiRK19btContactSolverInfoP12btIDebugDrawP12btStackAlloc__index__);
+emit_32(_ZN35btSequentialImpulseConstraintSolver29solveGroupCacheFriendlyFinishEPP17btCollisionObjectiPP20btPersistentManifoldiPP17btTypedConstraintiRK19btContactSolverInfoP12btIDebugDrawP12btStackAlloc__index__);
+emit_32(_ZN35btSequentialImpulseConstraintSolver28solveGroupCacheFriendlySetupEPP17btCollisionObjectiPP20btPersistentManifoldiPP17btTypedConstraintiRK19btContactSolverInfoP12btIDebugDrawP12btStackAlloc__index__);
+emit_32(_ZN35btSequentialImpulseConstraintSolver33solveGroupCacheFriendlyIterationsEPP17btCollisionObjectiPP20btPersistentManifoldiPP17btTypedConstraintiRK19btContactSolverInfoP12btIDebugDrawP12btStackAlloc__index__);
+emit_start(_ZTI35btSequentialImpulseConstraintSolver)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTS35btSequentialImpulseConstraintSolver);
+emit_32(_ZTI18btConstraintSolver);
+emit_start(_ZTS35btSequentialImpulseConstraintSolver)
+emit_string('35btSequentialImpulseConstraintSolver\x00');
+emit_start(_2E_str248)
+emit_string('m_constraintRefs.size()==0\x00');
+emit_start(_2E_str34955)
+emit_string('../../../../src/BulletDynamics/Dynamics/btRigidBody.h\x00');
+emit_start(_2E_str450)
+emit_string('solveGroup\x00');
+emit_start(_2E_str551)
+emit_string('bodies\x00');
+emit_start(_2E_str652)
+emit_string('../../../../src/BulletDynamics/ConstraintSolver/btSequentialImpulseConstraintSolver.cpp\x00');
+emit_start(_2E_str753)
+emit_string('numBodies\x00');
+emit_start(_2E_str854)
+emit_string('solveGroupCacheFriendlyIterations\x00');
+emit_start(_2E_str955)
+emit_string('pt\x00');
+emit_start(_2E_str1056)
+emit_string('solveGroupCacheFriendlySetup\x00');
+emit_start(_2E_str1157)
+emit_string('currentRow<totalNumRows\x00');
+emit_start(_2E_str76)
+emit_string('btTypedConstraintData\x00');
+emit_start(_ZTI23btDiscreteDynamicsWorld)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTS23btDiscreteDynamicsWorld);
+emit_32(_ZTI15btDynamicsWorld);
+emit_start(_ZTS23btDiscreteDynamicsWorld)
+emit_string('23btDiscreteDynamicsWorld\x00');
+emit_start(_ZTI15btDynamicsWorld)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTS15btDynamicsWorld);
+emit_32(_ZTI16btCollisionWorld);
+emit_start(_ZTS15btDynamicsWorld)
+emit_string('15btDynamicsWorld\x00');
+emit_start(_ZTIN25btSimulationIslandManager14IslandCallbackE)
+emit_32(_ZTVN10__cxxabiv117__class_type_infoE+8);
+emit_32(_ZTSN25btSimulationIslandManager14IslandCallbackE);
+emit_start(_ZTSN25btSimulationIslandManager14IslandCallbackE)
+emit_string('N25btSimulationIslandManager14IslandCallbackE\x00');
+emit_start(_ZTV34btClosestNotMeConvexResultCallback)
+emit_32(0);
+emit_32(_ZTI34btClosestNotMeConvexResultCallback);
+emit_32(_ZN34btClosestNotMeConvexResultCallbackD1Ev__index__);
+emit_32(_ZN34btClosestNotMeConvexResultCallbackD0Ev__index__);
+emit_32(_ZNK34btClosestNotMeConvexResultCallback14needsCollisionEP17btBroadphaseProxy__index__);
+emit_32(_ZN34btClosestNotMeConvexResultCallback15addSingleResultERN16btCollisionWorld17LocalConvexResultEb__index__);
+emit_start(_ZTI34btClosestNotMeConvexResultCallback)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTS34btClosestNotMeConvexResultCallback);
+emit_32(_ZTIN16btCollisionWorld27ClosestConvexResultCallbackE);
+emit_start(_ZTS34btClosestNotMeConvexResultCallback)
+emit_string('34btClosestNotMeConvexResultCallback\x00');
+emit_start(_ZTVZN23btDiscreteDynamicsWorld16solveConstraintsER19btContactSolverInfoE27InplaceSolverIslandCallback)
+emit_32(0);
+emit_32(_ZTIZN23btDiscreteDynamicsWorld16solveConstraintsER19btContactSolverInfoE27InplaceSolverIslandCallback);
+emit_32(_ZZN23btDiscreteDynamicsWorld16solveConstraintsER19btContactSolverInfoEN27InplaceSolverIslandCallbackD1Ev__index__);
+emit_32(_ZZN23btDiscreteDynamicsWorld16solveConstraintsER19btContactSolverInfoEN27InplaceSolverIslandCallbackD0Ev__index__);
+emit_32(_ZZN23btDiscreteDynamicsWorld16solveConstraintsER19btContactSolverInfoEN27InplaceSolverIslandCallback13ProcessIslandEPP17btCollisionObjectiPP20btPersistentManifoldii__index__);
+emit_start(_ZTIZN23btDiscreteDynamicsWorld16solveConstraintsER19btContactSolverInfoE27InplaceSolverIslandCallback)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTSZN23btDiscreteDynamicsWorld16solveConstraintsER19btContactSolverInfoE27InplaceSolverIslandCallback);
+emit_32(_ZTIN25btSimulationIslandManager14IslandCallbackE);
+emit_start(_ZTSZN23btDiscreteDynamicsWorld16solveConstraintsER19btContactSolverInfoE27InplaceSolverIslandCallback)
+emit_string('ZN23btDiscreteDynamicsWorld16solveConstraintsER19btContactSolverInfoE27InplaceSolverIslandCallback\x00');
+emit_start(_2E_str87)
+emit_string('predictUnconstraintMotion\x00');
+emit_start(_2E_str188)
+emit_string('calculateSimulationIslands\x00');
+emit_start(_2E_str289)
+emit_string('updateActions\x00');
+emit_start(_2E_str794)
+emit_string('integrateTransforms\x00');
+emit_start(_2E_str895)
+emit_string('CCD motion clamping\x00');
+emit_start(_2E_str996)
+emit_string('solveConstraints\x00');
+emit_start(_2E_str1097)
+emit_string('updateActivationState\x00');
+emit_start(_2E_str1198)
+emit_string('internalSingleStepSimulation\x00');
+emit_start(_2E_str1299)
+emit_string('stepSimulation\x00');
+emit_start(_2E_str13100)
+emit_string('body\x00');
+emit_start(_2E_str1461)
+emit_string('../../../../src/BulletDynamics/Dynamics/btDiscreteDynamicsWorld.cpp\x00');
+emit_start(_2E_str1562)
+emit_string('synchronizeMotionStates\x00');
+emit_start(_2E_str16101)
+emit_string('debugDrawWorld\x00');
+emit_start(_ZTV15btDynamicsWorld)
+emit_32(0);
+emit_32(_ZTI15btDynamicsWorld);
+emit_32(_ZN15btDynamicsWorldD1Ev__index__);
+emit_32(_ZN15btDynamicsWorldD0Ev__index__);
+emit_32(_ZN16btCollisionWorld11updateAabbsEv__index__);
+emit_32(_ZN16btCollisionWorld14setDebugDrawerEP12btIDebugDraw__index__);
+emit_32(_ZN16btCollisionWorld14getDebugDrawerEv__index__);
+emit_32(__cxa_pure_virtual__index__);
+emit_32(_ZN16btCollisionWorld15debugDrawObjectERK11btTransformPK16btCollisionShapeRK9btVector3__index__);
+emit_32(_ZNK16btCollisionWorld7rayTestERK9btVector3S2_RNS_17RayResultCallbackE__index__);
+emit_32(_ZN16btCollisionWorld18addCollisionObjectEP17btCollisionObjectss__index__);
+emit_32(_ZN16btCollisionWorld21removeCollisionObjectEP17btCollisionObject__index__);
+emit_32(_ZN16btCollisionWorld33performDiscreteCollisionDetectionEv__index__);
+emit_32(_ZN16btCollisionWorld9serializeEP12btSerializer__index__);
+emit_32(__cxa_pure_virtual__index__);
+emit_32(_ZN15btDynamicsWorld13addConstraintEP17btTypedConstraintb__index__);
+emit_32(_ZN15btDynamicsWorld16removeConstraintEP17btTypedConstraint__index__);
+emit_32(__cxa_pure_virtual__index__);
+emit_32(__cxa_pure_virtual__index__);
+emit_32(__cxa_pure_virtual__index__);
+emit_32(__cxa_pure_virtual__index__);
+emit_32(__cxa_pure_virtual__index__);
+emit_32(__cxa_pure_virtual__index__);
+emit_32(__cxa_pure_virtual__index__);
+emit_32(__cxa_pure_virtual__index__);
+emit_32(__cxa_pure_virtual__index__);
+emit_32(_ZNK15btDynamicsWorld17getNumConstraintsEv__index__);
+emit_32(_ZN15btDynamicsWorld13getConstraintEi__index__);
+emit_32(_ZNK15btDynamicsWorld13getConstraintEi__index__);
+emit_32(__cxa_pure_virtual__index__);
+emit_32(__cxa_pure_virtual__index__);
+emit_32(_ZN15btDynamicsWorld10addVehicleEP17btActionInterface__index__);
+emit_32(_ZN15btDynamicsWorld13removeVehicleEP17btActionInterface__index__);
+emit_32(_ZN15btDynamicsWorld12addCharacterEP17btActionInterface__index__);
+emit_32(_ZN15btDynamicsWorld15removeCharacterEP17btActionInterface__index__);
+emit_start(_ZTV23btDiscreteDynamicsWorld)
+emit_32(0);
+emit_32(_ZTI23btDiscreteDynamicsWorld);
+emit_32(_ZN23btDiscreteDynamicsWorldD1Ev__index__);
+emit_32(_ZN23btDiscreteDynamicsWorldD0Ev__index__);
+emit_32(_ZN16btCollisionWorld11updateAabbsEv__index__);
+emit_32(_ZN16btCollisionWorld14setDebugDrawerEP12btIDebugDraw__index__);
+emit_32(_ZN16btCollisionWorld14getDebugDrawerEv__index__);
+emit_32(_ZN23btDiscreteDynamicsWorld14debugDrawWorldEv__index__);
+emit_32(_ZN16btCollisionWorld15debugDrawObjectERK11btTransformPK16btCollisionShapeRK9btVector3__index__);
+emit_32(_ZNK16btCollisionWorld7rayTestERK9btVector3S2_RNS_17RayResultCallbackE__index__);
+emit_32(_ZN23btDiscreteDynamicsWorld18addCollisionObjectEP17btCollisionObjectss__index__);
+emit_32(_ZN23btDiscreteDynamicsWorld21removeCollisionObjectEP17btCollisionObject__index__);
+emit_32(_ZN16btCollisionWorld33performDiscreteCollisionDetectionEv__index__);
+emit_32(_ZN23btDiscreteDynamicsWorld9serializeEP12btSerializer__index__);
+emit_32(_ZN23btDiscreteDynamicsWorld14stepSimulationEfif__index__);
+emit_32(_ZN23btDiscreteDynamicsWorld13addConstraintEP17btTypedConstraintb__index__);
+emit_32(_ZN23btDiscreteDynamicsWorld16removeConstraintEP17btTypedConstraint__index__);
+emit_32(_ZN23btDiscreteDynamicsWorld9addActionEP17btActionInterface__index__);
+emit_32(_ZN23btDiscreteDynamicsWorld12removeActionEP17btActionInterface__index__);
+emit_32(_ZN23btDiscreteDynamicsWorld10setGravityERK9btVector3__index__);
+emit_32(_ZNK23btDiscreteDynamicsWorld10getGravityEv__index__);
+emit_32(_ZN23btDiscreteDynamicsWorld23synchronizeMotionStatesEv__index__);
+emit_32(_ZN23btDiscreteDynamicsWorld12addRigidBodyEP11btRigidBody__index__);
+emit_32(_ZN23btDiscreteDynamicsWorld15removeRigidBodyEP11btRigidBody__index__);
+emit_32(_ZN23btDiscreteDynamicsWorld19setConstraintSolverEP18btConstraintSolver__index__);
+emit_32(_ZN23btDiscreteDynamicsWorld19getConstraintSolverEv__index__);
+emit_32(_ZNK23btDiscreteDynamicsWorld17getNumConstraintsEv__index__);
+emit_32(_ZN23btDiscreteDynamicsWorld13getConstraintEi__index__);
+emit_32(_ZNK23btDiscreteDynamicsWorld13getConstraintEi__index__);
+emit_32(_ZNK23btDiscreteDynamicsWorld12getWorldTypeEv__index__);
+emit_32(_ZN23btDiscreteDynamicsWorld11clearForcesEv__index__);
+emit_32(_ZN23btDiscreteDynamicsWorld10addVehicleEP17btActionInterface__index__);
+emit_32(_ZN23btDiscreteDynamicsWorld13removeVehicleEP17btActionInterface__index__);
+emit_32(_ZN23btDiscreteDynamicsWorld12addCharacterEP17btActionInterface__index__);
+emit_32(_ZN23btDiscreteDynamicsWorld15removeCharacterEP17btActionInterface__index__);
+emit_32(_ZN23btDiscreteDynamicsWorld25predictUnconstraintMotionEf__index__);
+emit_32(_ZN23btDiscreteDynamicsWorld19integrateTransformsEf__index__);
+emit_32(_ZN23btDiscreteDynamicsWorld26calculateSimulationIslandsEv__index__);
+emit_32(_ZN23btDiscreteDynamicsWorld16solveConstraintsER19btContactSolverInfo__index__);
+emit_32(_ZN23btDiscreteDynamicsWorld28internalSingleStepSimulationEf__index__);
+emit_32(_ZN23btDiscreteDynamicsWorld18saveKinematicStateEf__index__);
+emit_32(_ZN23btDiscreteDynamicsWorld12addRigidBodyEP11btRigidBodyss__index__);
+emit_32(_ZN23btDiscreteDynamicsWorld12applyGravityEv__index__);
+emit_32(_ZN23btDiscreteDynamicsWorld11setNumTasksEi__index__);
+emit_32(_ZN23btDiscreteDynamicsWorld14updateVehiclesEf__index__);
+emit_start(_ZTV11btRigidBody)
+emit_32(0);
+emit_32(_ZTI11btRigidBody);
+emit_32(_ZN11btRigidBody24checkCollideWithOverrideEP17btCollisionObject__index__);
+emit_32(_ZN11btRigidBodyD1Ev__index__);
+emit_32(_ZN11btRigidBodyD0Ev__index__);
+emit_32(_ZN17btCollisionObject17setCollisionShapeEP16btCollisionShape__index__);
+emit_32(_ZNK11btRigidBody28calculateSerializeBufferSizeEv__index__);
+emit_32(_ZNK11btRigidBody9serializeEPvP12btSerializer__index__);
+emit_32(_ZNK11btRigidBody21serializeSingleObjectEP12btSerializer__index__);
+emit_start(_ZTI11btRigidBody)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTS11btRigidBody);
+emit_32(_ZTI17btCollisionObject);
+emit_start(_ZTS11btRigidBody)
+emit_string('11btRigidBody\x00');
+emit_start(_2E_str4144)
+emit_string('btRigidBodyFloatData\x00');
+emit_start(_ZN15CProfileManager11CurrentNodeE)
+emit_32(_ZN15CProfileManager4RootE);
+emit_start(_2E_str729)
+emit_string('Root\x00');
+emit_start(llvm_2E_eh_2E_catch_2E_all_2E_value)
+emit_32(0);
+emit_start(_ZTIN4__rw10__rw_facetE)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTSN4__rw10__rw_facetE);
+emit_32(_ZTIN4__rw17__rw_synchronizedE);
+emit_start(_ZTSN4__rw10__rw_facetE)
+emit_string('N4__rw10__rw_facetE\x00');
+emit_start(_ZTIN4__rw17__rw_synchronizedE)
+emit_32(_ZTVN10__cxxabiv117__class_type_infoE+8);
+emit_32(_ZTSN4__rw17__rw_synchronizedE);
+emit_start(_ZTSN4__rw17__rw_synchronizedE)
+emit_string('N4__rw17__rw_synchronizedE\x00');
+emit_start(_2E_str4131)
+emit_string('exception\x00');
+emit_start(_2E_str15132)
+emit_string('unexpected exception\x00');
+emit_start(_2E_str26)
+emit_fill(0,1);
+emit_start(_2E_str3133)
+emit_string('Exception: %s.\x0a\x00');
+emit_start(_2E_str47)
+emit_string('bad_alloc: out of memory\x00');
+emit_start(_2E_str5134)
+emit_string('unknown exception\x00');
+emit_start(_ZZN4__rwL13__rw_vfmtwhatEPcjiS0_E6buffer)
+emit_string('rwstderr:1\x00');
+emit_start(_2E_str7136)
+emit_string('%d\x00');
+emit_start(_ZZN4__rwL13__rw_vfmtwhatEPcjiS0_E8__catset)
+emit_32(1);
+emit_start(_ZZN4__rwL13__rw_vfmtwhatEPcjiS0_E5__cat)
+emit_32(4294967295);
+emit_start(_ZZN4__rw10__rw_throwEizE6errors)
+emit_32(_2E_str8137);
+emit_32(_2E_str9138);
+emit_32(_2E_str10139);
+emit_32(_2E_str11140);
+emit_32(_2E_str12141);
+emit_32(_2E_str138142);
+emit_32(_2E_str14143);
+emit_32(_2E_str159144);
+emit_32(_2E_str16145);
+emit_32(_2E_str17146);
+emit_32(_2E_str18147);
+emit_32(_2E_str19148);
+emit_32(_2E_str20149);
+emit_32(_2E_str21150);
+emit_32(_2E_str22151);
+emit_32(_2E_str23152);
+emit_32(_2E_str24153);
+emit_32(_2E_str25154);
+emit_32(_2E_str2610);
+emit_32(_2E_str27);
+emit_32(_2E_str28155);
+emit_32(_2E_str29156);
+emit_32(_2E_str30);
+emit_32(_2E_str31);
+emit_32(_2E_str32157);
+emit_start(_2E_str8137)
+emit_string('%s: %s: unspecified error\x00');
+emit_start(_2E_str9138)
+emit_string('%s: %s: exception\x00');
+emit_start(_2E_str10139)
+emit_string('%s: %s: unexpected exception\x00');
+emit_start(_2E_str11140)
+emit_string('%s: %s: bad_alloc: out of memory\x00');
+emit_start(_2E_str12141)
+emit_string('%s: %s: bad cast\x00');
+emit_start(_2E_str138142)
+emit_string('%s: %s: logic error\x00');
+emit_start(_2E_str14143)
+emit_string('%s: %s: domain error\x00');
+emit_start(_2E_str159144)
+emit_string('%s: %s: invalid argument\x00');
+emit_start(_2E_str16145)
+emit_string('%s: %s: length error: size %u out of range [0, %u)\x00');
+emit_start(_2E_str17146)
+emit_string('%s: %s: argument value %u out of range [0, %u)\x00');
+emit_start(_2E_str18147)
+emit_string('%s: %s: runtime error\x00');
+emit_start(_2E_str19148)
+emit_string('%s: %s: range error: invalid range [%d, %d)\x00');
+emit_start(_2E_str20149)
+emit_string('%s: %s: overflow error\x00');
+emit_start(_2E_str21150)
+emit_string('%s: %s: underflow error\x00');
+emit_start(_2E_str22151)
+emit_string('%s: stream object has set ios::failbit\x00');
+emit_start(_2E_str23152)
+emit_string('%s: stream object has set ios::badbit\x00');
+emit_start(_2E_str24153)
+emit_string('%s: stream object has set ios::eofbit\x00');
+emit_start(_2E_str25154)
+emit_string('%s: stream object has set %s\x00');
+emit_start(_2E_str2610)
+emit_string('%s: %s: facet %u not found in locale (\x22%s\x22)\x00');
+emit_start(_2E_str27)
+emit_string('%s: %s: bad locale name: \x22%s\x22\x00');
+emit_start(_2E_str28155)
+emit_string('%s: %s: failed to construct locale name\x00');
+emit_start(_2E_str29156)
+emit_string('%s: %s: conversion failed\x00');
+emit_start(_2E_str30)
+emit_string('%s: %s: invalid pointer %p\x00');
+emit_start(_2E_str31)
+emit_string('%s: %s: transformation failed\x00');
+emit_start(_2E_str32157)
+emit_string('%s: %s: bad category value: %#x\x00');
+emit_start(_2E_str33)
+emit_string('LC_COLLATE\x00');
+emit_start(_2E_str134)
+emit_string('LC_CTYPE\x00');
+emit_start(_2E_str235)
+emit_string('LC_MONETARY\x00');
+emit_start(_2E_str336)
+emit_string('LC_NUMERIC\x00');
+emit_start(_2E_str437)
+emit_string('LC_TIME\x00');
+emit_start(_ZTVN4__rw10__rw_facetE)
+emit_32(0);
+emit_32(_ZTIN4__rw10__rw_facetE);
+emit_32(_ZN4__rw10__rw_facetD1Ev__index__);
+emit_32(_ZN4__rw10__rw_facetD0Ev__index__);
+emit_start(_2E_str538)
+emit_string('C\x00');
+emit_start(_ZZN4__rw10__rw_facet9_C_manageEPS0_NS0_13_C_facet_typeEPKcPFS1_jS4_EE10std_facets)
+emit_32(_ZZN4__rw10__rw_facet9_C_manageEPS0_NS0_13_C_facet_typeEPKcPFS1_jS4_EE13std_facet_buf);
+emit_start(_ZZN4__rw10__rw_facet9_C_manageEPS0_NS0_13_C_facet_typeEPKcPFS1_jS4_EE17std_facet_bufsize)
+emit_32(416);
+emit_start(_ZZN4__rw10__rw_facetD4EvE9destroyed)
+emit_string('*** destroyed facet ***\x00');
+emit_start(_ZN4__rw9__rw_catsE)
+emit_32(1);
+emit_32(_2E_str33);
+emit_32(8193);
+emit_32(2);
+emit_32(_2E_str134);
+emit_32(49158);
+emit_32(3);
+emit_32(_2E_str235);
+emit_32(983160);
+emit_32(4);
+emit_32(_2E_str336);
+emit_32(7340928);
+emit_32(5);
+emit_32(_2E_str437);
+emit_32(25168896);
+emit_32(1);
+emit_32(_2E_str33);
+emit_32(8193);
+emit_start(_2E_str785)
+emit_string(';\x00');
+emit_start(_ZZN4__rw11__rw_locale9_C_manageEPS0_PKcE7locales)
+emit_32(_ZZN4__rw11__rw_locale9_C_manageEPS0_PKcE10locale_buf);
+emit_start(_ZZN4__rw11__rw_locale9_C_manageEPS0_PKcE14locale_bufsize)
+emit_32(8);
+emit_start(_2E_str292167)
+emit_string('LC_\x00');
+emit_start(_2E_str10100175)
+emit_string('locale::locale (const char*)\x00');
+emit_start(_2E_str12102177)
+emit_string('../stdcxx/locale_combine.cpp:650\x00');
+emit_start(_ZZN4__rwL20__rw_manage_cat_dataERiPNS_18__rw_open_cat_dataEE8catalogs)
+emit_32(_ZZN4__rwL20__rw_manage_cat_dataERiPNS_18__rw_open_cat_dataEE11catalog_buf);
+emit_start(_ZZN4__rwL20__rw_manage_cat_dataERiPNS_18__rw_open_cat_dataEE15catalog_bufsize)
+emit_32(8);
+emit_start(_2E_str115180)
+emit_string('../stdcxx/messages.cpp:308\x00');
+emit_start(_2E_str1116181)
+emit_string('__rw_cat_close (int cat)\x00');
+emit_start(_2E_str2131)
+emit_string('.\x00');
+emit_start(_2E_str4133)
+emit_string(',\x00');
+emit_start(_ZTVSt8messagesIcE)
+emit_32(0);
+emit_32(_ZTISt8messagesIcE);
+emit_32(_ZNSt8messagesIcED1Ev__index__);
+emit_32(_ZNSt8messagesIcED0Ev__index__);
+emit_32(_ZNKSt8messagesIcE7do_openERKSsRKSt6locale__index__);
+emit_32(_ZNKSt8messagesIcE6do_getEiiiRKSs__index__);
+emit_32(_ZNKSt8messagesIcE8do_closeEi__index__);
+emit_start(_ZTISt8messagesIcE)
+emit_32(_ZTVN10__cxxabiv121__vmi_class_type_infoE+8);
+emit_32(_ZTSSt8messagesIcE);
+emit_32(0);
+emit_32(2);
+emit_32(_ZTIN4__rw10__rw_facetE);
+emit_32(2);
+emit_32(_ZTISt13messages_base);
+emit_32(2);
+emit_start(_ZTSSt8messagesIcE)
+emit_string('St8messagesIcE\x00');
+emit_start(_ZTISt13messages_base)
+emit_32(_ZTVN10__cxxabiv117__class_type_infoE+8);
+emit_32(_ZTSSt13messages_base);
+emit_start(_ZTSSt13messages_base)
+emit_string('St13messages_base\x00');
+emit_start(_2E_str2360)
+emit_string('../stdcxx/include/string.cc:88\x00');
+emit_start(_2E_str3361)
+emit_string('basic_string::_C_get_rep (size_type, size_type)\x00');
+emit_start(_2E_str4362)
+emit_string('../stdcxx/include/string.cc:95\x00');
+emit_start(_ZTVSt9type_info)
+emit_32(0);
+emit_32(_ZTISt9type_info);
+emit_32(_ZNSt9type_infoD1Ev__index__);
+emit_32(_ZNSt9type_infoD0Ev__index__);
+emit_32(_ZNKSt9type_info15__is_function_pEv__index__);
+emit_32(_ZNKSt9type_info10__do_catchEPKS_PPvj__index__);
+emit_start(_ZTISt9type_info)
+emit_32(_ZTVN10__cxxabiv117__class_type_infoE+8);
+emit_32(_ZTSSt9type_info);
+emit_start(_ZTSSt9type_info)
+emit_string('St9type_info\x00');
+emit_start(_2E_str643)
+emit_string('tlsf_create: Pool size must be between %d and %d bytes.\x0a\x00');
+emit_start(_2E_str1648)
+emit_string('rb\x00');
+emit_start(_2E_str4651)
+emit_string('rb+\x00');
+emit_start(_2E_str5652)
+emit_string('wb+\x00');
+emit_start(my_ctype)
+emit_32(0);
+emit_32(32);
+emit_32(32);
+emit_32(32);
+emit_32(32);
+emit_32(32);
+emit_32(32);
+emit_32(32);
+emit_32(32);
+emit_32(32);
+emit_32(40);
+emit_32(40);
+emit_32(40);
+emit_32(40);
+emit_32(40);
+emit_32(32);
+emit_32(32);
+emit_32(32);
+emit_32(32);
+emit_32(32);
+emit_32(32);
+emit_32(32);
+emit_32(32);
+emit_32(32);
+emit_32(32);
+emit_32(32);
+emit_32(32);
+emit_32(32);
+emit_32(32);
+emit_32(32);
+emit_32(32);
+emit_32(32);
+emit_32(32);
+emit_32(72);
+emit_32(16);
+emit_32(16);
+emit_32(16);
+emit_32(16);
+emit_32(16);
+emit_32(16);
+emit_32(16);
+emit_32(16);
+emit_32(16);
+emit_32(16);
+emit_32(16);
+emit_32(16);
+emit_32(16);
+emit_32(16);
+emit_32(16);
+emit_32(132);
+emit_32(132);
+emit_32(132);
+emit_32(132);
+emit_32(132);
+emit_32(132);
+emit_32(132);
+emit_32(132);
+emit_32(132);
+emit_32(132);
+emit_32(16);
+emit_32(16);
+emit_32(16);
+emit_32(16);
+emit_32(16);
+emit_32(16);
+emit_32(16);
+emit_32(129);
+emit_32(129);
+emit_32(129);
+emit_32(129);
+emit_32(129);
+emit_32(129);
+emit_32(1);
+emit_32(1);
+emit_32(1);
+emit_32(1);
+emit_32(1);
+emit_32(1);
+emit_32(1);
+emit_32(1);
+emit_32(1);
+emit_32(1);
+emit_32(1);
+emit_32(1);
+emit_32(1);
+emit_32(1);
+emit_32(1);
+emit_32(1);
+emit_32(1);
+emit_32(1);
+emit_32(1);
+emit_32(1);
+emit_32(16);
+emit_32(16);
+emit_32(16);
+emit_32(16);
+emit_32(16);
+emit_32(16);
+emit_32(130);
+emit_32(130);
+emit_32(130);
+emit_32(130);
+emit_32(130);
+emit_32(130);
+emit_32(2);
+emit_32(2);
+emit_32(2);
+emit_32(2);
+emit_32(2);
+emit_32(2);
+emit_32(2);
+emit_32(2);
+emit_32(2);
+emit_32(2);
+emit_32(2);
+emit_32(2);
+emit_32(2);
+emit_32(2);
+emit_32(2);
+emit_32(2);
+emit_32(2);
+emit_32(2);
+emit_32(2);
+emit_32(2);
+emit_32(16);
+emit_32(16);
+emit_32(16);
+emit_32(16);
+emit_32(32);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_32(0);
+emit_start(_ZL8nextRand)
+emit_32(1);
+emit_start(_2E_str7654)
+emit_string('inf\x00');
+emit_start(_2E_str9655)
+emit_string('nan\x00');
+emit_start(_ZL8pad_line)
+emit_string(' \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00');
+emit_string('0000000000000000\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00');
+emit_start(_ZTI14CFileInterface)
+emit_32(_ZTVN10__cxxabiv117__class_type_infoE+8);
+emit_32(_ZTS14CFileInterface);
+emit_start(_ZTS14CFileInterface)
+emit_string('14CFileInterface\x00');
+emit_start(_ZTV11CFileSystem)
+emit_32(0);
+emit_32(_ZTI11CFileSystem);
+emit_32(_ZNK11CFileSystem12IsFileSystemEv__index__);
+emit_32(_ZN11CFileSystem5freadEPvjj__index__);
+emit_32(_ZN11CFileSystem6fwriteEPKvjj__index__);
+emit_32(_ZN11CFileSystem6fflushEv__index__);
+emit_32(_ZN11CFileSystem6fcloseEv__index__);
+emit_32(_ZN11CFileSystem5ftellEv__index__);
+emit_32(_ZN11CFileSystem4feofEv__index__);
+emit_32(_ZN11CFileSystem5fseekEli__index__);
+emit_32(_ZN11CFileSystem6ungetcEi__index__);
+emit_start(_ZTI11CFileSystem)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTS11CFileSystem);
+emit_32(_ZTI14CFileInterface);
+emit_start(_ZTS11CFileSystem)
+emit_string('11CFileSystem\x00');
+emit_start(_ZL13s_file_stdout)
+emit_32(_ZTV11CFileStdout+8);
+emit_start(_ZTV7CFileLS)
+emit_32(0);
+emit_32(_ZTI7CFileLS);
+emit_32(_ZNK14CFileInterface12IsFileSystemEv__index__);
+emit_32(_ZN7CFileLS5freadEPvjj__index__);
+emit_32(_ZN7CFileLS6fwriteEPKvjj__index__);
+emit_32(_ZN7CFileLS6fflushEv__index__);
+emit_32(_ZN7CFileLS6fcloseEv__index__);
+emit_32(_ZN7CFileLS5ftellEv__index__);
+emit_32(_ZN7CFileLS4feofEv__index__);
+emit_32(_ZN7CFileLS5fseekEli__index__);
+emit_32(_ZN7CFileLS6ungetcEi__index__);
+emit_start(_ZTI7CFileLS)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTS7CFileLS);
+emit_32(_ZTI14CFileInterface);
+emit_start(_ZTS7CFileLS)
+emit_string('7CFileLS\x00');
+emit_start(_ZTV10CFileCloud)
+emit_32(0);
+emit_32(_ZTI10CFileCloud);
+emit_32(_ZNK14CFileInterface12IsFileSystemEv__index__);
+emit_32(_ZN10CFileCloud5freadEPvjj__index__);
+emit_32(_ZN10CFileCloud6fwriteEPKvjj__index__);
+emit_32(_ZN10CFileCloud6fflushEv__index__);
+emit_32(_ZN10CFileCloud6fcloseEv__index__);
+emit_32(_ZN10CFileCloud5ftellEv__index__);
+emit_32(_ZN10CFileCloud4feofEv__index__);
+emit_32(_ZN10CFileCloud5fseekEli__index__);
+emit_32(_ZN10CFileCloud6ungetcEi__index__);
+emit_start(_ZTI10CFileCloud)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTS10CFileCloud);
+emit_32(_ZTI14CFileInterface);
+emit_start(_ZTS10CFileCloud)
+emit_string('10CFileCloud\x00');
+emit_start(_ZTV11CFileStdout)
+emit_32(0);
+emit_32(_ZTI11CFileStdout);
+emit_32(_ZNK14CFileInterface12IsFileSystemEv__index__);
+emit_32(_ZN11CFileStdout5freadEPvjj__index__);
+emit_32(_ZN11CFileStdout6fwriteEPKvjj__index__);
+emit_32(_ZN11CFileStdout6fflushEv__index__);
+emit_32(_ZN11CFileStdout6fcloseEv__index__);
+emit_32(_ZN11CFileStdout5ftellEv__index__);
+emit_32(_ZN11CFileStdout4feofEv__index__);
+emit_32(_ZN11CFileStdout5fseekEli__index__);
+emit_32(_ZN11CFileStdout6ungetcEi__index__);
+emit_start(_ZTI11CFileStdout)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTS11CFileStdout);
+emit_32(_ZTI14CFileInterface);
+emit_start(_ZTS11CFileStdout)
+emit_string('11CFileStdout\x00');
+emit_start(_2E_str31677)
+emit_string('r+b\x00');
+emit_start(_2E_str32678)
+emit_string('w+b\x00');
+emit_start(_2E_str33679)
+emit_string('/ls/\x00');
+emit_start(_2E_str34680)
+emit_string('/cloud/\x00');
+emit_start(_2E_str35681)
+emit_string('trying to open file (%s) with write attributes (%s)\x0a\x00');
+emit_start(_2E_str37683)
+emit_string('/ls\x00');
+emit_start(_2E_str38684)
+emit_string('(null)\x00');
+emit_start(_ZN12mandreel_b64L9b64_charsE)
+emit_string('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\x00');
+emit_start(_ZN12mandreel_b64L11b64_indexesE)
+emit_string('\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff>\xff\xff\xff?456789:;<=\xff\xff\xff\xff\xff\xff\xff\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\xff\xff\xff\xff\xff\xff\x1a\x1b\x1c\x1d\x1e\x1f !\x22#$%&\x27()*+,-./0123\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff');
+emit_start(_ZL25s_mandreel_internal_width)
+emit_32(1024);
+emit_start(_ZL26s_mandreel_internal_height)
+emit_32(768);
+emit_start(_2E_str779)
+emit_string('mandreel.fat\x00');
+emit_start(_2E_str3782)
+emit_string('asynctexture\x00');
+emit_start(_2E_str4783)
+emit_string('warning: asynctexture data not valid\x00');
+emit_start(_2E_str5784)
+emit_string('packtexture\x00');
+emit_start(_2E_str6785)
+emit_string('unpackedtextures\x00');
+emit_start(_ZTVN10__cxxabiv120__si_class_type_infoE)
+emit_32(0);
+emit_32(_ZTIN10__cxxabiv120__si_class_type_infoE);
+emit_32(_ZN10__cxxabiv120__si_class_type_infoD1Ev__index__);
+emit_32(_ZN10__cxxabiv120__si_class_type_infoD0Ev__index__);
+emit_32(_ZNKSt9type_info15__is_function_pEv__index__);
+emit_32(_ZNK10__cxxabiv117__class_type_info10__do_catchEPKSt9type_infoPPvj__index__);
+emit_32(_ZNK10__cxxabiv117__class_type_info11__do_upcastEPKS0_PPv__index__);
+emit_32(_ZNK10__cxxabiv120__si_class_type_info11__do_upcastEPKNS_17__class_type_infoEPKvRNS1_15__upcast_resultE__index__);
+emit_32(_ZNK10__cxxabiv120__si_class_type_info12__do_dyncastEiNS_17__class_type_info10__sub_kindEPKS1_PKvS4_S6_RNS1_16__dyncast_resultE__index__);
+emit_32(_ZNK10__cxxabiv120__si_class_type_info20__do_find_public_srcEiPKvPKNS_17__class_type_infoES2___index__);
+emit_start(_ZTIN10__cxxabiv120__si_class_type_infoE)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTSN10__cxxabiv120__si_class_type_infoE);
+emit_32(_ZTIN10__cxxabiv117__class_type_infoE);
+emit_start(_ZTSN10__cxxabiv120__si_class_type_infoE)
+emit_string('N10__cxxabiv120__si_class_type_infoE\x00');
+emit_start(_ZTIN10__cxxabiv117__class_type_infoE)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTSN10__cxxabiv117__class_type_infoE);
+emit_32(_ZTISt9type_info);
+emit_start(_ZTSN10__cxxabiv117__class_type_infoE)
+emit_string('N10__cxxabiv117__class_type_infoE\x00');
+emit_start(_ZTVN10__cxxabiv117__class_type_infoE)
+emit_32(0);
+emit_32(_ZTIN10__cxxabiv117__class_type_infoE);
+emit_32(_ZN10__cxxabiv117__class_type_infoD1Ev__index__);
+emit_32(_ZN10__cxxabiv117__class_type_infoD0Ev__index__);
+emit_32(_ZNKSt9type_info15__is_function_pEv__index__);
+emit_32(_ZNK10__cxxabiv117__class_type_info10__do_catchEPKSt9type_infoPPvj__index__);
+emit_32(_ZNK10__cxxabiv117__class_type_info11__do_upcastEPKS0_PPv__index__);
+emit_32(_ZNK10__cxxabiv117__class_type_info11__do_upcastEPKS0_PKvRNS0_15__upcast_resultE__index__);
+emit_32(_ZNK10__cxxabiv117__class_type_info12__do_dyncastEiNS0_10__sub_kindEPKS0_PKvS3_S5_RNS0_16__dyncast_resultE__index__);
+emit_32(_ZNK10__cxxabiv117__class_type_info20__do_find_public_srcEiPKvPKS0_S2___index__);
+emit_start(_ZTVN10__cxxabiv121__vmi_class_type_infoE)
+emit_32(0);
+emit_32(_ZTIN10__cxxabiv121__vmi_class_type_infoE);
+emit_32(_ZN10__cxxabiv121__vmi_class_type_infoD1Ev__index__);
+emit_32(_ZN10__cxxabiv121__vmi_class_type_infoD0Ev__index__);
+emit_32(_ZNKSt9type_info15__is_function_pEv__index__);
+emit_32(_ZNK10__cxxabiv117__class_type_info10__do_catchEPKSt9type_infoPPvj__index__);
+emit_32(_ZNK10__cxxabiv117__class_type_info11__do_upcastEPKS0_PPv__index__);
+emit_32(_ZNK10__cxxabiv121__vmi_class_type_info11__do_upcastEPKNS_17__class_type_infoEPKvRNS1_15__upcast_resultE__index__);
+emit_32(_ZNK10__cxxabiv121__vmi_class_type_info12__do_dyncastEiNS_17__class_type_info10__sub_kindEPKS1_PKvS4_S6_RNS1_16__dyncast_resultE__index__);
+emit_32(_ZNK10__cxxabiv121__vmi_class_type_info20__do_find_public_srcEiPKvPKNS_17__class_type_infoES2___index__);
+emit_start(_ZTIN10__cxxabiv121__vmi_class_type_infoE)
+emit_32(_ZTVN10__cxxabiv120__si_class_type_infoE+8);
+emit_32(_ZTSN10__cxxabiv121__vmi_class_type_infoE);
+emit_32(_ZTIN10__cxxabiv117__class_type_infoE);
+emit_start(_ZTSN10__cxxabiv121__vmi_class_type_infoE)
+emit_string('N10__cxxabiv121__vmi_class_type_infoE\x00');
+emit_start(_2E_str221)
+emit_string('g_bInit\x00');
+emit_start(_2E_str1222)
+emit_string('MandreelAudioLib.cpp\x00');
+emit_start(_2E_str3224)
+emit_string('Mandreel_Audio_GetSoundDuration warning: sound duration not found(%s)\x0a\x00');
+emit_start(_2E_str4225)
+emit_string('sandbox\x00');
+emit_start(_2E_str12233)
+emit_string('%s%s\x00');
+emit_start(_2E_str22243)
+emit_string('LoadSoundDuractions\x0a\x00');
+emit_start(_2E_str24245)
+emit_string('error: mandreel.fat file not found. Maybe the working folder is not correctly set???\x0a\x00');
+emit_start(_2E_str26247)
+emit_string('version\x00');
+emit_start(_2E_str27248)
+emit_string('1.4\x00');
+emit_start(_2E_str28249)
+emit_string('ERROR: mandreel.fat version number is (%s) instead of (%s)\x0a\x00');
+emit_start(_2E_str29250)
+emit_string('audiofile\x00');
+emit_start(_2E_str30251)
+emit_string('??\x00');
+emit_start(_2E_str31252)
+emit_string('warning: audiofile(%s) duration can\x27t be read, invalid mandreel.fat file?\x0a\x00');
+emit_start(_2E_str32253)
+emit_string('file\x00');
+emit_start(_2E_str33254)
+emit_string('dir\x00');
+emit_start(_2E_str34255)
+emit_string('!g_bInit\x00');
+emit_start(_2E_str35256)
+emit_string('Mandreel_Audio_Init()\x00');
+emit_start(_ZL13s_fifo_errors)
+emit_32(0);
+emit_32(_ZL13s_fifo_errors+8);
+emit_32(0);
+emit_32(_ZL13s_fifo_errors+8);
+emit_32(0);
+emit_32(0);
+emit_start(llvm_2E_global_ctors)
+emit_32(65535);
+emit_32(_GLOBAL__I_Landscape02Vtx__index__);
+emit_32(65535);
+emit_32(_GLOBAL__I__ZN7btClockC2Ev__index__);
+emit_32(65535);
+emit_32(_GLOBAL__I__ZN4__rw9__catfindEPNS_8__rw_catE__index__);
+emit_32(65535);
+emit_32(_GLOBAL__I__mandreel_create_tcp_socket__index__);
+emit_32(65535);
+emit_32(_GLOBAL__I__ZN5my_gl14glAttachShaderEjj__index__);
+emit_start(llvm_2E_global_dtors)
+emit_32(65535);
+emit_32(_GLOBAL__D_Landscape02Vtx__index__);
+emit_32(65535);
+emit_32(_GLOBAL__D__Z6mymainiPPc__index__);
+emit_32(65535);
+emit_32(_GLOBAL__D__ZN19btGenericMemoryPool24allocate_from_free_nodesEj__index__);
+emit_32(65535);
+emit_32(_GLOBAL__D__ZN7btClockC2Ev__index__);
+emit_32(65535);
+emit_32(_GLOBAL__D__ZN4__rw9__catfindEPNS_8__rw_catE__index__);
+emit_32(65535);
+emit_32(_GLOBAL__D__ZN8OpenGLES12OpenGLESUtil15getCurrentErrorEv__index__);
+emit_32(65535);
+emit_32(_GLOBAL__D__ZN5my_gl14glAttachShaderEjj__index__);
+emit_start(llvm_2E_used)
+emit_32(llvm_2E_eh_2E_catch_2E_all_2E_value);
+emit_32(llvm_2E_eh_2E_catch_2E_all_2E_value);
+emit_32(llvm_2E_eh_2E_catch_2E_all_2E_value);
+emit_32(llvm_2E_eh_2E_catch_2E_all_2E_value);
+emit_32(llvm_2E_eh_2E_catch_2E_all_2E_value);
+emit_32(llvm_2E_eh_2E_catch_2E_all_2E_value);
+emit_32(llvm_2E_eh_2E_catch_2E_all_2E_value);
+emit_32(llvm_2E_eh_2E_catch_2E_all_2E_value);
+emit_32(llvm_2E_eh_2E_catch_2E_all_2E_value);
+emit_32(llvm_2E_eh_2E_catch_2E_all_2E_value);
+emit_32(llvm_2E_eh_2E_catch_2E_all_2E_value);
+emit_32(llvm_2E_eh_2E_catch_2E_all_2E_value);
+emit_32(llvm_2E_eh_2E_catch_2E_all_2E_value);
+emit_32(llvm_2E_eh_2E_catch_2E_all_2E_value);
+emit_32(llvm_2E_eh_2E_catch_2E_all_2E_value);
+emit_32(llvm_2E_eh_2E_catch_2E_all_2E_value);
+emit_32(llvm_2E_eh_2E_catch_2E_all_2E_value);
+emit_32(llvm_2E_eh_2E_catch_2E_all_2E_value);
+emit_32(llvm_2E_eh_2E_catch_2E_all_2E_value);
+emit_32(llvm_2E_eh_2E_catch_2E_all_2E_value);
+emit_32(llvm_2E_eh_2E_catch_2E_all_2E_value);
+emit_32(llvm_2E_eh_2E_catch_2E_all_2E_value);
+emit_32(llvm_2E_eh_2E_catch_2E_all_2E_value);
+emit_32(llvm_2E_eh_2E_catch_2E_all_2E_value);
+emit_32(llvm_2E_eh_2E_catch_2E_all_2E_value);
+emit_32(llvm_2E_eh_2E_catch_2E_all_2E_value);
+emit_32(llvm_2E_eh_2E_catch_2E_all_2E_value);
+emit_32(llvm_2E_eh_2E_catch_2E_all_2E_value);
+emit_32(llvm_2E_eh_2E_catch_2E_all_2E_value);
+emit_32(llvm_2E_eh_2E_catch_2E_all_2E_value);
+emit_32(llvm_2E_eh_2E_catch_2E_all_2E_value);
+emit_32(llvm_2E_eh_2E_catch_2E_all_2E_value);
+emit_32(llvm_2E_eh_2E_catch_2E_all_2E_value);
+emit_32(llvm_2E_eh_2E_catch_2E_all_2E_value);
+emit_32(llvm_2E_eh_2E_catch_2E_all_2E_value);
+emit_32(llvm_2E_eh_2E_catch_2E_all_2E_value);
+emit_32(llvm_2E_eh_2E_catch_2E_all_2E_value);
+emit_32(llvm_2E_eh_2E_catch_2E_all_2E_value);
+emit_32(llvm_2E_eh_2E_catch_2E_all_2E_value);
+emit_32(llvm_2E_eh_2E_catch_2E_all_2E_value);
+emit_32(llvm_2E_eh_2E_catch_2E_all_2E_value);
+emit_32(llvm_2E_eh_2E_catch_2E_all_2E_value);
+emit_32(llvm_2E_eh_2E_catch_2E_all_2E_value);
+emit_32(llvm_2E_eh_2E_catch_2E_all_2E_value);
+emit_32(llvm_2E_eh_2E_catch_2E_all_2E_value);
+emit_32(llvm_2E_eh_2E_catch_2E_all_2E_value);
+emit_32(llvm_2E_eh_2E_catch_2E_all_2E_value);
+emit_32(llvm_2E_eh_2E_catch_2E_all_2E_value);
+emit_32(llvm_2E_eh_2E_catch_2E_all_2E_value);
+emit_32(llvm_2E_eh_2E_catch_2E_all_2E_value);
+emit_32(llvm_2E_eh_2E_catch_2E_all_2E_value);
+emit_32(llvm_2E_eh_2E_catch_2E_all_2E_value);
+emit_32(llvm_2E_eh_2E_catch_2E_all_2E_value);
+emit_32(llvm_2E_eh_2E_catch_2E_all_2E_value);
+emit_32(llvm_2E_eh_2E_catch_2E_all_2E_value);
+emit_32(llvm_2E_eh_2E_catch_2E_all_2E_value);
+emit_32(llvm_2E_eh_2E_catch_2E_all_2E_value);
+emit_32(llvm_2E_eh_2E_catch_2E_all_2E_value);
+emit_32(llvm_2E_eh_2E_catch_2E_all_2E_value);
+emit_32(llvm_2E_eh_2E_catch_2E_all_2E_value);
+emit_32(llvm_2E_eh_2E_catch_2E_all_2E_value);
+emit_32(llvm_2E_eh_2E_catch_2E_all_2E_value);
+emit_32(llvm_2E_eh_2E_catch_2E_all_2E_value);
+emit_32(llvm_2E_eh_2E_catch_2E_all_2E_value);
+emit_32(llvm_2E_eh_2E_catch_2E_all_2E_value);
+emit_32(llvm_2E_eh_2E_catch_2E_all_2E_value);
+emit_32(llvm_2E_eh_2E_catch_2E_all_2E_value);
+emit_32(llvm_2E_eh_2E_catch_2E_all_2E_value);
+emit_32(llvm_2E_eh_2E_catch_2E_all_2E_value);
+emit_32(llvm_2E_eh_2E_catch_2E_all_2E_value);
+emit_32(llvm_2E_eh_2E_catch_2E_all_2E_value);
+emit_32(llvm_2E_eh_2E_catch_2E_all_2E_value);
+emit_32(llvm_2E_eh_2E_catch_2E_all_2E_value);
+emit_32(llvm_2E_eh_2E_catch_2E_all_2E_value);
+emit_32(llvm_2E_eh_2E_catch_2E_all_2E_value);
+mandreel_call_constructors(llvm_2E_global_ctors,5,stackPos);
+}
+var _GLOBAL__D_Landscape02Vtx__index__ = register_delegate(_GLOBAL__D_Landscape02Vtx);
+var _GLOBAL__D__Z6mymainiPPc__index__ = register_delegate(_GLOBAL__D__Z6mymainiPPc);
+var _GLOBAL__D__ZN19btGenericMemoryPool24allocate_from_free_nodesEj__index__ = register_delegate(_GLOBAL__D__ZN19btGenericMemoryPool24allocate_from_free_nodesEj);
+var _GLOBAL__D__ZN4__rw9__catfindEPNS_8__rw_catE__index__ = register_delegate(_GLOBAL__D__ZN4__rw9__catfindEPNS_8__rw_catE);
+var _GLOBAL__D__ZN5my_gl14glAttachShaderEjj__index__ = register_delegate(_GLOBAL__D__ZN5my_gl14glAttachShaderEjj);
+var _GLOBAL__D__ZN7btClockC2Ev__index__ = register_delegate(_GLOBAL__D__ZN7btClockC2Ev);
+var _GLOBAL__D__ZN8OpenGLES12OpenGLESUtil15getCurrentErrorEv__index__ = register_delegate(_GLOBAL__D__ZN8OpenGLES12OpenGLESUtil15getCurrentErrorEv);
+var _GLOBAL__I_Landscape02Vtx__index__ = register_delegate(_GLOBAL__I_Landscape02Vtx);
+var _GLOBAL__I__ZN4__rw9__catfindEPNS_8__rw_catE__index__ = register_delegate(_GLOBAL__I__ZN4__rw9__catfindEPNS_8__rw_catE);
+var _GLOBAL__I__ZN5my_gl14glAttachShaderEjj__index__ = register_delegate(_GLOBAL__I__ZN5my_gl14glAttachShaderEjj);
+var _GLOBAL__I__ZN7btClockC2Ev__index__ = register_delegate(_GLOBAL__I__ZN7btClockC2Ev);
+var _GLOBAL__I__mandreel_create_tcp_socket__index__ = register_delegate(_GLOBAL__I__mandreel_create_tcp_socket);
+var _Z31MandreelDefaultDebugMsgCallbackiPKc__index__ = register_delegate(_Z31MandreelDefaultDebugMsgCallbackiPKc);
+var _ZN10CFileCloud4feofEv__index__ = register_delegate(_ZN10CFileCloud4feofEv);
+var _ZN10CFileCloud5freadEPvjj__index__ = register_delegate(_ZN10CFileCloud5freadEPvjj);
+var _ZN10CFileCloud5fseekEli__index__ = register_delegate(_ZN10CFileCloud5fseekEli);
+var _ZN10CFileCloud5ftellEv__index__ = register_delegate(_ZN10CFileCloud5ftellEv);
+var _ZN10CFileCloud6fcloseEv__index__ = register_delegate(_ZN10CFileCloud6fcloseEv);
+var _ZN10CFileCloud6fflushEv__index__ = register_delegate(_ZN10CFileCloud6fflushEv);
+var _ZN10CFileCloud6fwriteEPKvjj__index__ = register_delegate(_ZN10CFileCloud6fwriteEPKvjj);
+var _ZN10CFileCloud6ungetcEi__index__ = register_delegate(_ZN10CFileCloud6ungetcEi);
+var _ZN10__cxxabiv117__class_type_infoD0Ev__index__ = register_delegate(_ZN10__cxxabiv117__class_type_infoD0Ev);
+var _ZN10__cxxabiv117__class_type_infoD1Ev__index__ = register_delegate(_ZN10__cxxabiv117__class_type_infoD1Ev);
+var _ZN10__cxxabiv120__si_class_type_infoD0Ev__index__ = register_delegate(_ZN10__cxxabiv120__si_class_type_infoD0Ev);
+var _ZN10__cxxabiv120__si_class_type_infoD1Ev__index__ = register_delegate(_ZN10__cxxabiv120__si_class_type_infoD1Ev);
+var _ZN10__cxxabiv121__vmi_class_type_infoD0Ev__index__ = register_delegate(_ZN10__cxxabiv121__vmi_class_type_infoD0Ev);
+var _ZN10__cxxabiv121__vmi_class_type_infoD1Ev__index__ = register_delegate(_ZN10__cxxabiv121__vmi_class_type_infoD1Ev);
+var _ZN10btBoxShape15setLocalScalingERK9btVector3__index__ = register_delegate(_ZN10btBoxShape15setLocalScalingERK9btVector3);
+var _ZN10btBoxShape9setMarginEf__index__ = register_delegate(_ZN10btBoxShape9setMarginEf);
+var _ZN10btBoxShapeD0Ev__index__ = register_delegate(_ZN10btBoxShapeD0Ev);
+var _ZN10btBoxShapeD1Ev__index__ = register_delegate(_ZN10btBoxShapeD1Ev);
+var _ZN11CFileStdout4feofEv__index__ = register_delegate(_ZN11CFileStdout4feofEv);
+var _ZN11CFileStdout5freadEPvjj__index__ = register_delegate(_ZN11CFileStdout5freadEPvjj);
+var _ZN11CFileStdout5fseekEli__index__ = register_delegate(_ZN11CFileStdout5fseekEli);
+var _ZN11CFileStdout5ftellEv__index__ = register_delegate(_ZN11CFileStdout5ftellEv);
+var _ZN11CFileStdout6fcloseEv__index__ = register_delegate(_ZN11CFileStdout6fcloseEv);
+var _ZN11CFileStdout6fflushEv__index__ = register_delegate(_ZN11CFileStdout6fflushEv);
+var _ZN11CFileStdout6fwriteEPKvjj__index__ = register_delegate(_ZN11CFileStdout6fwriteEPKvjj);
+var _ZN11CFileStdout6ungetcEi__index__ = register_delegate(_ZN11CFileStdout6ungetcEi);
+var _ZN11CFileSystem4feofEv__index__ = register_delegate(_ZN11CFileSystem4feofEv);
+var _ZN11CFileSystem5freadEPvjj__index__ = register_delegate(_ZN11CFileSystem5freadEPvjj);
+var _ZN11CFileSystem5fseekEli__index__ = register_delegate(_ZN11CFileSystem5fseekEli);
+var _ZN11CFileSystem5ftellEv__index__ = register_delegate(_ZN11CFileSystem5ftellEv);
+var _ZN11CFileSystem6fcloseEv__index__ = register_delegate(_ZN11CFileSystem6fcloseEv);
+var _ZN11CFileSystem6fflushEv__index__ = register_delegate(_ZN11CFileSystem6fflushEv);
+var _ZN11CFileSystem6fwriteEPKvjj__index__ = register_delegate(_ZN11CFileSystem6fwriteEPKvjj);
+var _ZN11CFileSystem6ungetcEi__index__ = register_delegate(_ZN11CFileSystem6ungetcEi);
+var _ZN11btRigidBody24checkCollideWithOverrideEP17btCollisionObject__index__ = register_delegate(_ZN11btRigidBody24checkCollideWithOverrideEP17btCollisionObject);
+var _ZN11btRigidBodyD0Ev__index__ = register_delegate(_ZN11btRigidBodyD0Ev);
+var _ZN11btRigidBodyD1Ev__index__ = register_delegate(_ZN11btRigidBodyD1Ev);
+var _ZN12btAxisSweep3D0Ev__index__ = register_delegate(_ZN12btAxisSweep3D0Ev);
+var _ZN12btAxisSweep3D1Ev__index__ = register_delegate(_ZN12btAxisSweep3D1Ev);
+var _ZN12btConvexCast10CastResult15drawCoordSystemERK11btTransform__index__ = register_delegate(_ZN12btConvexCast10CastResult15drawCoordSystemERK11btTransform);
+var _ZN12btConvexCast10CastResult9DebugDrawEf__index__ = register_delegate(_ZN12btConvexCast10CastResult9DebugDrawEf);
+var _ZN12btConvexCast10CastResultD0Ev__index__ = register_delegate(_ZN12btConvexCast10CastResultD0Ev);
+var _ZN12btConvexCast10CastResultD1Ev__index__ = register_delegate(_ZN12btConvexCast10CastResultD1Ev);
+var _ZN12btConvexCastD0Ev__index__ = register_delegate(_ZN12btConvexCastD0Ev);
+var _ZN12btConvexCastD1Ev__index__ = register_delegate(_ZN12btConvexCastD1Ev);
+var _ZN12btDispatcherD0Ev__index__ = register_delegate(_ZN12btDispatcherD0Ev);
+var _ZN12btDispatcherD1Ev__index__ = register_delegate(_ZN12btDispatcherD1Ev);
+var _ZN13BenchmarkDemo15displayCallbackEv__index__ = register_delegate(_ZN13BenchmarkDemo15displayCallbackEv);
+var _ZN13BenchmarkDemo20clientMoveAndDisplayEv__index__ = register_delegate(_ZN13BenchmarkDemo20clientMoveAndDisplayEv);
+var _ZN13BenchmarkDemoD0Ev__index__ = register_delegate(_ZN13BenchmarkDemoD0Ev);
+var _ZN13BenchmarkDemoD1Ev__index__ = register_delegate(_ZN13BenchmarkDemoD1Ev);
+var _ZN13btConvexShapeD0Ev__index__ = register_delegate(_ZN13btConvexShapeD0Ev);
+var _ZN13btConvexShapeD1Ev__index__ = register_delegate(_ZN13btConvexShapeD1Ev);
+var _ZN13btSphereShape9setMarginEf__index__ = register_delegate(_ZN13btSphereShape9setMarginEf);
+var _ZN13btSphereShapeD0Ev__index__ = register_delegate(_ZN13btSphereShapeD0Ev);
+var _ZN13btSphereShapeD1Ev__index__ = register_delegate(_ZN13btSphereShapeD1Ev);
+var _ZN14BenchmarkDemo4D0Ev__index__ = register_delegate(_ZN14BenchmarkDemo4D0Ev);
+var _ZN14BenchmarkDemo4D1Ev__index__ = register_delegate(_ZN14BenchmarkDemo4D1Ev);
+var _ZN14btCapsuleShape15setLocalScalingERK9btVector3__index__ = register_delegate(_ZN14btCapsuleShape15setLocalScalingERK9btVector3);
+var _ZN14btCapsuleShape9setMarginEf__index__ = register_delegate(_ZN14btCapsuleShape9setMarginEf);
+var _ZN14btCapsuleShapeD0Ev__index__ = register_delegate(_ZN14btCapsuleShapeD0Ev);
+var _ZN14btCapsuleShapeD1Ev__index__ = register_delegate(_ZN14btCapsuleShapeD1Ev);
+var _ZN14btConcaveShape9setMarginEf__index__ = register_delegate(_ZN14btConcaveShape9setMarginEf);
+var _ZN14btConcaveShapeD0Ev__index__ = register_delegate(_ZN14btConcaveShapeD0Ev);
+var _ZN14btConcaveShapeD1Ev__index__ = register_delegate(_ZN14btConcaveShapeD1Ev);
+var _ZN14btOptimizedBvhD0Ev__index__ = register_delegate(_ZN14btOptimizedBvhD0Ev);
+var _ZN14btOptimizedBvhD1Ev__index__ = register_delegate(_ZN14btOptimizedBvhD1Ev);
+var _ZN14btQuantizedBvh16deSerializeFloatER23btQuantizedBvhFloatData__index__ = register_delegate(_ZN14btQuantizedBvh16deSerializeFloatER23btQuantizedBvhFloatData);
+var _ZN14btQuantizedBvh17deSerializeDoubleER24btQuantizedBvhDoubleData__index__ = register_delegate(_ZN14btQuantizedBvh17deSerializeDoubleER24btQuantizedBvhDoubleData);
+var _ZN14btQuantizedBvhD0Ev__index__ = register_delegate(_ZN14btQuantizedBvhD0Ev);
+var _ZN14btQuantizedBvhD1Ev__index__ = register_delegate(_ZN14btQuantizedBvhD1Ev);
+var _ZN15DemoApplication16getDynamicsWorldEv__index__ = register_delegate(_ZN15DemoApplication16getDynamicsWorldEv);
+var _ZN15DemoApplication20localCreateRigidBodyEfRK11btTransformP16btCollisionShape__index__ = register_delegate(_ZN15DemoApplication20localCreateRigidBodyEfRK11btTransformP16btCollisionShape);
+var _ZN15DemoApplication6myinitEv__index__ = register_delegate(_ZN15DemoApplication6myinitEv);
+var _ZN15btDynamicsWorld10addVehicleEP17btActionInterface__index__ = register_delegate(_ZN15btDynamicsWorld10addVehicleEP17btActionInterface);
+var _ZN15btDynamicsWorld12addCharacterEP17btActionInterface__index__ = register_delegate(_ZN15btDynamicsWorld12addCharacterEP17btActionInterface);
+var _ZN15btDynamicsWorld13addConstraintEP17btTypedConstraintb__index__ = register_delegate(_ZN15btDynamicsWorld13addConstraintEP17btTypedConstraintb);
+var _ZN15btDynamicsWorld13getConstraintEi__index__ = register_delegate(_ZN15btDynamicsWorld13getConstraintEi);
+var _ZN15btDynamicsWorld13removeVehicleEP17btActionInterface__index__ = register_delegate(_ZN15btDynamicsWorld13removeVehicleEP17btActionInterface);
+var _ZN15btDynamicsWorld15removeCharacterEP17btActionInterface__index__ = register_delegate(_ZN15btDynamicsWorld15removeCharacterEP17btActionInterface);
+var _ZN15btDynamicsWorld16removeConstraintEP17btTypedConstraint__index__ = register_delegate(_ZN15btDynamicsWorld16removeConstraintEP17btTypedConstraint);
+var _ZN15btDynamicsWorldD0Ev__index__ = register_delegate(_ZN15btDynamicsWorldD0Ev);
+var _ZN15btDynamicsWorldD1Ev__index__ = register_delegate(_ZN15btDynamicsWorldD1Ev);
+var _ZN15btGjkConvexCast16calcTimeOfImpactERK11btTransformS2_S2_S2_RN12btConvexCast10CastResultE__index__ = register_delegate(_ZN15btGjkConvexCast16calcTimeOfImpactERK11btTransformS2_S2_S2_RN12btConvexCast10CastResultE);
+var _ZN15btGjkConvexCastD0Ev__index__ = register_delegate(_ZN15btGjkConvexCastD0Ev);
+var _ZN15btGjkConvexCastD1Ev__index__ = register_delegate(_ZN15btGjkConvexCastD1Ev);
+var _ZN15btNullPairCache18addOverlappingPairEP17btBroadphaseProxyS1___index__ = register_delegate(_ZN15btNullPairCache18addOverlappingPairEP17btBroadphaseProxyS1_);
+var _ZN15btNullPairCache18hasDeferredRemovalEv__index__ = register_delegate(_ZN15btNullPairCache18hasDeferredRemovalEv);
+var _ZN15btNullPairCache19cleanProxyFromPairsEP17btBroadphaseProxyP12btDispatcher__index__ = register_delegate(_ZN15btNullPairCache19cleanProxyFromPairsEP17btBroadphaseProxyP12btDispatcher);
+var _ZN15btNullPairCache20cleanOverlappingPairER16btBroadphasePairP12btDispatcher__index__ = register_delegate(_ZN15btNullPairCache20cleanOverlappingPairER16btBroadphasePairP12btDispatcher);
+var _ZN15btNullPairCache20sortOverlappingPairsEP12btDispatcher__index__ = register_delegate(_ZN15btNullPairCache20sortOverlappingPairsEP12btDispatcher);
+var _ZN15btNullPairCache21removeOverlappingPairEP17btBroadphaseProxyS1_P12btDispatcher__index__ = register_delegate(_ZN15btNullPairCache21removeOverlappingPairEP17btBroadphaseProxyS1_P12btDispatcher);
+var _ZN15btNullPairCache23getOverlappingPairArrayEv__index__ = register_delegate(_ZN15btNullPairCache23getOverlappingPairArrayEv);
+var _ZN15btNullPairCache24setOverlapFilterCallbackEP23btOverlapFilterCallback__index__ = register_delegate(_ZN15btNullPairCache24setOverlapFilterCallbackEP23btOverlapFilterCallback);
+var _ZN15btNullPairCache26getOverlappingPairArrayPtrEv__index__ = register_delegate(_ZN15btNullPairCache26getOverlappingPairArrayPtrEv);
+var _ZN15btNullPairCache26processAllOverlappingPairsEP17btOverlapCallbackP12btDispatcher__index__ = register_delegate(_ZN15btNullPairCache26processAllOverlappingPairsEP17btOverlapCallbackP12btDispatcher);
+var _ZN15btNullPairCache28setInternalGhostPairCallbackEP25btOverlappingPairCallback__index__ = register_delegate(_ZN15btNullPairCache28setInternalGhostPairCallbackEP25btOverlappingPairCallback);
+var _ZN15btNullPairCache37removeOverlappingPairsContainingProxyEP17btBroadphaseProxyP12btDispatcher__index__ = register_delegate(_ZN15btNullPairCache37removeOverlappingPairsContainingProxyEP17btBroadphaseProxyP12btDispatcher);
+var _ZN15btNullPairCache8findPairEP17btBroadphaseProxyS1___index__ = register_delegate(_ZN15btNullPairCache8findPairEP17btBroadphaseProxyS1_);
+var _ZN15btNullPairCacheD0Ev__index__ = register_delegate(_ZN15btNullPairCacheD0Ev);
+var _ZN15btNullPairCacheD1Ev__index__ = register_delegate(_ZN15btNullPairCacheD1Ev);
+var _ZN15btTriangleShapeD0Ev__index__ = register_delegate(_ZN15btTriangleShapeD0Ev);
+var _ZN15btTriangleShapeD1Ev__index__ = register_delegate(_ZN15btTriangleShapeD1Ev);
+var _ZN16btBoxBoxDetector16getClosestPointsERKN36btDiscreteCollisionDetectorInterface17ClosestPointInputERNS0_6ResultEP12btIDebugDrawb__index__ = register_delegate(_ZN16btBoxBoxDetector16getClosestPointsERKN36btDiscreteCollisionDetectorInterface17ClosestPointInputERNS0_6ResultEP12btIDebugDrawb);
+var _ZN16btBoxBoxDetectorD0Ev__index__ = register_delegate(_ZN16btBoxBoxDetectorD0Ev);
+var _ZN16btBoxBoxDetectorD1Ev__index__ = register_delegate(_ZN16btBoxBoxDetectorD1Ev);
+var _ZN16btCollisionWorld11updateAabbsEv__index__ = register_delegate(_ZN16btCollisionWorld11updateAabbsEv);
+var _ZN16btCollisionWorld14debugDrawWorldEv__index__ = register_delegate(_ZN16btCollisionWorld14debugDrawWorldEv);
+var _ZN16btCollisionWorld14getDebugDrawerEv__index__ = register_delegate(_ZN16btCollisionWorld14getDebugDrawerEv);
+var _ZN16btCollisionWorld14setDebugDrawerEP12btIDebugDraw__index__ = register_delegate(_ZN16btCollisionWorld14setDebugDrawerEP12btIDebugDraw);
+var _ZN16btCollisionWorld15debugDrawObjectERK11btTransformPK16btCollisionShapeRK9btVector3__index__ = register_delegate(_ZN16btCollisionWorld15debugDrawObjectERK11btTransformPK16btCollisionShapeRK9btVector3);
+var _ZN16btCollisionWorld18addCollisionObjectEP17btCollisionObjectss__index__ = register_delegate(_ZN16btCollisionWorld18addCollisionObjectEP17btCollisionObjectss);
+var _ZN16btCollisionWorld21removeCollisionObjectEP17btCollisionObject__index__ = register_delegate(_ZN16btCollisionWorld21removeCollisionObjectEP17btCollisionObject);
+var _ZN16btCollisionWorld24ClosestRayResultCallback15addSingleResultERNS_14LocalRayResultEb__index__ = register_delegate(_ZN16btCollisionWorld24ClosestRayResultCallback15addSingleResultERNS_14LocalRayResultEb);
+var _ZN16btCollisionWorld24ClosestRayResultCallbackD0Ev__index__ = register_delegate(_ZN16btCollisionWorld24ClosestRayResultCallbackD0Ev);
+var _ZN16btCollisionWorld24ClosestRayResultCallbackD1Ev__index__ = register_delegate(_ZN16btCollisionWorld24ClosestRayResultCallbackD1Ev);
+var _ZN16btCollisionWorld27ClosestConvexResultCallback15addSingleResultERNS_17LocalConvexResultEb__index__ = register_delegate(_ZN16btCollisionWorld27ClosestConvexResultCallback15addSingleResultERNS_17LocalConvexResultEb);
+var _ZN16btCollisionWorld27ClosestConvexResultCallbackD0Ev__index__ = register_delegate(_ZN16btCollisionWorld27ClosestConvexResultCallbackD0Ev);
+var _ZN16btCollisionWorld27ClosestConvexResultCallbackD1Ev__index__ = register_delegate(_ZN16btCollisionWorld27ClosestConvexResultCallbackD1Ev);
+var _ZN16btCollisionWorld33performDiscreteCollisionDetectionEv__index__ = register_delegate(_ZN16btCollisionWorld33performDiscreteCollisionDetectionEv);
+var _ZN16btCollisionWorld9serializeEP12btSerializer__index__ = register_delegate(_ZN16btCollisionWorld9serializeEP12btSerializer);
+var _ZN16btCollisionWorldD0Ev__index__ = register_delegate(_ZN16btCollisionWorldD0Ev);
+var _ZN16btCollisionWorldD1Ev__index__ = register_delegate(_ZN16btCollisionWorldD1Ev);
+var _ZN16btDbvtBroadphase10printStatsEv__index__ = register_delegate(_ZN16btDbvtBroadphase10printStatsEv);
+var _ZN16btDbvtBroadphase11createProxyERK9btVector3S2_iPvssP12btDispatcherS3___index__ = register_delegate(_ZN16btDbvtBroadphase11createProxyERK9btVector3S2_iPvssP12btDispatcherS3_);
+var _ZN16btDbvtBroadphase12destroyProxyEP17btBroadphaseProxyP12btDispatcher__index__ = register_delegate(_ZN16btDbvtBroadphase12destroyProxyEP17btBroadphaseProxyP12btDispatcher);
+var _ZN16btDbvtBroadphase23getOverlappingPairCacheEv__index__ = register_delegate(_ZN16btDbvtBroadphase23getOverlappingPairCacheEv);
+var _ZN16btDbvtBroadphase25calculateOverlappingPairsEP12btDispatcher__index__ = register_delegate(_ZN16btDbvtBroadphase25calculateOverlappingPairsEP12btDispatcher);
+var _ZN16btDbvtBroadphase7rayTestERK9btVector3S2_R23btBroadphaseRayCallbackS2_S2___index__ = register_delegate(_ZN16btDbvtBroadphase7rayTestERK9btVector3S2_R23btBroadphaseRayCallbackS2_S2_);
+var _ZN16btDbvtBroadphase7setAabbEP17btBroadphaseProxyRK9btVector3S4_P12btDispatcher__index__ = register_delegate(_ZN16btDbvtBroadphase7setAabbEP17btBroadphaseProxyRK9btVector3S4_P12btDispatcher);
+var _ZN16btDbvtBroadphase8aabbTestERK9btVector3S2_R24btBroadphaseAabbCallback__index__ = register_delegate(_ZN16btDbvtBroadphase8aabbTestERK9btVector3S2_R24btBroadphaseAabbCallback);
+var _ZN16btDbvtBroadphase9resetPoolEP12btDispatcher__index__ = register_delegate(_ZN16btDbvtBroadphase9resetPoolEP12btDispatcher);
+var _ZN16btDbvtBroadphaseD0Ev__index__ = register_delegate(_ZN16btDbvtBroadphaseD0Ev);
+var _ZN16btDbvtBroadphaseD1Ev__index__ = register_delegate(_ZN16btDbvtBroadphaseD1Ev);
+var _ZN16btEmptyAlgorithm10CreateFunc24CreateCollisionAlgorithmER36btCollisionAlgorithmConstructionInfoP17btCollisionObjectS4___index__ = register_delegate(_ZN16btEmptyAlgorithm10CreateFunc24CreateCollisionAlgorithmER36btCollisionAlgorithmConstructionInfoP17btCollisionObjectS4_);
+var _ZN16btEmptyAlgorithm10CreateFuncD0Ev__index__ = register_delegate(_ZN16btEmptyAlgorithm10CreateFuncD0Ev);
+var _ZN16btEmptyAlgorithm10CreateFuncD1Ev__index__ = register_delegate(_ZN16btEmptyAlgorithm10CreateFuncD1Ev);
+var _ZN16btEmptyAlgorithm16processCollisionEP17btCollisionObjectS1_RK16btDispatcherInfoP16btManifoldResult__index__ = register_delegate(_ZN16btEmptyAlgorithm16processCollisionEP17btCollisionObjectS1_RK16btDispatcherInfoP16btManifoldResult);
+var _ZN16btEmptyAlgorithm21calculateTimeOfImpactEP17btCollisionObjectS1_RK16btDispatcherInfoP16btManifoldResult__index__ = register_delegate(_ZN16btEmptyAlgorithm21calculateTimeOfImpactEP17btCollisionObjectS1_RK16btDispatcherInfoP16btManifoldResult);
+var _ZN16btEmptyAlgorithm22getAllContactManifoldsER20btAlignedObjectArrayIP20btPersistentManifoldE__index__ = register_delegate(_ZN16btEmptyAlgorithm22getAllContactManifoldsER20btAlignedObjectArrayIP20btPersistentManifoldE);
+var _ZN16btEmptyAlgorithmD0Ev__index__ = register_delegate(_ZN16btEmptyAlgorithmD0Ev);
+var _ZN16btEmptyAlgorithmD1Ev__index__ = register_delegate(_ZN16btEmptyAlgorithmD1Ev);
+var _ZN16btManifoldResult15addContactPointERK9btVector3S2_f__index__ = register_delegate(_ZN16btManifoldResult15addContactPointERK9btVector3S2_f);
+var _ZN16btManifoldResult20setShapeIdentifiersAEii__index__ = register_delegate(_ZN16btManifoldResult20setShapeIdentifiersAEii);
+var _ZN16btManifoldResult20setShapeIdentifiersBEii__index__ = register_delegate(_ZN16btManifoldResult20setShapeIdentifiersBEii);
+var _ZN16btManifoldResultD0Ev__index__ = register_delegate(_ZN16btManifoldResultD0Ev);
+var _ZN16btManifoldResultD1Ev__index__ = register_delegate(_ZN16btManifoldResultD1Ev);
+var _ZN16btPointCollector15addContactPointERK9btVector3S2_f__index__ = register_delegate(_ZN16btPointCollector15addContactPointERK9btVector3S2_f);
+var _ZN16btPointCollector20setShapeIdentifiersAEii__index__ = register_delegate(_ZN16btPointCollector20setShapeIdentifiersAEii);
+var _ZN16btPointCollector20setShapeIdentifiersBEii__index__ = register_delegate(_ZN16btPointCollector20setShapeIdentifiersBEii);
+var _ZN16btPointCollectorD0Ev__index__ = register_delegate(_ZN16btPointCollectorD0Ev);
+var _ZN16btPointCollectorD1Ev__index__ = register_delegate(_ZN16btPointCollectorD1Ev);
+var _ZN17DebugDrawcallback15processTriangleEP9btVector3ii__index__ = register_delegate(_ZN17DebugDrawcallback15processTriangleEP9btVector3ii);
+var _ZN17DebugDrawcallback28internalProcessTriangleIndexEP9btVector3ii__index__ = register_delegate(_ZN17DebugDrawcallback28internalProcessTriangleIndexEP9btVector3ii);
+var _ZN17DebugDrawcallbackD0Ev__index__ = register_delegate(_ZN17DebugDrawcallbackD0Ev);
+var _ZN17DebugDrawcallbackD1Ev__index__ = register_delegate(_ZN17DebugDrawcallbackD1Ev);
+var _ZN17btCollisionObject17setCollisionShapeEP16btCollisionShape__index__ = register_delegate(_ZN17btCollisionObject17setCollisionShapeEP16btCollisionShape);
+var _ZN17btCollisionObject24checkCollideWithOverrideEPS___index__ = register_delegate(_ZN17btCollisionObject24checkCollideWithOverrideEPS_);
+var _ZN17btCollisionObjectD0Ev__index__ = register_delegate(_ZN17btCollisionObjectD0Ev);
+var _ZN17btCollisionObjectD1Ev__index__ = register_delegate(_ZN17btCollisionObjectD1Ev);
+var _ZN17btConvexHullShape15setLocalScalingERK9btVector3__index__ = register_delegate(_ZN17btConvexHullShape15setLocalScalingERK9btVector3);
+var _ZN17btConvexHullShapeD0Ev__index__ = register_delegate(_ZN17btConvexHullShapeD0Ev);
+var _ZN17btConvexHullShapeD1Ev__index__ = register_delegate(_ZN17btConvexHullShapeD1Ev);
+var _ZN17btGjkPairDetector16getClosestPointsERKN36btDiscreteCollisionDetectorInterface17ClosestPointInputERNS0_6ResultEP12btIDebugDrawb__index__ = register_delegate(_ZN17btGjkPairDetector16getClosestPointsERKN36btDiscreteCollisionDetectorInterface17ClosestPointInputERNS0_6ResultEP12btIDebugDrawb);
+var _ZN17btGjkPairDetectorD0Ev__index__ = register_delegate(_ZN17btGjkPairDetectorD0Ev);
+var _ZN17btGjkPairDetectorD1Ev__index__ = register_delegate(_ZN17btGjkPairDetectorD1Ev);
+var _ZN17btHingeConstraint13buildJacobianEv__index__ = register_delegate(_ZN17btHingeConstraint13buildJacobianEv);
+var _ZN17btHingeConstraint8getInfo1EPN17btTypedConstraint17btConstraintInfo1E__index__ = register_delegate(_ZN17btHingeConstraint8getInfo1EPN17btTypedConstraint17btConstraintInfo1E);
+var _ZN17btHingeConstraint8getInfo2EPN17btTypedConstraint17btConstraintInfo2E__index__ = register_delegate(_ZN17btHingeConstraint8getInfo2EPN17btTypedConstraint17btConstraintInfo2E);
+var _ZN17btHingeConstraint8setParamEifi__index__ = register_delegate(_ZN17btHingeConstraint8setParamEifi);
+var _ZN17btHingeConstraintD0Ev__index__ = register_delegate(_ZN17btHingeConstraintD0Ev);
+var _ZN17btHingeConstraintD1Ev__index__ = register_delegate(_ZN17btHingeConstraintD1Ev);
+var _ZN17btTypedConstraint21setupSolverConstraintER20btAlignedObjectArrayI18btSolverConstraintEiif__index__ = register_delegate(_ZN17btTypedConstraint21setupSolverConstraintER20btAlignedObjectArrayI18btSolverConstraintEiif);
+var _ZN17btTypedConstraint23solveConstraintObsoleteER11btRigidBodyS1_f__index__ = register_delegate(_ZN17btTypedConstraint23solveConstraintObsoleteER11btRigidBodyS1_f);
+var _ZN18btConstraintSolver12prepareSolveEii__index__ = register_delegate(_ZN18btConstraintSolver12prepareSolveEii);
+var _ZN18btConstraintSolver9allSolvedERK19btContactSolverInfoP12btIDebugDrawP12btStackAlloc__index__ = register_delegate(_ZN18btConstraintSolver9allSolvedERK19btContactSolverInfoP12btIDebugDrawP12btStackAlloc);
+var _ZN18btDbvtTreeCollider7ProcessEPK10btDbvtNode__index__ = register_delegate(_ZN18btDbvtTreeCollider7ProcessEPK10btDbvtNode);
+var _ZN18btDbvtTreeCollider7ProcessEPK10btDbvtNodeS2___index__ = register_delegate(_ZN18btDbvtTreeCollider7ProcessEPK10btDbvtNodeS2_);
+var _ZN18btDbvtTreeColliderD0Ev__index__ = register_delegate(_ZN18btDbvtTreeColliderD0Ev);
+var _ZN18btDbvtTreeColliderD1Ev__index__ = register_delegate(_ZN18btDbvtTreeColliderD1Ev);
+var _ZN18btTriangleCallbackD0Ev__index__ = register_delegate(_ZN18btTriangleCallbackD0Ev);
+var _ZN18btTriangleCallbackD1Ev__index__ = register_delegate(_ZN18btTriangleCallbackD1Ev);
+var _ZN19BroadphaseRayTester7ProcessEPK10btDbvtNode__index__ = register_delegate(_ZN19BroadphaseRayTester7ProcessEPK10btDbvtNode);
+var _ZN19BroadphaseRayTesterD0Ev__index__ = register_delegate(_ZN19BroadphaseRayTesterD0Ev);
+var _ZN19BroadphaseRayTesterD1Ev__index__ = register_delegate(_ZN19BroadphaseRayTesterD1Ev);
+var _ZN19btSingleRayCallback7processEPK17btBroadphaseProxy__index__ = register_delegate(_ZN19btSingleRayCallback7processEPK17btBroadphaseProxy);
+var _ZN19btSingleRayCallbackD0Ev__index__ = register_delegate(_ZN19btSingleRayCallbackD0Ev);
+var _ZN19btSingleRayCallbackD1Ev__index__ = register_delegate(_ZN19btSingleRayCallbackD1Ev);
+var _ZN19btTriangleMeshShape15setLocalScalingERK9btVector3__index__ = register_delegate(_ZN19btTriangleMeshShape15setLocalScalingERK9btVector3);
+var _ZN19btTriangleMeshShapeD0Ev__index__ = register_delegate(_ZN19btTriangleMeshShapeD0Ev);
+var _ZN19btTriangleMeshShapeD1Ev__index__ = register_delegate(_ZN19btTriangleMeshShapeD1Ev);
+var _ZN20BroadphaseAabbTester7ProcessEPK10btDbvtNode__index__ = register_delegate(_ZN20BroadphaseAabbTester7ProcessEPK10btDbvtNode);
+var _ZN20BroadphaseAabbTesterD0Ev__index__ = register_delegate(_ZN20BroadphaseAabbTesterD0Ev);
+var _ZN20BroadphaseAabbTesterD1Ev__index__ = register_delegate(_ZN20BroadphaseAabbTesterD1Ev);
+var _ZN20btAxisSweep3InternalItE10printStatsEv__index__ = register_delegate(_ZN20btAxisSweep3InternalItE10printStatsEv);
+var _ZN20btAxisSweep3InternalItE11createProxyERK9btVector3S3_iPvssP12btDispatcherS4___index__ = register_delegate(_ZN20btAxisSweep3InternalItE11createProxyERK9btVector3S3_iPvssP12btDispatcherS4_);
+var _ZN20btAxisSweep3InternalItE12destroyProxyEP17btBroadphaseProxyP12btDispatcher__index__ = register_delegate(_ZN20btAxisSweep3InternalItE12destroyProxyEP17btBroadphaseProxyP12btDispatcher);
+var _ZN20btAxisSweep3InternalItE23getOverlappingPairCacheEv__index__ = register_delegate(_ZN20btAxisSweep3InternalItE23getOverlappingPairCacheEv);
+var _ZN20btAxisSweep3InternalItE25calculateOverlappingPairsEP12btDispatcher__index__ = register_delegate(_ZN20btAxisSweep3InternalItE25calculateOverlappingPairsEP12btDispatcher);
+var _ZN20btAxisSweep3InternalItE7rayTestERK9btVector3S3_R23btBroadphaseRayCallbackS3_S3___index__ = register_delegate(_ZN20btAxisSweep3InternalItE7rayTestERK9btVector3S3_R23btBroadphaseRayCallbackS3_S3_);
+var _ZN20btAxisSweep3InternalItE7setAabbEP17btBroadphaseProxyRK9btVector3S5_P12btDispatcher__index__ = register_delegate(_ZN20btAxisSweep3InternalItE7setAabbEP17btBroadphaseProxyRK9btVector3S5_P12btDispatcher);
+var _ZN20btAxisSweep3InternalItE8aabbTestERK9btVector3S3_R24btBroadphaseAabbCallback__index__ = register_delegate(_ZN20btAxisSweep3InternalItE8aabbTestERK9btVector3S3_R24btBroadphaseAabbCallback);
+var _ZN20btAxisSweep3InternalItE9resetPoolEP12btDispatcher__index__ = register_delegate(_ZN20btAxisSweep3InternalItE9resetPoolEP12btDispatcher);
+var _ZN20btAxisSweep3InternalItED0Ev__index__ = register_delegate(_ZN20btAxisSweep3InternalItED0Ev);
+var _ZN20btAxisSweep3InternalItED1Ev__index__ = register_delegate(_ZN20btAxisSweep3InternalItED1Ev);
+var _ZN20btCollisionAlgorithmD0Ev__index__ = register_delegate(_ZN20btCollisionAlgorithmD0Ev);
+var _ZN20btCollisionAlgorithmD1Ev__index__ = register_delegate(_ZN20btCollisionAlgorithmD1Ev);
+var _ZN20btDefaultMotionState17setWorldTransformERK11btTransform__index__ = register_delegate(_ZN20btDefaultMotionState17setWorldTransformERK11btTransform);
+var _ZN20btDefaultMotionStateD0Ev__index__ = register_delegate(_ZN20btDefaultMotionStateD0Ev);
+var _ZN20btDefaultMotionStateD1Ev__index__ = register_delegate(_ZN20btDefaultMotionStateD1Ev);
+var _ZN21SupportVertexCallback15processTriangleEP9btVector3ii__index__ = register_delegate(_ZN21SupportVertexCallback15processTriangleEP9btVector3ii);
+var _ZN21SupportVertexCallbackD0Ev__index__ = register_delegate(_ZN21SupportVertexCallbackD0Ev);
+var _ZN21SupportVertexCallbackD1Ev__index__ = register_delegate(_ZN21SupportVertexCallbackD1Ev);
+var _ZN21btCollisionDispatcher13clearManifoldEP20btPersistentManifold__index__ = register_delegate(_ZN21btCollisionDispatcher13clearManifoldEP20btPersistentManifold);
+var _ZN21btCollisionDispatcher13findAlgorithmEP17btCollisionObjectS1_P20btPersistentManifold__index__ = register_delegate(_ZN21btCollisionDispatcher13findAlgorithmEP17btCollisionObjectS1_P20btPersistentManifold);
+var _ZN21btCollisionDispatcher13needsResponseEP17btCollisionObjectS1___index__ = register_delegate(_ZN21btCollisionDispatcher13needsResponseEP17btCollisionObjectS1_);
+var _ZN21btCollisionDispatcher14getNewManifoldEPvS0___index__ = register_delegate(_ZN21btCollisionDispatcher14getNewManifoldEPvS0_);
+var _ZN21btCollisionDispatcher14needsCollisionEP17btCollisionObjectS1___index__ = register_delegate(_ZN21btCollisionDispatcher14needsCollisionEP17btCollisionObjectS1_);
+var _ZN21btCollisionDispatcher15releaseManifoldEP20btPersistentManifold__index__ = register_delegate(_ZN21btCollisionDispatcher15releaseManifoldEP20btPersistentManifold);
+var _ZN21btCollisionDispatcher19defaultNearCallbackER16btBroadphasePairRS_RK16btDispatcherInfo__index__ = register_delegate(_ZN21btCollisionDispatcher19defaultNearCallbackER16btBroadphasePairRS_RK16btDispatcherInfo);
+var _ZN21btCollisionDispatcher22freeCollisionAlgorithmEPv__index__ = register_delegate(_ZN21btCollisionDispatcher22freeCollisionAlgorithmEPv);
+var _ZN21btCollisionDispatcher25dispatchAllCollisionPairsEP22btOverlappingPairCacheRK16btDispatcherInfoP12btDispatcher__index__ = register_delegate(_ZN21btCollisionDispatcher25dispatchAllCollisionPairsEP22btOverlappingPairCacheRK16btDispatcherInfoP12btDispatcher);
+var _ZN21btCollisionDispatcher26allocateCollisionAlgorithmEi__index__ = register_delegate(_ZN21btCollisionDispatcher26allocateCollisionAlgorithmEi);
+var _ZN21btCollisionDispatcher26getInternalManifoldPointerEv__index__ = register_delegate(_ZN21btCollisionDispatcher26getInternalManifoldPointerEv);
+var _ZN21btCollisionDispatcher26getManifoldByIndexInternalEi__index__ = register_delegate(_ZN21btCollisionDispatcher26getManifoldByIndexInternalEi);
+var _ZN21btCollisionDispatcherD0Ev__index__ = register_delegate(_ZN21btCollisionDispatcherD0Ev);
+var _ZN21btCollisionDispatcherD1Ev__index__ = register_delegate(_ZN21btCollisionDispatcherD1Ev);
+var _ZN21btConeTwistConstraint13buildJacobianEv__index__ = register_delegate(_ZN21btConeTwistConstraint13buildJacobianEv);
+var _ZN21btConeTwistConstraint23solveConstraintObsoleteER11btRigidBodyS1_f__index__ = register_delegate(_ZN21btConeTwistConstraint23solveConstraintObsoleteER11btRigidBodyS1_f);
+var _ZN21btConeTwistConstraint8getInfo1EPN17btTypedConstraint17btConstraintInfo1E__index__ = register_delegate(_ZN21btConeTwistConstraint8getInfo1EPN17btTypedConstraint17btConstraintInfo1E);
+var _ZN21btConeTwistConstraint8getInfo2EPN17btTypedConstraint17btConstraintInfo2E__index__ = register_delegate(_ZN21btConeTwistConstraint8getInfo2EPN17btTypedConstraint17btConstraintInfo2E);
+var _ZN21btConeTwistConstraint8setParamEifi__index__ = register_delegate(_ZN21btConeTwistConstraint8setParamEifi);
+var _ZN21btConeTwistConstraintD0Ev__index__ = register_delegate(_ZN21btConeTwistConstraintD0Ev);
+var _ZN21btConeTwistConstraintD1Ev__index__ = register_delegate(_ZN21btConeTwistConstraintD1Ev);
+var _ZN21btConvexInternalShape15setLocalScalingERK9btVector3__index__ = register_delegate(_ZN21btConvexInternalShape15setLocalScalingERK9btVector3);
+var _ZN21btConvexInternalShape9setMarginEf__index__ = register_delegate(_ZN21btConvexInternalShape9setMarginEf);
+var _ZN21btSingleSweepCallback7processEPK17btBroadphaseProxy__index__ = register_delegate(_ZN21btSingleSweepCallback7processEPK17btBroadphaseProxy);
+var _ZN21btSingleSweepCallbackD0Ev__index__ = register_delegate(_ZN21btSingleSweepCallbackD0Ev);
+var _ZN21btSingleSweepCallbackD1Ev__index__ = register_delegate(_ZN21btSingleSweepCallbackD1Ev);
+var _ZN22SphereTriangleDetector16getClosestPointsERKN36btDiscreteCollisionDetectorInterface17ClosestPointInputERNS0_6ResultEP12btIDebugDrawb__index__ = register_delegate(_ZN22SphereTriangleDetector16getClosestPointsERKN36btDiscreteCollisionDetectorInterface17ClosestPointInputERNS0_6ResultEP12btIDebugDrawb);
+var _ZN22SphereTriangleDetectorD0Ev__index__ = register_delegate(_ZN22SphereTriangleDetectorD0Ev);
+var _ZN22SphereTriangleDetectorD1Ev__index__ = register_delegate(_ZN22SphereTriangleDetectorD1Ev);
+var _ZN22btBvhTriangleMeshShape15setLocalScalingERK9btVector3__index__ = register_delegate(_ZN22btBvhTriangleMeshShape15setLocalScalingERK9btVector3);
+var _ZN22btBvhTriangleMeshShapeD0Ev__index__ = register_delegate(_ZN22btBvhTriangleMeshShapeD0Ev);
+var _ZN22btBvhTriangleMeshShapeD1Ev__index__ = register_delegate(_ZN22btBvhTriangleMeshShapeD1Ev);
+var _ZN22btCompoundLeafCallback7ProcessEPK10btDbvtNode__index__ = register_delegate(_ZN22btCompoundLeafCallback7ProcessEPK10btDbvtNode);
+var _ZN22btCompoundLeafCallbackD0Ev__index__ = register_delegate(_ZN22btCompoundLeafCallbackD0Ev);
+var _ZN22btCompoundLeafCallbackD1Ev__index__ = register_delegate(_ZN22btCompoundLeafCallbackD1Ev);
+var _ZN22btSubsimplexConvexCast16calcTimeOfImpactERK11btTransformS2_S2_S2_RN12btConvexCast10CastResultE__index__ = register_delegate(_ZN22btSubsimplexConvexCast16calcTimeOfImpactERK11btTransformS2_S2_S2_RN12btConvexCast10CastResultE);
+var _ZN22btSubsimplexConvexCastD0Ev__index__ = register_delegate(_ZN22btSubsimplexConvexCastD0Ev);
+var _ZN22btSubsimplexConvexCastD1Ev__index__ = register_delegate(_ZN22btSubsimplexConvexCastD1Ev);
+var _ZN23btCollisionPairCallback14processOverlapER16btBroadphasePair__index__ = register_delegate(_ZN23btCollisionPairCallback14processOverlapER16btBroadphasePair);
+var _ZN23btCollisionPairCallbackD0Ev__index__ = register_delegate(_ZN23btCollisionPairCallbackD0Ev);
+var _ZN23btCollisionPairCallbackD1Ev__index__ = register_delegate(_ZN23btCollisionPairCallbackD1Ev);
+var _ZN23btConvexConvexAlgorithm10CreateFunc24CreateCollisionAlgorithmER36btCollisionAlgorithmConstructionInfoP17btCollisionObjectS4___index__ = register_delegate(_ZN23btConvexConvexAlgorithm10CreateFunc24CreateCollisionAlgorithmER36btCollisionAlgorithmConstructionInfoP17btCollisionObjectS4_);
+var _ZN23btConvexConvexAlgorithm10CreateFuncD0Ev__index__ = register_delegate(_ZN23btConvexConvexAlgorithm10CreateFuncD0Ev);
+var _ZN23btConvexConvexAlgorithm10CreateFuncD1Ev__index__ = register_delegate(_ZN23btConvexConvexAlgorithm10CreateFuncD1Ev);
+var _ZN23btConvexConvexAlgorithm16processCollisionEP17btCollisionObjectS1_RK16btDispatcherInfoP16btManifoldResult__index__ = register_delegate(_ZN23btConvexConvexAlgorithm16processCollisionEP17btCollisionObjectS1_RK16btDispatcherInfoP16btManifoldResult);
+var _ZN23btConvexConvexAlgorithm21calculateTimeOfImpactEP17btCollisionObjectS1_RK16btDispatcherInfoP16btManifoldResult__index__ = register_delegate(_ZN23btConvexConvexAlgorithm21calculateTimeOfImpactEP17btCollisionObjectS1_RK16btDispatcherInfoP16btManifoldResult);
+var _ZN23btConvexConvexAlgorithm22getAllContactManifoldsER20btAlignedObjectArrayIP20btPersistentManifoldE__index__ = register_delegate(_ZN23btConvexConvexAlgorithm22getAllContactManifoldsER20btAlignedObjectArrayIP20btPersistentManifoldE);
+var _ZN23btConvexConvexAlgorithmD0Ev__index__ = register_delegate(_ZN23btConvexConvexAlgorithmD0Ev);
+var _ZN23btConvexConvexAlgorithmD1Ev__index__ = register_delegate(_ZN23btConvexConvexAlgorithmD1Ev);
+var _ZN23btDiscreteDynamicsWorld10addVehicleEP17btActionInterface__index__ = register_delegate(_ZN23btDiscreteDynamicsWorld10addVehicleEP17btActionInterface);
+var _ZN23btDiscreteDynamicsWorld10setGravityERK9btVector3__index__ = register_delegate(_ZN23btDiscreteDynamicsWorld10setGravityERK9btVector3);
+var _ZN23btDiscreteDynamicsWorld11clearForcesEv__index__ = register_delegate(_ZN23btDiscreteDynamicsWorld11clearForcesEv);
+var _ZN23btDiscreteDynamicsWorld11setNumTasksEi__index__ = register_delegate(_ZN23btDiscreteDynamicsWorld11setNumTasksEi);
+var _ZN23btDiscreteDynamicsWorld12addCharacterEP17btActionInterface__index__ = register_delegate(_ZN23btDiscreteDynamicsWorld12addCharacterEP17btActionInterface);
+var _ZN23btDiscreteDynamicsWorld12addRigidBodyEP11btRigidBody__index__ = register_delegate(_ZN23btDiscreteDynamicsWorld12addRigidBodyEP11btRigidBody);
+var _ZN23btDiscreteDynamicsWorld12addRigidBodyEP11btRigidBodyss__index__ = register_delegate(_ZN23btDiscreteDynamicsWorld12addRigidBodyEP11btRigidBodyss);
+var _ZN23btDiscreteDynamicsWorld12applyGravityEv__index__ = register_delegate(_ZN23btDiscreteDynamicsWorld12applyGravityEv);
+var _ZN23btDiscreteDynamicsWorld12removeActionEP17btActionInterface__index__ = register_delegate(_ZN23btDiscreteDynamicsWorld12removeActionEP17btActionInterface);
+var _ZN23btDiscreteDynamicsWorld13addConstraintEP17btTypedConstraintb__index__ = register_delegate(_ZN23btDiscreteDynamicsWorld13addConstraintEP17btTypedConstraintb);
+var _ZN23btDiscreteDynamicsWorld13getConstraintEi__index__ = register_delegate(_ZN23btDiscreteDynamicsWorld13getConstraintEi);
+var _ZN23btDiscreteDynamicsWorld13removeVehicleEP17btActionInterface__index__ = register_delegate(_ZN23btDiscreteDynamicsWorld13removeVehicleEP17btActionInterface);
+var _ZN23btDiscreteDynamicsWorld14debugDrawWorldEv__index__ = register_delegate(_ZN23btDiscreteDynamicsWorld14debugDrawWorldEv);
+var _ZN23btDiscreteDynamicsWorld14stepSimulationEfif__index__ = register_delegate(_ZN23btDiscreteDynamicsWorld14stepSimulationEfif);
+var _ZN23btDiscreteDynamicsWorld14updateVehiclesEf__index__ = register_delegate(_ZN23btDiscreteDynamicsWorld14updateVehiclesEf);
+var _ZN23btDiscreteDynamicsWorld15removeCharacterEP17btActionInterface__index__ = register_delegate(_ZN23btDiscreteDynamicsWorld15removeCharacterEP17btActionInterface);
+var _ZN23btDiscreteDynamicsWorld15removeRigidBodyEP11btRigidBody__index__ = register_delegate(_ZN23btDiscreteDynamicsWorld15removeRigidBodyEP11btRigidBody);
+var _ZN23btDiscreteDynamicsWorld16removeConstraintEP17btTypedConstraint__index__ = register_delegate(_ZN23btDiscreteDynamicsWorld16removeConstraintEP17btTypedConstraint);
+var _ZN23btDiscreteDynamicsWorld16solveConstraintsER19btContactSolverInfo__index__ = register_delegate(_ZN23btDiscreteDynamicsWorld16solveConstraintsER19btContactSolverInfo);
+var _ZN23btDiscreteDynamicsWorld18addCollisionObjectEP17btCollisionObjectss__index__ = register_delegate(_ZN23btDiscreteDynamicsWorld18addCollisionObjectEP17btCollisionObjectss);
+var _ZN23btDiscreteDynamicsWorld18saveKinematicStateEf__index__ = register_delegate(_ZN23btDiscreteDynamicsWorld18saveKinematicStateEf);
+var _ZN23btDiscreteDynamicsWorld19getConstraintSolverEv__index__ = register_delegate(_ZN23btDiscreteDynamicsWorld19getConstraintSolverEv);
+var _ZN23btDiscreteDynamicsWorld19integrateTransformsEf__index__ = register_delegate(_ZN23btDiscreteDynamicsWorld19integrateTransformsEf);
+var _ZN23btDiscreteDynamicsWorld19setConstraintSolverEP18btConstraintSolver__index__ = register_delegate(_ZN23btDiscreteDynamicsWorld19setConstraintSolverEP18btConstraintSolver);
+var _ZN23btDiscreteDynamicsWorld21removeCollisionObjectEP17btCollisionObject__index__ = register_delegate(_ZN23btDiscreteDynamicsWorld21removeCollisionObjectEP17btCollisionObject);
+var _ZN23btDiscreteDynamicsWorld23synchronizeMotionStatesEv__index__ = register_delegate(_ZN23btDiscreteDynamicsWorld23synchronizeMotionStatesEv);
+var _ZN23btDiscreteDynamicsWorld25predictUnconstraintMotionEf__index__ = register_delegate(_ZN23btDiscreteDynamicsWorld25predictUnconstraintMotionEf);
+var _ZN23btDiscreteDynamicsWorld26calculateSimulationIslandsEv__index__ = register_delegate(_ZN23btDiscreteDynamicsWorld26calculateSimulationIslandsEv);
+var _ZN23btDiscreteDynamicsWorld28internalSingleStepSimulationEf__index__ = register_delegate(_ZN23btDiscreteDynamicsWorld28internalSingleStepSimulationEf);
+var _ZN23btDiscreteDynamicsWorld9addActionEP17btActionInterface__index__ = register_delegate(_ZN23btDiscreteDynamicsWorld9addActionEP17btActionInterface);
+var _ZN23btDiscreteDynamicsWorld9serializeEP12btSerializer__index__ = register_delegate(_ZN23btDiscreteDynamicsWorld9serializeEP12btSerializer);
+var _ZN23btDiscreteDynamicsWorldD0Ev__index__ = register_delegate(_ZN23btDiscreteDynamicsWorldD0Ev);
+var _ZN23btDiscreteDynamicsWorldD1Ev__index__ = register_delegate(_ZN23btDiscreteDynamicsWorldD1Ev);
+var _ZN23btStridingMeshInterfaceD0Ev__index__ = register_delegate(_ZN23btStridingMeshInterfaceD0Ev);
+var _ZN23btStridingMeshInterfaceD1Ev__index__ = register_delegate(_ZN23btStridingMeshInterfaceD1Ev);
+var _ZN24btConvexTriangleCallback15processTriangleEP9btVector3ii__index__ = register_delegate(_ZN24btConvexTriangleCallback15processTriangleEP9btVector3ii);
+var _ZN24btConvexTriangleCallbackD0Ev__index__ = register_delegate(_ZN24btConvexTriangleCallbackD0Ev);
+var _ZN24btConvexTriangleCallbackD1Ev__index__ = register_delegate(_ZN24btConvexTriangleCallbackD1Ev);
+var _ZN24btPerturbedContactResult15addContactPointERK9btVector3S2_f__index__ = register_delegate(_ZN24btPerturbedContactResult15addContactPointERK9btVector3S2_f);
+var _ZN24btPerturbedContactResultD0Ev__index__ = register_delegate(_ZN24btPerturbedContactResultD0Ev);
+var _ZN24btPerturbedContactResultD1Ev__index__ = register_delegate(_ZN24btPerturbedContactResultD1Ev);
+var _ZN25btSimulationIslandManager21updateActivationStateEP16btCollisionWorldP12btDispatcher__index__ = register_delegate(_ZN25btSimulationIslandManager21updateActivationStateEP16btCollisionWorldP12btDispatcher);
+var _ZN25btSimulationIslandManager26storeIslandActivationStateEP16btCollisionWorld__index__ = register_delegate(_ZN25btSimulationIslandManager26storeIslandActivationStateEP16btCollisionWorld);
+var _ZN25btSimulationIslandManagerD0Ev__index__ = register_delegate(_ZN25btSimulationIslandManagerD0Ev);
+var _ZN25btSimulationIslandManagerD1Ev__index__ = register_delegate(_ZN25btSimulationIslandManagerD1Ev);
+var _ZN25btTriangleRaycastCallback15processTriangleEP9btVector3ii__index__ = register_delegate(_ZN25btTriangleRaycastCallback15processTriangleEP9btVector3ii);
+var _ZN26btBoxBoxCollisionAlgorithm10CreateFunc24CreateCollisionAlgorithmER36btCollisionAlgorithmConstructionInfoP17btCollisionObjectS4___index__ = register_delegate(_ZN26btBoxBoxCollisionAlgorithm10CreateFunc24CreateCollisionAlgorithmER36btCollisionAlgorithmConstructionInfoP17btCollisionObjectS4_);
+var _ZN26btBoxBoxCollisionAlgorithm10CreateFuncD0Ev__index__ = register_delegate(_ZN26btBoxBoxCollisionAlgorithm10CreateFuncD0Ev);
+var _ZN26btBoxBoxCollisionAlgorithm10CreateFuncD1Ev__index__ = register_delegate(_ZN26btBoxBoxCollisionAlgorithm10CreateFuncD1Ev);
+var _ZN26btBoxBoxCollisionAlgorithm16processCollisionEP17btCollisionObjectS1_RK16btDispatcherInfoP16btManifoldResult__index__ = register_delegate(_ZN26btBoxBoxCollisionAlgorithm16processCollisionEP17btCollisionObjectS1_RK16btDispatcherInfoP16btManifoldResult);
+var _ZN26btBoxBoxCollisionAlgorithm21calculateTimeOfImpactEP17btCollisionObjectS1_RK16btDispatcherInfoP16btManifoldResult__index__ = register_delegate(_ZN26btBoxBoxCollisionAlgorithm21calculateTimeOfImpactEP17btCollisionObjectS1_RK16btDispatcherInfoP16btManifoldResult);
+var _ZN26btBoxBoxCollisionAlgorithm22getAllContactManifoldsER20btAlignedObjectArrayIP20btPersistentManifoldE__index__ = register_delegate(_ZN26btBoxBoxCollisionAlgorithm22getAllContactManifoldsER20btAlignedObjectArrayIP20btPersistentManifoldE);
+var _ZN26btBoxBoxCollisionAlgorithmD0Ev__index__ = register_delegate(_ZN26btBoxBoxCollisionAlgorithmD0Ev);
+var _ZN26btBoxBoxCollisionAlgorithmD1Ev__index__ = register_delegate(_ZN26btBoxBoxCollisionAlgorithmD1Ev);
+var _ZN26btTriangleIndexVertexArray16unLockVertexBaseEi__index__ = register_delegate(_ZN26btTriangleIndexVertexArray16unLockVertexBaseEi);
+var _ZN26btTriangleIndexVertexArray18preallocateIndicesEi__index__ = register_delegate(_ZN26btTriangleIndexVertexArray18preallocateIndicesEi);
+var _ZN26btTriangleIndexVertexArray19preallocateVerticesEi__index__ = register_delegate(_ZN26btTriangleIndexVertexArray19preallocateVerticesEi);
+var _ZN26btTriangleIndexVertexArray24getLockedVertexIndexBaseEPPhRiR14PHY_ScalarTypeS2_S1_S2_S2_S4_i__index__ = register_delegate(_ZN26btTriangleIndexVertexArray24getLockedVertexIndexBaseEPPhRiR14PHY_ScalarTypeS2_S1_S2_S2_S4_i);
+var _ZN26btTriangleIndexVertexArrayD0Ev__index__ = register_delegate(_ZN26btTriangleIndexVertexArrayD0Ev);
+var _ZN26btTriangleIndexVertexArrayD1Ev__index__ = register_delegate(_ZN26btTriangleIndexVertexArrayD1Ev);
+var _ZN27btContinuousConvexCollision16calcTimeOfImpactERK11btTransformS2_S2_S2_RN12btConvexCast10CastResultE__index__ = register_delegate(_ZN27btContinuousConvexCollision16calcTimeOfImpactERK11btTransformS2_S2_S2_RN12btConvexCast10CastResultE);
+var _ZN27btContinuousConvexCollisionD0Ev__index__ = register_delegate(_ZN27btContinuousConvexCollisionD0Ev);
+var _ZN27btContinuousConvexCollisionD1Ev__index__ = register_delegate(_ZN27btContinuousConvexCollisionD1Ev);
+var _ZN28btCompoundCollisionAlgorithm10CreateFunc24CreateCollisionAlgorithmER36btCollisionAlgorithmConstructionInfoP17btCollisionObjectS4___index__ = register_delegate(_ZN28btCompoundCollisionAlgorithm10CreateFunc24CreateCollisionAlgorithmER36btCollisionAlgorithmConstructionInfoP17btCollisionObjectS4_);
+var _ZN28btCompoundCollisionAlgorithm10CreateFuncD0Ev__index__ = register_delegate(_ZN28btCompoundCollisionAlgorithm10CreateFuncD0Ev);
+var _ZN28btCompoundCollisionAlgorithm10CreateFuncD1Ev__index__ = register_delegate(_ZN28btCompoundCollisionAlgorithm10CreateFuncD1Ev);
+var _ZN28btCompoundCollisionAlgorithm16processCollisionEP17btCollisionObjectS1_RK16btDispatcherInfoP16btManifoldResult__index__ = register_delegate(_ZN28btCompoundCollisionAlgorithm16processCollisionEP17btCollisionObjectS1_RK16btDispatcherInfoP16btManifoldResult);
+var _ZN28btCompoundCollisionAlgorithm17SwappedCreateFunc24CreateCollisionAlgorithmER36btCollisionAlgorithmConstructionInfoP17btCollisionObjectS4___index__ = register_delegate(_ZN28btCompoundCollisionAlgorithm17SwappedCreateFunc24CreateCollisionAlgorithmER36btCollisionAlgorithmConstructionInfoP17btCollisionObjectS4_);
+var _ZN28btCompoundCollisionAlgorithm17SwappedCreateFuncD0Ev__index__ = register_delegate(_ZN28btCompoundCollisionAlgorithm17SwappedCreateFuncD0Ev);
+var _ZN28btCompoundCollisionAlgorithm17SwappedCreateFuncD1Ev__index__ = register_delegate(_ZN28btCompoundCollisionAlgorithm17SwappedCreateFuncD1Ev);
+var _ZN28btCompoundCollisionAlgorithm21calculateTimeOfImpactEP17btCollisionObjectS1_RK16btDispatcherInfoP16btManifoldResult__index__ = register_delegate(_ZN28btCompoundCollisionAlgorithm21calculateTimeOfImpactEP17btCollisionObjectS1_RK16btDispatcherInfoP16btManifoldResult);
+var _ZN28btCompoundCollisionAlgorithm22getAllContactManifoldsER20btAlignedObjectArrayIP20btPersistentManifoldE__index__ = register_delegate(_ZN28btCompoundCollisionAlgorithm22getAllContactManifoldsER20btAlignedObjectArrayIP20btPersistentManifoldE);
+var _ZN28btCompoundCollisionAlgorithmD0Ev__index__ = register_delegate(_ZN28btCompoundCollisionAlgorithmD0Ev);
+var _ZN28btCompoundCollisionAlgorithmD1Ev__index__ = register_delegate(_ZN28btCompoundCollisionAlgorithmD1Ev);
+var _ZN28btHashedOverlappingPairCache18addOverlappingPairEP17btBroadphaseProxyS1___index__ = register_delegate(_ZN28btHashedOverlappingPairCache18addOverlappingPairEP17btBroadphaseProxyS1_);
+var _ZN28btHashedOverlappingPairCache18hasDeferredRemovalEv__index__ = register_delegate(_ZN28btHashedOverlappingPairCache18hasDeferredRemovalEv);
+var _ZN28btHashedOverlappingPairCache19cleanProxyFromPairsEP17btBroadphaseProxyP12btDispatcher__index__ = register_delegate(_ZN28btHashedOverlappingPairCache19cleanProxyFromPairsEP17btBroadphaseProxyP12btDispatcher);
+var _ZN28btHashedOverlappingPairCache20cleanOverlappingPairER16btBroadphasePairP12btDispatcher__index__ = register_delegate(_ZN28btHashedOverlappingPairCache20cleanOverlappingPairER16btBroadphasePairP12btDispatcher);
+var _ZN28btHashedOverlappingPairCache20sortOverlappingPairsEP12btDispatcher__index__ = register_delegate(_ZN28btHashedOverlappingPairCache20sortOverlappingPairsEP12btDispatcher);
+var _ZN28btHashedOverlappingPairCache21removeOverlappingPairEP17btBroadphaseProxyS1_P12btDispatcher__index__ = register_delegate(_ZN28btHashedOverlappingPairCache21removeOverlappingPairEP17btBroadphaseProxyS1_P12btDispatcher);
+var _ZN28btHashedOverlappingPairCache23getOverlappingPairArrayEv__index__ = register_delegate(_ZN28btHashedOverlappingPairCache23getOverlappingPairArrayEv);
+var _ZN28btHashedOverlappingPairCache24setOverlapFilterCallbackEP23btOverlapFilterCallback__index__ = register_delegate(_ZN28btHashedOverlappingPairCache24setOverlapFilterCallbackEP23btOverlapFilterCallback);
+var _ZN28btHashedOverlappingPairCache26getOverlappingPairArrayPtrEv__index__ = register_delegate(_ZN28btHashedOverlappingPairCache26getOverlappingPairArrayPtrEv);
+var _ZN28btHashedOverlappingPairCache26processAllOverlappingPairsEP17btOverlapCallbackP12btDispatcher__index__ = register_delegate(_ZN28btHashedOverlappingPairCache26processAllOverlappingPairsEP17btOverlapCallbackP12btDispatcher);
+var _ZN28btHashedOverlappingPairCache28setInternalGhostPairCallbackEP25btOverlappingPairCallback__index__ = register_delegate(_ZN28btHashedOverlappingPairCache28setInternalGhostPairCallbackEP25btOverlappingPairCallback);
+var _ZN28btHashedOverlappingPairCache37removeOverlappingPairsContainingProxyEP17btBroadphaseProxyP12btDispatcher__index__ = register_delegate(_ZN28btHashedOverlappingPairCache37removeOverlappingPairsContainingProxyEP17btBroadphaseProxyP12btDispatcher);
+var _ZN28btHashedOverlappingPairCache8findPairEP17btBroadphaseProxyS1___index__ = register_delegate(_ZN28btHashedOverlappingPairCache8findPairEP17btBroadphaseProxyS1_);
+var _ZN28btHashedOverlappingPairCacheD0Ev__index__ = register_delegate(_ZN28btHashedOverlappingPairCacheD0Ev);
+var _ZN28btHashedOverlappingPairCacheD1Ev__index__ = register_delegate(_ZN28btHashedOverlappingPairCacheD1Ev);
+var _ZN28btTriangleConvexcastCallback15processTriangleEP9btVector3ii__index__ = register_delegate(_ZN28btTriangleConvexcastCallback15processTriangleEP9btVector3ii);
+var _ZN28btTriangleConvexcastCallbackD0Ev__index__ = register_delegate(_ZN28btTriangleConvexcastCallbackD0Ev);
+var _ZN28btTriangleConvexcastCallbackD1Ev__index__ = register_delegate(_ZN28btTriangleConvexcastCallbackD1Ev);
+var _ZN30btActivatingCollisionAlgorithmD0Ev__index__ = register_delegate(_ZN30btActivatingCollisionAlgorithmD0Ev);
+var _ZN30btActivatingCollisionAlgorithmD1Ev__index__ = register_delegate(_ZN30btActivatingCollisionAlgorithmD1Ev);
+var _ZN30btGjkEpaPenetrationDepthSolver12calcPenDepthER22btVoronoiSimplexSolverPK13btConvexShapeS4_RK11btTransformS7_R9btVector3S9_S9_P12btIDebugDrawP12btStackAlloc__index__ = register_delegate(_ZN30btGjkEpaPenetrationDepthSolver12calcPenDepthER22btVoronoiSimplexSolverPK13btConvexShapeS4_RK11btTransformS7_R9btVector3S9_S9_P12btIDebugDrawP12btStackAlloc);
+var _ZN30btGjkEpaPenetrationDepthSolverD0Ev__index__ = register_delegate(_ZN30btGjkEpaPenetrationDepthSolverD0Ev);
+var _ZN30btGjkEpaPenetrationDepthSolverD1Ev__index__ = register_delegate(_ZN30btGjkEpaPenetrationDepthSolverD1Ev);
+var _ZN31btConvexPlaneCollisionAlgorithm10CreateFunc24CreateCollisionAlgorithmER36btCollisionAlgorithmConstructionInfoP17btCollisionObjectS4___index__ = register_delegate(_ZN31btConvexPlaneCollisionAlgorithm10CreateFunc24CreateCollisionAlgorithmER36btCollisionAlgorithmConstructionInfoP17btCollisionObjectS4_);
+var _ZN31btConvexPlaneCollisionAlgorithm10CreateFuncD0Ev__index__ = register_delegate(_ZN31btConvexPlaneCollisionAlgorithm10CreateFuncD0Ev);
+var _ZN31btConvexPlaneCollisionAlgorithm10CreateFuncD1Ev__index__ = register_delegate(_ZN31btConvexPlaneCollisionAlgorithm10CreateFuncD1Ev);
+var _ZN31btConvexPlaneCollisionAlgorithm16processCollisionEP17btCollisionObjectS1_RK16btDispatcherInfoP16btManifoldResult__index__ = register_delegate(_ZN31btConvexPlaneCollisionAlgorithm16processCollisionEP17btCollisionObjectS1_RK16btDispatcherInfoP16btManifoldResult);
+var _ZN31btConvexPlaneCollisionAlgorithm21calculateTimeOfImpactEP17btCollisionObjectS1_RK16btDispatcherInfoP16btManifoldResult__index__ = register_delegate(_ZN31btConvexPlaneCollisionAlgorithm21calculateTimeOfImpactEP17btCollisionObjectS1_RK16btDispatcherInfoP16btManifoldResult);
+var _ZN31btConvexPlaneCollisionAlgorithm22getAllContactManifoldsER20btAlignedObjectArrayIP20btPersistentManifoldE__index__ = register_delegate(_ZN31btConvexPlaneCollisionAlgorithm22getAllContactManifoldsER20btAlignedObjectArrayIP20btPersistentManifoldE);
+var _ZN31btConvexPlaneCollisionAlgorithmD0Ev__index__ = register_delegate(_ZN31btConvexPlaneCollisionAlgorithmD0Ev);
+var _ZN31btConvexPlaneCollisionAlgorithmD1Ev__index__ = register_delegate(_ZN31btConvexPlaneCollisionAlgorithmD1Ev);
+var _ZN31btDefaultCollisionConfiguration16getSimplexSolverEv__index__ = register_delegate(_ZN31btDefaultCollisionConfiguration16getSimplexSolverEv);
+var _ZN31btDefaultCollisionConfiguration17getStackAllocatorEv__index__ = register_delegate(_ZN31btDefaultCollisionConfiguration17getStackAllocatorEv);
+var _ZN31btDefaultCollisionConfiguration25getCollisionAlgorithmPoolEv__index__ = register_delegate(_ZN31btDefaultCollisionConfiguration25getCollisionAlgorithmPoolEv);
+var _ZN31btDefaultCollisionConfiguration25getPersistentManifoldPoolEv__index__ = register_delegate(_ZN31btDefaultCollisionConfiguration25getPersistentManifoldPoolEv);
+var _ZN31btDefaultCollisionConfiguration31getCollisionAlgorithmCreateFuncEii__index__ = register_delegate(_ZN31btDefaultCollisionConfiguration31getCollisionAlgorithmCreateFuncEii);
+var _ZN31btDefaultCollisionConfigurationD0Ev__index__ = register_delegate(_ZN31btDefaultCollisionConfigurationD0Ev);
+var _ZN31btDefaultCollisionConfigurationD1Ev__index__ = register_delegate(_ZN31btDefaultCollisionConfigurationD1Ev);
+var _ZN31btInternalTriangleIndexCallbackD0Ev__index__ = register_delegate(_ZN31btInternalTriangleIndexCallbackD0Ev);
+var _ZN31btInternalTriangleIndexCallbackD1Ev__index__ = register_delegate(_ZN31btInternalTriangleIndexCallbackD1Ev);
+var _ZN32btSphereSphereCollisionAlgorithm10CreateFunc24CreateCollisionAlgorithmER36btCollisionAlgorithmConstructionInfoP17btCollisionObjectS4___index__ = register_delegate(_ZN32btSphereSphereCollisionAlgorithm10CreateFunc24CreateCollisionAlgorithmER36btCollisionAlgorithmConstructionInfoP17btCollisionObjectS4_);
+var _ZN32btSphereSphereCollisionAlgorithm10CreateFuncD0Ev__index__ = register_delegate(_ZN32btSphereSphereCollisionAlgorithm10CreateFuncD0Ev);
+var _ZN32btSphereSphereCollisionAlgorithm10CreateFuncD1Ev__index__ = register_delegate(_ZN32btSphereSphereCollisionAlgorithm10CreateFuncD1Ev);
+var _ZN32btSphereSphereCollisionAlgorithm16processCollisionEP17btCollisionObjectS1_RK16btDispatcherInfoP16btManifoldResult__index__ = register_delegate(_ZN32btSphereSphereCollisionAlgorithm16processCollisionEP17btCollisionObjectS1_RK16btDispatcherInfoP16btManifoldResult);
+var _ZN32btSphereSphereCollisionAlgorithm21calculateTimeOfImpactEP17btCollisionObjectS1_RK16btDispatcherInfoP16btManifoldResult__index__ = register_delegate(_ZN32btSphereSphereCollisionAlgorithm21calculateTimeOfImpactEP17btCollisionObjectS1_RK16btDispatcherInfoP16btManifoldResult);
+var _ZN32btSphereSphereCollisionAlgorithm22getAllContactManifoldsER20btAlignedObjectArrayIP20btPersistentManifoldE__index__ = register_delegate(_ZN32btSphereSphereCollisionAlgorithm22getAllContactManifoldsER20btAlignedObjectArrayIP20btPersistentManifoldE);
+var _ZN32btSphereSphereCollisionAlgorithmD0Ev__index__ = register_delegate(_ZN32btSphereSphereCollisionAlgorithmD0Ev);
+var _ZN32btSphereSphereCollisionAlgorithmD1Ev__index__ = register_delegate(_ZN32btSphereSphereCollisionAlgorithmD1Ev);
+var _ZN33btConvexConcaveCollisionAlgorithm10CreateFunc24CreateCollisionAlgorithmER36btCollisionAlgorithmConstructionInfoP17btCollisionObjectS4___index__ = register_delegate(_ZN33btConvexConcaveCollisionAlgorithm10CreateFunc24CreateCollisionAlgorithmER36btCollisionAlgorithmConstructionInfoP17btCollisionObjectS4_);
+var _ZN33btConvexConcaveCollisionAlgorithm10CreateFuncD0Ev__index__ = register_delegate(_ZN33btConvexConcaveCollisionAlgorithm10CreateFuncD0Ev);
+var _ZN33btConvexConcaveCollisionAlgorithm10CreateFuncD1Ev__index__ = register_delegate(_ZN33btConvexConcaveCollisionAlgorithm10CreateFuncD1Ev);
+var _ZN33btConvexConcaveCollisionAlgorithm16processCollisionEP17btCollisionObjectS1_RK16btDispatcherInfoP16btManifoldResult__index__ = register_delegate(_ZN33btConvexConcaveCollisionAlgorithm16processCollisionEP17btCollisionObjectS1_RK16btDispatcherInfoP16btManifoldResult);
+var _ZN33btConvexConcaveCollisionAlgorithm17SwappedCreateFunc24CreateCollisionAlgorithmER36btCollisionAlgorithmConstructionInfoP17btCollisionObjectS4___index__ = register_delegate(_ZN33btConvexConcaveCollisionAlgorithm17SwappedCreateFunc24CreateCollisionAlgorithmER36btCollisionAlgorithmConstructionInfoP17btCollisionObjectS4_);
+var _ZN33btConvexConcaveCollisionAlgorithm17SwappedCreateFuncD0Ev__index__ = register_delegate(_ZN33btConvexConcaveCollisionAlgorithm17SwappedCreateFuncD0Ev);
+var _ZN33btConvexConcaveCollisionAlgorithm17SwappedCreateFuncD1Ev__index__ = register_delegate(_ZN33btConvexConcaveCollisionAlgorithm17SwappedCreateFuncD1Ev);
+var _ZN33btConvexConcaveCollisionAlgorithm21calculateTimeOfImpactEP17btCollisionObjectS1_RK16btDispatcherInfoP16btManifoldResult__index__ = register_delegate(_ZN33btConvexConcaveCollisionAlgorithm21calculateTimeOfImpactEP17btCollisionObjectS1_RK16btDispatcherInfoP16btManifoldResult);
+var _ZN33btConvexConcaveCollisionAlgorithm22getAllContactManifoldsER20btAlignedObjectArrayIP20btPersistentManifoldE__index__ = register_delegate(_ZN33btConvexConcaveCollisionAlgorithm22getAllContactManifoldsER20btAlignedObjectArrayIP20btPersistentManifoldE);
+var _ZN33btConvexConcaveCollisionAlgorithmD0Ev__index__ = register_delegate(_ZN33btConvexConcaveCollisionAlgorithmD0Ev);
+var _ZN33btConvexConcaveCollisionAlgorithmD1Ev__index__ = register_delegate(_ZN33btConvexConcaveCollisionAlgorithmD1Ev);
+var _ZN34btClosestNotMeConvexResultCallback15addSingleResultERN16btCollisionWorld17LocalConvexResultEb__index__ = register_delegate(_ZN34btClosestNotMeConvexResultCallback15addSingleResultERN16btCollisionWorld17LocalConvexResultEb);
+var _ZN34btClosestNotMeConvexResultCallbackD0Ev__index__ = register_delegate(_ZN34btClosestNotMeConvexResultCallbackD0Ev);
+var _ZN34btClosestNotMeConvexResultCallbackD1Ev__index__ = register_delegate(_ZN34btClosestNotMeConvexResultCallbackD1Ev);
+var _ZN34btSphereTriangleCollisionAlgorithm10CreateFunc24CreateCollisionAlgorithmER36btCollisionAlgorithmConstructionInfoP17btCollisionObjectS4___index__ = register_delegate(_ZN34btSphereTriangleCollisionAlgorithm10CreateFunc24CreateCollisionAlgorithmER36btCollisionAlgorithmConstructionInfoP17btCollisionObjectS4_);
+var _ZN34btSphereTriangleCollisionAlgorithm10CreateFuncD0Ev__index__ = register_delegate(_ZN34btSphereTriangleCollisionAlgorithm10CreateFuncD0Ev);
+var _ZN34btSphereTriangleCollisionAlgorithm10CreateFuncD1Ev__index__ = register_delegate(_ZN34btSphereTriangleCollisionAlgorithm10CreateFuncD1Ev);
+var _ZN34btSphereTriangleCollisionAlgorithm16processCollisionEP17btCollisionObjectS1_RK16btDispatcherInfoP16btManifoldResult__index__ = register_delegate(_ZN34btSphereTriangleCollisionAlgorithm16processCollisionEP17btCollisionObjectS1_RK16btDispatcherInfoP16btManifoldResult);
+var _ZN34btSphereTriangleCollisionAlgorithm21calculateTimeOfImpactEP17btCollisionObjectS1_RK16btDispatcherInfoP16btManifoldResult__index__ = register_delegate(_ZN34btSphereTriangleCollisionAlgorithm21calculateTimeOfImpactEP17btCollisionObjectS1_RK16btDispatcherInfoP16btManifoldResult);
+var _ZN34btSphereTriangleCollisionAlgorithm22getAllContactManifoldsER20btAlignedObjectArrayIP20btPersistentManifoldE__index__ = register_delegate(_ZN34btSphereTriangleCollisionAlgorithm22getAllContactManifoldsER20btAlignedObjectArrayIP20btPersistentManifoldE);
+var _ZN34btSphereTriangleCollisionAlgorithmD0Ev__index__ = register_delegate(_ZN34btSphereTriangleCollisionAlgorithmD0Ev);
+var _ZN34btSphereTriangleCollisionAlgorithmD1Ev__index__ = register_delegate(_ZN34btSphereTriangleCollisionAlgorithmD1Ev);
+var _ZN35btSequentialImpulseConstraintSolver10solveGroupEPP17btCollisionObjectiPP20btPersistentManifoldiPP17btTypedConstraintiRK19btContactSolverInfoP12btIDebugDrawP12btStackAllocP12btDispatcher__index__ = register_delegate(_ZN35btSequentialImpulseConstraintSolver10solveGroupEPP17btCollisionObjectiPP20btPersistentManifoldiPP17btTypedConstraintiRK19btContactSolverInfoP12btIDebugDrawP12btStackAllocP12btDispatcher);
+var _ZN35btSequentialImpulseConstraintSolver28solveGroupCacheFriendlySetupEPP17btCollisionObjectiPP20btPersistentManifoldiPP17btTypedConstraintiRK19btContactSolverInfoP12btIDebugDrawP12btStackAlloc__index__ = register_delegate(_ZN35btSequentialImpulseConstraintSolver28solveGroupCacheFriendlySetupEPP17btCollisionObjectiPP20btPersistentManifoldiPP17btTypedConstraintiRK19btContactSolverInfoP12btIDebugDrawP12btStackAlloc);
+var _ZN35btSequentialImpulseConstraintSolver29solveGroupCacheFriendlyFinishEPP17btCollisionObjectiPP20btPersistentManifoldiPP17btTypedConstraintiRK19btContactSolverInfoP12btIDebugDrawP12btStackAlloc__index__ = register_delegate(_ZN35btSequentialImpulseConstraintSolver29solveGroupCacheFriendlyFinishEPP17btCollisionObjectiPP20btPersistentManifoldiPP17btTypedConstraintiRK19btContactSolverInfoP12btIDebugDrawP12btStackAlloc);
+var _ZN35btSequentialImpulseConstraintSolver33solveGroupCacheFriendlyIterationsEPP17btCollisionObjectiPP20btPersistentManifoldiPP17btTypedConstraintiRK19btContactSolverInfoP12btIDebugDrawP12btStackAlloc__index__ = register_delegate(_ZN35btSequentialImpulseConstraintSolver33solveGroupCacheFriendlyIterationsEPP17btCollisionObjectiPP20btPersistentManifoldiPP17btTypedConstraintiRK19btContactSolverInfoP12btIDebugDrawP12btStackAlloc);
+var _ZN35btSequentialImpulseConstraintSolver45solveGroupCacheFriendlySplitImpulseIterationsEPP17btCollisionObjectiPP20btPersistentManifoldiPP17btTypedConstraintiRK19btContactSolverInfoP12btIDebugDrawP12btStackAlloc__index__ = register_delegate(_ZN35btSequentialImpulseConstraintSolver45solveGroupCacheFriendlySplitImpulseIterationsEPP17btCollisionObjectiPP20btPersistentManifoldiPP17btTypedConstraintiRK19btContactSolverInfoP12btIDebugDrawP12btStackAlloc);
+var _ZN35btSequentialImpulseConstraintSolver5resetEv__index__ = register_delegate(_ZN35btSequentialImpulseConstraintSolver5resetEv);
+var _ZN35btSequentialImpulseConstraintSolverD0Ev__index__ = register_delegate(_ZN35btSequentialImpulseConstraintSolverD0Ev);
+var _ZN35btSequentialImpulseConstraintSolverD1Ev__index__ = register_delegate(_ZN35btSequentialImpulseConstraintSolverD1Ev);
+var _ZN4__rw10__rw_facetD0Ev__index__ = register_delegate(_ZN4__rw10__rw_facetD0Ev);
+var _ZN4__rw10__rw_facetD1Ev__index__ = register_delegate(_ZN4__rw10__rw_facetD1Ev);
+var _ZN6btDbvt8ICollide7DescentEPK10btDbvtNode__index__ = register_delegate(_ZN6btDbvt8ICollide7DescentEPK10btDbvtNode);
+var _ZN6btDbvt8ICollide7ProcessEPK10btDbvtNodeS3___index__ = register_delegate(_ZN6btDbvt8ICollide7ProcessEPK10btDbvtNodeS3_);
+var _ZN6btDbvt8ICollide7ProcessEPK10btDbvtNodef__index__ = register_delegate(_ZN6btDbvt8ICollide7ProcessEPK10btDbvtNodef);
+var _ZN6btDbvt8ICollide9AllLeavesEPK10btDbvtNode__index__ = register_delegate(_ZN6btDbvt8ICollide9AllLeavesEPK10btDbvtNode);
+var _ZN7CFileLS4feofEv__index__ = register_delegate(_ZN7CFileLS4feofEv);
+var _ZN7CFileLS5freadEPvjj__index__ = register_delegate(_ZN7CFileLS5freadEPvjj);
+var _ZN7CFileLS5fseekEli__index__ = register_delegate(_ZN7CFileLS5fseekEli);
+var _ZN7CFileLS5ftellEv__index__ = register_delegate(_ZN7CFileLS5ftellEv);
+var _ZN7CFileLS6fcloseEv__index__ = register_delegate(_ZN7CFileLS6fcloseEv);
+var _ZN7CFileLS6fflushEv__index__ = register_delegate(_ZN7CFileLS6fflushEv);
+var _ZN7CFileLS6fwriteEPKvjj__index__ = register_delegate(_ZN7CFileLS6fwriteEPKvjj);
+var _ZN7CFileLS6ungetcEi__index__ = register_delegate(_ZN7CFileLS6ungetcEi);
+var _ZN7RagDollD0Ev__index__ = register_delegate(_ZN7RagDollD0Ev);
+var _ZN7RagDollD1Ev__index__ = register_delegate(_ZN7RagDollD1Ev);
+var _ZNK10__cxxabiv117__class_type_info10__do_catchEPKSt9type_infoPPvj__index__ = register_delegate(_ZNK10__cxxabiv117__class_type_info10__do_catchEPKSt9type_infoPPvj);
+var _ZNK10__cxxabiv117__class_type_info11__do_upcastEPKS0_PKvRNS0_15__upcast_resultE__index__ = register_delegate(_ZNK10__cxxabiv117__class_type_info11__do_upcastEPKS0_PKvRNS0_15__upcast_resultE);
+var _ZNK10__cxxabiv117__class_type_info11__do_upcastEPKS0_PPv__index__ = register_delegate(_ZNK10__cxxabiv117__class_type_info11__do_upcastEPKS0_PPv);
+var _ZNK10__cxxabiv117__class_type_info12__do_dyncastEiNS0_10__sub_kindEPKS0_PKvS3_S5_RNS0_16__dyncast_resultE__index__ = register_delegate(_ZNK10__cxxabiv117__class_type_info12__do_dyncastEiNS0_10__sub_kindEPKS0_PKvS3_S5_RNS0_16__dyncast_resultE);
+var _ZNK10__cxxabiv117__class_type_info20__do_find_public_srcEiPKvPKS0_S2___index__ = register_delegate(_ZNK10__cxxabiv117__class_type_info20__do_find_public_srcEiPKvPKS0_S2_);
+var _ZNK10__cxxabiv120__si_class_type_info11__do_upcastEPKNS_17__class_type_infoEPKvRNS1_15__upcast_resultE__index__ = register_delegate(_ZNK10__cxxabiv120__si_class_type_info11__do_upcastEPKNS_17__class_type_infoEPKvRNS1_15__upcast_resultE);
+var _ZNK10__cxxabiv120__si_class_type_info12__do_dyncastEiNS_17__class_type_info10__sub_kindEPKS1_PKvS4_S6_RNS1_16__dyncast_resultE__index__ = register_delegate(_ZNK10__cxxabiv120__si_class_type_info12__do_dyncastEiNS_17__class_type_info10__sub_kindEPKS1_PKvS4_S6_RNS1_16__dyncast_resultE);
+var _ZNK10__cxxabiv120__si_class_type_info20__do_find_public_srcEiPKvPKNS_17__class_type_infoES2___index__ = register_delegate(_ZNK10__cxxabiv120__si_class_type_info20__do_find_public_srcEiPKvPKNS_17__class_type_infoES2_);
+var _ZNK10__cxxabiv121__vmi_class_type_info11__do_upcastEPKNS_17__class_type_infoEPKvRNS1_15__upcast_resultE__index__ = register_delegate(_ZNK10__cxxabiv121__vmi_class_type_info11__do_upcastEPKNS_17__class_type_infoEPKvRNS1_15__upcast_resultE);
+var _ZNK10__cxxabiv121__vmi_class_type_info12__do_dyncastEiNS_17__class_type_info10__sub_kindEPKS1_PKvS4_S6_RNS1_16__dyncast_resultE__index__ = register_delegate(_ZNK10__cxxabiv121__vmi_class_type_info12__do_dyncastEiNS_17__class_type_info10__sub_kindEPKS1_PKvS4_S6_RNS1_16__dyncast_resultE);
+var _ZNK10__cxxabiv121__vmi_class_type_info20__do_find_public_srcEiPKvPKNS_17__class_type_infoES2___index__ = register_delegate(_ZNK10__cxxabiv121__vmi_class_type_info20__do_find_public_srcEiPKvPKNS_17__class_type_infoES2_);
+var _ZNK10btBoxShape11getNumEdgesEv__index__ = register_delegate(_ZNK10btBoxShape11getNumEdgesEv);
+var _ZNK10btBoxShape12getNumPlanesEv__index__ = register_delegate(_ZNK10btBoxShape12getNumPlanesEv);
+var _ZNK10btBoxShape14getNumVerticesEv__index__ = register_delegate(_ZNK10btBoxShape14getNumVerticesEv);
+var _ZNK10btBoxShape16getPlaneEquationER9btVector4i__index__ = register_delegate(_ZNK10btBoxShape16getPlaneEquationER9btVector4i);
+var _ZNK10btBoxShape21calculateLocalInertiaEfR9btVector3__index__ = register_delegate(_ZNK10btBoxShape21calculateLocalInertiaEfR9btVector3);
+var _ZNK10btBoxShape24localGetSupportingVertexERK9btVector3__index__ = register_delegate(_ZNK10btBoxShape24localGetSupportingVertexERK9btVector3);
+var _ZNK10btBoxShape32getPreferredPenetrationDirectionEiR9btVector3__index__ = register_delegate(_ZNK10btBoxShape32getPreferredPenetrationDirectionEiR9btVector3);
+var _ZNK10btBoxShape36getNumPreferredPenetrationDirectionsEv__index__ = register_delegate(_ZNK10btBoxShape36getNumPreferredPenetrationDirectionsEv);
+var _ZNK10btBoxShape37localGetSupportingVertexWithoutMarginERK9btVector3__index__ = register_delegate(_ZNK10btBoxShape37localGetSupportingVertexWithoutMarginERK9btVector3);
+var _ZNK10btBoxShape49batchedUnitVectorGetSupportingVertexWithoutMarginEPK9btVector3PS0_i__index__ = register_delegate(_ZNK10btBoxShape49batchedUnitVectorGetSupportingVertexWithoutMarginEPK9btVector3PS0_i);
+var _ZNK10btBoxShape7getAabbERK11btTransformR9btVector3S4___index__ = register_delegate(_ZNK10btBoxShape7getAabbERK11btTransformR9btVector3S4_);
+var _ZNK10btBoxShape7getEdgeEiR9btVector3S1___index__ = register_delegate(_ZNK10btBoxShape7getEdgeEiR9btVector3S1_);
+var _ZNK10btBoxShape7getNameEv__index__ = register_delegate(_ZNK10btBoxShape7getNameEv);
+var _ZNK10btBoxShape8getPlaneER9btVector3S1_i__index__ = register_delegate(_ZNK10btBoxShape8getPlaneER9btVector3S1_i);
+var _ZNK10btBoxShape8isInsideERK9btVector3f__index__ = register_delegate(_ZNK10btBoxShape8isInsideERK9btVector3f);
+var _ZNK10btBoxShape9getVertexEiR9btVector3__index__ = register_delegate(_ZNK10btBoxShape9getVertexEiR9btVector3);
+var _ZNK11CFileSystem12IsFileSystemEv__index__ = register_delegate(_ZNK11CFileSystem12IsFileSystemEv);
+var _ZNK11btRigidBody21serializeSingleObjectEP12btSerializer__index__ = register_delegate(_ZNK11btRigidBody21serializeSingleObjectEP12btSerializer);
+var _ZNK11btRigidBody28calculateSerializeBufferSizeEv__index__ = register_delegate(_ZNK11btRigidBody28calculateSerializeBufferSizeEv);
+var _ZNK11btRigidBody9serializeEPvP12btSerializer__index__ = register_delegate(_ZNK11btRigidBody9serializeEPvP12btSerializer);
+var _ZNK13btConvexShape31localGetSupportVertexNonVirtualERK9btVector3__index__ = register_delegate(_ZNK13btConvexShape31localGetSupportVertexNonVirtualERK9btVector3);
+var _ZNK13btConvexShape44localGetSupportVertexWithoutMarginNonVirtualERK9btVector3__index__ = register_delegate(_ZNK13btConvexShape44localGetSupportVertexWithoutMarginNonVirtualERK9btVector3);
+var _ZNK13btSphereShape21calculateLocalInertiaEfR9btVector3__index__ = register_delegate(_ZNK13btSphereShape21calculateLocalInertiaEfR9btVector3);
+var _ZNK13btSphereShape24localGetSupportingVertexERK9btVector3__index__ = register_delegate(_ZNK13btSphereShape24localGetSupportingVertexERK9btVector3);
+var _ZNK13btSphereShape37localGetSupportingVertexWithoutMarginERK9btVector3__index__ = register_delegate(_ZNK13btSphereShape37localGetSupportingVertexWithoutMarginERK9btVector3);
+var _ZNK13btSphereShape49batchedUnitVectorGetSupportingVertexWithoutMarginEPK9btVector3PS0_i__index__ = register_delegate(_ZNK13btSphereShape49batchedUnitVectorGetSupportingVertexWithoutMarginEPK9btVector3PS0_i);
+var _ZNK13btSphereShape7getAabbERK11btTransformR9btVector3S4___index__ = register_delegate(_ZNK13btSphereShape7getAabbERK11btTransformR9btVector3S4_);
+var _ZNK13btSphereShape7getNameEv__index__ = register_delegate(_ZNK13btSphereShape7getNameEv);
+var _ZNK13btSphereShape9getMarginEv__index__ = register_delegate(_ZNK13btSphereShape9getMarginEv);
+var _ZNK14CFileInterface12IsFileSystemEv__index__ = register_delegate(_ZNK14CFileInterface12IsFileSystemEv);
+var _ZNK14btCapsuleShape21calculateLocalInertiaEfR9btVector3__index__ = register_delegate(_ZNK14btCapsuleShape21calculateLocalInertiaEfR9btVector3);
+var _ZNK14btCapsuleShape28calculateSerializeBufferSizeEv__index__ = register_delegate(_ZNK14btCapsuleShape28calculateSerializeBufferSizeEv);
+var _ZNK14btCapsuleShape37localGetSupportingVertexWithoutMarginERK9btVector3__index__ = register_delegate(_ZNK14btCapsuleShape37localGetSupportingVertexWithoutMarginERK9btVector3);
+var _ZNK14btCapsuleShape49batchedUnitVectorGetSupportingVertexWithoutMarginEPK9btVector3PS0_i__index__ = register_delegate(_ZNK14btCapsuleShape49batchedUnitVectorGetSupportingVertexWithoutMarginEPK9btVector3PS0_i);
+var _ZNK14btCapsuleShape7getAabbERK11btTransformR9btVector3S4___index__ = register_delegate(_ZNK14btCapsuleShape7getAabbERK11btTransformR9btVector3S4_);
+var _ZNK14btCapsuleShape7getNameEv__index__ = register_delegate(_ZNK14btCapsuleShape7getNameEv);
+var _ZNK14btCapsuleShape9serializeEPvP12btSerializer__index__ = register_delegate(_ZNK14btCapsuleShape9serializeEPvP12btSerializer);
+var _ZNK14btConcaveShape9getMarginEv__index__ = register_delegate(_ZNK14btConcaveShape9getMarginEv);
+var _ZNK14btOptimizedBvh16serializeInPlaceEPvjb__index__ = register_delegate(_ZNK14btOptimizedBvh16serializeInPlaceEPvjb);
+var _ZNK14btQuantizedBvh31calculateSerializeBufferSizeNewEv__index__ = register_delegate(_ZNK14btQuantizedBvh31calculateSerializeBufferSizeNewEv);
+var _ZNK14btQuantizedBvh9serializeEPvP12btSerializer__index__ = register_delegate(_ZNK14btQuantizedBvh9serializeEPvP12btSerializer);
+var _ZNK14btQuantizedBvh9serializeEPvjb__index__ = register_delegate(_ZNK14btQuantizedBvh9serializeEPvjb);
+var _ZNK15btDynamicsWorld13getConstraintEi__index__ = register_delegate(_ZNK15btDynamicsWorld13getConstraintEi);
+var _ZNK15btDynamicsWorld17getNumConstraintsEv__index__ = register_delegate(_ZNK15btDynamicsWorld17getNumConstraintsEv);
+var _ZNK15btNullPairCache22getNumOverlappingPairsEv__index__ = register_delegate(_ZNK15btNullPairCache22getNumOverlappingPairsEv);
+var _ZNK15btNullPairCache26getOverlappingPairArrayPtrEv__index__ = register_delegate(_ZNK15btNullPairCache26getOverlappingPairArrayPtrEv);
+var _ZNK15btTriangleShape11getNumEdgesEv__index__ = register_delegate(_ZNK15btTriangleShape11getNumEdgesEv);
+var _ZNK15btTriangleShape12getNumPlanesEv__index__ = register_delegate(_ZNK15btTriangleShape12getNumPlanesEv);
+var _ZNK15btTriangleShape14getNumVerticesEv__index__ = register_delegate(_ZNK15btTriangleShape14getNumVerticesEv);
+var _ZNK15btTriangleShape16getPlaneEquationEiR9btVector3S1___index__ = register_delegate(_ZNK15btTriangleShape16getPlaneEquationEiR9btVector3S1_);
+var _ZNK15btTriangleShape21calculateLocalInertiaEfR9btVector3__index__ = register_delegate(_ZNK15btTriangleShape21calculateLocalInertiaEfR9btVector3);
+var _ZNK15btTriangleShape32getPreferredPenetrationDirectionEiR9btVector3__index__ = register_delegate(_ZNK15btTriangleShape32getPreferredPenetrationDirectionEiR9btVector3);
+var _ZNK15btTriangleShape36getNumPreferredPenetrationDirectionsEv__index__ = register_delegate(_ZNK15btTriangleShape36getNumPreferredPenetrationDirectionsEv);
+var _ZNK15btTriangleShape37localGetSupportingVertexWithoutMarginERK9btVector3__index__ = register_delegate(_ZNK15btTriangleShape37localGetSupportingVertexWithoutMarginERK9btVector3);
+var _ZNK15btTriangleShape49batchedUnitVectorGetSupportingVertexWithoutMarginEPK9btVector3PS0_i__index__ = register_delegate(_ZNK15btTriangleShape49batchedUnitVectorGetSupportingVertexWithoutMarginEPK9btVector3PS0_i);
+var _ZNK15btTriangleShape7getAabbERK11btTransformR9btVector3S4___index__ = register_delegate(_ZNK15btTriangleShape7getAabbERK11btTransformR9btVector3S4_);
+var _ZNK15btTriangleShape7getEdgeEiR9btVector3S1___index__ = register_delegate(_ZNK15btTriangleShape7getEdgeEiR9btVector3S1_);
+var _ZNK15btTriangleShape7getNameEv__index__ = register_delegate(_ZNK15btTriangleShape7getNameEv);
+var _ZNK15btTriangleShape8getPlaneER9btVector3S1_i__index__ = register_delegate(_ZNK15btTriangleShape8getPlaneER9btVector3S1_i);
+var _ZNK15btTriangleShape8isInsideERK9btVector3f__index__ = register_delegate(_ZNK15btTriangleShape8isInsideERK9btVector3f);
+var _ZNK15btTriangleShape9getVertexEiR9btVector3__index__ = register_delegate(_ZNK15btTriangleShape9getVertexEiR9btVector3);
+var _ZNK16btCollisionShape17getBoundingSphereER9btVector3Rf__index__ = register_delegate(_ZNK16btCollisionShape17getBoundingSphereER9btVector3Rf);
+var _ZNK16btCollisionShape20getAngularMotionDiscEv__index__ = register_delegate(_ZNK16btCollisionShape20getAngularMotionDiscEv);
+var _ZNK16btCollisionShape20serializeSingleShapeEP12btSerializer__index__ = register_delegate(_ZNK16btCollisionShape20serializeSingleShapeEP12btSerializer);
+var _ZNK16btCollisionShape27getContactBreakingThresholdEf__index__ = register_delegate(_ZNK16btCollisionShape27getContactBreakingThresholdEf);
+var _ZNK16btCollisionShape28calculateSerializeBufferSizeEv__index__ = register_delegate(_ZNK16btCollisionShape28calculateSerializeBufferSizeEv);
+var _ZNK16btCollisionShape9serializeEPvP12btSerializer__index__ = register_delegate(_ZNK16btCollisionShape9serializeEPvP12btSerializer);
+var _ZNK16btCollisionWorld17RayResultCallback14needsCollisionEP17btBroadphaseProxy__index__ = register_delegate(_ZNK16btCollisionWorld17RayResultCallback14needsCollisionEP17btBroadphaseProxy);
+var _ZNK16btCollisionWorld20ConvexResultCallback14needsCollisionEP17btBroadphaseProxy__index__ = register_delegate(_ZNK16btCollisionWorld20ConvexResultCallback14needsCollisionEP17btBroadphaseProxy);
+var _ZNK16btCollisionWorld7rayTestERK9btVector3S2_RNS_17RayResultCallbackE__index__ = register_delegate(_ZNK16btCollisionWorld7rayTestERK9btVector3S2_RNS_17RayResultCallbackE);
+var _ZNK16btDbvtBroadphase17getBroadphaseAabbER9btVector3S1___index__ = register_delegate(_ZNK16btDbvtBroadphase17getBroadphaseAabbER9btVector3S1_);
+var _ZNK16btDbvtBroadphase23getOverlappingPairCacheEv__index__ = register_delegate(_ZNK16btDbvtBroadphase23getOverlappingPairCacheEv);
+var _ZNK16btDbvtBroadphase7getAabbEP17btBroadphaseProxyR9btVector3S3___index__ = register_delegate(_ZNK16btDbvtBroadphase7getAabbEP17btBroadphaseProxyR9btVector3S3_);
+var _ZNK17btCollisionObject21serializeSingleObjectEP12btSerializer__index__ = register_delegate(_ZNK17btCollisionObject21serializeSingleObjectEP12btSerializer);
+var _ZNK17btCollisionObject28calculateSerializeBufferSizeEv__index__ = register_delegate(_ZNK17btCollisionObject28calculateSerializeBufferSizeEv);
+var _ZNK17btCollisionObject9serializeEPvP12btSerializer__index__ = register_delegate(_ZNK17btCollisionObject9serializeEPvP12btSerializer);
+var _ZNK17btConvexHullShape11getNumEdgesEv__index__ = register_delegate(_ZNK17btConvexHullShape11getNumEdgesEv);
+var _ZNK17btConvexHullShape12getNumPlanesEv__index__ = register_delegate(_ZNK17btConvexHullShape12getNumPlanesEv);
+var _ZNK17btConvexHullShape14getNumVerticesEv__index__ = register_delegate(_ZNK17btConvexHullShape14getNumVerticesEv);
+var _ZNK17btConvexHullShape24localGetSupportingVertexERK9btVector3__index__ = register_delegate(_ZNK17btConvexHullShape24localGetSupportingVertexERK9btVector3);
+var _ZNK17btConvexHullShape28calculateSerializeBufferSizeEv__index__ = register_delegate(_ZNK17btConvexHullShape28calculateSerializeBufferSizeEv);
+var _ZNK17btConvexHullShape37localGetSupportingVertexWithoutMarginERK9btVector3__index__ = register_delegate(_ZNK17btConvexHullShape37localGetSupportingVertexWithoutMarginERK9btVector3);
+var _ZNK17btConvexHullShape49batchedUnitVectorGetSupportingVertexWithoutMarginEPK9btVector3PS0_i__index__ = register_delegate(_ZNK17btConvexHullShape49batchedUnitVectorGetSupportingVertexWithoutMarginEPK9btVector3PS0_i);
+var _ZNK17btConvexHullShape7getEdgeEiR9btVector3S1___index__ = register_delegate(_ZNK17btConvexHullShape7getEdgeEiR9btVector3S1_);
+var _ZNK17btConvexHullShape7getNameEv__index__ = register_delegate(_ZNK17btConvexHullShape7getNameEv);
+var _ZNK17btConvexHullShape8getPlaneER9btVector3S1_i__index__ = register_delegate(_ZNK17btConvexHullShape8getPlaneER9btVector3S1_i);
+var _ZNK17btConvexHullShape8isInsideERK9btVector3f__index__ = register_delegate(_ZNK17btConvexHullShape8isInsideERK9btVector3f);
+var _ZNK17btConvexHullShape9getVertexEiR9btVector3__index__ = register_delegate(_ZNK17btConvexHullShape9getVertexEiR9btVector3);
+var _ZNK17btConvexHullShape9serializeEPvP12btSerializer__index__ = register_delegate(_ZNK17btConvexHullShape9serializeEPvP12btSerializer);
+var _ZNK17btHingeConstraint28calculateSerializeBufferSizeEv__index__ = register_delegate(_ZNK17btHingeConstraint28calculateSerializeBufferSizeEv);
+var _ZNK17btHingeConstraint8getParamEii__index__ = register_delegate(_ZNK17btHingeConstraint8getParamEii);
+var _ZNK17btHingeConstraint9serializeEPvP12btSerializer__index__ = register_delegate(_ZNK17btHingeConstraint9serializeEPvP12btSerializer);
+var _ZNK19btTriangleMeshShape15getLocalScalingEv__index__ = register_delegate(_ZNK19btTriangleMeshShape15getLocalScalingEv);
+var _ZNK19btTriangleMeshShape19processAllTrianglesEP18btTriangleCallbackRK9btVector3S4___index__ = register_delegate(_ZNK19btTriangleMeshShape19processAllTrianglesEP18btTriangleCallbackRK9btVector3S4_);
+var _ZNK19btTriangleMeshShape21calculateLocalInertiaEfR9btVector3__index__ = register_delegate(_ZNK19btTriangleMeshShape21calculateLocalInertiaEfR9btVector3);
+var _ZNK19btTriangleMeshShape24localGetSupportingVertexERK9btVector3__index__ = register_delegate(_ZNK19btTriangleMeshShape24localGetSupportingVertexERK9btVector3);
+var _ZNK19btTriangleMeshShape37localGetSupportingVertexWithoutMarginERK9btVector3__index__ = register_delegate(_ZNK19btTriangleMeshShape37localGetSupportingVertexWithoutMarginERK9btVector3);
+var _ZNK19btTriangleMeshShape7getAabbERK11btTransformR9btVector3S4___index__ = register_delegate(_ZNK19btTriangleMeshShape7getAabbERK11btTransformR9btVector3S4_);
+var _ZNK19btTriangleMeshShape7getNameEv__index__ = register_delegate(_ZNK19btTriangleMeshShape7getNameEv);
+var _ZNK20btAxisSweep3InternalItE17getBroadphaseAabbER9btVector3S2___index__ = register_delegate(_ZNK20btAxisSweep3InternalItE17getBroadphaseAabbER9btVector3S2_);
+var _ZNK20btAxisSweep3InternalItE23getOverlappingPairCacheEv__index__ = register_delegate(_ZNK20btAxisSweep3InternalItE23getOverlappingPairCacheEv);
+var _ZNK20btAxisSweep3InternalItE7getAabbEP17btBroadphaseProxyR9btVector3S4___index__ = register_delegate(_ZNK20btAxisSweep3InternalItE7getAabbEP17btBroadphaseProxyR9btVector3S4_);
+var _ZNK20btDefaultMotionState17getWorldTransformER11btTransform__index__ = register_delegate(_ZNK20btDefaultMotionState17getWorldTransformER11btTransform);
+var _ZNK21btCollisionDispatcher15getNumManifoldsEv__index__ = register_delegate(_ZNK21btCollisionDispatcher15getNumManifoldsEv);
+var _ZNK21btConeTwistConstraint28calculateSerializeBufferSizeEv__index__ = register_delegate(_ZNK21btConeTwistConstraint28calculateSerializeBufferSizeEv);
+var _ZNK21btConeTwistConstraint8getParamEii__index__ = register_delegate(_ZNK21btConeTwistConstraint8getParamEii);
+var _ZNK21btConeTwistConstraint9serializeEPvP12btSerializer__index__ = register_delegate(_ZNK21btConeTwistConstraint9serializeEPvP12btSerializer);
+var _ZNK21btConvexInternalShape11getAabbSlowERK11btTransformR9btVector3S4___index__ = register_delegate(_ZNK21btConvexInternalShape11getAabbSlowERK11btTransformR9btVector3S4_);
+var _ZNK21btConvexInternalShape15getLocalScalingEv__index__ = register_delegate(_ZNK21btConvexInternalShape15getLocalScalingEv);
+var _ZNK21btConvexInternalShape24localGetSupportingVertexERK9btVector3__index__ = register_delegate(_ZNK21btConvexInternalShape24localGetSupportingVertexERK9btVector3);
+var _ZNK21btConvexInternalShape28calculateSerializeBufferSizeEv__index__ = register_delegate(_ZNK21btConvexInternalShape28calculateSerializeBufferSizeEv);
+var _ZNK21btConvexInternalShape32getPreferredPenetrationDirectionEiR9btVector3__index__ = register_delegate(_ZNK21btConvexInternalShape32getPreferredPenetrationDirectionEiR9btVector3);
+var _ZNK21btConvexInternalShape36getNumPreferredPenetrationDirectionsEv__index__ = register_delegate(_ZNK21btConvexInternalShape36getNumPreferredPenetrationDirectionsEv);
+var _ZNK21btConvexInternalShape9getMarginEv__index__ = register_delegate(_ZNK21btConvexInternalShape9getMarginEv);
+var _ZNK21btConvexInternalShape9serializeEPvP12btSerializer__index__ = register_delegate(_ZNK21btConvexInternalShape9serializeEPvP12btSerializer);
+var _ZNK22btBvhTriangleMeshShape18serializeSingleBvhEP12btSerializer__index__ = register_delegate(_ZNK22btBvhTriangleMeshShape18serializeSingleBvhEP12btSerializer);
+var _ZNK22btBvhTriangleMeshShape19processAllTrianglesEP18btTriangleCallbackRK9btVector3S4___index__ = register_delegate(_ZNK22btBvhTriangleMeshShape19processAllTrianglesEP18btTriangleCallbackRK9btVector3S4_);
+var _ZNK22btBvhTriangleMeshShape28calculateSerializeBufferSizeEv__index__ = register_delegate(_ZNK22btBvhTriangleMeshShape28calculateSerializeBufferSizeEv);
+var _ZNK22btBvhTriangleMeshShape30serializeSingleTriangleInfoMapEP12btSerializer__index__ = register_delegate(_ZNK22btBvhTriangleMeshShape30serializeSingleTriangleInfoMapEP12btSerializer);
+var _ZNK22btBvhTriangleMeshShape7getNameEv__index__ = register_delegate(_ZNK22btBvhTriangleMeshShape7getNameEv);
+var _ZNK22btBvhTriangleMeshShape9serializeEPvP12btSerializer__index__ = register_delegate(_ZNK22btBvhTriangleMeshShape9serializeEPvP12btSerializer);
+var _ZNK23btDiscreteDynamicsWorld10getGravityEv__index__ = register_delegate(_ZNK23btDiscreteDynamicsWorld10getGravityEv);
+var _ZNK23btDiscreteDynamicsWorld12getWorldTypeEv__index__ = register_delegate(_ZNK23btDiscreteDynamicsWorld12getWorldTypeEv);
+var _ZNK23btDiscreteDynamicsWorld13getConstraintEi__index__ = register_delegate(_ZNK23btDiscreteDynamicsWorld13getConstraintEi);
+var _ZNK23btDiscreteDynamicsWorld17getNumConstraintsEv__index__ = register_delegate(_ZNK23btDiscreteDynamicsWorld17getNumConstraintsEv);
+var _ZNK23btPolyhedralConvexShape21calculateLocalInertiaEfR9btVector3__index__ = register_delegate(_ZNK23btPolyhedralConvexShape21calculateLocalInertiaEfR9btVector3);
+var _ZNK23btStridingMeshInterface14getPremadeAabbEP9btVector3S1___index__ = register_delegate(_ZNK23btStridingMeshInterface14getPremadeAabbEP9btVector3S1_);
+var _ZNK23btStridingMeshInterface14hasPremadeAabbEv__index__ = register_delegate(_ZNK23btStridingMeshInterface14hasPremadeAabbEv);
+var _ZNK23btStridingMeshInterface14setPremadeAabbERK9btVector3S2___index__ = register_delegate(_ZNK23btStridingMeshInterface14setPremadeAabbERK9btVector3S2_);
+var _ZNK23btStridingMeshInterface27InternalProcessAllTrianglesEP31btInternalTriangleIndexCallbackRK9btVector3S4___index__ = register_delegate(_ZNK23btStridingMeshInterface27InternalProcessAllTrianglesEP31btInternalTriangleIndexCallbackRK9btVector3S4_);
+var _ZNK23btStridingMeshInterface28calculateSerializeBufferSizeEv__index__ = register_delegate(_ZNK23btStridingMeshInterface28calculateSerializeBufferSizeEv);
+var _ZNK23btStridingMeshInterface9serializeEPvP12btSerializer__index__ = register_delegate(_ZNK23btStridingMeshInterface9serializeEPvP12btSerializer);
+var _ZNK26btTriangleIndexVertexArray14getNumSubPartsEv__index__ = register_delegate(_ZNK26btTriangleIndexVertexArray14getNumSubPartsEv);
+var _ZNK26btTriangleIndexVertexArray14getPremadeAabbEP9btVector3S1___index__ = register_delegate(_ZNK26btTriangleIndexVertexArray14getPremadeAabbEP9btVector3S1_);
+var _ZNK26btTriangleIndexVertexArray14hasPremadeAabbEv__index__ = register_delegate(_ZNK26btTriangleIndexVertexArray14hasPremadeAabbEv);
+var _ZNK26btTriangleIndexVertexArray14setPremadeAabbERK9btVector3S2___index__ = register_delegate(_ZNK26btTriangleIndexVertexArray14setPremadeAabbERK9btVector3S2_);
+var _ZNK26btTriangleIndexVertexArray24unLockReadOnlyVertexBaseEi__index__ = register_delegate(_ZNK26btTriangleIndexVertexArray24unLockReadOnlyVertexBaseEi);
+var _ZNK26btTriangleIndexVertexArray32getLockedReadOnlyVertexIndexBaseEPPKhRiR14PHY_ScalarTypeS3_S2_S3_S3_S5_i__index__ = register_delegate(_ZNK26btTriangleIndexVertexArray32getLockedReadOnlyVertexIndexBaseEPPKhRiR14PHY_ScalarTypeS3_S2_S3_S3_S5_i);
+var _ZNK28btHashedOverlappingPairCache22getNumOverlappingPairsEv__index__ = register_delegate(_ZNK28btHashedOverlappingPairCache22getNumOverlappingPairsEv);
+var _ZNK28btHashedOverlappingPairCache26getOverlappingPairArrayPtrEv__index__ = register_delegate(_ZNK28btHashedOverlappingPairCache26getOverlappingPairArrayPtrEv);
+var _ZNK34btClosestNotMeConvexResultCallback14needsCollisionEP17btBroadphaseProxy__index__ = register_delegate(_ZNK34btClosestNotMeConvexResultCallback14needsCollisionEP17btBroadphaseProxy);
+var _ZNK34btPolyhedralConvexAabbCachingShape7getAabbERK11btTransformR9btVector3S4___index__ = register_delegate(_ZNK34btPolyhedralConvexAabbCachingShape7getAabbERK11btTransformR9btVector3S4_);
+var _ZNKSt8messagesIcE6do_getEiiiRKSs__index__ = register_delegate(_ZNKSt8messagesIcE6do_getEiiiRKSs);
+var _ZNKSt8messagesIcE7do_openERKSsRKSt6locale__index__ = register_delegate(_ZNKSt8messagesIcE7do_openERKSsRKSt6locale);
+var _ZNKSt8messagesIcE8do_closeEi__index__ = register_delegate(_ZNKSt8messagesIcE8do_closeEi);
+var _ZNKSt9type_info10__do_catchEPKS_PPvj__index__ = register_delegate(_ZNKSt9type_info10__do_catchEPKS_PPvj);
+var _ZNKSt9type_info15__is_function_pEv__index__ = register_delegate(_ZNKSt9type_info15__is_function_pEv);
+var _ZNSt8messagesIcED0Ev__index__ = register_delegate(_ZNSt8messagesIcED0Ev);
+var _ZNSt8messagesIcED1Ev__index__ = register_delegate(_ZNSt8messagesIcED1Ev);
+var _ZNSt9type_infoD0Ev__index__ = register_delegate(_ZNSt9type_infoD0Ev);
+var _ZNSt9type_infoD1Ev__index__ = register_delegate(_ZNSt9type_infoD1Ev);
+var _ZThn4_N17DebugDrawcallback28internalProcessTriangleIndexEP9btVector3ii__index__ = register_delegate(_ZThn4_N17DebugDrawcallback28internalProcessTriangleIndexEP9btVector3ii);
+var _ZThn4_N17DebugDrawcallbackD0Ev__index__ = register_delegate(_ZThn4_N17DebugDrawcallbackD0Ev);
+var _ZThn4_N17DebugDrawcallbackD1Ev__index__ = register_delegate(_ZThn4_N17DebugDrawcallbackD1Ev);
+var _ZZN14btOptimizedBvh5buildEP23btStridingMeshInterfacebRK9btVector3S4_EN20NodeTriangleCallback28internalProcessTriangleIndexEPS2_ii__index__ = register_delegate(_ZZN14btOptimizedBvh5buildEP23btStridingMeshInterfacebRK9btVector3S4_EN20NodeTriangleCallback28internalProcessTriangleIndexEPS2_ii);
+var _ZZN14btOptimizedBvh5buildEP23btStridingMeshInterfacebRK9btVector3S4_EN20NodeTriangleCallbackD0Ev__index__ = register_delegate(_ZZN14btOptimizedBvh5buildEP23btStridingMeshInterfacebRK9btVector3S4_EN20NodeTriangleCallbackD0Ev);
+var _ZZN14btOptimizedBvh5buildEP23btStridingMeshInterfacebRK9btVector3S4_EN20NodeTriangleCallbackD1Ev__index__ = register_delegate(_ZZN14btOptimizedBvh5buildEP23btStridingMeshInterfacebRK9btVector3S4_EN20NodeTriangleCallbackD1Ev);
+var _ZZN14btOptimizedBvh5buildEP23btStridingMeshInterfacebRK9btVector3S4_EN29QuantizedNodeTriangleCallback28internalProcessTriangleIndexEPS2_ii__index__ = register_delegate(_ZZN14btOptimizedBvh5buildEP23btStridingMeshInterfacebRK9btVector3S4_EN29QuantizedNodeTriangleCallback28internalProcessTriangleIndexEPS2_ii);
+var _ZZN14btOptimizedBvh5buildEP23btStridingMeshInterfacebRK9btVector3S4_EN29QuantizedNodeTriangleCallbackD0Ev__index__ = register_delegate(_ZZN14btOptimizedBvh5buildEP23btStridingMeshInterfacebRK9btVector3S4_EN29QuantizedNodeTriangleCallbackD0Ev);
+var _ZZN14btOptimizedBvh5buildEP23btStridingMeshInterfacebRK9btVector3S4_EN29QuantizedNodeTriangleCallbackD1Ev__index__ = register_delegate(_ZZN14btOptimizedBvh5buildEP23btStridingMeshInterfacebRK9btVector3S4_EN29QuantizedNodeTriangleCallbackD1Ev);
+var _ZZN16btCollisionWorld13rayTestSingleERK11btTransformS2_P17btCollisionObjectPK16btCollisionShapeS2_RNS_17RayResultCallbackEEN15LocalInfoAdder215addSingleResultERNS_14LocalRayResultEb__index__ = register_delegate(_ZZN16btCollisionWorld13rayTestSingleERK11btTransformS2_P17btCollisionObjectPK16btCollisionShapeS2_RNS_17RayResultCallbackEEN15LocalInfoAdder215addSingleResultERNS_14LocalRayResultEb);
+var _ZZN16btCollisionWorld13rayTestSingleERK11btTransformS2_P17btCollisionObjectPK16btCollisionShapeS2_RNS_17RayResultCallbackEEN15LocalInfoAdder2D0Ev__index__ = register_delegate(_ZZN16btCollisionWorld13rayTestSingleERK11btTransformS2_P17btCollisionObjectPK16btCollisionShapeS2_RNS_17RayResultCallbackEEN15LocalInfoAdder2D0Ev);
+var _ZZN16btCollisionWorld13rayTestSingleERK11btTransformS2_P17btCollisionObjectPK16btCollisionShapeS2_RNS_17RayResultCallbackEEN15LocalInfoAdder2D1Ev__index__ = register_delegate(_ZZN16btCollisionWorld13rayTestSingleERK11btTransformS2_P17btCollisionObjectPK16btCollisionShapeS2_RNS_17RayResultCallbackEEN15LocalInfoAdder2D1Ev);
+var _ZZN16btCollisionWorld13rayTestSingleERK11btTransformS2_P17btCollisionObjectPK16btCollisionShapeS2_RNS_17RayResultCallbackEEN29BridgeTriangleRaycastCallback9reportHitERK9btVector3fii__index__ = register_delegate(_ZZN16btCollisionWorld13rayTestSingleERK11btTransformS2_P17btCollisionObjectPK16btCollisionShapeS2_RNS_17RayResultCallbackEEN29BridgeTriangleRaycastCallback9reportHitERK9btVector3fii);
+var _ZZN16btCollisionWorld13rayTestSingleERK11btTransformS2_P17btCollisionObjectPK16btCollisionShapeS2_RNS_17RayResultCallbackEEN29BridgeTriangleRaycastCallback9reportHitE_0RK9btVector3fii__index__ = register_delegate(_ZZN16btCollisionWorld13rayTestSingleERK11btTransformS2_P17btCollisionObjectPK16btCollisionShapeS2_RNS_17RayResultCallbackEEN29BridgeTriangleRaycastCallback9reportHitE_0RK9btVector3fii);
+var _ZZN16btCollisionWorld13rayTestSingleERK11btTransformS2_P17btCollisionObjectPK16btCollisionShapeS2_RNS_17RayResultCallbackEEN29BridgeTriangleRaycastCallbackD0E_0v__index__ = register_delegate(_ZZN16btCollisionWorld13rayTestSingleERK11btTransformS2_P17btCollisionObjectPK16btCollisionShapeS2_RNS_17RayResultCallbackEEN29BridgeTriangleRaycastCallbackD0E_0v);
+var _ZZN16btCollisionWorld13rayTestSingleERK11btTransformS2_P17btCollisionObjectPK16btCollisionShapeS2_RNS_17RayResultCallbackEEN29BridgeTriangleRaycastCallbackD0Ev__index__ = register_delegate(_ZZN16btCollisionWorld13rayTestSingleERK11btTransformS2_P17btCollisionObjectPK16btCollisionShapeS2_RNS_17RayResultCallbackEEN29BridgeTriangleRaycastCallbackD0Ev);
+var _ZZN16btCollisionWorld13rayTestSingleERK11btTransformS2_P17btCollisionObjectPK16btCollisionShapeS2_RNS_17RayResultCallbackEEN29BridgeTriangleRaycastCallbackD1E_0v__index__ = register_delegate(_ZZN16btCollisionWorld13rayTestSingleERK11btTransformS2_P17btCollisionObjectPK16btCollisionShapeS2_RNS_17RayResultCallbackEEN29BridgeTriangleRaycastCallbackD1E_0v);
+var _ZZN16btCollisionWorld13rayTestSingleERK11btTransformS2_P17btCollisionObjectPK16btCollisionShapeS2_RNS_17RayResultCallbackEEN29BridgeTriangleRaycastCallbackD1Ev__index__ = register_delegate(_ZZN16btCollisionWorld13rayTestSingleERK11btTransformS2_P17btCollisionObjectPK16btCollisionShapeS2_RNS_17RayResultCallbackEEN29BridgeTriangleRaycastCallbackD1Ev);
+var _ZZN16btCollisionWorld17objectQuerySingleEPK13btConvexShapeRK11btTransformS5_P17btCollisionObjectPK16btCollisionShapeS5_RNS_20ConvexResultCallbackEfEN14LocalInfoAdder15addSingleResultERNS_17LocalConvexResultEb__index__ = register_delegate(_ZZN16btCollisionWorld17objectQuerySingleEPK13btConvexShapeRK11btTransformS5_P17btCollisionObjectPK16btCollisionShapeS5_RNS_20ConvexResultCallbackEfEN14LocalInfoAdder15addSingleResultERNS_17LocalConvexResultEb);
+var _ZZN16btCollisionWorld17objectQuerySingleEPK13btConvexShapeRK11btTransformS5_P17btCollisionObjectPK16btCollisionShapeS5_RNS_20ConvexResultCallbackEfEN14LocalInfoAdderD0Ev__index__ = register_delegate(_ZZN16btCollisionWorld17objectQuerySingleEPK13btConvexShapeRK11btTransformS5_P17btCollisionObjectPK16btCollisionShapeS5_RNS_20ConvexResultCallbackEfEN14LocalInfoAdderD0Ev);
+var _ZZN16btCollisionWorld17objectQuerySingleEPK13btConvexShapeRK11btTransformS5_P17btCollisionObjectPK16btCollisionShapeS5_RNS_20ConvexResultCallbackEfEN14LocalInfoAdderD1Ev__index__ = register_delegate(_ZZN16btCollisionWorld17objectQuerySingleEPK13btConvexShapeRK11btTransformS5_P17btCollisionObjectPK16btCollisionShapeS5_RNS_20ConvexResultCallbackEfEN14LocalInfoAdderD1Ev);
+var _ZZN16btCollisionWorld17objectQuerySingleEPK13btConvexShapeRK11btTransformS5_P17btCollisionObjectPK16btCollisionShapeS5_RNS_20ConvexResultCallbackEfEN32BridgeTriangleConvexcastCallback9reportHitERK9btVector3SG_fii__index__ = register_delegate(_ZZN16btCollisionWorld17objectQuerySingleEPK13btConvexShapeRK11btTransformS5_P17btCollisionObjectPK16btCollisionShapeS5_RNS_20ConvexResultCallbackEfEN32BridgeTriangleConvexcastCallback9reportHitERK9btVector3SG_fii);
+var _ZZN16btCollisionWorld17objectQuerySingleEPK13btConvexShapeRK11btTransformS5_P17btCollisionObjectPK16btCollisionShapeS5_RNS_20ConvexResultCallbackEfEN32BridgeTriangleConvexcastCallback9reportHitE_0RK9btVector3SG_fii__index__ = register_delegate(_ZZN16btCollisionWorld17objectQuerySingleEPK13btConvexShapeRK11btTransformS5_P17btCollisionObjectPK16btCollisionShapeS5_RNS_20ConvexResultCallbackEfEN32BridgeTriangleConvexcastCallback9reportHitE_0RK9btVector3SG_fii);
+var _ZZN16btCollisionWorld17objectQuerySingleEPK13btConvexShapeRK11btTransformS5_P17btCollisionObjectPK16btCollisionShapeS5_RNS_20ConvexResultCallbackEfEN32BridgeTriangleConvexcastCallbackD0E_0v__index__ = register_delegate(_ZZN16btCollisionWorld17objectQuerySingleEPK13btConvexShapeRK11btTransformS5_P17btCollisionObjectPK16btCollisionShapeS5_RNS_20ConvexResultCallbackEfEN32BridgeTriangleConvexcastCallbackD0E_0v);
+var _ZZN16btCollisionWorld17objectQuerySingleEPK13btConvexShapeRK11btTransformS5_P17btCollisionObjectPK16btCollisionShapeS5_RNS_20ConvexResultCallbackEfEN32BridgeTriangleConvexcastCallbackD0Ev__index__ = register_delegate(_ZZN16btCollisionWorld17objectQuerySingleEPK13btConvexShapeRK11btTransformS5_P17btCollisionObjectPK16btCollisionShapeS5_RNS_20ConvexResultCallbackEfEN32BridgeTriangleConvexcastCallbackD0Ev);
+var _ZZN16btCollisionWorld17objectQuerySingleEPK13btConvexShapeRK11btTransformS5_P17btCollisionObjectPK16btCollisionShapeS5_RNS_20ConvexResultCallbackEfEN32BridgeTriangleConvexcastCallbackD1E_0v__index__ = register_delegate(_ZZN16btCollisionWorld17objectQuerySingleEPK13btConvexShapeRK11btTransformS5_P17btCollisionObjectPK16btCollisionShapeS5_RNS_20ConvexResultCallbackEfEN32BridgeTriangleConvexcastCallbackD1E_0v);
+var _ZZN16btCollisionWorld17objectQuerySingleEPK13btConvexShapeRK11btTransformS5_P17btCollisionObjectPK16btCollisionShapeS5_RNS_20ConvexResultCallbackEfEN32BridgeTriangleConvexcastCallbackD1Ev__index__ = register_delegate(_ZZN16btCollisionWorld17objectQuerySingleEPK13btConvexShapeRK11btTransformS5_P17btCollisionObjectPK16btCollisionShapeS5_RNS_20ConvexResultCallbackEfEN32BridgeTriangleConvexcastCallbackD1Ev);
+var _ZZN22btBvhTriangleMeshShape14performRaycastEP18btTriangleCallbackRK9btVector3S4_EN21MyNodeOverlapCallback11processNodeEii__index__ = register_delegate(_ZZN22btBvhTriangleMeshShape14performRaycastEP18btTriangleCallbackRK9btVector3S4_EN21MyNodeOverlapCallback11processNodeEii);
+var _ZZN22btBvhTriangleMeshShape14performRaycastEP18btTriangleCallbackRK9btVector3S4_EN21MyNodeOverlapCallbackD0Ev__index__ = register_delegate(_ZZN22btBvhTriangleMeshShape14performRaycastEP18btTriangleCallbackRK9btVector3S4_EN21MyNodeOverlapCallbackD0Ev);
+var _ZZN22btBvhTriangleMeshShape14performRaycastEP18btTriangleCallbackRK9btVector3S4_EN21MyNodeOverlapCallbackD1Ev__index__ = register_delegate(_ZZN22btBvhTriangleMeshShape14performRaycastEP18btTriangleCallbackRK9btVector3S4_EN21MyNodeOverlapCallbackD1Ev);
+var _ZZN22btBvhTriangleMeshShape17performConvexcastEP18btTriangleCallbackRK9btVector3S4_S4_S4_EN21MyNodeOverlapCallback11processNodeEii__index__ = register_delegate(_ZZN22btBvhTriangleMeshShape17performConvexcastEP18btTriangleCallbackRK9btVector3S4_S4_S4_EN21MyNodeOverlapCallback11processNodeEii);
+var _ZZN22btBvhTriangleMeshShape17performConvexcastEP18btTriangleCallbackRK9btVector3S4_S4_S4_EN21MyNodeOverlapCallbackD0Ev__index__ = register_delegate(_ZZN22btBvhTriangleMeshShape17performConvexcastEP18btTriangleCallbackRK9btVector3S4_S4_S4_EN21MyNodeOverlapCallbackD0Ev);
+var _ZZN22btBvhTriangleMeshShape17performConvexcastEP18btTriangleCallbackRK9btVector3S4_S4_S4_EN21MyNodeOverlapCallbackD1Ev__index__ = register_delegate(_ZZN22btBvhTriangleMeshShape17performConvexcastEP18btTriangleCallbackRK9btVector3S4_S4_S4_EN21MyNodeOverlapCallbackD1Ev);
+var _ZZN23btDiscreteDynamicsWorld16solveConstraintsER19btContactSolverInfoEN27InplaceSolverIslandCallback13ProcessIslandEPP17btCollisionObjectiPP20btPersistentManifoldii__index__ = register_delegate(_ZZN23btDiscreteDynamicsWorld16solveConstraintsER19btContactSolverInfoEN27InplaceSolverIslandCallback13ProcessIslandEPP17btCollisionObjectiPP20btPersistentManifoldii);
+var _ZZN23btDiscreteDynamicsWorld16solveConstraintsER19btContactSolverInfoEN27InplaceSolverIslandCallbackD0Ev__index__ = register_delegate(_ZZN23btDiscreteDynamicsWorld16solveConstraintsER19btContactSolverInfoEN27InplaceSolverIslandCallbackD0Ev);
+var _ZZN23btDiscreteDynamicsWorld16solveConstraintsER19btContactSolverInfoEN27InplaceSolverIslandCallbackD1Ev__index__ = register_delegate(_ZZN23btDiscreteDynamicsWorld16solveConstraintsER19btContactSolverInfoEN27InplaceSolverIslandCallbackD1Ev);
+var _ZZN28btHashedOverlappingPairCache19cleanProxyFromPairsEP17btBroadphaseProxyP12btDispatcherEN17CleanPairCallback14processOverlapER16btBroadphasePair__index__ = register_delegate(_ZZN28btHashedOverlappingPairCache19cleanProxyFromPairsEP17btBroadphaseProxyP12btDispatcherEN17CleanPairCallback14processOverlapER16btBroadphasePair);
+var _ZZN28btHashedOverlappingPairCache19cleanProxyFromPairsEP17btBroadphaseProxyP12btDispatcherEN17CleanPairCallbackD0Ev__index__ = register_delegate(_ZZN28btHashedOverlappingPairCache19cleanProxyFromPairsEP17btBroadphaseProxyP12btDispatcherEN17CleanPairCallbackD0Ev);
+var _ZZN28btHashedOverlappingPairCache19cleanProxyFromPairsEP17btBroadphaseProxyP12btDispatcherEN17CleanPairCallbackD1Ev__index__ = register_delegate(_ZZN28btHashedOverlappingPairCache19cleanProxyFromPairsEP17btBroadphaseProxyP12btDispatcherEN17CleanPairCallbackD1Ev);
+var _ZZN28btHashedOverlappingPairCache37removeOverlappingPairsContainingProxyEP17btBroadphaseProxyP12btDispatcherEN18RemovePairCallback14processOverlapER16btBroadphasePair__index__ = register_delegate(_ZZN28btHashedOverlappingPairCache37removeOverlappingPairsContainingProxyEP17btBroadphaseProxyP12btDispatcherEN18RemovePairCallback14processOverlapER16btBroadphasePair);
+var _ZZN28btHashedOverlappingPairCache37removeOverlappingPairsContainingProxyEP17btBroadphaseProxyP12btDispatcherEN18RemovePairCallbackD0Ev__index__ = register_delegate(_ZZN28btHashedOverlappingPairCache37removeOverlappingPairsContainingProxyEP17btBroadphaseProxyP12btDispatcherEN18RemovePairCallbackD0Ev);
+var _ZZN28btHashedOverlappingPairCache37removeOverlappingPairsContainingProxyEP17btBroadphaseProxyP12btDispatcherEN18RemovePairCallbackD1Ev__index__ = register_delegate(_ZZN28btHashedOverlappingPairCache37removeOverlappingPairsContainingProxyEP17btBroadphaseProxyP12btDispatcherEN18RemovePairCallbackD1Ev);
+var _ZZN33btConvexConcaveCollisionAlgorithm21calculateTimeOfImpactEP17btCollisionObjectS1_RK16btDispatcherInfoP16btManifoldResultEN31LocalTriangleSphereCastCallback15processTriangleEP9btVector3ii__index__ = register_delegate(_ZZN33btConvexConcaveCollisionAlgorithm21calculateTimeOfImpactEP17btCollisionObjectS1_RK16btDispatcherInfoP16btManifoldResultEN31LocalTriangleSphereCastCallback15processTriangleEP9btVector3ii);
+var _ZZN33btConvexConcaveCollisionAlgorithm21calculateTimeOfImpactEP17btCollisionObjectS1_RK16btDispatcherInfoP16btManifoldResultEN31LocalTriangleSphereCastCallbackD0Ev__index__ = register_delegate(_ZZN33btConvexConcaveCollisionAlgorithm21calculateTimeOfImpactEP17btCollisionObjectS1_RK16btDispatcherInfoP16btManifoldResultEN31LocalTriangleSphereCastCallbackD0Ev);
+var _ZZN33btConvexConcaveCollisionAlgorithm21calculateTimeOfImpactEP17btCollisionObjectS1_RK16btDispatcherInfoP16btManifoldResultEN31LocalTriangleSphereCastCallbackD1Ev__index__ = register_delegate(_ZZN33btConvexConcaveCollisionAlgorithm21calculateTimeOfImpactEP17btCollisionObjectS1_RK16btDispatcherInfoP16btManifoldResultEN31LocalTriangleSphereCastCallbackD1Ev);
+var _ZZNK19btTriangleMeshShape19processAllTrianglesEP18btTriangleCallbackRK9btVector3S4_EN16FilteredCallback28internalProcessTriangleIndexEPS2_ii__index__ = register_delegate(_ZZNK19btTriangleMeshShape19processAllTrianglesEP18btTriangleCallbackRK9btVector3S4_EN16FilteredCallback28internalProcessTriangleIndexEPS2_ii);
+var _ZZNK19btTriangleMeshShape19processAllTrianglesEP18btTriangleCallbackRK9btVector3S4_EN16FilteredCallbackD0Ev__index__ = register_delegate(_ZZNK19btTriangleMeshShape19processAllTrianglesEP18btTriangleCallbackRK9btVector3S4_EN16FilteredCallbackD0Ev);
+var _ZZNK19btTriangleMeshShape19processAllTrianglesEP18btTriangleCallbackRK9btVector3S4_EN16FilteredCallbackD1Ev__index__ = register_delegate(_ZZNK19btTriangleMeshShape19processAllTrianglesEP18btTriangleCallbackRK9btVector3S4_EN16FilteredCallbackD1Ev);
+var _ZZNK22btBvhTriangleMeshShape19processAllTrianglesEP18btTriangleCallbackRK9btVector3S4_EN21MyNodeOverlapCallback11processNodeEii__index__ = register_delegate(_ZZNK22btBvhTriangleMeshShape19processAllTrianglesEP18btTriangleCallbackRK9btVector3S4_EN21MyNodeOverlapCallback11processNodeEii);
+var _ZZNK22btBvhTriangleMeshShape19processAllTrianglesEP18btTriangleCallbackRK9btVector3S4_EN21MyNodeOverlapCallbackD0Ev__index__ = register_delegate(_ZZNK22btBvhTriangleMeshShape19processAllTrianglesEP18btTriangleCallbackRK9btVector3S4_EN21MyNodeOverlapCallbackD0Ev);
+var _ZZNK22btBvhTriangleMeshShape19processAllTrianglesEP18btTriangleCallbackRK9btVector3S4_EN21MyNodeOverlapCallbackD1Ev__index__ = register_delegate(_ZZNK22btBvhTriangleMeshShape19processAllTrianglesEP18btTriangleCallbackRK9btVector3S4_EN21MyNodeOverlapCallbackD1Ev);
+var __cxa_pure_virtual__index__ = register_delegate(__cxa_pure_virtual);
+var __fwrite__index__ = register_delegate(__fwrite);
+var __mandreel_internal_SetResolution__index__ = register_delegate(__mandreel_internal_SetResolution);
+var __resize__index__ = register_delegate(__resize);
+var cmpfacets__index__ = register_delegate(cmpfacets);
+var cmplocales__index__ = register_delegate(cmplocales);
+var iMandreel_TextureAsync_GetPackOffset__index__ = register_delegate(iMandreel_TextureAsync_GetPackOffset);
+var iMandreel_TextureAsync_IsCompressed__index__ = register_delegate(iMandreel_TextureAsync_IsCompressed);
+var imandreel_restore_glcontext__index__ = register_delegate(imandreel_restore_glcontext);
+var imandreel_viewport_resize__index__ = register_delegate(imandreel_viewport_resize);
+var mandreel_flash_tcp_onError__index__ = register_delegate(mandreel_flash_tcp_onError);
+var swrite__index__ = register_delegate(swrite);
+var _objc_sections = {};
+var _objc_sections_size = {};
+
+// End of mandreel.js file.
diff --git a/js/src/octane/navier-stokes.js b/js/src/octane/navier-stokes.js
new file mode 100644
index 0000000000..6e21cb57ac
--- /dev/null
+++ b/js/src/octane/navier-stokes.js
@@ -0,0 +1,415 @@
+/**
+ * Copyright 2013 the V8 project authors. All rights reserved.
+ * Copyright 2009 Oliver Hunt <http://nerget.com>
+ *
+ * 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.
+ *
+ * Update 10/21/2013: fixed loop variables at line 119
+ */
+
+var NavierStokes = new BenchmarkSuite('NavierStokes', [1484000],
+ [new Benchmark('NavierStokes',
+ true,
+ false,
+ 180,
+ runNavierStokes,
+ setupNavierStokes,
+ tearDownNavierStokes,
+ null,
+ 16)]);
+
+var solver = null;
+var nsFrameCounter = 0;
+
+function runNavierStokes()
+{
+ solver.update();
+ nsFrameCounter++;
+
+ if(nsFrameCounter==15)
+ checkResult(solver.getDens());
+}
+
+function checkResult(dens) {
+
+ this.result = 0;
+ for (var i=7000;i<7100;i++) {
+ this.result+=~~((dens[i]*10));
+ }
+
+ if (this.result!=77) {
+ throw(new Error("checksum failed"));
+ }
+}
+
+function setupNavierStokes()
+{
+ solver = new FluidField(null);
+ solver.setResolution(128, 128);
+ solver.setIterations(20);
+ solver.setDisplayFunction(function(){});
+ solver.setUICallback(prepareFrame);
+ solver.reset();
+}
+
+function tearDownNavierStokes()
+{
+ solver = null;
+}
+
+function addPoints(field) {
+ var n = 64;
+ for (var i = 1; i <= n; i++) {
+ field.setVelocity(i, i, n, n);
+ field.setDensity(i, i, 5);
+ field.setVelocity(i, n - i, -n, -n);
+ field.setDensity(i, n - i, 20);
+ field.setVelocity(128 - i, n + i, -n, -n);
+ field.setDensity(128 - i, n + i, 30);
+ }
+}
+
+var framesTillAddingPoints = 0;
+var framesBetweenAddingPoints = 5;
+
+function prepareFrame(field)
+{
+ if (framesTillAddingPoints == 0) {
+ addPoints(field);
+ framesTillAddingPoints = framesBetweenAddingPoints;
+ framesBetweenAddingPoints++;
+ } else {
+ framesTillAddingPoints--;
+ }
+}
+
+// Code from Oliver Hunt (http://nerget.com/fluidSim/pressure.js) starts here.
+function FluidField(canvas) {
+ function addFields(x, s, dt)
+ {
+ for (var i=0; i<size ; i++ ) x[i] += dt*s[i];
+ }
+
+ function set_bnd(b, x)
+ {
+ if (b===1) {
+ for (var i = 1; i <= width; i++) {
+ x[i] = x[i + rowSize];
+ x[i + (height+1) *rowSize] = x[i + height * rowSize];
+ }
+
+ for (var j = 1; j <= height; j++) {
+ x[j * rowSize] = -x[1 + j * rowSize];
+ x[(width + 1) + j * rowSize] = -x[width + j * rowSize];
+ }
+ } else if (b === 2) {
+ for (var i = 1; i <= width; i++) {
+ x[i] = -x[i + rowSize];
+ x[i + (height + 1) * rowSize] = -x[i + height * rowSize];
+ }
+
+ for (var j = 1; j <= height; j++) {
+ x[j * rowSize] = x[1 + j * rowSize];
+ x[(width + 1) + j * rowSize] = x[width + j * rowSize];
+ }
+ } else {
+ for (var i = 1; i <= width; i++) {
+ x[i] = x[i + rowSize];
+ x[i + (height + 1) * rowSize] = x[i + height * rowSize];
+ }
+
+ for (var j = 1; j <= height; j++) {
+ x[j * rowSize] = x[1 + j * rowSize];
+ x[(width + 1) + j * rowSize] = x[width + j * rowSize];
+ }
+ }
+ var maxEdge = (height + 1) * rowSize;
+ x[0] = 0.5 * (x[1] + x[rowSize]);
+ x[maxEdge] = 0.5 * (x[1 + maxEdge] + x[height * rowSize]);
+ x[(width+1)] = 0.5 * (x[width] + x[(width + 1) + rowSize]);
+ x[(width+1)+maxEdge] = 0.5 * (x[width + maxEdge] + x[(width + 1) + height * rowSize]);
+ }
+
+ function lin_solve(b, x, x0, a, c)
+ {
+ if (a === 0 && c === 1) {
+ for (var j=1 ; j<=height; j++) {
+ var currentRow = j * rowSize;
+ ++currentRow;
+ for (var i = 0; i < width; i++) {
+ x[currentRow] = x0[currentRow];
+ ++currentRow;
+ }
+ }
+ set_bnd(b, x);
+ } else {
+ var invC = 1 / c;
+ for (var k=0 ; k<iterations; k++) {
+ for (var j=1 ; j<=height; j++) {
+ var lastRow = (j - 1) * rowSize;
+ var currentRow = j * rowSize;
+ var nextRow = (j + 1) * rowSize;
+ var lastX = x[currentRow];
+ ++currentRow;
+ for (var i=1; i<=width; i++)
+ lastX = x[currentRow] = (x0[currentRow] + a*(lastX+x[++currentRow]+x[++lastRow]+x[++nextRow])) * invC;
+ }
+ set_bnd(b, x);
+ }
+ }
+ }
+
+ function diffuse(b, x, x0, dt)
+ {
+ var a = 0;
+ lin_solve(b, x, x0, a, 1 + 4*a);
+ }
+
+ function lin_solve2(x, x0, y, y0, a, c)
+ {
+ if (a === 0 && c === 1) {
+ for (var j=1 ; j <= height; j++) {
+ var currentRow = j * rowSize;
+ ++currentRow;
+ for (var i = 0; i < width; i++) {
+ x[currentRow] = x0[currentRow];
+ y[currentRow] = y0[currentRow];
+ ++currentRow;
+ }
+ }
+ set_bnd(1, x);
+ set_bnd(2, y);
+ } else {
+ var invC = 1/c;
+ for (var k=0 ; k<iterations; k++) {
+ for (var j=1 ; j <= height; j++) {
+ var lastRow = (j - 1) * rowSize;
+ var currentRow = j * rowSize;
+ var nextRow = (j + 1) * rowSize;
+ var lastX = x[currentRow];
+ var lastY = y[currentRow];
+ ++currentRow;
+ for (var i = 1; i <= width; i++) {
+ lastX = x[currentRow] = (x0[currentRow] + a * (lastX + x[currentRow] + x[lastRow] + x[nextRow])) * invC;
+ lastY = y[currentRow] = (y0[currentRow] + a * (lastY + y[++currentRow] + y[++lastRow] + y[++nextRow])) * invC;
+ }
+ }
+ set_bnd(1, x);
+ set_bnd(2, y);
+ }
+ }
+ }
+
+ function diffuse2(x, x0, y, y0, dt)
+ {
+ var a = 0;
+ lin_solve2(x, x0, y, y0, a, 1 + 4 * a);
+ }
+
+ function advect(b, d, d0, u, v, dt)
+ {
+ var Wdt0 = dt * width;
+ var Hdt0 = dt * height;
+ var Wp5 = width + 0.5;
+ var Hp5 = height + 0.5;
+ for (var j = 1; j<= height; j++) {
+ var pos = j * rowSize;
+ for (var i = 1; i <= width; i++) {
+ var x = i - Wdt0 * u[++pos];
+ var y = j - Hdt0 * v[pos];
+ if (x < 0.5)
+ x = 0.5;
+ else if (x > Wp5)
+ x = Wp5;
+ var i0 = x | 0;
+ var i1 = i0 + 1;
+ if (y < 0.5)
+ y = 0.5;
+ else if (y > Hp5)
+ y = Hp5;
+ var j0 = y | 0;
+ var j1 = j0 + 1;
+ var s1 = x - i0;
+ var s0 = 1 - s1;
+ var t1 = y - j0;
+ var t0 = 1 - t1;
+ var row1 = j0 * rowSize;
+ var row2 = j1 * rowSize;
+ d[pos] = s0 * (t0 * d0[i0 + row1] + t1 * d0[i0 + row2]) + s1 * (t0 * d0[i1 + row1] + t1 * d0[i1 + row2]);
+ }
+ }
+ set_bnd(b, d);
+ }
+
+ function project(u, v, p, div)
+ {
+ var h = -0.5 / Math.sqrt(width * height);
+ for (var j = 1 ; j <= height; j++ ) {
+ var row = j * rowSize;
+ var previousRow = (j - 1) * rowSize;
+ var prevValue = row - 1;
+ var currentRow = row;
+ var nextValue = row + 1;
+ var nextRow = (j + 1) * rowSize;
+ for (var i = 1; i <= width; i++ ) {
+ div[++currentRow] = h * (u[++nextValue] - u[++prevValue] + v[++nextRow] - v[++previousRow]);
+ p[currentRow] = 0;
+ }
+ }
+ set_bnd(0, div);
+ set_bnd(0, p);
+
+ lin_solve(0, p, div, 1, 4 );
+ var wScale = 0.5 * width;
+ var hScale = 0.5 * height;
+ for (var j = 1; j<= height; j++ ) {
+ var prevPos = j * rowSize - 1;
+ var currentPos = j * rowSize;
+ var nextPos = j * rowSize + 1;
+ var prevRow = (j - 1) * rowSize;
+ var currentRow = j * rowSize;
+ var nextRow = (j + 1) * rowSize;
+
+ for (var i = 1; i<= width; i++) {
+ u[++currentPos] -= wScale * (p[++nextPos] - p[++prevPos]);
+ v[currentPos] -= hScale * (p[++nextRow] - p[++prevRow]);
+ }
+ }
+ set_bnd(1, u);
+ set_bnd(2, v);
+ }
+
+ function dens_step(x, x0, u, v, dt)
+ {
+ addFields(x, x0, dt);
+ diffuse(0, x0, x, dt );
+ advect(0, x, x0, u, v, dt );
+ }
+
+ function vel_step(u, v, u0, v0, dt)
+ {
+ addFields(u, u0, dt );
+ addFields(v, v0, dt );
+ var temp = u0; u0 = u; u = temp;
+ var temp = v0; v0 = v; v = temp;
+ diffuse2(u,u0,v,v0, dt);
+ project(u, v, u0, v0);
+ var temp = u0; u0 = u; u = temp;
+ var temp = v0; v0 = v; v = temp;
+ advect(1, u, u0, u0, v0, dt);
+ advect(2, v, v0, u0, v0, dt);
+ project(u, v, u0, v0 );
+ }
+ var uiCallback = function(d,u,v) {};
+
+ function Field(dens, u, v) {
+ // Just exposing the fields here rather than using accessors is a measurable win during display (maybe 5%)
+ // but makes the code ugly.
+ this.setDensity = function(x, y, d) {
+ dens[(x + 1) + (y + 1) * rowSize] = d;
+ }
+ this.getDensity = function(x, y) {
+ return dens[(x + 1) + (y + 1) * rowSize];
+ }
+ this.setVelocity = function(x, y, xv, yv) {
+ u[(x + 1) + (y + 1) * rowSize] = xv;
+ v[(x + 1) + (y + 1) * rowSize] = yv;
+ }
+ this.getXVelocity = function(x, y) {
+ return u[(x + 1) + (y + 1) * rowSize];
+ }
+ this.getYVelocity = function(x, y) {
+ return v[(x + 1) + (y + 1) * rowSize];
+ }
+ this.width = function() { return width; }
+ this.height = function() { return height; }
+ }
+ function queryUI(d, u, v)
+ {
+ for (var i = 0; i < size; i++)
+ u[i] = v[i] = d[i] = 0.0;
+ uiCallback(new Field(d, u, v));
+ }
+
+ this.update = function () {
+ queryUI(dens_prev, u_prev, v_prev);
+ vel_step(u, v, u_prev, v_prev, dt);
+ dens_step(dens, dens_prev, u, v, dt);
+ displayFunc(new Field(dens, u, v));
+ }
+ this.setDisplayFunction = function(func) {
+ displayFunc = func;
+ }
+
+ this.iterations = function() { return iterations; }
+ this.setIterations = function(iters) {
+ if (iters > 0 && iters <= 100)
+ iterations = iters;
+ }
+ this.setUICallback = function(callback) {
+ uiCallback = callback;
+ }
+ var iterations = 10;
+ var visc = 0.5;
+ var dt = 0.1;
+ var dens;
+ var dens_prev;
+ var u;
+ var u_prev;
+ var v;
+ var v_prev;
+ var width;
+ var height;
+ var rowSize;
+ var size;
+ var displayFunc;
+ function reset()
+ {
+ rowSize = width + 2;
+ size = (width+2)*(height+2);
+ dens = new Array(size);
+ dens_prev = new Array(size);
+ u = new Array(size);
+ u_prev = new Array(size);
+ v = new Array(size);
+ v_prev = new Array(size);
+ for (var i = 0; i < size; i++)
+ dens_prev[i] = u_prev[i] = v_prev[i] = dens[i] = u[i] = v[i] = 0;
+ }
+ this.reset = reset;
+ this.getDens = function()
+ {
+ return dens;
+ }
+ this.setResolution = function (hRes, wRes)
+ {
+ var res = wRes * hRes;
+ if (res > 0 && res < 1000000 && (wRes != width || hRes != height)) {
+ width = wRes;
+ height = hRes;
+ reset();
+ return true;
+ }
+ return false;
+ }
+ this.setResolution(64, 64);
+}
diff --git a/js/src/octane/raytrace.js b/js/src/octane/raytrace.js
new file mode 100644
index 0000000000..9ff0e19d20
--- /dev/null
+++ b/js/src/octane/raytrace.js
@@ -0,0 +1,904 @@
+// The ray tracer code in this file is written by Adam Burmister. It
+// is available in its original form from:
+//
+// http://labs.flog.nz.co/raytracer/
+//
+// It has been modified slightly by Google to work as a standalone
+// benchmark, but the all the computational code remains
+// untouched. This file also contains a copy of parts of the Prototype
+// JavaScript framework which is used by the ray tracer.
+
+var RayTrace = new BenchmarkSuite('RayTrace', [739989], [
+ new Benchmark('RayTrace', true, false, 600, renderScene)
+]);
+
+
+// Variable used to hold a number that can be used to verify that
+// the scene was ray traced correctly.
+var checkNumber;
+
+
+// ------------------------------------------------------------------------
+// ------------------------------------------------------------------------
+
+// The following is a copy of parts of the Prototype JavaScript library:
+
+// Prototype JavaScript framework, version 1.5.0
+// (c) 2005-2007 Sam Stephenson
+//
+// Prototype is freely distributable under the terms of an MIT-style license.
+// For details, see the Prototype web site: http://prototype.conio.net/
+
+
+var Class = {
+ create: function() {
+ return function() {
+ this.initialize.apply(this, arguments);
+ }
+ }
+};
+
+
+Object.extend = function(destination, source) {
+ for (var property in source) {
+ destination[property] = source[property];
+ }
+ return destination;
+};
+
+
+// ------------------------------------------------------------------------
+// ------------------------------------------------------------------------
+
+// The rest of this file is the actual ray tracer written by Adam
+// Burmister. It's a concatenation of the following files:
+//
+// flog/color.js
+// flog/light.js
+// flog/vector.js
+// flog/ray.js
+// flog/scene.js
+// flog/material/basematerial.js
+// flog/material/solid.js
+// flog/material/chessboard.js
+// flog/shape/baseshape.js
+// flog/shape/sphere.js
+// flog/shape/plane.js
+// flog/intersectioninfo.js
+// flog/camera.js
+// flog/background.js
+// flog/engine.js
+
+
+/* Fake a Flog.* namespace */
+if(typeof(Flog) == 'undefined') var Flog = {};
+if(typeof(Flog.RayTracer) == 'undefined') Flog.RayTracer = {};
+
+Flog.RayTracer.Color = Class.create();
+
+Flog.RayTracer.Color.prototype = {
+ red : 0.0,
+ green : 0.0,
+ blue : 0.0,
+
+ initialize : function(r, g, b) {
+ if(!r) r = 0.0;
+ if(!g) g = 0.0;
+ if(!b) b = 0.0;
+
+ this.red = r;
+ this.green = g;
+ this.blue = b;
+ },
+
+ add : function(c1, c2){
+ var result = new Flog.RayTracer.Color(0,0,0);
+
+ result.red = c1.red + c2.red;
+ result.green = c1.green + c2.green;
+ result.blue = c1.blue + c2.blue;
+
+ return result;
+ },
+
+ addScalar: function(c1, s){
+ var result = new Flog.RayTracer.Color(0,0,0);
+
+ result.red = c1.red + s;
+ result.green = c1.green + s;
+ result.blue = c1.blue + s;
+
+ result.limit();
+
+ return result;
+ },
+
+ subtract: function(c1, c2){
+ var result = new Flog.RayTracer.Color(0,0,0);
+
+ result.red = c1.red - c2.red;
+ result.green = c1.green - c2.green;
+ result.blue = c1.blue - c2.blue;
+
+ return result;
+ },
+
+ multiply : function(c1, c2) {
+ var result = new Flog.RayTracer.Color(0,0,0);
+
+ result.red = c1.red * c2.red;
+ result.green = c1.green * c2.green;
+ result.blue = c1.blue * c2.blue;
+
+ return result;
+ },
+
+ multiplyScalar : function(c1, f) {
+ var result = new Flog.RayTracer.Color(0,0,0);
+
+ result.red = c1.red * f;
+ result.green = c1.green * f;
+ result.blue = c1.blue * f;
+
+ return result;
+ },
+
+ divideFactor : function(c1, f) {
+ var result = new Flog.RayTracer.Color(0,0,0);
+
+ result.red = c1.red / f;
+ result.green = c1.green / f;
+ result.blue = c1.blue / f;
+
+ return result;
+ },
+
+ limit: function(){
+ this.red = (this.red > 0.0) ? ( (this.red > 1.0) ? 1.0 : this.red ) : 0.0;
+ this.green = (this.green > 0.0) ? ( (this.green > 1.0) ? 1.0 : this.green ) : 0.0;
+ this.blue = (this.blue > 0.0) ? ( (this.blue > 1.0) ? 1.0 : this.blue ) : 0.0;
+ },
+
+ distance : function(color) {
+ var d = Math.abs(this.red - color.red) + Math.abs(this.green - color.green) + Math.abs(this.blue - color.blue);
+ return d;
+ },
+
+ blend: function(c1, c2, w){
+ var result = new Flog.RayTracer.Color(0,0,0);
+ result = Flog.RayTracer.Color.prototype.add(
+ Flog.RayTracer.Color.prototype.multiplyScalar(c1, 1 - w),
+ Flog.RayTracer.Color.prototype.multiplyScalar(c2, w)
+ );
+ return result;
+ },
+
+ brightness : function() {
+ var r = Math.floor(this.red*255);
+ var g = Math.floor(this.green*255);
+ var b = Math.floor(this.blue*255);
+ return (r * 77 + g * 150 + b * 29) >> 8;
+ },
+
+ toString : function () {
+ var r = Math.floor(this.red*255);
+ var g = Math.floor(this.green*255);
+ var b = Math.floor(this.blue*255);
+
+ return "rgb("+ r +","+ g +","+ b +")";
+ }
+}
+/* Fake a Flog.* namespace */
+if(typeof(Flog) == 'undefined') var Flog = {};
+if(typeof(Flog.RayTracer) == 'undefined') Flog.RayTracer = {};
+
+Flog.RayTracer.Light = Class.create();
+
+Flog.RayTracer.Light.prototype = {
+ position: null,
+ color: null,
+ intensity: 10.0,
+
+ initialize : function(pos, color, intensity) {
+ this.position = pos;
+ this.color = color;
+ this.intensity = (intensity ? intensity : 10.0);
+ },
+
+ toString : function () {
+ return 'Light [' + this.position.x + ',' + this.position.y + ',' + this.position.z + ']';
+ }
+}
+/* Fake a Flog.* namespace */
+if(typeof(Flog) == 'undefined') var Flog = {};
+if(typeof(Flog.RayTracer) == 'undefined') Flog.RayTracer = {};
+
+Flog.RayTracer.Vector = Class.create();
+
+Flog.RayTracer.Vector.prototype = {
+ x : 0.0,
+ y : 0.0,
+ z : 0.0,
+
+ initialize : function(x, y, z) {
+ this.x = (x ? x : 0);
+ this.y = (y ? y : 0);
+ this.z = (z ? z : 0);
+ },
+
+ copy: function(vector){
+ this.x = vector.x;
+ this.y = vector.y;
+ this.z = vector.z;
+ },
+
+ normalize : function() {
+ var m = this.magnitude();
+ return new Flog.RayTracer.Vector(this.x / m, this.y / m, this.z / m);
+ },
+
+ magnitude : function() {
+ return Math.sqrt((this.x * this.x) + (this.y * this.y) + (this.z * this.z));
+ },
+
+ cross : function(w) {
+ return new Flog.RayTracer.Vector(
+ -this.z * w.y + this.y * w.z,
+ this.z * w.x - this.x * w.z,
+ -this.y * w.x + this.x * w.y);
+ },
+
+ dot : function(w) {
+ return this.x * w.x + this.y * w.y + this.z * w.z;
+ },
+
+ add : function(v, w) {
+ return new Flog.RayTracer.Vector(w.x + v.x, w.y + v.y, w.z + v.z);
+ },
+
+ subtract : function(v, w) {
+ if(!w || !v) throw 'Vectors must be defined [' + v + ',' + w + ']';
+ return new Flog.RayTracer.Vector(v.x - w.x, v.y - w.y, v.z - w.z);
+ },
+
+ multiplyVector : function(v, w) {
+ return new Flog.RayTracer.Vector(v.x * w.x, v.y * w.y, v.z * w.z);
+ },
+
+ multiplyScalar : function(v, w) {
+ return new Flog.RayTracer.Vector(v.x * w, v.y * w, v.z * w);
+ },
+
+ toString : function () {
+ return 'Vector [' + this.x + ',' + this.y + ',' + this.z + ']';
+ }
+}
+/* Fake a Flog.* namespace */
+if(typeof(Flog) == 'undefined') var Flog = {};
+if(typeof(Flog.RayTracer) == 'undefined') Flog.RayTracer = {};
+
+Flog.RayTracer.Ray = Class.create();
+
+Flog.RayTracer.Ray.prototype = {
+ position : null,
+ direction : null,
+ initialize : function(pos, dir) {
+ this.position = pos;
+ this.direction = dir;
+ },
+
+ toString : function () {
+ return 'Ray [' + this.position + ',' + this.direction + ']';
+ }
+}
+/* Fake a Flog.* namespace */
+if(typeof(Flog) == 'undefined') var Flog = {};
+if(typeof(Flog.RayTracer) == 'undefined') Flog.RayTracer = {};
+
+Flog.RayTracer.Scene = Class.create();
+
+Flog.RayTracer.Scene.prototype = {
+ camera : null,
+ shapes : [],
+ lights : [],
+ background : null,
+
+ initialize : function() {
+ this.camera = new Flog.RayTracer.Camera(
+ new Flog.RayTracer.Vector(0,0,-5),
+ new Flog.RayTracer.Vector(0,0,1),
+ new Flog.RayTracer.Vector(0,1,0)
+ );
+ this.shapes = new Array();
+ this.lights = new Array();
+ this.background = new Flog.RayTracer.Background(new Flog.RayTracer.Color(0,0,0.5), 0.2);
+ }
+}
+/* Fake a Flog.* namespace */
+if(typeof(Flog) == 'undefined') var Flog = {};
+if(typeof(Flog.RayTracer) == 'undefined') Flog.RayTracer = {};
+if(typeof(Flog.RayTracer.Material) == 'undefined') Flog.RayTracer.Material = {};
+
+Flog.RayTracer.Material.BaseMaterial = Class.create();
+
+Flog.RayTracer.Material.BaseMaterial.prototype = {
+
+ gloss: 2.0, // [0...infinity] 0 = matt
+ transparency: 0.0, // 0=opaque
+ reflection: 0.0, // [0...infinity] 0 = no reflection
+ refraction: 0.50,
+ hasTexture: false,
+
+ initialize : function() {
+
+ },
+
+ getColor: function(u, v){
+
+ },
+
+ wrapUp: function(t){
+ t = t % 2.0;
+ if(t < -1) t += 2.0;
+ if(t >= 1) t -= 2.0;
+ return t;
+ },
+
+ toString : function () {
+ return 'Material [gloss=' + this.gloss + ', transparency=' + this.transparency + ', hasTexture=' + this.hasTexture +']';
+ }
+}
+/* Fake a Flog.* namespace */
+if(typeof(Flog) == 'undefined') var Flog = {};
+if(typeof(Flog.RayTracer) == 'undefined') Flog.RayTracer = {};
+
+Flog.RayTracer.Material.Solid = Class.create();
+
+Flog.RayTracer.Material.Solid.prototype = Object.extend(
+ new Flog.RayTracer.Material.BaseMaterial(), {
+ initialize : function(color, reflection, refraction, transparency, gloss) {
+ this.color = color;
+ this.reflection = reflection;
+ this.transparency = transparency;
+ this.gloss = gloss;
+ this.hasTexture = false;
+ },
+
+ getColor: function(u, v){
+ return this.color;
+ },
+
+ toString : function () {
+ return 'SolidMaterial [gloss=' + this.gloss + ', transparency=' + this.transparency + ', hasTexture=' + this.hasTexture +']';
+ }
+ }
+);
+/* Fake a Flog.* namespace */
+if(typeof(Flog) == 'undefined') var Flog = {};
+if(typeof(Flog.RayTracer) == 'undefined') Flog.RayTracer = {};
+
+Flog.RayTracer.Material.Chessboard = Class.create();
+
+Flog.RayTracer.Material.Chessboard.prototype = Object.extend(
+ new Flog.RayTracer.Material.BaseMaterial(), {
+ colorEven: null,
+ colorOdd: null,
+ density: 0.5,
+
+ initialize : function(colorEven, colorOdd, reflection, transparency, gloss, density) {
+ this.colorEven = colorEven;
+ this.colorOdd = colorOdd;
+ this.reflection = reflection;
+ this.transparency = transparency;
+ this.gloss = gloss;
+ this.density = density;
+ this.hasTexture = true;
+ },
+
+ getColor: function(u, v){
+ var t = this.wrapUp(u * this.density) * this.wrapUp(v * this.density);
+
+ if(t < 0.0)
+ return this.colorEven;
+ else
+ return this.colorOdd;
+ },
+
+ toString : function () {
+ return 'ChessMaterial [gloss=' + this.gloss + ', transparency=' + this.transparency + ', hasTexture=' + this.hasTexture +']';
+ }
+ }
+);
+/* Fake a Flog.* namespace */
+if(typeof(Flog) == 'undefined') var Flog = {};
+if(typeof(Flog.RayTracer) == 'undefined') Flog.RayTracer = {};
+if(typeof(Flog.RayTracer.Shape) == 'undefined') Flog.RayTracer.Shape = {};
+
+Flog.RayTracer.Shape.Sphere = Class.create();
+
+Flog.RayTracer.Shape.Sphere.prototype = {
+ initialize : function(pos, radius, material) {
+ this.radius = radius;
+ this.position = pos;
+ this.material = material;
+ },
+
+ intersect: function(ray){
+ var info = new Flog.RayTracer.IntersectionInfo();
+ info.shape = this;
+
+ var dst = Flog.RayTracer.Vector.prototype.subtract(ray.position, this.position);
+
+ var B = dst.dot(ray.direction);
+ var C = dst.dot(dst) - (this.radius * this.radius);
+ var D = (B * B) - C;
+
+ if(D > 0){ // intersection!
+ info.isHit = true;
+ info.distance = (-B) - Math.sqrt(D);
+ info.position = Flog.RayTracer.Vector.prototype.add(
+ ray.position,
+ Flog.RayTracer.Vector.prototype.multiplyScalar(
+ ray.direction,
+ info.distance
+ )
+ );
+ info.normal = Flog.RayTracer.Vector.prototype.subtract(
+ info.position,
+ this.position
+ ).normalize();
+
+ info.color = this.material.getColor(0,0);
+ } else {
+ info.isHit = false;
+ }
+ return info;
+ },
+
+ toString : function () {
+ return 'Sphere [position=' + this.position + ', radius=' + this.radius + ']';
+ }
+}
+/* Fake a Flog.* namespace */
+if(typeof(Flog) == 'undefined') var Flog = {};
+if(typeof(Flog.RayTracer) == 'undefined') Flog.RayTracer = {};
+if(typeof(Flog.RayTracer.Shape) == 'undefined') Flog.RayTracer.Shape = {};
+
+Flog.RayTracer.Shape.Plane = Class.create();
+
+Flog.RayTracer.Shape.Plane.prototype = {
+ d: 0.0,
+
+ initialize : function(pos, d, material) {
+ this.position = pos;
+ this.d = d;
+ this.material = material;
+ },
+
+ intersect: function(ray){
+ var info = new Flog.RayTracer.IntersectionInfo();
+
+ var Vd = this.position.dot(ray.direction);
+ if(Vd == 0) return info; // no intersection
+
+ var t = -(this.position.dot(ray.position) + this.d) / Vd;
+ if(t <= 0) return info;
+
+ info.shape = this;
+ info.isHit = true;
+ info.position = Flog.RayTracer.Vector.prototype.add(
+ ray.position,
+ Flog.RayTracer.Vector.prototype.multiplyScalar(
+ ray.direction,
+ t
+ )
+ );
+ info.normal = this.position;
+ info.distance = t;
+
+ if(this.material.hasTexture){
+ var vU = new Flog.RayTracer.Vector(this.position.y, this.position.z, -this.position.x);
+ var vV = vU.cross(this.position);
+ var u = info.position.dot(vU);
+ var v = info.position.dot(vV);
+ info.color = this.material.getColor(u,v);
+ } else {
+ info.color = this.material.getColor(0,0);
+ }
+
+ return info;
+ },
+
+ toString : function () {
+ return 'Plane [' + this.position + ', d=' + this.d + ']';
+ }
+}
+/* Fake a Flog.* namespace */
+if(typeof(Flog) == 'undefined') var Flog = {};
+if(typeof(Flog.RayTracer) == 'undefined') Flog.RayTracer = {};
+
+Flog.RayTracer.IntersectionInfo = Class.create();
+
+Flog.RayTracer.IntersectionInfo.prototype = {
+ isHit: false,
+ hitCount: 0,
+ shape: null,
+ position: null,
+ normal: null,
+ color: null,
+ distance: null,
+
+ initialize : function() {
+ this.color = new Flog.RayTracer.Color(0,0,0);
+ },
+
+ toString : function () {
+ return 'Intersection [' + this.position + ']';
+ }
+}
+/* Fake a Flog.* namespace */
+if(typeof(Flog) == 'undefined') var Flog = {};
+if(typeof(Flog.RayTracer) == 'undefined') Flog.RayTracer = {};
+
+Flog.RayTracer.Camera = Class.create();
+
+Flog.RayTracer.Camera.prototype = {
+ position: null,
+ lookAt: null,
+ equator: null,
+ up: null,
+ screen: null,
+
+ initialize : function(pos, lookAt, up) {
+ this.position = pos;
+ this.lookAt = lookAt;
+ this.up = up;
+ this.equator = lookAt.normalize().cross(this.up);
+ this.screen = Flog.RayTracer.Vector.prototype.add(this.position, this.lookAt);
+ },
+
+ getRay: function(vx, vy){
+ var pos = Flog.RayTracer.Vector.prototype.subtract(
+ this.screen,
+ Flog.RayTracer.Vector.prototype.subtract(
+ Flog.RayTracer.Vector.prototype.multiplyScalar(this.equator, vx),
+ Flog.RayTracer.Vector.prototype.multiplyScalar(this.up, vy)
+ )
+ );
+ pos.y = pos.y * -1;
+ var dir = Flog.RayTracer.Vector.prototype.subtract(
+ pos,
+ this.position
+ );
+
+ var ray = new Flog.RayTracer.Ray(pos, dir.normalize());
+
+ return ray;
+ },
+
+ toString : function () {
+ return 'Ray []';
+ }
+}
+/* Fake a Flog.* namespace */
+if(typeof(Flog) == 'undefined') var Flog = {};
+if(typeof(Flog.RayTracer) == 'undefined') Flog.RayTracer = {};
+
+Flog.RayTracer.Background = Class.create();
+
+Flog.RayTracer.Background.prototype = {
+ color : null,
+ ambience : 0.0,
+
+ initialize : function(color, ambience) {
+ this.color = color;
+ this.ambience = ambience;
+ }
+}
+/* Fake a Flog.* namespace */
+if(typeof(Flog) == 'undefined') var Flog = {};
+if(typeof(Flog.RayTracer) == 'undefined') Flog.RayTracer = {};
+
+Flog.RayTracer.Engine = Class.create();
+
+Flog.RayTracer.Engine.prototype = {
+ canvas: null, /* 2d context we can render to */
+
+ initialize: function(options){
+ this.options = Object.extend({
+ canvasHeight: 100,
+ canvasWidth: 100,
+ pixelWidth: 2,
+ pixelHeight: 2,
+ renderDiffuse: false,
+ renderShadows: false,
+ renderHighlights: false,
+ renderReflections: false,
+ rayDepth: 2
+ }, options || {});
+
+ this.options.canvasHeight /= this.options.pixelHeight;
+ this.options.canvasWidth /= this.options.pixelWidth;
+
+ /* TODO: dynamically include other scripts */
+ },
+
+ setPixel: function(x, y, color){
+ var pxW, pxH;
+ pxW = this.options.pixelWidth;
+ pxH = this.options.pixelHeight;
+
+ if (this.canvas) {
+ this.canvas.fillStyle = color.toString();
+ this.canvas.fillRect (x * pxW, y * pxH, pxW, pxH);
+ } else {
+ if (x === y) {
+ checkNumber += color.brightness();
+ }
+ // print(x * pxW, y * pxH, pxW, pxH);
+ }
+ },
+
+ renderScene: function(scene, canvas){
+ checkNumber = 0;
+ /* Get canvas */
+ if (canvas) {
+ this.canvas = canvas.getContext("2d");
+ } else {
+ this.canvas = null;
+ }
+
+ var canvasHeight = this.options.canvasHeight;
+ var canvasWidth = this.options.canvasWidth;
+
+ for(var y=0; y < canvasHeight; y++){
+ for(var x=0; x < canvasWidth; x++){
+ var yp = y * 1.0 / canvasHeight * 2 - 1;
+ var xp = x * 1.0 / canvasWidth * 2 - 1;
+
+ var ray = scene.camera.getRay(xp, yp);
+
+ var color = this.getPixelColor(ray, scene);
+
+ this.setPixel(x, y, color);
+ }
+ }
+ if (checkNumber !== 2321) {
+ throw new Error("Scene rendered incorrectly");
+ }
+ },
+
+ getPixelColor: function(ray, scene){
+ var info = this.testIntersection(ray, scene, null);
+ if(info.isHit){
+ var color = this.rayTrace(info, ray, scene, 0);
+ return color;
+ }
+ return scene.background.color;
+ },
+
+ testIntersection: function(ray, scene, exclude){
+ var hits = 0;
+ var best = new Flog.RayTracer.IntersectionInfo();
+ best.distance = 2000;
+
+ for(var i=0; i<scene.shapes.length; i++){
+ var shape = scene.shapes[i];
+
+ if(shape != exclude){
+ var info = shape.intersect(ray);
+ if(info.isHit && info.distance >= 0 && info.distance < best.distance){
+ best = info;
+ hits++;
+ }
+ }
+ }
+ best.hitCount = hits;
+ return best;
+ },
+
+ getReflectionRay: function(P,N,V){
+ var c1 = -N.dot(V);
+ var R1 = Flog.RayTracer.Vector.prototype.add(
+ Flog.RayTracer.Vector.prototype.multiplyScalar(N, 2*c1),
+ V
+ );
+ return new Flog.RayTracer.Ray(P, R1);
+ },
+
+ rayTrace: function(info, ray, scene, depth){
+ // Calc ambient
+ var color = Flog.RayTracer.Color.prototype.multiplyScalar(info.color, scene.background.ambience);
+ var oldColor = color;
+ var shininess = Math.pow(10, info.shape.material.gloss + 1);
+
+ for(var i=0; i<scene.lights.length; i++){
+ var light = scene.lights[i];
+
+ // Calc diffuse lighting
+ var v = Flog.RayTracer.Vector.prototype.subtract(
+ light.position,
+ info.position
+ ).normalize();
+
+ if(this.options.renderDiffuse){
+ var L = v.dot(info.normal);
+ if(L > 0.0){
+ color = Flog.RayTracer.Color.prototype.add(
+ color,
+ Flog.RayTracer.Color.prototype.multiply(
+ info.color,
+ Flog.RayTracer.Color.prototype.multiplyScalar(
+ light.color,
+ L
+ )
+ )
+ );
+ }
+ }
+
+ // The greater the depth the more accurate the colours, but
+ // this is exponentially (!) expensive
+ if(depth <= this.options.rayDepth){
+ // calculate reflection ray
+ if(this.options.renderReflections && info.shape.material.reflection > 0)
+ {
+ var reflectionRay = this.getReflectionRay(info.position, info.normal, ray.direction);
+ var refl = this.testIntersection(reflectionRay, scene, info.shape);
+
+ if (refl.isHit && refl.distance > 0){
+ refl.color = this.rayTrace(refl, reflectionRay, scene, depth + 1);
+ } else {
+ refl.color = scene.background.color;
+ }
+
+ color = Flog.RayTracer.Color.prototype.blend(
+ color,
+ refl.color,
+ info.shape.material.reflection
+ );
+ }
+
+ // Refraction
+ /* TODO */
+ }
+
+ /* Render shadows and highlights */
+
+ var shadowInfo = new Flog.RayTracer.IntersectionInfo();
+
+ if(this.options.renderShadows){
+ var shadowRay = new Flog.RayTracer.Ray(info.position, v);
+
+ shadowInfo = this.testIntersection(shadowRay, scene, info.shape);
+ if(shadowInfo.isHit && shadowInfo.shape != info.shape /*&& shadowInfo.shape.type != 'PLANE'*/){
+ var vA = Flog.RayTracer.Color.prototype.multiplyScalar(color, 0.5);
+ var dB = (0.5 * Math.pow(shadowInfo.shape.material.transparency, 0.5));
+ color = Flog.RayTracer.Color.prototype.addScalar(vA,dB);
+ }
+ }
+
+ // Phong specular highlights
+ if(this.options.renderHighlights && !shadowInfo.isHit && info.shape.material.gloss > 0){
+ var Lv = Flog.RayTracer.Vector.prototype.subtract(
+ info.shape.position,
+ light.position
+ ).normalize();
+
+ var E = Flog.RayTracer.Vector.prototype.subtract(
+ scene.camera.position,
+ info.shape.position
+ ).normalize();
+
+ var H = Flog.RayTracer.Vector.prototype.subtract(
+ E,
+ Lv
+ ).normalize();
+
+ var glossWeight = Math.pow(Math.max(info.normal.dot(H), 0), shininess);
+ color = Flog.RayTracer.Color.prototype.add(
+ Flog.RayTracer.Color.prototype.multiplyScalar(light.color, glossWeight),
+ color
+ );
+ }
+ }
+ color.limit();
+ return color;
+ }
+};
+
+
+function renderScene(){
+ var scene = new Flog.RayTracer.Scene();
+
+ scene.camera = new Flog.RayTracer.Camera(
+ new Flog.RayTracer.Vector(0, 0, -15),
+ new Flog.RayTracer.Vector(-0.2, 0, 5),
+ new Flog.RayTracer.Vector(0, 1, 0)
+ );
+
+ scene.background = new Flog.RayTracer.Background(
+ new Flog.RayTracer.Color(0.5, 0.5, 0.5),
+ 0.4
+ );
+
+ var sphere = new Flog.RayTracer.Shape.Sphere(
+ new Flog.RayTracer.Vector(-1.5, 1.5, 2),
+ 1.5,
+ new Flog.RayTracer.Material.Solid(
+ new Flog.RayTracer.Color(0,0.5,0.5),
+ 0.3,
+ 0.0,
+ 0.0,
+ 2.0
+ )
+ );
+
+ var sphere1 = new Flog.RayTracer.Shape.Sphere(
+ new Flog.RayTracer.Vector(1, 0.25, 1),
+ 0.5,
+ new Flog.RayTracer.Material.Solid(
+ new Flog.RayTracer.Color(0.9,0.9,0.9),
+ 0.1,
+ 0.0,
+ 0.0,
+ 1.5
+ )
+ );
+
+ var plane = new Flog.RayTracer.Shape.Plane(
+ new Flog.RayTracer.Vector(0.1, 0.9, -0.5).normalize(),
+ 1.2,
+ new Flog.RayTracer.Material.Chessboard(
+ new Flog.RayTracer.Color(1,1,1),
+ new Flog.RayTracer.Color(0,0,0),
+ 0.2,
+ 0.0,
+ 1.0,
+ 0.7
+ )
+ );
+
+ scene.shapes.push(plane);
+ scene.shapes.push(sphere);
+ scene.shapes.push(sphere1);
+
+ var light = new Flog.RayTracer.Light(
+ new Flog.RayTracer.Vector(5, 10, -1),
+ new Flog.RayTracer.Color(0.8, 0.8, 0.8)
+ );
+
+ var light1 = new Flog.RayTracer.Light(
+ new Flog.RayTracer.Vector(-3, 5, -15),
+ new Flog.RayTracer.Color(0.8, 0.8, 0.8),
+ 100
+ );
+
+ scene.lights.push(light);
+ scene.lights.push(light1);
+
+ var imageWidth = 100; // $F('imageWidth');
+ var imageHeight = 100; // $F('imageHeight');
+ var pixelSize = "5,5".split(','); // $F('pixelSize').split(',');
+ var renderDiffuse = true; // $F('renderDiffuse');
+ var renderShadows = true; // $F('renderShadows');
+ var renderHighlights = true; // $F('renderHighlights');
+ var renderReflections = true; // $F('renderReflections');
+ var rayDepth = 2;//$F('rayDepth');
+
+ var raytracer = new Flog.RayTracer.Engine(
+ {
+ canvasWidth: imageWidth,
+ canvasHeight: imageHeight,
+ pixelWidth: pixelSize[0],
+ pixelHeight: pixelSize[1],
+ "renderDiffuse": renderDiffuse,
+ "renderHighlights": renderHighlights,
+ "renderShadows": renderShadows,
+ "renderReflections": renderReflections,
+ "rayDepth": rayDepth
+ }
+ );
+
+ raytracer.renderScene(scene, null, 0);
+}
diff --git a/js/src/octane/richards.js b/js/src/octane/richards.js
new file mode 100644
index 0000000000..2cf027eae5
--- /dev/null
+++ b/js/src/octane/richards.js
@@ -0,0 +1,539 @@
+// Copyright 2006-2008 the V8 project authors. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following
+// disclaimer in the documentation and/or other materials provided
+// with the distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived
+// from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+// This is a JavaScript implementation of the Richards
+// benchmark from:
+//
+// http://www.cl.cam.ac.uk/~mr10/Bench.html
+//
+// The benchmark was originally implemented in BCPL by
+// Martin Richards.
+
+
+var Richards = new BenchmarkSuite('Richards', [35302], [
+ new Benchmark("Richards", true, false, 8200, runRichards)
+]);
+
+
+/**
+ * The Richards benchmark simulates the task dispatcher of an
+ * operating system.
+ **/
+function runRichards() {
+ var scheduler = new Scheduler();
+ scheduler.addIdleTask(ID_IDLE, 0, null, COUNT);
+
+ var queue = new Packet(null, ID_WORKER, KIND_WORK);
+ queue = new Packet(queue, ID_WORKER, KIND_WORK);
+ scheduler.addWorkerTask(ID_WORKER, 1000, queue);
+
+ queue = new Packet(null, ID_DEVICE_A, KIND_DEVICE);
+ queue = new Packet(queue, ID_DEVICE_A, KIND_DEVICE);
+ queue = new Packet(queue, ID_DEVICE_A, KIND_DEVICE);
+ scheduler.addHandlerTask(ID_HANDLER_A, 2000, queue);
+
+ queue = new Packet(null, ID_DEVICE_B, KIND_DEVICE);
+ queue = new Packet(queue, ID_DEVICE_B, KIND_DEVICE);
+ queue = new Packet(queue, ID_DEVICE_B, KIND_DEVICE);
+ scheduler.addHandlerTask(ID_HANDLER_B, 3000, queue);
+
+ scheduler.addDeviceTask(ID_DEVICE_A, 4000, null);
+
+ scheduler.addDeviceTask(ID_DEVICE_B, 5000, null);
+
+ scheduler.schedule();
+
+ if (scheduler.queueCount != EXPECTED_QUEUE_COUNT ||
+ scheduler.holdCount != EXPECTED_HOLD_COUNT) {
+ var msg =
+ "Error during execution: queueCount = " + scheduler.queueCount +
+ ", holdCount = " + scheduler.holdCount + ".";
+ throw new Error(msg);
+ }
+}
+
+var COUNT = 1000;
+
+/**
+ * These two constants specify how many times a packet is queued and
+ * how many times a task is put on hold in a correct run of richards.
+ * They don't have any meaning a such but are characteristic of a
+ * correct run so if the actual queue or hold count is different from
+ * the expected there must be a bug in the implementation.
+ **/
+var EXPECTED_QUEUE_COUNT = 2322;
+var EXPECTED_HOLD_COUNT = 928;
+
+
+/**
+ * A scheduler can be used to schedule a set of tasks based on their relative
+ * priorities. Scheduling is done by maintaining a list of task control blocks
+ * which holds tasks and the data queue they are processing.
+ * @constructor
+ */
+function Scheduler() {
+ this.queueCount = 0;
+ this.holdCount = 0;
+ this.blocks = new Array(NUMBER_OF_IDS);
+ this.list = null;
+ this.currentTcb = null;
+ this.currentId = null;
+}
+
+var ID_IDLE = 0;
+var ID_WORKER = 1;
+var ID_HANDLER_A = 2;
+var ID_HANDLER_B = 3;
+var ID_DEVICE_A = 4;
+var ID_DEVICE_B = 5;
+var NUMBER_OF_IDS = 6;
+
+var KIND_DEVICE = 0;
+var KIND_WORK = 1;
+
+/**
+ * Add an idle task to this scheduler.
+ * @param {int} id the identity of the task
+ * @param {int} priority the task's priority
+ * @param {Packet} queue the queue of work to be processed by the task
+ * @param {int} count the number of times to schedule the task
+ */
+Scheduler.prototype.addIdleTask = function (id, priority, queue, count) {
+ this.addRunningTask(id, priority, queue, new IdleTask(this, 1, count));
+};
+
+/**
+ * Add a work task to this scheduler.
+ * @param {int} id the identity of the task
+ * @param {int} priority the task's priority
+ * @param {Packet} queue the queue of work to be processed by the task
+ */
+Scheduler.prototype.addWorkerTask = function (id, priority, queue) {
+ this.addTask(id, priority, queue, new WorkerTask(this, ID_HANDLER_A, 0));
+};
+
+/**
+ * Add a handler task to this scheduler.
+ * @param {int} id the identity of the task
+ * @param {int} priority the task's priority
+ * @param {Packet} queue the queue of work to be processed by the task
+ */
+Scheduler.prototype.addHandlerTask = function (id, priority, queue) {
+ this.addTask(id, priority, queue, new HandlerTask(this));
+};
+
+/**
+ * Add a handler task to this scheduler.
+ * @param {int} id the identity of the task
+ * @param {int} priority the task's priority
+ * @param {Packet} queue the queue of work to be processed by the task
+ */
+Scheduler.prototype.addDeviceTask = function (id, priority, queue) {
+ this.addTask(id, priority, queue, new DeviceTask(this))
+};
+
+/**
+ * Add the specified task and mark it as running.
+ * @param {int} id the identity of the task
+ * @param {int} priority the task's priority
+ * @param {Packet} queue the queue of work to be processed by the task
+ * @param {Task} task the task to add
+ */
+Scheduler.prototype.addRunningTask = function (id, priority, queue, task) {
+ this.addTask(id, priority, queue, task);
+ this.currentTcb.setRunning();
+};
+
+/**
+ * Add the specified task to this scheduler.
+ * @param {int} id the identity of the task
+ * @param {int} priority the task's priority
+ * @param {Packet} queue the queue of work to be processed by the task
+ * @param {Task} task the task to add
+ */
+Scheduler.prototype.addTask = function (id, priority, queue, task) {
+ this.currentTcb = new TaskControlBlock(this.list, id, priority, queue, task);
+ this.list = this.currentTcb;
+ this.blocks[id] = this.currentTcb;
+};
+
+/**
+ * Execute the tasks managed by this scheduler.
+ */
+Scheduler.prototype.schedule = function () {
+ this.currentTcb = this.list;
+ while (this.currentTcb != null) {
+ if (this.currentTcb.isHeldOrSuspended()) {
+ this.currentTcb = this.currentTcb.link;
+ } else {
+ this.currentId = this.currentTcb.id;
+ this.currentTcb = this.currentTcb.run();
+ }
+ }
+};
+
+/**
+ * Release a task that is currently blocked and return the next block to run.
+ * @param {int} id the id of the task to suspend
+ */
+Scheduler.prototype.release = function (id) {
+ var tcb = this.blocks[id];
+ if (tcb == null) return tcb;
+ tcb.markAsNotHeld();
+ if (tcb.priority > this.currentTcb.priority) {
+ return tcb;
+ } else {
+ return this.currentTcb;
+ }
+};
+
+/**
+ * Block the currently executing task and return the next task control block
+ * to run. The blocked task will not be made runnable until it is explicitly
+ * released, even if new work is added to it.
+ */
+Scheduler.prototype.holdCurrent = function () {
+ this.holdCount++;
+ this.currentTcb.markAsHeld();
+ return this.currentTcb.link;
+};
+
+/**
+ * Suspend the currently executing task and return the next task control block
+ * to run. If new work is added to the suspended task it will be made runnable.
+ */
+Scheduler.prototype.suspendCurrent = function () {
+ this.currentTcb.markAsSuspended();
+ return this.currentTcb;
+};
+
+/**
+ * Add the specified packet to the end of the worklist used by the task
+ * associated with the packet and make the task runnable if it is currently
+ * suspended.
+ * @param {Packet} packet the packet to add
+ */
+Scheduler.prototype.queue = function (packet) {
+ var t = this.blocks[packet.id];
+ if (t == null) return t;
+ this.queueCount++;
+ packet.link = null;
+ packet.id = this.currentId;
+ return t.checkPriorityAdd(this.currentTcb, packet);
+};
+
+/**
+ * A task control block manages a task and the queue of work packages associated
+ * with it.
+ * @param {TaskControlBlock} link the preceding block in the linked block list
+ * @param {int} id the id of this block
+ * @param {int} priority the priority of this block
+ * @param {Packet} queue the queue of packages to be processed by the task
+ * @param {Task} task the task
+ * @constructor
+ */
+function TaskControlBlock(link, id, priority, queue, task) {
+ this.link = link;
+ this.id = id;
+ this.priority = priority;
+ this.queue = queue;
+ this.task = task;
+ if (queue == null) {
+ this.state = STATE_SUSPENDED;
+ } else {
+ this.state = STATE_SUSPENDED_RUNNABLE;
+ }
+}
+
+/**
+ * The task is running and is currently scheduled.
+ */
+var STATE_RUNNING = 0;
+
+/**
+ * The task has packets left to process.
+ */
+var STATE_RUNNABLE = 1;
+
+/**
+ * The task is not currently running. The task is not blocked as such and may
+* be started by the scheduler.
+ */
+var STATE_SUSPENDED = 2;
+
+/**
+ * The task is blocked and cannot be run until it is explicitly released.
+ */
+var STATE_HELD = 4;
+
+var STATE_SUSPENDED_RUNNABLE = STATE_SUSPENDED | STATE_RUNNABLE;
+var STATE_NOT_HELD = ~STATE_HELD;
+
+TaskControlBlock.prototype.setRunning = function () {
+ this.state = STATE_RUNNING;
+};
+
+TaskControlBlock.prototype.markAsNotHeld = function () {
+ this.state = this.state & STATE_NOT_HELD;
+};
+
+TaskControlBlock.prototype.markAsHeld = function () {
+ this.state = this.state | STATE_HELD;
+};
+
+TaskControlBlock.prototype.isHeldOrSuspended = function () {
+ return (this.state & STATE_HELD) != 0 || (this.state == STATE_SUSPENDED);
+};
+
+TaskControlBlock.prototype.markAsSuspended = function () {
+ this.state = this.state | STATE_SUSPENDED;
+};
+
+TaskControlBlock.prototype.markAsRunnable = function () {
+ this.state = this.state | STATE_RUNNABLE;
+};
+
+/**
+ * Runs this task, if it is ready to be run, and returns the next task to run.
+ */
+TaskControlBlock.prototype.run = function () {
+ var packet;
+ if (this.state == STATE_SUSPENDED_RUNNABLE) {
+ packet = this.queue;
+ this.queue = packet.link;
+ if (this.queue == null) {
+ this.state = STATE_RUNNING;
+ } else {
+ this.state = STATE_RUNNABLE;
+ }
+ } else {
+ packet = null;
+ }
+ return this.task.run(packet);
+};
+
+/**
+ * Adds a packet to the worklist of this block's task, marks this as runnable if
+ * necessary, and returns the next runnable object to run (the one
+ * with the highest priority).
+ */
+TaskControlBlock.prototype.checkPriorityAdd = function (task, packet) {
+ if (this.queue == null) {
+ this.queue = packet;
+ this.markAsRunnable();
+ if (this.priority > task.priority) return this;
+ } else {
+ this.queue = packet.addTo(this.queue);
+ }
+ return task;
+};
+
+TaskControlBlock.prototype.toString = function () {
+ return "tcb { " + this.task + "@" + this.state + " }";
+};
+
+/**
+ * An idle task doesn't do any work itself but cycles control between the two
+ * device tasks.
+ * @param {Scheduler} scheduler the scheduler that manages this task
+ * @param {int} v1 a seed value that controls how the device tasks are scheduled
+ * @param {int} count the number of times this task should be scheduled
+ * @constructor
+ */
+function IdleTask(scheduler, v1, count) {
+ this.scheduler = scheduler;
+ this.v1 = v1;
+ this.count = count;
+}
+
+IdleTask.prototype.run = function (packet) {
+ this.count--;
+ if (this.count == 0) return this.scheduler.holdCurrent();
+ if ((this.v1 & 1) == 0) {
+ this.v1 = this.v1 >> 1;
+ return this.scheduler.release(ID_DEVICE_A);
+ } else {
+ this.v1 = (this.v1 >> 1) ^ 0xD008;
+ return this.scheduler.release(ID_DEVICE_B);
+ }
+};
+
+IdleTask.prototype.toString = function () {
+ return "IdleTask"
+};
+
+/**
+ * A task that suspends itself after each time it has been run to simulate
+ * waiting for data from an external device.
+ * @param {Scheduler} scheduler the scheduler that manages this task
+ * @constructor
+ */
+function DeviceTask(scheduler) {
+ this.scheduler = scheduler;
+ this.v1 = null;
+}
+
+DeviceTask.prototype.run = function (packet) {
+ if (packet == null) {
+ if (this.v1 == null) return this.scheduler.suspendCurrent();
+ var v = this.v1;
+ this.v1 = null;
+ return this.scheduler.queue(v);
+ } else {
+ this.v1 = packet;
+ return this.scheduler.holdCurrent();
+ }
+};
+
+DeviceTask.prototype.toString = function () {
+ return "DeviceTask";
+};
+
+/**
+ * A task that manipulates work packets.
+ * @param {Scheduler} scheduler the scheduler that manages this task
+ * @param {int} v1 a seed used to specify how work packets are manipulated
+ * @param {int} v2 another seed used to specify how work packets are manipulated
+ * @constructor
+ */
+function WorkerTask(scheduler, v1, v2) {
+ this.scheduler = scheduler;
+ this.v1 = v1;
+ this.v2 = v2;
+}
+
+WorkerTask.prototype.run = function (packet) {
+ if (packet == null) {
+ return this.scheduler.suspendCurrent();
+ } else {
+ if (this.v1 == ID_HANDLER_A) {
+ this.v1 = ID_HANDLER_B;
+ } else {
+ this.v1 = ID_HANDLER_A;
+ }
+ packet.id = this.v1;
+ packet.a1 = 0;
+ for (var i = 0; i < DATA_SIZE; i++) {
+ this.v2++;
+ if (this.v2 > 26) this.v2 = 1;
+ packet.a2[i] = this.v2;
+ }
+ return this.scheduler.queue(packet);
+ }
+};
+
+WorkerTask.prototype.toString = function () {
+ return "WorkerTask";
+};
+
+/**
+ * A task that manipulates work packets and then suspends itself.
+ * @param {Scheduler} scheduler the scheduler that manages this task
+ * @constructor
+ */
+function HandlerTask(scheduler) {
+ this.scheduler = scheduler;
+ this.v1 = null;
+ this.v2 = null;
+}
+
+HandlerTask.prototype.run = function (packet) {
+ if (packet != null) {
+ if (packet.kind == KIND_WORK) {
+ this.v1 = packet.addTo(this.v1);
+ } else {
+ this.v2 = packet.addTo(this.v2);
+ }
+ }
+ if (this.v1 != null) {
+ var count = this.v1.a1;
+ var v;
+ if (count < DATA_SIZE) {
+ if (this.v2 != null) {
+ v = this.v2;
+ this.v2 = this.v2.link;
+ v.a1 = this.v1.a2[count];
+ this.v1.a1 = count + 1;
+ return this.scheduler.queue(v);
+ }
+ } else {
+ v = this.v1;
+ this.v1 = this.v1.link;
+ return this.scheduler.queue(v);
+ }
+ }
+ return this.scheduler.suspendCurrent();
+};
+
+HandlerTask.prototype.toString = function () {
+ return "HandlerTask";
+};
+
+/* --- *
+ * P a c k e t
+ * --- */
+
+var DATA_SIZE = 4;
+
+/**
+ * A simple package of data that is manipulated by the tasks. The exact layout
+ * of the payload data carried by a packet is not importaint, and neither is the
+ * nature of the work performed on packets by the tasks.
+ *
+ * Besides carrying data, packets form linked lists and are hence used both as
+ * data and worklists.
+ * @param {Packet} link the tail of the linked list of packets
+ * @param {int} id an ID for this packet
+ * @param {int} kind the type of this packet
+ * @constructor
+ */
+function Packet(link, id, kind) {
+ this.link = link;
+ this.id = id;
+ this.kind = kind;
+ this.a1 = 0;
+ this.a2 = new Array(DATA_SIZE);
+}
+
+/**
+ * Add this packet to the end of a worklist, and return the worklist.
+ * @param {Packet} queue the worklist to add this packet to
+ */
+Packet.prototype.addTo = function (queue) {
+ this.link = null;
+ if (queue == null) return this;
+ var peek, next = queue;
+ while ((peek = next.link) != null)
+ next = peek;
+ next.link = this;
+ return queue;
+};
+
+Packet.prototype.toString = function () {
+ return "Packet";
+};
diff --git a/js/src/octane/run-box2d.js b/js/src/octane/run-box2d.js
new file mode 100644
index 0000000000..8989800464
--- /dev/null
+++ b/js/src/octane/run-box2d.js
@@ -0,0 +1,59 @@
+// Copyright 2014 the V8 project authors. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following
+// disclaimer in the documentation and/or other materials provided
+// with the distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived
+// from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+var base_dir = '';
+load(base_dir + 'base.js');
+load(base_dir + 'box2d.js');
+
+var success = true;
+
+function PrintResult(name, result) {
+ print(name + ': ' + result);
+}
+
+
+function PrintError(name, error) {
+ PrintResult(name, error);
+ success = false;
+}
+
+
+function PrintScore(score) {
+ if (success) {
+ print('----');
+ print('Score (version ' + BenchmarkSuite.version + '): ' + score);
+ }
+}
+
+
+BenchmarkSuite.config.doWarmup = undefined;
+BenchmarkSuite.config.doDeterministic = undefined;
+
+BenchmarkSuite.RunSuites({ NotifyResult: PrintResult,
+ NotifyError: PrintError,
+ NotifyScore: PrintScore });
diff --git a/js/src/octane/run-code-load.js b/js/src/octane/run-code-load.js
new file mode 100644
index 0000000000..6b64361fb2
--- /dev/null
+++ b/js/src/octane/run-code-load.js
@@ -0,0 +1,59 @@
+// Copyright 2014 the V8 project authors. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following
+// disclaimer in the documentation and/or other materials provided
+// with the distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived
+// from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+var base_dir = '';
+load(base_dir + 'base.js');
+load(base_dir + 'code-load.js');
+
+var success = true;
+
+function PrintResult(name, result) {
+ print(name + ': ' + result);
+}
+
+
+function PrintError(name, error) {
+ PrintResult(name, error);
+ success = false;
+}
+
+
+function PrintScore(score) {
+ if (success) {
+ print('----');
+ print('Score (version ' + BenchmarkSuite.version + '): ' + score);
+ }
+}
+
+
+BenchmarkSuite.config.doWarmup = undefined;
+BenchmarkSuite.config.doDeterministic = undefined;
+
+BenchmarkSuite.RunSuites({ NotifyResult: PrintResult,
+ NotifyError: PrintError,
+ NotifyScore: PrintScore });
diff --git a/js/src/octane/run-crypto.js b/js/src/octane/run-crypto.js
new file mode 100644
index 0000000000..cd2bb5d5a8
--- /dev/null
+++ b/js/src/octane/run-crypto.js
@@ -0,0 +1,59 @@
+// Copyright 2014 the V8 project authors. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following
+// disclaimer in the documentation and/or other materials provided
+// with the distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived
+// from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+var base_dir = '';
+load(base_dir + 'base.js');
+load(base_dir + 'crypto.js');
+
+var success = true;
+
+function PrintResult(name, result) {
+ print(name + ': ' + result);
+}
+
+
+function PrintError(name, error) {
+ PrintResult(name, error);
+ success = false;
+}
+
+
+function PrintScore(score) {
+ if (success) {
+ print('----');
+ print('Score (version ' + BenchmarkSuite.version + '): ' + score);
+ }
+}
+
+
+BenchmarkSuite.config.doWarmup = undefined;
+BenchmarkSuite.config.doDeterministic = undefined;
+
+BenchmarkSuite.RunSuites({ NotifyResult: PrintResult,
+ NotifyError: PrintError,
+ NotifyScore: PrintScore });
diff --git a/js/src/octane/run-deltablue.js b/js/src/octane/run-deltablue.js
new file mode 100644
index 0000000000..83566339d9
--- /dev/null
+++ b/js/src/octane/run-deltablue.js
@@ -0,0 +1,59 @@
+// Copyright 2014 the V8 project authors. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following
+// disclaimer in the documentation and/or other materials provided
+// with the distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived
+// from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+var base_dir = '';
+load(base_dir + 'base.js');
+load(base_dir + 'deltablue.js');
+
+var success = true;
+
+function PrintResult(name, result) {
+ print(name + ': ' + result);
+}
+
+
+function PrintError(name, error) {
+ PrintResult(name, error);
+ success = false;
+}
+
+
+function PrintScore(score) {
+ if (success) {
+ print('----');
+ print('Score (version ' + BenchmarkSuite.version + '): ' + score);
+ }
+}
+
+
+BenchmarkSuite.config.doWarmup = undefined;
+BenchmarkSuite.config.doDeterministic = undefined;
+
+BenchmarkSuite.RunSuites({ NotifyResult: PrintResult,
+ NotifyError: PrintError,
+ NotifyScore: PrintScore });
diff --git a/js/src/octane/run-earley-boyer.js b/js/src/octane/run-earley-boyer.js
new file mode 100644
index 0000000000..c9912a5337
--- /dev/null
+++ b/js/src/octane/run-earley-boyer.js
@@ -0,0 +1,59 @@
+// Copyright 2014 the V8 project authors. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following
+// disclaimer in the documentation and/or other materials provided
+// with the distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived
+// from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+var base_dir = '';
+load(base_dir + 'base.js');
+load(base_dir + 'earley-boyer.js');
+
+var success = true;
+
+function PrintResult(name, result) {
+ print(name + ': ' + result);
+}
+
+
+function PrintError(name, error) {
+ PrintResult(name, error);
+ success = false;
+}
+
+
+function PrintScore(score) {
+ if (success) {
+ print('----');
+ print('Score (version ' + BenchmarkSuite.version + '): ' + score);
+ }
+}
+
+
+BenchmarkSuite.config.doWarmup = undefined;
+BenchmarkSuite.config.doDeterministic = undefined;
+
+BenchmarkSuite.RunSuites({ NotifyResult: PrintResult,
+ NotifyError: PrintError,
+ NotifyScore: PrintScore });
diff --git a/js/src/octane/run-gbemu.js b/js/src/octane/run-gbemu.js
new file mode 100644
index 0000000000..f9f646c16d
--- /dev/null
+++ b/js/src/octane/run-gbemu.js
@@ -0,0 +1,60 @@
+// Copyright 2014 the V8 project authors. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following
+// disclaimer in the documentation and/or other materials provided
+// with the distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived
+// from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+var base_dir = '';
+load(base_dir + 'base.js');
+load(base_dir + 'gbemu-part1.js');
+load(base_dir + 'gbemu-part2.js');
+
+var success = true;
+
+function PrintResult(name, result) {
+ print(name + ': ' + result);
+}
+
+
+function PrintError(name, error) {
+ PrintResult(name, error);
+ success = false;
+}
+
+
+function PrintScore(score) {
+ if (success) {
+ print('----');
+ print('Score (version ' + BenchmarkSuite.version + '): ' + score);
+ }
+}
+
+
+BenchmarkSuite.config.doWarmup = undefined;
+BenchmarkSuite.config.doDeterministic = undefined;
+
+BenchmarkSuite.RunSuites({ NotifyResult: PrintResult,
+ NotifyError: PrintError,
+ NotifyScore: PrintScore });
diff --git a/js/src/octane/run-mandreel.js b/js/src/octane/run-mandreel.js
new file mode 100644
index 0000000000..ebb20911b7
--- /dev/null
+++ b/js/src/octane/run-mandreel.js
@@ -0,0 +1,59 @@
+// Copyright 2014 the V8 project authors. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following
+// disclaimer in the documentation and/or other materials provided
+// with the distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived
+// from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+var base_dir = '';
+load(base_dir + 'base.js');
+load(base_dir + 'mandreel.js');
+
+var success = true;
+
+function PrintResult(name, result) {
+ print(name + ': ' + result);
+}
+
+
+function PrintError(name, error) {
+ PrintResult(name, error);
+ success = false;
+}
+
+
+function PrintScore(score) {
+ if (success) {
+ print('----');
+ print('Score (version ' + BenchmarkSuite.version + '): ' + score);
+ }
+}
+
+
+BenchmarkSuite.config.doWarmup = undefined;
+BenchmarkSuite.config.doDeterministic = undefined;
+
+BenchmarkSuite.RunSuites({ NotifyResult: PrintResult,
+ NotifyError: PrintError,
+ NotifyScore: PrintScore });
diff --git a/js/src/octane/run-navier-stokes.js b/js/src/octane/run-navier-stokes.js
new file mode 100644
index 0000000000..f6f0c36f09
--- /dev/null
+++ b/js/src/octane/run-navier-stokes.js
@@ -0,0 +1,59 @@
+// Copyright 2014 the V8 project authors. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following
+// disclaimer in the documentation and/or other materials provided
+// with the distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived
+// from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+var base_dir = '';
+load(base_dir + 'base.js');
+load(base_dir + 'navier-stokes.js');
+
+var success = true;
+
+function PrintResult(name, result) {
+ print(name + ': ' + result);
+}
+
+
+function PrintError(name, error) {
+ PrintResult(name, error);
+ success = false;
+}
+
+
+function PrintScore(score) {
+ if (success) {
+ print('----');
+ print('Score (version ' + BenchmarkSuite.version + '): ' + score);
+ }
+}
+
+
+BenchmarkSuite.config.doWarmup = undefined;
+BenchmarkSuite.config.doDeterministic = undefined;
+
+BenchmarkSuite.RunSuites({ NotifyResult: PrintResult,
+ NotifyError: PrintError,
+ NotifyScore: PrintScore });
diff --git a/js/src/octane/run-pdfjs.js b/js/src/octane/run-pdfjs.js
new file mode 100644
index 0000000000..830bd01feb
--- /dev/null
+++ b/js/src/octane/run-pdfjs.js
@@ -0,0 +1,59 @@
+// Copyright 2014 the V8 project authors. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following
+// disclaimer in the documentation and/or other materials provided
+// with the distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived
+// from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+var base_dir = '';
+load(base_dir + 'base.js');
+load(base_dir + 'pdfjs.js');
+
+var success = true;
+
+function PrintResult(name, result) {
+ print(name + ': ' + result);
+}
+
+
+function PrintError(name, error) {
+ PrintResult(name, error);
+ success = false;
+}
+
+
+function PrintScore(score) {
+ if (success) {
+ print('----');
+ print('Score (version ' + BenchmarkSuite.version + '): ' + score);
+ }
+}
+
+
+BenchmarkSuite.config.doWarmup = undefined;
+BenchmarkSuite.config.doDeterministic = undefined;
+
+BenchmarkSuite.RunSuites({ NotifyResult: PrintResult,
+ NotifyError: PrintError,
+ NotifyScore: PrintScore });
diff --git a/js/src/octane/run-raytrace.js b/js/src/octane/run-raytrace.js
new file mode 100644
index 0000000000..aa6afc14b6
--- /dev/null
+++ b/js/src/octane/run-raytrace.js
@@ -0,0 +1,59 @@
+// Copyright 2014 the V8 project authors. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following
+// disclaimer in the documentation and/or other materials provided
+// with the distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived
+// from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+var base_dir = '';
+load(base_dir + 'base.js');
+load(base_dir + 'raytrace.js');
+
+var success = true;
+
+function PrintResult(name, result) {
+ print(name + ': ' + result);
+}
+
+
+function PrintError(name, error) {
+ PrintResult(name, error);
+ success = false;
+}
+
+
+function PrintScore(score) {
+ if (success) {
+ print('----');
+ print('Score (version ' + BenchmarkSuite.version + '): ' + score);
+ }
+}
+
+
+BenchmarkSuite.config.doWarmup = undefined;
+BenchmarkSuite.config.doDeterministic = undefined;
+
+BenchmarkSuite.RunSuites({ NotifyResult: PrintResult,
+ NotifyError: PrintError,
+ NotifyScore: PrintScore });
diff --git a/js/src/octane/run-regexp.js b/js/src/octane/run-regexp.js
new file mode 100644
index 0000000000..e413a159bf
--- /dev/null
+++ b/js/src/octane/run-regexp.js
@@ -0,0 +1,59 @@
+// Copyright 2014 the V8 project authors. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following
+// disclaimer in the documentation and/or other materials provided
+// with the distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived
+// from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+var base_dir = '';
+load(base_dir + 'base.js');
+load(base_dir + 'regexp.js');
+
+var success = true;
+
+function PrintResult(name, result) {
+ print(name + ': ' + result);
+}
+
+
+function PrintError(name, error) {
+ PrintResult(name, error);
+ success = false;
+}
+
+
+function PrintScore(score) {
+ if (success) {
+ print('----');
+ print('Score (version ' + BenchmarkSuite.version + '): ' + score);
+ }
+}
+
+
+BenchmarkSuite.config.doWarmup = undefined;
+BenchmarkSuite.config.doDeterministic = undefined;
+
+BenchmarkSuite.RunSuites({ NotifyResult: PrintResult,
+ NotifyError: PrintError,
+ NotifyScore: PrintScore });
diff --git a/js/src/octane/run-richards.js b/js/src/octane/run-richards.js
new file mode 100644
index 0000000000..dbfe50d2ff
--- /dev/null
+++ b/js/src/octane/run-richards.js
@@ -0,0 +1,59 @@
+// Copyright 2014 the V8 project authors. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following
+// disclaimer in the documentation and/or other materials provided
+// with the distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived
+// from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+var base_dir = '';
+load(base_dir + 'base.js');
+load(base_dir + 'richards.js');
+
+var success = true;
+
+function PrintResult(name, result) {
+ print(name + ': ' + result);
+}
+
+
+function PrintError(name, error) {
+ PrintResult(name, error);
+ success = false;
+}
+
+
+function PrintScore(score) {
+ if (success) {
+ print('----');
+ print('Score (version ' + BenchmarkSuite.version + '): ' + score);
+ }
+}
+
+
+BenchmarkSuite.config.doWarmup = undefined;
+BenchmarkSuite.config.doDeterministic = undefined;
+
+BenchmarkSuite.RunSuites({ NotifyResult: PrintResult,
+ NotifyError: PrintError,
+ NotifyScore: PrintScore });
diff --git a/js/src/octane/run-splay.js b/js/src/octane/run-splay.js
new file mode 100644
index 0000000000..663e5b0355
--- /dev/null
+++ b/js/src/octane/run-splay.js
@@ -0,0 +1,59 @@
+// Copyright 2014 the V8 project authors. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following
+// disclaimer in the documentation and/or other materials provided
+// with the distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived
+// from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+var base_dir = '';
+load(base_dir + 'base.js');
+load(base_dir + 'splay.js');
+
+var success = true;
+
+function PrintResult(name, result) {
+ print(name + ': ' + result);
+}
+
+
+function PrintError(name, error) {
+ PrintResult(name, error);
+ success = false;
+}
+
+
+function PrintScore(score) {
+ if (success) {
+ print('----');
+ print('Score (version ' + BenchmarkSuite.version + '): ' + score);
+ }
+}
+
+
+BenchmarkSuite.config.doWarmup = undefined;
+BenchmarkSuite.config.doDeterministic = undefined;
+
+BenchmarkSuite.RunSuites({ NotifyResult: PrintResult,
+ NotifyError: PrintError,
+ NotifyScore: PrintScore });
diff --git a/js/src/octane/run-typescript.js b/js/src/octane/run-typescript.js
new file mode 100644
index 0000000000..8d8cf5a269
--- /dev/null
+++ b/js/src/octane/run-typescript.js
@@ -0,0 +1,61 @@
+// Copyright 2014 the V8 project authors. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following
+// disclaimer in the documentation and/or other materials provided
+// with the distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived
+// from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+var base_dir = '';
+load(base_dir + 'base.js');
+load(base_dir + 'typescript.js');
+load(base_dir + 'typescript-input.js');
+load(base_dir + 'typescript-compiler.js');
+
+var success = true;
+
+function PrintResult(name, result) {
+ print(name + ': ' + result);
+}
+
+
+function PrintError(name, error) {
+ PrintResult(name, error);
+ success = false;
+}
+
+
+function PrintScore(score) {
+ if (success) {
+ print('----');
+ print('Score (version ' + BenchmarkSuite.version + '): ' + score);
+ }
+}
+
+
+BenchmarkSuite.config.doWarmup = undefined;
+BenchmarkSuite.config.doDeterministic = undefined;
+
+BenchmarkSuite.RunSuites({ NotifyResult: PrintResult,
+ NotifyError: PrintError,
+ NotifyScore: PrintScore });
diff --git a/js/src/octane/run-zlib.js b/js/src/octane/run-zlib.js
new file mode 100644
index 0000000000..423f40d202
--- /dev/null
+++ b/js/src/octane/run-zlib.js
@@ -0,0 +1,60 @@
+// Copyright 2014 the V8 project authors. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following
+// disclaimer in the documentation and/or other materials provided
+// with the distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived
+// from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+var base_dir = '';
+load(base_dir + 'base.js');
+load(base_dir + 'zlib.js');
+load(base_dir + 'zlib-data.js');
+
+var success = true;
+
+function PrintResult(name, result) {
+ print(name + ': ' + result);
+}
+
+
+function PrintError(name, error) {
+ PrintResult(name, error);
+ success = false;
+}
+
+
+function PrintScore(score) {
+ if (success) {
+ print('----');
+ print('Score (version ' + BenchmarkSuite.version + '): ' + score);
+ }
+}
+
+
+BenchmarkSuite.config.doWarmup = undefined;
+BenchmarkSuite.config.doDeterministic = undefined;
+
+BenchmarkSuite.RunSuites({ NotifyResult: PrintResult,
+ NotifyError: PrintError,
+ NotifyScore: PrintScore });
diff --git a/js/src/octane/run.js b/js/src/octane/run.js
new file mode 100644
index 0000000000..d06a6beffe
--- /dev/null
+++ b/js/src/octane/run.js
@@ -0,0 +1,77 @@
+// Copyright 2014 the V8 project authors. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following
+// disclaimer in the documentation and/or other materials provided
+// with the distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived
+// from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+var base_dir = '';
+load(base_dir + 'base.js');
+load(base_dir + 'richards.js');
+load(base_dir + 'deltablue.js');
+load(base_dir + 'crypto.js');
+load(base_dir + 'raytrace.js');
+load(base_dir + 'earley-boyer.js');
+load(base_dir + 'regexp.js');
+load(base_dir + 'splay.js');
+load(base_dir + 'navier-stokes.js');
+load(base_dir + 'pdfjs.js');
+load(base_dir + 'mandreel.js');
+load(base_dir + 'gbemu-part1.js');
+load(base_dir + 'gbemu-part2.js');
+load(base_dir + 'code-load.js');
+load(base_dir + 'box2d.js');
+load(base_dir + 'zlib.js');
+load(base_dir + 'zlib-data.js');
+load(base_dir + 'typescript.js');
+load(base_dir + 'typescript-input.js');
+load(base_dir + 'typescript-compiler.js');
+
+var success = true;
+
+function PrintResult(name, result) {
+ print(name + ': ' + result);
+}
+
+
+function PrintError(name, error) {
+ PrintResult(name, error);
+ success = false;
+}
+
+
+function PrintScore(score) {
+ if (success) {
+ print('----');
+ print('Score (version ' + BenchmarkSuite.version + '): ' + score);
+ }
+}
+
+
+BenchmarkSuite.config.doWarmup = undefined;
+BenchmarkSuite.config.doDeterministic = undefined;
+
+BenchmarkSuite.RunSuites({ NotifyResult: PrintResult,
+ NotifyError: PrintError,
+ NotifyScore: PrintScore });
diff --git a/js/src/octane/splay.js b/js/src/octane/splay.js
new file mode 100644
index 0000000000..9902c79d21
--- /dev/null
+++ b/js/src/octane/splay.js
@@ -0,0 +1,423 @@
+// Copyright 2009 the V8 project authors. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following
+// disclaimer in the documentation and/or other materials provided
+// with the distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived
+// from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// This benchmark is based on a JavaScript log processing module used
+// by the V8 profiler to generate execution time profiles for runs of
+// JavaScript applications, and it effectively measures how fast the
+// JavaScript engine is at allocating nodes and reclaiming the memory
+// used for old nodes. Because of the way splay trees work, the engine
+// also has to deal with a lot of changes to the large tree object
+// graph.
+
+var Splay = new BenchmarkSuite('Splay', [81491, 2739514], [
+ new Benchmark("Splay", true, false, 1400,
+ SplayRun, SplaySetup, SplayTearDown, SplayRMS)
+]);
+
+
+// Configuration.
+var kSplayTreeSize = 8000;
+var kSplayTreeModifications = 80;
+var kSplayTreePayloadDepth = 5;
+
+var splayTree = null;
+var splaySampleTimeStart = 0.0;
+
+function GeneratePayloadTree(depth, tag) {
+ if (depth == 0) {
+ return {
+ array : [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ],
+ string : 'String for key ' + tag + ' in leaf node'
+ };
+ } else {
+ return {
+ left: GeneratePayloadTree(depth - 1, tag),
+ right: GeneratePayloadTree(depth - 1, tag)
+ };
+ }
+}
+
+
+function GenerateKey() {
+ // The benchmark framework guarantees that Math.random is
+ // deterministic; see base.js.
+ return Math.random();
+}
+
+var splaySamples = 0;
+var splaySumOfSquaredPauses = 0;
+
+function SplayRMS() {
+ return Math.round(Math.sqrt(splaySumOfSquaredPauses / splaySamples) * 10000);
+}
+
+function SplayUpdateStats(time) {
+ var pause = time - splaySampleTimeStart;
+ splaySampleTimeStart = time;
+ splaySamples++;
+ splaySumOfSquaredPauses += pause * pause;
+}
+
+function InsertNewNode() {
+ // Insert new node with a unique key.
+ var key;
+ do {
+ key = GenerateKey();
+ } while (splayTree.find(key) != null);
+ var payload = GeneratePayloadTree(kSplayTreePayloadDepth, String(key));
+ splayTree.insert(key, payload);
+ return key;
+}
+
+
+function SplaySetup() {
+ // Check if the platform has the performance.now high resolution timer.
+ // If not, throw exception and quit.
+ if (!performance.now) {
+ throw "PerformanceNowUnsupported";
+ }
+
+ splayTree = new SplayTree();
+ splaySampleTimeStart = performance.now()
+ for (var i = 0; i < kSplayTreeSize; i++) {
+ InsertNewNode();
+ if ((i+1) % 20 == 19) {
+ SplayUpdateStats(performance.now());
+ }
+ }
+}
+
+
+function SplayTearDown() {
+ // Allow the garbage collector to reclaim the memory
+ // used by the splay tree no matter how we exit the
+ // tear down function.
+ var keys = splayTree.exportKeys();
+ splayTree = null;
+
+ splaySamples = 0;
+ splaySumOfSquaredPauses = 0;
+
+ // Verify that the splay tree has the right size.
+ var length = keys.length;
+ if (length != kSplayTreeSize) {
+ throw new Error("Splay tree has wrong size");
+ }
+
+ // Verify that the splay tree has sorted, unique keys.
+ for (var i = 0; i < length - 1; i++) {
+ if (keys[i] >= keys[i + 1]) {
+ throw new Error("Splay tree not sorted");
+ }
+ }
+}
+
+
+function SplayRun() {
+ // Replace a few nodes in the splay tree.
+ for (var i = 0; i < kSplayTreeModifications; i++) {
+ var key = InsertNewNode();
+ var greatest = splayTree.findGreatestLessThan(key);
+ if (greatest == null) splayTree.remove(key);
+ else splayTree.remove(greatest.key);
+ }
+ SplayUpdateStats(performance.now());
+}
+
+
+/**
+ * Constructs a Splay tree. A splay tree is a self-balancing binary
+ * search tree with the additional property that recently accessed
+ * elements are quick to access again. It performs basic operations
+ * such as insertion, look-up and removal in O(log(n)) amortized time.
+ *
+ * @constructor
+ */
+function SplayTree() {
+};
+
+
+/**
+ * Pointer to the root node of the tree.
+ *
+ * @type {SplayTree.Node}
+ * @private
+ */
+SplayTree.prototype.root_ = null;
+
+
+/**
+ * @return {boolean} Whether the tree is empty.
+ */
+SplayTree.prototype.isEmpty = function() {
+ return !this.root_;
+};
+
+
+/**
+ * Inserts a node into the tree with the specified key and value if
+ * the tree does not already contain a node with the specified key. If
+ * the value is inserted, it becomes the root of the tree.
+ *
+ * @param {number} key Key to insert into the tree.
+ * @param {*} value Value to insert into the tree.
+ */
+SplayTree.prototype.insert = function(key, value) {
+ if (this.isEmpty()) {
+ this.root_ = new SplayTree.Node(key, value);
+ return;
+ }
+ // Splay on the key to move the last node on the search path for
+ // the key to the root of the tree.
+ this.splay_(key);
+ if (this.root_.key == key) {
+ return;
+ }
+ var node = new SplayTree.Node(key, value);
+ if (key > this.root_.key) {
+ node.left = this.root_;
+ node.right = this.root_.right;
+ this.root_.right = null;
+ } else {
+ node.right = this.root_;
+ node.left = this.root_.left;
+ this.root_.left = null;
+ }
+ this.root_ = node;
+};
+
+
+/**
+ * Removes a node with the specified key from the tree if the tree
+ * contains a node with this key. The removed node is returned. If the
+ * key is not found, an exception is thrown.
+ *
+ * @param {number} key Key to find and remove from the tree.
+ * @return {SplayTree.Node} The removed node.
+ */
+SplayTree.prototype.remove = function(key) {
+ if (this.isEmpty()) {
+ throw Error('Key not found: ' + key);
+ }
+ this.splay_(key);
+ if (this.root_.key != key) {
+ throw Error('Key not found: ' + key);
+ }
+ var removed = this.root_;
+ if (!this.root_.left) {
+ this.root_ = this.root_.right;
+ } else {
+ var right = this.root_.right;
+ this.root_ = this.root_.left;
+ // Splay to make sure that the new root has an empty right child.
+ this.splay_(key);
+ // Insert the original right child as the right child of the new
+ // root.
+ this.root_.right = right;
+ }
+ return removed;
+};
+
+
+/**
+ * Returns the node having the specified key or null if the tree doesn't contain
+ * a node with the specified key.
+ *
+ * @param {number} key Key to find in the tree.
+ * @return {SplayTree.Node} Node having the specified key.
+ */
+SplayTree.prototype.find = function(key) {
+ if (this.isEmpty()) {
+ return null;
+ }
+ this.splay_(key);
+ return this.root_.key == key ? this.root_ : null;
+};
+
+
+/**
+ * @return {SplayTree.Node} Node having the maximum key value.
+ */
+SplayTree.prototype.findMax = function(opt_startNode) {
+ if (this.isEmpty()) {
+ return null;
+ }
+ var current = opt_startNode || this.root_;
+ while (current.right) {
+ current = current.right;
+ }
+ return current;
+};
+
+
+/**
+ * @return {SplayTree.Node} Node having the maximum key value that
+ * is less than the specified key value.
+ */
+SplayTree.prototype.findGreatestLessThan = function(key) {
+ if (this.isEmpty()) {
+ return null;
+ }
+ // Splay on the key to move the node with the given key or the last
+ // node on the search path to the top of the tree.
+ this.splay_(key);
+ // Now the result is either the root node or the greatest node in
+ // the left subtree.
+ if (this.root_.key < key) {
+ return this.root_;
+ } else if (this.root_.left) {
+ return this.findMax(this.root_.left);
+ } else {
+ return null;
+ }
+};
+
+
+/**
+ * @return {Array<*>} An array containing all the keys of tree's nodes.
+ */
+SplayTree.prototype.exportKeys = function() {
+ var result = [];
+ if (!this.isEmpty()) {
+ this.root_.traverse_(function(node) { result.push(node.key); });
+ }
+ return result;
+};
+
+
+/**
+ * Perform the splay operation for the given key. Moves the node with
+ * the given key to the top of the tree. If no node has the given
+ * key, the last node on the search path is moved to the top of the
+ * tree. This is the simplified top-down splaying algorithm from:
+ * "Self-adjusting Binary Search Trees" by Sleator and Tarjan
+ *
+ * @param {number} key Key to splay the tree on.
+ * @private
+ */
+SplayTree.prototype.splay_ = function(key) {
+ if (this.isEmpty()) {
+ return;
+ }
+ // Create a dummy node. The use of the dummy node is a bit
+ // counter-intuitive: The right child of the dummy node will hold
+ // the L tree of the algorithm. The left child of the dummy node
+ // will hold the R tree of the algorithm. Using a dummy node, left
+ // and right will always be nodes and we avoid special cases.
+ var dummy, left, right;
+ dummy = left = right = new SplayTree.Node(null, null);
+ var current = this.root_;
+ while (true) {
+ if (key < current.key) {
+ if (!current.left) {
+ break;
+ }
+ if (key < current.left.key) {
+ // Rotate right.
+ var tmp = current.left;
+ current.left = tmp.right;
+ tmp.right = current;
+ current = tmp;
+ if (!current.left) {
+ break;
+ }
+ }
+ // Link right.
+ right.left = current;
+ right = current;
+ current = current.left;
+ } else if (key > current.key) {
+ if (!current.right) {
+ break;
+ }
+ if (key > current.right.key) {
+ // Rotate left.
+ var tmp = current.right;
+ current.right = tmp.left;
+ tmp.left = current;
+ current = tmp;
+ if (!current.right) {
+ break;
+ }
+ }
+ // Link left.
+ left.right = current;
+ left = current;
+ current = current.right;
+ } else {
+ break;
+ }
+ }
+ // Assemble.
+ left.right = current.left;
+ right.left = current.right;
+ current.left = dummy.right;
+ current.right = dummy.left;
+ this.root_ = current;
+};
+
+
+/**
+ * Constructs a Splay tree node.
+ *
+ * @param {number} key Key.
+ * @param {*} value Value.
+ */
+SplayTree.Node = function(key, value) {
+ this.key = key;
+ this.value = value;
+};
+
+
+/**
+ * @type {SplayTree.Node}
+ */
+SplayTree.Node.prototype.left = null;
+
+
+/**
+ * @type {SplayTree.Node}
+ */
+SplayTree.Node.prototype.right = null;
+
+
+/**
+ * Performs an ordered traversal of the subtree starting at
+ * this SplayTree.Node.
+ *
+ * @param {function(SplayTree.Node)} f Visitor function.
+ * @private
+ */
+SplayTree.Node.prototype.traverse_ = function(f) {
+ var current = this;
+ while (current) {
+ var left = current.left;
+ if (left) left.traverse_(f);
+ f(current);
+ current = current.right;
+ }
+};
diff --git a/js/src/octane/typescript-compiler.js b/js/src/octane/typescript-compiler.js
new file mode 100644
index 0000000000..03ba71c97d
--- /dev/null
+++ b/js/src/octane/typescript-compiler.js
@@ -0,0 +1,25745 @@
+var TypeScript;
+(function (TypeScript) {
+ function hasFlag(val, flag) {
+ return (val & flag) != 0;
+ }
+ TypeScript.hasFlag = hasFlag;
+ (function (ErrorRecoverySet) {
+ ErrorRecoverySet._map = [];
+ ErrorRecoverySet.None = 0;
+ ErrorRecoverySet.Comma = 1;
+ ErrorRecoverySet.SColon = 1 << 1;
+ ErrorRecoverySet.Asg = 1 << 2;
+ ErrorRecoverySet.BinOp = 1 << 3;
+ ErrorRecoverySet.RBrack = 1 << 4;
+ ErrorRecoverySet.RCurly = 1 << 5;
+ ErrorRecoverySet.RParen = 1 << 6;
+ ErrorRecoverySet.Dot = 1 << 7;
+ ErrorRecoverySet.Colon = 1 << 8;
+ ErrorRecoverySet.PrimType = 1 << 9;
+ ErrorRecoverySet.AddOp = 1 << 10;
+ ErrorRecoverySet.LCurly = 1 << 11;
+ ErrorRecoverySet.PreOp = 1 << 12;
+ ErrorRecoverySet.RegExp = 1 << 13;
+ ErrorRecoverySet.LParen = 1 << 14;
+ ErrorRecoverySet.LBrack = 1 << 15;
+ ErrorRecoverySet.Scope = 1 << 16;
+ ErrorRecoverySet.In = 1 << 17;
+ ErrorRecoverySet.SCase = 1 << 18;
+ ErrorRecoverySet.Else = 1 << 19;
+ ErrorRecoverySet.Catch = 1 << 20;
+ ErrorRecoverySet.Var = 1 << 21;
+ ErrorRecoverySet.Stmt = 1 << 22;
+ ErrorRecoverySet.While = 1 << 23;
+ ErrorRecoverySet.ID = 1 << 24;
+ ErrorRecoverySet.Prefix = 1 << 25;
+ ErrorRecoverySet.Literal = 1 << 26;
+ ErrorRecoverySet.RLit = 1 << 27;
+ ErrorRecoverySet.Func = 1 << 28;
+ ErrorRecoverySet.EOF = 1 << 29;
+ ErrorRecoverySet.TypeScriptS = 1 << 30;
+ ErrorRecoverySet.ExprStart = ErrorRecoverySet.SColon | ErrorRecoverySet.AddOp | ErrorRecoverySet.LCurly | ErrorRecoverySet.PreOp | ErrorRecoverySet.RegExp | ErrorRecoverySet.LParen | ErrorRecoverySet.LBrack | ErrorRecoverySet.ID | ErrorRecoverySet.Prefix | ErrorRecoverySet.RLit | ErrorRecoverySet.Func | ErrorRecoverySet.Literal;
+ ErrorRecoverySet.StmtStart = ErrorRecoverySet.ExprStart | ErrorRecoverySet.SColon | ErrorRecoverySet.Var | ErrorRecoverySet.Stmt | ErrorRecoverySet.While | ErrorRecoverySet.TypeScriptS;
+ ErrorRecoverySet.Postfix = ErrorRecoverySet.Dot | ErrorRecoverySet.LParen | ErrorRecoverySet.LBrack;
+ })(TypeScript.ErrorRecoverySet || (TypeScript.ErrorRecoverySet = {}));
+ var ErrorRecoverySet = TypeScript.ErrorRecoverySet;
+ (function (AllowedElements) {
+ AllowedElements._map = [];
+ AllowedElements.None = 0;
+ AllowedElements.ModuleDeclarations = 1 << 2;
+ AllowedElements.ClassDeclarations = 1 << 3;
+ AllowedElements.InterfaceDeclarations = 1 << 4;
+ AllowedElements.AmbientDeclarations = 1 << 10;
+ AllowedElements.Properties = 1 << 11;
+ AllowedElements.Global = AllowedElements.ModuleDeclarations | AllowedElements.ClassDeclarations | AllowedElements.InterfaceDeclarations | AllowedElements.AmbientDeclarations;
+ AllowedElements.QuickParse = AllowedElements.Global | AllowedElements.Properties;
+ })(TypeScript.AllowedElements || (TypeScript.AllowedElements = {}));
+ var AllowedElements = TypeScript.AllowedElements;
+ (function (Modifiers) {
+ Modifiers._map = [];
+ Modifiers.None = 0;
+ Modifiers.Private = 1;
+ Modifiers.Public = 1 << 1;
+ Modifiers.Readonly = 1 << 2;
+ Modifiers.Ambient = 1 << 3;
+ Modifiers.Exported = 1 << 4;
+ Modifiers.Getter = 1 << 5;
+ Modifiers.Setter = 1 << 6;
+ Modifiers.Static = 1 << 7;
+ })(TypeScript.Modifiers || (TypeScript.Modifiers = {}));
+ var Modifiers = TypeScript.Modifiers;
+ (function (ASTFlags) {
+ ASTFlags._map = [];
+ ASTFlags.None = 0;
+ ASTFlags.ExplicitSemicolon = 1;
+ ASTFlags.AutomaticSemicolon = 1 << 1;
+ ASTFlags.Writeable = 1 << 2;
+ ASTFlags.Error = 1 << 3;
+ ASTFlags.DotLHSPartial = 1 << 4;
+ ASTFlags.DotLHS = 1 << 5;
+ ASTFlags.IsStatement = 1 << 6;
+ ASTFlags.StrictMode = 1 << 7;
+ ASTFlags.PossibleOptionalParameter = 1 << 8;
+ ASTFlags.ClassBaseConstructorCall = 1 << 9;
+ ASTFlags.OptionalName = 1 << 10;
+ ASTFlags.SkipNextRParen = 1 << 11;
+ })(TypeScript.ASTFlags || (TypeScript.ASTFlags = {}));
+ var ASTFlags = TypeScript.ASTFlags;
+ (function (DeclFlags) {
+ DeclFlags._map = [];
+ DeclFlags.None = 0;
+ DeclFlags.Exported = 1;
+ DeclFlags.Private = 1 << 1;
+ DeclFlags.Public = 1 << 2;
+ DeclFlags.Ambient = 1 << 3;
+ DeclFlags.Static = 1 << 4;
+ DeclFlags.LocalStatic = 1 << 5;
+ DeclFlags.GetAccessor = 1 << 6;
+ DeclFlags.SetAccessor = 1 << 7;
+ })(TypeScript.DeclFlags || (TypeScript.DeclFlags = {}));
+ var DeclFlags = TypeScript.DeclFlags;
+ (function (ModuleFlags) {
+ ModuleFlags._map = [];
+ ModuleFlags.None = 0;
+ ModuleFlags.Exported = 1;
+ ModuleFlags.Private = 1 << 1;
+ ModuleFlags.Public = 1 << 2;
+ ModuleFlags.Ambient = 1 << 3;
+ ModuleFlags.Static = 1 << 4;
+ ModuleFlags.LocalStatic = 1 << 5;
+ ModuleFlags.GetAccessor = 1 << 6;
+ ModuleFlags.SetAccessor = 1 << 7;
+ ModuleFlags.IsEnum = 1 << 8;
+ ModuleFlags.ShouldEmitModuleDecl = 1 << 9;
+ ModuleFlags.IsWholeFile = 1 << 10;
+ ModuleFlags.IsDynamic = 1 << 11;
+ ModuleFlags.MustCaptureThis = 1 << 12;
+ })(TypeScript.ModuleFlags || (TypeScript.ModuleFlags = {}));
+ var ModuleFlags = TypeScript.ModuleFlags;
+ (function (SymbolFlags) {
+ SymbolFlags._map = [];
+ SymbolFlags.None = 0;
+ SymbolFlags.Exported = 1;
+ SymbolFlags.Private = 1 << 1;
+ SymbolFlags.Public = 1 << 2;
+ SymbolFlags.Ambient = 1 << 3;
+ SymbolFlags.Static = 1 << 4;
+ SymbolFlags.LocalStatic = 1 << 5;
+ SymbolFlags.GetAccessor = 1 << 6;
+ SymbolFlags.SetAccessor = 1 << 7;
+ SymbolFlags.Property = 1 << 8;
+ SymbolFlags.Readonly = 1 << 9;
+ SymbolFlags.ModuleMember = 1 << 10;
+ SymbolFlags.InterfaceMember = 1 << 11;
+ SymbolFlags.ClassMember = 1 << 12;
+ SymbolFlags.BuiltIn = 1 << 13;
+ SymbolFlags.TypeSetDuringScopeAssignment = 1 << 14;
+ SymbolFlags.Constant = 1 << 15;
+ SymbolFlags.Optional = 1 << 16;
+ SymbolFlags.RecursivelyReferenced = 1 << 17;
+ SymbolFlags.Bound = 1 << 18;
+ SymbolFlags.CompilerGenerated = 1 << 19;
+ })(TypeScript.SymbolFlags || (TypeScript.SymbolFlags = {}));
+ var SymbolFlags = TypeScript.SymbolFlags;
+ (function (VarFlags) {
+ VarFlags._map = [];
+ VarFlags.None = 0;
+ VarFlags.Exported = 1;
+ VarFlags.Private = 1 << 1;
+ VarFlags.Public = 1 << 2;
+ VarFlags.Ambient = 1 << 3;
+ VarFlags.Static = 1 << 4;
+ VarFlags.LocalStatic = 1 << 5;
+ VarFlags.GetAccessor = 1 << 6;
+ VarFlags.SetAccessor = 1 << 7;
+ VarFlags.AutoInit = 1 << 8;
+ VarFlags.Property = 1 << 9;
+ VarFlags.Readonly = 1 << 10;
+ VarFlags.Class = 1 << 11;
+ VarFlags.ClassProperty = 1 << 12;
+ VarFlags.ClassBodyProperty = 1 << 13;
+ VarFlags.ClassConstructorProperty = 1 << 14;
+ VarFlags.ClassSuperMustBeFirstCallInConstructor = 1 << 15;
+ VarFlags.Constant = 1 << 16;
+ VarFlags.MustCaptureThis = 1 << 17;
+ })(TypeScript.VarFlags || (TypeScript.VarFlags = {}));
+ var VarFlags = TypeScript.VarFlags;
+ (function (FncFlags) {
+ FncFlags._map = [];
+ FncFlags.None = 0;
+ FncFlags.Exported = 1;
+ FncFlags.Private = 1 << 1;
+ FncFlags.Public = 1 << 2;
+ FncFlags.Ambient = 1 << 3;
+ FncFlags.Static = 1 << 4;
+ FncFlags.LocalStatic = 1 << 5;
+ FncFlags.GetAccessor = 1 << 6;
+ FncFlags.SetAccessor = 1 << 7;
+ FncFlags.Definition = 1 << 8;
+ FncFlags.Signature = 1 << 9;
+ FncFlags.Method = 1 << 10;
+ FncFlags.HasReturnExpression = 1 << 11;
+ FncFlags.CallMember = 1 << 12;
+ FncFlags.ConstructMember = 1 << 13;
+ FncFlags.HasSelfReference = 1 << 14;
+ FncFlags.IsFatArrowFunction = 1 << 15;
+ FncFlags.IndexerMember = 1 << 16;
+ FncFlags.IsFunctionExpression = 1 << 17;
+ FncFlags.ClassMethod = 1 << 18;
+ FncFlags.ClassPropertyMethodExported = 1 << 19;
+ FncFlags.HasSuperReferenceInFatArrowFunction = 1 << 20;
+ FncFlags.IsPropertyBound = 1 << 21;
+ })(TypeScript.FncFlags || (TypeScript.FncFlags = {}));
+ var FncFlags = TypeScript.FncFlags;
+ (function (SignatureFlags) {
+ SignatureFlags._map = [];
+ SignatureFlags.None = 0;
+ SignatureFlags.IsIndexer = 1;
+ SignatureFlags.IsStringIndexer = 1 << 1;
+ SignatureFlags.IsNumberIndexer = 1 << 2;
+ })(TypeScript.SignatureFlags || (TypeScript.SignatureFlags = {}));
+ var SignatureFlags = TypeScript.SignatureFlags;
+ function ToDeclFlags(fncOrVarOrSymbolOrModuleFlags) {
+ return fncOrVarOrSymbolOrModuleFlags;
+ }
+ TypeScript.ToDeclFlags = ToDeclFlags;
+ (function (TypeFlags) {
+ TypeFlags._map = [];
+ TypeFlags.None = 0;
+ TypeFlags.HasImplementation = 1;
+ TypeFlags.HasSelfReference = 1 << 1;
+ TypeFlags.MergeResult = 1 << 2;
+ TypeFlags.IsEnum = 1 << 3;
+ TypeFlags.BuildingName = 1 << 4;
+ TypeFlags.HasBaseType = 1 << 5;
+ TypeFlags.HasBaseTypeOfObject = 1 << 6;
+ TypeFlags.IsClass = 1 << 7;
+ })(TypeScript.TypeFlags || (TypeScript.TypeFlags = {}));
+ var TypeFlags = TypeScript.TypeFlags;
+ (function (TypeRelationshipFlags) {
+ TypeRelationshipFlags._map = [];
+ TypeRelationshipFlags.SuccessfulComparison = 0;
+ TypeRelationshipFlags.SourceIsNullTargetIsVoidOrUndefined = 1;
+ TypeRelationshipFlags.RequiredPropertyIsMissing = 1 << 1;
+ TypeRelationshipFlags.IncompatibleSignatures = 1 << 2;
+ TypeRelationshipFlags.SourceSignatureHasTooManyParameters = 3;
+ TypeRelationshipFlags.IncompatibleReturnTypes = 1 << 4;
+ TypeRelationshipFlags.IncompatiblePropertyTypes = 1 << 5;
+ TypeRelationshipFlags.IncompatibleParameterTypes = 1 << 6;
+ })(TypeScript.TypeRelationshipFlags || (TypeScript.TypeRelationshipFlags = {}));
+ var TypeRelationshipFlags = TypeScript.TypeRelationshipFlags;
+ (function (CodeGenTarget) {
+ CodeGenTarget._map = [];
+ CodeGenTarget.ES3 = 0;
+ CodeGenTarget.ES5 = 1;
+ })(TypeScript.CodeGenTarget || (TypeScript.CodeGenTarget = {}));
+ var CodeGenTarget = TypeScript.CodeGenTarget;
+ (function (ModuleGenTarget) {
+ ModuleGenTarget._map = [];
+ ModuleGenTarget.Synchronous = 0;
+ ModuleGenTarget.Asynchronous = 1;
+ ModuleGenTarget.Local = 1 << 1;
+ })(TypeScript.ModuleGenTarget || (TypeScript.ModuleGenTarget = {}));
+ var ModuleGenTarget = TypeScript.ModuleGenTarget;
+ TypeScript.codeGenTarget = CodeGenTarget.ES3;
+ TypeScript.moduleGenTarget = ModuleGenTarget.Synchronous;
+ TypeScript.optimizeModuleCodeGen = true;
+ function flagsToString(e, flags) {
+ var builder = "";
+ for(var i = 1; i < (1 << 31); i = i << 1) {
+ if((flags & i) != 0) {
+ for(var k in e) {
+ if(e[k] == i) {
+ if(builder.length > 0) {
+ builder += "|";
+ }
+ builder += k;
+ break;
+ }
+ }
+ }
+ }
+ return builder;
+ }
+ TypeScript.flagsToString = flagsToString;
+})(TypeScript || (TypeScript = {}));
+var TypeScript;
+(function (TypeScript) {
+ (function (NodeType) {
+ NodeType._map = [];
+ NodeType._map[0] = "None";
+ NodeType.None = 0;
+ NodeType._map[1] = "Empty";
+ NodeType.Empty = 1;
+ NodeType._map[2] = "EmptyExpr";
+ NodeType.EmptyExpr = 2;
+ NodeType._map[3] = "True";
+ NodeType.True = 3;
+ NodeType._map[4] = "False";
+ NodeType.False = 4;
+ NodeType._map[5] = "This";
+ NodeType.This = 5;
+ NodeType._map[6] = "Super";
+ NodeType.Super = 6;
+ NodeType._map[7] = "QString";
+ NodeType.QString = 7;
+ NodeType._map[8] = "Regex";
+ NodeType.Regex = 8;
+ NodeType._map[9] = "Null";
+ NodeType.Null = 9;
+ NodeType._map[10] = "ArrayLit";
+ NodeType.ArrayLit = 10;
+ NodeType._map[11] = "ObjectLit";
+ NodeType.ObjectLit = 11;
+ NodeType._map[12] = "Void";
+ NodeType.Void = 12;
+ NodeType._map[13] = "Comma";
+ NodeType.Comma = 13;
+ NodeType._map[14] = "Pos";
+ NodeType.Pos = 14;
+ NodeType._map[15] = "Neg";
+ NodeType.Neg = 15;
+ NodeType._map[16] = "Delete";
+ NodeType.Delete = 16;
+ NodeType._map[17] = "Await";
+ NodeType.Await = 17;
+ NodeType._map[18] = "In";
+ NodeType.In = 18;
+ NodeType._map[19] = "Dot";
+ NodeType.Dot = 19;
+ NodeType._map[20] = "From";
+ NodeType.From = 20;
+ NodeType._map[21] = "Is";
+ NodeType.Is = 21;
+ NodeType._map[22] = "InstOf";
+ NodeType.InstOf = 22;
+ NodeType._map[23] = "Typeof";
+ NodeType.Typeof = 23;
+ NodeType._map[24] = "NumberLit";
+ NodeType.NumberLit = 24;
+ NodeType._map[25] = "Name";
+ NodeType.Name = 25;
+ NodeType._map[26] = "TypeRef";
+ NodeType.TypeRef = 26;
+ NodeType._map[27] = "Index";
+ NodeType.Index = 27;
+ NodeType._map[28] = "Call";
+ NodeType.Call = 28;
+ NodeType._map[29] = "New";
+ NodeType.New = 29;
+ NodeType._map[30] = "Asg";
+ NodeType.Asg = 30;
+ NodeType._map[31] = "AsgAdd";
+ NodeType.AsgAdd = 31;
+ NodeType._map[32] = "AsgSub";
+ NodeType.AsgSub = 32;
+ NodeType._map[33] = "AsgDiv";
+ NodeType.AsgDiv = 33;
+ NodeType._map[34] = "AsgMul";
+ NodeType.AsgMul = 34;
+ NodeType._map[35] = "AsgMod";
+ NodeType.AsgMod = 35;
+ NodeType._map[36] = "AsgAnd";
+ NodeType.AsgAnd = 36;
+ NodeType._map[37] = "AsgXor";
+ NodeType.AsgXor = 37;
+ NodeType._map[38] = "AsgOr";
+ NodeType.AsgOr = 38;
+ NodeType._map[39] = "AsgLsh";
+ NodeType.AsgLsh = 39;
+ NodeType._map[40] = "AsgRsh";
+ NodeType.AsgRsh = 40;
+ NodeType._map[41] = "AsgRs2";
+ NodeType.AsgRs2 = 41;
+ NodeType._map[42] = "ConditionalExpression";
+ NodeType.ConditionalExpression = 42;
+ NodeType._map[43] = "LogOr";
+ NodeType.LogOr = 43;
+ NodeType._map[44] = "LogAnd";
+ NodeType.LogAnd = 44;
+ NodeType._map[45] = "Or";
+ NodeType.Or = 45;
+ NodeType._map[46] = "Xor";
+ NodeType.Xor = 46;
+ NodeType._map[47] = "And";
+ NodeType.And = 47;
+ NodeType._map[48] = "Eq";
+ NodeType.Eq = 48;
+ NodeType._map[49] = "Ne";
+ NodeType.Ne = 49;
+ NodeType._map[50] = "Eqv";
+ NodeType.Eqv = 50;
+ NodeType._map[51] = "NEqv";
+ NodeType.NEqv = 51;
+ NodeType._map[52] = "Lt";
+ NodeType.Lt = 52;
+ NodeType._map[53] = "Le";
+ NodeType.Le = 53;
+ NodeType._map[54] = "Gt";
+ NodeType.Gt = 54;
+ NodeType._map[55] = "Ge";
+ NodeType.Ge = 55;
+ NodeType._map[56] = "Add";
+ NodeType.Add = 56;
+ NodeType._map[57] = "Sub";
+ NodeType.Sub = 57;
+ NodeType._map[58] = "Mul";
+ NodeType.Mul = 58;
+ NodeType._map[59] = "Div";
+ NodeType.Div = 59;
+ NodeType._map[60] = "Mod";
+ NodeType.Mod = 60;
+ NodeType._map[61] = "Lsh";
+ NodeType.Lsh = 61;
+ NodeType._map[62] = "Rsh";
+ NodeType.Rsh = 62;
+ NodeType._map[63] = "Rs2";
+ NodeType.Rs2 = 63;
+ NodeType._map[64] = "Not";
+ NodeType.Not = 64;
+ NodeType._map[65] = "LogNot";
+ NodeType.LogNot = 65;
+ NodeType._map[66] = "IncPre";
+ NodeType.IncPre = 66;
+ NodeType._map[67] = "DecPre";
+ NodeType.DecPre = 67;
+ NodeType._map[68] = "IncPost";
+ NodeType.IncPost = 68;
+ NodeType._map[69] = "DecPost";
+ NodeType.DecPost = 69;
+ NodeType._map[70] = "TypeAssertion";
+ NodeType.TypeAssertion = 70;
+ NodeType._map[71] = "FuncDecl";
+ NodeType.FuncDecl = 71;
+ NodeType._map[72] = "Member";
+ NodeType.Member = 72;
+ NodeType._map[73] = "VarDecl";
+ NodeType.VarDecl = 73;
+ NodeType._map[74] = "ArgDecl";
+ NodeType.ArgDecl = 74;
+ NodeType._map[75] = "Return";
+ NodeType.Return = 75;
+ NodeType._map[76] = "Break";
+ NodeType.Break = 76;
+ NodeType._map[77] = "Continue";
+ NodeType.Continue = 77;
+ NodeType._map[78] = "Throw";
+ NodeType.Throw = 78;
+ NodeType._map[79] = "For";
+ NodeType.For = 79;
+ NodeType._map[80] = "ForIn";
+ NodeType.ForIn = 80;
+ NodeType._map[81] = "If";
+ NodeType.If = 81;
+ NodeType._map[82] = "While";
+ NodeType.While = 82;
+ NodeType._map[83] = "DoWhile";
+ NodeType.DoWhile = 83;
+ NodeType._map[84] = "Block";
+ NodeType.Block = 84;
+ NodeType._map[85] = "Case";
+ NodeType.Case = 85;
+ NodeType._map[86] = "Switch";
+ NodeType.Switch = 86;
+ NodeType._map[87] = "Try";
+ NodeType.Try = 87;
+ NodeType._map[88] = "TryCatch";
+ NodeType.TryCatch = 88;
+ NodeType._map[89] = "TryFinally";
+ NodeType.TryFinally = 89;
+ NodeType._map[90] = "Finally";
+ NodeType.Finally = 90;
+ NodeType._map[91] = "Catch";
+ NodeType.Catch = 91;
+ NodeType._map[92] = "List";
+ NodeType.List = 92;
+ NodeType._map[93] = "Script";
+ NodeType.Script = 93;
+ NodeType._map[94] = "ClassDeclaration";
+ NodeType.ClassDeclaration = 94;
+ NodeType._map[95] = "InterfaceDeclaration";
+ NodeType.InterfaceDeclaration = 95;
+ NodeType._map[96] = "ModuleDeclaration";
+ NodeType.ModuleDeclaration = 96;
+ NodeType._map[97] = "ImportDeclaration";
+ NodeType.ImportDeclaration = 97;
+ NodeType._map[98] = "With";
+ NodeType.With = 98;
+ NodeType._map[99] = "Label";
+ NodeType.Label = 99;
+ NodeType._map[100] = "LabeledStatement";
+ NodeType.LabeledStatement = 100;
+ NodeType._map[101] = "EBStart";
+ NodeType.EBStart = 101;
+ NodeType._map[102] = "GotoEB";
+ NodeType.GotoEB = 102;
+ NodeType._map[103] = "EndCode";
+ NodeType.EndCode = 103;
+ NodeType._map[104] = "Error";
+ NodeType.Error = 104;
+ NodeType._map[105] = "Comment";
+ NodeType.Comment = 105;
+ NodeType._map[106] = "Debugger";
+ NodeType.Debugger = 106;
+ NodeType.GeneralNode = NodeType.FuncDecl;
+ NodeType.LastAsg = NodeType.AsgRs2;
+ })(TypeScript.NodeType || (TypeScript.NodeType = {}));
+ var NodeType = TypeScript.NodeType;
+})(TypeScript || (TypeScript = {}));
+var TypeScript;
+(function (TypeScript) {
+ var BlockIntrinsics = (function () {
+ function BlockIntrinsics() {
+ this.prototype = undefined;
+ this.toString = undefined;
+ this.toLocaleString = undefined;
+ this.valueOf = undefined;
+ this.hasOwnProperty = undefined;
+ this.propertyIsEnumerable = undefined;
+ this.isPrototypeOf = undefined;
+ this["constructor"] = undefined;
+ }
+ return BlockIntrinsics;
+ })();
+ TypeScript.BlockIntrinsics = BlockIntrinsics;
+ var StringHashTable = (function () {
+ function StringHashTable() {
+ this.itemCount = 0;
+ this.table = (new BlockIntrinsics());
+ }
+ StringHashTable.prototype.getAllKeys = function () {
+ var result = [];
+ for(var k in this.table) {
+ if(this.table[k] != undefined) {
+ result[result.length] = k;
+ }
+ }
+ return result;
+ };
+ StringHashTable.prototype.add = function (key, data) {
+ if(this.table[key] != undefined) {
+ return false;
+ }
+ this.table[key] = data;
+ this.itemCount++;
+ return true;
+ };
+ StringHashTable.prototype.addOrUpdate = function (key, data) {
+ if(this.table[key] != undefined) {
+ this.table[key] = data;
+ return false;
+ }
+ this.table[key] = data;
+ this.itemCount++;
+ return true;
+ };
+ StringHashTable.prototype.map = function (fn, context) {
+ for(var k in this.table) {
+ var data = this.table[k];
+ if(data != undefined) {
+ fn(k, this.table[k], context);
+ }
+ }
+ };
+ StringHashTable.prototype.every = function (fn, context) {
+ for(var k in this.table) {
+ var data = this.table[k];
+ if(data != undefined) {
+ if(!fn(k, this.table[k], context)) {
+ return false;
+ }
+ }
+ }
+ return true;
+ };
+ StringHashTable.prototype.some = function (fn, context) {
+ for(var k in this.table) {
+ var data = this.table[k];
+ if(data != undefined) {
+ if(fn(k, this.table[k], context)) {
+ return true;
+ }
+ }
+ }
+ return false;
+ };
+ StringHashTable.prototype.count = function () {
+ return this.itemCount;
+ };
+ StringHashTable.prototype.lookup = function (key) {
+ var data = this.table[key];
+ if(data != undefined) {
+ return data;
+ } else {
+ return (null);
+ }
+ };
+ return StringHashTable;
+ })();
+ TypeScript.StringHashTable = StringHashTable;
+ var DualStringHashTable = (function () {
+ function DualStringHashTable(primaryTable, secondaryTable) {
+ this.primaryTable = primaryTable;
+ this.secondaryTable = secondaryTable;
+ this.insertPrimary = true;
+ }
+ DualStringHashTable.prototype.getAllKeys = function () {
+ return this.primaryTable.getAllKeys().concat(this.secondaryTable.getAllKeys());
+ };
+ DualStringHashTable.prototype.add = function (key, data) {
+ if(this.insertPrimary) {
+ return this.primaryTable.add(key, data);
+ } else {
+ return this.secondaryTable.add(key, data);
+ }
+ };
+ DualStringHashTable.prototype.addOrUpdate = function (key, data) {
+ if(this.insertPrimary) {
+ return this.primaryTable.addOrUpdate(key, data);
+ } else {
+ return this.secondaryTable.addOrUpdate(key, data);
+ }
+ };
+ DualStringHashTable.prototype.map = function (fn, context) {
+ this.primaryTable.map(fn, context);
+ this.secondaryTable.map(fn, context);
+ };
+ DualStringHashTable.prototype.every = function (fn, context) {
+ return this.primaryTable.every(fn, context) && this.secondaryTable.every(fn, context);
+ };
+ DualStringHashTable.prototype.some = function (fn, context) {
+ return this.primaryTable.some(fn, context) || this.secondaryTable.some(fn, context);
+ };
+ DualStringHashTable.prototype.count = function () {
+ return this.primaryTable.count() + this.secondaryTable.count();
+ };
+ DualStringHashTable.prototype.lookup = function (key) {
+ var data = this.primaryTable.lookup(key);
+ if(data != undefined) {
+ return data;
+ } else {
+ return this.secondaryTable.lookup(key);
+ }
+ };
+ return DualStringHashTable;
+ })();
+ TypeScript.DualStringHashTable = DualStringHashTable;
+ function numberHashFn(key) {
+ var c2 = 668265261;
+ key = (key ^ 61) ^ (key >>> 16);
+ key = key + (key << 3);
+ key = key ^ (key >>> 4);
+ key = key * c2;
+ key = key ^ (key >>> 15);
+ return key;
+ }
+ TypeScript.numberHashFn = numberHashFn;
+ function combineHashes(key1, key2) {
+ return key2 ^ ((key1 >> 5) + key1);
+ }
+ TypeScript.combineHashes = combineHashes;
+ var HashEntry = (function () {
+ function HashEntry(key, data) {
+ this.key = key;
+ this.data = data;
+ }
+ return HashEntry;
+ })();
+ TypeScript.HashEntry = HashEntry;
+ var HashTable = (function () {
+ function HashTable(size, hashFn, equalsFn) {
+ this.size = size;
+ this.hashFn = hashFn;
+ this.equalsFn = equalsFn;
+ this.itemCount = 0;
+ this.table = new Array();
+ for(var i = 0; i < this.size; i++) {
+ this.table[i] = null;
+ }
+ }
+ HashTable.prototype.add = function (key, data) {
+ var current;
+ var entry = new HashEntry(key, data);
+ var val = this.hashFn(key);
+ val = val % this.size;
+ for(current = this.table[val]; current != null; current = current.next) {
+ if(this.equalsFn(key, current.key)) {
+ return false;
+ }
+ }
+ entry.next = this.table[val];
+ this.table[val] = entry;
+ this.itemCount++;
+ return true;
+ };
+ HashTable.prototype.remove = function (key) {
+ var current;
+ var val = this.hashFn(key);
+ val = val % this.size;
+ var result = null;
+ var prevEntry = null;
+ for(current = this.table[val]; current != null; current = current.next) {
+ if(this.equalsFn(key, current.key)) {
+ result = current.data;
+ this.itemCount--;
+ if(prevEntry) {
+ prevEntry.next = current.next;
+ } else {
+ this.table[val] = current.next;
+ }
+ break;
+ }
+ prevEntry = current;
+ }
+ return result;
+ };
+ HashTable.prototype.count = function () {
+ return this.itemCount;
+ };
+ HashTable.prototype.lookup = function (key) {
+ var current;
+ var val = this.hashFn(key);
+ val = val % this.size;
+ for(current = this.table[val]; current != null; current = current.next) {
+ if(this.equalsFn(key, current.key)) {
+ return (current.data);
+ }
+ }
+ return (null);
+ };
+ return HashTable;
+ })();
+ TypeScript.HashTable = HashTable;
+ var SimpleHashTable = (function () {
+ function SimpleHashTable() {
+ this.keys = [];
+ this.values = [];
+ }
+ SimpleHashTable.prototype.lookup = function (key, findValue) {
+ var searchArray = this.keys;
+ if(findValue) {
+ searchArray = this.values;
+ }
+ for(var i = 0; i < searchArray.length; i++) {
+ if(searchArray[i] == key) {
+ return {
+ key: this.keys[i],
+ data: this.values[i]
+ };
+ }
+ }
+ return null;
+ };
+ SimpleHashTable.prototype.add = function (key, data) {
+ var lookupData = this.lookup(key);
+ if(lookupData) {
+ return false;
+ }
+ this.keys[this.keys.length] = key;
+ this.values[this.values.length] = data;
+ return true;
+ };
+ return SimpleHashTable;
+ })();
+ TypeScript.SimpleHashTable = SimpleHashTable;
+})(TypeScript || (TypeScript = {}));
+var __extends = this.__extends || function (d, b) {
+ function __() { this.constructor = d; }
+ __.prototype = b.prototype;
+ d.prototype = new __();
+};
+var TypeScript;
+(function (TypeScript) {
+ var ASTSpan = (function () {
+ function ASTSpan() {
+ this.minChar = -1;
+ this.limChar = -1;
+ }
+ return ASTSpan;
+ })();
+ TypeScript.ASTSpan = ASTSpan;
+ var AST = (function (_super) {
+ __extends(AST, _super);
+ function AST(nodeType) {
+ _super.call(this);
+ this.nodeType = nodeType;
+ this.type = null;
+ this.flags = TypeScript.ASTFlags.Writeable;
+ this.passCreated = TypeScript.CompilerDiagnostics.analysisPass;
+ this.preComments = null;
+ this.postComments = null;
+ this.docComments = null;
+ this.isParenthesized = false;
+ }
+ AST.prototype.isExpression = function () {
+ return false;
+ };
+ AST.prototype.isStatementOrExpression = function () {
+ return false;
+ };
+ AST.prototype.isCompoundStatement = function () {
+ return false;
+ };
+ AST.prototype.isLeaf = function () {
+ return this.isStatementOrExpression() && (!this.isCompoundStatement());
+ };
+ AST.prototype.isDeclaration = function () {
+ return false;
+ };
+ AST.prototype.typeCheck = function (typeFlow) {
+ switch(this.nodeType) {
+ case TypeScript.NodeType.Error:
+ case TypeScript.NodeType.EmptyExpr: {
+ this.type = typeFlow.anyType;
+ break;
+
+ }
+ case TypeScript.NodeType.This: {
+ return typeFlow.typeCheckThis(this);
+
+ }
+ case TypeScript.NodeType.Null: {
+ this.type = typeFlow.nullType;
+ break;
+
+ }
+ case TypeScript.NodeType.False:
+ case TypeScript.NodeType.True: {
+ this.type = typeFlow.booleanType;
+ break;
+
+ }
+ case TypeScript.NodeType.Super: {
+ return typeFlow.typeCheckSuper(this);
+
+ }
+ case TypeScript.NodeType.EndCode:
+ case TypeScript.NodeType.Empty:
+ case TypeScript.NodeType.Void: {
+ this.type = typeFlow.voidType;
+ break;
+
+ }
+ default: {
+ throw new Error("please implement in derived class");
+
+ }
+ }
+ return this;
+ };
+ AST.prototype.emit = function (emitter, tokenId, startLine) {
+ emitter.emitParensAndCommentsInPlace(this, true);
+ switch(this.nodeType) {
+ case TypeScript.NodeType.This: {
+ emitter.recordSourceMappingStart(this);
+ if(emitter.thisFnc && (TypeScript.hasFlag(emitter.thisFnc.fncFlags, TypeScript.FncFlags.IsFatArrowFunction))) {
+ emitter.writeToOutput("_this");
+ } else {
+ emitter.writeToOutput("this");
+ }
+ emitter.recordSourceMappingEnd(this);
+ break;
+
+ }
+ case TypeScript.NodeType.Null: {
+ emitter.recordSourceMappingStart(this);
+ emitter.writeToOutput("null");
+ emitter.recordSourceMappingEnd(this);
+ break;
+
+ }
+ case TypeScript.NodeType.False: {
+ emitter.recordSourceMappingStart(this);
+ emitter.writeToOutput("false");
+ emitter.recordSourceMappingEnd(this);
+ break;
+
+ }
+ case TypeScript.NodeType.True: {
+ emitter.recordSourceMappingStart(this);
+ emitter.writeToOutput("true");
+ emitter.recordSourceMappingEnd(this);
+ break;
+
+ }
+ case TypeScript.NodeType.Super: {
+ emitter.recordSourceMappingStart(this);
+ emitter.emitSuperReference();
+ emitter.recordSourceMappingEnd(this);
+ break;
+
+ }
+ case TypeScript.NodeType.EndCode:
+ case TypeScript.NodeType.Error:
+ case TypeScript.NodeType.EmptyExpr: {
+ break;
+
+ }
+ case TypeScript.NodeType.Empty: {
+ emitter.recordSourceMappingStart(this);
+ emitter.recordSourceMappingEnd(this);
+ break;
+
+ }
+ case TypeScript.NodeType.Void: {
+ emitter.recordSourceMappingStart(this);
+ emitter.writeToOutput("void ");
+ emitter.recordSourceMappingEnd(this);
+ break;
+
+ }
+ default: {
+ throw new Error("please implement in derived class");
+
+ }
+ }
+ emitter.emitParensAndCommentsInPlace(this, false);
+ };
+ AST.prototype.print = function (context) {
+ context.startLine();
+ var lineCol = {
+ line: -1,
+ col: -1
+ };
+ var limLineCol = {
+ line: -1,
+ col: -1
+ };
+ if(context.parser !== null) {
+ context.parser.getSourceLineCol(lineCol, this.minChar);
+ context.parser.getSourceLineCol(limLineCol, this.limChar);
+ context.write("(" + lineCol.line + "," + lineCol.col + ")--" + "(" + limLineCol.line + "," + limLineCol.col + "): ");
+ }
+ var lab = this.printLabel();
+ if(TypeScript.hasFlag(this.flags, TypeScript.ASTFlags.Error)) {
+ lab += " (Error)";
+ }
+ context.writeLine(lab);
+ };
+ AST.prototype.printLabel = function () {
+ if(TypeScript.nodeTypeTable[this.nodeType] !== undefined) {
+ return TypeScript.nodeTypeTable[this.nodeType];
+ } else {
+ return (TypeScript.NodeType)._map[this.nodeType];
+ }
+ };
+ AST.prototype.addToControlFlow = function (context) {
+ context.walker.options.goChildren = false;
+ context.addContent(this);
+ };
+ AST.prototype.netFreeUses = function (container, freeUses) {
+ };
+ AST.prototype.treeViewLabel = function () {
+ return (TypeScript.NodeType)._map[this.nodeType];
+ };
+ AST.getResolvedIdentifierName = function getResolvedIdentifierName(name) {
+ if(!name) {
+ return "";
+ }
+ var resolved = "";
+ var start = 0;
+ var i = 0;
+ while(i <= name.length - 6) {
+ if(name.charAt(i) == '\\' && name.charAt(i + 1) == 'u') {
+ var charCode = parseInt(name.substr(i + 2, 4), 16);
+ resolved += name.substr(start, i - start);
+ resolved += String.fromCharCode(charCode);
+ i += 6;
+ start = i;
+ continue;
+ }
+ i++;
+ }
+ resolved += name.substring(start);
+ return resolved;
+ }
+ AST.prototype.getDocComments = function () {
+ if(!this.isDeclaration() || !this.preComments || this.preComments.length == 0) {
+ return [];
+ }
+ if(!this.docComments) {
+ var preCommentsLength = this.preComments.length;
+ var docComments = [];
+ for(var i = preCommentsLength - 1; i >= 0; i--) {
+ if(this.preComments[i].isDocComment()) {
+ var prevDocComment = docComments.length > 0 ? docComments[docComments.length - 1] : null;
+ if(prevDocComment == null || (this.preComments[i].limLine == prevDocComment.minLine || this.preComments[i].limLine + 1 == prevDocComment.minLine)) {
+ docComments.push(this.preComments[i]);
+ continue;
+ }
+ }
+ break;
+ }
+ this.docComments = docComments.reverse();
+ }
+ return this.docComments;
+ };
+ return AST;
+ })(ASTSpan);
+ TypeScript.AST = AST;
+ var IncompleteAST = (function (_super) {
+ __extends(IncompleteAST, _super);
+ function IncompleteAST(min, lim) {
+ _super.call(this, TypeScript.NodeType.Error);
+ this.minChar = min;
+ this.limChar = lim;
+ }
+ return IncompleteAST;
+ })(AST);
+ TypeScript.IncompleteAST = IncompleteAST;
+ var ASTList = (function (_super) {
+ __extends(ASTList, _super);
+ function ASTList() {
+ _super.call(this, TypeScript.NodeType.List);
+ this.enclosingScope = null;
+ this.members = new Array();
+ }
+ ASTList.prototype.addToControlFlow = function (context) {
+ var len = this.members.length;
+ for(var i = 0; i < len; i++) {
+ if(context.noContinuation) {
+ context.addUnreachable(this.members[i]);
+ break;
+ } else {
+ this.members[i] = context.walk(this.members[i], this);
+ }
+ }
+ context.walker.options.goChildren = false;
+ };
+ ASTList.prototype.append = function (ast) {
+ this.members[this.members.length] = ast;
+ return this;
+ };
+ ASTList.prototype.appendAll = function (ast) {
+ if(ast.nodeType == TypeScript.NodeType.List) {
+ var list = ast;
+ for(var i = 0, len = list.members.length; i < len; i++) {
+ this.append(list.members[i]);
+ }
+ } else {
+ this.append(ast);
+ }
+ return this;
+ };
+ ASTList.prototype.emit = function (emitter, tokenId, startLine) {
+ emitter.recordSourceMappingStart(this);
+ emitter.emitJavascriptList(this, null, TypeScript.TokenID.Semicolon, startLine, false, false);
+ emitter.recordSourceMappingEnd(this);
+ };
+ ASTList.prototype.typeCheck = function (typeFlow) {
+ var len = this.members.length;
+ typeFlow.nestingLevel++;
+ for(var i = 0; i < len; i++) {
+ if(this.members[i]) {
+ this.members[i] = this.members[i].typeCheck(typeFlow);
+ }
+ }
+ typeFlow.nestingLevel--;
+ return this;
+ };
+ return ASTList;
+ })(AST);
+ TypeScript.ASTList = ASTList;
+ var Identifier = (function (_super) {
+ __extends(Identifier, _super);
+ function Identifier(actualText, hasEscapeSequence) {
+ _super.call(this, TypeScript.NodeType.Name);
+ this.actualText = actualText;
+ this.hasEscapeSequence = hasEscapeSequence;
+ this.sym = null;
+ this.cloId = -1;
+ this.setText(actualText, hasEscapeSequence);
+ }
+ Identifier.prototype.setText = function (actualText, hasEscapeSequence) {
+ this.actualText = actualText;
+ if(hasEscapeSequence) {
+ this.text = AST.getResolvedIdentifierName(actualText);
+ } else {
+ this.text = actualText;
+ }
+ };
+ Identifier.prototype.isMissing = function () {
+ return false;
+ };
+ Identifier.prototype.isLeaf = function () {
+ return true;
+ };
+ Identifier.prototype.treeViewLabel = function () {
+ return "id: " + this.actualText;
+ };
+ Identifier.prototype.printLabel = function () {
+ if(this.actualText) {
+ return "id: " + this.actualText;
+ } else {
+ return "name node";
+ }
+ };
+ Identifier.prototype.typeCheck = function (typeFlow) {
+ return typeFlow.typeCheckName(this);
+ };
+ Identifier.prototype.emit = function (emitter, tokenId, startLine) {
+ emitter.emitJavascriptName(this, true);
+ };
+ Identifier.fromToken = function fromToken(token) {
+ return new Identifier(token.getText(), (token).hasEscapeSequence);
+ }
+ return Identifier;
+ })(AST);
+ TypeScript.Identifier = Identifier;
+ var MissingIdentifier = (function (_super) {
+ __extends(MissingIdentifier, _super);
+ function MissingIdentifier() {
+ _super.call(this, "__missing");
+ }
+ MissingIdentifier.prototype.isMissing = function () {
+ return true;
+ };
+ MissingIdentifier.prototype.emit = function (emitter, tokenId, startLine) {
+ };
+ return MissingIdentifier;
+ })(Identifier);
+ TypeScript.MissingIdentifier = MissingIdentifier;
+ var Label = (function (_super) {
+ __extends(Label, _super);
+ function Label(id) {
+ _super.call(this, TypeScript.NodeType.Label);
+ this.id = id;
+ }
+ Label.prototype.printLabel = function () {
+ return this.id.actualText + ":";
+ };
+ Label.prototype.typeCheck = function (typeFlow) {
+ this.type = typeFlow.voidType;
+ return this;
+ };
+ Label.prototype.emit = function (emitter, tokenId, startLine) {
+ emitter.emitParensAndCommentsInPlace(this, true);
+ emitter.recordSourceMappingStart(this);
+ emitter.recordSourceMappingStart(this.id);
+ emitter.writeToOutput(this.id.actualText);
+ emitter.recordSourceMappingEnd(this.id);
+ emitter.writeLineToOutput(":");
+ emitter.recordSourceMappingEnd(this);
+ emitter.emitParensAndCommentsInPlace(this, false);
+ };
+ return Label;
+ })(AST);
+ TypeScript.Label = Label;
+ var Expression = (function (_super) {
+ __extends(Expression, _super);
+ function Expression(nodeType) {
+ _super.call(this, nodeType);
+ }
+ Expression.prototype.isExpression = function () {
+ return true;
+ };
+ Expression.prototype.isStatementOrExpression = function () {
+ return true;
+ };
+ return Expression;
+ })(AST);
+ TypeScript.Expression = Expression;
+ var UnaryExpression = (function (_super) {
+ __extends(UnaryExpression, _super);
+ function UnaryExpression(nodeType, operand) {
+ _super.call(this, nodeType);
+ this.operand = operand;
+ this.targetType = null;
+ this.castTerm = null;
+ }
+ UnaryExpression.prototype.addToControlFlow = function (context) {
+ _super.prototype.addToControlFlow.call(this, context);
+ if(this.nodeType == TypeScript.NodeType.Throw) {
+ context.returnStmt();
+ }
+ };
+ UnaryExpression.prototype.typeCheck = function (typeFlow) {
+ switch(this.nodeType) {
+ case TypeScript.NodeType.Not: {
+ return typeFlow.typeCheckBitNot(this);
+
+ }
+ case TypeScript.NodeType.LogNot: {
+ return typeFlow.typeCheckLogNot(this);
+
+ }
+ case TypeScript.NodeType.Pos:
+ case TypeScript.NodeType.Neg: {
+ return typeFlow.typeCheckUnaryNumberOperator(this);
+
+ }
+ case TypeScript.NodeType.IncPost:
+ case TypeScript.NodeType.IncPre:
+ case TypeScript.NodeType.DecPost:
+ case TypeScript.NodeType.DecPre: {
+ return typeFlow.typeCheckIncOrDec(this);
+
+ }
+ case TypeScript.NodeType.ArrayLit: {
+ typeFlow.typeCheckArrayLit(this);
+ return this;
+
+ }
+ case TypeScript.NodeType.ObjectLit: {
+ typeFlow.typeCheckObjectLit(this);
+ return this;
+
+ }
+ case TypeScript.NodeType.Throw: {
+ this.operand = typeFlow.typeCheck(this.operand);
+ this.type = typeFlow.voidType;
+ return this;
+
+ }
+ case TypeScript.NodeType.Typeof: {
+ this.operand = typeFlow.typeCheck(this.operand);
+ this.type = typeFlow.stringType;
+ return this;
+
+ }
+ case TypeScript.NodeType.Delete: {
+ this.operand = typeFlow.typeCheck(this.operand);
+ this.type = typeFlow.booleanType;
+ break;
+
+ }
+ case TypeScript.NodeType.TypeAssertion: {
+ this.castTerm = typeFlow.typeCheck(this.castTerm);
+ var applyTargetType = !this.operand.isParenthesized;
+ var targetType = applyTargetType ? this.castTerm.type : null;
+ typeFlow.checker.typeCheckWithContextualType(targetType, typeFlow.checker.inProvisionalTypecheckMode(), true, this.operand);
+ typeFlow.castWithCoercion(this.operand, this.castTerm.type, false, true);
+ this.type = this.castTerm.type;
+ return this;
+
+ }
+ case TypeScript.NodeType.Void: {
+ this.operand = typeFlow.typeCheck(this.operand);
+ this.type = typeFlow.checker.undefinedType;
+ break;
+
+ }
+ default: {
+ throw new Error("please implement in derived class");
+
+ }
+ }
+ return this;
+ };
+ UnaryExpression.prototype.emit = function (emitter, tokenId, startLine) {
+ emitter.emitParensAndCommentsInPlace(this, true);
+ emitter.recordSourceMappingStart(this);
+ switch(this.nodeType) {
+ case TypeScript.NodeType.IncPost: {
+ emitter.emitJavascript(this.operand, TypeScript.TokenID.PlusPlus, false);
+ emitter.writeToOutput("++");
+ break;
+
+ }
+ case TypeScript.NodeType.LogNot: {
+ emitter.writeToOutput("!");
+ emitter.emitJavascript(this.operand, TypeScript.TokenID.Exclamation, false);
+ break;
+
+ }
+ case TypeScript.NodeType.DecPost: {
+ emitter.emitJavascript(this.operand, TypeScript.TokenID.MinusMinus, false);
+ emitter.writeToOutput("--");
+ break;
+
+ }
+ case TypeScript.NodeType.ObjectLit: {
+ emitter.emitObjectLiteral(this.operand);
+ break;
+
+ }
+ case TypeScript.NodeType.ArrayLit: {
+ emitter.emitArrayLiteral(this.operand);
+ break;
+
+ }
+ case TypeScript.NodeType.Not: {
+ emitter.writeToOutput("~");
+ emitter.emitJavascript(this.operand, TypeScript.TokenID.Tilde, false);
+ break;
+
+ }
+ case TypeScript.NodeType.Neg: {
+ emitter.writeToOutput("-");
+ if(this.operand.nodeType == TypeScript.NodeType.Neg) {
+ this.operand.isParenthesized = true;
+ }
+ emitter.emitJavascript(this.operand, TypeScript.TokenID.Minus, false);
+ break;
+
+ }
+ case TypeScript.NodeType.Pos: {
+ emitter.writeToOutput("+");
+ if(this.operand.nodeType == TypeScript.NodeType.Pos) {
+ this.operand.isParenthesized = true;
+ }
+ emitter.emitJavascript(this.operand, TypeScript.TokenID.Plus, false);
+ break;
+
+ }
+ case TypeScript.NodeType.IncPre: {
+ emitter.writeToOutput("++");
+ emitter.emitJavascript(this.operand, TypeScript.TokenID.PlusPlus, false);
+ break;
+
+ }
+ case TypeScript.NodeType.DecPre: {
+ emitter.writeToOutput("--");
+ emitter.emitJavascript(this.operand, TypeScript.TokenID.MinusMinus, false);
+ break;
+
+ }
+ case TypeScript.NodeType.Throw: {
+ emitter.writeToOutput("throw ");
+ emitter.emitJavascript(this.operand, TypeScript.TokenID.Tilde, false);
+ emitter.writeToOutput(";");
+ break;
+
+ }
+ case TypeScript.NodeType.Typeof: {
+ emitter.writeToOutput("typeof ");
+ emitter.emitJavascript(this.operand, TypeScript.TokenID.Tilde, false);
+ break;
+
+ }
+ case TypeScript.NodeType.Delete: {
+ emitter.writeToOutput("delete ");
+ emitter.emitJavascript(this.operand, TypeScript.TokenID.Tilde, false);
+ break;
+
+ }
+ case TypeScript.NodeType.Void: {
+ emitter.writeToOutput("void ");
+ emitter.emitJavascript(this.operand, TypeScript.TokenID.Tilde, false);
+ break;
+
+ }
+ case TypeScript.NodeType.TypeAssertion: {
+ emitter.emitJavascript(this.operand, TypeScript.TokenID.Tilde, false);
+ break;
+
+ }
+ default: {
+ throw new Error("please implement in derived class");
+
+ }
+ }
+ emitter.recordSourceMappingEnd(this);
+ emitter.emitParensAndCommentsInPlace(this, false);
+ };
+ return UnaryExpression;
+ })(Expression);
+ TypeScript.UnaryExpression = UnaryExpression;
+ var CallExpression = (function (_super) {
+ __extends(CallExpression, _super);
+ function CallExpression(nodeType, target, arguments) {
+ _super.call(this, nodeType);
+ this.target = target;
+ this.arguments = arguments;
+ this.signature = null;
+ this.minChar = this.target.minChar;
+ }
+ CallExpression.prototype.typeCheck = function (typeFlow) {
+ if(this.nodeType == TypeScript.NodeType.New) {
+ return typeFlow.typeCheckNew(this);
+ } else {
+ return typeFlow.typeCheckCall(this);
+ }
+ };
+ CallExpression.prototype.emit = function (emitter, tokenId, startLine) {
+ emitter.emitParensAndCommentsInPlace(this, true);
+ emitter.recordSourceMappingStart(this);
+ if(this.nodeType == TypeScript.NodeType.New) {
+ emitter.emitNew(this.target, this.arguments);
+ } else {
+ emitter.emitCall(this, this.target, this.arguments);
+ }
+ emitter.recordSourceMappingEnd(this);
+ emitter.emitParensAndCommentsInPlace(this, false);
+ };
+ return CallExpression;
+ })(Expression);
+ TypeScript.CallExpression = CallExpression;
+ var BinaryExpression = (function (_super) {
+ __extends(BinaryExpression, _super);
+ function BinaryExpression(nodeType, operand1, operand2) {
+ _super.call(this, nodeType);
+ this.operand1 = operand1;
+ this.operand2 = operand2;
+ }
+ BinaryExpression.prototype.typeCheck = function (typeFlow) {
+ switch(this.nodeType) {
+ case TypeScript.NodeType.Dot: {
+ return typeFlow.typeCheckDotOperator(this);
+
+ }
+ case TypeScript.NodeType.Asg: {
+ return typeFlow.typeCheckAsgOperator(this);
+
+ }
+ case TypeScript.NodeType.Add:
+ case TypeScript.NodeType.Sub:
+ case TypeScript.NodeType.Mul:
+ case TypeScript.NodeType.Div:
+ case TypeScript.NodeType.Mod:
+ case TypeScript.NodeType.Or:
+ case TypeScript.NodeType.And: {
+ return typeFlow.typeCheckArithmeticOperator(this, false);
+
+ }
+ case TypeScript.NodeType.Xor: {
+ return typeFlow.typeCheckBitwiseOperator(this, false);
+
+ }
+ case TypeScript.NodeType.Ne:
+ case TypeScript.NodeType.Eq: {
+ var text;
+ if(typeFlow.checker.styleSettings.eqeqeq) {
+ text = TypeScript.nodeTypeTable[this.nodeType];
+ typeFlow.checker.errorReporter.styleError(this, "use of " + text);
+ } else {
+ if(typeFlow.checker.styleSettings.eqnull) {
+ text = TypeScript.nodeTypeTable[this.nodeType];
+ if((this.operand2 !== null) && (this.operand2.nodeType == TypeScript.NodeType.Null)) {
+ typeFlow.checker.errorReporter.styleError(this, "use of " + text + " to compare with null");
+ }
+ }
+ }
+
+ }
+ case TypeScript.NodeType.Eqv:
+ case TypeScript.NodeType.NEqv:
+ case TypeScript.NodeType.Lt:
+ case TypeScript.NodeType.Le:
+ case TypeScript.NodeType.Ge:
+ case TypeScript.NodeType.Gt: {
+ return typeFlow.typeCheckBooleanOperator(this);
+
+ }
+ case TypeScript.NodeType.Index: {
+ return typeFlow.typeCheckIndex(this);
+
+ }
+ case TypeScript.NodeType.Member: {
+ this.type = typeFlow.voidType;
+ return this;
+
+ }
+ case TypeScript.NodeType.LogOr: {
+ return typeFlow.typeCheckLogOr(this);
+
+ }
+ case TypeScript.NodeType.LogAnd: {
+ return typeFlow.typeCheckLogAnd(this);
+
+ }
+ case TypeScript.NodeType.AsgAdd:
+ case TypeScript.NodeType.AsgSub:
+ case TypeScript.NodeType.AsgMul:
+ case TypeScript.NodeType.AsgDiv:
+ case TypeScript.NodeType.AsgMod:
+ case TypeScript.NodeType.AsgOr:
+ case TypeScript.NodeType.AsgAnd: {
+ return typeFlow.typeCheckArithmeticOperator(this, true);
+
+ }
+ case TypeScript.NodeType.AsgXor: {
+ return typeFlow.typeCheckBitwiseOperator(this, true);
+
+ }
+ case TypeScript.NodeType.Lsh:
+ case TypeScript.NodeType.Rsh:
+ case TypeScript.NodeType.Rs2: {
+ return typeFlow.typeCheckShift(this, false);
+
+ }
+ case TypeScript.NodeType.AsgLsh:
+ case TypeScript.NodeType.AsgRsh:
+ case TypeScript.NodeType.AsgRs2: {
+ return typeFlow.typeCheckShift(this, true);
+
+ }
+ case TypeScript.NodeType.Comma: {
+ return typeFlow.typeCheckCommaOperator(this);
+
+ }
+ case TypeScript.NodeType.InstOf: {
+ return typeFlow.typeCheckInstOf(this);
+
+ }
+ case TypeScript.NodeType.In: {
+ return typeFlow.typeCheckInOperator(this);
+
+ }
+ case TypeScript.NodeType.From: {
+ typeFlow.checker.errorReporter.simpleError(this, "Illegal use of 'from' keyword in binary expression");
+ break;
+
+ }
+ default: {
+ throw new Error("please implement in derived class");
+
+ }
+ }
+ return this;
+ };
+ BinaryExpression.prototype.emit = function (emitter, tokenId, startLine) {
+ var binTokenId = TypeScript.nodeTypeToTokTable[this.nodeType];
+ emitter.emitParensAndCommentsInPlace(this, true);
+ emitter.recordSourceMappingStart(this);
+ if(binTokenId != undefined) {
+ emitter.emitJavascript(this.operand1, binTokenId, false);
+ if(TypeScript.tokenTable[binTokenId].text == "instanceof") {
+ emitter.writeToOutput(" instanceof ");
+ } else {
+ if(TypeScript.tokenTable[binTokenId].text == "in") {
+ emitter.writeToOutput(" in ");
+ } else {
+ emitter.writeToOutputTrimmable(" " + TypeScript.tokenTable[binTokenId].text + " ");
+ }
+ }
+ emitter.emitJavascript(this.operand2, binTokenId, false);
+ } else {
+ switch(this.nodeType) {
+ case TypeScript.NodeType.Dot: {
+ if(!emitter.tryEmitConstant(this)) {
+ emitter.emitJavascript(this.operand1, TypeScript.TokenID.Dot, false);
+ emitter.writeToOutput(".");
+ emitter.emitJavascriptName(this.operand2, false);
+ }
+ break;
+
+ }
+ case TypeScript.NodeType.Index: {
+ emitter.emitIndex(this.operand1, this.operand2);
+ break;
+
+ }
+ case TypeScript.NodeType.Member: {
+ if(this.operand2.nodeType == TypeScript.NodeType.FuncDecl && (this.operand2).isAccessor()) {
+ var funcDecl = this.operand2;
+ if(TypeScript.hasFlag(funcDecl.fncFlags, TypeScript.FncFlags.GetAccessor)) {
+ emitter.writeToOutput("get ");
+ } else {
+ emitter.writeToOutput("set ");
+ }
+ emitter.emitJavascript(this.operand1, TypeScript.TokenID.Colon, false);
+ } else {
+ emitter.emitJavascript(this.operand1, TypeScript.TokenID.Colon, false);
+ emitter.writeToOutputTrimmable(": ");
+ }
+ emitter.emitJavascript(this.operand2, TypeScript.TokenID.Comma, false);
+ break;
+
+ }
+ case TypeScript.NodeType.Comma: {
+ emitter.emitJavascript(this.operand1, TypeScript.TokenID.Comma, false);
+ if(emitter.emitState.inObjectLiteral) {
+ emitter.writeLineToOutput(", ");
+ } else {
+ emitter.writeToOutput(",");
+ }
+ emitter.emitJavascript(this.operand2, TypeScript.TokenID.Comma, false);
+ break;
+
+ }
+ case TypeScript.NodeType.Is: {
+ throw new Error("should be de-sugared during type check");
+
+ }
+ default: {
+ throw new Error("please implement in derived class");
+
+ }
+ }
+ }
+ emitter.recordSourceMappingEnd(this);
+ emitter.emitParensAndCommentsInPlace(this, false);
+ };
+ return BinaryExpression;
+ })(Expression);
+ TypeScript.BinaryExpression = BinaryExpression;
+ var ConditionalExpression = (function (_super) {
+ __extends(ConditionalExpression, _super);
+ function ConditionalExpression(operand1, operand2, operand3) {
+ _super.call(this, TypeScript.NodeType.ConditionalExpression);
+ this.operand1 = operand1;
+ this.operand2 = operand2;
+ this.operand3 = operand3;
+ }
+ ConditionalExpression.prototype.typeCheck = function (typeFlow) {
+ return typeFlow.typeCheckQMark(this);
+ };
+ ConditionalExpression.prototype.emit = function (emitter, tokenId, startLine) {
+ emitter.emitParensAndCommentsInPlace(this, true);
+ emitter.recordSourceMappingStart(this);
+ emitter.emitJavascript(this.operand1, TypeScript.TokenID.Question, false);
+ emitter.writeToOutput(" ? ");
+ emitter.emitJavascript(this.operand2, TypeScript.TokenID.Question, false);
+ emitter.writeToOutput(" : ");
+ emitter.emitJavascript(this.operand3, TypeScript.TokenID.Question, false);
+ emitter.recordSourceMappingEnd(this);
+ emitter.emitParensAndCommentsInPlace(this, false);
+ };
+ return ConditionalExpression;
+ })(Expression);
+ TypeScript.ConditionalExpression = ConditionalExpression;
+ var NumberLiteral = (function (_super) {
+ __extends(NumberLiteral, _super);
+ function NumberLiteral(value, hasEmptyFraction) {
+ _super.call(this, TypeScript.NodeType.NumberLit);
+ this.value = value;
+ this.hasEmptyFraction = hasEmptyFraction;
+ this.isNegativeZero = false;
+ }
+ NumberLiteral.prototype.typeCheck = function (typeFlow) {
+ this.type = typeFlow.doubleType;
+ return this;
+ };
+ NumberLiteral.prototype.treeViewLabel = function () {
+ return "num: " + this.printLabel();
+ };
+ NumberLiteral.prototype.emit = function (emitter, tokenId, startLine) {
+ emitter.emitParensAndCommentsInPlace(this, true);
+ emitter.recordSourceMappingStart(this);
+ if(this.isNegativeZero) {
+ emitter.writeToOutput("-");
+ }
+ emitter.writeToOutput(this.value.toString());
+ if(this.hasEmptyFraction) {
+ emitter.writeToOutput(".0");
+ }
+ emitter.recordSourceMappingEnd(this);
+ emitter.emitParensAndCommentsInPlace(this, false);
+ };
+ NumberLiteral.prototype.printLabel = function () {
+ if(Math.floor(this.value) != this.value) {
+ return this.value.toFixed(2).toString();
+ } else {
+ if(this.hasEmptyFraction) {
+ return this.value.toString() + ".0";
+ } else {
+ return this.value.toString();
+ }
+ }
+ };
+ return NumberLiteral;
+ })(Expression);
+ TypeScript.NumberLiteral = NumberLiteral;
+ var RegexLiteral = (function (_super) {
+ __extends(RegexLiteral, _super);
+ function RegexLiteral(regex) {
+ _super.call(this, TypeScript.NodeType.Regex);
+ this.regex = regex;
+ }
+ RegexLiteral.prototype.typeCheck = function (typeFlow) {
+ this.type = typeFlow.regexType;
+ return this;
+ };
+ RegexLiteral.prototype.emit = function (emitter, tokenId, startLine) {
+ emitter.emitParensAndCommentsInPlace(this, true);
+ emitter.recordSourceMappingStart(this);
+ emitter.writeToOutput(this.regex.toString());
+ emitter.recordSourceMappingEnd(this);
+ emitter.emitParensAndCommentsInPlace(this, false);
+ };
+ return RegexLiteral;
+ })(Expression);
+ TypeScript.RegexLiteral = RegexLiteral;
+ var StringLiteral = (function (_super) {
+ __extends(StringLiteral, _super);
+ function StringLiteral(text) {
+ _super.call(this, TypeScript.NodeType.QString);
+ this.text = text;
+ }
+ StringLiteral.prototype.emit = function (emitter, tokenId, startLine) {
+ emitter.emitParensAndCommentsInPlace(this, true);
+ emitter.recordSourceMappingStart(this);
+ emitter.emitStringLiteral(this.text);
+ emitter.recordSourceMappingEnd(this);
+ emitter.emitParensAndCommentsInPlace(this, false);
+ };
+ StringLiteral.prototype.typeCheck = function (typeFlow) {
+ this.type = typeFlow.stringType;
+ return this;
+ };
+ StringLiteral.prototype.treeViewLabel = function () {
+ return "st: " + this.text;
+ };
+ StringLiteral.prototype.printLabel = function () {
+ return this.text;
+ };
+ return StringLiteral;
+ })(Expression);
+ TypeScript.StringLiteral = StringLiteral;
+ var ModuleElement = (function (_super) {
+ __extends(ModuleElement, _super);
+ function ModuleElement(nodeType) {
+ _super.call(this, nodeType);
+ }
+ return ModuleElement;
+ })(AST);
+ TypeScript.ModuleElement = ModuleElement;
+ var ImportDeclaration = (function (_super) {
+ __extends(ImportDeclaration, _super);
+ function ImportDeclaration(id, alias) {
+ _super.call(this, TypeScript.NodeType.ImportDeclaration);
+ this.id = id;
+ this.alias = alias;
+ this.varFlags = TypeScript.VarFlags.None;
+ this.isDynamicImport = false;
+ }
+ ImportDeclaration.prototype.isStatementOrExpression = function () {
+ return true;
+ };
+ ImportDeclaration.prototype.isDeclaration = function () {
+ return true;
+ };
+ ImportDeclaration.prototype.emit = function (emitter, tokenId, startLine) {
+ var mod = this.alias.type;
+ if(!this.isDynamicImport || (this.id.sym && !(this.id.sym).onlyReferencedAsTypeRef)) {
+ var prevModAliasId = emitter.modAliasId;
+ var prevFirstModAlias = emitter.firstModAlias;
+ emitter.recordSourceMappingStart(this);
+ emitter.emitParensAndCommentsInPlace(this, true);
+ emitter.writeToOutput("var " + this.id.actualText + " = ");
+ emitter.modAliasId = this.id.actualText;
+ emitter.firstModAlias = this.firstAliasedModToString();
+ emitter.emitJavascript(this.alias, TypeScript.TokenID.Tilde, false);
+ if(!this.isDynamicImport) {
+ emitter.writeToOutput(";");
+ }
+ emitter.emitParensAndCommentsInPlace(this, false);
+ emitter.recordSourceMappingEnd(this);
+ emitter.modAliasId = prevModAliasId;
+ emitter.firstModAlias = prevFirstModAlias;
+ }
+ };
+ ImportDeclaration.prototype.typeCheck = function (typeFlow) {
+ return typeFlow.typeCheckImportDecl(this);
+ };
+ ImportDeclaration.prototype.getAliasName = function (aliasAST) {
+ if (typeof aliasAST === "undefined") { aliasAST = this.alias; }
+ if(aliasAST.nodeType == TypeScript.NodeType.Name) {
+ return (aliasAST).actualText;
+ } else {
+ var dotExpr = aliasAST;
+ return this.getAliasName(dotExpr.operand1) + "." + this.getAliasName(dotExpr.operand2);
+ }
+ };
+ ImportDeclaration.prototype.firstAliasedModToString = function () {
+ if(this.alias.nodeType == TypeScript.NodeType.Name) {
+ return (this.alias).actualText;
+ } else {
+ var dotExpr = this.alias;
+ var firstMod = dotExpr.operand1;
+ return firstMod.actualText;
+ }
+ };
+ return ImportDeclaration;
+ })(ModuleElement);
+ TypeScript.ImportDeclaration = ImportDeclaration;
+ var BoundDecl = (function (_super) {
+ __extends(BoundDecl, _super);
+ function BoundDecl(id, nodeType, nestingLevel) {
+ _super.call(this, nodeType);
+ this.id = id;
+ this.nestingLevel = nestingLevel;
+ this.init = null;
+ this.typeExpr = null;
+ this.varFlags = TypeScript.VarFlags.None;
+ this.sym = null;
+ }
+ BoundDecl.prototype.isDeclaration = function () {
+ return true;
+ };
+ BoundDecl.prototype.isStatementOrExpression = function () {
+ return true;
+ };
+ BoundDecl.prototype.isPrivate = function () {
+ return TypeScript.hasFlag(this.varFlags, TypeScript.VarFlags.Private);
+ };
+ BoundDecl.prototype.isPublic = function () {
+ return TypeScript.hasFlag(this.varFlags, TypeScript.VarFlags.Public);
+ };
+ BoundDecl.prototype.isProperty = function () {
+ return TypeScript.hasFlag(this.varFlags, TypeScript.VarFlags.Property);
+ };
+ BoundDecl.prototype.typeCheck = function (typeFlow) {
+ return typeFlow.typeCheckBoundDecl(this);
+ };
+ BoundDecl.prototype.printLabel = function () {
+ return this.treeViewLabel();
+ };
+ return BoundDecl;
+ })(AST);
+ TypeScript.BoundDecl = BoundDecl;
+ var VarDecl = (function (_super) {
+ __extends(VarDecl, _super);
+ function VarDecl(id, nest) {
+ _super.call(this, id, TypeScript.NodeType.VarDecl, nest);
+ }
+ VarDecl.prototype.isAmbient = function () {
+ return TypeScript.hasFlag(this.varFlags, TypeScript.VarFlags.Ambient);
+ };
+ VarDecl.prototype.isExported = function () {
+ return TypeScript.hasFlag(this.varFlags, TypeScript.VarFlags.Exported);
+ };
+ VarDecl.prototype.isStatic = function () {
+ return TypeScript.hasFlag(this.varFlags, TypeScript.VarFlags.Static);
+ };
+ VarDecl.prototype.emit = function (emitter, tokenId, startLine) {
+ emitter.emitJavascriptVarDecl(this, tokenId);
+ };
+ VarDecl.prototype.treeViewLabel = function () {
+ return "var " + this.id.actualText;
+ };
+ return VarDecl;
+ })(BoundDecl);
+ TypeScript.VarDecl = VarDecl;
+ var ArgDecl = (function (_super) {
+ __extends(ArgDecl, _super);
+ function ArgDecl(id) {
+ _super.call(this, id, TypeScript.NodeType.ArgDecl, 0);
+ this.isOptional = false;
+ this.parameterPropertySym = null;
+ }
+ ArgDecl.prototype.isOptionalArg = function () {
+ return this.isOptional || this.init;
+ };
+ ArgDecl.prototype.treeViewLabel = function () {
+ return "arg: " + this.id.actualText;
+ };
+ ArgDecl.prototype.emit = function (emitter, tokenId, startLine) {
+ emitter.emitParensAndCommentsInPlace(this, true);
+ emitter.recordSourceMappingStart(this);
+ emitter.writeToOutput(this.id.actualText);
+ emitter.recordSourceMappingEnd(this);
+ emitter.emitParensAndCommentsInPlace(this, false);
+ };
+ return ArgDecl;
+ })(BoundDecl);
+ TypeScript.ArgDecl = ArgDecl;
+ var internalId = 0;
+ var FuncDecl = (function (_super) {
+ __extends(FuncDecl, _super);
+ function FuncDecl(name, bod, isConstructor, arguments, vars, scopes, statics, nodeType) {
+ _super.call(this, nodeType);
+ this.name = name;
+ this.bod = bod;
+ this.isConstructor = isConstructor;
+ this.arguments = arguments;
+ this.vars = vars;
+ this.scopes = scopes;
+ this.statics = statics;
+ this.hint = null;
+ this.fncFlags = TypeScript.FncFlags.None;
+ this.returnTypeAnnotation = null;
+ this.variableArgList = false;
+ this.jumpRefs = null;
+ this.internalNameCache = null;
+ this.tmp1Declared = false;
+ this.enclosingFnc = null;
+ this.freeVariables = [];
+ this.unitIndex = -1;
+ this.classDecl = null;
+ this.boundToProperty = null;
+ this.isOverload = false;
+ this.innerStaticFuncs = [];
+ this.isTargetTypedAsMethod = false;
+ this.isInlineCallLiteral = false;
+ this.accessorSymbol = null;
+ this.leftCurlyCount = 0;
+ this.rightCurlyCount = 0;
+ this.returnStatementsWithExpressions = [];
+ this.scopeType = null;
+ this.endingToken = null;
+ }
+ FuncDecl.prototype.isDeclaration = function () {
+ return true;
+ };
+ FuncDecl.prototype.internalName = function () {
+ if(this.internalNameCache == null) {
+ var extName = this.getNameText();
+ if(extName) {
+ this.internalNameCache = "_internal_" + extName;
+ } else {
+ this.internalNameCache = "_internal_" + internalId++;
+ }
+ }
+ return this.internalNameCache;
+ };
+ FuncDecl.prototype.hasSelfReference = function () {
+ return TypeScript.hasFlag(this.fncFlags, TypeScript.FncFlags.HasSelfReference);
+ };
+ FuncDecl.prototype.setHasSelfReference = function () {
+ this.fncFlags |= TypeScript.FncFlags.HasSelfReference;
+ };
+ FuncDecl.prototype.hasSuperReferenceInFatArrowFunction = function () {
+ return TypeScript.hasFlag(this.fncFlags, TypeScript.FncFlags.HasSuperReferenceInFatArrowFunction);
+ };
+ FuncDecl.prototype.setHasSuperReferenceInFatArrowFunction = function () {
+ this.fncFlags |= TypeScript.FncFlags.HasSuperReferenceInFatArrowFunction;
+ };
+ FuncDecl.prototype.addCloRef = function (id, sym) {
+ if(this.envids == null) {
+ this.envids = new Array();
+ }
+ this.envids[this.envids.length] = id;
+ var outerFnc = this.enclosingFnc;
+ if(sym) {
+ while(outerFnc && (outerFnc.type.symbol != sym.container)) {
+ outerFnc.addJumpRef(sym);
+ outerFnc = outerFnc.enclosingFnc;
+ }
+ }
+ return this.envids.length - 1;
+ };
+ FuncDecl.prototype.addJumpRef = function (sym) {
+ if(this.jumpRefs == null) {
+ this.jumpRefs = new Array();
+ }
+ var id = new Identifier(sym.name);
+ this.jumpRefs[this.jumpRefs.length] = id;
+ id.sym = sym;
+ id.cloId = this.addCloRef(id, null);
+ };
+ FuncDecl.prototype.buildControlFlow = function () {
+ var entry = new TypeScript.BasicBlock();
+ var exit = new TypeScript.BasicBlock();
+ var context = new TypeScript.ControlFlowContext(entry, exit);
+ var controlFlowPrefix = function (ast, parent, walker) {
+ ast.addToControlFlow(walker.state);
+ return ast;
+ };
+ var walker = TypeScript.getAstWalkerFactory().getWalker(controlFlowPrefix, null, null, context);
+ context.walker = walker;
+ walker.walk(this.bod, this);
+ return context;
+ };
+ FuncDecl.prototype.typeCheck = function (typeFlow) {
+ return typeFlow.typeCheckFunction(this);
+ };
+ FuncDecl.prototype.emit = function (emitter, tokenId, startLine) {
+ emitter.emitJavascriptFunction(this);
+ };
+ FuncDecl.prototype.getNameText = function () {
+ if(this.name) {
+ return this.name.actualText;
+ } else {
+ return this.hint;
+ }
+ };
+ FuncDecl.prototype.isMethod = function () {
+ return (this.fncFlags & TypeScript.FncFlags.Method) != TypeScript.FncFlags.None;
+ };
+ FuncDecl.prototype.isCallMember = function () {
+ return TypeScript.hasFlag(this.fncFlags, TypeScript.FncFlags.CallMember);
+ };
+ FuncDecl.prototype.isConstructMember = function () {
+ return TypeScript.hasFlag(this.fncFlags, TypeScript.FncFlags.ConstructMember);
+ };
+ FuncDecl.prototype.isIndexerMember = function () {
+ return TypeScript.hasFlag(this.fncFlags, TypeScript.FncFlags.IndexerMember);
+ };
+ FuncDecl.prototype.isSpecialFn = function () {
+ return this.isCallMember() || this.isIndexerMember() || this.isConstructMember();
+ };
+ FuncDecl.prototype.isAnonymousFn = function () {
+ return this.name === null;
+ };
+ FuncDecl.prototype.isAccessor = function () {
+ return TypeScript.hasFlag(this.fncFlags, TypeScript.FncFlags.GetAccessor) || TypeScript.hasFlag(this.fncFlags, TypeScript.FncFlags.SetAccessor);
+ };
+ FuncDecl.prototype.isGetAccessor = function () {
+ return TypeScript.hasFlag(this.fncFlags, TypeScript.FncFlags.GetAccessor);
+ };
+ FuncDecl.prototype.isSetAccessor = function () {
+ return TypeScript.hasFlag(this.fncFlags, TypeScript.FncFlags.SetAccessor);
+ };
+ FuncDecl.prototype.isAmbient = function () {
+ return TypeScript.hasFlag(this.fncFlags, TypeScript.FncFlags.Ambient);
+ };
+ FuncDecl.prototype.isExported = function () {
+ return TypeScript.hasFlag(this.fncFlags, TypeScript.FncFlags.Exported);
+ };
+ FuncDecl.prototype.isPrivate = function () {
+ return TypeScript.hasFlag(this.fncFlags, TypeScript.FncFlags.Private);
+ };
+ FuncDecl.prototype.isPublic = function () {
+ return TypeScript.hasFlag(this.fncFlags, TypeScript.FncFlags.Public);
+ };
+ FuncDecl.prototype.isStatic = function () {
+ return TypeScript.hasFlag(this.fncFlags, TypeScript.FncFlags.Static);
+ };
+ FuncDecl.prototype.treeViewLabel = function () {
+ if(this.name == null) {
+ return "funcExpr";
+ } else {
+ return "func: " + this.name.actualText;
+ }
+ };
+ FuncDecl.prototype.ClearFlags = function () {
+ this.fncFlags = TypeScript.FncFlags.None;
+ };
+ FuncDecl.prototype.isSignature = function () {
+ return (this.fncFlags & TypeScript.FncFlags.Signature) != TypeScript.FncFlags.None;
+ };
+ return FuncDecl;
+ })(AST);
+ TypeScript.FuncDecl = FuncDecl;
+ var LocationInfo = (function () {
+ function LocationInfo(filename, lineMap, unitIndex) {
+ this.filename = filename;
+ this.lineMap = lineMap;
+ this.unitIndex = unitIndex;
+ }
+ return LocationInfo;
+ })();
+ TypeScript.LocationInfo = LocationInfo;
+ TypeScript.unknownLocationInfo = new LocationInfo("unknown", null, -1);
+ var Script = (function (_super) {
+ __extends(Script, _super);
+ function Script(vars, scopes) {
+ _super.call(this, new Identifier("script"), null, false, null, vars, scopes, null, TypeScript.NodeType.Script);
+ this.locationInfo = null;
+ this.referencedFiles = [];
+ this.requiresGlobal = false;
+ this.requiresExtendsBlock = false;
+ this.isResident = false;
+ this.isDeclareFile = false;
+ this.hasBeenTypeChecked = false;
+ this.topLevelMod = null;
+ this.leftCurlyCount = 0;
+ this.rightCurlyCount = 0;
+ this.containsUnicodeChar = false;
+ this.containsUnicodeCharInComment = false;
+ this.externallyVisibleImportedSymbols = [];
+ this.vars = vars;
+ this.scopes = scopes;
+ }
+ Script.prototype.setCachedEmitRequired = function (value) {
+ this.cachedEmitRequired = value;
+ return this.cachedEmitRequired;
+ };
+ Script.prototype.typeCheck = function (typeFlow) {
+ return typeFlow.typeCheckScript(this);
+ };
+ Script.prototype.treeViewLabel = function () {
+ return "Script";
+ };
+ Script.prototype.emitRequired = function (emitOptions) {
+ if(this.cachedEmitRequired != undefined) {
+ return this.cachedEmitRequired;
+ }
+ if(!this.isDeclareFile && !this.isResident && this.bod) {
+ for(var i = 0, len = this.bod.members.length; i < len; i++) {
+ var stmt = this.bod.members[i];
+ if(stmt.nodeType == TypeScript.NodeType.ModuleDeclaration) {
+ if(!TypeScript.hasFlag((stmt).modFlags, TypeScript.ModuleFlags.ShouldEmitModuleDecl | TypeScript.ModuleFlags.Ambient)) {
+ return this.setCachedEmitRequired(true);
+ }
+ } else {
+ if(stmt.nodeType == TypeScript.NodeType.ClassDeclaration) {
+ if(!TypeScript.hasFlag((stmt).varFlags, TypeScript.VarFlags.Ambient)) {
+ return this.setCachedEmitRequired(true);
+ }
+ } else {
+ if(stmt.nodeType == TypeScript.NodeType.VarDecl) {
+ if(!TypeScript.hasFlag((stmt).varFlags, TypeScript.VarFlags.Ambient)) {
+ return this.setCachedEmitRequired(true);
+ }
+ } else {
+ if(stmt.nodeType == TypeScript.NodeType.FuncDecl) {
+ if(!(stmt).isSignature()) {
+ return this.setCachedEmitRequired(true);
+ }
+ } else {
+ if(stmt.nodeType != TypeScript.NodeType.InterfaceDeclaration && stmt.nodeType != TypeScript.NodeType.Empty) {
+ return this.setCachedEmitRequired(true);
+ }
+ }
+ }
+ }
+ }
+ }
+ if(emitOptions.emitComments && ((this.bod.preComments && this.bod.preComments.length > 0) || (this.bod.postComments && this.bod.postComments.length > 0))) {
+ return this.setCachedEmitRequired(true);
+ }
+ }
+ return this.setCachedEmitRequired(false);
+ };
+ Script.prototype.emit = function (emitter, tokenId, startLine) {
+ if(this.emitRequired(emitter.emitOptions)) {
+ emitter.emitParensAndCommentsInPlace(this.bod, true);
+ emitter.emitJavascriptList(this.bod, null, TypeScript.TokenID.Semicolon, true, false, false, true, this.requiresExtendsBlock);
+ emitter.emitParensAndCommentsInPlace(this.bod, false);
+ }
+ };
+ Script.prototype.AddExternallyVisibleImportedSymbol = function (symbol, checker) {
+ if(this.isExternallyVisibleSymbol(symbol)) {
+ return;
+ }
+ if(!symbol.getType().symbol.isExternallyVisible(checker)) {
+ var quotes = "";
+ var moduleName = symbol.getType().symbol.prettyName;
+ if(!TypeScript.isQuoted(moduleName)) {
+ quotes = "'";
+ }
+ checker.errorReporter.simpleError(symbol.declAST, "Externally visible import statement uses non exported module " + quotes + moduleName + quotes);
+ }
+ this.externallyVisibleImportedSymbols.push(symbol);
+ };
+ Script.prototype.isExternallyVisibleSymbol = function (symbol) {
+ for(var i = 0; i < this.externallyVisibleImportedSymbols.length; i++) {
+ if(this.externallyVisibleImportedSymbols[i] == symbol) {
+ return true;
+ }
+ }
+ return false;
+ };
+ return Script;
+ })(FuncDecl);
+ TypeScript.Script = Script;
+ var NamedDeclaration = (function (_super) {
+ __extends(NamedDeclaration, _super);
+ function NamedDeclaration(nodeType, name, members) {
+ _super.call(this, nodeType);
+ this.name = name;
+ this.members = members;
+ this.leftCurlyCount = 0;
+ this.rightCurlyCount = 0;
+ }
+ NamedDeclaration.prototype.isDeclaration = function () {
+ return true;
+ };
+ return NamedDeclaration;
+ })(ModuleElement);
+ TypeScript.NamedDeclaration = NamedDeclaration;
+ var ModuleDeclaration = (function (_super) {
+ __extends(ModuleDeclaration, _super);
+ function ModuleDeclaration(name, members, vars, scopes, endingToken) {
+ _super.call(this, TypeScript.NodeType.ModuleDeclaration, name, members);
+ this.endingToken = endingToken;
+ this.modFlags = TypeScript.ModuleFlags.ShouldEmitModuleDecl;
+ this.amdDependencies = [];
+ this.containsUnicodeChar = false;
+ this.containsUnicodeCharInComment = false;
+ this.vars = vars;
+ this.scopes = scopes;
+ this.prettyName = this.name.actualText;
+ }
+ ModuleDeclaration.prototype.isExported = function () {
+ return TypeScript.hasFlag(this.modFlags, TypeScript.ModuleFlags.Exported);
+ };
+ ModuleDeclaration.prototype.isAmbient = function () {
+ return TypeScript.hasFlag(this.modFlags, TypeScript.ModuleFlags.Ambient);
+ };
+ ModuleDeclaration.prototype.isEnum = function () {
+ return TypeScript.hasFlag(this.modFlags, TypeScript.ModuleFlags.IsEnum);
+ };
+ ModuleDeclaration.prototype.recordNonInterface = function () {
+ this.modFlags &= ~TypeScript.ModuleFlags.ShouldEmitModuleDecl;
+ };
+ ModuleDeclaration.prototype.typeCheck = function (typeFlow) {
+ return typeFlow.typeCheckModule(this);
+ };
+ ModuleDeclaration.prototype.emit = function (emitter, tokenId, startLine) {
+ if(!TypeScript.hasFlag(this.modFlags, TypeScript.ModuleFlags.ShouldEmitModuleDecl)) {
+ emitter.emitParensAndCommentsInPlace(this, true);
+ emitter.recordSourceMappingStart(this);
+ emitter.emitJavascriptModule(this);
+ emitter.recordSourceMappingEnd(this);
+ emitter.emitParensAndCommentsInPlace(this, false);
+ }
+ };
+ return ModuleDeclaration;
+ })(NamedDeclaration);
+ TypeScript.ModuleDeclaration = ModuleDeclaration;
+ var TypeDeclaration = (function (_super) {
+ __extends(TypeDeclaration, _super);
+ function TypeDeclaration(nodeType, name, extendsList, implementsList, members) {
+ _super.call(this, nodeType, name, members);
+ this.extendsList = extendsList;
+ this.implementsList = implementsList;
+ this.varFlags = TypeScript.VarFlags.None;
+ }
+ TypeDeclaration.prototype.isExported = function () {
+ return TypeScript.hasFlag(this.varFlags, TypeScript.VarFlags.Exported);
+ };
+ TypeDeclaration.prototype.isAmbient = function () {
+ return TypeScript.hasFlag(this.varFlags, TypeScript.VarFlags.Ambient);
+ };
+ return TypeDeclaration;
+ })(NamedDeclaration);
+ TypeScript.TypeDeclaration = TypeDeclaration;
+ var ClassDeclaration = (function (_super) {
+ __extends(ClassDeclaration, _super);
+ function ClassDeclaration(name, members, extendsList, implementsList) {
+ _super.call(this, TypeScript.NodeType.ClassDeclaration, name, extendsList, implementsList, members);
+ this.knownMemberNames = {
+ };
+ this.constructorDecl = null;
+ this.constructorNestingLevel = 0;
+ this.endingToken = null;
+ }
+ ClassDeclaration.prototype.typeCheck = function (typeFlow) {
+ return typeFlow.typeCheckClass(this);
+ };
+ ClassDeclaration.prototype.emit = function (emitter, tokenId, startLine) {
+ emitter.emitJavascriptClass(this);
+ };
+ return ClassDeclaration;
+ })(TypeDeclaration);
+ TypeScript.ClassDeclaration = ClassDeclaration;
+ var InterfaceDeclaration = (function (_super) {
+ __extends(InterfaceDeclaration, _super);
+ function InterfaceDeclaration(name, members, extendsList, implementsList) {
+ _super.call(this, TypeScript.NodeType.InterfaceDeclaration, name, extendsList, implementsList, members);
+ }
+ InterfaceDeclaration.prototype.typeCheck = function (typeFlow) {
+ return typeFlow.typeCheckInterface(this);
+ };
+ InterfaceDeclaration.prototype.emit = function (emitter, tokenId, startLine) {
+ };
+ return InterfaceDeclaration;
+ })(TypeDeclaration);
+ TypeScript.InterfaceDeclaration = InterfaceDeclaration;
+ var Statement = (function (_super) {
+ __extends(Statement, _super);
+ function Statement(nodeType) {
+ _super.call(this, nodeType);
+ this.flags |= TypeScript.ASTFlags.IsStatement;
+ }
+ Statement.prototype.isLoop = function () {
+ return false;
+ };
+ Statement.prototype.isStatementOrExpression = function () {
+ return true;
+ };
+ Statement.prototype.isCompoundStatement = function () {
+ return this.isLoop();
+ };
+ Statement.prototype.typeCheck = function (typeFlow) {
+ this.type = typeFlow.voidType;
+ return this;
+ };
+ return Statement;
+ })(ModuleElement);
+ TypeScript.Statement = Statement;
+ var LabeledStatement = (function (_super) {
+ __extends(LabeledStatement, _super);
+ function LabeledStatement(labels, stmt) {
+ _super.call(this, TypeScript.NodeType.LabeledStatement);
+ this.labels = labels;
+ this.stmt = stmt;
+ }
+ LabeledStatement.prototype.emit = function (emitter, tokenId, startLine) {
+ emitter.emitParensAndCommentsInPlace(this, true);
+ emitter.recordSourceMappingStart(this);
+ if(this.labels) {
+ var labelsLen = this.labels.members.length;
+ for(var i = 0; i < labelsLen; i++) {
+ this.labels.members[i].emit(emitter, tokenId, startLine);
+ }
+ }
+ this.stmt.emit(emitter, tokenId, true);
+ emitter.recordSourceMappingEnd(this);
+ emitter.emitParensAndCommentsInPlace(this, false);
+ };
+ LabeledStatement.prototype.typeCheck = function (typeFlow) {
+ typeFlow.typeCheck(this.labels);
+ this.stmt = this.stmt.typeCheck(typeFlow);
+ return this;
+ };
+ LabeledStatement.prototype.addToControlFlow = function (context) {
+ var beforeBB = context.current;
+ var bb = new TypeScript.BasicBlock();
+ context.current = bb;
+ beforeBB.addSuccessor(bb);
+ };
+ return LabeledStatement;
+ })(Statement);
+ TypeScript.LabeledStatement = LabeledStatement;
+ var Block = (function (_super) {
+ __extends(Block, _super);
+ function Block(statements, isStatementBlock) {
+ _super.call(this, TypeScript.NodeType.Block);
+ this.statements = statements;
+ this.isStatementBlock = isStatementBlock;
+ }
+ Block.prototype.emit = function (emitter, tokenId, startLine) {
+ emitter.emitParensAndCommentsInPlace(this, true);
+ emitter.recordSourceMappingStart(this);
+ if(this.isStatementBlock) {
+ emitter.writeLineToOutput(" {");
+ emitter.indenter.increaseIndent();
+ } else {
+ emitter.setInVarBlock(this.statements.members.length);
+ }
+ var temp = emitter.setInObjectLiteral(false);
+ if(this.statements) {
+ emitter.emitJavascriptList(this.statements, null, TypeScript.TokenID.Semicolon, true, false, false);
+ }
+ if(this.isStatementBlock) {
+ emitter.indenter.decreaseIndent();
+ emitter.emitIndent();
+ emitter.writeToOutput("}");
+ }
+ emitter.setInObjectLiteral(temp);
+ emitter.recordSourceMappingEnd(this);
+ emitter.emitParensAndCommentsInPlace(this, false);
+ };
+ Block.prototype.addToControlFlow = function (context) {
+ var afterIfNeeded = new TypeScript.BasicBlock();
+ context.pushStatement(this, context.current, afterIfNeeded);
+ if(this.statements) {
+ context.walk(this.statements, this);
+ }
+ context.walker.options.goChildren = false;
+ context.popStatement();
+ if(afterIfNeeded.predecessors.length > 0) {
+ context.current.addSuccessor(afterIfNeeded);
+ context.current = afterIfNeeded;
+ }
+ };
+ Block.prototype.typeCheck = function (typeFlow) {
+ if(!typeFlow.checker.styleSettings.emptyBlocks) {
+ if((this.statements === null) || (this.statements.members.length == 0)) {
+ typeFlow.checker.errorReporter.styleError(this, "empty block");
+ }
+ }
+ typeFlow.typeCheck(this.statements);
+ return this;
+ };
+ return Block;
+ })(Statement);
+ TypeScript.Block = Block;
+ var Jump = (function (_super) {
+ __extends(Jump, _super);
+ function Jump(nodeType) {
+ _super.call(this, nodeType);
+ this.target = null;
+ this.resolvedTarget = null;
+ }
+ Jump.prototype.hasExplicitTarget = function () {
+ return (this.target);
+ };
+ Jump.prototype.setResolvedTarget = function (parser, stmt) {
+ if(stmt.isLoop()) {
+ this.resolvedTarget = stmt;
+ return true;
+ }
+ if(this.nodeType === TypeScript.NodeType.Continue) {
+ parser.reportParseError("continue statement applies only to loops");
+ return false;
+ } else {
+ if((stmt.nodeType == TypeScript.NodeType.Switch) || this.hasExplicitTarget()) {
+ this.resolvedTarget = stmt;
+ return true;
+ } else {
+ parser.reportParseError("break statement with no label can apply only to a loop or switch statement");
+ return false;
+ }
+ }
+ };
+ Jump.prototype.addToControlFlow = function (context) {
+ _super.prototype.addToControlFlow.call(this, context);
+ context.unconditionalBranch(this.resolvedTarget, (this.nodeType == TypeScript.NodeType.Continue));
+ };
+ Jump.prototype.emit = function (emitter, tokenId, startLine) {
+ emitter.emitParensAndCommentsInPlace(this, true);
+ emitter.recordSourceMappingStart(this);
+ if(this.nodeType == TypeScript.NodeType.Break) {
+ emitter.writeToOutput("break");
+ } else {
+ emitter.writeToOutput("continue");
+ }
+ if(this.hasExplicitTarget()) {
+ emitter.writeToOutput(" " + this.target);
+ }
+ emitter.recordSourceMappingEnd(this);
+ emitter.writeToOutput(";");
+ emitter.emitParensAndCommentsInPlace(this, false);
+ };
+ return Jump;
+ })(Statement);
+ TypeScript.Jump = Jump;
+ var WhileStatement = (function (_super) {
+ __extends(WhileStatement, _super);
+ function WhileStatement(cond) {
+ _super.call(this, TypeScript.NodeType.While);
+ this.cond = cond;
+ this.body = null;
+ }
+ WhileStatement.prototype.isLoop = function () {
+ return true;
+ };
+ WhileStatement.prototype.emit = function (emitter, tokenId, startLine) {
+ emitter.emitParensAndCommentsInPlace(this, true);
+ emitter.recordSourceMappingStart(this);
+ var temp = emitter.setInObjectLiteral(false);
+ emitter.writeToOutput("while(");
+ emitter.emitJavascript(this.cond, TypeScript.TokenID.While, false);
+ emitter.writeToOutput(")");
+ emitter.emitJavascriptStatements(this.body, false);
+ emitter.setInObjectLiteral(temp);
+ emitter.recordSourceMappingEnd(this);
+ emitter.emitParensAndCommentsInPlace(this, false);
+ };
+ WhileStatement.prototype.typeCheck = function (typeFlow) {
+ return typeFlow.typeCheckWhile(this);
+ };
+ WhileStatement.prototype.addToControlFlow = function (context) {
+ var loopHeader = context.current;
+ var loopStart = new TypeScript.BasicBlock();
+ var afterLoop = new TypeScript.BasicBlock();
+ loopHeader.addSuccessor(loopStart);
+ context.current = loopStart;
+ context.addContent(this.cond);
+ var condBlock = context.current;
+ var targetInfo = null;
+ if(this.body) {
+ context.current = new TypeScript.BasicBlock();
+ condBlock.addSuccessor(context.current);
+ context.pushStatement(this, loopStart, afterLoop);
+ context.walk(this.body, this);
+ targetInfo = context.popStatement();
+ }
+ if(!(context.noContinuation)) {
+ var loopEnd = context.current;
+ loopEnd.addSuccessor(loopStart);
+ }
+ context.current = afterLoop;
+ condBlock.addSuccessor(afterLoop);
+ context.noContinuation = false;
+ context.walker.options.goChildren = false;
+ };
+ return WhileStatement;
+ })(Statement);
+ TypeScript.WhileStatement = WhileStatement;
+ var DoWhileStatement = (function (_super) {
+ __extends(DoWhileStatement, _super);
+ function DoWhileStatement() {
+ _super.call(this, TypeScript.NodeType.DoWhile);
+ this.body = null;
+ this.whileAST = null;
+ this.cond = null;
+ }
+ DoWhileStatement.prototype.isLoop = function () {
+ return true;
+ };
+ DoWhileStatement.prototype.emit = function (emitter, tokenId, startLine) {
+ emitter.emitParensAndCommentsInPlace(this, true);
+ emitter.recordSourceMappingStart(this);
+ var temp = emitter.setInObjectLiteral(false);
+ emitter.writeToOutput("do");
+ emitter.emitJavascriptStatements(this.body, true);
+ emitter.recordSourceMappingStart(this.whileAST);
+ emitter.writeToOutput("while");
+ emitter.recordSourceMappingEnd(this.whileAST);
+ emitter.writeToOutput('(');
+ emitter.emitJavascript(this.cond, TypeScript.TokenID.CloseParen, false);
+ emitter.writeToOutput(")");
+ emitter.setInObjectLiteral(temp);
+ emitter.recordSourceMappingEnd(this);
+ emitter.writeToOutput(";");
+ emitter.emitParensAndCommentsInPlace(this, false);
+ };
+ DoWhileStatement.prototype.typeCheck = function (typeFlow) {
+ return typeFlow.typeCheckDoWhile(this);
+ };
+ DoWhileStatement.prototype.addToControlFlow = function (context) {
+ var loopHeader = context.current;
+ var loopStart = new TypeScript.BasicBlock();
+ var afterLoop = new TypeScript.BasicBlock();
+ loopHeader.addSuccessor(loopStart);
+ context.current = loopStart;
+ var targetInfo = null;
+ if(this.body) {
+ context.pushStatement(this, loopStart, afterLoop);
+ context.walk(this.body, this);
+ targetInfo = context.popStatement();
+ }
+ if(!(context.noContinuation)) {
+ var loopEnd = context.current;
+ loopEnd.addSuccessor(loopStart);
+ context.addContent(this.cond);
+ context.current = afterLoop;
+ loopEnd.addSuccessor(afterLoop);
+ } else {
+ context.addUnreachable(this.cond);
+ }
+ context.walker.options.goChildren = false;
+ };
+ return DoWhileStatement;
+ })(Statement);
+ TypeScript.DoWhileStatement = DoWhileStatement;
+ var IfStatement = (function (_super) {
+ __extends(IfStatement, _super);
+ function IfStatement(cond) {
+ _super.call(this, TypeScript.NodeType.If);
+ this.cond = cond;
+ this.elseBod = null;
+ this.statement = new ASTSpan();
+ }
+ IfStatement.prototype.isCompoundStatement = function () {
+ return true;
+ };
+ IfStatement.prototype.emit = function (emitter, tokenId, startLine) {
+ emitter.emitParensAndCommentsInPlace(this, true);
+ emitter.recordSourceMappingStart(this);
+ var temp = emitter.setInObjectLiteral(false);
+ emitter.recordSourceMappingStart(this.statement);
+ emitter.writeToOutput("if(");
+ emitter.emitJavascript(this.cond, TypeScript.TokenID.If, false);
+ emitter.writeToOutput(")");
+ emitter.recordSourceMappingEnd(this.statement);
+ emitter.emitJavascriptStatements(this.thenBod, true);
+ if(this.elseBod) {
+ if(this.elseBod.nodeType === TypeScript.NodeType.If) {
+ emitter.writeToOutput(" else ");
+ this.elseBod.emit(emitter, tokenId, false);
+ } else {
+ emitter.writeToOutput(" else");
+ emitter.emitJavascriptStatements(this.elseBod, true);
+ }
+ }
+ emitter.setInObjectLiteral(temp);
+ emitter.recordSourceMappingEnd(this);
+ emitter.emitParensAndCommentsInPlace(this, false);
+ };
+ IfStatement.prototype.typeCheck = function (typeFlow) {
+ return typeFlow.typeCheckIf(this);
+ };
+ IfStatement.prototype.addToControlFlow = function (context) {
+ this.cond.addToControlFlow(context);
+ var afterIf = new TypeScript.BasicBlock();
+ var beforeIf = context.current;
+ context.pushStatement(this, beforeIf, afterIf);
+ var hasContinuation = false;
+ context.current = new TypeScript.BasicBlock();
+ beforeIf.addSuccessor(context.current);
+ context.walk(this.thenBod, this);
+ if(!context.noContinuation) {
+ hasContinuation = true;
+ context.current.addSuccessor(afterIf);
+ }
+ if(this.elseBod) {
+ context.current = new TypeScript.BasicBlock();
+ context.noContinuation = false;
+ beforeIf.addSuccessor(context.current);
+ context.walk(this.elseBod, this);
+ if(!context.noContinuation) {
+ hasContinuation = true;
+ context.current.addSuccessor(afterIf);
+ } else {
+ if(hasContinuation) {
+ context.noContinuation = false;
+ }
+ }
+ } else {
+ beforeIf.addSuccessor(afterIf);
+ context.noContinuation = false;
+ hasContinuation = true;
+ }
+ var targetInfo = context.popStatement();
+ if(afterIf.predecessors.length > 0) {
+ context.noContinuation = false;
+ hasContinuation = true;
+ }
+ if(hasContinuation) {
+ context.current = afterIf;
+ }
+ context.walker.options.goChildren = false;
+ };
+ return IfStatement;
+ })(Statement);
+ TypeScript.IfStatement = IfStatement;
+ var ReturnStatement = (function (_super) {
+ __extends(ReturnStatement, _super);
+ function ReturnStatement() {
+ _super.call(this, TypeScript.NodeType.Return);
+ this.returnExpression = null;
+ }
+ ReturnStatement.prototype.emit = function (emitter, tokenId, startLine) {
+ emitter.emitParensAndCommentsInPlace(this, true);
+ emitter.recordSourceMappingStart(this);
+ var temp = emitter.setInObjectLiteral(false);
+ if(this.returnExpression) {
+ emitter.writeToOutput("return ");
+ emitter.emitJavascript(this.returnExpression, TypeScript.TokenID.Semicolon, false);
+ if(this.returnExpression.nodeType === TypeScript.NodeType.FuncDecl) {
+ emitter.writeToOutput(";");
+ }
+ } else {
+ emitter.writeToOutput("return;");
+ }
+ emitter.setInObjectLiteral(temp);
+ emitter.recordSourceMappingEnd(this);
+ emitter.emitParensAndCommentsInPlace(this, false);
+ };
+ ReturnStatement.prototype.addToControlFlow = function (context) {
+ _super.prototype.addToControlFlow.call(this, context);
+ context.returnStmt();
+ };
+ ReturnStatement.prototype.typeCheck = function (typeFlow) {
+ return typeFlow.typeCheckReturn(this);
+ };
+ return ReturnStatement;
+ })(Statement);
+ TypeScript.ReturnStatement = ReturnStatement;
+ var EndCode = (function (_super) {
+ __extends(EndCode, _super);
+ function EndCode() {
+ _super.call(this, TypeScript.NodeType.EndCode);
+ }
+ return EndCode;
+ })(AST);
+ TypeScript.EndCode = EndCode;
+ var ForInStatement = (function (_super) {
+ __extends(ForInStatement, _super);
+ function ForInStatement(lval, obj) {
+ _super.call(this, TypeScript.NodeType.ForIn);
+ this.lval = lval;
+ this.obj = obj;
+ this.statement = new ASTSpan();
+ if(this.lval && (this.lval.nodeType == TypeScript.NodeType.VarDecl)) {
+ (this.lval).varFlags |= TypeScript.VarFlags.AutoInit;
+ }
+ }
+ ForInStatement.prototype.isLoop = function () {
+ return true;
+ };
+ ForInStatement.prototype.isFiltered = function () {
+ if(this.body) {
+ var singleItem = null;
+ if(this.body.nodeType == TypeScript.NodeType.List) {
+ var stmts = this.body;
+ if(stmts.members.length == 1) {
+ singleItem = stmts.members[0];
+ }
+ } else {
+ singleItem = this.body;
+ }
+ if(singleItem !== null) {
+ if(singleItem.nodeType == TypeScript.NodeType.Block) {
+ var block = singleItem;
+ if((block.statements !== null) && (block.statements.members.length == 1)) {
+ singleItem = block.statements.members[0];
+ }
+ }
+ if(singleItem.nodeType == TypeScript.NodeType.If) {
+ var cond = (singleItem).cond;
+ if(cond.nodeType == TypeScript.NodeType.Call) {
+ var target = (cond).target;
+ if(target.nodeType == TypeScript.NodeType.Dot) {
+ var binex = target;
+ if((binex.operand1.nodeType == TypeScript.NodeType.Name) && (this.obj.nodeType == TypeScript.NodeType.Name) && ((binex.operand1).actualText == (this.obj).actualText)) {
+ var prop = binex.operand2;
+ if(prop.actualText == "hasOwnProperty") {
+ var args = (cond).arguments;
+ if((args !== null) && (args.members.length == 1)) {
+ var arg = args.members[0];
+ if((arg.nodeType == TypeScript.NodeType.Name) && (this.lval.nodeType == TypeScript.NodeType.Name)) {
+ if(((this.lval).actualText) == (arg).actualText) {
+ return true;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ return false;
+ };
+ ForInStatement.prototype.emit = function (emitter, tokenId, startLine) {
+ emitter.emitParensAndCommentsInPlace(this, true);
+ emitter.recordSourceMappingStart(this);
+ var temp = emitter.setInObjectLiteral(false);
+ emitter.recordSourceMappingStart(this.statement);
+ emitter.writeToOutput("for(");
+ emitter.emitJavascript(this.lval, TypeScript.TokenID.For, false);
+ emitter.writeToOutput(" in ");
+ emitter.emitJavascript(this.obj, TypeScript.TokenID.For, false);
+ emitter.writeToOutput(")");
+ emitter.recordSourceMappingEnd(this.statement);
+ emitter.emitJavascriptStatements(this.body, true);
+ emitter.setInObjectLiteral(temp);
+ emitter.recordSourceMappingEnd(this);
+ emitter.emitParensAndCommentsInPlace(this, false);
+ };
+ ForInStatement.prototype.typeCheck = function (typeFlow) {
+ if(typeFlow.checker.styleSettings.forin) {
+ if(!this.isFiltered()) {
+ typeFlow.checker.errorReporter.styleError(this, "no hasOwnProperty filter");
+ }
+ }
+ return typeFlow.typeCheckForIn(this);
+ };
+ ForInStatement.prototype.addToControlFlow = function (context) {
+ if(this.lval) {
+ context.addContent(this.lval);
+ }
+ if(this.obj) {
+ context.addContent(this.obj);
+ }
+ var loopHeader = context.current;
+ var loopStart = new TypeScript.BasicBlock();
+ var afterLoop = new TypeScript.BasicBlock();
+ loopHeader.addSuccessor(loopStart);
+ context.current = loopStart;
+ if(this.body) {
+ context.pushStatement(this, loopStart, afterLoop);
+ context.walk(this.body, this);
+ context.popStatement();
+ }
+ if(!(context.noContinuation)) {
+ var loopEnd = context.current;
+ loopEnd.addSuccessor(loopStart);
+ }
+ context.current = afterLoop;
+ context.noContinuation = false;
+ loopHeader.addSuccessor(afterLoop);
+ context.walker.options.goChildren = false;
+ };
+ return ForInStatement;
+ })(Statement);
+ TypeScript.ForInStatement = ForInStatement;
+ var ForStatement = (function (_super) {
+ __extends(ForStatement, _super);
+ function ForStatement(init) {
+ _super.call(this, TypeScript.NodeType.For);
+ this.init = init;
+ }
+ ForStatement.prototype.isLoop = function () {
+ return true;
+ };
+ ForStatement.prototype.emit = function (emitter, tokenId, startLine) {
+ emitter.emitParensAndCommentsInPlace(this, true);
+ emitter.recordSourceMappingStart(this);
+ var temp = emitter.setInObjectLiteral(false);
+ emitter.writeToOutput("for(");
+ if(this.init) {
+ if(this.init.nodeType != TypeScript.NodeType.List) {
+ emitter.emitJavascript(this.init, TypeScript.TokenID.For, false);
+ } else {
+ emitter.setInVarBlock((this.init).members.length);
+ emitter.emitJavascriptList(this.init, null, TypeScript.TokenID.For, false, false, false);
+ }
+ }
+ emitter.writeToOutput("; ");
+ emitter.emitJavascript(this.cond, TypeScript.TokenID.For, false);
+ emitter.writeToOutput("; ");
+ emitter.emitJavascript(this.incr, TypeScript.TokenID.For, false);
+ emitter.writeToOutput(")");
+ emitter.emitJavascriptStatements(this.body, true);
+ emitter.setInObjectLiteral(temp);
+ emitter.recordSourceMappingEnd(this);
+ emitter.emitParensAndCommentsInPlace(this, false);
+ };
+ ForStatement.prototype.typeCheck = function (typeFlow) {
+ return typeFlow.typeCheckFor(this);
+ };
+ ForStatement.prototype.addToControlFlow = function (context) {
+ if(this.init) {
+ context.addContent(this.init);
+ }
+ var loopHeader = context.current;
+ var loopStart = new TypeScript.BasicBlock();
+ var afterLoop = new TypeScript.BasicBlock();
+ loopHeader.addSuccessor(loopStart);
+ context.current = loopStart;
+ var condBlock = null;
+ var continueTarget = loopStart;
+ var incrBB = null;
+ if(this.incr) {
+ incrBB = new TypeScript.BasicBlock();
+ continueTarget = incrBB;
+ }
+ if(this.cond) {
+ condBlock = context.current;
+ context.addContent(this.cond);
+ context.current = new TypeScript.BasicBlock();
+ condBlock.addSuccessor(context.current);
+ }
+ var targetInfo = null;
+ if(this.body) {
+ context.pushStatement(this, continueTarget, afterLoop);
+ context.walk(this.body, this);
+ targetInfo = context.popStatement();
+ }
+ if(this.incr) {
+ if(context.noContinuation) {
+ if(incrBB.predecessors.length == 0) {
+ context.addUnreachable(this.incr);
+ }
+ } else {
+ context.current.addSuccessor(incrBB);
+ context.current = incrBB;
+ context.addContent(this.incr);
+ }
+ }
+ var loopEnd = context.current;
+ if(!(context.noContinuation)) {
+ loopEnd.addSuccessor(loopStart);
+ }
+ if(condBlock) {
+ condBlock.addSuccessor(afterLoop);
+ context.noContinuation = false;
+ }
+ if(afterLoop.predecessors.length > 0) {
+ context.noContinuation = false;
+ context.current = afterLoop;
+ }
+ context.walker.options.goChildren = false;
+ };
+ return ForStatement;
+ })(Statement);
+ TypeScript.ForStatement = ForStatement;
+ var WithStatement = (function (_super) {
+ __extends(WithStatement, _super);
+ function WithStatement(expr) {
+ _super.call(this, TypeScript.NodeType.With);
+ this.expr = expr;
+ this.withSym = null;
+ }
+ WithStatement.prototype.isCompoundStatement = function () {
+ return true;
+ };
+ WithStatement.prototype.emit = function (emitter, tokenId, startLine) {
+ emitter.emitParensAndCommentsInPlace(this, true);
+ emitter.recordSourceMappingStart(this);
+ emitter.writeToOutput("with (");
+ if(this.expr) {
+ emitter.emitJavascript(this.expr, TypeScript.TokenID.With, false);
+ }
+ emitter.writeToOutput(")");
+ emitter.emitJavascriptStatements(this.body, true);
+ emitter.recordSourceMappingEnd(this);
+ emitter.emitParensAndCommentsInPlace(this, false);
+ };
+ WithStatement.prototype.typeCheck = function (typeFlow) {
+ return typeFlow.typeCheckWith(this);
+ };
+ return WithStatement;
+ })(Statement);
+ TypeScript.WithStatement = WithStatement;
+ var SwitchStatement = (function (_super) {
+ __extends(SwitchStatement, _super);
+ function SwitchStatement(val) {
+ _super.call(this, TypeScript.NodeType.Switch);
+ this.val = val;
+ this.defaultCase = null;
+ this.statement = new ASTSpan();
+ }
+ SwitchStatement.prototype.isCompoundStatement = function () {
+ return true;
+ };
+ SwitchStatement.prototype.emit = function (emitter, tokenId, startLine) {
+ emitter.emitParensAndCommentsInPlace(this, true);
+ emitter.recordSourceMappingStart(this);
+ var temp = emitter.setInObjectLiteral(false);
+ emitter.recordSourceMappingStart(this.statement);
+ emitter.writeToOutput("switch(");
+ emitter.emitJavascript(this.val, TypeScript.TokenID.Identifier, false);
+ emitter.writeToOutput(")");
+ emitter.recordSourceMappingEnd(this.statement);
+ emitter.writeLineToOutput(" {");
+ emitter.indenter.increaseIndent();
+ var casesLen = this.caseList.members.length;
+ for(var i = 0; i < casesLen; i++) {
+ var caseExpr = this.caseList.members[i];
+ emitter.emitJavascript(caseExpr, TypeScript.TokenID.Case, true);
+ }
+ emitter.indenter.decreaseIndent();
+ emitter.emitIndent();
+ emitter.writeToOutput("}");
+ emitter.setInObjectLiteral(temp);
+ emitter.recordSourceMappingEnd(this);
+ emitter.emitParensAndCommentsInPlace(this, false);
+ };
+ SwitchStatement.prototype.typeCheck = function (typeFlow) {
+ var len = this.caseList.members.length;
+ this.val = typeFlow.typeCheck(this.val);
+ for(var i = 0; i < len; i++) {
+ this.caseList.members[i] = typeFlow.typeCheck(this.caseList.members[i]);
+ }
+ this.defaultCase = typeFlow.typeCheck(this.defaultCase);
+ this.type = typeFlow.voidType;
+ return this;
+ };
+ SwitchStatement.prototype.addToControlFlow = function (context) {
+ var condBlock = context.current;
+ context.addContent(this.val);
+ var execBlock = new TypeScript.BasicBlock();
+ var afterSwitch = new TypeScript.BasicBlock();
+ condBlock.addSuccessor(execBlock);
+ context.pushSwitch(execBlock);
+ context.current = execBlock;
+ context.pushStatement(this, execBlock, afterSwitch);
+ context.walk(this.caseList, this);
+ context.popSwitch();
+ var targetInfo = context.popStatement();
+ var hasCondContinuation = (this.defaultCase == null);
+ if(this.defaultCase == null) {
+ condBlock.addSuccessor(afterSwitch);
+ }
+ if(afterSwitch.predecessors.length > 0) {
+ context.noContinuation = false;
+ context.current = afterSwitch;
+ } else {
+ context.noContinuation = true;
+ }
+ context.walker.options.goChildren = false;
+ };
+ return SwitchStatement;
+ })(Statement);
+ TypeScript.SwitchStatement = SwitchStatement;
+ var CaseStatement = (function (_super) {
+ __extends(CaseStatement, _super);
+ function CaseStatement() {
+ _super.call(this, TypeScript.NodeType.Case);
+ this.expr = null;
+ }
+ CaseStatement.prototype.emit = function (emitter, tokenId, startLine) {
+ emitter.emitParensAndCommentsInPlace(this, true);
+ emitter.recordSourceMappingStart(this);
+ if(this.expr) {
+ emitter.writeToOutput("case ");
+ emitter.emitJavascript(this.expr, TypeScript.TokenID.Identifier, false);
+ } else {
+ emitter.writeToOutput("default");
+ }
+ emitter.writeToOutput(":");
+ if(this.body.members.length == 1 && this.body.members[0].nodeType == TypeScript.NodeType.Block) {
+ emitter.emitJavascriptStatements(this.body, false);
+ } else {
+ emitter.writeLineToOutput("");
+ emitter.indenter.increaseIndent();
+ emitter.emitBareJavascriptStatements(this.body);
+ emitter.indenter.decreaseIndent();
+ }
+ emitter.recordSourceMappingEnd(this);
+ emitter.emitParensAndCommentsInPlace(this, false);
+ };
+ CaseStatement.prototype.typeCheck = function (typeFlow) {
+ this.expr = typeFlow.typeCheck(this.expr);
+ typeFlow.typeCheck(this.body);
+ this.type = typeFlow.voidType;
+ return this;
+ };
+ CaseStatement.prototype.addToControlFlow = function (context) {
+ var execBlock = new TypeScript.BasicBlock();
+ var sw = context.currentSwitch[context.currentSwitch.length - 1];
+ if(this.expr) {
+ var exprBlock = new TypeScript.BasicBlock();
+ context.current = exprBlock;
+ sw.addSuccessor(exprBlock);
+ context.addContent(this.expr);
+ exprBlock.addSuccessor(execBlock);
+ } else {
+ sw.addSuccessor(execBlock);
+ }
+ context.current = execBlock;
+ if(this.body) {
+ context.walk(this.body, this);
+ }
+ context.noContinuation = false;
+ context.walker.options.goChildren = false;
+ };
+ return CaseStatement;
+ })(Statement);
+ TypeScript.CaseStatement = CaseStatement;
+ var TypeReference = (function (_super) {
+ __extends(TypeReference, _super);
+ function TypeReference(term, arrayCount) {
+ _super.call(this, TypeScript.NodeType.TypeRef);
+ this.term = term;
+ this.arrayCount = arrayCount;
+ }
+ TypeReference.prototype.emit = function (emitter, tokenId, startLine) {
+ throw new Error("should not emit a type ref");
+ };
+ TypeReference.prototype.typeCheck = function (typeFlow) {
+ var prevInTCTR = typeFlow.inTypeRefTypeCheck;
+ typeFlow.inTypeRefTypeCheck = true;
+ var typeLink = TypeScript.getTypeLink(this, typeFlow.checker, true);
+ typeFlow.checker.resolveTypeLink(typeFlow.scope, typeLink, false);
+ if(this.term) {
+ typeFlow.typeCheck(this.term);
+ }
+ typeFlow.checkForVoidConstructor(typeLink.type, this);
+ this.type = typeLink.type;
+ if(this.term) {
+ this.term.type = this.type;
+ }
+ typeFlow.inTypeRefTypeCheck = prevInTCTR;
+ return this;
+ };
+ return TypeReference;
+ })(AST);
+ TypeScript.TypeReference = TypeReference;
+ var TryFinally = (function (_super) {
+ __extends(TryFinally, _super);
+ function TryFinally(tryNode, finallyNode) {
+ _super.call(this, TypeScript.NodeType.TryFinally);
+ this.tryNode = tryNode;
+ this.finallyNode = finallyNode;
+ }
+ TryFinally.prototype.isCompoundStatement = function () {
+ return true;
+ };
+ TryFinally.prototype.emit = function (emitter, tokenId, startLine) {
+ emitter.recordSourceMappingStart(this);
+ emitter.emitJavascript(this.tryNode, TypeScript.TokenID.Try, false);
+ emitter.emitJavascript(this.finallyNode, TypeScript.TokenID.Finally, false);
+ emitter.recordSourceMappingEnd(this);
+ };
+ TryFinally.prototype.typeCheck = function (typeFlow) {
+ this.tryNode = typeFlow.typeCheck(this.tryNode);
+ this.finallyNode = typeFlow.typeCheck(this.finallyNode);
+ this.type = typeFlow.voidType;
+ return this;
+ };
+ TryFinally.prototype.addToControlFlow = function (context) {
+ var afterFinally = new TypeScript.BasicBlock();
+ context.walk(this.tryNode, this);
+ var finBlock = new TypeScript.BasicBlock();
+ if(context.current) {
+ context.current.addSuccessor(finBlock);
+ }
+ context.current = finBlock;
+ context.pushStatement(this, null, afterFinally);
+ context.walk(this.finallyNode, this);
+ if(!context.noContinuation && context.current) {
+ context.current.addSuccessor(afterFinally);
+ }
+ if(afterFinally.predecessors.length > 0) {
+ context.current = afterFinally;
+ } else {
+ context.noContinuation = true;
+ }
+ context.popStatement();
+ context.walker.options.goChildren = false;
+ };
+ return TryFinally;
+ })(Statement);
+ TypeScript.TryFinally = TryFinally;
+ var TryCatch = (function (_super) {
+ __extends(TryCatch, _super);
+ function TryCatch(tryNode, catchNode) {
+ _super.call(this, TypeScript.NodeType.TryCatch);
+ this.tryNode = tryNode;
+ this.catchNode = catchNode;
+ }
+ TryCatch.prototype.isCompoundStatement = function () {
+ return true;
+ };
+ TryCatch.prototype.emit = function (emitter, tokenId, startLine) {
+ emitter.emitParensAndCommentsInPlace(this, true);
+ emitter.recordSourceMappingStart(this);
+ emitter.emitJavascript(this.tryNode, TypeScript.TokenID.Try, false);
+ emitter.emitJavascript(this.catchNode, TypeScript.TokenID.Catch, false);
+ emitter.recordSourceMappingEnd(this);
+ emitter.emitParensAndCommentsInPlace(this, false);
+ };
+ TryCatch.prototype.addToControlFlow = function (context) {
+ var beforeTry = context.current;
+ var tryBlock = new TypeScript.BasicBlock();
+ beforeTry.addSuccessor(tryBlock);
+ context.current = tryBlock;
+ var afterTryCatch = new TypeScript.BasicBlock();
+ context.pushStatement(this, null, afterTryCatch);
+ context.walk(this.tryNode, this);
+ if(!context.noContinuation) {
+ if(context.current) {
+ context.current.addSuccessor(afterTryCatch);
+ }
+ }
+ context.current = new TypeScript.BasicBlock();
+ beforeTry.addSuccessor(context.current);
+ context.walk(this.catchNode, this);
+ context.popStatement();
+ if(!context.noContinuation) {
+ if(context.current) {
+ context.current.addSuccessor(afterTryCatch);
+ }
+ }
+ context.current = afterTryCatch;
+ context.walker.options.goChildren = false;
+ };
+ TryCatch.prototype.typeCheck = function (typeFlow) {
+ this.tryNode = typeFlow.typeCheck(this.tryNode);
+ this.catchNode = typeFlow.typeCheck(this.catchNode);
+ this.type = typeFlow.voidType;
+ return this;
+ };
+ return TryCatch;
+ })(Statement);
+ TypeScript.TryCatch = TryCatch;
+ var Try = (function (_super) {
+ __extends(Try, _super);
+ function Try(body) {
+ _super.call(this, TypeScript.NodeType.Try);
+ this.body = body;
+ }
+ Try.prototype.emit = function (emitter, tokenId, startLine) {
+ emitter.emitParensAndCommentsInPlace(this, true);
+ emitter.recordSourceMappingStart(this);
+ emitter.writeToOutput("try ");
+ emitter.emitJavascript(this.body, TypeScript.TokenID.Try, false);
+ emitter.recordSourceMappingEnd(this);
+ emitter.emitParensAndCommentsInPlace(this, false);
+ };
+ Try.prototype.typeCheck = function (typeFlow) {
+ this.body = typeFlow.typeCheck(this.body);
+ return this;
+ };
+ Try.prototype.addToControlFlow = function (context) {
+ if(this.body) {
+ context.walk(this.body, this);
+ }
+ context.walker.options.goChildren = false;
+ context.noContinuation = false;
+ };
+ return Try;
+ })(Statement);
+ TypeScript.Try = Try;
+ var Catch = (function (_super) {
+ __extends(Catch, _super);
+ function Catch(param, body) {
+ _super.call(this, TypeScript.NodeType.Catch);
+ this.param = param;
+ this.body = body;
+ this.statement = new ASTSpan();
+ this.containedScope = null;
+ if(this.param) {
+ this.param.varFlags |= TypeScript.VarFlags.AutoInit;
+ }
+ }
+ Catch.prototype.emit = function (emitter, tokenId, startLine) {
+ emitter.emitParensAndCommentsInPlace(this, true);
+ emitter.recordSourceMappingStart(this);
+ emitter.writeToOutput(" ");
+ emitter.recordSourceMappingStart(this.statement);
+ emitter.writeToOutput("catch (");
+ emitter.emitJavascript(this.param, TypeScript.TokenID.OpenParen, false);
+ emitter.writeToOutput(")");
+ emitter.recordSourceMappingEnd(this.statement);
+ emitter.emitJavascript(this.body, TypeScript.TokenID.Catch, false);
+ emitter.recordSourceMappingEnd(this);
+ emitter.emitParensAndCommentsInPlace(this, false);
+ };
+ Catch.prototype.addToControlFlow = function (context) {
+ if(this.param) {
+ context.addContent(this.param);
+ var bodBlock = new TypeScript.BasicBlock();
+ context.current.addSuccessor(bodBlock);
+ context.current = bodBlock;
+ }
+ if(this.body) {
+ context.walk(this.body, this);
+ }
+ context.noContinuation = false;
+ context.walker.options.goChildren = false;
+ };
+ Catch.prototype.typeCheck = function (typeFlow) {
+ var prevScope = typeFlow.scope;
+ typeFlow.scope = this.containedScope;
+ this.param = typeFlow.typeCheck(this.param);
+ var exceptVar = new TypeScript.ValueLocation();
+ var varSym = new TypeScript.VariableSymbol((this.param).id.text, this.param.minChar, typeFlow.checker.locationInfo.unitIndex, exceptVar);
+ exceptVar.symbol = varSym;
+ exceptVar.typeLink = new TypeScript.TypeLink();
+ exceptVar.typeLink.type = typeFlow.anyType;
+ var thisFnc = typeFlow.thisFnc;
+ if(thisFnc && thisFnc.type) {
+ exceptVar.symbol.container = thisFnc.type.symbol;
+ } else {
+ exceptVar.symbol.container = null;
+ }
+ this.param.sym = exceptVar.symbol;
+ typeFlow.scope.enter(exceptVar.symbol.container, this.param, exceptVar.symbol, typeFlow.checker.errorReporter, false, false, false);
+ this.body = typeFlow.typeCheck(this.body);
+ if(typeFlow.checker.inProvisionalTypecheckMode()) {
+ var table = typeFlow.scope.getTable();
+ (table).secondaryTable.table[exceptVar.symbol.name] = undefined;
+ }
+ this.type = typeFlow.voidType;
+ typeFlow.scope = prevScope;
+ return this;
+ };
+ return Catch;
+ })(Statement);
+ TypeScript.Catch = Catch;
+ var Finally = (function (_super) {
+ __extends(Finally, _super);
+ function Finally(body) {
+ _super.call(this, TypeScript.NodeType.Finally);
+ this.body = body;
+ }
+ Finally.prototype.emit = function (emitter, tokenId, startLine) {
+ emitter.emitParensAndCommentsInPlace(this, true);
+ emitter.recordSourceMappingStart(this);
+ emitter.writeToOutput("finally");
+ emitter.emitJavascript(this.body, TypeScript.TokenID.Finally, false);
+ emitter.recordSourceMappingEnd(this);
+ emitter.emitParensAndCommentsInPlace(this, false);
+ };
+ Finally.prototype.addToControlFlow = function (context) {
+ if(this.body) {
+ context.walk(this.body, this);
+ }
+ context.walker.options.goChildren = false;
+ context.noContinuation = false;
+ };
+ Finally.prototype.typeCheck = function (typeFlow) {
+ this.body = typeFlow.typeCheck(this.body);
+ return this;
+ };
+ return Finally;
+ })(Statement);
+ TypeScript.Finally = Finally;
+ var Comment = (function (_super) {
+ __extends(Comment, _super);
+ function Comment(content, isBlockComment, endsLine) {
+ _super.call(this, TypeScript.NodeType.Comment);
+ this.content = content;
+ this.isBlockComment = isBlockComment;
+ this.endsLine = endsLine;
+ this.text = null;
+ this.docCommentText = null;
+ }
+ Comment.prototype.getText = function () {
+ if(this.text == null) {
+ if(this.isBlockComment) {
+ this.text = this.content.split("\n");
+ for(var i = 0; i < this.text.length; i++) {
+ this.text[i] = this.text[i].replace(/^\s+|\s+$/g, '');
+ }
+ } else {
+ this.text = [
+ (this.content.replace(/^\s+|\s+$/g, ''))
+ ];
+ }
+ }
+ return this.text;
+ };
+ Comment.prototype.isDocComment = function () {
+ if(this.isBlockComment) {
+ return this.content.charAt(2) == "*";
+ }
+ return false;
+ };
+ Comment.prototype.getDocCommentText = function () {
+ if(this.docCommentText == null) {
+ this.docCommentText = Comment.cleanJSDocComment(this.content);
+ }
+ return this.docCommentText;
+ };
+ Comment.consumeLeadingSpace = function consumeLeadingSpace(line, startIndex, maxSpacesToRemove) {
+ var endIndex = line.length;
+ if(maxSpacesToRemove != undefined) {
+ endIndex = TypeScript.min(startIndex + maxSpacesToRemove, endIndex);
+ }
+ for(; startIndex < endIndex; startIndex++) {
+ var charCode = line.charCodeAt(startIndex);
+ if(charCode != TypeScript.LexCodeSpace && charCode != TypeScript.LexCodeTAB) {
+ return startIndex;
+ }
+ }
+ if(endIndex != line.length) {
+ return endIndex;
+ }
+ return -1;
+ }
+ Comment.isSpaceChar = function isSpaceChar(line, index) {
+ var length = line.length;
+ if(index < length) {
+ var charCode = line.charCodeAt(index);
+ return charCode == TypeScript.LexCodeSpace || charCode == TypeScript.LexCodeTAB;
+ }
+ return index == length;
+ }
+ Comment.cleanDocCommentLine = function cleanDocCommentLine(line, jsDocStyleComment, jsDocLineSpaceToRemove) {
+ var nonSpaceIndex = Comment.consumeLeadingSpace(line, 0);
+ if(nonSpaceIndex != -1) {
+ var jsDocSpacesRemoved = nonSpaceIndex;
+ if(jsDocStyleComment && line.charAt(nonSpaceIndex) == '*') {
+ var startIndex = nonSpaceIndex + 1;
+ nonSpaceIndex = Comment.consumeLeadingSpace(line, startIndex, jsDocLineSpaceToRemove);
+ if(nonSpaceIndex != -1) {
+ jsDocSpacesRemoved = nonSpaceIndex - startIndex;
+ } else {
+ return null;
+ }
+ }
+ return {
+ minChar: nonSpaceIndex,
+ limChar: line.charAt(line.length - 1) == "\r" ? line.length - 1 : line.length,
+ jsDocSpacesRemoved: jsDocSpacesRemoved
+ };
+ }
+ return null;
+ }
+ Comment.cleanJSDocComment = function cleanJSDocComment(content, spacesToRemove) {
+ var docCommentLines = [];
+ content = content.replace("/**", "");
+ if(content.length >= 2 && content.charAt(content.length - 1) == "/" && content.charAt(content.length - 2) == "*") {
+ content = content.substring(0, content.length - 2);
+ }
+ var lines = content.split("\n");
+ var inParamTag = false;
+ for(var l = 0; l < lines.length; l++) {
+ var line = lines[l];
+ var cleanLinePos = Comment.cleanDocCommentLine(line, true, spacesToRemove);
+ if(!cleanLinePos) {
+ continue;
+ }
+ var docCommentText = "";
+ var prevPos = cleanLinePos.minChar;
+ for(var i = line.indexOf("@", cleanLinePos.minChar); 0 <= i && i < cleanLinePos.limChar; i = line.indexOf("@", i + 1)) {
+ var wasInParamtag = inParamTag;
+ if(line.indexOf("param", i + 1) == i + 1 && Comment.isSpaceChar(line, i + 6)) {
+ if(!wasInParamtag) {
+ docCommentText += line.substring(prevPos, i);
+ }
+ prevPos = i;
+ inParamTag = true;
+ } else {
+ if(wasInParamtag) {
+ prevPos = i;
+ inParamTag = false;
+ }
+ }
+ }
+ if(!inParamTag) {
+ docCommentText += line.substring(prevPos, cleanLinePos.limChar);
+ }
+ var newCleanPos = Comment.cleanDocCommentLine(docCommentText, false);
+ if(newCleanPos) {
+ if(spacesToRemove == undefined) {
+ spacesToRemove = cleanLinePos.jsDocSpacesRemoved;
+ }
+ docCommentLines.push(docCommentText);
+ }
+ }
+ return docCommentLines.join("\n");
+ }
+ Comment.getDocCommentText = function getDocCommentText(comments) {
+ var docCommentText = [];
+ for(var c = 0; c < comments.length; c++) {
+ var commentText = comments[c].getDocCommentText();
+ if(commentText != "") {
+ docCommentText.push(commentText);
+ }
+ }
+ return docCommentText.join("\n");
+ }
+ Comment.getParameterDocCommentText = function getParameterDocCommentText(param, fncDocComments) {
+ if(fncDocComments.length == 0 || !fncDocComments[0].isBlockComment) {
+ return "";
+ }
+ for(var i = 0; i < fncDocComments.length; i++) {
+ var commentContents = fncDocComments[i].content;
+ for(var j = commentContents.indexOf("@param", 0); 0 <= j; j = commentContents.indexOf("@param", j)) {
+ j += 6;
+ if(!Comment.isSpaceChar(commentContents, j)) {
+ continue;
+ }
+ j = Comment.consumeLeadingSpace(commentContents, j);
+ if(j == -1) {
+ break;
+ }
+ if(commentContents.charCodeAt(j) == TypeScript.LexCodeLC) {
+ j++;
+ var charCode = 0;
+ for(var curlies = 1; j < commentContents.length; j++) {
+ charCode = commentContents.charCodeAt(j);
+ if(charCode == TypeScript.LexCodeLC) {
+ curlies++;
+ continue;
+ }
+ if(charCode == TypeScript.LexCodeRC) {
+ curlies--;
+ if(curlies == 0) {
+ break;
+ } else {
+ continue;
+ }
+ }
+ if(charCode == TypeScript.LexCodeAtSign) {
+ break;
+ }
+ }
+ if(j == commentContents.length) {
+ break;
+ }
+ if(charCode == TypeScript.LexCodeAtSign) {
+ continue;
+ }
+ j = Comment.consumeLeadingSpace(commentContents, j + 1);
+ if(j == -1) {
+ break;
+ }
+ }
+ if(param != commentContents.substr(j, param.length) || !Comment.isSpaceChar(commentContents, j + param.length)) {
+ continue;
+ }
+ j = Comment.consumeLeadingSpace(commentContents, j + param.length);
+ if(j == -1) {
+ return "";
+ }
+ var endOfParam = commentContents.indexOf("@", j);
+ var paramHelpString = commentContents.substring(j, endOfParam < 0 ? commentContents.length : endOfParam);
+ var paramSpacesToRemove = undefined;
+ var paramLineIndex = commentContents.substring(0, j).lastIndexOf("\n") + 1;
+ if(paramLineIndex != 0) {
+ if(paramLineIndex < j && commentContents.charAt(paramLineIndex + 1) == "\r") {
+ paramLineIndex++;
+ }
+ }
+ var startSpaceRemovalIndex = Comment.consumeLeadingSpace(commentContents, paramLineIndex);
+ if(startSpaceRemovalIndex != j && commentContents.charAt(startSpaceRemovalIndex) == "*") {
+ paramSpacesToRemove = j - startSpaceRemovalIndex - 1;
+ }
+ return Comment.cleanJSDocComment(paramHelpString, paramSpacesToRemove);
+ }
+ }
+ return "";
+ }
+ Comment.getDocCommentTextOfSignatures = function getDocCommentTextOfSignatures(signatures) {
+ var comments = [];
+ for(var i = 0; i < signatures.length; i++) {
+ var signatureDocComment = TypeScript.Comment.getDocCommentText(signatures[i].declAST.getDocComments());
+ if(signatureDocComment != "") {
+ comments.push(signatureDocComment);
+ }
+ }
+ return comments.join("\n");
+ }
+ return Comment;
+ })(AST);
+ TypeScript.Comment = Comment;
+ var DebuggerStatement = (function (_super) {
+ __extends(DebuggerStatement, _super);
+ function DebuggerStatement() {
+ _super.call(this, TypeScript.NodeType.Debugger);
+ }
+ DebuggerStatement.prototype.emit = function (emitter, tokenId, startLine) {
+ emitter.emitParensAndCommentsInPlace(this, true);
+ emitter.recordSourceMappingStart(this);
+ emitter.writeLineToOutput("debugger;");
+ emitter.recordSourceMappingEnd(this);
+ emitter.emitParensAndCommentsInPlace(this, false);
+ };
+ return DebuggerStatement;
+ })(Statement);
+ TypeScript.DebuggerStatement = DebuggerStatement;
+})(TypeScript || (TypeScript = {}));
+var TypeScript;
+(function (TypeScript) {
+ var AstWalkOptions = (function () {
+ function AstWalkOptions() {
+ this.goChildren = true;
+ this.goNextSibling = true;
+ this.reverseSiblings = false;
+ }
+ AstWalkOptions.prototype.stopWalk = function (stop) {
+ if (typeof stop === "undefined") { stop = true; }
+ this.goChildren = !stop;
+ this.goNextSibling = !stop;
+ };
+ return AstWalkOptions;
+ })();
+ TypeScript.AstWalkOptions = AstWalkOptions;
+ var AstWalker = (function () {
+ function AstWalker(childrenWalkers, pre, post, options, state) {
+ this.childrenWalkers = childrenWalkers;
+ this.pre = pre;
+ this.post = post;
+ this.options = options;
+ this.state = state;
+ }
+ AstWalker.prototype.walk = function (ast, parent) {
+ var preAst = this.pre(ast, parent, this);
+ if(preAst === undefined) {
+ preAst = ast;
+ }
+ if(this.options.goChildren) {
+ var svGoSib = this.options.goNextSibling;
+ this.options.goNextSibling = true;
+ this.childrenWalkers[ast.nodeType](ast, parent, this);
+ this.options.goNextSibling = svGoSib;
+ } else {
+ this.options.goChildren = true;
+ }
+ if(this.post) {
+ var postAst = this.post(preAst, parent, this);
+ if(postAst === undefined) {
+ postAst = preAst;
+ }
+ return postAst;
+ } else {
+ return preAst;
+ }
+ };
+ return AstWalker;
+ })();
+ var AstWalkerFactory = (function () {
+ function AstWalkerFactory() {
+ this.childrenWalkers = [];
+ this.initChildrenWalkers();
+ }
+ AstWalkerFactory.prototype.walk = function (ast, pre, post, options, state) {
+ return this.getWalker(pre, post, options, state).walk(ast, null);
+ };
+ AstWalkerFactory.prototype.getWalker = function (pre, post, options, state) {
+ return this.getSlowWalker(pre, post, options, state);
+ };
+ AstWalkerFactory.prototype.getSlowWalker = function (pre, post, options, state) {
+ if(!options) {
+ options = new AstWalkOptions();
+ }
+ return new AstWalker(this.childrenWalkers, pre, post, options, state);
+ };
+ AstWalkerFactory.prototype.initChildrenWalkers = function () {
+ this.childrenWalkers[TypeScript.NodeType.None] = ChildrenWalkers.walkNone;
+ this.childrenWalkers[TypeScript.NodeType.Empty] = ChildrenWalkers.walkNone;
+ this.childrenWalkers[TypeScript.NodeType.EmptyExpr] = ChildrenWalkers.walkNone;
+ this.childrenWalkers[TypeScript.NodeType.True] = ChildrenWalkers.walkNone;
+ this.childrenWalkers[TypeScript.NodeType.False] = ChildrenWalkers.walkNone;
+ this.childrenWalkers[TypeScript.NodeType.This] = ChildrenWalkers.walkNone;
+ this.childrenWalkers[TypeScript.NodeType.Super] = ChildrenWalkers.walkNone;
+ this.childrenWalkers[TypeScript.NodeType.QString] = ChildrenWalkers.walkNone;
+ this.childrenWalkers[TypeScript.NodeType.Regex] = ChildrenWalkers.walkNone;
+ this.childrenWalkers[TypeScript.NodeType.Null] = ChildrenWalkers.walkNone;
+ this.childrenWalkers[TypeScript.NodeType.ArrayLit] = ChildrenWalkers.walkUnaryExpressionChildren;
+ this.childrenWalkers[TypeScript.NodeType.ObjectLit] = ChildrenWalkers.walkUnaryExpressionChildren;
+ this.childrenWalkers[TypeScript.NodeType.Void] = ChildrenWalkers.walkUnaryExpressionChildren;
+ this.childrenWalkers[TypeScript.NodeType.Comma] = ChildrenWalkers.walkBinaryExpressionChildren;
+ this.childrenWalkers[TypeScript.NodeType.Pos] = ChildrenWalkers.walkUnaryExpressionChildren;
+ this.childrenWalkers[TypeScript.NodeType.Neg] = ChildrenWalkers.walkUnaryExpressionChildren;
+ this.childrenWalkers[TypeScript.NodeType.Delete] = ChildrenWalkers.walkUnaryExpressionChildren;
+ this.childrenWalkers[TypeScript.NodeType.Await] = ChildrenWalkers.walkUnaryExpressionChildren;
+ this.childrenWalkers[TypeScript.NodeType.In] = ChildrenWalkers.walkBinaryExpressionChildren;
+ this.childrenWalkers[TypeScript.NodeType.Dot] = ChildrenWalkers.walkBinaryExpressionChildren;
+ this.childrenWalkers[TypeScript.NodeType.From] = ChildrenWalkers.walkBinaryExpressionChildren;
+ this.childrenWalkers[TypeScript.NodeType.Is] = ChildrenWalkers.walkBinaryExpressionChildren;
+ this.childrenWalkers[TypeScript.NodeType.InstOf] = ChildrenWalkers.walkBinaryExpressionChildren;
+ this.childrenWalkers[TypeScript.NodeType.Typeof] = ChildrenWalkers.walkUnaryExpressionChildren;
+ this.childrenWalkers[TypeScript.NodeType.NumberLit] = ChildrenWalkers.walkNone;
+ this.childrenWalkers[TypeScript.NodeType.Name] = ChildrenWalkers.walkNone;
+ this.childrenWalkers[TypeScript.NodeType.TypeRef] = ChildrenWalkers.walkTypeReferenceChildren;
+ this.childrenWalkers[TypeScript.NodeType.Index] = ChildrenWalkers.walkBinaryExpressionChildren;
+ this.childrenWalkers[TypeScript.NodeType.Call] = ChildrenWalkers.walkCallExpressionChildren;
+ this.childrenWalkers[TypeScript.NodeType.New] = ChildrenWalkers.walkCallExpressionChildren;
+ this.childrenWalkers[TypeScript.NodeType.Asg] = ChildrenWalkers.walkBinaryExpressionChildren;
+ this.childrenWalkers[TypeScript.NodeType.AsgAdd] = ChildrenWalkers.walkBinaryExpressionChildren;
+ this.childrenWalkers[TypeScript.NodeType.AsgSub] = ChildrenWalkers.walkBinaryExpressionChildren;
+ this.childrenWalkers[TypeScript.NodeType.AsgDiv] = ChildrenWalkers.walkBinaryExpressionChildren;
+ this.childrenWalkers[TypeScript.NodeType.AsgMul] = ChildrenWalkers.walkBinaryExpressionChildren;
+ this.childrenWalkers[TypeScript.NodeType.AsgMod] = ChildrenWalkers.walkBinaryExpressionChildren;
+ this.childrenWalkers[TypeScript.NodeType.AsgAnd] = ChildrenWalkers.walkBinaryExpressionChildren;
+ this.childrenWalkers[TypeScript.NodeType.AsgXor] = ChildrenWalkers.walkBinaryExpressionChildren;
+ this.childrenWalkers[TypeScript.NodeType.AsgOr] = ChildrenWalkers.walkBinaryExpressionChildren;
+ this.childrenWalkers[TypeScript.NodeType.AsgLsh] = ChildrenWalkers.walkBinaryExpressionChildren;
+ this.childrenWalkers[TypeScript.NodeType.AsgRsh] = ChildrenWalkers.walkBinaryExpressionChildren;
+ this.childrenWalkers[TypeScript.NodeType.AsgRs2] = ChildrenWalkers.walkBinaryExpressionChildren;
+ this.childrenWalkers[TypeScript.NodeType.ConditionalExpression] = ChildrenWalkers.walkTrinaryExpressionChildren;
+ this.childrenWalkers[TypeScript.NodeType.LogOr] = ChildrenWalkers.walkBinaryExpressionChildren;
+ this.childrenWalkers[TypeScript.NodeType.LogAnd] = ChildrenWalkers.walkBinaryExpressionChildren;
+ this.childrenWalkers[TypeScript.NodeType.Or] = ChildrenWalkers.walkBinaryExpressionChildren;
+ this.childrenWalkers[TypeScript.NodeType.Xor] = ChildrenWalkers.walkBinaryExpressionChildren;
+ this.childrenWalkers[TypeScript.NodeType.And] = ChildrenWalkers.walkBinaryExpressionChildren;
+ this.childrenWalkers[TypeScript.NodeType.Eq] = ChildrenWalkers.walkBinaryExpressionChildren;
+ this.childrenWalkers[TypeScript.NodeType.Ne] = ChildrenWalkers.walkBinaryExpressionChildren;
+ this.childrenWalkers[TypeScript.NodeType.Eqv] = ChildrenWalkers.walkBinaryExpressionChildren;
+ this.childrenWalkers[TypeScript.NodeType.NEqv] = ChildrenWalkers.walkBinaryExpressionChildren;
+ this.childrenWalkers[TypeScript.NodeType.Lt] = ChildrenWalkers.walkBinaryExpressionChildren;
+ this.childrenWalkers[TypeScript.NodeType.Le] = ChildrenWalkers.walkBinaryExpressionChildren;
+ this.childrenWalkers[TypeScript.NodeType.Gt] = ChildrenWalkers.walkBinaryExpressionChildren;
+ this.childrenWalkers[TypeScript.NodeType.Ge] = ChildrenWalkers.walkBinaryExpressionChildren;
+ this.childrenWalkers[TypeScript.NodeType.Add] = ChildrenWalkers.walkBinaryExpressionChildren;
+ this.childrenWalkers[TypeScript.NodeType.Sub] = ChildrenWalkers.walkBinaryExpressionChildren;
+ this.childrenWalkers[TypeScript.NodeType.Mul] = ChildrenWalkers.walkBinaryExpressionChildren;
+ this.childrenWalkers[TypeScript.NodeType.Div] = ChildrenWalkers.walkBinaryExpressionChildren;
+ this.childrenWalkers[TypeScript.NodeType.Mod] = ChildrenWalkers.walkBinaryExpressionChildren;
+ this.childrenWalkers[TypeScript.NodeType.Lsh] = ChildrenWalkers.walkBinaryExpressionChildren;
+ this.childrenWalkers[TypeScript.NodeType.Rsh] = ChildrenWalkers.walkBinaryExpressionChildren;
+ this.childrenWalkers[TypeScript.NodeType.Rs2] = ChildrenWalkers.walkBinaryExpressionChildren;
+ this.childrenWalkers[TypeScript.NodeType.Not] = ChildrenWalkers.walkUnaryExpressionChildren;
+ this.childrenWalkers[TypeScript.NodeType.LogNot] = ChildrenWalkers.walkUnaryExpressionChildren;
+ this.childrenWalkers[TypeScript.NodeType.IncPre] = ChildrenWalkers.walkUnaryExpressionChildren;
+ this.childrenWalkers[TypeScript.NodeType.DecPre] = ChildrenWalkers.walkUnaryExpressionChildren;
+ this.childrenWalkers[TypeScript.NodeType.IncPost] = ChildrenWalkers.walkUnaryExpressionChildren;
+ this.childrenWalkers[TypeScript.NodeType.DecPost] = ChildrenWalkers.walkUnaryExpressionChildren;
+ this.childrenWalkers[TypeScript.NodeType.TypeAssertion] = ChildrenWalkers.walkUnaryExpressionChildren;
+ this.childrenWalkers[TypeScript.NodeType.FuncDecl] = ChildrenWalkers.walkFuncDeclChildren;
+ this.childrenWalkers[TypeScript.NodeType.Member] = ChildrenWalkers.walkBinaryExpressionChildren;
+ this.childrenWalkers[TypeScript.NodeType.VarDecl] = ChildrenWalkers.walkBoundDeclChildren;
+ this.childrenWalkers[TypeScript.NodeType.ArgDecl] = ChildrenWalkers.walkBoundDeclChildren;
+ this.childrenWalkers[TypeScript.NodeType.Return] = ChildrenWalkers.walkReturnStatementChildren;
+ this.childrenWalkers[TypeScript.NodeType.Break] = ChildrenWalkers.walkNone;
+ this.childrenWalkers[TypeScript.NodeType.Continue] = ChildrenWalkers.walkNone;
+ this.childrenWalkers[TypeScript.NodeType.Throw] = ChildrenWalkers.walkUnaryExpressionChildren;
+ this.childrenWalkers[TypeScript.NodeType.For] = ChildrenWalkers.walkForStatementChildren;
+ this.childrenWalkers[TypeScript.NodeType.ForIn] = ChildrenWalkers.walkForInStatementChildren;
+ this.childrenWalkers[TypeScript.NodeType.If] = ChildrenWalkers.walkIfStatementChildren;
+ this.childrenWalkers[TypeScript.NodeType.While] = ChildrenWalkers.walkWhileStatementChildren;
+ this.childrenWalkers[TypeScript.NodeType.DoWhile] = ChildrenWalkers.walkDoWhileStatementChildren;
+ this.childrenWalkers[TypeScript.NodeType.Block] = ChildrenWalkers.walkBlockChildren;
+ this.childrenWalkers[TypeScript.NodeType.Case] = ChildrenWalkers.walkCaseStatementChildren;
+ this.childrenWalkers[TypeScript.NodeType.Switch] = ChildrenWalkers.walkSwitchStatementChildren;
+ this.childrenWalkers[TypeScript.NodeType.Try] = ChildrenWalkers.walkTryChildren;
+ this.childrenWalkers[TypeScript.NodeType.TryCatch] = ChildrenWalkers.walkTryCatchChildren;
+ this.childrenWalkers[TypeScript.NodeType.TryFinally] = ChildrenWalkers.walkTryFinallyChildren;
+ this.childrenWalkers[TypeScript.NodeType.Finally] = ChildrenWalkers.walkFinallyChildren;
+ this.childrenWalkers[TypeScript.NodeType.Catch] = ChildrenWalkers.walkCatchChildren;
+ this.childrenWalkers[TypeScript.NodeType.List] = ChildrenWalkers.walkListChildren;
+ this.childrenWalkers[TypeScript.NodeType.Script] = ChildrenWalkers.walkScriptChildren;
+ this.childrenWalkers[TypeScript.NodeType.ClassDeclaration] = ChildrenWalkers.walkClassDeclChildren;
+ this.childrenWalkers[TypeScript.NodeType.InterfaceDeclaration] = ChildrenWalkers.walkTypeDeclChildren;
+ this.childrenWalkers[TypeScript.NodeType.ModuleDeclaration] = ChildrenWalkers.walkModuleDeclChildren;
+ this.childrenWalkers[TypeScript.NodeType.ImportDeclaration] = ChildrenWalkers.walkImportDeclChildren;
+ this.childrenWalkers[TypeScript.NodeType.With] = ChildrenWalkers.walkWithStatementChildren;
+ this.childrenWalkers[TypeScript.NodeType.Label] = ChildrenWalkers.walkLabelChildren;
+ this.childrenWalkers[TypeScript.NodeType.LabeledStatement] = ChildrenWalkers.walkLabeledStatementChildren;
+ this.childrenWalkers[TypeScript.NodeType.EBStart] = ChildrenWalkers.walkNone;
+ this.childrenWalkers[TypeScript.NodeType.GotoEB] = ChildrenWalkers.walkNone;
+ this.childrenWalkers[TypeScript.NodeType.EndCode] = ChildrenWalkers.walkNone;
+ this.childrenWalkers[TypeScript.NodeType.Error] = ChildrenWalkers.walkNone;
+ this.childrenWalkers[TypeScript.NodeType.Comment] = ChildrenWalkers.walkNone;
+ this.childrenWalkers[TypeScript.NodeType.Debugger] = ChildrenWalkers.walkNone;
+ for(var e in (TypeScript.NodeType)._map) {
+ if((this.childrenWalkers)[e] === undefined) {
+ throw new Error("initWalkers function is not up to date with enum content!");
+ }
+ }
+ };
+ return AstWalkerFactory;
+ })();
+ TypeScript.AstWalkerFactory = AstWalkerFactory;
+ var globalAstWalkerFactory;
+ function getAstWalkerFactory() {
+ if(!globalAstWalkerFactory) {
+ globalAstWalkerFactory = new AstWalkerFactory();
+ }
+ return globalAstWalkerFactory;
+ }
+ TypeScript.getAstWalkerFactory = getAstWalkerFactory;
+ var ChildrenWalkers;
+ (function (ChildrenWalkers) {
+ function walkNone(preAst, parent, walker) {
+ }
+ ChildrenWalkers.walkNone = walkNone;
+ function walkListChildren(preAst, parent, walker) {
+ var len = preAst.members.length;
+ if(walker.options.reverseSiblings) {
+ for(var i = len - 1; i >= 0; i--) {
+ if(walker.options.goNextSibling) {
+ preAst.members[i] = walker.walk(preAst.members[i], preAst);
+ }
+ }
+ } else {
+ for(var i = 0; i < len; i++) {
+ if(walker.options.goNextSibling) {
+ preAst.members[i] = walker.walk(preAst.members[i], preAst);
+ }
+ }
+ }
+ }
+ ChildrenWalkers.walkListChildren = walkListChildren;
+ function walkUnaryExpressionChildren(preAst, parent, walker) {
+ if(preAst.castTerm) {
+ preAst.castTerm = walker.walk(preAst.castTerm, preAst);
+ }
+ if(preAst.operand) {
+ preAst.operand = walker.walk(preAst.operand, preAst);
+ }
+ }
+ ChildrenWalkers.walkUnaryExpressionChildren = walkUnaryExpressionChildren;
+ function walkBinaryExpressionChildren(preAst, parent, walker) {
+ if(walker.options.reverseSiblings) {
+ if(preAst.operand2) {
+ preAst.operand2 = walker.walk(preAst.operand2, preAst);
+ }
+ if((preAst.operand1) && (walker.options.goNextSibling)) {
+ preAst.operand1 = walker.walk(preAst.operand1, preAst);
+ }
+ } else {
+ if(preAst.operand1) {
+ preAst.operand1 = walker.walk(preAst.operand1, preAst);
+ }
+ if((preAst.operand2) && (walker.options.goNextSibling)) {
+ preAst.operand2 = walker.walk(preAst.operand2, preAst);
+ }
+ }
+ }
+ ChildrenWalkers.walkBinaryExpressionChildren = walkBinaryExpressionChildren;
+ function walkTypeReferenceChildren(preAst, parent, walker) {
+ if(preAst.term) {
+ preAst.term = walker.walk(preAst.term, preAst);
+ }
+ }
+ ChildrenWalkers.walkTypeReferenceChildren = walkTypeReferenceChildren;
+ function walkCallExpressionChildren(preAst, parent, walker) {
+ if(!walker.options.reverseSiblings) {
+ preAst.target = walker.walk(preAst.target, preAst);
+ }
+ if(preAst.arguments && (walker.options.goNextSibling)) {
+ preAst.arguments = walker.walk(preAst.arguments, preAst);
+ }
+ if((walker.options.reverseSiblings) && (walker.options.goNextSibling)) {
+ preAst.target = walker.walk(preAst.target, preAst);
+ }
+ }
+ ChildrenWalkers.walkCallExpressionChildren = walkCallExpressionChildren;
+ function walkTrinaryExpressionChildren(preAst, parent, walker) {
+ if(preAst.operand1) {
+ preAst.operand1 = walker.walk(preAst.operand1, preAst);
+ }
+ if(preAst.operand2 && (walker.options.goNextSibling)) {
+ preAst.operand2 = walker.walk(preAst.operand2, preAst);
+ }
+ if(preAst.operand3 && (walker.options.goNextSibling)) {
+ preAst.operand3 = walker.walk(preAst.operand3, preAst);
+ }
+ }
+ ChildrenWalkers.walkTrinaryExpressionChildren = walkTrinaryExpressionChildren;
+ function walkFuncDeclChildren(preAst, parent, walker) {
+ if(preAst.name) {
+ preAst.name = walker.walk(preAst.name, preAst);
+ }
+ if(preAst.arguments && (preAst.arguments.members.length > 0) && (walker.options.goNextSibling)) {
+ preAst.arguments = walker.walk(preAst.arguments, preAst);
+ }
+ if(preAst.returnTypeAnnotation && (walker.options.goNextSibling)) {
+ preAst.returnTypeAnnotation = walker.walk(preAst.returnTypeAnnotation, preAst);
+ }
+ if(preAst.bod && (preAst.bod.members.length > 0) && (walker.options.goNextSibling)) {
+ preAst.bod = walker.walk(preAst.bod, preAst);
+ }
+ }
+ ChildrenWalkers.walkFuncDeclChildren = walkFuncDeclChildren;
+ function walkBoundDeclChildren(preAst, parent, walker) {
+ if(preAst.id) {
+ preAst.id = walker.walk(preAst.id, preAst);
+ }
+ if(preAst.init) {
+ preAst.init = walker.walk(preAst.init, preAst);
+ }
+ if((preAst.typeExpr) && (walker.options.goNextSibling)) {
+ preAst.typeExpr = walker.walk(preAst.typeExpr, preAst);
+ }
+ }
+ ChildrenWalkers.walkBoundDeclChildren = walkBoundDeclChildren;
+ function walkReturnStatementChildren(preAst, parent, walker) {
+ if(preAst.returnExpression) {
+ preAst.returnExpression = walker.walk(preAst.returnExpression, preAst);
+ }
+ }
+ ChildrenWalkers.walkReturnStatementChildren = walkReturnStatementChildren;
+ function walkForStatementChildren(preAst, parent, walker) {
+ if(preAst.init) {
+ preAst.init = walker.walk(preAst.init, preAst);
+ }
+ if(preAst.cond && walker.options.goNextSibling) {
+ preAst.cond = walker.walk(preAst.cond, preAst);
+ }
+ if(preAst.incr && walker.options.goNextSibling) {
+ preAst.incr = walker.walk(preAst.incr, preAst);
+ }
+ if(preAst.body && walker.options.goNextSibling) {
+ preAst.body = walker.walk(preAst.body, preAst);
+ }
+ }
+ ChildrenWalkers.walkForStatementChildren = walkForStatementChildren;
+ function walkForInStatementChildren(preAst, parent, walker) {
+ preAst.lval = walker.walk(preAst.lval, preAst);
+ if(walker.options.goNextSibling) {
+ preAst.obj = walker.walk(preAst.obj, preAst);
+ }
+ if(preAst.body && (walker.options.goNextSibling)) {
+ preAst.body = walker.walk(preAst.body, preAst);
+ }
+ }
+ ChildrenWalkers.walkForInStatementChildren = walkForInStatementChildren;
+ function walkIfStatementChildren(preAst, parent, walker) {
+ preAst.cond = walker.walk(preAst.cond, preAst);
+ if(preAst.thenBod && (walker.options.goNextSibling)) {
+ preAst.thenBod = walker.walk(preAst.thenBod, preAst);
+ }
+ if(preAst.elseBod && (walker.options.goNextSibling)) {
+ preAst.elseBod = walker.walk(preAst.elseBod, preAst);
+ }
+ }
+ ChildrenWalkers.walkIfStatementChildren = walkIfStatementChildren;
+ function walkWhileStatementChildren(preAst, parent, walker) {
+ preAst.cond = walker.walk(preAst.cond, preAst);
+ if(preAst.body && (walker.options.goNextSibling)) {
+ preAst.body = walker.walk(preAst.body, preAst);
+ }
+ }
+ ChildrenWalkers.walkWhileStatementChildren = walkWhileStatementChildren;
+ function walkDoWhileStatementChildren(preAst, parent, walker) {
+ preAst.cond = walker.walk(preAst.cond, preAst);
+ if(preAst.body && (walker.options.goNextSibling)) {
+ preAst.body = walker.walk(preAst.body, preAst);
+ }
+ }
+ ChildrenWalkers.walkDoWhileStatementChildren = walkDoWhileStatementChildren;
+ function walkBlockChildren(preAst, parent, walker) {
+ if(preAst.statements) {
+ preAst.statements = walker.walk(preAst.statements, preAst);
+ }
+ }
+ ChildrenWalkers.walkBlockChildren = walkBlockChildren;
+ function walkCaseStatementChildren(preAst, parent, walker) {
+ if(preAst.expr) {
+ preAst.expr = walker.walk(preAst.expr, preAst);
+ }
+ if(preAst.body && walker.options.goNextSibling) {
+ preAst.body = walker.walk(preAst.body, preAst);
+ }
+ }
+ ChildrenWalkers.walkCaseStatementChildren = walkCaseStatementChildren;
+ function walkSwitchStatementChildren(preAst, parent, walker) {
+ if(preAst.val) {
+ preAst.val = walker.walk(preAst.val, preAst);
+ }
+ if((preAst.caseList) && walker.options.goNextSibling) {
+ preAst.caseList = walker.walk(preAst.caseList, preAst);
+ }
+ }
+ ChildrenWalkers.walkSwitchStatementChildren = walkSwitchStatementChildren;
+ function walkTryChildren(preAst, parent, walker) {
+ if(preAst.body) {
+ preAst.body = walker.walk(preAst.body, preAst);
+ }
+ }
+ ChildrenWalkers.walkTryChildren = walkTryChildren;
+ function walkTryCatchChildren(preAst, parent, walker) {
+ if(preAst.tryNode) {
+ preAst.tryNode = walker.walk(preAst.tryNode, preAst);
+ }
+ if((preAst.catchNode) && walker.options.goNextSibling) {
+ preAst.catchNode = walker.walk(preAst.catchNode, preAst);
+ }
+ }
+ ChildrenWalkers.walkTryCatchChildren = walkTryCatchChildren;
+ function walkTryFinallyChildren(preAst, parent, walker) {
+ if(preAst.tryNode) {
+ preAst.tryNode = walker.walk(preAst.tryNode, preAst);
+ }
+ if(preAst.finallyNode && walker.options.goNextSibling) {
+ preAst.finallyNode = walker.walk(preAst.finallyNode, preAst);
+ }
+ }
+ ChildrenWalkers.walkTryFinallyChildren = walkTryFinallyChildren;
+ function walkFinallyChildren(preAst, parent, walker) {
+ if(preAst.body) {
+ preAst.body = walker.walk(preAst.body, preAst);
+ }
+ }
+ ChildrenWalkers.walkFinallyChildren = walkFinallyChildren;
+ function walkCatchChildren(preAst, parent, walker) {
+ if(preAst.param) {
+ preAst.param = walker.walk(preAst.param, preAst);
+ }
+ if((preAst.body) && walker.options.goNextSibling) {
+ preAst.body = walker.walk(preAst.body, preAst);
+ }
+ }
+ ChildrenWalkers.walkCatchChildren = walkCatchChildren;
+ function walkRecordChildren(preAst, parent, walker) {
+ preAst.name = walker.walk(preAst.name, preAst);
+ if(walker.options.goNextSibling && preAst.members) {
+ preAst.members = walker.walk(preAst.members, preAst);
+ }
+ }
+ ChildrenWalkers.walkRecordChildren = walkRecordChildren;
+ function walkNamedTypeChildren(preAst, parent, walker) {
+ walkRecordChildren(preAst, parent, walker);
+ }
+ ChildrenWalkers.walkNamedTypeChildren = walkNamedTypeChildren;
+ function walkClassDeclChildren(preAst, parent, walker) {
+ walkNamedTypeChildren(preAst, parent, walker);
+ if(walker.options.goNextSibling && preAst.extendsList) {
+ preAst.extendsList = walker.walk(preAst.extendsList, preAst);
+ }
+ if(walker.options.goNextSibling && preAst.implementsList) {
+ preAst.implementsList = walker.walk(preAst.implementsList, preAst);
+ }
+ }
+ ChildrenWalkers.walkClassDeclChildren = walkClassDeclChildren;
+ function walkScriptChildren(preAst, parent, walker) {
+ if(preAst.bod) {
+ preAst.bod = walker.walk(preAst.bod, preAst);
+ }
+ }
+ ChildrenWalkers.walkScriptChildren = walkScriptChildren;
+ function walkTypeDeclChildren(preAst, parent, walker) {
+ walkNamedTypeChildren(preAst, parent, walker);
+ if(walker.options.goNextSibling && preAst.extendsList) {
+ preAst.extendsList = walker.walk(preAst.extendsList, preAst);
+ }
+ if(walker.options.goNextSibling && preAst.implementsList) {
+ preAst.implementsList = walker.walk(preAst.implementsList, preAst);
+ }
+ }
+ ChildrenWalkers.walkTypeDeclChildren = walkTypeDeclChildren;
+ function walkModuleDeclChildren(preAst, parent, walker) {
+ walkRecordChildren(preAst, parent, walker);
+ }
+ ChildrenWalkers.walkModuleDeclChildren = walkModuleDeclChildren;
+ function walkImportDeclChildren(preAst, parent, walker) {
+ if(preAst.id) {
+ preAst.id = walker.walk(preAst.id, preAst);
+ }
+ if(preAst.alias) {
+ preAst.alias = walker.walk(preAst.alias, preAst);
+ }
+ }
+ ChildrenWalkers.walkImportDeclChildren = walkImportDeclChildren;
+ function walkWithStatementChildren(preAst, parent, walker) {
+ if(preAst.expr) {
+ preAst.expr = walker.walk(preAst.expr, preAst);
+ }
+ if(preAst.body && walker.options.goNextSibling) {
+ preAst.body = walker.walk(preAst.body, preAst);
+ }
+ }
+ ChildrenWalkers.walkWithStatementChildren = walkWithStatementChildren;
+ function walkLabelChildren(preAst, parent, walker) {
+ }
+ ChildrenWalkers.walkLabelChildren = walkLabelChildren;
+ function walkLabeledStatementChildren(preAst, parent, walker) {
+ preAst.labels = walker.walk(preAst.labels, preAst);
+ if(walker.options.goNextSibling) {
+ preAst.stmt = walker.walk(preAst.stmt, preAst);
+ }
+ }
+ ChildrenWalkers.walkLabeledStatementChildren = walkLabeledStatementChildren;
+ })(ChildrenWalkers || (ChildrenWalkers = {}));
+})(TypeScript || (TypeScript = {}));
+var TypeScript;
+(function (TypeScript) {
+ (function (AstWalkerWithDetailCallback) {
+ function walk(script, callback) {
+ var pre = function (cur, parent) {
+ walker.options.goChildren = AstWalkerCallback(true, cur, callback);
+ return cur;
+ };
+ var post = function (cur, parent) {
+ AstWalkerCallback(false, cur, callback);
+ return cur;
+ };
+ var walker = TypeScript.getAstWalkerFactory().getWalker(pre, post);
+ walker.walk(script, null);
+ }
+ AstWalkerWithDetailCallback.walk = walk;
+ function AstWalkerCallback(pre, ast, callback) {
+ var nodeType = ast.nodeType;
+ var callbackString = (TypeScript.NodeType)._map[nodeType] + "Callback";
+ if(callback[callbackString]) {
+ return callback[callbackString](pre, ast);
+ }
+ if(callback.DefaultCallback) {
+ return callback.DefaultCallback(pre, ast);
+ }
+ return true;
+ }
+ })(TypeScript.AstWalkerWithDetailCallback || (TypeScript.AstWalkerWithDetailCallback = {}));
+ var AstWalkerWithDetailCallback = TypeScript.AstWalkerWithDetailCallback;
+})(TypeScript || (TypeScript = {}));
+var TypeScript;
+(function (TypeScript) {
+ function lastOf(items) {
+ return (items === null || items.length === 0) ? null : items[items.length - 1];
+ }
+ TypeScript.lastOf = lastOf;
+ function max(a, b) {
+ return a >= b ? a : b;
+ }
+ TypeScript.max = max;
+ function min(a, b) {
+ return a <= b ? a : b;
+ }
+ TypeScript.min = min;
+ var AstPath = (function () {
+ function AstPath() {
+ this.asts = [];
+ this.top = -1;
+ }
+ AstPath.reverseIndexOf = function reverseIndexOf(items, index) {
+ return (items === null || items.length <= index) ? null : items[items.length - index - 1];
+ }
+ AstPath.prototype.clone = function () {
+ var clone = new AstPath();
+ clone.asts = this.asts.map(function (value) {
+ return value;
+ });
+ clone.top = this.top;
+ return clone;
+ };
+ AstPath.prototype.pop = function () {
+ var head = this.ast();
+ this.up();
+ while(this.asts.length > this.count()) {
+ this.asts.pop();
+ }
+ return head;
+ };
+ AstPath.prototype.push = function (ast) {
+ while(this.asts.length > this.count()) {
+ this.asts.pop();
+ }
+ this.top = this.asts.length;
+ this.asts.push(ast);
+ };
+ AstPath.prototype.up = function () {
+ if(this.top <= -1) {
+ throw new Error("Invalid call to 'up'");
+ }
+ this.top--;
+ };
+ AstPath.prototype.down = function () {
+ if(this.top == this.ast.length - 1) {
+ throw new Error("Invalid call to 'down'");
+ }
+ this.top++;
+ };
+ AstPath.prototype.nodeType = function () {
+ if(this.ast() == null) {
+ return TypeScript.NodeType.None;
+ }
+ return this.ast().nodeType;
+ };
+ AstPath.prototype.ast = function () {
+ return AstPath.reverseIndexOf(this.asts, this.asts.length - (this.top + 1));
+ };
+ AstPath.prototype.parent = function () {
+ return AstPath.reverseIndexOf(this.asts, this.asts.length - this.top);
+ };
+ AstPath.prototype.count = function () {
+ return this.top + 1;
+ };
+ AstPath.prototype.get = function (index) {
+ return this.asts[index];
+ };
+ AstPath.prototype.isNameOfClass = function () {
+ if(this.ast() === null || this.parent() === null) {
+ return false;
+ }
+ return (this.ast().nodeType === TypeScript.NodeType.Name) && (this.parent().nodeType === TypeScript.NodeType.ClassDeclaration) && ((this.parent()).name === this.ast());
+ };
+ AstPath.prototype.isNameOfInterface = function () {
+ if(this.ast() === null || this.parent() === null) {
+ return false;
+ }
+ return (this.ast().nodeType === TypeScript.NodeType.Name) && (this.parent().nodeType === TypeScript.NodeType.InterfaceDeclaration) && ((this.parent()).name === this.ast());
+ };
+ AstPath.prototype.isNameOfArgument = function () {
+ if(this.ast() === null || this.parent() === null) {
+ return false;
+ }
+ return (this.ast().nodeType === TypeScript.NodeType.Name) && (this.parent().nodeType === TypeScript.NodeType.ArgDecl) && ((this.parent()).id === this.ast());
+ };
+ AstPath.prototype.isNameOfVariable = function () {
+ if(this.ast() === null || this.parent() === null) {
+ return false;
+ }
+ return (this.ast().nodeType === TypeScript.NodeType.Name) && (this.parent().nodeType === TypeScript.NodeType.VarDecl) && ((this.parent()).id === this.ast());
+ };
+ AstPath.prototype.isNameOfModule = function () {
+ if(this.ast() === null || this.parent() === null) {
+ return false;
+ }
+ return (this.ast().nodeType === TypeScript.NodeType.Name) && (this.parent().nodeType === TypeScript.NodeType.ModuleDeclaration) && ((this.parent()).name === this.ast());
+ };
+ AstPath.prototype.isNameOfFunction = function () {
+ if(this.ast() === null || this.parent() === null) {
+ return false;
+ }
+ return (this.ast().nodeType === TypeScript.NodeType.Name) && (this.parent().nodeType === TypeScript.NodeType.FuncDecl) && ((this.parent()).name === this.ast());
+ };
+ AstPath.prototype.isChildOfScript = function () {
+ var ast = lastOf(this.asts);
+ return this.count() >= 3 && this.asts[this.top] === ast && this.asts[this.top - 1].nodeType === TypeScript.NodeType.List && this.asts[this.top - 2].nodeType === TypeScript.NodeType.Script;
+ };
+ AstPath.prototype.isChildOfModule = function () {
+ var ast = lastOf(this.asts);
+ return this.count() >= 3 && this.asts[this.top] === ast && this.asts[this.top - 1].nodeType === TypeScript.NodeType.List && this.asts[this.top - 2].nodeType === TypeScript.NodeType.ModuleDeclaration;
+ };
+ AstPath.prototype.isChildOfClass = function () {
+ var ast = lastOf(this.asts);
+ return this.count() >= 3 && this.asts[this.top] === ast && this.asts[this.top - 1].nodeType === TypeScript.NodeType.List && this.asts[this.top - 2].nodeType === TypeScript.NodeType.ClassDeclaration;
+ };
+ AstPath.prototype.isArgumentOfClassConstructor = function () {
+ var ast = lastOf(this.asts);
+ return this.count() >= 5 && this.asts[this.top] === ast && this.asts[this.top - 1].nodeType === TypeScript.NodeType.List && this.asts[this.top - 2].nodeType === TypeScript.NodeType.FuncDecl && this.asts[this.top - 3].nodeType === TypeScript.NodeType.List && this.asts[this.top - 4].nodeType === TypeScript.NodeType.ClassDeclaration && ((this.asts[this.top - 2]).isConstructor) && ((this.asts[this.top - 2]).arguments === this.asts[this.top - 1]) && ((this.asts[this.top - 4]).constructorDecl === this.asts[this.top - 2]);
+ };
+ AstPath.prototype.isChildOfInterface = function () {
+ var ast = lastOf(this.asts);
+ return this.count() >= 3 && this.asts[this.top] === ast && this.asts[this.top - 1].nodeType === TypeScript.NodeType.List && this.asts[this.top - 2].nodeType === TypeScript.NodeType.InterfaceDeclaration;
+ };
+ AstPath.prototype.isTopLevelImplicitModule = function () {
+ return this.count() >= 1 && this.asts[this.top].nodeType === TypeScript.NodeType.ModuleDeclaration && TypeScript.hasFlag((this.asts[this.top]).modFlags, TypeScript.ModuleFlags.IsWholeFile);
+ };
+ AstPath.prototype.isBodyOfTopLevelImplicitModule = function () {
+ return this.count() >= 2 && this.asts[this.top - 0].nodeType === TypeScript.NodeType.List && this.asts[this.top - 1].nodeType === TypeScript.NodeType.ModuleDeclaration && (this.asts[this.top - 1]).members == this.asts[this.top - 0] && TypeScript.hasFlag((this.asts[this.top - 1]).modFlags, TypeScript.ModuleFlags.IsWholeFile);
+ };
+ AstPath.prototype.isBodyOfScript = function () {
+ return this.count() >= 2 && this.asts[this.top - 1].nodeType === TypeScript.NodeType.Script && (this.asts[this.top - 1]).bod == this.asts[this.top - 0];
+ };
+ AstPath.prototype.isBodyOfSwitch = function () {
+ return this.count() >= 2 && this.asts[this.top - 1].nodeType === TypeScript.NodeType.Switch && (this.asts[this.top - 1]).caseList == this.asts[this.top - 0];
+ };
+ AstPath.prototype.isBodyOfModule = function () {
+ return this.count() >= 2 && this.asts[this.top - 1].nodeType === TypeScript.NodeType.ModuleDeclaration && (this.asts[this.top - 1]).members == this.asts[this.top - 0];
+ };
+ AstPath.prototype.isBodyOfClass = function () {
+ return this.count() >= 2 && this.asts[this.top - 1].nodeType === TypeScript.NodeType.ClassDeclaration && (this.asts[this.top - 1]).members == this.asts[this.top - 0];
+ };
+ AstPath.prototype.isBodyOfFunction = function () {
+ return this.count() >= 2 && this.asts[this.top - 1].nodeType === TypeScript.NodeType.FuncDecl && (this.asts[this.top - 1]).bod == this.asts[this.top - 0];
+ };
+ AstPath.prototype.isBodyOfInterface = function () {
+ return this.count() >= 2 && this.asts[this.top - 1].nodeType === TypeScript.NodeType.InterfaceDeclaration && (this.asts[this.top - 1]).members == this.asts[this.top - 0];
+ };
+ AstPath.prototype.isBodyOfBlock = function () {
+ return this.count() >= 2 && this.asts[this.top - 1].nodeType === TypeScript.NodeType.Block && (this.asts[this.top - 1]).statements == this.asts[this.top - 0];
+ };
+ AstPath.prototype.isBodyOfFor = function () {
+ return this.count() >= 2 && this.asts[this.top - 1].nodeType === TypeScript.NodeType.For && (this.asts[this.top - 1]).body == this.asts[this.top - 0];
+ };
+ AstPath.prototype.isBodyOfCase = function () {
+ return this.count() >= 2 && this.asts[this.top - 1].nodeType === TypeScript.NodeType.Case && (this.asts[this.top - 1]).body == this.asts[this.top - 0];
+ };
+ AstPath.prototype.isBodyOfTry = function () {
+ return this.count() >= 2 && this.asts[this.top - 1].nodeType === TypeScript.NodeType.Try && (this.asts[this.top - 1]).body == this.asts[this.top - 0];
+ };
+ AstPath.prototype.isBodyOfCatch = function () {
+ return this.count() >= 2 && this.asts[this.top - 1].nodeType === TypeScript.NodeType.Catch && (this.asts[this.top - 1]).body == this.asts[this.top - 0];
+ };
+ AstPath.prototype.isBodyOfDoWhile = function () {
+ return this.count() >= 2 && this.asts[this.top - 1].nodeType === TypeScript.NodeType.DoWhile && (this.asts[this.top - 1]).body == this.asts[this.top - 0];
+ };
+ AstPath.prototype.isBodyOfWhile = function () {
+ return this.count() >= 2 && this.asts[this.top - 1].nodeType === TypeScript.NodeType.While && (this.asts[this.top - 1]).body == this.asts[this.top - 0];
+ };
+ AstPath.prototype.isBodyOfForIn = function () {
+ return this.count() >= 2 && this.asts[this.top - 1].nodeType === TypeScript.NodeType.ForIn && (this.asts[this.top - 1]).body == this.asts[this.top - 0];
+ };
+ AstPath.prototype.isBodyOfWith = function () {
+ return this.count() >= 2 && this.asts[this.top - 1].nodeType === TypeScript.NodeType.With && (this.asts[this.top - 1]).body == this.asts[this.top - 0];
+ };
+ AstPath.prototype.isBodyOfFinally = function () {
+ return this.count() >= 2 && this.asts[this.top - 1].nodeType === TypeScript.NodeType.Finally && (this.asts[this.top - 1]).body == this.asts[this.top - 0];
+ };
+ AstPath.prototype.isCaseOfSwitch = function () {
+ return this.count() >= 3 && this.asts[this.top - 2].nodeType === TypeScript.NodeType.Switch && this.asts[this.top - 1].nodeType === TypeScript.NodeType.List && (this.asts[this.top - 2]).caseList == this.asts[this.top - 1];
+ };
+ AstPath.prototype.isDefaultCaseOfSwitch = function () {
+ return this.count() >= 3 && this.asts[this.top - 2].nodeType === TypeScript.NodeType.Switch && this.asts[this.top - 1].nodeType === TypeScript.NodeType.List && (this.asts[this.top - 2]).caseList == this.asts[this.top - 1] && (this.asts[this.top - 2]).defaultCase == this.asts[this.top - 0];
+ };
+ AstPath.prototype.isListOfObjectLit = function () {
+ return this.count() >= 2 && this.asts[this.top - 1].nodeType === TypeScript.NodeType.ObjectLit && this.asts[this.top - 0].nodeType === TypeScript.NodeType.List && (this.asts[this.top - 1]).operand == this.asts[this.top - 0];
+ };
+ AstPath.prototype.isBodyOfObjectLit = function () {
+ return this.isListOfObjectLit();
+ };
+ AstPath.prototype.isEmptyListOfObjectLit = function () {
+ return this.count() >= 2 && this.asts[this.top - 1].nodeType === TypeScript.NodeType.ObjectLit && this.asts[this.top - 0].nodeType === TypeScript.NodeType.List && (this.asts[this.top - 1]).operand == this.asts[this.top - 0] && (this.asts[this.top - 0]).members.length == 0;
+ };
+ AstPath.prototype.isMemberOfObjectLit = function () {
+ return this.count() >= 3 && this.asts[this.top - 2].nodeType === TypeScript.NodeType.ObjectLit && this.asts[this.top - 1].nodeType === TypeScript.NodeType.List && this.asts[this.top - 0].nodeType === TypeScript.NodeType.Member && (this.asts[this.top - 2]).operand == this.asts[this.top - 1];
+ };
+ AstPath.prototype.isNameOfMemberOfObjectLit = function () {
+ return this.count() >= 4 && this.asts[this.top - 3].nodeType === TypeScript.NodeType.ObjectLit && this.asts[this.top - 2].nodeType === TypeScript.NodeType.List && this.asts[this.top - 1].nodeType === TypeScript.NodeType.Member && this.asts[this.top - 0].nodeType === TypeScript.NodeType.Name && (this.asts[this.top - 3]).operand == this.asts[this.top - 2];
+ };
+ AstPath.prototype.isListOfArrayLit = function () {
+ return this.count() >= 2 && this.asts[this.top - 1].nodeType === TypeScript.NodeType.ArrayLit && this.asts[this.top - 0].nodeType === TypeScript.NodeType.List && (this.asts[this.top - 1]).operand == this.asts[this.top - 0];
+ };
+ AstPath.prototype.isTargetOfMember = function () {
+ return this.count() >= 2 && this.asts[this.top - 1].nodeType === TypeScript.NodeType.Member && (this.asts[this.top - 1]).operand1 === this.asts[this.top - 0];
+ };
+ AstPath.prototype.isMemberOfMember = function () {
+ return this.count() >= 2 && this.asts[this.top - 1].nodeType === TypeScript.NodeType.Member && (this.asts[this.top - 1]).operand2 === this.asts[this.top - 0];
+ };
+ AstPath.prototype.isItemOfList = function () {
+ return this.count() >= 2 && this.asts[this.top - 1].nodeType === TypeScript.NodeType.List;
+ };
+ AstPath.prototype.isThenOfIf = function () {
+ return this.count() >= 2 && this.asts[this.top - 1].nodeType === TypeScript.NodeType.If && (this.asts[this.top - 1]).thenBod == this.asts[this.top - 0];
+ };
+ AstPath.prototype.isElseOfIf = function () {
+ return this.count() >= 2 && this.asts[this.top - 1].nodeType === TypeScript.NodeType.If && (this.asts[this.top - 1]).elseBod == this.asts[this.top - 0];
+ };
+ AstPath.prototype.isBodyOfDefaultCase = function () {
+ return this.isBodyOfCase();
+ };
+ AstPath.prototype.isSingleStatementList = function () {
+ return this.count() >= 1 && this.asts[this.top].nodeType === TypeScript.NodeType.List && (this.asts[this.top]).members.length === 1;
+ };
+ AstPath.prototype.isArgumentListOfFunction = function () {
+ return this.count() >= 2 && this.asts[this.top - 0].nodeType === TypeScript.NodeType.List && this.asts[this.top - 1].nodeType === TypeScript.NodeType.FuncDecl && (this.asts[this.top - 1]).arguments === this.asts[this.top - 0];
+ };
+ AstPath.prototype.isArgumentOfFunction = function () {
+ return this.count() >= 3 && this.asts[this.top - 1].nodeType === TypeScript.NodeType.List && this.asts[this.top - 2].nodeType === TypeScript.NodeType.FuncDecl && (this.asts[this.top - 2]).arguments === this.asts[this.top - 1];
+ };
+ AstPath.prototype.isArgumentListOfCall = function () {
+ return this.count() >= 2 && this.asts[this.top - 0].nodeType === TypeScript.NodeType.List && this.asts[this.top - 1].nodeType === TypeScript.NodeType.Call && (this.asts[this.top - 1]).arguments === this.asts[this.top - 0];
+ };
+ AstPath.prototype.isArgumentListOfNew = function () {
+ return this.count() >= 2 && this.asts[this.top - 0].nodeType === TypeScript.NodeType.List && this.asts[this.top - 1].nodeType === TypeScript.NodeType.New && (this.asts[this.top - 1]).arguments === this.asts[this.top - 0];
+ };
+ AstPath.prototype.isSynthesizedBlock = function () {
+ return this.count() >= 1 && this.asts[this.top - 0].nodeType === TypeScript.NodeType.Block && (this.asts[this.top - 0]).isStatementBlock === false;
+ };
+ return AstPath;
+ })();
+ TypeScript.AstPath = AstPath;
+ function isValidAstNode(ast) {
+ if(ast === null) {
+ return false;
+ }
+ if(ast.minChar === -1 || ast.limChar === -1) {
+ return false;
+ }
+ return true;
+ }
+ TypeScript.isValidAstNode = isValidAstNode;
+ var AstPathContext = (function () {
+ function AstPathContext() {
+ this.path = new TypeScript.AstPath();
+ }
+ return AstPathContext;
+ })();
+ TypeScript.AstPathContext = AstPathContext;
+ (function (GetAstPathOptions) {
+ GetAstPathOptions._map = [];
+ GetAstPathOptions.Default = 0;
+ GetAstPathOptions.EdgeInclusive = 1;
+ GetAstPathOptions.DontPruneSearchBasedOnPosition = 1 << 1;
+ })(TypeScript.GetAstPathOptions || (TypeScript.GetAstPathOptions = {}));
+ var GetAstPathOptions = TypeScript.GetAstPathOptions;
+ function getAstPathToPosition(script, pos, options) {
+ if (typeof options === "undefined") { options = GetAstPathOptions.Default; }
+ var lookInComments = function (comments) {
+ if(comments && comments.length > 0) {
+ for(var i = 0; i < comments.length; i++) {
+ var minChar = comments[i].minChar;
+ var limChar = comments[i].limChar;
+ if(!comments[i].isBlockComment) {
+ limChar++;
+ }
+ if(pos >= minChar && pos < limChar) {
+ ctx.path.push(comments[i]);
+ }
+ }
+ }
+ };
+ var pre = function (cur, parent, walker) {
+ if(isValidAstNode(cur)) {
+ var inclusive = TypeScript.hasFlag(options, GetAstPathOptions.EdgeInclusive) || cur.nodeType === TypeScript.NodeType.Name || pos === script.limChar;
+ var minChar = cur.minChar;
+ var limChar = cur.limChar + (inclusive ? 1 : 0);
+ if(pos >= minChar && pos < limChar) {
+ var previous = ctx.path.ast();
+ if(previous == null || (cur.minChar >= previous.minChar && cur.limChar <= previous.limChar)) {
+ ctx.path.push(cur);
+ } else {
+ }
+ }
+ if(pos < limChar) {
+ lookInComments(cur.preComments);
+ }
+ if(pos >= minChar) {
+ lookInComments(cur.postComments);
+ }
+ if(!TypeScript.hasFlag(options, GetAstPathOptions.DontPruneSearchBasedOnPosition)) {
+ walker.options.goChildren = (minChar <= pos && pos <= limChar);
+ }
+ }
+ return cur;
+ };
+ var ctx = new AstPathContext();
+ TypeScript.getAstWalkerFactory().walk(script, pre, null, null, ctx);
+ return ctx.path;
+ }
+ TypeScript.getAstPathToPosition = getAstPathToPosition;
+ function getTokenizationOffset(script, position) {
+ var bestOffset = 0;
+ var pre = function (cur, parent, walker) {
+ if(TypeScript.isValidAstNode(cur)) {
+ if(cur.minChar <= position) {
+ bestOffset = max(bestOffset, cur.minChar);
+ }
+ if(cur.minChar > position || cur.limChar < bestOffset) {
+ walker.options.goChildren = false;
+ }
+ }
+ return cur;
+ };
+ TypeScript.getAstWalkerFactory().walk(script, pre);
+ return bestOffset;
+ }
+ TypeScript.getTokenizationOffset = getTokenizationOffset;
+ function walkAST(ast, callback) {
+ var pre = function (cur, parent, walker) {
+ var path = walker.state;
+ path.push(cur);
+ callback(path, walker);
+ return cur;
+ };
+ var post = function (cur, parent, walker) {
+ var path = walker.state;
+ path.pop();
+ return cur;
+ };
+ var path = new AstPath();
+ TypeScript.getAstWalkerFactory().walk(ast, pre, post, null, path);
+ }
+ TypeScript.walkAST = walkAST;
+})(TypeScript || (TypeScript = {}));
+var TypeScript;
+(function (TypeScript) {
+ var AstLogger = (function () {
+ function AstLogger(logger) {
+ this.logger = logger;
+ }
+ AstLogger.prototype.logScript = function (script) {
+ var _this = this;
+ this.logLinemap(script.locationInfo.lineMap);
+ var stack = [];
+ var pre = function (cur, parent) {
+ stack.push(cur);
+ var indent = (stack.length - 1) * 2;
+ _this.logComments(script, cur.preComments, indent);
+ _this.logNode(script, cur, indent);
+ _this.logComments(script, cur.postComments, indent);
+ return cur;
+ };
+ var post = function (cur, parent) {
+ stack.pop();
+ return cur;
+ };
+ TypeScript.getAstWalkerFactory().walk(script, pre, post);
+ };
+ AstLogger.prototype.logNode = function (script, cur, indent) {
+ var msg = this.addPadding("", indent, "| ", true);
+ msg = msg.concat("+ " + cur.treeViewLabel());
+ msg = this.addPadding(msg, 70, " ", false);
+ msg = msg + this.addLineColumn(script, cur.minChar);
+ msg = this.addPadding(msg, 80, " ", false);
+ msg = msg + "=> ";
+ msg = msg + this.addLineColumn(script, cur.limChar);
+ msg = this.addPadding(msg, 102, " ", false);
+ msg = msg.concat("[" + this.addPadding(cur.minChar.toString(), 1, " ", true) + ", " + this.addPadding(cur.limChar.toString(), 1, " ", true) + "]");
+ msg = this.addPadding(msg, 115, " ", false);
+ msg = msg.concat("sym=" + (cur).sym);
+ msg = this.addPadding(msg, 135, " ", false);
+ msg = msg.concat("type=" + (cur.type === null ? "null" : cur.type.getTypeName()));
+ this.logger.log(msg);
+ };
+ AstLogger.prototype.logComments = function (script, comments, indent) {
+ if(comments == null) {
+ return;
+ }
+ for(var i = 0; i < comments.length; i++) {
+ this.logNode(script, comments[i], indent);
+ }
+ };
+ AstLogger.prototype.logLinemap = function (linemap) {
+ var result = "[";
+ for(var i = 0; i < linemap.length; i++) {
+ if(i > 0) {
+ result += ",";
+ }
+ result += linemap[i];
+ }
+ result += "]";
+ this.logger.log("linemap: " + result);
+ };
+ AstLogger.prototype.addPadding = function (s, targetLength, paddingString, leftPadding) {
+ var result = (leftPadding ? "" : s);
+ for(var i = s.length; i < targetLength; i++) {
+ result = result + paddingString;
+ }
+ result = result + (leftPadding ? s : "");
+ return result;
+ };
+ AstLogger.prototype.addLineColumn = function (script, position) {
+ var lineInfo = {
+ line: -1,
+ col: -1
+ };
+ TypeScript.getSourceLineColFromMap(lineInfo, position, script.locationInfo.lineMap);
+ if(lineInfo.col !== -1) {
+ lineInfo.col++;
+ }
+ return "(" + lineInfo.line + ", " + lineInfo.col + ")";
+ };
+ return AstLogger;
+ })();
+ TypeScript.AstLogger = AstLogger;
+})(TypeScript || (TypeScript = {}));
+var TypeScript;
+(function (TypeScript) {
+ var Binder = (function () {
+ function Binder(checker) {
+ this.checker = checker;
+ }
+ Binder.prototype.resolveBaseTypeLinks = function (typeLinks, scope) {
+ var extendsList = null;
+ if(typeLinks) {
+ extendsList = new Array();
+ for(var i = 0, len = typeLinks.length; i < len; i++) {
+ extendsList[i] = this.checker.resolveBaseTypeLink(typeLinks[i], scope);
+ }
+ }
+ return extendsList;
+ };
+ Binder.prototype.resolveBases = function (scope, type) {
+ type.extendsList = this.resolveBaseTypeLinks(type.extendsTypeLinks, scope);
+ var i = 0, len = type.extendsList.length;
+ var derivedIsClass = type.isClassInstance();
+ for(; i < len; i++) {
+ var baseIsClass = type.extendsList[i].isClassInstance();
+ if(type.extendsList[i] != this.checker.anyType) {
+ var baseRef = type.extendsTypeLinks[i].ast;
+ if(derivedIsClass) {
+ if(!baseIsClass) {
+ this.checker.errorReporter.simpleError(baseRef, "A class may only extend other classes, " + type.extendsList[i].symbol.fullName() + " is not a class.");
+ }
+ } else {
+ if(baseIsClass) {
+ this.checker.errorReporter.simpleError(baseRef, "An interface may only extend other interfaces, " + type.extendsList[i].symbol.fullName() + " is a class.");
+ }
+ }
+ }
+ }
+ type.implementsList = this.resolveBaseTypeLinks(type.implementsTypeLinks, scope);
+ if(type.implementsList) {
+ for(i = 0 , len = type.implementsList.length; i < len; i++) {
+ var iface = type.implementsList[i];
+ var baseRef = type.implementsTypeLinks[i].ast;
+ if(iface.isClassInstance()) {
+ if(derivedIsClass) {
+ this.checker.errorReporter.simpleError(baseRef, "A class may only implement an interface; " + iface.symbol.fullName() + " is a class.");
+ }
+ }
+ }
+ }
+ };
+ Binder.prototype.resolveSignatureGroup = function (signatureGroup, scope, instanceType) {
+ var supplyVar = !(signatureGroup.hasImplementation);
+ for(var i = 0, len = signatureGroup.signatures.length; i < len; i++) {
+ var signature = signatureGroup.signatures[i];
+ if(instanceType) {
+ signature.returnType.type = instanceType;
+ } else {
+ this.checker.resolveTypeLink(scope, signature.returnType, supplyVar);
+ }
+ var paramLen = signature.parameters.length;
+ for(var j = 0; j < paramLen; j++) {
+ this.bindSymbol(scope, signature.parameters[j]);
+ }
+ if(signature.hasVariableArgList) {
+ var lastParam = signature.parameters[paramLen - 1];
+ lastParam.argsOffset = paramLen - 1;
+ if(!lastParam.getType().isArray()) {
+ this.checker.errorReporter.simpleErrorFromSym(lastParam, "... parameter must have array type");
+ lastParam.parameter.typeLink.type = this.checker.makeArrayType(lastParam.parameter.typeLink.type);
+ }
+ }
+ }
+ };
+ Binder.prototype.bindType = function (scope, type, instanceType) {
+ if(instanceType) {
+ this.bindType(scope, instanceType, null);
+ }
+ if(type.hasMembers()) {
+ var members = type.members;
+ var ambientMembers = type.ambientMembers;
+ var typeMembers = type.getAllEnclosedTypes();
+ var ambientTypeMembers = type.getAllAmbientEnclosedTypes();
+ var memberScope = new TypeScript.SymbolTableScope(members, ambientMembers, typeMembers, ambientTypeMembers, type.symbol);
+ var agg = new TypeScript.SymbolAggregateScope(type.symbol);
+ var prevCurrentModDecl = this.checker.currentModDecl;
+ var prevBindStatus = this.checker.inBind;
+ agg.addParentScope(memberScope);
+ agg.addParentScope(scope);
+ if(type.isModuleType()) {
+ this.checker.currentModDecl = type.symbol.declAST;
+ this.checker.inBind = true;
+ }
+ if(members) {
+ this.bind(agg, type.members.allMembers);
+ }
+ if(typeMembers) {
+ this.bind(agg, typeMembers.allMembers);
+ }
+ if(ambientMembers) {
+ this.bind(agg, ambientMembers.allMembers);
+ }
+ if(ambientTypeMembers) {
+ this.bind(agg, ambientTypeMembers.allMembers);
+ }
+ this.checker.currentModDecl = prevCurrentModDecl;
+ this.checker.inBind = prevBindStatus;
+ }
+ if(type.extendsTypeLinks) {
+ this.resolveBases(scope, type);
+ }
+ if(type.construct) {
+ this.resolveSignatureGroup(type.construct, scope, instanceType);
+ }
+ if(type.call) {
+ this.resolveSignatureGroup(type.call, scope, null);
+ }
+ if(type.index) {
+ this.resolveSignatureGroup(type.index, scope, null);
+ }
+ if(type.elementType) {
+ this.bindType(scope, type.elementType, null);
+ }
+ };
+ Binder.prototype.bindSymbol = function (scope, symbol) {
+ if(!symbol.bound) {
+ var prevLocationInfo = this.checker.locationInfo;
+ if((this.checker.units) && (symbol.unitIndex >= 0) && (symbol.unitIndex < this.checker.units.length)) {
+ this.checker.locationInfo = this.checker.units[symbol.unitIndex];
+ }
+ switch(symbol.kind()) {
+ case TypeScript.SymbolKind.Type: {
+ if(symbol.flags & TypeScript.SymbolFlags.Bound) {
+ break;
+ }
+ var typeSymbol = symbol;
+ typeSymbol.flags |= TypeScript.SymbolFlags.Bound;
+ if(typeSymbol.aliasLink && !typeSymbol.type && typeSymbol.aliasLink.alias.nodeType == TypeScript.NodeType.Name) {
+ var modPath = (typeSymbol.aliasLink.alias).text;
+ var modSym = this.checker.findSymbolForDynamicModule(modPath, this.checker.locationInfo.filename, function (id) {
+ return scope.find(id, false, true);
+ });
+ if(modSym) {
+ typeSymbol.type = modSym.getType();
+ }
+ }
+ if(typeSymbol.type && typeSymbol.type != this.checker.gloModType) {
+ this.bindType(scope, typeSymbol.type, typeSymbol.instanceType);
+ if(typeSymbol.type.isModuleType()) {
+ for(var i = 0; i < typeSymbol.expansions.length; i++) {
+ this.bindType(scope, typeSymbol.expansions[i], typeSymbol.instanceType);
+ }
+ }
+ }
+ break;
+
+ }
+ case TypeScript.SymbolKind.Field: {
+ this.checker.resolveTypeLink(scope, (symbol).field.typeLink, false);
+ break;
+
+ }
+ case TypeScript.SymbolKind.Parameter: {
+ this.checker.resolveTypeLink(scope, (symbol).parameter.typeLink, true);
+ break;
+
+ }
+ }
+ this.checker.locationInfo = prevLocationInfo;
+ }
+ symbol.bound = true;
+ };
+ Binder.prototype.bind = function (scope, table) {
+ table.map(function (key, sym, binder) {
+ binder.bindSymbol(scope, sym);
+ }, this);
+ };
+ return Binder;
+ })();
+ TypeScript.Binder = Binder;
+})(TypeScript || (TypeScript = {}));
+var TypeScript;
+(function (TypeScript) {
+ var Base64Format = (function () {
+ function Base64Format() { }
+ Base64Format.encodedValues = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
+ Base64Format.encode = function encode(inValue) {
+ if(inValue < 64) {
+ return Base64Format.encodedValues.charAt(inValue);
+ }
+ throw TypeError(inValue + ": not a 64 based value");
+ }
+ Base64Format.decodeChar = function decodeChar(inChar) {
+ if(inChar.length === 1) {
+ return Base64Format.encodedValues.indexOf(inChar);
+ } else {
+ throw TypeError('"' + inChar + '" must have length 1');
+ }
+ }
+ return Base64Format;
+ })();
+ var Base64VLQFormat = (function () {
+ function Base64VLQFormat() { }
+ Base64VLQFormat.encode = function encode(inValue) {
+ if(inValue < 0) {
+ inValue = ((-inValue) << 1) + 1;
+ } else {
+ inValue = inValue << 1;
+ }
+ var encodedStr = "";
+ do {
+ var currentDigit = inValue & 31;
+ inValue = inValue >> 5;
+ if(inValue > 0) {
+ currentDigit = currentDigit | 32;
+ }
+ encodedStr = encodedStr + Base64Format.encode(currentDigit);
+ }while(inValue > 0)
+ return encodedStr;
+ }
+ Base64VLQFormat.decode = function decode(inString) {
+ var result = 0;
+ var negative = false;
+ var shift = 0;
+ for(var i = 0; i < inString.length; i++) {
+ var byte = Base64Format.decodeChar(inString[i]);
+ if(i === 0) {
+ if((byte & 1) === 1) {
+ negative = true;
+ }
+ result = (byte >> 1) & 15;
+ } else {
+ result = result | ((byte & 31) << shift);
+ }
+ shift += (i == 0) ? 4 : 5;
+ if((byte & 32) === 32) {
+ } else {
+ return {
+ value: negative ? -(result) : result,
+ rest: inString.substr(i + 1)
+ };
+ }
+ }
+ throw new Error('Base64 value "' + inString + '" finished with a continuation bit');
+ }
+ return Base64VLQFormat;
+ })();
+ TypeScript.Base64VLQFormat = Base64VLQFormat;
+})(TypeScript || (TypeScript = {}));
+var JSON2 = {
+};
+((function () {
+ 'use strict';
+ function f(n) {
+ return n < 10 ? '0' + n : n;
+ }
+ if(typeof Date.prototype.toJSON !== 'function') {
+ Date.prototype.toJSON = function (key) {
+ return isFinite(this.valueOf()) ? this.getUTCFullYear() + '-' + f(this.getUTCMonth() + 1) + '-' + f(this.getUTCDate()) + 'T' + f(this.getUTCHours()) + ':' + f(this.getUTCMinutes()) + ':' + f(this.getUTCSeconds()) + 'Z' : null;
+ };
+ var strProto = String.prototype;
+ var numProto = Number.prototype;
+ numProto.JSON = strProto.JSON = (Boolean).prototype.toJSON = function (key) {
+ return this.valueOf();
+ };
+ }
+ var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, gap, indent, meta = {
+'\b': '\\b',
+'\t': '\\t',
+'\n': '\\n',
+'\f': '\\f',
+'\r': '\\r',
+'"': '\\"',
+'\\': '\\\\' }, rep;
+ function quote(string) {
+ escapable.lastIndex = 0;
+ return escapable.test(string) ? '"' + string.replace(escapable, function (a) {
+ var c = meta[a];
+ return typeof c === 'string' ? c : '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
+ }) + '"' : '"' + string + '"';
+ }
+ function str(key, holder) {
+ var i, k = null, v, length, mind = gap, partial, value = holder[key];
+ if(value && typeof value === 'object' && typeof value.toJSON === 'function') {
+ value = value.toJSON(key);
+ }
+ if(typeof rep === 'function') {
+ value = rep.call(holder, key, value);
+ }
+ switch(typeof value) {
+ case 'string': {
+ return quote(value);
+
+ }
+ case 'number': {
+ return isFinite(value) ? String(value) : 'null';
+
+ }
+ case 'boolean':
+ case 'null': {
+ return String(value);
+
+ }
+ case 'object': {
+ if(!value) {
+ return 'null';
+ }
+ gap += indent;
+ partial = [];
+ if(Object.prototype.toString.apply(value, []) === '[object Array]') {
+ length = value.length;
+ for(i = 0; i < length; i += 1) {
+ partial[i] = str(i, value) || 'null';
+ }
+ v = partial.length === 0 ? '[]' : gap ? '[\n' + gap + partial.join(',\n' + gap) + '\n' + mind + ']' : '[' + partial.join(',') + ']';
+ gap = mind;
+ return v;
+ }
+ if(rep && typeof rep === 'object') {
+ length = rep.length;
+ for(i = 0; i < length; i += 1) {
+ if(typeof rep[i] === 'string') {
+ k = rep[i];
+ v = str(k, value);
+ if(v) {
+ partial.push(quote(k) + (gap ? ': ' : ':') + v);
+ }
+ }
+ }
+ } else {
+ for(k in value) {
+ if(Object.prototype.hasOwnProperty.call(value, k)) {
+ v = str(k, value);
+ if(v) {
+ partial.push(quote(k) + (gap ? ': ' : ':') + v);
+ }
+ }
+ }
+ }
+ v = partial.length === 0 ? '{}' : gap ? '{\n' + gap + partial.join(',\n' + gap) + '\n' + mind + '}' : '{' + partial.join(',') + '}';
+ gap = mind;
+ return v;
+
+ }
+ }
+ }
+ if(typeof JSON2.stringify !== 'function') {
+ JSON2.stringify = function (value, replacer, space) {
+ var i;
+ gap = '';
+ indent = '';
+ if(typeof space === 'number') {
+ for(i = 0; i < space; i += 1) {
+ indent += ' ';
+ }
+ } else {
+ if(typeof space === 'string') {
+ indent = space;
+ }
+ }
+ rep = replacer;
+ if(replacer && typeof replacer !== 'function' && (typeof replacer !== 'object' || typeof replacer.length !== 'number')) {
+ throw new Error('JSON.stringify');
+ }
+ return str('', {
+ '': value
+ });
+ };
+ }
+ if(typeof JSON2.parse !== 'function') {
+ JSON2.parse = function (text, reviver) {
+ var j;
+ function walk(holder, key) {
+ var k = null, v, value = holder[key];
+ if(value && typeof value === 'object') {
+ for(k in value) {
+ if(Object.prototype.hasOwnProperty.call(value, k)) {
+ v = walk(value, k);
+ if(v !== undefined) {
+ value[k] = v;
+ } else {
+ delete value[k];
+ }
+ }
+ }
+ }
+ return reviver.call(holder, key, value);
+ }
+ text = String(text);
+ cx.lastIndex = 0;
+ if(cx.test(text)) {
+ text = text.replace(cx, function (a) {
+ return '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
+ });
+ }
+ if(/^[\],:{}\s]*$/.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@').replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']').replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {
+ j = eval('(' + text + ')');
+ return typeof reviver === 'function' ? walk({
+ '': j
+ }, '') : j;
+ }
+ throw new SyntaxError('JSON.parse');
+ };
+ }
+})());
+var TypeScript;
+(function (TypeScript) {
+ var SourceMapPosition = (function () {
+ function SourceMapPosition() { }
+ return SourceMapPosition;
+ })();
+ TypeScript.SourceMapPosition = SourceMapPosition;
+ var SourceMapping = (function () {
+ function SourceMapping() {
+ this.start = new SourceMapPosition();
+ this.end = new SourceMapPosition();
+ this.nameIndex = -1;
+ this.childMappings = [];
+ }
+ return SourceMapping;
+ })();
+ TypeScript.SourceMapping = SourceMapping;
+ var SourceMapper = (function () {
+ function SourceMapper(tsFileName, jsFileName, jsFile, sourceMapOut, errorReporter) {
+ this.jsFile = jsFile;
+ this.sourceMapOut = sourceMapOut;
+ this.errorReporter = errorReporter;
+ this.sourceMappings = [];
+ this.currentMappings = [];
+ this.names = [];
+ this.currentNameIndex = [];
+ this.currentMappings.push(this.sourceMappings);
+ jsFileName = TypeScript.switchToForwardSlashes(jsFileName);
+ this.jsFileName = TypeScript.getPrettyName(jsFileName, false, true);
+ var removalIndex = jsFileName.lastIndexOf(this.jsFileName);
+ var fixedPath = jsFileName.substring(0, removalIndex);
+ this.tsFileName = TypeScript.getRelativePathToFixedPath(fixedPath, tsFileName);
+ }
+ SourceMapper.MapFileExtension = ".map";
+ SourceMapper.EmitSourceMapping = function EmitSourceMapping(allSourceMappers) {
+ var sourceMapper = allSourceMappers[0];
+ sourceMapper.jsFile.WriteLine("//@ sourceMappingURL=" + sourceMapper.jsFileName + SourceMapper.MapFileExtension);
+ var sourceMapOut = sourceMapper.sourceMapOut;
+ var mappingsString = "";
+ var tsFiles = [];
+ var prevEmittedColumn = 0;
+ var prevEmittedLine = 0;
+ var prevSourceColumn = 0;
+ var prevSourceLine = 0;
+ var prevSourceIndex = 0;
+ var prevNameIndex = 0;
+ var namesList = [];
+ var namesCount = 0;
+ var emitComma = false;
+ var recordedPosition = null;
+ for(var sourceMapperIndex = 0; sourceMapperIndex < allSourceMappers.length; sourceMapperIndex++) {
+ sourceMapper = allSourceMappers[sourceMapperIndex];
+ var currentSourceIndex = tsFiles.length;
+ tsFiles.push(sourceMapper.tsFileName);
+ if(sourceMapper.names.length > 0) {
+ namesList.push.apply(namesList, sourceMapper.names);
+ }
+ var recordSourceMapping = function (mappedPosition, nameIndex) {
+ if(recordedPosition != null && recordedPosition.emittedColumn == mappedPosition.emittedColumn && recordedPosition.emittedLine == mappedPosition.emittedLine) {
+ return;
+ }
+ if(prevEmittedLine !== mappedPosition.emittedLine) {
+ while(prevEmittedLine < mappedPosition.emittedLine) {
+ prevEmittedColumn = 0;
+ mappingsString = mappingsString + ";";
+ prevEmittedLine++;
+ }
+ emitComma = false;
+ } else {
+ if(emitComma) {
+ mappingsString = mappingsString + ",";
+ }
+ }
+ mappingsString = mappingsString + TypeScript.Base64VLQFormat.encode(mappedPosition.emittedColumn - prevEmittedColumn);
+ prevEmittedColumn = mappedPosition.emittedColumn;
+ mappingsString = mappingsString + TypeScript.Base64VLQFormat.encode(currentSourceIndex - prevSourceIndex);
+ prevSourceIndex = currentSourceIndex;
+ mappingsString = mappingsString + TypeScript.Base64VLQFormat.encode(mappedPosition.sourceLine - 1 - prevSourceLine);
+ prevSourceLine = mappedPosition.sourceLine - 1;
+ mappingsString = mappingsString + TypeScript.Base64VLQFormat.encode(mappedPosition.sourceColumn - prevSourceColumn);
+ prevSourceColumn = mappedPosition.sourceColumn;
+ if(nameIndex >= 0) {
+ mappingsString = mappingsString + TypeScript.Base64VLQFormat.encode(namesCount + nameIndex - prevNameIndex);
+ prevNameIndex = namesCount + nameIndex;
+ }
+ emitComma = true;
+ recordedPosition = mappedPosition;
+ };
+ var recordSourceMappingSiblings = function (sourceMappings) {
+ for(var i = 0; i < sourceMappings.length; i++) {
+ var sourceMapping = sourceMappings[i];
+ recordSourceMapping(sourceMapping.start, sourceMapping.nameIndex);
+ recordSourceMappingSiblings(sourceMapping.childMappings);
+ recordSourceMapping(sourceMapping.end, sourceMapping.nameIndex);
+ }
+ };
+ recordSourceMappingSiblings(sourceMapper.sourceMappings, -1);
+ namesCount = namesCount + sourceMapper.names.length;
+ }
+ if(mappingsString != "") {
+ sourceMapOut.Write(JSON2.stringify({
+ version: 3,
+ file: sourceMapper.jsFileName,
+ sources: tsFiles,
+ names: namesList,
+ mappings: mappingsString
+ }));
+ }
+ try {
+ sourceMapOut.Close();
+ } catch (ex) {
+ sourceMapper.errorReporter.emitterError(null, ex.message);
+ }
+ }
+ return SourceMapper;
+ })();
+ TypeScript.SourceMapper = SourceMapper;
+})(TypeScript || (TypeScript = {}));
+var TypeScript;
+(function (TypeScript) {
+ (function (EmitContainer) {
+ EmitContainer._map = [];
+ EmitContainer._map[0] = "Prog";
+ EmitContainer.Prog = 0;
+ EmitContainer._map[1] = "Module";
+ EmitContainer.Module = 1;
+ EmitContainer._map[2] = "DynamicModule";
+ EmitContainer.DynamicModule = 2;
+ EmitContainer._map[3] = "Class";
+ EmitContainer.Class = 3;
+ EmitContainer._map[4] = "Constructor";
+ EmitContainer.Constructor = 4;
+ EmitContainer._map[5] = "Function";
+ EmitContainer.Function = 5;
+ EmitContainer._map[6] = "Args";
+ EmitContainer.Args = 6;
+ EmitContainer._map[7] = "Interface";
+ EmitContainer.Interface = 7;
+ })(TypeScript.EmitContainer || (TypeScript.EmitContainer = {}));
+ var EmitContainer = TypeScript.EmitContainer;
+ var EmitState = (function () {
+ function EmitState() {
+ this.column = 0;
+ this.line = 0;
+ this.pretty = false;
+ this.inObjectLiteral = false;
+ this.container = EmitContainer.Prog;
+ }
+ return EmitState;
+ })();
+ TypeScript.EmitState = EmitState;
+ var EmitOptions = (function () {
+ function EmitOptions(settings) {
+ this.ioHost = null;
+ this.outputMany = true;
+ this.commonDirectoryPath = "";
+ this.minWhitespace = settings.minWhitespace;
+ this.propagateConstants = settings.propagateConstants;
+ this.emitComments = settings.emitComments;
+ this.outputOption = settings.outputOption;
+ }
+ EmitOptions.prototype.mapOutputFileName = function (fileName, extensionChanger) {
+ if(this.outputMany) {
+ var updatedFileName = fileName;
+ if(this.outputOption != "") {
+ updatedFileName = fileName.replace(this.commonDirectoryPath, "");
+ updatedFileName = this.outputOption + updatedFileName;
+ }
+ return extensionChanger(updatedFileName, false);
+ } else {
+ return extensionChanger(this.outputOption, true);
+ }
+ };
+ return EmitOptions;
+ })();
+ TypeScript.EmitOptions = EmitOptions;
+ var Indenter = (function () {
+ function Indenter() {
+ this.indentAmt = 0;
+ }
+ Indenter.indentStep = 4;
+ Indenter.indentStepString = " ";
+ Indenter.indentStrings = [];
+ Indenter.prototype.increaseIndent = function () {
+ this.indentAmt += Indenter.indentStep;
+ };
+ Indenter.prototype.decreaseIndent = function () {
+ this.indentAmt -= Indenter.indentStep;
+ };
+ Indenter.prototype.getIndent = function () {
+ var indentString = Indenter.indentStrings[this.indentAmt];
+ if(indentString === undefined) {
+ indentString = "";
+ for(var i = 0; i < this.indentAmt; i = i + Indenter.indentStep) {
+ indentString += Indenter.indentStepString;
+ }
+ Indenter.indentStrings[this.indentAmt] = indentString;
+ }
+ return indentString;
+ };
+ return Indenter;
+ })();
+ TypeScript.Indenter = Indenter;
+ var Emitter = (function () {
+ function Emitter(checker, emittingFileName, outfile, emitOptions, errorReporter) {
+ this.checker = checker;
+ this.emittingFileName = emittingFileName;
+ this.outfile = outfile;
+ this.emitOptions = emitOptions;
+ this.errorReporter = errorReporter;
+ this.prologueEmitted = false;
+ this.thisClassNode = null;
+ this.thisFnc = null;
+ this.moduleDeclList = [];
+ this.moduleName = "";
+ this.emitState = new EmitState();
+ this.indenter = new Indenter();
+ this.ambientModule = false;
+ this.modAliasId = null;
+ this.firstModAlias = null;
+ this.allSourceMappers = [];
+ this.sourceMapper = null;
+ this.captureThisStmtString = "var _this = this;";
+ this.varListCountStack = [
+ 0
+ ];
+ }
+ Emitter.prototype.setSourceMappings = function (mapper) {
+ this.allSourceMappers.push(mapper);
+ this.sourceMapper = mapper;
+ };
+ Emitter.prototype.writeToOutput = function (s) {
+ this.outfile.Write(s);
+ this.emitState.column += s.length;
+ };
+ Emitter.prototype.writeToOutputTrimmable = function (s) {
+ if(this.emitOptions.minWhitespace) {
+ s = s.replace(/[\s]*/g, '');
+ }
+ this.writeToOutput(s);
+ };
+ Emitter.prototype.writeLineToOutput = function (s) {
+ if(this.emitOptions.minWhitespace) {
+ this.writeToOutput(s);
+ var c = s.charCodeAt(s.length - 1);
+ if(!((c == TypeScript.LexCodeSpace) || (c == TypeScript.LexCodeSMC) || (c == TypeScript.LexCodeLBR))) {
+ this.writeToOutput(' ');
+ }
+ } else {
+ this.outfile.WriteLine(s);
+ this.emitState.column = 0;
+ this.emitState.line++;
+ }
+ };
+ Emitter.prototype.writeCaptureThisStatement = function (ast) {
+ this.emitIndent();
+ this.recordSourceMappingStart(ast);
+ this.writeToOutput(this.captureThisStmtString);
+ this.recordSourceMappingEnd(ast);
+ this.writeLineToOutput("");
+ };
+ Emitter.prototype.setInVarBlock = function (count) {
+ this.varListCountStack[this.varListCountStack.length - 1] = count;
+ };
+ Emitter.prototype.setInObjectLiteral = function (val) {
+ var temp = this.emitState.inObjectLiteral;
+ this.emitState.inObjectLiteral = val;
+ return temp;
+ };
+ Emitter.prototype.setContainer = function (c) {
+ var temp = this.emitState.container;
+ this.emitState.container = c;
+ return temp;
+ };
+ Emitter.prototype.getIndentString = function () {
+ if(this.emitOptions.minWhitespace) {
+ return "";
+ } else {
+ return this.indenter.getIndent();
+ }
+ };
+ Emitter.prototype.emitIndent = function () {
+ this.writeToOutput(this.getIndentString());
+ };
+ Emitter.prototype.emitCommentInPlace = function (comment) {
+ this.recordSourceMappingStart(comment);
+ var text = comment.getText();
+ var hadNewLine = false;
+ if(comment.isBlockComment) {
+ if(this.emitState.column == 0) {
+ this.emitIndent();
+ }
+ this.writeToOutput(text[0]);
+ if(text.length > 1 || comment.endsLine) {
+ this.writeLineToOutput("");
+ for(var i = 1; i < text.length; i++) {
+ this.emitIndent();
+ this.writeLineToOutput(text[i]);
+ }
+ hadNewLine = true;
+ }
+ } else {
+ if(this.emitState.column == 0) {
+ this.emitIndent();
+ }
+ this.writeLineToOutput(text[0]);
+ hadNewLine = true;
+ }
+ if(hadNewLine) {
+ this.emitIndent();
+ } else {
+ this.writeToOutput(" ");
+ }
+ this.recordSourceMappingEnd(comment);
+ };
+ Emitter.prototype.emitParensAndCommentsInPlace = function (ast, pre) {
+ var comments = pre ? ast.preComments : ast.postComments;
+ if(ast.isParenthesized && !pre) {
+ this.writeToOutput(")");
+ }
+ if(this.emitOptions.emitComments && comments && comments.length != 0) {
+ for(var i = 0; i < comments.length; i++) {
+ this.emitCommentInPlace(comments[i]);
+ }
+ }
+ if(ast.isParenthesized && pre) {
+ this.writeToOutput("(");
+ }
+ };
+ Emitter.prototype.emitObjectLiteral = function (content) {
+ this.writeLineToOutput("{");
+ this.indenter.increaseIndent();
+ var inObjectLiteral = this.setInObjectLiteral(true);
+ this.emitJavascriptList(content, ",", TypeScript.TokenID.Comma, true, false, false);
+ this.setInObjectLiteral(inObjectLiteral);
+ this.indenter.decreaseIndent();
+ this.emitIndent();
+ this.writeToOutput("}");
+ };
+ Emitter.prototype.emitArrayLiteral = function (content) {
+ this.writeToOutput("[");
+ if(content) {
+ this.writeLineToOutput("");
+ this.indenter.increaseIndent();
+ this.emitJavascriptList(content, ", ", TypeScript.TokenID.Comma, true, false, false);
+ this.indenter.decreaseIndent();
+ this.emitIndent();
+ }
+ this.writeToOutput("]");
+ };
+ Emitter.prototype.emitNew = function (target, args) {
+ this.writeToOutput("new ");
+ if(target.nodeType == TypeScript.NodeType.TypeRef) {
+ var typeRef = target;
+ if(typeRef.arrayCount) {
+ this.writeToOutput("Array()");
+ } else {
+ this.emitJavascript(typeRef.term, TypeScript.TokenID.Tilde, false);
+ this.writeToOutput("()");
+ }
+ } else {
+ this.emitJavascript(target, TypeScript.TokenID.Tilde, false);
+ this.recordSourceMappingStart(args);
+ this.writeToOutput("(");
+ this.emitJavascriptList(args, ", ", TypeScript.TokenID.Comma, false, false, false);
+ this.writeToOutput(")");
+ this.recordSourceMappingEnd(args);
+ }
+ };
+ Emitter.prototype.tryEmitConstant = function (dotExpr) {
+ if(!this.emitOptions.propagateConstants) {
+ return false;
+ }
+ var propertyName = dotExpr.operand2;
+ if(propertyName && propertyName.sym && propertyName.sym.isVariable()) {
+ if(TypeScript.hasFlag(propertyName.sym.flags, TypeScript.SymbolFlags.Constant)) {
+ if(propertyName.sym.declAST) {
+ var boundDecl = propertyName.sym.declAST;
+ if(boundDecl.init && (boundDecl.init.nodeType == TypeScript.NodeType.NumberLit)) {
+ var numLit = boundDecl.init;
+ this.writeToOutput(numLit.value.toString());
+ var comment = " /* ";
+ comment += propertyName.actualText;
+ comment += " */ ";
+ this.writeToOutput(comment);
+ return true;
+ }
+ }
+ }
+ }
+ return false;
+ };
+ Emitter.prototype.emitCall = function (callNode, target, args) {
+ if(!this.emitSuperCall(callNode)) {
+ if(!TypeScript.hasFlag(callNode.flags, TypeScript.ASTFlags.ClassBaseConstructorCall)) {
+ if(target.nodeType == TypeScript.NodeType.FuncDecl && !target.isParenthesized) {
+ this.writeToOutput("(");
+ }
+ if(callNode.target.nodeType == TypeScript.NodeType.Super && this.emitState.container == EmitContainer.Constructor) {
+ this.writeToOutput("_super.call");
+ } else {
+ this.emitJavascript(target, TypeScript.TokenID.OpenParen, false);
+ }
+ if(target.nodeType == TypeScript.NodeType.FuncDecl && !target.isParenthesized) {
+ this.writeToOutput(")");
+ }
+ this.recordSourceMappingStart(args);
+ this.writeToOutput("(");
+ if(callNode.target.nodeType == TypeScript.NodeType.Super && this.emitState.container == EmitContainer.Constructor) {
+ this.writeToOutput("this");
+ if(args && args.members.length) {
+ this.writeToOutput(", ");
+ }
+ }
+ this.emitJavascriptList(args, ", ", TypeScript.TokenID.Comma, false, false, false);
+ this.writeToOutput(")");
+ this.recordSourceMappingEnd(args);
+ } else {
+ this.indenter.decreaseIndent();
+ this.indenter.decreaseIndent();
+ var constructorCall = new TypeScript.ASTList();
+ constructorCall.members[0] = callNode;
+ this.emitConstructorCalls(constructorCall, this.thisClassNode);
+ this.indenter.increaseIndent();
+ this.indenter.increaseIndent();
+ }
+ }
+ };
+ Emitter.prototype.emitConstructorCalls = function (bases, classDecl) {
+ if(bases == null) {
+ return;
+ }
+ var basesLen = bases.members.length;
+ this.recordSourceMappingStart(classDecl);
+ for(var i = 0; i < basesLen; i++) {
+ var baseExpr = bases.members[i];
+ var baseSymbol = null;
+ if(baseExpr.nodeType == TypeScript.NodeType.Call) {
+ baseSymbol = (baseExpr).target.type.symbol;
+ } else {
+ baseSymbol = baseExpr.type.symbol;
+ }
+ var baseName = baseSymbol.name;
+ if(baseSymbol.declModule != classDecl.type.symbol.declModule) {
+ baseName = baseSymbol.fullName();
+ }
+ if(baseExpr.nodeType == TypeScript.NodeType.Call) {
+ this.emitIndent();
+ this.writeToOutput("_super.call(this");
+ var args = (baseExpr).arguments;
+ if(args && (args.members.length > 0)) {
+ this.writeToOutput(", ");
+ this.emitJavascriptList(args, ", ", TypeScript.TokenID.Comma, false, false, false);
+ }
+ this.writeToOutput(")");
+ } else {
+ if(baseExpr.type && (baseExpr.type.isClassInstance())) {
+ this.emitIndent();
+ this.writeToOutput(classDecl.name.actualText + "._super.constructor");
+ this.writeToOutput(".call(this)");
+ }
+ }
+ }
+ this.recordSourceMappingEnd(classDecl);
+ };
+ Emitter.prototype.emitInnerFunction = function (funcDecl, printName, isMember, bases, hasSelfRef, classDecl) {
+ var isClassConstructor = funcDecl.isConstructor && TypeScript.hasFlag(funcDecl.fncFlags, TypeScript.FncFlags.ClassMethod);
+ var hasNonObjectBaseType = isClassConstructor && TypeScript.hasFlag(this.thisClassNode.type.instanceType.typeFlags, TypeScript.TypeFlags.HasBaseType) && !TypeScript.hasFlag(this.thisClassNode.type.instanceType.typeFlags, TypeScript.TypeFlags.HasBaseTypeOfObject);
+ var classPropertiesMustComeAfterSuperCall = hasNonObjectBaseType && TypeScript.hasFlag((this.thisClassNode).varFlags, TypeScript.VarFlags.ClassSuperMustBeFirstCallInConstructor);
+ var shouldParenthesize = TypeScript.hasFlag(funcDecl.fncFlags, TypeScript.FncFlags.IsFunctionExpression) && !funcDecl.isParenthesized && !funcDecl.isAccessor() && (TypeScript.hasFlag(funcDecl.flags, TypeScript.ASTFlags.ExplicitSemicolon) || TypeScript.hasFlag(funcDecl.flags, TypeScript.ASTFlags.AutomaticSemicolon));
+ this.emitParensAndCommentsInPlace(funcDecl, true);
+ if(shouldParenthesize) {
+ this.writeToOutput("(");
+ }
+ this.recordSourceMappingStart(funcDecl);
+ if(!(funcDecl.isAccessor() && (funcDecl.accessorSymbol).isObjectLitField)) {
+ this.writeToOutput("function ");
+ }
+ if(printName) {
+ var id = funcDecl.getNameText();
+ if(id && !funcDecl.isAccessor()) {
+ if(funcDecl.name) {
+ this.recordSourceMappingStart(funcDecl.name);
+ }
+ this.writeToOutput(id);
+ if(funcDecl.name) {
+ this.recordSourceMappingEnd(funcDecl.name);
+ }
+ }
+ }
+ this.writeToOutput("(");
+ var argsLen = 0;
+ var i = 0;
+ var arg;
+ var defaultArgs = [];
+ if(funcDecl.arguments) {
+ var tempContainer = this.setContainer(EmitContainer.Args);
+ argsLen = funcDecl.arguments.members.length;
+ var printLen = argsLen;
+ if(funcDecl.variableArgList) {
+ printLen--;
+ }
+ for(i = 0; i < printLen; i++) {
+ arg = funcDecl.arguments.members[i];
+ if(arg.init) {
+ defaultArgs.push(arg);
+ }
+ this.emitJavascript(arg, TypeScript.TokenID.OpenParen, false);
+ if(i < (printLen - 1)) {
+ this.writeToOutput(", ");
+ }
+ }
+ this.setContainer(tempContainer);
+ }
+ this.writeLineToOutput(") {");
+ if(funcDecl.isConstructor) {
+ this.recordSourceMappingNameStart("constructor");
+ } else {
+ if(funcDecl.isGetAccessor()) {
+ this.recordSourceMappingNameStart("get_" + funcDecl.getNameText());
+ } else {
+ if(funcDecl.isSetAccessor()) {
+ this.recordSourceMappingNameStart("set_" + funcDecl.getNameText());
+ } else {
+ this.recordSourceMappingNameStart(funcDecl.getNameText());
+ }
+ }
+ }
+ this.indenter.increaseIndent();
+ for(i = 0; i < defaultArgs.length; i++) {
+ var arg = defaultArgs[i];
+ this.emitIndent();
+ this.recordSourceMappingStart(arg);
+ this.writeToOutput("if (typeof " + arg.id.actualText + " === \"undefined\") { ");
+ this.recordSourceMappingStart(arg.id);
+ this.writeToOutput(arg.id.actualText);
+ this.recordSourceMappingEnd(arg.id);
+ this.writeToOutput(" = ");
+ this.emitJavascript(arg.init, TypeScript.TokenID.OpenParen, false);
+ this.writeLineToOutput("; }");
+ this.recordSourceMappingEnd(arg);
+ }
+ if(funcDecl.isConstructor && ((funcDecl.classDecl).varFlags & TypeScript.VarFlags.MustCaptureThis)) {
+ this.writeCaptureThisStatement(funcDecl);
+ }
+ if(funcDecl.isConstructor && !classPropertiesMustComeAfterSuperCall) {
+ if(funcDecl.arguments) {
+ argsLen = funcDecl.arguments.members.length;
+ for(i = 0; i < argsLen; i++) {
+ arg = funcDecl.arguments.members[i];
+ if((arg.varFlags & TypeScript.VarFlags.Property) != TypeScript.VarFlags.None) {
+ this.emitIndent();
+ this.recordSourceMappingStart(arg);
+ this.recordSourceMappingStart(arg.id);
+ this.writeToOutput("this." + arg.id.actualText);
+ this.recordSourceMappingEnd(arg.id);
+ this.writeToOutput(" = ");
+ this.recordSourceMappingStart(arg.id);
+ this.writeToOutput(arg.id.actualText);
+ this.recordSourceMappingEnd(arg.id);
+ this.writeLineToOutput(";");
+ this.recordSourceMappingEnd(arg);
+ }
+ }
+ }
+ if(!TypeScript.hasFlag(funcDecl.fncFlags, TypeScript.FncFlags.ClassMethod)) {
+ this.emitConstructorCalls(bases, classDecl);
+ }
+ }
+ if(hasSelfRef) {
+ this.writeCaptureThisStatement(funcDecl);
+ }
+ if(funcDecl.variableArgList) {
+ argsLen = funcDecl.arguments.members.length;
+ var lastArg = funcDecl.arguments.members[argsLen - 1];
+ this.emitIndent();
+ this.recordSourceMappingStart(lastArg);
+ this.writeToOutput("var ");
+ this.recordSourceMappingStart(lastArg.id);
+ this.writeToOutput(lastArg.id.actualText);
+ this.recordSourceMappingEnd(lastArg.id);
+ this.writeLineToOutput(" = [];");
+ this.recordSourceMappingEnd(lastArg);
+ this.emitIndent();
+ this.writeToOutput("for (");
+ this.recordSourceMappingStart(lastArg);
+ this.writeToOutput("var _i = 0;");
+ this.recordSourceMappingEnd(lastArg);
+ this.writeToOutput(" ");
+ this.recordSourceMappingStart(lastArg);
+ this.writeToOutput("_i < (arguments.length - " + (argsLen - 1) + ")");
+ this.recordSourceMappingEnd(lastArg);
+ this.writeToOutput("; ");
+ this.recordSourceMappingStart(lastArg);
+ this.writeToOutput("_i++");
+ this.recordSourceMappingEnd(lastArg);
+ this.writeLineToOutput(") {");
+ this.indenter.increaseIndent();
+ this.emitIndent();
+ this.recordSourceMappingStart(lastArg);
+ this.writeToOutput(lastArg.id.actualText + "[_i] = arguments[_i + " + (argsLen - 1) + "];");
+ this.recordSourceMappingEnd(lastArg);
+ this.writeLineToOutput("");
+ this.indenter.decreaseIndent();
+ this.emitIndent();
+ this.writeLineToOutput("}");
+ }
+ if(funcDecl.isConstructor && TypeScript.hasFlag(funcDecl.fncFlags, TypeScript.FncFlags.ClassMethod) && !classPropertiesMustComeAfterSuperCall) {
+ var nProps = (this.thisClassNode.members).members.length;
+ for(var i = 0; i < nProps; i++) {
+ if((this.thisClassNode.members).members[i].nodeType == TypeScript.NodeType.VarDecl) {
+ var varDecl = (this.thisClassNode.members).members[i];
+ if(!TypeScript.hasFlag(varDecl.varFlags, TypeScript.VarFlags.Static) && varDecl.init) {
+ this.emitIndent();
+ this.emitJavascriptVarDecl(varDecl, TypeScript.TokenID.Tilde);
+ this.writeLineToOutput("");
+ }
+ }
+ }
+ }
+ this.emitBareJavascriptStatements(funcDecl.bod, classPropertiesMustComeAfterSuperCall);
+ this.indenter.decreaseIndent();
+ this.emitIndent();
+ this.recordSourceMappingStart(funcDecl.endingToken);
+ this.writeToOutput("}");
+ this.recordSourceMappingNameEnd();
+ this.recordSourceMappingEnd(funcDecl.endingToken);
+ this.recordSourceMappingEnd(funcDecl);
+ if(shouldParenthesize) {
+ this.writeToOutput(")");
+ }
+ this.recordSourceMappingEnd(funcDecl);
+ this.emitParensAndCommentsInPlace(funcDecl, false);
+ if(!isMember && !TypeScript.hasFlag(funcDecl.fncFlags, TypeScript.FncFlags.IsFunctionExpression) && (TypeScript.hasFlag(funcDecl.fncFlags, TypeScript.FncFlags.Definition) || funcDecl.isConstructor)) {
+ this.writeLineToOutput("");
+ } else {
+ if(TypeScript.hasFlag(funcDecl.fncFlags, TypeScript.FncFlags.IsFunctionExpression)) {
+ if(TypeScript.hasFlag(funcDecl.flags, TypeScript.ASTFlags.ExplicitSemicolon) || TypeScript.hasFlag(funcDecl.flags, TypeScript.ASTFlags.AutomaticSemicolon)) {
+ this.writeLineToOutput(";");
+ }
+ }
+ }
+ };
+ Emitter.prototype.emitJavascriptModule = function (moduleDecl) {
+ var modName = moduleDecl.name.actualText;
+ if(TypeScript.isTSFile(modName)) {
+ moduleDecl.name.setText(modName.substring(0, modName.length - 3));
+ } else {
+ if(TypeScript.isSTRFile(modName)) {
+ moduleDecl.name.setText(modName.substring(0, modName.length - 4));
+ }
+ }
+ if(!TypeScript.hasFlag(moduleDecl.modFlags, TypeScript.ModuleFlags.Ambient)) {
+ var isDynamicMod = TypeScript.hasFlag(moduleDecl.modFlags, TypeScript.ModuleFlags.IsDynamic);
+ var prevOutFile = this.outfile;
+ var prevOutFileName = this.emittingFileName;
+ var prevAllSourceMappers = this.allSourceMappers;
+ var prevSourceMapper = this.sourceMapper;
+ var prevColumn = this.emitState.column;
+ var prevLine = this.emitState.line;
+ var temp = this.setContainer(EmitContainer.Module);
+ var svModuleName = this.moduleName;
+ var isExported = TypeScript.hasFlag(moduleDecl.modFlags, TypeScript.ModuleFlags.Exported);
+ this.moduleDeclList[this.moduleDeclList.length] = moduleDecl;
+ var isWholeFile = TypeScript.hasFlag(moduleDecl.modFlags, TypeScript.ModuleFlags.IsWholeFile);
+ this.moduleName = moduleDecl.name.actualText;
+ if(isDynamicMod) {
+ var tsModFileName = TypeScript.stripQuotes(moduleDecl.name.actualText);
+ var modFilePath = TypeScript.trimModName(tsModFileName) + ".js";
+ modFilePath = this.emitOptions.mapOutputFileName(modFilePath, TypeScript.TypeScriptCompiler.mapToJSFileName);
+ if(this.emitOptions.ioHost) {
+ if(TypeScript.switchToForwardSlashes(modFilePath) != TypeScript.switchToForwardSlashes(this.emittingFileName)) {
+ this.emittingFileName = modFilePath;
+ var useUTF8InOutputfile = moduleDecl.containsUnicodeChar || (this.emitOptions.emitComments && moduleDecl.containsUnicodeCharInComment);
+ this.outfile = this.createFile(this.emittingFileName, useUTF8InOutputfile);
+ if(prevSourceMapper != null) {
+ this.allSourceMappers = [];
+ var sourceMappingFile = this.createFile(this.emittingFileName + TypeScript.SourceMapper.MapFileExtension, false);
+ this.setSourceMappings(new TypeScript.SourceMapper(tsModFileName, this.emittingFileName, this.outfile, sourceMappingFile, this.errorReporter));
+ this.emitState.column = 0;
+ this.emitState.line = 0;
+ }
+ } else {
+ TypeScript.CompilerDiagnostics.assert(this.emitOptions.outputMany, "Cannot have dynamic modules compiling into single file");
+ }
+ }
+ this.setContainer(EmitContainer.DynamicModule);
+ this.recordSourceMappingStart(moduleDecl);
+ if(TypeScript.moduleGenTarget == TypeScript.ModuleGenTarget.Asynchronous) {
+ var dependencyList = "[\"require\", \"exports\"";
+ var importList = "require, exports";
+ var importStatement = null;
+ for(var i = 0; i < (moduleDecl.mod).importedModules.length; i++) {
+ importStatement = (moduleDecl.mod).importedModules[i];
+ if(importStatement.id.sym && !(importStatement.id.sym).onlyReferencedAsTypeRef) {
+ if(i <= (moduleDecl.mod).importedModules.length - 1) {
+ dependencyList += ", ";
+ importList += ", ";
+ }
+ importList += "__" + importStatement.id.actualText + "__";
+ dependencyList += importStatement.firstAliasedModToString();
+ }
+ }
+ for(var i = 0; i < moduleDecl.amdDependencies.length; i++) {
+ dependencyList += ", \"" + moduleDecl.amdDependencies[i] + "\"";
+ }
+ dependencyList += "]";
+ this.writeLineToOutput("define(" + dependencyList + "," + " function(" + importList + ") {");
+ } else {
+ }
+ } else {
+ if(!isExported) {
+ this.recordSourceMappingStart(moduleDecl);
+ this.writeToOutput("var ");
+ this.recordSourceMappingStart(moduleDecl.name);
+ this.writeToOutput(this.moduleName);
+ this.recordSourceMappingEnd(moduleDecl.name);
+ this.writeLineToOutput(";");
+ this.recordSourceMappingEnd(moduleDecl);
+ this.emitIndent();
+ }
+ this.writeToOutput("(");
+ this.recordSourceMappingStart(moduleDecl);
+ this.writeToOutput("function (");
+ this.recordSourceMappingStart(moduleDecl.name);
+ this.writeToOutput(this.moduleName);
+ this.recordSourceMappingEnd(moduleDecl.name);
+ this.writeLineToOutput(") {");
+ }
+ if(!isWholeFile) {
+ this.recordSourceMappingNameStart(this.moduleName);
+ }
+ if(!isDynamicMod || TypeScript.moduleGenTarget == TypeScript.ModuleGenTarget.Asynchronous) {
+ this.indenter.increaseIndent();
+ }
+ if(moduleDecl.modFlags & TypeScript.ModuleFlags.MustCaptureThis) {
+ this.writeCaptureThisStatement(moduleDecl);
+ }
+ this.emitJavascriptList(moduleDecl.members, null, TypeScript.TokenID.Semicolon, true, false, false);
+ if(!isDynamicMod || TypeScript.moduleGenTarget == TypeScript.ModuleGenTarget.Asynchronous) {
+ this.indenter.decreaseIndent();
+ }
+ this.emitIndent();
+ if(isDynamicMod) {
+ if(TypeScript.moduleGenTarget == TypeScript.ModuleGenTarget.Asynchronous) {
+ this.writeLineToOutput("})");
+ } else {
+ }
+ if(!isWholeFile) {
+ this.recordSourceMappingNameEnd();
+ }
+ this.recordSourceMappingEnd(moduleDecl);
+ if(this.outfile != prevOutFile) {
+ this.Close();
+ if(prevSourceMapper != null) {
+ this.allSourceMappers = prevAllSourceMappers;
+ this.sourceMapper = prevSourceMapper;
+ this.emitState.column = prevColumn;
+ this.emitState.line = prevLine;
+ }
+ this.outfile = prevOutFile;
+ this.emittingFileName = prevOutFileName;
+ }
+ } else {
+ var containingMod = null;
+ if(moduleDecl.type && moduleDecl.type.symbol.container && moduleDecl.type.symbol.container.declAST) {
+ containingMod = moduleDecl.type.symbol.container.declAST;
+ }
+ var parentIsDynamic = containingMod && TypeScript.hasFlag(containingMod.modFlags, TypeScript.ModuleFlags.IsDynamic);
+ this.recordSourceMappingStart(moduleDecl.endingToken);
+ if(temp == EmitContainer.Prog && isExported) {
+ this.writeToOutput("}");
+ if(!isWholeFile) {
+ this.recordSourceMappingNameEnd();
+ }
+ this.recordSourceMappingEnd(moduleDecl.endingToken);
+ this.writeLineToOutput(")(this." + this.moduleName + " || (this." + this.moduleName + " = {}));");
+ } else {
+ if(isExported || temp == EmitContainer.Prog) {
+ var dotMod = svModuleName != "" ? (parentIsDynamic ? "exports" : svModuleName) + "." : svModuleName;
+ this.writeToOutput("}");
+ if(!isWholeFile) {
+ this.recordSourceMappingNameEnd();
+ }
+ this.recordSourceMappingEnd(moduleDecl.endingToken);
+ this.writeLineToOutput(")(" + dotMod + this.moduleName + " || (" + dotMod + this.moduleName + " = {}));");
+ } else {
+ if(!isExported && temp != EmitContainer.Prog) {
+ this.writeToOutput("}");
+ if(!isWholeFile) {
+ this.recordSourceMappingNameEnd();
+ }
+ this.recordSourceMappingEnd(moduleDecl.endingToken);
+ this.writeLineToOutput(")(" + this.moduleName + " || (" + this.moduleName + " = {}));");
+ } else {
+ this.writeToOutput("}");
+ if(!isWholeFile) {
+ this.recordSourceMappingNameEnd();
+ }
+ this.recordSourceMappingEnd(moduleDecl.endingToken);
+ this.writeLineToOutput(")();");
+ }
+ }
+ }
+ this.recordSourceMappingEnd(moduleDecl);
+ if(temp != EmitContainer.Prog && isExported) {
+ this.emitIndent();
+ this.recordSourceMappingStart(moduleDecl);
+ if(parentIsDynamic) {
+ this.writeLineToOutput("var " + this.moduleName + " = exports." + this.moduleName + ";");
+ } else {
+ this.writeLineToOutput("var " + this.moduleName + " = " + svModuleName + "." + this.moduleName + ";");
+ }
+ this.recordSourceMappingEnd(moduleDecl);
+ }
+ }
+ this.setContainer(temp);
+ this.moduleName = svModuleName;
+ this.moduleDeclList.length--;
+ }
+ };
+ Emitter.prototype.emitIndex = function (operand1, operand2) {
+ var temp = this.setInObjectLiteral(false);
+ this.emitJavascript(operand1, TypeScript.TokenID.Tilde, false);
+ this.writeToOutput("[");
+ this.emitJavascriptList(operand2, ", ", TypeScript.TokenID.Comma, false, false, false);
+ this.writeToOutput("]");
+ this.setInObjectLiteral(temp);
+ };
+ Emitter.prototype.emitStringLiteral = function (text) {
+ this.writeToOutput(text);
+ };
+ Emitter.prototype.emitJavascriptFunction = function (funcDecl) {
+ if(TypeScript.hasFlag(funcDecl.fncFlags, TypeScript.FncFlags.Signature) || funcDecl.isOverload) {
+ return;
+ }
+ var temp;
+ var tempFnc = this.thisFnc;
+ this.thisFnc = funcDecl;
+ if(funcDecl.isConstructor) {
+ temp = this.setContainer(EmitContainer.Constructor);
+ } else {
+ temp = this.setContainer(EmitContainer.Function);
+ }
+ var bases = null;
+ var hasSelfRef = false;
+ var funcName = funcDecl.getNameText();
+ if((this.emitState.inObjectLiteral || !funcDecl.isAccessor()) && ((temp != EmitContainer.Constructor) || ((funcDecl.fncFlags & TypeScript.FncFlags.Method) == TypeScript.FncFlags.None))) {
+ var tempLit = this.setInObjectLiteral(false);
+ if(this.thisClassNode) {
+ bases = this.thisClassNode.extendsList;
+ }
+ hasSelfRef = Emitter.shouldCaptureThis(funcDecl);
+ this.recordSourceMappingStart(funcDecl);
+ if(TypeScript.hasFlag(funcDecl.fncFlags, TypeScript.FncFlags.Exported | TypeScript.FncFlags.ClassPropertyMethodExported) && funcDecl.type.symbol.container == this.checker.gloMod && !funcDecl.isConstructor) {
+ this.writeToOutput("this." + funcName + " = ");
+ this.emitInnerFunction(funcDecl, false, false, bases, hasSelfRef, this.thisClassNode);
+ } else {
+ this.emitInnerFunction(funcDecl, (funcDecl.name && !funcDecl.name.isMissing()), false, bases, hasSelfRef, this.thisClassNode);
+ }
+ this.setInObjectLiteral(tempLit);
+ }
+ this.setContainer(temp);
+ this.thisFnc = tempFnc;
+ if(TypeScript.hasFlag(funcDecl.fncFlags, TypeScript.FncFlags.Definition)) {
+ if(TypeScript.hasFlag(funcDecl.fncFlags, TypeScript.FncFlags.Static)) {
+ if(this.thisClassNode) {
+ if(funcDecl.isAccessor()) {
+ this.emitPropertyAccessor(funcDecl, this.thisClassNode.name.actualText, false);
+ } else {
+ this.emitIndent();
+ this.recordSourceMappingStart(funcDecl);
+ this.writeLineToOutput(this.thisClassNode.name.actualText + "." + funcName + " = " + funcName + ";");
+ this.recordSourceMappingEnd(funcDecl);
+ }
+ }
+ } else {
+ if((this.emitState.container == EmitContainer.Module || this.emitState.container == EmitContainer.DynamicModule) && TypeScript.hasFlag(funcDecl.fncFlags, TypeScript.FncFlags.Exported | TypeScript.FncFlags.ClassPropertyMethodExported)) {
+ this.emitIndent();
+ var modName = this.emitState.container == EmitContainer.Module ? this.moduleName : "exports";
+ this.recordSourceMappingStart(funcDecl);
+ this.writeLineToOutput(modName + "." + funcName + " = " + funcName + ";");
+ this.recordSourceMappingEnd(funcDecl);
+ }
+ }
+ }
+ };
+ Emitter.prototype.emitAmbientVarDecl = function (varDecl) {
+ if(varDecl.init) {
+ this.emitParensAndCommentsInPlace(varDecl, true);
+ this.recordSourceMappingStart(varDecl);
+ this.recordSourceMappingStart(varDecl.id);
+ this.writeToOutput(varDecl.id.actualText);
+ this.recordSourceMappingEnd(varDecl.id);
+ this.writeToOutput(" = ");
+ this.emitJavascript(varDecl.init, TypeScript.TokenID.Comma, false);
+ this.recordSourceMappingEnd(varDecl);
+ this.writeToOutput(";");
+ this.emitParensAndCommentsInPlace(varDecl, false);
+ }
+ };
+ Emitter.prototype.varListCount = function () {
+ return this.varListCountStack[this.varListCountStack.length - 1];
+ };
+ Emitter.prototype.emitVarDeclVar = function () {
+ if(this.varListCount() >= 0) {
+ this.writeToOutput("var ");
+ this.setInVarBlock(-this.varListCount());
+ }
+ return true;
+ };
+ Emitter.prototype.onEmitVar = function () {
+ if(this.varListCount() > 0) {
+ this.setInVarBlock(this.varListCount() - 1);
+ } else {
+ if(this.varListCount() < 0) {
+ this.setInVarBlock(this.varListCount() + 1);
+ }
+ }
+ };
+ Emitter.prototype.emitJavascriptVarDecl = function (varDecl, tokenId) {
+ if((varDecl.varFlags & TypeScript.VarFlags.Ambient) == TypeScript.VarFlags.Ambient) {
+ this.emitAmbientVarDecl(varDecl);
+ this.onEmitVar();
+ } else {
+ var sym = varDecl.sym;
+ var hasInitializer = (varDecl.init != null);
+ this.emitParensAndCommentsInPlace(varDecl, true);
+ this.recordSourceMappingStart(varDecl);
+ if(sym && sym.isMember() && sym.container && (sym.container.kind() == TypeScript.SymbolKind.Type)) {
+ var type = (sym.container).type;
+ if(type.isClass() && (!TypeScript.hasFlag(sym.flags, TypeScript.SymbolFlags.ModuleMember))) {
+ if(this.emitState.container != EmitContainer.Args) {
+ if(TypeScript.hasFlag(sym.flags, TypeScript.SymbolFlags.Static)) {
+ this.writeToOutput(sym.container.name + ".");
+ } else {
+ this.writeToOutput("this.");
+ }
+ }
+ } else {
+ if(type.hasImplementation()) {
+ if(!TypeScript.hasFlag(sym.flags, TypeScript.SymbolFlags.Exported) && (sym.container == this.checker.gloMod || !TypeScript.hasFlag(sym.flags, TypeScript.SymbolFlags.Property))) {
+ this.emitVarDeclVar();
+ } else {
+ if(TypeScript.hasFlag(varDecl.varFlags, TypeScript.VarFlags.LocalStatic)) {
+ this.writeToOutput(".");
+ } else {
+ if(this.emitState.container == EmitContainer.DynamicModule) {
+ this.writeToOutput("exports.");
+ } else {
+ this.writeToOutput(this.moduleName + ".");
+ }
+ }
+ }
+ } else {
+ if(tokenId != TypeScript.TokenID.OpenParen) {
+ if(TypeScript.hasFlag(sym.flags, TypeScript.SymbolFlags.Exported) && sym.container == this.checker.gloMod) {
+ this.writeToOutput("this.");
+ } else {
+ this.emitVarDeclVar();
+ }
+ }
+ }
+ }
+ } else {
+ if(tokenId != TypeScript.TokenID.OpenParen) {
+ this.emitVarDeclVar();
+ }
+ }
+ this.recordSourceMappingStart(varDecl.id);
+ this.writeToOutput(varDecl.id.actualText);
+ this.recordSourceMappingEnd(varDecl.id);
+ if(hasInitializer) {
+ this.writeToOutputTrimmable(" = ");
+ this.varListCountStack.push(0);
+ this.emitJavascript(varDecl.init, TypeScript.TokenID.Comma, false);
+ this.varListCountStack.pop();
+ }
+ this.onEmitVar();
+ if((tokenId != TypeScript.TokenID.OpenParen)) {
+ if(this.varListCount() < 0) {
+ this.writeToOutput(", ");
+ } else {
+ if(tokenId != TypeScript.TokenID.For) {
+ this.writeToOutputTrimmable(";");
+ }
+ }
+ }
+ this.recordSourceMappingEnd(varDecl);
+ this.emitParensAndCommentsInPlace(varDecl, false);
+ }
+ };
+ Emitter.prototype.declEnclosed = function (moduleDecl) {
+ if(moduleDecl == null) {
+ return true;
+ }
+ for(var i = 0, len = this.moduleDeclList.length; i < len; i++) {
+ if(this.moduleDeclList[i] == moduleDecl) {
+ return true;
+ }
+ }
+ return false;
+ };
+ Emitter.prototype.emitJavascriptName = function (name, addThis) {
+ var sym = name.sym;
+ this.emitParensAndCommentsInPlace(name, true);
+ this.recordSourceMappingStart(name);
+ if(!name.isMissing()) {
+ if(addThis && (this.emitState.container != EmitContainer.Args) && sym) {
+ if(sym.container && (sym.container.name != TypeScript.globalId)) {
+ if(TypeScript.hasFlag(sym.flags, TypeScript.SymbolFlags.Static) && (TypeScript.hasFlag(sym.flags, TypeScript.SymbolFlags.Property))) {
+ if(sym.declModule && TypeScript.hasFlag(sym.declModule.modFlags, TypeScript.ModuleFlags.IsDynamic)) {
+ this.writeToOutput("exports.");
+ } else {
+ this.writeToOutput(sym.container.name + ".");
+ }
+ } else {
+ if(sym.kind() == TypeScript.SymbolKind.Field) {
+ var fieldSym = sym;
+ if(TypeScript.hasFlag(fieldSym.flags, TypeScript.SymbolFlags.ModuleMember)) {
+ if((sym.container != this.checker.gloMod) && ((TypeScript.hasFlag(sym.flags, TypeScript.SymbolFlags.Property)) || TypeScript.hasFlag(sym.flags, TypeScript.SymbolFlags.Exported))) {
+ if(TypeScript.hasFlag(sym.declModule.modFlags, TypeScript.ModuleFlags.IsDynamic)) {
+ this.writeToOutput("exports.");
+ } else {
+ this.writeToOutput(sym.container.name + ".");
+ }
+ }
+ } else {
+ if(sym.isInstanceProperty()) {
+ this.emitThis();
+ this.writeToOutput(".");
+ }
+ }
+ } else {
+ if(sym.kind() == TypeScript.SymbolKind.Type) {
+ if(sym.isInstanceProperty()) {
+ var typeSym = sym;
+ var type = typeSym.type;
+ if(type.call && !TypeScript.hasFlag(sym.flags, TypeScript.SymbolFlags.ModuleMember)) {
+ this.emitThis();
+ this.writeToOutput(".");
+ }
+ } else {
+ if((sym.unitIndex != this.checker.locationInfo.unitIndex) || (!this.declEnclosed(sym.declModule))) {
+ this.writeToOutput(sym.container.name + ".");
+ }
+ }
+ }
+ }
+ }
+ } else {
+ if(sym.container == this.checker.gloMod && TypeScript.hasFlag(sym.flags, TypeScript.SymbolFlags.Exported) && !TypeScript.hasFlag(sym.flags, TypeScript.SymbolFlags.Ambient) && !((sym.isType() || sym.isMember()) && sym.declModule && TypeScript.hasFlag(sym.declModule.modFlags, TypeScript.ModuleFlags.Ambient)) && this.emitState.container == EmitContainer.Prog && sym.declAST.nodeType != TypeScript.NodeType.FuncDecl) {
+ this.writeToOutput("this.");
+ }
+ }
+ }
+ if(sym && sym.declAST && sym.declAST.nodeType == TypeScript.NodeType.ModuleDeclaration && (TypeScript.hasFlag((sym.declAST).modFlags, TypeScript.ModuleFlags.IsDynamic))) {
+ var moduleDecl = sym.declAST;
+ if(TypeScript.moduleGenTarget == TypeScript.ModuleGenTarget.Asynchronous) {
+ this.writeLineToOutput("__" + this.modAliasId + "__;");
+ } else {
+ var modPath = name.actualText;
+ var isAmbient = moduleDecl.mod.symbol.declAST && TypeScript.hasFlag((moduleDecl.mod.symbol.declAST).modFlags, TypeScript.ModuleFlags.Ambient);
+ modPath = isAmbient ? modPath : this.firstModAlias ? this.firstModAlias : TypeScript.quoteBaseName(modPath);
+ modPath = isAmbient ? modPath : (!TypeScript.isRelative(TypeScript.stripQuotes(modPath)) ? TypeScript.quoteStr("./" + TypeScript.stripQuotes(modPath)) : modPath);
+ this.writeToOutput("require(" + modPath + ")");
+ }
+ } else {
+ this.writeToOutput(name.actualText);
+ }
+ }
+ this.recordSourceMappingEnd(name);
+ this.emitParensAndCommentsInPlace(name, false);
+ };
+ Emitter.prototype.emitJavascriptStatements = function (stmts, emitEmptyBod) {
+ if(stmts) {
+ if(stmts.nodeType != TypeScript.NodeType.Block) {
+ var hasContents = (stmts && (stmts.nodeType != TypeScript.NodeType.List || ((stmts).members.length > 0)));
+ if(emitEmptyBod || hasContents) {
+ var hasOnlyBlockStatement = ((stmts.nodeType == TypeScript.NodeType.Block) || ((stmts.nodeType == TypeScript.NodeType.List) && ((stmts).members.length == 1) && ((stmts).members[0].nodeType == TypeScript.NodeType.Block)));
+ this.recordSourceMappingStart(stmts);
+ if(!hasOnlyBlockStatement) {
+ this.writeLineToOutput(" {");
+ this.indenter.increaseIndent();
+ }
+ this.emitJavascriptList(stmts, null, TypeScript.TokenID.Semicolon, true, false, false);
+ if(!hasOnlyBlockStatement) {
+ this.writeLineToOutput("");
+ this.indenter.decreaseIndent();
+ this.emitIndent();
+ this.writeToOutput("}");
+ }
+ this.recordSourceMappingEnd(stmts);
+ }
+ } else {
+ this.emitJavascript(stmts, TypeScript.TokenID.Semicolon, true);
+ }
+ } else {
+ if(emitEmptyBod) {
+ this.writeToOutput("{ }");
+ }
+ }
+ };
+ Emitter.prototype.emitBareJavascriptStatements = function (stmts, emitClassPropertiesAfterSuperCall) {
+ if (typeof emitClassPropertiesAfterSuperCall === "undefined") { emitClassPropertiesAfterSuperCall = false; }
+ if(stmts.nodeType != TypeScript.NodeType.Block) {
+ if(stmts.nodeType == TypeScript.NodeType.List) {
+ var stmtList = stmts;
+ if((stmtList.members.length == 2) && (stmtList.members[0].nodeType == TypeScript.NodeType.Block) && (stmtList.members[1].nodeType == TypeScript.NodeType.EndCode)) {
+ this.emitJavascript(stmtList.members[0], TypeScript.TokenID.Semicolon, true);
+ this.writeLineToOutput("");
+ } else {
+ this.emitJavascriptList(stmts, null, TypeScript.TokenID.Semicolon, true, false, emitClassPropertiesAfterSuperCall);
+ }
+ } else {
+ this.emitJavascript(stmts, TypeScript.TokenID.Semicolon, true);
+ }
+ } else {
+ this.emitJavascript(stmts, TypeScript.TokenID.Semicolon, true);
+ }
+ };
+ Emitter.prototype.recordSourceMappingNameStart = function (name) {
+ if(this.sourceMapper) {
+ var finalName = name;
+ if(!name) {
+ finalName = "";
+ } else {
+ if(this.sourceMapper.currentNameIndex.length > 0) {
+ finalName = this.sourceMapper.names[this.sourceMapper.currentNameIndex.length - 1] + "." + name;
+ }
+ }
+ this.sourceMapper.names.push(finalName);
+ this.sourceMapper.currentNameIndex.push(this.sourceMapper.names.length - 1);
+ }
+ };
+ Emitter.prototype.recordSourceMappingNameEnd = function () {
+ if(this.sourceMapper) {
+ this.sourceMapper.currentNameIndex.pop();
+ }
+ };
+ Emitter.prototype.recordSourceMappingStart = function (ast) {
+ if(this.sourceMapper && TypeScript.isValidAstNode(ast)) {
+ var lineCol = {
+ line: -1,
+ col: -1
+ };
+ var sourceMapping = new TypeScript.SourceMapping();
+ sourceMapping.start.emittedColumn = this.emitState.column;
+ sourceMapping.start.emittedLine = this.emitState.line;
+ TypeScript.getSourceLineColFromMap(lineCol, ast.minChar, this.checker.locationInfo.lineMap);
+ sourceMapping.start.sourceColumn = lineCol.col;
+ sourceMapping.start.sourceLine = lineCol.line;
+ TypeScript.getSourceLineColFromMap(lineCol, ast.limChar, this.checker.locationInfo.lineMap);
+ sourceMapping.end.sourceColumn = lineCol.col;
+ sourceMapping.end.sourceLine = lineCol.line;
+ if(this.sourceMapper.currentNameIndex.length > 0) {
+ sourceMapping.nameIndex = this.sourceMapper.currentNameIndex[this.sourceMapper.currentNameIndex.length - 1];
+ }
+ var siblings = this.sourceMapper.currentMappings[this.sourceMapper.currentMappings.length - 1];
+ siblings.push(sourceMapping);
+ this.sourceMapper.currentMappings.push(sourceMapping.childMappings);
+ }
+ };
+ Emitter.prototype.recordSourceMappingEnd = function (ast) {
+ if(this.sourceMapper && TypeScript.isValidAstNode(ast)) {
+ this.sourceMapper.currentMappings.pop();
+ var siblings = this.sourceMapper.currentMappings[this.sourceMapper.currentMappings.length - 1];
+ var sourceMapping = siblings[siblings.length - 1];
+ sourceMapping.end.emittedColumn = this.emitState.column;
+ sourceMapping.end.emittedLine = this.emitState.line;
+ }
+ };
+ Emitter.prototype.Close = function () {
+ if(this.sourceMapper != null) {
+ TypeScript.SourceMapper.EmitSourceMapping(this.allSourceMappers);
+ }
+ try {
+ this.outfile.Close();
+ } catch (ex) {
+ this.errorReporter.emitterError(null, ex.message);
+ }
+ };
+ Emitter.prototype.emitJavascriptList = function (ast, delimiter, tokenId, startLine, onlyStatics, emitClassPropertiesAfterSuperCall, emitPrologue, requiresExtendsBlock) {
+ if (typeof emitClassPropertiesAfterSuperCall === "undefined") { emitClassPropertiesAfterSuperCall = false; }
+ if (typeof emitPrologue === "undefined") { emitPrologue = false; }
+ if(ast == null) {
+ return;
+ } else {
+ if(ast.nodeType != TypeScript.NodeType.List) {
+ this.emitPrologue(emitPrologue);
+ this.emitJavascript(ast, tokenId, startLine);
+ } else {
+ var list = ast;
+ if(list.members.length == 0) {
+ return;
+ }
+ this.emitParensAndCommentsInPlace(ast, true);
+ var len = list.members.length;
+ for(var i = 0; i < len; i++) {
+ if(emitPrologue) {
+ if(i == 1 || !TypeScript.hasFlag(list.flags, TypeScript.ASTFlags.StrictMode)) {
+ this.emitPrologue(requiresExtendsBlock);
+ emitPrologue = false;
+ }
+ }
+ if(i == 1 && emitClassPropertiesAfterSuperCall) {
+ var constructorDecl = (this.thisClassNode).constructorDecl;
+ if(constructorDecl && constructorDecl.arguments) {
+ var argsLen = constructorDecl.arguments.members.length;
+ for(var iArg = 0; iArg < argsLen; iArg++) {
+ var arg = constructorDecl.arguments.members[iArg];
+ if((arg.varFlags & TypeScript.VarFlags.Property) != TypeScript.VarFlags.None) {
+ this.emitIndent();
+ this.recordSourceMappingStart(arg);
+ this.recordSourceMappingStart(arg.id);
+ this.writeToOutput("this." + arg.id.actualText);
+ this.recordSourceMappingEnd(arg.id);
+ this.writeToOutput(" = ");
+ this.recordSourceMappingStart(arg.id);
+ this.writeToOutput(arg.id.actualText);
+ this.recordSourceMappingEnd(arg.id);
+ this.writeLineToOutput(";");
+ this.recordSourceMappingEnd(arg);
+ }
+ }
+ }
+ var nProps = (this.thisClassNode.members).members.length;
+ for(var iMember = 0; iMember < nProps; iMember++) {
+ if((this.thisClassNode.members).members[iMember].nodeType == TypeScript.NodeType.VarDecl) {
+ var varDecl = (this.thisClassNode.members).members[iMember];
+ if(!TypeScript.hasFlag(varDecl.varFlags, TypeScript.VarFlags.Static) && varDecl.init) {
+ this.emitIndent();
+ this.emitJavascriptVarDecl(varDecl, TypeScript.TokenID.Tilde);
+ this.writeLineToOutput("");
+ }
+ }
+ }
+ }
+ var emitNode = list.members[i];
+ var isStaticDecl = (emitNode.nodeType == TypeScript.NodeType.FuncDecl && TypeScript.hasFlag((emitNode).fncFlags, TypeScript.FncFlags.Static)) || (emitNode.nodeType == TypeScript.NodeType.VarDecl && TypeScript.hasFlag((emitNode).varFlags, TypeScript.VarFlags.Static));
+ if(onlyStatics ? !isStaticDecl : isStaticDecl) {
+ continue;
+ }
+ this.emitJavascript(emitNode, tokenId, startLine);
+ if(delimiter && (i < (len - 1))) {
+ if(startLine) {
+ this.writeLineToOutput(delimiter);
+ } else {
+ this.writeToOutput(delimiter);
+ }
+ } else {
+ if(startLine && (emitNode.nodeType != TypeScript.NodeType.ModuleDeclaration) && (emitNode.nodeType != TypeScript.NodeType.InterfaceDeclaration) && (!((emitNode.nodeType == TypeScript.NodeType.VarDecl) && ((((emitNode).varFlags) & TypeScript.VarFlags.Ambient) == TypeScript.VarFlags.Ambient) && (((emitNode).init) == null)) && this.varListCount() >= 0) && (emitNode.nodeType != TypeScript.NodeType.Block || (emitNode).isStatementBlock) && (emitNode.nodeType != TypeScript.NodeType.EndCode) && (emitNode.nodeType != TypeScript.NodeType.FuncDecl)) {
+ this.writeLineToOutput("");
+ }
+ }
+ }
+ this.emitParensAndCommentsInPlace(ast, false);
+ }
+ }
+ };
+ Emitter.prototype.emitJavascript = function (ast, tokenId, startLine) {
+ if(ast == null) {
+ return;
+ }
+ if(startLine && (this.indenter.indentAmt > 0) && (ast.nodeType != TypeScript.NodeType.List) && (ast.nodeType != TypeScript.NodeType.Block)) {
+ if((ast.nodeType != TypeScript.NodeType.InterfaceDeclaration) && (!((ast.nodeType == TypeScript.NodeType.VarDecl) && ((((ast).varFlags) & TypeScript.VarFlags.Ambient) == TypeScript.VarFlags.Ambient) && (((ast).init) == null)) && this.varListCount() >= 0) && (ast.nodeType != TypeScript.NodeType.EndCode) && ((ast.nodeType != TypeScript.NodeType.FuncDecl) || (this.emitState.container != EmitContainer.Constructor))) {
+ this.emitIndent();
+ }
+ }
+ ast.emit(this, tokenId, startLine);
+ if((tokenId == TypeScript.TokenID.Semicolon) && (ast.nodeType < TypeScript.NodeType.GeneralNode)) {
+ this.writeToOutput(";");
+ }
+ };
+ Emitter.prototype.emitPropertyAccessor = function (funcDecl, className, isProto) {
+ if(!(funcDecl.accessorSymbol).hasBeenEmitted) {
+ var accessorSymbol = funcDecl.accessorSymbol;
+ this.emitIndent();
+ this.recordSourceMappingStart(funcDecl);
+ this.writeLineToOutput("Object.defineProperty(" + className + (isProto ? ".prototype, \"" : ", \"") + funcDecl.name.actualText + "\"" + ", {");
+ this.indenter.increaseIndent();
+ if(accessorSymbol.getter) {
+ var getter = accessorSymbol.getter.declAST;
+ this.emitIndent();
+ this.recordSourceMappingStart(getter);
+ this.writeToOutput("get: ");
+ this.emitInnerFunction(getter, false, isProto, null, Emitter.shouldCaptureThis(getter), null);
+ this.writeLineToOutput(",");
+ }
+ if(accessorSymbol.setter) {
+ var setter = accessorSymbol.setter.declAST;
+ this.emitIndent();
+ this.recordSourceMappingStart(setter);
+ this.writeToOutput("set: ");
+ this.emitInnerFunction(setter, false, isProto, null, Emitter.shouldCaptureThis(setter), null);
+ this.writeLineToOutput(",");
+ }
+ this.emitIndent();
+ this.writeLineToOutput("enumerable: true,");
+ this.emitIndent();
+ this.writeLineToOutput("configurable: true");
+ this.indenter.decreaseIndent();
+ this.emitIndent();
+ this.writeLineToOutput("});");
+ this.recordSourceMappingEnd(funcDecl);
+ accessorSymbol.hasBeenEmitted = true;
+ }
+ };
+ Emitter.prototype.emitPrototypeMember = function (member, className) {
+ if(member.nodeType == TypeScript.NodeType.FuncDecl) {
+ var funcDecl = member;
+ if(funcDecl.isAccessor()) {
+ this.emitPropertyAccessor(funcDecl, className, true);
+ } else {
+ this.emitIndent();
+ this.recordSourceMappingStart(funcDecl);
+ this.writeToOutput(className + ".prototype." + funcDecl.getNameText() + " = ");
+ this.emitInnerFunction(funcDecl, false, true, null, Emitter.shouldCaptureThis(funcDecl), null);
+ this.writeLineToOutput(";");
+ }
+ } else {
+ if(member.nodeType == TypeScript.NodeType.VarDecl) {
+ var varDecl = member;
+ if(varDecl.init) {
+ this.emitIndent();
+ this.recordSourceMappingStart(varDecl);
+ this.recordSourceMappingStart(varDecl.id);
+ this.writeToOutput(className + ".prototype." + varDecl.id.actualText);
+ this.recordSourceMappingEnd(varDecl.id);
+ this.writeToOutput(" = ");
+ this.emitJavascript(varDecl.init, TypeScript.TokenID.Equals, false);
+ this.recordSourceMappingEnd(varDecl);
+ this.writeLineToOutput(";");
+ }
+ }
+ }
+ };
+ Emitter.prototype.emitAddBaseMethods = function (className, base, classDecl) {
+ if(base.members) {
+ var baseSymbol = base.symbol;
+ var baseName = baseSymbol.name;
+ if(baseSymbol.declModule != classDecl.type.symbol.declModule) {
+ baseName = baseSymbol.fullName();
+ }
+ base.members.allMembers.map(function (key, s, c) {
+ var sym = s;
+ if((sym.kind() == TypeScript.SymbolKind.Type) && (sym).type.call) {
+ this.recordSourceMappingStart(sym.declAST);
+ this.writeLineToOutput(className + ".prototype." + sym.name + " = " + baseName + ".prototype." + sym.name + ";");
+ this.recordSourceMappingEnd(sym.declAST);
+ }
+ }, null);
+ }
+ if(base.extendsList) {
+ for(var i = 0, len = base.extendsList.length; i < len; i++) {
+ this.emitAddBaseMethods(className, base.extendsList[i], classDecl);
+ }
+ }
+ };
+ Emitter.prototype.emitJavascriptClass = function (classDecl) {
+ if(!TypeScript.hasFlag(classDecl.varFlags, TypeScript.VarFlags.Ambient)) {
+ var svClassNode = this.thisClassNode;
+ var i = 0;
+ this.thisClassNode = classDecl;
+ var className = classDecl.name.actualText;
+ this.emitParensAndCommentsInPlace(classDecl, true);
+ var temp = this.setContainer(EmitContainer.Class);
+ this.recordSourceMappingStart(classDecl);
+ if(TypeScript.hasFlag(classDecl.varFlags, TypeScript.VarFlags.Exported) && classDecl.type.symbol.container == this.checker.gloMod) {
+ this.writeToOutput("this." + className);
+ } else {
+ this.writeToOutput("var " + className);
+ }
+ var hasBaseClass = classDecl.extendsList && classDecl.extendsList.members.length;
+ var baseNameDecl = null;
+ var baseName = null;
+ if(hasBaseClass) {
+ this.writeLineToOutput(" = (function (_super) {");
+ } else {
+ this.writeLineToOutput(" = (function () {");
+ }
+ this.recordSourceMappingNameStart(className);
+ this.indenter.increaseIndent();
+ if(hasBaseClass) {
+ baseNameDecl = classDecl.extendsList.members[0];
+ baseName = baseNameDecl.nodeType == TypeScript.NodeType.Call ? (baseNameDecl).target : baseNameDecl;
+ this.emitIndent();
+ this.writeLineToOutput("__extends(" + className + ", _super);");
+ }
+ this.emitIndent();
+ var constrDecl = classDecl.constructorDecl;
+ if(constrDecl) {
+ this.emitJavascript(classDecl.constructorDecl, TypeScript.TokenID.OpenParen, false);
+ } else {
+ var wroteProps = 0;
+ this.recordSourceMappingStart(classDecl);
+ this.indenter.increaseIndent();
+ this.writeToOutput("function " + classDecl.name.actualText + "() {");
+ this.recordSourceMappingNameStart("constructor");
+ if(hasBaseClass) {
+ this.writeLineToOutput("");
+ this.emitIndent();
+ this.writeLineToOutput("_super.apply(this, arguments);");
+ wroteProps++;
+ }
+ if(classDecl.varFlags & TypeScript.VarFlags.MustCaptureThis) {
+ this.writeCaptureThisStatement(classDecl);
+ }
+ var members = (this.thisClassNode.members).members;
+ for(var i = 0; i < members.length; i++) {
+ if(members[i].nodeType == TypeScript.NodeType.VarDecl) {
+ var varDecl = members[i];
+ if(!TypeScript.hasFlag(varDecl.varFlags, TypeScript.VarFlags.Static) && varDecl.init) {
+ this.writeLineToOutput("");
+ this.emitIndent();
+ this.emitJavascriptVarDecl(varDecl, TypeScript.TokenID.Tilde);
+ wroteProps++;
+ }
+ }
+ }
+ if(wroteProps) {
+ this.writeLineToOutput("");
+ this.indenter.decreaseIndent();
+ this.emitIndent();
+ this.writeLineToOutput("}");
+ } else {
+ this.writeLineToOutput(" }");
+ this.indenter.decreaseIndent();
+ }
+ this.recordSourceMappingNameEnd();
+ this.recordSourceMappingEnd(classDecl);
+ }
+ var membersLen = classDecl.members.members.length;
+ for(var j = 0; j < membersLen; j++) {
+ var memberDecl = classDecl.members.members[j];
+ if(memberDecl.nodeType == TypeScript.NodeType.FuncDecl) {
+ var fn = memberDecl;
+ if(TypeScript.hasFlag(fn.fncFlags, TypeScript.FncFlags.Method) && !fn.isSignature()) {
+ if(!TypeScript.hasFlag(fn.fncFlags, TypeScript.FncFlags.Static)) {
+ this.emitPrototypeMember(fn, className);
+ } else {
+ if(fn.isAccessor()) {
+ this.emitPropertyAccessor(fn, this.thisClassNode.name.actualText, false);
+ } else {
+ this.emitIndent();
+ this.recordSourceMappingStart(fn);
+ this.writeToOutput(classDecl.name.actualText + "." + fn.name.actualText + " = ");
+ this.emitInnerFunction(fn, (fn.name && !fn.name.isMissing()), true, null, Emitter.shouldCaptureThis(fn), null);
+ this.writeLineToOutput(";");
+ }
+ }
+ }
+ } else {
+ if(memberDecl.nodeType == TypeScript.NodeType.VarDecl) {
+ var varDecl = memberDecl;
+ if(TypeScript.hasFlag(varDecl.varFlags, TypeScript.VarFlags.Static)) {
+ if(varDecl.init) {
+ this.emitIndent();
+ this.recordSourceMappingStart(varDecl);
+ this.writeToOutput(classDecl.name.actualText + "." + varDecl.id.actualText + " = ");
+ this.emitJavascript(varDecl.init, TypeScript.TokenID.Equals, false);
+ this.writeLineToOutput(";");
+ this.recordSourceMappingEnd(varDecl);
+ }
+ }
+ } else {
+ throw Error("We want to catch this");
+ }
+ }
+ }
+ this.emitIndent();
+ this.recordSourceMappingStart(classDecl.endingToken);
+ this.writeLineToOutput("return " + className + ";");
+ this.recordSourceMappingEnd(classDecl.endingToken);
+ this.indenter.decreaseIndent();
+ this.emitIndent();
+ this.recordSourceMappingStart(classDecl.endingToken);
+ this.writeToOutput("}");
+ this.recordSourceMappingNameEnd();
+ this.recordSourceMappingEnd(classDecl.endingToken);
+ this.recordSourceMappingStart(classDecl);
+ this.writeToOutput(")(");
+ if(hasBaseClass) {
+ this.emitJavascript(baseName, TypeScript.TokenID.Tilde, false);
+ }
+ this.writeToOutput(");");
+ this.recordSourceMappingEnd(classDecl);
+ if((temp == EmitContainer.Module || temp == EmitContainer.DynamicModule) && TypeScript.hasFlag(classDecl.varFlags, TypeScript.VarFlags.Exported)) {
+ this.writeLineToOutput("");
+ this.emitIndent();
+ var modName = temp == EmitContainer.Module ? this.moduleName : "exports";
+ this.recordSourceMappingStart(classDecl);
+ this.writeToOutput(modName + "." + className + " = " + className + ";");
+ this.recordSourceMappingEnd(classDecl);
+ }
+ this.emitIndent();
+ this.recordSourceMappingEnd(classDecl);
+ this.emitParensAndCommentsInPlace(classDecl, false);
+ this.setContainer(temp);
+ this.thisClassNode = svClassNode;
+ }
+ };
+ Emitter.prototype.emitPrologue = function (reqInherits) {
+ if(!this.prologueEmitted) {
+ if(reqInherits) {
+ this.prologueEmitted = true;
+ this.writeLineToOutput("var __extends = this.__extends || function (d, b) {");
+ this.writeLineToOutput(" function __() { this.constructor = d; }");
+ this.writeLineToOutput(" __.prototype = b.prototype;");
+ this.writeLineToOutput(" d.prototype = new __();");
+ this.writeLineToOutput("};");
+ }
+ if(this.checker.mustCaptureGlobalThis) {
+ this.prologueEmitted = true;
+ this.writeLineToOutput(this.captureThisStmtString);
+ }
+ }
+ };
+ Emitter.prototype.emitSuperReference = function () {
+ this.writeToOutput("_super.prototype");
+ };
+ Emitter.prototype.emitSuperCall = function (callEx) {
+ if(callEx.target.nodeType == TypeScript.NodeType.Dot) {
+ var dotNode = callEx.target;
+ if(dotNode.operand1.nodeType == TypeScript.NodeType.Super) {
+ this.emitJavascript(dotNode, TypeScript.TokenID.OpenParen, false);
+ this.writeToOutput(".call(");
+ this.emitThis();
+ if(callEx.arguments && callEx.arguments.members.length > 0) {
+ this.writeToOutput(", ");
+ this.emitJavascriptList(callEx.arguments, ", ", TypeScript.TokenID.Comma, false, false, false);
+ }
+ this.writeToOutput(")");
+ return true;
+ }
+ }
+ return false;
+ };
+ Emitter.prototype.emitThis = function () {
+ if(this.thisFnc && !this.thisFnc.isMethod() && (!this.thisFnc.isConstructor)) {
+ this.writeToOutput("_this");
+ } else {
+ this.writeToOutput("this");
+ }
+ };
+ Emitter.shouldCaptureThis = function shouldCaptureThis(func) {
+ return func.hasSelfReference() || func.hasSuperReferenceInFatArrowFunction();
+ }
+ Emitter.prototype.createFile = function (fileName, useUTF8) {
+ try {
+ return this.emitOptions.ioHost.createFile(fileName, useUTF8);
+ } catch (ex) {
+ this.errorReporter.emitterError(null, ex.message);
+ }
+ };
+ return Emitter;
+ })();
+ TypeScript.Emitter = Emitter;
+})(TypeScript || (TypeScript = {}));
+var TypeScript;
+(function (TypeScript) {
+ var ErrorReporter = (function () {
+ function ErrorReporter(outfile) {
+ this.outfile = outfile;
+ this.parser = null;
+ this.checker = null;
+ this.lineCol = {
+ line: 0,
+ col: 0
+ };
+ this.emitAsComments = true;
+ this.hasErrors = false;
+ this.pushToErrorSink = false;
+ this.errorSink = [];
+ }
+ ErrorReporter.prototype.getCapturedErrors = function () {
+ return this.errorSink;
+ };
+ ErrorReporter.prototype.freeCapturedErrors = function () {
+ this.errorSink = [];
+ };
+ ErrorReporter.prototype.captureError = function (emsg) {
+ this.errorSink[this.errorSink.length] = emsg;
+ };
+ ErrorReporter.prototype.setErrOut = function (outerr) {
+ this.outfile = outerr;
+ this.emitAsComments = false;
+ };
+ ErrorReporter.prototype.emitPrefix = function () {
+ if(this.emitAsComments) {
+ this.outfile.Write("// ");
+ }
+ this.outfile.Write(this.checker.locationInfo.filename + "(" + this.lineCol.line + "," + this.lineCol.col + "): ");
+ };
+ ErrorReporter.prototype.writePrefix = function (ast) {
+ if(ast) {
+ this.setError(ast);
+ } else {
+ this.lineCol.line = 0;
+ this.lineCol.col = 0;
+ }
+ this.emitPrefix();
+ };
+ ErrorReporter.prototype.writePrefixFromSym = function (symbol) {
+ if(symbol && this.checker.locationInfo.lineMap) {
+ TypeScript.getSourceLineColFromMap(this.lineCol, symbol.location, this.checker.locationInfo.lineMap);
+ } else {
+ this.lineCol.line = -1;
+ this.lineCol.col = -1;
+ }
+ this.emitPrefix();
+ };
+ ErrorReporter.prototype.setError = function (ast) {
+ if(ast) {
+ ast.flags |= TypeScript.ASTFlags.Error;
+ if(this.checker.locationInfo.lineMap) {
+ TypeScript.getSourceLineColFromMap(this.lineCol, ast.minChar, this.checker.locationInfo.lineMap);
+ }
+ }
+ };
+ ErrorReporter.prototype.reportError = function (ast, message) {
+ if(this.pushToErrorSink) {
+ this.captureError(message);
+ return;
+ }
+ this.hasErrors = true;
+ if(ast && this.parser.errorRecovery && this.parser.errorCallback) {
+ var len = (ast.limChar - ast.minChar);
+ this.parser.errorCallback(ast.minChar, len, message, this.checker.locationInfo.unitIndex);
+ } else {
+ this.writePrefix(ast);
+ this.outfile.WriteLine(message);
+ }
+ };
+ ErrorReporter.prototype.reportErrorFromSym = function (symbol, message) {
+ if(this.pushToErrorSink) {
+ this.captureError(message);
+ return;
+ }
+ this.hasErrors = true;
+ if(this.parser.errorRecovery && this.parser.errorCallback) {
+ this.parser.errorCallback(symbol.location, symbol.length, message, this.checker.locationInfo.unitIndex);
+ } else {
+ this.writePrefixFromSym(symbol);
+ this.outfile.WriteLine(message);
+ }
+ };
+ ErrorReporter.prototype.emitterError = function (ast, message) {
+ this.reportError(ast, message);
+ throw Error("EmitError");
+ };
+ ErrorReporter.prototype.duplicateIdentifier = function (ast, name) {
+ this.reportError(ast, "Duplicate identifier '" + name + "'");
+ };
+ ErrorReporter.prototype.showRef = function (ast, text, symbol) {
+ var defLineCol = {
+ line: -1,
+ col: -1
+ };
+ this.parser.getSourceLineCol(defLineCol, symbol.location);
+ this.reportError(ast, "symbol " + text + " defined at (" + defLineCol.line + "," + defLineCol.col + ")");
+ };
+ ErrorReporter.prototype.unresolvedSymbol = function (ast, name) {
+ this.reportError(ast, "The name '" + name + "' does not exist in the current scope");
+ };
+ ErrorReporter.prototype.symbolDoesNotReferToAValue = function (ast, name) {
+ this.reportError(ast, "The name '" + name + "' does not refer to a value");
+ };
+ ErrorReporter.prototype.styleError = function (ast, msg) {
+ var bkThrow = this.pushToErrorSink;
+ this.pushToErrorSink = false;
+ this.reportError(ast, "STYLE: " + msg);
+ this.pushToErrorSink = bkThrow;
+ };
+ ErrorReporter.prototype.simpleError = function (ast, msg) {
+ this.reportError(ast, msg);
+ };
+ ErrorReporter.prototype.simpleErrorFromSym = function (sym, msg) {
+ this.reportErrorFromSym(sym, msg);
+ };
+ ErrorReporter.prototype.invalidSuperReference = function (ast) {
+ this.simpleError(ast, "Keyword 'super' can only be used inside a class instance method");
+ };
+ ErrorReporter.prototype.valueCannotBeModified = function (ast) {
+ this.simpleError(ast, "The left-hand side of an assignment expression must be a variable, property or indexer");
+ };
+ ErrorReporter.prototype.invalidCall = function (ast, nodeType, scope) {
+ var targetType = ast.target.type;
+ var typeName = targetType.getScopedTypeName(scope);
+ if(targetType.construct && (nodeType == TypeScript.NodeType.Call)) {
+ this.reportError(ast, "Value of type '" + typeName + "' is not callable. Did you mean to include 'new'?");
+ } else {
+ var catString = (nodeType == TypeScript.NodeType.Call) ? "callable" : "newable";
+ this.reportError(ast, "Value of type '" + typeName + "' is not " + catString);
+ }
+ };
+ ErrorReporter.prototype.indexLHS = function (ast, scope) {
+ var targetType = ast.operand1.type.getScopedTypeName(scope);
+ var indexType = ast.operand2.type.getScopedTypeName(scope);
+ this.simpleError(ast, "Value of type '" + targetType + "' is not indexable by type '" + indexType + "'");
+ };
+ ErrorReporter.prototype.incompatibleTypes = function (ast, t1, t2, op, scope, comparisonInfo) {
+ if(!t1) {
+ t1 = this.checker.anyType;
+ }
+ if(!t2) {
+ t2 = this.checker.anyType;
+ }
+ var reason = comparisonInfo ? comparisonInfo.message : "";
+ if(op) {
+ this.reportError(ast, "Operator '" + op + "' cannot be applied to types '" + t1.getScopedTypeName(scope) + "' and '" + t2.getScopedTypeName(scope) + "'" + (reason ? ": " + reason : ""));
+ } else {
+ this.reportError(ast, "Cannot convert '" + t1.getScopedTypeName(scope) + "' to '" + t2.getScopedTypeName(scope) + "'" + (reason ? ": " + reason : ""));
+ }
+ };
+ ErrorReporter.prototype.expectedClassOrInterface = function (ast) {
+ this.simpleError(ast, "Expected var, class, interface, or module");
+ };
+ ErrorReporter.prototype.unaryOperatorTypeError = function (ast, op, type) {
+ this.reportError(ast, "Operator '" + op + "' cannot be applied to type '" + type.getTypeName() + "'");
+ };
+ return ErrorReporter;
+ })();
+ TypeScript.ErrorReporter = ErrorReporter;
+})(TypeScript || (TypeScript = {}));
+var TypeScript;
+(function (TypeScript) {
+ (function (TypeContext) {
+ TypeContext._map = [];
+ TypeContext.NoTypes = 0;
+ TypeContext.ArraySuffix = 1;
+ TypeContext.Primitive = 2;
+ TypeContext.Named = 4;
+ TypeContext.AllSimpleTypes = TypeContext.Primitive | TypeContext.Named;
+ TypeContext.AllTypes = TypeContext.Primitive | TypeContext.Named | TypeContext.ArraySuffix;
+ })(TypeScript.TypeContext || (TypeScript.TypeContext = {}));
+ var TypeContext = TypeScript.TypeContext;
+ (function (ParseState) {
+ ParseState._map = [];
+ ParseState._map[0] = "None";
+ ParseState.None = 0;
+ ParseState._map[1] = "StartScript";
+ ParseState.StartScript = 1;
+ ParseState._map[2] = "StartStatementList";
+ ParseState.StartStatementList = 2;
+ ParseState._map[3] = "StartStatement";
+ ParseState.StartStatement = 3;
+ ParseState._map[4] = "StartFncDecl";
+ ParseState.StartFncDecl = 4;
+ ParseState._map[5] = "FncDeclName";
+ ParseState.FncDeclName = 5;
+ ParseState._map[6] = "FncDeclArgs";
+ ParseState.FncDeclArgs = 6;
+ ParseState._map[7] = "FncDeclReturnType";
+ ParseState.FncDeclReturnType = 7;
+ ParseState._map[8] = "ForInit";
+ ParseState.ForInit = 8;
+ ParseState._map[9] = "ForInitAfterVar";
+ ParseState.ForInitAfterVar = 9;
+ ParseState._map[10] = "ForCondStart";
+ ParseState.ForCondStart = 10;
+ ParseState._map[11] = "EndStmtList";
+ ParseState.EndStmtList = 11;
+ ParseState._map[12] = "EndScript";
+ ParseState.EndScript = 12;
+ })(TypeScript.ParseState || (TypeScript.ParseState = {}));
+ var ParseState = TypeScript.ParseState;
+ var QuickParseResult = (function () {
+ function QuickParseResult(Script, endLexState) {
+ this.Script = Script;
+ this.endLexState = endLexState;
+ }
+ return QuickParseResult;
+ })();
+ TypeScript.QuickParseResult = QuickParseResult;
+ var Parser = (function () {
+ function Parser() {
+ this.varLists = [];
+ this.scopeLists = [];
+ this.staticsLists = [];
+ this.scanner = new TypeScript.Scanner();
+ this.currentToken = null;
+ this.needTerminator = false;
+ this.inFunction = false;
+ this.inInterfaceDecl = false;
+ this.currentClassDecl = null;
+ this.inFncDecl = false;
+ this.anonId = new TypeScript.Identifier("_anonymous");
+ this.style_requireSemi = false;
+ this.style_funcInLoop = true;
+ this.incremental = false;
+ this.errorRecovery = false;
+ this.outfile = undefined;
+ this.errorCallback = null;
+ this.state = ParseState.StartStatementList;
+ this.ambientModule = false;
+ this.ambientClass = false;
+ this.topLevel = true;
+ this.allowImportDeclaration = true;
+ this.currentUnitIndex = (-1);
+ this.prevIDTok = null;
+ this.statementInfoStack = new Array();
+ this.hasTopLevelImportOrExport = false;
+ this.strictMode = false;
+ this.nestingLevel = 0;
+ this.prevExpr = null;
+ this.currentClassDefinition = null;
+ this.parsingClassConstructorDefinition = false;
+ this.parsingDeclareFile = false;
+ this.amdDependencies = [];
+ this.inferPropertiesFromThisAssignment = false;
+ this.requiresExtendsBlock = false;
+ this.fname = "";
+ }
+ Parser.prototype.resetStmtStack = function () {
+ this.statementInfoStack = new Array();
+ };
+ Parser.prototype.inLoop = function () {
+ for(var j = this.statementInfoStack.length - 1; j >= 0; j--) {
+ if(this.statementInfoStack[j].stmt.isLoop()) {
+ return true;
+ }
+ }
+ return false;
+ };
+ Parser.prototype.pushStmt = function (stmt, labels) {
+ var info = {
+ stmt: stmt,
+ labels: labels
+ };
+ this.statementInfoStack.push(info);
+ };
+ Parser.prototype.popStmt = function () {
+ return this.statementInfoStack.pop();
+ };
+ Parser.prototype.resolveJumpTarget = function (jump) {
+ var resolvedTarget = TypeScript.AST.getResolvedIdentifierName(jump.target);
+ var len = this.statementInfoStack.length;
+ for(var i = len - 1; i >= 0; i--) {
+ var info = this.statementInfoStack[i];
+ if(jump.target) {
+ if(info.labels && (info.labels.members.length > 0)) {
+ for(var j = 0, labLen = info.labels.members.length; j < labLen; j++) {
+ var label = info.labels.members[j];
+ if(label.id.text == resolvedTarget) {
+ jump.setResolvedTarget(this, info.stmt);
+ return;
+ }
+ }
+ }
+ } else {
+ if(info.stmt.isLoop()) {
+ jump.setResolvedTarget(this, info.stmt);
+ return;
+ } else {
+ if((info.stmt.nodeType == TypeScript.NodeType.Switch) && (jump.nodeType == TypeScript.NodeType.Break)) {
+ jump.setResolvedTarget(this, info.stmt);
+ return;
+ }
+ }
+ }
+ }
+ if(jump.target) {
+ this.reportParseError("could not find enclosing statement with label " + jump.target);
+ } else {
+ if(jump.nodeType == TypeScript.NodeType.Break) {
+ this.reportParseError("break statement requires enclosing loop or switch");
+ } else {
+ this.reportParseError("continue statement requires enclosing loop");
+ }
+ }
+ };
+ Parser.prototype.setErrorRecovery = function (outfile) {
+ this.outfile = outfile;
+ this.errorRecovery = true;
+ };
+ Parser.prototype.getSourceLineCol = function (lineCol, minChar) {
+ TypeScript.getSourceLineColFromMap(lineCol, minChar, this.scanner.lineMap);
+ };
+ Parser.prototype.createRef = function (text, hasEscapeSequence, minChar) {
+ var id = new TypeScript.Identifier(text, hasEscapeSequence);
+ id.minChar = minChar;
+ return id;
+ };
+ Parser.prototype.reportParseStyleError = function (message) {
+ this.reportParseError("STYLE: " + message);
+ };
+ Parser.prototype.reportParseError = function (message, startPos, pos) {
+ if (typeof startPos === "undefined") { startPos = this.scanner.startPos; }
+ if (typeof pos === "undefined") { pos = this.scanner.pos; }
+ var len = Math.max(1, pos - startPos);
+ if(this.errorCallback) {
+ this.errorCallback(startPos, len, message, this.currentUnitIndex);
+ } else {
+ if(this.errorRecovery) {
+ var lineCol = {
+ line: -1,
+ col: -1
+ };
+ this.getSourceLineCol(lineCol, startPos);
+ if(this.outfile) {
+ this.outfile.WriteLine("// " + this.fname + " (" + lineCol.line + "," + lineCol.col + "): " + message);
+ }
+ } else {
+ throw new SyntaxError(this.fname + " (" + this.scanner.line + "," + this.scanner.col + "): " + message);
+ }
+ }
+ };
+ Parser.prototype.checkNextToken = function (tokenId, errorRecoverySet, errorText) {
+ if (typeof errorText === "undefined") { errorText = null; }
+ this.currentToken = this.scanner.scan();
+ this.checkCurrentToken(tokenId, errorRecoverySet, errorText);
+ };
+ Parser.prototype.skip = function (errorRecoverySet) {
+ errorRecoverySet |= TypeScript.ErrorRecoverySet.EOF;
+ var ersTok = TypeScript.ErrorRecoverySet.None;
+ var tokenInfo = TypeScript.lookupToken(this.currentToken.tokenId);
+ if(tokenInfo != undefined) {
+ ersTok = tokenInfo.ers;
+ }
+ var pendingRightCurlies = 0;
+ while(((ersTok & errorRecoverySet) == TypeScript.ErrorRecoverySet.None) || (this.currentToken.tokenId == TypeScript.TokenID.CloseBrace) && (pendingRightCurlies > 0)) {
+ if(this.currentToken.tokenId == TypeScript.TokenID.OpenBrace) {
+ pendingRightCurlies++;
+ } else {
+ if(this.currentToken.tokenId == TypeScript.TokenID.CloseBrace) {
+ pendingRightCurlies--;
+ }
+ }
+ this.currentToken = this.scanner.scan();
+ ersTok = TypeScript.ErrorRecoverySet.None;
+ tokenInfo = TypeScript.lookupToken(this.currentToken.tokenId);
+ if(tokenInfo != undefined) {
+ ersTok = tokenInfo.ers;
+ }
+ }
+ };
+ Parser.prototype.checkCurrentToken = function (tokenId, errorRecoverySet, errorText) {
+ if (typeof errorText === "undefined") { errorText = null; }
+ if(this.currentToken.tokenId != tokenId) {
+ errorText = errorText == null ? ("Expected '" + TypeScript.tokenTable[tokenId].text + "'") : errorText;
+ this.reportParseError(errorText);
+ if(this.errorRecovery) {
+ this.skip(errorRecoverySet);
+ }
+ } else {
+ this.currentToken = this.scanner.scan();
+ }
+ };
+ Parser.prototype.pushDeclLists = function () {
+ this.staticsLists.push(new TypeScript.ASTList());
+ this.varLists.push(new TypeScript.ASTList());
+ this.scopeLists.push(new TypeScript.ASTList());
+ };
+ Parser.prototype.popDeclLists = function () {
+ this.staticsLists.pop();
+ this.varLists.pop();
+ this.scopeLists.pop();
+ };
+ Parser.prototype.topVarList = function () {
+ return this.varLists[this.varLists.length - 1];
+ };
+ Parser.prototype.topScopeList = function () {
+ return this.scopeLists[this.scopeLists.length - 1];
+ };
+ Parser.prototype.topStaticsList = function () {
+ return this.staticsLists[this.staticsLists.length - 1];
+ };
+ Parser.prototype.parseComment = function (comment) {
+ if(comment) {
+ var c = new TypeScript.Comment(comment.value, comment.isBlock, comment.endsLine);
+ c.minChar = comment.startPos;
+ c.limChar = comment.startPos + comment.value.length;
+ var lineCol = {
+ line: -1,
+ col: -1
+ };
+ this.getSourceLineCol(lineCol, c.minChar);
+ c.minLine = lineCol.line;
+ this.getSourceLineCol(lineCol, c.limChar);
+ c.limLine = lineCol.line;
+ if(!comment.isBlock && comment.value.length > 3 && comment.value.substring(0, 3) == "///") {
+ var dependencyPath = TypeScript.getAdditionalDependencyPath(comment.value);
+ if(dependencyPath) {
+ this.amdDependencies.push(dependencyPath);
+ }
+ if(TypeScript.getImplicitImport(comment.value)) {
+ this.hasTopLevelImportOrExport = true;
+ }
+ }
+ return c;
+ } else {
+ return null;
+ }
+ };
+ Parser.prototype.parseCommentsInner = function (comments) {
+ if(comments) {
+ var commentASTs = new Array();
+ for(var i = 0; i < comments.length; i++) {
+ commentASTs.push(this.parseComment(comments[i]));
+ }
+ return commentASTs;
+ } else {
+ return null;
+ }
+ };
+ Parser.prototype.parseComments = function () {
+ var comments = this.scanner.getComments();
+ return this.parseCommentsInner(comments);
+ };
+ Parser.prototype.parseCommentsForLine = function (line) {
+ var comments = this.scanner.getCommentsForLine(line);
+ return this.parseCommentsInner(comments);
+ };
+ Parser.prototype.combineComments = function (comment1, comment2) {
+ if(comment1 == null) {
+ return comment2;
+ } else {
+ if(comment2 == null) {
+ return comment1;
+ } else {
+ return comment1.concat(comment2);
+ }
+ }
+ };
+ Parser.prototype.parseEnumDecl = function (errorRecoverySet, modifiers) {
+ var leftCurlyCount = this.scanner.leftCurlyCount;
+ var rightCurlyCount = this.scanner.rightCurlyCount;
+ var name = null;
+ if((this.currentToken.tokenId == TypeScript.TokenID.Identifier) || TypeScript.convertTokToID(this.currentToken, this.strictMode)) {
+ name = TypeScript.Identifier.fromToken(this.currentToken);
+ name.minChar = this.scanner.startPos;
+ name.limChar = this.scanner.pos;
+ this.currentToken = this.scanner.scan();
+ } else {
+ this.reportParseError("Enum declaration requires identifier");
+ if(this.errorRecovery) {
+ name = new TypeScript.MissingIdentifier();
+ name.minChar = this.scanner.startPos;
+ name.limChar = this.scanner.startPos;
+ name.flags |= TypeScript.ASTFlags.Error;
+ }
+ }
+ var membersMinChar = this.scanner.startPos;
+ this.checkCurrentToken(TypeScript.TokenID.OpenBrace, errorRecoverySet | TypeScript.ErrorRecoverySet.ID);
+ this.pushDeclLists();
+ var members = new TypeScript.ASTList();
+ members.minChar = membersMinChar;
+ var mapDecl = new TypeScript.VarDecl(new TypeScript.Identifier("_map"), 0);
+ mapDecl.varFlags |= TypeScript.VarFlags.Exported;
+ mapDecl.varFlags |= TypeScript.VarFlags.Private;
+ mapDecl.varFlags |= (TypeScript.VarFlags.Property | TypeScript.VarFlags.Public);
+ mapDecl.init = new TypeScript.UnaryExpression(TypeScript.NodeType.ArrayLit, null);
+ members.append(mapDecl);
+ var lastValue = null;
+ for(; ; ) {
+ var minChar = this.scanner.startPos;
+ var limChar;
+ var memberName = null;
+ var memberValue = null;
+ var preComments = null;
+ var postComments = null;
+ if((this.currentToken.tokenId == TypeScript.TokenID.Identifier) || TypeScript.convertTokToIDName(this.currentToken)) {
+ memberName = TypeScript.Identifier.fromToken(this.currentToken);
+ memberName.minChar = this.scanner.startPos;
+ memberName.limChar = this.scanner.pos;
+ } else {
+ if(this.currentToken.tokenId == TypeScript.TokenID.CloseBrace) {
+ break;
+ } else {
+ this.reportParseError("Expected identifer of enum member");
+ if(this.errorRecovery) {
+ memberName = new TypeScript.MissingIdentifier();
+ memberName.minChar = this.scanner.startPos;
+ memberName.limChar = this.scanner.startPos;
+ memberName.flags |= TypeScript.ASTFlags.Error;
+ }
+ }
+ }
+ limChar = this.scanner.pos;
+ preComments = this.parseComments();
+ this.currentToken = this.scanner.scan();
+ postComments = this.parseComments();
+ if(this.currentToken.tokenId == TypeScript.TokenID.Equals) {
+ this.currentToken = this.scanner.scan();
+ memberValue = this.parseExpr(errorRecoverySet, TypeScript.OperatorPrecedence.Comma, true, TypeContext.NoTypes);
+ lastValue = memberValue;
+ limChar = memberValue.limChar;
+ } else {
+ if(lastValue == null) {
+ memberValue = new TypeScript.NumberLiteral(0);
+ lastValue = memberValue;
+ } else {
+ memberValue = new TypeScript.NumberLiteral(lastValue.value + 1);
+ lastValue = memberValue;
+ }
+ var map = new TypeScript.BinaryExpression(TypeScript.NodeType.Asg, new TypeScript.BinaryExpression(TypeScript.NodeType.Index, new TypeScript.Identifier("_map"), memberValue), new TypeScript.StringLiteral('"' + memberName.actualText + '"'));
+ members.append(map);
+ }
+ var member = new TypeScript.VarDecl(memberName, this.nestingLevel);
+ member.minChar = minChar;
+ member.limChar = limChar;
+ member.init = memberValue;
+ member.typeExpr = new TypeScript.TypeReference(this.createRef(name.actualText, name.hasEscapeSequence, -1), 0);
+ member.varFlags |= (TypeScript.VarFlags.Readonly | TypeScript.VarFlags.Property);
+ if(memberValue.nodeType == TypeScript.NodeType.NumberLit) {
+ member.varFlags |= TypeScript.VarFlags.Constant;
+ }
+ member.preComments = preComments;
+ members.append(member);
+ member.postComments = postComments;
+ member.varFlags |= TypeScript.VarFlags.Exported;
+ if(this.currentToken.tokenId == TypeScript.TokenID.Comma) {
+ this.currentToken = this.scanner.scan();
+ member.postComments = this.combineComments(member.postComments, this.parseCommentsForLine(this.scanner.prevLine));
+ if((this.currentToken.tokenId == TypeScript.TokenID.Identifier) || (TypeScript.convertTokToIDName(this.currentToken))) {
+ continue;
+ }
+ }
+ break;
+ }
+ var endingToken = new TypeScript.ASTSpan();
+ endingToken.minChar = this.scanner.startPos;
+ endingToken.limChar = this.scanner.pos;
+ this.checkCurrentToken(TypeScript.TokenID.CloseBrace, errorRecoverySet);
+ members.limChar = this.scanner.lastTokenLimChar();
+ var modDecl = new TypeScript.ModuleDeclaration(name, members, this.topVarList(), this.topScopeList(), endingToken);
+ modDecl.modFlags |= TypeScript.ModuleFlags.IsEnum;
+ this.popDeclLists();
+ modDecl.leftCurlyCount = this.scanner.leftCurlyCount - leftCurlyCount;
+ modDecl.rightCurlyCount = this.scanner.rightCurlyCount - rightCurlyCount;
+ return modDecl;
+ };
+ Parser.prototype.parseDottedName = function (enclosedList) {
+ this.currentToken = this.scanner.scan();
+ if((this.currentToken.tokenId == TypeScript.TokenID.Identifier) || TypeScript.convertTokToID(this.currentToken, this.strictMode)) {
+ var id = TypeScript.Identifier.fromToken(this.currentToken);
+ id.preComments = this.parseComments();
+ enclosedList[enclosedList.length] = id;
+ id.minChar = this.scanner.startPos;
+ id.limChar = this.scanner.pos;
+ this.currentToken = this.scanner.scan();
+ if(this.currentToken.tokenId == TypeScript.TokenID.Dot) {
+ this.parseDottedName(enclosedList);
+ }
+ } else {
+ this.reportParseError("need identifier after '.'");
+ }
+ };
+ Parser.prototype.isValidImportPath = function (importPath) {
+ importPath = TypeScript.stripQuotes(importPath);
+ if(!importPath || importPath.indexOf(':') != -1 || importPath.indexOf('\\') != -1 || importPath.charAt(0) == '/') {
+ return false;
+ }
+ return true;
+ };
+ Parser.prototype.parseImportDeclaration = function (errorRecoverySet, modifiers) {
+ var name = null;
+ var alias = null;
+ var importDecl = null;
+ var minChar = this.scanner.startPos;
+ var isDynamicImport = false;
+ this.currentToken = this.scanner.scan();
+ if(this.currentToken.tokenId == TypeScript.TokenID.Identifier || TypeScript.convertTokToID(this.currentToken, this.strictMode)) {
+ name = TypeScript.Identifier.fromToken(this.currentToken);
+ } else {
+ this.reportParseError("Expected identifer after 'import'");
+ name = new TypeScript.MissingIdentifier();
+ }
+ name.minChar = this.scanner.startPos;
+ name.limChar = this.scanner.pos;
+ this.currentToken = this.scanner.scan();
+ this.checkCurrentToken(TypeScript.TokenID.Equals, errorRecoverySet | TypeScript.ErrorRecoverySet.ID);
+ var aliasPreComments = this.parseComments();
+ var limChar;
+ if(this.currentToken.tokenId == TypeScript.TokenID.Identifier || TypeScript.convertTokToID(this.currentToken, this.strictMode)) {
+ if(this.currentToken.tokenId == TypeScript.TokenID.Module) {
+ limChar = this.scanner.pos;
+ this.currentToken = this.scanner.scan();
+ if(this.currentToken.tokenId == TypeScript.TokenID.OpenParen) {
+ this.currentToken = this.scanner.scan();
+ if(this.currentToken.tokenId == TypeScript.TokenID.StringLiteral || this.currentToken.tokenId == TypeScript.TokenID.Identifier || TypeScript.convertTokToID(this.currentToken, this.strictMode)) {
+ if(this.currentToken.tokenId == TypeScript.TokenID.StringLiteral) {
+ if(this.topLevel) {
+ this.hasTopLevelImportOrExport = true;
+ } else {
+ if(!this.allowImportDeclaration) {
+ this.reportParseError("Import declaration of external module is permitted only in global or top level dynamic modules");
+ }
+ }
+ var aliasText = this.currentToken.getText();
+ alias = TypeScript.Identifier.fromToken(this.currentToken);
+ alias.minChar = this.scanner.startPos;
+ alias.limChar = this.scanner.pos;
+ if(!this.isValidImportPath((alias).text)) {
+ this.reportParseError("Invalid import path");
+ }
+ isDynamicImport = true;
+ this.currentToken = this.scanner.scan();
+ alias.preComments = aliasPreComments;
+ } else {
+ alias = this.parseExpr(errorRecoverySet | TypeScript.ErrorRecoverySet.SColon, TypeScript.OperatorPrecedence.Assignment, true, TypeContext.NoTypes);
+ alias.preComments = aliasPreComments;
+ }
+ }
+ limChar = this.scanner.pos;
+ this.checkCurrentToken(TypeScript.TokenID.CloseParen, errorRecoverySet | TypeScript.ErrorRecoverySet.ID);
+ if(alias) {
+ alias.postComments = this.parseComments();
+ }
+ }
+ } else {
+ alias = this.parseExpr(errorRecoverySet | TypeScript.ErrorRecoverySet.SColon, TypeScript.OperatorPrecedence.Assignment, true, TypeContext.NoTypes);
+ limChar = this.scanner.pos;
+ }
+ } else {
+ this.reportParseError("Expected module name");
+ alias = new TypeScript.MissingIdentifier();
+ alias.minChar = this.scanner.startPos;
+ if(this.currentToken.tokenId == TypeScript.TokenID.Semicolon) {
+ alias.limChar = this.scanner.startPos;
+ } else {
+ alias.limChar = this.scanner.pos;
+ this.currentToken = this.scanner.scan();
+ }
+ alias.flags |= TypeScript.ASTFlags.Error;
+ limChar = alias.limChar;
+ }
+ importDecl = new TypeScript.ImportDeclaration(name, alias);
+ importDecl.isDynamicImport = isDynamicImport;
+ importDecl.minChar = minChar;
+ importDecl.limChar = limChar;
+ return importDecl;
+ };
+ Parser.prototype.parseModuleDecl = function (errorRecoverySet, modifiers, preComments) {
+ var leftCurlyCount = this.scanner.leftCurlyCount;
+ var rightCurlyCount = this.scanner.rightCurlyCount;
+ var svAmbient = this.ambientModule;
+ var svTopLevel = this.topLevel;
+ this.topLevel = false;
+ if(this.parsingDeclareFile || svAmbient || TypeScript.hasFlag(modifiers, TypeScript.Modifiers.Ambient)) {
+ this.ambientModule = true;
+ }
+ this.currentToken = this.scanner.scan();
+ var name = null;
+ var enclosedList = null;
+ this.pushDeclLists();
+ var minChar = this.scanner.startPos;
+ var isDynamicMod = false;
+ if((this.currentToken.tokenId == TypeScript.TokenID.Identifier) || (this.currentToken.tokenId == TypeScript.TokenID.StringLiteral) || (!TypeScript.isPrimitiveTypeToken(this.currentToken) && TypeScript.convertTokToID(this.currentToken, this.strictMode))) {
+ var nameText = this.currentToken.getText();
+ if(this.currentToken.tokenId == TypeScript.TokenID.StringLiteral) {
+ isDynamicMod = true;
+ if(!this.ambientModule) {
+ this.reportParseError("Only ambient dynamic modules may have string literal names");
+ }
+ if(!svTopLevel) {
+ this.reportParseError("Dynamic modules may not be nested within other modules");
+ }
+ }
+ name = TypeScript.Identifier.fromToken(this.currentToken);
+ name.minChar = this.scanner.startPos;
+ name.limChar = this.scanner.pos;
+ this.currentToken = this.scanner.scan();
+ } else {
+ if(this.currentToken.tokenId == TypeScript.TokenID.OpenBrace) {
+ this.reportParseError("Module name missing");
+ name = new TypeScript.Identifier("");
+ name.minChar = minChar;
+ name.limChar = minChar;
+ }
+ }
+ if(this.currentToken.tokenId == TypeScript.TokenID.Dot) {
+ enclosedList = new Array();
+ this.parseDottedName(enclosedList);
+ }
+ if(name == null) {
+ name = new TypeScript.MissingIdentifier();
+ }
+ var moduleBody = new TypeScript.ASTList();
+ var bodyMinChar = this.scanner.startPos;
+ this.checkCurrentToken(TypeScript.TokenID.OpenBrace, errorRecoverySet | TypeScript.ErrorRecoverySet.ID);
+ if(svTopLevel && isDynamicMod) {
+ this.allowImportDeclaration = true;
+ } else {
+ this.allowImportDeclaration = false;
+ }
+ this.parseStatementList(errorRecoverySet | TypeScript.ErrorRecoverySet.RCurly, moduleBody, true, true, TypeScript.AllowedElements.Global, modifiers);
+ moduleBody.minChar = bodyMinChar;
+ moduleBody.limChar = this.scanner.pos;
+ var endingToken = new TypeScript.ASTSpan();
+ endingToken.minChar = this.scanner.startPos;
+ endingToken.limChar = this.scanner.pos;
+ this.checkCurrentToken(TypeScript.TokenID.CloseBrace, errorRecoverySet);
+ var limChar = this.scanner.lastTokenLimChar();
+ var moduleDecl;
+ this.allowImportDeclaration = svTopLevel;
+ if(enclosedList && (enclosedList.length > 0)) {
+ var len = enclosedList.length;
+ var innerName = enclosedList[len - 1];
+ var innerDecl = new TypeScript.ModuleDeclaration(innerName, moduleBody, this.topVarList(), this.topScopeList(), endingToken);
+ innerDecl.preComments = preComments;
+ if(this.parsingDeclareFile || TypeScript.hasFlag(modifiers, TypeScript.Modifiers.Ambient)) {
+ innerDecl.modFlags |= TypeScript.ModuleFlags.Ambient;
+ }
+ innerDecl.modFlags |= TypeScript.ModuleFlags.Exported;
+ innerDecl.minChar = minChar;
+ innerDecl.limChar = limChar;
+ this.popDeclLists();
+ var outerModBod;
+ for(var i = len - 2; i >= 0; i--) {
+ outerModBod = new TypeScript.ASTList();
+ outerModBod.append(innerDecl);
+ innerName = enclosedList[i];
+ innerDecl = new TypeScript.ModuleDeclaration(innerName, outerModBod, new TypeScript.ASTList(), new TypeScript.ASTList(), endingToken);
+ outerModBod.minChar = innerDecl.minChar = minChar;
+ outerModBod.limChar = innerDecl.limChar = limChar;
+ if(this.parsingDeclareFile || TypeScript.hasFlag(modifiers, TypeScript.Modifiers.Ambient)) {
+ innerDecl.modFlags |= TypeScript.ModuleFlags.Ambient;
+ }
+ innerDecl.modFlags |= TypeScript.ModuleFlags.Exported;
+ }
+ outerModBod = new TypeScript.ASTList();
+ outerModBod.append(innerDecl);
+ outerModBod.minChar = minChar;
+ outerModBod.limChar = limChar;
+ moduleDecl = new TypeScript.ModuleDeclaration(name, outerModBod, new TypeScript.ASTList(), new TypeScript.ASTList(), endingToken);
+ } else {
+ moduleDecl = new TypeScript.ModuleDeclaration(name, moduleBody, this.topVarList(), this.topScopeList(), endingToken);
+ moduleDecl.preComments = preComments;
+ this.popDeclLists();
+ }
+ if(this.parsingDeclareFile || svAmbient || TypeScript.hasFlag(modifiers, TypeScript.Modifiers.Ambient)) {
+ moduleDecl.modFlags |= TypeScript.ModuleFlags.Ambient;
+ }
+ if(svAmbient || TypeScript.hasFlag(modifiers, TypeScript.Modifiers.Exported)) {
+ moduleDecl.modFlags |= TypeScript.ModuleFlags.Exported;
+ }
+ if(isDynamicMod) {
+ moduleDecl.modFlags |= TypeScript.ModuleFlags.IsDynamic;
+ }
+ this.ambientModule = svAmbient;
+ this.topLevel = svTopLevel;
+ moduleDecl.leftCurlyCount = this.scanner.leftCurlyCount - leftCurlyCount;
+ moduleDecl.rightCurlyCount = this.scanner.rightCurlyCount - rightCurlyCount;
+ moduleDecl.limChar = moduleBody.limChar;
+ return moduleDecl;
+ };
+ Parser.prototype.parseTypeReferenceTail = function (errorRecoverySet, minChar, term) {
+ var result = new TypeScript.TypeReference(term, 0);
+ result.minChar = minChar;
+ while(this.currentToken.tokenId == TypeScript.TokenID.OpenBracket) {
+ this.currentToken = this.scanner.scan();
+ result.arrayCount++;
+ this.checkCurrentToken(TypeScript.TokenID.CloseBracket, errorRecoverySet | TypeScript.ErrorRecoverySet.LBrack);
+ }
+ result.limChar = this.scanner.lastTokenLimChar();
+ return result;
+ };
+ Parser.prototype.parseNamedType = function (errorRecoverySet, minChar, term, tail) {
+ this.currentToken = this.scanner.scan();
+ if(this.currentToken.tokenId == TypeScript.TokenID.Dot) {
+ var curpos = this.scanner.pos;
+ this.currentToken = this.scanner.scan();
+ if((this.currentToken.tokenId == TypeScript.TokenID.Identifier) || ((!this.errorRecovery || !this.scanner.lastTokenHadNewline()) && TypeScript.convertTokToID(this.currentToken, this.strictMode))) {
+ var op2 = TypeScript.Identifier.fromToken(this.currentToken);
+ op2.minChar = this.scanner.startPos;
+ op2.limChar = this.scanner.pos;
+ var dotNode = new TypeScript.BinaryExpression(TypeScript.NodeType.Dot, term, op2);
+ dotNode.minChar = term.minChar;
+ dotNode.limChar = op2.limChar;
+ return this.parseNamedType(errorRecoverySet, minChar, dotNode, tail);
+ } else {
+ this.reportParseError("need identifier after '.'");
+ if(this.errorRecovery) {
+ term.flags |= TypeScript.ASTFlags.DotLHS;
+ term.limChar = this.scanner.lastTokenLimChar();
+ return term;
+ } else {
+ var eop2 = new TypeScript.MissingIdentifier();
+ eop2.minChar = this.scanner.pos;
+ eop2.limChar = this.scanner.pos;
+ var edotNode = new TypeScript.BinaryExpression(TypeScript.NodeType.Dot, term, eop2);
+ edotNode.flags |= TypeScript.ASTFlags.Error;
+ edotNode.minChar = term.minChar;
+ edotNode.limChar = eop2.limChar;
+ return this.parseNamedType(errorRecoverySet, minChar, edotNode, tail);
+ }
+ }
+ } else {
+ if(tail) {
+ return this.parseTypeReferenceTail(errorRecoverySet, minChar, term);
+ } else {
+ return term;
+ }
+ }
+ };
+ Parser.prototype.parseTypeReference = function (errorRecoverySet, allowVoid) {
+ var minChar = this.scanner.startPos;
+ var isConstructorMember = false;
+ switch(this.currentToken.tokenId) {
+ case TypeScript.TokenID.Void: {
+ if(!allowVoid) {
+ this.reportParseError("void not a valid type in this context");
+ }
+
+ }
+ case TypeScript.TokenID.Any:
+ case TypeScript.TokenID.Number:
+ case TypeScript.TokenID.Bool:
+ case TypeScript.TokenID.String: {
+ var text = TypeScript.tokenTable[this.currentToken.tokenId].text;
+ var predefinedIdentifier = new TypeScript.Identifier(text);
+ predefinedIdentifier.minChar = minChar;
+ predefinedIdentifier.limChar = this.scanner.pos;
+ this.currentToken = this.scanner.scan();
+ return this.parseTypeReferenceTail(errorRecoverySet, minChar, predefinedIdentifier);
+ }
+
+ case TypeScript.TokenID.Identifier: {
+ var ident = this.createRef(this.currentToken.getText(), (this.currentToken).hasEscapeSequence, minChar);
+ ident.limChar = this.scanner.pos;
+ return this.parseNamedType(errorRecoverySet, minChar, ident, true);
+
+ }
+ case TypeScript.TokenID.OpenBrace: {
+ return this.parseObjectType(minChar, errorRecoverySet);
+
+ }
+ case TypeScript.TokenID.New: {
+ this.currentToken = this.scanner.scan();
+ if(this.currentToken.tokenId != TypeScript.TokenID.OpenParen) {
+ this.reportParseError("Expected '('");
+ } else {
+ isConstructorMember = true;
+ }
+
+ }
+ case TypeScript.TokenID.OpenParen: {
+ var formals = new TypeScript.ASTList();
+ var variableArgList = this.parseFormalParameterList(errorRecoverySet | TypeScript.ErrorRecoverySet.RParen, formals, false, true, false, false, false, false, null, true);
+ this.checkCurrentToken(TypeScript.TokenID.EqualsGreaterThan, errorRecoverySet);
+ var returnType = this.parseTypeReference(errorRecoverySet, true);
+ var funcDecl = new TypeScript.FuncDecl(null, null, false, formals, null, null, null, TypeScript.NodeType.FuncDecl);
+ funcDecl.returnTypeAnnotation = returnType;
+ funcDecl.variableArgList = variableArgList;
+ funcDecl.fncFlags |= TypeScript.FncFlags.Signature;
+ if(isConstructorMember) {
+ funcDecl.fncFlags |= TypeScript.FncFlags.ConstructMember;
+ funcDecl.hint = "_construct";
+ funcDecl.classDecl = null;
+ }
+ funcDecl.minChar = minChar;
+ return this.parseTypeReferenceTail(errorRecoverySet, minChar, funcDecl);
+ }
+
+ default: {
+ this.reportParseError("Expected type name");
+ var etr = new TypeScript.TypeReference(null, 0);
+ etr.flags |= TypeScript.ASTFlags.Error;
+ etr.minChar = this.scanner.pos;
+ etr.limChar = this.scanner.pos;
+ return etr;
+
+ }
+ }
+ };
+ Parser.prototype.parseObjectType = function (minChar, errorRecoverySet) {
+ this.currentToken = this.scanner.scan();
+ var members = new TypeScript.ASTList();
+ members.minChar = minChar;
+ var prevInInterfaceDecl = this.inInterfaceDecl;
+ this.inInterfaceDecl = true;
+ this.parseTypeMemberList(errorRecoverySet | TypeScript.ErrorRecoverySet.RCurly, members);
+ this.inInterfaceDecl = prevInInterfaceDecl;
+ this.checkCurrentToken(TypeScript.TokenID.CloseBrace, errorRecoverySet);
+ var interfaceDecl = new TypeScript.InterfaceDeclaration(this.anonId, members, null, null);
+ interfaceDecl.minChar = minChar;
+ interfaceDecl.limChar = members.limChar;
+ return this.parseTypeReferenceTail(errorRecoverySet, minChar, interfaceDecl);
+ };
+ Parser.prototype.parseFunctionBlock = function (errorRecoverySet, allowedElements, parentModifiers, bod, bodMinChar) {
+ this.state = ParseState.StartStatementList;
+ this.checkCurrentToken(TypeScript.TokenID.OpenBrace, errorRecoverySet | TypeScript.ErrorRecoverySet.StmtStart);
+ var savedInFunction = this.inFunction;
+ this.inFunction = true;
+ this.parseStatementList(errorRecoverySet | TypeScript.ErrorRecoverySet.RCurly | TypeScript.ErrorRecoverySet.StmtStart, bod, true, false, allowedElements, parentModifiers);
+ bod.minChar = bodMinChar;
+ bod.limChar = this.scanner.pos;
+ this.inFunction = savedInFunction;
+ var ec = new TypeScript.EndCode();
+ ec.minChar = bod.limChar;
+ ec.limChar = ec.minChar;
+ bod.append(ec);
+ };
+ Parser.prototype.parseFunctionStatements = function (errorRecoverySet, name, isConstructor, isMethod, args, allowedElements, minChar, requiresSignature, parentModifiers) {
+ this.pushDeclLists();
+ var svStmtStack = this.statementInfoStack;
+ this.resetStmtStack();
+ var bod = null;
+ var wasShorthand = false;
+ var isAnonLambda = false;
+ var limChar;
+ if(requiresSignature) {
+ limChar = this.scanner.pos;
+ if(this.currentToken.tokenId === TypeScript.TokenID.OpenBrace) {
+ this.reportParseError("Function declarations are not permitted within interfaces, ambient modules or classes");
+ bod = new TypeScript.ASTList();
+ var bodMinChar = this.scanner.startPos;
+ this.parseFunctionBlock(errorRecoverySet, allowedElements, parentModifiers, bod, bodMinChar);
+ this.checkCurrentToken(TypeScript.TokenID.CloseBrace, errorRecoverySet);
+ if(this.currentToken.tokenId === TypeScript.TokenID.Semicolon) {
+ this.currentToken = this.scanner.scan();
+ }
+ } else {
+ this.checkCurrentToken(TypeScript.TokenID.Semicolon, errorRecoverySet, "Expected ';'");
+ }
+ } else {
+ bod = new TypeScript.ASTList();
+ var bodMinChar = this.scanner.startPos;
+ if(this.currentToken.tokenId == TypeScript.TokenID.EqualsGreaterThan) {
+ if(isMethod) {
+ this.reportParseError("'=>' may not be used for class methods");
+ }
+ wasShorthand = true;
+ this.currentToken = this.scanner.scan();
+ }
+ if(wasShorthand && this.currentToken.tokenId != TypeScript.TokenID.OpenBrace) {
+ var retExpr = this.parseExpr(errorRecoverySet | TypeScript.ErrorRecoverySet.SColon, TypeScript.OperatorPrecedence.Assignment, true, TypeContext.NoTypes);
+ var retStmt = new TypeScript.ReturnStatement();
+ retStmt.returnExpression = retExpr;
+ retStmt.minChar = retExpr.minChar;
+ retStmt.limChar = retExpr.limChar;
+ bod.minChar = bodMinChar;
+ bod.append(retStmt);
+ } else {
+ isAnonLambda = wasShorthand;
+ this.parseFunctionBlock(errorRecoverySet, allowedElements, parentModifiers, bod, bodMinChar);
+ }
+ limChar = this.scanner.pos;
+ }
+ var funcDecl = new TypeScript.FuncDecl(name, bod, isConstructor, args, this.topVarList(), this.topScopeList(), this.topStaticsList(), TypeScript.NodeType.FuncDecl);
+ this.popDeclLists();
+ var scopeList = this.topScopeList();
+ scopeList.append(funcDecl);
+ var staticFuncDecl = false;
+ if(!requiresSignature) {
+ if(!wasShorthand || isAnonLambda) {
+ funcDecl.endingToken = new TypeScript.ASTSpan();
+ funcDecl.endingToken.minChar = this.scanner.startPos;
+ funcDecl.endingToken.limChar = this.scanner.pos;
+ this.checkCurrentToken(TypeScript.TokenID.CloseBrace, errorRecoverySet);
+ if(isAnonLambda) {
+ funcDecl.fncFlags |= TypeScript.FncFlags.IsFatArrowFunction;
+ }
+ } else {
+ funcDecl.fncFlags |= TypeScript.FncFlags.IsFatArrowFunction;
+ funcDecl.endingToken = new TypeScript.ASTSpan();
+ funcDecl.endingToken.minChar = bod.members[0].minChar;
+ funcDecl.endingToken.limChar = bod.members[0].limChar;
+ }
+ }
+ funcDecl.minChar = minChar;
+ funcDecl.limChar = limChar;
+ if(!requiresSignature) {
+ funcDecl.fncFlags |= TypeScript.FncFlags.Definition;
+ }
+ this.statementInfoStack = svStmtStack;
+ return funcDecl;
+ };
+ Parser.prototype.transformAnonymousArgsIntoFormals = function (formals, argList) {
+ var _this = this;
+ var translateBinExOperand = function (operand) {
+ if(operand.nodeType == TypeScript.NodeType.Comma) {
+ return _this.transformAnonymousArgsIntoFormals(formals, operand);
+ } else {
+ if(operand.nodeType == TypeScript.NodeType.Name || operand.nodeType == TypeScript.NodeType.Asg) {
+ var opArg = operand.nodeType == TypeScript.NodeType.Asg ? (operand).operand1 : operand;
+ var arg = new TypeScript.ArgDecl(opArg);
+ arg.preComments = opArg.preComments;
+ arg.postComments = opArg.postComments;
+ arg.minChar = operand.minChar;
+ arg.limChar = operand.limChar;
+ if(TypeScript.hasFlag(opArg.flags, TypeScript.ASTFlags.PossibleOptionalParameter)) {
+ arg.isOptional = true;
+ }
+ if(operand.nodeType == TypeScript.NodeType.Asg) {
+ arg.init = (operand).operand2;
+ }
+ formals.append(arg);
+ return arg.isOptional || arg.init;
+ } else {
+ _this.reportParseError("Invalid lambda argument");
+ }
+ }
+ return false;
+ };
+ if(argList) {
+ if(argList.nodeType == TypeScript.NodeType.Comma) {
+ var commaList = argList;
+ if(commaList.operand1.isParenthesized) {
+ this.reportParseError("Invalid lambda argument", commaList.operand1.minChar, commaList.operand1.limChar);
+ }
+ if(commaList.operand2.isParenthesized) {
+ this.reportParseError("Invalid lambda argument", commaList.operand2.minChar, commaList.operand2.limChar);
+ }
+ var isOptional = translateBinExOperand(commaList.operand1);
+ isOptional = translateBinExOperand(commaList.operand2) || isOptional;
+ return isOptional;
+ } else {
+ return translateBinExOperand(argList);
+ }
+ }
+ };
+ Parser.prototype.parseFormalParameterList = function (errorRecoverySet, formals, isClassConstr, isSig, isIndexer, isGetter, isSetter, isLambda, preProcessedLambdaArgs, expectClosingRParen) {
+ formals.minChar = this.scanner.startPos;
+ if(isIndexer) {
+ this.currentToken = this.scanner.scan();
+ } else {
+ if(!isLambda) {
+ this.checkCurrentToken(TypeScript.TokenID.OpenParen, errorRecoverySet | TypeScript.ErrorRecoverySet.RParen);
+ }
+ }
+ var sawEllipsis = false;
+ var firstArg = true;
+ var hasOptional = false;
+ var haveFirstArgID = false;
+ if(isLambda && preProcessedLambdaArgs && preProcessedLambdaArgs.nodeType != TypeScript.NodeType.EmptyExpr) {
+ hasOptional = this.transformAnonymousArgsIntoFormals(formals, preProcessedLambdaArgs);
+ haveFirstArgID = true;
+ }
+ while(true) {
+ var munchedArg = false;
+ var argFlags = TypeScript.VarFlags.None;
+ var argMinChar = this.scanner.startPos;
+ if(this.inferPropertiesFromThisAssignment && this.currentToken.tokenId == TypeScript.TokenID.This) {
+ if(!isClassConstr) {
+ this.reportParseError("Instance property declarations using 'this' may only be used in class constructors");
+ }
+ this.currentToken = this.scanner.scan();
+ argFlags |= (TypeScript.VarFlags.Public | TypeScript.VarFlags.Property);
+ if(this.currentClassDefinition) {
+ this.currentClassDefinition.varFlags |= TypeScript.VarFlags.ClassSuperMustBeFirstCallInConstructor;
+ }
+ }
+ if(this.currentToken.tokenId == TypeScript.TokenID.Public) {
+ argFlags |= (TypeScript.VarFlags.Public | TypeScript.VarFlags.Property);
+ if(this.currentClassDefinition) {
+ this.currentClassDefinition.varFlags |= TypeScript.VarFlags.ClassSuperMustBeFirstCallInConstructor;
+ }
+ } else {
+ if(this.currentToken.tokenId == TypeScript.TokenID.Private) {
+ argFlags |= (TypeScript.VarFlags.Private | TypeScript.VarFlags.Property);
+ if(this.currentClassDefinition) {
+ this.currentClassDefinition.varFlags |= TypeScript.VarFlags.ClassSuperMustBeFirstCallInConstructor;
+ }
+ } else {
+ if(this.currentToken.tokenId == TypeScript.TokenID.Static && isClassConstr) {
+ this.reportParseError("Static properties can not be declared as parameter properties");
+ this.currentToken = this.scanner.scan();
+ }
+ }
+ }
+ if(argFlags != TypeScript.VarFlags.None) {
+ if(!isClassConstr) {
+ this.reportParseError("only constructor parameters can be properties");
+ }
+ this.currentToken = this.scanner.scan();
+ if(TypeScript.isModifier(this.currentToken)) {
+ this.reportParseError("Multiple modifiers may not be applied to parameters");
+ this.currentToken = this.scanner.scan();
+ }
+ if(this.inferPropertiesFromThisAssignment && this.currentToken.tokenId == TypeScript.TokenID.This) {
+ if(!isClassConstr) {
+ this.reportParseError("Instance property declarations using 'this' may only be used in class constructors");
+ }
+ this.currentToken = this.scanner.scan();
+ this.currentToken = this.scanner.scan();
+ }
+ } else {
+ if(this.currentToken.tokenId == TypeScript.TokenID.DotDotDot) {
+ sawEllipsis = true;
+ this.currentToken = this.scanner.scan();
+ if(!(this.currentToken.tokenId == TypeScript.TokenID.Identifier) || TypeScript.convertTokToID(this.currentToken, this.strictMode)) {
+ this.reportParseError("'...' parameters require both a parameter name and an array type annotation to be specified");
+ sawEllipsis = false;
+ }
+ }
+ }
+ var argId = null;
+ if(!haveFirstArgID && (this.currentToken.tokenId == TypeScript.TokenID.Identifier) || TypeScript.convertTokToID(this.currentToken, this.strictMode)) {
+ argId = TypeScript.Identifier.fromToken(this.currentToken);
+ argId.minChar = this.scanner.startPos;
+ argId.limChar = this.scanner.pos;
+ }
+ if(haveFirstArgID || argId) {
+ munchedArg = true;
+ var type = null;
+ var arg = null;
+ if(haveFirstArgID && formals.members.length) {
+ arg = formals.members[formals.members.length - 1];
+ if(arg.isOptional) {
+ hasOptional = true;
+ }
+ } else {
+ arg = new TypeScript.ArgDecl(argId);
+ if(isGetter) {
+ this.reportParseError("Property getters may not take any arguments");
+ }
+ if(isSetter && !firstArg) {
+ this.reportParseError("Property setters may only take one argument");
+ }
+ arg.minChar = argMinChar;
+ arg.preComments = this.parseComments();
+ this.currentToken = this.scanner.scan();
+ }
+ if(this.currentToken.tokenId == TypeScript.TokenID.Question) {
+ arg.isOptional = true;
+ hasOptional = true;
+ this.currentToken = this.scanner.scan();
+ }
+ if(this.currentToken.tokenId == TypeScript.TokenID.Colon) {
+ this.currentToken = this.scanner.scan();
+ type = this.parseTypeReference(errorRecoverySet, false);
+ }
+ if(this.currentToken.tokenId == TypeScript.TokenID.Equals) {
+ if(isSig) {
+ this.reportParseError("Arguments in signatures may not have default values");
+ }
+ hasOptional = true;
+ this.currentToken = this.scanner.scan();
+ arg.init = this.parseExpr(TypeScript.ErrorRecoverySet.Comma | errorRecoverySet, TypeScript.OperatorPrecedence.Comma, false, TypeContext.NoTypes);
+ }
+ if(hasOptional && !arg.isOptionalArg() && !sawEllipsis) {
+ this.reportParseError("Optional parameters may only be followed by other optional parameters");
+ }
+ if(sawEllipsis && arg.isOptionalArg()) {
+ this.reportParseError("Varargs may not be optional or have default parameters");
+ }
+ if(sawEllipsis && !type) {
+ this.reportParseError("'...' parameters require both a parameter name and an array type annotation to be specified");
+ }
+ arg.postComments = this.parseComments();
+ arg.typeExpr = type;
+ arg.limChar = this.scanner.lastTokenLimChar();
+ arg.varFlags |= argFlags;
+ if(!haveFirstArgID) {
+ formals.append(arg);
+ } else {
+ haveFirstArgID = false;
+ }
+ }
+ firstArg = false;
+ if(this.currentToken.tokenId == TypeScript.TokenID.Comma) {
+ if((munchedArg) && (!sawEllipsis)) {
+ this.currentToken = this.scanner.scan();
+ continue;
+ } else {
+ this.reportParseError("Unexpected ',' in argument list");
+ if(this.errorRecovery) {
+ this.currentToken = this.scanner.scan();
+ continue;
+ }
+ }
+ } else {
+ break;
+ }
+ }
+ if(isIndexer) {
+ this.checkCurrentToken(TypeScript.TokenID.CloseBracket, errorRecoverySet | TypeScript.ErrorRecoverySet.LCurly | TypeScript.ErrorRecoverySet.SColon);
+ } else {
+ if(expectClosingRParen) {
+ this.checkCurrentToken(TypeScript.TokenID.CloseParen, errorRecoverySet | TypeScript.ErrorRecoverySet.LCurly | TypeScript.ErrorRecoverySet.SColon);
+ }
+ }
+ formals.limChar = this.scanner.lastTokenLimChar();
+ return sawEllipsis;
+ };
+ Parser.prototype.parseFncDecl = function (errorRecoverySet, isDecl, requiresSignature, isMethod, methodName, indexer, isStatic, markedAsAmbient, modifiers, lambdaArgContext, expectClosingRParen) {
+ var leftCurlyCount = this.scanner.leftCurlyCount;
+ var rightCurlyCount = this.scanner.rightCurlyCount;
+ var prevInConstr = this.parsingClassConstructorDefinition;
+ this.parsingClassConstructorDefinition = false;
+ var name = null;
+ var fnMin = this.scanner.startPos;
+ var minChar = this.scanner.pos;
+ var prevNestingLevel = this.nestingLevel;
+ var preComments = this.parseComments();
+ var isLambda = !!lambdaArgContext;
+ this.nestingLevel = 0;
+ if((!this.style_funcInLoop) && this.inLoop()) {
+ this.reportParseStyleError("function declaration in loop");
+ }
+ if(!isMethod && !isStatic && !indexer && !lambdaArgContext) {
+ this.currentToken = this.scanner.scan();
+ this.state = ParseState.StartFncDecl;
+ if((this.currentToken.tokenId != TypeScript.TokenID.Identifier) && (!TypeScript.convertTokToID(this.currentToken, this.strictMode))) {
+ if(isDecl) {
+ this.reportParseError("Function declaration must include identifier");
+ this.nestingLevel = prevNestingLevel;
+ return new TypeScript.IncompleteAST(fnMin, this.scanner.pos);
+ }
+ } else {
+ name = TypeScript.Identifier.fromToken(this.currentToken);
+ name.minChar = this.scanner.startPos;
+ name.limChar = this.scanner.pos;
+ this.currentToken = this.scanner.scan();
+ }
+ } else {
+ if(methodName) {
+ name = methodName;
+ }
+ }
+ this.state = ParseState.FncDeclName;
+ var args = new TypeScript.ASTList();
+ var variableArgList = false;
+ var isOverload = false;
+ var isGetter = TypeScript.hasFlag(modifiers, TypeScript.Modifiers.Getter);
+ var isSetter = TypeScript.hasFlag(modifiers, TypeScript.Modifiers.Setter);
+ if((this.currentToken.tokenId == TypeScript.TokenID.OpenParen) || (indexer && (this.currentToken.tokenId == TypeScript.TokenID.OpenBracket)) || (lambdaArgContext && (lambdaArgContext.preProcessedLambdaArgs || this.currentToken.tokenId == TypeScript.TokenID.DotDotDot))) {
+ variableArgList = this.parseFormalParameterList(errorRecoverySet, args, false, requiresSignature, indexer, isGetter, isSetter, isLambda, lambdaArgContext ? lambdaArgContext.preProcessedLambdaArgs : null, expectClosingRParen);
+ }
+ this.state = ParseState.FncDeclArgs;
+ var returnType = null;
+ if(this.currentToken.tokenId == TypeScript.TokenID.Colon) {
+ this.currentToken = this.scanner.scan();
+ if(TypeScript.hasFlag(modifiers, TypeScript.Modifiers.Setter)) {
+ this.reportParseError("Property setters may not declare a return type");
+ }
+ returnType = this.parseTypeReference(errorRecoverySet, true);
+ }
+ if(indexer && args.members.length == 0) {
+ this.reportParseError("Index signatures require a parameter type to be specified");
+ }
+ this.state = ParseState.FncDeclReturnType;
+ if(isLambda && this.currentToken.tokenId != TypeScript.TokenID.EqualsGreaterThan) {
+ this.reportParseError("Expected '=>'");
+ }
+ if(isDecl && !(this.parsingDeclareFile || markedAsAmbient) && (!isMethod || !(this.ambientModule || this.ambientClass || this.inInterfaceDecl)) && this.currentToken.tokenId == TypeScript.TokenID.Semicolon) {
+ isOverload = true;
+ isDecl = false;
+ requiresSignature = true;
+ }
+ var svInFncDecl = this.inFncDecl;
+ this.inFncDecl = true;
+ var funcDecl = this.parseFunctionStatements(errorRecoverySet | TypeScript.ErrorRecoverySet.RCurly, name, false, isMethod, args, TypeScript.AllowedElements.None, minChar, requiresSignature, TypeScript.Modifiers.None);
+ this.inFncDecl = svInFncDecl;
+ funcDecl.variableArgList = variableArgList;
+ funcDecl.isOverload = isOverload;
+ if(!requiresSignature) {
+ funcDecl.fncFlags |= TypeScript.FncFlags.Definition;
+ }
+ if(isStatic) {
+ funcDecl.fncFlags |= TypeScript.FncFlags.Static;
+ }
+ if(requiresSignature) {
+ funcDecl.fncFlags |= TypeScript.FncFlags.Signature;
+ }
+ if(indexer) {
+ funcDecl.fncFlags |= TypeScript.FncFlags.IndexerMember;
+ }
+ funcDecl.returnTypeAnnotation = returnType;
+ if(isMethod) {
+ funcDecl.fncFlags |= TypeScript.FncFlags.Method;
+ funcDecl.fncFlags |= TypeScript.FncFlags.ClassPropertyMethodExported;
+ }
+ funcDecl.leftCurlyCount = this.scanner.leftCurlyCount - leftCurlyCount;
+ funcDecl.rightCurlyCount = this.scanner.rightCurlyCount - rightCurlyCount;
+ this.nestingLevel = prevNestingLevel;
+ this.parsingClassConstructorDefinition = prevInConstr;
+ funcDecl.preComments = preComments;
+ return funcDecl;
+ };
+ Parser.prototype.convertToTypeReference = function (ast) {
+ var result;
+ switch(ast.nodeType) {
+ case TypeScript.NodeType.TypeRef: {
+ return ast;
+
+ }
+ case TypeScript.NodeType.Name: {
+ result = new TypeScript.TypeReference(ast, 0);
+ result.minChar = ast.minChar;
+ result.limChar = ast.limChar;
+ return result;
+
+ }
+ case TypeScript.NodeType.Index: {
+ var expr = ast;
+ result = this.convertToTypeReference(expr.operand1);
+ if(result) {
+ result.arrayCount++;
+ result.minChar = expr.minChar;
+ result.limChar = expr.limChar;
+ return result;
+ } else {
+ var etr = new TypeScript.AST(TypeScript.NodeType.Error);
+ return etr;
+ }
+ }
+
+ }
+ return null;
+ };
+ Parser.prototype.parseArgList = function (errorRecoverySet) {
+ var args = new TypeScript.ASTList();
+ args.minChar = this.scanner.startPos;
+ this.currentToken = this.scanner.scan();
+ if(this.currentToken.tokenId !== TypeScript.TokenID.CloseParen) {
+ while(true) {
+ if(args.members.length > 65535) {
+ this.reportParseError("max number of args exceeded");
+ break;
+ }
+ var arg = this.parseExpr(TypeScript.ErrorRecoverySet.Comma | errorRecoverySet, TypeScript.OperatorPrecedence.Comma, true, TypeContext.NoTypes);
+ args.append(arg);
+ if(this.currentToken.tokenId != TypeScript.TokenID.Comma) {
+ break;
+ }
+ this.currentToken = this.scanner.scan();
+ }
+ }
+ args.limChar = this.scanner.pos;
+ return args;
+ };
+ Parser.prototype.parseBaseList = function (extendsList, implementsList, errorRecoverySet, isClass) {
+ var keyword = true;
+ var currentList = extendsList;
+ for(; ; ) {
+ if(keyword) {
+ if(this.currentToken.tokenId === TypeScript.TokenID.Implements) {
+ currentList = implementsList;
+ } else {
+ if(this.currentToken.tokenId == TypeScript.TokenID.Extends && !this.requiresExtendsBlock) {
+ this.requiresExtendsBlock = isClass;
+ }
+ }
+ this.currentToken = this.scanner.scan();
+ keyword = false;
+ }
+ var baseName = null;
+ if((this.currentToken.tokenId == TypeScript.TokenID.Identifier) || TypeScript.convertTokToID(this.currentToken, this.strictMode)) {
+ var minChar = this.scanner.startPos;
+ baseName = TypeScript.Identifier.fromToken(this.currentToken);
+ baseName.minChar = minChar;
+ baseName.limChar = this.scanner.pos;
+ baseName = this.parseNamedType(errorRecoverySet | TypeScript.ErrorRecoverySet.LCurly, minChar, baseName, false);
+ } else {
+ this.reportParseError("Expected base name");
+ if(this.errorRecovery) {
+ baseName = new TypeScript.MissingIdentifier();
+ baseName.minChar = this.scanner.pos;
+ baseName.limChar = this.scanner.pos;
+ baseName.flags |= TypeScript.ASTFlags.Error;
+ }
+ }
+ if(this.currentToken.tokenId == TypeScript.TokenID.OpenParen) {
+ if(isClass) {
+ this.reportParseError("Base classes may only be initialized via a 'super' call within the constructor body");
+ } else {
+ this.reportParseError("Interfaces may not be extended with a call expression");
+ }
+ } else {
+ currentList.append(baseName);
+ }
+ if(isClass && currentList == extendsList && extendsList.members.length > 1) {
+ this.reportParseError("A class may only extend one other class");
+ }
+ if(this.currentToken.tokenId == TypeScript.TokenID.Comma) {
+ this.currentToken = this.scanner.scan();
+ continue;
+ } else {
+ if((this.currentToken.tokenId == TypeScript.TokenID.Extends) || (this.currentToken.tokenId == TypeScript.TokenID.Implements)) {
+ if(this.currentToken.tokenId == TypeScript.TokenID.Extends && !this.requiresExtendsBlock) {
+ this.requiresExtendsBlock = isClass;
+ }
+ currentList = extendsList;
+ keyword = true;
+ continue;
+ }
+ }
+ break;
+ }
+ };
+ Parser.prototype.parseClassDecl = function (errorRecoverySet, minChar, modifiers) {
+ var leftCurlyCount = this.scanner.leftCurlyCount;
+ var rightCurlyCount = this.scanner.rightCurlyCount;
+ if((modifiers & TypeScript.Modifiers.Readonly) != TypeScript.Modifiers.None) {
+ this.reportParseError("const modifier is implicit for class");
+ }
+ if(this.parsingDeclareFile || this.ambientModule) {
+ modifiers |= TypeScript.Modifiers.Ambient;
+ modifiers |= TypeScript.Modifiers.Exported;
+ }
+ var classIsMarkedAsAmbient = this.parsingDeclareFile || (modifiers & TypeScript.Modifiers.Ambient) != TypeScript.Modifiers.None;
+ var svAmbientClass = this.ambientClass;
+ this.ambientClass = classIsMarkedAsAmbient;
+ this.currentToken = this.scanner.scan();
+ var name = null;
+ if((this.currentToken.tokenId == TypeScript.TokenID.Identifier) || (!TypeScript.isPrimitiveTypeToken(this.currentToken) && TypeScript.convertTokToID(this.currentToken, this.strictMode))) {
+ name = TypeScript.Identifier.fromToken(this.currentToken);
+ name.minChar = this.scanner.startPos;
+ name.limChar = this.scanner.pos;
+ this.currentToken = this.scanner.scan();
+ } else {
+ this.reportParseError("class missing name");
+ if(this.errorRecovery) {
+ name = new TypeScript.MissingIdentifier();
+ name.minChar = this.scanner.pos;
+ name.limChar = this.scanner.pos;
+ name.flags |= TypeScript.ASTFlags.Error;
+ }
+ }
+ var extendsList = null;
+ var implementsList = null;
+ var requiresSignature = false;
+ if((this.currentToken.tokenId == TypeScript.TokenID.Extends) || (this.currentToken.tokenId == TypeScript.TokenID.Implements)) {
+ extendsList = new TypeScript.ASTList();
+ implementsList = new TypeScript.ASTList();
+ this.parseBaseList(extendsList, implementsList, errorRecoverySet, true);
+ }
+ var classDecl = new TypeScript.ClassDeclaration(name, new TypeScript.ASTList(), extendsList, implementsList);
+ this.currentClassDefinition = classDecl;
+ this.parseClassElements(classDecl, errorRecoverySet, modifiers);
+ if(this.ambientModule || this.parsingDeclareFile || TypeScript.hasFlag(modifiers, TypeScript.Modifiers.Exported)) {
+ classDecl.varFlags |= TypeScript.VarFlags.Exported;
+ }
+ if(this.ambientModule || TypeScript.hasFlag(modifiers, TypeScript.Modifiers.Ambient)) {
+ classDecl.varFlags |= TypeScript.VarFlags.Ambient;
+ }
+ classDecl.varFlags |= TypeScript.VarFlags.Class;
+ this.ambientClass = svAmbientClass;
+ classDecl.leftCurlyCount = this.scanner.leftCurlyCount - leftCurlyCount;
+ classDecl.rightCurlyCount = this.scanner.rightCurlyCount - rightCurlyCount;
+ return classDecl;
+ };
+ Parser.prototype.parseClassElements = function (classDecl, errorRecoverySet, parentModifiers) {
+ var modifiers = parentModifiers;
+ var resetModifiers = false;
+ var membersMinChar = this.scanner.startPos;
+ this.checkCurrentToken(TypeScript.TokenID.OpenBrace, errorRecoverySet);
+ this.nestingLevel++;
+ var currentMemberMinChar = this.scanner.startPos;
+ var wasGetOrSetId = false;
+ while(!(this.currentToken.tokenId == TypeScript.TokenID.CloseBrace || this.currentToken.tokenId == TypeScript.TokenID.EndOfFile)) {
+ var scanNext = true;
+ var publicOrPrivateFlags = TypeScript.Modifiers.Public | TypeScript.Modifiers.Private;
+ if(this.currentToken.tokenId == TypeScript.TokenID.Get) {
+ if(modifiers & TypeScript.Modifiers.Getter) {
+ this.reportParseError("Duplicate 'get' declaration in class body");
+ }
+ if(modifiers & TypeScript.Modifiers.Setter) {
+ this.reportParseError("Getter already marked as a setter");
+ }
+ modifiers |= TypeScript.Modifiers.Getter;
+ } else {
+ if(this.currentToken.tokenId == TypeScript.TokenID.Set) {
+ if(modifiers & TypeScript.Modifiers.Setter) {
+ this.reportParseError("Duplicate 'set' declaration in class body");
+ }
+ if(modifiers & TypeScript.Modifiers.Getter) {
+ this.reportParseError("Setter already marked as a getter");
+ }
+ modifiers |= TypeScript.Modifiers.Setter;
+ } else {
+ if(this.currentToken.tokenId == TypeScript.TokenID.Private) {
+ if(modifiers & publicOrPrivateFlags) {
+ this.reportParseError("Multiple modifiers may not be applied to class members");
+ }
+ modifiers |= TypeScript.Modifiers.Private;
+ } else {
+ if(this.currentToken.tokenId == TypeScript.TokenID.Public) {
+ if(modifiers & publicOrPrivateFlags) {
+ this.reportParseError("Multiple modifiers may not be applied to class members");
+ }
+ modifiers |= TypeScript.Modifiers.Public;
+ } else {
+ if(this.currentToken.tokenId == TypeScript.TokenID.Static) {
+ if(modifiers & TypeScript.Modifiers.Static) {
+ this.reportParseError("Multiple modifiers may not be applied to class members");
+ }
+ modifiers |= TypeScript.Modifiers.Static;
+ } else {
+ if(this.currentToken.tokenId == TypeScript.TokenID.Constructor) {
+ if(modifiers != parentModifiers) {
+ this.reportParseError("Constructors may not have modifiers");
+ }
+ this.parseClassConstructorDeclaration(currentMemberMinChar, errorRecoverySet, modifiers);
+ scanNext = false;
+ resetModifiers = true;
+ } else {
+ if(wasGetOrSetId || this.currentToken.tokenId == TypeScript.TokenID.Identifier || TypeScript.convertTokToIDName(this.currentToken)) {
+ var idText = wasGetOrSetId ? ((modifiers & TypeScript.Modifiers.Getter) ? "get" : "set") : this.currentToken.getText();
+ var id = wasGetOrSetId ? new TypeScript.Identifier(idText) : TypeScript.Identifier.fromToken(this.currentToken);
+ id.minChar = this.scanner.startPos;
+ id.limChar = this.scanner.pos;
+ if(wasGetOrSetId) {
+ modifiers = modifiers ^ ((modifiers & TypeScript.Modifiers.Getter) ? TypeScript.Modifiers.Getter : TypeScript.Modifiers.Setter);
+ wasGetOrSetId = false;
+ } else {
+ this.currentToken = this.scanner.scan();
+ }
+ if(this.currentToken.tokenId == TypeScript.TokenID.OpenParen) {
+ this.parseClassMemberFunctionDeclaration(id, currentMemberMinChar, errorRecoverySet, modifiers);
+ scanNext = false;
+ } else {
+ if(modifiers & TypeScript.Modifiers.Getter || modifiers & TypeScript.Modifiers.Setter) {
+ this.reportParseError("Property accessors must be functions");
+ }
+ var varDecl = this.parseClassMemberVariableDeclaration(id, currentMemberMinChar, false, errorRecoverySet, modifiers);
+ if(varDecl.init && varDecl.init.nodeType == TypeScript.NodeType.FuncDecl) {
+ if(this.currentToken.tokenId == TypeScript.TokenID.CloseBrace) {
+ scanNext = false;
+ }
+ } else {
+ if(varDecl.init && varDecl.init.nodeType == TypeScript.NodeType.ObjectLit && this.currentToken.tokenId != TypeScript.TokenID.Semicolon) {
+ scanNext = false;
+ varDecl.init.flags |= TypeScript.ASTFlags.AutomaticSemicolon;
+ } else {
+ if(this.currentToken.tokenId != TypeScript.TokenID.Semicolon) {
+ this.reportParseError("Expected ';'");
+ scanNext = false;
+ }
+ }
+ }
+ }
+ resetModifiers = true;
+ } else {
+ if(this.currentToken.tokenId == TypeScript.TokenID.Super) {
+ this.reportParseError("Base class initializers must be the first statement in a class definition");
+ } else {
+ if(!wasGetOrSetId && ((modifiers & TypeScript.Modifiers.Getter) || (modifiers & TypeScript.Modifiers.Setter)) && ((this.currentToken.tokenId == TypeScript.TokenID.OpenParen) || (this.currentToken.tokenId == TypeScript.TokenID.Equals) || (this.currentToken.tokenId == TypeScript.TokenID.Colon) || (this.currentToken.tokenId == TypeScript.TokenID.Semicolon))) {
+ wasGetOrSetId = true;
+ scanNext = false;
+ } else {
+ if(this.currentToken.tokenId != TypeScript.TokenID.Semicolon) {
+ this.reportParseError("Unexpected '" + this.currentToken.getText() + "' in class definition");
+ resetModifiers = true;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ if(scanNext) {
+ this.currentToken = this.scanner.scan();
+ if (this.currentToken === undefined) this.currentToken = this.scanner.scan();
+ }
+ if(resetModifiers) {
+ modifiers = parentModifiers;
+ currentMemberMinChar = this.scanner.startPos;
+ resetModifiers = false;
+ }
+ }
+ var membersLimChar = this.scanner.pos;
+ if(this.currentToken.tokenId == TypeScript.TokenID.CloseBrace) {
+ classDecl.endingToken = new TypeScript.ASTSpan();
+ classDecl.endingToken.minChar = this.scanner.startPos;
+ classDecl.endingToken.limChar = this.scanner.pos;
+ if(!this.currentClassDefinition.members.members.length) {
+ this.currentClassDefinition.preComments = this.parseComments();
+ }
+ this.currentToken = this.scanner.scan();
+ }
+ this.nestingLevel--;
+ this.currentClassDefinition.members.minChar = membersMinChar;
+ this.currentClassDefinition.members.limChar = membersLimChar;
+ this.currentClassDefinition.limChar = membersLimChar;
+ this.currentClassDefinition = null;
+ };
+ Parser.prototype.parseClassConstructorDeclaration = function (minChar, errorRecoverySet, modifiers) {
+ this.parsingClassConstructorDefinition = true;
+ var isAmbient = this.parsingDeclareFile || TypeScript.hasFlag(modifiers, TypeScript.Modifiers.Ambient);
+ var args = new TypeScript.ASTList();
+ var variableArgList = false;
+ var preComments = this.parseComments();
+ this.currentToken = this.scanner.scan();
+ if(this.currentToken.tokenId == TypeScript.TokenID.OpenParen) {
+ variableArgList = this.parseFormalParameterList(errorRecoverySet, args, true, isAmbient, false, false, false, false, null, true);
+ if(args.members.length > 0) {
+ var lastArg = args.members[args.members.length - 1];
+ }
+ }
+ var requiresSignature = isAmbient || this.currentToken.tokenId == TypeScript.TokenID.Semicolon;
+ if(requiresSignature) {
+ for(var i = 0; i < args.members.length; i++) {
+ var arg = args.members[i];
+ if(TypeScript.hasFlag(arg.varFlags, TypeScript.VarFlags.Property)) {
+ this.reportParseError("Overload or ambient signatures may not specify parameter properties", arg.minChar, arg.limChar);
+ }
+ }
+ }
+ if(!requiresSignature) {
+ this.currentClassDefinition.constructorNestingLevel = this.nestingLevel + 1;
+ }
+ var constructorFuncDecl = this.parseFunctionStatements(errorRecoverySet | TypeScript.ErrorRecoverySet.RCurly, this.currentClassDefinition.name, true, false, args, TypeScript.AllowedElements.Properties, minChar, requiresSignature, modifiers);
+ constructorFuncDecl.preComments = preComments;
+ if(requiresSignature && !isAmbient) {
+ constructorFuncDecl.isOverload = true;
+ }
+ constructorFuncDecl.variableArgList = variableArgList;
+ this.currentClassDecl = null;
+ constructorFuncDecl.returnTypeAnnotation = this.convertToTypeReference(this.currentClassDefinition.name);
+ constructorFuncDecl.classDecl = this.currentClassDefinition;
+ if(isAmbient) {
+ constructorFuncDecl.fncFlags |= TypeScript.FncFlags.Ambient;
+ }
+ if(requiresSignature) {
+ constructorFuncDecl.fncFlags |= TypeScript.FncFlags.Signature;
+ }
+ if(this.ambientModule || TypeScript.hasFlag(modifiers, TypeScript.Modifiers.Exported)) {
+ constructorFuncDecl.fncFlags |= TypeScript.FncFlags.Exported;
+ }
+ if(this.currentClassDefinition.constructorDecl) {
+ if(!isAmbient && !this.currentClassDefinition.constructorDecl.isSignature() && !constructorFuncDecl.isSignature()) {
+ this.reportParseError("Duplicate constructor definition");
+ }
+ }
+ if(isAmbient || !constructorFuncDecl.isSignature()) {
+ this.currentClassDefinition.constructorDecl = constructorFuncDecl;
+ }
+ constructorFuncDecl.fncFlags |= TypeScript.FncFlags.ClassMethod;
+ this.currentClassDefinition.members.members[this.currentClassDefinition.members.members.length] = constructorFuncDecl;
+ this.parsingClassConstructorDefinition = false;
+ return constructorFuncDecl;
+ };
+ Parser.prototype.parseClassMemberVariableDeclaration = function (text, minChar, isDeclaredInConstructor, errorRecoverySet, modifiers) {
+ var varDecl = new TypeScript.VarDecl(text, this.nestingLevel);
+ varDecl.minChar = minChar;
+ var isStatic = false;
+ varDecl.preComments = this.parseComments();
+ if(this.currentToken.tokenId == TypeScript.TokenID.Colon) {
+ this.currentToken = this.scanner.scan();
+ varDecl.typeExpr = this.parseTypeReference(errorRecoverySet | TypeScript.ErrorRecoverySet.Asg | TypeScript.ErrorRecoverySet.Comma, false);
+ if(varDecl.typeExpr && varDecl.typeExpr.nodeType == TypeScript.NodeType.TypeRef) {
+ var typeExpr = (varDecl.typeExpr);
+ if(typeExpr.term && typeExpr.term.nodeType == TypeScript.NodeType.FuncDecl) {
+ typeExpr.term.preComments = varDecl.preComments;
+ }
+ }
+ }
+ if(this.currentToken.tokenId == TypeScript.TokenID.Equals) {
+ if(this.parsingDeclareFile || TypeScript.hasFlag(modifiers, TypeScript.Modifiers.Ambient)) {
+ this.reportParseError("context does not permit variable initializer");
+ if(this.errorRecovery) {
+ this.skip(errorRecoverySet);
+ varDecl.flags |= TypeScript.ASTFlags.Error;
+ varDecl.limChar = this.scanner.lastTokenLimChar();
+ return varDecl;
+ }
+ }
+ this.currentToken = this.scanner.scan();
+ varDecl.init = this.parseExpr(TypeScript.ErrorRecoverySet.Comma | errorRecoverySet, TypeScript.OperatorPrecedence.Comma, true, TypeContext.NoTypes);
+ varDecl.limChar = varDecl.init.limChar;
+ if(!(modifiers & TypeScript.Modifiers.Static)) {
+ this.currentClassDefinition.varFlags |= TypeScript.VarFlags.ClassSuperMustBeFirstCallInConstructor;
+ }
+ } else {
+ varDecl.limChar = this.scanner.pos;
+ }
+ if(modifiers & TypeScript.Modifiers.Static) {
+ varDecl.varFlags |= TypeScript.VarFlags.Static;
+ isStatic = true;
+ }
+ if((modifiers & TypeScript.Modifiers.Private) != TypeScript.Modifiers.None) {
+ varDecl.varFlags |= TypeScript.VarFlags.Private;
+ } else {
+ varDecl.varFlags |= TypeScript.VarFlags.Public;
+ }
+ varDecl.varFlags |= TypeScript.VarFlags.Property;
+ if(isDeclaredInConstructor) {
+ varDecl.varFlags |= TypeScript.VarFlags.ClassConstructorProperty;
+ }
+ if(!isDeclaredInConstructor && !isStatic) {
+ varDecl.varFlags |= TypeScript.VarFlags.ClassBodyProperty;
+ }
+ this.currentClassDefinition.knownMemberNames[text.actualText] = true;
+ if(!isDeclaredInConstructor) {
+ this.currentClassDefinition.members.members[this.currentClassDefinition.members.members.length] = varDecl;
+ }
+ varDecl.postComments = this.parseComments();
+ return varDecl;
+ };
+ Parser.prototype.parseClassMemberFunctionDeclaration = function (methodName, minChar, errorRecoverySet, modifiers) {
+ var wasAccessorID = this.prevIDTok != null;
+ var isAccessor = TypeScript.hasFlag(modifiers, TypeScript.Modifiers.Getter) || TypeScript.hasFlag(modifiers, TypeScript.Modifiers.Setter);
+ var isStatic = TypeScript.hasFlag(modifiers, TypeScript.Modifiers.Static);
+ var isAmbient = this.ambientModule || TypeScript.hasFlag(modifiers, TypeScript.Modifiers.Ambient);
+ errorRecoverySet |= TypeScript.ErrorRecoverySet.RParen;
+ if(isAccessor && (modifiers & TypeScript.Modifiers.Ambient)) {
+ this.reportParseError("Property accessors may not be declared in ambient classes");
+ }
+ var ast = this.parseFncDecl(errorRecoverySet, true, isAmbient, true, methodName, false, isStatic, isAmbient, modifiers, null, true);
+ if(ast.nodeType == TypeScript.NodeType.Error) {
+ return ast;
+ }
+ var funcDecl = ast;
+ funcDecl.minChar = minChar;
+ if(funcDecl.bod !== null) {
+ funcDecl.limChar = funcDecl.bod.limChar;
+ }
+ if(modifiers & TypeScript.Modifiers.Private) {
+ funcDecl.fncFlags |= TypeScript.FncFlags.Private;
+ } else {
+ funcDecl.fncFlags |= TypeScript.FncFlags.Public;
+ }
+ if(isStatic) {
+ funcDecl.fncFlags |= TypeScript.FncFlags.Static;
+ }
+ if(isAccessor) {
+ if(TypeScript.hasFlag(modifiers, TypeScript.Modifiers.Getter)) {
+ funcDecl.fncFlags |= TypeScript.FncFlags.GetAccessor;
+ funcDecl.hint = "get" + funcDecl.name.actualText;
+ } else {
+ funcDecl.fncFlags |= TypeScript.FncFlags.SetAccessor;
+ funcDecl.hint = "set" + funcDecl.name.actualText;
+ }
+ funcDecl.fncFlags |= TypeScript.FncFlags.IsFunctionExpression;
+ if(TypeScript.codeGenTarget < TypeScript.CodeGenTarget.ES5) {
+ this.reportParseError("Property accessors are only available when targeting ES5 or greater", funcDecl.minChar, funcDecl.limChar);
+ }
+ }
+ funcDecl.fncFlags |= TypeScript.FncFlags.ClassMethod;
+ this.currentClassDefinition.knownMemberNames[methodName.actualText] = true;
+ this.currentClassDefinition.members.members[this.currentClassDefinition.members.members.length] = funcDecl;
+ return funcDecl;
+ };
+ Parser.prototype.parseTypeMember = function (errorRecoverySet) {
+ var minChar = this.scanner.startPos;
+ var propertyDecl = this.parsePropertyDeclaration(errorRecoverySet, TypeScript.Modifiers.Public, true, false);
+ if(propertyDecl) {
+ propertyDecl.minChar = minChar;
+ if(propertyDecl.nodeType == TypeScript.NodeType.VarDecl) {
+ this.checkCurrentToken(TypeScript.TokenID.Semicolon, errorRecoverySet);
+ }
+ }
+ return propertyDecl;
+ };
+ Parser.prototype.parseTypeMemberList = function (errorRecoverySet, members) {
+ errorRecoverySet |= TypeScript.ErrorRecoverySet.TypeScriptS;
+ while(true) {
+ switch(this.currentToken.tokenId) {
+ case TypeScript.TokenID.CloseBrace:
+ case TypeScript.TokenID.EndOfFile: {
+ members.limChar = this.scanner.pos;
+ return;
+
+ }
+ }
+ var element = this.parseTypeMember(errorRecoverySet);
+ if(element) {
+ members.append(element);
+ }
+ }
+ };
+ Parser.prototype.parseInterfaceDecl = function (errorRecoverySet, modifiers) {
+ var leftCurlyCount = this.scanner.leftCurlyCount;
+ var rightCurlyCount = this.scanner.rightCurlyCount;
+ this.currentToken = this.scanner.scan();
+ var minChar = this.scanner.pos;
+ var name = null;
+ if((this.currentToken.tokenId == TypeScript.TokenID.Identifier) || (!TypeScript.isPrimitiveTypeToken(this.currentToken) && TypeScript.convertTokToID(this.currentToken, this.strictMode))) {
+ name = TypeScript.Identifier.fromToken(this.currentToken);
+ name.minChar = this.scanner.startPos;
+ name.limChar = this.scanner.pos;
+ this.currentToken = this.scanner.scan();
+ } else {
+ this.reportParseError("interface missing name");
+ if(this.errorRecovery) {
+ name = new TypeScript.MissingIdentifier();
+ name.minChar = this.scanner.pos;
+ name.limChar = this.scanner.pos;
+ name.flags |= TypeScript.ASTFlags.Error;
+ }
+ }
+ var extendsList = null;
+ var implementsList = null;
+ if(this.currentToken.tokenId === TypeScript.TokenID.Extends || this.currentToken.tokenId === TypeScript.TokenID.Implements) {
+ if(this.currentToken.tokenId === TypeScript.TokenID.Implements) {
+ this.reportParseError("Expected 'extends'");
+ }
+ extendsList = new TypeScript.ASTList();
+ implementsList = new TypeScript.ASTList();
+ extendsList.minChar = this.scanner.startPos;
+ this.parseBaseList(extendsList, implementsList, errorRecoverySet, false);
+ }
+ var membersMinChar = this.scanner.startPos;
+ this.checkCurrentToken(TypeScript.TokenID.OpenBrace, errorRecoverySet | TypeScript.ErrorRecoverySet.TypeScriptS);
+ var members = new TypeScript.ASTList();
+ members.minChar = membersMinChar;
+ var prevInInterfaceDecl = this.inInterfaceDecl;
+ this.inInterfaceDecl = true;
+ this.parseTypeMemberList(errorRecoverySet | TypeScript.ErrorRecoverySet.RCurly, members);
+ this.inInterfaceDecl = prevInInterfaceDecl;
+ this.checkCurrentToken(TypeScript.TokenID.CloseBrace, errorRecoverySet);
+ var interfaceDecl = new TypeScript.InterfaceDeclaration(name, members, extendsList, null);
+ if(TypeScript.hasFlag(modifiers, TypeScript.Modifiers.Private)) {
+ interfaceDecl.varFlags |= TypeScript.VarFlags.Private;
+ }
+ if(TypeScript.hasFlag(modifiers, TypeScript.Modifiers.Public)) {
+ interfaceDecl.varFlags |= TypeScript.VarFlags.Public;
+ }
+ if(this.parsingDeclareFile || this.ambientModule || TypeScript.hasFlag(modifiers, TypeScript.Modifiers.Exported)) {
+ interfaceDecl.varFlags |= TypeScript.VarFlags.Exported;
+ }
+ interfaceDecl.limChar = members.limChar;
+ interfaceDecl.leftCurlyCount = this.scanner.leftCurlyCount - leftCurlyCount;
+ interfaceDecl.rightCurlyCount = this.scanner.rightCurlyCount - rightCurlyCount;
+ return interfaceDecl;
+ };
+ Parser.prototype.makeVarDecl = function (id, nest) {
+ var varDecl = new TypeScript.VarDecl(id, nest);
+ var currentVarList = this.topVarList();
+ if(currentVarList) {
+ currentVarList.append(varDecl);
+ }
+ return varDecl;
+ };
+ Parser.prototype.parsePropertyDeclaration = function (errorRecoverySet, modifiers, requireSignature, isStatic) {
+ var text = null;
+ var minChar = this.scanner.startPos;
+ var nameLimChar = minChar;
+ var isNew = false;
+ var isIndexer = false;
+ var wasAccessorID = this.prevIDTok != null;
+ var isAccessor = TypeScript.hasFlag(modifiers, TypeScript.Modifiers.Getter) || TypeScript.hasFlag(modifiers, TypeScript.Modifiers.Setter);
+ if(this.parsingDeclareFile || this.ambientModule || TypeScript.hasFlag(modifiers, TypeScript.Modifiers.Ambient)) {
+ requireSignature = true;
+ }
+ if(this.currentToken.tokenId == TypeScript.TokenID.OpenParen && !wasAccessorID) {
+ if(!requireSignature && !isStatic) {
+ this.reportParseError("Expected identifier in property declaration");
+ if(this.errorRecovery) {
+ this.skip(errorRecoverySet);
+ text = new TypeScript.MissingIdentifier();
+ }
+ }
+ } else {
+ if(this.currentToken.tokenId == TypeScript.TokenID.New) {
+ if(requireSignature) {
+ this.currentToken = this.scanner.scan();
+ if(this.currentToken.tokenId == TypeScript.TokenID.OpenParen) {
+ isNew = true;
+ }
+ }
+ if(!isNew) {
+ if(!requireSignature) {
+ this.currentToken = this.scanner.scan();
+ }
+ text = new TypeScript.Identifier("new");
+ text.minChar = this.scanner.pos - 3;
+ text.limChar = this.scanner.pos;
+ nameLimChar = this.scanner.pos;
+ }
+ } else {
+ if((this.currentToken.tokenId == TypeScript.TokenID.OpenBracket) && requireSignature) {
+ isIndexer = true;
+ text = new TypeScript.Identifier("__item");
+ } else {
+ if((this.currentToken.tokenId != TypeScript.TokenID.Identifier) && (!TypeScript.convertTokToIDName(this.currentToken)) && !wasAccessorID) {
+ this.reportParseError("Expected identifier in property declaration");
+ if(this.errorRecovery) {
+ var eminChar = this.scanner.startPos;
+ var curpos = this.scanner.pos;
+ this.skip(errorRecoverySet & (~TypeScript.ErrorRecoverySet.Comma));
+ if(this.scanner.pos == curpos) {
+ this.currentToken = this.scanner.scan();
+ }
+ var epd = new TypeScript.VarDecl(new TypeScript.MissingIdentifier(), this.nestingLevel);
+ epd.flags |= TypeScript.ASTFlags.Error;
+ epd.minChar = eminChar;
+ epd.limChar = this.scanner.lastTokenLimChar();
+ return epd;
+ }
+ } else {
+ if(wasAccessorID) {
+ text = TypeScript.Identifier.fromToken(this.prevIDTok);
+ text.minChar = this.scanner.lastTokenLimChar() - 3;
+ text.limChar = this.scanner.lastTokenLimChar();
+ nameLimChar = text.limChar;
+ if(TypeScript.codeGenTarget < TypeScript.CodeGenTarget.ES5) {
+ this.reportParseError("Property accessors are only available when targeting ES5 or greater");
+ }
+ if(this.currentToken.getText() == text.actualText && this.currentToken != this.prevIDTok) {
+ this.currentToken = this.scanner.scan();
+ }
+ this.prevIDTok = null;
+ } else {
+ text = TypeScript.Identifier.fromToken(this.currentToken);
+ text.minChar = this.scanner.startPos;
+ text.limChar = this.scanner.pos;
+ nameLimChar = this.scanner.pos;
+ this.currentToken = this.scanner.scan();
+ }
+ }
+ }
+ }
+ }
+ if(this.currentToken.tokenId == TypeScript.TokenID.Question) {
+ if(this.inInterfaceDecl && text) {
+ text.flags |= TypeScript.ASTFlags.OptionalName;
+ } else {
+ this.reportParseError("Optional properties may only be declared on interface or object types");
+ }
+ this.currentToken = this.scanner.scan();
+ }
+ if((this.currentToken.tokenId == TypeScript.TokenID.OpenParen) || (isIndexer && (this.currentToken.tokenId == TypeScript.TokenID.OpenBracket))) {
+ var ers = errorRecoverySet | TypeScript.ErrorRecoverySet.RParen;
+ if(isIndexer) {
+ ers = errorRecoverySet | TypeScript.ErrorRecoverySet.RBrack;
+ }
+ var ast = this.parseFncDecl(ers, true, requireSignature, !this.inFncDecl, text, isIndexer, isStatic, (this.parsingDeclareFile || TypeScript.hasFlag(modifiers, TypeScript.Modifiers.Ambient)), modifiers, null, true);
+ var funcDecl;
+ if(ast.nodeType == TypeScript.NodeType.Error) {
+ return ast;
+ } else {
+ funcDecl = ast;
+ }
+ if(funcDecl.name) {
+ funcDecl.name.minChar = minChar;
+ funcDecl.name.limChar = nameLimChar;
+ }
+ if((modifiers & TypeScript.Modifiers.Public) != TypeScript.Modifiers.None) {
+ funcDecl.fncFlags |= TypeScript.FncFlags.Public;
+ }
+ if((modifiers & TypeScript.Modifiers.Private) != TypeScript.Modifiers.None) {
+ funcDecl.fncFlags |= TypeScript.FncFlags.Private;
+ }
+ if(isStatic) {
+ funcDecl.fncFlags |= TypeScript.FncFlags.Static;
+ }
+ if(this.parsingDeclareFile || TypeScript.hasFlag(modifiers, TypeScript.Modifiers.Ambient)) {
+ funcDecl.fncFlags |= TypeScript.FncFlags.Ambient;
+ }
+ if(isAccessor) {
+ if(TypeScript.hasFlag(modifiers, TypeScript.Modifiers.Getter)) {
+ funcDecl.fncFlags |= TypeScript.FncFlags.GetAccessor;
+ funcDecl.hint = "get" + funcDecl.name.actualText;
+ } else {
+ funcDecl.fncFlags |= TypeScript.FncFlags.SetAccessor;
+ funcDecl.hint = "set" + funcDecl.name.actualText;
+ }
+ funcDecl.fncFlags |= TypeScript.FncFlags.IsFunctionExpression;
+ if(modifiers & TypeScript.Modifiers.Ambient) {
+ this.reportParseError("Property accessors may not be declared in ambient types");
+ }
+ }
+ if(text == null) {
+ if(isNew) {
+ funcDecl.fncFlags |= TypeScript.FncFlags.ConstructMember;
+ funcDecl.hint = "_construct";
+ funcDecl.classDecl = this.currentClassDecl;
+ } else {
+ funcDecl.hint = "_call";
+ funcDecl.fncFlags |= TypeScript.FncFlags.CallMember;
+ }
+ }
+ return funcDecl;
+ } else {
+ var varDecl = new TypeScript.VarDecl(text, this.nestingLevel);
+ varDecl.preComments = this.parseComments();
+ varDecl.minChar = minChar;
+ if(this.currentToken.tokenId == TypeScript.TokenID.Colon) {
+ this.currentToken = this.scanner.scan();
+ varDecl.typeExpr = this.parseTypeReference(errorRecoverySet | TypeScript.ErrorRecoverySet.Asg | TypeScript.ErrorRecoverySet.Comma, false);
+ if(varDecl.typeExpr && varDecl.typeExpr.nodeType == TypeScript.NodeType.TypeRef) {
+ var typeExpr = (varDecl.typeExpr);
+ if(typeExpr.term && typeExpr.term.nodeType == TypeScript.NodeType.FuncDecl) {
+ typeExpr.term.preComments = varDecl.preComments;
+ }
+ }
+ }
+ if(this.currentToken.tokenId == TypeScript.TokenID.Equals) {
+ if(requireSignature) {
+ this.reportParseError("context does not permit variable initializer");
+ if(this.errorRecovery) {
+ this.skip(errorRecoverySet);
+ varDecl.flags |= TypeScript.ASTFlags.Error;
+ varDecl.limChar = this.scanner.lastTokenLimChar();
+ return varDecl;
+ }
+ }
+ this.currentToken = this.scanner.scan();
+ varDecl.init = this.parseExpr(TypeScript.ErrorRecoverySet.Comma | errorRecoverySet, TypeScript.OperatorPrecedence.Comma, true, TypeContext.NoTypes);
+ varDecl.limChar = varDecl.init.limChar;
+ if(varDecl.init.nodeType == TypeScript.NodeType.FuncDecl) {
+ var funcDecl = varDecl.init;
+ funcDecl.hint = varDecl.id.text;
+ funcDecl.boundToProperty = varDecl;
+ } else {
+ if(isAccessor) {
+ this.reportParseError("Accessors may only be functions");
+ }
+ }
+ } else {
+ varDecl.limChar = this.scanner.pos;
+ }
+ if((modifiers & TypeScript.Modifiers.Readonly) != TypeScript.Modifiers.None) {
+ varDecl.varFlags |= TypeScript.VarFlags.Readonly;
+ }
+ if(isStatic) {
+ varDecl.varFlags |= TypeScript.VarFlags.Static;
+ }
+ if((modifiers & TypeScript.Modifiers.Public) != TypeScript.Modifiers.None) {
+ varDecl.varFlags |= TypeScript.VarFlags.Public;
+ }
+ if((modifiers & TypeScript.Modifiers.Private) != TypeScript.Modifiers.None) {
+ varDecl.varFlags |= TypeScript.VarFlags.Private;
+ }
+ varDecl.varFlags |= TypeScript.VarFlags.Property;
+ return varDecl;
+ }
+ };
+ Parser.prototype.parseVariableDeclaration = function (errorRecoverySet, modifiers, allowIn, isStatic) {
+ var isConst = TypeScript.hasFlag(modifiers, TypeScript.Modifiers.Readonly);
+ var minChar = this.scanner.startPos;
+ var varDecl = null;
+ var declList = null;
+ var multivar = false;
+ this.currentToken = this.scanner.scan();
+ var varDeclPreComments = this.parseComments();
+ while(true) {
+ if((this.currentToken.tokenId != TypeScript.TokenID.Identifier) && (!TypeScript.convertTokToID(this.currentToken, this.strictMode))) {
+ this.reportParseError("Expected identifier in variable declaration");
+ if(this.errorRecovery) {
+ varDecl = new TypeScript.VarDecl(new TypeScript.MissingIdentifier(), this.nestingLevel);
+ varDecl.minChar = minChar;
+ this.skip(errorRecoverySet);
+ varDecl.flags |= TypeScript.ASTFlags.Error;
+ varDecl.limChar = this.scanner.lastTokenLimChar();
+ return varDecl;
+ }
+ }
+ var varDeclName = TypeScript.Identifier.fromToken(this.currentToken);
+ if(this.strictMode && (varDeclName.text == "eval")) {
+ this.reportParseError("'eval' may not name a variable in strict mode");
+ }
+ varDecl = this.makeVarDecl(varDeclName, this.nestingLevel);
+ varDecl.id.minChar = this.scanner.startPos;
+ varDecl.id.limChar = this.scanner.pos;
+ varDecl.preComments = varDeclPreComments;
+ if(isStatic) {
+ varDecl.varFlags |= TypeScript.VarFlags.Static;
+ }
+ if(TypeScript.hasFlag(modifiers, TypeScript.Modifiers.Readonly)) {
+ varDecl.varFlags |= TypeScript.VarFlags.Readonly;
+ }
+ if(this.parsingDeclareFile || this.ambientModule || TypeScript.hasFlag(modifiers, TypeScript.Modifiers.Ambient)) {
+ varDecl.varFlags |= TypeScript.VarFlags.Ambient;
+ }
+ if(this.parsingDeclareFile || this.ambientModule || TypeScript.hasFlag(modifiers, TypeScript.Modifiers.Exported)) {
+ varDecl.varFlags |= TypeScript.VarFlags.Exported;
+ }
+ varDecl.minChar = minChar;
+ if(declList) {
+ declList.append(varDecl);
+ }
+ this.currentToken = this.scanner.scan();
+ if(this.currentToken.tokenId == TypeScript.TokenID.Colon) {
+ this.currentToken = this.scanner.scan();
+ var prevInFncDecl = this.inFncDecl;
+ this.inFncDecl = false;
+ varDecl.typeExpr = this.parseTypeReference(errorRecoverySet | TypeScript.ErrorRecoverySet.Asg | TypeScript.ErrorRecoverySet.Comma, false);
+ this.inFncDecl = prevInFncDecl;
+ }
+ if(this.currentToken.tokenId == TypeScript.TokenID.Equals) {
+ if(TypeScript.hasFlag(varDecl.varFlags, TypeScript.VarFlags.Ambient)) {
+ this.reportParseError("Ambient variable can not have an initializer");
+ }
+ this.currentToken = this.scanner.scan();
+ varDecl.init = this.parseExpr(TypeScript.ErrorRecoverySet.Comma | errorRecoverySet, TypeScript.OperatorPrecedence.Comma, allowIn, TypeContext.NoTypes);
+ varDecl.limChar = varDecl.init.limChar;
+ if(varDecl.init.nodeType == TypeScript.NodeType.FuncDecl) {
+ var funcDecl = varDecl.init;
+ funcDecl.hint = varDecl.id.actualText;
+ }
+ } else {
+ if(isConst) {
+ this.reportParseError("const declaration requires initializer");
+ }
+ varDecl.limChar = this.scanner.pos;
+ }
+ varDecl.postComments = this.parseCommentsForLine(this.scanner.line);
+ if(this.currentToken.tokenId != TypeScript.TokenID.Comma) {
+ if(declList) {
+ declList.limChar = varDecl.limChar;
+ return declList;
+ } else {
+ return varDecl;
+ }
+ }
+ if(!multivar) {
+ declList = new TypeScript.ASTList();
+ declList.minChar = varDecl.minChar;
+ declList.append(varDecl);
+ multivar = true;
+ }
+ this.currentToken = this.scanner.scan();
+ minChar = this.scanner.startPos;
+ }
+ };
+ Parser.prototype.parseMemberList = function (errorRecoverySet) {
+ var elements = new TypeScript.ASTList();
+ if(this.currentToken.tokenId == TypeScript.TokenID.CloseBrace) {
+ return elements;
+ }
+ var idHint = null;
+ var memberName = null;
+ var memberExpr = null;
+ var member = null;
+ var minChar = this.scanner.startPos;
+ var isSet = false;
+ var skippedTokenForGetSetId = false;
+ var getSetTok = null;
+ var getSetStartPos = 0;
+ var getSetPos = 0;
+ for(; ; ) {
+ var accessorPattern = false;
+ if(this.currentToken.tokenId == TypeScript.TokenID.Get || this.currentToken.tokenId == TypeScript.TokenID.Set) {
+ isSet = this.currentToken.tokenId == TypeScript.TokenID.Set;
+ getSetTok = this.currentToken;
+ getSetStartPos = this.scanner.startPos;
+ getSetPos = this.scanner.pos;
+ this.currentToken = this.scanner.scan();
+ if((this.currentToken.tokenId == TypeScript.TokenID.Identifier) || TypeScript.convertTokToIDName(this.currentToken)) {
+ idHint = isSet ? "set" : "get";
+ idHint = idHint + this.currentToken.getText();
+ memberName = TypeScript.Identifier.fromToken(this.currentToken);
+ memberName.minChar = this.scanner.startPos;
+ accessorPattern = true;
+ if(TypeScript.codeGenTarget < TypeScript.CodeGenTarget.ES5) {
+ this.reportParseError("Property accessors are only available when targeting ES5 or greater");
+ }
+ } else {
+ if(this.currentToken.tokenId != TypeScript.TokenID.Colon) {
+ this.reportParseError("Expected identifier, string or number as accessor name");
+ } else {
+ skippedTokenForGetSetId = true;
+ memberName = TypeScript.Identifier.fromToken(getSetTok);
+ memberName.minChar = getSetStartPos;
+ memberName.limChar = getSetPos;
+ }
+ }
+ } else {
+ if((this.currentToken.tokenId == TypeScript.TokenID.Identifier) || TypeScript.convertTokToIDName(this.currentToken)) {
+ idHint = this.currentToken.getText();
+ memberName = TypeScript.Identifier.fromToken(this.currentToken);
+ memberName.minChar = this.scanner.startPos;
+ memberName.limChar = this.scanner.pos;
+ } else {
+ if(this.currentToken.tokenId == TypeScript.TokenID.StringLiteral) {
+ idHint = this.currentToken.getText();
+ memberName = new TypeScript.StringLiteral(idHint);
+ memberName.minChar = this.scanner.startPos;
+ memberName.limChar = this.scanner.pos;
+ } else {
+ if(this.currentToken.tokenId == TypeScript.TokenID.NumberLiteral) {
+ var ntok = this.currentToken;
+ idHint = ntok.value.toString();
+ memberName = new TypeScript.StringLiteral(idHint);
+ memberName.minChar = this.scanner.startPos;
+ memberName.limChar = this.scanner.pos;
+ } else {
+ this.reportParseError("Expected identifier, string or number as member name");
+ if(this.errorRecovery) {
+ memberName = new TypeScript.MissingIdentifier();
+ memberName.minChar = this.scanner.startPos;
+ memberName.flags |= TypeScript.ASTFlags.Error;
+ this.skip(errorRecoverySet | TypeScript.ErrorRecoverySet.Comma);
+ memberName.limChar = this.scanner.lastTokenLimChar();
+ }
+ }
+ }
+ }
+ }
+ if(!skippedTokenForGetSetId) {
+ this.currentToken = this.scanner.scan();
+ } else {
+ skippedTokenForGetSetId = false;
+ }
+ if(this.currentToken.tokenId == TypeScript.TokenID.Question) {
+ memberName.flags |= TypeScript.ASTFlags.OptionalName;
+ this.currentToken = this.scanner.scan();
+ }
+ if(accessorPattern) {
+ var args = new TypeScript.ASTList();
+ this.parseFormalParameterList(errorRecoverySet | TypeScript.ErrorRecoverySet.RParen, args, false, true, false, !isSet, isSet, false, null, true);
+ var funcDecl = this.parseFunctionStatements(errorRecoverySet | TypeScript.ErrorRecoverySet.RCurly, memberName, false, true, args, TypeScript.AllowedElements.None, this.scanner.startPos, false, TypeScript.Modifiers.None);
+ if(isSet && funcDecl.returnTypeAnnotation) {
+ this.reportParseError("Property setters may not declare a return type");
+ }
+ funcDecl.fncFlags |= isSet ? TypeScript.FncFlags.SetAccessor : TypeScript.FncFlags.GetAccessor;
+ funcDecl.fncFlags |= TypeScript.FncFlags.IsFunctionExpression;
+ funcDecl.hint = idHint;
+ memberExpr = funcDecl;
+ member = new TypeScript.BinaryExpression(TypeScript.NodeType.Member, memberName, memberExpr);
+ member.minChar = memberName.minChar;
+ if(memberExpr.nodeType == TypeScript.NodeType.FuncDecl) {
+ var funcDecl = memberExpr;
+ funcDecl.hint = idHint;
+ }
+ } else {
+ if(this.currentToken.tokenId == TypeScript.TokenID.Colon) {
+ this.currentToken = this.scanner.scan();
+ memberExpr = this.parseExpr(TypeScript.ErrorRecoverySet.Comma | errorRecoverySet, TypeScript.OperatorPrecedence.Comma, true, TypeContext.NoTypes);
+ if(memberExpr.nodeType == TypeScript.NodeType.TypeRef) {
+ this.reportParseError("Expected 'new' on array declaration in member definition");
+ }
+ member = new TypeScript.BinaryExpression(TypeScript.NodeType.Member, memberName, memberExpr);
+ member.minChar = memberName.minChar;
+ if(memberExpr.nodeType == TypeScript.NodeType.FuncDecl) {
+ var funcDecl = memberExpr;
+ funcDecl.hint = idHint;
+ }
+ } else {
+ this.reportParseError("Expected ':' in member definition");
+ if(this.errorRecovery) {
+ this.skip(errorRecoverySet);
+ elements.flags |= TypeScript.ASTFlags.Error;
+ elements.minChar = minChar;
+ elements.limChar = this.scanner.lastTokenLimChar();
+ return elements;
+ }
+ }
+ }
+ idHint = null;
+ elements.append(member);
+ member.limChar = this.scanner.lastTokenLimChar();
+ if(this.currentToken.tokenId != TypeScript.TokenID.Comma) {
+ break;
+ } else {
+ this.currentToken = this.scanner.scan();
+ }
+ if(this.currentToken.tokenId == TypeScript.TokenID.CloseBrace) {
+ break;
+ }
+ }
+ if(member) {
+ elements.limChar = member.limChar;
+ }
+ elements.minChar = minChar;
+ return elements;
+ };
+ Parser.prototype.parseArrayList = function (errorRecoverySet) {
+ var elements = null;
+ if(this.currentToken.tokenId == TypeScript.TokenID.CloseBracket) {
+ return elements;
+ } else {
+ elements = new TypeScript.ASTList();
+ elements.minChar = this.scanner.startPos;
+ }
+ var arg;
+ for(; ; ) {
+ if((this.currentToken.tokenId == TypeScript.TokenID.Comma) || (this.currentToken.tokenId == TypeScript.TokenID.CloseBracket)) {
+ arg = new TypeScript.AST(TypeScript.NodeType.EmptyExpr);
+ } else {
+ arg = this.parseExpr(TypeScript.ErrorRecoverySet.Comma | errorRecoverySet, TypeScript.OperatorPrecedence.Comma, true, TypeContext.NoTypes);
+ }
+ elements.append(arg);
+ if(this.currentToken.tokenId != TypeScript.TokenID.Comma) {
+ break;
+ }
+ this.currentToken = this.scanner.scan();
+ }
+ elements.limChar = this.scanner.lastTokenLimChar();
+ return elements;
+ };
+ Parser.prototype.parseArrayLiteral = function (errorRecoverySet) {
+ var arrayLiteral = null;
+ arrayLiteral = new TypeScript.UnaryExpression(TypeScript.NodeType.ArrayLit, this.parseArrayList(errorRecoverySet));
+ return arrayLiteral;
+ };
+ Parser.prototype.parseTerm = function (errorRecoverySet, allowCall, typeContext, inCast) {
+ var ast = null;
+ var sawId = false;
+ var inNew = false;
+ var minChar = this.scanner.startPos;
+ var limChar = this.scanner.pos;
+ var parseAsLambda = false;
+ var expectlambdaRParen = false;
+ switch(this.currentToken.tokenId) {
+ case TypeScript.TokenID.Number:
+ case TypeScript.TokenID.Bool:
+ case TypeScript.TokenID.Any:
+ case TypeScript.TokenID.String: {
+ var tid = new TypeScript.Identifier(TypeScript.tokenTable[this.currentToken.tokenId].text);
+ if(TypeScript.hasFlag(typeContext, TypeContext.Primitive)) {
+ ast = new TypeScript.TypeReference(tid, 0);
+ sawId = true;
+ } else {
+ ast = tid;
+ sawId = true;
+ }
+ ast.minChar = minChar;
+ this.currentToken = this.scanner.scan();
+ limChar = this.scanner.lastTokenLimChar();
+ break;
+
+ }
+ case TypeScript.TokenID.This: {
+ ast = new TypeScript.AST(TypeScript.NodeType.This);
+ ast.minChar = minChar;
+ this.currentToken = this.scanner.scan();
+ limChar = this.scanner.lastTokenLimChar();
+ break;
+
+ }
+ case TypeScript.TokenID.Super: {
+ ast = new TypeScript.AST(TypeScript.NodeType.Super);
+ ast.minChar = minChar;
+ this.currentToken = this.scanner.scan();
+ limChar = this.scanner.lastTokenLimChar();
+ break;
+
+ }
+ case TypeScript.TokenID.True: {
+ ast = new TypeScript.AST(TypeScript.NodeType.True);
+ this.currentToken = this.scanner.scan();
+ ast.minChar = minChar;
+ break;
+
+ }
+ case TypeScript.TokenID.False: {
+ ast = new TypeScript.AST(TypeScript.NodeType.False);
+ this.currentToken = this.scanner.scan();
+ ast.minChar = minChar;
+ break;
+
+ }
+ case TypeScript.TokenID.Null: {
+ ast = new TypeScript.AST(TypeScript.NodeType.Null);
+ this.currentToken = this.scanner.scan();
+ ast.minChar = minChar;
+ break;
+
+ }
+ case TypeScript.TokenID.New: {
+ minChar = this.scanner.pos;
+ this.currentToken = this.scanner.scan();
+ var target = this.parseTerm(errorRecoverySet, false, TypeContext.AllSimpleTypes, inCast);
+ if(target.nodeType == TypeScript.NodeType.Error || (target.nodeType == TypeScript.NodeType.Index && (target).operand1.nodeType == TypeScript.NodeType.TypeRef)) {
+ this.reportParseError("Cannot invoke 'new' on this expression");
+ } else {
+ ast = new TypeScript.CallExpression(TypeScript.NodeType.New, target, null);
+ ast.minChar = minChar;
+ limChar = this.scanner.lastTokenLimChar();
+ inNew = true;
+ }
+ break;
+
+ }
+ case TypeScript.TokenID.Function: {
+ minChar = this.scanner.pos;
+ ast = this.parseFncDecl(errorRecoverySet, false, false, false, null, false, false, false, TypeScript.Modifiers.None, null, true);
+ (ast).fncFlags |= TypeScript.FncFlags.IsFunctionExpression;
+ ast.minChar = minChar;
+ limChar = this.scanner.lastTokenLimChar();
+ ast.limChar = limChar;
+ break;
+
+ }
+ }
+ if(ast == null) {
+ if((this.currentToken.tokenId == TypeScript.TokenID.Identifier) || TypeScript.convertTokToID(this.currentToken, this.strictMode)) {
+ var idText = this.currentToken.getText();
+ ast = this.createRef(idText, (this.currentToken).hasEscapeSequence, minChar);
+ sawId = true;
+ ast.minChar = minChar;
+ this.currentToken = this.scanner.scan();
+ if(this.currentToken.tokenId == TypeScript.TokenID.Question) {
+ ast.flags |= TypeScript.ASTFlags.PossibleOptionalParameter;
+ }
+ limChar = this.scanner.lastTokenLimChar();
+ }
+ }
+ if(inCast) {
+ this.checkCurrentToken(TypeScript.TokenID.GreaterThan, errorRecoverySet);
+ }
+ if(ast == null) {
+ switch(this.currentToken.tokenId) {
+ case TypeScript.TokenID.OpenParen: {
+ minChar = this.scanner.pos;
+ var prevTokId = this.scanner.previousToken().tokenId;
+ this.currentToken = this.scanner.scan();
+ var couldBeLambda = prevTokId == TypeScript.TokenID.OpenParen || prevTokId == TypeScript.TokenID.Comma || prevTokId == TypeScript.TokenID.EqualsEquals || prevTokId == TypeScript.TokenID.Colon;
+ if(couldBeLambda && this.currentToken.tokenId == TypeScript.TokenID.CloseParen) {
+ parseAsLambda = true;
+ expectlambdaRParen = false;
+ this.currentToken = this.scanner.scan();
+ } else {
+ if(couldBeLambda && this.currentToken.tokenId == TypeScript.TokenID.DotDotDot) {
+ parseAsLambda = true;
+ expectlambdaRParen = true;
+ } else {
+ ast = this.parseExpr(errorRecoverySet | TypeScript.ErrorRecoverySet.RParen, TypeScript.OperatorPrecedence.None, true, TypeContext.NoTypes, couldBeLambda);
+ limChar = this.scanner.lastTokenLimChar();
+ parseAsLambda = couldBeLambda && (ast.nodeType == TypeScript.NodeType.Name || ast.nodeType == TypeScript.NodeType.Comma) && (this.currentToken.tokenId == TypeScript.TokenID.Colon || this.currentToken.tokenId == TypeScript.TokenID.Question);
+ expectlambdaRParen = true;
+ }
+ }
+ if((ast && !parseAsLambda)) {
+ if(TypeScript.hasFlag(ast.flags, TypeScript.ASTFlags.SkipNextRParen)) {
+ ast.flags = ast.flags & (~(TypeScript.ASTFlags.SkipNextRParen));
+ break;
+ }
+ this.checkCurrentToken(TypeScript.TokenID.CloseParen, errorRecoverySet);
+ ast.isParenthesized = true;
+ }
+ break;
+
+ }
+ case TypeScript.TokenID.NumberLiteral: {
+ var numTok = this.currentToken;
+ this.currentToken = this.scanner.scan();
+ ast = new TypeScript.NumberLiteral(numTok.value, numTok.hasEmptyFraction);
+ ast.minChar = minChar;
+ limChar = this.scanner.lastTokenLimChar();
+ break;
+ }
+
+ case TypeScript.TokenID.StringLiteral: {
+ ast = new TypeScript.StringLiteral(this.currentToken.getText());
+ this.currentToken = this.scanner.scan();
+ ast.minChar = minChar;
+ limChar = this.scanner.lastTokenLimChar();
+ break;
+
+ }
+ case TypeScript.TokenID.RegularExpressionLiteral: {
+ var rtok = this.currentToken;
+ ast = new TypeScript.RegexLiteral(rtok.regex);
+ this.currentToken = this.scanner.scan();
+ ast.minChar = minChar;
+ limChar = this.scanner.lastTokenLimChar();
+ break;
+ }
+
+ case TypeScript.TokenID.OpenBracket: {
+ minChar = this.scanner.startPos;
+ this.currentToken = this.scanner.scan();
+ ast = this.parseArrayLiteral(TypeScript.ErrorRecoverySet.RBrack | errorRecoverySet);
+ ast.minChar = minChar;
+ limChar = this.scanner.pos;
+ this.checkCurrentToken(TypeScript.TokenID.CloseBracket, errorRecoverySet);
+ break;
+
+ }
+ case TypeScript.TokenID.OpenBrace: {
+ minChar = this.scanner.startPos;
+ this.currentToken = this.scanner.scan();
+ var members = this.parseMemberList(TypeScript.ErrorRecoverySet.RCurly | errorRecoverySet);
+ this.checkCurrentToken(TypeScript.TokenID.CloseBrace, errorRecoverySet);
+ ast = new TypeScript.UnaryExpression(TypeScript.NodeType.ObjectLit, members);
+ ast.minChar = minChar;
+ limChar = this.scanner.lastTokenLimChar();
+ members.minChar = minChar;
+ members.limChar = limChar;
+ break;
+
+ }
+ case TypeScript.TokenID.LessThan: {
+ minChar = this.scanner.startPos;
+ this.currentToken = this.scanner.scan();
+ var term = this.parseTypeReference(TypeScript.ErrorRecoverySet.BinOp, false);
+ this.checkCurrentToken(TypeScript.TokenID.GreaterThan, errorRecoverySet);
+ ast = new TypeScript.UnaryExpression(TypeScript.NodeType.TypeAssertion, this.parseExpr(errorRecoverySet, TypeScript.OperatorPrecedence.Unary, false, TypeContext.NoTypes));
+ (ast).castTerm = term;
+ break;
+
+ }
+ default: {
+ if(this.prevExpr && TypeScript.hasFlag(this.prevExpr.flags, TypeScript.ASTFlags.PossibleOptionalParameter)) {
+ parseAsLambda = true;
+ ast = this.prevExpr;
+ } else {
+ this.reportParseError("Check format of expression term");
+ if(this.errorRecovery) {
+ var ident = new TypeScript.MissingIdentifier();
+ ident.minChar = minChar;
+ ident.flags |= TypeScript.ASTFlags.Error;
+ this.skip(errorRecoverySet | TypeScript.ErrorRecoverySet.Postfix);
+ if((this.currentToken.tokenId == TypeScript.TokenID.Identifier) || TypeScript.convertTokToID(this.currentToken, this.strictMode)) {
+ ident.setText(this.currentToken.getText(), (this.currentToken).hasEscapeSequence);
+ this.currentToken = this.scanner.scan();
+ limChar = this.scanner.lastTokenLimChar();
+ } else {
+ limChar = this.scanner.lastTokenLimChar();
+ }
+ ast = ident;
+ }
+ }
+
+ }
+ }
+ }
+ if(parseAsLambda) {
+ if(this.currentToken.tokenId == TypeScript.TokenID.Colon || this.currentToken.tokenId == TypeScript.TokenID.Comma || this.currentToken.tokenId == TypeScript.TokenID.CloseParen || this.currentToken.tokenId == TypeScript.TokenID.DotDotDot) {
+ ast = this.parseLambdaExpr(errorRecoverySet, ast, true, expectlambdaRParen);
+ ast.minChar = minChar;
+ limChar = this.scanner.lastTokenLimChar();
+ ast.limChar = limChar;
+ } else {
+ if(ast) {
+ ast.isParenthesized = true;
+ }
+ }
+ }
+ if(sawId && (typeContext != TypeContext.NoTypes)) {
+ typeContext |= TypeContext.ArraySuffix;
+ }
+ var postFix = this.parsePostfixOperators(errorRecoverySet, ast, allowCall, inNew, typeContext, minChar, limChar);
+ if(postFix) {
+ if(sawId && (postFix.nodeType == TypeScript.NodeType.Index)) {
+ var binExpr = postFix;
+ if(binExpr.operand2 == null) {
+ postFix = this.convertToTypeReference(postFix);
+ }
+ }
+ postFix.minChar = minChar;
+ postFix.limChar = TypeScript.max(postFix.limChar, this.scanner.lastTokenLimChar());
+ return postFix;
+ } else {
+ return new TypeScript.AST(TypeScript.NodeType.Error);
+ }
+ };
+ Parser.prototype.parseLambdaExpr = function (errorRecoverySet, lambdaArgs, skipNextRParen, expectClosingRParen) {
+ var ast = this.parseFncDecl(errorRecoverySet, false, false, false, null, false, false, false, TypeScript.Modifiers.None, {
+ preProcessedLambdaArgs: lambdaArgs
+ }, expectClosingRParen);
+ (ast).fncFlags |= TypeScript.FncFlags.IsFunctionExpression;
+ (ast).fncFlags |= TypeScript.FncFlags.IsFatArrowFunction;
+ if(!skipNextRParen) {
+ ast.flags |= TypeScript.ASTFlags.SkipNextRParen;
+ }
+ ast.limChar = this.scanner.lastTokenLimChar();
+ ; ;
+ return ast;
+ };
+ Parser.prototype.parseExpr = function (errorRecoverySet, minPrecedence, allowIn, typeContext, possiblyInLambda) {
+ if (typeof possiblyInLambda === "undefined") { possiblyInLambda = false; }
+ var ast = null;
+ var tokenInfo = TypeScript.lookupToken(this.currentToken.tokenId);
+ var canAssign = true;
+ var idHint = null;
+ var minChar = this.scanner.startPos;
+ var preComments = this.parseComments();
+ var exprIsAnonLambda = false;
+ if((tokenInfo != undefined) && (tokenInfo.unopNodeType != TypeScript.NodeType.None)) {
+ canAssign = false;
+ this.currentToken = this.scanner.scan();
+ var tempExpr = this.parseExpr(TypeScript.ErrorRecoverySet.BinOp | errorRecoverySet, tokenInfo.unopPrecedence, allowIn, TypeContext.NoTypes);
+ if((tokenInfo.unopNodeType == TypeScript.NodeType.Pos) && (tempExpr.nodeType == TypeScript.NodeType.NumberLit)) {
+ ast = tempExpr;
+ } else {
+ if((tokenInfo.unopNodeType == TypeScript.NodeType.Neg) && (tempExpr.nodeType == TypeScript.NodeType.NumberLit)) {
+ var numLit = tempExpr;
+ numLit.value = (-numLit.value);
+ if(numLit.value == 0) {
+ numLit.isNegativeZero = true;
+ }
+ ast = tempExpr;
+ } else {
+ ast = new TypeScript.UnaryExpression(tokenInfo.unopNodeType, tempExpr);
+ ast.limChar = tempExpr.limChar;
+ }
+ }
+ ast.minChar = minChar;
+ } else {
+ ast = this.parseTerm(TypeScript.ErrorRecoverySet.BinOp | TypeScript.ErrorRecoverySet.AddOp | errorRecoverySet, true, typeContext, false);
+ var id;
+ var temp;
+ if(ast.nodeType == TypeScript.NodeType.Name) {
+ id = ast;
+ idHint = id.actualText;
+ } else {
+ if(ast.nodeType == TypeScript.NodeType.Dot) {
+ var subsumedExpr = false;
+ if(this.inferPropertiesFromThisAssignment && (this.currentToken.tokenId == TypeScript.TokenID.Colon || this.currentToken.tokenId == TypeScript.TokenID.Equals) && this.parsingClassConstructorDefinition && this.nestingLevel == this.currentClassDefinition.constructorNestingLevel && (ast).operand1.nodeType == TypeScript.NodeType.This) {
+ if((ast).operand2.nodeType == TypeScript.NodeType.Name) {
+ var op2ID = ((ast).operand2);
+ if(!this.currentClassDefinition.knownMemberNames[op2ID.actualText]) {
+ ast = this.parseClassMemberVariableDeclaration(op2ID, ast.minChar, true, errorRecoverySet, TypeScript.Modifiers.Public);
+ subsumedExpr = true;
+ }
+ }
+ }
+ if(!subsumedExpr) {
+ temp = ast;
+ while(temp.nodeType == TypeScript.NodeType.Dot) {
+ var binExpr = temp;
+ temp = binExpr.operand2;
+ }
+ if(temp.nodeType == TypeScript.NodeType.Name) {
+ id = temp;
+ idHint = id.actualText;
+ }
+ }
+ }
+ }
+ if((!this.scanner.lastTokenHadNewline()) && ((this.currentToken.tokenId == TypeScript.TokenID.PlusPlus) || (this.currentToken.tokenId == TypeScript.TokenID.MinusMinus))) {
+ canAssign = false;
+ var operand = ast;
+ ast = new TypeScript.UnaryExpression((this.currentToken.tokenId == TypeScript.TokenID.PlusPlus) ? TypeScript.NodeType.IncPost : TypeScript.NodeType.DecPost, operand);
+ ast.limChar = this.scanner.pos;
+ ast.minChar = operand.minChar;
+ this.currentToken = this.scanner.scan();
+ }
+ }
+ for(; ; ) {
+ tokenInfo = TypeScript.lookupToken(this.currentToken.tokenId);
+ if((tokenInfo == undefined) || (tokenInfo.binopNodeType == TypeScript.NodeType.None)) {
+ break;
+ }
+ if((!allowIn) && (tokenInfo.binopNodeType == TypeScript.NodeType.In)) {
+ break;
+ }
+ if(tokenInfo.binopPrecedence == TypeScript.OperatorPrecedence.Assignment) {
+ if(tokenInfo.binopPrecedence < minPrecedence) {
+ break;
+ }
+ if(!canAssign) {
+ this.reportParseError("illegal assignment");
+ }
+ } else {
+ if(tokenInfo.binopPrecedence <= minPrecedence) {
+ break;
+ }
+ }
+ if(possiblyInLambda && this.currentToken.tokenId == TypeScript.TokenID.Comma && this.scanner.getLookAheadToken().tokenId == TypeScript.TokenID.DotDotDot) {
+ exprIsAnonLambda = true;
+ canAssign = false;
+ ast = this.parseLambdaExpr(errorRecoverySet, ast, false, true);
+ break;
+ }
+ this.currentToken = this.scanner.scan();
+ canAssign = false;
+ if(tokenInfo.binopNodeType == TypeScript.NodeType.ConditionalExpression) {
+ if(possiblyInLambda && (this.currentToken.tokenId == TypeScript.TokenID.Equals || this.currentToken.tokenId == TypeScript.TokenID.Colon || this.currentToken.tokenId == TypeScript.TokenID.CloseParen || this.currentToken.tokenId == TypeScript.TokenID.Comma)) {
+ exprIsAnonLambda = true;
+ canAssign = true;
+ } else {
+ this.prevExpr = ast;
+ var whenTrue = this.parseExpr(errorRecoverySet | TypeScript.ErrorRecoverySet.Colon, TypeScript.OperatorPrecedence.Assignment, allowIn, TypeContext.NoTypes);
+ this.prevExpr = null;
+ this.checkCurrentToken(TypeScript.TokenID.Colon, errorRecoverySet | TypeScript.ErrorRecoverySet.ExprStart);
+ var whenFalse = this.parseExpr(errorRecoverySet | TypeScript.ErrorRecoverySet.BinOp, TypeScript.OperatorPrecedence.Assignment, allowIn, TypeContext.NoTypes);
+ ast = new TypeScript.ConditionalExpression(ast, whenTrue, whenFalse);
+ }
+ } else {
+ var tc = TypeContext.NoTypes;
+ var binExpr2;
+ binExpr2 = new TypeScript.BinaryExpression(tokenInfo.binopNodeType, ast, this.parseExpr(errorRecoverySet | TypeScript.ErrorRecoverySet.BinOp, tokenInfo.binopPrecedence, allowIn, TypeContext.NoTypes, possiblyInLambda));
+ if(binExpr2.operand2.nodeType == TypeScript.NodeType.FuncDecl) {
+ var funcDecl = binExpr2.operand2;
+ funcDecl.hint = idHint;
+ }
+ binExpr2.minChar = ast.minChar;
+ binExpr2.limChar = this.scanner.lastTokenLimChar();
+ idHint = null;
+ ast = binExpr2;
+ }
+ }
+ if(canAssign) {
+ ast.flags |= TypeScript.ASTFlags.Writeable;
+ }
+ if(!exprIsAnonLambda) {
+ ast.minChar = minChar;
+ ast.limChar = TypeScript.max(ast.limChar, this.scanner.lastTokenLimChar());
+ ast.preComments = preComments;
+ ast.postComments = this.parseCommentsForLine(this.scanner.line);
+ }
+ return ast;
+ };
+ Parser.prototype.parsePostfixOperators = function (errorRecoverySet, ast, allowCall, inNew, typeContext, lhsMinChar, lhsLimChar) {
+ var count = 0;
+ if(!ast) {
+ ast = new TypeScript.AST(TypeScript.NodeType.EmptyExpr);
+ ast.isParenthesized = true;
+ }
+ ast.minChar = lhsMinChar;
+ ast.limChar = lhsLimChar;
+ for(; ; ) {
+ switch(this.currentToken.tokenId) {
+ case TypeScript.TokenID.OpenParen: {
+ if(inNew) {
+ var callExpr = ast;
+ callExpr.arguments = this.parseArgList(errorRecoverySet);
+ inNew = false;
+ } else {
+ if(!allowCall) {
+ return ast;
+ }
+ ast = new TypeScript.CallExpression(TypeScript.NodeType.Call, ast, this.parseArgList(errorRecoverySet));
+ ast.minChar = lhsMinChar;
+ }
+ ast.limChar = this.scanner.pos;
+ this.checkCurrentToken(TypeScript.TokenID.CloseParen, errorRecoverySet);
+ break;
+
+ }
+ case TypeScript.TokenID.OpenBracket: {
+ this.currentToken = this.scanner.scan();
+ if(this.currentToken.tokenId == TypeScript.TokenID.CloseBracket) {
+ if(TypeScript.hasFlag(typeContext, TypeContext.ArraySuffix)) {
+ this.currentToken = this.scanner.scan();
+ if(ast.nodeType == TypeScript.NodeType.TypeRef) {
+ var typeRef = ast;
+ typeRef.arrayCount++;
+ } else {
+ ast = new TypeScript.BinaryExpression(TypeScript.NodeType.Index, ast, null);
+ }
+ ast.limChar = this.scanner.pos;
+ break;
+ }
+ }
+ ast = new TypeScript.BinaryExpression(TypeScript.NodeType.Index, ast, this.parseExpr(errorRecoverySet | TypeScript.ErrorRecoverySet.RBrack, TypeScript.OperatorPrecedence.None, true, TypeContext.NoTypes));
+ ast.minChar = lhsMinChar;
+ ast.limChar = this.scanner.pos;
+ this.checkCurrentToken(TypeScript.TokenID.CloseBracket, errorRecoverySet);
+ break;
+
+ }
+ case TypeScript.TokenID.Dot: {
+ var name = null;
+ var curpos = this.scanner.pos;
+ this.currentToken = this.scanner.scan();
+ if (this.currentToken === undefined) {
+ this.currentToken = this.scanner.scan();
+ continue;
+ }
+ if((this.currentToken.tokenId == TypeScript.TokenID.Identifier) || ((!this.errorRecovery || !this.scanner.lastTokenHadNewline()) && TypeScript.convertTokToIDName(this.currentToken))) {
+ ast.flags |= TypeScript.ASTFlags.DotLHS;
+ name = this.createRef(this.currentToken.getText(), (this.currentToken).hasEscapeSequence, this.scanner.startPos);
+ name.limChar = this.scanner.pos;
+ this.currentToken = this.scanner.scan();
+ } else {
+ this.reportParseError("Expected identifier following dot");
+ if(this.errorRecovery) {
+ this.skip(errorRecoverySet);
+ ast.flags |= (TypeScript.ASTFlags.Error | TypeScript.ASTFlags.DotLHS);
+ return ast;
+ } else {
+ name = new TypeScript.MissingIdentifier();
+ }
+ }
+ ast = new TypeScript.BinaryExpression(TypeScript.NodeType.Dot, ast, name);
+ ast.minChar = lhsMinChar;
+ ast.limChar = this.scanner.lastTokenLimChar();
+ break;
+ }
+
+ case TypeScript.TokenID.EqualsGreaterThan: {
+ ast = this.parseFncDecl(errorRecoverySet, false, false, false, null, false, false, false, TypeScript.Modifiers.None, {
+ preProcessedLambdaArgs: ast
+ }, false);
+ (ast).fncFlags |= TypeScript.FncFlags.IsFunctionExpression;
+ ast.minChar = lhsMinChar;
+ ast.limChar = this.scanner.lastTokenLimChar();
+ break;
+
+ }
+ default: {
+ return ast;
+
+ }
+ }
+ }
+ };
+ Parser.prototype.parseTry = function (tryNode, errorRecoverySet, parentModifiers) {
+ var minChar = this.scanner.startPos;
+ var preComments = this.parseComments();
+ this.currentToken = this.scanner.scan();
+ if(this.currentToken.tokenId != TypeScript.TokenID.OpenBrace) {
+ this.reportParseError("Expected '{'");
+ if(this.errorRecovery) {
+ var etryNode = tryNode;
+ etryNode.minChar = minChar;
+ etryNode.limChar = this.scanner.lastTokenLimChar();
+ etryNode.flags |= TypeScript.ASTFlags.Error;
+ return etryNode;
+ }
+ }
+ tryNode.body = this.parseStatement(errorRecoverySet, TypeScript.AllowedElements.None, parentModifiers);
+ tryNode.minChar = minChar;
+ tryNode.limChar = tryNode.body.limChar;
+ tryNode.preComments = preComments;
+ tryNode.postComments = this.parseComments();
+ return tryNode;
+ };
+ Parser.prototype.parseCatch = function (errorRecoverySet, parentModifiers) {
+ var catchMinChar = this.scanner.startPos;
+ var preComments = this.parseComments();
+ this.currentToken = this.scanner.scan();
+ this.checkCurrentToken(TypeScript.TokenID.OpenParen, errorRecoverySet | TypeScript.ErrorRecoverySet.ExprStart);
+ if((this.currentToken.tokenId != TypeScript.TokenID.Identifier) || TypeScript.convertTokToID(this.currentToken, this.strictMode)) {
+ this.reportParseError("Expected identifier in catch header");
+ if(this.errorRecovery) {
+ this.skip(errorRecoverySet);
+ var ecatch = new TypeScript.Catch(new TypeScript.VarDecl(new TypeScript.MissingIdentifier(), this.nestingLevel), new TypeScript.Statement(TypeScript.NodeType.Empty));
+ ecatch.statement.minChar = catchMinChar;
+ ecatch.statement.limChar = this.scanner.pos;
+ ecatch.minChar = this.scanner.startPos;
+ ecatch.limChar = this.scanner.pos;
+ ecatch.flags |= TypeScript.ASTFlags.Error;
+ return ecatch;
+ }
+ }
+ var param = new TypeScript.VarDecl(TypeScript.Identifier.fromToken(this.currentToken), this.nestingLevel);
+ param.id.minChar = this.scanner.startPos;
+ param.id.limChar = this.scanner.pos;
+ param.minChar = param.id.minChar;
+ param.limChar = param.id.limChar;
+ this.currentToken = this.scanner.scan();
+ var statementPos = this.scanner.pos;
+ this.checkCurrentToken(TypeScript.TokenID.CloseParen, errorRecoverySet | TypeScript.ErrorRecoverySet.StmtStart);
+ if(this.currentToken.tokenId != TypeScript.TokenID.OpenBrace) {
+ this.reportParseError("Expected '{' to start catch body");
+ if(this.errorRecovery) {
+ this.skip(errorRecoverySet);
+ var ecatch = new TypeScript.Catch(new TypeScript.VarDecl(new TypeScript.MissingIdentifier(), this.nestingLevel), new TypeScript.Statement(TypeScript.NodeType.Empty));
+ ecatch.statement.minChar = catchMinChar;
+ ecatch.statement.limChar = statementPos;
+ ecatch.minChar = this.scanner.startPos;
+ ecatch.limChar = this.scanner.pos;
+ ecatch.flags |= TypeScript.ASTFlags.Error;
+ return ecatch;
+ }
+ }
+ var catchStmt = this.parseStatement(errorRecoverySet, TypeScript.AllowedElements.None, parentModifiers);
+ var catchNode = new TypeScript.Catch(param, catchStmt);
+ catchNode.statement.minChar = catchMinChar;
+ catchNode.statement.limChar = statementPos;
+ catchNode.minChar = catchMinChar;
+ catchNode.limChar = catchStmt.limChar;
+ catchNode.preComments = preComments;
+ catchNode.postComments = this.parseComments();
+ return catchNode;
+ };
+ Parser.prototype.parseFinally = function (errorRecoverySet, parentModifiers) {
+ var finMinChar = this.scanner.startPos;
+ var preComments = this.parseComments();
+ this.currentToken = this.scanner.scan();
+ if(this.currentToken.tokenId != TypeScript.TokenID.OpenBrace) {
+ this.reportParseError("Expected '{' to start body of finally statement");
+ if(this.errorRecovery) {
+ this.skip(errorRecoverySet);
+ var efin = new TypeScript.Finally(new TypeScript.Statement(TypeScript.NodeType.Empty));
+ efin.flags |= TypeScript.ASTFlags.Error;
+ efin.minChar = this.scanner.startPos;
+ efin.limChar = this.scanner.pos;
+ return efin;
+ }
+ }
+ var finBody = this.parseStatement(errorRecoverySet, TypeScript.AllowedElements.None, parentModifiers);
+ var fin = new TypeScript.Finally(finBody);
+ fin.minChar = finMinChar;
+ fin.limChar = fin.body.limChar;
+ fin.preComments = preComments;
+ fin.postComments = this.parseComments();
+ return fin;
+ };
+ Parser.prototype.parseTryCatchFinally = function (errorRecoverySet, parentModifiers, labelList) {
+ var tryPart = new TypeScript.Try(null);
+ var tryMinChar = this.scanner.startPos;
+ this.pushStmt(tryPart, labelList);
+ this.parseTry(tryPart, errorRecoverySet | TypeScript.ErrorRecoverySet.Catch, parentModifiers);
+ this.popStmt();
+ var tc = null;
+ var tf = null;
+ if(this.currentToken.tokenId == TypeScript.TokenID.Catch) {
+ var catchPart = this.parseCatch(errorRecoverySet | TypeScript.ErrorRecoverySet.Catch, parentModifiers);
+ tc = new TypeScript.TryCatch(tryPart, catchPart);
+ tc.minChar = tryPart.minChar;
+ tc.limChar = catchPart.limChar;
+ }
+ if(this.currentToken.tokenId != TypeScript.TokenID.Finally) {
+ if(tc == null) {
+ this.reportParseError("try with neither catch nor finally");
+ if(this.errorRecovery) {
+ var etf = new TypeScript.TryFinally(tryPart, new TypeScript.Finally(new TypeScript.AST(TypeScript.NodeType.Empty)));
+ etf.flags |= TypeScript.ASTFlags.Error;
+ etf.minChar = this.scanner.startPos;
+ etf.limChar = this.scanner.pos;
+ return etf;
+ }
+ return new TypeScript.TryFinally(tryPart, new TypeScript.Finally(new TypeScript.AST(TypeScript.NodeType.Empty)));
+ } else {
+ return tc;
+ }
+ } else {
+ if(tc) {
+ tryPart = tc;
+ }
+ var finallyPart = this.parseFinally(errorRecoverySet, parentModifiers);
+ tf = new TypeScript.TryFinally(tryPart, finallyPart);
+ tf.minChar = tryMinChar;
+ tf.limChar = finallyPart.limChar;
+ return tf;
+ }
+ };
+ Parser.prototype.parseStatement = function (errorRecoverySet, allowedElements, parentModifiers) {
+ var ast = null;
+ var labelList = null;
+ var astList = null;
+ var temp;
+ var modifiers = TypeScript.Modifiers.None;
+ var minChar = this.scanner.startPos;
+ var forInOk = false;
+ var needTerminator = false;
+ var fnOrVar = null;
+ var preComments = this.parseComments();
+ this.state = ParseState.StartStatement;
+ function isAmbient() {
+ return TypeScript.hasFlag(modifiers, TypeScript.Modifiers.Ambient) || TypeScript.hasFlag(parentModifiers, TypeScript.Modifiers.Ambient);
+ }
+ function mayNotBeExported() {
+ if(TypeScript.hasFlag(modifiers, TypeScript.Modifiers.Exported)) {
+ this.reportError("Statement may not be exported");
+ }
+ }
+ for(; ; ) {
+ switch(this.currentToken.tokenId) {
+ case TypeScript.TokenID.EndOfFile: {
+ ast = new TypeScript.AST(TypeScript.NodeType.Error);
+ ast.minChar = minChar;
+ ast.limChar = this.scanner.pos;
+ break;
+
+ }
+ case TypeScript.TokenID.Function: {
+ if(this.parsingDeclareFile || isAmbient() || this.ambientModule) {
+ this.currentToken = this.scanner.scan();
+ fnOrVar = this.parsePropertyDeclaration(errorRecoverySet | TypeScript.ErrorRecoverySet.SColon, modifiers, true, false);
+ if(fnOrVar.nodeType == TypeScript.NodeType.VarDecl) {
+ this.reportParseError("function keyword can only introduce function declaration");
+ } else {
+ if((fnOrVar.nodeType == TypeScript.NodeType.FuncDecl) && ((fnOrVar).fncFlags , TypeScript.FncFlags.IsFatArrowFunction)) {
+ needTerminator = true;
+ }
+ }
+ ast = fnOrVar;
+ if(this.parsingDeclareFile || this.ambientModule && ast.nodeType == TypeScript.NodeType.FuncDecl) {
+ (ast).fncFlags |= TypeScript.FncFlags.Exported;
+ }
+ } else {
+ ast = this.parseFncDecl(errorRecoverySet, true, false, false, null, false, false, isAmbient(), modifiers, null, true);
+ if(TypeScript.hasFlag((ast).fncFlags, TypeScript.FncFlags.IsFatArrowFunction)) {
+ needTerminator = true;
+ }
+ if(this.ambientModule) {
+ this.reportParseError("function declaration not permitted within ambient module");
+ }
+ if(TypeScript.hasFlag(modifiers, TypeScript.Modifiers.Exported)) {
+ (ast).fncFlags |= TypeScript.FncFlags.Exported;
+ }
+ }
+ break;
+
+ }
+ case TypeScript.TokenID.Module: {
+ if((allowedElements & TypeScript.AllowedElements.ModuleDeclarations) == TypeScript.AllowedElements.None) {
+ this.reportParseError("module not allowed in this context");
+ this.currentToken = this.scanner.scan();
+ ast = new TypeScript.AST(TypeScript.NodeType.Error);
+ ast.minChar = minChar;
+ ast.limChar = this.scanner.lastTokenLimChar();
+ } else {
+ ast = this.parseModuleDecl(errorRecoverySet, modifiers, preComments);
+ preComments = null;
+ }
+ break;
+
+ }
+ case TypeScript.TokenID.Import: {
+ if((allowedElements & TypeScript.AllowedElements.ModuleDeclarations) == TypeScript.AllowedElements.None) {
+ this.reportParseError("module not allowed in this context");
+ this.currentToken = this.scanner.scan();
+ ast = new TypeScript.AST(TypeScript.NodeType.Error);
+ ast.minChar = minChar;
+ ast.limChar = this.scanner.lastTokenLimChar();
+ } else {
+ if(TypeScript.hasFlag(modifiers, TypeScript.Modifiers.Exported)) {
+ this.reportParseError("export keyword not permitted on import declaration");
+ }
+ ast = this.parseImportDeclaration(errorRecoverySet, modifiers);
+ needTerminator = true;
+ }
+ break;
+
+ }
+ case TypeScript.TokenID.Export: {
+ if((allowedElements & TypeScript.AllowedElements.ModuleDeclarations) == TypeScript.AllowedElements.None) {
+ this.reportParseError("'export' statements are only allowed at the global and module levels");
+ this.currentToken = this.scanner.scan();
+ ast = new TypeScript.AST(TypeScript.NodeType.Error);
+ ast.minChar = minChar;
+ ast.limChar = this.scanner.lastTokenLimChar();
+ }
+ if(this.topLevel) {
+ this.hasTopLevelImportOrExport = true;
+ }
+ modifiers |= TypeScript.Modifiers.Exported;
+ this.currentToken = this.scanner.scan();
+ break;
+
+ }
+ case TypeScript.TokenID.Private: {
+ modifiers |= TypeScript.Modifiers.Private;
+ this.currentToken = this.scanner.scan();
+ if(this.parsingClassConstructorDefinition) {
+ if(!this.inferPropertiesFromThisAssignment) {
+ this.reportParseError("Property declarations are not permitted within constructor bodies");
+ }
+ minChar = this.scanner.pos;
+ if(this.inferPropertiesFromThisAssignment && (this.currentToken.tokenId != TypeScript.TokenID.This || (this.currentToken = this.scanner.scan()).tokenId != TypeScript.TokenID.Dot)) {
+ this.reportParseError("Expected 'this.' for property declaration");
+ this.currentToken = this.scanner.scan();
+ ast = new TypeScript.AST(TypeScript.NodeType.Error);
+ ast.minChar = minChar;
+ ast.limChar = this.scanner.lastTokenLimChar();
+ } else {
+ this.currentToken = this.scanner.scan();
+ var id = TypeScript.Identifier.fromToken(this.currentToken);
+ id.minChar = this.scanner.startPos;
+ id.limChar = this.scanner.pos;
+ this.currentToken = this.scanner.scan();
+ ast = this.parseClassMemberVariableDeclaration(id, minChar, this.parsingClassConstructorDefinition, errorRecoverySet, modifiers);
+ }
+ } else {
+ if(this.currentToken.tokenId != TypeScript.TokenID.Interface) {
+ if(this.currentToken.tokenId == TypeScript.TokenID.Get) {
+ this.prevIDTok = this.currentToken;
+ this.currentToken = this.scanner.scan();
+ if(TypeScript.codeGenTarget < TypeScript.CodeGenTarget.ES5) {
+ this.reportParseError("Property accessors are only available when targeting ES5 or greater");
+ }
+ if((this.currentToken.tokenId == TypeScript.TokenID.Identifier) || TypeScript.convertTokToID(this.currentToken, this.strictMode)) {
+ modifiers |= TypeScript.Modifiers.Getter;
+ this.prevIDTok = null;
+ }
+ } else {
+ if(this.currentToken.tokenId == TypeScript.TokenID.Set) {
+ this.prevIDTok = this.currentToken;
+ this.currentToken = this.scanner.scan();
+ if(TypeScript.codeGenTarget < TypeScript.CodeGenTarget.ES5) {
+ this.reportParseError("Property accessors are only available when targeting ES5 or greater");
+ }
+ if((this.currentToken.tokenId == TypeScript.TokenID.Identifier) || TypeScript.convertTokToID(this.currentToken, this.strictMode)) {
+ modifiers |= TypeScript.Modifiers.Setter;
+ this.prevIDTok = null;
+ }
+ }
+ }
+ fnOrVar = this.parsePropertyDeclaration(errorRecoverySet | TypeScript.ErrorRecoverySet.SColon, modifiers, isAmbient(), false);
+ if((fnOrVar.nodeType == TypeScript.NodeType.VarDecl) || ((fnOrVar.nodeType == TypeScript.NodeType.FuncDecl) && (TypeScript.hasFlag((fnOrVar).fncFlags, TypeScript.FncFlags.IsFatArrowFunction)))) {
+ needTerminator = true;
+ }
+ ast = fnOrVar;
+ }
+ }
+ break;
+
+ }
+ case TypeScript.TokenID.Public: {
+ if(this.parsingClassConstructorDefinition) {
+ if(!this.inferPropertiesFromThisAssignment) {
+ this.reportParseError("Property declarations are not permitted within constructor bodies");
+ }
+ this.currentToken = this.scanner.scan();
+ minChar = this.scanner.pos;
+ modifiers |= TypeScript.Modifiers.Public;
+ if(this.inferPropertiesFromThisAssignment && (this.currentToken.tokenId != TypeScript.TokenID.This || (this.currentToken = this.scanner.scan()).tokenId != TypeScript.TokenID.Dot)) {
+ this.reportParseError("Expected 'this.' for property declaration");
+ this.currentToken = this.scanner.scan();
+ ast = new TypeScript.AST(TypeScript.NodeType.Error);
+ ast.minChar = minChar;
+ ast.limChar = this.scanner.lastTokenLimChar();
+ } else {
+ this.currentToken = this.scanner.scan();
+ var id = TypeScript.Identifier.fromToken(this.currentToken);
+ id.minChar = this.scanner.startPos;
+ id.limChar = this.scanner.pos;
+ this.currentToken = this.scanner.scan();
+ ast = this.parseClassMemberVariableDeclaration(id, minChar, this.parsingClassConstructorDefinition, errorRecoverySet, modifiers);
+ }
+ } else {
+ if((allowedElements & TypeScript.AllowedElements.Properties) == TypeScript.AllowedElements.None) {
+ this.reportParseError("'property' statements are only allowed within classes");
+ this.currentToken = this.scanner.scan();
+ ast = new TypeScript.AST(TypeScript.NodeType.Error);
+ ast.minChar = minChar;
+ ast.limChar = this.scanner.lastTokenLimChar();
+ } else {
+ modifiers |= TypeScript.Modifiers.Public;
+ this.currentToken = this.scanner.scan();
+ if(this.currentToken.tokenId == TypeScript.TokenID.Get) {
+ this.prevIDTok = this.currentToken;
+ this.currentToken = this.scanner.scan();
+ if(TypeScript.codeGenTarget < TypeScript.CodeGenTarget.ES5) {
+ this.reportParseError("Property accessors are only available when targeting ES5 or greater");
+ }
+ if((this.currentToken.tokenId == TypeScript.TokenID.Identifier) || TypeScript.convertTokToID(this.currentToken, this.strictMode)) {
+ modifiers |= TypeScript.Modifiers.Getter;
+ this.prevIDTok = null;
+ }
+ } else {
+ if(this.currentToken.tokenId == TypeScript.TokenID.Set) {
+ this.prevIDTok = this.currentToken;
+ this.currentToken = this.scanner.scan();
+ if(TypeScript.codeGenTarget < TypeScript.CodeGenTarget.ES5) {
+ this.reportParseError("Property accessors are only available when targeting ES5 or greater");
+ }
+ if((this.currentToken.tokenId == TypeScript.TokenID.Identifier) || TypeScript.convertTokToID(this.currentToken, this.strictMode)) {
+ modifiers |= TypeScript.Modifiers.Setter;
+ this.prevIDTok = null;
+ }
+ }
+ }
+ fnOrVar = this.parsePropertyDeclaration(errorRecoverySet | TypeScript.ErrorRecoverySet.SColon, modifiers, isAmbient(), false);
+ if((fnOrVar.nodeType == TypeScript.NodeType.VarDecl) || ((fnOrVar.nodeType == TypeScript.NodeType.FuncDecl) && TypeScript.hasFlag((fnOrVar).fncFlags, TypeScript.FncFlags.IsFatArrowFunction))) {
+ needTerminator = true;
+ }
+ ast = fnOrVar;
+ }
+ }
+ break;
+
+ }
+ case TypeScript.TokenID.Declare: {
+ if(!(allowedElements & TypeScript.AllowedElements.AmbientDeclarations)) {
+ this.reportParseError("Ambient declarations are only allowed at the top-level or module scopes");
+ }
+ if(!this.parsingDeclareFile && TypeScript.hasFlag(parentModifiers, TypeScript.Modifiers.Ambient)) {
+ this.reportParseError("Duplicate ambient declaration in this context. (Is the enclosing module or class already ambient?)");
+ }
+ modifiers |= TypeScript.Modifiers.Ambient;
+ this.currentToken = this.scanner.scan();
+ break;
+
+ }
+ case TypeScript.TokenID.Class: {
+ if((allowedElements & TypeScript.AllowedElements.ClassDeclarations) == TypeScript.AllowedElements.None) {
+ this.reportParseError("class not allowed in this context");
+ this.currentToken = this.scanner.scan();
+ ast = new TypeScript.AST(TypeScript.NodeType.Error);
+ ast.minChar = minChar;
+ ast.limChar = this.scanner.lastTokenLimChar();
+ } else {
+ ast = this.parseClassDecl(errorRecoverySet, minChar, modifiers);
+ }
+ break;
+
+ }
+ case TypeScript.TokenID.Interface: {
+ if((allowedElements & TypeScript.AllowedElements.InterfaceDeclarations) == TypeScript.AllowedElements.None) {
+ this.reportParseError("interface not allowed in this context");
+ this.currentToken = this.scanner.scan();
+ ast = new TypeScript.AST(TypeScript.NodeType.Error);
+ ast.minChar = minChar;
+ ast.limChar = this.scanner.lastTokenLimChar();
+ } else {
+ ast = this.parseInterfaceDecl(errorRecoverySet, modifiers);
+ }
+ break;
+
+ }
+ case TypeScript.TokenID.Var: {
+ var declAst = this.parseVariableDeclaration(errorRecoverySet | TypeScript.ErrorRecoverySet.StmtStart, modifiers, true, false);
+ if(declAst.nodeType == TypeScript.NodeType.VarDecl) {
+ ast = declAst;
+ } else {
+ ast = new TypeScript.Block(declAst, false);
+ }
+ needTerminator = true;
+ break;
+
+ }
+ case TypeScript.TokenID.Static: {
+ if(this.currentClassDecl == null) {
+ this.reportParseError("Statics may only be class members");
+ }
+ mayNotBeExported();
+ modifiers |= TypeScript.Modifiers.Public;
+ this.currentToken = this.scanner.scan();
+ if(this.currentToken.tokenId == TypeScript.TokenID.Get) {
+ this.prevIDTok = this.currentToken;
+ this.currentToken = this.scanner.scan();
+ if(TypeScript.codeGenTarget < TypeScript.CodeGenTarget.ES5) {
+ this.reportParseError("Property accessors are only available when targeting ES5 or greater");
+ }
+ if((this.currentToken.tokenId == TypeScript.TokenID.Identifier) || TypeScript.convertTokToID(this.currentToken, this.strictMode)) {
+ modifiers |= TypeScript.Modifiers.Getter;
+ this.prevIDTok = null;
+ }
+ } else {
+ if(this.currentToken.tokenId == TypeScript.TokenID.Set) {
+ this.currentToken = this.scanner.scan();
+ if(TypeScript.codeGenTarget < TypeScript.CodeGenTarget.ES5) {
+ this.reportParseError("Property accessors are only available when targeting ES5 or greater");
+ }
+ if((this.currentToken.tokenId == TypeScript.TokenID.Identifier) || TypeScript.convertTokToID(this.currentToken, this.strictMode)) {
+ modifiers |= TypeScript.Modifiers.Setter;
+ }
+ }
+ }
+ if(isAmbient()) {
+ modifiers |= TypeScript.Modifiers.Ambient;
+ }
+ fnOrVar = this.parsePropertyDeclaration(errorRecoverySet | TypeScript.ErrorRecoverySet.SColon, modifiers, this.parsingDeclareFile || (modifiers & TypeScript.Modifiers.Ambient) != TypeScript.Modifiers.None, true);
+ var staticsList = this.topStaticsList();
+ if(staticsList && fnOrVar.nodeType == TypeScript.NodeType.VarDecl) {
+ staticsList.append(fnOrVar);
+ }
+ if(fnOrVar.nodeType == TypeScript.NodeType.VarDecl || ((fnOrVar.nodeType == TypeScript.NodeType.FuncDecl) && TypeScript.hasFlag((fnOrVar).fncFlags, TypeScript.FncFlags.IsFatArrowFunction))) {
+ needTerminator = true;
+ }
+ ast = fnOrVar;
+ break;
+
+ }
+ case TypeScript.TokenID.For: {
+ mayNotBeExported();
+ if(modifiers != TypeScript.Modifiers.None) {
+ this.reportParseError("syntax error: for statement does not take modifiers");
+ }
+ minChar = this.scanner.startPos;
+ this.checkNextToken(TypeScript.TokenID.OpenParen, errorRecoverySet | TypeScript.ErrorRecoverySet.ExprStart | TypeScript.ErrorRecoverySet.Var);
+ this.state = ParseState.ForInit;
+ forInOk = true;
+ switch(this.currentToken.tokenId) {
+ case TypeScript.TokenID.Var: {
+ temp = this.parseVariableDeclaration(errorRecoverySet | TypeScript.ErrorRecoverySet.SColon | TypeScript.ErrorRecoverySet.In, TypeScript.Modifiers.None, false, false);
+ break;
+
+ }
+ case TypeScript.TokenID.Semicolon: {
+ temp = null;
+ this.state = ParseState.ForCondStart;
+ break;
+
+ }
+ default: {
+ temp = this.parseExpr(errorRecoverySet | TypeScript.ErrorRecoverySet.SColon | TypeScript.ErrorRecoverySet.In, TypeScript.OperatorPrecedence.None, false, TypeContext.NoTypes);
+ break;
+
+ }
+ }
+ this.state = ParseState.ForInitAfterVar;
+ if(this.currentToken.tokenId == TypeScript.TokenID.In) {
+ if((temp == null) || (!forInOk)) {
+ this.reportParseError("malformed for statement");
+ if(this.errorRecovery) {
+ this.skip(errorRecoverySet | TypeScript.ErrorRecoverySet.StmtStart);
+ ast = new TypeScript.AST(TypeScript.NodeType.Empty);
+ ast.flags |= TypeScript.ASTFlags.Error;
+ }
+ } else {
+ this.currentToken = this.scanner.scan();
+ var forInStmt = new TypeScript.ForInStatement(temp, this.parseExpr(TypeScript.ErrorRecoverySet.RParen | errorRecoverySet, TypeScript.OperatorPrecedence.Comma, false, TypeContext.NoTypes));
+ forInStmt.limChar = this.scanner.pos;
+ forInStmt.statement.minChar = minChar;
+ forInStmt.statement.limChar = this.scanner.pos;
+ this.checkCurrentToken(TypeScript.TokenID.CloseParen, TypeScript.ErrorRecoverySet.StmtStart | errorRecoverySet);
+ this.pushStmt(forInStmt, labelList);
+ forInStmt.body = this.parseStatement(errorRecoverySet, allowedElements, parentModifiers);
+ this.popStmt();
+ forInStmt.minChar = minChar;
+ ast = forInStmt;
+ }
+ } else {
+ var forStmt = new TypeScript.ForStatement(temp);
+ forStmt.minChar = minChar;
+ this.checkCurrentToken(TypeScript.TokenID.Semicolon, errorRecoverySet);
+ if(this.currentToken.tokenId == TypeScript.TokenID.Semicolon) {
+ forStmt.cond = null;
+ } else {
+ forStmt.cond = this.parseExpr(errorRecoverySet | TypeScript.ErrorRecoverySet.SColon | TypeScript.ErrorRecoverySet.RParen, TypeScript.OperatorPrecedence.None, true, TypeContext.NoTypes);
+ if(this.currentToken.tokenId != TypeScript.TokenID.Semicolon) {
+ this.skip(errorRecoverySet | TypeScript.ErrorRecoverySet.StmtStart);
+ ast = forStmt;
+ ast.flags |= TypeScript.ASTFlags.Error;
+ }
+ }
+ this.currentToken = this.scanner.scan();
+ if(this.currentToken.tokenId == TypeScript.TokenID.CloseParen) {
+ forStmt.incr = null;
+ } else {
+ forStmt.incr = this.parseExpr(errorRecoverySet | TypeScript.ErrorRecoverySet.SColon | TypeScript.ErrorRecoverySet.RParen, TypeScript.OperatorPrecedence.None, true, TypeContext.NoTypes);
+ }
+ this.checkCurrentToken(TypeScript.TokenID.CloseParen, errorRecoverySet | TypeScript.ErrorRecoverySet.LCurly);
+ this.pushStmt(forStmt, labelList);
+ forStmt.body = this.parseStatement(errorRecoverySet, allowedElements, parentModifiers);
+ this.popStmt();
+ forStmt.limChar = forStmt.body.limChar;
+ ast = forStmt;
+ }
+ break;
+
+ }
+ case TypeScript.TokenID.With: {
+ {
+ if(TypeScript.codeGenTarget < TypeScript.CodeGenTarget.ES5) {
+ this.reportParseError("'with' statements are only available in ES5 codegen mode or better");
+ }
+ if(this.strictMode) {
+ this.reportParseError("'with' statements are not available in strict mode");
+ }
+ mayNotBeExported();
+ if(modifiers != TypeScript.Modifiers.None) {
+ this.reportParseError("'with' statement does not take modifiers");
+ }
+ minChar = this.scanner.startPos;
+ this.checkNextToken(TypeScript.TokenID.OpenParen, errorRecoverySet | TypeScript.ErrorRecoverySet.ExprStart | TypeScript.ErrorRecoverySet.Var);
+ var expr = this.parseExpr(errorRecoverySet | TypeScript.ErrorRecoverySet.Colon, TypeScript.OperatorPrecedence.None, true, TypeContext.NoTypes);
+ this.checkCurrentToken(TypeScript.TokenID.CloseParen, errorRecoverySet | TypeScript.ErrorRecoverySet.LCurly);
+ var withStmt = new TypeScript.WithStatement(expr);
+ withStmt.body = this.parseStatement(errorRecoverySet, allowedElements, parentModifiers);
+ withStmt.minChar = minChar;
+ withStmt.limChar = withStmt.body.limChar;
+ ast = withStmt;
+ }
+ break;
+
+ }
+ case TypeScript.TokenID.Switch: {
+ mayNotBeExported();
+ if(modifiers != TypeScript.Modifiers.None) {
+ this.reportParseError("'switch' statement does not take modifiers");
+ }
+ this.checkNextToken(TypeScript.TokenID.OpenParen, errorRecoverySet | TypeScript.ErrorRecoverySet.ExprStart);
+ var switchStmt = new TypeScript.SwitchStatement(this.parseExpr(errorRecoverySet | TypeScript.ErrorRecoverySet.RParen, TypeScript.OperatorPrecedence.None, true, TypeContext.NoTypes));
+ switchStmt.statement.minChar = minChar;
+ switchStmt.statement.limChar = this.scanner.pos;
+ this.checkCurrentToken(TypeScript.TokenID.CloseParen, errorRecoverySet | TypeScript.ErrorRecoverySet.LCurly);
+ var caseListMinChar = this.scanner.startPos;
+ this.checkCurrentToken(TypeScript.TokenID.OpenBrace, errorRecoverySet | TypeScript.ErrorRecoverySet.SCase);
+ switchStmt.defaultCase = null;
+ switchStmt.caseList = new TypeScript.ASTList();
+ var caseStmt = null;
+ this.pushStmt(switchStmt, labelList);
+ for(; ; ) {
+ if((this.currentToken.tokenId == TypeScript.TokenID.Case) || (this.currentToken.tokenId == TypeScript.TokenID.Default)) {
+ var isDefault = (this.currentToken.tokenId == TypeScript.TokenID.Default);
+ caseStmt = new TypeScript.CaseStatement();
+ caseStmt.minChar = this.scanner.startPos;
+ this.currentToken = this.scanner.scan();
+ if(isDefault) {
+ switchStmt.defaultCase = caseStmt;
+ } else {
+ caseStmt.expr = this.parseExpr(errorRecoverySet | TypeScript.ErrorRecoverySet.Colon, TypeScript.OperatorPrecedence.None, true, TypeContext.NoTypes);
+ }
+ this.checkCurrentToken(TypeScript.TokenID.Colon, errorRecoverySet | TypeScript.ErrorRecoverySet.StmtStart);
+ caseStmt.body = new TypeScript.ASTList();
+ this.parseStatementList(errorRecoverySet | TypeScript.ErrorRecoverySet.RCurly, caseStmt.body, false, true, allowedElements, modifiers);
+ caseStmt.limChar = caseStmt.body.limChar;
+ switchStmt.caseList.append(caseStmt);
+ } else {
+ break;
+ }
+ }
+ switchStmt.caseList.minChar = caseListMinChar;
+ switchStmt.caseList.limChar = this.scanner.pos;
+ switchStmt.limChar = switchStmt.caseList.limChar;
+ this.checkCurrentToken(TypeScript.TokenID.CloseBrace, errorRecoverySet);
+ this.popStmt();
+ ast = switchStmt;
+ break;
+ }
+
+ case TypeScript.TokenID.While: {
+ mayNotBeExported();
+ if(modifiers != TypeScript.Modifiers.None) {
+ this.reportParseError("'while' statement does not take modifiers");
+ }
+ minChar = this.scanner.startPos;
+ this.checkNextToken(TypeScript.TokenID.OpenParen, TypeScript.ErrorRecoverySet.ExprStart | errorRecoverySet);
+ var whileStmt = new TypeScript.WhileStatement(this.parseExpr(errorRecoverySet | TypeScript.ErrorRecoverySet.RParen, TypeScript.OperatorPrecedence.None, true, TypeContext.NoTypes));
+ whileStmt.minChar = minChar;
+ this.checkCurrentToken(TypeScript.TokenID.CloseParen, errorRecoverySet | TypeScript.ErrorRecoverySet.StmtStart);
+ this.pushStmt(whileStmt, labelList);
+ whileStmt.body = this.parseStatement(errorRecoverySet, allowedElements, parentModifiers);
+ whileStmt.limChar = whileStmt.body.limChar;
+ this.popStmt();
+ ast = whileStmt;
+ break;
+ }
+
+ case TypeScript.TokenID.Do: {
+ mayNotBeExported();
+ if(modifiers != TypeScript.Modifiers.None) {
+ this.reportParseError("'do' statement does not take modifiers");
+ }
+ minChar = this.scanner.startPos;
+ this.currentToken = this.scanner.scan();
+ var doStmt = new TypeScript.DoWhileStatement();
+ doStmt.minChar = minChar;
+ this.pushStmt(doStmt, labelList);
+ doStmt.body = this.parseStatement(errorRecoverySet | TypeScript.ErrorRecoverySet.While, allowedElements, parentModifiers);
+ this.popStmt();
+ doStmt.whileAST = new TypeScript.Identifier("while");
+ doStmt.whileAST.minChar = this.scanner.startPos;
+ this.checkCurrentToken(TypeScript.TokenID.While, errorRecoverySet | TypeScript.ErrorRecoverySet.LParen);
+ doStmt.whileAST.limChar = doStmt.whileAST.minChar + 5;
+ this.checkCurrentToken(TypeScript.TokenID.OpenParen, errorRecoverySet | TypeScript.ErrorRecoverySet.ExprStart);
+ doStmt.cond = this.parseExpr(errorRecoverySet | TypeScript.ErrorRecoverySet.RParen, TypeScript.OperatorPrecedence.None, true, TypeContext.NoTypes);
+ doStmt.limChar = this.scanner.pos;
+ this.checkCurrentToken(TypeScript.TokenID.CloseParen, errorRecoverySet);
+ ast = doStmt;
+ if(this.currentToken.tokenId == TypeScript.TokenID.Semicolon) {
+ this.currentToken = this.scanner.scan();
+ }
+ break;
+ }
+
+ case TypeScript.TokenID.If: {
+ mayNotBeExported();
+ if(modifiers != TypeScript.Modifiers.None) {
+ this.reportParseError("if statement does not take modifiers");
+ }
+ minChar = this.scanner.startPos;
+ this.checkNextToken(TypeScript.TokenID.OpenParen, errorRecoverySet | TypeScript.ErrorRecoverySet.ExprStart);
+ var ifStmt = new TypeScript.IfStatement(this.parseExpr(errorRecoverySet | TypeScript.ErrorRecoverySet.LParen, TypeScript.OperatorPrecedence.None, true, TypeContext.NoTypes));
+ ifStmt.minChar = minChar;
+ ifStmt.statement.minChar = minChar;
+ ifStmt.statement.limChar = this.scanner.pos;
+ this.checkCurrentToken(TypeScript.TokenID.CloseParen, errorRecoverySet | TypeScript.ErrorRecoverySet.StmtStart);
+ this.pushStmt(ifStmt, labelList);
+ ifStmt.thenBod = this.parseStatement(TypeScript.ErrorRecoverySet.Else | errorRecoverySet, allowedElements, parentModifiers);
+ ifStmt.limChar = ifStmt.thenBod.limChar;
+ if(this.currentToken.tokenId == TypeScript.TokenID.Else) {
+ this.currentToken = this.scanner.scan();
+ ifStmt.elseBod = this.parseStatement(errorRecoverySet, allowedElements, parentModifiers);
+ ifStmt.limChar = ifStmt.elseBod.limChar;
+ }
+ this.popStmt();
+ ast = ifStmt;
+ break;
+ }
+
+ case TypeScript.TokenID.Try: {
+ mayNotBeExported();
+ if(modifiers != TypeScript.Modifiers.None) {
+ this.reportParseError("try statement does not take modifiers");
+ }
+ minChar = this.scanner.startPos;
+ ast = this.parseTryCatchFinally(errorRecoverySet, parentModifiers, labelList);
+ break;
+ }
+
+ case TypeScript.TokenID.OpenBrace: {
+ mayNotBeExported();
+ if(modifiers != TypeScript.Modifiers.None) {
+ this.reportParseError("block does not take modifiers");
+ }
+ minChar = this.scanner.startPos;
+ this.currentToken = this.scanner.scan();
+ var block = new TypeScript.Block(new TypeScript.ASTList(), true);
+ this.pushStmt(block, labelList);
+ this.parseStatementList(errorRecoverySet | TypeScript.ErrorRecoverySet.RCurly, block.statements, false, false, TypeScript.AllowedElements.None, modifiers);
+ this.popStmt();
+ block.statements.minChar = minChar;
+ block.statements.limChar = this.scanner.pos;
+ block.minChar = block.statements.minChar;
+ block.limChar = block.statements.limChar;
+ this.checkCurrentToken(TypeScript.TokenID.CloseBrace, errorRecoverySet);
+ ast = block;
+ break;
+ }
+
+ case TypeScript.TokenID.Semicolon: {
+ mayNotBeExported();
+ if(modifiers != TypeScript.Modifiers.None) {
+ this.reportParseError("modifier can not appear here");
+ }
+ ast = new TypeScript.AST(TypeScript.NodeType.Empty);
+ this.currentToken = this.scanner.scan();
+ break;
+
+ }
+ case TypeScript.TokenID.Break:
+ case TypeScript.TokenID.Continue: {
+ mayNotBeExported();
+ if(modifiers != TypeScript.Modifiers.None) {
+ this.reportParseError("modifiers can not appear before jump statement");
+ }
+ var jump = new TypeScript.Jump((this.currentToken.tokenId == TypeScript.TokenID.Break) ? TypeScript.NodeType.Break : TypeScript.NodeType.Continue);
+ this.currentToken = this.scanner.scan();
+ if((this.currentToken.tokenId == TypeScript.TokenID.Identifier) && (!this.scanner.lastTokenHadNewline())) {
+ jump.target = this.currentToken.getText();
+ this.currentToken = this.scanner.scan();
+ }
+ this.resolveJumpTarget(jump);
+ ast = jump;
+ needTerminator = true;
+ break;
+ }
+
+ case TypeScript.TokenID.Return: {
+ mayNotBeExported();
+ if(modifiers != TypeScript.Modifiers.None) {
+ this.reportParseError("modifiers can not appear before return statement");
+ }
+ if(!this.inFunction) {
+ this.reportParseError("return statement outside of function body");
+ }
+ minChar = this.scanner.startPos;
+ this.currentToken = this.scanner.scan();
+ var retStmt = new TypeScript.ReturnStatement();
+ retStmt.minChar = minChar;
+ if((this.currentToken.tokenId != TypeScript.TokenID.Semicolon) && (this.currentToken.tokenId != TypeScript.TokenID.CloseBrace) && (!(this.scanner.lastTokenHadNewline()))) {
+ retStmt.returnExpression = this.parseExpr(errorRecoverySet | TypeScript.ErrorRecoverySet.SColon, TypeScript.OperatorPrecedence.None, true, TypeContext.NoTypes);
+ }
+ needTerminator = true;
+ retStmt.limChar = this.scanner.lastTokenLimChar();
+ ast = retStmt;
+ break;
+ }
+
+ case TypeScript.TokenID.Throw: {
+ mayNotBeExported();
+ if(modifiers != TypeScript.Modifiers.None) {
+ this.reportParseError("modifiers can not appear before a throw statement");
+ }
+ minChar = this.scanner.startPos;
+ this.currentToken = this.scanner.scan();
+ if((this.currentToken.tokenId != TypeScript.TokenID.Semicolon) && (this.currentToken.tokenId != TypeScript.TokenID.CloseBrace) && (!(this.scanner.lastTokenHadNewline()))) {
+ temp = this.parseExpr(errorRecoverySet | TypeScript.ErrorRecoverySet.SColon, TypeScript.OperatorPrecedence.None, true, TypeContext.NoTypes);
+ } else {
+ this.reportParseError("throw with no target");
+ temp = null;
+ }
+ ast = new TypeScript.UnaryExpression(TypeScript.NodeType.Throw, temp);
+ ast.limChar = this.scanner.lastTokenLimChar();
+ needTerminator = true;
+ break;
+
+ }
+ case TypeScript.TokenID.Enum: {
+ this.currentToken = this.scanner.scan();
+ ast = this.parseEnumDecl(errorRecoverySet, modifiers);
+ ast.minChar = minChar;
+ ast.limChar = this.scanner.lastTokenLimChar();
+ if(this.parsingDeclareFile || this.ambientModule || TypeScript.hasFlag(modifiers, TypeScript.Modifiers.Ambient)) {
+ (ast).modFlags |= TypeScript.ModuleFlags.Ambient;
+ }
+ if(this.parsingDeclareFile || this.ambientModule || TypeScript.hasFlag(modifiers, TypeScript.Modifiers.Exported)) {
+ (ast).modFlags |= TypeScript.ModuleFlags.Exported;
+ }
+ break;
+
+ }
+ case TypeScript.TokenID.Debugger: {
+ mayNotBeExported();
+ if(modifiers != TypeScript.Modifiers.None) {
+ this.reportParseError("modifiers can not appear before debugger statement");
+ }
+ minChar = this.scanner.startPos;
+ this.currentToken = this.scanner.scan();
+ var debuggerStmt = new TypeScript.DebuggerStatement();
+ debuggerStmt.minChar = minChar;
+ needTerminator = true;
+ debuggerStmt.limChar = this.scanner.lastTokenLimChar();
+ ast = debuggerStmt;
+ break;
+
+ }
+ default: {
+ if(modifiers != TypeScript.Modifiers.None) {
+ this.reportParseError("modifiers can not appear before an expression statement or label");
+ }
+ minChar = this.scanner.startPos;
+ var svPos = this.scanner.pos;
+ temp = this.parseExpr(TypeScript.ErrorRecoverySet.Colon | TypeScript.ErrorRecoverySet.StmtStart | errorRecoverySet, TypeScript.OperatorPrecedence.None, true, TypeContext.NoTypes);
+ if(this.scanner.pos == svPos) {
+ this.currentToken = this.scanner.scan();
+ ast = temp;
+ } else {
+ if((this.currentToken.tokenId == TypeScript.TokenID.Colon) && (!this.scanner.lastTokenHadNewline()) && temp && (temp.nodeType == TypeScript.NodeType.Name)) {
+ if(labelList == null) {
+ labelList = new TypeScript.ASTList();
+ }
+ labelList.append(new TypeScript.Label(temp));
+ this.currentToken = this.scanner.scan();
+ } else {
+ ast = temp;
+ needTerminator = true;
+ }
+ }
+
+ }
+ }
+ if(ast) {
+ break;
+ }
+ }
+ if(needTerminator) {
+ switch(this.currentToken.tokenId) {
+ case TypeScript.TokenID.Semicolon: {
+ this.currentToken = this.scanner.scan();
+ ast.flags |= TypeScript.ASTFlags.ExplicitSemicolon;
+ break;
+
+ }
+ case TypeScript.TokenID.EndOfFile: {
+ ast.limChar = this.scanner.pos;
+
+ }
+ case TypeScript.TokenID.CloseBrace: {
+ ast.flags |= TypeScript.ASTFlags.AutomaticSemicolon;
+ if(this.style_requireSemi) {
+ this.reportParseStyleError("no automatic semicolon");
+ }
+ break;
+
+ }
+ default: {
+ if(!this.scanner.lastTokenHadNewline()) {
+ this.reportParseError("Expected ';'");
+ } else {
+ ast.flags |= TypeScript.ASTFlags.AutomaticSemicolon;
+ if(this.style_requireSemi) {
+ this.reportParseStyleError("no automatic semicolon");
+ }
+ }
+ break;
+
+ }
+ }
+ }
+ if(labelList) {
+ ast = new TypeScript.LabeledStatement(labelList, ast);
+ }
+ ast.minChar = minChar;
+ ast.limChar = TypeScript.max(ast.limChar, this.scanner.lastTokenLimChar());
+ if(preComments) {
+ ast.preComments = preComments;
+ }
+ if(this.ambientModule && (!this.okAmbientModuleMember(ast))) {
+ this.reportParseError("statement not permitted within ambient module");
+ }
+ ast.flags |= TypeScript.ASTFlags.IsStatement;
+ return ast;
+ };
+ Parser.prototype.okAmbientModuleMember = function (ast) {
+ var nt = ast.nodeType;
+ return (nt == TypeScript.NodeType.ClassDeclaration) || (nt == TypeScript.NodeType.ImportDeclaration) || (nt == TypeScript.NodeType.InterfaceDeclaration) || (nt == TypeScript.NodeType.ModuleDeclaration) || (nt == TypeScript.NodeType.Empty) || (nt == TypeScript.NodeType.VarDecl) || ((nt == TypeScript.NodeType.Block) && !(ast).isStatementBlock) || ((nt == TypeScript.NodeType.FuncDecl) && ((ast).isMethod()));
+ };
+ Parser.prototype.parseStatementList = function (errorRecoverySet, statements, sourceElms, noLeadingCase, allowedElements, parentModifiers) {
+ var directivePrologue = sourceElms;
+ statements.minChar = this.scanner.startPos;
+ var limChar = this.scanner.pos;
+ var innerStmts = (allowedElements & TypeScript.AllowedElements.ModuleDeclarations) == TypeScript.AllowedElements.None;
+ var classNope = (allowedElements & TypeScript.AllowedElements.ClassDeclarations) == TypeScript.AllowedElements.None;
+ errorRecoverySet |= TypeScript.ErrorRecoverySet.TypeScriptS | TypeScript.ErrorRecoverySet.RCurly;
+ this.state = ParseState.StartStatementList;
+ var oldStrictMode = this.strictMode;
+ this.nestingLevel++;
+ for(; ; ) {
+ if((this.currentToken.tokenId == TypeScript.TokenID.CloseBrace) || (noLeadingCase && ((this.currentToken.tokenId == TypeScript.TokenID.Case) || (this.currentToken.tokenId == TypeScript.TokenID.Default))) || (innerStmts && (this.currentToken.tokenId == TypeScript.TokenID.Export)) || (classNope && (this.currentToken.tokenId == TypeScript.TokenID.Class)) || (this.currentToken.tokenId == TypeScript.TokenID.EndOfFile)) {
+ this.state = ParseState.EndStmtList;
+ statements.limChar = limChar;
+ if(statements.members.length == 0) {
+ statements.preComments = this.parseComments();
+ } else {
+ statements.postComments = this.parseComments();
+ }
+ this.strictMode = oldStrictMode;
+ this.nestingLevel--;
+ return;
+ }
+ var stmt = this.parseStatement(errorRecoverySet & (~(TypeScript.ErrorRecoverySet.Else | TypeScript.ErrorRecoverySet.RParen | TypeScript.ErrorRecoverySet.Catch | TypeScript.ErrorRecoverySet.Colon)), allowedElements, parentModifiers);
+ if(stmt) {
+ stmt.postComments = this.combineComments(stmt.postComments, this.parseCommentsForLine(this.scanner.prevLine));
+ statements.append(stmt);
+ limChar = stmt.limChar;
+ if(directivePrologue) {
+ if(stmt.nodeType == TypeScript.NodeType.QString) {
+ var qstring = stmt;
+ if(qstring.text == "\"use strict\"") {
+ statements.flags |= TypeScript.ASTFlags.StrictMode;
+ this.strictMode = true;
+ } else {
+ directivePrologue = false;
+ }
+ } else {
+ directivePrologue = false;
+ }
+ }
+ }
+ }
+ };
+ Parser.prototype.quickParse = function (sourceText, filename, unitIndex) {
+ var svGenTarget = TypeScript.moduleGenTarget;
+ try {
+ TypeScript.moduleGenTarget = TypeScript.ModuleGenTarget.Local;
+ var script = this.parse(sourceText, filename, unitIndex, TypeScript.AllowedElements.QuickParse);
+ return new QuickParseResult(script, this.scanner.lexState);
+ }finally {
+ TypeScript.moduleGenTarget = svGenTarget;
+ }
+ };
+ Parser.prototype.parse = function (sourceText, filename, unitIndex, allowedElements) {
+ if (typeof allowedElements === "undefined") { allowedElements = TypeScript.AllowedElements.Global; }
+ var _this = this;
+ this.ambientModule = false;
+ this.topLevel = true;
+ this.hasTopLevelImportOrExport = false;
+ this.requiresExtendsBlock = false;
+ this.fname = filename;
+ this.currentUnitIndex = unitIndex;
+ this.amdDependencies = [];
+ this.scanner.resetComments();
+ this.scanner.setErrorHandler(function (message) {
+ return _this.reportParseError(message);
+ });
+ this.scanner.setSourceText(sourceText, TypeScript.LexMode.File);
+ var leftCurlyCount = this.scanner.leftCurlyCount;
+ var rightCurlyCount = this.scanner.rightCurlyCount;
+ var minChar = this.scanner.pos;
+ this.currentToken = this.scanner.scan();
+ this.pushDeclLists();
+ var bod = new TypeScript.ASTList();
+ bod.minChar = minChar;
+ this.state = ParseState.StartScript;
+ this.parsingDeclareFile = TypeScript.isDSTRFile(filename) || TypeScript.isDTSFile(filename);
+ while(true) {
+ this.parseStatementList(TypeScript.ErrorRecoverySet.EOF | TypeScript.ErrorRecoverySet.Func, bod, true, false, allowedElements, TypeScript.Modifiers.None);
+ if(this.currentToken.tokenId === TypeScript.TokenID.EndOfFile) {
+ break;
+ }
+ var badToken = TypeScript.tokenTable[this.currentToken.tokenId];
+ this.reportParseError("Unexpected statement block terminator '" + badToken.text + "'");
+ this.currentToken = this.scanner.scan();
+ }
+ this.state = ParseState.EndScript;
+ bod.limChar = this.scanner.pos;
+ var topLevelMod = null;
+ if(TypeScript.moduleGenTarget != TypeScript.ModuleGenTarget.Local && this.hasTopLevelImportOrExport) {
+ var correctedFileName = TypeScript.switchToForwardSlashes(filename);
+ var id = new TypeScript.Identifier(correctedFileName);
+ topLevelMod = new TypeScript.ModuleDeclaration(id, bod, this.topVarList(), this.topScopeList(), null);
+ topLevelMod.modFlags |= TypeScript.ModuleFlags.IsDynamic;
+ topLevelMod.modFlags |= TypeScript.ModuleFlags.IsWholeFile;
+ topLevelMod.modFlags |= TypeScript.ModuleFlags.Exported;
+ if(this.parsingDeclareFile) {
+ topLevelMod.modFlags |= TypeScript.ModuleFlags.Ambient;
+ }
+ topLevelMod.minChar = minChar;
+ topLevelMod.limChar = this.scanner.pos;
+ topLevelMod.prettyName = TypeScript.getPrettyName(correctedFileName);
+ topLevelMod.containsUnicodeChar = this.scanner.seenUnicodeChar;
+ topLevelMod.containsUnicodeCharInComment = this.scanner.seenUnicodeCharInComment;
+ topLevelMod.amdDependencies = this.amdDependencies;
+ bod = new TypeScript.ASTList();
+ bod.minChar = topLevelMod.minChar;
+ bod.limChar = topLevelMod.limChar;
+ bod.append(topLevelMod);
+ }
+ var script = new TypeScript.Script(this.topVarList(), this.topScopeList());
+ script.bod = bod;
+ this.popDeclLists();
+ script.minChar = minChar;
+ script.limChar = this.scanner.pos;
+ script.locationInfo = new TypeScript.LocationInfo(filename, this.scanner.lineMap, unitIndex);
+ script.leftCurlyCount = this.scanner.leftCurlyCount - leftCurlyCount;
+ script.rightCurlyCount = this.scanner.rightCurlyCount - rightCurlyCount;
+ script.isDeclareFile = this.parsingDeclareFile;
+ script.topLevelMod = topLevelMod;
+ script.containsUnicodeChar = this.scanner.seenUnicodeChar;
+ script.containsUnicodeCharInComment = this.scanner.seenUnicodeCharInComment;
+ script.requiresExtendsBlock = this.requiresExtendsBlock;
+ return script;
+ };
+ return Parser;
+ })();
+ TypeScript.Parser = Parser;
+ function quickParse(logger, scopeStartAST, sourceText, minChar, limChar, errorCapture) {
+ var fragment = sourceText.getText(minChar, limChar);
+ logger.log("Quick parse range (" + minChar + "," + limChar + "): \"" + TypeScript.stringToLiteral(fragment, 100) + "\"");
+ var quickParser = new Parser();
+ quickParser.setErrorRecovery(null);
+ quickParser.errorCallback = errorCapture;
+ var quickClassDecl = new TypeScript.ClassDeclaration(null, null, null, null);
+ quickParser.currentClassDecl = quickClassDecl;
+ var result = quickParser.quickParse(new TypeScript.StringSourceText(fragment), "", 0);
+ return result;
+ }
+ TypeScript.quickParse = quickParse;
+})(TypeScript || (TypeScript = {}));
+var TypeScript;
+(function (TypeScript) {
+ var PrintContext = (function () {
+ function PrintContext(outfile, parser) {
+ this.outfile = outfile;
+ this.parser = parser;
+ this.builder = "";
+ this.indent1 = " ";
+ this.indentStrings = [];
+ this.indentAmt = 0;
+ }
+ PrintContext.prototype.increaseIndent = function () {
+ this.indentAmt++;
+ };
+ PrintContext.prototype.decreaseIndent = function () {
+ this.indentAmt--;
+ };
+ PrintContext.prototype.startLine = function () {
+ if(this.builder.length > 0) {
+ TypeScript.CompilerDiagnostics.Alert(this.builder);
+ }
+ var indentString = this.indentStrings[this.indentAmt];
+ if(indentString === undefined) {
+ indentString = "";
+ for(var i = 0; i < this.indentAmt; i++) {
+ indentString += this.indent1;
+ }
+ this.indentStrings[this.indentAmt] = indentString;
+ }
+ this.builder += indentString;
+ };
+ PrintContext.prototype.write = function (s) {
+ this.builder += s;
+ };
+ PrintContext.prototype.writeLine = function (s) {
+ this.builder += s;
+ this.outfile.WriteLine(this.builder);
+ this.builder = "";
+ };
+ return PrintContext;
+ })();
+ TypeScript.PrintContext = PrintContext;
+ function prePrintAST(ast, parent, walker) {
+ var pc = walker.state;
+ ast.print(pc);
+ pc.increaseIndent();
+ return ast;
+ }
+ TypeScript.prePrintAST = prePrintAST;
+ function postPrintAST(ast, parent, walker) {
+ var pc = walker.state;
+ pc.decreaseIndent();
+ return ast;
+ }
+ TypeScript.postPrintAST = postPrintAST;
+})(TypeScript || (TypeScript = {}));
+var TypeScript;
+(function (TypeScript) {
+ TypeScript.LexEOF = (-1);
+ TypeScript.LexCodeNWL = 10;
+ TypeScript.LexCodeRET = 13;
+ TypeScript.LexCodeLS = 8232;
+ TypeScript.LexCodePS = 8233;
+ TypeScript.LexCodeTAB = 9;
+ TypeScript.LexCodeVTAB = 11;
+ TypeScript.LexCode_e = 'e'.charCodeAt(0);
+ TypeScript.LexCode_E = 'E'.charCodeAt(0);
+ TypeScript.LexCode_x = 'x'.charCodeAt(0);
+ TypeScript.LexCode_X = 'X'.charCodeAt(0);
+ TypeScript.LexCode_a = 'a'.charCodeAt(0);
+ TypeScript.LexCode_A = 'A'.charCodeAt(0);
+ TypeScript.LexCode_f = 'f'.charCodeAt(0);
+ TypeScript.LexCode_F = 'F'.charCodeAt(0);
+ TypeScript.LexCode_g = 'g'.charCodeAt(0);
+ TypeScript.LexCode_m = 'm'.charCodeAt(0);
+ TypeScript.LexCode_i = 'i'.charCodeAt(0);
+ TypeScript.LexCode_u = 'u'.charCodeAt(0);
+ TypeScript.LexCode_0 = '0'.charCodeAt(0);
+ TypeScript.LexCode_9 = '9'.charCodeAt(0);
+ TypeScript.LexCode_8 = '8'.charCodeAt(0);
+ TypeScript.LexCode_7 = '7'.charCodeAt(0);
+ TypeScript.LexCodeBSL = '\\'.charCodeAt(0);
+ TypeScript.LexCodeSHP = '#'.charCodeAt(0);
+ TypeScript.LexCodeBNG = '!'.charCodeAt(0);
+ TypeScript.LexCodeQUO = '"'.charCodeAt(0);
+ TypeScript.LexCodeAPO = '\''.charCodeAt(0);
+ TypeScript.LexCodePCT = '%'.charCodeAt(0);
+ TypeScript.LexCodeAMP = '&'.charCodeAt(0);
+ TypeScript.LexCodeLPR = '('.charCodeAt(0);
+ TypeScript.LexCodeRPR = ')'.charCodeAt(0);
+ TypeScript.LexCodePLS = '+'.charCodeAt(0);
+ TypeScript.LexCodeMIN = '-'.charCodeAt(0);
+ TypeScript.LexCodeMUL = '*'.charCodeAt(0);
+ TypeScript.LexCodeSLH = '/'.charCodeAt(0);
+ TypeScript.LexCodeXOR = '^'.charCodeAt(0);
+ TypeScript.LexCodeCMA = ','.charCodeAt(0);
+ TypeScript.LexCodeDOT = '.'.charCodeAt(0);
+ TypeScript.LexCodeLT = '<'.charCodeAt(0);
+ TypeScript.LexCodeEQ = '='.charCodeAt(0);
+ TypeScript.LexCodeGT = '>'.charCodeAt(0);
+ TypeScript.LexCodeQUE = '?'.charCodeAt(0);
+ TypeScript.LexCodeLBR = '['.charCodeAt(0);
+ TypeScript.LexCodeRBR = ']'.charCodeAt(0);
+ TypeScript.LexCodeUSC = '_'.charCodeAt(0);
+ TypeScript.LexCodeLC = '{'.charCodeAt(0);
+ TypeScript.LexCodeRC = '}'.charCodeAt(0);
+ TypeScript.LexCodeBAR = '|'.charCodeAt(0);
+ TypeScript.LexCodeTIL = '~'.charCodeAt(0);
+ TypeScript.LexCodeCOL = ':'.charCodeAt(0);
+ TypeScript.LexCodeSMC = ';'.charCodeAt(0);
+ TypeScript.LexCodeUnderscore = '_'.charCodeAt(0);
+ TypeScript.LexCodeDollar = '$'.charCodeAt(0);
+ TypeScript.LexCodeSpace = 32;
+ TypeScript.LexCodeAtSign = '@'.charCodeAt(0);
+ TypeScript.LexCodeASCIIChars = 128;
+ TypeScript.LexKeywordTable = undefined;
+ var autoToken = new Array(TypeScript.LexCodeASCIIChars);
+ var lexIdStartTable = new Array(TypeScript.LexCodeASCIIChars);
+ var unicodeES3IdStart = [
+ 170,
+ 170,
+ 181,
+ 181,
+ 186,
+ 186,
+ 192,
+ 214,
+ 216,
+ 246,
+ 248,
+ 543,
+ 546,
+ 563,
+ 592,
+ 685,
+ 688,
+ 696,
+ 699,
+ 705,
+ 720,
+ 721,
+ 736,
+ 740,
+ 750,
+ 750,
+ 890,
+ 890,
+ 902,
+ 902,
+ 904,
+ 906,
+ 908,
+ 908,
+ 910,
+ 929,
+ 931,
+ 974,
+ 976,
+ 983,
+ 986,
+ 1011,
+ 1024,
+ 1153,
+ 1164,
+ 1220,
+ 1223,
+ 1224,
+ 1227,
+ 1228,
+ 1232,
+ 1269,
+ 1272,
+ 1273,
+ 1329,
+ 1366,
+ 1369,
+ 1369,
+ 1377,
+ 1415,
+ 1488,
+ 1514,
+ 1520,
+ 1522,
+ 1569,
+ 1594,
+ 1600,
+ 1610,
+ 1649,
+ 1747,
+ 1749,
+ 1749,
+ 1765,
+ 1766,
+ 1786,
+ 1788,
+ 1808,
+ 1808,
+ 1810,
+ 1836,
+ 1920,
+ 1957,
+ 2309,
+ 2361,
+ 2365,
+ 2365,
+ 2384,
+ 2384,
+ 2392,
+ 2401,
+ 2437,
+ 2444,
+ 2447,
+ 2448,
+ 2451,
+ 2472,
+ 2474,
+ 2480,
+ 2482,
+ 2482,
+ 2486,
+ 2489,
+ 2524,
+ 2525,
+ 2527,
+ 2529,
+ 2544,
+ 2545,
+ 2565,
+ 2570,
+ 2575,
+ 2576,
+ 2579,
+ 2600,
+ 2602,
+ 2608,
+ 2610,
+ 2611,
+ 2613,
+ 2614,
+ 2616,
+ 2617,
+ 2649,
+ 2652,
+ 2654,
+ 2654,
+ 2674,
+ 2676,
+ 2693,
+ 2699,
+ 2701,
+ 2701,
+ 2703,
+ 2705,
+ 2707,
+ 2728,
+ 2730,
+ 2736,
+ 2738,
+ 2739,
+ 2741,
+ 2745,
+ 2749,
+ 2749,
+ 2768,
+ 2768,
+ 2784,
+ 2784,
+ 2821,
+ 2828,
+ 2831,
+ 2832,
+ 2835,
+ 2856,
+ 2858,
+ 2864,
+ 2866,
+ 2867,
+ 2870,
+ 2873,
+ 2877,
+ 2877,
+ 2908,
+ 2909,
+ 2911,
+ 2913,
+ 2949,
+ 2954,
+ 2958,
+ 2960,
+ 2962,
+ 2965,
+ 2969,
+ 2970,
+ 2972,
+ 2972,
+ 2974,
+ 2975,
+ 2979,
+ 2980,
+ 2984,
+ 2986,
+ 2990,
+ 2997,
+ 2999,
+ 3001,
+ 3077,
+ 3084,
+ 3086,
+ 3088,
+ 3090,
+ 3112,
+ 3114,
+ 3123,
+ 3125,
+ 3129,
+ 3168,
+ 3169,
+ 3205,
+ 3212,
+ 3214,
+ 3216,
+ 3218,
+ 3240,
+ 3242,
+ 3251,
+ 3253,
+ 3257,
+ 3294,
+ 3294,
+ 3296,
+ 3297,
+ 3333,
+ 3340,
+ 3342,
+ 3344,
+ 3346,
+ 3368,
+ 3370,
+ 3385,
+ 3424,
+ 3425,
+ 3461,
+ 3478,
+ 3482,
+ 3505,
+ 3507,
+ 3515,
+ 3517,
+ 3517,
+ 3520,
+ 3526,
+ 3585,
+ 3632,
+ 3634,
+ 3635,
+ 3648,
+ 3654,
+ 3713,
+ 3714,
+ 3716,
+ 3716,
+ 3719,
+ 3720,
+ 3722,
+ 3722,
+ 3725,
+ 3725,
+ 3732,
+ 3735,
+ 3737,
+ 3743,
+ 3745,
+ 3747,
+ 3749,
+ 3749,
+ 3751,
+ 3751,
+ 3754,
+ 3755,
+ 3757,
+ 3760,
+ 3762,
+ 3763,
+ 3773,
+ 3773,
+ 3776,
+ 3780,
+ 3782,
+ 3782,
+ 3804,
+ 3805,
+ 3840,
+ 3840,
+ 3904,
+ 3911,
+ 3913,
+ 3946,
+ 3976,
+ 3979,
+ 4096,
+ 4129,
+ 4131,
+ 4135,
+ 4137,
+ 4138,
+ 4176,
+ 4181,
+ 4256,
+ 4293,
+ 4304,
+ 4342,
+ 4352,
+ 4441,
+ 4447,
+ 4514,
+ 4520,
+ 4601,
+ 4608,
+ 4614,
+ 4616,
+ 4678,
+ 4680,
+ 4680,
+ 4682,
+ 4685,
+ 4688,
+ 4694,
+ 4696,
+ 4696,
+ 4698,
+ 4701,
+ 4704,
+ 4742,
+ 4744,
+ 4744,
+ 4746,
+ 4749,
+ 4752,
+ 4782,
+ 4784,
+ 4784,
+ 4786,
+ 4789,
+ 4792,
+ 4798,
+ 4800,
+ 4800,
+ 4802,
+ 4805,
+ 4808,
+ 4814,
+ 4816,
+ 4822,
+ 4824,
+ 4846,
+ 4848,
+ 4878,
+ 4880,
+ 4880,
+ 4882,
+ 4885,
+ 4888,
+ 4894,
+ 4896,
+ 4934,
+ 4936,
+ 4954,
+ 5024,
+ 5108,
+ 5121,
+ 5740,
+ 5743,
+ 5750,
+ 5761,
+ 5786,
+ 5792,
+ 5866,
+ 6016,
+ 6067,
+ 6176,
+ 6263,
+ 6272,
+ 6312,
+ 7680,
+ 7835,
+ 7840,
+ 7929,
+ 7936,
+ 7957,
+ 7960,
+ 7965,
+ 7968,
+ 8005,
+ 8008,
+ 8013,
+ 8016,
+ 8023,
+ 8025,
+ 8025,
+ 8027,
+ 8027,
+ 8029,
+ 8029,
+ 8031,
+ 8061,
+ 8064,
+ 8116,
+ 8118,
+ 8124,
+ 8126,
+ 8126,
+ 8130,
+ 8132,
+ 8134,
+ 8140,
+ 8144,
+ 8147,
+ 8150,
+ 8155,
+ 8160,
+ 8172,
+ 8178,
+ 8180,
+ 8182,
+ 8188,
+ 8319,
+ 8319,
+ 8450,
+ 8450,
+ 8455,
+ 8455,
+ 8458,
+ 8467,
+ 8469,
+ 8469,
+ 8473,
+ 8477,
+ 8484,
+ 8484,
+ 8486,
+ 8486,
+ 8488,
+ 8488,
+ 8490,
+ 8493,
+ 8495,
+ 8497,
+ 8499,
+ 8505,
+ 8544,
+ 8579,
+ 12293,
+ 12295,
+ 12321,
+ 12329,
+ 12337,
+ 12341,
+ 12344,
+ 12346,
+ 12353,
+ 12436,
+ 12445,
+ 12446,
+ 12449,
+ 12538,
+ 12540,
+ 12542,
+ 12549,
+ 12588,
+ 12593,
+ 12686,
+ 12704,
+ 12727,
+ 13312,
+ 13312,
+ 19893,
+ 19893,
+ 19968,
+ 19968,
+ 40869,
+ 40869,
+ 40960,
+ 42124,
+ 44032,
+ 44032,
+ 55203,
+ 55203,
+ 63744,
+ 64045,
+ 64256,
+ 64262,
+ 64275,
+ 64279,
+ 64285,
+ 64285,
+ 64287,
+ 64296,
+ 64298,
+ 64310,
+ 64312,
+ 64316,
+ 64318,
+ 64318,
+ 64320,
+ 64321,
+ 64323,
+ 64324,
+ 64326,
+ 64433,
+ 64467,
+ 64829,
+ 64848,
+ 64911,
+ 64914,
+ 64967,
+ 65008,
+ 65019,
+ 65136,
+ 65138,
+ 65140,
+ 65140,
+ 65142,
+ 65276,
+ 65313,
+ 65338,
+ 65345,
+ 65370,
+ 65382,
+ 65470,
+ 65474,
+ 65479,
+ 65482,
+ 65487,
+ 65490,
+ 65495,
+ 65498,
+ 65500
+ ];
+ var unicodeES3IdCont = [
+ 768,
+ 846,
+ 864,
+ 866,
+ 1155,
+ 1158,
+ 1425,
+ 1441,
+ 1443,
+ 1465,
+ 1467,
+ 1469,
+ 1471,
+ 1471,
+ 1473,
+ 1474,
+ 1476,
+ 1476,
+ 1611,
+ 1621,
+ 1632,
+ 1641,
+ 1648,
+ 1648,
+ 1750,
+ 1756,
+ 1759,
+ 1764,
+ 1767,
+ 1768,
+ 1770,
+ 1773,
+ 1776,
+ 1785,
+ 1809,
+ 1809,
+ 1840,
+ 1866,
+ 1958,
+ 1968,
+ 2305,
+ 2307,
+ 2364,
+ 2364,
+ 2366,
+ 2381,
+ 2385,
+ 2388,
+ 2402,
+ 2403,
+ 2406,
+ 2415,
+ 2433,
+ 2435,
+ 2492,
+ 2492,
+ 2494,
+ 2500,
+ 2503,
+ 2504,
+ 2507,
+ 2509,
+ 2519,
+ 2519,
+ 2530,
+ 2531,
+ 2534,
+ 2543,
+ 2562,
+ 2562,
+ 2620,
+ 2620,
+ 2622,
+ 2626,
+ 2631,
+ 2632,
+ 2635,
+ 2637,
+ 2662,
+ 2673,
+ 2689,
+ 2691,
+ 2748,
+ 2748,
+ 2750,
+ 2757,
+ 2759,
+ 2761,
+ 2763,
+ 2765,
+ 2790,
+ 2799,
+ 2817,
+ 2819,
+ 2876,
+ 2876,
+ 2878,
+ 2883,
+ 2887,
+ 2888,
+ 2891,
+ 2893,
+ 2902,
+ 2903,
+ 2918,
+ 2927,
+ 2946,
+ 2947,
+ 3006,
+ 3010,
+ 3014,
+ 3016,
+ 3018,
+ 3021,
+ 3031,
+ 3031,
+ 3047,
+ 3055,
+ 3073,
+ 3075,
+ 3134,
+ 3140,
+ 3142,
+ 3144,
+ 3146,
+ 3149,
+ 3157,
+ 3158,
+ 3174,
+ 3183,
+ 3202,
+ 3203,
+ 3262,
+ 3268,
+ 3270,
+ 3272,
+ 3274,
+ 3277,
+ 3285,
+ 3286,
+ 3302,
+ 3311,
+ 3330,
+ 3331,
+ 3390,
+ 3395,
+ 3398,
+ 3400,
+ 3402,
+ 3405,
+ 3415,
+ 3415,
+ 3430,
+ 3439,
+ 3458,
+ 3459,
+ 3530,
+ 3530,
+ 3535,
+ 3540,
+ 3542,
+ 3542,
+ 3544,
+ 3551,
+ 3570,
+ 3571,
+ 3633,
+ 3633,
+ 3636,
+ 3642,
+ 3655,
+ 3662,
+ 3664,
+ 3673,
+ 3761,
+ 3761,
+ 3764,
+ 3769,
+ 3771,
+ 3772,
+ 3784,
+ 3789,
+ 3792,
+ 3801,
+ 3864,
+ 3865,
+ 3872,
+ 3881,
+ 3893,
+ 3893,
+ 3895,
+ 3895,
+ 3897,
+ 3897,
+ 3902,
+ 3903,
+ 3953,
+ 3972,
+ 3974,
+ 3975,
+ 3984,
+ 3991,
+ 3993,
+ 4028,
+ 4038,
+ 4038,
+ 4140,
+ 4146,
+ 4150,
+ 4153,
+ 4160,
+ 4169,
+ 4182,
+ 4185,
+ 4969,
+ 4977,
+ 6068,
+ 6099,
+ 6112,
+ 6121,
+ 6160,
+ 6169,
+ 6313,
+ 6313,
+ 8255,
+ 8256,
+ 8400,
+ 8412,
+ 8417,
+ 8417,
+ 12330,
+ 12335,
+ 12441,
+ 12442,
+ 12539,
+ 12539,
+ 64286,
+ 64286,
+ 65056,
+ 65059,
+ 65075,
+ 65076,
+ 65101,
+ 65103,
+ 65296,
+ 65305,
+ 65343,
+ 65343,
+ 65381,
+ 65381
+ ];
+ var unicodeES5IdStart = [
+ 170,
+ 170,
+ 181,
+ 181,
+ 186,
+ 186,
+ 192,
+ 214,
+ 216,
+ 246,
+ 248,
+ 705,
+ 710,
+ 721,
+ 736,
+ 740,
+ 748,
+ 748,
+ 750,
+ 750,
+ 880,
+ 884,
+ 886,
+ 887,
+ 890,
+ 893,
+ 902,
+ 902,
+ 904,
+ 906,
+ 908,
+ 908,
+ 910,
+ 929,
+ 931,
+ 1013,
+ 1015,
+ 1153,
+ 1162,
+ 1319,
+ 1329,
+ 1366,
+ 1369,
+ 1369,
+ 1377,
+ 1415,
+ 1488,
+ 1514,
+ 1520,
+ 1522,
+ 1568,
+ 1610,
+ 1646,
+ 1647,
+ 1649,
+ 1747,
+ 1749,
+ 1749,
+ 1765,
+ 1766,
+ 1774,
+ 1775,
+ 1786,
+ 1788,
+ 1791,
+ 1791,
+ 1808,
+ 1808,
+ 1810,
+ 1839,
+ 1869,
+ 1957,
+ 1969,
+ 1969,
+ 1994,
+ 2026,
+ 2036,
+ 2037,
+ 2042,
+ 2042,
+ 2048,
+ 2069,
+ 2074,
+ 2074,
+ 2084,
+ 2084,
+ 2088,
+ 2088,
+ 2112,
+ 2136,
+ 2208,
+ 2208,
+ 2210,
+ 2220,
+ 2308,
+ 2361,
+ 2365,
+ 2365,
+ 2384,
+ 2384,
+ 2392,
+ 2401,
+ 2417,
+ 2423,
+ 2425,
+ 2431,
+ 2437,
+ 2444,
+ 2447,
+ 2448,
+ 2451,
+ 2472,
+ 2474,
+ 2480,
+ 2482,
+ 2482,
+ 2486,
+ 2489,
+ 2493,
+ 2493,
+ 2510,
+ 2510,
+ 2524,
+ 2525,
+ 2527,
+ 2529,
+ 2544,
+ 2545,
+ 2565,
+ 2570,
+ 2575,
+ 2576,
+ 2579,
+ 2600,
+ 2602,
+ 2608,
+ 2610,
+ 2611,
+ 2613,
+ 2614,
+ 2616,
+ 2617,
+ 2649,
+ 2652,
+ 2654,
+ 2654,
+ 2674,
+ 2676,
+ 2693,
+ 2701,
+ 2703,
+ 2705,
+ 2707,
+ 2728,
+ 2730,
+ 2736,
+ 2738,
+ 2739,
+ 2741,
+ 2745,
+ 2749,
+ 2749,
+ 2768,
+ 2768,
+ 2784,
+ 2785,
+ 2821,
+ 2828,
+ 2831,
+ 2832,
+ 2835,
+ 2856,
+ 2858,
+ 2864,
+ 2866,
+ 2867,
+ 2869,
+ 2873,
+ 2877,
+ 2877,
+ 2908,
+ 2909,
+ 2911,
+ 2913,
+ 2929,
+ 2929,
+ 2947,
+ 2947,
+ 2949,
+ 2954,
+ 2958,
+ 2960,
+ 2962,
+ 2965,
+ 2969,
+ 2970,
+ 2972,
+ 2972,
+ 2974,
+ 2975,
+ 2979,
+ 2980,
+ 2984,
+ 2986,
+ 2990,
+ 3001,
+ 3024,
+ 3024,
+ 3077,
+ 3084,
+ 3086,
+ 3088,
+ 3090,
+ 3112,
+ 3114,
+ 3123,
+ 3125,
+ 3129,
+ 3133,
+ 3133,
+ 3160,
+ 3161,
+ 3168,
+ 3169,
+ 3205,
+ 3212,
+ 3214,
+ 3216,
+ 3218,
+ 3240,
+ 3242,
+ 3251,
+ 3253,
+ 3257,
+ 3261,
+ 3261,
+ 3294,
+ 3294,
+ 3296,
+ 3297,
+ 3313,
+ 3314,
+ 3333,
+ 3340,
+ 3342,
+ 3344,
+ 3346,
+ 3386,
+ 3389,
+ 3389,
+ 3406,
+ 3406,
+ 3424,
+ 3425,
+ 3450,
+ 3455,
+ 3461,
+ 3478,
+ 3482,
+ 3505,
+ 3507,
+ 3515,
+ 3517,
+ 3517,
+ 3520,
+ 3526,
+ 3585,
+ 3632,
+ 3634,
+ 3635,
+ 3648,
+ 3654,
+ 3713,
+ 3714,
+ 3716,
+ 3716,
+ 3719,
+ 3720,
+ 3722,
+ 3722,
+ 3725,
+ 3725,
+ 3732,
+ 3735,
+ 3737,
+ 3743,
+ 3745,
+ 3747,
+ 3749,
+ 3749,
+ 3751,
+ 3751,
+ 3754,
+ 3755,
+ 3757,
+ 3760,
+ 3762,
+ 3763,
+ 3773,
+ 3773,
+ 3776,
+ 3780,
+ 3782,
+ 3782,
+ 3804,
+ 3807,
+ 3840,
+ 3840,
+ 3904,
+ 3911,
+ 3913,
+ 3948,
+ 3976,
+ 3980,
+ 4096,
+ 4138,
+ 4159,
+ 4159,
+ 4176,
+ 4181,
+ 4186,
+ 4189,
+ 4193,
+ 4193,
+ 4197,
+ 4198,
+ 4206,
+ 4208,
+ 4213,
+ 4225,
+ 4238,
+ 4238,
+ 4256,
+ 4293,
+ 4295,
+ 4295,
+ 4301,
+ 4301,
+ 4304,
+ 4346,
+ 4348,
+ 4680,
+ 4682,
+ 4685,
+ 4688,
+ 4694,
+ 4696,
+ 4696,
+ 4698,
+ 4701,
+ 4704,
+ 4744,
+ 4746,
+ 4749,
+ 4752,
+ 4784,
+ 4786,
+ 4789,
+ 4792,
+ 4798,
+ 4800,
+ 4800,
+ 4802,
+ 4805,
+ 4808,
+ 4822,
+ 4824,
+ 4880,
+ 4882,
+ 4885,
+ 4888,
+ 4954,
+ 4992,
+ 5007,
+ 5024,
+ 5108,
+ 5121,
+ 5740,
+ 5743,
+ 5759,
+ 5761,
+ 5786,
+ 5792,
+ 5866,
+ 5870,
+ 5872,
+ 5888,
+ 5900,
+ 5902,
+ 5905,
+ 5920,
+ 5937,
+ 5952,
+ 5969,
+ 5984,
+ 5996,
+ 5998,
+ 6000,
+ 6016,
+ 6067,
+ 6103,
+ 6103,
+ 6108,
+ 6108,
+ 6176,
+ 6263,
+ 6272,
+ 6312,
+ 6314,
+ 6314,
+ 6320,
+ 6389,
+ 6400,
+ 6428,
+ 6480,
+ 6509,
+ 6512,
+ 6516,
+ 6528,
+ 6571,
+ 6593,
+ 6599,
+ 6656,
+ 6678,
+ 6688,
+ 6740,
+ 6823,
+ 6823,
+ 6917,
+ 6963,
+ 6981,
+ 6987,
+ 7043,
+ 7072,
+ 7086,
+ 7087,
+ 7098,
+ 7141,
+ 7168,
+ 7203,
+ 7245,
+ 7247,
+ 7258,
+ 7293,
+ 7401,
+ 7404,
+ 7406,
+ 7409,
+ 7413,
+ 7414,
+ 7424,
+ 7615,
+ 7680,
+ 7957,
+ 7960,
+ 7965,
+ 7968,
+ 8005,
+ 8008,
+ 8013,
+ 8016,
+ 8023,
+ 8025,
+ 8025,
+ 8027,
+ 8027,
+ 8029,
+ 8029,
+ 8031,
+ 8061,
+ 8064,
+ 8116,
+ 8118,
+ 8124,
+ 8126,
+ 8126,
+ 8130,
+ 8132,
+ 8134,
+ 8140,
+ 8144,
+ 8147,
+ 8150,
+ 8155,
+ 8160,
+ 8172,
+ 8178,
+ 8180,
+ 8182,
+ 8188,
+ 8305,
+ 8305,
+ 8319,
+ 8319,
+ 8336,
+ 8348,
+ 8450,
+ 8450,
+ 8455,
+ 8455,
+ 8458,
+ 8467,
+ 8469,
+ 8469,
+ 8473,
+ 8477,
+ 8484,
+ 8484,
+ 8486,
+ 8486,
+ 8488,
+ 8488,
+ 8490,
+ 8493,
+ 8495,
+ 8505,
+ 8508,
+ 8511,
+ 8517,
+ 8521,
+ 8526,
+ 8526,
+ 8544,
+ 8584,
+ 11264,
+ 11310,
+ 11312,
+ 11358,
+ 11360,
+ 11492,
+ 11499,
+ 11502,
+ 11506,
+ 11507,
+ 11520,
+ 11557,
+ 11559,
+ 11559,
+ 11565,
+ 11565,
+ 11568,
+ 11623,
+ 11631,
+ 11631,
+ 11648,
+ 11670,
+ 11680,
+ 11686,
+ 11688,
+ 11694,
+ 11696,
+ 11702,
+ 11704,
+ 11710,
+ 11712,
+ 11718,
+ 11720,
+ 11726,
+ 11728,
+ 11734,
+ 11736,
+ 11742,
+ 11823,
+ 11823,
+ 12293,
+ 12295,
+ 12321,
+ 12329,
+ 12337,
+ 12341,
+ 12344,
+ 12348,
+ 12353,
+ 12438,
+ 12445,
+ 12447,
+ 12449,
+ 12538,
+ 12540,
+ 12543,
+ 12549,
+ 12589,
+ 12593,
+ 12686,
+ 12704,
+ 12730,
+ 12784,
+ 12799,
+ 13312,
+ 13312,
+ 19893,
+ 19893,
+ 19968,
+ 19968,
+ 40908,
+ 40908,
+ 40960,
+ 42124,
+ 42192,
+ 42237,
+ 42240,
+ 42508,
+ 42512,
+ 42527,
+ 42538,
+ 42539,
+ 42560,
+ 42606,
+ 42623,
+ 42647,
+ 42656,
+ 42735,
+ 42775,
+ 42783,
+ 42786,
+ 42888,
+ 42891,
+ 42894,
+ 42896,
+ 42899,
+ 42912,
+ 42922,
+ 43000,
+ 43009,
+ 43011,
+ 43013,
+ 43015,
+ 43018,
+ 43020,
+ 43042,
+ 43072,
+ 43123,
+ 43138,
+ 43187,
+ 43250,
+ 43255,
+ 43259,
+ 43259,
+ 43274,
+ 43301,
+ 43312,
+ 43334,
+ 43360,
+ 43388,
+ 43396,
+ 43442,
+ 43471,
+ 43471,
+ 43520,
+ 43560,
+ 43584,
+ 43586,
+ 43588,
+ 43595,
+ 43616,
+ 43638,
+ 43642,
+ 43642,
+ 43648,
+ 43695,
+ 43697,
+ 43697,
+ 43701,
+ 43702,
+ 43705,
+ 43709,
+ 43712,
+ 43712,
+ 43714,
+ 43714,
+ 43739,
+ 43741,
+ 43744,
+ 43754,
+ 43762,
+ 43764,
+ 43777,
+ 43782,
+ 43785,
+ 43790,
+ 43793,
+ 43798,
+ 43808,
+ 43814,
+ 43816,
+ 43822,
+ 43968,
+ 44002,
+ 44032,
+ 44032,
+ 55203,
+ 55203,
+ 55216,
+ 55238,
+ 55243,
+ 55291,
+ 63744,
+ 64109,
+ 64112,
+ 64217,
+ 64256,
+ 64262,
+ 64275,
+ 64279,
+ 64285,
+ 64285,
+ 64287,
+ 64296,
+ 64298,
+ 64310,
+ 64312,
+ 64316,
+ 64318,
+ 64318,
+ 64320,
+ 64321,
+ 64323,
+ 64324,
+ 64326,
+ 64433,
+ 64467,
+ 64829,
+ 64848,
+ 64911,
+ 64914,
+ 64967,
+ 65008,
+ 65019,
+ 65136,
+ 65140,
+ 65142,
+ 65276,
+ 65313,
+ 65338,
+ 65345,
+ 65370,
+ 65382,
+ 65470,
+ 65474,
+ 65479,
+ 65482,
+ 65487,
+ 65490,
+ 65495,
+ 65498,
+ 65500
+ ];
+ var unicodeES5IdCont = [
+ 768,
+ 879,
+ 1155,
+ 1159,
+ 1425,
+ 1469,
+ 1471,
+ 1471,
+ 1473,
+ 1474,
+ 1476,
+ 1477,
+ 1479,
+ 1479,
+ 1552,
+ 1562,
+ 1611,
+ 1641,
+ 1648,
+ 1648,
+ 1750,
+ 1756,
+ 1759,
+ 1764,
+ 1767,
+ 1768,
+ 1770,
+ 1773,
+ 1776,
+ 1785,
+ 1809,
+ 1809,
+ 1840,
+ 1866,
+ 1958,
+ 1968,
+ 1984,
+ 1993,
+ 2027,
+ 2035,
+ 2070,
+ 2073,
+ 2075,
+ 2083,
+ 2085,
+ 2087,
+ 2089,
+ 2093,
+ 2137,
+ 2139,
+ 2276,
+ 2302,
+ 2304,
+ 2307,
+ 2362,
+ 2364,
+ 2366,
+ 2383,
+ 2385,
+ 2391,
+ 2402,
+ 2403,
+ 2406,
+ 2415,
+ 2433,
+ 2435,
+ 2492,
+ 2492,
+ 2494,
+ 2500,
+ 2503,
+ 2504,
+ 2507,
+ 2509,
+ 2519,
+ 2519,
+ 2530,
+ 2531,
+ 2534,
+ 2543,
+ 2561,
+ 2563,
+ 2620,
+ 2620,
+ 2622,
+ 2626,
+ 2631,
+ 2632,
+ 2635,
+ 2637,
+ 2641,
+ 2641,
+ 2662,
+ 2673,
+ 2677,
+ 2677,
+ 2689,
+ 2691,
+ 2748,
+ 2748,
+ 2750,
+ 2757,
+ 2759,
+ 2761,
+ 2763,
+ 2765,
+ 2786,
+ 2787,
+ 2790,
+ 2799,
+ 2817,
+ 2819,
+ 2876,
+ 2876,
+ 2878,
+ 2884,
+ 2887,
+ 2888,
+ 2891,
+ 2893,
+ 2902,
+ 2903,
+ 2914,
+ 2915,
+ 2918,
+ 2927,
+ 2946,
+ 2946,
+ 3006,
+ 3010,
+ 3014,
+ 3016,
+ 3018,
+ 3021,
+ 3031,
+ 3031,
+ 3046,
+ 3055,
+ 3073,
+ 3075,
+ 3134,
+ 3140,
+ 3142,
+ 3144,
+ 3146,
+ 3149,
+ 3157,
+ 3158,
+ 3170,
+ 3171,
+ 3174,
+ 3183,
+ 3202,
+ 3203,
+ 3260,
+ 3260,
+ 3262,
+ 3268,
+ 3270,
+ 3272,
+ 3274,
+ 3277,
+ 3285,
+ 3286,
+ 3298,
+ 3299,
+ 3302,
+ 3311,
+ 3330,
+ 3331,
+ 3390,
+ 3396,
+ 3398,
+ 3400,
+ 3402,
+ 3405,
+ 3415,
+ 3415,
+ 3426,
+ 3427,
+ 3430,
+ 3439,
+ 3458,
+ 3459,
+ 3530,
+ 3530,
+ 3535,
+ 3540,
+ 3542,
+ 3542,
+ 3544,
+ 3551,
+ 3570,
+ 3571,
+ 3633,
+ 3633,
+ 3636,
+ 3642,
+ 3655,
+ 3662,
+ 3664,
+ 3673,
+ 3761,
+ 3761,
+ 3764,
+ 3769,
+ 3771,
+ 3772,
+ 3784,
+ 3789,
+ 3792,
+ 3801,
+ 3864,
+ 3865,
+ 3872,
+ 3881,
+ 3893,
+ 3893,
+ 3895,
+ 3895,
+ 3897,
+ 3897,
+ 3902,
+ 3903,
+ 3953,
+ 3972,
+ 3974,
+ 3975,
+ 3981,
+ 3991,
+ 3993,
+ 4028,
+ 4038,
+ 4038,
+ 4139,
+ 4158,
+ 4160,
+ 4169,
+ 4182,
+ 4185,
+ 4190,
+ 4192,
+ 4194,
+ 4196,
+ 4199,
+ 4205,
+ 4209,
+ 4212,
+ 4226,
+ 4237,
+ 4239,
+ 4253,
+ 4957,
+ 4959,
+ 5906,
+ 5908,
+ 5938,
+ 5940,
+ 5970,
+ 5971,
+ 6002,
+ 6003,
+ 6068,
+ 6099,
+ 6109,
+ 6109,
+ 6112,
+ 6121,
+ 6155,
+ 6157,
+ 6160,
+ 6169,
+ 6313,
+ 6313,
+ 6432,
+ 6443,
+ 6448,
+ 6459,
+ 6470,
+ 6479,
+ 6576,
+ 6592,
+ 6600,
+ 6601,
+ 6608,
+ 6617,
+ 6679,
+ 6683,
+ 6741,
+ 6750,
+ 6752,
+ 6780,
+ 6783,
+ 6793,
+ 6800,
+ 6809,
+ 6912,
+ 6916,
+ 6964,
+ 6980,
+ 6992,
+ 7001,
+ 7019,
+ 7027,
+ 7040,
+ 7042,
+ 7073,
+ 7085,
+ 7088,
+ 7097,
+ 7142,
+ 7155,
+ 7204,
+ 7223,
+ 7232,
+ 7241,
+ 7248,
+ 7257,
+ 7376,
+ 7378,
+ 7380,
+ 7400,
+ 7405,
+ 7405,
+ 7410,
+ 7412,
+ 7616,
+ 7654,
+ 7676,
+ 7679,
+ 8204,
+ 8205,
+ 8255,
+ 8256,
+ 8276,
+ 8276,
+ 8400,
+ 8412,
+ 8417,
+ 8417,
+ 8421,
+ 8432,
+ 11503,
+ 11505,
+ 11647,
+ 11647,
+ 11744,
+ 11775,
+ 12330,
+ 12335,
+ 12441,
+ 12442,
+ 42528,
+ 42537,
+ 42607,
+ 42607,
+ 42612,
+ 42621,
+ 42655,
+ 42655,
+ 42736,
+ 42737,
+ 43010,
+ 43010,
+ 43014,
+ 43014,
+ 43019,
+ 43019,
+ 43043,
+ 43047,
+ 43136,
+ 43137,
+ 43188,
+ 43204,
+ 43216,
+ 43225,
+ 43232,
+ 43249,
+ 43264,
+ 43273,
+ 43302,
+ 43309,
+ 43335,
+ 43347,
+ 43392,
+ 43395,
+ 43443,
+ 43456,
+ 43472,
+ 43481,
+ 43561,
+ 43574,
+ 43587,
+ 43587,
+ 43596,
+ 43597,
+ 43600,
+ 43609,
+ 43643,
+ 43643,
+ 43696,
+ 43696,
+ 43698,
+ 43700,
+ 43703,
+ 43704,
+ 43710,
+ 43711,
+ 43713,
+ 43713,
+ 43755,
+ 43759,
+ 43765,
+ 43766,
+ 44003,
+ 44010,
+ 44012,
+ 44013,
+ 44016,
+ 44025,
+ 64286,
+ 64286,
+ 65024,
+ 65039,
+ 65056,
+ 65062,
+ 65075,
+ 65076,
+ 65101,
+ 65103,
+ 65296,
+ 65305,
+ 65343,
+ 65343
+ ];
+ function LexLookUpUnicodeMap(code, map) {
+ var lo = 0;
+ var hi = map.length;
+ var mid;
+ while(lo + 1 < hi) {
+ mid = lo + (hi - lo) / 2;
+ mid -= mid % 2;
+ if(map[mid] <= code && code <= map[mid + 1]) {
+ return true;
+ }
+ if(code < map[mid]) {
+ hi = mid;
+ } else {
+ lo = mid + 2;
+ }
+ }
+ return false;
+ }
+ TypeScript.LexLookUpUnicodeMap = LexLookUpUnicodeMap;
+ function LexIsUnicodeDigit(code) {
+ if(TypeScript.codeGenTarget == TypeScript.CodeGenTarget.ES3) {
+ return LexLookUpUnicodeMap(code, unicodeES3IdCont);
+ } else {
+ return LexLookUpUnicodeMap(code, unicodeES5IdCont);
+ }
+ }
+ TypeScript.LexIsUnicodeDigit = LexIsUnicodeDigit;
+ function LexIsUnicodeIdStart(code) {
+ if(TypeScript.codeGenTarget == TypeScript.CodeGenTarget.ES3) {
+ return LexLookUpUnicodeMap(code, unicodeES3IdStart);
+ } else {
+ return LexLookUpUnicodeMap(code, unicodeES5IdStart);
+ }
+ }
+ TypeScript.LexIsUnicodeIdStart = LexIsUnicodeIdStart;
+ function LexInitialize() {
+ TypeScript.initializeStaticTokens();
+ autoToken[TypeScript.LexCodeLPR] = TypeScript.staticTokens[TypeScript.TokenID.OpenParen];
+ autoToken[TypeScript.LexCodeRPR] = TypeScript.staticTokens[TypeScript.TokenID.CloseParen];
+ autoToken[TypeScript.LexCodeCMA] = TypeScript.staticTokens[TypeScript.TokenID.Comma];
+ autoToken[TypeScript.LexCodeSMC] = TypeScript.staticTokens[TypeScript.TokenID.Semicolon];
+ autoToken[TypeScript.LexCodeLBR] = TypeScript.staticTokens[TypeScript.TokenID.OpenBracket];
+ autoToken[TypeScript.LexCodeRBR] = TypeScript.staticTokens[TypeScript.TokenID.CloseBracket];
+ autoToken[TypeScript.LexCodeTIL] = TypeScript.staticTokens[TypeScript.TokenID.Tilde];
+ autoToken[TypeScript.LexCodeQUE] = TypeScript.staticTokens[TypeScript.TokenID.Question];
+ autoToken[TypeScript.LexCodeLC] = TypeScript.staticTokens[TypeScript.TokenID.OpenBrace];
+ autoToken[TypeScript.LexCodeRC] = TypeScript.staticTokens[TypeScript.TokenID.CloseBrace];
+ autoToken[TypeScript.LexCodeCOL] = TypeScript.staticTokens[TypeScript.TokenID.Colon];
+ TypeScript.LexKeywordTable = new TypeScript.StringHashTable();
+ for(var i in (TypeScript.TokenID)._map) {
+ if((i) <= TypeScript.TokenID.LimKeyword) {
+ TypeScript.LexKeywordTable.add((TypeScript.TokenID)._map[i].toLowerCase(), i);
+ }
+ }
+ for(var j = 0; j < TypeScript.LexCodeASCIIChars; j++) {
+ if(LexIsIdentifierStartChar(j)) {
+ lexIdStartTable[j] = true;
+ } else {
+ lexIdStartTable[j] = false;
+ }
+ }
+ }
+ TypeScript.LexInitialize = LexInitialize;
+ function LexAdjustIndent(code, indentAmt) {
+ if((code == TypeScript.LexCodeLBR) || (code == TypeScript.LexCodeLC) || (code == TypeScript.LexCodeLPR)) {
+ return indentAmt + 1;
+ } else {
+ if((code == TypeScript.LexCodeRBR) || (code == TypeScript.LexCodeRC) || (code == TypeScript.LexCodeRPR)) {
+ return indentAmt - 1;
+ } else {
+ return indentAmt;
+ }
+ }
+ }
+ TypeScript.LexAdjustIndent = LexAdjustIndent;
+ function LexIsIdentifierStartChar(code) {
+ return (((code >= 97) && (code <= 122)) || ((code >= 65) && (code <= 90)) || (code == TypeScript.LexCodeDollar) || (code == TypeScript.LexCodeUnderscore));
+ }
+ TypeScript.LexIsIdentifierStartChar = LexIsIdentifierStartChar;
+ function LexIsDigit(code) {
+ return ((code >= 48) && (code <= 57));
+ }
+ TypeScript.LexIsDigit = LexIsDigit;
+ function LexIsIdentifierChar(code) {
+ return lexIdStartTable[code] || LexIsDigit(code);
+ }
+ TypeScript.LexIsIdentifierChar = LexIsIdentifierChar;
+ function LexMatchingOpen(code) {
+ if(code == TypeScript.LexCodeRBR) {
+ return TypeScript.LexCodeLBR;
+ } else {
+ if(code == TypeScript.LexCodeRC) {
+ return TypeScript.LexCodeLC;
+ } else {
+ if(code == TypeScript.LexCodeRPR) {
+ return TypeScript.LexCodeLPR;
+ } else {
+ return 0;
+ }
+ }
+ }
+ }
+ TypeScript.LexMatchingOpen = LexMatchingOpen;
+ (function (NumberScanState) {
+ NumberScanState._map = [];
+ NumberScanState._map[0] = "Start";
+ NumberScanState.Start = 0;
+ NumberScanState._map[1] = "InFraction";
+ NumberScanState.InFraction = 1;
+ NumberScanState._map[2] = "InEmptyFraction";
+ NumberScanState.InEmptyFraction = 2;
+ NumberScanState._map[3] = "InExponent";
+ NumberScanState.InExponent = 3;
+ })(TypeScript.NumberScanState || (TypeScript.NumberScanState = {}));
+ var NumberScanState = TypeScript.NumberScanState;
+ (function (LexState) {
+ LexState._map = [];
+ LexState._map[0] = "Start";
+ LexState.Start = 0;
+ LexState._map[1] = "InMultilineComment";
+ LexState.InMultilineComment = 1;
+ LexState._map[2] = "InMultilineSingleQuoteString";
+ LexState.InMultilineSingleQuoteString = 2;
+ LexState._map[3] = "InMultilineDoubleQuoteString";
+ LexState.InMultilineDoubleQuoteString = 3;
+ })(TypeScript.LexState || (TypeScript.LexState = {}));
+ var LexState = TypeScript.LexState;
+ (function (LexMode) {
+ LexMode._map = [];
+ LexMode._map[0] = "Line";
+ LexMode.Line = 0;
+ LexMode._map[1] = "File";
+ LexMode.File = 1;
+ })(TypeScript.LexMode || (TypeScript.LexMode = {}));
+ var LexMode = TypeScript.LexMode;
+ (function (CommentStyle) {
+ CommentStyle._map = [];
+ CommentStyle._map[0] = "Line";
+ CommentStyle.Line = 0;
+ CommentStyle._map[1] = "Block";
+ CommentStyle.Block = 1;
+ })(TypeScript.CommentStyle || (TypeScript.CommentStyle = {}));
+ var CommentStyle = TypeScript.CommentStyle;
+ var StringSourceText = (function () {
+ function StringSourceText(text) {
+ this.text = text;
+ }
+ StringSourceText.prototype.getText = function (start, end) {
+ return this.text.substring(start, end);
+ };
+ StringSourceText.prototype.getLength = function () {
+ return this.text.length;
+ };
+ return StringSourceText;
+ })();
+ TypeScript.StringSourceText = StringSourceText;
+ var SourceTextSegment = (function () {
+ function SourceTextSegment(segmentStart, segmentEnd, segment) {
+ this.segmentStart = segmentStart;
+ this.segmentEnd = segmentEnd;
+ this.segment = segment;
+ }
+ SourceTextSegment.prototype.charCodeAt = function (index) {
+ return this.segment.charCodeAt(index - this.segmentStart);
+ };
+ SourceTextSegment.prototype.substring = function (start, end) {
+ return this.segment.substring(start - this.segmentStart, end - this.segmentStart);
+ };
+ return SourceTextSegment;
+ })();
+ TypeScript.SourceTextSegment = SourceTextSegment;
+ var AggerateSourceTextSegment = (function () {
+ function AggerateSourceTextSegment(seg1, seg2) {
+ this.seg1 = seg1;
+ this.seg2 = seg2;
+ }
+ AggerateSourceTextSegment.prototype.charCodeAt = function (index) {
+ if(this.seg1.segmentStart <= index && index < this.seg1.segmentEnd) {
+ return this.seg1.segment.charCodeAt(index - this.seg1.segmentStart);
+ }
+ return this.seg2.segment.charCodeAt(index - this.seg2.segmentStart);
+ };
+ AggerateSourceTextSegment.prototype.substring = function (start, end) {
+ if(this.seg1.segmentStart <= start && end <= this.seg1.segmentEnd) {
+ return this.seg1.segment.substring(start - this.seg1.segmentStart, end - this.seg1.segmentStart);
+ }
+ return this.seg2.segment.substring(start - this.seg2.segmentStart) + this.seg1.segment.substring(0, end - this.seg1.segmentStart);
+ };
+ return AggerateSourceTextSegment;
+ })();
+ TypeScript.AggerateSourceTextSegment = AggerateSourceTextSegment;
+ var ScannerTextStream = (function () {
+ function ScannerTextStream(sourceText) {
+ this.sourceText = sourceText;
+ this.agg = new AggerateSourceTextSegment(ScannerTextStream.emptySegment, ScannerTextStream.emptySegment);
+ this.len = this.sourceText.getLength();
+ }
+ ScannerTextStream.emptySegment = new SourceTextSegment(0, 0, "");
+ ScannerTextStream.prototype.max = function (a, b) {
+ return a >= b ? a : b;
+ };
+ ScannerTextStream.prototype.min = function (a, b) {
+ return a <= b ? a : b;
+ };
+ ScannerTextStream.prototype.fetchSegment = function (start, end) {
+ if(this.agg.seg1.segmentStart <= start && end <= this.agg.seg1.segmentEnd) {
+ return this.agg.seg1;
+ }
+ if(this.agg.seg2.segmentStart <= start && end <= this.agg.seg1.segmentEnd) {
+ return this.agg;
+ }
+ var prev = this.agg.seg1;
+ var s = prev.segmentEnd;
+ var e = TypeScript.max(s + 512, end);
+ e = TypeScript.min(e, this.len);
+ var src = this.sourceText.getText(s, e);
+ var newSeg = new SourceTextSegment(s, e, src);
+ this.agg.seg2 = prev;
+ this.agg.seg1 = newSeg;
+ return this.agg;
+ };
+ ScannerTextStream.prototype.charCodeAt = function (index) {
+ return this.fetchSegment(index, index + 1).charCodeAt(index);
+ };
+ ScannerTextStream.prototype.substring = function (start, end) {
+ return this.fetchSegment(start, end).substring(start, end);
+ };
+ return ScannerTextStream;
+ })();
+ TypeScript.ScannerTextStream = ScannerTextStream;
+ var SavedTokens = (function () {
+ function SavedTokens() {
+ this.prevToken = null;
+ this.curSavedToken = null;
+ this.prevSavedToken = null;
+ this.prevToken = null;
+ this.currentToken = 0;
+ this.tokens = new Array();
+ this.seenUnicodeChar = false;
+ this.seenUnicodeCharInComment = false;
+ this.prevLine = 1;
+ this.line = 1;
+ this.col = 0;
+ this.lexState = LexState.Start;
+ this.commentStack = new Array();
+ this.lineMap = [];
+ }
+ SavedTokens.prototype.previousToken = function () {
+ return this.prevToken;
+ };
+ SavedTokens.prototype.close = function () {
+ this.currentToken = 0;
+ };
+ SavedTokens.prototype.addToken = function (tok, scanner) {
+ this.tokens[this.currentToken++] = new TypeScript.SavedToken(tok, scanner.startPos, scanner.pos);
+ };
+ SavedTokens.prototype.scan = function () {
+ this.startLine = this.line;
+ this.startPos = this.col;
+ if(this.currentTokenIndex == this.currentTokens.length) {
+ if(this.line < this.lineMap.length) {
+ this.line++;
+ this.col = 0;
+ this.currentTokenIndex = 0;
+ this.currentTokens = this.tokensByLine[this.line];
+ } else {
+ return TypeScript.staticTokens[TypeScript.TokenID.EndOfFile];
+ }
+ }
+ if(this.currentTokenIndex < this.currentTokens.length) {
+ this.prevToken = this.curSavedToken.tok;
+ this.prevSavedToken = this.curSavedToken;
+ this.curSavedToken = this.currentTokens[this.currentTokenIndex++];
+ var curToken = this.curSavedToken.tok;
+ this.pos = this.curSavedToken.limChar;
+ this.col += (this.curSavedToken.limChar - this.curSavedToken.minChar);
+ this.startPos = this.curSavedToken.minChar;
+ this.prevLine = this.line;
+ return curToken;
+ } else {
+ return TypeScript.staticTokens[TypeScript.TokenID.EndOfFile];
+ }
+ };
+ SavedTokens.prototype.syncToTok = function (offset) {
+ this.line = getLineNumberFromPosition(this.lineMap, offset);
+ this.currentTokenIndex = 0;
+ var tmpCol = offset - this.lineMap[this.line];
+ while((this.lexStateByLine[this.line] == LexState.InMultilineComment) && (this.line > 0)) {
+ this.line--;
+ tmpCol = 0;
+ }
+ var lenMin1 = this.lineMap.length - 1;
+ this.currentTokens = this.tokensByLine[this.line];
+ while((this.currentTokens.length == 0) && (this.line < lenMin1)) {
+ this.line++;
+ this.currentTokens = this.tokensByLine[this.line];
+ tmpCol = 0;
+ }
+ if(this.line <= lenMin1) {
+ while((this.currentTokenIndex < this.currentTokens.length) && (tmpCol > this.currentTokens[this.currentTokenIndex].limChar)) {
+ this.currentTokenIndex++;
+ }
+ if(this.currentTokenIndex < this.currentTokens.length) {
+ this.col = this.currentTokens[this.currentTokenIndex].minChar;
+ return this.col + this.lineMap[this.line];
+ }
+ }
+ return -1;
+ };
+ SavedTokens.prototype.lastTokenLimChar = function () {
+ if(this.prevSavedToken !== null) {
+ return this.prevSavedToken.limChar;
+ } else {
+ return 0;
+ }
+ };
+ SavedTokens.prototype.lastTokenHadNewline = function () {
+ return this.prevLine != this.startLine;
+ };
+ SavedTokens.prototype.pushComment = function (comment) {
+ this.commentStack.push(comment);
+ };
+ SavedTokens.prototype.getComments = function () {
+ var stack = this.commentStack;
+ this.commentStack = [];
+ return stack;
+ };
+ SavedTokens.prototype.getCommentsForLine = function (line) {
+ var comments = null;
+ while((this.commentStack.length > 0) && (this.commentStack[0].line == line)) {
+ if(comments == null) {
+ comments = [
+ this.commentStack.shift()
+ ];
+ } else {
+ comments = comments.concat([
+ this.commentStack.shift()
+ ]);
+ }
+ }
+ return comments;
+ };
+ SavedTokens.prototype.resetComments = function () {
+ this.commentStack = [];
+ };
+ SavedTokens.prototype.setSourceText = function (newSrc, textMode) {
+ };
+ SavedTokens.prototype.setErrorHandler = function (reportError) {
+ };
+ SavedTokens.prototype.getLookAheadToken = function () {
+ throw new Error("Invalid operation.");
+ };
+ return SavedTokens;
+ })();
+ TypeScript.SavedTokens = SavedTokens;
+ var Scanner = (function () {
+ function Scanner() {
+ this.prevLine = 1;
+ this.line = 1;
+ this.col = 0;
+ this.pos = 0;
+ this.startPos = 0;
+ this.len = 0;
+ this.lineMap = [];
+ this.ch = TypeScript.LexEOF;
+ this.lexState = LexState.Start;
+ this.mode = LexMode.File;
+ this.scanComments = true;
+ this.interveningWhitespace = false;
+ this.interveningWhitespacePos = 0;
+ this.leftCurlyCount = 0;
+ this.rightCurlyCount = 0;
+ this.commentStack = new Array();
+ this.saveScan = null;
+ this.seenUnicodeChar = false;
+ this.seenUnicodeCharInComment = false;
+ this.prevTok = TypeScript.staticTokens[TypeScript.TokenID.EndOfFile];
+ this.startCol = this.col;
+ this.startLine = this.line;
+ this.lineMap[1] = 0;
+ if(!TypeScript.LexKeywordTable) {
+ LexInitialize();
+ }
+ }
+ Scanner.prototype.previousToken = function () {
+ return this.prevTok;
+ };
+ Scanner.prototype.setSourceText = function (newSrc, textMode) {
+ this.mode = textMode;
+ this.scanComments = (this.mode === LexMode.Line);
+ this.pos = 0;
+ this.interveningWhitespacePos = 0;
+ this.startPos = 0;
+ this.line = 1;
+ this.col = 0;
+ this.startCol = this.col;
+ this.startLine = this.line;
+ this.len = 0;
+ this.src = newSrc.getText(0, newSrc.getLength());
+ this.len = this.src.length;
+ this.lineMap = [];
+ this.lineMap[1] = 0;
+ this.commentStack = [];
+ this.leftCurlyCount = 0;
+ this.rightCurlyCount = 0;
+ this.seenUnicodeChar = false;
+ this.seenUnicodeCharInComment = false;
+ };
+ Scanner.prototype.setErrorHandler = function (reportError) {
+ this.reportError = reportError;
+ };
+ Scanner.prototype.setSaveScan = function (savedTokens) {
+ this.saveScan = savedTokens;
+ };
+ Scanner.prototype.setText = function (newSrc, textMode) {
+ this.setSourceText(new StringSourceText(newSrc), textMode);
+ };
+ Scanner.prototype.setScanComments = function (value) {
+ this.scanComments = value;
+ };
+ Scanner.prototype.getLexState = function () {
+ return this.lexState;
+ };
+ Scanner.prototype.tokenStart = function () {
+ this.startPos = this.pos;
+ this.startLine = this.line;
+ this.startCol = this.col;
+ this.interveningWhitespace = false;
+ };
+ Scanner.prototype.peekChar = function () {
+ if(this.pos < this.len) {
+ return this.src.charCodeAt(this.pos);
+ } else {
+ return TypeScript.LexEOF;
+ }
+ };
+ Scanner.prototype.peekCharAt = function (index) {
+ if(index < this.len) {
+ return this.src.charCodeAt(index);
+ } else {
+ return TypeScript.LexEOF;
+ }
+ };
+ Scanner.prototype.IsHexDigit = function (c) {
+ return ((c >= TypeScript.LexCode_0) && (c <= TypeScript.LexCode_9)) || ((c >= TypeScript.LexCode_A) && (c <= TypeScript.LexCode_F)) || ((c >= TypeScript.LexCode_a) && (c <= TypeScript.LexCode_f));
+ };
+ Scanner.prototype.IsOctalDigit = function (c) {
+ return ((c >= TypeScript.LexCode_0) && (c <= TypeScript.LexCode_7)) || ((c >= TypeScript.LexCode_a) && (c <= TypeScript.LexCode_f));
+ };
+ Scanner.prototype.scanHexDigits = function () {
+ var atLeastOneDigit = false;
+ for(; ; ) {
+ if(this.IsHexDigit(this.ch)) {
+ this.nextChar();
+ atLeastOneDigit = true;
+ } else {
+ if(atLeastOneDigit) {
+ return new TypeScript.NumberLiteralToken(parseInt(this.src.substring(this.startPos, this.pos)));
+ } else {
+ return null;
+ }
+ }
+ }
+ };
+ Scanner.prototype.scanOctalDigits = function () {
+ var atLeastOneDigit = false;
+ for(; ; ) {
+ if(this.IsOctalDigit(this.ch)) {
+ this.nextChar();
+ atLeastOneDigit = true;
+ } else {
+ if(atLeastOneDigit) {
+ return new TypeScript.NumberLiteralToken(parseInt(this.src.substring(this.startPos, this.pos)));
+ } else {
+ return null;
+ }
+ }
+ }
+ };
+ Scanner.prototype.scanDecimalNumber = function (state) {
+ var atLeastOneDigit = false;
+ var svPos = this.pos;
+ var svCol = this.col;
+ for(; ; ) {
+ if(LexIsDigit(this.ch)) {
+ atLeastOneDigit = true;
+ if(this.ch != TypeScript.LexCode_0 && state == NumberScanState.InEmptyFraction) {
+ state = NumberScanState.InFraction;
+ }
+ this.nextChar();
+ } else {
+ if(this.ch == TypeScript.LexCodeDOT) {
+ if(state == NumberScanState.Start) {
+ this.nextChar();
+ state = NumberScanState.InEmptyFraction;
+ } else {
+ if(atLeastOneDigit) {
+ return new TypeScript.NumberLiteralToken(parseFloat(this.src.substring(this.startPos, this.pos)), state == NumberScanState.InEmptyFraction);
+ } else {
+ this.pos = svPos;
+ this.col = svCol;
+ return null;
+ }
+ }
+ } else {
+ if((this.ch == TypeScript.LexCode_e) || (this.ch == TypeScript.LexCode_E)) {
+ if(state == NumberScanState.Start) {
+ if(atLeastOneDigit) {
+ atLeastOneDigit = false;
+ this.nextChar();
+ state = NumberScanState.InExponent;
+ } else {
+ this.pos = svPos;
+ this.col = svCol;
+ return null;
+ }
+ } else {
+ if(state == NumberScanState.InFraction || state == NumberScanState.InEmptyFraction) {
+ this.nextChar();
+ state = NumberScanState.InExponent;
+ atLeastOneDigit = false;
+ } else {
+ if(atLeastOneDigit) {
+ return new TypeScript.NumberLiteralToken(parseFloat(this.src.substring(this.startPos, this.pos)));
+ } else {
+ this.pos = svPos;
+ this.col = svCol;
+ return null;
+ }
+ }
+ }
+ } else {
+ if((this.ch == TypeScript.LexCodePLS) || (this.ch == TypeScript.LexCodeMIN)) {
+ if(state == NumberScanState.InExponent) {
+ if(!atLeastOneDigit) {
+ this.nextChar();
+ } else {
+ this.pos = svPos;
+ this.col = svCol;
+ return null;
+ }
+ } else {
+ if(state == NumberScanState.InEmptyFraction || state == NumberScanState.InFraction) {
+ return new TypeScript.NumberLiteralToken(parseFloat(this.src.substring(this.startPos, this.pos)), state == NumberScanState.InEmptyFraction);
+ } else {
+ if(!atLeastOneDigit) {
+ this.pos = svPos;
+ this.col = svCol;
+ return null;
+ } else {
+ return new TypeScript.NumberLiteralToken(parseFloat(this.src.substring(this.startPos, this.pos)));
+ }
+ }
+ }
+ } else {
+ if(!atLeastOneDigit) {
+ this.pos = svPos;
+ this.col = svCol;
+ return null;
+ } else {
+ return new TypeScript.NumberLiteralToken(parseFloat(this.src.substring(this.startPos, this.pos)), state == NumberScanState.InEmptyFraction);
+ }
+ }
+ }
+ }
+ }
+ }
+ };
+ Scanner.prototype.scanNumber = function () {
+ if(this.peekChar() == TypeScript.LexCode_0) {
+ switch(this.peekCharAt(this.pos + 1)) {
+ case TypeScript.LexCode_x:
+ case TypeScript.LexCode_X: {
+ this.advanceChar(2);
+ return this.scanHexDigits();
+
+ }
+ case TypeScript.LexCode_8:
+ case TypeScript.LexCode_9:
+ case TypeScript.LexCodeDOT: {
+ return this.scanDecimalNumber(NumberScanState.Start);
+
+ }
+ default: {
+ return this.scanOctalDigits();
+
+ }
+ }
+ } else {
+ return this.scanDecimalNumber(NumberScanState.Start);
+ }
+ };
+ Scanner.prototype.scanFraction = function () {
+ return this.scanDecimalNumber(NumberScanState.InFraction);
+ };
+ Scanner.prototype.newLine = function () {
+ this.col = 0;
+ if(this.mode == LexMode.File) {
+ this.line++;
+ this.lineMap[this.line] = this.pos + 1;
+ }
+ };
+ Scanner.prototype.finishMultilineComment = function () {
+ var ch2;
+ this.lexState = LexState.InMultilineComment;
+ while(this.pos < this.len) {
+ if(this.ch == TypeScript.LexCodeMUL) {
+ ch2 = this.peekCharAt(this.pos + 1);
+ if(ch2 == TypeScript.LexCodeSLH) {
+ this.advanceChar(2);
+ if(this.mode == LexMode.File) {
+ this.tokenStart();
+ }
+ this.lexState = LexState.Start;
+ return true;
+ }
+ } else {
+ if(this.ch == TypeScript.LexCodeNWL) {
+ this.newLine();
+ if(this.mode == LexMode.Line) {
+ this.nextChar();
+ return false;
+ }
+ } else {
+ if(this.ch >= TypeScript.LexCodeASCIIChars) {
+ this.seenUnicodeCharInComment = true;
+ }
+ }
+ }
+ this.nextChar();
+ }
+ return false;
+ };
+ Scanner.prototype.pushComment = function (comment) {
+ this.commentStack.push(comment);
+ };
+ Scanner.prototype.getComments = function () {
+ var stack = this.commentStack;
+ this.commentStack = [];
+ return stack;
+ };
+ Scanner.prototype.getCommentsForLine = function (line) {
+ var comments = null;
+ while((this.commentStack.length > 0) && (this.commentStack[0].line == line)) {
+ if(comments == null) {
+ comments = [
+ this.commentStack.shift()
+ ];
+ } else {
+ comments = comments.concat([
+ this.commentStack.shift()
+ ]);
+ }
+ }
+ return comments;
+ };
+ Scanner.prototype.resetComments = function () {
+ this.commentStack = [];
+ };
+ Scanner.prototype.endsLine = function (c) {
+ return (c == TypeScript.LexCodeNWL) || (c == TypeScript.LexCodeRET) || (c == TypeScript.LexCodeLS) || (c == TypeScript.LexCodePS);
+ };
+ Scanner.prototype.finishSinglelineComment = function () {
+ while(this.pos < this.len) {
+ if(this.endsLine(this.ch)) {
+ break;
+ }
+ if(this.ch >= TypeScript.LexCodeASCIIChars) {
+ this.seenUnicodeCharInComment = true;
+ }
+ this.nextChar();
+ }
+ if(this.mode == LexMode.File) {
+ this.tokenStart();
+ }
+ };
+ Scanner.prototype.tokenText = function () {
+ return this.src.substring(this.startPos, this.pos);
+ };
+ Scanner.prototype.findClosingSLH = function () {
+ var index = this.pos;
+ var ch2 = this.src.charCodeAt(index);
+ var prevCh = 0;
+ var liveEsc = false;
+ while(!this.endsLine(ch2) && (index < this.len)) {
+ if((ch2 == TypeScript.LexCodeSLH) && (!liveEsc)) {
+ return index;
+ }
+ prevCh = ch2;
+ index++;
+ if(liveEsc) {
+ liveEsc = false;
+ } else {
+ liveEsc = (prevCh == TypeScript.LexCodeBSL);
+ }
+ ch2 = this.src.charCodeAt(index);
+ }
+ return -1;
+ };
+ Scanner.prototype.speculateRegex = function () {
+ if(TypeScript.noRegexTable[this.prevTok.tokenId] != undefined) {
+ return null;
+ }
+ var svPos = this.pos;
+ var svCol = this.col;
+ var index = this.findClosingSLH();
+ if(index > 0) {
+ var pattern = this.src.substring(svPos, index);
+ var flags = "";
+ this.pos = index + 1;
+ this.ch = this.peekChar();
+ var flagsStart = this.pos;
+ while((this.ch == TypeScript.LexCode_i) || (this.ch == TypeScript.LexCode_g) || (this.ch == TypeScript.LexCode_m)) {
+ this.nextChar();
+ }
+ if((this.pos - flagsStart) > 3) {
+ return null;
+ } else {
+ flags = this.src.substring(flagsStart, this.pos);
+ }
+ var regex = undefined;
+ try {
+ regex = new RegExp(pattern, flags);
+ } catch (regexException) {
+ }
+ if(regex) {
+ this.col = svCol + (this.pos - this.startPos);
+ return new TypeScript.RegularExpressionLiteralToken(regex);
+ }
+ }
+ this.pos = svPos;
+ this.col = svCol;
+ return null;
+ };
+ Scanner.prototype.lastTokenHadNewline = function () {
+ return this.prevLine != this.startLine;
+ };
+ Scanner.prototype.lastTokenLimChar = function () {
+ return this.interveningWhitespace ? this.interveningWhitespacePos : this.startPos;
+ };
+ Scanner.prototype.advanceChar = function (amt) {
+ this.pos += amt;
+ this.col += amt;
+ this.ch = this.peekChar();
+ };
+ Scanner.prototype.nextChar = function () {
+ this.pos++;
+ this.col++;
+ this.ch = this.peekChar();
+ };
+ Scanner.prototype.getLookAheadToken = function () {
+ var prevLine = this.prevLine;
+ var line = this.line;
+ var col = this.col;
+ var pos = this.pos;
+ var startPos = this.startPos;
+ var startCol = this.startCol;
+ var startLine = this.startLine;
+ var ch = this.ch;
+ var prevTok = this.prevTok;
+ var lexState = this.lexState;
+ var interveningWhitespace = this.interveningWhitespace;
+ var interveningWhitespacePos = this.interveningWhitespacePos;
+ var leftCurlyCount = this.leftCurlyCount;
+ var rightCurlyCount = this.rightCurlyCount;
+ var seenUnicodeChar = this.seenUnicodeChar;
+ var seenUnicodeCharInComment = this.seenUnicodeCharInComment;
+ var commentStackLength = this.commentStack.length;
+ var lookAheadToken = this.scan();
+ this.prevLine = prevLine;
+ this.line = line;
+ this.col = col;
+ this.pos = pos;
+ this.startPos = startPos;
+ this.startCol = startCol;
+ this.startLine = startLine;
+ this.ch = ch;
+ this.prevTok = prevTok;
+ this.lexState = lexState;
+ this.interveningWhitespace = interveningWhitespace;
+ this.interveningWhitespacePos = interveningWhitespacePos;
+ this.leftCurlyCount = leftCurlyCount;
+ this.rightCurlyCount = rightCurlyCount;
+ this.seenUnicodeChar = seenUnicodeChar;
+ this.seenUnicodeCharInComment = seenUnicodeCharInComment;
+ this.commentStack.length = commentStackLength;
+ return lookAheadToken;
+ };
+ Scanner.prototype.scanInLine = function () {
+ if((this.lexState == LexState.InMultilineComment) && (this.scanComments)) {
+ this.ch = this.peekChar();
+ var commentLine = this.line;
+ this.finishMultilineComment();
+ if(this.startPos < this.pos) {
+ var commentText = this.src.substring(this.startPos, this.pos);
+ this.tokenStart();
+ return new TypeScript.CommentToken(TypeScript.TokenID.Comment, commentText, true, this.startPos, commentLine, true);
+ } else {
+ return TypeScript.staticTokens[TypeScript.TokenID.EndOfFile];
+ }
+ } else {
+ if(this.lexState == LexState.InMultilineSingleQuoteString && this.pos < this.len) {
+ this.ch = TypeScript.LexCodeAPO;
+ this.lexState = LexState.Start;
+ return this.scanStringConstant();
+ } else {
+ if(this.lexState == LexState.InMultilineDoubleQuoteString && this.pos < this.len) {
+ this.ch = TypeScript.LexCodeQUO;
+ this.lexState = LexState.Start;
+ return this.scanStringConstant();
+ }
+ }
+ }
+ this.prevLine = this.line;
+ var prevTok = this.innerScan();
+ if(prevTok.tokenId != TypeScript.TokenID.Whitespace) {
+ this.prevTok = prevTok;
+ }
+ return prevTok;
+ };
+ Scanner.prototype.scan = function () {
+ this.prevLine = this.line;
+ this.prevTok = this.innerScan();
+ if(this.saveScan) {
+ this.saveScan.addToken(this.prevTok, this);
+ }
+ return this.prevTok;
+ };
+ Scanner.prototype.isValidUnicodeIdentifierChar = function () {
+ var valid = LexIsUnicodeIdStart(this.ch) || LexIsUnicodeDigit(this.ch);
+ this.seenUnicodeChar = this.seenUnicodeChar || valid;
+ return valid;
+ };
+ Scanner.prototype.scanStringConstant = function () {
+ var endCode = this.ch;
+ this.nextChar();
+ scanStringConstantLoop:
+for(; ; ) {
+ switch(this.ch) {
+ case TypeScript.LexEOF: {
+ this.reportScannerError("Unterminated string constant");
+ break scanStringConstantLoop;
+
+ }
+ case TypeScript.LexCodeLS:
+ case TypeScript.LexCodePS: {
+ this.seenUnicodeChar = true;
+
+ }
+ case TypeScript.LexCodeRET:
+ case TypeScript.LexCodeNWL: {
+ this.reportScannerError("Unterminated string constant");
+ break scanStringConstantLoop;
+
+ }
+ case TypeScript.LexCodeAPO:
+ case TypeScript.LexCodeQUO: {
+ if(this.ch == endCode) {
+ this.nextChar();
+ break scanStringConstantLoop;
+ }
+ break;
+
+ }
+ case TypeScript.LexCodeBSL: {
+ this.nextChar();
+ switch(this.ch) {
+ case TypeScript.LexCodeAPO:
+ case TypeScript.LexCodeQUO:
+ case TypeScript.LexCodeBSL: {
+ this.nextChar();
+ continue scanStringConstantLoop;
+
+ }
+ case TypeScript.LexCodeLS:
+ case TypeScript.LexCodePS: {
+ this.seenUnicodeChar = true;
+
+ }
+ case TypeScript.LexCodeRET:
+ case TypeScript.LexCodeNWL: {
+ if(this.ch == TypeScript.LexCodeRET && this.peekCharAt(this.pos + 1) == TypeScript.LexCodeNWL) {
+ this.nextChar();
+ }
+ this.nextChar();
+ this.newLine();
+ if(this.mode == LexMode.Line) {
+ this.lexState = endCode == TypeScript.LexCodeAPO ? LexState.InMultilineSingleQuoteString : LexState.InMultilineDoubleQuoteString;
+ break scanStringConstantLoop;
+ }
+ break;
+
+ }
+ case TypeScript.LexCode_x:
+ case TypeScript.LexCode_u: {
+ var expectedHexDigits = this.ch == TypeScript.LexCode_x ? 2 : 4;
+ this.nextChar();
+ for(var i = 0; i < expectedHexDigits; i++) {
+ if(this.IsHexDigit(this.ch)) {
+ this.nextChar();
+ } else {
+ this.reportScannerError("Invalid Unicode escape sequence");
+ break;
+ }
+ }
+ continue scanStringConstantLoop;
+
+ }
+ }
+ break;
+
+ }
+ }
+ if(this.ch >= TypeScript.LexCodeASCIIChars) {
+ this.seenUnicodeChar = true;
+ }
+ this.nextChar();
+ }
+ return new TypeScript.StringLiteralToken(this.src.substring(this.startPos, this.pos));
+ };
+ Scanner.prototype.scanIdentifier = function () {
+ var hasEscape = false;
+ var isFirstChar = (this.ch == TypeScript.LexCodeBSL);
+ var hasUnicode = false;
+ for(; ; ) {
+ while(lexIdStartTable[this.ch] || LexIsDigit(this.ch) || (this.ch >= TypeScript.LexCodeASCIIChars && this.isValidUnicodeIdentifierChar())) {
+ this.nextChar();
+ }
+ if(this.ch == TypeScript.LexCodeBSL) {
+ this.nextChar();
+ if(this.ch == TypeScript.LexCode_u) {
+ this.nextChar();
+ for(var h = 0; h < 4; h++) {
+ if(this.IsHexDigit(this.ch)) {
+ this.nextChar();
+ } else {
+ this.reportScannerError("Invalid Unicode escape sequence");
+ return TypeScript.staticTokens[TypeScript.TokenID.Error];
+ }
+ }
+ var hexChar = parseInt(this.src.substring(this.pos - 4, this.pos), 16);
+ if(lexIdStartTable[hexChar] || (!isFirstChar && LexIsDigit(hexChar)) || (hexChar >= TypeScript.LexCodeASCIIChars && (LexIsUnicodeIdStart(hexChar) || (!isFirstChar && LexIsUnicodeDigit(hexChar))))) {
+ } else {
+ this.reportScannerError("Invalid identifier character");
+ return TypeScript.staticTokens[TypeScript.TokenID.Error];
+ }
+ hasEscape = true;
+ isFirstChar = false;
+ continue;
+ }
+ this.reportScannerError("Invalid Unicode escape sequence");
+ return TypeScript.staticTokens[TypeScript.TokenID.Error];
+ }
+ break;
+ }
+ var id;
+ var text = this.src.substring(this.startPos, this.pos);
+ if(!hasEscape && (id = TypeScript.LexKeywordTable.lookup(text)) != null) {
+ return TypeScript.staticTokens[id];
+ } else {
+ return new TypeScript.IdentifierToken(text, hasEscape);
+ }
+ };
+ Scanner.prototype.innerScan = function () {
+ var rtok;
+ this.tokenStart();
+ this.ch = this.peekChar();
+ start:
+while(this.pos < this.len) {
+ if(lexIdStartTable[this.ch] || this.ch == TypeScript.LexCodeBSL || (this.ch >= TypeScript.LexCodeASCIIChars && LexIsUnicodeIdStart(this.ch))) {
+ return this.scanIdentifier();
+ } else {
+ if(this.ch == TypeScript.LexCodeSpace) {
+ if(!this.interveningWhitespace) {
+ this.interveningWhitespacePos = this.pos;
+ }
+ do {
+ this.nextChar();
+ }while(this.ch == TypeScript.LexCodeSpace)
+ if(this.mode == LexMode.Line) {
+ var whitespaceText = this.src.substring(this.startPos, this.pos);
+ return new TypeScript.WhitespaceToken(TypeScript.TokenID.Whitespace, whitespaceText);
+ } else {
+ this.tokenStart();
+ this.interveningWhitespace = true;
+ }
+ } else {
+ if(this.ch == TypeScript.LexCodeSLH) {
+ this.nextChar();
+ var commentText;
+ if(this.ch == TypeScript.LexCodeSLH) {
+ if(!this.interveningWhitespace) {
+ this.interveningWhitespacePos = this.pos - 1;
+ }
+ var commentStartPos = this.pos - 1;
+ var commentStartLine = this.line;
+ this.finishSinglelineComment();
+ var commentText = this.src.substring(commentStartPos, this.pos);
+ var commentToken = new TypeScript.CommentToken(TypeScript.TokenID.Comment, commentText, false, commentStartPos, commentStartLine, false);
+ if(this.scanComments) {
+ this.startPos = commentStartPos;
+ return commentToken;
+ } else {
+ this.pushComment(commentToken);
+ }
+ this.interveningWhitespace = true;
+ } else {
+ if(this.ch == TypeScript.LexCodeMUL) {
+ if(!this.interveningWhitespace) {
+ this.interveningWhitespacePos = this.pos - 1;
+ }
+ var commentStartPos = this.pos - 1;
+ var commentStartLine = this.line;
+ this.nextChar();
+ this.finishMultilineComment();
+ var commentText = this.src.substring(commentStartPos, this.pos);
+ var endsLine = this.endsLine(this.peekChar());
+ var commentToken = new TypeScript.CommentToken(TypeScript.TokenID.Comment, commentText, true, commentStartPos, commentStartLine, endsLine);
+ if(this.scanComments) {
+ this.startPos = commentStartPos;
+ return commentToken;
+ } else {
+ this.pushComment(commentToken);
+ }
+ this.interveningWhitespace = true;
+ } else {
+ var regexTok = this.speculateRegex();
+ if(regexTok) {
+ return regexTok;
+ } else {
+ if(this.peekCharAt(this.pos) == TypeScript.LexCodeEQ) {
+ this.nextChar();
+ return TypeScript.staticTokens[TypeScript.TokenID.SlashEquals];
+ } else {
+ return TypeScript.staticTokens[TypeScript.TokenID.Slash];
+ }
+ }
+ }
+ }
+ } else {
+ if(this.ch == TypeScript.LexCodeSMC) {
+ this.nextChar();
+ return TypeScript.staticTokens[TypeScript.TokenID.Semicolon];
+ } else {
+ if((this.ch == TypeScript.LexCodeAPO) || (this.ch == TypeScript.LexCodeQUO)) {
+ return this.scanStringConstant();
+ } else {
+ if(autoToken[this.ch]) {
+ var atok = autoToken[this.ch];
+ if(atok.tokenId == TypeScript.TokenID.OpenBrace) {
+ this.leftCurlyCount++;
+ } else {
+ if(atok.tokenId == TypeScript.TokenID.CloseBrace) {
+ this.rightCurlyCount++;
+ }
+ }
+ this.nextChar();
+ return atok;
+ } else {
+ if((this.ch >= TypeScript.LexCode_0) && (this.ch <= TypeScript.LexCode_9)) {
+ rtok = this.scanNumber();
+ if(rtok) {
+ return rtok;
+ } else {
+ this.nextChar();
+ return TypeScript.staticTokens[TypeScript.TokenID.Error];
+ }
+ } else {
+ switch(this.ch) {
+ case TypeScript.LexCodeTAB:
+ case TypeScript.LexCodeVTAB: {
+ if(!this.interveningWhitespace) {
+ this.interveningWhitespacePos = this.pos;
+ }
+ if(this.mode == LexMode.Line) {
+ do {
+ this.nextChar();
+ }while((this.ch == TypeScript.LexCodeSpace) || (this.ch == 9))
+ var wsText = this.src.substring(this.startPos, this.pos);
+ return new TypeScript.WhitespaceToken(TypeScript.TokenID.Whitespace, wsText);
+ } else {
+ this.interveningWhitespace = true;
+ }
+
+ }
+ case 255:
+ case 254:
+ case 239:
+ case 187:
+ case 191:
+ case TypeScript.LexCodeLS:
+ case TypeScript.LexCodePS:
+ case TypeScript.LexCodeNWL:
+ case TypeScript.LexCodeRET: {
+ if(this.ch == TypeScript.LexCodeNWL) {
+ this.newLine();
+ if(this.mode == LexMode.Line) {
+ return TypeScript.staticTokens[TypeScript.TokenID.EndOfFile];
+ }
+ }
+ if(!this.interveningWhitespace) {
+ this.interveningWhitespacePos = this.pos;
+ }
+ this.nextChar();
+ this.tokenStart();
+ this.interveningWhitespace = true;
+ break;
+
+ }
+ case TypeScript.LexCodeDOT: {
+ if(this.peekCharAt(this.pos + 1) == TypeScript.LexCodeDOT) {
+ if(this.peekCharAt(this.pos + 2) == TypeScript.LexCodeDOT) {
+ this.advanceChar(3);
+ return TypeScript.staticTokens[TypeScript.TokenID.DotDotDot];
+ } else {
+ this.nextChar();
+ return TypeScript.staticTokens[TypeScript.TokenID.Dot];
+ }
+ } else {
+ this.nextChar();
+ rtok = this.scanFraction();
+ if(rtok) {
+ return rtok;
+ } else {
+ return TypeScript.staticTokens[TypeScript.TokenID.Dot];
+ }
+ }
+ }
+
+ case TypeScript.LexCodeEQ: {
+ if(this.peekCharAt(this.pos + 1) == TypeScript.LexCodeEQ) {
+ if(this.peekCharAt(this.pos + 2) == TypeScript.LexCodeEQ) {
+ this.advanceChar(3);
+ return TypeScript.staticTokens[TypeScript.TokenID.EqualsEqualsEquals];
+ } else {
+ this.advanceChar(2);
+ return TypeScript.staticTokens[TypeScript.TokenID.EqualsEquals];
+ }
+ } else {
+ if(this.peekCharAt(this.pos + 1) == TypeScript.LexCodeGT) {
+ this.advanceChar(2);
+ return TypeScript.staticTokens[TypeScript.TokenID.EqualsGreaterThan];
+ } else {
+ this.nextChar();
+ return TypeScript.staticTokens[TypeScript.TokenID.Equals];
+ }
+ }
+
+ }
+ case TypeScript.LexCodeBNG: {
+ if(this.peekCharAt(this.pos + 1) == TypeScript.LexCodeEQ) {
+ if(this.peekCharAt(this.pos + 2) == TypeScript.LexCodeEQ) {
+ this.advanceChar(3);
+ return TypeScript.staticTokens[TypeScript.TokenID.ExclamationEqualsEquals];
+ } else {
+ this.advanceChar(2);
+ return TypeScript.staticTokens[TypeScript.TokenID.ExclamationEquals];
+ }
+ } else {
+ this.nextChar();
+ return TypeScript.staticTokens[TypeScript.TokenID.Exclamation];
+ }
+
+ }
+ case TypeScript.LexCodePLS: {
+ if(this.peekCharAt(this.pos + 1) == TypeScript.LexCodeEQ) {
+ this.advanceChar(2);
+ return TypeScript.staticTokens[TypeScript.TokenID.PlusEquals];
+ } else {
+ if(this.peekCharAt(this.pos + 1) == TypeScript.LexCodePLS) {
+ this.advanceChar(2);
+ return TypeScript.staticTokens[TypeScript.TokenID.PlusPlus];
+ } else {
+ this.nextChar();
+ return TypeScript.staticTokens[TypeScript.TokenID.Plus];
+ }
+ }
+
+ }
+ case TypeScript.LexCodeMIN: {
+ if(this.peekCharAt(this.pos + 1) == TypeScript.LexCodeEQ) {
+ this.advanceChar(2);
+ return TypeScript.staticTokens[TypeScript.TokenID.MinusEquals];
+ } else {
+ if(this.peekCharAt(this.pos + 1) == TypeScript.LexCodeMIN) {
+ this.advanceChar(2);
+ return TypeScript.staticTokens[TypeScript.TokenID.MinusMinus];
+ } else {
+ this.nextChar();
+ return TypeScript.staticTokens[TypeScript.TokenID.Minus];
+ }
+ }
+
+ }
+ case TypeScript.LexCodeMUL: {
+ if(this.peekCharAt(this.pos + 1) == TypeScript.LexCodeEQ) {
+ this.advanceChar(2);
+ return TypeScript.staticTokens[TypeScript.TokenID.AsteriskEquals];
+ } else {
+ this.nextChar();
+ return TypeScript.staticTokens[TypeScript.TokenID.Asterisk];
+ }
+
+ }
+ case TypeScript.LexCodePCT: {
+ if(this.peekCharAt(this.pos + 1) == TypeScript.LexCodeEQ) {
+ this.advanceChar(2);
+ return TypeScript.staticTokens[TypeScript.TokenID.PercentEquals];
+ } else {
+ this.nextChar();
+ return TypeScript.staticTokens[TypeScript.TokenID.Percent];
+ }
+
+ }
+ case TypeScript.LexCodeLT: {
+ if(this.peekCharAt(this.pos + 1) == TypeScript.LexCodeLT) {
+ if(this.peekCharAt(this.pos + 2) == TypeScript.LexCodeEQ) {
+ this.advanceChar(3);
+ return TypeScript.staticTokens[TypeScript.TokenID.LessThanLessThanEquals];
+ } else {
+ this.advanceChar(2);
+ return TypeScript.staticTokens[TypeScript.TokenID.LessThanLessThan];
+ }
+ } else {
+ if(this.peekCharAt(this.pos + 1) == TypeScript.LexCodeEQ) {
+ this.advanceChar(2);
+ return TypeScript.staticTokens[TypeScript.TokenID.LessThanEquals];
+ } else {
+ this.nextChar();
+ return TypeScript.staticTokens[TypeScript.TokenID.LessThan];
+ }
+ }
+
+ }
+ case TypeScript.LexCodeGT: {
+ if(this.peekCharAt(this.pos + 1) == TypeScript.LexCodeGT) {
+ if(this.peekCharAt(this.pos + 2) == TypeScript.LexCodeEQ) {
+ this.advanceChar(3);
+ return TypeScript.staticTokens[TypeScript.TokenID.GreaterThanGreaterThanEquals];
+ } else {
+ if(this.peekCharAt(this.pos + 2) == TypeScript.LexCodeGT) {
+ if(this.peekCharAt(this.pos + 3) == TypeScript.LexCodeEQ) {
+ this.advanceChar(4);
+ return TypeScript.staticTokens[TypeScript.TokenID.GreaterThanGreaterThanGreaterThanEquals];
+ } else {
+ this.advanceChar(3);
+ return TypeScript.staticTokens[TypeScript.TokenID.GreaterThanGreaterThanGreaterThan];
+ }
+ } else {
+ this.advanceChar(2);
+ return TypeScript.staticTokens[TypeScript.TokenID.GreaterThanGreaterThan];
+ }
+ }
+ } else {
+ if(this.peekCharAt(this.pos + 1) == TypeScript.LexCodeEQ) {
+ this.advanceChar(2);
+ return TypeScript.staticTokens[TypeScript.TokenID.GreaterThanEquals];
+ } else {
+ this.nextChar();
+ return TypeScript.staticTokens[TypeScript.TokenID.GreaterThan];
+ }
+ }
+
+ }
+ case TypeScript.LexCodeXOR: {
+ if(this.peekCharAt(this.pos + 1) == TypeScript.LexCodeEQ) {
+ this.advanceChar(2);
+ return TypeScript.staticTokens[TypeScript.TokenID.CaretEquals];
+ } else {
+ this.nextChar();
+ return TypeScript.staticTokens[TypeScript.TokenID.Caret];
+ }
+
+ }
+ case TypeScript.LexCodeBAR: {
+ if(this.peekCharAt(this.pos + 1) == TypeScript.LexCodeEQ) {
+ this.advanceChar(2);
+ return TypeScript.staticTokens[TypeScript.TokenID.BarEquals];
+ } else {
+ if(this.peekCharAt(this.pos + 1) == TypeScript.LexCodeBAR) {
+ this.advanceChar(2);
+ return TypeScript.staticTokens[TypeScript.TokenID.BarBar];
+ } else {
+ this.nextChar();
+ return TypeScript.staticTokens[TypeScript.TokenID.Bar];
+ }
+ }
+
+ }
+ case TypeScript.LexCodeAMP: {
+ if(this.peekCharAt(this.pos + 1) == TypeScript.LexCodeEQ) {
+ this.advanceChar(2);
+ return TypeScript.staticTokens[TypeScript.TokenID.AmpersandEquals];
+ } else {
+ if(this.peekCharAt(this.pos + 1) == TypeScript.LexCodeAMP) {
+ this.advanceChar(2);
+ return TypeScript.staticTokens[TypeScript.TokenID.AmpersandAmpersand];
+ } else {
+ this.nextChar();
+ return TypeScript.staticTokens[TypeScript.TokenID.And];
+ }
+ }
+
+ }
+ default: {
+ this.reportScannerError("Invalid character");
+ this.nextChar();
+ continue start;
+
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ return TypeScript.staticTokens[TypeScript.TokenID.EndOfFile];
+ };
+ Scanner.prototype.reportScannerError = function (message) {
+ if(this.reportError) {
+ this.reportError(message);
+ }
+ };
+ return Scanner;
+ })();
+ TypeScript.Scanner = Scanner;
+ function convertTokToIDName(tok) {
+ return convertTokToIDBase(tok, true, false);
+ }
+ TypeScript.convertTokToIDName = convertTokToIDName;
+ function convertTokToID(tok, strictMode) {
+ return convertTokToIDBase(tok, false, strictMode);
+ }
+ TypeScript.convertTokToID = convertTokToID;
+ function convertTokToIDBase(tok, identifierName, strictMode) {
+ if(tok.tokenId <= TypeScript.TokenID.LimKeyword) {
+ var tokInfo = TypeScript.lookupToken(tok.tokenId);
+ if(tokInfo != undefined) {
+ var resFlags = TypeScript.Reservation.Javascript | TypeScript.Reservation.JavascriptFuture;
+ if(strictMode) {
+ resFlags |= TypeScript.Reservation.JavascriptFutureStrict;
+ }
+ if(identifierName || !TypeScript.hasFlag(tokInfo.reservation, resFlags)) {
+ return true;
+ }
+ } else {
+ return false;
+ }
+ } else {
+ return false;
+ }
+ }
+ function getLineNumberFromPosition(lineMap, position) {
+ if(position === -1) {
+ return 0;
+ }
+ var min = 0;
+ var max = lineMap.length - 1;
+ while(min < max) {
+ var med = (min + max) >> 1;
+ if(position < lineMap[med]) {
+ max = med - 1;
+ } else {
+ if(position < lineMap[med + 1]) {
+ min = max = med;
+ } else {
+ min = med + 1;
+ }
+ }
+ }
+ return min;
+ }
+ TypeScript.getLineNumberFromPosition = getLineNumberFromPosition;
+ function getSourceLineColFromMap(lineCol, minChar, lineMap) {
+ var line = getLineNumberFromPosition(lineMap, minChar);
+ if(line > 0) {
+ lineCol.line = line;
+ lineCol.col = (minChar - lineMap[line]);
+ }
+ }
+ TypeScript.getSourceLineColFromMap = getSourceLineColFromMap;
+ function getLineColumnFromPosition(script, position) {
+ var result = {
+ line: -1,
+ col: -1
+ };
+ getSourceLineColFromMap(result, position, script.locationInfo.lineMap);
+ if(result.col >= 0) {
+ result.col++;
+ }
+ return result;
+ }
+ TypeScript.getLineColumnFromPosition = getLineColumnFromPosition;
+ function getPositionFromLineColumn(script, line, column) {
+ return script.locationInfo.lineMap[line] + (column - 1);
+ }
+ TypeScript.getPositionFromLineColumn = getPositionFromLineColumn;
+ function isPrimitiveTypeToken(token) {
+ switch(token.tokenId) {
+ case TypeScript.TokenID.Any:
+ case TypeScript.TokenID.Bool:
+ case TypeScript.TokenID.Number:
+ case TypeScript.TokenID.String: {
+ return true;
+
+ }
+ }
+ return false;
+ }
+ TypeScript.isPrimitiveTypeToken = isPrimitiveTypeToken;
+ function isModifier(token) {
+ switch(token.tokenId) {
+ case TypeScript.TokenID.Public:
+ case TypeScript.TokenID.Private:
+ case TypeScript.TokenID.Static: {
+ return true;
+
+ }
+ }
+ return false;
+ }
+ TypeScript.isModifier = isModifier;
+})(TypeScript || (TypeScript = {}));
+var TypeScript;
+(function (TypeScript) {
+ var AssignScopeContext = (function () {
+ function AssignScopeContext(scopeChain, typeFlow, modDeclChain) {
+ this.scopeChain = scopeChain;
+ this.typeFlow = typeFlow;
+ this.modDeclChain = modDeclChain;
+ }
+ return AssignScopeContext;
+ })();
+ TypeScript.AssignScopeContext = AssignScopeContext;
+ function pushAssignScope(scope, context, type, classType, fnc) {
+ var chain = new TypeScript.ScopeChain(null, context.scopeChain, scope);
+ chain.thisType = type;
+ chain.classType = classType;
+ chain.fnc = fnc;
+ context.scopeChain = chain;
+ }
+ TypeScript.pushAssignScope = pushAssignScope;
+ function popAssignScope(context) {
+ context.scopeChain = context.scopeChain.previous;
+ }
+ TypeScript.popAssignScope = popAssignScope;
+ function instanceCompare(a, b) {
+ if(((a == null) || (!a.isInstanceProperty()))) {
+ return b;
+ } else {
+ return a;
+ }
+ }
+ TypeScript.instanceCompare = instanceCompare;
+ function instanceFilterStop(s) {
+ return s.isInstanceProperty();
+ }
+ TypeScript.instanceFilterStop = instanceFilterStop;
+ var ScopeSearchFilter = (function () {
+ function ScopeSearchFilter(select, stop) {
+ this.select = select;
+ this.stop = stop;
+ this.result = null;
+ }
+ ScopeSearchFilter.prototype.reset = function () {
+ this.result = null;
+ };
+ ScopeSearchFilter.prototype.update = function (b) {
+ this.result = this.select(this.result, b);
+ if(this.result) {
+ return this.stop(this.result);
+ } else {
+ return false;
+ }
+ };
+ return ScopeSearchFilter;
+ })();
+ TypeScript.ScopeSearchFilter = ScopeSearchFilter;
+ TypeScript.instanceFilter = new ScopeSearchFilter(instanceCompare, instanceFilterStop);
+ function preAssignModuleScopes(ast, context) {
+ var moduleDecl = ast;
+ var memberScope = null;
+ var aggScope = null;
+ if(moduleDecl.name && moduleDecl.mod) {
+ moduleDecl.name.sym = moduleDecl.mod.symbol;
+ }
+ var mod = moduleDecl.mod;
+ if(!mod) {
+ return;
+ }
+ memberScope = new TypeScript.SymbolTableScope(mod.members, mod.ambientMembers, mod.enclosedTypes, mod.ambientEnclosedTypes, mod.symbol);
+ mod.memberScope = memberScope;
+ context.modDeclChain.push(moduleDecl);
+ context.typeFlow.checker.currentModDecl = moduleDecl;
+ aggScope = new TypeScript.SymbolAggregateScope(mod.symbol);
+ aggScope.addParentScope(memberScope);
+ aggScope.addParentScope(context.scopeChain.scope);
+ pushAssignScope(aggScope, context, null, null, null);
+ mod.containedScope = aggScope;
+ if(mod.symbol) {
+ context.typeFlow.addLocalsFromScope(mod.containedScope, mod.symbol, moduleDecl.vars, mod.members.privateMembers, true);
+ }
+ }
+ TypeScript.preAssignModuleScopes = preAssignModuleScopes;
+ function preAssignClassScopes(ast, context) {
+ var classDecl = ast;
+ var memberScope = null;
+ var aggScope = null;
+ if(classDecl.name && classDecl.type) {
+ classDecl.name.sym = classDecl.type.symbol;
+ }
+ var classType = ast.type;
+ if(classType) {
+ var classSym = classType.symbol;
+ memberScope = context.typeFlow.checker.scopeOf(classType);
+ aggScope = new TypeScript.SymbolAggregateScope(classType.symbol);
+ aggScope.addParentScope(memberScope);
+ aggScope.addParentScope(context.scopeChain.scope);
+ classType.containedScope = aggScope;
+ classType.memberScope = memberScope;
+ var instanceType = classType.instanceType;
+ memberScope = context.typeFlow.checker.scopeOf(instanceType);
+ instanceType.memberScope = memberScope;
+ aggScope = new TypeScript.SymbolAggregateScope(instanceType.symbol);
+ aggScope.addParentScope(context.scopeChain.scope);
+ pushAssignScope(aggScope, context, instanceType, classType, null);
+ instanceType.containedScope = aggScope;
+ } else {
+ ast.type = context.typeFlow.anyType;
+ }
+ }
+ TypeScript.preAssignClassScopes = preAssignClassScopes;
+ function preAssignInterfaceScopes(ast, context) {
+ var interfaceDecl = ast;
+ var memberScope = null;
+ var aggScope = null;
+ if(interfaceDecl.name && interfaceDecl.type) {
+ interfaceDecl.name.sym = interfaceDecl.type.symbol;
+ }
+ var interfaceType = ast.type;
+ memberScope = context.typeFlow.checker.scopeOf(interfaceType);
+ interfaceType.memberScope = memberScope;
+ aggScope = new TypeScript.SymbolAggregateScope(interfaceType.symbol);
+ aggScope.addParentScope(memberScope);
+ aggScope.addParentScope(context.scopeChain.scope);
+ pushAssignScope(aggScope, context, null, null, null);
+ interfaceType.containedScope = aggScope;
+ }
+ TypeScript.preAssignInterfaceScopes = preAssignInterfaceScopes;
+ function preAssignWithScopes(ast, context) {
+ var withStmt = ast;
+ var withType = withStmt.type;
+ var members = new TypeScript.ScopedMembers(new TypeScript.DualStringHashTable(new TypeScript.StringHashTable(), new TypeScript.StringHashTable()));
+ var ambientMembers = new TypeScript.ScopedMembers(new TypeScript.DualStringHashTable(new TypeScript.StringHashTable(), new TypeScript.StringHashTable()));
+ var withType = new TypeScript.Type();
+ var withSymbol = new TypeScript.WithSymbol(withStmt.minChar, context.typeFlow.checker.locationInfo.unitIndex, withType);
+ withType.members = members;
+ withType.ambientMembers = ambientMembers;
+ withType.symbol = withSymbol;
+ withType.setHasImplementation();
+ withStmt.type = withType;
+ var withScope = new TypeScript.SymbolScopeBuilder(withType.members, withType.ambientMembers, null, null, context.scopeChain.scope, withType.symbol);
+ pushAssignScope(withScope, context, null, null, null);
+ withType.containedScope = withScope;
+ }
+ TypeScript.preAssignWithScopes = preAssignWithScopes;
+ function preAssignFuncDeclScopes(ast, context) {
+ var funcDecl = ast;
+ var container = null;
+ var localContainer = null;
+ if(funcDecl.type) {
+ localContainer = ast.type.symbol;
+ }
+ var isStatic = TypeScript.hasFlag(funcDecl.fncFlags, TypeScript.FncFlags.Static);
+ var isInnerStatic = isStatic && context.scopeChain.fnc != null;
+ var parentScope = isInnerStatic ? context.scopeChain.fnc.type.memberScope : context.scopeChain.scope;
+ if(context.scopeChain.thisType && (!funcDecl.isConstructor || TypeScript.hasFlag(funcDecl.fncFlags, TypeScript.FncFlags.ClassMethod))) {
+ var instType = context.scopeChain.thisType;
+ if(!(instType.typeFlags & TypeScript.TypeFlags.IsClass) && !TypeScript.hasFlag(funcDecl.fncFlags, TypeScript.FncFlags.ClassMethod)) {
+ if(!funcDecl.isMethod() || isStatic) {
+ parentScope = instType.constructorScope;
+ } else {
+ parentScope = instType.containedScope;
+ }
+ } else {
+ if(context.scopeChain.previous.scope.container && context.scopeChain.previous.scope.container.declAST && context.scopeChain.previous.scope.container.declAST.nodeType == TypeScript.NodeType.FuncDecl && (context.scopeChain.previous.scope.container.declAST).isConstructor) {
+ parentScope = instType.constructorScope;
+ } else {
+ if(isStatic && context.scopeChain.classType) {
+ parentScope = context.scopeChain.classType.containedScope;
+ } else {
+ parentScope = instType.containedScope;
+ }
+ }
+ }
+ container = instType.symbol;
+ } else {
+ if(funcDecl.isConstructor && context.scopeChain.thisType) {
+ container = context.scopeChain.thisType.symbol;
+ }
+ }
+ if(funcDecl.type == null || TypeScript.hasFlag(funcDecl.type.symbol.flags, TypeScript.SymbolFlags.TypeSetDuringScopeAssignment)) {
+ if(context.scopeChain.fnc && context.scopeChain.fnc.type) {
+ container = context.scopeChain.fnc.type.symbol;
+ }
+ var funcScope = null;
+ var outerFnc = context.scopeChain.fnc;
+ var nameText = funcDecl.name ? funcDecl.name.actualText : null;
+ var fgSym = null;
+ if(isStatic) {
+ if(outerFnc.type.members == null && container.getType().memberScope) {
+ outerFnc.type.members = ((container).type.memberScope).valueMembers;
+ }
+ funcScope = context.scopeChain.fnc.type.memberScope;
+ outerFnc.innerStaticFuncs[outerFnc.innerStaticFuncs.length] = funcDecl;
+ } else {
+ funcScope = context.scopeChain.scope;
+ }
+ if(nameText && nameText != "__missing" && !funcDecl.isAccessor()) {
+ if(isStatic) {
+ fgSym = funcScope.findLocal(nameText, false, false);
+ } else {
+ fgSym = funcScope.findLocal(nameText, false, false);
+ }
+ }
+ context.typeFlow.checker.createFunctionSignature(funcDecl, container, funcScope, fgSym, fgSym == null);
+ if(!funcDecl.accessorSymbol && (funcDecl.fncFlags & TypeScript.FncFlags.ClassMethod) && container && ((!fgSym || fgSym.declAST.nodeType != TypeScript.NodeType.FuncDecl) && funcDecl.isAccessor()) || (fgSym && fgSym.isAccessor())) {
+ funcDecl.accessorSymbol = context.typeFlow.checker.createAccessorSymbol(funcDecl, fgSym, container.getType(), (funcDecl.isMethod() && isStatic), true, funcScope, container);
+ }
+ funcDecl.type.symbol.flags |= TypeScript.SymbolFlags.TypeSetDuringScopeAssignment;
+ }
+ if(funcDecl.name && funcDecl.type) {
+ funcDecl.name.sym = funcDecl.type.symbol;
+ }
+ funcDecl.scopeType = funcDecl.type;
+ if(funcDecl.isOverload) {
+ return;
+ }
+ var funcTable = new TypeScript.StringHashTable();
+ var funcMembers = new TypeScript.ScopedMembers(new TypeScript.DualStringHashTable(funcTable, new TypeScript.StringHashTable()));
+ var ambientFuncTable = new TypeScript.StringHashTable();
+ var ambientFuncMembers = new TypeScript.ScopedMembers(new TypeScript.DualStringHashTable(ambientFuncTable, new TypeScript.StringHashTable()));
+ var funcStaticTable = new TypeScript.StringHashTable();
+ var funcStaticMembers = new TypeScript.ScopedMembers(new TypeScript.DualStringHashTable(funcStaticTable, new TypeScript.StringHashTable()));
+ var ambientFuncStaticTable = new TypeScript.StringHashTable();
+ var ambientFuncStaticMembers = new TypeScript.ScopedMembers(new TypeScript.DualStringHashTable(ambientFuncStaticTable, new TypeScript.StringHashTable()));
+ funcDecl.unitIndex = context.typeFlow.checker.locationInfo.unitIndex;
+ var locals = new TypeScript.SymbolScopeBuilder(funcMembers, ambientFuncMembers, null, null, parentScope, localContainer);
+ var statics = new TypeScript.SymbolScopeBuilder(funcStaticMembers, ambientFuncStaticMembers, null, null, parentScope, null);
+ if(funcDecl.isConstructor && context.scopeChain.thisType) {
+ context.scopeChain.thisType.constructorScope = locals;
+ }
+ funcDecl.symbols = funcTable;
+ if(!funcDecl.isSpecialFn()) {
+ var group = funcDecl.type;
+ var signature = funcDecl.signature;
+ if(!funcDecl.isConstructor) {
+ group.containedScope = locals;
+ locals.container = group.symbol;
+ group.memberScope = statics;
+ statics.container = group.symbol;
+ }
+ funcDecl.enclosingFnc = context.scopeChain.fnc;
+ group.enclosingType = isStatic ? context.scopeChain.classType : context.scopeChain.thisType;
+ var fgSym = ast.type.symbol;
+ if(((funcDecl.fncFlags & TypeScript.FncFlags.Signature) == TypeScript.FncFlags.None) && funcDecl.vars) {
+ context.typeFlow.addLocalsFromScope(locals, fgSym, funcDecl.vars, funcTable, false);
+ context.typeFlow.addLocalsFromScope(statics, fgSym, funcDecl.statics, funcStaticTable, false);
+ }
+ if(signature.parameters) {
+ var len = signature.parameters.length;
+ for(var i = 0; i < len; i++) {
+ var paramSym = signature.parameters[i];
+ context.typeFlow.checker.resolveTypeLink(locals, paramSym.parameter.typeLink, true);
+ }
+ }
+ context.typeFlow.checker.resolveTypeLink(locals, signature.returnType, funcDecl.isSignature());
+ }
+ if(!funcDecl.isConstructor || TypeScript.hasFlag(funcDecl.fncFlags, TypeScript.FncFlags.ClassMethod)) {
+ var thisType = (funcDecl.isConstructor && TypeScript.hasFlag(funcDecl.fncFlags, TypeScript.FncFlags.ClassMethod)) ? context.scopeChain.thisType : null;
+ pushAssignScope(locals, context, thisType, null, funcDecl);
+ }
+ if(funcDecl.name && TypeScript.hasFlag(funcDecl.fncFlags, TypeScript.FncFlags.IsFunctionExpression)) {
+ if(funcDecl.name.sym) {
+ funcTable.add(funcDecl.name.actualText, funcDecl.name.sym);
+ }
+ }
+ }
+ TypeScript.preAssignFuncDeclScopes = preAssignFuncDeclScopes;
+ function preAssignCatchScopes(ast, context) {
+ var catchBlock = ast;
+ if(catchBlock.param) {
+ var catchTable = new TypeScript.ScopedMembers(new TypeScript.DualStringHashTable(new TypeScript.StringHashTable(), new TypeScript.StringHashTable()));
+ var catchLocals = new TypeScript.SymbolScopeBuilder(catchTable, null, null, null, context.scopeChain.scope, context.scopeChain.scope.container);
+ catchBlock.containedScope = catchLocals;
+ pushAssignScope(catchLocals, context, context.scopeChain.thisType, context.scopeChain.classType, context.scopeChain.fnc);
+ }
+ }
+ TypeScript.preAssignCatchScopes = preAssignCatchScopes;
+ function preAssignScopes(ast, parent, walker) {
+ var context = walker.state;
+ var go = true;
+ if(ast) {
+ if(ast.nodeType == TypeScript.NodeType.List) {
+ var list = ast;
+ list.enclosingScope = context.scopeChain.scope;
+ } else {
+ if(ast.nodeType == TypeScript.NodeType.ModuleDeclaration) {
+ preAssignModuleScopes(ast, context);
+ } else {
+ if(ast.nodeType == TypeScript.NodeType.ClassDeclaration) {
+ preAssignClassScopes(ast, context);
+ } else {
+ if(ast.nodeType == TypeScript.NodeType.InterfaceDeclaration) {
+ preAssignInterfaceScopes(ast, context);
+ } else {
+ if(ast.nodeType == TypeScript.NodeType.With) {
+ preAssignWithScopes(ast, context);
+ } else {
+ if(ast.nodeType == TypeScript.NodeType.FuncDecl) {
+ preAssignFuncDeclScopes(ast, context);
+ } else {
+ if(ast.nodeType == TypeScript.NodeType.Catch) {
+ preAssignCatchScopes(ast, context);
+ } else {
+ if(ast.nodeType == TypeScript.NodeType.TypeRef) {
+ go = false;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ walker.options.goChildren = go;
+ return ast;
+ }
+ TypeScript.preAssignScopes = preAssignScopes;
+ function postAssignScopes(ast, parent, walker) {
+ var context = walker.state;
+ var go = true;
+ if(ast) {
+ if(ast.nodeType == TypeScript.NodeType.ModuleDeclaration) {
+ var prevModDecl = ast;
+ popAssignScope(context);
+ context.modDeclChain.pop();
+ if(context.modDeclChain.length >= 1) {
+ context.typeFlow.checker.currentModDecl = context.modDeclChain[context.modDeclChain.length - 1];
+ }
+ } else {
+ if(ast.nodeType == TypeScript.NodeType.ClassDeclaration) {
+ popAssignScope(context);
+ } else {
+ if(ast.nodeType == TypeScript.NodeType.InterfaceDeclaration) {
+ popAssignScope(context);
+ } else {
+ if(ast.nodeType == TypeScript.NodeType.With) {
+ popAssignScope(context);
+ } else {
+ if(ast.nodeType == TypeScript.NodeType.FuncDecl) {
+ var funcDecl = ast;
+ if((!funcDecl.isConstructor || TypeScript.hasFlag(funcDecl.fncFlags, TypeScript.FncFlags.ClassMethod)) && !funcDecl.isOverload) {
+ popAssignScope(context);
+ }
+ } else {
+ if(ast.nodeType == TypeScript.NodeType.Catch) {
+ var catchBlock = ast;
+ if(catchBlock.param) {
+ popAssignScope(context);
+ }
+ } else {
+ go = false;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ walker.options.goChildren = go;
+ return ast;
+ }
+ TypeScript.postAssignScopes = postAssignScopes;
+})(TypeScript || (TypeScript = {}));
+var TypeScript;
+(function (TypeScript) {
+ var TypeCollectionContext = (function () {
+ function TypeCollectionContext(scopeChain, checker) {
+ this.scopeChain = scopeChain;
+ this.checker = checker;
+ this.script = null;
+ }
+ return TypeCollectionContext;
+ })();
+ TypeScript.TypeCollectionContext = TypeCollectionContext;
+ var MemberScopeContext = (function () {
+ function MemberScopeContext(flow, pos, matchFlag) {
+ this.flow = flow;
+ this.pos = pos;
+ this.matchFlag = matchFlag;
+ this.type = null;
+ this.ast = null;
+ this.options = new TypeScript.AstWalkOptions();
+ }
+ return MemberScopeContext;
+ })();
+ TypeScript.MemberScopeContext = MemberScopeContext;
+ var EnclosingScopeContext = (function () {
+ function EnclosingScopeContext(logger, script, text, pos, isMemberCompletion) {
+ this.logger = logger;
+ this.script = script;
+ this.text = text;
+ this.pos = pos;
+ this.isMemberCompletion = isMemberCompletion;
+ this.scopeGetter = null;
+ this.objectLiteralScopeGetter = null;
+ this.scopeStartAST = null;
+ this.skipNextFuncDeclForClass = false;
+ this.deepestModuleDecl = null;
+ this.enclosingClassDecl = null;
+ this.enclosingObjectLit = null;
+ this.publicsOnly = true;
+ this.useFullAst = false;
+ }
+ EnclosingScopeContext.prototype.getScope = function () {
+ return this.scopeGetter();
+ };
+ EnclosingScopeContext.prototype.getObjectLiteralScope = function () {
+ return this.objectLiteralScopeGetter();
+ };
+ EnclosingScopeContext.prototype.getScopeAST = function () {
+ return this.scopeStartAST;
+ };
+ EnclosingScopeContext.prototype.getScopePosition = function () {
+ return this.scopeStartAST.minChar;
+ };
+ EnclosingScopeContext.prototype.getScriptFragmentStartAST = function () {
+ return this.scopeStartAST;
+ };
+ EnclosingScopeContext.prototype.getScriptFragmentPosition = function () {
+ return this.getScriptFragmentStartAST().minChar;
+ };
+ EnclosingScopeContext.prototype.getScriptFragment = function () {
+ if(this.scriptFragment == null) {
+ var ast = this.getScriptFragmentStartAST();
+ var minChar = ast.minChar;
+ var limChar = (this.isMemberCompletion ? this.pos : this.pos + 1);
+ this.scriptFragment = TypeScript.quickParse(this.logger, ast, this.text, minChar, limChar, null).Script;
+ }
+ return this.scriptFragment;
+ };
+ return EnclosingScopeContext;
+ })();
+ TypeScript.EnclosingScopeContext = EnclosingScopeContext;
+ function preFindMemberScope(ast, parent, walker) {
+ var memScope = walker.state;
+ if(TypeScript.hasFlag(ast.flags, memScope.matchFlag) && ((memScope.pos < 0) || (memScope.pos == ast.limChar))) {
+ memScope.ast = ast;
+ if((ast.type == null) && (memScope.pos >= 0)) {
+ memScope.flow.inScopeTypeCheck(ast, memScope.scope);
+ }
+ memScope.type = ast.type;
+ memScope.options.stopWalk();
+ }
+ return ast;
+ }
+ TypeScript.preFindMemberScope = preFindMemberScope;
+ function pushTypeCollectionScope(container, valueMembers, ambientValueMembers, enclosedTypes, ambientEnclosedTypes, context, thisType, classType, moduleDecl) {
+ var builder = new TypeScript.SymbolScopeBuilder(valueMembers, ambientValueMembers, enclosedTypes, ambientEnclosedTypes, null, container);
+ var chain = new TypeScript.ScopeChain(container, context.scopeChain, builder);
+ chain.thisType = thisType;
+ chain.classType = classType;
+ chain.moduleDecl = moduleDecl;
+ context.scopeChain = chain;
+ }
+ TypeScript.pushTypeCollectionScope = pushTypeCollectionScope;
+ function popTypeCollectionScope(context) {
+ context.scopeChain = context.scopeChain.previous;
+ }
+ TypeScript.popTypeCollectionScope = popTypeCollectionScope;
+ function preFindEnclosingScope(ast, parent, walker) {
+ var context = walker.state;
+ var minChar = ast.minChar;
+ var limChar = ast.limChar;
+ if(ast.nodeType == TypeScript.NodeType.Script && context.pos > limChar) {
+ limChar = context.pos;
+ }
+ if((minChar <= context.pos) && (limChar >= context.pos)) {
+ switch(ast.nodeType) {
+ case TypeScript.NodeType.Script: {
+ var script = ast;
+ context.scopeGetter = function () {
+ return script.bod === null ? null : script.bod.enclosingScope;
+ };
+ context.scopeStartAST = script;
+ break;
+
+ }
+ case TypeScript.NodeType.ClassDeclaration: {
+ context.scopeGetter = function () {
+ return (ast.type === null || ast.type.instanceType.containedScope === null) ? null : ast.type.instanceType.containedScope;
+ };
+ context.scopeStartAST = ast;
+ context.enclosingClassDecl = ast;
+ break;
+
+ }
+ case TypeScript.NodeType.ObjectLit: {
+ var objectLit = ast;
+ if(objectLit.targetType) {
+ context.scopeGetter = function () {
+ return objectLit.targetType.containedScope;
+ };
+ context.objectLiteralScopeGetter = function () {
+ return objectLit.targetType.memberScope;
+ };
+ context.enclosingObjectLit = objectLit;
+ }
+ break;
+
+ }
+ case TypeScript.NodeType.ModuleDeclaration: {
+ context.deepestModuleDecl = ast;
+ context.scopeGetter = function () {
+ return ast.type === null ? null : ast.type.containedScope;
+ };
+ context.scopeStartAST = ast;
+ break;
+
+ }
+ case TypeScript.NodeType.InterfaceDeclaration: {
+ context.scopeGetter = function () {
+ return (ast.type === null) ? null : ast.type.containedScope;
+ };
+ context.scopeStartAST = ast;
+ break;
+
+ }
+ case TypeScript.NodeType.FuncDecl: {
+ {
+ var funcDecl = ast;
+ if(context.skipNextFuncDeclForClass) {
+ context.skipNextFuncDeclForClass = false;
+ } else {
+ context.scopeGetter = function () {
+ if(funcDecl.isConstructor && TypeScript.hasFlag(funcDecl.fncFlags, TypeScript.FncFlags.ClassMethod)) {
+ if(ast.type && ast.type.enclosingType) {
+ return ast.type.enclosingType.constructorScope;
+ }
+ }
+ if(funcDecl.scopeType) {
+ return funcDecl.scopeType.containedScope;
+ }
+ if(funcDecl.type) {
+ return funcDecl.type.containedScope;
+ }
+ return null;
+ };
+ context.scopeStartAST = ast;
+ }
+ }
+ break;
+
+ }
+ }
+ walker.options.goChildren = true;
+ } else {
+ walker.options.goChildren = false;
+ }
+ return ast;
+ }
+ TypeScript.preFindEnclosingScope = preFindEnclosingScope;
+ function findEnclosingScopeAt(logger, script, text, pos, isMemberCompletion) {
+ var context = new EnclosingScopeContext(logger, script, text, pos, isMemberCompletion);
+ TypeScript.getAstWalkerFactory().walk(script, preFindEnclosingScope, null, null, context);
+ if(context.scopeStartAST === null) {
+ return null;
+ }
+ return context;
+ }
+ TypeScript.findEnclosingScopeAt = findEnclosingScopeAt;
+})(TypeScript || (TypeScript = {}));
+var TypeScript;
+(function (TypeScript) {
+ var Signature = (function () {
+ function Signature() {
+ this.hasVariableArgList = false;
+ this.parameters = null;
+ this.declAST = null;
+ this.typeCheckStatus = TypeScript.TypeCheckStatus.NotStarted;
+ this.nonOptionalParameterCount = 0;
+ }
+ Signature.prototype.specializeType = function (pattern, replacement, checker) {
+ var result = new Signature();
+ if(this.hasVariableArgList) {
+ result.hasVariableArgList = true;
+ }
+ result.returnType = new TypeScript.TypeLink();
+ if(this.returnType.type) {
+ result.returnType.type = this.returnType.type.specializeType(pattern, replacement, checker, false);
+ } else {
+ result.returnType.type = checker.anyType;
+ }
+ if(this.parameters) {
+ result.parameters = [];
+ for(var i = 0, len = this.parameters.length; i < len; i++) {
+ var oldSym = this.parameters[i];
+ var paramDef = new TypeScript.ValueLocation();
+ var paramSym = new TypeScript.ParameterSymbol(oldSym.name, oldSym.location, checker.locationInfo.unitIndex, paramDef);
+ paramSym.declAST = this.declAST;
+ paramDef.symbol = paramSym;
+ paramDef.typeLink = new TypeScript.TypeLink();
+ result.parameters[i] = paramSym;
+ var oldType = oldSym.getType();
+ if(oldType) {
+ paramDef.typeLink.type = oldType.specializeType(pattern, replacement, checker, false);
+ paramSym.declAST.type = paramDef.typeLink.type;
+ } else {
+ paramDef.typeLink.type = checker.anyType;
+ }
+ }
+ }
+ result.nonOptionalParameterCount = this.nonOptionalParameterCount;
+ result.declAST = this.declAST;
+ return result;
+ };
+ Signature.prototype.toString = function () {
+ return this.toStringHelper(false, false, null);
+ };
+ Signature.prototype.toStringHelper = function (shortform, brackets, scope) {
+ return this.toStringHelperEx(shortform, brackets, scope).toString();
+ };
+ Signature.prototype.toStringHelperEx = function (shortform, brackets, scope, prefix) {
+ if (typeof prefix === "undefined") { prefix = ""; }
+ var builder = new TypeScript.MemberNameArray();
+ if(brackets) {
+ builder.prefix = prefix + "[";
+ } else {
+ builder.prefix = prefix + "(";
+ }
+ var paramLen = this.parameters.length;
+ var len = this.hasVariableArgList ? paramLen - 1 : paramLen;
+ for(var i = 0; i < len; i++) {
+ builder.add(TypeScript.MemberName.create(this.parameters[i].name + (this.parameters[i].isOptional() ? "?" : "") + ": "));
+ builder.add(this.parameters[i].getType().getScopedTypeNameEx(scope));
+ if(i < paramLen - 1) {
+ builder.add(TypeScript.MemberName.create(", "));
+ }
+ }
+ if(this.hasVariableArgList) {
+ builder.add(TypeScript.MemberName.create("..." + this.parameters[i].name + ": "));
+ builder.add(this.parameters[i].getType().getScopedTypeNameEx(scope));
+ }
+ if(shortform) {
+ if(brackets) {
+ builder.add(TypeScript.MemberName.create("] => "));
+ } else {
+ builder.add(TypeScript.MemberName.create(") => "));
+ }
+ } else {
+ if(brackets) {
+ builder.add(TypeScript.MemberName.create("]: "));
+ } else {
+ builder.add(TypeScript.MemberName.create("): "));
+ }
+ }
+ if(this.returnType.type) {
+ builder.add(this.returnType.type.getScopedTypeNameEx(scope));
+ } else {
+ builder.add(TypeScript.MemberName.create("any"));
+ }
+ return builder;
+ };
+ return Signature;
+ })();
+ TypeScript.Signature = Signature;
+ var SignatureGroup = (function () {
+ function SignatureGroup() {
+ this.signatures = [];
+ this.hasImplementation = true;
+ this.definitionSignature = null;
+ this.hasBeenTypechecked = false;
+ this.flags = TypeScript.SignatureFlags.None;
+ }
+ SignatureGroup.prototype.addSignature = function (signature) {
+ if(this.signatures == null) {
+ this.signatures = new Array();
+ }
+ this.signatures[this.signatures.length] = signature;
+ if(signature.declAST && !signature.declAST.isOverload && !signature.declAST.isSignature() && !TypeScript.hasFlag(signature.declAST.fncFlags, TypeScript.FncFlags.Ambient) && TypeScript.hasFlag(signature.declAST.fncFlags, TypeScript.FncFlags.Definition)) {
+ this.definitionSignature = signature;
+ }
+ };
+ SignatureGroup.prototype.toString = function () {
+ return this.signatures.toString();
+ };
+ SignatureGroup.prototype.toStrings = function (prefix, shortform, scope) {
+ var result = [];
+ var len = this.signatures.length;
+ if(len > 1) {
+ shortform = false;
+ }
+ for(var i = 0; i < len; i++) {
+ if(len > 1 && this.signatures[i] == this.definitionSignature) {
+ continue;
+ }
+ if(this.flags & TypeScript.SignatureFlags.IsIndexer) {
+ result.push(this.signatures[i].toStringHelperEx(shortform, true, scope));
+ } else {
+ result.push(this.signatures[i].toStringHelperEx(shortform, false, scope, prefix));
+ }
+ }
+ return result;
+ };
+ SignatureGroup.prototype.specializeType = function (pattern, replacement, checker) {
+ var result = new SignatureGroup();
+ if(this.signatures) {
+ for(var i = 0, len = this.signatures.length; i < len; i++) {
+ result.addSignature(this.signatures[i].specializeType(pattern, replacement, checker));
+ }
+ }
+ return result;
+ };
+ SignatureGroup.prototype.verifySignatures = function (checker) {
+ var len = 0;
+ if(this.signatures && ((len = this.signatures.length) > 0)) {
+ for(var i = 0; i < len; i++) {
+ for(var j = i + 1; j < len; j++) {
+ if(this.signatures[i].declAST && this.signatures[j].declAST && (!TypeScript.hasFlag(this.signatures[i].declAST.fncFlags, TypeScript.FncFlags.Definition) && !TypeScript.hasFlag(this.signatures[j].declAST.fncFlags, TypeScript.FncFlags.Definition)) && checker.signaturesAreIdentical(this.signatures[i], this.signatures[j])) {
+ checker.errorReporter.simpleError(this.signatures[i].declAST, (this.signatures[i].declAST && this.signatures[i].declAST.name) ? "Signature for '" + this.signatures[i].declAST.name.actualText + "' is duplicated" : "Signature is duplicated");
+ }
+ }
+ if(this.definitionSignature) {
+ if(!checker.signatureIsAssignableToTarget(this.definitionSignature, this.signatures[i])) {
+ checker.errorReporter.simpleError(this.signatures[i].declAST, "Overload signature is not compatible with function definition");
+ }
+ }
+ }
+ }
+ };
+ SignatureGroup.prototype.typeCheck = function (checker, ast, hasConstruct) {
+ if(this.hasBeenTypechecked) {
+ return;
+ }
+ this.hasBeenTypechecked = true;
+ var len = 0;
+ if(this.signatures && ((len = this.signatures.length) > 0)) {
+ for(var i = 0; i < len; i++) {
+ if(!hasConstruct && !this.definitionSignature && this.signatures[i].declAST && this.signatures[i].declAST.isOverload && !TypeScript.hasFlag(this.signatures[i].declAST.fncFlags, TypeScript.FncFlags.Ambient)) {
+ checker.errorReporter.simpleError(this.signatures[i].declAST, "Overload declaration lacks definition");
+ }
+ if(this.signatures[i].declAST && this.signatures[i].declAST.isConstructor && this.signatures[i].declAST.classDecl && this.signatures[i].declAST.classDecl.type.symbol.typeCheckStatus == TypeScript.TypeCheckStatus.NotStarted) {
+ checker.typeFlow.typeCheck(this.signatures[i].declAST.classDecl);
+ }
+ checker.typeFlow.typeCheck(this.signatures[i].declAST);
+ }
+ this.verifySignatures(checker);
+ }
+ };
+ return SignatureGroup;
+ })();
+ TypeScript.SignatureGroup = SignatureGroup;
+})(TypeScript || (TypeScript = {}));
+var TypeScript;
+(function (TypeScript) {
+ (function (TypeCheckStatus) {
+ TypeCheckStatus._map = [];
+ TypeCheckStatus._map[0] = "NotStarted";
+ TypeCheckStatus.NotStarted = 0;
+ TypeCheckStatus._map[1] = "Started";
+ TypeCheckStatus.Started = 1;
+ TypeCheckStatus._map[2] = "Finished";
+ TypeCheckStatus.Finished = 2;
+ })(TypeScript.TypeCheckStatus || (TypeScript.TypeCheckStatus = {}));
+ var TypeCheckStatus = TypeScript.TypeCheckStatus;
+ function aLexicallyEnclosesB(a, b) {
+ if(a.declAST && b && b.declAST && a.declAST.nodeType == TypeScript.NodeType.FuncDecl) {
+ return a.declAST.minChar <= b.declAST.minChar && a.declAST.limChar >= b.declAST.limChar;
+ } else {
+ return false;
+ }
+ }
+ TypeScript.aLexicallyEnclosesB = aLexicallyEnclosesB;
+ function aEnclosesB(a, b) {
+ while(a.container) {
+ if(a == b || aLexicallyEnclosesB(a.container, b)) {
+ return true;
+ }
+ a = a.container;
+ }
+ return false;
+ }
+ TypeScript.aEnclosesB = aEnclosesB;
+ var Symbol = (function () {
+ function Symbol(name, location, length, unitIndex) {
+ this.name = name;
+ this.location = location;
+ this.length = length;
+ this.unitIndex = unitIndex;
+ this.bound = false;
+ this.flags = TypeScript.SymbolFlags.None;
+ this.isObjectLitField = false;
+ this.declAST = null;
+ this.declModule = null;
+ this.passSymbolCreated = TypeScript.CompilerDiagnostics.analysisPass;
+ }
+ Symbol.prototype.instanceScope = function () {
+ return null;
+ };
+ Symbol.prototype.isVariable = function () {
+ return false;
+ };
+ Symbol.prototype.isMember = function () {
+ return false;
+ };
+ Symbol.prototype.isInferenceSymbol = function () {
+ return false;
+ };
+ Symbol.prototype.isWith = function () {
+ return false;
+ };
+ Symbol.prototype.writeable = function () {
+ return false;
+ };
+ Symbol.prototype.isType = function () {
+ return false;
+ };
+ Symbol.prototype.getType = function () {
+ return null;
+ };
+ Symbol.prototype.isAccessor = function () {
+ return false;
+ };
+ Symbol.prototype.isInstanceProperty = function () {
+ return TypeScript.hasFlag(this.flags, TypeScript.SymbolFlags.Property) && (!TypeScript.hasFlag(this.flags, TypeScript.SymbolFlags.ModuleMember));
+ };
+ Symbol.prototype.getTypeName = function (scope) {
+ return this.getTypeNameEx(scope).toString();
+ };
+ Symbol.prototype.getTypeNameEx = function (scope) {
+ return TypeScript.MemberName.create(this.toString());
+ };
+ Symbol.prototype.getOptionalNameString = function () {
+ return TypeScript.hasFlag(this.flags, TypeScript.SymbolFlags.Optional) ? "?" : "";
+ };
+ Symbol.prototype.pathToRoot = function () {
+ var path = new Array();
+ var node = this;
+ while(node && (node.name != TypeScript.globalId)) {
+ path[path.length] = node;
+ node = node.container;
+ }
+ return path;
+ };
+ Symbol.prototype.findCommonAncestorPath = function (b) {
+ if(this.container == null) {
+ return new Array();
+ }
+ var aPath = this.container.pathToRoot();
+ var bPath;
+ if(b) {
+ bPath = b.pathToRoot();
+ } else {
+ bPath = new Array();
+ }
+ var commonNodeIndex = -1;
+ for(var i = 0, aLen = aPath.length; i < aLen; i++) {
+ var aNode = aPath[i];
+ for(var j = 0, bLen = bPath.length; j < bLen; j++) {
+ var bNode = bPath[j];
+ if(aNode == bNode) {
+ commonNodeIndex = i;
+ break;
+ }
+ }
+ if(commonNodeIndex >= 0) {
+ break;
+ }
+ }
+ if(commonNodeIndex >= 0) {
+ return aPath.slice(0, commonNodeIndex);
+ } else {
+ return aPath;
+ }
+ };
+ Symbol.prototype.getPrettyName = function (scopeSymbol) {
+ return this.name;
+ };
+ Symbol.prototype.scopeRelativeName = function (scope) {
+ if(scope == null) {
+ return this.getPrettyName(null) + this.getOptionalNameString();
+ }
+ var lca = this.findCommonAncestorPath(scope.container);
+ var builder = "";
+ for(var i = 0, len = lca.length; i < len; i++) {
+ var prettyName = lca[i].getPrettyName(i == len - 1 ? scope.container : lca[i + 1]);
+ builder = prettyName + "." + builder;
+ }
+ builder += this.getPrettyName(len == 0 ? scope.container : lca[0]) + this.getOptionalNameString();
+ return builder;
+ };
+ Symbol.prototype.fullName = function () {
+ var builder = this.name;
+ var ancestor = this.container;
+ while(ancestor && (ancestor.name != TypeScript.globalId)) {
+ builder = ancestor.name + "." + builder;
+ ancestor = ancestor.container;
+ }
+ return builder;
+ };
+ Symbol.prototype.isExternallyVisible = function (checker) {
+ if(this == checker.gloMod) {
+ return true;
+ }
+ if(TypeScript.hasFlag(this.flags, TypeScript.SymbolFlags.Private)) {
+ return false;
+ }
+ if(!TypeScript.hasFlag(this.flags, TypeScript.SymbolFlags.Exported)) {
+ return this.container == checker.gloMod;
+ }
+ return this.container.isExternallyVisible(checker);
+ };
+ Symbol.prototype.visible = function (scope, checker) {
+ if(checker == null || this.container == checker.gloMod) {
+ return true;
+ }
+ if(TypeScript.hasFlag(this.flags, TypeScript.SymbolFlags.ModuleMember)) {
+ if(TypeScript.hasFlag(this.flags, TypeScript.SymbolFlags.Exported)) {
+ if(!TypeScript.hasFlag(this.flags, TypeScript.SymbolFlags.Private)) {
+ return true;
+ } else {
+ return aEnclosesB(this, scope.container);
+ }
+ } else {
+ return checker && (checker.currentModDecl == this.declModule) || (checker.currentModDecl && checker.currentModDecl.mod && checker.currentModDecl.mod.symbol && this.declModule && this.declModule.mod && this.declModule.mod.symbol && aEnclosesB(checker.currentModDecl.mod.symbol, this.declModule.mod.symbol));
+ }
+ } else {
+ var isFunction = this.declAST && this.declAST.nodeType == TypeScript.NodeType.FuncDecl;
+ var isMethod = isFunction && (this.declAST).isMethod();
+ var isStaticFunction = isFunction && TypeScript.hasFlag((this.declAST).fncFlags, TypeScript.FncFlags.Static);
+ var isPrivateMethod = isMethod && TypeScript.hasFlag((this.declAST).fncFlags, TypeScript.FncFlags.Private);
+ var isAlias = this.isType() && (this).aliasLink;
+ if(this.isMember() || isMethod || isStaticFunction || isAlias) {
+ if(TypeScript.hasFlag(this.flags, TypeScript.SymbolFlags.Private) || isPrivateMethod) {
+ if(scope.container == null && this.container != scope.container) {
+ return false;
+ } else {
+ return this.container == null ? true : aEnclosesB(scope.container, this.container);
+ }
+ } else {
+ return true;
+ }
+ } else {
+ if(this.container) {
+ return aEnclosesB(this, scope.container);
+ } else {
+ return true;
+ }
+ }
+ }
+ };
+ Symbol.prototype.addRef = function (identifier) {
+ if(!this.refs) {
+ this.refs = [];
+ }
+ this.refs[this.refs.length] = identifier;
+ };
+ Symbol.prototype.toString = function () {
+ if(this.name) {
+ return this.name;
+ } else {
+ return "_anonymous";
+ }
+ };
+ Symbol.prototype.print = function (outfile) {
+ outfile.Write(this.toString());
+ };
+ Symbol.prototype.specializeType = function (pattern, replacement, checker) {
+ throw new Error("please implement in derived class");
+ };
+ Symbol.prototype.setType = function (type) {
+ throw new Error("please implement in derived class");
+ };
+ Symbol.prototype.kind = function () {
+ throw new Error("please implement in derived class");
+ };
+ Symbol.prototype.getInterfaceDeclFromSymbol = function (checker) {
+ if(this.declAST != null) {
+ if(this.declAST.nodeType == TypeScript.NodeType.InterfaceDeclaration) {
+ return this.declAST;
+ } else {
+ if(this.container != null && this.container != checker.gloMod && this.container.declAST.nodeType == TypeScript.NodeType.InterfaceDeclaration) {
+ return this.container.declAST;
+ }
+ }
+ }
+ return null;
+ };
+ Symbol.prototype.getVarDeclFromSymbol = function () {
+ if(this.declAST != null && this.declAST.nodeType == TypeScript.NodeType.VarDecl) {
+ return this.declAST;
+ }
+ return null;
+ };
+ Symbol.prototype.getDocComments = function () {
+ if(this.declAST != null) {
+ return this.declAST.getDocComments();
+ }
+ return [];
+ };
+ Symbol.prototype.isStatic = function () {
+ return TypeScript.hasFlag(this.flags, TypeScript.SymbolFlags.Static);
+ };
+ return Symbol;
+ })();
+ TypeScript.Symbol = Symbol;
+ var ValueLocation = (function () {
+ function ValueLocation() { }
+ return ValueLocation;
+ })();
+ TypeScript.ValueLocation = ValueLocation;
+ var InferenceSymbol = (function (_super) {
+ __extends(InferenceSymbol, _super);
+ function InferenceSymbol(name, location, length, unitIndex) {
+ _super.call(this, name, location, length, unitIndex);
+ this.typeCheckStatus = TypeCheckStatus.NotStarted;
+ }
+ InferenceSymbol.prototype.isInferenceSymbol = function () {
+ return true;
+ };
+ InferenceSymbol.prototype.transferVarFlags = function (varFlags) {
+ if(TypeScript.hasFlag(varFlags, TypeScript.VarFlags.Ambient)) {
+ this.flags |= TypeScript.SymbolFlags.Ambient;
+ }
+ if(TypeScript.hasFlag(varFlags, TypeScript.VarFlags.Constant)) {
+ this.flags |= TypeScript.SymbolFlags.Constant;
+ }
+ if(TypeScript.hasFlag(varFlags, TypeScript.VarFlags.Static)) {
+ this.flags |= TypeScript.SymbolFlags.Static;
+ }
+ if(TypeScript.hasFlag(varFlags, TypeScript.VarFlags.Property)) {
+ this.flags |= TypeScript.SymbolFlags.Property;
+ }
+ if(TypeScript.hasFlag(varFlags, TypeScript.VarFlags.Private)) {
+ this.flags |= TypeScript.SymbolFlags.Private;
+ }
+ if(TypeScript.hasFlag(varFlags, TypeScript.VarFlags.Public)) {
+ this.flags |= TypeScript.SymbolFlags.Public;
+ }
+ if(TypeScript.hasFlag(varFlags, TypeScript.VarFlags.Readonly)) {
+ this.flags |= TypeScript.SymbolFlags.Readonly;
+ }
+ if(TypeScript.hasFlag(varFlags, TypeScript.VarFlags.Exported)) {
+ this.flags |= TypeScript.SymbolFlags.Exported;
+ }
+ };
+ return InferenceSymbol;
+ })(Symbol);
+ TypeScript.InferenceSymbol = InferenceSymbol;
+ var TypeSymbol = (function (_super) {
+ __extends(TypeSymbol, _super);
+ function TypeSymbol(locName, location, length, unitIndex, type) {
+ _super.call(this, locName, location, length, unitIndex);
+ this.type = type;
+ this.expansions = [];
+ this.expansionsDeclAST = [];
+ this.isDynamic = false;
+ this.isMethod = false;
+ this.aliasLink = null;
+ this.onlyReferencedAsTypeRef = TypeScript.optimizeModuleCodeGen;
+ this.prettyName = this.name;
+ }
+ TypeSymbol.prototype.addLocation = function (loc) {
+ if(this.additionalLocations == null) {
+ this.additionalLocations = [];
+ }
+ this.additionalLocations[this.additionalLocations.length] = loc;
+ };
+ TypeSymbol.prototype.kind = function () {
+ return TypeScript.SymbolKind.Type;
+ };
+ TypeSymbol.prototype.isType = function () {
+ return true;
+ };
+ TypeSymbol.prototype.getType = function () {
+ return this.type;
+ };
+ TypeSymbol.prototype.getTypeNameEx = function (scope) {
+ return this.type.getMemberTypeNameEx(this.name ? this.name + this.getOptionalNameString() : "", false, false, scope);
+ };
+ TypeSymbol.prototype.instanceScope = function () {
+ if(!(this.type.typeFlags & TypeScript.TypeFlags.IsClass) && this.type.isClass()) {
+ return this.type.instanceType.constructorScope;
+ } else {
+ return this.type.containedScope;
+ }
+ };
+ TypeSymbol.prototype.toString = function () {
+ var result = this.type.getTypeName();
+ if(this.name) {
+ result = this.name + ":" + result;
+ }
+ return result;
+ };
+ TypeSymbol.prototype.isClass = function () {
+ return this.instanceType != null;
+ };
+ TypeSymbol.prototype.isFunction = function () {
+ return this.declAST != null && this.declAST.nodeType == TypeScript.NodeType.FuncDecl;
+ };
+ TypeSymbol.prototype.specializeType = function (pattern, replacement, checker) {
+ if(this.type == pattern) {
+ return replacement.symbol;
+ } else {
+ var replType = this.type.specializeType(pattern, replacement, checker, false);
+ if(replType != this.type) {
+ var result = new TypeSymbol(this.name, -1, 0, -1, replType);
+ return result;
+ } else {
+ return this;
+ }
+ }
+ };
+ TypeSymbol.prototype.getPrettyName = function (scopeSymbol) {
+ if(!!scopeSymbol && TypeScript.isQuoted(this.prettyName) && this.type.isModuleType()) {
+ var symbolPath = scopeSymbol.pathToRoot();
+ var prettyName = this.getPrettyNameOfDynamicModule(symbolPath);
+ if(prettyName != null) {
+ return prettyName.name;
+ }
+ }
+ return this.prettyName;
+ };
+ TypeSymbol.prototype.getPrettyNameOfDynamicModule = function (scopeSymbolPath) {
+ var scopeSymbolPathLength = scopeSymbolPath.length;
+ var externalSymbol = null;
+ if(scopeSymbolPath.length > 0 && scopeSymbolPath[scopeSymbolPathLength - 1].getType().isModuleType() && (scopeSymbolPath[scopeSymbolPathLength - 1]).isDynamic) {
+ if(scopeSymbolPathLength > 1 && scopeSymbolPath[scopeSymbolPathLength - 2].getType().isModuleType() && (scopeSymbolPath[scopeSymbolPathLength - 2]).isDynamic) {
+ var moduleType = scopeSymbolPath[scopeSymbolPathLength - 2].getType();
+ externalSymbol = moduleType.findDynamicModuleName(this.type);
+ }
+ if(externalSymbol == null) {
+ var moduleType = scopeSymbolPath[scopeSymbolPathLength - 1].getType();
+ externalSymbol = moduleType.findDynamicModuleName(this.type);
+ }
+ }
+ return externalSymbol;
+ };
+ TypeSymbol.prototype.getDocComments = function () {
+ var comments = [];
+ if(this.declAST != null) {
+ comments = comments.concat(this.declAST.getDocComments());
+ }
+ for(var i = 0; i < this.expansionsDeclAST.length; i++) {
+ comments = comments.concat(this.expansionsDeclAST[i].getDocComments());
+ }
+ return comments;
+ };
+ return TypeSymbol;
+ })(InferenceSymbol);
+ TypeScript.TypeSymbol = TypeSymbol;
+ var WithSymbol = (function (_super) {
+ __extends(WithSymbol, _super);
+ function WithSymbol(location, unitIndex, withType) {
+ _super.call(this, "with", location, 4, unitIndex, withType);
+ }
+ WithSymbol.prototype.isWith = function () {
+ return true;
+ };
+ return WithSymbol;
+ })(TypeSymbol);
+ TypeScript.WithSymbol = WithSymbol;
+ var FieldSymbol = (function (_super) {
+ __extends(FieldSymbol, _super);
+ function FieldSymbol(name, location, unitIndex, canWrite, field) {
+ _super.call(this, name, location, name.length, unitIndex);
+ this.canWrite = canWrite;
+ this.field = field;
+ this.getter = null;
+ this.setter = null;
+ this.hasBeenEmitted = false;
+ this.name = name;
+ this.location = location;
+ }
+ FieldSymbol.prototype.kind = function () {
+ return TypeScript.SymbolKind.Field;
+ };
+ FieldSymbol.prototype.writeable = function () {
+ return this.isAccessor() ? this.setter != null : this.canWrite;
+ };
+ FieldSymbol.prototype.getType = function () {
+ return this.field.typeLink.type;
+ };
+ FieldSymbol.prototype.getTypeNameEx = function (scope) {
+ return TypeScript.MemberName.create(this.field.typeLink.type.getScopedTypeNameEx(scope), this.name + this.getOptionalNameString() + ": ", "");
+ };
+ FieldSymbol.prototype.isMember = function () {
+ return true;
+ };
+ FieldSymbol.prototype.setType = function (type) {
+ this.field.typeLink.type = type;
+ };
+ FieldSymbol.prototype.isAccessor = function () {
+ return this.getter != null || this.setter != null;
+ };
+ FieldSymbol.prototype.isVariable = function () {
+ return true;
+ };
+ FieldSymbol.prototype.toString = function () {
+ return this.getTypeNameEx(null).toString();
+ };
+ FieldSymbol.prototype.specializeType = function (pattern, replacement, checker) {
+ var rType = this.field.typeLink.type.specializeType(pattern, replacement, checker, false);
+ if(rType != this.field.typeLink.type) {
+ var fieldDef = new ValueLocation();
+ var result = new FieldSymbol(this.name, 0, checker.locationInfo.unitIndex, this.canWrite, fieldDef);
+ result.flags = this.flags;
+ fieldDef.symbol = result;
+ fieldDef.typeLink = new TypeScript.TypeLink();
+ result.setType(rType);
+ result.typeCheckStatus = TypeCheckStatus.Finished;
+ return result;
+ } else {
+ return this;
+ }
+ };
+ FieldSymbol.prototype.getDocComments = function () {
+ if(this.getter != null || this.setter != null) {
+ var comments = [];
+ if(this.getter != null) {
+ comments = comments.concat(this.getter.getDocComments());
+ }
+ if(this.setter != null) {
+ comments = comments.concat(this.setter.getDocComments());
+ }
+ return comments;
+ } else {
+ if(this.declAST != null) {
+ return this.declAST.getDocComments();
+ }
+ }
+ return [];
+ };
+ return FieldSymbol;
+ })(InferenceSymbol);
+ TypeScript.FieldSymbol = FieldSymbol;
+ var ParameterSymbol = (function (_super) {
+ __extends(ParameterSymbol, _super);
+ function ParameterSymbol(name, location, unitIndex, parameter) {
+ _super.call(this, name, location, name.length, unitIndex);
+ this.parameter = parameter;
+ this.paramDocComment = null;
+ this.funcDecl = null;
+ this.argsOffset = (-1);
+ this.name = name;
+ this.location = location;
+ }
+ ParameterSymbol.prototype.kind = function () {
+ return TypeScript.SymbolKind.Parameter;
+ };
+ ParameterSymbol.prototype.writeable = function () {
+ return true;
+ };
+ ParameterSymbol.prototype.getType = function () {
+ return this.parameter.typeLink.type;
+ };
+ ParameterSymbol.prototype.setType = function (type) {
+ this.parameter.typeLink.type = type;
+ };
+ ParameterSymbol.prototype.isVariable = function () {
+ return true;
+ };
+ ParameterSymbol.prototype.isOptional = function () {
+ if(this.parameter && this.parameter.symbol && this.parameter.symbol.declAST) {
+ return (this.parameter.symbol.declAST).isOptional;
+ } else {
+ return false;
+ }
+ };
+ ParameterSymbol.prototype.getTypeNameEx = function (scope) {
+ return TypeScript.MemberName.create(this.getType().getScopedTypeNameEx(scope), this.name + (this.isOptional() ? "?" : "") + ": ", "");
+ };
+ ParameterSymbol.prototype.toString = function () {
+ return this.getTypeNameEx(null).toString();
+ };
+ ParameterSymbol.prototype.specializeType = function (pattern, replacement, checker) {
+ var rType = this.parameter.typeLink.type.specializeType(pattern, replacement, checker, false);
+ if(this.parameter.typeLink.type != rType) {
+ var paramDef = new ValueLocation();
+ var result = new ParameterSymbol(this.name, 0, checker.locationInfo.unitIndex, paramDef);
+ paramDef.symbol = result;
+ result.setType(rType);
+ return result;
+ } else {
+ return this;
+ }
+ };
+ ParameterSymbol.prototype.getParameterDocComments = function () {
+ if(!this.paramDocComment) {
+ var parameterComments = [];
+ if(this.funcDecl) {
+ var fncDocComments = this.funcDecl.getDocComments();
+ var paramComment = TypeScript.Comment.getParameterDocCommentText(this.name, fncDocComments);
+ if(paramComment != "") {
+ parameterComments.push(paramComment);
+ }
+ }
+ var docComments = TypeScript.Comment.getDocCommentText(this.getDocComments());
+ if(docComments != "") {
+ parameterComments.push(docComments);
+ }
+ this.paramDocComment = parameterComments.join("\n");
+ }
+ return this.paramDocComment;
+ };
+ return ParameterSymbol;
+ })(InferenceSymbol);
+ TypeScript.ParameterSymbol = ParameterSymbol;
+ var VariableSymbol = (function (_super) {
+ __extends(VariableSymbol, _super);
+ function VariableSymbol(name, location, unitIndex, variable) {
+ _super.call(this, name, location, name.length, unitIndex);
+ this.variable = variable;
+ }
+ VariableSymbol.prototype.kind = function () {
+ return TypeScript.SymbolKind.Variable;
+ };
+ VariableSymbol.prototype.writeable = function () {
+ return true;
+ };
+ VariableSymbol.prototype.getType = function () {
+ return this.variable.typeLink.type;
+ };
+ VariableSymbol.prototype.getTypeNameEx = function (scope) {
+ return TypeScript.MemberName.create(this.getType().getScopedTypeNameEx(scope), this.name + ": ", "");
+ };
+ VariableSymbol.prototype.setType = function (type) {
+ this.variable.typeLink.type = type;
+ };
+ VariableSymbol.prototype.isVariable = function () {
+ return true;
+ };
+ return VariableSymbol;
+ })(InferenceSymbol);
+ TypeScript.VariableSymbol = VariableSymbol;
+})(TypeScript || (TypeScript = {}));
+var TypeScript;
+(function (TypeScript) {
+ var ScopedMembers = (function () {
+ function ScopedMembers(dualMembers) {
+ this.dualMembers = dualMembers;
+ this.allMembers = this.dualMembers;
+ this.publicMembers = this.dualMembers.primaryTable;
+ this.privateMembers = this.dualMembers.secondaryTable;
+ }
+ ScopedMembers.prototype.addPublicMember = function (key, data) {
+ return this.dualMembers.primaryTable.add(key, data);
+ };
+ ScopedMembers.prototype.addPrivateMember = function (key, data) {
+ return this.dualMembers.secondaryTable.add(key, data);
+ };
+ return ScopedMembers;
+ })();
+ TypeScript.ScopedMembers = ScopedMembers;
+ (function (SymbolKind) {
+ SymbolKind._map = [];
+ SymbolKind._map[0] = "None";
+ SymbolKind.None = 0;
+ SymbolKind._map[1] = "Type";
+ SymbolKind.Type = 1;
+ SymbolKind._map[2] = "Field";
+ SymbolKind.Field = 2;
+ SymbolKind._map[3] = "Parameter";
+ SymbolKind.Parameter = 3;
+ SymbolKind._map[4] = "Variable";
+ SymbolKind.Variable = 4;
+ })(TypeScript.SymbolKind || (TypeScript.SymbolKind = {}));
+ var SymbolKind = TypeScript.SymbolKind;
+ var SymbolScope = (function () {
+ function SymbolScope(container) {
+ this.container = container;
+ }
+ SymbolScope.prototype.printLabel = function () {
+ return "base";
+ };
+ SymbolScope.prototype.getAllSymbolNames = function (members) {
+ return [
+ "please",
+ "implement",
+ "in",
+ "derived",
+ "classes"
+ ];
+ };
+ SymbolScope.prototype.getAllTypeSymbolNames = function (members) {
+ return [
+ "please",
+ "implement",
+ "in",
+ "derived",
+ "classes"
+ ];
+ };
+ SymbolScope.prototype.getAllValueSymbolNames = function (members) {
+ return [
+ "please",
+ "implement",
+ "in",
+ "derived",
+ "classes"
+ ];
+ };
+ SymbolScope.prototype.search = function (filter, name, publicOnly, typespace) {
+ return null;
+ };
+ SymbolScope.prototype.findLocal = function (name, publicOnly, typespace) {
+ return null;
+ };
+ SymbolScope.prototype.find = function (name, publicOnly, typespace) {
+ return null;
+ };
+ SymbolScope.prototype.findImplementation = function (name, publicOnly, typespace) {
+ return null;
+ };
+ SymbolScope.prototype.findAmbient = function (name, publicOnly, typespace) {
+ return null;
+ };
+ SymbolScope.prototype.print = function (outfile) {
+ if(this.container) {
+ outfile.WriteLine(this.printLabel() + " scope with container: " + this.container.name + "...");
+ } else {
+ outfile.WriteLine(this.printLabel() + " scope...");
+ }
+ };
+ SymbolScope.prototype.enter = function (container, ast, symbol, errorReporter, publicOnly, typespace, ambient) {
+ throw new Error("please implement in derived class");
+ };
+ SymbolScope.prototype.getTable = function () {
+ throw new Error("please implement in derived class");
+ };
+ return SymbolScope;
+ })();
+ TypeScript.SymbolScope = SymbolScope;
+ function symbolCanBeUsed(sym, publicOnly) {
+ return publicOnly ? !(TypeScript.hasFlag(sym.flags, TypeScript.SymbolFlags.Private) || (sym.declAST && sym.declAST.nodeType == TypeScript.NodeType.FuncDecl && TypeScript.hasFlag((sym.declAST).fncFlags, TypeScript.FncFlags.Private))) : true;
+ }
+ var SymbolAggregateScope = (function (_super) {
+ __extends(SymbolAggregateScope, _super);
+ function SymbolAggregateScope(container) {
+ _super.call(this, container);
+ this.valueCache = null;
+ this.valueImplCache = null;
+ this.valueAmbientCache = null;
+ this.typeCache = null;
+ this.typeImplCache = null;
+ this.typeAmbientCache = null;
+ this.parents = null;
+ this.container = container;
+ }
+ SymbolAggregateScope.prototype.printLabel = function () {
+ return "agg";
+ };
+ SymbolAggregateScope.prototype.search = function (filter, name, publicOnly, typespace) {
+ if(this.parents) {
+ for(var i = 0; i < this.parents.length; i++) {
+ var sym = this.parents[i].search(filter, name, publicOnly, typespace);
+ if(sym) {
+ if(filter.update(sym)) {
+ return sym;
+ }
+ }
+ }
+ }
+ return filter.result;
+ };
+ SymbolAggregateScope.prototype.getAllSymbolNames = function (members) {
+ var result = [];
+ if(this.parents) {
+ for(var i = 0; i < this.parents.length; i++) {
+ var parentResult = this.parents[i].getAllSymbolNames(members);
+ if(parentResult) {
+ result = result.concat(parentResult);
+ }
+ }
+ }
+ return result;
+ };
+ SymbolAggregateScope.prototype.getAllTypeSymbolNames = function (members) {
+ var result = [];
+ if(this.parents) {
+ for(var i = 0; i < this.parents.length; i++) {
+ var parentResult = this.parents[i].getAllTypeSymbolNames(members);
+ if(parentResult) {
+ result = result.concat(parentResult);
+ }
+ }
+ }
+ return result;
+ };
+ SymbolAggregateScope.prototype.getAllValueSymbolNames = function (members) {
+ var result = [];
+ if(this.parents) {
+ for(var i = 0; i < this.parents.length; i++) {
+ var parentResult = this.parents[i].getAllValueSymbolNames(members);
+ if(parentResult) {
+ result = result.concat(parentResult);
+ }
+ }
+ }
+ return result;
+ };
+ SymbolAggregateScope.prototype.print = function (outfile) {
+ _super.prototype.print.call(this, outfile);
+ if(this.parents) {
+ for(var i = 0; i < this.parents.length; i++) {
+ this.parents[i].print(outfile);
+ }
+ }
+ };
+ SymbolAggregateScope.prototype.findImplementation = function (name, publicOnly, typespace) {
+ var sym = null;
+ var i = 0;
+ var implCache = this.valueImplCache;
+ if(typespace) {
+ implCache = this.typeImplCache;
+ }
+ if(implCache && ((sym = implCache.lookup(name)) != null) && (publicOnly ? !(TypeScript.hasFlag(sym.flags, TypeScript.SymbolFlags.Private) || (sym.declAST && sym.declAST.nodeType == TypeScript.NodeType.FuncDecl && TypeScript.hasFlag((sym.declAST).fncFlags, TypeScript.FncFlags.Private))) : true)) {
+ return sym;
+ }
+ if(this.parents) {
+ for(i = 0; i < this.parents.length; i++) {
+ sym = this.parents[i].findImplementation(name, publicOnly, typespace);
+ if(sym) {
+ break;
+ }
+ }
+ }
+ if(implCache) {
+ if(typespace) {
+ this.typeImplCache = new TypeScript.StringHashTable();
+ implCache = this.typeImplCache;
+ } else {
+ this.valueImplCache = new TypeScript.StringHashTable();
+ implCache = this.valueImplCache;
+ }
+ }
+ implCache.add(name, sym);
+ return sym;
+ };
+ SymbolAggregateScope.prototype.find = function (name, publicOnly, typespace) {
+ var sym = null;
+ var i = 0;
+ var cache = this.valueCache;
+ if(typespace) {
+ cache = this.typeCache;
+ }
+ if(cache && ((sym = cache.lookup(name)) != null) && (publicOnly ? !(TypeScript.hasFlag(sym.flags, TypeScript.SymbolFlags.Private) || (sym.declAST && sym.declAST.nodeType == TypeScript.NodeType.FuncDecl && TypeScript.hasFlag((sym.declAST).fncFlags, TypeScript.FncFlags.Private))) : true)) {
+ return sym;
+ }
+ if(this.parents) {
+ for(i = 0; i < this.parents.length; i++) {
+ sym = this.parents[i].find(name, publicOnly, typespace);
+ if(sym) {
+ break;
+ }
+ }
+ }
+ if(cache == null) {
+ if(typespace) {
+ this.typeCache = new TypeScript.StringHashTable();
+ cache = this.typeCache;
+ } else {
+ this.valueCache = new TypeScript.StringHashTable();
+ cache = this.valueCache;
+ }
+ }
+ cache.add(name, sym);
+ return sym;
+ };
+ SymbolAggregateScope.prototype.findAmbient = function (name, publicOnly, typespace) {
+ var sym = null;
+ var i = 0;
+ var cache = this.valueAmbientCache;
+ if(typespace) {
+ cache = this.typeAmbientCache;
+ }
+ if(cache && ((sym = cache.lookup(name)) != null)) {
+ return sym;
+ }
+ if(this.parents) {
+ for(i = 0; i < this.parents.length; i++) {
+ sym = this.parents[i].findAmbient(name, publicOnly, typespace);
+ if(sym) {
+ break;
+ }
+ }
+ }
+ if(cache == null) {
+ if(typespace) {
+ this.typeAmbientCache = new TypeScript.StringHashTable();
+ cache = this.typeAmbientCache;
+ } else {
+ this.valueAmbientCache = new TypeScript.StringHashTable();
+ cache = this.valueAmbientCache;
+ }
+ }
+ cache.add(name, sym);
+ return sym;
+ };
+ SymbolAggregateScope.prototype.addParentScope = function (parent) {
+ if(this.parents == null) {
+ this.parents = new Array();
+ }
+ this.parents[this.parents.length] = parent;
+ };
+ return SymbolAggregateScope;
+ })(SymbolScope);
+ TypeScript.SymbolAggregateScope = SymbolAggregateScope;
+ var SymbolTableScope = (function (_super) {
+ __extends(SymbolTableScope, _super);
+ function SymbolTableScope(valueMembers, ambientValueMembers, enclosedTypes, ambientEnclosedTypes, container) {
+ _super.call(this, container);
+ this.valueMembers = valueMembers;
+ this.ambientValueMembers = ambientValueMembers;
+ this.enclosedTypes = enclosedTypes;
+ this.ambientEnclosedTypes = ambientEnclosedTypes;
+ this.container = container;
+ }
+ SymbolTableScope.prototype.printLabel = function () {
+ return "table";
+ };
+ SymbolTableScope.prototype.getAllSymbolNames = function (members) {
+ var result = this.getAllTypeSymbolNames(members);
+ return result.concat(this.getAllValueSymbolNames(members));
+ };
+ SymbolTableScope.prototype.getAllTypeSymbolNames = function (members) {
+ var result = [];
+ if(this.ambientEnclosedTypes) {
+ result = result.concat(this.ambientEnclosedTypes.allMembers.getAllKeys());
+ }
+ if(this.enclosedTypes) {
+ result = result.concat(this.enclosedTypes.allMembers.getAllKeys());
+ }
+ return result;
+ };
+ SymbolTableScope.prototype.getAllValueSymbolNames = function (members) {
+ var result = [];
+ if(this.ambientValueMembers) {
+ result = result.concat(this.ambientValueMembers.allMembers.getAllKeys());
+ }
+ if(this.valueMembers) {
+ result = result.concat(this.valueMembers.allMembers.getAllKeys());
+ }
+ return result;
+ };
+ SymbolTableScope.prototype.search = function (filter, name, publicOnly, typespace) {
+ var sym = this.find(name, publicOnly, typespace);
+ filter.update(sym);
+ return filter.result;
+ };
+ SymbolTableScope.prototype.find = function (name, publicOnly, typespace) {
+ var table = null;
+ var ambientTable = null;
+ if(typespace) {
+ table = (this.enclosedTypes == null) ? null : publicOnly ? this.enclosedTypes.publicMembers : this.enclosedTypes.allMembers;
+ ambientTable = (this.ambientEnclosedTypes == null) ? null : publicOnly ? this.ambientEnclosedTypes.publicMembers : this.ambientEnclosedTypes.allMembers;
+ } else {
+ table = (this.valueMembers == null) ? null : publicOnly ? this.valueMembers.publicMembers : this.valueMembers.allMembers;
+ ambientTable = (this.ambientValueMembers == null) ? null : publicOnly ? this.ambientValueMembers.publicMembers : this.ambientValueMembers.allMembers;
+ }
+ if(ambientTable) {
+ var s = ambientTable.lookup(name);
+ if(s) {
+ return s;
+ }
+ }
+ if(table) {
+ var s = table.lookup(name);
+ if(s) {
+ return s;
+ }
+ }
+ return null;
+ };
+ SymbolTableScope.prototype.findAmbient = function (name, publicOnly, typespace) {
+ var ambientTable = (this.ambientValueMembers == null) ? null : publicOnly ? this.ambientValueMembers.publicMembers : this.ambientValueMembers.allMembers;
+ if(typespace) {
+ ambientTable = (this.ambientEnclosedTypes == null) ? null : publicOnly ? this.ambientEnclosedTypes.publicMembers : this.ambientEnclosedTypes.allMembers;
+ }
+ if(ambientTable) {
+ var s = ambientTable.lookup(name);
+ if(s) {
+ return s;
+ }
+ }
+ return null;
+ };
+ SymbolTableScope.prototype.print = function (outfile) {
+ _super.prototype.print.call(this, outfile);
+ if(this.ambientValueMembers) {
+ this.ambientValueMembers.allMembers.map(function (key, sym, context) {
+ outfile.WriteLine(" " + key);
+ }, null);
+ }
+ if(this.valueMembers) {
+ this.valueMembers.allMembers.map(function (key, sym, context) {
+ outfile.WriteLine(" " + key);
+ }, null);
+ }
+ if(this.ambientEnclosedTypes) {
+ this.ambientEnclosedTypes.allMembers.map(function (key, sym, context) {
+ outfile.WriteLine(" " + key);
+ }, null);
+ }
+ if(this.enclosedTypes) {
+ this.enclosedTypes.allMembers.map(function (key, sym, context) {
+ outfile.WriteLine(" " + key);
+ }, null);
+ }
+ };
+ SymbolTableScope.prototype.findImplementation = function (name, publicOnly, typespace) {
+ var sym = this.find(name, publicOnly, typespace);
+ if(sym) {
+ if(sym.kind() == SymbolKind.Type) {
+ var typeSym = sym;
+ if(!typeSym.type.hasImplementation()) {
+ sym = null;
+ }
+ } else {
+ if(sym.container) {
+ if(sym.container.kind() == SymbolKind.Type) {
+ var ctypeSym = sym.container;
+ if(!ctypeSym.type.hasImplementation()) {
+ sym = null;
+ }
+ }
+ }
+ }
+ }
+ return sym;
+ };
+ SymbolTableScope.prototype.getTable = function () {
+ return this.valueMembers.publicMembers;
+ };
+ return SymbolTableScope;
+ })(SymbolScope);
+ TypeScript.SymbolTableScope = SymbolTableScope;
+ var SymbolScopeBuilder = (function (_super) {
+ __extends(SymbolScopeBuilder, _super);
+ function SymbolScopeBuilder(valueMembers, ambientValueMembers, enclosedTypes, ambientEnclosedTypes, parent, container) {
+ _super.call(this, container);
+ this.valueMembers = valueMembers;
+ this.ambientValueMembers = ambientValueMembers;
+ this.enclosedTypes = enclosedTypes;
+ this.ambientEnclosedTypes = ambientEnclosedTypes;
+ this.parent = parent;
+ this.container = container;
+ }
+ SymbolScopeBuilder.prototype.printLabel = function () {
+ return "builder";
+ };
+ SymbolScopeBuilder.prototype.getAllSymbolNames = function (members) {
+ var result = this.getAllTypeSymbolNames(members);
+ return result.concat(this.getAllValueSymbolNames(members));
+ };
+ SymbolScopeBuilder.prototype.getAllTypeSymbolNames = function (members) {
+ var result = [];
+ if(this.ambientEnclosedTypes) {
+ result = result.concat(this.ambientEnclosedTypes.allMembers.getAllKeys());
+ }
+ if(this.enclosedTypes) {
+ result = result.concat(this.enclosedTypes.allMembers.getAllKeys());
+ }
+ if(!members && this.parent) {
+ var parentResult = this.parent.getAllTypeSymbolNames(members);
+ if(parentResult) {
+ result = result.concat(parentResult);
+ }
+ }
+ return result;
+ };
+ SymbolScopeBuilder.prototype.getAllValueSymbolNames = function (members) {
+ var result = [];
+ if(this.ambientValueMembers) {
+ result = result.concat(this.ambientValueMembers.allMembers.getAllKeys());
+ }
+ if(this.valueMembers) {
+ result = result.concat(this.valueMembers.allMembers.getAllKeys());
+ }
+ if(!members && this.parent) {
+ var parentResult = this.parent.getAllValueSymbolNames(members);
+ if(parentResult) {
+ result = result.concat(parentResult);
+ }
+ }
+ return result;
+ };
+ SymbolScopeBuilder.prototype.search = function (filter, name, publicOnly, typespace) {
+ var sym = null;
+ var table = (this.valueMembers == null) ? null : publicOnly ? this.valueMembers.publicMembers : this.valueMembers.allMembers;
+ var ambientTable = (this.ambientValueMembers == null) ? null : publicOnly ? this.ambientValueMembers.publicMembers : this.ambientValueMembers.allMembers;
+ if(typespace) {
+ table = (this.enclosedTypes == null) ? null : publicOnly ? this.enclosedTypes.publicMembers : this.enclosedTypes.allMembers;
+ ambientTable = (this.ambientEnclosedTypes == null) ? null : publicOnly ? this.ambientEnclosedTypes.publicMembers : this.ambientEnclosedTypes.allMembers;
+ }
+ if(ambientTable) {
+ if((sym = ambientTable.lookup(name)) != null) {
+ if(filter.update(sym)) {
+ return sym;
+ }
+ }
+ }
+ if(table) {
+ if((sym = table.lookup(name)) != null) {
+ if(filter.update(sym)) {
+ return sym;
+ }
+ }
+ }
+ if(this.parent) {
+ sym = this.parent.search(filter, name, publicOnly, typespace);
+ if(sym) {
+ if(filter.update(sym)) {
+ return sym;
+ }
+ }
+ }
+ return filter.result;
+ };
+ SymbolScopeBuilder.prototype.print = function (outfile) {
+ _super.prototype.print.call(this, outfile);
+ if(this.ambientValueMembers) {
+ this.ambientValueMembers.allMembers.map(function (key, s, context) {
+ var sym = s;
+ outfile.WriteLine(" " + key);
+ }, null);
+ }
+ if(this.valueMembers) {
+ this.valueMembers.allMembers.map(function (key, s, context) {
+ var sym = s;
+ outfile.WriteLine(" " + key);
+ }, null);
+ }
+ if(this.ambientEnclosedTypes) {
+ this.ambientEnclosedTypes.allMembers.map(function (key, s, context) {
+ var sym = s;
+ outfile.WriteLine(" " + key);
+ }, null);
+ }
+ if(this.enclosedTypes) {
+ this.enclosedTypes.allMembers.map(function (key, s, context) {
+ var sym = s;
+ outfile.WriteLine(" " + key);
+ }, null);
+ }
+ if(this.parent) {
+ this.parent.print(outfile);
+ }
+ };
+ SymbolScopeBuilder.prototype.find = function (name, publicOnly, typespace) {
+ var sym = null;
+ var table = (this.valueMembers == null) ? null : publicOnly ? this.valueMembers.publicMembers : this.valueMembers.allMembers;
+ var ambientTable = (this.ambientValueMembers == null) ? null : publicOnly ? this.ambientValueMembers.publicMembers : this.ambientValueMembers.allMembers;
+ if(typespace) {
+ table = (this.enclosedTypes == null) ? null : publicOnly ? this.enclosedTypes.publicMembers : this.enclosedTypes.allMembers;
+ ambientTable = (this.ambientEnclosedTypes == null) ? null : publicOnly ? this.ambientEnclosedTypes.publicMembers : this.ambientEnclosedTypes.allMembers;
+ }
+ if(ambientTable && ((sym = ambientTable.lookup(name)) != null)) {
+ return sym;
+ }
+ if(table && ((sym = table.lookup(name)) != null)) {
+ return sym;
+ }
+ if(this.parent) {
+ return this.parent.find(name, publicOnly, typespace);
+ }
+ return null;
+ };
+ SymbolScopeBuilder.prototype.findAmbient = function (name, publicOnly, typespace) {
+ var sym = null;
+ var ambientTable = (this.ambientValueMembers == null) ? null : publicOnly ? this.ambientValueMembers.publicMembers : this.ambientValueMembers.allMembers;
+ if(typespace) {
+ ambientTable = (this.ambientEnclosedTypes == null) ? null : publicOnly ? this.ambientEnclosedTypes.publicMembers : this.ambientEnclosedTypes.allMembers;
+ }
+ if(ambientTable && ((sym = ambientTable.lookup(name)) != null)) {
+ return sym;
+ }
+ if(this.parent) {
+ return this.parent.findAmbient(name, publicOnly, typespace);
+ }
+ return null;
+ };
+ SymbolScopeBuilder.prototype.findLocal = function (name, publicOnly, typespace) {
+ var sym = null;
+ var table = (this.valueMembers == null) ? null : publicOnly ? this.valueMembers.publicMembers : this.valueMembers.allMembers;
+ var ambientTable = (this.ambientValueMembers == null) ? null : publicOnly ? this.ambientValueMembers.publicMembers : this.ambientValueMembers.allMembers;
+ if(typespace) {
+ table = (this.enclosedTypes == null) ? null : publicOnly ? this.enclosedTypes.publicMembers : this.enclosedTypes.allMembers;
+ ambientTable = (this.ambientEnclosedTypes == null) ? null : publicOnly ? this.ambientEnclosedTypes.publicMembers : this.ambientEnclosedTypes.allMembers;
+ }
+ if(table) {
+ if((sym = table.lookup(name)) != null) {
+ if(sym) {
+ return sym;
+ }
+ }
+ }
+ if(ambientTable) {
+ if((sym = ambientTable.lookup(name)) != null) {
+ if(sym) {
+ return sym;
+ }
+ }
+ }
+ return null;
+ };
+ SymbolScopeBuilder.prototype.enter = function (container, ast, symbol, errorReporter, insertAsPublic, typespace, ambient) {
+ var table = null;
+ if(ambient) {
+ if(typespace) {
+ table = (this.ambientEnclosedTypes == null) ? null : insertAsPublic ? this.ambientEnclosedTypes.publicMembers : this.ambientEnclosedTypes.privateMembers;
+ } else {
+ table = (this.ambientValueMembers == null) ? null : insertAsPublic ? this.ambientValueMembers.publicMembers : this.ambientValueMembers.privateMembers;
+ }
+ } else {
+ if(typespace) {
+ table = (this.enclosedTypes == null) ? null : insertAsPublic ? this.enclosedTypes.publicMembers : this.enclosedTypes.privateMembers;
+ } else {
+ table = (this.valueMembers == null) ? null : insertAsPublic ? this.valueMembers.publicMembers : this.valueMembers.privateMembers;
+ }
+ }
+ if(table) {
+ if(!table.add(symbol.name, symbol)) {
+ errorReporter.duplicateIdentifier(ast, symbol.name);
+ }
+ } else {
+ TypeScript.CompilerDiagnostics.Alert("YYYYY");
+ }
+ symbol.container = container;
+ };
+ SymbolScopeBuilder.prototype.getTable = function () {
+ return this.valueMembers.allMembers;
+ };
+ return SymbolScopeBuilder;
+ })(SymbolScope);
+ TypeScript.SymbolScopeBuilder = SymbolScopeBuilder;
+ var FilteredSymbolScope = (function (_super) {
+ __extends(FilteredSymbolScope, _super);
+ function FilteredSymbolScope(scope, container, filter) {
+ _super.call(this, container);
+ this.scope = scope;
+ this.filter = filter;
+ }
+ FilteredSymbolScope.prototype.print = function (outfile) {
+ this.scope.print(outfile);
+ };
+ FilteredSymbolScope.prototype.find = function (name, publicOnly, typespace) {
+ this.filter.reset();
+ return this.scope.search(this.filter, name, publicOnly, typespace);
+ };
+ FilteredSymbolScope.prototype.findLocal = function (name, publicOnly, typespace) {
+ return this.scope.findLocal(name, publicOnly, typespace);
+ };
+ return FilteredSymbolScope;
+ })(SymbolScope);
+ TypeScript.FilteredSymbolScope = FilteredSymbolScope;
+ var FilteredSymbolScopeBuilder = (function (_super) {
+ __extends(FilteredSymbolScopeBuilder, _super);
+ function FilteredSymbolScopeBuilder(valueMembers, parent, container, filter) {
+ _super.call(this, valueMembers, null, null, null, parent, container);
+ this.filter = filter;
+ }
+ FilteredSymbolScopeBuilder.prototype.findLocal = function (name, publicOnly, typespace) {
+ var sym = _super.prototype.findLocal.call(this, name, publicOnly, typespace);
+ if(sym) {
+ if(!this.filter(sym)) {
+ return null;
+ }
+ }
+ return sym;
+ };
+ FilteredSymbolScopeBuilder.prototype.search = function (filter, name, publicOnly, typespace) {
+ throw new Error("please implement");
+ };
+ FilteredSymbolScopeBuilder.prototype.find = function (name, publicOnly, typespace) {
+ var sym = _super.prototype.findLocal.call(this, name, publicOnly, typespace);
+ if(sym) {
+ if(!this.filter(sym)) {
+ return null;
+ }
+ }
+ return _super.prototype.find.call(this, name, publicOnly, typespace);
+ };
+ return FilteredSymbolScopeBuilder;
+ })(SymbolScopeBuilder);
+ TypeScript.FilteredSymbolScopeBuilder = FilteredSymbolScopeBuilder;
+})(TypeScript || (TypeScript = {}));
+var TypeScript;
+(function (TypeScript) {
+ (function (TokenID) {
+ TokenID._map = [];
+ TokenID._map[0] = "Any";
+ TokenID.Any = 0;
+ TokenID._map[1] = "Bool";
+ TokenID.Bool = 1;
+ TokenID._map[2] = "Break";
+ TokenID.Break = 2;
+ TokenID._map[3] = "Case";
+ TokenID.Case = 3;
+ TokenID._map[4] = "Catch";
+ TokenID.Catch = 4;
+ TokenID._map[5] = "Class";
+ TokenID.Class = 5;
+ TokenID._map[6] = "Const";
+ TokenID.Const = 6;
+ TokenID._map[7] = "Continue";
+ TokenID.Continue = 7;
+ TokenID._map[8] = "Debugger";
+ TokenID.Debugger = 8;
+ TokenID._map[9] = "Default";
+ TokenID.Default = 9;
+ TokenID._map[10] = "Delete";
+ TokenID.Delete = 10;
+ TokenID._map[11] = "Do";
+ TokenID.Do = 11;
+ TokenID._map[12] = "Else";
+ TokenID.Else = 12;
+ TokenID._map[13] = "Enum";
+ TokenID.Enum = 13;
+ TokenID._map[14] = "Export";
+ TokenID.Export = 14;
+ TokenID._map[15] = "Extends";
+ TokenID.Extends = 15;
+ TokenID._map[16] = "Declare";
+ TokenID.Declare = 16;
+ TokenID._map[17] = "False";
+ TokenID.False = 17;
+ TokenID._map[18] = "Finally";
+ TokenID.Finally = 18;
+ TokenID._map[19] = "For";
+ TokenID.For = 19;
+ TokenID._map[20] = "Function";
+ TokenID.Function = 20;
+ TokenID._map[21] = "Constructor";
+ TokenID.Constructor = 21;
+ TokenID._map[22] = "Get";
+ TokenID.Get = 22;
+ TokenID._map[23] = "If";
+ TokenID.If = 23;
+ TokenID._map[24] = "Implements";
+ TokenID.Implements = 24;
+ TokenID._map[25] = "Import";
+ TokenID.Import = 25;
+ TokenID._map[26] = "In";
+ TokenID.In = 26;
+ TokenID._map[27] = "InstanceOf";
+ TokenID.InstanceOf = 27;
+ TokenID._map[28] = "Interface";
+ TokenID.Interface = 28;
+ TokenID._map[29] = "Let";
+ TokenID.Let = 29;
+ TokenID._map[30] = "Module";
+ TokenID.Module = 30;
+ TokenID._map[31] = "New";
+ TokenID.New = 31;
+ TokenID._map[32] = "Number";
+ TokenID.Number = 32;
+ TokenID._map[33] = "Null";
+ TokenID.Null = 33;
+ TokenID._map[34] = "Package";
+ TokenID.Package = 34;
+ TokenID._map[35] = "Private";
+ TokenID.Private = 35;
+ TokenID._map[36] = "Protected";
+ TokenID.Protected = 36;
+ TokenID._map[37] = "Public";
+ TokenID.Public = 37;
+ TokenID._map[38] = "Return";
+ TokenID.Return = 38;
+ TokenID._map[39] = "Set";
+ TokenID.Set = 39;
+ TokenID._map[40] = "Static";
+ TokenID.Static = 40;
+ TokenID._map[41] = "String";
+ TokenID.String = 41;
+ TokenID._map[42] = "Super";
+ TokenID.Super = 42;
+ TokenID._map[43] = "Switch";
+ TokenID.Switch = 43;
+ TokenID._map[44] = "This";
+ TokenID.This = 44;
+ TokenID._map[45] = "Throw";
+ TokenID.Throw = 45;
+ TokenID._map[46] = "True";
+ TokenID.True = 46;
+ TokenID._map[47] = "Try";
+ TokenID.Try = 47;
+ TokenID._map[48] = "TypeOf";
+ TokenID.TypeOf = 48;
+ TokenID._map[49] = "Var";
+ TokenID.Var = 49;
+ TokenID._map[50] = "Void";
+ TokenID.Void = 50;
+ TokenID._map[51] = "With";
+ TokenID.With = 51;
+ TokenID._map[52] = "While";
+ TokenID.While = 52;
+ TokenID._map[53] = "Yield";
+ TokenID.Yield = 53;
+ TokenID._map[54] = "Semicolon";
+ TokenID.Semicolon = 54;
+ TokenID._map[55] = "OpenParen";
+ TokenID.OpenParen = 55;
+ TokenID._map[56] = "CloseParen";
+ TokenID.CloseParen = 56;
+ TokenID._map[57] = "OpenBracket";
+ TokenID.OpenBracket = 57;
+ TokenID._map[58] = "CloseBracket";
+ TokenID.CloseBracket = 58;
+ TokenID._map[59] = "OpenBrace";
+ TokenID.OpenBrace = 59;
+ TokenID._map[60] = "CloseBrace";
+ TokenID.CloseBrace = 60;
+ TokenID._map[61] = "Comma";
+ TokenID.Comma = 61;
+ TokenID._map[62] = "Equals";
+ TokenID.Equals = 62;
+ TokenID._map[63] = "PlusEquals";
+ TokenID.PlusEquals = 63;
+ TokenID._map[64] = "MinusEquals";
+ TokenID.MinusEquals = 64;
+ TokenID._map[65] = "AsteriskEquals";
+ TokenID.AsteriskEquals = 65;
+ TokenID._map[66] = "SlashEquals";
+ TokenID.SlashEquals = 66;
+ TokenID._map[67] = "PercentEquals";
+ TokenID.PercentEquals = 67;
+ TokenID._map[68] = "AmpersandEquals";
+ TokenID.AmpersandEquals = 68;
+ TokenID._map[69] = "CaretEquals";
+ TokenID.CaretEquals = 69;
+ TokenID._map[70] = "BarEquals";
+ TokenID.BarEquals = 70;
+ TokenID._map[71] = "LessThanLessThanEquals";
+ TokenID.LessThanLessThanEquals = 71;
+ TokenID._map[72] = "GreaterThanGreaterThanEquals";
+ TokenID.GreaterThanGreaterThanEquals = 72;
+ TokenID._map[73] = "GreaterThanGreaterThanGreaterThanEquals";
+ TokenID.GreaterThanGreaterThanGreaterThanEquals = 73;
+ TokenID._map[74] = "Question";
+ TokenID.Question = 74;
+ TokenID._map[75] = "Colon";
+ TokenID.Colon = 75;
+ TokenID._map[76] = "BarBar";
+ TokenID.BarBar = 76;
+ TokenID._map[77] = "AmpersandAmpersand";
+ TokenID.AmpersandAmpersand = 77;
+ TokenID._map[78] = "Bar";
+ TokenID.Bar = 78;
+ TokenID._map[79] = "Caret";
+ TokenID.Caret = 79;
+ TokenID._map[80] = "And";
+ TokenID.And = 80;
+ TokenID._map[81] = "EqualsEquals";
+ TokenID.EqualsEquals = 81;
+ TokenID._map[82] = "ExclamationEquals";
+ TokenID.ExclamationEquals = 82;
+ TokenID._map[83] = "EqualsEqualsEquals";
+ TokenID.EqualsEqualsEquals = 83;
+ TokenID._map[84] = "ExclamationEqualsEquals";
+ TokenID.ExclamationEqualsEquals = 84;
+ TokenID._map[85] = "LessThan";
+ TokenID.LessThan = 85;
+ TokenID._map[86] = "LessThanEquals";
+ TokenID.LessThanEquals = 86;
+ TokenID._map[87] = "GreaterThan";
+ TokenID.GreaterThan = 87;
+ TokenID._map[88] = "GreaterThanEquals";
+ TokenID.GreaterThanEquals = 88;
+ TokenID._map[89] = "LessThanLessThan";
+ TokenID.LessThanLessThan = 89;
+ TokenID._map[90] = "GreaterThanGreaterThan";
+ TokenID.GreaterThanGreaterThan = 90;
+ TokenID._map[91] = "GreaterThanGreaterThanGreaterThan";
+ TokenID.GreaterThanGreaterThanGreaterThan = 91;
+ TokenID._map[92] = "Plus";
+ TokenID.Plus = 92;
+ TokenID._map[93] = "Minus";
+ TokenID.Minus = 93;
+ TokenID._map[94] = "Asterisk";
+ TokenID.Asterisk = 94;
+ TokenID._map[95] = "Slash";
+ TokenID.Slash = 95;
+ TokenID._map[96] = "Percent";
+ TokenID.Percent = 96;
+ TokenID._map[97] = "Tilde";
+ TokenID.Tilde = 97;
+ TokenID._map[98] = "Exclamation";
+ TokenID.Exclamation = 98;
+ TokenID._map[99] = "PlusPlus";
+ TokenID.PlusPlus = 99;
+ TokenID._map[100] = "MinusMinus";
+ TokenID.MinusMinus = 100;
+ TokenID._map[101] = "Dot";
+ TokenID.Dot = 101;
+ TokenID._map[102] = "DotDotDot";
+ TokenID.DotDotDot = 102;
+ TokenID._map[103] = "Error";
+ TokenID.Error = 103;
+ TokenID._map[104] = "EndOfFile";
+ TokenID.EndOfFile = 104;
+ TokenID._map[105] = "EqualsGreaterThan";
+ TokenID.EqualsGreaterThan = 105;
+ TokenID._map[106] = "Identifier";
+ TokenID.Identifier = 106;
+ TokenID._map[107] = "StringLiteral";
+ TokenID.StringLiteral = 107;
+ TokenID._map[108] = "RegularExpressionLiteral";
+ TokenID.RegularExpressionLiteral = 108;
+ TokenID._map[109] = "NumberLiteral";
+ TokenID.NumberLiteral = 109;
+ TokenID._map[110] = "Whitespace";
+ TokenID.Whitespace = 110;
+ TokenID._map[111] = "Comment";
+ TokenID.Comment = 111;
+ TokenID._map[112] = "Lim";
+ TokenID.Lim = 112;
+ TokenID.LimFixed = TokenID.EqualsGreaterThan;
+ TokenID.LimKeyword = TokenID.Yield;
+ })(TypeScript.TokenID || (TypeScript.TokenID = {}));
+ var TokenID = TypeScript.TokenID;
+ TypeScript.tokenTable = new Array();
+ TypeScript.nodeTypeTable = new Array();
+ TypeScript.nodeTypeToTokTable = new Array();
+ TypeScript.noRegexTable = new Array();
+ TypeScript.noRegexTable[TokenID.Identifier] = true;
+ TypeScript.noRegexTable[TokenID.StringLiteral] = true;
+ TypeScript.noRegexTable[TokenID.NumberLiteral] = true;
+ TypeScript.noRegexTable[TokenID.RegularExpressionLiteral] = true;
+ TypeScript.noRegexTable[TokenID.This] = true;
+ TypeScript.noRegexTable[TokenID.PlusPlus] = true;
+ TypeScript.noRegexTable[TokenID.MinusMinus] = true;
+ TypeScript.noRegexTable[TokenID.CloseParen] = true;
+ TypeScript.noRegexTable[TokenID.CloseBracket] = true;
+ TypeScript.noRegexTable[TokenID.CloseBrace] = true;
+ TypeScript.noRegexTable[TokenID.True] = true;
+ TypeScript.noRegexTable[TokenID.False] = true;
+ (function (OperatorPrecedence) {
+ OperatorPrecedence._map = [];
+ OperatorPrecedence._map[0] = "None";
+ OperatorPrecedence.None = 0;
+ OperatorPrecedence._map[1] = "Comma";
+ OperatorPrecedence.Comma = 1;
+ OperatorPrecedence._map[2] = "Assignment";
+ OperatorPrecedence.Assignment = 2;
+ OperatorPrecedence._map[3] = "Conditional";
+ OperatorPrecedence.Conditional = 3;
+ OperatorPrecedence._map[4] = "LogicalOr";
+ OperatorPrecedence.LogicalOr = 4;
+ OperatorPrecedence._map[5] = "LogicalAnd";
+ OperatorPrecedence.LogicalAnd = 5;
+ OperatorPrecedence._map[6] = "BitwiseOr";
+ OperatorPrecedence.BitwiseOr = 6;
+ OperatorPrecedence._map[7] = "BitwiseExclusiveOr";
+ OperatorPrecedence.BitwiseExclusiveOr = 7;
+ OperatorPrecedence._map[8] = "BitwiseAnd";
+ OperatorPrecedence.BitwiseAnd = 8;
+ OperatorPrecedence._map[9] = "Equality";
+ OperatorPrecedence.Equality = 9;
+ OperatorPrecedence._map[10] = "Relational";
+ OperatorPrecedence.Relational = 10;
+ OperatorPrecedence._map[11] = "Shift";
+ OperatorPrecedence.Shift = 11;
+ OperatorPrecedence._map[12] = "Additive";
+ OperatorPrecedence.Additive = 12;
+ OperatorPrecedence._map[13] = "Multiplicative";
+ OperatorPrecedence.Multiplicative = 13;
+ OperatorPrecedence._map[14] = "Unary";
+ OperatorPrecedence.Unary = 14;
+ OperatorPrecedence._map[15] = "Lim";
+ OperatorPrecedence.Lim = 15;
+ })(TypeScript.OperatorPrecedence || (TypeScript.OperatorPrecedence = {}));
+ var OperatorPrecedence = TypeScript.OperatorPrecedence;
+ (function (Reservation) {
+ Reservation._map = [];
+ Reservation.None = 0;
+ Reservation.Javascript = 1;
+ Reservation.JavascriptFuture = 2;
+ Reservation.TypeScript = 4;
+ Reservation.JavascriptFutureStrict = 8;
+ Reservation.TypeScriptAndJS = Reservation.Javascript | Reservation.TypeScript;
+ Reservation.TypeScriptAndJSFuture = Reservation.JavascriptFuture | Reservation.TypeScript;
+ Reservation.TypeScriptAndJSFutureStrict = Reservation.JavascriptFutureStrict | Reservation.TypeScript;
+ })(TypeScript.Reservation || (TypeScript.Reservation = {}));
+ var Reservation = TypeScript.Reservation;
+ var TokenInfo = (function () {
+ function TokenInfo(tokenId, reservation, binopPrecedence, binopNodeType, unopPrecedence, unopNodeType, text, ers) {
+ this.tokenId = tokenId;
+ this.reservation = reservation;
+ this.binopPrecedence = binopPrecedence;
+ this.binopNodeType = binopNodeType;
+ this.unopPrecedence = unopPrecedence;
+ this.unopNodeType = unopNodeType;
+ this.text = text;
+ this.ers = ers;
+ }
+ return TokenInfo;
+ })();
+ TypeScript.TokenInfo = TokenInfo;
+ function setTokenInfo(tokenId, reservation, binopPrecedence, binopNodeType, unopPrecedence, unopNodeType, text, ers) {
+ if(tokenId !== undefined) {
+ TypeScript.tokenTable[tokenId] = new TokenInfo(tokenId, reservation, binopPrecedence, binopNodeType, unopPrecedence, unopNodeType, text, ers);
+ if(binopNodeType != TypeScript.NodeType.None) {
+ TypeScript.nodeTypeTable[binopNodeType] = text;
+ TypeScript.nodeTypeToTokTable[binopNodeType] = tokenId;
+ }
+ if(unopNodeType != TypeScript.NodeType.None) {
+ TypeScript.nodeTypeTable[unopNodeType] = text;
+ }
+ }
+ }
+ setTokenInfo(TokenID.Any, Reservation.TypeScript, OperatorPrecedence.None, TypeScript.NodeType.None, OperatorPrecedence.None, TypeScript.NodeType.None, "any", TypeScript.ErrorRecoverySet.PrimType);
+ setTokenInfo(TokenID.Bool, Reservation.TypeScript, OperatorPrecedence.None, TypeScript.NodeType.None, OperatorPrecedence.None, TypeScript.NodeType.None, "bool", TypeScript.ErrorRecoverySet.PrimType);
+ setTokenInfo(TokenID.Break, Reservation.TypeScriptAndJS, OperatorPrecedence.None, TypeScript.NodeType.None, OperatorPrecedence.None, TypeScript.NodeType.None, "break", TypeScript.ErrorRecoverySet.Stmt);
+ setTokenInfo(TokenID.Case, Reservation.TypeScriptAndJS, OperatorPrecedence.None, TypeScript.NodeType.None, OperatorPrecedence.None, TypeScript.NodeType.None, "case", TypeScript.ErrorRecoverySet.SCase);
+ setTokenInfo(TokenID.Catch, Reservation.TypeScriptAndJS, OperatorPrecedence.None, TypeScript.NodeType.None, OperatorPrecedence.None, TypeScript.NodeType.None, "catch", TypeScript.ErrorRecoverySet.Catch);
+ setTokenInfo(TokenID.Class, Reservation.TypeScriptAndJSFuture, OperatorPrecedence.None, TypeScript.NodeType.None, OperatorPrecedence.None, TypeScript.NodeType.None, "class", TypeScript.ErrorRecoverySet.TypeScriptS);
+ setTokenInfo(TokenID.Const, Reservation.TypeScriptAndJSFuture, OperatorPrecedence.None, TypeScript.NodeType.None, OperatorPrecedence.None, TypeScript.NodeType.None, "const", TypeScript.ErrorRecoverySet.Var);
+ setTokenInfo(TokenID.Continue, Reservation.TypeScriptAndJS, OperatorPrecedence.None, TypeScript.NodeType.None, OperatorPrecedence.None, TypeScript.NodeType.None, "continue", TypeScript.ErrorRecoverySet.Stmt);
+ setTokenInfo(TokenID.Debugger, Reservation.TypeScriptAndJS, OperatorPrecedence.None, TypeScript.NodeType.None, OperatorPrecedence.None, TypeScript.NodeType.Debugger, "debugger", TypeScript.ErrorRecoverySet.Stmt);
+ setTokenInfo(TokenID.Default, Reservation.TypeScriptAndJS, OperatorPrecedence.None, TypeScript.NodeType.None, OperatorPrecedence.None, TypeScript.NodeType.None, "default", TypeScript.ErrorRecoverySet.SCase);
+ setTokenInfo(TokenID.Delete, Reservation.TypeScriptAndJS, OperatorPrecedence.None, TypeScript.NodeType.None, OperatorPrecedence.Unary, TypeScript.NodeType.Delete, "delete", TypeScript.ErrorRecoverySet.Prefix);
+ setTokenInfo(TokenID.Do, Reservation.TypeScriptAndJS, OperatorPrecedence.None, TypeScript.NodeType.None, OperatorPrecedence.None, TypeScript.NodeType.None, "do", TypeScript.ErrorRecoverySet.Stmt);
+ setTokenInfo(TokenID.Else, Reservation.TypeScriptAndJS, OperatorPrecedence.None, TypeScript.NodeType.None, OperatorPrecedence.None, TypeScript.NodeType.None, "else", TypeScript.ErrorRecoverySet.Else);
+ setTokenInfo(TokenID.Enum, Reservation.TypeScriptAndJSFuture, OperatorPrecedence.None, TypeScript.NodeType.None, OperatorPrecedence.None, TypeScript.NodeType.None, "enum", TypeScript.ErrorRecoverySet.TypeScriptS);
+ setTokenInfo(TokenID.Export, Reservation.TypeScriptAndJSFuture, OperatorPrecedence.None, TypeScript.NodeType.None, OperatorPrecedence.None, TypeScript.NodeType.None, "export", TypeScript.ErrorRecoverySet.TypeScriptS);
+ setTokenInfo(TokenID.Extends, Reservation.TypeScriptAndJSFuture, OperatorPrecedence.None, TypeScript.NodeType.None, OperatorPrecedence.None, TypeScript.NodeType.None, "extends", TypeScript.ErrorRecoverySet.None);
+ setTokenInfo(TokenID.Declare, Reservation.TypeScript, OperatorPrecedence.None, TypeScript.NodeType.None, OperatorPrecedence.None, TypeScript.NodeType.None, "declare", TypeScript.ErrorRecoverySet.Stmt);
+ setTokenInfo(TokenID.False, Reservation.TypeScriptAndJS, OperatorPrecedence.None, TypeScript.NodeType.None, OperatorPrecedence.None, TypeScript.NodeType.None, "false", TypeScript.ErrorRecoverySet.RLit);
+ setTokenInfo(TokenID.Finally, Reservation.TypeScriptAndJS, OperatorPrecedence.None, TypeScript.NodeType.None, OperatorPrecedence.None, TypeScript.NodeType.None, "finally", TypeScript.ErrorRecoverySet.Catch);
+ setTokenInfo(TokenID.For, Reservation.TypeScriptAndJS, OperatorPrecedence.None, TypeScript.NodeType.None, OperatorPrecedence.None, TypeScript.NodeType.None, "for", TypeScript.ErrorRecoverySet.Stmt);
+ setTokenInfo(TokenID.Function, Reservation.TypeScriptAndJS, OperatorPrecedence.None, TypeScript.NodeType.None, OperatorPrecedence.None, TypeScript.NodeType.None, "function", TypeScript.ErrorRecoverySet.Func);
+ setTokenInfo(TokenID.Constructor, Reservation.TypeScriptAndJSFutureStrict, OperatorPrecedence.None, TypeScript.NodeType.None, OperatorPrecedence.None, TypeScript.NodeType.None, "constructor", TypeScript.ErrorRecoverySet.Func);
+ setTokenInfo(TokenID.Get, Reservation.TypeScript, OperatorPrecedence.None, TypeScript.NodeType.None, OperatorPrecedence.None, TypeScript.NodeType.None, "get", TypeScript.ErrorRecoverySet.Func);
+ setTokenInfo(TokenID.Set, Reservation.TypeScript, OperatorPrecedence.None, TypeScript.NodeType.None, OperatorPrecedence.None, TypeScript.NodeType.None, "set", TypeScript.ErrorRecoverySet.Func);
+ setTokenInfo(TokenID.If, Reservation.TypeScriptAndJS, OperatorPrecedence.None, TypeScript.NodeType.None, OperatorPrecedence.None, TypeScript.NodeType.None, "if", TypeScript.ErrorRecoverySet.Stmt);
+ setTokenInfo(TokenID.Implements, Reservation.TypeScriptAndJSFutureStrict, OperatorPrecedence.None, TypeScript.NodeType.None, OperatorPrecedence.None, TypeScript.NodeType.None, "implements", TypeScript.ErrorRecoverySet.None);
+ setTokenInfo(TokenID.Import, Reservation.TypeScriptAndJSFuture, OperatorPrecedence.None, TypeScript.NodeType.None, OperatorPrecedence.None, TypeScript.NodeType.None, "import", TypeScript.ErrorRecoverySet.TypeScriptS);
+ setTokenInfo(TokenID.In, Reservation.TypeScriptAndJS, OperatorPrecedence.Relational, TypeScript.NodeType.In, OperatorPrecedence.None, TypeScript.NodeType.None, "in", TypeScript.ErrorRecoverySet.None);
+ setTokenInfo(TokenID.InstanceOf, Reservation.TypeScriptAndJS, OperatorPrecedence.Relational, TypeScript.NodeType.InstOf, OperatorPrecedence.None, TypeScript.NodeType.None, "instanceof", TypeScript.ErrorRecoverySet.BinOp);
+ setTokenInfo(TokenID.Interface, Reservation.TypeScriptAndJSFutureStrict, OperatorPrecedence.None, TypeScript.NodeType.None, OperatorPrecedence.None, TypeScript.NodeType.None, "interface", TypeScript.ErrorRecoverySet.TypeScriptS);
+ setTokenInfo(TokenID.Let, Reservation.JavascriptFutureStrict, OperatorPrecedence.None, TypeScript.NodeType.None, OperatorPrecedence.None, TypeScript.NodeType.None, "let", TypeScript.ErrorRecoverySet.None);
+ setTokenInfo(TokenID.Module, Reservation.TypeScript, OperatorPrecedence.None, TypeScript.NodeType.None, OperatorPrecedence.None, TypeScript.NodeType.None, "module", TypeScript.ErrorRecoverySet.TypeScriptS);
+ setTokenInfo(TokenID.New, Reservation.TypeScriptAndJS, OperatorPrecedence.None, TypeScript.NodeType.None, OperatorPrecedence.None, TypeScript.NodeType.None, "new", TypeScript.ErrorRecoverySet.PreOp);
+ setTokenInfo(TokenID.Number, Reservation.TypeScript, OperatorPrecedence.None, TypeScript.NodeType.None, OperatorPrecedence.None, TypeScript.NodeType.None, "number", TypeScript.ErrorRecoverySet.PrimType);
+ setTokenInfo(TokenID.Null, Reservation.TypeScriptAndJS, OperatorPrecedence.None, TypeScript.NodeType.None, OperatorPrecedence.None, TypeScript.NodeType.None, "null", TypeScript.ErrorRecoverySet.RLit);
+ setTokenInfo(TokenID.Package, Reservation.JavascriptFutureStrict, OperatorPrecedence.None, TypeScript.NodeType.None, OperatorPrecedence.None, TypeScript.NodeType.None, "package", TypeScript.ErrorRecoverySet.None);
+ setTokenInfo(TokenID.Private, Reservation.TypeScriptAndJSFutureStrict, OperatorPrecedence.None, TypeScript.NodeType.None, OperatorPrecedence.None, TypeScript.NodeType.None, "private", TypeScript.ErrorRecoverySet.TypeScriptS);
+ setTokenInfo(TokenID.Protected, Reservation.JavascriptFutureStrict, OperatorPrecedence.None, TypeScript.NodeType.None, OperatorPrecedence.None, TypeScript.NodeType.None, "protected", TypeScript.ErrorRecoverySet.None);
+ setTokenInfo(TokenID.Public, Reservation.TypeScriptAndJSFutureStrict, OperatorPrecedence.None, TypeScript.NodeType.None, OperatorPrecedence.None, TypeScript.NodeType.None, "public", TypeScript.ErrorRecoverySet.TypeScriptS);
+ setTokenInfo(TokenID.Return, Reservation.TypeScriptAndJS, OperatorPrecedence.None, TypeScript.NodeType.None, OperatorPrecedence.None, TypeScript.NodeType.None, "return", TypeScript.ErrorRecoverySet.Stmt);
+ setTokenInfo(TokenID.Static, Reservation.TypeScriptAndJSFutureStrict, OperatorPrecedence.None, TypeScript.NodeType.None, OperatorPrecedence.None, TypeScript.NodeType.None, "static", TypeScript.ErrorRecoverySet.None);
+ setTokenInfo(TokenID.String, Reservation.TypeScript, OperatorPrecedence.None, TypeScript.NodeType.None, OperatorPrecedence.None, TypeScript.NodeType.None, "string", TypeScript.ErrorRecoverySet.PrimType);
+ setTokenInfo(TokenID.Super, Reservation.TypeScriptAndJSFuture, OperatorPrecedence.None, TypeScript.NodeType.None, OperatorPrecedence.None, TypeScript.NodeType.None, "super", TypeScript.ErrorRecoverySet.RLit);
+ setTokenInfo(TokenID.Switch, Reservation.TypeScriptAndJS, OperatorPrecedence.None, TypeScript.NodeType.None, OperatorPrecedence.None, TypeScript.NodeType.None, "switch", TypeScript.ErrorRecoverySet.Stmt);
+ setTokenInfo(TokenID.This, Reservation.TypeScriptAndJS, OperatorPrecedence.None, TypeScript.NodeType.None, OperatorPrecedence.None, TypeScript.NodeType.None, "this", TypeScript.ErrorRecoverySet.RLit);
+ setTokenInfo(TokenID.Throw, Reservation.TypeScriptAndJS, OperatorPrecedence.None, TypeScript.NodeType.None, OperatorPrecedence.None, TypeScript.NodeType.None, "throw", TypeScript.ErrorRecoverySet.Stmt);
+ setTokenInfo(TokenID.True, Reservation.TypeScriptAndJS, OperatorPrecedence.None, TypeScript.NodeType.None, OperatorPrecedence.None, TypeScript.NodeType.None, "true", TypeScript.ErrorRecoverySet.RLit);
+ setTokenInfo(TokenID.Try, Reservation.TypeScriptAndJS, OperatorPrecedence.None, TypeScript.NodeType.None, OperatorPrecedence.None, TypeScript.NodeType.None, "try", TypeScript.ErrorRecoverySet.Stmt);
+ setTokenInfo(TokenID.TypeOf, Reservation.TypeScriptAndJS, OperatorPrecedence.None, TypeScript.NodeType.None, OperatorPrecedence.Unary, TypeScript.NodeType.Typeof, "typeof", TypeScript.ErrorRecoverySet.Prefix);
+ setTokenInfo(TokenID.Var, Reservation.TypeScriptAndJS, OperatorPrecedence.None, TypeScript.NodeType.None, OperatorPrecedence.None, TypeScript.NodeType.None, "var", TypeScript.ErrorRecoverySet.Var);
+ setTokenInfo(TokenID.Void, Reservation.TypeScriptAndJS, OperatorPrecedence.None, TypeScript.NodeType.None, OperatorPrecedence.Unary, TypeScript.NodeType.Void, "void", TypeScript.ErrorRecoverySet.Prefix);
+ setTokenInfo(TokenID.With, Reservation.TypeScriptAndJS, OperatorPrecedence.None, TypeScript.NodeType.None, OperatorPrecedence.None, TypeScript.NodeType.With, "with", TypeScript.ErrorRecoverySet.Stmt);
+ setTokenInfo(TokenID.While, Reservation.TypeScriptAndJS, OperatorPrecedence.None, TypeScript.NodeType.None, OperatorPrecedence.None, TypeScript.NodeType.None, "while", TypeScript.ErrorRecoverySet.While);
+ setTokenInfo(TokenID.Yield, Reservation.JavascriptFutureStrict, OperatorPrecedence.None, TypeScript.NodeType.None, OperatorPrecedence.None, TypeScript.NodeType.None, "yield", TypeScript.ErrorRecoverySet.None);
+ setTokenInfo(TokenID.Identifier, Reservation.None, OperatorPrecedence.None, TypeScript.NodeType.None, OperatorPrecedence.None, TypeScript.NodeType.None, "identifier", TypeScript.ErrorRecoverySet.ID);
+ setTokenInfo(TokenID.NumberLiteral, Reservation.None, OperatorPrecedence.None, TypeScript.NodeType.None, OperatorPrecedence.None, TypeScript.NodeType.None, "numberLiteral", TypeScript.ErrorRecoverySet.Literal);
+ setTokenInfo(TokenID.RegularExpressionLiteral, Reservation.None, OperatorPrecedence.None, TypeScript.NodeType.None, OperatorPrecedence.None, TypeScript.NodeType.None, "regex", TypeScript.ErrorRecoverySet.RegExp);
+ setTokenInfo(TokenID.StringLiteral, Reservation.None, OperatorPrecedence.None, TypeScript.NodeType.None, OperatorPrecedence.None, TypeScript.NodeType.None, "qstring", TypeScript.ErrorRecoverySet.Literal);
+ setTokenInfo(TokenID.Semicolon, Reservation.None, OperatorPrecedence.None, TypeScript.NodeType.None, OperatorPrecedence.None, TypeScript.NodeType.None, ";", TypeScript.ErrorRecoverySet.SColon);
+ setTokenInfo(TokenID.CloseParen, Reservation.None, OperatorPrecedence.None, TypeScript.NodeType.None, OperatorPrecedence.None, TypeScript.NodeType.None, ")", TypeScript.ErrorRecoverySet.RParen);
+ setTokenInfo(TokenID.CloseBracket, Reservation.None, OperatorPrecedence.None, TypeScript.NodeType.None, OperatorPrecedence.None, TypeScript.NodeType.None, "]", TypeScript.ErrorRecoverySet.RBrack);
+ setTokenInfo(TokenID.OpenBrace, Reservation.None, OperatorPrecedence.None, TypeScript.NodeType.None, OperatorPrecedence.None, TypeScript.NodeType.None, "{", TypeScript.ErrorRecoverySet.LCurly);
+ setTokenInfo(TokenID.CloseBrace, Reservation.None, OperatorPrecedence.None, TypeScript.NodeType.None, OperatorPrecedence.None, TypeScript.NodeType.None, "}", TypeScript.ErrorRecoverySet.RCurly);
+ setTokenInfo(TokenID.DotDotDot, Reservation.None, OperatorPrecedence.None, TypeScript.NodeType.None, OperatorPrecedence.None, TypeScript.NodeType.None, "...", TypeScript.ErrorRecoverySet.None);
+ setTokenInfo(TokenID.Comma, Reservation.None, OperatorPrecedence.Comma, TypeScript.NodeType.Comma, OperatorPrecedence.None, TypeScript.NodeType.None, ",", TypeScript.ErrorRecoverySet.Comma);
+ setTokenInfo(TokenID.Equals, Reservation.None, OperatorPrecedence.Assignment, TypeScript.NodeType.Asg, OperatorPrecedence.None, TypeScript.NodeType.None, "=", TypeScript.ErrorRecoverySet.Asg);
+ setTokenInfo(TokenID.PlusEquals, Reservation.None, OperatorPrecedence.Assignment, TypeScript.NodeType.AsgAdd, OperatorPrecedence.None, TypeScript.NodeType.None, "+=", TypeScript.ErrorRecoverySet.BinOp);
+ setTokenInfo(TokenID.MinusEquals, Reservation.None, OperatorPrecedence.Assignment, TypeScript.NodeType.AsgSub, OperatorPrecedence.None, TypeScript.NodeType.None, "-=", TypeScript.ErrorRecoverySet.BinOp);
+ setTokenInfo(TokenID.AsteriskEquals, Reservation.None, OperatorPrecedence.Assignment, TypeScript.NodeType.AsgMul, OperatorPrecedence.None, TypeScript.NodeType.None, "*=", TypeScript.ErrorRecoverySet.BinOp);
+ setTokenInfo(TokenID.SlashEquals, Reservation.None, OperatorPrecedence.Assignment, TypeScript.NodeType.AsgDiv, OperatorPrecedence.None, TypeScript.NodeType.None, "/=", TypeScript.ErrorRecoverySet.BinOp);
+ setTokenInfo(TokenID.PercentEquals, Reservation.None, OperatorPrecedence.Assignment, TypeScript.NodeType.AsgMod, OperatorPrecedence.None, TypeScript.NodeType.None, "%=", TypeScript.ErrorRecoverySet.BinOp);
+ setTokenInfo(TokenID.AmpersandEquals, Reservation.None, OperatorPrecedence.Assignment, TypeScript.NodeType.AsgAnd, OperatorPrecedence.None, TypeScript.NodeType.None, "&=", TypeScript.ErrorRecoverySet.BinOp);
+ setTokenInfo(TokenID.CaretEquals, Reservation.None, OperatorPrecedence.Assignment, TypeScript.NodeType.AsgXor, OperatorPrecedence.None, TypeScript.NodeType.None, "^=", TypeScript.ErrorRecoverySet.BinOp);
+ setTokenInfo(TokenID.BarEquals, Reservation.None, OperatorPrecedence.Assignment, TypeScript.NodeType.AsgOr, OperatorPrecedence.None, TypeScript.NodeType.None, "|=", TypeScript.ErrorRecoverySet.BinOp);
+ setTokenInfo(TokenID.LessThanLessThanEquals, Reservation.None, OperatorPrecedence.Assignment, TypeScript.NodeType.AsgLsh, OperatorPrecedence.None, TypeScript.NodeType.None, "<<=", TypeScript.ErrorRecoverySet.BinOp);
+ setTokenInfo(TokenID.GreaterThanGreaterThanEquals, Reservation.None, OperatorPrecedence.Assignment, TypeScript.NodeType.AsgRsh, OperatorPrecedence.None, TypeScript.NodeType.None, ">>=", TypeScript.ErrorRecoverySet.BinOp);
+ setTokenInfo(TokenID.GreaterThanGreaterThanGreaterThanEquals, Reservation.None, OperatorPrecedence.Assignment, TypeScript.NodeType.AsgRs2, OperatorPrecedence.None, TypeScript.NodeType.None, ">>>=", TypeScript.ErrorRecoverySet.BinOp);
+ setTokenInfo(TokenID.Question, Reservation.None, OperatorPrecedence.Conditional, TypeScript.NodeType.ConditionalExpression, OperatorPrecedence.None, TypeScript.NodeType.None, "?", TypeScript.ErrorRecoverySet.BinOp);
+ setTokenInfo(TokenID.Colon, Reservation.None, OperatorPrecedence.None, TypeScript.NodeType.None, OperatorPrecedence.None, TypeScript.NodeType.None, ":", TypeScript.ErrorRecoverySet.Colon);
+ setTokenInfo(TokenID.BarBar, Reservation.None, OperatorPrecedence.LogicalOr, TypeScript.NodeType.LogOr, OperatorPrecedence.None, TypeScript.NodeType.None, "||", TypeScript.ErrorRecoverySet.BinOp);
+ setTokenInfo(TokenID.AmpersandAmpersand, Reservation.None, OperatorPrecedence.LogicalAnd, TypeScript.NodeType.LogAnd, OperatorPrecedence.None, TypeScript.NodeType.None, "&&", TypeScript.ErrorRecoverySet.BinOp);
+ setTokenInfo(TokenID.Bar, Reservation.None, OperatorPrecedence.BitwiseOr, TypeScript.NodeType.Or, OperatorPrecedence.None, TypeScript.NodeType.None, "|", TypeScript.ErrorRecoverySet.BinOp);
+ setTokenInfo(TokenID.Caret, Reservation.None, OperatorPrecedence.BitwiseExclusiveOr, TypeScript.NodeType.Xor, OperatorPrecedence.None, TypeScript.NodeType.None, "^", TypeScript.ErrorRecoverySet.BinOp);
+ setTokenInfo(TokenID.And, Reservation.None, OperatorPrecedence.BitwiseAnd, TypeScript.NodeType.And, OperatorPrecedence.None, TypeScript.NodeType.None, "&", TypeScript.ErrorRecoverySet.BinOp);
+ setTokenInfo(TokenID.EqualsEquals, Reservation.None, OperatorPrecedence.Equality, TypeScript.NodeType.Eq, OperatorPrecedence.None, TypeScript.NodeType.None, "==", TypeScript.ErrorRecoverySet.BinOp);
+ setTokenInfo(TokenID.ExclamationEquals, Reservation.None, OperatorPrecedence.Equality, TypeScript.NodeType.Ne, OperatorPrecedence.None, TypeScript.NodeType.None, "!=", TypeScript.ErrorRecoverySet.BinOp);
+ setTokenInfo(TokenID.EqualsEqualsEquals, Reservation.None, OperatorPrecedence.Equality, TypeScript.NodeType.Eqv, OperatorPrecedence.None, TypeScript.NodeType.None, "===", TypeScript.ErrorRecoverySet.BinOp);
+ setTokenInfo(TokenID.ExclamationEqualsEquals, Reservation.None, OperatorPrecedence.Equality, TypeScript.NodeType.NEqv, OperatorPrecedence.None, TypeScript.NodeType.None, "!==", TypeScript.ErrorRecoverySet.BinOp);
+ setTokenInfo(TokenID.LessThan, Reservation.None, OperatorPrecedence.Relational, TypeScript.NodeType.Lt, OperatorPrecedence.None, TypeScript.NodeType.None, "<", TypeScript.ErrorRecoverySet.BinOp);
+ setTokenInfo(TokenID.LessThanEquals, Reservation.None, OperatorPrecedence.Relational, TypeScript.NodeType.Le, OperatorPrecedence.None, TypeScript.NodeType.None, "<=", TypeScript.ErrorRecoverySet.BinOp);
+ setTokenInfo(TokenID.GreaterThan, Reservation.None, OperatorPrecedence.Relational, TypeScript.NodeType.Gt, OperatorPrecedence.None, TypeScript.NodeType.None, ">", TypeScript.ErrorRecoverySet.BinOp);
+ setTokenInfo(TokenID.GreaterThanEquals, Reservation.None, OperatorPrecedence.Relational, TypeScript.NodeType.Ge, OperatorPrecedence.None, TypeScript.NodeType.None, ">=", TypeScript.ErrorRecoverySet.BinOp);
+ setTokenInfo(TokenID.LessThanLessThan, Reservation.None, OperatorPrecedence.Shift, TypeScript.NodeType.Lsh, OperatorPrecedence.None, TypeScript.NodeType.None, "<<", TypeScript.ErrorRecoverySet.BinOp);
+ setTokenInfo(TokenID.GreaterThanGreaterThan, Reservation.None, OperatorPrecedence.Shift, TypeScript.NodeType.Rsh, OperatorPrecedence.None, TypeScript.NodeType.None, ">>", TypeScript.ErrorRecoverySet.BinOp);
+ setTokenInfo(TokenID.GreaterThanGreaterThanGreaterThan, Reservation.None, OperatorPrecedence.Shift, TypeScript.NodeType.Rs2, OperatorPrecedence.None, TypeScript.NodeType.None, ">>>", TypeScript.ErrorRecoverySet.BinOp);
+ setTokenInfo(TokenID.Plus, Reservation.None, OperatorPrecedence.Additive, TypeScript.NodeType.Add, OperatorPrecedence.Unary, TypeScript.NodeType.Pos, "+", TypeScript.ErrorRecoverySet.AddOp);
+ setTokenInfo(TokenID.Minus, Reservation.None, OperatorPrecedence.Additive, TypeScript.NodeType.Sub, OperatorPrecedence.Unary, TypeScript.NodeType.Neg, "-", TypeScript.ErrorRecoverySet.AddOp);
+ setTokenInfo(TokenID.Asterisk, Reservation.None, OperatorPrecedence.Multiplicative, TypeScript.NodeType.Mul, OperatorPrecedence.None, TypeScript.NodeType.None, "*", TypeScript.ErrorRecoverySet.BinOp);
+ setTokenInfo(TokenID.Slash, Reservation.None, OperatorPrecedence.Multiplicative, TypeScript.NodeType.Div, OperatorPrecedence.None, TypeScript.NodeType.None, "/", TypeScript.ErrorRecoverySet.BinOp);
+ setTokenInfo(TokenID.Percent, Reservation.None, OperatorPrecedence.Multiplicative, TypeScript.NodeType.Mod, OperatorPrecedence.None, TypeScript.NodeType.None, "%", TypeScript.ErrorRecoverySet.BinOp);
+ setTokenInfo(TokenID.Tilde, Reservation.None, OperatorPrecedence.None, TypeScript.NodeType.None, OperatorPrecedence.Unary, TypeScript.NodeType.Not, "~", TypeScript.ErrorRecoverySet.PreOp);
+ setTokenInfo(TokenID.Exclamation, Reservation.None, OperatorPrecedence.None, TypeScript.NodeType.None, OperatorPrecedence.Unary, TypeScript.NodeType.LogNot, "!", TypeScript.ErrorRecoverySet.PreOp);
+ setTokenInfo(TokenID.PlusPlus, Reservation.None, OperatorPrecedence.None, TypeScript.NodeType.None, OperatorPrecedence.Unary, TypeScript.NodeType.IncPre, "++", TypeScript.ErrorRecoverySet.PreOp);
+ setTokenInfo(TokenID.MinusMinus, Reservation.None, OperatorPrecedence.None, TypeScript.NodeType.None, OperatorPrecedence.Unary, TypeScript.NodeType.DecPre, "--", TypeScript.ErrorRecoverySet.PreOp);
+ setTokenInfo(TokenID.OpenParen, Reservation.None, OperatorPrecedence.None, TypeScript.NodeType.None, OperatorPrecedence.None, TypeScript.NodeType.None, "(", TypeScript.ErrorRecoverySet.LParen);
+ setTokenInfo(TokenID.OpenBracket, Reservation.None, OperatorPrecedence.None, TypeScript.NodeType.None, OperatorPrecedence.None, TypeScript.NodeType.None, "[", TypeScript.ErrorRecoverySet.LBrack);
+ setTokenInfo(TokenID.Dot, Reservation.None, OperatorPrecedence.Unary, TypeScript.NodeType.None, OperatorPrecedence.None, TypeScript.NodeType.None, ".", TypeScript.ErrorRecoverySet.Dot);
+ setTokenInfo(TokenID.EndOfFile, Reservation.None, OperatorPrecedence.None, TypeScript.NodeType.None, OperatorPrecedence.None, TypeScript.NodeType.None, "<EOF>", TypeScript.ErrorRecoverySet.EOF);
+ setTokenInfo(TokenID.EqualsGreaterThan, Reservation.None, OperatorPrecedence.None, TypeScript.NodeType.None, OperatorPrecedence.None, TypeScript.NodeType.None, "=>", TypeScript.ErrorRecoverySet.None);
+ function lookupToken(tokenId) {
+ return TypeScript.tokenTable[tokenId];
+ }
+ TypeScript.lookupToken = lookupToken;
+ (function (TokenClass) {
+ TokenClass._map = [];
+ TokenClass._map[0] = "Punctuation";
+ TokenClass.Punctuation = 0;
+ TokenClass._map[1] = "Keyword";
+ TokenClass.Keyword = 1;
+ TokenClass._map[2] = "Operator";
+ TokenClass.Operator = 2;
+ TokenClass._map[3] = "Comment";
+ TokenClass.Comment = 3;
+ TokenClass._map[4] = "Whitespace";
+ TokenClass.Whitespace = 4;
+ TokenClass._map[5] = "Identifier";
+ TokenClass.Identifier = 5;
+ TokenClass._map[6] = "NumberLiteral";
+ TokenClass.NumberLiteral = 6;
+ TokenClass._map[7] = "StringLiteral";
+ TokenClass.StringLiteral = 7;
+ TokenClass._map[8] = "RegExpLiteral";
+ TokenClass.RegExpLiteral = 8;
+ })(TypeScript.TokenClass || (TypeScript.TokenClass = {}));
+ var TokenClass = TypeScript.TokenClass;
+ var SavedToken = (function () {
+ function SavedToken(tok, minChar, limChar) {
+ this.tok = tok;
+ this.minChar = minChar;
+ this.limChar = limChar;
+ }
+ return SavedToken;
+ })();
+ TypeScript.SavedToken = SavedToken;
+ var Token = (function () {
+ function Token(tokenId) {
+ this.tokenId = tokenId;
+ }
+ Token.prototype.toString = function () {
+ return "token: " + this.tokenId + " " + this.getText() + " (" + (TokenID)._map[this.tokenId] + ")";
+ };
+ Token.prototype.print = function (line, outfile) {
+ outfile.WriteLine(this.toString() + ",on line" + line);
+ };
+ Token.prototype.getText = function () {
+ return TypeScript.tokenTable[this.tokenId].text;
+ };
+ Token.prototype.classification = function () {
+ if(this.tokenId <= TokenID.LimKeyword) {
+ return TokenClass.Keyword;
+ } else {
+ var tokenInfo = lookupToken(this.tokenId);
+ if(tokenInfo != undefined) {
+ if((tokenInfo.unopNodeType != TypeScript.NodeType.None) || (tokenInfo.binopNodeType != TypeScript.NodeType.None)) {
+ return TokenClass.Operator;
+ }
+ }
+ }
+ return TokenClass.Punctuation;
+ };
+ return Token;
+ })();
+ TypeScript.Token = Token;
+ var NumberLiteralToken = (function (_super) {
+ __extends(NumberLiteralToken, _super);
+ function NumberLiteralToken(value, hasEmptyFraction) {
+ _super.call(this, TokenID.NumberLiteral);
+ this.value = value;
+ this.hasEmptyFraction = hasEmptyFraction;
+ }
+ NumberLiteralToken.prototype.getText = function () {
+ return this.hasEmptyFraction ? this.value.toString() + ".0" : this.value.toString();
+ };
+ NumberLiteralToken.prototype.classification = function () {
+ return TokenClass.NumberLiteral;
+ };
+ return NumberLiteralToken;
+ })(Token);
+ TypeScript.NumberLiteralToken = NumberLiteralToken;
+ var StringLiteralToken = (function (_super) {
+ __extends(StringLiteralToken, _super);
+ function StringLiteralToken(value) {
+ _super.call(this, TokenID.StringLiteral);
+ this.value = value;
+ }
+ StringLiteralToken.prototype.getText = function () {
+ return this.value;
+ };
+ StringLiteralToken.prototype.classification = function () {
+ return TokenClass.StringLiteral;
+ };
+ return StringLiteralToken;
+ })(Token);
+ TypeScript.StringLiteralToken = StringLiteralToken;
+ var IdentifierToken = (function (_super) {
+ __extends(IdentifierToken, _super);
+ function IdentifierToken(value, hasEscapeSequence) {
+ _super.call(this, TokenID.Identifier);
+ this.value = value;
+ this.hasEscapeSequence = hasEscapeSequence;
+ }
+ IdentifierToken.prototype.getText = function () {
+ return this.value;
+ };
+ IdentifierToken.prototype.classification = function () {
+ return TokenClass.Identifier;
+ };
+ return IdentifierToken;
+ })(Token);
+ TypeScript.IdentifierToken = IdentifierToken;
+ var WhitespaceToken = (function (_super) {
+ __extends(WhitespaceToken, _super);
+ function WhitespaceToken(tokenId, value) {
+ _super.call(this, tokenId);
+ this.value = value;
+ }
+ WhitespaceToken.prototype.getText = function () {
+ return this.value;
+ };
+ WhitespaceToken.prototype.classification = function () {
+ return TokenClass.Whitespace;
+ };
+ return WhitespaceToken;
+ })(Token);
+ TypeScript.WhitespaceToken = WhitespaceToken;
+ var CommentToken = (function (_super) {
+ __extends(CommentToken, _super);
+ function CommentToken(tokenID, value, isBlock, startPos, line, endsLine) {
+ _super.call(this, tokenID);
+ this.value = value;
+ this.isBlock = isBlock;
+ this.startPos = startPos;
+ this.line = line;
+ this.endsLine = endsLine;
+ }
+ CommentToken.prototype.getText = function () {
+ return this.value;
+ };
+ CommentToken.prototype.classification = function () {
+ return TokenClass.Comment;
+ };
+ return CommentToken;
+ })(Token);
+ TypeScript.CommentToken = CommentToken;
+ var RegularExpressionLiteralToken = (function (_super) {
+ __extends(RegularExpressionLiteralToken, _super);
+ function RegularExpressionLiteralToken(regex) {
+ _super.call(this, TokenID.RegularExpressionLiteral);
+ this.regex = regex;
+ }
+ RegularExpressionLiteralToken.prototype.getText = function () {
+ return this.regex.toString();
+ };
+ RegularExpressionLiteralToken.prototype.classification = function () {
+ return TokenClass.RegExpLiteral;
+ };
+ return RegularExpressionLiteralToken;
+ })(Token);
+ TypeScript.RegularExpressionLiteralToken = RegularExpressionLiteralToken;
+ TypeScript.staticTokens = new Array();
+ function initializeStaticTokens() {
+ for(var i = 0; i <= TokenID.LimFixed; i++) {
+ TypeScript.staticTokens[i] = new Token(i);
+ }
+ }
+ TypeScript.initializeStaticTokens = initializeStaticTokens;
+})(TypeScript || (TypeScript = {}));
+var TypeScript;
+(function (TypeScript) {
+ var ArrayCache = (function () {
+ function ArrayCache() {
+ this.arrayBase = null;
+ }
+ ArrayCache.prototype.specialize = function (arrInstType, checker) {
+ if(this.arrayBase == null) {
+ this.arrayBase = arrInstType.specializeType(checker.wildElm.type, this.arrayType.elementType, checker, true);
+ }
+ return this.arrayBase;
+ };
+ return ArrayCache;
+ })();
+ TypeScript.ArrayCache = ArrayCache;
+ var TypeComparisonInfo = (function () {
+ function TypeComparisonInfo() {
+ this.onlyCaptureFirstError = false;
+ this.flags = TypeScript.TypeRelationshipFlags.SuccessfulComparison;
+ this.message = "";
+ }
+ TypeComparisonInfo.prototype.addMessageToFront = function (message) {
+ if(!this.onlyCaptureFirstError) {
+ this.message = this.message ? message + ":\n\t" + this.message : message;
+ } else {
+ this.setMessage(message);
+ }
+ };
+ TypeComparisonInfo.prototype.setMessage = function (message) {
+ this.message = message;
+ };
+ return TypeComparisonInfo;
+ })();
+ TypeScript.TypeComparisonInfo = TypeComparisonInfo;
+ (function (TypeCheckCollectionMode) {
+ TypeCheckCollectionMode._map = [];
+ TypeCheckCollectionMode._map[0] = "Resident";
+ TypeCheckCollectionMode.Resident = 0;
+ TypeCheckCollectionMode._map[1] = "Transient";
+ TypeCheckCollectionMode.Transient = 1;
+ })(TypeScript.TypeCheckCollectionMode || (TypeScript.TypeCheckCollectionMode = {}));
+ var TypeCheckCollectionMode = TypeScript.TypeCheckCollectionMode;
+ var PersistentGlobalTypeState = (function () {
+ function PersistentGlobalTypeState(errorReporter) {
+ this.errorReporter = errorReporter;
+ this.importedGlobalsTable = new TypeScript.ScopedMembers(new TypeScript.DualStringHashTable(new TypeScript.StringHashTable(), new TypeScript.StringHashTable()));
+ this.importedGlobalsTypeTable = new TypeScript.ScopedMembers(new TypeScript.DualStringHashTable(new TypeScript.StringHashTable(), new TypeScript.StringHashTable()));
+ this.globals = null;
+ this.globalTypes = null;
+ this.ambientGlobals = null;
+ this.ambientGlobalTypes = null;
+ this.residentGlobalValues = new TypeScript.StringHashTable();
+ this.residentGlobalTypes = new TypeScript.StringHashTable();
+ this.residentGlobalAmbientValues = new TypeScript.StringHashTable();
+ this.residentGlobalAmbientTypes = new TypeScript.StringHashTable();
+ this.residentTypeCheck = true;
+ this.mod = null;
+ this.gloMod = null;
+ this.wildElm = null;
+ this.importedGlobals = new TypeScript.SymbolScopeBuilder(null, this.importedGlobalsTable, null, this.importedGlobalsTypeTable, null, null);
+ this.dualGlobalValues = new TypeScript.DualStringHashTable(this.residentGlobalValues, new TypeScript.StringHashTable());
+ this.dualGlobalTypes = new TypeScript.DualStringHashTable(this.residentGlobalTypes, new TypeScript.StringHashTable());
+ this.dualAmbientGlobalValues = new TypeScript.DualStringHashTable(this.residentGlobalAmbientValues, new TypeScript.StringHashTable());
+ this.dualAmbientGlobalTypes = new TypeScript.DualStringHashTable(this.residentGlobalAmbientTypes, new TypeScript.StringHashTable());
+ var dualGlobalScopedMembers = new TypeScript.ScopedMembers(new TypeScript.DualStringHashTable(this.dualGlobalValues, new TypeScript.StringHashTable()));
+ var dualGlobalScopedAmbientMembers = new TypeScript.ScopedMembers(new TypeScript.DualStringHashTable(this.dualAmbientGlobalValues, new TypeScript.StringHashTable()));
+ var dualGlobalScopedEnclosedTypes = new TypeScript.ScopedMembers(new TypeScript.DualStringHashTable(this.dualGlobalTypes, new TypeScript.StringHashTable()));
+ var dualGlobalScopedAmbientEnclosedTypes = new TypeScript.ScopedMembers(new TypeScript.DualStringHashTable(this.dualAmbientGlobalTypes, new TypeScript.StringHashTable()));
+ this.globalScope = new TypeScript.SymbolScopeBuilder(dualGlobalScopedMembers, dualGlobalScopedAmbientMembers, dualGlobalScopedEnclosedTypes, dualGlobalScopedAmbientEnclosedTypes, this.importedGlobals, null);
+ this.voidType = this.enterPrimitive(TypeScript.Primitive.Void, "void");
+ this.booleanType = this.enterPrimitive(TypeScript.Primitive.Boolean, "bool");
+ this.doubleType = this.enterPrimitive(TypeScript.Primitive.Double, "number");
+ this.importedGlobals.ambientEnclosedTypes.addPublicMember("number", this.doubleType.symbol);
+ this.stringType = this.enterPrimitive(TypeScript.Primitive.String, "string");
+ this.anyType = this.enterPrimitive(TypeScript.Primitive.Any, "any");
+ this.nullType = this.enterPrimitive(TypeScript.Primitive.Null, "null");
+ this.undefinedType = this.enterPrimitive(TypeScript.Primitive.Undefined, "undefined");
+ this.setCollectionMode(TypeCheckCollectionMode.Resident);
+ this.wildElm = new TypeScript.TypeSymbol("_element", -1, 0, -1, new TypeScript.Type());
+ this.importedGlobalsTypeTable.addPublicMember(this.wildElm.name, this.wildElm);
+ this.mod = new TypeScript.ModuleType(dualGlobalScopedEnclosedTypes, dualGlobalScopedAmbientEnclosedTypes);
+ this.mod.members = dualGlobalScopedMembers;
+ this.mod.ambientMembers = dualGlobalScopedAmbientMembers;
+ this.mod.containedScope = this.globalScope;
+ this.gloMod = new TypeScript.TypeSymbol(TypeScript.globalId, -1, 0, -1, this.mod);
+ this.mod.members.addPublicMember(this.gloMod.name, this.gloMod);
+ this.defineGlobalValue("undefined", this.undefinedType);
+ }
+ PersistentGlobalTypeState.prototype.enterPrimitive = function (flags, name) {
+ var primitive = new TypeScript.Type();
+ primitive.primitiveTypeClass = flags;
+ var symbol = new TypeScript.TypeSymbol(name, -1, name.length, -1, primitive);
+ symbol.typeCheckStatus = TypeScript.TypeCheckStatus.Finished;
+ primitive.symbol = symbol;
+ this.importedGlobals.enter(null, null, symbol, this.errorReporter, true, true, true);
+ return primitive;
+ };
+ PersistentGlobalTypeState.prototype.setCollectionMode = function (mode) {
+ this.residentTypeCheck = this.dualGlobalValues.insertPrimary = this.dualGlobalTypes.insertPrimary = this.dualAmbientGlobalValues.insertPrimary = this.dualAmbientGlobalTypes.insertPrimary = mode == TypeCheckCollectionMode.Resident;
+ };
+ PersistentGlobalTypeState.prototype.refreshPersistentState = function () {
+ this.globals = new TypeScript.StringHashTable();
+ this.globalTypes = new TypeScript.StringHashTable();
+ this.ambientGlobals = new TypeScript.StringHashTable();
+ this.ambientGlobalTypes = new TypeScript.StringHashTable();
+ this.globalTypes.add(this.voidType.symbol.name, this.voidType.symbol);
+ this.globalTypes.add(this.booleanType.symbol.name, this.booleanType.symbol);
+ this.globalTypes.add(this.doubleType.symbol.name, this.doubleType.symbol);
+ this.globalTypes.add("number", this.doubleType.symbol);
+ this.globalTypes.add(this.stringType.symbol.name, this.stringType.symbol);
+ this.globalTypes.add(this.anyType.symbol.name, this.anyType.symbol);
+ this.globalTypes.add(this.nullType.symbol.name, this.nullType.symbol);
+ this.globalTypes.add(this.undefinedType.symbol.name, this.undefinedType.symbol);
+ this.dualGlobalValues.secondaryTable = this.globals;
+ this.dualGlobalTypes.secondaryTable = this.globalTypes;
+ this.dualAmbientGlobalValues.secondaryTable = this.ambientGlobals;
+ this.dualAmbientGlobalTypes.secondaryTable = this.ambientGlobalTypes;
+ };
+ PersistentGlobalTypeState.prototype.defineGlobalValue = function (name, type) {
+ var valueLocation = new TypeScript.ValueLocation();
+ valueLocation.typeLink = new TypeScript.TypeLink();
+ var sym = new TypeScript.VariableSymbol(name, 0, -1, valueLocation);
+ sym.setType(type);
+ sym.typeCheckStatus = TypeScript.TypeCheckStatus.Finished;
+ sym.container = this.gloMod;
+ this.importedGlobalsTable.addPublicMember(name, sym);
+ };
+ return PersistentGlobalTypeState;
+ })();
+ TypeScript.PersistentGlobalTypeState = PersistentGlobalTypeState;
+ var ContextualTypeContext = (function () {
+ function ContextualTypeContext(contextualType, provisional, contextID) {
+ this.contextualType = contextualType;
+ this.provisional = provisional;
+ this.contextID = contextID;
+ this.targetSig = null;
+ this.targetThis = null;
+ this.targetAccessorType = null;
+ }
+ return ContextualTypeContext;
+ })();
+ TypeScript.ContextualTypeContext = ContextualTypeContext;
+ var ContextualTypingContextStack = (function () {
+ function ContextualTypingContextStack(checker) {
+ this.checker = checker;
+ this.contextStack = [];
+ this.hadProvisionalErrors = false;
+ }
+ ContextualTypingContextStack.contextID = TypeScript.TypeCheckStatus.Finished + 1;
+ ContextualTypingContextStack.prototype.pushContextualType = function (type, provisional) {
+ this.contextStack.push(new ContextualTypeContext(type, provisional, ContextualTypingContextStack.contextID++));
+ this.checker.errorReporter.pushToErrorSink = provisional;
+ };
+ ContextualTypingContextStack.prototype.popContextualType = function () {
+ var tc = this.contextStack.pop();
+ this.checker.errorReporter.pushToErrorSink = this.isProvisional();
+ this.hadProvisionalErrors = this.hadProvisionalErrors || (tc.provisional && (this.checker.errorReporter.getCapturedErrors().length));
+ this.checker.errorReporter.freeCapturedErrors();
+ return tc;
+ };
+ ContextualTypingContextStack.prototype.getContextualType = function () {
+ return (!this.contextStack.length ? null : this.contextStack[this.contextStack.length - 1]);
+ };
+ ContextualTypingContextStack.prototype.getContextID = function () {
+ return (!this.contextStack.length ? TypeScript.TypeCheckStatus.Finished : this.contextStack[this.contextStack.length - 1].contextID);
+ };
+ ContextualTypingContextStack.prototype.isProvisional = function () {
+ return (!this.contextStack.length ? false : this.contextStack[this.contextStack.length - 1].provisional);
+ };
+ return ContextualTypingContextStack;
+ })();
+ TypeScript.ContextualTypingContextStack = ContextualTypingContextStack;
+ var TypeChecker = (function () {
+ function TypeChecker(persistentState) {
+ this.persistentState = persistentState;
+ this.errorReporter = null;
+ this.checkControlFlow = false;
+ this.printControlFlowGraph = false;
+ this.checkControlFlowUseDef = false;
+ this.styleSettings = null;
+ this.units = null;
+ this.anon = "_anonymous";
+ this.locationInfo = null;
+ this.typeFlow = null;
+ this.currentCompareA = null;
+ this.currentCompareB = null;
+ this.currentModDecl = null;
+ this.inBind = false;
+ this.inWith = false;
+ this.errorsOnWith = true;
+ this.currentContextualTypeContext = null;
+ this.resolvingBases = false;
+ this.canCallDefinitionSignature = false;
+ this.assignableCache = {
+ };
+ this.subtypeCache = {
+ };
+ this.identicalCache = {
+ };
+ this.provisionalStartedTypecheckObjects = [];
+ this.mustCaptureGlobalThis = false;
+ this.voidType = this.persistentState.voidType;
+ this.booleanType = this.persistentState.booleanType;
+ this.numberType = this.persistentState.doubleType;
+ this.stringType = this.persistentState.stringType;
+ this.anyType = this.persistentState.anyType;
+ this.nullType = this.persistentState.nullType;
+ this.undefinedType = this.persistentState.undefinedType;
+ this.globals = this.persistentState.dualGlobalValues;
+ this.globalTypes = this.persistentState.dualGlobalTypes;
+ this.ambientGlobals = this.persistentState.dualAmbientGlobalValues;
+ this.ambientGlobalTypes = this.persistentState.dualAmbientGlobalTypes;
+ this.gloModType = this.persistentState.mod;
+ this.gloMod = this.persistentState.gloMod;
+ this.wildElm = this.persistentState.wildElm;
+ this.globalScope = this.persistentState.globalScope;
+ this.typingContextStack = new ContextualTypingContextStack(this);
+ }
+ TypeChecker.prototype.setStyleOptions = function (style) {
+ this.styleSettings = style;
+ };
+ TypeChecker.prototype.setContextualType = function (type, provisional) {
+ this.typingContextStack.pushContextualType(type, provisional);
+ this.currentContextualTypeContext = this.typingContextStack.getContextualType();
+ };
+ TypeChecker.prototype.unsetContextualType = function () {
+ var lastTC = this.typingContextStack.popContextualType();
+ this.currentContextualTypeContext = this.typingContextStack.getContextualType();
+ return lastTC;
+ };
+ TypeChecker.prototype.hadProvisionalErrors = function () {
+ return this.typingContextStack.hadProvisionalErrors;
+ };
+ TypeChecker.prototype.resetProvisionalErrors = function () {
+ if(!this.typingContextStack.getContextualType()) {
+ this.typingContextStack.hadProvisionalErrors = false;
+ }
+ };
+ TypeChecker.prototype.typeCheckWithContextualType = function (contextType, provisional, condition, ast) {
+ if(condition) {
+ this.setContextualType(contextType, this.typingContextStack.isProvisional() || provisional);
+ }
+ this.typeFlow.typeCheck(ast);
+ if(condition) {
+ this.unsetContextualType();
+ }
+ };
+ TypeChecker.prototype.resetTargetType = function () {
+ this.currentContextualTypeContext = this.typingContextStack.getContextualType();
+ };
+ TypeChecker.prototype.killCurrentContextualType = function () {
+ this.currentContextualTypeContext = null;
+ this.errorReporter.pushToErrorSink = false;
+ };
+ TypeChecker.prototype.hasTargetType = function () {
+ return this.currentContextualTypeContext && this.currentContextualTypeContext.contextualType;
+ };
+ TypeChecker.prototype.getTargetTypeContext = function () {
+ return this.currentContextualTypeContext;
+ };
+ TypeChecker.prototype.inProvisionalTypecheckMode = function () {
+ return this.typingContextStack.isProvisional();
+ };
+ TypeChecker.prototype.getTypeCheckFinishedStatus = function () {
+ if(this.inProvisionalTypecheckMode()) {
+ return this.typingContextStack.getContextID();
+ }
+ return TypeScript.TypeCheckStatus.Finished;
+ };
+ TypeChecker.prototype.typeStatusIsFinished = function (status) {
+ return status == TypeScript.TypeCheckStatus.Finished || (this.inProvisionalTypecheckMode() && status == this.typingContextStack.getContextID());
+ };
+ TypeChecker.prototype.addStartedPTO = function (pto) {
+ if(this.inProvisionalTypecheckMode()) {
+ this.provisionalStartedTypecheckObjects[this.provisionalStartedTypecheckObjects.length] = pto;
+ }
+ };
+ TypeChecker.prototype.cleanStartedPTO = function () {
+ for(var i = 0; i < this.provisionalStartedTypecheckObjects.length; i++) {
+ if(this.provisionalStartedTypecheckObjects[i].typeCheckStatus >= this.typingContextStack.getContextID()) {
+ this.provisionalStartedTypecheckObjects[i].typeCheckStatus = TypeScript.TypeCheckStatus.NotStarted;
+ }
+ }
+ this.provisionalStartedTypecheckObjects = [];
+ };
+ TypeChecker.prototype.collectTypes = function (ast) {
+ if(ast.nodeType == TypeScript.NodeType.Script) {
+ var script = ast;
+ this.locationInfo = script.locationInfo;
+ }
+ var globalChain = new TypeScript.ScopeChain(this.gloMod, null, this.globalScope);
+ var context = new TypeScript.TypeCollectionContext(globalChain, this);
+ TypeScript.getAstWalkerFactory().walk(ast, TypeScript.preCollectTypes, TypeScript.postCollectTypes, null, context);
+ };
+ TypeChecker.prototype.makeArrayType = function (type) {
+ if(type.arrayCache == null) {
+ type.arrayCache = new ArrayCache();
+ type.arrayCache.arrayType = new TypeScript.Type();
+ type.arrayCache.arrayType.elementType = type;
+ type.arrayCache.arrayType.symbol = type.symbol;
+ }
+ return type.arrayCache.arrayType;
+ };
+ TypeChecker.prototype.getParameterList = function (funcDecl, container) {
+ var args = funcDecl.arguments;
+ var parameterTable = null;
+ var parameterBuilder = null;
+ var len = args.members.length;
+ var nonOptionalParams = 0;
+ var result = [];
+ if(len > 0) {
+ parameterTable = new TypeScript.ScopedMembers(new TypeScript.DualStringHashTable(new TypeScript.StringHashTable(), new TypeScript.StringHashTable()));
+ parameterBuilder = new TypeScript.SymbolScopeBuilder(parameterTable, null, null, null, null, container);
+ for(var i = 0; i < len; i++) {
+ var parameter = args.members[i];
+ var paramDef = new TypeScript.ValueLocation();
+ var parameterSymbol = new TypeScript.ParameterSymbol(parameter.id.text, parameter.minChar, this.locationInfo.unitIndex, paramDef);
+ parameterSymbol.declAST = parameter;
+ parameterSymbol.funcDecl = funcDecl;
+ parameter.id.sym = parameterSymbol;
+ parameter.sym = parameterSymbol;
+ paramDef.symbol = parameterSymbol;
+ paramDef.typeLink = TypeScript.getTypeLink(parameter.typeExpr, this, false);
+ parameterBuilder.enter(null, parameter, parameterSymbol, this.errorReporter, true, false, false);
+ result[result.length] = parameterSymbol;
+ if(!parameter.isOptionalArg()) {
+ nonOptionalParams++;
+ }
+ }
+ }
+ return {
+ parameters: result,
+ nonOptionalParameterCount: nonOptionalParams
+ };
+ };
+ TypeChecker.prototype.createFunctionSignature = function (funcDecl, container, scope, overloadGroupSym, addToScope) {
+ var isExported = TypeScript.hasFlag(funcDecl.fncFlags, TypeScript.FncFlags.Exported | TypeScript.FncFlags.ClassPropertyMethodExported) || container == this.gloMod;
+ var isStatic = TypeScript.hasFlag(funcDecl.fncFlags, TypeScript.FncFlags.Static);
+ var isPrivate = TypeScript.hasFlag(funcDecl.fncFlags, TypeScript.FncFlags.Private);
+ var isDefinition = TypeScript.hasFlag(funcDecl.fncFlags, TypeScript.FncFlags.Definition);
+ var isAmbient = TypeScript.hasFlag(funcDecl.fncFlags, TypeScript.FncFlags.Ambient);
+ var isConstructor = funcDecl.isConstructMember() || funcDecl.isConstructor;
+ var isGlobal = container == this.gloMod;
+ var signature = new TypeScript.Signature();
+ var isLambda = funcDecl.fncFlags & TypeScript.FncFlags.IsFunctionExpression;
+ if(funcDecl.returnTypeAnnotation || isDefinition) {
+ signature.returnType = TypeScript.getTypeLink(funcDecl.returnTypeAnnotation, this, false);
+ } else {
+ signature.returnType = new TypeScript.TypeLink();
+ signature.returnType.type = this.anyType;
+ }
+ signature.hasVariableArgList = funcDecl.variableArgList;
+ var sigData = this.getParameterList(funcDecl, container);
+ signature.parameters = sigData.parameters;
+ signature.nonOptionalParameterCount = sigData.nonOptionalParameterCount;
+ funcDecl.signature = signature;
+ signature.declAST = funcDecl;
+ var useOverloadGroupSym = overloadGroupSym && overloadGroupSym.getType() && !overloadGroupSym.isAccessor() && (funcDecl.isSignature() || (isAmbient == TypeScript.hasFlag(overloadGroupSym.flags, TypeScript.SymbolFlags.Ambient)));
+ if(useOverloadGroupSym && isPrivate != TypeScript.hasFlag(overloadGroupSym.flags, TypeScript.SymbolFlags.Private)) {
+ this.errorReporter.simpleError(funcDecl, "Public/Private visibility of overloads does not agree");
+ }
+ var groupType = useOverloadGroupSym ? overloadGroupSym.getType() : new TypeScript.Type();
+ if(isConstructor) {
+ if(groupType.construct == null) {
+ groupType.construct = new TypeScript.SignatureGroup();
+ }
+ groupType.construct.addSignature(signature);
+ groupType.construct.hasImplementation = !(funcDecl.isSignature());
+ if(groupType.construct.hasImplementation) {
+ groupType.setHasImplementation();
+ }
+ } else {
+ if(funcDecl.isIndexerMember()) {
+ if(groupType.index == null) {
+ groupType.index = new TypeScript.SignatureGroup();
+ groupType.index.flags |= TypeScript.SignatureFlags.IsIndexer;
+ }
+ groupType.index.addSignature(signature);
+ groupType.index.hasImplementation = !(funcDecl.isSignature());
+ if(groupType.index.hasImplementation) {
+ groupType.setHasImplementation();
+ }
+ } else {
+ if(groupType.call == null) {
+ groupType.call = new TypeScript.SignatureGroup();
+ }
+ groupType.call.addSignature(signature);
+ groupType.call.hasImplementation = !(funcDecl.isSignature());
+ if(groupType.call.hasImplementation) {
+ groupType.setHasImplementation();
+ }
+ }
+ }
+ var instanceType = groupType.instanceType;
+ var funcName = null;
+ var usedHint = false;
+ if(funcDecl.name && !funcDecl.name.isMissing()) {
+ funcName = funcDecl.name.text;
+ } else {
+ if(funcDecl.hint) {
+ funcName = funcDecl.hint;
+ usedHint = true;
+ }
+ }
+ if(groupType.symbol == null) {
+ groupType.symbol = new TypeScript.TypeSymbol(funcName ? funcName : this.anon, funcDecl.minChar, funcDecl.limChar - funcDecl.minChar, this.locationInfo.unitIndex, groupType);
+ if(!useOverloadGroupSym) {
+ groupType.symbol.declAST = funcDecl;
+ }
+ }
+ if(isStatic) {
+ groupType.symbol.flags |= TypeScript.SymbolFlags.Static;
+ }
+ if(isAmbient) {
+ groupType.symbol.flags |= TypeScript.SymbolFlags.Ambient;
+ }
+ if(isPrivate) {
+ groupType.symbol.flags |= TypeScript.SymbolFlags.Private;
+ }
+ groupType.symbol.isMethod = funcDecl.isMethod();
+ if(groupType.symbol.isMethod) {
+ groupType.symbol.flags |= TypeScript.SymbolFlags.Property;
+ }
+ funcDecl.type = groupType;
+ if(!isConstructor) {
+ if(funcName && !isLambda && !funcDecl.isAccessor() && !usedHint) {
+ if(addToScope) {
+ if(funcDecl.isMethod() && isStatic) {
+ if(!(container).type.members.publicMembers.add(funcName, groupType.symbol)) {
+ this.errorReporter.duplicateIdentifier(funcDecl, funcName);
+ }
+ groupType.symbol.container = container;
+ } else {
+ if(overloadGroupSym == null || (overloadGroupSym.declAST && !(overloadGroupSym.declAST).isOverload && (container.isType()))) {
+ scope.enter(container, funcDecl, groupType.symbol, this.errorReporter, !isPrivate && (isExported || isStatic || isGlobal), false, isAmbient);
+ }
+ }
+ } else {
+ if(!funcDecl.isSpecialFn()) {
+ groupType.symbol.container = container;
+ }
+ }
+ } else {
+ if(!funcDecl.isSpecialFn()) {
+ groupType.symbol.container = container;
+ }
+ }
+ }
+ if(useOverloadGroupSym) {
+ var overloadGroupType = overloadGroupSym ? overloadGroupSym.getType() : null;
+ var classType = groupType;
+ if(classType != overloadGroupType) {
+ if(classType.construct == null) {
+ if(overloadGroupType && overloadGroupType.construct) {
+ classType.construct = overloadGroupType.construct;
+ } else {
+ classType.construct = new TypeScript.SignatureGroup();
+ }
+ } else {
+ if(overloadGroupType) {
+ if(overloadGroupType.construct) {
+ classType.construct.signatures.concat(overloadGroupType.construct.signatures);
+ }
+ }
+ }
+ if(overloadGroupType) {
+ if(classType.call == null) {
+ classType.call = overloadGroupType.call;
+ } else {
+ if(overloadGroupType.call) {
+ classType.call.signatures.concat(overloadGroupType.call.signatures);
+ }
+ }
+ if(!isStatic) {
+ if(classType.instanceType == null) {
+ classType.instanceType = overloadGroupType.instanceType;
+ }
+ var instanceType = classType.instanceType;
+ if(instanceType) {
+ if(instanceType.call == null) {
+ instanceType.call = overloadGroupType.call;
+ } else {
+ if(overloadGroupType.call) {
+ instanceType.call.signatures.concat(overloadGroupType.call.signatures);
+ }
+ }
+ }
+ }
+ if(classType.index == null) {
+ classType.index = overloadGroupType.index;
+ } else {
+ if(overloadGroupType.index) {
+ classType.index.signatures.concat(overloadGroupType.index.signatures);
+ }
+ }
+ }
+ }
+ }
+ return signature;
+ };
+ TypeChecker.prototype.createAccessorSymbol = function (funcDecl, fgSym, enclosingClass, addToMembers, isClassProperty, scope, container) {
+ var accessorSym = null;
+ var sig = funcDecl.signature;
+ var nameText = funcDecl.name.text;
+ var isStatic = TypeScript.hasFlag(funcDecl.fncFlags, TypeScript.FncFlags.Static);
+ var isPrivate = TypeScript.hasFlag(funcDecl.fncFlags, TypeScript.FncFlags.Private);
+ if(fgSym == null) {
+ var field = new TypeScript.ValueLocation();
+ accessorSym = new TypeScript.FieldSymbol(nameText, funcDecl.minChar, this.locationInfo.unitIndex, false, field);
+ field.symbol = accessorSym;
+ accessorSym.declAST = funcDecl;
+ if(TypeScript.hasFlag(funcDecl.fncFlags, TypeScript.FncFlags.GetAccessor)) {
+ if(accessorSym.getter) {
+ this.errorReporter.simpleError(funcDecl, "Redeclaration of property getter");
+ }
+ accessorSym.getter = sig.declAST.type.symbol;
+ } else {
+ if(accessorSym.setter) {
+ this.errorReporter.simpleError(funcDecl, "Redeclaration of property setter");
+ }
+ accessorSym.setter = sig.declAST.type.symbol;
+ }
+ field.typeLink = TypeScript.getTypeLink(null, this, false);
+ if(addToMembers) {
+ if(enclosingClass) {
+ if(!enclosingClass.members.publicMembers.add(nameText, accessorSym)) {
+ this.errorReporter.duplicateIdentifier(funcDecl, accessorSym.name);
+ }
+ accessorSym.container = enclosingClass.symbol;
+ } else {
+ this.errorReporter.simpleError(funcDecl, "Accessor property may not be added in this context");
+ }
+ } else {
+ scope.enter(container, funcDecl, accessorSym, this.errorReporter, !isPrivate || isStatic, false, false);
+ }
+ if(isClassProperty) {
+ accessorSym.flags |= TypeScript.SymbolFlags.Property;
+ }
+ if(isStatic) {
+ accessorSym.flags |= TypeScript.SymbolFlags.Static;
+ }
+ if(isPrivate) {
+ accessorSym.flags |= TypeScript.SymbolFlags.Private;
+ } else {
+ accessorSym.flags |= TypeScript.SymbolFlags.Public;
+ }
+ } else {
+ accessorSym = (fgSym);
+ if(isPrivate != TypeScript.hasFlag(accessorSym.flags, TypeScript.SymbolFlags.Private)) {
+ this.errorReporter.simpleError(funcDecl, "Getter and setter accessors do not agree in visibility");
+ }
+ if(TypeScript.hasFlag(funcDecl.fncFlags, TypeScript.FncFlags.GetAccessor)) {
+ if(accessorSym.getter) {
+ this.errorReporter.simpleError(funcDecl, "Redeclaration of property getter");
+ }
+ accessorSym.getter = funcDecl.type.symbol;
+ } else {
+ if(accessorSym.setter) {
+ this.errorReporter.simpleError(funcDecl, "Redeclaration of property setter");
+ }
+ accessorSym.setter = funcDecl.type.symbol;
+ }
+ }
+ return accessorSym;
+ };
+ TypeChecker.prototype.addBases = function (resultScope, type, baseContext) {
+ resultScope.addParentScope(new TypeScript.SymbolTableScope(type.members, type.ambientMembers, type.getAllEnclosedTypes(), type.getAllAmbientEnclosedTypes(), type.symbol));
+ var i = 0;
+ var parent;
+ if(type.extendsList) {
+ for(var len = type.extendsList.length; i < len; i++) {
+ parent = type.extendsList[i];
+ if(baseContext.baseId == parent.typeID) {
+ this.errorReporter.reportErrorFromSym(parent.symbol, "Type '" + baseContext.base + "' is recursively referenced as a base class of itself");
+ parent.symbol.flags |= TypeScript.SymbolFlags.RecursivelyReferenced;
+ break;
+ }
+ this.addBases(resultScope, parent, baseContext);
+ }
+ }
+ };
+ TypeChecker.prototype.scopeOf = function (type) {
+ var resultScope = new TypeScript.SymbolAggregateScope(type.symbol);
+ var baseContext = {
+ base: type.symbol && type.symbol.name ? type.symbol.name : "{}",
+ baseId: type.typeID
+ };
+ this.addBases(resultScope, type, baseContext);
+ return resultScope;
+ };
+ TypeChecker.prototype.lookupMemberTypeSymbol = function (containingType, name) {
+ var symbol = null;
+ if(containingType.containedScope) {
+ symbol = containingType.containedScope.find(name, false, true);
+ } else {
+ if(containingType.members) {
+ symbol = containingType.members.allMembers.lookup(name);
+ if(symbol == null && containingType.ambientMembers) {
+ symbol = containingType.ambientMembers.allMembers.lookup(name);
+ }
+ }
+ }
+ if(symbol == null) {
+ var typeMembers = containingType.getAllEnclosedTypes();
+ var ambientTypeMembers = containingType.getAllAmbientEnclosedTypes();
+ if(typeMembers) {
+ symbol = typeMembers.allMembers.lookup(name);
+ if(symbol == null && ambientTypeMembers) {
+ symbol = ambientTypeMembers.allMembers.lookup(name);
+ }
+ }
+ }
+ if(symbol && symbol.isType()) {
+ return symbol;
+ } else {
+ return null;
+ }
+ };
+ TypeChecker.prototype.findSymbolForDynamicModule = function (idText, currentFileName, search) {
+ var originalIdText = idText;
+ var symbol = search(idText);
+ if(symbol == null) {
+ if(!symbol) {
+ idText = TypeScript.swapQuotes(originalIdText);
+ symbol = search(idText);
+ }
+ if(!symbol) {
+ idText = TypeScript.stripQuotes(originalIdText) + ".ts";
+ symbol = search(idText);
+ }
+ if(!symbol) {
+ idText = TypeScript.stripQuotes(originalIdText) + ".str";
+ symbol = search(idText);
+ }
+ if(!symbol) {
+ idText = TypeScript.stripQuotes(originalIdText) + ".d.ts";
+ symbol = search(idText);
+ }
+ if(!symbol) {
+ idText = TypeScript.stripQuotes(originalIdText) + ".d.str";
+ symbol = search(idText);
+ }
+ if(!symbol && !TypeScript.isRelative(originalIdText)) {
+ idText = originalIdText;
+ var strippedIdText = TypeScript.stripQuotes(idText);
+ var path = TypeScript.getRootFilePath(TypeScript.switchToForwardSlashes(currentFileName));
+ while(symbol == null && path != "") {
+ idText = TypeScript.normalizePath(path + strippedIdText + ".ts");
+ symbol = search(idText);
+ if(symbol == null) {
+ idText = TypeScript.changePathToSTR(idText);
+ symbol = search(idText);
+ }
+ if(symbol == null) {
+ idText = TypeScript.changePathToDTS(idText);
+ symbol = search(idText);
+ }
+ if(symbol == null) {
+ idText = TypeScript.changePathToDSTR(idText);
+ symbol = search(idText);
+ }
+ if(symbol == null) {
+ if(path === '/') {
+ path = '';
+ } else {
+ path = TypeScript.normalizePath(path + "..");
+ path = path && path != '/' ? path + '/' : path;
+ }
+ }
+ }
+ }
+ }
+ return symbol;
+ };
+ TypeChecker.prototype.resolveTypeMember = function (scope, dotNode) {
+ var lhs = dotNode.operand1;
+ var rhs = dotNode.operand2;
+ var resultType = this.anyType;
+ var lhsType = this.anyType;
+ if(lhs && rhs && (rhs.nodeType == TypeScript.NodeType.Name)) {
+ if(lhs.nodeType == TypeScript.NodeType.Dot) {
+ lhsType = this.resolveTypeMember(scope, lhs);
+ } else {
+ if(lhs.nodeType == TypeScript.NodeType.Name) {
+ var identifier = lhs;
+ var symbol = scope.find(identifier.text, false, true);
+ if(symbol == null) {
+ this.errorReporter.unresolvedSymbol(identifier, identifier.actualText);
+ } else {
+ if(symbol.isType()) {
+ var typeSymbol = symbol;
+ if(typeSymbol.aliasLink && !typeSymbol.type && typeSymbol.aliasLink.alias.nodeType == TypeScript.NodeType.Name) {
+ var modPath = (typeSymbol.aliasLink.alias).text;
+ var modSym = this.findSymbolForDynamicModule(modPath, this.locationInfo.filename, function (id) {
+ return scope.find(id, false, true);
+ });
+ if(modSym) {
+ typeSymbol.type = modSym.getType();
+ }
+ }
+ if(TypeScript.optimizeModuleCodeGen && symbol) {
+ var symType = symbol.getType();
+ if(symType && typeSymbol.aliasLink && typeSymbol.onlyReferencedAsTypeRef) {
+ var modDecl = symType.symbol.declAST;
+ if(modDecl && TypeScript.hasFlag(modDecl.modFlags, TypeScript.ModuleFlags.IsDynamic)) {
+ typeSymbol.onlyReferencedAsTypeRef = !this.resolvingBases;
+ }
+ }
+ }
+ if(!symbol.visible(scope, this)) {
+ this.errorReporter.simpleError(lhs, "The symbol '" + identifier.actualText + "' is not visible at this point");
+ }
+ lhsType = symbol.getType();
+ identifier.sym = symbol;
+ } else {
+ this.errorReporter.simpleError(lhs, "Expected type");
+ }
+ }
+ }
+ }
+ if(!lhsType) {
+ lhsType = this.anyType;
+ }
+ if(lhsType != this.anyType) {
+ var rhsIdentifier = rhs;
+ var resultSymbol = this.lookupMemberTypeSymbol(lhsType, rhsIdentifier.text);
+ if(resultSymbol == null) {
+ resultType = this.anyType;
+ this.errorReporter.simpleError(dotNode, "Expected type");
+ } else {
+ resultType = resultSymbol.getType();
+ if(!resultSymbol.visible(scope, this)) {
+ this.errorReporter.simpleError(lhs, "The symbol '" + (rhs).actualText + "' is not visible at this point");
+ }
+ }
+ rhsIdentifier.sym = resultType.symbol;
+ }
+ }
+ if(resultType.isClass()) {
+ resultType = resultType.instanceType;
+ }
+ return resultType;
+ };
+ TypeChecker.prototype.resolveFuncDecl = function (funcDecl, scope, fgSym) {
+ var functionGroupSymbol = this.createFunctionSignature(funcDecl, scope.container, scope, fgSym, false).declAST.type.symbol;
+ var signatures;
+ if(funcDecl.isConstructMember()) {
+ signatures = functionGroupSymbol.type.construct.signatures;
+ } else {
+ if(funcDecl.isIndexerMember()) {
+ signatures = functionGroupSymbol.type.getInstanceType().index.signatures;
+ } else {
+ signatures = functionGroupSymbol.type.call.signatures;
+ }
+ }
+ var signature = signatures[signatures.length - 1];
+ var len = signature.parameters.length;
+ for(var i = 0; i < len; i++) {
+ var paramSym = signature.parameters[i];
+ this.resolveTypeLink(scope, paramSym.parameter.typeLink, true);
+ }
+ if(len && funcDecl.variableArgList) {
+ if(!signature.parameters[len - 1].parameter.typeLink.type.elementType) {
+ this.errorReporter.simpleErrorFromSym(signature.parameters[len - 1].parameter.symbol, "... parameter must have array type");
+ signature.parameters[len - 1].parameter.typeLink.type = this.makeArrayType(signature.parameters[len - 1].parameter.typeLink.type);
+ }
+ }
+ this.resolveTypeLink(scope, signature.returnType, funcDecl.isSignature());
+ return functionGroupSymbol;
+ };
+ TypeChecker.prototype.resolveVarDecl = function (varDecl, scope) {
+ var field = new TypeScript.ValueLocation();
+ var fieldSymbol = new TypeScript.FieldSymbol(varDecl.id.text, varDecl.minChar, this.locationInfo.unitIndex, (varDecl.varFlags & TypeScript.VarFlags.Readonly) == TypeScript.VarFlags.None, field);
+ fieldSymbol.transferVarFlags(varDecl.varFlags);
+ field.symbol = fieldSymbol;
+ fieldSymbol.declAST = varDecl;
+ field.typeLink = TypeScript.getTypeLink(varDecl.typeExpr, this, varDecl.init == null);
+ this.resolveTypeLink(scope, field.typeLink, true);
+ varDecl.sym = fieldSymbol;
+ varDecl.type = field.typeLink.type;
+ return fieldSymbol;
+ };
+ TypeChecker.prototype.resolveTypeLink = function (scope, typeLink, supplyVar) {
+ var arrayCount = 0;
+ if(typeLink.type == null) {
+ var ast = typeLink.ast;
+ if(ast) {
+ while(typeLink.type == null) {
+ switch(ast.nodeType) {
+ case TypeScript.NodeType.Name: {
+ var identifier = ast;
+ var symbol = scope.find(identifier.text, false, true);
+ if(symbol == null) {
+ typeLink.type = this.anyType;
+ this.errorReporter.unresolvedSymbol(identifier, identifier.actualText);
+ } else {
+ if(symbol.isType()) {
+ if(!symbol.visible(scope, this)) {
+ this.errorReporter.simpleError(ast, "The symbol '" + identifier.actualText + "' is not visible at this point");
+ }
+ identifier.sym = symbol;
+ typeLink.type = symbol.getType();
+ if(typeLink.type) {
+ if(typeLink.type.isClass()) {
+ typeLink.type = typeLink.type.instanceType;
+ }
+ } else {
+ typeLink.type = this.anyType;
+ }
+ } else {
+ typeLink.type = this.anyType;
+ this.errorReporter.simpleError(ast, "Expected type");
+ }
+ }
+ break;
+
+ }
+ case TypeScript.NodeType.Dot: {
+ typeLink.type = this.resolveTypeMember(scope, ast);
+ break;
+
+ }
+ case TypeScript.NodeType.TypeRef: {
+ var typeRef = ast;
+ arrayCount = typeRef.arrayCount;
+ ast = typeRef.term;
+ if(ast == null) {
+ typeLink.type = this.anyType;
+ }
+ break;
+
+ }
+ case TypeScript.NodeType.InterfaceDeclaration: {
+ var interfaceDecl = ast;
+ var interfaceType = new TypeScript.Type();
+ var interfaceSymbol = new TypeScript.TypeSymbol((interfaceDecl.name).text, ast.minChar, ast.limChar - ast.minChar, this.locationInfo.unitIndex, interfaceType);
+ interfaceType.symbol = interfaceSymbol;
+ interfaceType.members = new TypeScript.ScopedMembers(new TypeScript.DualStringHashTable(new TypeScript.StringHashTable(), new TypeScript.StringHashTable()));
+ interfaceType.containedScope = new TypeScript.SymbolTableScope(interfaceType.members, null, null, null, interfaceSymbol);
+ interfaceType.containedScope.container = interfaceSymbol;
+ interfaceType.memberScope = interfaceType.containedScope;
+ var memberList = interfaceDecl.members;
+ var props = memberList.members;
+ var propsLen = props.length;
+ for(var j = 0; j < propsLen; j++) {
+ var propDecl = props[j];
+ var propSym = null;
+ var addMember = true;
+ var id = null;
+ if(propDecl.nodeType == TypeScript.NodeType.FuncDecl) {
+ var funcDecl = propDecl;
+ id = funcDecl.name;
+ propSym = interfaceType.members.allMembers.lookup(funcDecl.getNameText());
+ addMember = (propSym == null);
+ if(funcDecl.isSpecialFn()) {
+ addMember = false;
+ propSym = this.resolveFuncDecl(funcDecl, scope, interfaceSymbol);
+ } else {
+ propSym = this.resolveFuncDecl(funcDecl, scope, propSym);
+ }
+ funcDecl.type = (propSym).type;
+ } else {
+ id = (propDecl).id;
+ propSym = this.resolveVarDecl(propDecl, scope);
+ addMember = !id.isMissing();
+ }
+ if(addMember) {
+ if(id && TypeScript.hasFlag(id.flags, TypeScript.ASTFlags.OptionalName)) {
+ propSym.flags |= TypeScript.SymbolFlags.Optional;
+ }
+ if(!interfaceType.members.allMembers.add(propSym.name, propSym)) {
+ this.errorReporter.duplicateIdentifier(ast, propSym.name);
+ }
+ }
+ }
+ ast.type = interfaceType;
+ typeLink.type = interfaceType;
+ break;
+
+ }
+ case TypeScript.NodeType.FuncDecl: {
+ var tsym = this.resolveFuncDecl(ast, scope, null);
+ typeLink.type = tsym.type;
+ break;
+
+ }
+ default: {
+ typeLink.type = this.anyType;
+ this.errorReporter.simpleError(ast, "Expected type");
+ break;
+
+ }
+ }
+ }
+ }
+ for(var count = arrayCount; count > 0; count--) {
+ typeLink.type = this.makeArrayType(typeLink.type);
+ }
+ if(supplyVar && (typeLink.type == null)) {
+ typeLink.type = this.anyType;
+ }
+ if(typeLink.ast) {
+ typeLink.ast.type = typeLink.type;
+ }
+ }
+ };
+ TypeChecker.prototype.resolveBaseTypeLink = function (typeLink, scope) {
+ this.resolvingBases = true;
+ this.resolveTypeLink(scope, typeLink, true);
+ this.resolvingBases = false;
+ var extendsType = null;
+ if(typeLink.type.isClass()) {
+ extendsType = typeLink.type.instanceType;
+ } else {
+ extendsType = typeLink.type;
+ }
+ return extendsType;
+ };
+ TypeChecker.prototype.findMostApplicableSignature = function (signatures, args) {
+ if(signatures.length == 1) {
+ return {
+ sig: signatures[0].signature,
+ ambiguous: false
+ };
+ }
+ var best = signatures[0];
+ var Q = null;
+ var AType = null;
+ var PType = null;
+ var QType = null;
+ var ambiguous = false;
+ for(var qSig = 1; qSig < signatures.length; qSig++) {
+ Q = signatures[qSig];
+ var i = 0;
+ for(i = 0; args && i < args.members.length; i++) {
+ AType = args.members[i].type;
+ PType = i < best.signature.parameters.length ? best.signature.parameters[i].getType() : best.signature.parameters[best.signature.parameters.length - 1].getType().elementType;
+ QType = i < Q.signature.parameters.length ? Q.signature.parameters[i].getType() : Q.signature.parameters[Q.signature.parameters.length - 1].getType().elementType;
+ if(this.typesAreIdentical(PType, QType)) {
+ continue;
+ } else {
+ if(this.typesAreIdentical(AType, PType)) {
+ break;
+ } else {
+ if(this.typesAreIdentical(AType, QType)) {
+ best = Q;
+ break;
+ } else {
+ if(this.sourceIsSubtypeOfTarget(PType, QType)) {
+ break;
+ } else {
+ if(this.sourceIsSubtypeOfTarget(QType, PType)) {
+ best = Q;
+ break;
+ } else {
+ if(Q.hadProvisionalErrors) {
+ break;
+ } else {
+ if(best.hadProvisionalErrors) {
+ best = Q;
+ break;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ if(!args || i == args.members.length) {
+ var collection = {
+ getLength: function () {
+ return 2;
+ },
+ setTypeAtIndex: function (index, type) {
+ },
+ getTypeAtIndex: function (index) {
+ return index ? Q.signature.returnType.type : best.signature.returnType.type;
+ }
+ };
+ var bct = this.findBestCommonType(best.signature.returnType.type, null, collection, true);
+ ambiguous = !bct;
+ } else {
+ ambiguous = false;
+ }
+ }
+ return {
+ sig: best.signature,
+ ambiguous: ambiguous
+ };
+ };
+ TypeChecker.prototype.getApplicableSignatures = function (signatures, args, comparisonInfo) {
+ var applicableSigs = [];
+ var memberType = null;
+ var miss = false;
+ var cxt = null;
+ var hadProvisionalErrors = false;
+ for(var i = 0; i < signatures.length; i++) {
+ miss = false;
+ for(var j = 0; j < args.members.length; j++) {
+ if(j >= signatures[i].parameters.length) {
+ continue;
+ }
+ memberType = signatures[i].parameters[j].getType();
+ if(signatures[i].declAST.variableArgList && (j >= signatures[i].nonOptionalParameterCount - 1) && memberType.isArray()) {
+ memberType = memberType.elementType;
+ }
+ if(memberType == this.anyType) {
+ continue;
+ } else {
+ if(args.members[j].nodeType == TypeScript.NodeType.FuncDecl) {
+ if(this.typeFlow.functionInterfaceType && memberType == this.typeFlow.functionInterfaceType) {
+ continue;
+ }
+ if(!this.canContextuallyTypeFunction(memberType, args.members[j], true)) {
+ if(this.canContextuallyTypeFunction(memberType, args.members[j], false)) {
+ this.typeFlow.typeCheck(args.members[j]);
+ if(!this.sourceIsAssignableToTarget(args.members[j].type, memberType, comparisonInfo)) {
+ break;
+ }
+ } else {
+ break;
+ }
+ } else {
+ this.typeCheckWithContextualType(memberType, true, true, args.members[j]);
+ this.cleanStartedPTO();
+ hadProvisionalErrors = this.hadProvisionalErrors();
+ if(!this.sourceIsAssignableToTarget(args.members[j].type, memberType, comparisonInfo)) {
+ if(comparisonInfo) {
+ comparisonInfo.setMessage("Could not apply type '" + memberType.getTypeName() + "' to argument " + (j + 1) + ", which is of type '" + args.members[j].type.getTypeName() + "'");
+ }
+ miss = true;
+ }
+ this.resetProvisionalErrors();
+ if(miss) {
+ break;
+ }
+ }
+ } else {
+ if(args.members[j].nodeType == TypeScript.NodeType.ObjectLit) {
+ if(this.typeFlow.objectInterfaceType && memberType == this.typeFlow.objectInterfaceType) {
+ continue;
+ }
+ this.typeCheckWithContextualType(memberType, true, true, args.members[j]);
+ this.cleanStartedPTO();
+ hadProvisionalErrors = this.hadProvisionalErrors();
+ if(!this.sourceIsAssignableToTarget(args.members[j].type, memberType, comparisonInfo)) {
+ if(comparisonInfo) {
+ comparisonInfo.setMessage("Could not apply type '" + memberType.getTypeName() + "' to argument " + (j + 1) + ", which is of type '" + args.members[j].type.getTypeName() + "'");
+ }
+ miss = true;
+ }
+ this.resetProvisionalErrors();
+ if(miss) {
+ break;
+ }
+ } else {
+ if(args.members[j].nodeType == TypeScript.NodeType.ArrayLit) {
+ if(this.typeFlow.arrayInterfaceType && memberType == this.typeFlow.arrayInterfaceType) {
+ continue;
+ }
+ this.typeCheckWithContextualType(memberType, true, true, args.members[j]);
+ this.cleanStartedPTO();
+ hadProvisionalErrors = this.hadProvisionalErrors();
+ if(!this.sourceIsAssignableToTarget(args.members[j].type, memberType, comparisonInfo)) {
+ if(comparisonInfo) {
+ comparisonInfo.setMessage("Could not apply type '" + memberType.getTypeName() + "' to argument " + (j + 1) + ", which is of type '" + args.members[j].type.getTypeName() + "'");
+ }
+ break;
+ }
+ this.resetProvisionalErrors();
+ if(miss) {
+ break;
+ }
+ }
+ }
+ }
+ }
+ }
+ if(j == args.members.length) {
+ applicableSigs[applicableSigs.length] = {
+ signature: signatures[i],
+ hadProvisionalErrors: hadProvisionalErrors
+ };
+ }
+ hadProvisionalErrors = false;
+ }
+ return applicableSigs;
+ };
+ TypeChecker.prototype.canContextuallyTypeFunction = function (candidateType, funcDecl, beStringent) {
+ if(funcDecl.isParenthesized || funcDecl.isMethod() || beStringent && funcDecl.returnTypeAnnotation || funcDecl.isInlineCallLiteral) {
+ return false;
+ }
+ beStringent = beStringent || (this.typeFlow.functionInterfaceType == candidateType);
+ if(!beStringent) {
+ return true;
+ }
+ if(!funcDecl.signature) {
+ this.createFunctionSignature(funcDecl, this.typeFlow.scope.container, this.typeFlow.scope, null, null);
+ this.typeFlow.typeCheck(funcDecl);
+ }
+ var signature = funcDecl.signature;
+ var paramLen = signature.parameters.length;
+ for(var i = 0; i < paramLen; i++) {
+ var param = signature.parameters[i];
+ var symbol = param;
+ var argDecl = symbol.declAST;
+ if(beStringent && argDecl.typeExpr) {
+ return false;
+ }
+ }
+ if(candidateType.construct && candidateType.call) {
+ return false;
+ }
+ var candidateSigs = candidateType.construct ? candidateType.construct : candidateType.call;
+ if(!candidateSigs || candidateSigs.signatures.length > 1) {
+ return false;
+ }
+ return true;
+ };
+ TypeChecker.prototype.canContextuallyTypeObjectLiteral = function (targetType, objectLit) {
+ if(targetType == this.typeFlow.objectInterfaceType) {
+ return true;
+ }
+ var memberDecls = objectLit.operand;
+ if(!(memberDecls && targetType.memberScope)) {
+ return false;
+ }
+ var id = null;
+ var targetMember = null;
+ var text = "";
+ var foundSyms = {
+ };
+ for(var i = 0; i < memberDecls.members.length; i++) {
+ id = (memberDecls.members[i]).operand1;
+ if(id.nodeType == TypeScript.NodeType.Name) {
+ text = (id).text;
+ } else {
+ if(id.nodeType == TypeScript.NodeType.QString) {
+ var idText = (id).text;
+ text = idText.substring(1, idText.length - 1);
+ } else {
+ return false;
+ }
+ }
+ targetMember = targetType.memberScope.find(text, true, false);
+ if(!targetMember) {
+ return false;
+ }
+ foundSyms[text] = true;
+ }
+ var targetMembers = targetType.memberScope.getAllValueSymbolNames(true);
+ for(var i = 0; i < targetMembers.length; i++) {
+ var memberName = targetMembers[i];
+ var memberSym = targetType.memberScope.find(memberName, true, false);
+ if(!foundSyms[targetMembers[i]] && !TypeScript.hasFlag(memberSym.flags, TypeScript.SymbolFlags.Optional)) {
+ return false;
+ }
+ }
+ return true;
+ };
+ TypeChecker.prototype.widenType = function (t) {
+ if(t == this.undefinedType || t == this.nullType) {
+ return this.anyType;
+ }
+ return t;
+ };
+ TypeChecker.prototype.isNullOrUndefinedType = function (t) {
+ return t == this.undefinedType || t == this.nullType;
+ };
+ TypeChecker.prototype.findBestCommonType = function (initialType, targetType, collection, acceptVoid, comparisonInfo) {
+ var i = 0;
+ var len = collection.getLength();
+ var nlastChecked = 0;
+ var bestCommonType = initialType;
+ if(targetType) {
+ bestCommonType = bestCommonType ? bestCommonType.mergeOrdered(targetType, this, acceptVoid) : targetType;
+ }
+ var convergenceType = bestCommonType;
+ while(nlastChecked < len) {
+ for(i = 0; i < len; i++) {
+ if(i == nlastChecked) {
+ continue;
+ }
+ if(convergenceType && (bestCommonType = convergenceType.mergeOrdered(collection.getTypeAtIndex(i), this, acceptVoid, comparisonInfo))) {
+ convergenceType = bestCommonType;
+ }
+ if(bestCommonType == this.anyType || bestCommonType == null) {
+ break;
+ } else {
+ if(targetType) {
+ collection.setTypeAtIndex(i, targetType);
+ }
+ }
+ }
+ if(convergenceType && bestCommonType) {
+ break;
+ }
+ nlastChecked++;
+ if(nlastChecked < len) {
+ convergenceType = collection.getTypeAtIndex(nlastChecked);
+ }
+ }
+ return acceptVoid ? bestCommonType : (bestCommonType == this.voidType ? null : bestCommonType);
+ };
+ TypeChecker.prototype.typesAreIdentical = function (t1, t2) {
+ if(t1 == t2) {
+ return true;
+ }
+ if(!t1 || !t2) {
+ return false;
+ }
+ if(t1.isClass() || t1.isClassInstance()) {
+ return false;
+ }
+ var comboId = (t2.typeID << 16) | t1.typeID;
+ if(this.identicalCache[comboId]) {
+ return true;
+ }
+ if((t1.typeFlags & TypeScript.TypeFlags.IsEnum) || (t2.typeFlags & TypeScript.TypeFlags.IsEnum)) {
+ return false;
+ }
+ if(t1.isArray() || t2.isArray()) {
+ if(!(t1.isArray() && t2.isArray())) {
+ return false;
+ }
+ this.identicalCache[comboId] = false;
+ var ret = this.typesAreIdentical(t1.elementType, t2.elementType);
+ if(ret) {
+ this.subtypeCache[comboId] = true;
+ } else {
+ this.subtypeCache[comboId] = undefined;
+ }
+ return ret;
+ }
+ if(t1.primitiveTypeClass != t2.primitiveTypeClass) {
+ return false;
+ }
+ this.identicalCache[comboId] = false;
+ if(t1.memberScope && t2.memberScope) {
+ var t1MemberKeys = t1.memberScope.getAllValueSymbolNames(true).sort();
+ var t2MemberKeys = t2.memberScope.getAllValueSymbolNames(true).sort();
+ if(t1MemberKeys.length != t2MemberKeys.length) {
+ this.identicalCache[comboId] = undefined;
+ return false;
+ }
+ var t1MemberSymbol = null;
+ var t2MemberSymbol = null;
+ var t1MemberType = null;
+ var t2MemberType = null;
+ for(var iMember = 0; iMember < t1MemberKeys.length; iMember++) {
+ if(t1MemberKeys[iMember] != t2MemberKeys[iMember]) {
+ this.identicalCache[comboId] = undefined;
+ return false;
+ }
+ t1MemberSymbol = t1.memberScope.find(t1MemberKeys[iMember], false, false);
+ t2MemberSymbol = t2.memberScope.find(t2MemberKeys[iMember], false, false);
+ if((t1MemberSymbol.flags & TypeScript.SymbolFlags.Optional) != (t2MemberSymbol.flags & TypeScript.SymbolFlags.Optional)) {
+ this.identicalCache[comboId] = undefined;
+ return false;
+ }
+ t1MemberType = t1MemberSymbol.getType();
+ t2MemberType = t2MemberSymbol.getType();
+ if(t1MemberType && t2MemberType && (this.identicalCache[(t2MemberType.typeID << 16) | t1MemberType.typeID] != undefined)) {
+ continue;
+ }
+ if(!this.typesAreIdentical(t1MemberType, t2MemberType)) {
+ this.identicalCache[comboId] = undefined;
+ return false;
+ }
+ }
+ } else {
+ if(t1.memberScope || t2.memberScope) {
+ this.identicalCache[comboId] = undefined;
+ return false;
+ }
+ }
+ if(!this.signatureGroupsAreIdentical(t1.call, t2.call)) {
+ this.identicalCache[comboId] = undefined;
+ return false;
+ }
+ if(!this.signatureGroupsAreIdentical(t1.construct, t2.construct)) {
+ this.identicalCache[comboId] = undefined;
+ return false;
+ }
+ if(!this.signatureGroupsAreIdentical(t1.index, t2.index)) {
+ this.identicalCache[comboId] = undefined;
+ return false;
+ }
+ this.identicalCache[comboId] = true;
+ return true;
+ };
+ TypeChecker.prototype.signatureGroupsAreIdentical = function (sg1, sg2) {
+ if(sg1 == sg2) {
+ return true;
+ }
+ if(!sg1 || !sg2) {
+ return false;
+ }
+ if(sg1.signatures.length != sg2.signatures.length) {
+ return false;
+ }
+ var sig1 = null;
+ var sig2 = null;
+ var sigsMatch = false;
+ for(var iSig1 = 0; iSig1 < sg1.signatures.length; iSig1++) {
+ sig1 = sg1.signatures[iSig1];
+ for(var iSig2 = 0; iSig2 < sg2.signatures.length; iSig2++) {
+ sig2 = sg2.signatures[iSig2];
+ if(this.signaturesAreIdentical(sig1, sig2)) {
+ sigsMatch = true;
+ break;
+ }
+ }
+ if(sigsMatch) {
+ sigsMatch = false;
+ continue;
+ }
+ return false;
+ }
+ return true;
+ };
+ TypeChecker.prototype.signaturesAreIdentical = function (s1, s2) {
+ if(s1.hasVariableArgList != s2.hasVariableArgList) {
+ return false;
+ }
+ if(s1.nonOptionalParameterCount != s2.nonOptionalParameterCount) {
+ return false;
+ }
+ if(s1.parameters.length != s2.parameters.length) {
+ return false;
+ }
+ if(!this.typesAreIdentical(s1.returnType.type, s2.returnType.type)) {
+ return false;
+ }
+ for(var iParam = 0; iParam < s1.parameters.length; iParam++) {
+ if(!this.typesAreIdentical(s1.parameters[iParam].parameter.typeLink.type, s2.parameters[iParam].parameter.typeLink.type)) {
+ return false;
+ }
+ }
+ return true;
+ };
+ TypeChecker.prototype.sourceIsSubtypeOfTarget = function (source, target, comparisonInfo) {
+ return this.sourceIsRelatableToTarget(source, target, false, this.subtypeCache, comparisonInfo);
+ };
+ TypeChecker.prototype.signatureGroupIsSubtypeOfTarget = function (sg1, sg2, comparisonInfo) {
+ return this.signatureGroupIsRelatableToTarget(sg1, sg2, false, this.subtypeCache, comparisonInfo);
+ };
+ TypeChecker.prototype.signatureIsSubtypeOfTarget = function (s1, s2, comparisonInfo) {
+ return this.signatureIsRelatableToTarget(s1, s2, false, this.subtypeCache, comparisonInfo);
+ };
+ TypeChecker.prototype.sourceIsAssignableToTarget = function (source, target, comparisonInfo) {
+ return this.sourceIsRelatableToTarget(source, target, true, this.assignableCache, comparisonInfo);
+ };
+ TypeChecker.prototype.signatureGroupIsAssignableToTarget = function (sg1, sg2, comparisonInfo) {
+ return this.signatureGroupIsRelatableToTarget(sg1, sg2, true, this.assignableCache, comparisonInfo);
+ };
+ TypeChecker.prototype.signatureIsAssignableToTarget = function (s1, s2, comparisonInfo) {
+ return this.signatureIsRelatableToTarget(s1, s2, true, this.assignableCache, comparisonInfo);
+ };
+ TypeChecker.prototype.sourceIsRelatableToTarget = function (source, target, assignableTo, comparisonCache, comparisonInfo) {
+ if(source == target) {
+ return true;
+ }
+ if(!(source && target)) {
+ return true;
+ }
+ var comboId = (source.typeID << 16) | target.typeID;
+ if(comparisonCache[comboId] != undefined) {
+ return true;
+ }
+ if(assignableTo) {
+ if(source == this.anyType || target == this.anyType) {
+ return true;
+ }
+ } else {
+ if(target == this.anyType) {
+ return true;
+ }
+ }
+ if(source == this.undefinedType) {
+ return true;
+ }
+ if((source == this.nullType) && (target != this.undefinedType && target != this.voidType)) {
+ return true;
+ }
+ if(target == this.numberType && (source.typeFlags & TypeScript.TypeFlags.IsEnum)) {
+ return true;
+ }
+ if(source == this.numberType && (target.typeFlags & TypeScript.TypeFlags.IsEnum)) {
+ return true;
+ }
+ if((source.typeFlags & TypeScript.TypeFlags.IsEnum) || (target.typeFlags & TypeScript.TypeFlags.IsEnum)) {
+ return false;
+ }
+ if(source.isArray() || target.isArray()) {
+ if(!(source.isArray() && target.isArray())) {
+ return false;
+ }
+ comparisonCache[comboId] = false;
+ var ret = this.sourceIsRelatableToTarget(source.elementType, target.elementType, assignableTo, comparisonCache, comparisonInfo);
+ if(ret) {
+ comparisonCache[comboId] = true;
+ } else {
+ comparisonCache[comboId] = undefined;
+ }
+ return ret;
+ }
+ if(source.primitiveTypeClass != target.primitiveTypeClass) {
+ if(target.primitiveTypeClass == TypeScript.Primitive.None) {
+ if(source == this.numberType && this.typeFlow.numberInterfaceType) {
+ source = this.typeFlow.numberInterfaceType;
+ } else {
+ if(source == this.stringType && this.typeFlow.stringInterfaceType) {
+ source = this.typeFlow.stringInterfaceType;
+ } else {
+ if(source == this.booleanType && this.typeFlow.booleanInterfaceType) {
+ source = this.typeFlow.booleanInterfaceType;
+ } else {
+ return false;
+ }
+ }
+ }
+ } else {
+ return false;
+ }
+ }
+ comparisonCache[comboId] = false;
+ if(source.hasBase(target)) {
+ comparisonCache[comboId] = true;
+ return true;
+ }
+ if(this.typeFlow.objectInterfaceType && target == this.typeFlow.objectInterfaceType) {
+ return true;
+ }
+ if(this.typeFlow.functionInterfaceType && (source.call || source.construct) && target == this.typeFlow.functionInterfaceType) {
+ return true;
+ }
+ if(target.isClass() || target.isClassInstance()) {
+ comparisonCache[comboId] = undefined;
+ return false;
+ }
+ if(target.memberScope && source.memberScope) {
+ var mPropKeys = target.memberScope.getAllValueSymbolNames(true);
+ var mProp = null;
+ var nProp = null;
+ var mPropType = null;
+ var nPropType = null;
+ var inferenceSymbol = null;
+ for(var iMProp = 0; iMProp < mPropKeys.length; iMProp++) {
+ mProp = target.memberScope.find(mPropKeys[iMProp], false, false);
+ nProp = source.memberScope.find(mPropKeys[iMProp], false, false);
+ if(mProp.name == "arguments" && this.typeFlow.iargumentsInterfaceType && (this.typeFlow.iargumentsInterfaceType.symbol.flags & TypeScript.SymbolFlags.CompilerGenerated) && mProp.kind() == TypeScript.SymbolKind.Variable && (mProp).variable.typeLink.type == this.typeFlow.iargumentsInterfaceType) {
+ continue;
+ }
+ if(mProp.isInferenceSymbol()) {
+ inferenceSymbol = mProp;
+ if(inferenceSymbol.typeCheckStatus == TypeScript.TypeCheckStatus.NotStarted) {
+ this.typeFlow.typeCheck(mProp.declAST);
+ }
+ }
+ mPropType = mProp.getType();
+ if(!nProp) {
+ if(this.typeFlow.objectInterfaceType) {
+ nProp = this.typeFlow.objectInterfaceType.memberScope.find(mPropKeys[iMProp], false, false);
+ }
+ if(!nProp) {
+ if(this.typeFlow.functionInterfaceType && (mPropType.call || mPropType.construct)) {
+ nProp = this.typeFlow.functionInterfaceType.memberScope.find(mPropKeys[iMProp], false, false);
+ }
+ if(!nProp) {
+ if(!(mProp.flags & TypeScript.SymbolFlags.Optional)) {
+ comparisonCache[comboId] = undefined;
+ if(comparisonInfo) {
+ comparisonInfo.flags |= TypeScript.TypeRelationshipFlags.RequiredPropertyIsMissing;
+ comparisonInfo.addMessageToFront("Type '" + source.getTypeName() + "' is missing property '" + mPropKeys[iMProp] + "' from type '" + target.getTypeName() + "'");
+ }
+ return false;
+ } else {
+ continue;
+ }
+ }
+ }
+ }
+ if(nProp.isInferenceSymbol()) {
+ inferenceSymbol = nProp;
+ if(inferenceSymbol.typeCheckStatus == TypeScript.TypeCheckStatus.NotStarted) {
+ this.typeFlow.typeCheck(nProp.declAST);
+ }
+ }
+ nPropType = nProp.getType();
+ if(mPropType && nPropType && (comparisonCache[(nPropType.typeID << 16) | mPropType.typeID] != undefined)) {
+ continue;
+ }
+ if(!this.sourceIsRelatableToTarget(nPropType, mPropType, assignableTo, comparisonCache, comparisonInfo)) {
+ comparisonCache[comboId] = undefined;
+ if(comparisonInfo) {
+ comparisonInfo.flags |= TypeScript.TypeRelationshipFlags.IncompatiblePropertyTypes;
+ comparisonInfo.addMessageToFront("Types of property '" + mProp.name + "' of types '" + source.getTypeName() + "' and '" + target.getTypeName() + "' are incompatible");
+ }
+ return false;
+ }
+ }
+ }
+ if(source.call || target.call) {
+ if(!this.signatureGroupIsRelatableToTarget(source.call, target.call, assignableTo, comparisonCache, comparisonInfo)) {
+ if(comparisonInfo) {
+ if(source.call && target.call) {
+ comparisonInfo.addMessageToFront("Call signatures of types '" + source.getTypeName() + "' and '" + target.getTypeName() + "' are incompatible");
+ } else {
+ var hasSig = target.call ? target.getTypeName() : source.getTypeName();
+ var lacksSig = !target.call ? target.getTypeName() : source.getTypeName();
+ comparisonInfo.setMessage("Type '" + hasSig + "' requires a call signature, but Type '" + lacksSig + "' lacks one");
+ }
+ comparisonInfo.flags |= TypeScript.TypeRelationshipFlags.IncompatibleSignatures;
+ }
+ comparisonCache[comboId] = undefined;
+ return false;
+ }
+ }
+ if(source.construct || target.construct) {
+ if(!this.signatureGroupIsRelatableToTarget(source.construct, target.construct, assignableTo, comparisonCache, comparisonInfo)) {
+ if(comparisonInfo) {
+ if(source.construct && target.construct) {
+ comparisonInfo.addMessageToFront("Construct signatures of types '" + source.getTypeName() + "' and '" + target.getTypeName() + "' are incompatible");
+ } else {
+ var hasSig = target.construct ? target.getTypeName() : source.getTypeName();
+ var lacksSig = !target.construct ? target.getTypeName() : source.getTypeName();
+ comparisonInfo.setMessage("Type '" + hasSig + "' requires a construct signature, but Type '" + lacksSig + "' lacks one");
+ }
+ comparisonInfo.flags |= TypeScript.TypeRelationshipFlags.IncompatibleSignatures;
+ }
+ comparisonCache[comboId] = undefined;
+ return false;
+ }
+ }
+ if(target.index) {
+ var targetIndex = !target.index && this.typeFlow.objectInterfaceType ? this.typeFlow.objectInterfaceType.index : target.index;
+ var sourceIndex = !source.index && this.typeFlow.objectInterfaceType ? this.typeFlow.objectInterfaceType.index : source.index;
+ if(!this.signatureGroupIsRelatableToTarget(sourceIndex, targetIndex, assignableTo, comparisonCache, comparisonInfo)) {
+ if(comparisonInfo) {
+ comparisonInfo.addMessageToFront("Index signatures of types '" + source.getTypeName() + "' and '" + target.getTypeName() + "' are incompatible");
+ comparisonInfo.flags |= TypeScript.TypeRelationshipFlags.IncompatibleSignatures;
+ }
+ comparisonCache[comboId] = undefined;
+ return false;
+ }
+ }
+ comparisonCache[comboId] = true;
+ return true;
+ };
+ TypeChecker.prototype.signatureGroupIsRelatableToTarget = function (sourceSG, targetSG, assignableTo, comparisonCache, comparisonInfo) {
+ if(sourceSG == targetSG) {
+ return true;
+ }
+ if(!(sourceSG && targetSG)) {
+ return false;
+ }
+ var mSig = null;
+ var nSig = null;
+ var foundMatch = false;
+ for(var iMSig = 0; iMSig < targetSG.signatures.length; iMSig++) {
+ mSig = targetSG.signatures[iMSig];
+ for(var iNSig = 0; iNSig < sourceSG.signatures.length; iNSig++) {
+ nSig = sourceSG.signatures[iNSig];
+ if(this.signatureIsRelatableToTarget(nSig, mSig, assignableTo, comparisonCache, comparisonInfo)) {
+ foundMatch = true;
+ break;
+ }
+ }
+ if(foundMatch) {
+ foundMatch = false;
+ continue;
+ }
+ return false;
+ }
+ return true;
+ };
+ TypeChecker.prototype.signatureIsRelatableToTarget = function (sourceSig, targetSig, assignableTo, comparisonCache, comparisonInfo) {
+ if(!sourceSig.parameters || !targetSig.parameters) {
+ return false;
+ }
+ var targetVarArgCount = targetSig.hasVariableArgList ? targetSig.nonOptionalParameterCount - 1 : targetSig.nonOptionalParameterCount;
+ var sourceVarArgCount = sourceSig.hasVariableArgList ? sourceSig.nonOptionalParameterCount - 1 : sourceSig.nonOptionalParameterCount;
+ if(sourceVarArgCount > targetVarArgCount && !targetSig.hasVariableArgList) {
+ if(comparisonInfo) {
+ comparisonInfo.flags |= TypeScript.TypeRelationshipFlags.SourceSignatureHasTooManyParameters;
+ comparisonInfo.addMessageToFront("Call signature expects " + targetVarArgCount + " or fewer parameters");
+ }
+ return false;
+ }
+ var sourceReturnType = sourceSig.returnType.type;
+ var targetReturnType = targetSig.returnType.type;
+ if(targetReturnType != this.voidType) {
+ if(!this.sourceIsRelatableToTarget(sourceReturnType, targetReturnType, assignableTo, comparisonCache, comparisonInfo)) {
+ if(comparisonInfo) {
+ comparisonInfo.flags |= TypeScript.TypeRelationshipFlags.IncompatibleReturnTypes;
+ }
+ return false;
+ }
+ }
+ var len = (sourceVarArgCount < targetVarArgCount && sourceSig.hasVariableArgList) ? targetVarArgCount : sourceVarArgCount;
+ var sourceParamType = null;
+ var targetParamType = null;
+ var sourceParamName = "";
+ var targetParamName = "";
+ for(var iSource = 0, iTarget = 0; iSource < len; iSource++ , iTarget++) {
+ if(!sourceSig.hasVariableArgList || iSource < sourceVarArgCount) {
+ sourceParamType = (sourceSig.parameters[iSource]).parameter.typeLink.type;
+ sourceParamName = (sourceSig.parameters[iSource]).parameter.symbol.name;
+ } else {
+ if(iSource == sourceVarArgCount) {
+ sourceParamType = (sourceSig.parameters[iSource]).parameter.typeLink.type;
+ if(sourceParamType.elementType) {
+ sourceParamType = sourceParamType.elementType;
+ }
+ sourceParamName = (sourceSig.parameters[iSource]).parameter.symbol.name;
+ }
+ }
+ if(iTarget < targetSig.parameters.length && iTarget < targetVarArgCount) {
+ targetParamType = (targetSig.parameters[iTarget]).parameter.typeLink.type;
+ targetParamName = (targetSig.parameters[iTarget]).parameter.symbol.name;
+ } else {
+ if(targetSig.hasVariableArgList && iTarget == targetVarArgCount) {
+ targetParamType = (targetSig.parameters[iTarget]).parameter.typeLink.type;
+ if(targetParamType.elementType) {
+ targetParamType = targetParamType.elementType;
+ }
+ targetParamName = (targetSig.parameters[iTarget]).parameter.symbol.name;
+ }
+ }
+ if(!(this.sourceIsRelatableToTarget(sourceParamType, targetParamType, assignableTo, comparisonCache, comparisonInfo) || this.sourceIsRelatableToTarget(targetParamType, sourceParamType, assignableTo, comparisonCache, comparisonInfo))) {
+ if(comparisonInfo) {
+ comparisonInfo.flags |= TypeScript.TypeRelationshipFlags.IncompatibleParameterTypes;
+ }
+ return false;
+ }
+ }
+ return true;
+ };
+ return TypeChecker;
+ })();
+ TypeScript.TypeChecker = TypeChecker;
+})(TypeScript || (TypeScript = {}));
+var TypeScript;
+(function (TypeScript) {
+ var Continuation = (function () {
+ function Continuation(normalBlock) {
+ this.normalBlock = normalBlock;
+ this.exceptionBlock = -1;
+ }
+ return Continuation;
+ })();
+ TypeScript.Continuation = Continuation;
+ function getBaseTypeLinks(bases, baseTypeLinks) {
+ if(bases) {
+ var len = bases.members.length;
+ if(baseTypeLinks == null) {
+ baseTypeLinks = new Array();
+ }
+ for(var i = 0; i < len; i++) {
+ var baseExpr = bases.members[i];
+ var name = baseExpr;
+ var typeLink = new TypeScript.TypeLink();
+ typeLink.ast = name;
+ baseTypeLinks[baseTypeLinks.length] = typeLink;
+ }
+ }
+ return baseTypeLinks;
+ }
+ function getBases(type, typeDecl) {
+ type.extendsTypeLinks = getBaseTypeLinks(typeDecl.extendsList, type.extendsTypeLinks);
+ type.implementsTypeLinks = getBaseTypeLinks(typeDecl.implementsList, type.implementsTypeLinks);
+ }
+ function addPrototypeField(classType, ast, context) {
+ var field = new TypeScript.ValueLocation();
+ field.typeLink = new TypeScript.TypeLink();
+ field.typeLink.ast = ast;
+ field.typeLink.type = classType.instanceType;
+ var fieldSymbol = new TypeScript.FieldSymbol("prototype", ast.minChar, context.checker.locationInfo.unitIndex, true, field);
+ fieldSymbol.flags |= (TypeScript.SymbolFlags.Property | TypeScript.SymbolFlags.BuiltIn);
+ field.symbol = fieldSymbol;
+ fieldSymbol.declAST = ast;
+ classType.members.addPublicMember("prototype", fieldSymbol);
+ }
+ function createNewConstructGroupForType(type) {
+ var signature = new TypeScript.Signature();
+ signature.returnType = new TypeScript.TypeLink();
+ signature.returnType.type = type.instanceType;
+ signature.parameters = [];
+ type.construct = new TypeScript.SignatureGroup();
+ type.construct.addSignature(signature);
+ }
+ TypeScript.createNewConstructGroupForType = createNewConstructGroupForType;
+ function cloneParentConstructGroupForChildType(child, parent) {
+ child.construct = new TypeScript.SignatureGroup();
+ var sig = null;
+ if(!parent.construct) {
+ createNewConstructGroupForType(parent);
+ }
+ for(var i = 0; i < parent.construct.signatures.length; i++) {
+ sig = new TypeScript.Signature();
+ sig.parameters = parent.construct.signatures[i].parameters;
+ sig.nonOptionalParameterCount = parent.construct.signatures[i].nonOptionalParameterCount;
+ sig.typeCheckStatus = parent.construct.signatures[i].typeCheckStatus;
+ sig.declAST = parent.construct.signatures[i].declAST;
+ sig.returnType = new TypeScript.TypeLink();
+ sig.returnType.type = child.instanceType;
+ child.construct.addSignature(sig);
+ }
+ }
+ TypeScript.cloneParentConstructGroupForChildType = cloneParentConstructGroupForChildType;
+ TypeScript.globalId = "__GLO";
+ function findTypeSymbolInScopeChain(name, scopeChain) {
+ var symbol = scopeChain.scope.find(name, false, true);
+ if(symbol == null && scopeChain.previous) {
+ symbol = findTypeSymbolInScopeChain(name, scopeChain.previous);
+ }
+ return symbol;
+ }
+ function findSymbolFromAlias(alias, context) {
+ var symbol = null;
+ switch(alias.nodeType) {
+ case TypeScript.NodeType.Name: {
+ var name = (alias).text;
+ var isDynamic = TypeScript.isQuoted(name);
+ var findSym = function (id) {
+ if(context.members) {
+ return context.members.lookup(name);
+ } else {
+ return findTypeSymbolInScopeChain(name, context.topLevelScope);
+ }
+ };
+ if(isDynamic) {
+ symbol = context.tcContext.checker.findSymbolForDynamicModule(name, context.tcContext.script.locationInfo.filename, findSym);
+ } else {
+ symbol = findSym(name);
+ }
+ break;
+
+ }
+ case TypeScript.NodeType.Dot: {
+ var dottedExpr = alias;
+ var op1Sym = findSymbolFromAlias(dottedExpr.operand1, context);
+ if(op1Sym && op1Sym.getType()) {
+ symbol = findSymbolFromAlias(dottedExpr.operand2, context);
+ }
+ break;
+
+ }
+ default: {
+ break;
+
+ }
+ }
+ if(symbol) {
+ var symType = symbol.getType();
+ if(symType) {
+ var members = symType.members;
+ if(members) {
+ context.members = members.publicMembers;
+ }
+ }
+ }
+ return symbol;
+ }
+ function preCollectImportTypes(ast, parent, context) {
+ var scopeChain = context.scopeChain;
+ var typeSymbol = null;
+ var modType = null;
+ var importDecl = ast;
+ var aliasedModSymbol = findSymbolFromAlias(importDecl.alias, {
+ topLevelScope: scopeChain,
+ members: null,
+ tcContext: context
+ });
+ var isGlobal = context.scopeChain.container == context.checker.gloMod;
+ if(aliasedModSymbol) {
+ var aliasedModType = aliasedModSymbol.getType();
+ if(aliasedModType) {
+ modType = aliasedModType;
+ }
+ }
+ typeSymbol = new TypeScript.TypeSymbol(importDecl.id.text, importDecl.id.minChar, importDecl.limChar - importDecl.minChar, context.checker.locationInfo.unitIndex, modType);
+ typeSymbol.aliasLink = importDecl;
+ if(context.scopeChain.moduleDecl) {
+ typeSymbol.flags |= TypeScript.SymbolFlags.ModuleMember;
+ typeSymbol.declModule = context.scopeChain.moduleDecl;
+ }
+ typeSymbol.declAST = importDecl;
+ importDecl.id.sym = typeSymbol;
+ scopeChain.scope.enter(scopeChain.container, ast, typeSymbol, context.checker.errorReporter, isGlobal, true, false);
+ scopeChain.scope.enter(scopeChain.container, ast, typeSymbol, context.checker.errorReporter, isGlobal, false, false);
+ return true;
+ }
+ TypeScript.preCollectImportTypes = preCollectImportTypes;
+ function preCollectModuleTypes(ast, parent, context) {
+ var scopeChain = context.scopeChain;
+ var moduleDecl = ast;
+ var isAmbient = TypeScript.hasFlag(moduleDecl.modFlags, TypeScript.ModuleFlags.Ambient);
+ var isEnum = TypeScript.hasFlag(moduleDecl.modFlags, TypeScript.ModuleFlags.IsEnum);
+ var isGlobal = context.scopeChain.container == context.checker.gloMod;
+ var isExported = TypeScript.hasFlag(moduleDecl.modFlags, TypeScript.ModuleFlags.Exported);
+ var modName = (moduleDecl.name).text;
+ var isDynamic = TypeScript.isQuoted(modName);
+ var symbol = scopeChain.scope.findLocal(modName, false, false);
+ var typeSymbol = null;
+ var modType = null;
+ if((symbol == null) || (symbol.kind() != TypeScript.SymbolKind.Type)) {
+ if(modType == null) {
+ var enclosedTypes = new TypeScript.ScopedMembers(new TypeScript.DualStringHashTable(new TypeScript.StringHashTable(), new TypeScript.StringHashTable()));
+ var ambientEnclosedTypes = new TypeScript.ScopedMembers(new TypeScript.DualStringHashTable(new TypeScript.StringHashTable(), new TypeScript.StringHashTable()));
+ modType = new TypeScript.ModuleType(enclosedTypes, ambientEnclosedTypes);
+ if(isEnum) {
+ modType.typeFlags |= TypeScript.TypeFlags.IsEnum;
+ }
+ modType.members = new TypeScript.ScopedMembers(new TypeScript.DualStringHashTable(new TypeScript.StringHashTable(), new TypeScript.StringHashTable()));
+ modType.ambientMembers = new TypeScript.ScopedMembers(new TypeScript.DualStringHashTable(new TypeScript.StringHashTable(), new TypeScript.StringHashTable()));
+ modType.setHasImplementation();
+ }
+ typeSymbol = new TypeScript.TypeSymbol(modName, moduleDecl.name.minChar, modName.length, context.checker.locationInfo.unitIndex, modType);
+ typeSymbol.isDynamic = TypeScript.isQuoted(moduleDecl.prettyName);
+ if(context.scopeChain.moduleDecl) {
+ typeSymbol.declModule = context.scopeChain.moduleDecl;
+ }
+ typeSymbol.declAST = moduleDecl;
+ typeSymbol.prettyName = moduleDecl.prettyName;
+ scopeChain.scope.enter(scopeChain.container, ast, typeSymbol, context.checker.errorReporter, isExported || isGlobal, true, isAmbient);
+ scopeChain.scope.enter(scopeChain.container, ast, typeSymbol, context.checker.errorReporter, isExported || isGlobal, false, isAmbient);
+ modType.symbol = typeSymbol;
+ } else {
+ if(symbol && symbol.declAST && symbol.declAST.nodeType != TypeScript.NodeType.ModuleDeclaration) {
+ context.checker.errorReporter.simpleError(moduleDecl, "Conflicting symbol name for module '" + modName + "'");
+ }
+ typeSymbol = symbol;
+ var publicEnclosedTypes = typeSymbol.type.getAllEnclosedTypes().publicMembers;
+ var publicEnclosedTypesTable = (publicEnclosedTypes == null) ? new TypeScript.StringHashTable() : publicEnclosedTypes;
+ var enclosedTypes = new TypeScript.ScopedMembers(new TypeScript.DualStringHashTable(publicEnclosedTypesTable, new TypeScript.StringHashTable()));
+ var publicEnclosedAmbientTypes = typeSymbol.type.getAllAmbientEnclosedTypes().publicMembers;
+ var publicAmbientEnclosedTypesTable = (publicEnclosedAmbientTypes == null) ? new TypeScript.StringHashTable() : publicEnclosedAmbientTypes;
+ var ambientEnclosedTypes = new TypeScript.ScopedMembers(new TypeScript.DualStringHashTable(publicAmbientEnclosedTypesTable, new TypeScript.StringHashTable()));
+ var publicMembers = typeSymbol.type.members.publicMembers;
+ var publicMembersTable = (publicMembers == null) ? new TypeScript.StringHashTable() : publicMembers;
+ var members = new TypeScript.ScopedMembers(new TypeScript.DualStringHashTable(publicMembersTable, new TypeScript.StringHashTable()));
+ var publicAmbientMembers = typeSymbol.type.ambientMembers.publicMembers;
+ var publicAmbientMembersTable = (publicAmbientMembers == null) ? new TypeScript.StringHashTable() : publicAmbientMembers;
+ var ambientMembers = new TypeScript.ScopedMembers(new TypeScript.DualStringHashTable(publicAmbientMembersTable, new TypeScript.StringHashTable()));
+ modType = new TypeScript.ModuleType(enclosedTypes, ambientEnclosedTypes);
+ if(isEnum) {
+ modType.typeFlags |= TypeScript.TypeFlags.IsEnum;
+ }
+ modType.members = members;
+ modType.ambientMembers = ambientMembers;
+ modType.setHasImplementation();
+ modType.symbol = typeSymbol;
+ typeSymbol.addLocation(moduleDecl.minChar);
+ typeSymbol.expansions.push(modType);
+ typeSymbol.expansionsDeclAST.push(moduleDecl);
+ }
+ if(context.scopeChain.moduleDecl) {
+ context.scopeChain.moduleDecl.recordNonInterface();
+ }
+ if(isExported) {
+ typeSymbol.flags |= TypeScript.SymbolFlags.Exported;
+ }
+ if((context.scopeChain.moduleDecl) || (context.scopeChain.container == context.checker.gloMod)) {
+ typeSymbol.flags |= TypeScript.SymbolFlags.ModuleMember;
+ }
+ moduleDecl.mod = modType;
+ TypeScript.pushTypeCollectionScope(typeSymbol, modType.members, modType.ambientMembers, modType.enclosedTypes, modType.ambientEnclosedTypes, context, null, null, moduleDecl);
+ return true;
+ }
+ TypeScript.preCollectModuleTypes = preCollectModuleTypes;
+ function preCollectClassTypes(ast, parent, context) {
+ var scopeChain = context.scopeChain;
+ var classDecl = ast;
+ var classType;
+ var instanceType;
+ var typeSymbol = null;
+ var className = (classDecl.name).text;
+ var alreadyInScope = false;
+ var isAmbient = TypeScript.hasFlag(classDecl.varFlags, TypeScript.VarFlags.Ambient);
+ var isExported = TypeScript.hasFlag(classDecl.varFlags, TypeScript.VarFlags.Exported);
+ var isGlobal = context.scopeChain.container == context.checker.gloMod;
+ var containerMod = scopeChain.container;
+ var foundValSymbol = false;
+ typeSymbol = scopeChain.scope.findLocal(className, false, true);
+ if(!typeSymbol) {
+ var valTypeSymbol = scopeChain.scope.findLocal(className, false, false);
+ if(valTypeSymbol && valTypeSymbol.isType() && valTypeSymbol.declAST && valTypeSymbol.declAST.nodeType == TypeScript.NodeType.FuncDecl && (valTypeSymbol.declAST).isSignature()) {
+ typeSymbol = valTypeSymbol;
+ foundValSymbol = true;
+ if(isExported) {
+ typeSymbol.flags |= TypeScript.SymbolFlags.Exported;
+ }
+ if(isAmbient) {
+ typeSymbol.flags |= TypeScript.SymbolFlags.Ambient;
+ }
+ context.scopeChain.scope.enter(context.scopeChain.container, ast, typeSymbol, context.checker.errorReporter, isExported || isGlobal, true, isAmbient);
+ }
+ }
+ if(typeSymbol && !foundValSymbol && (typeSymbol.declAST != classDecl)) {
+ typeSymbol = null;
+ }
+ if(typeSymbol == null) {
+ var valueSymbol = scopeChain.scope.findLocal(className, false, false);
+ classType = new TypeScript.Type();
+ classType.setHasImplementation();
+ instanceType = new TypeScript.Type();
+ instanceType.setHasImplementation();
+ classType.instanceType = instanceType;
+ classType.members = new TypeScript.ScopedMembers(new TypeScript.DualStringHashTable(new TypeScript.StringHashTable(), new TypeScript.StringHashTable()));
+ classType.ambientMembers = new TypeScript.ScopedMembers(new TypeScript.DualStringHashTable(new TypeScript.StringHashTable(), new TypeScript.StringHashTable()));
+ addPrototypeField(classType, classDecl, context);
+ instanceType.members = new TypeScript.ScopedMembers(new TypeScript.DualStringHashTable(new TypeScript.StringHashTable(), new TypeScript.StringHashTable()));
+ instanceType.ambientMembers = new TypeScript.ScopedMembers(new TypeScript.DualStringHashTable(new TypeScript.StringHashTable(), new TypeScript.StringHashTable()));
+ typeSymbol = new TypeScript.TypeSymbol(className, classDecl.name.minChar, className.length, context.checker.locationInfo.unitIndex, classType);
+ typeSymbol.declAST = classDecl;
+ typeSymbol.instanceType = instanceType;
+ classType.symbol = typeSymbol;
+ instanceType.symbol = typeSymbol;
+ if(context.scopeChain.moduleDecl) {
+ context.scopeChain.moduleDecl.recordNonInterface();
+ typeSymbol.declModule = context.scopeChain.moduleDecl;
+ typeSymbol.flags |= TypeScript.SymbolFlags.ModuleMember;
+ }
+ if(isExported) {
+ typeSymbol.flags |= TypeScript.SymbolFlags.Exported;
+ }
+ if(isAmbient) {
+ typeSymbol.flags |= TypeScript.SymbolFlags.Ambient;
+ }
+ ast.type = classType;
+ context.scopeChain.scope.enter(context.scopeChain.container, ast, typeSymbol, context.checker.errorReporter, isExported || isGlobal, true, isAmbient);
+ if(valueSymbol == null) {
+ context.scopeChain.scope.enter(context.scopeChain.container, ast, typeSymbol, context.checker.errorReporter, isExported || isGlobal, false, isAmbient);
+ }
+ } else {
+ classType = typeSymbol.type;
+ if(classType.instanceType == null) {
+ classType.instanceType = new TypeScript.Type();
+ classType.instanceType.setHasImplementation();
+ classType.instanceType.members = new TypeScript.ScopedMembers(new TypeScript.DualStringHashTable(new TypeScript.StringHashTable(), new TypeScript.StringHashTable()));
+ classType.instanceType.symbol = classType.symbol;
+ classType.members = new TypeScript.ScopedMembers(new TypeScript.DualStringHashTable(new TypeScript.StringHashTable(), new TypeScript.StringHashTable()));
+ classType.ambientMembers = new TypeScript.ScopedMembers(new TypeScript.DualStringHashTable(new TypeScript.StringHashTable(), new TypeScript.StringHashTable()));
+ }
+ instanceType = classType.instanceType;
+ ast.type = classType;
+ }
+ if(!classDecl.constructorDecl) {
+ if(typeSymbol && typeSymbol.declAST && typeSymbol.declAST.type && typeSymbol.declAST.type.call && !(typeSymbol.declAST).isOverload) {
+ context.checker.errorReporter.duplicateIdentifier(typeSymbol.declAST, typeSymbol.name);
+ }
+ createNewConstructGroupForType(classDecl.type);
+ }
+ classType.typeFlags |= TypeScript.TypeFlags.IsClass;
+ instanceType.typeFlags |= TypeScript.TypeFlags.IsClass;
+ getBases(instanceType, classDecl);
+ TypeScript.pushTypeCollectionScope(typeSymbol, instanceType.members, instanceType.ambientMembers, null, null, context, instanceType, classType, null);
+ return true;
+ }
+ TypeScript.preCollectClassTypes = preCollectClassTypes;
+ function preCollectInterfaceTypes(ast, parent, context) {
+ var scopeChain = context.scopeChain;
+ var interfaceDecl = ast;
+ var interfaceSymbol = null;
+ var interfaceType = null;
+ var isExported = TypeScript.hasFlag(interfaceDecl.varFlags, TypeScript.VarFlags.Exported);
+ var isGlobal = context.scopeChain.container == context.checker.gloMod;
+ var alreadyInScope = true;
+ alreadyInScope = false;
+ var interfaceName = (interfaceDecl.name).text;
+ interfaceSymbol = scopeChain.scope.findLocal(interfaceName, false, true);
+ if(interfaceSymbol == null) {
+ interfaceType = new TypeScript.Type();
+ interfaceSymbol = new TypeScript.TypeSymbol(interfaceName, interfaceDecl.name.minChar, interfaceName.length, context.checker.locationInfo.unitIndex, interfaceType);
+ interfaceType.symbol = interfaceSymbol;
+ interfaceType.members = new TypeScript.ScopedMembers(new TypeScript.DualStringHashTable(new TypeScript.StringHashTable(), new TypeScript.StringHashTable()));
+ interfaceType.ambientMembers = new TypeScript.ScopedMembers(new TypeScript.DualStringHashTable(new TypeScript.StringHashTable(), new TypeScript.StringHashTable()));
+ interfaceSymbol.declAST = interfaceDecl;
+ interfaceSymbol.declModule = context.scopeChain.moduleDecl;
+ } else {
+ alreadyInScope = true;
+ interfaceType = interfaceSymbol.type;
+ }
+ if(!interfaceType) {
+ interfaceType = context.checker.anyType;
+ }
+ ast.type = interfaceType;
+ getBases(interfaceType, interfaceDecl);
+ if(isExported) {
+ interfaceSymbol.flags |= TypeScript.SymbolFlags.Exported;
+ }
+ if(context.scopeChain.moduleDecl) {
+ interfaceSymbol.flags |= TypeScript.SymbolFlags.ModuleMember;
+ }
+ if(!alreadyInScope) {
+ context.scopeChain.scope.enter(context.scopeChain.container, ast, interfaceSymbol, context.checker.errorReporter, isGlobal || isExported, true, false);
+ }
+ TypeScript.pushTypeCollectionScope(interfaceSymbol, interfaceType.members, interfaceType.ambientMembers, null, null, context, interfaceType, null, null);
+ return true;
+ }
+ TypeScript.preCollectInterfaceTypes = preCollectInterfaceTypes;
+ function preCollectArgDeclTypes(ast, parent, context) {
+ var scopeChain = context.scopeChain;
+ var argDecl = ast;
+ if(TypeScript.hasFlag(argDecl.varFlags, TypeScript.VarFlags.Public | TypeScript.VarFlags.Private)) {
+ var field = new TypeScript.ValueLocation();
+ var isPrivate = TypeScript.hasFlag(argDecl.varFlags, TypeScript.VarFlags.Private);
+ var fieldSymbol = new TypeScript.FieldSymbol(argDecl.id.text, argDecl.id.minChar, context.checker.locationInfo.unitIndex, !TypeScript.hasFlag(argDecl.varFlags, TypeScript.VarFlags.Readonly), field);
+ fieldSymbol.transferVarFlags(argDecl.varFlags);
+ field.symbol = fieldSymbol;
+ fieldSymbol.declAST = ast;
+ argDecl.parameterPropertySym = fieldSymbol;
+ context.scopeChain.scope.enter(context.scopeChain.container, ast, fieldSymbol, context.checker.errorReporter, !isPrivate, false, false);
+ field.typeLink = TypeScript.getTypeLink(argDecl.typeExpr, context.checker, argDecl.init == null);
+ argDecl.sym = fieldSymbol;
+ }
+ return false;
+ }
+ TypeScript.preCollectArgDeclTypes = preCollectArgDeclTypes;
+ function preCollectVarDeclTypes(ast, parent, context) {
+ var scopeChain = context.scopeChain;
+ var varDecl = ast;
+ var isAmbient = TypeScript.hasFlag(varDecl.varFlags, TypeScript.VarFlags.Ambient);
+ var isExported = TypeScript.hasFlag(varDecl.varFlags, TypeScript.VarFlags.Exported);
+ var isGlobal = context.scopeChain.container == context.checker.gloMod;
+ var isProperty = TypeScript.hasFlag(varDecl.varFlags, TypeScript.VarFlags.Property);
+ var isStatic = TypeScript.hasFlag(varDecl.varFlags, TypeScript.VarFlags.Static);
+ var isPrivate = TypeScript.hasFlag(varDecl.varFlags, TypeScript.VarFlags.Private);
+ var isOptional = TypeScript.hasFlag(varDecl.id.flags, TypeScript.ASTFlags.OptionalName);
+ if(context.scopeChain.moduleDecl) {
+ context.scopeChain.moduleDecl.recordNonInterface();
+ }
+ if(isProperty || isExported || (context.scopeChain.container == context.checker.gloMod) || context.scopeChain.moduleDecl) {
+ if(isAmbient) {
+ var existingSym = scopeChain.scope.findLocal(varDecl.id.text, false, false);
+ if(existingSym) {
+ varDecl.sym = existingSym;
+ return false;
+ }
+ }
+ if(varDecl.id == null) {
+ context.checker.errorReporter.simpleError(varDecl, "Expected variable identifier at this location");
+ return false;
+ }
+ var field = new TypeScript.ValueLocation();
+ var fieldSymbol = new TypeScript.FieldSymbol(varDecl.id.text, varDecl.id.minChar, context.checker.locationInfo.unitIndex, (varDecl.varFlags & TypeScript.VarFlags.Readonly) == TypeScript.VarFlags.None, field);
+ fieldSymbol.transferVarFlags(varDecl.varFlags);
+ if(isOptional) {
+ fieldSymbol.flags |= TypeScript.SymbolFlags.Optional;
+ }
+ field.symbol = fieldSymbol;
+ fieldSymbol.declAST = ast;
+ if((context.scopeChain.moduleDecl) || (context.scopeChain.container == context.checker.gloMod)) {
+ fieldSymbol.flags |= TypeScript.SymbolFlags.ModuleMember;
+ fieldSymbol.declModule = context.scopeChain.moduleDecl;
+ }
+ if(TypeScript.hasFlag(varDecl.varFlags, TypeScript.VarFlags.Property) && isStatic && context.scopeChain.classType) {
+ if(!context.scopeChain.classType.members.publicMembers.add(varDecl.id.text, fieldSymbol)) {
+ context.checker.errorReporter.duplicateIdentifier(ast, fieldSymbol.name);
+ }
+ fieldSymbol.container = context.scopeChain.classType.symbol;
+ } else {
+ context.scopeChain.scope.enter(context.scopeChain.container, ast, fieldSymbol, context.checker.errorReporter, !isPrivate && (isProperty || isExported || isGlobal || isStatic), false, isAmbient);
+ }
+ if(TypeScript.hasFlag(varDecl.varFlags, TypeScript.VarFlags.Exported)) {
+ fieldSymbol.flags |= TypeScript.SymbolFlags.Exported;
+ }
+ field.typeLink = TypeScript.getTypeLink(varDecl.typeExpr, context.checker, varDecl.init == null);
+ varDecl.sym = fieldSymbol;
+ }
+ return false;
+ }
+ TypeScript.preCollectVarDeclTypes = preCollectVarDeclTypes;
+ function preCollectFuncDeclTypes(ast, parent, context) {
+ var scopeChain = context.scopeChain;
+ if(context.scopeChain.moduleDecl) {
+ context.scopeChain.moduleDecl.recordNonInterface();
+ }
+ var funcDecl = ast;
+ var fgSym = null;
+ var nameText = funcDecl.getNameText();
+ var isExported = TypeScript.hasFlag(funcDecl.fncFlags, TypeScript.FncFlags.Exported | TypeScript.FncFlags.ClassPropertyMethodExported);
+ var isStatic = TypeScript.hasFlag(funcDecl.fncFlags, TypeScript.FncFlags.Static);
+ var isPrivate = TypeScript.hasFlag(funcDecl.fncFlags, TypeScript.FncFlags.Private);
+ var isConstructor = funcDecl.isConstructMember() || funcDecl.isConstructor;
+ var containerSym = (((funcDecl.isMethod() && isStatic) || funcDecl.isAccessor()) && context.scopeChain.classType ? context.scopeChain.classType.symbol : context.scopeChain.container);
+ var containerScope = context.scopeChain.scope;
+ var isGlobal = containerSym == context.checker.gloMod;
+ var isOptional = funcDecl.name && TypeScript.hasFlag(funcDecl.name.flags, TypeScript.ASTFlags.OptionalName);
+ var go = false;
+ var foundSymbol = false;
+ if(isConstructor && TypeScript.hasFlag(funcDecl.fncFlags, TypeScript.FncFlags.ClassMethod)) {
+ containerSym = containerSym.container;
+ containerScope = scopeChain.previous.scope;
+ }
+ funcDecl.unitIndex = context.checker.locationInfo.unitIndex;
+ if(!funcDecl.isConstructor && containerSym && containerSym.declAST && containerSym.declAST.nodeType == TypeScript.NodeType.FuncDecl && (containerSym.declAST).isConstructor && !funcDecl.isMethod()) {
+ return go;
+ }
+ if(TypeScript.hasFlag(funcDecl.fncFlags, TypeScript.FncFlags.Signature)) {
+ var instType = context.scopeChain.thisType;
+ if(nameText && nameText != "__missing") {
+ if(isStatic) {
+ fgSym = containerSym.type.members.allMembers.lookup(nameText);
+ } else {
+ fgSym = containerScope.findLocal(nameText, false, false);
+ if(fgSym == null) {
+ fgSym = containerScope.findLocal(nameText, false, true);
+ }
+ }
+ if(fgSym) {
+ foundSymbol = true;
+ if(!funcDecl.isSignature() && (TypeScript.hasFlag(funcDecl.fncFlags, TypeScript.FncFlags.Ambient) != TypeScript.hasFlag(fgSym.flags, TypeScript.SymbolFlags.Ambient))) {
+ fgSym = null;
+ }
+ }
+ }
+ if(fgSym == null) {
+ if(!(funcDecl.isSpecialFn())) {
+ fgSym = context.checker.createFunctionSignature(funcDecl, containerSym, containerScope, null, !foundSymbol).declAST.type.symbol;
+ } else {
+ fgSym = context.checker.createFunctionSignature(funcDecl, containerSym, containerScope, containerSym, false).declAST.type.symbol;
+ }
+ if(fgSym.declAST == null || !funcDecl.isSpecialFn()) {
+ fgSym.declAST = ast;
+ }
+ } else {
+ if((fgSym.kind() == TypeScript.SymbolKind.Type)) {
+ fgSym = context.checker.createFunctionSignature(funcDecl, containerSym, containerScope, fgSym, false).declAST.type.symbol;
+ } else {
+ context.checker.errorReporter.simpleError(funcDecl, "Function or method '" + funcDecl.name.actualText + "' already declared as a property");
+ }
+ }
+ if(funcDecl.isSpecialFn() && !isStatic) {
+ funcDecl.type = instType ? instType : fgSym.type;
+ } else {
+ funcDecl.type = fgSym.type;
+ }
+ } else {
+ if(nameText) {
+ if(isStatic) {
+ fgSym = containerSym.type.members.allMembers.lookup(nameText);
+ } else {
+ if(funcDecl.isConstructor && context.scopeChain.previous) {
+ fgSym = context.scopeChain.previous.scope.findLocal(nameText, false, false);
+ }
+ if(fgSym == null) {
+ fgSym = containerScope.findLocal(nameText, false, false);
+ }
+ }
+ if(fgSym) {
+ foundSymbol = true;
+ if(!isConstructor && fgSym.declAST.nodeType == TypeScript.NodeType.FuncDecl && !(fgSym.declAST).isAccessor() && !(fgSym.declAST).isSignature()) {
+ fgSym = null;
+ foundSymbol = false;
+ }
+ }
+ }
+ if(fgSym && !fgSym.isAccessor() && fgSym.type && fgSym.type.construct && fgSym.type.construct.signatures != [] && (fgSym.type.construct.signatures[0].declAST == null || !TypeScript.hasFlag(fgSym.type.construct.signatures[0].declAST.fncFlags, TypeScript.FncFlags.Ambient)) && !funcDecl.isConstructor) {
+ context.checker.errorReporter.simpleError(funcDecl, "Functions may not have class overloads");
+ }
+ if(fgSym && !(fgSym.kind() == TypeScript.SymbolKind.Type) && funcDecl.isMethod() && !funcDecl.isAccessor() && !funcDecl.isConstructor) {
+ context.checker.errorReporter.simpleError(funcDecl, "Function or method '" + funcDecl.name.actualText + "' already declared as a property");
+ fgSym.type = context.checker.anyType;
+ }
+ var sig = context.checker.createFunctionSignature(funcDecl, containerSym, containerScope, fgSym, !foundSymbol);
+ if(((!fgSym || fgSym.declAST.nodeType != TypeScript.NodeType.FuncDecl) && funcDecl.isAccessor()) || (fgSym && fgSym.isAccessor())) {
+ funcDecl.accessorSymbol = context.checker.createAccessorSymbol(funcDecl, fgSym, containerSym.type, (funcDecl.isMethod() && isStatic), true, containerScope, containerSym);
+ }
+ funcDecl.type.symbol.declAST = ast;
+ if(funcDecl.isConstructor) {
+ go = true;
+ }
+ ; ;
+ }
+ if(isExported) {
+ if(funcDecl.type.call) {
+ funcDecl.type.symbol.flags |= TypeScript.SymbolFlags.Exported;
+ }
+ if(fgSym && !fgSym.isAccessor() && fgSym.kind() == TypeScript.SymbolKind.Type && fgSym.type.call) {
+ fgSym.flags |= TypeScript.SymbolFlags.Exported;
+ }
+ }
+ if(context.scopeChain.moduleDecl && !funcDecl.isSpecialFn()) {
+ funcDecl.type.symbol.flags |= TypeScript.SymbolFlags.ModuleMember;
+ funcDecl.type.symbol.declModule = context.scopeChain.moduleDecl;
+ }
+ if(fgSym && isOptional) {
+ fgSym.flags |= TypeScript.SymbolFlags.Optional;
+ }
+ return go;
+ }
+ TypeScript.preCollectFuncDeclTypes = preCollectFuncDeclTypes;
+ function preCollectTypes(ast, parent, walker) {
+ var context = walker.state;
+ var go = false;
+ var scopeChain = context.scopeChain;
+ if(ast.nodeType == TypeScript.NodeType.Script) {
+ var script = ast;
+ context.script = script;
+ go = true;
+ } else {
+ if(ast.nodeType == TypeScript.NodeType.List) {
+ go = true;
+ } else {
+ if(ast.nodeType == TypeScript.NodeType.ImportDeclaration) {
+ go = preCollectImportTypes(ast, parent, context);
+ } else {
+ if(ast.nodeType == TypeScript.NodeType.With) {
+ go = false;
+ } else {
+ if(ast.nodeType == TypeScript.NodeType.ModuleDeclaration) {
+ go = preCollectModuleTypes(ast, parent, context);
+ } else {
+ if(ast.nodeType == TypeScript.NodeType.ClassDeclaration) {
+ go = preCollectClassTypes(ast, parent, context);
+ } else {
+ if(ast.nodeType == TypeScript.NodeType.Block) {
+ go = true;
+ } else {
+ if(ast.nodeType == TypeScript.NodeType.InterfaceDeclaration) {
+ go = preCollectInterfaceTypes(ast, parent, context);
+ } else {
+ if(ast.nodeType == TypeScript.NodeType.ArgDecl) {
+ go = preCollectArgDeclTypes(ast, parent, context);
+ } else {
+ if(ast.nodeType == TypeScript.NodeType.VarDecl) {
+ go = preCollectVarDeclTypes(ast, parent, context);
+ } else {
+ if(ast.nodeType == TypeScript.NodeType.FuncDecl) {
+ go = preCollectFuncDeclTypes(ast, parent, context);
+ } else {
+ if(ast.isStatementOrExpression() && context.scopeChain.moduleDecl) {
+ context.scopeChain.moduleDecl.recordNonInterface();
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ walker.options.goChildren = go;
+ return ast;
+ }
+ TypeScript.preCollectTypes = preCollectTypes;
+ function postCollectTypes(ast, parent, walker) {
+ var context = walker.state;
+ if(ast.nodeType == TypeScript.NodeType.ModuleDeclaration) {
+ TypeScript.popTypeCollectionScope(context);
+ } else {
+ if(ast.nodeType == TypeScript.NodeType.ClassDeclaration) {
+ TypeScript.popTypeCollectionScope(context);
+ } else {
+ if(ast.nodeType == TypeScript.NodeType.InterfaceDeclaration) {
+ TypeScript.popTypeCollectionScope(context);
+ }
+ }
+ }
+ return ast;
+ }
+ TypeScript.postCollectTypes = postCollectTypes;
+})(TypeScript || (TypeScript = {}));
+var TypeScript;
+(function (TypeScript) {
+ var ScopeChain = (function () {
+ function ScopeChain(container, previous, scope) {
+ this.container = container;
+ this.previous = previous;
+ this.scope = scope;
+ }
+ return ScopeChain;
+ })();
+ TypeScript.ScopeChain = ScopeChain;
+ var BBUseDefInfo = (function () {
+ function BBUseDefInfo(bb) {
+ this.bb = bb;
+ this.defsBySymbol = new Array();
+ this.useIndexBySymbol = new Array();
+ }
+ BBUseDefInfo.prototype.updateTop = function () {
+ var temp = new BitVector(this.top.bitCount);
+ for(var i = 0, succLen = this.bb.successors.length; i < succLen; i++) {
+ var succ = this.bb.successors[i];
+ if(succ.useDef) {
+ temp.union(succ.useDef.top);
+ }
+ }
+ temp.difference(this.kill);
+ temp.union(this.gen);
+ var changed = temp.notEq(this.top);
+ this.top = temp;
+ return changed;
+ };
+ BBUseDefInfo.prototype.initialize = function (useDefContext) {
+ var _this = this;
+ var defSym = function (sym, context) {
+ if(context.isLocalSym(sym)) {
+ var index = context.getSymbolIndex(sym);
+ _this.useIndexBySymbol[index] = new Array();
+ _this.defsBySymbol[index] = true;
+ }
+ };
+ var useSym = function (sym, context, ast) {
+ if(context.isLocalSym(sym)) {
+ var symIndex = context.getSymbolIndex(sym);
+ if(_this.useIndexBySymbol[symIndex] == undefined) {
+ _this.useIndexBySymbol[symIndex] = new Array();
+ }
+ var symUses = _this.useIndexBySymbol[symIndex];
+ var astIndex = context.getUseIndex(ast);
+ context.addUse(symIndex, astIndex);
+ symUses.push(astIndex);
+ }
+ };
+ function initUseDefPre(cur, parent, walker) {
+ var context = walker.state;
+ if(cur == null) {
+ cur = null;
+ }
+ if(cur.nodeType == TypeScript.NodeType.VarDecl) {
+ var varDecl = cur;
+ if(varDecl.init || TypeScript.hasFlag(varDecl.varFlags, TypeScript.VarFlags.AutoInit)) {
+ defSym(varDecl.sym, context);
+ }
+ } else {
+ if(cur.nodeType == TypeScript.NodeType.Name) {
+ if(parent) {
+ if(parent.nodeType == TypeScript.NodeType.Asg) {
+ var asg = parent;
+ if(asg.operand1 == cur) {
+ return cur;
+ }
+ } else {
+ if(parent.nodeType == TypeScript.NodeType.VarDecl) {
+ var parentDecl = parent;
+ if(parentDecl.id == cur) {
+ return cur;
+ }
+ }
+ }
+ }
+ var id = cur;
+ useSym(id.sym, context, cur);
+ } else {
+ if((cur.nodeType >= TypeScript.NodeType.Asg) && (cur.nodeType <= TypeScript.NodeType.LastAsg)) {
+ var asg = cur;
+ if(asg.operand1 && (asg.operand1.nodeType == TypeScript.NodeType.Name)) {
+ var id = asg.operand1;
+ defSym(id.sym, context);
+ }
+ } else {
+ if(cur.nodeType == TypeScript.NodeType.FuncDecl) {
+ walker.options.goChildren = false;
+ }
+ }
+ }
+ }
+ return cur;
+ }
+ var options = new TypeScript.AstWalkOptions();
+ options.reverseSiblings = true;
+ TypeScript.getAstWalkerFactory().walk(this.bb.content, initUseDefPre, null, options, useDefContext);
+ };
+ BBUseDefInfo.prototype.initializeGen = function (useDefContext) {
+ var symbolLen = this.useIndexBySymbol.length;
+ var bitCount = useDefContext.uses.length;
+ this.gen = new BitVector(bitCount);
+ for(var s = 0; s < symbolLen; s++) {
+ var symUses = this.useIndexBySymbol[s];
+ if((symUses != undefined) && (symUses.length > 0)) {
+ for(var u = 0, uLen = symUses.length; u < uLen; u++) {
+ this.gen.set(symUses[u], true);
+ }
+ }
+ }
+ this.top = this.gen;
+ };
+ BBUseDefInfo.prototype.initializeKill = function (useDefContext) {
+ this.kill = new BitVector(this.gen.bitCount);
+ for(var s = 0, symbolLen = this.defsBySymbol.length; s < symbolLen; s++) {
+ if(this.defsBySymbol[s]) {
+ var globalSymUses = useDefContext.useIndexBySymbol[s];
+ if(globalSymUses) {
+ for(var u = 0, useLen = globalSymUses.length; u < useLen; u++) {
+ this.kill.set(globalSymUses[u], true);
+ }
+ }
+ }
+ }
+ };
+ return BBUseDefInfo;
+ })();
+ TypeScript.BBUseDefInfo = BBUseDefInfo;
+ var UseDefContext = (function () {
+ function UseDefContext() {
+ this.useIndexBySymbol = new Array();
+ this.uses = new Array();
+ this.symbols = new Array();
+ this.symbolMap = new TypeScript.StringHashTable();
+ this.symbolCount = 0;
+ }
+ UseDefContext.prototype.getSymbolIndex = function (sym) {
+ var name = sym.name;
+ var index = (this.symbolMap.lookup(name));
+ if(index == null) {
+ index = this.symbolCount++;
+ this.symbols[index] = sym;
+ this.symbolMap.add(name, index);
+ }
+ return index;
+ };
+ UseDefContext.prototype.addUse = function (symIndex, astIndex) {
+ var useBySym = this.useIndexBySymbol[symIndex];
+ if(useBySym == undefined) {
+ useBySym = new Array();
+ this.useIndexBySymbol[symIndex] = useBySym;
+ }
+ useBySym[useBySym.length] = astIndex;
+ };
+ UseDefContext.prototype.getUseIndex = function (ast) {
+ this.uses[this.uses.length] = ast;
+ return this.uses.length - 1;
+ };
+ UseDefContext.prototype.isLocalSym = function (sym) {
+ return (sym && (sym.container == this.func) && (sym.kind() == TypeScript.SymbolKind.Variable));
+ };
+ UseDefContext.prototype.killSymbol = function (sym, bbUses) {
+ var index = this.symbolMap.lookup(sym.name);
+ var usesOfSym = this.useIndexBySymbol[index];
+ for(var k = 0, len = usesOfSym.length; k < len; k++) {
+ bbUses.set(usesOfSym[k], true);
+ }
+ };
+ return UseDefContext;
+ })();
+ TypeScript.UseDefContext = UseDefContext;
+ var BitVector = (function () {
+ function BitVector(bitCount) {
+ this.bitCount = bitCount;
+ this.firstBits = 0;
+ this.restOfBits = null;
+ if(this.bitCount > BitVector.packBits) {
+ this.restOfBits = new Array();
+ var len = Math.floor(this.bitCount / BitVector.packBits);
+ for(var i = 0; i < len; i++) {
+ this.restOfBits[i] = 0;
+ }
+ }
+ }
+ BitVector.packBits = 30;
+ BitVector.prototype.set = function (bitIndex, value) {
+ if(bitIndex < BitVector.packBits) {
+ if(value) {
+ this.firstBits |= (1 << bitIndex);
+ } else {
+ this.firstBits &= (~(1 << bitIndex));
+ }
+ } else {
+ var offset = Math.floor(bitIndex / BitVector.packBits) - 1;
+ var localIndex = bitIndex % BitVector.packBits;
+ if(value) {
+ this.restOfBits[offset] |= (1 << localIndex);
+ } else {
+ this.restOfBits[offset] &= (~(1 << localIndex));
+ }
+ }
+ };
+ BitVector.prototype.map = function (fn) {
+ var k;
+ for(k = 0; k < BitVector.packBits; k++) {
+ if(k == this.bitCount) {
+ return;
+ }
+ if(((1 << k) & this.firstBits) != 0) {
+ fn(k);
+ }
+ }
+ if(this.restOfBits) {
+ var len;
+ var cumu = BitVector.packBits;
+ for(k = 0 , len = this.restOfBits.length; k < len; k++) {
+ var myBits = this.restOfBits[k];
+ for(var j = 0; j < BitVector.packBits; j++) {
+ if(((1 << j) & myBits) != 0) {
+ fn(cumu);
+ }
+ cumu++;
+ if(cumu == this.bitCount) {
+ return;
+ }
+ }
+ }
+ }
+ };
+ BitVector.prototype.union = function (b) {
+ this.firstBits |= b.firstBits;
+ if(this.restOfBits) {
+ for(var k = 0, len = this.restOfBits.length; k < len; k++) {
+ var myBits = this.restOfBits[k];
+ var bBits = b.restOfBits[k];
+ this.restOfBits[k] = myBits | bBits;
+ }
+ }
+ };
+ BitVector.prototype.intersection = function (b) {
+ this.firstBits &= b.firstBits;
+ if(this.restOfBits) {
+ for(var k = 0, len = this.restOfBits.length; k < len; k++) {
+ var myBits = this.restOfBits[k];
+ var bBits = b.restOfBits[k];
+ this.restOfBits[k] = myBits & bBits;
+ }
+ }
+ };
+ BitVector.prototype.notEq = function (b) {
+ if(this.firstBits != b.firstBits) {
+ return true;
+ }
+ if(this.restOfBits) {
+ for(var k = 0, len = this.restOfBits.length; k < len; k++) {
+ var myBits = this.restOfBits[k];
+ var bBits = b.restOfBits[k];
+ if(myBits != bBits) {
+ return true;
+ }
+ }
+ }
+ return false;
+ };
+ BitVector.prototype.difference = function (b) {
+ var oldFirstBits = this.firstBits;
+ this.firstBits &= (~b.firstBits);
+ if(this.restOfBits) {
+ for(var k = 0, len = this.restOfBits.length; k < len; k++) {
+ var myBits = this.restOfBits[k];
+ var bBits = b.restOfBits[k];
+ this.restOfBits[k] &= (~bBits);
+ }
+ }
+ };
+ return BitVector;
+ })();
+ TypeScript.BitVector = BitVector;
+ var BasicBlock = (function () {
+ function BasicBlock() {
+ this.predecessors = new Array();
+ this.index = -1;
+ this.markValue = 0;
+ this.successors = new Array();
+ this.useDef = null;
+ this.content = new TypeScript.ASTList();
+ }
+ BasicBlock.prototype.marked = function (markBase) {
+ return this.markValue > markBase;
+ };
+ BasicBlock.prototype.mark = function () {
+ this.markValue++;
+ };
+ BasicBlock.prototype.addSuccessor = function (successor) {
+ this.successors[this.successors.length] = successor;
+ successor.predecessors[successor.predecessors.length] = this;
+ };
+ return BasicBlock;
+ })();
+ TypeScript.BasicBlock = BasicBlock;
+ var ControlFlowContext = (function () {
+ function ControlFlowContext(current, exit) {
+ this.current = current;
+ this.exit = exit;
+ this.entry = null;
+ this.unreachable = null;
+ this.noContinuation = false;
+ this.statementStack = new Array();
+ this.currentSwitch = new Array();
+ this.markBase = 0;
+ this.linearBBs = new Array();
+ this.entry = this.current;
+ }
+ ControlFlowContext.prototype.walk = function (ast, parent) {
+ return this.walker.walk(ast, parent);
+ };
+ ControlFlowContext.prototype.pushSwitch = function (bb) {
+ this.currentSwitch.push(bb);
+ };
+ ControlFlowContext.prototype.popSwitch = function () {
+ return this.currentSwitch.pop();
+ };
+ ControlFlowContext.prototype.reportUnreachable = function (er) {
+ if(this.unreachable && (this.unreachable.length > 0)) {
+ var len = this.unreachable.length;
+ for(var i = 0; i < len; i++) {
+ var unreachableAST = this.unreachable[i];
+ if(unreachableAST.nodeType != TypeScript.NodeType.EndCode) {
+ er.simpleError(unreachableAST, "unreachable code");
+ }
+ }
+ }
+ };
+ ControlFlowContext.prototype.printAST = function (ast, outfile) {
+ var printContext = new TypeScript.PrintContext(outfile, null);
+ printContext.increaseIndent();
+ TypeScript.getAstWalkerFactory().walk(ast, TypeScript.prePrintAST, TypeScript.postPrintAST, null, printContext);
+ printContext.decreaseIndent();
+ };
+ ControlFlowContext.prototype.printBlockContent = function (bb, outfile) {
+ var content = bb.content;
+ for(var i = 0, len = content.members.length; i < len; i++) {
+ var ast = content.members[i];
+ this.printAST(ast, outfile);
+ }
+ };
+ ControlFlowContext.prototype.bfs = function (nodeFunc, edgeFunc, preEdges, postEdges) {
+ var markValue = this.markBase++;
+ var q = new Array();
+ q[q.length] = this.entry;
+ while(q.length > 0) {
+ var bb = q.pop();
+ if(!(bb.marked(markValue))) {
+ bb.mark();
+ if(nodeFunc) {
+ nodeFunc(bb);
+ }
+ var succLen = bb.successors.length;
+ if(succLen > 0) {
+ if(preEdges) {
+ preEdges();
+ }
+ for(var j = succLen - 1; j >= 0; j--) {
+ var successor = bb.successors[j];
+ if(!(successor.marked(this.markBase))) {
+ if(edgeFunc) {
+ edgeFunc(bb, successor);
+ }
+ q[q.length] = successor;
+ }
+ }
+ if(postEdges) {
+ postEdges();
+ }
+ }
+ }
+ }
+ };
+ ControlFlowContext.prototype.useDef = function (er, funcSym) {
+ var _this = this;
+ var useDefContext = new UseDefContext();
+ useDefContext.func = funcSym;
+ var useDefInit = function (bb) {
+ bb.useDef = new BBUseDefInfo(bb);
+ bb.useDef.initialize(useDefContext);
+ _this.linearBBs[_this.linearBBs.length] = bb;
+ };
+ this.bfs(useDefInit, null, null, null);
+ var i, bbLen;
+ for(i = 0 , bbLen = this.linearBBs.length; i < bbLen; i++) {
+ this.linearBBs[i].useDef.initializeGen(useDefContext);
+ this.linearBBs[i].useDef.initializeKill(useDefContext);
+ }
+ var changed = true;
+ while(changed) {
+ changed = false;
+ for(i = 0; i < bbLen; i++) {
+ changed = this.linearBBs[i].useDef.updateTop() || changed;
+ }
+ }
+ var top = this.entry.useDef.top;
+ top.map(function (index) {
+ var ast = useDefContext.uses[index];
+ er.simpleError(ast, "use of variable '" + ast.actualText + "' that is not definitely assigned");
+ });
+ };
+ ControlFlowContext.prototype.print = function (outfile) {
+ var _this = this;
+ var index = 0;
+ var node = function (bb) {
+ if(bb.index < 0) {
+ bb.index = index++;
+ }
+ if(bb == _this.exit) {
+ outfile.WriteLine("Exit block with index " + bb.index);
+ } else {
+ outfile.WriteLine("Basic block with index " + bb.index);
+ _this.printBlockContent(bb, outfile);
+ }
+ };
+ function preEdges() {
+ outfile.Write(" Branches to ");
+ }
+ function postEdges() {
+ outfile.WriteLine("");
+ }
+ function edge(node1, node2) {
+ if(node2.index < 0) {
+ node2.index = index++;
+ }
+ outfile.Write(node2.index + " ");
+ }
+ this.bfs(node, edge, preEdges, postEdges);
+ if(this.unreachable != null) {
+ for(var i = 0, len = this.unreachable.length; i < len; i++) {
+ outfile.WriteLine("Unreachable basic block ...");
+ this.printAST(this.unreachable[i], outfile);
+ }
+ }
+ };
+ ControlFlowContext.prototype.pushStatement = function (stmt, continueBB, breakBB) {
+ this.statementStack.push({
+ stmt: stmt,
+ continueBB: continueBB,
+ breakBB: breakBB
+ });
+ };
+ ControlFlowContext.prototype.popStatement = function () {
+ return this.statementStack.pop();
+ };
+ ControlFlowContext.prototype.returnStmt = function () {
+ this.current.addSuccessor(this.exit);
+ this.setUnreachable();
+ };
+ ControlFlowContext.prototype.setUnreachable = function () {
+ this.current = null;
+ this.noContinuation = true;
+ };
+ ControlFlowContext.prototype.addUnreachable = function (ast) {
+ if(this.unreachable === null) {
+ this.unreachable = new Array();
+ }
+ this.unreachable[this.unreachable.length] = ast;
+ };
+ ControlFlowContext.prototype.unconditionalBranch = function (target, isContinue) {
+ var targetBB = null;
+ for(var i = 0, len = this.statementStack.length; i < len; i++) {
+ var targetInfo = this.statementStack[i];
+ if(targetInfo.stmt == target) {
+ if(isContinue) {
+ targetBB = targetInfo.continueBB;
+ } else {
+ targetBB = targetInfo.breakBB;
+ }
+ break;
+ }
+ }
+ if(targetBB) {
+ this.current.addSuccessor(targetBB);
+ }
+ this.setUnreachable();
+ };
+ ControlFlowContext.prototype.addContent = function (ast) {
+ if(this.current) {
+ this.current.content.append(ast);
+ }
+ };
+ return ControlFlowContext;
+ })();
+ TypeScript.ControlFlowContext = ControlFlowContext;
+ var ResolutionDataCache = (function () {
+ function ResolutionDataCache() {
+ this.cacheSize = 16;
+ this.rdCache = [];
+ this.nextUp = 0;
+ for(var i = 0; i < this.cacheSize; i++) {
+ this.rdCache[i] = {
+ actuals: new Array(),
+ exactCandidates: new Array(),
+ conversionCandidates: new Array(),
+ id: i
+ };
+ }
+ }
+ ResolutionDataCache.prototype.getResolutionData = function () {
+ var rd = null;
+ if(this.nextUp < this.cacheSize) {
+ rd = this.rdCache[this.nextUp];
+ }
+ if(rd == null) {
+ this.cacheSize++;
+ rd = {
+ actuals: new Array(),
+ exactCandidates: new Array(),
+ conversionCandidates: new Array(),
+ id: this.cacheSize
+ };
+ this.rdCache[this.cacheSize] = rd;
+ }
+ this.nextUp++;
+ return rd;
+ };
+ ResolutionDataCache.prototype.returnResolutionData = function (rd) {
+ rd.actuals.length = 0;
+ rd.exactCandidates.length = 0;
+ rd.conversionCandidates.length = 0;
+ this.nextUp = rd.id;
+ };
+ return ResolutionDataCache;
+ })();
+ TypeScript.ResolutionDataCache = ResolutionDataCache;
+ var TypeFlow = (function () {
+ function TypeFlow(logger, initScope, parser, checker) {
+ this.logger = logger;
+ this.initScope = initScope;
+ this.parser = parser;
+ this.checker = checker;
+ this.thisFnc = null;
+ this.thisClassNode = null;
+ this.enclosingFncIsMethod = false;
+ this.arrayInterfaceType = null;
+ this.stringInterfaceType = null;
+ this.objectInterfaceType = null;
+ this.functionInterfaceType = null;
+ this.numberInterfaceType = null;
+ this.booleanInterfaceType = null;
+ this.iargumentsInterfaceType = null;
+ this.currentScript = null;
+ this.inImportTypeCheck = false;
+ this.inTypeRefTypeCheck = false;
+ this.inArrayElementTypeCheck = false;
+ this.resolutionDataCache = new ResolutionDataCache();
+ this.nestingLevel = 0;
+ this.inSuperCall = false;
+ this.checker.typeFlow = this;
+ this.scope = this.initScope;
+ this.globalScope = this.initScope;
+ this.doubleType = this.checker.numberType;
+ this.booleanType = this.checker.booleanType;
+ this.stringType = this.checker.stringType;
+ this.anyType = this.checker.anyType;
+ this.regexType = this.anyType;
+ this.nullType = this.checker.nullType;
+ this.voidType = this.checker.voidType;
+ this.arrayAnyType = this.checker.makeArrayType(this.anyType);
+ }
+ TypeFlow.prototype.initLibs = function () {
+ var arraySym = this.globalScope.find("Array", false, true);
+ if(arraySym && (arraySym.kind() == TypeScript.SymbolKind.Type)) {
+ this.arrayInterfaceType = (arraySym).type;
+ }
+ var stringSym = this.globalScope.find("String", false, true);
+ if(stringSym && (stringSym.kind() == TypeScript.SymbolKind.Type)) {
+ this.stringInterfaceType = (stringSym).type;
+ }
+ var objectSym = this.globalScope.find("Object", false, true);
+ if(objectSym && (objectSym.kind() == TypeScript.SymbolKind.Type)) {
+ this.objectInterfaceType = (objectSym).type;
+ }
+ var fnSym = this.globalScope.find("Function", false, true);
+ if(fnSym && (fnSym.kind() == TypeScript.SymbolKind.Type)) {
+ this.functionInterfaceType = (fnSym).type;
+ }
+ var numberSym = this.globalScope.find("Number", false, true);
+ if(numberSym && (numberSym.kind() == TypeScript.SymbolKind.Type)) {
+ this.numberInterfaceType = (numberSym).type;
+ }
+ var booleanSym = this.globalScope.find("Boolean", false, true);
+ if(booleanSym && (booleanSym.kind() == TypeScript.SymbolKind.Type)) {
+ this.booleanInterfaceType = (booleanSym).type;
+ }
+ var regexSym = this.globalScope.find("RegExp", false, true);
+ if(regexSym && (regexSym.kind() == TypeScript.SymbolKind.Type)) {
+ this.regexType = (regexSym).type;
+ }
+ };
+ TypeFlow.prototype.cast = function (ast, type) {
+ return this.castWithCoercion(ast, type, true, false);
+ };
+ TypeFlow.prototype.castWithCoercion = function (ast, type, applyCoercion, typeAssertion) {
+ var comparisonInfo = new TypeScript.TypeComparisonInfo();
+ if(this.checker.sourceIsAssignableToTarget(ast.type, type, comparisonInfo) || (typeAssertion && this.checker.sourceIsAssignableToTarget(type, ast.type, comparisonInfo))) {
+ if(applyCoercion) {
+ if(type == null) {
+ ast.type = this.anyType;
+ } else {
+ if(type.isClass()) {
+ ast.type = type.instanceType;
+ } else {
+ ast.type = type;
+ }
+ }
+ }
+ return ast;
+ } else {
+ this.checker.errorReporter.incompatibleTypes(ast, ast.type, type, null, this.scope, comparisonInfo);
+ return ast;
+ }
+ };
+ TypeFlow.prototype.inScopeTypeCheck = function (ast, enclosingScope) {
+ var prevScope = this.scope;
+ this.scope = enclosingScope;
+ var svThisFnc = this.thisFnc;
+ var svThisType = this.thisType;
+ var svThisClassNode = this.thisClassNode;
+ var svCurrentModDecl = this.checker.currentModDecl;
+ var prevMethodStatus = this.enclosingFncIsMethod;
+ var container = this.scope.container;
+ var fnc = null;
+ while(container) {
+ if(container.kind() == TypeScript.SymbolKind.Type) {
+ var typeSym = container;
+ var type = typeSym.type;
+ if(type.call) {
+ if(fnc == null) {
+ this.enclosingFncIsMethod = typeSym.isMethod;
+ fnc = container.declAST;
+ }
+ }
+ if(type.isClass()) {
+ this.thisType = type.instanceType;
+ if(typeSym.declAST && (typeSym.declAST.nodeType == TypeScript.NodeType.ClassDeclaration)) {
+ this.thisClassNode = typeSym.declAST;
+ }
+ break;
+ }
+ if(type.isModuleType()) {
+ this.checker.currentModDecl = typeSym.declAST;
+ break;
+ }
+ }
+ container = container.container;
+ }
+ this.thisFnc = fnc;
+ var updated = this.typeCheck(ast);
+ this.thisFnc = svThisFnc;
+ this.thisType = svThisType;
+ this.thisClassNode = svThisClassNode;
+ this.checker.currentModDecl = svCurrentModDecl;
+ this.enclosingFncIsMethod = prevMethodStatus;
+ this.scope = prevScope;
+ return updated;
+ };
+ TypeFlow.prototype.typeCheck = function (ast) {
+ if(ast) {
+ return ast.typeCheck(this);
+ } else {
+ return null;
+ }
+ };
+ TypeFlow.prototype.inScopeTypeCheckDecl = function (ast) {
+ if(ast.nodeType == TypeScript.NodeType.VarDecl || ast.nodeType == TypeScript.NodeType.ArgDecl) {
+ this.inScopeTypeCheckBoundDecl(ast);
+ } else {
+ if(ast.nodeType == TypeScript.NodeType.FuncDecl) {
+ var funcDecl = ast;
+ if(funcDecl.isAccessor()) {
+ this.typeCheckFunction(funcDecl);
+ }
+ }
+ }
+ };
+ TypeFlow.prototype.inScopeTypeCheckBoundDecl = function (varDecl) {
+ var sym = varDecl.sym;
+ var svThisFnc = this.thisFnc;
+ var svThisType = this.thisType;
+ var prevMethodStatus = this.enclosingFncIsMethod;
+ var prevLocationInfo = this.checker.locationInfo;
+ if(sym && sym.container) {
+ var instanceScope = TypeScript.hasFlag(varDecl.varFlags, TypeScript.VarFlags.ClassConstructorProperty) ? sym.container.getType().constructorScope : sym.container.instanceScope();
+ if(TypeScript.hasFlag(varDecl.varFlags, TypeScript.VarFlags.Property) && sym.container.declAST.nodeType == TypeScript.NodeType.FuncDecl) {
+ this.thisFnc = sym.container.declAST;
+ }
+ if(instanceScope) {
+ var prevScope = this.scope;
+ this.scope = instanceScope;
+ var container = sym.container;
+ if(this.checker.units && (sym.unitIndex >= 0) && (sym.unitIndex < this.checker.units.length)) {
+ this.checker.locationInfo = this.checker.units[sym.unitIndex];
+ } else {
+ this.checker.locationInfo = TypeScript.unknownLocationInfo;
+ }
+ while(container) {
+ if(container.kind() == TypeScript.SymbolKind.Type) {
+ var typeSym = container;
+ var type = typeSym.type;
+ if(type.call) {
+ this.enclosingFncIsMethod = typeSym.isMethod;
+ }
+ if(type.isClass()) {
+ this.thisType = type.instanceType;
+ break;
+ }
+ }
+ container = container.container;
+ }
+ this.typeCheckBoundDecl(varDecl);
+ this.scope = prevScope;
+ }
+ }
+ this.thisFnc = svThisFnc;
+ this.thisType = svThisType;
+ this.checker.locationInfo = prevLocationInfo;
+ this.enclosingFncIsMethod = prevMethodStatus;
+ };
+ TypeFlow.prototype.resolveBoundDecl = function (varDecl) {
+ if(varDecl.typeExpr) {
+ if(varDecl.typeExpr.type == null || (varDecl.typeExpr.type && varDecl.typeExpr.type == this.anyType && this.scope) || varDecl.typeExpr.type.symbol == null || !this.checker.typeStatusIsFinished(varDecl.typeExpr.type.symbol.typeCheckStatus)) {
+ this.typeCheck(varDecl.typeExpr);
+ }
+ varDecl.type = varDecl.typeExpr.type;
+ if(varDecl.sym) {
+ varDecl.sym.setType(varDecl.type);
+ }
+ } else {
+ if(varDecl.init == null) {
+ if(this.checker.styleSettings.implicitAny) {
+ this.checker.errorReporter.styleError(varDecl, "type implicitly set to 'any'");
+ }
+ varDecl.type = this.anyType;
+ if(varDecl.sym) {
+ if(varDecl.sym.isType()) {
+ var tsym = varDecl.sym;
+ if(tsym.isMethod) {
+ this.checker.errorReporter.simpleError(varDecl, "Cannot bind method group to variable. (Did you mean to use 'declare function' instead of 'declare var'?)");
+ return;
+ } else {
+ this.checker.errorReporter.simpleError(varDecl, "Cannot bind type to variable");
+ return;
+ }
+ }
+ varDecl.sym.setType(varDecl.type);
+ }
+ }
+ }
+ };
+ TypeFlow.prototype.typeCheckBoundDecl = function (varDecl) {
+ var _this = this;
+ var infSym = varDecl.sym;
+ if(infSym == null) {
+ if(varDecl.init) {
+ varDecl.init = this.typeCheck(varDecl.init);
+ varDecl.type = this.checker.widenType(varDecl.init.type);
+ } else {
+ if(this.checker.styleSettings.implicitAny) {
+ this.checker.errorReporter.styleError(varDecl, "type implicitly set to 'any'");
+ }
+ varDecl.type = this.anyType;
+ }
+ } else {
+ if(infSym.typeCheckStatus == TypeScript.TypeCheckStatus.Started) {
+ if(this.checker.styleSettings.implicitAny) {
+ this.checker.errorReporter.styleError(varDecl, "type implicitly set to 'any'");
+ }
+ varDecl.type = this.anyType;
+ infSym.setType(this.anyType);
+ } else {
+ if(infSym.typeCheckStatus == TypeScript.TypeCheckStatus.NotStarted) {
+ infSym.typeCheckStatus = TypeScript.TypeCheckStatus.Started;
+ this.checker.addStartedPTO(infSym);
+ var resolved = false;
+ if(varDecl.type == null) {
+ if(varDecl.typeExpr) {
+ this.resolveBoundDecl(varDecl);
+ resolved = true;
+ varDecl.type = varDecl.typeExpr.type;
+ infSym.typeCheckStatus = this.checker.getTypeCheckFinishedStatus();
+ }
+ }
+ if(varDecl.init) {
+ var isLocalStatic = TypeScript.hasFlag(varDecl.varFlags, TypeScript.VarFlags.LocalStatic);
+ var prevScope = this.scope;
+ var applyTargetType = !varDecl.init.isParenthesized;
+ if(isLocalStatic) {
+ this.scope = varDecl.sym.container.getType().memberScope;
+ }
+ if(TypeScript.hasFlag(varDecl.varFlags, TypeScript.VarFlags.Property) && this.thisClassNode) {
+ TypeScript.getAstWalkerFactory().walk(varDecl.init, function (ast, parent, walker) {
+ if(ast && ast.nodeType == TypeScript.NodeType.FuncDecl) {
+ if(TypeScript.hasFlag((ast).fncFlags, TypeScript.FncFlags.IsFatArrowFunction)) {
+ (ast).fncFlags |= TypeScript.FncFlags.IsPropertyBound;
+ }
+ walker.options.goChildren = false;
+ }
+ return ast;
+ });
+ }
+ this.checker.typeCheckWithContextualType(varDecl.type, this.checker.inProvisionalTypecheckMode(), applyTargetType, varDecl.init);
+ this.scope = prevScope;
+ if(varDecl.type) {
+ var preserveScope = false;
+ var preservedContainedScope = null;
+ if(varDecl.init.type) {
+ preservedContainedScope = varDecl.init.type.containedScope;
+ preserveScope = true;
+ if(varDecl.init.type == this.voidType) {
+ this.checker.errorReporter.simpleError(varDecl, "Cannot assign type 'void' to variable '" + varDecl.id.actualText + "'");
+ }
+ }
+ varDecl.init = this.castWithCoercion(varDecl.init, varDecl.type, applyTargetType && !this.checker.inProvisionalTypecheckMode(), false);
+ if(preserveScope && varDecl.init.type.containedScope == null) {
+ varDecl.init.type.containedScope = preservedContainedScope;
+ }
+ } else {
+ varDecl.type = this.checker.widenType(varDecl.init.type);
+ if(varDecl.type == this.voidType) {
+ this.checker.errorReporter.simpleError(varDecl, "Cannot assign type 'void' to variable '" + varDecl.id.actualText + "'");
+ varDecl.type = this.anyType;
+ }
+ }
+ infSym.setType(varDecl.type);
+ } else {
+ if(!resolved) {
+ this.resolveBoundDecl(varDecl);
+ }
+ }
+ infSym.typeCheckStatus = this.checker.getTypeCheckFinishedStatus();
+ } else {
+ if(this.checker.typeStatusIsFinished(infSym.typeCheckStatus) && (infSym.declAST != varDecl)) {
+ if(varDecl.init) {
+ varDecl.init = this.typeCheck(varDecl.init);
+ varDecl.type = infSym.getType();
+ varDecl.init = this.cast(varDecl.init, varDecl.type);
+ }
+ }
+ }
+ }
+ }
+ if(varDecl.id && varDecl.sym) {
+ varDecl.id.sym = varDecl.sym;
+ }
+ if(varDecl.sym && varDecl.sym.container) {
+ this.checkTypePrivacy(varDecl.sym.getType(), varDecl.sym, function (typeName, isModuleName) {
+ return _this.varPrivacyErrorReporter(varDecl, typeName, isModuleName);
+ });
+ }
+ return varDecl;
+ };
+ TypeFlow.prototype.varPrivacyErrorReporter = function (varDecl, typeName, isModuleName) {
+ var typestring = "";
+ if(isModuleName) {
+ var quotestring = "";
+ if(!TypeScript.isQuoted(typeName)) {
+ quotestring = "'";
+ }
+ typestring = " is using inaccessible module " + quotestring + typeName + quotestring;
+ } else {
+ typestring = " has or is using private type '" + typeName + "'";
+ }
+ if(TypeScript.hasFlag(varDecl.varFlags, TypeScript.VarFlags.Public)) {
+ if(varDecl.sym.container.declAST.nodeType == TypeScript.NodeType.InterfaceDeclaration) {
+ this.checker.errorReporter.simpleError(varDecl, "property '" + varDecl.sym.name + "' of exported interface" + typestring);
+ } else {
+ this.checker.errorReporter.simpleError(varDecl, "public member '" + varDecl.sym.name + "' of exported class" + typestring);
+ }
+ } else {
+ this.checker.errorReporter.simpleError(varDecl, "exported variable '" + varDecl.sym.name + "'" + typestring);
+ }
+ };
+ TypeFlow.prototype.typeCheckSuper = function (ast) {
+ if(this.thisType && (this.enclosingFncIsMethod && !this.thisFnc.isStatic()) && this.thisType.baseClass()) {
+ ast.type = this.thisType.baseClass();
+ } else {
+ if(!this.enclosingFncIsMethod && this.thisType && this.thisType.baseClass() && this.thisFnc && TypeScript.hasFlag(this.thisFnc.fncFlags, TypeScript.FncFlags.IsFatArrowFunction)) {
+ var enclosingFnc = this.thisFnc.enclosingFnc;
+ while(TypeScript.hasFlag(enclosingFnc.fncFlags, TypeScript.FncFlags.IsFatArrowFunction)) {
+ enclosingFnc = enclosingFnc.enclosingFnc;
+ }
+ if(enclosingFnc && (enclosingFnc.isMethod() || enclosingFnc.isConstructor) && !enclosingFnc.isStatic()) {
+ ast.type = this.thisType.baseClass();
+ enclosingFnc.setHasSuperReferenceInFatArrowFunction();
+ return ast;
+ }
+ }
+ ast.type = this.anyType;
+ this.checker.errorReporter.invalidSuperReference(ast);
+ }
+ return ast;
+ };
+ TypeFlow.prototype.typeCheckThis = function (ast) {
+ ast.type = this.anyType;
+ var illegalThisRef = false;
+ if(this.thisFnc == null) {
+ if(this.thisType) {
+ if(this.thisClassNode && this.thisClassNode.nodeType == TypeScript.NodeType.ClassDeclaration) {
+ illegalThisRef = true;
+ } else {
+ ast.type = this.thisType;
+ }
+ } else {
+ if(this.checker.currentModDecl) {
+ this.checker.errorReporter.simpleError(ast, "'this' may not be referenced within module bodies");
+ }
+ }
+ } else {
+ if(this.thisClassNode && (TypeScript.hasFlag(this.thisFnc.fncFlags, TypeScript.FncFlags.IsPropertyBound) || (this.inSuperCall && TypeScript.hasFlag((this.thisClassNode).varFlags, TypeScript.VarFlags.ClassSuperMustBeFirstCallInConstructor)))) {
+ illegalThisRef = true;
+ }
+ if(this.thisFnc.isMethod() || this.thisFnc.isConstructor || this.thisFnc.isTargetTypedAsMethod) {
+ if(this.thisType && !(this.thisFnc.fncFlags & TypeScript.FncFlags.Static)) {
+ ast.type = this.thisType;
+ }
+ }
+ }
+ if(!this.enclosingFncIsMethod && this.thisFnc && TypeScript.hasFlag(this.thisFnc.fncFlags, TypeScript.FncFlags.IsFatArrowFunction)) {
+ if(this.thisFnc.boundToProperty) {
+ var container = this.thisFnc.boundToProperty.sym.container;
+ if(container.declAST.nodeType == TypeScript.NodeType.FuncDecl) {
+ (container.declAST).setHasSelfReference();
+ }
+ } else {
+ var encFnc = this.thisFnc.enclosingFnc;
+ var firstEncFnc = encFnc;
+ while(encFnc) {
+ if(this.thisClassNode && TypeScript.hasFlag(encFnc.fncFlags, TypeScript.FncFlags.IsPropertyBound)) {
+ illegalThisRef = true;
+ }
+ if(!TypeScript.hasFlag(encFnc.fncFlags, TypeScript.FncFlags.IsFatArrowFunction) || encFnc.hasSelfReference()) {
+ encFnc.setHasSelfReference();
+ break;
+ }
+ encFnc = encFnc.enclosingFnc;
+ }
+ if(!encFnc && firstEncFnc) {
+ encFnc = firstEncFnc;
+ encFnc.setHasSelfReference();
+ } else {
+ if(!encFnc) {
+ if(this.thisClassNode) {
+ (this.thisClassNode).varFlags |= TypeScript.VarFlags.MustCaptureThis;
+ } else {
+ if(this.checker.currentModDecl) {
+ this.checker.currentModDecl.modFlags |= TypeScript.ModuleFlags.MustCaptureThis;
+ } else {
+ this.checker.mustCaptureGlobalThis = true;
+ }
+ }
+ }
+ }
+ if(encFnc && (encFnc.isMethod() || encFnc.isConstructor) && this.thisType && !TypeScript.hasFlag(encFnc.fncFlags, TypeScript.FncFlags.Static)) {
+ ast.type = this.thisType;
+ }
+ }
+ }
+ if(illegalThisRef) {
+ this.checker.errorReporter.simpleError(ast, "Keyword 'this' cannot be referenced in initializers in a class body, or in super constructor calls");
+ }
+ return ast;
+ };
+ TypeFlow.prototype.setTypeFromSymbol = function (ast, symbol) {
+ if(symbol.isVariable()) {
+ if(symbol.isInferenceSymbol()) {
+ var infSym = symbol;
+ if(infSym.declAST && !this.checker.typeStatusIsFinished(infSym.typeCheckStatus)) {
+ this.inScopeTypeCheckDecl(infSym.declAST);
+ }
+ if(!this.checker.styleSettings.innerScopeDeclEscape) {
+ if(infSym.declAST && (infSym.declAST.nodeType == TypeScript.NodeType.VarDecl)) {
+ if(this.nestingLevel < (infSym.declAST).nestingLevel) {
+ this.checker.errorReporter.styleError(ast, "Illegal reference to a variable defined in more nested scope");
+ }
+ }
+ }
+ }
+ ast.type = symbol.getType();
+ if(!symbol.writeable()) {
+ ast.flags = ast.flags & (~(TypeScript.ASTFlags.Writeable));
+ }
+ } else {
+ if(symbol.isType()) {
+ ast.type = symbol.getType();
+ ast.flags = ast.flags & (~(TypeScript.ASTFlags.Writeable));
+ } else {
+ ast.type = this.anyType;
+ this.checker.errorReporter.symbolDoesNotReferToAValue(ast, symbol.name);
+ }
+ }
+ };
+ TypeFlow.prototype.typeCheckName = function (ast) {
+ var _this = this;
+ var identifier = ast;
+ if(this.checker.inWith) {
+ identifier.type = this.anyType;
+ } else {
+ var typespace = this.inTypeRefTypeCheck;
+ var idText = identifier.text;
+ var originalIdText = idText;
+ var isDynamicModuleName = TypeScript.isQuoted(identifier.text);
+ var symbol = this.scope.find(idText, false, typespace);
+ if(symbol == null && isDynamicModuleName) {
+ symbol = this.checker.findSymbolForDynamicModule(idText, this.currentScript.locationInfo.filename, function (id) {
+ return _this.scope.find(id, false, typespace);
+ });
+ }
+ if(!symbol) {
+ if(!identifier.isMissing()) {
+ this.checker.errorReporter.unresolvedSymbol(identifier, identifier.text);
+ }
+ identifier.type = this.anyType;
+ } else {
+ if(TypeScript.optimizeModuleCodeGen && symbol && symbol.isType()) {
+ var symType = symbol.getType();
+ if(symType && (symbol).aliasLink && (symbol).onlyReferencedAsTypeRef) {
+ var modDecl = symType.symbol.declAST;
+ if(modDecl && TypeScript.hasFlag(modDecl.modFlags, TypeScript.ModuleFlags.IsDynamic)) {
+ (symbol).onlyReferencedAsTypeRef = this.inTypeRefTypeCheck;
+ }
+ }
+ }
+ if(symbol.declAST && symbol.declAST.nodeType == TypeScript.NodeType.FuncDecl && !(symbol.declAST).returnTypeAnnotation && (symbol.declAST).signature.typeCheckStatus == TypeScript.TypeCheckStatus.Started) {
+ (symbol.declAST).type.symbol.flags |= TypeScript.SymbolFlags.RecursivelyReferenced;
+ (symbol.declAST).signature.returnType.type = this.anyType;
+ }
+ this.setTypeFromSymbol(ast, symbol);
+ identifier.sym = symbol;
+ if(this.thisFnc) {
+ if(this.thisFnc.type && symbol.container != this.thisFnc.type.symbol) {
+ this.thisFnc.freeVariables[this.thisFnc.freeVariables.length] = symbol;
+ }
+ }
+ }
+ }
+ return ast;
+ };
+ TypeFlow.prototype.typeCheckScript = function (script) {
+ this.checker.locationInfo = script.locationInfo;
+ this.scope = this.checker.globalScope;
+ if(!script.topLevelMod) {
+ this.addLocalsFromScope(this.scope, this.checker.gloMod, script.vars, this.checker.globals, true);
+ }
+ this.currentScript = script;
+ script.bod = this.typeCheck(script.bod);
+ this.currentScript = null;
+ return script;
+ };
+ TypeFlow.prototype.typeCheckBitNot = function (ast) {
+ var unex = ast;
+ unex.operand = this.typeCheck(unex.operand);
+ unex.type = this.doubleType;
+ return unex;
+ };
+ TypeFlow.prototype.typeCheckUnaryNumberOperator = function (ast) {
+ var unex = ast;
+ unex.operand = this.typeCheck(unex.operand);
+ unex.type = this.doubleType;
+ return ast;
+ };
+ TypeFlow.prototype.typeCheckLogNot = function (ast) {
+ var unex = ast;
+ unex.operand = this.typeCheck(unex.operand);
+ unex.type = this.booleanType;
+ return unex;
+ };
+ TypeFlow.prototype.astIsWriteable = function (ast) {
+ return TypeScript.hasFlag(ast.flags, TypeScript.ASTFlags.Writeable);
+ };
+ TypeFlow.prototype.typeCheckIncOrDec = function (ast) {
+ var unex = ast;
+ var lval = unex.operand;
+ if(!this.astIsWriteable(unex)) {
+ this.checker.errorReporter.valueCannotBeModified(unex);
+ unex.type = this.doubleType;
+ } else {
+ unex = this.typeCheckUnaryNumberOperator(ast);
+ if(unex.operand.type != this.checker.numberType && unex.operand.type != this.checker.anyType && !(unex.operand.type.typeFlags & TypeScript.TypeFlags.IsEnum)) {
+ this.checker.errorReporter.simpleError(ast, "'++' and '--' may only be applied to operands of type 'number' or 'any'");
+ }
+ }
+ return unex;
+ };
+ TypeFlow.prototype.typeCheckBitwiseOperator = function (ast, assignment) {
+ var binex = ast;
+ var resultType = null;
+ binex.operand1 = this.typeCheck(binex.operand1);
+ binex.operand2 = this.typeCheck(binex.operand2);
+ var leftType = binex.operand1.type;
+ var rightType = binex.operand2.type;
+ if(assignment && (!this.astIsWriteable(binex))) {
+ this.checker.errorReporter.valueCannotBeModified(binex);
+ }
+ if(this.checker.styleSettings.bitwise) {
+ this.checker.errorReporter.styleError(ast, "use of " + TypeScript.nodeTypeTable[binex.nodeType]);
+ }
+ if(this.checker.sourceIsSubtypeOfTarget(leftType, this.doubleType) && (this.checker.sourceIsSubtypeOfTarget(rightType, this.doubleType))) {
+ resultType = this.doubleType;
+ } else {
+ if((leftType == this.booleanType) && (rightType == this.booleanType)) {
+ resultType = this.booleanType;
+ } else {
+ if(leftType == this.anyType) {
+ if((rightType == this.anyType) || (rightType == this.doubleType) || (rightType == this.booleanType)) {
+ resultType = this.anyType;
+ }
+ } else {
+ if(rightType == this.anyType) {
+ if((leftType == this.anyType) || (leftType == this.doubleType) || (leftType == this.booleanType)) {
+ resultType = this.anyType;
+ }
+ }
+ }
+ }
+ }
+ if(resultType == null) {
+ resultType = this.anyType;
+ this.checker.errorReporter.incompatibleTypes(binex, leftType, rightType, binex.printLabel(), this.scope);
+ }
+ binex.type = resultType;
+ return binex;
+ };
+ TypeFlow.prototype.typeCheckArithmeticOperator = function (ast, assignment) {
+ var binex = ast;
+ binex.operand1 = this.typeCheck(binex.operand1);
+ binex.operand2 = this.typeCheck(binex.operand2);
+ var leftType = binex.operand1.type;
+ var rightType = binex.operand2.type;
+ if(assignment && (!this.astIsWriteable(binex.operand1))) {
+ this.checker.errorReporter.valueCannotBeModified(binex);
+ }
+ if(this.checker.styleSettings.bitwise && ((binex.nodeType == TypeScript.NodeType.And) || (binex.nodeType == TypeScript.NodeType.Or) || (binex.nodeType == TypeScript.NodeType.AsgAnd) || (binex.nodeType == TypeScript.NodeType.AsgOr))) {
+ this.checker.errorReporter.styleError(ast, "use of " + TypeScript.nodeTypeTable[binex.nodeType]);
+ }
+ if(leftType == null || rightType == null) {
+ this.checker.errorReporter.simpleError(binex, "Could not typecheck arithmetic operation. Possible recursive typecheck error?");
+ binex.type = this.anyType;
+ return binex;
+ }
+ var nodeType = binex.nodeType;
+ if(this.checker.isNullOrUndefinedType(leftType)) {
+ leftType = rightType;
+ }
+ if(this.checker.isNullOrUndefinedType(rightType)) {
+ rightType = leftType;
+ }
+ leftType = this.checker.widenType(leftType);
+ rightType = this.checker.widenType(rightType);
+ if(nodeType == TypeScript.NodeType.Add || nodeType == TypeScript.NodeType.AsgAdd) {
+ if(leftType == this.checker.stringType || rightType == this.checker.stringType) {
+ binex.type = this.checker.stringType;
+ } else {
+ if(leftType == this.checker.numberType && rightType == this.checker.numberType) {
+ binex.type = this.checker.numberType;
+ } else {
+ if(this.checker.sourceIsSubtypeOfTarget(leftType, this.checker.numberType) && this.checker.sourceIsSubtypeOfTarget(rightType, this.checker.numberType)) {
+ binex.type = this.checker.numberType;
+ } else {
+ if(leftType == this.checker.anyType || rightType == this.checker.anyType) {
+ binex.type = this.checker.anyType;
+ } else {
+ binex.type = this.anyType;
+ this.checker.errorReporter.incompatibleTypes(binex, leftType, rightType, binex.printLabel(), this.scope);
+ }
+ }
+ }
+ }
+ } else {
+ if(leftType == this.checker.numberType && rightType == this.checker.numberType) {
+ binex.type = this.checker.numberType;
+ } else {
+ if(this.checker.sourceIsSubtypeOfTarget(leftType, this.checker.numberType) && this.checker.sourceIsSubtypeOfTarget(rightType, this.checker.numberType)) {
+ binex.type = this.checker.numberType;
+ } else {
+ if(leftType == this.checker.anyType || rightType == this.checker.anyType) {
+ binex.type = this.checker.numberType;
+ } else {
+ binex.type = this.anyType;
+ this.checker.errorReporter.incompatibleTypes(binex, leftType, rightType, binex.printLabel(), this.scope);
+ }
+ }
+ }
+ }
+ return binex;
+ };
+ TypeFlow.prototype.typeCheckDotOperator = function (ast) {
+ var binex = ast;
+ var leftIsFnc = false;
+ binex.operand1 = this.typeCheck(binex.operand1);
+ var leftType = binex.operand1.type;
+ var leftScope = null;
+ if(leftType) {
+ if(leftType == this.anyType) {
+ binex.type = this.anyType;
+ return binex;
+ } else {
+ if(leftType == this.stringType) {
+ if(this.stringInterfaceType) {
+ leftScope = this.stringInterfaceType.memberScope;
+ } else {
+ binex.type = this.anyType;
+ return binex;
+ }
+ } else {
+ if(leftType == this.doubleType) {
+ if(this.numberInterfaceType) {
+ leftScope = this.numberInterfaceType.memberScope;
+ } else {
+ binex.type = this.anyType;
+ return binex;
+ }
+ } else {
+ if(leftType == this.booleanType) {
+ if(this.booleanInterfaceType) {
+ leftScope = this.booleanInterfaceType.memberScope;
+ } else {
+ binex.type = this.anyType;
+ return binex;
+ }
+ } else {
+ if((leftType.call || leftType.construct) && leftType.members == null) {
+ if(this.functionInterfaceType) {
+ leftScope = this.functionInterfaceType.memberScope;
+ } else {
+ binex.type = this.anyType;
+ return binex;
+ }
+ } else {
+ if(leftType.elementType) {
+ if(this.arrayInterfaceType) {
+ var arrInstType = leftType.elementType.getArrayBase(this.arrayInterfaceType, this.checker);
+ leftScope = arrInstType.memberScope;
+ } else {
+ binex.type = this.anyType;
+ return binex;
+ }
+ } else {
+ leftScope = leftType.memberScope;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ if(leftScope == null) {
+ this.checker.errorReporter.expectedClassOrInterface(binex);
+ binex.type = this.anyType;
+ } else {
+ var propertyName = binex.operand2;
+ var lhsIsEnclosingType = (this.thisClassNode && binex.operand1.type == this.thisClassNode.type.instanceType) || this.inTypeRefTypeCheck;
+ var symbol = leftScope.find(propertyName.text, !lhsIsEnclosingType, this.inTypeRefTypeCheck);
+ if(!symbol) {
+ if(this.objectInterfaceType && leftType) {
+ if(leftType.isReferenceType()) {
+ symbol = this.objectInterfaceType.memberScope.find(propertyName.text, false, this.inTypeRefTypeCheck);
+ }
+ if(!symbol) {
+ if(this.functionInterfaceType && (leftType.call || leftType.construct)) {
+ symbol = this.functionInterfaceType.memberScope.find(propertyName.text, false, this.inTypeRefTypeCheck);
+ }
+ }
+ }
+ }
+ if(!symbol || (!symbol.visible(leftScope, this.checker))) {
+ binex.type = this.anyType;
+ if(symbol == null) {
+ this.checker.errorReporter.simpleError(propertyName, "The property '" + propertyName.actualText + "' does not exist on value of type '" + leftType.getScopedTypeName(this.scope) + "'");
+ } else {
+ if(!this.inTypeRefTypeCheck) {
+ this.checker.errorReporter.simpleError(binex, "The property '" + propertyName.actualText + " on type '" + leftType.getScopedTypeName(this.scope) + "' is not visible");
+ }
+ }
+ } else {
+ if(symbol.isVariable()) {
+ if(symbol.isInferenceSymbol()) {
+ var infSym = symbol;
+ if(infSym.declAST && !this.checker.typeStatusIsFinished(infSym.typeCheckStatus)) {
+ this.inScopeTypeCheckDecl(infSym.declAST);
+ }
+ }
+ }
+ propertyName.sym = symbol;
+ binex.type = symbol.getType();
+ }
+ }
+ if(binex.type == null) {
+ binex.type = this.anyType;
+ }
+ return binex;
+ };
+ TypeFlow.prototype.typeCheckBooleanOperator = function (ast) {
+ var binex = ast;
+ binex.operand1 = this.typeCheck(binex.operand1);
+ binex.operand2 = this.typeCheck(binex.operand2);
+ var leftType = binex.operand1.type;
+ var rightType = binex.operand2.type;
+ if((!(this.checker.sourceIsAssignableToTarget(leftType, rightType))) && (!(this.checker.sourceIsAssignableToTarget(rightType, leftType)))) {
+ this.checker.errorReporter.incompatibleTypes(binex, leftType, rightType, binex.printLabel(), this.scope);
+ }
+ binex.type = this.booleanType;
+ return binex;
+ };
+ TypeFlow.prototype.typeCheckAsgOperator = function (ast) {
+ var binex = ast;
+ var applyTargetType = !binex.operand2.isParenthesized;
+ binex.operand1 = this.typeCheck(binex.operand1);
+ this.checker.typeCheckWithContextualType(binex.operand1.type, this.checker.inProvisionalTypecheckMode(), applyTargetType, binex.operand2);
+ var leftType = binex.operand1.type;
+ var rightType = binex.operand2.type;
+ if(!(this.astIsWriteable(binex.operand1))) {
+ this.checker.errorReporter.valueCannotBeModified(binex);
+ }
+ if(binex.operand1.nodeType == TypeScript.NodeType.Call) {
+ var callEx = binex.operand1;
+ }
+ var preserveScope = false;
+ var preservedContainedScope = null;
+ if(binex.operand2.type) {
+ preservedContainedScope = binex.operand2.type.containedScope;
+ preserveScope = true;
+ }
+ binex.operand2 = this.castWithCoercion(binex.operand2, leftType, applyTargetType && !this.checker.inProvisionalTypecheckMode(), false);
+ if(preserveScope && binex.operand2.type.containedScope == null) {
+ binex.operand2.type.containedScope = preservedContainedScope;
+ }
+ binex.type = rightType;
+ return binex;
+ };
+ TypeFlow.prototype.typeCheckIndex = function (ast) {
+ var binex = ast;
+ binex.operand1 = this.typeCheck(binex.operand1);
+ binex.operand2 = this.typeCheck(binex.operand2);
+ if(!this.checker.styleSettings.literalSubscript) {
+ if(binex.operand2.nodeType == TypeScript.NodeType.QString) {
+ this.checker.errorReporter.styleError(ast, "use literal subscript ('.') notation instead)");
+ }
+ }
+ var objExprType = binex.operand1.type;
+ var indexExprType = binex.operand2.type;
+ if(objExprType.elementType) {
+ if(indexExprType == this.checker.anyType || indexExprType == this.checker.numberType || TypeScript.hasFlag(indexExprType.typeFlags, TypeScript.TypeFlags.IsEnum)) {
+ binex.type = objExprType.elementType;
+ } else {
+ if(indexExprType == this.checker.stringType) {
+ binex.type = this.checker.anyType;
+ } else {
+ this.checker.errorReporter.simpleError(binex, "Illegal property access");
+ binex.type = this.checker.anyType;
+ }
+ }
+ } else {
+ if(objExprType.index) {
+ if(indexExprType == this.checker.anyType || !((objExprType.index.flags & TypeScript.SignatureFlags.IsStringIndexer) || (objExprType.index.flags & TypeScript.SignatureFlags.IsNumberIndexer)) || ((objExprType.index.flags & TypeScript.SignatureFlags.IsStringIndexer) && indexExprType == this.checker.stringType) || ((objExprType.index.flags & TypeScript.SignatureFlags.IsNumberIndexer) && (indexExprType == this.checker.numberType || TypeScript.hasFlag(indexExprType.typeFlags, TypeScript.TypeFlags.IsEnum)))) {
+ var sig = this.resolveOverload(ast, objExprType.index);
+ if(sig) {
+ binex.type = sig.returnType.type;
+ } else {
+ binex.type = this.checker.anyType;
+ }
+ } else {
+ if(indexExprType == this.checker.stringType) {
+ binex.type = this.checker.anyType;
+ } else {
+ this.checker.errorReporter.simpleError(binex, "Illegal property access");
+ binex.type = this.checker.anyType;
+ }
+ }
+ } else {
+ if((objExprType == this.checker.anyType || objExprType == this.checker.stringType || objExprType == this.checker.numberType || objExprType == this.checker.booleanType || objExprType.isReferenceType()) && (indexExprType == this.checker.anyType || indexExprType == this.checker.stringType || (indexExprType == this.checker.numberType || TypeScript.hasFlag(indexExprType.typeFlags, TypeScript.TypeFlags.IsEnum)))) {
+ binex.type = this.checker.anyType;
+ } else {
+ this.checker.errorReporter.simpleError(binex, "Illegal property access");
+ binex.type = this.checker.anyType;
+ }
+ }
+ }
+ return binex;
+ };
+ TypeFlow.prototype.typeCheckInOperator = function (binex) {
+ binex.operand1 = this.cast(this.typeCheck(binex.operand1), this.stringType);
+ binex.operand2 = this.typeCheck(binex.operand2);
+ if(!((binex.operand1.type == this.checker.anyType || binex.operand1.type == this.checker.stringType) && (binex.operand2.type == this.anyType || this.checker.sourceIsSubtypeOfTarget(binex.operand2.type, this.objectInterfaceType)))) {
+ this.checker.errorReporter.simpleError(binex, "The in operator requires the left operand to be of type Any or the String primitive type, and the right operand to be of type Any or an object type");
+ }
+ binex.type = this.booleanType;
+ return binex;
+ };
+ TypeFlow.prototype.typeCheckShift = function (binex, assignment) {
+ binex.operand1 = this.cast(this.typeCheck(binex.operand1), this.doubleType);
+ binex.operand2 = this.cast(this.typeCheck(binex.operand2), this.doubleType);
+ if(assignment && (!(this.astIsWriteable(binex.operand1)))) {
+ this.checker.errorReporter.valueCannotBeModified(binex);
+ }
+ binex.type = this.doubleType;
+ return binex;
+ };
+ TypeFlow.prototype.typeCheckQMark = function (trinex) {
+ trinex.operand1 = this.typeCheck(trinex.operand1);
+ trinex.operand2 = this.typeCheck(trinex.operand2);
+ trinex.operand3 = this.typeCheck(trinex.operand3);
+ var leftType = trinex.operand2.type;
+ var rightType = trinex.operand3.type;
+ if(leftType == rightType) {
+ trinex.type = leftType;
+ } else {
+ if(this.checker.sourceIsSubtypeOfTarget(leftType, rightType)) {
+ trinex.type = rightType;
+ } else {
+ if(this.checker.sourceIsSubtypeOfTarget(rightType, leftType)) {
+ trinex.type = leftType;
+ } else {
+ trinex.type = this.anyType;
+ this.checker.errorReporter.incompatibleTypes(trinex, leftType, rightType, trinex.printLabel(), this.scope);
+ }
+ }
+ }
+ return trinex;
+ };
+ TypeFlow.prototype.addFormals = function (container, signature, table) {
+ var len = signature.parameters.length;
+ for(var i = 0; i < len; i++) {
+ var symbol = signature.parameters[i];
+ symbol.container = container;
+ table.add(symbol.name, symbol);
+ }
+ };
+ TypeFlow.prototype.addLocalsFromScope = function (scope, container, vars, table, isModContainer) {
+ var len = vars.members.length;
+ var hasArgsDef = false;
+ for(var i = 0; i < len; i++) {
+ var local = vars.members[i];
+ if(((local.sym == null) || (local.sym.kind() != TypeScript.SymbolKind.Field))) {
+ var result = null;
+ if((result = table.lookup(local.id.text)) == null) {
+ var localVar = new TypeScript.ValueLocation();
+ localVar.typeLink = new TypeScript.TypeLink();
+ var varSym = null;
+ if(TypeScript.hasFlag(local.varFlags, TypeScript.VarFlags.Static)) {
+ local.varFlags |= TypeScript.VarFlags.LocalStatic;
+ varSym = new TypeScript.FieldSymbol(local.id.text, local.minChar, this.checker.locationInfo.unitIndex, true, localVar);
+ } else {
+ varSym = new TypeScript.VariableSymbol(local.id.text, local.minChar, this.checker.locationInfo.unitIndex, localVar);
+ }
+ varSym.transferVarFlags(local.varFlags);
+ localVar.symbol = varSym;
+ varSym.declAST = local;
+ localVar.typeLink.ast = local.typeExpr;
+ this.checker.resolveTypeLink(scope, localVar.typeLink, false);
+ if((local.type == null) && (local.init == null)) {
+ local.type = this.anyType;
+ }
+ localVar.typeLink.type = local.type;
+ localVar.symbol.container = container;
+ local.sym = localVar.symbol;
+ table.add(local.id.text, varSym);
+ if(local.id.text == "arguments") {
+ hasArgsDef = true;
+ }
+ } else {
+ local.type = result.getType();
+ local.sym = result;
+ }
+ }
+ }
+ if(!isModContainer) {
+ if(!hasArgsDef) {
+ var argLoc = new TypeScript.ValueLocation();
+ argLoc.typeLink = new TypeScript.TypeLink();
+ var theArgSym = new TypeScript.VariableSymbol("arguments", vars.minChar, this.checker.locationInfo.unitIndex, argLoc);
+ if(!this.iargumentsInterfaceType) {
+ var argumentsSym = scope.find("IArguments", false, true);
+ if(argumentsSym) {
+ argumentsSym.flags |= TypeScript.SymbolFlags.CompilerGenerated;
+ this.iargumentsInterfaceType = argumentsSym.getType();
+ } else {
+ this.iargumentsInterfaceType = this.anyType;
+ }
+ }
+ argLoc.typeLink.type = this.iargumentsInterfaceType;
+ table.add("arguments", theArgSym);
+ }
+ }
+ };
+ TypeFlow.prototype.addConstructorLocalArgs = function (container, args, table, isClass) {
+ if(args) {
+ var len = args.members.length;
+ for(var i = 0; i < len; i++) {
+ var local = args.members[i];
+ if((local.sym == null) || (isClass || (local.sym.kind() != TypeScript.SymbolKind.Field))) {
+ var result = null;
+ if((result = table.lookup(local.id.text)) == null) {
+ this.resolveBoundDecl(local);
+ var localVar = new TypeScript.ValueLocation();
+ localVar.typeLink = new TypeScript.TypeLink();
+ var varSym = new TypeScript.ParameterSymbol(local.id.text, local.minChar, this.checker.locationInfo.unitIndex, localVar);
+ varSym.declAST = local;
+ localVar.symbol = varSym;
+ localVar.typeLink.type = local.type;
+ localVar.symbol.container = container;
+ local.sym = localVar.symbol;
+ table.add(local.id.text, varSym);
+ } else {
+ local.type = result.getType();
+ local.sym = result;
+ }
+ }
+ }
+ }
+ };
+ TypeFlow.prototype.checkInitSelf = function (funcDecl) {
+ if(!funcDecl.isMethod()) {
+ var freeVars = funcDecl.freeVariables;
+ for(var k = 0, len = freeVars.length; k < len; k++) {
+ var sym = freeVars[k];
+ if(sym.isInstanceProperty()) {
+ return true;
+ }
+ }
+ }
+ var fns = funcDecl.scopes;
+ var fnsLen = fns.members.length;
+ for(var j = 0; j < fnsLen; j++) {
+ var fn = fns.members[j];
+ if(this.checkInitSelf(fn)) {
+ return true;
+ }
+ }
+ return false;
+ };
+ TypeFlow.prototype.checkPromoteFreeVars = function (funcDecl, constructorSym) {
+ var freeVars = funcDecl.freeVariables;
+ for(var k = 0, len = freeVars.length; k < len; k++) {
+ var sym = freeVars[k];
+ if((!sym.isInstanceProperty()) && (sym.container == constructorSym)) {
+ TypeScript.instanceFilter.reset();
+ if(this.scope.search(TypeScript.instanceFilter, sym.name, false, false)) {
+ this.checker.errorReporter.simpleError(funcDecl, "Constructor-local variable shadows class property '" + sym.name + "'. To access the class property, use 'self." + sym.name + "'");
+ }
+ this.checker.errorReporter.simpleError(funcDecl, "Constructor-local variables may not be accessed from instance method bodies. Consider changing local variable '" + sym.name + "' to a class property");
+ }
+ }
+ };
+ TypeFlow.prototype.allReturnsAreVoid = function (funcDecl) {
+ var allReturnsAreVoid = true;
+ if(funcDecl.signature.returnType.type == null) {
+ var preFindReturnExpressionTypes = function (ast, parent, walker) {
+ var go = true;
+ switch(ast.nodeType) {
+ case TypeScript.NodeType.FuncDecl: {
+ go = false;
+ break;
+
+ }
+ case TypeScript.NodeType.Return: {
+ var returnStmt = ast;
+ if(returnStmt.returnExpression) {
+ allReturnsAreVoid = false;
+ go = false;
+ }
+
+ }
+ default: {
+ break;
+
+ }
+ }
+ walker.options.goChildren = go;
+ walker.options.goNextSibling = go;
+ return ast;
+ };
+ TypeScript.getAstWalkerFactory().walk(funcDecl.bod, preFindReturnExpressionTypes);
+ }
+ return allReturnsAreVoid;
+ };
+ TypeFlow.prototype.classConstructorHasSuperCall = function (funcDecl) {
+ var foundSuper = false;
+ var preFindSuperCall = function (ast, parent, walker) {
+ var go = true;
+ switch(ast.nodeType) {
+ case TypeScript.NodeType.FuncDecl: {
+ go = false;
+ break;
+
+ }
+ case TypeScript.NodeType.Call: {
+ var call = ast;
+ if(call.target.nodeType == TypeScript.NodeType.Super) {
+ go = false;
+ foundSuper = true;
+ break;
+ }
+ break;
+
+ }
+ default: {
+ break;
+
+ }
+ }
+ walker.options.goChildren = go;
+ return ast;
+ };
+ TypeScript.getAstWalkerFactory().walk(funcDecl.bod, preFindSuperCall);
+ return foundSuper;
+ };
+ TypeFlow.prototype.baseListPrivacyErrorReporter = function (bases, i, declSymbol, extendsList, typeName, isModuleName) {
+ var baseSymbol = bases.members[i].type.symbol;
+ var declTypeString = (declSymbol.declAST.nodeType == TypeScript.NodeType.InterfaceDeclaration) ? "interface" : "class";
+ var baseListTypeString = extendsList ? "extends" : "implements";
+ var baseTypeString = (baseSymbol.declAST.nodeType == TypeScript.NodeType.InterfaceDeclaration) ? "interface" : "class";
+ var typestring = "";
+ if(isModuleName) {
+ var quotestring = "";
+ if(!TypeScript.isQuoted(typeName)) {
+ quotestring = "'";
+ }
+ typestring = " is using inaccessible module ";
+ baseTypeString = " " + baseTypeString + " from private module " + quotestring + typeName + quotestring;
+ } else {
+ baseTypeString = " private " + baseTypeString + " '" + typeName + "'";
+ }
+ this.checker.errorReporter.simpleError(bases.members[i], "exported " + declTypeString + " '" + declSymbol.name + "' " + baseListTypeString + baseTypeString);
+ };
+ TypeFlow.prototype.typeCheckBaseListPrivacy = function (bases, declSymbol, extendsList) {
+ var _this = this;
+ if(bases) {
+ var basesLen = bases.members.length;
+ for(var i = 0; i < basesLen; i++) {
+ if(!bases.members[i].type || bases.members[i].type == this.checker.anyType) {
+ continue;
+ }
+ this.checkSymbolPrivacy(bases.members[i].type.symbol, declSymbol, function (typeName, isModuleName) {
+ return _this.baseListPrivacyErrorReporter(bases, i, declSymbol, extendsList, typeName, isModuleName);
+ });
+ }
+ }
+ };
+ TypeFlow.prototype.checkSymbolPrivacy = function (typeSymbol, declSymbol, errorCallback) {
+ var externalModuleSymbol = null;
+ var declSymbolPath = null;
+ if(typeSymbol.isExternallyVisible(this.checker)) {
+ var typeSymbolPath = typeSymbol.pathToRoot();
+ declSymbolPath = declSymbol.pathToRoot();
+ var typeSymbolLength = typeSymbolPath.length;
+ var declSymbolPathLength = declSymbolPath.length;
+ if(typeSymbolLength > 0) {
+ if(typeSymbolPath[typeSymbolLength - 1].getType().isModuleType() && (typeSymbolPath[typeSymbolLength - 1]).isDynamic && typeSymbolPath[typeSymbolLength - 1] != declSymbolPath[declSymbolPathLength - 1]) {
+ externalModuleSymbol = typeSymbolPath[typeSymbolLength - 1];
+ } else {
+ if(typeSymbolLength > 1) {
+ if(typeSymbolPath[typeSymbolLength - 2].getType().isModuleType() && (typeSymbolPath[typeSymbolLength - 2]).isDynamic && (declSymbolPathLength == 1 || typeSymbolPath[typeSymbolLength - 2] != declSymbolPath[declSymbolPathLength - 2])) {
+ externalModuleSymbol = typeSymbolPath[typeSymbolLength - 2];
+ }
+ }
+ }
+ }
+ if(externalModuleSymbol == null) {
+ return;
+ }
+ }
+ var interfaceDecl = declSymbol.getInterfaceDeclFromSymbol(this.checker);
+ if(interfaceDecl && !TypeScript.hasFlag(interfaceDecl.varFlags, TypeScript.VarFlags.Exported)) {
+ return;
+ }
+ var checkVisibilitySymbol = declSymbol;
+ var varDecl = declSymbol.getVarDeclFromSymbol();
+ if(varDecl) {
+ if(TypeScript.hasFlag(varDecl.varFlags, TypeScript.VarFlags.Private)) {
+ return;
+ } else {
+ if(TypeScript.hasFlag(varDecl.varFlags, TypeScript.VarFlags.Public)) {
+ checkVisibilitySymbol = declSymbol.container;
+ }
+ }
+ }
+ if(checkVisibilitySymbol.isExternallyVisible(this.checker)) {
+ var privateSymbolName = typeSymbol.name;
+ if(externalModuleSymbol != null) {
+ var prettyName = externalModuleSymbol.getPrettyNameOfDynamicModule(declSymbolPath);
+ if(prettyName != null) {
+ this.currentScript.AddExternallyVisibleImportedSymbol(prettyName.symbol, this.checker);
+ return;
+ } else {
+ privateSymbolName = externalModuleSymbol.prettyName;
+ }
+ }
+ errorCallback(privateSymbolName, typeSymbol.name != privateSymbolName);
+ }
+ };
+ TypeFlow.prototype.checkTypePrivacy = function (type, declSymbol, errorCallback) {
+ var _this = this;
+ if(!(type && type.primitiveTypeClass == TypeScript.Primitive.None)) {
+ return;
+ }
+ if(type.isArray()) {
+ return this.checkTypePrivacy(type.elementType, declSymbol, errorCallback);
+ }
+ if(type.symbol && type.symbol.name && type.symbol.name != "_anonymous" && (((type.call == null) && (type.construct == null) && (type.index == null)) || (type.members && (!type.isClass())))) {
+ return this.checkSymbolPrivacy(type.symbol, declSymbol, errorCallback);
+ }
+ if(type.members) {
+ type.members.allMembers.map(function (key, s, unused) {
+ var sym = s;
+ if(!TypeScript.hasFlag(sym.flags, TypeScript.SymbolFlags.BuiltIn)) {
+ _this.checkTypePrivacy(sym.getType(), declSymbol, errorCallback);
+ }
+ }, null);
+ }
+ this.checkSignatureGroupPrivacy(type.call, declSymbol, errorCallback);
+ this.checkSignatureGroupPrivacy(type.construct, declSymbol, errorCallback);
+ this.checkSignatureGroupPrivacy(type.index, declSymbol, errorCallback);
+ };
+ TypeFlow.prototype.checkSignatureGroupPrivacy = function (sgroup, declSymbol, errorCallback) {
+ if(sgroup) {
+ var len = sgroup.signatures.length;
+ for(var i = 0; i < sgroup.signatures.length; i++) {
+ var signature = sgroup.signatures[i];
+ if(len > 1 && signature == sgroup.definitionSignature) {
+ continue;
+ }
+ if(signature.returnType) {
+ this.checkTypePrivacy(signature.returnType.type, declSymbol, errorCallback);
+ }
+ var paramLen = signature.parameters.length;
+ for(var j = 0; j < paramLen; j++) {
+ var param = signature.parameters[j];
+ this.checkTypePrivacy(param.getType(), declSymbol, errorCallback);
+ }
+ }
+ }
+ };
+ TypeFlow.prototype.functionArgumentPrivacyErrorReporter = function (funcDecl, p, paramSymbol, typeName, isModuleName) {
+ var isGetter = funcDecl.isAccessor() && TypeScript.hasFlag(funcDecl.fncFlags, TypeScript.FncFlags.GetAccessor);
+ var isSetter = funcDecl.isAccessor() && TypeScript.hasFlag(funcDecl.fncFlags, TypeScript.FncFlags.SetAccessor);
+ var isPublicFunc = TypeScript.hasFlag(funcDecl.fncFlags, TypeScript.FncFlags.Public);
+ var isContainerInterface = funcDecl.type.symbol.getInterfaceDeclFromSymbol(this.checker) != null;
+ var typestring = "";
+ if(isModuleName) {
+ var quotestring = "";
+ if(!TypeScript.isQuoted(typeName)) {
+ quotestring = "'";
+ }
+ typestring = " is using inaccessible module " + quotestring + typeName + quotestring;
+ } else {
+ typestring = " has or is using private type '" + typeName + "'";
+ }
+ if(!isContainerInterface) {
+ if(funcDecl.isConstructor) {
+ this.checker.errorReporter.simpleError(funcDecl.arguments.members[p], "exported class's constructor parameter '" + paramSymbol.name + "'" + typestring);
+ } else {
+ if(isSetter) {
+ this.checker.errorReporter.simpleError(funcDecl.arguments.members[p], (isPublicFunc ? "public" : "exported") + " setter parameter '" + paramSymbol.name + "'" + typestring);
+ } else {
+ if(!isGetter) {
+ this.checker.errorReporter.simpleError(funcDecl.arguments.members[p], (isPublicFunc ? "public" : "exported") + " function parameter '" + paramSymbol.name + "'" + typestring);
+ }
+ }
+ }
+ } else {
+ if(funcDecl.isConstructMember()) {
+ this.checker.errorReporter.simpleError(funcDecl.arguments.members[p], "exported interface's constructor parameter '" + paramSymbol.name + "'" + typestring);
+ } else {
+ if(funcDecl.isCallMember()) {
+ this.checker.errorReporter.simpleError(funcDecl.arguments.members[p], "exported interface's call parameter '" + paramSymbol.name + "'" + typestring);
+ } else {
+ if(!funcDecl.isIndexerMember()) {
+ this.checker.errorReporter.simpleError(funcDecl.arguments.members[p], "exported interface's function parameter '" + paramSymbol.name + "'" + typestring);
+ }
+ }
+ }
+ }
+ };
+ TypeFlow.prototype.returnTypePrivacyError = function (astError, funcDecl, typeName, isModuleName) {
+ var isGetter = funcDecl.isAccessor() && TypeScript.hasFlag(funcDecl.fncFlags, TypeScript.FncFlags.GetAccessor);
+ var isSetter = funcDecl.isAccessor() && TypeScript.hasFlag(funcDecl.fncFlags, TypeScript.FncFlags.SetAccessor);
+ var isPublicFunc = TypeScript.hasFlag(funcDecl.fncFlags, TypeScript.FncFlags.Public);
+ var isContainerInterface = funcDecl.type.symbol.getInterfaceDeclFromSymbol(this.checker) != null;
+ var typestring = "";
+ if(isModuleName) {
+ var quotestring = "";
+ if(!TypeScript.isQuoted(typeName)) {
+ quotestring = "'";
+ }
+ typestring = " is using inaccessible module " + quotestring + typeName + quotestring;
+ } else {
+ typestring = " has or is using private type '" + typeName + "'";
+ }
+ if(!isContainerInterface) {
+ if(isGetter) {
+ this.checker.errorReporter.simpleError(astError, (isPublicFunc ? "public" : "exported") + " getter return type" + typestring);
+ } else {
+ if(!isSetter) {
+ this.checker.errorReporter.simpleError(astError, (isPublicFunc ? "public" : "exported") + " function return type" + typestring);
+ }
+ }
+ } else {
+ if(funcDecl.isConstructMember()) {
+ this.checker.errorReporter.simpleError(astError, "exported interface's constructor return type" + typestring);
+ } else {
+ if(funcDecl.isCallMember()) {
+ this.checker.errorReporter.simpleError(astError, "exported interface's call return type" + typestring);
+ } else {
+ if(funcDecl.isIndexerMember()) {
+ this.checker.errorReporter.simpleError(astError, "exported interface's indexer return type" + typestring);
+ } else {
+ this.checker.errorReporter.simpleError(astError, "exported interface's function return type" + typestring);
+ }
+ }
+ }
+ }
+ };
+ TypeFlow.prototype.functionReturnTypePrivacyErrorReporter = function (funcDecl, signature, typeName, isModuleName) {
+ var reportOnFuncDecl = false;
+ if(funcDecl.returnTypeAnnotation != null && funcDecl.returnTypeAnnotation.type == signature.returnType.type) {
+ this.returnTypePrivacyError(funcDecl.returnTypeAnnotation, funcDecl, typeName, isModuleName);
+ }
+ for(var i = 0; i < funcDecl.returnStatementsWithExpressions.length; i++) {
+ if(funcDecl.returnStatementsWithExpressions[i].type == signature.returnType.type) {
+ this.returnTypePrivacyError(funcDecl.returnStatementsWithExpressions[i], funcDecl, typeName, isModuleName);
+ } else {
+ reportOnFuncDecl = true;
+ }
+ }
+ if(reportOnFuncDecl) {
+ this.returnTypePrivacyError(funcDecl, funcDecl, typeName, isModuleName);
+ }
+ };
+ TypeFlow.prototype.typeCheckFunction = function (funcDecl) {
+ var _this = this;
+ this.nestingLevel = 0;
+ var fnType = funcDecl.type;
+ var fgSym = fnType.symbol;
+ var signature = funcDecl.signature;
+ if(this.checker.typeStatusIsFinished(signature.typeCheckStatus)) {
+ return funcDecl;
+ } else {
+ if(signature.typeCheckStatus == TypeScript.TypeCheckStatus.Started) {
+ if(!funcDecl.returnTypeAnnotation && funcDecl.bod && !funcDecl.isSignature() && !(funcDecl.isConstructor) && this.allReturnsAreVoid(funcDecl)) {
+ signature.returnType.type = this.voidType;
+ return funcDecl;
+ } else {
+ if(funcDecl.returnTypeAnnotation == null) {
+ if(this.checker.styleSettings.implicitAny) {
+ this.checker.errorReporter.styleError(funcDecl, "type implicitly set to 'any'");
+ }
+ signature.returnType.type = this.anyType;
+ fgSym.flags |= TypeScript.SymbolFlags.RecursivelyReferenced;
+ }
+ return funcDecl;
+ }
+ }
+ }
+ signature.typeCheckStatus = TypeScript.TypeCheckStatus.Started;
+ this.checker.addStartedPTO(signature);
+ var prevScope = this.scope;
+ var prevFnc = this.thisFnc;
+ var prevMethodStatus = this.enclosingFncIsMethod;
+ var prevClassNode = this.thisClassNode;
+ this.enclosingFncIsMethod = funcDecl.isMethod() || funcDecl.isConstructor;
+ this.thisFnc = funcDecl;
+ var container = funcDecl.type.symbol;
+ var prevThisType = this.thisType;
+ var prevLocationInfo = this.checker.locationInfo;
+ var funcTable = null;
+ var acceptedContextualType = false;
+ var targetParams = null;
+ var targetReturnType = null;
+ var isGetter = funcDecl.isAccessor() && TypeScript.hasFlag(funcDecl.fncFlags, TypeScript.FncFlags.GetAccessor);
+ var isSetter = funcDecl.isAccessor() && TypeScript.hasFlag(funcDecl.fncFlags, TypeScript.FncFlags.SetAccessor);
+ var accessorType = (isGetter || isSetter) && funcDecl.accessorSymbol ? funcDecl.accessorSymbol.getType() : null;
+ var prevModDecl = this.checker.currentModDecl;
+ if(funcDecl.isConstructor && !funcDecl.isOverload) {
+ if(fnType.instanceType == null) {
+ this.checker.errorReporter.simpleError(funcDecl, "Malformed function body (is this a class named the same as an existing interface?)");
+ return funcDecl;
+ }
+ this.scope = fnType.instanceType.constructorScope;
+ var ssb = this.scope;
+ funcTable = ssb.valueMembers.allMembers;
+ } else {
+ if((funcDecl.isSpecialFn() && !(funcDecl.fncFlags & TypeScript.FncFlags.Signature)) || funcDecl.isOverload) {
+ funcTable = funcDecl.symbols;
+ if(!TypeScript.hasFlag(funcDecl.fncFlags, TypeScript.FncFlags.Static) && fnType.containedScope) {
+ this.scope = fnType.containedScope;
+ }
+ } else {
+ if(funcDecl.bod) {
+ this.scope = fnType.containedScope;
+ }
+ var ssb = this.scope;
+ if(ssb && ssb.valueMembers) {
+ funcTable = ssb.valueMembers.allMembers;
+ }
+ }
+ }
+ if(funcDecl.isConstructor && funcDecl.bod && TypeScript.hasFlag(funcDecl.fncFlags, TypeScript.FncFlags.ClassMethod)) {
+ var hasBaseType = TypeScript.hasFlag(funcDecl.classDecl.type.instanceType.typeFlags, TypeScript.TypeFlags.HasBaseType);
+ var noSuperCallAllowed = !hasBaseType || TypeScript.hasFlag(funcDecl.classDecl.type.instanceType.typeFlags, TypeScript.TypeFlags.HasBaseTypeOfObject);
+ var superCallMustBeFirst = TypeScript.hasFlag((funcDecl.classDecl).varFlags, TypeScript.VarFlags.ClassSuperMustBeFirstCallInConstructor);
+ if(noSuperCallAllowed && this.classConstructorHasSuperCall(funcDecl)) {
+ this.checker.errorReporter.simpleError(funcDecl, "Calls to 'super' constructor are not allowed in classes that either inherit directly from 'Object' or have no base class");
+ } else {
+ if(hasBaseType) {
+ if(superCallMustBeFirst) {
+ if(!funcDecl.bod || !funcDecl.bod.members.length || !((funcDecl.bod.members[0].nodeType == TypeScript.NodeType.Call && (funcDecl.bod.members[0]).target.nodeType == TypeScript.NodeType.Super) || (TypeScript.hasFlag(funcDecl.bod.flags, TypeScript.ASTFlags.StrictMode) && funcDecl.bod.members.length > 1 && funcDecl.bod.members[1].nodeType == TypeScript.NodeType.Call && (funcDecl.bod.members[1]).target.nodeType == TypeScript.NodeType.Super))) {
+ this.checker.errorReporter.simpleError(funcDecl, "If a derived class contains initialized properties or constructor parameter properties, the first statement in the constructor body must be a call to the super constructor");
+ }
+ } else {
+ if(!this.classConstructorHasSuperCall(funcDecl)) {
+ this.checker.errorReporter.simpleError(funcDecl, "Constructors for derived classes must contain a call to the class's 'super' constructor");
+ }
+ }
+ }
+ }
+ }
+ if(funcDecl.isMethod() && funcDecl.type.enclosingType) {
+ var enclosingClassNode = null;
+ if(funcDecl.type.enclosingType.symbol.declAST.nodeType == TypeScript.NodeType.FuncDecl) {
+ enclosingClassNode = (funcDecl.type.enclosingType.symbol.declAST).classDecl;
+ } else {
+ if(funcDecl.type.enclosingType.symbol.declAST.nodeType == TypeScript.NodeType.ClassDeclaration) {
+ enclosingClassNode = funcDecl.type.enclosingType.symbol.declAST;
+ }
+ }
+ if(enclosingClassNode) {
+ this.thisClassNode = enclosingClassNode;
+ }
+ }
+ if(fnType.enclosingType) {
+ ; ;
+ var enclosingSym = fnType.symbol.container;
+ if(enclosingSym && enclosingSym.isType() && enclosingSym.getType().isClass()) {
+ enclosingSym = enclosingSym.container;
+ }
+ if(enclosingSym && enclosingSym.declAST && enclosingSym.declAST.nodeType == TypeScript.NodeType.ModuleDeclaration) {
+ this.checker.currentModDecl = enclosingSym.declAST;
+ }
+ }
+ if(funcDecl.unitIndex > 0) {
+ if(this.checker.units && (funcDecl.unitIndex < this.checker.units.length)) {
+ this.checker.locationInfo = this.checker.units[funcDecl.unitIndex];
+ } else {
+ this.checker.locationInfo = TypeScript.unknownLocationInfo;
+ }
+ }
+ if(fnType.enclosingType) {
+ this.thisType = fnType.enclosingType;
+ } else {
+ this.thisType = prevThisType;
+ }
+ var paramLen = signature.parameters.length;
+ if(!funcDecl.isConstructor && funcDecl.bod && !funcDecl.isSignature()) {
+ var tmpParamScope = this.scope;
+ var ssb = this.scope;
+ if(!funcDecl.isMethod() && funcDecl.returnTypeAnnotation == null) {
+ if(prevScope && funcDecl.name && !funcDecl.name.isMissing()) {
+ var considerSym = prevScope.findAmbient(funcDecl.name.text, false, false);
+ if(considerSym && considerSym.declAST && considerSym.declAST.type) {
+ this.checker.setContextualType(considerSym.declAST.type, false);
+ }
+ }
+ if(this.checker.hasTargetType()) {
+ var candidateTypeContext = this.checker.getTargetTypeContext();
+ var candidateType = candidateTypeContext.contextualType;
+ if(this.checker.canContextuallyTypeFunction(candidateType, funcDecl, true)) {
+ var candidateSigs = candidateType.construct ? candidateType.construct : candidateType.call;
+ candidateTypeContext.targetSig = candidateSigs.signatures[0];
+ var candidateParams = candidateTypeContext.targetSig.parameters;
+ targetParams = candidateParams;
+ targetReturnType = candidateTypeContext.targetSig.returnType.type;
+ if(candidateTypeContext.targetSig.declAST) {
+ if(candidateTypeContext.targetSig.declAST.isConstructor) {
+ funcDecl.isTargetTypedAsMethod = true;
+ } else {
+ if(candidateTypeContext.targetSig.declAST.isMethod()) {
+ funcDecl.isTargetTypedAsMethod = true;
+ }
+ }
+ }
+ fgSym.type = candidateTypeContext.contextualType;
+ acceptedContextualType = true;
+ } else {
+ if(candidateType && funcDecl.isAccessor()) {
+ accessorType = candidateType;
+ candidateTypeContext.targetAccessorType = accessorType;
+ } else {
+ this.checker.killCurrentContextualType();
+ }
+ }
+ }
+ }
+ var paramTable = ssb.valueMembers;
+ this.scope = new TypeScript.SymbolScopeBuilder(paramTable, null, null, null, prevScope, container);
+ for(var p = 0; p < paramLen; p++) {
+ var symbol = signature.parameters[p];
+ var ast = symbol.declAST;
+ if(this.checker.hasTargetType() && (targetParams && (this.checker.getTargetTypeContext().targetSig.hasVariableArgList || p < targetParams.length))) {
+ var candidateTypeContext = this.checker.getTargetTypeContext();
+ var hasVarArgList = candidateTypeContext.targetSig.hasVariableArgList;
+ ast.type = hasVarArgList && p >= targetParams.length - 1 ? targetParams[targetParams.length - 1].getType().elementType : targetParams[p].getType();
+ ast.sym.setType(ast.type);
+ (ast.sym).typeCheckStatus = this.checker.getTypeCheckFinishedStatus();
+ } else {
+ this.typeCheck(ast);
+ }
+ if(isSetter && accessorType) {
+ ast = this.cast(ast, accessorType);
+ }
+ symbol.container = container;
+ this.checkTypePrivacy(symbol.getType(), container, function (typeName, isModuleName) {
+ return _this.functionArgumentPrivacyErrorReporter(funcDecl, p, symbol, typeName, isModuleName);
+ });
+ paramTable.publicMembers.add(symbol.name, symbol);
+ }
+ this.scope = tmpParamScope;
+ } else {
+ this.typeCheck(funcDecl.arguments);
+ for(var p = 0; p < paramLen; p++) {
+ signature.parameters[p].parameter.typeLink.type = funcDecl.arguments.members[p].type;
+ this.checkTypePrivacy(signature.parameters[p].getType(), container, function (typeName, isModuleName) {
+ return _this.functionArgumentPrivacyErrorReporter(funcDecl, p, signature.parameters[p], typeName, isModuleName);
+ });
+ if((funcDecl.arguments.members[p]).parameterPropertySym) {
+ (funcDecl.arguments.members[p]).parameterPropertySym.setType(funcDecl.arguments.members[p].type);
+ }
+ }
+ if((funcDecl.fncFlags & TypeScript.FncFlags.IndexerMember)) {
+ if(!paramLen || paramLen > 1) {
+ this.checker.errorReporter.simpleError(funcDecl, "Index signatures may take one and only one parameter");
+ } else {
+ if(funcDecl.arguments.members[0].type == this.checker.numberType) {
+ fnType.index.flags |= TypeScript.SignatureFlags.IsNumberIndexer;
+ } else {
+ if(funcDecl.arguments.members[0].type == this.checker.stringType) {
+ fnType.index.flags |= TypeScript.SignatureFlags.IsStringIndexer;
+ } else {
+ this.checker.errorReporter.simpleError(funcDecl.arguments.members[0], "Index signatures may only take 'string' or 'number' as their parameter");
+ }
+ }
+ }
+ }
+ }
+ if(funcDecl.bod && (!funcDecl.isSignature())) {
+ if(!(funcDecl.isConstructor)) {
+ this.addFormals(container, signature, funcTable);
+ } else {
+ this.addConstructorLocalArgs(funcDecl.type.symbol, funcDecl.arguments, funcTable, TypeScript.hasFlag(funcDecl.fncFlags, TypeScript.FncFlags.ClassMethod));
+ if(this.thisClassNode && this.thisClassNode.extendsList) {
+ var tmpScope = this.scope;
+ var funcMembers = new TypeScript.ScopedMembers(funcTable);
+ this.scope = new TypeScript.FilteredSymbolScopeBuilder(funcMembers, prevScope, funcDecl.type.symbol, function (sym) {
+ return sym.kind() == TypeScript.SymbolKind.Parameter;
+ });
+ this.typeCheckBaseCalls(this.thisClassNode.extendsList);
+ this.scope = tmpScope;
+ }
+ }
+ var prevMod = this.checker.currentModDecl;
+ if(funcDecl.type && funcDecl.type.symbol && !funcDecl.isMethod() && funcDecl.type.symbol.declModule) {
+ this.checker.currentModDecl = funcDecl.type.symbol.declModule;
+ }
+ if(acceptedContextualType) {
+ this.checker.setContextualType(null, this.checker.inProvisionalTypecheckMode());
+ }
+ this.typeCheck(funcDecl.bod);
+ if(acceptedContextualType) {
+ this.checker.unsetContextualType();
+ }
+ this.checker.currentModDecl = prevMod;
+ if(this.checker.checkControlFlow) {
+ var cfg = funcDecl.buildControlFlow();
+ if(this.checker.printControlFlowGraph) {
+ cfg.print(this.checker.errorReporter.outfile);
+ }
+ cfg.reportUnreachable(this.checker.errorReporter);
+ if(this.checker.checkControlFlowUseDef) {
+ cfg.useDef(this.checker.errorReporter, funcDecl.type.symbol);
+ }
+ }
+ if(funcDecl.isConstructor) {
+ var fns = funcDecl.scopes;
+ var fnsLen = fns.members.length;
+ var freeVars;
+ var sym;
+ var j = 0;
+ for(; j < fnsLen; j++) {
+ var fn = fns.members[j];
+ if(!fn.isSignature()) {
+ if(TypeScript.hasFlag(fn.fncFlags, TypeScript.FncFlags.Method) && (!TypeScript.hasFlag(fn.fncFlags, TypeScript.FncFlags.Static))) {
+ this.checkPromoteFreeVars(fn, funcDecl.type.symbol);
+ }
+ }
+ }
+ }
+ }
+ this.scope = prevScope;
+ this.thisFnc = prevFnc;
+ this.thisClassNode = prevClassNode;
+ this.enclosingFncIsMethod = prevMethodStatus;
+ this.thisType = prevThisType;
+ this.checker.locationInfo = prevLocationInfo;
+ this.checker.currentModDecl = prevModDecl;
+ signature.typeCheckStatus = this.checker.getTypeCheckFinishedStatus();
+ if(funcDecl.returnTypeAnnotation) {
+ this.checkForVoidConstructor(funcDecl.returnTypeAnnotation.type, funcDecl.returnTypeAnnotation);
+ if(signature.returnType.type == null) {
+ this.checker.resolveTypeLink(this.scope, signature.returnType, false);
+ }
+ } else {
+ if(targetReturnType) {
+ signature.returnType.type = targetReturnType;
+ }
+ }
+ if(!(fgSym.flags & TypeScript.SymbolFlags.RecursivelyReferenced) && funcDecl.returnStatementsWithExpressions.length > 0) {
+ var collection = {
+ getLength: function () {
+ return funcDecl.returnStatementsWithExpressions.length;
+ },
+ setTypeAtIndex: function (index, type) {
+ funcDecl.returnStatementsWithExpressions[index].type = type;
+ },
+ getTypeAtIndex: function (index) {
+ return funcDecl.returnStatementsWithExpressions[index].type;
+ }
+ };
+ var bestCommonReturnType = funcDecl.returnStatementsWithExpressions[0].type;
+ bestCommonReturnType = this.checker.findBestCommonType(bestCommonReturnType, null, collection, true);
+ if(bestCommonReturnType) {
+ signature.returnType.type = this.checker.widenType(bestCommonReturnType);
+ } else {
+ for(var i = 0; i < funcDecl.returnStatementsWithExpressions.length; i++) {
+ this.checker.errorReporter.simpleError(funcDecl.returnStatementsWithExpressions[i], "Incompatible return type");
+ }
+ signature.returnType.type = this.anyType;
+ }
+ }
+ var onlyHasThrow = false;
+ if(signature.returnType.type == null) {
+ if(TypeScript.hasFlag(funcDecl.fncFlags, TypeScript.FncFlags.HasReturnExpression)) {
+ if(this.checker.styleSettings.implicitAny) {
+ this.checker.errorReporter.styleError(funcDecl, "type implicitly set to 'any'");
+ }
+ signature.returnType.type = this.anyType;
+ } else {
+ signature.returnType.type = this.voidType;
+ }
+ } else {
+ if(signature.returnType.type == this.nullType || signature.returnType.type == this.checker.undefinedType) {
+ signature.returnType.type = this.anyType;
+ } else {
+ if((signature.returnType.type != this.voidType && signature.returnType.type != this.checker.undefinedType && signature.returnType.type != this.anyType)) {
+ if(!funcDecl.isSignature() && !funcDecl.isConstructor && !TypeScript.hasFlag(funcDecl.fncFlags, TypeScript.FncFlags.HasReturnExpression) && !TypeScript.hasFlag(funcDecl.fncFlags, TypeScript.FncFlags.IsFatArrowFunction)) {
+ onlyHasThrow = (funcDecl.bod.members.length > 0) && (funcDecl.bod.members[0].nodeType == TypeScript.NodeType.Throw);
+ if(!onlyHasThrow) {
+ this.checker.errorReporter.simpleError(funcDecl.returnTypeAnnotation || funcDecl, "Function declared a non-void return type, but has no return expression");
+ }
+ }
+ this.checkTypePrivacy(signature.returnType.type, container, function (typeName, isModuleName) {
+ return _this.functionReturnTypePrivacyErrorReporter(funcDecl, signature, typeName, isModuleName);
+ });
+ }
+ }
+ }
+ if(funcDecl.accessorSymbol) {
+ var accessorType = funcDecl.accessorSymbol.getType();
+ if(!onlyHasThrow && TypeScript.hasFlag(funcDecl.fncFlags, TypeScript.FncFlags.GetAccessor) && !TypeScript.hasFlag(funcDecl.fncFlags, TypeScript.FncFlags.HasReturnExpression)) {
+ this.checker.errorReporter.simpleError(funcDecl, "Getters must return a value");
+ }
+ if(accessorType) {
+ if((TypeScript.hasFlag(funcDecl.fncFlags, TypeScript.FncFlags.GetAccessor) && accessorType != signature.returnType.type) || (funcDecl.arguments.members.length > 0 && accessorType != funcDecl.arguments.members[0].type)) {
+ this.checker.errorReporter.simpleError(funcDecl, "Getter and setter types do not agree");
+ }
+ } else {
+ if(TypeScript.hasFlag(funcDecl.fncFlags, TypeScript.FncFlags.GetAccessor)) {
+ funcDecl.accessorSymbol.setType(signature.returnType.type);
+ } else {
+ if(funcDecl.arguments.members.length != 1) {
+ this.checker.errorReporter.simpleError(funcDecl, "Setters may have one and only one argument");
+ } else {
+ funcDecl.accessorSymbol.setType(funcDecl.arguments.members[0].type);
+ }
+ }
+ }
+ }
+ this.typeCheckOverloadSignatures(fnType, funcDecl);
+ return funcDecl;
+ };
+ TypeFlow.prototype.typeCheckBases = function (type) {
+ var seenInterface = false;
+ var bases = type.extendsList;
+ var baseLinks = type.extendsTypeLinks;
+ if(bases) {
+ var len = bases.length;
+ if(len > 0) {
+ type.typeFlags |= TypeScript.TypeFlags.HasBaseType;
+ }
+ for(var i = 0; i < len; i++) {
+ if(bases[i] == this.checker.anyType) {
+ baseLinks[i].type = null;
+ var oldErrors = this.checker.errorReporter.getCapturedErrors();
+ TypeScript.CompilerDiagnostics.assert(oldErrors.length == 0, "There shouldnt be any contextual errors when typechecking base type names");
+ this.checker.errorReporter.pushToErrorSink = true;
+ bases[i] = this.checker.resolveBaseTypeLink(baseLinks[i], type.containedScope);
+ this.checker.errorReporter.pushToErrorSink = false;
+ this.checker.errorReporter.freeCapturedErrors();
+ }
+ var base = bases[i];
+ var baseRef = baseLinks[i].ast;
+ var baseTypeOfObject = base.symbol && base.symbol.name == "Object" && base.symbol.container == this.checker.gloMod;
+ if(baseTypeOfObject) {
+ type.typeFlags |= TypeScript.TypeFlags.HasBaseTypeOfObject;
+ }
+ if(base.isClassInstance()) {
+ if(!(type.isClassInstance())) {
+ this.checker.errorReporter.simpleError(baseRef, "Interface base type must be interface");
+ } else {
+ if(seenInterface) {
+ this.checker.errorReporter.simpleError(baseRef, "Class may not follow interface as base type");
+ }
+ }
+ } else {
+ if(base.isModuleType()) {
+ this.checker.errorReporter.simpleError(baseRef, "Types may not be derived from module types");
+ } else {
+ if(base.members) {
+ if(!seenInterface) {
+ seenInterface = true;
+ }
+ } else {
+ if(!(type.isClassInstance())) {
+ this.checker.errorReporter.simpleError(baseRef, "Interface base type must be interface");
+ } else {
+ this.checker.errorReporter.simpleError(baseRef, "Base type must be interface or class");
+ }
+ break;
+ }
+ }
+ }
+ }
+ }
+ };
+ TypeFlow.prototype.checkMembersImplementInterfaces = function (implementingType) {
+ var instanceType = implementingType.getInstanceType();
+ if(instanceType.implementsList) {
+ var len = instanceType.implementsList.length;
+ for(var i = 0; i < len; i++) {
+ var interfaceType = instanceType.implementsList[i];
+ var comparisonInfo = new TypeScript.TypeComparisonInfo();
+ if(!this.checker.sourceIsSubtypeOfTarget(instanceType, interfaceType, comparisonInfo)) {
+ var emsg = "Class '" + instanceType.getTypeName() + "' declares interface '" + interfaceType.getTypeName() + "' but does not implement it";
+ if(!comparisonInfo.message) {
+ this.checker.errorReporter.simpleErrorFromSym(instanceType.symbol, emsg);
+ } else {
+ this.checker.errorReporter.simpleErrorFromSym(instanceType.symbol, emsg + ": " + comparisonInfo.message);
+ }
+ }
+ }
+ }
+ };
+ TypeFlow.prototype.typeCheckBaseCalls = function (bases) {
+ if(bases == null) {
+ return;
+ }
+ var basesLen = bases.members.length;
+ for(var i = 0; i < basesLen; i++) {
+ var baseExpr = bases.members[i];
+ var baseSymbol = null;
+ if(baseExpr.nodeType == TypeScript.NodeType.Call) {
+ this.typeCheckNew(baseExpr);
+ }
+ }
+ };
+ TypeFlow.prototype.assertUniqueNamesInBaseTypes = function (names, type, classDecl, checkUnique) {
+ var _this = this;
+ if(type) {
+ if(type.members) {
+ type.members.publicMembers.map(function (key, s, c) {
+ var sym = s;
+ var dup = names.lookup(sym.name);
+ if(dup) {
+ if(checkUnique) {
+ _this.checker.errorReporter.simpleError(classDecl, "duplicate member name in bases for " + classDecl.name.actualText + ": " + type.symbol.name + " and " + dup.container.name + " both contain member with name " + sym.name);
+ }
+ } else {
+ names.add(sym.name, sym);
+ }
+ }, null);
+ }
+ if(type.extendsList) {
+ var len = type.extendsList.length;
+ for(var i = 0; i < len; i++) {
+ if(!(type.extendsList[i].symbol.flags & TypeScript.SymbolFlags.RecursivelyReferenced)) {
+ this.assertUniqueNamesInBaseTypes(names, type.extendsList[i], classDecl, checkUnique);
+ }
+ }
+ }
+ }
+ };
+ TypeFlow.prototype.checkBaseTypeMemberInheritance = function (derivedType, derivedTypeDecl) {
+ var _this = this;
+ var instanceType = derivedType.getInstanceType();
+ if(instanceType.extendsList == null) {
+ return;
+ }
+ var len = instanceType.extendsList.length;
+ if(len > 0) {
+ var names = new TypeScript.StringHashTable();
+ if(instanceType.isClassInstance()) {
+ for(var i = 0; i < len; i++) {
+ this.assertUniqueNamesInBaseTypes(names, instanceType.extendsList[i], derivedTypeDecl, i > 0);
+ }
+ }
+ if(instanceType.members) {
+ instanceType.members.publicMembers.map(function (key, s, c) {
+ var sym = s;
+ for(var j = 0; j < len; j++) {
+ var base = instanceType.extendsList[j];
+ if(base.memberScope == null) {
+ _this.checker.errorReporter.simpleError(derivedTypeDecl, "Base type '" + base.symbol.name + "' lacks an implementation.");
+ } else {
+ var bSym = base.memberScope.find(sym.name, false, false);
+ if(bSym) {
+ var aType = sym.getType();
+ var bType = bSym.getType();
+ if(!(_this.checker.sourceIsSubtypeOfTarget(aType, bType))) {
+ _this.checker.errorReporter.simpleErrorFromSym(sym, "Type of overridden member '" + sym.name + "' is not subtype of original member defined by type '" + bSym.container.name + "'");
+ } else {
+ if((sym.kind() == TypeScript.SymbolKind.Type) && (bSym.kind() == TypeScript.SymbolKind.Field)) {
+ _this.checker.errorReporter.simpleErrorFromSym(sym, "Cannot override field '" + sym.name + "' with method");
+ }
+ }
+ }
+ }
+ }
+ }, null);
+ }
+ }
+ };
+ TypeFlow.prototype.typeCheckClass = function (classDecl) {
+ var typeSymbol = classDecl.type.symbol;
+ if(typeSymbol.typeCheckStatus == TypeScript.TypeCheckStatus.Finished) {
+ return classDecl;
+ } else {
+ if(typeSymbol.typeCheckStatus == TypeScript.TypeCheckStatus.Started) {
+ return classDecl;
+ } else {
+ typeSymbol.typeCheckStatus = TypeScript.TypeCheckStatus.Started;
+ this.checker.addStartedPTO(typeSymbol);
+ }
+ }
+ var prevScope = this.scope;
+ var svClassNode = this.thisClassNode;
+ this.thisClassNode = classDecl;
+ var classType = classDecl.type;
+ this.typeCheckBases(classType.instanceType);
+ this.typeCheckBaseListPrivacy(classDecl.extendsList, typeSymbol, true);
+ this.typeCheckBaseListPrivacy(classDecl.implementsList, typeSymbol, false);
+ var prevThisType = this.thisType;
+ this.thisType = classType.instanceType;
+ this.scope = classType.instanceType.containedScope;
+ if(classDecl.constructorDecl) {
+ this.scope = classType.instanceType.constructorScope;
+ var ssb = this.scope;
+ var funcTable = ssb.valueMembers.allMembers;
+ this.addConstructorLocalArgs(classDecl.constructorDecl.type.symbol, classDecl.constructorDecl.arguments, funcTable, true);
+ }
+ this.typeCheck(classDecl.members);
+ typeSymbol.typeCheckStatus = TypeScript.TypeCheckStatus.Finished;
+ this.checkBaseTypeMemberInheritance(classType, classDecl);
+ this.checkMembersImplementInterfaces(classType);
+ this.typeCheckOverloadSignatures(classType, classDecl);
+ this.typeCheckOverloadSignatures(classType.instanceType, classDecl);
+ if(!classDecl.constructorDecl) {
+ if(classDecl.extendsList && classDecl.extendsList.members.length && classDecl.extendsList.members[0].type && classDecl.extendsList.members[0].type.symbol.type.isClass()) {
+ TypeScript.cloneParentConstructGroupForChildType(classDecl.type, classDecl.extendsList.members[0].type.symbol.type);
+ }
+ }
+ this.thisType = prevThisType;
+ this.thisClassNode = svClassNode;
+ this.scope = prevScope;
+ return classDecl;
+ };
+ TypeFlow.prototype.typeCheckOverloadSignatures = function (type, ast) {
+ if(type.call) {
+ type.call.typeCheck(this.checker, ast, type.construct != null);
+ }
+ if(type.construct) {
+ type.construct.typeCheck(this.checker, ast, false);
+ }
+ if(type.index) {
+ type.index.typeCheck(this.checker, ast, false);
+ }
+ };
+ TypeFlow.prototype.typeCheckInterface = function (interfaceDecl) {
+ this.typeCheckBases(interfaceDecl.type);
+ this.typeCheckBaseListPrivacy(interfaceDecl.extendsList, interfaceDecl.type.symbol, true);
+ this.typeCheck(interfaceDecl.members);
+ this.checkBaseTypeMemberInheritance(interfaceDecl.type, interfaceDecl);
+ if(interfaceDecl.extendsList) {
+ for(var i = 0; i < interfaceDecl.extendsList.members.length; i++) {
+ if(interfaceDecl.extendsList.members[i].type.call) {
+ if(interfaceDecl.type.call) {
+ interfaceDecl.type.call.signatures = interfaceDecl.type.call.signatures.concat(interfaceDecl.extendsList.members[i].type.call.signatures);
+ } else {
+ interfaceDecl.type.call = interfaceDecl.extendsList.members[i].type.call;
+ }
+ }
+ if(interfaceDecl.extendsList.members[i].type.construct) {
+ if(interfaceDecl.type.construct) {
+ interfaceDecl.type.construct.signatures = interfaceDecl.type.construct.signatures.concat(interfaceDecl.extendsList.members[i].type.construct.signatures);
+ } else {
+ interfaceDecl.type.construct = interfaceDecl.extendsList.members[i].type.construct;
+ }
+ }
+ if(interfaceDecl.extendsList.members[i].type.index) {
+ if(interfaceDecl.type.index) {
+ interfaceDecl.type.index.signatures = interfaceDecl.type.index.signatures.concat(interfaceDecl.extendsList.members[i].type.index.signatures);
+ } else {
+ interfaceDecl.type.index = interfaceDecl.extendsList.members[i].type.index;
+ }
+ }
+ }
+ }
+ return interfaceDecl;
+ };
+ TypeFlow.prototype.typeCheckImportDecl = function (importDecl) {
+ var mod = importDecl.alias.type;
+ var sym = null;
+ var prevInImportTC = this.inImportTypeCheck;
+ this.inImportTypeCheck = true;
+ this.typeCheck(importDecl.alias);
+ mod = importDecl.alias.type;
+ if(mod == null) {
+ this.checker.errorReporter.simpleError(importDecl.alias, "Could not resolve module alias '" + importDecl.id.actualText + "'");
+ mod = this.checker.anyType;
+ (importDecl.id.sym).type = mod;
+ }
+ importDecl.id.type = mod;
+ sym = mod.symbol;
+ if(!mod.isModuleType()) {
+ this.checker.errorReporter.simpleError(importDecl.alias, "A module cannot be aliased to a non-module type");
+ } else {
+ sym.type = mod;
+ if(this.checker.typeFlow.currentScript && this.checker.typeFlow.currentScript.topLevelMod && this.checker.typeFlow.currentScript.topLevelMod.mod) {
+ this.checker.typeFlow.currentScript.topLevelMod.mod.importedModules.push(importDecl);
+ }
+ (importDecl.id.sym).type = mod;
+ if(mod.symbol && mod.symbol.declAST) {
+ (mod.symbol.declAST).modFlags &= ~TypeScript.ModuleFlags.ShouldEmitModuleDecl;
+ }
+ }
+ this.inImportTypeCheck = prevInImportTC;
+ return importDecl;
+ };
+ TypeFlow.prototype.typeCheckModule = function (moduleDecl) {
+ if(!moduleDecl.mod) {
+ return moduleDecl;
+ }
+ if(this.currentScript) {
+ this.currentScript.requiresGlobal = true;
+ }
+ var mod = moduleDecl.mod;
+ var sym = null;
+ var prevScope = this.scope;
+ var prevThisType = this.thisType;
+ var prevCurrentModDecl = this.checker.currentModDecl;
+ this.checker.currentModDecl = moduleDecl;
+ this.thisType = null;
+ this.scope = mod.containedScope;
+ this.typeCheck(moduleDecl.members);
+ sym = mod.symbol;
+ this.checker.currentModDecl = prevCurrentModDecl;
+ this.thisType = prevThisType;
+ this.scope = prevScope;
+ moduleDecl.type = mod;
+ if(sym) {
+ sym.typeCheckStatus = TypeScript.TypeCheckStatus.Finished;
+ }
+ return moduleDecl;
+ };
+ TypeFlow.prototype.typeCheckFor = function (forStmt) {
+ forStmt.init = this.typeCheck(forStmt.init);
+ this.nestingLevel++;
+ forStmt.cond = this.typeCheck(forStmt.cond);
+ this.typeCheckCondExpr(forStmt.cond);
+ forStmt.incr = this.typeCheck(forStmt.incr);
+ this.nestingLevel--;
+ forStmt.body = this.typeCheck(forStmt.body);
+ this.typeCheckCompoundStmtBlock(forStmt.body, "for statement");
+ forStmt.type = this.voidType;
+ return forStmt;
+ };
+ TypeFlow.prototype.typeCheckWith = function (withStmt) {
+ if(this.checker.errorsOnWith) {
+ this.checker.errorReporter.simpleError(withStmt.expr, "All symbols within a 'with' block will be typed as 'any'");
+ }
+ withStmt.expr = this.typeCheck(withStmt.expr);
+ this.checker.inWith = true;
+ withStmt.body = this.typeCheck(withStmt.body);
+ this.typeCheckCompoundStmtBlock(withStmt.body, "with statement");
+ this.checker.inWith = false;
+ return withStmt;
+ };
+ TypeFlow.prototype.typeCheckForIn = function (forInStmt) {
+ forInStmt.obj = this.typeCheck(forInStmt.obj);
+ forInStmt.lval = this.cast(this.typeCheck(forInStmt.lval), this.checker.stringType);
+ if(forInStmt.lval.nodeType == TypeScript.NodeType.VarDecl) {
+ var varDecl = forInStmt.lval;
+ if(varDecl.typeExpr) {
+ this.checker.errorReporter.simpleError(varDecl, "Variable declarations for for/in expressions may not contain a type annotation");
+ }
+ if(varDecl.sym) {
+ varDecl.sym.setType(this.checker.stringType);
+ }
+ }
+ forInStmt.body = this.typeCheck(forInStmt.body);
+ this.typeCheckCompoundStmtBlock(forInStmt.body, "for in statement");
+ return forInStmt;
+ };
+ TypeFlow.prototype.typeCheckWhile = function (whileStmt) {
+ whileStmt.cond = this.typeCheck(whileStmt.cond);
+ this.typeCheckCondExpr(whileStmt.cond);
+ whileStmt.body = this.typeCheck(whileStmt.body);
+ this.typeCheckCompoundStmtBlock(whileStmt.body, "while statement");
+ whileStmt.type = this.voidType;
+ return whileStmt;
+ };
+ TypeFlow.prototype.typeCheckDoWhile = function (doWhileStmt) {
+ doWhileStmt.cond = this.typeCheck(doWhileStmt.cond);
+ this.typeCheckCondExpr(doWhileStmt.cond);
+ doWhileStmt.body = this.typeCheck(doWhileStmt.body);
+ this.typeCheckCompoundStmtBlock(doWhileStmt.body, "do while statement");
+ doWhileStmt.type = this.voidType;
+ return doWhileStmt;
+ };
+ TypeFlow.prototype.typeCheckCondExpr = function (cond) {
+ if(this.checker.styleSettings.assignmentInCond) {
+ if((cond !== null) && (cond.nodeType >= TypeScript.NodeType.Asg) && (cond.nodeType <= TypeScript.NodeType.LastAsg)) {
+ this.checker.errorReporter.simpleError(cond, "top-level assignment statement in conditional expression");
+ }
+ }
+ };
+ TypeFlow.prototype.typeCheckCompoundStmtBlock = function (stmts, stmtType) {
+ if(this.checker.styleSettings.blockInCompoundStmt && stmts) {
+ if(stmts.nodeType != TypeScript.NodeType.Block) {
+ this.checker.errorReporter.styleError(stmts, stmtType + " requires a block");
+ }
+ }
+ };
+ TypeFlow.prototype.typeCheckIf = function (ifStmt) {
+ ifStmt.cond = this.typeCheck(ifStmt.cond);
+ this.typeCheckCondExpr(ifStmt.cond);
+ ifStmt.thenBod = this.typeCheck(ifStmt.thenBod);
+ ifStmt.elseBod = this.typeCheck(ifStmt.elseBod);
+ this.typeCheckCompoundStmtBlock(ifStmt.thenBod, "if statement");
+ this.typeCheckCompoundStmtBlock(ifStmt.elseBod, "if statement");
+ ifStmt.type = this.voidType;
+ return ifStmt;
+ };
+ TypeFlow.prototype.typeFromAccessorFuncDecl = function (funcDecl) {
+ if(!funcDecl.isAccessor()) {
+ return null;
+ }
+ if(TypeScript.hasFlag(funcDecl.fncFlags, TypeScript.FncFlags.GetAccessor)) {
+ return funcDecl.type.call.signatures[0].returnType.type;
+ } else {
+ return funcDecl.type.call.signatures[0].parameters[0].getType();
+ }
+ };
+ TypeFlow.prototype.typeCheckObjectLit = function (objectLit) {
+ var resultType = new TypeScript.Type();
+ resultType.symbol = new TypeScript.TypeSymbol(this.checker.anon, objectLit.minChar, objectLit.limChar - objectLit.minChar, this.checker.locationInfo.unitIndex, resultType);
+ resultType.members = new TypeScript.ScopedMembers(new TypeScript.DualStringHashTable(new TypeScript.StringHashTable(), new TypeScript.StringHashTable()));
+ resultType.memberScope = new TypeScript.SymbolTableScope(resultType.members, null, null, null, null);
+ var aggScope = new TypeScript.SymbolAggregateScope(resultType.symbol);
+ aggScope.addParentScope(resultType.memberScope);
+ aggScope.addParentScope(this.scope);
+ resultType.containedScope = aggScope;
+ var memberDecls = objectLit.operand;
+ var prevThisType = this.thisType;
+ var acceptTargetType = false;
+ var targetType = null;
+ if(this.checker.hasTargetType()) {
+ targetType = this.checker.getTargetTypeContext().contextualType;
+ if(targetType && targetType.symbol && !this.checker.typeStatusIsFinished(targetType.symbol.typeCheckStatus)) {
+ if(targetType.symbol.declAST) {
+ this.typeCheck(targetType.symbol.declAST);
+ }
+ }
+ acceptTargetType = true;
+ }
+ if(memberDecls) {
+ for(var i = 0, len = memberDecls.members.length; i < len; i++) {
+ var binex = memberDecls.members[i];
+ var id = binex.operand1;
+ var text;
+ var targetMember = null;
+ var fieldSymbol = null;
+ if(id.nodeType == TypeScript.NodeType.Name) {
+ text = (id).text;
+ } else {
+ if(id.nodeType == TypeScript.NodeType.QString) {
+ var idText = (id).text;
+ text = idText.substring(1, idText.length - 1);
+ } else {
+ this.checker.errorReporter.simpleError(objectLit, "malformed object literal");
+ resultType = this.anyType;
+ break;
+ }
+ }
+ if(acceptTargetType && targetType.memberScope) {
+ targetMember = targetType.memberScope.find(text, false, false);
+ }
+ if(binex.operand2.nodeType == TypeScript.NodeType.FuncDecl && (binex.operand2).isAccessor()) {
+ var funcDecl = binex.operand2;
+ var accessorSym = resultType.members.publicMembers.lookup(text);
+ accessorSym = this.checker.createAccessorSymbol(funcDecl, accessorSym, resultType, true, false, resultType.memberScope, null);
+ funcDecl.accessorSymbol = accessorSym;
+ fieldSymbol = accessorSym;
+ if(id.nodeType == TypeScript.NodeType.Name) {
+ (id).sym = accessorSym;
+ }
+ }
+ this.checker.typeCheckWithContextualType(acceptTargetType && targetMember ? targetMember.getType() : null, false, acceptTargetType, binex.operand2);
+ if(acceptTargetType && targetMember) {
+ if((binex.operand2.type == this.anyType || this.checker.sourceIsAssignableToTarget(binex.operand2.type, targetMember.getType())) || (binex.operand2.nodeType == TypeScript.NodeType.FuncDecl && (binex.operand2).isAccessor() && this.typeFromAccessorFuncDecl(binex.operand2) == targetMember.getType())) {
+ binex.operand1.type = targetMember.getType();
+ }
+ } else {
+ binex.operand2.type = binex.operand2.type == this.checker.undefinedType ? this.anyType : binex.operand2.type;
+ }
+ if(fieldSymbol == null) {
+ var memberType = binex.operand2.type;
+ var field = new TypeScript.ValueLocation();
+ fieldSymbol = new TypeScript.FieldSymbol(text, id.minChar, this.checker.locationInfo.unitIndex, true, field);
+ fieldSymbol.flags |= TypeScript.SymbolFlags.Property;
+ field.symbol = fieldSymbol;
+ fieldSymbol.typeCheckStatus = this.checker.getTypeCheckFinishedStatus();
+ field.typeLink = new TypeScript.TypeLink();
+ field.typeLink.type = memberType;
+ resultType.members.publicMembers.add(text, fieldSymbol);
+ }
+ fieldSymbol.isObjectLitField = true;
+ }
+ }
+ this.thisType = prevThisType;
+ objectLit.type = resultType;
+ if(targetType) {
+ objectLit.targetType = targetType;
+ }
+ };
+ TypeFlow.prototype.typeCheckArrayLit = function (arrayLit) {
+ var elements = arrayLit.operand;
+ var elementType = this.anyType;
+ var targetElementType = null;
+ var comparisonInfo = new TypeScript.TypeComparisonInfo();
+ comparisonInfo.onlyCaptureFirstError = true;
+ if(this.checker.hasTargetType()) {
+ var targetType = this.checker.getTargetTypeContext().contextualType;
+ if(targetType.elementType) {
+ targetElementType = targetType.elementType;
+ }
+ }
+ if(elements) {
+ var prevInArrayElemTypeCheck = this.inArrayElementTypeCheck;
+ this.inArrayElementTypeCheck = true;
+ this.checker.typeCheckWithContextualType(targetElementType, this.checker.inProvisionalTypecheckMode(), targetElementType != null, elements);
+ this.inArrayElementTypeCheck = prevInArrayElemTypeCheck;
+ elementType = elements.members[0].type;
+ var collection = {
+ getLength: function () {
+ return elements.members.length;
+ },
+ setTypeAtIndex: function (index, type) {
+ elements.members[index].type = type;
+ },
+ getTypeAtIndex: function (index) {
+ return elements.members[index].type;
+ }
+ };
+ elementType = this.checker.findBestCommonType(elementType, targetElementType, collection, false, comparisonInfo);
+ if(elementType == this.checker.undefinedType || (!prevInArrayElemTypeCheck && elementType == this.nullType)) {
+ elementType = this.anyType;
+ }
+ }
+ if(!elementType) {
+ var emsg = "Incompatible types in array literal expression";
+ if(!comparisonInfo.message) {
+ this.checker.errorReporter.simpleError(arrayLit, emsg);
+ } else {
+ this.checker.errorReporter.simpleError(arrayLit, emsg + ": " + comparisonInfo.message);
+ }
+ elementType = this.anyType;
+ } else {
+ if(targetElementType) {
+ if(this.checker.sourceIsAssignableToTarget(elementType, targetElementType)) {
+ elementType = targetElementType;
+ }
+ }
+ }
+ arrayLit.type = this.checker.makeArrayType(elementType);
+ };
+ TypeFlow.prototype.checkForVoidConstructor = function (type, ast) {
+ if(type && type.construct && type.construct.signatures.length > 0) {
+ for(var i = 0; i < type.construct.signatures.length; i++) {
+ if(type.construct.signatures[i].returnType.type == this.checker.voidType) {
+ this.checker.errorReporter.simpleError(ast, "Constructors may not have a return type of 'void'");
+ break;
+ }
+ }
+ }
+ };
+ TypeFlow.prototype.typeCheckReturn = function (returnStmt) {
+ if(this.thisFnc) {
+ var targetType = null;
+ if(this.checker.hasTargetType()) {
+ var tcContext = this.checker.getTargetTypeContext();
+ var accessorType = tcContext.targetAccessorType;
+ if(accessorType) {
+ targetType = accessorType;
+ } else {
+ var targetSig = this.checker.getTargetTypeContext().targetSig;
+ if(targetSig && targetSig.returnType.type != this.voidType) {
+ targetType = targetSig.returnType.type;
+ }
+ }
+ }
+ if(returnStmt.returnExpression) {
+ this.thisFnc.fncFlags |= TypeScript.FncFlags.HasReturnExpression;
+ if(targetType == null && this.thisFnc.returnTypeAnnotation && this.thisFnc.returnTypeAnnotation.type && this.thisFnc.returnTypeAnnotation.type != this.voidType) {
+ targetType = this.thisFnc.returnTypeAnnotation.type;
+ }
+ this.checker.typeCheckWithContextualType(targetType, this.checker.inProvisionalTypecheckMode(), targetType != null, returnStmt.returnExpression);
+ var expectedReturnType = (this.thisFnc.returnTypeAnnotation && this.thisFnc.returnTypeAnnotation.type) ? this.thisFnc.returnTypeAnnotation.type : targetType;
+ if(expectedReturnType) {
+ if(expectedReturnType == this.voidType && returnStmt.returnExpression.type != this.voidType) {
+ this.checker.errorReporter.simpleError(returnStmt, "Return with value expression in void function");
+ returnStmt.type = returnStmt.returnExpression.type;
+ } else {
+ returnStmt.returnExpression = this.cast(returnStmt.returnExpression, expectedReturnType);
+ returnStmt.type = expectedReturnType;
+ }
+ } else {
+ if(targetType) {
+ if(returnStmt.returnExpression.type != this.voidType) {
+ returnStmt.returnExpression = this.cast(returnStmt.returnExpression, targetType);
+ } else {
+ returnStmt.returnExpression.type = targetType;
+ }
+ }
+ returnStmt.type = returnStmt.returnExpression.type;
+ }
+ this.thisFnc.returnStatementsWithExpressions[this.thisFnc.returnStatementsWithExpressions.length] = returnStmt;
+ } else {
+ returnStmt.type = targetType == null ? this.checker.voidType : targetType;
+ }
+ }
+ return returnStmt;
+ };
+ TypeFlow.prototype.typeCheckInstOf = function (ast) {
+ var binex = ast;
+ binex.operand1 = this.typeCheck(binex.operand1);
+ binex.operand2 = this.typeCheck(binex.operand2);
+ if(!((binex.operand1.type == this.checker.anyType || this.checker.sourceIsSubtypeOfTarget(binex.operand1.type, this.objectInterfaceType)) && (binex.operand2.type == this.anyType || this.checker.sourceIsSubtypeOfTarget(binex.operand2.type, this.functionInterfaceType)))) {
+ this.checker.errorReporter.simpleError(ast, "The instanceof operator requires the left operand to be of type Any or an object type, and the right operand to be of type Any or a subtype of the Function interface type");
+ }
+ binex.type = this.booleanType;
+ return binex;
+ };
+ TypeFlow.prototype.typeCheckCommaOperator = function (ast) {
+ var binex = ast;
+ binex.operand1 = this.typeCheck(binex.operand1);
+ binex.operand2 = this.typeCheck(binex.operand2);
+ binex.type = binex.operand2.type;
+ return binex;
+ };
+ TypeFlow.prototype.typeCheckLogOr = function (binex) {
+ binex.operand1 = this.typeCheck(binex.operand1);
+ binex.operand2 = this.typeCheck(binex.operand2);
+ var leftType = binex.operand1.type;
+ var rightType = binex.operand2.type;
+ if(leftType == this.checker.anyType || rightType == this.checker.anyType) {
+ binex.type = this.checker.anyType;
+ } else {
+ if(leftType == this.checker.booleanType) {
+ if(rightType == this.checker.booleanType) {
+ binex.type = this.checker.booleanType;
+ } else {
+ binex.type = this.checker.anyType;
+ }
+ } else {
+ if(leftType == this.checker.numberType) {
+ if(rightType == this.checker.numberType) {
+ binex.type = this.checker.numberType;
+ } else {
+ binex.type = this.checker.anyType;
+ }
+ } else {
+ if(leftType == this.checker.stringType) {
+ if(rightType == this.checker.stringType) {
+ binex.type = this.checker.stringType;
+ } else {
+ binex.type = this.checker.anyType;
+ }
+ } else {
+ if(this.checker.sourceIsSubtypeOfTarget(leftType, rightType)) {
+ binex.type = rightType;
+ } else {
+ if(this.checker.sourceIsSubtypeOfTarget(rightType, leftType)) {
+ binex.type = leftType;
+ } else {
+ binex.type = this.checker.anyType;
+ }
+ }
+ }
+ }
+ }
+ }
+ return binex;
+ };
+ TypeFlow.prototype.typeCheckLogAnd = function (binex) {
+ binex.operand1 = this.typeCheck(binex.operand1);
+ binex.operand2 = this.typeCheck(binex.operand2);
+ binex.type = binex.operand2.type;
+ return binex;
+ };
+ TypeFlow.prototype.tryAddCandidates = function (signature, actuals, exactCandidates, conversionCandidates, comparisonInfo) {
+ var lowerBound = signature.nonOptionalParameterCount;
+ var upperBound = signature.parameters.length;
+ var formalLen = lowerBound;
+ var acceptable = false;
+ if((actuals.length >= lowerBound) && (signature.hasVariableArgList || actuals.length <= upperBound)) {
+ formalLen = (signature.hasVariableArgList ? signature.parameters.length : actuals.length);
+ acceptable = true;
+ }
+ var repeatType = null;
+ if(acceptable || signature.hasVariableArgList) {
+ if(signature.hasVariableArgList) {
+ formalLen -= 1;
+ repeatType = (signature.parameters[formalLen]).parameter.typeLink.type;
+ repeatType = repeatType.elementType;
+ acceptable = actuals.length >= formalLen;
+ }
+ var len = actuals.length;
+ var exact = acceptable;
+ var convert = acceptable;
+ for(var i = 0; i < len; i++) {
+ var typeA;
+ if(i < formalLen) {
+ typeA = (signature.parameters[i]).parameter.typeLink.type;
+ } else {
+ typeA = repeatType;
+ }
+ var typeB = actuals[i];
+ if(!typeA || !typeB || !(this.checker.typesAreIdentical(typeA, typeB))) {
+ exact = false;
+ }
+ if(!this.checker.sourceIsAssignableToTarget(typeB, typeA, comparisonInfo)) {
+ convert = false;
+ }
+ if(!(exact || convert)) {
+ break;
+ }
+ }
+ if(exact) {
+ exactCandidates[exactCandidates.length] = signature;
+ } else {
+ if(convert && (exactCandidates.length == 0)) {
+ conversionCandidates[conversionCandidates.length] = signature;
+ }
+ }
+ }
+ };
+ TypeFlow.prototype.resolveOverload = function (application, group) {
+ var rd = this.resolutionDataCache.getResolutionData();
+ var actuals = rd.actuals;
+ var exactCandidates = rd.exactCandidates;
+ var conversionCandidates = rd.conversionCandidates;
+ var candidate = null;
+ var hasOverloads = group.signatures.length > 1;
+ var comparisonInfo = new TypeScript.TypeComparisonInfo();
+ var args = null;
+ var target = null;
+ if(application.nodeType == TypeScript.NodeType.Call || application.nodeType == TypeScript.NodeType.New) {
+ var callEx = application;
+ args = callEx.arguments;
+ target = callEx.target;
+ if(callEx.arguments) {
+ var len = callEx.arguments.members.length;
+ for(var i = 0; i < len; i++) {
+ actuals[i] = callEx.arguments.members[i].type;
+ }
+ }
+ } else {
+ if(application.nodeType == TypeScript.NodeType.Index) {
+ var binExp = application;
+ target = binExp.operand1;
+ args = new TypeScript.ASTList();
+ args.members[0] = binExp.operand2;
+ actuals[0] = binExp.operand2.type;
+ }
+ }
+ for(var j = 0, groupLen = group.signatures.length; j < groupLen; j++) {
+ var signature = group.signatures[j];
+ if(hasOverloads && signature == group.definitionSignature && !this.checker.canCallDefinitionSignature) {
+ continue;
+ }
+ if(!signature.returnType.type && signature.declAST && (signature.typeCheckStatus != TypeScript.TypeCheckStatus.Finished)) {
+ this.typeCheckFunction(signature.declAST);
+ }
+ this.tryAddCandidates(signature, actuals, exactCandidates, conversionCandidates, comparisonInfo);
+ }
+ if(exactCandidates.length == 0) {
+ var applicableCandidates = this.checker.getApplicableSignatures(conversionCandidates, args, comparisonInfo);
+ if(applicableCandidates.length > 0) {
+ var candidateInfo = this.checker.findMostApplicableSignature(applicableCandidates, args);
+ if(candidateInfo.ambiguous) {
+ this.checker.errorReporter.simpleError(target, "Ambiguous call expression - could not choose overload");
+ }
+ candidate = candidateInfo.sig;
+ } else {
+ var emsg = "Supplied parameters do not match any signature of call target";
+ if(comparisonInfo.message) {
+ this.checker.errorReporter.simpleError(target, emsg + ":\n\t" + comparisonInfo.message);
+ } else {
+ this.checker.errorReporter.simpleError(target, emsg);
+ }
+ }
+ } else {
+ if(exactCandidates.length > 1) {
+ var applicableSigs = [];
+ for(var i = 0; i < exactCandidates.length; i++) {
+ applicableSigs[i] = {
+ signature: exactCandidates[i],
+ hadProvisionalErrors: false
+ };
+ }
+ var candidateInfo = this.checker.findMostApplicableSignature(applicableSigs, args);
+ if(candidateInfo.ambiguous) {
+ this.checker.errorReporter.simpleError(target, "Ambiguous call expression - could not choose overload");
+ }
+ candidate = candidateInfo.sig;
+ } else {
+ candidate = exactCandidates[0];
+ }
+ }
+ this.resolutionDataCache.returnResolutionData(rd);
+ return candidate;
+ };
+ TypeFlow.prototype.typeCheckNew = function (ast) {
+ var callEx = ast;
+ callEx.target = this.typeCheck(callEx.target);
+ var target = callEx.target;
+ if(target.type.construct || target.type.call) {
+ this.preTypeCheckCallArgs(callEx.arguments);
+ } else {
+ callEx.arguments = this.typeCheck(callEx.arguments);
+ }
+ if(target.type == this.anyType) {
+ callEx.type = this.anyType;
+ callEx.arguments = this.typeCheck(callEx.arguments);
+ } else {
+ if(target.type.construct) {
+ var signature = this.resolveOverload(callEx, target.type.construct);
+ if(signature == null) {
+ callEx.type = this.anyType;
+ } else {
+ if(signature.returnType.type == this.voidType) {
+ callEx.type = this.anyType;
+ callEx.signature = signature;
+ } else {
+ callEx.type = signature.returnType.type;
+ callEx.signature = signature;
+ }
+ }
+ } else {
+ if(target.type.call) {
+ var signature = this.resolveOverload(callEx, target.type.call);
+ if(signature == null) {
+ callEx.type = this.anyType;
+ } else {
+ if((signature.returnType.type == this.voidType) || (signature.returnType.type == this.anyType)) {
+ callEx.type = this.anyType;
+ callEx.signature = signature;
+ } else {
+ this.checker.errorReporter.simpleError(callEx.target, "new expression only valid on constructors");
+ }
+ }
+ } else {
+ if(target.type.elementType) {
+ callEx.type = target.type;
+ } else {
+ this.checker.errorReporter.invalidCall(callEx, callEx.nodeType, this.scope);
+ callEx.type = this.anyType;
+ }
+ }
+ }
+ }
+ this.postTypeCheckCallArgs(callEx);
+ return callEx;
+ };
+ TypeFlow.prototype.preTypeCheckCallArgs = function (args) {
+ if(!args) {
+ return;
+ }
+ for(var i = 0; i < args.members.length; i++) {
+ switch(args.members[i].nodeType) {
+ case TypeScript.NodeType.FuncDecl:
+ case TypeScript.NodeType.ObjectLit:
+ case TypeScript.NodeType.ArrayLit: {
+ continue;
+
+ }
+ default: {
+ this.typeCheck(args.members[i]);
+ break;
+
+ }
+ }
+ }
+ };
+ TypeFlow.prototype.postTypeCheckCallArgs = function (callEx) {
+ var acceptedTargetType = false;
+ var i = 0;
+ if(callEx.target && callEx.target.type && callEx.signature && callEx.arguments) {
+ var sig = callEx.signature;
+ if(sig && callEx.arguments.members.length >= sig.nonOptionalParameterCount) {
+ acceptedTargetType = true;
+ var targetType = null;
+ var nonVarArgFormalParamLength = sig.hasVariableArgList ? sig.parameters.length - 1 : sig.parameters.length;
+ var nonVarArgActualParamLength = callEx.arguments.members.length < nonVarArgFormalParamLength ? callEx.arguments.members.length : nonVarArgFormalParamLength;
+ for(i = 0; i < nonVarArgActualParamLength; i++) {
+ targetType = sig.parameters[i].getType();
+ switch(callEx.arguments.members[i].nodeType) {
+ case TypeScript.NodeType.FuncDecl:
+ case TypeScript.NodeType.ObjectLit:
+ case TypeScript.NodeType.ArrayLit: {
+ this.checker.typeCheckWithContextualType(targetType, this.checker.inProvisionalTypecheckMode(), !sig.parameters[i].declAST.isParenthesized, callEx.arguments.members[i]);
+ break;
+
+ }
+ }
+ }
+ if(sig.hasVariableArgList) {
+ var varArgParamIndex = sig.nonOptionalParameterCount - 1;
+ targetType = sig.parameters[varArgParamIndex].getType();
+ if(targetType) {
+ targetType = targetType.elementType;
+ }
+ var isParenthesized = !sig.parameters[varArgParamIndex].declAST.isParenthesized;
+ for(i = nonVarArgActualParamLength; i < callEx.arguments.members.length; i++) {
+ switch(callEx.arguments.members[i].nodeType) {
+ case TypeScript.NodeType.FuncDecl:
+ case TypeScript.NodeType.ObjectLit:
+ case TypeScript.NodeType.ArrayLit: {
+ this.checker.typeCheckWithContextualType(targetType, this.checker.inProvisionalTypecheckMode(), isParenthesized, callEx.arguments.members[i]);
+ break;
+
+ }
+ }
+ }
+ }
+ }
+ }
+ if(!acceptedTargetType && callEx.arguments) {
+ this.checker.killCurrentContextualType();
+ for(i = 0; i < callEx.arguments.members.length; i++) {
+ switch(callEx.arguments.members[i].nodeType) {
+ case TypeScript.NodeType.FuncDecl:
+ case TypeScript.NodeType.ObjectLit:
+ case TypeScript.NodeType.ArrayLit: {
+ this.typeCheck(callEx.arguments.members[i]);
+ break;
+
+ }
+ default: {
+ continue;
+
+ }
+ }
+ }
+ }
+ };
+ TypeFlow.prototype.typeCheckCall = function (ast) {
+ var callEx = ast;
+ if(this.checker.styleSettings.newMustBeUsed && (ast.nodeType == TypeScript.NodeType.New)) {
+ if(TypeScript.hasFlag(ast.flags, TypeScript.ASTFlags.IsStatement)) {
+ this.checker.errorReporter.styleError(ast, "use of new expression as a statement");
+ }
+ } else {
+ if((!this.checker.styleSettings.evalOK) && (ast.nodeType == TypeScript.NodeType.Call)) {
+ if((callEx.target.nodeType == TypeScript.NodeType.Name) && ((callEx.target).text == "eval")) {
+ this.checker.errorReporter.styleError(callEx, "eval not permitted");
+ }
+ }
+ }
+ if(callEx.target.nodeType == TypeScript.NodeType.FuncDecl) {
+ (callEx.target).isInlineCallLiteral = true;
+ }
+ var prevInSuperCall = this.inSuperCall;
+ if(callEx.target.nodeType == TypeScript.NodeType.Super) {
+ this.inSuperCall = true;
+ }
+ callEx.target = this.typeCheck(callEx.target);
+ this.preTypeCheckCallArgs(callEx.arguments);
+ var target = callEx.target;
+ if((target.type == null) || (target.type == this.anyType) || (this.functionInterfaceType && target.type == this.functionInterfaceType)) {
+ callEx.type = this.anyType;
+ } else {
+ var fnType = target.type;
+ if(fnType.call) {
+ var signature = this.resolveOverload(callEx, fnType.call);
+ if(signature == null) {
+ callEx.type = this.anyType;
+ } else {
+ callEx.type = signature.returnType.type;
+ callEx.signature = signature;
+ }
+ } else {
+ if(callEx.target.nodeType == TypeScript.NodeType.Super && this.thisFnc && this.thisFnc.isConstructor && TypeScript.hasFlag(this.thisFnc.fncFlags, TypeScript.FncFlags.ClassMethod)) {
+ var signature = fnType.symbol.type.construct ? this.resolveOverload(callEx, fnType.symbol.type.construct) : null;
+ if(signature == null) {
+ callEx.type = this.anyType;
+ } else {
+ callEx.flags |= TypeScript.ASTFlags.ClassBaseConstructorCall;
+ callEx.type = signature.returnType.type;
+ callEx.signature = signature;
+ }
+ } else {
+ callEx.type = this.anyType;
+ this.checker.errorReporter.invalidCall(callEx, callEx.nodeType, this.scope);
+ }
+ }
+ }
+ this.postTypeCheckCallArgs(callEx);
+ this.inSuperCall = prevInSuperCall;
+ return callEx;
+ };
+ TypeFlow.prototype.assignScopes = function (ast) {
+ var script = ast;
+ this.checker.locationInfo = script.locationInfo;
+ var globalChain = new ScopeChain(this.checker.gloMod, null, this.globalScope);
+ var context = new TypeScript.AssignScopeContext(globalChain, this, [
+ this.checker.currentModDecl
+ ]);
+ TypeScript.getAstWalkerFactory().walk(ast, TypeScript.preAssignScopes, TypeScript.postAssignScopes, null, context);
+ };
+ TypeFlow.prototype.findMemberScope = function (enclosingScopeContext, matchFlag) {
+ var enclosingScope = enclosingScopeContext.getScope();
+ var pos = enclosingScopeContext.pos - enclosingScopeContext.getScriptFragmentPosition();
+ var scriptFragment = enclosingScopeContext.getScriptFragment();
+ var memContext = new TypeScript.MemberScopeContext(this, pos, matchFlag);
+ memContext.scope = enclosingScope;
+ if(scriptFragment.nodeType == TypeScript.NodeType.Name) {
+ return scriptFragment.type.getMemberScope(this);
+ } else {
+ TypeScript.getAstWalkerFactory().walk(scriptFragment, TypeScript.preFindMemberScope, null, null, memContext);
+ if(memContext.ast && enclosingScopeContext.enclosingClassDecl && memContext.ast.type == enclosingScopeContext.enclosingClassDecl.type.instanceType) {
+ enclosingScopeContext.publicsOnly = false;
+ }
+ if(memContext.type) {
+ return memContext.type.getMemberScope(this);
+ } else {
+ return null;
+ }
+ }
+ };
+ TypeFlow.prototype.findMemberScopeAt = function (enclosingScopeContext) {
+ return this.findMemberScope(enclosingScopeContext, TypeScript.ASTFlags.DotLHS);
+ };
+ TypeFlow.prototype.findMemberScopeAtFullAst = function (enclosingScopeContext) {
+ var matchFlag = TypeScript.ASTFlags.DotLHS;
+ var pos = enclosingScopeContext.pos;
+ var astResult = null;
+ var preFindMemberScopeFullAst = function (ast, parent, walker) {
+ if(TypeScript.isValidAstNode(ast)) {
+ if(TypeScript.hasFlag(ast.flags, matchFlag) && (pos == ast.limChar || (pos - 1) == ast.limChar)) {
+ astResult = ast;
+ walker.options.stopWalk();
+ }
+ walker.options.goChildren = (ast.minChar <= pos) && (pos <= ast.limChar);
+ }
+ return ast;
+ };
+ var preFindMemberScopeFullAstFuzy = function (ast, parent, walker) {
+ if(TypeScript.isValidAstNode(ast)) {
+ if(TypeScript.hasFlag(ast.flags, matchFlag) && ((ast.minChar < pos) && (pos <= ast.limChar))) {
+ astResult = ast;
+ }
+ walker.options.goChildren = (ast.minChar <= pos) && (pos <= ast.limChar);
+ }
+ return ast;
+ };
+ TypeScript.getAstWalkerFactory().walk(enclosingScopeContext.script, preFindMemberScopeFullAst);
+ if(astResult == null) {
+ TypeScript.getAstWalkerFactory().walk(enclosingScopeContext.script, preFindMemberScopeFullAstFuzy);
+ }
+ if(astResult && enclosingScopeContext.enclosingClassDecl && astResult.type == enclosingScopeContext.enclosingClassDecl.type.instanceType) {
+ enclosingScopeContext.publicsOnly = false;
+ }
+ if(astResult && astResult.type) {
+ return astResult.type.getMemberScope(this);
+ } else {
+ return null;
+ }
+ };
+ return TypeFlow;
+ })();
+ TypeScript.TypeFlow = TypeFlow;
+})(TypeScript || (TypeScript = {}));
+var TypeScript;
+(function (TypeScript) {
+ (function (Primitive) {
+ Primitive._map = [];
+ Primitive.None = 0;
+ Primitive.Void = 1;
+ Primitive.Double = 2;
+ Primitive.String = 4;
+ Primitive.Boolean = 8;
+ Primitive.Any = 16;
+ Primitive.Null = 32;
+ Primitive.Undefined = 64;
+ })(TypeScript.Primitive || (TypeScript.Primitive = {}));
+ var Primitive = TypeScript.Primitive;
+ var MemberName = (function () {
+ function MemberName() {
+ this.prefix = "";
+ this.suffix = "";
+ }
+ MemberName.prototype.isString = function () {
+ return false;
+ };
+ MemberName.prototype.isArray = function () {
+ return false;
+ };
+ MemberName.prototype.toString = function () {
+ return MemberName.memberNameToString(this);
+ };
+ MemberName.memberNameToString = function memberNameToString(memberName) {
+ var result = memberName.prefix;
+ if(memberName.isString()) {
+ result += (memberName).text;
+ } else {
+ var ar = memberName;
+ for(var index = 0; index < ar.entries.length; index++) {
+ result += MemberName.memberNameToString(ar.entries[index]);
+ result += ar.delim;
+ }
+ }
+ result += memberName.suffix;
+ return result;
+ }
+ MemberName.create = function create(arg1, arg2, arg3) {
+ if(typeof arg1 == "string") {
+ return new MemberNameString(arg1);
+ } else {
+ var result = new MemberNameArray();
+ if(arg2) {
+ result.prefix = arg2;
+ }
+ if(arg3) {
+ result.suffix = arg3;
+ }
+ result.entries.push(arg1);
+ return result;
+ }
+ }
+ return MemberName;
+ })();
+ TypeScript.MemberName = MemberName;
+ var MemberNameString = (function (_super) {
+ __extends(MemberNameString, _super);
+ function MemberNameString(text) {
+ _super.call(this);
+ this.text = text;
+ }
+ MemberNameString.prototype.isString = function () {
+ return true;
+ };
+ return MemberNameString;
+ })(MemberName);
+ TypeScript.MemberNameString = MemberNameString;
+ var MemberNameArray = (function (_super) {
+ __extends(MemberNameArray, _super);
+ function MemberNameArray() {
+ _super.apply(this, arguments);
+
+ this.delim = "";
+ this.entries = [];
+ }
+ MemberNameArray.prototype.isArray = function () {
+ return true;
+ };
+ MemberNameArray.prototype.add = function (entry) {
+ this.entries.push(entry);
+ };
+ MemberNameArray.prototype.addAll = function (entries) {
+ for(var i = 0; i < entries.length; i++) {
+ this.entries.push(entries[i]);
+ }
+ };
+ return MemberNameArray;
+ })(MemberName);
+ TypeScript.MemberNameArray = MemberNameArray;
+ var currentTypeID = -1;
+ var Type = (function () {
+ function Type() {
+ this.typeID = currentTypeID++;
+ this.construct = null;
+ this.call = null;
+ this.index = null;
+ this.passTypeCreated = TypeScript.CompilerDiagnostics.analysisPass;
+ this.primitiveTypeClass = Primitive.None;
+ this.typeFlags = TypeScript.TypeFlags.None;
+ }
+ Type.prototype.baseClass = function () {
+ if(this.extendsList && (this.extendsList.length > 0)) {
+ return this.extendsList[0];
+ } else {
+ return null;
+ }
+ };
+ Type.prototype.getArrayBase = function (arrInstType, checker) {
+ return this.arrayCache.specialize(arrInstType, checker);
+ };
+ Type.prototype.isClass = function () {
+ return this.instanceType != null;
+ };
+ Type.prototype.isArray = function () {
+ return this.elementType != null;
+ };
+ Type.prototype.isClassInstance = function () {
+ return this.symbol && !this.elementType && (this.symbol).type.isClass();
+ };
+ Type.prototype.getInstanceType = function () {
+ if(this.isClass()) {
+ return this.instanceType;
+ } else {
+ return this;
+ }
+ };
+ Type.prototype.hasImplementation = function () {
+ return TypeScript.hasFlag(this.typeFlags, TypeScript.TypeFlags.HasImplementation);
+ };
+ Type.prototype.setHasImplementation = function () {
+ this.typeFlags |= TypeScript.TypeFlags.HasImplementation;
+ };
+ Type.prototype.isDouble = function () {
+ return TypeScript.hasFlag(this.primitiveTypeClass, Primitive.Double);
+ };
+ Type.prototype.isString = function () {
+ return TypeScript.hasFlag(this.primitiveTypeClass, Primitive.String);
+ };
+ Type.prototype.isBoolean = function () {
+ return TypeScript.hasFlag(this.primitiveTypeClass, Primitive.Boolean);
+ };
+ Type.prototype.isNull = function () {
+ return TypeScript.hasFlag(this.primitiveTypeClass, Primitive.Null);
+ };
+ Type.prototype.getTypeName = function () {
+ return this.getMemberTypeName("", true, false, null);
+ };
+ Type.prototype.getScopedTypeName = function (scope) {
+ return this.getMemberTypeName("", true, false, scope);
+ };
+ Type.prototype.getScopedTypeNameEx = function (scope) {
+ return this.getMemberTypeNameEx("", true, false, scope);
+ };
+ Type.prototype.callCount = function () {
+ var total = 0;
+ if(this.call) {
+ total += this.call.signatures.length;
+ }
+ if(this.construct) {
+ total += this.construct.signatures.length;
+ }
+ if(this.index) {
+ total += this.index.signatures.length;
+ }
+ return total;
+ };
+ Type.prototype.getMemberTypeName = function (prefix, topLevel, isElementType, scope) {
+ var memberName = this.getMemberTypeNameEx(prefix, topLevel, isElementType, scope);
+ return memberName.toString();
+ };
+ Type.prototype.getMemberTypeNameEx = function (prefix, topLevel, isElementType, scope) {
+ if(this.elementType) {
+ return MemberName.create(this.elementType.getMemberTypeNameEx(prefix, false, true, scope), "", "[]");
+ } else {
+ if(this.symbol && this.symbol.name && this.symbol.name != "_anonymous" && (((this.call == null) && (this.construct == null) && (this.index == null)) || (TypeScript.hasFlag(this.typeFlags, TypeScript.TypeFlags.BuildingName)) || (this.members && (!this.isClass())))) {
+ var tn = this.symbol.scopeRelativeName(scope);
+ return MemberName.create(tn == "null" ? "any" : tn);
+ } else {
+ if(this.members || this.call || this.construct) {
+ if(TypeScript.hasFlag(this.typeFlags, TypeScript.TypeFlags.BuildingName)) {
+ return MemberName.create("this");
+ }
+ this.typeFlags |= TypeScript.TypeFlags.BuildingName;
+ var builder = "";
+ var allMemberNames = new MemberNameArray();
+ var curlies = isElementType || this.index != null;
+ var memCount = 0;
+ var delim = "; ";
+ if(this.members) {
+ this.members.allMembers.map(function (key, s, unused) {
+ var sym = s;
+ if(!TypeScript.hasFlag(sym.flags, TypeScript.SymbolFlags.BuiltIn)) {
+ var typeNameMember = sym.getTypeNameEx(scope);
+ if(typeNameMember.isArray() && (typeNameMember).delim == delim) {
+ allMemberNames.addAll((typeNameMember).entries);
+ } else {
+ allMemberNames.add(typeNameMember);
+ }
+ memCount++;
+ curlies = true;
+ }
+ }, null);
+ }
+ var signatureCount = this.callCount();
+ var j;
+ var len = 0;
+ var shortform = !curlies && signatureCount == 1 && topLevel;
+ if(this.call) {
+ allMemberNames.addAll(this.call.toStrings(prefix, shortform, scope));
+ }
+ if(this.construct) {
+ allMemberNames.addAll(this.construct.toStrings("new", shortform, scope));
+ }
+ if(this.index) {
+ allMemberNames.addAll(this.index.toStrings("", shortform, scope));
+ }
+ if((curlies) || ((signatureCount > 1) && topLevel)) {
+ allMemberNames.prefix = "{ ";
+ allMemberNames.suffix = "}";
+ allMemberNames.delim = delim;
+ } else {
+ if(allMemberNames.entries.length > 1) {
+ allMemberNames.delim = delim;
+ }
+ }
+ this.typeFlags &= (~TypeScript.TypeFlags.BuildingName);
+ if((signatureCount == 0) && (memCount == 0)) {
+ return MemberName.create("{}");
+ } else {
+ return allMemberNames;
+ }
+ } else {
+ return MemberName.create("{}");
+ }
+ }
+ }
+ };
+ Type.prototype.checkDecl = function (checker) {
+ if(this.isClassInstance() || this.isClass()) {
+ if(this.symbol.declAST) {
+ checker.typeFlow.inScopeTypeCheckDecl(this.symbol.declAST);
+ }
+ }
+ };
+ Type.prototype.getMemberScope = function (flow) {
+ if(this == flow.anyType) {
+ return null;
+ } else {
+ if(this.isDouble()) {
+ if(flow.numberInterfaceType) {
+ return flow.numberInterfaceType.memberScope;
+ } else {
+ return null;
+ }
+ } else {
+ if(this.isBoolean()) {
+ if(flow.booleanInterfaceType) {
+ return flow.booleanInterfaceType.memberScope;
+ } else {
+ return null;
+ }
+ } else {
+ if(this == flow.stringType) {
+ if(flow.stringInterfaceType) {
+ return flow.stringInterfaceType.memberScope;
+ } else {
+ return null;
+ }
+ } else {
+ if(this.elementType) {
+ if(flow.arrayInterfaceType) {
+ var arrInstType = this.elementType.getArrayBase(flow.arrayInterfaceType, flow.checker);
+ return arrInstType.memberScope;
+ } else {
+ return null;
+ }
+ } else {
+ return this.memberScope;
+ }
+ }
+ }
+ }
+ }
+ };
+ Type.prototype.isReferenceType = function () {
+ return this.members || this.extendsList || this.construct || this.call || this.index || this.elementType;
+ };
+ Type.prototype.specializeType = function (pattern, replacement, checker, membersOnly) {
+ if(pattern == this) {
+ return replacement;
+ }
+ var result = this;
+ if(membersOnly) {
+ if(this.isReferenceType()) {
+ result = new Type();
+ if(this.members) {
+ result.members = new TypeScript.ScopedMembers(new TypeScript.DualStringHashTable(new TypeScript.StringHashTable(), new TypeScript.StringHashTable()));
+ this.members.publicMembers.map(function (key, s, unused) {
+ var sym = s;
+ var bSym = sym.specializeType(pattern, replacement, checker);
+ result.members.addPublicMember(bSym.name, bSym);
+ }, null);
+ this.members.privateMembers.map(function (key, s, unused) {
+ var sym = s;
+ var bSym = sym.specializeType(pattern, replacement, checker);
+ result.members.addPrivateMember(bSym.name, bSym);
+ }, null);
+ }
+ if(this.ambientMembers) {
+ result.ambientMembers = new TypeScript.ScopedMembers(new TypeScript.DualStringHashTable(new TypeScript.StringHashTable(), new TypeScript.StringHashTable()));
+ this.ambientMembers.publicMembers.map(function (key, s, unused) {
+ var sym = s;
+ var bSym = sym.specializeType(pattern, replacement, checker);
+ result.ambientMembers.addPublicMember(bSym.name, bSym);
+ }, null);
+ this.ambientMembers.privateMembers.map(function (key, s, unused) {
+ var sym = s;
+ var bSym = sym.specializeType(pattern, replacement, checker);
+ result.ambientMembers.addPrivateMember(bSym.name, bSym);
+ }, null);
+ }
+ result.containedScope = checker.scopeOf(result);
+ result.memberScope = result.containedScope;
+ }
+ } else {
+ if(this.elementType) {
+ if(this.elementType == pattern) {
+ result = checker.makeArrayType(replacement);
+ } else {
+ if(this.elementType.elementType == pattern) {
+ result = checker.makeArrayType(checker.makeArrayType(replacement));
+ }
+ }
+ } else {
+ if(this.call) {
+ result = new Type();
+ result.call = this.call.specializeType(pattern, replacement, checker);
+ }
+ }
+ }
+ return result;
+ };
+ Type.prototype.hasBase = function (baseType) {
+ if(baseType == this) {
+ return true;
+ } else {
+ if(this.extendsList) {
+ for(var i = 0, len = this.extendsList.length; i < len; i++) {
+ if(this.extendsList[i].hasBase(baseType)) {
+ return true;
+ }
+ }
+ }
+ }
+ return false;
+ };
+ Type.prototype.mergeOrdered = function (b, checker, acceptVoid, comparisonInfo) {
+ if((this == checker.anyType) || (b == checker.anyType)) {
+ return checker.anyType;
+ } else {
+ if(this == b) {
+ return this;
+ } else {
+ if((b == checker.nullType) && this != checker.nullType) {
+ return this;
+ } else {
+ if((this == checker.nullType) && (b != checker.nullType)) {
+ return b;
+ } else {
+ if(acceptVoid && (b == checker.voidType) && this != checker.voidType) {
+ return this;
+ } else {
+ if(acceptVoid && (this == checker.voidType) && (b != checker.voidType)) {
+ return b;
+ } else {
+ if((b == checker.undefinedType) && this != checker.undefinedType) {
+ return this;
+ } else {
+ if((this == checker.undefinedType) && (b != checker.undefinedType)) {
+ return b;
+ } else {
+ if(this.elementType && b.elementType) {
+ if(this.elementType == b.elementType) {
+ return this;
+ } else {
+ var mergedET = this.elementType.mergeOrdered(b.elementType, checker, acceptVoid, comparisonInfo);
+ if(mergedET == null) {
+ return checker.makeArrayType(checker.anyType);
+ } else {
+ return checker.makeArrayType(mergedET);
+ }
+ }
+ } else {
+ if(checker.sourceIsSubtypeOfTarget(this, b, comparisonInfo)) {
+ return b;
+ } else {
+ if(checker.sourceIsSubtypeOfTarget(b, this, comparisonInfo)) {
+ return this;
+ } else {
+ return null;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ };
+ Type.prototype.isModuleType = function () {
+ return false;
+ };
+ Type.prototype.hasMembers = function () {
+ return this.members != null;
+ };
+ Type.prototype.getAllEnclosedTypes = function () {
+ return null;
+ };
+ Type.prototype.getAllAmbientEnclosedTypes = function () {
+ return null;
+ };
+ Type.prototype.getPublicEnclosedTypes = function () {
+ return null;
+ };
+ Type.prototype.getpublicAmbientEnclosedTypes = function () {
+ return null;
+ };
+ Type.prototype.getDocComments = function () {
+ if(this.elementType || !this.symbol) {
+ return [];
+ }
+ if(this.isClassInstance() || this.isClass()) {
+ if(this.symbol.declAST.nodeType == TypeScript.NodeType.FuncDecl) {
+ return (this.symbol.declAST).classDecl.getDocComments();
+ } else {
+ return this.symbol.getDocComments();
+ }
+ }
+ if(this.symbol.name && this.symbol.name != "_anonymous" && (((this.call == null) && (this.construct == null) && (this.index == null)) || this.members)) {
+ return this.symbol.getDocComments();
+ }
+ return [];
+ };
+ return Type;
+ })();
+ TypeScript.Type = Type;
+ var ModuleType = (function (_super) {
+ __extends(ModuleType, _super);
+ function ModuleType(enclosedTypes, ambientEnclosedTypes) {
+ _super.call(this);
+ this.enclosedTypes = enclosedTypes;
+ this.ambientEnclosedTypes = ambientEnclosedTypes;
+ this.importedModules = [];
+ }
+ ModuleType.prototype.isModuleType = function () {
+ return true;
+ };
+ ModuleType.prototype.hasMembers = function () {
+ return this.members != null || this.enclosedTypes != null;
+ };
+ ModuleType.prototype.getAllEnclosedTypes = function () {
+ return this.enclosedTypes;
+ };
+ ModuleType.prototype.getAllAmbientEnclosedTypes = function () {
+ return this.ambientEnclosedTypes;
+ };
+ ModuleType.prototype.getPublicEnclosedTypes = function () {
+ return null;
+ };
+ ModuleType.prototype.getpublicAmbientEnclosedTypes = function () {
+ return null;
+ };
+ ModuleType.findDynamicModuleNameInHashTable = function findDynamicModuleNameInHashTable(moduleType, members) {
+ var moduleName = null;
+ members.map(function (key, s, c) {
+ if(moduleName == null && !TypeScript.isQuoted(key)) {
+ var symbol = s;
+ var type = symbol.getType();
+ if(type == moduleType) {
+ moduleName = {
+ name: key,
+ symbol: symbol
+ };
+ }
+ }
+ }, null);
+ return moduleName;
+ }
+ ModuleType.prototype.findDynamicModuleName = function (moduleType) {
+ var moduleName = null;
+ moduleName = ModuleType.findDynamicModuleNameInHashTable(moduleType, this.members.allMembers);
+ if(moduleName == null) {
+ moduleName = ModuleType.findDynamicModuleNameInHashTable(moduleType, this.ambientMembers.allMembers);
+ }
+ return moduleName;
+ };
+ return ModuleType;
+ })(Type);
+ TypeScript.ModuleType = ModuleType;
+ var TypeLink = (function () {
+ function TypeLink() {
+ this.type = null;
+ this.ast = null;
+ }
+ return TypeLink;
+ })();
+ TypeScript.TypeLink = TypeLink;
+ function getTypeLink(ast, checker, autoVar) {
+ var result = new TypeLink();
+ result.ast = ast;
+ if((ast == null) && (autoVar)) {
+ result.type = checker.anyType;
+ } else {
+ result.type = null;
+ }
+ return result;
+ }
+ TypeScript.getTypeLink = getTypeLink;
+})(TypeScript || (TypeScript = {}));
+var TypeScript;
+(function (TypeScript) {
+ function stripQuotes(str) {
+ return str.replace("\"", "").replace("'", "").replace("'", "").replace("\"", "");
+ }
+ TypeScript.stripQuotes = stripQuotes;
+ function isQuoted(str) {
+ return str.indexOf("\"") != -1 || str.indexOf("'") != -1 || str.indexOf("'") != -1 || str.indexOf("\"") != -1;
+ }
+ TypeScript.isQuoted = isQuoted;
+ function quoteStr(str) {
+ return "\"" + str + "\"";
+ }
+ TypeScript.quoteStr = quoteStr;
+ function swapQuotes(str) {
+ if(str.indexOf("\"") != -1) {
+ str = str.replace("\"", "'");
+ str = str.replace("\"", "'");
+ } else {
+ str = str.replace("'", "\"");
+ str = str.replace("'", "\"");
+ }
+ return str;
+ }
+ TypeScript.swapQuotes = swapQuotes;
+ function switchToForwardSlashes(path) {
+ return path.replace(/\\/g, "/");
+ }
+ TypeScript.switchToForwardSlashes = switchToForwardSlashes;
+ function trimModName(modName) {
+ if(modName.length > 6 && modName.substring(modName.length - 6, modName.length) == ".d.str") {
+ return modName.substring(0, modName.length - 6);
+ }
+ if(modName.length > 4 && modName.substring(modName.length - 4, modName.length) == ".str") {
+ return modName.substring(0, modName.length - 4);
+ }
+ if(modName.length > 5 && modName.substring(modName.length - 5, modName.length) == ".d.ts") {
+ return modName.substring(0, modName.length - 5);
+ }
+ if(modName.length > 3 && modName.substring(modName.length - 3, modName.length) == ".ts") {
+ return modName.substring(0, modName.length - 3);
+ }
+ if(modName.length > 3 && modName.substring(modName.length - 3, modName.length) == ".js") {
+ return modName.substring(0, modName.length - 3);
+ }
+ return modName;
+ }
+ TypeScript.trimModName = trimModName;
+ function getDeclareFilePath(fname) {
+ return isSTRFile(fname) ? changePathToDSTR(fname) : isTSFile(fname) ? changePathToDTS(fname) : changePathToDTS(fname);
+ }
+ TypeScript.getDeclareFilePath = getDeclareFilePath;
+ function isFileOfExtension(fname, ext) {
+ var invariantFname = fname.toLocaleUpperCase();
+ var invariantExt = ext.toLocaleUpperCase();
+ var extLength = invariantExt.length;
+ return invariantFname.length > extLength && invariantFname.substring(invariantFname.length - extLength, invariantFname.length) == invariantExt;
+ }
+ function isJSFile(fname) {
+ return isFileOfExtension(fname, ".js");
+ }
+ TypeScript.isJSFile = isJSFile;
+ function isSTRFile(fname) {
+ return isFileOfExtension(fname, ".str");
+ }
+ TypeScript.isSTRFile = isSTRFile;
+ function isTSFile(fname) {
+ return isFileOfExtension(fname, ".ts");
+ }
+ TypeScript.isTSFile = isTSFile;
+ function isDSTRFile(fname) {
+ return isFileOfExtension(fname, ".d.str");
+ }
+ TypeScript.isDSTRFile = isDSTRFile;
+ function isDTSFile(fname) {
+ return isFileOfExtension(fname, ".d.ts");
+ }
+ TypeScript.isDTSFile = isDTSFile;
+ function getPrettyName(modPath, quote, treatAsFileName) {
+ if (typeof quote === "undefined") { quote = true; }
+ if (typeof treatAsFileName === "undefined") { treatAsFileName = false; }
+ var modName = treatAsFileName ? switchToForwardSlashes(modPath) : trimModName(stripQuotes(modPath));
+ var components = this.getPathComponents(modName);
+ return components.length ? (quote ? quoteStr(components[components.length - 1]) : components[components.length - 1]) : modPath;
+ }
+ TypeScript.getPrettyName = getPrettyName;
+ function getPathComponents(path) {
+ return path.split("/");
+ }
+ TypeScript.getPathComponents = getPathComponents;
+ function getRelativePathToFixedPath(fixedModFilePath, absoluteModPath) {
+ absoluteModPath = switchToForwardSlashes(absoluteModPath);
+ var modComponents = this.getPathComponents(absoluteModPath);
+ var fixedModComponents = this.getPathComponents(fixedModFilePath);
+ var joinStartIndex = 0;
+ for(; joinStartIndex < modComponents.length && joinStartIndex < fixedModComponents.length; joinStartIndex++) {
+ if(fixedModComponents[joinStartIndex] != modComponents[joinStartIndex]) {
+ break;
+ }
+ }
+ if(joinStartIndex != 0) {
+ var relativePath = "";
+ var relativePathComponents = modComponents.slice(joinStartIndex, modComponents.length);
+ for(; joinStartIndex < fixedModComponents.length; joinStartIndex++) {
+ if(fixedModComponents[joinStartIndex] != "") {
+ relativePath = relativePath + "../";
+ }
+ }
+ return relativePath + relativePathComponents.join("/");
+ }
+ return absoluteModPath;
+ }
+ TypeScript.getRelativePathToFixedPath = getRelativePathToFixedPath;
+ function quoteBaseName(modPath) {
+ var modName = trimModName(stripQuotes(modPath));
+ var path = getRootFilePath(modName);
+ if(path == "") {
+ return modPath;
+ } else {
+ var components = modName.split(path);
+ var fileIndex = components.length > 1 ? 1 : 0;
+ return quoteStr(components[fileIndex]);
+ }
+ }
+ TypeScript.quoteBaseName = quoteBaseName;
+ function changePathToSTR(modPath) {
+ return trimModName(stripQuotes(modPath)) + ".str";
+ }
+ TypeScript.changePathToSTR = changePathToSTR;
+ function changePathToDSTR(modPath) {
+ return trimModName(stripQuotes(modPath)) + ".d.str";
+ }
+ TypeScript.changePathToDSTR = changePathToDSTR;
+ function changePathToTS(modPath) {
+ return trimModName(stripQuotes(modPath)) + ".ts";
+ }
+ TypeScript.changePathToTS = changePathToTS;
+ function changePathToDTS(modPath) {
+ return trimModName(stripQuotes(modPath)) + ".d.ts";
+ }
+ TypeScript.changePathToDTS = changePathToDTS;
+ function isRelative(path) {
+ return path.charAt(0) == ".";
+ }
+ TypeScript.isRelative = isRelative;
+ function isRooted(path) {
+ return path.charAt(0) == "\\" || path.charAt(0) == "/" || (path.indexOf(":\\") != -1) || (path.indexOf(":/") != -1);
+ }
+ TypeScript.isRooted = isRooted;
+ function getRootFilePath(outFname) {
+ if(outFname == "") {
+ return outFname;
+ } else {
+ var isPath = outFname.indexOf("/") != -1;
+ return isPath ? filePath(outFname) : "";
+ }
+ }
+ TypeScript.getRootFilePath = getRootFilePath;
+ function filePathComponents(fullPath) {
+ fullPath = switchToForwardSlashes(fullPath);
+ var components = getPathComponents(fullPath);
+ return components.slice(0, components.length - 1);
+ }
+ TypeScript.filePathComponents = filePathComponents;
+ function filePath(fullPath) {
+ var path = filePathComponents(fullPath);
+ return path.join("/") + "/";
+ }
+ TypeScript.filePath = filePath;
+ function normalizeURL(url) {
+ var hostDomainAndPortRegex = /^(https?:\/\/[\-\w\.]+(:\d+)?\/)(.*)$/i;
+ var matches = hostDomainAndPortRegex.exec(url);
+ if(matches) {
+ var hostDomainAndPort = matches[1];
+ var actualPath = matches[3];
+ return hostDomainAndPort + normalizePath(actualPath);
+ }
+ return normalizePath(url);
+ }
+ TypeScript.normalizeURL = normalizeURL;
+ TypeScript.pathNormalizeRegExp = /\//g;
+ function normalizePath(path) {
+ path = switchToForwardSlashes(path);
+ var startedWithSep = path.charAt(0) === "/";
+ var parts = this.getPathComponents(path);
+ for(var i = 0; i < parts.length; i++) {
+ if(parts[i] === "." || parts[i] === "") {
+ parts.splice(i, 1);
+ i--;
+ }
+ if(i > 0 && parts[i] === ".." && parts[i - 1] !== "..") {
+ parts.splice(i - 1, 2);
+ i -= 2;
+ }
+ }
+ return (startedWithSep ? "/" : "") + parts.join("/");
+ }
+ TypeScript.normalizePath = normalizePath;
+ function normalizeImportPath(path) {
+ return normalizePath(path);
+ }
+ TypeScript.normalizeImportPath = normalizeImportPath;
+})(TypeScript || (TypeScript = {}));
+var TypeScript;
+(function (TypeScript) {
+ var SourceUnit = (function () {
+ function SourceUnit(path, content) {
+ this.path = path;
+ this.content = content;
+ this.referencedFiles = null;
+ }
+ SourceUnit.prototype.getText = function (start, end) {
+ return this.content.substring(start, end);
+ };
+ SourceUnit.prototype.getLength = function () {
+ return this.content.length;
+ };
+ return SourceUnit;
+ })();
+ TypeScript.SourceUnit = SourceUnit;
+ var CompilationEnvironment = (function () {
+ function CompilationEnvironment(compilationSettings, ioHost) {
+ this.compilationSettings = compilationSettings;
+ this.ioHost = ioHost;
+ this.residentCode = [];
+ this.code = [];
+ }
+ return CompilationEnvironment;
+ })();
+ TypeScript.CompilationEnvironment = CompilationEnvironment;
+ var CodeResolver = (function () {
+ function CodeResolver(environment) {
+ this.environment = environment;
+ this.visited = {
+ };
+ }
+ CodeResolver.prototype.resolveCode = function (referencePath, parentPath, performSearch, resolutionDispatcher) {
+ var resolvedFile = {
+ content: "",
+ path: referencePath
+ };
+ var ioHost = this.environment.ioHost;
+ var isRelativePath = TypeScript.isRelative(referencePath);
+ var isRootedPath = isRelativePath ? false : TypeScript.isRooted(referencePath);
+ var normalizedPath = isRelativePath ? ioHost.resolvePath(parentPath + "/" + referencePath) : (isRootedPath || !parentPath || performSearch ? referencePath : parentPath + "/" + referencePath);
+ if(!TypeScript.isSTRFile(normalizedPath) && !TypeScript.isTSFile(normalizedPath)) {
+ normalizedPath += ".ts";
+ }
+ normalizedPath = TypeScript.switchToForwardSlashes(TypeScript.stripQuotes(normalizedPath));
+ var absoluteModuleID = this.environment.compilationSettings.useCaseSensitiveFileResolution ? normalizedPath : normalizedPath.toLocaleUpperCase();
+ if(!this.visited[absoluteModuleID]) {
+ if(isRelativePath || isRootedPath || !performSearch) {
+ try {
+ TypeScript.CompilerDiagnostics.debugPrint(" Reading code from " + normalizedPath);
+ try {
+ resolvedFile.content = ioHost.readFile(normalizedPath);
+ } catch (err) {
+ try {
+ if(TypeScript.isSTRFile(normalizedPath)) {
+ normalizedPath = TypeScript.changePathToTS(normalizedPath);
+ } else {
+ if(TypeScript.isTSFile(normalizedPath)) {
+ normalizedPath = TypeScript.changePathToSTR(normalizedPath);
+ }
+ }
+ TypeScript.CompilerDiagnostics.debugPrint(" Reading code from " + normalizedPath);
+ resolvedFile.content = ioHost.readFile(normalizedPath);
+ } catch (err) {
+ normalizedPath = TypeScript.changePathToDSTR(normalizedPath);
+ TypeScript.CompilerDiagnostics.debugPrint(" Reading code from " + normalizedPath);
+ try {
+ resolvedFile.content = ioHost.readFile(normalizedPath);
+ } catch (err) {
+ normalizedPath = TypeScript.changePathToDTS(normalizedPath);
+ TypeScript.CompilerDiagnostics.debugPrint(" Reading code from " + normalizedPath);
+ resolvedFile.content = ioHost.readFile(normalizedPath);
+ }
+ }
+ }
+ TypeScript.CompilerDiagnostics.debugPrint(" Found code at " + normalizedPath);
+ resolvedFile.path = normalizedPath;
+ this.visited[absoluteModuleID] = true;
+ } catch (err) {
+ TypeScript.CompilerDiagnostics.debugPrint(" Did not find code for " + referencePath);
+ }
+ } else {
+ resolvedFile = ioHost.findFile(parentPath, normalizedPath);
+ if(!resolvedFile) {
+ if(TypeScript.isSTRFile(normalizedPath)) {
+ normalizedPath = TypeScript.changePathToTS(normalizedPath);
+ } else {
+ if(TypeScript.isTSFile(normalizedPath)) {
+ normalizedPath = TypeScript.changePathToSTR(normalizedPath);
+ }
+ }
+ resolvedFile = ioHost.findFile(parentPath, normalizedPath);
+ }
+ if(!resolvedFile) {
+ normalizedPath = TypeScript.changePathToDTS(normalizedPath);
+ resolvedFile = ioHost.findFile(parentPath, normalizedPath);
+ if(!resolvedFile) {
+ normalizedPath = TypeScript.changePathToDSTR(normalizedPath);
+ resolvedFile = ioHost.findFile(parentPath, normalizedPath);
+ }
+ }
+ if(resolvedFile) {
+ resolvedFile.path = TypeScript.switchToForwardSlashes(TypeScript.stripQuotes(resolvedFile.path));
+ TypeScript.CompilerDiagnostics.debugPrint(referencePath + " resolved to: " + resolvedFile.path);
+ resolvedFile.content = resolvedFile.content;
+ this.visited[absoluteModuleID] = true;
+ } else {
+ TypeScript.CompilerDiagnostics.debugPrint("Could not find " + referencePath);
+ }
+ }
+ if(resolvedFile && resolvedFile.content) {
+ var rootDir = ioHost.dirName(resolvedFile.path);
+ var sourceUnit = new SourceUnit(resolvedFile.path, resolvedFile.content);
+ var preProcessedFileInfo = TypeScript.preProcessFile(sourceUnit, this.environment.compilationSettings);
+ sourceUnit.referencedFiles = preProcessedFileInfo.referencedFiles;
+ for(var i = 0; i < preProcessedFileInfo.referencedFiles.length; i++) {
+ var referencedFile = preProcessedFileInfo.referencedFiles[i];
+ var normalizedPath = TypeScript.isRooted(referencedFile.path) ? referencedFile.path : rootDir + "/" + referencedFile.path;
+ normalizedPath = ioHost.resolvePath(normalizedPath);
+ if(referencePath == normalizedPath) {
+ resolutionDispatcher.postResolutionError(normalizedPath, "File contains reference to itself", null);
+ continue;
+ }
+ this.resolveCode(referencedFile.path, rootDir, false, resolutionDispatcher);
+ }
+ for(var i = 0; i < preProcessedFileInfo.importedFiles.length; i++) {
+ this.resolveCode(preProcessedFileInfo.importedFiles[i].path, rootDir, true, resolutionDispatcher);
+ }
+ resolutionDispatcher.postResolution(sourceUnit.path, sourceUnit);
+ }
+ }
+ };
+ return CodeResolver;
+ })();
+ TypeScript.CodeResolver = CodeResolver;
+})(TypeScript || (TypeScript = {}));
+var TypeScript;
+(function (TypeScript) {
+ var StyleSettings = (function () {
+ function StyleSettings() {
+ this.bitwise = false;
+ this.blockInCompoundStmt = false;
+ this.eqeqeq = false;
+ this.forin = false;
+ this.emptyBlocks = true;
+ this.newMustBeUsed = false;
+ this.requireSemi = false;
+ this.assignmentInCond = false;
+ this.eqnull = false;
+ this.evalOK = true;
+ this.innerScopeDeclEscape = true;
+ this.funcInLoop = true;
+ this.reDeclareLocal = true;
+ this.literalSubscript = true;
+ this.implicitAny = false;
+ }
+ StyleSettings.prototype.setOption = function (opt, val) {
+ var optExists = this[opt];
+ if(optExists !== undefined) {
+ this[opt] = val;
+ return true;
+ } else {
+ return false;
+ }
+ };
+ StyleSettings.prototype.parseOptions = function (str) {
+ var opts = str.split(";");
+ for(var i = 0, len = opts.length; i < len; i++) {
+ var opt = opts[i];
+ var val = true;
+ var colonIndex = opt.lastIndexOf(":");
+ if(colonIndex >= 0) {
+ var valStr = opt.substring(colonIndex + 1);
+ opt = opt.substring(0, colonIndex);
+ if(valStr == "off") {
+ val = false;
+ }
+ }
+ if(!this.setOption(opt, val)) {
+ return false;
+ }
+ }
+ return true;
+ };
+ return StyleSettings;
+ })();
+ TypeScript.StyleSettings = StyleSettings;
+ var CompilationSettings = (function () {
+ function CompilationSettings() {
+ this.styleSettings = new StyleSettings();
+ this.propagateConstants = false;
+ this.minWhitespace = false;
+ this.parseOnly = false;
+ this.errorRecovery = false;
+ this.emitComments = false;
+ this.watch = false;
+ this.exec = false;
+ this.resolve = true;
+ this.controlFlow = false;
+ this.printControlFlow = false;
+ this.controlFlowUseDef = false;
+ this.errorOnWith = true;
+ this.preprocess = true;
+ this.canCallDefinitionSignature = false;
+ this.inferPropertiesFromThisAssignment = false;
+ this.useDefaultLib = true;
+ this.codeGenTarget = TypeScript.CodeGenTarget.ES3;
+ this.moduleGenTarget = TypeScript.ModuleGenTarget.Synchronous;
+ this.outputOption = "";
+ this.mapSourceFiles = false;
+ this.generateDeclarationFiles = false;
+ this.useCaseSensitiveFileResolution = false;
+ }
+ CompilationSettings.prototype.setStyleOptions = function (str) {
+ this.styleSettings.parseOptions(str);
+ };
+ return CompilationSettings;
+ })();
+ TypeScript.CompilationSettings = CompilationSettings;
+ function getFileReferenceFromReferencePath(comment) {
+ var referencesRegEx = /^(\/\/\/\s*<reference\s+path=)('|")(.+?)\2\s*(static=('|")(.+?)\2\s*)*\/>/igm;
+ var match = referencesRegEx.exec(comment);
+ if(match) {
+ var path = TypeScript.normalizePath(match[3]);
+ var adjustedPath = TypeScript.normalizePath(path);
+ var isResident = match.length >= 7 && match[6] == "true";
+ if(isResident) {
+ TypeScript.CompilerDiagnostics.debugPrint(path + " is resident");
+ }
+ return {
+ minChar: 0,
+ limChar: 0,
+ path: TypeScript.switchToForwardSlashes(adjustedPath),
+ isResident: isResident
+ };
+ } else {
+ return null;
+ }
+ }
+ function getAdditionalDependencyPath(comment) {
+ var amdDependencyRegEx = /^(\/\/\/\s*<amd-dependency\s+path=)('|")(.+?)\2\s*(static=('|")(.+?)\2\s*)*\/>/igm;
+ var match = amdDependencyRegEx.exec(comment);
+ if(match) {
+ var path = match[3];
+ return path;
+ } else {
+ return null;
+ }
+ }
+ TypeScript.getAdditionalDependencyPath = getAdditionalDependencyPath;
+ function getImplicitImport(comment) {
+ var implicitImportRegEx = /^(\/\/\/\s*<implicit-import\s*)*\/>/igm;
+ var match = implicitImportRegEx.exec(comment);
+ if(match) {
+ return true;
+ }
+ return false;
+ }
+ TypeScript.getImplicitImport = getImplicitImport;
+ function getStyleSettings(comment, styleSettings) {
+ var styleRegEx = /^(\/\/\/\s*<style\s+)(([a-zA-Z])+=('|").+('|"))\s*\/>/igm;
+ var settings = styleRegEx.exec(comment);
+ if(settings) {
+ var settingsRegEx = /^([a-zA-Z]+=['"]on['|"])/igm;
+ settings = settingsRegEx.exec(settings[2]);
+ if(settings) {
+ for(var i = 0; i < settings.length; i++) {
+ var setting = (settings[i]).split("=");
+ var on = "\"on\"";
+ switch(setting[0]) {
+ case "blockInCompoundStmt": {
+ styleSettings.blockInCompoundStmt = setting[1] == on;
+ break;
+
+ }
+ case "eqeqeq": {
+ styleSettings.eqeqeq = setting[1] == on;
+ break;
+
+ }
+ case "forin": {
+ styleSettings.forin = setting[1] == on;
+ break;
+
+ }
+ case "emptyBlocks": {
+ styleSettings.emptyBlocks = setting[1] == on;
+ break;
+
+ }
+ case "newMustBeUsed": {
+ styleSettings.newMustBeUsed = setting[1] == on;
+ break;
+
+ }
+ case "requireSemi": {
+ styleSettings.requireSemi = setting[1] == on;
+ break;
+
+ }
+ case "assignmentInCond": {
+ styleSettings.assignmentInCond = setting[1] == on;
+ break;
+
+ }
+ case "eqnull": {
+ styleSettings.eqnull = setting[1] == on;
+ break;
+
+ }
+ case "evalOK": {
+ styleSettings.evalOK = setting[1] == on;
+ break;
+
+ }
+ case "innerScopeDeclEscape": {
+ styleSettings.innerScopeDeclEscape = setting[1] == on;
+ break;
+
+ }
+ case "funcInLoop": {
+ styleSettings.funcInLoop = setting[1] == on;
+ break;
+
+ }
+ case "reDeclareLocal": {
+ styleSettings.reDeclareLocal = setting[1] == on;
+ break;
+
+ }
+ case "literalSubscript": {
+ styleSettings.literalSubscript = setting[1] == on;
+ break;
+
+ }
+ case "implicitAny": {
+ styleSettings.implicitAny = setting[1] == on;
+ break;
+
+ }
+ }
+ }
+ }
+ }
+ }
+ TypeScript.getStyleSettings = getStyleSettings;
+ function getReferencedFiles(sourceText) {
+ var preProcessInfo = preProcessFile(sourceText, null, false);
+ return preProcessInfo.referencedFiles;
+ }
+ TypeScript.getReferencedFiles = getReferencedFiles;
+ function preProcessFile(sourceText, options, readImportFiles) {
+ if (typeof options === "undefined") { options = new CompilationSettings(); }
+ if (typeof readImportFiles === "undefined") { readImportFiles = true; }
+ var scanner = new TypeScript.Scanner();
+ scanner.resetComments();
+ scanner.setSourceText(sourceText, TypeScript.LexMode.File);
+ var tok = scanner.scan();
+ var comments = [];
+ var comment = null;
+ var leftCurlies = [];
+ var settings = options;
+ var referencedFiles = [];
+ var importedFiles = [];
+ var isLibFile = false;
+ while(tok.tokenId != TypeScript.TokenID.EndOfFile) {
+ if(readImportFiles && tok.tokenId == TypeScript.TokenID.Import) {
+ tok = scanner.scan();
+ if(tok.tokenId == TypeScript.TokenID.Identifier || TypeScript.convertTokToID(tok, false)) {
+ tok = scanner.scan();
+ if(tok.tokenId == TypeScript.TokenID.Equals) {
+ tok = scanner.scan();
+ if(tok.tokenId == TypeScript.TokenID.Module) {
+ tok = scanner.scan();
+ if(tok.tokenId == TypeScript.TokenID.OpenParen) {
+ tok = scanner.scan();
+ if(tok.tokenId == TypeScript.TokenID.StringLiteral) {
+ var ref = {
+ minChar: scanner.startPos,
+ limChar: scanner.pos,
+ path: TypeScript.stripQuotes(TypeScript.switchToForwardSlashes(tok.getText())),
+ isResident: false
+ };
+ importedFiles.push(ref);
+ }
+ }
+ }
+ }
+ }
+ }
+ if(tok.tokenId == TypeScript.TokenID.OpenBrace) {
+ leftCurlies.push(tok);
+ }
+ if(tok.tokenId == TypeScript.TokenID.CloseBrace) {
+ leftCurlies.pop();
+ }
+ tok = scanner.scan();
+ }
+ comments = scanner.getComments();
+ for(var iComment = 0; iComment < comments.length; iComment++) {
+ comment = comments[iComment];
+ if(!comment.isBlock) {
+ var referencedCode = getFileReferenceFromReferencePath(comment.getText());
+ if(referencedCode) {
+ referencedCode.minChar = comment.startPos;
+ referencedCode.limChar = referencedCode.minChar + comment.value.length;
+ referencedFiles.push(referencedCode);
+ }
+ if(settings) {
+ getStyleSettings(comment.getText(), settings.styleSettings);
+ var isNoLibRegex = /^(\/\/\/\s*<reference\s+no-default-lib=)('|")(.+?)\2\s*\/>/igm;
+ var isNoLibMatch = isNoLibRegex.exec(comment.getText());
+ if(isNoLibMatch) {
+ isLibFile = (isNoLibMatch[3] == "true");
+ }
+ }
+ }
+ }
+ return {
+ settings: settings,
+ referencedFiles: referencedFiles,
+ importedFiles: importedFiles,
+ isLibFile: isLibFile
+ };
+ }
+ TypeScript.preProcessFile = preProcessFile;
+})(TypeScript || (TypeScript = {}));
+var TypeScript;
+(function (TypeScript) {
+ var IncrementalParser = (function () {
+ function IncrementalParser(logger) {
+ this.logger = logger;
+ this.astLogger = new TypeScript.AstLogger(this.logger);
+ }
+ IncrementalParser.prototype.getEnclosingScopeContextIfSingleScopeEdit = function (previousScript, scriptId, newSourceText, editRange) {
+ this.logger.log("checkEditsInsideSingleScope(\"" + scriptId + "\")");
+ if(editRange === null) {
+ throw new Error("editRange should be valid");
+ }
+ if(editRange.isUnknown()) {
+ this.logger.log(" Bailing out because edit range is unknown");
+ return null;
+ }
+ var scope1 = TypeScript.findEnclosingScopeAt(this.logger, previousScript, newSourceText, editRange.minChar, false);
+ var scope2 = TypeScript.findEnclosingScopeAt(this.logger, previousScript, newSourceText, editRange.limChar, false);
+ if(scope1 == null || scope2 == null) {
+ this.logger.log(" Bailing out because containing scopes cannot be determined");
+ return null;
+ }
+ if(scope1.scopeStartAST !== scope2.scopeStartAST) {
+ this.logger.log(" Bailing out because edit overlaps 2 disctint scopes");
+ return null;
+ }
+ var newScopeLength = scope1.scopeStartAST.limChar - scope1.scopeStartAST.minChar + editRange.delta;
+ if(newScopeLength <= 0) {
+ this.logger.log(" Bailing out because scope has been entirely removed from new source text");
+ return null;
+ }
+ return scope1;
+ };
+ IncrementalParser.prototype.attemptIncrementalUpdateUnit = function (previousScript, scriptId, newSourceText, editRange) {
+ this.logger.log("attemptIncrementalUpdateUnit(\"" + scriptId + "\")");
+ if(editRange === null) {
+ throw new Error("editRange should be valid");
+ }
+ var scope1 = this.getEnclosingScopeContextIfSingleScopeEdit(previousScript, scriptId, newSourceText, editRange);
+ if(scope1 === null) {
+ return null;
+ }
+ var newScopeLength = scope1.scopeStartAST.limChar - scope1.scopeStartAST.minChar + editRange.delta;
+ if(newScopeLength >= newSourceText.getLength() / 2) {
+ this.logger.log(" Bailing out because range of scope to reparse (" + newScopeLength + " characters) is greater than half the size of the source text");
+ return null;
+ }
+ var parseErrors = [];
+ var errorCapture = function (minChar, charLen, message, unitIndex) {
+ parseErrors.push(new TypeScript.ErrorEntry(unitIndex, minChar, minChar + charLen, message));
+ };
+ var quickParseResult = TypeScript.quickParse(this.logger, scope1.scopeStartAST, newSourceText, scope1.scopeStartAST.minChar, scope1.scopeStartAST.minChar + newScopeLength, errorCapture);
+ if(quickParseResult.endLexState != TypeScript.LexState.Start) {
+ this.logger.log(" Bailing out because scope contains unterminated comment");
+ return null;
+ }
+ var scriptFragment = quickParseResult.Script;
+ if(scriptFragment.vars.members.length !== 0) {
+ this.logger.log(" Bailing out because new source text defines variables");
+ return null;
+ }
+ if(scriptFragment.bod.members.length !== 1) {
+ this.logger.log(" Bailing out because new source text defines more than one scope (or none)");
+ return null;
+ }
+ var oldScope = scope1.scopeStartAST;
+ var newScope = scriptFragment.bod.members[0];
+ if(oldScope.nodeType != newScope.nodeType) {
+ this.logger.log(" Bailing out because new source text does not define the same scope type as the existing scope");
+ return null;
+ }
+ if(!(oldScope).leftCurlyCount || !(oldScope).rightCurlyCount) {
+ this.logger.log(" Bailing out because sopce doesn't have left/right curly count");
+ return null;
+ }
+ if((oldScope).leftCurlyCount !== (newScope).leftCurlyCount) {
+ this.logger.log(" Bailing out because new source text contains more (or fewer) left curly braces");
+ return null;
+ }
+ if((oldScope).rightCurlyCount !== (newScope).rightCurlyCount) {
+ this.logger.log(" Bailing out because new source text contains more (or fewer) right curly braces");
+ return null;
+ }
+ if(newScope.minChar !== 0) {
+ this.logger.log(" Bailing out because new function declaration does not start at position 0");
+ return null;
+ }
+ if(newScope.limChar !== newScopeLength) {
+ this.logger.log(" Bailing out because new function declaration does not end at the new end position");
+ return null;
+ }
+ return TypeScript.UpdateUnitResult.singleScopeEdits(previousScript, scriptFragment, oldScope, newScope, editRange, parseErrors);
+ };
+ IncrementalParser.prototype.mergeTrees = function (updateResult) {
+ var _this = this;
+ TypeScript.timeFunction(this.logger, "mergeTrees()", function () {
+ var editRange = new TypeScript.ScriptEditRange(updateResult.scope1.minChar, updateResult.scope1.limChar, updateResult.editRange.delta);
+ _this.applyDeltaPosition(updateResult.script1, editRange.limChar, editRange.delta);
+ _this.applyDeltaPosition(updateResult.script2, 0, editRange.minChar);
+ _this.mergeLocationInfo(updateResult.script1, updateResult.script2, editRange);
+ _this.replaceAST(updateResult.script1, updateResult.scope1, updateResult.scope2);
+ });
+ };
+ IncrementalParser.prototype.replaceAST = function (script, oldAst, newAst) {
+ var _this = this;
+ var pre = function (cur, parent, walker) {
+ if(cur === oldAst) {
+ newAst.preComments = cur.preComments;
+ newAst.postComments = cur.postComments;
+ _this.logger.log("replaced old AST node with new one in script AST");
+ walker.options.stopWalk();
+ return newAst;
+ }
+ if(TypeScript.isValidAstNode(cur)) {
+ if(cur.limChar < oldAst.minChar || cur.minChar > oldAst.limChar) {
+ walker.options.goChildren = false;
+ }
+ }
+ return cur;
+ };
+ TypeScript.getAstWalkerFactory().walk(script, pre);
+ };
+ IncrementalParser.prototype.mergeLocationInfo = function (script, partial, editRange) {
+ var lineMap1 = script.locationInfo.lineMap;
+ var lineMap2 = partial.locationInfo.lineMap;
+ if(this.logger.information()) {
+ this.logger.log("lineMap1 (before):");
+ this.astLogger.logLinemap(lineMap1);
+ this.logger.log("lineMap2 (quick parse):");
+ this.astLogger.logLinemap(lineMap2);
+ this.logger.log("EditRange=" + editRange);
+ }
+ var i1 = 2;
+ var i2 = 2;
+ var len1 = lineMap1.length;
+ var len2 = lineMap2.length;
+ while(i1 < len1) {
+ if(lineMap1[i1] <= editRange.minChar) {
+ i1++;
+ } else {
+ if(lineMap1[i1] >= editRange.limChar) {
+ lineMap1[i1] += editRange.delta;
+ i1++;
+ } else {
+ if(i2 < len2) {
+ lineMap1.splice(i1, 0, lineMap2[i2] + editRange.minChar);
+ i1++;
+ len1++;
+ i2++;
+ } else {
+ lineMap1.splice(i1, 1);
+ len1--;
+ }
+ }
+ }
+ }
+ if(i2 < len2) {
+ if(lineMap1[len1 - 1] >= (lineMap2[i2] + editRange.minChar)) {
+ i1 = 2;
+ while(i1 < len1 && i2 < len2) {
+ if(lineMap1[i1] < (lineMap2[i2] + editRange.minChar)) {
+ i1++;
+ } else {
+ lineMap1.splice(i1, 0, lineMap2[i2] + editRange.minChar);
+ i1++;
+ len1++;
+ i2++;
+ }
+ }
+ }
+ for(; i2 < len2; i2++) {
+ lineMap1.push(lineMap2[i2] + editRange.minChar);
+ }
+ }
+ if(this.logger.information()) {
+ this.logger.log("lineMap1 (after merge):");
+ this.astLogger.logLinemap(lineMap1);
+ }
+ };
+ IncrementalParser.prototype.applyDeltaPosition = function (ast, start, delta) {
+ var applyDelta = function (ast) {
+ if(ast.minChar !== -1 && ast.minChar >= start) {
+ ast.minChar += delta;
+ }
+ if(ast.limChar !== -1 && ast.limChar >= start) {
+ ast.limChar += delta;
+ }
+ };
+ var applyDeltaToComments = function (comments) {
+ if(comments && comments.length > 0) {
+ for(var i = 0; i < comments.length; i++) {
+ applyDelta(comments[i]);
+ }
+ }
+ };
+ var pre = function (cur, parent, walker) {
+ if(cur.limChar !== -1 && cur.limChar < start) {
+ walker.options.goChildren = false;
+ }
+ applyDelta(cur);
+ applyDeltaToComments(cur.preComments);
+ applyDeltaToComments(cur.postComments);
+ return cur;
+ };
+ TypeScript.getAstWalkerFactory().walk(ast, pre);
+ };
+ return IncrementalParser;
+ })();
+ TypeScript.IncrementalParser = IncrementalParser;
+})(TypeScript || (TypeScript = {}));
+var TypeScript;
+(function (TypeScript) {
+ var DeclFileWriter = (function () {
+ function DeclFileWriter(declFile) {
+ this.declFile = declFile;
+ this.onNewLine = true;
+ }
+ DeclFileWriter.prototype.Write = function (s) {
+ this.declFile.Write(s);
+ this.onNewLine = false;
+ };
+ DeclFileWriter.prototype.WriteLine = function (s) {
+ this.declFile.WriteLine(s);
+ this.onNewLine = true;
+ };
+ DeclFileWriter.prototype.Close = function () {
+ this.declFile.Close();
+ };
+ return DeclFileWriter;
+ })();
+ TypeScript.DeclFileWriter = DeclFileWriter;
+ var DeclarationEmitter = (function () {
+ function DeclarationEmitter(checker, emitOptions, errorReporter) {
+ this.checker = checker;
+ this.emitOptions = emitOptions;
+ this.errorReporter = errorReporter;
+ this.declFile = null;
+ this.indenter = new TypeScript.Indenter();
+ this.declarationContainerStack = [];
+ this.isDottedModuleName = [];
+ this.ignoreCallbackAst = null;
+ this.singleDeclFile = null;
+ this.varListCount = 0;
+ }
+ DeclarationEmitter.prototype.getAstDeclarationContainer = function () {
+ return this.declarationContainerStack[this.declarationContainerStack.length - 1];
+ };
+ DeclarationEmitter.prototype.emitDottedModuleName = function () {
+ return (this.isDottedModuleName.length == 0) ? false : this.isDottedModuleName[this.isDottedModuleName.length - 1];
+ };
+ DeclarationEmitter.prototype.setDeclarationFile = function (file) {
+ this.declFile = new DeclFileWriter(file);
+ };
+ DeclarationEmitter.prototype.Close = function () {
+ try {
+ this.declFile.Close();
+ } catch (ex) {
+ this.errorReporter.emitterError(null, ex.message);
+ }
+ };
+ DeclarationEmitter.prototype.emitDeclarations = function (script) {
+ TypeScript.AstWalkerWithDetailCallback.walk(script, this);
+ };
+ DeclarationEmitter.prototype.getIndentString = function (declIndent) {
+ if (typeof declIndent === "undefined") { declIndent = false; }
+ if(this.emitOptions.minWhitespace) {
+ return "";
+ } else {
+ return this.indenter.getIndent();
+ }
+ };
+ DeclarationEmitter.prototype.emitIndent = function () {
+ this.declFile.Write(this.getIndentString());
+ };
+ DeclarationEmitter.prototype.canEmitSignature = function (declFlags, canEmitGlobalAmbientDecl, useDeclarationContainerTop) {
+ if (typeof canEmitGlobalAmbientDecl === "undefined") { canEmitGlobalAmbientDecl = true; }
+ if (typeof useDeclarationContainerTop === "undefined") { useDeclarationContainerTop = true; }
+ var container;
+ if(useDeclarationContainerTop) {
+ container = this.getAstDeclarationContainer();
+ } else {
+ container = this.declarationContainerStack[this.declarationContainerStack.length - 2];
+ }
+ if(container.nodeType == TypeScript.NodeType.ModuleDeclaration && !TypeScript.hasFlag(declFlags, TypeScript.DeclFlags.Exported)) {
+ return false;
+ }
+ if(!canEmitGlobalAmbientDecl && container.nodeType == TypeScript.NodeType.Script && TypeScript.hasFlag(declFlags, TypeScript.DeclFlags.Ambient)) {
+ return false;
+ }
+ return true;
+ };
+ DeclarationEmitter.prototype.canEmitPrePostAstSignature = function (declFlags, astWithPrePostCallback, preCallback) {
+ if(this.ignoreCallbackAst) {
+ TypeScript.CompilerDiagnostics.assert(this.ignoreCallbackAst != astWithPrePostCallback, "Ignore Callback AST mismatch");
+ this.ignoreCallbackAst = null;
+ return false;
+ } else {
+ if(preCallback && !this.canEmitSignature(declFlags, true, preCallback)) {
+ this.ignoreCallbackAst = astWithPrePostCallback;
+ return false;
+ }
+ }
+ return true;
+ };
+ DeclarationEmitter.prototype.getDeclFlagsString = function (declFlags, typeString) {
+ var result = this.getIndentString();
+ var accessorString = "";
+ if(TypeScript.hasFlag(declFlags, TypeScript.DeclFlags.GetAccessor)) {
+ accessorString = "get ";
+ } else {
+ if(TypeScript.hasFlag(declFlags, TypeScript.DeclFlags.SetAccessor)) {
+ accessorString = "set ";
+ }
+ }
+ var container = this.getAstDeclarationContainer();
+ if(container.nodeType == TypeScript.NodeType.ModuleDeclaration && TypeScript.hasFlag((container).modFlags, TypeScript.ModuleFlags.IsWholeFile) && TypeScript.hasFlag(declFlags, TypeScript.DeclFlags.Exported)) {
+ result += "export ";
+ }
+ if(TypeScript.hasFlag(declFlags, TypeScript.DeclFlags.LocalStatic) || TypeScript.hasFlag(declFlags, TypeScript.DeclFlags.Static)) {
+ result += "static " + accessorString;
+ } else {
+ if(TypeScript.hasFlag(declFlags, TypeScript.DeclFlags.Private)) {
+ result += "private " + accessorString;
+ } else {
+ if(TypeScript.hasFlag(declFlags, TypeScript.DeclFlags.Public)) {
+ result += "public " + accessorString;
+ } else {
+ if(accessorString == "") {
+ result += typeString + " ";
+ } else {
+ result += accessorString;
+ }
+ }
+ }
+ }
+ return result;
+ };
+ DeclarationEmitter.prototype.emitDeclFlags = function (declFlags, typeString) {
+ this.declFile.Write(this.getDeclFlagsString(declFlags, typeString));
+ };
+ DeclarationEmitter.prototype.canEmitTypeAnnotationSignature = function (declFlag) {
+ if (typeof declFlag === "undefined") { declFlag = TypeScript.DeclFlags.None; }
+ return !TypeScript.hasFlag(declFlag, TypeScript.DeclFlags.Private);
+ };
+ DeclarationEmitter.prototype.pushDeclarationContainer = function (ast) {
+ this.declarationContainerStack.push(ast);
+ };
+ DeclarationEmitter.prototype.popDeclarationContainer = function (ast) {
+ TypeScript.CompilerDiagnostics.assert(ast != this.getAstDeclarationContainer(), 'Declaration container mismatch');
+ this.declarationContainerStack.pop();
+ };
+ DeclarationEmitter.prototype.emitTypeNamesMember = function (memberName, emitIndent) {
+ if (typeof emitIndent === "undefined") { emitIndent = false; }
+ if(memberName.prefix == "{ ") {
+ if(emitIndent) {
+ this.emitIndent();
+ }
+ this.declFile.WriteLine("{");
+ this.indenter.increaseIndent();
+ emitIndent = true;
+ } else {
+ if(memberName.prefix != "") {
+ if(emitIndent) {
+ this.emitIndent();
+ }
+ this.declFile.Write(memberName.prefix);
+ emitIndent = false;
+ }
+ }
+ if(memberName.isString()) {
+ if(emitIndent) {
+ this.emitIndent();
+ }
+ this.declFile.Write((memberName).text);
+ } else {
+ var ar = memberName;
+ for(var index = 0; index < ar.entries.length; index++) {
+ this.emitTypeNamesMember(ar.entries[index], emitIndent);
+ if(ar.delim == "; ") {
+ this.declFile.WriteLine(";");
+ }
+ }
+ }
+ if(memberName.suffix == "}") {
+ this.indenter.decreaseIndent();
+ this.emitIndent();
+ this.declFile.Write(memberName.suffix);
+ } else {
+ this.declFile.Write(memberName.suffix);
+ }
+ };
+ DeclarationEmitter.prototype.emitTypeSignature = function (type) {
+ var containingScope = null;
+ var declarationContainerAst = this.getAstDeclarationContainer();
+ switch(declarationContainerAst.nodeType) {
+ case TypeScript.NodeType.ModuleDeclaration:
+ case TypeScript.NodeType.InterfaceDeclaration:
+ case TypeScript.NodeType.FuncDecl: {
+ if(declarationContainerAst.type) {
+ containingScope = declarationContainerAst.type.containedScope;
+ }
+ break;
+
+ }
+ case TypeScript.NodeType.Script: {
+ var script = declarationContainerAst;
+ if(script.bod) {
+ containingScope = script.bod.enclosingScope;
+ }
+ break;
+
+ }
+ case TypeScript.NodeType.ClassDeclaration: {
+ if(declarationContainerAst.type) {
+ containingScope = declarationContainerAst.type.instanceType.containedScope;
+ }
+ break;
+
+ }
+ default: {
+ TypeScript.CompilerDiagnostics.debugPrint("Unknown containing scope");
+
+ }
+ }
+ var typeNameMembers = type.getScopedTypeNameEx(containingScope);
+ this.emitTypeNamesMember(typeNameMembers);
+ };
+ DeclarationEmitter.prototype.emitComment = function (comment) {
+ var text = comment.getText();
+ if(this.declFile.onNewLine) {
+ this.emitIndent();
+ } else {
+ if(!comment.isBlockComment) {
+ this.declFile.WriteLine("");
+ this.emitIndent();
+ }
+ }
+ this.declFile.Write(text[0]);
+ for(var i = 1; i < text.length; i++) {
+ this.declFile.WriteLine("");
+ this.emitIndent();
+ this.declFile.Write(text[i]);
+ }
+ if(comment.endsLine || !comment.isBlockComment) {
+ this.declFile.WriteLine("");
+ } else {
+ this.declFile.Write(" ");
+ }
+ };
+ DeclarationEmitter.prototype.emitDeclarationComments = function (astOrSymbol, endLine) {
+ if (typeof endLine === "undefined") { endLine = true; }
+ if(!this.emitOptions.emitComments) {
+ return;
+ }
+ var declComments = astOrSymbol.getDocComments();
+ if(declComments.length > 0) {
+ for(var i = 0; i < declComments.length; i++) {
+ this.emitComment(declComments[i]);
+ }
+ if(endLine) {
+ if(!this.declFile.onNewLine) {
+ this.declFile.WriteLine("");
+ }
+ } else {
+ if(this.declFile.onNewLine) {
+ this.emitIndent();
+ }
+ }
+ }
+ };
+ DeclarationEmitter.prototype.VarDeclCallback = function (pre, varDecl) {
+ if(pre && this.canEmitSignature(TypeScript.ToDeclFlags(varDecl.varFlags), false)) {
+ var interfaceMember = (this.getAstDeclarationContainer().nodeType == TypeScript.NodeType.InterfaceDeclaration);
+ this.emitDeclarationComments(varDecl);
+ if(!interfaceMember) {
+ if(this.varListCount >= 0) {
+ this.emitDeclFlags(TypeScript.ToDeclFlags(varDecl.varFlags), "var");
+ this.varListCount = -this.varListCount;
+ }
+ this.declFile.Write(varDecl.id.text);
+ } else {
+ this.emitIndent();
+ this.declFile.Write(varDecl.id.text);
+ if(TypeScript.hasFlag(varDecl.id.flags, TypeScript.ASTFlags.OptionalName)) {
+ this.declFile.Write("?");
+ }
+ }
+ var type = null;
+ if(varDecl.typeExpr && varDecl.typeExpr.type) {
+ type = varDecl.typeExpr.type;
+ } else {
+ if(varDecl.sym) {
+ type = (varDecl.sym).getType();
+ if(type == this.checker.anyType) {
+ type = null;
+ }
+ }
+ }
+ if(type && this.canEmitTypeAnnotationSignature(TypeScript.ToDeclFlags(varDecl.varFlags))) {
+ this.declFile.Write(": ");
+ this.emitTypeSignature(type);
+ }
+ if(this.varListCount > 0) {
+ this.varListCount--;
+ } else {
+ if(this.varListCount < 0) {
+ this.varListCount++;
+ }
+ }
+ if(this.varListCount < 0) {
+ this.declFile.Write(", ");
+ } else {
+ this.declFile.WriteLine(";");
+ }
+ }
+ return false;
+ };
+ DeclarationEmitter.prototype.BlockCallback = function (pre, block) {
+ if(!block.isStatementBlock) {
+ if(pre) {
+ this.varListCount = block.statements.members.length;
+ } else {
+ this.varListCount = 0;
+ }
+ return true;
+ }
+ return false;
+ };
+ DeclarationEmitter.prototype.emitArgDecl = function (argDecl, funcDecl) {
+ this.emitDeclarationComments(argDecl, false);
+ this.declFile.Write(argDecl.id.text);
+ if(argDecl.isOptionalArg()) {
+ this.declFile.Write("?");
+ }
+ if((argDecl.typeExpr || argDecl.type != this.checker.anyType) && this.canEmitTypeAnnotationSignature(TypeScript.ToDeclFlags(funcDecl.fncFlags))) {
+ this.declFile.Write(": ");
+ this.emitTypeSignature(argDecl.type);
+ }
+ };
+ DeclarationEmitter.prototype.FuncDeclCallback = function (pre, funcDecl) {
+ if(!pre) {
+ return false;
+ }
+ if(funcDecl.isAccessor()) {
+ return this.emitPropertyAccessorSignature(funcDecl);
+ }
+ var isInterfaceMember = (this.getAstDeclarationContainer().nodeType == TypeScript.NodeType.InterfaceDeclaration);
+ if(funcDecl.bod) {
+ if(funcDecl.isConstructor) {
+ if(funcDecl.type.construct && funcDecl.type.construct.signatures.length > 1) {
+ return false;
+ }
+ } else {
+ if(funcDecl.type.call && funcDecl.type.call.signatures.length > 1) {
+ return false;
+ }
+ }
+ } else {
+ if(!isInterfaceMember && TypeScript.hasFlag(funcDecl.fncFlags, TypeScript.FncFlags.Private) && funcDecl.type.call && funcDecl.type.call.signatures.length > 1) {
+ var signatures = funcDecl.type.call.signatures;
+ var firstSignature = signatures[0].declAST;
+ if(firstSignature.bod) {
+ firstSignature = signatures[1].declAST;
+ }
+ if(firstSignature != funcDecl) {
+ return false;
+ }
+ }
+ }
+ if(!this.canEmitSignature(TypeScript.ToDeclFlags(funcDecl.fncFlags), false)) {
+ return false;
+ }
+ this.emitDeclarationComments(funcDecl);
+ if(funcDecl.isConstructor) {
+ this.emitIndent();
+ this.declFile.Write("constructor");
+ } else {
+ var id = funcDecl.getNameText();
+ if(!isInterfaceMember) {
+ this.emitDeclFlags(TypeScript.ToDeclFlags(funcDecl.fncFlags), "function");
+ this.declFile.Write(id);
+ } else {
+ this.emitIndent();
+ if(funcDecl.isConstructMember()) {
+ this.declFile.Write("new");
+ } else {
+ if(!funcDecl.isCallMember() && !funcDecl.isIndexerMember()) {
+ this.declFile.Write(id);
+ if(TypeScript.hasFlag(funcDecl.name.flags, TypeScript.ASTFlags.OptionalName)) {
+ this.declFile.Write("? ");
+ }
+ }
+ }
+ }
+ }
+ if(!funcDecl.isIndexerMember()) {
+ this.declFile.Write("(");
+ } else {
+ this.declFile.Write("[");
+ }
+ this.indenter.increaseIndent();
+ if(funcDecl.arguments) {
+ var argsLen = funcDecl.arguments.members.length;
+ if(funcDecl.variableArgList) {
+ argsLen--;
+ }
+ for(var i = 0; i < argsLen; i++) {
+ var argDecl = funcDecl.arguments.members[i];
+ this.emitArgDecl(argDecl, funcDecl);
+ if(i < (argsLen - 1)) {
+ this.declFile.Write(", ");
+ }
+ }
+ }
+ if(funcDecl.variableArgList) {
+ var lastArg = funcDecl.arguments.members[funcDecl.arguments.members.length - 1];
+ if(funcDecl.arguments.members.length > 1) {
+ this.declFile.Write(", ...");
+ } else {
+ this.declFile.Write("...");
+ }
+ this.emitArgDecl(lastArg, funcDecl);
+ }
+ this.indenter.decreaseIndent();
+ if(!funcDecl.isIndexerMember()) {
+ this.declFile.Write(")");
+ } else {
+ this.declFile.Write("]");
+ }
+ if(!funcDecl.isConstructor && (funcDecl.returnTypeAnnotation || funcDecl.signature.returnType.type != this.checker.anyType) && this.canEmitTypeAnnotationSignature(TypeScript.ToDeclFlags(funcDecl.fncFlags))) {
+ this.declFile.Write(": ");
+ this.emitTypeSignature(funcDecl.signature.returnType.type);
+ }
+ this.declFile.WriteLine(";");
+ return false;
+ };
+ DeclarationEmitter.prototype.emitBaseList = function (bases, qual) {
+ if(bases && (bases.members.length > 0)) {
+ this.declFile.Write(" " + qual + " ");
+ var basesLen = bases.members.length;
+ for(var i = 0; i < basesLen; i++) {
+ var baseExpr = bases.members[i];
+ var baseSymbol = baseExpr.type.symbol;
+ var baseType = baseExpr.type;
+ if(i > 0) {
+ this.declFile.Write(", ");
+ }
+ this.emitTypeSignature(baseType);
+ }
+ }
+ };
+ DeclarationEmitter.prototype.emitPropertyAccessorSignature = function (funcDecl) {
+ var accessorSymbol = funcDecl.accessorSymbol;
+ if(accessorSymbol.getter && accessorSymbol.getter.declAST != funcDecl) {
+ return false;
+ }
+ this.emitDeclarationComments(accessorSymbol);
+ this.emitDeclFlags(TypeScript.ToDeclFlags(accessorSymbol.flags), "var");
+ this.declFile.Write(funcDecl.name.text);
+ var propertyType = accessorSymbol.getType();
+ if(this.canEmitTypeAnnotationSignature(TypeScript.ToDeclFlags(accessorSymbol.flags))) {
+ this.declFile.Write(" : ");
+ this.emitTypeSignature(propertyType);
+ }
+ this.declFile.WriteLine(";");
+ return false;
+ };
+ DeclarationEmitter.prototype.emitClassMembersFromConstructorDefinition = function (funcDecl) {
+ if(funcDecl.arguments) {
+ var argsLen = funcDecl.arguments.members.length;
+ if(funcDecl.variableArgList) {
+ argsLen--;
+ }
+ for(var i = 0; i < argsLen; i++) {
+ var argDecl = funcDecl.arguments.members[i];
+ if(TypeScript.hasFlag(argDecl.varFlags, TypeScript.VarFlags.Property)) {
+ this.emitDeclarationComments(argDecl);
+ this.emitDeclFlags(TypeScript.ToDeclFlags(argDecl.varFlags), "var");
+ this.declFile.Write(argDecl.id.text);
+ if(argDecl.typeExpr && this.canEmitTypeAnnotationSignature(TypeScript.ToDeclFlags(argDecl.varFlags))) {
+ this.declFile.Write(": ");
+ this.emitTypeSignature(argDecl.type);
+ }
+ this.declFile.WriteLine(";");
+ }
+ }
+ }
+ };
+ DeclarationEmitter.prototype.ClassDeclarationCallback = function (pre, classDecl) {
+ if(!this.canEmitPrePostAstSignature(TypeScript.ToDeclFlags(classDecl.varFlags), classDecl, pre)) {
+ return false;
+ }
+ if(pre) {
+ var className = classDecl.name.text;
+ this.emitDeclarationComments(classDecl);
+ this.emitDeclFlags(TypeScript.ToDeclFlags(classDecl.varFlags), "class");
+ this.declFile.Write(className);
+ this.emitBaseList(classDecl.extendsList, "extends");
+ this.emitBaseList(classDecl.implementsList, "implements");
+ this.declFile.WriteLine(" {");
+ this.pushDeclarationContainer(classDecl);
+ this.indenter.increaseIndent();
+ if(classDecl.constructorDecl) {
+ this.emitClassMembersFromConstructorDefinition(classDecl.constructorDecl);
+ }
+ } else {
+ this.indenter.decreaseIndent();
+ this.popDeclarationContainer(classDecl);
+ this.emitIndent();
+ this.declFile.WriteLine("}");
+ }
+ return true;
+ };
+ DeclarationEmitter.prototype.InterfaceDeclarationCallback = function (pre, interfaceDecl) {
+ if(!this.canEmitPrePostAstSignature(TypeScript.ToDeclFlags(interfaceDecl.varFlags), interfaceDecl, pre)) {
+ return false;
+ }
+ if(pre) {
+ var interfaceName = interfaceDecl.name.text;
+ this.emitDeclarationComments(interfaceDecl);
+ this.emitDeclFlags(TypeScript.ToDeclFlags(interfaceDecl.varFlags), "interface");
+ this.declFile.Write(interfaceName);
+ this.emitBaseList(interfaceDecl.extendsList, "extends");
+ this.declFile.WriteLine(" {");
+ this.indenter.increaseIndent();
+ this.pushDeclarationContainer(interfaceDecl);
+ } else {
+ this.indenter.decreaseIndent();
+ this.popDeclarationContainer(interfaceDecl);
+ this.emitIndent();
+ this.declFile.WriteLine("}");
+ }
+ return true;
+ };
+ DeclarationEmitter.prototype.ImportDeclarationCallback = function (pre, importDecl) {
+ if(pre) {
+ if((this.declarationContainerStack[0]).isExternallyVisibleSymbol(importDecl.id.sym)) {
+ this.emitDeclarationComments(importDecl);
+ this.emitIndent();
+ this.declFile.Write("import ");
+ this.declFile.Write(importDecl.id.text + " = ");
+ if(importDecl.isDynamicImport) {
+ this.declFile.WriteLine("module (" + importDecl.getAliasName() + ");");
+ } else {
+ this.declFile.WriteLine(importDecl.getAliasName() + ";");
+ }
+ }
+ }
+ return false;
+ };
+ DeclarationEmitter.prototype.emitEnumSignature = function (moduleDecl) {
+ if(!this.canEmitSignature(TypeScript.ToDeclFlags(moduleDecl.modFlags))) {
+ return false;
+ }
+ this.emitDeclarationComments(moduleDecl);
+ this.emitDeclFlags(TypeScript.ToDeclFlags(moduleDecl.modFlags), "enum");
+ this.declFile.WriteLine(moduleDecl.name.text + " {");
+ this.indenter.increaseIndent();
+ var membersLen = moduleDecl.members.members.length;
+ for(var j = 1; j < membersLen; j++) {
+ var memberDecl = moduleDecl.members.members[j];
+ if(memberDecl.nodeType == TypeScript.NodeType.VarDecl) {
+ this.emitDeclarationComments(memberDecl);
+ this.emitIndent();
+ this.declFile.WriteLine((memberDecl).id.text + ",");
+ } else {
+ TypeScript.CompilerDiagnostics.assert(memberDecl.nodeType != TypeScript.NodeType.Asg, "We want to catch this");
+ }
+ }
+ this.indenter.decreaseIndent();
+ this.emitIndent();
+ this.declFile.WriteLine("}");
+ return false;
+ };
+ DeclarationEmitter.prototype.ModuleDeclarationCallback = function (pre, moduleDecl) {
+ if(TypeScript.hasFlag(moduleDecl.modFlags, TypeScript.ModuleFlags.IsWholeFile)) {
+ if(TypeScript.hasFlag(moduleDecl.modFlags, TypeScript.ModuleFlags.IsDynamic)) {
+ if(pre) {
+ if(!this.emitOptions.outputMany) {
+ this.singleDeclFile = this.declFile;
+ TypeScript.CompilerDiagnostics.assert(this.indenter.indentAmt == 0, "Indent has to be 0 when outputing new file");
+ var declareFileName = this.emitOptions.mapOutputFileName(TypeScript.stripQuotes(moduleDecl.name.sym.name), TypeScript.TypeScriptCompiler.mapToDTSFileName);
+ var useUTF8InOutputfile = moduleDecl.containsUnicodeChar || (this.emitOptions.emitComments && moduleDecl.containsUnicodeCharInComment);
+ try {
+ this.declFile = new DeclFileWriter(this.emitOptions.ioHost.createFile(declareFileName, useUTF8InOutputfile));
+ } catch (ex) {
+ this.errorReporter.emitterError(null, ex.message);
+ }
+ }
+ this.pushDeclarationContainer(moduleDecl);
+ } else {
+ if(!this.emitOptions.outputMany) {
+ TypeScript.CompilerDiagnostics.assert(this.singleDeclFile != this.declFile, "singleDeclFile cannot be null as we are going to revert back to it");
+ TypeScript.CompilerDiagnostics.assert(this.indenter.indentAmt == 0, "Indent has to be 0 when outputing new file");
+ try {
+ this.declFile.Close();
+ } catch (ex) {
+ this.errorReporter.emitterError(null, ex.message);
+ }
+ this.declFile = this.singleDeclFile;
+ }
+ this.popDeclarationContainer(moduleDecl);
+ }
+ }
+ return true;
+ }
+ if(moduleDecl.isEnum()) {
+ if(pre) {
+ this.emitEnumSignature(moduleDecl);
+ }
+ return false;
+ }
+ if(!this.canEmitPrePostAstSignature(TypeScript.ToDeclFlags(moduleDecl.modFlags), moduleDecl, pre)) {
+ return false;
+ }
+ if(pre) {
+ if(this.emitDottedModuleName()) {
+ this.dottedModuleEmit += ".";
+ } else {
+ this.dottedModuleEmit = this.getDeclFlagsString(TypeScript.ToDeclFlags(moduleDecl.modFlags), "module");
+ }
+ this.dottedModuleEmit += moduleDecl.name.text;
+ var isCurrentModuleDotted = (moduleDecl.members.members.length == 1 && moduleDecl.members.members[0].nodeType == TypeScript.NodeType.ModuleDeclaration && !(moduleDecl.members.members[0]).isEnum() && TypeScript.hasFlag((moduleDecl.members.members[0]).modFlags, TypeScript.ModuleFlags.Exported));
+ var moduleDeclComments = moduleDecl.getDocComments();
+ isCurrentModuleDotted = isCurrentModuleDotted && (moduleDeclComments == null || moduleDeclComments.length == 0);
+ this.isDottedModuleName.push(isCurrentModuleDotted);
+ this.pushDeclarationContainer(moduleDecl);
+ if(!isCurrentModuleDotted) {
+ this.emitDeclarationComments(moduleDecl);
+ this.declFile.Write(this.dottedModuleEmit);
+ this.declFile.WriteLine(" {");
+ this.indenter.increaseIndent();
+ }
+ } else {
+ if(!this.emitDottedModuleName()) {
+ this.indenter.decreaseIndent();
+ this.emitIndent();
+ this.declFile.WriteLine("}");
+ }
+ this.popDeclarationContainer(moduleDecl);
+ this.isDottedModuleName.pop();
+ }
+ return true;
+ };
+ DeclarationEmitter.prototype.ScriptCallback = function (pre, script) {
+ if(pre) {
+ if(this.emitOptions.outputMany) {
+ for(var i = 0; i < script.referencedFiles.length; i++) {
+ var referencePath = script.referencedFiles[i].path;
+ var declareFileName;
+ if(TypeScript.isRooted(referencePath)) {
+ declareFileName = this.emitOptions.mapOutputFileName(referencePath, TypeScript.TypeScriptCompiler.mapToDTSFileName);
+ } else {
+ declareFileName = TypeScript.getDeclareFilePath(script.referencedFiles[i].path);
+ }
+ this.declFile.WriteLine('/// <reference path="' + declareFileName + '" />');
+ }
+ }
+ this.pushDeclarationContainer(script);
+ } else {
+ this.popDeclarationContainer(script);
+ }
+ return true;
+ };
+ DeclarationEmitter.prototype.DefaultCallback = function (pre, ast) {
+ return !TypeScript.hasFlag(ast.flags, TypeScript.ASTFlags.IsStatement);
+ };
+ return DeclarationEmitter;
+ })();
+ TypeScript.DeclarationEmitter = DeclarationEmitter;
+})(TypeScript || (TypeScript = {}));
+var TypeScript;
+(function (TypeScript) {
+ (function (UpdateUnitKind) {
+ UpdateUnitKind._map = [];
+ UpdateUnitKind._map[0] = "Unknown";
+ UpdateUnitKind.Unknown = 0;
+ UpdateUnitKind._map[1] = "NoEdits";
+ UpdateUnitKind.NoEdits = 1;
+ UpdateUnitKind._map[2] = "EditsInsideSingleScope";
+ UpdateUnitKind.EditsInsideSingleScope = 2;
+ })(TypeScript.UpdateUnitKind || (TypeScript.UpdateUnitKind = {}));
+ var UpdateUnitKind = TypeScript.UpdateUnitKind;
+ var ScriptEditRange = (function () {
+ function ScriptEditRange(minChar, limChar, delta) {
+ this.minChar = minChar;
+ this.limChar = limChar;
+ this.delta = delta;
+ }
+ ScriptEditRange.unknown = function unknown() {
+ return new ScriptEditRange(-1, -1, -1);
+ }
+ ScriptEditRange.prototype.isUnknown = function () {
+ return this.minChar === -1 && this.limChar === -1 && this.delta === -1;
+ };
+ ScriptEditRange.prototype.containsPosition = function (pos) {
+ return (this.minChar <= pos && pos < this.limChar) || (this.minChar <= pos && pos < this.limChar + this.delta);
+ };
+ ScriptEditRange.prototype.toString = function () {
+ return "editRange(minChar=" + this.minChar + ", limChar=" + this.limChar + ", delta=" + this.delta + ")";
+ };
+ return ScriptEditRange;
+ })();
+ TypeScript.ScriptEditRange = ScriptEditRange;
+ var UpdateUnitResult = (function () {
+ function UpdateUnitResult(kind, unitIndex, script1, script2) {
+ this.kind = kind;
+ this.unitIndex = unitIndex;
+ this.script1 = script1;
+ this.script2 = script2;
+ this.scope1 = null;
+ this.scope2 = null;
+ this.editRange = null;
+ this.parseErrors = [];
+ }
+ UpdateUnitResult.noEdits = function noEdits(unitIndex) {
+ return new UpdateUnitResult(UpdateUnitKind.NoEdits, unitIndex, null, null);
+ }
+ UpdateUnitResult.unknownEdits = function unknownEdits(script1, script2, parseErrors) {
+ var result = new UpdateUnitResult(UpdateUnitKind.Unknown, script1.locationInfo.unitIndex, script1, script2);
+ result.parseErrors = parseErrors;
+ return result;
+ }
+ UpdateUnitResult.singleScopeEdits = function singleScopeEdits(script1, script2, scope1, scope2, editRange, parseErrors) {
+ var result = new UpdateUnitResult(UpdateUnitKind.EditsInsideSingleScope, script1.locationInfo.unitIndex, script1, script2);
+ result.scope1 = scope1;
+ result.scope2 = scope2;
+ result.editRange = editRange;
+ result.parseErrors = parseErrors;
+ return result;
+ }
+ return UpdateUnitResult;
+ })();
+ TypeScript.UpdateUnitResult = UpdateUnitResult;
+ var ErrorEntry = (function () {
+ function ErrorEntry(unitIndex, minChar, limChar, message) {
+ this.unitIndex = unitIndex;
+ this.minChar = minChar;
+ this.limChar = limChar;
+ this.message = message;
+ }
+ return ErrorEntry;
+ })();
+ TypeScript.ErrorEntry = ErrorEntry;
+ TypeScript.defaultSettings = new TypeScript.CompilationSettings();
+ var TypeScriptCompiler = (function () {
+ function TypeScriptCompiler(errorOutput, logger, settings) {
+ if (typeof logger === "undefined") { logger = new TypeScript.NullLogger(); }
+ if (typeof settings === "undefined") { settings = TypeScript.defaultSettings; }
+ this.errorOutput = errorOutput;
+ this.logger = logger;
+ this.settings = settings;
+ this.parser = new TypeScript.Parser();
+ this.typeFlow = null;
+ this.scripts = new TypeScript.ASTList();
+ this.units = new Array();
+ this.errorReporter = new TypeScript.ErrorReporter(this.errorOutput);
+ this.persistentTypeState = new TypeScript.PersistentGlobalTypeState(this.errorReporter);
+ this.errorReporter.parser = this.parser;
+ this.initTypeChecker(this.errorOutput);
+ this.parser.style_requireSemi = this.settings.styleSettings.requireSemi;
+ this.parser.style_funcInLoop = this.settings.styleSettings.funcInLoop;
+ this.parser.inferPropertiesFromThisAssignment = this.settings.inferPropertiesFromThisAssignment;
+ this.emitSettings = new TypeScript.EmitOptions(this.settings);
+ TypeScript.codeGenTarget = settings.codeGenTarget;
+ }
+ TypeScriptCompiler.prototype.timeFunction = function (funcDescription, func) {
+ return TypeScript.timeFunction(this.logger, funcDescription, func);
+ };
+ TypeScriptCompiler.prototype.initTypeChecker = function (errorOutput) {
+ this.persistentTypeState.refreshPersistentState();
+ this.typeChecker = new TypeScript.TypeChecker(this.persistentTypeState);
+ this.typeChecker.errorReporter = this.errorReporter;
+ this.typeChecker.checkControlFlow = this.settings.controlFlow;
+ this.typeChecker.checkControlFlowUseDef = this.settings.controlFlowUseDef;
+ this.typeChecker.printControlFlowGraph = this.settings.printControlFlow;
+ this.typeChecker.errorsOnWith = this.settings.errorOnWith;
+ this.typeChecker.styleSettings = this.settings.styleSettings;
+ this.typeChecker.canCallDefinitionSignature = this.settings.canCallDefinitionSignature;
+ this.errorReporter.checker = this.typeChecker;
+ this.setErrorOutput(this.errorOutput);
+ };
+ TypeScriptCompiler.prototype.setErrorOutput = function (outerr) {
+ this.errorOutput = outerr;
+ this.errorReporter.setErrOut(outerr);
+ this.parser.outfile = outerr;
+ };
+ TypeScriptCompiler.prototype.emitCommentsToOutput = function () {
+ this.emitSettings = new TypeScript.EmitOptions(this.settings);
+ };
+ TypeScriptCompiler.prototype.setErrorCallback = function (fn) {
+ this.parser.errorCallback = fn;
+ };
+ TypeScriptCompiler.prototype.updateUnit = function (prog, filename, setRecovery) {
+ return this.updateSourceUnit(new TypeScript.StringSourceText(prog), filename, setRecovery);
+ };
+ TypeScriptCompiler.prototype.updateSourceUnit = function (sourceText, filename, setRecovery) {
+ var _this = this;
+ return this.timeFunction("updateSourceUnit(" + filename + ")", function () {
+ var updateResult = _this.partialUpdateUnit(sourceText, filename, setRecovery);
+ return _this.applyUpdateResult(updateResult);
+ });
+ };
+ TypeScriptCompiler.prototype.applyUpdateResult = function (updateResult) {
+ switch(updateResult.kind) {
+ case UpdateUnitKind.NoEdits: {
+ return false;
+
+ }
+ case UpdateUnitKind.Unknown: {
+ this.scripts.members[updateResult.unitIndex] = updateResult.script2;
+ this.units[updateResult.unitIndex] = updateResult.script2.locationInfo;
+ for(var i = 0, len = updateResult.parseErrors.length; i < len; i++) {
+ var e = updateResult.parseErrors[i];
+ if(this.parser.errorCallback) {
+ this.parser.errorCallback(e.minChar, e.limChar - e.minChar, e.message, e.unitIndex);
+ }
+ }
+ return true;
+
+ }
+ case UpdateUnitKind.EditsInsideSingleScope: {
+ new TypeScript.IncrementalParser(this.logger).mergeTrees(updateResult);
+ return true;
+
+ }
+ }
+ };
+ TypeScriptCompiler.prototype.partialUpdateUnit = function (sourceText, filename, setRecovery) {
+ var _this = this;
+ return this.timeFunction("partialUpdateUnit(" + filename + ")", function () {
+ for(var i = 0, len = _this.units.length; i < len; i++) {
+ if(_this.units[i].filename == filename) {
+ if((_this.scripts.members[i]).isResident) {
+ return UpdateUnitResult.noEdits(i);
+ }
+ if(setRecovery) {
+ _this.parser.setErrorRecovery(null);
+ }
+ var updateResult;
+ var parseErrors = [];
+ var errorCapture = function (minChar, charLen, message, unitIndex) {
+ parseErrors.push(new ErrorEntry(unitIndex, minChar, minChar + charLen, message));
+ };
+ var svErrorCallback = _this.parser.errorCallback;
+ if(svErrorCallback) {
+ _this.parser.errorCallback = errorCapture;
+ }
+ var oldScript = _this.scripts.members[i];
+ var newScript = _this.parser.parse(sourceText, filename, i);
+ if(svErrorCallback) {
+ _this.parser.errorCallback = svErrorCallback;
+ }
+ updateResult = UpdateUnitResult.unknownEdits(oldScript, newScript, parseErrors);
+ return updateResult;
+ }
+ }
+ throw new Error("Unknown file \"" + filename + "\"");
+ });
+ };
+ TypeScriptCompiler.prototype.addUnit = function (prog, filename, keepResident, referencedFiles) {
+ if (typeof keepResident === "undefined") { keepResident = false; }
+ if (typeof referencedFiles === "undefined") { referencedFiles = []; }
+ return this.addSourceUnit(new TypeScript.StringSourceText(prog), filename, keepResident, referencedFiles);
+ };
+ TypeScriptCompiler.prototype.addSourceUnit = function (sourceText, filename, keepResident, referencedFiles) {
+ if (typeof referencedFiles === "undefined") { referencedFiles = []; }
+ var _this = this;
+ return this.timeFunction("addSourceUnit(" + filename + ", " + keepResident + ")", function () {
+ var script = _this.parser.parse(sourceText, filename, _this.units.length, TypeScript.AllowedElements.Global);
+ script.referencedFiles = referencedFiles;
+ script.isResident = keepResident;
+ _this.persistentTypeState.setCollectionMode(keepResident ? TypeScript.TypeCheckCollectionMode.Resident : TypeScript.TypeCheckCollectionMode.Transient);
+ var index = _this.units.length;
+ _this.units[index] = script.locationInfo;
+ _this.typeChecker.collectTypes(script);
+ _this.scripts.append(script);
+ return script;
+ });
+ };
+ TypeScriptCompiler.prototype.parseUnit = function (prog, filename) {
+ return this.parseSourceUnit(new TypeScript.StringSourceText(prog), filename);
+ };
+ TypeScriptCompiler.prototype.parseSourceUnit = function (sourceText, filename) {
+ this.parser.setErrorRecovery(this.errorOutput);
+ var script = this.parser.parse(sourceText, filename, 0);
+ var index = this.units.length;
+ this.units[index] = script.locationInfo;
+ this.typeChecker.collectTypes(script);
+ this.scripts.append(script);
+ };
+ TypeScriptCompiler.prototype.typeCheck = function () {
+ var _this = this;
+ return this.timeFunction("typeCheck()", function () {
+ var binder = new TypeScript.Binder(_this.typeChecker);
+ _this.typeChecker.units = _this.units;
+ binder.bind(_this.typeChecker.globalScope, _this.typeChecker.globals);
+ binder.bind(_this.typeChecker.globalScope, _this.typeChecker.ambientGlobals);
+ binder.bind(_this.typeChecker.globalScope, _this.typeChecker.globalTypes);
+ binder.bind(_this.typeChecker.globalScope, _this.typeChecker.ambientGlobalTypes);
+ _this.typeFlow = new TypeScript.TypeFlow(_this.logger, _this.typeChecker.globalScope, _this.parser, _this.typeChecker);
+ var i = 0;
+ var script = null;
+ var len = _this.scripts.members.length;
+ _this.persistentTypeState.setCollectionMode(TypeScript.TypeCheckCollectionMode.Resident);
+ for(i = 0; i < len; i++) {
+ script = _this.scripts.members[i];
+ if(!script.isResident || script.hasBeenTypeChecked) {
+ continue;
+ }
+ _this.typeFlow.assignScopes(script);
+ _this.typeFlow.initLibs();
+ }
+ for(i = 0; i < len; i++) {
+ script = _this.scripts.members[i];
+ if(!script.isResident || script.hasBeenTypeChecked) {
+ continue;
+ }
+ _this.typeFlow.typeCheck(script);
+ script.hasBeenTypeChecked = true;
+ }
+ _this.persistentTypeState.setCollectionMode(TypeScript.TypeCheckCollectionMode.Transient);
+ len = _this.scripts.members.length;
+ for(i = 0; i < len; i++) {
+ script = _this.scripts.members[i];
+ if(script.isResident) {
+ continue;
+ }
+ _this.typeFlow.assignScopes(script);
+ _this.typeFlow.initLibs();
+ }
+ for(i = 0; i < len; i++) {
+ script = _this.scripts.members[i];
+ if(script.isResident) {
+ continue;
+ }
+ _this.typeFlow.typeCheck(script);
+ }
+ return null;
+ });
+ };
+ TypeScriptCompiler.prototype.cleanASTTypesForReTypeCheck = function (ast) {
+ function cleanASTType(ast, parent) {
+ ast.type = null;
+ if(ast.nodeType == TypeScript.NodeType.VarDecl) {
+ var vardecl = ast;
+ vardecl.sym = null;
+ } else {
+ if(ast.nodeType == TypeScript.NodeType.ArgDecl) {
+ var argdecl = ast;
+ argdecl.sym = null;
+ } else {
+ if(ast.nodeType == TypeScript.NodeType.Name) {
+ var name = ast;
+ name.sym = null;
+ } else {
+ if(ast.nodeType == TypeScript.NodeType.FuncDecl) {
+ var funcdecl = ast;
+ funcdecl.signature = null;
+ funcdecl.freeVariables = new Array();
+ funcdecl.symbols = null;
+ funcdecl.accessorSymbol = null;
+ funcdecl.scopeType = null;
+ } else {
+ if(ast.nodeType == TypeScript.NodeType.ModuleDeclaration) {
+ var modDecl = ast;
+ modDecl.mod = null;
+ } else {
+ if(ast.nodeType == TypeScript.NodeType.With) {
+ (ast).withSym = null;
+ } else {
+ if(ast.nodeType == TypeScript.NodeType.Catch) {
+ (ast).containedScope = null;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ return ast;
+ }
+ TypeScript.getAstWalkerFactory().walk(ast, cleanASTType);
+ };
+ TypeScriptCompiler.prototype.cleanTypesForReTypeCheck = function () {
+ var _this = this;
+ return this.timeFunction("cleanTypesForReTypeCheck()", function () {
+ for(var i = 0, len = _this.scripts.members.length; i < len; i++) {
+ var script = _this.scripts.members[i];
+ if((script).isResident) {
+ continue;
+ }
+ _this.cleanASTTypesForReTypeCheck(script);
+ _this.typeChecker.collectTypes(script);
+ }
+ return null;
+ });
+ };
+ TypeScriptCompiler.prototype.attemptIncrementalTypeCheck = function (updateResult) {
+ return this.timeFunction("attemptIncrementalTypeCheck()", function () {
+ return false;
+ });
+ };
+ TypeScriptCompiler.prototype.reTypeCheck = function () {
+ var _this = this;
+ return this.timeFunction("reTypeCheck()", function () {
+ TypeScript.CompilerDiagnostics.analysisPass++;
+ _this.initTypeChecker(_this.errorOutput);
+ _this.persistentTypeState.setCollectionMode(TypeScript.TypeCheckCollectionMode.Transient);
+ _this.cleanTypesForReTypeCheck();
+ return _this.typeCheck();
+ });
+ };
+ TypeScriptCompiler.prototype.isDynamicModuleCompilation = function () {
+ for(var i = 0, len = this.scripts.members.length; i < len; i++) {
+ var script = this.scripts.members[i];
+ if(!script.isDeclareFile && script.topLevelMod != null) {
+ return true;
+ }
+ }
+ return false;
+ };
+ TypeScriptCompiler.prototype.updateCommonDirectoryPath = function () {
+ var commonComponents = [];
+ var commonComponentsLength = -1;
+ for(var i = 0, len = this.scripts.members.length; i < len; i++) {
+ var script = this.scripts.members[i];
+ if(script.emitRequired(this.emitSettings)) {
+ var fileName = script.locationInfo.filename;
+ var fileComponents = TypeScript.filePathComponents(fileName);
+ if(commonComponentsLength == -1) {
+ commonComponents = fileComponents;
+ commonComponentsLength = commonComponents.length;
+ } else {
+ var updatedPath = false;
+ for(var j = 0; j < commonComponentsLength && j < fileComponents.length; j++) {
+ if(commonComponents[j] != fileComponents[j]) {
+ commonComponentsLength = j;
+ updatedPath = true;
+ if(j == 0) {
+ this.errorReporter.emitterError(null, "Cannot find the common subdirectory path for the input files");
+ return;
+ }
+ break;
+ }
+ }
+ if(!updatedPath && fileComponents.length < commonComponentsLength) {
+ commonComponentsLength = fileComponents.length;
+ }
+ }
+ }
+ }
+ this.emitSettings.commonDirectoryPath = commonComponents.slice(0, commonComponentsLength).join("/") + "/";
+ if(this.emitSettings.outputOption.charAt(this.emitSettings.outputOption.length - 1) != "/") {
+ this.emitSettings.outputOption += "/";
+ }
+ };
+ TypeScriptCompiler.prototype.parseEmitOption = function (ioHost) {
+ this.emitSettings.ioHost = ioHost;
+ if(this.emitSettings.outputOption == "") {
+ this.emitSettings.outputMany = true;
+ this.emitSettings.commonDirectoryPath = "";
+ return;
+ }
+ this.emitSettings.outputOption = TypeScript.switchToForwardSlashes(this.emitSettings.ioHost.resolvePath(this.emitSettings.outputOption));
+ if(this.emitSettings.ioHost.directoryExists(this.emitSettings.outputOption)) {
+ this.emitSettings.outputMany = true;
+ } else {
+ if(this.emitSettings.ioHost.fileExists(this.emitSettings.outputOption)) {
+ this.emitSettings.outputMany = false;
+ } else {
+ this.emitSettings.outputMany = !TypeScript.isJSFile(this.emitSettings.outputOption);
+ }
+ }
+ if(this.isDynamicModuleCompilation() && !this.emitSettings.outputMany) {
+ this.errorReporter.emitterError(null, "Cannot compile dynamic modules when emitting into single file");
+ }
+ if(this.emitSettings.outputMany) {
+ this.updateCommonDirectoryPath();
+ }
+ };
+ TypeScriptCompiler.prototype.useUTF8ForFile = function (script) {
+ if(this.emitSettings.outputMany) {
+ return this.outputScriptToUTF8(script);
+ } else {
+ return this.outputScriptsToUTF8((this.scripts.members));
+ }
+ };
+ TypeScriptCompiler.mapToDTSFileName = function mapToDTSFileName(fileName, wholeFileNameReplaced) {
+ return TypeScript.getDeclareFilePath(fileName);
+ }
+ TypeScriptCompiler.prototype.canEmitDeclarations = function (script) {
+ if(!this.settings.generateDeclarationFiles) {
+ return false;
+ }
+ if(!!script && (script.isDeclareFile || script.isResident || script.bod == null)) {
+ return false;
+ }
+ return true;
+ };
+ TypeScriptCompiler.prototype.emitDeclarationsUnit = function (script, reuseEmitter, declarationEmitter) {
+ if(!this.canEmitDeclarations(script)) {
+ return null;
+ }
+ if(!declarationEmitter) {
+ var declareFileName = this.emitSettings.mapOutputFileName(script.locationInfo.filename, TypeScriptCompiler.mapToDTSFileName);
+ var declareFile = this.createFile(declareFileName, this.useUTF8ForFile(script));
+ declarationEmitter = new TypeScript.DeclarationEmitter(this.typeChecker, this.emitSettings, this.errorReporter);
+ declarationEmitter.setDeclarationFile(declareFile);
+ }
+ declarationEmitter.emitDeclarations(script);
+ if(!reuseEmitter) {
+ declarationEmitter.Close();
+ return null;
+ } else {
+ return declarationEmitter;
+ }
+ };
+ TypeScriptCompiler.prototype.emitDeclarations = function () {
+ if(!this.canEmitDeclarations()) {
+ return;
+ }
+ if(this.errorReporter.hasErrors) {
+ return;
+ }
+ if(this.scripts.members.length == 0) {
+ return;
+ }
+ var declarationEmitter = null;
+ for(var i = 0, len = this.scripts.members.length; i < len; i++) {
+ var script = this.scripts.members[i];
+ if(this.emitSettings.outputMany || declarationEmitter == null) {
+ declarationEmitter = this.emitDeclarationsUnit(script, !this.emitSettings.outputMany);
+ } else {
+ this.emitDeclarationsUnit(script, true, declarationEmitter);
+ }
+ }
+ if(declarationEmitter) {
+ declarationEmitter.Close();
+ }
+ };
+ TypeScriptCompiler.mapToFileNameExtension = function mapToFileNameExtension(extension, fileName, wholeFileNameReplaced) {
+ if(wholeFileNameReplaced) {
+ return fileName;
+ } else {
+ var splitFname = fileName.split(".");
+ splitFname.pop();
+ return splitFname.join(".") + extension;
+ }
+ }
+ TypeScriptCompiler.mapToJSFileName = function mapToJSFileName(fileName, wholeFileNameReplaced) {
+ return TypeScriptCompiler.mapToFileNameExtension(".js", fileName, wholeFileNameReplaced);
+ }
+ TypeScriptCompiler.prototype.emitUnit = function (script, reuseEmitter, emitter) {
+ if(!script.emitRequired(this.emitSettings)) {
+ return null;
+ }
+ var fname = script.locationInfo.filename;
+ if(!emitter) {
+ var outFname = this.emitSettings.mapOutputFileName(fname, TypeScriptCompiler.mapToJSFileName);
+ var outFile = this.createFile(outFname, this.useUTF8ForFile(script));
+ emitter = new TypeScript.Emitter(this.typeChecker, outFname, outFile, this.emitSettings, this.errorReporter);
+ if(this.settings.mapSourceFiles) {
+ emitter.setSourceMappings(new TypeScript.SourceMapper(fname, outFname, outFile, this.createFile(outFname + TypeScript.SourceMapper.MapFileExtension, false), this.errorReporter));
+ }
+ } else {
+ if(this.settings.mapSourceFiles) {
+ emitter.setSourceMappings(new TypeScript.SourceMapper(fname, emitter.emittingFileName, emitter.outfile, emitter.sourceMapper.sourceMapOut, this.errorReporter));
+ }
+ }
+ this.typeChecker.locationInfo = script.locationInfo;
+ emitter.emitJavascript(script, TypeScript.TokenID.Comma, false);
+ if(!reuseEmitter) {
+ emitter.Close();
+ return null;
+ } else {
+ return emitter;
+ }
+ };
+ TypeScriptCompiler.prototype.emit = function (ioHost) {
+ this.parseEmitOption(ioHost);
+ var emitter = null;
+ for(var i = 0, len = this.scripts.members.length; i < len; i++) {
+ var script = this.scripts.members[i];
+ if(this.emitSettings.outputMany || emitter == null) {
+ emitter = this.emitUnit(script, !this.emitSettings.outputMany);
+ } else {
+ this.emitUnit(script, true, emitter);
+ }
+ }
+ if(emitter) {
+ emitter.Close();
+ }
+ };
+ TypeScriptCompiler.prototype.emitToOutfile = function (outputFile) {
+ if(this.settings.mapSourceFiles) {
+ throw Error("Cannot generate source map");
+ }
+ if(this.settings.generateDeclarationFiles) {
+ throw Error("Cannot generate declaration files");
+ }
+ if(this.settings.outputOption != "") {
+ throw Error("Cannot parse output option");
+ }
+ var emitter = emitter = new TypeScript.Emitter(this.typeChecker, "stdout", outputFile, this.emitSettings, this.errorReporter);
+ ; ;
+ for(var i = 0, len = this.scripts.members.length; i < len; i++) {
+ var script = this.scripts.members[i];
+ this.typeChecker.locationInfo = script.locationInfo;
+ emitter.emitJavascript(script, TypeScript.TokenID.Comma, false);
+ }
+ };
+ TypeScriptCompiler.prototype.emitAST = function (ioHost) {
+ this.parseEmitOption(ioHost);
+ var outFile = null;
+ var context = null;
+ for(var i = 0, len = this.scripts.members.length; i < len; i++) {
+ var script = this.scripts.members[i];
+ if(this.emitSettings.outputMany || context == null) {
+ var fname = this.units[i].filename;
+ var mapToTxtFileName = function (fileName, wholeFileNameReplaced) {
+ return TypeScriptCompiler.mapToFileNameExtension(".txt", fileName, wholeFileNameReplaced);
+ };
+ var outFname = this.emitSettings.mapOutputFileName(fname, mapToTxtFileName);
+ outFile = this.createFile(outFname, this.useUTF8ForFile(script));
+ context = new TypeScript.PrintContext(outFile, this.parser);
+ }
+ TypeScript.getAstWalkerFactory().walk(script, TypeScript.prePrintAST, TypeScript.postPrintAST, null, context);
+ if(this.emitSettings.outputMany) {
+ try {
+ outFile.Close();
+ } catch (e) {
+ this.errorReporter.emitterError(null, e.message);
+ }
+ }
+ }
+ if(!this.emitSettings.outputMany) {
+ try {
+ outFile.Close();
+ } catch (e) {
+ this.errorReporter.emitterError(null, e.message);
+ }
+ }
+ };
+ TypeScriptCompiler.prototype.outputScriptToUTF8 = function (script) {
+ return script.containsUnicodeChar || (this.emitSettings.emitComments && script.containsUnicodeCharInComment);
+ };
+ TypeScriptCompiler.prototype.outputScriptsToUTF8 = function (scripts) {
+ for(var i = 0, len = scripts.length; i < len; i++) {
+ var script = scripts[i];
+ if(this.outputScriptToUTF8(script)) {
+ return true;
+ }
+ }
+ return false;
+ };
+ TypeScriptCompiler.prototype.createFile = function (fileName, useUTF8) {
+ try {
+ return this.emitSettings.ioHost.createFile(fileName, useUTF8);
+ } catch (ex) {
+ this.errorReporter.emitterError(null, ex.message);
+ }
+ };
+ return TypeScriptCompiler;
+ })();
+ TypeScript.TypeScriptCompiler = TypeScriptCompiler;
+ var ScopeEntry = (function () {
+ function ScopeEntry(name, type, sym) {
+ this.name = name;
+ this.type = type;
+ this.sym = sym;
+ }
+ return ScopeEntry;
+ })();
+ TypeScript.ScopeEntry = ScopeEntry;
+ var ScopeTraversal = (function () {
+ function ScopeTraversal(compiler) {
+ this.compiler = compiler;
+ }
+ ScopeTraversal.prototype.getScope = function (enclosingScopeContext) {
+ if(enclosingScopeContext.enclosingObjectLit && enclosingScopeContext.isMemberCompletion) {
+ return enclosingScopeContext.getObjectLiteralScope();
+ } else {
+ if(enclosingScopeContext.isMemberCompletion) {
+ if(enclosingScopeContext.useFullAst) {
+ return this.compiler.typeFlow.findMemberScopeAtFullAst(enclosingScopeContext);
+ } else {
+ return this.compiler.typeFlow.findMemberScopeAt(enclosingScopeContext);
+ }
+ } else {
+ return enclosingScopeContext.getScope();
+ }
+ }
+ };
+ ScopeTraversal.prototype.getScopeEntries = function (enclosingScopeContext) {
+ var scope = this.getScope(enclosingScopeContext);
+ if(scope == null) {
+ return [];
+ }
+ var inScopeNames = new TypeScript.StringHashTable();
+ var allSymbolNames = scope.getAllSymbolNames(enclosingScopeContext.isMemberCompletion);
+ for(var i = 0; i < allSymbolNames.length; i++) {
+ var name = allSymbolNames[i];
+ if(name == TypeScript.globalId || name == "_Core" || name == "_element") {
+ continue;
+ }
+ inScopeNames.add(name, "");
+ }
+ var svModuleDecl = this.compiler.typeChecker.currentModDecl;
+ this.compiler.typeChecker.currentModDecl = enclosingScopeContext.deepestModuleDecl;
+ var result = this.getTypeNamesForNames(enclosingScopeContext, inScopeNames.getAllKeys(), scope);
+ this.compiler.typeChecker.currentModDecl = svModuleDecl;
+ return result;
+ };
+ ScopeTraversal.prototype.getTypeNamesForNames = function (enclosingScopeContext, allNames, scope) {
+ var result = [];
+ var enclosingScope = enclosingScopeContext.getScope();
+ for(var i = 0; i < allNames.length; i++) {
+ var name = allNames[i];
+ var publicsOnly = enclosingScopeContext.publicsOnly && enclosingScopeContext.isMemberCompletion;
+ var symbol = scope.find(name, publicsOnly, false);
+ if(symbol == null) {
+ symbol = scope.find(name, publicsOnly, true);
+ }
+ var displayThisMember = symbol && symbol.flags & TypeScript.SymbolFlags.Private ? symbol.container == scope.container : true;
+ if(symbol) {
+ if(displayThisMember && !TypeScript.isQuoted(symbol.name) && !TypeScript.isRelative(symbol.name)) {
+ var typeName = symbol.getType().getScopedTypeName(enclosingScope);
+ result.push(new ScopeEntry(name, typeName, symbol));
+ }
+ } else {
+ if(name == "true" || name == "false") {
+ result.push(new ScopeEntry(name, "bool", this.compiler.typeChecker.booleanType.symbol));
+ }
+ }
+ }
+ return result;
+ };
+ return ScopeTraversal;
+ })();
+ TypeScript.ScopeTraversal = ScopeTraversal;
+})(TypeScript || (TypeScript = {}));
+var TypeScript;
+(function (TypeScript) {
+ (function (CompilerDiagnostics) {
+ CompilerDiagnostics.debug = false;
+ CompilerDiagnostics.diagnosticWriter = null;
+ CompilerDiagnostics.analysisPass = 0;
+ function Alert(output) {
+ if(CompilerDiagnostics.diagnosticWriter) {
+ CompilerDiagnostics.diagnosticWriter.Alert(output);
+ }
+ }
+ CompilerDiagnostics.Alert = Alert;
+ function debugPrint(s) {
+ if(CompilerDiagnostics.debug) {
+ Alert(s);
+ }
+ }
+ CompilerDiagnostics.debugPrint = debugPrint;
+ function assert(condition, s) {
+ if(CompilerDiagnostics.debug) {
+ if(!condition) {
+ Alert(s);
+ }
+ }
+ }
+ CompilerDiagnostics.assert = assert;
+ })(TypeScript.CompilerDiagnostics || (TypeScript.CompilerDiagnostics = {}));
+ var CompilerDiagnostics = TypeScript.CompilerDiagnostics;
+ var NullLogger = (function () {
+ function NullLogger() { }
+ NullLogger.prototype.information = function () {
+ return false;
+ };
+ NullLogger.prototype.debug = function () {
+ return false;
+ };
+ NullLogger.prototype.warning = function () {
+ return false;
+ };
+ NullLogger.prototype.error = function () {
+ return false;
+ };
+ NullLogger.prototype.fatal = function () {
+ return false;
+ };
+ NullLogger.prototype.log = function (s) {
+ };
+ return NullLogger;
+ })();
+ TypeScript.NullLogger = NullLogger;
+ var LoggerAdapter = (function () {
+ function LoggerAdapter(logger) {
+ this.logger = logger;
+ this._information = this.logger.information();
+ this._debug = this.logger.debug();
+ this._warning = this.logger.warning();
+ this._error = this.logger.error();
+ this._fatal = this.logger.fatal();
+ }
+ LoggerAdapter.prototype.information = function () {
+ return this._information;
+ };
+ LoggerAdapter.prototype.debug = function () {
+ return this._debug;
+ };
+ LoggerAdapter.prototype.warning = function () {
+ return this._warning;
+ };
+ LoggerAdapter.prototype.error = function () {
+ return this._error;
+ };
+ LoggerAdapter.prototype.fatal = function () {
+ return this._fatal;
+ };
+ LoggerAdapter.prototype.log = function (s) {
+ this.logger.log(s);
+ };
+ return LoggerAdapter;
+ })();
+ TypeScript.LoggerAdapter = LoggerAdapter;
+ var BufferedLogger = (function () {
+ function BufferedLogger() {
+ this.logContents = [];
+ }
+ BufferedLogger.prototype.information = function () {
+ return false;
+ };
+ BufferedLogger.prototype.debug = function () {
+ return false;
+ };
+ BufferedLogger.prototype.warning = function () {
+ return false;
+ };
+ BufferedLogger.prototype.error = function () {
+ return false;
+ };
+ BufferedLogger.prototype.fatal = function () {
+ return false;
+ };
+ BufferedLogger.prototype.log = function (s) {
+ this.logContents.push(s);
+ };
+ return BufferedLogger;
+ })();
+ TypeScript.BufferedLogger = BufferedLogger;
+ function timeFunction(logger, funcDescription, func) {
+ var start = +new Date();
+ var result = func();
+ var end = +new Date();
+ logger.log(funcDescription + " completed in " + (end - start) + " msec");
+ return result;
+ }
+ TypeScript.timeFunction = timeFunction;
+ function stringToLiteral(value, length) {
+ var result = "";
+ var addChar = function (index) {
+ var ch = value.charCodeAt(index);
+ switch(ch) {
+ case 9: {
+ result += "\\t";
+ break;
+
+ }
+ case 10: {
+ result += "\\n";
+ break;
+
+ }
+ case 11: {
+ result += "\\v";
+ break;
+
+ }
+ case 12: {
+ result += "\\f";
+ break;
+
+ }
+ case 13: {
+ result += "\\r";
+ break;
+
+ }
+ case 34: {
+ result += "\\\"";
+ break;
+
+ }
+ case 39: {
+ result += "\\\'";
+ break;
+
+ }
+ case 92: {
+ result += "\\";
+ break;
+
+ }
+ default: {
+ result += value.charAt(index);
+
+ }
+ }
+ };
+ var tooLong = (value.length > length);
+ if(tooLong) {
+ var mid = length >> 1;
+ for(var i = 0; i < mid; i++) {
+ addChar(i);
+ }
+ result += "(...)";
+ for(var i = value.length - mid; i < value.length; i++) {
+ addChar(i);
+ }
+ } else {
+ length = value.length;
+ for(var i = 0; i < length; i++) {
+ addChar(i);
+ }
+ }
+ return result;
+ }
+ TypeScript.stringToLiteral = stringToLiteral;
+})(TypeScript || (TypeScript = {}));
+var IOUtils;
+(function (IOUtils) {
+ function createDirectoryStructure(ioHost, dirName) {
+ if(ioHost.directoryExists(dirName)) {
+ return;
+ }
+ var parentDirectory = ioHost.dirName(dirName);
+ if(parentDirectory != "") {
+ createDirectoryStructure(ioHost, parentDirectory);
+ }
+ ioHost.createDirectory(dirName);
+ }
+ function createFileAndFolderStructure(ioHost, fileName, useUTF8) {
+ var path = ioHost.resolvePath(fileName);
+ var dirName = ioHost.dirName(path);
+ createDirectoryStructure(ioHost, dirName);
+ return ioHost.createFile(path, useUTF8);
+ }
+ IOUtils.createFileAndFolderStructure = createFileAndFolderStructure;
+ function throwIOError(message, error) {
+ var errorMessage = message;
+ if(error && error.message) {
+ errorMessage += (" " + error.message);
+ }
+ throw new Error(errorMessage);
+ }
+ IOUtils.throwIOError = throwIOError;
+})(IOUtils || (IOUtils = {}));
+
+var IO = (function () {
+ function getWindowsScriptHostIO() {
+ var fso = new ActiveXObject("Scripting.FileSystemObject");
+ var streamObjectPool = [];
+ function getStreamObject() {
+ if(streamObjectPool.length > 0) {
+ return streamObjectPool.pop();
+ } else {
+ return new ActiveXObject("ADODB.Stream");
+ }
+ }
+ function releaseStreamObject(obj) {
+ streamObjectPool.push(obj);
+ }
+ var args = [];
+ for(var i = 0; i < WScript.Arguments.length; i++) {
+ args[i] = WScript.Arguments.Item(i);
+ }
+ return {
+ readFile: function (path) {
+ try {
+ var streamObj = getStreamObject();
+ streamObj.Open();
+ streamObj.Type = 2;
+ streamObj.Charset = 'x-ansi';
+ streamObj.LoadFromFile(path);
+ var bomChar = streamObj.ReadText(2);
+ streamObj.Position = 0;
+ if((bomChar.charCodeAt(0) == 254 && bomChar.charCodeAt(1) == 255) || (bomChar.charCodeAt(0) == 255 && bomChar.charCodeAt(1) == 254)) {
+ streamObj.Charset = 'unicode';
+ } else {
+ if(bomChar.charCodeAt(0) == 239 && bomChar.charCodeAt(1) == 187) {
+ streamObj.Charset = 'utf-8';
+ }
+ }
+ var str = streamObj.ReadText(-1);
+ streamObj.Close();
+ releaseStreamObject(streamObj);
+ return str;
+ } catch (err) {
+ IOUtils.throwIOError("Error reading file \"" + path + "\".", err);
+ }
+ },
+ writeFile: function (path, contents) {
+ var file = this.createFile(path);
+ file.Write(contents);
+ file.Close();
+ },
+ fileExists: function (path) {
+ return fso.FileExists(path);
+ },
+ resolvePath: function (path) {
+ return fso.GetAbsolutePathName(path);
+ },
+ dirName: function (path) {
+ return fso.GetParentFolderName(path);
+ },
+ findFile: function (rootPath, partialFilePath) {
+ var path = fso.GetAbsolutePathName(rootPath) + "/" + partialFilePath;
+ while(true) {
+ if(fso.FileExists(path)) {
+ try {
+ var content = this.readFile(path);
+ return {
+ content: content,
+ path: path
+ };
+ } catch (err) {
+ }
+ } else {
+ rootPath = fso.GetParentFolderName(fso.GetAbsolutePathName(rootPath));
+ if(rootPath == "") {
+ return null;
+ } else {
+ path = fso.BuildPath(rootPath, partialFilePath);
+ }
+ }
+ }
+ },
+ deleteFile: function (path) {
+ try {
+ if(fso.FileExists(path)) {
+ fso.DeleteFile(path, true);
+ }
+ } catch (e) {
+ IOUtils.throwIOError("Couldn't delete file '" + path + "'.", e);
+ }
+ },
+ createFile: function (path, useUTF8) {
+ try {
+ var streamObj = getStreamObject();
+ streamObj.Charset = useUTF8 ? 'utf-8' : 'x-ansi';
+ streamObj.Open();
+ return {
+ Write: function (str) {
+ streamObj.WriteText(str, 0);
+ },
+ WriteLine: function (str) {
+ streamObj.WriteText(str, 1);
+ },
+ Close: function () {
+ try {
+ streamObj.SaveToFile(path, 2);
+ } catch (saveError) {
+ IOUtils.throwIOError("Couldn't write to file '" + path + "'.", saveError);
+ }finally {
+ if(streamObj.State != 0) {
+ streamObj.Close();
+ }
+ releaseStreamObject(streamObj);
+ }
+ }
+ };
+ } catch (creationError) {
+ IOUtils.throwIOError("Couldn't write to file '" + path + "'.", creationError);
+ }
+ },
+ directoryExists: function (path) {
+ return fso.FolderExists(path);
+ },
+ createDirectory: function (path) {
+ try {
+ if(!this.directoryExists(path)) {
+ fso.CreateFolder(path);
+ }
+ } catch (e) {
+ IOUtils.throwIOError("Couldn't create directory '" + path + "'.", e);
+ }
+ },
+ dir: function (path, spec, options) {
+ options = options || {
+ };
+ function filesInFolder(folder, root) {
+ var paths = [];
+ var fc;
+ if(options.recursive) {
+ fc = new Enumerator(folder.subfolders);
+ for(; !fc.atEnd(); fc.moveNext()) {
+ paths = paths.concat(filesInFolder(fc.item(), root + "/" + fc.item().Name));
+ }
+ }
+ fc = new Enumerator(folder.files);
+ for(; !fc.atEnd(); fc.moveNext()) {
+ if(!spec || fc.item().Name.match(spec)) {
+ paths.push(root + "/" + fc.item().Name);
+ }
+ }
+ return paths;
+ }
+ var folder = fso.GetFolder(path);
+ var paths = [];
+ return filesInFolder(folder, path);
+ },
+ print: function (str) {
+ WScript.StdOut.Write(str);
+ },
+ printLine: function (str) {
+ WScript.Echo(str);
+ },
+ arguments: args,
+ stderr: WScript.StdErr,
+ stdout: WScript.StdOut,
+ watchFile: null,
+ run: function (source, filename) {
+ try {
+ eval(source);
+ } catch (e) {
+ IOUtils.throwIOError("Error while executing file '" + filename + "'.", e);
+ }
+ },
+ getExecutingFilePath: function () {
+ return WScript.ScriptFullName;
+ },
+ quit: function (exitCode) {
+ if (typeof exitCode === "undefined") { exitCode = 0; }
+ try {
+ WScript.Quit(exitCode);
+ } catch (e) {
+ }
+ }
+ };
+ }
+ ; ;
+ function getNodeIO() {
+ var _fs = require('fs');
+ var _path = require('path');
+ var _module = require('module');
+ return {
+ readFile: function (file) {
+ try {
+ var buffer = _fs.readFileSync(file);
+ switch(buffer[0]) {
+ case 254: {
+ if(buffer[1] == 255) {
+ var i = 0;
+ while((i + 1) < buffer.length) {
+ var temp = buffer[i];
+ buffer[i] = buffer[i + 1];
+ buffer[i + 1] = temp;
+ i += 2;
+ }
+ return buffer.toString("ucs2", 2);
+ }
+ break;
+
+ }
+ case 255: {
+ if(buffer[1] == 254) {
+ return buffer.toString("ucs2", 2);
+ }
+ break;
+
+ }
+ case 239: {
+ if(buffer[1] == 187) {
+ return buffer.toString("utf8", 3);
+ }
+
+ }
+ }
+ return buffer.toString();
+ } catch (e) {
+ IOUtils.throwIOError("Error reading file \"" + file + "\".", e);
+ }
+ },
+ writeFile: _fs.writeFileSync,
+ deleteFile: function (path) {
+ try {
+ _fs.unlinkSync(path);
+ } catch (e) {
+ IOUtils.throwIOError("Couldn't delete file '" + path + "'.", e);
+ }
+ },
+ fileExists: function (path) {
+ return _fs.existsSync(path);
+ },
+ createFile: function (path, useUTF8) {
+ function mkdirRecursiveSync(path) {
+ var stats = _fs.statSync(path);
+ if(stats.isFile()) {
+ IOUtils.throwIOError("\"" + path + "\" exists but isn't a directory.", null);
+ } else {
+ if(stats.isDirectory()) {
+ return;
+ } else {
+ mkdirRecursiveSync(_path.dirname(path));
+ _fs.mkdirSync(path, 509);
+ }
+ }
+ }
+ mkdirRecursiveSync(_path.dirname(path));
+ try {
+ var fd = _fs.openSync(path, 'w');
+ } catch (e) {
+ IOUtils.throwIOError("Couldn't write to file '" + path + "'.", e);
+ }
+ return {
+ Write: function (str) {
+ _fs.writeSync(fd, str);
+ },
+ WriteLine: function (str) {
+ _fs.writeSync(fd, str + '\r\n');
+ },
+ Close: function () {
+ _fs.closeSync(fd);
+ fd = null;
+ }
+ };
+ },
+ dir: function dir(path, spec, options) {
+ options = options || {
+ };
+ function filesInFolder(folder) {
+ var paths = [];
+ var files = _fs.readdirSync(folder);
+ for(var i = 0; i < files.length; i++) {
+ var stat = _fs.statSync(folder + "/" + files[i]);
+ if(options.recursive && stat.isDirectory()) {
+ paths = paths.concat(filesInFolder(folder + "/" + files[i]));
+ } else {
+ if(stat.isFile() && (!spec || files[i].match(spec))) {
+ paths.push(folder + "/" + files[i]);
+ }
+ }
+ }
+ return paths;
+ }
+ return filesInFolder(path);
+ },
+ createDirectory: function (path) {
+ try {
+ if(!this.directoryExists(path)) {
+ _fs.mkdirSync(path);
+ }
+ } catch (e) {
+ IOUtils.throwIOError("Couldn't create directory '" + path + "'.", e);
+ }
+ },
+ directoryExists: function (path) {
+ return _fs.existsSync(path) && _fs.lstatSync(path).isDirectory();
+ },
+ resolvePath: function (path) {
+ return _path.resolve(path);
+ },
+ dirName: function (path) {
+ return _path.dirname(path);
+ },
+ findFile: function (rootPath, partialFilePath) {
+ var path = rootPath + "/" + partialFilePath;
+ while(true) {
+ if(_fs.existsSync(path)) {
+ try {
+ var content = this.readFile(path);
+ return {
+ content: content,
+ path: path
+ };
+ } catch (err) {
+ }
+ } else {
+ var parentPath = _path.resolve(rootPath, "..");
+ if(rootPath === parentPath) {
+ return null;
+ } else {
+ rootPath = parentPath;
+ path = _path.resolve(rootPath, partialFilePath);
+ }
+ }
+ }
+ },
+ print: function (str) {
+ process.stdout.write(str);
+ },
+ printLine: function (str) {
+ process.stdout.write(str + '\n');
+ },
+ arguments: process.argv.slice(2),
+ stderr: {
+ Write: function (str) {
+ process.stderr.write(str);
+ },
+ WriteLine: function (str) {
+ process.stderr.write(str + '\n');
+ },
+ Close: function () {
+ }
+ },
+ stdout: {
+ Write: function (str) {
+ process.stdout.write(str);
+ },
+ WriteLine: function (str) {
+ process.stdout.write(str + '\n');
+ },
+ Close: function () {
+ }
+ },
+ watchFile: function (filename, callback) {
+ var firstRun = true;
+ var processingChange = false;
+ var fileChanged = function (curr, prev) {
+ if(!firstRun) {
+ if(curr.mtime < prev.mtime) {
+ return;
+ }
+ _fs.unwatchFile(filename, fileChanged);
+ if(!processingChange) {
+ processingChange = true;
+ callback(filename);
+ setTimeout(function () {
+ processingChange = false;
+ }, 100);
+ }
+ }
+ firstRun = false;
+ _fs.watchFile(filename, {
+ persistent: true,
+ interval: 500
+ }, fileChanged);
+ };
+ fileChanged();
+ return {
+ filename: filename,
+ close: function () {
+ _fs.unwatchFile(filename, fileChanged);
+ }
+ };
+ },
+ run: function (source, filename) {
+ require.main.filename = filename;
+ require.main.paths = _module._nodeModulePaths(_path.dirname(_fs.realpathSync(filename)));
+ require.main._compile(source, filename);
+ },
+ getExecutingFilePath: function () {
+ return process.mainModule.filename;
+ },
+ quit: process.exit
+ };
+ }
+ ; ;
+ if(typeof ActiveXObject === "function") {
+ return getWindowsScriptHostIO();
+ } else {
+ if(typeof require === "function") {
+ return getNodeIO();
+ } else {
+ return null;
+ }
+ }
+})();
+var OptionsParser = (function () {
+ function OptionsParser(host) {
+ this.host = host;
+ this.DEFAULT_SHORT_FLAG = "-";
+ this.DEFAULT_LONG_FLAG = "--";
+ this.unnamed = [];
+ this.options = [];
+ }
+ OptionsParser.prototype.findOption = function (arg) {
+ for(var i = 0; i < this.options.length; i++) {
+ if(arg === this.options[i].short || arg === this.options[i].name) {
+ return this.options[i];
+ }
+ }
+ return null;
+ };
+ OptionsParser.prototype.printUsage = function () {
+ this.host.printLine("Syntax: tsc [options] [file ..]");
+ this.host.printLine("");
+ this.host.printLine("Examples: tsc hello.ts");
+ this.host.printLine(" tsc --out foo.js foo.ts");
+ this.host.printLine(" tsc @args.txt");
+ this.host.printLine("");
+ this.host.printLine("Options:");
+ var output = [];
+ var maxLength = 0;
+ this.options = this.options.sort(function (a, b) {
+ var aName = a.name.toLowerCase();
+ var bName = b.name.toLowerCase();
+ if(aName > bName) {
+ return 1;
+ } else {
+ if(aName < bName) {
+ return -1;
+ } else {
+ return 0;
+ }
+ }
+ });
+ for(var i = 0; i < this.options.length; i++) {
+ var option = this.options[i];
+ if(option.experimental) {
+ continue;
+ }
+ if(!option.usage) {
+ break;
+ }
+ var usageString = " ";
+ var type = option.type ? " " + option.type.toUpperCase() : "";
+ if(option.short) {
+ usageString += this.DEFAULT_SHORT_FLAG + option.short + type + ", ";
+ }
+ usageString += this.DEFAULT_LONG_FLAG + option.name + type;
+ output.push([
+ usageString,
+ option.usage
+ ]);
+ if(usageString.length > maxLength) {
+ maxLength = usageString.length;
+ }
+ }
+ output.push([
+ " @<file>",
+ "Insert command line options and files from a file."
+ ]);
+ for(var i = 0; i < output.length; i++) {
+ this.host.printLine(output[i][0] + (new Array(maxLength - output[i][0].length + 3)).join(" ") + output[i][1]);
+ }
+ };
+ OptionsParser.prototype.option = function (name, config, short) {
+ if(!config) {
+ config = short;
+ short = null;
+ }
+ config.name = name;
+ config.short = short;
+ config.flag = false;
+ this.options.push(config);
+ };
+ OptionsParser.prototype.flag = function (name, config, short) {
+ if(!config) {
+ config = short;
+ short = null;
+ }
+ config.name = name;
+ config.short = short;
+ config.flag = true;
+ this.options.push(config);
+ };
+ OptionsParser.prototype.parseString = function (argString) {
+ var position = 0;
+ var tokens = argString.match(/\s+|"|[^\s"]+/g);
+ function peek() {
+ return tokens[position];
+ }
+ function consume() {
+ return tokens[position++];
+ }
+ function consumeQuotedString() {
+ var value = '';
+ consume();
+ var token = peek();
+ while(token && token !== '"') {
+ consume();
+ value += token;
+ token = peek();
+ }
+ consume();
+ return value;
+ }
+ var args = [];
+ var currentArg = '';
+ while(position < tokens.length) {
+ var token = peek();
+ if(token === '"') {
+ currentArg += consumeQuotedString();
+ } else {
+ if(token.match(/\s/)) {
+ if(currentArg.length > 0) {
+ args.push(currentArg);
+ currentArg = '';
+ }
+ consume();
+ } else {
+ consume();
+ currentArg += token;
+ }
+ }
+ }
+ if(currentArg.length > 0) {
+ args.push(currentArg);
+ }
+ this.parse(args);
+ };
+ OptionsParser.prototype.parse = function (args) {
+ var position = 0;
+ function consume() {
+ return args[position++];
+ }
+ while(position < args.length) {
+ var current = consume();
+ var match = current.match(/^(--?|@)(.*)/);
+ var value = null;
+ if(match) {
+ if(match[1] === '@') {
+ this.parseString(this.host.readFile(match[2]));
+ } else {
+ var arg = match[2];
+ var option = this.findOption(arg);
+ if(option === null) {
+ this.host.printLine("Unknown option '" + arg + "'");
+ this.host.printLine("Use the '--help' flag to see options");
+ } else {
+ if(!option.flag) {
+ value = consume();
+ }
+ option.set(value);
+ }
+ }
+ } else {
+ this.unnamed.push(current);
+ }
+ }
+ };
+ return OptionsParser;
+})();
+var CommandLineHost = (function () {
+ function CommandLineHost(compilationSettings) {
+ this.compilationSettings = compilationSettings;
+ this.pathMap = {
+ };
+ this.resolvedPaths = {
+ };
+ }
+ CommandLineHost.prototype.getPathIdentifier = function (path) {
+ return this.compilationSettings.useCaseSensitiveFileResolution ? path : path.toLocaleUpperCase();
+ };
+ CommandLineHost.prototype.isResolved = function (path) {
+ return this.resolvedPaths[this.getPathIdentifier(this.pathMap[path])] != undefined;
+ };
+ CommandLineHost.prototype.resolveCompilationEnvironment = function (preEnv, resolver, traceDependencies) {
+ var _this = this;
+ var resolvedEnv = new TypeScript.CompilationEnvironment(preEnv.compilationSettings, preEnv.ioHost);
+ var nCode = preEnv.code.length;
+ var path = "";
+ var postResolutionError = function (errorFile, errorMessage) {
+ TypeScript.CompilerDiagnostics.debugPrint("Could not resolve file '" + errorFile + "'" + (errorMessage == "" ? "" : ": " + errorMessage));
+ };
+ var resolutionDispatcher = {
+ postResolutionError: postResolutionError,
+ postResolution: function (path, code) {
+ var pathId = _this.getPathIdentifier(path);
+ if(!_this.resolvedPaths[pathId]) {
+ resolvedEnv.code.push(code);
+ _this.resolvedPaths[pathId] = true;
+ }
+ }
+ };
+ for(var i = 0; i < nCode; i++) {
+ path = TypeScript.switchToForwardSlashes(preEnv.ioHost.resolvePath(preEnv.code[i].path));
+ this.pathMap[preEnv.code[i].path] = path;
+ resolver.resolveCode(path, "", false, resolutionDispatcher);
+ }
+ return resolvedEnv;
+ };
+ return CommandLineHost;
+})();
+var BatchCompiler = (function () {
+ function BatchCompiler(ioHost) {
+ this.ioHost = ioHost;
+ this.resolvedEnvironment = null;
+ this.hasResolveErrors = false;
+ this.compilerVersion = "0.8.2.0";
+ this.printedVersion = false;
+ this.compilationSettings = new TypeScript.CompilationSettings();
+ this.compilationEnvironment = new TypeScript.CompilationEnvironment(this.compilationSettings, this.ioHost);
+ }
+ BatchCompiler.prototype.resolve = function () {
+ var resolver = new TypeScript.CodeResolver(this.compilationEnvironment);
+ var commandLineHost = new CommandLineHost(this.compilationSettings);
+ var ret = commandLineHost.resolveCompilationEnvironment(this.compilationEnvironment, resolver, true);
+ this.hasResolveErrors = false;
+ for(var i = 0; i < this.compilationEnvironment.code.length; i++) {
+ if(!commandLineHost.isResolved(this.compilationEnvironment.code[i].path)) {
+ this.hasResolveErrors = true;
+ var path = this.compilationEnvironment.code[i].path;
+ if(!TypeScript.isSTRFile(path) && !TypeScript.isDSTRFile(path) && !TypeScript.isTSFile(path) && !TypeScript.isDTSFile(path)) {
+ this.ioHost.stderr.WriteLine("Unknown extension for file: \"" + path + "\". Only .ts and .d.ts extensions are allowed.");
+ } else {
+ this.ioHost.stderr.WriteLine("Error reading file \"" + path + "\": File not found");
+ }
+ }
+ }
+ return ret;
+ };
+ BatchCompiler.prototype.compile = function () {
+ var _this = this;
+ var compiler;
+ compiler = new TypeScript.TypeScriptCompiler(this.ioHost.stderr, new TypeScript.NullLogger(), this.compilationSettings);
+ compiler.setErrorOutput(this.ioHost.stderr);
+ compiler.setErrorCallback(function (minChar, charLen, message, unitIndex) {
+ compiler.errorReporter.hasErrors = true;
+ var fname = _this.resolvedEnvironment.code[unitIndex].path;
+ var lineCol = {
+ line: -1,
+ col: -1
+ };
+ compiler.parser.getSourceLineCol(lineCol, minChar);
+ var msg = fname + " (" + lineCol.line + "," + (lineCol.col + 1) + "): " + message;
+ if(_this.compilationSettings.errorRecovery) {
+ _this.ioHost.stderr.WriteLine(msg);
+ } else {
+ throw new SyntaxError(msg);
+ }
+ });
+ if(this.compilationSettings.emitComments) {
+ compiler.emitCommentsToOutput();
+ }
+ var consumeUnit = function (code, addAsResident) {
+ try {
+ if(!_this.compilationSettings.resolve) {
+ code.content = _this.ioHost.readFile(code.path);
+ if(_this.compilationSettings.generateDeclarationFiles) {
+ TypeScript.CompilerDiagnostics.assert(code.referencedFiles == null, "With no resolve option, referenced files need to null");
+ code.referencedFiles = TypeScript.getReferencedFiles(code);
+ }
+ }
+ if(code.content) {
+ if(_this.compilationSettings.parseOnly) {
+ compiler.parseUnit(code.content, code.path);
+ } else {
+ if(_this.compilationSettings.errorRecovery) {
+ compiler.parser.setErrorRecovery(_this.ioHost.stderr);
+ }
+ compiler.addUnit(code.content, code.path, addAsResident, code.referencedFiles);
+ }
+ }
+ } catch (err) {
+ compiler.errorReporter.hasErrors = true;
+ _this.ioHost.stderr.WriteLine(err.message);
+ }
+ };
+ for(var iCode = 0; iCode < this.resolvedEnvironment.code.length; iCode++) {
+ if(!this.compilationSettings.parseOnly || (iCode > 0)) {
+ consumeUnit(this.resolvedEnvironment.code[iCode], false);
+ }
+ }
+ var emitterIOHost = {
+ createFile: function (fileName, useUTF8) {
+ return IOUtils.createFileAndFolderStructure(_this.ioHost, fileName, useUTF8);
+ },
+ directoryExists: this.ioHost.directoryExists,
+ fileExists: this.ioHost.fileExists,
+ resolvePath: this.ioHost.resolvePath
+ };
+ try {
+ if(!this.compilationSettings.parseOnly) {
+ compiler.typeCheck();
+ compiler.emit(emitterIOHost);
+ compiler.emitDeclarations();
+ } else {
+ compiler.emitAST(emitterIOHost);
+ }
+ } catch (err) {
+ compiler.errorReporter.hasErrors = true;
+ if(err.message != "EmitError") {
+ throw err;
+ }
+ }
+ return compiler.errorReporter.hasErrors;
+ };
+ BatchCompiler.prototype.run = function () {
+ for(var i = 0; i < this.compilationEnvironment.code.length; i++) {
+ var unit = this.compilationEnvironment.code[i];
+ var outputFileName = unit.path;
+ if(TypeScript.isTSFile(outputFileName)) {
+ outputFileName = outputFileName.replace(/\.ts$/, ".js");
+ } else {
+ if(TypeScript.isSTRFile(outputFileName)) {
+ outputFileName = outputFileName.replace(/\.str$/, ".js");
+ }
+ }
+ if(this.ioHost.fileExists(outputFileName)) {
+ var unitRes = this.ioHost.readFile(outputFileName);
+ this.ioHost.run(unitRes, outputFileName);
+ }
+ }
+ };
+ BatchCompiler.prototype.batchCompile = function () {
+ var _this = this;
+ TypeScript.CompilerDiagnostics.diagnosticWriter = {
+ Alert: function (s) {
+ _this.ioHost.printLine(s);
+ }
+ };
+ var code;
+ var opts = new OptionsParser(this.ioHost);
+ opts.option('out', {
+ usage: 'Concatenate and emit output to single file | Redirect output structure to the directory',
+ type: 'file|directory',
+ set: function (str) {
+ _this.compilationSettings.outputOption = str;
+ }
+ });
+ opts.option('style', {
+ usage: 'Select style checking options (examples --style requireSemi:off or --style "eqeqeq;bitwise:off")',
+ experimental: true,
+ set: function (str) {
+ _this.compilationSettings.setStyleOptions(str);
+ }
+ });
+ opts.flag('sourcemap', {
+ usage: 'Generates corresponding .map file',
+ set: function () {
+ _this.compilationSettings.mapSourceFiles = true;
+ }
+ });
+ opts.flag('declaration', {
+ usage: 'Generates corresponding .d.ts file',
+ set: function () {
+ _this.compilationSettings.generateDeclarationFiles = true;
+ }
+ });
+ if(this.ioHost.watchFile) {
+ opts.flag('watch', {
+ usage: 'Watch output files',
+ set: function () {
+ _this.compilationSettings.watch = true;
+ }
+ }, 'w');
+ }
+ opts.flag('exec', {
+ usage: 'Execute the script after compilation',
+ set: function () {
+ _this.compilationSettings.exec = true;
+ }
+ }, 'e');
+ opts.flag('parse', {
+ usage: 'Parse only',
+ experimental: true,
+ set: function () {
+ _this.compilationSettings.parseOnly = true;
+ }
+ });
+ opts.flag('minw', {
+ usage: 'Minimize whitespace',
+ experimental: true,
+ set: function () {
+ _this.compilationSettings.minWhitespace = true;
+ }
+ }, 'mw');
+ opts.flag('const', {
+ usage: 'Propagate constants to emitted code',
+ experimental: true,
+ set: function () {
+ _this.compilationSettings.propagateConstants = true;
+ }
+ });
+ opts.flag('errorrecovery', {
+ usage: 'Enable error recovery',
+ experimental: true,
+ set: function () {
+ _this.compilationSettings.errorRecovery = true;
+ }
+ }, 'er');
+ opts.flag('comments', {
+ usage: 'Emit comments to output',
+ set: function () {
+ _this.compilationSettings.emitComments = true;
+ }
+ }, 'c');
+ opts.flag('cflow', {
+ usage: 'Control flow',
+ experimental: true,
+ set: function () {
+ _this.compilationSettings.controlFlow = true;
+ }
+ });
+ opts.flag('cflowp', {
+ usage: 'Print control flow',
+ experimental: true,
+ set: function () {
+ _this.compilationSettings.controlFlow = true;
+ _this.compilationSettings.printControlFlow = true;
+ }
+ });
+ opts.flag('cflowu', {
+ usage: 'Print Use Def control flow',
+ experimental: true,
+ set: function () {
+ _this.compilationSettings.controlFlow = true;
+ _this.compilationSettings.controlFlowUseDef = true;
+ }
+ });
+ opts.flag('noerroronwith', {
+ usage: 'Allow with statements',
+ experimental: true,
+ set: function () {
+ _this.compilationSettings.errorOnWith = false;
+ }
+ });
+ opts.flag('noresolve', {
+ usage: 'Skip resolution and preprocessing',
+ experimental: true,
+ set: function () {
+ _this.compilationSettings.resolve = false;
+ _this.compilationSettings.preprocess = false;
+ }
+ });
+ opts.flag('debug', {
+ usage: 'Print debug output',
+ experimental: true,
+ set: function () {
+ TypeScript.CompilerDiagnostics.debug = true;
+ }
+ });
+ opts.flag('canCallDefinitionSignature', {
+ usage: 'Allows you to call the definition signature of an overload group',
+ experimental: true,
+ set: function () {
+ _this.compilationSettings.canCallDefinitionSignature = true;
+ }
+ });
+ opts.flag('nooptimizemodules', {
+ usage: 'Do not optimize module codegen',
+ experimental: true,
+ set: function () {
+ TypeScript.optimizeModuleCodeGen = false;
+ }
+ });
+ opts.flag('nolib', {
+ usage: 'Do not include a default lib.d.ts with global declarations',
+ set: function () {
+ _this.compilationSettings.useDefaultLib = false;
+ }
+ });
+ opts.flag('inferProperties', {
+ usage: 'Infer class properties from top-level assignments to \'this\'',
+ experimental: true,
+ set: function () {
+ _this.compilationSettings.inferPropertiesFromThisAssignment = true;
+ }
+ });
+ opts.option('target', {
+ usage: 'Specify ECMAScript target version: "ES3" (default), or "ES5"',
+ type: 'VER',
+ set: function (type) {
+ type = type.toLowerCase();
+ if(type === 'es3') {
+ _this.compilationSettings.codeGenTarget = TypeScript.CodeGenTarget.ES3;
+ } else {
+ if(type === 'es5') {
+ _this.compilationSettings.codeGenTarget = TypeScript.CodeGenTarget.ES5;
+ } else {
+ _this.ioHost.printLine("ECMAScript target version '" + type + "' not supported. Using default 'ES3' code generation");
+ }
+ }
+ }
+ });
+ opts.option('module', {
+ usage: 'Specify module code generation: "commonjs" (default) or "amd"',
+ type: 'kind',
+ set: function (type) {
+ type = type.toLowerCase();
+ if(type === 'commonjs' || type === 'node') {
+ TypeScript.moduleGenTarget = TypeScript.ModuleGenTarget.Synchronous;
+ } else {
+ if(type === 'amd') {
+ TypeScript.moduleGenTarget = TypeScript.ModuleGenTarget.Asynchronous;
+ } else {
+ _this.ioHost.printLine("Module code generation '" + type + "' not supported. Using default 'commonjs' code generation");
+ }
+ }
+ }
+ });
+ var printedUsage = false;
+ opts.flag('help', {
+ usage: 'Print this message',
+ set: function () {
+ _this.printVersion();
+ opts.printUsage();
+ printedUsage = true;
+ }
+ }, 'h');
+ opts.flag('useCaseSensitiveFileResolution', {
+ usage: 'Force file resolution to be case sensitive',
+ experimental: true,
+ set: function () {
+ _this.compilationSettings.useCaseSensitiveFileResolution = true;
+ }
+ });
+ opts.flag('version', {
+ usage: 'Print the compiler\'s version: ' + this.compilerVersion,
+ set: function () {
+ _this.printVersion();
+ }
+ }, 'v');
+ opts.parse(this.ioHost.arguments);
+ if(this.compilationSettings.useDefaultLib) {
+ var compilerFilePath = this.ioHost.getExecutingFilePath();
+ var binDirPath = this.ioHost.dirName(compilerFilePath);
+ var libStrPath = this.ioHost.resolvePath(binDirPath + "/lib.d.ts");
+ code = new TypeScript.SourceUnit(libStrPath, null);
+ this.compilationEnvironment.code.push(code);
+ }
+ for(var i = 0; i < opts.unnamed.length; i++) {
+ code = new TypeScript.SourceUnit(opts.unnamed[i], null);
+ this.compilationEnvironment.code.push(code);
+ }
+ if(this.compilationEnvironment.code.length == (this.compilationSettings.useDefaultLib ? 1 : 0)) {
+ if(!printedUsage && !this.printedVersion) {
+ this.printVersion();
+ opts.printUsage();
+ this.ioHost.quit(1);
+ }
+ return;
+ }
+ var sourceFiles = [];
+ if(this.compilationSettings.watch) {
+ sourceFiles = this.compilationEnvironment.code.slice(0);
+ }
+ this.resolvedEnvironment = this.compilationSettings.resolve ? this.resolve() : this.compilationEnvironment;
+ var hasCompileErrors = this.compile();
+ var hasErrors = hasCompileErrors || this.hasResolveErrors;
+ if(!hasErrors) {
+ if(this.compilationSettings.exec) {
+ this.run();
+ }
+ }
+ if(this.compilationSettings.watch) {
+ this.watchFiles(sourceFiles);
+ } else {
+ this.ioHost.quit(hasErrors ? 1 : 0);
+ }
+ };
+ BatchCompiler.prototype.printVersion = function () {
+ if(!this.printedVersion) {
+ this.ioHost.printLine("Version " + this.compilerVersion);
+ this.printedVersion = true;
+ }
+ };
+ BatchCompiler.prototype.watchFiles = function (soruceFiles) {
+ var _this = this;
+ if(!this.ioHost.watchFile) {
+ this.ioHost.printLine("Error: Current host does not support -w[atch] option");
+ return;
+ }
+ var resolvedFiles = [];
+ var watchers = {
+ };
+ var addWatcher = function (filename) {
+ if(!watchers[filename]) {
+ var watcher = _this.ioHost.watchFile(filename, onWatchedFileChange);
+ watchers[filename] = watcher;
+ } else {
+ throw new Error("Cannot watch file, it is already watched.");
+ }
+ };
+ var removeWatcher = function (filename) {
+ if(watchers[filename]) {
+ watchers[filename].close();
+ delete watchers[filename];
+ } else {
+ throw new Error("Cannot stop watching file, it is not being watched.");
+ }
+ };
+ var onWatchedFileChange = function () {
+ _this.compilationEnvironment.code = soruceFiles;
+ _this.resolvedEnvironment = _this.compilationSettings.resolve ? _this.resolve() : _this.compilationEnvironment;
+ var oldFiles = resolvedFiles;
+ var newFiles = [];
+ _this.resolvedEnvironment.code.forEach(function (sf) {
+ return newFiles.push(sf.path);
+ });
+ newFiles = newFiles.sort();
+ var i = 0, j = 0;
+ while(i < oldFiles.length && j < newFiles.length) {
+ var compareResult = oldFiles[i].localeCompare(newFiles[j]);
+ if(compareResult == 0) {
+ i++;
+ j++;
+ } else {
+ if(compareResult < 0) {
+ removeWatcher(oldFiles[i]);
+ i++;
+ } else {
+ addWatcher(newFiles[j]);
+ j++;
+ }
+ }
+ }
+ for(var k = i; k < oldFiles.length; k++) {
+ removeWatcher(oldFiles[k]);
+ }
+ for(var k = j; k < newFiles.length; k++) {
+ addWatcher(newFiles[k]);
+ }
+ resolvedFiles = newFiles;
+ ; ;
+ _this.ioHost.printLine("");
+ _this.ioHost.printLine("Recompiling (" + new Date() + "): ");
+ resolvedFiles.forEach(function (f) {
+ return _this.ioHost.printLine(" " + f);
+ });
+ var hasCompileErrors = _this.compile();
+ var hasErrors = hasCompileErrors || _this.hasResolveErrors;
+ if(!hasErrors) {
+ if(_this.compilationSettings.exec) {
+ _this.run();
+ }
+ }
+ };
+ this.ioHost.stderr = this.ioHost.stdout;
+ this.resolvedEnvironment.code.forEach(function (sf) {
+ resolvedFiles.push(sf.path);
+ addWatcher(sf.path);
+ });
+ resolvedFiles.sort();
+ };
+ return BatchCompiler;
+})();
+
diff --git a/js/src/octane/typescript.js b/js/src/octane/typescript.js
new file mode 100644
index 0000000000..2dba23d3de
--- /dev/null
+++ b/js/src/octane/typescript.js
@@ -0,0 +1,172 @@
+// Copyright 2013 the Octane Benchmark project authors. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following
+// disclaimer in the documentation and/or other materials provided
+// with the distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived
+// from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+var typescript = new BenchmarkSuite('Typescript', [255011322], [
+ new Benchmark("Typescript",
+ false,
+ true,
+ 5,
+ runTypescript,
+ setupTypescript,
+ tearDownTypescript,
+ null,
+ 1)
+]);
+
+
+function setupTypescript() {
+}
+
+
+function tearDownTypescript() {
+ compiler_input = null;
+}
+
+
+var parseErrors = [];
+
+
+function runTypescript() {
+ var compiler = createCompiler();
+ compiler.addUnit(compiler_input, "compiler_input.ts");
+ parseErrors = [];
+ compiler.reTypeCheck();
+ compiler.emit({
+ createFile: function (fileName) { return outfile; },
+ fileExists: function (path) { return false; },
+ directoryExists: function (path) { return false; },
+ resolvePath: function (path) { return path; }
+ });
+
+ if (parseErrors.length != 192 && parseErrors.length != 193) {
+ throw new Error("Parse errors.");
+ }
+ compiler = null;
+}
+
+var outfile = {
+ checksum: -412589664,
+ cumulative_checksum: 0,
+ Write: function (s) { this.Verify(s); },
+ WriteLine: function (s) { this.Verify(s + "\n"); },
+ Close: function () {
+ if (this.checksum != this.cumulative_checksum) {
+ throw new Error("Wrong checksum.");
+ }
+ this.cumulative_checksum = 0;
+ },
+ Verify: function (s) {
+ for(var i = 0; i < s.length; i++) {
+ var c = s.charCodeAt(i);
+ this.cumulative_checksum = (this.cumulative_checksum << 1) ^ c;
+ }
+ }
+};
+
+
+var outerr = {
+ checksum: 0,
+ cumulative_checksum: 0,
+ Write: function (s) { this.Verify(s); },
+ WriteLine: function (s) { this.Verify(s + "\n"); },
+ Close: function () {
+ if (this.checksum != this.cumulative_checksum) {
+ throw new Error("Wrong checksum.");
+ }
+ this.cumulative_checksum = 0;
+ },
+ Verify: function (s) {
+ for(var i = 0; i < s.length; i++) {
+ var c = s.charCodeAt(i);
+ this.cumulative_checksum = (this.cumulative_checksum << 1) ^ c;
+ }
+ }
+};
+
+
+function createCompiler() {
+ var settings = new TypeScript.CompilationSettings();
+ settings.codeGenTarget = TypeScript.CodeGenTarget.ES5;
+ var compiler = new TypeScript.TypeScriptCompiler(
+ outerr, new TypeScript.NullLogger, settings);
+ compiler.setErrorCallback(function (start, len, message) {
+ parseErrors.push({ start: start, len: len, message: message });
+ });
+ compiler.parser.errorRecovery = true;
+ compiler.typeCheck();
+ return compiler
+}
+
+
+// The two files accompanying this benchmark contain a modified version of the
+// Typescript compiler. They can be generated using the following instructions
+// with the code available at:
+// http://typescript.codeplex.com/SourceControl/changeset/view/258e00903a9e
+//
+// 1) Copy the compiler from $TYPESCRIPT/bin/tsc.js to typescript-compiler.js
+// 2) Remove the call to the batch compiler from the last line of tsc.js
+// 3) Add this code after line 7963 (fix for Mozilla Firefox):
+// if (this.currentToken === undefined)
+// this.currentToken = this.scanner.scan();
+// 4) Add this code after line 9142 (fix for Mozilla Firefox):
+// if (this.currentToken === undefined) {
+// this.currentToken = this.scanner.scan();
+// continue;
+// }
+// 5) Generate the Typescript compiler input using the following command:
+// $ cat $TYPESCRIPT/src/compiler/*.ts | iconv -c -f utf8 -t ascii \
+// | dos2unix > /tmp/compiler_input
+// 6) Run the following Python script to generate the reformatted input:
+// $ python script.py > typescript-input.js
+//
+// #!/usr/bin/env python
+// import re;
+// def escape_and_format(data, varname):
+// data = data.replace("\\", "\\\\").replace("\"", "\\\"")
+// .replace("\n", "\\n");
+// data = "var " + varname + " = \"" + data + "\""
+// print data;
+// result = open("/tmp/compiler_input", 'r');
+// escape_and_format(result.read(), "compiler_input")
+//
+// The following is the original copyright notice present in the Typescript
+// compiler source at the time this benchmark was generated:
+//
+/* *****************************************************************************
+Copyright (c) Microsoft Corporation. All rights reserved.
+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
+
+THIS CODE IS PROVIDED *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
+WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
+MERCHANTABLITY OR NON-INFRINGEMENT.
+
+See the Apache Version 2.0 License for specific language governing permissions
+and limitations under the License.
+***************************************************************************** */
diff --git a/js/src/octane/zlib-data.js b/js/src/octane/zlib-data.js
new file mode 100644
index 0000000000..a8d28050d1
--- /dev/null
+++ b/js/src/octane/zlib-data.js
@@ -0,0 +1,2409 @@
+// This file is generated by the Python script below. It contains code from
+// https://github.com/dvander/arewefastyet/blob/master/benchmarks/asmjs-apps/zlib.js
+// which is basically a trivial driver in C from
+// https://github.com/kripken/emscripten/blob/master/tests/zlib/benchmark.c
+// plus the zlib library from
+// http://www.zlib.net/
+// (which is Copyright (C) 1995-2013 Jean-loup Gailly and Mark Adler) compiled
+// via Emscripten.
+// The script applies a few changes to avoid any output and to not start
+// the benchmark directly.
+
+/*
+# ---------------------- BEGIN GENERATOR SCRIPT --------------------
+#!/usr/bin/env python
+
+import urllib2
+
+url = "https://github.com/dvander/arewefastyet/raw/master/benchmarks/asmjs-apps/zlib.js"
+
+def do_replacements(data):
+ # Update the *_original patterns if generated identifier names change:
+ printf_original = "_printf:function(a,b){return Cb(L[W>> 2],a,b)}"
+ printf_neutered = "_printf:function(a,b){}"
+ puts_original = ("_puts:function(a){var b=L[W>>2],a=Gb(a,b);" +
+ "return 0>a?a:0>Hb(10,b)?-1:a+1}")
+ puts_neutered = "_puts:function(a){}"
+ runner_original = "Ya([].concat(Module.arguments));"
+ runner_neutered = ""
+ assert printf_original in data
+ assert puts_original in data
+ assert runner_original in data
+
+ data = data.replace("\\", "\\\\").replace("\'", "\\\'")
+ data = data.replace(printf_original, printf_neutered)
+ data = data.replace(puts_original, puts_neutered)
+ data = data.replace(runner_original, runner_neutered)
+
+def format_80col(data):
+ while len(data) > 0:
+ cutoff = min(79, len(data))
+ while data[cutoff-1] == '\\':
+ cutoff -= 1
+ line = data[0:cutoff]
+ data = data[cutoff:]
+ if len(data) > 0:
+ line += '\\'
+ print line
+
+download = urllib2.urlopen(url)
+data = ""
+for line in download:
+ line = line.strip()
+ if line.startswith("//"): continue
+ data += line + " "
+
+data = do_replacements(data)
+format_80col("function InitializeZlibBenchmark() {" +
+ "zlibEval('" +
+ data +
+ "');" +
+ "}")
+# ----------------------- END GENERATOR SCRIPT ---------------------
+*/
+
+function InitializeZlibBenchmark() {zlibEval('function j(a){throw a;}var k=\
+void 0,n=!0,r=null,t=!1;function u(){return function(){}}try{this.Module=Module\
+,Module.test}catch(aa){this.Module=Module={}}var ba="object"===typeof process&&\
+"function"===typeof require,ca="object"===typeof window,v="function"===typeof i\
+mportScripts,da=!ca&&!ba&&!v;"object"===typeof module&&(module.T=Module); if(ba\
+){Module.print=function(a){process.stdout.write(a+"\\n")};Module.printErr=funct\
+ion(a){process.stderr.write(a+"\\n")};var ea=require("fs"),fa=require("path");M\
+odule.read=function(a,b){var a=fa.normalize(a),c=ea.readFileSync(a);!c&&a!=fa.r\
+esolve(a)&&(a=path.join(__dirname,"..","src",a),c=ea.readFileSync(a));c&&!b&&(c\
+=c.toString());return c};Module.readBinary=function(a){return Module.read(a,n)}\
+;Module.load=function(a){ga(read(a))};Module.arguments||(Module.arguments=proce\
+ss.argv.slice(2))} da&&(Module.print=print,"undefined"!=typeof printErr&&(Modul\
+e.printErr=printErr),Module.read=read,Module.readBinary=function(a){return read\
+(a,"binary")},Module.arguments||("undefined"!=typeof scriptArgs?Module.argument\
+s=scriptArgs:"undefined"!=typeof arguments&&(Module.arguments=arguments)));ca&&\
+!v&&(Module.print||(Module.print=function(a){console.log(a)}),Module.printErr||\
+(Module.printErr=function(a){console.log(a)})); if(ca||v)Module.read=function(a\
+){var b=new XMLHttpRequest;b.open("GET",a,t);b.send(r);return b.responseText},M\
+odule.arguments||"undefined"!=typeof arguments&&(Module.arguments=arguments);v&\
+&(Module.print||(Module.print=u()),Module.load=importScripts);!v&&(!ca&&!ba&&!d\
+a)&&j("Unknown runtime environment. Where are we?");function ga(a){eval.call(r,\
+a)}"undefined"==!Module.load&&Module.read&&(Module.load=function(a){ga(Module.r\
+ead(a))});Module.print||(Module.print=u()); Module.printErr||(Module.printErr=M\
+odule.print);Module.arguments||(Module.arguments=[]);Module.print=Module.print;\
+Module.g=Module.printErr;Module.preRun||(Module.preRun=[]);Module.postRun||(Mod\
+ule.postRun=[]);function ha(){return w}function ia(a){w=a}function ja(a){if(1==\
+x)return 1;var b={"%i1":1,"%i8":1,"%i16":2,"%i32":4,"%i64":8,"%float":4,"%doubl\
+e":8}["%"+a];b||("*"==a.charAt(a.length-1)?b=x:"i"==a[0]&&(a=parseInt(a.substr(\
+1)),z(0==a%8),b=a/8));return b} function ka(a,b,c){c&&c.length?(c.splice||(c=Ar\
+ray.prototype.slice.call(c)),c.splice(0,0,b),Module["dynCall_"+a].apply(r,c)):M\
+odule["dynCall_"+a].call(r,b)}var la; function ma(){var a=[],b=0;this.B=functio\
+n(c){c&=255;b&&(a.push(c),b--);if(0==a.length){if(128>c)return String.fromCharC\
+ode(c);a.push(c);b=191<c&&224>c?1:2;return""}if(0<b)return"";var c=a[0],d=a[1],\
+e=a[2],c=191<c&&224>c?String.fromCharCode((c&31)<<6|d&63):String.fromCharCode((\
+c&15)<<12|(d&63)<<6|e&63);a.length=0;return c};this.O=function(a){for(var a=une\
+scape(encodeURIComponent(a)),b=[],e=0;e<a.length;e++)b.push(a.charCodeAt(e));re\
+turn b}}function na(a){var b=w;w=w+a|0;w=w+7>>3<<3;return b} function oa(a){var\
+ b=C;C=C+a|0;C=C+7>>3<<3;return b}function pa(a){var b=D;D=D+a|0;D=D+7>>3<<3;D>\
+=qa&&F("Cannot enlarge memory arrays in asm.js. Either (1) compile with -s TOTA\
+L_MEMORY=X with X higher than the current value, or (2) set Module.TOTAL_MEMORY\
+ before the program runs.");return b}function ra(a,b){return Math.ceil(a/(b?b:8\
+))*(b?b:8)}var x=4,sa={},G=t,ta;function F(a){Module.print(a+":\\n"+Error().sta\
+ck);G=n;j("Assertion: "+a)}function z(a,b){a||F("Assertion failed: "+b)}var ua=\
+this; Module.ccall=function(a,b,c,d){return va(wa(a),b,c,d)};function wa(a){try\
+{var b=ua.Module["_"+a];b||(b=eval("_"+a))}catch(c){}z(b,"Cannot call unknown f\
+unction "+a+" (perhaps LLVM optimizations or closure removed it?)");return b} f\
+unction va(a,b,c,d){function e(a,b){if("string"==b){if(a===r||a===k||0===a)retu\
+rn 0;f||(f=ha());var c=na(a.length+1);xa(a,c);return c}return"array"==b?(f||(f=\
+ha()),c=na(a.length),ya(a,c),c):a}var f=0,g=0,d=d?d.map(function(a){return e(a,\
+c[g++])}):[];a=a.apply(r,d);"string"==b?b=I(a):(z("array"!=b),b=a);f&&ia(f);ret\
+urn b}Module.cwrap=function(a,b,c){var d=wa(a);return function(){return va(d,b,\
+c,Array.prototype.slice.call(arguments))}}; function za(a,b,c){c=c||"i8";"*"===\
+c.charAt(c.length-1)&&(c="i32");switch(c){case "i1":J[a]=b;break;case "i8":J[a]\
+=b;break;case "i16":Aa[a>>1]=b;break;case "i32":L[a>>2]=b;break;case "i64":ta=[\
+b>>>0,(Math.min(+Math.floor(b/4294967296),4294967295)|0)>>>0];L[a>>2]=ta[0];L[a\
++4>>2]=ta[1];break;case "float":Ba[a>>2]=b;break;case "double":N[a>>3]=b;break;\
+default:F("invalid type for setValue: "+c)}}Module.setValue=za; Module.getValue\
+=function(a,b){b=b||"i8";"*"===b.charAt(b.length-1)&&(b="i32");switch(b){case "\
+i1":return J[a];case "i8":return J[a];case "i16":return Aa[a>>1];case "i32":ret\
+urn L[a>>2];case "i64":return L[a>>2];case "float":return Ba[a>>2];case "double\
+":return N[a>>3];default:F("invalid type for setValue: "+b)}return r};var Ca=1,\
+O=2,Da=4;Module.ALLOC_NORMAL=0;Module.ALLOC_STACK=Ca;Module.ALLOC_STATIC=O;Modu\
+le.ALLOC_DYNAMIC=3;Module.ALLOC_NONE=Da; function P(a,b,c,d){var e,f;"number"==\
+=typeof a?(e=n,f=a):(e=t,f=a.length);var g="string"===typeof b?b:r,c=c==Da?d:[E\
+a,na,oa,pa][c===k?O:c](Math.max(f,g?1:b.length));if(e){d=c;z(0==(c&3));for(a=c+\
+(f&-4);d<a;d+=4)L[d>>2]=0;for(a=c+f;d<a;)J[d++|0]=0;return c}if("i8"===g)return\
+ a.subarray||a.slice?Q.set(a,c):Q.set(new Uint8Array(a),c),c;for(var d=0,i,l;d<\
+f;){var y=a[d];"function"===typeof y&&(y=sa.U(y));e=g||b[d];0===e?d++:("i64"==e\
+&&(e="i32"),za(c+d,y,e),l!==e&&(i=ja(e),l=e),d+=i)}return c} Module.allocate=P;\
+function I(a,b){for(var c=t,d,e=0;;){d=Q[a+e|0];if(128<=d)c=n;else if(0==d&&!b)\
+break;e++;if(b&&e==b)break}b||(b=e);var f="";if(!c){for(;0<b;)d=String.fromChar\
+Code.apply(String,Q.subarray(a,a+Math.min(b,1024))),f=f?f+d:d,a+=1024,b-=1024;r\
+eturn f}c=new ma;for(e=0;e<b;e++)d=Q[a+e|0],f+=c.B(d);return f}Module.Pointer_s\
+tringify=I;var J,Q,Aa,Fa,L,Ga,Ba,N,Ha=0,C=0,Ia=0,w=0,Ja=0,Ka=0,D=0,qa=Module.TO\
+TAL_MEMORY||134217728; z(!!Int32Array&&!!Float64Array&&!!(new Int32Array(1)).su\
+barray&&!!(new Int32Array(1)).set,"Cannot fallback to non-typed array case: Cod\
+e is too specialized");var R=new ArrayBuffer(qa);J=new Int8Array(R);Aa=new Int1\
+6Array(R);L=new Int32Array(R);Q=new Uint8Array(R);Fa=new Uint16Array(R);Ga=new \
+Uint32Array(R);Ba=new Float32Array(R);N=new Float64Array(R);L[0]=255;z(255===Q[\
+0]&&0===Q[3],"Typed arrays 2 must be run on a little-endian system");Module.HEA\
+P=k;Module.HEAP8=J;Module.HEAP16=Aa; Module.HEAP32=L;Module.HEAPU8=Q;Module.HEA\
+PU16=Fa;Module.HEAPU32=Ga;Module.HEAPF32=Ba;Module.HEAPF64=N;function La(a){for\
+(;0<a.length;){var b=a.shift();if("function"==typeof b)b();else{var c=b.l;"numb\
+er"===typeof c?b.i===k?ka("v",c):ka("vi",c,[b.i]):c(b.i===k?r:b.i)}}}var Ma=[],\
+Na=[],Oa=[],Pa=t;function S(a,b,c){a=(new ma).O(a);c&&(a.length=c);b||a.push(0)\
+;return a}Module.intArrayFromString=S;Module.intArrayToString=function(a){for(v\
+ar b=[],c=0;c<a.length;c++){var d=a[c];255<d&&(d&=255);b.push(String.fromCharCo\
+de(d))}return b.join("")}; function xa(a,b,c){a=S(a,c);for(c=0;c<a.length;)J[b+\
+c|0]=a[c],c+=1}Module.writeStringToMemory=xa;function ya(a,b){for(var c=0;c<a.l\
+ength;c++)J[b+c|0]=a[c]}Module.writeArrayToMemory=ya;function Qa(a,b){return 0<\
+=a?a:32>=b?2*Math.abs(1<<b-1)+a:Math.pow(2,b)+a}function Ra(a,b){if(0>=a)return\
+ a;var c=32>=b?Math.abs(1<<b-1):Math.pow(2,b-1);if(a>=c&&(32>=b||a>c))a=-2*c+a;\
+return a}Math.imul||(Math.imul=function(a,b){var c=a&65535,d=b&65535;return c*d\
++((a>>>16)*d+c*(b>>>16)<<16)|0}); var T=0,Sa={},Ta=t,Ua=r;function Va(a){T++;Mo\
+dule.monitorRunDependencies&&Module.monitorRunDependencies(T);a?(z(!Sa[a]),Sa[a\
+]=1):Module.g("warning: run dependency added without ID")}Module.addRunDependen\
+cy=Va;function Wa(a){T--;Module.monitorRunDependencies&&Module.monitorRunDepend\
+encies(T);a?(z(Sa[a]),delete Sa[a]):Module.g("warning: run dependency removed w\
+ithout ID");0==T&&(Ua!==r&&(clearInterval(Ua),Ua=r),!Ta&&Xa&&Ya([].concat(Modul\
+e.arguments)))}Module.removeRunDependency=Wa; Module.preloadedImages={};Module.\
+preloadedAudios={};Ha=8;C=Ha+14192; P([111,107,46,0,0,0,0,0,12,0,8,0,140,0,8,0,\
+76,0,8,0,204,0,8,0,44,0,8,0,172,0,8,0,108,0,8,0,236,0,8,0,28,0,8,0,156,0,8,0,92\
+,0,8,0,220,0,8,0,60,0,8,0,188,0,8,0,124,0,8,0,252,0,8,0,2,0,8,0,130,0,8,0,66,0,\
+8,0,194,0,8,0,34,0,8,0,162,0,8,0,98,0,8,0,226,0,8,0,18,0,8,0,146,0,8,0,82,0,8,0\
+,210,0,8,0,50,0,8,0,178,0,8,0,114,0,8,0,242,0,8,0,10,0,8,0,138,0,8,0,74,0,8,0,2\
+02,0,8,0,42,0,8,0,170,0,8,0,106,0,8,0,234,0,8,0,26,0,8,0,154,0,8,0,90,0,8,0,218\
+,0,8,0,58,0,8,0,186,0,8,0,122,0,8,0,250,0,8,0,6,0,8,0,134,0,8,0, 70,0,8,0,198,0\
+,8,0,38,0,8,0,166,0,8,0,102,0,8,0,230,0,8,0,22,0,8,0,150,0,8,0,86,0,8,0,214,0,8\
+,0,54,0,8,0,182,0,8,0,118,0,8,0,246,0,8,0,14,0,8,0,142,0,8,0,78,0,8,0,206,0,8,0\
+,46,0,8,0,174,0,8,0,110,0,8,0,238,0,8,0,30,0,8,0,158,0,8,0,94,0,8,0,222,0,8,0,6\
+2,0,8,0,190,0,8,0,126,0,8,0,254,0,8,0,1,0,8,0,129,0,8,0,65,0,8,0,193,0,8,0,33,0\
+,8,0,161,0,8,0,97,0,8,0,225,0,8,0,17,0,8,0,145,0,8,0,81,0,8,0,209,0,8,0,49,0,8,\
+0,177,0,8,0,113,0,8,0,241,0,8,0,9,0,8,0,137,0,8,0,73,0,8,0,201,0,8,0,41,0,8,0,1\
+69,0,8,0,105, 0,8,0,233,0,8,0,25,0,8,0,153,0,8,0,89,0,8,0,217,0,8,0,57,0,8,0,18\
+5,0,8,0,121,0,8,0,249,0,8,0,5,0,8,0,133,0,8,0,69,0,8,0,197,0,8,0,37,0,8,0,165,0\
+,8,0,101,0,8,0,229,0,8,0,21,0,8,0,149,0,8,0,85,0,8,0,213,0,8,0,53,0,8,0,181,0,8\
+,0,117,0,8,0,245,0,8,0,13,0,8,0,141,0,8,0,77,0,8,0,205,0,8,0,45,0,8,0,173,0,8,0\
+,109,0,8,0,237,0,8,0,29,0,8,0,157,0,8,0,93,0,8,0,221,0,8,0,61,0,8,0,189,0,8,0,1\
+25,0,8,0,253,0,8,0,19,0,9,0,19,1,9,0,147,0,9,0,147,1,9,0,83,0,9,0,83,1,9,0,211,\
+0,9,0,211,1,9,0,51,0,9,0,51,1,9,0,179,0,9, 0,179,1,9,0,115,0,9,0,115,1,9,0,243,\
+0,9,0,243,1,9,0,11,0,9,0,11,1,9,0,139,0,9,0,139,1,9,0,75,0,9,0,75,1,9,0,203,0,9\
+,0,203,1,9,0,43,0,9,0,43,1,9,0,171,0,9,0,171,1,9,0,107,0,9,0,107,1,9,0,235,0,9,\
+0,235,1,9,0,27,0,9,0,27,1,9,0,155,0,9,0,155,1,9,0,91,0,9,0,91,1,9,0,219,0,9,0,2\
+19,1,9,0,59,0,9,0,59,1,9,0,187,0,9,0,187,1,9,0,123,0,9,0,123,1,9,0,251,0,9,0,25\
+1,1,9,0,7,0,9,0,7,1,9,0,135,0,9,0,135,1,9,0,71,0,9,0,71,1,9,0,199,0,9,0,199,1,9\
+,0,39,0,9,0,39,1,9,0,167,0,9,0,167,1,9,0,103,0,9,0,103,1,9,0,231,0,9,0, 231,1,9\
+,0,23,0,9,0,23,1,9,0,151,0,9,0,151,1,9,0,87,0,9,0,87,1,9,0,215,0,9,0,215,1,9,0,\
+55,0,9,0,55,1,9,0,183,0,9,0,183,1,9,0,119,0,9,0,119,1,9,0,247,0,9,0,247,1,9,0,1\
+5,0,9,0,15,1,9,0,143,0,9,0,143,1,9,0,79,0,9,0,79,1,9,0,207,0,9,0,207,1,9,0,47,0\
+,9,0,47,1,9,0,175,0,9,0,175,1,9,0,111,0,9,0,111,1,9,0,239,0,9,0,239,1,9,0,31,0,\
+9,0,31,1,9,0,159,0,9,0,159,1,9,0,95,0,9,0,95,1,9,0,223,0,9,0,223,1,9,0,63,0,9,0\
+,63,1,9,0,191,0,9,0,191,1,9,0,127,0,9,0,127,1,9,0,255,0,9,0,255,1,9,0,0,0,7,0,6\
+4,0,7,0,32,0,7,0,96, 0,7,0,16,0,7,0,80,0,7,0,48,0,7,0,112,0,7,0,8,0,7,0,72,0,7,\
+0,40,0,7,0,104,0,7,0,24,0,7,0,88,0,7,0,56,0,7,0,120,0,7,0,4,0,7,0,68,0,7,0,36,0\
+,7,0,100,0,7,0,20,0,7,0,84,0,7,0,52,0,7,0,116,0,7,0,3,0,8,0,131,0,8,0,67,0,8,0,\
+195,0,8,0,35,0,8,0,163,0,8,0,99,0,8,0,227,0,8,0,16,0,0,0,16,15,0,0,1,1,0,0,30,1\
+,0,0,15,0,0,0,0,0,0,0,0,0,5,0,16,0,5,0,8,0,5,0,24,0,5,0,4,0,5,0,20,0,5,0,12,0,5\
+,0,28,0,5,0,2,0,5,0,18,0,5,0,10,0,5,0,26,0,5,0,6,0,5,0,22,0,5,0,14,0,5,0,30,0,5\
+,0,1,0,5,0,17,0,5,0,9,0,5,0,25,0,5,0,5,0,5,0,21, 0,5,0,13,0,5,0,29,0,5,0,3,0,5,\
+0,19,0,5,0,11,0,5,0,27,0,5,0,7,0,5,0,23,0,5,0,168,4,0,0,136,15,0,0,0,0,0,0,30,0\
+,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,19,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0\
+,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,16,0,16,0,16,0,16,0,16,0,16,0,16,\
+0,17,0,17,0,17,0,17,0,18,0,18,0,18,0,18,0,19,0,19,0,19,0,19,0,20,0,20,0,20,0,20\
+,0,21,0,21,0,21,0,21,0,16,0,73,0,195,0,0,0,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,\
+0,13,0,15,0,17,0,19,0,23,0,27,0,31,0,35,0,43,0,51,0,59,0,67,0,83,0,99,0,115, 0,\
+131,0,163,0,195,0,227,0,2,1,0,0,0,0,0,0,16,0,16,0,16,0,16,0,17,0,17,0,18,0,18,0\
+,19,0,19,0,20,0,20,0,21,0,21,0,22,0,22,0,23,0,23,0,24,0,24,0,25,0,25,0,26,0,26,\
+0,27,0,27,0,28,0,28,0,29,0,29,0,64,0,64,0,1,0,2,0,3,0,4,0,5,0,7,0,9,0,13,0,17,0\
+,25,0,33,0,49,0,65,0,97,0,129,0,193,0,1,1,129,1,1,2,1,3,1,4,1,6,1,8,1,12,1,16,1\
+,24,1,32,1,48,1,64,1,96,0,0,0,0,16,0,17,0,18,0,0,0,8,0,7,0,9,0,6,0,10,0,5,0,11,\
+0,4,0,12,0,3,0,13,0,2,0,14,0,1,0,15,0,0,0,96,7,0,0,0,8,80,0,0,8,16,0,20,8,115,0\
+,18,7,31,0,0,8,112,0,0,8, 48,0,0,9,192,0,16,7,10,0,0,8,96,0,0,8,32,0,0,9,160,0,\
+0,8,0,0,0,8,128,0,0,8,64,0,0,9,224,0,16,7,6,0,0,8,88,0,0,8,24,0,0,9,144,0,19,7,\
+59,0,0,8,120,0,0,8,56,0,0,9,208,0,17,7,17,0,0,8,104,0,0,8,40,0,0,9,176,0,0,8,8,\
+0,0,8,136,0,0,8,72,0,0,9,240,0,16,7,4,0,0,8,84,0,0,8,20,0,21,8,227,0,19,7,43,0,\
+0,8,116,0,0,8,52,0,0,9,200,0,17,7,13,0,0,8,100,0,0,8,36,0,0,9,168,0,0,8,4,0,0,8\
+,132,0,0,8,68,0,0,9,232,0,16,7,8,0,0,8,92,0,0,8,28,0,0,9,152,0,20,7,83,0,0,8,12\
+4,0,0,8,60,0,0,9,216,0,18,7,23,0,0,8,108,0,0,8,44,0,0, 9,184,0,0,8,12,0,0,8,140\
+,0,0,8,76,0,0,9,248,0,16,7,3,0,0,8,82,0,0,8,18,0,21,8,163,0,19,7,35,0,0,8,114,0\
+,0,8,50,0,0,9,196,0,17,7,11,0,0,8,98,0,0,8,34,0,0,9,164,0,0,8,2,0,0,8,130,0,0,8\
+,66,0,0,9,228,0,16,7,7,0,0,8,90,0,0,8,26,0,0,9,148,0,20,7,67,0,0,8,122,0,0,8,58\
+,0,0,9,212,0,18,7,19,0,0,8,106,0,0,8,42,0,0,9,180,0,0,8,10,0,0,8,138,0,0,8,74,0\
+,0,9,244,0,16,7,5,0,0,8,86,0,0,8,22,0,64,8,0,0,19,7,51,0,0,8,118,0,0,8,54,0,0,9\
+,204,0,17,7,15,0,0,8,102,0,0,8,38,0,0,9,172,0,0,8,6,0,0,8,134,0,0,8,70,0,0,9,23\
+6,0, 16,7,9,0,0,8,94,0,0,8,30,0,0,9,156,0,20,7,99,0,0,8,126,0,0,8,62,0,0,9,220,\
+0,18,7,27,0,0,8,110,0,0,8,46,0,0,9,188,0,0,8,14,0,0,8,142,0,0,8,78,0,0,9,252,0,\
+96,7,0,0,0,8,81,0,0,8,17,0,21,8,131,0,18,7,31,0,0,8,113,0,0,8,49,0,0,9,194,0,16\
+,7,10,0,0,8,97,0,0,8,33,0,0,9,162,0,0,8,1,0,0,8,129,0,0,8,65,0,0,9,226,0,16,7,6\
+,0,0,8,89,0,0,8,25,0,0,9,146,0,19,7,59,0,0,8,121,0,0,8,57,0,0,9,210,0,17,7,17,0\
+,0,8,105,0,0,8,41,0,0,9,178,0,0,8,9,0,0,8,137,0,0,8,73,0,0,9,242,0,16,7,4,0,0,8\
+,85,0,0,8,21,0,16,8,2,1,19,7,43, 0,0,8,117,0,0,8,53,0,0,9,202,0,17,7,13,0,0,8,1\
+01,0,0,8,37,0,0,9,170,0,0,8,5,0,0,8,133,0,0,8,69,0,0,9,234,0,16,7,8,0,0,8,93,0,\
+0,8,29,0,0,9,154,0,20,7,83,0,0,8,125,0,0,8,61,0,0,9,218,0,18,7,23,0,0,8,109,0,0\
+,8,45,0,0,9,186,0,0,8,13,0,0,8,141,0,0,8,77,0,0,9,250,0,16,7,3,0,0,8,83,0,0,8,1\
+9,0,21,8,195,0,19,7,35,0,0,8,115,0,0,8,51,0,0,9,198,0,17,7,11,0,0,8,99,0,0,8,35\
+,0,0,9,166,0,0,8,3,0,0,8,131,0,0,8,67,0,0,9,230,0,16,7,7,0,0,8,91,0,0,8,27,0,0,\
+9,150,0,20,7,67,0,0,8,123,0,0,8,59,0,0,9,214,0,18,7,19,0,0,8, 107,0,0,8,43,0,0,\
+9,182,0,0,8,11,0,0,8,139,0,0,8,75,0,0,9,246,0,16,7,5,0,0,8,87,0,0,8,23,0,64,8,0\
+,0,19,7,51,0,0,8,119,0,0,8,55,0,0,9,206,0,17,7,15,0,0,8,103,0,0,8,39,0,0,9,174,\
+0,0,8,7,0,0,8,135,0,0,8,71,0,0,9,238,0,16,7,9,0,0,8,95,0,0,8,31,0,0,9,158,0,20,\
+7,99,0,0,8,127,0,0,8,63,0,0,9,222,0,18,7,27,0,0,8,111,0,0,8,47,0,0,9,190,0,0,8,\
+15,0,0,8,143,0,0,8,79,0,0,9,254,0,96,7,0,0,0,8,80,0,0,8,16,0,20,8,115,0,18,7,31\
+,0,0,8,112,0,0,8,48,0,0,9,193,0,16,7,10,0,0,8,96,0,0,8,32,0,0,9,161,0,0,8,0,0,0\
+,8,128,0,0, 8,64,0,0,9,225,0,16,7,6,0,0,8,88,0,0,8,24,0,0,9,145,0,19,7,59,0,0,8\
+,120,0,0,8,56,0,0,9,209,0,17,7,17,0,0,8,104,0,0,8,40,0,0,9,177,0,0,8,8,0,0,8,13\
+6,0,0,8,72,0,0,9,241,0,16,7,4,0,0,8,84,0,0,8,20,0,21,8,227,0,19,7,43,0,0,8,116,\
+0,0,8,52,0,0,9,201,0,17,7,13,0,0,8,100,0,0,8,36,0,0,9,169,0,0,8,4,0,0,8,132,0,0\
+,8,68,0,0,9,233,0,16,7,8,0,0,8,92,0,0,8,28,0,0,9,153,0,20,7,83,0,0,8,124,0,0,8,\
+60,0,0,9,217,0,18,7,23,0,0,8,108,0,0,8,44,0,0,9,185,0,0,8,12,0,0,8,140,0,0,8,76\
+,0,0,9,249,0,16,7,3,0,0,8,82,0,0,8,18,0, 21,8,163,0,19,7,35,0,0,8,114,0,0,8,50,\
+0,0,9,197,0,17,7,11,0,0,8,98,0,0,8,34,0,0,9,165,0,0,8,2,0,0,8,130,0,0,8,66,0,0,\
+9,229,0,16,7,7,0,0,8,90,0,0,8,26,0,0,9,149,0,20,7,67,0,0,8,122,0,0,8,58,0,0,9,2\
+13,0,18,7,19,0,0,8,106,0,0,8,42,0,0,9,181,0,0,8,10,0,0,8,138,0,0,8,74,0,0,9,245\
+,0,16,7,5,0,0,8,86,0,0,8,22,0,64,8,0,0,19,7,51,0,0,8,118,0,0,8,54,0,0,9,205,0,1\
+7,7,15,0,0,8,102,0,0,8,38,0,0,9,173,0,0,8,6,0,0,8,134,0,0,8,70,0,0,9,237,0,16,7\
+,9,0,0,8,94,0,0,8,30,0,0,9,157,0,20,7,99,0,0,8,126,0,0,8,62,0,0,9,221, 0,18,7,2\
+7,0,0,8,110,0,0,8,46,0,0,9,189,0,0,8,14,0,0,8,142,0,0,8,78,0,0,9,253,0,96,7,0,0\
+,0,8,81,0,0,8,17,0,21,8,131,0,18,7,31,0,0,8,113,0,0,8,49,0,0,9,195,0,16,7,10,0,\
+0,8,97,0,0,8,33,0,0,9,163,0,0,8,1,0,0,8,129,0,0,8,65,0,0,9,227,0,16,7,6,0,0,8,8\
+9,0,0,8,25,0,0,9,147,0,19,7,59,0,0,8,121,0,0,8,57,0,0,9,211,0,17,7,17,0,0,8,105\
+,0,0,8,41,0,0,9,179,0,0,8,9,0,0,8,137,0,0,8,73,0,0,9,243,0,16,7,4,0,0,8,85,0,0,\
+8,21,0,16,8,2,1,19,7,43,0,0,8,117,0,0,8,53,0,0,9,203,0,17,7,13,0,0,8,101,0,0,8,\
+37,0,0,9,171,0,0,8, 5,0,0,8,133,0,0,8,69,0,0,9,235,0,16,7,8,0,0,8,93,0,0,8,29,0\
+,0,9,155,0,20,7,83,0,0,8,125,0,0,8,61,0,0,9,219,0,18,7,23,0,0,8,109,0,0,8,45,0,\
+0,9,187,0,0,8,13,0,0,8,141,0,0,8,77,0,0,9,251,0,16,7,3,0,0,8,83,0,0,8,19,0,21,8\
+,195,0,19,7,35,0,0,8,115,0,0,8,51,0,0,9,199,0,17,7,11,0,0,8,99,0,0,8,35,0,0,9,1\
+67,0,0,8,3,0,0,8,131,0,0,8,67,0,0,9,231,0,16,7,7,0,0,8,91,0,0,8,27,0,0,9,151,0,\
+20,7,67,0,0,8,123,0,0,8,59,0,0,9,215,0,18,7,19,0,0,8,107,0,0,8,43,0,0,9,183,0,0\
+,8,11,0,0,8,139,0,0,8,75,0,0,9,247,0,16,7,5,0,0, 8,87,0,0,8,23,0,64,8,0,0,19,7,\
+51,0,0,8,119,0,0,8,55,0,0,9,207,0,17,7,15,0,0,8,103,0,0,8,39,0,0,9,175,0,0,8,7,\
+0,0,8,135,0,0,8,71,0,0,9,239,0,16,7,9,0,0,8,95,0,0,8,31,0,0,9,159,0,20,7,99,0,0\
+,8,127,0,0,8,63,0,0,9,223,0,18,7,27,0,0,8,111,0,0,8,47,0,0,9,191,0,0,8,15,0,0,8\
+,143,0,0,8,79,0,0,9,255,0,16,5,1,0,23,5,1,1,19,5,17,0,27,5,1,16,17,5,5,0,25,5,1\
+,4,21,5,65,0,29,5,1,64,16,5,3,0,24,5,1,2,20,5,33,0,28,5,1,32,18,5,9,0,26,5,1,8,\
+22,5,129,0,64,5,0,0,16,5,2,0,23,5,129,1,19,5,25,0,27,5,1,24,17,5,7,0,25,5,1, 6,\
+21,5,97,0,29,5,1,96,16,5,4,0,24,5,1,3,20,5,49,0,28,5,1,48,18,5,13,0,26,5,1,12,2\
+2,5,193,0,64,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
+0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,3,0,0,0,3,0\
+,0,0,3,0,0,0,3,0,0,0,4,0,0,0,4,0,0,0,4,0,0,0,4,0,0,0,5,0,0,0,5,0,0,0,5,0,0,0,5,\
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,2,0,0,0,2\
+,0,0,0,3,0,0,0,3,0,0,0,4,0,0,0,4,0,0,0,5,0,0,0,5,0,0,0,6,0,0,0,6,0,0,0,7,0,0,0,\
+7,0,0,0,8,0,0,0,8,0,0,0,9, 0,0,0,9,0,0,0,10,0,0,0,10,0,0,0,11,0,0,0,11,0,0,0,12\
+,0,0,0,12,0,0,0,13,0,0,0,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\
+,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
+0,0,2,0,0,0,3,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,150\
+,48,7,119,44,97,14,238,186,81,9,153,25,196,109,7,143,244,106,112,53,165,99,233,\
+163,149,100,158,50,136,219,14,164,184,220,121,30,233,213,224,136,217,210,151,43\
+,76,182,9,189,124,177,126,7,45,184,231,145,29,191,144, 100,16,183,29,242,32,176\
+,106,72,113,185,243,222,65,190,132,125,212,218,26,235,228,221,109,81,181,212,24\
+4,199,133,211,131,86,152,108,19,192,168,107,100,122,249,98,253,236,201,101,138,\
+79,92,1,20,217,108,6,99,99,61,15,250,245,13,8,141,200,32,110,59,94,16,105,76,22\
+8,65,96,213,114,113,103,162,209,228,3,60,71,212,4,75,253,133,13,210,107,181,10,\
+165,250,168,181,53,108,152,178,66,214,201,187,219,64,249,188,172,227,108,216,50\
+,117,92,223,69,207,13,214,220,89,61,209,171,172,48,217,38,58,0,222,81,128,81,21\
+5,200, 22,97,208,191,181,244,180,33,35,196,179,86,153,149,186,207,15,165,189,18\
+4,158,184,2,40,8,136,5,95,178,217,12,198,36,233,11,177,135,124,111,47,17,76,104\
+,88,171,29,97,193,61,45,102,182,144,65,220,118,6,113,219,1,188,32,210,152,42,16\
+,213,239,137,133,177,113,31,181,182,6,165,228,191,159,51,212,184,232,162,201,7,\
+120,52,249,0,15,142,168,9,150,24,152,14,225,187,13,106,127,45,61,109,8,151,108,\
+100,145,1,92,99,230,244,81,107,107,98,97,108,28,216,48,101,133,78,0,98,242,237,\
+149,6,108,123,165,1,27,193,244,8,130, 87,196,15,245,198,217,176,101,80,233,183,\
+18,234,184,190,139,124,136,185,252,223,29,221,98,73,45,218,21,243,124,211,140,1\
+01,76,212,251,88,97,178,77,206,81,181,58,116,0,188,163,226,48,187,212,65,165,22\
+3,74,215,149,216,61,109,196,209,164,251,244,214,211,106,233,105,67,252,217,110,\
+52,70,136,103,173,208,184,96,218,115,45,4,68,229,29,3,51,95,76,10,170,201,124,1\
+3,221,60,113,5,80,170,65,2,39,16,16,11,190,134,32,12,201,37,181,104,87,179,133,\
+111,32,9,212,102,185,159,228,97,206,14,249,222,94,152,201,217,41, 34,152,208,17\
+6,180,168,215,199,23,61,179,89,129,13,180,46,59,92,189,183,173,108,186,192,32,1\
+31,184,237,182,179,191,154,12,226,182,3,154,210,177,116,57,71,213,234,175,119,2\
+10,157,21,38,219,4,131,22,220,115,18,11,99,227,132,59,100,148,62,106,109,13,168\
+,90,106,122,11,207,14,228,157,255,9,147,39,174,0,10,177,158,7,125,68,147,15,240\
+,210,163,8,135,104,242,1,30,254,194,6,105,93,87,98,247,203,103,101,128,113,54,1\
+08,25,231,6,107,110,118,27,212,254,224,43,211,137,90,122,218,16,204,74,221,103,\
+111,223,185,249, 249,239,190,142,67,190,183,23,213,142,176,96,232,163,214,214,1\
+26,147,209,161,196,194,216,56,82,242,223,79,241,103,187,209,103,87,188,166,221,\
+6,181,63,75,54,178,72,218,43,13,216,76,27,10,175,246,74,3,54,96,122,4,65,195,23\
+9,96,223,85,223,103,168,239,142,110,49,121,190,105,70,140,179,97,203,26,131,102\
+,188,160,210,111,37,54,226,104,82,149,119,12,204,3,71,11,187,185,22,2,34,47,38,\
+5,85,190,59,186,197,40,11,189,178,146,90,180,43,4,106,179,92,167,255,215,194,49\
+,207,208,181,139,158,217,44,29,174,222,91,176, 194,100,155,38,242,99,236,156,16\
+3,106,117,10,147,109,2,169,6,9,156,63,54,14,235,133,103,7,114,19,87,0,5,130,74,\
+191,149,20,122,184,226,174,43,177,123,56,27,182,12,155,142,210,146,13,190,213,2\
+29,183,239,220,124,33,223,219,11,212,210,211,134,66,226,212,241,248,179,221,104\
+,110,131,218,31,205,22,190,129,91,38,185,246,225,119,176,111,119,71,183,24,230,\
+90,8,136,112,106,15,255,202,59,6,102,92,11,1,17,255,158,101,143,105,174,98,248,\
+211,255,107,97,69,207,108,22,120,226,10,160,238,210,13,215,84,131,4,78,194, 179\
+,3,57,97,38,103,167,247,22,96,208,77,71,105,73,219,119,110,62,74,106,209,174,22\
+0,90,214,217,102,11,223,64,240,59,216,55,83,174,188,169,197,158,187,222,127,207\
+,178,71,233,255,181,48,28,242,189,189,138,194,186,202,48,147,179,83,166,163,180\
+,36,5,54,208,186,147,6,215,205,41,87,222,84,191,103,217,35,46,122,102,179,184,7\
+4,97,196,2,27,104,93,148,43,111,42,55,190,11,180,161,142,12,195,27,223,5,90,141\
+,239,2,45,0,0,0,0,65,49,27,25,130,98,54,50,195,83,45,43,4,197,108,100,69,244,11\
+9,125,134,167,90,86,199, 150,65,79,8,138,217,200,73,187,194,209,138,232,239,250\
+,203,217,244,227,12,79,181,172,77,126,174,181,142,45,131,158,207,28,152,135,81,\
+18,194,74,16,35,217,83,211,112,244,120,146,65,239,97,85,215,174,46,20,230,181,5\
+5,215,181,152,28,150,132,131,5,89,152,27,130,24,169,0,155,219,250,45,176,154,20\
+3,54,169,93,93,119,230,28,108,108,255,223,63,65,212,158,14,90,205,162,36,132,14\
+9,227,21,159,140,32,70,178,167,97,119,169,190,166,225,232,241,231,208,243,232,3\
+6,131,222,195,101,178,197,218,170,174,93,93,235,159, 70,68,40,204,107,111,105,2\
+53,112,118,174,107,49,57,239,90,42,32,44,9,7,11,109,56,28,18,243,54,70,223,178,\
+7,93,198,113,84,112,237,48,101,107,244,247,243,42,187,182,194,49,162,117,145,28\
+,137,52,160,7,144,251,188,159,23,186,141,132,14,121,222,169,37,56,239,178,60,25\
+5,121,243,115,190,72,232,106,125,27,197,65,60,42,222,88,5,79,121,240,68,126,98,\
+233,135,45,79,194,198,28,84,219,1,138,21,148,64,187,14,141,131,232,35,166,194,2\
+17,56,191,13,197,160,56,76,244,187,33,143,167,150,10,206,150,141,19,9,0,204,92,\
+72, 49,215,69,139,98,250,110,202,83,225,119,84,93,187,186,21,108,160,163,214,63\
+,141,136,151,14,150,145,80,152,215,222,17,169,204,199,210,250,225,236,147,203,2\
+50,245,92,215,98,114,29,230,121,107,222,181,84,64,159,132,79,89,88,18,14,22,25,\
+35,21,15,218,112,56,36,155,65,35,61,167,107,253,101,230,90,230,124,37,9,203,87,\
+100,56,208,78,163,174,145,1,226,159,138,24,33,204,167,51,96,253,188,42,175,225,\
+36,173,238,208,63,180,45,131,18,159,108,178,9,134,171,36,72,201,234,21,83,208,4\
+1,70,126,251,104,119,101,226,246, 121,63,47,183,72,36,54,116,27,9,29,53,42,18,4\
+,242,188,83,75,179,141,72,82,112,222,101,121,49,239,126,96,254,243,230,231,191,\
+194,253,254,124,145,208,213,61,160,203,204,250,54,138,131,187,7,145,154,120,84,\
+188,177,57,101,167,168,75,152,131,59,10,169,152,34,201,250,181,9,136,203,174,16\
+,79,93,239,95,14,108,244,70,205,63,217,109,140,14,194,116,67,18,90,243,2,35,65,\
+234,193,112,108,193,128,65,119,216,71,215,54,151,6,230,45,142,197,181,0,165,132\
+,132,27,188,26,138,65,113,91,187,90,104,152,232,119,67,217,217, 108,90,30,79,45\
+,21,95,126,54,12,156,45,27,39,221,28,0,62,18,0,152,185,83,49,131,160,144,98,174\
+,139,209,83,181,146,22,197,244,221,87,244,239,196,148,167,194,239,213,150,217,2\
+46,233,188,7,174,168,141,28,183,107,222,49,156,42,239,42,133,237,121,107,202,17\
+2,72,112,211,111,27,93,248,46,42,70,225,225,54,222,102,160,7,197,127,99,84,232,\
+84,34,101,243,77,229,243,178,2,164,194,169,27,103,145,132,48,38,160,159,41,184,\
+174,197,228,249,159,222,253,58,204,243,214,123,253,232,207,188,107,169,128,253,\
+90,178,153,62, 9,159,178,127,56,132,171,176,36,28,44,241,21,7,53,50,70,42,30,11\
+5,119,49,7,180,225,112,72,245,208,107,81,54,131,70,122,119,178,93,99,78,215,250\
+,203,15,230,225,210,204,181,204,249,141,132,215,224,74,18,150,175,11,35,141,182\
+,200,112,160,157,137,65,187,132,70,93,35,3,7,108,56,26,196,63,21,49,133,14,14,4\
+0,66,152,79,103,3,169,84,126,192,250,121,85,129,203,98,76,31,197,56,129,94,244,\
+35,152,157,167,14,179,220,150,21,170,27,0,84,229,90,49,79,252,153,98,98,215,216\
+,83,121,206,23,79,225,73,86,126,250,80,149, 45,215,123,212,28,204,98,19,138,141\
+,45,82,187,150,52,145,232,187,31,208,217,160,6,236,243,126,94,173,194,101,71,11\
+0,145,72,108,47,160,83,117,232,54,18,58,169,7,9,35,106,84,36,8,43,101,63,17,228\
+,121,167,150,165,72,188,143,102,27,145,164,39,42,138,189,224,188,203,242,161,14\
+1,208,235,98,222,253,192,35,239,230,217,189,225,188,20,252,208,167,13,63,131,13\
+8,38,126,178,145,63,185,36,208,112,248,21,203,105,59,70,230,66,122,119,253,91,1\
+81,107,101,220,244,90,126,197,55,9,83,238,118,56,72,247,177,174,9,184,240, 159,\
+18,161,51,204,63,138,114,253,36,147,0,0,0,0,55,106,194,1,110,212,132,3,89,190,7\
+0,2,220,168,9,7,235,194,203,6,178,124,141,4,133,22,79,5,184,81,19,14,143,59,209\
+,15,214,133,151,13,225,239,85,12,100,249,26,9,83,147,216,8,10,45,158,10,61,71,9\
+2,11,112,163,38,28,71,201,228,29,30,119,162,31,41,29,96,30,172,11,47,27,155,97,\
+237,26,194,223,171,24,245,181,105,25,200,242,53,18,255,152,247,19,166,38,177,17\
+,145,76,115,16,20,90,60,21,35,48,254,20,122,142,184,22,77,228,122,23,224,70,77,\
+56,215,44,143,57,142,146, 201,59,185,248,11,58,60,238,68,63,11,132,134,62,82,58\
+,192,60,101,80,2,61,88,23,94,54,111,125,156,55,54,195,218,53,1,169,24,52,132,19\
+1,87,49,179,213,149,48,234,107,211,50,221,1,17,51,144,229,107,36,167,143,169,37\
+,254,49,239,39,201,91,45,38,76,77,98,35,123,39,160,34,34,153,230,32,21,243,36,3\
+3,40,180,120,42,31,222,186,43,70,96,252,41,113,10,62,40,244,28,113,45,195,118,1\
+79,44,154,200,245,46,173,162,55,47,192,141,154,112,247,231,88,113,174,89,30,115\
+,153,51,220,114,28,37,147,119,43,79,81,118,114,241,23, 116,69,155,213,117,120,2\
+20,137,126,79,182,75,127,22,8,13,125,33,98,207,124,164,116,128,121,147,30,66,12\
+0,202,160,4,122,253,202,198,123,176,46,188,108,135,68,126,109,222,250,56,111,23\
+3,144,250,110,108,134,181,107,91,236,119,106,2,82,49,104,53,56,243,105,8,127,17\
+5,98,63,21,109,99,102,171,43,97,81,193,233,96,212,215,166,101,227,189,100,100,1\
+86,3,34,102,141,105,224,103,32,203,215,72,23,161,21,73,78,31,83,75,121,117,145,\
+74,252,99,222,79,203,9,28,78,146,183,90,76,165,221,152,77,152,154,196,70,175,24\
+0,6, 71,246,78,64,69,193,36,130,68,68,50,205,65,115,88,15,64,42,230,73,66,29,14\
+0,139,67,80,104,241,84,103,2,51,85,62,188,117,87,9,214,183,86,140,192,248,83,18\
+7,170,58,82,226,20,124,80,213,126,190,81,232,57,226,90,223,83,32,91,134,237,102\
+,89,177,135,164,88,52,145,235,93,3,251,41,92,90,69,111,94,109,47,173,95,128,27,\
+53,225,183,113,247,224,238,207,177,226,217,165,115,227,92,179,60,230,107,217,25\
+4,231,50,103,184,229,5,13,122,228,56,74,38,239,15,32,228,238,86,158,162,236,97,\
+244,96,237,228,226,47,232,211,136, 237,233,138,54,171,235,189,92,105,234,240,18\
+4,19,253,199,210,209,252,158,108,151,254,169,6,85,255,44,16,26,250,27,122,216,2\
+51,66,196,158,249,117,174,92,248,72,233,0,243,127,131,194,242,38,61,132,240,17,\
+87,70,241,148,65,9,244,163,43,203,245,250,149,141,247,205,255,79,246,96,93,120,\
+217,87,55,186,216,14,137,252,218,57,227,62,219,188,245,113,222,139,159,179,223,\
+210,33,245,221,229,75,55,220,216,12,107,215,239,102,169,214,182,216,239,212,129\
+,178,45,213,4,164,98,208,51,206,160,209,106,112,230,211,93,26, 36,210,16,254,94\
+,197,39,148,156,196,126,42,218,198,73,64,24,199,204,86,87,194,251,60,149,195,16\
+2,130,211,193,149,232,17,192,168,175,77,203,159,197,143,202,198,123,201,200,241\
+,17,11,201,116,7,68,204,67,109,134,205,26,211,192,207,45,185,2,206,64,150,175,1\
+45,119,252,109,144,46,66,43,146,25,40,233,147,156,62,166,150,171,84,100,151,242\
+,234,34,149,197,128,224,148,248,199,188,159,207,173,126,158,150,19,56,156,161,1\
+21,250,157,36,111,181,152,19,5,119,153,74,187,49,155,125,209,243,154,48,53,137,\
+141,7,95,75, 140,94,225,13,142,105,139,207,143,236,157,128,138,219,247,66,139,1\
+30,73,4,137,181,35,198,136,136,100,154,131,191,14,88,130,230,176,30,128,209,218\
+,220,129,84,204,147,132,99,166,81,133,58,24,23,135,13,114,213,134,160,208,226,1\
+69,151,186,32,168,206,4,102,170,249,110,164,171,124,120,235,174,75,18,41,175,18\
+,172,111,173,37,198,173,172,24,129,241,167,47,235,51,166,118,85,117,164,65,63,1\
+83,165,196,41,248,160,243,67,58,161,170,253,124,163,157,151,190,162,208,115,196\
+,181,231,25,6,180,190,167,64,182,137,205, 130,183,12,219,205,178,59,177,15,179,\
+98,15,73,177,85,101,139,176,104,34,215,187,95,72,21,186,6,246,83,184,49,156,145\
+,185,180,138,222,188,131,224,28,189,218,94,90,191,237,52,152,190,0,0,0,0,101,10\
+3,188,184,139,200,9,170,238,175,181,18,87,151,98,143,50,240,222,55,220,95,107,3\
+7,185,56,215,157,239,40,180,197,138,79,8,125,100,224,189,111,1,135,1,215,184,19\
+1,214,74,221,216,106,242,51,119,223,224,86,16,99,88,159,87,25,80,250,48,165,232\
+,20,159,16,250,113,248,172,66,200,192,123,223,173,167,199,103,67,8,114, 117,38,\
+111,206,205,112,127,173,149,21,24,17,45,251,183,164,63,158,208,24,135,39,232,20\
+7,26,66,143,115,162,172,32,198,176,201,71,122,8,62,175,50,160,91,200,142,24,181\
+,103,59,10,208,0,135,178,105,56,80,47,12,95,236,151,226,240,89,133,135,151,229,\
+61,209,135,134,101,180,224,58,221,90,79,143,207,63,40,51,119,134,16,228,234,227\
+,119,88,82,13,216,237,64,104,191,81,248,161,248,43,240,196,159,151,72,42,48,34,\
+90,79,87,158,226,246,111,73,127,147,8,245,199,125,167,64,213,24,192,252,109,78,\
+208,159,53,43,183,35, 141,197,24,150,159,160,127,42,39,25,71,253,186,124,32,65,\
+2,146,143,244,16,247,232,72,168,61,88,20,155,88,63,168,35,182,144,29,49,211,247\
+,161,137,106,207,118,20,15,168,202,172,225,7,127,190,132,96,195,6,210,112,160,9\
+4,183,23,28,230,89,184,169,244,60,223,21,76,133,231,194,209,224,128,126,105,14,\
+47,203,123,107,72,119,195,162,15,13,203,199,104,177,115,41,199,4,97,76,160,184,\
+217,245,152,111,68,144,255,211,252,126,80,102,238,27,55,218,86,77,39,185,14,40,\
+64,5,182,198,239,176,164,163,136,12,28,26,176,219, 129,127,215,103,57,145,120,2\
+10,43,244,31,110,147,3,247,38,59,102,144,154,131,136,63,47,145,237,88,147,41,84\
+,96,68,180,49,7,248,12,223,168,77,30,186,207,241,166,236,223,146,254,137,184,46\
+,70,103,23,155,84,2,112,39,236,187,72,240,113,222,47,76,201,48,128,249,219,85,2\
+31,69,99,156,160,63,107,249,199,131,211,23,104,54,193,114,15,138,121,203,55,93,\
+228,174,80,225,92,64,255,84,78,37,152,232,246,115,136,139,174,22,239,55,22,248,\
+64,130,4,157,39,62,188,36,31,233,33,65,120,85,153,175,215,224,139,202,176,92,51\
+, 59,182,89,237,94,209,229,85,176,126,80,71,213,25,236,255,108,33,59,98,9,70,13\
+5,218,231,233,50,200,130,142,142,112,212,158,237,40,177,249,81,144,95,86,228,13\
+0,58,49,88,58,131,9,143,167,230,110,51,31,8,193,134,13,109,166,58,181,164,225,6\
+4,189,193,134,252,5,47,41,73,23,74,78,245,175,243,118,34,50,150,17,158,138,120,\
+190,43,152,29,217,151,32,75,201,244,120,46,174,72,192,192,1,253,210,165,102,65,\
+106,28,94,150,247,121,57,42,79,151,150,159,93,242,241,35,229,5,25,107,77,96,126\
+,215,245,142,209,98,231,235,182, 222,95,82,142,9,194,55,233,181,122,217,70,0,10\
+4,188,33,188,208,234,49,223,136,143,86,99,48,97,249,214,34,4,158,106,154,189,16\
+6,189,7,216,193,1,191,54,110,180,173,83,9,8,21,154,78,114,29,255,41,206,165,17,\
+134,123,183,116,225,199,15,205,217,16,146,168,190,172,42,70,17,25,56,35,118,165\
+,128,117,102,198,216,16,1,122,96,254,174,207,114,155,201,115,202,34,241,164,87,\
+71,150,24,239,169,57,173,253,204,94,17,69,6,238,77,118,99,137,241,206,141,38,68\
+,220,232,65,248,100,81,121,47,249,52,30,147,65,218,177,38,83, 191,214,154,235,2\
+33,198,249,179,140,161,69,11,98,14,240,25,7,105,76,161,190,81,155,60,219,54,39,\
+132,53,153,146,150,80,254,46,46,153,185,84,38,252,222,232,158,18,113,93,140,119\
+,22,225,52,206,46,54,169,171,73,138,17,69,230,63,3,32,129,131,187,118,145,224,2\
+27,19,246,92,91,253,89,233,73,152,62,85,241,33,6,130,108,68,97,62,212,170,206,1\
+39,198,207,169,55,126,56,65,127,214,93,38,195,110,179,137,118,124,214,238,202,1\
+96,111,214,29,89,10,177,161,225,228,30,20,243,129,121,168,75,215,105,203,19,178\
+,14,119,171, 92,161,194,185,57,198,126,1,128,254,169,156,229,153,21,36,11,54,16\
+0,54,110,81,28,142,167,22,102,134,194,113,218,62,44,222,111,44,73,185,211,148,2\
+40,129,4,9,149,230,184,177,123,73,13,163,30,46,177,27,72,62,210,67,45,89,110,25\
+1,195,246,219,233,166,145,103,81,31,169,176,204,122,206,12,116,148,97,185,102,2\
+41,6,5,222,0,0,0,0,119,7,48,150,238,14,97,44,153,9,81,186,7,109,196,25,112,106,\
+244,143,233,99,165,53,158,100,149,163,14,219,136,50,121,220,184,164,224,213,233\
+,30,151,210,217,136,9,182,76,43,126,177, 124,189,231,184,45,7,144,191,29,145,29\
+,183,16,100,106,176,32,242,243,185,113,72,132,190,65,222,26,218,212,125,109,221\
+,228,235,244,212,181,81,131,211,133,199,19,108,152,86,100,107,168,192,253,98,24\
+9,122,138,101,201,236,20,1,92,79,99,6,108,217,250,15,61,99,141,8,13,245,59,110,\
+32,200,76,105,16,94,213,96,65,228,162,103,113,114,60,3,228,209,75,4,212,71,210,\
+13,133,253,165,10,181,107,53,181,168,250,66,178,152,108,219,187,201,214,172,188\
+,249,64,50,216,108,227,69,223,92,117,220,214,13,207,171,209,61,89,38, 217,48,17\
+2,81,222,0,58,200,215,81,128,191,208,97,22,33,180,244,181,86,179,196,35,207,186\
+,149,153,184,189,165,15,40,2,184,158,95,5,136,8,198,12,217,178,177,11,233,36,47\
+,111,124,135,88,104,76,17,193,97,29,171,182,102,45,61,118,220,65,144,1,219,113,\
+6,152,210,32,188,239,213,16,42,113,177,133,137,6,182,181,31,159,191,228,165,232\
+,184,212,51,120,7,201,162,15,0,249,52,150,9,168,142,225,14,152,24,127,106,13,18\
+7,8,109,61,45,145,100,108,151,230,99,92,1,107,107,81,244,28,108,97,98,133,101,4\
+8,216,242,98,0,78, 108,6,149,237,27,1,165,123,130,8,244,193,245,15,196,87,101,1\
+76,217,198,18,183,233,80,139,190,184,234,252,185,136,124,98,221,29,223,21,218,4\
+5,73,140,211,124,243,251,212,76,101,77,178,97,88,58,181,81,206,163,188,0,116,21\
+2,187,48,226,74,223,165,65,61,216,149,215,164,209,196,109,211,214,244,251,67,10\
+5,233,106,52,110,217,252,173,103,136,70,218,96,184,208,68,4,45,115,51,3,29,229,\
+170,10,76,95,221,13,124,201,80,5,113,60,39,2,65,170,190,11,16,16,201,12,32,134,\
+87,104,181,37,32,111,133,179,185,102,212,9,206, 97,228,159,94,222,249,14,41,217\
+,201,152,176,208,152,34,199,215,168,180,89,179,61,23,46,180,13,129,183,189,92,5\
+9,192,186,108,173,237,184,131,32,154,191,179,182,3,182,226,12,116,177,210,154,2\
+34,213,71,57,157,210,119,175,4,219,38,21,115,220,22,131,227,99,11,18,148,100,59\
+,132,13,109,106,62,122,106,90,168,228,14,207,11,147,9,255,157,10,0,174,39,125,7\
+,158,177,240,15,147,68,135,8,163,210,30,1,242,104,105,6,194,254,247,98,87,93,12\
+8,101,103,203,25,108,54,113,110,107,6,231,254,212,27,118,137,211,43,224,16, 218\
+,122,90,103,221,74,204,249,185,223,111,142,190,239,249,23,183,190,67,96,176,142\
+,213,214,214,163,232,161,209,147,126,56,216,194,196,79,223,242,82,209,187,103,2\
+41,166,188,87,103,63,181,6,221,72,178,54,75,216,13,43,218,175,10,27,76,54,3,74,\
+246,65,4,122,96,223,96,239,195,168,103,223,85,49,110,142,239,70,105,190,121,203\
+,97,179,140,188,102,131,26,37,111,210,160,82,104,226,54,204,12,119,149,187,11,7\
+1,3,34,2,22,185,85,5,38,47,197,186,59,190,178,189,11,40,43,180,90,146,92,179,10\
+6,4,194,215,255,167,181, 208,207,49,44,217,158,139,91,222,174,29,155,100,194,17\
+6,236,99,242,38,117,106,163,156,2,109,147,10,156,9,6,169,235,14,54,63,114,7,103\
+,133,5,0,87,19,149,191,74,130,226,184,122,20,123,177,43,174,12,182,27,56,146,21\
+0,142,155,229,213,190,13,124,220,239,183,11,219,223,33,134,211,210,212,241,212,\
+226,66,104,221,179,248,31,218,131,110,129,190,22,205,246,185,38,91,111,176,119,\
+225,24,183,71,119,136,8,90,230,255,15,106,112,102,6,59,202,17,1,11,92,143,101,1\
+58,255,248,98,174,105,97,107,255,211,22,108,207,69,160, 10,226,120,215,13,210,2\
+38,78,4,131,84,57,3,179,194,167,103,38,97,208,96,22,247,73,105,71,77,62,110,119\
+,219,174,209,106,74,217,214,90,220,64,223,11,102,55,216,59,240,169,188,174,83,2\
+22,187,158,197,71,178,207,127,48,181,255,233,189,189,242,28,202,186,194,138,83,\
+179,147,48,36,180,163,166,186,208,54,5,205,215,6,147,84,222,87,41,35,217,103,19\
+1,179,102,122,46,196,97,74,184,93,104,27,2,42,111,43,148,180,11,190,55,195,12,1\
+42,161,90,5,223,27,45,2,239,141,0,0,0,0,25,27,49,65,50,54,98,130,43,45,83,195,1\
+00,108, 197,4,125,119,244,69,86,90,167,134,79,65,150,199,200,217,138,8,209,194,\
+187,73,250,239,232,138,227,244,217,203,172,181,79,12,181,174,126,77,158,131,45,\
+142,135,152,28,207,74,194,18,81,83,217,35,16,120,244,112,211,97,239,65,146,46,1\
+74,215,85,55,181,230,20,28,152,181,215,5,131,132,150,130,27,152,89,155,0,169,24\
+,176,45,250,219,169,54,203,154,230,119,93,93,255,108,108,28,212,65,63,223,205,9\
+0,14,158,149,132,36,162,140,159,21,227,167,178,70,32,190,169,119,97,241,232,225\
+,166,232,243,208,231,195,222,131,36, 218,197,178,101,93,93,174,170,68,70,159,23\
+5,111,107,204,40,118,112,253,105,57,49,107,174,32,42,90,239,11,7,9,44,18,28,56,\
+109,223,70,54,243,198,93,7,178,237,112,84,113,244,107,101,48,187,42,243,247,162\
+,49,194,182,137,28,145,117,144,7,160,52,23,159,188,251,14,132,141,186,37,169,22\
+2,121,60,178,239,56,115,243,121,255,106,232,72,190,65,197,27,125,88,222,42,60,2\
+40,121,79,5,233,98,126,68,194,79,45,135,219,84,28,198,148,21,138,1,141,14,187,6\
+4,166,35,232,131,191,56,217,194,56,160,197,13,33,187,244,76,10,150, 167,143,19,\
+141,150,206,92,204,0,9,69,215,49,72,110,250,98,139,119,225,83,202,186,187,93,84\
+,163,160,108,21,136,141,63,214,145,150,14,151,222,215,152,80,199,204,169,17,236\
+,225,250,210,245,250,203,147,114,98,215,92,107,121,230,29,64,84,181,222,89,79,1\
+32,159,22,14,18,88,15,21,35,25,36,56,112,218,61,35,65,155,101,253,107,167,124,2\
+30,90,230,87,203,9,37,78,208,56,100,1,145,174,163,24,138,159,226,51,167,204,33,\
+42,188,253,96,173,36,225,175,180,63,208,238,159,18,131,45,134,9,178,108,201,72,\
+36,171,208,83,21, 234,251,126,70,41,226,101,119,104,47,63,121,246,54,36,72,183,\
+29,9,27,116,4,18,42,53,75,83,188,242,82,72,141,179,121,101,222,112,96,126,239,4\
+9,231,230,243,254,254,253,194,191,213,208,145,124,204,203,160,61,131,138,54,250\
+,154,145,7,187,177,188,84,120,168,167,101,57,59,131,152,75,34,152,169,10,9,181,\
+250,201,16,174,203,136,95,239,93,79,70,244,108,14,109,217,63,205,116,194,14,140\
+,243,90,18,67,234,65,35,2,193,108,112,193,216,119,65,128,151,54,215,71,142,45,2\
+30,6,165,0,181,197,188,27,132,132,113,65,138, 26,104,90,187,91,67,119,232,152,9\
+0,108,217,217,21,45,79,30,12,54,126,95,39,27,45,156,62,0,28,221,185,152,0,18,16\
+0,131,49,83,139,174,98,144,146,181,83,209,221,244,197,22,196,239,244,87,239,194\
+,167,148,246,217,150,213,174,7,188,233,183,28,141,168,156,49,222,107,133,42,239\
+,42,202,107,121,237,211,112,72,172,248,93,27,111,225,70,42,46,102,222,54,225,12\
+7,197,7,160,84,232,84,99,77,243,101,34,2,178,243,229,27,169,194,164,48,132,145,\
+103,41,159,160,38,228,197,174,184,253,222,159,249,214,243,204,58,207,232, 253,1\
+23,128,169,107,188,153,178,90,253,178,159,9,62,171,132,56,127,44,28,36,176,53,7\
+,21,241,30,42,70,50,7,49,119,115,72,112,225,180,81,107,208,245,122,70,131,54,99\
+,93,178,119,203,250,215,78,210,225,230,15,249,204,181,204,224,215,132,141,175,1\
+50,18,74,182,141,35,11,157,160,112,200,132,187,65,137,3,35,93,70,26,56,108,7,49\
+,21,63,196,40,14,14,133,103,79,152,66,126,84,169,3,85,121,250,192,76,98,203,129\
+,129,56,197,31,152,35,244,94,179,14,167,157,170,21,150,220,229,84,0,27,252,79,4\
+9,90,215,98,98,153,206, 121,83,216,73,225,79,23,80,250,126,86,123,215,45,149,98\
+,204,28,212,45,141,138,19,52,150,187,82,31,187,232,145,6,160,217,208,94,126,243\
+,236,71,101,194,173,108,72,145,110,117,83,160,47,58,18,54,232,35,9,7,169,8,36,8\
+4,106,17,63,101,43,150,167,121,228,143,188,72,165].concat([164,145,27,102,189,1\
+38,42,39,242,203,188,224,235,208,141,161,192,253,222,98,217,230,239,35,20,188,2\
+25,189,13,167,208,252,38,138,131,63,63,145,178,126,112,208,36,185,105,203,21,24\
+8,66,230,70,59,91,253,119,122,220,101,107,181,197,126, 90,244,238,83,9,55,247,7\
+2,56,118,184,9,174,177,161,18,159,240,138,63,204,51,147,36,253,114,0,0,0,0,1,19\
+4,106,55,3,132,212,110,2,70,190,89,7,9,168,220,6,203,194,235,4,141,124,178,5,79\
+,22,133,14,19,81,184,15,209,59,143,13,151,133,214,12,85,239,225,9,26,249,100,8,\
+216,147,83,10,158,45,10,11,92,71,61,28,38,163,112,29,228,201,71,31,162,119,30,3\
+0,96,29,41,27,47,11,172,26,237,97,155,24,171,223,194,25,105,181,245,18,53,242,2\
+00,19,247,152,255,17,177,38,166,16,115,76,145,21,60,90,20,20,254,48,35,22,184,1\
+42, 122,23,122,228,77,56,77,70,224,57,143,44,215,59,201,146,142,58,11,248,185,6\
+3,68,238,60,62,134,132,11,60,192,58,82,61,2,80,101,54,94,23,88,55,156,125,111,5\
+3,218,195,54,52,24,169,1,49,87,191,132,48,149,213,179,50,211,107,234,51,17,1,22\
+1,36,107,229,144,37,169,143,167,39,239,49,254,38,45,91,201,35,98,77,76,34,160,3\
+9,123,32,230,153,34,33,36,243,21,42,120,180,40,43,186,222,31,41,252,96,70,40,62\
+,10,113,45,113,28,244,44,179,118,195,46,245,200,154,47,55,162,173,112,154,141,1\
+92,113,88,231,247,115,30,89,174, 114,220,51,153,119,147,37,28,118,81,79,43,116,\
+23,241,114,117,213,155,69,126,137,220,120,127,75,182,79,125,13,8,22,124,207,98,\
+33,121,128,116,164,120,66,30,147,122,4,160,202,123,198,202,253,108,188,46,176,1\
+09,126,68,135,111,56,250,222,110,250,144,233,107,181,134,108,106,119,236,91,104\
+,49,82,2,105,243,56,53,98,175,127,8,99,109,21,63,97,43,171,102,96,233,193,81,10\
+1,166,215,212,100,100,189,227,102,34,3,186,103,224,105,141,72,215,203,32,73,21,\
+161,23,75,83,31,78,74,145,117,121,79,222,99,252,78,28,9,203, 76,90,183,146,77,1\
+52,221,165,70,196,154,152,71,6,240,175,69,64,78,246,68,130,36,193,65,205,50,68,\
+64,15,88,115,66,73,230,42,67,139,140,29,84,241,104,80,85,51,2,103,87,117,188,62\
+,86,183,214,9,83,248,192,140,82,58,170,187,80,124,20,226,81,190,126,213,90,226,\
+57,232,91,32,83,223,89,102,237,134,88,164,135,177,93,235,145,52,92,41,251,3,94,\
+111,69,90,95,173,47,109,225,53,27,128,224,247,113,183,226,177,207,238,227,115,1\
+65,217,230,60,179,92,231,254,217,107,229,184,103,50,228,122,13,5,239,38,74,56,2\
+38,228,32, 15,236,162,158,86,237,96,244,97,232,47,226,228,233,237,136,211,235,1\
+71,54,138,234,105,92,189,253,19,184,240,252,209,210,199,254,151,108,158,255,85,\
+6,169,250,26,16,44,251,216,122,27,249,158,196,66,248,92,174,117,243,0,233,72,24\
+2,194,131,127,240,132,61,38,241,70,87,17,244,9,65,148,245,203,43,163,247,141,14\
+9,250,246,79,255,205,217,120,93,96,216,186,55,87,218,252,137,14,219,62,227,57,2\
+22,113,245,188,223,179,159,139,221,245,33,210,220,55,75,229,215,107,12,216,214,\
+169,102,239,212,239,216,182,213,45,178, 129,208,98,164,4,209,160,206,51,211,230\
+,112,106,210,36,26,93,197,94,254,16,196,156,148,39,198,218,42,126,199,24,64,73,\
+194,87,86,204,195,149,60,251,193,211,130,162,192,17,232,149,203,77,175,168,202,\
+143,197,159,200,201,123,198,201,11,17,241,204,68,7,116,205,134,109,67,207,192,2\
+11,26,206,2,185,45,145,175,150,64,144,109,252,119,146,43,66,46,147,233,40,25,15\
+0,166,62,156,151,100,84,171,149,34,234,242,148,224,128,197,159,188,199,248,158,\
+126,173,207,156,56,19,150,157,250,121,161,152,181,111,36,153,119,5, 19,155,49,1\
+87,74,154,243,209,125,141,137,53,48,140,75,95,7,142,13,225,94,143,207,139,105,1\
+38,128,157,236,139,66,247,219,137,4,73,130,136,198,35,181,131,154,100,136,130,8\
+8,14,191,128,30,176,230,129,220,218,209,132,147,204,84,133,81,166,99,135,23,24,\
+58,134,213,114,13,169,226,208,160,168,32,186,151,170,102,4,206,171,164,110,249,\
+174,235,120,124,175,41,18,75,173,111,172,18,172,173,198,37,167,241,129,24,166,5\
+1,235,47,164,117,85,118,165,183,63,65,160,248,41,196,161,58,67,243,163,124,253,\
+170,162,190,151, 157,181,196,115,208,180,6,25,231,182,64,167,190,183,130,205,13\
+7,178,205,219,12,179,15,177,59,177,73,15,98,176,139,101,85,187,215,34,104,186,2\
+1,72,95,184,83,246,6,185,145,156,49,188,222,138,180,189,28,224,131,191,90,94,21\
+8,190,152,52,237,0,0,0,0,184,188,103,101,170,9,200,139,18,181,175,238,143,98,15\
+1,87,55,222,240,50,37,107,95,220,157,215,56,185,197,180,40,239,125,8,79,138,111\
+,189,224,100,215,1,135,1,74,214,191,184,242,106,216,221,224,223,119,51,88,99,16\
+,86,80,25,87,159,232,165,48,250,250,16,159,20, 66,172,248,113,223,123,192,200,1\
+03,199,167,173,117,114,8,67,205,206,111,38,149,173,127,112,45,17,24,21,63,164,1\
+83,251,135,24,208,158,26,207,232,39,162,115,143,66,176,198,32,172,8,122,71,201,\
+160,50,175,62,24,142,200,91,10,59,103,181,178,135,0,208,47,80,56,105,151,236,95\
+,12,133,89,240,226,61,229,151,135,101,134,135,209,221,58,224,180,207,143,79,90,\
+119,51,40,63,234,228,16,134,82,88,119,227,64,237,216,13,248,81,191,104,240,43,2\
+48,161,72,151,159,196,90,34,48,42,226,158,87,79,127,73,111,246,199,245,8,147, 2\
+13,64,167,125,109,252,192,24,53,159,208,78,141,35,183,43,159,150,24,197,39,42,1\
+27,160,186,253,71,25,2,65,32,124,16,244,143,146,168,72,232,247,155,20,88,61,35,\
+168,63,88,49,29,144,182,137,161,247,211,20,118,207,106,172,202,168,15,190,127,7\
+,225,6,195,96,132,94,160,112,210,230,28,23,183,244,169,184,89,76,21,223,60,209,\
+194,231,133,105,126,128,224,123,203,47,14,195,119,72,107,203,13,15,162,115,177,\
+104,199,97,4,199,41,217,184,160,76,68,111,152,245,252,211,255,144,238,102,80,12\
+6,86,218,55,27,14,185,39,77, 182,5,64,40,164,176,239,198,28,12,136,163,129,219,\
+176,26,57,103,215,127,43,210,120,145,147,110,31,244,59,38,247,3,131,154,144,102\
+,145,47,63,136,41,147,88,237,180,68,96,84,12,248,7,49,30,77,168,223,166,241,207\
+,186,254,146,223,236,70,46,184,137,84,155,23,103,236,39,112,2,113,240,72,187,20\
+1,76,47,222,219,249,128,48,99,69,231,85,107,63,160,156,211,131,199,249,193,54,1\
+04,23,121,138,15,114,228,93,55,203,92,225,80,174,78,84,255,64,246,232,152,37,17\
+4,139,136,115,22,55,239,22,4,130,64,248,188,62,39,157,33, 233,31,36,153,85,120,\
+65,139,224,215,175,51,92,176,202,237,89,182,59,85,229,209,94,71,80,126,176,255,\
+236,25,213,98,59,33,108,218,135,70,9,200,50,233,231,112,142,142,130,40,237,158,\
+212,144,81,249,177,130,228,86,95,58,88,49,58,167,143,9,131,31,51,110,230,13,134\
+,193,8,181,58,166,109,189,64,225,164,5,252,134,193,23,73,41,47,175,245,78,74,50\
+,34,118,243,138,158,17,150,152,43,190,120,32,151,217,29,120,244,201,75,192,72,1\
+74,46,210,253,1,192,106,65,102,165,247,150,94,28,79,42,57,121,93,159,150,151,22\
+9,35,241, 242,77,107,25,5,245,215,126,96,231,98,209,142,95,222,182,235,194,9,14\
+2,82,122,181,233,55,104,0,70,217,208,188,33,188,136,223,49,234,48,99,86,143,34,\
+214,249,97,154,106,158,4,7,189,166,189,191,1,193,216,173,180,110,54,21,8,9,83,2\
+9,114,78,154,165,206,41,255,183,123,134,17,15,199,225,116,146,16,217,205,42,172\
+,190,168,56,25,17,70,128,165,118,35,216,198,102,117,96,122,1,16,114,207,174,254\
+,202,115,201,155,87,164,241,34,239,24,150,71,253,173,57,169,69,17,94,204,118,77\
+,238,6,206,241,137,99,220,68,38,141,100, 248,65,232,249,47,121,81,65,147,30,52,\
+83,38,177,218,235,154,214,191,179,249,198,233,11,69,161,140,25,240,14,98,161,76\
+,105,7,60,155,81,190,132,39,54,219,150,146,153,53,46,46,254,80,38,84,185,153,15\
+8,232,222,252,140,93,113,18,52,225,22,119,169,54,46,206,17,138,73,171,3,63,230,\
+69,187,131,129,32,227,224,145,118,91,92,246,19,73,233,89,253,241,85,62,152,108,\
+130,6,33,212,62,97,68,198,139,206,170,126,55,169,207,214,127,65,56,110,195,38,9\
+3,124,118,137,179,196,202,238,214,89,29,214,111,225,161,177,10,243,20, 30,228,7\
+5,168,121,129,19,203,105,215,171,119,14,178,185,194,161,92,1,126,198,57,156,169\
+,254,128,36,21,153,229,54,160,54,11,142,28,81,110,134,102,22,167,62,218,113,194\
+,44,111,222,44,148,211,185,73,9,4,129,240,177,184,230,149,163,13,73,123,27,177,\
+46,30,67,210,62,72,251,110,89,45,233,219,246,195,81,103,145,166,204,176,169,31,\
+116,12,206,122,102,185,97,148,222,5,6,241,0,0,0,0,0,0,0,0,6,0,0,0,4,0,4,0,8,0,4\
+,0,2,0,0,0,4,0,5,0,16,0,8,0,2,0,0,0,4,0,6,0,32,0,32,0,2,0,0,0,4,0,4,0,16,0,16,0\
+,4,0,0,0,8,0,16,0,32, 0,32,0,4,0,0,0,8,0,16,0,128,0,128,0,4,0,0,0,8,0,32,0,128,\
+0,0,1,4,0,0,0,32,0,128,0,2,1,0,4,4,0,0,0,32,0,2,1,2,1,0,16,4,0,0,0,16,17,18,0,8\
+,7,9,6,10,5,11,4,12,3,13,2,14,1,15,0,0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,4,\
+0,0,0,5,0,0,0,6,0,0,0,7,0,0,0,8,0,0,0,10,0,0,0,12,0,0,0,14,0,0,0,16,0,0,0,20,0,\
+0,0,24,0,0,0,28,0,0,0,32,0,0,0,40,0,0,0,48,0,0,0,56,0,0,0,64,0,0,0,80,0,0,0,96,\
+0,0,0,112,0,0,0,128,0,0,0,160,0,0,0,192,0,0,0,224,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\
+,1,0,0,0,2,0,0,0,3,0,0,0,4,0,0,0,6,0,0,0,8,0,0,0, 12,0,0,0,16,0,0,0,24,0,0,0,32\
+,0,0,0,48,0,0,0,64,0,0,0,96,0,0,0,128,0,0,0,192,0,0,0,0,1,0,0,128,1,0,0,0,2,0,0\
+,0,3,0,0,0,4,0,0,0,6,0,0,0,8,0,0,0,12,0,0,0,16,0,0,0,24,0,0,0,32,0,0,0,48,0,0,0\
+,64,0,0,0,96,0,0,98,117,102,102,101,114,32,101,114,114,111,114,0,0,0,0,105,110,\
+115,117,102,102,105,99,105,101,110,116,32,109,101,109,111,114,121,0,0,0,0,0,115\
+,116,114,101,97,109,32,101,114,114,111,114,0,0,0,0,101,114,114,111,114,58,32,37\
+,100,92,110,0,0,0,0,0,115,116,114,99,109,112,40,98,117,102,102,101,114,44,32, 9\
+8,117,102,102,101,114,51,41,32,61,61,32,48,0,0,0,0,100,101,99,111,109,112,114,1\
+01,115,115,101,100,83,105,122,101,32,61,61,32,115,105,122,101,0,0,0,0,0,0,0,0,4\
+7,116,109,112,47,101,109,115,99,114,105,112,116,101,110,95,116,101,109,112,47,1\
+22,108,105,98,46,99,0,0,0,0,0,115,105,122,101,115,58,32,37,100,44,37,100,10,0,0\
+,0,0,1,2,3,4,5,6,7,8,8,9,9,10,10,11,11,12,12,12,12,13,13,13,13,14,14,14,14,15,1\
+5,15,15,16,16,16,16,16,16,16,16,17,17,17,17,17,17,17,17,18,18,18,18,18,18,18,18\
+,19,19,19,19,19,19,19,19,20, 20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,21,21\
+,21,21,21,21,21,21,21,21,21,21,21,21,21,21,22,22,22,22,22,22,22,22,22,22,22,22,\
+22,22,22,22,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,24,24,24,24,24,24,2\
+4,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,25\
+,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,\
+25,25,25,25,25,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,2\
+6,26,26,26,26,26,26,26,26,26,26,27,27,27,27,27,27,27,27, 27,27,27,27,27,27,27,2\
+7,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,28,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\
+,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\
+,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\
+,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
+0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\
+,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\
+,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\
+,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,1,2,3,4,4,5,5,6,6,6,6,7,7,7,7\
+,8,8,8,8,8,8,8,8,9,9,9,9,9,9,9,9,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,1\
+0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,12,12,12,12,12,12\
+,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,13,13,13,13,\
+13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,1\
+3,13,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14\
+,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14, 14,14,14,14,14\
+,14,14,14,14,14,14,14,14,14,14,14,14,14,15,15,15,15,15,15,15,15,15,15,15,15,15,\
+15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,1\
+5,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,0,0,1\
+6,17,18,18,19,19,20,20,20,20,21,21,21,21,22,22,22,22,22,22,22,22,23,23,23,23,23\
+,23,23,23,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,25,25,25,25,25,25,25,\
+25,25,25,25,25,25,25,25,25,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,2\
+6,26,26,26,26, 26,26,26,26,26,26,26,26,26,26,27,27,27,27,27,27,27,27,27,27,27,2\
+7,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,28,28,28,28,28,28\
+,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,\
+28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,2\
+8,28,28,28,28,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29\
+,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,\
+29,29,29,29,29,29,29,29,29,29,29,29,29,29, 29,29,29,100,111,105,116,0,0,0,0]),"\
+i8",Da,8);var Za=ra(P(12,"i8",O),8);z(0==Za%8);var $a=5,ab=6,bb=9,U=13,cb=21,db\
+=22,eb=0;function V(a){return L[eb>>2]=a}var fb=P(1,"i32*",O),W=P(1,"i32*",O),g\
+b=P(1,"i32*",O),hb=P(1,"i32*",O),ib=2,X=[r],jb=n;function kb(a,b){if("string"!=\
+=typeof a)return r;b===k&&(b="/");a&&"/"==a[0]&&(b="");for(var c=(b+"/"+a).spli\
+t("/").reverse(),d=[""];c.length;){var e=c.pop();""==e||"."==e||(".."==e?1<d.le\
+ngth&&d.pop():d.push(e))}return 1==d.length?"/":d.join("/")} function lb(a,b,c)\
+{var d={N:t,k:t,error:0,name:r,path:r,object:r,w:t,A:r,z:r},a=kb(a);if("/"==a)d\
+.N=n,d.k=d.w=n,d.name="/",d.path=d.A="/",d.object=d.z=mb;else if(a!==r)for(var \
+c=c||0,a=a.slice(1).split("/"),e=mb,f=[""];a.length;){1==a.length&&e.c&&(d.w=n,\
+d.A=1==f.length?"/":f.join("/"),d.z=e,d.name=a[0]);var g=a.shift();if(e.c)if(e.\
+C){if(!e.a.hasOwnProperty(g)){d.error=2;break}}else{d.error=U;break}else{d.erro\
+r=20;break}e=e.a[g];if(e.link&&!(b&&0==a.length)){if(40<c){d.error=92;break}d=k\
+b(e.link, f.join("/"));d=lb([d].concat(a).join("/"),b,c+1);break}f.push(g);0==a\
+.length&&(d.k=n,d.path=f.join("/"),d.object=e)}return d}function nb(a){ob();a=l\
+b(a,k);if(a.k)return a.object;V(a.error);return r} function pb(a,b,c,d,e){a||(a\
+="/");"string"===typeof a&&(a=nb(a));a||(V(U),j(Error("Parent path must exist."\
+)));a.c||(V(20),j(Error("Parent must be a folder.")));!a.write&&!jb&&(V(U),j(Er\
+ror("Parent folder must be writeable.")));if(!b||"."==b||".."==b)V(2),j(Error("\
+Name must not be empty."));a.a.hasOwnProperty(b)&&(V(17),j(Error("Can\'t overwr\
+ite object.")));a.a[b]={C:d===k?n:d,write:e===k?t:e,timestamp:Date.now(),M:ib++\
+};for(var f in c)c.hasOwnProperty(f)&&(a.a[b][f]=c[f]);return a.a[b]} function \
+qb(a,b,c,d){return pb(a,b,{c:n,b:t,a:{}},c,d)}function rb(a,b,c,d){a=nb(a);a===\
+r&&j(Error("Invalid parent."));for(b=b.split("/").reverse();b.length;){var e=b.\
+pop();e&&(a.a.hasOwnProperty(e)||qb(a,e,c,d),a=a.a[e])}return a}function sb(a,b\
+,c,d,e){c.c=t;return pb(a,b,c,d,e)}function tb(a,b,c,d,e){if("string"===typeof \
+c){for(var f=Array(c.length),g=0,i=c.length;g<i;++g)f[g]=c.charCodeAt(g);c=f}c=\
+{b:t,a:c.subarray?c.subarray(0):c};return sb(a,b,c,d,e)} function Y(a,b,c,d){!c\
+&&!d&&j(Error("A device must have at least one callback defined."));return sb(a\
+,b,{b:n,input:c,d:d},Boolean(c),Boolean(d))}function ob(){mb||(mb={C:n,write:n,\
+c:n,b:t,timestamp:Date.now(),M:1,a:{}})}var ub,mb;function vb(a,b,c){a=X[a];if(\
+!a)return-1;a.sender(Q.subarray(b,b+c));return c} function wb(a,b,c,d){a=X[a];i\
+f(!a||a.object.b)return V(bb),-1;if(a.f){if(a.object.c)return V(cb),-1;if(0>c||\
+0>d)return V(db),-1;for(var e=a.object.a;e.length<d;)e.push(0);for(var f=0;f<c;\
+f++)e[d+f]=Q[b+f|0];a.object.timestamp=Date.now();return f}V(U);return-1} funct\
+ion xb(a,b,c){var d=X[a];if(d&&"socket"in d)return vb(a,b,c);if(d){if(d.f){if(0\
+>c)return V(db),-1;if(d.object.b){if(d.object.d){for(a=0;a<c;a++)try{d.object.d\
+(J[b+a|0])}catch(e){return V($a),-1}d.object.timestamp=Date.now();return a}V(ab\
+);return-1}b=wb(a,b,c,d.position);-1!=b&&(d.position+=b);return b}V(U);return-1\
+}V(bb);return-1}function yb(a,b,c,d){c*=b;if(0==c)return 0;a=xb(d,a,c);return-1\
+==a?(X[d]&&(X[d].error=n),0):Math.floor(a/b)}Module._strlen=zb; function Ab(a){\
+return 0>a||0===a&&-Infinity===1/a} function Bb(a,b){function c(a){var c;"doubl\
+e"===a?c=N[b+e>>3]:"i64"==a?(c=[L[b+e>>2],L[b+(e+8)>>2]],e+=8):(a="i32",c=L[b+e\
+>>2]);e+=Math.max(Math.max(ja(a),x),8);return c}for(var d=a,e=0,f=[],g,i;;){var\
+ l=d;g=J[d];if(0===g)break;i=J[d+1|0];if(37==g){var y=t,E=t,A=t,q=t;a:for(;;){s\
+witch(i){case 43:y=n;break;case 45:E=n;break;case 35:A=n;break;case 48:if(q)bre\
+ak a;else{q=n;break}default:break a}d++;i=J[d+1|0]}var B=0;if(42==i)B=c("i32"),\
+d++,i=J[d+1|0];else for(;48<=i&&57>=i;)B=10*B+(i-48),d++,i=J[d+ 1|0];var K=t;if\
+(46==i){var m=0,K=n;d++;i=J[d+1|0];if(42==i)m=c("i32"),d++;else for(;;){i=J[d+1\
+|0];if(48>i||57<i)break;m=10*m+(i-48);d++}i=J[d+1|0]}else m=6;var p;switch(Stri\
+ng.fromCharCode(i)){case "h":i=J[d+2|0];104==i?(d++,p=1):p=2;break;case "l":i=J\
+[d+2|0];108==i?(d++,p=8):p=4;break;case "L":case "q":case "j":p=8;break;case "z\
+":case "t":case "I":p=4;break;default:p=r}p&&d++;i=J[d+1|0];switch(String.fromC\
+harCode(i)){case "d":case "i":case "u":case "o":case "x":case "X":case "p":l=10\
+0==i||105==i; p=p||4;g=c("i"+8*p);var h;8==p&&(g=117==i?+(g[0]>>>0)+4294967296*\
++(g[1]>>>0):+(g[0]>>>0)+4294967296*+(g[1]|0));4>=p&&(g=(l?Ra:Qa)(g&Math.pow(256\
+,p)-1,8*p));var H=Math.abs(g),l="";if(100==i||105==i)h=Ra(g,8*p).toString(10);e\
+lse if(117==i)h=Qa(g,8*p).toString(10),g=Math.abs(g);else if(111==i)h=(A?"0":""\
+)+H.toString(8);else if(120==i||88==i){l=A&&0!=g?"0x":"";if(0>g){g=-g;h=(H-1).t\
+oString(16);H=[];for(A=0;A<h.length;A++)H.push((15-parseInt(h[A],16)).toString(\
+16));for(h=H.join("");h.length<2*p;)h="f"+ h}else h=H.toString(16);88==i&&(l=l.\
+toUpperCase(),h=h.toUpperCase())}else 112==i&&(0===H?h="(nil)":(l="0x",h=H.toSt\
+ring(16)));if(K)for(;h.length<m;)h="0"+h;for(y&&(l=0>g?"-"+l:"+"+l);l.length+h.\
+length<B;)E?h+=" ":q?h="0"+h:l=" "+l;h=l+h;h.split("").forEach(function(a){f.pu\
+sh(a.charCodeAt(0))});break;case "f":case "F":case "e":case "E":case "g":case "\
+G":g=c("double");if(isNaN(g))h="nan",q=t;else if(isFinite(g)){K=t;p=Math.min(m,\
+20);if(103==i||71==i)K=n,m=m||1,p=parseInt(g.toExponential(p).split("e")[1], 10\
+),m>p&&-4<=p?(i=(103==i?"f":"F").charCodeAt(0),m-=p+1):(i=(103==i?"e":"E").char\
+CodeAt(0),m--),p=Math.min(m,20);if(101==i||69==i)h=g.toExponential(p),/[eE][-+]\
+\\d$/.test(h)&&(h=h.slice(0,-1)+"0"+h.slice(-1));else if(102==i||70==i)h=g.toFi\
+xed(p),0===g&&Ab(g)&&(h="-"+h);l=h.split("e");if(K&&!A)for(;1<l[0].length&&-1!=\
+l[0].indexOf(".")&&("0"==l[0].slice(-1)||"."==l[0].slice(-1));)l[0]=l[0].slice(\
+0,-1);else for(A&&-1==h.indexOf(".")&&(l[0]+=".");m>p++;)l[0]+="0";h=l[0]+(1<l.\
+length?"e"+l[1]:"");69==i&& (h=h.toUpperCase());y&&0<=g&&(h="+"+h)}else h=(0>g?\
+"-":"")+"inf",q=t;for(;h.length<B;)h=E?h+" ":q&&("-"==h[0]||"+"==h[0])?h[0]+"0"\
++h.slice(1):(q?"0":" ")+h;97>i&&(h=h.toUpperCase());h.split("").forEach(functio\
+n(a){f.push(a.charCodeAt(0))});break;case "s":q=(y=c("i8*"))?zb(y):6;K&&(q=Math\
+.min(q,m));if(!E)for(;q<B--;)f.push(32);if(y)for(A=0;A<q;A++)f.push(Q[y++|0]);e\
+lse f=f.concat(S("(null)".substr(0,q),n));if(E)for(;q<B--;)f.push(32);break;cas\
+e "c":for(E&&f.push(c("i8"));0<--B;)f.push(32);E||f.push(c("i8")); break;case "\
+n":E=c("i32*");L[E>>2]=f.length;break;case "%":f.push(g);break;default:for(A=l;\
+A<d+2;A++)f.push(J[A])}d+=2}else f.push(g),d+=1}return f}function Cb(a,b,c){c=B\
+b(b,c);b=ha();a=yb(P(c,"i8",Ca),1,c.length,a);ia(b);return a}function Db(a,b,c)\
+{for(var d=0;d<c;){var e=Q[a+d|0],f=Q[b+d|0];if(e==f&&0==e)break;if(0==e)return\
+-1;if(0==f)return 1;if(e==f)d++;else return e>f?1:-1}return 0}Module._memset=Eb\
+;Module._memcpy=Fb; function Z(a){Z.J||(D=D+4095>>12<<12,Z.J=n,z(pa),Z.I=pa,pa=\
+function(){F("cannot dynamically allocate, sbrk now has control")});var b=D;0!=\
+a&&Z.I(a);return b}function Gb(a,b){return xb(b,a,zb(a))}function Hb(a,b){var c\
+=Qa(a&255);J[Hb.D|0]=c;return-1==xb(b,Hb.D,1)?(X[b]&&(X[b].error=n),-1):c}var I\
+b=t,Jb=t,Kb=t,Lb=t,Mb=k,Nb=k,Ob=[];function Pb(){var a=Module.canvas;Ob.forEach\
+(function(b){b(a.width,a.height)})} function Qb(){var a=Module.canvas;this.S=a.\
+width;this.R=a.height;a.width=screen.width;a.height=screen.height;a=Ga[SDL.scre\
+en+0*x>>2];L[SDL.screen+0*x>>2]=a|8388608;Pb()}function Rb(){var a=Module.canva\
+s;a.width=this.S;a.height=this.R;a=Ga[SDL.screen+0*x>>2];L[SDL.screen+0*x>>2]=a\
+&-8388609;Pb()}var Sb,Tb,Ub,Vb; Ma.unshift({l:function(){if(!Module.noFSInit&&!\
+ub){var a,b,c,d=function(a){a===r||10===a?(b.h(b.buffer.join("")),b.buffer=[]):\
+b.buffer.push(i.B(a))};z(!ub,"FS.init was previously called. If you want to ini\
+tialize later with custom parameters, remove any earlier calls (note that one i\
+s automatically added to the generated code)");ub=n;ob();a=a||Module.stdin;b=b|\
+|Module.stdout;c=c||Module.stderr;var e=n,f=n,g=n;a||(e=t,a=function(){if(!a.j|\
+|!a.j.length){var b;"undefined"!=typeof window&&"function"== typeof window.prom\
+pt?(b=window.prompt("Input: "),b===r&&(b=String.fromCharCode(0))):"function"==t\
+ypeof readline&&(b=readline());b||(b="");a.j=S(b+"\\n",n)}return a.j.shift()});\
+var i=new ma;b||(f=t,b=d);b.h||(b.h=Module.print);b.buffer||(b.buffer=[]);c||(g\
+=t,c=d);c.h||(c.h=Module.print);c.buffer||(c.buffer=[]);try{qb("/","tmp",n,n)}c\
+atch(l){}var d=qb("/","dev",n,n),y=Y(d,"stdin",a),E=Y(d,"stdout",r,b);c=Y(d,"st\
+derr",r,c);Y(d,"tty",a,b);Y(d,"null",u(),u());X[1]={path:"/dev/stdin",object:y,\
+position:0, u:n,f:t,t:t,v:!e,error:t,q:t,F:[]};X[2]={path:"/dev/stdout",object:\
+E,position:0,u:t,f:n,t:t,v:!f,error:t,q:t,F:[]};X[3]={path:"/dev/stderr",object\
+:c,position:0,u:t,f:n,t:t,v:!g,error:t,q:t,F:[]};L[fb>>2]=1;L[W>>2]=2;L[gb>>2]=\
+3;rb("/","dev/shm/tmp",n,n);for(e=X.length;e<Math.max(fb,W,gb)+4;e++)X[e]=r;X[f\
+b]=X[1];X[W]=X[2];X[gb]=X[3];P([P([0,0,0,0,fb,0,0,0,W,0,0,0,gb,0,0,0],"void*",0\
+)],"void*",Da,hb)}}});Na.push({l:function(){jb=t}}); Oa.push({l:function(){ub&&\
+(X[2]&&0<X[2].object.d.buffer.length&&X[2].object.d(10),X[3]&&0<X[3].object.d.b\
+uffer.length&&X[3].object.d(10))}});Module.FS_createFolder=qb;Module.FS_createP\
+ath=rb;Module.FS_createDataFile=tb; Module.FS_createPreloadedFile=function(a,b,\
+c,d,e,f,g,i){function l(){Kb=document.pointerLockElement===q||document.mozPoint\
+erLockElement===q||document.webkitPointerLockElement===q}function y(a){return{j\
+pg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",bmp:"image/bmp",ogg:"audio/og\
+g",wav:"audio/wav",mp3:"audio/mpeg"}[a.substr(a.lastIndexOf(".")+1)]}function E\
+(c){function h(c){i||tb(a,b,c,d,e);f&&f();Wa("cp "+B)}var l=t;Module.preloadPlu\
+gins.forEach(function(a){!l&&a.canHandle(B)&&(a.handle(c,B,h,function(){g&& g()\
+;Wa("cp "+B)}),l=n)});l||h(c)}Module.preloadPlugins||(Module.preloadPlugins=[])\
+;if(!Sb&&!v){Sb=n;try{new Blob,Tb=n}catch(A){Tb=t,console.log("warning: no blob\
+ constructor, cannot create blobs with mimetypes")}Ub="undefined"!=typeof MozBl\
+obBuilder?MozBlobBuilder:"undefined"!=typeof WebKitBlobBuilder?WebKitBlobBuilde\
+r:!Tb?console.log("warning: no BlobBuilder"):r;Vb="undefined"!=typeof window?wi\
+ndow.URL?window.URL:window.webkitURL:console.log("warning: cannot create object\
+ URLs");Module.preloadPlugins.push({canHandle:function(a){return!Module.W&& /\
+\\.(jpg|jpeg|png|bmp)$/.exec(a)},handle:function(a,b,c,d){var e=r;if(Tb)try{e=n\
+ew Blob([a],{type:y(b)})}catch(f){var g="Blob constructor present but fails: "+\
+f+"; falling back to blob builder";la||(la={});la[g]||(la[g]=1,Module.g(g))}e||\
+(e=new Ub,e.append((new Uint8Array(a)).buffer),e=e.getBlob());var i=Vb.createOb\
+jectURL(e),h=new Image;h.onload=function(){z(h.complete,"Image "+b+" could not \
+be decoded");var d=document.createElement("canvas");d.width=h.width;d.height=h.\
+height;d.getContext("2d").drawImage(h, 0,0);Module.preloadedImages[b]=d;Vb.revo\
+keObjectURL(i);c&&c(a)};h.onerror=function(){console.log("Image "+i+" could not\
+ be decoded");d&&d()};h.src=i}});Module.preloadPlugins.push({canHandle:function\
+(a){return!Module.V&&a.substr(-4)in{".ogg":1,".wav":1,".mp3":1}},handle:functio\
+n(a,b,c,d){function e(d){g||(g=n,Module.preloadedAudios[b]=d,c&&c(a))}function \
+f(){g||(g=n,Module.preloadedAudios[b]=new Audio,d&&d())}var g=t;if(Tb){try{var \
+i=new Blob([a],{type:y(b)})}catch(h){return f()}var i=Vb.createObjectURL(i), l=\
+new Audio;l.addEventListener("canplaythrough",function(){e(l)},t);l.onerror=fun\
+ction(){if(!g){console.log("warning: browser could not fully decode audio "+b+"\
+, trying slower base64 approach");for(var c="",d=0,f=0,i=0;i<a.length;i++){d=d<\
+<8|a[i];for(f+=8;6<=f;)var h=d>>f-6&63,f=f-6,c=c+"ABCDEFGHIJKLMNOPQRSTUVWXYZabc\
+defghijklmnopqrstuvwxyz0123456789+/"[h]}2==f?(c+="ABCDEFGHIJKLMNOPQRSTUVWXYZabc\
+defghijklmnopqrstuvwxyz0123456789+/"[(d&3)<<4],c+="=="):4==f&&(c+="ABCDEFGHIJKL\
+MNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[(d& 15)<<2],c+="=");l.src\
+="data:audio/x-"+b.substr(-3)+";base64,"+c;e(l)}};l.src=i;setTimeout(function()\
+{G||e(l)},1E4)}else return f()}});var q=Module.canvas;q.n=q.requestPointerLock|\
+|q.mozRequestPointerLock||q.webkitRequestPointerLock;q.r=document.exitPointerLo\
+ck||document.mozExitPointerLock||document.webkitExitPointerLock||u();q.r=q.r.bi\
+nd(document);document.addEventListener("pointerlockchange",l,t);document.addEve\
+ntListener("mozpointerlockchange",l,t);document.addEventListener("webkitpointer\
+lockchange", l,t);Module.elementPointerLock&&q.addEventListener("click",functio\
+n(a){!Kb&&q.n&&(q.n(),a.preventDefault())},t)}for(var B,K=[a,b],m=K[0],p=1;p<K.\
+length;p++)"/"!=m[m.length-1]&&(m+="/"),m+=K[p];"/"==m[0]&&(m=m.substr(1));B=m;\
+Va("cp "+B);if("string"==typeof c){var h=g,H=function(){h?h():j(\'Loading data \
+file "\'+c+\'" failed.\')},M=new XMLHttpRequest;M.open("GET",c,n);M.responseTyp\
+e="arraybuffer";M.onload=function(){if(200==M.status||0==M.status&&M.response){\
+var a=M.response;z(a,\'Loading data file "\'+c+ \'" failed (no arrayBuffer).\')\
+;a=new Uint8Array(a);E(a);Wa("al "+c)}else H()};M.onerror=H;M.send(r);Va("al "+\
+c)}else E(c)}; Module.FS_createLazyFile=function(a,b,c,d,e){if("undefined"!==ty\
+peof XMLHttpRequest){v||j("Cannot do synchronous binary XHRs outside webworkers\
+ in modern browsers. Use --embed-file or --preload-file in emcc");var f=functio\
+n(){this.m=t;this.e=[]};f.prototype.get=function(a){if(!(a>this.length-1||0>a))\
+{var b=a%this.K;return this.L(Math.floor(a/this.K))[b]}};f.prototype.Q=function\
+(a){this.L=a};f.prototype.o=function(){var a=new XMLHttpRequest;a.open("HEAD",c\
+,t);a.send(r);200<=a.status&&300>a.status|| 304===a.status||j(Error("Couldn\'t \
+load "+c+". Status: "+a.status));var b=Number(a.getResponseHeader("Content-leng\
+th")),d,e=1048576;if(!((d=a.getResponseHeader("Accept-Ranges"))&&"bytes"===d))e\
+=b;var f=this;f.Q(function(a){var d=a*e,g=(a+1)*e-1,g=Math.min(g,b-1);if("undef\
+ined"===typeof f.e[a]){var l=f.e;d>g&&j(Error("invalid range ("+d+", "+g+") or \
+no bytes requested!"));g>b-1&&j(Error("only "+b+" bytes available! programmer e\
+rror!"));var m=new XMLHttpRequest;m.open("GET",c,t);b!==e&&m.setRequestHeader("\
+Range", "bytes="+d+"-"+g);"undefined"!=typeof Uint8Array&&(m.responseType="arra\
+ybuffer");m.overrideMimeType&&m.overrideMimeType("text/plain; charset=x-user-de\
+fined");m.send(r);200<=m.status&&300>m.status||304===m.status||j(Error("Couldn\
+\'t load "+c+". Status: "+m.status));d=m.response!==k?new Uint8Array(m.response\
+||[]):S(m.responseText||"",n);l[a]=d}"undefined"===typeof f.e[a]&&j(Error("doXH\
+R failed!"));return f.e[a]});this.H=b;this.G=e;this.m=n};f=new f;Object.defineP\
+roperty(f,"length",{get:function(){this.m|| this.o();return this.H}});Object.de\
+fineProperty(f,"chunkSize",{get:function(){this.m||this.o();return this.G}});f=\
+{b:t,a:f}}else f={b:t,url:c};return sb(a,b,f,d,e)};Module.FS_createLink=functio\
+n(a,b,c,d,e){return sb(a,b,{b:t,link:c},d,e)};Module.FS_createDevice=Y;eb=oa(4)\
+;L[eb>>2]=0;Hb.D=P([0],"i8",O); Module.requestFullScreen=function(a,b){function\
+ c(){Jb=t;(document.webkitFullScreenElement||document.webkitFullscreenElement||\
+document.mozFullScreenElement||document.mozFullscreenElement||document.fullScre\
+enElement||document.fullscreenElement)===d?(d.p=document.cancelFullScreen||docu\
+ment.mozCancelFullScreen||document.webkitCancelFullScreen,d.p=d.p.bind(document\
+),Mb&&d.n(),Jb=n,Nb&&Qb()):Nb&&Rb();if(Module.onFullScreen)Module.onFullScreen(\
+Jb)}Mb=a;Nb=b;"undefined"===typeof Mb&&(Mb=n);"undefined"=== typeof Nb&&(Nb=t);\
+var d=Module.canvas;Lb||(Lb=n,document.addEventListener("fullscreenchange",c,t)\
+,document.addEventListener("mozfullscreenchange",c,t),document.addEventListener\
+("webkitfullscreenchange",c,t));d.P=d.requestFullScreen||d.mozRequestFullScreen\
+||(d.webkitRequestFullScreen?function(){d.webkitRequestFullScreen(Element.ALLOW\
+_KEYBOARD_INPUT)}:r);d.P()}; Module.requestAnimationFrame=function(a){window.re\
+questAnimationFrame||(window.requestAnimationFrame=window.requestAnimationFrame\
+||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.m\
+sRequestAnimationFrame||window.oRequestAnimationFrame||window.setTimeout);windo\
+w.requestAnimationFrame(a)};Module.pauseMainLoop=u();Module.resumeMainLoop=func\
+tion(){Ib&&(Ib=t,r())};Module.getUserMedia=function(){window.s||(window.s=navig\
+ator.getUserMedia||navigator.mozGetUserMedia);window.s(k)}; Ia=w=ra(C);Ja=Ia+52\
+42880;Ka=D=ra(Ja);z(Ka<qa);var Wb=Math.min; var $=(function(global,env,buffer) \
+{ "use asm";var a=new global.Int8Array(buffer);var b=new global.Int16Array(buff\
+er);var c=new global.Int32Array(buffer);var d=new global.Uint8Array(buffer);var\
+ e=new global.Uint16Array(buffer);var f=new global.Uint32Array(buffer);var g=ne\
+w global.Float32Array(buffer);var h=new global.Float64Array(buffer);var i=env.S\
+TACKTOP|0;var j=env.STACK_MAX|0;var k=env.tempDoublePtr|0;var l=env.ABORT|0;var\
+ m=+env.NaN;var n=+env.Infinity;var o=0;var p=0;var q=0;var r=0;var s=0,t=0,u=0\
+,v=0,w=0.0,x=0,y=0,z=0,A=0.0;var B=0;var C=0;var D=0;var E=0;var F=0;var G=0;va\
+r H=0;var I=0;var J=0;var K=0;var L=global.Math.floor;var M=global.Math.abs;var\
+ N=global.Math.sqrt;var O=global.Math.pow;var P=global.Math.cos;var Q=global.Ma\
+th.sin;var R=global.Math.tan;var S=global.Math.acos;var T=global.Math.asin;var \
+U=global.Math.atan;var V=global.Math.atan2;var W=global.Math.exp;var X=global.M\
+ath.log;var Y=global.Math.ceil;var Z=global.Math.imul;var _=env.abort;var $=env\
+.assert;var aa=env.asmPrintInt;var ab=env.asmPrintFloat;var ac=env.min;var ad=e\
+nv.invoke_ii;var ae=env.invoke_vi;var af=env.invoke_vii;var ag=env.invoke_iiii;\
+var ah=env.invoke_v;var ai=env.invoke_iii;var aj=env._strncmp;var ak=env._llvm_\
+lifetime_end;var al=env._sysconf;var am=env._abort;var an=env._fprintf;var ao=e\
+nv._printf;var ap=env.__reallyNegative;var aq=env._fputc;var ar=env._puts;var a\
+s=env.___setErrNo;var at=env._fwrite;var au=env._send;var av=env._write;var aw=\
+env._fputs;var ax=env.__formatString;var ay=env._free;var az=env.___assert_func\
+;var aA=env._pwrite;var aB=env._sbrk;var aC=env.___errno_location;var aD=env._l\
+lvm_lifetime_start;var aE=env._llvm_bswap_i32;var aF=env._time;var aG=env._strc\
+mp; function aN(a){a=a|0;var b=0;b=i;i=i+a|0;i=i+7>>3<<3;return b|0}function aO\
+(){return i|0}function aP(a){a=a|0;i=a}function aQ(a,b){a=a|0;b=b|0;if((o|0)==0\
+){o=a;p=b}}function aR(b){b=b|0;a[k]=a[b];a[k+1|0]=a[b+1|0];a[k+2|0]=a[b+2|0];a\
+[k+3|0]=a[b+3|0]}function aS(b){b=b|0;a[k]=a[b];a[k+1|0]=a[b+1|0];a[k+2|0]=a[b+\
+2|0];a[k+3|0]=a[b+3|0];a[k+4|0]=a[b+4|0];a[k+5|0]=a[b+5|0];a[k+6|0]=a[b+6|0];a[\
+k+7|0]=a[b+7|0]}function aT(a){a=a|0;B=a}function aU(a){a=a|0;C=a}function aV(a\
+){a=a|0;D=a}function aW(a){a=a|0;E=a}function aX(a){a=a|0;F=a}function aY(a){a=\
+a|0;G=a}function aZ(a){a=a|0;H=a}function a_(a){a=a|0;I=a}function a$(a){a=a|0;\
+J=a}function a0(a){a=a|0;K=a}function a1(f,g){f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m\
+=0,n=0,o=0,p=0,q=0,r=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,aa=0,ab=0,ac=0,ad=0,ae=0,af=0,ag=0,ah=0,ai=0,aj=0,ak=0,al=0,am=0,an=0,ap=0\
+,aq=0,ar=0,as=0,at=0,au=0,av=0,aw=0,ax=0,ay=0,aA=0,aB=0,aC=0,aD=0,aF=0,aH=0,aI=\
+0,aL=0,aN=0,aO=0,aP=0,aQ=0,aR=0,aS=0,aT=0,aU=0,aV=0,aW=0,aX=0,aY=0,aZ=0,a_=0,a$\
+=0,a0=0,a1=0,a2=0,a4=0,a5=0,a6=0,a8=0,bb=0,bc=0,bd=0,be=0,bl=0,bo=0,bp=0,bq=0,b\
+r=0,bs=0,bt=0,bu=0,bv=0,bw=0,bx=0,by=0,bz=0,bA=0,bB=0,bC=0,bD=0,bE=0,bF=0,bG=0,\
+bH=0,bI=0,bJ=0,bK=0,bL=0,bM=0,bN=0,bO=0,bP=0,bQ=0,bR=0,bS=0,bT=0,bU=0,bV=0,bW=0\
+,bX=0,bY=0,bZ=0,b_=0,b$=0,b0=0,b1=0,b2=0,b3=0,b4=0,b5=0,b6=0,b7=0,b8=0,b9=0,ca=\
+0,cb=0,cc=0,cd=0,ce=0,cf=0,cg=0,ch=0,ci=0,cj=0,ck=0,cl=0,cm=0,cn=0,co=0,cp=0,cq\
+=0,cr=0,cs=0,ct=0,cu=0,cv=0,cw=0,cx=0,cy=0,cz=0,cA=0,cB=0,cC=0,cD=0,cE=0,cF=0,c\
+G=0,cH=0,cI=0,cJ=0,cK=0,cL=0,cM=0,cN=0,cO=0,cP=0,cQ=0,cR=0,cS=0,cT=0,cU=0,cV=0,\
+cW=0,cX=0,cY=0,cZ=0,c_=0,c$=0,c0=0,c1=0,c2=0,c3=0,c4=0,c5=0,c6=0,c7=0,c8=0,c9=0\
+,da=0,db=0,dc=0,dd=0,de=0,df=0,dg=0,dh=0,di=0,dj=0,dk=0,dl=0,dm=0,dn=0,dp=0,dq=\
+0,dr=0,ds=0,dt=0,du=0,dv=0,dw=0,dx=0,dy=0,dz=0,dA=0,dB=0,dC=0,dD=0,dE=0,dF=0,dG\
+=0,dH=0,dI=0,dJ=0,dK=0,dL=0,dM=0,dN=0,dO=0,dP=0,dQ=0,dR=0,dS=0,dT=0,dU=0,dV=0,d\
+W=0,dX=0,dY=0,dZ=0,d_=0,d$=0,d0=0,d1=0,d2=0,d3=0,d4=0,d5=0,d6=0,d7=0,d8=0,d9=0,\
+ea=0,eb=0,ec=0,ed=0,ee=0,ef=0,eg=0,eh=0,ei=0,ej=0,ek=0,el=0,em=0,en=0,eo=0,ep=0\
+,eq=0,er=0,es=0,et=0,eu=0,ev=0,ew=0,ex=0,ey=0,ez=0,eA=0,eB=0,eC=0,eD=0,eE=0,eF=\
+0,eG=0,eH=0,eI=0,eJ=0,eK=0,eL=0,eM=0,eN=0,eO=0,eP=0,eQ=0,eR=0,eS=0,eT=0,eU=0,eV\
+=0,eW=0,eX=0,eY=0,eZ=0,e_=0,e$=0,e0=0,e1=0,e2=0,e3=0,e4=0,e5=0,e6=0,e7=0,e8=0,e\
+9=0,fa=0,fb=0,fc=0,fd=0,fe=0,ff=0,fg=0,fh=0,fi=0,fj=0,fk=0,fl=0,fm=0,fn=0,fo=0,\
+fp=0,fq=0,fr=0,fs=0,ft=0,fu=0,fv=0,fw=0,fx=0,fy=0,fz=0,fA=0,fB=0,fC=0,fD=0,fE=0\
+,fF=0,fG=0,fH=0,fI=0,fJ=0,fK=0,fL=0,fM=0,fN=0,fO=0,fP=0,fQ=0,fR=0,fS=0,fT=0,fU=\
+0,fV=0,fW=0,fX=0,fY=0,fZ=0,f_=0,f$=0,f0=0,f1=0,f2=0,f3=0,f4=0,f5=0,f6=0,f7=0,f8\
+=0,f9=0,ga=0,gb=0,gc=0,gd=0,ge=0,gf=0,gg=0,gh=0,gi=0,gj=0,gk=0,gl=0,gm=0,gn=0,g\
+o=0,gp=0,gq=0,gr=0,gs=0,gt=0,gu=0,gv=0,gw=0,gx=0,gy=0,gz=0,gA=0,gB=0,gC=0,gD=0,\
+gE=0,gF=0,gG=0,gH=0,gI=0,gJ=0,gK=0,gL=0,gM=0,gN=0,gO=0,gP=0,gQ=0,gR=0,gS=0,gT=0\
+,gU=0,gV=0,gW=0,gX=0,gY=0,gZ=0,g_=0,g$=0,g0=0,g1=0,g2=0,g3=0,g4=0,g5=0,g6=0,g7=\
+0,g8=0,g9=0,ha=0;h=i;i=i+64|0;j=h|0;k=h+8|0;l=c[1046]|0;if((l|0)==0){m=bk(10004\
+3)|0;c[1046]=m;n=m}else{n=l}if((c[1044]|0)==0){c[1044]=bk(1e5)|0;o=c[1046]|0}el\
+se{o=n}n=k|0;c[n>>2]=f;l=k+4|0;c[l>>2]=1e5;m=k+12|0;c[m>>2]=o;o=k+16|0;c[o>>2]=\
+100043;p=k+32|0;c[p>>2]=0;q=k+36|0;c[q>>2]=0;r=k+40|0;c[r>>2]=0;t=k+24|0;c[t>>2\
+]=0;c[p>>2]=2;c[r>>2]=0;c[q>>2]=2;u=bf(0,1,5828)|0;L7:do{if((u|0)==0){v=100043}\
+else{w=k+28|0;c[w>>2]=u;c[u>>2]=k;c[u+24>>2]=1;c[u+28>>2]=0;c[u+48>>2]=15;x=u+4\
+4|0;c[x>>2]=32768;c[u+52>>2]=32767;c[u+80>>2]=15;y=u+76|0;c[y>>2]=32768;c[u+84>\
+>2]=32767;c[u+88>>2]=5;z=u+56|0;c[z>>2]=aK[c[p>>2]&3](c[r>>2]|0,32768,2)|0;A=aK\
+[c[p>>2]&3](c[r>>2]|0,c[x>>2]|0,2)|0;B=u+64|0;c[B>>2]=A;bm(A|0,0,c[x>>2]<<1|0);\
+x=u+68|0;c[x>>2]=aK[c[p>>2]&3](c[r>>2]|0,c[y>>2]|0,2)|0;c[u+5824>>2]=0;y=u+5788\
+|0;c[y>>2]=16384;A=aK[c[p>>2]&3](c[r>>2]|0,16384,4)|0;C=A;c[u+8>>2]=A;D=c[y>>2]\
+|0;c[u+12>>2]=D<<2;do{if((c[z>>2]|0)!=0){if((c[B>>2]|0)==0){break}if((c[x>>2]|0\
+)==0|(A|0)==0){break}c[u+5796>>2]=C+(D>>>1<<1);c[u+5784>>2]=A+(D*3&-1);c[u+132>\
+>2]=6;c[u+136>>2]=0;a[u+36|0]=8;y=c[w>>2]|0;if((y|0)==0){v=100043;break L7}if((\
+c[p>>2]|0)==0){v=100043;break L7}if((c[q>>2]|0)==0){v=100043;break L7}E=k+20|0;\
+c[E>>2]=0;F=k+8|0;c[F>>2]=0;c[t>>2]=0;c[k+44>>2]=2;c[y+20>>2]=0;c[y+16>>2]=c[y+\
+8>>2];G=y+24|0;H=c[G>>2]|0;if((H|0)<0){I=-H|0;c[G>>2]=I;J=I}else{J=H}c[y+4>>2]=\
+(J|0)!=0?42:113;H=k+48|0;c[H>>2]=(J|0)!=2&1;c[y+40>>2]=0;c[y+2840>>2]=y+148;c[y\
++2848>>2]=1168;c[y+2852>>2]=y+2440;c[y+2860>>2]=1312;c[y+2864>>2]=y+2684;c[y+28\
+72>>2]=1336;b[y+5816>>1]=0;c[y+5820>>2]=0;c[y+5812>>2]=8;a7(y);c[y+60>>2]=c[y+4\
+4>>2]<<1;I=y+76|0;G=y+68|0;b[(c[G>>2]|0)+((c[I>>2]|0)-1<<1)>>1]=0;bm(c[G>>2]|0,\
+0,(c[I>>2]<<1)-2|0);I=c[y+132>>2]|0;c[y+128>>2]=e[12386+(I*12&-1)>>1]|0;c[y+140\
+>>2]=e[12384+(I*12&-1)>>1]|0;c[y+144>>2]=e[12388+(I*12&-1)>>1]|0;c[y+124>>2]=e[\
+12390+(I*12&-1)>>1]|0;c[y+108>>2]=0;c[y+92>>2]=0;c[y+116>>2]=0;c[y+120>>2]=2;c[\
+y+96>>2]=2;c[y+112>>2]=0;c[y+104>>2]=0;c[y+72>>2]=0;y=c[w>>2]|0;I=y;if((y|0)==0\
+){v=100043;break L7}L20:do{if((c[m>>2]|0)==0){K=30}else{if((c[n>>2]|0)==0){if((\
+c[l>>2]|0)!=0){K=30;break}}G=y+4|0;L=c[G>>2]|0;if((c[o>>2]|0)==0){c[t>>2]=12768\
+;break}M=y;c[y>>2]=k;N=y+40|0;c[N>>2]=4;do{if((L|0)==42){if((c[y+24>>2]|0)!=2){\
+O=(c[y+48>>2]<<12)-30720|0;do{if((c[y+136>>2]|0)>1){P=0}else{Q=c[y+132>>2]|0;if\
+((Q|0)<2){P=0;break}if((Q|0)<6){P=64;break}P=(Q|0)==6?128:192}}while(0);Q=P|O;R\
+=y+108|0;S=(c[R>>2]|0)==0?Q:Q|32;Q=(S|(S>>>0)%31>>>0)^31;c[G>>2]=113;S=y+20|0;T\
+=c[S>>2]|0;c[S>>2]=T+1;U=y+8|0;a[(c[U>>2]|0)+T|0]=Q>>>8&255;T=c[S>>2]|0;c[S>>2]\
+=T+1;a[(c[U>>2]|0)+T|0]=Q&255;if((c[R>>2]|0)!=0){R=c[H>>2]|0;Q=c[S>>2]|0;c[S>>2\
+]=Q+1;a[(c[U>>2]|0)+Q|0]=R>>>24&255;Q=c[S>>2]|0;c[S>>2]=Q+1;a[(c[U>>2]|0)+Q|0]=\
+R>>>16&255;R=c[H>>2]|0;Q=c[S>>2]|0;c[S>>2]=Q+1;a[(c[U>>2]|0)+Q|0]=R>>>8&255;Q=c\
+[S>>2]|0;c[S>>2]=Q+1;a[(c[U>>2]|0)+Q|0]=R&255}c[H>>2]=1;V=c[G>>2]|0;K=54;break}\
+c[H>>2]=0;R=y+20|0;Q=c[R>>2]|0;c[R>>2]=Q+1;U=y+8|0;a[(c[U>>2]|0)+Q|0]=31;Q=c[R>\
+>2]|0;c[R>>2]=Q+1;a[(c[U>>2]|0)+Q|0]=-117;Q=c[R>>2]|0;c[R>>2]=Q+1;a[(c[U>>2]|0)\
++Q|0]=8;Q=y+28|0;S=c[Q>>2]|0;if((S|0)==0){T=c[R>>2]|0;c[R>>2]=T+1;a[(c[U>>2]|0)\
++T|0]=0;T=c[R>>2]|0;c[R>>2]=T+1;a[(c[U>>2]|0)+T|0]=0;T=c[R>>2]|0;c[R>>2]=T+1;a[\
+(c[U>>2]|0)+T|0]=0;T=c[R>>2]|0;c[R>>2]=T+1;a[(c[U>>2]|0)+T|0]=0;T=c[R>>2]|0;c[R\
+>>2]=T+1;a[(c[U>>2]|0)+T|0]=0;T=c[y+132>>2]|0;do{if((T|0)==9){W=2}else{if((c[y+\
+136>>2]|0)>1){W=4;break}W=(T|0)<2?4:0}}while(0);T=c[R>>2]|0;c[R>>2]=T+1;a[(c[U>\
+>2]|0)+T|0]=W;T=c[R>>2]|0;c[R>>2]=T+1;a[(c[U>>2]|0)+T|0]=3;c[G>>2]=113;break}T=\
+((c[S+44>>2]|0)!=0?2:0)|(c[S>>2]|0)!=0&1|((c[S+16>>2]|0)==0?0:4)|((c[S+28>>2]|0\
+)==0?0:8)|((c[S+36>>2]|0)==0?0:16);O=c[R>>2]|0;c[R>>2]=O+1;a[(c[U>>2]|0)+O|0]=T\
+;T=c[(c[Q>>2]|0)+4>>2]&255;O=c[R>>2]|0;c[R>>2]=O+1;a[(c[U>>2]|0)+O|0]=T;T=(c[(c\
+[Q>>2]|0)+4>>2]|0)>>>8&255;O=c[R>>2]|0;c[R>>2]=O+1;a[(c[U>>2]|0)+O|0]=T;T=(c[(c\
+[Q>>2]|0)+4>>2]|0)>>>16&255;O=c[R>>2]|0;c[R>>2]=O+1;a[(c[U>>2]|0)+O|0]=T;T=(c[(\
+c[Q>>2]|0)+4>>2]|0)>>>24&255;O=c[R>>2]|0;c[R>>2]=O+1;a[(c[U>>2]|0)+O|0]=T;T=c[y\
++132>>2]|0;do{if((T|0)==9){X=2}else{if((c[y+136>>2]|0)>1){X=4;break}X=(T|0)<2?4\
+:0}}while(0);T=c[R>>2]|0;c[R>>2]=T+1;a[(c[U>>2]|0)+T|0]=X;T=c[(c[Q>>2]|0)+12>>2\
+]&255;S=c[R>>2]|0;c[R>>2]=S+1;a[(c[U>>2]|0)+S|0]=T;T=c[Q>>2]|0;if((c[T+16>>2]|0\
+)==0){Y=T}else{S=c[T+20>>2]&255;T=c[R>>2]|0;c[R>>2]=T+1;a[(c[U>>2]|0)+T|0]=S;S=\
+(c[(c[Q>>2]|0)+20>>2]|0)>>>8&255;T=c[R>>2]|0;c[R>>2]=T+1;a[(c[U>>2]|0)+T|0]=S;Y\
+=c[Q>>2]|0}if((c[Y+44>>2]|0)!=0){c[H>>2]=bi(c[H>>2]|0,c[U>>2]|0,c[R>>2]|0)|0}c[\
+y+32>>2]=0;c[G>>2]=69;Z=Q;K=56}else{V=L;K=54}}while(0);do{if((K|0)==54){if((V|0\
+)!=69){_=V;K=77;break}Z=y+28|0;K=56}}while(0);do{if((K|0)==56){L=c[Z>>2]|0;if((\
+c[L+16>>2]|0)==0){c[G>>2]=73;$=L;K=79;break}S=y+20|0;T=c[S>>2]|0;O=y+32|0;aa=c[\
+O>>2]|0;L66:do{if(aa>>>0<(c[L+20>>2]&65535)>>>0){ab=y+12|0;ac=y+8|0;ad=T;ae=L;a\
+f=T;ag=aa;while(1){if((af|0)==(c[ab>>2]|0)){if((c[ae+44>>2]|0)!=0&af>>>0>ad>>>0\
+){c[H>>2]=bi(c[H>>2]|0,(c[ac>>2]|0)+ad|0,af-ad|0)|0}ah=c[w>>2]|0;ai=c[ah+20>>2]\
+|0;aj=c[o>>2]|0;ak=ai>>>0>aj>>>0?aj:ai;do{if((ak|0)!=0){ai=c[m>>2]|0;aj=c[ah+16\
+>>2]|0;bn(ai|0,aj|0,ak)|0;c[m>>2]=(c[m>>2]|0)+ak;aj=(c[w>>2]|0)+16|0;c[aj>>2]=(\
+c[aj>>2]|0)+ak;c[E>>2]=(c[E>>2]|0)+ak;c[o>>2]=(c[o>>2]|0)-ak;aj=(c[w>>2]|0)+20|\
+0;c[aj>>2]=(c[aj>>2]|0)-ak;aj=c[w>>2]|0;if((c[aj+20>>2]|0)!=0){break}c[aj+16>>2\
+]=c[aj+8>>2]}}while(0);al=c[S>>2]|0;if((al|0)==(c[ab>>2]|0)){break}am=al;an=al;\
+ap=c[O>>2]|0;aq=c[Z>>2]|0}else{am=ad;an=af;ap=ag;aq=ae}ak=a[(c[aq+16>>2]|0)+ap|\
+0]|0;c[S>>2]=an+1;a[(c[ac>>2]|0)+an|0]=ak;ak=(c[O>>2]|0)+1|0;c[O>>2]=ak;ah=c[Z>\
+>2]|0;if(ak>>>0>=(c[ah+20>>2]&65535)>>>0){ar=am;as=ah;break L66}ad=am;ae=ah;af=\
+c[S>>2]|0;ag=ak}ar=al;as=c[Z>>2]|0}else{ar=T;as=L}}while(0);do{if((c[as+44>>2]|\
+0)==0){at=as}else{L=c[S>>2]|0;if(L>>>0<=ar>>>0){at=as;break}c[H>>2]=bi(c[H>>2]|\
+0,(c[y+8>>2]|0)+ar|0,L-ar|0)|0;at=c[Z>>2]|0}}while(0);if((c[O>>2]|0)==(c[at+20>\
+>2]|0)){c[O>>2]=0;c[G>>2]=73;$=at;K=79;break}else{_=c[G>>2]|0;K=77;break}}}whil\
+e(0);do{if((K|0)==77){if((_|0)!=73){au=_;K=97;break}$=c[y+28>>2]|0;K=79}}while(\
+0);do{if((K|0)==79){S=y+28|0;if((c[$+28>>2]|0)==0){c[G>>2]=91;av=S;K=99;break}L\
+=y+20|0;T=c[L>>2]|0;aa=y+12|0;Q=y+8|0;R=y+32|0;U=T;ag=T;while(1){if((ag|0)==(c[\
+aa>>2]|0)){if((c[(c[S>>2]|0)+44>>2]|0)!=0&ag>>>0>U>>>0){c[H>>2]=bi(c[H>>2]|0,(c\
+[Q>>2]|0)+U|0,ag-U|0)|0}T=c[w>>2]|0;af=c[T+20>>2]|0;ae=c[o>>2]|0;ad=af>>>0>ae>>\
+>0?ae:af;do{if((ad|0)!=0){af=c[m>>2]|0;ae=c[T+16>>2]|0;bn(af|0,ae|0,ad)|0;c[m>>\
+2]=(c[m>>2]|0)+ad;ae=(c[w>>2]|0)+16|0;c[ae>>2]=(c[ae>>2]|0)+ad;c[E>>2]=(c[E>>2]\
+|0)+ad;c[o>>2]=(c[o>>2]|0)-ad;ae=(c[w>>2]|0)+20|0;c[ae>>2]=(c[ae>>2]|0)-ad;ae=c\
+[w>>2]|0;if((c[ae+20>>2]|0)!=0){break}c[ae+16>>2]=c[ae+8>>2]}}while(0);ad=c[L>>\
+2]|0;if((ad|0)==(c[aa>>2]|0)){aw=1;ax=ad;break}else{ay=ad;aA=ad}}else{ay=U;aA=a\
+g}ad=c[R>>2]|0;c[R>>2]=ad+1;T=a[(c[(c[S>>2]|0)+28>>2]|0)+ad|0]|0;c[L>>2]=aA+1;a\
+[(c[Q>>2]|0)+aA|0]=T;if(T<<24>>24==0){aw=0;ax=ay;break}U=ay;ag=c[L>>2]|0}do{if(\
+(c[(c[S>>2]|0)+44>>2]|0)!=0){ag=c[L>>2]|0;if(ag>>>0<=ax>>>0){break}c[H>>2]=bi(c\
+[H>>2]|0,(c[Q>>2]|0)+ax|0,ag-ax|0)|0}}while(0);if((aw|0)==0){c[R>>2]=0;c[G>>2]=\
+91;av=S;K=99;break}else{au=c[G>>2]|0;K=97;break}}}while(0);do{if((K|0)==97){if(\
+(au|0)!=91){aB=au;K=117;break}av=y+28|0;K=99}}while(0);do{if((K|0)==99){if((c[(\
+c[av>>2]|0)+36>>2]|0)==0){c[G>>2]=103;aC=av;K=119;break}Q=y+20|0;L=c[Q>>2]|0;ag\
+=y+12|0;U=y+8|0;aa=y+32|0;O=L;T=L;while(1){if((T|0)==(c[ag>>2]|0)){if((c[(c[av>\
+>2]|0)+44>>2]|0)!=0&T>>>0>O>>>0){c[H>>2]=bi(c[H>>2]|0,(c[U>>2]|0)+O|0,T-O|0)|0}\
+L=c[w>>2]|0;ad=c[L+20>>2]|0;ae=c[o>>2]|0;af=ad>>>0>ae>>>0?ae:ad;do{if((af|0)!=0\
+){ad=c[m>>2]|0;ae=c[L+16>>2]|0;bn(ad|0,ae|0,af)|0;c[m>>2]=(c[m>>2]|0)+af;ae=(c[\
+w>>2]|0)+16|0;c[ae>>2]=(c[ae>>2]|0)+af;c[E>>2]=(c[E>>2]|0)+af;c[o>>2]=(c[o>>2]|\
+0)-af;ae=(c[w>>2]|0)+20|0;c[ae>>2]=(c[ae>>2]|0)-af;ae=c[w>>2]|0;if((c[ae+20>>2]\
+|0)!=0){break}c[ae+16>>2]=c[ae+8>>2]}}while(0);af=c[Q>>2]|0;if((af|0)==(c[ag>>2\
+]|0)){aD=1;aF=af;break}else{aH=af;aI=af}}else{aH=O;aI=T}af=c[aa>>2]|0;c[aa>>2]=\
+af+1;L=a[(c[(c[av>>2]|0)+36>>2]|0)+af|0]|0;c[Q>>2]=aI+1;a[(c[U>>2]|0)+aI|0]=L;i\
+f(L<<24>>24==0){aD=0;aF=aH;break}O=aH;T=c[Q>>2]|0}do{if((c[(c[av>>2]|0)+44>>2]|\
+0)!=0){T=c[Q>>2]|0;if(T>>>0<=aF>>>0){break}c[H>>2]=bi(c[H>>2]|0,(c[U>>2]|0)+aF|\
+0,T-aF|0)|0}}while(0);if((aD|0)==0){c[G>>2]=103;aC=av;K=119;break}else{aB=c[G>>\
+2]|0;K=117;break}}}while(0);do{if((K|0)==117){if((aB|0)!=103){break}aC=y+28|0;K\
+=119}}while(0);do{if((K|0)==119){if((c[(c[aC>>2]|0)+44>>2]|0)==0){c[G>>2]=113;b\
+reak}U=y+20|0;Q=y+12|0;do{if(((c[U>>2]|0)+2|0)>>>0>(c[Q>>2]|0)>>>0){T=c[w>>2]|0\
+;O=c[T+20>>2]|0;aa=c[o>>2]|0;ag=O>>>0>aa>>>0?aa:O;if((ag|0)==0){break}O=c[m>>2]\
+|0;aa=c[T+16>>2]|0;bn(O|0,aa|0,ag)|0;c[m>>2]=(c[m>>2]|0)+ag;aa=(c[w>>2]|0)+16|0\
+;c[aa>>2]=(c[aa>>2]|0)+ag;c[E>>2]=(c[E>>2]|0)+ag;c[o>>2]=(c[o>>2]|0)-ag;aa=(c[w\
+>>2]|0)+20|0;c[aa>>2]=(c[aa>>2]|0)-ag;ag=c[w>>2]|0;if((c[ag+20>>2]|0)!=0){break\
+}c[ag+16>>2]=c[ag+8>>2]}}while(0);ag=c[U>>2]|0;if((ag+2|0)>>>0>(c[Q>>2]|0)>>>0)\
+{break}aa=c[H>>2]&255;c[U>>2]=ag+1;O=y+8|0;a[(c[O>>2]|0)+ag|0]=aa;aa=(c[H>>2]|0\
+)>>>8&255;ag=c[U>>2]|0;c[U>>2]=ag+1;a[(c[O>>2]|0)+ag|0]=aa;c[H>>2]=0;c[G>>2]=11\
+3}}while(0);aa=y+20|0;do{if((c[aa>>2]|0)==0){ag=c[l>>2]|0;aL=(ag|0)==0?0:ag}els\
+e{ag=c[w>>2]|0;O=c[ag+20>>2]|0;T=c[o>>2]|0;S=O>>>0>T>>>0?T:O;if((S|0)==0){aN=T}\
+else{T=c[m>>2]|0;O=c[ag+16>>2]|0;bn(T|0,O|0,S)|0;c[m>>2]=(c[m>>2]|0)+S;O=(c[w>>\
+2]|0)+16|0;c[O>>2]=(c[O>>2]|0)+S;c[E>>2]=(c[E>>2]|0)+S;c[o>>2]=(c[o>>2]|0)-S;O=\
+(c[w>>2]|0)+20|0;c[O>>2]=(c[O>>2]|0)-S;S=c[w>>2]|0;if((c[S+20>>2]|0)==0){c[S+16\
+>>2]=c[S+8>>2]}aN=c[o>>2]|0}if((aN|0)==0){c[N>>2]=-1;break L20}else{aL=c[l>>2]|\
+0;break}}}while(0);S=(c[G>>2]|0)==666;O=(aL|0)==0;do{if(S){if(O){K=140;break}c[\
+t>>2]=12768;break L20}else{if(O){K=140}else{K=141}}}while(0);if((K|0)==140){if(\
+(c[y+116>>2]|0)==0^1|S^1){K=141}}L183:do{if((K|0)==141){O=c[y+136>>2]|0;L185:do\
+{if((O|0)==2){T=y+116|0;ag=y+96|0;R=y+108|0;L=y+56|0;af=y+5792|0;ae=y+5796|0;ad\
+=y+5784|0;ac=y+5788|0;ab=y+92|0;ak=y;while(1){if((c[T>>2]|0)==0){a3(I);if((c[T>\
+>2]|0)==0){break}}c[ag>>2]=0;ah=a[(c[L>>2]|0)+(c[R>>2]|0)|0]|0;b[(c[ae>>2]|0)+(\
+c[af>>2]<<1)>>1]=0;aj=c[af>>2]|0;c[af>>2]=aj+1;a[(c[ad>>2]|0)+aj|0]=ah;aj=I+148\
++((ah&255)<<2)|0;b[aj>>1]=(b[aj>>1]|0)+1&65535;aj=(c[af>>2]|0)==((c[ac>>2]|0)-1\
+|0);c[T>>2]=(c[T>>2]|0)-1;ah=(c[R>>2]|0)+1|0;c[R>>2]=ah;if(!aj){continue}aj=c[a\
+b>>2]|0;if((aj|0)>-1){aO=(c[L>>2]|0)+aj|0}else{aO=0}ba(ak,aO,ah-aj|0,0);c[ab>>2\
+]=c[R>>2];aj=c[M>>2]|0;ah=aj+28|0;ai=c[ah>>2]|0;aP=c[ai+20>>2]|0;aQ=aj+16|0;aR=\
+c[aQ>>2]|0;aS=aP>>>0>aR>>>0?aR:aP;do{if((aS|0)!=0){aP=aj+12|0;aR=c[aP>>2]|0;aT=\
+c[ai+16>>2]|0;bn(aR|0,aT|0,aS)|0;c[aP>>2]=(c[aP>>2]|0)+aS;aP=(c[ah>>2]|0)+16|0;\
+c[aP>>2]=(c[aP>>2]|0)+aS;aP=aj+20|0;c[aP>>2]=(c[aP>>2]|0)+aS;c[aQ>>2]=(c[aQ>>2]\
+|0)-aS;aP=(c[ah>>2]|0)+20|0;c[aP>>2]=(c[aP>>2]|0)-aS;aP=c[ah>>2]|0;if((c[aP+20>\
+>2]|0)!=0){break}c[aP+16>>2]=c[aP+8>>2]}}while(0);if((c[(c[M>>2]|0)+16>>2]|0)==\
+0){break L185}}T=c[ab>>2]|0;if((T|0)>-1){aU=(c[L>>2]|0)+T|0}else{aU=0}ba(ak,aU,\
+(c[R>>2]|0)-T|0,1);c[ab>>2]=c[R>>2];T=c[M>>2]|0;ac=T+28|0;af=c[ac>>2]|0;ad=c[af\
++20>>2]|0;ae=T+16|0;ag=c[ae>>2]|0;ah=ad>>>0>ag>>>0?ag:ad;do{if((ah|0)!=0){ad=T+\
+12|0;ag=c[ad>>2]|0;aS=c[af+16>>2]|0;bn(ag|0,aS|0,ah)|0;c[ad>>2]=(c[ad>>2]|0)+ah\
+;ad=(c[ac>>2]|0)+16|0;c[ad>>2]=(c[ad>>2]|0)+ah;ad=T+20|0;c[ad>>2]=(c[ad>>2]|0)+\
+ah;c[ae>>2]=(c[ae>>2]|0)-ah;ad=(c[ac>>2]|0)+20|0;c[ad>>2]=(c[ad>>2]|0)-ah;ad=c[\
+ac>>2]|0;if((c[ad+20>>2]|0)!=0){break}c[ad+16>>2]=c[ad+8>>2]}}while(0);aV=(c[(c\
+[M>>2]|0)+16>>2]|0)==0?2:3;K=193}else if((O|0)==3){ac=y+116|0;ah=y+96|0;ae=y+10\
+8|0;T=y+5792|0;af=y+5796|0;R=y+5784|0;ab=y+2440|0;ak=y+5788|0;L=y+56|0;ad=y+92|\
+0;aS=y;L209:while(1){ag=c[ac>>2]|0;do{if(ag>>>0<258){a3(I);aQ=c[ac>>2]|0;if((aQ\
+|0)==0){break L209}c[ah>>2]=0;if(aQ>>>0>2){aW=aQ;K=164;break}aX=c[ae>>2]|0;K=17\
+9}else{c[ah>>2]=0;aW=ag;K=164}}while(0);do{if((K|0)==164){K=0;ag=c[ae>>2]|0;if(\
+(ag|0)==0){aX=0;K=179;break}aQ=c[L>>2]|0;aj=a[aQ+(ag-1)|0]|0;if(aj<<24>>24!=(a[\
+aQ+ag|0]|0)){aX=ag;K=179;break}if(aj<<24>>24!=(a[aQ+(ag+1)|0]|0)){aX=ag;K=179;b\
+reak}ai=aQ+(ag+2)|0;if(aj<<24>>24!=(a[ai]|0)){aX=ag;K=179;break}aP=aQ+(ag+258)|\
+0;aQ=ai;while(1){ai=aQ+1|0;if(aj<<24>>24!=(a[ai]|0)){aY=ai;break}ai=aQ+2|0;if(a\
+j<<24>>24!=(a[ai]|0)){aY=ai;break}ai=aQ+3|0;if(aj<<24>>24!=(a[ai]|0)){aY=ai;bre\
+ak}ai=aQ+4|0;if(aj<<24>>24!=(a[ai]|0)){aY=ai;break}ai=aQ+5|0;if(aj<<24>>24!=(a[\
+ai]|0)){aY=ai;break}ai=aQ+6|0;if(aj<<24>>24!=(a[ai]|0)){aY=ai;break}ai=aQ+7|0;i\
+f(aj<<24>>24!=(a[ai]|0)){aY=ai;break}ai=aQ+8|0;if(aj<<24>>24==(a[ai]|0)&ai>>>0<\
+aP>>>0){aQ=ai}else{aY=ai;break}}aQ=aY-aP+258|0;aj=aQ>>>0>aW>>>0?aW:aQ;c[ah>>2]=\
+aj;if(aj>>>0<=2){aX=ag;K=179;break}aQ=aj+253|0;b[(c[af>>2]|0)+(c[T>>2]<<1)>>1]=\
+1;aj=c[T>>2]|0;c[T>>2]=aj+1;a[(c[R>>2]|0)+aj|0]=aQ&255;aj=I+148+((d[12952+(aQ&2\
+55)|0]|256)+1<<2)|0;b[aj>>1]=(b[aj>>1]|0)+1&65535;b[ab>>1]=(b[ab>>1]|0)+1&65535\
+;aj=(c[T>>2]|0)==((c[ak>>2]|0)-1|0);aQ=c[ah>>2]|0;c[ac>>2]=(c[ac>>2]|0)-aQ;ai=(\
+c[ae>>2]|0)+aQ|0;c[ae>>2]=ai;c[ah>>2]=0;if(aj){aZ=ai}else{continue L209}}}while\
+(0);if((K|0)==179){K=0;ai=a[(c[L>>2]|0)+aX|0]|0;b[(c[af>>2]|0)+(c[T>>2]<<1)>>1]\
+=0;aj=c[T>>2]|0;c[T>>2]=aj+1;a[(c[R>>2]|0)+aj|0]=ai;aj=I+148+((ai&255)<<2)|0;b[\
+aj>>1]=(b[aj>>1]|0)+1&65535;aj=(c[T>>2]|0)==((c[ak>>2]|0)-1|0);c[ac>>2]=(c[ac>>\
+2]|0)-1;ai=(c[ae>>2]|0)+1|0;c[ae>>2]=ai;if(aj){aZ=ai}else{continue}}ai=c[ad>>2]\
+|0;if((ai|0)>-1){a_=(c[L>>2]|0)+ai|0}else{a_=0}ba(aS,a_,aZ-ai|0,0);c[ad>>2]=c[a\
+e>>2];ai=c[M>>2]|0;aj=ai+28|0;aQ=c[aj>>2]|0;aT=c[aQ+20>>2]|0;aR=ai+16|0;a$=c[aR\
+>>2]|0;a0=aT>>>0>a$>>>0?a$:aT;do{if((a0|0)!=0){aT=ai+12|0;a$=c[aT>>2]|0;a1=c[aQ\
++16>>2]|0;bn(a$|0,a1|0,a0)|0;c[aT>>2]=(c[aT>>2]|0)+a0;aT=(c[aj>>2]|0)+16|0;c[aT\
+>>2]=(c[aT>>2]|0)+a0;aT=ai+20|0;c[aT>>2]=(c[aT>>2]|0)+a0;c[aR>>2]=(c[aR>>2]|0)-\
+a0;aT=(c[aj>>2]|0)+20|0;c[aT>>2]=(c[aT>>2]|0)-a0;aT=c[aj>>2]|0;if((c[aT+20>>2]|\
+0)!=0){break}c[aT+16>>2]=c[aT+8>>2]}}while(0);if((c[(c[M>>2]|0)+16>>2]|0)==0){b\
+reak L185}}ac=c[ad>>2]|0;if((ac|0)>-1){a2=(c[L>>2]|0)+ac|0}else{a2=0}ba(aS,a2,(\
+c[ae>>2]|0)-ac|0,1);c[ad>>2]=c[ae>>2];ac=c[M>>2]|0;ak=ac+28|0;T=c[ak>>2]|0;R=c[\
+T+20>>2]|0;af=ac+16|0;ah=c[af>>2]|0;ab=R>>>0>ah>>>0?ah:R;do{if((ab|0)!=0){R=ac+\
+12|0;ah=c[R>>2]|0;aj=c[T+16>>2]|0;bn(ah|0,aj|0,ab)|0;c[R>>2]=(c[R>>2]|0)+ab;R=(\
+c[ak>>2]|0)+16|0;c[R>>2]=(c[R>>2]|0)+ab;R=ac+20|0;c[R>>2]=(c[R>>2]|0)+ab;c[af>>\
+2]=(c[af>>2]|0)-ab;R=(c[ak>>2]|0)+20|0;c[R>>2]=(c[R>>2]|0)-ab;R=c[ak>>2]|0;if((\
+c[R+20>>2]|0)!=0){break}c[R+16>>2]=c[R+8>>2]}}while(0);aV=(c[(c[M>>2]|0)+16>>2]\
+|0)==0?2:3;K=193}else{ak=aM[c[12392+((c[y+132>>2]|0)*12&-1)>>2]&7](I,4)|0;if((a\
+k-2|0)>>>0<2){aV=ak;K=193}else{a4=ak;K=194}}}while(0);if((K|0)==193){c[G>>2]=66\
+6;a4=aV;K=194}do{if((K|0)==194){if((a4|0)==2|(a4|0)==0){break}else if((a4|0)!=1\
+){break L183}a9(y,0,0,0);O=c[w>>2]|0;U=c[O+20>>2]|0;Q=c[o>>2]|0;ak=U>>>0>Q>>>0?\
+Q:U;if((ak|0)==0){a5=Q}else{Q=c[m>>2]|0;U=c[O+16>>2]|0;bn(Q|0,U|0,ak)|0;c[m>>2]\
+=(c[m>>2]|0)+ak;U=(c[w>>2]|0)+16|0;c[U>>2]=(c[U>>2]|0)+ak;c[E>>2]=(c[E>>2]|0)+a\
+k;c[o>>2]=(c[o>>2]|0)-ak;U=(c[w>>2]|0)+20|0;c[U>>2]=(c[U>>2]|0)-ak;ak=c[w>>2]|0\
+;if((c[ak+20>>2]|0)==0){c[ak+16>>2]=c[ak+8>>2]}a5=c[o>>2]|0}if((a5|0)!=0){break\
+ L183}c[N>>2]=-1;break L20}}while(0);if((c[o>>2]|0)!=0){break L20}c[N>>2]=-1;br\
+eak L20}}while(0);N=y+24|0;G=c[N>>2]|0;if((G|0)>=1){M=c[H>>2]|0;if((G|0)==2){G=\
+c[aa>>2]|0;c[aa>>2]=G+1;S=y+8|0;a[(c[S>>2]|0)+G|0]=M&255;G=(c[H>>2]|0)>>>8&255;\
+ak=c[aa>>2]|0;c[aa>>2]=ak+1;a[(c[S>>2]|0)+ak|0]=G;G=(c[H>>2]|0)>>>16&255;ak=c[a\
+a>>2]|0;c[aa>>2]=ak+1;a[(c[S>>2]|0)+ak|0]=G;G=(c[H>>2]|0)>>>24&255;ak=c[aa>>2]|\
+0;c[aa>>2]=ak+1;a[(c[S>>2]|0)+ak|0]=G;G=c[F>>2]&255;ak=c[aa>>2]|0;c[aa>>2]=ak+1\
+;a[(c[S>>2]|0)+ak|0]=G;G=(c[F>>2]|0)>>>8&255;ak=c[aa>>2]|0;c[aa>>2]=ak+1;a[(c[S\
+>>2]|0)+ak|0]=G;G=(c[F>>2]|0)>>>16&255;ak=c[aa>>2]|0;c[aa>>2]=ak+1;a[(c[S>>2]|0\
+)+ak|0]=G;G=(c[F>>2]|0)>>>24&255;ak=c[aa>>2]|0;c[aa>>2]=ak+1;a[(c[S>>2]|0)+ak|0\
+]=G}else{G=c[aa>>2]|0;c[aa>>2]=G+1;ak=y+8|0;a[(c[ak>>2]|0)+G|0]=M>>>24&255;G=c[\
+aa>>2]|0;c[aa>>2]=G+1;a[(c[ak>>2]|0)+G|0]=M>>>16&255;M=c[H>>2]|0;G=c[aa>>2]|0;c\
+[aa>>2]=G+1;a[(c[ak>>2]|0)+G|0]=M>>>8&255;G=c[aa>>2]|0;c[aa>>2]=G+1;a[(c[ak>>2]\
+|0)+G|0]=M&255}M=c[w>>2]|0;G=c[M+20>>2]|0;ak=c[o>>2]|0;S=G>>>0>ak>>>0?ak:G;do{i\
+f((S|0)!=0){G=c[m>>2]|0;ak=c[M+16>>2]|0;bn(G|0,ak|0,S)|0;c[m>>2]=(c[m>>2]|0)+S;\
+ak=(c[w>>2]|0)+16|0;c[ak>>2]=(c[ak>>2]|0)+S;c[E>>2]=(c[E>>2]|0)+S;c[o>>2]=(c[o>\
+>2]|0)-S;ak=(c[w>>2]|0)+20|0;c[ak>>2]=(c[ak>>2]|0)-S;ak=c[w>>2]|0;if((c[ak+20>>\
+2]|0)!=0){break}c[ak+16>>2]=c[ak+8>>2]}}while(0);S=c[N>>2]|0;if((S|0)>0){c[N>>2\
+]=-S}if((c[aa>>2]|0)!=0){break}}S=c[E>>2]|0;M=c[w>>2]|0;if((M|0)==0){v=S;break \
+L7}ak=c[M+4>>2]|0;if(!((ak|0)==666|(ak|0)==113|(ak|0)==103|(ak|0)==91|(ak|0)==7\
+3|(ak|0)==69|(ak|0)==42)){v=S;break L7}ak=c[M+8>>2]|0;if((ak|0)==0){a6=M}else{a\
+J[c[q>>2]&3](c[r>>2]|0,ak);a6=c[w>>2]|0}ak=c[a6+68>>2]|0;if((ak|0)==0){a8=a6}el\
+se{aJ[c[q>>2]&3](c[r>>2]|0,ak);a8=c[w>>2]|0}ak=c[a8+64>>2]|0;if((ak|0)==0){bb=a\
+8}else{aJ[c[q>>2]&3](c[r>>2]|0,ak);bb=c[w>>2]|0}ak=c[bb+56>>2]|0;if((ak|0)==0){\
+bc=bb}else{aJ[c[q>>2]&3](c[r>>2]|0,ak);bc=c[w>>2]|0}aJ[c[q>>2]&3](c[r>>2]|0,bc)\
+;c[w>>2]=0;v=S;break L7}}while(0);if((K|0)==30){c[t>>2]=12808}E=c[w>>2]|0;if((E\
+|0)==0){v=100043;break L7}H=c[E+4>>2]|0;if(!((H|0)==666|(H|0)==113|(H|0)==103|(\
+H|0)==91|(H|0)==73|(H|0)==69|(H|0)==42)){v=100043;break L7}H=c[E+8>>2]|0;if((H|\
+0)==0){bd=E}else{aJ[c[q>>2]&3](c[r>>2]|0,H);bd=c[w>>2]|0}H=c[bd+68>>2]|0;if((H|\
+0)==0){be=bd}else{aJ[c[q>>2]&3](c[r>>2]|0,H);be=c[w>>2]|0}H=c[be+64>>2]|0;if((H\
+|0)==0){bl=be}else{aJ[c[q>>2]&3](c[r>>2]|0,H);bl=c[w>>2]|0}H=c[bl+56>>2]|0;if((\
+H|0)==0){bo=bl}else{aJ[c[q>>2]&3](c[r>>2]|0,H);bo=c[w>>2]|0}aJ[c[q>>2]&3](c[r>>\
+2]|0,bo);c[w>>2]=0;v=100043;break L7}}while(0);c[u+4>>2]=666;c[t>>2]=12784;D=c[\
+w>>2]|0;if((D|0)==0){v=100043;break}A=c[D+4>>2]|0;if(!((A|0)==666|(A|0)==113|(A\
+|0)==103|(A|0)==91|(A|0)==73|(A|0)==69|(A|0)==42)){v=100043;break}A=c[D+8>>2]|0\
+;if((A|0)==0){bp=D}else{aJ[c[q>>2]&3](c[r>>2]|0,A);bp=c[w>>2]|0}A=c[bp+68>>2]|0\
+;if((A|0)==0){bq=bp}else{aJ[c[q>>2]&3](c[r>>2]|0,A);bq=c[w>>2]|0}A=c[bq+64>>2]|\
+0;if((A|0)==0){br=bq}else{aJ[c[q>>2]&3](c[r>>2]|0,A);br=c[w>>2]|0}A=c[br+56>>2]\
+|0;if((A|0)==0){bs=br}else{aJ[c[q>>2]&3](c[r>>2]|0,A);bs=c[w>>2]|0}aJ[c[q>>2]&3\
+](c[r>>2]|0,bs);c[w>>2]=0;v=100043}}while(0);bs=(g|0)==0;if(bs){ao(12936,(s=i,i\
+=i+16|0,c[s>>2]=1e5,c[s+8>>2]=v,s)|0)|0}g=c[1044]|0;r=c[1046]|0;q=bf(0,1,7116)|\
+0;L331:do{if((q|0)!=0){c[q+52>>2]=0;br=q+52|0;bq=br;bp=q+36|0;t=q+8|0;c[t>>2]=1\
+;c[bp>>2]=15;u=q+28|0;c[u>>2]=0;bo=q;c[bo>>2]=0;bl=q+4|0;c[bl>>2]=0;be=q+12|0;c\
+[be>>2]=0;bd=q+20|0;c[bd>>2]=32768;c[q+32>>2]=0;bc=q+40|0;c[bc>>2]=0;bb=q+44|0;\
+c[bb>>2]=0;a8=q+48|0;c[a8>>2]=0;a6=q+56|0;c[a6>>2]=0;o=q+60|0;c[o>>2]=0;m=q+132\
+8|0;c[q+108>>2]=m;a5=q+80|0;c[a5>>2]=m;a4=q+76|0;c[a4>>2]=m;aV=q+7104|0;c[aV>>2\
+]=1;a2=q+7108|0;c[a2>>2]=-1;aZ=j|0;L333:do{if((g|0)!=0){if(!((r|0)!=0|(v|0)==0)\
+){break}a_=q+24|0;aX=j+1|0;aW=q+16|0;aY=q+32|0;aU=q+64|0;aO=q+84|0;aL=q+88|0;l=\
+q+76|0;aN=q+72|0;aC=q+7112|0;aB=q+68|0;av=q+96|0;aD=q+100|0;aF=q+92|0;aH=q+104|\
+0;aI=q+108|0;au=aI;aw=aI;aI=q+112|0;ax=aI;ay=q+752|0;aA=aI;aI=q+624|0;$=q+80|0;\
+_=j+2|0;at=j+3|0;Z=0;ar=1e5;as=0;al=0;am=1e5;an=v;ap=g;aq=r;V=0;Y=v;X=0;L336:wh\
+ile(1){L338:do{if((V|0)==27){bt=ar;bu=as;bv=al;bw=an;bx=aq;by=X;bz=c[t>>2]|0;K=\
+571}else if((V|0)==6){bA=as;bB=al;bC=an;bD=aq;bE=c[aW>>2]|0;K=317}else if((V|0)\
+==21){bF=Z;bG=as;bH=al;bI=an;bJ=aq;bK=c[aN>>2]|0;K=515}else if((V|0)==23){bL=Z;\
+bM=as;bN=al;bO=an;bP=aq;bQ=c[aN>>2]|0;K=534}else if((V|0)==18){bR=Z;bS=as;bT=al\
+;bU=an;bV=aq;bW=c[aH>>2]|0;K=395}else if((V|0)==1){if(as>>>0<16){W=aq;P=an;k=al\
+;n=as;while(1){if((P|0)==0){bX=Z;bY=ar;bZ=n;b_=k;b$=am;b0=X;break L336}J=P-1|0;\
+p=W+1|0;A=(d[W]<<n)+k|0;D=n+8|0;if(D>>>0<16){W=p;P=J;k=A;n=D}else{b1=p;b2=J;b3=\
+A;b4=D;break}}}else{b1=aq;b2=an;b3=al;b4=as}c[aW>>2]=b3;if((b3&255|0)!=8){c[bo>\
+>2]=29;b5=Z;b6=ar;b7=b4;b8=b3;b9=am;ca=b2;cb=ap;cc=b1;cd=Y;ce=X;break}if((b3&57\
+344|0)!=0){c[bo>>2]=29;b5=Z;b6=ar;b7=b4;b8=b3;b9=am;ca=b2;cb=ap;cc=b1;cd=Y;ce=X\
+;break}n=c[aY>>2]|0;if((n|0)==0){cf=b3}else{c[n>>2]=b3>>>8&1;cf=c[aW>>2]|0}if((\
+cf&512|0)!=0){a[aZ]=b3&255;a[aX]=b3>>>8&255;c[a_>>2]=bi(c[a_>>2]|0,aZ,2)|0}c[bo\
+>>2]=2;cg=b1;ch=b2;ci=0;cj=0;K=281}else if((V|0)==9){if(as>>>0<32){n=aq;k=an;P=\
+al;W=as;while(1){if((k|0)==0){bX=Z;bY=ar;bZ=W;b_=P;b$=am;b0=X;break L336}D=k-1|\
+0;A=n+1|0;J=(d[n]<<W)+P|0;p=W+8|0;if(p>>>0<32){n=A;k=D;P=J;W=p}else{ck=A;cl=D;c\
+m=J;break}}}else{ck=aq;cl=an;cm=al}c[a_>>2]=aE(cm|0)|0;c[bo>>2]=10;cn=0;co=0;cp\
+=cl;cq=ck;K=355}else if((V|0)==16){if(as>>>0<14){W=aq;P=an;k=al;n=as;while(1){i\
+f((P|0)==0){bX=Z;bY=ar;bZ=n;b_=k;b$=am;b0=X;break L336}J=P-1|0;D=W+1|0;A=(d[W]<\
+<n)+k|0;p=n+8|0;if(p>>>0<14){W=D;P=J;k=A;n=p}else{cr=D;cs=J;ct=A;cu=p;break}}}e\
+lse{cr=aq;cs=an;ct=al;cu=as}n=(ct&31)+257|0;c[av>>2]=n;k=(ct>>>5&31)+1|0;c[aD>>\
+2]=k;c[aF>>2]=(ct>>>10&15)+4;P=ct>>>14;W=cu-14|0;if(n>>>0>286|k>>>0>30){c[bo>>2\
+]=29;b5=Z;b6=ar;b7=W;b8=P;b9=am;ca=cs;cb=ap;cc=cr;cd=Y;ce=X;break}else{c[aH>>2]\
+=0;c[bo>>2]=17;cv=cr;cw=cs;cx=P;cy=W;cz=0;K=386;break}}else if((V|0)==0){W=c[t>\
+>2]|0;if((W|0)==0){c[bo>>2]=12;b5=Z;b6=ar;b7=as;b8=al;b9=am;ca=an;cb=ap;cc=aq;c\
+d=Y;ce=X;break}if(as>>>0<16){P=aq;k=an;n=al;p=as;while(1){if((k|0)==0){bX=Z;bY=\
+ar;bZ=p;b_=n;b$=am;b0=X;break L336}A=k-1|0;J=P+1|0;D=(d[P]<<p)+n|0;C=p+8|0;if(C\
+>>>0<16){P=J;k=A;n=D;p=C}else{cA=J;cB=A;cC=D;cD=C;break}}}else{cA=aq;cB=an;cC=a\
+l;cD=as}if((W&2|0)!=0&(cC|0)==35615){c[a_>>2]=0;a[aZ]=31;a[aX]=-117;c[a_>>2]=bi\
+(c[a_>>2]|0,aZ,2)|0;c[bo>>2]=1;b5=Z;b6=ar;b7=0;b8=0;b9=am;ca=cB;cb=ap;cc=cA;cd=\
+Y;ce=X;break}c[aW>>2]=0;p=c[aY>>2]|0;if((p|0)==0){cE=W}else{c[p+48>>2]=-1;cE=c[\
+t>>2]|0}do{if((cE&1|0)!=0){if(((((cC<<8&65280)+(cC>>>8)|0)>>>0)%31>>>0|0)!=0){b\
+reak}if((cC&15|0)!=8){c[bo>>2]=29;b5=Z;b6=ar;b7=cD;b8=cC;b9=am;ca=cB;cb=ap;cc=c\
+A;cd=Y;ce=X;break L338}p=cC>>>4;n=cD-4|0;k=(p&15)+8|0;P=c[bp>>2]|0;do{if((P|0)=\
+=0){c[bp>>2]=k}else{if(k>>>0<=P>>>0){break}c[bo>>2]=29;b5=Z;b6=ar;b7=n;b8=p;b9=\
+am;ca=cB;cb=ap;cc=cA;cd=Y;ce=X;break L338}}while(0);c[bd>>2]=1<<k;c[a_>>2]=1;c[\
+bo>>2]=cC>>>12&2^11;b5=Z;b6=ar;b7=0;b8=0;b9=am;ca=cB;cb=ap;cc=cA;cd=Y;ce=X;brea\
+k L338}}while(0);c[bo>>2]=29;b5=Z;b6=ar;b7=cD;b8=cC;b9=am;ca=cB;cb=ap;cc=cA;cd=\
+Y;ce=X}else if((V|0)==2){if(as>>>0<32){cg=aq;ch=an;ci=al;cj=as;K=281}else{cF=aq\
+;cG=an;cH=al;K=283}}else if((V|0)==3){if(as>>>0<16){cI=aq;cJ=an;cK=al;cL=as;K=2\
+89}else{cM=aq;cN=an;cO=al;K=291}}else if((V|0)==4){cP=as;cQ=al;cR=an;cS=aq;K=29\
+6}else if((V|0)==5){cT=as;cU=al;cV=an;cW=aq;K=307}else if((V|0)==7){cX=as;cY=al\
+;cZ=an;c_=aq;K=330}else if((V|0)==8){c$=as;c0=al;c1=an;c2=aq;K=343}else if((V|0\
+)==10){cn=as;co=al;cp=an;cq=aq;K=355}else if((V|0)==11|(V|0)==12){c3=as;c4=al;c\
+5=an;c6=aq;K=358}else if((V|0)==13){W=as&7;p=al>>>(W>>>0);n=as-W|0;if(n>>>0<32)\
+{W=aq;P=an;C=p;D=n;while(1){if((P|0)==0){bX=Z;bY=ar;bZ=D;b_=C;b$=am;b0=X;break \
+L336}A=P-1|0;J=W+1|0;x=(d[W]<<D)+C|0;B=D+8|0;if(B>>>0<32){W=J;P=A;C=x;D=B}else{\
+c7=J;c8=A;c9=x;da=B;break}}}else{c7=aq;c8=an;c9=p;da=n}D=c9&65535;if((D|0)==(c9\
+>>>16^65535|0)){c[aU>>2]=D;c[bo>>2]=14;db=0;dc=0;dd=c8;de=c7;K=375;break}else{c\
+[bo>>2]=29;b5=Z;b6=ar;b7=da;b8=c9;b9=am;ca=c8;cb=ap;cc=c7;cd=Y;ce=X;break}}else\
+ if((V|0)==14){db=as;dc=al;dd=an;de=aq;K=375}else if((V|0)==15){df=as;dg=al;dh=\
+an;di=aq;K=376}else if((V|0)==17){D=c[aH>>2]|0;if(D>>>0<(c[aF>>2]|0)>>>0){cv=aq\
+;cw=an;cx=al;cy=as;cz=D;K=386}else{dj=aq;dk=an;dl=al;dm=as;dn=D;K=390}}else if(\
+(V|0)==19){dp=Z;dq=as;dr=al;ds=an;dt=aq;K=432}else if((V|0)==20){du=Z;dv=as;dw=\
+al;dx=an;dy=aq;K=433}else if((V|0)==22){dz=Z;dA=as;dB=al;dC=an;dD=aq;K=522}else\
+ if((V|0)==24){dE=Z;dF=as;dG=al;dH=an;dI=aq;K=540}else if((V|0)==25){if((am|0)=\
+=0){bX=Z;bY=ar;bZ=as;b_=al;b$=0;b0=X;break L336}a[ap]=c[aU>>2]&255;c[bo>>2]=20;\
+b5=Z;b6=ar;b7=as;b8=al;b9=am-1|0;ca=an;cb=ap+1|0;cc=aq;cd=Y;ce=X}else if((V|0)=\
+=26){D=c[t>>2]|0;do{if((D|0)==0){dJ=ar;dK=as;dL=al;dM=an;dN=aq;dO=X}else{if(as>\
+>>0<32){C=aq;P=an;W=al;B=as;while(1){if((P|0)==0){bX=Z;bY=ar;bZ=B;b_=W;b$=am;b0\
+=X;break L336}x=P-1|0;A=C+1|0;J=(d[C]<<B)+W|0;z=B+8|0;if(z>>>0<32){C=A;P=x;W=J;\
+B=z}else{dP=A;dQ=x;dR=J;dS=z;break}}}else{dP=aq;dQ=an;dR=al;dS=as}B=ar-am|0;W=X\
++B|0;c[u>>2]=(c[u>>2]|0)+B;P=c[aW>>2]|0;if((ar|0)==(am|0)){dT=P}else{C=c[a_>>2]\
+|0;k=ap+(-B|0)|0;if((P|0)==0){dU=bh(C,k,B)|0}else{dU=bi(C,k,B)|0}c[a_>>2]=dU;dT\
+=P}if((dT|0)==0){dV=aE(dR|0)|0}else{dV=dR}if((dV|0)==(c[a_>>2]|0)){dJ=am;dK=0;d\
+L=0;dM=dQ;dN=dP;dO=W;break}c[bo>>2]=29;b5=Z;b6=am;b7=dS;b8=dR;b9=am;ca=dQ;cb=ap\
+;cc=dP;cd=Y;ce=W;break L338}}while(0);c[bo>>2]=27;bt=dJ;bu=dK;bv=dL;bw=dM;bx=dN\
+;by=dO;bz=D;K=571}else if((V|0)==29){K=579;break L336}else if((V|0)==28){bX=1;b\
+Y=ar;bZ=as;b_=al;b$=am;b0=X;break L336}else{break L333}}while(0);if((K|0)==281)\
+{while(1){K=0;if((ch|0)==0){bX=Z;bY=ar;bZ=cj;b_=ci;b$=am;b0=X;break L336}aa=ch-\
+1|0;N=cg+1|0;n=(d[cg]<<cj)+ci|0;p=cj+8|0;if(p>>>0<32){cg=N;ch=aa;ci=n;cj=p;K=28\
+1}else{cF=N;cG=aa;cH=n;K=283;break}}}else if((K|0)==355){K=0;if((c[be>>2]|0)==0\
+){K=356;break}c[a_>>2]=1;c[bo>>2]=11;c3=cn;c4=co;c5=cp;c6=cq;K=358}else if((K|0\
+)==375){K=0;c[bo>>2]=15;df=db;dg=dc;dh=dd;di=de;K=376}else if((K|0)==386){while\
+(1){K=0;if(cy>>>0<3){n=cv;aa=cw;N=cx;p=cy;while(1){if((aa|0)==0){bX=Z;bY=ar;bZ=\
+p;b_=N;b$=am;b0=X;break L336}W=aa-1|0;P=n+1|0;B=(d[n]<<p)+N|0;k=p+8|0;if(k>>>0<\
+3){n=P;aa=W;N=B;p=k}else{dW=P;dX=W;dY=B;dZ=k;break}}}else{dW=cv;dX=cw;dY=cx;dZ=\
+cy}c[aH>>2]=cz+1;b[aA+(e[1640+(cz<<1)>>1]<<1)>>1]=dY&7;p=dY>>>3;N=dZ-3|0;aa=c[a\
+H>>2]|0;if(aa>>>0<(c[aF>>2]|0)>>>0){cv=dW;cw=dX;cx=p;cy=N;cz=aa;K=386}else{dj=d\
+W;dk=dX;dl=p;dm=N;dn=aa;K=390;break}}}else if((K|0)==571){K=0;if((bz|0)==0){d_=\
+bu;d$=bv;K=578;break}if((c[aW>>2]|0)==0){d_=bu;d$=bv;K=578;break}if(bu>>>0<32){\
+aa=bx;N=bw;p=bv;n=bu;while(1){if((N|0)==0){bX=Z;bY=bt;bZ=n;b_=p;b$=am;b0=by;bre\
+ak L336}D=N-1|0;k=aa+1|0;B=(d[aa]<<n)+p|0;W=n+8|0;if(W>>>0<32){aa=k;N=D;p=B;n=W\
+}else{d0=k;d1=D;d2=B;d3=W;break}}}else{d0=bx;d1=bw;d2=bv;d3=bu}if((d2|0)==(c[u>\
+>2]|0)){d_=0;d$=0;K=578;break}c[bo>>2]=29;b5=Z;b6=bt;b7=d3;b8=d2;b9=am;ca=d1;cb\
+=ap;cc=d0;cd=Y;ce=by}do{if((K|0)==283){K=0;n=c[aY>>2]|0;if((n|0)!=0){c[n+4>>2]=\
+cH}if((c[aW>>2]&512|0)!=0){a[aZ]=cH&255;a[aX]=cH>>>8&255;a[_]=cH>>>16&255;a[at]\
+=cH>>>24&255;c[a_>>2]=bi(c[a_>>2]|0,aZ,4)|0}c[bo>>2]=3;cI=cF;cJ=cG;cK=0;cL=0;K=\
+289}else if((K|0)==358){K=0;if((c[bl>>2]|0)!=0){n=c3&7;c[bo>>2]=26;b5=Z;b6=ar;b\
+7=c3-n|0;b8=c4>>>(n>>>0);b9=am;ca=c5;cb=ap;cc=c6;cd=Y;ce=X;break}if(c3>>>0<3){n\
+=c6;p=c5;N=c4;aa=c3;while(1){if((p|0)==0){bX=Z;bY=ar;bZ=aa;b_=N;b$=am;b0=X;brea\
+k L336}W=p-1|0;B=n+1|0;D=(d[n]<<aa)+N|0;k=aa+8|0;if(k>>>0<3){n=B;p=W;N=D;aa=k}e\
+lse{d4=B;d5=W;d6=D;d7=k;break}}}else{d4=c6;d5=c5;d6=c4;d7=c3}c[bl>>2]=d6&1;aa=d\
+6>>>1&3;if((aa|0)==0){c[bo>>2]=13}else if((aa|0)==1){c[a4>>2]=1680;c[aO>>2]=9;c\
+[a5>>2]=3728;c[aL>>2]=5;c[bo>>2]=19}else if((aa|0)==2){c[bo>>2]=16}else if((aa|\
+0)==3){c[bo>>2]=29}b5=Z;b6=ar;b7=d7-3|0;b8=d6>>>3;b9=am;ca=d5;cb=ap;cc=d4;cd=Y;\
+ce=X}else if((K|0)==376){K=0;aa=c[aU>>2]|0;if((aa|0)==0){c[bo>>2]=11;b5=Z;b6=ar\
+;b7=df;b8=dg;b9=am;ca=dh;cb=ap;cc=di;cd=Y;ce=X;break}N=aa>>>0>dh>>>0?dh:aa;aa=N\
+>>>0>am>>>0?am:N;if((aa|0)==0){bX=Z;bY=ar;bZ=df;b_=dg;b$=am;b0=X;break L336}bn(\
+ap|0,di|0,aa)|0;c[aU>>2]=(c[aU>>2]|0)-aa;b5=Z;b6=ar;b7=df;b8=dg;b9=am-aa|0;ca=d\
+h-aa|0;cb=ap+aa|0;cc=di+aa|0;cd=Y;ce=X}else if((K|0)==390){K=0;if(dn>>>0<19){aa\
+=dn;do{c[aH>>2]=aa+1;b[aA+(e[1640+(aa<<1)>>1]<<1)>>1]=0;aa=c[aH>>2]|0;}while(aa\
+>>>0<19)}c[aw>>2]=m;c[a4>>2]=m;c[aO>>2]=7;aa=bj(0,ax,19,au,aO,ay)|0;if((aa|0)==\
+0){c[aH>>2]=0;c[bo>>2]=18;bR=0;bS=dm;bT=dl;bU=dk;bV=dj;bW=0;K=395;break}else{c[\
+bo>>2]=29;b5=aa;b6=ar;b7=dm;b8=dl;b9=am;ca=dk;cb=ap;cc=dj;cd=Y;ce=X;break}}}whi\
+le(0);L497:do{if((K|0)==289){while(1){K=0;if((cJ|0)==0){bX=Z;bY=ar;bZ=cL;b_=cK;\
+b$=am;b0=X;break L336}aa=cJ-1|0;N=cI+1|0;p=(d[cI]<<cL)+cK|0;n=cL+8|0;if(n>>>0<1\
+6){cI=N;cJ=aa;cK=p;cL=n;K=289}else{cM=N;cN=aa;cO=p;K=291;break}}}else if((K|0)=\
+=395){K=0;p=c[av>>2]|0;aa=c[aD>>2]|0;do{if(bW>>>0<(aa+p|0)>>>0){N=bV;n=bU;k=bT;\
+D=bS;W=bW;B=p;P=aa;L503:while(1){C=(1<<c[aO>>2])-1|0;z=C&k;J=c[l>>2]|0;x=d[J+(z\
+<<2)+1|0]|0;if(x>>>0>D>>>0){A=N;H=n;E=k;y=D;while(1){if((H|0)==0){bX=bR;bY=ar;b\
+Z=y;b_=E;b$=am;b0=X;break L336}F=H-1|0;I=A+1|0;S=(d[A]<<y)+E|0;ak=y+8|0;M=C&S;G\
+=d[J+(M<<2)+1|0]|0;if(G>>>0>ak>>>0){A=I;H=F;E=S;y=ak}else{d8=I;d9=F;ea=S;eb=ak;\
+ec=M;ed=G;break}}}else{d8=N;d9=n;ea=k;eb=D;ec=z;ed=x}y=b[J+(ec<<2)+2>>1]|0;L510\
+:do{if((y&65535)<16){if(eb>>>0<ed>>>0){E=d8;H=d9;A=ea;C=eb;while(1){if((H|0)==0\
+){bX=bR;bY=ar;bZ=C;b_=A;b$=am;b0=X;break L336}G=H-1|0;M=E+1|0;ak=(d[E]<<C)+A|0;\
+S=C+8|0;if(S>>>0<ed>>>0){E=M;H=G;A=ak;C=S}else{ee=M;ef=G;eg=ak;eh=S;break}}}els\
+e{ee=d8;ef=d9;eg=ea;eh=eb}c[aH>>2]=W+1;b[aA+(W<<1)>>1]=y;ei=eh-ed|0;ej=eg>>>(ed\
+>>>0);ek=ef;el=ee}else{if((y<<16>>16|0)==16){C=ed+2|0;if(eb>>>0<C>>>0){A=d8;H=d\
+9;E=ea;ag=eb;while(1){if((H|0)==0){bX=bR;bY=ar;bZ=ag;b_=E;b$=am;b0=X;break L336\
+}aP=H-1|0;S=A+1|0;ak=(d[A]<<ag)+E|0;G=ag+8|0;if(G>>>0<C>>>0){A=S;H=aP;E=ak;ag=G\
+}else{em=S;en=aP;eo=ak;ep=G;break}}}else{em=d8;en=d9;eo=ea;ep=eb}eq=eo>>>(ed>>>\
+0);er=ep-ed|0;if((W|0)==0){K=412;break L503}es=b[aA+(W-1<<1)>>1]|0;et=(eq&3)+3|\
+0;eu=er-2|0;ev=eq>>>2;ew=en;ex=em}else if((y<<16>>16|0)==17){ag=ed+3|0;if(eb>>>\
+0<ag>>>0){E=d8;H=d9;A=ea;C=eb;while(1){if((H|0)==0){bX=bR;bY=ar;bZ=C;b_=A;b$=am\
+;b0=X;break L336}G=H-1|0;ak=E+1|0;aP=(d[E]<<C)+A|0;S=C+8|0;if(S>>>0<ag>>>0){E=a\
+k;H=G;A=aP;C=S}else{ey=ak;ez=G;eA=aP;eB=S;break}}}else{ey=d8;ez=d9;eA=ea;eB=eb}\
+C=eA>>>(ed>>>0);es=0;et=(C&7)+3|0;eu=-3-ed+eB|0;ev=C>>>3;ew=ez;ex=ey}else{C=ed+\
+7|0;if(eb>>>0<C>>>0){A=d8;H=d9;E=ea;ag=eb;while(1){if((H|0)==0){bX=bR;bY=ar;bZ=\
+ag;b_=E;b$=am;b0=X;break L336}S=H-1|0;aP=A+1|0;G=(d[A]<<ag)+E|0;ak=ag+8|0;if(ak\
+>>>0<C>>>0){A=aP;H=S;E=G;ag=ak}else{eC=aP;eD=S;eE=G;eF=ak;break}}}else{eC=d8;eD\
+=d9;eE=ea;eF=eb}ag=eE>>>(ed>>>0);es=0;et=(ag&127)+11|0;eu=-7-ed+eF|0;ev=ag>>>7;\
+ew=eD;ex=eC}if((W+et|0)>>>0>(P+B|0)>>>0){K=421;break L503}else{eG=et;eH=W}while\
+(1){ag=eG-1|0;c[aH>>2]=eH+1;b[aA+(eH<<1)>>1]=es;if((ag|0)==0){ei=eu;ej=ev;ek=ew\
+;el=ex;break L510}eG=ag;eH=c[aH>>2]|0}}}while(0);y=c[aH>>2]|0;eI=c[av>>2]|0;J=c\
+[aD>>2]|0;if(y>>>0<(J+eI|0)>>>0){N=el;n=ek;k=ej;D=ei;W=y;B=eI;P=J}else{K=424;br\
+eak}}if((K|0)==412){K=0;c[bo>>2]=29;b5=bR;b6=ar;b7=er;b8=eq;b9=am;ca=en;cb=ap;c\
+c=em;cd=Y;ce=X;break L497}else if((K|0)==421){K=0;c[bo>>2]=29;b5=bR;b6=ar;b7=eu\
+;b8=ev;b9=am;ca=ew;cb=ap;cc=ex;cd=Y;ce=X;break L497}else if((K|0)==424){K=0;if(\
+(c[bo>>2]|0)==29){b5=bR;b6=ar;b7=ei;b8=ej;b9=am;ca=ek;cb=ap;cc=el;cd=Y;ce=X;bre\
+ak L497}else{eJ=eI;eK=ei;eL=ej;eM=ek;eN=el;break}}}else{eJ=p;eK=bS;eL=bT;eM=bU;\
+eN=bV}}while(0);if((b[aI>>1]|0)==0){c[bo>>2]=29;b5=bR;b6=ar;b7=eK;b8=eL;b9=am;c\
+a=eM;cb=ap;cc=eN;cd=Y;ce=X;break}c[aw>>2]=m;c[a4>>2]=m;c[aO>>2]=9;p=bj(1,ax,eJ,\
+au,aO,ay)|0;if((p|0)!=0){c[bo>>2]=29;b5=p;b6=ar;b7=eK;b8=eL;b9=am;ca=eM;cb=ap;c\
+c=eN;cd=Y;ce=X;break}c[a5>>2]=c[au>>2];c[aL>>2]=6;p=bj(2,ax+(c[av>>2]<<1)|0,c[a\
+D>>2]|0,au,aL,ay)|0;if((p|0)==0){c[bo>>2]=19;dp=0;dq=eK;dr=eL;ds=eM;dt=eN;K=432\
+;break}else{c[bo>>2]=29;b5=p;b6=ar;b7=eK;b8=eL;b9=am;ca=eM;cb=ap;cc=eN;cd=Y;ce=\
+X;break}}}while(0);if((K|0)==291){K=0;p=c[aY>>2]|0;if((p|0)!=0){c[p+8>>2]=cO&25\
+5;c[(c[aY>>2]|0)+12>>2]=cO>>>8}if((c[aW>>2]&512|0)!=0){a[aZ]=cO&255;a[aX]=cO>>>\
+8&255;c[a_>>2]=bi(c[a_>>2]|0,aZ,2)|0}c[bo>>2]=4;cP=0;cQ=0;cR=cN;cS=cM;K=296}els\
+e if((K|0)==432){K=0;c[bo>>2]=20;du=dp;dv=dq;dw=dr;dx=ds;dy=dt;K=433}do{if((K|0\
+)==296){K=0;p=c[aW>>2]|0;do{if((p&1024|0)==0){aa=c[aY>>2]|0;if((aa|0)==0){eO=cP\
+;eP=cQ;eQ=cR;eR=cS;break}c[aa+16>>2]=0;eO=cP;eP=cQ;eQ=cR;eR=cS}else{if(cP>>>0<1\
+6){aa=cS;P=cR;B=cQ;W=cP;while(1){if((P|0)==0){bX=Z;bY=ar;bZ=W;b_=B;b$=am;b0=X;b\
+reak L336}D=P-1|0;k=aa+1|0;n=(d[aa]<<W)+B|0;N=W+8|0;if(N>>>0<16){aa=k;P=D;B=n;W\
+=N}else{eS=k;eT=D;eU=n;break}}}else{eS=cS;eT=cR;eU=cQ}c[aU>>2]=eU;W=c[aY>>2]|0;\
+if((W|0)==0){eV=p}else{c[W+20>>2]=eU;eV=c[aW>>2]|0}if((eV&512|0)==0){eO=0;eP=0;\
+eQ=eT;eR=eS;break}a[aZ]=eU&255;a[aX]=eU>>>8&255;c[a_>>2]=bi(c[a_>>2]|0,aZ,2)|0;\
+eO=0;eP=0;eQ=eT;eR=eS}}while(0);c[bo>>2]=5;cT=eO;cU=eP;cV=eQ;cW=eR;K=307}else i\
+f((K|0)==433){K=0;if(!(dx>>>0>5&am>>>0>257)){c[a2>>2]=0;p=(1<<c[aO>>2])-1|0;W=p\
+&dw;B=c[l>>2]|0;P=a[B+(W<<2)+1|0]|0;aa=P&255;if(aa>>>0>dv>>>0){n=dy;D=dx;k=dw;N\
+=dv;while(1){if((D|0)==0){bX=du;bY=ar;bZ=N;b_=k;b$=am;b0=X;break L336}J=D-1|0;y\
+=n+1|0;x=(d[n]<<N)+k|0;z=N+8|0;ag=p&x;E=a[B+(ag<<2)+1|0]|0;H=E&255;if(H>>>0>z>>\
+>0){n=y;D=J;k=x;N=z}else{eW=y;eX=J;eY=x;eZ=z;e_=E;e$=ag;e0=H;break}}}else{eW=dy\
+;eX=dx;eY=dw;eZ=dv;e_=P;e$=W;e0=aa}N=a[B+(e$<<2)|0]|0;k=b[B+(e$<<2)+2>>1]|0;D=N\
+&255;do{if(N<<24>>24==0){e1=0;e2=e_;e3=k;e4=eZ;e5=eY;e6=eX;e7=eW;e8=0}else{if((\
+D&240|0)!=0){e1=N;e2=e_;e3=k;e4=eZ;e5=eY;e6=eX;e7=eW;e8=0;break}n=k&65535;p=(1<\
+<e0+D)-1|0;H=((eY&p)>>>(e0>>>0))+n|0;ag=a[B+(H<<2)+1|0]|0;if(((ag&255)+e0|0)>>>\
+0>eZ>>>0){E=eW;z=eX;x=eY;J=eZ;while(1){if((z|0)==0){bX=du;bY=ar;bZ=J;b_=x;b$=am\
+;b0=X;break L336}y=z-1|0;A=E+1|0;C=(d[E]<<J)+x|0;ak=J+8|0;G=((C&p)>>>(e0>>>0))+\
+n|0;S=a[B+(G<<2)+1|0]|0;if(((S&255)+e0|0)>>>0>ak>>>0){E=A;z=y;x=C;J=ak}else{e9=\
+A;fa=y;fb=C;fc=ak;fd=G;fe=S;break}}}else{e9=eW;fa=eX;fb=eY;fc=eZ;fd=H;fe=ag}J=b\
+[B+(fd<<2)+2>>1]|0;x=a[B+(fd<<2)|0]|0;c[a2>>2]=e0;e1=x;e2=fe;e3=J;e4=fc-e0|0;e5\
+=fb>>>(e0>>>0);e6=fa;e7=e9;e8=e0}}while(0);B=e2&255;D=e5>>>(B>>>0);k=e4-B|0;c[a\
+2>>2]=e8+B;c[aU>>2]=e3&65535;B=e1&255;if(e1<<24>>24==0){c[bo>>2]=25;b5=du;b6=ar\
+;b7=k;b8=D;b9=am;ca=e6;cb=ap;cc=e7;cd=Y;ce=X;break}if((B&32|0)!=0){c[a2>>2]=-1;\
+c[bo>>2]=11;b5=du;b6=ar;b7=k;b8=D;b9=am;ca=e6;cb=ap;cc=e7;cd=Y;ce=X;break}if((B\
+&64|0)==0){N=B&15;c[aN>>2]=N;c[bo>>2]=21;bF=du;bG=k;bH=D;bI=e6;bJ=e7;bK=N;K=515\
+;break}else{c[bo>>2]=29;b5=du;b6=ar;b7=k;b8=D;b9=am;ca=e6;cb=ap;cc=e7;cd=Y;ce=X\
+;break}}c[a6>>2]=dw;c[o>>2]=dv;D=dy+(dx-6)|0;k=ap+(am-258)|0;N=c[bb>>2]|0;B=c[a\
+8>>2]|0;aa=c[bq>>2]|0;W=c[l>>2]|0;P=c[$>>2]|0;J=(1<<c[aO>>2])-1|0;x=(1<<c[aL>>2\
+])-1|0;z=ap+(am+(ar^-1))|0;E=aa-1|0;n=(B|0)==0;p=(c[bc>>2]|0)-1|0;S=p+B|0;G=B-1\
+|0;ak=z-1|0;C=z-B|0;y=dy-1|0;A=ap-1|0;aP=dw;M=dv;L609:while(1){if(M>>>0<15){F=y\
++2|0;ff=F;fg=(d[y+1|0]<<M)+aP+(d[F]<<M+8)|0;fh=M+16|0}else{ff=y;fg=aP;fh=M}F=fg\
+&J;I=a[W+(F<<2)|0]|0;U=b[W+(F<<2)+2>>1]|0;Q=d[W+(F<<2)+1|0]|0;F=fg>>>(Q>>>0);O=\
+fh-Q|0;do{if(I<<24>>24==0){fi=U&255;fj=F;fk=O;K=439}else{Q=U;fl=F;fm=O;ab=I;whi\
+le(1){fn=ab&255;if((fn&16|0)!=0){break}if((fn&64|0)!=0){K=487;break L609}af=(fl\
+&(1<<fn)-1)+(Q&65535)|0;ac=a[W+(af<<2)|0]|0;fo=b[W+(af<<2)+2>>1]|0;T=d[W+(af<<2\
+)+1|0]|0;fp=fl>>>(T>>>0);fq=fm-T|0;if(ac<<24>>24==0){K=438;break}else{Q=fo;fl=f\
+p;fm=fq;ab=ac}}if((K|0)==438){K=0;fi=fo&255;fj=fp;fk=fq;K=439;break}ab=Q&65535;\
+ac=fn&15;if((ac|0)==0){fr=ab;fs=ff;ft=fl;fu=fm}else{if(fm>>>0<ac>>>0){T=ff+1|0;\
+fv=T;fw=(d[T]<<fm)+fl|0;fx=fm+8|0}else{fv=ff;fw=fl;fx=fm}fr=(fw&(1<<ac)-1)+ab|0\
+;fs=fv;ft=fw>>>(ac>>>0);fu=fx-ac|0}if(fu>>>0<15){ac=fs+2|0;fy=ac;fz=(d[fs+1|0]<\
+<fu)+ft+(d[ac]<<fu+8)|0;fA=fu+16|0}else{fy=fs;fz=ft;fA=fu}ac=fz&x;ab=b[P+(ac<<2\
+)+2>>1]|0;T=d[P+(ac<<2)+1|0]|0;af=fz>>>(T>>>0);ae=fA-T|0;T=d[P+(ac<<2)|0]|0;if(\
+(T&16|0)==0){ac=ab;fB=af;fC=ae;ad=T;while(1){if((ad&64|0)!=0){K=484;break L609}\
+aS=(fB&(1<<ad)-1)+(ac&65535)|0;L=b[P+(aS<<2)+2>>1]|0;R=d[P+(aS<<2)+1|0]|0;aj=fB\
+>>>(R>>>0);ah=fC-R|0;R=d[P+(aS<<2)|0]|0;if((R&16|0)==0){ac=L;fB=aj;fC=ah;ad=R}e\
+lse{fD=L;fE=aj;fF=ah;fG=R;break}}}else{fD=ab;fE=af;fF=ae;fG=T}ad=fD&65535;ac=fG\
+&15;do{if(fF>>>0<ac>>>0){Q=fy+1|0;R=(d[Q]<<fF)+fE|0;ah=fF+8|0;if(ah>>>0>=ac>>>0\
+){fH=Q;fI=R;fJ=ah;break}Q=fy+2|0;fH=Q;fI=(d[Q]<<ah)+R|0;fJ=fF+16|0}else{fH=fy;f\
+I=fE;fJ=fF}}while(0);T=(fI&(1<<ac)-1)+ad|0;fK=fI>>>(ac>>>0);fL=fJ-ac|0;ae=A;af=\
+ae-z|0;if(T>>>0<=af>>>0){ab=A+(-T|0)|0;R=fr;ah=A;while(1){a[ah+1|0]=a[ab+1|0]|0\
+;a[ah+2|0]=a[ab+2|0]|0;Q=ab+3|0;fM=ah+3|0;a[fM]=a[Q]|0;fN=R-3|0;if(fN>>>0>2){ab\
+=Q;R=fN;ah=fM}else{break}}if((fN|0)==0){fO=fH;fP=fM;fQ=fK;fR=fL;break}R=ah+4|0;\
+a[R]=a[ab+4|0]|0;if(fN>>>0<=1){fO=fH;fP=R;fQ=fK;fR=fL;break}R=ah+5|0;a[R]=a[ab+\
+5|0]|0;fO=fH;fP=R;fQ=fK;fR=fL;break}R=T-af|0;if(R>>>0>N>>>0){if((c[aV>>2]|0)!=0\
+){K=454;break L609}}do{if(n){ac=aa+(p-R)|0;if(R>>>0>=fr>>>0){fS=ac;fT=fr;fU=A;b\
+reak}ad=fr-R|0;Q=T-ae|0;aj=ac;ac=R;L=A;do{aj=aj+1|0;L=L+1|0;a[L]=a[aj]|0;ac=ac-\
+1|0;}while((ac|0)!=0);fS=A+(ak+Q+(1-T))|0;fT=ad;fU=A+(z+Q)|0}else{if(B>>>0>=R>>\
+>0){ac=aa+(G-R)|0;if(R>>>0>=fr>>>0){fS=ac;fT=fr;fU=A;break}aj=fr-R|0;L=T-ae|0;a\
+S=ac;ac=R;a0=A;do{aS=aS+1|0;a0=a0+1|0;a[a0]=a[aS]|0;ac=ac-1|0;}while((ac|0)!=0)\
+;fS=A+(ak+L+(1-T))|0;fT=aj;fU=A+(z+L)|0;break}ac=aa+(S-R)|0;aS=R-B|0;if(aS>>>0>\
+=fr>>>0){fS=ac;fT=fr;fU=A;break}a0=fr-aS|0;Q=T-ae|0;ad=ac;ac=aS;aS=A;do{ad=ad+1\
+|0;aS=aS+1|0;a[aS]=a[ad]|0;ac=ac-1|0;}while((ac|0)!=0);ac=A+(C+Q)|0;if(B>>>0>=a\
+0>>>0){fS=E;fT=a0;fU=ac;break}ad=a0-B|0;aS=E;L=B;aj=ac;do{aS=aS+1|0;aj=aj+1|0;a\
+[aj]=a[aS]|0;L=L-1|0;}while((L|0)!=0);fS=A+(ak+Q+(1-T))|0;fT=ad;fU=A+(z+Q)|0}}w\
+hile(0);if(fT>>>0>2){T=fU;ae=fT;R=fS;while(1){a[T+1|0]=a[R+1|0]|0;a[T+2|0]=a[R+\
+2|0]|0;af=R+3|0;ab=T+3|0;a[ab]=a[af]|0;ah=ae-3|0;if(ah>>>0>2){T=ab;ae=ah;R=af}e\
+lse{fV=ab;fW=ah;fX=af;break}}}else{fV=fU;fW=fT;fX=fS}if((fW|0)==0){fO=fH;fP=fV;\
+fQ=fK;fR=fL;break}R=fV+1|0;a[R]=a[fX+1|0]|0;if(fW>>>0<=1){fO=fH;fP=R;fQ=fK;fR=f\
+L;break}R=fV+2|0;a[R]=a[fX+2|0]|0;fO=fH;fP=R;fQ=fK;fR=fL}}while(0);if((K|0)==43\
+9){K=0;I=A+1|0;a[I]=fi;fO=ff;fP=I;fQ=fj;fR=fk}if(fO>>>0<D>>>0&fP>>>0<k>>>0){y=f\
+O;A=fP;aP=fQ;M=fR}else{fY=fO;fZ=fP;f_=fQ;f$=fR;break}}do{if((K|0)==454){K=0;c[b\
+o>>2]=29;fY=fH;fZ=A;f_=fK;f$=fL}else if((K|0)==484){K=0;c[bo>>2]=29;fY=fy;fZ=A;\
+f_=fB;f$=fC}else if((K|0)==487){K=0;if((fn&32|0)==0){c[bo>>2]=29;fY=ff;fZ=A;f_=\
+fl;f$=fm;break}else{c[bo>>2]=11;fY=ff;fZ=A;f_=fl;f$=fm;break}}}while(0);A=f$>>>\
+3;M=fY+(-A|0)|0;aP=f$-(A<<3)|0;y=(1<<aP)-1&f_;z=fY+(1-A)|0;A=fZ+1|0;if(M>>>0<D>\
+>>0){f0=D-M|0}else{f0=D-M|0}M=f0+5|0;if(fZ>>>0<k>>>0){f1=k-fZ|0}else{f1=k-fZ|0}\
+ak=f1+257|0;c[a6>>2]=y;c[o>>2]=aP;if((c[bo>>2]|0)!=11){b5=du;b6=ar;b7=aP;b8=y;b\
+9=ak;ca=M;cb=A;cc=z;cd=M;ce=X;break}c[a2>>2]=-1;b5=du;b6=ar;b7=aP;b8=y;b9=ak;ca\
+=M;cb=A;cc=z;cd=M;ce=X}}while(0);if((K|0)==307){K=0;M=c[aW>>2]|0;if((M&1024|0)=\
+=0){f2=cV;f3=cW;f4=M}else{z=c[aU>>2]|0;A=z>>>0>cV>>>0?cV:z;if((A|0)==0){f5=cV;f\
+6=cW;f7=z;f8=M}else{ak=c[aY>>2]|0;do{if((ak|0)==0){f9=M}else{y=c[ak+16>>2]|0;if\
+((y|0)==0){f9=M;break}aP=(c[ak+20>>2]|0)-z|0;B=y+aP|0;y=c[ak+24>>2]|0;E=(aP+A|0\
+)>>>0>y>>>0?y-aP|0:A;bn(B|0,cW|0,E)|0;f9=c[aW>>2]|0}}while(0);if((f9&512|0)!=0)\
+{c[a_>>2]=bi(c[a_>>2]|0,cW,A)|0}ak=(c[aU>>2]|0)-A|0;c[aU>>2]=ak;f5=cV-A|0;f6=cW\
++A|0;f7=ak;f8=f9}if((f7|0)==0){f2=f5;f3=f6;f4=f8}else{bX=Z;bY=ar;bZ=cT;b_=cU;b$\
+=am;b0=X;break}}c[aU>>2]=0;c[bo>>2]=6;bA=cT;bB=cU;bC=f2;bD=f3;bE=f4;K=317}else \
+if((K|0)==515){K=0;if((bK|0)==0){ga=bG;gb=bH;gc=bI;gd=bJ;ge=c[aU>>2]|0}else{if(\
+bG>>>0<bK>>>0){ak=bJ;z=bI;M=bH;E=bG;while(1){if((z|0)==0){bX=bF;bY=ar;bZ=E;b_=M\
+;b$=am;b0=X;break L336}B=z-1|0;aP=ak+1|0;y=(d[ak]<<E)+M|0;C=E+8|0;if(C>>>0<bK>>\
+>0){ak=aP;z=B;M=y;E=C}else{gf=aP;gg=B;gh=y;gi=C;break}}}else{gf=bJ;gg=bI;gh=bH;\
+gi=bG}E=(c[aU>>2]|0)+((1<<bK)-1&gh)|0;c[aU>>2]=E;c[a2>>2]=(c[a2>>2]|0)+bK;ga=gi\
+-bK|0;gb=gh>>>(bK>>>0);gc=gg;gd=gf;ge=E}c[aC>>2]=ge;c[bo>>2]=22;dz=bF;dA=ga;dB=\
+gb;dC=gc;dD=gd;K=522}do{if((K|0)==317){K=0;do{if((bE&2048|0)==0){E=c[aY>>2]|0;i\
+f((E|0)==0){gj=bC;gk=bD;break}c[E+28>>2]=0;gj=bC;gk=bD}else{if((bC|0)==0){bX=Z;\
+bY=ar;bZ=bA;b_=bB;b$=am;b0=X;break L336}else{gl=0}while(1){gm=gl+1|0;E=a[bD+gl|\
+0]|0;M=c[aY>>2]|0;do{if((M|0)!=0){z=M+28|0;if((c[z>>2]|0)==0){break}ak=c[aU>>2]\
+|0;if(ak>>>0>=(c[M+32>>2]|0)>>>0){break}c[aU>>2]=ak+1;a[(c[z>>2]|0)+ak|0]=E}}wh\
+ile(0);gn=E<<24>>24!=0;if(gn&gm>>>0<bC>>>0){gl=gm}else{break}}if((c[aW>>2]&512|\
+0)!=0){c[a_>>2]=bi(c[a_>>2]|0,bD,gm)|0}if(gn){bX=Z;bY=ar;bZ=bA;b_=bB;b$=am;b0=X\
+;break L336}else{gj=bC-gm|0;gk=bD+gm|0}}}while(0);c[aU>>2]=0;c[bo>>2]=7;cX=bA;c\
+Y=bB;cZ=gj;c_=gk;K=330}else if((K|0)==522){K=0;k=(1<<c[aL>>2])-1|0;D=k&dB;M=c[$\
+>>2]|0;ak=a[M+(D<<2)+1|0]|0;z=ak&255;if(z>>>0>dA>>>0){A=dD;C=dC;y=dB;B=dA;while\
+(1){if((C|0)==0){bX=dz;bY=ar;bZ=B;b_=y;b$=am;b0=X;break L336}aP=C-1|0;S=A+1|0;a\
+a=(d[A]<<B)+y|0;G=B+8|0;p=k&aa;n=a[M+(p<<2)+1|0]|0;N=n&255;if(N>>>0>G>>>0){A=S;\
+C=aP;y=aa;B=G}else{go=S;gp=aP;gq=aa;gr=G;gs=n;gt=p;gu=N;break}}}else{go=dD;gp=d\
+C;gq=dB;gr=dA;gs=ak;gt=D;gu=z}B=a[M+(gt<<2)|0]|0;y=b[M+(gt<<2)+2>>1]|0;C=B&255;\
+if((C&240|0)==0){A=y&65535;k=(1<<gu+C)-1|0;C=((gq&k)>>>(gu>>>0))+A|0;N=a[M+(C<<\
+2)+1|0]|0;if(((N&255)+gu|0)>>>0>gr>>>0){p=go;n=gp;G=gq;aa=gr;while(1){if((n|0)=\
+=0){bX=dz;bY=ar;bZ=aa;b_=G;b$=am;b0=X;break L336}aP=n-1|0;S=p+1|0;P=(d[p]<<aa)+\
+G|0;x=aa+8|0;W=((P&k)>>>(gu>>>0))+A|0;J=a[M+(W<<2)+1|0]|0;if(((J&255)+gu|0)>>>0\
+>x>>>0){p=S;n=aP;G=P;aa=x}else{gv=S;gw=aP;gx=P;gy=x;gz=W;gA=J;break}}}else{gv=g\
+o;gw=gp;gx=gq;gy=gr;gz=C;gA=N}aa=b[M+(gz<<2)+2>>1]|0;G=a[M+(gz<<2)|0]|0;n=(c[a2\
+>>2]|0)+gu|0;c[a2>>2]=n;gB=G;gC=gA;gD=aa;gE=gy-gu|0;gF=gx>>>(gu>>>0);gG=gw;gH=g\
+v;gI=n}else{gB=B;gC=gs;gD=y;gE=gr;gF=gq;gG=gp;gH=go;gI=c[a2>>2]|0}n=gC&255;aa=g\
+F>>>(n>>>0);G=gE-n|0;c[a2>>2]=gI+n;n=gB&255;if((n&64|0)==0){c[aB>>2]=gD&65535;p\
+=n&15;c[aN>>2]=p;c[bo>>2]=23;bL=dz;bM=G;bN=aa;bO=gG;bP=gH;bQ=p;K=534;break}else\
+{c[bo>>2]=29;b5=dz;b6=ar;b7=G;b8=aa;b9=am;ca=gG;cb=ap;cc=gH;cd=Y;ce=X;break}}}w\
+hile(0);if((K|0)==330){K=0;do{if((c[aW>>2]&4096|0)==0){aa=c[aY>>2]|0;if((aa|0)=\
+=0){gJ=cZ;gK=c_;break}c[aa+36>>2]=0;gJ=cZ;gK=c_}else{if((cZ|0)==0){bX=Z;bY=ar;b\
+Z=cX;b_=cY;b$=am;b0=X;break L336}else{gL=0}while(1){gM=gL+1|0;aa=a[c_+gL|0]|0;G\
+=c[aY>>2]|0;do{if((G|0)!=0){p=G+36|0;if((c[p>>2]|0)==0){break}n=c[aU>>2]|0;if(n\
+>>>0>=(c[G+40>>2]|0)>>>0){break}c[aU>>2]=n+1;a[(c[p>>2]|0)+n|0]=aa}}while(0);gN\
+=aa<<24>>24!=0;if(gN&gM>>>0<cZ>>>0){gL=gM}else{break}}if((c[aW>>2]&512|0)!=0){c\
+[a_>>2]=bi(c[a_>>2]|0,c_,gM)|0}if(gN){bX=Z;bY=ar;bZ=cX;b_=cY;b$=am;b0=X;break L\
+336}else{gJ=cZ-gM|0;gK=c_+gM|0}}}while(0);c[bo>>2]=8;c$=cX;c0=cY;c1=gJ;c2=gK;K=\
+343}else if((K|0)==534){K=0;if((bQ|0)==0){gO=bM;gP=bN;gQ=bO;gR=bP}else{if(bM>>>\
+0<bQ>>>0){y=bP;B=bO;M=bN;N=bM;while(1){if((B|0)==0){bX=bL;bY=ar;bZ=N;b_=M;b$=am\
+;b0=X;break L336}C=B-1|0;G=y+1|0;n=(d[y]<<N)+M|0;p=N+8|0;if(p>>>0<bQ>>>0){y=G;B\
+=C;M=n;N=p}else{gS=G;gT=C;gU=n;gV=p;break}}}else{gS=bP;gT=bO;gU=bN;gV=bM}c[aB>>\
+2]=(c[aB>>2]|0)+((1<<bQ)-1&gU);c[a2>>2]=(c[a2>>2]|0)+bQ;gO=gV-bQ|0;gP=gU>>>(bQ>\
+>>0);gQ=gT;gR=gS}c[bo>>2]=24;dE=bL;dF=gO;dG=gP;dH=gQ;dI=gR;K=540}L788:do{if((K|\
+0)==343){K=0;N=c[aW>>2]|0;do{if((N&512|0)==0){gW=c$;gX=c0;gY=c1;gZ=c2}else{if(c\
+$>>>0<16){M=c2;B=c1;y=c0;p=c$;while(1){if((B|0)==0){bX=Z;bY=ar;bZ=p;b_=y;b$=am;\
+b0=X;break L336}n=B-1|0;C=M+1|0;G=(d[M]<<p)+y|0;A=p+8|0;if(A>>>0<16){M=C;B=n;y=\
+G;p=A}else{g_=C;g$=n;g0=G;g1=A;break}}}else{g_=c2;g$=c1;g0=c0;g1=c$}if((g0|0)==\
+(c[a_>>2]&65535|0)){gW=0;gX=0;gY=g$;gZ=g_;break}c[bo>>2]=29;b5=Z;b6=ar;b7=g1;b8\
+=g0;b9=am;ca=g$;cb=ap;cc=g_;cd=Y;ce=X;break L788}}while(0);p=c[aY>>2]|0;if((p|0\
+)!=0){c[p+44>>2]=N>>>9&1;c[(c[aY>>2]|0)+48>>2]=1}c[a_>>2]=0;c[bo>>2]=11;b5=Z;b6\
+=ar;b7=gW;b8=gX;b9=am;ca=gY;cb=ap;cc=gZ;cd=Y;ce=X}else if((K|0)==540){K=0;if((a\
+m|0)==0){bX=dE;bY=ar;bZ=dF;b_=dG;b$=0;b0=X;break L336}p=ar-am|0;y=c[aB>>2]|0;if\
+(y>>>0>p>>>0){B=y-p|0;do{if(B>>>0>(c[bb>>2]|0)>>>0){if((c[aV>>2]|0)==0){break}c\
+[bo>>2]=29;b5=dE;b6=ar;b7=dF;b8=dG;b9=am;ca=dH;cb=ap;cc=dI;cd=Y;ce=X;break L788\
+}}while(0);N=c[a8>>2]|0;if(B>>>0>N>>>0){p=B-N|0;g2=(c[bq>>2]|0)+((c[bc>>2]|0)-p\
+)|0;g3=p}else{g2=(c[bq>>2]|0)+(N-B)|0;g3=B}N=c[aU>>2]|0;g4=g2;g5=g3>>>0>N>>>0?N\
+:g3;g6=N}else{N=c[aU>>2]|0;g4=ap+(-y|0)|0;g5=N;g6=N}N=g5>>>0>am>>>0?am:g5;c[aU>\
+>2]=g6-N;p=am^-1;M=g5^-1;aa=p>>>0>M>>>0?p:M;M=g4;p=N;A=ap;while(1){a[A]=a[M]|0;\
+G=p-1|0;if((G|0)==0){break}else{M=M+1|0;p=G;A=A+1|0}}A=am-N|0;p=ap+(aa^-1)|0;if\
+((c[aU>>2]|0)!=0){b5=dE;b6=ar;b7=dF;b8=dG;b9=A;ca=dH;cb=p;cc=dI;cd=Y;ce=X;break\
+}c[bo>>2]=20;b5=dE;b6=ar;b7=dF;b8=dG;b9=A;ca=dH;cb=p;cc=dI;cd=Y;ce=X}}while(0);\
+Z=b5;ar=b6;as=b7;al=b8;am=b9;an=ca;ap=cb;aq=cc;V=c[bo>>2]|0;Y=cd;X=ce}if((K|0)=\
+=356){c[a6>>2]=co;c[o>>2]=cn;break}else if((K|0)==578){c[bo>>2]=28;bX=1;bY=bt;b\
+Z=d_;b_=d$;b$=am;b0=by}else if((K|0)==579){bX=-3;bY=ar;bZ=as;b_=al;b$=am;b0=X}c\
+[a6>>2]=b_;c[o>>2]=bZ;Y=c[bc>>2]|0;if((Y|0)==0){if(!((c[bo>>2]|0)>>>0>=26|(bY|0\
+)==(b$|0))){K=582}}else{K=582}do{if((K|0)==582){V=c[bq>>2]|0;do{if((V|0)==0){aq\
+=bf(0,1<<c[bp>>2],1)|0;c[br>>2]=aq;if((aq|0)==0){c[bo>>2]=30;break L333}else{g7\
+=aq;g8=c[bc>>2]|0;break}}else{g7=V;g8=Y}}while(0);if((g8|0)==0){V=1<<c[bp>>2];c\
+[bc>>2]=V;c[a8>>2]=0;c[bb>>2]=0;g9=V}else{g9=g8}V=bY-b$|0;if(V>>>0>=g9>>>0){aq=\
+ap+(-g9|0)|0;bn(g7|0,aq|0,g9)|0;c[a8>>2]=0;c[bb>>2]=c[bc>>2];break}aq=c[a8>>2]|\
+0;an=g9-aq|0;Z=an>>>0>V>>>0?V:an;an=g7+aq|0;aq=ap+(-V|0)|0;bn(an|0,aq|0,Z)|0;aq\
+=V-Z|0;if((V|0)!=(Z|0)){Z=c[bq>>2]|0;an=ap+(-aq|0)|0;bn(Z|0,an|0,aq)|0;c[a8>>2]\
+=aq;c[bb>>2]=c[bc>>2];break}aq=(c[a8>>2]|0)+V|0;c[a8>>2]=aq;an=c[bc>>2]|0;if((a\
+q|0)==(an|0)){c[a8>>2]=0}aq=c[bb>>2]|0;if(aq>>>0>=an>>>0){break}c[bb>>2]=aq+V}}\
+while(0);Y=bY-b$|0;X=b0+Y|0;c[u>>2]=(c[u>>2]|0)+Y;if(!((c[t>>2]|0)==0|(bY|0)==(\
+b$|0))){am=c[a_>>2]|0;al=ap+(-Y|0)|0;if((c[aW>>2]|0)==0){ha=bh(am,al,Y)|0}else{\
+ha=bi(am,al,Y)|0}c[a_>>2]=ha}if((((bX|0)==0?-5:bX)|0)!=1){break}Y=c[bq>>2]|0;if\
+((Y|0)!=0){bg(0,Y)}bg(0,q);if((X|0)==1e5){break L331}az(12904,24,14192,12872)}}\
+while(0);t=c[bq>>2]|0;if((t|0)!=0){bg(0,t)}bg(0,q)}}while(0);if(!bs){i=h;return\
+}if((aG(f|0,c[1044]|0)|0)==0){i=h;return}else{az(12904,25,14192,12840)}}functio\
+n a2(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;e=i;do{if((b|0)>1\
+){f=a[c[d+4>>2]|0]|0;if((f|0)==50){g=250;break}else if((f|0)==51){h=618;break}e\
+lse if((f|0)==52){g=2500;break}else if((f|0)==53){g=5e3;break}else if((f|0)==49\
+){g=60;break}else if((f|0)==48){j=0;i=e;return j|0}else{ao(12824,(s=i,i=i+8|0,c\
+[s>>2]=f-48,s)|0)|0;j=-1;i=e;return j|0}}else{h=618}}while(0);if((h|0)==618){g=\
+500}h=bk(1e5)|0;d=0;b=0;f=17;while(1){do{if((b|0)>0){k=f;l=b-1|0}else{if((d&7|0\
+)==0){k=0;l=d&31;break}else{k=((Z(d,d)|0)>>>0)%6714>>>0&255;l=b;break}}}while(0\
+);a[h+d|0]=k;m=d+1|0;if((m|0)<1e5){d=m;b=l;f=k}else{n=0;break}}do{a1(h,n);n=n+1\
+|0;}while((n|0)<(g|0));ar(8)|0;j=0;i=e;return j|0}function a3(a){a=a|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=a+44|0;g=c[f>>2]|0;h=a+60|0;\
+i=a+116|0;j=a+108|0;k=g-262|0;l=a|0;m=a+56|0;n=a+72|0;o=a+88|0;p=a+84|0;q=a+112\
+|0;r=a+92|0;s=a+76|0;t=a+68|0;u=a+64|0;v=c[i>>2]|0;w=g;while(1){x=c[j>>2]|0;y=(\
+c[h>>2]|0)-v-x|0;if(x>>>0<(k+w|0)>>>0){z=y}else{x=c[m>>2]|0;A=x+g|0;bn(x|0,A|0,\
+g)|0;c[q>>2]=(c[q>>2]|0)-g;c[j>>2]=(c[j>>2]|0)-g;c[r>>2]=(c[r>>2]|0)-g;A=c[s>>2\
+]|0;x=A;B=(c[t>>2]|0)+(A<<1)|0;do{B=B-2|0;A=e[B>>1]|0;if(A>>>0<g>>>0){C=0}else{\
+C=A-g&65535}b[B>>1]=C;x=x-1|0;}while((x|0)!=0);x=g;B=(c[u>>2]|0)+(g<<1)|0;do{B=\
+B-2|0;A=e[B>>1]|0;if(A>>>0<g>>>0){D=0}else{D=A-g&65535}b[B>>1]=D;x=x-1|0;}while\
+((x|0)!=0);z=y+g|0}x=c[l>>2]|0;B=x+4|0;A=c[B>>2]|0;if((A|0)==0){E=663;break}F=c\
+[i>>2]|0;G=(c[m>>2]|0)+(F+(c[j>>2]|0))|0;H=A>>>0>z>>>0?z:A;if((H|0)==0){I=0;J=F\
+}else{c[B>>2]=A-H;A=c[(c[x+28>>2]|0)+24>>2]|0;if((A|0)==1){B=x+48|0;F=c[x>>2]|0\
+;c[B>>2]=bh(c[B>>2]|0,F,H)|0;K=F}else if((A|0)==2){A=x+48|0;F=c[x>>2]|0;c[A>>2]\
+=bi(c[A>>2]|0,F,H)|0;K=F}else{K=c[x>>2]|0}F=x|0;bn(G|0,K|0,H)|0;c[F>>2]=(c[F>>2\
+]|0)+H;F=x+8|0;c[F>>2]=(c[F>>2]|0)+H;I=H;J=c[i>>2]|0}L=J+I|0;c[i>>2]=L;if(L>>>0\
+>2){H=c[j>>2]|0;F=c[m>>2]|0;x=d[F+H|0]|0;c[n>>2]=x;c[n>>2]=((d[F+(H+1)|0]|0)^x<\
+<c[o>>2])&c[p>>2];if(L>>>0>=262){break}}if((c[(c[l>>2]|0)+4>>2]|0)==0){break}v=\
+L;w=c[f>>2]|0}if((E|0)==663){return}E=a+5824|0;a=c[E>>2]|0;f=c[h>>2]|0;if(a>>>0\
+>=f>>>0){return}h=L+(c[j>>2]|0)|0;if(a>>>0<h>>>0){j=f-h|0;L=j>>>0>258?258:j;bm(\
+(c[m>>2]|0)+h|0,0,L|0);c[E>>2]=L+h;return}L=h+258|0;if(a>>>0>=L>>>0){return}h=L\
+-a|0;L=f-a|0;f=h>>>0>L>>>0?L:h;bm((c[m>>2]|0)+a|0,0,f|0);c[E>>2]=(c[E>>2]|0)+f;\
+return}function a4(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;d=(c[a+12>>2]|0)-5|0;e\
+=d>>>0<65535?d:65535;d=a+116|0;f=a+108|0;g=a+92|0;h=a+44|0;i=a+56|0;j=a;k=a|0;w\
+hile(1){l=c[d>>2]|0;if(l>>>0<2){a3(a);m=c[d>>2]|0;if((m|b|0)==0){n=0;o=696;brea\
+k}if((m|0)==0){o=687;break}else{p=m}}else{p=l}l=(c[f>>2]|0)+p|0;c[f>>2]=l;c[d>>\
+2]=0;m=c[g>>2]|0;q=m+e|0;if((l|0)!=0&l>>>0<q>>>0){r=l;s=m}else{c[d>>2]=l-q;c[f>\
+>2]=q;if((m|0)>-1){t=(c[i>>2]|0)+m|0}else{t=0}ba(j,t,e,0);c[g>>2]=c[f>>2];m=c[k\
+>>2]|0;q=m+28|0;l=c[q>>2]|0;u=c[l+20>>2]|0;v=m+16|0;w=c[v>>2]|0;x=u>>>0>w>>>0?w\
+:u;do{if((x|0)!=0){u=m+12|0;w=c[u>>2]|0;y=c[l+16>>2]|0;bn(w|0,y|0,x)|0;c[u>>2]=\
+(c[u>>2]|0)+x;u=(c[q>>2]|0)+16|0;c[u>>2]=(c[u>>2]|0)+x;u=m+20|0;c[u>>2]=(c[u>>2\
+]|0)+x;c[v>>2]=(c[v>>2]|0)-x;u=(c[q>>2]|0)+20|0;c[u>>2]=(c[u>>2]|0)-x;u=c[q>>2]\
+|0;if((c[u+20>>2]|0)!=0){break}c[u+16>>2]=c[u+8>>2]}}while(0);if((c[(c[k>>2]|0)\
++16>>2]|0)==0){n=0;o=697;break}r=c[f>>2]|0;s=c[g>>2]|0}q=r-s|0;if(q>>>0<((c[h>>\
+2]|0)-262|0)>>>0){continue}if((s|0)>-1){z=(c[i>>2]|0)+s|0}else{z=0}ba(j,z,q,0);\
+c[g>>2]=c[f>>2];q=c[k>>2]|0;x=q+28|0;v=c[x>>2]|0;m=c[v+20>>2]|0;l=q+16|0;u=c[l>\
+>2]|0;y=m>>>0>u>>>0?u:m;do{if((y|0)!=0){m=q+12|0;u=c[m>>2]|0;w=c[v+16>>2]|0;bn(\
+u|0,w|0,y)|0;c[m>>2]=(c[m>>2]|0)+y;m=(c[x>>2]|0)+16|0;c[m>>2]=(c[m>>2]|0)+y;m=q\
++20|0;c[m>>2]=(c[m>>2]|0)+y;c[l>>2]=(c[l>>2]|0)-y;m=(c[x>>2]|0)+20|0;c[m>>2]=(c\
+[m>>2]|0)-y;m=c[x>>2]|0;if((c[m+20>>2]|0)!=0){break}c[m+16>>2]=c[m+8>>2]}}while\
+(0);if((c[(c[k>>2]|0)+16>>2]|0)==0){n=0;o=698;break}}if((o|0)==687){z=c[g>>2]|0\
+;if((z|0)>-1){A=(c[i>>2]|0)+z|0}else{A=0}i=(b|0)==4;ba(j,A,(c[f>>2]|0)-z|0,i&1)\
+;c[g>>2]=c[f>>2];f=c[k>>2]|0;g=f+28|0;z=c[g>>2]|0;A=c[z+20>>2]|0;j=f+16|0;b=c[j\
+>>2]|0;s=A>>>0>b>>>0?b:A;do{if((s|0)!=0){A=f+12|0;b=c[A>>2]|0;h=c[z+16>>2]|0;bn\
+(b|0,h|0,s)|0;c[A>>2]=(c[A>>2]|0)+s;A=(c[g>>2]|0)+16|0;c[A>>2]=(c[A>>2]|0)+s;A=\
+f+20|0;c[A>>2]=(c[A>>2]|0)+s;c[j>>2]=(c[j>>2]|0)-s;A=(c[g>>2]|0)+20|0;c[A>>2]=(\
+c[A>>2]|0)-s;A=c[g>>2]|0;if((c[A+20>>2]|0)!=0){break}c[A+16>>2]=c[A+8>>2]}}whil\
+e(0);if((c[(c[k>>2]|0)+16>>2]|0)==0){n=i?2:0;return n|0}else{n=i?3:1;return n|0\
+}}else if((o|0)==696){return n|0}else if((o|0)==697){return n|0}else if((o|0)==\
+698){return n|0}return 0}function a5(e,f){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;g=e+116|0;h=(f|0)==0;i=e+72\
+|0;j=e+88|0;k=e+108|0;l=e+56|0;m=e+84|0;n=e+68|0;o=e+52|0;p=e+64|0;q=e+44|0;r=e\
++96|0;s=e+112|0;t=e+5792|0;u=e+5796|0;v=e+5784|0;w=e+5788|0;x=e+128|0;y=e+92|0;\
+z=e;A=e|0;while(1){if((c[g>>2]|0)>>>0<262){a3(e);B=c[g>>2]|0;if(B>>>0<262&h){C=\
+0;D=735;break}if((B|0)==0){D=726;break}if(B>>>0>2){D=706}else{D=709}}else{D=706\
+}do{if((D|0)==706){D=0;B=c[k>>2]|0;E=((d[(c[l>>2]|0)+(B+2)|0]|0)^c[i>>2]<<c[j>>\
+2])&c[m>>2];c[i>>2]=E;F=b[(c[n>>2]|0)+(E<<1)>>1]|0;b[(c[p>>2]|0)+((c[o>>2]&B)<<\
+1)>>1]=F;B=F&65535;b[(c[n>>2]|0)+(c[i>>2]<<1)>>1]=c[k>>2]&65535;if(F<<16>>16==0\
+){D=709;break}if(((c[k>>2]|0)-B|0)>>>0>((c[q>>2]|0)-262|0)>>>0){D=709;break}F=a\
+6(e,B)|0;c[r>>2]=F;G=F}}while(0);if((D|0)==709){D=0;G=c[r>>2]|0}do{if(G>>>0>2){\
+F=G+253|0;B=(c[k>>2]|0)-(c[s>>2]|0)&65535;b[(c[u>>2]|0)+(c[t>>2]<<1)>>1]=B;E=c[\
+t>>2]|0;c[t>>2]=E+1;a[(c[v>>2]|0)+E|0]=F&255;E=B-1&65535;B=e+148+((d[12952+(F&2\
+55)|0]|0|256)+1<<2)|0;b[B>>1]=(b[B>>1]|0)+1&65535;B=E&65535;if((E&65535)<256){H\
+=B}else{H=(B>>>7)+256|0}B=e+2440+((d[H+13680|0]|0)<<2)|0;b[B>>1]=(b[B>>1]|0)+1&\
+65535;B=(c[t>>2]|0)==((c[w>>2]|0)-1|0)&1;E=c[r>>2]|0;F=(c[g>>2]|0)-E|0;c[g>>2]=\
+F;if(!(E>>>0<=(c[x>>2]|0)>>>0&F>>>0>2)){F=(c[k>>2]|0)+E|0;c[k>>2]=F;c[r>>2]=0;I\
+=c[l>>2]|0;J=d[I+F|0]|0;c[i>>2]=J;c[i>>2]=((d[I+(F+1)|0]|0)^J<<c[j>>2])&c[m>>2]\
+;K=B;L=F;break}c[r>>2]=E-1;do{E=c[k>>2]|0;F=E+1|0;c[k>>2]=F;J=((d[(c[l>>2]|0)+(\
+E+3)|0]|0)^c[i>>2]<<c[j>>2])&c[m>>2];c[i>>2]=J;b[(c[p>>2]|0)+((c[o>>2]&F)<<1)>>\
+1]=b[(c[n>>2]|0)+(J<<1)>>1]|0;b[(c[n>>2]|0)+(c[i>>2]<<1)>>1]=c[k>>2]&65535;J=(c\
+[r>>2]|0)-1|0;c[r>>2]=J;}while((J|0)!=0);J=(c[k>>2]|0)+1|0;c[k>>2]=J;K=B;L=J}el\
+se{J=a[(c[l>>2]|0)+(c[k>>2]|0)|0]|0;b[(c[u>>2]|0)+(c[t>>2]<<1)>>1]=0;F=c[t>>2]|\
+0;c[t>>2]=F+1;a[(c[v>>2]|0)+F|0]=J;F=e+148+((J&255)<<2)|0;b[F>>1]=(b[F>>1]|0)+1\
+&65535;F=(c[t>>2]|0)==((c[w>>2]|0)-1|0)&1;c[g>>2]=(c[g>>2]|0)-1;J=(c[k>>2]|0)+1\
+|0;c[k>>2]=J;K=F;L=J}}while(0);if((K|0)==0){continue}J=c[y>>2]|0;if((J|0)>-1){M\
+=(c[l>>2]|0)+J|0}else{M=0}ba(z,M,L-J|0,0);c[y>>2]=c[k>>2];J=c[A>>2]|0;F=J+28|0;\
+E=c[F>>2]|0;I=c[E+20>>2]|0;N=J+16|0;O=c[N>>2]|0;P=I>>>0>O>>>0?O:I;do{if((P|0)!=\
+0){I=J+12|0;O=c[I>>2]|0;Q=c[E+16>>2]|0;bn(O|0,Q|0,P)|0;c[I>>2]=(c[I>>2]|0)+P;I=\
+(c[F>>2]|0)+16|0;c[I>>2]=(c[I>>2]|0)+P;I=J+20|0;c[I>>2]=(c[I>>2]|0)+P;c[N>>2]=(\
+c[N>>2]|0)-P;I=(c[F>>2]|0)+20|0;c[I>>2]=(c[I>>2]|0)-P;I=c[F>>2]|0;if((c[I+20>>2\
+]|0)!=0){break}c[I+16>>2]=c[I+8>>2]}}while(0);if((c[(c[A>>2]|0)+16>>2]|0)==0){C\
+=0;D=736;break}}if((D|0)==726){L=c[y>>2]|0;if((L|0)>-1){R=(c[l>>2]|0)+L|0}else{\
+R=0}l=(f|0)==4;ba(z,R,(c[k>>2]|0)-L|0,l&1);c[y>>2]=c[k>>2];k=c[A>>2]|0;y=k+28|0\
+;L=c[y>>2]|0;R=c[L+20>>2]|0;z=k+16|0;f=c[z>>2]|0;M=R>>>0>f>>>0?f:R;do{if((M|0)!\
+=0){R=k+12|0;f=c[R>>2]|0;K=c[L+16>>2]|0;bn(f|0,K|0,M)|0;c[R>>2]=(c[R>>2]|0)+M;R\
+=(c[y>>2]|0)+16|0;c[R>>2]=(c[R>>2]|0)+M;R=k+20|0;c[R>>2]=(c[R>>2]|0)+M;c[z>>2]=\
+(c[z>>2]|0)-M;R=(c[y>>2]|0)+20|0;c[R>>2]=(c[R>>2]|0)-M;R=c[y>>2]|0;if((c[R+20>>\
+2]|0)!=0){break}c[R+16>>2]=c[R+8>>2]}}while(0);if((c[(c[A>>2]|0)+16>>2]|0)==0){\
+C=l?2:0;return C|0}else{C=l?3:1;return C|0}}else if((D|0)==735){return C|0}else\
+ if((D|0)==736){return C|0}return 0}function a6(b,d){b=b|0;d=d|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;f=c[b+124>>2]|0;g=c[b+56>>2]|0;h=c[b+108>>2]|0;i\
+=g+h|0;j=c[b+120>>2]|0;k=c[b+144>>2]|0;l=(c[b+44>>2]|0)-262|0;m=h>>>0>l>>>0?h-l\
+|0:0;l=c[b+64>>2]|0;n=c[b+52>>2]|0;o=g+(h+258)|0;p=c[b+116>>2]|0;q=k>>>0>p>>>0?\
+p:k;k=b+112|0;r=g+(h+1)|0;s=g+(h+2)|0;t=o;u=h+257|0;v=a[g+(j+h)|0]|0;w=a[g+(h-1\
++j)|0]|0;x=d;d=j>>>0<(c[b+140>>2]|0)>>>0?f:f>>>2;f=j;L1039:while(1){j=g+x|0;do{\
+if((a[g+(x+f)|0]|0)==v<<24>>24){if((a[g+(f-1+x)|0]|0)!=w<<24>>24){y=v;z=w;A=f;b\
+reak}if((a[j]|0)!=(a[i]|0)){y=v;z=w;A=f;break}if((a[g+(x+1)|0]|0)!=(a[r]|0)){y=\
+v;z=w;A=f;break}b=s;B=g+(x+2)|0;while(1){C=b+1|0;if((a[C]|0)!=(a[B+1|0]|0)){D=C\
+;break}C=b+2|0;if((a[C]|0)!=(a[B+2|0]|0)){D=C;break}C=b+3|0;if((a[C]|0)!=(a[B+3\
+|0]|0)){D=C;break}C=b+4|0;if((a[C]|0)!=(a[B+4|0]|0)){D=C;break}C=b+5|0;if((a[C]\
+|0)!=(a[B+5|0]|0)){D=C;break}C=b+6|0;if((a[C]|0)!=(a[B+6|0]|0)){D=C;break}C=b+7\
+|0;if((a[C]|0)!=(a[B+7|0]|0)){D=C;break}C=b+8|0;E=B+8|0;if((a[C]|0)==(a[E]|0)&C\
+>>>0<o>>>0){b=C;B=E}else{D=C;break}}B=D-t|0;b=B+258|0;if((b|0)<=(f|0)){y=v;z=w;\
+A=f;break}c[k>>2]=x;if((b|0)>=(q|0)){F=b;G=759;break L1039}y=a[g+(b+h)|0]|0;z=a\
+[g+(u+B)|0]|0;A=b}else{y=v;z=w;A=f}}while(0);j=e[l+((x&n)<<1)>>1]|0;if(j>>>0<=m\
+>>>0){F=A;G=760;break}b=d-1|0;if((b|0)==0){F=A;G=761;break}else{v=y;w=z;x=j;d=b\
+;f=A}}if((G|0)==759){H=F>>>0>p>>>0;I=H?p:F;return I|0}else if((G|0)==760){H=F>>\
+>0>p>>>0;I=H?p:F;return I|0}else if((G|0)==761){H=F>>>0>p>>>0;I=H?p:F;return I|\
+0}return 0}function a7(a){a=a|0;var d=0;d=0;do{b[a+148+(d<<2)>>1]=0;d=d+1|0;}wh\
+ile((d|0)<286);b[a+2440>>1]=0;b[a+2444>>1]=0;b[a+2448>>1]=0;b[a+2452>>1]=0;b[a+\
+2456>>1]=0;b[a+2460>>1]=0;b[a+2464>>1]=0;b[a+2468>>1]=0;b[a+2472>>1]=0;b[a+2476\
+>>1]=0;b[a+2480>>1]=0;b[a+2484>>1]=0;b[a+2488>>1]=0;b[a+2492>>1]=0;b[a+2496>>1]\
+=0;b[a+2500>>1]=0;b[a+2504>>1]=0;b[a+2508>>1]=0;b[a+2512>>1]=0;b[a+2516>>1]=0;b\
+[a+2520>>1]=0;b[a+2524>>1]=0;b[a+2528>>1]=0;b[a+2532>>1]=0;b[a+2536>>1]=0;b[a+2\
+540>>1]=0;b[a+2544>>1]=0;b[a+2548>>1]=0;b[a+2552>>1]=0;b[a+2556>>1]=0;b[a+2684>\
+>1]=0;b[a+2688>>1]=0;b[a+2692>>1]=0;b[a+2696>>1]=0;b[a+2700>>1]=0;b[a+2704>>1]=\
+0;b[a+2708>>1]=0;b[a+2712>>1]=0;b[a+2716>>1]=0;b[a+2720>>1]=0;b[a+2724>>1]=0;b[\
+a+2728>>1]=0;b[a+2732>>1]=0;b[a+2736>>1]=0;b[a+2740>>1]=0;b[a+2744>>1]=0;b[a+27\
+48>>1]=0;b[a+2752>>1]=0;b[a+2756>>1]=0;b[a+1172>>1]=1;c[a+5804>>2]=0;c[a+5800>>\
+2]=0;c[a+5808>>2]=0;c[a+5792>>2]=0;return}function a8(e,f){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;g=e+116|0;h=(f|0)==0;i=e+72|0;j=e+88|0;k=e+108|0;l=e+56|0;m=e\
++84|0;n=e+68|0;o=e+52|0;p=e+64|0;q=e+96|0;r=e+120|0;s=e+112|0;t=e+100|0;u=e+579\
+2|0;v=e+5796|0;w=e+5784|0;x=e+5788|0;y=e+104|0;z=e+92|0;A=e;B=e|0;C=e+128|0;D=e\
++44|0;E=e+136|0;L1069:while(1){F=c[g>>2]|0;while(1){do{if(F>>>0<262){a3(e);G=c[\
+g>>2]|0;if(G>>>0<262&h){H=0;I=815;break L1069}if((G|0)==0){I=804;break L1069}if\
+(G>>>0>2){I=772;break}c[r>>2]=c[q>>2];c[t>>2]=c[s>>2];c[q>>2]=2;J=2;I=780}else{\
+I=772}}while(0);do{if((I|0)==772){I=0;G=c[k>>2]|0;K=((d[(c[l>>2]|0)+(G+2)|0]|0)\
+^c[i>>2]<<c[j>>2])&c[m>>2];c[i>>2]=K;L=b[(c[n>>2]|0)+(K<<1)>>1]|0;b[(c[p>>2]|0)\
++((c[o>>2]&G)<<1)>>1]=L;G=L&65535;b[(c[n>>2]|0)+(c[i>>2]<<1)>>1]=c[k>>2]&65535;\
+K=c[q>>2]|0;c[r>>2]=K;c[t>>2]=c[s>>2];c[q>>2]=2;if(L<<16>>16==0){J=2;I=780;brea\
+k}if(K>>>0>=(c[C>>2]|0)>>>0){M=K;N=2;break}if(((c[k>>2]|0)-G|0)>>>0>((c[D>>2]|0\
+)-262|0)>>>0){J=2;I=780;break}K=a6(e,G)|0;c[q>>2]=K;if(K>>>0>=6){J=K;I=780;brea\
+k}if((c[E>>2]|0)!=1){if((K|0)!=3){J=K;I=780;break}if(((c[k>>2]|0)-(c[s>>2]|0)|0\
+)>>>0<=4096){J=3;I=780;break}}c[q>>2]=2;J=2;I=780}}while(0);if((I|0)==780){I=0;\
+M=c[r>>2]|0;N=J}if(!(M>>>0<3|N>>>0>M>>>0)){break}if((c[y>>2]|0)==0){c[y>>2]=1;c\
+[k>>2]=(c[k>>2]|0)+1;K=(c[g>>2]|0)-1|0;c[g>>2]=K;F=K;continue}K=a[(c[l>>2]|0)+(\
+(c[k>>2]|0)-1)|0]|0;b[(c[v>>2]|0)+(c[u>>2]<<1)>>1]=0;G=c[u>>2]|0;c[u>>2]=G+1;a[\
+(c[w>>2]|0)+G|0]=K;G=e+148+((K&255)<<2)|0;b[G>>1]=(b[G>>1]|0)+1&65535;do{if((c[\
+u>>2]|0)==((c[x>>2]|0)-1|0)){G=c[z>>2]|0;if((G|0)>-1){O=(c[l>>2]|0)+G|0}else{O=\
+0}ba(A,O,(c[k>>2]|0)-G|0,0);c[z>>2]=c[k>>2];G=c[B>>2]|0;K=G+28|0;L=c[K>>2]|0;P=\
+c[L+20>>2]|0;Q=G+16|0;R=c[Q>>2]|0;S=P>>>0>R>>>0?R:P;if((S|0)==0){break}P=G+12|0\
+;R=c[P>>2]|0;T=c[L+16>>2]|0;bn(R|0,T|0,S)|0;c[P>>2]=(c[P>>2]|0)+S;P=(c[K>>2]|0)\
++16|0;c[P>>2]=(c[P>>2]|0)+S;P=G+20|0;c[P>>2]=(c[P>>2]|0)+S;c[Q>>2]=(c[Q>>2]|0)-\
+S;Q=(c[K>>2]|0)+20|0;c[Q>>2]=(c[Q>>2]|0)-S;S=c[K>>2]|0;if((c[S+20>>2]|0)!=0){br\
+eak}c[S+16>>2]=c[S+8>>2]}}while(0);c[k>>2]=(c[k>>2]|0)+1;S=(c[g>>2]|0)-1|0;c[g>\
+>2]=S;if((c[(c[B>>2]|0)+16>>2]|0)==0){H=0;I=817;break L1069}else{F=S}}F=c[k>>2]\
+|0;S=F-3+(c[g>>2]|0)|0;K=M+253|0;Q=F+65535-(c[t>>2]|0)&65535;b[(c[v>>2]|0)+(c[u\
+>>2]<<1)>>1]=Q;F=c[u>>2]|0;c[u>>2]=F+1;a[(c[w>>2]|0)+F|0]=K&255;F=Q-1&65535;Q=e\
++148+((d[12952+(K&255)|0]|0|256)+1<<2)|0;b[Q>>1]=(b[Q>>1]|0)+1&65535;Q=F&65535;\
+if((F&65535)<256){U=Q}else{U=(Q>>>7)+256|0}Q=e+2440+((d[U+13680|0]|0)<<2)|0;b[Q\
+>>1]=(b[Q>>1]|0)+1&65535;Q=c[u>>2]|0;F=(c[x>>2]|0)-1|0;K=c[r>>2]|0;c[g>>2]=1-K+\
+(c[g>>2]|0);P=K-2|0;c[r>>2]=P;K=P;do{P=c[k>>2]|0;G=P+1|0;c[k>>2]=G;if(G>>>0>S>>\
+>0){V=K}else{T=((d[(c[l>>2]|0)+(P+3)|0]|0)^c[i>>2]<<c[j>>2])&c[m>>2];c[i>>2]=T;\
+b[(c[p>>2]|0)+((c[o>>2]&G)<<1)>>1]=b[(c[n>>2]|0)+(T<<1)>>1]|0;b[(c[n>>2]|0)+(c[\
+i>>2]<<1)>>1]=c[k>>2]&65535;V=c[r>>2]|0}K=V-1|0;c[r>>2]=K;}while((K|0)!=0);c[y>\
+>2]=0;c[q>>2]=2;K=(c[k>>2]|0)+1|0;c[k>>2]=K;if((Q|0)!=(F|0)){continue}S=c[z>>2]\
+|0;if((S|0)>-1){W=(c[l>>2]|0)+S|0}else{W=0}ba(A,W,K-S|0,0);c[z>>2]=c[k>>2];S=c[\
+B>>2]|0;K=S+28|0;T=c[K>>2]|0;G=c[T+20>>2]|0;P=S+16|0;R=c[P>>2]|0;L=G>>>0>R>>>0?\
+R:G;do{if((L|0)!=0){G=S+12|0;R=c[G>>2]|0;X=c[T+16>>2]|0;bn(R|0,X|0,L)|0;c[G>>2]\
+=(c[G>>2]|0)+L;G=(c[K>>2]|0)+16|0;c[G>>2]=(c[G>>2]|0)+L;G=S+20|0;c[G>>2]=(c[G>>\
+2]|0)+L;c[P>>2]=(c[P>>2]|0)-L;G=(c[K>>2]|0)+20|0;c[G>>2]=(c[G>>2]|0)-L;G=c[K>>2\
+]|0;if((c[G+20>>2]|0)!=0){break}c[G+16>>2]=c[G+8>>2]}}while(0);if((c[(c[B>>2]|0\
+)+16>>2]|0)==0){H=0;I=816;break}}if((I|0)==804){if((c[y>>2]|0)!=0){W=a[(c[l>>2]\
+|0)+((c[k>>2]|0)-1)|0]|0;b[(c[v>>2]|0)+(c[u>>2]<<1)>>1]=0;v=c[u>>2]|0;c[u>>2]=v\
++1;a[(c[w>>2]|0)+v|0]=W;v=e+148+((W&255)<<2)|0;b[v>>1]=(b[v>>1]|0)+1&65535;c[y>\
+>2]=0}y=c[z>>2]|0;if((y|0)>-1){Y=(c[l>>2]|0)+y|0}else{Y=0}l=(f|0)==4;ba(A,Y,(c[\
+k>>2]|0)-y|0,l&1);c[z>>2]=c[k>>2];k=c[B>>2]|0;z=k+28|0;y=c[z>>2]|0;Y=c[y+20>>2]\
+|0;A=k+16|0;f=c[A>>2]|0;v=Y>>>0>f>>>0?f:Y;do{if((v|0)!=0){Y=k+12|0;f=c[Y>>2]|0;\
+W=c[y+16>>2]|0;bn(f|0,W|0,v)|0;c[Y>>2]=(c[Y>>2]|0)+v;Y=(c[z>>2]|0)+16|0;c[Y>>2]\
+=(c[Y>>2]|0)+v;Y=k+20|0;c[Y>>2]=(c[Y>>2]|0)+v;c[A>>2]=(c[A>>2]|0)-v;Y=(c[z>>2]|\
+0)+20|0;c[Y>>2]=(c[Y>>2]|0)-v;Y=c[z>>2]|0;if((c[Y+20>>2]|0)!=0){break}c[Y+16>>2\
+]=c[Y+8>>2]}}while(0);if((c[(c[B>>2]|0)+16>>2]|0)==0){H=l?2:0;return H|0}else{H\
+=l?3:1;return H|0}}else if((I|0)==815){return H|0}else if((I|0)==816){return H|\
+0}else if((I|0)==817){return H|0}return 0}function a9(d,f,g,h){d=d|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,v=0;i=d+5820|0;\
+j=c[i>>2]|0;k=h&65535;h=d+5816|0;l=e[h>>1]|0|k<<j;b[h>>1]=l&65535;if((j|0)>13){\
+m=d+20|0;n=c[m>>2]|0;c[m>>2]=n+1;o=d+8|0;a[(c[o>>2]|0)+n|0]=l&255;n=(e[h>>1]|0)\
+>>>8&255;p=c[m>>2]|0;c[m>>2]=p+1;a[(c[o>>2]|0)+p|0]=n;n=c[i>>2]|0;p=k>>>((16-n|\
+0)>>>0);b[h>>1]=p&65535;q=n-13|0;r=p}else{q=j+3|0;r=l}l=r&255;c[i>>2]=q;do{if((\
+q|0)>8){r=d+20|0;j=c[r>>2]|0;c[r>>2]=j+1;p=d+8|0;a[(c[p>>2]|0)+j|0]=l;j=(e[h>>1\
+]|0)>>>8&255;n=c[r>>2]|0;c[r>>2]=n+1;a[(c[p>>2]|0)+n|0]=j;s=r;t=p}else{p=d+20|0\
+;if((q|0)>0){r=c[p>>2]|0;c[p>>2]=r+1;j=d+8|0;a[(c[j>>2]|0)+r|0]=l;s=p;t=j;break\
+}else{s=p;t=d+8|0;break}}}while(0);b[h>>1]=0;c[i>>2]=0;c[d+5812>>2]=8;d=c[s>>2]\
+|0;c[s>>2]=d+1;a[(c[t>>2]|0)+d|0]=g&255;d=c[s>>2]|0;c[s>>2]=d+1;a[(c[t>>2]|0)+d\
+|0]=g>>>8&255;d=g&65535^65535;i=c[s>>2]|0;c[s>>2]=i+1;a[(c[t>>2]|0)+i|0]=d&255;\
+i=c[s>>2]|0;c[s>>2]=i+1;a[(c[t>>2]|0)+i|0]=d>>>8&255;if((g|0)==0){return}else{u\
+=g;v=f}while(1){f=u-1|0;g=a[v]|0;d=c[s>>2]|0;c[s>>2]=d+1;a[(c[t>>2]|0)+d|0]=g;i\
+f((f|0)==0){break}else{u=f;v=v+1|0}}return}function ba(f,g,h,i){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,L=0;if((c[f+132>>2]|0)>0){j=(c[f>\
+>2]|0)+44|0;if((c[j>>2]|0)==2){k=-201342849;l=0;while(1){if((k&1|0)!=0){if((b[f\
++148+(l<<2)>>1]|0)!=0){m=0;break}}n=l+1|0;if((n|0)<32){k=k>>>1;l=n}else{o=838;b\
+reak}}L1167:do{if((o|0)==838){if((b[f+184>>1]|0)!=0){m=1;break}if((b[f+188>>1]|\
+0)!=0){m=1;break}if((b[f+200>>1]|0)==0){p=32}else{m=1;break}while(1){if((p|0)>=\
+256){m=0;break L1167}if((b[f+148+(p<<2)>>1]|0)==0){p=p+1|0}else{m=1;break}}}}wh\
+ile(0);c[j>>2]=m}bb(f,f+2840|0);bb(f,f+2852|0);be(f,f+148|0,c[f+2844>>2]|0);be(\
+f,f+2440|0,c[f+2856>>2]|0);bb(f,f+2864|0);m=18;while(1){if((m|0)<=2){break}if((\
+b[f+2684+(d[m+12504|0]<<2)+2>>1]|0)==0){m=m-1|0}else{break}}j=f+5800|0;p=(m*3&-\
+1)+17+(c[j>>2]|0)|0;c[j>>2]=p;j=(p+10|0)>>>3;p=((c[f+5804>>2]|0)+10|0)>>>3;q=p>\
+>>0>j>>>0?j:p;r=p;s=m}else{m=h+5|0;q=m;r=m;s=0}do{if((h+4|0)>>>0>q>>>0|(g|0)==0\
+){m=f+5820|0;p=c[m>>2]|0;j=(p|0)>13;if((c[f+136>>2]|0)==4|(r|0)==(q|0)){o=i+2&6\
+5535;l=f+5816|0;k=e[l>>1]|o<<p;b[l>>1]=k&65535;if(j){n=f+20|0;t=c[n>>2]|0;c[n>>\
+2]=t+1;u=f+8|0;a[(c[u>>2]|0)+t|0]=k&255;k=(e[l>>1]|0)>>>8&255;t=c[n>>2]|0;c[n>>\
+2]=t+1;a[(c[u>>2]|0)+t|0]=k;k=c[m>>2]|0;b[l>>1]=o>>>((16-k|0)>>>0)&65535;v=k-13\
+|0}else{v=p+3|0}c[m>>2]=v;bc(f,16,1192);break}k=i+4&65535;o=f+5816|0;l=e[o>>1]|\
+k<<p;t=l&65535;b[o>>1]=t;if(j){j=f+20|0;u=c[j>>2]|0;c[j>>2]=u+1;n=f+8|0;a[(c[n>\
+>2]|0)+u|0]=l&255;l=(e[o>>1]|0)>>>8&255;u=c[j>>2]|0;c[j>>2]=u+1;a[(c[n>>2]|0)+u\
+|0]=l;l=c[m>>2]|0;u=k>>>((16-l|0)>>>0)&65535;b[o>>1]=u;w=l-13|0;x=u}else{w=p+3|\
+0;x=t}c[m>>2]=w;t=c[f+2844>>2]|0;p=c[f+2856>>2]|0;u=s+1|0;l=t+65280&65535;k=x&6\
+5535|l<<w;n=k&65535;b[o>>1]=n;if((w|0)>11){j=f+20|0;y=c[j>>2]|0;c[j>>2]=y+1;z=f\
++8|0;a[(c[z>>2]|0)+y|0]=k&255;k=(e[o>>1]|0)>>>8&255;y=c[j>>2]|0;c[j>>2]=y+1;a[(\
+c[z>>2]|0)+y|0]=k;k=c[m>>2]|0;y=l>>>((16-k|0)>>>0)&65535;b[o>>1]=y;A=k-11|0;B=y\
+}else{A=w+5|0;B=n}c[m>>2]=A;n=p&65535;y=n<<A|B&65535;k=y&65535;b[o>>1]=k;if((A|\
+0)>11){l=f+20|0;z=c[l>>2]|0;c[l>>2]=z+1;j=f+8|0;a[(c[j>>2]|0)+z|0]=y&255;y=(e[o\
+>>1]|0)>>>8&255;z=c[l>>2]|0;c[l>>2]=z+1;a[(c[j>>2]|0)+z|0]=y;y=c[m>>2]|0;z=n>>>\
+((16-y|0)>>>0)&65535;b[o>>1]=z;C=y-11|0;D=z}else{C=A+5|0;D=k}c[m>>2]=C;k=s+6553\
+3&65535;z=k<<C|D&65535;y=z&65535;b[o>>1]=y;if((C|0)>12){n=f+20|0;j=c[n>>2]|0;c[\
+n>>2]=j+1;l=f+8|0;a[(c[l>>2]|0)+j|0]=z&255;z=(e[o>>1]|0)>>>8&255;j=c[n>>2]|0;c[\
+n>>2]=j+1;a[(c[l>>2]|0)+j|0]=z;z=c[m>>2]|0;j=k>>>((16-z|0)>>>0)&65535;b[o>>1]=j\
+;E=z-12|0;F=j}else{E=C+4|0;F=y}c[m>>2]=E;if((u|0)>0){y=f+20|0;j=f+8|0;z=0;k=E;l\
+=F;while(1){n=e[f+2684+(d[z+12504|0]<<2)+2>>1]|0;G=n<<k|l&65535;H=G&65535;b[o>>\
+1]=H;if((k|0)>13){I=c[y>>2]|0;c[y>>2]=I+1;a[(c[j>>2]|0)+I|0]=G&255;G=(e[o>>1]|0\
+)>>>8&255;I=c[y>>2]|0;c[y>>2]=I+1;a[(c[j>>2]|0)+I|0]=G;G=c[m>>2]|0;I=n>>>((16-G\
+|0)>>>0)&65535;b[o>>1]=I;J=G-13|0;K=I}else{J=k+3|0;K=H}c[m>>2]=J;H=z+1|0;if((H|\
+0)<(u|0)){z=H;k=J;l=K}else{break}}}l=f+148|0;bd(f,l,t);k=f+2440|0;bd(f,k,p);bc(\
+f,l,k)}else{a9(f,g,h,i)}}while(0);a7(f);if((i|0)==0){return}i=f+5820|0;h=c[i>>2\
+]|0;do{if((h|0)>8){g=f+5816|0;K=b[g>>1]&255;J=f+20|0;F=c[J>>2]|0;c[J>>2]=F+1;E=\
+f+8|0;a[(c[E>>2]|0)+F|0]=K;K=(e[g>>1]|0)>>>8&255;F=c[J>>2]|0;c[J>>2]=F+1;a[(c[E\
+>>2]|0)+F|0]=K;L=g}else{g=f+5816|0;if((h|0)<=0){L=g;break}K=b[g>>1]&255;F=f+20|\
+0;E=c[F>>2]|0;c[F>>2]=E+1;a[(c[f+8>>2]|0)+E|0]=K;L=g}}while(0);b[L>>1]=0;c[i>>2\
+]=0;return}function bb(f,g){f=f|0;g=g|0;var h=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,_=0;h=i;i=i+32|0;j=h|\
+0;k=g|0;l=c[k>>2]|0;m=g+8|0;n=c[m>>2]|0;o=c[n>>2]|0;p=c[n+12>>2]|0;n=f+5200|0;c\
+[n>>2]=0;q=f+5204|0;c[q>>2]=573;if((p|0)>0){r=0;s=-1;while(1){if((b[l+(r<<2)>>1\
+]|0)==0){b[l+(r<<2)+2>>1]=0;t=s}else{u=(c[n>>2]|0)+1|0;c[n>>2]=u;c[f+2908+(u<<2\
+)>>2]=r;a[r+(f+5208)|0]=0;t=r}u=r+1|0;if((u|0)<(p|0)){r=u;s=t}else{break}}s=c[n\
+>>2]|0;if((s|0)<2){v=s;w=t;x=886}else{y=t}}else{v=0;w=-1;x=886}if((x|0)==886){x\
+=f+5800|0;t=f+5804|0;if((o|0)==0){s=w;r=v;while(1){u=(s|0)<2;z=s+1|0;A=u?z:s;B=\
+u?z:0;z=r+1|0;c[n>>2]=z;c[f+2908+(z<<2)>>2]=B;b[l+(B<<2)>>1]=1;a[B+(f+5208)|0]=\
+0;c[x>>2]=(c[x>>2]|0)-1;B=c[n>>2]|0;if((B|0)<2){s=A;r=B}else{y=A;break}}}else{r\
+=w;w=v;while(1){v=(r|0)<2;s=r+1|0;A=v?s:r;B=v?s:0;s=w+1|0;c[n>>2]=s;c[f+2908+(s\
+<<2)>>2]=B;b[l+(B<<2)>>1]=1;a[B+(f+5208)|0]=0;c[x>>2]=(c[x>>2]|0)-1;c[t>>2]=(c[\
+t>>2]|0)-(e[o+(B<<2)+2>>1]|0);B=c[n>>2]|0;if((B|0)<2){r=A;w=B}else{y=A;break}}}\
+}w=g+4|0;c[w>>2]=y;g=c[n>>2]|0;if((g|0)>1){r=(g|0)/2&-1;o=g;while(1){t=c[f+2908\
++(r<<2)>>2]|0;x=t+(f+5208)|0;A=r<<1;L1248:do{if((A|0)>(o|0)){C=r}else{B=l+(t<<2\
+)|0;s=r;v=A;z=o;while(1){do{if((v|0)<(z|0)){u=v|1;D=c[f+2908+(u<<2)>>2]|0;E=b[l\
++(D<<2)>>1]|0;F=c[f+2908+(v<<2)>>2]|0;G=b[l+(F<<2)>>1]|0;if((E&65535)>=(G&65535\
+)){if(E<<16>>16!=G<<16>>16){H=v;break}if((d[D+(f+5208)|0]|0)>(d[F+(f+5208)|0]|0\
+)){H=v;break}}H=u}else{H=v}}while(0);u=b[B>>1]|0;F=c[f+2908+(H<<2)>>2]|0;D=b[l+\
+(F<<2)>>1]|0;if((u&65535)<(D&65535)){C=s;break L1248}if(u<<16>>16==D<<16>>16){i\
+f((d[x]|0)<=(d[F+(f+5208)|0]|0)){C=s;break L1248}}c[f+2908+(s<<2)>>2]=F;F=H<<1;\
+D=c[n>>2]|0;if((F|0)>(D|0)){C=H;break}else{s=H;v=F;z=D}}}}while(0);c[f+2908+(C<\
+<2)>>2]=t;x=r-1|0;A=c[n>>2]|0;if((x|0)>0){r=x;o=A}else{I=A;break}}}else{I=g}g=f\
++2912|0;o=p;p=I;while(1){I=c[g>>2]|0;r=p-1|0;c[n>>2]=r;C=c[f+2908+(p<<2)>>2]|0;\
+c[g>>2]=C;H=C+(f+5208)|0;L1267:do{if((r|0)<2){J=1}else{A=l+(C<<2)|0;x=1;z=2;v=r\
+;while(1){do{if((z|0)<(v|0)){s=z|1;B=c[f+2908+(s<<2)>>2]|0;D=b[l+(B<<2)>>1]|0;F\
+=c[f+2908+(z<<2)>>2]|0;u=b[l+(F<<2)>>1]|0;if((D&65535)>=(u&65535)){if(D<<16>>16\
+!=u<<16>>16){K=z;break}if((d[B+(f+5208)|0]|0)>(d[F+(f+5208)|0]|0)){K=z;break}}K\
+=s}else{K=z}}while(0);s=b[A>>1]|0;F=c[f+2908+(K<<2)>>2]|0;B=b[l+(F<<2)>>1]|0;if\
+((s&65535)<(B&65535)){J=x;break L1267}if(s<<16>>16==B<<16>>16){if((d[H]|0)<=(d[\
+F+(f+5208)|0]|0)){J=x;break L1267}}c[f+2908+(x<<2)>>2]=F;F=K<<1;B=c[n>>2]|0;if(\
+(F|0)>(B|0)){J=K;break}else{x=K;z=F;v=B}}}}while(0);c[f+2908+(J<<2)>>2]=C;H=c[g\
+>>2]|0;r=(c[q>>2]|0)-1|0;c[q>>2]=r;c[f+2908+(r<<2)>>2]=I;r=(c[q>>2]|0)-1|0;c[q>\
+>2]=r;c[f+2908+(r<<2)>>2]=H;r=l+(o<<2)|0;b[r>>1]=(b[l+(H<<2)>>1]|0)+(b[l+(I<<2)\
+>>1]|0)&65535;t=a[I+(f+5208)|0]|0;v=a[H+(f+5208)|0]|0;z=o+(f+5208)|0;a[z]=((t&2\
+55)<(v&255)?v:t)+1&255;t=o&65535;b[l+(H<<2)+2>>1]=t;b[l+(I<<2)+2>>1]=t;t=o+1|0;\
+c[g>>2]=o;H=c[n>>2]|0;L1283:do{if((H|0)<2){L=1}else{v=1;x=2;A=H;while(1){do{if(\
+(x|0)<(A|0)){B=x|1;F=c[f+2908+(B<<2)>>2]|0;s=b[l+(F<<2)>>1]|0;u=c[f+2908+(x<<2)\
+>>2]|0;D=b[l+(u<<2)>>1]|0;if((s&65535)>=(D&65535)){if(s<<16>>16!=D<<16>>16){M=x\
+;break}if((d[F+(f+5208)|0]|0)>(d[u+(f+5208)|0]|0)){M=x;break}}M=B}else{M=x}}whi\
+le(0);B=b[r>>1]|0;u=c[f+2908+(M<<2)>>2]|0;F=b[l+(u<<2)>>1]|0;if((B&65535)<(F&65\
+535)){L=v;break L1283}if(B<<16>>16==F<<16>>16){if((d[z]|0)<=(d[u+(f+5208)|0]|0)\
+){L=v;break L1283}}c[f+2908+(v<<2)>>2]=u;u=M<<1;F=c[n>>2]|0;if((u|0)>(F|0)){L=M\
+;break}else{v=M;x=u;A=F}}}}while(0);c[f+2908+(L<<2)>>2]=o;z=c[n>>2]|0;if((z|0)>\
+1){o=t;p=z}else{break}}p=c[g>>2]|0;g=(c[q>>2]|0)-1|0;c[q>>2]=g;c[f+2908+(g<<2)>\
+>2]=p;p=c[k>>2]|0;k=c[w>>2]|0;w=c[m>>2]|0;m=c[w>>2]|0;g=c[w+4>>2]|0;o=c[w+8>>2]\
+|0;n=c[w+16>>2]|0;w=f+2876|0;bm(w|0,0,32);b[p+(c[f+2908+(c[q>>2]<<2)>>2]<<2)+2>\
+>1]=0;L=(c[q>>2]|0)+1|0;L1299:do{if((L|0)<573){q=f+5800|0;M=f+5804|0;if((m|0)==\
+0){J=0;K=L;while(1){z=c[f+2908+(K<<2)>>2]|0;r=p+(z<<2)+2|0;H=(e[p+(e[r>>1]<<2)+\
+2>>1]|0)+1|0;I=(H|0)>(n|0);C=I?n:H;H=(I&1)+J|0;b[r>>1]=C&65535;if((z|0)<=(k|0))\
+{r=f+2876+(C<<1)|0;b[r>>1]=(b[r>>1]|0)+1&65535;if((z|0)<(o|0)){N=0}else{N=c[g+(\
+z-o<<2)>>2]|0}r=Z(e[p+(z<<2)>>1]|0,N+C|0)|0;c[q>>2]=r+(c[q>>2]|0)}r=K+1|0;if((r\
+|0)<573){J=H;K=r}else{O=H;break}}}else{K=0;J=L;while(1){t=c[f+2908+(J<<2)>>2]|0\
+;H=p+(t<<2)+2|0;r=(e[p+(e[H>>1]<<2)+2>>1]|0)+1|0;C=(r|0)>(n|0);z=C?n:r;r=(C&1)+\
+K|0;b[H>>1]=z&65535;if((t|0)<=(k|0)){H=f+2876+(z<<1)|0;b[H>>1]=(b[H>>1]|0)+1&65\
+535;if((t|0)<(o|0)){P=0}else{P=c[g+(t-o<<2)>>2]|0}H=e[p+(t<<2)>>1]|0;C=Z(H,P+z|\
+0)|0;c[q>>2]=C+(c[q>>2]|0);C=Z((e[m+(t<<2)+2>>1]|0)+P|0,H)|0;c[M>>2]=C+(c[M>>2]\
+|0)}C=J+1|0;if((C|0)<573){K=r;J=C}else{O=r;break}}}if((O|0)==0){break}J=f+2876+\
+(n<<1)|0;K=O;do{M=n;while(1){r=M-1|0;Q=f+2876+(r<<1)|0;R=b[Q>>1]|0;if(R<<16>>16\
+==0){M=r}else{break}}b[Q>>1]=R-1&65535;r=f+2876+(M<<1)|0;b[r>>1]=(b[r>>1]|0)+2&\
+65535;S=(b[J>>1]|0)-1&65535;b[J>>1]=S;K=K-2|0;}while((K|0)>0);if((n|0)==0){brea\
+k}else{T=n;U=573;V=S}while(1){K=T&65535;if(V<<16>>16==0){W=U}else{J=V&65535;r=U\
+;while(1){C=r;do{C=C-1|0;X=c[f+2908+(C<<2)>>2]|0;}while((X|0)>(k|0));H=p+(X<<2)\
++2|0;t=e[H>>1]|0;if((t|0)!=(T|0)){z=Z(e[p+(X<<2)>>1]|0,T-t|0)|0;c[q>>2]=z+(c[q>\
+>2]|0);b[H>>1]=K}H=J-1|0;if((H|0)==0){W=C;break}else{J=H;r=C}}}r=T-1|0;if((r|0)\
+==0){break L1299}T=r;U=W;V=b[f+2876+(r<<1)>>1]|0}}}while(0);V=b[w>>1]<<1;b[j+2>\
+>1]=V;w=((b[f+2878>>1]|0)+V&65535)<<1;b[j+4>>1]=w;V=(w+(b[f+2880>>1]|0)&65535)<\
+<1;b[j+6>>1]=V;w=(V+(b[f+2882>>1]|0)&65535)<<1;b[j+8>>1]=w;V=(w+(b[f+2884>>1]|0\
+)&65535)<<1;b[j+10>>1]=V;w=(V+(b[f+2886>>1]|0)&65535)<<1;b[j+12>>1]=w;V=(w+(b[f\
++2888>>1]|0)&65535)<<1;b[j+14>>1]=V;w=(V+(b[f+2890>>1]|0)&65535)<<1;b[j+16>>1]=\
+w;V=(w+(b[f+2892>>1]|0)&65535)<<1;b[j+18>>1]=V;w=(V+(b[f+2894>>1]|0)&65535)<<1;\
+b[j+20>>1]=w;V=(w+(b[f+2896>>1]|0)&65535)<<1;b[j+22>>1]=V;w=(V+(b[f+2898>>1]|0)\
+&65535)<<1;b[j+24>>1]=w;V=(w+(b[f+2900>>1]|0)&65535)<<1;b[j+26>>1]=V;w=(V+(b[f+\
+2902>>1]|0)&65535)<<1;b[j+28>>1]=w;b[j+30>>1]=(w+(b[f+2904>>1]|0)&65535)<<1;if(\
+(y|0)<0){i=h;return}else{Y=0}do{f=b[l+(Y<<2)+2>>1]|0;w=f&65535;if(f<<16>>16!=0)\
+{f=j+(w<<1)|0;V=b[f>>1]|0;b[f>>1]=V+1&65535;f=0;W=w;w=V&65535;while(1){_=f|w&1;\
+V=W-1|0;if((V|0)>0){f=_<<1;W=V;w=w>>>1}else{break}}b[l+(Y<<2)>>1]=_&65535}Y=Y+1\
+|0;}while((Y|0)<=(y|0));i=h;return}function bc(f,g,h){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,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;i=f+5792|0;if((c[i>>2]|0)\
+==0){j=c[f+5820>>2]|0;k=b[f+5816>>1]|0}else{l=f+5796|0;m=f+5784|0;n=f+5820|0;o=\
+f+5816|0;p=f+20|0;q=f+8|0;r=0;while(1){s=b[(c[l>>2]|0)+(r<<1)>>1]|0;t=s&65535;u\
+=r+1|0;v=d[(c[m>>2]|0)+r|0]|0;do{if(s<<16>>16==0){w=e[g+(v<<2)+2>>1]|0;x=c[n>>2\
+]|0;y=e[g+(v<<2)>>1]|0;z=e[o>>1]|0|y<<x;A=z&65535;b[o>>1]=A;if((x|0)>(16-w|0)){\
+B=c[p>>2]|0;c[p>>2]=B+1;a[(c[q>>2]|0)+B|0]=z&255;z=(e[o>>1]|0)>>>8&255;B=c[p>>2\
+]|0;c[p>>2]=B+1;a[(c[q>>2]|0)+B|0]=z;z=c[n>>2]|0;B=y>>>((16-z|0)>>>0)&65535;b[o\
+>>1]=B;y=w-16+z|0;c[n>>2]=y;C=y;D=B;break}else{B=x+w|0;c[n>>2]=B;C=B;D=A;break}\
+}else{A=d[v+12952|0]|0;B=(A|256)+1|0;w=e[g+(B<<2)+2>>1]|0;x=c[n>>2]|0;y=e[g+(B<\
+<2)>>1]|0;B=e[o>>1]|0|y<<x;z=B&65535;b[o>>1]=z;if((x|0)>(16-w|0)){E=c[p>>2]|0;c\
+[p>>2]=E+1;a[(c[q>>2]|0)+E|0]=B&255;B=(e[o>>1]|0)>>>8&255;E=c[p>>2]|0;c[p>>2]=E\
++1;a[(c[q>>2]|0)+E|0]=B;B=c[n>>2]|0;E=y>>>((16-B|0)>>>0)&65535;b[o>>1]=E;F=w-16\
++B|0;G=E}else{F=x+w|0;G=z}c[n>>2]=F;z=c[3856+(A<<2)>>2]|0;do{if((A-8|0)>>>0<20)\
+{w=v-(c[12528+(A<<2)>>2]|0)&65535;x=w<<F|G&65535;E=x&65535;b[o>>1]=E;if((F|0)>(\
+16-z|0)){B=c[p>>2]|0;c[p>>2]=B+1;a[(c[q>>2]|0)+B|0]=x&255;x=(e[o>>1]|0)>>>8&255\
+;B=c[p>>2]|0;c[p>>2]=B+1;a[(c[q>>2]|0)+B|0]=x;x=c[n>>2]|0;B=w>>>((16-x|0)>>>0)&\
+65535;b[o>>1]=B;w=z-16+x|0;c[n>>2]=w;H=w;I=B;break}else{B=F+z|0;c[n>>2]=B;H=B;I\
+=E;break}}else{H=F;I=G}}while(0);z=t-1|0;if(z>>>0<256){J=z}else{J=(z>>>7)+256|0\
+}A=d[J+13680|0]|0;E=e[h+(A<<2)+2>>1]|0;B=e[h+(A<<2)>>1]|0;w=I&65535|B<<H;x=w&65\
+535;b[o>>1]=x;if((H|0)>(16-E|0)){y=c[p>>2]|0;c[p>>2]=y+1;a[(c[q>>2]|0)+y|0]=w&2\
+55;w=(e[o>>1]|0)>>>8&255;y=c[p>>2]|0;c[p>>2]=y+1;a[(c[q>>2]|0)+y|0]=w;w=c[n>>2]\
+|0;y=B>>>((16-w|0)>>>0)&65535;b[o>>1]=y;K=E-16+w|0;L=y}else{K=H+E|0;L=x}c[n>>2]\
+=K;x=c[3976+(A<<2)>>2]|0;if((A-4|0)>>>0>=26){C=K;D=L;break}E=z-(c[12648+(A<<2)>\
+>2]|0)&65535;A=E<<K|L&65535;z=A&65535;b[o>>1]=z;if((K|0)>(16-x|0)){y=c[p>>2]|0;\
+c[p>>2]=y+1;a[(c[q>>2]|0)+y|0]=A&255;A=(e[o>>1]|0)>>>8&255;y=c[p>>2]|0;c[p>>2]=\
+y+1;a[(c[q>>2]|0)+y|0]=A;A=c[n>>2]|0;y=E>>>((16-A|0)>>>0)&65535;b[o>>1]=y;E=x-1\
+6+A|0;c[n>>2]=E;C=E;D=y;break}else{y=K+x|0;c[n>>2]=y;C=y;D=z;break}}}while(0);i\
+f(u>>>0<(c[i>>2]|0)>>>0){r=u}else{j=C;k=D;break}}}D=g+1026|0;C=e[D>>1]|0;r=f+58\
+20|0;i=e[g+1024>>1]|0;g=f+5816|0;n=k&65535|i<<j;b[g>>1]=n&65535;if((j|0)>(16-C|\
+0)){k=f+20|0;K=c[k>>2]|0;c[k>>2]=K+1;o=f+8|0;a[(c[o>>2]|0)+K|0]=n&255;n=(e[g>>1\
+]|0)>>>8&255;K=c[k>>2]|0;c[k>>2]=K+1;a[(c[o>>2]|0)+K|0]=n;n=c[r>>2]|0;b[g>>1]=i\
+>>>((16-n|0)>>>0)&65535;M=C-16+n|0;c[r>>2]=M;N=b[D>>1]|0;O=N&65535;P=f+5812|0;c\
+[P>>2]=O;return}else{M=j+C|0;c[r>>2]=M;N=b[D>>1]|0;O=N&65535;P=f+5812|0;c[P>>2]\
+=O;return}}function bd(d,f,g){d=d|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,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;h=b[f+2>>\
+1]|0;i=h<<16>>16==0;j=d+2754|0;k=d+5820|0;l=d+2752|0;m=d+5816|0;n=d+20|0;o=d+8|\
+0;p=d+2758|0;q=d+2756|0;r=d+2750|0;s=d+2748|0;t=0;u=-1;v=h&65535;h=i?138:7;w=i?\
+3:4;L1393:while(1){i=t;x=0;while(1){if((i|0)>(g|0)){break L1393}y=i+1|0;z=b[f+(\
+y<<2)+2>>1]|0;A=z&65535;B=x+1|0;C=(v|0)==(A|0);if((B|0)<(h|0)&C){i=y;x=B}else{b\
+reak}}do{if((B|0)<(w|0)){i=d+2684+(v<<2)+2|0;D=d+2684+(v<<2)|0;E=B;F=c[k>>2]|0;\
+G=b[m>>1]|0;while(1){H=e[i>>1]|0;I=e[D>>1]|0;J=G&65535|I<<F;K=J&65535;b[m>>1]=K\
+;if((F|0)>(16-H|0)){L=c[n>>2]|0;c[n>>2]=L+1;a[(c[o>>2]|0)+L|0]=J&255;J=(e[m>>1]\
+|0)>>>8&255;L=c[n>>2]|0;c[n>>2]=L+1;a[(c[o>>2]|0)+L|0]=J;J=c[k>>2]|0;L=I>>>((16\
+-J|0)>>>0)&65535;b[m>>1]=L;M=H-16+J|0;N=L}else{M=F+H|0;N=K}c[k>>2]=M;K=E-1|0;if\
+((K|0)==0){break}else{E=K;F=M;G=N}}}else{if((v|0)!=0){if((v|0)==(u|0)){O=B;P=c[\
+k>>2]|0;Q=b[m>>1]|0}else{G=e[d+2684+(v<<2)+2>>1]|0;F=c[k>>2]|0;E=e[d+2684+(v<<2\
+)>>1]|0;D=e[m>>1]|0|E<<F;i=D&65535;b[m>>1]=i;if((F|0)>(16-G|0)){K=c[n>>2]|0;c[n\
+>>2]=K+1;a[(c[o>>2]|0)+K|0]=D&255;D=(e[m>>1]|0)>>>8&255;K=c[n>>2]|0;c[n>>2]=K+1\
+;a[(c[o>>2]|0)+K|0]=D;D=c[k>>2]|0;K=E>>>((16-D|0)>>>0)&65535;b[m>>1]=K;R=G-16+D\
+|0;S=K}else{R=F+G|0;S=i}c[k>>2]=R;O=x;P=R;Q=S}i=e[r>>1]|0;G=e[s>>1]|0;F=Q&65535\
+|G<<P;K=F&65535;b[m>>1]=K;if((P|0)>(16-i|0)){D=c[n>>2]|0;c[n>>2]=D+1;a[(c[o>>2]\
+|0)+D|0]=F&255;F=(e[m>>1]|0)>>>8&255;D=c[n>>2]|0;c[n>>2]=D+1;a[(c[o>>2]|0)+D|0]\
+=F;F=c[k>>2]|0;D=G>>>((16-F|0)>>>0)&65535;b[m>>1]=D;T=i-16+F|0;U=D}else{T=P+i|0\
+;U=K}c[k>>2]=T;K=O+65533&65535;i=U&65535|K<<T;b[m>>1]=i&65535;if((T|0)>14){D=c[\
+n>>2]|0;c[n>>2]=D+1;a[(c[o>>2]|0)+D|0]=i&255;i=(e[m>>1]|0)>>>8&255;D=c[n>>2]|0;\
+c[n>>2]=D+1;a[(c[o>>2]|0)+D|0]=i;i=c[k>>2]|0;b[m>>1]=K>>>((16-i|0)>>>0)&65535;c\
+[k>>2]=i-14;break}else{c[k>>2]=T+2;break}}if((B|0)<11){i=e[j>>1]|0;K=c[k>>2]|0;\
+D=e[l>>1]|0;F=e[m>>1]|0|D<<K;G=F&65535;b[m>>1]=G;if((K|0)>(16-i|0)){E=c[n>>2]|0\
+;c[n>>2]=E+1;a[(c[o>>2]|0)+E|0]=F&255;F=(e[m>>1]|0)>>>8&255;E=c[n>>2]|0;c[n>>2]\
+=E+1;a[(c[o>>2]|0)+E|0]=F;F=c[k>>2]|0;E=D>>>((16-F|0)>>>0)&65535;b[m>>1]=E;V=i-\
+16+F|0;W=E}else{V=K+i|0;W=G}c[k>>2]=V;G=x+65534&65535;i=W&65535|G<<V;b[m>>1]=i&\
+65535;if((V|0)>13){K=c[n>>2]|0;c[n>>2]=K+1;a[(c[o>>2]|0)+K|0]=i&255;i=(e[m>>1]|\
+0)>>>8&255;K=c[n>>2]|0;c[n>>2]=K+1;a[(c[o>>2]|0)+K|0]=i;i=c[k>>2]|0;b[m>>1]=G>>\
+>((16-i|0)>>>0)&65535;c[k>>2]=i-13;break}else{c[k>>2]=V+3;break}}else{i=e[p>>1]\
+|0;G=c[k>>2]|0;K=e[q>>1]|0;E=e[m>>1]|0|K<<G;F=E&65535;b[m>>1]=F;if((G|0)>(16-i|\
+0)){D=c[n>>2]|0;c[n>>2]=D+1;a[(c[o>>2]|0)+D|0]=E&255;E=(e[m>>1]|0)>>>8&255;D=c[\
+n>>2]|0;c[n>>2]=D+1;a[(c[o>>2]|0)+D|0]=E;E=c[k>>2]|0;D=K>>>((16-E|0)>>>0)&65535\
+;b[m>>1]=D;X=i-16+E|0;Y=D}else{X=G+i|0;Y=F}c[k>>2]=X;F=x+65526&65535;i=Y&65535|\
+F<<X;b[m>>1]=i&65535;if((X|0)>9){G=c[n>>2]|0;c[n>>2]=G+1;a[(c[o>>2]|0)+G|0]=i&2\
+55;i=(e[m>>1]|0)>>>8&255;G=c[n>>2]|0;c[n>>2]=G+1;a[(c[o>>2]|0)+G|0]=i;i=c[k>>2]\
+|0;b[m>>1]=F>>>((16-i|0)>>>0)&65535;c[k>>2]=i-9;break}else{c[k>>2]=X+7;break}}}\
+}while(0);if(z<<16>>16==0){t=y;u=v;v=A;h=138;w=3;continue}t=y;u=v;v=A;h=C?6:7;w\
+=C?3:4}return}function be(a,c,d){a=a|0;c=c|0;d=d|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;f=b[c+2>>1]|0;g=f<<16>>16==0;b[c+(d+1<<2)+2>>1]\
+=-1;h=a+2752|0;i=a+2756|0;j=a+2748|0;k=g?3:4;l=g?138:7;g=f&65535;f=0;m=-1;L1447\
+:while(1){n=0;o=f;do{if((o|0)>(d|0)){break L1447}o=o+1|0;p=b[c+(o<<2)+2>>1]|0;q\
+=p&65535;n=n+1|0;r=(g|0)==(q|0);}while((n|0)<(l|0)&r);do{if((n|0)<(k|0)){s=a+26\
+84+(g<<2)|0;b[s>>1]=(e[s>>1]|0)+n&65535}else{if((g|0)==0){if((n|0)<11){b[h>>1]=\
+(b[h>>1]|0)+1&65535;break}else{b[i>>1]=(b[i>>1]|0)+1&65535;break}}else{if((g|0)\
+!=(m|0)){s=a+2684+(g<<2)|0;b[s>>1]=(b[s>>1]|0)+1&65535}b[j>>1]=(b[j>>1]|0)+1&65\
+535;break}}}while(0);if(p<<16>>16==0){k=3;l=138;m=g;g=q;f=o;continue}k=r?3:4;l=\
+r?6:7;m=g;g=q;f=o}return}function bf(a,b,c){a=a|0;b=b|0;c=c|0;return bk(Z(c,b)|\
+0)|0}function bg(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,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0;if((b|0)==0){return}a=b-8|0;d=a;e=c[330\
+6]|0;if(a>>>0<e>>>0){am()}f=c[b-4>>2]|0;g=f&3;if((g|0)==1){am()}h=f&-8;i=b+(h-8\
+)|0;j=i;L1479:do{if((f&1|0)==0){k=c[a>>2]|0;if((g|0)==0){return}l=-8-k|0;m=b+l|\
+0;n=m;o=k+h|0;if(m>>>0<e>>>0){am()}if((n|0)==(c[3307]|0)){p=b+(h-4)|0;if((c[p>>\
+2]&3|0)!=3){q=n;r=o;break}c[3304]=o;c[p>>2]=c[p>>2]&-2;c[b+(l+4)>>2]=o|1;c[i>>2\
+]=o;return}p=k>>>3;if(k>>>0<256){k=c[b+(l+8)>>2]|0;s=c[b+(l+12)>>2]|0;t=13248+(\
+p<<1<<2)|0;do{if((k|0)!=(t|0)){if(k>>>0<e>>>0){am()}if((c[k+12>>2]|0)==(n|0)){b\
+reak}am()}}while(0);if((s|0)==(k|0)){c[3302]=c[3302]&(1<<p^-1);q=n;r=o;break}do\
+{if((s|0)==(t|0)){u=s+8|0}else{if(s>>>0<e>>>0){am()}v=s+8|0;if((c[v>>2]|0)==(n|\
+0)){u=v;break}am()}}while(0);c[k+12>>2]=s;c[u>>2]=k;q=n;r=o;break}t=m;p=c[b+(l+\
+24)>>2]|0;v=c[b+(l+12)>>2]|0;do{if((v|0)==(t|0)){w=b+(l+20)|0;x=c[w>>2]|0;if((x\
+|0)==0){y=b+(l+16)|0;z=c[y>>2]|0;if((z|0)==0){A=0;break}else{B=z;C=y}}else{B=x;\
+C=w}while(1){w=B+20|0;x=c[w>>2]|0;if((x|0)!=0){B=x;C=w;continue}w=B+16|0;x=c[w>\
+>2]|0;if((x|0)==0){break}else{B=x;C=w}}if(C>>>0<e>>>0){am()}else{c[C>>2]=0;A=B;\
+break}}else{w=c[b+(l+8)>>2]|0;if(w>>>0<e>>>0){am()}x=w+12|0;if((c[x>>2]|0)!=(t|\
+0)){am()}y=v+8|0;if((c[y>>2]|0)==(t|0)){c[x>>2]=v;c[y>>2]=w;A=v;break}else{am()\
+}}}while(0);if((p|0)==0){q=n;r=o;break}v=b+(l+28)|0;m=13512+(c[v>>2]<<2)|0;do{i\
+f((t|0)==(c[m>>2]|0)){c[m>>2]=A;if((A|0)!=0){break}c[3303]=c[3303]&(1<<c[v>>2]^\
+-1);q=n;r=o;break L1479}else{if(p>>>0<(c[3306]|0)>>>0){am()}k=p+16|0;if((c[k>>2\
+]|0)==(t|0)){c[k>>2]=A}else{c[p+20>>2]=A}if((A|0)==0){q=n;r=o;break L1479}}}whi\
+le(0);if(A>>>0<(c[3306]|0)>>>0){am()}c[A+24>>2]=p;t=c[b+(l+16)>>2]|0;do{if((t|0\
+)!=0){if(t>>>0<(c[3306]|0)>>>0){am()}else{c[A+16>>2]=t;c[t+24>>2]=A;break}}}whi\
+le(0);t=c[b+(l+20)>>2]|0;if((t|0)==0){q=n;r=o;break}if(t>>>0<(c[3306]|0)>>>0){a\
+m()}else{c[A+20>>2]=t;c[t+24>>2]=A;q=n;r=o;break}}else{q=d;r=h}}while(0);d=q;if\
+(d>>>0>=i>>>0){am()}A=b+(h-4)|0;e=c[A>>2]|0;if((e&1|0)==0){am()}do{if((e&2|0)==\
+0){if((j|0)==(c[3308]|0)){B=(c[3305]|0)+r|0;c[3305]=B;c[3308]=q;c[q+4>>2]=B|1;i\
+f((q|0)==(c[3307]|0)){c[3307]=0;c[3304]=0}if(B>>>0<=(c[3309]|0)>>>0){return}do{\
+if((c[340]|0)==0){B=al(8)|0;if((B-1&B|0)==0){c[342]=B;c[341]=B;c[343]=-1;c[344]\
+=2097152;c[345]=0;c[3413]=0;c[340]=(aF(0)|0)&-16^1431655768;break}else{am()}}}w\
+hile(0);o=c[3308]|0;if((o|0)==0){return}n=c[3305]|0;do{if(n>>>0>40){l=c[342]|0;\
+B=Z((((n-41+l|0)>>>0)/(l>>>0)>>>0)-1|0,l)|0;C=o;u=13656;while(1){g=c[u>>2]|0;if\
+(g>>>0<=C>>>0){if((g+(c[u+4>>2]|0)|0)>>>0>C>>>0){D=u;break}}g=c[u+8>>2]|0;if((g\
+|0)==0){D=0;break}else{u=g}}if((c[D+12>>2]&8|0)!=0){break}u=aB(0)|0;C=D+4|0;if(\
+(u|0)!=((c[D>>2]|0)+(c[C>>2]|0)|0)){break}g=aB(-(B>>>0>2147483646?-2147483648-l\
+|0:B)|0)|0;a=aB(0)|0;if(!((g|0)!=-1&a>>>0<u>>>0)){break}g=u-a|0;if((u|0)==(a|0)\
+){break}c[C>>2]=(c[C>>2]|0)-g;c[3410]=(c[3410]|0)-g;C=c[3308]|0;a=(c[3305]|0)-g\
+|0;g=C;u=C+8|0;if((u&7|0)==0){E=0}else{E=-u&7}u=a-E|0;c[3308]=g+E;c[3305]=u;c[g\
++(E+4)>>2]=u|1;c[g+(a+4)>>2]=40;c[3309]=c[344];return}}while(0);if((c[3305]|0)>\
+>>0<=(c[3309]|0)>>>0){return}c[3309]=-1;return}if((j|0)==(c[3307]|0)){o=(c[3304\
+]|0)+r|0;c[3304]=o;c[3307]=q;c[q+4>>2]=o|1;c[d+o>>2]=o;return}o=(e&-8)+r|0;n=e>\
+>>3;L1613:do{if(e>>>0<256){a=c[b+h>>2]|0;g=c[b+(h|4)>>2]|0;u=13248+(n<<1<<2)|0;\
+do{if((a|0)!=(u|0)){if(a>>>0<(c[3306]|0)>>>0){am()}if((c[a+12>>2]|0)==(j|0)){br\
+eak}am()}}while(0);if((g|0)==(a|0)){c[3302]=c[3302]&(1<<n^-1);break}do{if((g|0)\
+==(u|0)){F=g+8|0}else{if(g>>>0<(c[3306]|0)>>>0){am()}B=g+8|0;if((c[B>>2]|0)==(j\
+|0)){F=B;break}am()}}while(0);c[a+12>>2]=g;c[F>>2]=a}else{u=i;B=c[b+(h+16)>>2]|\
+0;l=c[b+(h|4)>>2]|0;do{if((l|0)==(u|0)){C=b+(h+12)|0;f=c[C>>2]|0;if((f|0)==0){t\
+=b+(h+8)|0;p=c[t>>2]|0;if((p|0)==0){G=0;break}else{H=p;I=t}}else{H=f;I=C}while(\
+1){C=H+20|0;f=c[C>>2]|0;if((f|0)!=0){H=f;I=C;continue}C=H+16|0;f=c[C>>2]|0;if((\
+f|0)==0){break}else{H=f;I=C}}if(I>>>0<(c[3306]|0)>>>0){am()}else{c[I>>2]=0;G=H;\
+break}}else{C=c[b+h>>2]|0;if(C>>>0<(c[3306]|0)>>>0){am()}f=C+12|0;if((c[f>>2]|0\
+)!=(u|0)){am()}t=l+8|0;if((c[t>>2]|0)==(u|0)){c[f>>2]=l;c[t>>2]=C;G=l;break}els\
+e{am()}}}while(0);if((B|0)==0){break}l=b+(h+20)|0;a=13512+(c[l>>2]<<2)|0;do{if(\
+(u|0)==(c[a>>2]|0)){c[a>>2]=G;if((G|0)!=0){break}c[3303]=c[3303]&(1<<c[l>>2]^-1\
+);break L1613}else{if(B>>>0<(c[3306]|0)>>>0){am()}g=B+16|0;if((c[g>>2]|0)==(u|0\
+)){c[g>>2]=G}else{c[B+20>>2]=G}if((G|0)==0){break L1613}}}while(0);if(G>>>0<(c[\
+3306]|0)>>>0){am()}c[G+24>>2]=B;u=c[b+(h+8)>>2]|0;do{if((u|0)!=0){if(u>>>0<(c[3\
+306]|0)>>>0){am()}else{c[G+16>>2]=u;c[u+24>>2]=G;break}}}while(0);u=c[b+(h+12)>\
+>2]|0;if((u|0)==0){break}if(u>>>0<(c[3306]|0)>>>0){am()}else{c[G+20>>2]=u;c[u+2\
+4>>2]=G;break}}}while(0);c[q+4>>2]=o|1;c[d+o>>2]=o;if((q|0)!=(c[3307]|0)){J=o;b\
+reak}c[3304]=o;return}else{c[A>>2]=e&-2;c[q+4>>2]=r|1;c[d+r>>2]=r;J=r}}while(0)\
+;r=J>>>3;if(J>>>0<256){d=r<<1;e=13248+(d<<2)|0;A=c[3302]|0;G=1<<r;do{if((A&G|0)\
+==0){c[3302]=A|G;K=e;L=13248+(d+2<<2)|0}else{r=13248+(d+2<<2)|0;h=c[r>>2]|0;if(\
+h>>>0>=(c[3306]|0)>>>0){K=h;L=r;break}am()}}while(0);c[L>>2]=q;c[K+12>>2]=q;c[q\
++8>>2]=K;c[q+12>>2]=e;return}e=q;K=J>>>8;do{if((K|0)==0){M=0}else{if(J>>>0>1677\
+7215){M=31;break}L=(K+1048320|0)>>>16&8;d=K<<L;G=(d+520192|0)>>>16&4;A=d<<G;d=(\
+A+245760|0)>>>16&2;r=14-(G|L|d)+(A<<d>>>15)|0;M=J>>>((r+7|0)>>>0)&1|r<<1}}while\
+(0);K=13512+(M<<2)|0;c[q+28>>2]=M;c[q+20>>2]=0;c[q+16>>2]=0;r=c[3303]|0;d=1<<M;\
+do{if((r&d|0)==0){c[3303]=r|d;c[K>>2]=e;c[q+24>>2]=K;c[q+12>>2]=q;c[q+8>>2]=q}e\
+lse{if((M|0)==31){N=0}else{N=25-(M>>>1)|0}A=J<<N;L=c[K>>2]|0;while(1){if((c[L+4\
+>>2]&-8|0)==(J|0)){break}O=L+16+(A>>>31<<2)|0;G=c[O>>2]|0;if((G|0)==0){P=1200;b\
+reak}else{A=A<<1;L=G}}if((P|0)==1200){if(O>>>0<(c[3306]|0)>>>0){am()}else{c[O>>\
+2]=e;c[q+24>>2]=L;c[q+12>>2]=q;c[q+8>>2]=q;break}}A=L+8|0;o=c[A>>2]|0;G=c[3306]\
+|0;if(L>>>0<G>>>0){am()}if(o>>>0<G>>>0){am()}else{c[o+12>>2]=e;c[A>>2]=e;c[q+8>\
+>2]=o;c[q+12>>2]=L;c[q+24>>2]=0;break}}}while(0);q=(c[3310]|0)-1|0;c[3310]=q;if\
+((q|0)==0){Q=13664}else{return}while(1){q=c[Q>>2]|0;if((q|0)==0){break}else{Q=q\
++8|0}}c[3310]=-1;return}function bh(a,b,c){a=a|0;b=b|0;c=c|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;e=a>>>16;f=a&65535;if((c|0)==1){a=(d[b]|0)+f|0;g=a>>>0>65520?a-65521|0:a;a=\
+g+e|0;h=(a>>>0>65520?a+15|0:a)<<16|g;return h|0}if((b|0)==0){h=1;return h|0}if(\
+c>>>0<16){if((c|0)==0){i=f;j=e}else{g=f;a=b;k=c;l=e;while(1){m=k-1|0;n=(d[a]|0)\
++g|0;o=n+l|0;if((m|0)==0){i=n;j=o;break}else{g=n;a=a+1|0;k=m;l=o}}}h=(j>>>0)%65\
+521>>>0<<16|(i>>>0>65520?i-65521|0:i);return h|0}do{if(c>>>0>5551){i=f;j=b;l=c;\
+k=e;do{l=l-5552|0;a=347;g=k;o=j;m=i;while(1){n=(d[o]|0)+m|0;p=n+(d[o+1|0]|0)|0;\
+q=p+(d[o+2|0]|0)|0;r=q+(d[o+3|0]|0)|0;s=r+(d[o+4|0]|0)|0;t=s+(d[o+5|0]|0)|0;u=t\
++(d[o+6|0]|0)|0;v=u+(d[o+7|0]|0)|0;w=v+(d[o+8|0]|0)|0;x=w+(d[o+9|0]|0)|0;y=x+(d\
+[o+10|0]|0)|0;z=y+(d[o+11|0]|0)|0;A=z+(d[o+12|0]|0)|0;B=A+(d[o+13|0]|0)|0;C=B+(\
+d[o+14|0]|0)|0;D=C+(d[o+15|0]|0)|0;E=n+g+p+q+r+s+t+u+v+w+x+y+z+A+B+C+D|0;C=a-1|\
+0;if((C|0)==0){break}else{a=C;g=E;o=o+16|0;m=D}}j=j+5552|0;i=(D>>>0)%65521>>>0;\
+k=(E>>>0)%65521>>>0;}while(l>>>0>5551);if((l|0)==0){F=k;G=i;break}if(l>>>0>15){\
+H=i;I=j;J=l;K=k;L=1260}else{M=i;N=j;O=l;P=k;L=1261}}else{H=f;I=b;J=c;K=e;L=1260\
+}}while(0);if((L|0)==1260){while(1){L=0;Q=J-16|0;e=(d[I]|0)+H|0;c=e+(d[I+1|0]|0\
+)|0;b=c+(d[I+2|0]|0)|0;f=b+(d[I+3|0]|0)|0;E=f+(d[I+4|0]|0)|0;D=E+(d[I+5|0]|0)|0\
+;m=D+(d[I+6|0]|0)|0;o=m+(d[I+7|0]|0)|0;g=o+(d[I+8|0]|0)|0;a=g+(d[I+9|0]|0)|0;C=\
+a+(d[I+10|0]|0)|0;B=C+(d[I+11|0]|0)|0;A=B+(d[I+12|0]|0)|0;z=A+(d[I+13|0]|0)|0;y\
+=z+(d[I+14|0]|0)|0;R=y+(d[I+15|0]|0)|0;S=e+K+c+b+f+E+D+m+o+g+a+C+B+A+z+y+R|0;T=\
+I+16|0;if(Q>>>0>15){H=R;I=T;J=Q;K=S;L=1260}else{break}}if((Q|0)==0){U=R;V=S;L=1\
+262}else{M=R;N=T;O=Q;P=S;L=1261}}if((L|0)==1261){while(1){L=0;S=O-1|0;Q=(d[N]|0\
+)+M|0;T=Q+P|0;if((S|0)==0){U=Q;V=T;L=1262;break}else{M=Q;N=N+1|0;O=S;P=T;L=1261\
+}}}if((L|0)==1262){F=(V>>>0)%65521>>>0;G=(U>>>0)%65521>>>0}h=F<<16|G;return h|0\
+}function bi(a,b,e){a=a|0;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;if((b|0)==0){f=0;return f|0}g=a^-1;L1767:do{\
+if((e|0)==0){h=g}else{a=b;i=e;j=g;while(1){if((a&3|0)==0){break}k=c[4192+(((d[a\
+]|0)^j&255)<<2)>>2]^j>>>8;l=i-1|0;if((l|0)==0){h=k;break L1767}else{a=a+1|0;i=l\
+;j=k}}k=a;if(i>>>0>31){l=i;m=j;n=k;while(1){o=c[n>>2]^m;p=c[6240+((o>>>8&255)<<\
+2)>>2]^c[7264+((o&255)<<2)>>2]^c[5216+((o>>>16&255)<<2)>>2]^c[4192+(o>>>24<<2)>\
+>2]^c[n+4>>2];o=c[6240+((p>>>8&255)<<2)>>2]^c[7264+((p&255)<<2)>>2]^c[5216+((p>\
+>>16&255)<<2)>>2]^c[4192+(p>>>24<<2)>>2]^c[n+8>>2];p=c[6240+((o>>>8&255)<<2)>>2\
+]^c[7264+((o&255)<<2)>>2]^c[5216+((o>>>16&255)<<2)>>2]^c[4192+(o>>>24<<2)>>2]^c\
+[n+12>>2];o=c[6240+((p>>>8&255)<<2)>>2]^c[7264+((p&255)<<2)>>2]^c[5216+((p>>>16\
+&255)<<2)>>2]^c[4192+(p>>>24<<2)>>2]^c[n+16>>2];p=c[6240+((o>>>8&255)<<2)>>2]^c\
+[7264+((o&255)<<2)>>2]^c[5216+((o>>>16&255)<<2)>>2]^c[4192+(o>>>24<<2)>>2]^c[n+\
+20>>2];o=c[6240+((p>>>8&255)<<2)>>2]^c[7264+((p&255)<<2)>>2]^c[5216+((p>>>16&25\
+5)<<2)>>2]^c[4192+(p>>>24<<2)>>2]^c[n+24>>2];p=n+32|0;q=c[6240+((o>>>8&255)<<2)\
+>>2]^c[7264+((o&255)<<2)>>2]^c[5216+((o>>>16&255)<<2)>>2]^c[4192+(o>>>24<<2)>>2\
+]^c[n+28>>2];o=c[6240+((q>>>8&255)<<2)>>2]^c[7264+((q&255)<<2)>>2]^c[5216+((q>>\
+>16&255)<<2)>>2]^c[4192+(q>>>24<<2)>>2];q=l-32|0;if(q>>>0>31){l=q;m=o;n=p}else{\
+r=q;s=o;t=p;break}}}else{r=i;s=j;t=k}if(r>>>0>3){n=r;m=s;l=t;while(1){a=l+4|0;p\
+=c[l>>2]^m;o=c[6240+((p>>>8&255)<<2)>>2]^c[7264+((p&255)<<2)>>2]^c[5216+((p>>>1\
+6&255)<<2)>>2]^c[4192+(p>>>24<<2)>>2];p=n-4|0;if(p>>>0>3){n=p;m=o;l=a}else{u=p;\
+v=o;w=a;break}}}else{u=r;v=s;w=t}if((u|0)==0){h=v;break}l=v;m=u;n=w;while(1){k=\
+c[4192+(((d[n]|0)^l&255)<<2)>>2]^l>>>8;j=m-1|0;if((j|0)==0){h=k;break}else{l=k;\
+m=j;n=n+1|0}}}}while(0);f=h^-1;return f|0}function bj(d,f,g,h,j,k){d=d|0;f=f|0;\
+g=g|0;h=h|0;j=j|0;k=k|0;var 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;l=i;i=i+32|0;m=l|0;n=i;i=i+32|0;bm(m|0,0,\
+32);o=(g|0)==0;if(!o){p=0;do{q=m+(e[f+(p<<1)>>1]<<1)|0;b[q>>1]=(b[q>>1]|0)+1&65\
+535;p=p+1|0;}while(p>>>0<g>>>0)}p=c[j>>2]|0;q=15;while(1){if((q|0)==0){r=1290;b\
+reak}if((b[m+(q<<1)>>1]|0)==0){q=q-1|0}else{break}}if((r|0)==1290){s=c[h>>2]|0;\
+c[h>>2]=s+4;a[s|0]=64;a[s+1|0]=1;b[s+2>>1]=0;s=c[h>>2]|0;c[h>>2]=s+4;a[s|0]=64;\
+a[s+1|0]=1;b[s+2>>1]=0;c[j>>2]=1;t=0;i=l;return t|0}s=p>>>0>q>>>0?q:p;p=1;while\
+(1){if(p>>>0>=q>>>0){break}if((b[m+(p<<1)>>1]|0)==0){p=p+1|0}else{break}}u=s>>>\
+0<p>>>0?p:s;s=1;v=1;while(1){if(v>>>0>=16){break}w=(s<<1)-(e[m+(v<<1)>>1]|0)|0;\
+if((w|0)<0){t=-1;r=1339;break}else{s=w;v=v+1|0}}if((r|0)==1339){i=l;return t|0}\
+do{if((s|0)>0){if((d|0)!=0&(q|0)==1){break}else{t=-1}i=l;return t|0}}while(0);b\
+[n+2>>1]=0;s=b[m+2>>1]|0;b[n+4>>1]=s;v=(b[m+4>>1]|0)+s&65535;b[n+6>>1]=v;s=(b[m\
++6>>1]|0)+v&65535;b[n+8>>1]=s;v=(b[m+8>>1]|0)+s&65535;b[n+10>>1]=v;s=(b[m+10>>1\
+]|0)+v&65535;b[n+12>>1]=s;v=(b[m+12>>1]|0)+s&65535;b[n+14>>1]=v;s=(b[m+14>>1]|0\
+)+v&65535;b[n+16>>1]=s;v=(b[m+16>>1]|0)+s&65535;b[n+18>>1]=v;s=(b[m+18>>1]|0)+v\
+&65535;b[n+20>>1]=s;v=(b[m+20>>1]|0)+s&65535;b[n+22>>1]=v;s=(b[m+22>>1]|0)+v&65\
+535;b[n+24>>1]=s;v=(b[m+24>>1]|0)+s&65535;b[n+26>>1]=v;s=(b[m+26>>1]|0)+v&65535\
+;b[n+28>>1]=s;b[n+30>>1]=(b[m+28>>1]|0)+s&65535;if(!o){o=0;do{s=b[f+(o<<1)>>1]|\
+0;if(s<<16>>16!=0){v=n+((s&65535)<<1)|0;s=b[v>>1]|0;b[v>>1]=s+1&65535;b[k+((s&6\
+5535)<<1)>>1]=o&65535}o=o+1|0;}while(o>>>0<g>>>0)}do{if((d|0)==0){x=0;y=1<<u;z=\
+19;A=k;B=k;C=0}else if((d|0)==1){g=1<<u;if(g>>>0>851){t=1}else{x=1;y=g;z=256;A=\
+870;B=934;C=0;break}i=l;return t|0}else{g=1<<u;o=(d|0)==2;if(o&g>>>0>591){t=1}e\
+lse{x=0;y=g;z=-1;A=1512;B=1576;C=o;break}i=l;return t|0}}while(0);d=y-1|0;o=u&2\
+55;g=c[h>>2]|0;n=-1;s=0;v=y;y=0;w=u;D=0;E=p;L1825:while(1){p=1<<w;F=s;G=D;H=E;w\
+hile(1){I=H-y|0;J=I&255;K=b[k+(G<<1)>>1]|0;L=K&65535;do{if((L|0)<(z|0)){M=0;N=K\
+}else{if((L|0)<=(z|0)){M=96;N=0;break}M=b[A+(L<<1)>>1]&255;N=b[B+(L<<1)>>1]|0}}\
+while(0);L=1<<I;K=F>>>(y>>>0);O=p;while(1){P=O-L|0;Q=P+K|0;a[g+(Q<<2)|0]=M;a[g+\
+(Q<<2)+1|0]=J;b[g+(Q<<2)+2>>1]=N;if((O|0)==(L|0)){break}else{O=P}}O=1<<H-1;whil\
+e(1){if((O&F|0)==0){break}else{O=O>>>1}}if((O|0)==0){R=0}else{R=(O-1&F)+O|0}S=G\
++1|0;L=m+(H<<1)|0;K=(b[L>>1]|0)-1&65535;b[L>>1]=K;if(K<<16>>16==0){if((H|0)==(q\
+|0)){break L1825}T=e[f+(e[k+(S<<1)>>1]<<1)>>1]|0}else{T=H}if(T>>>0<=u>>>0){F=R;\
+G=S;H=T;continue}U=R&d;if((U|0)==(n|0)){F=R;G=S;H=T}else{break}}H=(y|0)==0?u:y;\
+G=g+(p<<2)|0;F=T-H|0;L1848:do{if(T>>>0<q>>>0){K=F;L=1<<F;I=T;while(1){P=L-(e[m+\
+(I<<1)>>1]|0)|0;if((P|0)<1){V=K;break L1848}Q=K+1|0;W=Q+H|0;if(W>>>0<q>>>0){K=Q\
+;L=P<<1;I=W}else{V=Q;break}}}else{V=F}}while(0);F=(1<<V)+v|0;if(x&F>>>0>851|C&F\
+>>>0>591){t=1;r=1343;break}a[(c[h>>2]|0)+(U<<2)|0]=V&255;a[(c[h>>2]|0)+(U<<2)+1\
+|0]=o;p=c[h>>2]|0;b[p+(U<<2)+2>>1]=(G-p|0)>>>2&65535;g=G;n=U;s=R;v=F;y=H;w=V;D=\
+S;E=T}if((r|0)==1343){i=l;return t|0}L1858:do{if((R|0)!=0){r=q;T=y;E=R;S=J;D=g;\
+while(1){do{if((T|0)==0){X=D;Y=S;Z=0;_=r}else{if((E&d|0)==(n|0)){X=D;Y=S;Z=T;_=\
+r;break}X=c[h>>2]|0;Y=o;Z=0;_=u}}while(0);V=E>>>(Z>>>0);a[X+(V<<2)|0]=64;a[X+(V\
+<<2)+1|0]=Y;b[X+(V<<2)+2>>1]=0;V=1<<_-1;while(1){if((V&E|0)==0){break}else{V=V>\
+>>1}}if((V|0)==0){break L1858}w=(V-1&E)+V|0;if((w|0)==0){break}else{r=_;T=Z;E=w\
+;S=Y;D=X}}}}while(0);c[h>>2]=(c[h>>2]|0)+(v<<2);c[j>>2]=u;t=0;i=l;return t|0}fu\
+nction bk(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,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,aa=0,a\
+b=0,ac=0,ad=0,ae=0,af=0,ag=0,ah=0,ai=0,aj=0,ak=0,an=0,ao=0,ap=0,aq=0,ar=0,as=0,\
+at=0,au=0,av=0,aw=0,ax=0,ay=0,az=0,aA=0,aD=0,aE=0,aG=0,aH=0,aI=0,aJ=0,aK=0,aL=0\
+;do{if(a>>>0<245){if(a>>>0<11){b=16}else{b=a+11&-8}d=b>>>3;e=c[3302]|0;f=e>>>(d\
+>>>0);if((f&3|0)!=0){g=(f&1^1)+d|0;h=g<<1;i=13248+(h<<2)|0;j=13248+(h+2<<2)|0;h\
+=c[j>>2]|0;k=h+8|0;l=c[k>>2]|0;do{if((i|0)==(l|0)){c[3302]=e&(1<<g^-1)}else{if(\
+l>>>0<(c[3306]|0)>>>0){am();return 0;return 0}m=l+12|0;if((c[m>>2]|0)==(h|0)){c\
+[m>>2]=i;c[j>>2]=l;break}else{am();return 0;return 0}}}while(0);l=g<<3;c[h+4>>2\
+]=l|3;j=h+(l|4)|0;c[j>>2]=c[j>>2]|1;n=k;return n|0}if(b>>>0<=(c[3304]|0)>>>0){o\
+=b;break}if((f|0)!=0){j=2<<d;l=f<<d&(j|-j);j=(l&-l)-1|0;l=j>>>12&16;i=j>>>(l>>>\
+0);j=i>>>5&8;m=i>>>(j>>>0);i=m>>>2&4;p=m>>>(i>>>0);m=p>>>1&2;q=p>>>(m>>>0);p=q>\
+>>1&1;r=(j|l|i|m|p)+(q>>>(p>>>0))|0;p=r<<1;q=13248+(p<<2)|0;m=13248+(p+2<<2)|0;\
+p=c[m>>2]|0;i=p+8|0;l=c[i>>2]|0;do{if((q|0)==(l|0)){c[3302]=e&(1<<r^-1)}else{if\
+(l>>>0<(c[3306]|0)>>>0){am();return 0;return 0}j=l+12|0;if((c[j>>2]|0)==(p|0)){\
+c[j>>2]=q;c[m>>2]=l;break}else{am();return 0;return 0}}}while(0);l=r<<3;m=l-b|0\
+;c[p+4>>2]=b|3;q=p;e=q+b|0;c[q+(b|4)>>2]=m|1;c[q+l>>2]=m;l=c[3304]|0;if((l|0)!=\
+0){q=c[3307]|0;d=l>>>3;l=d<<1;f=13248+(l<<2)|0;k=c[3302]|0;h=1<<d;do{if((k&h|0)\
+==0){c[3302]=k|h;s=f;t=13248+(l+2<<2)|0}else{d=13248+(l+2<<2)|0;g=c[d>>2]|0;if(\
+g>>>0>=(c[3306]|0)>>>0){s=g;t=d;break}am();return 0;return 0}}while(0);c[t>>2]=\
+q;c[s+12>>2]=q;c[q+8>>2]=s;c[q+12>>2]=f}c[3304]=m;c[3307]=e;n=i;return n|0}l=c[\
+3303]|0;if((l|0)==0){o=b;break}h=(l&-l)-1|0;l=h>>>12&16;k=h>>>(l>>>0);h=k>>>5&8\
+;p=k>>>(h>>>0);k=p>>>2&4;r=p>>>(k>>>0);p=r>>>1&2;d=r>>>(p>>>0);r=d>>>1&1;g=c[13\
+512+((h|l|k|p|r)+(d>>>(r>>>0))<<2)>>2]|0;r=g;d=g;p=(c[g+4>>2]&-8)-b|0;while(1){\
+g=c[r+16>>2]|0;if((g|0)==0){k=c[r+20>>2]|0;if((k|0)==0){break}else{u=k}}else{u=\
+g}g=(c[u+4>>2]&-8)-b|0;k=g>>>0<p>>>0;r=u;d=k?u:d;p=k?g:p}r=d;i=c[3306]|0;if(r>>\
+>0<i>>>0){am();return 0;return 0}e=r+b|0;m=e;if(r>>>0>=e>>>0){am();return 0;ret\
+urn 0}e=c[d+24>>2]|0;f=c[d+12>>2]|0;do{if((f|0)==(d|0)){q=d+20|0;g=c[q>>2]|0;if\
+((g|0)==0){k=d+16|0;l=c[k>>2]|0;if((l|0)==0){v=0;break}else{w=l;x=k}}else{w=g;x\
+=q}while(1){q=w+20|0;g=c[q>>2]|0;if((g|0)!=0){w=g;x=q;continue}q=w+16|0;g=c[q>>\
+2]|0;if((g|0)==0){break}else{w=g;x=q}}if(x>>>0<i>>>0){am();return 0;return 0}el\
+se{c[x>>2]=0;v=w;break}}else{q=c[d+8>>2]|0;if(q>>>0<i>>>0){am();return 0;return\
+ 0}g=q+12|0;if((c[g>>2]|0)!=(d|0)){am();return 0;return 0}k=f+8|0;if((c[k>>2]|0\
+)==(d|0)){c[g>>2]=f;c[k>>2]=q;v=f;break}else{am();return 0;return 0}}}while(0);\
+L1949:do{if((e|0)!=0){f=d+28|0;i=13512+(c[f>>2]<<2)|0;do{if((d|0)==(c[i>>2]|0))\
+{c[i>>2]=v;if((v|0)!=0){break}c[3303]=c[3303]&(1<<c[f>>2]^-1);break L1949}else{\
+if(e>>>0<(c[3306]|0)>>>0){am();return 0;return 0}q=e+16|0;if((c[q>>2]|0)==(d|0)\
+){c[q>>2]=v}else{c[e+20>>2]=v}if((v|0)==0){break L1949}}}while(0);if(v>>>0<(c[3\
+306]|0)>>>0){am();return 0;return 0}c[v+24>>2]=e;f=c[d+16>>2]|0;do{if((f|0)!=0)\
+{if(f>>>0<(c[3306]|0)>>>0){am();return 0;return 0}else{c[v+16>>2]=f;c[f+24>>2]=\
+v;break}}}while(0);f=c[d+20>>2]|0;if((f|0)==0){break}if(f>>>0<(c[3306]|0)>>>0){\
+am();return 0;return 0}else{c[v+20>>2]=f;c[f+24>>2]=v;break}}}while(0);if(p>>>0\
+<16){e=p+b|0;c[d+4>>2]=e|3;f=r+(e+4)|0;c[f>>2]=c[f>>2]|1}else{c[d+4>>2]=b|3;c[r\
++(b|4)>>2]=p|1;c[r+(p+b)>>2]=p;f=c[3304]|0;if((f|0)!=0){e=c[3307]|0;i=f>>>3;f=i\
+<<1;q=13248+(f<<2)|0;k=c[3302]|0;g=1<<i;do{if((k&g|0)==0){c[3302]=k|g;y=q;z=132\
+48+(f+2<<2)|0}else{i=13248+(f+2<<2)|0;l=c[i>>2]|0;if(l>>>0>=(c[3306]|0)>>>0){y=\
+l;z=i;break}am();return 0;return 0}}while(0);c[z>>2]=e;c[y+12>>2]=e;c[e+8>>2]=y\
+;c[e+12>>2]=q}c[3304]=p;c[3307]=m}f=d+8|0;if((f|0)==0){o=b;break}else{n=f}retur\
+n n|0}else{if(a>>>0>4294967231){o=-1;break}f=a+11|0;g=f&-8;k=c[3303]|0;if((k|0)\
+==0){o=g;break}r=-g|0;i=f>>>8;do{if((i|0)==0){A=0}else{if(g>>>0>16777215){A=31;\
+break}f=(i+1048320|0)>>>16&8;l=i<<f;h=(l+520192|0)>>>16&4;j=l<<h;l=(j+245760|0)\
+>>>16&2;B=14-(h|f|l)+(j<<l>>>15)|0;A=g>>>((B+7|0)>>>0)&1|B<<1}}while(0);i=c[135\
+12+(A<<2)>>2]|0;L1997:do{if((i|0)==0){C=0;D=r;E=0}else{if((A|0)==31){F=0}else{F\
+=25-(A>>>1)|0}d=0;m=r;p=i;q=g<<F;e=0;while(1){B=c[p+4>>2]&-8;l=B-g|0;if(l>>>0<m\
+>>>0){if((B|0)==(g|0)){C=p;D=l;E=p;break L1997}else{G=p;H=l}}else{G=d;H=m}l=c[p\
++20>>2]|0;B=c[p+16+(q>>>31<<2)>>2]|0;j=(l|0)==0|(l|0)==(B|0)?e:l;if((B|0)==0){C\
+=G;D=H;E=j;break}else{d=G;m=H;p=B;q=q<<1;e=j}}}}while(0);if((E|0)==0&(C|0)==0){\
+i=2<<A;r=k&(i|-i);if((r|0)==0){o=g;break}i=(r&-r)-1|0;r=i>>>12&16;e=i>>>(r>>>0)\
+;i=e>>>5&8;q=e>>>(i>>>0);e=q>>>2&4;p=q>>>(e>>>0);q=p>>>1&2;m=p>>>(q>>>0);p=m>>>\
+1&1;I=c[13512+((i|r|e|q|p)+(m>>>(p>>>0))<<2)>>2]|0}else{I=E}if((I|0)==0){J=D;K=\
+C}else{p=I;m=D;q=C;while(1){e=(c[p+4>>2]&-8)-g|0;r=e>>>0<m>>>0;i=r?e:m;e=r?p:q;\
+r=c[p+16>>2]|0;if((r|0)!=0){p=r;m=i;q=e;continue}r=c[p+20>>2]|0;if((r|0)==0){J=\
+i;K=e;break}else{p=r;m=i;q=e}}}if((K|0)==0){o=g;break}if(J>>>0>=((c[3304]|0)-g|\
+0)>>>0){o=g;break}q=K;m=c[3306]|0;if(q>>>0<m>>>0){am();return 0;return 0}p=q+g|\
+0;k=p;if(q>>>0>=p>>>0){am();return 0;return 0}e=c[K+24>>2]|0;i=c[K+12>>2]|0;do{\
+if((i|0)==(K|0)){r=K+20|0;d=c[r>>2]|0;if((d|0)==0){j=K+16|0;B=c[j>>2]|0;if((B|0\
+)==0){L=0;break}else{M=B;N=j}}else{M=d;N=r}while(1){r=M+20|0;d=c[r>>2]|0;if((d|\
+0)!=0){M=d;N=r;continue}r=M+16|0;d=c[r>>2]|0;if((d|0)==0){break}else{M=d;N=r}}i\
+f(N>>>0<m>>>0){am();return 0;return 0}else{c[N>>2]=0;L=M;break}}else{r=c[K+8>>2\
+]|0;if(r>>>0<m>>>0){am();return 0;return 0}d=r+12|0;if((c[d>>2]|0)!=(K|0)){am()\
+;return 0;return 0}j=i+8|0;if((c[j>>2]|0)==(K|0)){c[d>>2]=i;c[j>>2]=r;L=i;break\
+}else{am();return 0;return 0}}}while(0);L2047:do{if((e|0)!=0){i=K+28|0;m=13512+\
+(c[i>>2]<<2)|0;do{if((K|0)==(c[m>>2]|0)){c[m>>2]=L;if((L|0)!=0){break}c[3303]=c\
+[3303]&(1<<c[i>>2]^-1);break L2047}else{if(e>>>0<(c[3306]|0)>>>0){am();return 0\
+;return 0}r=e+16|0;if((c[r>>2]|0)==(K|0)){c[r>>2]=L}else{c[e+20>>2]=L}if((L|0)=\
+=0){break L2047}}}while(0);if(L>>>0<(c[3306]|0)>>>0){am();return 0;return 0}c[L\
++24>>2]=e;i=c[K+16>>2]|0;do{if((i|0)!=0){if(i>>>0<(c[3306]|0)>>>0){am();return \
+0;return 0}else{c[L+16>>2]=i;c[i+24>>2]=L;break}}}while(0);i=c[K+20>>2]|0;if((i\
+|0)==0){break}if(i>>>0<(c[3306]|0)>>>0){am();return 0;return 0}else{c[L+20>>2]=\
+i;c[i+24>>2]=L;break}}}while(0);do{if(J>>>0<16){e=J+g|0;c[K+4>>2]=e|3;i=q+(e+4)\
+|0;c[i>>2]=c[i>>2]|1}else{c[K+4>>2]=g|3;c[q+(g|4)>>2]=J|1;c[q+(J+g)>>2]=J;i=J>>\
+>3;if(J>>>0<256){e=i<<1;m=13248+(e<<2)|0;r=c[3302]|0;j=1<<i;do{if((r&j|0)==0){c\
+[3302]=r|j;O=m;P=13248+(e+2<<2)|0}else{i=13248+(e+2<<2)|0;d=c[i>>2]|0;if(d>>>0>\
+=(c[3306]|0)>>>0){O=d;P=i;break}am();return 0;return 0}}while(0);c[P>>2]=k;c[O+\
+12>>2]=k;c[q+(g+8)>>2]=O;c[q+(g+12)>>2]=m;break}e=p;j=J>>>8;do{if((j|0)==0){Q=0\
+}else{if(J>>>0>16777215){Q=31;break}r=(j+1048320|0)>>>16&8;i=j<<r;d=(i+520192|0\
+)>>>16&4;B=i<<d;i=(B+245760|0)>>>16&2;l=14-(d|r|i)+(B<<i>>>15)|0;Q=J>>>((l+7|0)\
+>>>0)&1|l<<1}}while(0);j=13512+(Q<<2)|0;c[q+(g+28)>>2]=Q;c[q+(g+20)>>2]=0;c[q+(\
+g+16)>>2]=0;m=c[3303]|0;l=1<<Q;if((m&l|0)==0){c[3303]=m|l;c[j>>2]=e;c[q+(g+24)>\
+>2]=j;c[q+(g+12)>>2]=e;c[q+(g+8)>>2]=e;break}if((Q|0)==31){R=0}else{R=25-(Q>>>1\
+)|0}l=J<<R;m=c[j>>2]|0;while(1){if((c[m+4>>2]&-8|0)==(J|0)){break}S=m+16+(l>>>3\
+1<<2)|0;j=c[S>>2]|0;if((j|0)==0){T=1495;break}else{l=l<<1;m=j}}if((T|0)==1495){\
+if(S>>>0<(c[3306]|0)>>>0){am();return 0;return 0}else{c[S>>2]=e;c[q+(g+24)>>2]=\
+m;c[q+(g+12)>>2]=e;c[q+(g+8)>>2]=e;break}}l=m+8|0;j=c[l>>2]|0;i=c[3306]|0;if(m>\
+>>0<i>>>0){am();return 0;return 0}if(j>>>0<i>>>0){am();return 0;return 0}else{c\
+[j+12>>2]=e;c[l>>2]=e;c[q+(g+8)>>2]=j;c[q+(g+12)>>2]=m;c[q+(g+24)>>2]=0;break}}\
+}while(0);q=K+8|0;if((q|0)==0){o=g;break}else{n=q}return n|0}}while(0);K=c[3304\
+]|0;if(o>>>0<=K>>>0){S=K-o|0;J=c[3307]|0;if(S>>>0>15){R=J;c[3307]=R+o;c[3304]=S\
+;c[R+(o+4)>>2]=S|1;c[R+K>>2]=S;c[J+4>>2]=o|3}else{c[3304]=0;c[3307]=0;c[J+4>>2]\
+=K|3;S=J+(K+4)|0;c[S>>2]=c[S>>2]|1}n=J+8|0;return n|0}J=c[3305]|0;if(o>>>0<J>>>\
+0){S=J-o|0;c[3305]=S;J=c[3308]|0;K=J;c[3308]=K+o;c[K+(o+4)>>2]=S|1;c[J+4>>2]=o|\
+3;n=J+8|0;return n|0}do{if((c[340]|0)==0){J=al(8)|0;if((J-1&J|0)==0){c[342]=J;c\
+[341]=J;c[343]=-1;c[344]=2097152;c[345]=0;c[3413]=0;c[340]=(aF(0)|0)&-16^143165\
+5768;break}else{am();return 0;return 0}}}while(0);J=o+48|0;S=c[342]|0;K=o+47|0;\
+R=S+K|0;Q=-S|0;S=R&Q;if(S>>>0<=o>>>0){n=0;return n|0}O=c[3412]|0;do{if((O|0)!=0\
+){P=c[3410]|0;L=P+S|0;if(L>>>0<=P>>>0|L>>>0>O>>>0){n=0}else{break}return n|0}}w\
+hile(0);L2139:do{if((c[3413]&4|0)==0){O=c[3308]|0;L2141:do{if((O|0)==0){T=1525}\
+else{L=O;P=13656;while(1){U=P|0;M=c[U>>2]|0;if(M>>>0<=L>>>0){V=P+4|0;if((M+(c[V\
+>>2]|0)|0)>>>0>L>>>0){break}}M=c[P+8>>2]|0;if((M|0)==0){T=1525;break L2141}else\
+{P=M}}if((P|0)==0){T=1525;break}L=R-(c[3305]|0)&Q;if(L>>>0>=2147483647){W=0;bre\
+ak}m=aB(L|0)|0;e=(m|0)==((c[U>>2]|0)+(c[V>>2]|0)|0);X=e?m:-1;Y=e?L:0;Z=m;_=L;T=\
+1534}}while(0);do{if((T|0)==1525){O=aB(0)|0;if((O|0)==-1){W=0;break}g=O;L=c[341\
+]|0;m=L-1|0;if((m&g|0)==0){$=S}else{$=S-g+(m+g&-L)|0}L=c[3410]|0;g=L+$|0;if(!($\
+>>>0>o>>>0&$>>>0<2147483647)){W=0;break}m=c[3412]|0;if((m|0)!=0){if(g>>>0<=L>>>\
+0|g>>>0>m>>>0){W=0;break}}m=aB($|0)|0;g=(m|0)==(O|0);X=g?O:-1;Y=g?$:0;Z=m;_=$;T\
+=1534}}while(0);L2161:do{if((T|0)==1534){m=-_|0;if((X|0)!=-1){aa=Y;ab=X;T=1545;\
+break L2139}do{if((Z|0)!=-1&_>>>0<2147483647&_>>>0<J>>>0){g=c[342]|0;O=K-_+g&-g\
+;if(O>>>0>=2147483647){ac=_;break}if((aB(O|0)|0)==-1){aB(m|0)|0;W=Y;break L2161\
+}else{ac=O+_|0;break}}else{ac=_}}while(0);if((Z|0)==-1){W=Y}else{aa=ac;ab=Z;T=1\
+545;break L2139}}}while(0);c[3413]=c[3413]|4;ad=W;T=1542}else{ad=0;T=1542}}whil\
+e(0);do{if((T|0)==1542){if(S>>>0>=2147483647){break}W=aB(S|0)|0;Z=aB(0)|0;if(!(\
+(Z|0)!=-1&(W|0)!=-1&W>>>0<Z>>>0)){break}ac=Z-W|0;Z=ac>>>0>(o+40|0)>>>0;Y=Z?W:-1\
+;if((Y|0)!=-1){aa=Z?ac:ad;ab=Y;T=1545}}}while(0);do{if((T|0)==1545){ad=(c[3410]\
+|0)+aa|0;c[3410]=ad;if(ad>>>0>(c[3411]|0)>>>0){c[3411]=ad}ad=c[3308]|0;L2181:do\
+{if((ad|0)==0){S=c[3306]|0;if((S|0)==0|ab>>>0<S>>>0){c[3306]=ab}c[3414]=ab;c[34\
+15]=aa;c[3417]=0;c[3311]=c[340];c[3310]=-1;S=0;do{Y=S<<1;ac=13248+(Y<<2)|0;c[13\
+248+(Y+3<<2)>>2]=ac;c[13248+(Y+2<<2)>>2]=ac;S=S+1|0;}while(S>>>0<32);S=ab+8|0;i\
+f((S&7|0)==0){ae=0}else{ae=-S&7}S=aa-40-ae|0;c[3308]=ab+ae;c[3305]=S;c[ab+(ae+4\
+)>>2]=S|1;c[ab+(aa-36)>>2]=40;c[3309]=c[344]}else{S=13656;while(1){af=c[S>>2]|0\
+;ag=S+4|0;ah=c[ag>>2]|0;if((ab|0)==(af+ah|0)){T=1557;break}ac=c[S+8>>2]|0;if((a\
+c|0)==0){break}else{S=ac}}do{if((T|0)==1557){if((c[S+12>>2]&8|0)!=0){break}ac=a\
+d;if(!(ac>>>0>=af>>>0&ac>>>0<ab>>>0)){break}c[ag>>2]=ah+aa;ac=c[3308]|0;Y=(c[33\
+05]|0)+aa|0;Z=ac;W=ac+8|0;if((W&7|0)==0){ai=0}else{ai=-W&7}W=Y-ai|0;c[3308]=Z+a\
+i;c[3305]=W;c[Z+(ai+4)>>2]=W|1;c[Z+(Y+4)>>2]=40;c[3309]=c[344];break L2181}}whi\
+le(0);if(ab>>>0<(c[3306]|0)>>>0){c[3306]=ab}S=ab+aa|0;Y=13656;while(1){aj=Y|0;i\
+f((c[aj>>2]|0)==(S|0)){T=1567;break}Z=c[Y+8>>2]|0;if((Z|0)==0){break}else{Y=Z}}\
+do{if((T|0)==1567){if((c[Y+12>>2]&8|0)!=0){break}c[aj>>2]=ab;S=Y+4|0;c[S>>2]=(c\
+[S>>2]|0)+aa;S=ab+8|0;if((S&7|0)==0){ak=0}else{ak=-S&7}S=ab+(aa+8)|0;if((S&7|0)\
+==0){an=0}else{an=-S&7}S=ab+(an+aa)|0;Z=S;W=ak+o|0;ac=ab+W|0;_=ac;K=S-(ab+ak)-o\
+|0;c[ab+(ak+4)>>2]=o|3;do{if((Z|0)==(c[3308]|0)){J=(c[3305]|0)+K|0;c[3305]=J;c[\
+3308]=_;c[ab+(W+4)>>2]=J|1}else{if((Z|0)==(c[3307]|0)){J=(c[3304]|0)+K|0;c[3304\
+]=J;c[3307]=_;c[ab+(W+4)>>2]=J|1;c[ab+(J+W)>>2]=J;break}J=aa+4|0;X=c[ab+(J+an)>\
+>2]|0;if((X&3|0)==1){$=X&-8;V=X>>>3;L2226:do{if(X>>>0<256){U=c[ab+((an|8)+aa)>>\
+2]|0;Q=c[ab+(aa+12+an)>>2]|0;R=13248+(V<<1<<2)|0;do{if((U|0)!=(R|0)){if(U>>>0<(\
+c[3306]|0)>>>0){am();return 0;return 0}if((c[U+12>>2]|0)==(Z|0)){break}am();ret\
+urn 0;return 0}}while(0);if((Q|0)==(U|0)){c[3302]=c[3302]&(1<<V^-1);break}do{if\
+((Q|0)==(R|0)){ao=Q+8|0}else{if(Q>>>0<(c[3306]|0)>>>0){am();return 0;return 0}m\
+=Q+8|0;if((c[m>>2]|0)==(Z|0)){ao=m;break}am();return 0;return 0}}while(0);c[U+1\
+2>>2]=Q;c[ao>>2]=U}else{R=S;m=c[ab+((an|24)+aa)>>2]|0;P=c[ab+(aa+12+an)>>2]|0;d\
+o{if((P|0)==(R|0)){O=an|16;g=ab+(J+O)|0;L=c[g>>2]|0;if((L|0)==0){e=ab+(O+aa)|0;\
+O=c[e>>2]|0;if((O|0)==0){ap=0;break}else{aq=O;ar=e}}else{aq=L;ar=g}while(1){g=a\
+q+20|0;L=c[g>>2]|0;if((L|0)!=0){aq=L;ar=g;continue}g=aq+16|0;L=c[g>>2]|0;if((L|\
+0)==0){break}else{aq=L;ar=g}}if(ar>>>0<(c[3306]|0)>>>0){am();return 0;return 0}\
+else{c[ar>>2]=0;ap=aq;break}}else{g=c[ab+((an|8)+aa)>>2]|0;if(g>>>0<(c[3306]|0)\
+>>>0){am();return 0;return 0}L=g+12|0;if((c[L>>2]|0)!=(R|0)){am();return 0;retu\
+rn 0}e=P+8|0;if((c[e>>2]|0)==(R|0)){c[L>>2]=P;c[e>>2]=g;ap=P;break}else{am();re\
+turn 0;return 0}}}while(0);if((m|0)==0){break}P=ab+(aa+28+an)|0;U=13512+(c[P>>2\
+]<<2)|0;do{if((R|0)==(c[U>>2]|0)){c[U>>2]=ap;if((ap|0)!=0){break}c[3303]=c[3303\
+]&(1<<c[P>>2]^-1);break L2226}else{if(m>>>0<(c[3306]|0)>>>0){am();return 0;retu\
+rn 0}Q=m+16|0;if((c[Q>>2]|0)==(R|0)){c[Q>>2]=ap}else{c[m+20>>2]=ap}if((ap|0)==0\
+){break L2226}}}while(0);if(ap>>>0<(c[3306]|0)>>>0){am();return 0;return 0}c[ap\
++24>>2]=m;R=an|16;P=c[ab+(R+aa)>>2]|0;do{if((P|0)!=0){if(P>>>0<(c[3306]|0)>>>0)\
+{am();return 0;return 0}else{c[ap+16>>2]=P;c[P+24>>2]=ap;break}}}while(0);P=c[a\
+b+(J+R)>>2]|0;if((P|0)==0){break}if(P>>>0<(c[3306]|0)>>>0){am();return 0;return\
+ 0}else{c[ap+20>>2]=P;c[P+24>>2]=ap;break}}}while(0);as=ab+(($|an)+aa)|0;at=$+K\
+|0}else{as=Z;at=K}J=as+4|0;c[J>>2]=c[J>>2]&-2;c[ab+(W+4)>>2]=at|1;c[ab+(at+W)>>\
+2]=at;J=at>>>3;if(at>>>0<256){V=J<<1;X=13248+(V<<2)|0;P=c[3302]|0;m=1<<J;do{if(\
+(P&m|0)==0){c[3302]=P|m;au=X;av=13248+(V+2<<2)|0}else{J=13248+(V+2<<2)|0;U=c[J>\
+>2]|0;if(U>>>0>=(c[3306]|0)>>>0){au=U;av=J;break}am();return 0;return 0}}while(\
+0);c[av>>2]=_;c[au+12>>2]=_;c[ab+(W+8)>>2]=au;c[ab+(W+12)>>2]=X;break}V=ac;m=at\
+>>>8;do{if((m|0)==0){aw=0}else{if(at>>>0>16777215){aw=31;break}P=(m+1048320|0)>\
+>>16&8;$=m<<P;J=($+520192|0)>>>16&4;U=$<<J;$=(U+245760|0)>>>16&2;Q=14-(J|P|$)+(\
+U<<$>>>15)|0;aw=at>>>((Q+7|0)>>>0)&1|Q<<1}}while(0);m=13512+(aw<<2)|0;c[ab+(W+2\
+8)>>2]=aw;c[ab+(W+20)>>2]=0;c[ab+(W+16)>>2]=0;X=c[3303]|0;Q=1<<aw;if((X&Q|0)==0\
+){c[3303]=X|Q;c[m>>2]=V;c[ab+(W+24)>>2]=m;c[ab+(W+12)>>2]=V;c[ab+(W+8)>>2]=V;br\
+eak}if((aw|0)==31){ax=0}else{ax=25-(aw>>>1)|0}Q=at<<ax;X=c[m>>2]|0;while(1){if(\
+(c[X+4>>2]&-8|0)==(at|0)){break}ay=X+16+(Q>>>31<<2)|0;m=c[ay>>2]|0;if((m|0)==0)\
+{T=1640;break}else{Q=Q<<1;X=m}}if((T|0)==1640){if(ay>>>0<(c[3306]|0)>>>0){am();\
+return 0;return 0}else{c[ay>>2]=V;c[ab+(W+24)>>2]=X;c[ab+(W+12)>>2]=V;c[ab+(W+8\
+)>>2]=V;break}}Q=X+8|0;m=c[Q>>2]|0;$=c[3306]|0;if(X>>>0<$>>>0){am();return 0;re\
+turn 0}if(m>>>0<$>>>0){am();return 0;return 0}else{c[m+12>>2]=V;c[Q>>2]=V;c[ab+\
+(W+8)>>2]=m;c[ab+(W+12)>>2]=X;c[ab+(W+24)>>2]=0;break}}}while(0);n=ab+(ak|8)|0;\
+return n|0}}while(0);Y=ad;W=13656;while(1){az=c[W>>2]|0;if(az>>>0<=Y>>>0){aA=c[\
+W+4>>2]|0;aD=az+aA|0;if(aD>>>0>Y>>>0){break}}W=c[W+8>>2]|0}W=az+(aA-39)|0;if((W\
+&7|0)==0){aE=0}else{aE=-W&7}W=az+(aA-47+aE)|0;ac=W>>>0<(ad+16|0)>>>0?Y:W;W=ac+8\
+|0;_=ab+8|0;if((_&7|0)==0){aG=0}else{aG=-_&7}_=aa-40-aG|0;c[3308]=ab+aG;c[3305]\
+=_;c[ab+(aG+4)>>2]=_|1;c[ab+(aa-36)>>2]=40;c[3309]=c[344];c[ac+4>>2]=27;c[W>>2]\
+=c[3414];c[W+4>>2]=c[13660>>2];c[W+8>>2]=c[13664>>2];c[W+12>>2]=c[13668>>2];c[3\
+414]=ab;c[3415]=aa;c[3417]=0;c[3416]=W;W=ac+28|0;c[W>>2]=7;if((ac+32|0)>>>0<aD>\
+>>0){_=W;while(1){W=_+4|0;c[W>>2]=7;if((_+8|0)>>>0<aD>>>0){_=W}else{break}}}if(\
+(ac|0)==(Y|0)){break}_=ac-ad|0;W=Y+(_+4)|0;c[W>>2]=c[W>>2]&-2;c[ad+4>>2]=_|1;c[\
+Y+_>>2]=_;W=_>>>3;if(_>>>0<256){K=W<<1;Z=13248+(K<<2)|0;S=c[3302]|0;m=1<<W;do{i\
+f((S&m|0)==0){c[3302]=S|m;aH=Z;aI=13248+(K+2<<2)|0}else{W=13248+(K+2<<2)|0;Q=c[\
+W>>2]|0;if(Q>>>0>=(c[3306]|0)>>>0){aH=Q;aI=W;break}am();return 0;return 0}}whil\
+e(0);c[aI>>2]=ad;c[aH+12>>2]=ad;c[ad+8>>2]=aH;c[ad+12>>2]=Z;break}K=ad;m=_>>>8;\
+do{if((m|0)==0){aJ=0}else{if(_>>>0>16777215){aJ=31;break}S=(m+1048320|0)>>>16&8\
+;Y=m<<S;ac=(Y+520192|0)>>>16&4;W=Y<<ac;Y=(W+245760|0)>>>16&2;Q=14-(ac|S|Y)+(W<<\
+Y>>>15)|0;aJ=_>>>((Q+7|0)>>>0)&1|Q<<1}}while(0);m=13512+(aJ<<2)|0;c[ad+28>>2]=a\
+J;c[ad+20>>2]=0;c[ad+16>>2]=0;Z=c[3303]|0;Q=1<<aJ;if((Z&Q|0)==0){c[3303]=Z|Q;c[\
+m>>2]=K;c[ad+24>>2]=m;c[ad+12>>2]=ad;c[ad+8>>2]=ad;break}if((aJ|0)==31){aK=0}el\
+se{aK=25-(aJ>>>1)|0}Q=_<<aK;Z=c[m>>2]|0;while(1){if((c[Z+4>>2]&-8|0)==(_|0)){br\
+eak}aL=Z+16+(Q>>>31<<2)|0;m=c[aL>>2]|0;if((m|0)==0){T=1675;break}else{Q=Q<<1;Z=\
+m}}if((T|0)==1675){if(aL>>>0<(c[3306]|0)>>>0){am();return 0;return 0}else{c[aL>\
+>2]=K;c[ad+24>>2]=Z;c[ad+12>>2]=ad;c[ad+8>>2]=ad;break}}Q=Z+8|0;_=c[Q>>2]|0;m=c\
+[3306]|0;if(Z>>>0<m>>>0){am();return 0;return 0}if(_>>>0<m>>>0){am();return 0;r\
+eturn 0}else{c[_+12>>2]=K;c[Q>>2]=K;c[ad+8>>2]=_;c[ad+12>>2]=Z;c[ad+24>>2]=0;br\
+eak}}}while(0);ad=c[3305]|0;if(ad>>>0<=o>>>0){break}_=ad-o|0;c[3305]=_;ad=c[330\
+8]|0;Q=ad;c[3308]=Q+o;c[Q+(o+4)>>2]=_|1;c[ad+4>>2]=o|3;n=ad+8|0;return n|0}}whi\
+le(0);c[(aC()|0)>>2]=12;n=0;return n|0}function bl(b){b=b|0;var c=0;c=b;while(a\
+[c]|0){c=c+1|0}return c-b|0}function bm(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=\
+0;f=b+e|0;if((e|0)>=20){d=d&255;e=b&3;g=d|d<<8|d<<16|d<<24;h=f&~3;if(e){e=b+4-e\
+|0;while((b|0)<(e|0)){a[b]=d;b=b+1|0}}while((b|0)<(h|0)){c[b>>2]=g;b=b+4|0}}whi\
+le((b|0)<(f|0)){a[b]=d;b=b+1|0}}function bn(b,d,e){b=b|0;d=d|0;e=e|0;var f=0;f=\
+b|0;if((b&3)==(d&3)){while(b&3){if((e|0)==0)return f|0;a[b]=a[d]|0;b=b+1|0;d=d+\
+1|0;e=e-1|0}while((e|0)>=4){c[b>>2]=c[d>>2];b=b+4|0;d=d+4|0;e=e-4|0}}while((e|0\
+)>0){a[b]=a[d]|0;b=b+1|0;d=d+1|0;e=e-1|0}return f|0}function bo(a,b){a=a|0;b=b|\
+0;return aH[a&1](b|0)|0}function bp(a,b){a=a|0;b=b|0;aI[a&1](b|0)}function bq(a\
+,b,c){a=a|0;b=b|0;c=c|0;aJ[a&3](b|0,c|0)}function br(a,b,c,d){a=a|0;b=b|0;c=c|0\
+;d=d|0;return aK[a&3](b|0,c|0,d|0)|0}function bs(a){a=a|0;aL[a&1]()}function bt\
+(a,b,c){a=a|0;b=b|0;c=c|0;return aM[a&7](b|0,c|0)|0}function bu(a){a=a|0;_(0);r\
+eturn 0}function bv(a){a=a|0;_(1)}function bw(a,b){a=a|0;b=b|0;_(2)}function bx\
+(a,b,c){a=a|0;b=b|0;c=c|0;_(3);return 0}function by(){_(4)}function bz(a,b){a=a\
+|0;b=b|0;_(5);return 0} var aH=[bu,bu];var aI=[bv,bv];var aJ=[bw,bw,bg,bw];var \
+aK=[bx,bx,bf,bx];var aL=[by,by];var aM=[bz,bz,a5,bz,a8,bz,a4,bz];return{_malloc\
+:bk,_strlen:bl,_memcpy:bn,_main:a2,_memset:bm,stackAlloc:aN,stackSave:aO,stackR\
+estore:aP,setThrew:aQ,setTempRet0:aT,setTempRet1:aU,setTempRet2:aV,setTempRet3:\
+aW,setTempRet4:aX,setTempRet5:aY,setTempRet6:aZ,setTempRet7:a_,setTempRet8:a$,s\
+etTempRet9:a0,dynCall_ii:bo,dynCall_vi:bp,dynCall_vii:bq,dynCall_iiii:br,dynCal\
+l_v:bs,dynCall_iii:bt} })({Math:Math,Int8Array:Int8Array,Int16Array:Int16Array,\
+Int32Array:Int32Array,Uint8Array:Uint8Array,Uint16Array:Uint16Array,Uint32Array\
+:Uint32Array,Float32Array:Float32Array,Float64Array:Float64Array},{abort:F,asse\
+rt:z,asmPrintInt:function(a,b){Module.print("int "+a+","+b)},asmPrintFloat:func\
+tion(a,b){Module.print("float "+a+","+b)},min:Wb,invoke_ii:function(a,b){try{re\
+turn Module.dynCall_ii(a,b)}catch(c){"number"!==typeof c&&"longjmp"!==c&&j(c),$\
+.setThrew(1,0)}}, invoke_vi:function(a,b){try{Module.dynCall_vi(a,b)}catch(c){"\
+number"!==typeof c&&"longjmp"!==c&&j(c),$.setThrew(1,0)}},invoke_vii:function(a\
+,b,c){try{Module.dynCall_vii(a,b,c)}catch(d){"number"!==typeof d&&"longjmp"!==d\
+&&j(d),$.setThrew(1,0)}},invoke_iiii:function(a,b,c,d){try{return Module.dynCal\
+l_iiii(a,b,c,d)}catch(e){"number"!==typeof e&&"longjmp"!==e&&j(e),$.setThrew(1,\
+0)}},invoke_v:function(a){try{Module.dynCall_v(a)}catch(b){"number"!==typeof b&\
+&"longjmp"!==b&&j(b),$.setThrew(1,0)}},invoke_iii:function(a, b,c){try{return M\
+odule.dynCall_iii(a,b,c)}catch(d){"number"!==typeof d&&"longjmp"!==d&&j(d),$.se\
+tThrew(1,0)}},_strncmp:Db,_llvm_lifetime_end:u(),_sysconf:function(a){switch(a)\
+{case 8:return 4096;case 54:case 56:case 21:case 61:case 63:case 22:case 67:cas\
+e 23:case 24:case 25:case 26:case 27:case 69:case 28:case 101:case 70:case 71:c\
+ase 29:case 30:case 199:case 75:case 76:case 32:case 43:case 44:case 80:case 46\
+:case 47:case 45:case 48:case 49:case 42:case 82:case 33:case 7:case 108:case 1\
+09:case 107:case 112:case 119:case 121:return 200809; case 13:case 104:case 94:\
+case 95:case 34:case 35:case 77:case 81:case 83:case 84:case 85:case 86:case 87\
+:case 88:case 89:case 90:case 91:case 94:case 95:case 110:case 111:case 113:cas\
+e 114:case 115:case 116:case 117:case 118:case 120:case 40:case 16:case 79:case\
+ 19:return-1;case 92:case 93:case 5:case 72:case 6:case 74:case 92:case 93:case\
+ 96:case 97:case 98:case 99:case 102:case 103:case 105:return 1;case 38:case 66\
+:case 50:case 51:case 4:return 1024;case 15:case 64:case 41:return 32;case 55:c\
+ase 37:case 17:return 2147483647; case 18:case 1:return 47839;case 59:case 57:r\
+eturn 99;case 68:case 58:return 2048;case 0:return 2097152;case 3:return 65536;\
+case 14:return 32768;case 73:return 32767;case 39:return 16384;case 60:return 1\
+E3;case 106:return 700;case 52:return 256;case 62:return 255;case 2:return 100;\
+case 65:return 64;case 36:return 20;case 100:return 16;case 20:return 6;case 53\
+:return 4;case 10:return 1}V(db);return-1},_abort:function(){G=n;j("abort() at \
+"+Error().stack)},_fprintf:Cb,_printf:function(a,b){},__reallyNegative:Ab,_fput\
+c:Hb,_puts:function(a){},___setErrNo:V,_fwrite:yb,_send:vb,_write:xb,_fputs:Gb,\
+__formatString:Bb,_free:u(),___assert_func:function(a,b,c,d){j("Assertion faile\
+d: "+(d?I(d):"unknown condition")+", at: "+[a?I(a):"unknown filename",b,c?I(c):\
+"unknown function"]+" at "+Error().stack)},_pwrite:wb,_sbrk:Z,___errno_location\
+:function(){return eb},_llvm_lifetime_start:u(),_llvm_bswap_i32:function(a){ret\
+urn(a&255)<<24|(a>> 8&255)<<16|(a>>16&255)<<8|a>>>24},_time:function(a){var b=M\
+ath.floor(Date.now()/1E3);a&&(L[a>>2]=b);return b},_strcmp:function(a,b){return\
+ Db(a,b,qa)},STACKTOP:w,STACK_MAX:Ja,tempDoublePtr:Za,ABORT:G,NaN:NaN,Infinity:\
+Infinity},R),Ea=Module._malloc=$._malloc,zb=Module._strlen=$._strlen,Fb=Module.\
+_memcpy=$._memcpy;Module._main=$._main;var Eb=Module._memset=$._memset;Module.d\
+ynCall_ii=$.dynCall_ii;Module.dynCall_vi=$.dynCall_vi;Module.dynCall_vii=$.dynC\
+all_vii;Module.dynCall_iiii=$.dynCall_iiii; Module.dynCall_v=$.dynCall_v;Module\
+.dynCall_iii=$.dynCall_iii;na=function(a){return $.stackAlloc(a)};ha=function()\
+{return $.stackSave()};ia=function(a){$.stackRestore(a)}; Module.callMain=funct\
+ion(a){function b(){for(var a=0;3>a;a++)d.push(0)}z(0==T,"cannot call main when\
+ async dependencies remain! (listen on __ATMAIN__)");z(!Module.preRun||0==Modul\
+e.preRun.length,"cannot call main when preRun functions remain to be called");a\
+=a||[];Pa||(Pa=n,La(Ma));var c=a.length+1,d=[P(S("/bin/this.program"),"i8",0)];\
+b();for(var e=0;e<c-1;e+=1)d.push(P(S(a[e]),"i8",0)),b();d.push(0);var d=P(d,"i\
+32",0),f,a=w;try{f=Module._main(c,d,0)}catch(g){if("ExitStatus"==g.name)return \
+g.status; "SimulateInfiniteLoop"==g?Module.noExitRuntime=n:j(g)}finally{w=a}ret\
+urn f}; function Ya(a){function b(){Pa||(Pa=n,La(Ma));La(Na);var b=0;Ta=n;Modul\
+e._main&&Xa&&(b=Module.callMain(a),Module.noExitRuntime||La(Oa));if(Module.post\
+Run)for("function"==typeof Module.postRun&&(Module.postRun=[Module.postRun]);0<\
+Module.postRun.length;)Module.postRun.pop()();return b}a=a||Module.arguments;if\
+(0<T)return Module.g("run() called, but dependencies remain, so not running"),0\
+;if(Module.preRun){"function"==typeof Module.preRun&&(Module.preRun=[Module.pre\
+Run]);var c=Module.preRun;Module.preRun= [];for(var d=c.length-1;0<=d;d--)c[d](\
+);if(0<T)return 0}return Module.setStatus?(Module.setStatus("Running..."),setTi\
+meout(function(){setTimeout(function(){Module.setStatus("")},1);G||b()},1),0):b\
+()}Module.run=Module.X=Ya;if(Module.preInit)for("function"==typeof Module.preIn\
+it&&(Module.preInit=[Module.preInit]);0<Module.preInit.length;)Module.preInit.p\
+op()();var Xa=n;Module.noInitialRun&&(Xa=t); ');}
diff --git a/js/src/octane/zlib.js b/js/src/octane/zlib.js
new file mode 100644
index 0000000000..249eff445b
--- /dev/null
+++ b/js/src/octane/zlib.js
@@ -0,0 +1,176 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following
+// disclaimer in the documentation and/or other materials provided
+// with the distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived
+// from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+new BenchmarkSuite('zlib', [152815148], [
+ new Benchmark('zlib', false, true, 10,
+ runZlib, undefined, tearDownZlib, null, 3)]);
+
+// Generate 100kB pseudo-random bytes (compressed 25906 bytes) and
+// compress/decompress them 60 times.
+var zlibEval = eval;
+function runZlib() {
+ if (typeof Ya != "function") {
+ InitializeZlibBenchmark();
+ }
+ Ya(["1"]);
+}
+
+function tearDownZlib() {
+ delete $;
+ delete $a;
+ delete Aa;
+ delete Ab;
+ delete Ba;
+ delete Bb;
+ delete C;
+ delete Ca;
+ delete Cb;
+ delete D;
+ delete Da;
+ delete Db;
+ delete Ea;
+ delete Eb;
+ delete F;
+ delete Fa;
+ delete Fb;
+ delete G;
+ delete Ga;
+ delete Gb;
+ delete Ha;
+ delete Hb;
+ delete I;
+ delete Ia;
+ delete Ib;
+ delete J;
+ delete Ja;
+ delete Jb;
+ delete Ka;
+ delete Kb;
+ delete L;
+ delete La;
+ delete Lb;
+ delete Ma;
+ delete Mb;
+ delete Module;
+ delete N;
+ delete Na;
+ delete Nb;
+ delete O;
+ delete Oa;
+ delete Ob;
+ delete P;
+ delete Pa;
+ delete Pb;
+ delete Q;
+ delete Qa;
+ delete Qb;
+ delete R;
+ delete Ra;
+ delete Rb;
+ delete S;
+ delete Sa;
+ delete Sb;
+ delete T;
+ delete Ta;
+ delete Tb;
+ delete U;
+ delete Ua;
+ delete Ub;
+ delete V;
+ delete Va;
+ delete Vb;
+ delete W;
+ delete Wa;
+ delete Wb;
+ delete X;
+ delete Xa;
+ delete Y;
+ delete Ya;
+ delete Z;
+ delete Za;
+ delete ab;
+ delete ba;
+ delete bb;
+ delete ca;
+ delete cb;
+ delete da;
+ delete db;
+ delete ea;
+ delete eb;
+ delete fa;
+ delete fb;
+ delete ga;
+ delete gb;
+ delete ha;
+ delete hb;
+ delete ia;
+ delete ib;
+ delete j;
+ delete ja;
+ delete jb;
+ delete k;
+ delete ka;
+ delete kb;
+ delete la;
+ delete lb;
+ delete ma;
+ delete mb;
+ delete n;
+ delete na;
+ delete nb;
+ delete oa;
+ delete ob;
+ delete pa;
+ delete pb;
+ delete qa;
+ delete qb;
+ delete r;
+ delete ra;
+ delete rb;
+ delete sa;
+ delete sb;
+ delete t;
+ delete ta;
+ delete tb;
+ delete u;
+ delete ua;
+ delete ub;
+ delete v;
+ delete va;
+ delete vb;
+ delete w;
+ delete wa;
+ delete wb;
+ delete x;
+ delete xa;
+ delete xb;
+ delete ya;
+ delete yb;
+ delete z;
+ delete za;
+ delete zb;
+}