EverydayTech Platform - Developer Reference
Complete Source Code Documentation - All Applications
Loading...
Searching...
No Matches
rle.js
Go to the documentation of this file.
1// Note: Some Emscripten settings will significantly limit the speed of the generated code.
2// Note: Some Emscripten settings may limit the speed of the generated code.
3// The Module object: Our interface to the outside world. We import
4// and export values on it, and do the work to get that through
5// closure compiler if necessary. There are various ways Module can be used:
6// 1. Not defined. We create it here
7// 2. A function parameter, function(Module) { ..generated code.. }
8// 3. pre-run appended it, var Module = {}; ..generated code..
9// 4. External script tag defines var Module.
10// We need to do an eval in order to handle the closure compiler
11// case, where this code here is minified but Module was defined
12// elsewhere (e.g. case 4 above). We also need to check if Module
13// already exists (e.g. case 3 above).
14// Note that if you want to run closure, and also to use Module
15// after the generated code, you will need to define var Module = {};
16// before the code. Then that object will be used in the code, and you
17// can continue to use Module afterwards as well.
18var Module = { };
19//if (!Module) { Module = eval('(function() { try { return Module || {} } catch(e) { return {} } })()'); }
20
21// Sometimes an existing Module object exists with properties
22// meant to overwrite the default module functionality. Here
23// we collect those properties and reapply _after_ we configure
24// the current environment's defaults to avoid having to be so
25// defensive during initialization.
26var moduleOverrides = {};
27for (var key in Module) {
28 if (Module.hasOwnProperty(key)) {
29 moduleOverrides[key] = Module[key];
30 }
31}
32
33// The environment setup code below is customized to use Module.
34// *** Environment setup code ***
35var ENVIRONMENT_IS_NODE = typeof process === 'object' && typeof require === 'function';
36var ENVIRONMENT_IS_WEB = typeof window === 'object';
37var ENVIRONMENT_IS_WORKER = typeof importScripts === 'function';
38var ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER;
39
40if (ENVIRONMENT_IS_NODE) {
41 // Expose functionality in the same simple way that the shells work
42 // Note that we pollute the global namespace here, otherwise we break in node
43 if (!Module['print']) Module['print'] = function print(x) {
44 process['stdout'].write(x + '\n');
45 };
46 if (!Module['printErr']) Module['printErr'] = function printErr(x) {
47 process['stderr'].write(x + '\n');
48 };
49
50 var nodeFS = require('fs');
51 var nodePath = require('path');
52
53 Module['read'] = function read(filename, binary) {
54 filename = nodePath['normalize'](filename);
55 var ret = nodeFS['readFileSync'](filename);
56 // The path is absolute if the normalized version is the same as the resolved.
57 if (!ret && filename != nodePath['resolve'](filename)) {
58 filename = path.join(__dirname, '..', 'src', filename);
59 ret = nodeFS['readFileSync'](filename);
60 }
61 if (ret && !binary) ret = ret.toString();
62 return ret;
63 };
64
65 Module['readBinary'] = function readBinary(filename) { return Module['read'](filename, true) };
66
67 Module['load'] = function load(f) {
68 globalEval(read(f));
69 };
70
71 Module['arguments'] = process['argv'].slice(2);
72
73 module['exports'] = Module;
74}
75else if (ENVIRONMENT_IS_SHELL) {
76 if (!Module['print']) Module['print'] = print;
77 if (typeof printErr != 'undefined') Module['printErr'] = printErr; // not present in v8 or older sm
78
79 if (typeof read != 'undefined') {
80 Module['read'] = read;
81 } else {
82 Module['read'] = function read() { throw 'no read() available (jsc?)' };
83 }
84
85 Module['readBinary'] = function readBinary(f) {
86 return read(f, 'binary');
87 };
88
89 if (typeof scriptArgs != 'undefined') {
90 Module['arguments'] = scriptArgs;
91 } else if (typeof arguments != 'undefined') {
92 Module['arguments'] = arguments;
93 }
94
95 this['Module'] = Module;
96
97 eval("if (typeof gc === 'function' && gc.toString().indexOf('[native code]') > 0) var gc = undefined"); // wipe out the SpiderMonkey shell 'gc' function, which can confuse closure (uses it as a minified name, and it is then initted to a non-falsey value unexpectedly)
98}
99else if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) {
100 Module['read'] = function read(url) {
101 var xhr = new XMLHttpRequest();
102 xhr.open('GET', url, false);
103 xhr.send(null);
104 return xhr.responseText;
105 };
106
107 if (typeof arguments != 'undefined') {
108 Module['arguments'] = arguments;
109 }
110
111 if (typeof console !== 'undefined') {
112 if (!Module['print']) Module['print'] = function print(x) {
113 console.log(x);
114 };
115 if (!Module['printErr']) Module['printErr'] = function printErr(x) {
116 console.log(x);
117 };
118 } else {
119 // Probably a worker, and without console.log. We can do very little here...
120 var TRY_USE_DUMP = false;
121 if (!Module['print']) Module['print'] = (TRY_USE_DUMP && (typeof(dump) !== "undefined") ? (function(x) {
122 dump(x);
123 }) : (function(x) {
124 // self.postMessage(x); // enable this if you want stdout to be sent as messages
125 }));
126 }
127
128 if (ENVIRONMENT_IS_WEB) {
129 this['Module'] = Module;
130 } else {
131 Module['load'] = importScripts;
132 }
133}
134else {
135 // Unreachable because SHELL is dependant on the others
136 throw 'Unknown runtime environment. Where are we?';
137}
138
139function globalEval(x) {
140 eval.call(null, x);
141}
142if (!Module['load'] == 'undefined' && Module['read']) {
143 Module['load'] = function load(f) {
144 globalEval(Module['read'](f));
145 };
146}
147if (!Module['print']) {
148 Module['print'] = function(){};
149}
150if (!Module['printErr']) {
151 Module['printErr'] = Module['print'];
152}
153if (!Module['arguments']) {
154 Module['arguments'] = [];
155}
156// *** Environment setup code ***
157
158// Closure helpers
159Module.print = Module['print'];
160Module.printErr = Module['printErr'];
161
162// Callbacks
163Module['preRun'] = [];
164Module['postRun'] = [];
165
166// Merge back in the overrides
167for (var key in moduleOverrides) {
168 if (moduleOverrides.hasOwnProperty(key)) {
169 Module[key] = moduleOverrides[key];
170 }
171}
172
173
174
175// === Auto-generated preamble library stuff ===
176
177//========================================
178// Runtime code shared with compiler
179//========================================
180
181var Runtime = {
182 stackSave: function () {
183 return STACKTOP;
184 },
185 stackRestore: function (stackTop) {
186 STACKTOP = stackTop;
187 },
188 forceAlign: function (target, quantum) {
189 quantum = quantum || 4;
190 if (quantum == 1) return target;
191 if (isNumber(target) && isNumber(quantum)) {
192 return Math.ceil(target/quantum)*quantum;
193 } else if (isNumber(quantum) && isPowerOfTwo(quantum)) {
194 return '(((' +target + ')+' + (quantum-1) + ')&' + -quantum + ')';
195 }
196 return 'Math.ceil((' + target + ')/' + quantum + ')*' + quantum;
197 },
198 isNumberType: function (type) {
199 return type in Runtime.INT_TYPES || type in Runtime.FLOAT_TYPES;
200 },
201 isPointerType: function isPointerType(type) {
202 return type[type.length-1] == '*';
203},
204 isStructType: function isStructType(type) {
205 if (isPointerType(type)) return false;
206 if (isArrayType(type)) return true;
207 if (/<?{ ?[^}]* ?}>?/.test(type)) return true; // { i32, i8 } etc. - anonymous struct types
208 // See comment in isStructPointerType()
209 return type[0] == '%';
210},
211 INT_TYPES: {"i1":0,"i8":0,"i16":0,"i32":0,"i64":0},
212 FLOAT_TYPES: {"float":0,"double":0},
213 or64: function (x, y) {
214 var l = (x | 0) | (y | 0);
215 var h = (Math.round(x / 4294967296) | Math.round(y / 4294967296)) * 4294967296;
216 return l + h;
217 },
218 and64: function (x, y) {
219 var l = (x | 0) & (y | 0);
220 var h = (Math.round(x / 4294967296) & Math.round(y / 4294967296)) * 4294967296;
221 return l + h;
222 },
223 xor64: function (x, y) {
224 var l = (x | 0) ^ (y | 0);
225 var h = (Math.round(x / 4294967296) ^ Math.round(y / 4294967296)) * 4294967296;
226 return l + h;
227 },
228 getNativeTypeSize: function (type) {
229 switch (type) {
230 case 'i1': case 'i8': return 1;
231 case 'i16': return 2;
232 case 'i32': return 4;
233 case 'i64': return 8;
234 case 'float': return 4;
235 case 'double': return 8;
236 default: {
237 if (type[type.length-1] === '*') {
238 return Runtime.QUANTUM_SIZE; // A pointer
239 } else if (type[0] === 'i') {
240 var bits = parseInt(type.substr(1));
241 assert(bits % 8 === 0);
242 return bits/8;
243 } else {
244 return 0;
245 }
246 }
247 }
248 },
249 getNativeFieldSize: function (type) {
250 return Math.max(Runtime.getNativeTypeSize(type), Runtime.QUANTUM_SIZE);
251 },
252 dedup: function dedup(items, ident) {
253 var seen = {};
254 if (ident) {
255 return items.filter(function(item) {
256 if (seen[item[ident]]) return false;
257 seen[item[ident]] = true;
258 return true;
259 });
260 } else {
261 return items.filter(function(item) {
262 if (seen[item]) return false;
263 seen[item] = true;
264 return true;
265 });
266 }
267},
268 set: function set() {
269 var args = typeof arguments[0] === 'object' ? arguments[0] : arguments;
270 var ret = {};
271 for (var i = 0; i < args.length; i++) {
272 ret[args[i]] = 0;
273 }
274 return ret;
275},
276 STACK_ALIGN: 8,
277 getAlignSize: function (type, size, vararg) {
278 // we align i64s and doubles on 64-bit boundaries, unlike x86
279 if (vararg) return 8;
280 if (!vararg && (type == 'i64' || type == 'double')) return 8;
281 if (!type) return Math.min(size, 8); // align structures internally to 64 bits
282 return Math.min(size || (type ? Runtime.getNativeFieldSize(type) : 0), Runtime.QUANTUM_SIZE);
283 },
284 calculateStructAlignment: function calculateStructAlignment(type) {
285 type.flatSize = 0;
286 type.alignSize = 0;
287 var diffs = [];
288 var prev = -1;
289 var index = 0;
290 type.flatIndexes = type.fields.map(function(field) {
291 index++;
292 var size, alignSize;
293 if (Runtime.isNumberType(field) || Runtime.isPointerType(field)) {
294 size = Runtime.getNativeTypeSize(field); // pack char; char; in structs, also char[X]s.
295 alignSize = Runtime.getAlignSize(field, size);
296 } else if (Runtime.isStructType(field)) {
297 if (field[1] === '0') {
298 // this is [0 x something]. When inside another structure like here, it must be at the end,
299 // and it adds no size
300 // XXX this happens in java-nbody for example... assert(index === type.fields.length, 'zero-length in the middle!');
301 size = 0;
302 if (Types.types[field]) {
303 alignSize = Runtime.getAlignSize(null, Types.types[field].alignSize);
304 } else {
305 alignSize = type.alignSize || QUANTUM_SIZE;
306 }
307 } else {
308 size = Types.types[field].flatSize;
309 alignSize = Runtime.getAlignSize(null, Types.types[field].alignSize);
310 }
311 } else if (field[0] == 'b') {
312 // bN, large number field, like a [N x i8]
313 size = field.substr(1)|0;
314 alignSize = 1;
315 } else if (field[0] === '<') {
316 // vector type
317 size = alignSize = Types.types[field].flatSize; // fully aligned
318 } else if (field[0] === 'i') {
319 // illegal integer field, that could not be legalized because it is an internal structure field
320 // it is ok to have such fields, if we just use them as markers of field size and nothing more complex
321 size = alignSize = parseInt(field.substr(1))/8;
322 assert(size % 1 === 0, 'cannot handle non-byte-size field ' + field);
323 } else {
324 assert(false, 'invalid type for calculateStructAlignment');
325 }
326 if (type.packed) alignSize = 1;
327 type.alignSize = Math.max(type.alignSize, alignSize);
328 var curr = Runtime.alignMemory(type.flatSize, alignSize); // if necessary, place this on aligned memory
329 type.flatSize = curr + size;
330 if (prev >= 0) {
331 diffs.push(curr-prev);
332 }
333 prev = curr;
334 return curr;
335 });
336 if (type.name_ && type.name_[0] === '[') {
337 // arrays have 2 elements, so we get the proper difference. then we scale here. that way we avoid
338 // allocating a potentially huge array for [999999 x i8] etc.
339 type.flatSize = parseInt(type.name_.substr(1))*type.flatSize/2;
340 }
341 type.flatSize = Runtime.alignMemory(type.flatSize, type.alignSize);
342 if (diffs.length == 0) {
343 type.flatFactor = type.flatSize;
344 } else if (Runtime.dedup(diffs).length == 1) {
345 type.flatFactor = diffs[0];
346 }
347 type.needsFlattening = (type.flatFactor != 1);
348 return type.flatIndexes;
349 },
350 generateStructInfo: function (struct, typeName, offset) {
351 var type, alignment;
352 if (typeName) {
353 offset = offset || 0;
354 type = (typeof Types === 'undefined' ? Runtime.typeInfo : Types.types)[typeName];
355 if (!type) return null;
356 if (type.fields.length != struct.length) {
357 printErr('Number of named fields must match the type for ' + typeName + ': possibly duplicate struct names. Cannot return structInfo');
358 return null;
359 }
360 alignment = type.flatIndexes;
361 } else {
362 var type = { fields: struct.map(function(item) { return item[0] }) };
363 alignment = Runtime.calculateStructAlignment(type);
364 }
365 var ret = {
366 __size__: type.flatSize
367 };
368 if (typeName) {
369 struct.forEach(function(item, i) {
370 if (typeof item === 'string') {
371 ret[item] = alignment[i] + offset;
372 } else {
373 // embedded struct
374 var key;
375 for (var k in item) key = k;
376 ret[key] = Runtime.generateStructInfo(item[key], type.fields[i], alignment[i]);
377 }
378 });
379 } else {
380 struct.forEach(function(item, i) {
381 ret[item[1]] = alignment[i];
382 });
383 }
384 return ret;
385 },
386 dynCall: function (sig, ptr, args) {
387 if (args && args.length) {
388 assert(args.length == sig.length-1);
389 return FUNCTION_TABLE[ptr].apply(null, args);
390 } else {
391 assert(sig.length == 1);
392 return FUNCTION_TABLE[ptr]();
393 }
394 },
395 addFunction: function (func) {
396 var table = FUNCTION_TABLE;
397 var ret = table.length;
398 assert(ret % 2 === 0);
399 table.push(func);
400 for (var i = 0; i < 2-1; i++) table.push(0);
401 return ret;
402 },
403 removeFunction: function (index) {
404 var table = FUNCTION_TABLE;
405 table[index] = null;
406 },
407 getAsmConst: function (code, numArgs) {
408 // code is a constant string on the heap, so we can cache these
409 if (!Runtime.asmConstCache) Runtime.asmConstCache = {};
410 var func = Runtime.asmConstCache[code];
411 if (func) return func;
412 var args = [];
413 for (var i = 0; i < numArgs; i++) {
414 args.push(String.fromCharCode(36) + i); // $0, $1 etc
415 }
416 code = Pointer_stringify(code);
417 if (code[0] === '"') {
418 // tolerate EM_ASM("..code..") even though EM_ASM(..code..) is correct
419 if (code.indexOf('"', 1) === code.length-1) {
420 code = code.substr(1, code.length-2);
421 } else {
422 // something invalid happened, e.g. EM_ASM("..code($0)..", input)
423 abort('invalid EM_ASM input |' + code + '|. Please use EM_ASM(..code..) (no quotes) or EM_ASM({ ..code($0).. }, input) (to input values)');
424 }
425 }
426 return Runtime.asmConstCache[code] = eval('(function(' + args.join(',') + '){ ' + code + ' })'); // new Function does not allow upvars in node
427 },
428 warnOnce: function (text) {
429 if (!Runtime.warnOnce.shown) Runtime.warnOnce.shown = {};
430 if (!Runtime.warnOnce.shown[text]) {
431 Runtime.warnOnce.shown[text] = 1;
432 Module.printErr(text);
433 }
434 },
435 funcWrappers: {},
436 getFuncWrapper: function (func, sig) {
437 assert(sig);
438 if (!Runtime.funcWrappers[func]) {
439 Runtime.funcWrappers[func] = function dynCall_wrapper() {
440 return Runtime.dynCall(sig, func, arguments);
441 };
442 }
443 return Runtime.funcWrappers[func];
444 },
445 UTF8Processor: function () {
446 var buffer = [];
447 var needed = 0;
448 this.processCChar = function (code) {
449 code = code & 0xFF;
450
451 if (buffer.length == 0) {
452 if ((code & 0x80) == 0x00) { // 0xxxxxxx
453 return String.fromCharCode(code);
454 }
455 buffer.push(code);
456 if ((code & 0xE0) == 0xC0) { // 110xxxxx
457 needed = 1;
458 } else if ((code & 0xF0) == 0xE0) { // 1110xxxx
459 needed = 2;
460 } else { // 11110xxx
461 needed = 3;
462 }
463 return '';
464 }
465
466 if (needed) {
467 buffer.push(code);
468 needed--;
469 if (needed > 0) return '';
470 }
471
472 var c1 = buffer[0];
473 var c2 = buffer[1];
474 var c3 = buffer[2];
475 var c4 = buffer[3];
476 var ret;
477 if (buffer.length == 2) {
478 ret = String.fromCharCode(((c1 & 0x1F) << 6) | (c2 & 0x3F));
479 } else if (buffer.length == 3) {
480 ret = String.fromCharCode(((c1 & 0x0F) << 12) | ((c2 & 0x3F) << 6) | (c3 & 0x3F));
481 } else {
482 // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae
483 var codePoint = ((c1 & 0x07) << 18) | ((c2 & 0x3F) << 12) |
484 ((c3 & 0x3F) << 6) | (c4 & 0x3F);
485 ret = String.fromCharCode(
486 Math.floor((codePoint - 0x10000) / 0x400) + 0xD800,
487 (codePoint - 0x10000) % 0x400 + 0xDC00);
488 }
489 buffer.length = 0;
490 return ret;
491 }
492 this.processJSString = function processJSString(string) {
493 string = unescape(encodeURIComponent(string));
494 var ret = [];
495 for (var i = 0; i < string.length; i++) {
496 ret.push(string.charCodeAt(i));
497 }
498 return ret;
499 }
500 },
501 stackAlloc: function (size) { var ret = STACKTOP;STACKTOP = (STACKTOP + size)|0;STACKTOP = (((STACKTOP)+7)&-8);(assert((STACKTOP|0) < (STACK_MAX|0))|0); return ret; },
502 staticAlloc: function (size) { var ret = STATICTOP;STATICTOP = (STATICTOP + (assert(!staticSealed),size))|0;STATICTOP = (((STATICTOP)+7)&-8); return ret; },
503 dynamicAlloc: function (size) { var ret = DYNAMICTOP;DYNAMICTOP = (DYNAMICTOP + (assert(DYNAMICTOP > 0),size))|0;DYNAMICTOP = (((DYNAMICTOP)+7)&-8); if (DYNAMICTOP >= TOTAL_MEMORY) enlargeMemory();; return ret; },
504 alignMemory: function (size,quantum) { var ret = size = Math.ceil((size)/(quantum ? quantum : 8))*(quantum ? quantum : 8); return ret; },
505 makeBigInt: function (low,high,unsigned) { var ret = (unsigned ? ((low>>>0)+((high>>>0)*4294967296)) : ((low>>>0)+((high|0)*4294967296))); return ret; },
506 GLOBAL_BASE: 8,
507 QUANTUM_SIZE: 4,
508 __dummy__: 0
509}
510
511
512Module['Runtime'] = Runtime;
513
514
515
516
517
518
519
520
521
522//========================================
523// Runtime essentials
524//========================================
525
526var __THREW__ = 0; // Used in checking for thrown exceptions.
527var setjmpId = 1; // Used in setjmp/longjmp
528var setjmpLabels = {};
529
530var ABORT = false; // whether we are quitting the application. no code should run after this. set in exit() and abort()
531var EXITSTATUS = 0;
532
533var undef = 0;
534// tempInt is used for 32-bit signed values or smaller. tempBigInt is used
535// for 32-bit unsigned values or more than 32 bits. TODO: audit all uses of tempInt
536var tempValue, tempInt, tempBigInt, tempInt2, tempBigInt2, tempPair, tempBigIntI, tempBigIntR, tempBigIntS, tempBigIntP, tempBigIntD, tempDouble, tempFloat;
537var tempI64, tempI64b;
538var tempRet0, tempRet1, tempRet2, tempRet3, tempRet4, tempRet5, tempRet6, tempRet7, tempRet8, tempRet9;
539
540function assert(condition, text) {
541 if (!condition) {
542 abort('Assertion failed: ' + text);
543 }
544}
545
546var globalScope = this;
547
548// C calling interface. A convenient way to call C functions (in C files, or
549// defined with extern "C").
550//
551// Note: LLVM optimizations can inline and remove functions, after which you will not be
552// able to call them. Closure can also do so. To avoid that, add your function to
553// the exports using something like
554//
555// -s EXPORTED_FUNCTIONS='["_main", "_myfunc"]'
556//
557// @param ident The name of the C function (note that C++ functions will be name-mangled - use extern "C")
558// @param returnType The return type of the function, one of the JS types 'number', 'string' or 'array' (use 'number' for any C pointer, and
559// 'array' for JavaScript arrays and typed arrays; note that arrays are 8-bit).
560// @param argTypes An array of the types of arguments for the function (if there are no arguments, this can be ommitted). Types are as in returnType,
561// except that 'array' is not possible (there is no way for us to know the length of the array)
562// @param args An array of the arguments to the function, as native JS values (as in returnType)
563// Note that string arguments will be stored on the stack (the JS string will become a C string on the stack).
564// @return The return value, as a native JS value (as in returnType)
565function ccall(ident, returnType, argTypes, args) {
566 return ccallFunc(getCFunc(ident), returnType, argTypes, args);
567}
568Module["ccall"] = ccall;
569
570// Returns the C function with a specified identifier (for C++, you need to do manual name mangling)
571function getCFunc(ident) {
572 try {
573 var func = Module['_' + ident]; // closure exported function
574 if (!func) func = eval('_' + ident); // explicit lookup
575 } catch(e) {
576 }
577 assert(func, 'Cannot call unknown function ' + ident + ' (perhaps LLVM optimizations or closure removed it?)');
578 return func;
579}
580
581// Internal function that does a C call using a function, not an identifier
582function ccallFunc(func, returnType, argTypes, args) {
583 var stack = 0;
584 function toC(value, type) {
585 if (type == 'string') {
586 if (value === null || value === undefined || value === 0) return 0; // null string
587 value = intArrayFromString(value);
588 type = 'array';
589 }
590 if (type == 'array') {
591 if (!stack) stack = Runtime.stackSave();
592 var ret = Runtime.stackAlloc(value.length);
593 writeArrayToMemory(value, ret);
594 return ret;
595 }
596 return value;
597 }
598 function fromC(value, type) {
599 if (type == 'string') {
600 return Pointer_stringify(value);
601 }
602 assert(type != 'array');
603 return value;
604 }
605 var i = 0;
606 var cArgs = args ? args.map(function(arg) {
607 return toC(arg, argTypes[i++]);
608 }) : [];
609 var ret = fromC(func.apply(null, cArgs), returnType);
610 if (stack) Runtime.stackRestore(stack);
611 return ret;
612}
613
614// Returns a native JS wrapper for a C function. This is similar to ccall, but
615// returns a function you can call repeatedly in a normal way. For example:
616//
617// var my_function = cwrap('my_c_function', 'number', ['number', 'number']);
618// alert(my_function(5, 22));
619// alert(my_function(99, 12));
620//
621function cwrap(ident, returnType, argTypes) {
622 var func = getCFunc(ident);
623 return function() {
624 return ccallFunc(func, returnType, argTypes, Array.prototype.slice.call(arguments));
625 }
626}
627Module["cwrap"] = cwrap;
628
629// Sets a value in memory in a dynamic way at run-time. Uses the
630// type data. This is the same as makeSetValue, except that
631// makeSetValue is done at compile-time and generates the needed
632// code then, whereas this function picks the right code at
633// run-time.
634// Note that setValue and getValue only do *aligned* writes and reads!
635// Note that ccall uses JS types as for defining types, while setValue and
636// getValue need LLVM types ('i8', 'i32') - this is a lower-level operation
637function setValue(ptr, value, type, noSafe) {
638 type = type || 'i8';
639 if (type.charAt(type.length-1) === '*') type = 'i32'; // pointers are 32-bit
640 switch(type) {
641 case 'i1': HEAP8[(ptr)]=value; break;
642 case 'i8': HEAP8[(ptr)]=value; break;
643 case 'i16': HEAP16[((ptr)>>1)]=value; break;
644 case 'i32': HEAP32[((ptr)>>2)]=value; break;
645 case 'i64': (tempI64 = [value>>>0,(tempDouble=value,Math_abs(tempDouble) >= 1 ? (tempDouble > 0 ? Math_min(Math_floor((tempDouble)/4294967296), 4294967295)>>>0 : (~~(Math_ceil((tempDouble - +(((~~(tempDouble)))>>>0))/4294967296)))>>>0) : 0)],HEAP32[((ptr)>>2)]=tempI64[0],HEAP32[(((ptr)+(4))>>2)]=tempI64[1]); break;
646 case 'float': HEAPF32[((ptr)>>2)]=value; break;
647 case 'double': HEAPF64[((ptr)>>3)]=value; break;
648 default: abort('invalid type for setValue: ' + type);
649 }
650}
651Module['setValue'] = setValue;
652
653// Parallel to setValue.
654function getValue(ptr, type, noSafe) {
655 type = type || 'i8';
656 if (type.charAt(type.length-1) === '*') type = 'i32'; // pointers are 32-bit
657 switch(type) {
658 case 'i1': return HEAP8[(ptr)];
659 case 'i8': return HEAP8[(ptr)];
660 case 'i16': return HEAP16[((ptr)>>1)];
661 case 'i32': return HEAP32[((ptr)>>2)];
662 case 'i64': return HEAP32[((ptr)>>2)];
663 case 'float': return HEAPF32[((ptr)>>2)];
664 case 'double': return HEAPF64[((ptr)>>3)];
665 default: abort('invalid type for setValue: ' + type);
666 }
667 return null;
668}
669Module['getValue'] = getValue;
670
671var ALLOC_NORMAL = 0; // Tries to use _malloc()
672var ALLOC_STACK = 1; // Lives for the duration of the current function call
673var ALLOC_STATIC = 2; // Cannot be freed
674var ALLOC_DYNAMIC = 3; // Cannot be freed except through sbrk
675var ALLOC_NONE = 4; // Do not allocate
676Module['ALLOC_NORMAL'] = ALLOC_NORMAL;
677Module['ALLOC_STACK'] = ALLOC_STACK;
678Module['ALLOC_STATIC'] = ALLOC_STATIC;
679Module['ALLOC_DYNAMIC'] = ALLOC_DYNAMIC;
680Module['ALLOC_NONE'] = ALLOC_NONE;
681
682// allocate(): This is for internal use. You can use it yourself as well, but the interface
683// is a little tricky (see docs right below). The reason is that it is optimized
684// for multiple syntaxes to save space in generated code. So you should
685// normally not use allocate(), and instead allocate memory using _malloc(),
686// initialize it with setValue(), and so forth.
687// @slab: An array of data, or a number. If a number, then the size of the block to allocate,
688// in *bytes* (note that this is sometimes confusing: the next parameter does not
689// affect this!)
690// @types: Either an array of types, one for each byte (or 0 if no type at that position),
691// or a single type which is used for the entire block. This only matters if there
692// is initial data - if @slab is a number, then this does not matter at all and is
693// ignored.
694// @allocator: How to allocate memory, see ALLOC_*
695function allocate(slab, types, allocator, ptr) {
696 var zeroinit, size;
697 if (typeof slab === 'number') {
698 zeroinit = true;
699 size = slab;
700 } else {
701 zeroinit = false;
702 size = slab.length;
703 }
704
705 var singleType = typeof types === 'string' ? types : null;
706
707 var ret;
708 if (allocator == ALLOC_NONE) {
709 ret = ptr;
710 } else {
711 ret = [_malloc, Runtime.stackAlloc, Runtime.staticAlloc, Runtime.dynamicAlloc][allocator === undefined ? ALLOC_STATIC : allocator](Math.max(size, singleType ? 1 : types.length));
712 }
713
714 if (zeroinit) {
715 var ptr = ret, stop;
716 assert((ret & 3) == 0);
717 stop = ret + (size & ~3);
718 for (; ptr < stop; ptr += 4) {
719 HEAP32[((ptr)>>2)]=0;
720 }
721 stop = ret + size;
722 while (ptr < stop) {
723 HEAP8[((ptr++)|0)]=0;
724 }
725 return ret;
726 }
727
728 if (singleType === 'i8') {
729 if (slab.subarray || slab.slice) {
730 HEAPU8.set(slab, ret);
731 } else {
732 HEAPU8.set(new Uint8Array(slab), ret);
733 }
734 return ret;
735 }
736
737 var i = 0, type, typeSize, previousType;
738 while (i < size) {
739 var curr = slab[i];
740
741 if (typeof curr === 'function') {
742 curr = Runtime.getFunctionIndex(curr);
743 }
744
745 type = singleType || types[i];
746 if (type === 0) {
747 i++;
748 continue;
749 }
750 assert(type, 'Must know what type to store in allocate!');
751
752 if (type == 'i64') type = 'i32'; // special case: we have one i32 here, and one i32 later
753
754 setValue(ret+i, curr, type);
755
756 // no need to look up size unless type changes, so cache it
757 if (previousType !== type) {
758 typeSize = Runtime.getNativeTypeSize(type);
759 previousType = type;
760 }
761 i += typeSize;
762 }
763
764 return ret;
765}
766Module['allocate'] = allocate;
767
768function Pointer_stringify(ptr, /* optional */ length) {
769 // TODO: use TextDecoder
770 // Find the length, and check for UTF while doing so
771 var hasUtf = false;
772 var t;
773 var i = 0;
774 while (1) {
775 assert(ptr + i < TOTAL_MEMORY);
776 t = HEAPU8[(((ptr)+(i))|0)];
777 if (t >= 128) hasUtf = true;
778 else if (t == 0 && !length) break;
779 i++;
780 if (length && i == length) break;
781 }
782 if (!length) length = i;
783
784 var ret = '';
785
786 if (!hasUtf) {
787 var MAX_CHUNK = 1024; // split up into chunks, because .apply on a huge string can overflow the stack
788 var curr;
789 while (length > 0) {
790 curr = String.fromCharCode.apply(String, HEAPU8.subarray(ptr, ptr + Math.min(length, MAX_CHUNK)));
791 ret = ret ? ret + curr : curr;
792 ptr += MAX_CHUNK;
793 length -= MAX_CHUNK;
794 }
795 return ret;
796 }
797
798 var utf8 = new Runtime.UTF8Processor();
799 for (i = 0; i < length; i++) {
800 assert(ptr + i < TOTAL_MEMORY);
801 t = HEAPU8[(((ptr)+(i))|0)];
802 ret += utf8.processCChar(t);
803 }
804 return ret;
805}
806Module['Pointer_stringify'] = Pointer_stringify;
807
808// Given a pointer 'ptr' to a null-terminated UTF16LE-encoded string in the emscripten HEAP, returns
809// a copy of that string as a Javascript String object.
810function UTF16ToString(ptr) {
811 var i = 0;
812
813 var str = '';
814 while (1) {
815 var codeUnit = HEAP16[(((ptr)+(i*2))>>1)];
816 if (codeUnit == 0)
817 return str;
818 ++i;
819 // fromCharCode constructs a character from a UTF-16 code unit, so we can pass the UTF16 string right through.
820 str += String.fromCharCode(codeUnit);
821 }
822}
823Module['UTF16ToString'] = UTF16ToString;
824
825// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',
826// null-terminated and encoded in UTF16LE form. The copy will require at most (str.length*2+1)*2 bytes of space in the HEAP.
827function stringToUTF16(str, outPtr) {
828 for(var i = 0; i < str.length; ++i) {
829 // charCodeAt returns a UTF-16 encoded code unit, so it can be directly written to the HEAP.
830 var codeUnit = str.charCodeAt(i); // possibly a lead surrogate
831 HEAP16[(((outPtr)+(i*2))>>1)]=codeUnit;
832 }
833 // Null-terminate the pointer to the HEAP.
834 HEAP16[(((outPtr)+(str.length*2))>>1)]=0;
835}
836Module['stringToUTF16'] = stringToUTF16;
837
838// Given a pointer 'ptr' to a null-terminated UTF32LE-encoded string in the emscripten HEAP, returns
839// a copy of that string as a Javascript String object.
840function UTF32ToString(ptr) {
841 var i = 0;
842
843 var str = '';
844 while (1) {
845 var utf32 = HEAP32[(((ptr)+(i*4))>>2)];
846 if (utf32 == 0)
847 return str;
848 ++i;
849 // Gotcha: fromCharCode constructs a character from a UTF-16 encoded code (pair), not from a Unicode code point! So encode the code point to UTF-16 for constructing.
850 if (utf32 >= 0x10000) {
851 var ch = utf32 - 0x10000;
852 str += String.fromCharCode(0xD800 | (ch >> 10), 0xDC00 | (ch & 0x3FF));
853 } else {
854 str += String.fromCharCode(utf32);
855 }
856 }
857}
858Module['UTF32ToString'] = UTF32ToString;
859
860// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',
861// null-terminated and encoded in UTF32LE form. The copy will require at most (str.length+1)*4 bytes of space in the HEAP,
862// but can use less, since str.length does not return the number of characters in the string, but the number of UTF-16 code units in the string.
863function stringToUTF32(str, outPtr) {
864 var iChar = 0;
865 for(var iCodeUnit = 0; iCodeUnit < str.length; ++iCodeUnit) {
866 // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! We must decode the string to UTF-32 to the heap.
867 var codeUnit = str.charCodeAt(iCodeUnit); // possibly a lead surrogate
868 if (codeUnit >= 0xD800 && codeUnit <= 0xDFFF) {
869 var trailSurrogate = str.charCodeAt(++iCodeUnit);
870 codeUnit = 0x10000 + ((codeUnit & 0x3FF) << 10) | (trailSurrogate & 0x3FF);
871 }
872 HEAP32[(((outPtr)+(iChar*4))>>2)]=codeUnit;
873 ++iChar;
874 }
875 // Null-terminate the pointer to the HEAP.
876 HEAP32[(((outPtr)+(iChar*4))>>2)]=0;
877}
878Module['stringToUTF32'] = stringToUTF32;
879
880function demangle(func) {
881 try {
882 // Special-case the entry point, since its name differs from other name mangling.
883 if (func == 'Object._main' || func == '_main') {
884 return 'main()';
885 }
886 if (typeof func === 'number') func = Pointer_stringify(func);
887 if (func[0] !== '_') return func;
888 if (func[1] !== '_') return func; // C function
889 if (func[2] !== 'Z') return func;
890 switch (func[3]) {
891 case 'n': return 'operator new()';
892 case 'd': return 'operator delete()';
893 }
894 var i = 3;
895 // params, etc.
896 var basicTypes = {
897 'v': 'void',
898 'b': 'bool',
899 'c': 'char',
900 's': 'short',
901 'i': 'int',
902 'l': 'long',
903 'f': 'float',
904 'd': 'double',
905 'w': 'wchar_t',
906 'a': 'signed char',
907 'h': 'unsigned char',
908 't': 'unsigned short',
909 'j': 'unsigned int',
910 'm': 'unsigned long',
911 'x': 'long long',
912 'y': 'unsigned long long',
913 'z': '...'
914 };
915 function dump(x) {
916 //return;
917 if (x) Module.print(x);
918 Module.print(func);
919 var pre = '';
920 for (var a = 0; a < i; a++) pre += ' ';
921 Module.print (pre + '^');
922 }
923 var subs = [];
924 function parseNested() {
925 i++;
926 if (func[i] === 'K') i++; // ignore const
927 var parts = [];
928 while (func[i] !== 'E') {
929 if (func[i] === 'S') { // substitution
930 i++;
931 var next = func.indexOf('_', i);
932 var num = func.substring(i, next) || 0;
933 parts.push(subs[num] || '?');
934 i = next+1;
935 continue;
936 }
937 if (func[i] === 'C') { // constructor
938 parts.push(parts[parts.length-1]);
939 i += 2;
940 continue;
941 }
942 var size = parseInt(func.substr(i));
943 var pre = size.toString().length;
944 if (!size || !pre) { i--; break; } // counter i++ below us
945 var curr = func.substr(i + pre, size);
946 parts.push(curr);
947 subs.push(curr);
948 i += pre + size;
949 }
950 i++; // skip E
951 return parts;
952 }
953 var first = true;
954 function parse(rawList, limit, allowVoid) { // main parser
955 limit = limit || Infinity;
956 var ret = '', list = [];
957 function flushList() {
958 return '(' + list.join(', ') + ')';
959 }
960 var name;
961 if (func[i] === 'N') {
962 // namespaced N-E
963 name = parseNested().join('::');
964 limit--;
965 if (limit === 0) return rawList ? [name] : name;
966 } else {
967 // not namespaced
968 if (func[i] === 'K' || (first && func[i] === 'L')) i++; // ignore const and first 'L'
969 var size = parseInt(func.substr(i));
970 if (size) {
971 var pre = size.toString().length;
972 name = func.substr(i + pre, size);
973 i += pre + size;
974 }
975 }
976 first = false;
977 if (func[i] === 'I') {
978 i++;
979 var iList = parse(true);
980 var iRet = parse(true, 1, true);
981 ret += iRet[0] + ' ' + name + '<' + iList.join(', ') + '>';
982 } else {
983 ret = name;
984 }
985 paramLoop: while (i < func.length && limit-- > 0) {
986 //dump('paramLoop');
987 var c = func[i++];
988 if (c in basicTypes) {
989 list.push(basicTypes[c]);
990 } else {
991 switch (c) {
992 case 'P': list.push(parse(true, 1, true)[0] + '*'); break; // pointer
993 case 'R': list.push(parse(true, 1, true)[0] + '&'); break; // reference
994 case 'L': { // literal
995 i++; // skip basic type
996 var end = func.indexOf('E', i);
997 var size = end - i;
998 list.push(func.substr(i, size));
999 i += size + 2; // size + 'EE'
1000 break;
1001 }
1002 case 'A': { // array
1003 var size = parseInt(func.substr(i));
1004 i += size.toString().length;
1005 if (func[i] !== '_') throw '?';
1006 i++; // skip _
1007 list.push(parse(true, 1, true)[0] + ' [' + size + ']');
1008 break;
1009 }
1010 case 'E': break paramLoop;
1011 default: ret += '?' + c; break paramLoop;
1012 }
1013 }
1014 }
1015 if (!allowVoid && list.length === 1 && list[0] === 'void') list = []; // avoid (void)
1016 return rawList ? list : ret + flushList();
1017 }
1018 return parse();
1019 } catch(e) {
1020 return func;
1021 }
1022}
1023
1024function demangleAll(text) {
1025 return text.replace(/__Z[\w\d_]+/g, function(x) { var y = demangle(x); return x === y ? x : (x + ' [' + y + ']') });
1026}
1027
1028function stackTrace() {
1029 var stack = new Error().stack;
1030 return stack ? demangleAll(stack) : '(no stack trace available)'; // Stack trace is not available at least on IE10 and Safari 6.
1031}
1032
1033// Memory management
1034
1035var PAGE_SIZE = 4096;
1036function alignMemoryPage(x) {
1037 return (x+4095)&-4096;
1038}
1039
1040var HEAP;
1041var HEAP8, HEAPU8, HEAP16, HEAPU16, HEAP32, HEAPU32, HEAPF32, HEAPF64;
1042
1043var STATIC_BASE = 0, STATICTOP = 0, staticSealed = false; // static area
1044var STACK_BASE = 0, STACKTOP = 0, STACK_MAX = 0; // stack area
1045var DYNAMIC_BASE = 0, DYNAMICTOP = 0; // dynamic area handled by sbrk
1046
1047function enlargeMemory() {
1048 abort('Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value ' + TOTAL_MEMORY + ', (2) compile with ALLOW_MEMORY_GROWTH which adjusts the size at runtime but prevents some optimizations, or (3) set Module.TOTAL_MEMORY before the program runs.');
1049}
1050
1051var TOTAL_STACK = Module['TOTAL_STACK'] || 5242880;
1052var TOTAL_MEMORY = Module['TOTAL_MEMORY'] || 16777216;
1053var FAST_MEMORY = Module['FAST_MEMORY'] || 2097152;
1054
1055
1056// Initialize the runtime's memory
1057// check for full engine support (use string 'subarray' to avoid closure compiler confusion)
1058assert(typeof Int32Array !== 'undefined' && typeof Float64Array !== 'undefined' && !!(new Int32Array(1)['subarray']) && !!(new Int32Array(1)['set']),
1059 'Cannot fallback to non-typed array case: Code is too specialized');
1060
1061var buffer = new ArrayBuffer(TOTAL_MEMORY);
1062HEAP8 = new Int8Array(buffer);
1063HEAP16 = new Int16Array(buffer);
1064HEAP32 = new Int32Array(buffer);
1065HEAPU8 = new Uint8Array(buffer);
1066HEAPU16 = new Uint16Array(buffer);
1067HEAPU32 = new Uint32Array(buffer);
1068HEAPF32 = new Float32Array(buffer);
1069HEAPF64 = new Float64Array(buffer);
1070
1071// Endianness check (note: assumes compiler arch was little-endian)
1072HEAP32[0] = 255;
1073assert(HEAPU8[0] === 255 && HEAPU8[3] === 0, 'Typed arrays 2 must be run on a little-endian system');
1074
1075Module['HEAP'] = HEAP;
1076Module['HEAP8'] = HEAP8;
1077Module['HEAP16'] = HEAP16;
1078Module['HEAP32'] = HEAP32;
1079Module['HEAPU8'] = HEAPU8;
1080Module['HEAPU16'] = HEAPU16;
1081Module['HEAPU32'] = HEAPU32;
1082Module['HEAPF32'] = HEAPF32;
1083Module['HEAPF64'] = HEAPF64;
1084
1085function callRuntimeCallbacks(callbacks) {
1086 while(callbacks.length > 0) {
1087 var callback = callbacks.shift();
1088 if (typeof callback == 'function') {
1089 callback();
1090 continue;
1091 }
1092 var func = callback.func;
1093 if (typeof func === 'number') {
1094 if (callback.arg === undefined) {
1095 Runtime.dynCall('v', func);
1096 } else {
1097 Runtime.dynCall('vi', func, [callback.arg]);
1098 }
1099 } else {
1100 func(callback.arg === undefined ? null : callback.arg);
1101 }
1102 }
1103}
1104
1105var __ATPRERUN__ = []; // functions called before the runtime is initialized
1106var __ATINIT__ = []; // functions called during startup
1107var __ATMAIN__ = []; // functions called when main() is to be run
1108var __ATEXIT__ = []; // functions called during shutdown
1109var __ATPOSTRUN__ = []; // functions called after the runtime has exited
1110
1111var runtimeInitialized = false;
1112
1113function preRun() {
1114 // compatibility - merge in anything from Module['preRun'] at this time
1115 if (Module['preRun']) {
1116 if (typeof Module['preRun'] == 'function') Module['preRun'] = [Module['preRun']];
1117 while (Module['preRun'].length) {
1118 addOnPreRun(Module['preRun'].shift());
1119 }
1120 }
1121 callRuntimeCallbacks(__ATPRERUN__);
1122}
1123
1124function ensureInitRuntime() {
1125 if (runtimeInitialized) return;
1126 runtimeInitialized = true;
1127 callRuntimeCallbacks(__ATINIT__);
1128}
1129
1130function preMain() {
1131 callRuntimeCallbacks(__ATMAIN__);
1132}
1133
1134function exitRuntime() {
1135 callRuntimeCallbacks(__ATEXIT__);
1136}
1137
1138function postRun() {
1139 // compatibility - merge in anything from Module['postRun'] at this time
1140 if (Module['postRun']) {
1141 if (typeof Module['postRun'] == 'function') Module['postRun'] = [Module['postRun']];
1142 while (Module['postRun'].length) {
1143 addOnPostRun(Module['postRun'].shift());
1144 }
1145 }
1146 callRuntimeCallbacks(__ATPOSTRUN__);
1147}
1148
1149function addOnPreRun(cb) {
1150 __ATPRERUN__.unshift(cb);
1151}
1152Module['addOnPreRun'] = Module.addOnPreRun = addOnPreRun;
1153
1154function addOnInit(cb) {
1155 __ATINIT__.unshift(cb);
1156}
1157Module['addOnInit'] = Module.addOnInit = addOnInit;
1158
1159function addOnPreMain(cb) {
1160 __ATMAIN__.unshift(cb);
1161}
1162Module['addOnPreMain'] = Module.addOnPreMain = addOnPreMain;
1163
1164function addOnExit(cb) {
1165 __ATEXIT__.unshift(cb);
1166}
1167Module['addOnExit'] = Module.addOnExit = addOnExit;
1168
1169function addOnPostRun(cb) {
1170 __ATPOSTRUN__.unshift(cb);
1171}
1172Module['addOnPostRun'] = Module.addOnPostRun = addOnPostRun;
1173
1174// Tools
1175
1176// This processes a JS string into a C-line array of numbers, 0-terminated.
1177// For LLVM-originating strings, see parser.js:parseLLVMString function
1178function intArrayFromString(stringy, dontAddNull, length /* optional */) {
1179 var ret = (new Runtime.UTF8Processor()).processJSString(stringy);
1180 if (length) {
1181 ret.length = length;
1182 }
1183 if (!dontAddNull) {
1184 ret.push(0);
1185 }
1186 return ret;
1187}
1188Module['intArrayFromString'] = intArrayFromString;
1189
1190function intArrayToString(array) {
1191 var ret = [];
1192 for (var i = 0; i < array.length; i++) {
1193 var chr = array[i];
1194 if (chr > 0xFF) {
1195 assert(false, 'Character code ' + chr + ' (' + String.fromCharCode(chr) + ') at offset ' + i + ' not in 0x00-0xFF.');
1196 chr &= 0xFF;
1197 }
1198 ret.push(String.fromCharCode(chr));
1199 }
1200 return ret.join('');
1201}
1202Module['intArrayToString'] = intArrayToString;
1203
1204// Write a Javascript array to somewhere in the heap
1205function writeStringToMemory(string, buffer, dontAddNull) {
1206 var array = intArrayFromString(string, dontAddNull);
1207 var i = 0;
1208 while (i < array.length) {
1209 var chr = array[i];
1210 HEAP8[(((buffer)+(i))|0)]=chr;
1211 i = i + 1;
1212 }
1213}
1214Module['writeStringToMemory'] = writeStringToMemory;
1215
1216function writeArrayToMemory(array, buffer) {
1217 for (var i = 0; i < array.length; i++) {
1218 HEAP8[(((buffer)+(i))|0)]=array[i];
1219 }
1220}
1221Module['writeArrayToMemory'] = writeArrayToMemory;
1222
1223function writeAsciiToMemory(str, buffer, dontAddNull) {
1224 for (var i = 0; i < str.length; i++) {
1225 assert(str.charCodeAt(i) === str.charCodeAt(i)&0xff);
1226 HEAP8[(((buffer)+(i))|0)]=str.charCodeAt(i);
1227 }
1228 if (!dontAddNull) HEAP8[(((buffer)+(str.length))|0)]=0;
1229}
1230Module['writeAsciiToMemory'] = writeAsciiToMemory;
1231
1232function unSign(value, bits, ignore, sig) {
1233 if (value >= 0) {
1234 return value;
1235 }
1236 return bits <= 32 ? 2*Math.abs(1 << (bits-1)) + value // Need some trickery, since if bits == 32, we are right at the limit of the bits JS uses in bitshifts
1237 : Math.pow(2, bits) + value;
1238}
1239function reSign(value, bits, ignore, sig) {
1240 if (value <= 0) {
1241 return value;
1242 }
1243 var half = bits <= 32 ? Math.abs(1 << (bits-1)) // abs is needed if bits == 32
1244 : Math.pow(2, bits-1);
1245 if (value >= half && (bits <= 32 || value > half)) { // for huge values, we can hit the precision limit and always get true here. so don't do that
1246 // but, in general there is no perfect solution here. With 64-bit ints, we get rounding and errors
1247 // TODO: In i64 mode 1, resign the two parts separately and safely
1248 value = -2*half + value; // Cannot bitshift half, as it may be at the limit of the bits JS uses in bitshifts
1249 }
1250 return value;
1251}
1252
1253// check for imul support, and also for correctness ( https://bugs.webkit.org/show_bug.cgi?id=126345 )
1254if (!Math['imul'] || Math['imul'](0xffffffff, 5) !== -5) Math['imul'] = function imul(a, b) {
1255 var ah = a >>> 16;
1256 var al = a & 0xffff;
1257 var bh = b >>> 16;
1258 var bl = b & 0xffff;
1259 return (al*bl + ((ah*bl + al*bh) << 16))|0;
1260};
1261Math.imul = Math['imul'];
1262
1263
1264var Math_abs = Math.abs;
1265var Math_cos = Math.cos;
1266var Math_sin = Math.sin;
1267var Math_tan = Math.tan;
1268var Math_acos = Math.acos;
1269var Math_asin = Math.asin;
1270var Math_atan = Math.atan;
1271var Math_atan2 = Math.atan2;
1272var Math_exp = Math.exp;
1273var Math_log = Math.log;
1274var Math_sqrt = Math.sqrt;
1275var Math_ceil = Math.ceil;
1276var Math_floor = Math.floor;
1277var Math_pow = Math.pow;
1278var Math_imul = Math.imul;
1279var Math_fround = Math.fround;
1280var Math_min = Math.min;
1281
1282// A counter of dependencies for calling run(). If we need to
1283// do asynchronous work before running, increment this and
1284// decrement it. Incrementing must happen in a place like
1285// PRE_RUN_ADDITIONS (used by emcc to add file preloading).
1286// Note that you can add dependencies in preRun, even though
1287// it happens right before run - run will be postponed until
1288// the dependencies are met.
1289var runDependencies = 0;
1290var runDependencyWatcher = null;
1291var dependenciesFulfilled = null; // overridden to take different actions when all run dependencies are fulfilled
1292var runDependencyTracking = {};
1293
1294function addRunDependency(id) {
1295 runDependencies++;
1296 if (Module['monitorRunDependencies']) {
1297 Module['monitorRunDependencies'](runDependencies);
1298 }
1299 if (id) {
1300 assert(!runDependencyTracking[id]);
1301 runDependencyTracking[id] = 1;
1302 if (runDependencyWatcher === null && typeof setInterval !== 'undefined') {
1303 // Check for missing dependencies every few seconds
1304 runDependencyWatcher = setInterval(function() {
1305 var shown = false;
1306 for (var dep in runDependencyTracking) {
1307 if (!shown) {
1308 shown = true;
1309 Module.printErr('still waiting on run dependencies:');
1310 }
1311 Module.printErr('dependency: ' + dep);
1312 }
1313 if (shown) {
1314 Module.printErr('(end of list)');
1315 }
1316 }, 10000);
1317 }
1318 } else {
1319 Module.printErr('warning: run dependency added without ID');
1320 }
1321}
1322Module['addRunDependency'] = addRunDependency;
1323function removeRunDependency(id) {
1324 runDependencies--;
1325 if (Module['monitorRunDependencies']) {
1326 Module['monitorRunDependencies'](runDependencies);
1327 }
1328 if (id) {
1329 assert(runDependencyTracking[id]);
1330 delete runDependencyTracking[id];
1331 } else {
1332 Module.printErr('warning: run dependency removed without ID');
1333 }
1334 if (runDependencies == 0) {
1335 if (runDependencyWatcher !== null) {
1336 clearInterval(runDependencyWatcher);
1337 runDependencyWatcher = null;
1338 }
1339 if (dependenciesFulfilled) {
1340 var callback = dependenciesFulfilled;
1341 dependenciesFulfilled = null;
1342 callback(); // can add another dependenciesFulfilled
1343 }
1344 }
1345}
1346Module['removeRunDependency'] = removeRunDependency;
1347
1348Module["preloadedImages"] = {}; // maps url to image data
1349Module["preloadedAudios"] = {}; // maps url to audio data
1350
1351
1352var memoryInitializer = null;
1353
1354// === Body ===
1355
1356
1357
1358STATIC_BASE = 8;
1359
1360STATICTOP = STATIC_BASE + 504;
1361
1362
1363/* global initializers */ __ATINIT__.push({ func: function() { runPostSets() } });
1364
1365
1366
1367
1368
1369/* memory initializer */ allocate([255,255,255,0,0,0,0,0], "i8", ALLOC_NONE, Runtime.GLOBAL_BASE);
1370function runPostSets() {
1371
1372
1373}
1374
1375var tempDoublePtr = Runtime.alignMemory(allocate(12, "i8", ALLOC_STATIC), 8);
1376
1377assert(tempDoublePtr % 8 == 0);
1378
1379function copyTempFloat(ptr) { // functions, because inlining this code increases code size too much
1380
1381 HEAP8[tempDoublePtr] = HEAP8[ptr];
1382
1383 HEAP8[tempDoublePtr+1] = HEAP8[ptr+1];
1384
1385 HEAP8[tempDoublePtr+2] = HEAP8[ptr+2];
1386
1387 HEAP8[tempDoublePtr+3] = HEAP8[ptr+3];
1388
1389}
1390
1391function copyTempDouble(ptr) {
1392
1393 HEAP8[tempDoublePtr] = HEAP8[ptr];
1394
1395 HEAP8[tempDoublePtr+1] = HEAP8[ptr+1];
1396
1397 HEAP8[tempDoublePtr+2] = HEAP8[ptr+2];
1398
1399 HEAP8[tempDoublePtr+3] = HEAP8[ptr+3];
1400
1401 HEAP8[tempDoublePtr+4] = HEAP8[ptr+4];
1402
1403 HEAP8[tempDoublePtr+5] = HEAP8[ptr+5];
1404
1405 HEAP8[tempDoublePtr+6] = HEAP8[ptr+6];
1406
1407 HEAP8[tempDoublePtr+7] = HEAP8[ptr+7];
1408
1409}
1410
1411
1412
1413 function _memset(ptr, value, num) {
1414 ptr = ptr|0; value = value|0; num = num|0;
1415 var stop = 0, value4 = 0, stop4 = 0, unaligned = 0;
1416 stop = (ptr + num)|0;
1417 if ((num|0) >= 20) {
1418 // This is unaligned, but quite large, so work hard to get to aligned settings
1419 value = value & 0xff;
1420 unaligned = ptr & 3;
1421 value4 = value | (value << 8) | (value << 16) | (value << 24);
1422 stop4 = stop & ~3;
1423 if (unaligned) {
1424 unaligned = (ptr + 4 - unaligned)|0;
1425 while ((ptr|0) < (unaligned|0)) { // no need to check for stop, since we have large num
1426 HEAP8[(ptr)]=value;
1427 ptr = (ptr+1)|0;
1428 }
1429 }
1430 while ((ptr|0) < (stop4|0)) {
1431 HEAP32[((ptr)>>2)]=value4;
1432 ptr = (ptr+4)|0;
1433 }
1434 }
1435 while ((ptr|0) < (stop|0)) {
1436 HEAP8[(ptr)]=value;
1437 ptr = (ptr+1)|0;
1438 }
1439 return (ptr-num)|0;
1440 }var _llvm_memset_p0i8_i32=_memset;
1441
1442
1443 function _memcpy(dest, src, num) {
1444 dest = dest|0; src = src|0; num = num|0;
1445 var ret = 0;
1446 ret = dest|0;
1447 if ((dest&3) == (src&3)) {
1448 while (dest & 3) {
1449 if ((num|0) == 0) return ret|0;
1450 HEAP8[(dest)]=HEAP8[(src)];
1451 dest = (dest+1)|0;
1452 src = (src+1)|0;
1453 num = (num-1)|0;
1454 }
1455 while ((num|0) >= 4) {
1456 HEAP32[((dest)>>2)]=HEAP32[((src)>>2)];
1457 dest = (dest+4)|0;
1458 src = (src+4)|0;
1459 num = (num-4)|0;
1460 }
1461 }
1462 while ((num|0) > 0) {
1463 HEAP8[(dest)]=HEAP8[(src)];
1464 dest = (dest+1)|0;
1465 src = (src+1)|0;
1466 num = (num-1)|0;
1467 }
1468 return ret|0;
1469 }var _llvm_memcpy_p0i8_p0i8_i32=_memcpy;
1470
1471 function _abort() {
1472 Module['abort']();
1473 }
1474
1475
1476
1477 var ___errno_state=0;function ___setErrNo(value) {
1478 // For convenient setting and returning of errno.
1479 HEAP32[((___errno_state)>>2)]=value;
1480 return value;
1481 }function ___errno_location() {
1482 return ___errno_state;
1483 }
1484
1485 function _sbrk(bytes) {
1486 // Implement a Linux-like 'memory area' for our 'process'.
1487 // Changes the size of the memory area by |bytes|; returns the
1488 // address of the previous top ('break') of the memory area
1489 // We control the "dynamic" memory - DYNAMIC_BASE to DYNAMICTOP
1490 var self = _sbrk;
1491 if (!self.called) {
1492 DYNAMICTOP = alignMemoryPage(DYNAMICTOP); // make sure we start out aligned
1493 self.called = true;
1494 assert(Runtime.dynamicAlloc);
1495 self.alloc = Runtime.dynamicAlloc;
1496 Runtime.dynamicAlloc = function() { abort('cannot dynamically allocate, sbrk now has control') };
1497 }
1498 var ret = DYNAMICTOP;
1499 if (bytes != 0) self.alloc(bytes);
1500 return ret; // Previous break location.
1501 }
1502
1503
1504 var ERRNO_CODES={EPERM:1,ENOENT:2,ESRCH:3,EINTR:4,EIO:5,ENXIO:6,E2BIG:7,ENOEXEC:8,EBADF:9,ECHILD:10,EAGAIN:11,EWOULDBLOCK:11,ENOMEM:12,EACCES:13,EFAULT:14,ENOTBLK:15,EBUSY:16,EEXIST:17,EXDEV:18,ENODEV:19,ENOTDIR:20,EISDIR:21,EINVAL:22,ENFILE:23,EMFILE:24,ENOTTY:25,ETXTBSY:26,EFBIG:27,ENOSPC:28,ESPIPE:29,EROFS:30,EMLINK:31,EPIPE:32,EDOM:33,ERANGE:34,ENOMSG:42,EIDRM:43,ECHRNG:44,EL2NSYNC:45,EL3HLT:46,EL3RST:47,ELNRNG:48,EUNATCH:49,ENOCSI:50,EL2HLT:51,EDEADLK:35,ENOLCK:37,EBADE:52,EBADR:53,EXFULL:54,ENOANO:55,EBADRQC:56,EBADSLT:57,EDEADLOCK:35,EBFONT:59,ENOSTR:60,ENODATA:61,ETIME:62,ENOSR:63,ENONET:64,ENOPKG:65,EREMOTE:66,ENOLINK:67,EADV:68,ESRMNT:69,ECOMM:70,EPROTO:71,EMULTIHOP:72,EDOTDOT:73,EBADMSG:74,ENOTUNIQ:76,EBADFD:77,EREMCHG:78,ELIBACC:79,ELIBBAD:80,ELIBSCN:81,ELIBMAX:82,ELIBEXEC:83,ENOSYS:38,ENOTEMPTY:39,ENAMETOOLONG:36,ELOOP:40,EOPNOTSUPP:95,EPFNOSUPPORT:96,ECONNRESET:104,ENOBUFS:105,EAFNOSUPPORT:97,EPROTOTYPE:91,ENOTSOCK:88,ENOPROTOOPT:92,ESHUTDOWN:108,ECONNREFUSED:111,EADDRINUSE:98,ECONNABORTED:103,ENETUNREACH:101,ENETDOWN:100,ETIMEDOUT:110,EHOSTDOWN:112,EHOSTUNREACH:113,EINPROGRESS:115,EALREADY:114,EDESTADDRREQ:89,EMSGSIZE:90,EPROTONOSUPPORT:93,ESOCKTNOSUPPORT:94,EADDRNOTAVAIL:99,ENETRESET:102,EISCONN:106,ENOTCONN:107,ETOOMANYREFS:109,EUSERS:87,EDQUOT:122,ESTALE:116,ENOTSUP:95,ENOMEDIUM:123,EILSEQ:84,EOVERFLOW:75,ECANCELED:125,ENOTRECOVERABLE:131,EOWNERDEAD:130,ESTRPIPE:86};function _sysconf(name) {
1505 // long sysconf(int name);
1506 // http://pubs.opengroup.org/onlinepubs/009695399/functions/sysconf.html
1507 switch(name) {
1508 case 30: return PAGE_SIZE;
1509 case 132:
1510 case 133:
1511 case 12:
1512 case 137:
1513 case 138:
1514 case 15:
1515 case 235:
1516 case 16:
1517 case 17:
1518 case 18:
1519 case 19:
1520 case 20:
1521 case 149:
1522 case 13:
1523 case 10:
1524 case 236:
1525 case 153:
1526 case 9:
1527 case 21:
1528 case 22:
1529 case 159:
1530 case 154:
1531 case 14:
1532 case 77:
1533 case 78:
1534 case 139:
1535 case 80:
1536 case 81:
1537 case 79:
1538 case 82:
1539 case 68:
1540 case 67:
1541 case 164:
1542 case 11:
1543 case 29:
1544 case 47:
1545 case 48:
1546 case 95:
1547 case 52:
1548 case 51:
1549 case 46:
1550 return 200809;
1551 case 27:
1552 case 246:
1553 case 127:
1554 case 128:
1555 case 23:
1556 case 24:
1557 case 160:
1558 case 161:
1559 case 181:
1560 case 182:
1561 case 242:
1562 case 183:
1563 case 184:
1564 case 243:
1565 case 244:
1566 case 245:
1567 case 165:
1568 case 178:
1569 case 179:
1570 case 49:
1571 case 50:
1572 case 168:
1573 case 169:
1574 case 175:
1575 case 170:
1576 case 171:
1577 case 172:
1578 case 97:
1579 case 76:
1580 case 32:
1581 case 173:
1582 case 35:
1583 return -1;
1584 case 176:
1585 case 177:
1586 case 7:
1587 case 155:
1588 case 8:
1589 case 157:
1590 case 125:
1591 case 126:
1592 case 92:
1593 case 93:
1594 case 129:
1595 case 130:
1596 case 131:
1597 case 94:
1598 case 91:
1599 return 1;
1600 case 74:
1601 case 60:
1602 case 69:
1603 case 70:
1604 case 4:
1605 return 1024;
1606 case 31:
1607 case 42:
1608 case 72:
1609 return 32;
1610 case 87:
1611 case 26:
1612 case 33:
1613 return 2147483647;
1614 case 34:
1615 case 1:
1616 return 47839;
1617 case 38:
1618 case 36:
1619 return 99;
1620 case 43:
1621 case 37:
1622 return 2048;
1623 case 0: return 2097152;
1624 case 3: return 65536;
1625 case 28: return 32768;
1626 case 44: return 32767;
1627 case 75: return 16384;
1628 case 39: return 1000;
1629 case 89: return 700;
1630 case 71: return 256;
1631 case 40: return 255;
1632 case 2: return 100;
1633 case 180: return 64;
1634 case 25: return 20;
1635 case 5: return 16;
1636 case 6: return 6;
1637 case 73: return 4;
1638 case 84: return 1;
1639 }
1640 ___setErrNo(ERRNO_CODES.EINVAL);
1641 return -1;
1642 }
1643
1644 function _time(ptr) {
1645 var ret = Math.floor(Date.now()/1000);
1646 if (ptr) {
1647 HEAP32[((ptr)>>2)]=ret;
1648 }
1649 return ret;
1650 }
1651
1652
1653
1654
1655
1656 function _strlen(ptr) {
1657 ptr = ptr|0;
1658 var curr = 0;
1659 curr = ptr;
1660 while (HEAP8[(curr)]) {
1661 curr = (curr + 1)|0;
1662 }
1663 return (curr - ptr)|0;
1664 }
1665
1666
1667
1668
1669 var ERRNO_MESSAGES={0:"Success",1:"Not super-user",2:"No such file or directory",3:"No such process",4:"Interrupted system call",5:"I/O error",6:"No such device or address",7:"Arg list too long",8:"Exec format error",9:"Bad file number",10:"No children",11:"No more processes",12:"Not enough core",13:"Permission denied",14:"Bad address",15:"Block device required",16:"Mount device busy",17:"File exists",18:"Cross-device link",19:"No such device",20:"Not a directory",21:"Is a directory",22:"Invalid argument",23:"Too many open files in system",24:"Too many open files",25:"Not a typewriter",26:"Text file busy",27:"File too large",28:"No space left on device",29:"Illegal seek",30:"Read only file system",31:"Too many links",32:"Broken pipe",33:"Math arg out of domain of func",34:"Math result not representable",35:"File locking deadlock error",36:"File or path name too long",37:"No record locks available",38:"Function not implemented",39:"Directory not empty",40:"Too many symbolic links",42:"No message of desired type",43:"Identifier removed",44:"Channel number out of range",45:"Level 2 not synchronized",46:"Level 3 halted",47:"Level 3 reset",48:"Link number out of range",49:"Protocol driver not attached",50:"No CSI structure available",51:"Level 2 halted",52:"Invalid exchange",53:"Invalid request descriptor",54:"Exchange full",55:"No anode",56:"Invalid request code",57:"Invalid slot",59:"Bad font file fmt",60:"Device not a stream",61:"No data (for no delay io)",62:"Timer expired",63:"Out of streams resources",64:"Machine is not on the network",65:"Package not installed",66:"The object is remote",67:"The link has been severed",68:"Advertise error",69:"Srmount error",70:"Communication error on send",71:"Protocol error",72:"Multihop attempted",73:"Cross mount point (not really error)",74:"Trying to read unreadable message",75:"Value too large for defined data type",76:"Given log. name not unique",77:"f.d. invalid for this operation",78:"Remote address changed",79:"Can access a needed shared lib",80:"Accessing a corrupted shared lib",81:".lib section in a.out corrupted",82:"Attempting to link in too many libs",83:"Attempting to exec a shared library",84:"Illegal byte sequence",86:"Streams pipe error",87:"Too many users",88:"Socket operation on non-socket",89:"Destination address required",90:"Message too long",91:"Protocol wrong type for socket",92:"Protocol not available",93:"Unknown protocol",94:"Socket type not supported",95:"Not supported",96:"Protocol family not supported",97:"Address family not supported by protocol family",98:"Address already in use",99:"Address not available",100:"Network interface is not configured",101:"Network is unreachable",102:"Connection reset by network",103:"Connection aborted",104:"Connection reset by peer",105:"No buffer space available",106:"Socket is already connected",107:"Socket is not connected",108:"Can't send after socket shutdown",109:"Too many references",110:"Connection timed out",111:"Connection refused",112:"Host is down",113:"Host is unreachable",114:"Socket already connected",115:"Connection already in progress",116:"Stale file handle",122:"Quota exceeded",123:"No medium (in tape drive)",125:"Operation canceled",130:"Previous owner died",131:"State not recoverable"};
1670
1671 var TTY={ttys:[],init:function () {
1672 // https://github.com/kripken/emscripten/pull/1555
1673 // if (ENVIRONMENT_IS_NODE) {
1674 // // currently, FS.init does not distinguish if process.stdin is a file or TTY
1675 // // device, it always assumes it's a TTY device. because of this, we're forcing
1676 // // process.stdin to UTF8 encoding to at least make stdin reading compatible
1677 // // with text files until FS.init can be refactored.
1678 // process['stdin']['setEncoding']('utf8');
1679 // }
1680 },shutdown:function () {
1681 // https://github.com/kripken/emscripten/pull/1555
1682 // if (ENVIRONMENT_IS_NODE) {
1683 // // inolen: any idea as to why node -e 'process.stdin.read()' wouldn't exit immediately (with process.stdin being a tty)?
1684 // // isaacs: because now it's reading from the stream, you've expressed interest in it, so that read() kicks off a _read() which creates a ReadReq operation
1685 // // inolen: I thought read() in that case was a synchronous operation that just grabbed some amount of buffered data if it exists?
1686 // // isaacs: it is. but it also triggers a _read() call, which calls readStart() on the handle
1687 // // isaacs: do process.stdin.pause() and i'd think it'd probably close the pending call
1688 // process['stdin']['pause']();
1689 // }
1690 },register:function (dev, ops) {
1691 TTY.ttys[dev] = { input: [], output: [], ops: ops };
1692 FS.registerDevice(dev, TTY.stream_ops);
1693 },stream_ops:{open:function (stream) {
1694 var tty = TTY.ttys[stream.node.rdev];
1695 if (!tty) {
1696 throw new FS.ErrnoError(ERRNO_CODES.ENODEV);
1697 }
1698 stream.tty = tty;
1699 stream.seekable = false;
1700 },close:function (stream) {
1701 // flush any pending line data
1702 if (stream.tty.output.length) {
1703 stream.tty.ops.put_char(stream.tty, 10);
1704 }
1705 },read:function (stream, buffer, offset, length, pos /* ignored */) {
1706 if (!stream.tty || !stream.tty.ops.get_char) {
1707 throw new FS.ErrnoError(ERRNO_CODES.ENXIO);
1708 }
1709 var bytesRead = 0;
1710 for (var i = 0; i < length; i++) {
1711 var result;
1712 try {
1713 result = stream.tty.ops.get_char(stream.tty);
1714 } catch (e) {
1715 throw new FS.ErrnoError(ERRNO_CODES.EIO);
1716 }
1717 if (result === undefined && bytesRead === 0) {
1718 throw new FS.ErrnoError(ERRNO_CODES.EAGAIN);
1719 }
1720 if (result === null || result === undefined) break;
1721 bytesRead++;
1722 buffer[offset+i] = result;
1723 }
1724 if (bytesRead) {
1725 stream.node.timestamp = Date.now();
1726 }
1727 return bytesRead;
1728 },write:function (stream, buffer, offset, length, pos) {
1729 if (!stream.tty || !stream.tty.ops.put_char) {
1730 throw new FS.ErrnoError(ERRNO_CODES.ENXIO);
1731 }
1732 for (var i = 0; i < length; i++) {
1733 try {
1734 stream.tty.ops.put_char(stream.tty, buffer[offset+i]);
1735 } catch (e) {
1736 throw new FS.ErrnoError(ERRNO_CODES.EIO);
1737 }
1738 }
1739 if (length) {
1740 stream.node.timestamp = Date.now();
1741 }
1742 return i;
1743 }},default_tty_ops:{get_char:function (tty) {
1744 if (!tty.input.length) {
1745 var result = null;
1746 if (ENVIRONMENT_IS_NODE) {
1747 result = process['stdin']['read']();
1748 if (!result) {
1749 if (process['stdin']['_readableState'] && process['stdin']['_readableState']['ended']) {
1750 return null; // EOF
1751 }
1752 return undefined; // no data available
1753 }
1754 } else if (typeof window != 'undefined' &&
1755 typeof window.prompt == 'function') {
1756 // Browser.
1757 result = window.prompt('Input: '); // returns null on cancel
1758 if (result !== null) {
1759 result += '\n';
1760 }
1761 } else if (typeof readline == 'function') {
1762 // Command line.
1763 result = readline();
1764 if (result !== null) {
1765 result += '\n';
1766 }
1767 }
1768 if (!result) {
1769 return null;
1770 }
1771 tty.input = intArrayFromString(result, true);
1772 }
1773 return tty.input.shift();
1774 },put_char:function (tty, val) {
1775 if (val === null || val === 10) {
1776 Module['print'](tty.output.join(''));
1777 tty.output = [];
1778 } else {
1779 tty.output.push(TTY.utf8.processCChar(val));
1780 }
1781 }},default_tty1_ops:{put_char:function (tty, val) {
1782 if (val === null || val === 10) {
1783 Module['printErr'](tty.output.join(''));
1784 tty.output = [];
1785 } else {
1786 tty.output.push(TTY.utf8.processCChar(val));
1787 }
1788 }}};
1789
1790 var MEMFS={ops_table:null,CONTENT_OWNING:1,CONTENT_FLEXIBLE:2,CONTENT_FIXED:3,mount:function (mount) {
1791 return MEMFS.createNode(null, '/', 16384 | 0777, 0);
1792 },createNode:function (parent, name, mode, dev) {
1793 if (FS.isBlkdev(mode) || FS.isFIFO(mode)) {
1794 // no supported
1795 throw new FS.ErrnoError(ERRNO_CODES.EPERM);
1796 }
1797 if (!MEMFS.ops_table) {
1798 MEMFS.ops_table = {
1799 dir: {
1800 node: {
1801 getattr: MEMFS.node_ops.getattr,
1802 setattr: MEMFS.node_ops.setattr,
1803 lookup: MEMFS.node_ops.lookup,
1804 mknod: MEMFS.node_ops.mknod,
1805 mknod: MEMFS.node_ops.mknod,
1806 rename: MEMFS.node_ops.rename,
1807 unlink: MEMFS.node_ops.unlink,
1808 rmdir: MEMFS.node_ops.rmdir,
1809 readdir: MEMFS.node_ops.readdir,
1810 symlink: MEMFS.node_ops.symlink
1811 },
1812 stream: {
1813 llseek: MEMFS.stream_ops.llseek
1814 }
1815 },
1816 file: {
1817 node: {
1818 getattr: MEMFS.node_ops.getattr,
1819 setattr: MEMFS.node_ops.setattr
1820 },
1821 stream: {
1822 llseek: MEMFS.stream_ops.llseek,
1823 read: MEMFS.stream_ops.read,
1824 write: MEMFS.stream_ops.write,
1825 allocate: MEMFS.stream_ops.allocate,
1826 mmap: MEMFS.stream_ops.mmap
1827 }
1828 },
1829 link: {
1830 node: {
1831 getattr: MEMFS.node_ops.getattr,
1832 setattr: MEMFS.node_ops.setattr,
1833 readlink: MEMFS.node_ops.readlink
1834 },
1835 stream: {}
1836 },
1837 chrdev: {
1838 node: {
1839 getattr: MEMFS.node_ops.getattr,
1840 setattr: MEMFS.node_ops.setattr
1841 },
1842 stream: FS.chrdev_stream_ops
1843 },
1844 };
1845 }
1846 var node = FS.createNode(parent, name, mode, dev);
1847 if (FS.isDir(node.mode)) {
1848 node.node_ops = MEMFS.ops_table.dir.node;
1849 node.stream_ops = MEMFS.ops_table.dir.stream;
1850 node.contents = {};
1851 } else if (FS.isFile(node.mode)) {
1852 node.node_ops = MEMFS.ops_table.file.node;
1853 node.stream_ops = MEMFS.ops_table.file.stream;
1854 node.contents = [];
1855 node.contentMode = MEMFS.CONTENT_FLEXIBLE;
1856 } else if (FS.isLink(node.mode)) {
1857 node.node_ops = MEMFS.ops_table.link.node;
1858 node.stream_ops = MEMFS.ops_table.link.stream;
1859 } else if (FS.isChrdev(node.mode)) {
1860 node.node_ops = MEMFS.ops_table.chrdev.node;
1861 node.stream_ops = MEMFS.ops_table.chrdev.stream;
1862 }
1863 node.timestamp = Date.now();
1864 // add the new node to the parent
1865 if (parent) {
1866 parent.contents[name] = node;
1867 }
1868 return node;
1869 },ensureFlexible:function (node) {
1870 if (node.contentMode !== MEMFS.CONTENT_FLEXIBLE) {
1871 var contents = node.contents;
1872 node.contents = Array.prototype.slice.call(contents);
1873 node.contentMode = MEMFS.CONTENT_FLEXIBLE;
1874 }
1875 },node_ops:{getattr:function (node) {
1876 var attr = {};
1877 // device numbers reuse inode numbers.
1878 attr.dev = FS.isChrdev(node.mode) ? node.id : 1;
1879 attr.ino = node.id;
1880 attr.mode = node.mode;
1881 attr.nlink = 1;
1882 attr.uid = 0;
1883 attr.gid = 0;
1884 attr.rdev = node.rdev;
1885 if (FS.isDir(node.mode)) {
1886 attr.size = 4096;
1887 } else if (FS.isFile(node.mode)) {
1888 attr.size = node.contents.length;
1889 } else if (FS.isLink(node.mode)) {
1890 attr.size = node.link.length;
1891 } else {
1892 attr.size = 0;
1893 }
1894 attr.atime = new Date(node.timestamp);
1895 attr.mtime = new Date(node.timestamp);
1896 attr.ctime = new Date(node.timestamp);
1897 // NOTE: In our implementation, st_blocks = Math.ceil(st_size/st_blksize),
1898 // but this is not required by the standard.
1899 attr.blksize = 4096;
1900 attr.blocks = Math.ceil(attr.size / attr.blksize);
1901 return attr;
1902 },setattr:function (node, attr) {
1903 if (attr.mode !== undefined) {
1904 node.mode = attr.mode;
1905 }
1906 if (attr.timestamp !== undefined) {
1907 node.timestamp = attr.timestamp;
1908 }
1909 if (attr.size !== undefined) {
1910 MEMFS.ensureFlexible(node);
1911 var contents = node.contents;
1912 if (attr.size < contents.length) contents.length = attr.size;
1913 else while (attr.size > contents.length) contents.push(0);
1914 }
1915 },lookup:function (parent, name) {
1916 throw FS.genericErrors[ERRNO_CODES.ENOENT];
1917 },mknod:function (parent, name, mode, dev) {
1918 return MEMFS.createNode(parent, name, mode, dev);
1919 },rename:function (old_node, new_dir, new_name) {
1920 // if we're overwriting a directory at new_name, make sure it's empty.
1921 if (FS.isDir(old_node.mode)) {
1922 var new_node;
1923 try {
1924 new_node = FS.lookupNode(new_dir, new_name);
1925 } catch (e) {
1926 }
1927 if (new_node) {
1928 for (var i in new_node.contents) {
1929 throw new FS.ErrnoError(ERRNO_CODES.ENOTEMPTY);
1930 }
1931 }
1932 }
1933 // do the internal rewiring
1934 delete old_node.parent.contents[old_node.name];
1935 old_node.name = new_name;
1936 new_dir.contents[new_name] = old_node;
1937 old_node.parent = new_dir;
1938 },unlink:function (parent, name) {
1939 delete parent.contents[name];
1940 },rmdir:function (parent, name) {
1941 var node = FS.lookupNode(parent, name);
1942 for (var i in node.contents) {
1943 throw new FS.ErrnoError(ERRNO_CODES.ENOTEMPTY);
1944 }
1945 delete parent.contents[name];
1946 },readdir:function (node) {
1947 var entries = ['.', '..']
1948 for (var key in node.contents) {
1949 if (!node.contents.hasOwnProperty(key)) {
1950 continue;
1951 }
1952 entries.push(key);
1953 }
1954 return entries;
1955 },symlink:function (parent, newname, oldpath) {
1956 var node = MEMFS.createNode(parent, newname, 0777 | 40960, 0);
1957 node.link = oldpath;
1958 return node;
1959 },readlink:function (node) {
1960 if (!FS.isLink(node.mode)) {
1961 throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
1962 }
1963 return node.link;
1964 }},stream_ops:{read:function (stream, buffer, offset, length, position) {
1965 var contents = stream.node.contents;
1966 if (position >= contents.length)
1967 return 0;
1968 var size = Math.min(contents.length - position, length);
1969 assert(size >= 0);
1970 if (size > 8 && contents.subarray) { // non-trivial, and typed array
1971 buffer.set(contents.subarray(position, position + size), offset);
1972 } else
1973 {
1974 for (var i = 0; i < size; i++) {
1975 buffer[offset + i] = contents[position + i];
1976 }
1977 }
1978 return size;
1979 },write:function (stream, buffer, offset, length, position, canOwn) {
1980 var node = stream.node;
1981 node.timestamp = Date.now();
1982 var contents = node.contents;
1983 if (length && contents.length === 0 && position === 0 && buffer.subarray) {
1984 // just replace it with the new data
1985 assert(buffer.length);
1986 if (canOwn && offset === 0) {
1987 node.contents = buffer; // this could be a subarray of Emscripten HEAP, or allocated from some other source.
1988 node.contentMode = (buffer.buffer === HEAP8.buffer) ? MEMFS.CONTENT_OWNING : MEMFS.CONTENT_FIXED;
1989 } else {
1990 node.contents = new Uint8Array(buffer.subarray(offset, offset+length));
1991 node.contentMode = MEMFS.CONTENT_FIXED;
1992 }
1993 return length;
1994 }
1995 MEMFS.ensureFlexible(node);
1996 var contents = node.contents;
1997 while (contents.length < position) contents.push(0);
1998 for (var i = 0; i < length; i++) {
1999 contents[position + i] = buffer[offset + i];
2000 }
2001 return length;
2002 },llseek:function (stream, offset, whence) {
2003 var position = offset;
2004 if (whence === 1) { // SEEK_CUR.
2005 position += stream.position;
2006 } else if (whence === 2) { // SEEK_END.
2007 if (FS.isFile(stream.node.mode)) {
2008 position += stream.node.contents.length;
2009 }
2010 }
2011 if (position < 0) {
2012 throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
2013 }
2014 stream.ungotten = [];
2015 stream.position = position;
2016 return position;
2017 },allocate:function (stream, offset, length) {
2018 MEMFS.ensureFlexible(stream.node);
2019 var contents = stream.node.contents;
2020 var limit = offset + length;
2021 while (limit > contents.length) contents.push(0);
2022 },mmap:function (stream, buffer, offset, length, position, prot, flags) {
2023 if (!FS.isFile(stream.node.mode)) {
2024 throw new FS.ErrnoError(ERRNO_CODES.ENODEV);
2025 }
2026 var ptr;
2027 var allocated;
2028 var contents = stream.node.contents;
2029 // Only make a new copy when MAP_PRIVATE is specified.
2030 if ( !(flags & 2) &&
2031 (contents.buffer === buffer || contents.buffer === buffer.buffer) ) {
2032 // We can't emulate MAP_SHARED when the file is not backed by the buffer
2033 // we're mapping to (e.g. the HEAP buffer).
2034 allocated = false;
2035 ptr = contents.byteOffset;
2036 } else {
2037 // Try to avoid unnecessary slices.
2038 if (position > 0 || position + length < contents.length) {
2039 if (contents.subarray) {
2040 contents = contents.subarray(position, position + length);
2041 } else {
2042 contents = Array.prototype.slice.call(contents, position, position + length);
2043 }
2044 }
2045 allocated = true;
2046 ptr = _malloc(length);
2047 if (!ptr) {
2048 throw new FS.ErrnoError(ERRNO_CODES.ENOMEM);
2049 }
2050 buffer.set(contents, ptr);
2051 }
2052 return { ptr: ptr, allocated: allocated };
2053 }}};
2054
2055 var IDBFS={dbs:{},indexedDB:function () {
2056 return window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB;
2057 },DB_VERSION:20,DB_STORE_NAME:"FILE_DATA",mount:function (mount) {
2058 return MEMFS.mount.apply(null, arguments);
2059 },syncfs:function (mount, populate, callback) {
2060 IDBFS.getLocalSet(mount, function(err, local) {
2061 if (err) return callback(err);
2062
2063 IDBFS.getRemoteSet(mount, function(err, remote) {
2064 if (err) return callback(err);
2065
2066 var src = populate ? remote : local;
2067 var dst = populate ? local : remote;
2068
2069 IDBFS.reconcile(src, dst, callback);
2070 });
2071 });
2072 },reconcile:function (src, dst, callback) {
2073 var total = 0;
2074
2075 var create = {};
2076 for (var key in src.files) {
2077 if (!src.files.hasOwnProperty(key)) continue;
2078 var e = src.files[key];
2079 var e2 = dst.files[key];
2080 if (!e2 || e.timestamp > e2.timestamp) {
2081 create[key] = e;
2082 total++;
2083 }
2084 }
2085
2086 var remove = {};
2087 for (var key in dst.files) {
2088 if (!dst.files.hasOwnProperty(key)) continue;
2089 var e = dst.files[key];
2090 var e2 = src.files[key];
2091 if (!e2) {
2092 remove[key] = e;
2093 total++;
2094 }
2095 }
2096
2097 if (!total) {
2098 // early out
2099 return callback(null);
2100 }
2101
2102 var completed = 0;
2103 function done(err) {
2104 if (err) return callback(err);
2105 if (++completed >= total) {
2106 return callback(null);
2107 }
2108 };
2109
2110 // create a single transaction to handle and IDB reads / writes we'll need to do
2111 var db = src.type === 'remote' ? src.db : dst.db;
2112 var transaction = db.transaction([IDBFS.DB_STORE_NAME], 'readwrite');
2113 transaction.onerror = function transaction_onerror() { callback(this.error); };
2114 var store = transaction.objectStore(IDBFS.DB_STORE_NAME);
2115
2116 for (var path in create) {
2117 if (!create.hasOwnProperty(path)) continue;
2118 var entry = create[path];
2119
2120 if (dst.type === 'local') {
2121 // save file to local
2122 try {
2123 if (FS.isDir(entry.mode)) {
2124 FS.mkdir(path, entry.mode);
2125 } else if (FS.isFile(entry.mode)) {
2126 var stream = FS.open(path, 'w+', 0666);
2127 FS.write(stream, entry.contents, 0, entry.contents.length, 0, true /* canOwn */);
2128 FS.close(stream);
2129 }
2130 done(null);
2131 } catch (e) {
2132 return done(e);
2133 }
2134 } else {
2135 // save file to IDB
2136 var req = store.put(entry, path);
2137 req.onsuccess = function req_onsuccess() { done(null); };
2138 req.onerror = function req_onerror() { done(this.error); };
2139 }
2140 }
2141
2142 for (var path in remove) {
2143 if (!remove.hasOwnProperty(path)) continue;
2144 var entry = remove[path];
2145
2146 if (dst.type === 'local') {
2147 // delete file from local
2148 try {
2149 if (FS.isDir(entry.mode)) {
2150 // TODO recursive delete?
2151 FS.rmdir(path);
2152 } else if (FS.isFile(entry.mode)) {
2153 FS.unlink(path);
2154 }
2155 done(null);
2156 } catch (e) {
2157 return done(e);
2158 }
2159 } else {
2160 // delete file from IDB
2161 var req = store.delete(path);
2162 req.onsuccess = function req_onsuccess() { done(null); };
2163 req.onerror = function req_onerror() { done(this.error); };
2164 }
2165 }
2166 },getLocalSet:function (mount, callback) {
2167 var files = {};
2168
2169 function isRealDir(p) {
2170 return p !== '.' && p !== '..';
2171 };
2172 function toAbsolute(root) {
2173 return function(p) {
2174 return PATH.join2(root, p);
2175 }
2176 };
2177
2178 var check = FS.readdir(mount.mountpoint)
2179 .filter(isRealDir)
2180 .map(toAbsolute(mount.mountpoint));
2181
2182 while (check.length) {
2183 var path = check.pop();
2184 var stat, node;
2185
2186 try {
2187 var lookup = FS.lookupPath(path);
2188 node = lookup.node;
2189 stat = FS.stat(path);
2190 } catch (e) {
2191 return callback(e);
2192 }
2193
2194 if (FS.isDir(stat.mode)) {
2195 check.push.apply(check, FS.readdir(path)
2196 .filter(isRealDir)
2197 .map(toAbsolute(path)));
2198
2199 files[path] = { mode: stat.mode, timestamp: stat.mtime };
2200 } else if (FS.isFile(stat.mode)) {
2201 files[path] = { contents: node.contents, mode: stat.mode, timestamp: stat.mtime };
2202 } else {
2203 return callback(new Error('node type not supported'));
2204 }
2205 }
2206
2207 return callback(null, { type: 'local', files: files });
2208 },getDB:function (name, callback) {
2209 // look it up in the cache
2210 var db = IDBFS.dbs[name];
2211 if (db) {
2212 return callback(null, db);
2213 }
2214 var req;
2215 try {
2216 req = IDBFS.indexedDB().open(name, IDBFS.DB_VERSION);
2217 } catch (e) {
2218 return onerror(e);
2219 }
2220 req.onupgradeneeded = function req_onupgradeneeded() {
2221 db = req.result;
2222 db.createObjectStore(IDBFS.DB_STORE_NAME);
2223 };
2224 req.onsuccess = function req_onsuccess() {
2225 db = req.result;
2226 // add to the cache
2227 IDBFS.dbs[name] = db;
2228 callback(null, db);
2229 };
2230 req.onerror = function req_onerror() {
2231 callback(this.error);
2232 };
2233 },getRemoteSet:function (mount, callback) {
2234 var files = {};
2235
2236 IDBFS.getDB(mount.mountpoint, function(err, db) {
2237 if (err) return callback(err);
2238
2239 var transaction = db.transaction([IDBFS.DB_STORE_NAME], 'readonly');
2240 transaction.onerror = function transaction_onerror() { callback(this.error); };
2241
2242 var store = transaction.objectStore(IDBFS.DB_STORE_NAME);
2243 store.openCursor().onsuccess = function store_openCursor_onsuccess(event) {
2244 var cursor = event.target.result;
2245 if (!cursor) {
2246 return callback(null, { type: 'remote', db: db, files: files });
2247 }
2248
2249 files[cursor.key] = cursor.value;
2250 cursor.continue();
2251 };
2252 });
2253 }};
2254
2255 var NODEFS={isWindows:false,staticInit:function () {
2256 NODEFS.isWindows = !!process.platform.match(/^win/);
2257 },mount:function (mount) {
2258 assert(ENVIRONMENT_IS_NODE);
2259 return NODEFS.createNode(null, '/', NODEFS.getMode(mount.opts.root), 0);
2260 },createNode:function (parent, name, mode, dev) {
2261 if (!FS.isDir(mode) && !FS.isFile(mode) && !FS.isLink(mode)) {
2262 throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
2263 }
2264 var node = FS.createNode(parent, name, mode);
2265 node.node_ops = NODEFS.node_ops;
2266 node.stream_ops = NODEFS.stream_ops;
2267 return node;
2268 },getMode:function (path) {
2269 var stat;
2270 try {
2271 stat = fs.lstatSync(path);
2272 if (NODEFS.isWindows) {
2273 // On Windows, directories return permission bits 'rw-rw-rw-', even though they have 'rwxrwxrwx', so
2274 // propagate write bits to execute bits.
2275 stat.mode = stat.mode | ((stat.mode & 146) >> 1);
2276 }
2277 } catch (e) {
2278 if (!e.code) throw e;
2279 throw new FS.ErrnoError(ERRNO_CODES[e.code]);
2280 }
2281 return stat.mode;
2282 },realPath:function (node) {
2283 var parts = [];
2284 while (node.parent !== node) {
2285 parts.push(node.name);
2286 node = node.parent;
2287 }
2288 parts.push(node.mount.opts.root);
2289 parts.reverse();
2290 return PATH.join.apply(null, parts);
2291 },flagsToPermissionStringMap:{0:"r",1:"r+",2:"r+",64:"r",65:"r+",66:"r+",129:"rx+",193:"rx+",514:"w+",577:"w",578:"w+",705:"wx",706:"wx+",1024:"a",1025:"a",1026:"a+",1089:"a",1090:"a+",1153:"ax",1154:"ax+",1217:"ax",1218:"ax+",4096:"rs",4098:"rs+"},flagsToPermissionString:function (flags) {
2292 if (flags in NODEFS.flagsToPermissionStringMap) {
2293 return NODEFS.flagsToPermissionStringMap[flags];
2294 } else {
2295 return flags;
2296 }
2297 },node_ops:{getattr:function (node) {
2298 var path = NODEFS.realPath(node);
2299 var stat;
2300 try {
2301 stat = fs.lstatSync(path);
2302 } catch (e) {
2303 if (!e.code) throw e;
2304 throw new FS.ErrnoError(ERRNO_CODES[e.code]);
2305 }
2306 // node.js v0.10.20 doesn't report blksize and blocks on Windows. Fake them with default blksize of 4096.
2307 // See http://support.microsoft.com/kb/140365
2308 if (NODEFS.isWindows && !stat.blksize) {
2309 stat.blksize = 4096;
2310 }
2311 if (NODEFS.isWindows && !stat.blocks) {
2312 stat.blocks = (stat.size+stat.blksize-1)/stat.blksize|0;
2313 }
2314 return {
2315 dev: stat.dev,
2316 ino: stat.ino,
2317 mode: stat.mode,
2318 nlink: stat.nlink,
2319 uid: stat.uid,
2320 gid: stat.gid,
2321 rdev: stat.rdev,
2322 size: stat.size,
2323 atime: stat.atime,
2324 mtime: stat.mtime,
2325 ctime: stat.ctime,
2326 blksize: stat.blksize,
2327 blocks: stat.blocks
2328 };
2329 },setattr:function (node, attr) {
2330 var path = NODEFS.realPath(node);
2331 try {
2332 if (attr.mode !== undefined) {
2333 fs.chmodSync(path, attr.mode);
2334 // update the common node structure mode as well
2335 node.mode = attr.mode;
2336 }
2337 if (attr.timestamp !== undefined) {
2338 var date = new Date(attr.timestamp);
2339 fs.utimesSync(path, date, date);
2340 }
2341 if (attr.size !== undefined) {
2342 fs.truncateSync(path, attr.size);
2343 }
2344 } catch (e) {
2345 if (!e.code) throw e;
2346 throw new FS.ErrnoError(ERRNO_CODES[e.code]);
2347 }
2348 },lookup:function (parent, name) {
2349 var path = PATH.join2(NODEFS.realPath(parent), name);
2350 var mode = NODEFS.getMode(path);
2351 return NODEFS.createNode(parent, name, mode);
2352 },mknod:function (parent, name, mode, dev) {
2353 var node = NODEFS.createNode(parent, name, mode, dev);
2354 // create the backing node for this in the fs root as well
2355 var path = NODEFS.realPath(node);
2356 try {
2357 if (FS.isDir(node.mode)) {
2358 fs.mkdirSync(path, node.mode);
2359 } else {
2360 fs.writeFileSync(path, '', { mode: node.mode });
2361 }
2362 } catch (e) {
2363 if (!e.code) throw e;
2364 throw new FS.ErrnoError(ERRNO_CODES[e.code]);
2365 }
2366 return node;
2367 },rename:function (oldNode, newDir, newName) {
2368 var oldPath = NODEFS.realPath(oldNode);
2369 var newPath = PATH.join2(NODEFS.realPath(newDir), newName);
2370 try {
2371 fs.renameSync(oldPath, newPath);
2372 } catch (e) {
2373 if (!e.code) throw e;
2374 throw new FS.ErrnoError(ERRNO_CODES[e.code]);
2375 }
2376 },unlink:function (parent, name) {
2377 var path = PATH.join2(NODEFS.realPath(parent), name);
2378 try {
2379 fs.unlinkSync(path);
2380 } catch (e) {
2381 if (!e.code) throw e;
2382 throw new FS.ErrnoError(ERRNO_CODES[e.code]);
2383 }
2384 },rmdir:function (parent, name) {
2385 var path = PATH.join2(NODEFS.realPath(parent), name);
2386 try {
2387 fs.rmdirSync(path);
2388 } catch (e) {
2389 if (!e.code) throw e;
2390 throw new FS.ErrnoError(ERRNO_CODES[e.code]);
2391 }
2392 },readdir:function (node) {
2393 var path = NODEFS.realPath(node);
2394 try {
2395 return fs.readdirSync(path);
2396 } catch (e) {
2397 if (!e.code) throw e;
2398 throw new FS.ErrnoError(ERRNO_CODES[e.code]);
2399 }
2400 },symlink:function (parent, newName, oldPath) {
2401 var newPath = PATH.join2(NODEFS.realPath(parent), newName);
2402 try {
2403 fs.symlinkSync(oldPath, newPath);
2404 } catch (e) {
2405 if (!e.code) throw e;
2406 throw new FS.ErrnoError(ERRNO_CODES[e.code]);
2407 }
2408 },readlink:function (node) {
2409 var path = NODEFS.realPath(node);
2410 try {
2411 return fs.readlinkSync(path);
2412 } catch (e) {
2413 if (!e.code) throw e;
2414 throw new FS.ErrnoError(ERRNO_CODES[e.code]);
2415 }
2416 }},stream_ops:{open:function (stream) {
2417 var path = NODEFS.realPath(stream.node);
2418 try {
2419 if (FS.isFile(stream.node.mode)) {
2420 stream.nfd = fs.openSync(path, NODEFS.flagsToPermissionString(stream.flags));
2421 }
2422 } catch (e) {
2423 if (!e.code) throw e;
2424 throw new FS.ErrnoError(ERRNO_CODES[e.code]);
2425 }
2426 },close:function (stream) {
2427 try {
2428 if (FS.isFile(stream.node.mode) && stream.nfd) {
2429 fs.closeSync(stream.nfd);
2430 }
2431 } catch (e) {
2432 if (!e.code) throw e;
2433 throw new FS.ErrnoError(ERRNO_CODES[e.code]);
2434 }
2435 },read:function (stream, buffer, offset, length, position) {
2436 // FIXME this is terrible.
2437 var nbuffer = new Buffer(length);
2438 var res;
2439 try {
2440 res = fs.readSync(stream.nfd, nbuffer, 0, length, position);
2441 } catch (e) {
2442 throw new FS.ErrnoError(ERRNO_CODES[e.code]);
2443 }
2444 if (res > 0) {
2445 for (var i = 0; i < res; i++) {
2446 buffer[offset + i] = nbuffer[i];
2447 }
2448 }
2449 return res;
2450 },write:function (stream, buffer, offset, length, position) {
2451 // FIXME this is terrible.
2452 var nbuffer = new Buffer(buffer.subarray(offset, offset + length));
2453 var res;
2454 try {
2455 res = fs.writeSync(stream.nfd, nbuffer, 0, length, position);
2456 } catch (e) {
2457 throw new FS.ErrnoError(ERRNO_CODES[e.code]);
2458 }
2459 return res;
2460 },llseek:function (stream, offset, whence) {
2461 var position = offset;
2462 if (whence === 1) { // SEEK_CUR.
2463 position += stream.position;
2464 } else if (whence === 2) { // SEEK_END.
2465 if (FS.isFile(stream.node.mode)) {
2466 try {
2467 var stat = fs.fstatSync(stream.nfd);
2468 position += stat.size;
2469 } catch (e) {
2470 throw new FS.ErrnoError(ERRNO_CODES[e.code]);
2471 }
2472 }
2473 }
2474
2475 if (position < 0) {
2476 throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
2477 }
2478
2479 stream.position = position;
2480 return position;
2481 }}};
2482
2483 var _stdin=allocate(1, "i32*", ALLOC_STATIC);
2484
2485 var _stdout=allocate(1, "i32*", ALLOC_STATIC);
2486
2487 var _stderr=allocate(1, "i32*", ALLOC_STATIC);
2488
2489 function _fflush(stream) {
2490 // int fflush(FILE *stream);
2491 // http://pubs.opengroup.org/onlinepubs/000095399/functions/fflush.html
2492 // we don't currently perform any user-space buffering of data
2493 }var FS={root:null,mounts:[],devices:[null],streams:[null],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,ErrnoError:null,genericErrors:{},handleFSError:function (e) {
2494 if (!(e instanceof FS.ErrnoError)) throw e + ' : ' + stackTrace();
2495 return ___setErrNo(e.errno);
2496 },lookupPath:function (path, opts) {
2497 path = PATH.resolve(FS.cwd(), path);
2498 opts = opts || { recurse_count: 0 };
2499
2500 if (opts.recurse_count > 8) { // max recursive lookup of 8
2501 throw new FS.ErrnoError(ERRNO_CODES.ELOOP);
2502 }
2503
2504 // split the path
2505 var parts = PATH.normalizeArray(path.split('/').filter(function(p) {
2506 return !!p;
2507 }), false);
2508
2509 // start at the root
2510 var current = FS.root;
2511 var current_path = '/';
2512
2513 for (var i = 0; i < parts.length; i++) {
2514 var islast = (i === parts.length-1);
2515 if (islast && opts.parent) {
2516 // stop resolving
2517 break;
2518 }
2519
2520 current = FS.lookupNode(current, parts[i]);
2521 current_path = PATH.join2(current_path, parts[i]);
2522
2523 // jump to the mount's root node if this is a mountpoint
2524 if (FS.isMountpoint(current)) {
2525 current = current.mount.root;
2526 }
2527
2528 // follow symlinks
2529 // by default, lookupPath will not follow a symlink if it is the final path component.
2530 // setting opts.follow = true will override this behavior.
2531 if (!islast || opts.follow) {
2532 var count = 0;
2533 while (FS.isLink(current.mode)) {
2534 var link = FS.readlink(current_path);
2535 current_path = PATH.resolve(PATH.dirname(current_path), link);
2536
2537 var lookup = FS.lookupPath(current_path, { recurse_count: opts.recurse_count });
2538 current = lookup.node;
2539
2540 if (count++ > 40) { // limit max consecutive symlinks to 40 (SYMLOOP_MAX).
2541 throw new FS.ErrnoError(ERRNO_CODES.ELOOP);
2542 }
2543 }
2544 }
2545 }
2546
2547 return { path: current_path, node: current };
2548 },getPath:function (node) {
2549 var path;
2550 while (true) {
2551 if (FS.isRoot(node)) {
2552 var mount = node.mount.mountpoint;
2553 if (!path) return mount;
2554 return mount[mount.length-1] !== '/' ? mount + '/' + path : mount + path;
2555 }
2556 path = path ? node.name + '/' + path : node.name;
2557 node = node.parent;
2558 }
2559 },hashName:function (parentid, name) {
2560 var hash = 0;
2561
2562
2563 for (var i = 0; i < name.length; i++) {
2564 hash = ((hash << 5) - hash + name.charCodeAt(i)) | 0;
2565 }
2566 return ((parentid + hash) >>> 0) % FS.nameTable.length;
2567 },hashAddNode:function (node) {
2568 var hash = FS.hashName(node.parent.id, node.name);
2569 node.name_next = FS.nameTable[hash];
2570 FS.nameTable[hash] = node;
2571 },hashRemoveNode:function (node) {
2572 var hash = FS.hashName(node.parent.id, node.name);
2573 if (FS.nameTable[hash] === node) {
2574 FS.nameTable[hash] = node.name_next;
2575 } else {
2576 var current = FS.nameTable[hash];
2577 while (current) {
2578 if (current.name_next === node) {
2579 current.name_next = node.name_next;
2580 break;
2581 }
2582 current = current.name_next;
2583 }
2584 }
2585 },lookupNode:function (parent, name) {
2586 var err = FS.mayLookup(parent);
2587 if (err) {
2588 throw new FS.ErrnoError(err);
2589 }
2590 var hash = FS.hashName(parent.id, name);
2591 for (var node = FS.nameTable[hash]; node; node = node.name_next) {
2592 var nodeName = node.name;
2593 if (node.parent.id === parent.id && nodeName === name) {
2594 return node;
2595 }
2596 }
2597 // if we failed to find it in the cache, call into the VFS
2598 return FS.lookup(parent, name);
2599 },createNode:function (parent, name, mode, rdev) {
2600 if (!FS.FSNode) {
2601 FS.FSNode = function(parent, name, mode, rdev) {
2602 this.id = FS.nextInode++;
2603 this.name = name;
2604 this.mode = mode;
2605 this.node_ops = {};
2606 this.stream_ops = {};
2607 this.rdev = rdev;
2608 this.parent = null;
2609 this.mount = null;
2610 if (!parent) {
2611 parent = this; // root node sets parent to itself
2612 }
2613 this.parent = parent;
2614 this.mount = parent.mount;
2615 FS.hashAddNode(this);
2616 };
2617
2618 // compatibility
2619 var readMode = 292 | 73;
2620 var writeMode = 146;
2621
2622 FS.FSNode.prototype = {};
2623
2624 // NOTE we must use Object.defineProperties instead of individual calls to
2625 // Object.defineProperty in order to make closure compiler happy
2626 Object.defineProperties(FS.FSNode.prototype, {
2627 read: {
2628 get: function() { return (this.mode & readMode) === readMode; },
2629 set: function(val) { val ? this.mode |= readMode : this.mode &= ~readMode; }
2630 },
2631 write: {
2632 get: function() { return (this.mode & writeMode) === writeMode; },
2633 set: function(val) { val ? this.mode |= writeMode : this.mode &= ~writeMode; }
2634 },
2635 isFolder: {
2636 get: function() { return FS.isDir(this.mode); },
2637 },
2638 isDevice: {
2639 get: function() { return FS.isChrdev(this.mode); },
2640 },
2641 });
2642 }
2643 return new FS.FSNode(parent, name, mode, rdev);
2644 },destroyNode:function (node) {
2645 FS.hashRemoveNode(node);
2646 },isRoot:function (node) {
2647 return node === node.parent;
2648 },isMountpoint:function (node) {
2649 return node.mounted;
2650 },isFile:function (mode) {
2651 return (mode & 61440) === 32768;
2652 },isDir:function (mode) {
2653 return (mode & 61440) === 16384;
2654 },isLink:function (mode) {
2655 return (mode & 61440) === 40960;
2656 },isChrdev:function (mode) {
2657 return (mode & 61440) === 8192;
2658 },isBlkdev:function (mode) {
2659 return (mode & 61440) === 24576;
2660 },isFIFO:function (mode) {
2661 return (mode & 61440) === 4096;
2662 },isSocket:function (mode) {
2663 return (mode & 49152) === 49152;
2664 },flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function (str) {
2665 var flags = FS.flagModes[str];
2666 if (typeof flags === 'undefined') {
2667 throw new Error('Unknown file open mode: ' + str);
2668 }
2669 return flags;
2670 },flagsToPermissionString:function (flag) {
2671 var accmode = flag & 2097155;
2672 var perms = ['r', 'w', 'rw'][accmode];
2673 if ((flag & 512)) {
2674 perms += 'w';
2675 }
2676 return perms;
2677 },nodePermissions:function (node, perms) {
2678 if (FS.ignorePermissions) {
2679 return 0;
2680 }
2681 // return 0 if any user, group or owner bits are set.
2682 if (perms.indexOf('r') !== -1 && !(node.mode & 292)) {
2683 return ERRNO_CODES.EACCES;
2684 } else if (perms.indexOf('w') !== -1 && !(node.mode & 146)) {
2685 return ERRNO_CODES.EACCES;
2686 } else if (perms.indexOf('x') !== -1 && !(node.mode & 73)) {
2687 return ERRNO_CODES.EACCES;
2688 }
2689 return 0;
2690 },mayLookup:function (dir) {
2691 return FS.nodePermissions(dir, 'x');
2692 },mayCreate:function (dir, name) {
2693 try {
2694 var node = FS.lookupNode(dir, name);
2695 return ERRNO_CODES.EEXIST;
2696 } catch (e) {
2697 }
2698 return FS.nodePermissions(dir, 'wx');
2699 },mayDelete:function (dir, name, isdir) {
2700 var node;
2701 try {
2702 node = FS.lookupNode(dir, name);
2703 } catch (e) {
2704 return e.errno;
2705 }
2706 var err = FS.nodePermissions(dir, 'wx');
2707 if (err) {
2708 return err;
2709 }
2710 if (isdir) {
2711 if (!FS.isDir(node.mode)) {
2712 return ERRNO_CODES.ENOTDIR;
2713 }
2714 if (FS.isRoot(node) || FS.getPath(node) === FS.cwd()) {
2715 return ERRNO_CODES.EBUSY;
2716 }
2717 } else {
2718 if (FS.isDir(node.mode)) {
2719 return ERRNO_CODES.EISDIR;
2720 }
2721 }
2722 return 0;
2723 },mayOpen:function (node, flags) {
2724 if (!node) {
2725 return ERRNO_CODES.ENOENT;
2726 }
2727 if (FS.isLink(node.mode)) {
2728 return ERRNO_CODES.ELOOP;
2729 } else if (FS.isDir(node.mode)) {
2730 if ((flags & 2097155) !== 0 || // opening for write
2731 (flags & 512)) {
2732 return ERRNO_CODES.EISDIR;
2733 }
2734 }
2735 return FS.nodePermissions(node, FS.flagsToPermissionString(flags));
2736 },MAX_OPEN_FDS:4096,nextfd:function (fd_start, fd_end) {
2737 fd_start = fd_start || 1;
2738 fd_end = fd_end || FS.MAX_OPEN_FDS;
2739 for (var fd = fd_start; fd <= fd_end; fd++) {
2740 if (!FS.streams[fd]) {
2741 return fd;
2742 }
2743 }
2744 throw new FS.ErrnoError(ERRNO_CODES.EMFILE);
2745 },getStream:function (fd) {
2746 return FS.streams[fd];
2747 },createStream:function (stream, fd_start, fd_end) {
2748 if (!FS.FSStream) {
2749 FS.FSStream = function(){};
2750 FS.FSStream.prototype = {};
2751 // compatibility
2752 Object.defineProperties(FS.FSStream.prototype, {
2753 object: {
2754 get: function() { return this.node; },
2755 set: function(val) { this.node = val; }
2756 },
2757 isRead: {
2758 get: function() { return (this.flags & 2097155) !== 1; }
2759 },
2760 isWrite: {
2761 get: function() { return (this.flags & 2097155) !== 0; }
2762 },
2763 isAppend: {
2764 get: function() { return (this.flags & 1024); }
2765 }
2766 });
2767 }
2768 if (stream.__proto__) {
2769 // reuse the object
2770 stream.__proto__ = FS.FSStream.prototype;
2771 } else {
2772 var newStream = new FS.FSStream();
2773 for (var p in stream) {
2774 newStream[p] = stream[p];
2775 }
2776 stream = newStream;
2777 }
2778 var fd = FS.nextfd(fd_start, fd_end);
2779 stream.fd = fd;
2780 FS.streams[fd] = stream;
2781 return stream;
2782 },closeStream:function (fd) {
2783 FS.streams[fd] = null;
2784 },chrdev_stream_ops:{open:function (stream) {
2785 var device = FS.getDevice(stream.node.rdev);
2786 // override node's stream ops with the device's
2787 stream.stream_ops = device.stream_ops;
2788 // forward the open call
2789 if (stream.stream_ops.open) {
2790 stream.stream_ops.open(stream);
2791 }
2792 },llseek:function () {
2793 throw new FS.ErrnoError(ERRNO_CODES.ESPIPE);
2794 }},major:function (dev) {
2795 return ((dev) >> 8);
2796 },minor:function (dev) {
2797 return ((dev) & 0xff);
2798 },makedev:function (ma, mi) {
2799 return ((ma) << 8 | (mi));
2800 },registerDevice:function (dev, ops) {
2801 FS.devices[dev] = { stream_ops: ops };
2802 },getDevice:function (dev) {
2803 return FS.devices[dev];
2804 },syncfs:function (populate, callback) {
2805 if (typeof(populate) === 'function') {
2806 callback = populate;
2807 populate = false;
2808 }
2809
2810 var completed = 0;
2811 var total = FS.mounts.length;
2812 function done(err) {
2813 if (err) {
2814 return callback(err);
2815 }
2816 if (++completed >= total) {
2817 callback(null);
2818 }
2819 };
2820
2821 // sync all mounts
2822 for (var i = 0; i < FS.mounts.length; i++) {
2823 var mount = FS.mounts[i];
2824 if (!mount.type.syncfs) {
2825 done(null);
2826 continue;
2827 }
2828 mount.type.syncfs(mount, populate, done);
2829 }
2830 },mount:function (type, opts, mountpoint) {
2831 var lookup;
2832 if (mountpoint) {
2833 lookup = FS.lookupPath(mountpoint, { follow: false });
2834 mountpoint = lookup.path; // use the absolute path
2835 }
2836 var mount = {
2837 type: type,
2838 opts: opts,
2839 mountpoint: mountpoint,
2840 root: null
2841 };
2842 // create a root node for the fs
2843 var root = type.mount(mount);
2844 root.mount = mount;
2845 mount.root = root;
2846 // assign the mount info to the mountpoint's node
2847 if (lookup) {
2848 lookup.node.mount = mount;
2849 lookup.node.mounted = true;
2850 // compatibility update FS.root if we mount to /
2851 if (mountpoint === '/') {
2852 FS.root = mount.root;
2853 }
2854 }
2855 // add to our cached list of mounts
2856 FS.mounts.push(mount);
2857 return root;
2858 },lookup:function (parent, name) {
2859 return parent.node_ops.lookup(parent, name);
2860 },mknod:function (path, mode, dev) {
2861 var lookup = FS.lookupPath(path, { parent: true });
2862 var parent = lookup.node;
2863 var name = PATH.basename(path);
2864 var err = FS.mayCreate(parent, name);
2865 if (err) {
2866 throw new FS.ErrnoError(err);
2867 }
2868 if (!parent.node_ops.mknod) {
2869 throw new FS.ErrnoError(ERRNO_CODES.EPERM);
2870 }
2871 return parent.node_ops.mknod(parent, name, mode, dev);
2872 },create:function (path, mode) {
2873 mode = mode !== undefined ? mode : 0666;
2874 mode &= 4095;
2875 mode |= 32768;
2876 return FS.mknod(path, mode, 0);
2877 },mkdir:function (path, mode) {
2878 mode = mode !== undefined ? mode : 0777;
2879 mode &= 511 | 512;
2880 mode |= 16384;
2881 return FS.mknod(path, mode, 0);
2882 },mkdev:function (path, mode, dev) {
2883 if (typeof(dev) === 'undefined') {
2884 dev = mode;
2885 mode = 0666;
2886 }
2887 mode |= 8192;
2888 return FS.mknod(path, mode, dev);
2889 },symlink:function (oldpath, newpath) {
2890 var lookup = FS.lookupPath(newpath, { parent: true });
2891 var parent = lookup.node;
2892 var newname = PATH.basename(newpath);
2893 var err = FS.mayCreate(parent, newname);
2894 if (err) {
2895 throw new FS.ErrnoError(err);
2896 }
2897 if (!parent.node_ops.symlink) {
2898 throw new FS.ErrnoError(ERRNO_CODES.EPERM);
2899 }
2900 return parent.node_ops.symlink(parent, newname, oldpath);
2901 },rename:function (old_path, new_path) {
2902 var old_dirname = PATH.dirname(old_path);
2903 var new_dirname = PATH.dirname(new_path);
2904 var old_name = PATH.basename(old_path);
2905 var new_name = PATH.basename(new_path);
2906 // parents must exist
2907 var lookup, old_dir, new_dir;
2908 try {
2909 lookup = FS.lookupPath(old_path, { parent: true });
2910 old_dir = lookup.node;
2911 lookup = FS.lookupPath(new_path, { parent: true });
2912 new_dir = lookup.node;
2913 } catch (e) {
2914 throw new FS.ErrnoError(ERRNO_CODES.EBUSY);
2915 }
2916 // need to be part of the same mount
2917 if (old_dir.mount !== new_dir.mount) {
2918 throw new FS.ErrnoError(ERRNO_CODES.EXDEV);
2919 }
2920 // source must exist
2921 var old_node = FS.lookupNode(old_dir, old_name);
2922 // old path should not be an ancestor of the new path
2923 var relative = PATH.relative(old_path, new_dirname);
2924 if (relative.charAt(0) !== '.') {
2925 throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
2926 }
2927 // new path should not be an ancestor of the old path
2928 relative = PATH.relative(new_path, old_dirname);
2929 if (relative.charAt(0) !== '.') {
2930 throw new FS.ErrnoError(ERRNO_CODES.ENOTEMPTY);
2931 }
2932 // see if the new path already exists
2933 var new_node;
2934 try {
2935 new_node = FS.lookupNode(new_dir, new_name);
2936 } catch (e) {
2937 // not fatal
2938 }
2939 // early out if nothing needs to change
2940 if (old_node === new_node) {
2941 return;
2942 }
2943 // we'll need to delete the old entry
2944 var isdir = FS.isDir(old_node.mode);
2945 var err = FS.mayDelete(old_dir, old_name, isdir);
2946 if (err) {
2947 throw new FS.ErrnoError(err);
2948 }
2949 // need delete permissions if we'll be overwriting.
2950 // need create permissions if new doesn't already exist.
2951 err = new_node ?
2952 FS.mayDelete(new_dir, new_name, isdir) :
2953 FS.mayCreate(new_dir, new_name);
2954 if (err) {
2955 throw new FS.ErrnoError(err);
2956 }
2957 if (!old_dir.node_ops.rename) {
2958 throw new FS.ErrnoError(ERRNO_CODES.EPERM);
2959 }
2960 if (FS.isMountpoint(old_node) || (new_node && FS.isMountpoint(new_node))) {
2961 throw new FS.ErrnoError(ERRNO_CODES.EBUSY);
2962 }
2963 // if we are going to change the parent, check write permissions
2964 if (new_dir !== old_dir) {
2965 err = FS.nodePermissions(old_dir, 'w');
2966 if (err) {
2967 throw new FS.ErrnoError(err);
2968 }
2969 }
2970 // remove the node from the lookup hash
2971 FS.hashRemoveNode(old_node);
2972 // do the underlying fs rename
2973 try {
2974 old_dir.node_ops.rename(old_node, new_dir, new_name);
2975 } catch (e) {
2976 throw e;
2977 } finally {
2978 // add the node back to the hash (in case node_ops.rename
2979 // changed its name)
2980 FS.hashAddNode(old_node);
2981 }
2982 },rmdir:function (path) {
2983 var lookup = FS.lookupPath(path, { parent: true });
2984 var parent = lookup.node;
2985 var name = PATH.basename(path);
2986 var node = FS.lookupNode(parent, name);
2987 var err = FS.mayDelete(parent, name, true);
2988 if (err) {
2989 throw new FS.ErrnoError(err);
2990 }
2991 if (!parent.node_ops.rmdir) {
2992 throw new FS.ErrnoError(ERRNO_CODES.EPERM);
2993 }
2994 if (FS.isMountpoint(node)) {
2995 throw new FS.ErrnoError(ERRNO_CODES.EBUSY);
2996 }
2997 parent.node_ops.rmdir(parent, name);
2998 FS.destroyNode(node);
2999 },readdir:function (path) {
3000 var lookup = FS.lookupPath(path, { follow: true });
3001 var node = lookup.node;
3002 if (!node.node_ops.readdir) {
3003 throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR);
3004 }
3005 return node.node_ops.readdir(node);
3006 },unlink:function (path) {
3007 var lookup = FS.lookupPath(path, { parent: true });
3008 var parent = lookup.node;
3009 var name = PATH.basename(path);
3010 var node = FS.lookupNode(parent, name);
3011 var err = FS.mayDelete(parent, name, false);
3012 if (err) {
3013 // POSIX says unlink should set EPERM, not EISDIR
3014 if (err === ERRNO_CODES.EISDIR) err = ERRNO_CODES.EPERM;
3015 throw new FS.ErrnoError(err);
3016 }
3017 if (!parent.node_ops.unlink) {
3018 throw new FS.ErrnoError(ERRNO_CODES.EPERM);
3019 }
3020 if (FS.isMountpoint(node)) {
3021 throw new FS.ErrnoError(ERRNO_CODES.EBUSY);
3022 }
3023 parent.node_ops.unlink(parent, name);
3024 FS.destroyNode(node);
3025 },readlink:function (path) {
3026 var lookup = FS.lookupPath(path, { follow: false });
3027 var link = lookup.node;
3028 if (!link.node_ops.readlink) {
3029 throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
3030 }
3031 return link.node_ops.readlink(link);
3032 },stat:function (path, dontFollow) {
3033 var lookup = FS.lookupPath(path, { follow: !dontFollow });
3034 var node = lookup.node;
3035 if (!node.node_ops.getattr) {
3036 throw new FS.ErrnoError(ERRNO_CODES.EPERM);
3037 }
3038 return node.node_ops.getattr(node);
3039 },lstat:function (path) {
3040 return FS.stat(path, true);
3041 },chmod:function (path, mode, dontFollow) {
3042 var node;
3043 if (typeof path === 'string') {
3044 var lookup = FS.lookupPath(path, { follow: !dontFollow });
3045 node = lookup.node;
3046 } else {
3047 node = path;
3048 }
3049 if (!node.node_ops.setattr) {
3050 throw new FS.ErrnoError(ERRNO_CODES.EPERM);
3051 }
3052 node.node_ops.setattr(node, {
3053 mode: (mode & 4095) | (node.mode & ~4095),
3054 timestamp: Date.now()
3055 });
3056 },lchmod:function (path, mode) {
3057 FS.chmod(path, mode, true);
3058 },fchmod:function (fd, mode) {
3059 var stream = FS.getStream(fd);
3060 if (!stream) {
3061 throw new FS.ErrnoError(ERRNO_CODES.EBADF);
3062 }
3063 FS.chmod(stream.node, mode);
3064 },chown:function (path, uid, gid, dontFollow) {
3065 var node;
3066 if (typeof path === 'string') {
3067 var lookup = FS.lookupPath(path, { follow: !dontFollow });
3068 node = lookup.node;
3069 } else {
3070 node = path;
3071 }
3072 if (!node.node_ops.setattr) {
3073 throw new FS.ErrnoError(ERRNO_CODES.EPERM);
3074 }
3075 node.node_ops.setattr(node, {
3076 timestamp: Date.now()
3077 // we ignore the uid / gid for now
3078 });
3079 },lchown:function (path, uid, gid) {
3080 FS.chown(path, uid, gid, true);
3081 },fchown:function (fd, uid, gid) {
3082 var stream = FS.getStream(fd);
3083 if (!stream) {
3084 throw new FS.ErrnoError(ERRNO_CODES.EBADF);
3085 }
3086 FS.chown(stream.node, uid, gid);
3087 },truncate:function (path, len) {
3088 if (len < 0) {
3089 throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
3090 }
3091 var node;
3092 if (typeof path === 'string') {
3093 var lookup = FS.lookupPath(path, { follow: true });
3094 node = lookup.node;
3095 } else {
3096 node = path;
3097 }
3098 if (!node.node_ops.setattr) {
3099 throw new FS.ErrnoError(ERRNO_CODES.EPERM);
3100 }
3101 if (FS.isDir(node.mode)) {
3102 throw new FS.ErrnoError(ERRNO_CODES.EISDIR);
3103 }
3104 if (!FS.isFile(node.mode)) {
3105 throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
3106 }
3107 var err = FS.nodePermissions(node, 'w');
3108 if (err) {
3109 throw new FS.ErrnoError(err);
3110 }
3111 node.node_ops.setattr(node, {
3112 size: len,
3113 timestamp: Date.now()
3114 });
3115 },ftruncate:function (fd, len) {
3116 var stream = FS.getStream(fd);
3117 if (!stream) {
3118 throw new FS.ErrnoError(ERRNO_CODES.EBADF);
3119 }
3120 if ((stream.flags & 2097155) === 0) {
3121 throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
3122 }
3123 FS.truncate(stream.node, len);
3124 },utime:function (path, atime, mtime) {
3125 var lookup = FS.lookupPath(path, { follow: true });
3126 var node = lookup.node;
3127 node.node_ops.setattr(node, {
3128 timestamp: Math.max(atime, mtime)
3129 });
3130 },open:function (path, flags, mode, fd_start, fd_end) {
3131 flags = typeof flags === 'string' ? FS.modeStringToFlags(flags) : flags;
3132 mode = typeof mode === 'undefined' ? 0666 : mode;
3133 if ((flags & 64)) {
3134 mode = (mode & 4095) | 32768;
3135 } else {
3136 mode = 0;
3137 }
3138 var node;
3139 if (typeof path === 'object') {
3140 node = path;
3141 } else {
3142 path = PATH.normalize(path);
3143 try {
3144 var lookup = FS.lookupPath(path, {
3145 follow: !(flags & 131072)
3146 });
3147 node = lookup.node;
3148 } catch (e) {
3149 // ignore
3150 }
3151 }
3152 // perhaps we need to create the node
3153 if ((flags & 64)) {
3154 if (node) {
3155 // if O_CREAT and O_EXCL are set, error out if the node already exists
3156 if ((flags & 128)) {
3157 throw new FS.ErrnoError(ERRNO_CODES.EEXIST);
3158 }
3159 } else {
3160 // node doesn't exist, try to create it
3161 node = FS.mknod(path, mode, 0);
3162 }
3163 }
3164 if (!node) {
3165 throw new FS.ErrnoError(ERRNO_CODES.ENOENT);
3166 }
3167 // can't truncate a device
3168 if (FS.isChrdev(node.mode)) {
3169 flags &= ~512;
3170 }
3171 // check permissions
3172 var err = FS.mayOpen(node, flags);
3173 if (err) {
3174 throw new FS.ErrnoError(err);
3175 }
3176 // do truncation if necessary
3177 if ((flags & 512)) {
3178 FS.truncate(node, 0);
3179 }
3180 // we've already handled these, don't pass down to the underlying vfs
3181 flags &= ~(128 | 512);
3182
3183 // register the stream with the filesystem
3184 var stream = FS.createStream({
3185 node: node,
3186 path: FS.getPath(node), // we want the absolute path to the node
3187 flags: flags,
3188 seekable: true,
3189 position: 0,
3190 stream_ops: node.stream_ops,
3191 // used by the file family libc calls (fopen, fwrite, ferror, etc.)
3192 ungotten: [],
3193 error: false
3194 }, fd_start, fd_end);
3195 // call the new stream's open function
3196 if (stream.stream_ops.open) {
3197 stream.stream_ops.open(stream);
3198 }
3199 if (Module['logReadFiles'] && !(flags & 1)) {
3200 if (!FS.readFiles) FS.readFiles = {};
3201 if (!(path in FS.readFiles)) {
3202 FS.readFiles[path] = 1;
3203 Module['printErr']('read file: ' + path);
3204 }
3205 }
3206 return stream;
3207 },close:function (stream) {
3208 try {
3209 if (stream.stream_ops.close) {
3210 stream.stream_ops.close(stream);
3211 }
3212 } catch (e) {
3213 throw e;
3214 } finally {
3215 FS.closeStream(stream.fd);
3216 }
3217 },llseek:function (stream, offset, whence) {
3218 if (!stream.seekable || !stream.stream_ops.llseek) {
3219 throw new FS.ErrnoError(ERRNO_CODES.ESPIPE);
3220 }
3221 return stream.stream_ops.llseek(stream, offset, whence);
3222 },read:function (stream, buffer, offset, length, position) {
3223 if (length < 0 || position < 0) {
3224 throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
3225 }
3226 if ((stream.flags & 2097155) === 1) {
3227 throw new FS.ErrnoError(ERRNO_CODES.EBADF);
3228 }
3229 if (FS.isDir(stream.node.mode)) {
3230 throw new FS.ErrnoError(ERRNO_CODES.EISDIR);
3231 }
3232 if (!stream.stream_ops.read) {
3233 throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
3234 }
3235 var seeking = true;
3236 if (typeof position === 'undefined') {
3237 position = stream.position;
3238 seeking = false;
3239 } else if (!stream.seekable) {
3240 throw new FS.ErrnoError(ERRNO_CODES.ESPIPE);
3241 }
3242 var bytesRead = stream.stream_ops.read(stream, buffer, offset, length, position);
3243 if (!seeking) stream.position += bytesRead;
3244 return bytesRead;
3245 },write:function (stream, buffer, offset, length, position, canOwn) {
3246 if (length < 0 || position < 0) {
3247 throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
3248 }
3249 if ((stream.flags & 2097155) === 0) {
3250 throw new FS.ErrnoError(ERRNO_CODES.EBADF);
3251 }
3252 if (FS.isDir(stream.node.mode)) {
3253 throw new FS.ErrnoError(ERRNO_CODES.EISDIR);
3254 }
3255 if (!stream.stream_ops.write) {
3256 throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
3257 }
3258 var seeking = true;
3259 if (typeof position === 'undefined') {
3260 position = stream.position;
3261 seeking = false;
3262 } else if (!stream.seekable) {
3263 throw new FS.ErrnoError(ERRNO_CODES.ESPIPE);
3264 }
3265 if (stream.flags & 1024) {
3266 // seek to the end before writing in append mode
3267 FS.llseek(stream, 0, 2);
3268 }
3269 var bytesWritten = stream.stream_ops.write(stream, buffer, offset, length, position, canOwn);
3270 if (!seeking) stream.position += bytesWritten;
3271 return bytesWritten;
3272 },allocate:function (stream, offset, length) {
3273 if (offset < 0 || length <= 0) {
3274 throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
3275 }
3276 if ((stream.flags & 2097155) === 0) {
3277 throw new FS.ErrnoError(ERRNO_CODES.EBADF);
3278 }
3279 if (!FS.isFile(stream.node.mode) && !FS.isDir(node.mode)) {
3280 throw new FS.ErrnoError(ERRNO_CODES.ENODEV);
3281 }
3282 if (!stream.stream_ops.allocate) {
3283 throw new FS.ErrnoError(ERRNO_CODES.EOPNOTSUPP);
3284 }
3285 stream.stream_ops.allocate(stream, offset, length);
3286 },mmap:function (stream, buffer, offset, length, position, prot, flags) {
3287 // TODO if PROT is PROT_WRITE, make sure we have write access
3288 if ((stream.flags & 2097155) === 1) {
3289 throw new FS.ErrnoError(ERRNO_CODES.EACCES);
3290 }
3291 if (!stream.stream_ops.mmap) {
3292 throw new FS.ErrnoError(ERRNO_CODES.ENODEV);
3293 }
3294 return stream.stream_ops.mmap(stream, buffer, offset, length, position, prot, flags);
3295 },ioctl:function (stream, cmd, arg) {
3296 if (!stream.stream_ops.ioctl) {
3297 throw new FS.ErrnoError(ERRNO_CODES.ENOTTY);
3298 }
3299 return stream.stream_ops.ioctl(stream, cmd, arg);
3300 },readFile:function (path, opts) {
3301 opts = opts || {};
3302 opts.flags = opts.flags || 'r';
3303 opts.encoding = opts.encoding || 'binary';
3304 var ret;
3305 var stream = FS.open(path, opts.flags);
3306 var stat = FS.stat(path);
3307 var length = stat.size;
3308 var buf = new Uint8Array(length);
3309 FS.read(stream, buf, 0, length, 0);
3310 if (opts.encoding === 'utf8') {
3311 ret = '';
3312 var utf8 = new Runtime.UTF8Processor();
3313 for (var i = 0; i < length; i++) {
3314 ret += utf8.processCChar(buf[i]);
3315 }
3316 } else if (opts.encoding === 'binary') {
3317 ret = buf;
3318 } else {
3319 throw new Error('Invalid encoding type "' + opts.encoding + '"');
3320 }
3321 FS.close(stream);
3322 return ret;
3323 },writeFile:function (path, data, opts) {
3324 opts = opts || {};
3325 opts.flags = opts.flags || 'w';
3326 opts.encoding = opts.encoding || 'utf8';
3327 var stream = FS.open(path, opts.flags, opts.mode);
3328 if (opts.encoding === 'utf8') {
3329 var utf8 = new Runtime.UTF8Processor();
3330 var buf = new Uint8Array(utf8.processJSString(data));
3331 FS.write(stream, buf, 0, buf.length, 0);
3332 } else if (opts.encoding === 'binary') {
3333 FS.write(stream, data, 0, data.length, 0);
3334 } else {
3335 throw new Error('Invalid encoding type "' + opts.encoding + '"');
3336 }
3337 FS.close(stream);
3338 },cwd:function () {
3339 return FS.currentPath;
3340 },chdir:function (path) {
3341 var lookup = FS.lookupPath(path, { follow: true });
3342 if (!FS.isDir(lookup.node.mode)) {
3343 throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR);
3344 }
3345 var err = FS.nodePermissions(lookup.node, 'x');
3346 if (err) {
3347 throw new FS.ErrnoError(err);
3348 }
3349 FS.currentPath = lookup.path;
3350 },createDefaultDirectories:function () {
3351 FS.mkdir('/tmp');
3352 },createDefaultDevices:function () {
3353 // create /dev
3354 FS.mkdir('/dev');
3355 // setup /dev/null
3356 FS.registerDevice(FS.makedev(1, 3), {
3357 read: function() { return 0; },
3358 write: function() { return 0; }
3359 });
3360 FS.mkdev('/dev/null', FS.makedev(1, 3));
3361 // setup /dev/tty and /dev/tty1
3362 // stderr needs to print output using Module['printErr']
3363 // so we register a second tty just for it.
3364 TTY.register(FS.makedev(5, 0), TTY.default_tty_ops);
3365 TTY.register(FS.makedev(6, 0), TTY.default_tty1_ops);
3366 FS.mkdev('/dev/tty', FS.makedev(5, 0));
3367 FS.mkdev('/dev/tty1', FS.makedev(6, 0));
3368 // we're not going to emulate the actual shm device,
3369 // just create the tmp dirs that reside in it commonly
3370 FS.mkdir('/dev/shm');
3371 FS.mkdir('/dev/shm/tmp');
3372 },createStandardStreams:function () {
3373 // TODO deprecate the old functionality of a single
3374 // input / output callback and that utilizes FS.createDevice
3375 // and instead require a unique set of stream ops
3376
3377 // by default, we symlink the standard streams to the
3378 // default tty devices. however, if the standard streams
3379 // have been overwritten we create a unique device for
3380 // them instead.
3381 if (Module['stdin']) {
3382 FS.createDevice('/dev', 'stdin', Module['stdin']);
3383 } else {
3384 FS.symlink('/dev/tty', '/dev/stdin');
3385 }
3386 if (Module['stdout']) {
3387 FS.createDevice('/dev', 'stdout', null, Module['stdout']);
3388 } else {
3389 FS.symlink('/dev/tty', '/dev/stdout');
3390 }
3391 if (Module['stderr']) {
3392 FS.createDevice('/dev', 'stderr', null, Module['stderr']);
3393 } else {
3394 FS.symlink('/dev/tty1', '/dev/stderr');
3395 }
3396
3397 // open default streams for the stdin, stdout and stderr devices
3398 var stdin = FS.open('/dev/stdin', 'r');
3399 HEAP32[((_stdin)>>2)]=stdin.fd;
3400 assert(stdin.fd === 1, 'invalid handle for stdin (' + stdin.fd + ')');
3401
3402 var stdout = FS.open('/dev/stdout', 'w');
3403 HEAP32[((_stdout)>>2)]=stdout.fd;
3404 assert(stdout.fd === 2, 'invalid handle for stdout (' + stdout.fd + ')');
3405
3406 var stderr = FS.open('/dev/stderr', 'w');
3407 HEAP32[((_stderr)>>2)]=stderr.fd;
3408 assert(stderr.fd === 3, 'invalid handle for stderr (' + stderr.fd + ')');
3409 },ensureErrnoError:function () {
3410 if (FS.ErrnoError) return;
3411 FS.ErrnoError = function ErrnoError(errno) {
3412 this.errno = errno;
3413 for (var key in ERRNO_CODES) {
3414 if (ERRNO_CODES[key] === errno) {
3415 this.code = key;
3416 break;
3417 }
3418 }
3419 this.message = ERRNO_MESSAGES[errno];
3420 if (this.stack) this.stack = demangleAll(this.stack);
3421 };
3422 FS.ErrnoError.prototype = new Error();
3423 FS.ErrnoError.prototype.constructor = FS.ErrnoError;
3424 // Some errors may happen quite a bit, to avoid overhead we reuse them (and suffer a lack of stack info)
3425 [ERRNO_CODES.ENOENT].forEach(function(code) {
3426 FS.genericErrors[code] = new FS.ErrnoError(code);
3427 FS.genericErrors[code].stack = '<generic error, no stack>';
3428 });
3429 },staticInit:function () {
3430 FS.ensureErrnoError();
3431
3432 FS.nameTable = new Array(4096);
3433
3434 FS.root = FS.createNode(null, '/', 16384 | 0777, 0);
3435 FS.mount(MEMFS, {}, '/');
3436
3437 FS.createDefaultDirectories();
3438 FS.createDefaultDevices();
3439 },init:function (input, output, error) {
3440 assert(!FS.init.initialized, 'FS.init was previously called. If you want to initialize later with custom parameters, remove any earlier calls (note that one is automatically added to the generated code)');
3441 FS.init.initialized = true;
3442
3443 FS.ensureErrnoError();
3444
3445 // Allow Module.stdin etc. to provide defaults, if none explicitly passed to us here
3446 Module['stdin'] = input || Module['stdin'];
3447 Module['stdout'] = output || Module['stdout'];
3448 Module['stderr'] = error || Module['stderr'];
3449
3450 FS.createStandardStreams();
3451 },quit:function () {
3452 FS.init.initialized = false;
3453 for (var i = 0; i < FS.streams.length; i++) {
3454 var stream = FS.streams[i];
3455 if (!stream) {
3456 continue;
3457 }
3458 FS.close(stream);
3459 }
3460 },getMode:function (canRead, canWrite) {
3461 var mode = 0;
3462 if (canRead) mode |= 292 | 73;
3463 if (canWrite) mode |= 146;
3464 return mode;
3465 },joinPath:function (parts, forceRelative) {
3466 var path = PATH.join.apply(null, parts);
3467 if (forceRelative && path[0] == '/') path = path.substr(1);
3468 return path;
3469 },absolutePath:function (relative, base) {
3470 return PATH.resolve(base, relative);
3471 },standardizePath:function (path) {
3472 return PATH.normalize(path);
3473 },findObject:function (path, dontResolveLastLink) {
3474 var ret = FS.analyzePath(path, dontResolveLastLink);
3475 if (ret.exists) {
3476 return ret.object;
3477 } else {
3478 ___setErrNo(ret.error);
3479 return null;
3480 }
3481 },analyzePath:function (path, dontResolveLastLink) {
3482 // operate from within the context of the symlink's target
3483 try {
3484 var lookup = FS.lookupPath(path, { follow: !dontResolveLastLink });
3485 path = lookup.path;
3486 } catch (e) {
3487 }
3488 var ret = {
3489 isRoot: false, exists: false, error: 0, name: null, path: null, object: null,
3490 parentExists: false, parentPath: null, parentObject: null
3491 };
3492 try {
3493 var lookup = FS.lookupPath(path, { parent: true });
3494 ret.parentExists = true;
3495 ret.parentPath = lookup.path;
3496 ret.parentObject = lookup.node;
3497 ret.name = PATH.basename(path);
3498 lookup = FS.lookupPath(path, { follow: !dontResolveLastLink });
3499 ret.exists = true;
3500 ret.path = lookup.path;
3501 ret.object = lookup.node;
3502 ret.name = lookup.node.name;
3503 ret.isRoot = lookup.path === '/';
3504 } catch (e) {
3505 ret.error = e.errno;
3506 };
3507 return ret;
3508 },createFolder:function (parent, name, canRead, canWrite) {
3509 var path = PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name);
3510 var mode = FS.getMode(canRead, canWrite);
3511 return FS.mkdir(path, mode);
3512 },createPath:function (parent, path, canRead, canWrite) {
3513 parent = typeof parent === 'string' ? parent : FS.getPath(parent);
3514 var parts = path.split('/').reverse();
3515 while (parts.length) {
3516 var part = parts.pop();
3517 if (!part) continue;
3518 var current = PATH.join2(parent, part);
3519 try {
3520 FS.mkdir(current);
3521 } catch (e) {
3522 // ignore EEXIST
3523 }
3524 parent = current;
3525 }
3526 return current;
3527 },createFile:function (parent, name, properties, canRead, canWrite) {
3528 var path = PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name);
3529 var mode = FS.getMode(canRead, canWrite);
3530 return FS.create(path, mode);
3531 },createDataFile:function (parent, name, data, canRead, canWrite, canOwn) {
3532 var path = name ? PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name) : parent;
3533 var mode = FS.getMode(canRead, canWrite);
3534 var node = FS.create(path, mode);
3535 if (data) {
3536 if (typeof data === 'string') {
3537 var arr = new Array(data.length);
3538 for (var i = 0, len = data.length; i < len; ++i) arr[i] = data.charCodeAt(i);
3539 data = arr;
3540 }
3541 // make sure we can write to the file
3542 FS.chmod(node, mode | 146);
3543 var stream = FS.open(node, 'w');
3544 FS.write(stream, data, 0, data.length, 0, canOwn);
3545 FS.close(stream);
3546 FS.chmod(node, mode);
3547 }
3548 return node;
3549 },createDevice:function (parent, name, input, output) {
3550 var path = PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name);
3551 var mode = FS.getMode(!!input, !!output);
3552 if (!FS.createDevice.major) FS.createDevice.major = 64;
3553 var dev = FS.makedev(FS.createDevice.major++, 0);
3554 // Create a fake device that a set of stream ops to emulate
3555 // the old behavior.
3556 FS.registerDevice(dev, {
3557 open: function(stream) {
3558 stream.seekable = false;
3559 },
3560 close: function(stream) {
3561 // flush any pending line data
3562 if (output && output.buffer && output.buffer.length) {
3563 output(10);
3564 }
3565 },
3566 read: function(stream, buffer, offset, length, pos /* ignored */) {
3567 var bytesRead = 0;
3568 for (var i = 0; i < length; i++) {
3569 var result;
3570 try {
3571 result = input();
3572 } catch (e) {
3573 throw new FS.ErrnoError(ERRNO_CODES.EIO);
3574 }
3575 if (result === undefined && bytesRead === 0) {
3576 throw new FS.ErrnoError(ERRNO_CODES.EAGAIN);
3577 }
3578 if (result === null || result === undefined) break;
3579 bytesRead++;
3580 buffer[offset+i] = result;
3581 }
3582 if (bytesRead) {
3583 stream.node.timestamp = Date.now();
3584 }
3585 return bytesRead;
3586 },
3587 write: function(stream, buffer, offset, length, pos) {
3588 for (var i = 0; i < length; i++) {
3589 try {
3590 output(buffer[offset+i]);
3591 } catch (e) {
3592 throw new FS.ErrnoError(ERRNO_CODES.EIO);
3593 }
3594 }
3595 if (length) {
3596 stream.node.timestamp = Date.now();
3597 }
3598 return i;
3599 }
3600 });
3601 return FS.mkdev(path, mode, dev);
3602 },createLink:function (parent, name, target, canRead, canWrite) {
3603 var path = PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name);
3604 return FS.symlink(target, path);
3605 },forceLoadFile:function (obj) {
3606 if (obj.isDevice || obj.isFolder || obj.link || obj.contents) return true;
3607 var success = true;
3608 if (typeof XMLHttpRequest !== 'undefined') {
3609 throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.");
3610 } else if (Module['read']) {
3611 // Command-line.
3612 try {
3613 // WARNING: Can't read binary files in V8's d8 or tracemonkey's js, as
3614 // read() will try to parse UTF8.
3615 obj.contents = intArrayFromString(Module['read'](obj.url), true);
3616 } catch (e) {
3617 success = false;
3618 }
3619 } else {
3620 throw new Error('Cannot load without read() or XMLHttpRequest.');
3621 }
3622 if (!success) ___setErrNo(ERRNO_CODES.EIO);
3623 return success;
3624 },createLazyFile:function (parent, name, url, canRead, canWrite) {
3625 if (typeof XMLHttpRequest !== 'undefined') {
3626 if (!ENVIRONMENT_IS_WORKER) throw 'Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc';
3627 // Lazy chunked Uint8Array (implements get and length from Uint8Array). Actual getting is abstracted away for eventual reuse.
3628 function LazyUint8Array() {
3629 this.lengthKnown = false;
3630 this.chunks = []; // Loaded chunks. Index is the chunk number
3631 }
3632 LazyUint8Array.prototype.get = function LazyUint8Array_get(idx) {
3633 if (idx > this.length-1 || idx < 0) {
3634 return undefined;
3635 }
3636 var chunkOffset = idx % this.chunkSize;
3637 var chunkNum = Math.floor(idx / this.chunkSize);
3638 return this.getter(chunkNum)[chunkOffset];
3639 }
3640 LazyUint8Array.prototype.setDataGetter = function LazyUint8Array_setDataGetter(getter) {
3641 this.getter = getter;
3642 }
3643 LazyUint8Array.prototype.cacheLength = function LazyUint8Array_cacheLength() {
3644 // Find length
3645 var xhr = new XMLHttpRequest();
3646 xhr.open('HEAD', url, false);
3647 xhr.send(null);
3648 if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error("Couldn't load " + url + ". Status: " + xhr.status);
3649 var datalength = Number(xhr.getResponseHeader("Content-length"));
3650 var header;
3651 var hasByteServing = (header = xhr.getResponseHeader("Accept-Ranges")) && header === "bytes";
3652 var chunkSize = 1024*1024; // Chunk size in bytes
3653
3654 if (!hasByteServing) chunkSize = datalength;
3655
3656 // Function to get a range from the remote URL.
3657 var doXHR = (function(from, to) {
3658 if (from > to) throw new Error("invalid range (" + from + ", " + to + ") or no bytes requested!");
3659 if (to > datalength-1) throw new Error("only " + datalength + " bytes available! programmer error!");
3660
3661 // TODO: Use mozResponseArrayBuffer, responseStream, etc. if available.
3662 var xhr = new XMLHttpRequest();
3663 xhr.open('GET', url, false);
3664 if (datalength !== chunkSize) xhr.setRequestHeader("Range", "bytes=" + from + "-" + to);
3665
3666 // Some hints to the browser that we want binary data.
3667 if (typeof Uint8Array != 'undefined') xhr.responseType = 'arraybuffer';
3668 if (xhr.overrideMimeType) {
3669 xhr.overrideMimeType('text/plain; charset=x-user-defined');
3670 }
3671
3672 xhr.send(null);
3673 if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error("Couldn't load " + url + ". Status: " + xhr.status);
3674 if (xhr.response !== undefined) {
3675 return new Uint8Array(xhr.response || []);
3676 } else {
3677 return intArrayFromString(xhr.responseText || '', true);
3678 }
3679 });
3680 var lazyArray = this;
3681 lazyArray.setDataGetter(function(chunkNum) {
3682 var start = chunkNum * chunkSize;
3683 var end = (chunkNum+1) * chunkSize - 1; // including this byte
3684 end = Math.min(end, datalength-1); // if datalength-1 is selected, this is the last block
3685 if (typeof(lazyArray.chunks[chunkNum]) === "undefined") {
3686 lazyArray.chunks[chunkNum] = doXHR(start, end);
3687 }
3688 if (typeof(lazyArray.chunks[chunkNum]) === "undefined") throw new Error("doXHR failed!");
3689 return lazyArray.chunks[chunkNum];
3690 });
3691
3692 this._length = datalength;
3693 this._chunkSize = chunkSize;
3694 this.lengthKnown = true;
3695 }
3696
3697 var lazyArray = new LazyUint8Array();
3698 Object.defineProperty(lazyArray, "length", {
3699 get: function() {
3700 if(!this.lengthKnown) {
3701 this.cacheLength();
3702 }
3703 return this._length;
3704 }
3705 });
3706 Object.defineProperty(lazyArray, "chunkSize", {
3707 get: function() {
3708 if(!this.lengthKnown) {
3709 this.cacheLength();
3710 }
3711 return this._chunkSize;
3712 }
3713 });
3714
3715 var properties = { isDevice: false, contents: lazyArray };
3716 } else {
3717 var properties = { isDevice: false, url: url };
3718 }
3719
3720 var node = FS.createFile(parent, name, properties, canRead, canWrite);
3721 // This is a total hack, but I want to get this lazy file code out of the
3722 // core of MEMFS. If we want to keep this lazy file concept I feel it should
3723 // be its own thin LAZYFS proxying calls to MEMFS.
3724 if (properties.contents) {
3725 node.contents = properties.contents;
3726 } else if (properties.url) {
3727 node.contents = null;
3728 node.url = properties.url;
3729 }
3730 // override each stream op with one that tries to force load the lazy file first
3731 var stream_ops = {};
3732 var keys = Object.keys(node.stream_ops);
3733 keys.forEach(function(key) {
3734 var fn = node.stream_ops[key];
3735 stream_ops[key] = function forceLoadLazyFile() {
3736 if (!FS.forceLoadFile(node)) {
3737 throw new FS.ErrnoError(ERRNO_CODES.EIO);
3738 }
3739 return fn.apply(null, arguments);
3740 };
3741 });
3742 // use a custom read function
3743 stream_ops.read = function stream_ops_read(stream, buffer, offset, length, position) {
3744 if (!FS.forceLoadFile(node)) {
3745 throw new FS.ErrnoError(ERRNO_CODES.EIO);
3746 }
3747 var contents = stream.node.contents;
3748 if (position >= contents.length)
3749 return 0;
3750 var size = Math.min(contents.length - position, length);
3751 assert(size >= 0);
3752 if (contents.slice) { // normal array
3753 for (var i = 0; i < size; i++) {
3754 buffer[offset + i] = contents[position + i];
3755 }
3756 } else {
3757 for (var i = 0; i < size; i++) { // LazyUint8Array from sync binary XHR
3758 buffer[offset + i] = contents.get(position + i);
3759 }
3760 }
3761 return size;
3762 };
3763 node.stream_ops = stream_ops;
3764 return node;
3765 },createPreloadedFile:function (parent, name, url, canRead, canWrite, onload, onerror, dontCreateFile, canOwn) {
3766 Browser.init();
3767 // TODO we should allow people to just pass in a complete filename instead
3768 // of parent and name being that we just join them anyways
3769 var fullname = name ? PATH.resolve(PATH.join2(parent, name)) : parent;
3770 function processData(byteArray) {
3771 function finish(byteArray) {
3772 if (!dontCreateFile) {
3773 FS.createDataFile(parent, name, byteArray, canRead, canWrite, canOwn);
3774 }
3775 if (onload) onload();
3776 removeRunDependency('cp ' + fullname);
3777 }
3778 var handled = false;
3779 Module['preloadPlugins'].forEach(function(plugin) {
3780 if (handled) return;
3781 if (plugin['canHandle'](fullname)) {
3782 plugin['handle'](byteArray, fullname, finish, function() {
3783 if (onerror) onerror();
3784 removeRunDependency('cp ' + fullname);
3785 });
3786 handled = true;
3787 }
3788 });
3789 if (!handled) finish(byteArray);
3790 }
3791 addRunDependency('cp ' + fullname);
3792 if (typeof url == 'string') {
3793 Browser.asyncLoad(url, function(byteArray) {
3794 processData(byteArray);
3795 }, onerror);
3796 } else {
3797 processData(url);
3798 }
3799 },indexedDB:function () {
3800 return window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB;
3801 },DB_NAME:function () {
3802 return 'EM_FS_' + window.location.pathname;
3803 },DB_VERSION:20,DB_STORE_NAME:"FILE_DATA",saveFilesToDB:function (paths, onload, onerror) {
3804 onload = onload || function(){};
3805 onerror = onerror || function(){};
3806 var indexedDB = FS.indexedDB();
3807 try {
3808 var openRequest = indexedDB.open(FS.DB_NAME(), FS.DB_VERSION);
3809 } catch (e) {
3810 return onerror(e);
3811 }
3812 openRequest.onupgradeneeded = function openRequest_onupgradeneeded() {
3813 console.log('creating db');
3814 var db = openRequest.result;
3815 db.createObjectStore(FS.DB_STORE_NAME);
3816 };
3817 openRequest.onsuccess = function openRequest_onsuccess() {
3818 var db = openRequest.result;
3819 var transaction = db.transaction([FS.DB_STORE_NAME], 'readwrite');
3820 var files = transaction.objectStore(FS.DB_STORE_NAME);
3821 var ok = 0, fail = 0, total = paths.length;
3822 function finish() {
3823 if (fail == 0) onload(); else onerror();
3824 }
3825 paths.forEach(function(path) {
3826 var putRequest = files.put(FS.analyzePath(path).object.contents, path);
3827 putRequest.onsuccess = function putRequest_onsuccess() { ok++; if (ok + fail == total) finish() };
3828 putRequest.onerror = function putRequest_onerror() { fail++; if (ok + fail == total) finish() };
3829 });
3830 transaction.onerror = onerror;
3831 };
3832 openRequest.onerror = onerror;
3833 },loadFilesFromDB:function (paths, onload, onerror) {
3834 onload = onload || function(){};
3835 onerror = onerror || function(){};
3836 var indexedDB = FS.indexedDB();
3837 try {
3838 var openRequest = indexedDB.open(FS.DB_NAME(), FS.DB_VERSION);
3839 } catch (e) {
3840 return onerror(e);
3841 }
3842 openRequest.onupgradeneeded = onerror; // no database to load from
3843 openRequest.onsuccess = function openRequest_onsuccess() {
3844 var db = openRequest.result;
3845 try {
3846 var transaction = db.transaction([FS.DB_STORE_NAME], 'readonly');
3847 } catch(e) {
3848 onerror(e);
3849 return;
3850 }
3851 var files = transaction.objectStore(FS.DB_STORE_NAME);
3852 var ok = 0, fail = 0, total = paths.length;
3853 function finish() {
3854 if (fail == 0) onload(); else onerror();
3855 }
3856 paths.forEach(function(path) {
3857 var getRequest = files.get(path);
3858 getRequest.onsuccess = function getRequest_onsuccess() {
3859 if (FS.analyzePath(path).exists) {
3860 FS.unlink(path);
3861 }
3862 FS.createDataFile(PATH.dirname(path), PATH.basename(path), getRequest.result, true, true, true);
3863 ok++;
3864 if (ok + fail == total) finish();
3865 };
3866 getRequest.onerror = function getRequest_onerror() { fail++; if (ok + fail == total) finish() };
3867 });
3868 transaction.onerror = onerror;
3869 };
3870 openRequest.onerror = onerror;
3871 }};var PATH={splitPath:function (filename) {
3872 var splitPathRe = /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;
3873 return splitPathRe.exec(filename).slice(1);
3874 },normalizeArray:function (parts, allowAboveRoot) {
3875 // if the path tries to go above the root, `up` ends up > 0
3876 var up = 0;
3877 for (var i = parts.length - 1; i >= 0; i--) {
3878 var last = parts[i];
3879 if (last === '.') {
3880 parts.splice(i, 1);
3881 } else if (last === '..') {
3882 parts.splice(i, 1);
3883 up++;
3884 } else if (up) {
3885 parts.splice(i, 1);
3886 up--;
3887 }
3888 }
3889 // if the path is allowed to go above the root, restore leading ..s
3890 if (allowAboveRoot) {
3891 for (; up--; up) {
3892 parts.unshift('..');
3893 }
3894 }
3895 return parts;
3896 },normalize:function (path) {
3897 var isAbsolute = path.charAt(0) === '/',
3898 trailingSlash = path.substr(-1) === '/';
3899 // Normalize the path
3900 path = PATH.normalizeArray(path.split('/').filter(function(p) {
3901 return !!p;
3902 }), !isAbsolute).join('/');
3903 if (!path && !isAbsolute) {
3904 path = '.';
3905 }
3906 if (path && trailingSlash) {
3907 path += '/';
3908 }
3909 return (isAbsolute ? '/' : '') + path;
3910 },dirname:function (path) {
3911 var result = PATH.splitPath(path),
3912 root = result[0],
3913 dir = result[1];
3914 if (!root && !dir) {
3915 // No dirname whatsoever
3916 return '.';
3917 }
3918 if (dir) {
3919 // It has a dirname, strip trailing slash
3920 dir = dir.substr(0, dir.length - 1);
3921 }
3922 return root + dir;
3923 },basename:function (path) {
3924 // EMSCRIPTEN return '/'' for '/', not an empty string
3925 if (path === '/') return '/';
3926 var lastSlash = path.lastIndexOf('/');
3927 if (lastSlash === -1) return path;
3928 return path.substr(lastSlash+1);
3929 },extname:function (path) {
3930 return PATH.splitPath(path)[3];
3931 },join:function () {
3932 var paths = Array.prototype.slice.call(arguments, 0);
3933 return PATH.normalize(paths.join('/'));
3934 },join2:function (l, r) {
3935 return PATH.normalize(l + '/' + r);
3936 },resolve:function () {
3937 var resolvedPath = '',
3938 resolvedAbsolute = false;
3939 for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {
3940 var path = (i >= 0) ? arguments[i] : FS.cwd();
3941 // Skip empty and invalid entries
3942 if (typeof path !== 'string') {
3943 throw new TypeError('Arguments to path.resolve must be strings');
3944 } else if (!path) {
3945 continue;
3946 }
3947 resolvedPath = path + '/' + resolvedPath;
3948 resolvedAbsolute = path.charAt(0) === '/';
3949 }
3950 // At this point the path should be resolved to a full absolute path, but
3951 // handle relative paths to be safe (might happen when process.cwd() fails)
3952 resolvedPath = PATH.normalizeArray(resolvedPath.split('/').filter(function(p) {
3953 return !!p;
3954 }), !resolvedAbsolute).join('/');
3955 return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';
3956 },relative:function (from, to) {
3957 from = PATH.resolve(from).substr(1);
3958 to = PATH.resolve(to).substr(1);
3959 function trim(arr) {
3960 var start = 0;
3961 for (; start < arr.length; start++) {
3962 if (arr[start] !== '') break;
3963 }
3964 var end = arr.length - 1;
3965 for (; end >= 0; end--) {
3966 if (arr[end] !== '') break;
3967 }
3968 if (start > end) return [];
3969 return arr.slice(start, end - start + 1);
3970 }
3971 var fromParts = trim(from.split('/'));
3972 var toParts = trim(to.split('/'));
3973 var length = Math.min(fromParts.length, toParts.length);
3974 var samePartsLength = length;
3975 for (var i = 0; i < length; i++) {
3976 if (fromParts[i] !== toParts[i]) {
3977 samePartsLength = i;
3978 break;
3979 }
3980 }
3981 var outputParts = [];
3982 for (var i = samePartsLength; i < fromParts.length; i++) {
3983 outputParts.push('..');
3984 }
3985 outputParts = outputParts.concat(toParts.slice(samePartsLength));
3986 return outputParts.join('/');
3987 }};var Browser={mainLoop:{scheduler:null,shouldPause:false,paused:false,queue:[],pause:function () {
3988 Browser.mainLoop.shouldPause = true;
3989 },resume:function () {
3990 if (Browser.mainLoop.paused) {
3991 Browser.mainLoop.paused = false;
3992 Browser.mainLoop.scheduler();
3993 }
3994 Browser.mainLoop.shouldPause = false;
3995 },updateStatus:function () {
3996 if (Module['setStatus']) {
3997 var message = Module['statusMessage'] || 'Please wait...';
3998 var remaining = Browser.mainLoop.remainingBlockers;
3999 var expected = Browser.mainLoop.expectedBlockers;
4000 if (remaining) {
4001 if (remaining < expected) {
4002 Module['setStatus'](message + ' (' + (expected - remaining) + '/' + expected + ')');
4003 } else {
4004 Module['setStatus'](message);
4005 }
4006 } else {
4007 Module['setStatus']('');
4008 }
4009 }
4010 }},isFullScreen:false,pointerLock:false,moduleContextCreatedCallbacks:[],workers:[],init:function () {
4011 if (!Module["preloadPlugins"]) Module["preloadPlugins"] = []; // needs to exist even in workers
4012
4013 if (Browser.initted || ENVIRONMENT_IS_WORKER) return;
4014 Browser.initted = true;
4015
4016 try {
4017 new Blob();
4018 Browser.hasBlobConstructor = true;
4019 } catch(e) {
4020 Browser.hasBlobConstructor = false;
4021 console.log("warning: no blob constructor, cannot create blobs with mimetypes");
4022 }
4023 Browser.BlobBuilder = typeof MozBlobBuilder != "undefined" ? MozBlobBuilder : (typeof WebKitBlobBuilder != "undefined" ? WebKitBlobBuilder : (!Browser.hasBlobConstructor ? console.log("warning: no BlobBuilder") : null));
4024 Browser.URLObject = typeof window != "undefined" ? (window.URL ? window.URL : window.webkitURL) : undefined;
4025 if (!Module.noImageDecoding && typeof Browser.URLObject === 'undefined') {
4026 console.log("warning: Browser does not support creating object URLs. Built-in browser image decoding will not be available.");
4027 Module.noImageDecoding = true;
4028 }
4029
4030 // Support for plugins that can process preloaded files. You can add more of these to
4031 // your app by creating and appending to Module.preloadPlugins.
4032 //
4033 // Each plugin is asked if it can handle a file based on the file's name. If it can,
4034 // it is given the file's raw data. When it is done, it calls a callback with the file's
4035 // (possibly modified) data. For example, a plugin might decompress a file, or it
4036 // might create some side data structure for use later (like an Image element, etc.).
4037
4038 var imagePlugin = {};
4039 imagePlugin['canHandle'] = function imagePlugin_canHandle(name) {
4040 return !Module.noImageDecoding && /\.(jpg|jpeg|png|bmp)$/i.test(name);
4041 };
4042 imagePlugin['handle'] = function imagePlugin_handle(byteArray, name, onload, onerror) {
4043 var b = null;
4044 if (Browser.hasBlobConstructor) {
4045 try {
4046 b = new Blob([byteArray], { type: Browser.getMimetype(name) });
4047 if (b.size !== byteArray.length) { // Safari bug #118630
4048 // Safari's Blob can only take an ArrayBuffer
4049 b = new Blob([(new Uint8Array(byteArray)).buffer], { type: Browser.getMimetype(name) });
4050 }
4051 } catch(e) {
4052 Runtime.warnOnce('Blob constructor present but fails: ' + e + '; falling back to blob builder');
4053 }
4054 }
4055 if (!b) {
4056 var bb = new Browser.BlobBuilder();
4057 bb.append((new Uint8Array(byteArray)).buffer); // we need to pass a buffer, and must copy the array to get the right data range
4058 b = bb.getBlob();
4059 }
4060 var url = Browser.URLObject.createObjectURL(b);
4061 assert(typeof url == 'string', 'createObjectURL must return a url as a string');
4062 var img = new Image();
4063 img.onload = function img_onload() {
4064 assert(img.complete, 'Image ' + name + ' could not be decoded');
4065 var canvas = document.createElement('canvas');
4066 canvas.width = img.width;
4067 canvas.height = img.height;
4068 var ctx = canvas.getContext('2d');
4069 ctx.drawImage(img, 0, 0);
4070 Module["preloadedImages"][name] = canvas;
4071 Browser.URLObject.revokeObjectURL(url);
4072 if (onload) onload(byteArray);
4073 };
4074 img.onerror = function img_onerror(event) {
4075 console.log('Image ' + url + ' could not be decoded');
4076 if (onerror) onerror();
4077 };
4078 img.src = url;
4079 };
4080 Module['preloadPlugins'].push(imagePlugin);
4081
4082 var audioPlugin = {};
4083 audioPlugin['canHandle'] = function audioPlugin_canHandle(name) {
4084 return !Module.noAudioDecoding && name.substr(-4) in { '.ogg': 1, '.wav': 1, '.mp3': 1 };
4085 };
4086 audioPlugin['handle'] = function audioPlugin_handle(byteArray, name, onload, onerror) {
4087 var done = false;
4088 function finish(audio) {
4089 if (done) return;
4090 done = true;
4091 Module["preloadedAudios"][name] = audio;
4092 if (onload) onload(byteArray);
4093 }
4094 function fail() {
4095 if (done) return;
4096 done = true;
4097 Module["preloadedAudios"][name] = new Audio(); // empty shim
4098 if (onerror) onerror();
4099 }
4100 if (Browser.hasBlobConstructor) {
4101 try {
4102 var b = new Blob([byteArray], { type: Browser.getMimetype(name) });
4103 } catch(e) {
4104 return fail();
4105 }
4106 var url = Browser.URLObject.createObjectURL(b); // XXX we never revoke this!
4107 assert(typeof url == 'string', 'createObjectURL must return a url as a string');
4108 var audio = new Audio();
4109 audio.addEventListener('canplaythrough', function() { finish(audio) }, false); // use addEventListener due to chromium bug 124926
4110 audio.onerror = function audio_onerror(event) {
4111 if (done) return;
4112 console.log('warning: browser could not fully decode audio ' + name + ', trying slower base64 approach');
4113 function encode64(data) {
4114 var BASE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
4115 var PAD = '=';
4116 var ret = '';
4117 var leftchar = 0;
4118 var leftbits = 0;
4119 for (var i = 0; i < data.length; i++) {
4120 leftchar = (leftchar << 8) | data[i];
4121 leftbits += 8;
4122 while (leftbits >= 6) {
4123 var curr = (leftchar >> (leftbits-6)) & 0x3f;
4124 leftbits -= 6;
4125 ret += BASE[curr];
4126 }
4127 }
4128 if (leftbits == 2) {
4129 ret += BASE[(leftchar&3) << 4];
4130 ret += PAD + PAD;
4131 } else if (leftbits == 4) {
4132 ret += BASE[(leftchar&0xf) << 2];
4133 ret += PAD;
4134 }
4135 return ret;
4136 }
4137 audio.src = 'data:audio/x-' + name.substr(-3) + ';base64,' + encode64(byteArray);
4138 finish(audio); // we don't wait for confirmation this worked - but it's worth trying
4139 };
4140 audio.src = url;
4141 // workaround for chrome bug 124926 - we do not always get oncanplaythrough or onerror
4142 Browser.safeSetTimeout(function() {
4143 finish(audio); // try to use it even though it is not necessarily ready to play
4144 }, 10000);
4145 } else {
4146 return fail();
4147 }
4148 };
4149 Module['preloadPlugins'].push(audioPlugin);
4150
4151 // Canvas event setup
4152
4153 var canvas = Module['canvas'];
4154 canvas.requestPointerLock = canvas['requestPointerLock'] ||
4155 canvas['mozRequestPointerLock'] ||
4156 canvas['webkitRequestPointerLock'];
4157 canvas.exitPointerLock = document['exitPointerLock'] ||
4158 document['mozExitPointerLock'] ||
4159 document['webkitExitPointerLock'] ||
4160 function(){}; // no-op if function does not exist
4161 canvas.exitPointerLock = canvas.exitPointerLock.bind(document);
4162
4163 function pointerLockChange() {
4164 Browser.pointerLock = document['pointerLockElement'] === canvas ||
4165 document['mozPointerLockElement'] === canvas ||
4166 document['webkitPointerLockElement'] === canvas;
4167 }
4168
4169 document.addEventListener('pointerlockchange', pointerLockChange, false);
4170 document.addEventListener('mozpointerlockchange', pointerLockChange, false);
4171 document.addEventListener('webkitpointerlockchange', pointerLockChange, false);
4172
4173 if (Module['elementPointerLock']) {
4174 canvas.addEventListener("click", function(ev) {
4175 if (!Browser.pointerLock && canvas.requestPointerLock) {
4176 canvas.requestPointerLock();
4177 ev.preventDefault();
4178 }
4179 }, false);
4180 }
4181 },createContext:function (canvas, useWebGL, setInModule, webGLContextAttributes) {
4182 var ctx;
4183 try {
4184 if (useWebGL) {
4185 var contextAttributes = {
4186 antialias: false,
4187 alpha: false
4188 };
4189
4190 if (webGLContextAttributes) {
4191 for (var attribute in webGLContextAttributes) {
4192 contextAttributes[attribute] = webGLContextAttributes[attribute];
4193 }
4194 }
4195
4196
4197 var errorInfo = '?';
4198 function onContextCreationError(event) {
4199 errorInfo = event.statusMessage || errorInfo;
4200 }
4201 canvas.addEventListener('webglcontextcreationerror', onContextCreationError, false);
4202 try {
4203 ['experimental-webgl', 'webgl'].some(function(webglId) {
4204 return ctx = canvas.getContext(webglId, contextAttributes);
4205 });
4206 } finally {
4207 canvas.removeEventListener('webglcontextcreationerror', onContextCreationError, false);
4208 }
4209 } else {
4210 ctx = canvas.getContext('2d');
4211 }
4212 if (!ctx) throw ':(';
4213 } catch (e) {
4214 Module.print('Could not create canvas: ' + [errorInfo, e]);
4215 return null;
4216 }
4217 if (useWebGL) {
4218 // Set the background of the WebGL canvas to black
4219 canvas.style.backgroundColor = "black";
4220
4221 // Warn on context loss
4222 canvas.addEventListener('webglcontextlost', function(event) {
4223 alert('WebGL context lost. You will need to reload the page.');
4224 }, false);
4225 }
4226 if (setInModule) {
4227 GLctx = Module.ctx = ctx;
4228 Module.useWebGL = useWebGL;
4229 Browser.moduleContextCreatedCallbacks.forEach(function(callback) { callback() });
4230 Browser.init();
4231 }
4232 return ctx;
4233 },destroyContext:function (canvas, useWebGL, setInModule) {},fullScreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullScreen:function (lockPointer, resizeCanvas) {
4234 Browser.lockPointer = lockPointer;
4235 Browser.resizeCanvas = resizeCanvas;
4236 if (typeof Browser.lockPointer === 'undefined') Browser.lockPointer = true;
4237 if (typeof Browser.resizeCanvas === 'undefined') Browser.resizeCanvas = false;
4238
4239 var canvas = Module['canvas'];
4240 function fullScreenChange() {
4241 Browser.isFullScreen = false;
4242 if ((document['webkitFullScreenElement'] || document['webkitFullscreenElement'] ||
4243 document['mozFullScreenElement'] || document['mozFullscreenElement'] ||
4244 document['fullScreenElement'] || document['fullscreenElement']) === canvas) {
4245 canvas.cancelFullScreen = document['cancelFullScreen'] ||
4246 document['mozCancelFullScreen'] ||
4247 document['webkitCancelFullScreen'];
4248 canvas.cancelFullScreen = canvas.cancelFullScreen.bind(document);
4249 if (Browser.lockPointer) canvas.requestPointerLock();
4250 Browser.isFullScreen = true;
4251 if (Browser.resizeCanvas) Browser.setFullScreenCanvasSize();
4252 } else if (Browser.resizeCanvas){
4253 Browser.setWindowedCanvasSize();
4254 }
4255 if (Module['onFullScreen']) Module['onFullScreen'](Browser.isFullScreen);
4256 }
4257
4258 if (!Browser.fullScreenHandlersInstalled) {
4259 Browser.fullScreenHandlersInstalled = true;
4260 document.addEventListener('fullscreenchange', fullScreenChange, false);
4261 document.addEventListener('mozfullscreenchange', fullScreenChange, false);
4262 document.addEventListener('webkitfullscreenchange', fullScreenChange, false);
4263 }
4264
4265 canvas.requestFullScreen = canvas['requestFullScreen'] ||
4266 canvas['mozRequestFullScreen'] ||
4267 (canvas['webkitRequestFullScreen'] ? function() { canvas['webkitRequestFullScreen'](Element['ALLOW_KEYBOARD_INPUT']) } : null);
4268 canvas.requestFullScreen();
4269 },requestAnimationFrame:function requestAnimationFrame(func) {
4270 if (typeof window === 'undefined') { // Provide fallback to setTimeout if window is undefined (e.g. in Node.js)
4271 setTimeout(func, 1000/60);
4272 } else {
4273 if (!window.requestAnimationFrame) {
4274 window.requestAnimationFrame = window['requestAnimationFrame'] ||
4275 window['mozRequestAnimationFrame'] ||
4276 window['webkitRequestAnimationFrame'] ||
4277 window['msRequestAnimationFrame'] ||
4278 window['oRequestAnimationFrame'] ||
4279 window['setTimeout'];
4280 }
4281 window.requestAnimationFrame(func);
4282 }
4283 },safeCallback:function (func) {
4284 return function() {
4285 if (!ABORT) return func.apply(null, arguments);
4286 };
4287 },safeRequestAnimationFrame:function (func) {
4288 return Browser.requestAnimationFrame(function() {
4289 if (!ABORT) func();
4290 });
4291 },safeSetTimeout:function (func, timeout) {
4292 return setTimeout(function() {
4293 if (!ABORT) func();
4294 }, timeout);
4295 },safeSetInterval:function (func, timeout) {
4296 return setInterval(function() {
4297 if (!ABORT) func();
4298 }, timeout);
4299 },getMimetype:function (name) {
4300 return {
4301 'jpg': 'image/jpeg',
4302 'jpeg': 'image/jpeg',
4303 'png': 'image/png',
4304 'bmp': 'image/bmp',
4305 'ogg': 'audio/ogg',
4306 'wav': 'audio/wav',
4307 'mp3': 'audio/mpeg'
4308 }[name.substr(name.lastIndexOf('.')+1)];
4309 },getUserMedia:function (func) {
4310 if(!window.getUserMedia) {
4311 window.getUserMedia = navigator['getUserMedia'] ||
4312 navigator['mozGetUserMedia'];
4313 }
4314 window.getUserMedia(func);
4315 },getMovementX:function (event) {
4316 return event['movementX'] ||
4317 event['mozMovementX'] ||
4318 event['webkitMovementX'] ||
4319 0;
4320 },getMovementY:function (event) {
4321 return event['movementY'] ||
4322 event['mozMovementY'] ||
4323 event['webkitMovementY'] ||
4324 0;
4325 },mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,calculateMouseEvent:function (event) { // event should be mousemove, mousedown or mouseup
4326 if (Browser.pointerLock) {
4327 // When the pointer is locked, calculate the coordinates
4328 // based on the movement of the mouse.
4329 // Workaround for Firefox bug 764498
4330 if (event.type != 'mousemove' &&
4331 ('mozMovementX' in event)) {
4332 Browser.mouseMovementX = Browser.mouseMovementY = 0;
4333 } else {
4334 Browser.mouseMovementX = Browser.getMovementX(event);
4335 Browser.mouseMovementY = Browser.getMovementY(event);
4336 }
4337
4338 // check if SDL is available
4339 if (typeof SDL != "undefined") {
4340 Browser.mouseX = SDL.mouseX + Browser.mouseMovementX;
4341 Browser.mouseY = SDL.mouseY + Browser.mouseMovementY;
4342 } else {
4343 // just add the mouse delta to the current absolut mouse position
4344 // FIXME: ideally this should be clamped against the canvas size and zero
4345 Browser.mouseX += Browser.mouseMovementX;
4346 Browser.mouseY += Browser.mouseMovementY;
4347 }
4348 } else {
4349 // Otherwise, calculate the movement based on the changes
4350 // in the coordinates.
4351 var rect = Module["canvas"].getBoundingClientRect();
4352 var x, y;
4353
4354 // Neither .scrollX or .pageXOffset are defined in a spec, but
4355 // we prefer .scrollX because it is currently in a spec draft.
4356 // (see: http://www.w3.org/TR/2013/WD-cssom-view-20131217/)
4357 var scrollX = ((typeof window.scrollX !== 'undefined') ? window.scrollX : window.pageXOffset);
4358 var scrollY = ((typeof window.scrollY !== 'undefined') ? window.scrollY : window.pageYOffset);
4359 // If this assert lands, it's likely because the browser doesn't support scrollX or pageXOffset
4360 // and we have no viable fallback.
4361 assert((typeof scrollX !== 'undefined') && (typeof scrollY !== 'undefined'), 'Unable to retrieve scroll position, mouse positions likely broken.');
4362 if (event.type == 'touchstart' ||
4363 event.type == 'touchend' ||
4364 event.type == 'touchmove') {
4365 var t = event.touches.item(0);
4366 if (t) {
4367 x = t.pageX - (scrollX + rect.left);
4368 y = t.pageY - (scrollY + rect.top);
4369 } else {
4370 return;
4371 }
4372 } else {
4373 x = event.pageX - (scrollX + rect.left);
4374 y = event.pageY - (scrollY + rect.top);
4375 }
4376
4377 // the canvas might be CSS-scaled compared to its backbuffer;
4378 // SDL-using content will want mouse coordinates in terms
4379 // of backbuffer units.
4380 var cw = Module["canvas"].width;
4381 var ch = Module["canvas"].height;
4382 x = x * (cw / rect.width);
4383 y = y * (ch / rect.height);
4384
4385 Browser.mouseMovementX = x - Browser.mouseX;
4386 Browser.mouseMovementY = y - Browser.mouseY;
4387 Browser.mouseX = x;
4388 Browser.mouseY = y;
4389 }
4390 },xhrLoad:function (url, onload, onerror) {
4391 var xhr = new XMLHttpRequest();
4392 xhr.open('GET', url, true);
4393 xhr.responseType = 'arraybuffer';
4394 xhr.onload = function xhr_onload() {
4395 if (xhr.status == 200 || (xhr.status == 0 && xhr.response)) { // file URLs can return 0
4396 onload(xhr.response);
4397 } else {
4398 onerror();
4399 }
4400 };
4401 xhr.onerror = onerror;
4402 xhr.send(null);
4403 },asyncLoad:function (url, onload, onerror, noRunDep) {
4404 Browser.xhrLoad(url, function(arrayBuffer) {
4405 assert(arrayBuffer, 'Loading data file "' + url + '" failed (no arrayBuffer).');
4406 onload(new Uint8Array(arrayBuffer));
4407 if (!noRunDep) removeRunDependency('al ' + url);
4408 }, function(event) {
4409 if (onerror) {
4410 onerror();
4411 } else {
4412 throw 'Loading data file "' + url + '" failed.';
4413 }
4414 });
4415 if (!noRunDep) addRunDependency('al ' + url);
4416 },resizeListeners:[],updateResizeListeners:function () {
4417 var canvas = Module['canvas'];
4418 Browser.resizeListeners.forEach(function(listener) {
4419 listener(canvas.width, canvas.height);
4420 });
4421 },setCanvasSize:function (width, height, noUpdates) {
4422 var canvas = Module['canvas'];
4423 canvas.width = width;
4424 canvas.height = height;
4425 if (!noUpdates) Browser.updateResizeListeners();
4426 },windowedWidth:0,windowedHeight:0,setFullScreenCanvasSize:function () {
4427 var canvas = Module['canvas'];
4428 this.windowedWidth = canvas.width;
4429 this.windowedHeight = canvas.height;
4430 canvas.width = screen.width;
4431 canvas.height = screen.height;
4432 // check if SDL is available
4433 if (typeof SDL != "undefined") {
4434 var flags = HEAPU32[((SDL.screen+Runtime.QUANTUM_SIZE*0)>>2)];
4435 flags = flags | 0x00800000; // set SDL_FULLSCREEN flag
4436 HEAP32[((SDL.screen+Runtime.QUANTUM_SIZE*0)>>2)]=flags
4437 }
4438 Browser.updateResizeListeners();
4439 },setWindowedCanvasSize:function () {
4440 var canvas = Module['canvas'];
4441 canvas.width = this.windowedWidth;
4442 canvas.height = this.windowedHeight;
4443 // check if SDL is available
4444 if (typeof SDL != "undefined") {
4445 var flags = HEAPU32[((SDL.screen+Runtime.QUANTUM_SIZE*0)>>2)];
4446 flags = flags & ~0x00800000; // clear SDL_FULLSCREEN flag
4447 HEAP32[((SDL.screen+Runtime.QUANTUM_SIZE*0)>>2)]=flags
4448 }
4449 Browser.updateResizeListeners();
4450 }};
4451___errno_state = Runtime.staticAlloc(4); HEAP32[((___errno_state)>>2)]=0;
4452Module["requestFullScreen"] = function Module_requestFullScreen(lockPointer, resizeCanvas) { Browser.requestFullScreen(lockPointer, resizeCanvas) };
4453 Module["requestAnimationFrame"] = function Module_requestAnimationFrame(func) { Browser.requestAnimationFrame(func) };
4454 Module["setCanvasSize"] = function Module_setCanvasSize(width, height, noUpdates) { Browser.setCanvasSize(width, height, noUpdates) };
4455 Module["pauseMainLoop"] = function Module_pauseMainLoop() { Browser.mainLoop.pause() };
4456 Module["resumeMainLoop"] = function Module_resumeMainLoop() { Browser.mainLoop.resume() };
4457 Module["getUserMedia"] = function Module_getUserMedia() { Browser.getUserMedia() }
4458FS.staticInit();__ATINIT__.unshift({ func: function() { if (!Module["noFSInit"] && !FS.init.initialized) FS.init() } });__ATMAIN__.push({ func: function() { FS.ignorePermissions = false } });__ATEXIT__.push({ func: function() { FS.quit() } });Module["FS_createFolder"] = FS.createFolder;Module["FS_createPath"] = FS.createPath;Module["FS_createDataFile"] = FS.createDataFile;Module["FS_createPreloadedFile"] = FS.createPreloadedFile;Module["FS_createLazyFile"] = FS.createLazyFile;Module["FS_createLink"] = FS.createLink;Module["FS_createDevice"] = FS.createDevice;
4459__ATINIT__.unshift({ func: function() { TTY.init() } });__ATEXIT__.push({ func: function() { TTY.shutdown() } });TTY.utf8 = new Runtime.UTF8Processor();
4460if (ENVIRONMENT_IS_NODE) { var fs = require("fs"); NODEFS.staticInit(); }
4461STACK_BASE = STACKTOP = Runtime.alignMemory(STATICTOP);
4462
4463staticSealed = true; // seal the static portion of memory
4464
4465STACK_MAX = STACK_BASE + 5242880;
4466
4467DYNAMIC_BASE = DYNAMICTOP = Runtime.alignMemory(STACK_MAX);
4468
4469assert(DYNAMIC_BASE < TOTAL_MEMORY, "TOTAL_MEMORY not big enough for stack");
4470
4471
4472
4473var FUNCTION_TABLE = [0, 0];
4474
4475// EMSCRIPTEN_START_FUNCS
4476
4477function _bitmap_decompress_15($output,$output_width,$output_height,$input_width,$input_height,$input,$size){
4478 var label=0;
4479 var sp=STACKTOP; (assert((STACKTOP|0) < (STACK_MAX|0))|0);
4480 label = 1;
4481 while(1)switch(label){
4482 case 1:
4483 var $1;
4484 var $2;
4485 var $3;
4486 var $4;
4487 var $5;
4488 var $6;
4489 var $7;
4490 var $temp;
4491 var $rv;
4492 var $y;
4493 var $x;
4494 var $a;
4495 var $r;
4496 var $g;
4497 var $b;
4498 $1=$output;
4499 $2=$output_width;
4500 $3=$output_height;
4501 $4=$input_width;
4502 $5=$input_height;
4503 $6=$input;
4504 $7=$size;
4505 var $8=$4;
4506 var $9=$5;
4507 var $10=(Math_imul($8,$9)|0);
4508 var $11=($10<<1);
4509 var $12=_malloc($11);
4510 $temp=$12;
4511 var $13=$temp;
4512 var $14=$4;
4513 var $15=$5;
4514 var $16=$6;
4515 var $17=$7;
4516 var $18=_bitmap_decompress2($13,$14,$15,$16,$17);
4517 $rv=$18;
4518 $y=0;
4519 label=2;break;
4520 case 2:
4521 var $20=$y;
4522 var $21=$3;
4523 var $22=($20|0)<($21|0);
4524 if($22){label=3;break;}else{label=9;break;}
4525 case 3:
4526 $x=0;
4527 label=4;break;
4528 case 4:
4529 var $25=$x;
4530 var $26=$2;
4531 var $27=($25|0)<($26|0);
4532 if($27){label=5;break;}else{label=7;break;}
4533 case 5:
4534 var $29=$y;
4535 var $30=$4;
4536 var $31=(Math_imul($29,$30)|0);
4537 var $32=$x;
4538 var $33=((($31)+($32))|0);
4539 var $34=$temp;
4540 var $35=$34;
4541 var $36=(($35+($33<<1))|0);
4542 var $37=HEAP16[(($36)>>1)];
4543 $a=$37;
4544 var $38=$a;
4545 var $39=($38&65535);
4546 var $40=$39&31744;
4547 var $41=$40>>10;
4548 var $42=(($41)&255);
4549 $r=$42;
4550 var $43=$a;
4551 var $44=($43&65535);
4552 var $45=$44&992;
4553 var $46=$45>>5;
4554 var $47=(($46)&255);
4555 $g=$47;
4556 var $48=$a;
4557 var $49=($48&65535);
4558 var $50=$49&31;
4559 var $51=(($50)&255);
4560 $b=$51;
4561 var $52=$r;
4562 var $53=($52&255);
4563 var $54=((($53)*(255))&-1);
4564 var $55=(((($54|0))/(31))&-1);
4565 var $56=(($55)&255);
4566 $r=$56;
4567 var $57=$g;
4568 var $58=($57&255);
4569 var $59=((($58)*(255))&-1);
4570 var $60=(((($59|0))/(31))&-1);
4571 var $61=(($60)&255);
4572 $g=$61;
4573 var $62=$b;
4574 var $63=($62&255);
4575 var $64=((($63)*(255))&-1);
4576 var $65=(((($64|0))/(31))&-1);
4577 var $66=(($65)&255);
4578 $b=$66;
4579 var $67=$b;
4580 var $68=($67&255);
4581 var $69=$68<<16;
4582 var $70=-16777216|$69;
4583 var $71=$g;
4584 var $72=($71&255);
4585 var $73=$72<<8;
4586 var $74=$70|$73;
4587 var $75=$r;
4588 var $76=($75&255);
4589 var $77=$74|$76;
4590 var $78=$y;
4591 var $79=$2;
4592 var $80=(Math_imul($78,$79)|0);
4593 var $81=$x;
4594 var $82=((($80)+($81))|0);
4595 var $83=$1;
4596 var $84=$83;
4597 var $85=(($84+($82<<2))|0);
4598 HEAP32[(($85)>>2)]=$77;
4599 label=6;break;
4600 case 6:
4601 var $87=$x;
4602 var $88=((($87)+(1))|0);
4603 $x=$88;
4604 label=4;break;
4605 case 7:
4606 label=8;break;
4607 case 8:
4608 var $91=$y;
4609 var $92=((($91)+(1))|0);
4610 $y=$92;
4611 label=2;break;
4612 case 9:
4613 var $94=$temp;
4614 _free($94);
4615 var $95=$rv;
4616 STACKTOP=sp;return $95;
4617 default: assert(0, "bad label: " + label);
4618 }
4619
4620}
4621Module["_bitmap_decompress_15"] = _bitmap_decompress_15;
4622
4623function _bitmap_decompress2($output,$width,$height,$input,$size){
4624 var label=0;
4625 var sp=STACKTOP; (assert((STACKTOP|0) < (STACK_MAX|0))|0);
4626 label = 1;
4627 while(1)switch(label){
4628 case 1:
4629 var $1;
4630 var $2;
4631 var $3;
4632 var $4;
4633 var $5;
4634 var $6;
4635 var $end;
4636 var $prevline;
4637 var $line;
4638 var $opcode;
4639 var $count;
4640 var $offset;
4641 var $isfillormix;
4642 var $x;
4643 var $lastopcode;
4644 var $insertmix;
4645 var $bicolour;
4646 var $code;
4647 var $colour1;
4648 var $colour2;
4649 var $mixmask;
4650 var $mask;
4651 var $mix;
4652 var $fom_mask;
4653 $2=$output;
4654 $3=$width;
4655 $4=$height;
4656 $5=$input;
4657 $6=$size;
4658 var $7=$5;
4659 var $8=$6;
4660 var $9=(($7+$8)|0);
4661 $end=$9;
4662 $prevline=0;
4663 $line=0;
4664 var $10=$3;
4665 $x=$10;
4666 $lastopcode=-1;
4667 $insertmix=0;
4668 $bicolour=0;
4669 $colour1=0;
4670 $colour2=0;
4671 $mask=0;
4672 $mix=-1;
4673 $fom_mask=0;
4674 label=2;break;
4675 case 2:
4676 var $12=$5;
4677 var $13=$end;
4678 var $14=($12>>>0)<($13>>>0);
4679 if($14){label=3;break;}else{label=346;break;}
4680 case 3:
4681 $fom_mask=0;
4682 var $16=$5;
4683 var $17=(($16+1)|0);
4684 $5=$17;
4685 var $18=HEAP8[($16)];
4686 $code=$18;
4687 var $19=$code;
4688 var $20=($19&255);
4689 var $21=$20>>4;
4690 $opcode=$21;
4691 var $22=$opcode;
4692 if(($22|0)==12|($22|0)==13|($22|0)==14){ label=4;break;}else if(($22|0)==15){ label=5;break;}else{label=9;break;}
4693 case 4:
4694 var $24=$opcode;
4695 var $25=((($24)-(6))|0);
4696 $opcode=$25;
4697 var $26=$code;
4698 var $27=($26&255);
4699 var $28=$27&15;
4700 $count=$28;
4701 $offset=16;
4702 label=10;break;
4703 case 5:
4704 var $30=$code;
4705 var $31=($30&255);
4706 var $32=$31&15;
4707 $opcode=$32;
4708 var $33=$opcode;
4709 var $34=($33|0)<9;
4710 if($34){label=6;break;}else{label=7;break;}
4711 case 6:
4712 var $36=$5;
4713 var $37=(($36+1)|0);
4714 $5=$37;
4715 var $38=HEAP8[($36)];
4716 var $39=($38&255);
4717 $count=$39;
4718 var $40=$5;
4719 var $41=(($40+1)|0);
4720 $5=$41;
4721 var $42=HEAP8[($40)];
4722 var $43=($42&255);
4723 var $44=$43<<8;
4724 var $45=$count;
4725 var $46=$45|$44;
4726 $count=$46;
4727 label=8;break;
4728 case 7:
4729 var $48=$opcode;
4730 var $49=($48|0)<11;
4731 var $50=($49?8:1);
4732 $count=$50;
4733 label=8;break;
4734 case 8:
4735 $offset=0;
4736 label=10;break;
4737 case 9:
4738 var $53=$opcode;
4739 var $54=$53>>1;
4740 $opcode=$54;
4741 var $55=$code;
4742 var $56=($55&255);
4743 var $57=$56&31;
4744 $count=$57;
4745 $offset=32;
4746 label=10;break;
4747 case 10:
4748 var $59=$offset;
4749 var $60=($59|0)!=0;
4750 if($60){label=11;break;}else{label=22;break;}
4751 case 11:
4752 var $62=$opcode;
4753 var $63=($62|0)==2;
4754 if($63){var $68=1;label=13;break;}else{label=12;break;}
4755 case 12:
4756 var $65=$opcode;
4757 var $66=($65|0)==7;
4758 var $68=$66;label=13;break;
4759 case 13:
4760 var $68;
4761 var $69=($68&1);
4762 $isfillormix=$69;
4763 var $70=$count;
4764 var $71=($70|0)==0;
4765 if($71){label=14;break;}else{label=18;break;}
4766 case 14:
4767 var $73=$isfillormix;
4768 var $74=($73|0)!=0;
4769 if($74){label=15;break;}else{label=16;break;}
4770 case 15:
4771 var $76=$5;
4772 var $77=(($76+1)|0);
4773 $5=$77;
4774 var $78=HEAP8[($76)];
4775 var $79=($78&255);
4776 var $80=((($79)+(1))|0);
4777 $count=$80;
4778 label=17;break;
4779 case 16:
4780 var $82=$5;
4781 var $83=(($82+1)|0);
4782 $5=$83;
4783 var $84=HEAP8[($82)];
4784 var $85=($84&255);
4785 var $86=$offset;
4786 var $87=((($85)+($86))|0);
4787 $count=$87;
4788 label=17;break;
4789 case 17:
4790 label=21;break;
4791 case 18:
4792 var $90=$isfillormix;
4793 var $91=($90|0)!=0;
4794 if($91){label=19;break;}else{label=20;break;}
4795 case 19:
4796 var $93=$count;
4797 var $94=$93<<3;
4798 $count=$94;
4799 label=20;break;
4800 case 20:
4801 label=21;break;
4802 case 21:
4803 label=22;break;
4804 case 22:
4805 var $98=$opcode;
4806 switch(($98|0)){case 0:{ label=23;break;}case 8:{ label=28;break;}case 3:{ label=29;break;}case 6:case 7:{ label=30;break;}case 9:{ label=31;break;}case 10:{ label=32;break;}default:{label=33;break;}}break;
4807 case 23:
4808 var $100=$lastopcode;
4809 var $101=$opcode;
4810 var $102=($100|0)==($101|0);
4811 if($102){label=24;break;}else{label=27;break;}
4812 case 24:
4813 var $104=$x;
4814 var $105=$3;
4815 var $106=($104|0)==($105|0);
4816 if($106){label=25;break;}else{label=26;break;}
4817 case 25:
4818 var $108=$prevline;
4819 var $109=($108|0)==0;
4820 if($109){label=27;break;}else{label=26;break;}
4821 case 26:
4822 $insertmix=1;
4823 label=27;break;
4824 case 27:
4825 label=33;break;
4826 case 28:
4827 var $113=$5;
4828 var $114=(($113+1)|0);
4829 $5=$114;
4830 var $115=HEAP8[($113)];
4831 var $116=($115&255);
4832 $colour1=$116;
4833 var $117=$5;
4834 var $118=(($117+1)|0);
4835 $5=$118;
4836 var $119=HEAP8[($117)];
4837 var $120=($119&255);
4838 var $121=$120<<8;
4839 var $122=$colour1;
4840 var $123=($122&65535);
4841 var $124=$123|$121;
4842 var $125=(($124)&65535);
4843 $colour1=$125;
4844 label=29;break;
4845 case 29:
4846 var $127=$5;
4847 var $128=(($127+1)|0);
4848 $5=$128;
4849 var $129=HEAP8[($127)];
4850 var $130=($129&255);
4851 $colour2=$130;
4852 var $131=$5;
4853 var $132=(($131+1)|0);
4854 $5=$132;
4855 var $133=HEAP8[($131)];
4856 var $134=($133&255);
4857 var $135=$134<<8;
4858 var $136=$colour2;
4859 var $137=($136&65535);
4860 var $138=$137|$135;
4861 var $139=(($138)&65535);
4862 $colour2=$139;
4863 label=33;break;
4864 case 30:
4865 var $141=$5;
4866 var $142=(($141+1)|0);
4867 $5=$142;
4868 var $143=HEAP8[($141)];
4869 var $144=($143&255);
4870 $mix=$144;
4871 var $145=$5;
4872 var $146=(($145+1)|0);
4873 $5=$146;
4874 var $147=HEAP8[($145)];
4875 var $148=($147&255);
4876 var $149=$148<<8;
4877 var $150=$mix;
4878 var $151=($150&65535);
4879 var $152=$151|$149;
4880 var $153=(($152)&65535);
4881 $mix=$153;
4882 var $154=$opcode;
4883 var $155=((($154)-(5))|0);
4884 $opcode=$155;
4885 label=33;break;
4886 case 31:
4887 $mask=3;
4888 $opcode=2;
4889 $fom_mask=3;
4890 label=33;break;
4891 case 32:
4892 $mask=5;
4893 $opcode=2;
4894 $fom_mask=5;
4895 label=33;break;
4896 case 33:
4897 var $159=$opcode;
4898 $lastopcode=$159;
4899 $mixmask=0;
4900 label=34;break;
4901 case 34:
4902 var $161=$count;
4903 var $162=($161|0)>0;
4904 if($162){label=35;break;}else{label=345;break;}
4905 case 35:
4906 var $164=$x;
4907 var $165=$3;
4908 var $166=($164|0)>=($165|0);
4909 if($166){label=36;break;}else{label=39;break;}
4910 case 36:
4911 var $168=$4;
4912 var $169=($168|0)<=0;
4913 if($169){label=37;break;}else{label=38;break;}
4914 case 37:
4915 $1=0;
4916 label=347;break;
4917 case 38:
4918 $x=0;
4919 var $172=$4;
4920 var $173=((($172)-(1))|0);
4921 $4=$173;
4922 var $174=$line;
4923 $prevline=$174;
4924 var $175=$2;
4925 var $176=$175;
4926 var $177=$4;
4927 var $178=$3;
4928 var $179=(Math_imul($177,$178)|0);
4929 var $180=(($176+($179<<1))|0);
4930 $line=$180;
4931 label=39;break;
4932 case 39:
4933 var $182=$opcode;
4934 switch(($182|0)){case 3:{ label=261;break;}case 4:{ label=272;break;}case 8:{ label=283;break;}case 13:{ label=321;break;}case 14:{ label=332;break;}case 0:{ label=40;break;}case 1:{ label=69;break;}case 2:{ label=93;break;}default:{label=343;break;}}break;
4935 case 40:
4936 var $184=$insertmix;
4937 var $185=($184|0)!=0;
4938 if($185){label=41;break;}else{label=45;break;}
4939 case 41:
4940 var $187=$prevline;
4941 var $188=($187|0)==0;
4942 if($188){label=42;break;}else{label=43;break;}
4943 case 42:
4944 var $190=$mix;
4945 var $191=$x;
4946 var $192=$line;
4947 var $193=(($192+($191<<1))|0);
4948 HEAP16[(($193)>>1)]=$190;
4949 label=44;break;
4950 case 43:
4951 var $195=$x;
4952 var $196=$prevline;
4953 var $197=(($196+($195<<1))|0);
4954 var $198=HEAP16[(($197)>>1)];
4955 var $199=($198&65535);
4956 var $200=$mix;
4957 var $201=($200&65535);
4958 var $202=$199^$201;
4959 var $203=(($202)&65535);
4960 var $204=$x;
4961 var $205=$line;
4962 var $206=(($205+($204<<1))|0);
4963 HEAP16[(($206)>>1)]=$203;
4964 label=44;break;
4965 case 44:
4966 $insertmix=0;
4967 var $208=$count;
4968 var $209=((($208)-(1))|0);
4969 $count=$209;
4970 var $210=$x;
4971 var $211=((($210)+(1))|0);
4972 $x=$211;
4973 label=45;break;
4974 case 45:
4975 var $213=$prevline;
4976 var $214=($213|0)==0;
4977 if($214){label=46;break;}else{label=57;break;}
4978 case 46:
4979 label=47;break;
4980 case 47:
4981 var $217=$count;
4982 var $218=$217&-8;
4983 var $219=($218|0)!=0;
4984 if($219){label=48;break;}else{var $226=0;label=49;break;}
4985 case 48:
4986 var $221=$x;
4987 var $222=((($221)+(8))|0);
4988 var $223=$3;
4989 var $224=($222|0)<($223|0);
4990 var $226=$224;label=49;break;
4991 case 49:
4992 var $226;
4993 if($226){label=50;break;}else{label=51;break;}
4994 case 50:
4995 var $228=$x;
4996 var $229=$line;
4997 var $230=(($229+($228<<1))|0);
4998 HEAP16[(($230)>>1)]=0;
4999 var $231=$count;
5000 var $232=((($231)-(1))|0);
5001 $count=$232;
5002 var $233=$x;
5003 var $234=((($233)+(1))|0);
5004 $x=$234;
5005 var $235=$x;
5006 var $236=$line;
5007 var $237=(($236+($235<<1))|0);
5008 HEAP16[(($237)>>1)]=0;
5009 var $238=$count;
5010 var $239=((($238)-(1))|0);
5011 $count=$239;
5012 var $240=$x;
5013 var $241=((($240)+(1))|0);
5014 $x=$241;
5015 var $242=$x;
5016 var $243=$line;
5017 var $244=(($243+($242<<1))|0);
5018 HEAP16[(($244)>>1)]=0;
5019 var $245=$count;
5020 var $246=((($245)-(1))|0);
5021 $count=$246;
5022 var $247=$x;
5023 var $248=((($247)+(1))|0);
5024 $x=$248;
5025 var $249=$x;
5026 var $250=$line;
5027 var $251=(($250+($249<<1))|0);
5028 HEAP16[(($251)>>1)]=0;
5029 var $252=$count;
5030 var $253=((($252)-(1))|0);
5031 $count=$253;
5032 var $254=$x;
5033 var $255=((($254)+(1))|0);
5034 $x=$255;
5035 var $256=$x;
5036 var $257=$line;
5037 var $258=(($257+($256<<1))|0);
5038 HEAP16[(($258)>>1)]=0;
5039 var $259=$count;
5040 var $260=((($259)-(1))|0);
5041 $count=$260;
5042 var $261=$x;
5043 var $262=((($261)+(1))|0);
5044 $x=$262;
5045 var $263=$x;
5046 var $264=$line;
5047 var $265=(($264+($263<<1))|0);
5048 HEAP16[(($265)>>1)]=0;
5049 var $266=$count;
5050 var $267=((($266)-(1))|0);
5051 $count=$267;
5052 var $268=$x;
5053 var $269=((($268)+(1))|0);
5054 $x=$269;
5055 var $270=$x;
5056 var $271=$line;
5057 var $272=(($271+($270<<1))|0);
5058 HEAP16[(($272)>>1)]=0;
5059 var $273=$count;
5060 var $274=((($273)-(1))|0);
5061 $count=$274;
5062 var $275=$x;
5063 var $276=((($275)+(1))|0);
5064 $x=$276;
5065 var $277=$x;
5066 var $278=$line;
5067 var $279=(($278+($277<<1))|0);
5068 HEAP16[(($279)>>1)]=0;
5069 var $280=$count;
5070 var $281=((($280)-(1))|0);
5071 $count=$281;
5072 var $282=$x;
5073 var $283=((($282)+(1))|0);
5074 $x=$283;
5075 label=47;break;
5076 case 51:
5077 label=52;break;
5078 case 52:
5079 var $286=$count;
5080 var $287=($286|0)>0;
5081 if($287){label=53;break;}else{var $293=0;label=54;break;}
5082 case 53:
5083 var $289=$x;
5084 var $290=$3;
5085 var $291=($289|0)<($290|0);
5086 var $293=$291;label=54;break;
5087 case 54:
5088 var $293;
5089 if($293){label=55;break;}else{label=56;break;}
5090 case 55:
5091 var $295=$x;
5092 var $296=$line;
5093 var $297=(($296+($295<<1))|0);
5094 HEAP16[(($297)>>1)]=0;
5095 var $298=$count;
5096 var $299=((($298)-(1))|0);
5097 $count=$299;
5098 var $300=$x;
5099 var $301=((($300)+(1))|0);
5100 $x=$301;
5101 label=52;break;
5102 case 56:
5103 label=68;break;
5104 case 57:
5105 label=58;break;
5106 case 58:
5107 var $305=$count;
5108 var $306=$305&-8;
5109 var $307=($306|0)!=0;
5110 if($307){label=59;break;}else{var $314=0;label=60;break;}
5111 case 59:
5112 var $309=$x;
5113 var $310=((($309)+(8))|0);
5114 var $311=$3;
5115 var $312=($310|0)<($311|0);
5116 var $314=$312;label=60;break;
5117 case 60:
5118 var $314;
5119 if($314){label=61;break;}else{label=62;break;}
5120 case 61:
5121 var $316=$x;
5122 var $317=$prevline;
5123 var $318=(($317+($316<<1))|0);
5124 var $319=HEAP16[(($318)>>1)];
5125 var $320=$x;
5126 var $321=$line;
5127 var $322=(($321+($320<<1))|0);
5128 HEAP16[(($322)>>1)]=$319;
5129 var $323=$count;
5130 var $324=((($323)-(1))|0);
5131 $count=$324;
5132 var $325=$x;
5133 var $326=((($325)+(1))|0);
5134 $x=$326;
5135 var $327=$x;
5136 var $328=$prevline;
5137 var $329=(($328+($327<<1))|0);
5138 var $330=HEAP16[(($329)>>1)];
5139 var $331=$x;
5140 var $332=$line;
5141 var $333=(($332+($331<<1))|0);
5142 HEAP16[(($333)>>1)]=$330;
5143 var $334=$count;
5144 var $335=((($334)-(1))|0);
5145 $count=$335;
5146 var $336=$x;
5147 var $337=((($336)+(1))|0);
5148 $x=$337;
5149 var $338=$x;
5150 var $339=$prevline;
5151 var $340=(($339+($338<<1))|0);
5152 var $341=HEAP16[(($340)>>1)];
5153 var $342=$x;
5154 var $343=$line;
5155 var $344=(($343+($342<<1))|0);
5156 HEAP16[(($344)>>1)]=$341;
5157 var $345=$count;
5158 var $346=((($345)-(1))|0);
5159 $count=$346;
5160 var $347=$x;
5161 var $348=((($347)+(1))|0);
5162 $x=$348;
5163 var $349=$x;
5164 var $350=$prevline;
5165 var $351=(($350+($349<<1))|0);
5166 var $352=HEAP16[(($351)>>1)];
5167 var $353=$x;
5168 var $354=$line;
5169 var $355=(($354+($353<<1))|0);
5170 HEAP16[(($355)>>1)]=$352;
5171 var $356=$count;
5172 var $357=((($356)-(1))|0);
5173 $count=$357;
5174 var $358=$x;
5175 var $359=((($358)+(1))|0);
5176 $x=$359;
5177 var $360=$x;
5178 var $361=$prevline;
5179 var $362=(($361+($360<<1))|0);
5180 var $363=HEAP16[(($362)>>1)];
5181 var $364=$x;
5182 var $365=$line;
5183 var $366=(($365+($364<<1))|0);
5184 HEAP16[(($366)>>1)]=$363;
5185 var $367=$count;
5186 var $368=((($367)-(1))|0);
5187 $count=$368;
5188 var $369=$x;
5189 var $370=((($369)+(1))|0);
5190 $x=$370;
5191 var $371=$x;
5192 var $372=$prevline;
5193 var $373=(($372+($371<<1))|0);
5194 var $374=HEAP16[(($373)>>1)];
5195 var $375=$x;
5196 var $376=$line;
5197 var $377=(($376+($375<<1))|0);
5198 HEAP16[(($377)>>1)]=$374;
5199 var $378=$count;
5200 var $379=((($378)-(1))|0);
5201 $count=$379;
5202 var $380=$x;
5203 var $381=((($380)+(1))|0);
5204 $x=$381;
5205 var $382=$x;
5206 var $383=$prevline;
5207 var $384=(($383+($382<<1))|0);
5208 var $385=HEAP16[(($384)>>1)];
5209 var $386=$x;
5210 var $387=$line;
5211 var $388=(($387+($386<<1))|0);
5212 HEAP16[(($388)>>1)]=$385;
5213 var $389=$count;
5214 var $390=((($389)-(1))|0);
5215 $count=$390;
5216 var $391=$x;
5217 var $392=((($391)+(1))|0);
5218 $x=$392;
5219 var $393=$x;
5220 var $394=$prevline;
5221 var $395=(($394+($393<<1))|0);
5222 var $396=HEAP16[(($395)>>1)];
5223 var $397=$x;
5224 var $398=$line;
5225 var $399=(($398+($397<<1))|0);
5226 HEAP16[(($399)>>1)]=$396;
5227 var $400=$count;
5228 var $401=((($400)-(1))|0);
5229 $count=$401;
5230 var $402=$x;
5231 var $403=((($402)+(1))|0);
5232 $x=$403;
5233 label=58;break;
5234 case 62:
5235 label=63;break;
5236 case 63:
5237 var $406=$count;
5238 var $407=($406|0)>0;
5239 if($407){label=64;break;}else{var $413=0;label=65;break;}
5240 case 64:
5241 var $409=$x;
5242 var $410=$3;
5243 var $411=($409|0)<($410|0);
5244 var $413=$411;label=65;break;
5245 case 65:
5246 var $413;
5247 if($413){label=66;break;}else{label=67;break;}
5248 case 66:
5249 var $415=$x;
5250 var $416=$prevline;
5251 var $417=(($416+($415<<1))|0);
5252 var $418=HEAP16[(($417)>>1)];
5253 var $419=$x;
5254 var $420=$line;
5255 var $421=(($420+($419<<1))|0);
5256 HEAP16[(($421)>>1)]=$418;
5257 var $422=$count;
5258 var $423=((($422)-(1))|0);
5259 $count=$423;
5260 var $424=$x;
5261 var $425=((($424)+(1))|0);
5262 $x=$425;
5263 label=63;break;
5264 case 67:
5265 label=68;break;
5266 case 68:
5267 label=344;break;
5268 case 69:
5269 var $429=$prevline;
5270 var $430=($429|0)==0;
5271 if($430){label=70;break;}else{label=81;break;}
5272 case 70:
5273 label=71;break;
5274 case 71:
5275 var $433=$count;
5276 var $434=$433&-8;
5277 var $435=($434|0)!=0;
5278 if($435){label=72;break;}else{var $442=0;label=73;break;}
5279 case 72:
5280 var $437=$x;
5281 var $438=((($437)+(8))|0);
5282 var $439=$3;
5283 var $440=($438|0)<($439|0);
5284 var $442=$440;label=73;break;
5285 case 73:
5286 var $442;
5287 if($442){label=74;break;}else{label=75;break;}
5288 case 74:
5289 var $444=$mix;
5290 var $445=$x;
5291 var $446=$line;
5292 var $447=(($446+($445<<1))|0);
5293 HEAP16[(($447)>>1)]=$444;
5294 var $448=$count;
5295 var $449=((($448)-(1))|0);
5296 $count=$449;
5297 var $450=$x;
5298 var $451=((($450)+(1))|0);
5299 $x=$451;
5300 var $452=$mix;
5301 var $453=$x;
5302 var $454=$line;
5303 var $455=(($454+($453<<1))|0);
5304 HEAP16[(($455)>>1)]=$452;
5305 var $456=$count;
5306 var $457=((($456)-(1))|0);
5307 $count=$457;
5308 var $458=$x;
5309 var $459=((($458)+(1))|0);
5310 $x=$459;
5311 var $460=$mix;
5312 var $461=$x;
5313 var $462=$line;
5314 var $463=(($462+($461<<1))|0);
5315 HEAP16[(($463)>>1)]=$460;
5316 var $464=$count;
5317 var $465=((($464)-(1))|0);
5318 $count=$465;
5319 var $466=$x;
5320 var $467=((($466)+(1))|0);
5321 $x=$467;
5322 var $468=$mix;
5323 var $469=$x;
5324 var $470=$line;
5325 var $471=(($470+($469<<1))|0);
5326 HEAP16[(($471)>>1)]=$468;
5327 var $472=$count;
5328 var $473=((($472)-(1))|0);
5329 $count=$473;
5330 var $474=$x;
5331 var $475=((($474)+(1))|0);
5332 $x=$475;
5333 var $476=$mix;
5334 var $477=$x;
5335 var $478=$line;
5336 var $479=(($478+($477<<1))|0);
5337 HEAP16[(($479)>>1)]=$476;
5338 var $480=$count;
5339 var $481=((($480)-(1))|0);
5340 $count=$481;
5341 var $482=$x;
5342 var $483=((($482)+(1))|0);
5343 $x=$483;
5344 var $484=$mix;
5345 var $485=$x;
5346 var $486=$line;
5347 var $487=(($486+($485<<1))|0);
5348 HEAP16[(($487)>>1)]=$484;
5349 var $488=$count;
5350 var $489=((($488)-(1))|0);
5351 $count=$489;
5352 var $490=$x;
5353 var $491=((($490)+(1))|0);
5354 $x=$491;
5355 var $492=$mix;
5356 var $493=$x;
5357 var $494=$line;
5358 var $495=(($494+($493<<1))|0);
5359 HEAP16[(($495)>>1)]=$492;
5360 var $496=$count;
5361 var $497=((($496)-(1))|0);
5362 $count=$497;
5363 var $498=$x;
5364 var $499=((($498)+(1))|0);
5365 $x=$499;
5366 var $500=$mix;
5367 var $501=$x;
5368 var $502=$line;
5369 var $503=(($502+($501<<1))|0);
5370 HEAP16[(($503)>>1)]=$500;
5371 var $504=$count;
5372 var $505=((($504)-(1))|0);
5373 $count=$505;
5374 var $506=$x;
5375 var $507=((($506)+(1))|0);
5376 $x=$507;
5377 label=71;break;
5378 case 75:
5379 label=76;break;
5380 case 76:
5381 var $510=$count;
5382 var $511=($510|0)>0;
5383 if($511){label=77;break;}else{var $517=0;label=78;break;}
5384 case 77:
5385 var $513=$x;
5386 var $514=$3;
5387 var $515=($513|0)<($514|0);
5388 var $517=$515;label=78;break;
5389 case 78:
5390 var $517;
5391 if($517){label=79;break;}else{label=80;break;}
5392 case 79:
5393 var $519=$mix;
5394 var $520=$x;
5395 var $521=$line;
5396 var $522=(($521+($520<<1))|0);
5397 HEAP16[(($522)>>1)]=$519;
5398 var $523=$count;
5399 var $524=((($523)-(1))|0);
5400 $count=$524;
5401 var $525=$x;
5402 var $526=((($525)+(1))|0);
5403 $x=$526;
5404 label=76;break;
5405 case 80:
5406 label=92;break;
5407 case 81:
5408 label=82;break;
5409 case 82:
5410 var $530=$count;
5411 var $531=$530&-8;
5412 var $532=($531|0)!=0;
5413 if($532){label=83;break;}else{var $539=0;label=84;break;}
5414 case 83:
5415 var $534=$x;
5416 var $535=((($534)+(8))|0);
5417 var $536=$3;
5418 var $537=($535|0)<($536|0);
5419 var $539=$537;label=84;break;
5420 case 84:
5421 var $539;
5422 if($539){label=85;break;}else{label=86;break;}
5423 case 85:
5424 var $541=$x;
5425 var $542=$prevline;
5426 var $543=(($542+($541<<1))|0);
5427 var $544=HEAP16[(($543)>>1)];
5428 var $545=($544&65535);
5429 var $546=$mix;
5430 var $547=($546&65535);
5431 var $548=$545^$547;
5432 var $549=(($548)&65535);
5433 var $550=$x;
5434 var $551=$line;
5435 var $552=(($551+($550<<1))|0);
5436 HEAP16[(($552)>>1)]=$549;
5437 var $553=$count;
5438 var $554=((($553)-(1))|0);
5439 $count=$554;
5440 var $555=$x;
5441 var $556=((($555)+(1))|0);
5442 $x=$556;
5443 var $557=$x;
5444 var $558=$prevline;
5445 var $559=(($558+($557<<1))|0);
5446 var $560=HEAP16[(($559)>>1)];
5447 var $561=($560&65535);
5448 var $562=$mix;
5449 var $563=($562&65535);
5450 var $564=$561^$563;
5451 var $565=(($564)&65535);
5452 var $566=$x;
5453 var $567=$line;
5454 var $568=(($567+($566<<1))|0);
5455 HEAP16[(($568)>>1)]=$565;
5456 var $569=$count;
5457 var $570=((($569)-(1))|0);
5458 $count=$570;
5459 var $571=$x;
5460 var $572=((($571)+(1))|0);
5461 $x=$572;
5462 var $573=$x;
5463 var $574=$prevline;
5464 var $575=(($574+($573<<1))|0);
5465 var $576=HEAP16[(($575)>>1)];
5466 var $577=($576&65535);
5467 var $578=$mix;
5468 var $579=($578&65535);
5469 var $580=$577^$579;
5470 var $581=(($580)&65535);
5471 var $582=$x;
5472 var $583=$line;
5473 var $584=(($583+($582<<1))|0);
5474 HEAP16[(($584)>>1)]=$581;
5475 var $585=$count;
5476 var $586=((($585)-(1))|0);
5477 $count=$586;
5478 var $587=$x;
5479 var $588=((($587)+(1))|0);
5480 $x=$588;
5481 var $589=$x;
5482 var $590=$prevline;
5483 var $591=(($590+($589<<1))|0);
5484 var $592=HEAP16[(($591)>>1)];
5485 var $593=($592&65535);
5486 var $594=$mix;
5487 var $595=($594&65535);
5488 var $596=$593^$595;
5489 var $597=(($596)&65535);
5490 var $598=$x;
5491 var $599=$line;
5492 var $600=(($599+($598<<1))|0);
5493 HEAP16[(($600)>>1)]=$597;
5494 var $601=$count;
5495 var $602=((($601)-(1))|0);
5496 $count=$602;
5497 var $603=$x;
5498 var $604=((($603)+(1))|0);
5499 $x=$604;
5500 var $605=$x;
5501 var $606=$prevline;
5502 var $607=(($606+($605<<1))|0);
5503 var $608=HEAP16[(($607)>>1)];
5504 var $609=($608&65535);
5505 var $610=$mix;
5506 var $611=($610&65535);
5507 var $612=$609^$611;
5508 var $613=(($612)&65535);
5509 var $614=$x;
5510 var $615=$line;
5511 var $616=(($615+($614<<1))|0);
5512 HEAP16[(($616)>>1)]=$613;
5513 var $617=$count;
5514 var $618=((($617)-(1))|0);
5515 $count=$618;
5516 var $619=$x;
5517 var $620=((($619)+(1))|0);
5518 $x=$620;
5519 var $621=$x;
5520 var $622=$prevline;
5521 var $623=(($622+($621<<1))|0);
5522 var $624=HEAP16[(($623)>>1)];
5523 var $625=($624&65535);
5524 var $626=$mix;
5525 var $627=($626&65535);
5526 var $628=$625^$627;
5527 var $629=(($628)&65535);
5528 var $630=$x;
5529 var $631=$line;
5530 var $632=(($631+($630<<1))|0);
5531 HEAP16[(($632)>>1)]=$629;
5532 var $633=$count;
5533 var $634=((($633)-(1))|0);
5534 $count=$634;
5535 var $635=$x;
5536 var $636=((($635)+(1))|0);
5537 $x=$636;
5538 var $637=$x;
5539 var $638=$prevline;
5540 var $639=(($638+($637<<1))|0);
5541 var $640=HEAP16[(($639)>>1)];
5542 var $641=($640&65535);
5543 var $642=$mix;
5544 var $643=($642&65535);
5545 var $644=$641^$643;
5546 var $645=(($644)&65535);
5547 var $646=$x;
5548 var $647=$line;
5549 var $648=(($647+($646<<1))|0);
5550 HEAP16[(($648)>>1)]=$645;
5551 var $649=$count;
5552 var $650=((($649)-(1))|0);
5553 $count=$650;
5554 var $651=$x;
5555 var $652=((($651)+(1))|0);
5556 $x=$652;
5557 var $653=$x;
5558 var $654=$prevline;
5559 var $655=(($654+($653<<1))|0);
5560 var $656=HEAP16[(($655)>>1)];
5561 var $657=($656&65535);
5562 var $658=$mix;
5563 var $659=($658&65535);
5564 var $660=$657^$659;
5565 var $661=(($660)&65535);
5566 var $662=$x;
5567 var $663=$line;
5568 var $664=(($663+($662<<1))|0);
5569 HEAP16[(($664)>>1)]=$661;
5570 var $665=$count;
5571 var $666=((($665)-(1))|0);
5572 $count=$666;
5573 var $667=$x;
5574 var $668=((($667)+(1))|0);
5575 $x=$668;
5576 label=82;break;
5577 case 86:
5578 label=87;break;
5579 case 87:
5580 var $671=$count;
5581 var $672=($671|0)>0;
5582 if($672){label=88;break;}else{var $678=0;label=89;break;}
5583 case 88:
5584 var $674=$x;
5585 var $675=$3;
5586 var $676=($674|0)<($675|0);
5587 var $678=$676;label=89;break;
5588 case 89:
5589 var $678;
5590 if($678){label=90;break;}else{label=91;break;}
5591 case 90:
5592 var $680=$x;
5593 var $681=$prevline;
5594 var $682=(($681+($680<<1))|0);
5595 var $683=HEAP16[(($682)>>1)];
5596 var $684=($683&65535);
5597 var $685=$mix;
5598 var $686=($685&65535);
5599 var $687=$684^$686;
5600 var $688=(($687)&65535);
5601 var $689=$x;
5602 var $690=$line;
5603 var $691=(($690+($689<<1))|0);
5604 HEAP16[(($691)>>1)]=$688;
5605 var $692=$count;
5606 var $693=((($692)-(1))|0);
5607 $count=$693;
5608 var $694=$x;
5609 var $695=((($694)+(1))|0);
5610 $x=$695;
5611 label=87;break;
5612 case 91:
5613 label=92;break;
5614 case 92:
5615 label=344;break;
5616 case 93:
5617 var $699=$prevline;
5618 var $700=($699|0)==0;
5619 if($700){label=94;break;}else{label=177;break;}
5620 case 94:
5621 label=95;break;
5622 case 95:
5623 var $703=$count;
5624 var $704=$703&-8;
5625 var $705=($704|0)!=0;
5626 if($705){label=96;break;}else{var $712=0;label=97;break;}
5627 case 96:
5628 var $707=$x;
5629 var $708=((($707)+(8))|0);
5630 var $709=$3;
5631 var $710=($708|0)<($709|0);
5632 var $712=$710;label=97;break;
5633 case 97:
5634 var $712;
5635 if($712){label=98;break;}else{label=163;break;}
5636 case 98:
5637 var $714=$mixmask;
5638 var $715=($714&255);
5639 var $716=$715<<1;
5640 var $717=(($716)&255);
5641 $mixmask=$717;
5642 var $718=$mixmask;
5643 var $719=($718&255);
5644 var $720=($719|0)==0;
5645 if($720){label=99;break;}else{label=103;break;}
5646 case 99:
5647 var $722=$fom_mask;
5648 var $723=($722|0)!=0;
5649 if($723){label=100;break;}else{label=101;break;}
5650 case 100:
5651 var $725=$fom_mask;
5652 var $732=$725;label=102;break;
5653 case 101:
5654 var $727=$5;
5655 var $728=(($727+1)|0);
5656 $5=$728;
5657 var $729=HEAP8[($727)];
5658 var $730=($729&255);
5659 var $732=$730;label=102;break;
5660 case 102:
5661 var $732;
5662 var $733=(($732)&255);
5663 $mask=$733;
5664 $mixmask=1;
5665 label=103;break;
5666 case 103:
5667 var $735=$mask;
5668 var $736=($735&255);
5669 var $737=$mixmask;
5670 var $738=($737&255);
5671 var $739=$736&$738;
5672 var $740=($739|0)!=0;
5673 if($740){label=104;break;}else{label=105;break;}
5674 case 104:
5675 var $742=$mix;
5676 var $743=$x;
5677 var $744=$line;
5678 var $745=(($744+($743<<1))|0);
5679 HEAP16[(($745)>>1)]=$742;
5680 label=106;break;
5681 case 105:
5682 var $747=$x;
5683 var $748=$line;
5684 var $749=(($748+($747<<1))|0);
5685 HEAP16[(($749)>>1)]=0;
5686 label=106;break;
5687 case 106:
5688 var $751=$count;
5689 var $752=((($751)-(1))|0);
5690 $count=$752;
5691 var $753=$x;
5692 var $754=((($753)+(1))|0);
5693 $x=$754;
5694 var $755=$mixmask;
5695 var $756=($755&255);
5696 var $757=$756<<1;
5697 var $758=(($757)&255);
5698 $mixmask=$758;
5699 var $759=$mixmask;
5700 var $760=($759&255);
5701 var $761=($760|0)==0;
5702 if($761){label=107;break;}else{label=111;break;}
5703 case 107:
5704 var $763=$fom_mask;
5705 var $764=($763|0)!=0;
5706 if($764){label=108;break;}else{label=109;break;}
5707 case 108:
5708 var $766=$fom_mask;
5709 var $773=$766;label=110;break;
5710 case 109:
5711 var $768=$5;
5712 var $769=(($768+1)|0);
5713 $5=$769;
5714 var $770=HEAP8[($768)];
5715 var $771=($770&255);
5716 var $773=$771;label=110;break;
5717 case 110:
5718 var $773;
5719 var $774=(($773)&255);
5720 $mask=$774;
5721 $mixmask=1;
5722 label=111;break;
5723 case 111:
5724 var $776=$mask;
5725 var $777=($776&255);
5726 var $778=$mixmask;
5727 var $779=($778&255);
5728 var $780=$777&$779;
5729 var $781=($780|0)!=0;
5730 if($781){label=112;break;}else{label=113;break;}
5731 case 112:
5732 var $783=$mix;
5733 var $784=$x;
5734 var $785=$line;
5735 var $786=(($785+($784<<1))|0);
5736 HEAP16[(($786)>>1)]=$783;
5737 label=114;break;
5738 case 113:
5739 var $788=$x;
5740 var $789=$line;
5741 var $790=(($789+($788<<1))|0);
5742 HEAP16[(($790)>>1)]=0;
5743 label=114;break;
5744 case 114:
5745 var $792=$count;
5746 var $793=((($792)-(1))|0);
5747 $count=$793;
5748 var $794=$x;
5749 var $795=((($794)+(1))|0);
5750 $x=$795;
5751 var $796=$mixmask;
5752 var $797=($796&255);
5753 var $798=$797<<1;
5754 var $799=(($798)&255);
5755 $mixmask=$799;
5756 var $800=$mixmask;
5757 var $801=($800&255);
5758 var $802=($801|0)==0;
5759 if($802){label=115;break;}else{label=119;break;}
5760 case 115:
5761 var $804=$fom_mask;
5762 var $805=($804|0)!=0;
5763 if($805){label=116;break;}else{label=117;break;}
5764 case 116:
5765 var $807=$fom_mask;
5766 var $814=$807;label=118;break;
5767 case 117:
5768 var $809=$5;
5769 var $810=(($809+1)|0);
5770 $5=$810;
5771 var $811=HEAP8[($809)];
5772 var $812=($811&255);
5773 var $814=$812;label=118;break;
5774 case 118:
5775 var $814;
5776 var $815=(($814)&255);
5777 $mask=$815;
5778 $mixmask=1;
5779 label=119;break;
5780 case 119:
5781 var $817=$mask;
5782 var $818=($817&255);
5783 var $819=$mixmask;
5784 var $820=($819&255);
5785 var $821=$818&$820;
5786 var $822=($821|0)!=0;
5787 if($822){label=120;break;}else{label=121;break;}
5788 case 120:
5789 var $824=$mix;
5790 var $825=$x;
5791 var $826=$line;
5792 var $827=(($826+($825<<1))|0);
5793 HEAP16[(($827)>>1)]=$824;
5794 label=122;break;
5795 case 121:
5796 var $829=$x;
5797 var $830=$line;
5798 var $831=(($830+($829<<1))|0);
5799 HEAP16[(($831)>>1)]=0;
5800 label=122;break;
5801 case 122:
5802 var $833=$count;
5803 var $834=((($833)-(1))|0);
5804 $count=$834;
5805 var $835=$x;
5806 var $836=((($835)+(1))|0);
5807 $x=$836;
5808 var $837=$mixmask;
5809 var $838=($837&255);
5810 var $839=$838<<1;
5811 var $840=(($839)&255);
5812 $mixmask=$840;
5813 var $841=$mixmask;
5814 var $842=($841&255);
5815 var $843=($842|0)==0;
5816 if($843){label=123;break;}else{label=127;break;}
5817 case 123:
5818 var $845=$fom_mask;
5819 var $846=($845|0)!=0;
5820 if($846){label=124;break;}else{label=125;break;}
5821 case 124:
5822 var $848=$fom_mask;
5823 var $855=$848;label=126;break;
5824 case 125:
5825 var $850=$5;
5826 var $851=(($850+1)|0);
5827 $5=$851;
5828 var $852=HEAP8[($850)];
5829 var $853=($852&255);
5830 var $855=$853;label=126;break;
5831 case 126:
5832 var $855;
5833 var $856=(($855)&255);
5834 $mask=$856;
5835 $mixmask=1;
5836 label=127;break;
5837 case 127:
5838 var $858=$mask;
5839 var $859=($858&255);
5840 var $860=$mixmask;
5841 var $861=($860&255);
5842 var $862=$859&$861;
5843 var $863=($862|0)!=0;
5844 if($863){label=128;break;}else{label=129;break;}
5845 case 128:
5846 var $865=$mix;
5847 var $866=$x;
5848 var $867=$line;
5849 var $868=(($867+($866<<1))|0);
5850 HEAP16[(($868)>>1)]=$865;
5851 label=130;break;
5852 case 129:
5853 var $870=$x;
5854 var $871=$line;
5855 var $872=(($871+($870<<1))|0);
5856 HEAP16[(($872)>>1)]=0;
5857 label=130;break;
5858 case 130:
5859 var $874=$count;
5860 var $875=((($874)-(1))|0);
5861 $count=$875;
5862 var $876=$x;
5863 var $877=((($876)+(1))|0);
5864 $x=$877;
5865 var $878=$mixmask;
5866 var $879=($878&255);
5867 var $880=$879<<1;
5868 var $881=(($880)&255);
5869 $mixmask=$881;
5870 var $882=$mixmask;
5871 var $883=($882&255);
5872 var $884=($883|0)==0;
5873 if($884){label=131;break;}else{label=135;break;}
5874 case 131:
5875 var $886=$fom_mask;
5876 var $887=($886|0)!=0;
5877 if($887){label=132;break;}else{label=133;break;}
5878 case 132:
5879 var $889=$fom_mask;
5880 var $896=$889;label=134;break;
5881 case 133:
5882 var $891=$5;
5883 var $892=(($891+1)|0);
5884 $5=$892;
5885 var $893=HEAP8[($891)];
5886 var $894=($893&255);
5887 var $896=$894;label=134;break;
5888 case 134:
5889 var $896;
5890 var $897=(($896)&255);
5891 $mask=$897;
5892 $mixmask=1;
5893 label=135;break;
5894 case 135:
5895 var $899=$mask;
5896 var $900=($899&255);
5897 var $901=$mixmask;
5898 var $902=($901&255);
5899 var $903=$900&$902;
5900 var $904=($903|0)!=0;
5901 if($904){label=136;break;}else{label=137;break;}
5902 case 136:
5903 var $906=$mix;
5904 var $907=$x;
5905 var $908=$line;
5906 var $909=(($908+($907<<1))|0);
5907 HEAP16[(($909)>>1)]=$906;
5908 label=138;break;
5909 case 137:
5910 var $911=$x;
5911 var $912=$line;
5912 var $913=(($912+($911<<1))|0);
5913 HEAP16[(($913)>>1)]=0;
5914 label=138;break;
5915 case 138:
5916 var $915=$count;
5917 var $916=((($915)-(1))|0);
5918 $count=$916;
5919 var $917=$x;
5920 var $918=((($917)+(1))|0);
5921 $x=$918;
5922 var $919=$mixmask;
5923 var $920=($919&255);
5924 var $921=$920<<1;
5925 var $922=(($921)&255);
5926 $mixmask=$922;
5927 var $923=$mixmask;
5928 var $924=($923&255);
5929 var $925=($924|0)==0;
5930 if($925){label=139;break;}else{label=143;break;}
5931 case 139:
5932 var $927=$fom_mask;
5933 var $928=($927|0)!=0;
5934 if($928){label=140;break;}else{label=141;break;}
5935 case 140:
5936 var $930=$fom_mask;
5937 var $937=$930;label=142;break;
5938 case 141:
5939 var $932=$5;
5940 var $933=(($932+1)|0);
5941 $5=$933;
5942 var $934=HEAP8[($932)];
5943 var $935=($934&255);
5944 var $937=$935;label=142;break;
5945 case 142:
5946 var $937;
5947 var $938=(($937)&255);
5948 $mask=$938;
5949 $mixmask=1;
5950 label=143;break;
5951 case 143:
5952 var $940=$mask;
5953 var $941=($940&255);
5954 var $942=$mixmask;
5955 var $943=($942&255);
5956 var $944=$941&$943;
5957 var $945=($944|0)!=0;
5958 if($945){label=144;break;}else{label=145;break;}
5959 case 144:
5960 var $947=$mix;
5961 var $948=$x;
5962 var $949=$line;
5963 var $950=(($949+($948<<1))|0);
5964 HEAP16[(($950)>>1)]=$947;
5965 label=146;break;
5966 case 145:
5967 var $952=$x;
5968 var $953=$line;
5969 var $954=(($953+($952<<1))|0);
5970 HEAP16[(($954)>>1)]=0;
5971 label=146;break;
5972 case 146:
5973 var $956=$count;
5974 var $957=((($956)-(1))|0);
5975 $count=$957;
5976 var $958=$x;
5977 var $959=((($958)+(1))|0);
5978 $x=$959;
5979 var $960=$mixmask;
5980 var $961=($960&255);
5981 var $962=$961<<1;
5982 var $963=(($962)&255);
5983 $mixmask=$963;
5984 var $964=$mixmask;
5985 var $965=($964&255);
5986 var $966=($965|0)==0;
5987 if($966){label=147;break;}else{label=151;break;}
5988 case 147:
5989 var $968=$fom_mask;
5990 var $969=($968|0)!=0;
5991 if($969){label=148;break;}else{label=149;break;}
5992 case 148:
5993 var $971=$fom_mask;
5994 var $978=$971;label=150;break;
5995 case 149:
5996 var $973=$5;
5997 var $974=(($973+1)|0);
5998 $5=$974;
5999 var $975=HEAP8[($973)];
6000 var $976=($975&255);
6001 var $978=$976;label=150;break;
6002 case 150:
6003 var $978;
6004 var $979=(($978)&255);
6005 $mask=$979;
6006 $mixmask=1;
6007 label=151;break;
6008 case 151:
6009 var $981=$mask;
6010 var $982=($981&255);
6011 var $983=$mixmask;
6012 var $984=($983&255);
6013 var $985=$982&$984;
6014 var $986=($985|0)!=0;
6015 if($986){label=152;break;}else{label=153;break;}
6016 case 152:
6017 var $988=$mix;
6018 var $989=$x;
6019 var $990=$line;
6020 var $991=(($990+($989<<1))|0);
6021 HEAP16[(($991)>>1)]=$988;
6022 label=154;break;
6023 case 153:
6024 var $993=$x;
6025 var $994=$line;
6026 var $995=(($994+($993<<1))|0);
6027 HEAP16[(($995)>>1)]=0;
6028 label=154;break;
6029 case 154:
6030 var $997=$count;
6031 var $998=((($997)-(1))|0);
6032 $count=$998;
6033 var $999=$x;
6034 var $1000=((($999)+(1))|0);
6035 $x=$1000;
6036 var $1001=$mixmask;
6037 var $1002=($1001&255);
6038 var $1003=$1002<<1;
6039 var $1004=(($1003)&255);
6040 $mixmask=$1004;
6041 var $1005=$mixmask;
6042 var $1006=($1005&255);
6043 var $1007=($1006|0)==0;
6044 if($1007){label=155;break;}else{label=159;break;}
6045 case 155:
6046 var $1009=$fom_mask;
6047 var $1010=($1009|0)!=0;
6048 if($1010){label=156;break;}else{label=157;break;}
6049 case 156:
6050 var $1012=$fom_mask;
6051 var $1019=$1012;label=158;break;
6052 case 157:
6053 var $1014=$5;
6054 var $1015=(($1014+1)|0);
6055 $5=$1015;
6056 var $1016=HEAP8[($1014)];
6057 var $1017=($1016&255);
6058 var $1019=$1017;label=158;break;
6059 case 158:
6060 var $1019;
6061 var $1020=(($1019)&255);
6062 $mask=$1020;
6063 $mixmask=1;
6064 label=159;break;
6065 case 159:
6066 var $1022=$mask;
6067 var $1023=($1022&255);
6068 var $1024=$mixmask;
6069 var $1025=($1024&255);
6070 var $1026=$1023&$1025;
6071 var $1027=($1026|0)!=0;
6072 if($1027){label=160;break;}else{label=161;break;}
6073 case 160:
6074 var $1029=$mix;
6075 var $1030=$x;
6076 var $1031=$line;
6077 var $1032=(($1031+($1030<<1))|0);
6078 HEAP16[(($1032)>>1)]=$1029;
6079 label=162;break;
6080 case 161:
6081 var $1034=$x;
6082 var $1035=$line;
6083 var $1036=(($1035+($1034<<1))|0);
6084 HEAP16[(($1036)>>1)]=0;
6085 label=162;break;
6086 case 162:
6087 var $1038=$count;
6088 var $1039=((($1038)-(1))|0);
6089 $count=$1039;
6090 var $1040=$x;
6091 var $1041=((($1040)+(1))|0);
6092 $x=$1041;
6093 label=95;break;
6094 case 163:
6095 label=164;break;
6096 case 164:
6097 var $1044=$count;
6098 var $1045=($1044|0)>0;
6099 if($1045){label=165;break;}else{var $1051=0;label=166;break;}
6100 case 165:
6101 var $1047=$x;
6102 var $1048=$3;
6103 var $1049=($1047|0)<($1048|0);
6104 var $1051=$1049;label=166;break;
6105 case 166:
6106 var $1051;
6107 if($1051){label=167;break;}else{label=176;break;}
6108 case 167:
6109 var $1053=$mixmask;
6110 var $1054=($1053&255);
6111 var $1055=$1054<<1;
6112 var $1056=(($1055)&255);
6113 $mixmask=$1056;
6114 var $1057=$mixmask;
6115 var $1058=($1057&255);
6116 var $1059=($1058|0)==0;
6117 if($1059){label=168;break;}else{label=172;break;}
6118 case 168:
6119 var $1061=$fom_mask;
6120 var $1062=($1061|0)!=0;
6121 if($1062){label=169;break;}else{label=170;break;}
6122 case 169:
6123 var $1064=$fom_mask;
6124 var $1071=$1064;label=171;break;
6125 case 170:
6126 var $1066=$5;
6127 var $1067=(($1066+1)|0);
6128 $5=$1067;
6129 var $1068=HEAP8[($1066)];
6130 var $1069=($1068&255);
6131 var $1071=$1069;label=171;break;
6132 case 171:
6133 var $1071;
6134 var $1072=(($1071)&255);
6135 $mask=$1072;
6136 $mixmask=1;
6137 label=172;break;
6138 case 172:
6139 var $1074=$mask;
6140 var $1075=($1074&255);
6141 var $1076=$mixmask;
6142 var $1077=($1076&255);
6143 var $1078=$1075&$1077;
6144 var $1079=($1078|0)!=0;
6145 if($1079){label=173;break;}else{label=174;break;}
6146 case 173:
6147 var $1081=$mix;
6148 var $1082=$x;
6149 var $1083=$line;
6150 var $1084=(($1083+($1082<<1))|0);
6151 HEAP16[(($1084)>>1)]=$1081;
6152 label=175;break;
6153 case 174:
6154 var $1086=$x;
6155 var $1087=$line;
6156 var $1088=(($1087+($1086<<1))|0);
6157 HEAP16[(($1088)>>1)]=0;
6158 label=175;break;
6159 case 175:
6160 var $1090=$count;
6161 var $1091=((($1090)-(1))|0);
6162 $count=$1091;
6163 var $1092=$x;
6164 var $1093=((($1092)+(1))|0);
6165 $x=$1093;
6166 label=164;break;
6167 case 176:
6168 label=260;break;
6169 case 177:
6170 label=178;break;
6171 case 178:
6172 var $1097=$count;
6173 var $1098=$1097&-8;
6174 var $1099=($1098|0)!=0;
6175 if($1099){label=179;break;}else{var $1106=0;label=180;break;}
6176 case 179:
6177 var $1101=$x;
6178 var $1102=((($1101)+(8))|0);
6179 var $1103=$3;
6180 var $1104=($1102|0)<($1103|0);
6181 var $1106=$1104;label=180;break;
6182 case 180:
6183 var $1106;
6184 if($1106){label=181;break;}else{label=246;break;}
6185 case 181:
6186 var $1108=$mixmask;
6187 var $1109=($1108&255);
6188 var $1110=$1109<<1;
6189 var $1111=(($1110)&255);
6190 $mixmask=$1111;
6191 var $1112=$mixmask;
6192 var $1113=($1112&255);
6193 var $1114=($1113|0)==0;
6194 if($1114){label=182;break;}else{label=186;break;}
6195 case 182:
6196 var $1116=$fom_mask;
6197 var $1117=($1116|0)!=0;
6198 if($1117){label=183;break;}else{label=184;break;}
6199 case 183:
6200 var $1119=$fom_mask;
6201 var $1126=$1119;label=185;break;
6202 case 184:
6203 var $1121=$5;
6204 var $1122=(($1121+1)|0);
6205 $5=$1122;
6206 var $1123=HEAP8[($1121)];
6207 var $1124=($1123&255);
6208 var $1126=$1124;label=185;break;
6209 case 185:
6210 var $1126;
6211 var $1127=(($1126)&255);
6212 $mask=$1127;
6213 $mixmask=1;
6214 label=186;break;
6215 case 186:
6216 var $1129=$mask;
6217 var $1130=($1129&255);
6218 var $1131=$mixmask;
6219 var $1132=($1131&255);
6220 var $1133=$1130&$1132;
6221 var $1134=($1133|0)!=0;
6222 if($1134){label=187;break;}else{label=188;break;}
6223 case 187:
6224 var $1136=$x;
6225 var $1137=$prevline;
6226 var $1138=(($1137+($1136<<1))|0);
6227 var $1139=HEAP16[(($1138)>>1)];
6228 var $1140=($1139&65535);
6229 var $1141=$mix;
6230 var $1142=($1141&65535);
6231 var $1143=$1140^$1142;
6232 var $1144=(($1143)&65535);
6233 var $1145=$x;
6234 var $1146=$line;
6235 var $1147=(($1146+($1145<<1))|0);
6236 HEAP16[(($1147)>>1)]=$1144;
6237 label=189;break;
6238 case 188:
6239 var $1149=$x;
6240 var $1150=$prevline;
6241 var $1151=(($1150+($1149<<1))|0);
6242 var $1152=HEAP16[(($1151)>>1)];
6243 var $1153=$x;
6244 var $1154=$line;
6245 var $1155=(($1154+($1153<<1))|0);
6246 HEAP16[(($1155)>>1)]=$1152;
6247 label=189;break;
6248 case 189:
6249 var $1157=$count;
6250 var $1158=((($1157)-(1))|0);
6251 $count=$1158;
6252 var $1159=$x;
6253 var $1160=((($1159)+(1))|0);
6254 $x=$1160;
6255 var $1161=$mixmask;
6256 var $1162=($1161&255);
6257 var $1163=$1162<<1;
6258 var $1164=(($1163)&255);
6259 $mixmask=$1164;
6260 var $1165=$mixmask;
6261 var $1166=($1165&255);
6262 var $1167=($1166|0)==0;
6263 if($1167){label=190;break;}else{label=194;break;}
6264 case 190:
6265 var $1169=$fom_mask;
6266 var $1170=($1169|0)!=0;
6267 if($1170){label=191;break;}else{label=192;break;}
6268 case 191:
6269 var $1172=$fom_mask;
6270 var $1179=$1172;label=193;break;
6271 case 192:
6272 var $1174=$5;
6273 var $1175=(($1174+1)|0);
6274 $5=$1175;
6275 var $1176=HEAP8[($1174)];
6276 var $1177=($1176&255);
6277 var $1179=$1177;label=193;break;
6278 case 193:
6279 var $1179;
6280 var $1180=(($1179)&255);
6281 $mask=$1180;
6282 $mixmask=1;
6283 label=194;break;
6284 case 194:
6285 var $1182=$mask;
6286 var $1183=($1182&255);
6287 var $1184=$mixmask;
6288 var $1185=($1184&255);
6289 var $1186=$1183&$1185;
6290 var $1187=($1186|0)!=0;
6291 if($1187){label=195;break;}else{label=196;break;}
6292 case 195:
6293 var $1189=$x;
6294 var $1190=$prevline;
6295 var $1191=(($1190+($1189<<1))|0);
6296 var $1192=HEAP16[(($1191)>>1)];
6297 var $1193=($1192&65535);
6298 var $1194=$mix;
6299 var $1195=($1194&65535);
6300 var $1196=$1193^$1195;
6301 var $1197=(($1196)&65535);
6302 var $1198=$x;
6303 var $1199=$line;
6304 var $1200=(($1199+($1198<<1))|0);
6305 HEAP16[(($1200)>>1)]=$1197;
6306 label=197;break;
6307 case 196:
6308 var $1202=$x;
6309 var $1203=$prevline;
6310 var $1204=(($1203+($1202<<1))|0);
6311 var $1205=HEAP16[(($1204)>>1)];
6312 var $1206=$x;
6313 var $1207=$line;
6314 var $1208=(($1207+($1206<<1))|0);
6315 HEAP16[(($1208)>>1)]=$1205;
6316 label=197;break;
6317 case 197:
6318 var $1210=$count;
6319 var $1211=((($1210)-(1))|0);
6320 $count=$1211;
6321 var $1212=$x;
6322 var $1213=((($1212)+(1))|0);
6323 $x=$1213;
6324 var $1214=$mixmask;
6325 var $1215=($1214&255);
6326 var $1216=$1215<<1;
6327 var $1217=(($1216)&255);
6328 $mixmask=$1217;
6329 var $1218=$mixmask;
6330 var $1219=($1218&255);
6331 var $1220=($1219|0)==0;
6332 if($1220){label=198;break;}else{label=202;break;}
6333 case 198:
6334 var $1222=$fom_mask;
6335 var $1223=($1222|0)!=0;
6336 if($1223){label=199;break;}else{label=200;break;}
6337 case 199:
6338 var $1225=$fom_mask;
6339 var $1232=$1225;label=201;break;
6340 case 200:
6341 var $1227=$5;
6342 var $1228=(($1227+1)|0);
6343 $5=$1228;
6344 var $1229=HEAP8[($1227)];
6345 var $1230=($1229&255);
6346 var $1232=$1230;label=201;break;
6347 case 201:
6348 var $1232;
6349 var $1233=(($1232)&255);
6350 $mask=$1233;
6351 $mixmask=1;
6352 label=202;break;
6353 case 202:
6354 var $1235=$mask;
6355 var $1236=($1235&255);
6356 var $1237=$mixmask;
6357 var $1238=($1237&255);
6358 var $1239=$1236&$1238;
6359 var $1240=($1239|0)!=0;
6360 if($1240){label=203;break;}else{label=204;break;}
6361 case 203:
6362 var $1242=$x;
6363 var $1243=$prevline;
6364 var $1244=(($1243+($1242<<1))|0);
6365 var $1245=HEAP16[(($1244)>>1)];
6366 var $1246=($1245&65535);
6367 var $1247=$mix;
6368 var $1248=($1247&65535);
6369 var $1249=$1246^$1248;
6370 var $1250=(($1249)&65535);
6371 var $1251=$x;
6372 var $1252=$line;
6373 var $1253=(($1252+($1251<<1))|0);
6374 HEAP16[(($1253)>>1)]=$1250;
6375 label=205;break;
6376 case 204:
6377 var $1255=$x;
6378 var $1256=$prevline;
6379 var $1257=(($1256+($1255<<1))|0);
6380 var $1258=HEAP16[(($1257)>>1)];
6381 var $1259=$x;
6382 var $1260=$line;
6383 var $1261=(($1260+($1259<<1))|0);
6384 HEAP16[(($1261)>>1)]=$1258;
6385 label=205;break;
6386 case 205:
6387 var $1263=$count;
6388 var $1264=((($1263)-(1))|0);
6389 $count=$1264;
6390 var $1265=$x;
6391 var $1266=((($1265)+(1))|0);
6392 $x=$1266;
6393 var $1267=$mixmask;
6394 var $1268=($1267&255);
6395 var $1269=$1268<<1;
6396 var $1270=(($1269)&255);
6397 $mixmask=$1270;
6398 var $1271=$mixmask;
6399 var $1272=($1271&255);
6400 var $1273=($1272|0)==0;
6401 if($1273){label=206;break;}else{label=210;break;}
6402 case 206:
6403 var $1275=$fom_mask;
6404 var $1276=($1275|0)!=0;
6405 if($1276){label=207;break;}else{label=208;break;}
6406 case 207:
6407 var $1278=$fom_mask;
6408 var $1285=$1278;label=209;break;
6409 case 208:
6410 var $1280=$5;
6411 var $1281=(($1280+1)|0);
6412 $5=$1281;
6413 var $1282=HEAP8[($1280)];
6414 var $1283=($1282&255);
6415 var $1285=$1283;label=209;break;
6416 case 209:
6417 var $1285;
6418 var $1286=(($1285)&255);
6419 $mask=$1286;
6420 $mixmask=1;
6421 label=210;break;
6422 case 210:
6423 var $1288=$mask;
6424 var $1289=($1288&255);
6425 var $1290=$mixmask;
6426 var $1291=($1290&255);
6427 var $1292=$1289&$1291;
6428 var $1293=($1292|0)!=0;
6429 if($1293){label=211;break;}else{label=212;break;}
6430 case 211:
6431 var $1295=$x;
6432 var $1296=$prevline;
6433 var $1297=(($1296+($1295<<1))|0);
6434 var $1298=HEAP16[(($1297)>>1)];
6435 var $1299=($1298&65535);
6436 var $1300=$mix;
6437 var $1301=($1300&65535);
6438 var $1302=$1299^$1301;
6439 var $1303=(($1302)&65535);
6440 var $1304=$x;
6441 var $1305=$line;
6442 var $1306=(($1305+($1304<<1))|0);
6443 HEAP16[(($1306)>>1)]=$1303;
6444 label=213;break;
6445 case 212:
6446 var $1308=$x;
6447 var $1309=$prevline;
6448 var $1310=(($1309+($1308<<1))|0);
6449 var $1311=HEAP16[(($1310)>>1)];
6450 var $1312=$x;
6451 var $1313=$line;
6452 var $1314=(($1313+($1312<<1))|0);
6453 HEAP16[(($1314)>>1)]=$1311;
6454 label=213;break;
6455 case 213:
6456 var $1316=$count;
6457 var $1317=((($1316)-(1))|0);
6458 $count=$1317;
6459 var $1318=$x;
6460 var $1319=((($1318)+(1))|0);
6461 $x=$1319;
6462 var $1320=$mixmask;
6463 var $1321=($1320&255);
6464 var $1322=$1321<<1;
6465 var $1323=(($1322)&255);
6466 $mixmask=$1323;
6467 var $1324=$mixmask;
6468 var $1325=($1324&255);
6469 var $1326=($1325|0)==0;
6470 if($1326){label=214;break;}else{label=218;break;}
6471 case 214:
6472 var $1328=$fom_mask;
6473 var $1329=($1328|0)!=0;
6474 if($1329){label=215;break;}else{label=216;break;}
6475 case 215:
6476 var $1331=$fom_mask;
6477 var $1338=$1331;label=217;break;
6478 case 216:
6479 var $1333=$5;
6480 var $1334=(($1333+1)|0);
6481 $5=$1334;
6482 var $1335=HEAP8[($1333)];
6483 var $1336=($1335&255);
6484 var $1338=$1336;label=217;break;
6485 case 217:
6486 var $1338;
6487 var $1339=(($1338)&255);
6488 $mask=$1339;
6489 $mixmask=1;
6490 label=218;break;
6491 case 218:
6492 var $1341=$mask;
6493 var $1342=($1341&255);
6494 var $1343=$mixmask;
6495 var $1344=($1343&255);
6496 var $1345=$1342&$1344;
6497 var $1346=($1345|0)!=0;
6498 if($1346){label=219;break;}else{label=220;break;}
6499 case 219:
6500 var $1348=$x;
6501 var $1349=$prevline;
6502 var $1350=(($1349+($1348<<1))|0);
6503 var $1351=HEAP16[(($1350)>>1)];
6504 var $1352=($1351&65535);
6505 var $1353=$mix;
6506 var $1354=($1353&65535);
6507 var $1355=$1352^$1354;
6508 var $1356=(($1355)&65535);
6509 var $1357=$x;
6510 var $1358=$line;
6511 var $1359=(($1358+($1357<<1))|0);
6512 HEAP16[(($1359)>>1)]=$1356;
6513 label=221;break;
6514 case 220:
6515 var $1361=$x;
6516 var $1362=$prevline;
6517 var $1363=(($1362+($1361<<1))|0);
6518 var $1364=HEAP16[(($1363)>>1)];
6519 var $1365=$x;
6520 var $1366=$line;
6521 var $1367=(($1366+($1365<<1))|0);
6522 HEAP16[(($1367)>>1)]=$1364;
6523 label=221;break;
6524 case 221:
6525 var $1369=$count;
6526 var $1370=((($1369)-(1))|0);
6527 $count=$1370;
6528 var $1371=$x;
6529 var $1372=((($1371)+(1))|0);
6530 $x=$1372;
6531 var $1373=$mixmask;
6532 var $1374=($1373&255);
6533 var $1375=$1374<<1;
6534 var $1376=(($1375)&255);
6535 $mixmask=$1376;
6536 var $1377=$mixmask;
6537 var $1378=($1377&255);
6538 var $1379=($1378|0)==0;
6539 if($1379){label=222;break;}else{label=226;break;}
6540 case 222:
6541 var $1381=$fom_mask;
6542 var $1382=($1381|0)!=0;
6543 if($1382){label=223;break;}else{label=224;break;}
6544 case 223:
6545 var $1384=$fom_mask;
6546 var $1391=$1384;label=225;break;
6547 case 224:
6548 var $1386=$5;
6549 var $1387=(($1386+1)|0);
6550 $5=$1387;
6551 var $1388=HEAP8[($1386)];
6552 var $1389=($1388&255);
6553 var $1391=$1389;label=225;break;
6554 case 225:
6555 var $1391;
6556 var $1392=(($1391)&255);
6557 $mask=$1392;
6558 $mixmask=1;
6559 label=226;break;
6560 case 226:
6561 var $1394=$mask;
6562 var $1395=($1394&255);
6563 var $1396=$mixmask;
6564 var $1397=($1396&255);
6565 var $1398=$1395&$1397;
6566 var $1399=($1398|0)!=0;
6567 if($1399){label=227;break;}else{label=228;break;}
6568 case 227:
6569 var $1401=$x;
6570 var $1402=$prevline;
6571 var $1403=(($1402+($1401<<1))|0);
6572 var $1404=HEAP16[(($1403)>>1)];
6573 var $1405=($1404&65535);
6574 var $1406=$mix;
6575 var $1407=($1406&65535);
6576 var $1408=$1405^$1407;
6577 var $1409=(($1408)&65535);
6578 var $1410=$x;
6579 var $1411=$line;
6580 var $1412=(($1411+($1410<<1))|0);
6581 HEAP16[(($1412)>>1)]=$1409;
6582 label=229;break;
6583 case 228:
6584 var $1414=$x;
6585 var $1415=$prevline;
6586 var $1416=(($1415+($1414<<1))|0);
6587 var $1417=HEAP16[(($1416)>>1)];
6588 var $1418=$x;
6589 var $1419=$line;
6590 var $1420=(($1419+($1418<<1))|0);
6591 HEAP16[(($1420)>>1)]=$1417;
6592 label=229;break;
6593 case 229:
6594 var $1422=$count;
6595 var $1423=((($1422)-(1))|0);
6596 $count=$1423;
6597 var $1424=$x;
6598 var $1425=((($1424)+(1))|0);
6599 $x=$1425;
6600 var $1426=$mixmask;
6601 var $1427=($1426&255);
6602 var $1428=$1427<<1;
6603 var $1429=(($1428)&255);
6604 $mixmask=$1429;
6605 var $1430=$mixmask;
6606 var $1431=($1430&255);
6607 var $1432=($1431|0)==0;
6608 if($1432){label=230;break;}else{label=234;break;}
6609 case 230:
6610 var $1434=$fom_mask;
6611 var $1435=($1434|0)!=0;
6612 if($1435){label=231;break;}else{label=232;break;}
6613 case 231:
6614 var $1437=$fom_mask;
6615 var $1444=$1437;label=233;break;
6616 case 232:
6617 var $1439=$5;
6618 var $1440=(($1439+1)|0);
6619 $5=$1440;
6620 var $1441=HEAP8[($1439)];
6621 var $1442=($1441&255);
6622 var $1444=$1442;label=233;break;
6623 case 233:
6624 var $1444;
6625 var $1445=(($1444)&255);
6626 $mask=$1445;
6627 $mixmask=1;
6628 label=234;break;
6629 case 234:
6630 var $1447=$mask;
6631 var $1448=($1447&255);
6632 var $1449=$mixmask;
6633 var $1450=($1449&255);
6634 var $1451=$1448&$1450;
6635 var $1452=($1451|0)!=0;
6636 if($1452){label=235;break;}else{label=236;break;}
6637 case 235:
6638 var $1454=$x;
6639 var $1455=$prevline;
6640 var $1456=(($1455+($1454<<1))|0);
6641 var $1457=HEAP16[(($1456)>>1)];
6642 var $1458=($1457&65535);
6643 var $1459=$mix;
6644 var $1460=($1459&65535);
6645 var $1461=$1458^$1460;
6646 var $1462=(($1461)&65535);
6647 var $1463=$x;
6648 var $1464=$line;
6649 var $1465=(($1464+($1463<<1))|0);
6650 HEAP16[(($1465)>>1)]=$1462;
6651 label=237;break;
6652 case 236:
6653 var $1467=$x;
6654 var $1468=$prevline;
6655 var $1469=(($1468+($1467<<1))|0);
6656 var $1470=HEAP16[(($1469)>>1)];
6657 var $1471=$x;
6658 var $1472=$line;
6659 var $1473=(($1472+($1471<<1))|0);
6660 HEAP16[(($1473)>>1)]=$1470;
6661 label=237;break;
6662 case 237:
6663 var $1475=$count;
6664 var $1476=((($1475)-(1))|0);
6665 $count=$1476;
6666 var $1477=$x;
6667 var $1478=((($1477)+(1))|0);
6668 $x=$1478;
6669 var $1479=$mixmask;
6670 var $1480=($1479&255);
6671 var $1481=$1480<<1;
6672 var $1482=(($1481)&255);
6673 $mixmask=$1482;
6674 var $1483=$mixmask;
6675 var $1484=($1483&255);
6676 var $1485=($1484|0)==0;
6677 if($1485){label=238;break;}else{label=242;break;}
6678 case 238:
6679 var $1487=$fom_mask;
6680 var $1488=($1487|0)!=0;
6681 if($1488){label=239;break;}else{label=240;break;}
6682 case 239:
6683 var $1490=$fom_mask;
6684 var $1497=$1490;label=241;break;
6685 case 240:
6686 var $1492=$5;
6687 var $1493=(($1492+1)|0);
6688 $5=$1493;
6689 var $1494=HEAP8[($1492)];
6690 var $1495=($1494&255);
6691 var $1497=$1495;label=241;break;
6692 case 241:
6693 var $1497;
6694 var $1498=(($1497)&255);
6695 $mask=$1498;
6696 $mixmask=1;
6697 label=242;break;
6698 case 242:
6699 var $1500=$mask;
6700 var $1501=($1500&255);
6701 var $1502=$mixmask;
6702 var $1503=($1502&255);
6703 var $1504=$1501&$1503;
6704 var $1505=($1504|0)!=0;
6705 if($1505){label=243;break;}else{label=244;break;}
6706 case 243:
6707 var $1507=$x;
6708 var $1508=$prevline;
6709 var $1509=(($1508+($1507<<1))|0);
6710 var $1510=HEAP16[(($1509)>>1)];
6711 var $1511=($1510&65535);
6712 var $1512=$mix;
6713 var $1513=($1512&65535);
6714 var $1514=$1511^$1513;
6715 var $1515=(($1514)&65535);
6716 var $1516=$x;
6717 var $1517=$line;
6718 var $1518=(($1517+($1516<<1))|0);
6719 HEAP16[(($1518)>>1)]=$1515;
6720 label=245;break;
6721 case 244:
6722 var $1520=$x;
6723 var $1521=$prevline;
6724 var $1522=(($1521+($1520<<1))|0);
6725 var $1523=HEAP16[(($1522)>>1)];
6726 var $1524=$x;
6727 var $1525=$line;
6728 var $1526=(($1525+($1524<<1))|0);
6729 HEAP16[(($1526)>>1)]=$1523;
6730 label=245;break;
6731 case 245:
6732 var $1528=$count;
6733 var $1529=((($1528)-(1))|0);
6734 $count=$1529;
6735 var $1530=$x;
6736 var $1531=((($1530)+(1))|0);
6737 $x=$1531;
6738 label=178;break;
6739 case 246:
6740 label=247;break;
6741 case 247:
6742 var $1534=$count;
6743 var $1535=($1534|0)>0;
6744 if($1535){label=248;break;}else{var $1541=0;label=249;break;}
6745 case 248:
6746 var $1537=$x;
6747 var $1538=$3;
6748 var $1539=($1537|0)<($1538|0);
6749 var $1541=$1539;label=249;break;
6750 case 249:
6751 var $1541;
6752 if($1541){label=250;break;}else{label=259;break;}
6753 case 250:
6754 var $1543=$mixmask;
6755 var $1544=($1543&255);
6756 var $1545=$1544<<1;
6757 var $1546=(($1545)&255);
6758 $mixmask=$1546;
6759 var $1547=$mixmask;
6760 var $1548=($1547&255);
6761 var $1549=($1548|0)==0;
6762 if($1549){label=251;break;}else{label=255;break;}
6763 case 251:
6764 var $1551=$fom_mask;
6765 var $1552=($1551|0)!=0;
6766 if($1552){label=252;break;}else{label=253;break;}
6767 case 252:
6768 var $1554=$fom_mask;
6769 var $1561=$1554;label=254;break;
6770 case 253:
6771 var $1556=$5;
6772 var $1557=(($1556+1)|0);
6773 $5=$1557;
6774 var $1558=HEAP8[($1556)];
6775 var $1559=($1558&255);
6776 var $1561=$1559;label=254;break;
6777 case 254:
6778 var $1561;
6779 var $1562=(($1561)&255);
6780 $mask=$1562;
6781 $mixmask=1;
6782 label=255;break;
6783 case 255:
6784 var $1564=$mask;
6785 var $1565=($1564&255);
6786 var $1566=$mixmask;
6787 var $1567=($1566&255);
6788 var $1568=$1565&$1567;
6789 var $1569=($1568|0)!=0;
6790 if($1569){label=256;break;}else{label=257;break;}
6791 case 256:
6792 var $1571=$x;
6793 var $1572=$prevline;
6794 var $1573=(($1572+($1571<<1))|0);
6795 var $1574=HEAP16[(($1573)>>1)];
6796 var $1575=($1574&65535);
6797 var $1576=$mix;
6798 var $1577=($1576&65535);
6799 var $1578=$1575^$1577;
6800 var $1579=(($1578)&65535);
6801 var $1580=$x;
6802 var $1581=$line;
6803 var $1582=(($1581+($1580<<1))|0);
6804 HEAP16[(($1582)>>1)]=$1579;
6805 label=258;break;
6806 case 257:
6807 var $1584=$x;
6808 var $1585=$prevline;
6809 var $1586=(($1585+($1584<<1))|0);
6810 var $1587=HEAP16[(($1586)>>1)];
6811 var $1588=$x;
6812 var $1589=$line;
6813 var $1590=(($1589+($1588<<1))|0);
6814 HEAP16[(($1590)>>1)]=$1587;
6815 label=258;break;
6816 case 258:
6817 var $1592=$count;
6818 var $1593=((($1592)-(1))|0);
6819 $count=$1593;
6820 var $1594=$x;
6821 var $1595=((($1594)+(1))|0);
6822 $x=$1595;
6823 label=247;break;
6824 case 259:
6825 label=260;break;
6826 case 260:
6827 label=344;break;
6828 case 261:
6829 label=262;break;
6830 case 262:
6831 var $1600=$count;
6832 var $1601=$1600&-8;
6833 var $1602=($1601|0)!=0;
6834 if($1602){label=263;break;}else{var $1609=0;label=264;break;}
6835 case 263:
6836 var $1604=$x;
6837 var $1605=((($1604)+(8))|0);
6838 var $1606=$3;
6839 var $1607=($1605|0)<($1606|0);
6840 var $1609=$1607;label=264;break;
6841 case 264:
6842 var $1609;
6843 if($1609){label=265;break;}else{label=266;break;}
6844 case 265:
6845 var $1611=$colour2;
6846 var $1612=$x;
6847 var $1613=$line;
6848 var $1614=(($1613+($1612<<1))|0);
6849 HEAP16[(($1614)>>1)]=$1611;
6850 var $1615=$count;
6851 var $1616=((($1615)-(1))|0);
6852 $count=$1616;
6853 var $1617=$x;
6854 var $1618=((($1617)+(1))|0);
6855 $x=$1618;
6856 var $1619=$colour2;
6857 var $1620=$x;
6858 var $1621=$line;
6859 var $1622=(($1621+($1620<<1))|0);
6860 HEAP16[(($1622)>>1)]=$1619;
6861 var $1623=$count;
6862 var $1624=((($1623)-(1))|0);
6863 $count=$1624;
6864 var $1625=$x;
6865 var $1626=((($1625)+(1))|0);
6866 $x=$1626;
6867 var $1627=$colour2;
6868 var $1628=$x;
6869 var $1629=$line;
6870 var $1630=(($1629+($1628<<1))|0);
6871 HEAP16[(($1630)>>1)]=$1627;
6872 var $1631=$count;
6873 var $1632=((($1631)-(1))|0);
6874 $count=$1632;
6875 var $1633=$x;
6876 var $1634=((($1633)+(1))|0);
6877 $x=$1634;
6878 var $1635=$colour2;
6879 var $1636=$x;
6880 var $1637=$line;
6881 var $1638=(($1637+($1636<<1))|0);
6882 HEAP16[(($1638)>>1)]=$1635;
6883 var $1639=$count;
6884 var $1640=((($1639)-(1))|0);
6885 $count=$1640;
6886 var $1641=$x;
6887 var $1642=((($1641)+(1))|0);
6888 $x=$1642;
6889 var $1643=$colour2;
6890 var $1644=$x;
6891 var $1645=$line;
6892 var $1646=(($1645+($1644<<1))|0);
6893 HEAP16[(($1646)>>1)]=$1643;
6894 var $1647=$count;
6895 var $1648=((($1647)-(1))|0);
6896 $count=$1648;
6897 var $1649=$x;
6898 var $1650=((($1649)+(1))|0);
6899 $x=$1650;
6900 var $1651=$colour2;
6901 var $1652=$x;
6902 var $1653=$line;
6903 var $1654=(($1653+($1652<<1))|0);
6904 HEAP16[(($1654)>>1)]=$1651;
6905 var $1655=$count;
6906 var $1656=((($1655)-(1))|0);
6907 $count=$1656;
6908 var $1657=$x;
6909 var $1658=((($1657)+(1))|0);
6910 $x=$1658;
6911 var $1659=$colour2;
6912 var $1660=$x;
6913 var $1661=$line;
6914 var $1662=(($1661+($1660<<1))|0);
6915 HEAP16[(($1662)>>1)]=$1659;
6916 var $1663=$count;
6917 var $1664=((($1663)-(1))|0);
6918 $count=$1664;
6919 var $1665=$x;
6920 var $1666=((($1665)+(1))|0);
6921 $x=$1666;
6922 var $1667=$colour2;
6923 var $1668=$x;
6924 var $1669=$line;
6925 var $1670=(($1669+($1668<<1))|0);
6926 HEAP16[(($1670)>>1)]=$1667;
6927 var $1671=$count;
6928 var $1672=((($1671)-(1))|0);
6929 $count=$1672;
6930 var $1673=$x;
6931 var $1674=((($1673)+(1))|0);
6932 $x=$1674;
6933 label=262;break;
6934 case 266:
6935 label=267;break;
6936 case 267:
6937 var $1677=$count;
6938 var $1678=($1677|0)>0;
6939 if($1678){label=268;break;}else{var $1684=0;label=269;break;}
6940 case 268:
6941 var $1680=$x;
6942 var $1681=$3;
6943 var $1682=($1680|0)<($1681|0);
6944 var $1684=$1682;label=269;break;
6945 case 269:
6946 var $1684;
6947 if($1684){label=270;break;}else{label=271;break;}
6948 case 270:
6949 var $1686=$colour2;
6950 var $1687=$x;
6951 var $1688=$line;
6952 var $1689=(($1688+($1687<<1))|0);
6953 HEAP16[(($1689)>>1)]=$1686;
6954 var $1690=$count;
6955 var $1691=((($1690)-(1))|0);
6956 $count=$1691;
6957 var $1692=$x;
6958 var $1693=((($1692)+(1))|0);
6959 $x=$1693;
6960 label=267;break;
6961 case 271:
6962 label=344;break;
6963 case 272:
6964 label=273;break;
6965 case 273:
6966 var $1697=$count;
6967 var $1698=$1697&-8;
6968 var $1699=($1698|0)!=0;
6969 if($1699){label=274;break;}else{var $1706=0;label=275;break;}
6970 case 274:
6971 var $1701=$x;
6972 var $1702=((($1701)+(8))|0);
6973 var $1703=$3;
6974 var $1704=($1702|0)<($1703|0);
6975 var $1706=$1704;label=275;break;
6976 case 275:
6977 var $1706;
6978 if($1706){label=276;break;}else{label=277;break;}
6979 case 276:
6980 var $1708=$5;
6981 var $1709=(($1708+1)|0);
6982 $5=$1709;
6983 var $1710=HEAP8[($1708)];
6984 var $1711=($1710&255);
6985 var $1712=$x;
6986 var $1713=$line;
6987 var $1714=(($1713+($1712<<1))|0);
6988 HEAP16[(($1714)>>1)]=$1711;
6989 var $1715=$5;
6990 var $1716=(($1715+1)|0);
6991 $5=$1716;
6992 var $1717=HEAP8[($1715)];
6993 var $1718=($1717&255);
6994 var $1719=$1718<<8;
6995 var $1720=$x;
6996 var $1721=$line;
6997 var $1722=(($1721+($1720<<1))|0);
6998 var $1723=HEAP16[(($1722)>>1)];
6999 var $1724=($1723&65535);
7000 var $1725=$1724|$1719;
7001 var $1726=(($1725)&65535);
7002 HEAP16[(($1722)>>1)]=$1726;
7003 var $1727=$count;
7004 var $1728=((($1727)-(1))|0);
7005 $count=$1728;
7006 var $1729=$x;
7007 var $1730=((($1729)+(1))|0);
7008 $x=$1730;
7009 var $1731=$5;
7010 var $1732=(($1731+1)|0);
7011 $5=$1732;
7012 var $1733=HEAP8[($1731)];
7013 var $1734=($1733&255);
7014 var $1735=$x;
7015 var $1736=$line;
7016 var $1737=(($1736+($1735<<1))|0);
7017 HEAP16[(($1737)>>1)]=$1734;
7018 var $1738=$5;
7019 var $1739=(($1738+1)|0);
7020 $5=$1739;
7021 var $1740=HEAP8[($1738)];
7022 var $1741=($1740&255);
7023 var $1742=$1741<<8;
7024 var $1743=$x;
7025 var $1744=$line;
7026 var $1745=(($1744+($1743<<1))|0);
7027 var $1746=HEAP16[(($1745)>>1)];
7028 var $1747=($1746&65535);
7029 var $1748=$1747|$1742;
7030 var $1749=(($1748)&65535);
7031 HEAP16[(($1745)>>1)]=$1749;
7032 var $1750=$count;
7033 var $1751=((($1750)-(1))|0);
7034 $count=$1751;
7035 var $1752=$x;
7036 var $1753=((($1752)+(1))|0);
7037 $x=$1753;
7038 var $1754=$5;
7039 var $1755=(($1754+1)|0);
7040 $5=$1755;
7041 var $1756=HEAP8[($1754)];
7042 var $1757=($1756&255);
7043 var $1758=$x;
7044 var $1759=$line;
7045 var $1760=(($1759+($1758<<1))|0);
7046 HEAP16[(($1760)>>1)]=$1757;
7047 var $1761=$5;
7048 var $1762=(($1761+1)|0);
7049 $5=$1762;
7050 var $1763=HEAP8[($1761)];
7051 var $1764=($1763&255);
7052 var $1765=$1764<<8;
7053 var $1766=$x;
7054 var $1767=$line;
7055 var $1768=(($1767+($1766<<1))|0);
7056 var $1769=HEAP16[(($1768)>>1)];
7057 var $1770=($1769&65535);
7058 var $1771=$1770|$1765;
7059 var $1772=(($1771)&65535);
7060 HEAP16[(($1768)>>1)]=$1772;
7061 var $1773=$count;
7062 var $1774=((($1773)-(1))|0);
7063 $count=$1774;
7064 var $1775=$x;
7065 var $1776=((($1775)+(1))|0);
7066 $x=$1776;
7067 var $1777=$5;
7068 var $1778=(($1777+1)|0);
7069 $5=$1778;
7070 var $1779=HEAP8[($1777)];
7071 var $1780=($1779&255);
7072 var $1781=$x;
7073 var $1782=$line;
7074 var $1783=(($1782+($1781<<1))|0);
7075 HEAP16[(($1783)>>1)]=$1780;
7076 var $1784=$5;
7077 var $1785=(($1784+1)|0);
7078 $5=$1785;
7079 var $1786=HEAP8[($1784)];
7080 var $1787=($1786&255);
7081 var $1788=$1787<<8;
7082 var $1789=$x;
7083 var $1790=$line;
7084 var $1791=(($1790+($1789<<1))|0);
7085 var $1792=HEAP16[(($1791)>>1)];
7086 var $1793=($1792&65535);
7087 var $1794=$1793|$1788;
7088 var $1795=(($1794)&65535);
7089 HEAP16[(($1791)>>1)]=$1795;
7090 var $1796=$count;
7091 var $1797=((($1796)-(1))|0);
7092 $count=$1797;
7093 var $1798=$x;
7094 var $1799=((($1798)+(1))|0);
7095 $x=$1799;
7096 var $1800=$5;
7097 var $1801=(($1800+1)|0);
7098 $5=$1801;
7099 var $1802=HEAP8[($1800)];
7100 var $1803=($1802&255);
7101 var $1804=$x;
7102 var $1805=$line;
7103 var $1806=(($1805+($1804<<1))|0);
7104 HEAP16[(($1806)>>1)]=$1803;
7105 var $1807=$5;
7106 var $1808=(($1807+1)|0);
7107 $5=$1808;
7108 var $1809=HEAP8[($1807)];
7109 var $1810=($1809&255);
7110 var $1811=$1810<<8;
7111 var $1812=$x;
7112 var $1813=$line;
7113 var $1814=(($1813+($1812<<1))|0);
7114 var $1815=HEAP16[(($1814)>>1)];
7115 var $1816=($1815&65535);
7116 var $1817=$1816|$1811;
7117 var $1818=(($1817)&65535);
7118 HEAP16[(($1814)>>1)]=$1818;
7119 var $1819=$count;
7120 var $1820=((($1819)-(1))|0);
7121 $count=$1820;
7122 var $1821=$x;
7123 var $1822=((($1821)+(1))|0);
7124 $x=$1822;
7125 var $1823=$5;
7126 var $1824=(($1823+1)|0);
7127 $5=$1824;
7128 var $1825=HEAP8[($1823)];
7129 var $1826=($1825&255);
7130 var $1827=$x;
7131 var $1828=$line;
7132 var $1829=(($1828+($1827<<1))|0);
7133 HEAP16[(($1829)>>1)]=$1826;
7134 var $1830=$5;
7135 var $1831=(($1830+1)|0);
7136 $5=$1831;
7137 var $1832=HEAP8[($1830)];
7138 var $1833=($1832&255);
7139 var $1834=$1833<<8;
7140 var $1835=$x;
7141 var $1836=$line;
7142 var $1837=(($1836+($1835<<1))|0);
7143 var $1838=HEAP16[(($1837)>>1)];
7144 var $1839=($1838&65535);
7145 var $1840=$1839|$1834;
7146 var $1841=(($1840)&65535);
7147 HEAP16[(($1837)>>1)]=$1841;
7148 var $1842=$count;
7149 var $1843=((($1842)-(1))|0);
7150 $count=$1843;
7151 var $1844=$x;
7152 var $1845=((($1844)+(1))|0);
7153 $x=$1845;
7154 var $1846=$5;
7155 var $1847=(($1846+1)|0);
7156 $5=$1847;
7157 var $1848=HEAP8[($1846)];
7158 var $1849=($1848&255);
7159 var $1850=$x;
7160 var $1851=$line;
7161 var $1852=(($1851+($1850<<1))|0);
7162 HEAP16[(($1852)>>1)]=$1849;
7163 var $1853=$5;
7164 var $1854=(($1853+1)|0);
7165 $5=$1854;
7166 var $1855=HEAP8[($1853)];
7167 var $1856=($1855&255);
7168 var $1857=$1856<<8;
7169 var $1858=$x;
7170 var $1859=$line;
7171 var $1860=(($1859+($1858<<1))|0);
7172 var $1861=HEAP16[(($1860)>>1)];
7173 var $1862=($1861&65535);
7174 var $1863=$1862|$1857;
7175 var $1864=(($1863)&65535);
7176 HEAP16[(($1860)>>1)]=$1864;
7177 var $1865=$count;
7178 var $1866=((($1865)-(1))|0);
7179 $count=$1866;
7180 var $1867=$x;
7181 var $1868=((($1867)+(1))|0);
7182 $x=$1868;
7183 var $1869=$5;
7184 var $1870=(($1869+1)|0);
7185 $5=$1870;
7186 var $1871=HEAP8[($1869)];
7187 var $1872=($1871&255);
7188 var $1873=$x;
7189 var $1874=$line;
7190 var $1875=(($1874+($1873<<1))|0);
7191 HEAP16[(($1875)>>1)]=$1872;
7192 var $1876=$5;
7193 var $1877=(($1876+1)|0);
7194 $5=$1877;
7195 var $1878=HEAP8[($1876)];
7196 var $1879=($1878&255);
7197 var $1880=$1879<<8;
7198 var $1881=$x;
7199 var $1882=$line;
7200 var $1883=(($1882+($1881<<1))|0);
7201 var $1884=HEAP16[(($1883)>>1)];
7202 var $1885=($1884&65535);
7203 var $1886=$1885|$1880;
7204 var $1887=(($1886)&65535);
7205 HEAP16[(($1883)>>1)]=$1887;
7206 var $1888=$count;
7207 var $1889=((($1888)-(1))|0);
7208 $count=$1889;
7209 var $1890=$x;
7210 var $1891=((($1890)+(1))|0);
7211 $x=$1891;
7212 label=273;break;
7213 case 277:
7214 label=278;break;
7215 case 278:
7216 var $1894=$count;
7217 var $1895=($1894|0)>0;
7218 if($1895){label=279;break;}else{var $1901=0;label=280;break;}
7219 case 279:
7220 var $1897=$x;
7221 var $1898=$3;
7222 var $1899=($1897|0)<($1898|0);
7223 var $1901=$1899;label=280;break;
7224 case 280:
7225 var $1901;
7226 if($1901){label=281;break;}else{label=282;break;}
7227 case 281:
7228 var $1903=$5;
7229 var $1904=(($1903+1)|0);
7230 $5=$1904;
7231 var $1905=HEAP8[($1903)];
7232 var $1906=($1905&255);
7233 var $1907=$x;
7234 var $1908=$line;
7235 var $1909=(($1908+($1907<<1))|0);
7236 HEAP16[(($1909)>>1)]=$1906;
7237 var $1910=$5;
7238 var $1911=(($1910+1)|0);
7239 $5=$1911;
7240 var $1912=HEAP8[($1910)];
7241 var $1913=($1912&255);
7242 var $1914=$1913<<8;
7243 var $1915=$x;
7244 var $1916=$line;
7245 var $1917=(($1916+($1915<<1))|0);
7246 var $1918=HEAP16[(($1917)>>1)];
7247 var $1919=($1918&65535);
7248 var $1920=$1919|$1914;
7249 var $1921=(($1920)&65535);
7250 HEAP16[(($1917)>>1)]=$1921;
7251 var $1922=$count;
7252 var $1923=((($1922)-(1))|0);
7253 $count=$1923;
7254 var $1924=$x;
7255 var $1925=((($1924)+(1))|0);
7256 $x=$1925;
7257 label=278;break;
7258 case 282:
7259 label=344;break;
7260 case 283:
7261 label=284;break;
7262 case 284:
7263 var $1929=$count;
7264 var $1930=$1929&-8;
7265 var $1931=($1930|0)!=0;
7266 if($1931){label=285;break;}else{var $1938=0;label=286;break;}
7267 case 285:
7268 var $1933=$x;
7269 var $1934=((($1933)+(8))|0);
7270 var $1935=$3;
7271 var $1936=($1934|0)<($1935|0);
7272 var $1938=$1936;label=286;break;
7273 case 286:
7274 var $1938;
7275 if($1938){label=287;break;}else{label=312;break;}
7276 case 287:
7277 var $1940=$bicolour;
7278 var $1941=($1940|0)!=0;
7279 if($1941){label=288;break;}else{label=289;break;}
7280 case 288:
7281 var $1943=$colour2;
7282 var $1944=$x;
7283 var $1945=$line;
7284 var $1946=(($1945+($1944<<1))|0);
7285 HEAP16[(($1946)>>1)]=$1943;
7286 $bicolour=0;
7287 label=290;break;
7288 case 289:
7289 var $1948=$colour1;
7290 var $1949=$x;
7291 var $1950=$line;
7292 var $1951=(($1950+($1949<<1))|0);
7293 HEAP16[(($1951)>>1)]=$1948;
7294 $bicolour=1;
7295 var $1952=$count;
7296 var $1953=((($1952)+(1))|0);
7297 $count=$1953;
7298 label=290;break;
7299 case 290:
7300 var $1955=$count;
7301 var $1956=((($1955)-(1))|0);
7302 $count=$1956;
7303 var $1957=$x;
7304 var $1958=((($1957)+(1))|0);
7305 $x=$1958;
7306 var $1959=$bicolour;
7307 var $1960=($1959|0)!=0;
7308 if($1960){label=291;break;}else{label=292;break;}
7309 case 291:
7310 var $1962=$colour2;
7311 var $1963=$x;
7312 var $1964=$line;
7313 var $1965=(($1964+($1963<<1))|0);
7314 HEAP16[(($1965)>>1)]=$1962;
7315 $bicolour=0;
7316 label=293;break;
7317 case 292:
7318 var $1967=$colour1;
7319 var $1968=$x;
7320 var $1969=$line;
7321 var $1970=(($1969+($1968<<1))|0);
7322 HEAP16[(($1970)>>1)]=$1967;
7323 $bicolour=1;
7324 var $1971=$count;
7325 var $1972=((($1971)+(1))|0);
7326 $count=$1972;
7327 label=293;break;
7328 case 293:
7329 var $1974=$count;
7330 var $1975=((($1974)-(1))|0);
7331 $count=$1975;
7332 var $1976=$x;
7333 var $1977=((($1976)+(1))|0);
7334 $x=$1977;
7335 var $1978=$bicolour;
7336 var $1979=($1978|0)!=0;
7337 if($1979){label=294;break;}else{label=295;break;}
7338 case 294:
7339 var $1981=$colour2;
7340 var $1982=$x;
7341 var $1983=$line;
7342 var $1984=(($1983+($1982<<1))|0);
7343 HEAP16[(($1984)>>1)]=$1981;
7344 $bicolour=0;
7345 label=296;break;
7346 case 295:
7347 var $1986=$colour1;
7348 var $1987=$x;
7349 var $1988=$line;
7350 var $1989=(($1988+($1987<<1))|0);
7351 HEAP16[(($1989)>>1)]=$1986;
7352 $bicolour=1;
7353 var $1990=$count;
7354 var $1991=((($1990)+(1))|0);
7355 $count=$1991;
7356 label=296;break;
7357 case 296:
7358 var $1993=$count;
7359 var $1994=((($1993)-(1))|0);
7360 $count=$1994;
7361 var $1995=$x;
7362 var $1996=((($1995)+(1))|0);
7363 $x=$1996;
7364 var $1997=$bicolour;
7365 var $1998=($1997|0)!=0;
7366 if($1998){label=297;break;}else{label=298;break;}
7367 case 297:
7368 var $2000=$colour2;
7369 var $2001=$x;
7370 var $2002=$line;
7371 var $2003=(($2002+($2001<<1))|0);
7372 HEAP16[(($2003)>>1)]=$2000;
7373 $bicolour=0;
7374 label=299;break;
7375 case 298:
7376 var $2005=$colour1;
7377 var $2006=$x;
7378 var $2007=$line;
7379 var $2008=(($2007+($2006<<1))|0);
7380 HEAP16[(($2008)>>1)]=$2005;
7381 $bicolour=1;
7382 var $2009=$count;
7383 var $2010=((($2009)+(1))|0);
7384 $count=$2010;
7385 label=299;break;
7386 case 299:
7387 var $2012=$count;
7388 var $2013=((($2012)-(1))|0);
7389 $count=$2013;
7390 var $2014=$x;
7391 var $2015=((($2014)+(1))|0);
7392 $x=$2015;
7393 var $2016=$bicolour;
7394 var $2017=($2016|0)!=0;
7395 if($2017){label=300;break;}else{label=301;break;}
7396 case 300:
7397 var $2019=$colour2;
7398 var $2020=$x;
7399 var $2021=$line;
7400 var $2022=(($2021+($2020<<1))|0);
7401 HEAP16[(($2022)>>1)]=$2019;
7402 $bicolour=0;
7403 label=302;break;
7404 case 301:
7405 var $2024=$colour1;
7406 var $2025=$x;
7407 var $2026=$line;
7408 var $2027=(($2026+($2025<<1))|0);
7409 HEAP16[(($2027)>>1)]=$2024;
7410 $bicolour=1;
7411 var $2028=$count;
7412 var $2029=((($2028)+(1))|0);
7413 $count=$2029;
7414 label=302;break;
7415 case 302:
7416 var $2031=$count;
7417 var $2032=((($2031)-(1))|0);
7418 $count=$2032;
7419 var $2033=$x;
7420 var $2034=((($2033)+(1))|0);
7421 $x=$2034;
7422 var $2035=$bicolour;
7423 var $2036=($2035|0)!=0;
7424 if($2036){label=303;break;}else{label=304;break;}
7425 case 303:
7426 var $2038=$colour2;
7427 var $2039=$x;
7428 var $2040=$line;
7429 var $2041=(($2040+($2039<<1))|0);
7430 HEAP16[(($2041)>>1)]=$2038;
7431 $bicolour=0;
7432 label=305;break;
7433 case 304:
7434 var $2043=$colour1;
7435 var $2044=$x;
7436 var $2045=$line;
7437 var $2046=(($2045+($2044<<1))|0);
7438 HEAP16[(($2046)>>1)]=$2043;
7439 $bicolour=1;
7440 var $2047=$count;
7441 var $2048=((($2047)+(1))|0);
7442 $count=$2048;
7443 label=305;break;
7444 case 305:
7445 var $2050=$count;
7446 var $2051=((($2050)-(1))|0);
7447 $count=$2051;
7448 var $2052=$x;
7449 var $2053=((($2052)+(1))|0);
7450 $x=$2053;
7451 var $2054=$bicolour;
7452 var $2055=($2054|0)!=0;
7453 if($2055){label=306;break;}else{label=307;break;}
7454 case 306:
7455 var $2057=$colour2;
7456 var $2058=$x;
7457 var $2059=$line;
7458 var $2060=(($2059+($2058<<1))|0);
7459 HEAP16[(($2060)>>1)]=$2057;
7460 $bicolour=0;
7461 label=308;break;
7462 case 307:
7463 var $2062=$colour1;
7464 var $2063=$x;
7465 var $2064=$line;
7466 var $2065=(($2064+($2063<<1))|0);
7467 HEAP16[(($2065)>>1)]=$2062;
7468 $bicolour=1;
7469 var $2066=$count;
7470 var $2067=((($2066)+(1))|0);
7471 $count=$2067;
7472 label=308;break;
7473 case 308:
7474 var $2069=$count;
7475 var $2070=((($2069)-(1))|0);
7476 $count=$2070;
7477 var $2071=$x;
7478 var $2072=((($2071)+(1))|0);
7479 $x=$2072;
7480 var $2073=$bicolour;
7481 var $2074=($2073|0)!=0;
7482 if($2074){label=309;break;}else{label=310;break;}
7483 case 309:
7484 var $2076=$colour2;
7485 var $2077=$x;
7486 var $2078=$line;
7487 var $2079=(($2078+($2077<<1))|0);
7488 HEAP16[(($2079)>>1)]=$2076;
7489 $bicolour=0;
7490 label=311;break;
7491 case 310:
7492 var $2081=$colour1;
7493 var $2082=$x;
7494 var $2083=$line;
7495 var $2084=(($2083+($2082<<1))|0);
7496 HEAP16[(($2084)>>1)]=$2081;
7497 $bicolour=1;
7498 var $2085=$count;
7499 var $2086=((($2085)+(1))|0);
7500 $count=$2086;
7501 label=311;break;
7502 case 311:
7503 var $2088=$count;
7504 var $2089=((($2088)-(1))|0);
7505 $count=$2089;
7506 var $2090=$x;
7507 var $2091=((($2090)+(1))|0);
7508 $x=$2091;
7509 label=284;break;
7510 case 312:
7511 label=313;break;
7512 case 313:
7513 var $2094=$count;
7514 var $2095=($2094|0)>0;
7515 if($2095){label=314;break;}else{var $2101=0;label=315;break;}
7516 case 314:
7517 var $2097=$x;
7518 var $2098=$3;
7519 var $2099=($2097|0)<($2098|0);
7520 var $2101=$2099;label=315;break;
7521 case 315:
7522 var $2101;
7523 if($2101){label=316;break;}else{label=320;break;}
7524 case 316:
7525 var $2103=$bicolour;
7526 var $2104=($2103|0)!=0;
7527 if($2104){label=317;break;}else{label=318;break;}
7528 case 317:
7529 var $2106=$colour2;
7530 var $2107=$x;
7531 var $2108=$line;
7532 var $2109=(($2108+($2107<<1))|0);
7533 HEAP16[(($2109)>>1)]=$2106;
7534 $bicolour=0;
7535 label=319;break;
7536 case 318:
7537 var $2111=$colour1;
7538 var $2112=$x;
7539 var $2113=$line;
7540 var $2114=(($2113+($2112<<1))|0);
7541 HEAP16[(($2114)>>1)]=$2111;
7542 $bicolour=1;
7543 var $2115=$count;
7544 var $2116=((($2115)+(1))|0);
7545 $count=$2116;
7546 label=319;break;
7547 case 319:
7548 var $2118=$count;
7549 var $2119=((($2118)-(1))|0);
7550 $count=$2119;
7551 var $2120=$x;
7552 var $2121=((($2120)+(1))|0);
7553 $x=$2121;
7554 label=313;break;
7555 case 320:
7556 label=344;break;
7557 case 321:
7558 label=322;break;
7559 case 322:
7560 var $2125=$count;
7561 var $2126=$2125&-8;
7562 var $2127=($2126|0)!=0;
7563 if($2127){label=323;break;}else{var $2134=0;label=324;break;}
7564 case 323:
7565 var $2129=$x;
7566 var $2130=((($2129)+(8))|0);
7567 var $2131=$3;
7568 var $2132=($2130|0)<($2131|0);
7569 var $2134=$2132;label=324;break;
7570 case 324:
7571 var $2134;
7572 if($2134){label=325;break;}else{label=326;break;}
7573 case 325:
7574 var $2136=$x;
7575 var $2137=$line;
7576 var $2138=(($2137+($2136<<1))|0);
7577 HEAP16[(($2138)>>1)]=-1;
7578 var $2139=$count;
7579 var $2140=((($2139)-(1))|0);
7580 $count=$2140;
7581 var $2141=$x;
7582 var $2142=((($2141)+(1))|0);
7583 $x=$2142;
7584 var $2143=$x;
7585 var $2144=$line;
7586 var $2145=(($2144+($2143<<1))|0);
7587 HEAP16[(($2145)>>1)]=-1;
7588 var $2146=$count;
7589 var $2147=((($2146)-(1))|0);
7590 $count=$2147;
7591 var $2148=$x;
7592 var $2149=((($2148)+(1))|0);
7593 $x=$2149;
7594 var $2150=$x;
7595 var $2151=$line;
7596 var $2152=(($2151+($2150<<1))|0);
7597 HEAP16[(($2152)>>1)]=-1;
7598 var $2153=$count;
7599 var $2154=((($2153)-(1))|0);
7600 $count=$2154;
7601 var $2155=$x;
7602 var $2156=((($2155)+(1))|0);
7603 $x=$2156;
7604 var $2157=$x;
7605 var $2158=$line;
7606 var $2159=(($2158+($2157<<1))|0);
7607 HEAP16[(($2159)>>1)]=-1;
7608 var $2160=$count;
7609 var $2161=((($2160)-(1))|0);
7610 $count=$2161;
7611 var $2162=$x;
7612 var $2163=((($2162)+(1))|0);
7613 $x=$2163;
7614 var $2164=$x;
7615 var $2165=$line;
7616 var $2166=(($2165+($2164<<1))|0);
7617 HEAP16[(($2166)>>1)]=-1;
7618 var $2167=$count;
7619 var $2168=((($2167)-(1))|0);
7620 $count=$2168;
7621 var $2169=$x;
7622 var $2170=((($2169)+(1))|0);
7623 $x=$2170;
7624 var $2171=$x;
7625 var $2172=$line;
7626 var $2173=(($2172+($2171<<1))|0);
7627 HEAP16[(($2173)>>1)]=-1;
7628 var $2174=$count;
7629 var $2175=((($2174)-(1))|0);
7630 $count=$2175;
7631 var $2176=$x;
7632 var $2177=((($2176)+(1))|0);
7633 $x=$2177;
7634 var $2178=$x;
7635 var $2179=$line;
7636 var $2180=(($2179+($2178<<1))|0);
7637 HEAP16[(($2180)>>1)]=-1;
7638 var $2181=$count;
7639 var $2182=((($2181)-(1))|0);
7640 $count=$2182;
7641 var $2183=$x;
7642 var $2184=((($2183)+(1))|0);
7643 $x=$2184;
7644 var $2185=$x;
7645 var $2186=$line;
7646 var $2187=(($2186+($2185<<1))|0);
7647 HEAP16[(($2187)>>1)]=-1;
7648 var $2188=$count;
7649 var $2189=((($2188)-(1))|0);
7650 $count=$2189;
7651 var $2190=$x;
7652 var $2191=((($2190)+(1))|0);
7653 $x=$2191;
7654 label=322;break;
7655 case 326:
7656 label=327;break;
7657 case 327:
7658 var $2194=$count;
7659 var $2195=($2194|0)>0;
7660 if($2195){label=328;break;}else{var $2201=0;label=329;break;}
7661 case 328:
7662 var $2197=$x;
7663 var $2198=$3;
7664 var $2199=($2197|0)<($2198|0);
7665 var $2201=$2199;label=329;break;
7666 case 329:
7667 var $2201;
7668 if($2201){label=330;break;}else{label=331;break;}
7669 case 330:
7670 var $2203=$x;
7671 var $2204=$line;
7672 var $2205=(($2204+($2203<<1))|0);
7673 HEAP16[(($2205)>>1)]=-1;
7674 var $2206=$count;
7675 var $2207=((($2206)-(1))|0);
7676 $count=$2207;
7677 var $2208=$x;
7678 var $2209=((($2208)+(1))|0);
7679 $x=$2209;
7680 label=327;break;
7681 case 331:
7682 label=344;break;
7683 case 332:
7684 label=333;break;
7685 case 333:
7686 var $2213=$count;
7687 var $2214=$2213&-8;
7688 var $2215=($2214|0)!=0;
7689 if($2215){label=334;break;}else{var $2222=0;label=335;break;}
7690 case 334:
7691 var $2217=$x;
7692 var $2218=((($2217)+(8))|0);
7693 var $2219=$3;
7694 var $2220=($2218|0)<($2219|0);
7695 var $2222=$2220;label=335;break;
7696 case 335:
7697 var $2222;
7698 if($2222){label=336;break;}else{label=337;break;}
7699 case 336:
7700 var $2224=$x;
7701 var $2225=$line;
7702 var $2226=(($2225+($2224<<1))|0);
7703 HEAP16[(($2226)>>1)]=0;
7704 var $2227=$count;
7705 var $2228=((($2227)-(1))|0);
7706 $count=$2228;
7707 var $2229=$x;
7708 var $2230=((($2229)+(1))|0);
7709 $x=$2230;
7710 var $2231=$x;
7711 var $2232=$line;
7712 var $2233=(($2232+($2231<<1))|0);
7713 HEAP16[(($2233)>>1)]=0;
7714 var $2234=$count;
7715 var $2235=((($2234)-(1))|0);
7716 $count=$2235;
7717 var $2236=$x;
7718 var $2237=((($2236)+(1))|0);
7719 $x=$2237;
7720 var $2238=$x;
7721 var $2239=$line;
7722 var $2240=(($2239+($2238<<1))|0);
7723 HEAP16[(($2240)>>1)]=0;
7724 var $2241=$count;
7725 var $2242=((($2241)-(1))|0);
7726 $count=$2242;
7727 var $2243=$x;
7728 var $2244=((($2243)+(1))|0);
7729 $x=$2244;
7730 var $2245=$x;
7731 var $2246=$line;
7732 var $2247=(($2246+($2245<<1))|0);
7733 HEAP16[(($2247)>>1)]=0;
7734 var $2248=$count;
7735 var $2249=((($2248)-(1))|0);
7736 $count=$2249;
7737 var $2250=$x;
7738 var $2251=((($2250)+(1))|0);
7739 $x=$2251;
7740 var $2252=$x;
7741 var $2253=$line;
7742 var $2254=(($2253+($2252<<1))|0);
7743 HEAP16[(($2254)>>1)]=0;
7744 var $2255=$count;
7745 var $2256=((($2255)-(1))|0);
7746 $count=$2256;
7747 var $2257=$x;
7748 var $2258=((($2257)+(1))|0);
7749 $x=$2258;
7750 var $2259=$x;
7751 var $2260=$line;
7752 var $2261=(($2260+($2259<<1))|0);
7753 HEAP16[(($2261)>>1)]=0;
7754 var $2262=$count;
7755 var $2263=((($2262)-(1))|0);
7756 $count=$2263;
7757 var $2264=$x;
7758 var $2265=((($2264)+(1))|0);
7759 $x=$2265;
7760 var $2266=$x;
7761 var $2267=$line;
7762 var $2268=(($2267+($2266<<1))|0);
7763 HEAP16[(($2268)>>1)]=0;
7764 var $2269=$count;
7765 var $2270=((($2269)-(1))|0);
7766 $count=$2270;
7767 var $2271=$x;
7768 var $2272=((($2271)+(1))|0);
7769 $x=$2272;
7770 var $2273=$x;
7771 var $2274=$line;
7772 var $2275=(($2274+($2273<<1))|0);
7773 HEAP16[(($2275)>>1)]=0;
7774 var $2276=$count;
7775 var $2277=((($2276)-(1))|0);
7776 $count=$2277;
7777 var $2278=$x;
7778 var $2279=((($2278)+(1))|0);
7779 $x=$2279;
7780 label=333;break;
7781 case 337:
7782 label=338;break;
7783 case 338:
7784 var $2282=$count;
7785 var $2283=($2282|0)>0;
7786 if($2283){label=339;break;}else{var $2289=0;label=340;break;}
7787 case 339:
7788 var $2285=$x;
7789 var $2286=$3;
7790 var $2287=($2285|0)<($2286|0);
7791 var $2289=$2287;label=340;break;
7792 case 340:
7793 var $2289;
7794 if($2289){label=341;break;}else{label=342;break;}
7795 case 341:
7796 var $2291=$x;
7797 var $2292=$line;
7798 var $2293=(($2292+($2291<<1))|0);
7799 HEAP16[(($2293)>>1)]=0;
7800 var $2294=$count;
7801 var $2295=((($2294)-(1))|0);
7802 $count=$2295;
7803 var $2296=$x;
7804 var $2297=((($2296)+(1))|0);
7805 $x=$2297;
7806 label=338;break;
7807 case 342:
7808 label=344;break;
7809 case 343:
7810 $1=0;
7811 label=347;break;
7812 case 344:
7813 label=34;break;
7814 case 345:
7815 label=2;break;
7816 case 346:
7817 $1=1;
7818 label=347;break;
7819 case 347:
7820 var $2304=$1;
7821 STACKTOP=sp;return $2304;
7822 default: assert(0, "bad label: " + label);
7823 }
7824
7825}
7826
7827
7828function _bitmap_decompress_16($output,$output_width,$output_height,$input_width,$input_height,$input,$size){
7829 var label=0;
7830 var sp=STACKTOP; (assert((STACKTOP|0) < (STACK_MAX|0))|0);
7831 label = 1;
7832 while(1)switch(label){
7833 case 1:
7834 var $1;
7835 var $2;
7836 var $3;
7837 var $4;
7838 var $5;
7839 var $6;
7840 var $7;
7841 var $temp;
7842 var $rv;
7843 var $y;
7844 var $x;
7845 var $a;
7846 var $r;
7847 var $g;
7848 var $b;
7849 $1=$output;
7850 $2=$output_width;
7851 $3=$output_height;
7852 $4=$input_width;
7853 $5=$input_height;
7854 $6=$input;
7855 $7=$size;
7856 var $8=$4;
7857 var $9=$5;
7858 var $10=(Math_imul($8,$9)|0);
7859 var $11=($10<<1);
7860 var $12=_malloc($11);
7861 $temp=$12;
7862 var $13=$temp;
7863 var $14=$4;
7864 var $15=$5;
7865 var $16=$6;
7866 var $17=$7;
7867 var $18=_bitmap_decompress2($13,$14,$15,$16,$17);
7868 $rv=$18;
7869 $y=0;
7870 label=2;break;
7871 case 2:
7872 var $20=$y;
7873 var $21=$3;
7874 var $22=($20|0)<($21|0);
7875 if($22){label=3;break;}else{label=9;break;}
7876 case 3:
7877 $x=0;
7878 label=4;break;
7879 case 4:
7880 var $25=$x;
7881 var $26=$2;
7882 var $27=($25|0)<($26|0);
7883 if($27){label=5;break;}else{label=7;break;}
7884 case 5:
7885 var $29=$y;
7886 var $30=$4;
7887 var $31=(Math_imul($29,$30)|0);
7888 var $32=$x;
7889 var $33=((($31)+($32))|0);
7890 var $34=$temp;
7891 var $35=$34;
7892 var $36=(($35+($33<<1))|0);
7893 var $37=HEAP16[(($36)>>1)];
7894 $a=$37;
7895 var $38=$a;
7896 var $39=($38&65535);
7897 var $40=$39&63488;
7898 var $41=$40>>11;
7899 var $42=(($41)&255);
7900 $r=$42;
7901 var $43=$a;
7902 var $44=($43&65535);
7903 var $45=$44&2016;
7904 var $46=$45>>5;
7905 var $47=(($46)&255);
7906 $g=$47;
7907 var $48=$a;
7908 var $49=($48&65535);
7909 var $50=$49&31;
7910 var $51=(($50)&255);
7911 $b=$51;
7912 var $52=$r;
7913 var $53=($52&255);
7914 var $54=((($53)*(255))&-1);
7915 var $55=(((($54|0))/(31))&-1);
7916 var $56=(($55)&255);
7917 $r=$56;
7918 var $57=$g;
7919 var $58=($57&255);
7920 var $59=((($58)*(255))&-1);
7921 var $60=(((($59|0))/(63))&-1);
7922 var $61=(($60)&255);
7923 $g=$61;
7924 var $62=$b;
7925 var $63=($62&255);
7926 var $64=((($63)*(255))&-1);
7927 var $65=(((($64|0))/(31))&-1);
7928 var $66=(($65)&255);
7929 $b=$66;
7930 var $67=$b;
7931 var $68=($67&255);
7932 var $69=$68<<16;
7933 var $70=-16777216|$69;
7934 var $71=$g;
7935 var $72=($71&255);
7936 var $73=$72<<8;
7937 var $74=$70|$73;
7938 var $75=$r;
7939 var $76=($75&255);
7940 var $77=$74|$76;
7941 var $78=$y;
7942 var $79=$2;
7943 var $80=(Math_imul($78,$79)|0);
7944 var $81=$x;
7945 var $82=((($80)+($81))|0);
7946 var $83=$1;
7947 var $84=$83;
7948 var $85=(($84+($82<<2))|0);
7949 HEAP32[(($85)>>2)]=$77;
7950 label=6;break;
7951 case 6:
7952 var $87=$x;
7953 var $88=((($87)+(1))|0);
7954 $x=$88;
7955 label=4;break;
7956 case 7:
7957 label=8;break;
7958 case 8:
7959 var $91=$y;
7960 var $92=((($91)+(1))|0);
7961 $y=$92;
7962 label=2;break;
7963 case 9:
7964 var $94=$temp;
7965 _free($94);
7966 var $95=$rv;
7967 STACKTOP=sp;return $95;
7968 default: assert(0, "bad label: " + label);
7969 }
7970
7971}
7972Module["_bitmap_decompress_16"] = _bitmap_decompress_16;
7973
7974function _bitmap_decompress_24($output,$output_width,$output_height,$input_width,$input_height,$input,$size){
7975 var label=0;
7976 var sp=STACKTOP; (assert((STACKTOP|0) < (STACK_MAX|0))|0);
7977 label = 1;
7978 while(1)switch(label){
7979 case 1:
7980 var $1;
7981 var $2;
7982 var $3;
7983 var $4;
7984 var $5;
7985 var $6;
7986 var $7;
7987 var $temp;
7988 var $rv;
7989 var $y;
7990 var $x;
7991 var $r;
7992 var $g;
7993 var $b;
7994 $1=$output;
7995 $2=$output_width;
7996 $3=$output_height;
7997 $4=$input_width;
7998 $5=$input_height;
7999 $6=$input;
8000 $7=$size;
8001 var $8=$4;
8002 var $9=$5;
8003 var $10=(Math_imul($8,$9)|0);
8004 var $11=((($10)*(3))&-1);
8005 var $12=_malloc($11);
8006 $temp=$12;
8007 var $13=$temp;
8008 var $14=$4;
8009 var $15=$5;
8010 var $16=$6;
8011 var $17=$7;
8012 var $18=_bitmap_decompress3($13,$14,$15,$16,$17);
8013 $rv=$18;
8014 $y=0;
8015 label=2;break;
8016 case 2:
8017 var $20=$y;
8018 var $21=$3;
8019 var $22=($20|0)<($21|0);
8020 if($22){label=3;break;}else{label=9;break;}
8021 case 3:
8022 $x=0;
8023 label=4;break;
8024 case 4:
8025 var $25=$x;
8026 var $26=$2;
8027 var $27=($25|0)<($26|0);
8028 if($27){label=5;break;}else{label=7;break;}
8029 case 5:
8030 var $29=$y;
8031 var $30=$4;
8032 var $31=(Math_imul($29,$30)|0);
8033 var $32=$x;
8034 var $33=((($31)+($32))|0);
8035 var $34=((($33)*(3))&-1);
8036 var $35=$temp;
8037 var $36=(($35+$34)|0);
8038 var $37=HEAP8[($36)];
8039 $r=$37;
8040 var $38=$y;
8041 var $39=$4;
8042 var $40=(Math_imul($38,$39)|0);
8043 var $41=$x;
8044 var $42=((($40)+($41))|0);
8045 var $43=((($42)*(3))&-1);
8046 var $44=((($43)+(1))|0);
8047 var $45=$temp;
8048 var $46=(($45+$44)|0);
8049 var $47=HEAP8[($46)];
8050 $g=$47;
8051 var $48=$y;
8052 var $49=$4;
8053 var $50=(Math_imul($48,$49)|0);
8054 var $51=$x;
8055 var $52=((($50)+($51))|0);
8056 var $53=((($52)*(3))&-1);
8057 var $54=((($53)+(2))|0);
8058 var $55=$temp;
8059 var $56=(($55+$54)|0);
8060 var $57=HEAP8[($56)];
8061 $b=$57;
8062 var $58=$b;
8063 var $59=($58&255);
8064 var $60=$59<<16;
8065 var $61=-16777216|$60;
8066 var $62=$g;
8067 var $63=($62&255);
8068 var $64=$63<<8;
8069 var $65=$61|$64;
8070 var $66=$r;
8071 var $67=($66&255);
8072 var $68=$65|$67;
8073 var $69=$y;
8074 var $70=$2;
8075 var $71=(Math_imul($69,$70)|0);
8076 var $72=$x;
8077 var $73=((($71)+($72))|0);
8078 var $74=$1;
8079 var $75=$74;
8080 var $76=(($75+($73<<2))|0);
8081 HEAP32[(($76)>>2)]=$68;
8082 label=6;break;
8083 case 6:
8084 var $78=$x;
8085 var $79=((($78)+(1))|0);
8086 $x=$79;
8087 label=4;break;
8088 case 7:
8089 label=8;break;
8090 case 8:
8091 var $82=$y;
8092 var $83=((($82)+(1))|0);
8093 $y=$83;
8094 label=2;break;
8095 case 9:
8096 var $85=$temp;
8097 _free($85);
8098 var $86=$rv;
8099 STACKTOP=sp;return $86;
8100 default: assert(0, "bad label: " + label);
8101 }
8102
8103}
8104Module["_bitmap_decompress_24"] = _bitmap_decompress_24;
8105
8106function _bitmap_decompress3($output,$width,$height,$input,$size){
8107 var label=0;
8108 var sp=STACKTOP;STACKTOP=(STACKTOP+24)|0; (assert((STACKTOP|0) < (STACK_MAX|0))|0);
8109 label = 1;
8110 while(1)switch(label){
8111 case 1:
8112 var $1;
8113 var $2;
8114 var $3;
8115 var $4;
8116 var $5;
8117 var $6;
8118 var $end;
8119 var $prevline;
8120 var $line;
8121 var $opcode;
8122 var $count;
8123 var $offset;
8124 var $isfillormix;
8125 var $x;
8126 var $lastopcode;
8127 var $insertmix;
8128 var $bicolour;
8129 var $code;
8130 var $colour1=sp;
8131 var $colour2=(sp)+(8);
8132 var $mixmask;
8133 var $mask;
8134 var $mix=(sp)+(16);
8135 var $fom_mask;
8136 $2=$output;
8137 $3=$width;
8138 $4=$height;
8139 $5=$input;
8140 $6=$size;
8141 var $7=$5;
8142 var $8=$6;
8143 var $9=(($7+$8)|0);
8144 $end=$9;
8145 $prevline=0;
8146 $line=0;
8147 var $10=$3;
8148 $x=$10;
8149 $lastopcode=-1;
8150 $insertmix=0;
8151 $bicolour=0;
8152 var $11=$colour1;
8153 HEAP8[($11)]=0; HEAP8[((($11)+(1))|0)]=0; HEAP8[((($11)+(2))|0)]=0;
8154 var $12=$colour2;
8155 HEAP8[($12)]=0; HEAP8[((($12)+(1))|0)]=0; HEAP8[((($12)+(2))|0)]=0;
8156 $mask=0;
8157 var $13=$mix;
8158 assert(3 % 1 === 0);HEAP8[($13)]=HEAP8[(8)];HEAP8[((($13)+(1))|0)]=HEAP8[(9)];HEAP8[((($13)+(2))|0)]=HEAP8[(10)];
8159 $fom_mask=0;
8160 label=2;break;
8161 case 2:
8162 var $15=$5;
8163 var $16=$end;
8164 var $17=($15>>>0)<($16>>>0);
8165 if($17){label=3;break;}else{label=346;break;}
8166 case 3:
8167 $fom_mask=0;
8168 var $19=$5;
8169 var $20=(($19+1)|0);
8170 $5=$20;
8171 var $21=HEAP8[($19)];
8172 $code=$21;
8173 var $22=$code;
8174 var $23=($22&255);
8175 var $24=$23>>4;
8176 $opcode=$24;
8177 var $25=$opcode;
8178 if(($25|0)==12|($25|0)==13|($25|0)==14){ label=4;break;}else if(($25|0)==15){ label=5;break;}else{label=9;break;}
8179 case 4:
8180 var $27=$opcode;
8181 var $28=((($27)-(6))|0);
8182 $opcode=$28;
8183 var $29=$code;
8184 var $30=($29&255);
8185 var $31=$30&15;
8186 $count=$31;
8187 $offset=16;
8188 label=10;break;
8189 case 5:
8190 var $33=$code;
8191 var $34=($33&255);
8192 var $35=$34&15;
8193 $opcode=$35;
8194 var $36=$opcode;
8195 var $37=($36|0)<9;
8196 if($37){label=6;break;}else{label=7;break;}
8197 case 6:
8198 var $39=$5;
8199 var $40=(($39+1)|0);
8200 $5=$40;
8201 var $41=HEAP8[($39)];
8202 var $42=($41&255);
8203 $count=$42;
8204 var $43=$5;
8205 var $44=(($43+1)|0);
8206 $5=$44;
8207 var $45=HEAP8[($43)];
8208 var $46=($45&255);
8209 var $47=$46<<8;
8210 var $48=$count;
8211 var $49=$48|$47;
8212 $count=$49;
8213 label=8;break;
8214 case 7:
8215 var $51=$opcode;
8216 var $52=($51|0)<11;
8217 var $53=($52?8:1);
8218 $count=$53;
8219 label=8;break;
8220 case 8:
8221 $offset=0;
8222 label=10;break;
8223 case 9:
8224 var $56=$opcode;
8225 var $57=$56>>1;
8226 $opcode=$57;
8227 var $58=$code;
8228 var $59=($58&255);
8229 var $60=$59&31;
8230 $count=$60;
8231 $offset=32;
8232 label=10;break;
8233 case 10:
8234 var $62=$offset;
8235 var $63=($62|0)!=0;
8236 if($63){label=11;break;}else{label=22;break;}
8237 case 11:
8238 var $65=$opcode;
8239 var $66=($65|0)==2;
8240 if($66){var $71=1;label=13;break;}else{label=12;break;}
8241 case 12:
8242 var $68=$opcode;
8243 var $69=($68|0)==7;
8244 var $71=$69;label=13;break;
8245 case 13:
8246 var $71;
8247 var $72=($71&1);
8248 $isfillormix=$72;
8249 var $73=$count;
8250 var $74=($73|0)==0;
8251 if($74){label=14;break;}else{label=18;break;}
8252 case 14:
8253 var $76=$isfillormix;
8254 var $77=($76|0)!=0;
8255 if($77){label=15;break;}else{label=16;break;}
8256 case 15:
8257 var $79=$5;
8258 var $80=(($79+1)|0);
8259 $5=$80;
8260 var $81=HEAP8[($79)];
8261 var $82=($81&255);
8262 var $83=((($82)+(1))|0);
8263 $count=$83;
8264 label=17;break;
8265 case 16:
8266 var $85=$5;
8267 var $86=(($85+1)|0);
8268 $5=$86;
8269 var $87=HEAP8[($85)];
8270 var $88=($87&255);
8271 var $89=$offset;
8272 var $90=((($88)+($89))|0);
8273 $count=$90;
8274 label=17;break;
8275 case 17:
8276 label=21;break;
8277 case 18:
8278 var $93=$isfillormix;
8279 var $94=($93|0)!=0;
8280 if($94){label=19;break;}else{label=20;break;}
8281 case 19:
8282 var $96=$count;
8283 var $97=$96<<3;
8284 $count=$97;
8285 label=20;break;
8286 case 20:
8287 label=21;break;
8288 case 21:
8289 label=22;break;
8290 case 22:
8291 var $101=$opcode;
8292 switch(($101|0)){case 0:{ label=23;break;}case 8:{ label=28;break;}case 3:{ label=29;break;}case 6:case 7:{ label=30;break;}case 9:{ label=31;break;}case 10:{ label=32;break;}default:{label=33;break;}}break;
8293 case 23:
8294 var $103=$lastopcode;
8295 var $104=$opcode;
8296 var $105=($103|0)==($104|0);
8297 if($105){label=24;break;}else{label=27;break;}
8298 case 24:
8299 var $107=$x;
8300 var $108=$3;
8301 var $109=($107|0)==($108|0);
8302 if($109){label=25;break;}else{label=26;break;}
8303 case 25:
8304 var $111=$prevline;
8305 var $112=($111|0)==0;
8306 if($112){label=27;break;}else{label=26;break;}
8307 case 26:
8308 $insertmix=1;
8309 label=27;break;
8310 case 27:
8311 label=33;break;
8312 case 28:
8313 var $116=$5;
8314 var $117=(($116+1)|0);
8315 $5=$117;
8316 var $118=HEAP8[($116)];
8317 var $119=(($colour1)|0);
8318 HEAP8[($119)]=$118;
8319 var $120=$5;
8320 var $121=(($120+1)|0);
8321 $5=$121;
8322 var $122=HEAP8[($120)];
8323 var $123=(($colour1+1)|0);
8324 HEAP8[($123)]=$122;
8325 var $124=$5;
8326 var $125=(($124+1)|0);
8327 $5=$125;
8328 var $126=HEAP8[($124)];
8329 var $127=(($colour1+2)|0);
8330 HEAP8[($127)]=$126;
8331 label=29;break;
8332 case 29:
8333 var $129=$5;
8334 var $130=(($129+1)|0);
8335 $5=$130;
8336 var $131=HEAP8[($129)];
8337 var $132=(($colour2)|0);
8338 HEAP8[($132)]=$131;
8339 var $133=$5;
8340 var $134=(($133+1)|0);
8341 $5=$134;
8342 var $135=HEAP8[($133)];
8343 var $136=(($colour2+1)|0);
8344 HEAP8[($136)]=$135;
8345 var $137=$5;
8346 var $138=(($137+1)|0);
8347 $5=$138;
8348 var $139=HEAP8[($137)];
8349 var $140=(($colour2+2)|0);
8350 HEAP8[($140)]=$139;
8351 label=33;break;
8352 case 30:
8353 var $142=$5;
8354 var $143=(($142+1)|0);
8355 $5=$143;
8356 var $144=HEAP8[($142)];
8357 var $145=(($mix)|0);
8358 HEAP8[($145)]=$144;
8359 var $146=$5;
8360 var $147=(($146+1)|0);
8361 $5=$147;
8362 var $148=HEAP8[($146)];
8363 var $149=(($mix+1)|0);
8364 HEAP8[($149)]=$148;
8365 var $150=$5;
8366 var $151=(($150+1)|0);
8367 $5=$151;
8368 var $152=HEAP8[($150)];
8369 var $153=(($mix+2)|0);
8370 HEAP8[($153)]=$152;
8371 var $154=$opcode;
8372 var $155=((($154)-(5))|0);
8373 $opcode=$155;
8374 label=33;break;
8375 case 31:
8376 $mask=3;
8377 $opcode=2;
8378 $fom_mask=3;
8379 label=33;break;
8380 case 32:
8381 $mask=5;
8382 $opcode=2;
8383 $fom_mask=5;
8384 label=33;break;
8385 case 33:
8386 var $159=$opcode;
8387 $lastopcode=$159;
8388 $mixmask=0;
8389 label=34;break;
8390 case 34:
8391 var $161=$count;
8392 var $162=($161|0)>0;
8393 if($162){label=35;break;}else{label=345;break;}
8394 case 35:
8395 var $164=$x;
8396 var $165=$3;
8397 var $166=($164|0)>=($165|0);
8398 if($166){label=36;break;}else{label=39;break;}
8399 case 36:
8400 var $168=$4;
8401 var $169=($168|0)<=0;
8402 if($169){label=37;break;}else{label=38;break;}
8403 case 37:
8404 $1=0;
8405 label=347;break;
8406 case 38:
8407 $x=0;
8408 var $172=$4;
8409 var $173=((($172)-(1))|0);
8410 $4=$173;
8411 var $174=$line;
8412 $prevline=$174;
8413 var $175=$2;
8414 var $176=$4;
8415 var $177=$3;
8416 var $178=((($177)*(3))&-1);
8417 var $179=(Math_imul($176,$178)|0);
8418 var $180=(($175+$179)|0);
8419 $line=$180;
8420 label=39;break;
8421 case 39:
8422 var $182=$opcode;
8423 switch(($182|0)){case 3:{ label=261;break;}case 4:{ label=272;break;}case 8:{ label=283;break;}case 13:{ label=321;break;}case 14:{ label=332;break;}case 0:{ label=40;break;}case 1:{ label=69;break;}case 2:{ label=93;break;}default:{label=343;break;}}break;
8424 case 40:
8425 var $184=$insertmix;
8426 var $185=($184|0)!=0;
8427 if($185){label=41;break;}else{label=45;break;}
8428 case 41:
8429 var $187=$prevline;
8430 var $188=($187|0)==0;
8431 if($188){label=42;break;}else{label=43;break;}
8432 case 42:
8433 var $190=(($mix)|0);
8434 var $191=HEAP8[($190)];
8435 var $192=$x;
8436 var $193=((($192)*(3))&-1);
8437 var $194=$line;
8438 var $195=(($194+$193)|0);
8439 HEAP8[($195)]=$191;
8440 var $196=(($mix+1)|0);
8441 var $197=HEAP8[($196)];
8442 var $198=$x;
8443 var $199=((($198)*(3))&-1);
8444 var $200=((($199)+(1))|0);
8445 var $201=$line;
8446 var $202=(($201+$200)|0);
8447 HEAP8[($202)]=$197;
8448 var $203=(($mix+2)|0);
8449 var $204=HEAP8[($203)];
8450 var $205=$x;
8451 var $206=((($205)*(3))&-1);
8452 var $207=((($206)+(2))|0);
8453 var $208=$line;
8454 var $209=(($208+$207)|0);
8455 HEAP8[($209)]=$204;
8456 label=44;break;
8457 case 43:
8458 var $211=$x;
8459 var $212=((($211)*(3))&-1);
8460 var $213=$prevline;
8461 var $214=(($213+$212)|0);
8462 var $215=HEAP8[($214)];
8463 var $216=($215&255);
8464 var $217=(($mix)|0);
8465 var $218=HEAP8[($217)];
8466 var $219=($218&255);
8467 var $220=$216^$219;
8468 var $221=(($220)&255);
8469 var $222=$x;
8470 var $223=((($222)*(3))&-1);
8471 var $224=$line;
8472 var $225=(($224+$223)|0);
8473 HEAP8[($225)]=$221;
8474 var $226=$x;
8475 var $227=((($226)*(3))&-1);
8476 var $228=((($227)+(1))|0);
8477 var $229=$prevline;
8478 var $230=(($229+$228)|0);
8479 var $231=HEAP8[($230)];
8480 var $232=($231&255);
8481 var $233=(($mix+1)|0);
8482 var $234=HEAP8[($233)];
8483 var $235=($234&255);
8484 var $236=$232^$235;
8485 var $237=(($236)&255);
8486 var $238=$x;
8487 var $239=((($238)*(3))&-1);
8488 var $240=((($239)+(1))|0);
8489 var $241=$line;
8490 var $242=(($241+$240)|0);
8491 HEAP8[($242)]=$237;
8492 var $243=$x;
8493 var $244=((($243)*(3))&-1);
8494 var $245=((($244)+(2))|0);
8495 var $246=$prevline;
8496 var $247=(($246+$245)|0);
8497 var $248=HEAP8[($247)];
8498 var $249=($248&255);
8499 var $250=(($mix+2)|0);
8500 var $251=HEAP8[($250)];
8501 var $252=($251&255);
8502 var $253=$249^$252;
8503 var $254=(($253)&255);
8504 var $255=$x;
8505 var $256=((($255)*(3))&-1);
8506 var $257=((($256)+(2))|0);
8507 var $258=$line;
8508 var $259=(($258+$257)|0);
8509 HEAP8[($259)]=$254;
8510 label=44;break;
8511 case 44:
8512 $insertmix=0;
8513 var $261=$count;
8514 var $262=((($261)-(1))|0);
8515 $count=$262;
8516 var $263=$x;
8517 var $264=((($263)+(1))|0);
8518 $x=$264;
8519 label=45;break;
8520 case 45:
8521 var $266=$prevline;
8522 var $267=($266|0)==0;
8523 if($267){label=46;break;}else{label=57;break;}
8524 case 46:
8525 label=47;break;
8526 case 47:
8527 var $270=$count;
8528 var $271=$270&-8;
8529 var $272=($271|0)!=0;
8530 if($272){label=48;break;}else{var $279=0;label=49;break;}
8531 case 48:
8532 var $274=$x;
8533 var $275=((($274)+(8))|0);
8534 var $276=$3;
8535 var $277=($275|0)<($276|0);
8536 var $279=$277;label=49;break;
8537 case 49:
8538 var $279;
8539 if($279){label=50;break;}else{label=51;break;}
8540 case 50:
8541 var $281=$x;
8542 var $282=((($281)*(3))&-1);
8543 var $283=$line;
8544 var $284=(($283+$282)|0);
8545 HEAP8[($284)]=0;
8546 var $285=$x;
8547 var $286=((($285)*(3))&-1);
8548 var $287=((($286)+(1))|0);
8549 var $288=$line;
8550 var $289=(($288+$287)|0);
8551 HEAP8[($289)]=0;
8552 var $290=$x;
8553 var $291=((($290)*(3))&-1);
8554 var $292=((($291)+(2))|0);
8555 var $293=$line;
8556 var $294=(($293+$292)|0);
8557 HEAP8[($294)]=0;
8558 var $295=$count;
8559 var $296=((($295)-(1))|0);
8560 $count=$296;
8561 var $297=$x;
8562 var $298=((($297)+(1))|0);
8563 $x=$298;
8564 var $299=$x;
8565 var $300=((($299)*(3))&-1);
8566 var $301=$line;
8567 var $302=(($301+$300)|0);
8568 HEAP8[($302)]=0;
8569 var $303=$x;
8570 var $304=((($303)*(3))&-1);
8571 var $305=((($304)+(1))|0);
8572 var $306=$line;
8573 var $307=(($306+$305)|0);
8574 HEAP8[($307)]=0;
8575 var $308=$x;
8576 var $309=((($308)*(3))&-1);
8577 var $310=((($309)+(2))|0);
8578 var $311=$line;
8579 var $312=(($311+$310)|0);
8580 HEAP8[($312)]=0;
8581 var $313=$count;
8582 var $314=((($313)-(1))|0);
8583 $count=$314;
8584 var $315=$x;
8585 var $316=((($315)+(1))|0);
8586 $x=$316;
8587 var $317=$x;
8588 var $318=((($317)*(3))&-1);
8589 var $319=$line;
8590 var $320=(($319+$318)|0);
8591 HEAP8[($320)]=0;
8592 var $321=$x;
8593 var $322=((($321)*(3))&-1);
8594 var $323=((($322)+(1))|0);
8595 var $324=$line;
8596 var $325=(($324+$323)|0);
8597 HEAP8[($325)]=0;
8598 var $326=$x;
8599 var $327=((($326)*(3))&-1);
8600 var $328=((($327)+(2))|0);
8601 var $329=$line;
8602 var $330=(($329+$328)|0);
8603 HEAP8[($330)]=0;
8604 var $331=$count;
8605 var $332=((($331)-(1))|0);
8606 $count=$332;
8607 var $333=$x;
8608 var $334=((($333)+(1))|0);
8609 $x=$334;
8610 var $335=$x;
8611 var $336=((($335)*(3))&-1);
8612 var $337=$line;
8613 var $338=(($337+$336)|0);
8614 HEAP8[($338)]=0;
8615 var $339=$x;
8616 var $340=((($339)*(3))&-1);
8617 var $341=((($340)+(1))|0);
8618 var $342=$line;
8619 var $343=(($342+$341)|0);
8620 HEAP8[($343)]=0;
8621 var $344=$x;
8622 var $345=((($344)*(3))&-1);
8623 var $346=((($345)+(2))|0);
8624 var $347=$line;
8625 var $348=(($347+$346)|0);
8626 HEAP8[($348)]=0;
8627 var $349=$count;
8628 var $350=((($349)-(1))|0);
8629 $count=$350;
8630 var $351=$x;
8631 var $352=((($351)+(1))|0);
8632 $x=$352;
8633 var $353=$x;
8634 var $354=((($353)*(3))&-1);
8635 var $355=$line;
8636 var $356=(($355+$354)|0);
8637 HEAP8[($356)]=0;
8638 var $357=$x;
8639 var $358=((($357)*(3))&-1);
8640 var $359=((($358)+(1))|0);
8641 var $360=$line;
8642 var $361=(($360+$359)|0);
8643 HEAP8[($361)]=0;
8644 var $362=$x;
8645 var $363=((($362)*(3))&-1);
8646 var $364=((($363)+(2))|0);
8647 var $365=$line;
8648 var $366=(($365+$364)|0);
8649 HEAP8[($366)]=0;
8650 var $367=$count;
8651 var $368=((($367)-(1))|0);
8652 $count=$368;
8653 var $369=$x;
8654 var $370=((($369)+(1))|0);
8655 $x=$370;
8656 var $371=$x;
8657 var $372=((($371)*(3))&-1);
8658 var $373=$line;
8659 var $374=(($373+$372)|0);
8660 HEAP8[($374)]=0;
8661 var $375=$x;
8662 var $376=((($375)*(3))&-1);
8663 var $377=((($376)+(1))|0);
8664 var $378=$line;
8665 var $379=(($378+$377)|0);
8666 HEAP8[($379)]=0;
8667 var $380=$x;
8668 var $381=((($380)*(3))&-1);
8669 var $382=((($381)+(2))|0);
8670 var $383=$line;
8671 var $384=(($383+$382)|0);
8672 HEAP8[($384)]=0;
8673 var $385=$count;
8674 var $386=((($385)-(1))|0);
8675 $count=$386;
8676 var $387=$x;
8677 var $388=((($387)+(1))|0);
8678 $x=$388;
8679 var $389=$x;
8680 var $390=((($389)*(3))&-1);
8681 var $391=$line;
8682 var $392=(($391+$390)|0);
8683 HEAP8[($392)]=0;
8684 var $393=$x;
8685 var $394=((($393)*(3))&-1);
8686 var $395=((($394)+(1))|0);
8687 var $396=$line;
8688 var $397=(($396+$395)|0);
8689 HEAP8[($397)]=0;
8690 var $398=$x;
8691 var $399=((($398)*(3))&-1);
8692 var $400=((($399)+(2))|0);
8693 var $401=$line;
8694 var $402=(($401+$400)|0);
8695 HEAP8[($402)]=0;
8696 var $403=$count;
8697 var $404=((($403)-(1))|0);
8698 $count=$404;
8699 var $405=$x;
8700 var $406=((($405)+(1))|0);
8701 $x=$406;
8702 var $407=$x;
8703 var $408=((($407)*(3))&-1);
8704 var $409=$line;
8705 var $410=(($409+$408)|0);
8706 HEAP8[($410)]=0;
8707 var $411=$x;
8708 var $412=((($411)*(3))&-1);
8709 var $413=((($412)+(1))|0);
8710 var $414=$line;
8711 var $415=(($414+$413)|0);
8712 HEAP8[($415)]=0;
8713 var $416=$x;
8714 var $417=((($416)*(3))&-1);
8715 var $418=((($417)+(2))|0);
8716 var $419=$line;
8717 var $420=(($419+$418)|0);
8718 HEAP8[($420)]=0;
8719 var $421=$count;
8720 var $422=((($421)-(1))|0);
8721 $count=$422;
8722 var $423=$x;
8723 var $424=((($423)+(1))|0);
8724 $x=$424;
8725 label=47;break;
8726 case 51:
8727 label=52;break;
8728 case 52:
8729 var $427=$count;
8730 var $428=($427|0)>0;
8731 if($428){label=53;break;}else{var $434=0;label=54;break;}
8732 case 53:
8733 var $430=$x;
8734 var $431=$3;
8735 var $432=($430|0)<($431|0);
8736 var $434=$432;label=54;break;
8737 case 54:
8738 var $434;
8739 if($434){label=55;break;}else{label=56;break;}
8740 case 55:
8741 var $436=$x;
8742 var $437=((($436)*(3))&-1);
8743 var $438=$line;
8744 var $439=(($438+$437)|0);
8745 HEAP8[($439)]=0;
8746 var $440=$x;
8747 var $441=((($440)*(3))&-1);
8748 var $442=((($441)+(1))|0);
8749 var $443=$line;
8750 var $444=(($443+$442)|0);
8751 HEAP8[($444)]=0;
8752 var $445=$x;
8753 var $446=((($445)*(3))&-1);
8754 var $447=((($446)+(2))|0);
8755 var $448=$line;
8756 var $449=(($448+$447)|0);
8757 HEAP8[($449)]=0;
8758 var $450=$count;
8759 var $451=((($450)-(1))|0);
8760 $count=$451;
8761 var $452=$x;
8762 var $453=((($452)+(1))|0);
8763 $x=$453;
8764 label=52;break;
8765 case 56:
8766 label=68;break;
8767 case 57:
8768 label=58;break;
8769 case 58:
8770 var $457=$count;
8771 var $458=$457&-8;
8772 var $459=($458|0)!=0;
8773 if($459){label=59;break;}else{var $466=0;label=60;break;}
8774 case 59:
8775 var $461=$x;
8776 var $462=((($461)+(8))|0);
8777 var $463=$3;
8778 var $464=($462|0)<($463|0);
8779 var $466=$464;label=60;break;
8780 case 60:
8781 var $466;
8782 if($466){label=61;break;}else{label=62;break;}
8783 case 61:
8784 var $468=$x;
8785 var $469=((($468)*(3))&-1);
8786 var $470=$prevline;
8787 var $471=(($470+$469)|0);
8788 var $472=HEAP8[($471)];
8789 var $473=$x;
8790 var $474=((($473)*(3))&-1);
8791 var $475=$line;
8792 var $476=(($475+$474)|0);
8793 HEAP8[($476)]=$472;
8794 var $477=$x;
8795 var $478=((($477)*(3))&-1);
8796 var $479=((($478)+(1))|0);
8797 var $480=$prevline;
8798 var $481=(($480+$479)|0);
8799 var $482=HEAP8[($481)];
8800 var $483=$x;
8801 var $484=((($483)*(3))&-1);
8802 var $485=((($484)+(1))|0);
8803 var $486=$line;
8804 var $487=(($486+$485)|0);
8805 HEAP8[($487)]=$482;
8806 var $488=$x;
8807 var $489=((($488)*(3))&-1);
8808 var $490=((($489)+(2))|0);
8809 var $491=$prevline;
8810 var $492=(($491+$490)|0);
8811 var $493=HEAP8[($492)];
8812 var $494=$x;
8813 var $495=((($494)*(3))&-1);
8814 var $496=((($495)+(2))|0);
8815 var $497=$line;
8816 var $498=(($497+$496)|0);
8817 HEAP8[($498)]=$493;
8818 var $499=$count;
8819 var $500=((($499)-(1))|0);
8820 $count=$500;
8821 var $501=$x;
8822 var $502=((($501)+(1))|0);
8823 $x=$502;
8824 var $503=$x;
8825 var $504=((($503)*(3))&-1);
8826 var $505=$prevline;
8827 var $506=(($505+$504)|0);
8828 var $507=HEAP8[($506)];
8829 var $508=$x;
8830 var $509=((($508)*(3))&-1);
8831 var $510=$line;
8832 var $511=(($510+$509)|0);
8833 HEAP8[($511)]=$507;
8834 var $512=$x;
8835 var $513=((($512)*(3))&-1);
8836 var $514=((($513)+(1))|0);
8837 var $515=$prevline;
8838 var $516=(($515+$514)|0);
8839 var $517=HEAP8[($516)];
8840 var $518=$x;
8841 var $519=((($518)*(3))&-1);
8842 var $520=((($519)+(1))|0);
8843 var $521=$line;
8844 var $522=(($521+$520)|0);
8845 HEAP8[($522)]=$517;
8846 var $523=$x;
8847 var $524=((($523)*(3))&-1);
8848 var $525=((($524)+(2))|0);
8849 var $526=$prevline;
8850 var $527=(($526+$525)|0);
8851 var $528=HEAP8[($527)];
8852 var $529=$x;
8853 var $530=((($529)*(3))&-1);
8854 var $531=((($530)+(2))|0);
8855 var $532=$line;
8856 var $533=(($532+$531)|0);
8857 HEAP8[($533)]=$528;
8858 var $534=$count;
8859 var $535=((($534)-(1))|0);
8860 $count=$535;
8861 var $536=$x;
8862 var $537=((($536)+(1))|0);
8863 $x=$537;
8864 var $538=$x;
8865 var $539=((($538)*(3))&-1);
8866 var $540=$prevline;
8867 var $541=(($540+$539)|0);
8868 var $542=HEAP8[($541)];
8869 var $543=$x;
8870 var $544=((($543)*(3))&-1);
8871 var $545=$line;
8872 var $546=(($545+$544)|0);
8873 HEAP8[($546)]=$542;
8874 var $547=$x;
8875 var $548=((($547)*(3))&-1);
8876 var $549=((($548)+(1))|0);
8877 var $550=$prevline;
8878 var $551=(($550+$549)|0);
8879 var $552=HEAP8[($551)];
8880 var $553=$x;
8881 var $554=((($553)*(3))&-1);
8882 var $555=((($554)+(1))|0);
8883 var $556=$line;
8884 var $557=(($556+$555)|0);
8885 HEAP8[($557)]=$552;
8886 var $558=$x;
8887 var $559=((($558)*(3))&-1);
8888 var $560=((($559)+(2))|0);
8889 var $561=$prevline;
8890 var $562=(($561+$560)|0);
8891 var $563=HEAP8[($562)];
8892 var $564=$x;
8893 var $565=((($564)*(3))&-1);
8894 var $566=((($565)+(2))|0);
8895 var $567=$line;
8896 var $568=(($567+$566)|0);
8897 HEAP8[($568)]=$563;
8898 var $569=$count;
8899 var $570=((($569)-(1))|0);
8900 $count=$570;
8901 var $571=$x;
8902 var $572=((($571)+(1))|0);
8903 $x=$572;
8904 var $573=$x;
8905 var $574=((($573)*(3))&-1);
8906 var $575=$prevline;
8907 var $576=(($575+$574)|0);
8908 var $577=HEAP8[($576)];
8909 var $578=$x;
8910 var $579=((($578)*(3))&-1);
8911 var $580=$line;
8912 var $581=(($580+$579)|0);
8913 HEAP8[($581)]=$577;
8914 var $582=$x;
8915 var $583=((($582)*(3))&-1);
8916 var $584=((($583)+(1))|0);
8917 var $585=$prevline;
8918 var $586=(($585+$584)|0);
8919 var $587=HEAP8[($586)];
8920 var $588=$x;
8921 var $589=((($588)*(3))&-1);
8922 var $590=((($589)+(1))|0);
8923 var $591=$line;
8924 var $592=(($591+$590)|0);
8925 HEAP8[($592)]=$587;
8926 var $593=$x;
8927 var $594=((($593)*(3))&-1);
8928 var $595=((($594)+(2))|0);
8929 var $596=$prevline;
8930 var $597=(($596+$595)|0);
8931 var $598=HEAP8[($597)];
8932 var $599=$x;
8933 var $600=((($599)*(3))&-1);
8934 var $601=((($600)+(2))|0);
8935 var $602=$line;
8936 var $603=(($602+$601)|0);
8937 HEAP8[($603)]=$598;
8938 var $604=$count;
8939 var $605=((($604)-(1))|0);
8940 $count=$605;
8941 var $606=$x;
8942 var $607=((($606)+(1))|0);
8943 $x=$607;
8944 var $608=$x;
8945 var $609=((($608)*(3))&-1);
8946 var $610=$prevline;
8947 var $611=(($610+$609)|0);
8948 var $612=HEAP8[($611)];
8949 var $613=$x;
8950 var $614=((($613)*(3))&-1);
8951 var $615=$line;
8952 var $616=(($615+$614)|0);
8953 HEAP8[($616)]=$612;
8954 var $617=$x;
8955 var $618=((($617)*(3))&-1);
8956 var $619=((($618)+(1))|0);
8957 var $620=$prevline;
8958 var $621=(($620+$619)|0);
8959 var $622=HEAP8[($621)];
8960 var $623=$x;
8961 var $624=((($623)*(3))&-1);
8962 var $625=((($624)+(1))|0);
8963 var $626=$line;
8964 var $627=(($626+$625)|0);
8965 HEAP8[($627)]=$622;
8966 var $628=$x;
8967 var $629=((($628)*(3))&-1);
8968 var $630=((($629)+(2))|0);
8969 var $631=$prevline;
8970 var $632=(($631+$630)|0);
8971 var $633=HEAP8[($632)];
8972 var $634=$x;
8973 var $635=((($634)*(3))&-1);
8974 var $636=((($635)+(2))|0);
8975 var $637=$line;
8976 var $638=(($637+$636)|0);
8977 HEAP8[($638)]=$633;
8978 var $639=$count;
8979 var $640=((($639)-(1))|0);
8980 $count=$640;
8981 var $641=$x;
8982 var $642=((($641)+(1))|0);
8983 $x=$642;
8984 var $643=$x;
8985 var $644=((($643)*(3))&-1);
8986 var $645=$prevline;
8987 var $646=(($645+$644)|0);
8988 var $647=HEAP8[($646)];
8989 var $648=$x;
8990 var $649=((($648)*(3))&-1);
8991 var $650=$line;
8992 var $651=(($650+$649)|0);
8993 HEAP8[($651)]=$647;
8994 var $652=$x;
8995 var $653=((($652)*(3))&-1);
8996 var $654=((($653)+(1))|0);
8997 var $655=$prevline;
8998 var $656=(($655+$654)|0);
8999 var $657=HEAP8[($656)];
9000 var $658=$x;
9001 var $659=((($658)*(3))&-1);
9002 var $660=((($659)+(1))|0);
9003 var $661=$line;
9004 var $662=(($661+$660)|0);
9005 HEAP8[($662)]=$657;
9006 var $663=$x;
9007 var $664=((($663)*(3))&-1);
9008 var $665=((($664)+(2))|0);
9009 var $666=$prevline;
9010 var $667=(($666+$665)|0);
9011 var $668=HEAP8[($667)];
9012 var $669=$x;
9013 var $670=((($669)*(3))&-1);
9014 var $671=((($670)+(2))|0);
9015 var $672=$line;
9016 var $673=(($672+$671)|0);
9017 HEAP8[($673)]=$668;
9018 var $674=$count;
9019 var $675=((($674)-(1))|0);
9020 $count=$675;
9021 var $676=$x;
9022 var $677=((($676)+(1))|0);
9023 $x=$677;
9024 var $678=$x;
9025 var $679=((($678)*(3))&-1);
9026 var $680=$prevline;
9027 var $681=(($680+$679)|0);
9028 var $682=HEAP8[($681)];
9029 var $683=$x;
9030 var $684=((($683)*(3))&-1);
9031 var $685=$line;
9032 var $686=(($685+$684)|0);
9033 HEAP8[($686)]=$682;
9034 var $687=$x;
9035 var $688=((($687)*(3))&-1);
9036 var $689=((($688)+(1))|0);
9037 var $690=$prevline;
9038 var $691=(($690+$689)|0);
9039 var $692=HEAP8[($691)];
9040 var $693=$x;
9041 var $694=((($693)*(3))&-1);
9042 var $695=((($694)+(1))|0);
9043 var $696=$line;
9044 var $697=(($696+$695)|0);
9045 HEAP8[($697)]=$692;
9046 var $698=$x;
9047 var $699=((($698)*(3))&-1);
9048 var $700=((($699)+(2))|0);
9049 var $701=$prevline;
9050 var $702=(($701+$700)|0);
9051 var $703=HEAP8[($702)];
9052 var $704=$x;
9053 var $705=((($704)*(3))&-1);
9054 var $706=((($705)+(2))|0);
9055 var $707=$line;
9056 var $708=(($707+$706)|0);
9057 HEAP8[($708)]=$703;
9058 var $709=$count;
9059 var $710=((($709)-(1))|0);
9060 $count=$710;
9061 var $711=$x;
9062 var $712=((($711)+(1))|0);
9063 $x=$712;
9064 var $713=$x;
9065 var $714=((($713)*(3))&-1);
9066 var $715=$prevline;
9067 var $716=(($715+$714)|0);
9068 var $717=HEAP8[($716)];
9069 var $718=$x;
9070 var $719=((($718)*(3))&-1);
9071 var $720=$line;
9072 var $721=(($720+$719)|0);
9073 HEAP8[($721)]=$717;
9074 var $722=$x;
9075 var $723=((($722)*(3))&-1);
9076 var $724=((($723)+(1))|0);
9077 var $725=$prevline;
9078 var $726=(($725+$724)|0);
9079 var $727=HEAP8[($726)];
9080 var $728=$x;
9081 var $729=((($728)*(3))&-1);
9082 var $730=((($729)+(1))|0);
9083 var $731=$line;
9084 var $732=(($731+$730)|0);
9085 HEAP8[($732)]=$727;
9086 var $733=$x;
9087 var $734=((($733)*(3))&-1);
9088 var $735=((($734)+(2))|0);
9089 var $736=$prevline;
9090 var $737=(($736+$735)|0);
9091 var $738=HEAP8[($737)];
9092 var $739=$x;
9093 var $740=((($739)*(3))&-1);
9094 var $741=((($740)+(2))|0);
9095 var $742=$line;
9096 var $743=(($742+$741)|0);
9097 HEAP8[($743)]=$738;
9098 var $744=$count;
9099 var $745=((($744)-(1))|0);
9100 $count=$745;
9101 var $746=$x;
9102 var $747=((($746)+(1))|0);
9103 $x=$747;
9104 label=58;break;
9105 case 62:
9106 label=63;break;
9107 case 63:
9108 var $750=$count;
9109 var $751=($750|0)>0;
9110 if($751){label=64;break;}else{var $757=0;label=65;break;}
9111 case 64:
9112 var $753=$x;
9113 var $754=$3;
9114 var $755=($753|0)<($754|0);
9115 var $757=$755;label=65;break;
9116 case 65:
9117 var $757;
9118 if($757){label=66;break;}else{label=67;break;}
9119 case 66:
9120 var $759=$x;
9121 var $760=((($759)*(3))&-1);
9122 var $761=$prevline;
9123 var $762=(($761+$760)|0);
9124 var $763=HEAP8[($762)];
9125 var $764=$x;
9126 var $765=((($764)*(3))&-1);
9127 var $766=$line;
9128 var $767=(($766+$765)|0);
9129 HEAP8[($767)]=$763;
9130 var $768=$x;
9131 var $769=((($768)*(3))&-1);
9132 var $770=((($769)+(1))|0);
9133 var $771=$prevline;
9134 var $772=(($771+$770)|0);
9135 var $773=HEAP8[($772)];
9136 var $774=$x;
9137 var $775=((($774)*(3))&-1);
9138 var $776=((($775)+(1))|0);
9139 var $777=$line;
9140 var $778=(($777+$776)|0);
9141 HEAP8[($778)]=$773;
9142 var $779=$x;
9143 var $780=((($779)*(3))&-1);
9144 var $781=((($780)+(2))|0);
9145 var $782=$prevline;
9146 var $783=(($782+$781)|0);
9147 var $784=HEAP8[($783)];
9148 var $785=$x;
9149 var $786=((($785)*(3))&-1);
9150 var $787=((($786)+(2))|0);
9151 var $788=$line;
9152 var $789=(($788+$787)|0);
9153 HEAP8[($789)]=$784;
9154 var $790=$count;
9155 var $791=((($790)-(1))|0);
9156 $count=$791;
9157 var $792=$x;
9158 var $793=((($792)+(1))|0);
9159 $x=$793;
9160 label=63;break;
9161 case 67:
9162 label=68;break;
9163 case 68:
9164 label=344;break;
9165 case 69:
9166 var $797=$prevline;
9167 var $798=($797|0)==0;
9168 if($798){label=70;break;}else{label=81;break;}
9169 case 70:
9170 label=71;break;
9171 case 71:
9172 var $801=$count;
9173 var $802=$801&-8;
9174 var $803=($802|0)!=0;
9175 if($803){label=72;break;}else{var $810=0;label=73;break;}
9176 case 72:
9177 var $805=$x;
9178 var $806=((($805)+(8))|0);
9179 var $807=$3;
9180 var $808=($806|0)<($807|0);
9181 var $810=$808;label=73;break;
9182 case 73:
9183 var $810;
9184 if($810){label=74;break;}else{label=75;break;}
9185 case 74:
9186 var $812=(($mix)|0);
9187 var $813=HEAP8[($812)];
9188 var $814=$x;
9189 var $815=((($814)*(3))&-1);
9190 var $816=$line;
9191 var $817=(($816+$815)|0);
9192 HEAP8[($817)]=$813;
9193 var $818=(($mix+1)|0);
9194 var $819=HEAP8[($818)];
9195 var $820=$x;
9196 var $821=((($820)*(3))&-1);
9197 var $822=((($821)+(1))|0);
9198 var $823=$line;
9199 var $824=(($823+$822)|0);
9200 HEAP8[($824)]=$819;
9201 var $825=(($mix+2)|0);
9202 var $826=HEAP8[($825)];
9203 var $827=$x;
9204 var $828=((($827)*(3))&-1);
9205 var $829=((($828)+(2))|0);
9206 var $830=$line;
9207 var $831=(($830+$829)|0);
9208 HEAP8[($831)]=$826;
9209 var $832=$count;
9210 var $833=((($832)-(1))|0);
9211 $count=$833;
9212 var $834=$x;
9213 var $835=((($834)+(1))|0);
9214 $x=$835;
9215 var $836=(($mix)|0);
9216 var $837=HEAP8[($836)];
9217 var $838=$x;
9218 var $839=((($838)*(3))&-1);
9219 var $840=$line;
9220 var $841=(($840+$839)|0);
9221 HEAP8[($841)]=$837;
9222 var $842=(($mix+1)|0);
9223 var $843=HEAP8[($842)];
9224 var $844=$x;
9225 var $845=((($844)*(3))&-1);
9226 var $846=((($845)+(1))|0);
9227 var $847=$line;
9228 var $848=(($847+$846)|0);
9229 HEAP8[($848)]=$843;
9230 var $849=(($mix+2)|0);
9231 var $850=HEAP8[($849)];
9232 var $851=$x;
9233 var $852=((($851)*(3))&-1);
9234 var $853=((($852)+(2))|0);
9235 var $854=$line;
9236 var $855=(($854+$853)|0);
9237 HEAP8[($855)]=$850;
9238 var $856=$count;
9239 var $857=((($856)-(1))|0);
9240 $count=$857;
9241 var $858=$x;
9242 var $859=((($858)+(1))|0);
9243 $x=$859;
9244 var $860=(($mix)|0);
9245 var $861=HEAP8[($860)];
9246 var $862=$x;
9247 var $863=((($862)*(3))&-1);
9248 var $864=$line;
9249 var $865=(($864+$863)|0);
9250 HEAP8[($865)]=$861;
9251 var $866=(($mix+1)|0);
9252 var $867=HEAP8[($866)];
9253 var $868=$x;
9254 var $869=((($868)*(3))&-1);
9255 var $870=((($869)+(1))|0);
9256 var $871=$line;
9257 var $872=(($871+$870)|0);
9258 HEAP8[($872)]=$867;
9259 var $873=(($mix+2)|0);
9260 var $874=HEAP8[($873)];
9261 var $875=$x;
9262 var $876=((($875)*(3))&-1);
9263 var $877=((($876)+(2))|0);
9264 var $878=$line;
9265 var $879=(($878+$877)|0);
9266 HEAP8[($879)]=$874;
9267 var $880=$count;
9268 var $881=((($880)-(1))|0);
9269 $count=$881;
9270 var $882=$x;
9271 var $883=((($882)+(1))|0);
9272 $x=$883;
9273 var $884=(($mix)|0);
9274 var $885=HEAP8[($884)];
9275 var $886=$x;
9276 var $887=((($886)*(3))&-1);
9277 var $888=$line;
9278 var $889=(($888+$887)|0);
9279 HEAP8[($889)]=$885;
9280 var $890=(($mix+1)|0);
9281 var $891=HEAP8[($890)];
9282 var $892=$x;
9283 var $893=((($892)*(3))&-1);
9284 var $894=((($893)+(1))|0);
9285 var $895=$line;
9286 var $896=(($895+$894)|0);
9287 HEAP8[($896)]=$891;
9288 var $897=(($mix+2)|0);
9289 var $898=HEAP8[($897)];
9290 var $899=$x;
9291 var $900=((($899)*(3))&-1);
9292 var $901=((($900)+(2))|0);
9293 var $902=$line;
9294 var $903=(($902+$901)|0);
9295 HEAP8[($903)]=$898;
9296 var $904=$count;
9297 var $905=((($904)-(1))|0);
9298 $count=$905;
9299 var $906=$x;
9300 var $907=((($906)+(1))|0);
9301 $x=$907;
9302 var $908=(($mix)|0);
9303 var $909=HEAP8[($908)];
9304 var $910=$x;
9305 var $911=((($910)*(3))&-1);
9306 var $912=$line;
9307 var $913=(($912+$911)|0);
9308 HEAP8[($913)]=$909;
9309 var $914=(($mix+1)|0);
9310 var $915=HEAP8[($914)];
9311 var $916=$x;
9312 var $917=((($916)*(3))&-1);
9313 var $918=((($917)+(1))|0);
9314 var $919=$line;
9315 var $920=(($919+$918)|0);
9316 HEAP8[($920)]=$915;
9317 var $921=(($mix+2)|0);
9318 var $922=HEAP8[($921)];
9319 var $923=$x;
9320 var $924=((($923)*(3))&-1);
9321 var $925=((($924)+(2))|0);
9322 var $926=$line;
9323 var $927=(($926+$925)|0);
9324 HEAP8[($927)]=$922;
9325 var $928=$count;
9326 var $929=((($928)-(1))|0);
9327 $count=$929;
9328 var $930=$x;
9329 var $931=((($930)+(1))|0);
9330 $x=$931;
9331 var $932=(($mix)|0);
9332 var $933=HEAP8[($932)];
9333 var $934=$x;
9334 var $935=((($934)*(3))&-1);
9335 var $936=$line;
9336 var $937=(($936+$935)|0);
9337 HEAP8[($937)]=$933;
9338 var $938=(($mix+1)|0);
9339 var $939=HEAP8[($938)];
9340 var $940=$x;
9341 var $941=((($940)*(3))&-1);
9342 var $942=((($941)+(1))|0);
9343 var $943=$line;
9344 var $944=(($943+$942)|0);
9345 HEAP8[($944)]=$939;
9346 var $945=(($mix+2)|0);
9347 var $946=HEAP8[($945)];
9348 var $947=$x;
9349 var $948=((($947)*(3))&-1);
9350 var $949=((($948)+(2))|0);
9351 var $950=$line;
9352 var $951=(($950+$949)|0);
9353 HEAP8[($951)]=$946;
9354 var $952=$count;
9355 var $953=((($952)-(1))|0);
9356 $count=$953;
9357 var $954=$x;
9358 var $955=((($954)+(1))|0);
9359 $x=$955;
9360 var $956=(($mix)|0);
9361 var $957=HEAP8[($956)];
9362 var $958=$x;
9363 var $959=((($958)*(3))&-1);
9364 var $960=$line;
9365 var $961=(($960+$959)|0);
9366 HEAP8[($961)]=$957;
9367 var $962=(($mix+1)|0);
9368 var $963=HEAP8[($962)];
9369 var $964=$x;
9370 var $965=((($964)*(3))&-1);
9371 var $966=((($965)+(1))|0);
9372 var $967=$line;
9373 var $968=(($967+$966)|0);
9374 HEAP8[($968)]=$963;
9375 var $969=(($mix+2)|0);
9376 var $970=HEAP8[($969)];
9377 var $971=$x;
9378 var $972=((($971)*(3))&-1);
9379 var $973=((($972)+(2))|0);
9380 var $974=$line;
9381 var $975=(($974+$973)|0);
9382 HEAP8[($975)]=$970;
9383 var $976=$count;
9384 var $977=((($976)-(1))|0);
9385 $count=$977;
9386 var $978=$x;
9387 var $979=((($978)+(1))|0);
9388 $x=$979;
9389 var $980=(($mix)|0);
9390 var $981=HEAP8[($980)];
9391 var $982=$x;
9392 var $983=((($982)*(3))&-1);
9393 var $984=$line;
9394 var $985=(($984+$983)|0);
9395 HEAP8[($985)]=$981;
9396 var $986=(($mix+1)|0);
9397 var $987=HEAP8[($986)];
9398 var $988=$x;
9399 var $989=((($988)*(3))&-1);
9400 var $990=((($989)+(1))|0);
9401 var $991=$line;
9402 var $992=(($991+$990)|0);
9403 HEAP8[($992)]=$987;
9404 var $993=(($mix+2)|0);
9405 var $994=HEAP8[($993)];
9406 var $995=$x;
9407 var $996=((($995)*(3))&-1);
9408 var $997=((($996)+(2))|0);
9409 var $998=$line;
9410 var $999=(($998+$997)|0);
9411 HEAP8[($999)]=$994;
9412 var $1000=$count;
9413 var $1001=((($1000)-(1))|0);
9414 $count=$1001;
9415 var $1002=$x;
9416 var $1003=((($1002)+(1))|0);
9417 $x=$1003;
9418 label=71;break;
9419 case 75:
9420 label=76;break;
9421 case 76:
9422 var $1006=$count;
9423 var $1007=($1006|0)>0;
9424 if($1007){label=77;break;}else{var $1013=0;label=78;break;}
9425 case 77:
9426 var $1009=$x;
9427 var $1010=$3;
9428 var $1011=($1009|0)<($1010|0);
9429 var $1013=$1011;label=78;break;
9430 case 78:
9431 var $1013;
9432 if($1013){label=79;break;}else{label=80;break;}
9433 case 79:
9434 var $1015=(($mix)|0);
9435 var $1016=HEAP8[($1015)];
9436 var $1017=$x;
9437 var $1018=((($1017)*(3))&-1);
9438 var $1019=$line;
9439 var $1020=(($1019+$1018)|0);
9440 HEAP8[($1020)]=$1016;
9441 var $1021=(($mix+1)|0);
9442 var $1022=HEAP8[($1021)];
9443 var $1023=$x;
9444 var $1024=((($1023)*(3))&-1);
9445 var $1025=((($1024)+(1))|0);
9446 var $1026=$line;
9447 var $1027=(($1026+$1025)|0);
9448 HEAP8[($1027)]=$1022;
9449 var $1028=(($mix+2)|0);
9450 var $1029=HEAP8[($1028)];
9451 var $1030=$x;
9452 var $1031=((($1030)*(3))&-1);
9453 var $1032=((($1031)+(2))|0);
9454 var $1033=$line;
9455 var $1034=(($1033+$1032)|0);
9456 HEAP8[($1034)]=$1029;
9457 var $1035=$count;
9458 var $1036=((($1035)-(1))|0);
9459 $count=$1036;
9460 var $1037=$x;
9461 var $1038=((($1037)+(1))|0);
9462 $x=$1038;
9463 label=76;break;
9464 case 80:
9465 label=92;break;
9466 case 81:
9467 label=82;break;
9468 case 82:
9469 var $1042=$count;
9470 var $1043=$1042&-8;
9471 var $1044=($1043|0)!=0;
9472 if($1044){label=83;break;}else{var $1051=0;label=84;break;}
9473 case 83:
9474 var $1046=$x;
9475 var $1047=((($1046)+(8))|0);
9476 var $1048=$3;
9477 var $1049=($1047|0)<($1048|0);
9478 var $1051=$1049;label=84;break;
9479 case 84:
9480 var $1051;
9481 if($1051){label=85;break;}else{label=86;break;}
9482 case 85:
9483 var $1053=$x;
9484 var $1054=((($1053)*(3))&-1);
9485 var $1055=$prevline;
9486 var $1056=(($1055+$1054)|0);
9487 var $1057=HEAP8[($1056)];
9488 var $1058=($1057&255);
9489 var $1059=(($mix)|0);
9490 var $1060=HEAP8[($1059)];
9491 var $1061=($1060&255);
9492 var $1062=$1058^$1061;
9493 var $1063=(($1062)&255);
9494 var $1064=$x;
9495 var $1065=((($1064)*(3))&-1);
9496 var $1066=$line;
9497 var $1067=(($1066+$1065)|0);
9498 HEAP8[($1067)]=$1063;
9499 var $1068=$x;
9500 var $1069=((($1068)*(3))&-1);
9501 var $1070=((($1069)+(1))|0);
9502 var $1071=$prevline;
9503 var $1072=(($1071+$1070)|0);
9504 var $1073=HEAP8[($1072)];
9505 var $1074=($1073&255);
9506 var $1075=(($mix+1)|0);
9507 var $1076=HEAP8[($1075)];
9508 var $1077=($1076&255);
9509 var $1078=$1074^$1077;
9510 var $1079=(($1078)&255);
9511 var $1080=$x;
9512 var $1081=((($1080)*(3))&-1);
9513 var $1082=((($1081)+(1))|0);
9514 var $1083=$line;
9515 var $1084=(($1083+$1082)|0);
9516 HEAP8[($1084)]=$1079;
9517 var $1085=$x;
9518 var $1086=((($1085)*(3))&-1);
9519 var $1087=((($1086)+(2))|0);
9520 var $1088=$prevline;
9521 var $1089=(($1088+$1087)|0);
9522 var $1090=HEAP8[($1089)];
9523 var $1091=($1090&255);
9524 var $1092=(($mix+2)|0);
9525 var $1093=HEAP8[($1092)];
9526 var $1094=($1093&255);
9527 var $1095=$1091^$1094;
9528 var $1096=(($1095)&255);
9529 var $1097=$x;
9530 var $1098=((($1097)*(3))&-1);
9531 var $1099=((($1098)+(2))|0);
9532 var $1100=$line;
9533 var $1101=(($1100+$1099)|0);
9534 HEAP8[($1101)]=$1096;
9535 var $1102=$count;
9536 var $1103=((($1102)-(1))|0);
9537 $count=$1103;
9538 var $1104=$x;
9539 var $1105=((($1104)+(1))|0);
9540 $x=$1105;
9541 var $1106=$x;
9542 var $1107=((($1106)*(3))&-1);
9543 var $1108=$prevline;
9544 var $1109=(($1108+$1107)|0);
9545 var $1110=HEAP8[($1109)];
9546 var $1111=($1110&255);
9547 var $1112=(($mix)|0);
9548 var $1113=HEAP8[($1112)];
9549 var $1114=($1113&255);
9550 var $1115=$1111^$1114;
9551 var $1116=(($1115)&255);
9552 var $1117=$x;
9553 var $1118=((($1117)*(3))&-1);
9554 var $1119=$line;
9555 var $1120=(($1119+$1118)|0);
9556 HEAP8[($1120)]=$1116;
9557 var $1121=$x;
9558 var $1122=((($1121)*(3))&-1);
9559 var $1123=((($1122)+(1))|0);
9560 var $1124=$prevline;
9561 var $1125=(($1124+$1123)|0);
9562 var $1126=HEAP8[($1125)];
9563 var $1127=($1126&255);
9564 var $1128=(($mix+1)|0);
9565 var $1129=HEAP8[($1128)];
9566 var $1130=($1129&255);
9567 var $1131=$1127^$1130;
9568 var $1132=(($1131)&255);
9569 var $1133=$x;
9570 var $1134=((($1133)*(3))&-1);
9571 var $1135=((($1134)+(1))|0);
9572 var $1136=$line;
9573 var $1137=(($1136+$1135)|0);
9574 HEAP8[($1137)]=$1132;
9575 var $1138=$x;
9576 var $1139=((($1138)*(3))&-1);
9577 var $1140=((($1139)+(2))|0);
9578 var $1141=$prevline;
9579 var $1142=(($1141+$1140)|0);
9580 var $1143=HEAP8[($1142)];
9581 var $1144=($1143&255);
9582 var $1145=(($mix+2)|0);
9583 var $1146=HEAP8[($1145)];
9584 var $1147=($1146&255);
9585 var $1148=$1144^$1147;
9586 var $1149=(($1148)&255);
9587 var $1150=$x;
9588 var $1151=((($1150)*(3))&-1);
9589 var $1152=((($1151)+(2))|0);
9590 var $1153=$line;
9591 var $1154=(($1153+$1152)|0);
9592 HEAP8[($1154)]=$1149;
9593 var $1155=$count;
9594 var $1156=((($1155)-(1))|0);
9595 $count=$1156;
9596 var $1157=$x;
9597 var $1158=((($1157)+(1))|0);
9598 $x=$1158;
9599 var $1159=$x;
9600 var $1160=((($1159)*(3))&-1);
9601 var $1161=$prevline;
9602 var $1162=(($1161+$1160)|0);
9603 var $1163=HEAP8[($1162)];
9604 var $1164=($1163&255);
9605 var $1165=(($mix)|0);
9606 var $1166=HEAP8[($1165)];
9607 var $1167=($1166&255);
9608 var $1168=$1164^$1167;
9609 var $1169=(($1168)&255);
9610 var $1170=$x;
9611 var $1171=((($1170)*(3))&-1);
9612 var $1172=$line;
9613 var $1173=(($1172+$1171)|0);
9614 HEAP8[($1173)]=$1169;
9615 var $1174=$x;
9616 var $1175=((($1174)*(3))&-1);
9617 var $1176=((($1175)+(1))|0);
9618 var $1177=$prevline;
9619 var $1178=(($1177+$1176)|0);
9620 var $1179=HEAP8[($1178)];
9621 var $1180=($1179&255);
9622 var $1181=(($mix+1)|0);
9623 var $1182=HEAP8[($1181)];
9624 var $1183=($1182&255);
9625 var $1184=$1180^$1183;
9626 var $1185=(($1184)&255);
9627 var $1186=$x;
9628 var $1187=((($1186)*(3))&-1);
9629 var $1188=((($1187)+(1))|0);
9630 var $1189=$line;
9631 var $1190=(($1189+$1188)|0);
9632 HEAP8[($1190)]=$1185;
9633 var $1191=$x;
9634 var $1192=((($1191)*(3))&-1);
9635 var $1193=((($1192)+(2))|0);
9636 var $1194=$prevline;
9637 var $1195=(($1194+$1193)|0);
9638 var $1196=HEAP8[($1195)];
9639 var $1197=($1196&255);
9640 var $1198=(($mix+2)|0);
9641 var $1199=HEAP8[($1198)];
9642 var $1200=($1199&255);
9643 var $1201=$1197^$1200;
9644 var $1202=(($1201)&255);
9645 var $1203=$x;
9646 var $1204=((($1203)*(3))&-1);
9647 var $1205=((($1204)+(2))|0);
9648 var $1206=$line;
9649 var $1207=(($1206+$1205)|0);
9650 HEAP8[($1207)]=$1202;
9651 var $1208=$count;
9652 var $1209=((($1208)-(1))|0);
9653 $count=$1209;
9654 var $1210=$x;
9655 var $1211=((($1210)+(1))|0);
9656 $x=$1211;
9657 var $1212=$x;
9658 var $1213=((($1212)*(3))&-1);
9659 var $1214=$prevline;
9660 var $1215=(($1214+$1213)|0);
9661 var $1216=HEAP8[($1215)];
9662 var $1217=($1216&255);
9663 var $1218=(($mix)|0);
9664 var $1219=HEAP8[($1218)];
9665 var $1220=($1219&255);
9666 var $1221=$1217^$1220;
9667 var $1222=(($1221)&255);
9668 var $1223=$x;
9669 var $1224=((($1223)*(3))&-1);
9670 var $1225=$line;
9671 var $1226=(($1225+$1224)|0);
9672 HEAP8[($1226)]=$1222;
9673 var $1227=$x;
9674 var $1228=((($1227)*(3))&-1);
9675 var $1229=((($1228)+(1))|0);
9676 var $1230=$prevline;
9677 var $1231=(($1230+$1229)|0);
9678 var $1232=HEAP8[($1231)];
9679 var $1233=($1232&255);
9680 var $1234=(($mix+1)|0);
9681 var $1235=HEAP8[($1234)];
9682 var $1236=($1235&255);
9683 var $1237=$1233^$1236;
9684 var $1238=(($1237)&255);
9685 var $1239=$x;
9686 var $1240=((($1239)*(3))&-1);
9687 var $1241=((($1240)+(1))|0);
9688 var $1242=$line;
9689 var $1243=(($1242+$1241)|0);
9690 HEAP8[($1243)]=$1238;
9691 var $1244=$x;
9692 var $1245=((($1244)*(3))&-1);
9693 var $1246=((($1245)+(2))|0);
9694 var $1247=$prevline;
9695 var $1248=(($1247+$1246)|0);
9696 var $1249=HEAP8[($1248)];
9697 var $1250=($1249&255);
9698 var $1251=(($mix+2)|0);
9699 var $1252=HEAP8[($1251)];
9700 var $1253=($1252&255);
9701 var $1254=$1250^$1253;
9702 var $1255=(($1254)&255);
9703 var $1256=$x;
9704 var $1257=((($1256)*(3))&-1);
9705 var $1258=((($1257)+(2))|0);
9706 var $1259=$line;
9707 var $1260=(($1259+$1258)|0);
9708 HEAP8[($1260)]=$1255;
9709 var $1261=$count;
9710 var $1262=((($1261)-(1))|0);
9711 $count=$1262;
9712 var $1263=$x;
9713 var $1264=((($1263)+(1))|0);
9714 $x=$1264;
9715 var $1265=$x;
9716 var $1266=((($1265)*(3))&-1);
9717 var $1267=$prevline;
9718 var $1268=(($1267+$1266)|0);
9719 var $1269=HEAP8[($1268)];
9720 var $1270=($1269&255);
9721 var $1271=(($mix)|0);
9722 var $1272=HEAP8[($1271)];
9723 var $1273=($1272&255);
9724 var $1274=$1270^$1273;
9725 var $1275=(($1274)&255);
9726 var $1276=$x;
9727 var $1277=((($1276)*(3))&-1);
9728 var $1278=$line;
9729 var $1279=(($1278+$1277)|0);
9730 HEAP8[($1279)]=$1275;
9731 var $1280=$x;
9732 var $1281=((($1280)*(3))&-1);
9733 var $1282=((($1281)+(1))|0);
9734 var $1283=$prevline;
9735 var $1284=(($1283+$1282)|0);
9736 var $1285=HEAP8[($1284)];
9737 var $1286=($1285&255);
9738 var $1287=(($mix+1)|0);
9739 var $1288=HEAP8[($1287)];
9740 var $1289=($1288&255);
9741 var $1290=$1286^$1289;
9742 var $1291=(($1290)&255);
9743 var $1292=$x;
9744 var $1293=((($1292)*(3))&-1);
9745 var $1294=((($1293)+(1))|0);
9746 var $1295=$line;
9747 var $1296=(($1295+$1294)|0);
9748 HEAP8[($1296)]=$1291;
9749 var $1297=$x;
9750 var $1298=((($1297)*(3))&-1);
9751 var $1299=((($1298)+(2))|0);
9752 var $1300=$prevline;
9753 var $1301=(($1300+$1299)|0);
9754 var $1302=HEAP8[($1301)];
9755 var $1303=($1302&255);
9756 var $1304=(($mix+2)|0);
9757 var $1305=HEAP8[($1304)];
9758 var $1306=($1305&255);
9759 var $1307=$1303^$1306;
9760 var $1308=(($1307)&255);
9761 var $1309=$x;
9762 var $1310=((($1309)*(3))&-1);
9763 var $1311=((($1310)+(2))|0);
9764 var $1312=$line;
9765 var $1313=(($1312+$1311)|0);
9766 HEAP8[($1313)]=$1308;
9767 var $1314=$count;
9768 var $1315=((($1314)-(1))|0);
9769 $count=$1315;
9770 var $1316=$x;
9771 var $1317=((($1316)+(1))|0);
9772 $x=$1317;
9773 var $1318=$x;
9774 var $1319=((($1318)*(3))&-1);
9775 var $1320=$prevline;
9776 var $1321=(($1320+$1319)|0);
9777 var $1322=HEAP8[($1321)];
9778 var $1323=($1322&255);
9779 var $1324=(($mix)|0);
9780 var $1325=HEAP8[($1324)];
9781 var $1326=($1325&255);
9782 var $1327=$1323^$1326;
9783 var $1328=(($1327)&255);
9784 var $1329=$x;
9785 var $1330=((($1329)*(3))&-1);
9786 var $1331=$line;
9787 var $1332=(($1331+$1330)|0);
9788 HEAP8[($1332)]=$1328;
9789 var $1333=$x;
9790 var $1334=((($1333)*(3))&-1);
9791 var $1335=((($1334)+(1))|0);
9792 var $1336=$prevline;
9793 var $1337=(($1336+$1335)|0);
9794 var $1338=HEAP8[($1337)];
9795 var $1339=($1338&255);
9796 var $1340=(($mix+1)|0);
9797 var $1341=HEAP8[($1340)];
9798 var $1342=($1341&255);
9799 var $1343=$1339^$1342;
9800 var $1344=(($1343)&255);
9801 var $1345=$x;
9802 var $1346=((($1345)*(3))&-1);
9803 var $1347=((($1346)+(1))|0);
9804 var $1348=$line;
9805 var $1349=(($1348+$1347)|0);
9806 HEAP8[($1349)]=$1344;
9807 var $1350=$x;
9808 var $1351=((($1350)*(3))&-1);
9809 var $1352=((($1351)+(2))|0);
9810 var $1353=$prevline;
9811 var $1354=(($1353+$1352)|0);
9812 var $1355=HEAP8[($1354)];
9813 var $1356=($1355&255);
9814 var $1357=(($mix+2)|0);
9815 var $1358=HEAP8[($1357)];
9816 var $1359=($1358&255);
9817 var $1360=$1356^$1359;
9818 var $1361=(($1360)&255);
9819 var $1362=$x;
9820 var $1363=((($1362)*(3))&-1);
9821 var $1364=((($1363)+(2))|0);
9822 var $1365=$line;
9823 var $1366=(($1365+$1364)|0);
9824 HEAP8[($1366)]=$1361;
9825 var $1367=$count;
9826 var $1368=((($1367)-(1))|0);
9827 $count=$1368;
9828 var $1369=$x;
9829 var $1370=((($1369)+(1))|0);
9830 $x=$1370;
9831 var $1371=$x;
9832 var $1372=((($1371)*(3))&-1);
9833 var $1373=$prevline;
9834 var $1374=(($1373+$1372)|0);
9835 var $1375=HEAP8[($1374)];
9836 var $1376=($1375&255);
9837 var $1377=(($mix)|0);
9838 var $1378=HEAP8[($1377)];
9839 var $1379=($1378&255);
9840 var $1380=$1376^$1379;
9841 var $1381=(($1380)&255);
9842 var $1382=$x;
9843 var $1383=((($1382)*(3))&-1);
9844 var $1384=$line;
9845 var $1385=(($1384+$1383)|0);
9846 HEAP8[($1385)]=$1381;
9847 var $1386=$x;
9848 var $1387=((($1386)*(3))&-1);
9849 var $1388=((($1387)+(1))|0);
9850 var $1389=$prevline;
9851 var $1390=(($1389+$1388)|0);
9852 var $1391=HEAP8[($1390)];
9853 var $1392=($1391&255);
9854 var $1393=(($mix+1)|0);
9855 var $1394=HEAP8[($1393)];
9856 var $1395=($1394&255);
9857 var $1396=$1392^$1395;
9858 var $1397=(($1396)&255);
9859 var $1398=$x;
9860 var $1399=((($1398)*(3))&-1);
9861 var $1400=((($1399)+(1))|0);
9862 var $1401=$line;
9863 var $1402=(($1401+$1400)|0);
9864 HEAP8[($1402)]=$1397;
9865 var $1403=$x;
9866 var $1404=((($1403)*(3))&-1);
9867 var $1405=((($1404)+(2))|0);
9868 var $1406=$prevline;
9869 var $1407=(($1406+$1405)|0);
9870 var $1408=HEAP8[($1407)];
9871 var $1409=($1408&255);
9872 var $1410=(($mix+2)|0);
9873 var $1411=HEAP8[($1410)];
9874 var $1412=($1411&255);
9875 var $1413=$1409^$1412;
9876 var $1414=(($1413)&255);
9877 var $1415=$x;
9878 var $1416=((($1415)*(3))&-1);
9879 var $1417=((($1416)+(2))|0);
9880 var $1418=$line;
9881 var $1419=(($1418+$1417)|0);
9882 HEAP8[($1419)]=$1414;
9883 var $1420=$count;
9884 var $1421=((($1420)-(1))|0);
9885 $count=$1421;
9886 var $1422=$x;
9887 var $1423=((($1422)+(1))|0);
9888 $x=$1423;
9889 var $1424=$x;
9890 var $1425=((($1424)*(3))&-1);
9891 var $1426=$prevline;
9892 var $1427=(($1426+$1425)|0);
9893 var $1428=HEAP8[($1427)];
9894 var $1429=($1428&255);
9895 var $1430=(($mix)|0);
9896 var $1431=HEAP8[($1430)];
9897 var $1432=($1431&255);
9898 var $1433=$1429^$1432;
9899 var $1434=(($1433)&255);
9900 var $1435=$x;
9901 var $1436=((($1435)*(3))&-1);
9902 var $1437=$line;
9903 var $1438=(($1437+$1436)|0);
9904 HEAP8[($1438)]=$1434;
9905 var $1439=$x;
9906 var $1440=((($1439)*(3))&-1);
9907 var $1441=((($1440)+(1))|0);
9908 var $1442=$prevline;
9909 var $1443=(($1442+$1441)|0);
9910 var $1444=HEAP8[($1443)];
9911 var $1445=($1444&255);
9912 var $1446=(($mix+1)|0);
9913 var $1447=HEAP8[($1446)];
9914 var $1448=($1447&255);
9915 var $1449=$1445^$1448;
9916 var $1450=(($1449)&255);
9917 var $1451=$x;
9918 var $1452=((($1451)*(3))&-1);
9919 var $1453=((($1452)+(1))|0);
9920 var $1454=$line;
9921 var $1455=(($1454+$1453)|0);
9922 HEAP8[($1455)]=$1450;
9923 var $1456=$x;
9924 var $1457=((($1456)*(3))&-1);
9925 var $1458=((($1457)+(2))|0);
9926 var $1459=$prevline;
9927 var $1460=(($1459+$1458)|0);
9928 var $1461=HEAP8[($1460)];
9929 var $1462=($1461&255);
9930 var $1463=(($mix+2)|0);
9931 var $1464=HEAP8[($1463)];
9932 var $1465=($1464&255);
9933 var $1466=$1462^$1465;
9934 var $1467=(($1466)&255);
9935 var $1468=$x;
9936 var $1469=((($1468)*(3))&-1);
9937 var $1470=((($1469)+(2))|0);
9938 var $1471=$line;
9939 var $1472=(($1471+$1470)|0);
9940 HEAP8[($1472)]=$1467;
9941 var $1473=$count;
9942 var $1474=((($1473)-(1))|0);
9943 $count=$1474;
9944 var $1475=$x;
9945 var $1476=((($1475)+(1))|0);
9946 $x=$1476;
9947 label=82;break;
9948 case 86:
9949 label=87;break;
9950 case 87:
9951 var $1479=$count;
9952 var $1480=($1479|0)>0;
9953 if($1480){label=88;break;}else{var $1486=0;label=89;break;}
9954 case 88:
9955 var $1482=$x;
9956 var $1483=$3;
9957 var $1484=($1482|0)<($1483|0);
9958 var $1486=$1484;label=89;break;
9959 case 89:
9960 var $1486;
9961 if($1486){label=90;break;}else{label=91;break;}
9962 case 90:
9963 var $1488=$x;
9964 var $1489=((($1488)*(3))&-1);
9965 var $1490=$prevline;
9966 var $1491=(($1490+$1489)|0);
9967 var $1492=HEAP8[($1491)];
9968 var $1493=($1492&255);
9969 var $1494=(($mix)|0);
9970 var $1495=HEAP8[($1494)];
9971 var $1496=($1495&255);
9972 var $1497=$1493^$1496;
9973 var $1498=(($1497)&255);
9974 var $1499=$x;
9975 var $1500=((($1499)*(3))&-1);
9976 var $1501=$line;
9977 var $1502=(($1501+$1500)|0);
9978 HEAP8[($1502)]=$1498;
9979 var $1503=$x;
9980 var $1504=((($1503)*(3))&-1);
9981 var $1505=((($1504)+(1))|0);
9982 var $1506=$prevline;
9983 var $1507=(($1506+$1505)|0);
9984 var $1508=HEAP8[($1507)];
9985 var $1509=($1508&255);
9986 var $1510=(($mix+1)|0);
9987 var $1511=HEAP8[($1510)];
9988 var $1512=($1511&255);
9989 var $1513=$1509^$1512;
9990 var $1514=(($1513)&255);
9991 var $1515=$x;
9992 var $1516=((($1515)*(3))&-1);
9993 var $1517=((($1516)+(1))|0);
9994 var $1518=$line;
9995 var $1519=(($1518+$1517)|0);
9996 HEAP8[($1519)]=$1514;
9997 var $1520=$x;
9998 var $1521=((($1520)*(3))&-1);
9999 var $1522=((($1521)+(2))|0);
10000 var $1523=$prevline;
10001 var $1524=(($1523+$1522)|0);
10002 var $1525=HEAP8[($1524)];
10003 var $1526=($1525&255);
10004 var $1527=(($mix+2)|0);
10005 var $1528=HEAP8[($1527)];
10006 var $1529=($1528&255);
10007 var $1530=$1526^$1529;
10008 var $1531=(($1530)&255);
10009 var $1532=$x;
10010 var $1533=((($1532)*(3))&-1);
10011 var $1534=((($1533)+(2))|0);
10012 var $1535=$line;
10013 var $1536=(($1535+$1534)|0);
10014 HEAP8[($1536)]=$1531;
10015 var $1537=$count;
10016 var $1538=((($1537)-(1))|0);
10017 $count=$1538;
10018 var $1539=$x;
10019 var $1540=((($1539)+(1))|0);
10020 $x=$1540;
10021 label=87;break;
10022 case 91:
10023 label=92;break;
10024 case 92:
10025 label=344;break;
10026 case 93:
10027 var $1544=$prevline;
10028 var $1545=($1544|0)==0;
10029 if($1545){label=94;break;}else{label=177;break;}
10030 case 94:
10031 label=95;break;
10032 case 95:
10033 var $1548=$count;
10034 var $1549=$1548&-8;
10035 var $1550=($1549|0)!=0;
10036 if($1550){label=96;break;}else{var $1557=0;label=97;break;}
10037 case 96:
10038 var $1552=$x;
10039 var $1553=((($1552)+(8))|0);
10040 var $1554=$3;
10041 var $1555=($1553|0)<($1554|0);
10042 var $1557=$1555;label=97;break;
10043 case 97:
10044 var $1557;
10045 if($1557){label=98;break;}else{label=163;break;}
10046 case 98:
10047 var $1559=$mixmask;
10048 var $1560=($1559&255);
10049 var $1561=$1560<<1;
10050 var $1562=(($1561)&255);
10051 $mixmask=$1562;
10052 var $1563=$mixmask;
10053 var $1564=($1563&255);
10054 var $1565=($1564|0)==0;
10055 if($1565){label=99;break;}else{label=103;break;}
10056 case 99:
10057 var $1567=$fom_mask;
10058 var $1568=($1567|0)!=0;
10059 if($1568){label=100;break;}else{label=101;break;}
10060 case 100:
10061 var $1570=$fom_mask;
10062 var $1577=$1570;label=102;break;
10063 case 101:
10064 var $1572=$5;
10065 var $1573=(($1572+1)|0);
10066 $5=$1573;
10067 var $1574=HEAP8[($1572)];
10068 var $1575=($1574&255);
10069 var $1577=$1575;label=102;break;
10070 case 102:
10071 var $1577;
10072 var $1578=(($1577)&255);
10073 $mask=$1578;
10074 $mixmask=1;
10075 label=103;break;
10076 case 103:
10077 var $1580=$mask;
10078 var $1581=($1580&255);
10079 var $1582=$mixmask;
10080 var $1583=($1582&255);
10081 var $1584=$1581&$1583;
10082 var $1585=($1584|0)!=0;
10083 if($1585){label=104;break;}else{label=105;break;}
10084 case 104:
10085 var $1587=(($mix)|0);
10086 var $1588=HEAP8[($1587)];
10087 var $1589=$x;
10088 var $1590=((($1589)*(3))&-1);
10089 var $1591=$line;
10090 var $1592=(($1591+$1590)|0);
10091 HEAP8[($1592)]=$1588;
10092 var $1593=(($mix+1)|0);
10093 var $1594=HEAP8[($1593)];
10094 var $1595=$x;
10095 var $1596=((($1595)*(3))&-1);
10096 var $1597=((($1596)+(1))|0);
10097 var $1598=$line;
10098 var $1599=(($1598+$1597)|0);
10099 HEAP8[($1599)]=$1594;
10100 var $1600=(($mix+2)|0);
10101 var $1601=HEAP8[($1600)];
10102 var $1602=$x;
10103 var $1603=((($1602)*(3))&-1);
10104 var $1604=((($1603)+(2))|0);
10105 var $1605=$line;
10106 var $1606=(($1605+$1604)|0);
10107 HEAP8[($1606)]=$1601;
10108 label=106;break;
10109 case 105:
10110 var $1608=$x;
10111 var $1609=((($1608)*(3))&-1);
10112 var $1610=$line;
10113 var $1611=(($1610+$1609)|0);
10114 HEAP8[($1611)]=0;
10115 var $1612=$x;
10116 var $1613=((($1612)*(3))&-1);
10117 var $1614=((($1613)+(1))|0);
10118 var $1615=$line;
10119 var $1616=(($1615+$1614)|0);
10120 HEAP8[($1616)]=0;
10121 var $1617=$x;
10122 var $1618=((($1617)*(3))&-1);
10123 var $1619=((($1618)+(2))|0);
10124 var $1620=$line;
10125 var $1621=(($1620+$1619)|0);
10126 HEAP8[($1621)]=0;
10127 label=106;break;
10128 case 106:
10129 var $1623=$count;
10130 var $1624=((($1623)-(1))|0);
10131 $count=$1624;
10132 var $1625=$x;
10133 var $1626=((($1625)+(1))|0);
10134 $x=$1626;
10135 var $1627=$mixmask;
10136 var $1628=($1627&255);
10137 var $1629=$1628<<1;
10138 var $1630=(($1629)&255);
10139 $mixmask=$1630;
10140 var $1631=$mixmask;
10141 var $1632=($1631&255);
10142 var $1633=($1632|0)==0;
10143 if($1633){label=107;break;}else{label=111;break;}
10144 case 107:
10145 var $1635=$fom_mask;
10146 var $1636=($1635|0)!=0;
10147 if($1636){label=108;break;}else{label=109;break;}
10148 case 108:
10149 var $1638=$fom_mask;
10150 var $1645=$1638;label=110;break;
10151 case 109:
10152 var $1640=$5;
10153 var $1641=(($1640+1)|0);
10154 $5=$1641;
10155 var $1642=HEAP8[($1640)];
10156 var $1643=($1642&255);
10157 var $1645=$1643;label=110;break;
10158 case 110:
10159 var $1645;
10160 var $1646=(($1645)&255);
10161 $mask=$1646;
10162 $mixmask=1;
10163 label=111;break;
10164 case 111:
10165 var $1648=$mask;
10166 var $1649=($1648&255);
10167 var $1650=$mixmask;
10168 var $1651=($1650&255);
10169 var $1652=$1649&$1651;
10170 var $1653=($1652|0)!=0;
10171 if($1653){label=112;break;}else{label=113;break;}
10172 case 112:
10173 var $1655=(($mix)|0);
10174 var $1656=HEAP8[($1655)];
10175 var $1657=$x;
10176 var $1658=((($1657)*(3))&-1);
10177 var $1659=$line;
10178 var $1660=(($1659+$1658)|0);
10179 HEAP8[($1660)]=$1656;
10180 var $1661=(($mix+1)|0);
10181 var $1662=HEAP8[($1661)];
10182 var $1663=$x;
10183 var $1664=((($1663)*(3))&-1);
10184 var $1665=((($1664)+(1))|0);
10185 var $1666=$line;
10186 var $1667=(($1666+$1665)|0);
10187 HEAP8[($1667)]=$1662;
10188 var $1668=(($mix+2)|0);
10189 var $1669=HEAP8[($1668)];
10190 var $1670=$x;
10191 var $1671=((($1670)*(3))&-1);
10192 var $1672=((($1671)+(2))|0);
10193 var $1673=$line;
10194 var $1674=(($1673+$1672)|0);
10195 HEAP8[($1674)]=$1669;
10196 label=114;break;
10197 case 113:
10198 var $1676=$x;
10199 var $1677=((($1676)*(3))&-1);
10200 var $1678=$line;
10201 var $1679=(($1678+$1677)|0);
10202 HEAP8[($1679)]=0;
10203 var $1680=$x;
10204 var $1681=((($1680)*(3))&-1);
10205 var $1682=((($1681)+(1))|0);
10206 var $1683=$line;
10207 var $1684=(($1683+$1682)|0);
10208 HEAP8[($1684)]=0;
10209 var $1685=$x;
10210 var $1686=((($1685)*(3))&-1);
10211 var $1687=((($1686)+(2))|0);
10212 var $1688=$line;
10213 var $1689=(($1688+$1687)|0);
10214 HEAP8[($1689)]=0;
10215 label=114;break;
10216 case 114:
10217 var $1691=$count;
10218 var $1692=((($1691)-(1))|0);
10219 $count=$1692;
10220 var $1693=$x;
10221 var $1694=((($1693)+(1))|0);
10222 $x=$1694;
10223 var $1695=$mixmask;
10224 var $1696=($1695&255);
10225 var $1697=$1696<<1;
10226 var $1698=(($1697)&255);
10227 $mixmask=$1698;
10228 var $1699=$mixmask;
10229 var $1700=($1699&255);
10230 var $1701=($1700|0)==0;
10231 if($1701){label=115;break;}else{label=119;break;}
10232 case 115:
10233 var $1703=$fom_mask;
10234 var $1704=($1703|0)!=0;
10235 if($1704){label=116;break;}else{label=117;break;}
10236 case 116:
10237 var $1706=$fom_mask;
10238 var $1713=$1706;label=118;break;
10239 case 117:
10240 var $1708=$5;
10241 var $1709=(($1708+1)|0);
10242 $5=$1709;
10243 var $1710=HEAP8[($1708)];
10244 var $1711=($1710&255);
10245 var $1713=$1711;label=118;break;
10246 case 118:
10247 var $1713;
10248 var $1714=(($1713)&255);
10249 $mask=$1714;
10250 $mixmask=1;
10251 label=119;break;
10252 case 119:
10253 var $1716=$mask;
10254 var $1717=($1716&255);
10255 var $1718=$mixmask;
10256 var $1719=($1718&255);
10257 var $1720=$1717&$1719;
10258 var $1721=($1720|0)!=0;
10259 if($1721){label=120;break;}else{label=121;break;}
10260 case 120:
10261 var $1723=(($mix)|0);
10262 var $1724=HEAP8[($1723)];
10263 var $1725=$x;
10264 var $1726=((($1725)*(3))&-1);
10265 var $1727=$line;
10266 var $1728=(($1727+$1726)|0);
10267 HEAP8[($1728)]=$1724;
10268 var $1729=(($mix+1)|0);
10269 var $1730=HEAP8[($1729)];
10270 var $1731=$x;
10271 var $1732=((($1731)*(3))&-1);
10272 var $1733=((($1732)+(1))|0);
10273 var $1734=$line;
10274 var $1735=(($1734+$1733)|0);
10275 HEAP8[($1735)]=$1730;
10276 var $1736=(($mix+2)|0);
10277 var $1737=HEAP8[($1736)];
10278 var $1738=$x;
10279 var $1739=((($1738)*(3))&-1);
10280 var $1740=((($1739)+(2))|0);
10281 var $1741=$line;
10282 var $1742=(($1741+$1740)|0);
10283 HEAP8[($1742)]=$1737;
10284 label=122;break;
10285 case 121:
10286 var $1744=$x;
10287 var $1745=((($1744)*(3))&-1);
10288 var $1746=$line;
10289 var $1747=(($1746+$1745)|0);
10290 HEAP8[($1747)]=0;
10291 var $1748=$x;
10292 var $1749=((($1748)*(3))&-1);
10293 var $1750=((($1749)+(1))|0);
10294 var $1751=$line;
10295 var $1752=(($1751+$1750)|0);
10296 HEAP8[($1752)]=0;
10297 var $1753=$x;
10298 var $1754=((($1753)*(3))&-1);
10299 var $1755=((($1754)+(2))|0);
10300 var $1756=$line;
10301 var $1757=(($1756+$1755)|0);
10302 HEAP8[($1757)]=0;
10303 label=122;break;
10304 case 122:
10305 var $1759=$count;
10306 var $1760=((($1759)-(1))|0);
10307 $count=$1760;
10308 var $1761=$x;
10309 var $1762=((($1761)+(1))|0);
10310 $x=$1762;
10311 var $1763=$mixmask;
10312 var $1764=($1763&255);
10313 var $1765=$1764<<1;
10314 var $1766=(($1765)&255);
10315 $mixmask=$1766;
10316 var $1767=$mixmask;
10317 var $1768=($1767&255);
10318 var $1769=($1768|0)==0;
10319 if($1769){label=123;break;}else{label=127;break;}
10320 case 123:
10321 var $1771=$fom_mask;
10322 var $1772=($1771|0)!=0;
10323 if($1772){label=124;break;}else{label=125;break;}
10324 case 124:
10325 var $1774=$fom_mask;
10326 var $1781=$1774;label=126;break;
10327 case 125:
10328 var $1776=$5;
10329 var $1777=(($1776+1)|0);
10330 $5=$1777;
10331 var $1778=HEAP8[($1776)];
10332 var $1779=($1778&255);
10333 var $1781=$1779;label=126;break;
10334 case 126:
10335 var $1781;
10336 var $1782=(($1781)&255);
10337 $mask=$1782;
10338 $mixmask=1;
10339 label=127;break;
10340 case 127:
10341 var $1784=$mask;
10342 var $1785=($1784&255);
10343 var $1786=$mixmask;
10344 var $1787=($1786&255);
10345 var $1788=$1785&$1787;
10346 var $1789=($1788|0)!=0;
10347 if($1789){label=128;break;}else{label=129;break;}
10348 case 128:
10349 var $1791=(($mix)|0);
10350 var $1792=HEAP8[($1791)];
10351 var $1793=$x;
10352 var $1794=((($1793)*(3))&-1);
10353 var $1795=$line;
10354 var $1796=(($1795+$1794)|0);
10355 HEAP8[($1796)]=$1792;
10356 var $1797=(($mix+1)|0);
10357 var $1798=HEAP8[($1797)];
10358 var $1799=$x;
10359 var $1800=((($1799)*(3))&-1);
10360 var $1801=((($1800)+(1))|0);
10361 var $1802=$line;
10362 var $1803=(($1802+$1801)|0);
10363 HEAP8[($1803)]=$1798;
10364 var $1804=(($mix+2)|0);
10365 var $1805=HEAP8[($1804)];
10366 var $1806=$x;
10367 var $1807=((($1806)*(3))&-1);
10368 var $1808=((($1807)+(2))|0);
10369 var $1809=$line;
10370 var $1810=(($1809+$1808)|0);
10371 HEAP8[($1810)]=$1805;
10372 label=130;break;
10373 case 129:
10374 var $1812=$x;
10375 var $1813=((($1812)*(3))&-1);
10376 var $1814=$line;
10377 var $1815=(($1814+$1813)|0);
10378 HEAP8[($1815)]=0;
10379 var $1816=$x;
10380 var $1817=((($1816)*(3))&-1);
10381 var $1818=((($1817)+(1))|0);
10382 var $1819=$line;
10383 var $1820=(($1819+$1818)|0);
10384 HEAP8[($1820)]=0;
10385 var $1821=$x;
10386 var $1822=((($1821)*(3))&-1);
10387 var $1823=((($1822)+(2))|0);
10388 var $1824=$line;
10389 var $1825=(($1824+$1823)|0);
10390 HEAP8[($1825)]=0;
10391 label=130;break;
10392 case 130:
10393 var $1827=$count;
10394 var $1828=((($1827)-(1))|0);
10395 $count=$1828;
10396 var $1829=$x;
10397 var $1830=((($1829)+(1))|0);
10398 $x=$1830;
10399 var $1831=$mixmask;
10400 var $1832=($1831&255);
10401 var $1833=$1832<<1;
10402 var $1834=(($1833)&255);
10403 $mixmask=$1834;
10404 var $1835=$mixmask;
10405 var $1836=($1835&255);
10406 var $1837=($1836|0)==0;
10407 if($1837){label=131;break;}else{label=135;break;}
10408 case 131:
10409 var $1839=$fom_mask;
10410 var $1840=($1839|0)!=0;
10411 if($1840){label=132;break;}else{label=133;break;}
10412 case 132:
10413 var $1842=$fom_mask;
10414 var $1849=$1842;label=134;break;
10415 case 133:
10416 var $1844=$5;
10417 var $1845=(($1844+1)|0);
10418 $5=$1845;
10419 var $1846=HEAP8[($1844)];
10420 var $1847=($1846&255);
10421 var $1849=$1847;label=134;break;
10422 case 134:
10423 var $1849;
10424 var $1850=(($1849)&255);
10425 $mask=$1850;
10426 $mixmask=1;
10427 label=135;break;
10428 case 135:
10429 var $1852=$mask;
10430 var $1853=($1852&255);
10431 var $1854=$mixmask;
10432 var $1855=($1854&255);
10433 var $1856=$1853&$1855;
10434 var $1857=($1856|0)!=0;
10435 if($1857){label=136;break;}else{label=137;break;}
10436 case 136:
10437 var $1859=(($mix)|0);
10438 var $1860=HEAP8[($1859)];
10439 var $1861=$x;
10440 var $1862=((($1861)*(3))&-1);
10441 var $1863=$line;
10442 var $1864=(($1863+$1862)|0);
10443 HEAP8[($1864)]=$1860;
10444 var $1865=(($mix+1)|0);
10445 var $1866=HEAP8[($1865)];
10446 var $1867=$x;
10447 var $1868=((($1867)*(3))&-1);
10448 var $1869=((($1868)+(1))|0);
10449 var $1870=$line;
10450 var $1871=(($1870+$1869)|0);
10451 HEAP8[($1871)]=$1866;
10452 var $1872=(($mix+2)|0);
10453 var $1873=HEAP8[($1872)];
10454 var $1874=$x;
10455 var $1875=((($1874)*(3))&-1);
10456 var $1876=((($1875)+(2))|0);
10457 var $1877=$line;
10458 var $1878=(($1877+$1876)|0);
10459 HEAP8[($1878)]=$1873;
10460 label=138;break;
10461 case 137:
10462 var $1880=$x;
10463 var $1881=((($1880)*(3))&-1);
10464 var $1882=$line;
10465 var $1883=(($1882+$1881)|0);
10466 HEAP8[($1883)]=0;
10467 var $1884=$x;
10468 var $1885=((($1884)*(3))&-1);
10469 var $1886=((($1885)+(1))|0);
10470 var $1887=$line;
10471 var $1888=(($1887+$1886)|0);
10472 HEAP8[($1888)]=0;
10473 var $1889=$x;
10474 var $1890=((($1889)*(3))&-1);
10475 var $1891=((($1890)+(2))|0);
10476 var $1892=$line;
10477 var $1893=(($1892+$1891)|0);
10478 HEAP8[($1893)]=0;
10479 label=138;break;
10480 case 138:
10481 var $1895=$count;
10482 var $1896=((($1895)-(1))|0);
10483 $count=$1896;
10484 var $1897=$x;
10485 var $1898=((($1897)+(1))|0);
10486 $x=$1898;
10487 var $1899=$mixmask;
10488 var $1900=($1899&255);
10489 var $1901=$1900<<1;
10490 var $1902=(($1901)&255);
10491 $mixmask=$1902;
10492 var $1903=$mixmask;
10493 var $1904=($1903&255);
10494 var $1905=($1904|0)==0;
10495 if($1905){label=139;break;}else{label=143;break;}
10496 case 139:
10497 var $1907=$fom_mask;
10498 var $1908=($1907|0)!=0;
10499 if($1908){label=140;break;}else{label=141;break;}
10500 case 140:
10501 var $1910=$fom_mask;
10502 var $1917=$1910;label=142;break;
10503 case 141:
10504 var $1912=$5;
10505 var $1913=(($1912+1)|0);
10506 $5=$1913;
10507 var $1914=HEAP8[($1912)];
10508 var $1915=($1914&255);
10509 var $1917=$1915;label=142;break;
10510 case 142:
10511 var $1917;
10512 var $1918=(($1917)&255);
10513 $mask=$1918;
10514 $mixmask=1;
10515 label=143;break;
10516 case 143:
10517 var $1920=$mask;
10518 var $1921=($1920&255);
10519 var $1922=$mixmask;
10520 var $1923=($1922&255);
10521 var $1924=$1921&$1923;
10522 var $1925=($1924|0)!=0;
10523 if($1925){label=144;break;}else{label=145;break;}
10524 case 144:
10525 var $1927=(($mix)|0);
10526 var $1928=HEAP8[($1927)];
10527 var $1929=$x;
10528 var $1930=((($1929)*(3))&-1);
10529 var $1931=$line;
10530 var $1932=(($1931+$1930)|0);
10531 HEAP8[($1932)]=$1928;
10532 var $1933=(($mix+1)|0);
10533 var $1934=HEAP8[($1933)];
10534 var $1935=$x;
10535 var $1936=((($1935)*(3))&-1);
10536 var $1937=((($1936)+(1))|0);
10537 var $1938=$line;
10538 var $1939=(($1938+$1937)|0);
10539 HEAP8[($1939)]=$1934;
10540 var $1940=(($mix+2)|0);
10541 var $1941=HEAP8[($1940)];
10542 var $1942=$x;
10543 var $1943=((($1942)*(3))&-1);
10544 var $1944=((($1943)+(2))|0);
10545 var $1945=$line;
10546 var $1946=(($1945+$1944)|0);
10547 HEAP8[($1946)]=$1941;
10548 label=146;break;
10549 case 145:
10550 var $1948=$x;
10551 var $1949=((($1948)*(3))&-1);
10552 var $1950=$line;
10553 var $1951=(($1950+$1949)|0);
10554 HEAP8[($1951)]=0;
10555 var $1952=$x;
10556 var $1953=((($1952)*(3))&-1);
10557 var $1954=((($1953)+(1))|0);
10558 var $1955=$line;
10559 var $1956=(($1955+$1954)|0);
10560 HEAP8[($1956)]=0;
10561 var $1957=$x;
10562 var $1958=((($1957)*(3))&-1);
10563 var $1959=((($1958)+(2))|0);
10564 var $1960=$line;
10565 var $1961=(($1960+$1959)|0);
10566 HEAP8[($1961)]=0;
10567 label=146;break;
10568 case 146:
10569 var $1963=$count;
10570 var $1964=((($1963)-(1))|0);
10571 $count=$1964;
10572 var $1965=$x;
10573 var $1966=((($1965)+(1))|0);
10574 $x=$1966;
10575 var $1967=$mixmask;
10576 var $1968=($1967&255);
10577 var $1969=$1968<<1;
10578 var $1970=(($1969)&255);
10579 $mixmask=$1970;
10580 var $1971=$mixmask;
10581 var $1972=($1971&255);
10582 var $1973=($1972|0)==0;
10583 if($1973){label=147;break;}else{label=151;break;}
10584 case 147:
10585 var $1975=$fom_mask;
10586 var $1976=($1975|0)!=0;
10587 if($1976){label=148;break;}else{label=149;break;}
10588 case 148:
10589 var $1978=$fom_mask;
10590 var $1985=$1978;label=150;break;
10591 case 149:
10592 var $1980=$5;
10593 var $1981=(($1980+1)|0);
10594 $5=$1981;
10595 var $1982=HEAP8[($1980)];
10596 var $1983=($1982&255);
10597 var $1985=$1983;label=150;break;
10598 case 150:
10599 var $1985;
10600 var $1986=(($1985)&255);
10601 $mask=$1986;
10602 $mixmask=1;
10603 label=151;break;
10604 case 151:
10605 var $1988=$mask;
10606 var $1989=($1988&255);
10607 var $1990=$mixmask;
10608 var $1991=($1990&255);
10609 var $1992=$1989&$1991;
10610 var $1993=($1992|0)!=0;
10611 if($1993){label=152;break;}else{label=153;break;}
10612 case 152:
10613 var $1995=(($mix)|0);
10614 var $1996=HEAP8[($1995)];
10615 var $1997=$x;
10616 var $1998=((($1997)*(3))&-1);
10617 var $1999=$line;
10618 var $2000=(($1999+$1998)|0);
10619 HEAP8[($2000)]=$1996;
10620 var $2001=(($mix+1)|0);
10621 var $2002=HEAP8[($2001)];
10622 var $2003=$x;
10623 var $2004=((($2003)*(3))&-1);
10624 var $2005=((($2004)+(1))|0);
10625 var $2006=$line;
10626 var $2007=(($2006+$2005)|0);
10627 HEAP8[($2007)]=$2002;
10628 var $2008=(($mix+2)|0);
10629 var $2009=HEAP8[($2008)];
10630 var $2010=$x;
10631 var $2011=((($2010)*(3))&-1);
10632 var $2012=((($2011)+(2))|0);
10633 var $2013=$line;
10634 var $2014=(($2013+$2012)|0);
10635 HEAP8[($2014)]=$2009;
10636 label=154;break;
10637 case 153:
10638 var $2016=$x;
10639 var $2017=((($2016)*(3))&-1);
10640 var $2018=$line;
10641 var $2019=(($2018+$2017)|0);
10642 HEAP8[($2019)]=0;
10643 var $2020=$x;
10644 var $2021=((($2020)*(3))&-1);
10645 var $2022=((($2021)+(1))|0);
10646 var $2023=$line;
10647 var $2024=(($2023+$2022)|0);
10648 HEAP8[($2024)]=0;
10649 var $2025=$x;
10650 var $2026=((($2025)*(3))&-1);
10651 var $2027=((($2026)+(2))|0);
10652 var $2028=$line;
10653 var $2029=(($2028+$2027)|0);
10654 HEAP8[($2029)]=0;
10655 label=154;break;
10656 case 154:
10657 var $2031=$count;
10658 var $2032=((($2031)-(1))|0);
10659 $count=$2032;
10660 var $2033=$x;
10661 var $2034=((($2033)+(1))|0);
10662 $x=$2034;
10663 var $2035=$mixmask;
10664 var $2036=($2035&255);
10665 var $2037=$2036<<1;
10666 var $2038=(($2037)&255);
10667 $mixmask=$2038;
10668 var $2039=$mixmask;
10669 var $2040=($2039&255);
10670 var $2041=($2040|0)==0;
10671 if($2041){label=155;break;}else{label=159;break;}
10672 case 155:
10673 var $2043=$fom_mask;
10674 var $2044=($2043|0)!=0;
10675 if($2044){label=156;break;}else{label=157;break;}
10676 case 156:
10677 var $2046=$fom_mask;
10678 var $2053=$2046;label=158;break;
10679 case 157:
10680 var $2048=$5;
10681 var $2049=(($2048+1)|0);
10682 $5=$2049;
10683 var $2050=HEAP8[($2048)];
10684 var $2051=($2050&255);
10685 var $2053=$2051;label=158;break;
10686 case 158:
10687 var $2053;
10688 var $2054=(($2053)&255);
10689 $mask=$2054;
10690 $mixmask=1;
10691 label=159;break;
10692 case 159:
10693 var $2056=$mask;
10694 var $2057=($2056&255);
10695 var $2058=$mixmask;
10696 var $2059=($2058&255);
10697 var $2060=$2057&$2059;
10698 var $2061=($2060|0)!=0;
10699 if($2061){label=160;break;}else{label=161;break;}
10700 case 160:
10701 var $2063=(($mix)|0);
10702 var $2064=HEAP8[($2063)];
10703 var $2065=$x;
10704 var $2066=((($2065)*(3))&-1);
10705 var $2067=$line;
10706 var $2068=(($2067+$2066)|0);
10707 HEAP8[($2068)]=$2064;
10708 var $2069=(($mix+1)|0);
10709 var $2070=HEAP8[($2069)];
10710 var $2071=$x;
10711 var $2072=((($2071)*(3))&-1);
10712 var $2073=((($2072)+(1))|0);
10713 var $2074=$line;
10714 var $2075=(($2074+$2073)|0);
10715 HEAP8[($2075)]=$2070;
10716 var $2076=(($mix+2)|0);
10717 var $2077=HEAP8[($2076)];
10718 var $2078=$x;
10719 var $2079=((($2078)*(3))&-1);
10720 var $2080=((($2079)+(2))|0);
10721 var $2081=$line;
10722 var $2082=(($2081+$2080)|0);
10723 HEAP8[($2082)]=$2077;
10724 label=162;break;
10725 case 161:
10726 var $2084=$x;
10727 var $2085=((($2084)*(3))&-1);
10728 var $2086=$line;
10729 var $2087=(($2086+$2085)|0);
10730 HEAP8[($2087)]=0;
10731 var $2088=$x;
10732 var $2089=((($2088)*(3))&-1);
10733 var $2090=((($2089)+(1))|0);
10734 var $2091=$line;
10735 var $2092=(($2091+$2090)|0);
10736 HEAP8[($2092)]=0;
10737 var $2093=$x;
10738 var $2094=((($2093)*(3))&-1);
10739 var $2095=((($2094)+(2))|0);
10740 var $2096=$line;
10741 var $2097=(($2096+$2095)|0);
10742 HEAP8[($2097)]=0;
10743 label=162;break;
10744 case 162:
10745 var $2099=$count;
10746 var $2100=((($2099)-(1))|0);
10747 $count=$2100;
10748 var $2101=$x;
10749 var $2102=((($2101)+(1))|0);
10750 $x=$2102;
10751 label=95;break;
10752 case 163:
10753 label=164;break;
10754 case 164:
10755 var $2105=$count;
10756 var $2106=($2105|0)>0;
10757 if($2106){label=165;break;}else{var $2112=0;label=166;break;}
10758 case 165:
10759 var $2108=$x;
10760 var $2109=$3;
10761 var $2110=($2108|0)<($2109|0);
10762 var $2112=$2110;label=166;break;
10763 case 166:
10764 var $2112;
10765 if($2112){label=167;break;}else{label=176;break;}
10766 case 167:
10767 var $2114=$mixmask;
10768 var $2115=($2114&255);
10769 var $2116=$2115<<1;
10770 var $2117=(($2116)&255);
10771 $mixmask=$2117;
10772 var $2118=$mixmask;
10773 var $2119=($2118&255);
10774 var $2120=($2119|0)==0;
10775 if($2120){label=168;break;}else{label=172;break;}
10776 case 168:
10777 var $2122=$fom_mask;
10778 var $2123=($2122|0)!=0;
10779 if($2123){label=169;break;}else{label=170;break;}
10780 case 169:
10781 var $2125=$fom_mask;
10782 var $2132=$2125;label=171;break;
10783 case 170:
10784 var $2127=$5;
10785 var $2128=(($2127+1)|0);
10786 $5=$2128;
10787 var $2129=HEAP8[($2127)];
10788 var $2130=($2129&255);
10789 var $2132=$2130;label=171;break;
10790 case 171:
10791 var $2132;
10792 var $2133=(($2132)&255);
10793 $mask=$2133;
10794 $mixmask=1;
10795 label=172;break;
10796 case 172:
10797 var $2135=$mask;
10798 var $2136=($2135&255);
10799 var $2137=$mixmask;
10800 var $2138=($2137&255);
10801 var $2139=$2136&$2138;
10802 var $2140=($2139|0)!=0;
10803 if($2140){label=173;break;}else{label=174;break;}
10804 case 173:
10805 var $2142=(($mix)|0);
10806 var $2143=HEAP8[($2142)];
10807 var $2144=$x;
10808 var $2145=((($2144)*(3))&-1);
10809 var $2146=$line;
10810 var $2147=(($2146+$2145)|0);
10811 HEAP8[($2147)]=$2143;
10812 var $2148=(($mix+1)|0);
10813 var $2149=HEAP8[($2148)];
10814 var $2150=$x;
10815 var $2151=((($2150)*(3))&-1);
10816 var $2152=((($2151)+(1))|0);
10817 var $2153=$line;
10818 var $2154=(($2153+$2152)|0);
10819 HEAP8[($2154)]=$2149;
10820 var $2155=(($mix+2)|0);
10821 var $2156=HEAP8[($2155)];
10822 var $2157=$x;
10823 var $2158=((($2157)*(3))&-1);
10824 var $2159=((($2158)+(2))|0);
10825 var $2160=$line;
10826 var $2161=(($2160+$2159)|0);
10827 HEAP8[($2161)]=$2156;
10828 label=175;break;
10829 case 174:
10830 var $2163=$x;
10831 var $2164=((($2163)*(3))&-1);
10832 var $2165=$line;
10833 var $2166=(($2165+$2164)|0);
10834 HEAP8[($2166)]=0;
10835 var $2167=$x;
10836 var $2168=((($2167)*(3))&-1);
10837 var $2169=((($2168)+(1))|0);
10838 var $2170=$line;
10839 var $2171=(($2170+$2169)|0);
10840 HEAP8[($2171)]=0;
10841 var $2172=$x;
10842 var $2173=((($2172)*(3))&-1);
10843 var $2174=((($2173)+(2))|0);
10844 var $2175=$line;
10845 var $2176=(($2175+$2174)|0);
10846 HEAP8[($2176)]=0;
10847 label=175;break;
10848 case 175:
10849 var $2178=$count;
10850 var $2179=((($2178)-(1))|0);
10851 $count=$2179;
10852 var $2180=$x;
10853 var $2181=((($2180)+(1))|0);
10854 $x=$2181;
10855 label=164;break;
10856 case 176:
10857 label=260;break;
10858 case 177:
10859 label=178;break;
10860 case 178:
10861 var $2185=$count;
10862 var $2186=$2185&-8;
10863 var $2187=($2186|0)!=0;
10864 if($2187){label=179;break;}else{var $2194=0;label=180;break;}
10865 case 179:
10866 var $2189=$x;
10867 var $2190=((($2189)+(8))|0);
10868 var $2191=$3;
10869 var $2192=($2190|0)<($2191|0);
10870 var $2194=$2192;label=180;break;
10871 case 180:
10872 var $2194;
10873 if($2194){label=181;break;}else{label=246;break;}
10874 case 181:
10875 var $2196=$mixmask;
10876 var $2197=($2196&255);
10877 var $2198=$2197<<1;
10878 var $2199=(($2198)&255);
10879 $mixmask=$2199;
10880 var $2200=$mixmask;
10881 var $2201=($2200&255);
10882 var $2202=($2201|0)==0;
10883 if($2202){label=182;break;}else{label=186;break;}
10884 case 182:
10885 var $2204=$fom_mask;
10886 var $2205=($2204|0)!=0;
10887 if($2205){label=183;break;}else{label=184;break;}
10888 case 183:
10889 var $2207=$fom_mask;
10890 var $2214=$2207;label=185;break;
10891 case 184:
10892 var $2209=$5;
10893 var $2210=(($2209+1)|0);
10894 $5=$2210;
10895 var $2211=HEAP8[($2209)];
10896 var $2212=($2211&255);
10897 var $2214=$2212;label=185;break;
10898 case 185:
10899 var $2214;
10900 var $2215=(($2214)&255);
10901 $mask=$2215;
10902 $mixmask=1;
10903 label=186;break;
10904 case 186:
10905 var $2217=$mask;
10906 var $2218=($2217&255);
10907 var $2219=$mixmask;
10908 var $2220=($2219&255);
10909 var $2221=$2218&$2220;
10910 var $2222=($2221|0)!=0;
10911 if($2222){label=187;break;}else{label=188;break;}
10912 case 187:
10913 var $2224=$x;
10914 var $2225=((($2224)*(3))&-1);
10915 var $2226=$prevline;
10916 var $2227=(($2226+$2225)|0);
10917 var $2228=HEAP8[($2227)];
10918 var $2229=($2228&255);
10919 var $2230=(($mix)|0);
10920 var $2231=HEAP8[($2230)];
10921 var $2232=($2231&255);
10922 var $2233=$2229^$2232;
10923 var $2234=(($2233)&255);
10924 var $2235=$x;
10925 var $2236=((($2235)*(3))&-1);
10926 var $2237=$line;
10927 var $2238=(($2237+$2236)|0);
10928 HEAP8[($2238)]=$2234;
10929 var $2239=$x;
10930 var $2240=((($2239)*(3))&-1);
10931 var $2241=((($2240)+(1))|0);
10932 var $2242=$prevline;
10933 var $2243=(($2242+$2241)|0);
10934 var $2244=HEAP8[($2243)];
10935 var $2245=($2244&255);
10936 var $2246=(($mix+1)|0);
10937 var $2247=HEAP8[($2246)];
10938 var $2248=($2247&255);
10939 var $2249=$2245^$2248;
10940 var $2250=(($2249)&255);
10941 var $2251=$x;
10942 var $2252=((($2251)*(3))&-1);
10943 var $2253=((($2252)+(1))|0);
10944 var $2254=$line;
10945 var $2255=(($2254+$2253)|0);
10946 HEAP8[($2255)]=$2250;
10947 var $2256=$x;
10948 var $2257=((($2256)*(3))&-1);
10949 var $2258=((($2257)+(2))|0);
10950 var $2259=$prevline;
10951 var $2260=(($2259+$2258)|0);
10952 var $2261=HEAP8[($2260)];
10953 var $2262=($2261&255);
10954 var $2263=(($mix+2)|0);
10955 var $2264=HEAP8[($2263)];
10956 var $2265=($2264&255);
10957 var $2266=$2262^$2265;
10958 var $2267=(($2266)&255);
10959 var $2268=$x;
10960 var $2269=((($2268)*(3))&-1);
10961 var $2270=((($2269)+(2))|0);
10962 var $2271=$line;
10963 var $2272=(($2271+$2270)|0);
10964 HEAP8[($2272)]=$2267;
10965 label=189;break;
10966 case 188:
10967 var $2274=$x;
10968 var $2275=((($2274)*(3))&-1);
10969 var $2276=$prevline;
10970 var $2277=(($2276+$2275)|0);
10971 var $2278=HEAP8[($2277)];
10972 var $2279=$x;
10973 var $2280=((($2279)*(3))&-1);
10974 var $2281=$line;
10975 var $2282=(($2281+$2280)|0);
10976 HEAP8[($2282)]=$2278;
10977 var $2283=$x;
10978 var $2284=((($2283)*(3))&-1);
10979 var $2285=((($2284)+(1))|0);
10980 var $2286=$prevline;
10981 var $2287=(($2286+$2285)|0);
10982 var $2288=HEAP8[($2287)];
10983 var $2289=$x;
10984 var $2290=((($2289)*(3))&-1);
10985 var $2291=((($2290)+(1))|0);
10986 var $2292=$line;
10987 var $2293=(($2292+$2291)|0);
10988 HEAP8[($2293)]=$2288;
10989 var $2294=$x;
10990 var $2295=((($2294)*(3))&-1);
10991 var $2296=((($2295)+(2))|0);
10992 var $2297=$prevline;
10993 var $2298=(($2297+$2296)|0);
10994 var $2299=HEAP8[($2298)];
10995 var $2300=$x;
10996 var $2301=((($2300)*(3))&-1);
10997 var $2302=((($2301)+(2))|0);
10998 var $2303=$line;
10999 var $2304=(($2303+$2302)|0);
11000 HEAP8[($2304)]=$2299;
11001 label=189;break;
11002 case 189:
11003 var $2306=$count;
11004 var $2307=((($2306)-(1))|0);
11005 $count=$2307;
11006 var $2308=$x;
11007 var $2309=((($2308)+(1))|0);
11008 $x=$2309;
11009 var $2310=$mixmask;
11010 var $2311=($2310&255);
11011 var $2312=$2311<<1;
11012 var $2313=(($2312)&255);
11013 $mixmask=$2313;
11014 var $2314=$mixmask;
11015 var $2315=($2314&255);
11016 var $2316=($2315|0)==0;
11017 if($2316){label=190;break;}else{label=194;break;}
11018 case 190:
11019 var $2318=$fom_mask;
11020 var $2319=($2318|0)!=0;
11021 if($2319){label=191;break;}else{label=192;break;}
11022 case 191:
11023 var $2321=$fom_mask;
11024 var $2328=$2321;label=193;break;
11025 case 192:
11026 var $2323=$5;
11027 var $2324=(($2323+1)|0);
11028 $5=$2324;
11029 var $2325=HEAP8[($2323)];
11030 var $2326=($2325&255);
11031 var $2328=$2326;label=193;break;
11032 case 193:
11033 var $2328;
11034 var $2329=(($2328)&255);
11035 $mask=$2329;
11036 $mixmask=1;
11037 label=194;break;
11038 case 194:
11039 var $2331=$mask;
11040 var $2332=($2331&255);
11041 var $2333=$mixmask;
11042 var $2334=($2333&255);
11043 var $2335=$2332&$2334;
11044 var $2336=($2335|0)!=0;
11045 if($2336){label=195;break;}else{label=196;break;}
11046 case 195:
11047 var $2338=$x;
11048 var $2339=((($2338)*(3))&-1);
11049 var $2340=$prevline;
11050 var $2341=(($2340+$2339)|0);
11051 var $2342=HEAP8[($2341)];
11052 var $2343=($2342&255);
11053 var $2344=(($mix)|0);
11054 var $2345=HEAP8[($2344)];
11055 var $2346=($2345&255);
11056 var $2347=$2343^$2346;
11057 var $2348=(($2347)&255);
11058 var $2349=$x;
11059 var $2350=((($2349)*(3))&-1);
11060 var $2351=$line;
11061 var $2352=(($2351+$2350)|0);
11062 HEAP8[($2352)]=$2348;
11063 var $2353=$x;
11064 var $2354=((($2353)*(3))&-1);
11065 var $2355=((($2354)+(1))|0);
11066 var $2356=$prevline;
11067 var $2357=(($2356+$2355)|0);
11068 var $2358=HEAP8[($2357)];
11069 var $2359=($2358&255);
11070 var $2360=(($mix+1)|0);
11071 var $2361=HEAP8[($2360)];
11072 var $2362=($2361&255);
11073 var $2363=$2359^$2362;
11074 var $2364=(($2363)&255);
11075 var $2365=$x;
11076 var $2366=((($2365)*(3))&-1);
11077 var $2367=((($2366)+(1))|0);
11078 var $2368=$line;
11079 var $2369=(($2368+$2367)|0);
11080 HEAP8[($2369)]=$2364;
11081 var $2370=$x;
11082 var $2371=((($2370)*(3))&-1);
11083 var $2372=((($2371)+(2))|0);
11084 var $2373=$prevline;
11085 var $2374=(($2373+$2372)|0);
11086 var $2375=HEAP8[($2374)];
11087 var $2376=($2375&255);
11088 var $2377=(($mix+2)|0);
11089 var $2378=HEAP8[($2377)];
11090 var $2379=($2378&255);
11091 var $2380=$2376^$2379;
11092 var $2381=(($2380)&255);
11093 var $2382=$x;
11094 var $2383=((($2382)*(3))&-1);
11095 var $2384=((($2383)+(2))|0);
11096 var $2385=$line;
11097 var $2386=(($2385+$2384)|0);
11098 HEAP8[($2386)]=$2381;
11099 label=197;break;
11100 case 196:
11101 var $2388=$x;
11102 var $2389=((($2388)*(3))&-1);
11103 var $2390=$prevline;
11104 var $2391=(($2390+$2389)|0);
11105 var $2392=HEAP8[($2391)];
11106 var $2393=$x;
11107 var $2394=((($2393)*(3))&-1);
11108 var $2395=$line;
11109 var $2396=(($2395+$2394)|0);
11110 HEAP8[($2396)]=$2392;
11111 var $2397=$x;
11112 var $2398=((($2397)*(3))&-1);
11113 var $2399=((($2398)+(1))|0);
11114 var $2400=$prevline;
11115 var $2401=(($2400+$2399)|0);
11116 var $2402=HEAP8[($2401)];
11117 var $2403=$x;
11118 var $2404=((($2403)*(3))&-1);
11119 var $2405=((($2404)+(1))|0);
11120 var $2406=$line;
11121 var $2407=(($2406+$2405)|0);
11122 HEAP8[($2407)]=$2402;
11123 var $2408=$x;
11124 var $2409=((($2408)*(3))&-1);
11125 var $2410=((($2409)+(2))|0);
11126 var $2411=$prevline;
11127 var $2412=(($2411+$2410)|0);
11128 var $2413=HEAP8[($2412)];
11129 var $2414=$x;
11130 var $2415=((($2414)*(3))&-1);
11131 var $2416=((($2415)+(2))|0);
11132 var $2417=$line;
11133 var $2418=(($2417+$2416)|0);
11134 HEAP8[($2418)]=$2413;
11135 label=197;break;
11136 case 197:
11137 var $2420=$count;
11138 var $2421=((($2420)-(1))|0);
11139 $count=$2421;
11140 var $2422=$x;
11141 var $2423=((($2422)+(1))|0);
11142 $x=$2423;
11143 var $2424=$mixmask;
11144 var $2425=($2424&255);
11145 var $2426=$2425<<1;
11146 var $2427=(($2426)&255);
11147 $mixmask=$2427;
11148 var $2428=$mixmask;
11149 var $2429=($2428&255);
11150 var $2430=($2429|0)==0;
11151 if($2430){label=198;break;}else{label=202;break;}
11152 case 198:
11153 var $2432=$fom_mask;
11154 var $2433=($2432|0)!=0;
11155 if($2433){label=199;break;}else{label=200;break;}
11156 case 199:
11157 var $2435=$fom_mask;
11158 var $2442=$2435;label=201;break;
11159 case 200:
11160 var $2437=$5;
11161 var $2438=(($2437+1)|0);
11162 $5=$2438;
11163 var $2439=HEAP8[($2437)];
11164 var $2440=($2439&255);
11165 var $2442=$2440;label=201;break;
11166 case 201:
11167 var $2442;
11168 var $2443=(($2442)&255);
11169 $mask=$2443;
11170 $mixmask=1;
11171 label=202;break;
11172 case 202:
11173 var $2445=$mask;
11174 var $2446=($2445&255);
11175 var $2447=$mixmask;
11176 var $2448=($2447&255);
11177 var $2449=$2446&$2448;
11178 var $2450=($2449|0)!=0;
11179 if($2450){label=203;break;}else{label=204;break;}
11180 case 203:
11181 var $2452=$x;
11182 var $2453=((($2452)*(3))&-1);
11183 var $2454=$prevline;
11184 var $2455=(($2454+$2453)|0);
11185 var $2456=HEAP8[($2455)];
11186 var $2457=($2456&255);
11187 var $2458=(($mix)|0);
11188 var $2459=HEAP8[($2458)];
11189 var $2460=($2459&255);
11190 var $2461=$2457^$2460;
11191 var $2462=(($2461)&255);
11192 var $2463=$x;
11193 var $2464=((($2463)*(3))&-1);
11194 var $2465=$line;
11195 var $2466=(($2465+$2464)|0);
11196 HEAP8[($2466)]=$2462;
11197 var $2467=$x;
11198 var $2468=((($2467)*(3))&-1);
11199 var $2469=((($2468)+(1))|0);
11200 var $2470=$prevline;
11201 var $2471=(($2470+$2469)|0);
11202 var $2472=HEAP8[($2471)];
11203 var $2473=($2472&255);
11204 var $2474=(($mix+1)|0);
11205 var $2475=HEAP8[($2474)];
11206 var $2476=($2475&255);
11207 var $2477=$2473^$2476;
11208 var $2478=(($2477)&255);
11209 var $2479=$x;
11210 var $2480=((($2479)*(3))&-1);
11211 var $2481=((($2480)+(1))|0);
11212 var $2482=$line;
11213 var $2483=(($2482+$2481)|0);
11214 HEAP8[($2483)]=$2478;
11215 var $2484=$x;
11216 var $2485=((($2484)*(3))&-1);
11217 var $2486=((($2485)+(2))|0);
11218 var $2487=$prevline;
11219 var $2488=(($2487+$2486)|0);
11220 var $2489=HEAP8[($2488)];
11221 var $2490=($2489&255);
11222 var $2491=(($mix+2)|0);
11223 var $2492=HEAP8[($2491)];
11224 var $2493=($2492&255);
11225 var $2494=$2490^$2493;
11226 var $2495=(($2494)&255);
11227 var $2496=$x;
11228 var $2497=((($2496)*(3))&-1);
11229 var $2498=((($2497)+(2))|0);
11230 var $2499=$line;
11231 var $2500=(($2499+$2498)|0);
11232 HEAP8[($2500)]=$2495;
11233 label=205;break;
11234 case 204:
11235 var $2502=$x;
11236 var $2503=((($2502)*(3))&-1);
11237 var $2504=$prevline;
11238 var $2505=(($2504+$2503)|0);
11239 var $2506=HEAP8[($2505)];
11240 var $2507=$x;
11241 var $2508=((($2507)*(3))&-1);
11242 var $2509=$line;
11243 var $2510=(($2509+$2508)|0);
11244 HEAP8[($2510)]=$2506;
11245 var $2511=$x;
11246 var $2512=((($2511)*(3))&-1);
11247 var $2513=((($2512)+(1))|0);
11248 var $2514=$prevline;
11249 var $2515=(($2514+$2513)|0);
11250 var $2516=HEAP8[($2515)];
11251 var $2517=$x;
11252 var $2518=((($2517)*(3))&-1);
11253 var $2519=((($2518)+(1))|0);
11254 var $2520=$line;
11255 var $2521=(($2520+$2519)|0);
11256 HEAP8[($2521)]=$2516;
11257 var $2522=$x;
11258 var $2523=((($2522)*(3))&-1);
11259 var $2524=((($2523)+(2))|0);
11260 var $2525=$prevline;
11261 var $2526=(($2525+$2524)|0);
11262 var $2527=HEAP8[($2526)];
11263 var $2528=$x;
11264 var $2529=((($2528)*(3))&-1);
11265 var $2530=((($2529)+(2))|0);
11266 var $2531=$line;
11267 var $2532=(($2531+$2530)|0);
11268 HEAP8[($2532)]=$2527;
11269 label=205;break;
11270 case 205:
11271 var $2534=$count;
11272 var $2535=((($2534)-(1))|0);
11273 $count=$2535;
11274 var $2536=$x;
11275 var $2537=((($2536)+(1))|0);
11276 $x=$2537;
11277 var $2538=$mixmask;
11278 var $2539=($2538&255);
11279 var $2540=$2539<<1;
11280 var $2541=(($2540)&255);
11281 $mixmask=$2541;
11282 var $2542=$mixmask;
11283 var $2543=($2542&255);
11284 var $2544=($2543|0)==0;
11285 if($2544){label=206;break;}else{label=210;break;}
11286 case 206:
11287 var $2546=$fom_mask;
11288 var $2547=($2546|0)!=0;
11289 if($2547){label=207;break;}else{label=208;break;}
11290 case 207:
11291 var $2549=$fom_mask;
11292 var $2556=$2549;label=209;break;
11293 case 208:
11294 var $2551=$5;
11295 var $2552=(($2551+1)|0);
11296 $5=$2552;
11297 var $2553=HEAP8[($2551)];
11298 var $2554=($2553&255);
11299 var $2556=$2554;label=209;break;
11300 case 209:
11301 var $2556;
11302 var $2557=(($2556)&255);
11303 $mask=$2557;
11304 $mixmask=1;
11305 label=210;break;
11306 case 210:
11307 var $2559=$mask;
11308 var $2560=($2559&255);
11309 var $2561=$mixmask;
11310 var $2562=($2561&255);
11311 var $2563=$2560&$2562;
11312 var $2564=($2563|0)!=0;
11313 if($2564){label=211;break;}else{label=212;break;}
11314 case 211:
11315 var $2566=$x;
11316 var $2567=((($2566)*(3))&-1);
11317 var $2568=$prevline;
11318 var $2569=(($2568+$2567)|0);
11319 var $2570=HEAP8[($2569)];
11320 var $2571=($2570&255);
11321 var $2572=(($mix)|0);
11322 var $2573=HEAP8[($2572)];
11323 var $2574=($2573&255);
11324 var $2575=$2571^$2574;
11325 var $2576=(($2575)&255);
11326 var $2577=$x;
11327 var $2578=((($2577)*(3))&-1);
11328 var $2579=$line;
11329 var $2580=(($2579+$2578)|0);
11330 HEAP8[($2580)]=$2576;
11331 var $2581=$x;
11332 var $2582=((($2581)*(3))&-1);
11333 var $2583=((($2582)+(1))|0);
11334 var $2584=$prevline;
11335 var $2585=(($2584+$2583)|0);
11336 var $2586=HEAP8[($2585)];
11337 var $2587=($2586&255);
11338 var $2588=(($mix+1)|0);
11339 var $2589=HEAP8[($2588)];
11340 var $2590=($2589&255);
11341 var $2591=$2587^$2590;
11342 var $2592=(($2591)&255);
11343 var $2593=$x;
11344 var $2594=((($2593)*(3))&-1);
11345 var $2595=((($2594)+(1))|0);
11346 var $2596=$line;
11347 var $2597=(($2596+$2595)|0);
11348 HEAP8[($2597)]=$2592;
11349 var $2598=$x;
11350 var $2599=((($2598)*(3))&-1);
11351 var $2600=((($2599)+(2))|0);
11352 var $2601=$prevline;
11353 var $2602=(($2601+$2600)|0);
11354 var $2603=HEAP8[($2602)];
11355 var $2604=($2603&255);
11356 var $2605=(($mix+2)|0);
11357 var $2606=HEAP8[($2605)];
11358 var $2607=($2606&255);
11359 var $2608=$2604^$2607;
11360 var $2609=(($2608)&255);
11361 var $2610=$x;
11362 var $2611=((($2610)*(3))&-1);
11363 var $2612=((($2611)+(2))|0);
11364 var $2613=$line;
11365 var $2614=(($2613+$2612)|0);
11366 HEAP8[($2614)]=$2609;
11367 label=213;break;
11368 case 212:
11369 var $2616=$x;
11370 var $2617=((($2616)*(3))&-1);
11371 var $2618=$prevline;
11372 var $2619=(($2618+$2617)|0);
11373 var $2620=HEAP8[($2619)];
11374 var $2621=$x;
11375 var $2622=((($2621)*(3))&-1);
11376 var $2623=$line;
11377 var $2624=(($2623+$2622)|0);
11378 HEAP8[($2624)]=$2620;
11379 var $2625=$x;
11380 var $2626=((($2625)*(3))&-1);
11381 var $2627=((($2626)+(1))|0);
11382 var $2628=$prevline;
11383 var $2629=(($2628+$2627)|0);
11384 var $2630=HEAP8[($2629)];
11385 var $2631=$x;
11386 var $2632=((($2631)*(3))&-1);
11387 var $2633=((($2632)+(1))|0);
11388 var $2634=$line;
11389 var $2635=(($2634+$2633)|0);
11390 HEAP8[($2635)]=$2630;
11391 var $2636=$x;
11392 var $2637=((($2636)*(3))&-1);
11393 var $2638=((($2637)+(2))|0);
11394 var $2639=$prevline;
11395 var $2640=(($2639+$2638)|0);
11396 var $2641=HEAP8[($2640)];
11397 var $2642=$x;
11398 var $2643=((($2642)*(3))&-1);
11399 var $2644=((($2643)+(2))|0);
11400 var $2645=$line;
11401 var $2646=(($2645+$2644)|0);
11402 HEAP8[($2646)]=$2641;
11403 label=213;break;
11404 case 213:
11405 var $2648=$count;
11406 var $2649=((($2648)-(1))|0);
11407 $count=$2649;
11408 var $2650=$x;
11409 var $2651=((($2650)+(1))|0);
11410 $x=$2651;
11411 var $2652=$mixmask;
11412 var $2653=($2652&255);
11413 var $2654=$2653<<1;
11414 var $2655=(($2654)&255);
11415 $mixmask=$2655;
11416 var $2656=$mixmask;
11417 var $2657=($2656&255);
11418 var $2658=($2657|0)==0;
11419 if($2658){label=214;break;}else{label=218;break;}
11420 case 214:
11421 var $2660=$fom_mask;
11422 var $2661=($2660|0)!=0;
11423 if($2661){label=215;break;}else{label=216;break;}
11424 case 215:
11425 var $2663=$fom_mask;
11426 var $2670=$2663;label=217;break;
11427 case 216:
11428 var $2665=$5;
11429 var $2666=(($2665+1)|0);
11430 $5=$2666;
11431 var $2667=HEAP8[($2665)];
11432 var $2668=($2667&255);
11433 var $2670=$2668;label=217;break;
11434 case 217:
11435 var $2670;
11436 var $2671=(($2670)&255);
11437 $mask=$2671;
11438 $mixmask=1;
11439 label=218;break;
11440 case 218:
11441 var $2673=$mask;
11442 var $2674=($2673&255);
11443 var $2675=$mixmask;
11444 var $2676=($2675&255);
11445 var $2677=$2674&$2676;
11446 var $2678=($2677|0)!=0;
11447 if($2678){label=219;break;}else{label=220;break;}
11448 case 219:
11449 var $2680=$x;
11450 var $2681=((($2680)*(3))&-1);
11451 var $2682=$prevline;
11452 var $2683=(($2682+$2681)|0);
11453 var $2684=HEAP8[($2683)];
11454 var $2685=($2684&255);
11455 var $2686=(($mix)|0);
11456 var $2687=HEAP8[($2686)];
11457 var $2688=($2687&255);
11458 var $2689=$2685^$2688;
11459 var $2690=(($2689)&255);
11460 var $2691=$x;
11461 var $2692=((($2691)*(3))&-1);
11462 var $2693=$line;
11463 var $2694=(($2693+$2692)|0);
11464 HEAP8[($2694)]=$2690;
11465 var $2695=$x;
11466 var $2696=((($2695)*(3))&-1);
11467 var $2697=((($2696)+(1))|0);
11468 var $2698=$prevline;
11469 var $2699=(($2698+$2697)|0);
11470 var $2700=HEAP8[($2699)];
11471 var $2701=($2700&255);
11472 var $2702=(($mix+1)|0);
11473 var $2703=HEAP8[($2702)];
11474 var $2704=($2703&255);
11475 var $2705=$2701^$2704;
11476 var $2706=(($2705)&255);
11477 var $2707=$x;
11478 var $2708=((($2707)*(3))&-1);
11479 var $2709=((($2708)+(1))|0);
11480 var $2710=$line;
11481 var $2711=(($2710+$2709)|0);
11482 HEAP8[($2711)]=$2706;
11483 var $2712=$x;
11484 var $2713=((($2712)*(3))&-1);
11485 var $2714=((($2713)+(2))|0);
11486 var $2715=$prevline;
11487 var $2716=(($2715+$2714)|0);
11488 var $2717=HEAP8[($2716)];
11489 var $2718=($2717&255);
11490 var $2719=(($mix+2)|0);
11491 var $2720=HEAP8[($2719)];
11492 var $2721=($2720&255);
11493 var $2722=$2718^$2721;
11494 var $2723=(($2722)&255);
11495 var $2724=$x;
11496 var $2725=((($2724)*(3))&-1);
11497 var $2726=((($2725)+(2))|0);
11498 var $2727=$line;
11499 var $2728=(($2727+$2726)|0);
11500 HEAP8[($2728)]=$2723;
11501 label=221;break;
11502 case 220:
11503 var $2730=$x;
11504 var $2731=((($2730)*(3))&-1);
11505 var $2732=$prevline;
11506 var $2733=(($2732+$2731)|0);
11507 var $2734=HEAP8[($2733)];
11508 var $2735=$x;
11509 var $2736=((($2735)*(3))&-1);
11510 var $2737=$line;
11511 var $2738=(($2737+$2736)|0);
11512 HEAP8[($2738)]=$2734;
11513 var $2739=$x;
11514 var $2740=((($2739)*(3))&-1);
11515 var $2741=((($2740)+(1))|0);
11516 var $2742=$prevline;
11517 var $2743=(($2742+$2741)|0);
11518 var $2744=HEAP8[($2743)];
11519 var $2745=$x;
11520 var $2746=((($2745)*(3))&-1);
11521 var $2747=((($2746)+(1))|0);
11522 var $2748=$line;
11523 var $2749=(($2748+$2747)|0);
11524 HEAP8[($2749)]=$2744;
11525 var $2750=$x;
11526 var $2751=((($2750)*(3))&-1);
11527 var $2752=((($2751)+(2))|0);
11528 var $2753=$prevline;
11529 var $2754=(($2753+$2752)|0);
11530 var $2755=HEAP8[($2754)];
11531 var $2756=$x;
11532 var $2757=((($2756)*(3))&-1);
11533 var $2758=((($2757)+(2))|0);
11534 var $2759=$line;
11535 var $2760=(($2759+$2758)|0);
11536 HEAP8[($2760)]=$2755;
11537 label=221;break;
11538 case 221:
11539 var $2762=$count;
11540 var $2763=((($2762)-(1))|0);
11541 $count=$2763;
11542 var $2764=$x;
11543 var $2765=((($2764)+(1))|0);
11544 $x=$2765;
11545 var $2766=$mixmask;
11546 var $2767=($2766&255);
11547 var $2768=$2767<<1;
11548 var $2769=(($2768)&255);
11549 $mixmask=$2769;
11550 var $2770=$mixmask;
11551 var $2771=($2770&255);
11552 var $2772=($2771|0)==0;
11553 if($2772){label=222;break;}else{label=226;break;}
11554 case 222:
11555 var $2774=$fom_mask;
11556 var $2775=($2774|0)!=0;
11557 if($2775){label=223;break;}else{label=224;break;}
11558 case 223:
11559 var $2777=$fom_mask;
11560 var $2784=$2777;label=225;break;
11561 case 224:
11562 var $2779=$5;
11563 var $2780=(($2779+1)|0);
11564 $5=$2780;
11565 var $2781=HEAP8[($2779)];
11566 var $2782=($2781&255);
11567 var $2784=$2782;label=225;break;
11568 case 225:
11569 var $2784;
11570 var $2785=(($2784)&255);
11571 $mask=$2785;
11572 $mixmask=1;
11573 label=226;break;
11574 case 226:
11575 var $2787=$mask;
11576 var $2788=($2787&255);
11577 var $2789=$mixmask;
11578 var $2790=($2789&255);
11579 var $2791=$2788&$2790;
11580 var $2792=($2791|0)!=0;
11581 if($2792){label=227;break;}else{label=228;break;}
11582 case 227:
11583 var $2794=$x;
11584 var $2795=((($2794)*(3))&-1);
11585 var $2796=$prevline;
11586 var $2797=(($2796+$2795)|0);
11587 var $2798=HEAP8[($2797)];
11588 var $2799=($2798&255);
11589 var $2800=(($mix)|0);
11590 var $2801=HEAP8[($2800)];
11591 var $2802=($2801&255);
11592 var $2803=$2799^$2802;
11593 var $2804=(($2803)&255);
11594 var $2805=$x;
11595 var $2806=((($2805)*(3))&-1);
11596 var $2807=$line;
11597 var $2808=(($2807+$2806)|0);
11598 HEAP8[($2808)]=$2804;
11599 var $2809=$x;
11600 var $2810=((($2809)*(3))&-1);
11601 var $2811=((($2810)+(1))|0);
11602 var $2812=$prevline;
11603 var $2813=(($2812+$2811)|0);
11604 var $2814=HEAP8[($2813)];
11605 var $2815=($2814&255);
11606 var $2816=(($mix+1)|0);
11607 var $2817=HEAP8[($2816)];
11608 var $2818=($2817&255);
11609 var $2819=$2815^$2818;
11610 var $2820=(($2819)&255);
11611 var $2821=$x;
11612 var $2822=((($2821)*(3))&-1);
11613 var $2823=((($2822)+(1))|0);
11614 var $2824=$line;
11615 var $2825=(($2824+$2823)|0);
11616 HEAP8[($2825)]=$2820;
11617 var $2826=$x;
11618 var $2827=((($2826)*(3))&-1);
11619 var $2828=((($2827)+(2))|0);
11620 var $2829=$prevline;
11621 var $2830=(($2829+$2828)|0);
11622 var $2831=HEAP8[($2830)];
11623 var $2832=($2831&255);
11624 var $2833=(($mix+2)|0);
11625 var $2834=HEAP8[($2833)];
11626 var $2835=($2834&255);
11627 var $2836=$2832^$2835;
11628 var $2837=(($2836)&255);
11629 var $2838=$x;
11630 var $2839=((($2838)*(3))&-1);
11631 var $2840=((($2839)+(2))|0);
11632 var $2841=$line;
11633 var $2842=(($2841+$2840)|0);
11634 HEAP8[($2842)]=$2837;
11635 label=229;break;
11636 case 228:
11637 var $2844=$x;
11638 var $2845=((($2844)*(3))&-1);
11639 var $2846=$prevline;
11640 var $2847=(($2846+$2845)|0);
11641 var $2848=HEAP8[($2847)];
11642 var $2849=$x;
11643 var $2850=((($2849)*(3))&-1);
11644 var $2851=$line;
11645 var $2852=(($2851+$2850)|0);
11646 HEAP8[($2852)]=$2848;
11647 var $2853=$x;
11648 var $2854=((($2853)*(3))&-1);
11649 var $2855=((($2854)+(1))|0);
11650 var $2856=$prevline;
11651 var $2857=(($2856+$2855)|0);
11652 var $2858=HEAP8[($2857)];
11653 var $2859=$x;
11654 var $2860=((($2859)*(3))&-1);
11655 var $2861=((($2860)+(1))|0);
11656 var $2862=$line;
11657 var $2863=(($2862+$2861)|0);
11658 HEAP8[($2863)]=$2858;
11659 var $2864=$x;
11660 var $2865=((($2864)*(3))&-1);
11661 var $2866=((($2865)+(2))|0);
11662 var $2867=$prevline;
11663 var $2868=(($2867+$2866)|0);
11664 var $2869=HEAP8[($2868)];
11665 var $2870=$x;
11666 var $2871=((($2870)*(3))&-1);
11667 var $2872=((($2871)+(2))|0);
11668 var $2873=$line;
11669 var $2874=(($2873+$2872)|0);
11670 HEAP8[($2874)]=$2869;
11671 label=229;break;
11672 case 229:
11673 var $2876=$count;
11674 var $2877=((($2876)-(1))|0);
11675 $count=$2877;
11676 var $2878=$x;
11677 var $2879=((($2878)+(1))|0);
11678 $x=$2879;
11679 var $2880=$mixmask;
11680 var $2881=($2880&255);
11681 var $2882=$2881<<1;
11682 var $2883=(($2882)&255);
11683 $mixmask=$2883;
11684 var $2884=$mixmask;
11685 var $2885=($2884&255);
11686 var $2886=($2885|0)==0;
11687 if($2886){label=230;break;}else{label=234;break;}
11688 case 230:
11689 var $2888=$fom_mask;
11690 var $2889=($2888|0)!=0;
11691 if($2889){label=231;break;}else{label=232;break;}
11692 case 231:
11693 var $2891=$fom_mask;
11694 var $2898=$2891;label=233;break;
11695 case 232:
11696 var $2893=$5;
11697 var $2894=(($2893+1)|0);
11698 $5=$2894;
11699 var $2895=HEAP8[($2893)];
11700 var $2896=($2895&255);
11701 var $2898=$2896;label=233;break;
11702 case 233:
11703 var $2898;
11704 var $2899=(($2898)&255);
11705 $mask=$2899;
11706 $mixmask=1;
11707 label=234;break;
11708 case 234:
11709 var $2901=$mask;
11710 var $2902=($2901&255);
11711 var $2903=$mixmask;
11712 var $2904=($2903&255);
11713 var $2905=$2902&$2904;
11714 var $2906=($2905|0)!=0;
11715 if($2906){label=235;break;}else{label=236;break;}
11716 case 235:
11717 var $2908=$x;
11718 var $2909=((($2908)*(3))&-1);
11719 var $2910=$prevline;
11720 var $2911=(($2910+$2909)|0);
11721 var $2912=HEAP8[($2911)];
11722 var $2913=($2912&255);
11723 var $2914=(($mix)|0);
11724 var $2915=HEAP8[($2914)];
11725 var $2916=($2915&255);
11726 var $2917=$2913^$2916;
11727 var $2918=(($2917)&255);
11728 var $2919=$x;
11729 var $2920=((($2919)*(3))&-1);
11730 var $2921=$line;
11731 var $2922=(($2921+$2920)|0);
11732 HEAP8[($2922)]=$2918;
11733 var $2923=$x;
11734 var $2924=((($2923)*(3))&-1);
11735 var $2925=((($2924)+(1))|0);
11736 var $2926=$prevline;
11737 var $2927=(($2926+$2925)|0);
11738 var $2928=HEAP8[($2927)];
11739 var $2929=($2928&255);
11740 var $2930=(($mix+1)|0);
11741 var $2931=HEAP8[($2930)];
11742 var $2932=($2931&255);
11743 var $2933=$2929^$2932;
11744 var $2934=(($2933)&255);
11745 var $2935=$x;
11746 var $2936=((($2935)*(3))&-1);
11747 var $2937=((($2936)+(1))|0);
11748 var $2938=$line;
11749 var $2939=(($2938+$2937)|0);
11750 HEAP8[($2939)]=$2934;
11751 var $2940=$x;
11752 var $2941=((($2940)*(3))&-1);
11753 var $2942=((($2941)+(2))|0);
11754 var $2943=$prevline;
11755 var $2944=(($2943+$2942)|0);
11756 var $2945=HEAP8[($2944)];
11757 var $2946=($2945&255);
11758 var $2947=(($mix+2)|0);
11759 var $2948=HEAP8[($2947)];
11760 var $2949=($2948&255);
11761 var $2950=$2946^$2949;
11762 var $2951=(($2950)&255);
11763 var $2952=$x;
11764 var $2953=((($2952)*(3))&-1);
11765 var $2954=((($2953)+(2))|0);
11766 var $2955=$line;
11767 var $2956=(($2955+$2954)|0);
11768 HEAP8[($2956)]=$2951;
11769 label=237;break;
11770 case 236:
11771 var $2958=$x;
11772 var $2959=((($2958)*(3))&-1);
11773 var $2960=$prevline;
11774 var $2961=(($2960+$2959)|0);
11775 var $2962=HEAP8[($2961)];
11776 var $2963=$x;
11777 var $2964=((($2963)*(3))&-1);
11778 var $2965=$line;
11779 var $2966=(($2965+$2964)|0);
11780 HEAP8[($2966)]=$2962;
11781 var $2967=$x;
11782 var $2968=((($2967)*(3))&-1);
11783 var $2969=((($2968)+(1))|0);
11784 var $2970=$prevline;
11785 var $2971=(($2970+$2969)|0);
11786 var $2972=HEAP8[($2971)];
11787 var $2973=$x;
11788 var $2974=((($2973)*(3))&-1);
11789 var $2975=((($2974)+(1))|0);
11790 var $2976=$line;
11791 var $2977=(($2976+$2975)|0);
11792 HEAP8[($2977)]=$2972;
11793 var $2978=$x;
11794 var $2979=((($2978)*(3))&-1);
11795 var $2980=((($2979)+(2))|0);
11796 var $2981=$prevline;
11797 var $2982=(($2981+$2980)|0);
11798 var $2983=HEAP8[($2982)];
11799 var $2984=$x;
11800 var $2985=((($2984)*(3))&-1);
11801 var $2986=((($2985)+(2))|0);
11802 var $2987=$line;
11803 var $2988=(($2987+$2986)|0);
11804 HEAP8[($2988)]=$2983;
11805 label=237;break;
11806 case 237:
11807 var $2990=$count;
11808 var $2991=((($2990)-(1))|0);
11809 $count=$2991;
11810 var $2992=$x;
11811 var $2993=((($2992)+(1))|0);
11812 $x=$2993;
11813 var $2994=$mixmask;
11814 var $2995=($2994&255);
11815 var $2996=$2995<<1;
11816 var $2997=(($2996)&255);
11817 $mixmask=$2997;
11818 var $2998=$mixmask;
11819 var $2999=($2998&255);
11820 var $3000=($2999|0)==0;
11821 if($3000){label=238;break;}else{label=242;break;}
11822 case 238:
11823 var $3002=$fom_mask;
11824 var $3003=($3002|0)!=0;
11825 if($3003){label=239;break;}else{label=240;break;}
11826 case 239:
11827 var $3005=$fom_mask;
11828 var $3012=$3005;label=241;break;
11829 case 240:
11830 var $3007=$5;
11831 var $3008=(($3007+1)|0);
11832 $5=$3008;
11833 var $3009=HEAP8[($3007)];
11834 var $3010=($3009&255);
11835 var $3012=$3010;label=241;break;
11836 case 241:
11837 var $3012;
11838 var $3013=(($3012)&255);
11839 $mask=$3013;
11840 $mixmask=1;
11841 label=242;break;
11842 case 242:
11843 var $3015=$mask;
11844 var $3016=($3015&255);
11845 var $3017=$mixmask;
11846 var $3018=($3017&255);
11847 var $3019=$3016&$3018;
11848 var $3020=($3019|0)!=0;
11849 if($3020){label=243;break;}else{label=244;break;}
11850 case 243:
11851 var $3022=$x;
11852 var $3023=((($3022)*(3))&-1);
11853 var $3024=$prevline;
11854 var $3025=(($3024+$3023)|0);
11855 var $3026=HEAP8[($3025)];
11856 var $3027=($3026&255);
11857 var $3028=(($mix)|0);
11858 var $3029=HEAP8[($3028)];
11859 var $3030=($3029&255);
11860 var $3031=$3027^$3030;
11861 var $3032=(($3031)&255);
11862 var $3033=$x;
11863 var $3034=((($3033)*(3))&-1);
11864 var $3035=$line;
11865 var $3036=(($3035+$3034)|0);
11866 HEAP8[($3036)]=$3032;
11867 var $3037=$x;
11868 var $3038=((($3037)*(3))&-1);
11869 var $3039=((($3038)+(1))|0);
11870 var $3040=$prevline;
11871 var $3041=(($3040+$3039)|0);
11872 var $3042=HEAP8[($3041)];
11873 var $3043=($3042&255);
11874 var $3044=(($mix+1)|0);
11875 var $3045=HEAP8[($3044)];
11876 var $3046=($3045&255);
11877 var $3047=$3043^$3046;
11878 var $3048=(($3047)&255);
11879 var $3049=$x;
11880 var $3050=((($3049)*(3))&-1);
11881 var $3051=((($3050)+(1))|0);
11882 var $3052=$line;
11883 var $3053=(($3052+$3051)|0);
11884 HEAP8[($3053)]=$3048;
11885 var $3054=$x;
11886 var $3055=((($3054)*(3))&-1);
11887 var $3056=((($3055)+(2))|0);
11888 var $3057=$prevline;
11889 var $3058=(($3057+$3056)|0);
11890 var $3059=HEAP8[($3058)];
11891 var $3060=($3059&255);
11892 var $3061=(($mix+2)|0);
11893 var $3062=HEAP8[($3061)];
11894 var $3063=($3062&255);
11895 var $3064=$3060^$3063;
11896 var $3065=(($3064)&255);
11897 var $3066=$x;
11898 var $3067=((($3066)*(3))&-1);
11899 var $3068=((($3067)+(2))|0);
11900 var $3069=$line;
11901 var $3070=(($3069+$3068)|0);
11902 HEAP8[($3070)]=$3065;
11903 label=245;break;
11904 case 244:
11905 var $3072=$x;
11906 var $3073=((($3072)*(3))&-1);
11907 var $3074=$prevline;
11908 var $3075=(($3074+$3073)|0);
11909 var $3076=HEAP8[($3075)];
11910 var $3077=$x;
11911 var $3078=((($3077)*(3))&-1);
11912 var $3079=$line;
11913 var $3080=(($3079+$3078)|0);
11914 HEAP8[($3080)]=$3076;
11915 var $3081=$x;
11916 var $3082=((($3081)*(3))&-1);
11917 var $3083=((($3082)+(1))|0);
11918 var $3084=$prevline;
11919 var $3085=(($3084+$3083)|0);
11920 var $3086=HEAP8[($3085)];
11921 var $3087=$x;
11922 var $3088=((($3087)*(3))&-1);
11923 var $3089=((($3088)+(1))|0);
11924 var $3090=$line;
11925 var $3091=(($3090+$3089)|0);
11926 HEAP8[($3091)]=$3086;
11927 var $3092=$x;
11928 var $3093=((($3092)*(3))&-1);
11929 var $3094=((($3093)+(2))|0);
11930 var $3095=$prevline;
11931 var $3096=(($3095+$3094)|0);
11932 var $3097=HEAP8[($3096)];
11933 var $3098=$x;
11934 var $3099=((($3098)*(3))&-1);
11935 var $3100=((($3099)+(2))|0);
11936 var $3101=$line;
11937 var $3102=(($3101+$3100)|0);
11938 HEAP8[($3102)]=$3097;
11939 label=245;break;
11940 case 245:
11941 var $3104=$count;
11942 var $3105=((($3104)-(1))|0);
11943 $count=$3105;
11944 var $3106=$x;
11945 var $3107=((($3106)+(1))|0);
11946 $x=$3107;
11947 label=178;break;
11948 case 246:
11949 label=247;break;
11950 case 247:
11951 var $3110=$count;
11952 var $3111=($3110|0)>0;
11953 if($3111){label=248;break;}else{var $3117=0;label=249;break;}
11954 case 248:
11955 var $3113=$x;
11956 var $3114=$3;
11957 var $3115=($3113|0)<($3114|0);
11958 var $3117=$3115;label=249;break;
11959 case 249:
11960 var $3117;
11961 if($3117){label=250;break;}else{label=259;break;}
11962 case 250:
11963 var $3119=$mixmask;
11964 var $3120=($3119&255);
11965 var $3121=$3120<<1;
11966 var $3122=(($3121)&255);
11967 $mixmask=$3122;
11968 var $3123=$mixmask;
11969 var $3124=($3123&255);
11970 var $3125=($3124|0)==0;
11971 if($3125){label=251;break;}else{label=255;break;}
11972 case 251:
11973 var $3127=$fom_mask;
11974 var $3128=($3127|0)!=0;
11975 if($3128){label=252;break;}else{label=253;break;}
11976 case 252:
11977 var $3130=$fom_mask;
11978 var $3137=$3130;label=254;break;
11979 case 253:
11980 var $3132=$5;
11981 var $3133=(($3132+1)|0);
11982 $5=$3133;
11983 var $3134=HEAP8[($3132)];
11984 var $3135=($3134&255);
11985 var $3137=$3135;label=254;break;
11986 case 254:
11987 var $3137;
11988 var $3138=(($3137)&255);
11989 $mask=$3138;
11990 $mixmask=1;
11991 label=255;break;
11992 case 255:
11993 var $3140=$mask;
11994 var $3141=($3140&255);
11995 var $3142=$mixmask;
11996 var $3143=($3142&255);
11997 var $3144=$3141&$3143;
11998 var $3145=($3144|0)!=0;
11999 if($3145){label=256;break;}else{label=257;break;}
12000 case 256:
12001 var $3147=$x;
12002 var $3148=((($3147)*(3))&-1);
12003 var $3149=$prevline;
12004 var $3150=(($3149+$3148)|0);
12005 var $3151=HEAP8[($3150)];
12006 var $3152=($3151&255);
12007 var $3153=(($mix)|0);
12008 var $3154=HEAP8[($3153)];
12009 var $3155=($3154&255);
12010 var $3156=$3152^$3155;
12011 var $3157=(($3156)&255);
12012 var $3158=$x;
12013 var $3159=((($3158)*(3))&-1);
12014 var $3160=$line;
12015 var $3161=(($3160+$3159)|0);
12016 HEAP8[($3161)]=$3157;
12017 var $3162=$x;
12018 var $3163=((($3162)*(3))&-1);
12019 var $3164=((($3163)+(1))|0);
12020 var $3165=$prevline;
12021 var $3166=(($3165+$3164)|0);
12022 var $3167=HEAP8[($3166)];
12023 var $3168=($3167&255);
12024 var $3169=(($mix+1)|0);
12025 var $3170=HEAP8[($3169)];
12026 var $3171=($3170&255);
12027 var $3172=$3168^$3171;
12028 var $3173=(($3172)&255);
12029 var $3174=$x;
12030 var $3175=((($3174)*(3))&-1);
12031 var $3176=((($3175)+(1))|0);
12032 var $3177=$line;
12033 var $3178=(($3177+$3176)|0);
12034 HEAP8[($3178)]=$3173;
12035 var $3179=$x;
12036 var $3180=((($3179)*(3))&-1);
12037 var $3181=((($3180)+(2))|0);
12038 var $3182=$prevline;
12039 var $3183=(($3182+$3181)|0);
12040 var $3184=HEAP8[($3183)];
12041 var $3185=($3184&255);
12042 var $3186=(($mix+2)|0);
12043 var $3187=HEAP8[($3186)];
12044 var $3188=($3187&255);
12045 var $3189=$3185^$3188;
12046 var $3190=(($3189)&255);
12047 var $3191=$x;
12048 var $3192=((($3191)*(3))&-1);
12049 var $3193=((($3192)+(2))|0);
12050 var $3194=$line;
12051 var $3195=(($3194+$3193)|0);
12052 HEAP8[($3195)]=$3190;
12053 label=258;break;
12054 case 257:
12055 var $3197=$x;
12056 var $3198=((($3197)*(3))&-1);
12057 var $3199=$prevline;
12058 var $3200=(($3199+$3198)|0);
12059 var $3201=HEAP8[($3200)];
12060 var $3202=$x;
12061 var $3203=((($3202)*(3))&-1);
12062 var $3204=$line;
12063 var $3205=(($3204+$3203)|0);
12064 HEAP8[($3205)]=$3201;
12065 var $3206=$x;
12066 var $3207=((($3206)*(3))&-1);
12067 var $3208=((($3207)+(1))|0);
12068 var $3209=$prevline;
12069 var $3210=(($3209+$3208)|0);
12070 var $3211=HEAP8[($3210)];
12071 var $3212=$x;
12072 var $3213=((($3212)*(3))&-1);
12073 var $3214=((($3213)+(1))|0);
12074 var $3215=$line;
12075 var $3216=(($3215+$3214)|0);
12076 HEAP8[($3216)]=$3211;
12077 var $3217=$x;
12078 var $3218=((($3217)*(3))&-1);
12079 var $3219=((($3218)+(2))|0);
12080 var $3220=$prevline;
12081 var $3221=(($3220+$3219)|0);
12082 var $3222=HEAP8[($3221)];
12083 var $3223=$x;
12084 var $3224=((($3223)*(3))&-1);
12085 var $3225=((($3224)+(2))|0);
12086 var $3226=$line;
12087 var $3227=(($3226+$3225)|0);
12088 HEAP8[($3227)]=$3222;
12089 label=258;break;
12090 case 258:
12091 var $3229=$count;
12092 var $3230=((($3229)-(1))|0);
12093 $count=$3230;
12094 var $3231=$x;
12095 var $3232=((($3231)+(1))|0);
12096 $x=$3232;
12097 label=247;break;
12098 case 259:
12099 label=260;break;
12100 case 260:
12101 label=344;break;
12102 case 261:
12103 label=262;break;
12104 case 262:
12105 var $3237=$count;
12106 var $3238=$3237&-8;
12107 var $3239=($3238|0)!=0;
12108 if($3239){label=263;break;}else{var $3246=0;label=264;break;}
12109 case 263:
12110 var $3241=$x;
12111 var $3242=((($3241)+(8))|0);
12112 var $3243=$3;
12113 var $3244=($3242|0)<($3243|0);
12114 var $3246=$3244;label=264;break;
12115 case 264:
12116 var $3246;
12117 if($3246){label=265;break;}else{label=266;break;}
12118 case 265:
12119 var $3248=(($colour2)|0);
12120 var $3249=HEAP8[($3248)];
12121 var $3250=$x;
12122 var $3251=((($3250)*(3))&-1);
12123 var $3252=$line;
12124 var $3253=(($3252+$3251)|0);
12125 HEAP8[($3253)]=$3249;
12126 var $3254=(($colour2+1)|0);
12127 var $3255=HEAP8[($3254)];
12128 var $3256=$x;
12129 var $3257=((($3256)*(3))&-1);
12130 var $3258=((($3257)+(1))|0);
12131 var $3259=$line;
12132 var $3260=(($3259+$3258)|0);
12133 HEAP8[($3260)]=$3255;
12134 var $3261=(($colour2+2)|0);
12135 var $3262=HEAP8[($3261)];
12136 var $3263=$x;
12137 var $3264=((($3263)*(3))&-1);
12138 var $3265=((($3264)+(2))|0);
12139 var $3266=$line;
12140 var $3267=(($3266+$3265)|0);
12141 HEAP8[($3267)]=$3262;
12142 var $3268=$count;
12143 var $3269=((($3268)-(1))|0);
12144 $count=$3269;
12145 var $3270=$x;
12146 var $3271=((($3270)+(1))|0);
12147 $x=$3271;
12148 var $3272=(($colour2)|0);
12149 var $3273=HEAP8[($3272)];
12150 var $3274=$x;
12151 var $3275=((($3274)*(3))&-1);
12152 var $3276=$line;
12153 var $3277=(($3276+$3275)|0);
12154 HEAP8[($3277)]=$3273;
12155 var $3278=(($colour2+1)|0);
12156 var $3279=HEAP8[($3278)];
12157 var $3280=$x;
12158 var $3281=((($3280)*(3))&-1);
12159 var $3282=((($3281)+(1))|0);
12160 var $3283=$line;
12161 var $3284=(($3283+$3282)|0);
12162 HEAP8[($3284)]=$3279;
12163 var $3285=(($colour2+2)|0);
12164 var $3286=HEAP8[($3285)];
12165 var $3287=$x;
12166 var $3288=((($3287)*(3))&-1);
12167 var $3289=((($3288)+(2))|0);
12168 var $3290=$line;
12169 var $3291=(($3290+$3289)|0);
12170 HEAP8[($3291)]=$3286;
12171 var $3292=$count;
12172 var $3293=((($3292)-(1))|0);
12173 $count=$3293;
12174 var $3294=$x;
12175 var $3295=((($3294)+(1))|0);
12176 $x=$3295;
12177 var $3296=(($colour2)|0);
12178 var $3297=HEAP8[($3296)];
12179 var $3298=$x;
12180 var $3299=((($3298)*(3))&-1);
12181 var $3300=$line;
12182 var $3301=(($3300+$3299)|0);
12183 HEAP8[($3301)]=$3297;
12184 var $3302=(($colour2+1)|0);
12185 var $3303=HEAP8[($3302)];
12186 var $3304=$x;
12187 var $3305=((($3304)*(3))&-1);
12188 var $3306=((($3305)+(1))|0);
12189 var $3307=$line;
12190 var $3308=(($3307+$3306)|0);
12191 HEAP8[($3308)]=$3303;
12192 var $3309=(($colour2+2)|0);
12193 var $3310=HEAP8[($3309)];
12194 var $3311=$x;
12195 var $3312=((($3311)*(3))&-1);
12196 var $3313=((($3312)+(2))|0);
12197 var $3314=$line;
12198 var $3315=(($3314+$3313)|0);
12199 HEAP8[($3315)]=$3310;
12200 var $3316=$count;
12201 var $3317=((($3316)-(1))|0);
12202 $count=$3317;
12203 var $3318=$x;
12204 var $3319=((($3318)+(1))|0);
12205 $x=$3319;
12206 var $3320=(($colour2)|0);
12207 var $3321=HEAP8[($3320)];
12208 var $3322=$x;
12209 var $3323=((($3322)*(3))&-1);
12210 var $3324=$line;
12211 var $3325=(($3324+$3323)|0);
12212 HEAP8[($3325)]=$3321;
12213 var $3326=(($colour2+1)|0);
12214 var $3327=HEAP8[($3326)];
12215 var $3328=$x;
12216 var $3329=((($3328)*(3))&-1);
12217 var $3330=((($3329)+(1))|0);
12218 var $3331=$line;
12219 var $3332=(($3331+$3330)|0);
12220 HEAP8[($3332)]=$3327;
12221 var $3333=(($colour2+2)|0);
12222 var $3334=HEAP8[($3333)];
12223 var $3335=$x;
12224 var $3336=((($3335)*(3))&-1);
12225 var $3337=((($3336)+(2))|0);
12226 var $3338=$line;
12227 var $3339=(($3338+$3337)|0);
12228 HEAP8[($3339)]=$3334;
12229 var $3340=$count;
12230 var $3341=((($3340)-(1))|0);
12231 $count=$3341;
12232 var $3342=$x;
12233 var $3343=((($3342)+(1))|0);
12234 $x=$3343;
12235 var $3344=(($colour2)|0);
12236 var $3345=HEAP8[($3344)];
12237 var $3346=$x;
12238 var $3347=((($3346)*(3))&-1);
12239 var $3348=$line;
12240 var $3349=(($3348+$3347)|0);
12241 HEAP8[($3349)]=$3345;
12242 var $3350=(($colour2+1)|0);
12243 var $3351=HEAP8[($3350)];
12244 var $3352=$x;
12245 var $3353=((($3352)*(3))&-1);
12246 var $3354=((($3353)+(1))|0);
12247 var $3355=$line;
12248 var $3356=(($3355+$3354)|0);
12249 HEAP8[($3356)]=$3351;
12250 var $3357=(($colour2+2)|0);
12251 var $3358=HEAP8[($3357)];
12252 var $3359=$x;
12253 var $3360=((($3359)*(3))&-1);
12254 var $3361=((($3360)+(2))|0);
12255 var $3362=$line;
12256 var $3363=(($3362+$3361)|0);
12257 HEAP8[($3363)]=$3358;
12258 var $3364=$count;
12259 var $3365=((($3364)-(1))|0);
12260 $count=$3365;
12261 var $3366=$x;
12262 var $3367=((($3366)+(1))|0);
12263 $x=$3367;
12264 var $3368=(($colour2)|0);
12265 var $3369=HEAP8[($3368)];
12266 var $3370=$x;
12267 var $3371=((($3370)*(3))&-1);
12268 var $3372=$line;
12269 var $3373=(($3372+$3371)|0);
12270 HEAP8[($3373)]=$3369;
12271 var $3374=(($colour2+1)|0);
12272 var $3375=HEAP8[($3374)];
12273 var $3376=$x;
12274 var $3377=((($3376)*(3))&-1);
12275 var $3378=((($3377)+(1))|0);
12276 var $3379=$line;
12277 var $3380=(($3379+$3378)|0);
12278 HEAP8[($3380)]=$3375;
12279 var $3381=(($colour2+2)|0);
12280 var $3382=HEAP8[($3381)];
12281 var $3383=$x;
12282 var $3384=((($3383)*(3))&-1);
12283 var $3385=((($3384)+(2))|0);
12284 var $3386=$line;
12285 var $3387=(($3386+$3385)|0);
12286 HEAP8[($3387)]=$3382;
12287 var $3388=$count;
12288 var $3389=((($3388)-(1))|0);
12289 $count=$3389;
12290 var $3390=$x;
12291 var $3391=((($3390)+(1))|0);
12292 $x=$3391;
12293 var $3392=(($colour2)|0);
12294 var $3393=HEAP8[($3392)];
12295 var $3394=$x;
12296 var $3395=((($3394)*(3))&-1);
12297 var $3396=$line;
12298 var $3397=(($3396+$3395)|0);
12299 HEAP8[($3397)]=$3393;
12300 var $3398=(($colour2+1)|0);
12301 var $3399=HEAP8[($3398)];
12302 var $3400=$x;
12303 var $3401=((($3400)*(3))&-1);
12304 var $3402=((($3401)+(1))|0);
12305 var $3403=$line;
12306 var $3404=(($3403+$3402)|0);
12307 HEAP8[($3404)]=$3399;
12308 var $3405=(($colour2+2)|0);
12309 var $3406=HEAP8[($3405)];
12310 var $3407=$x;
12311 var $3408=((($3407)*(3))&-1);
12312 var $3409=((($3408)+(2))|0);
12313 var $3410=$line;
12314 var $3411=(($3410+$3409)|0);
12315 HEAP8[($3411)]=$3406;
12316 var $3412=$count;
12317 var $3413=((($3412)-(1))|0);
12318 $count=$3413;
12319 var $3414=$x;
12320 var $3415=((($3414)+(1))|0);
12321 $x=$3415;
12322 var $3416=(($colour2)|0);
12323 var $3417=HEAP8[($3416)];
12324 var $3418=$x;
12325 var $3419=((($3418)*(3))&-1);
12326 var $3420=$line;
12327 var $3421=(($3420+$3419)|0);
12328 HEAP8[($3421)]=$3417;
12329 var $3422=(($colour2+1)|0);
12330 var $3423=HEAP8[($3422)];
12331 var $3424=$x;
12332 var $3425=((($3424)*(3))&-1);
12333 var $3426=((($3425)+(1))|0);
12334 var $3427=$line;
12335 var $3428=(($3427+$3426)|0);
12336 HEAP8[($3428)]=$3423;
12337 var $3429=(($colour2+2)|0);
12338 var $3430=HEAP8[($3429)];
12339 var $3431=$x;
12340 var $3432=((($3431)*(3))&-1);
12341 var $3433=((($3432)+(2))|0);
12342 var $3434=$line;
12343 var $3435=(($3434+$3433)|0);
12344 HEAP8[($3435)]=$3430;
12345 var $3436=$count;
12346 var $3437=((($3436)-(1))|0);
12347 $count=$3437;
12348 var $3438=$x;
12349 var $3439=((($3438)+(1))|0);
12350 $x=$3439;
12351 label=262;break;
12352 case 266:
12353 label=267;break;
12354 case 267:
12355 var $3442=$count;
12356 var $3443=($3442|0)>0;
12357 if($3443){label=268;break;}else{var $3449=0;label=269;break;}
12358 case 268:
12359 var $3445=$x;
12360 var $3446=$3;
12361 var $3447=($3445|0)<($3446|0);
12362 var $3449=$3447;label=269;break;
12363 case 269:
12364 var $3449;
12365 if($3449){label=270;break;}else{label=271;break;}
12366 case 270:
12367 var $3451=(($colour2)|0);
12368 var $3452=HEAP8[($3451)];
12369 var $3453=$x;
12370 var $3454=((($3453)*(3))&-1);
12371 var $3455=$line;
12372 var $3456=(($3455+$3454)|0);
12373 HEAP8[($3456)]=$3452;
12374 var $3457=(($colour2+1)|0);
12375 var $3458=HEAP8[($3457)];
12376 var $3459=$x;
12377 var $3460=((($3459)*(3))&-1);
12378 var $3461=((($3460)+(1))|0);
12379 var $3462=$line;
12380 var $3463=(($3462+$3461)|0);
12381 HEAP8[($3463)]=$3458;
12382 var $3464=(($colour2+2)|0);
12383 var $3465=HEAP8[($3464)];
12384 var $3466=$x;
12385 var $3467=((($3466)*(3))&-1);
12386 var $3468=((($3467)+(2))|0);
12387 var $3469=$line;
12388 var $3470=(($3469+$3468)|0);
12389 HEAP8[($3470)]=$3465;
12390 var $3471=$count;
12391 var $3472=((($3471)-(1))|0);
12392 $count=$3472;
12393 var $3473=$x;
12394 var $3474=((($3473)+(1))|0);
12395 $x=$3474;
12396 label=267;break;
12397 case 271:
12398 label=344;break;
12399 case 272:
12400 label=273;break;
12401 case 273:
12402 var $3478=$count;
12403 var $3479=$3478&-8;
12404 var $3480=($3479|0)!=0;
12405 if($3480){label=274;break;}else{var $3487=0;label=275;break;}
12406 case 274:
12407 var $3482=$x;
12408 var $3483=((($3482)+(8))|0);
12409 var $3484=$3;
12410 var $3485=($3483|0)<($3484|0);
12411 var $3487=$3485;label=275;break;
12412 case 275:
12413 var $3487;
12414 if($3487){label=276;break;}else{label=277;break;}
12415 case 276:
12416 var $3489=$5;
12417 var $3490=(($3489+1)|0);
12418 $5=$3490;
12419 var $3491=HEAP8[($3489)];
12420 var $3492=$x;
12421 var $3493=((($3492)*(3))&-1);
12422 var $3494=$line;
12423 var $3495=(($3494+$3493)|0);
12424 HEAP8[($3495)]=$3491;
12425 var $3496=$5;
12426 var $3497=(($3496+1)|0);
12427 $5=$3497;
12428 var $3498=HEAP8[($3496)];
12429 var $3499=$x;
12430 var $3500=((($3499)*(3))&-1);
12431 var $3501=((($3500)+(1))|0);
12432 var $3502=$line;
12433 var $3503=(($3502+$3501)|0);
12434 HEAP8[($3503)]=$3498;
12435 var $3504=$5;
12436 var $3505=(($3504+1)|0);
12437 $5=$3505;
12438 var $3506=HEAP8[($3504)];
12439 var $3507=$x;
12440 var $3508=((($3507)*(3))&-1);
12441 var $3509=((($3508)+(2))|0);
12442 var $3510=$line;
12443 var $3511=(($3510+$3509)|0);
12444 HEAP8[($3511)]=$3506;
12445 var $3512=$count;
12446 var $3513=((($3512)-(1))|0);
12447 $count=$3513;
12448 var $3514=$x;
12449 var $3515=((($3514)+(1))|0);
12450 $x=$3515;
12451 var $3516=$5;
12452 var $3517=(($3516+1)|0);
12453 $5=$3517;
12454 var $3518=HEAP8[($3516)];
12455 var $3519=$x;
12456 var $3520=((($3519)*(3))&-1);
12457 var $3521=$line;
12458 var $3522=(($3521+$3520)|0);
12459 HEAP8[($3522)]=$3518;
12460 var $3523=$5;
12461 var $3524=(($3523+1)|0);
12462 $5=$3524;
12463 var $3525=HEAP8[($3523)];
12464 var $3526=$x;
12465 var $3527=((($3526)*(3))&-1);
12466 var $3528=((($3527)+(1))|0);
12467 var $3529=$line;
12468 var $3530=(($3529+$3528)|0);
12469 HEAP8[($3530)]=$3525;
12470 var $3531=$5;
12471 var $3532=(($3531+1)|0);
12472 $5=$3532;
12473 var $3533=HEAP8[($3531)];
12474 var $3534=$x;
12475 var $3535=((($3534)*(3))&-1);
12476 var $3536=((($3535)+(2))|0);
12477 var $3537=$line;
12478 var $3538=(($3537+$3536)|0);
12479 HEAP8[($3538)]=$3533;
12480 var $3539=$count;
12481 var $3540=((($3539)-(1))|0);
12482 $count=$3540;
12483 var $3541=$x;
12484 var $3542=((($3541)+(1))|0);
12485 $x=$3542;
12486 var $3543=$5;
12487 var $3544=(($3543+1)|0);
12488 $5=$3544;
12489 var $3545=HEAP8[($3543)];
12490 var $3546=$x;
12491 var $3547=((($3546)*(3))&-1);
12492 var $3548=$line;
12493 var $3549=(($3548+$3547)|0);
12494 HEAP8[($3549)]=$3545;
12495 var $3550=$5;
12496 var $3551=(($3550+1)|0);
12497 $5=$3551;
12498 var $3552=HEAP8[($3550)];
12499 var $3553=$x;
12500 var $3554=((($3553)*(3))&-1);
12501 var $3555=((($3554)+(1))|0);
12502 var $3556=$line;
12503 var $3557=(($3556+$3555)|0);
12504 HEAP8[($3557)]=$3552;
12505 var $3558=$5;
12506 var $3559=(($3558+1)|0);
12507 $5=$3559;
12508 var $3560=HEAP8[($3558)];
12509 var $3561=$x;
12510 var $3562=((($3561)*(3))&-1);
12511 var $3563=((($3562)+(2))|0);
12512 var $3564=$line;
12513 var $3565=(($3564+$3563)|0);
12514 HEAP8[($3565)]=$3560;
12515 var $3566=$count;
12516 var $3567=((($3566)-(1))|0);
12517 $count=$3567;
12518 var $3568=$x;
12519 var $3569=((($3568)+(1))|0);
12520 $x=$3569;
12521 var $3570=$5;
12522 var $3571=(($3570+1)|0);
12523 $5=$3571;
12524 var $3572=HEAP8[($3570)];
12525 var $3573=$x;
12526 var $3574=((($3573)*(3))&-1);
12527 var $3575=$line;
12528 var $3576=(($3575+$3574)|0);
12529 HEAP8[($3576)]=$3572;
12530 var $3577=$5;
12531 var $3578=(($3577+1)|0);
12532 $5=$3578;
12533 var $3579=HEAP8[($3577)];
12534 var $3580=$x;
12535 var $3581=((($3580)*(3))&-1);
12536 var $3582=((($3581)+(1))|0);
12537 var $3583=$line;
12538 var $3584=(($3583+$3582)|0);
12539 HEAP8[($3584)]=$3579;
12540 var $3585=$5;
12541 var $3586=(($3585+1)|0);
12542 $5=$3586;
12543 var $3587=HEAP8[($3585)];
12544 var $3588=$x;
12545 var $3589=((($3588)*(3))&-1);
12546 var $3590=((($3589)+(2))|0);
12547 var $3591=$line;
12548 var $3592=(($3591+$3590)|0);
12549 HEAP8[($3592)]=$3587;
12550 var $3593=$count;
12551 var $3594=((($3593)-(1))|0);
12552 $count=$3594;
12553 var $3595=$x;
12554 var $3596=((($3595)+(1))|0);
12555 $x=$3596;
12556 var $3597=$5;
12557 var $3598=(($3597+1)|0);
12558 $5=$3598;
12559 var $3599=HEAP8[($3597)];
12560 var $3600=$x;
12561 var $3601=((($3600)*(3))&-1);
12562 var $3602=$line;
12563 var $3603=(($3602+$3601)|0);
12564 HEAP8[($3603)]=$3599;
12565 var $3604=$5;
12566 var $3605=(($3604+1)|0);
12567 $5=$3605;
12568 var $3606=HEAP8[($3604)];
12569 var $3607=$x;
12570 var $3608=((($3607)*(3))&-1);
12571 var $3609=((($3608)+(1))|0);
12572 var $3610=$line;
12573 var $3611=(($3610+$3609)|0);
12574 HEAP8[($3611)]=$3606;
12575 var $3612=$5;
12576 var $3613=(($3612+1)|0);
12577 $5=$3613;
12578 var $3614=HEAP8[($3612)];
12579 var $3615=$x;
12580 var $3616=((($3615)*(3))&-1);
12581 var $3617=((($3616)+(2))|0);
12582 var $3618=$line;
12583 var $3619=(($3618+$3617)|0);
12584 HEAP8[($3619)]=$3614;
12585 var $3620=$count;
12586 var $3621=((($3620)-(1))|0);
12587 $count=$3621;
12588 var $3622=$x;
12589 var $3623=((($3622)+(1))|0);
12590 $x=$3623;
12591 var $3624=$5;
12592 var $3625=(($3624+1)|0);
12593 $5=$3625;
12594 var $3626=HEAP8[($3624)];
12595 var $3627=$x;
12596 var $3628=((($3627)*(3))&-1);
12597 var $3629=$line;
12598 var $3630=(($3629+$3628)|0);
12599 HEAP8[($3630)]=$3626;
12600 var $3631=$5;
12601 var $3632=(($3631+1)|0);
12602 $5=$3632;
12603 var $3633=HEAP8[($3631)];
12604 var $3634=$x;
12605 var $3635=((($3634)*(3))&-1);
12606 var $3636=((($3635)+(1))|0);
12607 var $3637=$line;
12608 var $3638=(($3637+$3636)|0);
12609 HEAP8[($3638)]=$3633;
12610 var $3639=$5;
12611 var $3640=(($3639+1)|0);
12612 $5=$3640;
12613 var $3641=HEAP8[($3639)];
12614 var $3642=$x;
12615 var $3643=((($3642)*(3))&-1);
12616 var $3644=((($3643)+(2))|0);
12617 var $3645=$line;
12618 var $3646=(($3645+$3644)|0);
12619 HEAP8[($3646)]=$3641;
12620 var $3647=$count;
12621 var $3648=((($3647)-(1))|0);
12622 $count=$3648;
12623 var $3649=$x;
12624 var $3650=((($3649)+(1))|0);
12625 $x=$3650;
12626 var $3651=$5;
12627 var $3652=(($3651+1)|0);
12628 $5=$3652;
12629 var $3653=HEAP8[($3651)];
12630 var $3654=$x;
12631 var $3655=((($3654)*(3))&-1);
12632 var $3656=$line;
12633 var $3657=(($3656+$3655)|0);
12634 HEAP8[($3657)]=$3653;
12635 var $3658=$5;
12636 var $3659=(($3658+1)|0);
12637 $5=$3659;
12638 var $3660=HEAP8[($3658)];
12639 var $3661=$x;
12640 var $3662=((($3661)*(3))&-1);
12641 var $3663=((($3662)+(1))|0);
12642 var $3664=$line;
12643 var $3665=(($3664+$3663)|0);
12644 HEAP8[($3665)]=$3660;
12645 var $3666=$5;
12646 var $3667=(($3666+1)|0);
12647 $5=$3667;
12648 var $3668=HEAP8[($3666)];
12649 var $3669=$x;
12650 var $3670=((($3669)*(3))&-1);
12651 var $3671=((($3670)+(2))|0);
12652 var $3672=$line;
12653 var $3673=(($3672+$3671)|0);
12654 HEAP8[($3673)]=$3668;
12655 var $3674=$count;
12656 var $3675=((($3674)-(1))|0);
12657 $count=$3675;
12658 var $3676=$x;
12659 var $3677=((($3676)+(1))|0);
12660 $x=$3677;
12661 var $3678=$5;
12662 var $3679=(($3678+1)|0);
12663 $5=$3679;
12664 var $3680=HEAP8[($3678)];
12665 var $3681=$x;
12666 var $3682=((($3681)*(3))&-1);
12667 var $3683=$line;
12668 var $3684=(($3683+$3682)|0);
12669 HEAP8[($3684)]=$3680;
12670 var $3685=$5;
12671 var $3686=(($3685+1)|0);
12672 $5=$3686;
12673 var $3687=HEAP8[($3685)];
12674 var $3688=$x;
12675 var $3689=((($3688)*(3))&-1);
12676 var $3690=((($3689)+(1))|0);
12677 var $3691=$line;
12678 var $3692=(($3691+$3690)|0);
12679 HEAP8[($3692)]=$3687;
12680 var $3693=$5;
12681 var $3694=(($3693+1)|0);
12682 $5=$3694;
12683 var $3695=HEAP8[($3693)];
12684 var $3696=$x;
12685 var $3697=((($3696)*(3))&-1);
12686 var $3698=((($3697)+(2))|0);
12687 var $3699=$line;
12688 var $3700=(($3699+$3698)|0);
12689 HEAP8[($3700)]=$3695;
12690 var $3701=$count;
12691 var $3702=((($3701)-(1))|0);
12692 $count=$3702;
12693 var $3703=$x;
12694 var $3704=((($3703)+(1))|0);
12695 $x=$3704;
12696 label=273;break;
12697 case 277:
12698 label=278;break;
12699 case 278:
12700 var $3707=$count;
12701 var $3708=($3707|0)>0;
12702 if($3708){label=279;break;}else{var $3714=0;label=280;break;}
12703 case 279:
12704 var $3710=$x;
12705 var $3711=$3;
12706 var $3712=($3710|0)<($3711|0);
12707 var $3714=$3712;label=280;break;
12708 case 280:
12709 var $3714;
12710 if($3714){label=281;break;}else{label=282;break;}
12711 case 281:
12712 var $3716=$5;
12713 var $3717=(($3716+1)|0);
12714 $5=$3717;
12715 var $3718=HEAP8[($3716)];
12716 var $3719=$x;
12717 var $3720=((($3719)*(3))&-1);
12718 var $3721=$line;
12719 var $3722=(($3721+$3720)|0);
12720 HEAP8[($3722)]=$3718;
12721 var $3723=$5;
12722 var $3724=(($3723+1)|0);
12723 $5=$3724;
12724 var $3725=HEAP8[($3723)];
12725 var $3726=$x;
12726 var $3727=((($3726)*(3))&-1);
12727 var $3728=((($3727)+(1))|0);
12728 var $3729=$line;
12729 var $3730=(($3729+$3728)|0);
12730 HEAP8[($3730)]=$3725;
12731 var $3731=$5;
12732 var $3732=(($3731+1)|0);
12733 $5=$3732;
12734 var $3733=HEAP8[($3731)];
12735 var $3734=$x;
12736 var $3735=((($3734)*(3))&-1);
12737 var $3736=((($3735)+(2))|0);
12738 var $3737=$line;
12739 var $3738=(($3737+$3736)|0);
12740 HEAP8[($3738)]=$3733;
12741 var $3739=$count;
12742 var $3740=((($3739)-(1))|0);
12743 $count=$3740;
12744 var $3741=$x;
12745 var $3742=((($3741)+(1))|0);
12746 $x=$3742;
12747 label=278;break;
12748 case 282:
12749 label=344;break;
12750 case 283:
12751 label=284;break;
12752 case 284:
12753 var $3746=$count;
12754 var $3747=$3746&-8;
12755 var $3748=($3747|0)!=0;
12756 if($3748){label=285;break;}else{var $3755=0;label=286;break;}
12757 case 285:
12758 var $3750=$x;
12759 var $3751=((($3750)+(8))|0);
12760 var $3752=$3;
12761 var $3753=($3751|0)<($3752|0);
12762 var $3755=$3753;label=286;break;
12763 case 286:
12764 var $3755;
12765 if($3755){label=287;break;}else{label=312;break;}
12766 case 287:
12767 var $3757=$bicolour;
12768 var $3758=($3757|0)!=0;
12769 if($3758){label=288;break;}else{label=289;break;}
12770 case 288:
12771 var $3760=(($colour2)|0);
12772 var $3761=HEAP8[($3760)];
12773 var $3762=$x;
12774 var $3763=((($3762)*(3))&-1);
12775 var $3764=$line;
12776 var $3765=(($3764+$3763)|0);
12777 HEAP8[($3765)]=$3761;
12778 var $3766=(($colour2+1)|0);
12779 var $3767=HEAP8[($3766)];
12780 var $3768=$x;
12781 var $3769=((($3768)*(3))&-1);
12782 var $3770=((($3769)+(1))|0);
12783 var $3771=$line;
12784 var $3772=(($3771+$3770)|0);
12785 HEAP8[($3772)]=$3767;
12786 var $3773=(($colour2+2)|0);
12787 var $3774=HEAP8[($3773)];
12788 var $3775=$x;
12789 var $3776=((($3775)*(3))&-1);
12790 var $3777=((($3776)+(2))|0);
12791 var $3778=$line;
12792 var $3779=(($3778+$3777)|0);
12793 HEAP8[($3779)]=$3774;
12794 $bicolour=0;
12795 label=290;break;
12796 case 289:
12797 var $3781=(($colour1)|0);
12798 var $3782=HEAP8[($3781)];
12799 var $3783=$x;
12800 var $3784=((($3783)*(3))&-1);
12801 var $3785=$line;
12802 var $3786=(($3785+$3784)|0);
12803 HEAP8[($3786)]=$3782;
12804 var $3787=(($colour1+1)|0);
12805 var $3788=HEAP8[($3787)];
12806 var $3789=$x;
12807 var $3790=((($3789)*(3))&-1);
12808 var $3791=((($3790)+(1))|0);
12809 var $3792=$line;
12810 var $3793=(($3792+$3791)|0);
12811 HEAP8[($3793)]=$3788;
12812 var $3794=(($colour1+2)|0);
12813 var $3795=HEAP8[($3794)];
12814 var $3796=$x;
12815 var $3797=((($3796)*(3))&-1);
12816 var $3798=((($3797)+(2))|0);
12817 var $3799=$line;
12818 var $3800=(($3799+$3798)|0);
12819 HEAP8[($3800)]=$3795;
12820 $bicolour=1;
12821 var $3801=$count;
12822 var $3802=((($3801)+(1))|0);
12823 $count=$3802;
12824 label=290;break;
12825 case 290:
12826 var $3804=$count;
12827 var $3805=((($3804)-(1))|0);
12828 $count=$3805;
12829 var $3806=$x;
12830 var $3807=((($3806)+(1))|0);
12831 $x=$3807;
12832 var $3808=$bicolour;
12833 var $3809=($3808|0)!=0;
12834 if($3809){label=291;break;}else{label=292;break;}
12835 case 291:
12836 var $3811=(($colour2)|0);
12837 var $3812=HEAP8[($3811)];
12838 var $3813=$x;
12839 var $3814=((($3813)*(3))&-1);
12840 var $3815=$line;
12841 var $3816=(($3815+$3814)|0);
12842 HEAP8[($3816)]=$3812;
12843 var $3817=(($colour2+1)|0);
12844 var $3818=HEAP8[($3817)];
12845 var $3819=$x;
12846 var $3820=((($3819)*(3))&-1);
12847 var $3821=((($3820)+(1))|0);
12848 var $3822=$line;
12849 var $3823=(($3822+$3821)|0);
12850 HEAP8[($3823)]=$3818;
12851 var $3824=(($colour2+2)|0);
12852 var $3825=HEAP8[($3824)];
12853 var $3826=$x;
12854 var $3827=((($3826)*(3))&-1);
12855 var $3828=((($3827)+(2))|0);
12856 var $3829=$line;
12857 var $3830=(($3829+$3828)|0);
12858 HEAP8[($3830)]=$3825;
12859 $bicolour=0;
12860 label=293;break;
12861 case 292:
12862 var $3832=(($colour1)|0);
12863 var $3833=HEAP8[($3832)];
12864 var $3834=$x;
12865 var $3835=((($3834)*(3))&-1);
12866 var $3836=$line;
12867 var $3837=(($3836+$3835)|0);
12868 HEAP8[($3837)]=$3833;
12869 var $3838=(($colour1+1)|0);
12870 var $3839=HEAP8[($3838)];
12871 var $3840=$x;
12872 var $3841=((($3840)*(3))&-1);
12873 var $3842=((($3841)+(1))|0);
12874 var $3843=$line;
12875 var $3844=(($3843+$3842)|0);
12876 HEAP8[($3844)]=$3839;
12877 var $3845=(($colour1+2)|0);
12878 var $3846=HEAP8[($3845)];
12879 var $3847=$x;
12880 var $3848=((($3847)*(3))&-1);
12881 var $3849=((($3848)+(2))|0);
12882 var $3850=$line;
12883 var $3851=(($3850+$3849)|0);
12884 HEAP8[($3851)]=$3846;
12885 $bicolour=1;
12886 var $3852=$count;
12887 var $3853=((($3852)+(1))|0);
12888 $count=$3853;
12889 label=293;break;
12890 case 293:
12891 var $3855=$count;
12892 var $3856=((($3855)-(1))|0);
12893 $count=$3856;
12894 var $3857=$x;
12895 var $3858=((($3857)+(1))|0);
12896 $x=$3858;
12897 var $3859=$bicolour;
12898 var $3860=($3859|0)!=0;
12899 if($3860){label=294;break;}else{label=295;break;}
12900 case 294:
12901 var $3862=(($colour2)|0);
12902 var $3863=HEAP8[($3862)];
12903 var $3864=$x;
12904 var $3865=((($3864)*(3))&-1);
12905 var $3866=$line;
12906 var $3867=(($3866+$3865)|0);
12907 HEAP8[($3867)]=$3863;
12908 var $3868=(($colour2+1)|0);
12909 var $3869=HEAP8[($3868)];
12910 var $3870=$x;
12911 var $3871=((($3870)*(3))&-1);
12912 var $3872=((($3871)+(1))|0);
12913 var $3873=$line;
12914 var $3874=(($3873+$3872)|0);
12915 HEAP8[($3874)]=$3869;
12916 var $3875=(($colour2+2)|0);
12917 var $3876=HEAP8[($3875)];
12918 var $3877=$x;
12919 var $3878=((($3877)*(3))&-1);
12920 var $3879=((($3878)+(2))|0);
12921 var $3880=$line;
12922 var $3881=(($3880+$3879)|0);
12923 HEAP8[($3881)]=$3876;
12924 $bicolour=0;
12925 label=296;break;
12926 case 295:
12927 var $3883=(($colour1)|0);
12928 var $3884=HEAP8[($3883)];
12929 var $3885=$x;
12930 var $3886=((($3885)*(3))&-1);
12931 var $3887=$line;
12932 var $3888=(($3887+$3886)|0);
12933 HEAP8[($3888)]=$3884;
12934 var $3889=(($colour1+1)|0);
12935 var $3890=HEAP8[($3889)];
12936 var $3891=$x;
12937 var $3892=((($3891)*(3))&-1);
12938 var $3893=((($3892)+(1))|0);
12939 var $3894=$line;
12940 var $3895=(($3894+$3893)|0);
12941 HEAP8[($3895)]=$3890;
12942 var $3896=(($colour1+2)|0);
12943 var $3897=HEAP8[($3896)];
12944 var $3898=$x;
12945 var $3899=((($3898)*(3))&-1);
12946 var $3900=((($3899)+(2))|0);
12947 var $3901=$line;
12948 var $3902=(($3901+$3900)|0);
12949 HEAP8[($3902)]=$3897;
12950 $bicolour=1;
12951 var $3903=$count;
12952 var $3904=((($3903)+(1))|0);
12953 $count=$3904;
12954 label=296;break;
12955 case 296:
12956 var $3906=$count;
12957 var $3907=((($3906)-(1))|0);
12958 $count=$3907;
12959 var $3908=$x;
12960 var $3909=((($3908)+(1))|0);
12961 $x=$3909;
12962 var $3910=$bicolour;
12963 var $3911=($3910|0)!=0;
12964 if($3911){label=297;break;}else{label=298;break;}
12965 case 297:
12966 var $3913=(($colour2)|0);
12967 var $3914=HEAP8[($3913)];
12968 var $3915=$x;
12969 var $3916=((($3915)*(3))&-1);
12970 var $3917=$line;
12971 var $3918=(($3917+$3916)|0);
12972 HEAP8[($3918)]=$3914;
12973 var $3919=(($colour2+1)|0);
12974 var $3920=HEAP8[($3919)];
12975 var $3921=$x;
12976 var $3922=((($3921)*(3))&-1);
12977 var $3923=((($3922)+(1))|0);
12978 var $3924=$line;
12979 var $3925=(($3924+$3923)|0);
12980 HEAP8[($3925)]=$3920;
12981 var $3926=(($colour2+2)|0);
12982 var $3927=HEAP8[($3926)];
12983 var $3928=$x;
12984 var $3929=((($3928)*(3))&-1);
12985 var $3930=((($3929)+(2))|0);
12986 var $3931=$line;
12987 var $3932=(($3931+$3930)|0);
12988 HEAP8[($3932)]=$3927;
12989 $bicolour=0;
12990 label=299;break;
12991 case 298:
12992 var $3934=(($colour1)|0);
12993 var $3935=HEAP8[($3934)];
12994 var $3936=$x;
12995 var $3937=((($3936)*(3))&-1);
12996 var $3938=$line;
12997 var $3939=(($3938+$3937)|0);
12998 HEAP8[($3939)]=$3935;
12999 var $3940=(($colour1+1)|0);
13000 var $3941=HEAP8[($3940)];
13001 var $3942=$x;
13002 var $3943=((($3942)*(3))&-1);
13003 var $3944=((($3943)+(1))|0);
13004 var $3945=$line;
13005 var $3946=(($3945+$3944)|0);
13006 HEAP8[($3946)]=$3941;
13007 var $3947=(($colour1+2)|0);
13008 var $3948=HEAP8[($3947)];
13009 var $3949=$x;
13010 var $3950=((($3949)*(3))&-1);
13011 var $3951=((($3950)+(2))|0);
13012 var $3952=$line;
13013 var $3953=(($3952+$3951)|0);
13014 HEAP8[($3953)]=$3948;
13015 $bicolour=1;
13016 var $3954=$count;
13017 var $3955=((($3954)+(1))|0);
13018 $count=$3955;
13019 label=299;break;
13020 case 299:
13021 var $3957=$count;
13022 var $3958=((($3957)-(1))|0);
13023 $count=$3958;
13024 var $3959=$x;
13025 var $3960=((($3959)+(1))|0);
13026 $x=$3960;
13027 var $3961=$bicolour;
13028 var $3962=($3961|0)!=0;
13029 if($3962){label=300;break;}else{label=301;break;}
13030 case 300:
13031 var $3964=(($colour2)|0);
13032 var $3965=HEAP8[($3964)];
13033 var $3966=$x;
13034 var $3967=((($3966)*(3))&-1);
13035 var $3968=$line;
13036 var $3969=(($3968+$3967)|0);
13037 HEAP8[($3969)]=$3965;
13038 var $3970=(($colour2+1)|0);
13039 var $3971=HEAP8[($3970)];
13040 var $3972=$x;
13041 var $3973=((($3972)*(3))&-1);
13042 var $3974=((($3973)+(1))|0);
13043 var $3975=$line;
13044 var $3976=(($3975+$3974)|0);
13045 HEAP8[($3976)]=$3971;
13046 var $3977=(($colour2+2)|0);
13047 var $3978=HEAP8[($3977)];
13048 var $3979=$x;
13049 var $3980=((($3979)*(3))&-1);
13050 var $3981=((($3980)+(2))|0);
13051 var $3982=$line;
13052 var $3983=(($3982+$3981)|0);
13053 HEAP8[($3983)]=$3978;
13054 $bicolour=0;
13055 label=302;break;
13056 case 301:
13057 var $3985=(($colour1)|0);
13058 var $3986=HEAP8[($3985)];
13059 var $3987=$x;
13060 var $3988=((($3987)*(3))&-1);
13061 var $3989=$line;
13062 var $3990=(($3989+$3988)|0);
13063 HEAP8[($3990)]=$3986;
13064 var $3991=(($colour1+1)|0);
13065 var $3992=HEAP8[($3991)];
13066 var $3993=$x;
13067 var $3994=((($3993)*(3))&-1);
13068 var $3995=((($3994)+(1))|0);
13069 var $3996=$line;
13070 var $3997=(($3996+$3995)|0);
13071 HEAP8[($3997)]=$3992;
13072 var $3998=(($colour1+2)|0);
13073 var $3999=HEAP8[($3998)];
13074 var $4000=$x;
13075 var $4001=((($4000)*(3))&-1);
13076 var $4002=((($4001)+(2))|0);
13077 var $4003=$line;
13078 var $4004=(($4003+$4002)|0);
13079 HEAP8[($4004)]=$3999;
13080 $bicolour=1;
13081 var $4005=$count;
13082 var $4006=((($4005)+(1))|0);
13083 $count=$4006;
13084 label=302;break;
13085 case 302:
13086 var $4008=$count;
13087 var $4009=((($4008)-(1))|0);
13088 $count=$4009;
13089 var $4010=$x;
13090 var $4011=((($4010)+(1))|0);
13091 $x=$4011;
13092 var $4012=$bicolour;
13093 var $4013=($4012|0)!=0;
13094 if($4013){label=303;break;}else{label=304;break;}
13095 case 303:
13096 var $4015=(($colour2)|0);
13097 var $4016=HEAP8[($4015)];
13098 var $4017=$x;
13099 var $4018=((($4017)*(3))&-1);
13100 var $4019=$line;
13101 var $4020=(($4019+$4018)|0);
13102 HEAP8[($4020)]=$4016;
13103 var $4021=(($colour2+1)|0);
13104 var $4022=HEAP8[($4021)];
13105 var $4023=$x;
13106 var $4024=((($4023)*(3))&-1);
13107 var $4025=((($4024)+(1))|0);
13108 var $4026=$line;
13109 var $4027=(($4026+$4025)|0);
13110 HEAP8[($4027)]=$4022;
13111 var $4028=(($colour2+2)|0);
13112 var $4029=HEAP8[($4028)];
13113 var $4030=$x;
13114 var $4031=((($4030)*(3))&-1);
13115 var $4032=((($4031)+(2))|0);
13116 var $4033=$line;
13117 var $4034=(($4033+$4032)|0);
13118 HEAP8[($4034)]=$4029;
13119 $bicolour=0;
13120 label=305;break;
13121 case 304:
13122 var $4036=(($colour1)|0);
13123 var $4037=HEAP8[($4036)];
13124 var $4038=$x;
13125 var $4039=((($4038)*(3))&-1);
13126 var $4040=$line;
13127 var $4041=(($4040+$4039)|0);
13128 HEAP8[($4041)]=$4037;
13129 var $4042=(($colour1+1)|0);
13130 var $4043=HEAP8[($4042)];
13131 var $4044=$x;
13132 var $4045=((($4044)*(3))&-1);
13133 var $4046=((($4045)+(1))|0);
13134 var $4047=$line;
13135 var $4048=(($4047+$4046)|0);
13136 HEAP8[($4048)]=$4043;
13137 var $4049=(($colour1+2)|0);
13138 var $4050=HEAP8[($4049)];
13139 var $4051=$x;
13140 var $4052=((($4051)*(3))&-1);
13141 var $4053=((($4052)+(2))|0);
13142 var $4054=$line;
13143 var $4055=(($4054+$4053)|0);
13144 HEAP8[($4055)]=$4050;
13145 $bicolour=1;
13146 var $4056=$count;
13147 var $4057=((($4056)+(1))|0);
13148 $count=$4057;
13149 label=305;break;
13150 case 305:
13151 var $4059=$count;
13152 var $4060=((($4059)-(1))|0);
13153 $count=$4060;
13154 var $4061=$x;
13155 var $4062=((($4061)+(1))|0);
13156 $x=$4062;
13157 var $4063=$bicolour;
13158 var $4064=($4063|0)!=0;
13159 if($4064){label=306;break;}else{label=307;break;}
13160 case 306:
13161 var $4066=(($colour2)|0);
13162 var $4067=HEAP8[($4066)];
13163 var $4068=$x;
13164 var $4069=((($4068)*(3))&-1);
13165 var $4070=$line;
13166 var $4071=(($4070+$4069)|0);
13167 HEAP8[($4071)]=$4067;
13168 var $4072=(($colour2+1)|0);
13169 var $4073=HEAP8[($4072)];
13170 var $4074=$x;
13171 var $4075=((($4074)*(3))&-1);
13172 var $4076=((($4075)+(1))|0);
13173 var $4077=$line;
13174 var $4078=(($4077+$4076)|0);
13175 HEAP8[($4078)]=$4073;
13176 var $4079=(($colour2+2)|0);
13177 var $4080=HEAP8[($4079)];
13178 var $4081=$x;
13179 var $4082=((($4081)*(3))&-1);
13180 var $4083=((($4082)+(2))|0);
13181 var $4084=$line;
13182 var $4085=(($4084+$4083)|0);
13183 HEAP8[($4085)]=$4080;
13184 $bicolour=0;
13185 label=308;break;
13186 case 307:
13187 var $4087=(($colour1)|0);
13188 var $4088=HEAP8[($4087)];
13189 var $4089=$x;
13190 var $4090=((($4089)*(3))&-1);
13191 var $4091=$line;
13192 var $4092=(($4091+$4090)|0);
13193 HEAP8[($4092)]=$4088;
13194 var $4093=(($colour1+1)|0);
13195 var $4094=HEAP8[($4093)];
13196 var $4095=$x;
13197 var $4096=((($4095)*(3))&-1);
13198 var $4097=((($4096)+(1))|0);
13199 var $4098=$line;
13200 var $4099=(($4098+$4097)|0);
13201 HEAP8[($4099)]=$4094;
13202 var $4100=(($colour1+2)|0);
13203 var $4101=HEAP8[($4100)];
13204 var $4102=$x;
13205 var $4103=((($4102)*(3))&-1);
13206 var $4104=((($4103)+(2))|0);
13207 var $4105=$line;
13208 var $4106=(($4105+$4104)|0);
13209 HEAP8[($4106)]=$4101;
13210 $bicolour=1;
13211 var $4107=$count;
13212 var $4108=((($4107)+(1))|0);
13213 $count=$4108;
13214 label=308;break;
13215 case 308:
13216 var $4110=$count;
13217 var $4111=((($4110)-(1))|0);
13218 $count=$4111;
13219 var $4112=$x;
13220 var $4113=((($4112)+(1))|0);
13221 $x=$4113;
13222 var $4114=$bicolour;
13223 var $4115=($4114|0)!=0;
13224 if($4115){label=309;break;}else{label=310;break;}
13225 case 309:
13226 var $4117=(($colour2)|0);
13227 var $4118=HEAP8[($4117)];
13228 var $4119=$x;
13229 var $4120=((($4119)*(3))&-1);
13230 var $4121=$line;
13231 var $4122=(($4121+$4120)|0);
13232 HEAP8[($4122)]=$4118;
13233 var $4123=(($colour2+1)|0);
13234 var $4124=HEAP8[($4123)];
13235 var $4125=$x;
13236 var $4126=((($4125)*(3))&-1);
13237 var $4127=((($4126)+(1))|0);
13238 var $4128=$line;
13239 var $4129=(($4128+$4127)|0);
13240 HEAP8[($4129)]=$4124;
13241 var $4130=(($colour2+2)|0);
13242 var $4131=HEAP8[($4130)];
13243 var $4132=$x;
13244 var $4133=((($4132)*(3))&-1);
13245 var $4134=((($4133)+(2))|0);
13246 var $4135=$line;
13247 var $4136=(($4135+$4134)|0);
13248 HEAP8[($4136)]=$4131;
13249 $bicolour=0;
13250 label=311;break;
13251 case 310:
13252 var $4138=(($colour1)|0);
13253 var $4139=HEAP8[($4138)];
13254 var $4140=$x;
13255 var $4141=((($4140)*(3))&-1);
13256 var $4142=$line;
13257 var $4143=(($4142+$4141)|0);
13258 HEAP8[($4143)]=$4139;
13259 var $4144=(($colour1+1)|0);
13260 var $4145=HEAP8[($4144)];
13261 var $4146=$x;
13262 var $4147=((($4146)*(3))&-1);
13263 var $4148=((($4147)+(1))|0);
13264 var $4149=$line;
13265 var $4150=(($4149+$4148)|0);
13266 HEAP8[($4150)]=$4145;
13267 var $4151=(($colour1+2)|0);
13268 var $4152=HEAP8[($4151)];
13269 var $4153=$x;
13270 var $4154=((($4153)*(3))&-1);
13271 var $4155=((($4154)+(2))|0);
13272 var $4156=$line;
13273 var $4157=(($4156+$4155)|0);
13274 HEAP8[($4157)]=$4152;
13275 $bicolour=1;
13276 var $4158=$count;
13277 var $4159=((($4158)+(1))|0);
13278 $count=$4159;
13279 label=311;break;
13280 case 311:
13281 var $4161=$count;
13282 var $4162=((($4161)-(1))|0);
13283 $count=$4162;
13284 var $4163=$x;
13285 var $4164=((($4163)+(1))|0);
13286 $x=$4164;
13287 label=284;break;
13288 case 312:
13289 label=313;break;
13290 case 313:
13291 var $4167=$count;
13292 var $4168=($4167|0)>0;
13293 if($4168){label=314;break;}else{var $4174=0;label=315;break;}
13294 case 314:
13295 var $4170=$x;
13296 var $4171=$3;
13297 var $4172=($4170|0)<($4171|0);
13298 var $4174=$4172;label=315;break;
13299 case 315:
13300 var $4174;
13301 if($4174){label=316;break;}else{label=320;break;}
13302 case 316:
13303 var $4176=$bicolour;
13304 var $4177=($4176|0)!=0;
13305 if($4177){label=317;break;}else{label=318;break;}
13306 case 317:
13307 var $4179=(($colour2)|0);
13308 var $4180=HEAP8[($4179)];
13309 var $4181=$x;
13310 var $4182=((($4181)*(3))&-1);
13311 var $4183=$line;
13312 var $4184=(($4183+$4182)|0);
13313 HEAP8[($4184)]=$4180;
13314 var $4185=(($colour2+1)|0);
13315 var $4186=HEAP8[($4185)];
13316 var $4187=$x;
13317 var $4188=((($4187)*(3))&-1);
13318 var $4189=((($4188)+(1))|0);
13319 var $4190=$line;
13320 var $4191=(($4190+$4189)|0);
13321 HEAP8[($4191)]=$4186;
13322 var $4192=(($colour2+2)|0);
13323 var $4193=HEAP8[($4192)];
13324 var $4194=$x;
13325 var $4195=((($4194)*(3))&-1);
13326 var $4196=((($4195)+(2))|0);
13327 var $4197=$line;
13328 var $4198=(($4197+$4196)|0);
13329 HEAP8[($4198)]=$4193;
13330 $bicolour=0;
13331 label=319;break;
13332 case 318:
13333 var $4200=(($colour1)|0);
13334 var $4201=HEAP8[($4200)];
13335 var $4202=$x;
13336 var $4203=((($4202)*(3))&-1);
13337 var $4204=$line;
13338 var $4205=(($4204+$4203)|0);
13339 HEAP8[($4205)]=$4201;
13340 var $4206=(($colour1+1)|0);
13341 var $4207=HEAP8[($4206)];
13342 var $4208=$x;
13343 var $4209=((($4208)*(3))&-1);
13344 var $4210=((($4209)+(1))|0);
13345 var $4211=$line;
13346 var $4212=(($4211+$4210)|0);
13347 HEAP8[($4212)]=$4207;
13348 var $4213=(($colour1+2)|0);
13349 var $4214=HEAP8[($4213)];
13350 var $4215=$x;
13351 var $4216=((($4215)*(3))&-1);
13352 var $4217=((($4216)+(2))|0);
13353 var $4218=$line;
13354 var $4219=(($4218+$4217)|0);
13355 HEAP8[($4219)]=$4214;
13356 $bicolour=1;
13357 var $4220=$count;
13358 var $4221=((($4220)+(1))|0);
13359 $count=$4221;
13360 label=319;break;
13361 case 319:
13362 var $4223=$count;
13363 var $4224=((($4223)-(1))|0);
13364 $count=$4224;
13365 var $4225=$x;
13366 var $4226=((($4225)+(1))|0);
13367 $x=$4226;
13368 label=313;break;
13369 case 320:
13370 label=344;break;
13371 case 321:
13372 label=322;break;
13373 case 322:
13374 var $4230=$count;
13375 var $4231=$4230&-8;
13376 var $4232=($4231|0)!=0;
13377 if($4232){label=323;break;}else{var $4239=0;label=324;break;}
13378 case 323:
13379 var $4234=$x;
13380 var $4235=((($4234)+(8))|0);
13381 var $4236=$3;
13382 var $4237=($4235|0)<($4236|0);
13383 var $4239=$4237;label=324;break;
13384 case 324:
13385 var $4239;
13386 if($4239){label=325;break;}else{label=326;break;}
13387 case 325:
13388 var $4241=$x;
13389 var $4242=((($4241)*(3))&-1);
13390 var $4243=$line;
13391 var $4244=(($4243+$4242)|0);
13392 HEAP8[($4244)]=-1;
13393 var $4245=$x;
13394 var $4246=((($4245)*(3))&-1);
13395 var $4247=((($4246)+(1))|0);
13396 var $4248=$line;
13397 var $4249=(($4248+$4247)|0);
13398 HEAP8[($4249)]=-1;
13399 var $4250=$x;
13400 var $4251=((($4250)*(3))&-1);
13401 var $4252=((($4251)+(2))|0);
13402 var $4253=$line;
13403 var $4254=(($4253+$4252)|0);
13404 HEAP8[($4254)]=-1;
13405 var $4255=$count;
13406 var $4256=((($4255)-(1))|0);
13407 $count=$4256;
13408 var $4257=$x;
13409 var $4258=((($4257)+(1))|0);
13410 $x=$4258;
13411 var $4259=$x;
13412 var $4260=((($4259)*(3))&-1);
13413 var $4261=$line;
13414 var $4262=(($4261+$4260)|0);
13415 HEAP8[($4262)]=-1;
13416 var $4263=$x;
13417 var $4264=((($4263)*(3))&-1);
13418 var $4265=((($4264)+(1))|0);
13419 var $4266=$line;
13420 var $4267=(($4266+$4265)|0);
13421 HEAP8[($4267)]=-1;
13422 var $4268=$x;
13423 var $4269=((($4268)*(3))&-1);
13424 var $4270=((($4269)+(2))|0);
13425 var $4271=$line;
13426 var $4272=(($4271+$4270)|0);
13427 HEAP8[($4272)]=-1;
13428 var $4273=$count;
13429 var $4274=((($4273)-(1))|0);
13430 $count=$4274;
13431 var $4275=$x;
13432 var $4276=((($4275)+(1))|0);
13433 $x=$4276;
13434 var $4277=$x;
13435 var $4278=((($4277)*(3))&-1);
13436 var $4279=$line;
13437 var $4280=(($4279+$4278)|0);
13438 HEAP8[($4280)]=-1;
13439 var $4281=$x;
13440 var $4282=((($4281)*(3))&-1);
13441 var $4283=((($4282)+(1))|0);
13442 var $4284=$line;
13443 var $4285=(($4284+$4283)|0);
13444 HEAP8[($4285)]=-1;
13445 var $4286=$x;
13446 var $4287=((($4286)*(3))&-1);
13447 var $4288=((($4287)+(2))|0);
13448 var $4289=$line;
13449 var $4290=(($4289+$4288)|0);
13450 HEAP8[($4290)]=-1;
13451 var $4291=$count;
13452 var $4292=((($4291)-(1))|0);
13453 $count=$4292;
13454 var $4293=$x;
13455 var $4294=((($4293)+(1))|0);
13456 $x=$4294;
13457 var $4295=$x;
13458 var $4296=((($4295)*(3))&-1);
13459 var $4297=$line;
13460 var $4298=(($4297+$4296)|0);
13461 HEAP8[($4298)]=-1;
13462 var $4299=$x;
13463 var $4300=((($4299)*(3))&-1);
13464 var $4301=((($4300)+(1))|0);
13465 var $4302=$line;
13466 var $4303=(($4302+$4301)|0);
13467 HEAP8[($4303)]=-1;
13468 var $4304=$x;
13469 var $4305=((($4304)*(3))&-1);
13470 var $4306=((($4305)+(2))|0);
13471 var $4307=$line;
13472 var $4308=(($4307+$4306)|0);
13473 HEAP8[($4308)]=-1;
13474 var $4309=$count;
13475 var $4310=((($4309)-(1))|0);
13476 $count=$4310;
13477 var $4311=$x;
13478 var $4312=((($4311)+(1))|0);
13479 $x=$4312;
13480 var $4313=$x;
13481 var $4314=((($4313)*(3))&-1);
13482 var $4315=$line;
13483 var $4316=(($4315+$4314)|0);
13484 HEAP8[($4316)]=-1;
13485 var $4317=$x;
13486 var $4318=((($4317)*(3))&-1);
13487 var $4319=((($4318)+(1))|0);
13488 var $4320=$line;
13489 var $4321=(($4320+$4319)|0);
13490 HEAP8[($4321)]=-1;
13491 var $4322=$x;
13492 var $4323=((($4322)*(3))&-1);
13493 var $4324=((($4323)+(2))|0);
13494 var $4325=$line;
13495 var $4326=(($4325+$4324)|0);
13496 HEAP8[($4326)]=-1;
13497 var $4327=$count;
13498 var $4328=((($4327)-(1))|0);
13499 $count=$4328;
13500 var $4329=$x;
13501 var $4330=((($4329)+(1))|0);
13502 $x=$4330;
13503 var $4331=$x;
13504 var $4332=((($4331)*(3))&-1);
13505 var $4333=$line;
13506 var $4334=(($4333+$4332)|0);
13507 HEAP8[($4334)]=-1;
13508 var $4335=$x;
13509 var $4336=((($4335)*(3))&-1);
13510 var $4337=((($4336)+(1))|0);
13511 var $4338=$line;
13512 var $4339=(($4338+$4337)|0);
13513 HEAP8[($4339)]=-1;
13514 var $4340=$x;
13515 var $4341=((($4340)*(3))&-1);
13516 var $4342=((($4341)+(2))|0);
13517 var $4343=$line;
13518 var $4344=(($4343+$4342)|0);
13519 HEAP8[($4344)]=-1;
13520 var $4345=$count;
13521 var $4346=((($4345)-(1))|0);
13522 $count=$4346;
13523 var $4347=$x;
13524 var $4348=((($4347)+(1))|0);
13525 $x=$4348;
13526 var $4349=$x;
13527 var $4350=((($4349)*(3))&-1);
13528 var $4351=$line;
13529 var $4352=(($4351+$4350)|0);
13530 HEAP8[($4352)]=-1;
13531 var $4353=$x;
13532 var $4354=((($4353)*(3))&-1);
13533 var $4355=((($4354)+(1))|0);
13534 var $4356=$line;
13535 var $4357=(($4356+$4355)|0);
13536 HEAP8[($4357)]=-1;
13537 var $4358=$x;
13538 var $4359=((($4358)*(3))&-1);
13539 var $4360=((($4359)+(2))|0);
13540 var $4361=$line;
13541 var $4362=(($4361+$4360)|0);
13542 HEAP8[($4362)]=-1;
13543 var $4363=$count;
13544 var $4364=((($4363)-(1))|0);
13545 $count=$4364;
13546 var $4365=$x;
13547 var $4366=((($4365)+(1))|0);
13548 $x=$4366;
13549 var $4367=$x;
13550 var $4368=((($4367)*(3))&-1);
13551 var $4369=$line;
13552 var $4370=(($4369+$4368)|0);
13553 HEAP8[($4370)]=-1;
13554 var $4371=$x;
13555 var $4372=((($4371)*(3))&-1);
13556 var $4373=((($4372)+(1))|0);
13557 var $4374=$line;
13558 var $4375=(($4374+$4373)|0);
13559 HEAP8[($4375)]=-1;
13560 var $4376=$x;
13561 var $4377=((($4376)*(3))&-1);
13562 var $4378=((($4377)+(2))|0);
13563 var $4379=$line;
13564 var $4380=(($4379+$4378)|0);
13565 HEAP8[($4380)]=-1;
13566 var $4381=$count;
13567 var $4382=((($4381)-(1))|0);
13568 $count=$4382;
13569 var $4383=$x;
13570 var $4384=((($4383)+(1))|0);
13571 $x=$4384;
13572 label=322;break;
13573 case 326:
13574 label=327;break;
13575 case 327:
13576 var $4387=$count;
13577 var $4388=($4387|0)>0;
13578 if($4388){label=328;break;}else{var $4394=0;label=329;break;}
13579 case 328:
13580 var $4390=$x;
13581 var $4391=$3;
13582 var $4392=($4390|0)<($4391|0);
13583 var $4394=$4392;label=329;break;
13584 case 329:
13585 var $4394;
13586 if($4394){label=330;break;}else{label=331;break;}
13587 case 330:
13588 var $4396=$x;
13589 var $4397=((($4396)*(3))&-1);
13590 var $4398=$line;
13591 var $4399=(($4398+$4397)|0);
13592 HEAP8[($4399)]=-1;
13593 var $4400=$x;
13594 var $4401=((($4400)*(3))&-1);
13595 var $4402=((($4401)+(1))|0);
13596 var $4403=$line;
13597 var $4404=(($4403+$4402)|0);
13598 HEAP8[($4404)]=-1;
13599 var $4405=$x;
13600 var $4406=((($4405)*(3))&-1);
13601 var $4407=((($4406)+(2))|0);
13602 var $4408=$line;
13603 var $4409=(($4408+$4407)|0);
13604 HEAP8[($4409)]=-1;
13605 var $4410=$count;
13606 var $4411=((($4410)-(1))|0);
13607 $count=$4411;
13608 var $4412=$x;
13609 var $4413=((($4412)+(1))|0);
13610 $x=$4413;
13611 label=327;break;
13612 case 331:
13613 label=344;break;
13614 case 332:
13615 label=333;break;
13616 case 333:
13617 var $4417=$count;
13618 var $4418=$4417&-8;
13619 var $4419=($4418|0)!=0;
13620 if($4419){label=334;break;}else{var $4426=0;label=335;break;}
13621 case 334:
13622 var $4421=$x;
13623 var $4422=((($4421)+(8))|0);
13624 var $4423=$3;
13625 var $4424=($4422|0)<($4423|0);
13626 var $4426=$4424;label=335;break;
13627 case 335:
13628 var $4426;
13629 if($4426){label=336;break;}else{label=337;break;}
13630 case 336:
13631 var $4428=$x;
13632 var $4429=((($4428)*(3))&-1);
13633 var $4430=$line;
13634 var $4431=(($4430+$4429)|0);
13635 HEAP8[($4431)]=0;
13636 var $4432=$x;
13637 var $4433=((($4432)*(3))&-1);
13638 var $4434=((($4433)+(1))|0);
13639 var $4435=$line;
13640 var $4436=(($4435+$4434)|0);
13641 HEAP8[($4436)]=0;
13642 var $4437=$x;
13643 var $4438=((($4437)*(3))&-1);
13644 var $4439=((($4438)+(2))|0);
13645 var $4440=$line;
13646 var $4441=(($4440+$4439)|0);
13647 HEAP8[($4441)]=0;
13648 var $4442=$count;
13649 var $4443=((($4442)-(1))|0);
13650 $count=$4443;
13651 var $4444=$x;
13652 var $4445=((($4444)+(1))|0);
13653 $x=$4445;
13654 var $4446=$x;
13655 var $4447=((($4446)*(3))&-1);
13656 var $4448=$line;
13657 var $4449=(($4448+$4447)|0);
13658 HEAP8[($4449)]=0;
13659 var $4450=$x;
13660 var $4451=((($4450)*(3))&-1);
13661 var $4452=((($4451)+(1))|0);
13662 var $4453=$line;
13663 var $4454=(($4453+$4452)|0);
13664 HEAP8[($4454)]=0;
13665 var $4455=$x;
13666 var $4456=((($4455)*(3))&-1);
13667 var $4457=((($4456)+(2))|0);
13668 var $4458=$line;
13669 var $4459=(($4458+$4457)|0);
13670 HEAP8[($4459)]=0;
13671 var $4460=$count;
13672 var $4461=((($4460)-(1))|0);
13673 $count=$4461;
13674 var $4462=$x;
13675 var $4463=((($4462)+(1))|0);
13676 $x=$4463;
13677 var $4464=$x;
13678 var $4465=((($4464)*(3))&-1);
13679 var $4466=$line;
13680 var $4467=(($4466+$4465)|0);
13681 HEAP8[($4467)]=0;
13682 var $4468=$x;
13683 var $4469=((($4468)*(3))&-1);
13684 var $4470=((($4469)+(1))|0);
13685 var $4471=$line;
13686 var $4472=(($4471+$4470)|0);
13687 HEAP8[($4472)]=0;
13688 var $4473=$x;
13689 var $4474=((($4473)*(3))&-1);
13690 var $4475=((($4474)+(2))|0);
13691 var $4476=$line;
13692 var $4477=(($4476+$4475)|0);
13693 HEAP8[($4477)]=0;
13694 var $4478=$count;
13695 var $4479=((($4478)-(1))|0);
13696 $count=$4479;
13697 var $4480=$x;
13698 var $4481=((($4480)+(1))|0);
13699 $x=$4481;
13700 var $4482=$x;
13701 var $4483=((($4482)*(3))&-1);
13702 var $4484=$line;
13703 var $4485=(($4484+$4483)|0);
13704 HEAP8[($4485)]=0;
13705 var $4486=$x;
13706 var $4487=((($4486)*(3))&-1);
13707 var $4488=((($4487)+(1))|0);
13708 var $4489=$line;
13709 var $4490=(($4489+$4488)|0);
13710 HEAP8[($4490)]=0;
13711 var $4491=$x;
13712 var $4492=((($4491)*(3))&-1);
13713 var $4493=((($4492)+(2))|0);
13714 var $4494=$line;
13715 var $4495=(($4494+$4493)|0);
13716 HEAP8[($4495)]=0;
13717 var $4496=$count;
13718 var $4497=((($4496)-(1))|0);
13719 $count=$4497;
13720 var $4498=$x;
13721 var $4499=((($4498)+(1))|0);
13722 $x=$4499;
13723 var $4500=$x;
13724 var $4501=((($4500)*(3))&-1);
13725 var $4502=$line;
13726 var $4503=(($4502+$4501)|0);
13727 HEAP8[($4503)]=0;
13728 var $4504=$x;
13729 var $4505=((($4504)*(3))&-1);
13730 var $4506=((($4505)+(1))|0);
13731 var $4507=$line;
13732 var $4508=(($4507+$4506)|0);
13733 HEAP8[($4508)]=0;
13734 var $4509=$x;
13735 var $4510=((($4509)*(3))&-1);
13736 var $4511=((($4510)+(2))|0);
13737 var $4512=$line;
13738 var $4513=(($4512+$4511)|0);
13739 HEAP8[($4513)]=0;
13740 var $4514=$count;
13741 var $4515=((($4514)-(1))|0);
13742 $count=$4515;
13743 var $4516=$x;
13744 var $4517=((($4516)+(1))|0);
13745 $x=$4517;
13746 var $4518=$x;
13747 var $4519=((($4518)*(3))&-1);
13748 var $4520=$line;
13749 var $4521=(($4520+$4519)|0);
13750 HEAP8[($4521)]=0;
13751 var $4522=$x;
13752 var $4523=((($4522)*(3))&-1);
13753 var $4524=((($4523)+(1))|0);
13754 var $4525=$line;
13755 var $4526=(($4525+$4524)|0);
13756 HEAP8[($4526)]=0;
13757 var $4527=$x;
13758 var $4528=((($4527)*(3))&-1);
13759 var $4529=((($4528)+(2))|0);
13760 var $4530=$line;
13761 var $4531=(($4530+$4529)|0);
13762 HEAP8[($4531)]=0;
13763 var $4532=$count;
13764 var $4533=((($4532)-(1))|0);
13765 $count=$4533;
13766 var $4534=$x;
13767 var $4535=((($4534)+(1))|0);
13768 $x=$4535;
13769 var $4536=$x;
13770 var $4537=((($4536)*(3))&-1);
13771 var $4538=$line;
13772 var $4539=(($4538+$4537)|0);
13773 HEAP8[($4539)]=0;
13774 var $4540=$x;
13775 var $4541=((($4540)*(3))&-1);
13776 var $4542=((($4541)+(1))|0);
13777 var $4543=$line;
13778 var $4544=(($4543+$4542)|0);
13779 HEAP8[($4544)]=0;
13780 var $4545=$x;
13781 var $4546=((($4545)*(3))&-1);
13782 var $4547=((($4546)+(2))|0);
13783 var $4548=$line;
13784 var $4549=(($4548+$4547)|0);
13785 HEAP8[($4549)]=0;
13786 var $4550=$count;
13787 var $4551=((($4550)-(1))|0);
13788 $count=$4551;
13789 var $4552=$x;
13790 var $4553=((($4552)+(1))|0);
13791 $x=$4553;
13792 var $4554=$x;
13793 var $4555=((($4554)*(3))&-1);
13794 var $4556=$line;
13795 var $4557=(($4556+$4555)|0);
13796 HEAP8[($4557)]=0;
13797 var $4558=$x;
13798 var $4559=((($4558)*(3))&-1);
13799 var $4560=((($4559)+(1))|0);
13800 var $4561=$line;
13801 var $4562=(($4561+$4560)|0);
13802 HEAP8[($4562)]=0;
13803 var $4563=$x;
13804 var $4564=((($4563)*(3))&-1);
13805 var $4565=((($4564)+(2))|0);
13806 var $4566=$line;
13807 var $4567=(($4566+$4565)|0);
13808 HEAP8[($4567)]=0;
13809 var $4568=$count;
13810 var $4569=((($4568)-(1))|0);
13811 $count=$4569;
13812 var $4570=$x;
13813 var $4571=((($4570)+(1))|0);
13814 $x=$4571;
13815 label=333;break;
13816 case 337:
13817 label=338;break;
13818 case 338:
13819 var $4574=$count;
13820 var $4575=($4574|0)>0;
13821 if($4575){label=339;break;}else{var $4581=0;label=340;break;}
13822 case 339:
13823 var $4577=$x;
13824 var $4578=$3;
13825 var $4579=($4577|0)<($4578|0);
13826 var $4581=$4579;label=340;break;
13827 case 340:
13828 var $4581;
13829 if($4581){label=341;break;}else{label=342;break;}
13830 case 341:
13831 var $4583=$x;
13832 var $4584=((($4583)*(3))&-1);
13833 var $4585=$line;
13834 var $4586=(($4585+$4584)|0);
13835 HEAP8[($4586)]=0;
13836 var $4587=$x;
13837 var $4588=((($4587)*(3))&-1);
13838 var $4589=((($4588)+(1))|0);
13839 var $4590=$line;
13840 var $4591=(($4590+$4589)|0);
13841 HEAP8[($4591)]=0;
13842 var $4592=$x;
13843 var $4593=((($4592)*(3))&-1);
13844 var $4594=((($4593)+(2))|0);
13845 var $4595=$line;
13846 var $4596=(($4595+$4594)|0);
13847 HEAP8[($4596)]=0;
13848 var $4597=$count;
13849 var $4598=((($4597)-(1))|0);
13850 $count=$4598;
13851 var $4599=$x;
13852 var $4600=((($4599)+(1))|0);
13853 $x=$4600;
13854 label=338;break;
13855 case 342:
13856 label=344;break;
13857 case 343:
13858 $1=0;
13859 label=347;break;
13860 case 344:
13861 label=34;break;
13862 case 345:
13863 label=2;break;
13864 case 346:
13865 $1=1;
13866 label=347;break;
13867 case 347:
13868 var $4607=$1;
13869 STACKTOP=sp;return $4607;
13870 default: assert(0, "bad label: " + label);
13871 }
13872
13873}
13874
13875
13876function _bitmap_decompress_32($output,$output_width,$output_height,$input_width,$input_height,$input,$size){
13877 var label=0;
13878 var sp=STACKTOP; (assert((STACKTOP|0) < (STACK_MAX|0))|0);
13879 label = 1;
13880 while(1)switch(label){
13881 case 1:
13882 var $1;
13883 var $2;
13884 var $3;
13885 var $4;
13886 var $5;
13887 var $6;
13888 var $7;
13889 var $temp;
13890 var $rv;
13891 var $y;
13892 var $x;
13893 var $r;
13894 var $g;
13895 var $b;
13896 var $a;
13897 $1=$output;
13898 $2=$output_width;
13899 $3=$output_height;
13900 $4=$input_width;
13901 $5=$input_height;
13902 $6=$input;
13903 $7=$size;
13904 var $8=$4;
13905 var $9=$5;
13906 var $10=(Math_imul($8,$9)|0);
13907 var $11=($10<<2);
13908 var $12=_malloc($11);
13909 $temp=$12;
13910 var $13=$temp;
13911 var $14=$4;
13912 var $15=$5;
13913 var $16=$6;
13914 var $17=$7;
13915 var $18=_bitmap_decompress4($13,$14,$15,$16,$17);
13916 $rv=$18;
13917 $y=0;
13918 label=2;break;
13919 case 2:
13920 var $20=$y;
13921 var $21=$3;
13922 var $22=($20|0)<($21|0);
13923 if($22){label=3;break;}else{label=9;break;}
13924 case 3:
13925 $x=0;
13926 label=4;break;
13927 case 4:
13928 var $25=$x;
13929 var $26=$2;
13930 var $27=($25|0)<($26|0);
13931 if($27){label=5;break;}else{label=7;break;}
13932 case 5:
13933 var $29=$y;
13934 var $30=$4;
13935 var $31=(Math_imul($29,$30)|0);
13936 var $32=$x;
13937 var $33=((($31)+($32))|0);
13938 var $34=($33<<2);
13939 var $35=$temp;
13940 var $36=(($35+$34)|0);
13941 var $37=HEAP8[($36)];
13942 $r=$37;
13943 var $38=$y;
13944 var $39=$4;
13945 var $40=(Math_imul($38,$39)|0);
13946 var $41=$x;
13947 var $42=((($40)+($41))|0);
13948 var $43=($42<<2);
13949 var $44=((($43)+(1))|0);
13950 var $45=$temp;
13951 var $46=(($45+$44)|0);
13952 var $47=HEAP8[($46)];
13953 $g=$47;
13954 var $48=$y;
13955 var $49=$4;
13956 var $50=(Math_imul($48,$49)|0);
13957 var $51=$x;
13958 var $52=((($50)+($51))|0);
13959 var $53=($52<<2);
13960 var $54=((($53)+(2))|0);
13961 var $55=$temp;
13962 var $56=(($55+$54)|0);
13963 var $57=HEAP8[($56)];
13964 $b=$57;
13965 var $58=$y;
13966 var $59=$4;
13967 var $60=(Math_imul($58,$59)|0);
13968 var $61=$x;
13969 var $62=((($60)+($61))|0);
13970 var $63=($62<<2);
13971 var $64=((($63)+(3))|0);
13972 var $65=$temp;
13973 var $66=(($65+$64)|0);
13974 var $67=HEAP8[($66)];
13975 $a=$67;
13976 var $68=$r;
13977 var $69=($68&255);
13978 var $70=$69<<16;
13979 var $71=-16777216|$70;
13980 var $72=$g;
13981 var $73=($72&255);
13982 var $74=$73<<8;
13983 var $75=$71|$74;
13984 var $76=$b;
13985 var $77=($76&255);
13986 var $78=$75|$77;
13987 var $79=$y;
13988 var $80=$2;
13989 var $81=(Math_imul($79,$80)|0);
13990 var $82=$x;
13991 var $83=((($81)+($82))|0);
13992 var $84=$1;
13993 var $85=$84;
13994 var $86=(($85+($83<<2))|0);
13995 HEAP32[(($86)>>2)]=$78;
13996 label=6;break;
13997 case 6:
13998 var $88=$x;
13999 var $89=((($88)+(1))|0);
14000 $x=$89;
14001 label=4;break;
14002 case 7:
14003 label=8;break;
14004 case 8:
14005 var $92=$y;
14006 var $93=((($92)+(1))|0);
14007 $y=$93;
14008 label=2;break;
14009 case 9:
14010 var $95=$temp;
14011 _free($95);
14012 var $96=$rv;
14013 STACKTOP=sp;return $96;
14014 default: assert(0, "bad label: " + label);
14015 }
14016
14017}
14018Module["_bitmap_decompress_32"] = _bitmap_decompress_32;
14019
14020function _bitmap_decompress4($output,$width,$height,$input,$size){
14021 var label=0;
14022 var sp=STACKTOP; (assert((STACKTOP|0) < (STACK_MAX|0))|0);
14023 label = 1;
14024 while(1)switch(label){
14025 case 1:
14026 var $1;
14027 var $2;
14028 var $3;
14029 var $4;
14030 var $5;
14031 var $6;
14032 var $code;
14033 var $bytes_pro;
14034 var $total_pro;
14035 $2=$output;
14036 $3=$width;
14037 $4=$height;
14038 $5=$input;
14039 $6=$size;
14040 var $7=$5;
14041 var $8=(($7+1)|0);
14042 $5=$8;
14043 var $9=HEAP8[($7)];
14044 var $10=($9&255);
14045 $code=$10;
14046 var $11=$code;
14047 var $12=($11|0)!=16;
14048 if($12){label=2;break;}else{label=3;break;}
14049 case 2:
14050 $1=0;
14051 label=4;break;
14052 case 3:
14053 $total_pro=1;
14054 var $15=$5;
14055 var $16=$3;
14056 var $17=$4;
14057 var $18=$2;
14058 var $19=(($18+3)|0);
14059 var $20=$6;
14060 var $21=$total_pro;
14061 var $22=((($20)-($21))|0);
14062 var $23=_process_plane($15,$16,$17,$19,$22);
14063 $bytes_pro=$23;
14064 var $24=$bytes_pro;
14065 var $25=$total_pro;
14066 var $26=((($25)+($24))|0);
14067 $total_pro=$26;
14068 var $27=$bytes_pro;
14069 var $28=$5;
14070 var $29=(($28+$27)|0);
14071 $5=$29;
14072 var $30=$5;
14073 var $31=$3;
14074 var $32=$4;
14075 var $33=$2;
14076 var $34=(($33+2)|0);
14077 var $35=$6;
14078 var $36=$total_pro;
14079 var $37=((($35)-($36))|0);
14080 var $38=_process_plane($30,$31,$32,$34,$37);
14081 $bytes_pro=$38;
14082 var $39=$bytes_pro;
14083 var $40=$total_pro;
14084 var $41=((($40)+($39))|0);
14085 $total_pro=$41;
14086 var $42=$bytes_pro;
14087 var $43=$5;
14088 var $44=(($43+$42)|0);
14089 $5=$44;
14090 var $45=$5;
14091 var $46=$3;
14092 var $47=$4;
14093 var $48=$2;
14094 var $49=(($48+1)|0);
14095 var $50=$6;
14096 var $51=$total_pro;
14097 var $52=((($50)-($51))|0);
14098 var $53=_process_plane($45,$46,$47,$49,$52);
14099 $bytes_pro=$53;
14100 var $54=$bytes_pro;
14101 var $55=$total_pro;
14102 var $56=((($55)+($54))|0);
14103 $total_pro=$56;
14104 var $57=$bytes_pro;
14105 var $58=$5;
14106 var $59=(($58+$57)|0);
14107 $5=$59;
14108 var $60=$5;
14109 var $61=$3;
14110 var $62=$4;
14111 var $63=$2;
14112 var $64=(($63)|0);
14113 var $65=$6;
14114 var $66=$total_pro;
14115 var $67=((($65)-($66))|0);
14116 var $68=_process_plane($60,$61,$62,$64,$67);
14117 $bytes_pro=$68;
14118 var $69=$bytes_pro;
14119 var $70=$total_pro;
14120 var $71=((($70)+($69))|0);
14121 $total_pro=$71;
14122 var $72=$6;
14123 var $73=$total_pro;
14124 var $74=($72|0)==($73|0);
14125 var $75=($74&1);
14126 $1=$75;
14127 label=4;break;
14128 case 4:
14129 var $77=$1;
14130 STACKTOP=sp;return $77;
14131 default: assert(0, "bad label: " + label);
14132 }
14133
14134}
14135
14136
14137function _process_plane($in,$width,$height,$out,$size){
14138 var label=0;
14139 var sp=STACKTOP; (assert((STACKTOP|0) < (STACK_MAX|0))|0);
14140 label = 1;
14141 while(1)switch(label){
14142 case 1:
14143 var $1;
14144 var $2;
14145 var $3;
14146 var $4;
14147 var $5;
14148 var $indexw;
14149 var $indexh;
14150 var $code;
14151 var $collen;
14152 var $replen;
14153 var $color;
14154 var $x;
14155 var $revcode;
14156 var $last_line;
14157 var $this_line;
14158 var $org_in;
14159 var $org_out;
14160 $1=$in;
14161 $2=$width;
14162 $3=$height;
14163 $4=$out;
14164 $5=$size;
14165 var $6=$1;
14166 $org_in=$6;
14167 var $7=$4;
14168 $org_out=$7;
14169 $last_line=0;
14170 $indexh=0;
14171 label=2;break;
14172 case 2:
14173 var $9=$indexh;
14174 var $10=$3;
14175 var $11=($9|0)<($10|0);
14176 if($11){label=3;break;}else{label=34;break;}
14177 case 3:
14178 var $13=$org_out;
14179 var $14=$2;
14180 var $15=$3;
14181 var $16=(Math_imul($14,$15)|0);
14182 var $17=($16<<2);
14183 var $18=(($13+$17)|0);
14184 var $19=$indexh;
14185 var $20=((($19)+(1))|0);
14186 var $21=$2;
14187 var $22=(Math_imul($20,$21)|0);
14188 var $23=($22<<2);
14189 var $24=(((-$23))|0);
14190 var $25=(($18+$24)|0);
14191 $4=$25;
14192 $color=0;
14193 var $26=$4;
14194 $this_line=$26;
14195 $indexw=0;
14196 var $27=$last_line;
14197 var $28=($27|0)==0;
14198 if($28){label=4;break;}else{label=17;break;}
14199 case 4:
14200 label=5;break;
14201 case 5:
14202 var $31=$indexw;
14203 var $32=$2;
14204 var $33=($31|0)<($32|0);
14205 if($33){label=6;break;}else{label=16;break;}
14206 case 6:
14207 var $35=$1;
14208 var $36=(($35+1)|0);
14209 $1=$36;
14210 var $37=HEAP8[($35)];
14211 var $38=($37&255);
14212 $code=$38;
14213 var $39=$code;
14214 var $40=$39&15;
14215 $replen=$40;
14216 var $41=$code;
14217 var $42=$41>>4;
14218 var $43=$42&15;
14219 $collen=$43;
14220 var $44=$replen;
14221 var $45=$44<<4;
14222 var $46=$collen;
14223 var $47=$45|$46;
14224 $revcode=$47;
14225 var $48=$revcode;
14226 var $49=($48|0)<=47;
14227 if($49){label=7;break;}else{label=9;break;}
14228 case 7:
14229 var $51=$revcode;
14230 var $52=($51|0)>=16;
14231 if($52){label=8;break;}else{label=9;break;}
14232 case 8:
14233 var $54=$revcode;
14234 $replen=$54;
14235 $collen=0;
14236 label=9;break;
14237 case 9:
14238 label=10;break;
14239 case 10:
14240 var $57=$collen;
14241 var $58=($57|0)>0;
14242 if($58){label=11;break;}else{label=12;break;}
14243 case 11:
14244 var $60=$1;
14245 var $61=(($60+1)|0);
14246 $1=$61;
14247 var $62=HEAP8[($60)];
14248 var $63=($62&255);
14249 $color=$63;
14250 var $64=$color;
14251 var $65=(($64)&255);
14252 var $66=$4;
14253 HEAP8[($66)]=$65;
14254 var $67=$4;
14255 var $68=(($67+4)|0);
14256 $4=$68;
14257 var $69=$indexw;
14258 var $70=((($69)+(1))|0);
14259 $indexw=$70;
14260 var $71=$collen;
14261 var $72=((($71)-(1))|0);
14262 $collen=$72;
14263 label=10;break;
14264 case 12:
14265 label=13;break;
14266 case 13:
14267 var $75=$replen;
14268 var $76=($75|0)>0;
14269 if($76){label=14;break;}else{label=15;break;}
14270 case 14:
14271 var $78=$color;
14272 var $79=(($78)&255);
14273 var $80=$4;
14274 HEAP8[($80)]=$79;
14275 var $81=$4;
14276 var $82=(($81+4)|0);
14277 $4=$82;
14278 var $83=$indexw;
14279 var $84=((($83)+(1))|0);
14280 $indexw=$84;
14281 var $85=$replen;
14282 var $86=((($85)-(1))|0);
14283 $replen=$86;
14284 label=13;break;
14285 case 15:
14286 label=5;break;
14287 case 16:
14288 label=33;break;
14289 case 17:
14290 label=18;break;
14291 case 18:
14292 var $91=$indexw;
14293 var $92=$2;
14294 var $93=($91|0)<($92|0);
14295 if($93){label=19;break;}else{label=32;break;}
14296 case 19:
14297 var $95=$1;
14298 var $96=(($95+1)|0);
14299 $1=$96;
14300 var $97=HEAP8[($95)];
14301 var $98=($97&255);
14302 $code=$98;
14303 var $99=$code;
14304 var $100=$99&15;
14305 $replen=$100;
14306 var $101=$code;
14307 var $102=$101>>4;
14308 var $103=$102&15;
14309 $collen=$103;
14310 var $104=$replen;
14311 var $105=$104<<4;
14312 var $106=$collen;
14313 var $107=$105|$106;
14314 $revcode=$107;
14315 var $108=$revcode;
14316 var $109=($108|0)<=47;
14317 if($109){label=20;break;}else{label=22;break;}
14318 case 20:
14319 var $111=$revcode;
14320 var $112=($111|0)>=16;
14321 if($112){label=21;break;}else{label=22;break;}
14322 case 21:
14323 var $114=$revcode;
14324 $replen=$114;
14325 $collen=0;
14326 label=22;break;
14327 case 22:
14328 label=23;break;
14329 case 23:
14330 var $117=$collen;
14331 var $118=($117|0)>0;
14332 if($118){label=24;break;}else{label=28;break;}
14333 case 24:
14334 var $120=$1;
14335 var $121=(($120+1)|0);
14336 $1=$121;
14337 var $122=HEAP8[($120)];
14338 var $123=($122&255);
14339 $x=$123;
14340 var $124=$x;
14341 var $125=$124&1;
14342 var $126=($125|0)!=0;
14343 if($126){label=25;break;}else{label=26;break;}
14344 case 25:
14345 var $128=$x;
14346 var $129=$128>>1;
14347 $x=$129;
14348 var $130=$x;
14349 var $131=((($130)+(1))|0);
14350 $x=$131;
14351 var $132=$x;
14352 var $133=(((-$132))|0);
14353 $color=$133;
14354 label=27;break;
14355 case 26:
14356 var $135=$x;
14357 var $136=$135>>1;
14358 $x=$136;
14359 var $137=$x;
14360 $color=$137;
14361 label=27;break;
14362 case 27:
14363 var $139=$indexw;
14364 var $140=($139<<2);
14365 var $141=$last_line;
14366 var $142=(($141+$140)|0);
14367 var $143=HEAP8[($142)];
14368 var $144=($143&255);
14369 var $145=$color;
14370 var $146=((($144)+($145))|0);
14371 $x=$146;
14372 var $147=$x;
14373 var $148=(($147)&255);
14374 var $149=$4;
14375 HEAP8[($149)]=$148;
14376 var $150=$4;
14377 var $151=(($150+4)|0);
14378 $4=$151;
14379 var $152=$indexw;
14380 var $153=((($152)+(1))|0);
14381 $indexw=$153;
14382 var $154=$collen;
14383 var $155=((($154)-(1))|0);
14384 $collen=$155;
14385 label=23;break;
14386 case 28:
14387 label=29;break;
14388 case 29:
14389 var $158=$replen;
14390 var $159=($158|0)>0;
14391 if($159){label=30;break;}else{label=31;break;}
14392 case 30:
14393 var $161=$indexw;
14394 var $162=($161<<2);
14395 var $163=$last_line;
14396 var $164=(($163+$162)|0);
14397 var $165=HEAP8[($164)];
14398 var $166=($165&255);
14399 var $167=$color;
14400 var $168=((($166)+($167))|0);
14401 $x=$168;
14402 var $169=$x;
14403 var $170=(($169)&255);
14404 var $171=$4;
14405 HEAP8[($171)]=$170;
14406 var $172=$4;
14407 var $173=(($172+4)|0);
14408 $4=$173;
14409 var $174=$indexw;
14410 var $175=((($174)+(1))|0);
14411 $indexw=$175;
14412 var $176=$replen;
14413 var $177=((($176)-(1))|0);
14414 $replen=$177;
14415 label=29;break;
14416 case 31:
14417 label=18;break;
14418 case 32:
14419 label=33;break;
14420 case 33:
14421 var $181=$indexh;
14422 var $182=((($181)+(1))|0);
14423 $indexh=$182;
14424 var $183=$this_line;
14425 $last_line=$183;
14426 label=2;break;
14427 case 34:
14428 var $185=$1;
14429 var $186=$org_in;
14430 var $187=$185;
14431 var $188=$186;
14432 var $189=((($187)-($188))|0);
14433 STACKTOP=sp;return $189;
14434 default: assert(0, "bad label: " + label);
14435 }
14436
14437}
14438
14439
14440function _malloc($bytes){
14441 var label=0;
14442
14443 label = 1;
14444 while(1)switch(label){
14445 case 1:
14446 var $1=($bytes>>>0)<245;
14447 if($1){label=2;break;}else{label=78;break;}
14448 case 2:
14449 var $3=($bytes>>>0)<11;
14450 if($3){var $8=16;label=4;break;}else{label=3;break;}
14451 case 3:
14452 var $5=((($bytes)+(11))|0);
14453 var $6=$5&-8;
14454 var $8=$6;label=4;break;
14455 case 4:
14456 var $8;
14457 var $9=$8>>>3;
14458 var $10=HEAP32[((40)>>2)];
14459 var $11=$10>>>($9>>>0);
14460 var $12=$11&3;
14461 var $13=($12|0)==0;
14462 if($13){label=12;break;}else{label=5;break;}
14463 case 5:
14464 var $15=$11&1;
14465 var $16=$15^1;
14466 var $17=((($16)+($9))|0);
14467 var $18=$17<<1;
14468 var $19=((80+($18<<2))|0);
14469 var $20=$19;
14470 var $_sum11=((($18)+(2))|0);
14471 var $21=((80+($_sum11<<2))|0);
14472 var $22=HEAP32[(($21)>>2)];
14473 var $23=(($22+8)|0);
14474 var $24=HEAP32[(($23)>>2)];
14475 var $25=($20|0)==($24|0);
14476 if($25){label=6;break;}else{label=7;break;}
14477 case 6:
14478 var $27=1<<$17;
14479 var $28=$27^-1;
14480 var $29=$10&$28;
14481 HEAP32[((40)>>2)]=$29;
14482 label=11;break;
14483 case 7:
14484 var $31=$24;
14485 var $32=HEAP32[((56)>>2)];
14486 var $33=($31>>>0)<($32>>>0);
14487 if($33){label=10;break;}else{label=8;break;}
14488 case 8:
14489 var $35=(($24+12)|0);
14490 var $36=HEAP32[(($35)>>2)];
14491 var $37=($36|0)==($22|0);
14492 if($37){label=9;break;}else{label=10;break;}
14493 case 9:
14494 HEAP32[(($35)>>2)]=$20;
14495 HEAP32[(($21)>>2)]=$24;
14496 label=11;break;
14497 case 10:
14498 _abort();
14499 throw "Reached an unreachable!";
14500 case 11:
14501 var $40=$17<<3;
14502 var $41=$40|3;
14503 var $42=(($22+4)|0);
14504 HEAP32[(($42)>>2)]=$41;
14505 var $43=$22;
14506 var $_sum1314=$40|4;
14507 var $44=(($43+$_sum1314)|0);
14508 var $45=$44;
14509 var $46=HEAP32[(($45)>>2)];
14510 var $47=$46|1;
14511 HEAP32[(($45)>>2)]=$47;
14512 var $48=$23;
14513 var $mem_0=$48;label=341;break;
14514 case 12:
14515 var $50=HEAP32[((48)>>2)];
14516 var $51=($8>>>0)>($50>>>0);
14517 if($51){label=13;break;}else{var $nb_0=$8;label=160;break;}
14518 case 13:
14519 var $53=($11|0)==0;
14520 if($53){label=27;break;}else{label=14;break;}
14521 case 14:
14522 var $55=$11<<$9;
14523 var $56=2<<$9;
14524 var $57=(((-$56))|0);
14525 var $58=$56|$57;
14526 var $59=$55&$58;
14527 var $60=(((-$59))|0);
14528 var $61=$59&$60;
14529 var $62=((($61)-(1))|0);
14530 var $63=$62>>>12;
14531 var $64=$63&16;
14532 var $65=$62>>>($64>>>0);
14533 var $66=$65>>>5;
14534 var $67=$66&8;
14535 var $68=$67|$64;
14536 var $69=$65>>>($67>>>0);
14537 var $70=$69>>>2;
14538 var $71=$70&4;
14539 var $72=$68|$71;
14540 var $73=$69>>>($71>>>0);
14541 var $74=$73>>>1;
14542 var $75=$74&2;
14543 var $76=$72|$75;
14544 var $77=$73>>>($75>>>0);
14545 var $78=$77>>>1;
14546 var $79=$78&1;
14547 var $80=$76|$79;
14548 var $81=$77>>>($79>>>0);
14549 var $82=((($80)+($81))|0);
14550 var $83=$82<<1;
14551 var $84=((80+($83<<2))|0);
14552 var $85=$84;
14553 var $_sum4=((($83)+(2))|0);
14554 var $86=((80+($_sum4<<2))|0);
14555 var $87=HEAP32[(($86)>>2)];
14556 var $88=(($87+8)|0);
14557 var $89=HEAP32[(($88)>>2)];
14558 var $90=($85|0)==($89|0);
14559 if($90){label=15;break;}else{label=16;break;}
14560 case 15:
14561 var $92=1<<$82;
14562 var $93=$92^-1;
14563 var $94=$10&$93;
14564 HEAP32[((40)>>2)]=$94;
14565 label=20;break;
14566 case 16:
14567 var $96=$89;
14568 var $97=HEAP32[((56)>>2)];
14569 var $98=($96>>>0)<($97>>>0);
14570 if($98){label=19;break;}else{label=17;break;}
14571 case 17:
14572 var $100=(($89+12)|0);
14573 var $101=HEAP32[(($100)>>2)];
14574 var $102=($101|0)==($87|0);
14575 if($102){label=18;break;}else{label=19;break;}
14576 case 18:
14577 HEAP32[(($100)>>2)]=$85;
14578 HEAP32[(($86)>>2)]=$89;
14579 label=20;break;
14580 case 19:
14581 _abort();
14582 throw "Reached an unreachable!";
14583 case 20:
14584 var $105=$82<<3;
14585 var $106=((($105)-($8))|0);
14586 var $107=$8|3;
14587 var $108=(($87+4)|0);
14588 HEAP32[(($108)>>2)]=$107;
14589 var $109=$87;
14590 var $110=(($109+$8)|0);
14591 var $111=$110;
14592 var $112=$106|1;
14593 var $_sum67=$8|4;
14594 var $113=(($109+$_sum67)|0);
14595 var $114=$113;
14596 HEAP32[(($114)>>2)]=$112;
14597 var $115=(($109+$105)|0);
14598 var $116=$115;
14599 HEAP32[(($116)>>2)]=$106;
14600 var $117=HEAP32[((48)>>2)];
14601 var $118=($117|0)==0;
14602 if($118){label=26;break;}else{label=21;break;}
14603 case 21:
14604 var $120=HEAP32[((60)>>2)];
14605 var $121=$117>>>3;
14606 var $122=$121<<1;
14607 var $123=((80+($122<<2))|0);
14608 var $124=$123;
14609 var $125=HEAP32[((40)>>2)];
14610 var $126=1<<$121;
14611 var $127=$125&$126;
14612 var $128=($127|0)==0;
14613 if($128){label=22;break;}else{label=23;break;}
14614 case 22:
14615 var $130=$125|$126;
14616 HEAP32[((40)>>2)]=$130;
14617 var $_sum9_pre=((($122)+(2))|0);
14618 var $_pre=((80+($_sum9_pre<<2))|0);
14619 var $F4_0=$124;var $_pre_phi=$_pre;label=25;break;
14620 case 23:
14621 var $_sum10=((($122)+(2))|0);
14622 var $132=((80+($_sum10<<2))|0);
14623 var $133=HEAP32[(($132)>>2)];
14624 var $134=$133;
14625 var $135=HEAP32[((56)>>2)];
14626 var $136=($134>>>0)<($135>>>0);
14627 if($136){label=24;break;}else{var $F4_0=$133;var $_pre_phi=$132;label=25;break;}
14628 case 24:
14629 _abort();
14630 throw "Reached an unreachable!";
14631 case 25:
14632 var $_pre_phi;
14633 var $F4_0;
14634 HEAP32[(($_pre_phi)>>2)]=$120;
14635 var $139=(($F4_0+12)|0);
14636 HEAP32[(($139)>>2)]=$120;
14637 var $140=(($120+8)|0);
14638 HEAP32[(($140)>>2)]=$F4_0;
14639 var $141=(($120+12)|0);
14640 HEAP32[(($141)>>2)]=$124;
14641 label=26;break;
14642 case 26:
14643 HEAP32[((48)>>2)]=$106;
14644 HEAP32[((60)>>2)]=$111;
14645 var $143=$88;
14646 var $mem_0=$143;label=341;break;
14647 case 27:
14648 var $145=HEAP32[((44)>>2)];
14649 var $146=($145|0)==0;
14650 if($146){var $nb_0=$8;label=160;break;}else{label=28;break;}
14651 case 28:
14652 var $148=(((-$145))|0);
14653 var $149=$145&$148;
14654 var $150=((($149)-(1))|0);
14655 var $151=$150>>>12;
14656 var $152=$151&16;
14657 var $153=$150>>>($152>>>0);
14658 var $154=$153>>>5;
14659 var $155=$154&8;
14660 var $156=$155|$152;
14661 var $157=$153>>>($155>>>0);
14662 var $158=$157>>>2;
14663 var $159=$158&4;
14664 var $160=$156|$159;
14665 var $161=$157>>>($159>>>0);
14666 var $162=$161>>>1;
14667 var $163=$162&2;
14668 var $164=$160|$163;
14669 var $165=$161>>>($163>>>0);
14670 var $166=$165>>>1;
14671 var $167=$166&1;
14672 var $168=$164|$167;
14673 var $169=$165>>>($167>>>0);
14674 var $170=((($168)+($169))|0);
14675 var $171=((344+($170<<2))|0);
14676 var $172=HEAP32[(($171)>>2)];
14677 var $173=(($172+4)|0);
14678 var $174=HEAP32[(($173)>>2)];
14679 var $175=$174&-8;
14680 var $176=((($175)-($8))|0);
14681 var $t_0_i=$172;var $v_0_i=$172;var $rsize_0_i=$176;label=29;break;
14682 case 29:
14683 var $rsize_0_i;
14684 var $v_0_i;
14685 var $t_0_i;
14686 var $178=(($t_0_i+16)|0);
14687 var $179=HEAP32[(($178)>>2)];
14688 var $180=($179|0)==0;
14689 if($180){label=30;break;}else{var $185=$179;label=31;break;}
14690 case 30:
14691 var $182=(($t_0_i+20)|0);
14692 var $183=HEAP32[(($182)>>2)];
14693 var $184=($183|0)==0;
14694 if($184){label=32;break;}else{var $185=$183;label=31;break;}
14695 case 31:
14696 var $185;
14697 var $186=(($185+4)|0);
14698 var $187=HEAP32[(($186)>>2)];
14699 var $188=$187&-8;
14700 var $189=((($188)-($8))|0);
14701 var $190=($189>>>0)<($rsize_0_i>>>0);
14702 var $_rsize_0_i=($190?$189:$rsize_0_i);
14703 var $_v_0_i=($190?$185:$v_0_i);
14704 var $t_0_i=$185;var $v_0_i=$_v_0_i;var $rsize_0_i=$_rsize_0_i;label=29;break;
14705 case 32:
14706 var $192=$v_0_i;
14707 var $193=HEAP32[((56)>>2)];
14708 var $194=($192>>>0)<($193>>>0);
14709 if($194){label=76;break;}else{label=33;break;}
14710 case 33:
14711 var $196=(($192+$8)|0);
14712 var $197=$196;
14713 var $198=($192>>>0)<($196>>>0);
14714 if($198){label=34;break;}else{label=76;break;}
14715 case 34:
14716 var $200=(($v_0_i+24)|0);
14717 var $201=HEAP32[(($200)>>2)];
14718 var $202=(($v_0_i+12)|0);
14719 var $203=HEAP32[(($202)>>2)];
14720 var $204=($203|0)==($v_0_i|0);
14721 if($204){label=40;break;}else{label=35;break;}
14722 case 35:
14723 var $206=(($v_0_i+8)|0);
14724 var $207=HEAP32[(($206)>>2)];
14725 var $208=$207;
14726 var $209=($208>>>0)<($193>>>0);
14727 if($209){label=39;break;}else{label=36;break;}
14728 case 36:
14729 var $211=(($207+12)|0);
14730 var $212=HEAP32[(($211)>>2)];
14731 var $213=($212|0)==($v_0_i|0);
14732 if($213){label=37;break;}else{label=39;break;}
14733 case 37:
14734 var $215=(($203+8)|0);
14735 var $216=HEAP32[(($215)>>2)];
14736 var $217=($216|0)==($v_0_i|0);
14737 if($217){label=38;break;}else{label=39;break;}
14738 case 38:
14739 HEAP32[(($211)>>2)]=$203;
14740 HEAP32[(($215)>>2)]=$207;
14741 var $R_1_i=$203;label=47;break;
14742 case 39:
14743 _abort();
14744 throw "Reached an unreachable!";
14745 case 40:
14746 var $220=(($v_0_i+20)|0);
14747 var $221=HEAP32[(($220)>>2)];
14748 var $222=($221|0)==0;
14749 if($222){label=41;break;}else{var $R_0_i=$221;var $RP_0_i=$220;label=42;break;}
14750 case 41:
14751 var $224=(($v_0_i+16)|0);
14752 var $225=HEAP32[(($224)>>2)];
14753 var $226=($225|0)==0;
14754 if($226){var $R_1_i=0;label=47;break;}else{var $R_0_i=$225;var $RP_0_i=$224;label=42;break;}
14755 case 42:
14756 var $RP_0_i;
14757 var $R_0_i;
14758 var $227=(($R_0_i+20)|0);
14759 var $228=HEAP32[(($227)>>2)];
14760 var $229=($228|0)==0;
14761 if($229){label=43;break;}else{var $R_0_i=$228;var $RP_0_i=$227;label=42;break;}
14762 case 43:
14763 var $231=(($R_0_i+16)|0);
14764 var $232=HEAP32[(($231)>>2)];
14765 var $233=($232|0)==0;
14766 if($233){label=44;break;}else{var $R_0_i=$232;var $RP_0_i=$231;label=42;break;}
14767 case 44:
14768 var $235=$RP_0_i;
14769 var $236=($235>>>0)<($193>>>0);
14770 if($236){label=46;break;}else{label=45;break;}
14771 case 45:
14772 HEAP32[(($RP_0_i)>>2)]=0;
14773 var $R_1_i=$R_0_i;label=47;break;
14774 case 46:
14775 _abort();
14776 throw "Reached an unreachable!";
14777 case 47:
14778 var $R_1_i;
14779 var $240=($201|0)==0;
14780 if($240){label=67;break;}else{label=48;break;}
14781 case 48:
14782 var $242=(($v_0_i+28)|0);
14783 var $243=HEAP32[(($242)>>2)];
14784 var $244=((344+($243<<2))|0);
14785 var $245=HEAP32[(($244)>>2)];
14786 var $246=($v_0_i|0)==($245|0);
14787 if($246){label=49;break;}else{label=51;break;}
14788 case 49:
14789 HEAP32[(($244)>>2)]=$R_1_i;
14790 var $cond_i=($R_1_i|0)==0;
14791 if($cond_i){label=50;break;}else{label=57;break;}
14792 case 50:
14793 var $248=HEAP32[(($242)>>2)];
14794 var $249=1<<$248;
14795 var $250=$249^-1;
14796 var $251=HEAP32[((44)>>2)];
14797 var $252=$251&$250;
14798 HEAP32[((44)>>2)]=$252;
14799 label=67;break;
14800 case 51:
14801 var $254=$201;
14802 var $255=HEAP32[((56)>>2)];
14803 var $256=($254>>>0)<($255>>>0);
14804 if($256){label=55;break;}else{label=52;break;}
14805 case 52:
14806 var $258=(($201+16)|0);
14807 var $259=HEAP32[(($258)>>2)];
14808 var $260=($259|0)==($v_0_i|0);
14809 if($260){label=53;break;}else{label=54;break;}
14810 case 53:
14811 HEAP32[(($258)>>2)]=$R_1_i;
14812 label=56;break;
14813 case 54:
14814 var $263=(($201+20)|0);
14815 HEAP32[(($263)>>2)]=$R_1_i;
14816 label=56;break;
14817 case 55:
14818 _abort();
14819 throw "Reached an unreachable!";
14820 case 56:
14821 var $266=($R_1_i|0)==0;
14822 if($266){label=67;break;}else{label=57;break;}
14823 case 57:
14824 var $268=$R_1_i;
14825 var $269=HEAP32[((56)>>2)];
14826 var $270=($268>>>0)<($269>>>0);
14827 if($270){label=66;break;}else{label=58;break;}
14828 case 58:
14829 var $272=(($R_1_i+24)|0);
14830 HEAP32[(($272)>>2)]=$201;
14831 var $273=(($v_0_i+16)|0);
14832 var $274=HEAP32[(($273)>>2)];
14833 var $275=($274|0)==0;
14834 if($275){label=62;break;}else{label=59;break;}
14835 case 59:
14836 var $277=$274;
14837 var $278=HEAP32[((56)>>2)];
14838 var $279=($277>>>0)<($278>>>0);
14839 if($279){label=61;break;}else{label=60;break;}
14840 case 60:
14841 var $281=(($R_1_i+16)|0);
14842 HEAP32[(($281)>>2)]=$274;
14843 var $282=(($274+24)|0);
14844 HEAP32[(($282)>>2)]=$R_1_i;
14845 label=62;break;
14846 case 61:
14847 _abort();
14848 throw "Reached an unreachable!";
14849 case 62:
14850 var $285=(($v_0_i+20)|0);
14851 var $286=HEAP32[(($285)>>2)];
14852 var $287=($286|0)==0;
14853 if($287){label=67;break;}else{label=63;break;}
14854 case 63:
14855 var $289=$286;
14856 var $290=HEAP32[((56)>>2)];
14857 var $291=($289>>>0)<($290>>>0);
14858 if($291){label=65;break;}else{label=64;break;}
14859 case 64:
14860 var $293=(($R_1_i+20)|0);
14861 HEAP32[(($293)>>2)]=$286;
14862 var $294=(($286+24)|0);
14863 HEAP32[(($294)>>2)]=$R_1_i;
14864 label=67;break;
14865 case 65:
14866 _abort();
14867 throw "Reached an unreachable!";
14868 case 66:
14869 _abort();
14870 throw "Reached an unreachable!";
14871 case 67:
14872 var $298=($rsize_0_i>>>0)<16;
14873 if($298){label=68;break;}else{label=69;break;}
14874 case 68:
14875 var $300=((($rsize_0_i)+($8))|0);
14876 var $301=$300|3;
14877 var $302=(($v_0_i+4)|0);
14878 HEAP32[(($302)>>2)]=$301;
14879 var $_sum4_i=((($300)+(4))|0);
14880 var $303=(($192+$_sum4_i)|0);
14881 var $304=$303;
14882 var $305=HEAP32[(($304)>>2)];
14883 var $306=$305|1;
14884 HEAP32[(($304)>>2)]=$306;
14885 label=77;break;
14886 case 69:
14887 var $308=$8|3;
14888 var $309=(($v_0_i+4)|0);
14889 HEAP32[(($309)>>2)]=$308;
14890 var $310=$rsize_0_i|1;
14891 var $_sum_i41=$8|4;
14892 var $311=(($192+$_sum_i41)|0);
14893 var $312=$311;
14894 HEAP32[(($312)>>2)]=$310;
14895 var $_sum1_i=((($rsize_0_i)+($8))|0);
14896 var $313=(($192+$_sum1_i)|0);
14897 var $314=$313;
14898 HEAP32[(($314)>>2)]=$rsize_0_i;
14899 var $315=HEAP32[((48)>>2)];
14900 var $316=($315|0)==0;
14901 if($316){label=75;break;}else{label=70;break;}
14902 case 70:
14903 var $318=HEAP32[((60)>>2)];
14904 var $319=$315>>>3;
14905 var $320=$319<<1;
14906 var $321=((80+($320<<2))|0);
14907 var $322=$321;
14908 var $323=HEAP32[((40)>>2)];
14909 var $324=1<<$319;
14910 var $325=$323&$324;
14911 var $326=($325|0)==0;
14912 if($326){label=71;break;}else{label=72;break;}
14913 case 71:
14914 var $328=$323|$324;
14915 HEAP32[((40)>>2)]=$328;
14916 var $_sum2_pre_i=((($320)+(2))|0);
14917 var $_pre_i=((80+($_sum2_pre_i<<2))|0);
14918 var $F1_0_i=$322;var $_pre_phi_i=$_pre_i;label=74;break;
14919 case 72:
14920 var $_sum3_i=((($320)+(2))|0);
14921 var $330=((80+($_sum3_i<<2))|0);
14922 var $331=HEAP32[(($330)>>2)];
14923 var $332=$331;
14924 var $333=HEAP32[((56)>>2)];
14925 var $334=($332>>>0)<($333>>>0);
14926 if($334){label=73;break;}else{var $F1_0_i=$331;var $_pre_phi_i=$330;label=74;break;}
14927 case 73:
14928 _abort();
14929 throw "Reached an unreachable!";
14930 case 74:
14931 var $_pre_phi_i;
14932 var $F1_0_i;
14933 HEAP32[(($_pre_phi_i)>>2)]=$318;
14934 var $337=(($F1_0_i+12)|0);
14935 HEAP32[(($337)>>2)]=$318;
14936 var $338=(($318+8)|0);
14937 HEAP32[(($338)>>2)]=$F1_0_i;
14938 var $339=(($318+12)|0);
14939 HEAP32[(($339)>>2)]=$322;
14940 label=75;break;
14941 case 75:
14942 HEAP32[((48)>>2)]=$rsize_0_i;
14943 HEAP32[((60)>>2)]=$197;
14944 label=77;break;
14945 case 76:
14946 _abort();
14947 throw "Reached an unreachable!";
14948 case 77:
14949 var $342=(($v_0_i+8)|0);
14950 var $343=$342;
14951 var $mem_0=$343;label=341;break;
14952 case 78:
14953 var $345=($bytes>>>0)>4294967231;
14954 if($345){var $nb_0=-1;label=160;break;}else{label=79;break;}
14955 case 79:
14956 var $347=((($bytes)+(11))|0);
14957 var $348=$347&-8;
14958 var $349=HEAP32[((44)>>2)];
14959 var $350=($349|0)==0;
14960 if($350){var $nb_0=$348;label=160;break;}else{label=80;break;}
14961 case 80:
14962 var $352=(((-$348))|0);
14963 var $353=$347>>>8;
14964 var $354=($353|0)==0;
14965 if($354){var $idx_0_i=0;label=83;break;}else{label=81;break;}
14966 case 81:
14967 var $356=($348>>>0)>16777215;
14968 if($356){var $idx_0_i=31;label=83;break;}else{label=82;break;}
14969 case 82:
14970 var $358=((($353)+(1048320))|0);
14971 var $359=$358>>>16;
14972 var $360=$359&8;
14973 var $361=$353<<$360;
14974 var $362=((($361)+(520192))|0);
14975 var $363=$362>>>16;
14976 var $364=$363&4;
14977 var $365=$364|$360;
14978 var $366=$361<<$364;
14979 var $367=((($366)+(245760))|0);
14980 var $368=$367>>>16;
14981 var $369=$368&2;
14982 var $370=$365|$369;
14983 var $371=(((14)-($370))|0);
14984 var $372=$366<<$369;
14985 var $373=$372>>>15;
14986 var $374=((($371)+($373))|0);
14987 var $375=$374<<1;
14988 var $376=((($374)+(7))|0);
14989 var $377=$348>>>($376>>>0);
14990 var $378=$377&1;
14991 var $379=$378|$375;
14992 var $idx_0_i=$379;label=83;break;
14993 case 83:
14994 var $idx_0_i;
14995 var $381=((344+($idx_0_i<<2))|0);
14996 var $382=HEAP32[(($381)>>2)];
14997 var $383=($382|0)==0;
14998 if($383){var $v_2_i=0;var $rsize_2_i=$352;var $t_1_i=0;label=90;break;}else{label=84;break;}
14999 case 84:
15000 var $385=($idx_0_i|0)==31;
15001 if($385){var $390=0;label=86;break;}else{label=85;break;}
15002 case 85:
15003 var $387=$idx_0_i>>>1;
15004 var $388=(((25)-($387))|0);
15005 var $390=$388;label=86;break;
15006 case 86:
15007 var $390;
15008 var $391=$348<<$390;
15009 var $v_0_i18=0;var $rsize_0_i17=$352;var $t_0_i16=$382;var $sizebits_0_i=$391;var $rst_0_i=0;label=87;break;
15010 case 87:
15011 var $rst_0_i;
15012 var $sizebits_0_i;
15013 var $t_0_i16;
15014 var $rsize_0_i17;
15015 var $v_0_i18;
15016 var $393=(($t_0_i16+4)|0);
15017 var $394=HEAP32[(($393)>>2)];
15018 var $395=$394&-8;
15019 var $396=((($395)-($348))|0);
15020 var $397=($396>>>0)<($rsize_0_i17>>>0);
15021 if($397){label=88;break;}else{var $v_1_i=$v_0_i18;var $rsize_1_i=$rsize_0_i17;label=89;break;}
15022 case 88:
15023 var $399=($395|0)==($348|0);
15024 if($399){var $v_2_i=$t_0_i16;var $rsize_2_i=$396;var $t_1_i=$t_0_i16;label=90;break;}else{var $v_1_i=$t_0_i16;var $rsize_1_i=$396;label=89;break;}
15025 case 89:
15026 var $rsize_1_i;
15027 var $v_1_i;
15028 var $401=(($t_0_i16+20)|0);
15029 var $402=HEAP32[(($401)>>2)];
15030 var $403=$sizebits_0_i>>>31;
15031 var $404=(($t_0_i16+16+($403<<2))|0);
15032 var $405=HEAP32[(($404)>>2)];
15033 var $406=($402|0)==0;
15034 var $407=($402|0)==($405|0);
15035 var $or_cond21_i=$406|$407;
15036 var $rst_1_i=($or_cond21_i?$rst_0_i:$402);
15037 var $408=($405|0)==0;
15038 var $409=$sizebits_0_i<<1;
15039 if($408){var $v_2_i=$v_1_i;var $rsize_2_i=$rsize_1_i;var $t_1_i=$rst_1_i;label=90;break;}else{var $v_0_i18=$v_1_i;var $rsize_0_i17=$rsize_1_i;var $t_0_i16=$405;var $sizebits_0_i=$409;var $rst_0_i=$rst_1_i;label=87;break;}
15040 case 90:
15041 var $t_1_i;
15042 var $rsize_2_i;
15043 var $v_2_i;
15044 var $410=($t_1_i|0)==0;
15045 var $411=($v_2_i|0)==0;
15046 var $or_cond_i=$410&$411;
15047 if($or_cond_i){label=91;break;}else{var $t_2_ph_i=$t_1_i;label=93;break;}
15048 case 91:
15049 var $413=2<<$idx_0_i;
15050 var $414=(((-$413))|0);
15051 var $415=$413|$414;
15052 var $416=$349&$415;
15053 var $417=($416|0)==0;
15054 if($417){var $nb_0=$348;label=160;break;}else{label=92;break;}
15055 case 92:
15056 var $419=(((-$416))|0);
15057 var $420=$416&$419;
15058 var $421=((($420)-(1))|0);
15059 var $422=$421>>>12;
15060 var $423=$422&16;
15061 var $424=$421>>>($423>>>0);
15062 var $425=$424>>>5;
15063 var $426=$425&8;
15064 var $427=$426|$423;
15065 var $428=$424>>>($426>>>0);
15066 var $429=$428>>>2;
15067 var $430=$429&4;
15068 var $431=$427|$430;
15069 var $432=$428>>>($430>>>0);
15070 var $433=$432>>>1;
15071 var $434=$433&2;
15072 var $435=$431|$434;
15073 var $436=$432>>>($434>>>0);
15074 var $437=$436>>>1;
15075 var $438=$437&1;
15076 var $439=$435|$438;
15077 var $440=$436>>>($438>>>0);
15078 var $441=((($439)+($440))|0);
15079 var $442=((344+($441<<2))|0);
15080 var $443=HEAP32[(($442)>>2)];
15081 var $t_2_ph_i=$443;label=93;break;
15082 case 93:
15083 var $t_2_ph_i;
15084 var $444=($t_2_ph_i|0)==0;
15085 if($444){var $rsize_3_lcssa_i=$rsize_2_i;var $v_3_lcssa_i=$v_2_i;label=96;break;}else{var $t_232_i=$t_2_ph_i;var $rsize_333_i=$rsize_2_i;var $v_334_i=$v_2_i;label=94;break;}
15086 case 94:
15087 var $v_334_i;
15088 var $rsize_333_i;
15089 var $t_232_i;
15090 var $445=(($t_232_i+4)|0);
15091 var $446=HEAP32[(($445)>>2)];
15092 var $447=$446&-8;
15093 var $448=((($447)-($348))|0);
15094 var $449=($448>>>0)<($rsize_333_i>>>0);
15095 var $_rsize_3_i=($449?$448:$rsize_333_i);
15096 var $t_2_v_3_i=($449?$t_232_i:$v_334_i);
15097 var $450=(($t_232_i+16)|0);
15098 var $451=HEAP32[(($450)>>2)];
15099 var $452=($451|0)==0;
15100 if($452){label=95;break;}else{var $t_232_i=$451;var $rsize_333_i=$_rsize_3_i;var $v_334_i=$t_2_v_3_i;label=94;break;}
15101 case 95:
15102 var $453=(($t_232_i+20)|0);
15103 var $454=HEAP32[(($453)>>2)];
15104 var $455=($454|0)==0;
15105 if($455){var $rsize_3_lcssa_i=$_rsize_3_i;var $v_3_lcssa_i=$t_2_v_3_i;label=96;break;}else{var $t_232_i=$454;var $rsize_333_i=$_rsize_3_i;var $v_334_i=$t_2_v_3_i;label=94;break;}
15106 case 96:
15107 var $v_3_lcssa_i;
15108 var $rsize_3_lcssa_i;
15109 var $456=($v_3_lcssa_i|0)==0;
15110 if($456){var $nb_0=$348;label=160;break;}else{label=97;break;}
15111 case 97:
15112 var $458=HEAP32[((48)>>2)];
15113 var $459=((($458)-($348))|0);
15114 var $460=($rsize_3_lcssa_i>>>0)<($459>>>0);
15115 if($460){label=98;break;}else{var $nb_0=$348;label=160;break;}
15116 case 98:
15117 var $462=$v_3_lcssa_i;
15118 var $463=HEAP32[((56)>>2)];
15119 var $464=($462>>>0)<($463>>>0);
15120 if($464){label=158;break;}else{label=99;break;}
15121 case 99:
15122 var $466=(($462+$348)|0);
15123 var $467=$466;
15124 var $468=($462>>>0)<($466>>>0);
15125 if($468){label=100;break;}else{label=158;break;}
15126 case 100:
15127 var $470=(($v_3_lcssa_i+24)|0);
15128 var $471=HEAP32[(($470)>>2)];
15129 var $472=(($v_3_lcssa_i+12)|0);
15130 var $473=HEAP32[(($472)>>2)];
15131 var $474=($473|0)==($v_3_lcssa_i|0);
15132 if($474){label=106;break;}else{label=101;break;}
15133 case 101:
15134 var $476=(($v_3_lcssa_i+8)|0);
15135 var $477=HEAP32[(($476)>>2)];
15136 var $478=$477;
15137 var $479=($478>>>0)<($463>>>0);
15138 if($479){label=105;break;}else{label=102;break;}
15139 case 102:
15140 var $481=(($477+12)|0);
15141 var $482=HEAP32[(($481)>>2)];
15142 var $483=($482|0)==($v_3_lcssa_i|0);
15143 if($483){label=103;break;}else{label=105;break;}
15144 case 103:
15145 var $485=(($473+8)|0);
15146 var $486=HEAP32[(($485)>>2)];
15147 var $487=($486|0)==($v_3_lcssa_i|0);
15148 if($487){label=104;break;}else{label=105;break;}
15149 case 104:
15150 HEAP32[(($481)>>2)]=$473;
15151 HEAP32[(($485)>>2)]=$477;
15152 var $R_1_i22=$473;label=113;break;
15153 case 105:
15154 _abort();
15155 throw "Reached an unreachable!";
15156 case 106:
15157 var $490=(($v_3_lcssa_i+20)|0);
15158 var $491=HEAP32[(($490)>>2)];
15159 var $492=($491|0)==0;
15160 if($492){label=107;break;}else{var $R_0_i20=$491;var $RP_0_i19=$490;label=108;break;}
15161 case 107:
15162 var $494=(($v_3_lcssa_i+16)|0);
15163 var $495=HEAP32[(($494)>>2)];
15164 var $496=($495|0)==0;
15165 if($496){var $R_1_i22=0;label=113;break;}else{var $R_0_i20=$495;var $RP_0_i19=$494;label=108;break;}
15166 case 108:
15167 var $RP_0_i19;
15168 var $R_0_i20;
15169 var $497=(($R_0_i20+20)|0);
15170 var $498=HEAP32[(($497)>>2)];
15171 var $499=($498|0)==0;
15172 if($499){label=109;break;}else{var $R_0_i20=$498;var $RP_0_i19=$497;label=108;break;}
15173 case 109:
15174 var $501=(($R_0_i20+16)|0);
15175 var $502=HEAP32[(($501)>>2)];
15176 var $503=($502|0)==0;
15177 if($503){label=110;break;}else{var $R_0_i20=$502;var $RP_0_i19=$501;label=108;break;}
15178 case 110:
15179 var $505=$RP_0_i19;
15180 var $506=($505>>>0)<($463>>>0);
15181 if($506){label=112;break;}else{label=111;break;}
15182 case 111:
15183 HEAP32[(($RP_0_i19)>>2)]=0;
15184 var $R_1_i22=$R_0_i20;label=113;break;
15185 case 112:
15186 _abort();
15187 throw "Reached an unreachable!";
15188 case 113:
15189 var $R_1_i22;
15190 var $510=($471|0)==0;
15191 if($510){label=133;break;}else{label=114;break;}
15192 case 114:
15193 var $512=(($v_3_lcssa_i+28)|0);
15194 var $513=HEAP32[(($512)>>2)];
15195 var $514=((344+($513<<2))|0);
15196 var $515=HEAP32[(($514)>>2)];
15197 var $516=($v_3_lcssa_i|0)==($515|0);
15198 if($516){label=115;break;}else{label=117;break;}
15199 case 115:
15200 HEAP32[(($514)>>2)]=$R_1_i22;
15201 var $cond_i23=($R_1_i22|0)==0;
15202 if($cond_i23){label=116;break;}else{label=123;break;}
15203 case 116:
15204 var $518=HEAP32[(($512)>>2)];
15205 var $519=1<<$518;
15206 var $520=$519^-1;
15207 var $521=HEAP32[((44)>>2)];
15208 var $522=$521&$520;
15209 HEAP32[((44)>>2)]=$522;
15210 label=133;break;
15211 case 117:
15212 var $524=$471;
15213 var $525=HEAP32[((56)>>2)];
15214 var $526=($524>>>0)<($525>>>0);
15215 if($526){label=121;break;}else{label=118;break;}
15216 case 118:
15217 var $528=(($471+16)|0);
15218 var $529=HEAP32[(($528)>>2)];
15219 var $530=($529|0)==($v_3_lcssa_i|0);
15220 if($530){label=119;break;}else{label=120;break;}
15221 case 119:
15222 HEAP32[(($528)>>2)]=$R_1_i22;
15223 label=122;break;
15224 case 120:
15225 var $533=(($471+20)|0);
15226 HEAP32[(($533)>>2)]=$R_1_i22;
15227 label=122;break;
15228 case 121:
15229 _abort();
15230 throw "Reached an unreachable!";
15231 case 122:
15232 var $536=($R_1_i22|0)==0;
15233 if($536){label=133;break;}else{label=123;break;}
15234 case 123:
15235 var $538=$R_1_i22;
15236 var $539=HEAP32[((56)>>2)];
15237 var $540=($538>>>0)<($539>>>0);
15238 if($540){label=132;break;}else{label=124;break;}
15239 case 124:
15240 var $542=(($R_1_i22+24)|0);
15241 HEAP32[(($542)>>2)]=$471;
15242 var $543=(($v_3_lcssa_i+16)|0);
15243 var $544=HEAP32[(($543)>>2)];
15244 var $545=($544|0)==0;
15245 if($545){label=128;break;}else{label=125;break;}
15246 case 125:
15247 var $547=$544;
15248 var $548=HEAP32[((56)>>2)];
15249 var $549=($547>>>0)<($548>>>0);
15250 if($549){label=127;break;}else{label=126;break;}
15251 case 126:
15252 var $551=(($R_1_i22+16)|0);
15253 HEAP32[(($551)>>2)]=$544;
15254 var $552=(($544+24)|0);
15255 HEAP32[(($552)>>2)]=$R_1_i22;
15256 label=128;break;
15257 case 127:
15258 _abort();
15259 throw "Reached an unreachable!";
15260 case 128:
15261 var $555=(($v_3_lcssa_i+20)|0);
15262 var $556=HEAP32[(($555)>>2)];
15263 var $557=($556|0)==0;
15264 if($557){label=133;break;}else{label=129;break;}
15265 case 129:
15266 var $559=$556;
15267 var $560=HEAP32[((56)>>2)];
15268 var $561=($559>>>0)<($560>>>0);
15269 if($561){label=131;break;}else{label=130;break;}
15270 case 130:
15271 var $563=(($R_1_i22+20)|0);
15272 HEAP32[(($563)>>2)]=$556;
15273 var $564=(($556+24)|0);
15274 HEAP32[(($564)>>2)]=$R_1_i22;
15275 label=133;break;
15276 case 131:
15277 _abort();
15278 throw "Reached an unreachable!";
15279 case 132:
15280 _abort();
15281 throw "Reached an unreachable!";
15282 case 133:
15283 var $568=($rsize_3_lcssa_i>>>0)<16;
15284 if($568){label=134;break;}else{label=135;break;}
15285 case 134:
15286 var $570=((($rsize_3_lcssa_i)+($348))|0);
15287 var $571=$570|3;
15288 var $572=(($v_3_lcssa_i+4)|0);
15289 HEAP32[(($572)>>2)]=$571;
15290 var $_sum19_i=((($570)+(4))|0);
15291 var $573=(($462+$_sum19_i)|0);
15292 var $574=$573;
15293 var $575=HEAP32[(($574)>>2)];
15294 var $576=$575|1;
15295 HEAP32[(($574)>>2)]=$576;
15296 label=159;break;
15297 case 135:
15298 var $578=$348|3;
15299 var $579=(($v_3_lcssa_i+4)|0);
15300 HEAP32[(($579)>>2)]=$578;
15301 var $580=$rsize_3_lcssa_i|1;
15302 var $_sum_i2540=$348|4;
15303 var $581=(($462+$_sum_i2540)|0);
15304 var $582=$581;
15305 HEAP32[(($582)>>2)]=$580;
15306 var $_sum1_i26=((($rsize_3_lcssa_i)+($348))|0);
15307 var $583=(($462+$_sum1_i26)|0);
15308 var $584=$583;
15309 HEAP32[(($584)>>2)]=$rsize_3_lcssa_i;
15310 var $585=$rsize_3_lcssa_i>>>3;
15311 var $586=($rsize_3_lcssa_i>>>0)<256;
15312 if($586){label=136;break;}else{label=141;break;}
15313 case 136:
15314 var $588=$585<<1;
15315 var $589=((80+($588<<2))|0);
15316 var $590=$589;
15317 var $591=HEAP32[((40)>>2)];
15318 var $592=1<<$585;
15319 var $593=$591&$592;
15320 var $594=($593|0)==0;
15321 if($594){label=137;break;}else{label=138;break;}
15322 case 137:
15323 var $596=$591|$592;
15324 HEAP32[((40)>>2)]=$596;
15325 var $_sum15_pre_i=((($588)+(2))|0);
15326 var $_pre_i27=((80+($_sum15_pre_i<<2))|0);
15327 var $F5_0_i=$590;var $_pre_phi_i28=$_pre_i27;label=140;break;
15328 case 138:
15329 var $_sum18_i=((($588)+(2))|0);
15330 var $598=((80+($_sum18_i<<2))|0);
15331 var $599=HEAP32[(($598)>>2)];
15332 var $600=$599;
15333 var $601=HEAP32[((56)>>2)];
15334 var $602=($600>>>0)<($601>>>0);
15335 if($602){label=139;break;}else{var $F5_0_i=$599;var $_pre_phi_i28=$598;label=140;break;}
15336 case 139:
15337 _abort();
15338 throw "Reached an unreachable!";
15339 case 140:
15340 var $_pre_phi_i28;
15341 var $F5_0_i;
15342 HEAP32[(($_pre_phi_i28)>>2)]=$467;
15343 var $605=(($F5_0_i+12)|0);
15344 HEAP32[(($605)>>2)]=$467;
15345 var $_sum16_i=((($348)+(8))|0);
15346 var $606=(($462+$_sum16_i)|0);
15347 var $607=$606;
15348 HEAP32[(($607)>>2)]=$F5_0_i;
15349 var $_sum17_i=((($348)+(12))|0);
15350 var $608=(($462+$_sum17_i)|0);
15351 var $609=$608;
15352 HEAP32[(($609)>>2)]=$590;
15353 label=159;break;
15354 case 141:
15355 var $611=$466;
15356 var $612=$rsize_3_lcssa_i>>>8;
15357 var $613=($612|0)==0;
15358 if($613){var $I7_0_i=0;label=144;break;}else{label=142;break;}
15359 case 142:
15360 var $615=($rsize_3_lcssa_i>>>0)>16777215;
15361 if($615){var $I7_0_i=31;label=144;break;}else{label=143;break;}
15362 case 143:
15363 var $617=((($612)+(1048320))|0);
15364 var $618=$617>>>16;
15365 var $619=$618&8;
15366 var $620=$612<<$619;
15367 var $621=((($620)+(520192))|0);
15368 var $622=$621>>>16;
15369 var $623=$622&4;
15370 var $624=$623|$619;
15371 var $625=$620<<$623;
15372 var $626=((($625)+(245760))|0);
15373 var $627=$626>>>16;
15374 var $628=$627&2;
15375 var $629=$624|$628;
15376 var $630=(((14)-($629))|0);
15377 var $631=$625<<$628;
15378 var $632=$631>>>15;
15379 var $633=((($630)+($632))|0);
15380 var $634=$633<<1;
15381 var $635=((($633)+(7))|0);
15382 var $636=$rsize_3_lcssa_i>>>($635>>>0);
15383 var $637=$636&1;
15384 var $638=$637|$634;
15385 var $I7_0_i=$638;label=144;break;
15386 case 144:
15387 var $I7_0_i;
15388 var $640=((344+($I7_0_i<<2))|0);
15389 var $_sum2_i=((($348)+(28))|0);
15390 var $641=(($462+$_sum2_i)|0);
15391 var $642=$641;
15392 HEAP32[(($642)>>2)]=$I7_0_i;
15393 var $_sum3_i29=((($348)+(16))|0);
15394 var $643=(($462+$_sum3_i29)|0);
15395 var $_sum4_i30=((($348)+(20))|0);
15396 var $644=(($462+$_sum4_i30)|0);
15397 var $645=$644;
15398 HEAP32[(($645)>>2)]=0;
15399 var $646=$643;
15400 HEAP32[(($646)>>2)]=0;
15401 var $647=HEAP32[((44)>>2)];
15402 var $648=1<<$I7_0_i;
15403 var $649=$647&$648;
15404 var $650=($649|0)==0;
15405 if($650){label=145;break;}else{label=146;break;}
15406 case 145:
15407 var $652=$647|$648;
15408 HEAP32[((44)>>2)]=$652;
15409 HEAP32[(($640)>>2)]=$611;
15410 var $653=$640;
15411 var $_sum5_i=((($348)+(24))|0);
15412 var $654=(($462+$_sum5_i)|0);
15413 var $655=$654;
15414 HEAP32[(($655)>>2)]=$653;
15415 var $_sum6_i=((($348)+(12))|0);
15416 var $656=(($462+$_sum6_i)|0);
15417 var $657=$656;
15418 HEAP32[(($657)>>2)]=$611;
15419 var $_sum7_i=((($348)+(8))|0);
15420 var $658=(($462+$_sum7_i)|0);
15421 var $659=$658;
15422 HEAP32[(($659)>>2)]=$611;
15423 label=159;break;
15424 case 146:
15425 var $661=HEAP32[(($640)>>2)];
15426 var $662=($I7_0_i|0)==31;
15427 if($662){var $667=0;label=148;break;}else{label=147;break;}
15428 case 147:
15429 var $664=$I7_0_i>>>1;
15430 var $665=(((25)-($664))|0);
15431 var $667=$665;label=148;break;
15432 case 148:
15433 var $667;
15434 var $668=(($661+4)|0);
15435 var $669=HEAP32[(($668)>>2)];
15436 var $670=$669&-8;
15437 var $671=($670|0)==($rsize_3_lcssa_i|0);
15438 if($671){var $T_0_lcssa_i=$661;label=155;break;}else{label=149;break;}
15439 case 149:
15440 var $672=$rsize_3_lcssa_i<<$667;
15441 var $T_028_i=$661;var $K12_029_i=$672;label=151;break;
15442 case 150:
15443 var $674=$K12_029_i<<1;
15444 var $675=(($682+4)|0);
15445 var $676=HEAP32[(($675)>>2)];
15446 var $677=$676&-8;
15447 var $678=($677|0)==($rsize_3_lcssa_i|0);
15448 if($678){var $T_0_lcssa_i=$682;label=155;break;}else{var $T_028_i=$682;var $K12_029_i=$674;label=151;break;}
15449 case 151:
15450 var $K12_029_i;
15451 var $T_028_i;
15452 var $680=$K12_029_i>>>31;
15453 var $681=(($T_028_i+16+($680<<2))|0);
15454 var $682=HEAP32[(($681)>>2)];
15455 var $683=($682|0)==0;
15456 if($683){label=152;break;}else{label=150;break;}
15457 case 152:
15458 var $685=$681;
15459 var $686=HEAP32[((56)>>2)];
15460 var $687=($685>>>0)<($686>>>0);
15461 if($687){label=154;break;}else{label=153;break;}
15462 case 153:
15463 HEAP32[(($681)>>2)]=$611;
15464 var $_sum12_i=((($348)+(24))|0);
15465 var $689=(($462+$_sum12_i)|0);
15466 var $690=$689;
15467 HEAP32[(($690)>>2)]=$T_028_i;
15468 var $_sum13_i=((($348)+(12))|0);
15469 var $691=(($462+$_sum13_i)|0);
15470 var $692=$691;
15471 HEAP32[(($692)>>2)]=$611;
15472 var $_sum14_i=((($348)+(8))|0);
15473 var $693=(($462+$_sum14_i)|0);
15474 var $694=$693;
15475 HEAP32[(($694)>>2)]=$611;
15476 label=159;break;
15477 case 154:
15478 _abort();
15479 throw "Reached an unreachable!";
15480 case 155:
15481 var $T_0_lcssa_i;
15482 var $696=(($T_0_lcssa_i+8)|0);
15483 var $697=HEAP32[(($696)>>2)];
15484 var $698=$T_0_lcssa_i;
15485 var $699=HEAP32[((56)>>2)];
15486 var $700=($698>>>0)>=($699>>>0);
15487 var $701=$697;
15488 var $702=($701>>>0)>=($699>>>0);
15489 var $or_cond26_i=$700&$702;
15490 if($or_cond26_i){label=156;break;}else{label=157;break;}
15491 case 156:
15492 var $704=(($697+12)|0);
15493 HEAP32[(($704)>>2)]=$611;
15494 HEAP32[(($696)>>2)]=$611;
15495 var $_sum9_i=((($348)+(8))|0);
15496 var $705=(($462+$_sum9_i)|0);
15497 var $706=$705;
15498 HEAP32[(($706)>>2)]=$697;
15499 var $_sum10_i=((($348)+(12))|0);
15500 var $707=(($462+$_sum10_i)|0);
15501 var $708=$707;
15502 HEAP32[(($708)>>2)]=$T_0_lcssa_i;
15503 var $_sum11_i=((($348)+(24))|0);
15504 var $709=(($462+$_sum11_i)|0);
15505 var $710=$709;
15506 HEAP32[(($710)>>2)]=0;
15507 label=159;break;
15508 case 157:
15509 _abort();
15510 throw "Reached an unreachable!";
15511 case 158:
15512 _abort();
15513 throw "Reached an unreachable!";
15514 case 159:
15515 var $712=(($v_3_lcssa_i+8)|0);
15516 var $713=$712;
15517 var $mem_0=$713;label=341;break;
15518 case 160:
15519 var $nb_0;
15520 var $714=HEAP32[((48)>>2)];
15521 var $715=($714>>>0)<($nb_0>>>0);
15522 if($715){label=165;break;}else{label=161;break;}
15523 case 161:
15524 var $717=((($714)-($nb_0))|0);
15525 var $718=HEAP32[((60)>>2)];
15526 var $719=($717>>>0)>15;
15527 if($719){label=162;break;}else{label=163;break;}
15528 case 162:
15529 var $721=$718;
15530 var $722=(($721+$nb_0)|0);
15531 var $723=$722;
15532 HEAP32[((60)>>2)]=$723;
15533 HEAP32[((48)>>2)]=$717;
15534 var $724=$717|1;
15535 var $_sum2=((($nb_0)+(4))|0);
15536 var $725=(($721+$_sum2)|0);
15537 var $726=$725;
15538 HEAP32[(($726)>>2)]=$724;
15539 var $727=(($721+$714)|0);
15540 var $728=$727;
15541 HEAP32[(($728)>>2)]=$717;
15542 var $729=$nb_0|3;
15543 var $730=(($718+4)|0);
15544 HEAP32[(($730)>>2)]=$729;
15545 label=164;break;
15546 case 163:
15547 HEAP32[((48)>>2)]=0;
15548 HEAP32[((60)>>2)]=0;
15549 var $732=$714|3;
15550 var $733=(($718+4)|0);
15551 HEAP32[(($733)>>2)]=$732;
15552 var $734=$718;
15553 var $_sum1=((($714)+(4))|0);
15554 var $735=(($734+$_sum1)|0);
15555 var $736=$735;
15556 var $737=HEAP32[(($736)>>2)];
15557 var $738=$737|1;
15558 HEAP32[(($736)>>2)]=$738;
15559 label=164;break;
15560 case 164:
15561 var $740=(($718+8)|0);
15562 var $741=$740;
15563 var $mem_0=$741;label=341;break;
15564 case 165:
15565 var $743=HEAP32[((52)>>2)];
15566 var $744=($743>>>0)>($nb_0>>>0);
15567 if($744){label=166;break;}else{label=167;break;}
15568 case 166:
15569 var $746=((($743)-($nb_0))|0);
15570 HEAP32[((52)>>2)]=$746;
15571 var $747=HEAP32[((64)>>2)];
15572 var $748=$747;
15573 var $749=(($748+$nb_0)|0);
15574 var $750=$749;
15575 HEAP32[((64)>>2)]=$750;
15576 var $751=$746|1;
15577 var $_sum=((($nb_0)+(4))|0);
15578 var $752=(($748+$_sum)|0);
15579 var $753=$752;
15580 HEAP32[(($753)>>2)]=$751;
15581 var $754=$nb_0|3;
15582 var $755=(($747+4)|0);
15583 HEAP32[(($755)>>2)]=$754;
15584 var $756=(($747+8)|0);
15585 var $757=$756;
15586 var $mem_0=$757;label=341;break;
15587 case 167:
15588 var $759=HEAP32[((16)>>2)];
15589 var $760=($759|0)==0;
15590 if($760){label=168;break;}else{label=171;break;}
15591 case 168:
15592 var $762=_sysconf(30);
15593 var $763=((($762)-(1))|0);
15594 var $764=$763&$762;
15595 var $765=($764|0)==0;
15596 if($765){label=170;break;}else{label=169;break;}
15597 case 169:
15598 _abort();
15599 throw "Reached an unreachable!";
15600 case 170:
15601 HEAP32[((24)>>2)]=$762;
15602 HEAP32[((20)>>2)]=$762;
15603 HEAP32[((28)>>2)]=-1;
15604 HEAP32[((32)>>2)]=-1;
15605 HEAP32[((36)>>2)]=0;
15606 HEAP32[((484)>>2)]=0;
15607 var $767=_time(0);
15608 var $768=$767&-16;
15609 var $769=$768^1431655768;
15610 HEAP32[((16)>>2)]=$769;
15611 label=171;break;
15612 case 171:
15613 var $771=((($nb_0)+(48))|0);
15614 var $772=HEAP32[((24)>>2)];
15615 var $773=((($nb_0)+(47))|0);
15616 var $774=((($772)+($773))|0);
15617 var $775=(((-$772))|0);
15618 var $776=$774&$775;
15619 var $777=($776>>>0)>($nb_0>>>0);
15620 if($777){label=172;break;}else{var $mem_0=0;label=341;break;}
15621 case 172:
15622 var $779=HEAP32[((480)>>2)];
15623 var $780=($779|0)==0;
15624 if($780){label=174;break;}else{label=173;break;}
15625 case 173:
15626 var $782=HEAP32[((472)>>2)];
15627 var $783=((($782)+($776))|0);
15628 var $784=($783>>>0)<=($782>>>0);
15629 var $785=($783>>>0)>($779>>>0);
15630 var $or_cond1_i=$784|$785;
15631 if($or_cond1_i){var $mem_0=0;label=341;break;}else{label=174;break;}
15632 case 174:
15633 var $787=HEAP32[((484)>>2)];
15634 var $788=$787&4;
15635 var $789=($788|0)==0;
15636 if($789){label=175;break;}else{var $tsize_1_i=0;label=198;break;}
15637 case 175:
15638 var $791=HEAP32[((64)>>2)];
15639 var $792=($791|0)==0;
15640 if($792){label=181;break;}else{label=176;break;}
15641 case 176:
15642 var $794=$791;
15643 var $sp_0_i_i=488;label=177;break;
15644 case 177:
15645 var $sp_0_i_i;
15646 var $796=(($sp_0_i_i)|0);
15647 var $797=HEAP32[(($796)>>2)];
15648 var $798=($797>>>0)>($794>>>0);
15649 if($798){label=179;break;}else{label=178;break;}
15650 case 178:
15651 var $800=(($sp_0_i_i+4)|0);
15652 var $801=HEAP32[(($800)>>2)];
15653 var $802=(($797+$801)|0);
15654 var $803=($802>>>0)>($794>>>0);
15655 if($803){label=180;break;}else{label=179;break;}
15656 case 179:
15657 var $805=(($sp_0_i_i+8)|0);
15658 var $806=HEAP32[(($805)>>2)];
15659 var $807=($806|0)==0;
15660 if($807){label=181;break;}else{var $sp_0_i_i=$806;label=177;break;}
15661 case 180:
15662 var $808=($sp_0_i_i|0)==0;
15663 if($808){label=181;break;}else{label=188;break;}
15664 case 181:
15665 var $809=_sbrk(0);
15666 var $810=($809|0)==-1;
15667 if($810){var $tsize_03141_i=0;label=197;break;}else{label=182;break;}
15668 case 182:
15669 var $812=$809;
15670 var $813=HEAP32[((20)>>2)];
15671 var $814=((($813)-(1))|0);
15672 var $815=$814&$812;
15673 var $816=($815|0)==0;
15674 if($816){var $ssize_0_i=$776;label=184;break;}else{label=183;break;}
15675 case 183:
15676 var $818=((($814)+($812))|0);
15677 var $819=(((-$813))|0);
15678 var $820=$818&$819;
15679 var $821=((($776)-($812))|0);
15680 var $822=((($821)+($820))|0);
15681 var $ssize_0_i=$822;label=184;break;
15682 case 184:
15683 var $ssize_0_i;
15684 var $824=HEAP32[((472)>>2)];
15685 var $825=((($824)+($ssize_0_i))|0);
15686 var $826=($ssize_0_i>>>0)>($nb_0>>>0);
15687 var $827=($ssize_0_i>>>0)<2147483647;
15688 var $or_cond_i31=$826&$827;
15689 if($or_cond_i31){label=185;break;}else{var $tsize_03141_i=0;label=197;break;}
15690 case 185:
15691 var $829=HEAP32[((480)>>2)];
15692 var $830=($829|0)==0;
15693 if($830){label=187;break;}else{label=186;break;}
15694 case 186:
15695 var $832=($825>>>0)<=($824>>>0);
15696 var $833=($825>>>0)>($829>>>0);
15697 var $or_cond2_i=$832|$833;
15698 if($or_cond2_i){var $tsize_03141_i=0;label=197;break;}else{label=187;break;}
15699 case 187:
15700 var $835=_sbrk($ssize_0_i);
15701 var $836=($835|0)==($809|0);
15702 if($836){var $br_0_i=$809;var $ssize_1_i=$ssize_0_i;label=190;break;}else{var $ssize_129_i=$ssize_0_i;var $br_030_i=$835;label=191;break;}
15703 case 188:
15704 var $838=HEAP32[((52)>>2)];
15705 var $839=((($774)-($838))|0);
15706 var $840=$839&$775;
15707 var $841=($840>>>0)<2147483647;
15708 if($841){label=189;break;}else{var $tsize_03141_i=0;label=197;break;}
15709 case 189:
15710 var $843=_sbrk($840);
15711 var $844=HEAP32[(($796)>>2)];
15712 var $845=HEAP32[(($800)>>2)];
15713 var $846=(($844+$845)|0);
15714 var $847=($843|0)==($846|0);
15715 if($847){var $br_0_i=$843;var $ssize_1_i=$840;label=190;break;}else{var $ssize_129_i=$840;var $br_030_i=$843;label=191;break;}
15716 case 190:
15717 var $ssize_1_i;
15718 var $br_0_i;
15719 var $849=($br_0_i|0)==-1;
15720 if($849){var $tsize_03141_i=$ssize_1_i;label=197;break;}else{var $tsize_244_i=$ssize_1_i;var $tbase_245_i=$br_0_i;label=201;break;}
15721 case 191:
15722 var $br_030_i;
15723 var $ssize_129_i;
15724 var $850=(((-$ssize_129_i))|0);
15725 var $851=($br_030_i|0)!=-1;
15726 var $852=($ssize_129_i>>>0)<2147483647;
15727 var $or_cond5_i=$851&$852;
15728 var $853=($771>>>0)>($ssize_129_i>>>0);
15729 var $or_cond4_i=$or_cond5_i&$853;
15730 if($or_cond4_i){label=192;break;}else{var $ssize_2_i=$ssize_129_i;label=196;break;}
15731 case 192:
15732 var $855=HEAP32[((24)>>2)];
15733 var $856=((($773)-($ssize_129_i))|0);
15734 var $857=((($856)+($855))|0);
15735 var $858=(((-$855))|0);
15736 var $859=$857&$858;
15737 var $860=($859>>>0)<2147483647;
15738 if($860){label=193;break;}else{var $ssize_2_i=$ssize_129_i;label=196;break;}
15739 case 193:
15740 var $862=_sbrk($859);
15741 var $863=($862|0)==-1;
15742 if($863){label=195;break;}else{label=194;break;}
15743 case 194:
15744 var $865=((($859)+($ssize_129_i))|0);
15745 var $ssize_2_i=$865;label=196;break;
15746 case 195:
15747 var $866=_sbrk($850);
15748 var $tsize_03141_i=0;label=197;break;
15749 case 196:
15750 var $ssize_2_i;
15751 var $868=($br_030_i|0)==-1;
15752 if($868){var $tsize_03141_i=0;label=197;break;}else{var $tsize_244_i=$ssize_2_i;var $tbase_245_i=$br_030_i;label=201;break;}
15753 case 197:
15754 var $tsize_03141_i;
15755 var $869=HEAP32[((484)>>2)];
15756 var $870=$869|4;
15757 HEAP32[((484)>>2)]=$870;
15758 var $tsize_1_i=$tsize_03141_i;label=198;break;
15759 case 198:
15760 var $tsize_1_i;
15761 var $872=($776>>>0)<2147483647;
15762 if($872){label=199;break;}else{label=340;break;}
15763 case 199:
15764 var $874=_sbrk($776);
15765 var $875=_sbrk(0);
15766 var $876=($874|0)!=-1;
15767 var $877=($875|0)!=-1;
15768 var $or_cond3_i=$876&$877;
15769 var $878=($874>>>0)<($875>>>0);
15770 var $or_cond6_i=$or_cond3_i&$878;
15771 if($or_cond6_i){label=200;break;}else{label=340;break;}
15772 case 200:
15773 var $880=$875;
15774 var $881=$874;
15775 var $882=((($880)-($881))|0);
15776 var $883=((($nb_0)+(40))|0);
15777 var $884=($882>>>0)>($883>>>0);
15778 var $_tsize_1_i=($884?$882:$tsize_1_i);
15779 if($884){var $tsize_244_i=$_tsize_1_i;var $tbase_245_i=$874;label=201;break;}else{label=340;break;}
15780 case 201:
15781 var $tbase_245_i;
15782 var $tsize_244_i;
15783 var $885=HEAP32[((472)>>2)];
15784 var $886=((($885)+($tsize_244_i))|0);
15785 HEAP32[((472)>>2)]=$886;
15786 var $887=HEAP32[((476)>>2)];
15787 var $888=($886>>>0)>($887>>>0);
15788 if($888){label=202;break;}else{label=203;break;}
15789 case 202:
15790 HEAP32[((476)>>2)]=$886;
15791 label=203;break;
15792 case 203:
15793 var $891=HEAP32[((64)>>2)];
15794 var $892=($891|0)==0;
15795 if($892){label=204;break;}else{var $sp_073_i=488;label=211;break;}
15796 case 204:
15797 var $894=HEAP32[((56)>>2)];
15798 var $895=($894|0)==0;
15799 var $896=($tbase_245_i>>>0)<($894>>>0);
15800 var $or_cond8_i=$895|$896;
15801 if($or_cond8_i){label=205;break;}else{label=206;break;}
15802 case 205:
15803 HEAP32[((56)>>2)]=$tbase_245_i;
15804 label=206;break;
15805 case 206:
15806 HEAP32[((488)>>2)]=$tbase_245_i;
15807 HEAP32[((492)>>2)]=$tsize_244_i;
15808 HEAP32[((500)>>2)]=0;
15809 var $899=HEAP32[((16)>>2)];
15810 HEAP32[((76)>>2)]=$899;
15811 HEAP32[((72)>>2)]=-1;
15812 var $i_02_i_i=0;label=207;break;
15813 case 207:
15814 var $i_02_i_i;
15815 var $901=$i_02_i_i<<1;
15816 var $902=((80+($901<<2))|0);
15817 var $903=$902;
15818 var $_sum_i_i=((($901)+(3))|0);
15819 var $904=((80+($_sum_i_i<<2))|0);
15820 HEAP32[(($904)>>2)]=$903;
15821 var $_sum1_i_i=((($901)+(2))|0);
15822 var $905=((80+($_sum1_i_i<<2))|0);
15823 HEAP32[(($905)>>2)]=$903;
15824 var $906=((($i_02_i_i)+(1))|0);
15825 var $907=($906>>>0)<32;
15826 if($907){var $i_02_i_i=$906;label=207;break;}else{label=208;break;}
15827 case 208:
15828 var $908=((($tsize_244_i)-(40))|0);
15829 var $909=(($tbase_245_i+8)|0);
15830 var $910=$909;
15831 var $911=$910&7;
15832 var $912=($911|0)==0;
15833 if($912){var $916=0;label=210;break;}else{label=209;break;}
15834 case 209:
15835 var $914=(((-$910))|0);
15836 var $915=$914&7;
15837 var $916=$915;label=210;break;
15838 case 210:
15839 var $916;
15840 var $917=(($tbase_245_i+$916)|0);
15841 var $918=$917;
15842 var $919=((($908)-($916))|0);
15843 HEAP32[((64)>>2)]=$918;
15844 HEAP32[((52)>>2)]=$919;
15845 var $920=$919|1;
15846 var $_sum_i12_i=((($916)+(4))|0);
15847 var $921=(($tbase_245_i+$_sum_i12_i)|0);
15848 var $922=$921;
15849 HEAP32[(($922)>>2)]=$920;
15850 var $_sum2_i_i=((($tsize_244_i)-(36))|0);
15851 var $923=(($tbase_245_i+$_sum2_i_i)|0);
15852 var $924=$923;
15853 HEAP32[(($924)>>2)]=40;
15854 var $925=HEAP32[((32)>>2)];
15855 HEAP32[((68)>>2)]=$925;
15856 label=338;break;
15857 case 211:
15858 var $sp_073_i;
15859 var $926=(($sp_073_i)|0);
15860 var $927=HEAP32[(($926)>>2)];
15861 var $928=(($sp_073_i+4)|0);
15862 var $929=HEAP32[(($928)>>2)];
15863 var $930=(($927+$929)|0);
15864 var $931=($tbase_245_i|0)==($930|0);
15865 if($931){label=213;break;}else{label=212;break;}
15866 case 212:
15867 var $933=(($sp_073_i+8)|0);
15868 var $934=HEAP32[(($933)>>2)];
15869 var $935=($934|0)==0;
15870 if($935){label=218;break;}else{var $sp_073_i=$934;label=211;break;}
15871 case 213:
15872 var $936=(($sp_073_i+12)|0);
15873 var $937=HEAP32[(($936)>>2)];
15874 var $938=$937&8;
15875 var $939=($938|0)==0;
15876 if($939){label=214;break;}else{label=218;break;}
15877 case 214:
15878 var $941=$891;
15879 var $942=($941>>>0)>=($927>>>0);
15880 var $943=($941>>>0)<($tbase_245_i>>>0);
15881 var $or_cond47_i=$942&$943;
15882 if($or_cond47_i){label=215;break;}else{label=218;break;}
15883 case 215:
15884 var $945=((($929)+($tsize_244_i))|0);
15885 HEAP32[(($928)>>2)]=$945;
15886 var $946=HEAP32[((64)>>2)];
15887 var $947=HEAP32[((52)>>2)];
15888 var $948=((($947)+($tsize_244_i))|0);
15889 var $949=$946;
15890 var $950=(($946+8)|0);
15891 var $951=$950;
15892 var $952=$951&7;
15893 var $953=($952|0)==0;
15894 if($953){var $957=0;label=217;break;}else{label=216;break;}
15895 case 216:
15896 var $955=(((-$951))|0);
15897 var $956=$955&7;
15898 var $957=$956;label=217;break;
15899 case 217:
15900 var $957;
15901 var $958=(($949+$957)|0);
15902 var $959=$958;
15903 var $960=((($948)-($957))|0);
15904 HEAP32[((64)>>2)]=$959;
15905 HEAP32[((52)>>2)]=$960;
15906 var $961=$960|1;
15907 var $_sum_i16_i=((($957)+(4))|0);
15908 var $962=(($949+$_sum_i16_i)|0);
15909 var $963=$962;
15910 HEAP32[(($963)>>2)]=$961;
15911 var $_sum2_i17_i=((($948)+(4))|0);
15912 var $964=(($949+$_sum2_i17_i)|0);
15913 var $965=$964;
15914 HEAP32[(($965)>>2)]=40;
15915 var $966=HEAP32[((32)>>2)];
15916 HEAP32[((68)>>2)]=$966;
15917 label=338;break;
15918 case 218:
15919 var $967=HEAP32[((56)>>2)];
15920 var $968=($tbase_245_i>>>0)<($967>>>0);
15921 if($968){label=219;break;}else{label=220;break;}
15922 case 219:
15923 HEAP32[((56)>>2)]=$tbase_245_i;
15924 label=220;break;
15925 case 220:
15926 var $970=(($tbase_245_i+$tsize_244_i)|0);
15927 var $sp_166_i=488;label=221;break;
15928 case 221:
15929 var $sp_166_i;
15930 var $972=(($sp_166_i)|0);
15931 var $973=HEAP32[(($972)>>2)];
15932 var $974=($973|0)==($970|0);
15933 if($974){label=223;break;}else{label=222;break;}
15934 case 222:
15935 var $976=(($sp_166_i+8)|0);
15936 var $977=HEAP32[(($976)>>2)];
15937 var $978=($977|0)==0;
15938 if($978){label=304;break;}else{var $sp_166_i=$977;label=221;break;}
15939 case 223:
15940 var $979=(($sp_166_i+12)|0);
15941 var $980=HEAP32[(($979)>>2)];
15942 var $981=$980&8;
15943 var $982=($981|0)==0;
15944 if($982){label=224;break;}else{label=304;break;}
15945 case 224:
15946 HEAP32[(($972)>>2)]=$tbase_245_i;
15947 var $984=(($sp_166_i+4)|0);
15948 var $985=HEAP32[(($984)>>2)];
15949 var $986=((($985)+($tsize_244_i))|0);
15950 HEAP32[(($984)>>2)]=$986;
15951 var $987=(($tbase_245_i+8)|0);
15952 var $988=$987;
15953 var $989=$988&7;
15954 var $990=($989|0)==0;
15955 if($990){var $995=0;label=226;break;}else{label=225;break;}
15956 case 225:
15957 var $992=(((-$988))|0);
15958 var $993=$992&7;
15959 var $995=$993;label=226;break;
15960 case 226:
15961 var $995;
15962 var $996=(($tbase_245_i+$995)|0);
15963 var $_sum102_i=((($tsize_244_i)+(8))|0);
15964 var $997=(($tbase_245_i+$_sum102_i)|0);
15965 var $998=$997;
15966 var $999=$998&7;
15967 var $1000=($999|0)==0;
15968 if($1000){var $1005=0;label=228;break;}else{label=227;break;}
15969 case 227:
15970 var $1002=(((-$998))|0);
15971 var $1003=$1002&7;
15972 var $1005=$1003;label=228;break;
15973 case 228:
15974 var $1005;
15975 var $_sum103_i=((($1005)+($tsize_244_i))|0);
15976 var $1006=(($tbase_245_i+$_sum103_i)|0);
15977 var $1007=$1006;
15978 var $1008=$1006;
15979 var $1009=$996;
15980 var $1010=((($1008)-($1009))|0);
15981 var $_sum_i19_i=((($995)+($nb_0))|0);
15982 var $1011=(($tbase_245_i+$_sum_i19_i)|0);
15983 var $1012=$1011;
15984 var $1013=((($1010)-($nb_0))|0);
15985 var $1014=$nb_0|3;
15986 var $_sum1_i20_i=((($995)+(4))|0);
15987 var $1015=(($tbase_245_i+$_sum1_i20_i)|0);
15988 var $1016=$1015;
15989 HEAP32[(($1016)>>2)]=$1014;
15990 var $1017=HEAP32[((64)>>2)];
15991 var $1018=($1007|0)==($1017|0);
15992 if($1018){label=229;break;}else{label=230;break;}
15993 case 229:
15994 var $1020=HEAP32[((52)>>2)];
15995 var $1021=((($1020)+($1013))|0);
15996 HEAP32[((52)>>2)]=$1021;
15997 HEAP32[((64)>>2)]=$1012;
15998 var $1022=$1021|1;
15999 var $_sum46_i_i=((($_sum_i19_i)+(4))|0);
16000 var $1023=(($tbase_245_i+$_sum46_i_i)|0);
16001 var $1024=$1023;
16002 HEAP32[(($1024)>>2)]=$1022;
16003 label=303;break;
16004 case 230:
16005 var $1026=HEAP32[((60)>>2)];
16006 var $1027=($1007|0)==($1026|0);
16007 if($1027){label=231;break;}else{label=232;break;}
16008 case 231:
16009 var $1029=HEAP32[((48)>>2)];
16010 var $1030=((($1029)+($1013))|0);
16011 HEAP32[((48)>>2)]=$1030;
16012 HEAP32[((60)>>2)]=$1012;
16013 var $1031=$1030|1;
16014 var $_sum44_i_i=((($_sum_i19_i)+(4))|0);
16015 var $1032=(($tbase_245_i+$_sum44_i_i)|0);
16016 var $1033=$1032;
16017 HEAP32[(($1033)>>2)]=$1031;
16018 var $_sum45_i_i=((($1030)+($_sum_i19_i))|0);
16019 var $1034=(($tbase_245_i+$_sum45_i_i)|0);
16020 var $1035=$1034;
16021 HEAP32[(($1035)>>2)]=$1030;
16022 label=303;break;
16023 case 232:
16024 var $_sum2_i21_i=((($tsize_244_i)+(4))|0);
16025 var $_sum104_i=((($_sum2_i21_i)+($1005))|0);
16026 var $1037=(($tbase_245_i+$_sum104_i)|0);
16027 var $1038=$1037;
16028 var $1039=HEAP32[(($1038)>>2)];
16029 var $1040=$1039&3;
16030 var $1041=($1040|0)==1;
16031 if($1041){label=233;break;}else{var $oldfirst_0_i_i=$1007;var $qsize_0_i_i=$1013;label=280;break;}
16032 case 233:
16033 var $1043=$1039&-8;
16034 var $1044=$1039>>>3;
16035 var $1045=($1039>>>0)<256;
16036 if($1045){label=234;break;}else{label=246;break;}
16037 case 234:
16038 var $_sum3940_i_i=$1005|8;
16039 var $_sum114_i=((($_sum3940_i_i)+($tsize_244_i))|0);
16040 var $1047=(($tbase_245_i+$_sum114_i)|0);
16041 var $1048=$1047;
16042 var $1049=HEAP32[(($1048)>>2)];
16043 var $_sum41_i_i=((($tsize_244_i)+(12))|0);
16044 var $_sum115_i=((($_sum41_i_i)+($1005))|0);
16045 var $1050=(($tbase_245_i+$_sum115_i)|0);
16046 var $1051=$1050;
16047 var $1052=HEAP32[(($1051)>>2)];
16048 var $1053=$1044<<1;
16049 var $1054=((80+($1053<<2))|0);
16050 var $1055=$1054;
16051 var $1056=($1049|0)==($1055|0);
16052 if($1056){label=237;break;}else{label=235;break;}
16053 case 235:
16054 var $1058=$1049;
16055 var $1059=HEAP32[((56)>>2)];
16056 var $1060=($1058>>>0)<($1059>>>0);
16057 if($1060){label=245;break;}else{label=236;break;}
16058 case 236:
16059 var $1062=(($1049+12)|0);
16060 var $1063=HEAP32[(($1062)>>2)];
16061 var $1064=($1063|0)==($1007|0);
16062 if($1064){label=237;break;}else{label=245;break;}
16063 case 237:
16064 var $1065=($1052|0)==($1049|0);
16065 if($1065){label=238;break;}else{label=239;break;}
16066 case 238:
16067 var $1067=1<<$1044;
16068 var $1068=$1067^-1;
16069 var $1069=HEAP32[((40)>>2)];
16070 var $1070=$1069&$1068;
16071 HEAP32[((40)>>2)]=$1070;
16072 label=279;break;
16073 case 239:
16074 var $1072=($1052|0)==($1055|0);
16075 if($1072){label=240;break;}else{label=241;break;}
16076 case 240:
16077 var $_pre62_i_i=(($1052+8)|0);
16078 var $_pre_phi63_i_i=$_pre62_i_i;label=243;break;
16079 case 241:
16080 var $1074=$1052;
16081 var $1075=HEAP32[((56)>>2)];
16082 var $1076=($1074>>>0)<($1075>>>0);
16083 if($1076){label=244;break;}else{label=242;break;}
16084 case 242:
16085 var $1078=(($1052+8)|0);
16086 var $1079=HEAP32[(($1078)>>2)];
16087 var $1080=($1079|0)==($1007|0);
16088 if($1080){var $_pre_phi63_i_i=$1078;label=243;break;}else{label=244;break;}
16089 case 243:
16090 var $_pre_phi63_i_i;
16091 var $1081=(($1049+12)|0);
16092 HEAP32[(($1081)>>2)]=$1052;
16093 HEAP32[(($_pre_phi63_i_i)>>2)]=$1049;
16094 label=279;break;
16095 case 244:
16096 _abort();
16097 throw "Reached an unreachable!";
16098 case 245:
16099 _abort();
16100 throw "Reached an unreachable!";
16101 case 246:
16102 var $1083=$1006;
16103 var $_sum34_i_i=$1005|24;
16104 var $_sum105_i=((($_sum34_i_i)+($tsize_244_i))|0);
16105 var $1084=(($tbase_245_i+$_sum105_i)|0);
16106 var $1085=$1084;
16107 var $1086=HEAP32[(($1085)>>2)];
16108 var $_sum5_i_i=((($tsize_244_i)+(12))|0);
16109 var $_sum106_i=((($_sum5_i_i)+($1005))|0);
16110 var $1087=(($tbase_245_i+$_sum106_i)|0);
16111 var $1088=$1087;
16112 var $1089=HEAP32[(($1088)>>2)];
16113 var $1090=($1089|0)==($1083|0);
16114 if($1090){label=252;break;}else{label=247;break;}
16115 case 247:
16116 var $_sum3637_i_i=$1005|8;
16117 var $_sum107_i=((($_sum3637_i_i)+($tsize_244_i))|0);
16118 var $1092=(($tbase_245_i+$_sum107_i)|0);
16119 var $1093=$1092;
16120 var $1094=HEAP32[(($1093)>>2)];
16121 var $1095=$1094;
16122 var $1096=HEAP32[((56)>>2)];
16123 var $1097=($1095>>>0)<($1096>>>0);
16124 if($1097){label=251;break;}else{label=248;break;}
16125 case 248:
16126 var $1099=(($1094+12)|0);
16127 var $1100=HEAP32[(($1099)>>2)];
16128 var $1101=($1100|0)==($1083|0);
16129 if($1101){label=249;break;}else{label=251;break;}
16130 case 249:
16131 var $1103=(($1089+8)|0);
16132 var $1104=HEAP32[(($1103)>>2)];
16133 var $1105=($1104|0)==($1083|0);
16134 if($1105){label=250;break;}else{label=251;break;}
16135 case 250:
16136 HEAP32[(($1099)>>2)]=$1089;
16137 HEAP32[(($1103)>>2)]=$1094;
16138 var $R_1_i_i=$1089;label=259;break;
16139 case 251:
16140 _abort();
16141 throw "Reached an unreachable!";
16142 case 252:
16143 var $_sum67_i_i=$1005|16;
16144 var $_sum112_i=((($_sum2_i21_i)+($_sum67_i_i))|0);
16145 var $1108=(($tbase_245_i+$_sum112_i)|0);
16146 var $1109=$1108;
16147 var $1110=HEAP32[(($1109)>>2)];
16148 var $1111=($1110|0)==0;
16149 if($1111){label=253;break;}else{var $R_0_i_i=$1110;var $RP_0_i_i=$1109;label=254;break;}
16150 case 253:
16151 var $_sum113_i=((($_sum67_i_i)+($tsize_244_i))|0);
16152 var $1113=(($tbase_245_i+$_sum113_i)|0);
16153 var $1114=$1113;
16154 var $1115=HEAP32[(($1114)>>2)];
16155 var $1116=($1115|0)==0;
16156 if($1116){var $R_1_i_i=0;label=259;break;}else{var $R_0_i_i=$1115;var $RP_0_i_i=$1114;label=254;break;}
16157 case 254:
16158 var $RP_0_i_i;
16159 var $R_0_i_i;
16160 var $1117=(($R_0_i_i+20)|0);
16161 var $1118=HEAP32[(($1117)>>2)];
16162 var $1119=($1118|0)==0;
16163 if($1119){label=255;break;}else{var $R_0_i_i=$1118;var $RP_0_i_i=$1117;label=254;break;}
16164 case 255:
16165 var $1121=(($R_0_i_i+16)|0);
16166 var $1122=HEAP32[(($1121)>>2)];
16167 var $1123=($1122|0)==0;
16168 if($1123){label=256;break;}else{var $R_0_i_i=$1122;var $RP_0_i_i=$1121;label=254;break;}
16169 case 256:
16170 var $1125=$RP_0_i_i;
16171 var $1126=HEAP32[((56)>>2)];
16172 var $1127=($1125>>>0)<($1126>>>0);
16173 if($1127){label=258;break;}else{label=257;break;}
16174 case 257:
16175 HEAP32[(($RP_0_i_i)>>2)]=0;
16176 var $R_1_i_i=$R_0_i_i;label=259;break;
16177 case 258:
16178 _abort();
16179 throw "Reached an unreachable!";
16180 case 259:
16181 var $R_1_i_i;
16182 var $1131=($1086|0)==0;
16183 if($1131){label=279;break;}else{label=260;break;}
16184 case 260:
16185 var $_sum31_i_i=((($tsize_244_i)+(28))|0);
16186 var $_sum108_i=((($_sum31_i_i)+($1005))|0);
16187 var $1133=(($tbase_245_i+$_sum108_i)|0);
16188 var $1134=$1133;
16189 var $1135=HEAP32[(($1134)>>2)];
16190 var $1136=((344+($1135<<2))|0);
16191 var $1137=HEAP32[(($1136)>>2)];
16192 var $1138=($1083|0)==($1137|0);
16193 if($1138){label=261;break;}else{label=263;break;}
16194 case 261:
16195 HEAP32[(($1136)>>2)]=$R_1_i_i;
16196 var $cond_i_i=($R_1_i_i|0)==0;
16197 if($cond_i_i){label=262;break;}else{label=269;break;}
16198 case 262:
16199 var $1140=HEAP32[(($1134)>>2)];
16200 var $1141=1<<$1140;
16201 var $1142=$1141^-1;
16202 var $1143=HEAP32[((44)>>2)];
16203 var $1144=$1143&$1142;
16204 HEAP32[((44)>>2)]=$1144;
16205 label=279;break;
16206 case 263:
16207 var $1146=$1086;
16208 var $1147=HEAP32[((56)>>2)];
16209 var $1148=($1146>>>0)<($1147>>>0);
16210 if($1148){label=267;break;}else{label=264;break;}
16211 case 264:
16212 var $1150=(($1086+16)|0);
16213 var $1151=HEAP32[(($1150)>>2)];
16214 var $1152=($1151|0)==($1083|0);
16215 if($1152){label=265;break;}else{label=266;break;}
16216 case 265:
16217 HEAP32[(($1150)>>2)]=$R_1_i_i;
16218 label=268;break;
16219 case 266:
16220 var $1155=(($1086+20)|0);
16221 HEAP32[(($1155)>>2)]=$R_1_i_i;
16222 label=268;break;
16223 case 267:
16224 _abort();
16225 throw "Reached an unreachable!";
16226 case 268:
16227 var $1158=($R_1_i_i|0)==0;
16228 if($1158){label=279;break;}else{label=269;break;}
16229 case 269:
16230 var $1160=$R_1_i_i;
16231 var $1161=HEAP32[((56)>>2)];
16232 var $1162=($1160>>>0)<($1161>>>0);
16233 if($1162){label=278;break;}else{label=270;break;}
16234 case 270:
16235 var $1164=(($R_1_i_i+24)|0);
16236 HEAP32[(($1164)>>2)]=$1086;
16237 var $_sum3233_i_i=$1005|16;
16238 var $_sum109_i=((($_sum3233_i_i)+($tsize_244_i))|0);
16239 var $1165=(($tbase_245_i+$_sum109_i)|0);
16240 var $1166=$1165;
16241 var $1167=HEAP32[(($1166)>>2)];
16242 var $1168=($1167|0)==0;
16243 if($1168){label=274;break;}else{label=271;break;}
16244 case 271:
16245 var $1170=$1167;
16246 var $1171=HEAP32[((56)>>2)];
16247 var $1172=($1170>>>0)<($1171>>>0);
16248 if($1172){label=273;break;}else{label=272;break;}
16249 case 272:
16250 var $1174=(($R_1_i_i+16)|0);
16251 HEAP32[(($1174)>>2)]=$1167;
16252 var $1175=(($1167+24)|0);
16253 HEAP32[(($1175)>>2)]=$R_1_i_i;
16254 label=274;break;
16255 case 273:
16256 _abort();
16257 throw "Reached an unreachable!";
16258 case 274:
16259 var $_sum110_i=((($_sum2_i21_i)+($_sum3233_i_i))|0);
16260 var $1178=(($tbase_245_i+$_sum110_i)|0);
16261 var $1179=$1178;
16262 var $1180=HEAP32[(($1179)>>2)];
16263 var $1181=($1180|0)==0;
16264 if($1181){label=279;break;}else{label=275;break;}
16265 case 275:
16266 var $1183=$1180;
16267 var $1184=HEAP32[((56)>>2)];
16268 var $1185=($1183>>>0)<($1184>>>0);
16269 if($1185){label=277;break;}else{label=276;break;}
16270 case 276:
16271 var $1187=(($R_1_i_i+20)|0);
16272 HEAP32[(($1187)>>2)]=$1180;
16273 var $1188=(($1180+24)|0);
16274 HEAP32[(($1188)>>2)]=$R_1_i_i;
16275 label=279;break;
16276 case 277:
16277 _abort();
16278 throw "Reached an unreachable!";
16279 case 278:
16280 _abort();
16281 throw "Reached an unreachable!";
16282 case 279:
16283 var $_sum9_i_i=$1043|$1005;
16284 var $_sum111_i=((($_sum9_i_i)+($tsize_244_i))|0);
16285 var $1192=(($tbase_245_i+$_sum111_i)|0);
16286 var $1193=$1192;
16287 var $1194=((($1043)+($1013))|0);
16288 var $oldfirst_0_i_i=$1193;var $qsize_0_i_i=$1194;label=280;break;
16289 case 280:
16290 var $qsize_0_i_i;
16291 var $oldfirst_0_i_i;
16292 var $1196=(($oldfirst_0_i_i+4)|0);
16293 var $1197=HEAP32[(($1196)>>2)];
16294 var $1198=$1197&-2;
16295 HEAP32[(($1196)>>2)]=$1198;
16296 var $1199=$qsize_0_i_i|1;
16297 var $_sum10_i_i=((($_sum_i19_i)+(4))|0);
16298 var $1200=(($tbase_245_i+$_sum10_i_i)|0);
16299 var $1201=$1200;
16300 HEAP32[(($1201)>>2)]=$1199;
16301 var $_sum11_i_i=((($qsize_0_i_i)+($_sum_i19_i))|0);
16302 var $1202=(($tbase_245_i+$_sum11_i_i)|0);
16303 var $1203=$1202;
16304 HEAP32[(($1203)>>2)]=$qsize_0_i_i;
16305 var $1204=$qsize_0_i_i>>>3;
16306 var $1205=($qsize_0_i_i>>>0)<256;
16307 if($1205){label=281;break;}else{label=286;break;}
16308 case 281:
16309 var $1207=$1204<<1;
16310 var $1208=((80+($1207<<2))|0);
16311 var $1209=$1208;
16312 var $1210=HEAP32[((40)>>2)];
16313 var $1211=1<<$1204;
16314 var $1212=$1210&$1211;
16315 var $1213=($1212|0)==0;
16316 if($1213){label=282;break;}else{label=283;break;}
16317 case 282:
16318 var $1215=$1210|$1211;
16319 HEAP32[((40)>>2)]=$1215;
16320 var $_sum27_pre_i_i=((($1207)+(2))|0);
16321 var $_pre_i22_i=((80+($_sum27_pre_i_i<<2))|0);
16322 var $F4_0_i_i=$1209;var $_pre_phi_i23_i=$_pre_i22_i;label=285;break;
16323 case 283:
16324 var $_sum30_i_i=((($1207)+(2))|0);
16325 var $1217=((80+($_sum30_i_i<<2))|0);
16326 var $1218=HEAP32[(($1217)>>2)];
16327 var $1219=$1218;
16328 var $1220=HEAP32[((56)>>2)];
16329 var $1221=($1219>>>0)<($1220>>>0);
16330 if($1221){label=284;break;}else{var $F4_0_i_i=$1218;var $_pre_phi_i23_i=$1217;label=285;break;}
16331 case 284:
16332 _abort();
16333 throw "Reached an unreachable!";
16334 case 285:
16335 var $_pre_phi_i23_i;
16336 var $F4_0_i_i;
16337 HEAP32[(($_pre_phi_i23_i)>>2)]=$1012;
16338 var $1224=(($F4_0_i_i+12)|0);
16339 HEAP32[(($1224)>>2)]=$1012;
16340 var $_sum28_i_i=((($_sum_i19_i)+(8))|0);
16341 var $1225=(($tbase_245_i+$_sum28_i_i)|0);
16342 var $1226=$1225;
16343 HEAP32[(($1226)>>2)]=$F4_0_i_i;
16344 var $_sum29_i_i=((($_sum_i19_i)+(12))|0);
16345 var $1227=(($tbase_245_i+$_sum29_i_i)|0);
16346 var $1228=$1227;
16347 HEAP32[(($1228)>>2)]=$1209;
16348 label=303;break;
16349 case 286:
16350 var $1230=$1011;
16351 var $1231=$qsize_0_i_i>>>8;
16352 var $1232=($1231|0)==0;
16353 if($1232){var $I7_0_i_i=0;label=289;break;}else{label=287;break;}
16354 case 287:
16355 var $1234=($qsize_0_i_i>>>0)>16777215;
16356 if($1234){var $I7_0_i_i=31;label=289;break;}else{label=288;break;}
16357 case 288:
16358 var $1236=((($1231)+(1048320))|0);
16359 var $1237=$1236>>>16;
16360 var $1238=$1237&8;
16361 var $1239=$1231<<$1238;
16362 var $1240=((($1239)+(520192))|0);
16363 var $1241=$1240>>>16;
16364 var $1242=$1241&4;
16365 var $1243=$1242|$1238;
16366 var $1244=$1239<<$1242;
16367 var $1245=((($1244)+(245760))|0);
16368 var $1246=$1245>>>16;
16369 var $1247=$1246&2;
16370 var $1248=$1243|$1247;
16371 var $1249=(((14)-($1248))|0);
16372 var $1250=$1244<<$1247;
16373 var $1251=$1250>>>15;
16374 var $1252=((($1249)+($1251))|0);
16375 var $1253=$1252<<1;
16376 var $1254=((($1252)+(7))|0);
16377 var $1255=$qsize_0_i_i>>>($1254>>>0);
16378 var $1256=$1255&1;
16379 var $1257=$1256|$1253;
16380 var $I7_0_i_i=$1257;label=289;break;
16381 case 289:
16382 var $I7_0_i_i;
16383 var $1259=((344+($I7_0_i_i<<2))|0);
16384 var $_sum12_i24_i=((($_sum_i19_i)+(28))|0);
16385 var $1260=(($tbase_245_i+$_sum12_i24_i)|0);
16386 var $1261=$1260;
16387 HEAP32[(($1261)>>2)]=$I7_0_i_i;
16388 var $_sum13_i_i=((($_sum_i19_i)+(16))|0);
16389 var $1262=(($tbase_245_i+$_sum13_i_i)|0);
16390 var $_sum14_i_i=((($_sum_i19_i)+(20))|0);
16391 var $1263=(($tbase_245_i+$_sum14_i_i)|0);
16392 var $1264=$1263;
16393 HEAP32[(($1264)>>2)]=0;
16394 var $1265=$1262;
16395 HEAP32[(($1265)>>2)]=0;
16396 var $1266=HEAP32[((44)>>2)];
16397 var $1267=1<<$I7_0_i_i;
16398 var $1268=$1266&$1267;
16399 var $1269=($1268|0)==0;
16400 if($1269){label=290;break;}else{label=291;break;}
16401 case 290:
16402 var $1271=$1266|$1267;
16403 HEAP32[((44)>>2)]=$1271;
16404 HEAP32[(($1259)>>2)]=$1230;
16405 var $1272=$1259;
16406 var $_sum15_i_i=((($_sum_i19_i)+(24))|0);
16407 var $1273=(($tbase_245_i+$_sum15_i_i)|0);
16408 var $1274=$1273;
16409 HEAP32[(($1274)>>2)]=$1272;
16410 var $_sum16_i_i=((($_sum_i19_i)+(12))|0);
16411 var $1275=(($tbase_245_i+$_sum16_i_i)|0);
16412 var $1276=$1275;
16413 HEAP32[(($1276)>>2)]=$1230;
16414 var $_sum17_i_i=((($_sum_i19_i)+(8))|0);
16415 var $1277=(($tbase_245_i+$_sum17_i_i)|0);
16416 var $1278=$1277;
16417 HEAP32[(($1278)>>2)]=$1230;
16418 label=303;break;
16419 case 291:
16420 var $1280=HEAP32[(($1259)>>2)];
16421 var $1281=($I7_0_i_i|0)==31;
16422 if($1281){var $1286=0;label=293;break;}else{label=292;break;}
16423 case 292:
16424 var $1283=$I7_0_i_i>>>1;
16425 var $1284=(((25)-($1283))|0);
16426 var $1286=$1284;label=293;break;
16427 case 293:
16428 var $1286;
16429 var $1287=(($1280+4)|0);
16430 var $1288=HEAP32[(($1287)>>2)];
16431 var $1289=$1288&-8;
16432 var $1290=($1289|0)==($qsize_0_i_i|0);
16433 if($1290){var $T_0_lcssa_i26_i=$1280;label=300;break;}else{label=294;break;}
16434 case 294:
16435 var $1291=$qsize_0_i_i<<$1286;
16436 var $T_056_i_i=$1280;var $K8_057_i_i=$1291;label=296;break;
16437 case 295:
16438 var $1293=$K8_057_i_i<<1;
16439 var $1294=(($1301+4)|0);
16440 var $1295=HEAP32[(($1294)>>2)];
16441 var $1296=$1295&-8;
16442 var $1297=($1296|0)==($qsize_0_i_i|0);
16443 if($1297){var $T_0_lcssa_i26_i=$1301;label=300;break;}else{var $T_056_i_i=$1301;var $K8_057_i_i=$1293;label=296;break;}
16444 case 296:
16445 var $K8_057_i_i;
16446 var $T_056_i_i;
16447 var $1299=$K8_057_i_i>>>31;
16448 var $1300=(($T_056_i_i+16+($1299<<2))|0);
16449 var $1301=HEAP32[(($1300)>>2)];
16450 var $1302=($1301|0)==0;
16451 if($1302){label=297;break;}else{label=295;break;}
16452 case 297:
16453 var $1304=$1300;
16454 var $1305=HEAP32[((56)>>2)];
16455 var $1306=($1304>>>0)<($1305>>>0);
16456 if($1306){label=299;break;}else{label=298;break;}
16457 case 298:
16458 HEAP32[(($1300)>>2)]=$1230;
16459 var $_sum24_i_i=((($_sum_i19_i)+(24))|0);
16460 var $1308=(($tbase_245_i+$_sum24_i_i)|0);
16461 var $1309=$1308;
16462 HEAP32[(($1309)>>2)]=$T_056_i_i;
16463 var $_sum25_i_i=((($_sum_i19_i)+(12))|0);
16464 var $1310=(($tbase_245_i+$_sum25_i_i)|0);
16465 var $1311=$1310;
16466 HEAP32[(($1311)>>2)]=$1230;
16467 var $_sum26_i_i=((($_sum_i19_i)+(8))|0);
16468 var $1312=(($tbase_245_i+$_sum26_i_i)|0);
16469 var $1313=$1312;
16470 HEAP32[(($1313)>>2)]=$1230;
16471 label=303;break;
16472 case 299:
16473 _abort();
16474 throw "Reached an unreachable!";
16475 case 300:
16476 var $T_0_lcssa_i26_i;
16477 var $1315=(($T_0_lcssa_i26_i+8)|0);
16478 var $1316=HEAP32[(($1315)>>2)];
16479 var $1317=$T_0_lcssa_i26_i;
16480 var $1318=HEAP32[((56)>>2)];
16481 var $1319=($1317>>>0)>=($1318>>>0);
16482 var $1320=$1316;
16483 var $1321=($1320>>>0)>=($1318>>>0);
16484 var $or_cond_i27_i=$1319&$1321;
16485 if($or_cond_i27_i){label=301;break;}else{label=302;break;}
16486 case 301:
16487 var $1323=(($1316+12)|0);
16488 HEAP32[(($1323)>>2)]=$1230;
16489 HEAP32[(($1315)>>2)]=$1230;
16490 var $_sum21_i_i=((($_sum_i19_i)+(8))|0);
16491 var $1324=(($tbase_245_i+$_sum21_i_i)|0);
16492 var $1325=$1324;
16493 HEAP32[(($1325)>>2)]=$1316;
16494 var $_sum22_i_i=((($_sum_i19_i)+(12))|0);
16495 var $1326=(($tbase_245_i+$_sum22_i_i)|0);
16496 var $1327=$1326;
16497 HEAP32[(($1327)>>2)]=$T_0_lcssa_i26_i;
16498 var $_sum23_i_i=((($_sum_i19_i)+(24))|0);
16499 var $1328=(($tbase_245_i+$_sum23_i_i)|0);
16500 var $1329=$1328;
16501 HEAP32[(($1329)>>2)]=0;
16502 label=303;break;
16503 case 302:
16504 _abort();
16505 throw "Reached an unreachable!";
16506 case 303:
16507 var $_sum1819_i_i=$995|8;
16508 var $1330=(($tbase_245_i+$_sum1819_i_i)|0);
16509 var $mem_0=$1330;label=341;break;
16510 case 304:
16511 var $1331=$891;
16512 var $sp_0_i_i_i=488;label=305;break;
16513 case 305:
16514 var $sp_0_i_i_i;
16515 var $1333=(($sp_0_i_i_i)|0);
16516 var $1334=HEAP32[(($1333)>>2)];
16517 var $1335=($1334>>>0)>($1331>>>0);
16518 if($1335){label=307;break;}else{label=306;break;}
16519 case 306:
16520 var $1337=(($sp_0_i_i_i+4)|0);
16521 var $1338=HEAP32[(($1337)>>2)];
16522 var $1339=(($1334+$1338)|0);
16523 var $1340=($1339>>>0)>($1331>>>0);
16524 if($1340){label=308;break;}else{label=307;break;}
16525 case 307:
16526 var $1342=(($sp_0_i_i_i+8)|0);
16527 var $1343=HEAP32[(($1342)>>2)];
16528 var $sp_0_i_i_i=$1343;label=305;break;
16529 case 308:
16530 var $_sum_i13_i=((($1338)-(47))|0);
16531 var $_sum1_i14_i=((($1338)-(39))|0);
16532 var $1344=(($1334+$_sum1_i14_i)|0);
16533 var $1345=$1344;
16534 var $1346=$1345&7;
16535 var $1347=($1346|0)==0;
16536 if($1347){var $1352=0;label=310;break;}else{label=309;break;}
16537 case 309:
16538 var $1349=(((-$1345))|0);
16539 var $1350=$1349&7;
16540 var $1352=$1350;label=310;break;
16541 case 310:
16542 var $1352;
16543 var $_sum2_i15_i=((($_sum_i13_i)+($1352))|0);
16544 var $1353=(($1334+$_sum2_i15_i)|0);
16545 var $1354=(($891+16)|0);
16546 var $1355=$1354;
16547 var $1356=($1353>>>0)<($1355>>>0);
16548 var $1357=($1356?$1331:$1353);
16549 var $1358=(($1357+8)|0);
16550 var $1359=$1358;
16551 var $1360=((($tsize_244_i)-(40))|0);
16552 var $1361=(($tbase_245_i+8)|0);
16553 var $1362=$1361;
16554 var $1363=$1362&7;
16555 var $1364=($1363|0)==0;
16556 if($1364){var $1368=0;label=312;break;}else{label=311;break;}
16557 case 311:
16558 var $1366=(((-$1362))|0);
16559 var $1367=$1366&7;
16560 var $1368=$1367;label=312;break;
16561 case 312:
16562 var $1368;
16563 var $1369=(($tbase_245_i+$1368)|0);
16564 var $1370=$1369;
16565 var $1371=((($1360)-($1368))|0);
16566 HEAP32[((64)>>2)]=$1370;
16567 HEAP32[((52)>>2)]=$1371;
16568 var $1372=$1371|1;
16569 var $_sum_i_i_i=((($1368)+(4))|0);
16570 var $1373=(($tbase_245_i+$_sum_i_i_i)|0);
16571 var $1374=$1373;
16572 HEAP32[(($1374)>>2)]=$1372;
16573 var $_sum2_i_i_i=((($tsize_244_i)-(36))|0);
16574 var $1375=(($tbase_245_i+$_sum2_i_i_i)|0);
16575 var $1376=$1375;
16576 HEAP32[(($1376)>>2)]=40;
16577 var $1377=HEAP32[((32)>>2)];
16578 HEAP32[((68)>>2)]=$1377;
16579 var $1378=(($1357+4)|0);
16580 var $1379=$1378;
16581 HEAP32[(($1379)>>2)]=27;
16582 assert(16 % 1 === 0);HEAP32[(($1358)>>2)]=HEAP32[((488)>>2)];HEAP32[((($1358)+(4))>>2)]=HEAP32[((492)>>2)];HEAP32[((($1358)+(8))>>2)]=HEAP32[((496)>>2)];HEAP32[((($1358)+(12))>>2)]=HEAP32[((500)>>2)];
16583 HEAP32[((488)>>2)]=$tbase_245_i;
16584 HEAP32[((492)>>2)]=$tsize_244_i;
16585 HEAP32[((500)>>2)]=0;
16586 HEAP32[((496)>>2)]=$1359;
16587 var $1380=(($1357+28)|0);
16588 var $1381=$1380;
16589 HEAP32[(($1381)>>2)]=7;
16590 var $1382=(($1357+32)|0);
16591 var $1383=($1382>>>0)<($1339>>>0);
16592 if($1383){var $1384=$1381;label=313;break;}else{label=314;break;}
16593 case 313:
16594 var $1384;
16595 var $1385=(($1384+4)|0);
16596 HEAP32[(($1385)>>2)]=7;
16597 var $1386=(($1384+8)|0);
16598 var $1387=$1386;
16599 var $1388=($1387>>>0)<($1339>>>0);
16600 if($1388){var $1384=$1385;label=313;break;}else{label=314;break;}
16601 case 314:
16602 var $1389=($1357|0)==($1331|0);
16603 if($1389){label=338;break;}else{label=315;break;}
16604 case 315:
16605 var $1391=$1357;
16606 var $1392=$891;
16607 var $1393=((($1391)-($1392))|0);
16608 var $1394=(($1331+$1393)|0);
16609 var $_sum3_i_i=((($1393)+(4))|0);
16610 var $1395=(($1331+$_sum3_i_i)|0);
16611 var $1396=$1395;
16612 var $1397=HEAP32[(($1396)>>2)];
16613 var $1398=$1397&-2;
16614 HEAP32[(($1396)>>2)]=$1398;
16615 var $1399=$1393|1;
16616 var $1400=(($891+4)|0);
16617 HEAP32[(($1400)>>2)]=$1399;
16618 var $1401=$1394;
16619 HEAP32[(($1401)>>2)]=$1393;
16620 var $1402=$1393>>>3;
16621 var $1403=($1393>>>0)<256;
16622 if($1403){label=316;break;}else{label=321;break;}
16623 case 316:
16624 var $1405=$1402<<1;
16625 var $1406=((80+($1405<<2))|0);
16626 var $1407=$1406;
16627 var $1408=HEAP32[((40)>>2)];
16628 var $1409=1<<$1402;
16629 var $1410=$1408&$1409;
16630 var $1411=($1410|0)==0;
16631 if($1411){label=317;break;}else{label=318;break;}
16632 case 317:
16633 var $1413=$1408|$1409;
16634 HEAP32[((40)>>2)]=$1413;
16635 var $_sum11_pre_i_i=((($1405)+(2))|0);
16636 var $_pre_i_i=((80+($_sum11_pre_i_i<<2))|0);
16637 var $F_0_i_i=$1407;var $_pre_phi_i_i=$_pre_i_i;label=320;break;
16638 case 318:
16639 var $_sum12_i_i=((($1405)+(2))|0);
16640 var $1415=((80+($_sum12_i_i<<2))|0);
16641 var $1416=HEAP32[(($1415)>>2)];
16642 var $1417=$1416;
16643 var $1418=HEAP32[((56)>>2)];
16644 var $1419=($1417>>>0)<($1418>>>0);
16645 if($1419){label=319;break;}else{var $F_0_i_i=$1416;var $_pre_phi_i_i=$1415;label=320;break;}
16646 case 319:
16647 _abort();
16648 throw "Reached an unreachable!";
16649 case 320:
16650 var $_pre_phi_i_i;
16651 var $F_0_i_i;
16652 HEAP32[(($_pre_phi_i_i)>>2)]=$891;
16653 var $1422=(($F_0_i_i+12)|0);
16654 HEAP32[(($1422)>>2)]=$891;
16655 var $1423=(($891+8)|0);
16656 HEAP32[(($1423)>>2)]=$F_0_i_i;
16657 var $1424=(($891+12)|0);
16658 HEAP32[(($1424)>>2)]=$1407;
16659 label=338;break;
16660 case 321:
16661 var $1426=$891;
16662 var $1427=$1393>>>8;
16663 var $1428=($1427|0)==0;
16664 if($1428){var $I1_0_i_i=0;label=324;break;}else{label=322;break;}
16665 case 322:
16666 var $1430=($1393>>>0)>16777215;
16667 if($1430){var $I1_0_i_i=31;label=324;break;}else{label=323;break;}
16668 case 323:
16669 var $1432=((($1427)+(1048320))|0);
16670 var $1433=$1432>>>16;
16671 var $1434=$1433&8;
16672 var $1435=$1427<<$1434;
16673 var $1436=((($1435)+(520192))|0);
16674 var $1437=$1436>>>16;
16675 var $1438=$1437&4;
16676 var $1439=$1438|$1434;
16677 var $1440=$1435<<$1438;
16678 var $1441=((($1440)+(245760))|0);
16679 var $1442=$1441>>>16;
16680 var $1443=$1442&2;
16681 var $1444=$1439|$1443;
16682 var $1445=(((14)-($1444))|0);
16683 var $1446=$1440<<$1443;
16684 var $1447=$1446>>>15;
16685 var $1448=((($1445)+($1447))|0);
16686 var $1449=$1448<<1;
16687 var $1450=((($1448)+(7))|0);
16688 var $1451=$1393>>>($1450>>>0);
16689 var $1452=$1451&1;
16690 var $1453=$1452|$1449;
16691 var $I1_0_i_i=$1453;label=324;break;
16692 case 324:
16693 var $I1_0_i_i;
16694 var $1455=((344+($I1_0_i_i<<2))|0);
16695 var $1456=(($891+28)|0);
16696 var $I1_0_c_i_i=$I1_0_i_i;
16697 HEAP32[(($1456)>>2)]=$I1_0_c_i_i;
16698 var $1457=(($891+20)|0);
16699 HEAP32[(($1457)>>2)]=0;
16700 var $1458=(($891+16)|0);
16701 HEAP32[(($1458)>>2)]=0;
16702 var $1459=HEAP32[((44)>>2)];
16703 var $1460=1<<$I1_0_i_i;
16704 var $1461=$1459&$1460;
16705 var $1462=($1461|0)==0;
16706 if($1462){label=325;break;}else{label=326;break;}
16707 case 325:
16708 var $1464=$1459|$1460;
16709 HEAP32[((44)>>2)]=$1464;
16710 HEAP32[(($1455)>>2)]=$1426;
16711 var $1465=(($891+24)|0);
16712 var $_c_i_i=$1455;
16713 HEAP32[(($1465)>>2)]=$_c_i_i;
16714 var $1466=(($891+12)|0);
16715 HEAP32[(($1466)>>2)]=$891;
16716 var $1467=(($891+8)|0);
16717 HEAP32[(($1467)>>2)]=$891;
16718 label=338;break;
16719 case 326:
16720 var $1469=HEAP32[(($1455)>>2)];
16721 var $1470=($I1_0_i_i|0)==31;
16722 if($1470){var $1475=0;label=328;break;}else{label=327;break;}
16723 case 327:
16724 var $1472=$I1_0_i_i>>>1;
16725 var $1473=(((25)-($1472))|0);
16726 var $1475=$1473;label=328;break;
16727 case 328:
16728 var $1475;
16729 var $1476=(($1469+4)|0);
16730 var $1477=HEAP32[(($1476)>>2)];
16731 var $1478=$1477&-8;
16732 var $1479=($1478|0)==($1393|0);
16733 if($1479){var $T_0_lcssa_i_i=$1469;label=335;break;}else{label=329;break;}
16734 case 329:
16735 var $1480=$1393<<$1475;
16736 var $T_015_i_i=$1469;var $K2_016_i_i=$1480;label=331;break;
16737 case 330:
16738 var $1482=$K2_016_i_i<<1;
16739 var $1483=(($1490+4)|0);
16740 var $1484=HEAP32[(($1483)>>2)];
16741 var $1485=$1484&-8;
16742 var $1486=($1485|0)==($1393|0);
16743 if($1486){var $T_0_lcssa_i_i=$1490;label=335;break;}else{var $T_015_i_i=$1490;var $K2_016_i_i=$1482;label=331;break;}
16744 case 331:
16745 var $K2_016_i_i;
16746 var $T_015_i_i;
16747 var $1488=$K2_016_i_i>>>31;
16748 var $1489=(($T_015_i_i+16+($1488<<2))|0);
16749 var $1490=HEAP32[(($1489)>>2)];
16750 var $1491=($1490|0)==0;
16751 if($1491){label=332;break;}else{label=330;break;}
16752 case 332:
16753 var $1493=$1489;
16754 var $1494=HEAP32[((56)>>2)];
16755 var $1495=($1493>>>0)<($1494>>>0);
16756 if($1495){label=334;break;}else{label=333;break;}
16757 case 333:
16758 HEAP32[(($1489)>>2)]=$1426;
16759 var $1497=(($891+24)|0);
16760 var $T_0_c8_i_i=$T_015_i_i;
16761 HEAP32[(($1497)>>2)]=$T_0_c8_i_i;
16762 var $1498=(($891+12)|0);
16763 HEAP32[(($1498)>>2)]=$891;
16764 var $1499=(($891+8)|0);
16765 HEAP32[(($1499)>>2)]=$891;
16766 label=338;break;
16767 case 334:
16768 _abort();
16769 throw "Reached an unreachable!";
16770 case 335:
16771 var $T_0_lcssa_i_i;
16772 var $1501=(($T_0_lcssa_i_i+8)|0);
16773 var $1502=HEAP32[(($1501)>>2)];
16774 var $1503=$T_0_lcssa_i_i;
16775 var $1504=HEAP32[((56)>>2)];
16776 var $1505=($1503>>>0)>=($1504>>>0);
16777 var $1506=$1502;
16778 var $1507=($1506>>>0)>=($1504>>>0);
16779 var $or_cond_i_i=$1505&$1507;
16780 if($or_cond_i_i){label=336;break;}else{label=337;break;}
16781 case 336:
16782 var $1509=(($1502+12)|0);
16783 HEAP32[(($1509)>>2)]=$1426;
16784 HEAP32[(($1501)>>2)]=$1426;
16785 var $1510=(($891+8)|0);
16786 var $_c7_i_i=$1502;
16787 HEAP32[(($1510)>>2)]=$_c7_i_i;
16788 var $1511=(($891+12)|0);
16789 var $T_0_c_i_i=$T_0_lcssa_i_i;
16790 HEAP32[(($1511)>>2)]=$T_0_c_i_i;
16791 var $1512=(($891+24)|0);
16792 HEAP32[(($1512)>>2)]=0;
16793 label=338;break;
16794 case 337:
16795 _abort();
16796 throw "Reached an unreachable!";
16797 case 338:
16798 var $1513=HEAP32[((52)>>2)];
16799 var $1514=($1513>>>0)>($nb_0>>>0);
16800 if($1514){label=339;break;}else{label=340;break;}
16801 case 339:
16802 var $1516=((($1513)-($nb_0))|0);
16803 HEAP32[((52)>>2)]=$1516;
16804 var $1517=HEAP32[((64)>>2)];
16805 var $1518=$1517;
16806 var $1519=(($1518+$nb_0)|0);
16807 var $1520=$1519;
16808 HEAP32[((64)>>2)]=$1520;
16809 var $1521=$1516|1;
16810 var $_sum_i34=((($nb_0)+(4))|0);
16811 var $1522=(($1518+$_sum_i34)|0);
16812 var $1523=$1522;
16813 HEAP32[(($1523)>>2)]=$1521;
16814 var $1524=$nb_0|3;
16815 var $1525=(($1517+4)|0);
16816 HEAP32[(($1525)>>2)]=$1524;
16817 var $1526=(($1517+8)|0);
16818 var $1527=$1526;
16819 var $mem_0=$1527;label=341;break;
16820 case 340:
16821 var $1528=___errno_location();
16822 HEAP32[(($1528)>>2)]=12;
16823 var $mem_0=0;label=341;break;
16824 case 341:
16825 var $mem_0;
16826 return $mem_0;
16827 default: assert(0, "bad label: " + label);
16828 }
16829
16830}
16831Module["_malloc"] = _malloc;
16832
16833function _free($mem){
16834 var label=0;
16835
16836 label = 1;
16837 while(1)switch(label){
16838 case 1:
16839 var $1=($mem|0)==0;
16840 if($1){label=140;break;}else{label=2;break;}
16841 case 2:
16842 var $3=((($mem)-(8))|0);
16843 var $4=$3;
16844 var $5=HEAP32[((56)>>2)];
16845 var $6=($3>>>0)<($5>>>0);
16846 if($6){label=139;break;}else{label=3;break;}
16847 case 3:
16848 var $8=((($mem)-(4))|0);
16849 var $9=$8;
16850 var $10=HEAP32[(($9)>>2)];
16851 var $11=$10&3;
16852 var $12=($11|0)==1;
16853 if($12){label=139;break;}else{label=4;break;}
16854 case 4:
16855 var $14=$10&-8;
16856 var $_sum=((($14)-(8))|0);
16857 var $15=(($mem+$_sum)|0);
16858 var $16=$15;
16859 var $17=$10&1;
16860 var $18=($17|0)==0;
16861 if($18){label=5;break;}else{var $p_0=$4;var $psize_0=$14;label=56;break;}
16862 case 5:
16863 var $20=$3;
16864 var $21=HEAP32[(($20)>>2)];
16865 var $22=($11|0)==0;
16866 if($22){label=140;break;}else{label=6;break;}
16867 case 6:
16868 var $_sum3=(((-8)-($21))|0);
16869 var $24=(($mem+$_sum3)|0);
16870 var $25=$24;
16871 var $26=((($21)+($14))|0);
16872 var $27=($24>>>0)<($5>>>0);
16873 if($27){label=139;break;}else{label=7;break;}
16874 case 7:
16875 var $29=HEAP32[((60)>>2)];
16876 var $30=($25|0)==($29|0);
16877 if($30){label=54;break;}else{label=8;break;}
16878 case 8:
16879 var $32=$21>>>3;
16880 var $33=($21>>>0)<256;
16881 if($33){label=9;break;}else{label=21;break;}
16882 case 9:
16883 var $_sum47=((($_sum3)+(8))|0);
16884 var $35=(($mem+$_sum47)|0);
16885 var $36=$35;
16886 var $37=HEAP32[(($36)>>2)];
16887 var $_sum48=((($_sum3)+(12))|0);
16888 var $38=(($mem+$_sum48)|0);
16889 var $39=$38;
16890 var $40=HEAP32[(($39)>>2)];
16891 var $41=$32<<1;
16892 var $42=((80+($41<<2))|0);
16893 var $43=$42;
16894 var $44=($37|0)==($43|0);
16895 if($44){label=12;break;}else{label=10;break;}
16896 case 10:
16897 var $46=$37;
16898 var $47=($46>>>0)<($5>>>0);
16899 if($47){label=20;break;}else{label=11;break;}
16900 case 11:
16901 var $49=(($37+12)|0);
16902 var $50=HEAP32[(($49)>>2)];
16903 var $51=($50|0)==($25|0);
16904 if($51){label=12;break;}else{label=20;break;}
16905 case 12:
16906 var $52=($40|0)==($37|0);
16907 if($52){label=13;break;}else{label=14;break;}
16908 case 13:
16909 var $54=1<<$32;
16910 var $55=$54^-1;
16911 var $56=HEAP32[((40)>>2)];
16912 var $57=$56&$55;
16913 HEAP32[((40)>>2)]=$57;
16914 var $p_0=$25;var $psize_0=$26;label=56;break;
16915 case 14:
16916 var $59=($40|0)==($43|0);
16917 if($59){label=15;break;}else{label=16;break;}
16918 case 15:
16919 var $_pre82=(($40+8)|0);
16920 var $_pre_phi83=$_pre82;label=18;break;
16921 case 16:
16922 var $61=$40;
16923 var $62=($61>>>0)<($5>>>0);
16924 if($62){label=19;break;}else{label=17;break;}
16925 case 17:
16926 var $64=(($40+8)|0);
16927 var $65=HEAP32[(($64)>>2)];
16928 var $66=($65|0)==($25|0);
16929 if($66){var $_pre_phi83=$64;label=18;break;}else{label=19;break;}
16930 case 18:
16931 var $_pre_phi83;
16932 var $67=(($37+12)|0);
16933 HEAP32[(($67)>>2)]=$40;
16934 HEAP32[(($_pre_phi83)>>2)]=$37;
16935 var $p_0=$25;var $psize_0=$26;label=56;break;
16936 case 19:
16937 _abort();
16938 throw "Reached an unreachable!";
16939 case 20:
16940 _abort();
16941 throw "Reached an unreachable!";
16942 case 21:
16943 var $69=$24;
16944 var $_sum37=((($_sum3)+(24))|0);
16945 var $70=(($mem+$_sum37)|0);
16946 var $71=$70;
16947 var $72=HEAP32[(($71)>>2)];
16948 var $_sum38=((($_sum3)+(12))|0);
16949 var $73=(($mem+$_sum38)|0);
16950 var $74=$73;
16951 var $75=HEAP32[(($74)>>2)];
16952 var $76=($75|0)==($69|0);
16953 if($76){label=27;break;}else{label=22;break;}
16954 case 22:
16955 var $_sum44=((($_sum3)+(8))|0);
16956 var $78=(($mem+$_sum44)|0);
16957 var $79=$78;
16958 var $80=HEAP32[(($79)>>2)];
16959 var $81=$80;
16960 var $82=($81>>>0)<($5>>>0);
16961 if($82){label=26;break;}else{label=23;break;}
16962 case 23:
16963 var $84=(($80+12)|0);
16964 var $85=HEAP32[(($84)>>2)];
16965 var $86=($85|0)==($69|0);
16966 if($86){label=24;break;}else{label=26;break;}
16967 case 24:
16968 var $88=(($75+8)|0);
16969 var $89=HEAP32[(($88)>>2)];
16970 var $90=($89|0)==($69|0);
16971 if($90){label=25;break;}else{label=26;break;}
16972 case 25:
16973 HEAP32[(($84)>>2)]=$75;
16974 HEAP32[(($88)>>2)]=$80;
16975 var $R_1=$75;label=34;break;
16976 case 26:
16977 _abort();
16978 throw "Reached an unreachable!";
16979 case 27:
16980 var $_sum40=((($_sum3)+(20))|0);
16981 var $93=(($mem+$_sum40)|0);
16982 var $94=$93;
16983 var $95=HEAP32[(($94)>>2)];
16984 var $96=($95|0)==0;
16985 if($96){label=28;break;}else{var $R_0=$95;var $RP_0=$94;label=29;break;}
16986 case 28:
16987 var $_sum39=((($_sum3)+(16))|0);
16988 var $98=(($mem+$_sum39)|0);
16989 var $99=$98;
16990 var $100=HEAP32[(($99)>>2)];
16991 var $101=($100|0)==0;
16992 if($101){var $R_1=0;label=34;break;}else{var $R_0=$100;var $RP_0=$99;label=29;break;}
16993 case 29:
16994 var $RP_0;
16995 var $R_0;
16996 var $102=(($R_0+20)|0);
16997 var $103=HEAP32[(($102)>>2)];
16998 var $104=($103|0)==0;
16999 if($104){label=30;break;}else{var $R_0=$103;var $RP_0=$102;label=29;break;}
17000 case 30:
17001 var $106=(($R_0+16)|0);
17002 var $107=HEAP32[(($106)>>2)];
17003 var $108=($107|0)==0;
17004 if($108){label=31;break;}else{var $R_0=$107;var $RP_0=$106;label=29;break;}
17005 case 31:
17006 var $110=$RP_0;
17007 var $111=($110>>>0)<($5>>>0);
17008 if($111){label=33;break;}else{label=32;break;}
17009 case 32:
17010 HEAP32[(($RP_0)>>2)]=0;
17011 var $R_1=$R_0;label=34;break;
17012 case 33:
17013 _abort();
17014 throw "Reached an unreachable!";
17015 case 34:
17016 var $R_1;
17017 var $115=($72|0)==0;
17018 if($115){var $p_0=$25;var $psize_0=$26;label=56;break;}else{label=35;break;}
17019 case 35:
17020 var $_sum41=((($_sum3)+(28))|0);
17021 var $117=(($mem+$_sum41)|0);
17022 var $118=$117;
17023 var $119=HEAP32[(($118)>>2)];
17024 var $120=((344+($119<<2))|0);
17025 var $121=HEAP32[(($120)>>2)];
17026 var $122=($69|0)==($121|0);
17027 if($122){label=36;break;}else{label=38;break;}
17028 case 36:
17029 HEAP32[(($120)>>2)]=$R_1;
17030 var $cond=($R_1|0)==0;
17031 if($cond){label=37;break;}else{label=44;break;}
17032 case 37:
17033 var $124=HEAP32[(($118)>>2)];
17034 var $125=1<<$124;
17035 var $126=$125^-1;
17036 var $127=HEAP32[((44)>>2)];
17037 var $128=$127&$126;
17038 HEAP32[((44)>>2)]=$128;
17039 var $p_0=$25;var $psize_0=$26;label=56;break;
17040 case 38:
17041 var $130=$72;
17042 var $131=HEAP32[((56)>>2)];
17043 var $132=($130>>>0)<($131>>>0);
17044 if($132){label=42;break;}else{label=39;break;}
17045 case 39:
17046 var $134=(($72+16)|0);
17047 var $135=HEAP32[(($134)>>2)];
17048 var $136=($135|0)==($69|0);
17049 if($136){label=40;break;}else{label=41;break;}
17050 case 40:
17051 HEAP32[(($134)>>2)]=$R_1;
17052 label=43;break;
17053 case 41:
17054 var $139=(($72+20)|0);
17055 HEAP32[(($139)>>2)]=$R_1;
17056 label=43;break;
17057 case 42:
17058 _abort();
17059 throw "Reached an unreachable!";
17060 case 43:
17061 var $142=($R_1|0)==0;
17062 if($142){var $p_0=$25;var $psize_0=$26;label=56;break;}else{label=44;break;}
17063 case 44:
17064 var $144=$R_1;
17065 var $145=HEAP32[((56)>>2)];
17066 var $146=($144>>>0)<($145>>>0);
17067 if($146){label=53;break;}else{label=45;break;}
17068 case 45:
17069 var $148=(($R_1+24)|0);
17070 HEAP32[(($148)>>2)]=$72;
17071 var $_sum42=((($_sum3)+(16))|0);
17072 var $149=(($mem+$_sum42)|0);
17073 var $150=$149;
17074 var $151=HEAP32[(($150)>>2)];
17075 var $152=($151|0)==0;
17076 if($152){label=49;break;}else{label=46;break;}
17077 case 46:
17078 var $154=$151;
17079 var $155=HEAP32[((56)>>2)];
17080 var $156=($154>>>0)<($155>>>0);
17081 if($156){label=48;break;}else{label=47;break;}
17082 case 47:
17083 var $158=(($R_1+16)|0);
17084 HEAP32[(($158)>>2)]=$151;
17085 var $159=(($151+24)|0);
17086 HEAP32[(($159)>>2)]=$R_1;
17087 label=49;break;
17088 case 48:
17089 _abort();
17090 throw "Reached an unreachable!";
17091 case 49:
17092 var $_sum43=((($_sum3)+(20))|0);
17093 var $162=(($mem+$_sum43)|0);
17094 var $163=$162;
17095 var $164=HEAP32[(($163)>>2)];
17096 var $165=($164|0)==0;
17097 if($165){var $p_0=$25;var $psize_0=$26;label=56;break;}else{label=50;break;}
17098 case 50:
17099 var $167=$164;
17100 var $168=HEAP32[((56)>>2)];
17101 var $169=($167>>>0)<($168>>>0);
17102 if($169){label=52;break;}else{label=51;break;}
17103 case 51:
17104 var $171=(($R_1+20)|0);
17105 HEAP32[(($171)>>2)]=$164;
17106 var $172=(($164+24)|0);
17107 HEAP32[(($172)>>2)]=$R_1;
17108 var $p_0=$25;var $psize_0=$26;label=56;break;
17109 case 52:
17110 _abort();
17111 throw "Reached an unreachable!";
17112 case 53:
17113 _abort();
17114 throw "Reached an unreachable!";
17115 case 54:
17116 var $_sum4=((($14)-(4))|0);
17117 var $176=(($mem+$_sum4)|0);
17118 var $177=$176;
17119 var $178=HEAP32[(($177)>>2)];
17120 var $179=$178&3;
17121 var $180=($179|0)==3;
17122 if($180){label=55;break;}else{var $p_0=$25;var $psize_0=$26;label=56;break;}
17123 case 55:
17124 HEAP32[((48)>>2)]=$26;
17125 var $182=HEAP32[(($177)>>2)];
17126 var $183=$182&-2;
17127 HEAP32[(($177)>>2)]=$183;
17128 var $184=$26|1;
17129 var $_sum35=((($_sum3)+(4))|0);
17130 var $185=(($mem+$_sum35)|0);
17131 var $186=$185;
17132 HEAP32[(($186)>>2)]=$184;
17133 var $187=$15;
17134 HEAP32[(($187)>>2)]=$26;
17135 label=140;break;
17136 case 56:
17137 var $psize_0;
17138 var $p_0;
17139 var $189=$p_0;
17140 var $190=($189>>>0)<($15>>>0);
17141 if($190){label=57;break;}else{label=139;break;}
17142 case 57:
17143 var $_sum34=((($14)-(4))|0);
17144 var $192=(($mem+$_sum34)|0);
17145 var $193=$192;
17146 var $194=HEAP32[(($193)>>2)];
17147 var $195=$194&1;
17148 var $phitmp=($195|0)==0;
17149 if($phitmp){label=139;break;}else{label=58;break;}
17150 case 58:
17151 var $197=$194&2;
17152 var $198=($197|0)==0;
17153 if($198){label=59;break;}else{label=112;break;}
17154 case 59:
17155 var $200=HEAP32[((64)>>2)];
17156 var $201=($16|0)==($200|0);
17157 if($201){label=60;break;}else{label=62;break;}
17158 case 60:
17159 var $203=HEAP32[((52)>>2)];
17160 var $204=((($203)+($psize_0))|0);
17161 HEAP32[((52)>>2)]=$204;
17162 HEAP32[((64)>>2)]=$p_0;
17163 var $205=$204|1;
17164 var $206=(($p_0+4)|0);
17165 HEAP32[(($206)>>2)]=$205;
17166 var $207=HEAP32[((60)>>2)];
17167 var $208=($p_0|0)==($207|0);
17168 if($208){label=61;break;}else{label=140;break;}
17169 case 61:
17170 HEAP32[((60)>>2)]=0;
17171 HEAP32[((48)>>2)]=0;
17172 label=140;break;
17173 case 62:
17174 var $211=HEAP32[((60)>>2)];
17175 var $212=($16|0)==($211|0);
17176 if($212){label=63;break;}else{label=64;break;}
17177 case 63:
17178 var $214=HEAP32[((48)>>2)];
17179 var $215=((($214)+($psize_0))|0);
17180 HEAP32[((48)>>2)]=$215;
17181 HEAP32[((60)>>2)]=$p_0;
17182 var $216=$215|1;
17183 var $217=(($p_0+4)|0);
17184 HEAP32[(($217)>>2)]=$216;
17185 var $218=(($189+$215)|0);
17186 var $219=$218;
17187 HEAP32[(($219)>>2)]=$215;
17188 label=140;break;
17189 case 64:
17190 var $221=$194&-8;
17191 var $222=((($221)+($psize_0))|0);
17192 var $223=$194>>>3;
17193 var $224=($194>>>0)<256;
17194 if($224){label=65;break;}else{label=77;break;}
17195 case 65:
17196 var $226=(($mem+$14)|0);
17197 var $227=$226;
17198 var $228=HEAP32[(($227)>>2)];
17199 var $_sum2829=$14|4;
17200 var $229=(($mem+$_sum2829)|0);
17201 var $230=$229;
17202 var $231=HEAP32[(($230)>>2)];
17203 var $232=$223<<1;
17204 var $233=((80+($232<<2))|0);
17205 var $234=$233;
17206 var $235=($228|0)==($234|0);
17207 if($235){label=68;break;}else{label=66;break;}
17208 case 66:
17209 var $237=$228;
17210 var $238=HEAP32[((56)>>2)];
17211 var $239=($237>>>0)<($238>>>0);
17212 if($239){label=76;break;}else{label=67;break;}
17213 case 67:
17214 var $241=(($228+12)|0);
17215 var $242=HEAP32[(($241)>>2)];
17216 var $243=($242|0)==($16|0);
17217 if($243){label=68;break;}else{label=76;break;}
17218 case 68:
17219 var $244=($231|0)==($228|0);
17220 if($244){label=69;break;}else{label=70;break;}
17221 case 69:
17222 var $246=1<<$223;
17223 var $247=$246^-1;
17224 var $248=HEAP32[((40)>>2)];
17225 var $249=$248&$247;
17226 HEAP32[((40)>>2)]=$249;
17227 label=110;break;
17228 case 70:
17229 var $251=($231|0)==($234|0);
17230 if($251){label=71;break;}else{label=72;break;}
17231 case 71:
17232 var $_pre80=(($231+8)|0);
17233 var $_pre_phi81=$_pre80;label=74;break;
17234 case 72:
17235 var $253=$231;
17236 var $254=HEAP32[((56)>>2)];
17237 var $255=($253>>>0)<($254>>>0);
17238 if($255){label=75;break;}else{label=73;break;}
17239 case 73:
17240 var $257=(($231+8)|0);
17241 var $258=HEAP32[(($257)>>2)];
17242 var $259=($258|0)==($16|0);
17243 if($259){var $_pre_phi81=$257;label=74;break;}else{label=75;break;}
17244 case 74:
17245 var $_pre_phi81;
17246 var $260=(($228+12)|0);
17247 HEAP32[(($260)>>2)]=$231;
17248 HEAP32[(($_pre_phi81)>>2)]=$228;
17249 label=110;break;
17250 case 75:
17251 _abort();
17252 throw "Reached an unreachable!";
17253 case 76:
17254 _abort();
17255 throw "Reached an unreachable!";
17256 case 77:
17257 var $262=$15;
17258 var $_sum6=((($14)+(16))|0);
17259 var $263=(($mem+$_sum6)|0);
17260 var $264=$263;
17261 var $265=HEAP32[(($264)>>2)];
17262 var $_sum78=$14|4;
17263 var $266=(($mem+$_sum78)|0);
17264 var $267=$266;
17265 var $268=HEAP32[(($267)>>2)];
17266 var $269=($268|0)==($262|0);
17267 if($269){label=83;break;}else{label=78;break;}
17268 case 78:
17269 var $271=(($mem+$14)|0);
17270 var $272=$271;
17271 var $273=HEAP32[(($272)>>2)];
17272 var $274=$273;
17273 var $275=HEAP32[((56)>>2)];
17274 var $276=($274>>>0)<($275>>>0);
17275 if($276){label=82;break;}else{label=79;break;}
17276 case 79:
17277 var $278=(($273+12)|0);
17278 var $279=HEAP32[(($278)>>2)];
17279 var $280=($279|0)==($262|0);
17280 if($280){label=80;break;}else{label=82;break;}
17281 case 80:
17282 var $282=(($268+8)|0);
17283 var $283=HEAP32[(($282)>>2)];
17284 var $284=($283|0)==($262|0);
17285 if($284){label=81;break;}else{label=82;break;}
17286 case 81:
17287 HEAP32[(($278)>>2)]=$268;
17288 HEAP32[(($282)>>2)]=$273;
17289 var $R7_1=$268;label=90;break;
17290 case 82:
17291 _abort();
17292 throw "Reached an unreachable!";
17293 case 83:
17294 var $_sum10=((($14)+(12))|0);
17295 var $287=(($mem+$_sum10)|0);
17296 var $288=$287;
17297 var $289=HEAP32[(($288)>>2)];
17298 var $290=($289|0)==0;
17299 if($290){label=84;break;}else{var $R7_0=$289;var $RP9_0=$288;label=85;break;}
17300 case 84:
17301 var $_sum9=((($14)+(8))|0);
17302 var $292=(($mem+$_sum9)|0);
17303 var $293=$292;
17304 var $294=HEAP32[(($293)>>2)];
17305 var $295=($294|0)==0;
17306 if($295){var $R7_1=0;label=90;break;}else{var $R7_0=$294;var $RP9_0=$293;label=85;break;}
17307 case 85:
17308 var $RP9_0;
17309 var $R7_0;
17310 var $296=(($R7_0+20)|0);
17311 var $297=HEAP32[(($296)>>2)];
17312 var $298=($297|0)==0;
17313 if($298){label=86;break;}else{var $R7_0=$297;var $RP9_0=$296;label=85;break;}
17314 case 86:
17315 var $300=(($R7_0+16)|0);
17316 var $301=HEAP32[(($300)>>2)];
17317 var $302=($301|0)==0;
17318 if($302){label=87;break;}else{var $R7_0=$301;var $RP9_0=$300;label=85;break;}
17319 case 87:
17320 var $304=$RP9_0;
17321 var $305=HEAP32[((56)>>2)];
17322 var $306=($304>>>0)<($305>>>0);
17323 if($306){label=89;break;}else{label=88;break;}
17324 case 88:
17325 HEAP32[(($RP9_0)>>2)]=0;
17326 var $R7_1=$R7_0;label=90;break;
17327 case 89:
17328 _abort();
17329 throw "Reached an unreachable!";
17330 case 90:
17331 var $R7_1;
17332 var $310=($265|0)==0;
17333 if($310){label=110;break;}else{label=91;break;}
17334 case 91:
17335 var $_sum21=((($14)+(20))|0);
17336 var $312=(($mem+$_sum21)|0);
17337 var $313=$312;
17338 var $314=HEAP32[(($313)>>2)];
17339 var $315=((344+($314<<2))|0);
17340 var $316=HEAP32[(($315)>>2)];
17341 var $317=($262|0)==($316|0);
17342 if($317){label=92;break;}else{label=94;break;}
17343 case 92:
17344 HEAP32[(($315)>>2)]=$R7_1;
17345 var $cond69=($R7_1|0)==0;
17346 if($cond69){label=93;break;}else{label=100;break;}
17347 case 93:
17348 var $319=HEAP32[(($313)>>2)];
17349 var $320=1<<$319;
17350 var $321=$320^-1;
17351 var $322=HEAP32[((44)>>2)];
17352 var $323=$322&$321;
17353 HEAP32[((44)>>2)]=$323;
17354 label=110;break;
17355 case 94:
17356 var $325=$265;
17357 var $326=HEAP32[((56)>>2)];
17358 var $327=($325>>>0)<($326>>>0);
17359 if($327){label=98;break;}else{label=95;break;}
17360 case 95:
17361 var $329=(($265+16)|0);
17362 var $330=HEAP32[(($329)>>2)];
17363 var $331=($330|0)==($262|0);
17364 if($331){label=96;break;}else{label=97;break;}
17365 case 96:
17366 HEAP32[(($329)>>2)]=$R7_1;
17367 label=99;break;
17368 case 97:
17369 var $334=(($265+20)|0);
17370 HEAP32[(($334)>>2)]=$R7_1;
17371 label=99;break;
17372 case 98:
17373 _abort();
17374 throw "Reached an unreachable!";
17375 case 99:
17376 var $337=($R7_1|0)==0;
17377 if($337){label=110;break;}else{label=100;break;}
17378 case 100:
17379 var $339=$R7_1;
17380 var $340=HEAP32[((56)>>2)];
17381 var $341=($339>>>0)<($340>>>0);
17382 if($341){label=109;break;}else{label=101;break;}
17383 case 101:
17384 var $343=(($R7_1+24)|0);
17385 HEAP32[(($343)>>2)]=$265;
17386 var $_sum22=((($14)+(8))|0);
17387 var $344=(($mem+$_sum22)|0);
17388 var $345=$344;
17389 var $346=HEAP32[(($345)>>2)];
17390 var $347=($346|0)==0;
17391 if($347){label=105;break;}else{label=102;break;}
17392 case 102:
17393 var $349=$346;
17394 var $350=HEAP32[((56)>>2)];
17395 var $351=($349>>>0)<($350>>>0);
17396 if($351){label=104;break;}else{label=103;break;}
17397 case 103:
17398 var $353=(($R7_1+16)|0);
17399 HEAP32[(($353)>>2)]=$346;
17400 var $354=(($346+24)|0);
17401 HEAP32[(($354)>>2)]=$R7_1;
17402 label=105;break;
17403 case 104:
17404 _abort();
17405 throw "Reached an unreachable!";
17406 case 105:
17407 var $_sum23=((($14)+(12))|0);
17408 var $357=(($mem+$_sum23)|0);
17409 var $358=$357;
17410 var $359=HEAP32[(($358)>>2)];
17411 var $360=($359|0)==0;
17412 if($360){label=110;break;}else{label=106;break;}
17413 case 106:
17414 var $362=$359;
17415 var $363=HEAP32[((56)>>2)];
17416 var $364=($362>>>0)<($363>>>0);
17417 if($364){label=108;break;}else{label=107;break;}
17418 case 107:
17419 var $366=(($R7_1+20)|0);
17420 HEAP32[(($366)>>2)]=$359;
17421 var $367=(($359+24)|0);
17422 HEAP32[(($367)>>2)]=$R7_1;
17423 label=110;break;
17424 case 108:
17425 _abort();
17426 throw "Reached an unreachable!";
17427 case 109:
17428 _abort();
17429 throw "Reached an unreachable!";
17430 case 110:
17431 var $371=$222|1;
17432 var $372=(($p_0+4)|0);
17433 HEAP32[(($372)>>2)]=$371;
17434 var $373=(($189+$222)|0);
17435 var $374=$373;
17436 HEAP32[(($374)>>2)]=$222;
17437 var $375=HEAP32[((60)>>2)];
17438 var $376=($p_0|0)==($375|0);
17439 if($376){label=111;break;}else{var $psize_1=$222;label=113;break;}
17440 case 111:
17441 HEAP32[((48)>>2)]=$222;
17442 label=140;break;
17443 case 112:
17444 var $379=$194&-2;
17445 HEAP32[(($193)>>2)]=$379;
17446 var $380=$psize_0|1;
17447 var $381=(($p_0+4)|0);
17448 HEAP32[(($381)>>2)]=$380;
17449 var $382=(($189+$psize_0)|0);
17450 var $383=$382;
17451 HEAP32[(($383)>>2)]=$psize_0;
17452 var $psize_1=$psize_0;label=113;break;
17453 case 113:
17454 var $psize_1;
17455 var $385=$psize_1>>>3;
17456 var $386=($psize_1>>>0)<256;
17457 if($386){label=114;break;}else{label=119;break;}
17458 case 114:
17459 var $388=$385<<1;
17460 var $389=((80+($388<<2))|0);
17461 var $390=$389;
17462 var $391=HEAP32[((40)>>2)];
17463 var $392=1<<$385;
17464 var $393=$391&$392;
17465 var $394=($393|0)==0;
17466 if($394){label=115;break;}else{label=116;break;}
17467 case 115:
17468 var $396=$391|$392;
17469 HEAP32[((40)>>2)]=$396;
17470 var $_sum19_pre=((($388)+(2))|0);
17471 var $_pre=((80+($_sum19_pre<<2))|0);
17472 var $F16_0=$390;var $_pre_phi=$_pre;label=118;break;
17473 case 116:
17474 var $_sum20=((($388)+(2))|0);
17475 var $398=((80+($_sum20<<2))|0);
17476 var $399=HEAP32[(($398)>>2)];
17477 var $400=$399;
17478 var $401=HEAP32[((56)>>2)];
17479 var $402=($400>>>0)<($401>>>0);
17480 if($402){label=117;break;}else{var $F16_0=$399;var $_pre_phi=$398;label=118;break;}
17481 case 117:
17482 _abort();
17483 throw "Reached an unreachable!";
17484 case 118:
17485 var $_pre_phi;
17486 var $F16_0;
17487 HEAP32[(($_pre_phi)>>2)]=$p_0;
17488 var $405=(($F16_0+12)|0);
17489 HEAP32[(($405)>>2)]=$p_0;
17490 var $406=(($p_0+8)|0);
17491 HEAP32[(($406)>>2)]=$F16_0;
17492 var $407=(($p_0+12)|0);
17493 HEAP32[(($407)>>2)]=$390;
17494 label=140;break;
17495 case 119:
17496 var $409=$p_0;
17497 var $410=$psize_1>>>8;
17498 var $411=($410|0)==0;
17499 if($411){var $I18_0=0;label=122;break;}else{label=120;break;}
17500 case 120:
17501 var $413=($psize_1>>>0)>16777215;
17502 if($413){var $I18_0=31;label=122;break;}else{label=121;break;}
17503 case 121:
17504 var $415=((($410)+(1048320))|0);
17505 var $416=$415>>>16;
17506 var $417=$416&8;
17507 var $418=$410<<$417;
17508 var $419=((($418)+(520192))|0);
17509 var $420=$419>>>16;
17510 var $421=$420&4;
17511 var $422=$421|$417;
17512 var $423=$418<<$421;
17513 var $424=((($423)+(245760))|0);
17514 var $425=$424>>>16;
17515 var $426=$425&2;
17516 var $427=$422|$426;
17517 var $428=(((14)-($427))|0);
17518 var $429=$423<<$426;
17519 var $430=$429>>>15;
17520 var $431=((($428)+($430))|0);
17521 var $432=$431<<1;
17522 var $433=((($431)+(7))|0);
17523 var $434=$psize_1>>>($433>>>0);
17524 var $435=$434&1;
17525 var $436=$435|$432;
17526 var $I18_0=$436;label=122;break;
17527 case 122:
17528 var $I18_0;
17529 var $438=((344+($I18_0<<2))|0);
17530 var $439=(($p_0+28)|0);
17531 var $I18_0_c=$I18_0;
17532 HEAP32[(($439)>>2)]=$I18_0_c;
17533 var $440=(($p_0+20)|0);
17534 HEAP32[(($440)>>2)]=0;
17535 var $441=(($p_0+16)|0);
17536 HEAP32[(($441)>>2)]=0;
17537 var $442=HEAP32[((44)>>2)];
17538 var $443=1<<$I18_0;
17539 var $444=$442&$443;
17540 var $445=($444|0)==0;
17541 if($445){label=123;break;}else{label=124;break;}
17542 case 123:
17543 var $447=$442|$443;
17544 HEAP32[((44)>>2)]=$447;
17545 HEAP32[(($438)>>2)]=$409;
17546 var $448=(($p_0+24)|0);
17547 var $_c=$438;
17548 HEAP32[(($448)>>2)]=$_c;
17549 var $449=(($p_0+12)|0);
17550 HEAP32[(($449)>>2)]=$p_0;
17551 var $450=(($p_0+8)|0);
17552 HEAP32[(($450)>>2)]=$p_0;
17553 label=136;break;
17554 case 124:
17555 var $452=HEAP32[(($438)>>2)];
17556 var $453=($I18_0|0)==31;
17557 if($453){var $458=0;label=126;break;}else{label=125;break;}
17558 case 125:
17559 var $455=$I18_0>>>1;
17560 var $456=(((25)-($455))|0);
17561 var $458=$456;label=126;break;
17562 case 126:
17563 var $458;
17564 var $459=(($452+4)|0);
17565 var $460=HEAP32[(($459)>>2)];
17566 var $461=$460&-8;
17567 var $462=($461|0)==($psize_1|0);
17568 if($462){var $T_0_lcssa=$452;label=133;break;}else{label=127;break;}
17569 case 127:
17570 var $463=$psize_1<<$458;
17571 var $T_072=$452;var $K19_073=$463;label=129;break;
17572 case 128:
17573 var $465=$K19_073<<1;
17574 var $466=(($473+4)|0);
17575 var $467=HEAP32[(($466)>>2)];
17576 var $468=$467&-8;
17577 var $469=($468|0)==($psize_1|0);
17578 if($469){var $T_0_lcssa=$473;label=133;break;}else{var $T_072=$473;var $K19_073=$465;label=129;break;}
17579 case 129:
17580 var $K19_073;
17581 var $T_072;
17582 var $471=$K19_073>>>31;
17583 var $472=(($T_072+16+($471<<2))|0);
17584 var $473=HEAP32[(($472)>>2)];
17585 var $474=($473|0)==0;
17586 if($474){label=130;break;}else{label=128;break;}
17587 case 130:
17588 var $476=$472;
17589 var $477=HEAP32[((56)>>2)];
17590 var $478=($476>>>0)<($477>>>0);
17591 if($478){label=132;break;}else{label=131;break;}
17592 case 131:
17593 HEAP32[(($472)>>2)]=$409;
17594 var $480=(($p_0+24)|0);
17595 var $T_0_c16=$T_072;
17596 HEAP32[(($480)>>2)]=$T_0_c16;
17597 var $481=(($p_0+12)|0);
17598 HEAP32[(($481)>>2)]=$p_0;
17599 var $482=(($p_0+8)|0);
17600 HEAP32[(($482)>>2)]=$p_0;
17601 label=136;break;
17602 case 132:
17603 _abort();
17604 throw "Reached an unreachable!";
17605 case 133:
17606 var $T_0_lcssa;
17607 var $484=(($T_0_lcssa+8)|0);
17608 var $485=HEAP32[(($484)>>2)];
17609 var $486=$T_0_lcssa;
17610 var $487=HEAP32[((56)>>2)];
17611 var $488=($486>>>0)>=($487>>>0);
17612 var $489=$485;
17613 var $490=($489>>>0)>=($487>>>0);
17614 var $or_cond=$488&$490;
17615 if($or_cond){label=134;break;}else{label=135;break;}
17616 case 134:
17617 var $492=(($485+12)|0);
17618 HEAP32[(($492)>>2)]=$409;
17619 HEAP32[(($484)>>2)]=$409;
17620 var $493=(($p_0+8)|0);
17621 var $_c15=$485;
17622 HEAP32[(($493)>>2)]=$_c15;
17623 var $494=(($p_0+12)|0);
17624 var $T_0_c=$T_0_lcssa;
17625 HEAP32[(($494)>>2)]=$T_0_c;
17626 var $495=(($p_0+24)|0);
17627 HEAP32[(($495)>>2)]=0;
17628 label=136;break;
17629 case 135:
17630 _abort();
17631 throw "Reached an unreachable!";
17632 case 136:
17633 var $497=HEAP32[((72)>>2)];
17634 var $498=((($497)-(1))|0);
17635 HEAP32[((72)>>2)]=$498;
17636 var $499=($498|0)==0;
17637 if($499){var $sp_0_in_i=496;label=137;break;}else{label=140;break;}
17638 case 137:
17639 var $sp_0_in_i;
17640 var $sp_0_i=HEAP32[(($sp_0_in_i)>>2)];
17641 var $500=($sp_0_i|0)==0;
17642 var $501=(($sp_0_i+8)|0);
17643 if($500){label=138;break;}else{var $sp_0_in_i=$501;label=137;break;}
17644 case 138:
17645 HEAP32[((72)>>2)]=-1;
17646 label=140;break;
17647 case 139:
17648 _abort();
17649 throw "Reached an unreachable!";
17650 case 140:
17651 return;
17652 default: assert(0, "bad label: " + label);
17653 }
17654
17655}
17656Module["_free"] = _free;
17657
17658
17659// EMSCRIPTEN_END_FUNCS
17660// EMSCRIPTEN_END_FUNCS
17661
17662// Warning: printing of i64 values may be slightly rounded! No deep i64 math used, so precise i64 code not included
17663var i64Math = null;
17664
17665// === Auto-generated postamble setup entry stuff ===
17666
17667if (memoryInitializer) {
17668 function applyData(data) {
17669 HEAPU8.set(data, STATIC_BASE);
17670 }
17671 if (ENVIRONMENT_IS_NODE || ENVIRONMENT_IS_SHELL) {
17672 applyData(Module['readBinary'](memoryInitializer));
17673 } else {
17674 addRunDependency('memory initializer');
17675 Browser.asyncLoad(memoryInitializer, function(data) {
17676 applyData(data);
17677 removeRunDependency('memory initializer');
17678 }, function(data) {
17679 throw 'could not load memory initializer ' + memoryInitializer;
17680 });
17681 }
17682}
17683
17684function ExitStatus(status) {
17685 this.name = "ExitStatus";
17686 this.message = "Program terminated with exit(" + status + ")";
17687 this.status = status;
17688};
17689ExitStatus.prototype = new Error();
17690ExitStatus.prototype.constructor = ExitStatus;
17691
17692var initialStackTop;
17693var preloadStartTime = null;
17694var calledMain = false;
17695
17696dependenciesFulfilled = function runCaller() {
17697 // If run has never been called, and we should call run (INVOKE_RUN is true, and Module.noInitialRun is not false)
17698 if (!Module['calledRun'] && shouldRunNow) run();
17699 if (!Module['calledRun']) dependenciesFulfilled = runCaller; // try this again later, after new deps are fulfilled
17700}
17701
17702Module['callMain'] = Module.callMain = function callMain(args) {
17703 assert(runDependencies == 0, 'cannot call main when async dependencies remain! (listen on __ATMAIN__)');
17704 assert(__ATPRERUN__.length == 0, 'cannot call main when preRun functions remain to be called');
17705
17706 args = args || [];
17707
17708 if (ENVIRONMENT_IS_WEB && preloadStartTime !== null) {
17709 Module.printErr('preload time: ' + (Date.now() - preloadStartTime) + ' ms');
17710 }
17711
17712 ensureInitRuntime();
17713
17714 var argc = args.length+1;
17715 function pad() {
17716 for (var i = 0; i < 4-1; i++) {
17717 argv.push(0);
17718 }
17719 }
17720 var argv = [allocate(intArrayFromString("/bin/this.program"), 'i8', ALLOC_NORMAL) ];
17721 pad();
17722 for (var i = 0; i < argc-1; i = i + 1) {
17723 argv.push(allocate(intArrayFromString(args[i]), 'i8', ALLOC_NORMAL));
17724 pad();
17725 }
17726 argv.push(0);
17727 argv = allocate(argv, 'i32', ALLOC_NORMAL);
17728
17729 initialStackTop = STACKTOP;
17730
17731 try {
17732
17733 var ret = Module['_main'](argc, argv, 0);
17734
17735
17736 // if we're not running an evented main loop, it's time to exit
17737 if (!Module['noExitRuntime']) {
17738 exit(ret);
17739 }
17740 }
17741 catch(e) {
17742 if (e instanceof ExitStatus) {
17743 // exit() throws this once it's done to make sure execution
17744 // has been stopped completely
17745 return;
17746 } else if (e == 'SimulateInfiniteLoop') {
17747 // running an evented main loop, don't immediately exit
17748 Module['noExitRuntime'] = true;
17749 return;
17750 } else {
17751 if (e && typeof e === 'object' && e.stack) Module.printErr('exception thrown: ' + [e, e.stack]);
17752 throw e;
17753 }
17754 } finally {
17755 calledMain = true;
17756 }
17757}
17758
17759
17760
17761
17762function run(args) {
17763 args = args || Module['arguments'];
17764
17765 if (preloadStartTime === null) preloadStartTime = Date.now();
17766
17767 if (runDependencies > 0) {
17768 Module.printErr('run() called, but dependencies remain, so not running');
17769 return;
17770 }
17771
17772 preRun();
17773
17774 if (runDependencies > 0) return; // a preRun added a dependency, run will be called later
17775 if (Module['calledRun']) return; // run may have just been called through dependencies being fulfilled just in this very frame
17776
17777 function doRun() {
17778 if (Module['calledRun']) return; // run may have just been called while the async setStatus time below was happening
17779 Module['calledRun'] = true;
17780
17781 ensureInitRuntime();
17782
17783 preMain();
17784
17785 if (Module['_main'] && shouldRunNow) {
17786 Module['callMain'](args);
17787 }
17788
17789 postRun();
17790 }
17791
17792 if (Module['setStatus']) {
17793 Module['setStatus']('Running...');
17794 setTimeout(function() {
17795 setTimeout(function() {
17796 Module['setStatus']('');
17797 }, 1);
17798 if (!ABORT) doRun();
17799 }, 1);
17800 } else {
17801 doRun();
17802 }
17803}
17804Module['run'] = Module.run = run;
17805
17806function exit(status) {
17807 ABORT = true;
17808 EXITSTATUS = status;
17809 STACKTOP = initialStackTop;
17810
17811 // exit the runtime
17812 exitRuntime();
17813
17814 // TODO We should handle this differently based on environment.
17815 // In the browser, the best we can do is throw an exception
17816 // to halt execution, but in node we could process.exit and
17817 // I'd imagine SM shell would have something equivalent.
17818 // This would let us set a proper exit status (which
17819 // would be great for checking test exit statuses).
17820 // https://github.com/kripken/emscripten/issues/1371
17821
17822 // throw an exception to halt the current execution
17823 throw new ExitStatus(status);
17824}
17825Module['exit'] = Module.exit = exit;
17826
17827function abort(text) {
17828 if (text) {
17829 Module.print(text);
17830 Module.printErr(text);
17831 }
17832
17833 ABORT = true;
17834 EXITSTATUS = 1;
17835
17836 throw 'abort() at ' + stackTrace();
17837}
17838Module['abort'] = Module.abort = abort;
17839
17840// {{PRE_RUN_ADDITIONS}}
17841
17842if (Module['preInit']) {
17843 if (typeof Module['preInit'] == 'function') Module['preInit'] = [Module['preInit']];
17844 while (Module['preInit'].length > 0) {
17845 Module['preInit'].pop()();
17846 }
17847}
17848
17849// shouldRunNow refers to calling main(), not run().
17850var shouldRunNow = true;
17851if (Module['noInitialRun']) {
17852 shouldRunNow = false;
17853}
17854
17855run();
17856
17857// {{POST_RUN_ADDITIONS}}
17858
17859
17860
17861
17862
17863
17864// {{MODULE_ADDITIONS}}